diff --git a/examples/oft-movement/.aptos/config.yaml b/examples/oft-movement/.aptos/config.yaml deleted file mode 100644 index 03a451d0a..000000000 --- a/examples/oft-movement/.aptos/config.yaml +++ /dev/null @@ -1,9 +0,0 @@ ---- -profiles: - default: - network: Testnet - private_key: "0xc4a953452fb957eddc47e309b5679c020e09c4d3c872bda43569cbff6671dca6" - public_key: "0x8cea84a194ce8032cdd6e12dd87735b4f03a5ba428f3c4265813c7a39ec984d8" - account: 3d24005f22a2913a9e228547177a01a817fcd5bbaa5290b07fe4826f3f31be4a - rest_url: "https://fullnode.testnet.aptoslabs.com" - faucet_url: "https://faucet.testnet.aptoslabs.com" diff --git a/examples/oft-movement/.env b/examples/oft-movement/.env deleted file mode 100644 index dc312721c..000000000 --- a/examples/oft-movement/.env +++ /dev/null @@ -1,37 +0,0 @@ -# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # -# EVM Config -# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # - -PUBLIC_KEY=0xEa3115C2aD19261E88AAc06e66ac5AFACb724b10 -PRIVATE_KEY=0x2596b2dbbdc736281b9238c76ddd2da76bcf254d5c05e3b29524138e6524e15e - -RPC_URL_BSC=https://data-seed-prebsc-1-s1.binance.org:8545 - -# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # -# Aptos Config -# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # - -APTOS_ACCOUNT_ADDRESS=0x3d24005f22a2913a9e228547177a01a817fcd5bbaa5290b07fe4826f3f31be4a -ACCOUNT_ADDRESS=0x3d24005f22a2913a9e228547177a01a817fcd5bbaa5290b07fe4826f3f31be4a -APTOS_PRIVATE_KEY=C4A953452FB957EDDC47E309B5679C020E09C4D3C872BDA43569CBFF6671DCA6 - -APTOS_API_KEY_TESTNET=aptoslabs_TE16NbnYGJc_44fhvQXZWaVqJM7rsqWKse2vE9mrZzrMo - -RPC_NODE_URL_APTOS_SANDBOX=http://host.docker.internal:8080/v1 -RPC_FAUCET_URL_APTOS_SANDBOX=http://host.docker.internal:8081/v1 - -RPC_NODE_URL_APTOS_TESTNET=https://api.testnet.aptoslabs.com/v1 -RPC_FAUCET_URL_APTOS_TESTNET=https://faucet.testnet.aptoslabs.com - -# # if .aptos/config.yaml is not present create it -# if [ ! -f .aptos/config.yaml ]; then -# aptos init --network=testnet --faucet-url=https://faucet.testnet.aptoslabs.com --private-key=$APTOS_PRIVATE_KEY -# # aptos init --network=custom --rest-url=$RPC_URL_APTOS_SANDBOX --faucet-url=$RPC_FAUCET_URL_APTOS_SANDBOX --private-key=$APTOS_PRIVATE_KEY -# fi - -# # if the folder oft/build is not present run build and deploy -# if [ ! -d oft/build ]; then -# pnpm exec ts-node tasks/move/build.ts --package-dir=oft --named-addresses oft=$APTOS_ACCOUNT_ADDRESS,oft_admin=$APTOS_ACCOUNT_ADDRESS -# pnpm exec ts-node tasks/move/deploy.ts --package-dir oft --address-name oft --named-addresses oft_admin=$APTOS_ACCOUNT_ADDRESS -# fi - diff --git a/examples/oft-movement/artifacts/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol/ILayerZeroEndpointV2.json b/examples/oft-movement/artifacts/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol/ILayerZeroEndpointV2.json deleted file mode 100644 index afe7712f4..000000000 --- a/examples/oft-movement/artifacts/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol/ILayerZeroEndpointV2.json +++ /dev/null @@ -1,1899 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "ILayerZeroEndpointV2", - "sourceName": "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "guid", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint16", - "name": "index", - "type": "uint16" - } - ], - "name": "ComposeDelivered", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "guid", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint16", - "name": "index", - "type": "uint16" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "message", - "type": "bytes" - } - ], - "name": "ComposeSent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "eid", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "newLib", - "type": "address" - } - ], - "name": "DefaultReceiveLibrarySet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "eid", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "oldLib", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "expiry", - "type": "uint256" - } - ], - "name": "DefaultReceiveLibraryTimeoutSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "eid", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "newLib", - "type": "address" - } - ], - "name": "DefaultSendLibrarySet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "delegate", - "type": "address" - } - ], - "name": "DelegateSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - } - ], - "name": "InboundNonceSkipped", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "newLib", - "type": "address" - } - ], - "name": "LibraryRegistered", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "executor", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "guid", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint16", - "name": "index", - "type": "uint16" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "gas", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "message", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "extraData", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "reason", - "type": "bytes" - } - ], - "name": "LzComposeAlert", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "executor", - "type": "address" - }, - { - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - } - ], - "indexed": false, - "internalType": "struct Origin", - "name": "origin", - "type": "tuple" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "guid", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "gas", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "message", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "extraData", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "reason", - "type": "bytes" - } - ], - "name": "LzReceiveAlert", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "token", - "type": "address" - } - ], - "name": "LzTokenSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "payloadHash", - "type": "bytes32" - } - ], - "name": "PacketBurnt", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - } - ], - "indexed": false, - "internalType": "struct Origin", - "name": "origin", - "type": "tuple" - }, - { - "indexed": false, - "internalType": "address", - "name": "receiver", - "type": "address" - } - ], - "name": "PacketDelivered", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "payloadHash", - "type": "bytes32" - } - ], - "name": "PacketNilified", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes", - "name": "encodedPayload", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "options", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "address", - "name": "sendLibrary", - "type": "address" - } - ], - "name": "PacketSent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - } - ], - "indexed": false, - "internalType": "struct Origin", - "name": "origin", - "type": "tuple" - }, - { - "indexed": false, - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "payloadHash", - "type": "bytes32" - } - ], - "name": "PacketVerified", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "eid", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "newLib", - "type": "address" - } - ], - "name": "ReceiveLibrarySet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "eid", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "oldLib", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "timeout", - "type": "uint256" - } - ], - "name": "ReceiveLibraryTimeoutSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "eid", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "newLib", - "type": "address" - } - ], - "name": "SendLibrarySet", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_oapp", - "type": "address" - }, - { - "internalType": "uint32", - "name": "_srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_sender", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "_nonce", - "type": "uint64" - }, - { - "internalType": "bytes32", - "name": "_payloadHash", - "type": "bytes32" - } - ], - "name": "burn", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_oapp", - "type": "address" - }, - { - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - } - ], - "internalType": "struct Origin", - "name": "_origin", - "type": "tuple" - }, - { - "internalType": "bytes32", - "name": "_guid", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "_message", - "type": "bytes" - } - ], - "name": "clear", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_from", - "type": "address" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "_guid", - "type": "bytes32" - }, - { - "internalType": "uint16", - "name": "_index", - "type": "uint16" - } - ], - "name": "composeQueue", - "outputs": [ - { - "internalType": "bytes32", - "name": "messageHash", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_eid", - "type": "uint32" - } - ], - "name": "defaultReceiveLibrary", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_eid", - "type": "uint32" - } - ], - "name": "defaultReceiveLibraryTimeout", - "outputs": [ - { - "internalType": "address", - "name": "lib", - "type": "address" - }, - { - "internalType": "uint256", - "name": "expiry", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_eid", - "type": "uint32" - } - ], - "name": "defaultSendLibrary", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "eid", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_oapp", - "type": "address" - }, - { - "internalType": "address", - "name": "_lib", - "type": "address" - }, - { - "internalType": "uint32", - "name": "_eid", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "_configType", - "type": "uint32" - } - ], - "name": "getConfig", - "outputs": [ - { - "internalType": "bytes", - "name": "config", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_receiver", - "type": "address" - }, - { - "internalType": "uint32", - "name": "_eid", - "type": "uint32" - } - ], - "name": "getReceiveLibrary", - "outputs": [ - { - "internalType": "address", - "name": "lib", - "type": "address" - }, - { - "internalType": "bool", - "name": "isDefault", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getRegisteredLibraries", - "outputs": [ - { - "internalType": "address[]", - "name": "", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getSendContext", - "outputs": [ - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sender", - "type": "address" - }, - { - "internalType": "uint32", - "name": "_eid", - "type": "uint32" - } - ], - "name": "getSendLibrary", - "outputs": [ - { - "internalType": "address", - "name": "lib", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_receiver", - "type": "address" - }, - { - "internalType": "uint32", - "name": "_srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_sender", - "type": "bytes32" - } - ], - "name": "inboundNonce", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_receiver", - "type": "address" - }, - { - "internalType": "uint32", - "name": "_srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_sender", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "_nonce", - "type": "uint64" - } - ], - "name": "inboundPayloadHash", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - } - ], - "internalType": "struct Origin", - "name": "_origin", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_receiver", - "type": "address" - } - ], - "name": "initializable", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sender", - "type": "address" - }, - { - "internalType": "uint32", - "name": "_eid", - "type": "uint32" - } - ], - "name": "isDefaultSendLibrary", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_lib", - "type": "address" - } - ], - "name": "isRegisteredLibrary", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "isSendingMessage", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_eid", - "type": "uint32" - } - ], - "name": "isSupportedEid", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_receiver", - "type": "address" - }, - { - "internalType": "uint32", - "name": "_eid", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_lib", - "type": "address" - } - ], - "name": "isValidReceiveLibrary", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_receiver", - "type": "address" - }, - { - "internalType": "uint32", - "name": "_srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_sender", - "type": "bytes32" - } - ], - "name": "lazyInboundNonce", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_from", - "type": "address" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "_guid", - "type": "bytes32" - }, - { - "internalType": "uint16", - "name": "_index", - "type": "uint16" - }, - { - "internalType": "bytes", - "name": "_message", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "lzCompose", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - } - ], - "internalType": "struct Origin", - "name": "_origin", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_receiver", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "_guid", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "_message", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "lzReceive", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "lzToken", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "nativeToken", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sender", - "type": "address" - }, - { - "internalType": "uint32", - "name": "_dstEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_receiver", - "type": "bytes32" - } - ], - "name": "nextGuid", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_oapp", - "type": "address" - }, - { - "internalType": "uint32", - "name": "_srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_sender", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "_nonce", - "type": "uint64" - }, - { - "internalType": "bytes32", - "name": "_payloadHash", - "type": "bytes32" - } - ], - "name": "nilify", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sender", - "type": "address" - }, - { - "internalType": "uint32", - "name": "_dstEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_receiver", - "type": "bytes32" - } - ], - "name": "outboundNonce", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "receiver", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "message", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "options", - "type": "bytes" - }, - { - "internalType": "bool", - "name": "payInLzToken", - "type": "bool" - } - ], - "internalType": "struct MessagingParams", - "name": "_params", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_sender", - "type": "address" - } - ], - "name": "quote", - "outputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "nativeFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "lzTokenFee", - "type": "uint256" - } - ], - "internalType": "struct MessagingFee", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_receiver", - "type": "address" - }, - { - "internalType": "uint32", - "name": "_eid", - "type": "uint32" - } - ], - "name": "receiveLibraryTimeout", - "outputs": [ - { - "internalType": "address", - "name": "lib", - "type": "address" - }, - { - "internalType": "uint256", - "name": "expiry", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_lib", - "type": "address" - } - ], - "name": "registerLibrary", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "receiver", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "message", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "options", - "type": "bytes" - }, - { - "internalType": "bool", - "name": "payInLzToken", - "type": "bool" - } - ], - "internalType": "struct MessagingParams", - "name": "_params", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_refundAddress", - "type": "address" - } - ], - "name": "send", - "outputs": [ - { - "components": [ - { - "internalType": "bytes32", - "name": "guid", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "nativeFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "lzTokenFee", - "type": "uint256" - } - ], - "internalType": "struct MessagingFee", - "name": "fee", - "type": "tuple" - } - ], - "internalType": "struct MessagingReceipt", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "_guid", - "type": "bytes32" - }, - { - "internalType": "uint16", - "name": "_index", - "type": "uint16" - }, - { - "internalType": "bytes", - "name": "_message", - "type": "bytes" - } - ], - "name": "sendCompose", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_oapp", - "type": "address" - }, - { - "internalType": "address", - "name": "_lib", - "type": "address" - }, - { - "components": [ - { - "internalType": "uint32", - "name": "eid", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "configType", - "type": "uint32" - }, - { - "internalType": "bytes", - "name": "config", - "type": "bytes" - } - ], - "internalType": "struct SetConfigParam[]", - "name": "_params", - "type": "tuple[]" - } - ], - "name": "setConfig", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_eid", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_newLib", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_gracePeriod", - "type": "uint256" - } - ], - "name": "setDefaultReceiveLibrary", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_eid", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_lib", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_expiry", - "type": "uint256" - } - ], - "name": "setDefaultReceiveLibraryTimeout", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_eid", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_newLib", - "type": "address" - } - ], - "name": "setDefaultSendLibrary", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_delegate", - "type": "address" - } - ], - "name": "setDelegate", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_lzToken", - "type": "address" - } - ], - "name": "setLzToken", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_oapp", - "type": "address" - }, - { - "internalType": "uint32", - "name": "_eid", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_newLib", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_gracePeriod", - "type": "uint256" - } - ], - "name": "setReceiveLibrary", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_oapp", - "type": "address" - }, - { - "internalType": "uint32", - "name": "_eid", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_lib", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_expiry", - "type": "uint256" - } - ], - "name": "setReceiveLibraryTimeout", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_oapp", - "type": "address" - }, - { - "internalType": "uint32", - "name": "_eid", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_newLib", - "type": "address" - } - ], - "name": "setSendLibrary", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_oapp", - "type": "address" - }, - { - "internalType": "uint32", - "name": "_srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_sender", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "_nonce", - "type": "uint64" - } - ], - "name": "skip", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - } - ], - "internalType": "struct Origin", - "name": "_origin", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_receiver", - "type": "address" - } - ], - "name": "verifiable", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - } - ], - "internalType": "struct Origin", - "name": "_origin", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_receiver", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "_payloadHash", - "type": "bytes32" - } - ], - "name": "verify", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "0x", - "deployedBytecode": "0x", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/examples/oft-movement/artifacts/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol/ILayerZeroReceiver.json b/examples/oft-movement/artifacts/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol/ILayerZeroReceiver.json deleted file mode 100644 index de4eaf06f..000000000 --- a/examples/oft-movement/artifacts/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol/ILayerZeroReceiver.json +++ /dev/null @@ -1,121 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "ILayerZeroReceiver", - "sourceName": "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol", - "abi": [ - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - } - ], - "internalType": "struct Origin", - "name": "_origin", - "type": "tuple" - } - ], - "name": "allowInitializePath", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - } - ], - "internalType": "struct Origin", - "name": "_origin", - "type": "tuple" - }, - { - "internalType": "bytes32", - "name": "_guid", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "_message", - "type": "bytes" - }, - { - "internalType": "address", - "name": "_executor", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "lzReceive", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_eid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_sender", - "type": "bytes32" - } - ], - "name": "nextNonce", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "bytecode": "0x", - "deployedBytecode": "0x", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/examples/oft-movement/artifacts/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol/IMessageLib.json b/examples/oft-movement/artifacts/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol/IMessageLib.json deleted file mode 100644 index 968e49ced..000000000 --- a/examples/oft-movement/artifacts/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol/IMessageLib.json +++ /dev/null @@ -1,149 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "IMessageLib", - "sourceName": "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "uint32", - "name": "_eid", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_oapp", - "type": "address" - }, - { - "internalType": "uint32", - "name": "_configType", - "type": "uint32" - } - ], - "name": "getConfig", - "outputs": [ - { - "internalType": "bytes", - "name": "config", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_eid", - "type": "uint32" - } - ], - "name": "isSupportedEid", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "messageLibType", - "outputs": [ - { - "internalType": "enum MessageLibType", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_oapp", - "type": "address" - }, - { - "components": [ - { - "internalType": "uint32", - "name": "eid", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "configType", - "type": "uint32" - }, - { - "internalType": "bytes", - "name": "config", - "type": "bytes" - } - ], - "internalType": "struct SetConfigParam[]", - "name": "_config", - "type": "tuple[]" - } - ], - "name": "setConfig", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "version", - "outputs": [ - { - "internalType": "uint64", - "name": "major", - "type": "uint64" - }, - { - "internalType": "uint8", - "name": "minor", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "endpointVersion", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "bytecode": "0x", - "deployedBytecode": "0x", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/examples/oft-movement/artifacts/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol/IMessageLibManager.json b/examples/oft-movement/artifacts/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol/IMessageLibManager.json deleted file mode 100644 index 3186df602..000000000 --- a/examples/oft-movement/artifacts/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol/IMessageLibManager.json +++ /dev/null @@ -1,646 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "IMessageLibManager", - "sourceName": "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "eid", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "newLib", - "type": "address" - } - ], - "name": "DefaultReceiveLibrarySet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "eid", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "oldLib", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "expiry", - "type": "uint256" - } - ], - "name": "DefaultReceiveLibraryTimeoutSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "eid", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "newLib", - "type": "address" - } - ], - "name": "DefaultSendLibrarySet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "newLib", - "type": "address" - } - ], - "name": "LibraryRegistered", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "eid", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "newLib", - "type": "address" - } - ], - "name": "ReceiveLibrarySet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "eid", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "oldLib", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "timeout", - "type": "uint256" - } - ], - "name": "ReceiveLibraryTimeoutSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "eid", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "newLib", - "type": "address" - } - ], - "name": "SendLibrarySet", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_eid", - "type": "uint32" - } - ], - "name": "defaultReceiveLibrary", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_eid", - "type": "uint32" - } - ], - "name": "defaultReceiveLibraryTimeout", - "outputs": [ - { - "internalType": "address", - "name": "lib", - "type": "address" - }, - { - "internalType": "uint256", - "name": "expiry", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_eid", - "type": "uint32" - } - ], - "name": "defaultSendLibrary", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_oapp", - "type": "address" - }, - { - "internalType": "address", - "name": "_lib", - "type": "address" - }, - { - "internalType": "uint32", - "name": "_eid", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "_configType", - "type": "uint32" - } - ], - "name": "getConfig", - "outputs": [ - { - "internalType": "bytes", - "name": "config", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_receiver", - "type": "address" - }, - { - "internalType": "uint32", - "name": "_eid", - "type": "uint32" - } - ], - "name": "getReceiveLibrary", - "outputs": [ - { - "internalType": "address", - "name": "lib", - "type": "address" - }, - { - "internalType": "bool", - "name": "isDefault", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getRegisteredLibraries", - "outputs": [ - { - "internalType": "address[]", - "name": "", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sender", - "type": "address" - }, - { - "internalType": "uint32", - "name": "_eid", - "type": "uint32" - } - ], - "name": "getSendLibrary", - "outputs": [ - { - "internalType": "address", - "name": "lib", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sender", - "type": "address" - }, - { - "internalType": "uint32", - "name": "_eid", - "type": "uint32" - } - ], - "name": "isDefaultSendLibrary", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_lib", - "type": "address" - } - ], - "name": "isRegisteredLibrary", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_eid", - "type": "uint32" - } - ], - "name": "isSupportedEid", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_receiver", - "type": "address" - }, - { - "internalType": "uint32", - "name": "_eid", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_lib", - "type": "address" - } - ], - "name": "isValidReceiveLibrary", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_receiver", - "type": "address" - }, - { - "internalType": "uint32", - "name": "_eid", - "type": "uint32" - } - ], - "name": "receiveLibraryTimeout", - "outputs": [ - { - "internalType": "address", - "name": "lib", - "type": "address" - }, - { - "internalType": "uint256", - "name": "expiry", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_lib", - "type": "address" - } - ], - "name": "registerLibrary", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_oapp", - "type": "address" - }, - { - "internalType": "address", - "name": "_lib", - "type": "address" - }, - { - "components": [ - { - "internalType": "uint32", - "name": "eid", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "configType", - "type": "uint32" - }, - { - "internalType": "bytes", - "name": "config", - "type": "bytes" - } - ], - "internalType": "struct SetConfigParam[]", - "name": "_params", - "type": "tuple[]" - } - ], - "name": "setConfig", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_eid", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_newLib", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_gracePeriod", - "type": "uint256" - } - ], - "name": "setDefaultReceiveLibrary", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_eid", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_lib", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_expiry", - "type": "uint256" - } - ], - "name": "setDefaultReceiveLibraryTimeout", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_eid", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_newLib", - "type": "address" - } - ], - "name": "setDefaultSendLibrary", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_oapp", - "type": "address" - }, - { - "internalType": "uint32", - "name": "_eid", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_newLib", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_gracePeriod", - "type": "uint256" - } - ], - "name": "setReceiveLibrary", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_oapp", - "type": "address" - }, - { - "internalType": "uint32", - "name": "_eid", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_lib", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_expiry", - "type": "uint256" - } - ], - "name": "setReceiveLibraryTimeout", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_oapp", - "type": "address" - }, - { - "internalType": "uint32", - "name": "_eid", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_newLib", - "type": "address" - } - ], - "name": "setSendLibrary", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "0x", - "deployedBytecode": "0x", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/examples/oft-movement/artifacts/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol/IMessagingChannel.json b/examples/oft-movement/artifacts/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol/IMessagingChannel.json deleted file mode 100644 index d584cc4a4..000000000 --- a/examples/oft-movement/artifacts/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol/IMessagingChannel.json +++ /dev/null @@ -1,373 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "IMessagingChannel", - "sourceName": "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - } - ], - "name": "InboundNonceSkipped", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "payloadHash", - "type": "bytes32" - } - ], - "name": "PacketBurnt", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "payloadHash", - "type": "bytes32" - } - ], - "name": "PacketNilified", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_oapp", - "type": "address" - }, - { - "internalType": "uint32", - "name": "_srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_sender", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "_nonce", - "type": "uint64" - }, - { - "internalType": "bytes32", - "name": "_payloadHash", - "type": "bytes32" - } - ], - "name": "burn", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "eid", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_receiver", - "type": "address" - }, - { - "internalType": "uint32", - "name": "_srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_sender", - "type": "bytes32" - } - ], - "name": "inboundNonce", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_receiver", - "type": "address" - }, - { - "internalType": "uint32", - "name": "_srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_sender", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "_nonce", - "type": "uint64" - } - ], - "name": "inboundPayloadHash", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_receiver", - "type": "address" - }, - { - "internalType": "uint32", - "name": "_srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_sender", - "type": "bytes32" - } - ], - "name": "lazyInboundNonce", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sender", - "type": "address" - }, - { - "internalType": "uint32", - "name": "_dstEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_receiver", - "type": "bytes32" - } - ], - "name": "nextGuid", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_oapp", - "type": "address" - }, - { - "internalType": "uint32", - "name": "_srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_sender", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "_nonce", - "type": "uint64" - }, - { - "internalType": "bytes32", - "name": "_payloadHash", - "type": "bytes32" - } - ], - "name": "nilify", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sender", - "type": "address" - }, - { - "internalType": "uint32", - "name": "_dstEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_receiver", - "type": "bytes32" - } - ], - "name": "outboundNonce", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_oapp", - "type": "address" - }, - { - "internalType": "uint32", - "name": "_srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_sender", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "_nonce", - "type": "uint64" - } - ], - "name": "skip", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "0x", - "deployedBytecode": "0x", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/examples/oft-movement/artifacts/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol/IMessagingComposer.json b/examples/oft-movement/artifacts/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol/IMessagingComposer.json deleted file mode 100644 index 36b041bdf..000000000 --- a/examples/oft-movement/artifacts/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol/IMessagingComposer.json +++ /dev/null @@ -1,246 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "IMessagingComposer", - "sourceName": "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "guid", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint16", - "name": "index", - "type": "uint16" - } - ], - "name": "ComposeDelivered", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "guid", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint16", - "name": "index", - "type": "uint16" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "message", - "type": "bytes" - } - ], - "name": "ComposeSent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "executor", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "guid", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint16", - "name": "index", - "type": "uint16" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "gas", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "message", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "extraData", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "reason", - "type": "bytes" - } - ], - "name": "LzComposeAlert", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_from", - "type": "address" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "_guid", - "type": "bytes32" - }, - { - "internalType": "uint16", - "name": "_index", - "type": "uint16" - } - ], - "name": "composeQueue", - "outputs": [ - { - "internalType": "bytes32", - "name": "messageHash", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_from", - "type": "address" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "_guid", - "type": "bytes32" - }, - { - "internalType": "uint16", - "name": "_index", - "type": "uint16" - }, - { - "internalType": "bytes", - "name": "_message", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "lzCompose", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "_guid", - "type": "bytes32" - }, - { - "internalType": "uint16", - "name": "_index", - "type": "uint16" - }, - { - "internalType": "bytes", - "name": "_message", - "type": "bytes" - } - ], - "name": "sendCompose", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "0x", - "deployedBytecode": "0x", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/examples/oft-movement/artifacts/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol/IMessagingContext.json b/examples/oft-movement/artifacts/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol/IMessagingContext.json deleted file mode 100644 index 982ed160c..000000000 --- a/examples/oft-movement/artifacts/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol/IMessagingContext.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "IMessagingContext", - "sourceName": "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol", - "abi": [ - { - "inputs": [], - "name": "getSendContext", - "outputs": [ - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "isSendingMessage", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "bytecode": "0x", - "deployedBytecode": "0x", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/examples/oft-movement/artifacts/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol/ISendLib.json b/examples/oft-movement/artifacts/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol/ISendLib.json deleted file mode 100644 index d43219dfc..000000000 --- a/examples/oft-movement/artifacts/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol/ISendLib.json +++ /dev/null @@ -1,364 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "ISendLib", - "sourceName": "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "uint32", - "name": "_eid", - "type": "uint32" - }, - { - "internalType": "address", - "name": "_oapp", - "type": "address" - }, - { - "internalType": "uint32", - "name": "_configType", - "type": "uint32" - } - ], - "name": "getConfig", - "outputs": [ - { - "internalType": "bytes", - "name": "config", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_eid", - "type": "uint32" - } - ], - "name": "isSupportedEid", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "messageLibType", - "outputs": [ - { - "internalType": "enum MessageLibType", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - }, - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "receiver", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "guid", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "message", - "type": "bytes" - } - ], - "internalType": "struct Packet", - "name": "_packet", - "type": "tuple" - }, - { - "internalType": "bytes", - "name": "_options", - "type": "bytes" - }, - { - "internalType": "bool", - "name": "_payInLzToken", - "type": "bool" - } - ], - "name": "quote", - "outputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "nativeFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "lzTokenFee", - "type": "uint256" - } - ], - "internalType": "struct MessagingFee", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - }, - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "receiver", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "guid", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "message", - "type": "bytes" - } - ], - "internalType": "struct Packet", - "name": "_packet", - "type": "tuple" - }, - { - "internalType": "bytes", - "name": "_options", - "type": "bytes" - }, - { - "internalType": "bool", - "name": "_payInLzToken", - "type": "bool" - } - ], - "name": "send", - "outputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "nativeFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "lzTokenFee", - "type": "uint256" - } - ], - "internalType": "struct MessagingFee", - "name": "", - "type": "tuple" - }, - { - "internalType": "bytes", - "name": "encodedPacket", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_oapp", - "type": "address" - }, - { - "components": [ - { - "internalType": "uint32", - "name": "eid", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "configType", - "type": "uint32" - }, - { - "internalType": "bytes", - "name": "config", - "type": "bytes" - } - ], - "internalType": "struct SetConfigParam[]", - "name": "_config", - "type": "tuple[]" - } - ], - "name": "setConfig", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_treasury", - "type": "address" - } - ], - "name": "setTreasury", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "version", - "outputs": [ - { - "internalType": "uint64", - "name": "major", - "type": "uint64" - }, - { - "internalType": "uint8", - "name": "minor", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "endpointVersion", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "withdrawFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_lzToken", - "type": "address" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "withdrawLzTokenFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "0x", - "deployedBytecode": "0x", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/examples/oft-movement/artifacts/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol/AddressCast.json b/examples/oft-movement/artifacts/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol/AddressCast.json deleted file mode 100644 index 349afd276..000000000 --- a/examples/oft-movement/artifacts/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol/AddressCast.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "AddressCast", - "sourceName": "@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol", - "abi": [ - { - "inputs": [], - "name": "AddressCast_InvalidAddress", - "type": "error" - }, - { - "inputs": [], - "name": "AddressCast_InvalidSizeForAddress", - "type": "error" - } - ], - "bytecode": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212205c7c912ee158597c362dd2231f967bbff1f2e5e9420ddb60614885a7b61ff2c564736f6c63430008160033", - "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212205c7c912ee158597c362dd2231f967bbff1f2e5e9420ddb60614885a7b61ff2c564736f6c63430008160033", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/examples/oft-movement/artifacts/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol/PacketV1Codec.json b/examples/oft-movement/artifacts/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol/PacketV1Codec.json deleted file mode 100644 index e50b123dc..000000000 --- a/examples/oft-movement/artifacts/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol/PacketV1Codec.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "PacketV1Codec", - "sourceName": "@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol", - "abi": [], - "bytecode": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220689bf5153250d295608081dab5723d9ebaca3e92d1943d871fd765e980c21c9864736f6c63430008160033", - "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220689bf5153250d295608081dab5723d9ebaca3e92d1943d871fd765e980c21c9864736f6c63430008160033", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/examples/oft-movement/artifacts/@layerzerolabs/oapp-evm/contracts/oapp/OApp.sol/OApp.json b/examples/oft-movement/artifacts/@layerzerolabs/oapp-evm/contracts/oapp/OApp.sol/OApp.json deleted file mode 100644 index 57a583b89..000000000 --- a/examples/oft-movement/artifacts/@layerzerolabs/oapp-evm/contracts/oapp/OApp.sol/OApp.json +++ /dev/null @@ -1,405 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "OApp", - "sourceName": "@layerzerolabs/oapp-evm/contracts/oapp/OApp.sol", - "abi": [ - { - "inputs": [], - "name": "InvalidDelegate", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidEndpointCall", - "type": "error" - }, - { - "inputs": [], - "name": "LzTokenUnavailable", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "eid", - "type": "uint32" - } - ], - "name": "NoPeer", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "msgValue", - "type": "uint256" - } - ], - "name": "NotEnoughNative", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "addr", - "type": "address" - } - ], - "name": "OnlyEndpoint", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "eid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - } - ], - "name": "OnlyPeer", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "OwnableInvalidOwner", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "OwnableUnauthorizedAccount", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "eid", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "peer", - "type": "bytes32" - } - ], - "name": "PeerSet", - "type": "event" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - } - ], - "internalType": "struct Origin", - "name": "origin", - "type": "tuple" - } - ], - "name": "allowInitializePath", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "endpoint", - "outputs": [ - { - "internalType": "contract ILayerZeroEndpointV2", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - } - ], - "internalType": "struct Origin", - "name": "", - "type": "tuple" - }, - { - "internalType": "bytes", - "name": "", - "type": "bytes" - }, - { - "internalType": "address", - "name": "_sender", - "type": "address" - } - ], - "name": "isComposeMsgSender", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - } - ], - "internalType": "struct Origin", - "name": "_origin", - "type": "tuple" - }, - { - "internalType": "bytes32", - "name": "_guid", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "_message", - "type": "bytes" - }, - { - "internalType": "address", - "name": "_executor", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "lzReceive", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "nextNonce", - "outputs": [ - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "oAppVersion", - "outputs": [ - { - "internalType": "uint64", - "name": "senderVersion", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "receiverVersion", - "type": "uint64" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "eid", - "type": "uint32" - } - ], - "name": "peers", - "outputs": [ - { - "internalType": "bytes32", - "name": "peer", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_delegate", - "type": "address" - } - ], - "name": "setDelegate", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_eid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_peer", - "type": "bytes32" - } - ], - "name": "setPeer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "0x", - "deployedBytecode": "0x", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/examples/oft-movement/artifacts/@layerzerolabs/oapp-evm/contracts/oapp/OAppCore.sol/OAppCore.json b/examples/oft-movement/artifacts/@layerzerolabs/oapp-evm/contracts/oapp/OAppCore.sol/OAppCore.json deleted file mode 100644 index 83e37dcd2..000000000 --- a/examples/oft-movement/artifacts/@layerzerolabs/oapp-evm/contracts/oapp/OAppCore.sol/OAppCore.json +++ /dev/null @@ -1,222 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "OAppCore", - "sourceName": "@layerzerolabs/oapp-evm/contracts/oapp/OAppCore.sol", - "abi": [ - { - "inputs": [], - "name": "InvalidDelegate", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidEndpointCall", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "eid", - "type": "uint32" - } - ], - "name": "NoPeer", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "eid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - } - ], - "name": "OnlyPeer", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "OwnableInvalidOwner", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "OwnableUnauthorizedAccount", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "eid", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "peer", - "type": "bytes32" - } - ], - "name": "PeerSet", - "type": "event" - }, - { - "inputs": [], - "name": "endpoint", - "outputs": [ - { - "internalType": "contract ILayerZeroEndpointV2", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "oAppVersion", - "outputs": [ - { - "internalType": "uint64", - "name": "senderVersion", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "receiverVersion", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "eid", - "type": "uint32" - } - ], - "name": "peers", - "outputs": [ - { - "internalType": "bytes32", - "name": "peer", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_delegate", - "type": "address" - } - ], - "name": "setDelegate", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_eid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_peer", - "type": "bytes32" - } - ], - "name": "setPeer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "0x", - "deployedBytecode": "0x", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/examples/oft-movement/artifacts/@layerzerolabs/oapp-evm/contracts/oapp/OAppReceiver.sol/OAppReceiver.json b/examples/oft-movement/artifacts/@layerzerolabs/oapp-evm/contracts/oapp/OAppReceiver.sol/OAppReceiver.json deleted file mode 100644 index 86cd47e07..000000000 --- a/examples/oft-movement/artifacts/@layerzerolabs/oapp-evm/contracts/oapp/OAppReceiver.sol/OAppReceiver.json +++ /dev/null @@ -1,389 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "OAppReceiver", - "sourceName": "@layerzerolabs/oapp-evm/contracts/oapp/OAppReceiver.sol", - "abi": [ - { - "inputs": [], - "name": "InvalidDelegate", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidEndpointCall", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "eid", - "type": "uint32" - } - ], - "name": "NoPeer", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "addr", - "type": "address" - } - ], - "name": "OnlyEndpoint", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "eid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - } - ], - "name": "OnlyPeer", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "OwnableInvalidOwner", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "OwnableUnauthorizedAccount", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "eid", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "peer", - "type": "bytes32" - } - ], - "name": "PeerSet", - "type": "event" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - } - ], - "internalType": "struct Origin", - "name": "origin", - "type": "tuple" - } - ], - "name": "allowInitializePath", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "endpoint", - "outputs": [ - { - "internalType": "contract ILayerZeroEndpointV2", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - } - ], - "internalType": "struct Origin", - "name": "", - "type": "tuple" - }, - { - "internalType": "bytes", - "name": "", - "type": "bytes" - }, - { - "internalType": "address", - "name": "_sender", - "type": "address" - } - ], - "name": "isComposeMsgSender", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - } - ], - "internalType": "struct Origin", - "name": "_origin", - "type": "tuple" - }, - { - "internalType": "bytes32", - "name": "_guid", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "_message", - "type": "bytes" - }, - { - "internalType": "address", - "name": "_executor", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "lzReceive", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "nextNonce", - "outputs": [ - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "oAppVersion", - "outputs": [ - { - "internalType": "uint64", - "name": "senderVersion", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "receiverVersion", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "eid", - "type": "uint32" - } - ], - "name": "peers", - "outputs": [ - { - "internalType": "bytes32", - "name": "peer", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_delegate", - "type": "address" - } - ], - "name": "setDelegate", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_eid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_peer", - "type": "bytes32" - } - ], - "name": "setPeer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "0x", - "deployedBytecode": "0x", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/examples/oft-movement/artifacts/@layerzerolabs/oapp-evm/contracts/oapp/OAppSender.sol/OAppSender.json b/examples/oft-movement/artifacts/@layerzerolabs/oapp-evm/contracts/oapp/OAppSender.sol/OAppSender.json deleted file mode 100644 index ebde70df5..000000000 --- a/examples/oft-movement/artifacts/@layerzerolabs/oapp-evm/contracts/oapp/OAppSender.sol/OAppSender.json +++ /dev/null @@ -1,238 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "OAppSender", - "sourceName": "@layerzerolabs/oapp-evm/contracts/oapp/OAppSender.sol", - "abi": [ - { - "inputs": [], - "name": "InvalidDelegate", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidEndpointCall", - "type": "error" - }, - { - "inputs": [], - "name": "LzTokenUnavailable", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "eid", - "type": "uint32" - } - ], - "name": "NoPeer", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "msgValue", - "type": "uint256" - } - ], - "name": "NotEnoughNative", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "eid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - } - ], - "name": "OnlyPeer", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "OwnableInvalidOwner", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "OwnableUnauthorizedAccount", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "eid", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "peer", - "type": "bytes32" - } - ], - "name": "PeerSet", - "type": "event" - }, - { - "inputs": [], - "name": "endpoint", - "outputs": [ - { - "internalType": "contract ILayerZeroEndpointV2", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "oAppVersion", - "outputs": [ - { - "internalType": "uint64", - "name": "senderVersion", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "receiverVersion", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "eid", - "type": "uint32" - } - ], - "name": "peers", - "outputs": [ - { - "internalType": "bytes32", - "name": "peer", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_delegate", - "type": "address" - } - ], - "name": "setDelegate", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_eid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_peer", - "type": "bytes32" - } - ], - "name": "setPeer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "0x", - "deployedBytecode": "0x", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/examples/oft-movement/artifacts/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppCore.sol/IOAppCore.json b/examples/oft-movement/artifacts/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppCore.sol/IOAppCore.json deleted file mode 100644 index fca1e9da8..000000000 --- a/examples/oft-movement/artifacts/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppCore.sol/IOAppCore.json +++ /dev/null @@ -1,148 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "IOAppCore", - "sourceName": "@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppCore.sol", - "abi": [ - { - "inputs": [], - "name": "InvalidDelegate", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidEndpointCall", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "eid", - "type": "uint32" - } - ], - "name": "NoPeer", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "eid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - } - ], - "name": "OnlyPeer", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "eid", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "peer", - "type": "bytes32" - } - ], - "name": "PeerSet", - "type": "event" - }, - { - "inputs": [], - "name": "endpoint", - "outputs": [ - { - "internalType": "contract ILayerZeroEndpointV2", - "name": "iEndpoint", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "oAppVersion", - "outputs": [ - { - "internalType": "uint64", - "name": "senderVersion", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "receiverVersion", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_eid", - "type": "uint32" - } - ], - "name": "peers", - "outputs": [ - { - "internalType": "bytes32", - "name": "peer", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_delegate", - "type": "address" - } - ], - "name": "setDelegate", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_eid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_peer", - "type": "bytes32" - } - ], - "name": "setPeer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "0x", - "deployedBytecode": "0x", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/examples/oft-movement/artifacts/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppMsgInspector.sol/IOAppMsgInspector.json b/examples/oft-movement/artifacts/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppMsgInspector.sol/IOAppMsgInspector.json deleted file mode 100644 index 911abf95e..000000000 --- a/examples/oft-movement/artifacts/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppMsgInspector.sol/IOAppMsgInspector.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "IOAppMsgInspector", - "sourceName": "@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppMsgInspector.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "bytes", - "name": "message", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "options", - "type": "bytes" - } - ], - "name": "InspectionFailed", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_message", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "_options", - "type": "bytes" - } - ], - "name": "inspect", - "outputs": [ - { - "internalType": "bool", - "name": "valid", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "bytecode": "0x", - "deployedBytecode": "0x", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/examples/oft-movement/artifacts/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppOptionsType3.sol/IOAppOptionsType3.json b/examples/oft-movement/artifacts/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppOptionsType3.sol/IOAppOptionsType3.json deleted file mode 100644 index 83a6e0d87..000000000 --- a/examples/oft-movement/artifacts/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppOptionsType3.sol/IOAppOptionsType3.json +++ /dev/null @@ -1,111 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "IOAppOptionsType3", - "sourceName": "@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppOptionsType3.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "bytes", - "name": "options", - "type": "bytes" - } - ], - "name": "InvalidOptions", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "eid", - "type": "uint32" - }, - { - "internalType": "uint16", - "name": "msgType", - "type": "uint16" - }, - { - "internalType": "bytes", - "name": "options", - "type": "bytes" - } - ], - "indexed": false, - "internalType": "struct EnforcedOptionParam[]", - "name": "_enforcedOptions", - "type": "tuple[]" - } - ], - "name": "EnforcedOptionSet", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_eid", - "type": "uint32" - }, - { - "internalType": "uint16", - "name": "_msgType", - "type": "uint16" - }, - { - "internalType": "bytes", - "name": "_extraOptions", - "type": "bytes" - } - ], - "name": "combineOptions", - "outputs": [ - { - "internalType": "bytes", - "name": "options", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "eid", - "type": "uint32" - }, - { - "internalType": "uint16", - "name": "msgType", - "type": "uint16" - }, - { - "internalType": "bytes", - "name": "options", - "type": "bytes" - } - ], - "internalType": "struct EnforcedOptionParam[]", - "name": "_enforcedOptions", - "type": "tuple[]" - } - ], - "name": "setEnforcedOptions", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "0x", - "deployedBytecode": "0x", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/examples/oft-movement/artifacts/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppReceiver.sol/IOAppReceiver.json b/examples/oft-movement/artifacts/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppReceiver.sol/IOAppReceiver.json deleted file mode 100644 index 41870b7b9..000000000 --- a/examples/oft-movement/artifacts/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppReceiver.sol/IOAppReceiver.json +++ /dev/null @@ -1,167 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "IOAppReceiver", - "sourceName": "@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppReceiver.sol", - "abi": [ - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - } - ], - "internalType": "struct Origin", - "name": "_origin", - "type": "tuple" - } - ], - "name": "allowInitializePath", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - } - ], - "internalType": "struct Origin", - "name": "_origin", - "type": "tuple" - }, - { - "internalType": "bytes", - "name": "_message", - "type": "bytes" - }, - { - "internalType": "address", - "name": "_sender", - "type": "address" - } - ], - "name": "isComposeMsgSender", - "outputs": [ - { - "internalType": "bool", - "name": "isSender", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - } - ], - "internalType": "struct Origin", - "name": "_origin", - "type": "tuple" - }, - { - "internalType": "bytes32", - "name": "_guid", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "_message", - "type": "bytes" - }, - { - "internalType": "address", - "name": "_executor", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "lzReceive", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_eid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_sender", - "type": "bytes32" - } - ], - "name": "nextNonce", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "bytecode": "0x", - "deployedBytecode": "0x", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/examples/oft-movement/artifacts/@layerzerolabs/oapp-evm/contracts/oapp/libs/OAppOptionsType3.sol/OAppOptionsType3.json b/examples/oft-movement/artifacts/@layerzerolabs/oapp-evm/contracts/oapp/libs/OAppOptionsType3.sol/OAppOptionsType3.json deleted file mode 100644 index f92fd6d97..000000000 --- a/examples/oft-movement/artifacts/@layerzerolabs/oapp-evm/contracts/oapp/libs/OAppOptionsType3.sol/OAppOptionsType3.json +++ /dev/null @@ -1,209 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "OAppOptionsType3", - "sourceName": "@layerzerolabs/oapp-evm/contracts/oapp/libs/OAppOptionsType3.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "bytes", - "name": "options", - "type": "bytes" - } - ], - "name": "InvalidOptions", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "OwnableInvalidOwner", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "OwnableUnauthorizedAccount", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "eid", - "type": "uint32" - }, - { - "internalType": "uint16", - "name": "msgType", - "type": "uint16" - }, - { - "internalType": "bytes", - "name": "options", - "type": "bytes" - } - ], - "indexed": false, - "internalType": "struct EnforcedOptionParam[]", - "name": "_enforcedOptions", - "type": "tuple[]" - } - ], - "name": "EnforcedOptionSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_eid", - "type": "uint32" - }, - { - "internalType": "uint16", - "name": "_msgType", - "type": "uint16" - }, - { - "internalType": "bytes", - "name": "_extraOptions", - "type": "bytes" - } - ], - "name": "combineOptions", - "outputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "eid", - "type": "uint32" - }, - { - "internalType": "uint16", - "name": "msgType", - "type": "uint16" - } - ], - "name": "enforcedOptions", - "outputs": [ - { - "internalType": "bytes", - "name": "enforcedOption", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "eid", - "type": "uint32" - }, - { - "internalType": "uint16", - "name": "msgType", - "type": "uint16" - }, - { - "internalType": "bytes", - "name": "options", - "type": "bytes" - } - ], - "internalType": "struct EnforcedOptionParam[]", - "name": "_enforcedOptions", - "type": "tuple[]" - } - ], - "name": "setEnforcedOptions", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "0x", - "deployedBytecode": "0x", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/examples/oft-movement/artifacts/@layerzerolabs/oapp-evm/contracts/precrime/OAppPreCrimeSimulator.sol/OAppPreCrimeSimulator.json b/examples/oft-movement/artifacts/@layerzerolabs/oapp-evm/contracts/precrime/OAppPreCrimeSimulator.sol/OAppPreCrimeSimulator.json deleted file mode 100644 index 435188e05..000000000 --- a/examples/oft-movement/artifacts/@layerzerolabs/oapp-evm/contracts/precrime/OAppPreCrimeSimulator.sol/OAppPreCrimeSimulator.json +++ /dev/null @@ -1,299 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "OAppPreCrimeSimulator", - "sourceName": "@layerzerolabs/oapp-evm/contracts/precrime/OAppPreCrimeSimulator.sol", - "abi": [ - { - "inputs": [], - "name": "OnlySelf", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "OwnableInvalidOwner", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "OwnableUnauthorizedAccount", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "result", - "type": "bytes" - } - ], - "name": "SimulationResult", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "preCrimeAddress", - "type": "address" - } - ], - "name": "PreCrimeSet", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_eid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_peer", - "type": "bytes32" - } - ], - "name": "isPeer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - } - ], - "internalType": "struct Origin", - "name": "origin", - "type": "tuple" - }, - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "guid", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "address", - "name": "executor", - "type": "address" - }, - { - "internalType": "bytes", - "name": "message", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "extraData", - "type": "bytes" - } - ], - "internalType": "struct InboundPacket[]", - "name": "_packets", - "type": "tuple[]" - } - ], - "name": "lzReceiveAndRevert", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - } - ], - "internalType": "struct Origin", - "name": "_origin", - "type": "tuple" - }, - { - "internalType": "bytes32", - "name": "_guid", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "_message", - "type": "bytes" - }, - { - "internalType": "address", - "name": "_executor", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "lzReceiveSimulate", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "oApp", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "preCrime", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_preCrime", - "type": "address" - } - ], - "name": "setPreCrime", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "0x", - "deployedBytecode": "0x", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/examples/oft-movement/artifacts/@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IOAppPreCrimeSimulator.sol/IOAppPreCrimeSimulator.json b/examples/oft-movement/artifacts/@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IOAppPreCrimeSimulator.sol/IOAppPreCrimeSimulator.json deleted file mode 100644 index d91ba4553..000000000 --- a/examples/oft-movement/artifacts/@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IOAppPreCrimeSimulator.sol/IOAppPreCrimeSimulator.json +++ /dev/null @@ -1,175 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "IOAppPreCrimeSimulator", - "sourceName": "@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IOAppPreCrimeSimulator.sol", - "abi": [ - { - "inputs": [], - "name": "OnlySelf", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "result", - "type": "bytes" - } - ], - "name": "SimulationResult", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "preCrimeAddress", - "type": "address" - } - ], - "name": "PreCrimeSet", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_eid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_peer", - "type": "bytes32" - } - ], - "name": "isPeer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - } - ], - "internalType": "struct Origin", - "name": "origin", - "type": "tuple" - }, - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "guid", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "address", - "name": "executor", - "type": "address" - }, - { - "internalType": "bytes", - "name": "message", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "extraData", - "type": "bytes" - } - ], - "internalType": "struct InboundPacket[]", - "name": "_packets", - "type": "tuple[]" - } - ], - "name": "lzReceiveAndRevert", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "oApp", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "preCrime", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_preCrime", - "type": "address" - } - ], - "name": "setPreCrime", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "0x", - "deployedBytecode": "0x", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/examples/oft-movement/artifacts/@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IPreCrime.sol/IPreCrime.json b/examples/oft-movement/artifacts/@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IPreCrime.sol/IPreCrime.json deleted file mode 100644 index 44d3e616c..000000000 --- a/examples/oft-movement/artifacts/@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IPreCrime.sol/IPreCrime.json +++ /dev/null @@ -1,188 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "IPreCrime", - "sourceName": "@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IPreCrime.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "bytes", - "name": "crime", - "type": "bytes" - } - ], - "name": "CrimeFound", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "eid", - "type": "uint32" - }, - { - "internalType": "bytes", - "name": "reason", - "type": "bytes" - } - ], - "name": "InvalidSimulationResult", - "type": "error" - }, - { - "inputs": [], - "name": "OnlyOffChain", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "max", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "actual", - "type": "uint256" - } - ], - "name": "PacketOversize", - "type": "error" - }, - { - "inputs": [], - "name": "PacketUnsorted", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "reason", - "type": "bytes" - } - ], - "name": "SimulationFailed", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "eid", - "type": "uint32" - } - ], - "name": "SimulationResultNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "buildSimulationResult", - "outputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes[]", - "name": "_packets", - "type": "bytes[]" - }, - { - "internalType": "uint256[]", - "name": "_packetMsgValues", - "type": "uint256[]" - } - ], - "name": "getConfig", - "outputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes[]", - "name": "_packets", - "type": "bytes[]" - }, - { - "internalType": "uint256[]", - "name": "_packetMsgValues", - "type": "uint256[]" - }, - { - "internalType": "bytes[]", - "name": "_simulations", - "type": "bytes[]" - } - ], - "name": "preCrime", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes[]", - "name": "_packets", - "type": "bytes[]" - }, - { - "internalType": "uint256[]", - "name": "_packetMsgValues", - "type": "uint256[]" - } - ], - "name": "simulate", - "outputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "version", - "outputs": [ - { - "internalType": "uint64", - "name": "major", - "type": "uint64" - }, - { - "internalType": "uint8", - "name": "minor", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "bytecode": "0x", - "deployedBytecode": "0x", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/examples/oft-movement/artifacts/@layerzerolabs/oapp-evm/contracts/precrime/libs/Packet.sol/PacketDecoder.json b/examples/oft-movement/artifacts/@layerzerolabs/oapp-evm/contracts/precrime/libs/Packet.sol/PacketDecoder.json deleted file mode 100644 index f6b990584..000000000 --- a/examples/oft-movement/artifacts/@layerzerolabs/oapp-evm/contracts/precrime/libs/Packet.sol/PacketDecoder.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "PacketDecoder", - "sourceName": "@layerzerolabs/oapp-evm/contracts/precrime/libs/Packet.sol", - "abi": [], - "bytecode": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212205ff555c10480a219ee8a8785b0c889b29899f48f67e301d65976bb7b9bda2a0664736f6c63430008160033", - "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212205ff555c10480a219ee8a8785b0c889b29899f48f67e301d65976bb7b9bda2a0664736f6c63430008160033", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/examples/oft-movement/artifacts/@layerzerolabs/oft-evm/contracts/OFT.sol/OFT.json b/examples/oft-movement/artifacts/@layerzerolabs/oft-evm/contracts/OFT.sol/OFT.json deleted file mode 100644 index a82ba8721..000000000 --- a/examples/oft-movement/artifacts/@layerzerolabs/oft-evm/contracts/OFT.sol/OFT.json +++ /dev/null @@ -1,1585 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "OFT", - "sourceName": "@layerzerolabs/oft-evm/contracts/OFT.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "allowance", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "needed", - "type": "uint256" - } - ], - "name": "ERC20InsufficientAllowance", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "balance", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "needed", - "type": "uint256" - } - ], - "name": "ERC20InsufficientBalance", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "approver", - "type": "address" - } - ], - "name": "ERC20InvalidApprover", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "receiver", - "type": "address" - } - ], - "name": "ERC20InvalidReceiver", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "ERC20InvalidSender", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - } - ], - "name": "ERC20InvalidSpender", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidDelegate", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidEndpointCall", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidLocalDecimals", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "options", - "type": "bytes" - } - ], - "name": "InvalidOptions", - "type": "error" - }, - { - "inputs": [], - "name": "LzTokenUnavailable", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "eid", - "type": "uint32" - } - ], - "name": "NoPeer", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "msgValue", - "type": "uint256" - } - ], - "name": "NotEnoughNative", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "addr", - "type": "address" - } - ], - "name": "OnlyEndpoint", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "eid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - } - ], - "name": "OnlyPeer", - "type": "error" - }, - { - "inputs": [], - "name": "OnlySelf", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "OwnableInvalidOwner", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "OwnableUnauthorizedAccount", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - } - ], - "name": "SafeERC20FailedOperation", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "result", - "type": "bytes" - } - ], - "name": "SimulationResult", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "amountLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minAmountLD", - "type": "uint256" - } - ], - "name": "SlippageExceeded", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "eid", - "type": "uint32" - }, - { - "internalType": "uint16", - "name": "msgType", - "type": "uint16" - }, - { - "internalType": "bytes", - "name": "options", - "type": "bytes" - } - ], - "indexed": false, - "internalType": "struct EnforcedOptionParam[]", - "name": "_enforcedOptions", - "type": "tuple[]" - } - ], - "name": "EnforcedOptionSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "inspector", - "type": "address" - } - ], - "name": "MsgInspectorSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "guid", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "address", - "name": "toAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amountReceivedLD", - "type": "uint256" - } - ], - "name": "OFTReceived", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "guid", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "address", - "name": "fromAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amountSentLD", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amountReceivedLD", - "type": "uint256" - } - ], - "name": "OFTSent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "eid", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "peer", - "type": "bytes32" - } - ], - "name": "PeerSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "preCrimeAddress", - "type": "address" - } - ], - "name": "PreCrimeSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "inputs": [], - "name": "SEND", - "outputs": [ - { - "internalType": "uint16", - "name": "", - "type": "uint16" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "SEND_AND_CALL", - "outputs": [ - { - "internalType": "uint16", - "name": "", - "type": "uint16" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - } - ], - "internalType": "struct Origin", - "name": "origin", - "type": "tuple" - } - ], - "name": "allowInitializePath", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "spender", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "approvalRequired", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_eid", - "type": "uint32" - }, - { - "internalType": "uint16", - "name": "_msgType", - "type": "uint16" - }, - { - "internalType": "bytes", - "name": "_extraOptions", - "type": "bytes" - } - ], - "name": "combineOptions", - "outputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "decimalConversionRate", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "decimals", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "endpoint", - "outputs": [ - { - "internalType": "contract ILayerZeroEndpointV2", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "eid", - "type": "uint32" - }, - { - "internalType": "uint16", - "name": "msgType", - "type": "uint16" - } - ], - "name": "enforcedOptions", - "outputs": [ - { - "internalType": "bytes", - "name": "enforcedOption", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - } - ], - "internalType": "struct Origin", - "name": "", - "type": "tuple" - }, - { - "internalType": "bytes", - "name": "", - "type": "bytes" - }, - { - "internalType": "address", - "name": "_sender", - "type": "address" - } - ], - "name": "isComposeMsgSender", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_eid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_peer", - "type": "bytes32" - } - ], - "name": "isPeer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - } - ], - "internalType": "struct Origin", - "name": "_origin", - "type": "tuple" - }, - { - "internalType": "bytes32", - "name": "_guid", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "_message", - "type": "bytes" - }, - { - "internalType": "address", - "name": "_executor", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "lzReceive", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - } - ], - "internalType": "struct Origin", - "name": "origin", - "type": "tuple" - }, - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "guid", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "address", - "name": "executor", - "type": "address" - }, - { - "internalType": "bytes", - "name": "message", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "extraData", - "type": "bytes" - } - ], - "internalType": "struct InboundPacket[]", - "name": "_packets", - "type": "tuple[]" - } - ], - "name": "lzReceiveAndRevert", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - } - ], - "internalType": "struct Origin", - "name": "_origin", - "type": "tuple" - }, - { - "internalType": "bytes32", - "name": "_guid", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "_message", - "type": "bytes" - }, - { - "internalType": "address", - "name": "_executor", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "lzReceiveSimulate", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "msgInspector", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "nextNonce", - "outputs": [ - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "oApp", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "oAppVersion", - "outputs": [ - { - "internalType": "uint64", - "name": "senderVersion", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "receiverVersion", - "type": "uint64" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [], - "name": "oftVersion", - "outputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - }, - { - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "eid", - "type": "uint32" - } - ], - "name": "peers", - "outputs": [ - { - "internalType": "bytes32", - "name": "peer", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "preCrime", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "to", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amountLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minAmountLD", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "extraOptions", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "composeMsg", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "oftCmd", - "type": "bytes" - } - ], - "internalType": "struct SendParam", - "name": "_sendParam", - "type": "tuple" - } - ], - "name": "quoteOFT", - "outputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "minAmountLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxAmountLD", - "type": "uint256" - } - ], - "internalType": "struct OFTLimit", - "name": "oftLimit", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "int256", - "name": "feeAmountLD", - "type": "int256" - }, - { - "internalType": "string", - "name": "description", - "type": "string" - } - ], - "internalType": "struct OFTFeeDetail[]", - "name": "oftFeeDetails", - "type": "tuple[]" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "amountSentLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "amountReceivedLD", - "type": "uint256" - } - ], - "internalType": "struct OFTReceipt", - "name": "oftReceipt", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "to", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amountLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minAmountLD", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "extraOptions", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "composeMsg", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "oftCmd", - "type": "bytes" - } - ], - "internalType": "struct SendParam", - "name": "_sendParam", - "type": "tuple" - }, - { - "internalType": "bool", - "name": "_payInLzToken", - "type": "bool" - } - ], - "name": "quoteSend", - "outputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "nativeFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "lzTokenFee", - "type": "uint256" - } - ], - "internalType": "struct MessagingFee", - "name": "msgFee", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "to", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amountLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minAmountLD", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "extraOptions", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "composeMsg", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "oftCmd", - "type": "bytes" - } - ], - "internalType": "struct SendParam", - "name": "_sendParam", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "nativeFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "lzTokenFee", - "type": "uint256" - } - ], - "internalType": "struct MessagingFee", - "name": "_fee", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_refundAddress", - "type": "address" - } - ], - "name": "send", - "outputs": [ - { - "components": [ - { - "internalType": "bytes32", - "name": "guid", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "nativeFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "lzTokenFee", - "type": "uint256" - } - ], - "internalType": "struct MessagingFee", - "name": "fee", - "type": "tuple" - } - ], - "internalType": "struct MessagingReceipt", - "name": "msgReceipt", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "amountSentLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "amountReceivedLD", - "type": "uint256" - } - ], - "internalType": "struct OFTReceipt", - "name": "oftReceipt", - "type": "tuple" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_delegate", - "type": "address" - } - ], - "name": "setDelegate", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "eid", - "type": "uint32" - }, - { - "internalType": "uint16", - "name": "msgType", - "type": "uint16" - }, - { - "internalType": "bytes", - "name": "options", - "type": "bytes" - } - ], - "internalType": "struct EnforcedOptionParam[]", - "name": "_enforcedOptions", - "type": "tuple[]" - } - ], - "name": "setEnforcedOptions", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_msgInspector", - "type": "address" - } - ], - "name": "setMsgInspector", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_eid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_peer", - "type": "bytes32" - } - ], - "name": "setPeer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_preCrime", - "type": "address" - } - ], - "name": "setPreCrime", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "sharedDecimals", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "token", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "0x", - "deployedBytecode": "0x", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/examples/oft-movement/artifacts/@layerzerolabs/oft-evm/contracts/OFTCore.sol/OFTCore.json b/examples/oft-movement/artifacts/@layerzerolabs/oft-evm/contracts/OFTCore.sol/OFTCore.json deleted file mode 100644 index b86ea63ce..000000000 --- a/examples/oft-movement/artifacts/@layerzerolabs/oft-evm/contracts/OFTCore.sol/OFTCore.json +++ /dev/null @@ -1,1277 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "OFTCore", - "sourceName": "@layerzerolabs/oft-evm/contracts/OFTCore.sol", - "abi": [ - { - "inputs": [], - "name": "InvalidDelegate", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidEndpointCall", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidLocalDecimals", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "options", - "type": "bytes" - } - ], - "name": "InvalidOptions", - "type": "error" - }, - { - "inputs": [], - "name": "LzTokenUnavailable", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "eid", - "type": "uint32" - } - ], - "name": "NoPeer", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "msgValue", - "type": "uint256" - } - ], - "name": "NotEnoughNative", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "addr", - "type": "address" - } - ], - "name": "OnlyEndpoint", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "eid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - } - ], - "name": "OnlyPeer", - "type": "error" - }, - { - "inputs": [], - "name": "OnlySelf", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "OwnableInvalidOwner", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "OwnableUnauthorizedAccount", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - } - ], - "name": "SafeERC20FailedOperation", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "result", - "type": "bytes" - } - ], - "name": "SimulationResult", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "amountLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minAmountLD", - "type": "uint256" - } - ], - "name": "SlippageExceeded", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "eid", - "type": "uint32" - }, - { - "internalType": "uint16", - "name": "msgType", - "type": "uint16" - }, - { - "internalType": "bytes", - "name": "options", - "type": "bytes" - } - ], - "indexed": false, - "internalType": "struct EnforcedOptionParam[]", - "name": "_enforcedOptions", - "type": "tuple[]" - } - ], - "name": "EnforcedOptionSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "inspector", - "type": "address" - } - ], - "name": "MsgInspectorSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "guid", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "address", - "name": "toAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amountReceivedLD", - "type": "uint256" - } - ], - "name": "OFTReceived", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "guid", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "address", - "name": "fromAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amountSentLD", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amountReceivedLD", - "type": "uint256" - } - ], - "name": "OFTSent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "eid", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "peer", - "type": "bytes32" - } - ], - "name": "PeerSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "preCrimeAddress", - "type": "address" - } - ], - "name": "PreCrimeSet", - "type": "event" - }, - { - "inputs": [], - "name": "SEND", - "outputs": [ - { - "internalType": "uint16", - "name": "", - "type": "uint16" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "SEND_AND_CALL", - "outputs": [ - { - "internalType": "uint16", - "name": "", - "type": "uint16" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - } - ], - "internalType": "struct Origin", - "name": "origin", - "type": "tuple" - } - ], - "name": "allowInitializePath", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "approvalRequired", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_eid", - "type": "uint32" - }, - { - "internalType": "uint16", - "name": "_msgType", - "type": "uint16" - }, - { - "internalType": "bytes", - "name": "_extraOptions", - "type": "bytes" - } - ], - "name": "combineOptions", - "outputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "decimalConversionRate", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "endpoint", - "outputs": [ - { - "internalType": "contract ILayerZeroEndpointV2", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "eid", - "type": "uint32" - }, - { - "internalType": "uint16", - "name": "msgType", - "type": "uint16" - } - ], - "name": "enforcedOptions", - "outputs": [ - { - "internalType": "bytes", - "name": "enforcedOption", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - } - ], - "internalType": "struct Origin", - "name": "", - "type": "tuple" - }, - { - "internalType": "bytes", - "name": "", - "type": "bytes" - }, - { - "internalType": "address", - "name": "_sender", - "type": "address" - } - ], - "name": "isComposeMsgSender", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_eid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_peer", - "type": "bytes32" - } - ], - "name": "isPeer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - } - ], - "internalType": "struct Origin", - "name": "_origin", - "type": "tuple" - }, - { - "internalType": "bytes32", - "name": "_guid", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "_message", - "type": "bytes" - }, - { - "internalType": "address", - "name": "_executor", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "lzReceive", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - } - ], - "internalType": "struct Origin", - "name": "origin", - "type": "tuple" - }, - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "guid", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "address", - "name": "executor", - "type": "address" - }, - { - "internalType": "bytes", - "name": "message", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "extraData", - "type": "bytes" - } - ], - "internalType": "struct InboundPacket[]", - "name": "_packets", - "type": "tuple[]" - } - ], - "name": "lzReceiveAndRevert", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - } - ], - "internalType": "struct Origin", - "name": "_origin", - "type": "tuple" - }, - { - "internalType": "bytes32", - "name": "_guid", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "_message", - "type": "bytes" - }, - { - "internalType": "address", - "name": "_executor", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "lzReceiveSimulate", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "msgInspector", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "nextNonce", - "outputs": [ - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "oApp", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "oAppVersion", - "outputs": [ - { - "internalType": "uint64", - "name": "senderVersion", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "receiverVersion", - "type": "uint64" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [], - "name": "oftVersion", - "outputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - }, - { - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "eid", - "type": "uint32" - } - ], - "name": "peers", - "outputs": [ - { - "internalType": "bytes32", - "name": "peer", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "preCrime", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "to", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amountLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minAmountLD", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "extraOptions", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "composeMsg", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "oftCmd", - "type": "bytes" - } - ], - "internalType": "struct SendParam", - "name": "_sendParam", - "type": "tuple" - } - ], - "name": "quoteOFT", - "outputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "minAmountLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxAmountLD", - "type": "uint256" - } - ], - "internalType": "struct OFTLimit", - "name": "oftLimit", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "int256", - "name": "feeAmountLD", - "type": "int256" - }, - { - "internalType": "string", - "name": "description", - "type": "string" - } - ], - "internalType": "struct OFTFeeDetail[]", - "name": "oftFeeDetails", - "type": "tuple[]" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "amountSentLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "amountReceivedLD", - "type": "uint256" - } - ], - "internalType": "struct OFTReceipt", - "name": "oftReceipt", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "to", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amountLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minAmountLD", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "extraOptions", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "composeMsg", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "oftCmd", - "type": "bytes" - } - ], - "internalType": "struct SendParam", - "name": "_sendParam", - "type": "tuple" - }, - { - "internalType": "bool", - "name": "_payInLzToken", - "type": "bool" - } - ], - "name": "quoteSend", - "outputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "nativeFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "lzTokenFee", - "type": "uint256" - } - ], - "internalType": "struct MessagingFee", - "name": "msgFee", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "to", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amountLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minAmountLD", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "extraOptions", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "composeMsg", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "oftCmd", - "type": "bytes" - } - ], - "internalType": "struct SendParam", - "name": "_sendParam", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "nativeFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "lzTokenFee", - "type": "uint256" - } - ], - "internalType": "struct MessagingFee", - "name": "_fee", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_refundAddress", - "type": "address" - } - ], - "name": "send", - "outputs": [ - { - "components": [ - { - "internalType": "bytes32", - "name": "guid", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "nativeFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "lzTokenFee", - "type": "uint256" - } - ], - "internalType": "struct MessagingFee", - "name": "fee", - "type": "tuple" - } - ], - "internalType": "struct MessagingReceipt", - "name": "msgReceipt", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "amountSentLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "amountReceivedLD", - "type": "uint256" - } - ], - "internalType": "struct OFTReceipt", - "name": "oftReceipt", - "type": "tuple" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_delegate", - "type": "address" - } - ], - "name": "setDelegate", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "eid", - "type": "uint32" - }, - { - "internalType": "uint16", - "name": "msgType", - "type": "uint16" - }, - { - "internalType": "bytes", - "name": "options", - "type": "bytes" - } - ], - "internalType": "struct EnforcedOptionParam[]", - "name": "_enforcedOptions", - "type": "tuple[]" - } - ], - "name": "setEnforcedOptions", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_msgInspector", - "type": "address" - } - ], - "name": "setMsgInspector", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_eid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_peer", - "type": "bytes32" - } - ], - "name": "setPeer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_preCrime", - "type": "address" - } - ], - "name": "setPreCrime", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "sharedDecimals", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "token", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "0x", - "deployedBytecode": "0x", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/examples/oft-movement/artifacts/@layerzerolabs/oft-evm/contracts/interfaces/IOFT.sol/IOFT.json b/examples/oft-movement/artifacts/@layerzerolabs/oft-evm/contracts/interfaces/IOFT.sol/IOFT.json deleted file mode 100644 index e0d2869c4..000000000 --- a/examples/oft-movement/artifacts/@layerzerolabs/oft-evm/contracts/interfaces/IOFT.sol/IOFT.json +++ /dev/null @@ -1,456 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "IOFT", - "sourceName": "@layerzerolabs/oft-evm/contracts/interfaces/IOFT.sol", - "abi": [ - { - "inputs": [], - "name": "InvalidLocalDecimals", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "amountLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minAmountLD", - "type": "uint256" - } - ], - "name": "SlippageExceeded", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "guid", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "address", - "name": "toAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amountReceivedLD", - "type": "uint256" - } - ], - "name": "OFTReceived", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "guid", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "address", - "name": "fromAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amountSentLD", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amountReceivedLD", - "type": "uint256" - } - ], - "name": "OFTSent", - "type": "event" - }, - { - "inputs": [], - "name": "approvalRequired", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "oftVersion", - "outputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - }, - { - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "to", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amountLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minAmountLD", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "extraOptions", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "composeMsg", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "oftCmd", - "type": "bytes" - } - ], - "internalType": "struct SendParam", - "name": "_sendParam", - "type": "tuple" - } - ], - "name": "quoteOFT", - "outputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "minAmountLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxAmountLD", - "type": "uint256" - } - ], - "internalType": "struct OFTLimit", - "name": "", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "int256", - "name": "feeAmountLD", - "type": "int256" - }, - { - "internalType": "string", - "name": "description", - "type": "string" - } - ], - "internalType": "struct OFTFeeDetail[]", - "name": "oftFeeDetails", - "type": "tuple[]" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "amountSentLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "amountReceivedLD", - "type": "uint256" - } - ], - "internalType": "struct OFTReceipt", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "to", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amountLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minAmountLD", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "extraOptions", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "composeMsg", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "oftCmd", - "type": "bytes" - } - ], - "internalType": "struct SendParam", - "name": "_sendParam", - "type": "tuple" - }, - { - "internalType": "bool", - "name": "_payInLzToken", - "type": "bool" - } - ], - "name": "quoteSend", - "outputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "nativeFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "lzTokenFee", - "type": "uint256" - } - ], - "internalType": "struct MessagingFee", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "to", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amountLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minAmountLD", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "extraOptions", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "composeMsg", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "oftCmd", - "type": "bytes" - } - ], - "internalType": "struct SendParam", - "name": "_sendParam", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "nativeFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "lzTokenFee", - "type": "uint256" - } - ], - "internalType": "struct MessagingFee", - "name": "_fee", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_refundAddress", - "type": "address" - } - ], - "name": "send", - "outputs": [ - { - "components": [ - { - "internalType": "bytes32", - "name": "guid", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "nativeFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "lzTokenFee", - "type": "uint256" - } - ], - "internalType": "struct MessagingFee", - "name": "fee", - "type": "tuple" - } - ], - "internalType": "struct MessagingReceipt", - "name": "", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "amountSentLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "amountReceivedLD", - "type": "uint256" - } - ], - "internalType": "struct OFTReceipt", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "sharedDecimals", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "token", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "bytecode": "0x", - "deployedBytecode": "0x", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/examples/oft-movement/artifacts/@layerzerolabs/oft-evm/contracts/libs/OFTComposeMsgCodec.sol/OFTComposeMsgCodec.json b/examples/oft-movement/artifacts/@layerzerolabs/oft-evm/contracts/libs/OFTComposeMsgCodec.sol/OFTComposeMsgCodec.json deleted file mode 100644 index 051635836..000000000 --- a/examples/oft-movement/artifacts/@layerzerolabs/oft-evm/contracts/libs/OFTComposeMsgCodec.sol/OFTComposeMsgCodec.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "OFTComposeMsgCodec", - "sourceName": "@layerzerolabs/oft-evm/contracts/libs/OFTComposeMsgCodec.sol", - "abi": [], - "bytecode": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212209150eae0310d029a09a609e3d47f56ad7845051c16cb0145ad9f81dfcbe51bf364736f6c63430008160033", - "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212209150eae0310d029a09a609e3d47f56ad7845051c16cb0145ad9f81dfcbe51bf364736f6c63430008160033", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/examples/oft-movement/artifacts/@layerzerolabs/oft-evm/contracts/libs/OFTMsgCodec.sol/OFTMsgCodec.json b/examples/oft-movement/artifacts/@layerzerolabs/oft-evm/contracts/libs/OFTMsgCodec.sol/OFTMsgCodec.json deleted file mode 100644 index 0abe0b98d..000000000 --- a/examples/oft-movement/artifacts/@layerzerolabs/oft-evm/contracts/libs/OFTMsgCodec.sol/OFTMsgCodec.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "OFTMsgCodec", - "sourceName": "@layerzerolabs/oft-evm/contracts/libs/OFTMsgCodec.sol", - "abi": [], - "bytecode": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220006456bf94e40c5f9877c080b7f87343e8733959f30cea0f5b6cfabed8e3266364736f6c63430008160033", - "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220006456bf94e40c5f9877c080b7f87343e8733959f30cea0f5b6cfabed8e3266364736f6c63430008160033", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/examples/oft-movement/artifacts/@openzeppelin/contracts/access/Ownable.sol/Ownable.json b/examples/oft-movement/artifacts/@openzeppelin/contracts/access/Ownable.sol/Ownable.json deleted file mode 100644 index 5345edc1e..000000000 --- a/examples/oft-movement/artifacts/@openzeppelin/contracts/access/Ownable.sol/Ownable.json +++ /dev/null @@ -1,85 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "Ownable", - "sourceName": "@openzeppelin/contracts/access/Ownable.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "OwnableInvalidOwner", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "OwnableUnauthorizedAccount", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "0x", - "deployedBytecode": "0x", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/examples/oft-movement/artifacts/@openzeppelin/contracts/interfaces/IERC1363.sol/IERC1363.json b/examples/oft-movement/artifacts/@openzeppelin/contracts/interfaces/IERC1363.sol/IERC1363.json deleted file mode 100644 index 705034c19..000000000 --- a/examples/oft-movement/artifacts/@openzeppelin/contracts/interfaces/IERC1363.sol/IERC1363.json +++ /dev/null @@ -1,382 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "IERC1363", - "sourceName": "@openzeppelin/contracts/interfaces/IERC1363.sol", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "spender", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "approveAndCall", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "approveAndCall", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transferAndCall", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "transferAndCall", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "transferFromAndCall", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transferFromAndCall", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "0x", - "deployedBytecode": "0x", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/examples/oft-movement/artifacts/@openzeppelin/contracts/interfaces/draft-IERC6093.sol/IERC1155Errors.json b/examples/oft-movement/artifacts/@openzeppelin/contracts/interfaces/draft-IERC6093.sol/IERC1155Errors.json deleted file mode 100644 index 107d16fe0..000000000 --- a/examples/oft-movement/artifacts/@openzeppelin/contracts/interfaces/draft-IERC6093.sol/IERC1155Errors.json +++ /dev/null @@ -1,113 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "IERC1155Errors", - "sourceName": "@openzeppelin/contracts/interfaces/draft-IERC6093.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "balance", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "needed", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "ERC1155InsufficientBalance", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "approver", - "type": "address" - } - ], - "name": "ERC1155InvalidApprover", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "idsLength", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "valuesLength", - "type": "uint256" - } - ], - "name": "ERC1155InvalidArrayLength", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - } - ], - "name": "ERC1155InvalidOperator", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "receiver", - "type": "address" - } - ], - "name": "ERC1155InvalidReceiver", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "ERC1155InvalidSender", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "ERC1155MissingApprovalForAll", - "type": "error" - } - ], - "bytecode": "0x", - "deployedBytecode": "0x", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/examples/oft-movement/artifacts/@openzeppelin/contracts/interfaces/draft-IERC6093.sol/IERC20Errors.json b/examples/oft-movement/artifacts/@openzeppelin/contracts/interfaces/draft-IERC6093.sol/IERC20Errors.json deleted file mode 100644 index f77ad64ee..000000000 --- a/examples/oft-movement/artifacts/@openzeppelin/contracts/interfaces/draft-IERC6093.sol/IERC20Errors.json +++ /dev/null @@ -1,97 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "IERC20Errors", - "sourceName": "@openzeppelin/contracts/interfaces/draft-IERC6093.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "allowance", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "needed", - "type": "uint256" - } - ], - "name": "ERC20InsufficientAllowance", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "balance", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "needed", - "type": "uint256" - } - ], - "name": "ERC20InsufficientBalance", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "approver", - "type": "address" - } - ], - "name": "ERC20InvalidApprover", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "receiver", - "type": "address" - } - ], - "name": "ERC20InvalidReceiver", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "ERC20InvalidSender", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - } - ], - "name": "ERC20InvalidSpender", - "type": "error" - } - ], - "bytecode": "0x", - "deployedBytecode": "0x", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/examples/oft-movement/artifacts/@openzeppelin/contracts/interfaces/draft-IERC6093.sol/IERC721Errors.json b/examples/oft-movement/artifacts/@openzeppelin/contracts/interfaces/draft-IERC6093.sol/IERC721Errors.json deleted file mode 100644 index 6ccf3a73b..000000000 --- a/examples/oft-movement/artifacts/@openzeppelin/contracts/interfaces/draft-IERC6093.sol/IERC721Errors.json +++ /dev/null @@ -1,114 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "IERC721Errors", - "sourceName": "@openzeppelin/contracts/interfaces/draft-IERC6093.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "ERC721IncorrectOwner", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "ERC721InsufficientApproval", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "approver", - "type": "address" - } - ], - "name": "ERC721InvalidApprover", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - } - ], - "name": "ERC721InvalidOperator", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "ERC721InvalidOwner", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "receiver", - "type": "address" - } - ], - "name": "ERC721InvalidReceiver", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "ERC721InvalidSender", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "ERC721NonexistentToken", - "type": "error" - } - ], - "bytecode": "0x", - "deployedBytecode": "0x", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/examples/oft-movement/artifacts/@openzeppelin/contracts/token/ERC20/ERC20.sol/ERC20.json b/examples/oft-movement/artifacts/@openzeppelin/contracts/token/ERC20/ERC20.sol/ERC20.json deleted file mode 100644 index 81e661fa6..000000000 --- a/examples/oft-movement/artifacts/@openzeppelin/contracts/token/ERC20/ERC20.sol/ERC20.json +++ /dev/null @@ -1,319 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "ERC20", - "sourceName": "@openzeppelin/contracts/token/ERC20/ERC20.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "allowance", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "needed", - "type": "uint256" - } - ], - "name": "ERC20InsufficientAllowance", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "balance", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "needed", - "type": "uint256" - } - ], - "name": "ERC20InsufficientBalance", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "approver", - "type": "address" - } - ], - "name": "ERC20InvalidApprover", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "receiver", - "type": "address" - } - ], - "name": "ERC20InvalidReceiver", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "ERC20InvalidSender", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - } - ], - "name": "ERC20InvalidSpender", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "spender", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "decimals", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "0x", - "deployedBytecode": "0x", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/examples/oft-movement/artifacts/@openzeppelin/contracts/token/ERC20/IERC20.sol/IERC20.json b/examples/oft-movement/artifacts/@openzeppelin/contracts/token/ERC20/IERC20.sol/IERC20.json deleted file mode 100644 index 12e0777f7..000000000 --- a/examples/oft-movement/artifacts/@openzeppelin/contracts/token/ERC20/IERC20.sol/IERC20.json +++ /dev/null @@ -1,194 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "IERC20", - "sourceName": "@openzeppelin/contracts/token/ERC20/IERC20.sol", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "spender", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "0x", - "deployedBytecode": "0x", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/examples/oft-movement/artifacts/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol/IERC20Metadata.json b/examples/oft-movement/artifacts/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol/IERC20Metadata.json deleted file mode 100644 index a7d8b6ae3..000000000 --- a/examples/oft-movement/artifacts/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol/IERC20Metadata.json +++ /dev/null @@ -1,233 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "IERC20Metadata", - "sourceName": "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "spender", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "decimals", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "0x", - "deployedBytecode": "0x", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/examples/oft-movement/artifacts/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol/SafeERC20.json b/examples/oft-movement/artifacts/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol/SafeERC20.json deleted file mode 100644 index bb454b0f5..000000000 --- a/examples/oft-movement/artifacts/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol/SafeERC20.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "SafeERC20", - "sourceName": "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "currentAllowance", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "requestedDecrease", - "type": "uint256" - } - ], - "name": "SafeERC20FailedDecreaseAllowance", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - } - ], - "name": "SafeERC20FailedOperation", - "type": "error" - } - ], - "bytecode": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220e2d4aa3c317780aad14de5fcb5eadb5c2ddf8d18d1fba62ba142d5d8b266f7b664736f6c63430008160033", - "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220e2d4aa3c317780aad14de5fcb5eadb5c2ddf8d18d1fba62ba142d5d8b266f7b664736f6c63430008160033", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/examples/oft-movement/artifacts/@openzeppelin/contracts/utils/Address.sol/Address.json b/examples/oft-movement/artifacts/@openzeppelin/contracts/utils/Address.sol/Address.json deleted file mode 100644 index 5ae204bc6..000000000 --- a/examples/oft-movement/artifacts/@openzeppelin/contracts/utils/Address.sol/Address.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "Address", - "sourceName": "@openzeppelin/contracts/utils/Address.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "target", - "type": "address" - } - ], - "name": "AddressEmptyCode", - "type": "error" - } - ], - "bytecode": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122040fe4c7a5cf02d28cfc2a42e519ef4cf6dc6591196a25cded03008626f579bf064736f6c63430008160033", - "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122040fe4c7a5cf02d28cfc2a42e519ef4cf6dc6591196a25cded03008626f579bf064736f6c63430008160033", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/examples/oft-movement/artifacts/@openzeppelin/contracts/utils/Context.sol/Context.json b/examples/oft-movement/artifacts/@openzeppelin/contracts/utils/Context.sol/Context.json deleted file mode 100644 index 8fe86fc78..000000000 --- a/examples/oft-movement/artifacts/@openzeppelin/contracts/utils/Context.sol/Context.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "Context", - "sourceName": "@openzeppelin/contracts/utils/Context.sol", - "abi": [], - "bytecode": "0x", - "deployedBytecode": "0x", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/examples/oft-movement/artifacts/@openzeppelin/contracts/utils/Errors.sol/Errors.json b/examples/oft-movement/artifacts/@openzeppelin/contracts/utils/Errors.sol/Errors.json deleted file mode 100644 index 21b6c8869..000000000 --- a/examples/oft-movement/artifacts/@openzeppelin/contracts/utils/Errors.sol/Errors.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "Errors", - "sourceName": "@openzeppelin/contracts/utils/Errors.sol", - "abi": [ - { - "inputs": [], - "name": "FailedCall", - "type": "error" - }, - { - "inputs": [], - "name": "FailedDeployment", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "balance", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "needed", - "type": "uint256" - } - ], - "name": "InsufficientBalance", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "MissingPrecompile", - "type": "error" - } - ], - "bytecode": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212204dc9d5abf73c2dbd9a8371aa17f429ee6e5bf442558fed171264f729582e6c7b64736f6c63430008160033", - "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212204dc9d5abf73c2dbd9a8371aa17f429ee6e5bf442558fed171264f729582e6c7b64736f6c63430008160033", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/examples/oft-movement/artifacts/@openzeppelin/contracts/utils/introspection/IERC165.sol/IERC165.json b/examples/oft-movement/artifacts/@openzeppelin/contracts/utils/introspection/IERC165.sol/IERC165.json deleted file mode 100644 index ff87f91ee..000000000 --- a/examples/oft-movement/artifacts/@openzeppelin/contracts/utils/introspection/IERC165.sol/IERC165.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "IERC165", - "sourceName": "@openzeppelin/contracts/utils/introspection/IERC165.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "bytecode": "0x", - "deployedBytecode": "0x", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/examples/oft-movement/artifacts/build-info/a8ea5607af9ee37a48fadaec72ce7313.json b/examples/oft-movement/artifacts/build-info/a8ea5607af9ee37a48fadaec72ce7313.json deleted file mode 100644 index 03a10d06f..000000000 --- a/examples/oft-movement/artifacts/build-info/a8ea5607af9ee37a48fadaec72ce7313.json +++ /dev/null @@ -1,158973 +0,0 @@ -{ - "id": "a8ea5607af9ee37a48fadaec72ce7313", - "_format": "hh-sol-build-info-1", - "solcVersion": "0.8.22", - "solcLongVersion": "0.8.22+commit.4fc1097e", - "input": { - "language": "Solidity", - "sources": { - "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.8.0;\n\nimport { IMessageLibManager } from \"./IMessageLibManager.sol\";\nimport { IMessagingComposer } from \"./IMessagingComposer.sol\";\nimport { IMessagingChannel } from \"./IMessagingChannel.sol\";\nimport { IMessagingContext } from \"./IMessagingContext.sol\";\n\nstruct MessagingParams {\n uint32 dstEid;\n bytes32 receiver;\n bytes message;\n bytes options;\n bool payInLzToken;\n}\n\nstruct MessagingReceipt {\n bytes32 guid;\n uint64 nonce;\n MessagingFee fee;\n}\n\nstruct MessagingFee {\n uint256 nativeFee;\n uint256 lzTokenFee;\n}\n\nstruct Origin {\n uint32 srcEid;\n bytes32 sender;\n uint64 nonce;\n}\n\ninterface ILayerZeroEndpointV2 is IMessageLibManager, IMessagingComposer, IMessagingChannel, IMessagingContext {\n event PacketSent(bytes encodedPayload, bytes options, address sendLibrary);\n\n event PacketVerified(Origin origin, address receiver, bytes32 payloadHash);\n\n event PacketDelivered(Origin origin, address receiver);\n\n event LzReceiveAlert(\n address indexed receiver,\n address indexed executor,\n Origin origin,\n bytes32 guid,\n uint256 gas,\n uint256 value,\n bytes message,\n bytes extraData,\n bytes reason\n );\n\n event LzTokenSet(address token);\n\n event DelegateSet(address sender, address delegate);\n\n function quote(MessagingParams calldata _params, address _sender) external view returns (MessagingFee memory);\n\n function send(\n MessagingParams calldata _params,\n address _refundAddress\n ) external payable returns (MessagingReceipt memory);\n\n function verify(Origin calldata _origin, address _receiver, bytes32 _payloadHash) external;\n\n function verifiable(Origin calldata _origin, address _receiver) external view returns (bool);\n\n function initializable(Origin calldata _origin, address _receiver) external view returns (bool);\n\n function lzReceive(\n Origin calldata _origin,\n address _receiver,\n bytes32 _guid,\n bytes calldata _message,\n bytes calldata _extraData\n ) external payable;\n\n // oapp can burn messages partially by calling this function with its own business logic if messages are verified in order\n function clear(address _oapp, Origin calldata _origin, bytes32 _guid, bytes calldata _message) external;\n\n function setLzToken(address _lzToken) external;\n\n function lzToken() external view returns (address);\n\n function nativeToken() external view returns (address);\n\n function setDelegate(address _delegate) external;\n}\n" - }, - "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.8.0;\n\nimport { Origin } from \"./ILayerZeroEndpointV2.sol\";\n\ninterface ILayerZeroReceiver {\n function allowInitializePath(Origin calldata _origin) external view returns (bool);\n\n function nextNonce(uint32 _eid, bytes32 _sender) external view returns (uint64);\n\n function lzReceive(\n Origin calldata _origin,\n bytes32 _guid,\n bytes calldata _message,\n address _executor,\n bytes calldata _extraData\n ) external payable;\n}\n" - }, - "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.8.0;\n\nimport { IERC165 } from \"@openzeppelin/contracts/utils/introspection/IERC165.sol\";\n\nimport { SetConfigParam } from \"./IMessageLibManager.sol\";\n\nenum MessageLibType {\n Send,\n Receive,\n SendAndReceive\n}\n\ninterface IMessageLib is IERC165 {\n function setConfig(address _oapp, SetConfigParam[] calldata _config) external;\n\n function getConfig(uint32 _eid, address _oapp, uint32 _configType) external view returns (bytes memory config);\n\n function isSupportedEid(uint32 _eid) external view returns (bool);\n\n // message libs of same major version are compatible\n function version() external view returns (uint64 major, uint8 minor, uint8 endpointVersion);\n\n function messageLibType() external view returns (MessageLibType);\n}\n" - }, - "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.8.0;\n\nstruct SetConfigParam {\n uint32 eid;\n uint32 configType;\n bytes config;\n}\n\ninterface IMessageLibManager {\n struct Timeout {\n address lib;\n uint256 expiry;\n }\n\n event LibraryRegistered(address newLib);\n event DefaultSendLibrarySet(uint32 eid, address newLib);\n event DefaultReceiveLibrarySet(uint32 eid, address newLib);\n event DefaultReceiveLibraryTimeoutSet(uint32 eid, address oldLib, uint256 expiry);\n event SendLibrarySet(address sender, uint32 eid, address newLib);\n event ReceiveLibrarySet(address receiver, uint32 eid, address newLib);\n event ReceiveLibraryTimeoutSet(address receiver, uint32 eid, address oldLib, uint256 timeout);\n\n function registerLibrary(address _lib) external;\n\n function isRegisteredLibrary(address _lib) external view returns (bool);\n\n function getRegisteredLibraries() external view returns (address[] memory);\n\n function setDefaultSendLibrary(uint32 _eid, address _newLib) external;\n\n function defaultSendLibrary(uint32 _eid) external view returns (address);\n\n function setDefaultReceiveLibrary(uint32 _eid, address _newLib, uint256 _gracePeriod) external;\n\n function defaultReceiveLibrary(uint32 _eid) external view returns (address);\n\n function setDefaultReceiveLibraryTimeout(uint32 _eid, address _lib, uint256 _expiry) external;\n\n function defaultReceiveLibraryTimeout(uint32 _eid) external view returns (address lib, uint256 expiry);\n\n function isSupportedEid(uint32 _eid) external view returns (bool);\n\n function isValidReceiveLibrary(address _receiver, uint32 _eid, address _lib) external view returns (bool);\n\n /// ------------------- OApp interfaces -------------------\n function setSendLibrary(address _oapp, uint32 _eid, address _newLib) external;\n\n function getSendLibrary(address _sender, uint32 _eid) external view returns (address lib);\n\n function isDefaultSendLibrary(address _sender, uint32 _eid) external view returns (bool);\n\n function setReceiveLibrary(address _oapp, uint32 _eid, address _newLib, uint256 _gracePeriod) external;\n\n function getReceiveLibrary(address _receiver, uint32 _eid) external view returns (address lib, bool isDefault);\n\n function setReceiveLibraryTimeout(address _oapp, uint32 _eid, address _lib, uint256 _expiry) external;\n\n function receiveLibraryTimeout(address _receiver, uint32 _eid) external view returns (address lib, uint256 expiry);\n\n function setConfig(address _oapp, address _lib, SetConfigParam[] calldata _params) external;\n\n function getConfig(\n address _oapp,\n address _lib,\n uint32 _eid,\n uint32 _configType\n ) external view returns (bytes memory config);\n}\n" - }, - "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.8.0;\n\ninterface IMessagingChannel {\n event InboundNonceSkipped(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce);\n event PacketNilified(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce, bytes32 payloadHash);\n event PacketBurnt(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce, bytes32 payloadHash);\n\n function eid() external view returns (uint32);\n\n // this is an emergency function if a message cannot be verified for some reasons\n // required to provide _nextNonce to avoid race condition\n function skip(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce) external;\n\n function nilify(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce, bytes32 _payloadHash) external;\n\n function burn(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce, bytes32 _payloadHash) external;\n\n function nextGuid(address _sender, uint32 _dstEid, bytes32 _receiver) external view returns (bytes32);\n\n function inboundNonce(address _receiver, uint32 _srcEid, bytes32 _sender) external view returns (uint64);\n\n function outboundNonce(address _sender, uint32 _dstEid, bytes32 _receiver) external view returns (uint64);\n\n function inboundPayloadHash(\n address _receiver,\n uint32 _srcEid,\n bytes32 _sender,\n uint64 _nonce\n ) external view returns (bytes32);\n\n function lazyInboundNonce(address _receiver, uint32 _srcEid, bytes32 _sender) external view returns (uint64);\n}\n" - }, - "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.8.0;\n\ninterface IMessagingComposer {\n event ComposeSent(address from, address to, bytes32 guid, uint16 index, bytes message);\n event ComposeDelivered(address from, address to, bytes32 guid, uint16 index);\n event LzComposeAlert(\n address indexed from,\n address indexed to,\n address indexed executor,\n bytes32 guid,\n uint16 index,\n uint256 gas,\n uint256 value,\n bytes message,\n bytes extraData,\n bytes reason\n );\n\n function composeQueue(\n address _from,\n address _to,\n bytes32 _guid,\n uint16 _index\n ) external view returns (bytes32 messageHash);\n\n function sendCompose(address _to, bytes32 _guid, uint16 _index, bytes calldata _message) external;\n\n function lzCompose(\n address _from,\n address _to,\n bytes32 _guid,\n uint16 _index,\n bytes calldata _message,\n bytes calldata _extraData\n ) external payable;\n}\n" - }, - "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.8.0;\n\ninterface IMessagingContext {\n function isSendingMessage() external view returns (bool);\n\n function getSendContext() external view returns (uint32 dstEid, address sender);\n}\n" - }, - "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.8.0;\n\nimport { MessagingFee } from \"./ILayerZeroEndpointV2.sol\";\nimport { IMessageLib } from \"./IMessageLib.sol\";\n\nstruct Packet {\n uint64 nonce;\n uint32 srcEid;\n address sender;\n uint32 dstEid;\n bytes32 receiver;\n bytes32 guid;\n bytes message;\n}\n\ninterface ISendLib is IMessageLib {\n function send(\n Packet calldata _packet,\n bytes calldata _options,\n bool _payInLzToken\n ) external returns (MessagingFee memory, bytes memory encodedPacket);\n\n function quote(\n Packet calldata _packet,\n bytes calldata _options,\n bool _payInLzToken\n ) external view returns (MessagingFee memory);\n\n function setTreasury(address _treasury) external;\n\n function withdrawFee(address _to, uint256 _amount) external;\n\n function withdrawLzTokenFee(address _lzToken, address _to, uint256 _amount) external;\n}\n" - }, - "@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol": { - "content": "// SPDX-License-Identifier: LZBL-1.2\n\npragma solidity ^0.8.20;\n\nlibrary AddressCast {\n error AddressCast_InvalidSizeForAddress();\n error AddressCast_InvalidAddress();\n\n function toBytes32(bytes calldata _addressBytes) internal pure returns (bytes32 result) {\n if (_addressBytes.length > 32) revert AddressCast_InvalidAddress();\n result = bytes32(_addressBytes);\n unchecked {\n uint256 offset = 32 - _addressBytes.length;\n result = result >> (offset * 8);\n }\n }\n\n function toBytes32(address _address) internal pure returns (bytes32 result) {\n result = bytes32(uint256(uint160(_address)));\n }\n\n function toBytes(bytes32 _addressBytes32, uint256 _size) internal pure returns (bytes memory result) {\n if (_size == 0 || _size > 32) revert AddressCast_InvalidSizeForAddress();\n result = new bytes(_size);\n unchecked {\n uint256 offset = 256 - _size * 8;\n assembly {\n mstore(add(result, 32), shl(offset, _addressBytes32))\n }\n }\n }\n\n function toAddress(bytes32 _addressBytes32) internal pure returns (address result) {\n result = address(uint160(uint256(_addressBytes32)));\n }\n\n function toAddress(bytes calldata _addressBytes) internal pure returns (address result) {\n if (_addressBytes.length != 20) revert AddressCast_InvalidAddress();\n result = address(bytes20(_addressBytes));\n }\n}\n" - }, - "@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol": { - "content": "// SPDX-License-Identifier: LZBL-1.2\n\npragma solidity ^0.8.20;\n\nimport { Packet } from \"../../interfaces/ISendLib.sol\";\nimport { AddressCast } from \"../../libs/AddressCast.sol\";\n\nlibrary PacketV1Codec {\n using AddressCast for address;\n using AddressCast for bytes32;\n\n uint8 internal constant PACKET_VERSION = 1;\n\n // header (version + nonce + path)\n // version\n uint256 private constant PACKET_VERSION_OFFSET = 0;\n // nonce\n uint256 private constant NONCE_OFFSET = 1;\n // path\n uint256 private constant SRC_EID_OFFSET = 9;\n uint256 private constant SENDER_OFFSET = 13;\n uint256 private constant DST_EID_OFFSET = 45;\n uint256 private constant RECEIVER_OFFSET = 49;\n // payload (guid + message)\n uint256 private constant GUID_OFFSET = 81; // keccak256(nonce + path)\n uint256 private constant MESSAGE_OFFSET = 113;\n\n function encode(Packet memory _packet) internal pure returns (bytes memory encodedPacket) {\n encodedPacket = abi.encodePacked(\n PACKET_VERSION,\n _packet.nonce,\n _packet.srcEid,\n _packet.sender.toBytes32(),\n _packet.dstEid,\n _packet.receiver,\n _packet.guid,\n _packet.message\n );\n }\n\n function encodePacketHeader(Packet memory _packet) internal pure returns (bytes memory) {\n return\n abi.encodePacked(\n PACKET_VERSION,\n _packet.nonce,\n _packet.srcEid,\n _packet.sender.toBytes32(),\n _packet.dstEid,\n _packet.receiver\n );\n }\n\n function encodePayload(Packet memory _packet) internal pure returns (bytes memory) {\n return abi.encodePacked(_packet.guid, _packet.message);\n }\n\n function header(bytes calldata _packet) internal pure returns (bytes calldata) {\n return _packet[0:GUID_OFFSET];\n }\n\n function version(bytes calldata _packet) internal pure returns (uint8) {\n return uint8(bytes1(_packet[PACKET_VERSION_OFFSET:NONCE_OFFSET]));\n }\n\n function nonce(bytes calldata _packet) internal pure returns (uint64) {\n return uint64(bytes8(_packet[NONCE_OFFSET:SRC_EID_OFFSET]));\n }\n\n function srcEid(bytes calldata _packet) internal pure returns (uint32) {\n return uint32(bytes4(_packet[SRC_EID_OFFSET:SENDER_OFFSET]));\n }\n\n function sender(bytes calldata _packet) internal pure returns (bytes32) {\n return bytes32(_packet[SENDER_OFFSET:DST_EID_OFFSET]);\n }\n\n function senderAddressB20(bytes calldata _packet) internal pure returns (address) {\n return sender(_packet).toAddress();\n }\n\n function dstEid(bytes calldata _packet) internal pure returns (uint32) {\n return uint32(bytes4(_packet[DST_EID_OFFSET:RECEIVER_OFFSET]));\n }\n\n function receiver(bytes calldata _packet) internal pure returns (bytes32) {\n return bytes32(_packet[RECEIVER_OFFSET:GUID_OFFSET]);\n }\n\n function receiverB20(bytes calldata _packet) internal pure returns (address) {\n return receiver(_packet).toAddress();\n }\n\n function guid(bytes calldata _packet) internal pure returns (bytes32) {\n return bytes32(_packet[GUID_OFFSET:MESSAGE_OFFSET]);\n }\n\n function message(bytes calldata _packet) internal pure returns (bytes calldata) {\n return bytes(_packet[MESSAGE_OFFSET:]);\n }\n\n function payload(bytes calldata _packet) internal pure returns (bytes calldata) {\n return bytes(_packet[GUID_OFFSET:]);\n }\n\n function payloadHash(bytes calldata _packet) internal pure returns (bytes32) {\n return keccak256(payload(_packet));\n }\n}\n" - }, - "@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppCore.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.20;\n\nimport { ILayerZeroEndpointV2 } from \"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\";\n\n/**\n * @title IOAppCore\n */\ninterface IOAppCore {\n // Custom error messages\n error OnlyPeer(uint32 eid, bytes32 sender);\n error NoPeer(uint32 eid);\n error InvalidEndpointCall();\n error InvalidDelegate();\n\n // Event emitted when a peer (OApp) is set for a corresponding endpoint\n event PeerSet(uint32 eid, bytes32 peer);\n\n /**\n * @notice Retrieves the OApp version information.\n * @return senderVersion The version of the OAppSender.sol contract.\n * @return receiverVersion The version of the OAppReceiver.sol contract.\n */\n function oAppVersion() external view returns (uint64 senderVersion, uint64 receiverVersion);\n\n /**\n * @notice Retrieves the LayerZero endpoint associated with the OApp.\n * @return iEndpoint The LayerZero endpoint as an interface.\n */\n function endpoint() external view returns (ILayerZeroEndpointV2 iEndpoint);\n\n /**\n * @notice Retrieves the peer (OApp) associated with a corresponding endpoint.\n * @param _eid The endpoint ID.\n * @return peer The peer address (OApp instance) associated with the corresponding endpoint.\n */\n function peers(uint32 _eid) external view returns (bytes32 peer);\n\n /**\n * @notice Sets the peer address (OApp instance) for a corresponding endpoint.\n * @param _eid The endpoint ID.\n * @param _peer The address of the peer to be associated with the corresponding endpoint.\n */\n function setPeer(uint32 _eid, bytes32 _peer) external;\n\n /**\n * @notice Sets the delegate address for the OApp Core.\n * @param _delegate The address of the delegate to be set.\n */\n function setDelegate(address _delegate) external;\n}\n" - }, - "@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppMsgInspector.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.20;\n\n/**\n * @title IOAppMsgInspector\n * @dev Interface for the OApp Message Inspector, allowing examination of message and options contents.\n */\ninterface IOAppMsgInspector {\n // Custom error message for inspection failure\n error InspectionFailed(bytes message, bytes options);\n\n /**\n * @notice Allows the inspector to examine LayerZero message contents and optionally throw a revert if invalid.\n * @param _message The message payload to be inspected.\n * @param _options Additional options or parameters for inspection.\n * @return valid A boolean indicating whether the inspection passed (true) or failed (false).\n *\n * @dev Optionally done as a revert, OR use the boolean provided to handle the failure.\n */\n function inspect(bytes calldata _message, bytes calldata _options) external view returns (bool valid);\n}\n" - }, - "@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppOptionsType3.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Struct representing enforced option parameters.\n */\nstruct EnforcedOptionParam {\n uint32 eid; // Endpoint ID\n uint16 msgType; // Message Type\n bytes options; // Additional options\n}\n\n/**\n * @title IOAppOptionsType3\n * @dev Interface for the OApp with Type 3 Options, allowing the setting and combining of enforced options.\n */\ninterface IOAppOptionsType3 {\n // Custom error message for invalid options\n error InvalidOptions(bytes options);\n\n // Event emitted when enforced options are set\n event EnforcedOptionSet(EnforcedOptionParam[] _enforcedOptions);\n\n /**\n * @notice Sets enforced options for specific endpoint and message type combinations.\n * @param _enforcedOptions An array of EnforcedOptionParam structures specifying enforced options.\n */\n function setEnforcedOptions(EnforcedOptionParam[] calldata _enforcedOptions) external;\n\n /**\n * @notice Combines options for a given endpoint and message type.\n * @param _eid The endpoint ID.\n * @param _msgType The OApp message type.\n * @param _extraOptions Additional options passed by the caller.\n * @return options The combination of caller specified options AND enforced options.\n */\n function combineOptions(\n uint32 _eid,\n uint16 _msgType,\n bytes calldata _extraOptions\n ) external view returns (bytes memory options);\n}\n" - }, - "@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppReceiver.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.20;\n\nimport { ILayerZeroReceiver, Origin } from \"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol\";\n\ninterface IOAppReceiver is ILayerZeroReceiver {\n /**\n * @notice Indicates whether an address is an approved composeMsg sender to the Endpoint.\n * @param _origin The origin information containing the source endpoint and sender address.\n * - srcEid: The source chain endpoint ID.\n * - sender: The sender address on the src chain.\n * - nonce: The nonce of the message.\n * @param _message The lzReceive payload.\n * @param _sender The sender address.\n * @return isSender Is a valid sender.\n *\n * @dev Applications can optionally choose to implement a separate composeMsg sender that is NOT the bridging layer.\n * @dev The default sender IS the OAppReceiver implementer.\n */\n function isComposeMsgSender(\n Origin calldata _origin,\n bytes calldata _message,\n address _sender\n ) external view returns (bool isSender);\n}\n" - }, - "@layerzerolabs/oapp-evm/contracts/oapp/libs/OAppOptionsType3.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.20;\n\nimport { Ownable } from \"@openzeppelin/contracts/access/Ownable.sol\";\nimport { IOAppOptionsType3, EnforcedOptionParam } from \"../interfaces/IOAppOptionsType3.sol\";\n\n/**\n * @title OAppOptionsType3\n * @dev Abstract contract implementing the IOAppOptionsType3 interface with type 3 options.\n */\nabstract contract OAppOptionsType3 is IOAppOptionsType3, Ownable {\n uint16 internal constant OPTION_TYPE_3 = 3;\n\n // @dev The \"msgType\" should be defined in the child contract.\n mapping(uint32 eid => mapping(uint16 msgType => bytes enforcedOption)) public enforcedOptions;\n\n /**\n * @dev Sets the enforced options for specific endpoint and message type combinations.\n * @param _enforcedOptions An array of EnforcedOptionParam structures specifying enforced options.\n *\n * @dev Only the owner/admin of the OApp can call this function.\n * @dev Provides a way for the OApp to enforce things like paying for PreCrime, AND/OR minimum dst lzReceive gas amounts etc.\n * @dev These enforced options can vary as the potential options/execution on the remote may differ as per the msgType.\n * eg. Amount of lzReceive() gas necessary to deliver a lzCompose() message adds overhead you dont want to pay\n * if you are only making a standard LayerZero message ie. lzReceive() WITHOUT sendCompose().\n */\n function setEnforcedOptions(EnforcedOptionParam[] calldata _enforcedOptions) public virtual onlyOwner {\n _setEnforcedOptions(_enforcedOptions);\n }\n\n /**\n * @dev Sets the enforced options for specific endpoint and message type combinations.\n * @param _enforcedOptions An array of EnforcedOptionParam structures specifying enforced options.\n *\n * @dev Provides a way for the OApp to enforce things like paying for PreCrime, AND/OR minimum dst lzReceive gas amounts etc.\n * @dev These enforced options can vary as the potential options/execution on the remote may differ as per the msgType.\n * eg. Amount of lzReceive() gas necessary to deliver a lzCompose() message adds overhead you dont want to pay\n * if you are only making a standard LayerZero message ie. lzReceive() WITHOUT sendCompose().\n */\n function _setEnforcedOptions(EnforcedOptionParam[] memory _enforcedOptions) internal virtual {\n for (uint256 i = 0; i < _enforcedOptions.length; i++) {\n // @dev Enforced options are only available for optionType 3, as type 1 and 2 dont support combining.\n _assertOptionsType3(_enforcedOptions[i].options);\n enforcedOptions[_enforcedOptions[i].eid][_enforcedOptions[i].msgType] = _enforcedOptions[i].options;\n }\n\n emit EnforcedOptionSet(_enforcedOptions);\n }\n\n /**\n * @notice Combines options for a given endpoint and message type.\n * @param _eid The endpoint ID.\n * @param _msgType The OAPP message type.\n * @param _extraOptions Additional options passed by the caller.\n * @return options The combination of caller specified options AND enforced options.\n *\n * @dev If there is an enforced lzReceive option:\n * - {gasLimit: 200k, msg.value: 1 ether} AND a caller supplies a lzReceive option: {gasLimit: 100k, msg.value: 0.5 ether}\n * - The resulting options will be {gasLimit: 300k, msg.value: 1.5 ether} when the message is executed on the remote lzReceive() function.\n * @dev This presence of duplicated options is handled off-chain in the verifier/executor.\n */\n function combineOptions(\n uint32 _eid,\n uint16 _msgType,\n bytes calldata _extraOptions\n ) public view virtual returns (bytes memory) {\n bytes memory enforced = enforcedOptions[_eid][_msgType];\n\n // No enforced options, pass whatever the caller supplied, even if it's empty or legacy type 1/2 options.\n if (enforced.length == 0) return _extraOptions;\n\n // No caller options, return enforced\n if (_extraOptions.length == 0) return enforced;\n\n // @dev If caller provided _extraOptions, must be type 3 as its the ONLY type that can be combined.\n if (_extraOptions.length >= 2) {\n _assertOptionsType3(_extraOptions);\n // @dev Remove the first 2 bytes containing the type from the _extraOptions and combine with enforced.\n return bytes.concat(enforced, _extraOptions[2:]);\n }\n\n // No valid set of options was found.\n revert InvalidOptions(_extraOptions);\n }\n\n /**\n * @dev Internal function to assert that options are of type 3.\n * @param _options The options to be checked.\n */\n function _assertOptionsType3(bytes memory _options) internal pure virtual {\n uint16 optionsType;\n assembly {\n optionsType := mload(add(_options, 2))\n }\n if (optionsType != OPTION_TYPE_3) revert InvalidOptions(_options);\n }\n}\n" - }, - "@layerzerolabs/oapp-evm/contracts/oapp/OApp.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.20;\n\n// @dev Import the 'MessagingFee' and 'MessagingReceipt' so it's exposed to OApp implementers\n// solhint-disable-next-line no-unused-import\nimport { OAppSender, MessagingFee, MessagingReceipt } from \"./OAppSender.sol\";\n// @dev Import the 'Origin' so it's exposed to OApp implementers\n// solhint-disable-next-line no-unused-import\nimport { OAppReceiver, Origin } from \"./OAppReceiver.sol\";\nimport { OAppCore } from \"./OAppCore.sol\";\n\n/**\n * @title OApp\n * @dev Abstract contract serving as the base for OApp implementation, combining OAppSender and OAppReceiver functionality.\n */\nabstract contract OApp is OAppSender, OAppReceiver {\n /**\n * @dev Constructor to initialize the OApp with the provided endpoint and owner.\n * @param _endpoint The address of the LOCAL LayerZero endpoint.\n * @param _delegate The delegate capable of making OApp configurations inside of the endpoint.\n */\n constructor(address _endpoint, address _delegate) OAppCore(_endpoint, _delegate) {}\n\n /**\n * @notice Retrieves the OApp version information.\n * @return senderVersion The version of the OAppSender.sol implementation.\n * @return receiverVersion The version of the OAppReceiver.sol implementation.\n */\n function oAppVersion()\n public\n pure\n virtual\n override(OAppSender, OAppReceiver)\n returns (uint64 senderVersion, uint64 receiverVersion)\n {\n return (SENDER_VERSION, RECEIVER_VERSION);\n }\n}\n" - }, - "@layerzerolabs/oapp-evm/contracts/oapp/OAppCore.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.20;\n\nimport { Ownable } from \"@openzeppelin/contracts/access/Ownable.sol\";\nimport { IOAppCore, ILayerZeroEndpointV2 } from \"./interfaces/IOAppCore.sol\";\n\n/**\n * @title OAppCore\n * @dev Abstract contract implementing the IOAppCore interface with basic OApp configurations.\n */\nabstract contract OAppCore is IOAppCore, Ownable {\n // The LayerZero endpoint associated with the given OApp\n ILayerZeroEndpointV2 public immutable endpoint;\n\n // Mapping to store peers associated with corresponding endpoints\n mapping(uint32 eid => bytes32 peer) public peers;\n\n /**\n * @dev Constructor to initialize the OAppCore with the provided endpoint and delegate.\n * @param _endpoint The address of the LOCAL Layer Zero endpoint.\n * @param _delegate The delegate capable of making OApp configurations inside of the endpoint.\n *\n * @dev The delegate typically should be set as the owner of the contract.\n */\n constructor(address _endpoint, address _delegate) {\n endpoint = ILayerZeroEndpointV2(_endpoint);\n\n if (_delegate == address(0)) revert InvalidDelegate();\n endpoint.setDelegate(_delegate);\n }\n\n /**\n * @notice Sets the peer address (OApp instance) for a corresponding endpoint.\n * @param _eid The endpoint ID.\n * @param _peer The address of the peer to be associated with the corresponding endpoint.\n *\n * @dev Only the owner/admin of the OApp can call this function.\n * @dev Indicates that the peer is trusted to send LayerZero messages to this OApp.\n * @dev Set this to bytes32(0) to remove the peer address.\n * @dev Peer is a bytes32 to accommodate non-evm chains.\n */\n function setPeer(uint32 _eid, bytes32 _peer) public virtual onlyOwner {\n _setPeer(_eid, _peer);\n }\n\n /**\n * @notice Sets the peer address (OApp instance) for a corresponding endpoint.\n * @param _eid The endpoint ID.\n * @param _peer The address of the peer to be associated with the corresponding endpoint.\n *\n * @dev Indicates that the peer is trusted to send LayerZero messages to this OApp.\n * @dev Set this to bytes32(0) to remove the peer address.\n * @dev Peer is a bytes32 to accommodate non-evm chains.\n */\n function _setPeer(uint32 _eid, bytes32 _peer) internal virtual {\n peers[_eid] = _peer;\n emit PeerSet(_eid, _peer);\n }\n\n /**\n * @notice Internal function to get the peer address associated with a specific endpoint; reverts if NOT set.\n * ie. the peer is set to bytes32(0).\n * @param _eid The endpoint ID.\n * @return peer The address of the peer associated with the specified endpoint.\n */\n function _getPeerOrRevert(uint32 _eid) internal view virtual returns (bytes32) {\n bytes32 peer = peers[_eid];\n if (peer == bytes32(0)) revert NoPeer(_eid);\n return peer;\n }\n\n /**\n * @notice Sets the delegate address for the OApp.\n * @param _delegate The address of the delegate to be set.\n *\n * @dev Only the owner/admin of the OApp can call this function.\n * @dev Provides the ability for a delegate to set configs, on behalf of the OApp, directly on the Endpoint contract.\n */\n function setDelegate(address _delegate) public onlyOwner {\n endpoint.setDelegate(_delegate);\n }\n}\n" - }, - "@layerzerolabs/oapp-evm/contracts/oapp/OAppReceiver.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.20;\n\nimport { IOAppReceiver, Origin } from \"./interfaces/IOAppReceiver.sol\";\nimport { OAppCore } from \"./OAppCore.sol\";\n\n/**\n * @title OAppReceiver\n * @dev Abstract contract implementing the ILayerZeroReceiver interface and extending OAppCore for OApp receivers.\n */\nabstract contract OAppReceiver is IOAppReceiver, OAppCore {\n // Custom error message for when the caller is not the registered endpoint/\n error OnlyEndpoint(address addr);\n\n // @dev The version of the OAppReceiver implementation.\n // @dev Version is bumped when changes are made to this contract.\n uint64 internal constant RECEIVER_VERSION = 2;\n\n /**\n * @notice Retrieves the OApp version information.\n * @return senderVersion The version of the OAppSender.sol contract.\n * @return receiverVersion The version of the OAppReceiver.sol contract.\n *\n * @dev Providing 0 as the default for OAppSender version. Indicates that the OAppSender is not implemented.\n * ie. this is a RECEIVE only OApp.\n * @dev If the OApp uses both OAppSender and OAppReceiver, then this needs to be override returning the correct versions.\n */\n function oAppVersion() public view virtual returns (uint64 senderVersion, uint64 receiverVersion) {\n return (0, RECEIVER_VERSION);\n }\n\n /**\n * @notice Indicates whether an address is an approved composeMsg sender to the Endpoint.\n * @dev _origin The origin information containing the source endpoint and sender address.\n * - srcEid: The source chain endpoint ID.\n * - sender: The sender address on the src chain.\n * - nonce: The nonce of the message.\n * @dev _message The lzReceive payload.\n * @param _sender The sender address.\n * @return isSender Is a valid sender.\n *\n * @dev Applications can optionally choose to implement separate composeMsg senders that are NOT the bridging layer.\n * @dev The default sender IS the OAppReceiver implementer.\n */\n function isComposeMsgSender(\n Origin calldata /*_origin*/,\n bytes calldata /*_message*/,\n address _sender\n ) public view virtual returns (bool) {\n return _sender == address(this);\n }\n\n /**\n * @notice Checks if the path initialization is allowed based on the provided origin.\n * @param origin The origin information containing the source endpoint and sender address.\n * @return Whether the path has been initialized.\n *\n * @dev This indicates to the endpoint that the OApp has enabled msgs for this particular path to be received.\n * @dev This defaults to assuming if a peer has been set, its initialized.\n * Can be overridden by the OApp if there is other logic to determine this.\n */\n function allowInitializePath(Origin calldata origin) public view virtual returns (bool) {\n return peers[origin.srcEid] == origin.sender;\n }\n\n /**\n * @notice Retrieves the next nonce for a given source endpoint and sender address.\n * @dev _srcEid The source endpoint ID.\n * @dev _sender The sender address.\n * @return nonce The next nonce.\n *\n * @dev The path nonce starts from 1. If 0 is returned it means that there is NO nonce ordered enforcement.\n * @dev Is required by the off-chain executor to determine the OApp expects msg execution is ordered.\n * @dev This is also enforced by the OApp.\n * @dev By default this is NOT enabled. ie. nextNonce is hardcoded to return 0.\n */\n function nextNonce(uint32 /*_srcEid*/, bytes32 /*_sender*/) public view virtual returns (uint64 nonce) {\n return 0;\n }\n\n /**\n * @dev Entry point for receiving messages or packets from the endpoint.\n * @param _origin The origin information containing the source endpoint and sender address.\n * - srcEid: The source chain endpoint ID.\n * - sender: The sender address on the src chain.\n * - nonce: The nonce of the message.\n * @param _guid The unique identifier for the received LayerZero message.\n * @param _message The payload of the received message.\n * @param _executor The address of the executor for the received message.\n * @param _extraData Additional arbitrary data provided by the corresponding executor.\n *\n * @dev Entry point for receiving msg/packet from the LayerZero endpoint.\n */\n function lzReceive(\n Origin calldata _origin,\n bytes32 _guid,\n bytes calldata _message,\n address _executor,\n bytes calldata _extraData\n ) public payable virtual {\n // Ensures that only the endpoint can attempt to lzReceive() messages to this OApp.\n if (address(endpoint) != msg.sender) revert OnlyEndpoint(msg.sender);\n\n // Ensure that the sender matches the expected peer for the source endpoint.\n if (_getPeerOrRevert(_origin.srcEid) != _origin.sender) revert OnlyPeer(_origin.srcEid, _origin.sender);\n\n // Call the internal OApp implementation of lzReceive.\n _lzReceive(_origin, _guid, _message, _executor, _extraData);\n }\n\n /**\n * @dev Internal function to implement lzReceive logic without needing to copy the basic parameter validation.\n */\n function _lzReceive(\n Origin calldata _origin,\n bytes32 _guid,\n bytes calldata _message,\n address _executor,\n bytes calldata _extraData\n ) internal virtual;\n}\n" - }, - "@layerzerolabs/oapp-evm/contracts/oapp/OAppSender.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.20;\n\nimport { SafeERC20, IERC20 } from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\nimport { MessagingParams, MessagingFee, MessagingReceipt } from \"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\";\nimport { OAppCore } from \"./OAppCore.sol\";\n\n/**\n * @title OAppSender\n * @dev Abstract contract implementing the OAppSender functionality for sending messages to a LayerZero endpoint.\n */\nabstract contract OAppSender is OAppCore {\n using SafeERC20 for IERC20;\n\n // Custom error messages\n error NotEnoughNative(uint256 msgValue);\n error LzTokenUnavailable();\n\n // @dev The version of the OAppSender implementation.\n // @dev Version is bumped when changes are made to this contract.\n uint64 internal constant SENDER_VERSION = 1;\n\n /**\n * @notice Retrieves the OApp version information.\n * @return senderVersion The version of the OAppSender.sol contract.\n * @return receiverVersion The version of the OAppReceiver.sol contract.\n *\n * @dev Providing 0 as the default for OAppReceiver version. Indicates that the OAppReceiver is not implemented.\n * ie. this is a SEND only OApp.\n * @dev If the OApp uses both OAppSender and OAppReceiver, then this needs to be override returning the correct versions\n */\n function oAppVersion() public view virtual returns (uint64 senderVersion, uint64 receiverVersion) {\n return (SENDER_VERSION, 0);\n }\n\n /**\n * @dev Internal function to interact with the LayerZero EndpointV2.quote() for fee calculation.\n * @param _dstEid The destination endpoint ID.\n * @param _message The message payload.\n * @param _options Additional options for the message.\n * @param _payInLzToken Flag indicating whether to pay the fee in LZ tokens.\n * @return fee The calculated MessagingFee for the message.\n * - nativeFee: The native fee for the message.\n * - lzTokenFee: The LZ token fee for the message.\n */\n function _quote(\n uint32 _dstEid,\n bytes memory _message,\n bytes memory _options,\n bool _payInLzToken\n ) internal view virtual returns (MessagingFee memory fee) {\n return\n endpoint.quote(\n MessagingParams(_dstEid, _getPeerOrRevert(_dstEid), _message, _options, _payInLzToken),\n address(this)\n );\n }\n\n /**\n * @dev Internal function to interact with the LayerZero EndpointV2.send() for sending a message.\n * @param _dstEid The destination endpoint ID.\n * @param _message The message payload.\n * @param _options Additional options for the message.\n * @param _fee The calculated LayerZero fee for the message.\n * - nativeFee: The native fee.\n * - lzTokenFee: The lzToken fee.\n * @param _refundAddress The address to receive any excess fee values sent to the endpoint.\n * @return receipt The receipt for the sent message.\n * - guid: The unique identifier for the sent message.\n * - nonce: The nonce of the sent message.\n * - fee: The LayerZero fee incurred for the message.\n */\n function _lzSend(\n uint32 _dstEid,\n bytes memory _message,\n bytes memory _options,\n MessagingFee memory _fee,\n address _refundAddress\n ) internal virtual returns (MessagingReceipt memory receipt) {\n // @dev Push corresponding fees to the endpoint, any excess is sent back to the _refundAddress from the endpoint.\n uint256 messageValue = _payNative(_fee.nativeFee);\n if (_fee.lzTokenFee > 0) _payLzToken(_fee.lzTokenFee);\n\n return\n // solhint-disable-next-line check-send-result\n endpoint.send{ value: messageValue }(\n MessagingParams(_dstEid, _getPeerOrRevert(_dstEid), _message, _options, _fee.lzTokenFee > 0),\n _refundAddress\n );\n }\n\n /**\n * @dev Internal function to pay the native fee associated with the message.\n * @param _nativeFee The native fee to be paid.\n * @return nativeFee The amount of native currency paid.\n *\n * @dev If the OApp needs to initiate MULTIPLE LayerZero messages in a single transaction,\n * this will need to be overridden because msg.value would contain multiple lzFees.\n * @dev Should be overridden in the event the LayerZero endpoint requires a different native currency.\n * @dev Some EVMs use an ERC20 as a method for paying transactions/gasFees.\n * @dev The endpoint is EITHER/OR, ie. it will NOT support both types of native payment at a time.\n */\n function _payNative(uint256 _nativeFee) internal virtual returns (uint256 nativeFee) {\n if (msg.value != _nativeFee) revert NotEnoughNative(msg.value);\n return _nativeFee;\n }\n\n /**\n * @dev Internal function to pay the LZ token fee associated with the message.\n * @param _lzTokenFee The LZ token fee to be paid.\n *\n * @dev If the caller is trying to pay in the specified lzToken, then the lzTokenFee is passed to the endpoint.\n * @dev Any excess sent, is passed back to the specified _refundAddress in the _lzSend().\n */\n function _payLzToken(uint256 _lzTokenFee) internal virtual {\n // @dev Cannot cache the token because it is not immutable in the endpoint.\n address lzToken = endpoint.lzToken();\n if (lzToken == address(0)) revert LzTokenUnavailable();\n\n // Pay LZ token fee by sending tokens to the endpoint.\n IERC20(lzToken).safeTransferFrom(msg.sender, address(endpoint), _lzTokenFee);\n }\n}\n" - }, - "@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IOAppPreCrimeSimulator.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.20;\n\n// @dev Import the Origin so it's exposed to OAppPreCrimeSimulator implementers.\n// solhint-disable-next-line no-unused-import\nimport { InboundPacket, Origin } from \"../libs/Packet.sol\";\n\n/**\n * @title IOAppPreCrimeSimulator Interface\n * @dev Interface for the preCrime simulation functionality in an OApp.\n */\ninterface IOAppPreCrimeSimulator {\n // @dev simulation result used in PreCrime implementation\n error SimulationResult(bytes result);\n error OnlySelf();\n\n /**\n * @dev Emitted when the preCrime contract address is set.\n * @param preCrimeAddress The address of the preCrime contract.\n */\n event PreCrimeSet(address preCrimeAddress);\n\n /**\n * @dev Retrieves the address of the preCrime contract implementation.\n * @return The address of the preCrime contract.\n */\n function preCrime() external view returns (address);\n\n /**\n * @dev Retrieves the address of the OApp contract.\n * @return The address of the OApp contract.\n */\n function oApp() external view returns (address);\n\n /**\n * @dev Sets the preCrime contract address.\n * @param _preCrime The address of the preCrime contract.\n */\n function setPreCrime(address _preCrime) external;\n\n /**\n * @dev Mocks receiving a packet, then reverts with a series of data to infer the state/result.\n * @param _packets An array of LayerZero InboundPacket objects representing received packets.\n */\n function lzReceiveAndRevert(InboundPacket[] calldata _packets) external payable;\n\n /**\n * @dev checks if the specified peer is considered 'trusted' by the OApp.\n * @param _eid The endpoint Id to check.\n * @param _peer The peer to check.\n * @return Whether the peer passed is considered 'trusted' by the OApp.\n */\n function isPeer(uint32 _eid, bytes32 _peer) external view returns (bool);\n}\n" - }, - "@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IPreCrime.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.20;\nstruct PreCrimePeer {\n uint32 eid;\n bytes32 preCrime;\n bytes32 oApp;\n}\n\n// TODO not done yet\ninterface IPreCrime {\n error OnlyOffChain();\n\n // for simulate()\n error PacketOversize(uint256 max, uint256 actual);\n error PacketUnsorted();\n error SimulationFailed(bytes reason);\n\n // for preCrime()\n error SimulationResultNotFound(uint32 eid);\n error InvalidSimulationResult(uint32 eid, bytes reason);\n error CrimeFound(bytes crime);\n\n function getConfig(bytes[] calldata _packets, uint256[] calldata _packetMsgValues) external returns (bytes memory);\n\n function simulate(\n bytes[] calldata _packets,\n uint256[] calldata _packetMsgValues\n ) external payable returns (bytes memory);\n\n function buildSimulationResult() external view returns (bytes memory);\n\n function preCrime(\n bytes[] calldata _packets,\n uint256[] calldata _packetMsgValues,\n bytes[] calldata _simulations\n ) external;\n\n function version() external view returns (uint64 major, uint8 minor);\n}\n" - }, - "@layerzerolabs/oapp-evm/contracts/precrime/libs/Packet.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.20;\n\nimport { Origin } from \"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\";\nimport { PacketV1Codec } from \"@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol\";\n\n/**\n * @title InboundPacket\n * @dev Structure representing an inbound packet received by the contract.\n */\nstruct InboundPacket {\n Origin origin; // Origin information of the packet.\n uint32 dstEid; // Destination endpointId of the packet.\n address receiver; // Receiver address for the packet.\n bytes32 guid; // Unique identifier of the packet.\n uint256 value; // msg.value of the packet.\n address executor; // Executor address for the packet.\n bytes message; // Message payload of the packet.\n bytes extraData; // Additional arbitrary data for the packet.\n}\n\n/**\n * @title PacketDecoder\n * @dev Library for decoding LayerZero packets.\n */\nlibrary PacketDecoder {\n using PacketV1Codec for bytes;\n\n /**\n * @dev Decode an inbound packet from the given packet data.\n * @param _packet The packet data to decode.\n * @return packet An InboundPacket struct representing the decoded packet.\n */\n function decode(bytes calldata _packet) internal pure returns (InboundPacket memory packet) {\n packet.origin = Origin(_packet.srcEid(), _packet.sender(), _packet.nonce());\n packet.dstEid = _packet.dstEid();\n packet.receiver = _packet.receiverB20();\n packet.guid = _packet.guid();\n packet.message = _packet.message();\n }\n\n /**\n * @dev Decode multiple inbound packets from the given packet data and associated message values.\n * @param _packets An array of packet data to decode.\n * @param _packetMsgValues An array of associated message values for each packet.\n * @return packets An array of InboundPacket structs representing the decoded packets.\n */\n function decode(\n bytes[] calldata _packets,\n uint256[] memory _packetMsgValues\n ) internal pure returns (InboundPacket[] memory packets) {\n packets = new InboundPacket[](_packets.length);\n for (uint256 i = 0; i < _packets.length; i++) {\n bytes calldata packet = _packets[i];\n packets[i] = PacketDecoder.decode(packet);\n // @dev Allows the verifier to specify the msg.value that gets passed in lzReceive.\n packets[i].value = _packetMsgValues[i];\n }\n }\n}\n" - }, - "@layerzerolabs/oapp-evm/contracts/precrime/OAppPreCrimeSimulator.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.20;\n\nimport { Ownable } from \"@openzeppelin/contracts/access/Ownable.sol\";\nimport { IPreCrime } from \"./interfaces/IPreCrime.sol\";\nimport { IOAppPreCrimeSimulator, InboundPacket, Origin } from \"./interfaces/IOAppPreCrimeSimulator.sol\";\n\n/**\n * @title OAppPreCrimeSimulator\n * @dev Abstract contract serving as the base for preCrime simulation functionality in an OApp.\n */\nabstract contract OAppPreCrimeSimulator is IOAppPreCrimeSimulator, Ownable {\n // The address of the preCrime implementation.\n address public preCrime;\n\n /**\n * @dev Retrieves the address of the OApp contract.\n * @return The address of the OApp contract.\n *\n * @dev The simulator contract is the base contract for the OApp by default.\n * @dev If the simulator is a separate contract, override this function.\n */\n function oApp() external view virtual returns (address) {\n return address(this);\n }\n\n /**\n * @dev Sets the preCrime contract address.\n * @param _preCrime The address of the preCrime contract.\n */\n function setPreCrime(address _preCrime) public virtual onlyOwner {\n preCrime = _preCrime;\n emit PreCrimeSet(_preCrime);\n }\n\n /**\n * @dev Interface for pre-crime simulations. Always reverts at the end with the simulation results.\n * @param _packets An array of InboundPacket objects representing received packets to be delivered.\n *\n * @dev WARNING: MUST revert at the end with the simulation results.\n * @dev Gives the preCrime implementation the ability to mock sending packets to the lzReceive function,\n * WITHOUT actually executing them.\n */\n function lzReceiveAndRevert(InboundPacket[] calldata _packets) public payable virtual {\n for (uint256 i = 0; i < _packets.length; i++) {\n InboundPacket calldata packet = _packets[i];\n\n // Ignore packets that are not from trusted peers.\n if (!isPeer(packet.origin.srcEid, packet.origin.sender)) continue;\n\n // @dev Because a verifier is calling this function, it doesnt have access to executor params:\n // - address _executor\n // - bytes calldata _extraData\n // preCrime will NOT work for OApps that rely on these two parameters inside of their _lzReceive().\n // They are instead stubbed to default values, address(0) and bytes(\"\")\n // @dev Calling this.lzReceiveSimulate removes ability for assembly return 0 callstack exit,\n // which would cause the revert to be ignored.\n this.lzReceiveSimulate{ value: packet.value }(\n packet.origin,\n packet.guid,\n packet.message,\n packet.executor,\n packet.extraData\n );\n }\n\n // @dev Revert with the simulation results. msg.sender must implement IPreCrime.buildSimulationResult().\n revert SimulationResult(IPreCrime(msg.sender).buildSimulationResult());\n }\n\n /**\n * @dev Is effectively an internal function because msg.sender must be address(this).\n * Allows resetting the call stack for 'internal' calls.\n * @param _origin The origin information containing the source endpoint and sender address.\n * - srcEid: The source chain endpoint ID.\n * - sender: The sender address on the src chain.\n * - nonce: The nonce of the message.\n * @param _guid The unique identifier of the packet.\n * @param _message The message payload of the packet.\n * @param _executor The executor address for the packet.\n * @param _extraData Additional data for the packet.\n */\n function lzReceiveSimulate(\n Origin calldata _origin,\n bytes32 _guid,\n bytes calldata _message,\n address _executor,\n bytes calldata _extraData\n ) external payable virtual {\n // @dev Ensure ONLY can be called 'internally'.\n if (msg.sender != address(this)) revert OnlySelf();\n _lzReceiveSimulate(_origin, _guid, _message, _executor, _extraData);\n }\n\n /**\n * @dev Internal function to handle the OAppPreCrimeSimulator simulated receive.\n * @param _origin The origin information.\n * - srcEid: The source chain endpoint ID.\n * - sender: The sender address from the src chain.\n * - nonce: The nonce of the LayerZero message.\n * @param _guid The GUID of the LayerZero message.\n * @param _message The LayerZero message.\n * @param _executor The address of the off-chain executor.\n * @param _extraData Arbitrary data passed by the msg executor.\n *\n * @dev Enables the preCrime simulator to mock sending lzReceive() messages,\n * routes the msg down from the OAppPreCrimeSimulator, and back up to the OAppReceiver.\n */\n function _lzReceiveSimulate(\n Origin calldata _origin,\n bytes32 _guid,\n bytes calldata _message,\n address _executor,\n bytes calldata _extraData\n ) internal virtual;\n\n /**\n * @dev checks if the specified peer is considered 'trusted' by the OApp.\n * @param _eid The endpoint Id to check.\n * @param _peer The peer to check.\n * @return Whether the peer passed is considered 'trusted' by the OApp.\n */\n function isPeer(uint32 _eid, bytes32 _peer) public view virtual returns (bool);\n}\n" - }, - "@layerzerolabs/oft-evm/contracts/interfaces/IOFT.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.20;\n\nimport { MessagingReceipt, MessagingFee } from \"@layerzerolabs/oapp-evm/contracts/oapp/OAppSender.sol\";\n\n/**\n * @dev Struct representing token parameters for the OFT send() operation.\n */\nstruct SendParam {\n uint32 dstEid; // Destination endpoint ID.\n bytes32 to; // Recipient address.\n uint256 amountLD; // Amount to send in local decimals.\n uint256 minAmountLD; // Minimum amount to send in local decimals.\n bytes extraOptions; // Additional options supplied by the caller to be used in the LayerZero message.\n bytes composeMsg; // The composed message for the send() operation.\n bytes oftCmd; // The OFT command to be executed, unused in default OFT implementations.\n}\n\n/**\n * @dev Struct representing OFT limit information.\n * @dev These amounts can change dynamically and are up the specific oft implementation.\n */\nstruct OFTLimit {\n uint256 minAmountLD; // Minimum amount in local decimals that can be sent to the recipient.\n uint256 maxAmountLD; // Maximum amount in local decimals that can be sent to the recipient.\n}\n\n/**\n * @dev Struct representing OFT receipt information.\n */\nstruct OFTReceipt {\n uint256 amountSentLD; // Amount of tokens ACTUALLY debited from the sender in local decimals.\n // @dev In non-default implementations, the amountReceivedLD COULD differ from this value.\n uint256 amountReceivedLD; // Amount of tokens to be received on the remote side.\n}\n\n/**\n * @dev Struct representing OFT fee details.\n * @dev Future proof mechanism to provide a standardized way to communicate fees to things like a UI.\n */\nstruct OFTFeeDetail {\n int256 feeAmountLD; // Amount of the fee in local decimals.\n string description; // Description of the fee.\n}\n\n/**\n * @title IOFT\n * @dev Interface for the OftChain (OFT) token.\n * @dev Does not inherit ERC20 to accommodate usage by OFTAdapter as well.\n * @dev This specific interface ID is '0x02e49c2c'.\n */\ninterface IOFT {\n // Custom error messages\n error InvalidLocalDecimals();\n error SlippageExceeded(uint256 amountLD, uint256 minAmountLD);\n\n // Events\n event OFTSent(\n bytes32 indexed guid, // GUID of the OFT message.\n uint32 dstEid, // Destination Endpoint ID.\n address indexed fromAddress, // Address of the sender on the src chain.\n uint256 amountSentLD, // Amount of tokens sent in local decimals.\n uint256 amountReceivedLD // Amount of tokens received in local decimals.\n );\n event OFTReceived(\n bytes32 indexed guid, // GUID of the OFT message.\n uint32 srcEid, // Source Endpoint ID.\n address indexed toAddress, // Address of the recipient on the dst chain.\n uint256 amountReceivedLD // Amount of tokens received in local decimals.\n );\n\n /**\n * @notice Retrieves interfaceID and the version of the OFT.\n * @return interfaceId The interface ID.\n * @return version The version.\n *\n * @dev interfaceId: This specific interface ID is '0x02e49c2c'.\n * @dev version: Indicates a cross-chain compatible msg encoding with other OFTs.\n * @dev If a new feature is added to the OFT cross-chain msg encoding, the version will be incremented.\n * ie. localOFT version(x,1) CAN send messages to remoteOFT version(x,1)\n */\n function oftVersion() external view returns (bytes4 interfaceId, uint64 version);\n\n /**\n * @notice Retrieves the address of the token associated with the OFT.\n * @return token The address of the ERC20 token implementation.\n */\n function token() external view returns (address);\n\n /**\n * @notice Indicates whether the OFT contract requires approval of the 'token()' to send.\n * @return requiresApproval Needs approval of the underlying token implementation.\n *\n * @dev Allows things like wallet implementers to determine integration requirements,\n * without understanding the underlying token implementation.\n */\n function approvalRequired() external view returns (bool);\n\n /**\n * @notice Retrieves the shared decimals of the OFT.\n * @return sharedDecimals The shared decimals of the OFT.\n */\n function sharedDecimals() external view returns (uint8);\n\n /**\n * @notice Provides the fee breakdown and settings data for an OFT. Unused in the default implementation.\n * @param _sendParam The parameters for the send operation.\n * @return limit The OFT limit information.\n * @return oftFeeDetails The details of OFT fees.\n * @return receipt The OFT receipt information.\n */\n function quoteOFT(\n SendParam calldata _sendParam\n ) external view returns (OFTLimit memory, OFTFeeDetail[] memory oftFeeDetails, OFTReceipt memory);\n\n /**\n * @notice Provides a quote for the send() operation.\n * @param _sendParam The parameters for the send() operation.\n * @param _payInLzToken Flag indicating whether the caller is paying in the LZ token.\n * @return fee The calculated LayerZero messaging fee from the send() operation.\n *\n * @dev MessagingFee: LayerZero msg fee\n * - nativeFee: The native fee.\n * - lzTokenFee: The lzToken fee.\n */\n function quoteSend(SendParam calldata _sendParam, bool _payInLzToken) external view returns (MessagingFee memory);\n\n /**\n * @notice Executes the send() operation.\n * @param _sendParam The parameters for the send operation.\n * @param _fee The fee information supplied by the caller.\n * - nativeFee: The native fee.\n * - lzTokenFee: The lzToken fee.\n * @param _refundAddress The address to receive any excess funds from fees etc. on the src.\n * @return receipt The LayerZero messaging receipt from the send() operation.\n * @return oftReceipt The OFT receipt information.\n *\n * @dev MessagingReceipt: LayerZero msg receipt\n * - guid: The unique identifier for the sent message.\n * - nonce: The nonce of the sent message.\n * - fee: The LayerZero fee incurred for the message.\n */\n function send(\n SendParam calldata _sendParam,\n MessagingFee calldata _fee,\n address _refundAddress\n ) external payable returns (MessagingReceipt memory, OFTReceipt memory);\n}\n" - }, - "@layerzerolabs/oft-evm/contracts/libs/OFTComposeMsgCodec.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.20;\n\nlibrary OFTComposeMsgCodec {\n // Offset constants for decoding composed messages\n uint8 private constant NONCE_OFFSET = 8;\n uint8 private constant SRC_EID_OFFSET = 12;\n uint8 private constant AMOUNT_LD_OFFSET = 44;\n uint8 private constant COMPOSE_FROM_OFFSET = 76;\n\n /**\n * @dev Encodes a OFT composed message.\n * @param _nonce The nonce value.\n * @param _srcEid The source endpoint ID.\n * @param _amountLD The amount in local decimals.\n * @param _composeMsg The composed message.\n * @return _msg The encoded Composed message.\n */\n function encode(\n uint64 _nonce,\n uint32 _srcEid,\n uint256 _amountLD,\n bytes memory _composeMsg // 0x[composeFrom][composeMsg]\n ) internal pure returns (bytes memory _msg) {\n _msg = abi.encodePacked(_nonce, _srcEid, _amountLD, _composeMsg);\n }\n\n /**\n * @dev Retrieves the nonce for the composed message.\n * @param _msg The message.\n * @return The nonce value.\n */\n function nonce(bytes calldata _msg) internal pure returns (uint64) {\n return uint64(bytes8(_msg[:NONCE_OFFSET]));\n }\n\n /**\n * @dev Retrieves the source endpoint ID for the composed message.\n * @param _msg The message.\n * @return The source endpoint ID.\n */\n function srcEid(bytes calldata _msg) internal pure returns (uint32) {\n return uint32(bytes4(_msg[NONCE_OFFSET:SRC_EID_OFFSET]));\n }\n\n /**\n * @dev Retrieves the amount in local decimals from the composed message.\n * @param _msg The message.\n * @return The amount in local decimals.\n */\n function amountLD(bytes calldata _msg) internal pure returns (uint256) {\n return uint256(bytes32(_msg[SRC_EID_OFFSET:AMOUNT_LD_OFFSET]));\n }\n\n /**\n * @dev Retrieves the composeFrom value from the composed message.\n * @param _msg The message.\n * @return The composeFrom value.\n */\n function composeFrom(bytes calldata _msg) internal pure returns (bytes32) {\n return bytes32(_msg[AMOUNT_LD_OFFSET:COMPOSE_FROM_OFFSET]);\n }\n\n /**\n * @dev Retrieves the composed message.\n * @param _msg The message.\n * @return The composed message.\n */\n function composeMsg(bytes calldata _msg) internal pure returns (bytes memory) {\n return _msg[COMPOSE_FROM_OFFSET:];\n }\n\n /**\n * @dev Converts an address to bytes32.\n * @param _addr The address to convert.\n * @return The bytes32 representation of the address.\n */\n function addressToBytes32(address _addr) internal pure returns (bytes32) {\n return bytes32(uint256(uint160(_addr)));\n }\n\n /**\n * @dev Converts bytes32 to an address.\n * @param _b The bytes32 value to convert.\n * @return The address representation of bytes32.\n */\n function bytes32ToAddress(bytes32 _b) internal pure returns (address) {\n return address(uint160(uint256(_b)));\n }\n}\n" - }, - "@layerzerolabs/oft-evm/contracts/libs/OFTMsgCodec.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.20;\n\nlibrary OFTMsgCodec {\n // Offset constants for encoding and decoding OFT messages\n uint8 private constant SEND_TO_OFFSET = 32;\n uint8 private constant SEND_AMOUNT_SD_OFFSET = 40;\n\n /**\n * @dev Encodes an OFT LayerZero message.\n * @param _sendTo The recipient address.\n * @param _amountShared The amount in shared decimals.\n * @param _composeMsg The composed message.\n * @return _msg The encoded message.\n * @return hasCompose A boolean indicating whether the message has a composed payload.\n */\n function encode(\n bytes32 _sendTo,\n uint64 _amountShared,\n bytes memory _composeMsg\n ) internal view returns (bytes memory _msg, bool hasCompose) {\n hasCompose = _composeMsg.length > 0;\n // @dev Remote chains will want to know the composed function caller ie. msg.sender on the src.\n _msg = hasCompose\n ? abi.encodePacked(_sendTo, _amountShared, addressToBytes32(msg.sender), _composeMsg)\n : abi.encodePacked(_sendTo, _amountShared);\n }\n\n /**\n * @dev Checks if the OFT message is composed.\n * @param _msg The OFT message.\n * @return A boolean indicating whether the message is composed.\n */\n function isComposed(bytes calldata _msg) internal pure returns (bool) {\n return _msg.length > SEND_AMOUNT_SD_OFFSET;\n }\n\n /**\n * @dev Retrieves the recipient address from the OFT message.\n * @param _msg The OFT message.\n * @return The recipient address.\n */\n function sendTo(bytes calldata _msg) internal pure returns (bytes32) {\n return bytes32(_msg[:SEND_TO_OFFSET]);\n }\n\n /**\n * @dev Retrieves the amount in shared decimals from the OFT message.\n * @param _msg The OFT message.\n * @return The amount in shared decimals.\n */\n function amountSD(bytes calldata _msg) internal pure returns (uint64) {\n return uint64(bytes8(_msg[SEND_TO_OFFSET:SEND_AMOUNT_SD_OFFSET]));\n }\n\n /**\n * @dev Retrieves the composed message from the OFT message.\n * @param _msg The OFT message.\n * @return The composed message.\n */\n function composeMsg(bytes calldata _msg) internal pure returns (bytes memory) {\n return _msg[SEND_AMOUNT_SD_OFFSET:];\n }\n\n /**\n * @dev Converts an address to bytes32.\n * @param _addr The address to convert.\n * @return The bytes32 representation of the address.\n */\n function addressToBytes32(address _addr) internal pure returns (bytes32) {\n return bytes32(uint256(uint160(_addr)));\n }\n\n /**\n * @dev Converts bytes32 to an address.\n * @param _b The bytes32 value to convert.\n * @return The address representation of bytes32.\n */\n function bytes32ToAddress(bytes32 _b) internal pure returns (address) {\n return address(uint160(uint256(_b)));\n }\n}\n" - }, - "@layerzerolabs/oft-evm/contracts/OFT.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.20;\n\nimport { ERC20 } from \"@openzeppelin/contracts/token/ERC20/ERC20.sol\";\nimport { IOFT, OFTCore } from \"./OFTCore.sol\";\n\n/**\n * @title OFT Contract\n * @dev OFT is an ERC-20 token that extends the functionality of the OFTCore contract.\n */\nabstract contract OFT is OFTCore, ERC20 {\n /**\n * @dev Constructor for the OFT contract.\n * @param _name The name of the OFT.\n * @param _symbol The symbol of the OFT.\n * @param _lzEndpoint The LayerZero endpoint address.\n * @param _delegate The delegate capable of making OApp configurations inside of the endpoint.\n */\n constructor(\n string memory _name,\n string memory _symbol,\n address _lzEndpoint,\n address _delegate\n ) ERC20(_name, _symbol) OFTCore(decimals(), _lzEndpoint, _delegate) {}\n\n /**\n * @dev Retrieves the address of the underlying ERC20 implementation.\n * @return The address of the OFT token.\n *\n * @dev In the case of OFT, address(this) and erc20 are the same contract.\n */\n function token() public view returns (address) {\n return address(this);\n }\n\n /**\n * @notice Indicates whether the OFT contract requires approval of the 'token()' to send.\n * @return requiresApproval Needs approval of the underlying token implementation.\n *\n * @dev In the case of OFT where the contract IS the token, approval is NOT required.\n */\n function approvalRequired() external pure virtual returns (bool) {\n return false;\n }\n\n /**\n * @dev Burns tokens from the sender's specified balance.\n * @param _from The address to debit the tokens from.\n * @param _amountLD The amount of tokens to send in local decimals.\n * @param _minAmountLD The minimum amount to send in local decimals.\n * @param _dstEid The destination chain ID.\n * @return amountSentLD The amount sent in local decimals.\n * @return amountReceivedLD The amount received in local decimals on the remote.\n */\n function _debit(\n address _from,\n uint256 _amountLD,\n uint256 _minAmountLD,\n uint32 _dstEid\n ) internal virtual override returns (uint256 amountSentLD, uint256 amountReceivedLD) {\n (amountSentLD, amountReceivedLD) = _debitView(_amountLD, _minAmountLD, _dstEid);\n\n // @dev In NON-default OFT, amountSentLD could be 100, with a 10% fee, the amountReceivedLD amount is 90,\n // therefore amountSentLD CAN differ from amountReceivedLD.\n\n // @dev Default OFT burns on src.\n _burn(_from, amountSentLD);\n }\n\n /**\n * @dev Credits tokens to the specified address.\n * @param _to The address to credit the tokens to.\n * @param _amountLD The amount of tokens to credit in local decimals.\n * @dev _srcEid The source chain ID.\n * @return amountReceivedLD The amount of tokens ACTUALLY received in local decimals.\n */\n function _credit(\n address _to,\n uint256 _amountLD,\n uint32 /*_srcEid*/\n ) internal virtual override returns (uint256 amountReceivedLD) {\n if (_to == address(0x0)) _to = address(0xdead); // _mint(...) does not support address(0x0)\n // @dev Default OFT mints on dst.\n _mint(_to, _amountLD);\n // @dev In the case of NON-default OFT, the _amountLD MIGHT not be == amountReceivedLD.\n return _amountLD;\n }\n}\n" - }, - "@layerzerolabs/oft-evm/contracts/OFTCore.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.20;\n\nimport { OApp, Origin } from \"@layerzerolabs/oapp-evm/contracts/oapp/OApp.sol\";\nimport { OAppOptionsType3 } from \"@layerzerolabs/oapp-evm/contracts/oapp/libs/OAppOptionsType3.sol\";\nimport { IOAppMsgInspector } from \"@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppMsgInspector.sol\";\n\nimport { OAppPreCrimeSimulator } from \"@layerzerolabs/oapp-evm/contracts/precrime/OAppPreCrimeSimulator.sol\";\n\nimport { IOFT, SendParam, OFTLimit, OFTReceipt, OFTFeeDetail, MessagingReceipt, MessagingFee } from \"./interfaces/IOFT.sol\";\nimport { OFTMsgCodec } from \"./libs/OFTMsgCodec.sol\";\nimport { OFTComposeMsgCodec } from \"./libs/OFTComposeMsgCodec.sol\";\n\n/**\n * @title OFTCore\n * @dev Abstract contract for the OftChain (OFT) token.\n */\nabstract contract OFTCore is IOFT, OApp, OAppPreCrimeSimulator, OAppOptionsType3 {\n using OFTMsgCodec for bytes;\n using OFTMsgCodec for bytes32;\n\n // @notice Provides a conversion rate when swapping between denominations of SD and LD\n // - shareDecimals == SD == shared Decimals\n // - localDecimals == LD == local decimals\n // @dev Considers that tokens have different decimal amounts on various chains.\n // @dev eg.\n // For a token\n // - locally with 4 decimals --> 1.2345 => uint(12345)\n // - remotely with 2 decimals --> 1.23 => uint(123)\n // - The conversion rate would be 10 ** (4 - 2) = 100\n // @dev If you want to send 1.2345 -> (uint 12345), you CANNOT represent that value on the remote,\n // you can only display 1.23 -> uint(123).\n // @dev To preserve the dust that would otherwise be lost on that conversion,\n // we need to unify a denomination that can be represented on ALL chains inside of the OFT mesh\n uint256 public immutable decimalConversionRate;\n\n // @notice Msg types that are used to identify the various OFT operations.\n // @dev This can be extended in child contracts for non-default oft operations\n // @dev These values are used in things like combineOptions() in OAppOptionsType3.sol.\n uint16 public constant SEND = 1;\n uint16 public constant SEND_AND_CALL = 2;\n\n // Address of an optional contract to inspect both 'message' and 'options'\n address public msgInspector;\n event MsgInspectorSet(address inspector);\n\n /**\n * @dev Constructor.\n * @param _localDecimals The decimals of the token on the local chain (this chain).\n * @param _endpoint The address of the LayerZero endpoint.\n * @param _delegate The delegate capable of making OApp configurations inside of the endpoint.\n */\n constructor(uint8 _localDecimals, address _endpoint, address _delegate) OApp(_endpoint, _delegate) {\n if (_localDecimals < sharedDecimals()) revert InvalidLocalDecimals();\n decimalConversionRate = 10 ** (_localDecimals - sharedDecimals());\n }\n\n /**\n * @notice Retrieves interfaceID and the version of the OFT.\n * @return interfaceId The interface ID.\n * @return version The version.\n *\n * @dev interfaceId: This specific interface ID is '0x02e49c2c'.\n * @dev version: Indicates a cross-chain compatible msg encoding with other OFTs.\n * @dev If a new feature is added to the OFT cross-chain msg encoding, the version will be incremented.\n * ie. localOFT version(x,1) CAN send messages to remoteOFT version(x,1)\n */\n function oftVersion() external pure virtual returns (bytes4 interfaceId, uint64 version) {\n return (type(IOFT).interfaceId, 1);\n }\n\n /**\n * @dev Retrieves the shared decimals of the OFT.\n * @return The shared decimals of the OFT.\n *\n * @dev Sets an implicit cap on the amount of tokens, over uint64.max() will need some sort of outbound cap / totalSupply cap\n * Lowest common decimal denominator between chains.\n * Defaults to 6 decimal places to provide up to 18,446,744,073,709.551615 units (max uint64).\n * For tokens exceeding this totalSupply(), they will need to override the sharedDecimals function with something smaller.\n * ie. 4 sharedDecimals would be 1,844,674,407,370,955.1615\n */\n function sharedDecimals() public view virtual returns (uint8) {\n return 6;\n }\n\n /**\n * @dev Sets the message inspector address for the OFT.\n * @param _msgInspector The address of the message inspector.\n *\n * @dev This is an optional contract that can be used to inspect both 'message' and 'options'.\n * @dev Set it to address(0) to disable it, or set it to a contract address to enable it.\n */\n function setMsgInspector(address _msgInspector) public virtual onlyOwner {\n msgInspector = _msgInspector;\n emit MsgInspectorSet(_msgInspector);\n }\n\n /**\n * @notice Provides the fee breakdown and settings data for an OFT. Unused in the default implementation.\n * @param _sendParam The parameters for the send operation.\n * @return oftLimit The OFT limit information.\n * @return oftFeeDetails The details of OFT fees.\n * @return oftReceipt The OFT receipt information.\n */\n function quoteOFT(\n SendParam calldata _sendParam\n )\n external\n view\n virtual\n returns (OFTLimit memory oftLimit, OFTFeeDetail[] memory oftFeeDetails, OFTReceipt memory oftReceipt)\n {\n uint256 minAmountLD = 0; // Unused in the default implementation.\n uint256 maxAmountLD = type(uint64).max; // Unused in the default implementation.\n oftLimit = OFTLimit(minAmountLD, maxAmountLD);\n\n // Unused in the default implementation; reserved for future complex fee details.\n oftFeeDetails = new OFTFeeDetail[](0);\n\n // @dev This is the same as the send() operation, but without the actual send.\n // - amountSentLD is the amount in local decimals that would be sent from the sender.\n // - amountReceivedLD is the amount in local decimals that will be credited to the recipient on the remote OFT instance.\n // @dev The amountSentLD MIGHT not equal the amount the user actually receives. HOWEVER, the default does.\n (uint256 amountSentLD, uint256 amountReceivedLD) = _debitView(\n _sendParam.amountLD,\n _sendParam.minAmountLD,\n _sendParam.dstEid\n );\n oftReceipt = OFTReceipt(amountSentLD, amountReceivedLD);\n }\n\n /**\n * @notice Provides a quote for the send() operation.\n * @param _sendParam The parameters for the send() operation.\n * @param _payInLzToken Flag indicating whether the caller is paying in the LZ token.\n * @return msgFee The calculated LayerZero messaging fee from the send() operation.\n *\n * @dev MessagingFee: LayerZero msg fee\n * - nativeFee: The native fee.\n * - lzTokenFee: The lzToken fee.\n */\n function quoteSend(\n SendParam calldata _sendParam,\n bool _payInLzToken\n ) external view virtual returns (MessagingFee memory msgFee) {\n // @dev mock the amount to receive, this is the same operation used in the send().\n // The quote is as similar as possible to the actual send() operation.\n (, uint256 amountReceivedLD) = _debitView(_sendParam.amountLD, _sendParam.minAmountLD, _sendParam.dstEid);\n\n // @dev Builds the options and OFT message to quote in the endpoint.\n (bytes memory message, bytes memory options) = _buildMsgAndOptions(_sendParam, amountReceivedLD);\n\n // @dev Calculates the LayerZero fee for the send() operation.\n return _quote(_sendParam.dstEid, message, options, _payInLzToken);\n }\n\n /**\n * @dev Executes the send operation.\n * @param _sendParam The parameters for the send operation.\n * @param _fee The calculated fee for the send() operation.\n * - nativeFee: The native fee.\n * - lzTokenFee: The lzToken fee.\n * @param _refundAddress The address to receive any excess funds.\n * @return msgReceipt The receipt for the send operation.\n * @return oftReceipt The OFT receipt information.\n *\n * @dev MessagingReceipt: LayerZero msg receipt\n * - guid: The unique identifier for the sent message.\n * - nonce: The nonce of the sent message.\n * - fee: The LayerZero fee incurred for the message.\n */\n function send(\n SendParam calldata _sendParam,\n MessagingFee calldata _fee,\n address _refundAddress\n ) external payable virtual returns (MessagingReceipt memory msgReceipt, OFTReceipt memory oftReceipt) {\n return _send(_sendParam, _fee, _refundAddress);\n }\n\n /**\n * @dev Internal function to execute the send operation.\n * @param _sendParam The parameters for the send operation.\n * @param _fee The calculated fee for the send() operation.\n * - nativeFee: The native fee.\n * - lzTokenFee: The lzToken fee.\n * @param _refundAddress The address to receive any excess funds.\n * @return msgReceipt The receipt for the send operation.\n * @return oftReceipt The OFT receipt information.\n *\n * @dev MessagingReceipt: LayerZero msg receipt\n * - guid: The unique identifier for the sent message.\n * - nonce: The nonce of the sent message.\n * - fee: The LayerZero fee incurred for the message.\n */\n function _send(\n SendParam calldata _sendParam,\n MessagingFee calldata _fee,\n address _refundAddress\n ) internal virtual returns (MessagingReceipt memory msgReceipt, OFTReceipt memory oftReceipt) {\n // @dev Applies the token transfers regarding this send() operation.\n // - amountSentLD is the amount in local decimals that was ACTUALLY sent/debited from the sender.\n // - amountReceivedLD is the amount in local decimals that will be received/credited to the recipient on the remote OFT instance.\n (uint256 amountSentLD, uint256 amountReceivedLD) = _debit(\n msg.sender,\n _sendParam.amountLD,\n _sendParam.minAmountLD,\n _sendParam.dstEid\n );\n\n // @dev Builds the options and OFT message to quote in the endpoint.\n (bytes memory message, bytes memory options) = _buildMsgAndOptions(_sendParam, amountReceivedLD);\n\n // @dev Sends the message to the LayerZero endpoint and returns the LayerZero msg receipt.\n msgReceipt = _lzSend(_sendParam.dstEid, message, options, _fee, _refundAddress);\n // @dev Formulate the OFT receipt.\n oftReceipt = OFTReceipt(amountSentLD, amountReceivedLD);\n\n emit OFTSent(msgReceipt.guid, _sendParam.dstEid, msg.sender, amountSentLD, amountReceivedLD);\n }\n\n /**\n * @dev Internal function to build the message and options.\n * @param _sendParam The parameters for the send() operation.\n * @param _amountLD The amount in local decimals.\n * @return message The encoded message.\n * @return options The encoded options.\n */\n function _buildMsgAndOptions(\n SendParam calldata _sendParam,\n uint256 _amountLD\n ) internal view virtual returns (bytes memory message, bytes memory options) {\n bool hasCompose;\n // @dev This generated message has the msg.sender encoded into the payload so the remote knows who the caller is.\n (message, hasCompose) = OFTMsgCodec.encode(\n _sendParam.to,\n _toSD(_amountLD),\n // @dev Must be include a non empty bytes if you want to compose, EVEN if you dont need it on the remote.\n // EVEN if you dont require an arbitrary payload to be sent... eg. '0x01'\n _sendParam.composeMsg\n );\n // @dev Change the msg type depending if its composed or not.\n uint16 msgType = hasCompose ? SEND_AND_CALL : SEND;\n // @dev Combine the callers _extraOptions with the enforced options via the OAppOptionsType3.\n options = combineOptions(_sendParam.dstEid, msgType, _sendParam.extraOptions);\n\n // @dev Optionally inspect the message and options depending if the OApp owner has set a msg inspector.\n // @dev If it fails inspection, needs to revert in the implementation. ie. does not rely on return boolean\n address inspector = msgInspector; // caches the msgInspector to avoid potential double storage read\n if (inspector != address(0)) IOAppMsgInspector(inspector).inspect(message, options);\n }\n\n /**\n * @dev Internal function to handle the receive on the LayerZero endpoint.\n * @param _origin The origin information.\n * - srcEid: The source chain endpoint ID.\n * - sender: The sender address from the src chain.\n * - nonce: The nonce of the LayerZero message.\n * @param _guid The unique identifier for the received LayerZero message.\n * @param _message The encoded message.\n * @dev _executor The address of the executor.\n * @dev _extraData Additional data.\n */\n function _lzReceive(\n Origin calldata _origin,\n bytes32 _guid,\n bytes calldata _message,\n address /*_executor*/, // @dev unused in the default implementation.\n bytes calldata /*_extraData*/ // @dev unused in the default implementation.\n ) internal virtual override {\n // @dev The src sending chain doesnt know the address length on this chain (potentially non-evm)\n // Thus everything is bytes32() encoded in flight.\n address toAddress = _message.sendTo().bytes32ToAddress();\n // @dev Credit the amountLD to the recipient and return the ACTUAL amount the recipient received in local decimals\n uint256 amountReceivedLD = _credit(toAddress, _toLD(_message.amountSD()), _origin.srcEid);\n\n if (_message.isComposed()) {\n // @dev Proprietary composeMsg format for the OFT.\n bytes memory composeMsg = OFTComposeMsgCodec.encode(\n _origin.nonce,\n _origin.srcEid,\n amountReceivedLD,\n _message.composeMsg()\n );\n\n // @dev Stores the lzCompose payload that will be executed in a separate tx.\n // Standardizes functionality for executing arbitrary contract invocation on some non-evm chains.\n // @dev The off-chain executor will listen and process the msg based on the src-chain-callers compose options passed.\n // @dev The index is used when a OApp needs to compose multiple msgs on lzReceive.\n // For default OFT implementation there is only 1 compose msg per lzReceive, thus its always 0.\n endpoint.sendCompose(toAddress, _guid, 0 /* the index of the composed message*/, composeMsg);\n }\n\n emit OFTReceived(_guid, _origin.srcEid, toAddress, amountReceivedLD);\n }\n\n /**\n * @dev Internal function to handle the OAppPreCrimeSimulator simulated receive.\n * @param _origin The origin information.\n * - srcEid: The source chain endpoint ID.\n * - sender: The sender address from the src chain.\n * - nonce: The nonce of the LayerZero message.\n * @param _guid The unique identifier for the received LayerZero message.\n * @param _message The LayerZero message.\n * @param _executor The address of the off-chain executor.\n * @param _extraData Arbitrary data passed by the msg executor.\n *\n * @dev Enables the preCrime simulator to mock sending lzReceive() messages,\n * routes the msg down from the OAppPreCrimeSimulator, and back up to the OAppReceiver.\n */\n function _lzReceiveSimulate(\n Origin calldata _origin,\n bytes32 _guid,\n bytes calldata _message,\n address _executor,\n bytes calldata _extraData\n ) internal virtual override {\n _lzReceive(_origin, _guid, _message, _executor, _extraData);\n }\n\n /**\n * @dev Check if the peer is considered 'trusted' by the OApp.\n * @param _eid The endpoint ID to check.\n * @param _peer The peer to check.\n * @return Whether the peer passed is considered 'trusted' by the OApp.\n *\n * @dev Enables OAppPreCrimeSimulator to check whether a potential Inbound Packet is from a trusted source.\n */\n function isPeer(uint32 _eid, bytes32 _peer) public view virtual override returns (bool) {\n return peers[_eid] == _peer;\n }\n\n /**\n * @dev Internal function to remove dust from the given local decimal amount.\n * @param _amountLD The amount in local decimals.\n * @return amountLD The amount after removing dust.\n *\n * @dev Prevents the loss of dust when moving amounts between chains with different decimals.\n * @dev eg. uint(123) with a conversion rate of 100 becomes uint(100).\n */\n function _removeDust(uint256 _amountLD) internal view virtual returns (uint256 amountLD) {\n return (_amountLD / decimalConversionRate) * decimalConversionRate;\n }\n\n /**\n * @dev Internal function to convert an amount from shared decimals into local decimals.\n * @param _amountSD The amount in shared decimals.\n * @return amountLD The amount in local decimals.\n */\n function _toLD(uint64 _amountSD) internal view virtual returns (uint256 amountLD) {\n return _amountSD * decimalConversionRate;\n }\n\n /**\n * @dev Internal function to convert an amount from local decimals into shared decimals.\n * @param _amountLD The amount in local decimals.\n * @return amountSD The amount in shared decimals.\n */\n function _toSD(uint256 _amountLD) internal view virtual returns (uint64 amountSD) {\n return uint64(_amountLD / decimalConversionRate);\n }\n\n /**\n * @dev Internal function to mock the amount mutation from a OFT debit() operation.\n * @param _amountLD The amount to send in local decimals.\n * @param _minAmountLD The minimum amount to send in local decimals.\n * @dev _dstEid The destination endpoint ID.\n * @return amountSentLD The amount sent, in local decimals.\n * @return amountReceivedLD The amount to be received on the remote chain, in local decimals.\n *\n * @dev This is where things like fees would be calculated and deducted from the amount to be received on the remote.\n */\n function _debitView(\n uint256 _amountLD,\n uint256 _minAmountLD,\n uint32 /*_dstEid*/\n ) internal view virtual returns (uint256 amountSentLD, uint256 amountReceivedLD) {\n // @dev Remove the dust so nothing is lost on the conversion between chains with different decimals for the token.\n amountSentLD = _removeDust(_amountLD);\n // @dev The amount to send is the same as amount received in the default implementation.\n amountReceivedLD = amountSentLD;\n\n // @dev Check for slippage.\n if (amountReceivedLD < _minAmountLD) {\n revert SlippageExceeded(amountReceivedLD, _minAmountLD);\n }\n }\n\n /**\n * @dev Internal function to perform a debit operation.\n * @param _from The address to debit.\n * @param _amountLD The amount to send in local decimals.\n * @param _minAmountLD The minimum amount to send in local decimals.\n * @param _dstEid The destination endpoint ID.\n * @return amountSentLD The amount sent in local decimals.\n * @return amountReceivedLD The amount received in local decimals on the remote.\n *\n * @dev Defined here but are intended to be overriden depending on the OFT implementation.\n * @dev Depending on OFT implementation the _amountLD could differ from the amountReceivedLD.\n */\n function _debit(\n address _from,\n uint256 _amountLD,\n uint256 _minAmountLD,\n uint32 _dstEid\n ) internal virtual returns (uint256 amountSentLD, uint256 amountReceivedLD);\n\n /**\n * @dev Internal function to perform a credit operation.\n * @param _to The address to credit.\n * @param _amountLD The amount to credit in local decimals.\n * @param _srcEid The source endpoint ID.\n * @return amountReceivedLD The amount ACTUALLY received in local decimals.\n *\n * @dev Defined here but are intended to be overriden depending on the OFT implementation.\n * @dev Depending on OFT implementation the _amountLD could differ from the amountReceivedLD.\n */\n function _credit(\n address _to,\n uint256 _amountLD,\n uint32 _srcEid\n ) internal virtual returns (uint256 amountReceivedLD);\n}\n" - }, - "@openzeppelin/contracts/access/Ownable.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)\n\npragma solidity ^0.8.20;\n\nimport {Context} from \"../utils/Context.sol\";\n\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * The initial owner is set to the address provided by the deployer. This can\n * later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract Ownable is Context {\n address private _owner;\n\n /**\n * @dev The caller account is not authorized to perform an operation.\n */\n error OwnableUnauthorizedAccount(address account);\n\n /**\n * @dev The owner is not a valid owner account. (eg. `address(0)`)\n */\n error OwnableInvalidOwner(address owner);\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /**\n * @dev Initializes the contract setting the address provided by the deployer as the initial owner.\n */\n constructor(address initialOwner) {\n if (initialOwner == address(0)) {\n revert OwnableInvalidOwner(address(0));\n }\n _transferOwnership(initialOwner);\n }\n\n /**\n * @dev Throws if called by any account other than the owner.\n */\n modifier onlyOwner() {\n _checkOwner();\n _;\n }\n\n /**\n * @dev Returns the address of the current owner.\n */\n function owner() public view virtual returns (address) {\n return _owner;\n }\n\n /**\n * @dev Throws if the sender is not the owner.\n */\n function _checkOwner() internal view virtual {\n if (owner() != _msgSender()) {\n revert OwnableUnauthorizedAccount(_msgSender());\n }\n }\n\n /**\n * @dev Leaves the contract without owner. It will not be possible to call\n * `onlyOwner` functions. Can only be called by the current owner.\n *\n * NOTE: Renouncing ownership will leave the contract without an owner,\n * thereby disabling any functionality that is only available to the owner.\n */\n function renounceOwnership() public virtual onlyOwner {\n _transferOwnership(address(0));\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Can only be called by the current owner.\n */\n function transferOwnership(address newOwner) public virtual onlyOwner {\n if (newOwner == address(0)) {\n revert OwnableInvalidOwner(address(0));\n }\n _transferOwnership(newOwner);\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Internal function without access restriction.\n */\n function _transferOwnership(address newOwner) internal virtual {\n address oldOwner = _owner;\n _owner = newOwner;\n emit OwnershipTransferred(oldOwner, newOwner);\n }\n}\n" - }, - "@openzeppelin/contracts/interfaces/draft-IERC6093.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (interfaces/draft-IERC6093.sol)\npragma solidity ^0.8.20;\n\n/**\n * @dev Standard ERC-20 Errors\n * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-20 tokens.\n */\ninterface IERC20Errors {\n /**\n * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.\n * @param sender Address whose tokens are being transferred.\n * @param balance Current balance for the interacting account.\n * @param needed Minimum amount required to perform a transfer.\n */\n error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed);\n\n /**\n * @dev Indicates a failure with the token `sender`. Used in transfers.\n * @param sender Address whose tokens are being transferred.\n */\n error ERC20InvalidSender(address sender);\n\n /**\n * @dev Indicates a failure with the token `receiver`. Used in transfers.\n * @param receiver Address to which tokens are being transferred.\n */\n error ERC20InvalidReceiver(address receiver);\n\n /**\n * @dev Indicates a failure with the `spender`’s `allowance`. Used in transfers.\n * @param spender Address that may be allowed to operate on tokens without being their owner.\n * @param allowance Amount of tokens a `spender` is allowed to operate with.\n * @param needed Minimum amount required to perform a transfer.\n */\n error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed);\n\n /**\n * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\n * @param approver Address initiating an approval operation.\n */\n error ERC20InvalidApprover(address approver);\n\n /**\n * @dev Indicates a failure with the `spender` to be approved. Used in approvals.\n * @param spender Address that may be allowed to operate on tokens without being their owner.\n */\n error ERC20InvalidSpender(address spender);\n}\n\n/**\n * @dev Standard ERC-721 Errors\n * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-721 tokens.\n */\ninterface IERC721Errors {\n /**\n * @dev Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in ERC-20.\n * Used in balance queries.\n * @param owner Address of the current owner of a token.\n */\n error ERC721InvalidOwner(address owner);\n\n /**\n * @dev Indicates a `tokenId` whose `owner` is the zero address.\n * @param tokenId Identifier number of a token.\n */\n error ERC721NonexistentToken(uint256 tokenId);\n\n /**\n * @dev Indicates an error related to the ownership over a particular token. Used in transfers.\n * @param sender Address whose tokens are being transferred.\n * @param tokenId Identifier number of a token.\n * @param owner Address of the current owner of a token.\n */\n error ERC721IncorrectOwner(address sender, uint256 tokenId, address owner);\n\n /**\n * @dev Indicates a failure with the token `sender`. Used in transfers.\n * @param sender Address whose tokens are being transferred.\n */\n error ERC721InvalidSender(address sender);\n\n /**\n * @dev Indicates a failure with the token `receiver`. Used in transfers.\n * @param receiver Address to which tokens are being transferred.\n */\n error ERC721InvalidReceiver(address receiver);\n\n /**\n * @dev Indicates a failure with the `operator`’s approval. Used in transfers.\n * @param operator Address that may be allowed to operate on tokens without being their owner.\n * @param tokenId Identifier number of a token.\n */\n error ERC721InsufficientApproval(address operator, uint256 tokenId);\n\n /**\n * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\n * @param approver Address initiating an approval operation.\n */\n error ERC721InvalidApprover(address approver);\n\n /**\n * @dev Indicates a failure with the `operator` to be approved. Used in approvals.\n * @param operator Address that may be allowed to operate on tokens without being their owner.\n */\n error ERC721InvalidOperator(address operator);\n}\n\n/**\n * @dev Standard ERC-1155 Errors\n * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-1155 tokens.\n */\ninterface IERC1155Errors {\n /**\n * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.\n * @param sender Address whose tokens are being transferred.\n * @param balance Current balance for the interacting account.\n * @param needed Minimum amount required to perform a transfer.\n * @param tokenId Identifier number of a token.\n */\n error ERC1155InsufficientBalance(address sender, uint256 balance, uint256 needed, uint256 tokenId);\n\n /**\n * @dev Indicates a failure with the token `sender`. Used in transfers.\n * @param sender Address whose tokens are being transferred.\n */\n error ERC1155InvalidSender(address sender);\n\n /**\n * @dev Indicates a failure with the token `receiver`. Used in transfers.\n * @param receiver Address to which tokens are being transferred.\n */\n error ERC1155InvalidReceiver(address receiver);\n\n /**\n * @dev Indicates a failure with the `operator`’s approval. Used in transfers.\n * @param operator Address that may be allowed to operate on tokens without being their owner.\n * @param owner Address of the current owner of a token.\n */\n error ERC1155MissingApprovalForAll(address operator, address owner);\n\n /**\n * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\n * @param approver Address initiating an approval operation.\n */\n error ERC1155InvalidApprover(address approver);\n\n /**\n * @dev Indicates a failure with the `operator` to be approved. Used in approvals.\n * @param operator Address that may be allowed to operate on tokens without being their owner.\n */\n error ERC1155InvalidOperator(address operator);\n\n /**\n * @dev Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation.\n * Used in batch transfers.\n * @param idsLength Length of the array of token identifiers\n * @param valuesLength Length of the array of token amounts\n */\n error ERC1155InvalidArrayLength(uint256 idsLength, uint256 valuesLength);\n}\n" - }, - "@openzeppelin/contracts/interfaces/IERC1363.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (interfaces/IERC1363.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC20} from \"./IERC20.sol\";\nimport {IERC165} from \"./IERC165.sol\";\n\n/**\n * @title IERC1363\n * @dev Interface of the ERC-1363 standard as defined in the https://eips.ethereum.org/EIPS/eip-1363[ERC-1363].\n *\n * Defines an extension interface for ERC-20 tokens that supports executing code on a recipient contract\n * after `transfer` or `transferFrom`, or code on a spender contract after `approve`, in a single transaction.\n */\ninterface IERC1363 is IERC20, IERC165 {\n /*\n * Note: the ERC-165 identifier for this interface is 0xb0202a11.\n * 0xb0202a11 ===\n * bytes4(keccak256('transferAndCall(address,uint256)')) ^\n * bytes4(keccak256('transferAndCall(address,uint256,bytes)')) ^\n * bytes4(keccak256('transferFromAndCall(address,address,uint256)')) ^\n * bytes4(keccak256('transferFromAndCall(address,address,uint256,bytes)')) ^\n * bytes4(keccak256('approveAndCall(address,uint256)')) ^\n * bytes4(keccak256('approveAndCall(address,uint256,bytes)'))\n */\n\n /**\n * @dev Moves a `value` amount of tokens from the caller's account to `to`\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\n * @param to The address which you want to transfer to.\n * @param value The amount of tokens to be transferred.\n * @return A boolean value indicating whether the operation succeeded unless throwing.\n */\n function transferAndCall(address to, uint256 value) external returns (bool);\n\n /**\n * @dev Moves a `value` amount of tokens from the caller's account to `to`\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\n * @param to The address which you want to transfer to.\n * @param value The amount of tokens to be transferred.\n * @param data Additional data with no specified format, sent in call to `to`.\n * @return A boolean value indicating whether the operation succeeded unless throwing.\n */\n function transferAndCall(address to, uint256 value, bytes calldata data) external returns (bool);\n\n /**\n * @dev Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\n * @param from The address which you want to send tokens from.\n * @param to The address which you want to transfer to.\n * @param value The amount of tokens to be transferred.\n * @return A boolean value indicating whether the operation succeeded unless throwing.\n */\n function transferFromAndCall(address from, address to, uint256 value) external returns (bool);\n\n /**\n * @dev Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\n * @param from The address which you want to send tokens from.\n * @param to The address which you want to transfer to.\n * @param value The amount of tokens to be transferred.\n * @param data Additional data with no specified format, sent in call to `to`.\n * @return A boolean value indicating whether the operation succeeded unless throwing.\n */\n function transferFromAndCall(address from, address to, uint256 value, bytes calldata data) external returns (bool);\n\n /**\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n * caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`.\n * @param spender The address which will spend the funds.\n * @param value The amount of tokens to be spent.\n * @return A boolean value indicating whether the operation succeeded unless throwing.\n */\n function approveAndCall(address spender, uint256 value) external returns (bool);\n\n /**\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n * caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`.\n * @param spender The address which will spend the funds.\n * @param value The amount of tokens to be spent.\n * @param data Additional data with no specified format, sent in call to `spender`.\n * @return A boolean value indicating whether the operation succeeded unless throwing.\n */\n function approveAndCall(address spender, uint256 value, bytes calldata data) external returns (bool);\n}\n" - }, - "@openzeppelin/contracts/interfaces/IERC165.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC165.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC165} from \"../utils/introspection/IERC165.sol\";\n" - }, - "@openzeppelin/contracts/interfaces/IERC20.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC20.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC20} from \"../token/ERC20/IERC20.sol\";\n" - }, - "@openzeppelin/contracts/token/ERC20/ERC20.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/ERC20.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC20} from \"./IERC20.sol\";\nimport {IERC20Metadata} from \"./extensions/IERC20Metadata.sol\";\nimport {Context} from \"../../utils/Context.sol\";\nimport {IERC20Errors} from \"../../interfaces/draft-IERC6093.sol\";\n\n/**\n * @dev Implementation of the {IERC20} interface.\n *\n * This implementation is agnostic to the way tokens are created. This means\n * that a supply mechanism has to be added in a derived contract using {_mint}.\n *\n * TIP: For a detailed writeup see our guide\n * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\n * to implement supply mechanisms].\n *\n * The default value of {decimals} is 18. To change this, you should override\n * this function so it returns a different value.\n *\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\n * instead returning `false` on failure. This behavior is nonetheless\n * conventional and does not conflict with the expectations of ERC-20\n * applications.\n */\nabstract contract ERC20 is Context, IERC20, IERC20Metadata, IERC20Errors {\n mapping(address account => uint256) private _balances;\n\n mapping(address account => mapping(address spender => uint256)) private _allowances;\n\n uint256 private _totalSupply;\n\n string private _name;\n string private _symbol;\n\n /**\n * @dev Sets the values for {name} and {symbol}.\n *\n * All two of these values are immutable: they can only be set once during\n * construction.\n */\n constructor(string memory name_, string memory symbol_) {\n _name = name_;\n _symbol = symbol_;\n }\n\n /**\n * @dev Returns the name of the token.\n */\n function name() public view virtual returns (string memory) {\n return _name;\n }\n\n /**\n * @dev Returns the symbol of the token, usually a shorter version of the\n * name.\n */\n function symbol() public view virtual returns (string memory) {\n return _symbol;\n }\n\n /**\n * @dev Returns the number of decimals used to get its user representation.\n * For example, if `decimals` equals `2`, a balance of `505` tokens should\n * be displayed to a user as `5.05` (`505 / 10 ** 2`).\n *\n * Tokens usually opt for a value of 18, imitating the relationship between\n * Ether and Wei. This is the default value returned by this function, unless\n * it's overridden.\n *\n * NOTE: This information is only used for _display_ purposes: it in\n * no way affects any of the arithmetic of the contract, including\n * {IERC20-balanceOf} and {IERC20-transfer}.\n */\n function decimals() public view virtual returns (uint8) {\n return 18;\n }\n\n /**\n * @dev See {IERC20-totalSupply}.\n */\n function totalSupply() public view virtual returns (uint256) {\n return _totalSupply;\n }\n\n /**\n * @dev See {IERC20-balanceOf}.\n */\n function balanceOf(address account) public view virtual returns (uint256) {\n return _balances[account];\n }\n\n /**\n * @dev See {IERC20-transfer}.\n *\n * Requirements:\n *\n * - `to` cannot be the zero address.\n * - the caller must have a balance of at least `value`.\n */\n function transfer(address to, uint256 value) public virtual returns (bool) {\n address owner = _msgSender();\n _transfer(owner, to, value);\n return true;\n }\n\n /**\n * @dev See {IERC20-allowance}.\n */\n function allowance(address owner, address spender) public view virtual returns (uint256) {\n return _allowances[owner][spender];\n }\n\n /**\n * @dev See {IERC20-approve}.\n *\n * NOTE: If `value` is the maximum `uint256`, the allowance is not updated on\n * `transferFrom`. This is semantically equivalent to an infinite approval.\n *\n * Requirements:\n *\n * - `spender` cannot be the zero address.\n */\n function approve(address spender, uint256 value) public virtual returns (bool) {\n address owner = _msgSender();\n _approve(owner, spender, value);\n return true;\n }\n\n /**\n * @dev See {IERC20-transferFrom}.\n *\n * Skips emitting an {Approval} event indicating an allowance update. This is not\n * required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve].\n *\n * NOTE: Does not update the allowance if the current allowance\n * is the maximum `uint256`.\n *\n * Requirements:\n *\n * - `from` and `to` cannot be the zero address.\n * - `from` must have a balance of at least `value`.\n * - the caller must have allowance for ``from``'s tokens of at least\n * `value`.\n */\n function transferFrom(address from, address to, uint256 value) public virtual returns (bool) {\n address spender = _msgSender();\n _spendAllowance(from, spender, value);\n _transfer(from, to, value);\n return true;\n }\n\n /**\n * @dev Moves a `value` amount of tokens from `from` to `to`.\n *\n * This internal function is equivalent to {transfer}, and can be used to\n * e.g. implement automatic token fees, slashing mechanisms, etc.\n *\n * Emits a {Transfer} event.\n *\n * NOTE: This function is not virtual, {_update} should be overridden instead.\n */\n function _transfer(address from, address to, uint256 value) internal {\n if (from == address(0)) {\n revert ERC20InvalidSender(address(0));\n }\n if (to == address(0)) {\n revert ERC20InvalidReceiver(address(0));\n }\n _update(from, to, value);\n }\n\n /**\n * @dev Transfers a `value` amount of tokens from `from` to `to`, or alternatively mints (or burns) if `from`\n * (or `to`) is the zero address. All customizations to transfers, mints, and burns should be done by overriding\n * this function.\n *\n * Emits a {Transfer} event.\n */\n function _update(address from, address to, uint256 value) internal virtual {\n if (from == address(0)) {\n // Overflow check required: The rest of the code assumes that totalSupply never overflows\n _totalSupply += value;\n } else {\n uint256 fromBalance = _balances[from];\n if (fromBalance < value) {\n revert ERC20InsufficientBalance(from, fromBalance, value);\n }\n unchecked {\n // Overflow not possible: value <= fromBalance <= totalSupply.\n _balances[from] = fromBalance - value;\n }\n }\n\n if (to == address(0)) {\n unchecked {\n // Overflow not possible: value <= totalSupply or value <= fromBalance <= totalSupply.\n _totalSupply -= value;\n }\n } else {\n unchecked {\n // Overflow not possible: balance + value is at most totalSupply, which we know fits into a uint256.\n _balances[to] += value;\n }\n }\n\n emit Transfer(from, to, value);\n }\n\n /**\n * @dev Creates a `value` amount of tokens and assigns them to `account`, by transferring it from address(0).\n * Relies on the `_update` mechanism\n *\n * Emits a {Transfer} event with `from` set to the zero address.\n *\n * NOTE: This function is not virtual, {_update} should be overridden instead.\n */\n function _mint(address account, uint256 value) internal {\n if (account == address(0)) {\n revert ERC20InvalidReceiver(address(0));\n }\n _update(address(0), account, value);\n }\n\n /**\n * @dev Destroys a `value` amount of tokens from `account`, lowering the total supply.\n * Relies on the `_update` mechanism.\n *\n * Emits a {Transfer} event with `to` set to the zero address.\n *\n * NOTE: This function is not virtual, {_update} should be overridden instead\n */\n function _burn(address account, uint256 value) internal {\n if (account == address(0)) {\n revert ERC20InvalidSender(address(0));\n }\n _update(account, address(0), value);\n }\n\n /**\n * @dev Sets `value` as the allowance of `spender` over the `owner` s tokens.\n *\n * This internal function is equivalent to `approve`, and can be used to\n * e.g. set automatic allowances for certain subsystems, etc.\n *\n * Emits an {Approval} event.\n *\n * Requirements:\n *\n * - `owner` cannot be the zero address.\n * - `spender` cannot be the zero address.\n *\n * Overrides to this logic should be done to the variant with an additional `bool emitEvent` argument.\n */\n function _approve(address owner, address spender, uint256 value) internal {\n _approve(owner, spender, value, true);\n }\n\n /**\n * @dev Variant of {_approve} with an optional flag to enable or disable the {Approval} event.\n *\n * By default (when calling {_approve}) the flag is set to true. On the other hand, approval changes made by\n * `_spendAllowance` during the `transferFrom` operation set the flag to false. This saves gas by not emitting any\n * `Approval` event during `transferFrom` operations.\n *\n * Anyone who wishes to continue emitting `Approval` events on the`transferFrom` operation can force the flag to\n * true using the following override:\n *\n * ```solidity\n * function _approve(address owner, address spender, uint256 value, bool) internal virtual override {\n * super._approve(owner, spender, value, true);\n * }\n * ```\n *\n * Requirements are the same as {_approve}.\n */\n function _approve(address owner, address spender, uint256 value, bool emitEvent) internal virtual {\n if (owner == address(0)) {\n revert ERC20InvalidApprover(address(0));\n }\n if (spender == address(0)) {\n revert ERC20InvalidSpender(address(0));\n }\n _allowances[owner][spender] = value;\n if (emitEvent) {\n emit Approval(owner, spender, value);\n }\n }\n\n /**\n * @dev Updates `owner` s allowance for `spender` based on spent `value`.\n *\n * Does not update the allowance value in case of infinite allowance.\n * Revert if not enough allowance is available.\n *\n * Does not emit an {Approval} event.\n */\n function _spendAllowance(address owner, address spender, uint256 value) internal virtual {\n uint256 currentAllowance = allowance(owner, spender);\n if (currentAllowance != type(uint256).max) {\n if (currentAllowance < value) {\n revert ERC20InsufficientAllowance(spender, currentAllowance, value);\n }\n unchecked {\n _approve(owner, spender, currentAllowance - value, false);\n }\n }\n }\n}\n" - }, - "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/extensions/IERC20Metadata.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC20} from \"../IERC20.sol\";\n\n/**\n * @dev Interface for the optional metadata functions from the ERC-20 standard.\n */\ninterface IERC20Metadata is IERC20 {\n /**\n * @dev Returns the name of the token.\n */\n function name() external view returns (string memory);\n\n /**\n * @dev Returns the symbol of the token.\n */\n function symbol() external view returns (string memory);\n\n /**\n * @dev Returns the decimals places of the token.\n */\n function decimals() external view returns (uint8);\n}\n" - }, - "@openzeppelin/contracts/token/ERC20/IERC20.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Interface of the ERC-20 standard as defined in the ERC.\n */\ninterface IERC20 {\n /**\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\n * another (`to`).\n *\n * Note that `value` may be zero.\n */\n event Transfer(address indexed from, address indexed to, uint256 value);\n\n /**\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\n * a call to {approve}. `value` is the new allowance.\n */\n event Approval(address indexed owner, address indexed spender, uint256 value);\n\n /**\n * @dev Returns the value of tokens in existence.\n */\n function totalSupply() external view returns (uint256);\n\n /**\n * @dev Returns the value of tokens owned by `account`.\n */\n function balanceOf(address account) external view returns (uint256);\n\n /**\n * @dev Moves a `value` amount of tokens from the caller's account to `to`.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * Emits a {Transfer} event.\n */\n function transfer(address to, uint256 value) external returns (bool);\n\n /**\n * @dev Returns the remaining number of tokens that `spender` will be\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\n * zero by default.\n *\n * This value changes when {approve} or {transferFrom} are called.\n */\n function allowance(address owner, address spender) external view returns (uint256);\n\n /**\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n * caller's tokens.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\n * that someone may use both the old and the new allowance by unfortunate\n * transaction ordering. One possible solution to mitigate this race\n * condition is to first reduce the spender's allowance to 0 and set the\n * desired value afterwards:\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n *\n * Emits an {Approval} event.\n */\n function approve(address spender, uint256 value) external returns (bool);\n\n /**\n * @dev Moves a `value` amount of tokens from `from` to `to` using the\n * allowance mechanism. `value` is then deducted from the caller's\n * allowance.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * Emits a {Transfer} event.\n */\n function transferFrom(address from, address to, uint256 value) external returns (bool);\n}\n" - }, - "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/utils/SafeERC20.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC20} from \"../IERC20.sol\";\nimport {IERC1363} from \"../../../interfaces/IERC1363.sol\";\nimport {Address} from \"../../../utils/Address.sol\";\n\n/**\n * @title SafeERC20\n * @dev Wrappers around ERC-20 operations that throw on failure (when the token\n * contract returns false). Tokens that return no value (and instead revert or\n * throw on failure) are also supported, non-reverting calls are assumed to be\n * successful.\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\n */\nlibrary SafeERC20 {\n /**\n * @dev An operation with an ERC-20 token failed.\n */\n error SafeERC20FailedOperation(address token);\n\n /**\n * @dev Indicates a failed `decreaseAllowance` request.\n */\n error SafeERC20FailedDecreaseAllowance(address spender, uint256 currentAllowance, uint256 requestedDecrease);\n\n /**\n * @dev Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value,\n * non-reverting calls are assumed to be successful.\n */\n function safeTransfer(IERC20 token, address to, uint256 value) internal {\n _callOptionalReturn(token, abi.encodeCall(token.transfer, (to, value)));\n }\n\n /**\n * @dev Transfer `value` amount of `token` from `from` to `to`, spending the approval given by `from` to the\n * calling contract. If `token` returns no value, non-reverting calls are assumed to be successful.\n */\n function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\n _callOptionalReturn(token, abi.encodeCall(token.transferFrom, (from, to, value)));\n }\n\n /**\n * @dev Increase the calling contract's allowance toward `spender` by `value`. If `token` returns no value,\n * non-reverting calls are assumed to be successful.\n *\n * IMPORTANT: If the token implements ERC-7674 (ERC-20 with temporary allowance), and if the \"client\"\n * smart contract uses ERC-7674 to set temporary allowances, then the \"client\" smart contract should avoid using\n * this function. Performing a {safeIncreaseAllowance} or {safeDecreaseAllowance} operation on a token contract\n * that has a non-zero temporary allowance (for that particular owner-spender) will result in unexpected behavior.\n */\n function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {\n uint256 oldAllowance = token.allowance(address(this), spender);\n forceApprove(token, spender, oldAllowance + value);\n }\n\n /**\n * @dev Decrease the calling contract's allowance toward `spender` by `requestedDecrease`. If `token` returns no\n * value, non-reverting calls are assumed to be successful.\n *\n * IMPORTANT: If the token implements ERC-7674 (ERC-20 with temporary allowance), and if the \"client\"\n * smart contract uses ERC-7674 to set temporary allowances, then the \"client\" smart contract should avoid using\n * this function. Performing a {safeIncreaseAllowance} or {safeDecreaseAllowance} operation on a token contract\n * that has a non-zero temporary allowance (for that particular owner-spender) will result in unexpected behavior.\n */\n function safeDecreaseAllowance(IERC20 token, address spender, uint256 requestedDecrease) internal {\n unchecked {\n uint256 currentAllowance = token.allowance(address(this), spender);\n if (currentAllowance < requestedDecrease) {\n revert SafeERC20FailedDecreaseAllowance(spender, currentAllowance, requestedDecrease);\n }\n forceApprove(token, spender, currentAllowance - requestedDecrease);\n }\n }\n\n /**\n * @dev Set the calling contract's allowance toward `spender` to `value`. If `token` returns no value,\n * non-reverting calls are assumed to be successful. Meant to be used with tokens that require the approval\n * to be set to zero before setting it to a non-zero value, such as USDT.\n *\n * NOTE: If the token implements ERC-7674, this function will not modify any temporary allowance. This function\n * only sets the \"standard\" allowance. Any temporary allowance will remain active, in addition to the value being\n * set here.\n */\n function forceApprove(IERC20 token, address spender, uint256 value) internal {\n bytes memory approvalCall = abi.encodeCall(token.approve, (spender, value));\n\n if (!_callOptionalReturnBool(token, approvalCall)) {\n _callOptionalReturn(token, abi.encodeCall(token.approve, (spender, 0)));\n _callOptionalReturn(token, approvalCall);\n }\n }\n\n /**\n * @dev Performs an {ERC1363} transferAndCall, with a fallback to the simple {ERC20} transfer if the target has no\n * code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\n * targeting contracts.\n *\n * Reverts if the returned value is other than `true`.\n */\n function transferAndCallRelaxed(IERC1363 token, address to, uint256 value, bytes memory data) internal {\n if (to.code.length == 0) {\n safeTransfer(token, to, value);\n } else if (!token.transferAndCall(to, value, data)) {\n revert SafeERC20FailedOperation(address(token));\n }\n }\n\n /**\n * @dev Performs an {ERC1363} transferFromAndCall, with a fallback to the simple {ERC20} transferFrom if the target\n * has no code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\n * targeting contracts.\n *\n * Reverts if the returned value is other than `true`.\n */\n function transferFromAndCallRelaxed(\n IERC1363 token,\n address from,\n address to,\n uint256 value,\n bytes memory data\n ) internal {\n if (to.code.length == 0) {\n safeTransferFrom(token, from, to, value);\n } else if (!token.transferFromAndCall(from, to, value, data)) {\n revert SafeERC20FailedOperation(address(token));\n }\n }\n\n /**\n * @dev Performs an {ERC1363} approveAndCall, with a fallback to the simple {ERC20} approve if the target has no\n * code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\n * targeting contracts.\n *\n * NOTE: When the recipient address (`to`) has no code (i.e. is an EOA), this function behaves as {forceApprove}.\n * Opposedly, when the recipient address (`to`) has code, this function only attempts to call {ERC1363-approveAndCall}\n * once without retrying, and relies on the returned value to be true.\n *\n * Reverts if the returned value is other than `true`.\n */\n function approveAndCallRelaxed(IERC1363 token, address to, uint256 value, bytes memory data) internal {\n if (to.code.length == 0) {\n forceApprove(token, to, value);\n } else if (!token.approveAndCall(to, value, data)) {\n revert SafeERC20FailedOperation(address(token));\n }\n }\n\n /**\n * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\n * on the return value: the return value is optional (but if data is returned, it must not be false).\n * @param token The token targeted by the call.\n * @param data The call data (encoded using abi.encode or one of its variants).\n *\n * This is a variant of {_callOptionalReturnBool} that reverts if call fails to meet the requirements.\n */\n function _callOptionalReturn(IERC20 token, bytes memory data) private {\n uint256 returnSize;\n uint256 returnValue;\n assembly (\"memory-safe\") {\n let success := call(gas(), token, 0, add(data, 0x20), mload(data), 0, 0x20)\n // bubble errors\n if iszero(success) {\n let ptr := mload(0x40)\n returndatacopy(ptr, 0, returndatasize())\n revert(ptr, returndatasize())\n }\n returnSize := returndatasize()\n returnValue := mload(0)\n }\n\n if (returnSize == 0 ? address(token).code.length == 0 : returnValue != 1) {\n revert SafeERC20FailedOperation(address(token));\n }\n }\n\n /**\n * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\n * on the return value: the return value is optional (but if data is returned, it must not be false).\n * @param token The token targeted by the call.\n * @param data The call data (encoded using abi.encode or one of its variants).\n *\n * This is a variant of {_callOptionalReturn} that silently catches all reverts and returns a bool instead.\n */\n function _callOptionalReturnBool(IERC20 token, bytes memory data) private returns (bool) {\n bool success;\n uint256 returnSize;\n uint256 returnValue;\n assembly (\"memory-safe\") {\n success := call(gas(), token, 0, add(data, 0x20), mload(data), 0, 0x20)\n returnSize := returndatasize()\n returnValue := mload(0)\n }\n return success && (returnSize == 0 ? address(token).code.length > 0 : returnValue == 1);\n }\n}\n" - }, - "@openzeppelin/contracts/utils/Address.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/Address.sol)\n\npragma solidity ^0.8.20;\n\nimport {Errors} from \"./Errors.sol\";\n\n/**\n * @dev Collection of functions related to the address type\n */\nlibrary Address {\n /**\n * @dev There's no code at `target` (it is not a contract).\n */\n error AddressEmptyCode(address target);\n\n /**\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n * `recipient`, forwarding all available gas and reverting on errors.\n *\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\n * imposed by `transfer`, making them unable to receive funds via\n * `transfer`. {sendValue} removes this limitation.\n *\n * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n *\n * IMPORTANT: because control is transferred to `recipient`, care must be\n * taken to not create reentrancy vulnerabilities. Consider using\n * {ReentrancyGuard} or the\n * https://solidity.readthedocs.io/en/v0.8.20/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\n */\n function sendValue(address payable recipient, uint256 amount) internal {\n if (address(this).balance < amount) {\n revert Errors.InsufficientBalance(address(this).balance, amount);\n }\n\n (bool success, ) = recipient.call{value: amount}(\"\");\n if (!success) {\n revert Errors.FailedCall();\n }\n }\n\n /**\n * @dev Performs a Solidity function call using a low level `call`. A\n * plain `call` is an unsafe replacement for a function call: use this\n * function instead.\n *\n * If `target` reverts with a revert reason or custom error, it is bubbled\n * up by this function (like regular Solidity function calls). However, if\n * the call reverted with no returned reason, this function reverts with a\n * {Errors.FailedCall} error.\n *\n * Returns the raw returned data. To convert to the expected return value,\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n *\n * Requirements:\n *\n * - `target` must be a contract.\n * - calling `target` with `data` must not revert.\n */\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionCallWithValue(target, data, 0);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but also transferring `value` wei to `target`.\n *\n * Requirements:\n *\n * - the calling contract must have an ETH balance of at least `value`.\n * - the called Solidity function must be `payable`.\n */\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\n if (address(this).balance < value) {\n revert Errors.InsufficientBalance(address(this).balance, value);\n }\n (bool success, bytes memory returndata) = target.call{value: value}(data);\n return verifyCallResultFromTarget(target, success, returndata);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a static call.\n */\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n (bool success, bytes memory returndata) = target.staticcall(data);\n return verifyCallResultFromTarget(target, success, returndata);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a delegate call.\n */\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\n (bool success, bytes memory returndata) = target.delegatecall(data);\n return verifyCallResultFromTarget(target, success, returndata);\n }\n\n /**\n * @dev Tool to verify that a low level call to smart-contract was successful, and reverts if the target\n * was not a contract or bubbling up the revert reason (falling back to {Errors.FailedCall}) in case\n * of an unsuccessful call.\n */\n function verifyCallResultFromTarget(\n address target,\n bool success,\n bytes memory returndata\n ) internal view returns (bytes memory) {\n if (!success) {\n _revert(returndata);\n } else {\n // only check if target is a contract if the call was successful and the return data is empty\n // otherwise we already know that it was a contract\n if (returndata.length == 0 && target.code.length == 0) {\n revert AddressEmptyCode(target);\n }\n return returndata;\n }\n }\n\n /**\n * @dev Tool to verify that a low level call was successful, and reverts if it wasn't, either by bubbling the\n * revert reason or with a default {Errors.FailedCall} error.\n */\n function verifyCallResult(bool success, bytes memory returndata) internal pure returns (bytes memory) {\n if (!success) {\n _revert(returndata);\n } else {\n return returndata;\n }\n }\n\n /**\n * @dev Reverts with returndata if present. Otherwise reverts with {Errors.FailedCall}.\n */\n function _revert(bytes memory returndata) private pure {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n assembly (\"memory-safe\") {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert Errors.FailedCall();\n }\n }\n}\n" - }, - "@openzeppelin/contracts/utils/Context.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract Context {\n function _msgSender() internal view virtual returns (address) {\n return msg.sender;\n }\n\n function _msgData() internal view virtual returns (bytes calldata) {\n return msg.data;\n }\n\n function _contextSuffixLength() internal view virtual returns (uint256) {\n return 0;\n }\n}\n" - }, - "@openzeppelin/contracts/utils/Errors.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/Errors.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Collection of common custom errors used in multiple contracts\n *\n * IMPORTANT: Backwards compatibility is not guaranteed in future versions of the library.\n * It is recommended to avoid relying on the error API for critical functionality.\n *\n * _Available since v5.1._\n */\nlibrary Errors {\n /**\n * @dev The ETH balance of the account is not enough to perform the operation.\n */\n error InsufficientBalance(uint256 balance, uint256 needed);\n\n /**\n * @dev A call to an address target failed. The target may have reverted.\n */\n error FailedCall();\n\n /**\n * @dev The deployment failed.\n */\n error FailedDeployment();\n\n /**\n * @dev A necessary precompile is missing.\n */\n error MissingPrecompile(address);\n}\n" - }, - "@openzeppelin/contracts/utils/introspection/IERC165.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/introspection/IERC165.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Interface of the ERC-165 standard, as defined in the\n * https://eips.ethereum.org/EIPS/eip-165[ERC].\n *\n * Implementers can declare support of contract interfaces, which can then be\n * queried by others ({ERC165Checker}).\n *\n * For an implementation, see {ERC165}.\n */\ninterface IERC165 {\n /**\n * @dev Returns true if this contract implements the interface defined by\n * `interfaceId`. See the corresponding\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section]\n * to learn more about how these ids are created.\n *\n * This function call must use less than 30 000 gas.\n */\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\n}\n" - }, - "contracts/mocks/MyOFTMock.sol": { - "content": "// SPDX-License-Identifier: UNLICENSED\npragma solidity ^0.8.22;\n\nimport { MyOFT } from \"../MyOFT.sol\";\n\n// @dev WARNING: This is for testing purposes only\ncontract MyOFTMock is MyOFT {\n constructor(\n string memory _name,\n string memory _symbol,\n address _lzEndpoint,\n address _delegate\n ) MyOFT(_name, _symbol, _lzEndpoint, _delegate) {}\n\n function mint(address _to, uint256 _amount) public {\n _mint(_to, _amount);\n }\n}\n" - }, - "contracts/MyOFT.sol": { - "content": "// SPDX-License-Identifier: UNLICENSED\npragma solidity ^0.8.22;\n\nimport { Ownable } from \"@openzeppelin/contracts/access/Ownable.sol\";\nimport { OFT } from \"@layerzerolabs/oft-evm/contracts/OFT.sol\";\n\ncontract MyOFT is OFT {\n constructor(\n string memory _name,\n string memory _symbol,\n address _lzEndpoint,\n address _delegate\n ) OFT(_name, _symbol, _lzEndpoint, _delegate) Ownable(_delegate) {}\n}\n" - } - }, - "settings": { - "optimizer": { "enabled": true, "runs": 200 }, - "evmVersion": "paris", - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata", - "devdoc", - "userdoc", - "storageLayout", - "evm.gasEstimates" - ], - "": ["ast"] - } - }, - "metadata": { "useLiteralContent": true } - } - }, - "output": { - "sources": { - "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol": { - "ast": { - "absolutePath": "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol", - "exportedSymbols": { - "ILayerZeroEndpointV2": [202], - "IMessageLibManager": [538], - "IMessagingChannel": [674], - "IMessagingComposer": [760], - "IMessagingContext": [775], - "MessagingFee": [33], - "MessagingParams": [20], - "MessagingReceipt": [28], - "Origin": [40] - }, - "id": 203, - "license": "MIT", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 1, - "literals": ["solidity", ">=", "0.8", ".0"], - "nodeType": "PragmaDirective", - "src": "33:24:0" - }, - { - "absolutePath": "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol", - "file": "./IMessageLibManager.sol", - "id": 3, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 203, - "sourceUnit": 539, - "src": "59:62:0", - "symbolAliases": [ - { - "foreign": { - "id": 2, - "name": "IMessageLibManager", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 538, - "src": "68:18:0", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol", - "file": "./IMessagingComposer.sol", - "id": 5, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 203, - "sourceUnit": 761, - "src": "122:62:0", - "symbolAliases": [ - { - "foreign": { - "id": 4, - "name": "IMessagingComposer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 760, - "src": "131:18:0", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol", - "file": "./IMessagingChannel.sol", - "id": 7, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 203, - "sourceUnit": 675, - "src": "185:60:0", - "symbolAliases": [ - { - "foreign": { - "id": 6, - "name": "IMessagingChannel", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 674, - "src": "194:17:0", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol", - "file": "./IMessagingContext.sol", - "id": 9, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 203, - "sourceUnit": 776, - "src": "246:60:0", - "symbolAliases": [ - { - "foreign": { - "id": 8, - "name": "IMessagingContext", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 775, - "src": "255:17:0", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "canonicalName": "MessagingParams", - "id": 20, - "members": [ - { - "constant": false, - "id": 11, - "mutability": "mutable", - "name": "dstEid", - "nameLocation": "344:6:0", - "nodeType": "VariableDeclaration", - "scope": 20, - "src": "337:13:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 10, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "337:6:0", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 13, - "mutability": "mutable", - "name": "receiver", - "nameLocation": "364:8:0", - "nodeType": "VariableDeclaration", - "scope": 20, - "src": "356:16:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 12, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "356:7:0", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 15, - "mutability": "mutable", - "name": "message", - "nameLocation": "384:7:0", - "nodeType": "VariableDeclaration", - "scope": 20, - "src": "378:13:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 14, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "378:5:0", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 17, - "mutability": "mutable", - "name": "options", - "nameLocation": "403:7:0", - "nodeType": "VariableDeclaration", - "scope": 20, - "src": "397:13:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 16, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "397:5:0", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 19, - "mutability": "mutable", - "name": "payInLzToken", - "nameLocation": "421:12:0", - "nodeType": "VariableDeclaration", - "scope": 20, - "src": "416:17:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 18, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "416:4:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "name": "MessagingParams", - "nameLocation": "315:15:0", - "nodeType": "StructDefinition", - "scope": 203, - "src": "308:128:0", - "visibility": "public" - }, - { - "canonicalName": "MessagingReceipt", - "id": 28, - "members": [ - { - "constant": false, - "id": 22, - "mutability": "mutable", - "name": "guid", - "nameLocation": "476:4:0", - "nodeType": "VariableDeclaration", - "scope": 28, - "src": "468:12:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 21, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "468:7:0", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 24, - "mutability": "mutable", - "name": "nonce", - "nameLocation": "493:5:0", - "nodeType": "VariableDeclaration", - "scope": 28, - "src": "486:12:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "typeName": { - "id": 23, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "486:6:0", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 27, - "mutability": "mutable", - "name": "fee", - "nameLocation": "517:3:0", - "nodeType": "VariableDeclaration", - "scope": 28, - "src": "504:16:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MessagingFee_$33_storage_ptr", - "typeString": "struct MessagingFee" - }, - "typeName": { - "id": 26, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 25, - "name": "MessagingFee", - "nameLocations": ["504:12:0"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 33, - "src": "504:12:0" - }, - "referencedDeclaration": 33, - "src": "504:12:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MessagingFee_$33_storage_ptr", - "typeString": "struct MessagingFee" - } - }, - "visibility": "internal" - } - ], - "name": "MessagingReceipt", - "nameLocation": "445:16:0", - "nodeType": "StructDefinition", - "scope": 203, - "src": "438:85:0", - "visibility": "public" - }, - { - "canonicalName": "MessagingFee", - "id": 33, - "members": [ - { - "constant": false, - "id": 30, - "mutability": "mutable", - "name": "nativeFee", - "nameLocation": "559:9:0", - "nodeType": "VariableDeclaration", - "scope": 33, - "src": "551:17:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 29, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "551:7:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 32, - "mutability": "mutable", - "name": "lzTokenFee", - "nameLocation": "582:10:0", - "nodeType": "VariableDeclaration", - "scope": 33, - "src": "574:18:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 31, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "574:7:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "name": "MessagingFee", - "nameLocation": "532:12:0", - "nodeType": "StructDefinition", - "scope": 203, - "src": "525:70:0", - "visibility": "public" - }, - { - "canonicalName": "Origin", - "id": 40, - "members": [ - { - "constant": false, - "id": 35, - "mutability": "mutable", - "name": "srcEid", - "nameLocation": "624:6:0", - "nodeType": "VariableDeclaration", - "scope": 40, - "src": "617:13:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 34, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "617:6:0", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 37, - "mutability": "mutable", - "name": "sender", - "nameLocation": "644:6:0", - "nodeType": "VariableDeclaration", - "scope": 40, - "src": "636:14:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 36, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "636:7:0", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 39, - "mutability": "mutable", - "name": "nonce", - "nameLocation": "663:5:0", - "nodeType": "VariableDeclaration", - "scope": 40, - "src": "656:12:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "typeName": { - "id": 38, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "656:6:0", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "visibility": "internal" - } - ], - "name": "Origin", - "nameLocation": "604:6:0", - "nodeType": "StructDefinition", - "scope": 203, - "src": "597:74:0", - "visibility": "public" - }, - { - "abstract": false, - "baseContracts": [ - { - "baseName": { - "id": 41, - "name": "IMessageLibManager", - "nameLocations": ["707:18:0"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 538, - "src": "707:18:0" - }, - "id": 42, - "nodeType": "InheritanceSpecifier", - "src": "707:18:0" - }, - { - "baseName": { - "id": 43, - "name": "IMessagingComposer", - "nameLocations": ["727:18:0"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 760, - "src": "727:18:0" - }, - "id": 44, - "nodeType": "InheritanceSpecifier", - "src": "727:18:0" - }, - { - "baseName": { - "id": 45, - "name": "IMessagingChannel", - "nameLocations": ["747:17:0"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 674, - "src": "747:17:0" - }, - "id": 46, - "nodeType": "InheritanceSpecifier", - "src": "747:17:0" - }, - { - "baseName": { - "id": 47, - "name": "IMessagingContext", - "nameLocations": ["766:17:0"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 775, - "src": "766:17:0" - }, - "id": 48, - "nodeType": "InheritanceSpecifier", - "src": "766:17:0" - } - ], - "canonicalName": "ILayerZeroEndpointV2", - "contractDependencies": [], - "contractKind": "interface", - "fullyImplemented": false, - "id": 202, - "linearizedBaseContracts": [202, 775, 674, 760, 538], - "name": "ILayerZeroEndpointV2", - "nameLocation": "683:20:0", - "nodeType": "ContractDefinition", - "nodes": [ - { - "anonymous": false, - "eventSelector": "1ab700d4ced0c005b164c0f789fd09fcbb0156d4c2041b8a3bfbcd961cd1567f", - "id": 56, - "name": "PacketSent", - "nameLocation": "796:10:0", - "nodeType": "EventDefinition", - "parameters": { - "id": 55, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 50, - "indexed": false, - "mutability": "mutable", - "name": "encodedPayload", - "nameLocation": "813:14:0", - "nodeType": "VariableDeclaration", - "scope": 56, - "src": "807:20:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 49, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "807:5:0", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 52, - "indexed": false, - "mutability": "mutable", - "name": "options", - "nameLocation": "835:7:0", - "nodeType": "VariableDeclaration", - "scope": 56, - "src": "829:13:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 51, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "829:5:0", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 54, - "indexed": false, - "mutability": "mutable", - "name": "sendLibrary", - "nameLocation": "852:11:0", - "nodeType": "VariableDeclaration", - "scope": 56, - "src": "844:19:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 53, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "844:7:0", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "806:58:0" - }, - "src": "790:75:0" - }, - { - "anonymous": false, - "eventSelector": "0d87345f3d1c929caba93e1c3821b54ff3512e12b66aa3cfe54b6bcbc17e59b4", - "id": 65, - "name": "PacketVerified", - "nameLocation": "877:14:0", - "nodeType": "EventDefinition", - "parameters": { - "id": 64, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 59, - "indexed": false, - "mutability": "mutable", - "name": "origin", - "nameLocation": "899:6:0", - "nodeType": "VariableDeclaration", - "scope": 65, - "src": "892:13:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Origin_$40_memory_ptr", - "typeString": "struct Origin" - }, - "typeName": { - "id": 58, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 57, - "name": "Origin", - "nameLocations": ["892:6:0"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 40, - "src": "892:6:0" - }, - "referencedDeclaration": 40, - "src": "892:6:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Origin_$40_storage_ptr", - "typeString": "struct Origin" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 61, - "indexed": false, - "mutability": "mutable", - "name": "receiver", - "nameLocation": "915:8:0", - "nodeType": "VariableDeclaration", - "scope": 65, - "src": "907:16:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 60, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "907:7:0", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 63, - "indexed": false, - "mutability": "mutable", - "name": "payloadHash", - "nameLocation": "933:11:0", - "nodeType": "VariableDeclaration", - "scope": 65, - "src": "925:19:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 62, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "925:7:0", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "891:54:0" - }, - "src": "871:75:0" - }, - { - "anonymous": false, - "eventSelector": "3cd5e48f9730b129dc7550f0fcea9c767b7be37837cd10e55eb35f734f4bca04", - "id": 72, - "name": "PacketDelivered", - "nameLocation": "958:15:0", - "nodeType": "EventDefinition", - "parameters": { - "id": 71, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 68, - "indexed": false, - "mutability": "mutable", - "name": "origin", - "nameLocation": "981:6:0", - "nodeType": "VariableDeclaration", - "scope": 72, - "src": "974:13:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Origin_$40_memory_ptr", - "typeString": "struct Origin" - }, - "typeName": { - "id": 67, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 66, - "name": "Origin", - "nameLocations": ["974:6:0"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 40, - "src": "974:6:0" - }, - "referencedDeclaration": 40, - "src": "974:6:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Origin_$40_storage_ptr", - "typeString": "struct Origin" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 70, - "indexed": false, - "mutability": "mutable", - "name": "receiver", - "nameLocation": "997:8:0", - "nodeType": "VariableDeclaration", - "scope": 72, - "src": "989:16:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 69, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "989:7:0", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "973:33:0" - }, - "src": "952:55:0" - }, - { - "anonymous": false, - "eventSelector": "7edfa10fe10193301ad8a8bea7e968c7bcabcc64981f368e3aeada40ce26ae2c", - "id": 93, - "name": "LzReceiveAlert", - "nameLocation": "1019:14:0", - "nodeType": "EventDefinition", - "parameters": { - "id": 92, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 74, - "indexed": true, - "mutability": "mutable", - "name": "receiver", - "nameLocation": "1059:8:0", - "nodeType": "VariableDeclaration", - "scope": 93, - "src": "1043:24:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 73, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1043:7:0", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 76, - "indexed": true, - "mutability": "mutable", - "name": "executor", - "nameLocation": "1093:8:0", - "nodeType": "VariableDeclaration", - "scope": 93, - "src": "1077:24:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 75, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1077:7:0", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 79, - "indexed": false, - "mutability": "mutable", - "name": "origin", - "nameLocation": "1118:6:0", - "nodeType": "VariableDeclaration", - "scope": 93, - "src": "1111:13:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Origin_$40_memory_ptr", - "typeString": "struct Origin" - }, - "typeName": { - "id": 78, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 77, - "name": "Origin", - "nameLocations": ["1111:6:0"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 40, - "src": "1111:6:0" - }, - "referencedDeclaration": 40, - "src": "1111:6:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Origin_$40_storage_ptr", - "typeString": "struct Origin" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 81, - "indexed": false, - "mutability": "mutable", - "name": "guid", - "nameLocation": "1142:4:0", - "nodeType": "VariableDeclaration", - "scope": 93, - "src": "1134:12:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 80, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "1134:7:0", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 83, - "indexed": false, - "mutability": "mutable", - "name": "gas", - "nameLocation": "1164:3:0", - "nodeType": "VariableDeclaration", - "scope": 93, - "src": "1156:11:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 82, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1156:7:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 85, - "indexed": false, - "mutability": "mutable", - "name": "value", - "nameLocation": "1185:5:0", - "nodeType": "VariableDeclaration", - "scope": 93, - "src": "1177:13:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 84, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1177:7:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 87, - "indexed": false, - "mutability": "mutable", - "name": "message", - "nameLocation": "1206:7:0", - "nodeType": "VariableDeclaration", - "scope": 93, - "src": "1200:13:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 86, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "1200:5:0", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 89, - "indexed": false, - "mutability": "mutable", - "name": "extraData", - "nameLocation": "1229:9:0", - "nodeType": "VariableDeclaration", - "scope": 93, - "src": "1223:15:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 88, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "1223:5:0", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 91, - "indexed": false, - "mutability": "mutable", - "name": "reason", - "nameLocation": "1254:6:0", - "nodeType": "VariableDeclaration", - "scope": 93, - "src": "1248:12:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 90, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "1248:5:0", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "1033:233:0" - }, - "src": "1013:254:0" - }, - { - "anonymous": false, - "eventSelector": "d476ec5ec1ac11cec3714d41e7ea49419471aceb9bd0dff1becfc3e363a62396", - "id": 97, - "name": "LzTokenSet", - "nameLocation": "1279:10:0", - "nodeType": "EventDefinition", - "parameters": { - "id": 96, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 95, - "indexed": false, - "mutability": "mutable", - "name": "token", - "nameLocation": "1298:5:0", - "nodeType": "VariableDeclaration", - "scope": 97, - "src": "1290:13:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 94, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1290:7:0", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1289:15:0" - }, - "src": "1273:32:0" - }, - { - "anonymous": false, - "eventSelector": "6ee10e9ed4d6ce9742703a498707862f4b00f1396a87195eb93267b3d7983981", - "id": 103, - "name": "DelegateSet", - "nameLocation": "1317:11:0", - "nodeType": "EventDefinition", - "parameters": { - "id": 102, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 99, - "indexed": false, - "mutability": "mutable", - "name": "sender", - "nameLocation": "1337:6:0", - "nodeType": "VariableDeclaration", - "scope": 103, - "src": "1329:14:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 98, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1329:7:0", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 101, - "indexed": false, - "mutability": "mutable", - "name": "delegate", - "nameLocation": "1353:8:0", - "nodeType": "VariableDeclaration", - "scope": 103, - "src": "1345:16:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 100, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1345:7:0", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1328:34:0" - }, - "src": "1311:52:0" - }, - { - "functionSelector": "ddc28c58", - "id": 114, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "quote", - "nameLocation": "1378:5:0", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 109, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 106, - "mutability": "mutable", - "name": "_params", - "nameLocation": "1409:7:0", - "nodeType": "VariableDeclaration", - "scope": 114, - "src": "1384:32:0", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MessagingParams_$20_calldata_ptr", - "typeString": "struct MessagingParams" - }, - "typeName": { - "id": 105, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 104, - "name": "MessagingParams", - "nameLocations": ["1384:15:0"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 20, - "src": "1384:15:0" - }, - "referencedDeclaration": 20, - "src": "1384:15:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MessagingParams_$20_storage_ptr", - "typeString": "struct MessagingParams" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 108, - "mutability": "mutable", - "name": "_sender", - "nameLocation": "1426:7:0", - "nodeType": "VariableDeclaration", - "scope": 114, - "src": "1418:15:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 107, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1418:7:0", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1383:51:0" - }, - "returnParameters": { - "id": 113, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 112, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 114, - "src": "1458:19:0", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MessagingFee_$33_memory_ptr", - "typeString": "struct MessagingFee" - }, - "typeName": { - "id": 111, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 110, - "name": "MessagingFee", - "nameLocations": ["1458:12:0"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 33, - "src": "1458:12:0" - }, - "referencedDeclaration": 33, - "src": "1458:12:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MessagingFee_$33_storage_ptr", - "typeString": "struct MessagingFee" - } - }, - "visibility": "internal" - } - ], - "src": "1457:21:0" - }, - "scope": 202, - "src": "1369:110:0", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "2637a450", - "id": 125, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "send", - "nameLocation": "1494:4:0", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 120, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 117, - "mutability": "mutable", - "name": "_params", - "nameLocation": "1533:7:0", - "nodeType": "VariableDeclaration", - "scope": 125, - "src": "1508:32:0", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MessagingParams_$20_calldata_ptr", - "typeString": "struct MessagingParams" - }, - "typeName": { - "id": 116, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 115, - "name": "MessagingParams", - "nameLocations": ["1508:15:0"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 20, - "src": "1508:15:0" - }, - "referencedDeclaration": 20, - "src": "1508:15:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MessagingParams_$20_storage_ptr", - "typeString": "struct MessagingParams" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 119, - "mutability": "mutable", - "name": "_refundAddress", - "nameLocation": "1558:14:0", - "nodeType": "VariableDeclaration", - "scope": 125, - "src": "1550:22:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 118, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1550:7:0", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1498:80:0" - }, - "returnParameters": { - "id": 124, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 123, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 125, - "src": "1605:23:0", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MessagingReceipt_$28_memory_ptr", - "typeString": "struct MessagingReceipt" - }, - "typeName": { - "id": 122, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 121, - "name": "MessagingReceipt", - "nameLocations": ["1605:16:0"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 28, - "src": "1605:16:0" - }, - "referencedDeclaration": 28, - "src": "1605:16:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MessagingReceipt_$28_storage_ptr", - "typeString": "struct MessagingReceipt" - } - }, - "visibility": "internal" - } - ], - "src": "1604:25:0" - }, - "scope": 202, - "src": "1485:145:0", - "stateMutability": "payable", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "a825d747", - "id": 135, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "verify", - "nameLocation": "1645:6:0", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 133, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 128, - "mutability": "mutable", - "name": "_origin", - "nameLocation": "1668:7:0", - "nodeType": "VariableDeclaration", - "scope": 135, - "src": "1652:23:0", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Origin_$40_calldata_ptr", - "typeString": "struct Origin" - }, - "typeName": { - "id": 127, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 126, - "name": "Origin", - "nameLocations": ["1652:6:0"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 40, - "src": "1652:6:0" - }, - "referencedDeclaration": 40, - "src": "1652:6:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Origin_$40_storage_ptr", - "typeString": "struct Origin" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 130, - "mutability": "mutable", - "name": "_receiver", - "nameLocation": "1685:9:0", - "nodeType": "VariableDeclaration", - "scope": 135, - "src": "1677:17:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 129, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1677:7:0", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 132, - "mutability": "mutable", - "name": "_payloadHash", - "nameLocation": "1704:12:0", - "nodeType": "VariableDeclaration", - "scope": 135, - "src": "1696:20:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 131, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "1696:7:0", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "1651:66:0" - }, - "returnParameters": { - "id": 134, - "nodeType": "ParameterList", - "parameters": [], - "src": "1726:0:0" - }, - "scope": 202, - "src": "1636:91:0", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "c9a54a99", - "id": 145, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "verifiable", - "nameLocation": "1742:10:0", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 141, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 138, - "mutability": "mutable", - "name": "_origin", - "nameLocation": "1769:7:0", - "nodeType": "VariableDeclaration", - "scope": 145, - "src": "1753:23:0", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Origin_$40_calldata_ptr", - "typeString": "struct Origin" - }, - "typeName": { - "id": 137, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 136, - "name": "Origin", - "nameLocations": ["1753:6:0"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 40, - "src": "1753:6:0" - }, - "referencedDeclaration": 40, - "src": "1753:6:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Origin_$40_storage_ptr", - "typeString": "struct Origin" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 140, - "mutability": "mutable", - "name": "_receiver", - "nameLocation": "1786:9:0", - "nodeType": "VariableDeclaration", - "scope": 145, - "src": "1778:17:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 139, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1778:7:0", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1752:44:0" - }, - "returnParameters": { - "id": 144, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 143, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 145, - "src": "1820:4:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 142, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "1820:4:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "1819:6:0" - }, - "scope": 202, - "src": "1733:93:0", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "861e1ca5", - "id": 155, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "initializable", - "nameLocation": "1841:13:0", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 151, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 148, - "mutability": "mutable", - "name": "_origin", - "nameLocation": "1871:7:0", - "nodeType": "VariableDeclaration", - "scope": 155, - "src": "1855:23:0", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Origin_$40_calldata_ptr", - "typeString": "struct Origin" - }, - "typeName": { - "id": 147, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 146, - "name": "Origin", - "nameLocations": ["1855:6:0"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 40, - "src": "1855:6:0" - }, - "referencedDeclaration": 40, - "src": "1855:6:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Origin_$40_storage_ptr", - "typeString": "struct Origin" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 150, - "mutability": "mutable", - "name": "_receiver", - "nameLocation": "1888:9:0", - "nodeType": "VariableDeclaration", - "scope": 155, - "src": "1880:17:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 149, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1880:7:0", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1854:44:0" - }, - "returnParameters": { - "id": 154, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 153, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 155, - "src": "1922:4:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 152, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "1922:4:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "1921:6:0" - }, - "scope": 202, - "src": "1832:96:0", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "0c0c389e", - "id": 169, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "lzReceive", - "nameLocation": "1943:9:0", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 167, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 158, - "mutability": "mutable", - "name": "_origin", - "nameLocation": "1978:7:0", - "nodeType": "VariableDeclaration", - "scope": 169, - "src": "1962:23:0", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Origin_$40_calldata_ptr", - "typeString": "struct Origin" - }, - "typeName": { - "id": 157, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 156, - "name": "Origin", - "nameLocations": ["1962:6:0"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 40, - "src": "1962:6:0" - }, - "referencedDeclaration": 40, - "src": "1962:6:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Origin_$40_storage_ptr", - "typeString": "struct Origin" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 160, - "mutability": "mutable", - "name": "_receiver", - "nameLocation": "2003:9:0", - "nodeType": "VariableDeclaration", - "scope": 169, - "src": "1995:17:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 159, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1995:7:0", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 162, - "mutability": "mutable", - "name": "_guid", - "nameLocation": "2030:5:0", - "nodeType": "VariableDeclaration", - "scope": 169, - "src": "2022:13:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 161, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "2022:7:0", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 164, - "mutability": "mutable", - "name": "_message", - "nameLocation": "2060:8:0", - "nodeType": "VariableDeclaration", - "scope": 169, - "src": "2045:23:0", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 163, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "2045:5:0", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 166, - "mutability": "mutable", - "name": "_extraData", - "nameLocation": "2093:10:0", - "nodeType": "VariableDeclaration", - "scope": 169, - "src": "2078:25:0", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 165, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "2078:5:0", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "1952:157:0" - }, - "returnParameters": { - "id": 168, - "nodeType": "ParameterList", - "parameters": [], - "src": "2126:0:0" - }, - "scope": 202, - "src": "1934:193:0", - "stateMutability": "payable", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "2a56c1b0", - "id": 181, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "clear", - "nameLocation": "2269:5:0", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 179, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 171, - "mutability": "mutable", - "name": "_oapp", - "nameLocation": "2283:5:0", - "nodeType": "VariableDeclaration", - "scope": 181, - "src": "2275:13:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 170, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2275:7:0", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 174, - "mutability": "mutable", - "name": "_origin", - "nameLocation": "2306:7:0", - "nodeType": "VariableDeclaration", - "scope": 181, - "src": "2290:23:0", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Origin_$40_calldata_ptr", - "typeString": "struct Origin" - }, - "typeName": { - "id": 173, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 172, - "name": "Origin", - "nameLocations": ["2290:6:0"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 40, - "src": "2290:6:0" - }, - "referencedDeclaration": 40, - "src": "2290:6:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Origin_$40_storage_ptr", - "typeString": "struct Origin" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 176, - "mutability": "mutable", - "name": "_guid", - "nameLocation": "2323:5:0", - "nodeType": "VariableDeclaration", - "scope": 181, - "src": "2315:13:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 175, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "2315:7:0", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 178, - "mutability": "mutable", - "name": "_message", - "nameLocation": "2345:8:0", - "nodeType": "VariableDeclaration", - "scope": 181, - "src": "2330:23:0", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 177, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "2330:5:0", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "2274:80:0" - }, - "returnParameters": { - "id": 180, - "nodeType": "ParameterList", - "parameters": [], - "src": "2363:0:0" - }, - "scope": 202, - "src": "2260:104:0", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "c28e0eed", - "id": 186, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "setLzToken", - "nameLocation": "2379:10:0", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 184, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 183, - "mutability": "mutable", - "name": "_lzToken", - "nameLocation": "2398:8:0", - "nodeType": "VariableDeclaration", - "scope": 186, - "src": "2390:16:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 182, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2390:7:0", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "2389:18:0" - }, - "returnParameters": { - "id": 185, - "nodeType": "ParameterList", - "parameters": [], - "src": "2416:0:0" - }, - "scope": 202, - "src": "2370:47:0", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "e4fe1d94", - "id": 191, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "lzToken", - "nameLocation": "2432:7:0", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 187, - "nodeType": "ParameterList", - "parameters": [], - "src": "2439:2:0" - }, - "returnParameters": { - "id": 190, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 189, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 191, - "src": "2465:7:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 188, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2465:7:0", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "2464:9:0" - }, - "scope": 202, - "src": "2423:51:0", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "e1758bd8", - "id": 196, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "nativeToken", - "nameLocation": "2489:11:0", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 192, - "nodeType": "ParameterList", - "parameters": [], - "src": "2500:2:0" - }, - "returnParameters": { - "id": 195, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 194, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 196, - "src": "2526:7:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 193, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2526:7:0", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "2525:9:0" - }, - "scope": 202, - "src": "2480:55:0", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "ca5eb5e1", - "id": 201, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "setDelegate", - "nameLocation": "2550:11:0", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 199, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 198, - "mutability": "mutable", - "name": "_delegate", - "nameLocation": "2570:9:0", - "nodeType": "VariableDeclaration", - "scope": 201, - "src": "2562:17:0", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 197, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2562:7:0", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "2561:19:0" - }, - "returnParameters": { - "id": 200, - "nodeType": "ParameterList", - "parameters": [], - "src": "2589:0:0" - }, - "scope": 202, - "src": "2541:49:0", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - } - ], - "scope": 203, - "src": "673:1919:0", - "usedErrors": [], - "usedEvents": [ - 56, 65, 72, 93, 97, 103, 311, 317, 323, 331, 339, 347, 357, 550, - 562, 574, 688, 698, 720 - ] - } - ], - "src": "33:2560:0" - }, - "id": 0 - }, - "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol": { - "ast": { - "absolutePath": "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol", - "exportedSymbols": { "ILayerZeroReceiver": [238], "Origin": [40] }, - "id": 239, - "license": "MIT", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 204, - "literals": ["solidity", ">=", "0.8", ".0"], - "nodeType": "PragmaDirective", - "src": "33:24:1" - }, - { - "absolutePath": "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol", - "file": "./ILayerZeroEndpointV2.sol", - "id": 206, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 239, - "sourceUnit": 203, - "src": "59:52:1", - "symbolAliases": [ - { - "foreign": { - "id": 205, - "name": "Origin", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 40, - "src": "68:6:1", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "abstract": false, - "baseContracts": [], - "canonicalName": "ILayerZeroReceiver", - "contractDependencies": [], - "contractKind": "interface", - "fullyImplemented": false, - "id": 238, - "linearizedBaseContracts": [238], - "name": "ILayerZeroReceiver", - "nameLocation": "123:18:1", - "nodeType": "ContractDefinition", - "nodes": [ - { - "functionSelector": "ff7bd03d", - "id": 214, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "allowInitializePath", - "nameLocation": "157:19:1", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 210, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 209, - "mutability": "mutable", - "name": "_origin", - "nameLocation": "193:7:1", - "nodeType": "VariableDeclaration", - "scope": 214, - "src": "177:23:1", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Origin_$40_calldata_ptr", - "typeString": "struct Origin" - }, - "typeName": { - "id": 208, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 207, - "name": "Origin", - "nameLocations": ["177:6:1"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 40, - "src": "177:6:1" - }, - "referencedDeclaration": 40, - "src": "177:6:1", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Origin_$40_storage_ptr", - "typeString": "struct Origin" - } - }, - "visibility": "internal" - } - ], - "src": "176:25:1" - }, - "returnParameters": { - "id": 213, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 212, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 214, - "src": "225:4:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 211, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "225:4:1", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "224:6:1" - }, - "scope": 238, - "src": "148:83:1", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "7d25a05e", - "id": 223, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "nextNonce", - "nameLocation": "246:9:1", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 219, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 216, - "mutability": "mutable", - "name": "_eid", - "nameLocation": "263:4:1", - "nodeType": "VariableDeclaration", - "scope": 223, - "src": "256:11:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 215, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "256:6:1", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 218, - "mutability": "mutable", - "name": "_sender", - "nameLocation": "277:7:1", - "nodeType": "VariableDeclaration", - "scope": 223, - "src": "269:15:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 217, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "269:7:1", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "255:30:1" - }, - "returnParameters": { - "id": 222, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 221, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 223, - "src": "309:6:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "typeName": { - "id": 220, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "309:6:1", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "visibility": "internal" - } - ], - "src": "308:8:1" - }, - "scope": 238, - "src": "237:80:1", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "13137d65", - "id": 237, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "lzReceive", - "nameLocation": "332:9:1", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 235, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 226, - "mutability": "mutable", - "name": "_origin", - "nameLocation": "367:7:1", - "nodeType": "VariableDeclaration", - "scope": 237, - "src": "351:23:1", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Origin_$40_calldata_ptr", - "typeString": "struct Origin" - }, - "typeName": { - "id": 225, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 224, - "name": "Origin", - "nameLocations": ["351:6:1"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 40, - "src": "351:6:1" - }, - "referencedDeclaration": 40, - "src": "351:6:1", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Origin_$40_storage_ptr", - "typeString": "struct Origin" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 228, - "mutability": "mutable", - "name": "_guid", - "nameLocation": "392:5:1", - "nodeType": "VariableDeclaration", - "scope": 237, - "src": "384:13:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 227, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "384:7:1", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 230, - "mutability": "mutable", - "name": "_message", - "nameLocation": "422:8:1", - "nodeType": "VariableDeclaration", - "scope": 237, - "src": "407:23:1", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 229, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "407:5:1", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 232, - "mutability": "mutable", - "name": "_executor", - "nameLocation": "448:9:1", - "nodeType": "VariableDeclaration", - "scope": 237, - "src": "440:17:1", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 231, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "440:7:1", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 234, - "mutability": "mutable", - "name": "_extraData", - "nameLocation": "482:10:1", - "nodeType": "VariableDeclaration", - "scope": 237, - "src": "467:25:1", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 233, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "467:5:1", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "341:157:1" - }, - "returnParameters": { - "id": 236, - "nodeType": "ParameterList", - "parameters": [], - "src": "515:0:1" - }, - "scope": 238, - "src": "323:193:1", - "stateMutability": "payable", - "virtual": false, - "visibility": "external" - } - ], - "scope": 239, - "src": "113:405:1", - "usedErrors": [], - "usedEvents": [] - } - ], - "src": "33:486:1" - }, - "id": 1 - }, - "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol": { - "ast": { - "absolutePath": "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol", - "exportedSymbols": { - "IERC165": [5556], - "IMessageLib": [293], - "MessageLibType": [248], - "SetConfigParam": [302] - }, - "id": 294, - "license": "MIT", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 240, - "literals": ["solidity", ">=", "0.8", ".0"], - "nodeType": "PragmaDirective", - "src": "33:24:2" - }, - { - "absolutePath": "@openzeppelin/contracts/utils/introspection/IERC165.sol", - "file": "@openzeppelin/contracts/utils/introspection/IERC165.sol", - "id": 242, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 294, - "sourceUnit": 5557, - "src": "59:82:2", - "symbolAliases": [ - { - "foreign": { - "id": 241, - "name": "IERC165", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5556, - "src": "68:7:2", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol", - "file": "./IMessageLibManager.sol", - "id": 244, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 294, - "sourceUnit": 539, - "src": "143:58:2", - "symbolAliases": [ - { - "foreign": { - "id": 243, - "name": "SetConfigParam", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 302, - "src": "152:14:2", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "canonicalName": "MessageLibType", - "id": 248, - "members": [ - { - "id": 245, - "name": "Send", - "nameLocation": "229:4:2", - "nodeType": "EnumValue", - "src": "229:4:2" - }, - { - "id": 246, - "name": "Receive", - "nameLocation": "239:7:2", - "nodeType": "EnumValue", - "src": "239:7:2" - }, - { - "id": 247, - "name": "SendAndReceive", - "nameLocation": "252:14:2", - "nodeType": "EnumValue", - "src": "252:14:2" - } - ], - "name": "MessageLibType", - "nameLocation": "208:14:2", - "nodeType": "EnumDefinition", - "src": "203:65:2" - }, - { - "abstract": false, - "baseContracts": [ - { - "baseName": { - "id": 249, - "name": "IERC165", - "nameLocations": ["295:7:2"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 5556, - "src": "295:7:2" - }, - "id": 250, - "nodeType": "InheritanceSpecifier", - "src": "295:7:2" - } - ], - "canonicalName": "IMessageLib", - "contractDependencies": [], - "contractKind": "interface", - "fullyImplemented": false, - "id": 293, - "linearizedBaseContracts": [293, 5556], - "name": "IMessageLib", - "nameLocation": "280:11:2", - "nodeType": "ContractDefinition", - "nodes": [ - { - "functionSelector": "20efd722", - "id": 259, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "setConfig", - "nameLocation": "318:9:2", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 257, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 252, - "mutability": "mutable", - "name": "_oapp", - "nameLocation": "336:5:2", - "nodeType": "VariableDeclaration", - "scope": 259, - "src": "328:13:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 251, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "328:7:2", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 256, - "mutability": "mutable", - "name": "_config", - "nameLocation": "369:7:2", - "nodeType": "VariableDeclaration", - "scope": 259, - "src": "343:33:2", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_SetConfigParam_$302_calldata_ptr_$dyn_calldata_ptr", - "typeString": "struct SetConfigParam[]" - }, - "typeName": { - "baseType": { - "id": 254, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 253, - "name": "SetConfigParam", - "nameLocations": ["343:14:2"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 302, - "src": "343:14:2" - }, - "referencedDeclaration": 302, - "src": "343:14:2", - "typeDescriptions": { - "typeIdentifier": "t_struct$_SetConfigParam_$302_storage_ptr", - "typeString": "struct SetConfigParam" - } - }, - "id": 255, - "nodeType": "ArrayTypeName", - "src": "343:16:2", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_SetConfigParam_$302_storage_$dyn_storage_ptr", - "typeString": "struct SetConfigParam[]" - } - }, - "visibility": "internal" - } - ], - "src": "327:50:2" - }, - "returnParameters": { - "id": 258, - "nodeType": "ParameterList", - "parameters": [], - "src": "386:0:2" - }, - "scope": 293, - "src": "309:78:2", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "9c33abf7", - "id": 270, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "getConfig", - "nameLocation": "402:9:2", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 266, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 261, - "mutability": "mutable", - "name": "_eid", - "nameLocation": "419:4:2", - "nodeType": "VariableDeclaration", - "scope": 270, - "src": "412:11:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 260, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "412:6:2", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 263, - "mutability": "mutable", - "name": "_oapp", - "nameLocation": "433:5:2", - "nodeType": "VariableDeclaration", - "scope": 270, - "src": "425:13:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 262, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "425:7:2", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 265, - "mutability": "mutable", - "name": "_configType", - "nameLocation": "447:11:2", - "nodeType": "VariableDeclaration", - "scope": 270, - "src": "440:18:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 264, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "440:6:2", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - } - ], - "src": "411:48:2" - }, - "returnParameters": { - "id": 269, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 268, - "mutability": "mutable", - "name": "config", - "nameLocation": "496:6:2", - "nodeType": "VariableDeclaration", - "scope": 270, - "src": "483:19:2", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 267, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "483:5:2", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "482:21:2" - }, - "scope": 293, - "src": "393:111:2", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "6750cd4c", - "id": 277, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "isSupportedEid", - "nameLocation": "519:14:2", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 273, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 272, - "mutability": "mutable", - "name": "_eid", - "nameLocation": "541:4:2", - "nodeType": "VariableDeclaration", - "scope": 277, - "src": "534:11:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 271, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "534:6:2", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - } - ], - "src": "533:13:2" - }, - "returnParameters": { - "id": 276, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 275, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 277, - "src": "570:4:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 274, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "570:4:2", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "569:6:2" - }, - "scope": 293, - "src": "510:66:2", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "54fd4d50", - "id": 286, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "version", - "nameLocation": "648:7:2", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 278, - "nodeType": "ParameterList", - "parameters": [], - "src": "655:2:2" - }, - "returnParameters": { - "id": 285, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 280, - "mutability": "mutable", - "name": "major", - "nameLocation": "688:5:2", - "nodeType": "VariableDeclaration", - "scope": 286, - "src": "681:12:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "typeName": { - "id": 279, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "681:6:2", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 282, - "mutability": "mutable", - "name": "minor", - "nameLocation": "701:5:2", - "nodeType": "VariableDeclaration", - "scope": 286, - "src": "695:11:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 281, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "695:5:2", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 284, - "mutability": "mutable", - "name": "endpointVersion", - "nameLocation": "714:15:2", - "nodeType": "VariableDeclaration", - "scope": 286, - "src": "708:21:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 283, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "708:5:2", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "visibility": "internal" - } - ], - "src": "680:50:2" - }, - "scope": 293, - "src": "639:92:2", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "1881d94d", - "id": 292, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "messageLibType", - "nameLocation": "746:14:2", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 287, - "nodeType": "ParameterList", - "parameters": [], - "src": "760:2:2" - }, - "returnParameters": { - "id": 291, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 290, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 292, - "src": "786:14:2", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_enum$_MessageLibType_$248", - "typeString": "enum MessageLibType" - }, - "typeName": { - "id": 289, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 288, - "name": "MessageLibType", - "nameLocations": ["786:14:2"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 248, - "src": "786:14:2" - }, - "referencedDeclaration": 248, - "src": "786:14:2", - "typeDescriptions": { - "typeIdentifier": "t_enum$_MessageLibType_$248", - "typeString": "enum MessageLibType" - } - }, - "visibility": "internal" - } - ], - "src": "785:16:2" - }, - "scope": 293, - "src": "737:65:2", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - } - ], - "scope": 294, - "src": "270:534:2", - "usedErrors": [], - "usedEvents": [] - } - ], - "src": "33:772:2" - }, - "id": 2 - }, - "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol": { - "ast": { - "absolutePath": "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol", - "exportedSymbols": { - "IMessageLibManager": [538], - "SetConfigParam": [302] - }, - "id": 539, - "license": "MIT", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 295, - "literals": ["solidity", ">=", "0.8", ".0"], - "nodeType": "PragmaDirective", - "src": "33:24:3" - }, - { - "canonicalName": "SetConfigParam", - "id": 302, - "members": [ - { - "constant": false, - "id": 297, - "mutability": "mutable", - "name": "eid", - "nameLocation": "94:3:3", - "nodeType": "VariableDeclaration", - "scope": 302, - "src": "87:10:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 296, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "87:6:3", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 299, - "mutability": "mutable", - "name": "configType", - "nameLocation": "110:10:3", - "nodeType": "VariableDeclaration", - "scope": 302, - "src": "103:17:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 298, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "103:6:3", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 301, - "mutability": "mutable", - "name": "config", - "nameLocation": "132:6:3", - "nodeType": "VariableDeclaration", - "scope": 302, - "src": "126:12:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 300, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "126:5:3", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "name": "SetConfigParam", - "nameLocation": "66:14:3", - "nodeType": "StructDefinition", - "scope": 539, - "src": "59:82:3", - "visibility": "public" - }, - { - "abstract": false, - "baseContracts": [], - "canonicalName": "IMessageLibManager", - "contractDependencies": [], - "contractKind": "interface", - "fullyImplemented": false, - "id": 538, - "linearizedBaseContracts": [538], - "name": "IMessageLibManager", - "nameLocation": "153:18:3", - "nodeType": "ContractDefinition", - "nodes": [ - { - "canonicalName": "IMessageLibManager.Timeout", - "id": 307, - "members": [ - { - "constant": false, - "id": 304, - "mutability": "mutable", - "name": "lib", - "nameLocation": "211:3:3", - "nodeType": "VariableDeclaration", - "scope": 307, - "src": "203:11:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 303, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "203:7:3", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 306, - "mutability": "mutable", - "name": "expiry", - "nameLocation": "232:6:3", - "nodeType": "VariableDeclaration", - "scope": 307, - "src": "224:14:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 305, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "224:7:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "name": "Timeout", - "nameLocation": "185:7:3", - "nodeType": "StructDefinition", - "scope": 538, - "src": "178:67:3", - "visibility": "public" - }, - { - "anonymous": false, - "eventSelector": "6b374d56679ca9463f27c85c6311e2bb7fde69bf201d3da39d53f10bd9d78af5", - "id": 311, - "name": "LibraryRegistered", - "nameLocation": "257:17:3", - "nodeType": "EventDefinition", - "parameters": { - "id": 310, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 309, - "indexed": false, - "mutability": "mutable", - "name": "newLib", - "nameLocation": "283:6:3", - "nodeType": "VariableDeclaration", - "scope": 311, - "src": "275:14:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 308, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "275:7:3", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "274:16:3" - }, - "src": "251:40:3" - }, - { - "anonymous": false, - "eventSelector": "16aa0f528038ab41019e95bae5b418a50ba8532c5800e3b7ea2f517d3fa625f5", - "id": 317, - "name": "DefaultSendLibrarySet", - "nameLocation": "302:21:3", - "nodeType": "EventDefinition", - "parameters": { - "id": 316, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 313, - "indexed": false, - "mutability": "mutable", - "name": "eid", - "nameLocation": "331:3:3", - "nodeType": "VariableDeclaration", - "scope": 317, - "src": "324:10:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 312, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "324:6:3", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 315, - "indexed": false, - "mutability": "mutable", - "name": "newLib", - "nameLocation": "344:6:3", - "nodeType": "VariableDeclaration", - "scope": 317, - "src": "336:14:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 314, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "336:7:3", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "323:28:3" - }, - "src": "296:56:3" - }, - { - "anonymous": false, - "eventSelector": "c16891855cffb4a5ac51ac11864a3f3c96ba816cc45fe686c987ae36277de5ec", - "id": 323, - "name": "DefaultReceiveLibrarySet", - "nameLocation": "363:24:3", - "nodeType": "EventDefinition", - "parameters": { - "id": 322, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 319, - "indexed": false, - "mutability": "mutable", - "name": "eid", - "nameLocation": "395:3:3", - "nodeType": "VariableDeclaration", - "scope": 323, - "src": "388:10:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 318, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "388:6:3", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 321, - "indexed": false, - "mutability": "mutable", - "name": "newLib", - "nameLocation": "408:6:3", - "nodeType": "VariableDeclaration", - "scope": 323, - "src": "400:14:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 320, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "400:7:3", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "387:28:3" - }, - "src": "357:59:3" - }, - { - "anonymous": false, - "eventSelector": "55b28633cdb29709386f555dfc54418592ad475ce7a65a78ac5928af60ffb8f8", - "id": 331, - "name": "DefaultReceiveLibraryTimeoutSet", - "nameLocation": "427:31:3", - "nodeType": "EventDefinition", - "parameters": { - "id": 330, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 325, - "indexed": false, - "mutability": "mutable", - "name": "eid", - "nameLocation": "466:3:3", - "nodeType": "VariableDeclaration", - "scope": 331, - "src": "459:10:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 324, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "459:6:3", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 327, - "indexed": false, - "mutability": "mutable", - "name": "oldLib", - "nameLocation": "479:6:3", - "nodeType": "VariableDeclaration", - "scope": 331, - "src": "471:14:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 326, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "471:7:3", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 329, - "indexed": false, - "mutability": "mutable", - "name": "expiry", - "nameLocation": "495:6:3", - "nodeType": "VariableDeclaration", - "scope": 331, - "src": "487:14:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 328, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "487:7:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "458:44:3" - }, - "src": "421:82:3" - }, - { - "anonymous": false, - "eventSelector": "4cff966ebee29a156dcb34cf72c1d06231fb1777f6bdf6e8089819232f002b1c", - "id": 339, - "name": "SendLibrarySet", - "nameLocation": "514:14:3", - "nodeType": "EventDefinition", - "parameters": { - "id": 338, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 333, - "indexed": false, - "mutability": "mutable", - "name": "sender", - "nameLocation": "537:6:3", - "nodeType": "VariableDeclaration", - "scope": 339, - "src": "529:14:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 332, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "529:7:3", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 335, - "indexed": false, - "mutability": "mutable", - "name": "eid", - "nameLocation": "552:3:3", - "nodeType": "VariableDeclaration", - "scope": 339, - "src": "545:10:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 334, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "545:6:3", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 337, - "indexed": false, - "mutability": "mutable", - "name": "newLib", - "nameLocation": "565:6:3", - "nodeType": "VariableDeclaration", - "scope": 339, - "src": "557:14:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 336, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "557:7:3", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "528:44:3" - }, - "src": "508:65:3" - }, - { - "anonymous": false, - "eventSelector": "cd6f92f5ac6185a5acfa02c92090746cec64d777269cbcd0ed031e396657a1c2", - "id": 347, - "name": "ReceiveLibrarySet", - "nameLocation": "584:17:3", - "nodeType": "EventDefinition", - "parameters": { - "id": 346, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 341, - "indexed": false, - "mutability": "mutable", - "name": "receiver", - "nameLocation": "610:8:3", - "nodeType": "VariableDeclaration", - "scope": 347, - "src": "602:16:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 340, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "602:7:3", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 343, - "indexed": false, - "mutability": "mutable", - "name": "eid", - "nameLocation": "627:3:3", - "nodeType": "VariableDeclaration", - "scope": 347, - "src": "620:10:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 342, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "620:6:3", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 345, - "indexed": false, - "mutability": "mutable", - "name": "newLib", - "nameLocation": "640:6:3", - "nodeType": "VariableDeclaration", - "scope": 347, - "src": "632:14:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 344, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "632:7:3", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "601:46:3" - }, - "src": "578:70:3" - }, - { - "anonymous": false, - "eventSelector": "4e0a5bbfa0c11a64effb1ada324b5437a17272e1aed9320398715ef71bb20928", - "id": 357, - "name": "ReceiveLibraryTimeoutSet", - "nameLocation": "659:24:3", - "nodeType": "EventDefinition", - "parameters": { - "id": 356, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 349, - "indexed": false, - "mutability": "mutable", - "name": "receiver", - "nameLocation": "692:8:3", - "nodeType": "VariableDeclaration", - "scope": 357, - "src": "684:16:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 348, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "684:7:3", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 351, - "indexed": false, - "mutability": "mutable", - "name": "eid", - "nameLocation": "709:3:3", - "nodeType": "VariableDeclaration", - "scope": 357, - "src": "702:10:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 350, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "702:6:3", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 353, - "indexed": false, - "mutability": "mutable", - "name": "oldLib", - "nameLocation": "722:6:3", - "nodeType": "VariableDeclaration", - "scope": 357, - "src": "714:14:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 352, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "714:7:3", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 355, - "indexed": false, - "mutability": "mutable", - "name": "timeout", - "nameLocation": "738:7:3", - "nodeType": "VariableDeclaration", - "scope": 357, - "src": "730:15:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 354, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "730:7:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "683:63:3" - }, - "src": "653:94:3" - }, - { - "functionSelector": "e8964e81", - "id": 362, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "registerLibrary", - "nameLocation": "762:15:3", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 360, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 359, - "mutability": "mutable", - "name": "_lib", - "nameLocation": "786:4:3", - "nodeType": "VariableDeclaration", - "scope": 362, - "src": "778:12:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 358, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "778:7:3", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "777:14:3" - }, - "returnParameters": { - "id": 361, - "nodeType": "ParameterList", - "parameters": [], - "src": "800:0:3" - }, - "scope": 538, - "src": "753:48:3", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "dc706a62", - "id": 369, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "isRegisteredLibrary", - "nameLocation": "816:19:3", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 365, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 364, - "mutability": "mutable", - "name": "_lib", - "nameLocation": "844:4:3", - "nodeType": "VariableDeclaration", - "scope": 369, - "src": "836:12:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 363, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "836:7:3", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "835:14:3" - }, - "returnParameters": { - "id": 368, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 367, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 369, - "src": "873:4:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 366, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "873:4:3", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "872:6:3" - }, - "scope": 538, - "src": "807:72:3", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "9132e5c3", - "id": 375, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "getRegisteredLibraries", - "nameLocation": "894:22:3", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 370, - "nodeType": "ParameterList", - "parameters": [], - "src": "916:2:3" - }, - "returnParameters": { - "id": 374, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 373, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 375, - "src": "942:16:3", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr", - "typeString": "address[]" - }, - "typeName": { - "baseType": { - "id": 371, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "942:7:3", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 372, - "nodeType": "ArrayTypeName", - "src": "942:9:3", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr", - "typeString": "address[]" - } - }, - "visibility": "internal" - } - ], - "src": "941:18:3" - }, - "scope": 538, - "src": "885:75:3", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "aafea312", - "id": 382, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "setDefaultSendLibrary", - "nameLocation": "975:21:3", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 380, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 377, - "mutability": "mutable", - "name": "_eid", - "nameLocation": "1004:4:3", - "nodeType": "VariableDeclaration", - "scope": 382, - "src": "997:11:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 376, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "997:6:3", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 379, - "mutability": "mutable", - "name": "_newLib", - "nameLocation": "1018:7:3", - "nodeType": "VariableDeclaration", - "scope": 382, - "src": "1010:15:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 378, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1010:7:3", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "996:30:3" - }, - "returnParameters": { - "id": 381, - "nodeType": "ParameterList", - "parameters": [], - "src": "1035:0:3" - }, - "scope": 538, - "src": "966:70:3", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "f64be4c7", - "id": 389, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "defaultSendLibrary", - "nameLocation": "1051:18:3", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 385, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 384, - "mutability": "mutable", - "name": "_eid", - "nameLocation": "1077:4:3", - "nodeType": "VariableDeclaration", - "scope": 389, - "src": "1070:11:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 383, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "1070:6:3", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - } - ], - "src": "1069:13:3" - }, - "returnParameters": { - "id": 388, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 387, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 389, - "src": "1106:7:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 386, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1106:7:3", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1105:9:3" - }, - "scope": 538, - "src": "1042:73:3", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "a718531b", - "id": 398, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "setDefaultReceiveLibrary", - "nameLocation": "1130:24:3", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 396, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 391, - "mutability": "mutable", - "name": "_eid", - "nameLocation": "1162:4:3", - "nodeType": "VariableDeclaration", - "scope": 398, - "src": "1155:11:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 390, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "1155:6:3", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 393, - "mutability": "mutable", - "name": "_newLib", - "nameLocation": "1176:7:3", - "nodeType": "VariableDeclaration", - "scope": 398, - "src": "1168:15:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 392, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1168:7:3", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 395, - "mutability": "mutable", - "name": "_gracePeriod", - "nameLocation": "1193:12:3", - "nodeType": "VariableDeclaration", - "scope": 398, - "src": "1185:20:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 394, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1185:7:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "1154:52:3" - }, - "returnParameters": { - "id": 397, - "nodeType": "ParameterList", - "parameters": [], - "src": "1215:0:3" - }, - "scope": 538, - "src": "1121:95:3", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "6f50a803", - "id": 405, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "defaultReceiveLibrary", - "nameLocation": "1231:21:3", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 401, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 400, - "mutability": "mutable", - "name": "_eid", - "nameLocation": "1260:4:3", - "nodeType": "VariableDeclaration", - "scope": 405, - "src": "1253:11:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 399, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "1253:6:3", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - } - ], - "src": "1252:13:3" - }, - "returnParameters": { - "id": 404, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 403, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 405, - "src": "1289:7:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 402, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1289:7:3", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1288:9:3" - }, - "scope": 538, - "src": "1222:76:3", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "d4b4ec8f", - "id": 414, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "setDefaultReceiveLibraryTimeout", - "nameLocation": "1313:31:3", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 412, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 407, - "mutability": "mutable", - "name": "_eid", - "nameLocation": "1352:4:3", - "nodeType": "VariableDeclaration", - "scope": 414, - "src": "1345:11:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 406, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "1345:6:3", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 409, - "mutability": "mutable", - "name": "_lib", - "nameLocation": "1366:4:3", - "nodeType": "VariableDeclaration", - "scope": 414, - "src": "1358:12:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 408, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1358:7:3", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 411, - "mutability": "mutable", - "name": "_expiry", - "nameLocation": "1380:7:3", - "nodeType": "VariableDeclaration", - "scope": 414, - "src": "1372:15:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 410, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1372:7:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "1344:44:3" - }, - "returnParameters": { - "id": 413, - "nodeType": "ParameterList", - "parameters": [], - "src": "1397:0:3" - }, - "scope": 538, - "src": "1304:94:3", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "6e83f5bb", - "id": 423, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "defaultReceiveLibraryTimeout", - "nameLocation": "1413:28:3", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 417, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 416, - "mutability": "mutable", - "name": "_eid", - "nameLocation": "1449:4:3", - "nodeType": "VariableDeclaration", - "scope": 423, - "src": "1442:11:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 415, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "1442:6:3", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - } - ], - "src": "1441:13:3" - }, - "returnParameters": { - "id": 422, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 419, - "mutability": "mutable", - "name": "lib", - "nameLocation": "1486:3:3", - "nodeType": "VariableDeclaration", - "scope": 423, - "src": "1478:11:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 418, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1478:7:3", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 421, - "mutability": "mutable", - "name": "expiry", - "nameLocation": "1499:6:3", - "nodeType": "VariableDeclaration", - "scope": 423, - "src": "1491:14:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 420, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1491:7:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "1477:29:3" - }, - "scope": 538, - "src": "1404:103:3", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "6750cd4c", - "id": 430, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "isSupportedEid", - "nameLocation": "1522:14:3", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 426, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 425, - "mutability": "mutable", - "name": "_eid", - "nameLocation": "1544:4:3", - "nodeType": "VariableDeclaration", - "scope": 430, - "src": "1537:11:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 424, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "1537:6:3", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - } - ], - "src": "1536:13:3" - }, - "returnParameters": { - "id": 429, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 428, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 430, - "src": "1573:4:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 427, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "1573:4:3", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "1572:6:3" - }, - "scope": 538, - "src": "1513:66:3", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "9d7f9775", - "id": 441, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "isValidReceiveLibrary", - "nameLocation": "1594:21:3", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 437, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 432, - "mutability": "mutable", - "name": "_receiver", - "nameLocation": "1624:9:3", - "nodeType": "VariableDeclaration", - "scope": 441, - "src": "1616:17:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 431, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1616:7:3", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 434, - "mutability": "mutable", - "name": "_eid", - "nameLocation": "1642:4:3", - "nodeType": "VariableDeclaration", - "scope": 441, - "src": "1635:11:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 433, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "1635:6:3", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 436, - "mutability": "mutable", - "name": "_lib", - "nameLocation": "1656:4:3", - "nodeType": "VariableDeclaration", - "scope": 441, - "src": "1648:12:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 435, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1648:7:3", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1615:46:3" - }, - "returnParameters": { - "id": 440, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 439, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 441, - "src": "1685:4:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 438, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "1685:4:3", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "1684:6:3" - }, - "scope": 538, - "src": "1585:106:3", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 442, - "nodeType": "StructuredDocumentation", - "src": "1697:59:3", - "text": "------------------- OApp interfaces -------------------" - }, - "functionSelector": "9535ff30", - "id": 451, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "setSendLibrary", - "nameLocation": "1770:14:3", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 449, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 444, - "mutability": "mutable", - "name": "_oapp", - "nameLocation": "1793:5:3", - "nodeType": "VariableDeclaration", - "scope": 451, - "src": "1785:13:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 443, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1785:7:3", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 446, - "mutability": "mutable", - "name": "_eid", - "nameLocation": "1807:4:3", - "nodeType": "VariableDeclaration", - "scope": 451, - "src": "1800:11:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 445, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "1800:6:3", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 448, - "mutability": "mutable", - "name": "_newLib", - "nameLocation": "1821:7:3", - "nodeType": "VariableDeclaration", - "scope": 451, - "src": "1813:15:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 447, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1813:7:3", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1784:45:3" - }, - "returnParameters": { - "id": 450, - "nodeType": "ParameterList", - "parameters": [], - "src": "1838:0:3" - }, - "scope": 538, - "src": "1761:78:3", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "b96a277f", - "id": 460, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "getSendLibrary", - "nameLocation": "1854:14:3", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 456, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 453, - "mutability": "mutable", - "name": "_sender", - "nameLocation": "1877:7:3", - "nodeType": "VariableDeclaration", - "scope": 460, - "src": "1869:15:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 452, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1869:7:3", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 455, - "mutability": "mutable", - "name": "_eid", - "nameLocation": "1893:4:3", - "nodeType": "VariableDeclaration", - "scope": 460, - "src": "1886:11:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 454, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "1886:6:3", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - } - ], - "src": "1868:30:3" - }, - "returnParameters": { - "id": 459, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 458, - "mutability": "mutable", - "name": "lib", - "nameLocation": "1930:3:3", - "nodeType": "VariableDeclaration", - "scope": 460, - "src": "1922:11:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 457, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1922:7:3", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1921:13:3" - }, - "scope": 538, - "src": "1845:90:3", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "dc93c8a2", - "id": 469, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "isDefaultSendLibrary", - "nameLocation": "1950:20:3", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 465, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 462, - "mutability": "mutable", - "name": "_sender", - "nameLocation": "1979:7:3", - "nodeType": "VariableDeclaration", - "scope": 469, - "src": "1971:15:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 461, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1971:7:3", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 464, - "mutability": "mutable", - "name": "_eid", - "nameLocation": "1995:4:3", - "nodeType": "VariableDeclaration", - "scope": 469, - "src": "1988:11:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 463, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "1988:6:3", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - } - ], - "src": "1970:30:3" - }, - "returnParameters": { - "id": 468, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 467, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 469, - "src": "2024:4:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 466, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "2024:4:3", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "2023:6:3" - }, - "scope": 538, - "src": "1941:89:3", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "6a14d715", - "id": 480, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "setReceiveLibrary", - "nameLocation": "2045:17:3", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 478, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 471, - "mutability": "mutable", - "name": "_oapp", - "nameLocation": "2071:5:3", - "nodeType": "VariableDeclaration", - "scope": 480, - "src": "2063:13:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 470, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2063:7:3", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 473, - "mutability": "mutable", - "name": "_eid", - "nameLocation": "2085:4:3", - "nodeType": "VariableDeclaration", - "scope": 480, - "src": "2078:11:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 472, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "2078:6:3", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 475, - "mutability": "mutable", - "name": "_newLib", - "nameLocation": "2099:7:3", - "nodeType": "VariableDeclaration", - "scope": 480, - "src": "2091:15:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 474, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2091:7:3", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 477, - "mutability": "mutable", - "name": "_gracePeriod", - "nameLocation": "2116:12:3", - "nodeType": "VariableDeclaration", - "scope": 480, - "src": "2108:20:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 476, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2108:7:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "2062:67:3" - }, - "returnParameters": { - "id": 479, - "nodeType": "ParameterList", - "parameters": [], - "src": "2138:0:3" - }, - "scope": 538, - "src": "2036:103:3", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "402f8468", - "id": 491, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "getReceiveLibrary", - "nameLocation": "2154:17:3", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 485, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 482, - "mutability": "mutable", - "name": "_receiver", - "nameLocation": "2180:9:3", - "nodeType": "VariableDeclaration", - "scope": 491, - "src": "2172:17:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 481, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2172:7:3", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 484, - "mutability": "mutable", - "name": "_eid", - "nameLocation": "2198:4:3", - "nodeType": "VariableDeclaration", - "scope": 491, - "src": "2191:11:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 483, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "2191:6:3", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - } - ], - "src": "2171:32:3" - }, - "returnParameters": { - "id": 490, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 487, - "mutability": "mutable", - "name": "lib", - "nameLocation": "2235:3:3", - "nodeType": "VariableDeclaration", - "scope": 491, - "src": "2227:11:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 486, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2227:7:3", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 489, - "mutability": "mutable", - "name": "isDefault", - "nameLocation": "2245:9:3", - "nodeType": "VariableDeclaration", - "scope": 491, - "src": "2240:14:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 488, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "2240:4:3", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "2226:29:3" - }, - "scope": 538, - "src": "2145:111:3", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "183c834f", - "id": 502, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "setReceiveLibraryTimeout", - "nameLocation": "2271:24:3", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 500, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 493, - "mutability": "mutable", - "name": "_oapp", - "nameLocation": "2304:5:3", - "nodeType": "VariableDeclaration", - "scope": 502, - "src": "2296:13:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 492, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2296:7:3", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 495, - "mutability": "mutable", - "name": "_eid", - "nameLocation": "2318:4:3", - "nodeType": "VariableDeclaration", - "scope": 502, - "src": "2311:11:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 494, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "2311:6:3", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 497, - "mutability": "mutable", - "name": "_lib", - "nameLocation": "2332:4:3", - "nodeType": "VariableDeclaration", - "scope": 502, - "src": "2324:12:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 496, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2324:7:3", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 499, - "mutability": "mutable", - "name": "_expiry", - "nameLocation": "2346:7:3", - "nodeType": "VariableDeclaration", - "scope": 502, - "src": "2338:15:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 498, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2338:7:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "2295:59:3" - }, - "returnParameters": { - "id": 501, - "nodeType": "ParameterList", - "parameters": [], - "src": "2363:0:3" - }, - "scope": 538, - "src": "2262:102:3", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "ef667aa1", - "id": 513, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "receiveLibraryTimeout", - "nameLocation": "2379:21:3", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 507, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 504, - "mutability": "mutable", - "name": "_receiver", - "nameLocation": "2409:9:3", - "nodeType": "VariableDeclaration", - "scope": 513, - "src": "2401:17:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 503, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2401:7:3", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 506, - "mutability": "mutable", - "name": "_eid", - "nameLocation": "2427:4:3", - "nodeType": "VariableDeclaration", - "scope": 513, - "src": "2420:11:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 505, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "2420:6:3", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - } - ], - "src": "2400:32:3" - }, - "returnParameters": { - "id": 512, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 509, - "mutability": "mutable", - "name": "lib", - "nameLocation": "2464:3:3", - "nodeType": "VariableDeclaration", - "scope": 513, - "src": "2456:11:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 508, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2456:7:3", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 511, - "mutability": "mutable", - "name": "expiry", - "nameLocation": "2477:6:3", - "nodeType": "VariableDeclaration", - "scope": 513, - "src": "2469:14:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 510, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2469:7:3", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "2455:29:3" - }, - "scope": 538, - "src": "2370:115:3", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "6dbd9f90", - "id": 524, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "setConfig", - "nameLocation": "2500:9:3", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 522, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 515, - "mutability": "mutable", - "name": "_oapp", - "nameLocation": "2518:5:3", - "nodeType": "VariableDeclaration", - "scope": 524, - "src": "2510:13:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 514, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2510:7:3", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 517, - "mutability": "mutable", - "name": "_lib", - "nameLocation": "2533:4:3", - "nodeType": "VariableDeclaration", - "scope": 524, - "src": "2525:12:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 516, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2525:7:3", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 521, - "mutability": "mutable", - "name": "_params", - "nameLocation": "2565:7:3", - "nodeType": "VariableDeclaration", - "scope": 524, - "src": "2539:33:3", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_SetConfigParam_$302_calldata_ptr_$dyn_calldata_ptr", - "typeString": "struct SetConfigParam[]" - }, - "typeName": { - "baseType": { - "id": 519, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 518, - "name": "SetConfigParam", - "nameLocations": ["2539:14:3"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 302, - "src": "2539:14:3" - }, - "referencedDeclaration": 302, - "src": "2539:14:3", - "typeDescriptions": { - "typeIdentifier": "t_struct$_SetConfigParam_$302_storage_ptr", - "typeString": "struct SetConfigParam" - } - }, - "id": 520, - "nodeType": "ArrayTypeName", - "src": "2539:16:3", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_SetConfigParam_$302_storage_$dyn_storage_ptr", - "typeString": "struct SetConfigParam[]" - } - }, - "visibility": "internal" - } - ], - "src": "2509:64:3" - }, - "returnParameters": { - "id": 523, - "nodeType": "ParameterList", - "parameters": [], - "src": "2582:0:3" - }, - "scope": 538, - "src": "2491:92:3", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "2b3197b9", - "id": 537, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "getConfig", - "nameLocation": "2598:9:3", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 533, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 526, - "mutability": "mutable", - "name": "_oapp", - "nameLocation": "2625:5:3", - "nodeType": "VariableDeclaration", - "scope": 537, - "src": "2617:13:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 525, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2617:7:3", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 528, - "mutability": "mutable", - "name": "_lib", - "nameLocation": "2648:4:3", - "nodeType": "VariableDeclaration", - "scope": 537, - "src": "2640:12:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 527, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2640:7:3", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 530, - "mutability": "mutable", - "name": "_eid", - "nameLocation": "2669:4:3", - "nodeType": "VariableDeclaration", - "scope": 537, - "src": "2662:11:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 529, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "2662:6:3", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 532, - "mutability": "mutable", - "name": "_configType", - "nameLocation": "2690:11:3", - "nodeType": "VariableDeclaration", - "scope": 537, - "src": "2683:18:3", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 531, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "2683:6:3", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - } - ], - "src": "2607:100:3" - }, - "returnParameters": { - "id": 536, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 535, - "mutability": "mutable", - "name": "config", - "nameLocation": "2744:6:3", - "nodeType": "VariableDeclaration", - "scope": 537, - "src": "2731:19:3", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 534, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "2731:5:3", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "2730:21:3" - }, - "scope": 538, - "src": "2589:163:3", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - } - ], - "scope": 539, - "src": "143:2611:3", - "usedErrors": [], - "usedEvents": [311, 317, 323, 331, 339, 347, 357] - } - ], - "src": "33:2722:3" - }, - "id": 3 - }, - "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol": { - "ast": { - "absolutePath": "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol", - "exportedSymbols": { "IMessagingChannel": [674] }, - "id": 675, - "license": "MIT", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 540, - "literals": ["solidity", ">=", "0.8", ".0"], - "nodeType": "PragmaDirective", - "src": "33:24:4" - }, - { - "abstract": false, - "baseContracts": [], - "canonicalName": "IMessagingChannel", - "contractDependencies": [], - "contractKind": "interface", - "fullyImplemented": false, - "id": 674, - "linearizedBaseContracts": [674], - "name": "IMessagingChannel", - "nameLocation": "69:17:4", - "nodeType": "ContractDefinition", - "nodes": [ - { - "anonymous": false, - "eventSelector": "28f40053783033ef755556a0c3315379141f51a33aed8334174ffbadd90bde48", - "id": 550, - "name": "InboundNonceSkipped", - "nameLocation": "99:19:4", - "nodeType": "EventDefinition", - "parameters": { - "id": 549, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 542, - "indexed": false, - "mutability": "mutable", - "name": "srcEid", - "nameLocation": "126:6:4", - "nodeType": "VariableDeclaration", - "scope": 550, - "src": "119:13:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 541, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "119:6:4", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 544, - "indexed": false, - "mutability": "mutable", - "name": "sender", - "nameLocation": "142:6:4", - "nodeType": "VariableDeclaration", - "scope": 550, - "src": "134:14:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 543, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "134:7:4", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 546, - "indexed": false, - "mutability": "mutable", - "name": "receiver", - "nameLocation": "158:8:4", - "nodeType": "VariableDeclaration", - "scope": 550, - "src": "150:16:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 545, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "150:7:4", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 548, - "indexed": false, - "mutability": "mutable", - "name": "nonce", - "nameLocation": "175:5:4", - "nodeType": "VariableDeclaration", - "scope": 550, - "src": "168:12:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "typeName": { - "id": 547, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "168:6:4", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "visibility": "internal" - } - ], - "src": "118:63:4" - }, - "src": "93:89:4" - }, - { - "anonymous": false, - "eventSelector": "af0450c392c4f702515a457a362328c8aa21916048ca6d0419e248b30cb55292", - "id": 562, - "name": "PacketNilified", - "nameLocation": "193:14:4", - "nodeType": "EventDefinition", - "parameters": { - "id": 561, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 552, - "indexed": false, - "mutability": "mutable", - "name": "srcEid", - "nameLocation": "215:6:4", - "nodeType": "VariableDeclaration", - "scope": 562, - "src": "208:13:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 551, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "208:6:4", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 554, - "indexed": false, - "mutability": "mutable", - "name": "sender", - "nameLocation": "231:6:4", - "nodeType": "VariableDeclaration", - "scope": 562, - "src": "223:14:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 553, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "223:7:4", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 556, - "indexed": false, - "mutability": "mutable", - "name": "receiver", - "nameLocation": "247:8:4", - "nodeType": "VariableDeclaration", - "scope": 562, - "src": "239:16:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 555, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "239:7:4", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 558, - "indexed": false, - "mutability": "mutable", - "name": "nonce", - "nameLocation": "264:5:4", - "nodeType": "VariableDeclaration", - "scope": 562, - "src": "257:12:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "typeName": { - "id": 557, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "257:6:4", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 560, - "indexed": false, - "mutability": "mutable", - "name": "payloadHash", - "nameLocation": "279:11:4", - "nodeType": "VariableDeclaration", - "scope": 562, - "src": "271:19:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 559, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "271:7:4", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "207:84:4" - }, - "src": "187:105:4" - }, - { - "anonymous": false, - "eventSelector": "7f68a37a6e69a0de35024a234558f9efe4b33b58657753d21eaaa82d51c3510e", - "id": 574, - "name": "PacketBurnt", - "nameLocation": "303:11:4", - "nodeType": "EventDefinition", - "parameters": { - "id": 573, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 564, - "indexed": false, - "mutability": "mutable", - "name": "srcEid", - "nameLocation": "322:6:4", - "nodeType": "VariableDeclaration", - "scope": 574, - "src": "315:13:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 563, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "315:6:4", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 566, - "indexed": false, - "mutability": "mutable", - "name": "sender", - "nameLocation": "338:6:4", - "nodeType": "VariableDeclaration", - "scope": 574, - "src": "330:14:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 565, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "330:7:4", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 568, - "indexed": false, - "mutability": "mutable", - "name": "receiver", - "nameLocation": "354:8:4", - "nodeType": "VariableDeclaration", - "scope": 574, - "src": "346:16:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 567, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "346:7:4", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 570, - "indexed": false, - "mutability": "mutable", - "name": "nonce", - "nameLocation": "371:5:4", - "nodeType": "VariableDeclaration", - "scope": 574, - "src": "364:12:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "typeName": { - "id": 569, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "364:6:4", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 572, - "indexed": false, - "mutability": "mutable", - "name": "payloadHash", - "nameLocation": "386:11:4", - "nodeType": "VariableDeclaration", - "scope": 574, - "src": "378:19:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 571, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "378:7:4", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "314:84:4" - }, - "src": "297:102:4" - }, - { - "functionSelector": "416ecebf", - "id": 579, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "eid", - "nameLocation": "414:3:4", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 575, - "nodeType": "ParameterList", - "parameters": [], - "src": "417:2:4" - }, - "returnParameters": { - "id": 578, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 577, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 579, - "src": "443:6:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 576, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "443:6:4", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - } - ], - "src": "442:8:4" - }, - "scope": 674, - "src": "405:46:4", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "d70b8902", - "id": 590, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "skip", - "nameLocation": "614:4:4", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 588, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 581, - "mutability": "mutable", - "name": "_oapp", - "nameLocation": "627:5:4", - "nodeType": "VariableDeclaration", - "scope": 590, - "src": "619:13:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 580, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "619:7:4", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 583, - "mutability": "mutable", - "name": "_srcEid", - "nameLocation": "641:7:4", - "nodeType": "VariableDeclaration", - "scope": 590, - "src": "634:14:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 582, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "634:6:4", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 585, - "mutability": "mutable", - "name": "_sender", - "nameLocation": "658:7:4", - "nodeType": "VariableDeclaration", - "scope": 590, - "src": "650:15:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 584, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "650:7:4", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 587, - "mutability": "mutable", - "name": "_nonce", - "nameLocation": "674:6:4", - "nodeType": "VariableDeclaration", - "scope": 590, - "src": "667:13:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "typeName": { - "id": 586, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "667:6:4", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "visibility": "internal" - } - ], - "src": "618:63:4" - }, - "returnParameters": { - "id": 589, - "nodeType": "ParameterList", - "parameters": [], - "src": "690:0:4" - }, - "scope": 674, - "src": "605:86:4", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "2e80fbf3", - "id": 603, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "nilify", - "nameLocation": "706:6:4", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 601, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 592, - "mutability": "mutable", - "name": "_oapp", - "nameLocation": "721:5:4", - "nodeType": "VariableDeclaration", - "scope": 603, - "src": "713:13:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 591, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "713:7:4", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 594, - "mutability": "mutable", - "name": "_srcEid", - "nameLocation": "735:7:4", - "nodeType": "VariableDeclaration", - "scope": 603, - "src": "728:14:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 593, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "728:6:4", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 596, - "mutability": "mutable", - "name": "_sender", - "nameLocation": "752:7:4", - "nodeType": "VariableDeclaration", - "scope": 603, - "src": "744:15:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 595, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "744:7:4", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 598, - "mutability": "mutable", - "name": "_nonce", - "nameLocation": "768:6:4", - "nodeType": "VariableDeclaration", - "scope": 603, - "src": "761:13:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "typeName": { - "id": 597, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "761:6:4", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 600, - "mutability": "mutable", - "name": "_payloadHash", - "nameLocation": "784:12:4", - "nodeType": "VariableDeclaration", - "scope": 603, - "src": "776:20:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 599, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "776:7:4", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "712:85:4" - }, - "returnParameters": { - "id": 602, - "nodeType": "ParameterList", - "parameters": [], - "src": "806:0:4" - }, - "scope": 674, - "src": "697:110:4", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "40f80683", - "id": 616, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "burn", - "nameLocation": "822:4:4", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 614, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 605, - "mutability": "mutable", - "name": "_oapp", - "nameLocation": "835:5:4", - "nodeType": "VariableDeclaration", - "scope": 616, - "src": "827:13:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 604, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "827:7:4", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 607, - "mutability": "mutable", - "name": "_srcEid", - "nameLocation": "849:7:4", - "nodeType": "VariableDeclaration", - "scope": 616, - "src": "842:14:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 606, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "842:6:4", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 609, - "mutability": "mutable", - "name": "_sender", - "nameLocation": "866:7:4", - "nodeType": "VariableDeclaration", - "scope": 616, - "src": "858:15:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 608, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "858:7:4", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 611, - "mutability": "mutable", - "name": "_nonce", - "nameLocation": "882:6:4", - "nodeType": "VariableDeclaration", - "scope": 616, - "src": "875:13:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "typeName": { - "id": 610, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "875:6:4", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 613, - "mutability": "mutable", - "name": "_payloadHash", - "nameLocation": "898:12:4", - "nodeType": "VariableDeclaration", - "scope": 616, - "src": "890:20:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 612, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "890:7:4", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "826:85:4" - }, - "returnParameters": { - "id": 615, - "nodeType": "ParameterList", - "parameters": [], - "src": "920:0:4" - }, - "scope": 674, - "src": "813:108:4", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "aafe5e07", - "id": 627, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "nextGuid", - "nameLocation": "936:8:4", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 623, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 618, - "mutability": "mutable", - "name": "_sender", - "nameLocation": "953:7:4", - "nodeType": "VariableDeclaration", - "scope": 627, - "src": "945:15:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 617, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "945:7:4", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 620, - "mutability": "mutable", - "name": "_dstEid", - "nameLocation": "969:7:4", - "nodeType": "VariableDeclaration", - "scope": 627, - "src": "962:14:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 619, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "962:6:4", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 622, - "mutability": "mutable", - "name": "_receiver", - "nameLocation": "986:9:4", - "nodeType": "VariableDeclaration", - "scope": 627, - "src": "978:17:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 621, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "978:7:4", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "944:52:4" - }, - "returnParameters": { - "id": 626, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 625, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 627, - "src": "1020:7:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 624, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "1020:7:4", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "1019:9:4" - }, - "scope": 674, - "src": "927:102:4", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "a0dd43fc", - "id": 638, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "inboundNonce", - "nameLocation": "1044:12:4", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 634, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 629, - "mutability": "mutable", - "name": "_receiver", - "nameLocation": "1065:9:4", - "nodeType": "VariableDeclaration", - "scope": 638, - "src": "1057:17:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 628, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1057:7:4", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 631, - "mutability": "mutable", - "name": "_srcEid", - "nameLocation": "1083:7:4", - "nodeType": "VariableDeclaration", - "scope": 638, - "src": "1076:14:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 630, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "1076:6:4", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 633, - "mutability": "mutable", - "name": "_sender", - "nameLocation": "1100:7:4", - "nodeType": "VariableDeclaration", - "scope": 638, - "src": "1092:15:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 632, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "1092:7:4", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "1056:52:4" - }, - "returnParameters": { - "id": 637, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 636, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 638, - "src": "1132:6:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "typeName": { - "id": 635, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "1132:6:4", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "visibility": "internal" - } - ], - "src": "1131:8:4" - }, - "scope": 674, - "src": "1035:105:4", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "9c6d7340", - "id": 649, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "outboundNonce", - "nameLocation": "1155:13:4", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 645, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 640, - "mutability": "mutable", - "name": "_sender", - "nameLocation": "1177:7:4", - "nodeType": "VariableDeclaration", - "scope": 649, - "src": "1169:15:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 639, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1169:7:4", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 642, - "mutability": "mutable", - "name": "_dstEid", - "nameLocation": "1193:7:4", - "nodeType": "VariableDeclaration", - "scope": 649, - "src": "1186:14:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 641, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "1186:6:4", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 644, - "mutability": "mutable", - "name": "_receiver", - "nameLocation": "1210:9:4", - "nodeType": "VariableDeclaration", - "scope": 649, - "src": "1202:17:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 643, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "1202:7:4", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "1168:52:4" - }, - "returnParameters": { - "id": 648, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 647, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 649, - "src": "1244:6:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "typeName": { - "id": 646, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "1244:6:4", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "visibility": "internal" - } - ], - "src": "1243:8:4" - }, - "scope": 674, - "src": "1146:106:4", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "c9fc7bcd", - "id": 662, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "inboundPayloadHash", - "nameLocation": "1267:18:4", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 658, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 651, - "mutability": "mutable", - "name": "_receiver", - "nameLocation": "1303:9:4", - "nodeType": "VariableDeclaration", - "scope": 662, - "src": "1295:17:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 650, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1295:7:4", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 653, - "mutability": "mutable", - "name": "_srcEid", - "nameLocation": "1329:7:4", - "nodeType": "VariableDeclaration", - "scope": 662, - "src": "1322:14:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 652, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "1322:6:4", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 655, - "mutability": "mutable", - "name": "_sender", - "nameLocation": "1354:7:4", - "nodeType": "VariableDeclaration", - "scope": 662, - "src": "1346:15:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 654, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "1346:7:4", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 657, - "mutability": "mutable", - "name": "_nonce", - "nameLocation": "1378:6:4", - "nodeType": "VariableDeclaration", - "scope": 662, - "src": "1371:13:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "typeName": { - "id": 656, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "1371:6:4", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "visibility": "internal" - } - ], - "src": "1285:105:4" - }, - "returnParameters": { - "id": 661, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 660, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 662, - "src": "1414:7:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 659, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "1414:7:4", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "1413:9:4" - }, - "scope": 674, - "src": "1258:165:4", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "5b17bb70", - "id": 673, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "lazyInboundNonce", - "nameLocation": "1438:16:4", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 669, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 664, - "mutability": "mutable", - "name": "_receiver", - "nameLocation": "1463:9:4", - "nodeType": "VariableDeclaration", - "scope": 673, - "src": "1455:17:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 663, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1455:7:4", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 666, - "mutability": "mutable", - "name": "_srcEid", - "nameLocation": "1481:7:4", - "nodeType": "VariableDeclaration", - "scope": 673, - "src": "1474:14:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 665, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "1474:6:4", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 668, - "mutability": "mutable", - "name": "_sender", - "nameLocation": "1498:7:4", - "nodeType": "VariableDeclaration", - "scope": 673, - "src": "1490:15:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 667, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "1490:7:4", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "1454:52:4" - }, - "returnParameters": { - "id": 672, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 671, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 673, - "src": "1530:6:4", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "typeName": { - "id": 670, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "1530:6:4", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "visibility": "internal" - } - ], - "src": "1529:8:4" - }, - "scope": 674, - "src": "1429:109:4", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - } - ], - "scope": 675, - "src": "59:1481:4", - "usedErrors": [], - "usedEvents": [550, 562, 574] - } - ], - "src": "33:1508:4" - }, - "id": 4 - }, - "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol": { - "ast": { - "absolutePath": "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol", - "exportedSymbols": { "IMessagingComposer": [760] }, - "id": 761, - "license": "MIT", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 676, - "literals": ["solidity", ">=", "0.8", ".0"], - "nodeType": "PragmaDirective", - "src": "33:24:5" - }, - { - "abstract": false, - "baseContracts": [], - "canonicalName": "IMessagingComposer", - "contractDependencies": [], - "contractKind": "interface", - "fullyImplemented": false, - "id": 760, - "linearizedBaseContracts": [760], - "name": "IMessagingComposer", - "nameLocation": "69:18:5", - "nodeType": "ContractDefinition", - "nodes": [ - { - "anonymous": false, - "eventSelector": "3d52ff888d033fd3dd1d8057da59e850c91d91a72c41dfa445b247dfedeb6dc1", - "id": 688, - "name": "ComposeSent", - "nameLocation": "100:11:5", - "nodeType": "EventDefinition", - "parameters": { - "id": 687, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 678, - "indexed": false, - "mutability": "mutable", - "name": "from", - "nameLocation": "120:4:5", - "nodeType": "VariableDeclaration", - "scope": 688, - "src": "112:12:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 677, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "112:7:5", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 680, - "indexed": false, - "mutability": "mutable", - "name": "to", - "nameLocation": "134:2:5", - "nodeType": "VariableDeclaration", - "scope": 688, - "src": "126:10:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 679, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "126:7:5", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 682, - "indexed": false, - "mutability": "mutable", - "name": "guid", - "nameLocation": "146:4:5", - "nodeType": "VariableDeclaration", - "scope": 688, - "src": "138:12:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 681, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "138:7:5", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 684, - "indexed": false, - "mutability": "mutable", - "name": "index", - "nameLocation": "159:5:5", - "nodeType": "VariableDeclaration", - "scope": 688, - "src": "152:12:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - }, - "typeName": { - "id": 683, - "name": "uint16", - "nodeType": "ElementaryTypeName", - "src": "152:6:5", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 686, - "indexed": false, - "mutability": "mutable", - "name": "message", - "nameLocation": "172:7:5", - "nodeType": "VariableDeclaration", - "scope": 688, - "src": "166:13:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 685, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "166:5:5", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "111:69:5" - }, - "src": "94:87:5" - }, - { - "anonymous": false, - "eventSelector": "0036c98efcf9e6641dfbc9051f66f405253e8e0c2ab4a24dccda15595b7378c8", - "id": 698, - "name": "ComposeDelivered", - "nameLocation": "192:16:5", - "nodeType": "EventDefinition", - "parameters": { - "id": 697, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 690, - "indexed": false, - "mutability": "mutable", - "name": "from", - "nameLocation": "217:4:5", - "nodeType": "VariableDeclaration", - "scope": 698, - "src": "209:12:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 689, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "209:7:5", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 692, - "indexed": false, - "mutability": "mutable", - "name": "to", - "nameLocation": "231:2:5", - "nodeType": "VariableDeclaration", - "scope": 698, - "src": "223:10:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 691, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "223:7:5", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 694, - "indexed": false, - "mutability": "mutable", - "name": "guid", - "nameLocation": "243:4:5", - "nodeType": "VariableDeclaration", - "scope": 698, - "src": "235:12:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 693, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "235:7:5", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 696, - "indexed": false, - "mutability": "mutable", - "name": "index", - "nameLocation": "256:5:5", - "nodeType": "VariableDeclaration", - "scope": 698, - "src": "249:12:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - }, - "typeName": { - "id": 695, - "name": "uint16", - "nodeType": "ElementaryTypeName", - "src": "249:6:5", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "visibility": "internal" - } - ], - "src": "208:54:5" - }, - "src": "186:77:5" - }, - { - "anonymous": false, - "eventSelector": "8a0b1dce321c5c5fb42349bce46d18087c04140de520917661fb923e44a904b9", - "id": 720, - "name": "LzComposeAlert", - "nameLocation": "274:14:5", - "nodeType": "EventDefinition", - "parameters": { - "id": 719, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 700, - "indexed": true, - "mutability": "mutable", - "name": "from", - "nameLocation": "314:4:5", - "nodeType": "VariableDeclaration", - "scope": 720, - "src": "298:20:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 699, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "298:7:5", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 702, - "indexed": true, - "mutability": "mutable", - "name": "to", - "nameLocation": "344:2:5", - "nodeType": "VariableDeclaration", - "scope": 720, - "src": "328:18:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 701, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "328:7:5", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 704, - "indexed": true, - "mutability": "mutable", - "name": "executor", - "nameLocation": "372:8:5", - "nodeType": "VariableDeclaration", - "scope": 720, - "src": "356:24:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 703, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "356:7:5", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 706, - "indexed": false, - "mutability": "mutable", - "name": "guid", - "nameLocation": "398:4:5", - "nodeType": "VariableDeclaration", - "scope": 720, - "src": "390:12:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 705, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "390:7:5", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 708, - "indexed": false, - "mutability": "mutable", - "name": "index", - "nameLocation": "419:5:5", - "nodeType": "VariableDeclaration", - "scope": 720, - "src": "412:12:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - }, - "typeName": { - "id": 707, - "name": "uint16", - "nodeType": "ElementaryTypeName", - "src": "412:6:5", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 710, - "indexed": false, - "mutability": "mutable", - "name": "gas", - "nameLocation": "442:3:5", - "nodeType": "VariableDeclaration", - "scope": 720, - "src": "434:11:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 709, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "434:7:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 712, - "indexed": false, - "mutability": "mutable", - "name": "value", - "nameLocation": "463:5:5", - "nodeType": "VariableDeclaration", - "scope": 720, - "src": "455:13:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 711, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "455:7:5", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 714, - "indexed": false, - "mutability": "mutable", - "name": "message", - "nameLocation": "484:7:5", - "nodeType": "VariableDeclaration", - "scope": 720, - "src": "478:13:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 713, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "478:5:5", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 716, - "indexed": false, - "mutability": "mutable", - "name": "extraData", - "nameLocation": "507:9:5", - "nodeType": "VariableDeclaration", - "scope": 720, - "src": "501:15:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 715, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "501:5:5", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 718, - "indexed": false, - "mutability": "mutable", - "name": "reason", - "nameLocation": "532:6:5", - "nodeType": "VariableDeclaration", - "scope": 720, - "src": "526:12:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 717, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "526:5:5", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "288:256:5" - }, - "src": "268:277:5" - }, - { - "functionSelector": "35d330b0", - "id": 733, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "composeQueue", - "nameLocation": "560:12:5", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 729, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 722, - "mutability": "mutable", - "name": "_from", - "nameLocation": "590:5:5", - "nodeType": "VariableDeclaration", - "scope": 733, - "src": "582:13:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 721, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "582:7:5", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 724, - "mutability": "mutable", - "name": "_to", - "nameLocation": "613:3:5", - "nodeType": "VariableDeclaration", - "scope": 733, - "src": "605:11:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 723, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "605:7:5", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 726, - "mutability": "mutable", - "name": "_guid", - "nameLocation": "634:5:5", - "nodeType": "VariableDeclaration", - "scope": 733, - "src": "626:13:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 725, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "626:7:5", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 728, - "mutability": "mutable", - "name": "_index", - "nameLocation": "656:6:5", - "nodeType": "VariableDeclaration", - "scope": 733, - "src": "649:13:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - }, - "typeName": { - "id": 727, - "name": "uint16", - "nodeType": "ElementaryTypeName", - "src": "649:6:5", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "visibility": "internal" - } - ], - "src": "572:96:5" - }, - "returnParameters": { - "id": 732, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 731, - "mutability": "mutable", - "name": "messageHash", - "nameLocation": "700:11:5", - "nodeType": "VariableDeclaration", - "scope": 733, - "src": "692:19:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 730, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "692:7:5", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "691:21:5" - }, - "scope": 760, - "src": "551:162:5", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "7cb59012", - "id": 744, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "sendCompose", - "nameLocation": "728:11:5", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 742, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 735, - "mutability": "mutable", - "name": "_to", - "nameLocation": "748:3:5", - "nodeType": "VariableDeclaration", - "scope": 744, - "src": "740:11:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 734, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "740:7:5", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 737, - "mutability": "mutable", - "name": "_guid", - "nameLocation": "761:5:5", - "nodeType": "VariableDeclaration", - "scope": 744, - "src": "753:13:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 736, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "753:7:5", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 739, - "mutability": "mutable", - "name": "_index", - "nameLocation": "775:6:5", - "nodeType": "VariableDeclaration", - "scope": 744, - "src": "768:13:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - }, - "typeName": { - "id": 738, - "name": "uint16", - "nodeType": "ElementaryTypeName", - "src": "768:6:5", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 741, - "mutability": "mutable", - "name": "_message", - "nameLocation": "798:8:5", - "nodeType": "VariableDeclaration", - "scope": 744, - "src": "783:23:5", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 740, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "783:5:5", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "739:68:5" - }, - "returnParameters": { - "id": 743, - "nodeType": "ParameterList", - "parameters": [], - "src": "816:0:5" - }, - "scope": 760, - "src": "719:98:5", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "91d20fa1", - "id": 759, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "lzCompose", - "nameLocation": "832:9:5", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 757, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 746, - "mutability": "mutable", - "name": "_from", - "nameLocation": "859:5:5", - "nodeType": "VariableDeclaration", - "scope": 759, - "src": "851:13:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 745, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "851:7:5", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 748, - "mutability": "mutable", - "name": "_to", - "nameLocation": "882:3:5", - "nodeType": "VariableDeclaration", - "scope": 759, - "src": "874:11:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 747, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "874:7:5", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 750, - "mutability": "mutable", - "name": "_guid", - "nameLocation": "903:5:5", - "nodeType": "VariableDeclaration", - "scope": 759, - "src": "895:13:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 749, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "895:7:5", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 752, - "mutability": "mutable", - "name": "_index", - "nameLocation": "925:6:5", - "nodeType": "VariableDeclaration", - "scope": 759, - "src": "918:13:5", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - }, - "typeName": { - "id": 751, - "name": "uint16", - "nodeType": "ElementaryTypeName", - "src": "918:6:5", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 754, - "mutability": "mutable", - "name": "_message", - "nameLocation": "956:8:5", - "nodeType": "VariableDeclaration", - "scope": 759, - "src": "941:23:5", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 753, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "941:5:5", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 756, - "mutability": "mutable", - "name": "_extraData", - "nameLocation": "989:10:5", - "nodeType": "VariableDeclaration", - "scope": 759, - "src": "974:25:5", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 755, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "974:5:5", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "841:164:5" - }, - "returnParameters": { - "id": 758, - "nodeType": "ParameterList", - "parameters": [], - "src": "1022:0:5" - }, - "scope": 760, - "src": "823:200:5", - "stateMutability": "payable", - "virtual": false, - "visibility": "external" - } - ], - "scope": 761, - "src": "59:966:5", - "usedErrors": [], - "usedEvents": [688, 698, 720] - } - ], - "src": "33:993:5" - }, - "id": 5 - }, - "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol": { - "ast": { - "absolutePath": "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol", - "exportedSymbols": { "IMessagingContext": [775] }, - "id": 776, - "license": "MIT", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 762, - "literals": ["solidity", ">=", "0.8", ".0"], - "nodeType": "PragmaDirective", - "src": "33:24:6" - }, - { - "abstract": false, - "baseContracts": [], - "canonicalName": "IMessagingContext", - "contractDependencies": [], - "contractKind": "interface", - "fullyImplemented": false, - "id": 775, - "linearizedBaseContracts": [775], - "name": "IMessagingContext", - "nameLocation": "69:17:6", - "nodeType": "ContractDefinition", - "nodes": [ - { - "functionSelector": "79624ca9", - "id": 767, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "isSendingMessage", - "nameLocation": "102:16:6", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 763, - "nodeType": "ParameterList", - "parameters": [], - "src": "118:2:6" - }, - "returnParameters": { - "id": 766, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 765, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 767, - "src": "144:4:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 764, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "144:4:6", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "143:6:6" - }, - "scope": 775, - "src": "93:57:6", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "14f651a9", - "id": 774, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "getSendContext", - "nameLocation": "165:14:6", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 768, - "nodeType": "ParameterList", - "parameters": [], - "src": "179:2:6" - }, - "returnParameters": { - "id": 773, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 770, - "mutability": "mutable", - "name": "dstEid", - "nameLocation": "212:6:6", - "nodeType": "VariableDeclaration", - "scope": 774, - "src": "205:13:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 769, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "205:6:6", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 772, - "mutability": "mutable", - "name": "sender", - "nameLocation": "228:6:6", - "nodeType": "VariableDeclaration", - "scope": 774, - "src": "220:14:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 771, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "220:7:6", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "204:31:6" - }, - "scope": 775, - "src": "156:80:6", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - } - ], - "scope": 776, - "src": "59:179:6", - "usedErrors": [], - "usedEvents": [] - } - ], - "src": "33:206:6" - }, - "id": 6 - }, - "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol": { - "ast": { - "absolutePath": "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol", - "exportedSymbols": { - "IMessageLib": [293], - "ISendLib": [848], - "MessagingFee": [33], - "Packet": [796] - }, - "id": 849, - "license": "MIT", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 777, - "literals": ["solidity", ">=", "0.8", ".0"], - "nodeType": "PragmaDirective", - "src": "33:24:7" - }, - { - "absolutePath": "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol", - "file": "./ILayerZeroEndpointV2.sol", - "id": 779, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 849, - "sourceUnit": 203, - "src": "59:58:7", - "symbolAliases": [ - { - "foreign": { - "id": 778, - "name": "MessagingFee", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 33, - "src": "68:12:7", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol", - "file": "./IMessageLib.sol", - "id": 781, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 849, - "sourceUnit": 294, - "src": "118:48:7", - "symbolAliases": [ - { - "foreign": { - "id": 780, - "name": "IMessageLib", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 293, - "src": "127:11:7", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "canonicalName": "Packet", - "id": 796, - "members": [ - { - "constant": false, - "id": 783, - "mutability": "mutable", - "name": "nonce", - "nameLocation": "195:5:7", - "nodeType": "VariableDeclaration", - "scope": 796, - "src": "188:12:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "typeName": { - "id": 782, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "188:6:7", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 785, - "mutability": "mutable", - "name": "srcEid", - "nameLocation": "213:6:7", - "nodeType": "VariableDeclaration", - "scope": 796, - "src": "206:13:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 784, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "206:6:7", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 787, - "mutability": "mutable", - "name": "sender", - "nameLocation": "233:6:7", - "nodeType": "VariableDeclaration", - "scope": 796, - "src": "225:14:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 786, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "225:7:7", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 789, - "mutability": "mutable", - "name": "dstEid", - "nameLocation": "252:6:7", - "nodeType": "VariableDeclaration", - "scope": 796, - "src": "245:13:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 788, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "245:6:7", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 791, - "mutability": "mutable", - "name": "receiver", - "nameLocation": "272:8:7", - "nodeType": "VariableDeclaration", - "scope": 796, - "src": "264:16:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 790, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "264:7:7", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 793, - "mutability": "mutable", - "name": "guid", - "nameLocation": "294:4:7", - "nodeType": "VariableDeclaration", - "scope": 796, - "src": "286:12:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 792, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "286:7:7", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 795, - "mutability": "mutable", - "name": "message", - "nameLocation": "310:7:7", - "nodeType": "VariableDeclaration", - "scope": 796, - "src": "304:13:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 794, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "304:5:7", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "name": "Packet", - "nameLocation": "175:6:7", - "nodeType": "StructDefinition", - "scope": 849, - "src": "168:152:7", - "visibility": "public" - }, - { - "abstract": false, - "baseContracts": [ - { - "baseName": { - "id": 797, - "name": "IMessageLib", - "nameLocations": ["344:11:7"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 293, - "src": "344:11:7" - }, - "id": 798, - "nodeType": "InheritanceSpecifier", - "src": "344:11:7" - } - ], - "canonicalName": "ISendLib", - "contractDependencies": [], - "contractKind": "interface", - "fullyImplemented": false, - "id": 848, - "linearizedBaseContracts": [848, 293, 5556], - "name": "ISendLib", - "nameLocation": "332:8:7", - "nodeType": "ContractDefinition", - "nodes": [ - { - "functionSelector": "4389e58f", - "id": 813, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "send", - "nameLocation": "371:4:7", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 806, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 801, - "mutability": "mutable", - "name": "_packet", - "nameLocation": "401:7:7", - "nodeType": "VariableDeclaration", - "scope": 813, - "src": "385:23:7", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Packet_$796_calldata_ptr", - "typeString": "struct Packet" - }, - "typeName": { - "id": 800, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 799, - "name": "Packet", - "nameLocations": ["385:6:7"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 796, - "src": "385:6:7" - }, - "referencedDeclaration": 796, - "src": "385:6:7", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Packet_$796_storage_ptr", - "typeString": "struct Packet" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 803, - "mutability": "mutable", - "name": "_options", - "nameLocation": "433:8:7", - "nodeType": "VariableDeclaration", - "scope": 813, - "src": "418:23:7", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 802, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "418:5:7", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 805, - "mutability": "mutable", - "name": "_payInLzToken", - "nameLocation": "456:13:7", - "nodeType": "VariableDeclaration", - "scope": 813, - "src": "451:18:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 804, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "451:4:7", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "375:100:7" - }, - "returnParameters": { - "id": 812, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 809, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 813, - "src": "494:19:7", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MessagingFee_$33_memory_ptr", - "typeString": "struct MessagingFee" - }, - "typeName": { - "id": 808, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 807, - "name": "MessagingFee", - "nameLocations": ["494:12:7"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 33, - "src": "494:12:7" - }, - "referencedDeclaration": 33, - "src": "494:12:7", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MessagingFee_$33_storage_ptr", - "typeString": "struct MessagingFee" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 811, - "mutability": "mutable", - "name": "encodedPacket", - "nameLocation": "528:13:7", - "nodeType": "VariableDeclaration", - "scope": 813, - "src": "515:26:7", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 810, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "515:5:7", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "493:49:7" - }, - "scope": 848, - "src": "362:181:7", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "d80e9bd9", - "id": 826, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "quote", - "nameLocation": "558:5:7", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 821, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 816, - "mutability": "mutable", - "name": "_packet", - "nameLocation": "589:7:7", - "nodeType": "VariableDeclaration", - "scope": 826, - "src": "573:23:7", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Packet_$796_calldata_ptr", - "typeString": "struct Packet" - }, - "typeName": { - "id": 815, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 814, - "name": "Packet", - "nameLocations": ["573:6:7"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 796, - "src": "573:6:7" - }, - "referencedDeclaration": 796, - "src": "573:6:7", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Packet_$796_storage_ptr", - "typeString": "struct Packet" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 818, - "mutability": "mutable", - "name": "_options", - "nameLocation": "621:8:7", - "nodeType": "VariableDeclaration", - "scope": 826, - "src": "606:23:7", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 817, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "606:5:7", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 820, - "mutability": "mutable", - "name": "_payInLzToken", - "nameLocation": "644:13:7", - "nodeType": "VariableDeclaration", - "scope": 826, - "src": "639:18:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 819, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "639:4:7", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "563:100:7" - }, - "returnParameters": { - "id": 825, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 824, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 826, - "src": "687:19:7", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MessagingFee_$33_memory_ptr", - "typeString": "struct MessagingFee" - }, - "typeName": { - "id": 823, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 822, - "name": "MessagingFee", - "nameLocations": ["687:12:7"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 33, - "src": "687:12:7" - }, - "referencedDeclaration": 33, - "src": "687:12:7", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MessagingFee_$33_storage_ptr", - "typeString": "struct MessagingFee" - } - }, - "visibility": "internal" - } - ], - "src": "686:21:7" - }, - "scope": 848, - "src": "549:159:7", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "f0f44260", - "id": 831, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "setTreasury", - "nameLocation": "723:11:7", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 829, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 828, - "mutability": "mutable", - "name": "_treasury", - "nameLocation": "743:9:7", - "nodeType": "VariableDeclaration", - "scope": 831, - "src": "735:17:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 827, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "735:7:7", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "734:19:7" - }, - "returnParameters": { - "id": 830, - "nodeType": "ParameterList", - "parameters": [], - "src": "762:0:7" - }, - "scope": 848, - "src": "714:49:7", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "fd9be522", - "id": 838, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "withdrawFee", - "nameLocation": "778:11:7", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 836, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 833, - "mutability": "mutable", - "name": "_to", - "nameLocation": "798:3:7", - "nodeType": "VariableDeclaration", - "scope": 838, - "src": "790:11:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 832, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "790:7:7", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 835, - "mutability": "mutable", - "name": "_amount", - "nameLocation": "811:7:7", - "nodeType": "VariableDeclaration", - "scope": 838, - "src": "803:15:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 834, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "803:7:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "789:30:7" - }, - "returnParameters": { - "id": 837, - "nodeType": "ParameterList", - "parameters": [], - "src": "828:0:7" - }, - "scope": 848, - "src": "769:60:7", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "200175f7", - "id": 847, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "withdrawLzTokenFee", - "nameLocation": "844:18:7", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 845, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 840, - "mutability": "mutable", - "name": "_lzToken", - "nameLocation": "871:8:7", - "nodeType": "VariableDeclaration", - "scope": 847, - "src": "863:16:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 839, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "863:7:7", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 842, - "mutability": "mutable", - "name": "_to", - "nameLocation": "889:3:7", - "nodeType": "VariableDeclaration", - "scope": 847, - "src": "881:11:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 841, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "881:7:7", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 844, - "mutability": "mutable", - "name": "_amount", - "nameLocation": "902:7:7", - "nodeType": "VariableDeclaration", - "scope": 847, - "src": "894:15:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 843, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "894:7:7", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "862:48:7" - }, - "returnParameters": { - "id": 846, - "nodeType": "ParameterList", - "parameters": [], - "src": "919:0:7" - }, - "scope": 848, - "src": "835:85:7", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - } - ], - "scope": 849, - "src": "322:600:7", - "usedErrors": [], - "usedEvents": [] - } - ], - "src": "33:890:7" - }, - "id": 7 - }, - "@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol": { - "ast": { - "absolutePath": "@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol", - "exportedSymbols": { "AddressCast": [1001] }, - "id": 1002, - "license": "LZBL-1.2", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 850, - "literals": ["solidity", "^", "0.8", ".20"], - "nodeType": "PragmaDirective", - "src": "38:24:8" - }, - { - "abstract": false, - "baseContracts": [], - "canonicalName": "AddressCast", - "contractDependencies": [], - "contractKind": "library", - "fullyImplemented": true, - "id": 1001, - "linearizedBaseContracts": [1001], - "name": "AddressCast", - "nameLocation": "72:11:8", - "nodeType": "ContractDefinition", - "nodes": [ - { - "errorSelector": "18456c9b", - "id": 852, - "name": "AddressCast_InvalidSizeForAddress", - "nameLocation": "96:33:8", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 851, - "nodeType": "ParameterList", - "parameters": [], - "src": "129:2:8" - }, - "src": "90:42:8" - }, - { - "errorSelector": "6281faa2", - "id": 854, - "name": "AddressCast_InvalidAddress", - "nameLocation": "143:26:8", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 853, - "nodeType": "ParameterList", - "parameters": [], - "src": "169:2:8" - }, - "src": "137:35:8" - }, - { - "body": { - "id": 893, - "nodeType": "Block", - "src": "266:255:8", - "statements": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 864, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 861, - "name": "_addressBytes", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 856, - "src": "280:13:8", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - }, - "id": 862, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "294:6:8", - "memberName": "length", - "nodeType": "MemberAccess", - "src": "280:20:8", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "hexValue": "3332", - "id": 863, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "303:2:8", - "typeDescriptions": { - "typeIdentifier": "t_rational_32_by_1", - "typeString": "int_const 32" - }, - "value": "32" - }, - "src": "280:25:8", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 868, - "nodeType": "IfStatement", - "src": "276:66:8", - "trueBody": { - "errorCall": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 865, - "name": "AddressCast_InvalidAddress", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 854, - "src": "314:26:8", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 866, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "314:28:8", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 867, - "nodeType": "RevertStatement", - "src": "307:35:8" - } - }, - { - "expression": { - "id": 874, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 869, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 859, - "src": "352:6:8", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 872, - "name": "_addressBytes", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 856, - "src": "369:13:8", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - ], - "id": 871, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "361:7:8", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_bytes32_$", - "typeString": "type(bytes32)" - }, - "typeName": { - "id": 870, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "361:7:8", - "typeDescriptions": {} - } - }, - "id": 873, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "361:22:8", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "src": "352:31:8", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "id": 875, - "nodeType": "ExpressionStatement", - "src": "352:31:8" - }, - { - "id": 892, - "nodeType": "UncheckedBlock", - "src": "393:122:8", - "statements": [ - { - "assignments": [877], - "declarations": [ - { - "constant": false, - "id": 877, - "mutability": "mutable", - "name": "offset", - "nameLocation": "425:6:8", - "nodeType": "VariableDeclaration", - "scope": 892, - "src": "417:14:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 876, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "417:7:8", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 882, - "initialValue": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 881, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "hexValue": "3332", - "id": 878, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "434:2:8", - "typeDescriptions": { - "typeIdentifier": "t_rational_32_by_1", - "typeString": "int_const 32" - }, - "value": "32" - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "expression": { - "id": 879, - "name": "_addressBytes", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 856, - "src": "439:13:8", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - }, - "id": 880, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "453:6:8", - "memberName": "length", - "nodeType": "MemberAccess", - "src": "439:20:8", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "434:25:8", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "417:42:8" - }, - { - "expression": { - "id": 890, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 883, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 859, - "src": "473:6:8", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "commonType": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "id": 889, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 884, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 859, - "src": "482:6:8", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "nodeType": "BinaryOperation", - "operator": ">>", - "rightExpression": { - "components": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 887, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 885, - "name": "offset", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 877, - "src": "493:6:8", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "hexValue": "38", - "id": 886, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "502:1:8", - "typeDescriptions": { - "typeIdentifier": "t_rational_8_by_1", - "typeString": "int_const 8" - }, - "value": "8" - }, - "src": "493:10:8", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 888, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "492:12:8", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "482:22:8", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "src": "473:31:8", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "id": 891, - "nodeType": "ExpressionStatement", - "src": "473:31:8" - } - ] - } - ] - }, - "id": 894, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "toBytes32", - "nameLocation": "187:9:8", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 857, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 856, - "mutability": "mutable", - "name": "_addressBytes", - "nameLocation": "212:13:8", - "nodeType": "VariableDeclaration", - "scope": 894, - "src": "197:28:8", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 855, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "197:5:8", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "196:30:8" - }, - "returnParameters": { - "id": 860, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 859, - "mutability": "mutable", - "name": "result", - "nameLocation": "258:6:8", - "nodeType": "VariableDeclaration", - "scope": 894, - "src": "250:14:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 858, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "250:7:8", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "249:16:8" - }, - "scope": 1001, - "src": "178:343:8", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 914, - "nodeType": "Block", - "src": "603:61:8", - "statements": [ - { - "expression": { - "id": 912, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 901, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 899, - "src": "613:6:8", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "id": 908, - "name": "_address", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 896, - "src": "646:8:8", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 907, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "638:7:8", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint160_$", - "typeString": "type(uint160)" - }, - "typeName": { - "id": 906, - "name": "uint160", - "nodeType": "ElementaryTypeName", - "src": "638:7:8", - "typeDescriptions": {} - } - }, - "id": 909, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "638:17:8", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint160", - "typeString": "uint160" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint160", - "typeString": "uint160" - } - ], - "id": 905, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "630:7:8", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint256_$", - "typeString": "type(uint256)" - }, - "typeName": { - "id": 904, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "630:7:8", - "typeDescriptions": {} - } - }, - "id": 910, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "630:26:8", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 903, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "622:7:8", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_bytes32_$", - "typeString": "type(bytes32)" - }, - "typeName": { - "id": 902, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "622:7:8", - "typeDescriptions": {} - } - }, - "id": 911, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "622:35:8", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "src": "613:44:8", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "id": 913, - "nodeType": "ExpressionStatement", - "src": "613:44:8" - } - ] - }, - "id": 915, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "toBytes32", - "nameLocation": "536:9:8", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 897, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 896, - "mutability": "mutable", - "name": "_address", - "nameLocation": "554:8:8", - "nodeType": "VariableDeclaration", - "scope": 915, - "src": "546:16:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 895, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "546:7:8", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "545:18:8" - }, - "returnParameters": { - "id": 900, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 899, - "mutability": "mutable", - "name": "result", - "nameLocation": "595:6:8", - "nodeType": "VariableDeclaration", - "scope": 915, - "src": "587:14:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 898, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "587:7:8", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "586:16:8" - }, - "scope": 1001, - "src": "527:137:8", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 952, - "nodeType": "Block", - "src": "771:307:8", - "statements": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 930, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 926, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 924, - "name": "_size", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 919, - "src": "785:5:8", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "hexValue": "30", - "id": 925, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "794:1:8", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "785:10:8", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "||", - "rightExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 929, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 927, - "name": "_size", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 919, - "src": "799:5:8", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "hexValue": "3332", - "id": 928, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "807:2:8", - "typeDescriptions": { - "typeIdentifier": "t_rational_32_by_1", - "typeString": "int_const 32" - }, - "value": "32" - }, - "src": "799:10:8", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "785:24:8", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 934, - "nodeType": "IfStatement", - "src": "781:72:8", - "trueBody": { - "errorCall": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 931, - "name": "AddressCast_InvalidSizeForAddress", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 852, - "src": "818:33:8", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 932, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "818:35:8", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 933, - "nodeType": "RevertStatement", - "src": "811:42:8" - } - }, - { - "expression": { - "id": 940, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 935, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 922, - "src": "863:6:8", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 938, - "name": "_size", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 919, - "src": "882:5:8", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 937, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "NewExpression", - "src": "872:9:8", - "typeDescriptions": { - "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_ptr_$", - "typeString": "function (uint256) pure returns (bytes memory)" - }, - "typeName": { - "id": 936, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "876:5:8", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - } - }, - "id": 939, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "872:16:8", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - "src": "863:25:8", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - "id": 941, - "nodeType": "ExpressionStatement", - "src": "863:25:8" - }, - { - "id": 951, - "nodeType": "UncheckedBlock", - "src": "898:174:8", - "statements": [ - { - "assignments": [943], - "declarations": [ - { - "constant": false, - "id": 943, - "mutability": "mutable", - "name": "offset", - "nameLocation": "930:6:8", - "nodeType": "VariableDeclaration", - "scope": 951, - "src": "922:14:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 942, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "922:7:8", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 949, - "initialValue": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 948, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "hexValue": "323536", - "id": 944, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "939:3:8", - "typeDescriptions": { - "typeIdentifier": "t_rational_256_by_1", - "typeString": "int_const 256" - }, - "value": "256" - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 947, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 945, - "name": "_size", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 919, - "src": "945:5:8", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "hexValue": "38", - "id": 946, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "953:1:8", - "typeDescriptions": { - "typeIdentifier": "t_rational_8_by_1", - "typeString": "int_const 8" - }, - "value": "8" - }, - "src": "945:9:8", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "939:15:8", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "922:32:8" - }, - { - "AST": { - "nativeSrc": "977:85:8", - "nodeType": "YulBlock", - "src": "977:85:8", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "result", - "nativeSrc": "1006:6:8", - "nodeType": "YulIdentifier", - "src": "1006:6:8" - }, - { - "kind": "number", - "nativeSrc": "1014:2:8", - "nodeType": "YulLiteral", - "src": "1014:2:8", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "1002:3:8", - "nodeType": "YulIdentifier", - "src": "1002:3:8" - }, - "nativeSrc": "1002:15:8", - "nodeType": "YulFunctionCall", - "src": "1002:15:8" - }, - { - "arguments": [ - { - "name": "offset", - "nativeSrc": "1023:6:8", - "nodeType": "YulIdentifier", - "src": "1023:6:8" - }, - { - "name": "_addressBytes32", - "nativeSrc": "1031:15:8", - "nodeType": "YulIdentifier", - "src": "1031:15:8" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "1019:3:8", - "nodeType": "YulIdentifier", - "src": "1019:3:8" - }, - "nativeSrc": "1019:28:8", - "nodeType": "YulFunctionCall", - "src": "1019:28:8" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "995:6:8", - "nodeType": "YulIdentifier", - "src": "995:6:8" - }, - "nativeSrc": "995:53:8", - "nodeType": "YulFunctionCall", - "src": "995:53:8" - }, - "nativeSrc": "995:53:8", - "nodeType": "YulExpressionStatement", - "src": "995:53:8" - } - ] - }, - "evmVersion": "paris", - "externalReferences": [ - { - "declaration": 917, - "isOffset": false, - "isSlot": false, - "src": "1031:15:8", - "valueSize": 1 - }, - { - "declaration": 943, - "isOffset": false, - "isSlot": false, - "src": "1023:6:8", - "valueSize": 1 - }, - { - "declaration": 922, - "isOffset": false, - "isSlot": false, - "src": "1006:6:8", - "valueSize": 1 - } - ], - "id": 950, - "nodeType": "InlineAssembly", - "src": "968:94:8" - } - ] - } - ] - }, - "id": 953, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "toBytes", - "nameLocation": "679:7:8", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 920, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 917, - "mutability": "mutable", - "name": "_addressBytes32", - "nameLocation": "695:15:8", - "nodeType": "VariableDeclaration", - "scope": 953, - "src": "687:23:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 916, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "687:7:8", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 919, - "mutability": "mutable", - "name": "_size", - "nameLocation": "720:5:8", - "nodeType": "VariableDeclaration", - "scope": 953, - "src": "712:13:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 918, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "712:7:8", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "686:40:8" - }, - "returnParameters": { - "id": 923, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 922, - "mutability": "mutable", - "name": "result", - "nameLocation": "763:6:8", - "nodeType": "VariableDeclaration", - "scope": 953, - "src": "750:19:8", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 921, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "750:5:8", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "749:21:8" - }, - "scope": 1001, - "src": "670:408:8", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 973, - "nodeType": "Block", - "src": "1167:68:8", - "statements": [ - { - "expression": { - "id": 971, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 960, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 958, - "src": "1177:6:8", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "id": 967, - "name": "_addressBytes32", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 955, - "src": "1210:15:8", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "id": 966, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "1202:7:8", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint256_$", - "typeString": "type(uint256)" - }, - "typeName": { - "id": 965, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1202:7:8", - "typeDescriptions": {} - } - }, - "id": 968, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1202:24:8", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 964, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "1194:7:8", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint160_$", - "typeString": "type(uint160)" - }, - "typeName": { - "id": 963, - "name": "uint160", - "nodeType": "ElementaryTypeName", - "src": "1194:7:8", - "typeDescriptions": {} - } - }, - "id": 969, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1194:33:8", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint160", - "typeString": "uint160" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint160", - "typeString": "uint160" - } - ], - "id": 962, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "1186:7:8", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 961, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1186:7:8", - "typeDescriptions": {} - } - }, - "id": 970, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1186:42:8", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "1177:51:8", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 972, - "nodeType": "ExpressionStatement", - "src": "1177:51:8" - } - ] - }, - "id": 974, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "toAddress", - "nameLocation": "1093:9:8", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 956, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 955, - "mutability": "mutable", - "name": "_addressBytes32", - "nameLocation": "1111:15:8", - "nodeType": "VariableDeclaration", - "scope": 974, - "src": "1103:23:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 954, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "1103:7:8", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "1102:25:8" - }, - "returnParameters": { - "id": 959, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 958, - "mutability": "mutable", - "name": "result", - "nameLocation": "1159:6:8", - "nodeType": "VariableDeclaration", - "scope": 974, - "src": "1151:14:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 957, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1151:7:8", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1150:16:8" - }, - "scope": 1001, - "src": "1084:151:8", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 999, - "nodeType": "Block", - "src": "1329:134:8", - "statements": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 984, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 981, - "name": "_addressBytes", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 976, - "src": "1343:13:8", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - }, - "id": 982, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "1357:6:8", - "memberName": "length", - "nodeType": "MemberAccess", - "src": "1343:20:8", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "hexValue": "3230", - "id": 983, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1367:2:8", - "typeDescriptions": { - "typeIdentifier": "t_rational_20_by_1", - "typeString": "int_const 20" - }, - "value": "20" - }, - "src": "1343:26:8", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 988, - "nodeType": "IfStatement", - "src": "1339:67:8", - "trueBody": { - "errorCall": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 985, - "name": "AddressCast_InvalidAddress", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 854, - "src": "1378:26:8", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 986, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1378:28:8", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 987, - "nodeType": "RevertStatement", - "src": "1371:35:8" - } - }, - { - "expression": { - "id": 997, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 989, - "name": "result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 979, - "src": "1416:6:8", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "arguments": [ - { - "id": 994, - "name": "_addressBytes", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 976, - "src": "1441:13:8", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - ], - "id": 993, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "1433:7:8", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_bytes20_$", - "typeString": "type(bytes20)" - }, - "typeName": { - "id": 992, - "name": "bytes20", - "nodeType": "ElementaryTypeName", - "src": "1433:7:8", - "typeDescriptions": {} - } - }, - "id": 995, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1433:22:8", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes20", - "typeString": "bytes20" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes20", - "typeString": "bytes20" - } - ], - "id": 991, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "1425:7:8", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 990, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1425:7:8", - "typeDescriptions": {} - } - }, - "id": 996, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1425:31:8", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "1416:40:8", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 998, - "nodeType": "ExpressionStatement", - "src": "1416:40:8" - } - ] - }, - "id": 1000, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "toAddress", - "nameLocation": "1250:9:8", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 977, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 976, - "mutability": "mutable", - "name": "_addressBytes", - "nameLocation": "1275:13:8", - "nodeType": "VariableDeclaration", - "scope": 1000, - "src": "1260:28:8", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 975, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "1260:5:8", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "1259:30:8" - }, - "returnParameters": { - "id": 980, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 979, - "mutability": "mutable", - "name": "result", - "nameLocation": "1321:6:8", - "nodeType": "VariableDeclaration", - "scope": 1000, - "src": "1313:14:8", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 978, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1313:7:8", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1312:16:8" - }, - "scope": 1001, - "src": "1241:222:8", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - } - ], - "scope": 1002, - "src": "64:1401:8", - "usedErrors": [852, 854], - "usedEvents": [] - } - ], - "src": "38:1428:8" - }, - "id": 8 - }, - "@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol": { - "ast": { - "absolutePath": "@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol", - "exportedSymbols": { - "AddressCast": [1001], - "Packet": [796], - "PacketV1Codec": [1325] - }, - "id": 1326, - "license": "LZBL-1.2", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 1003, - "literals": ["solidity", "^", "0.8", ".20"], - "nodeType": "PragmaDirective", - "src": "38:24:9" - }, - { - "absolutePath": "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol", - "file": "../../interfaces/ISendLib.sol", - "id": 1005, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 1326, - "sourceUnit": 849, - "src": "64:55:9", - "symbolAliases": [ - { - "foreign": { - "id": 1004, - "name": "Packet", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 796, - "src": "73:6:9", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol", - "file": "../../libs/AddressCast.sol", - "id": 1007, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 1326, - "sourceUnit": 1002, - "src": "120:57:9", - "symbolAliases": [ - { - "foreign": { - "id": 1006, - "name": "AddressCast", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1001, - "src": "129:11:9", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "abstract": false, - "baseContracts": [], - "canonicalName": "PacketV1Codec", - "contractDependencies": [], - "contractKind": "library", - "fullyImplemented": true, - "id": 1325, - "linearizedBaseContracts": [1325], - "name": "PacketV1Codec", - "nameLocation": "187:13:9", - "nodeType": "ContractDefinition", - "nodes": [ - { - "global": false, - "id": 1010, - "libraryName": { - "id": 1008, - "name": "AddressCast", - "nameLocations": ["213:11:9"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 1001, - "src": "213:11:9" - }, - "nodeType": "UsingForDirective", - "src": "207:30:9", - "typeName": { - "id": 1009, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "229:7:9", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - }, - { - "global": false, - "id": 1013, - "libraryName": { - "id": 1011, - "name": "AddressCast", - "nameLocations": ["248:11:9"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 1001, - "src": "248:11:9" - }, - "nodeType": "UsingForDirective", - "src": "242:30:9", - "typeName": { - "id": 1012, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "264:7:9", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - }, - { - "constant": true, - "id": 1016, - "mutability": "constant", - "name": "PACKET_VERSION", - "nameLocation": "302:14:9", - "nodeType": "VariableDeclaration", - "scope": 1325, - "src": "278:42:9", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 1014, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "278:5:9", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "value": { - "hexValue": "31", - "id": 1015, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "319:1:9", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "visibility": "internal" - }, - { - "constant": true, - "id": 1019, - "mutability": "constant", - "name": "PACKET_VERSION_OFFSET", - "nameLocation": "406:21:9", - "nodeType": "VariableDeclaration", - "scope": 1325, - "src": "381:50:9", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1017, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "381:7:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": { - "hexValue": "30", - "id": 1018, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "430:1:9", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "visibility": "private" - }, - { - "constant": true, - "id": 1022, - "mutability": "constant", - "name": "NONCE_OFFSET", - "nameLocation": "478:12:9", - "nodeType": "VariableDeclaration", - "scope": 1325, - "src": "453:41:9", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1020, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "453:7:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": { - "hexValue": "31", - "id": 1021, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "493:1:9", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "visibility": "private" - }, - { - "constant": true, - "id": 1025, - "mutability": "constant", - "name": "SRC_EID_OFFSET", - "nameLocation": "540:14:9", - "nodeType": "VariableDeclaration", - "scope": 1325, - "src": "515:43:9", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1023, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "515:7:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": { - "hexValue": "39", - "id": 1024, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "557:1:9", - "typeDescriptions": { - "typeIdentifier": "t_rational_9_by_1", - "typeString": "int_const 9" - }, - "value": "9" - }, - "visibility": "private" - }, - { - "constant": true, - "id": 1028, - "mutability": "constant", - "name": "SENDER_OFFSET", - "nameLocation": "589:13:9", - "nodeType": "VariableDeclaration", - "scope": 1325, - "src": "564:43:9", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1026, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "564:7:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": { - "hexValue": "3133", - "id": 1027, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "605:2:9", - "typeDescriptions": { - "typeIdentifier": "t_rational_13_by_1", - "typeString": "int_const 13" - }, - "value": "13" - }, - "visibility": "private" - }, - { - "constant": true, - "id": 1031, - "mutability": "constant", - "name": "DST_EID_OFFSET", - "nameLocation": "638:14:9", - "nodeType": "VariableDeclaration", - "scope": 1325, - "src": "613:44:9", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1029, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "613:7:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": { - "hexValue": "3435", - "id": 1030, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "655:2:9", - "typeDescriptions": { - "typeIdentifier": "t_rational_45_by_1", - "typeString": "int_const 45" - }, - "value": "45" - }, - "visibility": "private" - }, - { - "constant": true, - "id": 1034, - "mutability": "constant", - "name": "RECEIVER_OFFSET", - "nameLocation": "688:15:9", - "nodeType": "VariableDeclaration", - "scope": 1325, - "src": "663:45:9", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1032, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "663:7:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": { - "hexValue": "3439", - "id": 1033, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "706:2:9", - "typeDescriptions": { - "typeIdentifier": "t_rational_49_by_1", - "typeString": "int_const 49" - }, - "value": "49" - }, - "visibility": "private" - }, - { - "constant": true, - "id": 1037, - "mutability": "constant", - "name": "GUID_OFFSET", - "nameLocation": "771:11:9", - "nodeType": "VariableDeclaration", - "scope": 1325, - "src": "746:41:9", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1035, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "746:7:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": { - "hexValue": "3831", - "id": 1036, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "785:2:9", - "typeDescriptions": { - "typeIdentifier": "t_rational_81_by_1", - "typeString": "int_const 81" - }, - "value": "81" - }, - "visibility": "private" - }, - { - "constant": true, - "id": 1040, - "mutability": "constant", - "name": "MESSAGE_OFFSET", - "nameLocation": "845:14:9", - "nodeType": "VariableDeclaration", - "scope": 1325, - "src": "820:45:9", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1038, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "820:7:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": { - "hexValue": "313133", - "id": 1039, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "862:3:9", - "typeDescriptions": { - "typeIdentifier": "t_rational_113_by_1", - "typeString": "int_const 113" - }, - "value": "113" - }, - "visibility": "private" - }, - { - "body": { - "id": 1071, - "nodeType": "Block", - "src": "962:295:9", - "statements": [ - { - "expression": { - "id": 1069, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 1048, - "name": "encodedPacket", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1046, - "src": "972:13:9", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 1051, - "name": "PACKET_VERSION", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1016, - "src": "1018:14:9", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - { - "expression": { - "id": 1052, - "name": "_packet", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1043, - "src": "1046:7:9", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Packet_$796_memory_ptr", - "typeString": "struct Packet memory" - } - }, - "id": 1053, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "1054:5:9", - "memberName": "nonce", - "nodeType": "MemberAccess", - "referencedDeclaration": 783, - "src": "1046:13:9", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - { - "expression": { - "id": 1054, - "name": "_packet", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1043, - "src": "1073:7:9", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Packet_$796_memory_ptr", - "typeString": "struct Packet memory" - } - }, - "id": 1055, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "1081:6:9", - "memberName": "srcEid", - "nodeType": "MemberAccess", - "referencedDeclaration": 785, - "src": "1073:14:9", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "expression": { - "id": 1056, - "name": "_packet", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1043, - "src": "1101:7:9", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Packet_$796_memory_ptr", - "typeString": "struct Packet memory" - } - }, - "id": 1057, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "1109:6:9", - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": 787, - "src": "1101:14:9", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 1058, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "1116:9:9", - "memberName": "toBytes32", - "nodeType": "MemberAccess", - "referencedDeclaration": 915, - "src": "1101:24:9", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_address_$returns$_t_bytes32_$attached_to$_t_address_$", - "typeString": "function (address) pure returns (bytes32)" - } - }, - "id": 1059, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1101:26:9", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "expression": { - "id": 1060, - "name": "_packet", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1043, - "src": "1141:7:9", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Packet_$796_memory_ptr", - "typeString": "struct Packet memory" - } - }, - "id": 1061, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "1149:6:9", - "memberName": "dstEid", - "nodeType": "MemberAccess", - "referencedDeclaration": 789, - "src": "1141:14:9", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - { - "expression": { - "id": 1062, - "name": "_packet", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1043, - "src": "1169:7:9", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Packet_$796_memory_ptr", - "typeString": "struct Packet memory" - } - }, - "id": 1063, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "1177:8:9", - "memberName": "receiver", - "nodeType": "MemberAccess", - "referencedDeclaration": 791, - "src": "1169:16:9", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "expression": { - "id": 1064, - "name": "_packet", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1043, - "src": "1199:7:9", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Packet_$796_memory_ptr", - "typeString": "struct Packet memory" - } - }, - "id": 1065, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "1207:4:9", - "memberName": "guid", - "nodeType": "MemberAccess", - "referencedDeclaration": 793, - "src": "1199:12:9", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "expression": { - "id": 1066, - "name": "_packet", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1043, - "src": "1225:7:9", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Packet_$796_memory_ptr", - "typeString": "struct Packet memory" - } - }, - "id": 1067, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "1233:7:9", - "memberName": "message", - "nodeType": "MemberAccess", - "referencedDeclaration": 795, - "src": "1225:15:9", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "expression": { - "id": 1049, - "name": "abi", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967295, - "src": "988:3:9", - "typeDescriptions": { - "typeIdentifier": "t_magic_abi", - "typeString": "abi" - } - }, - "id": 1050, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "992:12:9", - "memberName": "encodePacked", - "nodeType": "MemberAccess", - "src": "988:16:9", - "typeDescriptions": { - "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$", - "typeString": "function () pure returns (bytes memory)" - } - }, - "id": 1068, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "988:262:9", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - "src": "972:278:9", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - "id": 1070, - "nodeType": "ExpressionStatement", - "src": "972:278:9" - } - ] - }, - "id": 1072, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "encode", - "nameLocation": "881:6:9", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1044, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1043, - "mutability": "mutable", - "name": "_packet", - "nameLocation": "902:7:9", - "nodeType": "VariableDeclaration", - "scope": 1072, - "src": "888:21:9", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Packet_$796_memory_ptr", - "typeString": "struct Packet" - }, - "typeName": { - "id": 1042, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 1041, - "name": "Packet", - "nameLocations": ["888:6:9"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 796, - "src": "888:6:9" - }, - "referencedDeclaration": 796, - "src": "888:6:9", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Packet_$796_storage_ptr", - "typeString": "struct Packet" - } - }, - "visibility": "internal" - } - ], - "src": "887:23:9" - }, - "returnParameters": { - "id": 1047, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1046, - "mutability": "mutable", - "name": "encodedPacket", - "nameLocation": "947:13:9", - "nodeType": "VariableDeclaration", - "scope": 1072, - "src": "934:26:9", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 1045, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "934:5:9", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "933:28:9" - }, - "scope": 1325, - "src": "872:385:9", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 1097, - "nodeType": "Block", - "src": "1351:271:9", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 1082, - "name": "PACKET_VERSION", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1016, - "src": "1414:14:9", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - { - "expression": { - "id": 1083, - "name": "_packet", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1075, - "src": "1446:7:9", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Packet_$796_memory_ptr", - "typeString": "struct Packet memory" - } - }, - "id": 1084, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "1454:5:9", - "memberName": "nonce", - "nodeType": "MemberAccess", - "referencedDeclaration": 783, - "src": "1446:13:9", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - { - "expression": { - "id": 1085, - "name": "_packet", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1075, - "src": "1477:7:9", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Packet_$796_memory_ptr", - "typeString": "struct Packet memory" - } - }, - "id": 1086, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "1485:6:9", - "memberName": "srcEid", - "nodeType": "MemberAccess", - "referencedDeclaration": 785, - "src": "1477:14:9", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "expression": { - "id": 1087, - "name": "_packet", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1075, - "src": "1509:7:9", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Packet_$796_memory_ptr", - "typeString": "struct Packet memory" - } - }, - "id": 1088, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "1517:6:9", - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": 787, - "src": "1509:14:9", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 1089, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "1524:9:9", - "memberName": "toBytes32", - "nodeType": "MemberAccess", - "referencedDeclaration": 915, - "src": "1509:24:9", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_address_$returns$_t_bytes32_$attached_to$_t_address_$", - "typeString": "function (address) pure returns (bytes32)" - } - }, - "id": 1090, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1509:26:9", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "expression": { - "id": 1091, - "name": "_packet", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1075, - "src": "1553:7:9", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Packet_$796_memory_ptr", - "typeString": "struct Packet memory" - } - }, - "id": 1092, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "1561:6:9", - "memberName": "dstEid", - "nodeType": "MemberAccess", - "referencedDeclaration": 789, - "src": "1553:14:9", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - { - "expression": { - "id": 1093, - "name": "_packet", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1075, - "src": "1585:7:9", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Packet_$796_memory_ptr", - "typeString": "struct Packet memory" - } - }, - "id": 1094, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "1593:8:9", - "memberName": "receiver", - "nodeType": "MemberAccess", - "referencedDeclaration": 791, - "src": "1585:16:9", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "expression": { - "id": 1080, - "name": "abi", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967295, - "src": "1380:3:9", - "typeDescriptions": { - "typeIdentifier": "t_magic_abi", - "typeString": "abi" - } - }, - "id": 1081, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "1384:12:9", - "memberName": "encodePacked", - "nodeType": "MemberAccess", - "src": "1380:16:9", - "typeDescriptions": { - "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$", - "typeString": "function () pure returns (bytes memory)" - } - }, - "id": 1095, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1380:235:9", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - "functionReturnParameters": 1079, - "id": 1096, - "nodeType": "Return", - "src": "1361:254:9" - } - ] - }, - "id": 1098, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "encodePacketHeader", - "nameLocation": "1272:18:9", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1076, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1075, - "mutability": "mutable", - "name": "_packet", - "nameLocation": "1305:7:9", - "nodeType": "VariableDeclaration", - "scope": 1098, - "src": "1291:21:9", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Packet_$796_memory_ptr", - "typeString": "struct Packet" - }, - "typeName": { - "id": 1074, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 1073, - "name": "Packet", - "nameLocations": ["1291:6:9"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 796, - "src": "1291:6:9" - }, - "referencedDeclaration": 796, - "src": "1291:6:9", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Packet_$796_storage_ptr", - "typeString": "struct Packet" - } - }, - "visibility": "internal" - } - ], - "src": "1290:23:9" - }, - "returnParameters": { - "id": 1079, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1078, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 1098, - "src": "1337:12:9", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 1077, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "1337:5:9", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "1336:14:9" - }, - "scope": 1325, - "src": "1263:359:9", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 1114, - "nodeType": "Block", - "src": "1711:71:9", - "statements": [ - { - "expression": { - "arguments": [ - { - "expression": { - "id": 1108, - "name": "_packet", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1101, - "src": "1745:7:9", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Packet_$796_memory_ptr", - "typeString": "struct Packet memory" - } - }, - "id": 1109, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "1753:4:9", - "memberName": "guid", - "nodeType": "MemberAccess", - "referencedDeclaration": 793, - "src": "1745:12:9", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "expression": { - "id": 1110, - "name": "_packet", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1101, - "src": "1759:7:9", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Packet_$796_memory_ptr", - "typeString": "struct Packet memory" - } - }, - "id": 1111, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "1767:7:9", - "memberName": "message", - "nodeType": "MemberAccess", - "referencedDeclaration": 795, - "src": "1759:15:9", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "expression": { - "id": 1106, - "name": "abi", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967295, - "src": "1728:3:9", - "typeDescriptions": { - "typeIdentifier": "t_magic_abi", - "typeString": "abi" - } - }, - "id": 1107, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "1732:12:9", - "memberName": "encodePacked", - "nodeType": "MemberAccess", - "src": "1728:16:9", - "typeDescriptions": { - "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$", - "typeString": "function () pure returns (bytes memory)" - } - }, - "id": 1112, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1728:47:9", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - "functionReturnParameters": 1105, - "id": 1113, - "nodeType": "Return", - "src": "1721:54:9" - } - ] - }, - "id": 1115, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "encodePayload", - "nameLocation": "1637:13:9", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1102, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1101, - "mutability": "mutable", - "name": "_packet", - "nameLocation": "1665:7:9", - "nodeType": "VariableDeclaration", - "scope": 1115, - "src": "1651:21:9", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Packet_$796_memory_ptr", - "typeString": "struct Packet" - }, - "typeName": { - "id": 1100, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 1099, - "name": "Packet", - "nameLocations": ["1651:6:9"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 796, - "src": "1651:6:9" - }, - "referencedDeclaration": 796, - "src": "1651:6:9", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Packet_$796_storage_ptr", - "typeString": "struct Packet" - } - }, - "visibility": "internal" - } - ], - "src": "1650:23:9" - }, - "returnParameters": { - "id": 1105, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1104, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 1115, - "src": "1697:12:9", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 1103, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "1697:5:9", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "1696:14:9" - }, - "scope": 1325, - "src": "1628:154:9", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 1127, - "nodeType": "Block", - "src": "1867:46:9", - "statements": [ - { - "expression": { - "baseExpression": { - "id": 1122, - "name": "_packet", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1117, - "src": "1884:7:9", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - }, - "endExpression": { - "id": 1124, - "name": "GUID_OFFSET", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1037, - "src": "1894:11:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1125, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexRangeAccess", - "src": "1884:22:9", - "startExpression": { - "hexValue": "30", - "id": 1123, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1892:1:9", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr_slice", - "typeString": "bytes calldata slice" - } - }, - "functionReturnParameters": 1121, - "id": 1126, - "nodeType": "Return", - "src": "1877:29:9" - } - ] - }, - "id": 1128, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "header", - "nameLocation": "1797:6:9", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1118, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1117, - "mutability": "mutable", - "name": "_packet", - "nameLocation": "1819:7:9", - "nodeType": "VariableDeclaration", - "scope": 1128, - "src": "1804:22:9", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 1116, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "1804:5:9", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "1803:24:9" - }, - "returnParameters": { - "id": 1121, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1120, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 1128, - "src": "1851:14:9", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 1119, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "1851:5:9", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "1850:16:9" - }, - "scope": 1325, - "src": "1788:125:9", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 1146, - "nodeType": "Block", - "src": "1990:82:9", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "baseExpression": { - "id": 1139, - "name": "_packet", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1130, - "src": "2020:7:9", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - }, - "endExpression": { - "id": 1141, - "name": "NONCE_OFFSET", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1022, - "src": "2050:12:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1142, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexRangeAccess", - "src": "2020:43:9", - "startExpression": { - "id": 1140, - "name": "PACKET_VERSION_OFFSET", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1019, - "src": "2028:21:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr_slice", - "typeString": "bytes calldata slice" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_calldata_ptr_slice", - "typeString": "bytes calldata slice" - } - ], - "id": 1138, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2013:6:9", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_bytes1_$", - "typeString": "type(bytes1)" - }, - "typeName": { - "id": 1137, - "name": "bytes1", - "nodeType": "ElementaryTypeName", - "src": "2013:6:9", - "typeDescriptions": {} - } - }, - "id": 1143, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2013:51:9", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes1", - "typeString": "bytes1" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes1", - "typeString": "bytes1" - } - ], - "id": 1136, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2007:5:9", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint8_$", - "typeString": "type(uint8)" - }, - "typeName": { - "id": 1135, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "2007:5:9", - "typeDescriptions": {} - } - }, - "id": 1144, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2007:58:9", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "functionReturnParameters": 1134, - "id": 1145, - "nodeType": "Return", - "src": "2000:65:9" - } - ] - }, - "id": 1147, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "version", - "nameLocation": "1928:7:9", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1131, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1130, - "mutability": "mutable", - "name": "_packet", - "nameLocation": "1951:7:9", - "nodeType": "VariableDeclaration", - "scope": 1147, - "src": "1936:22:9", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 1129, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "1936:5:9", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "1935:24:9" - }, - "returnParameters": { - "id": 1134, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1133, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 1147, - "src": "1983:5:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 1132, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "1983:5:9", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "visibility": "internal" - } - ], - "src": "1982:7:9" - }, - "scope": 1325, - "src": "1919:153:9", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 1165, - "nodeType": "Block", - "src": "2148:76:9", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "baseExpression": { - "id": 1158, - "name": "_packet", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1149, - "src": "2179:7:9", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - }, - "endExpression": { - "id": 1160, - "name": "SRC_EID_OFFSET", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1025, - "src": "2200:14:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1161, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexRangeAccess", - "src": "2179:36:9", - "startExpression": { - "id": 1159, - "name": "NONCE_OFFSET", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1022, - "src": "2187:12:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr_slice", - "typeString": "bytes calldata slice" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_calldata_ptr_slice", - "typeString": "bytes calldata slice" - } - ], - "id": 1157, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2172:6:9", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_bytes8_$", - "typeString": "type(bytes8)" - }, - "typeName": { - "id": 1156, - "name": "bytes8", - "nodeType": "ElementaryTypeName", - "src": "2172:6:9", - "typeDescriptions": {} - } - }, - "id": 1162, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2172:44:9", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes8", - "typeString": "bytes8" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes8", - "typeString": "bytes8" - } - ], - "id": 1155, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2165:6:9", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint64_$", - "typeString": "type(uint64)" - }, - "typeName": { - "id": 1154, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "2165:6:9", - "typeDescriptions": {} - } - }, - "id": 1163, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2165:52:9", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "functionReturnParameters": 1153, - "id": 1164, - "nodeType": "Return", - "src": "2158:59:9" - } - ] - }, - "id": 1166, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "nonce", - "nameLocation": "2087:5:9", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1150, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1149, - "mutability": "mutable", - "name": "_packet", - "nameLocation": "2108:7:9", - "nodeType": "VariableDeclaration", - "scope": 1166, - "src": "2093:22:9", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 1148, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "2093:5:9", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "2092:24:9" - }, - "returnParameters": { - "id": 1153, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1152, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 1166, - "src": "2140:6:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "typeName": { - "id": 1151, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "2140:6:9", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "visibility": "internal" - } - ], - "src": "2139:8:9" - }, - "scope": 1325, - "src": "2078:146:9", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 1184, - "nodeType": "Block", - "src": "2301:77:9", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "baseExpression": { - "id": 1177, - "name": "_packet", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1168, - "src": "2332:7:9", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - }, - "endExpression": { - "id": 1179, - "name": "SENDER_OFFSET", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1028, - "src": "2355:13:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1180, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexRangeAccess", - "src": "2332:37:9", - "startExpression": { - "id": 1178, - "name": "SRC_EID_OFFSET", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1025, - "src": "2340:14:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr_slice", - "typeString": "bytes calldata slice" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_calldata_ptr_slice", - "typeString": "bytes calldata slice" - } - ], - "id": 1176, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2325:6:9", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_bytes4_$", - "typeString": "type(bytes4)" - }, - "typeName": { - "id": 1175, - "name": "bytes4", - "nodeType": "ElementaryTypeName", - "src": "2325:6:9", - "typeDescriptions": {} - } - }, - "id": 1181, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2325:45:9", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes4", - "typeString": "bytes4" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes4", - "typeString": "bytes4" - } - ], - "id": 1174, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2318:6:9", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint32_$", - "typeString": "type(uint32)" - }, - "typeName": { - "id": 1173, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "2318:6:9", - "typeDescriptions": {} - } - }, - "id": 1182, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2318:53:9", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "functionReturnParameters": 1172, - "id": 1183, - "nodeType": "Return", - "src": "2311:60:9" - } - ] - }, - "id": 1185, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "srcEid", - "nameLocation": "2239:6:9", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1169, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1168, - "mutability": "mutable", - "name": "_packet", - "nameLocation": "2261:7:9", - "nodeType": "VariableDeclaration", - "scope": 1185, - "src": "2246:22:9", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 1167, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "2246:5:9", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "2245:24:9" - }, - "returnParameters": { - "id": 1172, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1171, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 1185, - "src": "2293:6:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 1170, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "2293:6:9", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - } - ], - "src": "2292:8:9" - }, - "scope": 1325, - "src": "2230:148:9", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 1200, - "nodeType": "Block", - "src": "2456:70:9", - "statements": [ - { - "expression": { - "arguments": [ - { - "baseExpression": { - "id": 1194, - "name": "_packet", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1187, - "src": "2481:7:9", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - }, - "endExpression": { - "id": 1196, - "name": "DST_EID_OFFSET", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1031, - "src": "2503:14:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1197, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexRangeAccess", - "src": "2481:37:9", - "startExpression": { - "id": 1195, - "name": "SENDER_OFFSET", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1028, - "src": "2489:13:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr_slice", - "typeString": "bytes calldata slice" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_calldata_ptr_slice", - "typeString": "bytes calldata slice" - } - ], - "id": 1193, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2473:7:9", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_bytes32_$", - "typeString": "type(bytes32)" - }, - "typeName": { - "id": 1192, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "2473:7:9", - "typeDescriptions": {} - } - }, - "id": 1198, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2473:46:9", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "functionReturnParameters": 1191, - "id": 1199, - "nodeType": "Return", - "src": "2466:53:9" - } - ] - }, - "id": 1201, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "sender", - "nameLocation": "2393:6:9", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1188, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1187, - "mutability": "mutable", - "name": "_packet", - "nameLocation": "2415:7:9", - "nodeType": "VariableDeclaration", - "scope": 1201, - "src": "2400:22:9", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 1186, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "2400:5:9", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "2399:24:9" - }, - "returnParameters": { - "id": 1191, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1190, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 1201, - "src": "2447:7:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 1189, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "2447:7:9", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "2446:9:9" - }, - "scope": 1325, - "src": "2384:142:9", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 1214, - "nodeType": "Block", - "src": "2614:51:9", - "statements": [ - { - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "arguments": [ - { - "id": 1209, - "name": "_packet", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1203, - "src": "2638:7:9", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - ], - "id": 1208, - "name": "sender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1201, - "src": "2631:6:9", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_bytes_calldata_ptr_$returns$_t_bytes32_$", - "typeString": "function (bytes calldata) pure returns (bytes32)" - } - }, - "id": 1210, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2631:15:9", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "id": 1211, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2647:9:9", - "memberName": "toAddress", - "nodeType": "MemberAccess", - "referencedDeclaration": 974, - "src": "2631:25:9", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_address_$attached_to$_t_bytes32_$", - "typeString": "function (bytes32) pure returns (address)" - } - }, - "id": 1212, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2631:27:9", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "functionReturnParameters": 1207, - "id": 1213, - "nodeType": "Return", - "src": "2624:34:9" - } - ] - }, - "id": 1215, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "senderAddressB20", - "nameLocation": "2541:16:9", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1204, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1203, - "mutability": "mutable", - "name": "_packet", - "nameLocation": "2573:7:9", - "nodeType": "VariableDeclaration", - "scope": 1215, - "src": "2558:22:9", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 1202, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "2558:5:9", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "2557:24:9" - }, - "returnParameters": { - "id": 1207, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1206, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 1215, - "src": "2605:7:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1205, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2605:7:9", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "2604:9:9" - }, - "scope": 1325, - "src": "2532:133:9", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 1233, - "nodeType": "Block", - "src": "2742:79:9", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "baseExpression": { - "id": 1226, - "name": "_packet", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1217, - "src": "2773:7:9", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - }, - "endExpression": { - "id": 1228, - "name": "RECEIVER_OFFSET", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1034, - "src": "2796:15:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1229, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexRangeAccess", - "src": "2773:39:9", - "startExpression": { - "id": 1227, - "name": "DST_EID_OFFSET", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1031, - "src": "2781:14:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr_slice", - "typeString": "bytes calldata slice" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_calldata_ptr_slice", - "typeString": "bytes calldata slice" - } - ], - "id": 1225, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2766:6:9", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_bytes4_$", - "typeString": "type(bytes4)" - }, - "typeName": { - "id": 1224, - "name": "bytes4", - "nodeType": "ElementaryTypeName", - "src": "2766:6:9", - "typeDescriptions": {} - } - }, - "id": 1230, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2766:47:9", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes4", - "typeString": "bytes4" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes4", - "typeString": "bytes4" - } - ], - "id": 1223, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2759:6:9", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint32_$", - "typeString": "type(uint32)" - }, - "typeName": { - "id": 1222, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "2759:6:9", - "typeDescriptions": {} - } - }, - "id": 1231, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2759:55:9", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "functionReturnParameters": 1221, - "id": 1232, - "nodeType": "Return", - "src": "2752:62:9" - } - ] - }, - "id": 1234, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "dstEid", - "nameLocation": "2680:6:9", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1218, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1217, - "mutability": "mutable", - "name": "_packet", - "nameLocation": "2702:7:9", - "nodeType": "VariableDeclaration", - "scope": 1234, - "src": "2687:22:9", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 1216, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "2687:5:9", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "2686:24:9" - }, - "returnParameters": { - "id": 1221, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1220, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 1234, - "src": "2734:6:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 1219, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "2734:6:9", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - } - ], - "src": "2733:8:9" - }, - "scope": 1325, - "src": "2671:150:9", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 1249, - "nodeType": "Block", - "src": "2901:69:9", - "statements": [ - { - "expression": { - "arguments": [ - { - "baseExpression": { - "id": 1243, - "name": "_packet", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1236, - "src": "2926:7:9", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - }, - "endExpression": { - "id": 1245, - "name": "GUID_OFFSET", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1037, - "src": "2950:11:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1246, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexRangeAccess", - "src": "2926:36:9", - "startExpression": { - "id": 1244, - "name": "RECEIVER_OFFSET", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1034, - "src": "2934:15:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr_slice", - "typeString": "bytes calldata slice" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_calldata_ptr_slice", - "typeString": "bytes calldata slice" - } - ], - "id": 1242, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2918:7:9", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_bytes32_$", - "typeString": "type(bytes32)" - }, - "typeName": { - "id": 1241, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "2918:7:9", - "typeDescriptions": {} - } - }, - "id": 1247, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2918:45:9", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "functionReturnParameters": 1240, - "id": 1248, - "nodeType": "Return", - "src": "2911:52:9" - } - ] - }, - "id": 1250, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "receiver", - "nameLocation": "2836:8:9", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1237, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1236, - "mutability": "mutable", - "name": "_packet", - "nameLocation": "2860:7:9", - "nodeType": "VariableDeclaration", - "scope": 1250, - "src": "2845:22:9", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 1235, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "2845:5:9", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "2844:24:9" - }, - "returnParameters": { - "id": 1240, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1239, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 1250, - "src": "2892:7:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 1238, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "2892:7:9", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "2891:9:9" - }, - "scope": 1325, - "src": "2827:143:9", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 1263, - "nodeType": "Block", - "src": "3053:53:9", - "statements": [ - { - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "arguments": [ - { - "id": 1258, - "name": "_packet", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1252, - "src": "3079:7:9", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - ], - "id": 1257, - "name": "receiver", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1250, - "src": "3070:8:9", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_bytes_calldata_ptr_$returns$_t_bytes32_$", - "typeString": "function (bytes calldata) pure returns (bytes32)" - } - }, - "id": 1259, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3070:17:9", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "id": 1260, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3088:9:9", - "memberName": "toAddress", - "nodeType": "MemberAccess", - "referencedDeclaration": 974, - "src": "3070:27:9", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_address_$attached_to$_t_bytes32_$", - "typeString": "function (bytes32) pure returns (address)" - } - }, - "id": 1261, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3070:29:9", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "functionReturnParameters": 1256, - "id": 1262, - "nodeType": "Return", - "src": "3063:36:9" - } - ] - }, - "id": 1264, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "receiverB20", - "nameLocation": "2985:11:9", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1253, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1252, - "mutability": "mutable", - "name": "_packet", - "nameLocation": "3012:7:9", - "nodeType": "VariableDeclaration", - "scope": 1264, - "src": "2997:22:9", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 1251, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "2997:5:9", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "2996:24:9" - }, - "returnParameters": { - "id": 1256, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1255, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 1264, - "src": "3044:7:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1254, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3044:7:9", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "3043:9:9" - }, - "scope": 1325, - "src": "2976:130:9", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 1279, - "nodeType": "Block", - "src": "3182:68:9", - "statements": [ - { - "expression": { - "arguments": [ - { - "baseExpression": { - "id": 1273, - "name": "_packet", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1266, - "src": "3207:7:9", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - }, - "endExpression": { - "id": 1275, - "name": "MESSAGE_OFFSET", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1040, - "src": "3227:14:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 1276, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexRangeAccess", - "src": "3207:35:9", - "startExpression": { - "id": 1274, - "name": "GUID_OFFSET", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1037, - "src": "3215:11:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr_slice", - "typeString": "bytes calldata slice" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_calldata_ptr_slice", - "typeString": "bytes calldata slice" - } - ], - "id": 1272, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "3199:7:9", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_bytes32_$", - "typeString": "type(bytes32)" - }, - "typeName": { - "id": 1271, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "3199:7:9", - "typeDescriptions": {} - } - }, - "id": 1277, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3199:44:9", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "functionReturnParameters": 1270, - "id": 1278, - "nodeType": "Return", - "src": "3192:51:9" - } - ] - }, - "id": 1280, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "guid", - "nameLocation": "3121:4:9", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1267, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1266, - "mutability": "mutable", - "name": "_packet", - "nameLocation": "3141:7:9", - "nodeType": "VariableDeclaration", - "scope": 1280, - "src": "3126:22:9", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 1265, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "3126:5:9", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "3125:24:9" - }, - "returnParameters": { - "id": 1270, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1269, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 1280, - "src": "3173:7:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 1268, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "3173:7:9", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "3172:9:9" - }, - "scope": 1325, - "src": "3112:138:9", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 1294, - "nodeType": "Block", - "src": "3336:55:9", - "statements": [ - { - "expression": { - "arguments": [ - { - "baseExpression": { - "id": 1289, - "name": "_packet", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1282, - "src": "3359:7:9", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - }, - "id": 1291, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexRangeAccess", - "src": "3359:24:9", - "startExpression": { - "id": 1290, - "name": "MESSAGE_OFFSET", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1040, - "src": "3367:14:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr_slice", - "typeString": "bytes calldata slice" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_calldata_ptr_slice", - "typeString": "bytes calldata slice" - } - ], - "id": 1288, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "3353:5:9", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_bytes_storage_ptr_$", - "typeString": "type(bytes storage pointer)" - }, - "typeName": { - "id": 1287, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "3353:5:9", - "typeDescriptions": {} - } - }, - "id": 1292, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3353:31:9", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - }, - "functionReturnParameters": 1286, - "id": 1293, - "nodeType": "Return", - "src": "3346:38:9" - } - ] - }, - "id": 1295, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "message", - "nameLocation": "3265:7:9", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1283, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1282, - "mutability": "mutable", - "name": "_packet", - "nameLocation": "3288:7:9", - "nodeType": "VariableDeclaration", - "scope": 1295, - "src": "3273:22:9", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 1281, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "3273:5:9", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "3272:24:9" - }, - "returnParameters": { - "id": 1286, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1285, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 1295, - "src": "3320:14:9", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 1284, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "3320:5:9", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "3319:16:9" - }, - "scope": 1325, - "src": "3256:135:9", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 1309, - "nodeType": "Block", - "src": "3477:52:9", - "statements": [ - { - "expression": { - "arguments": [ - { - "baseExpression": { - "id": 1304, - "name": "_packet", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1297, - "src": "3500:7:9", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - }, - "id": 1306, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexRangeAccess", - "src": "3500:21:9", - "startExpression": { - "id": 1305, - "name": "GUID_OFFSET", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1037, - "src": "3508:11:9", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr_slice", - "typeString": "bytes calldata slice" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_calldata_ptr_slice", - "typeString": "bytes calldata slice" - } - ], - "id": 1303, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "3494:5:9", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_bytes_storage_ptr_$", - "typeString": "type(bytes storage pointer)" - }, - "typeName": { - "id": 1302, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "3494:5:9", - "typeDescriptions": {} - } - }, - "id": 1307, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3494:28:9", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - }, - "functionReturnParameters": 1301, - "id": 1308, - "nodeType": "Return", - "src": "3487:35:9" - } - ] - }, - "id": 1310, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "payload", - "nameLocation": "3406:7:9", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1298, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1297, - "mutability": "mutable", - "name": "_packet", - "nameLocation": "3429:7:9", - "nodeType": "VariableDeclaration", - "scope": 1310, - "src": "3414:22:9", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 1296, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "3414:5:9", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "3413:24:9" - }, - "returnParameters": { - "id": 1301, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1300, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 1310, - "src": "3461:14:9", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 1299, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "3461:5:9", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "3460:16:9" - }, - "scope": 1325, - "src": "3397:132:9", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 1323, - "nodeType": "Block", - "src": "3612:51:9", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "id": 1319, - "name": "_packet", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1312, - "src": "3647:7:9", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - ], - "id": 1318, - "name": "payload", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1310, - "src": "3639:7:9", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_bytes_calldata_ptr_$returns$_t_bytes_calldata_ptr_$", - "typeString": "function (bytes calldata) pure returns (bytes calldata)" - } - }, - "id": 1320, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3639:16:9", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - ], - "id": 1317, - "name": "keccak256", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967288, - "src": "3629:9:9", - "typeDescriptions": { - "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", - "typeString": "function (bytes memory) pure returns (bytes32)" - } - }, - "id": 1321, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3629:27:9", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "functionReturnParameters": 1316, - "id": 1322, - "nodeType": "Return", - "src": "3622:34:9" - } - ] - }, - "id": 1324, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "payloadHash", - "nameLocation": "3544:11:9", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1313, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1312, - "mutability": "mutable", - "name": "_packet", - "nameLocation": "3571:7:9", - "nodeType": "VariableDeclaration", - "scope": 1324, - "src": "3556:22:9", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 1311, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "3556:5:9", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "3555:24:9" - }, - "returnParameters": { - "id": 1316, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1315, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 1324, - "src": "3603:7:9", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 1314, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "3603:7:9", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "3602:9:9" - }, - "scope": 1325, - "src": "3535:128:9", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - } - ], - "scope": 1326, - "src": "179:3486:9", - "usedErrors": [], - "usedEvents": [] - } - ], - "src": "38:3628:9" - }, - "id": 9 - }, - "@layerzerolabs/oapp-evm/contracts/oapp/OApp.sol": { - "ast": { - "absolutePath": "@layerzerolabs/oapp-evm/contracts/oapp/OApp.sol", - "exportedSymbols": { - "MessagingFee": [33], - "MessagingReceipt": [28], - "OApp": [1371], - "OAppCore": [1501], - "OAppReceiver": [1653], - "OAppSender": [1839], - "Origin": [40] - }, - "id": 1372, - "license": "MIT", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 1327, - "literals": ["solidity", "^", "0.8", ".20"], - "nodeType": "PragmaDirective", - "src": "33:24:10" - }, - { - "absolutePath": "@layerzerolabs/oapp-evm/contracts/oapp/OAppSender.sol", - "file": "./OAppSender.sol", - "id": 1331, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 1372, - "sourceUnit": 1840, - "src": "199:78:10", - "symbolAliases": [ - { - "foreign": { - "id": 1328, - "name": "OAppSender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1839, - "src": "208:10:10", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - }, - { - "foreign": { - "id": 1329, - "name": "MessagingFee", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 33, - "src": "220:12:10", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - }, - { - "foreign": { - "id": 1330, - "name": "MessagingReceipt", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 28, - "src": "234:16:10", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "@layerzerolabs/oapp-evm/contracts/oapp/OAppReceiver.sol", - "file": "./OAppReceiver.sol", - "id": 1334, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 1372, - "sourceUnit": 1654, - "src": "389:58:10", - "symbolAliases": [ - { - "foreign": { - "id": 1332, - "name": "OAppReceiver", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1653, - "src": "398:12:10", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - }, - { - "foreign": { - "id": 1333, - "name": "Origin", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 40, - "src": "412:6:10", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "@layerzerolabs/oapp-evm/contracts/oapp/OAppCore.sol", - "file": "./OAppCore.sol", - "id": 1336, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 1372, - "sourceUnit": 1502, - "src": "448:42:10", - "symbolAliases": [ - { - "foreign": { - "id": 1335, - "name": "OAppCore", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1501, - "src": "457:8:10", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "abstract": true, - "baseContracts": [ - { - "baseName": { - "id": 1338, - "name": "OAppSender", - "nameLocations": ["665:10:10"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 1839, - "src": "665:10:10" - }, - "id": 1339, - "nodeType": "InheritanceSpecifier", - "src": "665:10:10" - }, - { - "baseName": { - "id": 1340, - "name": "OAppReceiver", - "nameLocations": ["677:12:10"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 1653, - "src": "677:12:10" - }, - "id": 1341, - "nodeType": "InheritanceSpecifier", - "src": "677:12:10" - } - ], - "canonicalName": "OApp", - "contractDependencies": [], - "contractKind": "contract", - "documentation": { - "id": 1337, - "nodeType": "StructuredDocumentation", - "src": "492:146:10", - "text": " @title OApp\n @dev Abstract contract serving as the base for OApp implementation, combining OAppSender and OAppReceiver functionality." - }, - "fullyImplemented": false, - "id": 1371, - "linearizedBaseContracts": [ - 1371, 1653, 1839, 1501, 3976, 5522, 1902, 1985, 238 - ], - "name": "OApp", - "nameLocation": "657:4:10", - "nodeType": "ContractDefinition", - "nodes": [ - { - "body": { - "id": 1353, - "nodeType": "Block", - "src": "1046:2:10", - "statements": [] - }, - "documentation": { - "id": 1342, - "nodeType": "StructuredDocumentation", - "src": "696:264:10", - "text": " @dev Constructor to initialize the OApp with the provided endpoint and owner.\n @param _endpoint The address of the LOCAL LayerZero endpoint.\n @param _delegate The delegate capable of making OApp configurations inside of the endpoint." - }, - "id": 1354, - "implemented": true, - "kind": "constructor", - "modifiers": [ - { - "arguments": [ - { - "id": 1349, - "name": "_endpoint", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1344, - "src": "1024:9:10", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 1350, - "name": "_delegate", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1346, - "src": "1035:9:10", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "id": 1351, - "kind": "baseConstructorSpecifier", - "modifierName": { - "id": 1348, - "name": "OAppCore", - "nameLocations": ["1015:8:10"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 1501, - "src": "1015:8:10" - }, - "nodeType": "ModifierInvocation", - "src": "1015:30:10" - } - ], - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1347, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1344, - "mutability": "mutable", - "name": "_endpoint", - "nameLocation": "985:9:10", - "nodeType": "VariableDeclaration", - "scope": 1354, - "src": "977:17:10", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1343, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "977:7:10", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1346, - "mutability": "mutable", - "name": "_delegate", - "nameLocation": "1004:9:10", - "nodeType": "VariableDeclaration", - "scope": 1354, - "src": "996:17:10", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1345, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "996:7:10", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "976:38:10" - }, - "returnParameters": { - "id": 1352, - "nodeType": "ParameterList", - "parameters": [], - "src": "1046:0:10" - }, - "scope": 1371, - "src": "965:83:10", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "baseFunctions": [1533, 1693], - "body": { - "id": 1369, - "nodeType": "Block", - "src": "1464:58:10", - "statements": [ - { - "expression": { - "components": [ - { - "id": 1365, - "name": "SENDER_VERSION", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1680, - "src": "1482:14:10", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - { - "id": 1366, - "name": "RECEIVER_VERSION", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1520, - "src": "1498:16:10", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - } - ], - "id": 1367, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "1481:34:10", - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_uint64_$_t_uint64_$", - "typeString": "tuple(uint64,uint64)" - } - }, - "functionReturnParameters": 1364, - "id": 1368, - "nodeType": "Return", - "src": "1474:41:10" - } - ] - }, - "documentation": { - "id": 1355, - "nodeType": "StructuredDocumentation", - "src": "1054:228:10", - "text": " @notice Retrieves the OApp version information.\n @return senderVersion The version of the OAppSender.sol implementation.\n @return receiverVersion The version of the OAppReceiver.sol implementation." - }, - "functionSelector": "17442b70", - "id": 1370, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "oAppVersion", - "nameLocation": "1296:11:10", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 1359, - "nodeType": "OverrideSpecifier", - "overrides": [ - { - "id": 1357, - "name": "OAppSender", - "nameLocations": ["1371:10:10"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 1839, - "src": "1371:10:10" - }, - { - "id": 1358, - "name": "OAppReceiver", - "nameLocations": ["1383:12:10"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 1653, - "src": "1383:12:10" - } - ], - "src": "1362:34:10" - }, - "parameters": { - "id": 1356, - "nodeType": "ParameterList", - "parameters": [], - "src": "1307:2:10" - }, - "returnParameters": { - "id": 1364, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1361, - "mutability": "mutable", - "name": "senderVersion", - "nameLocation": "1421:13:10", - "nodeType": "VariableDeclaration", - "scope": 1370, - "src": "1414:20:10", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "typeName": { - "id": 1360, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "1414:6:10", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1363, - "mutability": "mutable", - "name": "receiverVersion", - "nameLocation": "1443:15:10", - "nodeType": "VariableDeclaration", - "scope": 1370, - "src": "1436:22:10", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "typeName": { - "id": 1362, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "1436:6:10", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "visibility": "internal" - } - ], - "src": "1413:46:10" - }, - "scope": 1371, - "src": "1287:235:10", - "stateMutability": "pure", - "virtual": true, - "visibility": "public" - } - ], - "scope": 1372, - "src": "639:885:10", - "usedErrors": [ - 1517, 1675, 1677, 1850, 1854, 1856, 1858, 3842, 3847 - ], - "usedEvents": [1864, 3853] - } - ], - "src": "33:1492:10" - }, - "id": 10 - }, - "@layerzerolabs/oapp-evm/contracts/oapp/OAppCore.sol": { - "ast": { - "absolutePath": "@layerzerolabs/oapp-evm/contracts/oapp/OAppCore.sol", - "exportedSymbols": { - "ILayerZeroEndpointV2": [202], - "IOAppCore": [1902], - "OAppCore": [1501], - "Ownable": [3976] - }, - "id": 1502, - "license": "MIT", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 1373, - "literals": ["solidity", "^", "0.8", ".20"], - "nodeType": "PragmaDirective", - "src": "33:24:11" - }, - { - "absolutePath": "@openzeppelin/contracts/access/Ownable.sol", - "file": "@openzeppelin/contracts/access/Ownable.sol", - "id": 1375, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 1502, - "sourceUnit": 3977, - "src": "59:69:11", - "symbolAliases": [ - { - "foreign": { - "id": 1374, - "name": "Ownable", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3976, - "src": "68:7:11", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppCore.sol", - "file": "./interfaces/IOAppCore.sol", - "id": 1378, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 1502, - "sourceUnit": 1903, - "src": "129:77:11", - "symbolAliases": [ - { - "foreign": { - "id": 1376, - "name": "IOAppCore", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1902, - "src": "138:9:11", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - }, - { - "foreign": { - "id": 1377, - "name": "ILayerZeroEndpointV2", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 202, - "src": "149:20:11", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "abstract": true, - "baseContracts": [ - { - "baseName": { - "id": 1380, - "name": "IOAppCore", - "nameLocations": ["360:9:11"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 1902, - "src": "360:9:11" - }, - "id": 1381, - "nodeType": "InheritanceSpecifier", - "src": "360:9:11" - }, - { - "baseName": { - "id": 1382, - "name": "Ownable", - "nameLocations": ["371:7:11"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 3976, - "src": "371:7:11" - }, - "id": 1383, - "nodeType": "InheritanceSpecifier", - "src": "371:7:11" - } - ], - "canonicalName": "OAppCore", - "contractDependencies": [], - "contractKind": "contract", - "documentation": { - "id": 1379, - "nodeType": "StructuredDocumentation", - "src": "208:121:11", - "text": " @title OAppCore\n @dev Abstract contract implementing the IOAppCore interface with basic OApp configurations." - }, - "fullyImplemented": false, - "id": 1501, - "linearizedBaseContracts": [1501, 3976, 5522, 1902], - "name": "OAppCore", - "nameLocation": "348:8:11", - "nodeType": "ContractDefinition", - "nodes": [ - { - "baseFunctions": [1879], - "constant": false, - "functionSelector": "5e280f11", - "id": 1386, - "mutability": "immutable", - "name": "endpoint", - "nameLocation": "484:8:11", - "nodeType": "VariableDeclaration", - "scope": 1501, - "src": "446:46:11", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ILayerZeroEndpointV2_$202", - "typeString": "contract ILayerZeroEndpointV2" - }, - "typeName": { - "id": 1385, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 1384, - "name": "ILayerZeroEndpointV2", - "nameLocations": ["446:20:11"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 202, - "src": "446:20:11" - }, - "referencedDeclaration": 202, - "src": "446:20:11", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ILayerZeroEndpointV2_$202", - "typeString": "contract ILayerZeroEndpointV2" - } - }, - "visibility": "public" - }, - { - "baseFunctions": [1887], - "constant": false, - "functionSelector": "bb0b6a53", - "id": 1390, - "mutability": "mutable", - "name": "peers", - "nameLocation": "612:5:11", - "nodeType": "VariableDeclaration", - "scope": 1501, - "src": "569:48:11", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_uint32_$_t_bytes32_$", - "typeString": "mapping(uint32 => bytes32)" - }, - "typeName": { - "id": 1389, - "keyName": "eid", - "keyNameLocation": "584:3:11", - "keyType": { - "id": 1387, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "577:6:11", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "nodeType": "Mapping", - "src": "569:35:11", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_uint32_$_t_bytes32_$", - "typeString": "mapping(uint32 => bytes32)" - }, - "valueName": "peer", - "valueNameLocation": "599:4:11", - "valueType": { - "id": 1388, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "591:7:11", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - }, - "visibility": "public" - }, - { - "body": { - "id": 1420, - "nodeType": "Block", - "src": "1037:164:11", - "statements": [ - { - "expression": { - "id": 1402, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 1398, - "name": "endpoint", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1386, - "src": "1047:8:11", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ILayerZeroEndpointV2_$202", - "typeString": "contract ILayerZeroEndpointV2" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 1400, - "name": "_endpoint", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1393, - "src": "1079:9:11", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 1399, - "name": "ILayerZeroEndpointV2", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 202, - "src": "1058:20:11", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_ILayerZeroEndpointV2_$202_$", - "typeString": "type(contract ILayerZeroEndpointV2)" - } - }, - "id": 1401, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1058:31:11", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_ILayerZeroEndpointV2_$202", - "typeString": "contract ILayerZeroEndpointV2" - } - }, - "src": "1047:42:11", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ILayerZeroEndpointV2_$202", - "typeString": "contract ILayerZeroEndpointV2" - } - }, - "id": 1403, - "nodeType": "ExpressionStatement", - "src": "1047:42:11" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 1409, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 1404, - "name": "_delegate", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1395, - "src": "1104:9:11", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "arguments": [ - { - "hexValue": "30", - "id": 1407, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1125:1:11", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 1406, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "1117:7:11", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 1405, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1117:7:11", - "typeDescriptions": {} - } - }, - "id": 1408, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1117:10:11", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "1104:23:11", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 1413, - "nodeType": "IfStatement", - "src": "1100:53:11", - "trueBody": { - "errorCall": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 1410, - "name": "InvalidDelegate", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1858, - "src": "1136:15:11", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 1411, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1136:17:11", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1412, - "nodeType": "RevertStatement", - "src": "1129:24:11" - } - }, - { - "expression": { - "arguments": [ - { - "id": 1417, - "name": "_delegate", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1395, - "src": "1184:9:11", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 1414, - "name": "endpoint", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1386, - "src": "1163:8:11", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ILayerZeroEndpointV2_$202", - "typeString": "contract ILayerZeroEndpointV2" - } - }, - "id": 1416, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "1172:11:11", - "memberName": "setDelegate", - "nodeType": "MemberAccess", - "referencedDeclaration": 201, - "src": "1163:20:11", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$", - "typeString": "function (address) external" - } - }, - "id": 1418, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1163:31:11", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1419, - "nodeType": "ExpressionStatement", - "src": "1163:31:11" - } - ] - }, - "documentation": { - "id": 1391, - "nodeType": "StructuredDocumentation", - "src": "624:358:11", - "text": " @dev Constructor to initialize the OAppCore with the provided endpoint and delegate.\n @param _endpoint The address of the LOCAL Layer Zero endpoint.\n @param _delegate The delegate capable of making OApp configurations inside of the endpoint.\n @dev The delegate typically should be set as the owner of the contract." - }, - "id": 1421, - "implemented": true, - "kind": "constructor", - "modifiers": [], - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1396, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1393, - "mutability": "mutable", - "name": "_endpoint", - "nameLocation": "1007:9:11", - "nodeType": "VariableDeclaration", - "scope": 1421, - "src": "999:17:11", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1392, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "999:7:11", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1395, - "mutability": "mutable", - "name": "_delegate", - "nameLocation": "1026:9:11", - "nodeType": "VariableDeclaration", - "scope": 1421, - "src": "1018:17:11", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1394, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1018:7:11", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "998:38:11" - }, - "returnParameters": { - "id": 1397, - "nodeType": "ParameterList", - "parameters": [], - "src": "1037:0:11" - }, - "scope": 1501, - "src": "987:214:11", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "baseFunctions": [1895], - "body": { - "id": 1436, - "nodeType": "Block", - "src": "1794:38:11", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 1432, - "name": "_eid", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1424, - "src": "1813:4:11", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - { - "id": 1433, - "name": "_peer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1426, - "src": "1819:5:11", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "id": 1431, - "name": "_setPeer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1457, - "src": "1804:8:11", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_uint32_$_t_bytes32_$returns$__$", - "typeString": "function (uint32,bytes32)" - } - }, - "id": 1434, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1804:21:11", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1435, - "nodeType": "ExpressionStatement", - "src": "1804:21:11" - } - ] - }, - "documentation": { - "id": 1422, - "nodeType": "StructuredDocumentation", - "src": "1207:512:11", - "text": " @notice Sets the peer address (OApp instance) for a corresponding endpoint.\n @param _eid The endpoint ID.\n @param _peer The address of the peer to be associated with the corresponding endpoint.\n @dev Only the owner/admin of the OApp can call this function.\n @dev Indicates that the peer is trusted to send LayerZero messages to this OApp.\n @dev Set this to bytes32(0) to remove the peer address.\n @dev Peer is a bytes32 to accommodate non-evm chains." - }, - "functionSelector": "3400288b", - "id": 1437, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 1429, - "kind": "modifierInvocation", - "modifierName": { - "id": 1428, - "name": "onlyOwner", - "nameLocations": ["1784:9:11"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 3887, - "src": "1784:9:11" - }, - "nodeType": "ModifierInvocation", - "src": "1784:9:11" - } - ], - "name": "setPeer", - "nameLocation": "1733:7:11", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1427, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1424, - "mutability": "mutable", - "name": "_eid", - "nameLocation": "1748:4:11", - "nodeType": "VariableDeclaration", - "scope": 1437, - "src": "1741:11:11", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 1423, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "1741:6:11", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1426, - "mutability": "mutable", - "name": "_peer", - "nameLocation": "1762:5:11", - "nodeType": "VariableDeclaration", - "scope": 1437, - "src": "1754:13:11", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 1425, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "1754:7:11", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "1740:28:11" - }, - "returnParameters": { - "id": 1430, - "nodeType": "ParameterList", - "parameters": [], - "src": "1794:0:11" - }, - "scope": 1501, - "src": "1724:108:11", - "stateMutability": "nonpayable", - "virtual": true, - "visibility": "public" - }, - { - "body": { - "id": 1456, - "nodeType": "Block", - "src": "2349:71:11", - "statements": [ - { - "expression": { - "id": 1449, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "baseExpression": { - "id": 1445, - "name": "peers", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1390, - "src": "2359:5:11", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_uint32_$_t_bytes32_$", - "typeString": "mapping(uint32 => bytes32)" - } - }, - "id": 1447, - "indexExpression": { - "id": 1446, - "name": "_eid", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1440, - "src": "2365:4:11", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "2359:11:11", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 1448, - "name": "_peer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1442, - "src": "2373:5:11", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "src": "2359:19:11", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "id": 1450, - "nodeType": "ExpressionStatement", - "src": "2359:19:11" - }, - { - "eventCall": { - "arguments": [ - { - "id": 1452, - "name": "_eid", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1440, - "src": "2401:4:11", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - { - "id": 1453, - "name": "_peer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1442, - "src": "2407:5:11", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "id": 1451, - "name": "PeerSet", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1864, - "src": "2393:7:11", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_uint32_$_t_bytes32_$returns$__$", - "typeString": "function (uint32,bytes32)" - } - }, - "id": 1454, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2393:20:11", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1455, - "nodeType": "EmitStatement", - "src": "2388:25:11" - } - ] - }, - "documentation": { - "id": 1438, - "nodeType": "StructuredDocumentation", - "src": "1838:443:11", - "text": " @notice Sets the peer address (OApp instance) for a corresponding endpoint.\n @param _eid The endpoint ID.\n @param _peer The address of the peer to be associated with the corresponding endpoint.\n @dev Indicates that the peer is trusted to send LayerZero messages to this OApp.\n @dev Set this to bytes32(0) to remove the peer address.\n @dev Peer is a bytes32 to accommodate non-evm chains." - }, - "id": 1457, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_setPeer", - "nameLocation": "2295:8:11", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1443, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1440, - "mutability": "mutable", - "name": "_eid", - "nameLocation": "2311:4:11", - "nodeType": "VariableDeclaration", - "scope": 1457, - "src": "2304:11:11", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 1439, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "2304:6:11", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1442, - "mutability": "mutable", - "name": "_peer", - "nameLocation": "2325:5:11", - "nodeType": "VariableDeclaration", - "scope": 1457, - "src": "2317:13:11", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 1441, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "2317:7:11", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "2303:28:11" - }, - "returnParameters": { - "id": 1444, - "nodeType": "ParameterList", - "parameters": [], - "src": "2349:0:11" - }, - "scope": 1501, - "src": "2286:134:11", - "stateMutability": "nonpayable", - "virtual": true, - "visibility": "internal" - }, - { - "body": { - "id": 1484, - "nodeType": "Block", - "src": "2797:117:11", - "statements": [ - { - "assignments": [1466], - "declarations": [ - { - "constant": false, - "id": 1466, - "mutability": "mutable", - "name": "peer", - "nameLocation": "2815:4:11", - "nodeType": "VariableDeclaration", - "scope": 1484, - "src": "2807:12:11", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 1465, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "2807:7:11", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "id": 1470, - "initialValue": { - "baseExpression": { - "id": 1467, - "name": "peers", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1390, - "src": "2822:5:11", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_uint32_$_t_bytes32_$", - "typeString": "mapping(uint32 => bytes32)" - } - }, - "id": 1469, - "indexExpression": { - "id": 1468, - "name": "_eid", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1460, - "src": "2828:4:11", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "2822:11:11", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "2807:26:11" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "id": 1476, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 1471, - "name": "peer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1466, - "src": "2847:4:11", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "arguments": [ - { - "hexValue": "30", - "id": 1474, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2863:1:11", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 1473, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2855:7:11", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_bytes32_$", - "typeString": "type(bytes32)" - }, - "typeName": { - "id": 1472, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "2855:7:11", - "typeDescriptions": {} - } - }, - "id": 1475, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2855:10:11", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "src": "2847:18:11", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 1481, - "nodeType": "IfStatement", - "src": "2843:43:11", - "trueBody": { - "errorCall": { - "arguments": [ - { - "id": 1478, - "name": "_eid", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1460, - "src": "2881:4:11", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - ], - "id": 1477, - "name": "NoPeer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1854, - "src": "2874:6:11", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$_t_uint32_$returns$__$", - "typeString": "function (uint32) pure" - } - }, - "id": 1479, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2874:12:11", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1480, - "nodeType": "RevertStatement", - "src": "2867:19:11" - } - }, - { - "expression": { - "id": 1482, - "name": "peer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1466, - "src": "2903:4:11", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "functionReturnParameters": 1464, - "id": 1483, - "nodeType": "Return", - "src": "2896:11:11" - } - ] - }, - "documentation": { - "id": 1458, - "nodeType": "StructuredDocumentation", - "src": "2426:287:11", - "text": " @notice Internal function to get the peer address associated with a specific endpoint; reverts if NOT set.\n ie. the peer is set to bytes32(0).\n @param _eid The endpoint ID.\n @return peer The address of the peer associated with the specified endpoint." - }, - "id": 1485, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_getPeerOrRevert", - "nameLocation": "2727:16:11", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1461, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1460, - "mutability": "mutable", - "name": "_eid", - "nameLocation": "2751:4:11", - "nodeType": "VariableDeclaration", - "scope": 1485, - "src": "2744:11:11", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 1459, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "2744:6:11", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - } - ], - "src": "2743:13:11" - }, - "returnParameters": { - "id": 1464, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1463, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 1485, - "src": "2788:7:11", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 1462, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "2788:7:11", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "2787:9:11" - }, - "scope": 1501, - "src": "2718:196:11", - "stateMutability": "view", - "virtual": true, - "visibility": "internal" - }, - { - "baseFunctions": [1901], - "body": { - "id": 1499, - "nodeType": "Block", - "src": "3309:48:11", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 1496, - "name": "_delegate", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1488, - "src": "3340:9:11", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 1493, - "name": "endpoint", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1386, - "src": "3319:8:11", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ILayerZeroEndpointV2_$202", - "typeString": "contract ILayerZeroEndpointV2" - } - }, - "id": 1495, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3328:11:11", - "memberName": "setDelegate", - "nodeType": "MemberAccess", - "referencedDeclaration": 201, - "src": "3319:20:11", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$", - "typeString": "function (address) external" - } - }, - "id": 1497, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3319:31:11", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1498, - "nodeType": "ExpressionStatement", - "src": "3319:31:11" - } - ] - }, - "documentation": { - "id": 1486, - "nodeType": "StructuredDocumentation", - "src": "2920:327:11", - "text": " @notice Sets the delegate address for the OApp.\n @param _delegate The address of the delegate to be set.\n @dev Only the owner/admin of the OApp can call this function.\n @dev Provides the ability for a delegate to set configs, on behalf of the OApp, directly on the Endpoint contract." - }, - "functionSelector": "ca5eb5e1", - "id": 1500, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 1491, - "kind": "modifierInvocation", - "modifierName": { - "id": 1490, - "name": "onlyOwner", - "nameLocations": ["3299:9:11"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 3887, - "src": "3299:9:11" - }, - "nodeType": "ModifierInvocation", - "src": "3299:9:11" - } - ], - "name": "setDelegate", - "nameLocation": "3261:11:11", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1489, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1488, - "mutability": "mutable", - "name": "_delegate", - "nameLocation": "3281:9:11", - "nodeType": "VariableDeclaration", - "scope": 1500, - "src": "3273:17:11", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1487, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3273:7:11", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "3272:19:11" - }, - "returnParameters": { - "id": 1492, - "nodeType": "ParameterList", - "parameters": [], - "src": "3309:0:11" - }, - "scope": 1501, - "src": "3252:105:11", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "public" - } - ], - "scope": 1502, - "src": "330:3029:11", - "usedErrors": [1850, 1854, 1856, 1858, 3842, 3847], - "usedEvents": [1864, 3853] - } - ], - "src": "33:3327:11" - }, - "id": 11 - }, - "@layerzerolabs/oapp-evm/contracts/oapp/OAppReceiver.sol": { - "ast": { - "absolutePath": "@layerzerolabs/oapp-evm/contracts/oapp/OAppReceiver.sol", - "exportedSymbols": { - "IOAppReceiver": [1985], - "OAppCore": [1501], - "OAppReceiver": [1653], - "Origin": [40] - }, - "id": 1654, - "license": "MIT", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 1503, - "literals": ["solidity", "^", "0.8", ".20"], - "nodeType": "PragmaDirective", - "src": "33:24:12" - }, - { - "absolutePath": "@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppReceiver.sol", - "file": "./interfaces/IOAppReceiver.sol", - "id": 1506, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 1654, - "sourceUnit": 1986, - "src": "59:71:12", - "symbolAliases": [ - { - "foreign": { - "id": 1504, - "name": "IOAppReceiver", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1985, - "src": "68:13:12", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - }, - { - "foreign": { - "id": 1505, - "name": "Origin", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 40, - "src": "83:6:12", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "@layerzerolabs/oapp-evm/contracts/oapp/OAppCore.sol", - "file": "./OAppCore.sol", - "id": 1508, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 1654, - "sourceUnit": 1502, - "src": "131:42:12", - "symbolAliases": [ - { - "foreign": { - "id": 1507, - "name": "OAppCore", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1501, - "src": "140:8:12", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "abstract": true, - "baseContracts": [ - { - "baseName": { - "id": 1510, - "name": "IOAppReceiver", - "nameLocations": ["355:13:12"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 1985, - "src": "355:13:12" - }, - "id": 1511, - "nodeType": "InheritanceSpecifier", - "src": "355:13:12" - }, - { - "baseName": { - "id": 1512, - "name": "OAppCore", - "nameLocations": ["370:8:12"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 1501, - "src": "370:8:12" - }, - "id": 1513, - "nodeType": "InheritanceSpecifier", - "src": "370:8:12" - } - ], - "canonicalName": "OAppReceiver", - "contractDependencies": [], - "contractKind": "contract", - "documentation": { - "id": 1509, - "nodeType": "StructuredDocumentation", - "src": "175:145:12", - "text": " @title OAppReceiver\n @dev Abstract contract implementing the ILayerZeroReceiver interface and extending OAppCore for OApp receivers." - }, - "fullyImplemented": false, - "id": 1653, - "linearizedBaseContracts": [ - 1653, 1501, 3976, 5522, 1902, 1985, 238 - ], - "name": "OAppReceiver", - "nameLocation": "339:12:12", - "nodeType": "ContractDefinition", - "nodes": [ - { - "errorSelector": "91ac5e4f", - "id": 1517, - "name": "OnlyEndpoint", - "nameLocation": "471:12:12", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 1516, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1515, - "mutability": "mutable", - "name": "addr", - "nameLocation": "492:4:12", - "nodeType": "VariableDeclaration", - "scope": 1517, - "src": "484:12:12", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1514, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "484:7:12", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "483:14:12" - }, - "src": "465:33:12" - }, - { - "constant": true, - "id": 1520, - "mutability": "constant", - "name": "RECEIVER_VERSION", - "nameLocation": "659:16:12", - "nodeType": "VariableDeclaration", - "scope": 1653, - "src": "634:45:12", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "typeName": { - "id": 1518, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "634:6:12", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "value": { - "hexValue": "32", - "id": 1519, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "678:1:12", - "typeDescriptions": { - "typeIdentifier": "t_rational_2_by_1", - "typeString": "int_const 2" - }, - "value": "2" - }, - "visibility": "internal" - }, - { - "baseFunctions": [1872], - "body": { - "id": 1532, - "nodeType": "Block", - "src": "1291:45:12", - "statements": [ - { - "expression": { - "components": [ - { - "hexValue": "30", - "id": 1528, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1309:1:12", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - { - "id": 1529, - "name": "RECEIVER_VERSION", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1520, - "src": "1312:16:12", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - } - ], - "id": 1530, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "1308:21:12", - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_rational_0_by_1_$_t_uint64_$", - "typeString": "tuple(int_const 0,uint64)" - } - }, - "functionReturnParameters": 1527, - "id": 1531, - "nodeType": "Return", - "src": "1301:28:12" - } - ] - }, - "documentation": { - "id": 1521, - "nodeType": "StructuredDocumentation", - "src": "686:502:12", - "text": " @notice Retrieves the OApp version information.\n @return senderVersion The version of the OAppSender.sol contract.\n @return receiverVersion The version of the OAppReceiver.sol contract.\n @dev Providing 0 as the default for OAppSender version. Indicates that the OAppSender is not implemented.\n ie. this is a RECEIVE only OApp.\n @dev If the OApp uses both OAppSender and OAppReceiver, then this needs to be override returning the correct versions." - }, - "functionSelector": "17442b70", - "id": 1533, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "oAppVersion", - "nameLocation": "1202:11:12", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1522, - "nodeType": "ParameterList", - "parameters": [], - "src": "1213:2:12" - }, - "returnParameters": { - "id": 1527, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1524, - "mutability": "mutable", - "name": "senderVersion", - "nameLocation": "1252:13:12", - "nodeType": "VariableDeclaration", - "scope": 1533, - "src": "1245:20:12", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "typeName": { - "id": 1523, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "1245:6:12", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1526, - "mutability": "mutable", - "name": "receiverVersion", - "nameLocation": "1274:15:12", - "nodeType": "VariableDeclaration", - "scope": 1533, - "src": "1267:22:12", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "typeName": { - "id": 1525, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "1267:6:12", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "visibility": "internal" - } - ], - "src": "1244:46:12" - }, - "scope": 1653, - "src": "1193:143:12", - "stateMutability": "view", - "virtual": true, - "visibility": "public" - }, - { - "baseFunctions": [1984], - "body": { - "id": 1553, - "nodeType": "Block", - "src": "2181:48:12", - "statements": [ - { - "expression": { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 1551, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 1546, - "name": "_sender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1541, - "src": "2198:7:12", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "arguments": [ - { - "id": 1549, - "name": "this", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967268, - "src": "2217:4:12", - "typeDescriptions": { - "typeIdentifier": "t_contract$_OAppReceiver_$1653", - "typeString": "contract OAppReceiver" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_OAppReceiver_$1653", - "typeString": "contract OAppReceiver" - } - ], - "id": 1548, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2209:7:12", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 1547, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2209:7:12", - "typeDescriptions": {} - } - }, - "id": 1550, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2209:13:12", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "2198:24:12", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "functionReturnParameters": 1545, - "id": 1552, - "nodeType": "Return", - "src": "2191:31:12" - } - ] - }, - "documentation": { - "id": 1534, - "nodeType": "StructuredDocumentation", - "src": "1342:666:12", - "text": " @notice Indicates whether an address is an approved composeMsg sender to the Endpoint.\n @dev _origin The origin information containing the source endpoint and sender address.\n - srcEid: The source chain endpoint ID.\n - sender: The sender address on the src chain.\n - nonce: The nonce of the message.\n @dev _message The lzReceive payload.\n @param _sender The sender address.\n @return isSender Is a valid sender.\n @dev Applications can optionally choose to implement separate composeMsg senders that are NOT the bridging layer.\n @dev The default sender IS the OAppReceiver implementer." - }, - "functionSelector": "82413eac", - "id": 1554, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "isComposeMsgSender", - "nameLocation": "2022:18:12", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1542, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1537, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 1554, - "src": "2050:15:12", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Origin_$40_calldata_ptr", - "typeString": "struct Origin" - }, - "typeName": { - "id": 1536, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 1535, - "name": "Origin", - "nameLocations": ["2050:6:12"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 40, - "src": "2050:6:12" - }, - "referencedDeclaration": 40, - "src": "2050:6:12", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Origin_$40_storage_ptr", - "typeString": "struct Origin" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1539, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 1554, - "src": "2087:14:12", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 1538, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "2087:5:12", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1541, - "mutability": "mutable", - "name": "_sender", - "nameLocation": "2132:7:12", - "nodeType": "VariableDeclaration", - "scope": 1554, - "src": "2124:15:12", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1540, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2124:7:12", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "2040:105:12" - }, - "returnParameters": { - "id": 1545, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1544, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 1554, - "src": "2175:4:12", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 1543, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "2175:4:12", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "2174:6:12" - }, - "scope": 1653, - "src": "2013:216:12", - "stateMutability": "view", - "virtual": true, - "visibility": "public" - }, - { - "baseFunctions": [214], - "body": { - "id": 1571, - "nodeType": "Block", - "src": "2859:61:12", - "statements": [ - { - "expression": { - "commonType": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "id": 1569, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "baseExpression": { - "id": 1563, - "name": "peers", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1390, - "src": "2876:5:12", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_uint32_$_t_bytes32_$", - "typeString": "mapping(uint32 => bytes32)" - } - }, - "id": 1566, - "indexExpression": { - "expression": { - "id": 1564, - "name": "origin", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1558, - "src": "2882:6:12", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Origin_$40_calldata_ptr", - "typeString": "struct Origin calldata" - } - }, - "id": 1565, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2889:6:12", - "memberName": "srcEid", - "nodeType": "MemberAccess", - "referencedDeclaration": 35, - "src": "2882:13:12", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "2876:20:12", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "expression": { - "id": 1567, - "name": "origin", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1558, - "src": "2900:6:12", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Origin_$40_calldata_ptr", - "typeString": "struct Origin calldata" - } - }, - "id": 1568, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2907:6:12", - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": 37, - "src": "2900:13:12", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "src": "2876:37:12", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "functionReturnParameters": 1562, - "id": 1570, - "nodeType": "Return", - "src": "2869:44:12" - } - ] - }, - "documentation": { - "id": 1555, - "nodeType": "StructuredDocumentation", - "src": "2235:531:12", - "text": " @notice Checks if the path initialization is allowed based on the provided origin.\n @param origin The origin information containing the source endpoint and sender address.\n @return Whether the path has been initialized.\n @dev This indicates to the endpoint that the OApp has enabled msgs for this particular path to be received.\n @dev This defaults to assuming if a peer has been set, its initialized.\n Can be overridden by the OApp if there is other logic to determine this." - }, - "functionSelector": "ff7bd03d", - "id": 1572, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "allowInitializePath", - "nameLocation": "2780:19:12", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1559, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1558, - "mutability": "mutable", - "name": "origin", - "nameLocation": "2816:6:12", - "nodeType": "VariableDeclaration", - "scope": 1572, - "src": "2800:22:12", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Origin_$40_calldata_ptr", - "typeString": "struct Origin" - }, - "typeName": { - "id": 1557, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 1556, - "name": "Origin", - "nameLocations": ["2800:6:12"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 40, - "src": "2800:6:12" - }, - "referencedDeclaration": 40, - "src": "2800:6:12", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Origin_$40_storage_ptr", - "typeString": "struct Origin" - } - }, - "visibility": "internal" - } - ], - "src": "2799:24:12" - }, - "returnParameters": { - "id": 1562, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1561, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 1572, - "src": "2853:4:12", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 1560, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "2853:4:12", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "2852:6:12" - }, - "scope": 1653, - "src": "2771:149:12", - "stateMutability": "view", - "virtual": true, - "visibility": "public" - }, - { - "baseFunctions": [223], - "body": { - "id": 1584, - "nodeType": "Block", - "src": "3610:25:12", - "statements": [ - { - "expression": { - "hexValue": "30", - "id": 1582, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3627:1:12", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "functionReturnParameters": 1581, - "id": 1583, - "nodeType": "Return", - "src": "3620:8:12" - } - ] - }, - "documentation": { - "id": 1573, - "nodeType": "StructuredDocumentation", - "src": "2926:576:12", - "text": " @notice Retrieves the next nonce for a given source endpoint and sender address.\n @dev _srcEid The source endpoint ID.\n @dev _sender The sender address.\n @return nonce The next nonce.\n @dev The path nonce starts from 1. If 0 is returned it means that there is NO nonce ordered enforcement.\n @dev Is required by the off-chain executor to determine the OApp expects msg execution is ordered.\n @dev This is also enforced by the OApp.\n @dev By default this is NOT enabled. ie. nextNonce is hardcoded to return 0." - }, - "functionSelector": "7d25a05e", - "id": 1585, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "nextNonce", - "nameLocation": "3516:9:12", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1578, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1575, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 1585, - "src": "3526:6:12", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 1574, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "3526:6:12", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1577, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 1585, - "src": "3546:7:12", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 1576, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "3546:7:12", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "3525:41:12" - }, - "returnParameters": { - "id": 1581, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1580, - "mutability": "mutable", - "name": "nonce", - "nameLocation": "3603:5:12", - "nodeType": "VariableDeclaration", - "scope": 1585, - "src": "3596:12:12", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "typeName": { - "id": 1579, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "3596:6:12", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "visibility": "internal" - } - ], - "src": "3595:14:12" - }, - "scope": 1653, - "src": "3507:128:12", - "stateMutability": "view", - "virtual": true, - "visibility": "public" - }, - { - "baseFunctions": [237], - "body": { - "id": 1636, - "nodeType": "Block", - "src": "4567:509:12", - "statements": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 1606, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "arguments": [ - { - "id": 1602, - "name": "endpoint", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1386, - "src": "4681:8:12", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ILayerZeroEndpointV2_$202", - "typeString": "contract ILayerZeroEndpointV2" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_ILayerZeroEndpointV2_$202", - "typeString": "contract ILayerZeroEndpointV2" - } - ], - "id": 1601, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "4673:7:12", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 1600, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4673:7:12", - "typeDescriptions": {} - } - }, - "id": 1603, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4673:17:12", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "expression": { - "id": 1604, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967281, - "src": "4694:3:12", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 1605, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "4698:6:12", - "memberName": "sender", - "nodeType": "MemberAccess", - "src": "4694:10:12", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "4673:31:12", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 1612, - "nodeType": "IfStatement", - "src": "4669:68:12", - "trueBody": { - "errorCall": { - "arguments": [ - { - "expression": { - "id": 1608, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967281, - "src": "4726:3:12", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 1609, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "4730:6:12", - "memberName": "sender", - "nodeType": "MemberAccess", - "src": "4726:10:12", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 1607, - "name": "OnlyEndpoint", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1517, - "src": "4713:12:12", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$_t_address_$returns$__$", - "typeString": "function (address) pure" - } - }, - "id": 1610, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4713:24:12", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1611, - "nodeType": "RevertStatement", - "src": "4706:31:12" - } - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "id": 1619, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "arguments": [ - { - "expression": { - "id": 1614, - "name": "_origin", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1589, - "src": "4854:7:12", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Origin_$40_calldata_ptr", - "typeString": "struct Origin calldata" - } - }, - "id": 1615, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "4862:6:12", - "memberName": "srcEid", - "nodeType": "MemberAccess", - "referencedDeclaration": 35, - "src": "4854:14:12", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - ], - "id": 1613, - "name": "_getPeerOrRevert", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1485, - "src": "4837:16:12", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_uint32_$returns$_t_bytes32_$", - "typeString": "function (uint32) view returns (bytes32)" - } - }, - "id": 1616, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4837:32:12", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "expression": { - "id": 1617, - "name": "_origin", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1589, - "src": "4873:7:12", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Origin_$40_calldata_ptr", - "typeString": "struct Origin calldata" - } - }, - "id": 1618, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "4881:6:12", - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": 37, - "src": "4873:14:12", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "src": "4837:50:12", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 1627, - "nodeType": "IfStatement", - "src": "4833:103:12", - "trueBody": { - "errorCall": { - "arguments": [ - { - "expression": { - "id": 1621, - "name": "_origin", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1589, - "src": "4905:7:12", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Origin_$40_calldata_ptr", - "typeString": "struct Origin calldata" - } - }, - "id": 1622, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "4913:6:12", - "memberName": "srcEid", - "nodeType": "MemberAccess", - "referencedDeclaration": 35, - "src": "4905:14:12", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - { - "expression": { - "id": 1623, - "name": "_origin", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1589, - "src": "4921:7:12", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Origin_$40_calldata_ptr", - "typeString": "struct Origin calldata" - } - }, - "id": 1624, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "4929:6:12", - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": 37, - "src": "4921:14:12", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "id": 1620, - "name": "OnlyPeer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1850, - "src": "4896:8:12", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$_t_uint32_$_t_bytes32_$returns$__$", - "typeString": "function (uint32,bytes32) pure" - } - }, - "id": 1625, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4896:40:12", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1626, - "nodeType": "RevertStatement", - "src": "4889:47:12" - } - }, - { - "expression": { - "arguments": [ - { - "id": 1629, - "name": "_origin", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1589, - "src": "5021:7:12", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Origin_$40_calldata_ptr", - "typeString": "struct Origin calldata" - } - }, - { - "id": 1630, - "name": "_guid", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1591, - "src": "5030:5:12", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "id": 1631, - "name": "_message", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1593, - "src": "5037:8:12", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - }, - { - "id": 1632, - "name": "_executor", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1595, - "src": "5047:9:12", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 1633, - "name": "_extraData", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1597, - "src": "5058:10:12", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_struct$_Origin_$40_calldata_ptr", - "typeString": "struct Origin calldata" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - ], - "id": 1628, - "name": "_lzReceive", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1652, - "src": "5010:10:12", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Origin_$40_calldata_ptr_$_t_bytes32_$_t_bytes_calldata_ptr_$_t_address_$_t_bytes_calldata_ptr_$returns$__$", - "typeString": "function (struct Origin calldata,bytes32,bytes calldata,address,bytes calldata)" - } - }, - "id": 1634, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5010:59:12", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1635, - "nodeType": "ExpressionStatement", - "src": "5010:59:12" - } - ] - }, - "documentation": { - "id": 1586, - "nodeType": "StructuredDocumentation", - "src": "3641:722:12", - "text": " @dev Entry point for receiving messages or packets from the endpoint.\n @param _origin The origin information containing the source endpoint and sender address.\n - srcEid: The source chain endpoint ID.\n - sender: The sender address on the src chain.\n - nonce: The nonce of the message.\n @param _guid The unique identifier for the received LayerZero message.\n @param _message The payload of the received message.\n @param _executor The address of the executor for the received message.\n @param _extraData Additional arbitrary data provided by the corresponding executor.\n @dev Entry point for receiving msg/packet from the LayerZero endpoint." - }, - "functionSelector": "13137d65", - "id": 1637, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "lzReceive", - "nameLocation": "4377:9:12", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1598, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1589, - "mutability": "mutable", - "name": "_origin", - "nameLocation": "4412:7:12", - "nodeType": "VariableDeclaration", - "scope": 1637, - "src": "4396:23:12", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Origin_$40_calldata_ptr", - "typeString": "struct Origin" - }, - "typeName": { - "id": 1588, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 1587, - "name": "Origin", - "nameLocations": ["4396:6:12"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 40, - "src": "4396:6:12" - }, - "referencedDeclaration": 40, - "src": "4396:6:12", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Origin_$40_storage_ptr", - "typeString": "struct Origin" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1591, - "mutability": "mutable", - "name": "_guid", - "nameLocation": "4437:5:12", - "nodeType": "VariableDeclaration", - "scope": 1637, - "src": "4429:13:12", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 1590, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "4429:7:12", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1593, - "mutability": "mutable", - "name": "_message", - "nameLocation": "4467:8:12", - "nodeType": "VariableDeclaration", - "scope": 1637, - "src": "4452:23:12", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 1592, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "4452:5:12", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1595, - "mutability": "mutable", - "name": "_executor", - "nameLocation": "4493:9:12", - "nodeType": "VariableDeclaration", - "scope": 1637, - "src": "4485:17:12", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1594, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4485:7:12", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1597, - "mutability": "mutable", - "name": "_extraData", - "nameLocation": "4527:10:12", - "nodeType": "VariableDeclaration", - "scope": 1637, - "src": "4512:25:12", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 1596, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "4512:5:12", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "4386:157:12" - }, - "returnParameters": { - "id": 1599, - "nodeType": "ParameterList", - "parameters": [], - "src": "4567:0:12" - }, - "scope": 1653, - "src": "4368:708:12", - "stateMutability": "payable", - "virtual": true, - "visibility": "public" - }, - { - "documentation": { - "id": 1638, - "nodeType": "StructuredDocumentation", - "src": "5082:126:12", - "text": " @dev Internal function to implement lzReceive logic without needing to copy the basic parameter validation." - }, - "id": 1652, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "_lzReceive", - "nameLocation": "5222:10:12", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1650, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1641, - "mutability": "mutable", - "name": "_origin", - "nameLocation": "5258:7:12", - "nodeType": "VariableDeclaration", - "scope": 1652, - "src": "5242:23:12", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Origin_$40_calldata_ptr", - "typeString": "struct Origin" - }, - "typeName": { - "id": 1640, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 1639, - "name": "Origin", - "nameLocations": ["5242:6:12"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 40, - "src": "5242:6:12" - }, - "referencedDeclaration": 40, - "src": "5242:6:12", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Origin_$40_storage_ptr", - "typeString": "struct Origin" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1643, - "mutability": "mutable", - "name": "_guid", - "nameLocation": "5283:5:12", - "nodeType": "VariableDeclaration", - "scope": 1652, - "src": "5275:13:12", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 1642, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "5275:7:12", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1645, - "mutability": "mutable", - "name": "_message", - "nameLocation": "5313:8:12", - "nodeType": "VariableDeclaration", - "scope": 1652, - "src": "5298:23:12", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 1644, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "5298:5:12", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1647, - "mutability": "mutable", - "name": "_executor", - "nameLocation": "5339:9:12", - "nodeType": "VariableDeclaration", - "scope": 1652, - "src": "5331:17:12", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1646, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5331:7:12", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1649, - "mutability": "mutable", - "name": "_extraData", - "nameLocation": "5373:10:12", - "nodeType": "VariableDeclaration", - "scope": 1652, - "src": "5358:25:12", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 1648, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "5358:5:12", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "5232:157:12" - }, - "returnParameters": { - "id": 1651, - "nodeType": "ParameterList", - "parameters": [], - "src": "5406:0:12" - }, - "scope": 1653, - "src": "5213:194:12", - "stateMutability": "nonpayable", - "virtual": true, - "visibility": "internal" - } - ], - "scope": 1654, - "src": "321:5088:12", - "usedErrors": [1517, 1850, 1854, 1856, 1858, 3842, 3847], - "usedEvents": [1864, 3853] - } - ], - "src": "33:5377:12" - }, - "id": 12 - }, - "@layerzerolabs/oapp-evm/contracts/oapp/OAppSender.sol": { - "ast": { - "absolutePath": "@layerzerolabs/oapp-evm/contracts/oapp/OAppSender.sol", - "exportedSymbols": { - "IERC20": [4796], - "MessagingFee": [33], - "MessagingParams": [20], - "MessagingReceipt": [28], - "OAppCore": [1501], - "OAppSender": [1839], - "SafeERC20": [5233] - }, - "id": 1840, - "license": "MIT", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 1655, - "literals": ["solidity", "^", "0.8", ".20"], - "nodeType": "PragmaDirective", - "src": "33:24:13" - }, - { - "absolutePath": "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol", - "file": "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol", - "id": 1658, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 1840, - "sourceUnit": 5234, - "src": "59:92:13", - "symbolAliases": [ - { - "foreign": { - "id": 1656, - "name": "SafeERC20", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5233, - "src": "68:9:13", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - }, - { - "foreign": { - "id": 1657, - "name": "IERC20", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4796, - "src": "79:6:13", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol", - "file": "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol", - "id": 1662, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 1840, - "sourceUnit": 203, - "src": "152:146:13", - "symbolAliases": [ - { - "foreign": { - "id": 1659, - "name": "MessagingParams", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20, - "src": "161:15:13", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - }, - { - "foreign": { - "id": 1660, - "name": "MessagingFee", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 33, - "src": "178:12:13", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - }, - { - "foreign": { - "id": 1661, - "name": "MessagingReceipt", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 28, - "src": "192:16:13", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "@layerzerolabs/oapp-evm/contracts/oapp/OAppCore.sol", - "file": "./OAppCore.sol", - "id": 1664, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 1840, - "sourceUnit": 1502, - "src": "299:42:13", - "symbolAliases": [ - { - "foreign": { - "id": 1663, - "name": "OAppCore", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1501, - "src": "308:8:13", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "abstract": true, - "baseContracts": [ - { - "baseName": { - "id": 1666, - "name": "OAppCore", - "nameLocations": ["518:8:13"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 1501, - "src": "518:8:13" - }, - "id": 1667, - "nodeType": "InheritanceSpecifier", - "src": "518:8:13" - } - ], - "canonicalName": "OAppSender", - "contractDependencies": [], - "contractKind": "contract", - "documentation": { - "id": 1665, - "nodeType": "StructuredDocumentation", - "src": "343:142:13", - "text": " @title OAppSender\n @dev Abstract contract implementing the OAppSender functionality for sending messages to a LayerZero endpoint." - }, - "fullyImplemented": true, - "id": 1839, - "linearizedBaseContracts": [1839, 1501, 3976, 5522, 1902], - "name": "OAppSender", - "nameLocation": "504:10:13", - "nodeType": "ContractDefinition", - "nodes": [ - { - "global": false, - "id": 1671, - "libraryName": { - "id": 1668, - "name": "SafeERC20", - "nameLocations": ["539:9:13"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 5233, - "src": "539:9:13" - }, - "nodeType": "UsingForDirective", - "src": "533:27:13", - "typeName": { - "id": 1670, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 1669, - "name": "IERC20", - "nameLocations": ["553:6:13"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 4796, - "src": "553:6:13" - }, - "referencedDeclaration": 4796, - "src": "553:6:13", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$4796", - "typeString": "contract IERC20" - } - } - }, - { - "errorSelector": "9f704120", - "id": 1675, - "name": "NotEnoughNative", - "nameLocation": "601:15:13", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 1674, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1673, - "mutability": "mutable", - "name": "msgValue", - "nameLocation": "625:8:13", - "nodeType": "VariableDeclaration", - "scope": 1675, - "src": "617:16:13", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1672, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "617:7:13", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "616:18:13" - }, - "src": "595:40:13" - }, - { - "errorSelector": "5373352a", - "id": 1677, - "name": "LzTokenUnavailable", - "nameLocation": "646:18:13", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 1676, - "nodeType": "ParameterList", - "parameters": [], - "src": "664:2:13" - }, - "src": "640:27:13" - }, - { - "constant": true, - "id": 1680, - "mutability": "constant", - "name": "SENDER_VERSION", - "nameLocation": "826:14:13", - "nodeType": "VariableDeclaration", - "scope": 1839, - "src": "801:43:13", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "typeName": { - "id": 1678, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "801:6:13", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "value": { - "hexValue": "31", - "id": 1679, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "843:1:13", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "visibility": "internal" - }, - { - "baseFunctions": [1872], - "body": { - "id": 1692, - "nodeType": "Block", - "src": "1456:43:13", - "statements": [ - { - "expression": { - "components": [ - { - "id": 1688, - "name": "SENDER_VERSION", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1680, - "src": "1474:14:13", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - { - "hexValue": "30", - "id": 1689, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1490:1:13", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "id": 1690, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "1473:19:13", - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_uint64_$_t_rational_0_by_1_$", - "typeString": "tuple(uint64,int_const 0)" - } - }, - "functionReturnParameters": 1687, - "id": 1691, - "nodeType": "Return", - "src": "1466:26:13" - } - ] - }, - "documentation": { - "id": 1681, - "nodeType": "StructuredDocumentation", - "src": "851:502:13", - "text": " @notice Retrieves the OApp version information.\n @return senderVersion The version of the OAppSender.sol contract.\n @return receiverVersion The version of the OAppReceiver.sol contract.\n @dev Providing 0 as the default for OAppReceiver version. Indicates that the OAppReceiver is not implemented.\n ie. this is a SEND only OApp.\n @dev If the OApp uses both OAppSender and OAppReceiver, then this needs to be override returning the correct versions" - }, - "functionSelector": "17442b70", - "id": 1693, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "oAppVersion", - "nameLocation": "1367:11:13", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1682, - "nodeType": "ParameterList", - "parameters": [], - "src": "1378:2:13" - }, - "returnParameters": { - "id": 1687, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1684, - "mutability": "mutable", - "name": "senderVersion", - "nameLocation": "1417:13:13", - "nodeType": "VariableDeclaration", - "scope": 1693, - "src": "1410:20:13", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "typeName": { - "id": 1683, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "1410:6:13", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1686, - "mutability": "mutable", - "name": "receiverVersion", - "nameLocation": "1439:15:13", - "nodeType": "VariableDeclaration", - "scope": 1693, - "src": "1432:22:13", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "typeName": { - "id": 1685, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "1432:6:13", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "visibility": "internal" - } - ], - "src": "1409:46:13" - }, - "scope": 1839, - "src": "1358:141:13", - "stateMutability": "view", - "virtual": true, - "visibility": "public" - }, - { - "body": { - "id": 1725, - "nodeType": "Block", - "src": "2230:199:13", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "id": 1711, - "name": "_dstEid", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1696, - "src": "2307:7:13", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - { - "arguments": [ - { - "id": 1713, - "name": "_dstEid", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1696, - "src": "2333:7:13", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - ], - "id": 1712, - "name": "_getPeerOrRevert", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1485, - "src": "2316:16:13", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_uint32_$returns$_t_bytes32_$", - "typeString": "function (uint32) view returns (bytes32)" - } - }, - "id": 1714, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2316:25:13", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "id": 1715, - "name": "_message", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1698, - "src": "2343:8:13", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - { - "id": 1716, - "name": "_options", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1700, - "src": "2353:8:13", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - { - "id": 1717, - "name": "_payInLzToken", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1702, - "src": "2363:13:13", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - }, - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - }, - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 1710, - "name": "MessagingParams", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20, - "src": "2291:15:13", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_struct$_MessagingParams_$20_storage_ptr_$", - "typeString": "type(struct MessagingParams storage pointer)" - } - }, - "id": 1718, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "structConstructorCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2291:86:13", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_struct$_MessagingParams_$20_memory_ptr", - "typeString": "struct MessagingParams memory" - } - }, - { - "arguments": [ - { - "id": 1721, - "name": "this", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967268, - "src": "2403:4:13", - "typeDescriptions": { - "typeIdentifier": "t_contract$_OAppSender_$1839", - "typeString": "contract OAppSender" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_OAppSender_$1839", - "typeString": "contract OAppSender" - } - ], - "id": 1720, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2395:7:13", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 1719, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2395:7:13", - "typeDescriptions": {} - } - }, - "id": 1722, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2395:13:13", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_struct$_MessagingParams_$20_memory_ptr", - "typeString": "struct MessagingParams memory" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 1708, - "name": "endpoint", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1386, - "src": "2259:8:13", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ILayerZeroEndpointV2_$202", - "typeString": "contract ILayerZeroEndpointV2" - } - }, - "id": 1709, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2268:5:13", - "memberName": "quote", - "nodeType": "MemberAccess", - "referencedDeclaration": 114, - "src": "2259:14:13", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_struct$_MessagingParams_$20_memory_ptr_$_t_address_$returns$_t_struct$_MessagingFee_$33_memory_ptr_$", - "typeString": "function (struct MessagingParams memory,address) view external returns (struct MessagingFee memory)" - } - }, - "id": 1723, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2259:163:13", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_struct$_MessagingFee_$33_memory_ptr", - "typeString": "struct MessagingFee memory" - } - }, - "functionReturnParameters": 1707, - "id": 1724, - "nodeType": "Return", - "src": "2240:182:13" - } - ] - }, - "documentation": { - "id": 1694, - "nodeType": "StructuredDocumentation", - "src": "1505:528:13", - "text": " @dev Internal function to interact with the LayerZero EndpointV2.quote() for fee calculation.\n @param _dstEid The destination endpoint ID.\n @param _message The message payload.\n @param _options Additional options for the message.\n @param _payInLzToken Flag indicating whether to pay the fee in LZ tokens.\n @return fee The calculated MessagingFee for the message.\n - nativeFee: The native fee for the message.\n - lzTokenFee: The LZ token fee for the message." - }, - "id": 1726, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_quote", - "nameLocation": "2047:6:13", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1703, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1696, - "mutability": "mutable", - "name": "_dstEid", - "nameLocation": "2070:7:13", - "nodeType": "VariableDeclaration", - "scope": 1726, - "src": "2063:14:13", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 1695, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "2063:6:13", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1698, - "mutability": "mutable", - "name": "_message", - "nameLocation": "2100:8:13", - "nodeType": "VariableDeclaration", - "scope": 1726, - "src": "2087:21:13", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 1697, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "2087:5:13", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1700, - "mutability": "mutable", - "name": "_options", - "nameLocation": "2131:8:13", - "nodeType": "VariableDeclaration", - "scope": 1726, - "src": "2118:21:13", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 1699, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "2118:5:13", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1702, - "mutability": "mutable", - "name": "_payInLzToken", - "nameLocation": "2154:13:13", - "nodeType": "VariableDeclaration", - "scope": 1726, - "src": "2149:18:13", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 1701, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "2149:4:13", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "2053:120:13" - }, - "returnParameters": { - "id": 1707, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1706, - "mutability": "mutable", - "name": "fee", - "nameLocation": "2225:3:13", - "nodeType": "VariableDeclaration", - "scope": 1726, - "src": "2205:23:13", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MessagingFee_$33_memory_ptr", - "typeString": "struct MessagingFee" - }, - "typeName": { - "id": 1705, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 1704, - "name": "MessagingFee", - "nameLocations": ["2205:12:13"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 33, - "src": "2205:12:13" - }, - "referencedDeclaration": 33, - "src": "2205:12:13", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MessagingFee_$33_storage_ptr", - "typeString": "struct MessagingFee" - } - }, - "visibility": "internal" - } - ], - "src": "2204:25:13" - }, - "scope": 1839, - "src": "2038:391:13", - "stateMutability": "view", - "virtual": true, - "visibility": "internal" - }, - { - "body": { - "id": 1780, - "nodeType": "Block", - "src": "3422:532:13", - "statements": [ - { - "assignments": [1745], - "declarations": [ - { - "constant": false, - "id": 1745, - "mutability": "mutable", - "name": "messageValue", - "nameLocation": "3562:12:13", - "nodeType": "VariableDeclaration", - "scope": 1780, - "src": "3554:20:13", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1744, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3554:7:13", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 1750, - "initialValue": { - "arguments": [ - { - "expression": { - "id": 1747, - "name": "_fee", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1736, - "src": "3588:4:13", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MessagingFee_$33_memory_ptr", - "typeString": "struct MessagingFee memory" - } - }, - "id": 1748, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3593:9:13", - "memberName": "nativeFee", - "nodeType": "MemberAccess", - "referencedDeclaration": 30, - "src": "3588:14:13", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 1746, - "name": "_payNative", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1802, - "src": "3577:10:13", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$_t_uint256_$", - "typeString": "function (uint256) returns (uint256)" - } - }, - "id": 1749, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3577:26:13", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "3554:49:13" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 1754, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 1751, - "name": "_fee", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1736, - "src": "3617:4:13", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MessagingFee_$33_memory_ptr", - "typeString": "struct MessagingFee memory" - } - }, - "id": 1752, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3622:10:13", - "memberName": "lzTokenFee", - "nodeType": "MemberAccess", - "referencedDeclaration": 32, - "src": "3617:15:13", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "hexValue": "30", - "id": 1753, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3635:1:13", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "3617:19:13", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 1760, - "nodeType": "IfStatement", - "src": "3613:53:13", - "trueBody": { - "expression": { - "arguments": [ - { - "expression": { - "id": 1756, - "name": "_fee", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1736, - "src": "3650:4:13", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MessagingFee_$33_memory_ptr", - "typeString": "struct MessagingFee memory" - } - }, - "id": 1757, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3655:10:13", - "memberName": "lzTokenFee", - "nodeType": "MemberAccess", - "referencedDeclaration": 32, - "src": "3650:15:13", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 1755, - "name": "_payLzToken", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1838, - "src": "3638:11:13", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$__$", - "typeString": "function (uint256)" - } - }, - "id": 1758, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3638:28:13", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1759, - "nodeType": "ExpressionStatement", - "src": "3638:28:13" - } - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "id": 1766, - "name": "_dstEid", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1729, - "src": "3825:7:13", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - { - "arguments": [ - { - "id": 1768, - "name": "_dstEid", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1729, - "src": "3851:7:13", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - ], - "id": 1767, - "name": "_getPeerOrRevert", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1485, - "src": "3834:16:13", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_uint32_$returns$_t_bytes32_$", - "typeString": "function (uint32) view returns (bytes32)" - } - }, - "id": 1769, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3834:25:13", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "id": 1770, - "name": "_message", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1731, - "src": "3861:8:13", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - { - "id": 1771, - "name": "_options", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1733, - "src": "3871:8:13", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 1775, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 1772, - "name": "_fee", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1736, - "src": "3881:4:13", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MessagingFee_$33_memory_ptr", - "typeString": "struct MessagingFee memory" - } - }, - "id": 1773, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3886:10:13", - "memberName": "lzTokenFee", - "nodeType": "MemberAccess", - "referencedDeclaration": 32, - "src": "3881:15:13", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "hexValue": "30", - "id": 1774, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3899:1:13", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "3881:19:13", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - }, - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - }, - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 1765, - "name": "MessagingParams", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20, - "src": "3809:15:13", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_struct$_MessagingParams_$20_storage_ptr_$", - "typeString": "type(struct MessagingParams storage pointer)" - } - }, - "id": 1776, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "structConstructorCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3809:92:13", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_struct$_MessagingParams_$20_memory_ptr", - "typeString": "struct MessagingParams memory" - } - }, - { - "id": 1777, - "name": "_refundAddress", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1738, - "src": "3919:14:13", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_struct$_MessagingParams_$20_memory_ptr", - "typeString": "struct MessagingParams memory" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_struct$_MessagingParams_$20_memory_ptr", - "typeString": "struct MessagingParams memory" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 1761, - "name": "endpoint", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1386, - "src": "3755:8:13", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ILayerZeroEndpointV2_$202", - "typeString": "contract ILayerZeroEndpointV2" - } - }, - "id": 1762, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3764:4:13", - "memberName": "send", - "nodeType": "MemberAccess", - "referencedDeclaration": 125, - "src": "3755:13:13", - "typeDescriptions": { - "typeIdentifier": "t_function_external_payable$_t_struct$_MessagingParams_$20_memory_ptr_$_t_address_$returns$_t_struct$_MessagingReceipt_$28_memory_ptr_$", - "typeString": "function (struct MessagingParams memory,address) payable external returns (struct MessagingReceipt memory)" - } - }, - "id": 1764, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "names": ["value"], - "nodeType": "FunctionCallOptions", - "options": [ - { - "id": 1763, - "name": "messageValue", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1745, - "src": "3777:12:13", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "src": "3755:36:13", - "typeDescriptions": { - "typeIdentifier": "t_function_external_payable$_t_struct$_MessagingParams_$20_memory_ptr_$_t_address_$returns$_t_struct$_MessagingReceipt_$28_memory_ptr_$value", - "typeString": "function (struct MessagingParams memory,address) payable external returns (struct MessagingReceipt memory)" - } - }, - "id": 1778, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3755:192:13", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_struct$_MessagingReceipt_$28_memory_ptr", - "typeString": "struct MessagingReceipt memory" - } - }, - "functionReturnParameters": 1743, - "id": 1779, - "nodeType": "Return", - "src": "3677:270:13" - } - ] - }, - "documentation": { - "id": 1727, - "nodeType": "StructuredDocumentation", - "src": "2435:748:13", - "text": " @dev Internal function to interact with the LayerZero EndpointV2.send() for sending a message.\n @param _dstEid The destination endpoint ID.\n @param _message The message payload.\n @param _options Additional options for the message.\n @param _fee The calculated LayerZero fee for the message.\n - nativeFee: The native fee.\n - lzTokenFee: The lzToken fee.\n @param _refundAddress The address to receive any excess fee values sent to the endpoint.\n @return receipt The receipt for the sent message.\n - guid: The unique identifier for the sent message.\n - nonce: The nonce of the sent message.\n - fee: The LayerZero fee incurred for the message." - }, - "id": 1781, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_lzSend", - "nameLocation": "3197:7:13", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1739, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1729, - "mutability": "mutable", - "name": "_dstEid", - "nameLocation": "3221:7:13", - "nodeType": "VariableDeclaration", - "scope": 1781, - "src": "3214:14:13", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 1728, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "3214:6:13", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1731, - "mutability": "mutable", - "name": "_message", - "nameLocation": "3251:8:13", - "nodeType": "VariableDeclaration", - "scope": 1781, - "src": "3238:21:13", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 1730, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "3238:5:13", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1733, - "mutability": "mutable", - "name": "_options", - "nameLocation": "3282:8:13", - "nodeType": "VariableDeclaration", - "scope": 1781, - "src": "3269:21:13", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 1732, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "3269:5:13", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1736, - "mutability": "mutable", - "name": "_fee", - "nameLocation": "3320:4:13", - "nodeType": "VariableDeclaration", - "scope": 1781, - "src": "3300:24:13", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MessagingFee_$33_memory_ptr", - "typeString": "struct MessagingFee" - }, - "typeName": { - "id": 1735, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 1734, - "name": "MessagingFee", - "nameLocations": ["3300:12:13"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 33, - "src": "3300:12:13" - }, - "referencedDeclaration": 33, - "src": "3300:12:13", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MessagingFee_$33_storage_ptr", - "typeString": "struct MessagingFee" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1738, - "mutability": "mutable", - "name": "_refundAddress", - "nameLocation": "3342:14:13", - "nodeType": "VariableDeclaration", - "scope": 1781, - "src": "3334:22:13", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1737, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3334:7:13", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "3204:158:13" - }, - "returnParameters": { - "id": 1743, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1742, - "mutability": "mutable", - "name": "receipt", - "nameLocation": "3413:7:13", - "nodeType": "VariableDeclaration", - "scope": 1781, - "src": "3389:31:13", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MessagingReceipt_$28_memory_ptr", - "typeString": "struct MessagingReceipt" - }, - "typeName": { - "id": 1741, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 1740, - "name": "MessagingReceipt", - "nameLocations": ["3389:16:13"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 28, - "src": "3389:16:13" - }, - "referencedDeclaration": 28, - "src": "3389:16:13", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MessagingReceipt_$28_storage_ptr", - "typeString": "struct MessagingReceipt" - } - }, - "visibility": "internal" - } - ], - "src": "3388:33:13" - }, - "scope": 1839, - "src": "3188:766:13", - "stateMutability": "nonpayable", - "virtual": true, - "visibility": "internal" - }, - { - "body": { - "id": 1801, - "nodeType": "Block", - "src": "4735:106:13", - "statements": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 1792, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 1789, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967281, - "src": "4749:3:13", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 1790, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "4753:5:13", - "memberName": "value", - "nodeType": "MemberAccess", - "src": "4749:9:13", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "id": 1791, - "name": "_nativeFee", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1784, - "src": "4762:10:13", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "4749:23:13", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 1798, - "nodeType": "IfStatement", - "src": "4745:62:13", - "trueBody": { - "errorCall": { - "arguments": [ - { - "expression": { - "id": 1794, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967281, - "src": "4797:3:13", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 1795, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "4801:5:13", - "memberName": "value", - "nodeType": "MemberAccess", - "src": "4797:9:13", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 1793, - "name": "NotEnoughNative", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1675, - "src": "4781:15:13", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$_t_uint256_$returns$__$", - "typeString": "function (uint256) pure" - } - }, - "id": 1796, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4781:26:13", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1797, - "nodeType": "RevertStatement", - "src": "4774:33:13" - } - }, - { - "expression": { - "id": 1799, - "name": "_nativeFee", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1784, - "src": "4824:10:13", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 1788, - "id": 1800, - "nodeType": "Return", - "src": "4817:17:13" - } - ] - }, - "documentation": { - "id": 1782, - "nodeType": "StructuredDocumentation", - "src": "3960:685:13", - "text": " @dev Internal function to pay the native fee associated with the message.\n @param _nativeFee The native fee to be paid.\n @return nativeFee The amount of native currency paid.\n @dev If the OApp needs to initiate MULTIPLE LayerZero messages in a single transaction,\n this will need to be overridden because msg.value would contain multiple lzFees.\n @dev Should be overridden in the event the LayerZero endpoint requires a different native currency.\n @dev Some EVMs use an ERC20 as a method for paying transactions/gasFees.\n @dev The endpoint is EITHER/OR, ie. it will NOT support both types of native payment at a time." - }, - "id": 1802, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_payNative", - "nameLocation": "4659:10:13", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1785, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1784, - "mutability": "mutable", - "name": "_nativeFee", - "nameLocation": "4678:10:13", - "nodeType": "VariableDeclaration", - "scope": 1802, - "src": "4670:18:13", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1783, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4670:7:13", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "4669:20:13" - }, - "returnParameters": { - "id": 1788, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1787, - "mutability": "mutable", - "name": "nativeFee", - "nameLocation": "4724:9:13", - "nodeType": "VariableDeclaration", - "scope": 1802, - "src": "4716:17:13", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1786, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4716:7:13", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "4715:19:13" - }, - "scope": 1839, - "src": "4650:191:13", - "stateMutability": "nonpayable", - "virtual": true, - "visibility": "internal" - }, - { - "body": { - "id": 1837, - "nodeType": "Block", - "src": "5277:351:13", - "statements": [ - { - "assignments": [1809], - "declarations": [ - { - "constant": false, - "id": 1809, - "mutability": "mutable", - "name": "lzToken", - "nameLocation": "5379:7:13", - "nodeType": "VariableDeclaration", - "scope": 1837, - "src": "5371:15:13", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1808, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5371:7:13", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "id": 1813, - "initialValue": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "id": 1810, - "name": "endpoint", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1386, - "src": "5389:8:13", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ILayerZeroEndpointV2_$202", - "typeString": "contract ILayerZeroEndpointV2" - } - }, - "id": 1811, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "5398:7:13", - "memberName": "lzToken", - "nodeType": "MemberAccess", - "referencedDeclaration": 191, - "src": "5389:16:13", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_address_$", - "typeString": "function () view external returns (address)" - } - }, - "id": 1812, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5389:18:13", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "5371:36:13" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 1819, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 1814, - "name": "lzToken", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1809, - "src": "5421:7:13", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "arguments": [ - { - "hexValue": "30", - "id": 1817, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "5440:1:13", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 1816, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "5432:7:13", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 1815, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5432:7:13", - "typeDescriptions": {} - } - }, - "id": 1818, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5432:10:13", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "5421:21:13", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 1823, - "nodeType": "IfStatement", - "src": "5417:54:13", - "trueBody": { - "errorCall": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 1820, - "name": "LzTokenUnavailable", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1677, - "src": "5451:18:13", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 1821, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5451:20:13", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1822, - "nodeType": "RevertStatement", - "src": "5444:27:13" - } - }, - { - "expression": { - "arguments": [ - { - "expression": { - "id": 1828, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967281, - "src": "5578:3:13", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 1829, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "5582:6:13", - "memberName": "sender", - "nodeType": "MemberAccess", - "src": "5578:10:13", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "arguments": [ - { - "id": 1832, - "name": "endpoint", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1386, - "src": "5598:8:13", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ILayerZeroEndpointV2_$202", - "typeString": "contract ILayerZeroEndpointV2" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_ILayerZeroEndpointV2_$202", - "typeString": "contract ILayerZeroEndpointV2" - } - ], - "id": 1831, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "5590:7:13", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 1830, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5590:7:13", - "typeDescriptions": {} - } - }, - "id": 1833, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5590:17:13", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 1834, - "name": "_lzTokenFee", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1805, - "src": "5609:11:13", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "arguments": [ - { - "id": 1825, - "name": "lzToken", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1809, - "src": "5552:7:13", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 1824, - "name": "IERC20", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4796, - "src": "5545:6:13", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IERC20_$4796_$", - "typeString": "type(contract IERC20)" - } - }, - "id": 1826, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5545:15:13", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$4796", - "typeString": "contract IERC20" - } - }, - "id": 1827, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "5561:16:13", - "memberName": "safeTransferFrom", - "nodeType": "MemberAccess", - "referencedDeclaration": 4896, - "src": "5545:32:13", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$4796_$_t_address_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IERC20_$4796_$", - "typeString": "function (contract IERC20,address,address,uint256)" - } - }, - "id": 1835, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5545:76:13", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 1836, - "nodeType": "ExpressionStatement", - "src": "5545:76:13" - } - ] - }, - "documentation": { - "id": 1803, - "nodeType": "StructuredDocumentation", - "src": "4847:366:13", - "text": " @dev Internal function to pay the LZ token fee associated with the message.\n @param _lzTokenFee The LZ token fee to be paid.\n @dev If the caller is trying to pay in the specified lzToken, then the lzTokenFee is passed to the endpoint.\n @dev Any excess sent, is passed back to the specified _refundAddress in the _lzSend()." - }, - "id": 1838, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_payLzToken", - "nameLocation": "5227:11:13", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1806, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1805, - "mutability": "mutable", - "name": "_lzTokenFee", - "nameLocation": "5247:11:13", - "nodeType": "VariableDeclaration", - "scope": 1838, - "src": "5239:19:13", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 1804, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "5239:7:13", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "5238:21:13" - }, - "returnParameters": { - "id": 1807, - "nodeType": "ParameterList", - "parameters": [], - "src": "5277:0:13" - }, - "scope": 1839, - "src": "5218:410:13", - "stateMutability": "nonpayable", - "virtual": true, - "visibility": "internal" - } - ], - "scope": 1840, - "src": "486:5144:13", - "usedErrors": [1675, 1677, 1850, 1854, 1856, 1858, 3842, 3847], - "usedEvents": [1864, 3853] - } - ], - "src": "33:5598:13" - }, - "id": 13 - }, - "@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppCore.sol": { - "ast": { - "absolutePath": "@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppCore.sol", - "exportedSymbols": { - "ILayerZeroEndpointV2": [202], - "IOAppCore": [1902] - }, - "id": 1903, - "license": "MIT", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 1841, - "literals": ["solidity", "^", "0.8", ".20"], - "nodeType": "PragmaDirective", - "src": "33:24:14" - }, - { - "absolutePath": "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol", - "file": "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol", - "id": 1843, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 1903, - "sourceUnit": 203, - "src": "59:119:14", - "symbolAliases": [ - { - "foreign": { - "id": 1842, - "name": "ILayerZeroEndpointV2", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 202, - "src": "68:20:14", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "abstract": false, - "baseContracts": [], - "canonicalName": "IOAppCore", - "contractDependencies": [], - "contractKind": "interface", - "documentation": { - "id": 1844, - "nodeType": "StructuredDocumentation", - "src": "180:27:14", - "text": " @title IOAppCore" - }, - "fullyImplemented": false, - "id": 1902, - "linearizedBaseContracts": [1902], - "name": "IOAppCore", - "nameLocation": "218:9:14", - "nodeType": "ContractDefinition", - "nodes": [ - { - "errorSelector": "c26bebcc", - "id": 1850, - "name": "OnlyPeer", - "nameLocation": "269:8:14", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 1849, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1846, - "mutability": "mutable", - "name": "eid", - "nameLocation": "285:3:14", - "nodeType": "VariableDeclaration", - "scope": 1850, - "src": "278:10:14", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 1845, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "278:6:14", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1848, - "mutability": "mutable", - "name": "sender", - "nameLocation": "298:6:14", - "nodeType": "VariableDeclaration", - "scope": 1850, - "src": "290:14:14", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 1847, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "290:7:14", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "277:28:14" - }, - "src": "263:43:14" - }, - { - "errorSelector": "f6ff4fb7", - "id": 1854, - "name": "NoPeer", - "nameLocation": "317:6:14", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 1853, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1852, - "mutability": "mutable", - "name": "eid", - "nameLocation": "331:3:14", - "nodeType": "VariableDeclaration", - "scope": 1854, - "src": "324:10:14", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 1851, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "324:6:14", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - } - ], - "src": "323:12:14" - }, - "src": "311:25:14" - }, - { - "errorSelector": "0fbdec0a", - "id": 1856, - "name": "InvalidEndpointCall", - "nameLocation": "347:19:14", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 1855, - "nodeType": "ParameterList", - "parameters": [], - "src": "366:2:14" - }, - "src": "341:28:14" - }, - { - "errorSelector": "b5863604", - "id": 1858, - "name": "InvalidDelegate", - "nameLocation": "380:15:14", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 1857, - "nodeType": "ParameterList", - "parameters": [], - "src": "395:2:14" - }, - "src": "374:24:14" - }, - { - "anonymous": false, - "eventSelector": "238399d427b947898edb290f5ff0f9109849b1c3ba196a42e35f00c50a54b98b", - "id": 1864, - "name": "PeerSet", - "nameLocation": "486:7:14", - "nodeType": "EventDefinition", - "parameters": { - "id": 1863, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1860, - "indexed": false, - "mutability": "mutable", - "name": "eid", - "nameLocation": "501:3:14", - "nodeType": "VariableDeclaration", - "scope": 1864, - "src": "494:10:14", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 1859, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "494:6:14", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1862, - "indexed": false, - "mutability": "mutable", - "name": "peer", - "nameLocation": "514:4:14", - "nodeType": "VariableDeclaration", - "scope": 1864, - "src": "506:12:14", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 1861, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "506:7:14", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "493:26:14" - }, - "src": "480:40:14" - }, - { - "documentation": { - "id": 1865, - "nodeType": "StructuredDocumentation", - "src": "526:216:14", - "text": " @notice Retrieves the OApp version information.\n @return senderVersion The version of the OAppSender.sol contract.\n @return receiverVersion The version of the OAppReceiver.sol contract." - }, - "functionSelector": "17442b70", - "id": 1872, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "oAppVersion", - "nameLocation": "756:11:14", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1866, - "nodeType": "ParameterList", - "parameters": [], - "src": "767:2:14" - }, - "returnParameters": { - "id": 1871, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1868, - "mutability": "mutable", - "name": "senderVersion", - "nameLocation": "800:13:14", - "nodeType": "VariableDeclaration", - "scope": 1872, - "src": "793:20:14", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "typeName": { - "id": 1867, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "793:6:14", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1870, - "mutability": "mutable", - "name": "receiverVersion", - "nameLocation": "822:15:14", - "nodeType": "VariableDeclaration", - "scope": 1872, - "src": "815:22:14", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "typeName": { - "id": 1869, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "815:6:14", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "visibility": "internal" - } - ], - "src": "792:46:14" - }, - "scope": 1902, - "src": "747:92:14", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 1873, - "nodeType": "StructuredDocumentation", - "src": "845:150:14", - "text": " @notice Retrieves the LayerZero endpoint associated with the OApp.\n @return iEndpoint The LayerZero endpoint as an interface." - }, - "functionSelector": "5e280f11", - "id": 1879, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "endpoint", - "nameLocation": "1009:8:14", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1874, - "nodeType": "ParameterList", - "parameters": [], - "src": "1017:2:14" - }, - "returnParameters": { - "id": 1878, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1877, - "mutability": "mutable", - "name": "iEndpoint", - "nameLocation": "1064:9:14", - "nodeType": "VariableDeclaration", - "scope": 1879, - "src": "1043:30:14", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ILayerZeroEndpointV2_$202", - "typeString": "contract ILayerZeroEndpointV2" - }, - "typeName": { - "id": 1876, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 1875, - "name": "ILayerZeroEndpointV2", - "nameLocations": ["1043:20:14"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 202, - "src": "1043:20:14" - }, - "referencedDeclaration": 202, - "src": "1043:20:14", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ILayerZeroEndpointV2_$202", - "typeString": "contract ILayerZeroEndpointV2" - } - }, - "visibility": "internal" - } - ], - "src": "1042:32:14" - }, - "scope": 1902, - "src": "1000:75:14", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 1880, - "nodeType": "StructuredDocumentation", - "src": "1081:227:14", - "text": " @notice Retrieves the peer (OApp) associated with a corresponding endpoint.\n @param _eid The endpoint ID.\n @return peer The peer address (OApp instance) associated with the corresponding endpoint." - }, - "functionSelector": "bb0b6a53", - "id": 1887, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "peers", - "nameLocation": "1322:5:14", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1883, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1882, - "mutability": "mutable", - "name": "_eid", - "nameLocation": "1335:4:14", - "nodeType": "VariableDeclaration", - "scope": 1887, - "src": "1328:11:14", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 1881, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "1328:6:14", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - } - ], - "src": "1327:13:14" - }, - "returnParameters": { - "id": 1886, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1885, - "mutability": "mutable", - "name": "peer", - "nameLocation": "1372:4:14", - "nodeType": "VariableDeclaration", - "scope": 1887, - "src": "1364:12:14", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 1884, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "1364:7:14", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "1363:14:14" - }, - "scope": 1902, - "src": "1313:65:14", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 1888, - "nodeType": "StructuredDocumentation", - "src": "1384:224:14", - "text": " @notice Sets the peer address (OApp instance) for a corresponding endpoint.\n @param _eid The endpoint ID.\n @param _peer The address of the peer to be associated with the corresponding endpoint." - }, - "functionSelector": "3400288b", - "id": 1895, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "setPeer", - "nameLocation": "1622:7:14", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1893, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1890, - "mutability": "mutable", - "name": "_eid", - "nameLocation": "1637:4:14", - "nodeType": "VariableDeclaration", - "scope": 1895, - "src": "1630:11:14", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 1889, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "1630:6:14", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1892, - "mutability": "mutable", - "name": "_peer", - "nameLocation": "1651:5:14", - "nodeType": "VariableDeclaration", - "scope": 1895, - "src": "1643:13:14", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 1891, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "1643:7:14", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "1629:28:14" - }, - "returnParameters": { - "id": 1894, - "nodeType": "ParameterList", - "parameters": [], - "src": "1666:0:14" - }, - "scope": 1902, - "src": "1613:54:14", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 1896, - "nodeType": "StructuredDocumentation", - "src": "1673:134:14", - "text": " @notice Sets the delegate address for the OApp Core.\n @param _delegate The address of the delegate to be set." - }, - "functionSelector": "ca5eb5e1", - "id": 1901, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "setDelegate", - "nameLocation": "1821:11:14", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1899, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1898, - "mutability": "mutable", - "name": "_delegate", - "nameLocation": "1841:9:14", - "nodeType": "VariableDeclaration", - "scope": 1901, - "src": "1833:17:14", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1897, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1833:7:14", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1832:19:14" - }, - "returnParameters": { - "id": 1900, - "nodeType": "ParameterList", - "parameters": [], - "src": "1860:0:14" - }, - "scope": 1902, - "src": "1812:49:14", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - } - ], - "scope": 1903, - "src": "208:1655:14", - "usedErrors": [1850, 1854, 1856, 1858], - "usedEvents": [1864] - } - ], - "src": "33:1831:14" - }, - "id": 14 - }, - "@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppMsgInspector.sol": { - "ast": { - "absolutePath": "@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppMsgInspector.sol", - "exportedSymbols": { "IOAppMsgInspector": [1922] }, - "id": 1923, - "license": "MIT", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 1904, - "literals": ["solidity", "^", "0.8", ".20"], - "nodeType": "PragmaDirective", - "src": "33:24:15" - }, - { - "abstract": false, - "baseContracts": [], - "canonicalName": "IOAppMsgInspector", - "contractDependencies": [], - "contractKind": "interface", - "documentation": { - "id": 1905, - "nodeType": "StructuredDocumentation", - "src": "59:139:15", - "text": " @title IOAppMsgInspector\n @dev Interface for the OApp Message Inspector, allowing examination of message and options contents." - }, - "fullyImplemented": false, - "id": 1922, - "linearizedBaseContracts": [1922], - "name": "IOAppMsgInspector", - "nameLocation": "209:17:15", - "nodeType": "ContractDefinition", - "nodes": [ - { - "errorSelector": "7b43b439", - "id": 1911, - "name": "InspectionFailed", - "nameLocation": "290:16:15", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 1910, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1907, - "mutability": "mutable", - "name": "message", - "nameLocation": "313:7:15", - "nodeType": "VariableDeclaration", - "scope": 1911, - "src": "307:13:15", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 1906, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "307:5:15", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1909, - "mutability": "mutable", - "name": "options", - "nameLocation": "328:7:15", - "nodeType": "VariableDeclaration", - "scope": 1911, - "src": "322:13:15", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 1908, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "322:5:15", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "306:30:15" - }, - "src": "284:53:15" - }, - { - "documentation": { - "id": 1912, - "nodeType": "StructuredDocumentation", - "src": "343:456:15", - "text": " @notice Allows the inspector to examine LayerZero message contents and optionally throw a revert if invalid.\n @param _message The message payload to be inspected.\n @param _options Additional options or parameters for inspection.\n @return valid A boolean indicating whether the inspection passed (true) or failed (false).\n @dev Optionally done as a revert, OR use the boolean provided to handle the failure." - }, - "functionSelector": "043a78eb", - "id": 1921, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "inspect", - "nameLocation": "813:7:15", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1917, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1914, - "mutability": "mutable", - "name": "_message", - "nameLocation": "836:8:15", - "nodeType": "VariableDeclaration", - "scope": 1921, - "src": "821:23:15", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 1913, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "821:5:15", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1916, - "mutability": "mutable", - "name": "_options", - "nameLocation": "861:8:15", - "nodeType": "VariableDeclaration", - "scope": 1921, - "src": "846:23:15", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 1915, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "846:5:15", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "820:50:15" - }, - "returnParameters": { - "id": 1920, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1919, - "mutability": "mutable", - "name": "valid", - "nameLocation": "899:5:15", - "nodeType": "VariableDeclaration", - "scope": 1921, - "src": "894:10:15", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 1918, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "894:4:15", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "893:12:15" - }, - "scope": 1922, - "src": "804:102:15", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - } - ], - "scope": 1923, - "src": "199:709:15", - "usedErrors": [1911], - "usedEvents": [] - } - ], - "src": "33:876:15" - }, - "id": 15 - }, - "@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppOptionsType3.sol": { - "ast": { - "absolutePath": "@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppOptionsType3.sol", - "exportedSymbols": { - "EnforcedOptionParam": [1932], - "IOAppOptionsType3": [1964] - }, - "id": 1965, - "license": "MIT", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 1924, - "literals": ["solidity", "^", "0.8", ".20"], - "nodeType": "PragmaDirective", - "src": "33:24:16" - }, - { - "canonicalName": "EnforcedOptionParam", - "documentation": { - "id": 1925, - "nodeType": "StructuredDocumentation", - "src": "59:63:16", - "text": " @dev Struct representing enforced option parameters." - }, - "id": 1932, - "members": [ - { - "constant": false, - "id": 1927, - "mutability": "mutable", - "name": "eid", - "nameLocation": "163:3:16", - "nodeType": "VariableDeclaration", - "scope": 1932, - "src": "156:10:16", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 1926, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "156:6:16", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1929, - "mutability": "mutable", - "name": "msgType", - "nameLocation": "194:7:16", - "nodeType": "VariableDeclaration", - "scope": 1932, - "src": "187:14:16", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - }, - "typeName": { - "id": 1928, - "name": "uint16", - "nodeType": "ElementaryTypeName", - "src": "187:6:16", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1931, - "mutability": "mutable", - "name": "options", - "nameLocation": "229:7:16", - "nodeType": "VariableDeclaration", - "scope": 1932, - "src": "223:13:16", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 1930, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "223:5:16", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "name": "EnforcedOptionParam", - "nameLocation": "130:19:16", - "nodeType": "StructDefinition", - "scope": 1965, - "src": "123:138:16", - "visibility": "public" - }, - { - "abstract": false, - "baseContracts": [], - "canonicalName": "IOAppOptionsType3", - "contractDependencies": [], - "contractKind": "interface", - "documentation": { - "id": 1933, - "nodeType": "StructuredDocumentation", - "src": "263:143:16", - "text": " @title IOAppOptionsType3\n @dev Interface for the OApp with Type 3 Options, allowing the setting and combining of enforced options." - }, - "fullyImplemented": false, - "id": 1964, - "linearizedBaseContracts": [1964], - "name": "IOAppOptionsType3", - "nameLocation": "417:17:16", - "nodeType": "ContractDefinition", - "nodes": [ - { - "errorSelector": "9a6d49cd", - "id": 1937, - "name": "InvalidOptions", - "nameLocation": "495:14:16", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 1936, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1935, - "mutability": "mutable", - "name": "options", - "nameLocation": "516:7:16", - "nodeType": "VariableDeclaration", - "scope": 1937, - "src": "510:13:16", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 1934, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "510:5:16", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "509:15:16" - }, - "src": "489:36:16" - }, - { - "anonymous": false, - "eventSelector": "be4864a8e820971c0247f5992e2da559595f7bf076a21cb5928d443d2a13b674", - "id": 1943, - "name": "EnforcedOptionSet", - "nameLocation": "588:17:16", - "nodeType": "EventDefinition", - "parameters": { - "id": 1942, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1941, - "indexed": false, - "mutability": "mutable", - "name": "_enforcedOptions", - "nameLocation": "628:16:16", - "nodeType": "VariableDeclaration", - "scope": 1943, - "src": "606:38:16", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_EnforcedOptionParam_$1932_memory_ptr_$dyn_memory_ptr", - "typeString": "struct EnforcedOptionParam[]" - }, - "typeName": { - "baseType": { - "id": 1939, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 1938, - "name": "EnforcedOptionParam", - "nameLocations": ["606:19:16"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 1932, - "src": "606:19:16" - }, - "referencedDeclaration": 1932, - "src": "606:19:16", - "typeDescriptions": { - "typeIdentifier": "t_struct$_EnforcedOptionParam_$1932_storage_ptr", - "typeString": "struct EnforcedOptionParam" - } - }, - "id": 1940, - "nodeType": "ArrayTypeName", - "src": "606:21:16", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_EnforcedOptionParam_$1932_storage_$dyn_storage_ptr", - "typeString": "struct EnforcedOptionParam[]" - } - }, - "visibility": "internal" - } - ], - "src": "605:40:16" - }, - "src": "582:64:16" - }, - { - "documentation": { - "id": 1944, - "nodeType": "StructuredDocumentation", - "src": "652:204:16", - "text": " @notice Sets enforced options for specific endpoint and message type combinations.\n @param _enforcedOptions An array of EnforcedOptionParam structures specifying enforced options." - }, - "functionSelector": "b98bd070", - "id": 1951, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "setEnforcedOptions", - "nameLocation": "870:18:16", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1949, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1948, - "mutability": "mutable", - "name": "_enforcedOptions", - "nameLocation": "920:16:16", - "nodeType": "VariableDeclaration", - "scope": 1951, - "src": "889:47:16", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_EnforcedOptionParam_$1932_calldata_ptr_$dyn_calldata_ptr", - "typeString": "struct EnforcedOptionParam[]" - }, - "typeName": { - "baseType": { - "id": 1946, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 1945, - "name": "EnforcedOptionParam", - "nameLocations": ["889:19:16"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 1932, - "src": "889:19:16" - }, - "referencedDeclaration": 1932, - "src": "889:19:16", - "typeDescriptions": { - "typeIdentifier": "t_struct$_EnforcedOptionParam_$1932_storage_ptr", - "typeString": "struct EnforcedOptionParam" - } - }, - "id": 1947, - "nodeType": "ArrayTypeName", - "src": "889:21:16", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_EnforcedOptionParam_$1932_storage_$dyn_storage_ptr", - "typeString": "struct EnforcedOptionParam[]" - } - }, - "visibility": "internal" - } - ], - "src": "888:49:16" - }, - "returnParameters": { - "id": 1950, - "nodeType": "ParameterList", - "parameters": [], - "src": "946:0:16" - }, - "scope": 1964, - "src": "861:86:16", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 1952, - "nodeType": "StructuredDocumentation", - "src": "953:322:16", - "text": " @notice Combines options for a given endpoint and message type.\n @param _eid The endpoint ID.\n @param _msgType The OApp message type.\n @param _extraOptions Additional options passed by the caller.\n @return options The combination of caller specified options AND enforced options." - }, - "functionSelector": "bc70b354", - "id": 1963, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "combineOptions", - "nameLocation": "1289:14:16", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1959, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1954, - "mutability": "mutable", - "name": "_eid", - "nameLocation": "1320:4:16", - "nodeType": "VariableDeclaration", - "scope": 1963, - "src": "1313:11:16", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 1953, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "1313:6:16", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1956, - "mutability": "mutable", - "name": "_msgType", - "nameLocation": "1341:8:16", - "nodeType": "VariableDeclaration", - "scope": 1963, - "src": "1334:15:16", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - }, - "typeName": { - "id": 1955, - "name": "uint16", - "nodeType": "ElementaryTypeName", - "src": "1334:6:16", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1958, - "mutability": "mutable", - "name": "_extraOptions", - "nameLocation": "1374:13:16", - "nodeType": "VariableDeclaration", - "scope": 1963, - "src": "1359:28:16", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 1957, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "1359:5:16", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "1303:90:16" - }, - "returnParameters": { - "id": 1962, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1961, - "mutability": "mutable", - "name": "options", - "nameLocation": "1430:7:16", - "nodeType": "VariableDeclaration", - "scope": 1963, - "src": "1417:20:16", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 1960, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "1417:5:16", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "1416:22:16" - }, - "scope": 1964, - "src": "1280:159:16", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - } - ], - "scope": 1965, - "src": "407:1034:16", - "usedErrors": [1937], - "usedEvents": [1943] - } - ], - "src": "33:1409:16" - }, - "id": 16 - }, - "@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppReceiver.sol": { - "ast": { - "absolutePath": "@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppReceiver.sol", - "exportedSymbols": { - "ILayerZeroReceiver": [238], - "IOAppReceiver": [1985], - "Origin": [40] - }, - "id": 1986, - "license": "MIT", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 1966, - "literals": ["solidity", "^", "0.8", ".20"], - "nodeType": "PragmaDirective", - "src": "32:24:17" - }, - { - "absolutePath": "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol", - "file": "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol", - "id": 1969, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 1986, - "sourceUnit": 239, - "src": "58:123:17", - "symbolAliases": [ - { - "foreign": { - "id": 1967, - "name": "ILayerZeroReceiver", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 238, - "src": "67:18:17", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - }, - { - "foreign": { - "id": 1968, - "name": "Origin", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 40, - "src": "87:6:17", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "abstract": false, - "baseContracts": [ - { - "baseName": { - "id": 1970, - "name": "ILayerZeroReceiver", - "nameLocations": ["210:18:17"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 238, - "src": "210:18:17" - }, - "id": 1971, - "nodeType": "InheritanceSpecifier", - "src": "210:18:17" - } - ], - "canonicalName": "IOAppReceiver", - "contractDependencies": [], - "contractKind": "interface", - "fullyImplemented": false, - "id": 1985, - "linearizedBaseContracts": [1985, 238], - "name": "IOAppReceiver", - "nameLocation": "193:13:17", - "nodeType": "ContractDefinition", - "nodes": [ - { - "documentation": { - "id": 1972, - "nodeType": "StructuredDocumentation", - "src": "235:670:17", - "text": " @notice Indicates whether an address is an approved composeMsg sender to the Endpoint.\n @param _origin The origin information containing the source endpoint and sender address.\n - srcEid: The source chain endpoint ID.\n - sender: The sender address on the src chain.\n - nonce: The nonce of the message.\n @param _message The lzReceive payload.\n @param _sender The sender address.\n @return isSender Is a valid sender.\n @dev Applications can optionally choose to implement a separate composeMsg sender that is NOT the bridging layer.\n @dev The default sender IS the OAppReceiver implementer." - }, - "functionSelector": "82413eac", - "id": 1984, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "isComposeMsgSender", - "nameLocation": "919:18:17", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1980, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1975, - "mutability": "mutable", - "name": "_origin", - "nameLocation": "963:7:17", - "nodeType": "VariableDeclaration", - "scope": 1984, - "src": "947:23:17", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Origin_$40_calldata_ptr", - "typeString": "struct Origin" - }, - "typeName": { - "id": 1974, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 1973, - "name": "Origin", - "nameLocations": ["947:6:17"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 40, - "src": "947:6:17" - }, - "referencedDeclaration": 40, - "src": "947:6:17", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Origin_$40_storage_ptr", - "typeString": "struct Origin" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1977, - "mutability": "mutable", - "name": "_message", - "nameLocation": "995:8:17", - "nodeType": "VariableDeclaration", - "scope": 1984, - "src": "980:23:17", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 1976, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "980:5:17", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 1979, - "mutability": "mutable", - "name": "_sender", - "nameLocation": "1021:7:17", - "nodeType": "VariableDeclaration", - "scope": 1984, - "src": "1013:15:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 1978, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1013:7:17", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "937:97:17" - }, - "returnParameters": { - "id": 1983, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1982, - "mutability": "mutable", - "name": "isSender", - "nameLocation": "1063:8:17", - "nodeType": "VariableDeclaration", - "scope": 1984, - "src": "1058:13:17", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 1981, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "1058:4:17", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "1057:15:17" - }, - "scope": 1985, - "src": "910:163:17", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - } - ], - "scope": 1986, - "src": "183:892:17", - "usedErrors": [], - "usedEvents": [] - } - ], - "src": "32:1044:17" - }, - "id": 17 - }, - "@layerzerolabs/oapp-evm/contracts/oapp/libs/OAppOptionsType3.sol": { - "ast": { - "absolutePath": "@layerzerolabs/oapp-evm/contracts/oapp/libs/OAppOptionsType3.sol", - "exportedSymbols": { - "EnforcedOptionParam": [1932], - "IOAppOptionsType3": [1964], - "OAppOptionsType3": [2149], - "Ownable": [3976] - }, - "id": 2150, - "license": "MIT", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 1987, - "literals": ["solidity", "^", "0.8", ".20"], - "nodeType": "PragmaDirective", - "src": "33:24:18" - }, - { - "absolutePath": "@openzeppelin/contracts/access/Ownable.sol", - "file": "@openzeppelin/contracts/access/Ownable.sol", - "id": 1989, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 2150, - "sourceUnit": 3977, - "src": "59:69:18", - "symbolAliases": [ - { - "foreign": { - "id": 1988, - "name": "Ownable", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3976, - "src": "68:7:18", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppOptionsType3.sol", - "file": "../interfaces/IOAppOptionsType3.sol", - "id": 1992, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 2150, - "sourceUnit": 1965, - "src": "129:93:18", - "symbolAliases": [ - { - "foreign": { - "id": 1990, - "name": "IOAppOptionsType3", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1964, - "src": "138:17:18", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - }, - { - "foreign": { - "id": 1991, - "name": "EnforcedOptionParam", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1932, - "src": "157:19:18", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "abstract": true, - "baseContracts": [ - { - "baseName": { - "id": 1994, - "name": "IOAppOptionsType3", - "nameLocations": ["389:17:18"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 1964, - "src": "389:17:18" - }, - "id": 1995, - "nodeType": "InheritanceSpecifier", - "src": "389:17:18" - }, - { - "baseName": { - "id": 1996, - "name": "Ownable", - "nameLocations": ["408:7:18"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 3976, - "src": "408:7:18" - }, - "id": 1997, - "nodeType": "InheritanceSpecifier", - "src": "408:7:18" - } - ], - "canonicalName": "OAppOptionsType3", - "contractDependencies": [], - "contractKind": "contract", - "documentation": { - "id": 1993, - "nodeType": "StructuredDocumentation", - "src": "224:126:18", - "text": " @title OAppOptionsType3\n @dev Abstract contract implementing the IOAppOptionsType3 interface with type 3 options." - }, - "fullyImplemented": true, - "id": 2149, - "linearizedBaseContracts": [2149, 3976, 5522, 1964], - "name": "OAppOptionsType3", - "nameLocation": "369:16:18", - "nodeType": "ContractDefinition", - "nodes": [ - { - "constant": true, - "id": 2000, - "mutability": "constant", - "name": "OPTION_TYPE_3", - "nameLocation": "447:13:18", - "nodeType": "VariableDeclaration", - "scope": 2149, - "src": "422:42:18", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - }, - "typeName": { - "id": 1998, - "name": "uint16", - "nodeType": "ElementaryTypeName", - "src": "422:6:18", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "value": { - "hexValue": "33", - "id": 1999, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "463:1:18", - "typeDescriptions": { - "typeIdentifier": "t_rational_3_by_1", - "typeString": "int_const 3" - }, - "value": "3" - }, - "visibility": "internal" - }, - { - "constant": false, - "functionSelector": "5535d461", - "id": 2006, - "mutability": "mutable", - "name": "enforcedOptions", - "nameLocation": "616:15:18", - "nodeType": "VariableDeclaration", - "scope": 2149, - "src": "538:93:18", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_uint32_$_t_mapping$_t_uint16_$_t_bytes_storage_$_$", - "typeString": "mapping(uint32 => mapping(uint16 => bytes))" - }, - "typeName": { - "id": 2005, - "keyName": "eid", - "keyNameLocation": "553:3:18", - "keyType": { - "id": 2001, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "546:6:18", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "nodeType": "Mapping", - "src": "538:70:18", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_uint32_$_t_mapping$_t_uint16_$_t_bytes_storage_$_$", - "typeString": "mapping(uint32 => mapping(uint16 => bytes))" - }, - "valueName": "", - "valueNameLocation": "-1:-1:-1", - "valueType": { - "id": 2004, - "keyName": "msgType", - "keyNameLocation": "575:7:18", - "keyType": { - "id": 2002, - "name": "uint16", - "nodeType": "ElementaryTypeName", - "src": "568:6:18", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "nodeType": "Mapping", - "src": "560:47:18", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_uint16_$_t_bytes_storage_$", - "typeString": "mapping(uint16 => bytes)" - }, - "valueName": "enforcedOption", - "valueNameLocation": "592:14:18", - "valueType": { - "id": 2003, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "586:5:18", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - } - } - }, - "visibility": "public" - }, - { - "baseFunctions": [1951], - "body": { - "id": 2020, - "nodeType": "Block", - "src": "1493:54:18", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 2017, - "name": "_enforcedOptions", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2011, - "src": "1523:16:18", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_EnforcedOptionParam_$1932_calldata_ptr_$dyn_calldata_ptr", - "typeString": "struct EnforcedOptionParam calldata[] calldata" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_array$_t_struct$_EnforcedOptionParam_$1932_calldata_ptr_$dyn_calldata_ptr", - "typeString": "struct EnforcedOptionParam calldata[] calldata" - } - ], - "id": 2016, - "name": "_setEnforcedOptions", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2071, - "src": "1503:19:18", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_struct$_EnforcedOptionParam_$1932_memory_ptr_$dyn_memory_ptr_$returns$__$", - "typeString": "function (struct EnforcedOptionParam memory[] memory)" - } - }, - "id": 2018, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1503:37:18", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2019, - "nodeType": "ExpressionStatement", - "src": "1503:37:18" - } - ] - }, - "documentation": { - "id": 2007, - "nodeType": "StructuredDocumentation", - "src": "638:748:18", - "text": " @dev Sets the enforced options for specific endpoint and message type combinations.\n @param _enforcedOptions An array of EnforcedOptionParam structures specifying enforced options.\n @dev Only the owner/admin of the OApp can call this function.\n @dev Provides a way for the OApp to enforce things like paying for PreCrime, AND/OR minimum dst lzReceive gas amounts etc.\n @dev These enforced options can vary as the potential options/execution on the remote may differ as per the msgType.\n eg. Amount of lzReceive() gas necessary to deliver a lzCompose() message adds overhead you dont want to pay\n if you are only making a standard LayerZero message ie. lzReceive() WITHOUT sendCompose()." - }, - "functionSelector": "b98bd070", - "id": 2021, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 2014, - "kind": "modifierInvocation", - "modifierName": { - "id": 2013, - "name": "onlyOwner", - "nameLocations": ["1483:9:18"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 3887, - "src": "1483:9:18" - }, - "nodeType": "ModifierInvocation", - "src": "1483:9:18" - } - ], - "name": "setEnforcedOptions", - "nameLocation": "1400:18:18", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2012, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2011, - "mutability": "mutable", - "name": "_enforcedOptions", - "nameLocation": "1450:16:18", - "nodeType": "VariableDeclaration", - "scope": 2021, - "src": "1419:47:18", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_EnforcedOptionParam_$1932_calldata_ptr_$dyn_calldata_ptr", - "typeString": "struct EnforcedOptionParam[]" - }, - "typeName": { - "baseType": { - "id": 2009, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 2008, - "name": "EnforcedOptionParam", - "nameLocations": ["1419:19:18"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 1932, - "src": "1419:19:18" - }, - "referencedDeclaration": 1932, - "src": "1419:19:18", - "typeDescriptions": { - "typeIdentifier": "t_struct$_EnforcedOptionParam_$1932_storage_ptr", - "typeString": "struct EnforcedOptionParam" - } - }, - "id": 2010, - "nodeType": "ArrayTypeName", - "src": "1419:21:18", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_EnforcedOptionParam_$1932_storage_$dyn_storage_ptr", - "typeString": "struct EnforcedOptionParam[]" - } - }, - "visibility": "internal" - } - ], - "src": "1418:49:18" - }, - "returnParameters": { - "id": 2015, - "nodeType": "ParameterList", - "parameters": [], - "src": "1493:0:18" - }, - "scope": 2149, - "src": "1391:156:18", - "stateMutability": "nonpayable", - "virtual": true, - "visibility": "public" - }, - { - "body": { - "id": 2070, - "nodeType": "Block", - "src": "2330:421:18", - "statements": [ - { - "body": { - "id": 2064, - "nodeType": "Block", - "src": "2394:300:18", - "statements": [ - { - "expression": { - "arguments": [ - { - "expression": { - "baseExpression": { - "id": 2041, - "name": "_enforcedOptions", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2026, - "src": "2542:16:18", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_EnforcedOptionParam_$1932_memory_ptr_$dyn_memory_ptr", - "typeString": "struct EnforcedOptionParam memory[] memory" - } - }, - "id": 2043, - "indexExpression": { - "id": 2042, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2030, - "src": "2559:1:18", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "2542:19:18", - "typeDescriptions": { - "typeIdentifier": "t_struct$_EnforcedOptionParam_$1932_memory_ptr", - "typeString": "struct EnforcedOptionParam memory" - } - }, - "id": 2044, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2562:7:18", - "memberName": "options", - "nodeType": "MemberAccess", - "referencedDeclaration": 1931, - "src": "2542:27:18", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "id": 2040, - "name": "_assertOptionsType3", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2148, - "src": "2522:19:18", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$__$", - "typeString": "function (bytes memory) pure" - } - }, - "id": 2045, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2522:48:18", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2046, - "nodeType": "ExpressionStatement", - "src": "2522:48:18" - }, - { - "expression": { - "id": 2062, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "baseExpression": { - "baseExpression": { - "id": 2047, - "name": "enforcedOptions", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2006, - "src": "2584:15:18", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_uint32_$_t_mapping$_t_uint16_$_t_bytes_storage_$_$", - "typeString": "mapping(uint32 => mapping(uint16 => bytes storage ref))" - } - }, - "id": 2056, - "indexExpression": { - "expression": { - "baseExpression": { - "id": 2048, - "name": "_enforcedOptions", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2026, - "src": "2600:16:18", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_EnforcedOptionParam_$1932_memory_ptr_$dyn_memory_ptr", - "typeString": "struct EnforcedOptionParam memory[] memory" - } - }, - "id": 2050, - "indexExpression": { - "id": 2049, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2030, - "src": "2617:1:18", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "2600:19:18", - "typeDescriptions": { - "typeIdentifier": "t_struct$_EnforcedOptionParam_$1932_memory_ptr", - "typeString": "struct EnforcedOptionParam memory" - } - }, - "id": 2051, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2620:3:18", - "memberName": "eid", - "nodeType": "MemberAccess", - "referencedDeclaration": 1927, - "src": "2600:23:18", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "2584:40:18", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_uint16_$_t_bytes_storage_$", - "typeString": "mapping(uint16 => bytes storage ref)" - } - }, - "id": 2057, - "indexExpression": { - "expression": { - "baseExpression": { - "id": 2052, - "name": "_enforcedOptions", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2026, - "src": "2625:16:18", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_EnforcedOptionParam_$1932_memory_ptr_$dyn_memory_ptr", - "typeString": "struct EnforcedOptionParam memory[] memory" - } - }, - "id": 2054, - "indexExpression": { - "id": 2053, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2030, - "src": "2642:1:18", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "2625:19:18", - "typeDescriptions": { - "typeIdentifier": "t_struct$_EnforcedOptionParam_$1932_memory_ptr", - "typeString": "struct EnforcedOptionParam memory" - } - }, - "id": 2055, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2645:7:18", - "memberName": "msgType", - "nodeType": "MemberAccess", - "referencedDeclaration": 1929, - "src": "2625:27:18", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "2584:69:18", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage", - "typeString": "bytes storage ref" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "expression": { - "baseExpression": { - "id": 2058, - "name": "_enforcedOptions", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2026, - "src": "2656:16:18", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_EnforcedOptionParam_$1932_memory_ptr_$dyn_memory_ptr", - "typeString": "struct EnforcedOptionParam memory[] memory" - } - }, - "id": 2060, - "indexExpression": { - "id": 2059, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2030, - "src": "2673:1:18", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "2656:19:18", - "typeDescriptions": { - "typeIdentifier": "t_struct$_EnforcedOptionParam_$1932_memory_ptr", - "typeString": "struct EnforcedOptionParam memory" - } - }, - "id": 2061, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2676:7:18", - "memberName": "options", - "nodeType": "MemberAccess", - "referencedDeclaration": 1931, - "src": "2656:27:18", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - "src": "2584:99:18", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage", - "typeString": "bytes storage ref" - } - }, - "id": 2063, - "nodeType": "ExpressionStatement", - "src": "2584:99:18" - } - ] - }, - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 2036, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 2033, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2030, - "src": "2360:1:18", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "expression": { - "id": 2034, - "name": "_enforcedOptions", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2026, - "src": "2364:16:18", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_EnforcedOptionParam_$1932_memory_ptr_$dyn_memory_ptr", - "typeString": "struct EnforcedOptionParam memory[] memory" - } - }, - "id": 2035, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2381:6:18", - "memberName": "length", - "nodeType": "MemberAccess", - "src": "2364:23:18", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "2360:27:18", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 2065, - "initializationExpression": { - "assignments": [2030], - "declarations": [ - { - "constant": false, - "id": 2030, - "mutability": "mutable", - "name": "i", - "nameLocation": "2353:1:18", - "nodeType": "VariableDeclaration", - "scope": 2065, - "src": "2345:9:18", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2029, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2345:7:18", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 2032, - "initialValue": { - "hexValue": "30", - "id": 2031, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2357:1:18", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "nodeType": "VariableDeclarationStatement", - "src": "2345:13:18" - }, - "isSimpleCounterLoop": true, - "loopExpression": { - "expression": { - "id": 2038, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "++", - "prefix": false, - "src": "2389:3:18", - "subExpression": { - "id": 2037, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2030, - "src": "2389:1:18", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 2039, - "nodeType": "ExpressionStatement", - "src": "2389:3:18" - }, - "nodeType": "ForStatement", - "src": "2340:354:18" - }, - { - "eventCall": { - "arguments": [ - { - "id": 2067, - "name": "_enforcedOptions", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2026, - "src": "2727:16:18", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_EnforcedOptionParam_$1932_memory_ptr_$dyn_memory_ptr", - "typeString": "struct EnforcedOptionParam memory[] memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_array$_t_struct$_EnforcedOptionParam_$1932_memory_ptr_$dyn_memory_ptr", - "typeString": "struct EnforcedOptionParam memory[] memory" - } - ], - "id": 2066, - "name": "EnforcedOptionSet", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1943, - "src": "2709:17:18", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_array$_t_struct$_EnforcedOptionParam_$1932_memory_ptr_$dyn_memory_ptr_$returns$__$", - "typeString": "function (struct EnforcedOptionParam memory[] memory)" - } - }, - "id": 2068, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2709:35:18", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2069, - "nodeType": "EmitStatement", - "src": "2704:40:18" - } - ] - }, - "documentation": { - "id": 2022, - "nodeType": "StructuredDocumentation", - "src": "1553:679:18", - "text": " @dev Sets the enforced options for specific endpoint and message type combinations.\n @param _enforcedOptions An array of EnforcedOptionParam structures specifying enforced options.\n @dev Provides a way for the OApp to enforce things like paying for PreCrime, AND/OR minimum dst lzReceive gas amounts etc.\n @dev These enforced options can vary as the potential options/execution on the remote may differ as per the msgType.\n eg. Amount of lzReceive() gas necessary to deliver a lzCompose() message adds overhead you dont want to pay\n if you are only making a standard LayerZero message ie. lzReceive() WITHOUT sendCompose()." - }, - "id": 2071, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_setEnforcedOptions", - "nameLocation": "2246:19:18", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2027, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2026, - "mutability": "mutable", - "name": "_enforcedOptions", - "nameLocation": "2295:16:18", - "nodeType": "VariableDeclaration", - "scope": 2071, - "src": "2266:45:18", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_EnforcedOptionParam_$1932_memory_ptr_$dyn_memory_ptr", - "typeString": "struct EnforcedOptionParam[]" - }, - "typeName": { - "baseType": { - "id": 2024, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 2023, - "name": "EnforcedOptionParam", - "nameLocations": ["2266:19:18"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 1932, - "src": "2266:19:18" - }, - "referencedDeclaration": 1932, - "src": "2266:19:18", - "typeDescriptions": { - "typeIdentifier": "t_struct$_EnforcedOptionParam_$1932_storage_ptr", - "typeString": "struct EnforcedOptionParam" - } - }, - "id": 2025, - "nodeType": "ArrayTypeName", - "src": "2266:21:18", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_EnforcedOptionParam_$1932_storage_$dyn_storage_ptr", - "typeString": "struct EnforcedOptionParam[]" - } - }, - "visibility": "internal" - } - ], - "src": "2265:47:18" - }, - "returnParameters": { - "id": 2028, - "nodeType": "ParameterList", - "parameters": [], - "src": "2330:0:18" - }, - "scope": 2149, - "src": "2237:514:18", - "stateMutability": "nonpayable", - "virtual": true, - "visibility": "internal" - }, - { - "baseFunctions": [1963], - "body": { - "id": 2128, - "nodeType": "Block", - "src": "3667:824:18", - "statements": [ - { - "assignments": [2084], - "declarations": [ - { - "constant": false, - "id": 2084, - "mutability": "mutable", - "name": "enforced", - "nameLocation": "3690:8:18", - "nodeType": "VariableDeclaration", - "scope": 2128, - "src": "3677:21:18", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 2083, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "3677:5:18", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "id": 2090, - "initialValue": { - "baseExpression": { - "baseExpression": { - "id": 2085, - "name": "enforcedOptions", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2006, - "src": "3701:15:18", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_uint32_$_t_mapping$_t_uint16_$_t_bytes_storage_$_$", - "typeString": "mapping(uint32 => mapping(uint16 => bytes storage ref))" - } - }, - "id": 2087, - "indexExpression": { - "id": 2086, - "name": "_eid", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2074, - "src": "3717:4:18", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "3701:21:18", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_uint16_$_t_bytes_storage_$", - "typeString": "mapping(uint16 => bytes storage ref)" - } - }, - "id": 2089, - "indexExpression": { - "id": 2088, - "name": "_msgType", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2076, - "src": "3723:8:18", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "3701:31:18", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage", - "typeString": "bytes storage ref" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "3677:55:18" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 2094, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 2091, - "name": "enforced", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2084, - "src": "3861:8:18", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - "id": 2092, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3870:6:18", - "memberName": "length", - "nodeType": "MemberAccess", - "src": "3861:15:18", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "hexValue": "30", - "id": 2093, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3880:1:18", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "3861:20:18", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 2097, - "nodeType": "IfStatement", - "src": "3857:46:18", - "trueBody": { - "expression": { - "id": 2095, - "name": "_extraOptions", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2078, - "src": "3890:13:18", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - }, - "functionReturnParameters": 2082, - "id": 2096, - "nodeType": "Return", - "src": "3883:20:18" - } - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 2101, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 2098, - "name": "_extraOptions", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2078, - "src": "3964:13:18", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - }, - "id": 2099, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3978:6:18", - "memberName": "length", - "nodeType": "MemberAccess", - "src": "3964:20:18", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "hexValue": "30", - "id": 2100, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3988:1:18", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "3964:25:18", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 2104, - "nodeType": "IfStatement", - "src": "3960:46:18", - "trueBody": { - "expression": { - "id": 2102, - "name": "enforced", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2084, - "src": "3998:8:18", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - "functionReturnParameters": 2082, - "id": 2103, - "nodeType": "Return", - "src": "3991:15:18" - } - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 2108, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 2105, - "name": "_extraOptions", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2078, - "src": "4129:13:18", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - }, - "id": 2106, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "4143:6:18", - "memberName": "length", - "nodeType": "MemberAccess", - "src": "4129:20:18", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">=", - "rightExpression": { - "hexValue": "32", - "id": 2107, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "4153:1:18", - "typeDescriptions": { - "typeIdentifier": "t_rational_2_by_1", - "typeString": "int_const 2" - }, - "value": "2" - }, - "src": "4129:25:18", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 2123, - "nodeType": "IfStatement", - "src": "4125:267:18", - "trueBody": { - "id": 2122, - "nodeType": "Block", - "src": "4156:236:18", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 2110, - "name": "_extraOptions", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2078, - "src": "4190:13:18", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - ], - "id": 2109, - "name": "_assertOptionsType3", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2148, - "src": "4170:19:18", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$__$", - "typeString": "function (bytes memory) pure" - } - }, - "id": 2111, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4170:34:18", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2112, - "nodeType": "ExpressionStatement", - "src": "4170:34:18" - }, - { - "expression": { - "arguments": [ - { - "id": 2116, - "name": "enforced", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2084, - "src": "4353:8:18", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - { - "baseExpression": { - "id": 2117, - "name": "_extraOptions", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2078, - "src": "4363:13:18", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - }, - "id": 2119, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexRangeAccess", - "src": "4363:17:18", - "startExpression": { - "hexValue": "32", - "id": 2118, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "4377:1:18", - "typeDescriptions": { - "typeIdentifier": "t_rational_2_by_1", - "typeString": "int_const 2" - }, - "value": "2" - }, - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr_slice", - "typeString": "bytes calldata slice" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - }, - { - "typeIdentifier": "t_bytes_calldata_ptr_slice", - "typeString": "bytes calldata slice" - } - ], - "expression": { - "id": 2114, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "4340:5:18", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_bytes_storage_ptr_$", - "typeString": "type(bytes storage pointer)" - }, - "typeName": { - "id": 2113, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "4340:5:18", - "typeDescriptions": {} - } - }, - "id": 2115, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "4346:6:18", - "memberName": "concat", - "nodeType": "MemberAccess", - "src": "4340:12:18", - "typeDescriptions": { - "typeIdentifier": "t_function_bytesconcat_pure$__$returns$_t_bytes_memory_ptr_$", - "typeString": "function () pure returns (bytes memory)" - } - }, - "id": 2120, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4340:41:18", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - "functionReturnParameters": 2082, - "id": 2121, - "nodeType": "Return", - "src": "4333:48:18" - } - ] - } - }, - { - "errorCall": { - "arguments": [ - { - "id": 2125, - "name": "_extraOptions", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2078, - "src": "4470:13:18", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - ], - "id": 2124, - "name": "InvalidOptions", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1937, - "src": "4455:14:18", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$_t_bytes_memory_ptr_$returns$__$", - "typeString": "function (bytes memory) pure" - } - }, - "id": 2126, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4455:29:18", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2127, - "nodeType": "RevertStatement", - "src": "4448:36:18" - } - ] - }, - "documentation": { - "id": 2072, - "nodeType": "StructuredDocumentation", - "src": "2757:748:18", - "text": " @notice Combines options for a given endpoint and message type.\n @param _eid The endpoint ID.\n @param _msgType The OAPP message type.\n @param _extraOptions Additional options passed by the caller.\n @return options The combination of caller specified options AND enforced options.\n @dev If there is an enforced lzReceive option:\n - {gasLimit: 200k, msg.value: 1 ether} AND a caller supplies a lzReceive option: {gasLimit: 100k, msg.value: 0.5 ether}\n - The resulting options will be {gasLimit: 300k, msg.value: 1.5 ether} when the message is executed on the remote lzReceive() function.\n @dev This presence of duplicated options is handled off-chain in the verifier/executor." - }, - "functionSelector": "bc70b354", - "id": 2129, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "combineOptions", - "nameLocation": "3519:14:18", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2079, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2074, - "mutability": "mutable", - "name": "_eid", - "nameLocation": "3550:4:18", - "nodeType": "VariableDeclaration", - "scope": 2129, - "src": "3543:11:18", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 2073, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "3543:6:18", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2076, - "mutability": "mutable", - "name": "_msgType", - "nameLocation": "3571:8:18", - "nodeType": "VariableDeclaration", - "scope": 2129, - "src": "3564:15:18", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - }, - "typeName": { - "id": 2075, - "name": "uint16", - "nodeType": "ElementaryTypeName", - "src": "3564:6:18", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2078, - "mutability": "mutable", - "name": "_extraOptions", - "nameLocation": "3604:13:18", - "nodeType": "VariableDeclaration", - "scope": 2129, - "src": "3589:28:18", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 2077, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "3589:5:18", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "3533:90:18" - }, - "returnParameters": { - "id": 2082, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2081, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 2129, - "src": "3653:12:18", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 2080, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "3653:5:18", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "3652:14:18" - }, - "scope": 2149, - "src": "3510:981:18", - "stateMutability": "view", - "virtual": true, - "visibility": "public" - }, - { - "body": { - "id": 2147, - "nodeType": "Block", - "src": "4705:190:18", - "statements": [ - { - "assignments": [2136], - "declarations": [ - { - "constant": false, - "id": 2136, - "mutability": "mutable", - "name": "optionsType", - "nameLocation": "4722:11:18", - "nodeType": "VariableDeclaration", - "scope": 2147, - "src": "4715:18:18", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - }, - "typeName": { - "id": 2135, - "name": "uint16", - "nodeType": "ElementaryTypeName", - "src": "4715:6:18", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "visibility": "internal" - } - ], - "id": 2137, - "nodeType": "VariableDeclarationStatement", - "src": "4715:18:18" - }, - { - "AST": { - "nativeSrc": "4752:62:18", - "nodeType": "YulBlock", - "src": "4752:62:18", - "statements": [ - { - "nativeSrc": "4766:38:18", - "nodeType": "YulAssignment", - "src": "4766:38:18", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "_options", - "nativeSrc": "4791:8:18", - "nodeType": "YulIdentifier", - "src": "4791:8:18" - }, - { - "kind": "number", - "nativeSrc": "4801:1:18", - "nodeType": "YulLiteral", - "src": "4801:1:18", - "type": "", - "value": "2" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "4787:3:18", - "nodeType": "YulIdentifier", - "src": "4787:3:18" - }, - "nativeSrc": "4787:16:18", - "nodeType": "YulFunctionCall", - "src": "4787:16:18" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "4781:5:18", - "nodeType": "YulIdentifier", - "src": "4781:5:18" - }, - "nativeSrc": "4781:23:18", - "nodeType": "YulFunctionCall", - "src": "4781:23:18" - }, - "variableNames": [ - { - "name": "optionsType", - "nativeSrc": "4766:11:18", - "nodeType": "YulIdentifier", - "src": "4766:11:18" - } - ] - } - ] - }, - "evmVersion": "paris", - "externalReferences": [ - { - "declaration": 2132, - "isOffset": false, - "isSlot": false, - "src": "4791:8:18", - "valueSize": 1 - }, - { - "declaration": 2136, - "isOffset": false, - "isSlot": false, - "src": "4766:11:18", - "valueSize": 1 - } - ], - "id": 2138, - "nodeType": "InlineAssembly", - "src": "4743:71:18" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - }, - "id": 2141, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 2139, - "name": "optionsType", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2136, - "src": "4827:11:18", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "id": 2140, - "name": "OPTION_TYPE_3", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2000, - "src": "4842:13:18", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "src": "4827:28:18", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 2146, - "nodeType": "IfStatement", - "src": "4823:65:18", - "trueBody": { - "errorCall": { - "arguments": [ - { - "id": 2143, - "name": "_options", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2132, - "src": "4879:8:18", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "id": 2142, - "name": "InvalidOptions", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1937, - "src": "4864:14:18", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$_t_bytes_memory_ptr_$returns$__$", - "typeString": "function (bytes memory) pure" - } - }, - "id": 2144, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4864:24:18", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2145, - "nodeType": "RevertStatement", - "src": "4857:31:18" - } - } - ] - }, - "documentation": { - "id": 2130, - "nodeType": "StructuredDocumentation", - "src": "4497:129:18", - "text": " @dev Internal function to assert that options are of type 3.\n @param _options The options to be checked." - }, - "id": 2148, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_assertOptionsType3", - "nameLocation": "4640:19:18", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2133, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2132, - "mutability": "mutable", - "name": "_options", - "nameLocation": "4673:8:18", - "nodeType": "VariableDeclaration", - "scope": 2148, - "src": "4660:21:18", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 2131, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "4660:5:18", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "4659:23:18" - }, - "returnParameters": { - "id": 2134, - "nodeType": "ParameterList", - "parameters": [], - "src": "4705:0:18" - }, - "scope": 2149, - "src": "4631:264:18", - "stateMutability": "pure", - "virtual": true, - "visibility": "internal" - } - ], - "scope": 2150, - "src": "351:4546:18", - "usedErrors": [1937, 3842, 3847], - "usedEvents": [1943, 3853] - } - ], - "src": "33:4865:18" - }, - "id": 18 - }, - "@layerzerolabs/oapp-evm/contracts/precrime/OAppPreCrimeSimulator.sol": { - "ast": { - "absolutePath": "@layerzerolabs/oapp-evm/contracts/precrime/OAppPreCrimeSimulator.sol", - "exportedSymbols": { - "IOAppPreCrimeSimulator": [2377], - "IPreCrime": [2461], - "InboundPacket": [2486], - "OAppPreCrimeSimulator": [2323], - "Origin": [40], - "Ownable": [3976] - }, - "id": 2324, - "license": "MIT", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 2151, - "literals": ["solidity", "^", "0.8", ".20"], - "nodeType": "PragmaDirective", - "src": "33:24:19" - }, - { - "absolutePath": "@openzeppelin/contracts/access/Ownable.sol", - "file": "@openzeppelin/contracts/access/Ownable.sol", - "id": 2153, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 2324, - "sourceUnit": 3977, - "src": "59:69:19", - "symbolAliases": [ - { - "foreign": { - "id": 2152, - "name": "Ownable", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3976, - "src": "68:7:19", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IPreCrime.sol", - "file": "./interfaces/IPreCrime.sol", - "id": 2155, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 2324, - "sourceUnit": 2462, - "src": "129:55:19", - "symbolAliases": [ - { - "foreign": { - "id": 2154, - "name": "IPreCrime", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2461, - "src": "138:9:19", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IOAppPreCrimeSimulator.sol", - "file": "./interfaces/IOAppPreCrimeSimulator.sol", - "id": 2159, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 2324, - "sourceUnit": 2378, - "src": "185:104:19", - "symbolAliases": [ - { - "foreign": { - "id": 2156, - "name": "IOAppPreCrimeSimulator", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2377, - "src": "194:22:19", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - }, - { - "foreign": { - "id": 2157, - "name": "InboundPacket", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2486, - "src": "218:13:19", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - }, - { - "foreign": { - "id": 2158, - "name": "Origin", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 40, - "src": "233:6:19", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "abstract": true, - "baseContracts": [ - { - "baseName": { - "id": 2161, - "name": "IOAppPreCrimeSimulator", - "nameLocations": ["470:22:19"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 2377, - "src": "470:22:19" - }, - "id": 2162, - "nodeType": "InheritanceSpecifier", - "src": "470:22:19" - }, - { - "baseName": { - "id": 2163, - "name": "Ownable", - "nameLocations": ["494:7:19"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 3976, - "src": "494:7:19" - }, - "id": 2164, - "nodeType": "InheritanceSpecifier", - "src": "494:7:19" - } - ], - "canonicalName": "OAppPreCrimeSimulator", - "contractDependencies": [], - "contractKind": "contract", - "documentation": { - "id": 2160, - "nodeType": "StructuredDocumentation", - "src": "291:135:19", - "text": " @title OAppPreCrimeSimulator\n @dev Abstract contract serving as the base for preCrime simulation functionality in an OApp." - }, - "fullyImplemented": false, - "id": 2323, - "linearizedBaseContracts": [2323, 3976, 5522, 2377], - "name": "OAppPreCrimeSimulator", - "nameLocation": "445:21:19", - "nodeType": "ContractDefinition", - "nodes": [ - { - "baseFunctions": [2346], - "constant": false, - "functionSelector": "b731ea0a", - "id": 2166, - "mutability": "mutable", - "name": "preCrime", - "nameLocation": "574:8:19", - "nodeType": "VariableDeclaration", - "scope": 2323, - "src": "559:23:19", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2165, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "559:7:19", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "public" - }, - { - "baseFunctions": [2352], - "body": { - "id": 2177, - "nodeType": "Block", - "src": "931:37:19", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 2174, - "name": "this", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967268, - "src": "956:4:19", - "typeDescriptions": { - "typeIdentifier": "t_contract$_OAppPreCrimeSimulator_$2323", - "typeString": "contract OAppPreCrimeSimulator" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_OAppPreCrimeSimulator_$2323", - "typeString": "contract OAppPreCrimeSimulator" - } - ], - "id": 2173, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "948:7:19", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 2172, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "948:7:19", - "typeDescriptions": {} - } - }, - "id": 2175, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "948:13:19", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "functionReturnParameters": 2171, - "id": 2176, - "nodeType": "Return", - "src": "941:20:19" - } - ] - }, - "documentation": { - "id": 2167, - "nodeType": "StructuredDocumentation", - "src": "589:281:19", - "text": " @dev Retrieves the address of the OApp contract.\n @return The address of the OApp contract.\n @dev The simulator contract is the base contract for the OApp by default.\n @dev If the simulator is a separate contract, override this function." - }, - "functionSelector": "52ae2879", - "id": 2178, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "oApp", - "nameLocation": "884:4:19", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2168, - "nodeType": "ParameterList", - "parameters": [], - "src": "888:2:19" - }, - "returnParameters": { - "id": 2171, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2170, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 2178, - "src": "922:7:19", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2169, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "922:7:19", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "921:9:19" - }, - "scope": 2323, - "src": "875:93:19", - "stateMutability": "view", - "virtual": true, - "visibility": "external" - }, - { - "baseFunctions": [2358], - "body": { - "id": 2194, - "nodeType": "Block", - "src": "1165:74:19", - "statements": [ - { - "expression": { - "id": 2188, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 2186, - "name": "preCrime", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2166, - "src": "1175:8:19", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 2187, - "name": "_preCrime", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2181, - "src": "1186:9:19", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "1175:20:19", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 2189, - "nodeType": "ExpressionStatement", - "src": "1175:20:19" - }, - { - "eventCall": { - "arguments": [ - { - "id": 2191, - "name": "_preCrime", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2181, - "src": "1222:9:19", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 2190, - "name": "PreCrimeSet", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2340, - "src": "1210:11:19", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$", - "typeString": "function (address)" - } - }, - "id": 2192, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1210:22:19", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2193, - "nodeType": "EmitStatement", - "src": "1205:27:19" - } - ] - }, - "documentation": { - "id": 2179, - "nodeType": "StructuredDocumentation", - "src": "974:121:19", - "text": " @dev Sets the preCrime contract address.\n @param _preCrime The address of the preCrime contract." - }, - "functionSelector": "d4243885", - "id": 2195, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 2184, - "kind": "modifierInvocation", - "modifierName": { - "id": 2183, - "name": "onlyOwner", - "nameLocations": ["1155:9:19"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 3887, - "src": "1155:9:19" - }, - "nodeType": "ModifierInvocation", - "src": "1155:9:19" - } - ], - "name": "setPreCrime", - "nameLocation": "1109:11:19", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2182, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2181, - "mutability": "mutable", - "name": "_preCrime", - "nameLocation": "1129:9:19", - "nodeType": "VariableDeclaration", - "scope": 2195, - "src": "1121:17:19", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2180, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1121:7:19", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1120:19:19" - }, - "returnParameters": { - "id": 2185, - "nodeType": "ParameterList", - "parameters": [], - "src": "1165:0:19" - }, - "scope": 2323, - "src": "1100:139:19", - "stateMutability": "nonpayable", - "virtual": true, - "visibility": "public" - }, - { - "baseFunctions": [2366], - "body": { - "id": 2261, - "nodeType": "Block", - "src": "1784:1247:19", - "statements": [ - { - "body": { - "id": 2250, - "nodeType": "Block", - "src": "1840:991:19", - "statements": [ - { - "assignments": [2216], - "declarations": [ - { - "constant": false, - "id": 2216, - "mutability": "mutable", - "name": "packet", - "nameLocation": "1877:6:19", - "nodeType": "VariableDeclaration", - "scope": 2250, - "src": "1854:29:19", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_struct$_InboundPacket_$2486_calldata_ptr", - "typeString": "struct InboundPacket" - }, - "typeName": { - "id": 2215, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 2214, - "name": "InboundPacket", - "nameLocations": ["1854:13:19"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 2486, - "src": "1854:13:19" - }, - "referencedDeclaration": 2486, - "src": "1854:13:19", - "typeDescriptions": { - "typeIdentifier": "t_struct$_InboundPacket_$2486_storage_ptr", - "typeString": "struct InboundPacket" - } - }, - "visibility": "internal" - } - ], - "id": 2220, - "initialValue": { - "baseExpression": { - "id": 2217, - "name": "_packets", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2200, - "src": "1886:8:19", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_InboundPacket_$2486_calldata_ptr_$dyn_calldata_ptr", - "typeString": "struct InboundPacket calldata[] calldata" - } - }, - "id": 2219, - "indexExpression": { - "id": 2218, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2204, - "src": "1895:1:19", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "1886:11:19", - "typeDescriptions": { - "typeIdentifier": "t_struct$_InboundPacket_$2486_calldata_ptr", - "typeString": "struct InboundPacket calldata" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "1854:43:19" - }, - { - "condition": { - "id": 2229, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "!", - "prefix": true, - "src": "1979:51:19", - "subExpression": { - "arguments": [ - { - "expression": { - "expression": { - "id": 2222, - "name": "packet", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2216, - "src": "1987:6:19", - "typeDescriptions": { - "typeIdentifier": "t_struct$_InboundPacket_$2486_calldata_ptr", - "typeString": "struct InboundPacket calldata" - } - }, - "id": 2223, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "1994:6:19", - "memberName": "origin", - "nodeType": "MemberAccess", - "referencedDeclaration": 2471, - "src": "1987:13:19", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Origin_$40_calldata_ptr", - "typeString": "struct Origin calldata" - } - }, - "id": 2224, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2001:6:19", - "memberName": "srcEid", - "nodeType": "MemberAccess", - "referencedDeclaration": 35, - "src": "1987:20:19", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - { - "expression": { - "expression": { - "id": 2225, - "name": "packet", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2216, - "src": "2009:6:19", - "typeDescriptions": { - "typeIdentifier": "t_struct$_InboundPacket_$2486_calldata_ptr", - "typeString": "struct InboundPacket calldata" - } - }, - "id": 2226, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2016:6:19", - "memberName": "origin", - "nodeType": "MemberAccess", - "referencedDeclaration": 2471, - "src": "2009:13:19", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Origin_$40_calldata_ptr", - "typeString": "struct Origin calldata" - } - }, - "id": 2227, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2023:6:19", - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": 37, - "src": "2009:20:19", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "id": 2221, - "name": "isPeer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2322, - "src": "1980:6:19", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_uint32_$_t_bytes32_$returns$_t_bool_$", - "typeString": "function (uint32,bytes32) view returns (bool)" - } - }, - "id": 2228, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1980:50:19", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 2231, - "nodeType": "IfStatement", - "src": "1975:65:19", - "trueBody": { - "id": 2230, - "nodeType": "Continue", - "src": "2032:8:19" - } - }, - { - "expression": { - "arguments": [ - { - "expression": { - "id": 2238, - "name": "packet", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2216, - "src": "2665:6:19", - "typeDescriptions": { - "typeIdentifier": "t_struct$_InboundPacket_$2486_calldata_ptr", - "typeString": "struct InboundPacket calldata" - } - }, - "id": 2239, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2672:6:19", - "memberName": "origin", - "nodeType": "MemberAccess", - "referencedDeclaration": 2471, - "src": "2665:13:19", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Origin_$40_calldata_ptr", - "typeString": "struct Origin calldata" - } - }, - { - "expression": { - "id": 2240, - "name": "packet", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2216, - "src": "2696:6:19", - "typeDescriptions": { - "typeIdentifier": "t_struct$_InboundPacket_$2486_calldata_ptr", - "typeString": "struct InboundPacket calldata" - } - }, - "id": 2241, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2703:4:19", - "memberName": "guid", - "nodeType": "MemberAccess", - "referencedDeclaration": 2477, - "src": "2696:11:19", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "expression": { - "id": 2242, - "name": "packet", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2216, - "src": "2725:6:19", - "typeDescriptions": { - "typeIdentifier": "t_struct$_InboundPacket_$2486_calldata_ptr", - "typeString": "struct InboundPacket calldata" - } - }, - "id": 2243, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2732:7:19", - "memberName": "message", - "nodeType": "MemberAccess", - "referencedDeclaration": 2483, - "src": "2725:14:19", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - }, - { - "expression": { - "id": 2244, - "name": "packet", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2216, - "src": "2757:6:19", - "typeDescriptions": { - "typeIdentifier": "t_struct$_InboundPacket_$2486_calldata_ptr", - "typeString": "struct InboundPacket calldata" - } - }, - "id": 2245, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2764:8:19", - "memberName": "executor", - "nodeType": "MemberAccess", - "referencedDeclaration": 2481, - "src": "2757:15:19", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "expression": { - "id": 2246, - "name": "packet", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2216, - "src": "2790:6:19", - "typeDescriptions": { - "typeIdentifier": "t_struct$_InboundPacket_$2486_calldata_ptr", - "typeString": "struct InboundPacket calldata" - } - }, - "id": 2247, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2797:9:19", - "memberName": "extraData", - "nodeType": "MemberAccess", - "referencedDeclaration": 2485, - "src": "2790:16:19", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_struct$_Origin_$40_calldata_ptr", - "typeString": "struct Origin calldata" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_struct$_Origin_$40_calldata_ptr", - "typeString": "struct Origin calldata" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - ], - "expression": { - "id": 2232, - "name": "this", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967268, - "src": "2602:4:19", - "typeDescriptions": { - "typeIdentifier": "t_contract$_OAppPreCrimeSimulator_$2323", - "typeString": "contract OAppPreCrimeSimulator" - } - }, - "id": 2234, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2607:17:19", - "memberName": "lzReceiveSimulate", - "nodeType": "MemberAccess", - "referencedDeclaration": 2297, - "src": "2602:22:19", - "typeDescriptions": { - "typeIdentifier": "t_function_external_payable$_t_struct$_Origin_$40_memory_ptr_$_t_bytes32_$_t_bytes_memory_ptr_$_t_address_$_t_bytes_memory_ptr_$returns$__$", - "typeString": "function (struct Origin memory,bytes32,bytes memory,address,bytes memory) payable external" - } - }, - "id": 2237, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "names": ["value"], - "nodeType": "FunctionCallOptions", - "options": [ - { - "expression": { - "id": 2235, - "name": "packet", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2216, - "src": "2633:6:19", - "typeDescriptions": { - "typeIdentifier": "t_struct$_InboundPacket_$2486_calldata_ptr", - "typeString": "struct InboundPacket calldata" - } - }, - "id": 2236, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2640:5:19", - "memberName": "value", - "nodeType": "MemberAccess", - "referencedDeclaration": 2479, - "src": "2633:12:19", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "src": "2602:45:19", - "typeDescriptions": { - "typeIdentifier": "t_function_external_payable$_t_struct$_Origin_$40_memory_ptr_$_t_bytes32_$_t_bytes_memory_ptr_$_t_address_$_t_bytes_memory_ptr_$returns$__$value", - "typeString": "function (struct Origin memory,bytes32,bytes memory,address,bytes memory) payable external" - } - }, - "id": 2248, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2602:218:19", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2249, - "nodeType": "ExpressionStatement", - "src": "2602:218:19" - } - ] - }, - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 2210, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 2207, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2204, - "src": "1814:1:19", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "expression": { - "id": 2208, - "name": "_packets", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2200, - "src": "1818:8:19", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_InboundPacket_$2486_calldata_ptr_$dyn_calldata_ptr", - "typeString": "struct InboundPacket calldata[] calldata" - } - }, - "id": 2209, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "1827:6:19", - "memberName": "length", - "nodeType": "MemberAccess", - "src": "1818:15:19", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "1814:19:19", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 2251, - "initializationExpression": { - "assignments": [2204], - "declarations": [ - { - "constant": false, - "id": 2204, - "mutability": "mutable", - "name": "i", - "nameLocation": "1807:1:19", - "nodeType": "VariableDeclaration", - "scope": 2251, - "src": "1799:9:19", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2203, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1799:7:19", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 2206, - "initialValue": { - "hexValue": "30", - "id": 2205, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1811:1:19", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "nodeType": "VariableDeclarationStatement", - "src": "1799:13:19" - }, - "isSimpleCounterLoop": true, - "loopExpression": { - "expression": { - "id": 2212, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "++", - "prefix": false, - "src": "1835:3:19", - "subExpression": { - "id": 2211, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2204, - "src": "1835:1:19", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 2213, - "nodeType": "ExpressionStatement", - "src": "1835:3:19" - }, - "nodeType": "ForStatement", - "src": "1794:1037:19" - }, - { - "errorCall": { - "arguments": [ - { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "arguments": [ - { - "expression": { - "id": 2254, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967281, - "src": "2988:3:19", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 2255, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2992:6:19", - "memberName": "sender", - "nodeType": "MemberAccess", - "src": "2988:10:19", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 2253, - "name": "IPreCrime", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2461, - "src": "2978:9:19", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IPreCrime_$2461_$", - "typeString": "type(contract IPreCrime)" - } - }, - "id": 2256, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2978:21:19", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IPreCrime_$2461", - "typeString": "contract IPreCrime" - } - }, - "id": 2257, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3000:21:19", - "memberName": "buildSimulationResult", - "nodeType": "MemberAccess", - "referencedDeclaration": 2441, - "src": "2978:43:19", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_bytes_memory_ptr_$", - "typeString": "function () view external returns (bytes memory)" - } - }, - "id": 2258, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2978:45:19", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "id": 2252, - "name": "SimulationResult", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2333, - "src": "2961:16:19", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$_t_bytes_memory_ptr_$returns$__$", - "typeString": "function (bytes memory) pure" - } - }, - "id": 2259, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2961:63:19", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2260, - "nodeType": "RevertStatement", - "src": "2954:70:19" - } - ] - }, - "documentation": { - "id": 2196, - "nodeType": "StructuredDocumentation", - "src": "1245:448:19", - "text": " @dev Interface for pre-crime simulations. Always reverts at the end with the simulation results.\n @param _packets An array of InboundPacket objects representing received packets to be delivered.\n @dev WARNING: MUST revert at the end with the simulation results.\n @dev Gives the preCrime implementation the ability to mock sending packets to the lzReceive function,\n WITHOUT actually executing them." - }, - "functionSelector": "bd815db0", - "id": 2262, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "lzReceiveAndRevert", - "nameLocation": "1707:18:19", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2201, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2200, - "mutability": "mutable", - "name": "_packets", - "nameLocation": "1751:8:19", - "nodeType": "VariableDeclaration", - "scope": 2262, - "src": "1726:33:19", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_InboundPacket_$2486_calldata_ptr_$dyn_calldata_ptr", - "typeString": "struct InboundPacket[]" - }, - "typeName": { - "baseType": { - "id": 2198, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 2197, - "name": "InboundPacket", - "nameLocations": ["1726:13:19"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 2486, - "src": "1726:13:19" - }, - "referencedDeclaration": 2486, - "src": "1726:13:19", - "typeDescriptions": { - "typeIdentifier": "t_struct$_InboundPacket_$2486_storage_ptr", - "typeString": "struct InboundPacket" - } - }, - "id": 2199, - "nodeType": "ArrayTypeName", - "src": "1726:15:19", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_InboundPacket_$2486_storage_$dyn_storage_ptr", - "typeString": "struct InboundPacket[]" - } - }, - "visibility": "internal" - } - ], - "src": "1725:35:19" - }, - "returnParameters": { - "id": 2202, - "nodeType": "ParameterList", - "parameters": [], - "src": "1784:0:19" - }, - "scope": 2323, - "src": "1698:1333:19", - "stateMutability": "payable", - "virtual": true, - "visibility": "public" - }, - { - "body": { - "id": 2296, - "nodeType": "Block", - "src": "3888:200:19", - "statements": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 2283, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 2277, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967281, - "src": "3958:3:19", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 2278, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3962:6:19", - "memberName": "sender", - "nodeType": "MemberAccess", - "src": "3958:10:19", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "arguments": [ - { - "id": 2281, - "name": "this", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967268, - "src": "3980:4:19", - "typeDescriptions": { - "typeIdentifier": "t_contract$_OAppPreCrimeSimulator_$2323", - "typeString": "contract OAppPreCrimeSimulator" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_OAppPreCrimeSimulator_$2323", - "typeString": "contract OAppPreCrimeSimulator" - } - ], - "id": 2280, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "3972:7:19", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 2279, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3972:7:19", - "typeDescriptions": {} - } - }, - "id": 2282, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3972:13:19", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "3958:27:19", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 2287, - "nodeType": "IfStatement", - "src": "3954:50:19", - "trueBody": { - "errorCall": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 2284, - "name": "OnlySelf", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2335, - "src": "3994:8:19", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 2285, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3994:10:19", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2286, - "nodeType": "RevertStatement", - "src": "3987:17:19" - } - }, - { - "expression": { - "arguments": [ - { - "id": 2289, - "name": "_origin", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2266, - "src": "4033:7:19", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Origin_$40_calldata_ptr", - "typeString": "struct Origin calldata" - } - }, - { - "id": 2290, - "name": "_guid", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2268, - "src": "4042:5:19", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "id": 2291, - "name": "_message", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2270, - "src": "4049:8:19", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - }, - { - "id": 2292, - "name": "_executor", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2272, - "src": "4059:9:19", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 2293, - "name": "_extraData", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2274, - "src": "4070:10:19", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_struct$_Origin_$40_calldata_ptr", - "typeString": "struct Origin calldata" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - ], - "id": 2288, - "name": "_lzReceiveSimulate", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2312, - "src": "4014:18:19", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Origin_$40_calldata_ptr_$_t_bytes32_$_t_bytes_calldata_ptr_$_t_address_$_t_bytes_calldata_ptr_$returns$__$", - "typeString": "function (struct Origin calldata,bytes32,bytes calldata,address,bytes calldata)" - } - }, - "id": 2294, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4014:67:19", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2295, - "nodeType": "ExpressionStatement", - "src": "4014:67:19" - } - ] - }, - "documentation": { - "id": 2263, - "nodeType": "StructuredDocumentation", - "src": "3037:637:19", - "text": " @dev Is effectively an internal function because msg.sender must be address(this).\n Allows resetting the call stack for 'internal' calls.\n @param _origin The origin information containing the source endpoint and sender address.\n - srcEid: The source chain endpoint ID.\n - sender: The sender address on the src chain.\n - nonce: The nonce of the message.\n @param _guid The unique identifier of the packet.\n @param _message The message payload of the packet.\n @param _executor The executor address for the packet.\n @param _extraData Additional data for the packet." - }, - "functionSelector": "d045a0dc", - "id": 2297, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "lzReceiveSimulate", - "nameLocation": "3688:17:19", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2275, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2266, - "mutability": "mutable", - "name": "_origin", - "nameLocation": "3731:7:19", - "nodeType": "VariableDeclaration", - "scope": 2297, - "src": "3715:23:19", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Origin_$40_calldata_ptr", - "typeString": "struct Origin" - }, - "typeName": { - "id": 2265, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 2264, - "name": "Origin", - "nameLocations": ["3715:6:19"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 40, - "src": "3715:6:19" - }, - "referencedDeclaration": 40, - "src": "3715:6:19", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Origin_$40_storage_ptr", - "typeString": "struct Origin" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2268, - "mutability": "mutable", - "name": "_guid", - "nameLocation": "3756:5:19", - "nodeType": "VariableDeclaration", - "scope": 2297, - "src": "3748:13:19", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 2267, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "3748:7:19", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2270, - "mutability": "mutable", - "name": "_message", - "nameLocation": "3786:8:19", - "nodeType": "VariableDeclaration", - "scope": 2297, - "src": "3771:23:19", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 2269, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "3771:5:19", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2272, - "mutability": "mutable", - "name": "_executor", - "nameLocation": "3812:9:19", - "nodeType": "VariableDeclaration", - "scope": 2297, - "src": "3804:17:19", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2271, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3804:7:19", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2274, - "mutability": "mutable", - "name": "_extraData", - "nameLocation": "3846:10:19", - "nodeType": "VariableDeclaration", - "scope": 2297, - "src": "3831:25:19", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 2273, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "3831:5:19", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "3705:157:19" - }, - "returnParameters": { - "id": 2276, - "nodeType": "ParameterList", - "parameters": [], - "src": "3888:0:19" - }, - "scope": 2323, - "src": "3679:409:19", - "stateMutability": "payable", - "virtual": true, - "visibility": "external" - }, - { - "documentation": { - "id": 2298, - "nodeType": "StructuredDocumentation", - "src": "4094:712:19", - "text": " @dev Internal function to handle the OAppPreCrimeSimulator simulated receive.\n @param _origin The origin information.\n - srcEid: The source chain endpoint ID.\n - sender: The sender address from the src chain.\n - nonce: The nonce of the LayerZero message.\n @param _guid The GUID of the LayerZero message.\n @param _message The LayerZero message.\n @param _executor The address of the off-chain executor.\n @param _extraData Arbitrary data passed by the msg executor.\n @dev Enables the preCrime simulator to mock sending lzReceive() messages,\n routes the msg down from the OAppPreCrimeSimulator, and back up to the OAppReceiver." - }, - "id": 2312, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "_lzReceiveSimulate", - "nameLocation": "4820:18:19", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2310, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2301, - "mutability": "mutable", - "name": "_origin", - "nameLocation": "4864:7:19", - "nodeType": "VariableDeclaration", - "scope": 2312, - "src": "4848:23:19", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Origin_$40_calldata_ptr", - "typeString": "struct Origin" - }, - "typeName": { - "id": 2300, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 2299, - "name": "Origin", - "nameLocations": ["4848:6:19"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 40, - "src": "4848:6:19" - }, - "referencedDeclaration": 40, - "src": "4848:6:19", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Origin_$40_storage_ptr", - "typeString": "struct Origin" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2303, - "mutability": "mutable", - "name": "_guid", - "nameLocation": "4889:5:19", - "nodeType": "VariableDeclaration", - "scope": 2312, - "src": "4881:13:19", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 2302, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "4881:7:19", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2305, - "mutability": "mutable", - "name": "_message", - "nameLocation": "4919:8:19", - "nodeType": "VariableDeclaration", - "scope": 2312, - "src": "4904:23:19", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 2304, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "4904:5:19", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2307, - "mutability": "mutable", - "name": "_executor", - "nameLocation": "4945:9:19", - "nodeType": "VariableDeclaration", - "scope": 2312, - "src": "4937:17:19", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2306, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4937:7:19", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2309, - "mutability": "mutable", - "name": "_extraData", - "nameLocation": "4979:10:19", - "nodeType": "VariableDeclaration", - "scope": 2312, - "src": "4964:25:19", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 2308, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "4964:5:19", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "4838:157:19" - }, - "returnParameters": { - "id": 2311, - "nodeType": "ParameterList", - "parameters": [], - "src": "5012:0:19" - }, - "scope": 2323, - "src": "4811:202:19", - "stateMutability": "nonpayable", - "virtual": true, - "visibility": "internal" - }, - { - "baseFunctions": [2376], - "documentation": { - "id": 2313, - "nodeType": "StructuredDocumentation", - "src": "5019:249:19", - "text": " @dev checks if the specified peer is considered 'trusted' by the OApp.\n @param _eid The endpoint Id to check.\n @param _peer The peer to check.\n @return Whether the peer passed is considered 'trusted' by the OApp." - }, - "functionSelector": "5a0dfe4d", - "id": 2322, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "isPeer", - "nameLocation": "5282:6:19", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2318, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2315, - "mutability": "mutable", - "name": "_eid", - "nameLocation": "5296:4:19", - "nodeType": "VariableDeclaration", - "scope": 2322, - "src": "5289:11:19", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 2314, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "5289:6:19", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2317, - "mutability": "mutable", - "name": "_peer", - "nameLocation": "5310:5:19", - "nodeType": "VariableDeclaration", - "scope": 2322, - "src": "5302:13:19", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 2316, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "5302:7:19", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "5288:28:19" - }, - "returnParameters": { - "id": 2321, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2320, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 2322, - "src": "5346:4:19", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 2319, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "5346:4:19", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "5345:6:19" - }, - "scope": 2323, - "src": "5273:79:19", - "stateMutability": "view", - "virtual": true, - "visibility": "public" - } - ], - "scope": 2324, - "src": "427:4927:19", - "usedErrors": [2333, 2335, 3842, 3847], - "usedEvents": [2340, 3853] - } - ], - "src": "33:5322:19" - }, - "id": 19 - }, - "@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IOAppPreCrimeSimulator.sol": { - "ast": { - "absolutePath": "@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IOAppPreCrimeSimulator.sol", - "exportedSymbols": { - "IOAppPreCrimeSimulator": [2377], - "InboundPacket": [2486], - "Origin": [40] - }, - "id": 2378, - "license": "MIT", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 2325, - "literals": ["solidity", "^", "0.8", ".20"], - "nodeType": "PragmaDirective", - "src": "33:24:20" - }, - { - "absolutePath": "@layerzerolabs/oapp-evm/contracts/precrime/libs/Packet.sol", - "file": "../libs/Packet.sol", - "id": 2328, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 2378, - "sourceUnit": 2612, - "src": "186:59:20", - "symbolAliases": [ - { - "foreign": { - "id": 2326, - "name": "InboundPacket", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2486, - "src": "195:13:20", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - }, - { - "foreign": { - "id": 2327, - "name": "Origin", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 40, - "src": "210:6:20", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "abstract": false, - "baseContracts": [], - "canonicalName": "IOAppPreCrimeSimulator", - "contractDependencies": [], - "contractKind": "interface", - "documentation": { - "id": 2329, - "nodeType": "StructuredDocumentation", - "src": "247:122:20", - "text": " @title IOAppPreCrimeSimulator Interface\n @dev Interface for the preCrime simulation functionality in an OApp." - }, - "fullyImplemented": false, - "id": 2377, - "linearizedBaseContracts": [2377], - "name": "IOAppPreCrimeSimulator", - "nameLocation": "380:22:20", - "nodeType": "ContractDefinition", - "nodes": [ - { - "errorSelector": "8351eea7", - "id": 2333, - "name": "SimulationResult", - "nameLocation": "477:16:20", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 2332, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2331, - "mutability": "mutable", - "name": "result", - "nameLocation": "500:6:20", - "nodeType": "VariableDeclaration", - "scope": 2333, - "src": "494:12:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 2330, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "494:5:20", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "493:14:20" - }, - "src": "471:37:20" - }, - { - "errorSelector": "14d4a4e8", - "id": 2335, - "name": "OnlySelf", - "nameLocation": "519:8:20", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 2334, - "nodeType": "ParameterList", - "parameters": [], - "src": "527:2:20" - }, - "src": "513:17:20" - }, - { - "anonymous": false, - "documentation": { - "id": 2336, - "nodeType": "StructuredDocumentation", - "src": "536:142:20", - "text": " @dev Emitted when the preCrime contract address is set.\n @param preCrimeAddress The address of the preCrime contract." - }, - "eventSelector": "d48d879cef83a1c0bdda516f27b13ddb1b3f8bbac1c9e1511bb2a659c2427760", - "id": 2340, - "name": "PreCrimeSet", - "nameLocation": "689:11:20", - "nodeType": "EventDefinition", - "parameters": { - "id": 2339, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2338, - "indexed": false, - "mutability": "mutable", - "name": "preCrimeAddress", - "nameLocation": "709:15:20", - "nodeType": "VariableDeclaration", - "scope": 2340, - "src": "701:23:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2337, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "701:7:20", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "700:25:20" - }, - "src": "683:43:20" - }, - { - "documentation": { - "id": 2341, - "nodeType": "StructuredDocumentation", - "src": "732:139:20", - "text": " @dev Retrieves the address of the preCrime contract implementation.\n @return The address of the preCrime contract." - }, - "functionSelector": "b731ea0a", - "id": 2346, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "preCrime", - "nameLocation": "885:8:20", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2342, - "nodeType": "ParameterList", - "parameters": [], - "src": "893:2:20" - }, - "returnParameters": { - "id": 2345, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2344, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 2346, - "src": "919:7:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2343, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "919:7:20", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "918:9:20" - }, - "scope": 2377, - "src": "876:52:20", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 2347, - "nodeType": "StructuredDocumentation", - "src": "934:116:20", - "text": " @dev Retrieves the address of the OApp contract.\n @return The address of the OApp contract." - }, - "functionSelector": "52ae2879", - "id": 2352, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "oApp", - "nameLocation": "1064:4:20", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2348, - "nodeType": "ParameterList", - "parameters": [], - "src": "1068:2:20" - }, - "returnParameters": { - "id": 2351, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2350, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 2352, - "src": "1094:7:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2349, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1094:7:20", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1093:9:20" - }, - "scope": 2377, - "src": "1055:48:20", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 2353, - "nodeType": "StructuredDocumentation", - "src": "1109:121:20", - "text": " @dev Sets the preCrime contract address.\n @param _preCrime The address of the preCrime contract." - }, - "functionSelector": "d4243885", - "id": 2358, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "setPreCrime", - "nameLocation": "1244:11:20", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2356, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2355, - "mutability": "mutable", - "name": "_preCrime", - "nameLocation": "1264:9:20", - "nodeType": "VariableDeclaration", - "scope": 2358, - "src": "1256:17:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2354, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1256:7:20", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1255:19:20" - }, - "returnParameters": { - "id": 2357, - "nodeType": "ParameterList", - "parameters": [], - "src": "1283:0:20" - }, - "scope": 2377, - "src": "1235:49:20", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 2359, - "nodeType": "StructuredDocumentation", - "src": "1290:209:20", - "text": " @dev Mocks receiving a packet, then reverts with a series of data to infer the state/result.\n @param _packets An array of LayerZero InboundPacket objects representing received packets." - }, - "functionSelector": "bd815db0", - "id": 2366, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "lzReceiveAndRevert", - "nameLocation": "1513:18:20", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2364, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2363, - "mutability": "mutable", - "name": "_packets", - "nameLocation": "1557:8:20", - "nodeType": "VariableDeclaration", - "scope": 2366, - "src": "1532:33:20", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_InboundPacket_$2486_calldata_ptr_$dyn_calldata_ptr", - "typeString": "struct InboundPacket[]" - }, - "typeName": { - "baseType": { - "id": 2361, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 2360, - "name": "InboundPacket", - "nameLocations": ["1532:13:20"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 2486, - "src": "1532:13:20" - }, - "referencedDeclaration": 2486, - "src": "1532:13:20", - "typeDescriptions": { - "typeIdentifier": "t_struct$_InboundPacket_$2486_storage_ptr", - "typeString": "struct InboundPacket" - } - }, - "id": 2362, - "nodeType": "ArrayTypeName", - "src": "1532:15:20", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_InboundPacket_$2486_storage_$dyn_storage_ptr", - "typeString": "struct InboundPacket[]" - } - }, - "visibility": "internal" - } - ], - "src": "1531:35:20" - }, - "returnParameters": { - "id": 2365, - "nodeType": "ParameterList", - "parameters": [], - "src": "1583:0:20" - }, - "scope": 2377, - "src": "1504:80:20", - "stateMutability": "payable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 2367, - "nodeType": "StructuredDocumentation", - "src": "1590:249:20", - "text": " @dev checks if the specified peer is considered 'trusted' by the OApp.\n @param _eid The endpoint Id to check.\n @param _peer The peer to check.\n @return Whether the peer passed is considered 'trusted' by the OApp." - }, - "functionSelector": "5a0dfe4d", - "id": 2376, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "isPeer", - "nameLocation": "1853:6:20", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2372, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2369, - "mutability": "mutable", - "name": "_eid", - "nameLocation": "1867:4:20", - "nodeType": "VariableDeclaration", - "scope": 2376, - "src": "1860:11:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 2368, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "1860:6:20", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2371, - "mutability": "mutable", - "name": "_peer", - "nameLocation": "1881:5:20", - "nodeType": "VariableDeclaration", - "scope": 2376, - "src": "1873:13:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 2370, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "1873:7:20", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "1859:28:20" - }, - "returnParameters": { - "id": 2375, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2374, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 2376, - "src": "1911:4:20", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 2373, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "1911:4:20", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "1910:6:20" - }, - "scope": 2377, - "src": "1844:73:20", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - } - ], - "scope": 2378, - "src": "370:1549:20", - "usedErrors": [2333, 2335], - "usedEvents": [2340] - } - ], - "src": "33:1887:20" - }, - "id": 20 - }, - "@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IPreCrime.sol": { - "ast": { - "absolutePath": "@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IPreCrime.sol", - "exportedSymbols": { "IPreCrime": [2461], "PreCrimePeer": [2386] }, - "id": 2462, - "license": "MIT", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 2379, - "literals": ["solidity", "^", "0.8", ".20"], - "nodeType": "PragmaDirective", - "src": "33:24:21" - }, - { - "canonicalName": "PreCrimePeer", - "id": 2386, - "members": [ - { - "constant": false, - "id": 2381, - "mutability": "mutable", - "name": "eid", - "nameLocation": "91:3:21", - "nodeType": "VariableDeclaration", - "scope": 2386, - "src": "84:10:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 2380, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "84:6:21", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2383, - "mutability": "mutable", - "name": "preCrime", - "nameLocation": "108:8:21", - "nodeType": "VariableDeclaration", - "scope": 2386, - "src": "100:16:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 2382, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "100:7:21", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2385, - "mutability": "mutable", - "name": "oApp", - "nameLocation": "130:4:21", - "nodeType": "VariableDeclaration", - "scope": 2386, - "src": "122:12:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 2384, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "122:7:21", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "name": "PreCrimePeer", - "nameLocation": "65:12:21", - "nodeType": "StructDefinition", - "scope": 2462, - "src": "58:79:21", - "visibility": "public" - }, - { - "abstract": false, - "baseContracts": [], - "canonicalName": "IPreCrime", - "contractDependencies": [], - "contractKind": "interface", - "fullyImplemented": false, - "id": 2461, - "linearizedBaseContracts": [2461], - "name": "IPreCrime", - "nameLocation": "170:9:21", - "nodeType": "ContractDefinition", - "nodes": [ - { - "errorSelector": "9cbfe066", - "id": 2388, - "name": "OnlyOffChain", - "nameLocation": "192:12:21", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 2387, - "nodeType": "ParameterList", - "parameters": [], - "src": "204:2:21" - }, - "src": "186:21:21" - }, - { - "errorSelector": "9db08605", - "id": 2394, - "name": "PacketOversize", - "nameLocation": "241:14:21", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 2393, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2390, - "mutability": "mutable", - "name": "max", - "nameLocation": "264:3:21", - "nodeType": "VariableDeclaration", - "scope": 2394, - "src": "256:11:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2389, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "256:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2392, - "mutability": "mutable", - "name": "actual", - "nameLocation": "277:6:21", - "nodeType": "VariableDeclaration", - "scope": 2394, - "src": "269:14:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2391, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "269:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "255:29:21" - }, - "src": "235:50:21" - }, - { - "errorSelector": "50823c85", - "id": 2396, - "name": "PacketUnsorted", - "nameLocation": "296:14:21", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 2395, - "nodeType": "ParameterList", - "parameters": [], - "src": "310:2:21" - }, - "src": "290:23:21" - }, - { - "errorSelector": "614cbd8a", - "id": 2400, - "name": "SimulationFailed", - "nameLocation": "324:16:21", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 2399, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2398, - "mutability": "mutable", - "name": "reason", - "nameLocation": "347:6:21", - "nodeType": "VariableDeclaration", - "scope": 2400, - "src": "341:12:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 2397, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "341:5:21", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "340:14:21" - }, - "src": "318:37:21" - }, - { - "errorSelector": "01992f2a", - "id": 2404, - "name": "SimulationResultNotFound", - "nameLocation": "389:24:21", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 2403, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2402, - "mutability": "mutable", - "name": "eid", - "nameLocation": "421:3:21", - "nodeType": "VariableDeclaration", - "scope": 2404, - "src": "414:10:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 2401, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "414:6:21", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - } - ], - "src": "413:12:21" - }, - "src": "383:43:21" - }, - { - "errorSelector": "572e17ee", - "id": 2410, - "name": "InvalidSimulationResult", - "nameLocation": "437:23:21", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 2409, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2406, - "mutability": "mutable", - "name": "eid", - "nameLocation": "468:3:21", - "nodeType": "VariableDeclaration", - "scope": 2410, - "src": "461:10:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 2405, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "461:6:21", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2408, - "mutability": "mutable", - "name": "reason", - "nameLocation": "479:6:21", - "nodeType": "VariableDeclaration", - "scope": 2410, - "src": "473:12:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 2407, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "473:5:21", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "460:26:21" - }, - "src": "431:56:21" - }, - { - "errorSelector": "19159757", - "id": 2414, - "name": "CrimeFound", - "nameLocation": "498:10:21", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 2413, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2412, - "mutability": "mutable", - "name": "crime", - "nameLocation": "515:5:21", - "nodeType": "VariableDeclaration", - "scope": 2414, - "src": "509:11:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 2411, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "509:5:21", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "508:13:21" - }, - "src": "492:30:21" - }, - { - "functionSelector": "f0cd3836", - "id": 2425, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "getConfig", - "nameLocation": "537:9:21", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2421, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2417, - "mutability": "mutable", - "name": "_packets", - "nameLocation": "564:8:21", - "nodeType": "VariableDeclaration", - "scope": 2425, - "src": "547:25:21", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr", - "typeString": "bytes[]" - }, - "typeName": { - "baseType": { - "id": 2415, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "547:5:21", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "id": 2416, - "nodeType": "ArrayTypeName", - "src": "547:7:21", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_bytes_storage_$dyn_storage_ptr", - "typeString": "bytes[]" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2420, - "mutability": "mutable", - "name": "_packetMsgValues", - "nameLocation": "593:16:21", - "nodeType": "VariableDeclaration", - "scope": 2425, - "src": "574:35:21", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr", - "typeString": "uint256[]" - }, - "typeName": { - "baseType": { - "id": 2418, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "574:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 2419, - "nodeType": "ArrayTypeName", - "src": "574:9:21", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", - "typeString": "uint256[]" - } - }, - "visibility": "internal" - } - ], - "src": "546:64:21" - }, - "returnParameters": { - "id": 2424, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2423, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 2425, - "src": "629:12:21", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 2422, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "629:5:21", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "628:14:21" - }, - "scope": 2461, - "src": "528:115:21", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "50dfa937", - "id": 2436, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "simulate", - "nameLocation": "658:8:21", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2432, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2428, - "mutability": "mutable", - "name": "_packets", - "nameLocation": "693:8:21", - "nodeType": "VariableDeclaration", - "scope": 2436, - "src": "676:25:21", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr", - "typeString": "bytes[]" - }, - "typeName": { - "baseType": { - "id": 2426, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "676:5:21", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "id": 2427, - "nodeType": "ArrayTypeName", - "src": "676:7:21", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_bytes_storage_$dyn_storage_ptr", - "typeString": "bytes[]" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2431, - "mutability": "mutable", - "name": "_packetMsgValues", - "nameLocation": "730:16:21", - "nodeType": "VariableDeclaration", - "scope": 2436, - "src": "711:35:21", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr", - "typeString": "uint256[]" - }, - "typeName": { - "baseType": { - "id": 2429, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "711:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 2430, - "nodeType": "ArrayTypeName", - "src": "711:9:21", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", - "typeString": "uint256[]" - } - }, - "visibility": "internal" - } - ], - "src": "666:86:21" - }, - "returnParameters": { - "id": 2435, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2434, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 2436, - "src": "779:12:21", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 2433, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "779:5:21", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "778:14:21" - }, - "scope": 2461, - "src": "649:144:21", - "stateMutability": "payable", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "8e9e7099", - "id": 2441, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "buildSimulationResult", - "nameLocation": "808:21:21", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2437, - "nodeType": "ParameterList", - "parameters": [], - "src": "829:2:21" - }, - "returnParameters": { - "id": 2440, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2439, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 2441, - "src": "855:12:21", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 2438, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "855:5:21", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "854:14:21" - }, - "scope": 2461, - "src": "799:70:21", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "10f9cf3a", - "id": 2453, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "preCrime", - "nameLocation": "884:8:21", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2451, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2444, - "mutability": "mutable", - "name": "_packets", - "nameLocation": "919:8:21", - "nodeType": "VariableDeclaration", - "scope": 2453, - "src": "902:25:21", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr", - "typeString": "bytes[]" - }, - "typeName": { - "baseType": { - "id": 2442, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "902:5:21", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "id": 2443, - "nodeType": "ArrayTypeName", - "src": "902:7:21", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_bytes_storage_$dyn_storage_ptr", - "typeString": "bytes[]" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2447, - "mutability": "mutable", - "name": "_packetMsgValues", - "nameLocation": "956:16:21", - "nodeType": "VariableDeclaration", - "scope": 2453, - "src": "937:35:21", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr", - "typeString": "uint256[]" - }, - "typeName": { - "baseType": { - "id": 2445, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "937:7:21", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 2446, - "nodeType": "ArrayTypeName", - "src": "937:9:21", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", - "typeString": "uint256[]" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2450, - "mutability": "mutable", - "name": "_simulations", - "nameLocation": "999:12:21", - "nodeType": "VariableDeclaration", - "scope": 2453, - "src": "982:29:21", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr", - "typeString": "bytes[]" - }, - "typeName": { - "baseType": { - "id": 2448, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "982:5:21", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "id": 2449, - "nodeType": "ArrayTypeName", - "src": "982:7:21", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_bytes_storage_$dyn_storage_ptr", - "typeString": "bytes[]" - } - }, - "visibility": "internal" - } - ], - "src": "892:125:21" - }, - "returnParameters": { - "id": 2452, - "nodeType": "ParameterList", - "parameters": [], - "src": "1026:0:21" - }, - "scope": 2461, - "src": "875:152:21", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "functionSelector": "54fd4d50", - "id": 2460, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "version", - "nameLocation": "1042:7:21", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2454, - "nodeType": "ParameterList", - "parameters": [], - "src": "1049:2:21" - }, - "returnParameters": { - "id": 2459, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2456, - "mutability": "mutable", - "name": "major", - "nameLocation": "1082:5:21", - "nodeType": "VariableDeclaration", - "scope": 2460, - "src": "1075:12:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "typeName": { - "id": 2455, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "1075:6:21", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2458, - "mutability": "mutable", - "name": "minor", - "nameLocation": "1095:5:21", - "nodeType": "VariableDeclaration", - "scope": 2460, - "src": "1089:11:21", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 2457, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "1089:5:21", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "visibility": "internal" - } - ], - "src": "1074:27:21" - }, - "scope": 2461, - "src": "1033:69:21", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - } - ], - "scope": 2462, - "src": "160:944:21", - "usedErrors": [2388, 2394, 2396, 2400, 2404, 2410, 2414], - "usedEvents": [] - } - ], - "src": "33:1072:21" - }, - "id": 21 - }, - "@layerzerolabs/oapp-evm/contracts/precrime/libs/Packet.sol": { - "ast": { - "absolutePath": "@layerzerolabs/oapp-evm/contracts/precrime/libs/Packet.sol", - "exportedSymbols": { - "InboundPacket": [2486], - "Origin": [40], - "PacketDecoder": [2611], - "PacketV1Codec": [1325] - }, - "id": 2612, - "license": "MIT", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 2463, - "literals": ["solidity", "^", "0.8", ".20"], - "nodeType": "PragmaDirective", - "src": "33:24:22" - }, - { - "absolutePath": "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol", - "file": "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol", - "id": 2465, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 2612, - "sourceUnit": 203, - "src": "59:105:22", - "symbolAliases": [ - { - "foreign": { - "id": 2464, - "name": "Origin", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 40, - "src": "68:6:22", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol", - "file": "@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol", - "id": 2467, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 2612, - "sourceUnit": 1326, - "src": "165:110:22", - "symbolAliases": [ - { - "foreign": { - "id": 2466, - "name": "PacketV1Codec", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1325, - "src": "174:13:22", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "canonicalName": "InboundPacket", - "documentation": { - "id": 2468, - "nodeType": "StructuredDocumentation", - "src": "277:106:22", - "text": " @title InboundPacket\n @dev Structure representing an inbound packet received by the contract." - }, - "id": 2486, - "members": [ - { - "constant": false, - "id": 2471, - "mutability": "mutable", - "name": "origin", - "nameLocation": "418:6:22", - "nodeType": "VariableDeclaration", - "scope": 2486, - "src": "411:13:22", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Origin_$40_storage_ptr", - "typeString": "struct Origin" - }, - "typeName": { - "id": 2470, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 2469, - "name": "Origin", - "nameLocations": ["411:6:22"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 40, - "src": "411:6:22" - }, - "referencedDeclaration": 40, - "src": "411:6:22", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Origin_$40_storage_ptr", - "typeString": "struct Origin" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2473, - "mutability": "mutable", - "name": "dstEid", - "nameLocation": "474:6:22", - "nodeType": "VariableDeclaration", - "scope": 2486, - "src": "467:13:22", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 2472, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "467:6:22", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2475, - "mutability": "mutable", - "name": "receiver", - "nameLocation": "535:8:22", - "nodeType": "VariableDeclaration", - "scope": 2486, - "src": "527:16:22", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2474, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "527:7:22", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2477, - "mutability": "mutable", - "name": "guid", - "nameLocation": "593:4:22", - "nodeType": "VariableDeclaration", - "scope": 2486, - "src": "585:12:22", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 2476, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "585:7:22", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2479, - "mutability": "mutable", - "name": "value", - "nameLocation": "647:5:22", - "nodeType": "VariableDeclaration", - "scope": 2486, - "src": "639:13:22", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2478, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "639:7:22", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2481, - "mutability": "mutable", - "name": "executor", - "nameLocation": "694:8:22", - "nodeType": "VariableDeclaration", - "scope": 2486, - "src": "686:16:22", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2480, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "686:7:22", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2483, - "mutability": "mutable", - "name": "message", - "nameLocation": "750:7:22", - "nodeType": "VariableDeclaration", - "scope": 2486, - "src": "744:13:22", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 2482, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "744:5:22", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2485, - "mutability": "mutable", - "name": "extraData", - "nameLocation": "803:9:22", - "nodeType": "VariableDeclaration", - "scope": 2486, - "src": "797:15:22", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 2484, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "797:5:22", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "name": "InboundPacket", - "nameLocation": "391:13:22", - "nodeType": "StructDefinition", - "scope": 2612, - "src": "384:476:22", - "visibility": "public" - }, - { - "abstract": false, - "baseContracts": [], - "canonicalName": "PacketDecoder", - "contractDependencies": [], - "contractKind": "library", - "documentation": { - "id": 2487, - "nodeType": "StructuredDocumentation", - "src": "862:79:22", - "text": " @title PacketDecoder\n @dev Library for decoding LayerZero packets." - }, - "fullyImplemented": true, - "id": 2611, - "linearizedBaseContracts": [2611], - "name": "PacketDecoder", - "nameLocation": "950:13:22", - "nodeType": "ContractDefinition", - "nodes": [ - { - "global": false, - "id": 2490, - "libraryName": { - "id": 2488, - "name": "PacketV1Codec", - "nameLocations": ["976:13:22"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 1325, - "src": "976:13:22" - }, - "nodeType": "UsingForDirective", - "src": "970:30:22", - "typeName": { - "id": 2489, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "994:5:22", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - } - }, - { - "body": { - "id": 2547, - "nodeType": "Block", - "src": "1307:265:22", - "statements": [ - { - "expression": { - "id": 2513, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 2499, - "name": "packet", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2497, - "src": "1317:6:22", - "typeDescriptions": { - "typeIdentifier": "t_struct$_InboundPacket_$2486_memory_ptr", - "typeString": "struct InboundPacket memory" - } - }, - "id": 2501, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "1324:6:22", - "memberName": "origin", - "nodeType": "MemberAccess", - "referencedDeclaration": 2471, - "src": "1317:13:22", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Origin_$40_memory_ptr", - "typeString": "struct Origin memory" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "id": 2503, - "name": "_packet", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2493, - "src": "1340:7:22", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - }, - "id": 2504, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "1348:6:22", - "memberName": "srcEid", - "nodeType": "MemberAccess", - "referencedDeclaration": 1185, - "src": "1340:14:22", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_bytes_calldata_ptr_$returns$_t_uint32_$attached_to$_t_bytes_calldata_ptr_$", - "typeString": "function (bytes calldata) pure returns (uint32)" - } - }, - "id": 2505, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1340:16:22", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "id": 2506, - "name": "_packet", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2493, - "src": "1358:7:22", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - }, - "id": 2507, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "1366:6:22", - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": 1201, - "src": "1358:14:22", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_bytes_calldata_ptr_$returns$_t_bytes32_$attached_to$_t_bytes_calldata_ptr_$", - "typeString": "function (bytes calldata) pure returns (bytes32)" - } - }, - "id": 2508, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1358:16:22", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "id": 2509, - "name": "_packet", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2493, - "src": "1376:7:22", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - }, - "id": 2510, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "1384:5:22", - "memberName": "nonce", - "nodeType": "MemberAccess", - "referencedDeclaration": 1166, - "src": "1376:13:22", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_bytes_calldata_ptr_$returns$_t_uint64_$attached_to$_t_bytes_calldata_ptr_$", - "typeString": "function (bytes calldata) pure returns (uint64)" - } - }, - "id": 2511, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1376:15:22", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - ], - "id": 2502, - "name": "Origin", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 40, - "src": "1333:6:22", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_struct$_Origin_$40_storage_ptr_$", - "typeString": "type(struct Origin storage pointer)" - } - }, - "id": 2512, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "structConstructorCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1333:59:22", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_struct$_Origin_$40_memory_ptr", - "typeString": "struct Origin memory" - } - }, - "src": "1317:75:22", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Origin_$40_memory_ptr", - "typeString": "struct Origin memory" - } - }, - "id": 2514, - "nodeType": "ExpressionStatement", - "src": "1317:75:22" - }, - { - "expression": { - "id": 2521, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 2515, - "name": "packet", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2497, - "src": "1402:6:22", - "typeDescriptions": { - "typeIdentifier": "t_struct$_InboundPacket_$2486_memory_ptr", - "typeString": "struct InboundPacket memory" - } - }, - "id": 2517, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "1409:6:22", - "memberName": "dstEid", - "nodeType": "MemberAccess", - "referencedDeclaration": 2473, - "src": "1402:13:22", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "id": 2518, - "name": "_packet", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2493, - "src": "1418:7:22", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - }, - "id": 2519, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "1426:6:22", - "memberName": "dstEid", - "nodeType": "MemberAccess", - "referencedDeclaration": 1234, - "src": "1418:14:22", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_bytes_calldata_ptr_$returns$_t_uint32_$attached_to$_t_bytes_calldata_ptr_$", - "typeString": "function (bytes calldata) pure returns (uint32)" - } - }, - "id": 2520, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1418:16:22", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "src": "1402:32:22", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "id": 2522, - "nodeType": "ExpressionStatement", - "src": "1402:32:22" - }, - { - "expression": { - "id": 2529, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 2523, - "name": "packet", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2497, - "src": "1444:6:22", - "typeDescriptions": { - "typeIdentifier": "t_struct$_InboundPacket_$2486_memory_ptr", - "typeString": "struct InboundPacket memory" - } - }, - "id": 2525, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "1451:8:22", - "memberName": "receiver", - "nodeType": "MemberAccess", - "referencedDeclaration": 2475, - "src": "1444:15:22", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "id": 2526, - "name": "_packet", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2493, - "src": "1462:7:22", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - }, - "id": 2527, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "1470:11:22", - "memberName": "receiverB20", - "nodeType": "MemberAccess", - "referencedDeclaration": 1264, - "src": "1462:19:22", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_bytes_calldata_ptr_$returns$_t_address_$attached_to$_t_bytes_calldata_ptr_$", - "typeString": "function (bytes calldata) pure returns (address)" - } - }, - "id": 2528, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1462:21:22", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "1444:39:22", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 2530, - "nodeType": "ExpressionStatement", - "src": "1444:39:22" - }, - { - "expression": { - "id": 2537, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 2531, - "name": "packet", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2497, - "src": "1493:6:22", - "typeDescriptions": { - "typeIdentifier": "t_struct$_InboundPacket_$2486_memory_ptr", - "typeString": "struct InboundPacket memory" - } - }, - "id": 2533, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "1500:4:22", - "memberName": "guid", - "nodeType": "MemberAccess", - "referencedDeclaration": 2477, - "src": "1493:11:22", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "id": 2534, - "name": "_packet", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2493, - "src": "1507:7:22", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - }, - "id": 2535, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "1515:4:22", - "memberName": "guid", - "nodeType": "MemberAccess", - "referencedDeclaration": 1280, - "src": "1507:12:22", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_bytes_calldata_ptr_$returns$_t_bytes32_$attached_to$_t_bytes_calldata_ptr_$", - "typeString": "function (bytes calldata) pure returns (bytes32)" - } - }, - "id": 2536, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1507:14:22", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "src": "1493:28:22", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "id": 2538, - "nodeType": "ExpressionStatement", - "src": "1493:28:22" - }, - { - "expression": { - "id": 2545, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "id": 2539, - "name": "packet", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2497, - "src": "1531:6:22", - "typeDescriptions": { - "typeIdentifier": "t_struct$_InboundPacket_$2486_memory_ptr", - "typeString": "struct InboundPacket memory" - } - }, - "id": 2541, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "1538:7:22", - "memberName": "message", - "nodeType": "MemberAccess", - "referencedDeclaration": 2483, - "src": "1531:14:22", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "id": 2542, - "name": "_packet", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2493, - "src": "1548:7:22", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - }, - "id": 2543, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "1556:7:22", - "memberName": "message", - "nodeType": "MemberAccess", - "referencedDeclaration": 1295, - "src": "1548:15:22", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_bytes_calldata_ptr_$returns$_t_bytes_calldata_ptr_$attached_to$_t_bytes_calldata_ptr_$", - "typeString": "function (bytes calldata) pure returns (bytes calldata)" - } - }, - "id": 2544, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1548:17:22", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - }, - "src": "1531:34:22", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - "id": 2546, - "nodeType": "ExpressionStatement", - "src": "1531:34:22" - } - ] - }, - "documentation": { - "id": 2491, - "nodeType": "StructuredDocumentation", - "src": "1006:204:22", - "text": " @dev Decode an inbound packet from the given packet data.\n @param _packet The packet data to decode.\n @return packet An InboundPacket struct representing the decoded packet." - }, - "id": 2548, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "decode", - "nameLocation": "1224:6:22", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2494, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2493, - "mutability": "mutable", - "name": "_packet", - "nameLocation": "1246:7:22", - "nodeType": "VariableDeclaration", - "scope": 2548, - "src": "1231:22:22", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 2492, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "1231:5:22", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "1230:24:22" - }, - "returnParameters": { - "id": 2498, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2497, - "mutability": "mutable", - "name": "packet", - "nameLocation": "1299:6:22", - "nodeType": "VariableDeclaration", - "scope": 2548, - "src": "1278:27:22", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_InboundPacket_$2486_memory_ptr", - "typeString": "struct InboundPacket" - }, - "typeName": { - "id": 2496, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 2495, - "name": "InboundPacket", - "nameLocations": ["1278:13:22"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 2486, - "src": "1278:13:22" - }, - "referencedDeclaration": 2486, - "src": "1278:13:22", - "typeDescriptions": { - "typeIdentifier": "t_struct$_InboundPacket_$2486_storage_ptr", - "typeString": "struct InboundPacket" - } - }, - "visibility": "internal" - } - ], - "src": "1277:29:22" - }, - "scope": 2611, - "src": "1215:357:22", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 2609, - "nodeType": "Block", - "src": "2086:381:22", - "statements": [ - { - "expression": { - "id": 2570, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 2562, - "name": "packets", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2560, - "src": "2096:7:22", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_InboundPacket_$2486_memory_ptr_$dyn_memory_ptr", - "typeString": "struct InboundPacket memory[] memory" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "expression": { - "id": 2567, - "name": "_packets", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2552, - "src": "2126:8:22", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr", - "typeString": "bytes calldata[] calldata" - } - }, - "id": 2568, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2135:6:22", - "memberName": "length", - "nodeType": "MemberAccess", - "src": "2126:15:22", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 2566, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "NewExpression", - "src": "2106:19:22", - "typeDescriptions": { - "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_struct$_InboundPacket_$2486_memory_ptr_$dyn_memory_ptr_$", - "typeString": "function (uint256) pure returns (struct InboundPacket memory[] memory)" - }, - "typeName": { - "baseType": { - "id": 2564, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 2563, - "name": "InboundPacket", - "nameLocations": ["2110:13:22"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 2486, - "src": "2110:13:22" - }, - "referencedDeclaration": 2486, - "src": "2110:13:22", - "typeDescriptions": { - "typeIdentifier": "t_struct$_InboundPacket_$2486_storage_ptr", - "typeString": "struct InboundPacket" - } - }, - "id": 2565, - "nodeType": "ArrayTypeName", - "src": "2110:15:22", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_InboundPacket_$2486_storage_$dyn_storage_ptr", - "typeString": "struct InboundPacket[]" - } - } - }, - "id": 2569, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2106:36:22", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_InboundPacket_$2486_memory_ptr_$dyn_memory_ptr", - "typeString": "struct InboundPacket memory[] memory" - } - }, - "src": "2096:46:22", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_InboundPacket_$2486_memory_ptr_$dyn_memory_ptr", - "typeString": "struct InboundPacket memory[] memory" - } - }, - "id": 2571, - "nodeType": "ExpressionStatement", - "src": "2096:46:22" - }, - { - "body": { - "id": 2607, - "nodeType": "Block", - "src": "2198:263:22", - "statements": [ - { - "assignments": [2584], - "declarations": [ - { - "constant": false, - "id": 2584, - "mutability": "mutable", - "name": "packet", - "nameLocation": "2227:6:22", - "nodeType": "VariableDeclaration", - "scope": 2607, - "src": "2212:21:22", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 2583, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "2212:5:22", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "id": 2588, - "initialValue": { - "baseExpression": { - "id": 2585, - "name": "_packets", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2552, - "src": "2236:8:22", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr", - "typeString": "bytes calldata[] calldata" - } - }, - "id": 2587, - "indexExpression": { - "id": 2586, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2573, - "src": "2245:1:22", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "2236:11:22", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "2212:35:22" - }, - { - "expression": { - "id": 2596, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "baseExpression": { - "id": 2589, - "name": "packets", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2560, - "src": "2261:7:22", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_InboundPacket_$2486_memory_ptr_$dyn_memory_ptr", - "typeString": "struct InboundPacket memory[] memory" - } - }, - "id": 2591, - "indexExpression": { - "id": 2590, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2573, - "src": "2269:1:22", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "2261:10:22", - "typeDescriptions": { - "typeIdentifier": "t_struct$_InboundPacket_$2486_memory_ptr", - "typeString": "struct InboundPacket memory" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 2594, - "name": "packet", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2584, - "src": "2295:6:22", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - ], - "expression": { - "id": 2592, - "name": "PacketDecoder", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2611, - "src": "2274:13:22", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_PacketDecoder_$2611_$", - "typeString": "type(library PacketDecoder)" - } - }, - "id": 2593, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2288:6:22", - "memberName": "decode", - "nodeType": "MemberAccess", - "referencedDeclaration": 2548, - "src": "2274:20:22", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_bytes_calldata_ptr_$returns$_t_struct$_InboundPacket_$2486_memory_ptr_$", - "typeString": "function (bytes calldata) pure returns (struct InboundPacket memory)" - } - }, - "id": 2595, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2274:28:22", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_struct$_InboundPacket_$2486_memory_ptr", - "typeString": "struct InboundPacket memory" - } - }, - "src": "2261:41:22", - "typeDescriptions": { - "typeIdentifier": "t_struct$_InboundPacket_$2486_memory_ptr", - "typeString": "struct InboundPacket memory" - } - }, - "id": 2597, - "nodeType": "ExpressionStatement", - "src": "2261:41:22" - }, - { - "expression": { - "id": 2605, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "baseExpression": { - "id": 2598, - "name": "packets", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2560, - "src": "2412:7:22", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_InboundPacket_$2486_memory_ptr_$dyn_memory_ptr", - "typeString": "struct InboundPacket memory[] memory" - } - }, - "id": 2600, - "indexExpression": { - "id": 2599, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2573, - "src": "2420:1:22", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "2412:10:22", - "typeDescriptions": { - "typeIdentifier": "t_struct$_InboundPacket_$2486_memory_ptr", - "typeString": "struct InboundPacket memory" - } - }, - "id": 2601, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "2423:5:22", - "memberName": "value", - "nodeType": "MemberAccess", - "referencedDeclaration": 2479, - "src": "2412:16:22", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "baseExpression": { - "id": 2602, - "name": "_packetMsgValues", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2555, - "src": "2431:16:22", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", - "typeString": "uint256[] memory" - } - }, - "id": 2604, - "indexExpression": { - "id": 2603, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2573, - "src": "2448:1:22", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "2431:19:22", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "2412:38:22", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 2606, - "nodeType": "ExpressionStatement", - "src": "2412:38:22" - } - ] - }, - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 2579, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 2576, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2573, - "src": "2172:1:22", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "expression": { - "id": 2577, - "name": "_packets", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2552, - "src": "2176:8:22", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr", - "typeString": "bytes calldata[] calldata" - } - }, - "id": 2578, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2185:6:22", - "memberName": "length", - "nodeType": "MemberAccess", - "src": "2176:15:22", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "2172:19:22", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 2608, - "initializationExpression": { - "assignments": [2573], - "declarations": [ - { - "constant": false, - "id": 2573, - "mutability": "mutable", - "name": "i", - "nameLocation": "2165:1:22", - "nodeType": "VariableDeclaration", - "scope": 2608, - "src": "2157:9:22", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2572, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2157:7:22", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 2575, - "initialValue": { - "hexValue": "30", - "id": 2574, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2169:1:22", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "nodeType": "VariableDeclarationStatement", - "src": "2157:13:22" - }, - "isSimpleCounterLoop": true, - "loopExpression": { - "expression": { - "id": 2581, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "++", - "prefix": false, - "src": "2193:3:22", - "subExpression": { - "id": 2580, - "name": "i", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2573, - "src": "2193:1:22", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 2582, - "nodeType": "ExpressionStatement", - "src": "2193:3:22" - }, - "nodeType": "ForStatement", - "src": "2152:309:22" - } - ] - }, - "documentation": { - "id": 2549, - "nodeType": "StructuredDocumentation", - "src": "1578:348:22", - "text": " @dev Decode multiple inbound packets from the given packet data and associated message values.\n @param _packets An array of packet data to decode.\n @param _packetMsgValues An array of associated message values for each packet.\n @return packets An array of InboundPacket structs representing the decoded packets." - }, - "id": 2610, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "decode", - "nameLocation": "1940:6:22", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2556, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2552, - "mutability": "mutable", - "name": "_packets", - "nameLocation": "1973:8:22", - "nodeType": "VariableDeclaration", - "scope": 2610, - "src": "1956:25:22", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr", - "typeString": "bytes[]" - }, - "typeName": { - "baseType": { - "id": 2550, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "1956:5:22", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "id": 2551, - "nodeType": "ArrayTypeName", - "src": "1956:7:22", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_bytes_storage_$dyn_storage_ptr", - "typeString": "bytes[]" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2555, - "mutability": "mutable", - "name": "_packetMsgValues", - "nameLocation": "2008:16:22", - "nodeType": "VariableDeclaration", - "scope": 2610, - "src": "1991:33:22", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", - "typeString": "uint256[]" - }, - "typeName": { - "baseType": { - "id": 2553, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1991:7:22", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 2554, - "nodeType": "ArrayTypeName", - "src": "1991:9:22", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", - "typeString": "uint256[]" - } - }, - "visibility": "internal" - } - ], - "src": "1946:84:22" - }, - "returnParameters": { - "id": 2561, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2560, - "mutability": "mutable", - "name": "packets", - "nameLocation": "2077:7:22", - "nodeType": "VariableDeclaration", - "scope": 2610, - "src": "2054:30:22", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_InboundPacket_$2486_memory_ptr_$dyn_memory_ptr", - "typeString": "struct InboundPacket[]" - }, - "typeName": { - "baseType": { - "id": 2558, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 2557, - "name": "InboundPacket", - "nameLocations": ["2054:13:22"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 2486, - "src": "2054:13:22" - }, - "referencedDeclaration": 2486, - "src": "2054:13:22", - "typeDescriptions": { - "typeIdentifier": "t_struct$_InboundPacket_$2486_storage_ptr", - "typeString": "struct InboundPacket" - } - }, - "id": 2559, - "nodeType": "ArrayTypeName", - "src": "2054:15:22", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_InboundPacket_$2486_storage_$dyn_storage_ptr", - "typeString": "struct InboundPacket[]" - } - }, - "visibility": "internal" - } - ], - "src": "2053:32:22" - }, - "scope": 2611, - "src": "1931:536:22", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - } - ], - "scope": 2612, - "src": "942:1527:22", - "usedErrors": [], - "usedEvents": [] - } - ], - "src": "33:2437:22" - }, - "id": 22 - }, - "@layerzerolabs/oft-evm/contracts/OFT.sol": { - "ast": { - "absolutePath": "@layerzerolabs/oft-evm/contracts/OFT.sol", - "exportedSymbols": { - "ERC20": [4718], - "IOFT": [3505], - "OFT": [2736], - "OFTCore": [3361] - }, - "id": 2737, - "license": "MIT", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 2613, - "literals": ["solidity", "^", "0.8", ".20"], - "nodeType": "PragmaDirective", - "src": "33:24:23" - }, - { - "absolutePath": "@openzeppelin/contracts/token/ERC20/ERC20.sol", - "file": "@openzeppelin/contracts/token/ERC20/ERC20.sol", - "id": 2615, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 2737, - "sourceUnit": 4719, - "src": "59:70:23", - "symbolAliases": [ - { - "foreign": { - "id": 2614, - "name": "ERC20", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4718, - "src": "68:5:23", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "@layerzerolabs/oft-evm/contracts/OFTCore.sol", - "file": "./OFTCore.sol", - "id": 2618, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 2737, - "sourceUnit": 3362, - "src": "130:46:23", - "symbolAliases": [ - { - "foreign": { - "id": 2616, - "name": "IOFT", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3505, - "src": "139:4:23", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - }, - { - "foreign": { - "id": 2617, - "name": "OFTCore", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3361, - "src": "145:7:23", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "abstract": true, - "baseContracts": [ - { - "baseName": { - "id": 2620, - "name": "OFTCore", - "nameLocations": ["321:7:23"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 3361, - "src": "321:7:23" - }, - "id": 2621, - "nodeType": "InheritanceSpecifier", - "src": "321:7:23" - }, - { - "baseName": { - "id": 2622, - "name": "ERC20", - "nameLocations": ["330:5:23"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 4718, - "src": "330:5:23" - }, - "id": 2623, - "nodeType": "InheritanceSpecifier", - "src": "330:5:23" - } - ], - "canonicalName": "OFT", - "contractDependencies": [], - "contractKind": "contract", - "documentation": { - "id": 2619, - "nodeType": "StructuredDocumentation", - "src": "178:117:23", - "text": " @title OFT Contract\n @dev OFT is an ERC-20 token that extends the functionality of the OFTCore contract." - }, - "fullyImplemented": true, - "id": 2736, - "linearizedBaseContracts": [ - 2736, 4718, 4108, 4822, 4796, 3361, 2149, 2323, 1371, 1653, - 1839, 1501, 3976, 5522, 1964, 2377, 1902, 1985, 238, 3505 - ], - "name": "OFT", - "nameLocation": "314:3:23", - "nodeType": "ContractDefinition", - "nodes": [ - { - "body": { - "id": 2645, - "nodeType": "Block", - "src": "847:2:23", - "statements": [] - }, - "documentation": { - "id": 2624, - "nodeType": "StructuredDocumentation", - "src": "342:300:23", - "text": " @dev Constructor for the OFT contract.\n @param _name The name of the OFT.\n @param _symbol The symbol of the OFT.\n @param _lzEndpoint The LayerZero endpoint address.\n @param _delegate The delegate capable of making OApp configurations inside of the endpoint." - }, - "id": 2646, - "implemented": true, - "kind": "constructor", - "modifiers": [ - { - "arguments": [ - { - "id": 2635, - "name": "_name", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2626, - "src": "787:5:23", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - }, - { - "id": 2636, - "name": "_symbol", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2628, - "src": "794:7:23", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - } - ], - "id": 2637, - "kind": "baseConstructorSpecifier", - "modifierName": { - "id": 2634, - "name": "ERC20", - "nameLocations": ["781:5:23"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 4718, - "src": "781:5:23" - }, - "nodeType": "ModifierInvocation", - "src": "781:21:23" - }, - { - "arguments": [ - { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 2639, - "name": "decimals", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4282, - "src": "811:8:23", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_uint8_$", - "typeString": "function () view returns (uint8)" - } - }, - "id": 2640, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "811:10:23", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - { - "id": 2641, - "name": "_lzEndpoint", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2630, - "src": "823:11:23", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 2642, - "name": "_delegate", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2632, - "src": "836:9:23", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "id": 2643, - "kind": "baseConstructorSpecifier", - "modifierName": { - "id": 2638, - "name": "OFTCore", - "nameLocations": ["803:7:23"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 3361, - "src": "803:7:23" - }, - "nodeType": "ModifierInvocation", - "src": "803:43:23" - } - ], - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2633, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2626, - "mutability": "mutable", - "name": "_name", - "nameLocation": "682:5:23", - "nodeType": "VariableDeclaration", - "scope": 2646, - "src": "668:19:23", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 2625, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "668:6:23", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2628, - "mutability": "mutable", - "name": "_symbol", - "nameLocation": "711:7:23", - "nodeType": "VariableDeclaration", - "scope": 2646, - "src": "697:21:23", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 2627, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "697:6:23", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2630, - "mutability": "mutable", - "name": "_lzEndpoint", - "nameLocation": "736:11:23", - "nodeType": "VariableDeclaration", - "scope": 2646, - "src": "728:19:23", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2629, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "728:7:23", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2632, - "mutability": "mutable", - "name": "_delegate", - "nameLocation": "765:9:23", - "nodeType": "VariableDeclaration", - "scope": 2646, - "src": "757:17:23", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2631, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "757:7:23", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "658:122:23" - }, - "returnParameters": { - "id": 2644, - "nodeType": "ParameterList", - "parameters": [], - "src": "847:0:23" - }, - "scope": 2736, - "src": "647:202:23", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "baseFunctions": [3445], - "body": { - "id": 2657, - "nodeType": "Block", - "src": "1123:37:23", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 2654, - "name": "this", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967268, - "src": "1148:4:23", - "typeDescriptions": { - "typeIdentifier": "t_contract$_OFT_$2736", - "typeString": "contract OFT" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_OFT_$2736", - "typeString": "contract OFT" - } - ], - "id": 2653, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "1140:7:23", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 2652, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1140:7:23", - "typeDescriptions": {} - } - }, - "id": 2655, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1140:13:23", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "functionReturnParameters": 2651, - "id": 2656, - "nodeType": "Return", - "src": "1133:20:23" - } - ] - }, - "documentation": { - "id": 2647, - "nodeType": "StructuredDocumentation", - "src": "855:216:23", - "text": " @dev Retrieves the address of the underlying ERC20 implementation.\n @return The address of the OFT token.\n @dev In the case of OFT, address(this) and erc20 are the same contract." - }, - "functionSelector": "fc0c546a", - "id": 2658, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "token", - "nameLocation": "1085:5:23", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2648, - "nodeType": "ParameterList", - "parameters": [], - "src": "1090:2:23" - }, - "returnParameters": { - "id": 2651, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2650, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 2658, - "src": "1114:7:23", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2649, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1114:7:23", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1113:9:23" - }, - "scope": 2736, - "src": "1076:84:23", - "stateMutability": "view", - "virtual": false, - "visibility": "public" - }, - { - "baseFunctions": [3451], - "body": { - "id": 2666, - "nodeType": "Block", - "src": "1525:29:23", - "statements": [ - { - "expression": { - "hexValue": "66616c7365", - "id": 2664, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1542:5:23", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "false" - }, - "functionReturnParameters": 2663, - "id": 2665, - "nodeType": "Return", - "src": "1535:12:23" - } - ] - }, - "documentation": { - "id": 2659, - "nodeType": "StructuredDocumentation", - "src": "1166:289:23", - "text": " @notice Indicates whether the OFT contract requires approval of the 'token()' to send.\n @return requiresApproval Needs approval of the underlying token implementation.\n @dev In the case of OFT where the contract IS the token, approval is NOT required." - }, - "functionSelector": "9f68b964", - "id": 2667, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "approvalRequired", - "nameLocation": "1469:16:23", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2660, - "nodeType": "ParameterList", - "parameters": [], - "src": "1485:2:23" - }, - "returnParameters": { - "id": 2663, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2662, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 2667, - "src": "1519:4:23", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 2661, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "1519:4:23", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "1518:6:23" - }, - "scope": 2736, - "src": "1460:94:23", - "stateMutability": "pure", - "virtual": true, - "visibility": "external" - }, - { - "baseFunctions": [3348], - "body": { - "id": 2699, - "nodeType": "Block", - "src": "2246:358:23", - "statements": [ - { - "expression": { - "id": 2692, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "components": [ - { - "id": 2684, - "name": "amountSentLD", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2680, - "src": "2257:12:23", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 2685, - "name": "amountReceivedLD", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2682, - "src": "2271:16:23", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 2686, - "isConstant": false, - "isInlineArray": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "TupleExpression", - "src": "2256:32:23", - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$", - "typeString": "tuple(uint256,uint256)" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 2688, - "name": "_amountLD", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2672, - "src": "2302:9:23", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 2689, - "name": "_minAmountLD", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2674, - "src": "2313:12:23", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 2690, - "name": "_dstEid", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2676, - "src": "2327:7:23", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - ], - "id": 2687, - "name": "_debitView", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3332, - "src": "2291:10:23", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_uint256_$_t_uint32_$returns$_t_uint256_$_t_uint256_$", - "typeString": "function (uint256,uint256,uint32) view returns (uint256,uint256)" - } - }, - "id": 2691, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2291:44:23", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$", - "typeString": "tuple(uint256,uint256)" - } - }, - "src": "2256:79:23", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2693, - "nodeType": "ExpressionStatement", - "src": "2256:79:23" - }, - { - "expression": { - "arguments": [ - { - "id": 2695, - "name": "_from", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2670, - "src": "2577:5:23", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 2696, - "name": "amountSentLD", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2680, - "src": "2584:12:23", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 2694, - "name": "_burn", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4591, - "src": "2571:5:23", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,uint256)" - } - }, - "id": 2697, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2571:26:23", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2698, - "nodeType": "ExpressionStatement", - "src": "2571:26:23" - } - ] - }, - "documentation": { - "id": 2668, - "nodeType": "StructuredDocumentation", - "src": "1560:472:23", - "text": " @dev Burns tokens from the sender's specified balance.\n @param _from The address to debit the tokens from.\n @param _amountLD The amount of tokens to send in local decimals.\n @param _minAmountLD The minimum amount to send in local decimals.\n @param _dstEid The destination chain ID.\n @return amountSentLD The amount sent in local decimals.\n @return amountReceivedLD The amount received in local decimals on the remote." - }, - "id": 2700, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_debit", - "nameLocation": "2046:6:23", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 2678, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "2180:8:23" - }, - "parameters": { - "id": 2677, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2670, - "mutability": "mutable", - "name": "_from", - "nameLocation": "2070:5:23", - "nodeType": "VariableDeclaration", - "scope": 2700, - "src": "2062:13:23", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2669, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2062:7:23", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2672, - "mutability": "mutable", - "name": "_amountLD", - "nameLocation": "2093:9:23", - "nodeType": "VariableDeclaration", - "scope": 2700, - "src": "2085:17:23", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2671, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2085:7:23", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2674, - "mutability": "mutable", - "name": "_minAmountLD", - "nameLocation": "2120:12:23", - "nodeType": "VariableDeclaration", - "scope": 2700, - "src": "2112:20:23", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2673, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2112:7:23", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2676, - "mutability": "mutable", - "name": "_dstEid", - "nameLocation": "2149:7:23", - "nodeType": "VariableDeclaration", - "scope": 2700, - "src": "2142:14:23", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 2675, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "2142:6:23", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - } - ], - "src": "2052:110:23" - }, - "returnParameters": { - "id": 2683, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2680, - "mutability": "mutable", - "name": "amountSentLD", - "nameLocation": "2206:12:23", - "nodeType": "VariableDeclaration", - "scope": 2700, - "src": "2198:20:23", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2679, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2198:7:23", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2682, - "mutability": "mutable", - "name": "amountReceivedLD", - "nameLocation": "2228:16:23", - "nodeType": "VariableDeclaration", - "scope": 2700, - "src": "2220:24:23", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2681, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2220:7:23", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "2197:48:23" - }, - "scope": 2736, - "src": "2037:567:23", - "stateMutability": "nonpayable", - "virtual": true, - "visibility": "internal" - }, - { - "baseFunctions": [3360], - "body": { - "id": 2734, - "nodeType": "Block", - "src": "3099:302:23", - "statements": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 2718, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 2713, - "name": "_to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2703, - "src": "3113:3:23", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "arguments": [ - { - "hexValue": "307830", - "id": 2716, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3128:3:23", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0x0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 2715, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "3120:7:23", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 2714, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3120:7:23", - "typeDescriptions": {} - } - }, - "id": 2717, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3120:12:23", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "3113:19:23", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 2726, - "nodeType": "IfStatement", - "src": "3109:46:23", - "trueBody": { - "expression": { - "id": 2724, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 2719, - "name": "_to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2703, - "src": "3134:3:23", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "hexValue": "307864656164", - "id": 2722, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3148:6:23", - "typeDescriptions": { - "typeIdentifier": "t_rational_57005_by_1", - "typeString": "int_const 57005" - }, - "value": "0xdead" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_57005_by_1", - "typeString": "int_const 57005" - } - ], - "id": 2721, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "3140:7:23", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 2720, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3140:7:23", - "typeDescriptions": {} - } - }, - "id": 2723, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3140:15:23", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "3134:21:23", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 2725, - "nodeType": "ExpressionStatement", - "src": "3134:21:23" - } - }, - { - "expression": { - "arguments": [ - { - "id": 2728, - "name": "_to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2703, - "src": "3257:3:23", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 2729, - "name": "_amountLD", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2705, - "src": "3262:9:23", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 2727, - "name": "_mint", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4558, - "src": "3251:5:23", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,uint256)" - } - }, - "id": 2730, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3251:21:23", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2731, - "nodeType": "ExpressionStatement", - "src": "3251:21:23" - }, - { - "expression": { - "id": 2732, - "name": "_amountLD", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2705, - "src": "3385:9:23", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 2712, - "id": 2733, - "nodeType": "Return", - "src": "3378:16:23" - } - ] - }, - "documentation": { - "id": 2701, - "nodeType": "StructuredDocumentation", - "src": "2610:324:23", - "text": " @dev Credits tokens to the specified address.\n @param _to The address to credit the tokens to.\n @param _amountLD The amount of tokens to credit in local decimals.\n @dev _srcEid The source chain ID.\n @return amountReceivedLD The amount of tokens ACTUALLY received in local decimals." - }, - "id": 2735, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_credit", - "nameLocation": "2948:7:23", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 2709, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "3055:8:23" - }, - "parameters": { - "id": 2708, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2703, - "mutability": "mutable", - "name": "_to", - "nameLocation": "2973:3:23", - "nodeType": "VariableDeclaration", - "scope": 2735, - "src": "2965:11:23", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2702, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2965:7:23", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2705, - "mutability": "mutable", - "name": "_amountLD", - "nameLocation": "2994:9:23", - "nodeType": "VariableDeclaration", - "scope": 2735, - "src": "2986:17:23", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2704, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2986:7:23", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2707, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 2735, - "src": "3013:6:23", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 2706, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "3013:6:23", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - } - ], - "src": "2955:82:23" - }, - "returnParameters": { - "id": 2712, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2711, - "mutability": "mutable", - "name": "amountReceivedLD", - "nameLocation": "3081:16:23", - "nodeType": "VariableDeclaration", - "scope": 2735, - "src": "3073:24:23", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2710, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3073:7:23", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "3072:26:23" - }, - "scope": 2736, - "src": "2939:462:23", - "stateMutability": "nonpayable", - "virtual": true, - "visibility": "internal" - } - ], - "scope": 2737, - "src": "296:3107:23", - "usedErrors": [ - 1517, 1675, 1677, 1850, 1854, 1856, 1858, 1937, 2333, 2335, - 3403, 3409, 3842, 3847, 4078, 4083, 4088, 4097, 4102, 4107, 4836 - ], - "usedEvents": [ - 1864, 1943, 2340, 2788, 3421, 3431, 3853, 4730, 4739 - ] - } - ], - "src": "33:3371:23" - }, - "id": 23 - }, - "@layerzerolabs/oft-evm/contracts/OFTCore.sol": { - "ast": { - "absolutePath": "@layerzerolabs/oft-evm/contracts/OFTCore.sol", - "exportedSymbols": { - "IOAppMsgInspector": [1922], - "IOFT": [3505], - "MessagingFee": [33], - "MessagingReceipt": [28], - "OApp": [1371], - "OAppOptionsType3": [2149], - "OAppPreCrimeSimulator": [2323], - "OFTComposeMsgCodec": [3674], - "OFTCore": [3361], - "OFTFeeDetail": [3400], - "OFTLimit": [3388], - "OFTMsgCodec": [3828], - "OFTReceipt": [3394], - "Origin": [40], - "SendParam": [3382] - }, - "id": 3362, - "license": "MIT", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 2738, - "literals": ["solidity", "^", "0.8", ".20"], - "nodeType": "PragmaDirective", - "src": "33:24:24" - }, - { - "absolutePath": "@layerzerolabs/oapp-evm/contracts/oapp/OApp.sol", - "file": "@layerzerolabs/oapp-evm/contracts/oapp/OApp.sol", - "id": 2741, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 3362, - "sourceUnit": 1372, - "src": "59:79:24", - "symbolAliases": [ - { - "foreign": { - "id": 2739, - "name": "OApp", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1371, - "src": "68:4:24", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - }, - { - "foreign": { - "id": 2740, - "name": "Origin", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 40, - "src": "74:6:24", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "@layerzerolabs/oapp-evm/contracts/oapp/libs/OAppOptionsType3.sol", - "file": "@layerzerolabs/oapp-evm/contracts/oapp/libs/OAppOptionsType3.sol", - "id": 2743, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 3362, - "sourceUnit": 2150, - "src": "139:100:24", - "symbolAliases": [ - { - "foreign": { - "id": 2742, - "name": "OAppOptionsType3", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2149, - "src": "148:16:24", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppMsgInspector.sol", - "file": "@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppMsgInspector.sol", - "id": 2745, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 3362, - "sourceUnit": 1923, - "src": "240:108:24", - "symbolAliases": [ - { - "foreign": { - "id": 2744, - "name": "IOAppMsgInspector", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1922, - "src": "249:17:24", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "@layerzerolabs/oapp-evm/contracts/precrime/OAppPreCrimeSimulator.sol", - "file": "@layerzerolabs/oapp-evm/contracts/precrime/OAppPreCrimeSimulator.sol", - "id": 2747, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 3362, - "sourceUnit": 2324, - "src": "350:109:24", - "symbolAliases": [ - { - "foreign": { - "id": 2746, - "name": "OAppPreCrimeSimulator", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2323, - "src": "359:21:24", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "@layerzerolabs/oft-evm/contracts/interfaces/IOFT.sol", - "file": "./interfaces/IOFT.sol", - "id": 2755, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 3362, - "sourceUnit": 3506, - "src": "461:124:24", - "symbolAliases": [ - { - "foreign": { - "id": 2748, - "name": "IOFT", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3505, - "src": "470:4:24", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - }, - { - "foreign": { - "id": 2749, - "name": "SendParam", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3382, - "src": "476:9:24", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - }, - { - "foreign": { - "id": 2750, - "name": "OFTLimit", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3388, - "src": "487:8:24", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - }, - { - "foreign": { - "id": 2751, - "name": "OFTReceipt", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3394, - "src": "497:10:24", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - }, - { - "foreign": { - "id": 2752, - "name": "OFTFeeDetail", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3400, - "src": "509:12:24", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - }, - { - "foreign": { - "id": 2753, - "name": "MessagingReceipt", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 28, - "src": "523:16:24", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - }, - { - "foreign": { - "id": 2754, - "name": "MessagingFee", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 33, - "src": "541:12:24", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "@layerzerolabs/oft-evm/contracts/libs/OFTMsgCodec.sol", - "file": "./libs/OFTMsgCodec.sol", - "id": 2757, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 3362, - "sourceUnit": 3829, - "src": "586:53:24", - "symbolAliases": [ - { - "foreign": { - "id": 2756, - "name": "OFTMsgCodec", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3828, - "src": "595:11:24", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "@layerzerolabs/oft-evm/contracts/libs/OFTComposeMsgCodec.sol", - "file": "./libs/OFTComposeMsgCodec.sol", - "id": 2759, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 3362, - "sourceUnit": 3675, - "src": "640:67:24", - "symbolAliases": [ - { - "foreign": { - "id": 2758, - "name": "OFTComposeMsgCodec", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3674, - "src": "649:18:24", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "abstract": true, - "baseContracts": [ - { - "baseName": { - "id": 2761, - "name": "IOFT", - "nameLocations": ["820:4:24"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 3505, - "src": "820:4:24" - }, - "id": 2762, - "nodeType": "InheritanceSpecifier", - "src": "820:4:24" - }, - { - "baseName": { - "id": 2763, - "name": "OApp", - "nameLocations": ["826:4:24"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 1371, - "src": "826:4:24" - }, - "id": 2764, - "nodeType": "InheritanceSpecifier", - "src": "826:4:24" - }, - { - "baseName": { - "id": 2765, - "name": "OAppPreCrimeSimulator", - "nameLocations": ["832:21:24"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 2323, - "src": "832:21:24" - }, - "id": 2766, - "nodeType": "InheritanceSpecifier", - "src": "832:21:24" - }, - { - "baseName": { - "id": 2767, - "name": "OAppOptionsType3", - "nameLocations": ["855:16:24"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 2149, - "src": "855:16:24" - }, - "id": 2768, - "nodeType": "InheritanceSpecifier", - "src": "855:16:24" - } - ], - "canonicalName": "OFTCore", - "contractDependencies": [], - "contractKind": "contract", - "documentation": { - "id": 2760, - "nodeType": "StructuredDocumentation", - "src": "709:81:24", - "text": " @title OFTCore\n @dev Abstract contract for the OftChain (OFT) token." - }, - "fullyImplemented": false, - "id": 3361, - "linearizedBaseContracts": [ - 3361, 2149, 2323, 1371, 1653, 1839, 1501, 3976, 5522, 1964, - 2377, 1902, 1985, 238, 3505 - ], - "name": "OFTCore", - "nameLocation": "809:7:24", - "nodeType": "ContractDefinition", - "nodes": [ - { - "global": false, - "id": 2771, - "libraryName": { - "id": 2769, - "name": "OFTMsgCodec", - "nameLocations": ["884:11:24"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 3828, - "src": "884:11:24" - }, - "nodeType": "UsingForDirective", - "src": "878:28:24", - "typeName": { - "id": 2770, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "900:5:24", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - } - }, - { - "global": false, - "id": 2774, - "libraryName": { - "id": 2772, - "name": "OFTMsgCodec", - "nameLocations": ["917:11:24"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 3828, - "src": "917:11:24" - }, - "nodeType": "UsingForDirective", - "src": "911:30:24", - "typeName": { - "id": 2773, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "933:7:24", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - }, - { - "constant": false, - "functionSelector": "963efcaa", - "id": 2776, - "mutability": "immutable", - "name": "decimalConversionRate", - "nameLocation": "1812:21:24", - "nodeType": "VariableDeclaration", - "scope": 3361, - "src": "1787:46:24", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2775, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1787:7:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "public" - }, - { - "constant": true, - "functionSelector": "1f5e1334", - "id": 2779, - "mutability": "constant", - "name": "SEND", - "nameLocation": "2116:4:24", - "nodeType": "VariableDeclaration", - "scope": 3361, - "src": "2093:31:24", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - }, - "typeName": { - "id": 2777, - "name": "uint16", - "nodeType": "ElementaryTypeName", - "src": "2093:6:24", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "value": { - "hexValue": "31", - "id": 2778, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2123:1:24", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "visibility": "public" - }, - { - "constant": true, - "functionSelector": "134d4f25", - "id": 2782, - "mutability": "constant", - "name": "SEND_AND_CALL", - "nameLocation": "2153:13:24", - "nodeType": "VariableDeclaration", - "scope": 3361, - "src": "2130:40:24", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - }, - "typeName": { - "id": 2780, - "name": "uint16", - "nodeType": "ElementaryTypeName", - "src": "2130:6:24", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "value": { - "hexValue": "32", - "id": 2781, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2169:1:24", - "typeDescriptions": { - "typeIdentifier": "t_rational_2_by_1", - "typeString": "int_const 2" - }, - "value": "2" - }, - "visibility": "public" - }, - { - "constant": false, - "functionSelector": "111ecdad", - "id": 2784, - "mutability": "mutable", - "name": "msgInspector", - "nameLocation": "2271:12:24", - "nodeType": "VariableDeclaration", - "scope": 3361, - "src": "2256:27:24", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2783, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2256:7:24", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "public" - }, - { - "anonymous": false, - "eventSelector": "f0be4f1e87349231d80c36b33f9e8639658eeaf474014dee15a3e6a4d4414197", - "id": 2788, - "name": "MsgInspectorSet", - "nameLocation": "2295:15:24", - "nodeType": "EventDefinition", - "parameters": { - "id": 2787, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2786, - "indexed": false, - "mutability": "mutable", - "name": "inspector", - "nameLocation": "2319:9:24", - "nodeType": "VariableDeclaration", - "scope": 2788, - "src": "2311:17:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2785, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2311:7:24", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "2310:19:24" - }, - "src": "2289:41:24" - }, - { - "body": { - "id": 2820, - "nodeType": "Block", - "src": "2726:160:24", - "statements": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "id": 2805, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 2802, - "name": "_localDecimals", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2791, - "src": "2740:14:24", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 2803, - "name": "sharedDecimals", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2846, - "src": "2757:14:24", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_uint8_$", - "typeString": "function () view returns (uint8)" - } - }, - "id": 2804, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2757:16:24", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "src": "2740:33:24", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 2809, - "nodeType": "IfStatement", - "src": "2736:68:24", - "trueBody": { - "errorCall": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 2806, - "name": "InvalidLocalDecimals", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3403, - "src": "2782:20:24", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 2807, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2782:22:24", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2808, - "nodeType": "RevertStatement", - "src": "2775:29:24" - } - }, - { - "expression": { - "id": 2818, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 2810, - "name": "decimalConversionRate", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2776, - "src": "2814:21:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 2817, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "hexValue": "3130", - "id": 2811, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2838:2:24", - "typeDescriptions": { - "typeIdentifier": "t_rational_10_by_1", - "typeString": "int_const 10" - }, - "value": "10" - }, - "nodeType": "BinaryOperation", - "operator": "**", - "rightExpression": { - "components": [ - { - "commonType": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "id": 2815, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 2812, - "name": "_localDecimals", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2791, - "src": "2845:14:24", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 2813, - "name": "sharedDecimals", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2846, - "src": "2862:14:24", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_uint8_$", - "typeString": "function () view returns (uint8)" - } - }, - "id": 2814, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2862:16:24", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "src": "2845:33:24", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - } - ], - "id": 2816, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "2844:35:24", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "src": "2838:41:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "2814:65:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 2819, - "nodeType": "ExpressionStatement", - "src": "2814:65:24" - } - ] - }, - "documentation": { - "id": 2789, - "nodeType": "StructuredDocumentation", - "src": "2336:286:24", - "text": " @dev Constructor.\n @param _localDecimals The decimals of the token on the local chain (this chain).\n @param _endpoint The address of the LayerZero endpoint.\n @param _delegate The delegate capable of making OApp configurations inside of the endpoint." - }, - "id": 2821, - "implemented": true, - "kind": "constructor", - "modifiers": [ - { - "arguments": [ - { - "id": 2798, - "name": "_endpoint", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2793, - "src": "2704:9:24", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 2799, - "name": "_delegate", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2795, - "src": "2715:9:24", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "id": 2800, - "kind": "baseConstructorSpecifier", - "modifierName": { - "id": 2797, - "name": "OApp", - "nameLocations": ["2699:4:24"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 1371, - "src": "2699:4:24" - }, - "nodeType": "ModifierInvocation", - "src": "2699:26:24" - } - ], - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2796, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2791, - "mutability": "mutable", - "name": "_localDecimals", - "nameLocation": "2645:14:24", - "nodeType": "VariableDeclaration", - "scope": 2821, - "src": "2639:20:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 2790, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "2639:5:24", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2793, - "mutability": "mutable", - "name": "_endpoint", - "nameLocation": "2669:9:24", - "nodeType": "VariableDeclaration", - "scope": 2821, - "src": "2661:17:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2792, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2661:7:24", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2795, - "mutability": "mutable", - "name": "_delegate", - "nameLocation": "2688:9:24", - "nodeType": "VariableDeclaration", - "scope": 2821, - "src": "2680:17:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2794, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2680:7:24", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "2638:60:24" - }, - "returnParameters": { - "id": 2801, - "nodeType": "ParameterList", - "parameters": [], - "src": "2726:0:24" - }, - "scope": 3361, - "src": "2627:259:24", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "baseFunctions": [3439], - "body": { - "id": 2836, - "nodeType": "Block", - "src": "3490:51:24", - "statements": [ - { - "expression": { - "components": [ - { - "expression": { - "arguments": [ - { - "id": 2830, - "name": "IOFT", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3505, - "src": "3513:4:24", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IOFT_$3505_$", - "typeString": "type(contract IOFT)" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_type$_t_contract$_IOFT_$3505_$", - "typeString": "type(contract IOFT)" - } - ], - "id": 2829, - "name": "type", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967269, - "src": "3508:4:24", - "typeDescriptions": { - "typeIdentifier": "t_function_metatype_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 2831, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3508:10:24", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_magic_meta_type_t_contract$_IOFT_$3505", - "typeString": "type(contract IOFT)" - } - }, - "id": 2832, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "3519:11:24", - "memberName": "interfaceId", - "nodeType": "MemberAccess", - "src": "3508:22:24", - "typeDescriptions": { - "typeIdentifier": "t_bytes4", - "typeString": "bytes4" - } - }, - { - "hexValue": "31", - "id": 2833, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3532:1:24", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - } - ], - "id": 2834, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "3507:27:24", - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_bytes4_$_t_rational_1_by_1_$", - "typeString": "tuple(bytes4,int_const 1)" - } - }, - "functionReturnParameters": 2828, - "id": 2835, - "nodeType": "Return", - "src": "3500:34:24" - } - ] - }, - "documentation": { - "id": 2822, - "nodeType": "StructuredDocumentation", - "src": "2892:504:24", - "text": " @notice Retrieves interfaceID and the version of the OFT.\n @return interfaceId The interface ID.\n @return version The version.\n @dev interfaceId: This specific interface ID is '0x02e49c2c'.\n @dev version: Indicates a cross-chain compatible msg encoding with other OFTs.\n @dev If a new feature is added to the OFT cross-chain msg encoding, the version will be incremented.\n ie. localOFT version(x,1) CAN send messages to remoteOFT version(x,1)" - }, - "functionSelector": "156a0d0f", - "id": 2837, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "oftVersion", - "nameLocation": "3410:10:24", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2823, - "nodeType": "ParameterList", - "parameters": [], - "src": "3420:2:24" - }, - "returnParameters": { - "id": 2828, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2825, - "mutability": "mutable", - "name": "interfaceId", - "nameLocation": "3461:11:24", - "nodeType": "VariableDeclaration", - "scope": 2837, - "src": "3454:18:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes4", - "typeString": "bytes4" - }, - "typeName": { - "id": 2824, - "name": "bytes4", - "nodeType": "ElementaryTypeName", - "src": "3454:6:24", - "typeDescriptions": { - "typeIdentifier": "t_bytes4", - "typeString": "bytes4" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2827, - "mutability": "mutable", - "name": "version", - "nameLocation": "3481:7:24", - "nodeType": "VariableDeclaration", - "scope": 2837, - "src": "3474:14:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "typeName": { - "id": 2826, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "3474:6:24", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "visibility": "internal" - } - ], - "src": "3453:36:24" - }, - "scope": 3361, - "src": "3401:140:24", - "stateMutability": "pure", - "virtual": true, - "visibility": "external" - }, - { - "baseFunctions": [3457], - "body": { - "id": 2845, - "nodeType": "Block", - "src": "4210:25:24", - "statements": [ - { - "expression": { - "hexValue": "36", - "id": 2843, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "4227:1:24", - "typeDescriptions": { - "typeIdentifier": "t_rational_6_by_1", - "typeString": "int_const 6" - }, - "value": "6" - }, - "functionReturnParameters": 2842, - "id": 2844, - "nodeType": "Return", - "src": "4220:8:24" - } - ] - }, - "documentation": { - "id": 2838, - "nodeType": "StructuredDocumentation", - "src": "3547:596:24", - "text": " @dev Retrieves the shared decimals of the OFT.\n @return The shared decimals of the OFT.\n @dev Sets an implicit cap on the amount of tokens, over uint64.max() will need some sort of outbound cap / totalSupply cap\n Lowest common decimal denominator between chains.\n Defaults to 6 decimal places to provide up to 18,446,744,073,709.551615 units (max uint64).\n For tokens exceeding this totalSupply(), they will need to override the sharedDecimals function with something smaller.\n ie. 4 sharedDecimals would be 1,844,674,407,370,955.1615" - }, - "functionSelector": "857749b0", - "id": 2846, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "sharedDecimals", - "nameLocation": "4157:14:24", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2839, - "nodeType": "ParameterList", - "parameters": [], - "src": "4171:2:24" - }, - "returnParameters": { - "id": 2842, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2841, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 2846, - "src": "4203:5:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 2840, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "4203:5:24", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "visibility": "internal" - } - ], - "src": "4202:7:24" - }, - "scope": 3361, - "src": "4148:87:24", - "stateMutability": "view", - "virtual": true, - "visibility": "public" - }, - { - "body": { - "id": 2862, - "nodeType": "Block", - "src": "4656:90:24", - "statements": [ - { - "expression": { - "id": 2856, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 2854, - "name": "msgInspector", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2784, - "src": "4666:12:24", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 2855, - "name": "_msgInspector", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2849, - "src": "4681:13:24", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "4666:28:24", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 2857, - "nodeType": "ExpressionStatement", - "src": "4666:28:24" - }, - { - "eventCall": { - "arguments": [ - { - "id": 2859, - "name": "_msgInspector", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2849, - "src": "4725:13:24", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 2858, - "name": "MsgInspectorSet", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2788, - "src": "4709:15:24", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$", - "typeString": "function (address)" - } - }, - "id": 2860, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4709:30:24", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 2861, - "nodeType": "EmitStatement", - "src": "4704:35:24" - } - ] - }, - "documentation": { - "id": 2847, - "nodeType": "StructuredDocumentation", - "src": "4241:337:24", - "text": " @dev Sets the message inspector address for the OFT.\n @param _msgInspector The address of the message inspector.\n @dev This is an optional contract that can be used to inspect both 'message' and 'options'.\n @dev Set it to address(0) to disable it, or set it to a contract address to enable it." - }, - "functionSelector": "6fc1b31e", - "id": 2863, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 2852, - "kind": "modifierInvocation", - "modifierName": { - "id": 2851, - "name": "onlyOwner", - "nameLocations": ["4646:9:24"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 3887, - "src": "4646:9:24" - }, - "nodeType": "ModifierInvocation", - "src": "4646:9:24" - } - ], - "name": "setMsgInspector", - "nameLocation": "4592:15:24", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2850, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2849, - "mutability": "mutable", - "name": "_msgInspector", - "nameLocation": "4616:13:24", - "nodeType": "VariableDeclaration", - "scope": 2863, - "src": "4608:21:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2848, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4608:7:24", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "4607:23:24" - }, - "returnParameters": { - "id": 2853, - "nodeType": "ParameterList", - "parameters": [], - "src": "4656:0:24" - }, - "scope": 3361, - "src": "4583:163:24", - "stateMutability": "nonpayable", - "virtual": true, - "visibility": "public" - }, - { - "baseFunctions": [3474], - "body": { - "id": 2928, - "nodeType": "Block", - "src": "5325:1035:24", - "statements": [ - { - "assignments": [2881], - "declarations": [ - { - "constant": false, - "id": 2881, - "mutability": "mutable", - "name": "minAmountLD", - "nameLocation": "5343:11:24", - "nodeType": "VariableDeclaration", - "scope": 2928, - "src": "5335:19:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2880, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "5335:7:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 2883, - "initialValue": { - "hexValue": "30", - "id": 2882, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "5357:1:24", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "nodeType": "VariableDeclarationStatement", - "src": "5335:23:24" - }, - { - "assignments": [2885], - "declarations": [ - { - "constant": false, - "id": 2885, - "mutability": "mutable", - "name": "maxAmountLD", - "nameLocation": "5417:11:24", - "nodeType": "VariableDeclaration", - "scope": 2928, - "src": "5409:19:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2884, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "5409:7:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 2891, - "initialValue": { - "expression": { - "arguments": [ - { - "id": 2888, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "5436:6:24", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint64_$", - "typeString": "type(uint64)" - }, - "typeName": { - "id": 2887, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "5436:6:24", - "typeDescriptions": {} - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_type$_t_uint64_$", - "typeString": "type(uint64)" - } - ], - "id": 2886, - "name": "type", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967269, - "src": "5431:4:24", - "typeDescriptions": { - "typeIdentifier": "t_function_metatype_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 2889, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5431:12:24", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_magic_meta_type_t_uint64", - "typeString": "type(uint64)" - } - }, - "id": 2890, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "5444:3:24", - "memberName": "max", - "nodeType": "MemberAccess", - "src": "5431:16:24", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "5409:38:24" - }, - { - "expression": { - "id": 2897, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 2892, - "name": "oftLimit", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2871, - "src": "5498:8:24", - "typeDescriptions": { - "typeIdentifier": "t_struct$_OFTLimit_$3388_memory_ptr", - "typeString": "struct OFTLimit memory" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 2894, - "name": "minAmountLD", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2881, - "src": "5518:11:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 2895, - "name": "maxAmountLD", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2885, - "src": "5531:11:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 2893, - "name": "OFTLimit", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3388, - "src": "5509:8:24", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_struct$_OFTLimit_$3388_storage_ptr_$", - "typeString": "type(struct OFTLimit storage pointer)" - } - }, - "id": 2896, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "structConstructorCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5509:34:24", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_struct$_OFTLimit_$3388_memory_ptr", - "typeString": "struct OFTLimit memory" - } - }, - "src": "5498:45:24", - "typeDescriptions": { - "typeIdentifier": "t_struct$_OFTLimit_$3388_memory_ptr", - "typeString": "struct OFTLimit memory" - } - }, - "id": 2898, - "nodeType": "ExpressionStatement", - "src": "5498:45:24" - }, - { - "expression": { - "id": 2906, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 2899, - "name": "oftFeeDetails", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2875, - "src": "5644:13:24", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_OFTFeeDetail_$3400_memory_ptr_$dyn_memory_ptr", - "typeString": "struct OFTFeeDetail memory[] memory" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "hexValue": "30", - "id": 2904, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "5679:1:24", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 2903, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "NewExpression", - "src": "5660:18:24", - "typeDescriptions": { - "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_struct$_OFTFeeDetail_$3400_memory_ptr_$dyn_memory_ptr_$", - "typeString": "function (uint256) pure returns (struct OFTFeeDetail memory[] memory)" - }, - "typeName": { - "baseType": { - "id": 2901, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 2900, - "name": "OFTFeeDetail", - "nameLocations": ["5664:12:24"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 3400, - "src": "5664:12:24" - }, - "referencedDeclaration": 3400, - "src": "5664:12:24", - "typeDescriptions": { - "typeIdentifier": "t_struct$_OFTFeeDetail_$3400_storage_ptr", - "typeString": "struct OFTFeeDetail" - } - }, - "id": 2902, - "nodeType": "ArrayTypeName", - "src": "5664:14:24", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_OFTFeeDetail_$3400_storage_$dyn_storage_ptr", - "typeString": "struct OFTFeeDetail[]" - } - } - }, - "id": 2905, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5660:21:24", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_OFTFeeDetail_$3400_memory_ptr_$dyn_memory_ptr", - "typeString": "struct OFTFeeDetail memory[] memory" - } - }, - "src": "5644:37:24", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_OFTFeeDetail_$3400_memory_ptr_$dyn_memory_ptr", - "typeString": "struct OFTFeeDetail memory[] memory" - } - }, - "id": 2907, - "nodeType": "ExpressionStatement", - "src": "5644:37:24" - }, - { - "assignments": [2909, 2911], - "declarations": [ - { - "constant": false, - "id": 2909, - "mutability": "mutable", - "name": "amountSentLD", - "nameLocation": "6126:12:24", - "nodeType": "VariableDeclaration", - "scope": 2928, - "src": "6118:20:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2908, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "6118:7:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2911, - "mutability": "mutable", - "name": "amountReceivedLD", - "nameLocation": "6148:16:24", - "nodeType": "VariableDeclaration", - "scope": 2928, - "src": "6140:24:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2910, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "6140:7:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 2920, - "initialValue": { - "arguments": [ - { - "expression": { - "id": 2913, - "name": "_sendParam", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2867, - "src": "6192:10:24", - "typeDescriptions": { - "typeIdentifier": "t_struct$_SendParam_$3382_calldata_ptr", - "typeString": "struct SendParam calldata" - } - }, - "id": 2914, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "6203:8:24", - "memberName": "amountLD", - "nodeType": "MemberAccess", - "referencedDeclaration": 3373, - "src": "6192:19:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "expression": { - "id": 2915, - "name": "_sendParam", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2867, - "src": "6225:10:24", - "typeDescriptions": { - "typeIdentifier": "t_struct$_SendParam_$3382_calldata_ptr", - "typeString": "struct SendParam calldata" - } - }, - "id": 2916, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "6236:11:24", - "memberName": "minAmountLD", - "nodeType": "MemberAccess", - "referencedDeclaration": 3375, - "src": "6225:22:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "expression": { - "id": 2917, - "name": "_sendParam", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2867, - "src": "6261:10:24", - "typeDescriptions": { - "typeIdentifier": "t_struct$_SendParam_$3382_calldata_ptr", - "typeString": "struct SendParam calldata" - } - }, - "id": 2918, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "6272:6:24", - "memberName": "dstEid", - "nodeType": "MemberAccess", - "referencedDeclaration": 3369, - "src": "6261:17:24", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - ], - "id": 2912, - "name": "_debitView", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3332, - "src": "6168:10:24", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_uint256_$_t_uint32_$returns$_t_uint256_$_t_uint256_$", - "typeString": "function (uint256,uint256,uint32) view returns (uint256,uint256)" - } - }, - "id": 2919, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6168:120:24", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$", - "typeString": "tuple(uint256,uint256)" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "6117:171:24" - }, - { - "expression": { - "id": 2926, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 2921, - "name": "oftReceipt", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2878, - "src": "6298:10:24", - "typeDescriptions": { - "typeIdentifier": "t_struct$_OFTReceipt_$3394_memory_ptr", - "typeString": "struct OFTReceipt memory" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 2923, - "name": "amountSentLD", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2909, - "src": "6322:12:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 2924, - "name": "amountReceivedLD", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2911, - "src": "6336:16:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 2922, - "name": "OFTReceipt", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3394, - "src": "6311:10:24", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_struct$_OFTReceipt_$3394_storage_ptr_$", - "typeString": "type(struct OFTReceipt storage pointer)" - } - }, - "id": 2925, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "structConstructorCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6311:42:24", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_struct$_OFTReceipt_$3394_memory_ptr", - "typeString": "struct OFTReceipt memory" - } - }, - "src": "6298:55:24", - "typeDescriptions": { - "typeIdentifier": "t_struct$_OFTReceipt_$3394_memory_ptr", - "typeString": "struct OFTReceipt memory" - } - }, - "id": 2927, - "nodeType": "ExpressionStatement", - "src": "6298:55:24" - } - ] - }, - "documentation": { - "id": 2864, - "nodeType": "StructuredDocumentation", - "src": "4752:345:24", - "text": " @notice Provides the fee breakdown and settings data for an OFT. Unused in the default implementation.\n @param _sendParam The parameters for the send operation.\n @return oftLimit The OFT limit information.\n @return oftFeeDetails The details of OFT fees.\n @return oftReceipt The OFT receipt information." - }, - "functionSelector": "0d35b415", - "id": 2929, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "quoteOFT", - "nameLocation": "5111:8:24", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2868, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2867, - "mutability": "mutable", - "name": "_sendParam", - "nameLocation": "5148:10:24", - "nodeType": "VariableDeclaration", - "scope": 2929, - "src": "5129:29:24", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_struct$_SendParam_$3382_calldata_ptr", - "typeString": "struct SendParam" - }, - "typeName": { - "id": 2866, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 2865, - "name": "SendParam", - "nameLocations": ["5129:9:24"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 3382, - "src": "5129:9:24" - }, - "referencedDeclaration": 3382, - "src": "5129:9:24", - "typeDescriptions": { - "typeIdentifier": "t_struct$_SendParam_$3382_storage_ptr", - "typeString": "struct SendParam" - } - }, - "visibility": "internal" - } - ], - "src": "5119:45:24" - }, - "returnParameters": { - "id": 2879, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2871, - "mutability": "mutable", - "name": "oftLimit", - "nameLocation": "5244:8:24", - "nodeType": "VariableDeclaration", - "scope": 2929, - "src": "5228:24:24", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_OFTLimit_$3388_memory_ptr", - "typeString": "struct OFTLimit" - }, - "typeName": { - "id": 2870, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 2869, - "name": "OFTLimit", - "nameLocations": ["5228:8:24"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 3388, - "src": "5228:8:24" - }, - "referencedDeclaration": 3388, - "src": "5228:8:24", - "typeDescriptions": { - "typeIdentifier": "t_struct$_OFTLimit_$3388_storage_ptr", - "typeString": "struct OFTLimit" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2875, - "mutability": "mutable", - "name": "oftFeeDetails", - "nameLocation": "5276:13:24", - "nodeType": "VariableDeclaration", - "scope": 2929, - "src": "5254:35:24", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_OFTFeeDetail_$3400_memory_ptr_$dyn_memory_ptr", - "typeString": "struct OFTFeeDetail[]" - }, - "typeName": { - "baseType": { - "id": 2873, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 2872, - "name": "OFTFeeDetail", - "nameLocations": ["5254:12:24"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 3400, - "src": "5254:12:24" - }, - "referencedDeclaration": 3400, - "src": "5254:12:24", - "typeDescriptions": { - "typeIdentifier": "t_struct$_OFTFeeDetail_$3400_storage_ptr", - "typeString": "struct OFTFeeDetail" - } - }, - "id": 2874, - "nodeType": "ArrayTypeName", - "src": "5254:14:24", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_OFTFeeDetail_$3400_storage_$dyn_storage_ptr", - "typeString": "struct OFTFeeDetail[]" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2878, - "mutability": "mutable", - "name": "oftReceipt", - "nameLocation": "5309:10:24", - "nodeType": "VariableDeclaration", - "scope": 2929, - "src": "5291:28:24", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_OFTReceipt_$3394_memory_ptr", - "typeString": "struct OFTReceipt" - }, - "typeName": { - "id": 2877, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 2876, - "name": "OFTReceipt", - "nameLocations": ["5291:10:24"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 3394, - "src": "5291:10:24" - }, - "referencedDeclaration": 3394, - "src": "5291:10:24", - "typeDescriptions": { - "typeIdentifier": "t_struct$_OFTReceipt_$3394_storage_ptr", - "typeString": "struct OFTReceipt" - } - }, - "visibility": "internal" - } - ], - "src": "5227:93:24" - }, - "scope": 3361, - "src": "5102:1258:24", - "stateMutability": "view", - "virtual": true, - "visibility": "external" - }, - { - "baseFunctions": [3486], - "body": { - "id": 2969, - "nodeType": "Block", - "src": "6962:623:24", - "statements": [ - { - "assignments": [null, 2942], - "declarations": [ - null, - { - "constant": false, - "id": 2942, - "mutability": "mutable", - "name": "amountReceivedLD", - "nameLocation": "7153:16:24", - "nodeType": "VariableDeclaration", - "scope": 2969, - "src": "7145:24:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 2941, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "7145:7:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 2951, - "initialValue": { - "arguments": [ - { - "expression": { - "id": 2944, - "name": "_sendParam", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2933, - "src": "7184:10:24", - "typeDescriptions": { - "typeIdentifier": "t_struct$_SendParam_$3382_calldata_ptr", - "typeString": "struct SendParam calldata" - } - }, - "id": 2945, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "7195:8:24", - "memberName": "amountLD", - "nodeType": "MemberAccess", - "referencedDeclaration": 3373, - "src": "7184:19:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "expression": { - "id": 2946, - "name": "_sendParam", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2933, - "src": "7205:10:24", - "typeDescriptions": { - "typeIdentifier": "t_struct$_SendParam_$3382_calldata_ptr", - "typeString": "struct SendParam calldata" - } - }, - "id": 2947, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "7216:11:24", - "memberName": "minAmountLD", - "nodeType": "MemberAccess", - "referencedDeclaration": 3375, - "src": "7205:22:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "expression": { - "id": 2948, - "name": "_sendParam", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2933, - "src": "7229:10:24", - "typeDescriptions": { - "typeIdentifier": "t_struct$_SendParam_$3382_calldata_ptr", - "typeString": "struct SendParam calldata" - } - }, - "id": 2949, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "7240:6:24", - "memberName": "dstEid", - "nodeType": "MemberAccess", - "referencedDeclaration": 3369, - "src": "7229:17:24", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - ], - "id": 2943, - "name": "_debitView", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3332, - "src": "7173:10:24", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_uint256_$_t_uint32_$returns$_t_uint256_$_t_uint256_$", - "typeString": "function (uint256,uint256,uint32) view returns (uint256,uint256)" - } - }, - "id": 2950, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7173:74:24", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$", - "typeString": "tuple(uint256,uint256)" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "7142:105:24" - }, - { - "assignments": [2953, 2955], - "declarations": [ - { - "constant": false, - "id": 2953, - "mutability": "mutable", - "name": "message", - "nameLocation": "7349:7:24", - "nodeType": "VariableDeclaration", - "scope": 2969, - "src": "7336:20:24", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 2952, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "7336:5:24", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2955, - "mutability": "mutable", - "name": "options", - "nameLocation": "7371:7:24", - "nodeType": "VariableDeclaration", - "scope": 2969, - "src": "7358:20:24", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 2954, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "7358:5:24", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "id": 2960, - "initialValue": { - "arguments": [ - { - "id": 2957, - "name": "_sendParam", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2933, - "src": "7402:10:24", - "typeDescriptions": { - "typeIdentifier": "t_struct$_SendParam_$3382_calldata_ptr", - "typeString": "struct SendParam calldata" - } - }, - { - "id": 2958, - "name": "amountReceivedLD", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2942, - "src": "7414:16:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_struct$_SendParam_$3382_calldata_ptr", - "typeString": "struct SendParam calldata" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 2956, - "name": "_buildMsgAndOptions", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3135, - "src": "7382:19:24", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_struct$_SendParam_$3382_calldata_ptr_$_t_uint256_$returns$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$", - "typeString": "function (struct SendParam calldata,uint256) view returns (bytes memory,bytes memory)" - } - }, - "id": 2959, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7382:49:24", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$", - "typeString": "tuple(bytes memory,bytes memory)" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "7335:96:24" - }, - { - "expression": { - "arguments": [ - { - "expression": { - "id": 2962, - "name": "_sendParam", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2933, - "src": "7527:10:24", - "typeDescriptions": { - "typeIdentifier": "t_struct$_SendParam_$3382_calldata_ptr", - "typeString": "struct SendParam calldata" - } - }, - "id": 2963, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "7538:6:24", - "memberName": "dstEid", - "nodeType": "MemberAccess", - "referencedDeclaration": 3369, - "src": "7527:17:24", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - { - "id": 2964, - "name": "message", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2953, - "src": "7546:7:24", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - { - "id": 2965, - "name": "options", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2955, - "src": "7555:7:24", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - { - "id": 2966, - "name": "_payInLzToken", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2935, - "src": "7564:13:24", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - }, - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - }, - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 2961, - "name": "_quote", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1726, - "src": "7520:6:24", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_uint32_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$_t_bool_$returns$_t_struct$_MessagingFee_$33_memory_ptr_$", - "typeString": "function (uint32,bytes memory,bytes memory,bool) view returns (struct MessagingFee memory)" - } - }, - "id": 2967, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7520:58:24", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_struct$_MessagingFee_$33_memory_ptr", - "typeString": "struct MessagingFee memory" - } - }, - "functionReturnParameters": 2940, - "id": 2968, - "nodeType": "Return", - "src": "7513:65:24" - } - ] - }, - "documentation": { - "id": 2930, - "nodeType": "StructuredDocumentation", - "src": "6366:440:24", - "text": " @notice Provides a quote for the send() operation.\n @param _sendParam The parameters for the send() operation.\n @param _payInLzToken Flag indicating whether the caller is paying in the LZ token.\n @return msgFee The calculated LayerZero messaging fee from the send() operation.\n @dev MessagingFee: LayerZero msg fee\n - nativeFee: The native fee.\n - lzTokenFee: The lzToken fee." - }, - "functionSelector": "3b6f743b", - "id": 2970, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "quoteSend", - "nameLocation": "6820:9:24", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2936, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2933, - "mutability": "mutable", - "name": "_sendParam", - "nameLocation": "6858:10:24", - "nodeType": "VariableDeclaration", - "scope": 2970, - "src": "6839:29:24", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_struct$_SendParam_$3382_calldata_ptr", - "typeString": "struct SendParam" - }, - "typeName": { - "id": 2932, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 2931, - "name": "SendParam", - "nameLocations": ["6839:9:24"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 3382, - "src": "6839:9:24" - }, - "referencedDeclaration": 3382, - "src": "6839:9:24", - "typeDescriptions": { - "typeIdentifier": "t_struct$_SendParam_$3382_storage_ptr", - "typeString": "struct SendParam" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2935, - "mutability": "mutable", - "name": "_payInLzToken", - "nameLocation": "6883:13:24", - "nodeType": "VariableDeclaration", - "scope": 2970, - "src": "6878:18:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 2934, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "6878:4:24", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "6829:73:24" - }, - "returnParameters": { - "id": 2940, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2939, - "mutability": "mutable", - "name": "msgFee", - "nameLocation": "6954:6:24", - "nodeType": "VariableDeclaration", - "scope": 2970, - "src": "6934:26:24", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MessagingFee_$33_memory_ptr", - "typeString": "struct MessagingFee" - }, - "typeName": { - "id": 2938, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 2937, - "name": "MessagingFee", - "nameLocations": ["6934:12:24"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 33, - "src": "6934:12:24" - }, - "referencedDeclaration": 33, - "src": "6934:12:24", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MessagingFee_$33_storage_ptr", - "typeString": "struct MessagingFee" - } - }, - "visibility": "internal" - } - ], - "src": "6933:28:24" - }, - "scope": 3361, - "src": "6811:774:24", - "stateMutability": "view", - "virtual": true, - "visibility": "external" - }, - { - "baseFunctions": [3504], - "body": { - "id": 2994, - "nodeType": "Block", - "src": "8500:63:24", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 2989, - "name": "_sendParam", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2974, - "src": "8523:10:24", - "typeDescriptions": { - "typeIdentifier": "t_struct$_SendParam_$3382_calldata_ptr", - "typeString": "struct SendParam calldata" - } - }, - { - "id": 2990, - "name": "_fee", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2977, - "src": "8535:4:24", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MessagingFee_$33_calldata_ptr", - "typeString": "struct MessagingFee calldata" - } - }, - { - "id": 2991, - "name": "_refundAddress", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2979, - "src": "8541:14:24", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_struct$_SendParam_$3382_calldata_ptr", - "typeString": "struct SendParam calldata" - }, - { - "typeIdentifier": "t_struct$_MessagingFee_$33_calldata_ptr", - "typeString": "struct MessagingFee calldata" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 2988, - "name": "_send", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3067, - "src": "8517:5:24", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_SendParam_$3382_calldata_ptr_$_t_struct$_MessagingFee_$33_calldata_ptr_$_t_address_$returns$_t_struct$_MessagingReceipt_$28_memory_ptr_$_t_struct$_OFTReceipt_$3394_memory_ptr_$", - "typeString": "function (struct SendParam calldata,struct MessagingFee calldata,address) returns (struct MessagingReceipt memory,struct OFTReceipt memory)" - } - }, - "id": 2992, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "8517:39:24", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_struct$_MessagingReceipt_$28_memory_ptr_$_t_struct$_OFTReceipt_$3394_memory_ptr_$", - "typeString": "tuple(struct MessagingReceipt memory,struct OFTReceipt memory)" - } - }, - "functionReturnParameters": 2987, - "id": 2993, - "nodeType": "Return", - "src": "8510:46:24" - } - ] - }, - "documentation": { - "id": 2971, - "nodeType": "StructuredDocumentation", - "src": "7591:677:24", - "text": " @dev Executes the send operation.\n @param _sendParam The parameters for the send operation.\n @param _fee The calculated fee for the send() operation.\n - nativeFee: The native fee.\n - lzTokenFee: The lzToken fee.\n @param _refundAddress The address to receive any excess funds.\n @return msgReceipt The receipt for the send operation.\n @return oftReceipt The OFT receipt information.\n @dev MessagingReceipt: LayerZero msg receipt\n - guid: The unique identifier for the sent message.\n - nonce: The nonce of the sent message.\n - fee: The LayerZero fee incurred for the message." - }, - "functionSelector": "c7c7f5b3", - "id": 2995, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "send", - "nameLocation": "8282:4:24", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 2980, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2974, - "mutability": "mutable", - "name": "_sendParam", - "nameLocation": "8315:10:24", - "nodeType": "VariableDeclaration", - "scope": 2995, - "src": "8296:29:24", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_struct$_SendParam_$3382_calldata_ptr", - "typeString": "struct SendParam" - }, - "typeName": { - "id": 2973, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 2972, - "name": "SendParam", - "nameLocations": ["8296:9:24"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 3382, - "src": "8296:9:24" - }, - "referencedDeclaration": 3382, - "src": "8296:9:24", - "typeDescriptions": { - "typeIdentifier": "t_struct$_SendParam_$3382_storage_ptr", - "typeString": "struct SendParam" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2977, - "mutability": "mutable", - "name": "_fee", - "nameLocation": "8357:4:24", - "nodeType": "VariableDeclaration", - "scope": 2995, - "src": "8335:26:24", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MessagingFee_$33_calldata_ptr", - "typeString": "struct MessagingFee" - }, - "typeName": { - "id": 2976, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 2975, - "name": "MessagingFee", - "nameLocations": ["8335:12:24"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 33, - "src": "8335:12:24" - }, - "referencedDeclaration": 33, - "src": "8335:12:24", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MessagingFee_$33_storage_ptr", - "typeString": "struct MessagingFee" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2979, - "mutability": "mutable", - "name": "_refundAddress", - "nameLocation": "8379:14:24", - "nodeType": "VariableDeclaration", - "scope": 2995, - "src": "8371:22:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 2978, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "8371:7:24", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "8286:113:24" - }, - "returnParameters": { - "id": 2987, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2983, - "mutability": "mutable", - "name": "msgReceipt", - "nameLocation": "8458:10:24", - "nodeType": "VariableDeclaration", - "scope": 2995, - "src": "8434:34:24", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MessagingReceipt_$28_memory_ptr", - "typeString": "struct MessagingReceipt" - }, - "typeName": { - "id": 2982, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 2981, - "name": "MessagingReceipt", - "nameLocations": ["8434:16:24"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 28, - "src": "8434:16:24" - }, - "referencedDeclaration": 28, - "src": "8434:16:24", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MessagingReceipt_$28_storage_ptr", - "typeString": "struct MessagingReceipt" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 2986, - "mutability": "mutable", - "name": "oftReceipt", - "nameLocation": "8488:10:24", - "nodeType": "VariableDeclaration", - "scope": 2995, - "src": "8470:28:24", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_OFTReceipt_$3394_memory_ptr", - "typeString": "struct OFTReceipt" - }, - "typeName": { - "id": 2985, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 2984, - "name": "OFTReceipt", - "nameLocations": ["8470:10:24"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 3394, - "src": "8470:10:24" - }, - "referencedDeclaration": 3394, - "src": "8470:10:24", - "typeDescriptions": { - "typeIdentifier": "t_struct$_OFTReceipt_$3394_storage_ptr", - "typeString": "struct OFTReceipt" - } - }, - "visibility": "internal" - } - ], - "src": "8433:66:24" - }, - "scope": 3361, - "src": "8273:290:24", - "stateMutability": "payable", - "virtual": true, - "visibility": "external" - }, - { - "body": { - "id": 3066, - "nodeType": "Block", - "src": "9491:1113:24", - "statements": [ - { - "assignments": [3014, 3016], - "declarations": [ - { - "constant": false, - "id": 3014, - "mutability": "mutable", - "name": "amountSentLD", - "nameLocation": "9831:12:24", - "nodeType": "VariableDeclaration", - "scope": 3066, - "src": "9823:20:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3013, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "9823:7:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3016, - "mutability": "mutable", - "name": "amountReceivedLD", - "nameLocation": "9853:16:24", - "nodeType": "VariableDeclaration", - "scope": 3066, - "src": "9845:24:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3015, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "9845:7:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 3027, - "initialValue": { - "arguments": [ - { - "expression": { - "id": 3018, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967281, - "src": "9893:3:24", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 3019, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "9897:6:24", - "memberName": "sender", - "nodeType": "MemberAccess", - "src": "9893:10:24", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "expression": { - "id": 3020, - "name": "_sendParam", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2999, - "src": "9917:10:24", - "typeDescriptions": { - "typeIdentifier": "t_struct$_SendParam_$3382_calldata_ptr", - "typeString": "struct SendParam calldata" - } - }, - "id": 3021, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "9928:8:24", - "memberName": "amountLD", - "nodeType": "MemberAccess", - "referencedDeclaration": 3373, - "src": "9917:19:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "expression": { - "id": 3022, - "name": "_sendParam", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2999, - "src": "9950:10:24", - "typeDescriptions": { - "typeIdentifier": "t_struct$_SendParam_$3382_calldata_ptr", - "typeString": "struct SendParam calldata" - } - }, - "id": 3023, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "9961:11:24", - "memberName": "minAmountLD", - "nodeType": "MemberAccess", - "referencedDeclaration": 3375, - "src": "9950:22:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "expression": { - "id": 3024, - "name": "_sendParam", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2999, - "src": "9986:10:24", - "typeDescriptions": { - "typeIdentifier": "t_struct$_SendParam_$3382_calldata_ptr", - "typeString": "struct SendParam calldata" - } - }, - "id": 3025, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "9997:6:24", - "memberName": "dstEid", - "nodeType": "MemberAccess", - "referencedDeclaration": 3369, - "src": "9986:17:24", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - ], - "id": 3017, - "name": "_debit", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3348, - "src": "9873:6:24", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_uint32_$returns$_t_uint256_$_t_uint256_$", - "typeString": "function (address,uint256,uint256,uint32) returns (uint256,uint256)" - } - }, - "id": 3026, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "9873:140:24", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$", - "typeString": "tuple(uint256,uint256)" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "9822:191:24" - }, - { - "assignments": [3029, 3031], - "declarations": [ - { - "constant": false, - "id": 3029, - "mutability": "mutable", - "name": "message", - "nameLocation": "10115:7:24", - "nodeType": "VariableDeclaration", - "scope": 3066, - "src": "10102:20:24", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 3028, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "10102:5:24", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3031, - "mutability": "mutable", - "name": "options", - "nameLocation": "10137:7:24", - "nodeType": "VariableDeclaration", - "scope": 3066, - "src": "10124:20:24", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 3030, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "10124:5:24", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "id": 3036, - "initialValue": { - "arguments": [ - { - "id": 3033, - "name": "_sendParam", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2999, - "src": "10168:10:24", - "typeDescriptions": { - "typeIdentifier": "t_struct$_SendParam_$3382_calldata_ptr", - "typeString": "struct SendParam calldata" - } - }, - { - "id": 3034, - "name": "amountReceivedLD", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3016, - "src": "10180:16:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_struct$_SendParam_$3382_calldata_ptr", - "typeString": "struct SendParam calldata" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 3032, - "name": "_buildMsgAndOptions", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3135, - "src": "10148:19:24", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_struct$_SendParam_$3382_calldata_ptr_$_t_uint256_$returns$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$", - "typeString": "function (struct SendParam calldata,uint256) view returns (bytes memory,bytes memory)" - } - }, - "id": 3035, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "10148:49:24", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$", - "typeString": "tuple(bytes memory,bytes memory)" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "10101:96:24" - }, - { - "expression": { - "id": 3046, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 3037, - "name": "msgReceipt", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3008, - "src": "10307:10:24", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MessagingReceipt_$28_memory_ptr", - "typeString": "struct MessagingReceipt memory" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "expression": { - "id": 3039, - "name": "_sendParam", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2999, - "src": "10328:10:24", - "typeDescriptions": { - "typeIdentifier": "t_struct$_SendParam_$3382_calldata_ptr", - "typeString": "struct SendParam calldata" - } - }, - "id": 3040, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "10339:6:24", - "memberName": "dstEid", - "nodeType": "MemberAccess", - "referencedDeclaration": 3369, - "src": "10328:17:24", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - { - "id": 3041, - "name": "message", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3029, - "src": "10347:7:24", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - { - "id": 3042, - "name": "options", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3031, - "src": "10356:7:24", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - { - "id": 3043, - "name": "_fee", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3002, - "src": "10365:4:24", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MessagingFee_$33_calldata_ptr", - "typeString": "struct MessagingFee calldata" - } - }, - { - "id": 3044, - "name": "_refundAddress", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3004, - "src": "10371:14:24", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - }, - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - }, - { - "typeIdentifier": "t_struct$_MessagingFee_$33_calldata_ptr", - "typeString": "struct MessagingFee calldata" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 3038, - "name": "_lzSend", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1781, - "src": "10320:7:24", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_uint32_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$_t_struct$_MessagingFee_$33_memory_ptr_$_t_address_$returns$_t_struct$_MessagingReceipt_$28_memory_ptr_$", - "typeString": "function (uint32,bytes memory,bytes memory,struct MessagingFee memory,address) returns (struct MessagingReceipt memory)" - } - }, - "id": 3045, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "10320:66:24", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_struct$_MessagingReceipt_$28_memory_ptr", - "typeString": "struct MessagingReceipt memory" - } - }, - "src": "10307:79:24", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MessagingReceipt_$28_memory_ptr", - "typeString": "struct MessagingReceipt memory" - } - }, - "id": 3047, - "nodeType": "ExpressionStatement", - "src": "10307:79:24" - }, - { - "expression": { - "id": 3053, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 3048, - "name": "oftReceipt", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3011, - "src": "10439:10:24", - "typeDescriptions": { - "typeIdentifier": "t_struct$_OFTReceipt_$3394_memory_ptr", - "typeString": "struct OFTReceipt memory" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 3050, - "name": "amountSentLD", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3014, - "src": "10463:12:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 3051, - "name": "amountReceivedLD", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3016, - "src": "10477:16:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 3049, - "name": "OFTReceipt", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3394, - "src": "10452:10:24", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_struct$_OFTReceipt_$3394_storage_ptr_$", - "typeString": "type(struct OFTReceipt storage pointer)" - } - }, - "id": 3052, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "structConstructorCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "10452:42:24", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_struct$_OFTReceipt_$3394_memory_ptr", - "typeString": "struct OFTReceipt memory" - } - }, - "src": "10439:55:24", - "typeDescriptions": { - "typeIdentifier": "t_struct$_OFTReceipt_$3394_memory_ptr", - "typeString": "struct OFTReceipt memory" - } - }, - "id": 3054, - "nodeType": "ExpressionStatement", - "src": "10439:55:24" - }, - { - "eventCall": { - "arguments": [ - { - "expression": { - "id": 3056, - "name": "msgReceipt", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3008, - "src": "10518:10:24", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MessagingReceipt_$28_memory_ptr", - "typeString": "struct MessagingReceipt memory" - } - }, - "id": 3057, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "10529:4:24", - "memberName": "guid", - "nodeType": "MemberAccess", - "referencedDeclaration": 22, - "src": "10518:15:24", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "expression": { - "id": 3058, - "name": "_sendParam", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2999, - "src": "10535:10:24", - "typeDescriptions": { - "typeIdentifier": "t_struct$_SendParam_$3382_calldata_ptr", - "typeString": "struct SendParam calldata" - } - }, - "id": 3059, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "10546:6:24", - "memberName": "dstEid", - "nodeType": "MemberAccess", - "referencedDeclaration": 3369, - "src": "10535:17:24", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - { - "expression": { - "id": 3060, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967281, - "src": "10554:3:24", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 3061, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "10558:6:24", - "memberName": "sender", - "nodeType": "MemberAccess", - "src": "10554:10:24", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 3062, - "name": "amountSentLD", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3014, - "src": "10566:12:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 3063, - "name": "amountReceivedLD", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3016, - "src": "10580:16:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 3055, - "name": "OFTSent", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3421, - "src": "10510:7:24", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_uint32_$_t_address_$_t_uint256_$_t_uint256_$returns$__$", - "typeString": "function (bytes32,uint32,address,uint256,uint256)" - } - }, - "id": 3064, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "10510:87:24", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 3065, - "nodeType": "EmitStatement", - "src": "10505:92:24" - } - ] - }, - "documentation": { - "id": 2996, - "nodeType": "StructuredDocumentation", - "src": "8569:697:24", - "text": " @dev Internal function to execute the send operation.\n @param _sendParam The parameters for the send operation.\n @param _fee The calculated fee for the send() operation.\n - nativeFee: The native fee.\n - lzTokenFee: The lzToken fee.\n @param _refundAddress The address to receive any excess funds.\n @return msgReceipt The receipt for the send operation.\n @return oftReceipt The OFT receipt information.\n @dev MessagingReceipt: LayerZero msg receipt\n - guid: The unique identifier for the sent message.\n - nonce: The nonce of the sent message.\n - fee: The LayerZero fee incurred for the message." - }, - "id": 3067, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_send", - "nameLocation": "9280:5:24", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3005, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 2999, - "mutability": "mutable", - "name": "_sendParam", - "nameLocation": "9314:10:24", - "nodeType": "VariableDeclaration", - "scope": 3067, - "src": "9295:29:24", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_struct$_SendParam_$3382_calldata_ptr", - "typeString": "struct SendParam" - }, - "typeName": { - "id": 2998, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 2997, - "name": "SendParam", - "nameLocations": ["9295:9:24"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 3382, - "src": "9295:9:24" - }, - "referencedDeclaration": 3382, - "src": "9295:9:24", - "typeDescriptions": { - "typeIdentifier": "t_struct$_SendParam_$3382_storage_ptr", - "typeString": "struct SendParam" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3002, - "mutability": "mutable", - "name": "_fee", - "nameLocation": "9356:4:24", - "nodeType": "VariableDeclaration", - "scope": 3067, - "src": "9334:26:24", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MessagingFee_$33_calldata_ptr", - "typeString": "struct MessagingFee" - }, - "typeName": { - "id": 3001, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 3000, - "name": "MessagingFee", - "nameLocations": ["9334:12:24"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 33, - "src": "9334:12:24" - }, - "referencedDeclaration": 33, - "src": "9334:12:24", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MessagingFee_$33_storage_ptr", - "typeString": "struct MessagingFee" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3004, - "mutability": "mutable", - "name": "_refundAddress", - "nameLocation": "9378:14:24", - "nodeType": "VariableDeclaration", - "scope": 3067, - "src": "9370:22:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3003, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "9370:7:24", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "9285:113:24" - }, - "returnParameters": { - "id": 3012, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3008, - "mutability": "mutable", - "name": "msgReceipt", - "nameLocation": "9449:10:24", - "nodeType": "VariableDeclaration", - "scope": 3067, - "src": "9425:34:24", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MessagingReceipt_$28_memory_ptr", - "typeString": "struct MessagingReceipt" - }, - "typeName": { - "id": 3007, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 3006, - "name": "MessagingReceipt", - "nameLocations": ["9425:16:24"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 28, - "src": "9425:16:24" - }, - "referencedDeclaration": 28, - "src": "9425:16:24", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MessagingReceipt_$28_storage_ptr", - "typeString": "struct MessagingReceipt" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3011, - "mutability": "mutable", - "name": "oftReceipt", - "nameLocation": "9479:10:24", - "nodeType": "VariableDeclaration", - "scope": 3067, - "src": "9461:28:24", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_OFTReceipt_$3394_memory_ptr", - "typeString": "struct OFTReceipt" - }, - "typeName": { - "id": 3010, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 3009, - "name": "OFTReceipt", - "nameLocations": ["9461:10:24"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 3394, - "src": "9461:10:24" - }, - "referencedDeclaration": 3394, - "src": "9461:10:24", - "typeDescriptions": { - "typeIdentifier": "t_struct$_OFTReceipt_$3394_storage_ptr", - "typeString": "struct OFTReceipt" - } - }, - "visibility": "internal" - } - ], - "src": "9424:66:24" - }, - "scope": 3361, - "src": "9271:1333:24", - "stateMutability": "nonpayable", - "virtual": true, - "visibility": "internal" - }, - { - "body": { - "id": 3134, - "nodeType": "Block", - "src": "11074:1260:24", - "statements": [ - { - "assignments": [3081], - "declarations": [ - { - "constant": false, - "id": 3081, - "mutability": "mutable", - "name": "hasCompose", - "nameLocation": "11089:10:24", - "nodeType": "VariableDeclaration", - "scope": 3134, - "src": "11084:15:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 3080, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "11084:4:24", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "id": 3082, - "nodeType": "VariableDeclarationStatement", - "src": "11084:15:24" - }, - { - "expression": { - "id": 3096, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "components": [ - { - "id": 3083, - "name": "message", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3076, - "src": "11232:7:24", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - { - "id": 3084, - "name": "hasCompose", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3081, - "src": "11241:10:24", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "id": 3085, - "isConstant": false, - "isInlineArray": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "TupleExpression", - "src": "11231:21:24", - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_bytes_memory_ptr_$_t_bool_$", - "typeString": "tuple(bytes memory,bool)" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "expression": { - "id": 3088, - "name": "_sendParam", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3071, - "src": "11287:10:24", - "typeDescriptions": { - "typeIdentifier": "t_struct$_SendParam_$3382_calldata_ptr", - "typeString": "struct SendParam calldata" - } - }, - "id": 3089, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "11298:2:24", - "memberName": "to", - "nodeType": "MemberAccess", - "referencedDeclaration": 3371, - "src": "11287:13:24", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "arguments": [ - { - "id": 3091, - "name": "_amountLD", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3073, - "src": "11320:9:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 3090, - "name": "_toSD", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3297, - "src": "11314:5:24", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint64_$", - "typeString": "function (uint256) view returns (uint64)" - } - }, - "id": 3092, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "11314:16:24", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - { - "expression": { - "id": 3093, - "name": "_sendParam", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3071, - "src": "11548:10:24", - "typeDescriptions": { - "typeIdentifier": "t_struct$_SendParam_$3382_calldata_ptr", - "typeString": "struct SendParam calldata" - } - }, - "id": 3094, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "11559:10:24", - "memberName": "composeMsg", - "nodeType": "MemberAccess", - "referencedDeclaration": 3379, - "src": "11548:21:24", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - ], - "expression": { - "id": 3086, - "name": "OFTMsgCodec", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3828, - "src": "11255:11:24", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_OFTMsgCodec_$3828_$", - "typeString": "type(library OFTMsgCodec)" - } - }, - "id": 3087, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "11267:6:24", - "memberName": "encode", - "nodeType": "MemberAccess", - "referencedDeclaration": 3724, - "src": "11255:18:24", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_uint64_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$_t_bool_$", - "typeString": "function (bytes32,uint64,bytes memory) view returns (bytes memory,bool)" - } - }, - "id": 3095, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "11255:324:24", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_bytes_memory_ptr_$_t_bool_$", - "typeString": "tuple(bytes memory,bool)" - } - }, - "src": "11231:348:24", - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 3097, - "nodeType": "ExpressionStatement", - "src": "11231:348:24" - }, - { - "assignments": [3099], - "declarations": [ - { - "constant": false, - "id": 3099, - "mutability": "mutable", - "name": "msgType", - "nameLocation": "11666:7:24", - "nodeType": "VariableDeclaration", - "scope": 3134, - "src": "11659:14:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - }, - "typeName": { - "id": 3098, - "name": "uint16", - "nodeType": "ElementaryTypeName", - "src": "11659:6:24", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "visibility": "internal" - } - ], - "id": 3104, - "initialValue": { - "condition": { - "id": 3100, - "name": "hasCompose", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3081, - "src": "11676:10:24", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseExpression": { - "id": 3102, - "name": "SEND", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2779, - "src": "11705:4:24", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "id": 3103, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "Conditional", - "src": "11676:33:24", - "trueExpression": { - "id": 3101, - "name": "SEND_AND_CALL", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2782, - "src": "11689:13:24", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "11659:50:24" - }, - { - "expression": { - "id": 3113, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 3105, - "name": "options", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3078, - "src": "11821:7:24", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "expression": { - "id": 3107, - "name": "_sendParam", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3071, - "src": "11846:10:24", - "typeDescriptions": { - "typeIdentifier": "t_struct$_SendParam_$3382_calldata_ptr", - "typeString": "struct SendParam calldata" - } - }, - "id": 3108, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "11857:6:24", - "memberName": "dstEid", - "nodeType": "MemberAccess", - "referencedDeclaration": 3369, - "src": "11846:17:24", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - { - "id": 3109, - "name": "msgType", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3099, - "src": "11865:7:24", - "typeDescriptions": { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - } - }, - { - "expression": { - "id": 3110, - "name": "_sendParam", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3071, - "src": "11874:10:24", - "typeDescriptions": { - "typeIdentifier": "t_struct$_SendParam_$3382_calldata_ptr", - "typeString": "struct SendParam calldata" - } - }, - "id": 3111, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "11885:12:24", - "memberName": "extraOptions", - "nodeType": "MemberAccess", - "referencedDeclaration": 3377, - "src": "11874:23:24", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - { - "typeIdentifier": "t_uint16", - "typeString": "uint16" - }, - { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - ], - "id": 3106, - "name": "combineOptions", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2129, - "src": "11831:14:24", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_uint32_$_t_uint16_$_t_bytes_calldata_ptr_$returns$_t_bytes_memory_ptr_$", - "typeString": "function (uint32,uint16,bytes calldata) view returns (bytes memory)" - } - }, - "id": 3112, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "11831:67:24", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - "src": "11821:77:24", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - "id": 3114, - "nodeType": "ExpressionStatement", - "src": "11821:77:24" - }, - { - "assignments": [3116], - "declarations": [ - { - "constant": false, - "id": 3116, - "mutability": "mutable", - "name": "inspector", - "nameLocation": "12144:9:24", - "nodeType": "VariableDeclaration", - "scope": 3134, - "src": "12136:17:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3115, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "12136:7:24", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "id": 3118, - "initialValue": { - "id": 3117, - "name": "msgInspector", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2784, - "src": "12156:12:24", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "12136:32:24" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 3124, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 3119, - "name": "inspector", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3116, - "src": "12248:9:24", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "arguments": [ - { - "hexValue": "30", - "id": 3122, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "12269:1:24", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 3121, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "12261:7:24", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 3120, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "12261:7:24", - "typeDescriptions": {} - } - }, - "id": 3123, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "12261:10:24", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "12248:23:24", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 3133, - "nodeType": "IfStatement", - "src": "12244:83:24", - "trueBody": { - "expression": { - "arguments": [ - { - "id": 3129, - "name": "message", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3076, - "src": "12310:7:24", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - { - "id": 3130, - "name": "options", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3078, - "src": "12319:7:24", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - }, - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "expression": { - "arguments": [ - { - "id": 3126, - "name": "inspector", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3116, - "src": "12291:9:24", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 3125, - "name": "IOAppMsgInspector", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1922, - "src": "12273:17:24", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IOAppMsgInspector_$1922_$", - "typeString": "type(contract IOAppMsgInspector)" - } - }, - "id": 3127, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "12273:28:24", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IOAppMsgInspector_$1922", - "typeString": "contract IOAppMsgInspector" - } - }, - "id": 3128, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "12302:7:24", - "memberName": "inspect", - "nodeType": "MemberAccess", - "referencedDeclaration": 1921, - "src": "12273:36:24", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bool_$", - "typeString": "function (bytes memory,bytes memory) view external returns (bool)" - } - }, - "id": 3131, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "12273:54:24", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 3132, - "nodeType": "ExpressionStatement", - "src": "12273:54:24" - } - } - ] - }, - "documentation": { - "id": 3068, - "nodeType": "StructuredDocumentation", - "src": "10610:283:24", - "text": " @dev Internal function to build the message and options.\n @param _sendParam The parameters for the send() operation.\n @param _amountLD The amount in local decimals.\n @return message The encoded message.\n @return options The encoded options." - }, - "id": 3135, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_buildMsgAndOptions", - "nameLocation": "10907:19:24", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3074, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3071, - "mutability": "mutable", - "name": "_sendParam", - "nameLocation": "10955:10:24", - "nodeType": "VariableDeclaration", - "scope": 3135, - "src": "10936:29:24", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_struct$_SendParam_$3382_calldata_ptr", - "typeString": "struct SendParam" - }, - "typeName": { - "id": 3070, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 3069, - "name": "SendParam", - "nameLocations": ["10936:9:24"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 3382, - "src": "10936:9:24" - }, - "referencedDeclaration": 3382, - "src": "10936:9:24", - "typeDescriptions": { - "typeIdentifier": "t_struct$_SendParam_$3382_storage_ptr", - "typeString": "struct SendParam" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3073, - "mutability": "mutable", - "name": "_amountLD", - "nameLocation": "10983:9:24", - "nodeType": "VariableDeclaration", - "scope": 3135, - "src": "10975:17:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3072, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "10975:7:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "10926:72:24" - }, - "returnParameters": { - "id": 3079, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3076, - "mutability": "mutable", - "name": "message", - "nameLocation": "11043:7:24", - "nodeType": "VariableDeclaration", - "scope": 3135, - "src": "11030:20:24", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 3075, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "11030:5:24", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3078, - "mutability": "mutable", - "name": "options", - "nameLocation": "11065:7:24", - "nodeType": "VariableDeclaration", - "scope": 3135, - "src": "11052:20:24", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 3077, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "11052:5:24", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "11029:44:24" - }, - "scope": 3361, - "src": "10898:1436:24", - "stateMutability": "view", - "virtual": true, - "visibility": "internal" - }, - { - "baseFunctions": [1652], - "body": { - "id": 3208, - "nodeType": "Block", - "src": "13155:1503:24", - "statements": [ - { - "assignments": [3152], - "declarations": [ - { - "constant": false, - "id": 3152, - "mutability": "mutable", - "name": "toAddress", - "nameLocation": "13337:9:24", - "nodeType": "VariableDeclaration", - "scope": 3208, - "src": "13329:17:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3151, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "13329:7:24", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "id": 3158, - "initialValue": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "id": 3153, - "name": "_message", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3143, - "src": "13349:8:24", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - }, - "id": 3154, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "13358:6:24", - "memberName": "sendTo", - "nodeType": "MemberAccess", - "referencedDeclaration": 3754, - "src": "13349:15:24", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_bytes_calldata_ptr_$returns$_t_bytes32_$attached_to$_t_bytes_calldata_ptr_$", - "typeString": "function (bytes calldata) pure returns (bytes32)" - } - }, - "id": 3155, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "13349:17:24", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "id": 3156, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "13367:16:24", - "memberName": "bytes32ToAddress", - "nodeType": "MemberAccess", - "referencedDeclaration": 3827, - "src": "13349:34:24", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_address_$attached_to$_t_bytes32_$", - "typeString": "function (bytes32) pure returns (address)" - } - }, - "id": 3157, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "13349:36:24", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "13329:56:24" - }, - { - "assignments": [3160], - "declarations": [ - { - "constant": false, - "id": 3160, - "mutability": "mutable", - "name": "amountReceivedLD", - "nameLocation": "13526:16:24", - "nodeType": "VariableDeclaration", - "scope": 3208, - "src": "13518:24:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3159, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "13518:7:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 3171, - "initialValue": { - "arguments": [ - { - "id": 3162, - "name": "toAddress", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3152, - "src": "13553:9:24", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "arguments": [ - { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "id": 3164, - "name": "_message", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3143, - "src": "13570:8:24", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - }, - "id": 3165, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "13579:8:24", - "memberName": "amountSD", - "nodeType": "MemberAccess", - "referencedDeclaration": 3774, - "src": "13570:17:24", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_bytes_calldata_ptr_$returns$_t_uint64_$attached_to$_t_bytes_calldata_ptr_$", - "typeString": "function (bytes calldata) pure returns (uint64)" - } - }, - "id": 3166, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "13570:19:24", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - ], - "id": 3163, - "name": "_toLD", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3281, - "src": "13564:5:24", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_uint64_$returns$_t_uint256_$", - "typeString": "function (uint64) view returns (uint256)" - } - }, - "id": 3167, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "13564:26:24", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "expression": { - "id": 3168, - "name": "_origin", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3139, - "src": "13592:7:24", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Origin_$40_calldata_ptr", - "typeString": "struct Origin calldata" - } - }, - "id": 3169, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "13600:6:24", - "memberName": "srcEid", - "nodeType": "MemberAccess", - "referencedDeclaration": 35, - "src": "13592:14:24", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - ], - "id": 3161, - "name": "_credit", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3360, - "src": "13545:7:24", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_uint32_$returns$_t_uint256_$", - "typeString": "function (address,uint256,uint32) returns (uint256)" - } - }, - "id": 3170, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "13545:62:24", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "13518:89:24" - }, - { - "condition": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "id": 3172, - "name": "_message", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3143, - "src": "13622:8:24", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - }, - "id": 3173, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "13631:10:24", - "memberName": "isComposed", - "nodeType": "MemberAccess", - "referencedDeclaration": 3738, - "src": "13622:19:24", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_bytes_calldata_ptr_$returns$_t_bool_$attached_to$_t_bytes_calldata_ptr_$", - "typeString": "function (bytes calldata) pure returns (bool)" - } - }, - "id": 3174, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "13622:21:24", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 3199, - "nodeType": "IfStatement", - "src": "13618:955:24", - "trueBody": { - "id": 3198, - "nodeType": "Block", - "src": "13645:928:24", - "statements": [ - { - "assignments": [3176], - "declarations": [ - { - "constant": false, - "id": 3176, - "mutability": "mutable", - "name": "composeMsg", - "nameLocation": "13735:10:24", - "nodeType": "VariableDeclaration", - "scope": 3198, - "src": "13722:23:24", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 3175, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "13722:5:24", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "id": 3188, - "initialValue": { - "arguments": [ - { - "expression": { - "id": 3179, - "name": "_origin", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3139, - "src": "13791:7:24", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Origin_$40_calldata_ptr", - "typeString": "struct Origin calldata" - } - }, - "id": 3180, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "13799:5:24", - "memberName": "nonce", - "nodeType": "MemberAccess", - "referencedDeclaration": 39, - "src": "13791:13:24", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - { - "expression": { - "id": 3181, - "name": "_origin", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3139, - "src": "13822:7:24", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Origin_$40_calldata_ptr", - "typeString": "struct Origin calldata" - } - }, - "id": 3182, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "13830:6:24", - "memberName": "srcEid", - "nodeType": "MemberAccess", - "referencedDeclaration": 35, - "src": "13822:14:24", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - { - "id": 3183, - "name": "amountReceivedLD", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3160, - "src": "13854:16:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "id": 3184, - "name": "_message", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3143, - "src": "13888:8:24", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - }, - "id": 3185, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "13897:10:24", - "memberName": "composeMsg", - "nodeType": "MemberAccess", - "referencedDeclaration": 3787, - "src": "13888:19:24", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_bytes_calldata_ptr_$returns$_t_bytes_memory_ptr_$attached_to$_t_bytes_calldata_ptr_$", - "typeString": "function (bytes calldata) pure returns (bytes memory)" - } - }, - "id": 3186, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "13888:21:24", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "expression": { - "id": 3177, - "name": "OFTComposeMsgCodec", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3674, - "src": "13748:18:24", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_OFTComposeMsgCodec_$3674_$", - "typeString": "type(library OFTComposeMsgCodec)" - } - }, - "id": 3178, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "13767:6:24", - "memberName": "encode", - "nodeType": "MemberAccess", - "referencedDeclaration": 3544, - "src": "13748:25:24", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint64_$_t_uint32_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$", - "typeString": "function (uint64,uint32,uint256,bytes memory) pure returns (bytes memory)" - } - }, - "id": 3187, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "13748:175:24", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "13722:201:24" - }, - { - "expression": { - "arguments": [ - { - "id": 3192, - "name": "toAddress", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3152, - "src": "14491:9:24", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 3193, - "name": "_guid", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3141, - "src": "14502:5:24", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "hexValue": "30", - "id": 3194, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "14509:1:24", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - { - "id": 3195, - "name": "composeMsg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3176, - "src": "14551:10:24", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "expression": { - "id": 3189, - "name": "endpoint", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1386, - "src": "14470:8:24", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ILayerZeroEndpointV2_$202", - "typeString": "contract ILayerZeroEndpointV2" - } - }, - "id": 3191, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "14479:11:24", - "memberName": "sendCompose", - "nodeType": "MemberAccess", - "referencedDeclaration": 744, - "src": "14470:20:24", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_bytes32_$_t_uint16_$_t_bytes_memory_ptr_$returns$__$", - "typeString": "function (address,bytes32,uint16,bytes memory) external" - } - }, - "id": 3196, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "14470:92:24", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 3197, - "nodeType": "ExpressionStatement", - "src": "14470:92:24" - } - ] - } - }, - { - "eventCall": { - "arguments": [ - { - "id": 3201, - "name": "_guid", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3141, - "src": "14600:5:24", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "expression": { - "id": 3202, - "name": "_origin", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3139, - "src": "14607:7:24", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Origin_$40_calldata_ptr", - "typeString": "struct Origin calldata" - } - }, - "id": 3203, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "14615:6:24", - "memberName": "srcEid", - "nodeType": "MemberAccess", - "referencedDeclaration": 35, - "src": "14607:14:24", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - { - "id": 3204, - "name": "toAddress", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3152, - "src": "14623:9:24", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 3205, - "name": "amountReceivedLD", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3160, - "src": "14634:16:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 3200, - "name": "OFTReceived", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3431, - "src": "14588:11:24", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_uint32_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (bytes32,uint32,address,uint256)" - } - }, - "id": 3206, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "14588:63:24", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 3207, - "nodeType": "EmitStatement", - "src": "14583:68:24" - } - ] - }, - "documentation": { - "id": 3136, - "nodeType": "StructuredDocumentation", - "src": "12340:507:24", - "text": " @dev Internal function to handle the receive on the LayerZero endpoint.\n @param _origin The origin information.\n - srcEid: The source chain endpoint ID.\n - sender: The sender address from the src chain.\n - nonce: The nonce of the LayerZero message.\n @param _guid The unique identifier for the received LayerZero message.\n @param _message The encoded message.\n @dev _executor The address of the executor.\n @dev _extraData Additional data." - }, - "id": 3209, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_lzReceive", - "nameLocation": "12861:10:24", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 3149, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "13146:8:24" - }, - "parameters": { - "id": 3148, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3139, - "mutability": "mutable", - "name": "_origin", - "nameLocation": "12897:7:24", - "nodeType": "VariableDeclaration", - "scope": 3209, - "src": "12881:23:24", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Origin_$40_calldata_ptr", - "typeString": "struct Origin" - }, - "typeName": { - "id": 3138, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 3137, - "name": "Origin", - "nameLocations": ["12881:6:24"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 40, - "src": "12881:6:24" - }, - "referencedDeclaration": 40, - "src": "12881:6:24", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Origin_$40_storage_ptr", - "typeString": "struct Origin" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3141, - "mutability": "mutable", - "name": "_guid", - "nameLocation": "12922:5:24", - "nodeType": "VariableDeclaration", - "scope": 3209, - "src": "12914:13:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 3140, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "12914:7:24", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3143, - "mutability": "mutable", - "name": "_message", - "nameLocation": "12952:8:24", - "nodeType": "VariableDeclaration", - "scope": 3209, - "src": "12937:23:24", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 3142, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "12937:5:24", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3145, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 3209, - "src": "12970:7:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3144, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "12970:7:24", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3147, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 3209, - "src": "13047:14:24", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 3146, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "13047:5:24", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "12871:257:24" - }, - "returnParameters": { - "id": 3150, - "nodeType": "ParameterList", - "parameters": [], - "src": "13155:0:24" - }, - "scope": 3361, - "src": "12852:1806:24", - "stateMutability": "nonpayable", - "virtual": true, - "visibility": "internal" - }, - { - "baseFunctions": [2312], - "body": { - "id": 3233, - "nodeType": "Block", - "src": "15615:76:24", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 3226, - "name": "_origin", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3213, - "src": "15636:7:24", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Origin_$40_calldata_ptr", - "typeString": "struct Origin calldata" - } - }, - { - "id": 3227, - "name": "_guid", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3215, - "src": "15645:5:24", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "id": 3228, - "name": "_message", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3217, - "src": "15652:8:24", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - }, - { - "id": 3229, - "name": "_executor", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3219, - "src": "15662:9:24", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 3230, - "name": "_extraData", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3221, - "src": "15673:10:24", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_struct$_Origin_$40_calldata_ptr", - "typeString": "struct Origin calldata" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - ], - "id": 3225, - "name": "_lzReceive", - "nodeType": "Identifier", - "overloadedDeclarations": [3209], - "referencedDeclaration": 3209, - "src": "15625:10:24", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Origin_$40_calldata_ptr_$_t_bytes32_$_t_bytes_calldata_ptr_$_t_address_$_t_bytes_calldata_ptr_$returns$__$", - "typeString": "function (struct Origin calldata,bytes32,bytes calldata,address,bytes calldata)" - } - }, - "id": 3231, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "15625:59:24", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 3232, - "nodeType": "ExpressionStatement", - "src": "15625:59:24" - } - ] - }, - "documentation": { - "id": 3210, - "nodeType": "StructuredDocumentation", - "src": "14664:735:24", - "text": " @dev Internal function to handle the OAppPreCrimeSimulator simulated receive.\n @param _origin The origin information.\n - srcEid: The source chain endpoint ID.\n - sender: The sender address from the src chain.\n - nonce: The nonce of the LayerZero message.\n @param _guid The unique identifier for the received LayerZero message.\n @param _message The LayerZero message.\n @param _executor The address of the off-chain executor.\n @param _extraData Arbitrary data passed by the msg executor.\n @dev Enables the preCrime simulator to mock sending lzReceive() messages,\n routes the msg down from the OAppPreCrimeSimulator, and back up to the OAppReceiver." - }, - "id": 3234, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_lzReceiveSimulate", - "nameLocation": "15413:18:24", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 3223, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "15606:8:24" - }, - "parameters": { - "id": 3222, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3213, - "mutability": "mutable", - "name": "_origin", - "nameLocation": "15457:7:24", - "nodeType": "VariableDeclaration", - "scope": 3234, - "src": "15441:23:24", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Origin_$40_calldata_ptr", - "typeString": "struct Origin" - }, - "typeName": { - "id": 3212, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 3211, - "name": "Origin", - "nameLocations": ["15441:6:24"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 40, - "src": "15441:6:24" - }, - "referencedDeclaration": 40, - "src": "15441:6:24", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Origin_$40_storage_ptr", - "typeString": "struct Origin" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3215, - "mutability": "mutable", - "name": "_guid", - "nameLocation": "15482:5:24", - "nodeType": "VariableDeclaration", - "scope": 3234, - "src": "15474:13:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 3214, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "15474:7:24", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3217, - "mutability": "mutable", - "name": "_message", - "nameLocation": "15512:8:24", - "nodeType": "VariableDeclaration", - "scope": 3234, - "src": "15497:23:24", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 3216, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "15497:5:24", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3219, - "mutability": "mutable", - "name": "_executor", - "nameLocation": "15538:9:24", - "nodeType": "VariableDeclaration", - "scope": 3234, - "src": "15530:17:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3218, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "15530:7:24", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3221, - "mutability": "mutable", - "name": "_extraData", - "nameLocation": "15572:10:24", - "nodeType": "VariableDeclaration", - "scope": 3234, - "src": "15557:25:24", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 3220, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "15557:5:24", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "15431:157:24" - }, - "returnParameters": { - "id": 3224, - "nodeType": "ParameterList", - "parameters": [], - "src": "15615:0:24" - }, - "scope": 3361, - "src": "15404:287:24", - "stateMutability": "nonpayable", - "virtual": true, - "visibility": "internal" - }, - { - "baseFunctions": [2322], - "body": { - "id": 3251, - "nodeType": "Block", - "src": "16147:44:24", - "statements": [ - { - "expression": { - "commonType": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "id": 3249, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "baseExpression": { - "id": 3245, - "name": "peers", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1390, - "src": "16164:5:24", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_uint32_$_t_bytes32_$", - "typeString": "mapping(uint32 => bytes32)" - } - }, - "id": 3247, - "indexExpression": { - "id": 3246, - "name": "_eid", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3237, - "src": "16170:4:24", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "16164:11:24", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "id": 3248, - "name": "_peer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3239, - "src": "16179:5:24", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "src": "16164:20:24", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "functionReturnParameters": 3244, - "id": 3250, - "nodeType": "Return", - "src": "16157:27:24" - } - ] - }, - "documentation": { - "id": 3235, - "nodeType": "StructuredDocumentation", - "src": "15697:357:24", - "text": " @dev Check if the peer is considered 'trusted' by the OApp.\n @param _eid The endpoint ID to check.\n @param _peer The peer to check.\n @return Whether the peer passed is considered 'trusted' by the OApp.\n @dev Enables OAppPreCrimeSimulator to check whether a potential Inbound Packet is from a trusted source." - }, - "functionSelector": "5a0dfe4d", - "id": 3252, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "isPeer", - "nameLocation": "16068:6:24", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 3241, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "16123:8:24" - }, - "parameters": { - "id": 3240, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3237, - "mutability": "mutable", - "name": "_eid", - "nameLocation": "16082:4:24", - "nodeType": "VariableDeclaration", - "scope": 3252, - "src": "16075:11:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 3236, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "16075:6:24", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3239, - "mutability": "mutable", - "name": "_peer", - "nameLocation": "16096:5:24", - "nodeType": "VariableDeclaration", - "scope": 3252, - "src": "16088:13:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 3238, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "16088:7:24", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "16074:28:24" - }, - "returnParameters": { - "id": 3244, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3243, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 3252, - "src": "16141:4:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 3242, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "16141:4:24", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "16140:6:24" - }, - "scope": 3361, - "src": "16059:132:24", - "stateMutability": "view", - "virtual": true, - "visibility": "public" - }, - { - "body": { - "id": 3267, - "nodeType": "Block", - "src": "16674:83:24", - "statements": [ - { - "expression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 3265, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "components": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 3262, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 3260, - "name": "_amountLD", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3255, - "src": "16692:9:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "id": 3261, - "name": "decimalConversionRate", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2776, - "src": "16704:21:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "16692:33:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 3263, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "16691:35:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "id": 3264, - "name": "decimalConversionRate", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2776, - "src": "16729:21:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "16691:59:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 3259, - "id": 3266, - "nodeType": "Return", - "src": "16684:66:24" - } - ] - }, - "documentation": { - "id": 3253, - "nodeType": "StructuredDocumentation", - "src": "16197:383:24", - "text": " @dev Internal function to remove dust from the given local decimal amount.\n @param _amountLD The amount in local decimals.\n @return amountLD The amount after removing dust.\n @dev Prevents the loss of dust when moving amounts between chains with different decimals.\n @dev eg. uint(123) with a conversion rate of 100 becomes uint(100)." - }, - "id": 3268, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_removeDust", - "nameLocation": "16594:11:24", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3256, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3255, - "mutability": "mutable", - "name": "_amountLD", - "nameLocation": "16614:9:24", - "nodeType": "VariableDeclaration", - "scope": 3268, - "src": "16606:17:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3254, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "16606:7:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "16605:19:24" - }, - "returnParameters": { - "id": 3259, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3258, - "mutability": "mutable", - "name": "amountLD", - "nameLocation": "16664:8:24", - "nodeType": "VariableDeclaration", - "scope": 3268, - "src": "16656:16:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3257, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "16656:7:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "16655:18:24" - }, - "scope": 3361, - "src": "16585:172:24", - "stateMutability": "view", - "virtual": true, - "visibility": "internal" - }, - { - "body": { - "id": 3280, - "nodeType": "Block", - "src": "17063:57:24", - "statements": [ - { - "expression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 3278, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 3276, - "name": "_amountSD", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3271, - "src": "17080:9:24", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "id": 3277, - "name": "decimalConversionRate", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2776, - "src": "17092:21:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "17080:33:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 3275, - "id": 3279, - "nodeType": "Return", - "src": "17073:40:24" - } - ] - }, - "documentation": { - "id": 3269, - "nodeType": "StructuredDocumentation", - "src": "16763:213:24", - "text": " @dev Internal function to convert an amount from shared decimals into local decimals.\n @param _amountSD The amount in shared decimals.\n @return amountLD The amount in local decimals." - }, - "id": 3281, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_toLD", - "nameLocation": "16990:5:24", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3272, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3271, - "mutability": "mutable", - "name": "_amountSD", - "nameLocation": "17003:9:24", - "nodeType": "VariableDeclaration", - "scope": 3281, - "src": "16996:16:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "typeName": { - "id": 3270, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "16996:6:24", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "visibility": "internal" - } - ], - "src": "16995:18:24" - }, - "returnParameters": { - "id": 3275, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3274, - "mutability": "mutable", - "name": "amountLD", - "nameLocation": "17053:8:24", - "nodeType": "VariableDeclaration", - "scope": 3281, - "src": "17045:16:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3273, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "17045:7:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "17044:18:24" - }, - "scope": 3361, - "src": "16981:139:24", - "stateMutability": "view", - "virtual": true, - "visibility": "internal" - }, - { - "body": { - "id": 3296, - "nodeType": "Block", - "src": "17426:65:24", - "statements": [ - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 3293, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 3291, - "name": "_amountLD", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3284, - "src": "17450:9:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "id": 3292, - "name": "decimalConversionRate", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2776, - "src": "17462:21:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "17450:33:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 3290, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "17443:6:24", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint64_$", - "typeString": "type(uint64)" - }, - "typeName": { - "id": 3289, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "17443:6:24", - "typeDescriptions": {} - } - }, - "id": 3294, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "17443:41:24", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "functionReturnParameters": 3288, - "id": 3295, - "nodeType": "Return", - "src": "17436:48:24" - } - ] - }, - "documentation": { - "id": 3282, - "nodeType": "StructuredDocumentation", - "src": "17126:213:24", - "text": " @dev Internal function to convert an amount from local decimals into shared decimals.\n @param _amountLD The amount in local decimals.\n @return amountSD The amount in shared decimals." - }, - "id": 3297, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_toSD", - "nameLocation": "17353:5:24", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3285, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3284, - "mutability": "mutable", - "name": "_amountLD", - "nameLocation": "17367:9:24", - "nodeType": "VariableDeclaration", - "scope": 3297, - "src": "17359:17:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3283, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "17359:7:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "17358:19:24" - }, - "returnParameters": { - "id": 3288, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3287, - "mutability": "mutable", - "name": "amountSD", - "nameLocation": "17416:8:24", - "nodeType": "VariableDeclaration", - "scope": 3297, - "src": "17409:15:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "typeName": { - "id": 3286, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "17409:6:24", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "visibility": "internal" - } - ], - "src": "17408:17:24" - }, - "scope": 3361, - "src": "17344:147:24", - "stateMutability": "view", - "virtual": true, - "visibility": "internal" - }, - { - "body": { - "id": 3331, - "nodeType": "Block", - "src": "18266:478:24", - "statements": [ - { - "expression": { - "id": 3315, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 3311, - "name": "amountSentLD", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3307, - "src": "18399:12:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 3313, - "name": "_amountLD", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3300, - "src": "18426:9:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 3312, - "name": "_removeDust", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3268, - "src": "18414:11:24", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$", - "typeString": "function (uint256) view returns (uint256)" - } - }, - "id": 3314, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "18414:22:24", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "18399:37:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 3316, - "nodeType": "ExpressionStatement", - "src": "18399:37:24" - }, - { - "expression": { - "id": 3319, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 3317, - "name": "amountReceivedLD", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3309, - "src": "18543:16:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 3318, - "name": "amountSentLD", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3307, - "src": "18562:12:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "18543:31:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 3320, - "nodeType": "ExpressionStatement", - "src": "18543:31:24" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 3323, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 3321, - "name": "amountReceivedLD", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3309, - "src": "18625:16:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "id": 3322, - "name": "_minAmountLD", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3302, - "src": "18644:12:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "18625:31:24", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 3330, - "nodeType": "IfStatement", - "src": "18621:117:24", - "trueBody": { - "id": 3329, - "nodeType": "Block", - "src": "18658:80:24", - "statements": [ - { - "errorCall": { - "arguments": [ - { - "id": 3325, - "name": "amountReceivedLD", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3309, - "src": "18696:16:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 3326, - "name": "_minAmountLD", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3302, - "src": "18714:12:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 3324, - "name": "SlippageExceeded", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3409, - "src": "18679:16:24", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$_t_uint256_$_t_uint256_$returns$__$", - "typeString": "function (uint256,uint256) pure" - } - }, - "id": 3327, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "18679:48:24", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 3328, - "nodeType": "RevertStatement", - "src": "18672:55:24" - } - ] - } - } - ] - }, - "documentation": { - "id": 3298, - "nodeType": "StructuredDocumentation", - "src": "17497:574:24", - "text": " @dev Internal function to mock the amount mutation from a OFT debit() operation.\n @param _amountLD The amount to send in local decimals.\n @param _minAmountLD The minimum amount to send in local decimals.\n @dev _dstEid The destination endpoint ID.\n @return amountSentLD The amount sent, in local decimals.\n @return amountReceivedLD The amount to be received on the remote chain, in local decimals.\n @dev This is where things like fees would be calculated and deducted from the amount to be received on the remote." - }, - "id": 3332, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_debitView", - "nameLocation": "18085:10:24", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3305, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3300, - "mutability": "mutable", - "name": "_amountLD", - "nameLocation": "18113:9:24", - "nodeType": "VariableDeclaration", - "scope": 3332, - "src": "18105:17:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3299, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "18105:7:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3302, - "mutability": "mutable", - "name": "_minAmountLD", - "nameLocation": "18140:12:24", - "nodeType": "VariableDeclaration", - "scope": 3332, - "src": "18132:20:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3301, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "18132:7:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3304, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 3332, - "src": "18162:6:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 3303, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "18162:6:24", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - } - ], - "src": "18095:91:24" - }, - "returnParameters": { - "id": 3310, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3307, - "mutability": "mutable", - "name": "amountSentLD", - "nameLocation": "18226:12:24", - "nodeType": "VariableDeclaration", - "scope": 3332, - "src": "18218:20:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3306, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "18218:7:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3309, - "mutability": "mutable", - "name": "amountReceivedLD", - "nameLocation": "18248:16:24", - "nodeType": "VariableDeclaration", - "scope": 3332, - "src": "18240:24:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3308, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "18240:7:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "18217:48:24" - }, - "scope": 3361, - "src": "18076:668:24", - "stateMutability": "view", - "virtual": true, - "visibility": "internal" - }, - { - "documentation": { - "id": 3333, - "nodeType": "StructuredDocumentation", - "src": "18750:647:24", - "text": " @dev Internal function to perform a debit operation.\n @param _from The address to debit.\n @param _amountLD The amount to send in local decimals.\n @param _minAmountLD The minimum amount to send in local decimals.\n @param _dstEid The destination endpoint ID.\n @return amountSentLD The amount sent in local decimals.\n @return amountReceivedLD The amount received in local decimals on the remote.\n @dev Defined here but are intended to be overriden depending on the OFT implementation.\n @dev Depending on OFT implementation the _amountLD could differ from the amountReceivedLD." - }, - "id": 3348, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "_debit", - "nameLocation": "19411:6:24", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3342, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3335, - "mutability": "mutable", - "name": "_from", - "nameLocation": "19435:5:24", - "nodeType": "VariableDeclaration", - "scope": 3348, - "src": "19427:13:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3334, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "19427:7:24", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3337, - "mutability": "mutable", - "name": "_amountLD", - "nameLocation": "19458:9:24", - "nodeType": "VariableDeclaration", - "scope": 3348, - "src": "19450:17:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3336, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "19450:7:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3339, - "mutability": "mutable", - "name": "_minAmountLD", - "nameLocation": "19485:12:24", - "nodeType": "VariableDeclaration", - "scope": 3348, - "src": "19477:20:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3338, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "19477:7:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3341, - "mutability": "mutable", - "name": "_dstEid", - "nameLocation": "19514:7:24", - "nodeType": "VariableDeclaration", - "scope": 3348, - "src": "19507:14:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 3340, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "19507:6:24", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - } - ], - "src": "19417:110:24" - }, - "returnParameters": { - "id": 3347, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3344, - "mutability": "mutable", - "name": "amountSentLD", - "nameLocation": "19562:12:24", - "nodeType": "VariableDeclaration", - "scope": 3348, - "src": "19554:20:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3343, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "19554:7:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3346, - "mutability": "mutable", - "name": "amountReceivedLD", - "nameLocation": "19584:16:24", - "nodeType": "VariableDeclaration", - "scope": 3348, - "src": "19576:24:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3345, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "19576:7:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "19553:48:24" - }, - "scope": 3361, - "src": "19402:200:24", - "stateMutability": "nonpayable", - "virtual": true, - "visibility": "internal" - }, - { - "documentation": { - "id": 3349, - "nodeType": "StructuredDocumentation", - "src": "19608:503:24", - "text": " @dev Internal function to perform a credit operation.\n @param _to The address to credit.\n @param _amountLD The amount to credit in local decimals.\n @param _srcEid The source endpoint ID.\n @return amountReceivedLD The amount ACTUALLY received in local decimals.\n @dev Defined here but are intended to be overriden depending on the OFT implementation.\n @dev Depending on OFT implementation the _amountLD could differ from the amountReceivedLD." - }, - "id": 3360, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "_credit", - "nameLocation": "20125:7:24", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3356, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3351, - "mutability": "mutable", - "name": "_to", - "nameLocation": "20150:3:24", - "nodeType": "VariableDeclaration", - "scope": 3360, - "src": "20142:11:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3350, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "20142:7:24", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3353, - "mutability": "mutable", - "name": "_amountLD", - "nameLocation": "20171:9:24", - "nodeType": "VariableDeclaration", - "scope": 3360, - "src": "20163:17:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3352, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "20163:7:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3355, - "mutability": "mutable", - "name": "_srcEid", - "nameLocation": "20197:7:24", - "nodeType": "VariableDeclaration", - "scope": 3360, - "src": "20190:14:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 3354, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "20190:6:24", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - } - ], - "src": "20132:78:24" - }, - "returnParameters": { - "id": 3359, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3358, - "mutability": "mutable", - "name": "amountReceivedLD", - "nameLocation": "20245:16:24", - "nodeType": "VariableDeclaration", - "scope": 3360, - "src": "20237:24:24", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3357, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "20237:7:24", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "20236:26:24" - }, - "scope": 3361, - "src": "20116:147:24", - "stateMutability": "nonpayable", - "virtual": true, - "visibility": "internal" - } - ], - "scope": 3362, - "src": "791:19474:24", - "usedErrors": [ - 1517, 1675, 1677, 1850, 1854, 1856, 1858, 1937, 2333, 2335, - 3403, 3409, 3842, 3847, 4836 - ], - "usedEvents": [1864, 1943, 2340, 2788, 3421, 3431, 3853] - } - ], - "src": "33:20233:24" - }, - "id": 24 - }, - "@layerzerolabs/oft-evm/contracts/interfaces/IOFT.sol": { - "ast": { - "absolutePath": "@layerzerolabs/oft-evm/contracts/interfaces/IOFT.sol", - "exportedSymbols": { - "IOFT": [3505], - "MessagingFee": [33], - "MessagingReceipt": [28], - "OFTFeeDetail": [3400], - "OFTLimit": [3388], - "OFTReceipt": [3394], - "SendParam": [3382] - }, - "id": 3506, - "license": "MIT", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 3363, - "literals": ["solidity", "^", "0.8", ".20"], - "nodeType": "PragmaDirective", - "src": "33:24:25" - }, - { - "absolutePath": "@layerzerolabs/oapp-evm/contracts/oapp/OAppSender.sol", - "file": "@layerzerolabs/oapp-evm/contracts/oapp/OAppSender.sol", - "id": 3366, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 3506, - "sourceUnit": 1840, - "src": "59:103:25", - "symbolAliases": [ - { - "foreign": { - "id": 3364, - "name": "MessagingReceipt", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 28, - "src": "68:16:25", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - }, - { - "foreign": { - "id": 3365, - "name": "MessagingFee", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 33, - "src": "86:12:25", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "canonicalName": "SendParam", - "documentation": { - "id": 3367, - "nodeType": "StructuredDocumentation", - "src": "164:82:25", - "text": " @dev Struct representing token parameters for the OFT send() operation." - }, - "id": 3382, - "members": [ - { - "constant": false, - "id": 3369, - "mutability": "mutable", - "name": "dstEid", - "nameLocation": "277:6:25", - "nodeType": "VariableDeclaration", - "scope": 3382, - "src": "270:13:25", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 3368, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "270:6:25", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3371, - "mutability": "mutable", - "name": "to", - "nameLocation": "325:2:25", - "nodeType": "VariableDeclaration", - "scope": 3382, - "src": "317:10:25", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 3370, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "317:7:25", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3373, - "mutability": "mutable", - "name": "amountLD", - "nameLocation": "363:8:25", - "nodeType": "VariableDeclaration", - "scope": 3382, - "src": "355:16:25", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3372, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "355:7:25", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3375, - "mutability": "mutable", - "name": "minAmountLD", - "nameLocation": "422:11:25", - "nodeType": "VariableDeclaration", - "scope": 3382, - "src": "414:19:25", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3374, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "414:7:25", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3377, - "mutability": "mutable", - "name": "extraOptions", - "nameLocation": "490:12:25", - "nodeType": "VariableDeclaration", - "scope": 3382, - "src": "484:18:25", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 3376, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "484:5:25", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3379, - "mutability": "mutable", - "name": "composeMsg", - "nameLocation": "596:10:25", - "nodeType": "VariableDeclaration", - "scope": 3382, - "src": "590:16:25", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 3378, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "590:5:25", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3381, - "mutability": "mutable", - "name": "oftCmd", - "nameLocation": "668:6:25", - "nodeType": "VariableDeclaration", - "scope": 3382, - "src": "662:12:25", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 3380, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "662:5:25", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "name": "SendParam", - "nameLocation": "254:9:25", - "nodeType": "StructDefinition", - "scope": 3506, - "src": "247:504:25", - "visibility": "public" - }, - { - "canonicalName": "OFTLimit", - "documentation": { - "id": 3383, - "nodeType": "StructuredDocumentation", - "src": "753:147:25", - "text": " @dev Struct representing OFT limit information.\n @dev These amounts can change dynamically and are up the specific oft implementation." - }, - "id": 3388, - "members": [ - { - "constant": false, - "id": 3385, - "mutability": "mutable", - "name": "minAmountLD", - "nameLocation": "931:11:25", - "nodeType": "VariableDeclaration", - "scope": 3388, - "src": "923:19:25", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3384, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "923:7:25", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3387, - "mutability": "mutable", - "name": "maxAmountLD", - "nameLocation": "1027:11:25", - "nodeType": "VariableDeclaration", - "scope": 3388, - "src": "1019:19:25", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3386, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1019:7:25", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "name": "OFTLimit", - "nameLocation": "908:8:25", - "nodeType": "StructDefinition", - "scope": 3506, - "src": "901:211:25", - "visibility": "public" - }, - { - "canonicalName": "OFTReceipt", - "documentation": { - "id": 3389, - "nodeType": "StructuredDocumentation", - "src": "1114:60:25", - "text": " @dev Struct representing OFT receipt information." - }, - "id": 3394, - "members": [ - { - "constant": false, - "id": 3391, - "mutability": "mutable", - "name": "amountSentLD", - "nameLocation": "1207:12:25", - "nodeType": "VariableDeclaration", - "scope": 3394, - "src": "1199:20:25", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3390, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1199:7:25", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3393, - "mutability": "mutable", - "name": "amountReceivedLD", - "nameLocation": "1400:16:25", - "nodeType": "VariableDeclaration", - "scope": 3394, - "src": "1392:24:25", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3392, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1392:7:25", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "name": "OFTReceipt", - "nameLocation": "1182:10:25", - "nodeType": "StructDefinition", - "scope": 3506, - "src": "1175:299:25", - "visibility": "public" - }, - { - "canonicalName": "OFTFeeDetail", - "documentation": { - "id": 3395, - "nodeType": "StructuredDocumentation", - "src": "1476:154:25", - "text": " @dev Struct representing OFT fee details.\n @dev Future proof mechanism to provide a standardized way to communicate fees to things like a UI." - }, - "id": 3400, - "members": [ - { - "constant": false, - "id": 3397, - "mutability": "mutable", - "name": "feeAmountLD", - "nameLocation": "1664:11:25", - "nodeType": "VariableDeclaration", - "scope": 3400, - "src": "1657:18:25", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - }, - "typeName": { - "id": 3396, - "name": "int256", - "nodeType": "ElementaryTypeName", - "src": "1657:6:25", - "typeDescriptions": { - "typeIdentifier": "t_int256", - "typeString": "int256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3399, - "mutability": "mutable", - "name": "description", - "nameLocation": "1728:11:25", - "nodeType": "VariableDeclaration", - "scope": 3400, - "src": "1721:18:25", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - }, - "typeName": { - "id": 3398, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "1721:6:25", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "visibility": "internal" - } - ], - "name": "OFTFeeDetail", - "nameLocation": "1638:12:25", - "nodeType": "StructDefinition", - "scope": 3506, - "src": "1631:138:25", - "visibility": "public" - }, - { - "abstract": false, - "baseContracts": [], - "canonicalName": "IOFT", - "contractDependencies": [], - "contractKind": "interface", - "documentation": { - "id": 3401, - "nodeType": "StructuredDocumentation", - "src": "1771:197:25", - "text": " @title IOFT\n @dev Interface for the OftChain (OFT) token.\n @dev Does not inherit ERC20 to accommodate usage by OFTAdapter as well.\n @dev This specific interface ID is '0x02e49c2c'." - }, - "fullyImplemented": false, - "id": 3505, - "linearizedBaseContracts": [3505], - "name": "IOFT", - "nameLocation": "1979:4:25", - "nodeType": "ContractDefinition", - "nodes": [ - { - "errorSelector": "1e9714b0", - "id": 3403, - "name": "InvalidLocalDecimals", - "nameLocation": "2025:20:25", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 3402, - "nodeType": "ParameterList", - "parameters": [], - "src": "2045:2:25" - }, - "src": "2019:29:25" - }, - { - "errorSelector": "71c4efed", - "id": 3409, - "name": "SlippageExceeded", - "nameLocation": "2059:16:25", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 3408, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3405, - "mutability": "mutable", - "name": "amountLD", - "nameLocation": "2084:8:25", - "nodeType": "VariableDeclaration", - "scope": 3409, - "src": "2076:16:25", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3404, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2076:7:25", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3407, - "mutability": "mutable", - "name": "minAmountLD", - "nameLocation": "2102:11:25", - "nodeType": "VariableDeclaration", - "scope": 3409, - "src": "2094:19:25", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3406, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2094:7:25", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "2075:39:25" - }, - "src": "2053:62:25" - }, - { - "anonymous": false, - "eventSelector": "85496b760a4b7f8d66384b9df21b381f5d1b1e79f229a47aaf4c232edc2fe59a", - "id": 3421, - "name": "OFTSent", - "nameLocation": "2141:7:25", - "nodeType": "EventDefinition", - "parameters": { - "id": 3420, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3411, - "indexed": true, - "mutability": "mutable", - "name": "guid", - "nameLocation": "2174:4:25", - "nodeType": "VariableDeclaration", - "scope": 3421, - "src": "2158:20:25", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 3410, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "2158:7:25", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3413, - "indexed": false, - "mutability": "mutable", - "name": "dstEid", - "nameLocation": "2223:6:25", - "nodeType": "VariableDeclaration", - "scope": 3421, - "src": "2216:13:25", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 3412, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "2216:6:25", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3415, - "indexed": true, - "mutability": "mutable", - "name": "fromAddress", - "nameLocation": "2283:11:25", - "nodeType": "VariableDeclaration", - "scope": 3421, - "src": "2267:27:25", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3414, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2267:7:25", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3417, - "indexed": false, - "mutability": "mutable", - "name": "amountSentLD", - "nameLocation": "2355:12:25", - "nodeType": "VariableDeclaration", - "scope": 3421, - "src": "2347:20:25", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3416, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2347:7:25", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3419, - "indexed": false, - "mutability": "mutable", - "name": "amountReceivedLD", - "nameLocation": "2429:16:25", - "nodeType": "VariableDeclaration", - "scope": 3421, - "src": "2421:24:25", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3418, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2421:7:25", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "2148:351:25" - }, - "src": "2135:365:25" - }, - { - "anonymous": false, - "eventSelector": "efed6d3500546b29533b128a29e3a94d70788727f0507505ac12eaf2e578fd9c", - "id": 3431, - "name": "OFTReceived", - "nameLocation": "2511:11:25", - "nodeType": "EventDefinition", - "parameters": { - "id": 3430, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3423, - "indexed": true, - "mutability": "mutable", - "name": "guid", - "nameLocation": "2548:4:25", - "nodeType": "VariableDeclaration", - "scope": 3431, - "src": "2532:20:25", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 3422, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "2532:7:25", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3425, - "indexed": false, - "mutability": "mutable", - "name": "srcEid", - "nameLocation": "2597:6:25", - "nodeType": "VariableDeclaration", - "scope": 3431, - "src": "2590:13:25", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 3424, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "2590:6:25", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3427, - "indexed": true, - "mutability": "mutable", - "name": "toAddress", - "nameLocation": "2652:9:25", - "nodeType": "VariableDeclaration", - "scope": 3431, - "src": "2636:25:25", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3426, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2636:7:25", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3429, - "indexed": false, - "mutability": "mutable", - "name": "amountReceivedLD", - "nameLocation": "2725:16:25", - "nodeType": "VariableDeclaration", - "scope": 3431, - "src": "2717:24:25", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3428, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2717:7:25", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "2522:273:25" - }, - "src": "2505:291:25" - }, - { - "documentation": { - "id": 3432, - "nodeType": "StructuredDocumentation", - "src": "2802:504:25", - "text": " @notice Retrieves interfaceID and the version of the OFT.\n @return interfaceId The interface ID.\n @return version The version.\n @dev interfaceId: This specific interface ID is '0x02e49c2c'.\n @dev version: Indicates a cross-chain compatible msg encoding with other OFTs.\n @dev If a new feature is added to the OFT cross-chain msg encoding, the version will be incremented.\n ie. localOFT version(x,1) CAN send messages to remoteOFT version(x,1)" - }, - "functionSelector": "156a0d0f", - "id": 3439, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "oftVersion", - "nameLocation": "3320:10:25", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3433, - "nodeType": "ParameterList", - "parameters": [], - "src": "3330:2:25" - }, - "returnParameters": { - "id": 3438, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3435, - "mutability": "mutable", - "name": "interfaceId", - "nameLocation": "3363:11:25", - "nodeType": "VariableDeclaration", - "scope": 3439, - "src": "3356:18:25", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes4", - "typeString": "bytes4" - }, - "typeName": { - "id": 3434, - "name": "bytes4", - "nodeType": "ElementaryTypeName", - "src": "3356:6:25", - "typeDescriptions": { - "typeIdentifier": "t_bytes4", - "typeString": "bytes4" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3437, - "mutability": "mutable", - "name": "version", - "nameLocation": "3383:7:25", - "nodeType": "VariableDeclaration", - "scope": 3439, - "src": "3376:14:25", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "typeName": { - "id": 3436, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "3376:6:25", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "visibility": "internal" - } - ], - "src": "3355:36:25" - }, - "scope": 3505, - "src": "3311:81:25", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 3440, - "nodeType": "StructuredDocumentation", - "src": "3398:154:25", - "text": " @notice Retrieves the address of the token associated with the OFT.\n @return token The address of the ERC20 token implementation." - }, - "functionSelector": "fc0c546a", - "id": 3445, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "token", - "nameLocation": "3566:5:25", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3441, - "nodeType": "ParameterList", - "parameters": [], - "src": "3571:2:25" - }, - "returnParameters": { - "id": 3444, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3443, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 3445, - "src": "3597:7:25", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3442, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3597:7:25", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "3596:9:25" - }, - "scope": 3505, - "src": "3557:49:25", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 3446, - "nodeType": "StructuredDocumentation", - "src": "3612:355:25", - "text": " @notice Indicates whether the OFT contract requires approval of the 'token()' to send.\n @return requiresApproval Needs approval of the underlying token implementation.\n @dev Allows things like wallet implementers to determine integration requirements,\n without understanding the underlying token implementation." - }, - "functionSelector": "9f68b964", - "id": 3451, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "approvalRequired", - "nameLocation": "3981:16:25", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3447, - "nodeType": "ParameterList", - "parameters": [], - "src": "3997:2:25" - }, - "returnParameters": { - "id": 3450, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3449, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 3451, - "src": "4023:4:25", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 3448, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "4023:4:25", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "4022:6:25" - }, - "scope": 3505, - "src": "3972:57:25", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 3452, - "nodeType": "StructuredDocumentation", - "src": "4035:130:25", - "text": " @notice Retrieves the shared decimals of the OFT.\n @return sharedDecimals The shared decimals of the OFT." - }, - "functionSelector": "857749b0", - "id": 3457, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "sharedDecimals", - "nameLocation": "4179:14:25", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3453, - "nodeType": "ParameterList", - "parameters": [], - "src": "4193:2:25" - }, - "returnParameters": { - "id": 3456, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3455, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 3457, - "src": "4219:5:25", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 3454, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "4219:5:25", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "visibility": "internal" - } - ], - "src": "4218:7:25" - }, - "scope": 3505, - "src": "4170:56:25", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 3458, - "nodeType": "StructuredDocumentation", - "src": "4232:339:25", - "text": " @notice Provides the fee breakdown and settings data for an OFT. Unused in the default implementation.\n @param _sendParam The parameters for the send operation.\n @return limit The OFT limit information.\n @return oftFeeDetails The details of OFT fees.\n @return receipt The OFT receipt information." - }, - "functionSelector": "0d35b415", - "id": 3474, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "quoteOFT", - "nameLocation": "4585:8:25", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3462, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3461, - "mutability": "mutable", - "name": "_sendParam", - "nameLocation": "4622:10:25", - "nodeType": "VariableDeclaration", - "scope": 3474, - "src": "4603:29:25", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_struct$_SendParam_$3382_calldata_ptr", - "typeString": "struct SendParam" - }, - "typeName": { - "id": 3460, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 3459, - "name": "SendParam", - "nameLocations": ["4603:9:25"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 3382, - "src": "4603:9:25" - }, - "referencedDeclaration": 3382, - "src": "4603:9:25", - "typeDescriptions": { - "typeIdentifier": "t_struct$_SendParam_$3382_storage_ptr", - "typeString": "struct SendParam" - } - }, - "visibility": "internal" - } - ], - "src": "4593:45:25" - }, - "returnParameters": { - "id": 3473, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3465, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 3474, - "src": "4662:15:25", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_OFTLimit_$3388_memory_ptr", - "typeString": "struct OFTLimit" - }, - "typeName": { - "id": 3464, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 3463, - "name": "OFTLimit", - "nameLocations": ["4662:8:25"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 3388, - "src": "4662:8:25" - }, - "referencedDeclaration": 3388, - "src": "4662:8:25", - "typeDescriptions": { - "typeIdentifier": "t_struct$_OFTLimit_$3388_storage_ptr", - "typeString": "struct OFTLimit" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3469, - "mutability": "mutable", - "name": "oftFeeDetails", - "nameLocation": "4701:13:25", - "nodeType": "VariableDeclaration", - "scope": 3474, - "src": "4679:35:25", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_OFTFeeDetail_$3400_memory_ptr_$dyn_memory_ptr", - "typeString": "struct OFTFeeDetail[]" - }, - "typeName": { - "baseType": { - "id": 3467, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 3466, - "name": "OFTFeeDetail", - "nameLocations": ["4679:12:25"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 3400, - "src": "4679:12:25" - }, - "referencedDeclaration": 3400, - "src": "4679:12:25", - "typeDescriptions": { - "typeIdentifier": "t_struct$_OFTFeeDetail_$3400_storage_ptr", - "typeString": "struct OFTFeeDetail" - } - }, - "id": 3468, - "nodeType": "ArrayTypeName", - "src": "4679:14:25", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_OFTFeeDetail_$3400_storage_$dyn_storage_ptr", - "typeString": "struct OFTFeeDetail[]" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3472, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 3474, - "src": "4716:17:25", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_OFTReceipt_$3394_memory_ptr", - "typeString": "struct OFTReceipt" - }, - "typeName": { - "id": 3471, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 3470, - "name": "OFTReceipt", - "nameLocations": ["4716:10:25"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 3394, - "src": "4716:10:25" - }, - "referencedDeclaration": 3394, - "src": "4716:10:25", - "typeDescriptions": { - "typeIdentifier": "t_struct$_OFTReceipt_$3394_storage_ptr", - "typeString": "struct OFTReceipt" - } - }, - "visibility": "internal" - } - ], - "src": "4661:73:25" - }, - "scope": 3505, - "src": "4576:159:25", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 3475, - "nodeType": "StructuredDocumentation", - "src": "4741:437:25", - "text": " @notice Provides a quote for the send() operation.\n @param _sendParam The parameters for the send() operation.\n @param _payInLzToken Flag indicating whether the caller is paying in the LZ token.\n @return fee The calculated LayerZero messaging fee from the send() operation.\n @dev MessagingFee: LayerZero msg fee\n - nativeFee: The native fee.\n - lzTokenFee: The lzToken fee." - }, - "functionSelector": "3b6f743b", - "id": 3486, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "quoteSend", - "nameLocation": "5192:9:25", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3481, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3478, - "mutability": "mutable", - "name": "_sendParam", - "nameLocation": "5221:10:25", - "nodeType": "VariableDeclaration", - "scope": 3486, - "src": "5202:29:25", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_struct$_SendParam_$3382_calldata_ptr", - "typeString": "struct SendParam" - }, - "typeName": { - "id": 3477, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 3476, - "name": "SendParam", - "nameLocations": ["5202:9:25"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 3382, - "src": "5202:9:25" - }, - "referencedDeclaration": 3382, - "src": "5202:9:25", - "typeDescriptions": { - "typeIdentifier": "t_struct$_SendParam_$3382_storage_ptr", - "typeString": "struct SendParam" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3480, - "mutability": "mutable", - "name": "_payInLzToken", - "nameLocation": "5238:13:25", - "nodeType": "VariableDeclaration", - "scope": 3486, - "src": "5233:18:25", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 3479, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "5233:4:25", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "5201:51:25" - }, - "returnParameters": { - "id": 3485, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3484, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 3486, - "src": "5276:19:25", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MessagingFee_$33_memory_ptr", - "typeString": "struct MessagingFee" - }, - "typeName": { - "id": 3483, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 3482, - "name": "MessagingFee", - "nameLocations": ["5276:12:25"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 33, - "src": "5276:12:25" - }, - "referencedDeclaration": 33, - "src": "5276:12:25", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MessagingFee_$33_storage_ptr", - "typeString": "struct MessagingFee" - } - }, - "visibility": "internal" - } - ], - "src": "5275:21:25" - }, - "scope": 3505, - "src": "5183:114:25", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 3487, - "nodeType": "StructuredDocumentation", - "src": "5303:727:25", - "text": " @notice Executes the send() operation.\n @param _sendParam The parameters for the send operation.\n @param _fee The fee information supplied by the caller.\n - nativeFee: The native fee.\n - lzTokenFee: The lzToken fee.\n @param _refundAddress The address to receive any excess funds from fees etc. on the src.\n @return receipt The LayerZero messaging receipt from the send() operation.\n @return oftReceipt The OFT receipt information.\n @dev MessagingReceipt: LayerZero msg receipt\n - guid: The unique identifier for the sent message.\n - nonce: The nonce of the sent message.\n - fee: The LayerZero fee incurred for the message." - }, - "functionSelector": "c7c7f5b3", - "id": 3504, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "send", - "nameLocation": "6044:4:25", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3496, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3490, - "mutability": "mutable", - "name": "_sendParam", - "nameLocation": "6077:10:25", - "nodeType": "VariableDeclaration", - "scope": 3504, - "src": "6058:29:25", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_struct$_SendParam_$3382_calldata_ptr", - "typeString": "struct SendParam" - }, - "typeName": { - "id": 3489, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 3488, - "name": "SendParam", - "nameLocations": ["6058:9:25"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 3382, - "src": "6058:9:25" - }, - "referencedDeclaration": 3382, - "src": "6058:9:25", - "typeDescriptions": { - "typeIdentifier": "t_struct$_SendParam_$3382_storage_ptr", - "typeString": "struct SendParam" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3493, - "mutability": "mutable", - "name": "_fee", - "nameLocation": "6119:4:25", - "nodeType": "VariableDeclaration", - "scope": 3504, - "src": "6097:26:25", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MessagingFee_$33_calldata_ptr", - "typeString": "struct MessagingFee" - }, - "typeName": { - "id": 3492, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 3491, - "name": "MessagingFee", - "nameLocations": ["6097:12:25"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 33, - "src": "6097:12:25" - }, - "referencedDeclaration": 33, - "src": "6097:12:25", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MessagingFee_$33_storage_ptr", - "typeString": "struct MessagingFee" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3495, - "mutability": "mutable", - "name": "_refundAddress", - "nameLocation": "6141:14:25", - "nodeType": "VariableDeclaration", - "scope": 3504, - "src": "6133:22:25", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3494, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "6133:7:25", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "6048:113:25" - }, - "returnParameters": { - "id": 3503, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3499, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 3504, - "src": "6188:23:25", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MessagingReceipt_$28_memory_ptr", - "typeString": "struct MessagingReceipt" - }, - "typeName": { - "id": 3498, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 3497, - "name": "MessagingReceipt", - "nameLocations": ["6188:16:25"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 28, - "src": "6188:16:25" - }, - "referencedDeclaration": 28, - "src": "6188:16:25", - "typeDescriptions": { - "typeIdentifier": "t_struct$_MessagingReceipt_$28_storage_ptr", - "typeString": "struct MessagingReceipt" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3502, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 3504, - "src": "6213:17:25", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_OFTReceipt_$3394_memory_ptr", - "typeString": "struct OFTReceipt" - }, - "typeName": { - "id": 3501, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 3500, - "name": "OFTReceipt", - "nameLocations": ["6213:10:25"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 3394, - "src": "6213:10:25" - }, - "referencedDeclaration": 3394, - "src": "6213:10:25", - "typeDescriptions": { - "typeIdentifier": "t_struct$_OFTReceipt_$3394_storage_ptr", - "typeString": "struct OFTReceipt" - } - }, - "visibility": "internal" - } - ], - "src": "6187:44:25" - }, - "scope": 3505, - "src": "6035:197:25", - "stateMutability": "payable", - "virtual": false, - "visibility": "external" - } - ], - "scope": 3506, - "src": "1969:4265:25", - "usedErrors": [3403, 3409], - "usedEvents": [3421, 3431] - } - ], - "src": "33:6202:25" - }, - "id": 25 - }, - "@layerzerolabs/oft-evm/contracts/libs/OFTComposeMsgCodec.sol": { - "ast": { - "absolutePath": "@layerzerolabs/oft-evm/contracts/libs/OFTComposeMsgCodec.sol", - "exportedSymbols": { "OFTComposeMsgCodec": [3674] }, - "id": 3675, - "license": "MIT", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 3507, - "literals": ["solidity", "^", "0.8", ".20"], - "nodeType": "PragmaDirective", - "src": "33:24:26" - }, - { - "abstract": false, - "baseContracts": [], - "canonicalName": "OFTComposeMsgCodec", - "contractDependencies": [], - "contractKind": "library", - "fullyImplemented": true, - "id": 3674, - "linearizedBaseContracts": [3674], - "name": "OFTComposeMsgCodec", - "nameLocation": "67:18:26", - "nodeType": "ContractDefinition", - "nodes": [ - { - "constant": true, - "id": 3510, - "mutability": "constant", - "name": "NONCE_OFFSET", - "nameLocation": "170:12:26", - "nodeType": "VariableDeclaration", - "scope": 3674, - "src": "147:39:26", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 3508, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "147:5:26", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "value": { - "hexValue": "38", - "id": 3509, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "185:1:26", - "typeDescriptions": { - "typeIdentifier": "t_rational_8_by_1", - "typeString": "int_const 8" - }, - "value": "8" - }, - "visibility": "private" - }, - { - "constant": true, - "id": 3513, - "mutability": "constant", - "name": "SRC_EID_OFFSET", - "nameLocation": "215:14:26", - "nodeType": "VariableDeclaration", - "scope": 3674, - "src": "192:42:26", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 3511, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "192:5:26", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "value": { - "hexValue": "3132", - "id": 3512, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "232:2:26", - "typeDescriptions": { - "typeIdentifier": "t_rational_12_by_1", - "typeString": "int_const 12" - }, - "value": "12" - }, - "visibility": "private" - }, - { - "constant": true, - "id": 3516, - "mutability": "constant", - "name": "AMOUNT_LD_OFFSET", - "nameLocation": "263:16:26", - "nodeType": "VariableDeclaration", - "scope": 3674, - "src": "240:44:26", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 3514, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "240:5:26", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "value": { - "hexValue": "3434", - "id": 3515, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "282:2:26", - "typeDescriptions": { - "typeIdentifier": "t_rational_44_by_1", - "typeString": "int_const 44" - }, - "value": "44" - }, - "visibility": "private" - }, - { - "constant": true, - "id": 3519, - "mutability": "constant", - "name": "COMPOSE_FROM_OFFSET", - "nameLocation": "313:19:26", - "nodeType": "VariableDeclaration", - "scope": 3674, - "src": "290:47:26", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 3517, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "290:5:26", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "value": { - "hexValue": "3736", - "id": 3518, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "335:2:26", - "typeDescriptions": { - "typeIdentifier": "t_rational_76_by_1", - "typeString": "int_const 76" - }, - "value": "76" - }, - "visibility": "private" - }, - { - "body": { - "id": 3543, - "nodeType": "Block", - "src": "843:81:26", - "statements": [ - { - "expression": { - "id": 3541, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 3533, - "name": "_msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3531, - "src": "853:4:26", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 3536, - "name": "_nonce", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3522, - "src": "877:6:26", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - { - "id": 3537, - "name": "_srcEid", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3524, - "src": "885:7:26", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - { - "id": 3538, - "name": "_amountLD", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3526, - "src": "894:9:26", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 3539, - "name": "_composeMsg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3528, - "src": "905:11:26", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "expression": { - "id": 3534, - "name": "abi", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967295, - "src": "860:3:26", - "typeDescriptions": { - "typeIdentifier": "t_magic_abi", - "typeString": "abi" - } - }, - "id": 3535, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "864:12:26", - "memberName": "encodePacked", - "nodeType": "MemberAccess", - "src": "860:16:26", - "typeDescriptions": { - "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$", - "typeString": "function () pure returns (bytes memory)" - } - }, - "id": 3540, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "860:57:26", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - "src": "853:64:26", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - "id": 3542, - "nodeType": "ExpressionStatement", - "src": "853:64:26" - } - ] - }, - "documentation": { - "id": 3520, - "nodeType": "StructuredDocumentation", - "src": "344:291:26", - "text": " @dev Encodes a OFT composed message.\n @param _nonce The nonce value.\n @param _srcEid The source endpoint ID.\n @param _amountLD The amount in local decimals.\n @param _composeMsg The composed message.\n @return _msg The encoded Composed message." - }, - "id": 3544, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "encode", - "nameLocation": "649:6:26", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3529, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3522, - "mutability": "mutable", - "name": "_nonce", - "nameLocation": "672:6:26", - "nodeType": "VariableDeclaration", - "scope": 3544, - "src": "665:13:26", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "typeName": { - "id": 3521, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "665:6:26", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3524, - "mutability": "mutable", - "name": "_srcEid", - "nameLocation": "695:7:26", - "nodeType": "VariableDeclaration", - "scope": 3544, - "src": "688:14:26", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 3523, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "688:6:26", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3526, - "mutability": "mutable", - "name": "_amountLD", - "nameLocation": "720:9:26", - "nodeType": "VariableDeclaration", - "scope": 3544, - "src": "712:17:26", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3525, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "712:7:26", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3528, - "mutability": "mutable", - "name": "_composeMsg", - "nameLocation": "752:11:26", - "nodeType": "VariableDeclaration", - "scope": 3544, - "src": "739:24:26", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 3527, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "739:5:26", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "655:145:26" - }, - "returnParameters": { - "id": 3532, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3531, - "mutability": "mutable", - "name": "_msg", - "nameLocation": "837:4:26", - "nodeType": "VariableDeclaration", - "scope": 3544, - "src": "824:17:26", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 3530, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "824:5:26", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "823:19:26" - }, - "scope": 3674, - "src": "640:284:26", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 3562, - "nodeType": "Block", - "src": "1135:59:26", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "baseExpression": { - "id": 3556, - "name": "_msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3547, - "src": "1166:4:26", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - }, - "endExpression": { - "id": 3557, - "name": "NONCE_OFFSET", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3510, - "src": "1172:12:26", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "id": 3558, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexRangeAccess", - "src": "1166:19:26", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr_slice", - "typeString": "bytes calldata slice" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_calldata_ptr_slice", - "typeString": "bytes calldata slice" - } - ], - "id": 3555, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "1159:6:26", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_bytes8_$", - "typeString": "type(bytes8)" - }, - "typeName": { - "id": 3554, - "name": "bytes8", - "nodeType": "ElementaryTypeName", - "src": "1159:6:26", - "typeDescriptions": {} - } - }, - "id": 3559, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1159:27:26", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes8", - "typeString": "bytes8" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes8", - "typeString": "bytes8" - } - ], - "id": 3553, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "1152:6:26", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint64_$", - "typeString": "type(uint64)" - }, - "typeName": { - "id": 3552, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "1152:6:26", - "typeDescriptions": {} - } - }, - "id": 3560, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1152:35:26", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "functionReturnParameters": 3551, - "id": 3561, - "nodeType": "Return", - "src": "1145:42:26" - } - ] - }, - "documentation": { - "id": 3545, - "nodeType": "StructuredDocumentation", - "src": "930:133:26", - "text": " @dev Retrieves the nonce for the composed message.\n @param _msg The message.\n @return The nonce value." - }, - "id": 3563, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "nonce", - "nameLocation": "1077:5:26", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3548, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3547, - "mutability": "mutable", - "name": "_msg", - "nameLocation": "1098:4:26", - "nodeType": "VariableDeclaration", - "scope": 3563, - "src": "1083:19:26", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 3546, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "1083:5:26", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "1082:21:26" - }, - "returnParameters": { - "id": 3551, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3550, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 3563, - "src": "1127:6:26", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "typeName": { - "id": 3549, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "1127:6:26", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "visibility": "internal" - } - ], - "src": "1126:8:26" - }, - "scope": 3674, - "src": "1068:126:26", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 3582, - "nodeType": "Block", - "src": "1426:73:26", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "baseExpression": { - "id": 3575, - "name": "_msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3566, - "src": "1457:4:26", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - }, - "endExpression": { - "id": 3577, - "name": "SRC_EID_OFFSET", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3513, - "src": "1475:14:26", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "id": 3578, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexRangeAccess", - "src": "1457:33:26", - "startExpression": { - "id": 3576, - "name": "NONCE_OFFSET", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3510, - "src": "1462:12:26", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr_slice", - "typeString": "bytes calldata slice" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_calldata_ptr_slice", - "typeString": "bytes calldata slice" - } - ], - "id": 3574, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "1450:6:26", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_bytes4_$", - "typeString": "type(bytes4)" - }, - "typeName": { - "id": 3573, - "name": "bytes4", - "nodeType": "ElementaryTypeName", - "src": "1450:6:26", - "typeDescriptions": {} - } - }, - "id": 3579, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1450:41:26", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes4", - "typeString": "bytes4" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes4", - "typeString": "bytes4" - } - ], - "id": 3572, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "1443:6:26", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint32_$", - "typeString": "type(uint32)" - }, - "typeName": { - "id": 3571, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "1443:6:26", - "typeDescriptions": {} - } - }, - "id": 3580, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1443:49:26", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "functionReturnParameters": 3570, - "id": 3581, - "nodeType": "Return", - "src": "1436:56:26" - } - ] - }, - "documentation": { - "id": 3564, - "nodeType": "StructuredDocumentation", - "src": "1200:153:26", - "text": " @dev Retrieves the source endpoint ID for the composed message.\n @param _msg The message.\n @return The source endpoint ID." - }, - "id": 3583, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "srcEid", - "nameLocation": "1367:6:26", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3567, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3566, - "mutability": "mutable", - "name": "_msg", - "nameLocation": "1389:4:26", - "nodeType": "VariableDeclaration", - "scope": 3583, - "src": "1374:19:26", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 3565, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "1374:5:26", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "1373:21:26" - }, - "returnParameters": { - "id": 3570, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3569, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 3583, - "src": "1418:6:26", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - }, - "typeName": { - "id": 3568, - "name": "uint32", - "nodeType": "ElementaryTypeName", - "src": "1418:6:26", - "typeDescriptions": { - "typeIdentifier": "t_uint32", - "typeString": "uint32" - } - }, - "visibility": "internal" - } - ], - "src": "1417:8:26" - }, - "scope": 3674, - "src": "1358:141:26", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 3602, - "nodeType": "Block", - "src": "1747:79:26", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "baseExpression": { - "id": 3595, - "name": "_msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3586, - "src": "1780:4:26", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - }, - "endExpression": { - "id": 3597, - "name": "AMOUNT_LD_OFFSET", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3516, - "src": "1800:16:26", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "id": 3598, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexRangeAccess", - "src": "1780:37:26", - "startExpression": { - "id": 3596, - "name": "SRC_EID_OFFSET", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3513, - "src": "1785:14:26", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr_slice", - "typeString": "bytes calldata slice" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_calldata_ptr_slice", - "typeString": "bytes calldata slice" - } - ], - "id": 3594, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "1772:7:26", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_bytes32_$", - "typeString": "type(bytes32)" - }, - "typeName": { - "id": 3593, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "1772:7:26", - "typeDescriptions": {} - } - }, - "id": 3599, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1772:46:26", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "id": 3592, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "1764:7:26", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint256_$", - "typeString": "type(uint256)" - }, - "typeName": { - "id": 3591, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1764:7:26", - "typeDescriptions": {} - } - }, - "id": 3600, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1764:55:26", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 3590, - "id": 3601, - "nodeType": "Return", - "src": "1757:62:26" - } - ] - }, - "documentation": { - "id": 3584, - "nodeType": "StructuredDocumentation", - "src": "1505:166:26", - "text": " @dev Retrieves the amount in local decimals from the composed message.\n @param _msg The message.\n @return The amount in local decimals." - }, - "id": 3603, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "amountLD", - "nameLocation": "1685:8:26", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3587, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3586, - "mutability": "mutable", - "name": "_msg", - "nameLocation": "1709:4:26", - "nodeType": "VariableDeclaration", - "scope": 3603, - "src": "1694:19:26", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 3585, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "1694:5:26", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "1693:21:26" - }, - "returnParameters": { - "id": 3590, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3589, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 3603, - "src": "1738:7:26", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3588, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1738:7:26", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "1737:9:26" - }, - "scope": 3674, - "src": "1676:150:26", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 3619, - "nodeType": "Block", - "src": "2063:75:26", - "statements": [ - { - "expression": { - "arguments": [ - { - "baseExpression": { - "id": 3613, - "name": "_msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3606, - "src": "2088:4:26", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - }, - "endExpression": { - "id": 3615, - "name": "COMPOSE_FROM_OFFSET", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3519, - "src": "2110:19:26", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "id": 3616, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexRangeAccess", - "src": "2088:42:26", - "startExpression": { - "id": 3614, - "name": "AMOUNT_LD_OFFSET", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3516, - "src": "2093:16:26", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr_slice", - "typeString": "bytes calldata slice" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_calldata_ptr_slice", - "typeString": "bytes calldata slice" - } - ], - "id": 3612, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2080:7:26", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_bytes32_$", - "typeString": "type(bytes32)" - }, - "typeName": { - "id": 3611, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "2080:7:26", - "typeDescriptions": {} - } - }, - "id": 3617, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2080:51:26", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "functionReturnParameters": 3610, - "id": 3618, - "nodeType": "Return", - "src": "2073:58:26" - } - ] - }, - "documentation": { - "id": 3604, - "nodeType": "StructuredDocumentation", - "src": "1832:152:26", - "text": " @dev Retrieves the composeFrom value from the composed message.\n @param _msg The message.\n @return The composeFrom value." - }, - "id": 3620, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "composeFrom", - "nameLocation": "1998:11:26", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3607, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3606, - "mutability": "mutable", - "name": "_msg", - "nameLocation": "2025:4:26", - "nodeType": "VariableDeclaration", - "scope": 3620, - "src": "2010:19:26", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 3605, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "2010:5:26", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "2009:21:26" - }, - "returnParameters": { - "id": 3610, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3609, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 3620, - "src": "2054:7:26", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 3608, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "2054:7:26", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "2053:9:26" - }, - "scope": 3674, - "src": "1989:149:26", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 3632, - "nodeType": "Block", - "src": "2351:50:26", - "statements": [ - { - "expression": { - "baseExpression": { - "id": 3628, - "name": "_msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3623, - "src": "2368:4:26", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - }, - "id": 3630, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexRangeAccess", - "src": "2368:26:26", - "startExpression": { - "id": 3629, - "name": "COMPOSE_FROM_OFFSET", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3519, - "src": "2373:19:26", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr_slice", - "typeString": "bytes calldata slice" - } - }, - "functionReturnParameters": 3627, - "id": 3631, - "nodeType": "Return", - "src": "2361:33:26" - } - ] - }, - "documentation": { - "id": 3621, - "nodeType": "StructuredDocumentation", - "src": "2144:124:26", - "text": " @dev Retrieves the composed message.\n @param _msg The message.\n @return The composed message." - }, - "id": 3633, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "composeMsg", - "nameLocation": "2282:10:26", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3624, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3623, - "mutability": "mutable", - "name": "_msg", - "nameLocation": "2308:4:26", - "nodeType": "VariableDeclaration", - "scope": 3633, - "src": "2293:19:26", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 3622, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "2293:5:26", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "2292:21:26" - }, - "returnParameters": { - "id": 3627, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3626, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 3633, - "src": "2337:12:26", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 3625, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "2337:5:26", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "2336:14:26" - }, - "scope": 3674, - "src": "2273:128:26", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 3652, - "nodeType": "Block", - "src": "2642:56:26", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "id": 3647, - "name": "_addr", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3636, - "src": "2683:5:26", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 3646, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2675:7:26", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint160_$", - "typeString": "type(uint160)" - }, - "typeName": { - "id": 3645, - "name": "uint160", - "nodeType": "ElementaryTypeName", - "src": "2675:7:26", - "typeDescriptions": {} - } - }, - "id": 3648, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2675:14:26", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint160", - "typeString": "uint160" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint160", - "typeString": "uint160" - } - ], - "id": 3644, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2667:7:26", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint256_$", - "typeString": "type(uint256)" - }, - "typeName": { - "id": 3643, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2667:7:26", - "typeDescriptions": {} - } - }, - "id": 3649, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2667:23:26", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 3642, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2659:7:26", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_bytes32_$", - "typeString": "type(bytes32)" - }, - "typeName": { - "id": 3641, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "2659:7:26", - "typeDescriptions": {} - } - }, - "id": 3650, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2659:32:26", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "functionReturnParameters": 3640, - "id": 3651, - "nodeType": "Return", - "src": "2652:39:26" - } - ] - }, - "documentation": { - "id": 3634, - "nodeType": "StructuredDocumentation", - "src": "2407:157:26", - "text": " @dev Converts an address to bytes32.\n @param _addr The address to convert.\n @return The bytes32 representation of the address." - }, - "id": 3653, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "addressToBytes32", - "nameLocation": "2578:16:26", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3637, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3636, - "mutability": "mutable", - "name": "_addr", - "nameLocation": "2603:5:26", - "nodeType": "VariableDeclaration", - "scope": 3653, - "src": "2595:13:26", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3635, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2595:7:26", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "2594:15:26" - }, - "returnParameters": { - "id": 3640, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3639, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 3653, - "src": "2633:7:26", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 3638, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "2633:7:26", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "2632:9:26" - }, - "scope": 3674, - "src": "2569:129:26", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 3672, - "nodeType": "Block", - "src": "2935:53:26", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "id": 3667, - "name": "_b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3656, - "src": "2976:2:26", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "id": 3666, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2968:7:26", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint256_$", - "typeString": "type(uint256)" - }, - "typeName": { - "id": 3665, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2968:7:26", - "typeDescriptions": {} - } - }, - "id": 3668, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2968:11:26", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 3664, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2960:7:26", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint160_$", - "typeString": "type(uint160)" - }, - "typeName": { - "id": 3663, - "name": "uint160", - "nodeType": "ElementaryTypeName", - "src": "2960:7:26", - "typeDescriptions": {} - } - }, - "id": 3669, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2960:20:26", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint160", - "typeString": "uint160" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint160", - "typeString": "uint160" - } - ], - "id": 3662, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2952:7:26", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 3661, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2952:7:26", - "typeDescriptions": {} - } - }, - "id": 3670, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2952:29:26", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "functionReturnParameters": 3660, - "id": 3671, - "nodeType": "Return", - "src": "2945:36:26" - } - ] - }, - "documentation": { - "id": 3654, - "nodeType": "StructuredDocumentation", - "src": "2704:156:26", - "text": " @dev Converts bytes32 to an address.\n @param _b The bytes32 value to convert.\n @return The address representation of bytes32." - }, - "id": 3673, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "bytes32ToAddress", - "nameLocation": "2874:16:26", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3657, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3656, - "mutability": "mutable", - "name": "_b", - "nameLocation": "2899:2:26", - "nodeType": "VariableDeclaration", - "scope": 3673, - "src": "2891:10:26", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 3655, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "2891:7:26", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "2890:12:26" - }, - "returnParameters": { - "id": 3660, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3659, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 3673, - "src": "2926:7:26", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3658, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2926:7:26", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "2925:9:26" - }, - "scope": 3674, - "src": "2865:123:26", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - } - ], - "scope": 3675, - "src": "59:2931:26", - "usedErrors": [], - "usedEvents": [] - } - ], - "src": "33:2958:26" - }, - "id": 26 - }, - "@layerzerolabs/oft-evm/contracts/libs/OFTMsgCodec.sol": { - "ast": { - "absolutePath": "@layerzerolabs/oft-evm/contracts/libs/OFTMsgCodec.sol", - "exportedSymbols": { "OFTMsgCodec": [3828] }, - "id": 3829, - "license": "MIT", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 3676, - "literals": ["solidity", "^", "0.8", ".20"], - "nodeType": "PragmaDirective", - "src": "33:24:27" - }, - { - "abstract": false, - "baseContracts": [], - "canonicalName": "OFTMsgCodec", - "contractDependencies": [], - "contractKind": "library", - "fullyImplemented": true, - "id": 3828, - "linearizedBaseContracts": [3828], - "name": "OFTMsgCodec", - "nameLocation": "67:11:27", - "nodeType": "ContractDefinition", - "nodes": [ - { - "constant": true, - "id": 3679, - "mutability": "constant", - "name": "SEND_TO_OFFSET", - "nameLocation": "171:14:27", - "nodeType": "VariableDeclaration", - "scope": 3828, - "src": "148:42:27", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 3677, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "148:5:27", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "value": { - "hexValue": "3332", - "id": 3678, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "188:2:27", - "typeDescriptions": { - "typeIdentifier": "t_rational_32_by_1", - "typeString": "int_const 32" - }, - "value": "32" - }, - "visibility": "private" - }, - { - "constant": true, - "id": 3682, - "mutability": "constant", - "name": "SEND_AMOUNT_SD_OFFSET", - "nameLocation": "219:21:27", - "nodeType": "VariableDeclaration", - "scope": 3828, - "src": "196:49:27", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 3680, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "196:5:27", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "value": { - "hexValue": "3430", - "id": 3681, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "243:2:27", - "typeDescriptions": { - "typeIdentifier": "t_rational_40_by_1", - "typeString": "int_const 40" - }, - "value": "40" - }, - "visibility": "private" - }, - { - "body": { - "id": 3723, - "nodeType": "Block", - "src": "768:336:27", - "statements": [ - { - "expression": { - "id": 3701, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 3696, - "name": "hasCompose", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3694, - "src": "778:10:27", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 3700, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 3697, - "name": "_composeMsg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3689, - "src": "791:11:27", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - "id": 3698, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "803:6:27", - "memberName": "length", - "nodeType": "MemberAccess", - "src": "791:18:27", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "hexValue": "30", - "id": 3699, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "812:1:27", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "791:22:27", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "778:35:27", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 3702, - "nodeType": "ExpressionStatement", - "src": "778:35:27" - }, - { - "expression": { - "id": 3721, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 3703, - "name": "_msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3692, - "src": "927:4:27", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "condition": { - "id": 3704, - "name": "hasCompose", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3694, - "src": "934:10:27", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseExpression": { - "arguments": [ - { - "id": 3717, - "name": "_sendTo", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3685, - "src": "1074:7:27", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "id": 3718, - "name": "_amountShared", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3687, - "src": "1083:13:27", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - ], - "expression": { - "id": 3715, - "name": "abi", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967295, - "src": "1057:3:27", - "typeDescriptions": { - "typeIdentifier": "t_magic_abi", - "typeString": "abi" - } - }, - "id": 3716, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "1061:12:27", - "memberName": "encodePacked", - "nodeType": "MemberAccess", - "src": "1057:16:27", - "typeDescriptions": { - "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$", - "typeString": "function () pure returns (bytes memory)" - } - }, - "id": 3719, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1057:40:27", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - "id": 3720, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "Conditional", - "src": "934:163:27", - "trueExpression": { - "arguments": [ - { - "id": 3707, - "name": "_sendTo", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3685, - "src": "976:7:27", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "id": 3708, - "name": "_amountShared", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3687, - "src": "985:13:27", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - { - "arguments": [ - { - "expression": { - "id": 3710, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967281, - "src": "1017:3:27", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 3711, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "1021:6:27", - "memberName": "sender", - "nodeType": "MemberAccess", - "src": "1017:10:27", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 3709, - "name": "addressToBytes32", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3807, - "src": "1000:16:27", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_address_$returns$_t_bytes32_$", - "typeString": "function (address) pure returns (bytes32)" - } - }, - "id": 3712, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1000:28:27", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "id": 3713, - "name": "_composeMsg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3689, - "src": "1030:11:27", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "expression": { - "id": 3705, - "name": "abi", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967295, - "src": "959:3:27", - "typeDescriptions": { - "typeIdentifier": "t_magic_abi", - "typeString": "abi" - } - }, - "id": 3706, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "963:12:27", - "memberName": "encodePacked", - "nodeType": "MemberAccess", - "src": "959:16:27", - "typeDescriptions": { - "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$", - "typeString": "function () pure returns (bytes memory)" - } - }, - "id": 3714, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "959:83:27", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - "src": "927:170:27", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - "id": 3722, - "nodeType": "ExpressionStatement", - "src": "927:170:27" - } - ] - }, - "documentation": { - "id": 3683, - "nodeType": "StructuredDocumentation", - "src": "252:341:27", - "text": " @dev Encodes an OFT LayerZero message.\n @param _sendTo The recipient address.\n @param _amountShared The amount in shared decimals.\n @param _composeMsg The composed message.\n @return _msg The encoded message.\n @return hasCompose A boolean indicating whether the message has a composed payload." - }, - "id": 3724, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "encode", - "nameLocation": "607:6:27", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3690, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3685, - "mutability": "mutable", - "name": "_sendTo", - "nameLocation": "631:7:27", - "nodeType": "VariableDeclaration", - "scope": 3724, - "src": "623:15:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 3684, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "623:7:27", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3687, - "mutability": "mutable", - "name": "_amountShared", - "nameLocation": "655:13:27", - "nodeType": "VariableDeclaration", - "scope": 3724, - "src": "648:20:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "typeName": { - "id": 3686, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "648:6:27", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3689, - "mutability": "mutable", - "name": "_composeMsg", - "nameLocation": "691:11:27", - "nodeType": "VariableDeclaration", - "scope": 3724, - "src": "678:24:27", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 3688, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "678:5:27", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "613:95:27" - }, - "returnParameters": { - "id": 3695, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3692, - "mutability": "mutable", - "name": "_msg", - "nameLocation": "745:4:27", - "nodeType": "VariableDeclaration", - "scope": 3724, - "src": "732:17:27", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 3691, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "732:5:27", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3694, - "mutability": "mutable", - "name": "hasCompose", - "nameLocation": "756:10:27", - "nodeType": "VariableDeclaration", - "scope": 3724, - "src": "751:15:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 3693, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "751:4:27", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "731:36:27" - }, - "scope": 3828, - "src": "598:506:27", - "stateMutability": "view", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 3737, - "nodeType": "Block", - "src": "1352:59:27", - "statements": [ - { - "expression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 3735, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 3732, - "name": "_msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3727, - "src": "1369:4:27", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - }, - "id": 3733, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "1374:6:27", - "memberName": "length", - "nodeType": "MemberAccess", - "src": "1369:11:27", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "id": 3734, - "name": "SEND_AMOUNT_SD_OFFSET", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3682, - "src": "1383:21:27", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "src": "1369:35:27", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "functionReturnParameters": 3731, - "id": 3736, - "nodeType": "Return", - "src": "1362:42:27" - } - ] - }, - "documentation": { - "id": 3725, - "nodeType": "StructuredDocumentation", - "src": "1110:167:27", - "text": " @dev Checks if the OFT message is composed.\n @param _msg The OFT message.\n @return A boolean indicating whether the message is composed." - }, - "id": 3738, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "isComposed", - "nameLocation": "1291:10:27", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3728, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3727, - "mutability": "mutable", - "name": "_msg", - "nameLocation": "1317:4:27", - "nodeType": "VariableDeclaration", - "scope": 3738, - "src": "1302:19:27", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 3726, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "1302:5:27", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "1301:21:27" - }, - "returnParameters": { - "id": 3731, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3730, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 3738, - "src": "1346:4:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 3729, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "1346:4:27", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "1345:6:27" - }, - "scope": 3828, - "src": "1282:129:27", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 3753, - "nodeType": "Block", - "src": "1642:54:27", - "statements": [ - { - "expression": { - "arguments": [ - { - "baseExpression": { - "id": 3748, - "name": "_msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3741, - "src": "1667:4:27", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - }, - "endExpression": { - "id": 3749, - "name": "SEND_TO_OFFSET", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3679, - "src": "1673:14:27", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "id": 3750, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexRangeAccess", - "src": "1667:21:27", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr_slice", - "typeString": "bytes calldata slice" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_calldata_ptr_slice", - "typeString": "bytes calldata slice" - } - ], - "id": 3747, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "1659:7:27", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_bytes32_$", - "typeString": "type(bytes32)" - }, - "typeName": { - "id": 3746, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "1659:7:27", - "typeDescriptions": {} - } - }, - "id": 3751, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1659:30:27", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "functionReturnParameters": 3745, - "id": 3752, - "nodeType": "Return", - "src": "1652:37:27" - } - ] - }, - "documentation": { - "id": 3739, - "nodeType": "StructuredDocumentation", - "src": "1417:151:27", - "text": " @dev Retrieves the recipient address from the OFT message.\n @param _msg The OFT message.\n @return The recipient address." - }, - "id": 3754, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "sendTo", - "nameLocation": "1582:6:27", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3742, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3741, - "mutability": "mutable", - "name": "_msg", - "nameLocation": "1604:4:27", - "nodeType": "VariableDeclaration", - "scope": 3754, - "src": "1589:19:27", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 3740, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "1589:5:27", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "1588:21:27" - }, - "returnParameters": { - "id": 3745, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3744, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 3754, - "src": "1633:7:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 3743, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "1633:7:27", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "1632:9:27" - }, - "scope": 3828, - "src": "1573:123:27", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 3773, - "nodeType": "Block", - "src": "1944:82:27", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "baseExpression": { - "id": 3766, - "name": "_msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3757, - "src": "1975:4:27", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - }, - "endExpression": { - "id": 3768, - "name": "SEND_AMOUNT_SD_OFFSET", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3682, - "src": "1995:21:27", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "id": 3769, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexRangeAccess", - "src": "1975:42:27", - "startExpression": { - "id": 3767, - "name": "SEND_TO_OFFSET", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3679, - "src": "1980:14:27", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr_slice", - "typeString": "bytes calldata slice" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_calldata_ptr_slice", - "typeString": "bytes calldata slice" - } - ], - "id": 3765, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "1968:6:27", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_bytes8_$", - "typeString": "type(bytes8)" - }, - "typeName": { - "id": 3764, - "name": "bytes8", - "nodeType": "ElementaryTypeName", - "src": "1968:6:27", - "typeDescriptions": {} - } - }, - "id": 3770, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1968:50:27", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes8", - "typeString": "bytes8" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes8", - "typeString": "bytes8" - } - ], - "id": 3763, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "1961:6:27", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint64_$", - "typeString": "type(uint64)" - }, - "typeName": { - "id": 3762, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "1961:6:27", - "typeDescriptions": {} - } - }, - "id": 3771, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1961:58:27", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "functionReturnParameters": 3761, - "id": 3772, - "nodeType": "Return", - "src": "1954:65:27" - } - ] - }, - "documentation": { - "id": 3755, - "nodeType": "StructuredDocumentation", - "src": "1702:167:27", - "text": " @dev Retrieves the amount in shared decimals from the OFT message.\n @param _msg The OFT message.\n @return The amount in shared decimals." - }, - "id": 3774, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "amountSD", - "nameLocation": "1883:8:27", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3758, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3757, - "mutability": "mutable", - "name": "_msg", - "nameLocation": "1907:4:27", - "nodeType": "VariableDeclaration", - "scope": 3774, - "src": "1892:19:27", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 3756, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "1892:5:27", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "1891:21:27" - }, - "returnParameters": { - "id": 3761, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3760, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 3774, - "src": "1936:6:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - }, - "typeName": { - "id": 3759, - "name": "uint64", - "nodeType": "ElementaryTypeName", - "src": "1936:6:27", - "typeDescriptions": { - "typeIdentifier": "t_uint64", - "typeString": "uint64" - } - }, - "visibility": "internal" - } - ], - "src": "1935:8:27" - }, - "scope": 3828, - "src": "1874:152:27", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 3786, - "nodeType": "Block", - "src": "2264:52:27", - "statements": [ - { - "expression": { - "baseExpression": { - "id": 3782, - "name": "_msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3777, - "src": "2281:4:27", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - }, - "id": 3784, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexRangeAccess", - "src": "2281:28:27", - "startExpression": { - "id": 3783, - "name": "SEND_AMOUNT_SD_OFFSET", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3682, - "src": "2286:21:27", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr_slice", - "typeString": "bytes calldata slice" - } - }, - "functionReturnParameters": 3781, - "id": 3785, - "nodeType": "Return", - "src": "2274:35:27" - } - ] - }, - "documentation": { - "id": 3775, - "nodeType": "StructuredDocumentation", - "src": "2032:149:27", - "text": " @dev Retrieves the composed message from the OFT message.\n @param _msg The OFT message.\n @return The composed message." - }, - "id": 3787, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "composeMsg", - "nameLocation": "2195:10:27", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3778, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3777, - "mutability": "mutable", - "name": "_msg", - "nameLocation": "2221:4:27", - "nodeType": "VariableDeclaration", - "scope": 3787, - "src": "2206:19:27", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 3776, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "2206:5:27", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "2205:21:27" - }, - "returnParameters": { - "id": 3781, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3780, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 3787, - "src": "2250:12:27", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 3779, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "2250:5:27", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "2249:14:27" - }, - "scope": 3828, - "src": "2186:130:27", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 3806, - "nodeType": "Block", - "src": "2557:56:27", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "id": 3801, - "name": "_addr", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3790, - "src": "2598:5:27", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 3800, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2590:7:27", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint160_$", - "typeString": "type(uint160)" - }, - "typeName": { - "id": 3799, - "name": "uint160", - "nodeType": "ElementaryTypeName", - "src": "2590:7:27", - "typeDescriptions": {} - } - }, - "id": 3802, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2590:14:27", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint160", - "typeString": "uint160" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint160", - "typeString": "uint160" - } - ], - "id": 3798, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2582:7:27", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint256_$", - "typeString": "type(uint256)" - }, - "typeName": { - "id": 3797, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2582:7:27", - "typeDescriptions": {} - } - }, - "id": 3803, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2582:23:27", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 3796, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2574:7:27", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_bytes32_$", - "typeString": "type(bytes32)" - }, - "typeName": { - "id": 3795, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "2574:7:27", - "typeDescriptions": {} - } - }, - "id": 3804, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2574:32:27", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "functionReturnParameters": 3794, - "id": 3805, - "nodeType": "Return", - "src": "2567:39:27" - } - ] - }, - "documentation": { - "id": 3788, - "nodeType": "StructuredDocumentation", - "src": "2322:157:27", - "text": " @dev Converts an address to bytes32.\n @param _addr The address to convert.\n @return The bytes32 representation of the address." - }, - "id": 3807, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "addressToBytes32", - "nameLocation": "2493:16:27", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3791, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3790, - "mutability": "mutable", - "name": "_addr", - "nameLocation": "2518:5:27", - "nodeType": "VariableDeclaration", - "scope": 3807, - "src": "2510:13:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3789, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2510:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "2509:15:27" - }, - "returnParameters": { - "id": 3794, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3793, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 3807, - "src": "2548:7:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 3792, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "2548:7:27", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "2547:9:27" - }, - "scope": 3828, - "src": "2484:129:27", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 3826, - "nodeType": "Block", - "src": "2850:53:27", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "id": 3821, - "name": "_b", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3810, - "src": "2891:2:27", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "id": 3820, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2883:7:27", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint256_$", - "typeString": "type(uint256)" - }, - "typeName": { - "id": 3819, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2883:7:27", - "typeDescriptions": {} - } - }, - "id": 3822, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2883:11:27", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 3818, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2875:7:27", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint160_$", - "typeString": "type(uint160)" - }, - "typeName": { - "id": 3817, - "name": "uint160", - "nodeType": "ElementaryTypeName", - "src": "2875:7:27", - "typeDescriptions": {} - } - }, - "id": 3823, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2875:20:27", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint160", - "typeString": "uint160" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint160", - "typeString": "uint160" - } - ], - "id": 3816, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2867:7:27", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 3815, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2867:7:27", - "typeDescriptions": {} - } - }, - "id": 3824, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2867:29:27", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "functionReturnParameters": 3814, - "id": 3825, - "nodeType": "Return", - "src": "2860:36:27" - } - ] - }, - "documentation": { - "id": 3808, - "nodeType": "StructuredDocumentation", - "src": "2619:156:27", - "text": " @dev Converts bytes32 to an address.\n @param _b The bytes32 value to convert.\n @return The address representation of bytes32." - }, - "id": 3827, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "bytes32ToAddress", - "nameLocation": "2789:16:27", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3811, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3810, - "mutability": "mutable", - "name": "_b", - "nameLocation": "2814:2:27", - "nodeType": "VariableDeclaration", - "scope": 3827, - "src": "2806:10:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 3809, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "2806:7:27", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "2805:12:27" - }, - "returnParameters": { - "id": 3814, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3813, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 3827, - "src": "2841:7:27", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3812, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2841:7:27", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "2840:9:27" - }, - "scope": 3828, - "src": "2780:123:27", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - } - ], - "scope": 3829, - "src": "59:2846:27", - "usedErrors": [], - "usedEvents": [] - } - ], - "src": "33:2873:27" - }, - "id": 27 - }, - "@openzeppelin/contracts/access/Ownable.sol": { - "ast": { - "absolutePath": "@openzeppelin/contracts/access/Ownable.sol", - "exportedSymbols": { "Context": [5522], "Ownable": [3976] }, - "id": 3977, - "license": "MIT", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 3830, - "literals": ["solidity", "^", "0.8", ".20"], - "nodeType": "PragmaDirective", - "src": "102:24:28" - }, - { - "absolutePath": "@openzeppelin/contracts/utils/Context.sol", - "file": "../utils/Context.sol", - "id": 3832, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 3977, - "sourceUnit": 5523, - "src": "128:45:28", - "symbolAliases": [ - { - "foreign": { - "id": 3831, - "name": "Context", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5522, - "src": "136:7:28", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "abstract": true, - "baseContracts": [ - { - "baseName": { - "id": 3834, - "name": "Context", - "nameLocations": ["692:7:28"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 5522, - "src": "692:7:28" - }, - "id": 3835, - "nodeType": "InheritanceSpecifier", - "src": "692:7:28" - } - ], - "canonicalName": "Ownable", - "contractDependencies": [], - "contractKind": "contract", - "documentation": { - "id": 3833, - "nodeType": "StructuredDocumentation", - "src": "175:487:28", - "text": " @dev Contract module which provides a basic access control mechanism, where\n there is an account (an owner) that can be granted exclusive access to\n specific functions.\n The initial owner is set to the address provided by the deployer. This can\n later be changed with {transferOwnership}.\n This module is used through inheritance. It will make available the modifier\n `onlyOwner`, which can be applied to your functions to restrict their use to\n the owner." - }, - "fullyImplemented": true, - "id": 3976, - "linearizedBaseContracts": [3976, 5522], - "name": "Ownable", - "nameLocation": "681:7:28", - "nodeType": "ContractDefinition", - "nodes": [ - { - "constant": false, - "id": 3837, - "mutability": "mutable", - "name": "_owner", - "nameLocation": "722:6:28", - "nodeType": "VariableDeclaration", - "scope": 3976, - "src": "706:22:28", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3836, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "706:7:28", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "private" - }, - { - "documentation": { - "id": 3838, - "nodeType": "StructuredDocumentation", - "src": "735:85:28", - "text": " @dev The caller account is not authorized to perform an operation." - }, - "errorSelector": "118cdaa7", - "id": 3842, - "name": "OwnableUnauthorizedAccount", - "nameLocation": "831:26:28", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 3841, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3840, - "mutability": "mutable", - "name": "account", - "nameLocation": "866:7:28", - "nodeType": "VariableDeclaration", - "scope": 3842, - "src": "858:15:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3839, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "858:7:28", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "857:17:28" - }, - "src": "825:50:28" - }, - { - "documentation": { - "id": 3843, - "nodeType": "StructuredDocumentation", - "src": "881:82:28", - "text": " @dev The owner is not a valid owner account. (eg. `address(0)`)" - }, - "errorSelector": "1e4fbdf7", - "id": 3847, - "name": "OwnableInvalidOwner", - "nameLocation": "974:19:28", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 3846, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3845, - "mutability": "mutable", - "name": "owner", - "nameLocation": "1002:5:28", - "nodeType": "VariableDeclaration", - "scope": 3847, - "src": "994:13:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3844, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "994:7:28", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "993:15:28" - }, - "src": "968:41:28" - }, - { - "anonymous": false, - "eventSelector": "8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", - "id": 3853, - "name": "OwnershipTransferred", - "nameLocation": "1021:20:28", - "nodeType": "EventDefinition", - "parameters": { - "id": 3852, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3849, - "indexed": true, - "mutability": "mutable", - "name": "previousOwner", - "nameLocation": "1058:13:28", - "nodeType": "VariableDeclaration", - "scope": 3853, - "src": "1042:29:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3848, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1042:7:28", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3851, - "indexed": true, - "mutability": "mutable", - "name": "newOwner", - "nameLocation": "1089:8:28", - "nodeType": "VariableDeclaration", - "scope": 3853, - "src": "1073:24:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3850, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1073:7:28", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1041:57:28" - }, - "src": "1015:84:28" - }, - { - "body": { - "id": 3878, - "nodeType": "Block", - "src": "1259:153:28", - "statements": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 3864, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 3859, - "name": "initialOwner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3856, - "src": "1273:12:28", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "arguments": [ - { - "hexValue": "30", - "id": 3862, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1297:1:28", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 3861, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "1289:7:28", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 3860, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1289:7:28", - "typeDescriptions": {} - } - }, - "id": 3863, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1289:10:28", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "1273:26:28", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 3873, - "nodeType": "IfStatement", - "src": "1269:95:28", - "trueBody": { - "id": 3872, - "nodeType": "Block", - "src": "1301:63:28", - "statements": [ - { - "errorCall": { - "arguments": [ - { - "arguments": [ - { - "hexValue": "30", - "id": 3868, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1350:1:28", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 3867, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "1342:7:28", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 3866, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1342:7:28", - "typeDescriptions": {} - } - }, - "id": 3869, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1342:10:28", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 3865, - "name": "OwnableInvalidOwner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3847, - "src": "1322:19:28", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$_t_address_$returns$__$", - "typeString": "function (address) pure" - } - }, - "id": 3870, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1322:31:28", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 3871, - "nodeType": "RevertStatement", - "src": "1315:38:28" - } - ] - } - }, - { - "expression": { - "arguments": [ - { - "id": 3875, - "name": "initialOwner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3856, - "src": "1392:12:28", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 3874, - "name": "_transferOwnership", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3975, - "src": "1373:18:28", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$", - "typeString": "function (address)" - } - }, - "id": 3876, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1373:32:28", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 3877, - "nodeType": "ExpressionStatement", - "src": "1373:32:28" - } - ] - }, - "documentation": { - "id": 3854, - "nodeType": "StructuredDocumentation", - "src": "1105:115:28", - "text": " @dev Initializes the contract setting the address provided by the deployer as the initial owner." - }, - "id": 3879, - "implemented": true, - "kind": "constructor", - "modifiers": [], - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3857, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3856, - "mutability": "mutable", - "name": "initialOwner", - "nameLocation": "1245:12:28", - "nodeType": "VariableDeclaration", - "scope": 3879, - "src": "1237:20:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3855, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1237:7:28", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1236:22:28" - }, - "returnParameters": { - "id": 3858, - "nodeType": "ParameterList", - "parameters": [], - "src": "1259:0:28" - }, - "scope": 3976, - "src": "1225:187:28", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 3886, - "nodeType": "Block", - "src": "1521:41:28", - "statements": [ - { - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 3882, - "name": "_checkOwner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3913, - "src": "1531:11:28", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$__$", - "typeString": "function () view" - } - }, - "id": 3883, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1531:13:28", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 3884, - "nodeType": "ExpressionStatement", - "src": "1531:13:28" - }, - { - "id": 3885, - "nodeType": "PlaceholderStatement", - "src": "1554:1:28" - } - ] - }, - "documentation": { - "id": 3880, - "nodeType": "StructuredDocumentation", - "src": "1418:77:28", - "text": " @dev Throws if called by any account other than the owner." - }, - "id": 3887, - "name": "onlyOwner", - "nameLocation": "1509:9:28", - "nodeType": "ModifierDefinition", - "parameters": { - "id": 3881, - "nodeType": "ParameterList", - "parameters": [], - "src": "1518:2:28" - }, - "src": "1500:62:28", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 3895, - "nodeType": "Block", - "src": "1693:30:28", - "statements": [ - { - "expression": { - "id": 3893, - "name": "_owner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3837, - "src": "1710:6:28", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "functionReturnParameters": 3892, - "id": 3894, - "nodeType": "Return", - "src": "1703:13:28" - } - ] - }, - "documentation": { - "id": 3888, - "nodeType": "StructuredDocumentation", - "src": "1568:65:28", - "text": " @dev Returns the address of the current owner." - }, - "functionSelector": "8da5cb5b", - "id": 3896, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "owner", - "nameLocation": "1647:5:28", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3889, - "nodeType": "ParameterList", - "parameters": [], - "src": "1652:2:28" - }, - "returnParameters": { - "id": 3892, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3891, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 3896, - "src": "1684:7:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3890, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1684:7:28", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1683:9:28" - }, - "scope": 3976, - "src": "1638:85:28", - "stateMutability": "view", - "virtual": true, - "visibility": "public" - }, - { - "body": { - "id": 3912, - "nodeType": "Block", - "src": "1841:117:28", - "statements": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 3904, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 3900, - "name": "owner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3896, - "src": "1855:5:28", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$", - "typeString": "function () view returns (address)" - } - }, - "id": 3901, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1855:7:28", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 3902, - "name": "_msgSender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5504, - "src": "1866:10:28", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$", - "typeString": "function () view returns (address)" - } - }, - "id": 3903, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1866:12:28", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "1855:23:28", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 3911, - "nodeType": "IfStatement", - "src": "1851:101:28", - "trueBody": { - "id": 3910, - "nodeType": "Block", - "src": "1880:72:28", - "statements": [ - { - "errorCall": { - "arguments": [ - { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 3906, - "name": "_msgSender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5504, - "src": "1928:10:28", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$", - "typeString": "function () view returns (address)" - } - }, - "id": 3907, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1928:12:28", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 3905, - "name": "OwnableUnauthorizedAccount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3842, - "src": "1901:26:28", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$_t_address_$returns$__$", - "typeString": "function (address) pure" - } - }, - "id": 3908, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1901:40:28", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 3909, - "nodeType": "RevertStatement", - "src": "1894:47:28" - } - ] - } - } - ] - }, - "documentation": { - "id": 3897, - "nodeType": "StructuredDocumentation", - "src": "1729:62:28", - "text": " @dev Throws if the sender is not the owner." - }, - "id": 3913, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_checkOwner", - "nameLocation": "1805:11:28", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3898, - "nodeType": "ParameterList", - "parameters": [], - "src": "1816:2:28" - }, - "returnParameters": { - "id": 3899, - "nodeType": "ParameterList", - "parameters": [], - "src": "1841:0:28" - }, - "scope": 3976, - "src": "1796:162:28", - "stateMutability": "view", - "virtual": true, - "visibility": "internal" - }, - { - "body": { - "id": 3926, - "nodeType": "Block", - "src": "2347:47:28", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "hexValue": "30", - "id": 3922, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2384:1:28", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 3921, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2376:7:28", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 3920, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2376:7:28", - "typeDescriptions": {} - } - }, - "id": 3923, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2376:10:28", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 3919, - "name": "_transferOwnership", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3975, - "src": "2357:18:28", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$", - "typeString": "function (address)" - } - }, - "id": 3924, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2357:30:28", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 3925, - "nodeType": "ExpressionStatement", - "src": "2357:30:28" - } - ] - }, - "documentation": { - "id": 3914, - "nodeType": "StructuredDocumentation", - "src": "1964:324:28", - "text": " @dev Leaves the contract without owner. It will not be possible to call\n `onlyOwner` functions. Can only be called by the current owner.\n NOTE: Renouncing ownership will leave the contract without an owner,\n thereby disabling any functionality that is only available to the owner." - }, - "functionSelector": "715018a6", - "id": 3927, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 3917, - "kind": "modifierInvocation", - "modifierName": { - "id": 3916, - "name": "onlyOwner", - "nameLocations": ["2337:9:28"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 3887, - "src": "2337:9:28" - }, - "nodeType": "ModifierInvocation", - "src": "2337:9:28" - } - ], - "name": "renounceOwnership", - "nameLocation": "2302:17:28", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3915, - "nodeType": "ParameterList", - "parameters": [], - "src": "2319:2:28" - }, - "returnParameters": { - "id": 3918, - "nodeType": "ParameterList", - "parameters": [], - "src": "2347:0:28" - }, - "scope": 3976, - "src": "2293:101:28", - "stateMutability": "nonpayable", - "virtual": true, - "visibility": "public" - }, - { - "body": { - "id": 3954, - "nodeType": "Block", - "src": "2613:145:28", - "statements": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 3940, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 3935, - "name": "newOwner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3930, - "src": "2627:8:28", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "arguments": [ - { - "hexValue": "30", - "id": 3938, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2647:1:28", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 3937, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2639:7:28", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 3936, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2639:7:28", - "typeDescriptions": {} - } - }, - "id": 3939, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2639:10:28", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "2627:22:28", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 3949, - "nodeType": "IfStatement", - "src": "2623:91:28", - "trueBody": { - "id": 3948, - "nodeType": "Block", - "src": "2651:63:28", - "statements": [ - { - "errorCall": { - "arguments": [ - { - "arguments": [ - { - "hexValue": "30", - "id": 3944, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2700:1:28", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 3943, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2692:7:28", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 3942, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2692:7:28", - "typeDescriptions": {} - } - }, - "id": 3945, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2692:10:28", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 3941, - "name": "OwnableInvalidOwner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3847, - "src": "2672:19:28", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$_t_address_$returns$__$", - "typeString": "function (address) pure" - } - }, - "id": 3946, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2672:31:28", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 3947, - "nodeType": "RevertStatement", - "src": "2665:38:28" - } - ] - } - }, - { - "expression": { - "arguments": [ - { - "id": 3951, - "name": "newOwner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3930, - "src": "2742:8:28", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 3950, - "name": "_transferOwnership", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3975, - "src": "2723:18:28", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$", - "typeString": "function (address)" - } - }, - "id": 3952, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2723:28:28", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 3953, - "nodeType": "ExpressionStatement", - "src": "2723:28:28" - } - ] - }, - "documentation": { - "id": 3928, - "nodeType": "StructuredDocumentation", - "src": "2400:138:28", - "text": " @dev Transfers ownership of the contract to a new account (`newOwner`).\n Can only be called by the current owner." - }, - "functionSelector": "f2fde38b", - "id": 3955, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 3933, - "kind": "modifierInvocation", - "modifierName": { - "id": 3932, - "name": "onlyOwner", - "nameLocations": ["2603:9:28"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 3887, - "src": "2603:9:28" - }, - "nodeType": "ModifierInvocation", - "src": "2603:9:28" - } - ], - "name": "transferOwnership", - "nameLocation": "2552:17:28", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3931, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3930, - "mutability": "mutable", - "name": "newOwner", - "nameLocation": "2578:8:28", - "nodeType": "VariableDeclaration", - "scope": 3955, - "src": "2570:16:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3929, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2570:7:28", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "2569:18:28" - }, - "returnParameters": { - "id": 3934, - "nodeType": "ParameterList", - "parameters": [], - "src": "2613:0:28" - }, - "scope": 3976, - "src": "2543:215:28", - "stateMutability": "nonpayable", - "virtual": true, - "visibility": "public" - }, - { - "body": { - "id": 3974, - "nodeType": "Block", - "src": "2975:124:28", - "statements": [ - { - "assignments": [3962], - "declarations": [ - { - "constant": false, - "id": 3962, - "mutability": "mutable", - "name": "oldOwner", - "nameLocation": "2993:8:28", - "nodeType": "VariableDeclaration", - "scope": 3974, - "src": "2985:16:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3961, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2985:7:28", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "id": 3964, - "initialValue": { - "id": 3963, - "name": "_owner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3837, - "src": "3004:6:28", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "2985:25:28" - }, - { - "expression": { - "id": 3967, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 3965, - "name": "_owner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3837, - "src": "3020:6:28", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 3966, - "name": "newOwner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3958, - "src": "3029:8:28", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "3020:17:28", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 3968, - "nodeType": "ExpressionStatement", - "src": "3020:17:28" - }, - { - "eventCall": { - "arguments": [ - { - "id": 3970, - "name": "oldOwner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3962, - "src": "3073:8:28", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 3971, - "name": "newOwner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3958, - "src": "3083:8:28", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 3969, - "name": "OwnershipTransferred", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3853, - "src": "3052:20:28", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$", - "typeString": "function (address,address)" - } - }, - "id": 3972, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3052:40:28", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 3973, - "nodeType": "EmitStatement", - "src": "3047:45:28" - } - ] - }, - "documentation": { - "id": 3956, - "nodeType": "StructuredDocumentation", - "src": "2764:143:28", - "text": " @dev Transfers ownership of the contract to a new account (`newOwner`).\n Internal function without access restriction." - }, - "id": 3975, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_transferOwnership", - "nameLocation": "2921:18:28", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3959, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3958, - "mutability": "mutable", - "name": "newOwner", - "nameLocation": "2948:8:28", - "nodeType": "VariableDeclaration", - "scope": 3975, - "src": "2940:16:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3957, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2940:7:28", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "2939:18:28" - }, - "returnParameters": { - "id": 3960, - "nodeType": "ParameterList", - "parameters": [], - "src": "2975:0:28" - }, - "scope": 3976, - "src": "2912:187:28", - "stateMutability": "nonpayable", - "virtual": true, - "visibility": "internal" - } - ], - "scope": 3977, - "src": "663:2438:28", - "usedErrors": [3842, 3847], - "usedEvents": [3853] - } - ], - "src": "102:3000:28" - }, - "id": 28 - }, - "@openzeppelin/contracts/interfaces/IERC1363.sol": { - "ast": { - "absolutePath": "@openzeppelin/contracts/interfaces/IERC1363.sol", - "exportedSymbols": { - "IERC1363": [4058], - "IERC165": [5556], - "IERC20": [4796] - }, - "id": 4059, - "license": "MIT", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 3978, - "literals": ["solidity", "^", "0.8", ".20"], - "nodeType": "PragmaDirective", - "src": "107:24:29" - }, - { - "absolutePath": "@openzeppelin/contracts/interfaces/IERC20.sol", - "file": "./IERC20.sol", - "id": 3980, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 4059, - "sourceUnit": 4067, - "src": "133:36:29", - "symbolAliases": [ - { - "foreign": { - "id": 3979, - "name": "IERC20", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4796, - "src": "141:6:29", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "@openzeppelin/contracts/interfaces/IERC165.sol", - "file": "./IERC165.sol", - "id": 3982, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 4059, - "sourceUnit": 4063, - "src": "170:38:29", - "symbolAliases": [ - { - "foreign": { - "id": 3981, - "name": "IERC165", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5556, - "src": "178:7:29", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "abstract": false, - "baseContracts": [ - { - "baseName": { - "id": 3984, - "name": "IERC20", - "nameLocations": ["590:6:29"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 4796, - "src": "590:6:29" - }, - "id": 3985, - "nodeType": "InheritanceSpecifier", - "src": "590:6:29" - }, - { - "baseName": { - "id": 3986, - "name": "IERC165", - "nameLocations": ["598:7:29"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 5556, - "src": "598:7:29" - }, - "id": 3987, - "nodeType": "InheritanceSpecifier", - "src": "598:7:29" - } - ], - "canonicalName": "IERC1363", - "contractDependencies": [], - "contractKind": "interface", - "documentation": { - "id": 3983, - "nodeType": "StructuredDocumentation", - "src": "210:357:29", - "text": " @title IERC1363\n @dev Interface of the ERC-1363 standard as defined in the https://eips.ethereum.org/EIPS/eip-1363[ERC-1363].\n Defines an extension interface for ERC-20 tokens that supports executing code on a recipient contract\n after `transfer` or `transferFrom`, or code on a spender contract after `approve`, in a single transaction." - }, - "fullyImplemented": false, - "id": 4058, - "linearizedBaseContracts": [4058, 5556, 4796], - "name": "IERC1363", - "nameLocation": "578:8:29", - "nodeType": "ContractDefinition", - "nodes": [ - { - "documentation": { - "id": 3988, - "nodeType": "StructuredDocumentation", - "src": "1148:370:29", - "text": " @dev Moves a `value` amount of tokens from the caller's account to `to`\n and then calls {IERC1363Receiver-onTransferReceived} on `to`.\n @param to The address which you want to transfer to.\n @param value The amount of tokens to be transferred.\n @return A boolean value indicating whether the operation succeeded unless throwing." - }, - "functionSelector": "1296ee62", - "id": 3997, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "transferAndCall", - "nameLocation": "1532:15:29", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 3993, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3990, - "mutability": "mutable", - "name": "to", - "nameLocation": "1556:2:29", - "nodeType": "VariableDeclaration", - "scope": 3997, - "src": "1548:10:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3989, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1548:7:29", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 3992, - "mutability": "mutable", - "name": "value", - "nameLocation": "1568:5:29", - "nodeType": "VariableDeclaration", - "scope": 3997, - "src": "1560:13:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 3991, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1560:7:29", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "1547:27:29" - }, - "returnParameters": { - "id": 3996, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 3995, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 3997, - "src": "1593:4:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 3994, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "1593:4:29", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "1592:6:29" - }, - "scope": 4058, - "src": "1523:76:29", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 3998, - "nodeType": "StructuredDocumentation", - "src": "1605:453:29", - "text": " @dev Moves a `value` amount of tokens from the caller's account to `to`\n and then calls {IERC1363Receiver-onTransferReceived} on `to`.\n @param to The address which you want to transfer to.\n @param value The amount of tokens to be transferred.\n @param data Additional data with no specified format, sent in call to `to`.\n @return A boolean value indicating whether the operation succeeded unless throwing." - }, - "functionSelector": "4000aea0", - "id": 4009, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "transferAndCall", - "nameLocation": "2072:15:29", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 4005, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4000, - "mutability": "mutable", - "name": "to", - "nameLocation": "2096:2:29", - "nodeType": "VariableDeclaration", - "scope": 4009, - "src": "2088:10:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 3999, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2088:7:29", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 4002, - "mutability": "mutable", - "name": "value", - "nameLocation": "2108:5:29", - "nodeType": "VariableDeclaration", - "scope": 4009, - "src": "2100:13:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 4001, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2100:7:29", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 4004, - "mutability": "mutable", - "name": "data", - "nameLocation": "2130:4:29", - "nodeType": "VariableDeclaration", - "scope": 4009, - "src": "2115:19:29", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 4003, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "2115:5:29", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "2087:48:29" - }, - "returnParameters": { - "id": 4008, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4007, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 4009, - "src": "2154:4:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 4006, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "2154:4:29", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "2153:6:29" - }, - "scope": 4058, - "src": "2063:97:29", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 4010, - "nodeType": "StructuredDocumentation", - "src": "2166:453:29", - "text": " @dev Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism\n and then calls {IERC1363Receiver-onTransferReceived} on `to`.\n @param from The address which you want to send tokens from.\n @param to The address which you want to transfer to.\n @param value The amount of tokens to be transferred.\n @return A boolean value indicating whether the operation succeeded unless throwing." - }, - "functionSelector": "d8fbe994", - "id": 4021, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "transferFromAndCall", - "nameLocation": "2633:19:29", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 4017, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4012, - "mutability": "mutable", - "name": "from", - "nameLocation": "2661:4:29", - "nodeType": "VariableDeclaration", - "scope": 4021, - "src": "2653:12:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4011, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2653:7:29", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 4014, - "mutability": "mutable", - "name": "to", - "nameLocation": "2675:2:29", - "nodeType": "VariableDeclaration", - "scope": 4021, - "src": "2667:10:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4013, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2667:7:29", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 4016, - "mutability": "mutable", - "name": "value", - "nameLocation": "2687:5:29", - "nodeType": "VariableDeclaration", - "scope": 4021, - "src": "2679:13:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 4015, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2679:7:29", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "2652:41:29" - }, - "returnParameters": { - "id": 4020, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4019, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 4021, - "src": "2712:4:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 4018, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "2712:4:29", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "2711:6:29" - }, - "scope": 4058, - "src": "2624:94:29", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 4022, - "nodeType": "StructuredDocumentation", - "src": "2724:536:29", - "text": " @dev Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism\n and then calls {IERC1363Receiver-onTransferReceived} on `to`.\n @param from The address which you want to send tokens from.\n @param to The address which you want to transfer to.\n @param value The amount of tokens to be transferred.\n @param data Additional data with no specified format, sent in call to `to`.\n @return A boolean value indicating whether the operation succeeded unless throwing." - }, - "functionSelector": "c1d34b89", - "id": 4035, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "transferFromAndCall", - "nameLocation": "3274:19:29", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 4031, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4024, - "mutability": "mutable", - "name": "from", - "nameLocation": "3302:4:29", - "nodeType": "VariableDeclaration", - "scope": 4035, - "src": "3294:12:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4023, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3294:7:29", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 4026, - "mutability": "mutable", - "name": "to", - "nameLocation": "3316:2:29", - "nodeType": "VariableDeclaration", - "scope": 4035, - "src": "3308:10:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4025, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3308:7:29", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 4028, - "mutability": "mutable", - "name": "value", - "nameLocation": "3328:5:29", - "nodeType": "VariableDeclaration", - "scope": 4035, - "src": "3320:13:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 4027, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3320:7:29", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 4030, - "mutability": "mutable", - "name": "data", - "nameLocation": "3350:4:29", - "nodeType": "VariableDeclaration", - "scope": 4035, - "src": "3335:19:29", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 4029, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "3335:5:29", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "3293:62:29" - }, - "returnParameters": { - "id": 4034, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4033, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 4035, - "src": "3374:4:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 4032, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "3374:4:29", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "3373:6:29" - }, - "scope": 4058, - "src": "3265:115:29", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 4036, - "nodeType": "StructuredDocumentation", - "src": "3386:390:29", - "text": " @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`.\n @param spender The address which will spend the funds.\n @param value The amount of tokens to be spent.\n @return A boolean value indicating whether the operation succeeded unless throwing." - }, - "functionSelector": "3177029f", - "id": 4045, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "approveAndCall", - "nameLocation": "3790:14:29", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 4041, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4038, - "mutability": "mutable", - "name": "spender", - "nameLocation": "3813:7:29", - "nodeType": "VariableDeclaration", - "scope": 4045, - "src": "3805:15:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4037, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3805:7:29", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 4040, - "mutability": "mutable", - "name": "value", - "nameLocation": "3830:5:29", - "nodeType": "VariableDeclaration", - "scope": 4045, - "src": "3822:13:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 4039, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3822:7:29", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "3804:32:29" - }, - "returnParameters": { - "id": 4044, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4043, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 4045, - "src": "3855:4:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 4042, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "3855:4:29", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "3854:6:29" - }, - "scope": 4058, - "src": "3781:80:29", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 4046, - "nodeType": "StructuredDocumentation", - "src": "3867:478:29", - "text": " @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`.\n @param spender The address which will spend the funds.\n @param value The amount of tokens to be spent.\n @param data Additional data with no specified format, sent in call to `spender`.\n @return A boolean value indicating whether the operation succeeded unless throwing." - }, - "functionSelector": "cae9ca51", - "id": 4057, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "approveAndCall", - "nameLocation": "4359:14:29", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 4053, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4048, - "mutability": "mutable", - "name": "spender", - "nameLocation": "4382:7:29", - "nodeType": "VariableDeclaration", - "scope": 4057, - "src": "4374:15:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4047, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4374:7:29", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 4050, - "mutability": "mutable", - "name": "value", - "nameLocation": "4399:5:29", - "nodeType": "VariableDeclaration", - "scope": 4057, - "src": "4391:13:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 4049, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4391:7:29", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 4052, - "mutability": "mutable", - "name": "data", - "nameLocation": "4421:4:29", - "nodeType": "VariableDeclaration", - "scope": 4057, - "src": "4406:19:29", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 4051, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "4406:5:29", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "4373:53:29" - }, - "returnParameters": { - "id": 4056, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4055, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 4057, - "src": "4445:4:29", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 4054, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "4445:4:29", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "4444:6:29" - }, - "scope": 4058, - "src": "4350:101:29", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - } - ], - "scope": 4059, - "src": "568:3885:29", - "usedErrors": [], - "usedEvents": [4730, 4739] - } - ], - "src": "107:4347:29" - }, - "id": 29 - }, - "@openzeppelin/contracts/interfaces/IERC165.sol": { - "ast": { - "absolutePath": "@openzeppelin/contracts/interfaces/IERC165.sol", - "exportedSymbols": { "IERC165": [5556] }, - "id": 4063, - "license": "MIT", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 4060, - "literals": ["solidity", "^", "0.8", ".20"], - "nodeType": "PragmaDirective", - "src": "106:24:30" - }, - { - "absolutePath": "@openzeppelin/contracts/utils/introspection/IERC165.sol", - "file": "../utils/introspection/IERC165.sol", - "id": 4062, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 4063, - "sourceUnit": 5557, - "src": "132:59:30", - "symbolAliases": [ - { - "foreign": { - "id": 4061, - "name": "IERC165", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5556, - "src": "140:7:30", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - } - ], - "src": "106:86:30" - }, - "id": 30 - }, - "@openzeppelin/contracts/interfaces/IERC20.sol": { - "ast": { - "absolutePath": "@openzeppelin/contracts/interfaces/IERC20.sol", - "exportedSymbols": { "IERC20": [4796] }, - "id": 4067, - "license": "MIT", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 4064, - "literals": ["solidity", "^", "0.8", ".20"], - "nodeType": "PragmaDirective", - "src": "105:24:31" - }, - { - "absolutePath": "@openzeppelin/contracts/token/ERC20/IERC20.sol", - "file": "../token/ERC20/IERC20.sol", - "id": 4066, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 4067, - "sourceUnit": 4797, - "src": "131:49:31", - "symbolAliases": [ - { - "foreign": { - "id": 4065, - "name": "IERC20", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4796, - "src": "139:6:31", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - } - ], - "src": "105:76:31" - }, - "id": 31 - }, - "@openzeppelin/contracts/interfaces/draft-IERC6093.sol": { - "ast": { - "absolutePath": "@openzeppelin/contracts/interfaces/draft-IERC6093.sol", - "exportedSymbols": { - "IERC1155Errors": [4203], - "IERC20Errors": [4108], - "IERC721Errors": [4156] - }, - "id": 4204, - "license": "MIT", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 4068, - "literals": ["solidity", "^", "0.8", ".20"], - "nodeType": "PragmaDirective", - "src": "112:24:32" - }, - { - "abstract": false, - "baseContracts": [], - "canonicalName": "IERC20Errors", - "contractDependencies": [], - "contractKind": "interface", - "documentation": { - "id": 4069, - "nodeType": "StructuredDocumentation", - "src": "138:141:32", - "text": " @dev Standard ERC-20 Errors\n Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-20 tokens." - }, - "fullyImplemented": true, - "id": 4108, - "linearizedBaseContracts": [4108], - "name": "IERC20Errors", - "nameLocation": "290:12:32", - "nodeType": "ContractDefinition", - "nodes": [ - { - "documentation": { - "id": 4070, - "nodeType": "StructuredDocumentation", - "src": "309:309:32", - "text": " @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.\n @param sender Address whose tokens are being transferred.\n @param balance Current balance for the interacting account.\n @param needed Minimum amount required to perform a transfer." - }, - "errorSelector": "e450d38c", - "id": 4078, - "name": "ERC20InsufficientBalance", - "nameLocation": "629:24:32", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 4077, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4072, - "mutability": "mutable", - "name": "sender", - "nameLocation": "662:6:32", - "nodeType": "VariableDeclaration", - "scope": 4078, - "src": "654:14:32", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4071, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "654:7:32", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 4074, - "mutability": "mutable", - "name": "balance", - "nameLocation": "678:7:32", - "nodeType": "VariableDeclaration", - "scope": 4078, - "src": "670:15:32", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 4073, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "670:7:32", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 4076, - "mutability": "mutable", - "name": "needed", - "nameLocation": "695:6:32", - "nodeType": "VariableDeclaration", - "scope": 4078, - "src": "687:14:32", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 4075, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "687:7:32", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "653:49:32" - }, - "src": "623:80:32" - }, - { - "documentation": { - "id": 4079, - "nodeType": "StructuredDocumentation", - "src": "709:152:32", - "text": " @dev Indicates a failure with the token `sender`. Used in transfers.\n @param sender Address whose tokens are being transferred." - }, - "errorSelector": "96c6fd1e", - "id": 4083, - "name": "ERC20InvalidSender", - "nameLocation": "872:18:32", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 4082, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4081, - "mutability": "mutable", - "name": "sender", - "nameLocation": "899:6:32", - "nodeType": "VariableDeclaration", - "scope": 4083, - "src": "891:14:32", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4080, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "891:7:32", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "890:16:32" - }, - "src": "866:41:32" - }, - { - "documentation": { - "id": 4084, - "nodeType": "StructuredDocumentation", - "src": "913:159:32", - "text": " @dev Indicates a failure with the token `receiver`. Used in transfers.\n @param receiver Address to which tokens are being transferred." - }, - "errorSelector": "ec442f05", - "id": 4088, - "name": "ERC20InvalidReceiver", - "nameLocation": "1083:20:32", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 4087, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4086, - "mutability": "mutable", - "name": "receiver", - "nameLocation": "1112:8:32", - "nodeType": "VariableDeclaration", - "scope": 4088, - "src": "1104:16:32", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4085, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1104:7:32", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1103:18:32" - }, - "src": "1077:45:32" - }, - { - "documentation": { - "id": 4089, - "nodeType": "StructuredDocumentation", - "src": "1128:345:32", - "text": " @dev Indicates a failure with the `spender`’s `allowance`. Used in transfers.\n @param spender Address that may be allowed to operate on tokens without being their owner.\n @param allowance Amount of tokens a `spender` is allowed to operate with.\n @param needed Minimum amount required to perform a transfer." - }, - "errorSelector": "fb8f41b2", - "id": 4097, - "name": "ERC20InsufficientAllowance", - "nameLocation": "1484:26:32", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 4096, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4091, - "mutability": "mutable", - "name": "spender", - "nameLocation": "1519:7:32", - "nodeType": "VariableDeclaration", - "scope": 4097, - "src": "1511:15:32", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4090, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1511:7:32", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 4093, - "mutability": "mutable", - "name": "allowance", - "nameLocation": "1536:9:32", - "nodeType": "VariableDeclaration", - "scope": 4097, - "src": "1528:17:32", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 4092, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1528:7:32", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 4095, - "mutability": "mutable", - "name": "needed", - "nameLocation": "1555:6:32", - "nodeType": "VariableDeclaration", - "scope": 4097, - "src": "1547:14:32", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 4094, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1547:7:32", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "1510:52:32" - }, - "src": "1478:85:32" - }, - { - "documentation": { - "id": 4098, - "nodeType": "StructuredDocumentation", - "src": "1569:174:32", - "text": " @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\n @param approver Address initiating an approval operation." - }, - "errorSelector": "e602df05", - "id": 4102, - "name": "ERC20InvalidApprover", - "nameLocation": "1754:20:32", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 4101, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4100, - "mutability": "mutable", - "name": "approver", - "nameLocation": "1783:8:32", - "nodeType": "VariableDeclaration", - "scope": 4102, - "src": "1775:16:32", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4099, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1775:7:32", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1774:18:32" - }, - "src": "1748:45:32" - }, - { - "documentation": { - "id": 4103, - "nodeType": "StructuredDocumentation", - "src": "1799:195:32", - "text": " @dev Indicates a failure with the `spender` to be approved. Used in approvals.\n @param spender Address that may be allowed to operate on tokens without being their owner." - }, - "errorSelector": "94280d62", - "id": 4107, - "name": "ERC20InvalidSpender", - "nameLocation": "2005:19:32", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 4106, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4105, - "mutability": "mutable", - "name": "spender", - "nameLocation": "2033:7:32", - "nodeType": "VariableDeclaration", - "scope": 4107, - "src": "2025:15:32", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4104, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2025:7:32", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "2024:17:32" - }, - "src": "1999:43:32" - } - ], - "scope": 4204, - "src": "280:1764:32", - "usedErrors": [4078, 4083, 4088, 4097, 4102, 4107], - "usedEvents": [] - }, - { - "abstract": false, - "baseContracts": [], - "canonicalName": "IERC721Errors", - "contractDependencies": [], - "contractKind": "interface", - "documentation": { - "id": 4109, - "nodeType": "StructuredDocumentation", - "src": "2046:143:32", - "text": " @dev Standard ERC-721 Errors\n Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-721 tokens." - }, - "fullyImplemented": true, - "id": 4156, - "linearizedBaseContracts": [4156], - "name": "IERC721Errors", - "nameLocation": "2200:13:32", - "nodeType": "ContractDefinition", - "nodes": [ - { - "documentation": { - "id": 4110, - "nodeType": "StructuredDocumentation", - "src": "2220:219:32", - "text": " @dev Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in ERC-20.\n Used in balance queries.\n @param owner Address of the current owner of a token." - }, - "errorSelector": "89c62b64", - "id": 4114, - "name": "ERC721InvalidOwner", - "nameLocation": "2450:18:32", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 4113, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4112, - "mutability": "mutable", - "name": "owner", - "nameLocation": "2477:5:32", - "nodeType": "VariableDeclaration", - "scope": 4114, - "src": "2469:13:32", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4111, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2469:7:32", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "2468:15:32" - }, - "src": "2444:40:32" - }, - { - "documentation": { - "id": 4115, - "nodeType": "StructuredDocumentation", - "src": "2490:132:32", - "text": " @dev Indicates a `tokenId` whose `owner` is the zero address.\n @param tokenId Identifier number of a token." - }, - "errorSelector": "7e273289", - "id": 4119, - "name": "ERC721NonexistentToken", - "nameLocation": "2633:22:32", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 4118, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4117, - "mutability": "mutable", - "name": "tokenId", - "nameLocation": "2664:7:32", - "nodeType": "VariableDeclaration", - "scope": 4119, - "src": "2656:15:32", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 4116, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2656:7:32", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "2655:17:32" - }, - "src": "2627:46:32" - }, - { - "documentation": { - "id": 4120, - "nodeType": "StructuredDocumentation", - "src": "2679:289:32", - "text": " @dev Indicates an error related to the ownership over a particular token. Used in transfers.\n @param sender Address whose tokens are being transferred.\n @param tokenId Identifier number of a token.\n @param owner Address of the current owner of a token." - }, - "errorSelector": "64283d7b", - "id": 4128, - "name": "ERC721IncorrectOwner", - "nameLocation": "2979:20:32", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 4127, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4122, - "mutability": "mutable", - "name": "sender", - "nameLocation": "3008:6:32", - "nodeType": "VariableDeclaration", - "scope": 4128, - "src": "3000:14:32", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4121, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3000:7:32", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 4124, - "mutability": "mutable", - "name": "tokenId", - "nameLocation": "3024:7:32", - "nodeType": "VariableDeclaration", - "scope": 4128, - "src": "3016:15:32", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 4123, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3016:7:32", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 4126, - "mutability": "mutable", - "name": "owner", - "nameLocation": "3041:5:32", - "nodeType": "VariableDeclaration", - "scope": 4128, - "src": "3033:13:32", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4125, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3033:7:32", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "2999:48:32" - }, - "src": "2973:75:32" - }, - { - "documentation": { - "id": 4129, - "nodeType": "StructuredDocumentation", - "src": "3054:152:32", - "text": " @dev Indicates a failure with the token `sender`. Used in transfers.\n @param sender Address whose tokens are being transferred." - }, - "errorSelector": "73c6ac6e", - "id": 4133, - "name": "ERC721InvalidSender", - "nameLocation": "3217:19:32", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 4132, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4131, - "mutability": "mutable", - "name": "sender", - "nameLocation": "3245:6:32", - "nodeType": "VariableDeclaration", - "scope": 4133, - "src": "3237:14:32", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4130, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3237:7:32", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "3236:16:32" - }, - "src": "3211:42:32" - }, - { - "documentation": { - "id": 4134, - "nodeType": "StructuredDocumentation", - "src": "3259:159:32", - "text": " @dev Indicates a failure with the token `receiver`. Used in transfers.\n @param receiver Address to which tokens are being transferred." - }, - "errorSelector": "64a0ae92", - "id": 4138, - "name": "ERC721InvalidReceiver", - "nameLocation": "3429:21:32", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 4137, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4136, - "mutability": "mutable", - "name": "receiver", - "nameLocation": "3459:8:32", - "nodeType": "VariableDeclaration", - "scope": 4138, - "src": "3451:16:32", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4135, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3451:7:32", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "3450:18:32" - }, - "src": "3423:46:32" - }, - { - "documentation": { - "id": 4139, - "nodeType": "StructuredDocumentation", - "src": "3475:247:32", - "text": " @dev Indicates a failure with the `operator`’s approval. Used in transfers.\n @param operator Address that may be allowed to operate on tokens without being their owner.\n @param tokenId Identifier number of a token." - }, - "errorSelector": "177e802f", - "id": 4145, - "name": "ERC721InsufficientApproval", - "nameLocation": "3733:26:32", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 4144, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4141, - "mutability": "mutable", - "name": "operator", - "nameLocation": "3768:8:32", - "nodeType": "VariableDeclaration", - "scope": 4145, - "src": "3760:16:32", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4140, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3760:7:32", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 4143, - "mutability": "mutable", - "name": "tokenId", - "nameLocation": "3786:7:32", - "nodeType": "VariableDeclaration", - "scope": 4145, - "src": "3778:15:32", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 4142, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3778:7:32", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "3759:35:32" - }, - "src": "3727:68:32" - }, - { - "documentation": { - "id": 4146, - "nodeType": "StructuredDocumentation", - "src": "3801:174:32", - "text": " @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\n @param approver Address initiating an approval operation." - }, - "errorSelector": "a9fbf51f", - "id": 4150, - "name": "ERC721InvalidApprover", - "nameLocation": "3986:21:32", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 4149, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4148, - "mutability": "mutable", - "name": "approver", - "nameLocation": "4016:8:32", - "nodeType": "VariableDeclaration", - "scope": 4150, - "src": "4008:16:32", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4147, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4008:7:32", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "4007:18:32" - }, - "src": "3980:46:32" - }, - { - "documentation": { - "id": 4151, - "nodeType": "StructuredDocumentation", - "src": "4032:197:32", - "text": " @dev Indicates a failure with the `operator` to be approved. Used in approvals.\n @param operator Address that may be allowed to operate on tokens without being their owner." - }, - "errorSelector": "5b08ba18", - "id": 4155, - "name": "ERC721InvalidOperator", - "nameLocation": "4240:21:32", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 4154, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4153, - "mutability": "mutable", - "name": "operator", - "nameLocation": "4270:8:32", - "nodeType": "VariableDeclaration", - "scope": 4155, - "src": "4262:16:32", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4152, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4262:7:32", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "4261:18:32" - }, - "src": "4234:46:32" - } - ], - "scope": 4204, - "src": "2190:2092:32", - "usedErrors": [4114, 4119, 4128, 4133, 4138, 4145, 4150, 4155], - "usedEvents": [] - }, - { - "abstract": false, - "baseContracts": [], - "canonicalName": "IERC1155Errors", - "contractDependencies": [], - "contractKind": "interface", - "documentation": { - "id": 4157, - "nodeType": "StructuredDocumentation", - "src": "4284:145:32", - "text": " @dev Standard ERC-1155 Errors\n Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-1155 tokens." - }, - "fullyImplemented": true, - "id": 4203, - "linearizedBaseContracts": [4203], - "name": "IERC1155Errors", - "nameLocation": "4440:14:32", - "nodeType": "ContractDefinition", - "nodes": [ - { - "documentation": { - "id": 4158, - "nodeType": "StructuredDocumentation", - "src": "4461:361:32", - "text": " @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.\n @param sender Address whose tokens are being transferred.\n @param balance Current balance for the interacting account.\n @param needed Minimum amount required to perform a transfer.\n @param tokenId Identifier number of a token." - }, - "errorSelector": "03dee4c5", - "id": 4168, - "name": "ERC1155InsufficientBalance", - "nameLocation": "4833:26:32", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 4167, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4160, - "mutability": "mutable", - "name": "sender", - "nameLocation": "4868:6:32", - "nodeType": "VariableDeclaration", - "scope": 4168, - "src": "4860:14:32", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4159, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4860:7:32", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 4162, - "mutability": "mutable", - "name": "balance", - "nameLocation": "4884:7:32", - "nodeType": "VariableDeclaration", - "scope": 4168, - "src": "4876:15:32", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 4161, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4876:7:32", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 4164, - "mutability": "mutable", - "name": "needed", - "nameLocation": "4901:6:32", - "nodeType": "VariableDeclaration", - "scope": 4168, - "src": "4893:14:32", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 4163, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4893:7:32", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 4166, - "mutability": "mutable", - "name": "tokenId", - "nameLocation": "4917:7:32", - "nodeType": "VariableDeclaration", - "scope": 4168, - "src": "4909:15:32", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 4165, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4909:7:32", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "4859:66:32" - }, - "src": "4827:99:32" - }, - { - "documentation": { - "id": 4169, - "nodeType": "StructuredDocumentation", - "src": "4932:152:32", - "text": " @dev Indicates a failure with the token `sender`. Used in transfers.\n @param sender Address whose tokens are being transferred." - }, - "errorSelector": "01a83514", - "id": 4173, - "name": "ERC1155InvalidSender", - "nameLocation": "5095:20:32", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 4172, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4171, - "mutability": "mutable", - "name": "sender", - "nameLocation": "5124:6:32", - "nodeType": "VariableDeclaration", - "scope": 4173, - "src": "5116:14:32", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4170, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5116:7:32", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "5115:16:32" - }, - "src": "5089:43:32" - }, - { - "documentation": { - "id": 4174, - "nodeType": "StructuredDocumentation", - "src": "5138:159:32", - "text": " @dev Indicates a failure with the token `receiver`. Used in transfers.\n @param receiver Address to which tokens are being transferred." - }, - "errorSelector": "57f447ce", - "id": 4178, - "name": "ERC1155InvalidReceiver", - "nameLocation": "5308:22:32", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 4177, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4176, - "mutability": "mutable", - "name": "receiver", - "nameLocation": "5339:8:32", - "nodeType": "VariableDeclaration", - "scope": 4178, - "src": "5331:16:32", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4175, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5331:7:32", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "5330:18:32" - }, - "src": "5302:47:32" - }, - { - "documentation": { - "id": 4179, - "nodeType": "StructuredDocumentation", - "src": "5355:256:32", - "text": " @dev Indicates a failure with the `operator`’s approval. Used in transfers.\n @param operator Address that may be allowed to operate on tokens without being their owner.\n @param owner Address of the current owner of a token." - }, - "errorSelector": "e237d922", - "id": 4185, - "name": "ERC1155MissingApprovalForAll", - "nameLocation": "5622:28:32", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 4184, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4181, - "mutability": "mutable", - "name": "operator", - "nameLocation": "5659:8:32", - "nodeType": "VariableDeclaration", - "scope": 4185, - "src": "5651:16:32", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4180, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5651:7:32", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 4183, - "mutability": "mutable", - "name": "owner", - "nameLocation": "5677:5:32", - "nodeType": "VariableDeclaration", - "scope": 4185, - "src": "5669:13:32", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4182, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5669:7:32", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "5650:33:32" - }, - "src": "5616:68:32" - }, - { - "documentation": { - "id": 4186, - "nodeType": "StructuredDocumentation", - "src": "5690:174:32", - "text": " @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\n @param approver Address initiating an approval operation." - }, - "errorSelector": "3e31884e", - "id": 4190, - "name": "ERC1155InvalidApprover", - "nameLocation": "5875:22:32", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 4189, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4188, - "mutability": "mutable", - "name": "approver", - "nameLocation": "5906:8:32", - "nodeType": "VariableDeclaration", - "scope": 4190, - "src": "5898:16:32", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4187, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5898:7:32", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "5897:18:32" - }, - "src": "5869:47:32" - }, - { - "documentation": { - "id": 4191, - "nodeType": "StructuredDocumentation", - "src": "5922:197:32", - "text": " @dev Indicates a failure with the `operator` to be approved. Used in approvals.\n @param operator Address that may be allowed to operate on tokens without being their owner." - }, - "errorSelector": "ced3e100", - "id": 4195, - "name": "ERC1155InvalidOperator", - "nameLocation": "6130:22:32", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 4194, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4193, - "mutability": "mutable", - "name": "operator", - "nameLocation": "6161:8:32", - "nodeType": "VariableDeclaration", - "scope": 4195, - "src": "6153:16:32", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4192, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "6153:7:32", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "6152:18:32" - }, - "src": "6124:47:32" - }, - { - "documentation": { - "id": 4196, - "nodeType": "StructuredDocumentation", - "src": "6177:280:32", - "text": " @dev Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation.\n Used in batch transfers.\n @param idsLength Length of the array of token identifiers\n @param valuesLength Length of the array of token amounts" - }, - "errorSelector": "5b059991", - "id": 4202, - "name": "ERC1155InvalidArrayLength", - "nameLocation": "6468:25:32", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 4201, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4198, - "mutability": "mutable", - "name": "idsLength", - "nameLocation": "6502:9:32", - "nodeType": "VariableDeclaration", - "scope": 4202, - "src": "6494:17:32", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 4197, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "6494:7:32", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 4200, - "mutability": "mutable", - "name": "valuesLength", - "nameLocation": "6521:12:32", - "nodeType": "VariableDeclaration", - "scope": 4202, - "src": "6513:20:32", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 4199, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "6513:7:32", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "6493:41:32" - }, - "src": "6462:73:32" - } - ], - "scope": 4204, - "src": "4430:2107:32", - "usedErrors": [4168, 4173, 4178, 4185, 4190, 4195, 4202], - "usedEvents": [] - } - ], - "src": "112:6426:32" - }, - "id": 32 - }, - "@openzeppelin/contracts/token/ERC20/ERC20.sol": { - "ast": { - "absolutePath": "@openzeppelin/contracts/token/ERC20/ERC20.sol", - "exportedSymbols": { - "Context": [5522], - "ERC20": [4718], - "IERC20": [4796], - "IERC20Errors": [4108], - "IERC20Metadata": [4822] - }, - "id": 4719, - "license": "MIT", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 4205, - "literals": ["solidity", "^", "0.8", ".20"], - "nodeType": "PragmaDirective", - "src": "105:24:33" - }, - { - "absolutePath": "@openzeppelin/contracts/token/ERC20/IERC20.sol", - "file": "./IERC20.sol", - "id": 4207, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 4719, - "sourceUnit": 4797, - "src": "131:36:33", - "symbolAliases": [ - { - "foreign": { - "id": 4206, - "name": "IERC20", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4796, - "src": "139:6:33", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol", - "file": "./extensions/IERC20Metadata.sol", - "id": 4209, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 4719, - "sourceUnit": 4823, - "src": "168:63:33", - "symbolAliases": [ - { - "foreign": { - "id": 4208, - "name": "IERC20Metadata", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4822, - "src": "176:14:33", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "@openzeppelin/contracts/utils/Context.sol", - "file": "../../utils/Context.sol", - "id": 4211, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 4719, - "sourceUnit": 5523, - "src": "232:48:33", - "symbolAliases": [ - { - "foreign": { - "id": 4210, - "name": "Context", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5522, - "src": "240:7:33", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "@openzeppelin/contracts/interfaces/draft-IERC6093.sol", - "file": "../../interfaces/draft-IERC6093.sol", - "id": 4213, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 4719, - "sourceUnit": 4204, - "src": "281:65:33", - "symbolAliases": [ - { - "foreign": { - "id": 4212, - "name": "IERC20Errors", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4108, - "src": "289:12:33", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "abstract": true, - "baseContracts": [ - { - "baseName": { - "id": 4215, - "name": "Context", - "nameLocations": ["1133:7:33"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 5522, - "src": "1133:7:33" - }, - "id": 4216, - "nodeType": "InheritanceSpecifier", - "src": "1133:7:33" - }, - { - "baseName": { - "id": 4217, - "name": "IERC20", - "nameLocations": ["1142:6:33"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 4796, - "src": "1142:6:33" - }, - "id": 4218, - "nodeType": "InheritanceSpecifier", - "src": "1142:6:33" - }, - { - "baseName": { - "id": 4219, - "name": "IERC20Metadata", - "nameLocations": ["1150:14:33"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 4822, - "src": "1150:14:33" - }, - "id": 4220, - "nodeType": "InheritanceSpecifier", - "src": "1150:14:33" - }, - { - "baseName": { - "id": 4221, - "name": "IERC20Errors", - "nameLocations": ["1166:12:33"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 4108, - "src": "1166:12:33" - }, - "id": 4222, - "nodeType": "InheritanceSpecifier", - "src": "1166:12:33" - } - ], - "canonicalName": "ERC20", - "contractDependencies": [], - "contractKind": "contract", - "documentation": { - "id": 4214, - "nodeType": "StructuredDocumentation", - "src": "348:757:33", - "text": " @dev Implementation of the {IERC20} interface.\n This implementation is agnostic to the way tokens are created. This means\n that a supply mechanism has to be added in a derived contract using {_mint}.\n TIP: For a detailed writeup see our guide\n https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\n to implement supply mechanisms].\n The default value of {decimals} is 18. To change this, you should override\n this function so it returns a different value.\n We have followed general OpenZeppelin Contracts guidelines: functions revert\n instead returning `false` on failure. This behavior is nonetheless\n conventional and does not conflict with the expectations of ERC-20\n applications." - }, - "fullyImplemented": true, - "id": 4718, - "linearizedBaseContracts": [4718, 4108, 4822, 4796, 5522], - "name": "ERC20", - "nameLocation": "1124:5:33", - "nodeType": "ContractDefinition", - "nodes": [ - { - "constant": false, - "id": 4226, - "mutability": "mutable", - "name": "_balances", - "nameLocation": "1229:9:33", - "nodeType": "VariableDeclaration", - "scope": 4718, - "src": "1185:53:33", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - }, - "typeName": { - "id": 4225, - "keyName": "account", - "keyNameLocation": "1201:7:33", - "keyType": { - "id": 4223, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1193:7:33", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Mapping", - "src": "1185:35:33", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - }, - "valueName": "", - "valueNameLocation": "-1:-1:-1", - "valueType": { - "id": 4224, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1212:7:33", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - }, - "visibility": "private" - }, - { - "constant": false, - "id": 4232, - "mutability": "mutable", - "name": "_allowances", - "nameLocation": "1317:11:33", - "nodeType": "VariableDeclaration", - "scope": 4718, - "src": "1245:83:33", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", - "typeString": "mapping(address => mapping(address => uint256))" - }, - "typeName": { - "id": 4231, - "keyName": "account", - "keyNameLocation": "1261:7:33", - "keyType": { - "id": 4227, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1253:7:33", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Mapping", - "src": "1245:63:33", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", - "typeString": "mapping(address => mapping(address => uint256))" - }, - "valueName": "", - "valueNameLocation": "-1:-1:-1", - "valueType": { - "id": 4230, - "keyName": "spender", - "keyNameLocation": "1288:7:33", - "keyType": { - "id": 4228, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1280:7:33", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Mapping", - "src": "1272:35:33", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - }, - "valueName": "", - "valueNameLocation": "-1:-1:-1", - "valueType": { - "id": 4229, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1299:7:33", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - } - }, - "visibility": "private" - }, - { - "constant": false, - "id": 4234, - "mutability": "mutable", - "name": "_totalSupply", - "nameLocation": "1351:12:33", - "nodeType": "VariableDeclaration", - "scope": 4718, - "src": "1335:28:33", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 4233, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1335:7:33", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "private" - }, - { - "constant": false, - "id": 4236, - "mutability": "mutable", - "name": "_name", - "nameLocation": "1385:5:33", - "nodeType": "VariableDeclaration", - "scope": 4718, - "src": "1370:20:33", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_string_storage", - "typeString": "string" - }, - "typeName": { - "id": 4235, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "1370:6:33", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "visibility": "private" - }, - { - "constant": false, - "id": 4238, - "mutability": "mutable", - "name": "_symbol", - "nameLocation": "1411:7:33", - "nodeType": "VariableDeclaration", - "scope": 4718, - "src": "1396:22:33", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_string_storage", - "typeString": "string" - }, - "typeName": { - "id": 4237, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "1396:6:33", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "visibility": "private" - }, - { - "body": { - "id": 4254, - "nodeType": "Block", - "src": "1657:57:33", - "statements": [ - { - "expression": { - "id": 4248, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 4246, - "name": "_name", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4236, - "src": "1667:5:33", - "typeDescriptions": { - "typeIdentifier": "t_string_storage", - "typeString": "string storage ref" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 4247, - "name": "name_", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4241, - "src": "1675:5:33", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - }, - "src": "1667:13:33", - "typeDescriptions": { - "typeIdentifier": "t_string_storage", - "typeString": "string storage ref" - } - }, - "id": 4249, - "nodeType": "ExpressionStatement", - "src": "1667:13:33" - }, - { - "expression": { - "id": 4252, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 4250, - "name": "_symbol", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4238, - "src": "1690:7:33", - "typeDescriptions": { - "typeIdentifier": "t_string_storage", - "typeString": "string storage ref" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 4251, - "name": "symbol_", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4243, - "src": "1700:7:33", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - }, - "src": "1690:17:33", - "typeDescriptions": { - "typeIdentifier": "t_string_storage", - "typeString": "string storage ref" - } - }, - "id": 4253, - "nodeType": "ExpressionStatement", - "src": "1690:17:33" - } - ] - }, - "documentation": { - "id": 4239, - "nodeType": "StructuredDocumentation", - "src": "1425:171:33", - "text": " @dev Sets the values for {name} and {symbol}.\n All two of these values are immutable: they can only be set once during\n construction." - }, - "id": 4255, - "implemented": true, - "kind": "constructor", - "modifiers": [], - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 4244, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4241, - "mutability": "mutable", - "name": "name_", - "nameLocation": "1627:5:33", - "nodeType": "VariableDeclaration", - "scope": 4255, - "src": "1613:19:33", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 4240, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "1613:6:33", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 4243, - "mutability": "mutable", - "name": "symbol_", - "nameLocation": "1648:7:33", - "nodeType": "VariableDeclaration", - "scope": 4255, - "src": "1634:21:33", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 4242, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "1634:6:33", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "visibility": "internal" - } - ], - "src": "1612:44:33" - }, - "returnParameters": { - "id": 4245, - "nodeType": "ParameterList", - "parameters": [], - "src": "1657:0:33" - }, - "scope": 4718, - "src": "1601:113:33", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "baseFunctions": [4809], - "body": { - "id": 4263, - "nodeType": "Block", - "src": "1839:29:33", - "statements": [ - { - "expression": { - "id": 4261, - "name": "_name", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4236, - "src": "1856:5:33", - "typeDescriptions": { - "typeIdentifier": "t_string_storage", - "typeString": "string storage ref" - } - }, - "functionReturnParameters": 4260, - "id": 4262, - "nodeType": "Return", - "src": "1849:12:33" - } - ] - }, - "documentation": { - "id": 4256, - "nodeType": "StructuredDocumentation", - "src": "1720:54:33", - "text": " @dev Returns the name of the token." - }, - "functionSelector": "06fdde03", - "id": 4264, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "name", - "nameLocation": "1788:4:33", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 4257, - "nodeType": "ParameterList", - "parameters": [], - "src": "1792:2:33" - }, - "returnParameters": { - "id": 4260, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4259, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 4264, - "src": "1824:13:33", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 4258, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "1824:6:33", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "visibility": "internal" - } - ], - "src": "1823:15:33" - }, - "scope": 4718, - "src": "1779:89:33", - "stateMutability": "view", - "virtual": true, - "visibility": "public" - }, - { - "baseFunctions": [4815], - "body": { - "id": 4272, - "nodeType": "Block", - "src": "2043:31:33", - "statements": [ - { - "expression": { - "id": 4270, - "name": "_symbol", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4238, - "src": "2060:7:33", - "typeDescriptions": { - "typeIdentifier": "t_string_storage", - "typeString": "string storage ref" - } - }, - "functionReturnParameters": 4269, - "id": 4271, - "nodeType": "Return", - "src": "2053:14:33" - } - ] - }, - "documentation": { - "id": 4265, - "nodeType": "StructuredDocumentation", - "src": "1874:102:33", - "text": " @dev Returns the symbol of the token, usually a shorter version of the\n name." - }, - "functionSelector": "95d89b41", - "id": 4273, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "symbol", - "nameLocation": "1990:6:33", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 4266, - "nodeType": "ParameterList", - "parameters": [], - "src": "1996:2:33" - }, - "returnParameters": { - "id": 4269, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4268, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 4273, - "src": "2028:13:33", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 4267, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "2028:6:33", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "visibility": "internal" - } - ], - "src": "2027:15:33" - }, - "scope": 4718, - "src": "1981:93:33", - "stateMutability": "view", - "virtual": true, - "visibility": "public" - }, - { - "baseFunctions": [4821], - "body": { - "id": 4281, - "nodeType": "Block", - "src": "2763:26:33", - "statements": [ - { - "expression": { - "hexValue": "3138", - "id": 4279, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2780:2:33", - "typeDescriptions": { - "typeIdentifier": "t_rational_18_by_1", - "typeString": "int_const 18" - }, - "value": "18" - }, - "functionReturnParameters": 4278, - "id": 4280, - "nodeType": "Return", - "src": "2773:9:33" - } - ] - }, - "documentation": { - "id": 4274, - "nodeType": "StructuredDocumentation", - "src": "2080:622:33", - "text": " @dev Returns the number of decimals used to get its user representation.\n For example, if `decimals` equals `2`, a balance of `505` tokens should\n be displayed to a user as `5.05` (`505 / 10 ** 2`).\n Tokens usually opt for a value of 18, imitating the relationship between\n Ether and Wei. This is the default value returned by this function, unless\n it's overridden.\n NOTE: This information is only used for _display_ purposes: it in\n no way affects any of the arithmetic of the contract, including\n {IERC20-balanceOf} and {IERC20-transfer}." - }, - "functionSelector": "313ce567", - "id": 4282, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "decimals", - "nameLocation": "2716:8:33", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 4275, - "nodeType": "ParameterList", - "parameters": [], - "src": "2724:2:33" - }, - "returnParameters": { - "id": 4278, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4277, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 4282, - "src": "2756:5:33", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 4276, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "2756:5:33", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "visibility": "internal" - } - ], - "src": "2755:7:33" - }, - "scope": 4718, - "src": "2707:82:33", - "stateMutability": "view", - "virtual": true, - "visibility": "public" - }, - { - "baseFunctions": [4745], - "body": { - "id": 4290, - "nodeType": "Block", - "src": "2910:36:33", - "statements": [ - { - "expression": { - "id": 4288, - "name": "_totalSupply", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4234, - "src": "2927:12:33", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 4287, - "id": 4289, - "nodeType": "Return", - "src": "2920:19:33" - } - ] - }, - "documentation": { - "id": 4283, - "nodeType": "StructuredDocumentation", - "src": "2795:49:33", - "text": " @dev See {IERC20-totalSupply}." - }, - "functionSelector": "18160ddd", - "id": 4291, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "totalSupply", - "nameLocation": "2858:11:33", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 4284, - "nodeType": "ParameterList", - "parameters": [], - "src": "2869:2:33" - }, - "returnParameters": { - "id": 4287, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4286, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 4291, - "src": "2901:7:33", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 4285, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2901:7:33", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "2900:9:33" - }, - "scope": 4718, - "src": "2849:97:33", - "stateMutability": "view", - "virtual": true, - "visibility": "public" - }, - { - "baseFunctions": [4753], - "body": { - "id": 4303, - "nodeType": "Block", - "src": "3078:42:33", - "statements": [ - { - "expression": { - "baseExpression": { - "id": 4299, - "name": "_balances", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4226, - "src": "3095:9:33", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 4301, - "indexExpression": { - "id": 4300, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294, - "src": "3105:7:33", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "3095:18:33", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 4298, - "id": 4302, - "nodeType": "Return", - "src": "3088:25:33" - } - ] - }, - "documentation": { - "id": 4292, - "nodeType": "StructuredDocumentation", - "src": "2952:47:33", - "text": " @dev See {IERC20-balanceOf}." - }, - "functionSelector": "70a08231", - "id": 4304, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "balanceOf", - "nameLocation": "3013:9:33", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 4295, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4294, - "mutability": "mutable", - "name": "account", - "nameLocation": "3031:7:33", - "nodeType": "VariableDeclaration", - "scope": 4304, - "src": "3023:15:33", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4293, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3023:7:33", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "3022:17:33" - }, - "returnParameters": { - "id": 4298, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4297, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 4304, - "src": "3069:7:33", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 4296, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3069:7:33", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "3068:9:33" - }, - "scope": 4718, - "src": "3004:116:33", - "stateMutability": "view", - "virtual": true, - "visibility": "public" - }, - { - "baseFunctions": [4763], - "body": { - "id": 4327, - "nodeType": "Block", - "src": "3390:103:33", - "statements": [ - { - "assignments": [4315], - "declarations": [ - { - "constant": false, - "id": 4315, - "mutability": "mutable", - "name": "owner", - "nameLocation": "3408:5:33", - "nodeType": "VariableDeclaration", - "scope": 4327, - "src": "3400:13:33", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4314, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3400:7:33", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "id": 4318, - "initialValue": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 4316, - "name": "_msgSender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5504, - "src": "3416:10:33", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$", - "typeString": "function () view returns (address)" - } - }, - "id": 4317, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3416:12:33", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "3400:28:33" - }, - { - "expression": { - "arguments": [ - { - "id": 4320, - "name": "owner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4315, - "src": "3448:5:33", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 4321, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4307, - "src": "3455:2:33", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 4322, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4309, - "src": "3459:5:33", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 4319, - "name": "_transfer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4448, - "src": "3438:9:33", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,address,uint256)" - } - }, - "id": 4323, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3438:27:33", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 4324, - "nodeType": "ExpressionStatement", - "src": "3438:27:33" - }, - { - "expression": { - "hexValue": "74727565", - "id": 4325, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3482:4:33", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - }, - "functionReturnParameters": 4313, - "id": 4326, - "nodeType": "Return", - "src": "3475:11:33" - } - ] - }, - "documentation": { - "id": 4305, - "nodeType": "StructuredDocumentation", - "src": "3126:184:33", - "text": " @dev See {IERC20-transfer}.\n Requirements:\n - `to` cannot be the zero address.\n - the caller must have a balance of at least `value`." - }, - "functionSelector": "a9059cbb", - "id": 4328, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "transfer", - "nameLocation": "3324:8:33", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 4310, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4307, - "mutability": "mutable", - "name": "to", - "nameLocation": "3341:2:33", - "nodeType": "VariableDeclaration", - "scope": 4328, - "src": "3333:10:33", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4306, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3333:7:33", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 4309, - "mutability": "mutable", - "name": "value", - "nameLocation": "3353:5:33", - "nodeType": "VariableDeclaration", - "scope": 4328, - "src": "3345:13:33", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 4308, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3345:7:33", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "3332:27:33" - }, - "returnParameters": { - "id": 4313, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4312, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 4328, - "src": "3384:4:33", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 4311, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "3384:4:33", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "3383:6:33" - }, - "scope": 4718, - "src": "3315:178:33", - "stateMutability": "nonpayable", - "virtual": true, - "visibility": "public" - }, - { - "baseFunctions": [4773], - "body": { - "id": 4344, - "nodeType": "Block", - "src": "3640:51:33", - "statements": [ - { - "expression": { - "baseExpression": { - "baseExpression": { - "id": 4338, - "name": "_allowances", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4232, - "src": "3657:11:33", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", - "typeString": "mapping(address => mapping(address => uint256))" - } - }, - "id": 4340, - "indexExpression": { - "id": 4339, - "name": "owner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4331, - "src": "3669:5:33", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "3657:18:33", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 4342, - "indexExpression": { - "id": 4341, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4333, - "src": "3676:7:33", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "3657:27:33", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "functionReturnParameters": 4337, - "id": 4343, - "nodeType": "Return", - "src": "3650:34:33" - } - ] - }, - "documentation": { - "id": 4329, - "nodeType": "StructuredDocumentation", - "src": "3499:47:33", - "text": " @dev See {IERC20-allowance}." - }, - "functionSelector": "dd62ed3e", - "id": 4345, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "allowance", - "nameLocation": "3560:9:33", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 4334, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4331, - "mutability": "mutable", - "name": "owner", - "nameLocation": "3578:5:33", - "nodeType": "VariableDeclaration", - "scope": 4345, - "src": "3570:13:33", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4330, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3570:7:33", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 4333, - "mutability": "mutable", - "name": "spender", - "nameLocation": "3593:7:33", - "nodeType": "VariableDeclaration", - "scope": 4345, - "src": "3585:15:33", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4332, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3585:7:33", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "3569:32:33" - }, - "returnParameters": { - "id": 4337, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4336, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 4345, - "src": "3631:7:33", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 4335, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3631:7:33", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "3630:9:33" - }, - "scope": 4718, - "src": "3551:140:33", - "stateMutability": "view", - "virtual": true, - "visibility": "public" - }, - { - "baseFunctions": [4783], - "body": { - "id": 4368, - "nodeType": "Block", - "src": "4077:107:33", - "statements": [ - { - "assignments": [4356], - "declarations": [ - { - "constant": false, - "id": 4356, - "mutability": "mutable", - "name": "owner", - "nameLocation": "4095:5:33", - "nodeType": "VariableDeclaration", - "scope": 4368, - "src": "4087:13:33", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4355, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4087:7:33", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "id": 4359, - "initialValue": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 4357, - "name": "_msgSender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5504, - "src": "4103:10:33", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$", - "typeString": "function () view returns (address)" - } - }, - "id": 4358, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4103:12:33", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "4087:28:33" - }, - { - "expression": { - "arguments": [ - { - "id": 4361, - "name": "owner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4356, - "src": "4134:5:33", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 4362, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4348, - "src": "4141:7:33", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 4363, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4350, - "src": "4150:5:33", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 4360, - "name": "_approve", - "nodeType": "Identifier", - "overloadedDeclarations": [4609, 4669], - "referencedDeclaration": 4609, - "src": "4125:8:33", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,address,uint256)" - } - }, - "id": 4364, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4125:31:33", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 4365, - "nodeType": "ExpressionStatement", - "src": "4125:31:33" - }, - { - "expression": { - "hexValue": "74727565", - "id": 4366, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "4173:4:33", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - }, - "functionReturnParameters": 4354, - "id": 4367, - "nodeType": "Return", - "src": "4166:11:33" - } - ] - }, - "documentation": { - "id": 4346, - "nodeType": "StructuredDocumentation", - "src": "3697:296:33", - "text": " @dev See {IERC20-approve}.\n NOTE: If `value` is the maximum `uint256`, the allowance is not updated on\n `transferFrom`. This is semantically equivalent to an infinite approval.\n Requirements:\n - `spender` cannot be the zero address." - }, - "functionSelector": "095ea7b3", - "id": 4369, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "approve", - "nameLocation": "4007:7:33", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 4351, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4348, - "mutability": "mutable", - "name": "spender", - "nameLocation": "4023:7:33", - "nodeType": "VariableDeclaration", - "scope": 4369, - "src": "4015:15:33", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4347, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4015:7:33", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 4350, - "mutability": "mutable", - "name": "value", - "nameLocation": "4040:5:33", - "nodeType": "VariableDeclaration", - "scope": 4369, - "src": "4032:13:33", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 4349, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4032:7:33", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "4014:32:33" - }, - "returnParameters": { - "id": 4354, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4353, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 4369, - "src": "4071:4:33", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 4352, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "4071:4:33", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "4070:6:33" - }, - "scope": 4718, - "src": "3998:186:33", - "stateMutability": "nonpayable", - "virtual": true, - "visibility": "public" - }, - { - "baseFunctions": [4795], - "body": { - "id": 4400, - "nodeType": "Block", - "src": "4869:151:33", - "statements": [ - { - "assignments": [4382], - "declarations": [ - { - "constant": false, - "id": 4382, - "mutability": "mutable", - "name": "spender", - "nameLocation": "4887:7:33", - "nodeType": "VariableDeclaration", - "scope": 4400, - "src": "4879:15:33", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4381, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4879:7:33", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "id": 4385, - "initialValue": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 4383, - "name": "_msgSender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5504, - "src": "4897:10:33", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$", - "typeString": "function () view returns (address)" - } - }, - "id": 4384, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4897:12:33", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "4879:30:33" - }, - { - "expression": { - "arguments": [ - { - "id": 4387, - "name": "from", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4372, - "src": "4935:4:33", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 4388, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4382, - "src": "4941:7:33", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 4389, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4376, - "src": "4950:5:33", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 4386, - "name": "_spendAllowance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4717, - "src": "4919:15:33", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,address,uint256)" - } - }, - "id": 4390, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4919:37:33", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 4391, - "nodeType": "ExpressionStatement", - "src": "4919:37:33" - }, - { - "expression": { - "arguments": [ - { - "id": 4393, - "name": "from", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4372, - "src": "4976:4:33", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 4394, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4374, - "src": "4982:2:33", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 4395, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4376, - "src": "4986:5:33", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 4392, - "name": "_transfer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4448, - "src": "4966:9:33", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,address,uint256)" - } - }, - "id": 4396, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4966:26:33", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 4397, - "nodeType": "ExpressionStatement", - "src": "4966:26:33" - }, - { - "expression": { - "hexValue": "74727565", - "id": 4398, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "5009:4:33", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - }, - "functionReturnParameters": 4380, - "id": 4399, - "nodeType": "Return", - "src": "5002:11:33" - } - ] - }, - "documentation": { - "id": 4370, - "nodeType": "StructuredDocumentation", - "src": "4190:581:33", - "text": " @dev See {IERC20-transferFrom}.\n Skips emitting an {Approval} event indicating an allowance update. This is not\n required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve].\n NOTE: Does not update the allowance if the current allowance\n is the maximum `uint256`.\n Requirements:\n - `from` and `to` cannot be the zero address.\n - `from` must have a balance of at least `value`.\n - the caller must have allowance for ``from``'s tokens of at least\n `value`." - }, - "functionSelector": "23b872dd", - "id": 4401, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "transferFrom", - "nameLocation": "4785:12:33", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 4377, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4372, - "mutability": "mutable", - "name": "from", - "nameLocation": "4806:4:33", - "nodeType": "VariableDeclaration", - "scope": 4401, - "src": "4798:12:33", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4371, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4798:7:33", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 4374, - "mutability": "mutable", - "name": "to", - "nameLocation": "4820:2:33", - "nodeType": "VariableDeclaration", - "scope": 4401, - "src": "4812:10:33", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4373, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4812:7:33", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 4376, - "mutability": "mutable", - "name": "value", - "nameLocation": "4832:5:33", - "nodeType": "VariableDeclaration", - "scope": 4401, - "src": "4824:13:33", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 4375, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4824:7:33", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "4797:41:33" - }, - "returnParameters": { - "id": 4380, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4379, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 4401, - "src": "4863:4:33", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 4378, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "4863:4:33", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "4862:6:33" - }, - "scope": 4718, - "src": "4776:244:33", - "stateMutability": "nonpayable", - "virtual": true, - "visibility": "public" - }, - { - "body": { - "id": 4447, - "nodeType": "Block", - "src": "5462:231:33", - "statements": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 4416, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 4411, - "name": "from", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4404, - "src": "5476:4:33", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "arguments": [ - { - "hexValue": "30", - "id": 4414, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "5492:1:33", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 4413, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "5484:7:33", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 4412, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5484:7:33", - "typeDescriptions": {} - } - }, - "id": 4415, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5484:10:33", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "5476:18:33", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 4425, - "nodeType": "IfStatement", - "src": "5472:86:33", - "trueBody": { - "id": 4424, - "nodeType": "Block", - "src": "5496:62:33", - "statements": [ - { - "errorCall": { - "arguments": [ - { - "arguments": [ - { - "hexValue": "30", - "id": 4420, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "5544:1:33", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 4419, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "5536:7:33", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 4418, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5536:7:33", - "typeDescriptions": {} - } - }, - "id": 4421, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5536:10:33", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 4417, - "name": "ERC20InvalidSender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4083, - "src": "5517:18:33", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$_t_address_$returns$__$", - "typeString": "function (address) pure" - } - }, - "id": 4422, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5517:30:33", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 4423, - "nodeType": "RevertStatement", - "src": "5510:37:33" - } - ] - } - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 4431, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 4426, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4406, - "src": "5571:2:33", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "arguments": [ - { - "hexValue": "30", - "id": 4429, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "5585:1:33", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 4428, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "5577:7:33", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 4427, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5577:7:33", - "typeDescriptions": {} - } - }, - "id": 4430, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5577:10:33", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "5571:16:33", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 4440, - "nodeType": "IfStatement", - "src": "5567:86:33", - "trueBody": { - "id": 4439, - "nodeType": "Block", - "src": "5589:64:33", - "statements": [ - { - "errorCall": { - "arguments": [ - { - "arguments": [ - { - "hexValue": "30", - "id": 4435, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "5639:1:33", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 4434, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "5631:7:33", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 4433, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5631:7:33", - "typeDescriptions": {} - } - }, - "id": 4436, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5631:10:33", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 4432, - "name": "ERC20InvalidReceiver", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4088, - "src": "5610:20:33", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$_t_address_$returns$__$", - "typeString": "function (address) pure" - } - }, - "id": 4437, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5610:32:33", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 4438, - "nodeType": "RevertStatement", - "src": "5603:39:33" - } - ] - } - }, - { - "expression": { - "arguments": [ - { - "id": 4442, - "name": "from", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4404, - "src": "5670:4:33", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 4443, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4406, - "src": "5676:2:33", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 4444, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4408, - "src": "5680:5:33", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 4441, - "name": "_update", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4525, - "src": "5662:7:33", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,address,uint256)" - } - }, - "id": 4445, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5662:24:33", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 4446, - "nodeType": "ExpressionStatement", - "src": "5662:24:33" - } - ] - }, - "documentation": { - "id": 4402, - "nodeType": "StructuredDocumentation", - "src": "5026:362:33", - "text": " @dev Moves a `value` amount of tokens from `from` to `to`.\n This internal function is equivalent to {transfer}, and can be used to\n e.g. implement automatic token fees, slashing mechanisms, etc.\n Emits a {Transfer} event.\n NOTE: This function is not virtual, {_update} should be overridden instead." - }, - "id": 4448, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_transfer", - "nameLocation": "5402:9:33", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 4409, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4404, - "mutability": "mutable", - "name": "from", - "nameLocation": "5420:4:33", - "nodeType": "VariableDeclaration", - "scope": 4448, - "src": "5412:12:33", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4403, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5412:7:33", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 4406, - "mutability": "mutable", - "name": "to", - "nameLocation": "5434:2:33", - "nodeType": "VariableDeclaration", - "scope": 4448, - "src": "5426:10:33", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4405, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5426:7:33", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 4408, - "mutability": "mutable", - "name": "value", - "nameLocation": "5446:5:33", - "nodeType": "VariableDeclaration", - "scope": 4448, - "src": "5438:13:33", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 4407, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "5438:7:33", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "5411:41:33" - }, - "returnParameters": { - "id": 4410, - "nodeType": "ParameterList", - "parameters": [], - "src": "5462:0:33" - }, - "scope": 4718, - "src": "5393:300:33", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 4524, - "nodeType": "Block", - "src": "6083:1032:33", - "statements": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 4463, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 4458, - "name": "from", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4451, - "src": "6097:4:33", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "arguments": [ - { - "hexValue": "30", - "id": 4461, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "6113:1:33", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 4460, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "6105:7:33", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 4459, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "6105:7:33", - "typeDescriptions": {} - } - }, - "id": 4462, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6105:10:33", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "6097:18:33", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": { - "id": 4495, - "nodeType": "Block", - "src": "6271:362:33", - "statements": [ - { - "assignments": [4470], - "declarations": [ - { - "constant": false, - "id": 4470, - "mutability": "mutable", - "name": "fromBalance", - "nameLocation": "6293:11:33", - "nodeType": "VariableDeclaration", - "scope": 4495, - "src": "6285:19:33", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 4469, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "6285:7:33", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 4474, - "initialValue": { - "baseExpression": { - "id": 4471, - "name": "_balances", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4226, - "src": "6307:9:33", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 4473, - "indexExpression": { - "id": 4472, - "name": "from", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4451, - "src": "6317:4:33", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "6307:15:33", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "6285:37:33" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 4477, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 4475, - "name": "fromBalance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4470, - "src": "6340:11:33", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "id": 4476, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4455, - "src": "6354:5:33", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "6340:19:33", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 4485, - "nodeType": "IfStatement", - "src": "6336:115:33", - "trueBody": { - "id": 4484, - "nodeType": "Block", - "src": "6361:90:33", - "statements": [ - { - "errorCall": { - "arguments": [ - { - "id": 4479, - "name": "from", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4451, - "src": "6411:4:33", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 4480, - "name": "fromBalance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4470, - "src": "6417:11:33", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 4481, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4455, - "src": "6430:5:33", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 4478, - "name": "ERC20InsufficientBalance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4078, - "src": "6386:24:33", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$_t_address_$_t_uint256_$_t_uint256_$returns$__$", - "typeString": "function (address,uint256,uint256) pure" - } - }, - "id": 4482, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6386:50:33", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 4483, - "nodeType": "RevertStatement", - "src": "6379:57:33" - } - ] - } - }, - { - "id": 4494, - "nodeType": "UncheckedBlock", - "src": "6464:159:33", - "statements": [ - { - "expression": { - "id": 4492, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "baseExpression": { - "id": 4486, - "name": "_balances", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4226, - "src": "6571:9:33", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 4488, - "indexExpression": { - "id": 4487, - "name": "from", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4451, - "src": "6581:4:33", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "6571:15:33", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 4491, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 4489, - "name": "fromBalance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4470, - "src": "6589:11:33", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "id": 4490, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4455, - "src": "6603:5:33", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "6589:19:33", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "6571:37:33", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 4493, - "nodeType": "ExpressionStatement", - "src": "6571:37:33" - } - ] - } - ] - }, - "id": 4496, - "nodeType": "IfStatement", - "src": "6093:540:33", - "trueBody": { - "id": 4468, - "nodeType": "Block", - "src": "6117:148:33", - "statements": [ - { - "expression": { - "id": 4466, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 4464, - "name": "_totalSupply", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4234, - "src": "6233:12:33", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "+=", - "rightHandSide": { - "id": 4465, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4455, - "src": "6249:5:33", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "6233:21:33", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 4467, - "nodeType": "ExpressionStatement", - "src": "6233:21:33" - } - ] - } - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 4502, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 4497, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4453, - "src": "6647:2:33", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "arguments": [ - { - "hexValue": "30", - "id": 4500, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "6661:1:33", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 4499, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "6653:7:33", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 4498, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "6653:7:33", - "typeDescriptions": {} - } - }, - "id": 4501, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6653:10:33", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "6647:16:33", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": { - "id": 4516, - "nodeType": "Block", - "src": "6862:206:33", - "statements": [ - { - "id": 4515, - "nodeType": "UncheckedBlock", - "src": "6876:182:33", - "statements": [ - { - "expression": { - "id": 4513, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "baseExpression": { - "id": 4509, - "name": "_balances", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4226, - "src": "7021:9:33", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 4511, - "indexExpression": { - "id": 4510, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4453, - "src": "7031:2:33", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "7021:13:33", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "+=", - "rightHandSide": { - "id": 4512, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4455, - "src": "7038:5:33", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "7021:22:33", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 4514, - "nodeType": "ExpressionStatement", - "src": "7021:22:33" - } - ] - } - ] - }, - "id": 4517, - "nodeType": "IfStatement", - "src": "6643:425:33", - "trueBody": { - "id": 4508, - "nodeType": "Block", - "src": "6665:191:33", - "statements": [ - { - "id": 4507, - "nodeType": "UncheckedBlock", - "src": "6679:167:33", - "statements": [ - { - "expression": { - "id": 4505, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 4503, - "name": "_totalSupply", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4234, - "src": "6810:12:33", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "-=", - "rightHandSide": { - "id": 4504, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4455, - "src": "6826:5:33", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "6810:21:33", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 4506, - "nodeType": "ExpressionStatement", - "src": "6810:21:33" - } - ] - } - ] - } - }, - { - "eventCall": { - "arguments": [ - { - "id": 4519, - "name": "from", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4451, - "src": "7092:4:33", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 4520, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4453, - "src": "7098:2:33", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 4521, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4455, - "src": "7102:5:33", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 4518, - "name": "Transfer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4730, - "src": "7083:8:33", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,address,uint256)" - } - }, - "id": 4522, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7083:25:33", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 4523, - "nodeType": "EmitStatement", - "src": "7078:30:33" - } - ] - }, - "documentation": { - "id": 4449, - "nodeType": "StructuredDocumentation", - "src": "5699:304:33", - "text": " @dev Transfers a `value` amount of tokens from `from` to `to`, or alternatively mints (or burns) if `from`\n (or `to`) is the zero address. All customizations to transfers, mints, and burns should be done by overriding\n this function.\n Emits a {Transfer} event." - }, - "id": 4525, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_update", - "nameLocation": "6017:7:33", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 4456, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4451, - "mutability": "mutable", - "name": "from", - "nameLocation": "6033:4:33", - "nodeType": "VariableDeclaration", - "scope": 4525, - "src": "6025:12:33", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4450, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "6025:7:33", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 4453, - "mutability": "mutable", - "name": "to", - "nameLocation": "6047:2:33", - "nodeType": "VariableDeclaration", - "scope": 4525, - "src": "6039:10:33", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4452, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "6039:7:33", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 4455, - "mutability": "mutable", - "name": "value", - "nameLocation": "6059:5:33", - "nodeType": "VariableDeclaration", - "scope": 4525, - "src": "6051:13:33", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 4454, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "6051:7:33", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "6024:41:33" - }, - "returnParameters": { - "id": 4457, - "nodeType": "ParameterList", - "parameters": [], - "src": "6083:0:33" - }, - "scope": 4718, - "src": "6008:1107:33", - "stateMutability": "nonpayable", - "virtual": true, - "visibility": "internal" - }, - { - "body": { - "id": 4557, - "nodeType": "Block", - "src": "7514:152:33", - "statements": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 4538, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 4533, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4528, - "src": "7528:7:33", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "arguments": [ - { - "hexValue": "30", - "id": 4536, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "7547:1:33", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 4535, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "7539:7:33", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 4534, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "7539:7:33", - "typeDescriptions": {} - } - }, - "id": 4537, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7539:10:33", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "7528:21:33", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 4547, - "nodeType": "IfStatement", - "src": "7524:91:33", - "trueBody": { - "id": 4546, - "nodeType": "Block", - "src": "7551:64:33", - "statements": [ - { - "errorCall": { - "arguments": [ - { - "arguments": [ - { - "hexValue": "30", - "id": 4542, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "7601:1:33", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 4541, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "7593:7:33", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 4540, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "7593:7:33", - "typeDescriptions": {} - } - }, - "id": 4543, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7593:10:33", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 4539, - "name": "ERC20InvalidReceiver", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4088, - "src": "7572:20:33", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$_t_address_$returns$__$", - "typeString": "function (address) pure" - } - }, - "id": 4544, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7572:32:33", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 4545, - "nodeType": "RevertStatement", - "src": "7565:39:33" - } - ] - } - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "hexValue": "30", - "id": 4551, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "7640:1:33", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 4550, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "7632:7:33", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 4549, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "7632:7:33", - "typeDescriptions": {} - } - }, - "id": 4552, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7632:10:33", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 4553, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4528, - "src": "7644:7:33", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 4554, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4530, - "src": "7653:5:33", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 4548, - "name": "_update", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4525, - "src": "7624:7:33", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,address,uint256)" - } - }, - "id": 4555, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7624:35:33", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 4556, - "nodeType": "ExpressionStatement", - "src": "7624:35:33" - } - ] - }, - "documentation": { - "id": 4526, - "nodeType": "StructuredDocumentation", - "src": "7121:332:33", - "text": " @dev Creates a `value` amount of tokens and assigns them to `account`, by transferring it from address(0).\n Relies on the `_update` mechanism\n Emits a {Transfer} event with `from` set to the zero address.\n NOTE: This function is not virtual, {_update} should be overridden instead." - }, - "id": 4558, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_mint", - "nameLocation": "7467:5:33", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 4531, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4528, - "mutability": "mutable", - "name": "account", - "nameLocation": "7481:7:33", - "nodeType": "VariableDeclaration", - "scope": 4558, - "src": "7473:15:33", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4527, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "7473:7:33", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 4530, - "mutability": "mutable", - "name": "value", - "nameLocation": "7498:5:33", - "nodeType": "VariableDeclaration", - "scope": 4558, - "src": "7490:13:33", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 4529, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "7490:7:33", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "7472:32:33" - }, - "returnParameters": { - "id": 4532, - "nodeType": "ParameterList", - "parameters": [], - "src": "7514:0:33" - }, - "scope": 4718, - "src": "7458:208:33", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 4590, - "nodeType": "Block", - "src": "8040:150:33", - "statements": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 4571, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 4566, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4561, - "src": "8054:7:33", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "arguments": [ - { - "hexValue": "30", - "id": 4569, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "8073:1:33", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 4568, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "8065:7:33", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 4567, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "8065:7:33", - "typeDescriptions": {} - } - }, - "id": 4570, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "8065:10:33", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "8054:21:33", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 4580, - "nodeType": "IfStatement", - "src": "8050:89:33", - "trueBody": { - "id": 4579, - "nodeType": "Block", - "src": "8077:62:33", - "statements": [ - { - "errorCall": { - "arguments": [ - { - "arguments": [ - { - "hexValue": "30", - "id": 4575, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "8125:1:33", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 4574, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "8117:7:33", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 4573, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "8117:7:33", - "typeDescriptions": {} - } - }, - "id": 4576, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "8117:10:33", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 4572, - "name": "ERC20InvalidSender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4083, - "src": "8098:18:33", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$_t_address_$returns$__$", - "typeString": "function (address) pure" - } - }, - "id": 4577, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "8098:30:33", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 4578, - "nodeType": "RevertStatement", - "src": "8091:37:33" - } - ] - } - }, - { - "expression": { - "arguments": [ - { - "id": 4582, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4561, - "src": "8156:7:33", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "arguments": [ - { - "hexValue": "30", - "id": 4585, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "8173:1:33", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 4584, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "8165:7:33", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 4583, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "8165:7:33", - "typeDescriptions": {} - } - }, - "id": 4586, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "8165:10:33", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 4587, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4563, - "src": "8177:5:33", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 4581, - "name": "_update", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4525, - "src": "8148:7:33", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,address,uint256)" - } - }, - "id": 4588, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "8148:35:33", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 4589, - "nodeType": "ExpressionStatement", - "src": "8148:35:33" - } - ] - }, - "documentation": { - "id": 4559, - "nodeType": "StructuredDocumentation", - "src": "7672:307:33", - "text": " @dev Destroys a `value` amount of tokens from `account`, lowering the total supply.\n Relies on the `_update` mechanism.\n Emits a {Transfer} event with `to` set to the zero address.\n NOTE: This function is not virtual, {_update} should be overridden instead" - }, - "id": 4591, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_burn", - "nameLocation": "7993:5:33", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 4564, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4561, - "mutability": "mutable", - "name": "account", - "nameLocation": "8007:7:33", - "nodeType": "VariableDeclaration", - "scope": 4591, - "src": "7999:15:33", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4560, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "7999:7:33", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 4563, - "mutability": "mutable", - "name": "value", - "nameLocation": "8024:5:33", - "nodeType": "VariableDeclaration", - "scope": 4591, - "src": "8016:13:33", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 4562, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "8016:7:33", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "7998:32:33" - }, - "returnParameters": { - "id": 4565, - "nodeType": "ParameterList", - "parameters": [], - "src": "8040:0:33" - }, - "scope": 4718, - "src": "7984:206:33", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 4608, - "nodeType": "Block", - "src": "8800:54:33", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 4602, - "name": "owner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4594, - "src": "8819:5:33", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 4603, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4596, - "src": "8826:7:33", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 4604, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4598, - "src": "8835:5:33", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "hexValue": "74727565", - "id": 4605, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "8842:4:33", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 4601, - "name": "_approve", - "nodeType": "Identifier", - "overloadedDeclarations": [4609, 4669], - "referencedDeclaration": 4669, - "src": "8810:8:33", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bool_$returns$__$", - "typeString": "function (address,address,uint256,bool)" - } - }, - "id": 4606, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "8810:37:33", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 4607, - "nodeType": "ExpressionStatement", - "src": "8810:37:33" - } - ] - }, - "documentation": { - "id": 4592, - "nodeType": "StructuredDocumentation", - "src": "8196:525:33", - "text": " @dev Sets `value` as the allowance of `spender` over the `owner` s tokens.\n This internal function is equivalent to `approve`, and can be used to\n e.g. set automatic allowances for certain subsystems, etc.\n Emits an {Approval} event.\n Requirements:\n - `owner` cannot be the zero address.\n - `spender` cannot be the zero address.\n Overrides to this logic should be done to the variant with an additional `bool emitEvent` argument." - }, - "id": 4609, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_approve", - "nameLocation": "8735:8:33", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 4599, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4594, - "mutability": "mutable", - "name": "owner", - "nameLocation": "8752:5:33", - "nodeType": "VariableDeclaration", - "scope": 4609, - "src": "8744:13:33", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4593, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "8744:7:33", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 4596, - "mutability": "mutable", - "name": "spender", - "nameLocation": "8767:7:33", - "nodeType": "VariableDeclaration", - "scope": 4609, - "src": "8759:15:33", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4595, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "8759:7:33", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 4598, - "mutability": "mutable", - "name": "value", - "nameLocation": "8784:5:33", - "nodeType": "VariableDeclaration", - "scope": 4609, - "src": "8776:13:33", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 4597, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "8776:7:33", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "8743:47:33" - }, - "returnParameters": { - "id": 4600, - "nodeType": "ParameterList", - "parameters": [], - "src": "8800:0:33" - }, - "scope": 4718, - "src": "8726:128:33", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 4668, - "nodeType": "Block", - "src": "9799:334:33", - "statements": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 4626, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 4621, - "name": "owner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4612, - "src": "9813:5:33", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "arguments": [ - { - "hexValue": "30", - "id": 4624, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "9830:1:33", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 4623, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "9822:7:33", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 4622, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "9822:7:33", - "typeDescriptions": {} - } - }, - "id": 4625, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "9822:10:33", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "9813:19:33", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 4635, - "nodeType": "IfStatement", - "src": "9809:89:33", - "trueBody": { - "id": 4634, - "nodeType": "Block", - "src": "9834:64:33", - "statements": [ - { - "errorCall": { - "arguments": [ - { - "arguments": [ - { - "hexValue": "30", - "id": 4630, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "9884:1:33", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 4629, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "9876:7:33", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 4628, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "9876:7:33", - "typeDescriptions": {} - } - }, - "id": 4631, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "9876:10:33", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 4627, - "name": "ERC20InvalidApprover", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4102, - "src": "9855:20:33", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$_t_address_$returns$__$", - "typeString": "function (address) pure" - } - }, - "id": 4632, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "9855:32:33", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 4633, - "nodeType": "RevertStatement", - "src": "9848:39:33" - } - ] - } - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 4641, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 4636, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4614, - "src": "9911:7:33", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "arguments": [ - { - "hexValue": "30", - "id": 4639, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "9930:1:33", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 4638, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "9922:7:33", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 4637, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "9922:7:33", - "typeDescriptions": {} - } - }, - "id": 4640, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "9922:10:33", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "9911:21:33", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 4650, - "nodeType": "IfStatement", - "src": "9907:90:33", - "trueBody": { - "id": 4649, - "nodeType": "Block", - "src": "9934:63:33", - "statements": [ - { - "errorCall": { - "arguments": [ - { - "arguments": [ - { - "hexValue": "30", - "id": 4645, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "9983:1:33", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 4644, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "9975:7:33", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 4643, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "9975:7:33", - "typeDescriptions": {} - } - }, - "id": 4646, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "9975:10:33", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 4642, - "name": "ERC20InvalidSpender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4107, - "src": "9955:19:33", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$_t_address_$returns$__$", - "typeString": "function (address) pure" - } - }, - "id": 4647, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "9955:31:33", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 4648, - "nodeType": "RevertStatement", - "src": "9948:38:33" - } - ] - } - }, - { - "expression": { - "id": 4657, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "baseExpression": { - "baseExpression": { - "id": 4651, - "name": "_allowances", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4232, - "src": "10006:11:33", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$", - "typeString": "mapping(address => mapping(address => uint256))" - } - }, - "id": 4654, - "indexExpression": { - "id": 4652, - "name": "owner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4612, - "src": "10018:5:33", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "10006:18:33", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 4655, - "indexExpression": { - "id": 4653, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4614, - "src": "10025:7:33", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "10006:27:33", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 4656, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4616, - "src": "10036:5:33", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "10006:35:33", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 4658, - "nodeType": "ExpressionStatement", - "src": "10006:35:33" - }, - { - "condition": { - "id": 4659, - "name": "emitEvent", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4618, - "src": "10055:9:33", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 4667, - "nodeType": "IfStatement", - "src": "10051:76:33", - "trueBody": { - "id": 4666, - "nodeType": "Block", - "src": "10066:61:33", - "statements": [ - { - "eventCall": { - "arguments": [ - { - "id": 4661, - "name": "owner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4612, - "src": "10094:5:33", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 4662, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4614, - "src": "10101:7:33", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 4663, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4616, - "src": "10110:5:33", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 4660, - "name": "Approval", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4739, - "src": "10085:8:33", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,address,uint256)" - } - }, - "id": 4664, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "10085:31:33", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 4665, - "nodeType": "EmitStatement", - "src": "10080:36:33" - } - ] - } - } - ] - }, - "documentation": { - "id": 4610, - "nodeType": "StructuredDocumentation", - "src": "8860:836:33", - "text": " @dev Variant of {_approve} with an optional flag to enable or disable the {Approval} event.\n By default (when calling {_approve}) the flag is set to true. On the other hand, approval changes made by\n `_spendAllowance` during the `transferFrom` operation set the flag to false. This saves gas by not emitting any\n `Approval` event during `transferFrom` operations.\n Anyone who wishes to continue emitting `Approval` events on the`transferFrom` operation can force the flag to\n true using the following override:\n ```solidity\n function _approve(address owner, address spender, uint256 value, bool) internal virtual override {\n super._approve(owner, spender, value, true);\n }\n ```\n Requirements are the same as {_approve}." - }, - "id": 4669, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_approve", - "nameLocation": "9710:8:33", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 4619, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4612, - "mutability": "mutable", - "name": "owner", - "nameLocation": "9727:5:33", - "nodeType": "VariableDeclaration", - "scope": 4669, - "src": "9719:13:33", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4611, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "9719:7:33", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 4614, - "mutability": "mutable", - "name": "spender", - "nameLocation": "9742:7:33", - "nodeType": "VariableDeclaration", - "scope": 4669, - "src": "9734:15:33", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4613, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "9734:7:33", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 4616, - "mutability": "mutable", - "name": "value", - "nameLocation": "9759:5:33", - "nodeType": "VariableDeclaration", - "scope": 4669, - "src": "9751:13:33", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 4615, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "9751:7:33", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 4618, - "mutability": "mutable", - "name": "emitEvent", - "nameLocation": "9771:9:33", - "nodeType": "VariableDeclaration", - "scope": 4669, - "src": "9766:14:33", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 4617, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "9766:4:33", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "9718:63:33" - }, - "returnParameters": { - "id": 4620, - "nodeType": "ParameterList", - "parameters": [], - "src": "9799:0:33" - }, - "scope": 4718, - "src": "9701:432:33", - "stateMutability": "nonpayable", - "virtual": true, - "visibility": "internal" - }, - { - "body": { - "id": 4716, - "nodeType": "Block", - "src": "10504:388:33", - "statements": [ - { - "assignments": [4680], - "declarations": [ - { - "constant": false, - "id": 4680, - "mutability": "mutable", - "name": "currentAllowance", - "nameLocation": "10522:16:33", - "nodeType": "VariableDeclaration", - "scope": 4716, - "src": "10514:24:33", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 4679, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "10514:7:33", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 4685, - "initialValue": { - "arguments": [ - { - "id": 4682, - "name": "owner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4672, - "src": "10551:5:33", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 4683, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4674, - "src": "10558:7:33", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 4681, - "name": "allowance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4345, - "src": "10541:9:33", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$returns$_t_uint256_$", - "typeString": "function (address,address) view returns (uint256)" - } - }, - "id": 4684, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "10541:25:33", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "10514:52:33" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 4692, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 4686, - "name": "currentAllowance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4680, - "src": "10580:16:33", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "expression": { - "arguments": [ - { - "id": 4689, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "10605:7:33", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_uint256_$", - "typeString": "type(uint256)" - }, - "typeName": { - "id": 4688, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "10605:7:33", - "typeDescriptions": {} - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_type$_t_uint256_$", - "typeString": "type(uint256)" - } - ], - "id": 4687, - "name": "type", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967269, - "src": "10600:4:33", - "typeDescriptions": { - "typeIdentifier": "t_function_metatype_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 4690, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "10600:13:33", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_magic_meta_type_t_uint256", - "typeString": "type(uint256)" - } - }, - "id": 4691, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "10614:3:33", - "memberName": "max", - "nodeType": "MemberAccess", - "src": "10600:17:33", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "10580:37:33", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 4715, - "nodeType": "IfStatement", - "src": "10576:310:33", - "trueBody": { - "id": 4714, - "nodeType": "Block", - "src": "10619:267:33", - "statements": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 4695, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 4693, - "name": "currentAllowance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4680, - "src": "10637:16:33", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "id": 4694, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4676, - "src": "10656:5:33", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "10637:24:33", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 4703, - "nodeType": "IfStatement", - "src": "10633:130:33", - "trueBody": { - "id": 4702, - "nodeType": "Block", - "src": "10663:100:33", - "statements": [ - { - "errorCall": { - "arguments": [ - { - "id": 4697, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4674, - "src": "10715:7:33", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 4698, - "name": "currentAllowance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4680, - "src": "10724:16:33", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 4699, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4676, - "src": "10742:5:33", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 4696, - "name": "ERC20InsufficientAllowance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4097, - "src": "10688:26:33", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$_t_address_$_t_uint256_$_t_uint256_$returns$__$", - "typeString": "function (address,uint256,uint256) pure" - } - }, - "id": 4700, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "10688:60:33", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 4701, - "nodeType": "RevertStatement", - "src": "10681:67:33" - } - ] - } - }, - { - "id": 4713, - "nodeType": "UncheckedBlock", - "src": "10776:100:33", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 4705, - "name": "owner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4672, - "src": "10813:5:33", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 4706, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4674, - "src": "10820:7:33", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 4709, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 4707, - "name": "currentAllowance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4680, - "src": "10829:16:33", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "id": 4708, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4676, - "src": "10848:5:33", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "10829:24:33", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "hexValue": "66616c7365", - "id": 4710, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "10855:5:33", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "false" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 4704, - "name": "_approve", - "nodeType": "Identifier", - "overloadedDeclarations": [4609, 4669], - "referencedDeclaration": 4669, - "src": "10804:8:33", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bool_$returns$__$", - "typeString": "function (address,address,uint256,bool)" - } - }, - "id": 4711, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "10804:57:33", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 4712, - "nodeType": "ExpressionStatement", - "src": "10804:57:33" - } - ] - } - ] - } - } - ] - }, - "documentation": { - "id": 4670, - "nodeType": "StructuredDocumentation", - "src": "10139:271:33", - "text": " @dev Updates `owner` s allowance for `spender` based on spent `value`.\n Does not update the allowance value in case of infinite allowance.\n Revert if not enough allowance is available.\n Does not emit an {Approval} event." - }, - "id": 4717, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_spendAllowance", - "nameLocation": "10424:15:33", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 4677, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4672, - "mutability": "mutable", - "name": "owner", - "nameLocation": "10448:5:33", - "nodeType": "VariableDeclaration", - "scope": 4717, - "src": "10440:13:33", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4671, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "10440:7:33", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 4674, - "mutability": "mutable", - "name": "spender", - "nameLocation": "10463:7:33", - "nodeType": "VariableDeclaration", - "scope": 4717, - "src": "10455:15:33", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4673, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "10455:7:33", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 4676, - "mutability": "mutable", - "name": "value", - "nameLocation": "10480:5:33", - "nodeType": "VariableDeclaration", - "scope": 4717, - "src": "10472:13:33", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 4675, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "10472:7:33", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "10439:47:33" - }, - "returnParameters": { - "id": 4678, - "nodeType": "ParameterList", - "parameters": [], - "src": "10504:0:33" - }, - "scope": 4718, - "src": "10415:477:33", - "stateMutability": "nonpayable", - "virtual": true, - "visibility": "internal" - } - ], - "scope": 4719, - "src": "1106:9788:33", - "usedErrors": [4078, 4083, 4088, 4097, 4102, 4107], - "usedEvents": [4730, 4739] - } - ], - "src": "105:10790:33" - }, - "id": 33 - }, - "@openzeppelin/contracts/token/ERC20/IERC20.sol": { - "ast": { - "absolutePath": "@openzeppelin/contracts/token/ERC20/IERC20.sol", - "exportedSymbols": { "IERC20": [4796] }, - "id": 4797, - "license": "MIT", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 4720, - "literals": ["solidity", "^", "0.8", ".20"], - "nodeType": "PragmaDirective", - "src": "106:24:34" - }, - { - "abstract": false, - "baseContracts": [], - "canonicalName": "IERC20", - "contractDependencies": [], - "contractKind": "interface", - "documentation": { - "id": 4721, - "nodeType": "StructuredDocumentation", - "src": "132:71:34", - "text": " @dev Interface of the ERC-20 standard as defined in the ERC." - }, - "fullyImplemented": false, - "id": 4796, - "linearizedBaseContracts": [4796], - "name": "IERC20", - "nameLocation": "214:6:34", - "nodeType": "ContractDefinition", - "nodes": [ - { - "anonymous": false, - "documentation": { - "id": 4722, - "nodeType": "StructuredDocumentation", - "src": "227:158:34", - "text": " @dev Emitted when `value` tokens are moved from one account (`from`) to\n another (`to`).\n Note that `value` may be zero." - }, - "eventSelector": "ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", - "id": 4730, - "name": "Transfer", - "nameLocation": "396:8:34", - "nodeType": "EventDefinition", - "parameters": { - "id": 4729, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4724, - "indexed": true, - "mutability": "mutable", - "name": "from", - "nameLocation": "421:4:34", - "nodeType": "VariableDeclaration", - "scope": 4730, - "src": "405:20:34", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4723, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "405:7:34", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 4726, - "indexed": true, - "mutability": "mutable", - "name": "to", - "nameLocation": "443:2:34", - "nodeType": "VariableDeclaration", - "scope": 4730, - "src": "427:18:34", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4725, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "427:7:34", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 4728, - "indexed": false, - "mutability": "mutable", - "name": "value", - "nameLocation": "455:5:34", - "nodeType": "VariableDeclaration", - "scope": 4730, - "src": "447:13:34", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 4727, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "447:7:34", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "404:57:34" - }, - "src": "390:72:34" - }, - { - "anonymous": false, - "documentation": { - "id": 4731, - "nodeType": "StructuredDocumentation", - "src": "468:148:34", - "text": " @dev Emitted when the allowance of a `spender` for an `owner` is set by\n a call to {approve}. `value` is the new allowance." - }, - "eventSelector": "8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925", - "id": 4739, - "name": "Approval", - "nameLocation": "627:8:34", - "nodeType": "EventDefinition", - "parameters": { - "id": 4738, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4733, - "indexed": true, - "mutability": "mutable", - "name": "owner", - "nameLocation": "652:5:34", - "nodeType": "VariableDeclaration", - "scope": 4739, - "src": "636:21:34", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4732, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "636:7:34", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 4735, - "indexed": true, - "mutability": "mutable", - "name": "spender", - "nameLocation": "675:7:34", - "nodeType": "VariableDeclaration", - "scope": 4739, - "src": "659:23:34", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4734, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "659:7:34", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 4737, - "indexed": false, - "mutability": "mutable", - "name": "value", - "nameLocation": "692:5:34", - "nodeType": "VariableDeclaration", - "scope": 4739, - "src": "684:13:34", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 4736, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "684:7:34", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "635:63:34" - }, - "src": "621:78:34" - }, - { - "documentation": { - "id": 4740, - "nodeType": "StructuredDocumentation", - "src": "705:65:34", - "text": " @dev Returns the value of tokens in existence." - }, - "functionSelector": "18160ddd", - "id": 4745, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "totalSupply", - "nameLocation": "784:11:34", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 4741, - "nodeType": "ParameterList", - "parameters": [], - "src": "795:2:34" - }, - "returnParameters": { - "id": 4744, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4743, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 4745, - "src": "821:7:34", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 4742, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "821:7:34", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "820:9:34" - }, - "scope": 4796, - "src": "775:55:34", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 4746, - "nodeType": "StructuredDocumentation", - "src": "836:71:34", - "text": " @dev Returns the value of tokens owned by `account`." - }, - "functionSelector": "70a08231", - "id": 4753, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "balanceOf", - "nameLocation": "921:9:34", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 4749, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4748, - "mutability": "mutable", - "name": "account", - "nameLocation": "939:7:34", - "nodeType": "VariableDeclaration", - "scope": 4753, - "src": "931:15:34", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4747, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "931:7:34", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "930:17:34" - }, - "returnParameters": { - "id": 4752, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4751, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 4753, - "src": "971:7:34", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 4750, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "971:7:34", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "970:9:34" - }, - "scope": 4796, - "src": "912:68:34", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 4754, - "nodeType": "StructuredDocumentation", - "src": "986:213:34", - "text": " @dev Moves a `value` amount of tokens from the caller's account to `to`.\n Returns a boolean value indicating whether the operation succeeded.\n Emits a {Transfer} event." - }, - "functionSelector": "a9059cbb", - "id": 4763, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "transfer", - "nameLocation": "1213:8:34", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 4759, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4756, - "mutability": "mutable", - "name": "to", - "nameLocation": "1230:2:34", - "nodeType": "VariableDeclaration", - "scope": 4763, - "src": "1222:10:34", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4755, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1222:7:34", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 4758, - "mutability": "mutable", - "name": "value", - "nameLocation": "1242:5:34", - "nodeType": "VariableDeclaration", - "scope": 4763, - "src": "1234:13:34", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 4757, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1234:7:34", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "1221:27:34" - }, - "returnParameters": { - "id": 4762, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4761, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 4763, - "src": "1267:4:34", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 4760, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "1267:4:34", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "1266:6:34" - }, - "scope": 4796, - "src": "1204:69:34", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 4764, - "nodeType": "StructuredDocumentation", - "src": "1279:264:34", - "text": " @dev Returns the remaining number of tokens that `spender` will be\n allowed to spend on behalf of `owner` through {transferFrom}. This is\n zero by default.\n This value changes when {approve} or {transferFrom} are called." - }, - "functionSelector": "dd62ed3e", - "id": 4773, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "allowance", - "nameLocation": "1557:9:34", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 4769, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4766, - "mutability": "mutable", - "name": "owner", - "nameLocation": "1575:5:34", - "nodeType": "VariableDeclaration", - "scope": 4773, - "src": "1567:13:34", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4765, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1567:7:34", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 4768, - "mutability": "mutable", - "name": "spender", - "nameLocation": "1590:7:34", - "nodeType": "VariableDeclaration", - "scope": 4773, - "src": "1582:15:34", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4767, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1582:7:34", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1566:32:34" - }, - "returnParameters": { - "id": 4772, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4771, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 4773, - "src": "1622:7:34", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 4770, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1622:7:34", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "1621:9:34" - }, - "scope": 4796, - "src": "1548:83:34", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 4774, - "nodeType": "StructuredDocumentation", - "src": "1637:667:34", - "text": " @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n caller's tokens.\n Returns a boolean value indicating whether the operation succeeded.\n IMPORTANT: Beware that changing an allowance with this method brings the risk\n that someone may use both the old and the new allowance by unfortunate\n transaction ordering. One possible solution to mitigate this race\n condition is to first reduce the spender's allowance to 0 and set the\n desired value afterwards:\n https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n Emits an {Approval} event." - }, - "functionSelector": "095ea7b3", - "id": 4783, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "approve", - "nameLocation": "2318:7:34", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 4779, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4776, - "mutability": "mutable", - "name": "spender", - "nameLocation": "2334:7:34", - "nodeType": "VariableDeclaration", - "scope": 4783, - "src": "2326:15:34", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4775, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2326:7:34", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 4778, - "mutability": "mutable", - "name": "value", - "nameLocation": "2351:5:34", - "nodeType": "VariableDeclaration", - "scope": 4783, - "src": "2343:13:34", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 4777, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2343:7:34", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "2325:32:34" - }, - "returnParameters": { - "id": 4782, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4781, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 4783, - "src": "2376:4:34", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 4780, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "2376:4:34", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "2375:6:34" - }, - "scope": 4796, - "src": "2309:73:34", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 4784, - "nodeType": "StructuredDocumentation", - "src": "2388:297:34", - "text": " @dev Moves a `value` amount of tokens from `from` to `to` using the\n allowance mechanism. `value` is then deducted from the caller's\n allowance.\n Returns a boolean value indicating whether the operation succeeded.\n Emits a {Transfer} event." - }, - "functionSelector": "23b872dd", - "id": 4795, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "transferFrom", - "nameLocation": "2699:12:34", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 4791, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4786, - "mutability": "mutable", - "name": "from", - "nameLocation": "2720:4:34", - "nodeType": "VariableDeclaration", - "scope": 4795, - "src": "2712:12:34", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4785, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2712:7:34", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 4788, - "mutability": "mutable", - "name": "to", - "nameLocation": "2734:2:34", - "nodeType": "VariableDeclaration", - "scope": 4795, - "src": "2726:10:34", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4787, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2726:7:34", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 4790, - "mutability": "mutable", - "name": "value", - "nameLocation": "2746:5:34", - "nodeType": "VariableDeclaration", - "scope": 4795, - "src": "2738:13:34", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 4789, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2738:7:34", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "2711:41:34" - }, - "returnParameters": { - "id": 4794, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4793, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 4795, - "src": "2771:4:34", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 4792, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "2771:4:34", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "2770:6:34" - }, - "scope": 4796, - "src": "2690:87:34", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - } - ], - "scope": 4797, - "src": "204:2575:34", - "usedErrors": [], - "usedEvents": [4730, 4739] - } - ], - "src": "106:2674:34" - }, - "id": 34 - }, - "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol": { - "ast": { - "absolutePath": "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol", - "exportedSymbols": { "IERC20": [4796], "IERC20Metadata": [4822] }, - "id": 4823, - "license": "MIT", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 4798, - "literals": ["solidity", "^", "0.8", ".20"], - "nodeType": "PragmaDirective", - "src": "125:24:35" - }, - { - "absolutePath": "@openzeppelin/contracts/token/ERC20/IERC20.sol", - "file": "../IERC20.sol", - "id": 4800, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 4823, - "sourceUnit": 4797, - "src": "151:37:35", - "symbolAliases": [ - { - "foreign": { - "id": 4799, - "name": "IERC20", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4796, - "src": "159:6:35", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "abstract": false, - "baseContracts": [ - { - "baseName": { - "id": 4802, - "name": "IERC20", - "nameLocations": ["306:6:35"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 4796, - "src": "306:6:35" - }, - "id": 4803, - "nodeType": "InheritanceSpecifier", - "src": "306:6:35" - } - ], - "canonicalName": "IERC20Metadata", - "contractDependencies": [], - "contractKind": "interface", - "documentation": { - "id": 4801, - "nodeType": "StructuredDocumentation", - "src": "190:87:35", - "text": " @dev Interface for the optional metadata functions from the ERC-20 standard." - }, - "fullyImplemented": false, - "id": 4822, - "linearizedBaseContracts": [4822, 4796], - "name": "IERC20Metadata", - "nameLocation": "288:14:35", - "nodeType": "ContractDefinition", - "nodes": [ - { - "documentation": { - "id": 4804, - "nodeType": "StructuredDocumentation", - "src": "319:54:35", - "text": " @dev Returns the name of the token." - }, - "functionSelector": "06fdde03", - "id": 4809, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "name", - "nameLocation": "387:4:35", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 4805, - "nodeType": "ParameterList", - "parameters": [], - "src": "391:2:35" - }, - "returnParameters": { - "id": 4808, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4807, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 4809, - "src": "417:13:35", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 4806, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "417:6:35", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "visibility": "internal" - } - ], - "src": "416:15:35" - }, - "scope": 4822, - "src": "378:54:35", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 4810, - "nodeType": "StructuredDocumentation", - "src": "438:56:35", - "text": " @dev Returns the symbol of the token." - }, - "functionSelector": "95d89b41", - "id": 4815, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "symbol", - "nameLocation": "508:6:35", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 4811, - "nodeType": "ParameterList", - "parameters": [], - "src": "514:2:35" - }, - "returnParameters": { - "id": 4814, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4813, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 4815, - "src": "540:13:35", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 4812, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "540:6:35", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "visibility": "internal" - } - ], - "src": "539:15:35" - }, - "scope": 4822, - "src": "499:56:35", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "documentation": { - "id": 4816, - "nodeType": "StructuredDocumentation", - "src": "561:65:35", - "text": " @dev Returns the decimals places of the token." - }, - "functionSelector": "313ce567", - "id": 4821, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "decimals", - "nameLocation": "640:8:35", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 4817, - "nodeType": "ParameterList", - "parameters": [], - "src": "648:2:35" - }, - "returnParameters": { - "id": 4820, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4819, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 4821, - "src": "674:5:35", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 4818, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "674:5:35", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "visibility": "internal" - } - ], - "src": "673:7:35" - }, - "scope": 4822, - "src": "631:50:35", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - } - ], - "scope": 4823, - "src": "278:405:35", - "usedErrors": [], - "usedEvents": [4730, 4739] - } - ], - "src": "125:559:35" - }, - "id": 35 - }, - "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol": { - "ast": { - "absolutePath": "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol", - "exportedSymbols": { - "Address": [5492], - "IERC1363": [4058], - "IERC20": [4796], - "SafeERC20": [5233] - }, - "id": 5234, - "license": "MIT", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 4824, - "literals": ["solidity", "^", "0.8", ".20"], - "nodeType": "PragmaDirective", - "src": "115:24:36" - }, - { - "absolutePath": "@openzeppelin/contracts/token/ERC20/IERC20.sol", - "file": "../IERC20.sol", - "id": 4826, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 5234, - "sourceUnit": 4797, - "src": "141:37:36", - "symbolAliases": [ - { - "foreign": { - "id": 4825, - "name": "IERC20", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4796, - "src": "149:6:36", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "@openzeppelin/contracts/interfaces/IERC1363.sol", - "file": "../../../interfaces/IERC1363.sol", - "id": 4828, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 5234, - "sourceUnit": 4059, - "src": "179:58:36", - "symbolAliases": [ - { - "foreign": { - "id": 4827, - "name": "IERC1363", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4058, - "src": "187:8:36", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "@openzeppelin/contracts/utils/Address.sol", - "file": "../../../utils/Address.sol", - "id": 4830, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 5234, - "sourceUnit": 5493, - "src": "238:51:36", - "symbolAliases": [ - { - "foreign": { - "id": 4829, - "name": "Address", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5492, - "src": "246:7:36", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "abstract": false, - "baseContracts": [], - "canonicalName": "SafeERC20", - "contractDependencies": [], - "contractKind": "library", - "documentation": { - "id": 4831, - "nodeType": "StructuredDocumentation", - "src": "291:458:36", - "text": " @title SafeERC20\n @dev Wrappers around ERC-20 operations that throw on failure (when the token\n contract returns false). Tokens that return no value (and instead revert or\n throw on failure) are also supported, non-reverting calls are assumed to be\n successful.\n To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\n which allows you to call the safe operations as `token.safeTransfer(...)`, etc." - }, - "fullyImplemented": true, - "id": 5233, - "linearizedBaseContracts": [5233], - "name": "SafeERC20", - "nameLocation": "758:9:36", - "nodeType": "ContractDefinition", - "nodes": [ - { - "documentation": { - "id": 4832, - "nodeType": "StructuredDocumentation", - "src": "774:65:36", - "text": " @dev An operation with an ERC-20 token failed." - }, - "errorSelector": "5274afe7", - "id": 4836, - "name": "SafeERC20FailedOperation", - "nameLocation": "850:24:36", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 4835, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4834, - "mutability": "mutable", - "name": "token", - "nameLocation": "883:5:36", - "nodeType": "VariableDeclaration", - "scope": 4836, - "src": "875:13:36", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4833, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "875:7:36", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "874:15:36" - }, - "src": "844:46:36" - }, - { - "documentation": { - "id": 4837, - "nodeType": "StructuredDocumentation", - "src": "896:71:36", - "text": " @dev Indicates a failed `decreaseAllowance` request." - }, - "errorSelector": "e570110f", - "id": 4845, - "name": "SafeERC20FailedDecreaseAllowance", - "nameLocation": "978:32:36", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 4844, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4839, - "mutability": "mutable", - "name": "spender", - "nameLocation": "1019:7:36", - "nodeType": "VariableDeclaration", - "scope": 4845, - "src": "1011:15:36", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4838, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1011:7:36", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 4841, - "mutability": "mutable", - "name": "currentAllowance", - "nameLocation": "1036:16:36", - "nodeType": "VariableDeclaration", - "scope": 4845, - "src": "1028:24:36", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 4840, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1028:7:36", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 4843, - "mutability": "mutable", - "name": "requestedDecrease", - "nameLocation": "1062:17:36", - "nodeType": "VariableDeclaration", - "scope": 4845, - "src": "1054:25:36", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 4842, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1054:7:36", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "1010:70:36" - }, - "src": "972:109:36" - }, - { - "body": { - "id": 4868, - "nodeType": "Block", - "src": "1343:88:36", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 4857, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4849, - "src": "1373:5:36", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$4796", - "typeString": "contract IERC20" - } - }, - { - "arguments": [ - { - "expression": { - "id": 4860, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4849, - "src": "1395:5:36", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$4796", - "typeString": "contract IERC20" - } - }, - "id": 4861, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "1401:8:36", - "memberName": "transfer", - "nodeType": "MemberAccess", - "referencedDeclaration": 4763, - "src": "1395:14:36", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", - "typeString": "function (address,uint256) external returns (bool)" - } - }, - { - "components": [ - { - "id": 4862, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4851, - "src": "1412:2:36", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 4863, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4853, - "src": "1416:5:36", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 4864, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "1411:11:36", - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_address_$_t_uint256_$", - "typeString": "tuple(address,uint256)" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", - "typeString": "function (address,uint256) external returns (bool)" - }, - { - "typeIdentifier": "t_tuple$_t_address_$_t_uint256_$", - "typeString": "tuple(address,uint256)" - } - ], - "expression": { - "id": 4858, - "name": "abi", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967295, - "src": "1380:3:36", - "typeDescriptions": { - "typeIdentifier": "t_magic_abi", - "typeString": "abi" - } - }, - "id": 4859, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "1384:10:36", - "memberName": "encodeCall", - "nodeType": "MemberAccess", - "src": "1380:14:36", - "typeDescriptions": { - "typeIdentifier": "t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$", - "typeString": "function () pure returns (bytes memory)" - } - }, - "id": 4865, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1380:43:36", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_IERC20_$4796", - "typeString": "contract IERC20" - }, - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "id": 4856, - "name": "_callOptionalReturn", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5191, - "src": "1353:19:36", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$4796_$_t_bytes_memory_ptr_$returns$__$", - "typeString": "function (contract IERC20,bytes memory)" - } - }, - "id": 4866, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1353:71:36", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 4867, - "nodeType": "ExpressionStatement", - "src": "1353:71:36" - } - ] - }, - "documentation": { - "id": 4846, - "nodeType": "StructuredDocumentation", - "src": "1087:179:36", - "text": " @dev Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value,\n non-reverting calls are assumed to be successful." - }, - "id": 4869, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "safeTransfer", - "nameLocation": "1280:12:36", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 4854, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4849, - "mutability": "mutable", - "name": "token", - "nameLocation": "1300:5:36", - "nodeType": "VariableDeclaration", - "scope": 4869, - "src": "1293:12:36", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$4796", - "typeString": "contract IERC20" - }, - "typeName": { - "id": 4848, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 4847, - "name": "IERC20", - "nameLocations": ["1293:6:36"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 4796, - "src": "1293:6:36" - }, - "referencedDeclaration": 4796, - "src": "1293:6:36", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$4796", - "typeString": "contract IERC20" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 4851, - "mutability": "mutable", - "name": "to", - "nameLocation": "1315:2:36", - "nodeType": "VariableDeclaration", - "scope": 4869, - "src": "1307:10:36", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4850, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1307:7:36", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 4853, - "mutability": "mutable", - "name": "value", - "nameLocation": "1327:5:36", - "nodeType": "VariableDeclaration", - "scope": 4869, - "src": "1319:13:36", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 4852, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1319:7:36", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "1292:41:36" - }, - "returnParameters": { - "id": 4855, - "nodeType": "ParameterList", - "parameters": [], - "src": "1343:0:36" - }, - "scope": 5233, - "src": "1271:160:36", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 4895, - "nodeType": "Block", - "src": "1760:98:36", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 4883, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4873, - "src": "1790:5:36", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$4796", - "typeString": "contract IERC20" - } - }, - { - "arguments": [ - { - "expression": { - "id": 4886, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4873, - "src": "1812:5:36", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$4796", - "typeString": "contract IERC20" - } - }, - "id": 4887, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "1818:12:36", - "memberName": "transferFrom", - "nodeType": "MemberAccess", - "referencedDeclaration": 4795, - "src": "1812:18:36", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$", - "typeString": "function (address,address,uint256) external returns (bool)" - } - }, - { - "components": [ - { - "id": 4888, - "name": "from", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4875, - "src": "1833:4:36", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 4889, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4877, - "src": "1839:2:36", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 4890, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4879, - "src": "1843:5:36", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 4891, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "1832:17:36", - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_address_$_t_address_$_t_uint256_$", - "typeString": "tuple(address,address,uint256)" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$", - "typeString": "function (address,address,uint256) external returns (bool)" - }, - { - "typeIdentifier": "t_tuple$_t_address_$_t_address_$_t_uint256_$", - "typeString": "tuple(address,address,uint256)" - } - ], - "expression": { - "id": 4884, - "name": "abi", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967295, - "src": "1797:3:36", - "typeDescriptions": { - "typeIdentifier": "t_magic_abi", - "typeString": "abi" - } - }, - "id": 4885, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "1801:10:36", - "memberName": "encodeCall", - "nodeType": "MemberAccess", - "src": "1797:14:36", - "typeDescriptions": { - "typeIdentifier": "t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$", - "typeString": "function () pure returns (bytes memory)" - } - }, - "id": 4892, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1797:53:36", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_IERC20_$4796", - "typeString": "contract IERC20" - }, - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "id": 4882, - "name": "_callOptionalReturn", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5191, - "src": "1770:19:36", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$4796_$_t_bytes_memory_ptr_$returns$__$", - "typeString": "function (contract IERC20,bytes memory)" - } - }, - "id": 4893, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1770:81:36", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 4894, - "nodeType": "ExpressionStatement", - "src": "1770:81:36" - } - ] - }, - "documentation": { - "id": 4870, - "nodeType": "StructuredDocumentation", - "src": "1437:228:36", - "text": " @dev Transfer `value` amount of `token` from `from` to `to`, spending the approval given by `from` to the\n calling contract. If `token` returns no value, non-reverting calls are assumed to be successful." - }, - "id": 4896, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "safeTransferFrom", - "nameLocation": "1679:16:36", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 4880, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4873, - "mutability": "mutable", - "name": "token", - "nameLocation": "1703:5:36", - "nodeType": "VariableDeclaration", - "scope": 4896, - "src": "1696:12:36", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$4796", - "typeString": "contract IERC20" - }, - "typeName": { - "id": 4872, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 4871, - "name": "IERC20", - "nameLocations": ["1696:6:36"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 4796, - "src": "1696:6:36" - }, - "referencedDeclaration": 4796, - "src": "1696:6:36", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$4796", - "typeString": "contract IERC20" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 4875, - "mutability": "mutable", - "name": "from", - "nameLocation": "1718:4:36", - "nodeType": "VariableDeclaration", - "scope": 4896, - "src": "1710:12:36", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4874, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1710:7:36", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 4877, - "mutability": "mutable", - "name": "to", - "nameLocation": "1732:2:36", - "nodeType": "VariableDeclaration", - "scope": 4896, - "src": "1724:10:36", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4876, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1724:7:36", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 4879, - "mutability": "mutable", - "name": "value", - "nameLocation": "1744:5:36", - "nodeType": "VariableDeclaration", - "scope": 4896, - "src": "1736:13:36", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 4878, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1736:7:36", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "1695:55:36" - }, - "returnParameters": { - "id": 4881, - "nodeType": "ParameterList", - "parameters": [], - "src": "1760:0:36" - }, - "scope": 5233, - "src": "1670:188:36", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 4926, - "nodeType": "Block", - "src": "2600:139:36", - "statements": [ - { - "assignments": [4908], - "declarations": [ - { - "constant": false, - "id": 4908, - "mutability": "mutable", - "name": "oldAllowance", - "nameLocation": "2618:12:36", - "nodeType": "VariableDeclaration", - "scope": 4926, - "src": "2610:20:36", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 4907, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2610:7:36", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 4917, - "initialValue": { - "arguments": [ - { - "arguments": [ - { - "id": 4913, - "name": "this", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967268, - "src": "2657:4:36", - "typeDescriptions": { - "typeIdentifier": "t_contract$_SafeERC20_$5233", - "typeString": "library SafeERC20" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_SafeERC20_$5233", - "typeString": "library SafeERC20" - } - ], - "id": 4912, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2649:7:36", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 4911, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2649:7:36", - "typeDescriptions": {} - } - }, - "id": 4914, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2649:13:36", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 4915, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4902, - "src": "2664:7:36", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 4909, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4900, - "src": "2633:5:36", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$4796", - "typeString": "contract IERC20" - } - }, - "id": 4910, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2639:9:36", - "memberName": "allowance", - "nodeType": "MemberAccess", - "referencedDeclaration": 4773, - "src": "2633:15:36", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$", - "typeString": "function (address,address) view external returns (uint256)" - } - }, - "id": 4916, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2633:39:36", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "2610:62:36" - }, - { - "expression": { - "arguments": [ - { - "id": 4919, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4900, - "src": "2695:5:36", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$4796", - "typeString": "contract IERC20" - } - }, - { - "id": 4920, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4902, - "src": "2702:7:36", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 4923, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 4921, - "name": "oldAllowance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4908, - "src": "2711:12:36", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "+", - "rightExpression": { - "id": 4922, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4904, - "src": "2726:5:36", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "2711:20:36", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_IERC20_$4796", - "typeString": "contract IERC20" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 4918, - "name": "forceApprove", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5017, - "src": "2682:12:36", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$4796_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (contract IERC20,address,uint256)" - } - }, - "id": 4924, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2682:50:36", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 4925, - "nodeType": "ExpressionStatement", - "src": "2682:50:36" - } - ] - }, - "documentation": { - "id": 4897, - "nodeType": "StructuredDocumentation", - "src": "1864:645:36", - "text": " @dev Increase the calling contract's allowance toward `spender` by `value`. If `token` returns no value,\n non-reverting calls are assumed to be successful.\n IMPORTANT: If the token implements ERC-7674 (ERC-20 with temporary allowance), and if the \"client\"\n smart contract uses ERC-7674 to set temporary allowances, then the \"client\" smart contract should avoid using\n this function. Performing a {safeIncreaseAllowance} or {safeDecreaseAllowance} operation on a token contract\n that has a non-zero temporary allowance (for that particular owner-spender) will result in unexpected behavior." - }, - "id": 4927, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "safeIncreaseAllowance", - "nameLocation": "2523:21:36", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 4905, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4900, - "mutability": "mutable", - "name": "token", - "nameLocation": "2552:5:36", - "nodeType": "VariableDeclaration", - "scope": 4927, - "src": "2545:12:36", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$4796", - "typeString": "contract IERC20" - }, - "typeName": { - "id": 4899, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 4898, - "name": "IERC20", - "nameLocations": ["2545:6:36"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 4796, - "src": "2545:6:36" - }, - "referencedDeclaration": 4796, - "src": "2545:6:36", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$4796", - "typeString": "contract IERC20" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 4902, - "mutability": "mutable", - "name": "spender", - "nameLocation": "2567:7:36", - "nodeType": "VariableDeclaration", - "scope": 4927, - "src": "2559:15:36", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4901, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2559:7:36", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 4904, - "mutability": "mutable", - "name": "value", - "nameLocation": "2584:5:36", - "nodeType": "VariableDeclaration", - "scope": 4927, - "src": "2576:13:36", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 4903, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2576:7:36", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "2544:46:36" - }, - "returnParameters": { - "id": 4906, - "nodeType": "ParameterList", - "parameters": [], - "src": "2600:0:36" - }, - "scope": 5233, - "src": "2514:225:36", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 4969, - "nodeType": "Block", - "src": "3505:370:36", - "statements": [ - { - "id": 4968, - "nodeType": "UncheckedBlock", - "src": "3515:354:36", - "statements": [ - { - "assignments": [4939], - "declarations": [ - { - "constant": false, - "id": 4939, - "mutability": "mutable", - "name": "currentAllowance", - "nameLocation": "3547:16:36", - "nodeType": "VariableDeclaration", - "scope": 4968, - "src": "3539:24:36", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 4938, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3539:7:36", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 4948, - "initialValue": { - "arguments": [ - { - "arguments": [ - { - "id": 4944, - "name": "this", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967268, - "src": "3590:4:36", - "typeDescriptions": { - "typeIdentifier": "t_contract$_SafeERC20_$5233", - "typeString": "library SafeERC20" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_SafeERC20_$5233", - "typeString": "library SafeERC20" - } - ], - "id": 4943, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "3582:7:36", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 4942, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3582:7:36", - "typeDescriptions": {} - } - }, - "id": 4945, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3582:13:36", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 4946, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4933, - "src": "3597:7:36", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 4940, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4931, - "src": "3566:5:36", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$4796", - "typeString": "contract IERC20" - } - }, - "id": 4941, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3572:9:36", - "memberName": "allowance", - "nodeType": "MemberAccess", - "referencedDeclaration": 4773, - "src": "3566:15:36", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$", - "typeString": "function (address,address) view external returns (uint256)" - } - }, - "id": 4947, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3566:39:36", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "3539:66:36" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 4951, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 4949, - "name": "currentAllowance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4939, - "src": "3623:16:36", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "id": 4950, - "name": "requestedDecrease", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4935, - "src": "3642:17:36", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "3623:36:36", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 4959, - "nodeType": "IfStatement", - "src": "3619:160:36", - "trueBody": { - "id": 4958, - "nodeType": "Block", - "src": "3661:118:36", - "statements": [ - { - "errorCall": { - "arguments": [ - { - "id": 4953, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4933, - "src": "3719:7:36", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 4954, - "name": "currentAllowance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4939, - "src": "3728:16:36", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 4955, - "name": "requestedDecrease", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4935, - "src": "3746:17:36", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 4952, - "name": "SafeERC20FailedDecreaseAllowance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4845, - "src": "3686:32:36", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$_t_address_$_t_uint256_$_t_uint256_$returns$__$", - "typeString": "function (address,uint256,uint256) pure" - } - }, - "id": 4956, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3686:78:36", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 4957, - "nodeType": "RevertStatement", - "src": "3679:85:36" - } - ] - } - }, - { - "expression": { - "arguments": [ - { - "id": 4961, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4931, - "src": "3805:5:36", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$4796", - "typeString": "contract IERC20" - } - }, - { - "id": 4962, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4933, - "src": "3812:7:36", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 4965, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 4963, - "name": "currentAllowance", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4939, - "src": "3821:16:36", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "-", - "rightExpression": { - "id": 4964, - "name": "requestedDecrease", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4935, - "src": "3840:17:36", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "3821:36:36", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_IERC20_$4796", - "typeString": "contract IERC20" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 4960, - "name": "forceApprove", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5017, - "src": "3792:12:36", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$4796_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (contract IERC20,address,uint256)" - } - }, - "id": 4966, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3792:66:36", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 4967, - "nodeType": "ExpressionStatement", - "src": "3792:66:36" - } - ] - } - ] - }, - "documentation": { - "id": 4928, - "nodeType": "StructuredDocumentation", - "src": "2745:657:36", - "text": " @dev Decrease the calling contract's allowance toward `spender` by `requestedDecrease`. If `token` returns no\n value, non-reverting calls are assumed to be successful.\n IMPORTANT: If the token implements ERC-7674 (ERC-20 with temporary allowance), and if the \"client\"\n smart contract uses ERC-7674 to set temporary allowances, then the \"client\" smart contract should avoid using\n this function. Performing a {safeIncreaseAllowance} or {safeDecreaseAllowance} operation on a token contract\n that has a non-zero temporary allowance (for that particular owner-spender) will result in unexpected behavior." - }, - "id": 4970, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "safeDecreaseAllowance", - "nameLocation": "3416:21:36", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 4936, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4931, - "mutability": "mutable", - "name": "token", - "nameLocation": "3445:5:36", - "nodeType": "VariableDeclaration", - "scope": 4970, - "src": "3438:12:36", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$4796", - "typeString": "contract IERC20" - }, - "typeName": { - "id": 4930, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 4929, - "name": "IERC20", - "nameLocations": ["3438:6:36"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 4796, - "src": "3438:6:36" - }, - "referencedDeclaration": 4796, - "src": "3438:6:36", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$4796", - "typeString": "contract IERC20" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 4933, - "mutability": "mutable", - "name": "spender", - "nameLocation": "3460:7:36", - "nodeType": "VariableDeclaration", - "scope": 4970, - "src": "3452:15:36", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4932, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3452:7:36", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 4935, - "mutability": "mutable", - "name": "requestedDecrease", - "nameLocation": "3477:17:36", - "nodeType": "VariableDeclaration", - "scope": 4970, - "src": "3469:25:36", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 4934, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3469:7:36", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "3437:58:36" - }, - "returnParameters": { - "id": 4937, - "nodeType": "ParameterList", - "parameters": [], - "src": "3505:0:36" - }, - "scope": 5233, - "src": "3407:468:36", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 5016, - "nodeType": "Block", - "src": "4529:303:36", - "statements": [ - { - "assignments": [4982], - "declarations": [ - { - "constant": false, - "id": 4982, - "mutability": "mutable", - "name": "approvalCall", - "nameLocation": "4552:12:36", - "nodeType": "VariableDeclaration", - "scope": 5016, - "src": "4539:25:36", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 4981, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "4539:5:36", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "id": 4991, - "initialValue": { - "arguments": [ - { - "expression": { - "id": 4985, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4974, - "src": "4582:5:36", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$4796", - "typeString": "contract IERC20" - } - }, - "id": 4986, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "4588:7:36", - "memberName": "approve", - "nodeType": "MemberAccess", - "referencedDeclaration": 4783, - "src": "4582:13:36", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", - "typeString": "function (address,uint256) external returns (bool)" - } - }, - { - "components": [ - { - "id": 4987, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4976, - "src": "4598:7:36", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 4988, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4978, - "src": "4607:5:36", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 4989, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "4597:16:36", - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_address_$_t_uint256_$", - "typeString": "tuple(address,uint256)" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", - "typeString": "function (address,uint256) external returns (bool)" - }, - { - "typeIdentifier": "t_tuple$_t_address_$_t_uint256_$", - "typeString": "tuple(address,uint256)" - } - ], - "expression": { - "id": 4983, - "name": "abi", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967295, - "src": "4567:3:36", - "typeDescriptions": { - "typeIdentifier": "t_magic_abi", - "typeString": "abi" - } - }, - "id": 4984, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "4571:10:36", - "memberName": "encodeCall", - "nodeType": "MemberAccess", - "src": "4567:14:36", - "typeDescriptions": { - "typeIdentifier": "t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$", - "typeString": "function () pure returns (bytes memory)" - } - }, - "id": 4990, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4567:47:36", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "4539:75:36" - }, - { - "condition": { - "id": 4996, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "!", - "prefix": true, - "src": "4629:45:36", - "subExpression": { - "arguments": [ - { - "id": 4993, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4974, - "src": "4654:5:36", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$4796", - "typeString": "contract IERC20" - } - }, - { - "id": 4994, - "name": "approvalCall", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4982, - "src": "4661:12:36", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_IERC20_$4796", - "typeString": "contract IERC20" - }, - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "id": 4992, - "name": "_callOptionalReturnBool", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5232, - "src": "4630:23:36", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$4796_$_t_bytes_memory_ptr_$returns$_t_bool_$", - "typeString": "function (contract IERC20,bytes memory) returns (bool)" - } - }, - "id": 4995, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4630:44:36", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 5015, - "nodeType": "IfStatement", - "src": "4625:201:36", - "trueBody": { - "id": 5014, - "nodeType": "Block", - "src": "4676:150:36", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 4998, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4974, - "src": "4710:5:36", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$4796", - "typeString": "contract IERC20" - } - }, - { - "arguments": [ - { - "expression": { - "id": 5001, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4974, - "src": "4732:5:36", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$4796", - "typeString": "contract IERC20" - } - }, - "id": 5002, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "4738:7:36", - "memberName": "approve", - "nodeType": "MemberAccess", - "referencedDeclaration": 4783, - "src": "4732:13:36", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", - "typeString": "function (address,uint256) external returns (bool)" - } - }, - { - "components": [ - { - "id": 5003, - "name": "spender", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4976, - "src": "4748:7:36", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "hexValue": "30", - "id": 5004, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "4757:1:36", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "id": 5005, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "4747:12:36", - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_address_$_t_rational_0_by_1_$", - "typeString": "tuple(address,int_const 0)" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", - "typeString": "function (address,uint256) external returns (bool)" - }, - { - "typeIdentifier": "t_tuple$_t_address_$_t_rational_0_by_1_$", - "typeString": "tuple(address,int_const 0)" - } - ], - "expression": { - "id": 4999, - "name": "abi", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967295, - "src": "4717:3:36", - "typeDescriptions": { - "typeIdentifier": "t_magic_abi", - "typeString": "abi" - } - }, - "id": 5000, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "4721:10:36", - "memberName": "encodeCall", - "nodeType": "MemberAccess", - "src": "4717:14:36", - "typeDescriptions": { - "typeIdentifier": "t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$", - "typeString": "function () pure returns (bytes memory)" - } - }, - "id": 5006, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4717:43:36", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_IERC20_$4796", - "typeString": "contract IERC20" - }, - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "id": 4997, - "name": "_callOptionalReturn", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5191, - "src": "4690:19:36", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$4796_$_t_bytes_memory_ptr_$returns$__$", - "typeString": "function (contract IERC20,bytes memory)" - } - }, - "id": 5007, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4690:71:36", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 5008, - "nodeType": "ExpressionStatement", - "src": "4690:71:36" - }, - { - "expression": { - "arguments": [ - { - "id": 5010, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4974, - "src": "4795:5:36", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$4796", - "typeString": "contract IERC20" - } - }, - { - "id": 5011, - "name": "approvalCall", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4982, - "src": "4802:12:36", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_IERC20_$4796", - "typeString": "contract IERC20" - }, - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "id": 5009, - "name": "_callOptionalReturn", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5191, - "src": "4775:19:36", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$4796_$_t_bytes_memory_ptr_$returns$__$", - "typeString": "function (contract IERC20,bytes memory)" - } - }, - "id": 5012, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4775:40:36", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 5013, - "nodeType": "ExpressionStatement", - "src": "4775:40:36" - } - ] - } - } - ] - }, - "documentation": { - "id": 4971, - "nodeType": "StructuredDocumentation", - "src": "3881:566:36", - "text": " @dev Set the calling contract's allowance toward `spender` to `value`. If `token` returns no value,\n non-reverting calls are assumed to be successful. Meant to be used with tokens that require the approval\n to be set to zero before setting it to a non-zero value, such as USDT.\n NOTE: If the token implements ERC-7674, this function will not modify any temporary allowance. This function\n only sets the \"standard\" allowance. Any temporary allowance will remain active, in addition to the value being\n set here." - }, - "id": 5017, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "forceApprove", - "nameLocation": "4461:12:36", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 4979, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 4974, - "mutability": "mutable", - "name": "token", - "nameLocation": "4481:5:36", - "nodeType": "VariableDeclaration", - "scope": 5017, - "src": "4474:12:36", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$4796", - "typeString": "contract IERC20" - }, - "typeName": { - "id": 4973, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 4972, - "name": "IERC20", - "nameLocations": ["4474:6:36"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 4796, - "src": "4474:6:36" - }, - "referencedDeclaration": 4796, - "src": "4474:6:36", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$4796", - "typeString": "contract IERC20" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 4976, - "mutability": "mutable", - "name": "spender", - "nameLocation": "4496:7:36", - "nodeType": "VariableDeclaration", - "scope": 5017, - "src": "4488:15:36", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 4975, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4488:7:36", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 4978, - "mutability": "mutable", - "name": "value", - "nameLocation": "4513:5:36", - "nodeType": "VariableDeclaration", - "scope": 5017, - "src": "4505:13:36", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 4977, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4505:7:36", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "4473:46:36" - }, - "returnParameters": { - "id": 4980, - "nodeType": "ParameterList", - "parameters": [], - "src": "4529:0:36" - }, - "scope": 5233, - "src": "4452:380:36", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 5059, - "nodeType": "Block", - "src": "5279:219:36", - "statements": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 5034, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "expression": { - "id": 5030, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5023, - "src": "5293:2:36", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 5031, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "5296:4:36", - "memberName": "code", - "nodeType": "MemberAccess", - "src": "5293:7:36", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - "id": 5032, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "5301:6:36", - "memberName": "length", - "nodeType": "MemberAccess", - "src": "5293:14:36", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "hexValue": "30", - "id": 5033, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "5311:1:36", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "5293:19:36", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": { - "condition": { - "id": 5048, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "!", - "prefix": true, - "src": "5379:39:36", - "subExpression": { - "arguments": [ - { - "id": 5044, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5023, - "src": "5402:2:36", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 5045, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5025, - "src": "5406:5:36", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 5046, - "name": "data", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5027, - "src": "5413:4:36", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "expression": { - "id": 5042, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5021, - "src": "5380:5:36", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC1363_$4058", - "typeString": "contract IERC1363" - } - }, - "id": 5043, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "5386:15:36", - "memberName": "transferAndCall", - "nodeType": "MemberAccess", - "referencedDeclaration": 4009, - "src": "5380:21:36", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bool_$", - "typeString": "function (address,uint256,bytes memory) external returns (bool)" - } - }, - "id": 5047, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5380:38:36", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 5057, - "nodeType": "IfStatement", - "src": "5375:117:36", - "trueBody": { - "id": 5056, - "nodeType": "Block", - "src": "5420:72:36", - "statements": [ - { - "errorCall": { - "arguments": [ - { - "arguments": [ - { - "id": 5052, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5021, - "src": "5474:5:36", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC1363_$4058", - "typeString": "contract IERC1363" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_IERC1363_$4058", - "typeString": "contract IERC1363" - } - ], - "id": 5051, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "5466:7:36", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 5050, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5466:7:36", - "typeDescriptions": {} - } - }, - "id": 5053, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5466:14:36", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 5049, - "name": "SafeERC20FailedOperation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4836, - "src": "5441:24:36", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$_t_address_$returns$__$", - "typeString": "function (address) pure" - } - }, - "id": 5054, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5441:40:36", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 5055, - "nodeType": "RevertStatement", - "src": "5434:47:36" - } - ] - } - }, - "id": 5058, - "nodeType": "IfStatement", - "src": "5289:203:36", - "trueBody": { - "id": 5041, - "nodeType": "Block", - "src": "5314:55:36", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 5036, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5021, - "src": "5341:5:36", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC1363_$4058", - "typeString": "contract IERC1363" - } - }, - { - "id": 5037, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5023, - "src": "5348:2:36", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 5038, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5025, - "src": "5352:5:36", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_IERC1363_$4058", - "typeString": "contract IERC1363" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 5035, - "name": "safeTransfer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4869, - "src": "5328:12:36", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$4796_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (contract IERC20,address,uint256)" - } - }, - "id": 5039, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5328:30:36", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 5040, - "nodeType": "ExpressionStatement", - "src": "5328:30:36" - } - ] - } - } - ] - }, - "documentation": { - "id": 5018, - "nodeType": "StructuredDocumentation", - "src": "4838:333:36", - "text": " @dev Performs an {ERC1363} transferAndCall, with a fallback to the simple {ERC20} transfer if the target has no\n code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\n targeting contracts.\n Reverts if the returned value is other than `true`." - }, - "id": 5060, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "transferAndCallRelaxed", - "nameLocation": "5185:22:36", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 5028, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 5021, - "mutability": "mutable", - "name": "token", - "nameLocation": "5217:5:36", - "nodeType": "VariableDeclaration", - "scope": 5060, - "src": "5208:14:36", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC1363_$4058", - "typeString": "contract IERC1363" - }, - "typeName": { - "id": 5020, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 5019, - "name": "IERC1363", - "nameLocations": ["5208:8:36"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 4058, - "src": "5208:8:36" - }, - "referencedDeclaration": 4058, - "src": "5208:8:36", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC1363_$4058", - "typeString": "contract IERC1363" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5023, - "mutability": "mutable", - "name": "to", - "nameLocation": "5232:2:36", - "nodeType": "VariableDeclaration", - "scope": 5060, - "src": "5224:10:36", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 5022, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5224:7:36", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5025, - "mutability": "mutable", - "name": "value", - "nameLocation": "5244:5:36", - "nodeType": "VariableDeclaration", - "scope": 5060, - "src": "5236:13:36", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 5024, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "5236:7:36", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5027, - "mutability": "mutable", - "name": "data", - "nameLocation": "5264:4:36", - "nodeType": "VariableDeclaration", - "scope": 5060, - "src": "5251:17:36", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 5026, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "5251:5:36", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "5207:62:36" - }, - "returnParameters": { - "id": 5029, - "nodeType": "ParameterList", - "parameters": [], - "src": "5279:0:36" - }, - "scope": 5233, - "src": "5176:322:36", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 5106, - "nodeType": "Block", - "src": "6017:239:36", - "statements": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 5079, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "expression": { - "id": 5075, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5068, - "src": "6031:2:36", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 5076, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "6034:4:36", - "memberName": "code", - "nodeType": "MemberAccess", - "src": "6031:7:36", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - "id": 5077, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "6039:6:36", - "memberName": "length", - "nodeType": "MemberAccess", - "src": "6031:14:36", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "hexValue": "30", - "id": 5078, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "6049:1:36", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "6031:19:36", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": { - "condition": { - "id": 5095, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "!", - "prefix": true, - "src": "6127:49:36", - "subExpression": { - "arguments": [ - { - "id": 5090, - "name": "from", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5066, - "src": "6154:4:36", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 5091, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5068, - "src": "6160:2:36", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 5092, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5070, - "src": "6164:5:36", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 5093, - "name": "data", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5072, - "src": "6171:4:36", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "expression": { - "id": 5088, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5064, - "src": "6128:5:36", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC1363_$4058", - "typeString": "contract IERC1363" - } - }, - "id": 5089, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "6134:19:36", - "memberName": "transferFromAndCall", - "nodeType": "MemberAccess", - "referencedDeclaration": 4035, - "src": "6128:25:36", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bool_$", - "typeString": "function (address,address,uint256,bytes memory) external returns (bool)" - } - }, - "id": 5094, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6128:48:36", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 5104, - "nodeType": "IfStatement", - "src": "6123:127:36", - "trueBody": { - "id": 5103, - "nodeType": "Block", - "src": "6178:72:36", - "statements": [ - { - "errorCall": { - "arguments": [ - { - "arguments": [ - { - "id": 5099, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5064, - "src": "6232:5:36", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC1363_$4058", - "typeString": "contract IERC1363" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_IERC1363_$4058", - "typeString": "contract IERC1363" - } - ], - "id": 5098, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "6224:7:36", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 5097, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "6224:7:36", - "typeDescriptions": {} - } - }, - "id": 5100, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6224:14:36", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 5096, - "name": "SafeERC20FailedOperation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4836, - "src": "6199:24:36", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$_t_address_$returns$__$", - "typeString": "function (address) pure" - } - }, - "id": 5101, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6199:40:36", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 5102, - "nodeType": "RevertStatement", - "src": "6192:47:36" - } - ] - } - }, - "id": 5105, - "nodeType": "IfStatement", - "src": "6027:223:36", - "trueBody": { - "id": 5087, - "nodeType": "Block", - "src": "6052:65:36", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 5081, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5064, - "src": "6083:5:36", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC1363_$4058", - "typeString": "contract IERC1363" - } - }, - { - "id": 5082, - "name": "from", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5066, - "src": "6090:4:36", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 5083, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5068, - "src": "6096:2:36", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 5084, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5070, - "src": "6100:5:36", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_IERC1363_$4058", - "typeString": "contract IERC1363" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 5080, - "name": "safeTransferFrom", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4896, - "src": "6066:16:36", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$4796_$_t_address_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (contract IERC20,address,address,uint256)" - } - }, - "id": 5085, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6066:40:36", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 5086, - "nodeType": "ExpressionStatement", - "src": "6066:40:36" - } - ] - } - } - ] - }, - "documentation": { - "id": 5061, - "nodeType": "StructuredDocumentation", - "src": "5504:341:36", - "text": " @dev Performs an {ERC1363} transferFromAndCall, with a fallback to the simple {ERC20} transferFrom if the target\n has no code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\n targeting contracts.\n Reverts if the returned value is other than `true`." - }, - "id": 5107, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "transferFromAndCallRelaxed", - "nameLocation": "5859:26:36", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 5073, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 5064, - "mutability": "mutable", - "name": "token", - "nameLocation": "5904:5:36", - "nodeType": "VariableDeclaration", - "scope": 5107, - "src": "5895:14:36", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC1363_$4058", - "typeString": "contract IERC1363" - }, - "typeName": { - "id": 5063, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 5062, - "name": "IERC1363", - "nameLocations": ["5895:8:36"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 4058, - "src": "5895:8:36" - }, - "referencedDeclaration": 4058, - "src": "5895:8:36", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC1363_$4058", - "typeString": "contract IERC1363" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5066, - "mutability": "mutable", - "name": "from", - "nameLocation": "5927:4:36", - "nodeType": "VariableDeclaration", - "scope": 5107, - "src": "5919:12:36", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 5065, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5919:7:36", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5068, - "mutability": "mutable", - "name": "to", - "nameLocation": "5949:2:36", - "nodeType": "VariableDeclaration", - "scope": 5107, - "src": "5941:10:36", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 5067, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5941:7:36", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5070, - "mutability": "mutable", - "name": "value", - "nameLocation": "5969:5:36", - "nodeType": "VariableDeclaration", - "scope": 5107, - "src": "5961:13:36", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 5069, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "5961:7:36", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5072, - "mutability": "mutable", - "name": "data", - "nameLocation": "5997:4:36", - "nodeType": "VariableDeclaration", - "scope": 5107, - "src": "5984:17:36", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 5071, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "5984:5:36", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "5885:122:36" - }, - "returnParameters": { - "id": 5074, - "nodeType": "ParameterList", - "parameters": [], - "src": "6017:0:36" - }, - "scope": 5233, - "src": "5850:406:36", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 5149, - "nodeType": "Block", - "src": "7023:218:36", - "statements": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 5124, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "expression": { - "id": 5120, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5113, - "src": "7037:2:36", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 5121, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "7040:4:36", - "memberName": "code", - "nodeType": "MemberAccess", - "src": "7037:7:36", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - "id": 5122, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "7045:6:36", - "memberName": "length", - "nodeType": "MemberAccess", - "src": "7037:14:36", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "hexValue": "30", - "id": 5123, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "7055:1:36", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "7037:19:36", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": { - "condition": { - "id": 5138, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "!", - "prefix": true, - "src": "7123:38:36", - "subExpression": { - "arguments": [ - { - "id": 5134, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5113, - "src": "7145:2:36", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 5135, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5115, - "src": "7149:5:36", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 5136, - "name": "data", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5117, - "src": "7156:4:36", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "expression": { - "id": 5132, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5111, - "src": "7124:5:36", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC1363_$4058", - "typeString": "contract IERC1363" - } - }, - "id": 5133, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "7130:14:36", - "memberName": "approveAndCall", - "nodeType": "MemberAccess", - "referencedDeclaration": 4057, - "src": "7124:20:36", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bool_$", - "typeString": "function (address,uint256,bytes memory) external returns (bool)" - } - }, - "id": 5137, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7124:37:36", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 5147, - "nodeType": "IfStatement", - "src": "7119:116:36", - "trueBody": { - "id": 5146, - "nodeType": "Block", - "src": "7163:72:36", - "statements": [ - { - "errorCall": { - "arguments": [ - { - "arguments": [ - { - "id": 5142, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5111, - "src": "7217:5:36", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC1363_$4058", - "typeString": "contract IERC1363" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_IERC1363_$4058", - "typeString": "contract IERC1363" - } - ], - "id": 5141, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "7209:7:36", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 5140, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "7209:7:36", - "typeDescriptions": {} - } - }, - "id": 5143, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7209:14:36", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 5139, - "name": "SafeERC20FailedOperation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4836, - "src": "7184:24:36", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$_t_address_$returns$__$", - "typeString": "function (address) pure" - } - }, - "id": 5144, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7184:40:36", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 5145, - "nodeType": "RevertStatement", - "src": "7177:47:36" - } - ] - } - }, - "id": 5148, - "nodeType": "IfStatement", - "src": "7033:202:36", - "trueBody": { - "id": 5131, - "nodeType": "Block", - "src": "7058:55:36", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 5126, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5111, - "src": "7085:5:36", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC1363_$4058", - "typeString": "contract IERC1363" - } - }, - { - "id": 5127, - "name": "to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5113, - "src": "7092:2:36", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 5128, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5115, - "src": "7096:5:36", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_IERC1363_$4058", - "typeString": "contract IERC1363" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 5125, - "name": "forceApprove", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5017, - "src": "7072:12:36", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$4796_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (contract IERC20,address,uint256)" - } - }, - "id": 5129, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7072:30:36", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 5130, - "nodeType": "ExpressionStatement", - "src": "7072:30:36" - } - ] - } - } - ] - }, - "documentation": { - "id": 5108, - "nodeType": "StructuredDocumentation", - "src": "6262:654:36", - "text": " @dev Performs an {ERC1363} approveAndCall, with a fallback to the simple {ERC20} approve if the target has no\n code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\n targeting contracts.\n NOTE: When the recipient address (`to`) has no code (i.e. is an EOA), this function behaves as {forceApprove}.\n Opposedly, when the recipient address (`to`) has code, this function only attempts to call {ERC1363-approveAndCall}\n once without retrying, and relies on the returned value to be true.\n Reverts if the returned value is other than `true`." - }, - "id": 5150, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "approveAndCallRelaxed", - "nameLocation": "6930:21:36", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 5118, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 5111, - "mutability": "mutable", - "name": "token", - "nameLocation": "6961:5:36", - "nodeType": "VariableDeclaration", - "scope": 5150, - "src": "6952:14:36", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC1363_$4058", - "typeString": "contract IERC1363" - }, - "typeName": { - "id": 5110, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 5109, - "name": "IERC1363", - "nameLocations": ["6952:8:36"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 4058, - "src": "6952:8:36" - }, - "referencedDeclaration": 4058, - "src": "6952:8:36", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC1363_$4058", - "typeString": "contract IERC1363" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5113, - "mutability": "mutable", - "name": "to", - "nameLocation": "6976:2:36", - "nodeType": "VariableDeclaration", - "scope": 5150, - "src": "6968:10:36", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 5112, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "6968:7:36", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5115, - "mutability": "mutable", - "name": "value", - "nameLocation": "6988:5:36", - "nodeType": "VariableDeclaration", - "scope": 5150, - "src": "6980:13:36", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 5114, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "6980:7:36", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5117, - "mutability": "mutable", - "name": "data", - "nameLocation": "7008:4:36", - "nodeType": "VariableDeclaration", - "scope": 5150, - "src": "6995:17:36", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 5116, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "6995:5:36", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "6951:62:36" - }, - "returnParameters": { - "id": 5119, - "nodeType": "ParameterList", - "parameters": [], - "src": "7023:0:36" - }, - "scope": 5233, - "src": "6921:320:36", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 5190, - "nodeType": "Block", - "src": "7808:650:36", - "statements": [ - { - "assignments": [5160], - "declarations": [ - { - "constant": false, - "id": 5160, - "mutability": "mutable", - "name": "returnSize", - "nameLocation": "7826:10:36", - "nodeType": "VariableDeclaration", - "scope": 5190, - "src": "7818:18:36", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 5159, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "7818:7:36", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 5161, - "nodeType": "VariableDeclarationStatement", - "src": "7818:18:36" - }, - { - "assignments": [5163], - "declarations": [ - { - "constant": false, - "id": 5163, - "mutability": "mutable", - "name": "returnValue", - "nameLocation": "7854:11:36", - "nodeType": "VariableDeclaration", - "scope": 5190, - "src": "7846:19:36", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 5162, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "7846:7:36", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 5164, - "nodeType": "VariableDeclarationStatement", - "src": "7846:19:36" - }, - { - "AST": { - "nativeSrc": "7900:396:36", - "nodeType": "YulBlock", - "src": "7900:396:36", - "statements": [ - { - "nativeSrc": "7914:75:36", - "nodeType": "YulVariableDeclaration", - "src": "7914:75:36", - "value": { - "arguments": [ - { - "arguments": [], - "functionName": { - "name": "gas", - "nativeSrc": "7934:3:36", - "nodeType": "YulIdentifier", - "src": "7934:3:36" - }, - "nativeSrc": "7934:5:36", - "nodeType": "YulFunctionCall", - "src": "7934:5:36" - }, - { - "name": "token", - "nativeSrc": "7941:5:36", - "nodeType": "YulIdentifier", - "src": "7941:5:36" - }, - { - "kind": "number", - "nativeSrc": "7948:1:36", - "nodeType": "YulLiteral", - "src": "7948:1:36", - "type": "", - "value": "0" - }, - { - "arguments": [ - { - "name": "data", - "nativeSrc": "7955:4:36", - "nodeType": "YulIdentifier", - "src": "7955:4:36" - }, - { - "kind": "number", - "nativeSrc": "7961:4:36", - "nodeType": "YulLiteral", - "src": "7961:4:36", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "7951:3:36", - "nodeType": "YulIdentifier", - "src": "7951:3:36" - }, - "nativeSrc": "7951:15:36", - "nodeType": "YulFunctionCall", - "src": "7951:15:36" - }, - { - "arguments": [ - { - "name": "data", - "nativeSrc": "7974:4:36", - "nodeType": "YulIdentifier", - "src": "7974:4:36" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "7968:5:36", - "nodeType": "YulIdentifier", - "src": "7968:5:36" - }, - "nativeSrc": "7968:11:36", - "nodeType": "YulFunctionCall", - "src": "7968:11:36" - }, - { - "kind": "number", - "nativeSrc": "7981:1:36", - "nodeType": "YulLiteral", - "src": "7981:1:36", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "7984:4:36", - "nodeType": "YulLiteral", - "src": "7984:4:36", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "call", - "nativeSrc": "7929:4:36", - "nodeType": "YulIdentifier", - "src": "7929:4:36" - }, - "nativeSrc": "7929:60:36", - "nodeType": "YulFunctionCall", - "src": "7929:60:36" - }, - "variables": [ - { - "name": "success", - "nativeSrc": "7918:7:36", - "nodeType": "YulTypedName", - "src": "7918:7:36", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "8050:157:36", - "nodeType": "YulBlock", - "src": "8050:157:36", - "statements": [ - { - "nativeSrc": "8068:22:36", - "nodeType": "YulVariableDeclaration", - "src": "8068:22:36", - "value": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "8085:4:36", - "nodeType": "YulLiteral", - "src": "8085:4:36", - "type": "", - "value": "0x40" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "8079:5:36", - "nodeType": "YulIdentifier", - "src": "8079:5:36" - }, - "nativeSrc": "8079:11:36", - "nodeType": "YulFunctionCall", - "src": "8079:11:36" - }, - "variables": [ - { - "name": "ptr", - "nativeSrc": "8072:3:36", - "nodeType": "YulTypedName", - "src": "8072:3:36", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "ptr", - "nativeSrc": "8122:3:36", - "nodeType": "YulIdentifier", - "src": "8122:3:36" - }, - { - "kind": "number", - "nativeSrc": "8127:1:36", - "nodeType": "YulLiteral", - "src": "8127:1:36", - "type": "", - "value": "0" - }, - { - "arguments": [], - "functionName": { - "name": "returndatasize", - "nativeSrc": "8130:14:36", - "nodeType": "YulIdentifier", - "src": "8130:14:36" - }, - "nativeSrc": "8130:16:36", - "nodeType": "YulFunctionCall", - "src": "8130:16:36" - } - ], - "functionName": { - "name": "returndatacopy", - "nativeSrc": "8107:14:36", - "nodeType": "YulIdentifier", - "src": "8107:14:36" - }, - "nativeSrc": "8107:40:36", - "nodeType": "YulFunctionCall", - "src": "8107:40:36" - }, - "nativeSrc": "8107:40:36", - "nodeType": "YulExpressionStatement", - "src": "8107:40:36" - }, - { - "expression": { - "arguments": [ - { - "name": "ptr", - "nativeSrc": "8171:3:36", - "nodeType": "YulIdentifier", - "src": "8171:3:36" - }, - { - "arguments": [], - "functionName": { - "name": "returndatasize", - "nativeSrc": "8176:14:36", - "nodeType": "YulIdentifier", - "src": "8176:14:36" - }, - "nativeSrc": "8176:16:36", - "nodeType": "YulFunctionCall", - "src": "8176:16:36" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "8164:6:36", - "nodeType": "YulIdentifier", - "src": "8164:6:36" - }, - "nativeSrc": "8164:29:36", - "nodeType": "YulFunctionCall", - "src": "8164:29:36" - }, - "nativeSrc": "8164:29:36", - "nodeType": "YulExpressionStatement", - "src": "8164:29:36" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "success", - "nativeSrc": "8041:7:36", - "nodeType": "YulIdentifier", - "src": "8041:7:36" - } - ], - "functionName": { - "name": "iszero", - "nativeSrc": "8034:6:36", - "nodeType": "YulIdentifier", - "src": "8034:6:36" - }, - "nativeSrc": "8034:15:36", - "nodeType": "YulFunctionCall", - "src": "8034:15:36" - }, - "nativeSrc": "8031:176:36", - "nodeType": "YulIf", - "src": "8031:176:36" - }, - { - "nativeSrc": "8220:30:36", - "nodeType": "YulAssignment", - "src": "8220:30:36", - "value": { - "arguments": [], - "functionName": { - "name": "returndatasize", - "nativeSrc": "8234:14:36", - "nodeType": "YulIdentifier", - "src": "8234:14:36" - }, - "nativeSrc": "8234:16:36", - "nodeType": "YulFunctionCall", - "src": "8234:16:36" - }, - "variableNames": [ - { - "name": "returnSize", - "nativeSrc": "8220:10:36", - "nodeType": "YulIdentifier", - "src": "8220:10:36" - } - ] - }, - { - "nativeSrc": "8263:23:36", - "nodeType": "YulAssignment", - "src": "8263:23:36", - "value": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "8284:1:36", - "nodeType": "YulLiteral", - "src": "8284:1:36", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "8278:5:36", - "nodeType": "YulIdentifier", - "src": "8278:5:36" - }, - "nativeSrc": "8278:8:36", - "nodeType": "YulFunctionCall", - "src": "8278:8:36" - }, - "variableNames": [ - { - "name": "returnValue", - "nativeSrc": "8263:11:36", - "nodeType": "YulIdentifier", - "src": "8263:11:36" - } - ] - } - ] - }, - "evmVersion": "paris", - "externalReferences": [ - { - "declaration": 5156, - "isOffset": false, - "isSlot": false, - "src": "7955:4:36", - "valueSize": 1 - }, - { - "declaration": 5156, - "isOffset": false, - "isSlot": false, - "src": "7974:4:36", - "valueSize": 1 - }, - { - "declaration": 5160, - "isOffset": false, - "isSlot": false, - "src": "8220:10:36", - "valueSize": 1 - }, - { - "declaration": 5163, - "isOffset": false, - "isSlot": false, - "src": "8263:11:36", - "valueSize": 1 - }, - { - "declaration": 5154, - "isOffset": false, - "isSlot": false, - "src": "7941:5:36", - "valueSize": 1 - } - ], - "flags": ["memory-safe"], - "id": 5165, - "nodeType": "InlineAssembly", - "src": "7875:421:36" - }, - { - "condition": { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 5168, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 5166, - "name": "returnSize", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5160, - "src": "8310:10:36", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "hexValue": "30", - "id": 5167, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "8324:1:36", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "8310:15:36", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 5179, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 5177, - "name": "returnValue", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5163, - "src": "8362:11:36", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "hexValue": "31", - "id": 5178, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "8377:1:36", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "8362:16:36", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 5180, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "Conditional", - "src": "8310:68:36", - "trueExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 5176, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "expression": { - "arguments": [ - { - "id": 5171, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5154, - "src": "8336:5:36", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$4796", - "typeString": "contract IERC20" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_IERC20_$4796", - "typeString": "contract IERC20" - } - ], - "id": 5170, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "8328:7:36", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 5169, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "8328:7:36", - "typeDescriptions": {} - } - }, - "id": 5172, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "8328:14:36", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 5173, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "8343:4:36", - "memberName": "code", - "nodeType": "MemberAccess", - "src": "8328:19:36", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - "id": 5174, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "8348:6:36", - "memberName": "length", - "nodeType": "MemberAccess", - "src": "8328:26:36", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "hexValue": "30", - "id": 5175, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "8358:1:36", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "8328:31:36", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 5189, - "nodeType": "IfStatement", - "src": "8306:146:36", - "trueBody": { - "id": 5188, - "nodeType": "Block", - "src": "8380:72:36", - "statements": [ - { - "errorCall": { - "arguments": [ - { - "arguments": [ - { - "id": 5184, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5154, - "src": "8434:5:36", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$4796", - "typeString": "contract IERC20" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_IERC20_$4796", - "typeString": "contract IERC20" - } - ], - "id": 5183, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "8426:7:36", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 5182, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "8426:7:36", - "typeDescriptions": {} - } - }, - "id": 5185, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "8426:14:36", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 5181, - "name": "SafeERC20FailedOperation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4836, - "src": "8401:24:36", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$_t_address_$returns$__$", - "typeString": "function (address) pure" - } - }, - "id": 5186, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "8401:40:36", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 5187, - "nodeType": "RevertStatement", - "src": "8394:47:36" - } - ] - } - } - ] - }, - "documentation": { - "id": 5151, - "nodeType": "StructuredDocumentation", - "src": "7247:486:36", - "text": " @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\n on the return value: the return value is optional (but if data is returned, it must not be false).\n @param token The token targeted by the call.\n @param data The call data (encoded using abi.encode or one of its variants).\n This is a variant of {_callOptionalReturnBool} that reverts if call fails to meet the requirements." - }, - "id": 5191, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_callOptionalReturn", - "nameLocation": "7747:19:36", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 5157, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 5154, - "mutability": "mutable", - "name": "token", - "nameLocation": "7774:5:36", - "nodeType": "VariableDeclaration", - "scope": 5191, - "src": "7767:12:36", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$4796", - "typeString": "contract IERC20" - }, - "typeName": { - "id": 5153, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 5152, - "name": "IERC20", - "nameLocations": ["7767:6:36"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 4796, - "src": "7767:6:36" - }, - "referencedDeclaration": 4796, - "src": "7767:6:36", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$4796", - "typeString": "contract IERC20" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5156, - "mutability": "mutable", - "name": "data", - "nameLocation": "7794:4:36", - "nodeType": "VariableDeclaration", - "scope": 5191, - "src": "7781:17:36", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 5155, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "7781:5:36", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "7766:33:36" - }, - "returnParameters": { - "id": 5158, - "nodeType": "ParameterList", - "parameters": [], - "src": "7808:0:36" - }, - "scope": 5233, - "src": "7738:720:36", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "private" - }, - { - "body": { - "id": 5231, - "nodeType": "Block", - "src": "9049:391:36", - "statements": [ - { - "assignments": [5203], - "declarations": [ - { - "constant": false, - "id": 5203, - "mutability": "mutable", - "name": "success", - "nameLocation": "9064:7:36", - "nodeType": "VariableDeclaration", - "scope": 5231, - "src": "9059:12:36", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 5202, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "9059:4:36", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "id": 5204, - "nodeType": "VariableDeclarationStatement", - "src": "9059:12:36" - }, - { - "assignments": [5206], - "declarations": [ - { - "constant": false, - "id": 5206, - "mutability": "mutable", - "name": "returnSize", - "nameLocation": "9089:10:36", - "nodeType": "VariableDeclaration", - "scope": 5231, - "src": "9081:18:36", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 5205, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "9081:7:36", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 5207, - "nodeType": "VariableDeclarationStatement", - "src": "9081:18:36" - }, - { - "assignments": [5209], - "declarations": [ - { - "constant": false, - "id": 5209, - "mutability": "mutable", - "name": "returnValue", - "nameLocation": "9117:11:36", - "nodeType": "VariableDeclaration", - "scope": 5231, - "src": "9109:19:36", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 5208, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "9109:7:36", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 5210, - "nodeType": "VariableDeclarationStatement", - "src": "9109:19:36" - }, - { - "AST": { - "nativeSrc": "9163:174:36", - "nodeType": "YulBlock", - "src": "9163:174:36", - "statements": [ - { - "nativeSrc": "9177:71:36", - "nodeType": "YulAssignment", - "src": "9177:71:36", - "value": { - "arguments": [ - { - "arguments": [], - "functionName": { - "name": "gas", - "nativeSrc": "9193:3:36", - "nodeType": "YulIdentifier", - "src": "9193:3:36" - }, - "nativeSrc": "9193:5:36", - "nodeType": "YulFunctionCall", - "src": "9193:5:36" - }, - { - "name": "token", - "nativeSrc": "9200:5:36", - "nodeType": "YulIdentifier", - "src": "9200:5:36" - }, - { - "kind": "number", - "nativeSrc": "9207:1:36", - "nodeType": "YulLiteral", - "src": "9207:1:36", - "type": "", - "value": "0" - }, - { - "arguments": [ - { - "name": "data", - "nativeSrc": "9214:4:36", - "nodeType": "YulIdentifier", - "src": "9214:4:36" - }, - { - "kind": "number", - "nativeSrc": "9220:4:36", - "nodeType": "YulLiteral", - "src": "9220:4:36", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "9210:3:36", - "nodeType": "YulIdentifier", - "src": "9210:3:36" - }, - "nativeSrc": "9210:15:36", - "nodeType": "YulFunctionCall", - "src": "9210:15:36" - }, - { - "arguments": [ - { - "name": "data", - "nativeSrc": "9233:4:36", - "nodeType": "YulIdentifier", - "src": "9233:4:36" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "9227:5:36", - "nodeType": "YulIdentifier", - "src": "9227:5:36" - }, - "nativeSrc": "9227:11:36", - "nodeType": "YulFunctionCall", - "src": "9227:11:36" - }, - { - "kind": "number", - "nativeSrc": "9240:1:36", - "nodeType": "YulLiteral", - "src": "9240:1:36", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "9243:4:36", - "nodeType": "YulLiteral", - "src": "9243:4:36", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "call", - "nativeSrc": "9188:4:36", - "nodeType": "YulIdentifier", - "src": "9188:4:36" - }, - "nativeSrc": "9188:60:36", - "nodeType": "YulFunctionCall", - "src": "9188:60:36" - }, - "variableNames": [ - { - "name": "success", - "nativeSrc": "9177:7:36", - "nodeType": "YulIdentifier", - "src": "9177:7:36" - } - ] - }, - { - "nativeSrc": "9261:30:36", - "nodeType": "YulAssignment", - "src": "9261:30:36", - "value": { - "arguments": [], - "functionName": { - "name": "returndatasize", - "nativeSrc": "9275:14:36", - "nodeType": "YulIdentifier", - "src": "9275:14:36" - }, - "nativeSrc": "9275:16:36", - "nodeType": "YulFunctionCall", - "src": "9275:16:36" - }, - "variableNames": [ - { - "name": "returnSize", - "nativeSrc": "9261:10:36", - "nodeType": "YulIdentifier", - "src": "9261:10:36" - } - ] - }, - { - "nativeSrc": "9304:23:36", - "nodeType": "YulAssignment", - "src": "9304:23:36", - "value": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "9325:1:36", - "nodeType": "YulLiteral", - "src": "9325:1:36", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "9319:5:36", - "nodeType": "YulIdentifier", - "src": "9319:5:36" - }, - "nativeSrc": "9319:8:36", - "nodeType": "YulFunctionCall", - "src": "9319:8:36" - }, - "variableNames": [ - { - "name": "returnValue", - "nativeSrc": "9304:11:36", - "nodeType": "YulIdentifier", - "src": "9304:11:36" - } - ] - } - ] - }, - "evmVersion": "paris", - "externalReferences": [ - { - "declaration": 5197, - "isOffset": false, - "isSlot": false, - "src": "9214:4:36", - "valueSize": 1 - }, - { - "declaration": 5197, - "isOffset": false, - "isSlot": false, - "src": "9233:4:36", - "valueSize": 1 - }, - { - "declaration": 5206, - "isOffset": false, - "isSlot": false, - "src": "9261:10:36", - "valueSize": 1 - }, - { - "declaration": 5209, - "isOffset": false, - "isSlot": false, - "src": "9304:11:36", - "valueSize": 1 - }, - { - "declaration": 5203, - "isOffset": false, - "isSlot": false, - "src": "9177:7:36", - "valueSize": 1 - }, - { - "declaration": 5195, - "isOffset": false, - "isSlot": false, - "src": "9200:5:36", - "valueSize": 1 - } - ], - "flags": ["memory-safe"], - "id": 5211, - "nodeType": "InlineAssembly", - "src": "9138:199:36" - }, - { - "expression": { - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 5229, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 5212, - "name": "success", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5203, - "src": "9353:7:36", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "&&", - "rightExpression": { - "components": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 5215, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 5213, - "name": "returnSize", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5206, - "src": "9365:10:36", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "hexValue": "30", - "id": 5214, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "9379:1:36", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "9365:15:36", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 5226, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 5224, - "name": "returnValue", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5209, - "src": "9416:11:36", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "hexValue": "31", - "id": 5225, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "9431:1:36", - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "src": "9416:16:36", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 5227, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "Conditional", - "src": "9365:67:36", - "trueExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 5223, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "expression": { - "arguments": [ - { - "id": 5218, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5195, - "src": "9391:5:36", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$4796", - "typeString": "contract IERC20" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_IERC20_$4796", - "typeString": "contract IERC20" - } - ], - "id": 5217, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "9383:7:36", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 5216, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "9383:7:36", - "typeDescriptions": {} - } - }, - "id": 5219, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "9383:14:36", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 5220, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "9398:4:36", - "memberName": "code", - "nodeType": "MemberAccess", - "src": "9383:19:36", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - "id": 5221, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "9403:6:36", - "memberName": "length", - "nodeType": "MemberAccess", - "src": "9383:26:36", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "hexValue": "30", - "id": 5222, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "9412:1:36", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "9383:30:36", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "id": 5228, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "9364:69:36", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "9353:80:36", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "functionReturnParameters": 5201, - "id": 5230, - "nodeType": "Return", - "src": "9346:87:36" - } - ] - }, - "documentation": { - "id": 5192, - "nodeType": "StructuredDocumentation", - "src": "8464:491:36", - "text": " @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\n on the return value: the return value is optional (but if data is returned, it must not be false).\n @param token The token targeted by the call.\n @param data The call data (encoded using abi.encode or one of its variants).\n This is a variant of {_callOptionalReturn} that silently catches all reverts and returns a bool instead." - }, - "id": 5232, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_callOptionalReturnBool", - "nameLocation": "8969:23:36", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 5198, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 5195, - "mutability": "mutable", - "name": "token", - "nameLocation": "9000:5:36", - "nodeType": "VariableDeclaration", - "scope": 5232, - "src": "8993:12:36", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$4796", - "typeString": "contract IERC20" - }, - "typeName": { - "id": 5194, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 5193, - "name": "IERC20", - "nameLocations": ["8993:6:36"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 4796, - "src": "8993:6:36" - }, - "referencedDeclaration": 4796, - "src": "8993:6:36", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$4796", - "typeString": "contract IERC20" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5197, - "mutability": "mutable", - "name": "data", - "nameLocation": "9020:4:36", - "nodeType": "VariableDeclaration", - "scope": 5232, - "src": "9007:17:36", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 5196, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "9007:5:36", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "8992:33:36" - }, - "returnParameters": { - "id": 5201, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 5200, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 5232, - "src": "9043:4:36", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 5199, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "9043:4:36", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "9042:6:36" - }, - "scope": 5233, - "src": "8960:480:36", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "private" - } - ], - "scope": 5234, - "src": "750:8692:36", - "usedErrors": [4836, 4845], - "usedEvents": [] - } - ], - "src": "115:9328:36" - }, - "id": 36 - }, - "@openzeppelin/contracts/utils/Address.sol": { - "ast": { - "absolutePath": "@openzeppelin/contracts/utils/Address.sol", - "exportedSymbols": { "Address": [5492], "Errors": [5544] }, - "id": 5493, - "license": "MIT", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 5235, - "literals": ["solidity", "^", "0.8", ".20"], - "nodeType": "PragmaDirective", - "src": "101:24:37" - }, - { - "absolutePath": "@openzeppelin/contracts/utils/Errors.sol", - "file": "./Errors.sol", - "id": 5237, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 5493, - "sourceUnit": 5545, - "src": "127:36:37", - "symbolAliases": [ - { - "foreign": { - "id": 5236, - "name": "Errors", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5544, - "src": "135:6:37", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "abstract": false, - "baseContracts": [], - "canonicalName": "Address", - "contractDependencies": [], - "contractKind": "library", - "documentation": { - "id": 5238, - "nodeType": "StructuredDocumentation", - "src": "165:67:37", - "text": " @dev Collection of functions related to the address type" - }, - "fullyImplemented": true, - "id": 5492, - "linearizedBaseContracts": [5492], - "name": "Address", - "nameLocation": "241:7:37", - "nodeType": "ContractDefinition", - "nodes": [ - { - "documentation": { - "id": 5239, - "nodeType": "StructuredDocumentation", - "src": "255:75:37", - "text": " @dev There's no code at `target` (it is not a contract)." - }, - "errorSelector": "9996b315", - "id": 5243, - "name": "AddressEmptyCode", - "nameLocation": "341:16:37", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 5242, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 5241, - "mutability": "mutable", - "name": "target", - "nameLocation": "366:6:37", - "nodeType": "VariableDeclaration", - "scope": 5243, - "src": "358:14:37", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 5240, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "358:7:37", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "357:16:37" - }, - "src": "335:39:37" - }, - { - "body": { - "id": 5289, - "nodeType": "Block", - "src": "1361:278:37", - "statements": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 5257, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "arguments": [ - { - "id": 5253, - "name": "this", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967268, - "src": "1383:4:37", - "typeDescriptions": { - "typeIdentifier": "t_contract$_Address_$5492", - "typeString": "library Address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_Address_$5492", - "typeString": "library Address" - } - ], - "id": 5252, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "1375:7:37", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 5251, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1375:7:37", - "typeDescriptions": {} - } - }, - "id": 5254, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1375:13:37", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 5255, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "1389:7:37", - "memberName": "balance", - "nodeType": "MemberAccess", - "src": "1375:21:37", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "id": 5256, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5248, - "src": "1399:6:37", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "1375:30:37", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 5270, - "nodeType": "IfStatement", - "src": "1371:125:37", - "trueBody": { - "id": 5269, - "nodeType": "Block", - "src": "1407:89:37", - "statements": [ - { - "errorCall": { - "arguments": [ - { - "expression": { - "arguments": [ - { - "id": 5263, - "name": "this", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967268, - "src": "1463:4:37", - "typeDescriptions": { - "typeIdentifier": "t_contract$_Address_$5492", - "typeString": "library Address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_Address_$5492", - "typeString": "library Address" - } - ], - "id": 5262, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "1455:7:37", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 5261, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1455:7:37", - "typeDescriptions": {} - } - }, - "id": 5264, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1455:13:37", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 5265, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "1469:7:37", - "memberName": "balance", - "nodeType": "MemberAccess", - "src": "1455:21:37", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 5266, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5248, - "src": "1478:6:37", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "id": 5258, - "name": "Errors", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5544, - "src": "1428:6:37", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_Errors_$5544_$", - "typeString": "type(library Errors)" - } - }, - "id": 5260, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "1435:19:37", - "memberName": "InsufficientBalance", - "nodeType": "MemberAccess", - "referencedDeclaration": 5532, - "src": "1428:26:37", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$_t_uint256_$_t_uint256_$returns$__$", - "typeString": "function (uint256,uint256) pure" - } - }, - "id": 5267, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1428:57:37", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 5268, - "nodeType": "RevertStatement", - "src": "1421:64:37" - } - ] - } - }, - { - "assignments": [5272, null], - "declarations": [ - { - "constant": false, - "id": 5272, - "mutability": "mutable", - "name": "success", - "nameLocation": "1512:7:37", - "nodeType": "VariableDeclaration", - "scope": 5289, - "src": "1507:12:37", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 5271, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "1507:4:37", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - }, - null - ], - "id": 5279, - "initialValue": { - "arguments": [ - { - "hexValue": "", - "id": 5277, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1555:2:37", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", - "typeString": "literal_string \"\"" - }, - "value": "" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", - "typeString": "literal_string \"\"" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", - "typeString": "literal_string \"\"" - } - ], - "expression": { - "id": 5273, - "name": "recipient", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5246, - "src": "1525:9:37", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "id": 5274, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "1535:4:37", - "memberName": "call", - "nodeType": "MemberAccess", - "src": "1525:14:37", - "typeDescriptions": { - "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$", - "typeString": "function (bytes memory) payable returns (bool,bytes memory)" - } - }, - "id": 5276, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "names": ["value"], - "nodeType": "FunctionCallOptions", - "options": [ - { - "id": 5275, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5248, - "src": "1547:6:37", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "src": "1525:29:37", - "typeDescriptions": { - "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value", - "typeString": "function (bytes memory) payable returns (bool,bytes memory)" - } - }, - "id": 5278, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1525:33:37", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$", - "typeString": "tuple(bool,bytes memory)" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "1506:52:37" - }, - { - "condition": { - "id": 5281, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "!", - "prefix": true, - "src": "1572:8:37", - "subExpression": { - "id": 5280, - "name": "success", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5272, - "src": "1573:7:37", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 5288, - "nodeType": "IfStatement", - "src": "1568:65:37", - "trueBody": { - "id": 5287, - "nodeType": "Block", - "src": "1582:51:37", - "statements": [ - { - "errorCall": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "id": 5282, - "name": "Errors", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5544, - "src": "1603:6:37", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_Errors_$5544_$", - "typeString": "type(library Errors)" - } - }, - "id": 5284, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "1610:10:37", - "memberName": "FailedCall", - "nodeType": "MemberAccess", - "referencedDeclaration": 5535, - "src": "1603:17:37", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 5285, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1603:19:37", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 5286, - "nodeType": "RevertStatement", - "src": "1596:26:37" - } - ] - } - } - ] - }, - "documentation": { - "id": 5244, - "nodeType": "StructuredDocumentation", - "src": "380:905:37", - "text": " @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n `recipient`, forwarding all available gas and reverting on errors.\n https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\n of certain opcodes, possibly making contracts go over the 2300 gas limit\n imposed by `transfer`, making them unable to receive funds via\n `transfer`. {sendValue} removes this limitation.\n https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n IMPORTANT: because control is transferred to `recipient`, care must be\n taken to not create reentrancy vulnerabilities. Consider using\n {ReentrancyGuard} or the\n https://solidity.readthedocs.io/en/v0.8.20/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]." - }, - "id": 5290, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "sendValue", - "nameLocation": "1299:9:37", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 5249, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 5246, - "mutability": "mutable", - "name": "recipient", - "nameLocation": "1325:9:37", - "nodeType": "VariableDeclaration", - "scope": 5290, - "src": "1309:25:37", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - }, - "typeName": { - "id": 5245, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1309:15:37", - "stateMutability": "payable", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5248, - "mutability": "mutable", - "name": "amount", - "nameLocation": "1344:6:37", - "nodeType": "VariableDeclaration", - "scope": 5290, - "src": "1336:14:37", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 5247, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1336:7:37", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "1308:43:37" - }, - "returnParameters": { - "id": 5250, - "nodeType": "ParameterList", - "parameters": [], - "src": "1361:0:37" - }, - "scope": 5492, - "src": "1290:349:37", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 5306, - "nodeType": "Block", - "src": "2573:62:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 5301, - "name": "target", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5293, - "src": "2612:6:37", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 5302, - "name": "data", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5295, - "src": "2620:4:37", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - { - "hexValue": "30", - "id": 5303, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2626:1:37", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - }, - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 5300, - "name": "functionCallWithValue", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5357, - "src": "2590:21:37", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_bytes_memory_ptr_$", - "typeString": "function (address,bytes memory,uint256) returns (bytes memory)" - } - }, - "id": 5304, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2590:38:37", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - "functionReturnParameters": 5299, - "id": 5305, - "nodeType": "Return", - "src": "2583:45:37" - } - ] - }, - "documentation": { - "id": 5291, - "nodeType": "StructuredDocumentation", - "src": "1645:834:37", - "text": " @dev Performs a Solidity function call using a low level `call`. A\n plain `call` is an unsafe replacement for a function call: use this\n function instead.\n If `target` reverts with a revert reason or custom error, it is bubbled\n up by this function (like regular Solidity function calls). However, if\n the call reverted with no returned reason, this function reverts with a\n {Errors.FailedCall} error.\n Returns the raw returned data. To convert to the expected return value,\n use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n Requirements:\n - `target` must be a contract.\n - calling `target` with `data` must not revert." - }, - "id": 5307, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "functionCall", - "nameLocation": "2493:12:37", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 5296, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 5293, - "mutability": "mutable", - "name": "target", - "nameLocation": "2514:6:37", - "nodeType": "VariableDeclaration", - "scope": 5307, - "src": "2506:14:37", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 5292, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2506:7:37", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5295, - "mutability": "mutable", - "name": "data", - "nameLocation": "2535:4:37", - "nodeType": "VariableDeclaration", - "scope": 5307, - "src": "2522:17:37", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 5294, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "2522:5:37", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "2505:35:37" - }, - "returnParameters": { - "id": 5299, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 5298, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 5307, - "src": "2559:12:37", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 5297, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "2559:5:37", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "2558:14:37" - }, - "scope": 5492, - "src": "2484:151:37", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 5356, - "nodeType": "Block", - "src": "3072:294:37", - "statements": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 5325, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "arguments": [ - { - "id": 5321, - "name": "this", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967268, - "src": "3094:4:37", - "typeDescriptions": { - "typeIdentifier": "t_contract$_Address_$5492", - "typeString": "library Address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_Address_$5492", - "typeString": "library Address" - } - ], - "id": 5320, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "3086:7:37", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 5319, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3086:7:37", - "typeDescriptions": {} - } - }, - "id": 5322, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3086:13:37", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 5323, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3100:7:37", - "memberName": "balance", - "nodeType": "MemberAccess", - "src": "3086:21:37", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "<", - "rightExpression": { - "id": 5324, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5314, - "src": "3110:5:37", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "3086:29:37", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 5338, - "nodeType": "IfStatement", - "src": "3082:123:37", - "trueBody": { - "id": 5337, - "nodeType": "Block", - "src": "3117:88:37", - "statements": [ - { - "errorCall": { - "arguments": [ - { - "expression": { - "arguments": [ - { - "id": 5331, - "name": "this", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967268, - "src": "3173:4:37", - "typeDescriptions": { - "typeIdentifier": "t_contract$_Address_$5492", - "typeString": "library Address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_contract$_Address_$5492", - "typeString": "library Address" - } - ], - "id": 5330, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "3165:7:37", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 5329, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3165:7:37", - "typeDescriptions": {} - } - }, - "id": 5332, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3165:13:37", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 5333, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3179:7:37", - "memberName": "balance", - "nodeType": "MemberAccess", - "src": "3165:21:37", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 5334, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5314, - "src": "3188:5:37", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "id": 5326, - "name": "Errors", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5544, - "src": "3138:6:37", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_Errors_$5544_$", - "typeString": "type(library Errors)" - } - }, - "id": 5328, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3145:19:37", - "memberName": "InsufficientBalance", - "nodeType": "MemberAccess", - "referencedDeclaration": 5532, - "src": "3138:26:37", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$_t_uint256_$_t_uint256_$returns$__$", - "typeString": "function (uint256,uint256) pure" - } - }, - "id": 5335, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3138:56:37", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 5336, - "nodeType": "RevertStatement", - "src": "3131:63:37" - } - ] - } - }, - { - "assignments": [5340, 5342], - "declarations": [ - { - "constant": false, - "id": 5340, - "mutability": "mutable", - "name": "success", - "nameLocation": "3220:7:37", - "nodeType": "VariableDeclaration", - "scope": 5356, - "src": "3215:12:37", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 5339, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "3215:4:37", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5342, - "mutability": "mutable", - "name": "returndata", - "nameLocation": "3242:10:37", - "nodeType": "VariableDeclaration", - "scope": 5356, - "src": "3229:23:37", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 5341, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "3229:5:37", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "id": 5349, - "initialValue": { - "arguments": [ - { - "id": 5347, - "name": "data", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5312, - "src": "3282:4:37", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "expression": { - "id": 5343, - "name": "target", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5310, - "src": "3256:6:37", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 5344, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3263:4:37", - "memberName": "call", - "nodeType": "MemberAccess", - "src": "3256:11:37", - "typeDescriptions": { - "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$", - "typeString": "function (bytes memory) payable returns (bool,bytes memory)" - } - }, - "id": 5346, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "names": ["value"], - "nodeType": "FunctionCallOptions", - "options": [ - { - "id": 5345, - "name": "value", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5314, - "src": "3275:5:37", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "src": "3256:25:37", - "typeDescriptions": { - "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value", - "typeString": "function (bytes memory) payable returns (bool,bytes memory)" - } - }, - "id": 5348, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3256:31:37", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$", - "typeString": "tuple(bool,bytes memory)" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "3214:73:37" - }, - { - "expression": { - "arguments": [ - { - "id": 5351, - "name": "target", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5310, - "src": "3331:6:37", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 5352, - "name": "success", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5340, - "src": "3339:7:37", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "id": 5353, - "name": "returndata", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5342, - "src": "3348:10:37", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "id": 5350, - "name": "verifyCallResultFromTarget", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5449, - "src": "3304:26:37", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_address_$_t_bool_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$", - "typeString": "function (address,bool,bytes memory) view returns (bytes memory)" - } - }, - "id": 5354, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3304:55:37", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - "functionReturnParameters": 5318, - "id": 5355, - "nodeType": "Return", - "src": "3297:62:37" - } - ] - }, - "documentation": { - "id": 5308, - "nodeType": "StructuredDocumentation", - "src": "2641:313:37", - "text": " @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but also transferring `value` wei to `target`.\n Requirements:\n - the calling contract must have an ETH balance of at least `value`.\n - the called Solidity function must be `payable`." - }, - "id": 5357, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "functionCallWithValue", - "nameLocation": "2968:21:37", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 5315, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 5310, - "mutability": "mutable", - "name": "target", - "nameLocation": "2998:6:37", - "nodeType": "VariableDeclaration", - "scope": 5357, - "src": "2990:14:37", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 5309, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2990:7:37", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5312, - "mutability": "mutable", - "name": "data", - "nameLocation": "3019:4:37", - "nodeType": "VariableDeclaration", - "scope": 5357, - "src": "3006:17:37", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 5311, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "3006:5:37", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5314, - "mutability": "mutable", - "name": "value", - "nameLocation": "3033:5:37", - "nodeType": "VariableDeclaration", - "scope": 5357, - "src": "3025:13:37", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 5313, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3025:7:37", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "2989:50:37" - }, - "returnParameters": { - "id": 5318, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 5317, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 5357, - "src": "3058:12:37", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 5316, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "3058:5:37", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "3057:14:37" - }, - "scope": 5492, - "src": "2959:407:37", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 5382, - "nodeType": "Block", - "src": "3605:154:37", - "statements": [ - { - "assignments": [5368, 5370], - "declarations": [ - { - "constant": false, - "id": 5368, - "mutability": "mutable", - "name": "success", - "nameLocation": "3621:7:37", - "nodeType": "VariableDeclaration", - "scope": 5382, - "src": "3616:12:37", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 5367, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "3616:4:37", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5370, - "mutability": "mutable", - "name": "returndata", - "nameLocation": "3643:10:37", - "nodeType": "VariableDeclaration", - "scope": 5382, - "src": "3630:23:37", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 5369, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "3630:5:37", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "id": 5375, - "initialValue": { - "arguments": [ - { - "id": 5373, - "name": "data", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5362, - "src": "3675:4:37", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "expression": { - "id": 5371, - "name": "target", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5360, - "src": "3657:6:37", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 5372, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3664:10:37", - "memberName": "staticcall", - "nodeType": "MemberAccess", - "src": "3657:17:37", - "typeDescriptions": { - "typeIdentifier": "t_function_barestaticcall_view$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$", - "typeString": "function (bytes memory) view returns (bool,bytes memory)" - } - }, - "id": 5374, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3657:23:37", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$", - "typeString": "tuple(bool,bytes memory)" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "3615:65:37" - }, - { - "expression": { - "arguments": [ - { - "id": 5377, - "name": "target", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5360, - "src": "3724:6:37", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 5378, - "name": "success", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5368, - "src": "3732:7:37", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "id": 5379, - "name": "returndata", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5370, - "src": "3741:10:37", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "id": 5376, - "name": "verifyCallResultFromTarget", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5449, - "src": "3697:26:37", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_address_$_t_bool_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$", - "typeString": "function (address,bool,bytes memory) view returns (bytes memory)" - } - }, - "id": 5380, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3697:55:37", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - "functionReturnParameters": 5366, - "id": 5381, - "nodeType": "Return", - "src": "3690:62:37" - } - ] - }, - "documentation": { - "id": 5358, - "nodeType": "StructuredDocumentation", - "src": "3372:128:37", - "text": " @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but performing a static call." - }, - "id": 5383, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "functionStaticCall", - "nameLocation": "3514:18:37", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 5363, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 5360, - "mutability": "mutable", - "name": "target", - "nameLocation": "3541:6:37", - "nodeType": "VariableDeclaration", - "scope": 5383, - "src": "3533:14:37", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 5359, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3533:7:37", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5362, - "mutability": "mutable", - "name": "data", - "nameLocation": "3562:4:37", - "nodeType": "VariableDeclaration", - "scope": 5383, - "src": "3549:17:37", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 5361, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "3549:5:37", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "3532:35:37" - }, - "returnParameters": { - "id": 5366, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 5365, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 5383, - "src": "3591:12:37", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 5364, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "3591:5:37", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "3590:14:37" - }, - "scope": 5492, - "src": "3505:254:37", - "stateMutability": "view", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 5408, - "nodeType": "Block", - "src": "3997:156:37", - "statements": [ - { - "assignments": [5394, 5396], - "declarations": [ - { - "constant": false, - "id": 5394, - "mutability": "mutable", - "name": "success", - "nameLocation": "4013:7:37", - "nodeType": "VariableDeclaration", - "scope": 5408, - "src": "4008:12:37", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 5393, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "4008:4:37", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5396, - "mutability": "mutable", - "name": "returndata", - "nameLocation": "4035:10:37", - "nodeType": "VariableDeclaration", - "scope": 5408, - "src": "4022:23:37", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 5395, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "4022:5:37", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "id": 5401, - "initialValue": { - "arguments": [ - { - "id": 5399, - "name": "data", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5388, - "src": "4069:4:37", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "expression": { - "id": 5397, - "name": "target", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5386, - "src": "4049:6:37", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 5398, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "4056:12:37", - "memberName": "delegatecall", - "nodeType": "MemberAccess", - "src": "4049:19:37", - "typeDescriptions": { - "typeIdentifier": "t_function_baredelegatecall_nonpayable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$", - "typeString": "function (bytes memory) returns (bool,bytes memory)" - } - }, - "id": 5400, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4049:25:37", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$", - "typeString": "tuple(bool,bytes memory)" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "4007:67:37" - }, - { - "expression": { - "arguments": [ - { - "id": 5403, - "name": "target", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5386, - "src": "4118:6:37", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 5404, - "name": "success", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5394, - "src": "4126:7:37", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "id": 5405, - "name": "returndata", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5396, - "src": "4135:10:37", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "id": 5402, - "name": "verifyCallResultFromTarget", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5449, - "src": "4091:26:37", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_address_$_t_bool_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$", - "typeString": "function (address,bool,bytes memory) view returns (bytes memory)" - } - }, - "id": 5406, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4091:55:37", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - "functionReturnParameters": 5392, - "id": 5407, - "nodeType": "Return", - "src": "4084:62:37" - } - ] - }, - "documentation": { - "id": 5384, - "nodeType": "StructuredDocumentation", - "src": "3765:130:37", - "text": " @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but performing a delegate call." - }, - "id": 5409, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "functionDelegateCall", - "nameLocation": "3909:20:37", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 5389, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 5386, - "mutability": "mutable", - "name": "target", - "nameLocation": "3938:6:37", - "nodeType": "VariableDeclaration", - "scope": 5409, - "src": "3930:14:37", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 5385, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3930:7:37", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5388, - "mutability": "mutable", - "name": "data", - "nameLocation": "3959:4:37", - "nodeType": "VariableDeclaration", - "scope": 5409, - "src": "3946:17:37", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 5387, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "3946:5:37", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "3929:35:37" - }, - "returnParameters": { - "id": 5392, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 5391, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 5409, - "src": "3983:12:37", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 5390, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "3983:5:37", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "3982:14:37" - }, - "scope": 5492, - "src": "3900:253:37", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 5448, - "nodeType": "Block", - "src": "4579:424:37", - "statements": [ - { - "condition": { - "id": 5422, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "!", - "prefix": true, - "src": "4593:8:37", - "subExpression": { - "id": 5421, - "name": "success", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5414, - "src": "4594:7:37", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": { - "id": 5446, - "nodeType": "Block", - "src": "4653:344:37", - "statements": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 5437, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 5431, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 5428, - "name": "returndata", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5416, - "src": "4841:10:37", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - "id": 5429, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "4852:6:37", - "memberName": "length", - "nodeType": "MemberAccess", - "src": "4841:17:37", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "hexValue": "30", - "id": 5430, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "4862:1:37", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "4841:22:37", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "&&", - "rightExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 5436, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "expression": { - "id": 5432, - "name": "target", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5412, - "src": "4867:6:37", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 5433, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "4874:4:37", - "memberName": "code", - "nodeType": "MemberAccess", - "src": "4867:11:37", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - "id": 5434, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "4879:6:37", - "memberName": "length", - "nodeType": "MemberAccess", - "src": "4867:18:37", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "hexValue": "30", - "id": 5435, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "4889:1:37", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "4867:23:37", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "4841:49:37", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 5443, - "nodeType": "IfStatement", - "src": "4837:119:37", - "trueBody": { - "id": 5442, - "nodeType": "Block", - "src": "4892:64:37", - "statements": [ - { - "errorCall": { - "arguments": [ - { - "id": 5439, - "name": "target", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5412, - "src": "4934:6:37", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 5438, - "name": "AddressEmptyCode", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5243, - "src": "4917:16:37", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$_t_address_$returns$__$", - "typeString": "function (address) pure" - } - }, - "id": 5440, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4917:24:37", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 5441, - "nodeType": "RevertStatement", - "src": "4910:31:37" - } - ] - } - }, - { - "expression": { - "id": 5444, - "name": "returndata", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5416, - "src": "4976:10:37", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - "functionReturnParameters": 5420, - "id": 5445, - "nodeType": "Return", - "src": "4969:17:37" - } - ] - }, - "id": 5447, - "nodeType": "IfStatement", - "src": "4589:408:37", - "trueBody": { - "id": 5427, - "nodeType": "Block", - "src": "4603:44:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 5424, - "name": "returndata", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5416, - "src": "4625:10:37", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "id": 5423, - "name": "_revert", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5491, - "src": "4617:7:37", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$__$", - "typeString": "function (bytes memory) pure" - } - }, - "id": 5425, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4617:19:37", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 5426, - "nodeType": "ExpressionStatement", - "src": "4617:19:37" - } - ] - } - } - ] - }, - "documentation": { - "id": 5410, - "nodeType": "StructuredDocumentation", - "src": "4159:257:37", - "text": " @dev Tool to verify that a low level call to smart-contract was successful, and reverts if the target\n was not a contract or bubbling up the revert reason (falling back to {Errors.FailedCall}) in case\n of an unsuccessful call." - }, - "id": 5449, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "verifyCallResultFromTarget", - "nameLocation": "4430:26:37", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 5417, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 5412, - "mutability": "mutable", - "name": "target", - "nameLocation": "4474:6:37", - "nodeType": "VariableDeclaration", - "scope": 5449, - "src": "4466:14:37", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 5411, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4466:7:37", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5414, - "mutability": "mutable", - "name": "success", - "nameLocation": "4495:7:37", - "nodeType": "VariableDeclaration", - "scope": 5449, - "src": "4490:12:37", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 5413, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "4490:4:37", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5416, - "mutability": "mutable", - "name": "returndata", - "nameLocation": "4525:10:37", - "nodeType": "VariableDeclaration", - "scope": 5449, - "src": "4512:23:37", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 5415, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "4512:5:37", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "4456:85:37" - }, - "returnParameters": { - "id": 5420, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 5419, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 5449, - "src": "4565:12:37", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 5418, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "4565:5:37", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "4564:14:37" - }, - "scope": 5492, - "src": "4421:582:37", - "stateMutability": "view", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 5470, - "nodeType": "Block", - "src": "5307:122:37", - "statements": [ - { - "condition": { - "id": 5460, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "!", - "prefix": true, - "src": "5321:8:37", - "subExpression": { - "id": 5459, - "name": "success", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5452, - "src": "5322:7:37", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": { - "id": 5468, - "nodeType": "Block", - "src": "5381:42:37", - "statements": [ - { - "expression": { - "id": 5466, - "name": "returndata", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5454, - "src": "5402:10:37", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - "functionReturnParameters": 5458, - "id": 5467, - "nodeType": "Return", - "src": "5395:17:37" - } - ] - }, - "id": 5469, - "nodeType": "IfStatement", - "src": "5317:106:37", - "trueBody": { - "id": 5465, - "nodeType": "Block", - "src": "5331:44:37", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 5462, - "name": "returndata", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5454, - "src": "5353:10:37", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "id": 5461, - "name": "_revert", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5491, - "src": "5345:7:37", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$__$", - "typeString": "function (bytes memory) pure" - } - }, - "id": 5463, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5345:19:37", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 5464, - "nodeType": "ExpressionStatement", - "src": "5345:19:37" - } - ] - } - } - ] - }, - "documentation": { - "id": 5450, - "nodeType": "StructuredDocumentation", - "src": "5009:191:37", - "text": " @dev Tool to verify that a low level call was successful, and reverts if it wasn't, either by bubbling the\n revert reason or with a default {Errors.FailedCall} error." - }, - "id": 5471, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "verifyCallResult", - "nameLocation": "5214:16:37", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 5455, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 5452, - "mutability": "mutable", - "name": "success", - "nameLocation": "5236:7:37", - "nodeType": "VariableDeclaration", - "scope": 5471, - "src": "5231:12:37", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 5451, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "5231:4:37", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5454, - "mutability": "mutable", - "name": "returndata", - "nameLocation": "5258:10:37", - "nodeType": "VariableDeclaration", - "scope": 5471, - "src": "5245:23:37", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 5453, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "5245:5:37", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "5230:39:37" - }, - "returnParameters": { - "id": 5458, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 5457, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 5471, - "src": "5293:12:37", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 5456, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "5293:5:37", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "5292:14:37" - }, - "scope": 5492, - "src": "5205:224:37", - "stateMutability": "pure", - "virtual": false, - "visibility": "internal" - }, - { - "body": { - "id": 5490, - "nodeType": "Block", - "src": "5598:432:37", - "statements": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 5480, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 5477, - "name": "returndata", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5474, - "src": "5674:10:37", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - "id": 5478, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "5685:6:37", - "memberName": "length", - "nodeType": "MemberAccess", - "src": "5674:17:37", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "hexValue": "30", - "id": 5479, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "5694:1:37", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "5674:21:37", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": { - "id": 5488, - "nodeType": "Block", - "src": "5973:51:37", - "statements": [ - { - "errorCall": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "id": 5483, - "name": "Errors", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5544, - "src": "5994:6:37", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_Errors_$5544_$", - "typeString": "type(library Errors)" - } - }, - "id": 5485, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "6001:10:37", - "memberName": "FailedCall", - "nodeType": "MemberAccess", - "referencedDeclaration": 5535, - "src": "5994:17:37", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 5486, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5994:19:37", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 5487, - "nodeType": "RevertStatement", - "src": "5987:26:37" - } - ] - }, - "id": 5489, - "nodeType": "IfStatement", - "src": "5670:354:37", - "trueBody": { - "id": 5482, - "nodeType": "Block", - "src": "5697:270:37", - "statements": [ - { - "AST": { - "nativeSrc": "5824:133:37", - "nodeType": "YulBlock", - "src": "5824:133:37", - "statements": [ - { - "nativeSrc": "5842:40:37", - "nodeType": "YulVariableDeclaration", - "src": "5842:40:37", - "value": { - "arguments": [ - { - "name": "returndata", - "nativeSrc": "5871:10:37", - "nodeType": "YulIdentifier", - "src": "5871:10:37" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "5865:5:37", - "nodeType": "YulIdentifier", - "src": "5865:5:37" - }, - "nativeSrc": "5865:17:37", - "nodeType": "YulFunctionCall", - "src": "5865:17:37" - }, - "variables": [ - { - "name": "returndata_size", - "nativeSrc": "5846:15:37", - "nodeType": "YulTypedName", - "src": "5846:15:37", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "5910:2:37", - "nodeType": "YulLiteral", - "src": "5910:2:37", - "type": "", - "value": "32" - }, - { - "name": "returndata", - "nativeSrc": "5914:10:37", - "nodeType": "YulIdentifier", - "src": "5914:10:37" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "5906:3:37", - "nodeType": "YulIdentifier", - "src": "5906:3:37" - }, - "nativeSrc": "5906:19:37", - "nodeType": "YulFunctionCall", - "src": "5906:19:37" - }, - { - "name": "returndata_size", - "nativeSrc": "5927:15:37", - "nodeType": "YulIdentifier", - "src": "5927:15:37" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "5899:6:37", - "nodeType": "YulIdentifier", - "src": "5899:6:37" - }, - "nativeSrc": "5899:44:37", - "nodeType": "YulFunctionCall", - "src": "5899:44:37" - }, - "nativeSrc": "5899:44:37", - "nodeType": "YulExpressionStatement", - "src": "5899:44:37" - } - ] - }, - "evmVersion": "paris", - "externalReferences": [ - { - "declaration": 5474, - "isOffset": false, - "isSlot": false, - "src": "5871:10:37", - "valueSize": 1 - }, - { - "declaration": 5474, - "isOffset": false, - "isSlot": false, - "src": "5914:10:37", - "valueSize": 1 - } - ], - "flags": ["memory-safe"], - "id": 5481, - "nodeType": "InlineAssembly", - "src": "5799:158:37" - } - ] - } - } - ] - }, - "documentation": { - "id": 5472, - "nodeType": "StructuredDocumentation", - "src": "5435:103:37", - "text": " @dev Reverts with returndata if present. Otherwise reverts with {Errors.FailedCall}." - }, - "id": 5491, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_revert", - "nameLocation": "5552:7:37", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 5475, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 5474, - "mutability": "mutable", - "name": "returndata", - "nameLocation": "5573:10:37", - "nodeType": "VariableDeclaration", - "scope": 5491, - "src": "5560:23:37", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 5473, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "5560:5:37", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "5559:25:37" - }, - "returnParameters": { - "id": 5476, - "nodeType": "ParameterList", - "parameters": [], - "src": "5598:0:37" - }, - "scope": 5492, - "src": "5543:487:37", - "stateMutability": "pure", - "virtual": false, - "visibility": "private" - } - ], - "scope": 5493, - "src": "233:5799:37", - "usedErrors": [5243], - "usedEvents": [] - } - ], - "src": "101:5932:37" - }, - "id": 37 - }, - "@openzeppelin/contracts/utils/Context.sol": { - "ast": { - "absolutePath": "@openzeppelin/contracts/utils/Context.sol", - "exportedSymbols": { "Context": [5522] }, - "id": 5523, - "license": "MIT", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 5494, - "literals": ["solidity", "^", "0.8", ".20"], - "nodeType": "PragmaDirective", - "src": "101:24:38" - }, - { - "abstract": true, - "baseContracts": [], - "canonicalName": "Context", - "contractDependencies": [], - "contractKind": "contract", - "documentation": { - "id": 5495, - "nodeType": "StructuredDocumentation", - "src": "127:496:38", - "text": " @dev Provides information about the current execution context, including the\n sender of the transaction and its data. While these are generally available\n via msg.sender and msg.data, they should not be accessed in such a direct\n manner, since when dealing with meta-transactions the account sending and\n paying for execution may not be the actual sender (as far as an application\n is concerned).\n This contract is only required for intermediate, library-like contracts." - }, - "fullyImplemented": true, - "id": 5522, - "linearizedBaseContracts": [5522], - "name": "Context", - "nameLocation": "642:7:38", - "nodeType": "ContractDefinition", - "nodes": [ - { - "body": { - "id": 5503, - "nodeType": "Block", - "src": "718:34:38", - "statements": [ - { - "expression": { - "expression": { - "id": 5500, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967281, - "src": "735:3:38", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 5501, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "739:6:38", - "memberName": "sender", - "nodeType": "MemberAccess", - "src": "735:10:38", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "functionReturnParameters": 5499, - "id": 5502, - "nodeType": "Return", - "src": "728:17:38" - } - ] - }, - "id": 5504, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_msgSender", - "nameLocation": "665:10:38", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 5496, - "nodeType": "ParameterList", - "parameters": [], - "src": "675:2:38" - }, - "returnParameters": { - "id": 5499, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 5498, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 5504, - "src": "709:7:38", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 5497, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "709:7:38", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "708:9:38" - }, - "scope": 5522, - "src": "656:96:38", - "stateMutability": "view", - "virtual": true, - "visibility": "internal" - }, - { - "body": { - "id": 5512, - "nodeType": "Block", - "src": "825:32:38", - "statements": [ - { - "expression": { - "expression": { - "id": 5509, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967281, - "src": "842:3:38", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 5510, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "846:4:38", - "memberName": "data", - "nodeType": "MemberAccess", - "src": "842:8:38", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - }, - "functionReturnParameters": 5508, - "id": 5511, - "nodeType": "Return", - "src": "835:15:38" - } - ] - }, - "id": 5513, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_msgData", - "nameLocation": "767:8:38", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 5505, - "nodeType": "ParameterList", - "parameters": [], - "src": "775:2:38" - }, - "returnParameters": { - "id": 5508, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 5507, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 5513, - "src": "809:14:38", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 5506, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "809:5:38", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "808:16:38" - }, - "scope": 5522, - "src": "758:99:38", - "stateMutability": "view", - "virtual": true, - "visibility": "internal" - }, - { - "body": { - "id": 5520, - "nodeType": "Block", - "src": "935:25:38", - "statements": [ - { - "expression": { - "hexValue": "30", - "id": 5518, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "952:1:38", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "functionReturnParameters": 5517, - "id": 5519, - "nodeType": "Return", - "src": "945:8:38" - } - ] - }, - "id": 5521, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_contextSuffixLength", - "nameLocation": "872:20:38", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 5514, - "nodeType": "ParameterList", - "parameters": [], - "src": "892:2:38" - }, - "returnParameters": { - "id": 5517, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 5516, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 5521, - "src": "926:7:38", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 5515, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "926:7:38", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "925:9:38" - }, - "scope": 5522, - "src": "863:97:38", - "stateMutability": "view", - "virtual": true, - "visibility": "internal" - } - ], - "scope": 5523, - "src": "624:338:38", - "usedErrors": [], - "usedEvents": [] - } - ], - "src": "101:862:38" - }, - "id": 38 - }, - "@openzeppelin/contracts/utils/Errors.sol": { - "ast": { - "absolutePath": "@openzeppelin/contracts/utils/Errors.sol", - "exportedSymbols": { "Errors": [5544] }, - "id": 5545, - "license": "MIT", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 5524, - "literals": ["solidity", "^", "0.8", ".20"], - "nodeType": "PragmaDirective", - "src": "100:24:39" - }, - { - "abstract": false, - "baseContracts": [], - "canonicalName": "Errors", - "contractDependencies": [], - "contractKind": "library", - "documentation": { - "id": 5525, - "nodeType": "StructuredDocumentation", - "src": "126:284:39", - "text": " @dev Collection of common custom errors used in multiple contracts\n IMPORTANT: Backwards compatibility is not guaranteed in future versions of the library.\n It is recommended to avoid relying on the error API for critical functionality.\n _Available since v5.1._" - }, - "fullyImplemented": true, - "id": 5544, - "linearizedBaseContracts": [5544], - "name": "Errors", - "nameLocation": "419:6:39", - "nodeType": "ContractDefinition", - "nodes": [ - { - "documentation": { - "id": 5526, - "nodeType": "StructuredDocumentation", - "src": "432:94:39", - "text": " @dev The ETH balance of the account is not enough to perform the operation." - }, - "errorSelector": "cf479181", - "id": 5532, - "name": "InsufficientBalance", - "nameLocation": "537:19:39", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 5531, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 5528, - "mutability": "mutable", - "name": "balance", - "nameLocation": "565:7:39", - "nodeType": "VariableDeclaration", - "scope": 5532, - "src": "557:15:39", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 5527, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "557:7:39", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5530, - "mutability": "mutable", - "name": "needed", - "nameLocation": "582:6:39", - "nodeType": "VariableDeclaration", - "scope": 5532, - "src": "574:14:39", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 5529, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "574:7:39", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "556:33:39" - }, - "src": "531:59:39" - }, - { - "documentation": { - "id": 5533, - "nodeType": "StructuredDocumentation", - "src": "596:89:39", - "text": " @dev A call to an address target failed. The target may have reverted." - }, - "errorSelector": "d6bda275", - "id": 5535, - "name": "FailedCall", - "nameLocation": "696:10:39", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 5534, - "nodeType": "ParameterList", - "parameters": [], - "src": "706:2:39" - }, - "src": "690:19:39" - }, - { - "documentation": { - "id": 5536, - "nodeType": "StructuredDocumentation", - "src": "715:46:39", - "text": " @dev The deployment failed." - }, - "errorSelector": "b06ebf3d", - "id": 5538, - "name": "FailedDeployment", - "nameLocation": "772:16:39", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 5537, - "nodeType": "ParameterList", - "parameters": [], - "src": "788:2:39" - }, - "src": "766:25:39" - }, - { - "documentation": { - "id": 5539, - "nodeType": "StructuredDocumentation", - "src": "797:58:39", - "text": " @dev A necessary precompile is missing." - }, - "errorSelector": "42b01bce", - "id": 5543, - "name": "MissingPrecompile", - "nameLocation": "866:17:39", - "nodeType": "ErrorDefinition", - "parameters": { - "id": 5542, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 5541, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 5543, - "src": "884:7:39", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 5540, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "884:7:39", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "883:9:39" - }, - "src": "860:33:39" - } - ], - "scope": 5545, - "src": "411:484:39", - "usedErrors": [5532, 5535, 5538, 5543], - "usedEvents": [] - } - ], - "src": "100:796:39" - }, - "id": 39 - }, - "@openzeppelin/contracts/utils/introspection/IERC165.sol": { - "ast": { - "absolutePath": "@openzeppelin/contracts/utils/introspection/IERC165.sol", - "exportedSymbols": { "IERC165": [5556] }, - "id": 5557, - "license": "MIT", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 5546, - "literals": ["solidity", "^", "0.8", ".20"], - "nodeType": "PragmaDirective", - "src": "115:24:40" - }, - { - "abstract": false, - "baseContracts": [], - "canonicalName": "IERC165", - "contractDependencies": [], - "contractKind": "interface", - "documentation": { - "id": 5547, - "nodeType": "StructuredDocumentation", - "src": "141:280:40", - "text": " @dev Interface of the ERC-165 standard, as defined in the\n https://eips.ethereum.org/EIPS/eip-165[ERC].\n Implementers can declare support of contract interfaces, which can then be\n queried by others ({ERC165Checker}).\n For an implementation, see {ERC165}." - }, - "fullyImplemented": false, - "id": 5556, - "linearizedBaseContracts": [5556], - "name": "IERC165", - "nameLocation": "432:7:40", - "nodeType": "ContractDefinition", - "nodes": [ - { - "documentation": { - "id": 5548, - "nodeType": "StructuredDocumentation", - "src": "446:340:40", - "text": " @dev Returns true if this contract implements the interface defined by\n `interfaceId`. See the corresponding\n https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section]\n to learn more about how these ids are created.\n This function call must use less than 30 000 gas." - }, - "functionSelector": "01ffc9a7", - "id": 5555, - "implemented": false, - "kind": "function", - "modifiers": [], - "name": "supportsInterface", - "nameLocation": "800:17:40", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 5551, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 5550, - "mutability": "mutable", - "name": "interfaceId", - "nameLocation": "825:11:40", - "nodeType": "VariableDeclaration", - "scope": 5555, - "src": "818:18:40", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes4", - "typeString": "bytes4" - }, - "typeName": { - "id": 5549, - "name": "bytes4", - "nodeType": "ElementaryTypeName", - "src": "818:6:40", - "typeDescriptions": { - "typeIdentifier": "t_bytes4", - "typeString": "bytes4" - } - }, - "visibility": "internal" - } - ], - "src": "817:20:40" - }, - "returnParameters": { - "id": 5554, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 5553, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 5555, - "src": "861:4:40", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 5552, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "861:4:40", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "860:6:40" - }, - "scope": 5556, - "src": "791:76:40", - "stateMutability": "view", - "virtual": false, - "visibility": "external" - } - ], - "scope": 5557, - "src": "422:447:40", - "usedErrors": [], - "usedEvents": [] - } - ], - "src": "115:755:40" - }, - "id": 40 - }, - "contracts/MyOFT.sol": { - "ast": { - "absolutePath": "contracts/MyOFT.sol", - "exportedSymbols": { - "MyOFT": [5586], - "OFT": [2736], - "Ownable": [3976] - }, - "id": 5587, - "license": "UNLICENSED", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 5558, - "literals": ["solidity", "^", "0.8", ".22"], - "nodeType": "PragmaDirective", - "src": "39:24:41" - }, - { - "absolutePath": "@openzeppelin/contracts/access/Ownable.sol", - "file": "@openzeppelin/contracts/access/Ownable.sol", - "id": 5560, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 5587, - "sourceUnit": 3977, - "src": "65:69:41", - "symbolAliases": [ - { - "foreign": { - "id": 5559, - "name": "Ownable", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 3976, - "src": "74:7:41", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "absolutePath": "@layerzerolabs/oft-evm/contracts/OFT.sol", - "file": "@layerzerolabs/oft-evm/contracts/OFT.sol", - "id": 5562, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 5587, - "sourceUnit": 2737, - "src": "135:63:41", - "symbolAliases": [ - { - "foreign": { - "id": 5561, - "name": "OFT", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2736, - "src": "144:3:41", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "abstract": false, - "baseContracts": [ - { - "baseName": { - "id": 5563, - "name": "OFT", - "nameLocations": ["218:3:41"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 2736, - "src": "218:3:41" - }, - "id": 5564, - "nodeType": "InheritanceSpecifier", - "src": "218:3:41" - } - ], - "canonicalName": "MyOFT", - "contractDependencies": [], - "contractKind": "contract", - "fullyImplemented": true, - "id": 5586, - "linearizedBaseContracts": [ - 5586, 2736, 4718, 4108, 4822, 4796, 3361, 2149, 2323, 1371, - 1653, 1839, 1501, 3976, 5522, 1964, 2377, 1902, 1985, 238, 3505 - ], - "name": "MyOFT", - "nameLocation": "209:5:41", - "nodeType": "ContractDefinition", - "nodes": [ - { - "body": { - "id": 5584, - "nodeType": "Block", - "src": "425:2:41", - "statements": [] - }, - "id": 5585, - "implemented": true, - "kind": "constructor", - "modifiers": [ - { - "arguments": [ - { - "id": 5575, - "name": "_name", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5566, - "src": "366:5:41", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - }, - { - "id": 5576, - "name": "_symbol", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5568, - "src": "373:7:41", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - }, - { - "id": 5577, - "name": "_lzEndpoint", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5570, - "src": "382:11:41", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 5578, - "name": "_delegate", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5572, - "src": "395:9:41", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "id": 5579, - "kind": "baseConstructorSpecifier", - "modifierName": { - "id": 5574, - "name": "OFT", - "nameLocations": ["362:3:41"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 2736, - "src": "362:3:41" - }, - "nodeType": "ModifierInvocation", - "src": "362:43:41" - }, - { - "arguments": [ - { - "id": 5581, - "name": "_delegate", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5572, - "src": "414:9:41", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "id": 5582, - "kind": "baseConstructorSpecifier", - "modifierName": { - "id": 5580, - "name": "Ownable", - "nameLocations": ["406:7:41"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 3976, - "src": "406:7:41" - }, - "nodeType": "ModifierInvocation", - "src": "406:18:41" - } - ], - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 5573, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 5566, - "mutability": "mutable", - "name": "_name", - "nameLocation": "263:5:41", - "nodeType": "VariableDeclaration", - "scope": 5585, - "src": "249:19:41", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 5565, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "249:6:41", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5568, - "mutability": "mutable", - "name": "_symbol", - "nameLocation": "292:7:41", - "nodeType": "VariableDeclaration", - "scope": 5585, - "src": "278:21:41", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 5567, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "278:6:41", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5570, - "mutability": "mutable", - "name": "_lzEndpoint", - "nameLocation": "317:11:41", - "nodeType": "VariableDeclaration", - "scope": 5585, - "src": "309:19:41", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 5569, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "309:7:41", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5572, - "mutability": "mutable", - "name": "_delegate", - "nameLocation": "346:9:41", - "nodeType": "VariableDeclaration", - "scope": 5585, - "src": "338:17:41", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 5571, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "338:7:41", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "239:122:41" - }, - "returnParameters": { - "id": 5583, - "nodeType": "ParameterList", - "parameters": [], - "src": "425:0:41" - }, - "scope": 5586, - "src": "228:199:41", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "public" - } - ], - "scope": 5587, - "src": "200:229:41", - "usedErrors": [ - 1517, 1675, 1677, 1850, 1854, 1856, 1858, 1937, 2333, 2335, - 3403, 3409, 3842, 3847, 4078, 4083, 4088, 4097, 4102, 4107, 4836 - ], - "usedEvents": [ - 1864, 1943, 2340, 2788, 3421, 3431, 3853, 4730, 4739 - ] - } - ], - "src": "39:391:41" - }, - "id": 41 - }, - "contracts/mocks/MyOFTMock.sol": { - "ast": { - "absolutePath": "contracts/mocks/MyOFTMock.sol", - "exportedSymbols": { "MyOFT": [5586], "MyOFTMock": [5624] }, - "id": 5625, - "license": "UNLICENSED", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 5588, - "literals": ["solidity", "^", "0.8", ".22"], - "nodeType": "PragmaDirective", - "src": "39:24:42" - }, - { - "absolutePath": "contracts/MyOFT.sol", - "file": "../MyOFT.sol", - "id": 5590, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 5625, - "sourceUnit": 5587, - "src": "65:37:42", - "symbolAliases": [ - { - "foreign": { - "id": 5589, - "name": "MyOFT", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5586, - "src": "74:5:42", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "abstract": false, - "baseContracts": [ - { - "baseName": { - "id": 5591, - "name": "MyOFT", - "nameLocations": ["177:5:42"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 5586, - "src": "177:5:42" - }, - "id": 5592, - "nodeType": "InheritanceSpecifier", - "src": "177:5:42" - } - ], - "canonicalName": "MyOFTMock", - "contractDependencies": [], - "contractKind": "contract", - "fullyImplemented": true, - "id": 5624, - "linearizedBaseContracts": [ - 5624, 5586, 2736, 4718, 4108, 4822, 4796, 3361, 2149, 2323, - 1371, 1653, 1839, 1501, 3976, 5522, 1964, 2377, 1902, 1985, 238, - 3505 - ], - "name": "MyOFTMock", - "nameLocation": "164:9:42", - "nodeType": "ContractDefinition", - "nodes": [ - { - "body": { - "id": 5609, - "nodeType": "Block", - "src": "369:2:42", - "statements": [] - }, - "id": 5610, - "implemented": true, - "kind": "constructor", - "modifiers": [ - { - "arguments": [ - { - "id": 5603, - "name": "_name", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5594, - "src": "329:5:42", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - }, - { - "id": 5604, - "name": "_symbol", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5596, - "src": "336:7:42", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - }, - { - "id": 5605, - "name": "_lzEndpoint", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5598, - "src": "345:11:42", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 5606, - "name": "_delegate", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5600, - "src": "358:9:42", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "id": 5607, - "kind": "baseConstructorSpecifier", - "modifierName": { - "id": 5602, - "name": "MyOFT", - "nameLocations": ["323:5:42"], - "nodeType": "IdentifierPath", - "referencedDeclaration": 5586, - "src": "323:5:42" - }, - "nodeType": "ModifierInvocation", - "src": "323:45:42" - } - ], - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 5601, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 5594, - "mutability": "mutable", - "name": "_name", - "nameLocation": "224:5:42", - "nodeType": "VariableDeclaration", - "scope": 5610, - "src": "210:19:42", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 5593, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "210:6:42", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5596, - "mutability": "mutable", - "name": "_symbol", - "nameLocation": "253:7:42", - "nodeType": "VariableDeclaration", - "scope": 5610, - "src": "239:21:42", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 5595, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "239:6:42", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5598, - "mutability": "mutable", - "name": "_lzEndpoint", - "nameLocation": "278:11:42", - "nodeType": "VariableDeclaration", - "scope": 5610, - "src": "270:19:42", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 5597, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "270:7:42", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5600, - "mutability": "mutable", - "name": "_delegate", - "nameLocation": "307:9:42", - "nodeType": "VariableDeclaration", - "scope": 5610, - "src": "299:17:42", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 5599, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "299:7:42", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "200:122:42" - }, - "returnParameters": { - "id": 5608, - "nodeType": "ParameterList", - "parameters": [], - "src": "369:0:42" - }, - "scope": 5624, - "src": "189:182:42", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "public" - }, - { - "body": { - "id": 5622, - "nodeType": "Block", - "src": "428:36:42", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 5618, - "name": "_to", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5612, - "src": "444:3:42", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 5619, - "name": "_amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 5614, - "src": "449:7:42", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 5617, - "name": "_mint", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4558, - "src": "438:5:42", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,uint256)" - } - }, - "id": 5620, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "438:19:42", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 5621, - "nodeType": "ExpressionStatement", - "src": "438:19:42" - } - ] - }, - "functionSelector": "40c10f19", - "id": 5623, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "mint", - "nameLocation": "386:4:42", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 5615, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 5612, - "mutability": "mutable", - "name": "_to", - "nameLocation": "399:3:42", - "nodeType": "VariableDeclaration", - "scope": 5623, - "src": "391:11:42", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 5611, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "391:7:42", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 5614, - "mutability": "mutable", - "name": "_amount", - "nameLocation": "412:7:42", - "nodeType": "VariableDeclaration", - "scope": 5623, - "src": "404:15:42", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 5613, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "404:7:42", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "390:30:42" - }, - "returnParameters": { - "id": 5616, - "nodeType": "ParameterList", - "parameters": [], - "src": "428:0:42" - }, - "scope": 5624, - "src": "377:87:42", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "public" - } - ], - "scope": 5625, - "src": "155:311:42", - "usedErrors": [ - 1517, 1675, 1677, 1850, 1854, 1856, 1858, 1937, 2333, 2335, - 3403, 3409, 3842, 3847, 4078, 4083, 4088, 4097, 4102, 4107, 4836 - ], - "usedEvents": [ - 1864, 1943, 2340, 2788, 3421, 3431, 3853, 4730, 4739 - ] - } - ], - "src": "39:428:42" - }, - "id": 42 - } - }, - "contracts": { - "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol": { - "ILayerZeroEndpointV2": { - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "guid", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint16", - "name": "index", - "type": "uint16" - } - ], - "name": "ComposeDelivered", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "guid", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint16", - "name": "index", - "type": "uint16" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "message", - "type": "bytes" - } - ], - "name": "ComposeSent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "eid", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "newLib", - "type": "address" - } - ], - "name": "DefaultReceiveLibrarySet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "eid", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "oldLib", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "expiry", - "type": "uint256" - } - ], - "name": "DefaultReceiveLibraryTimeoutSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "eid", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "newLib", - "type": "address" - } - ], - "name": "DefaultSendLibrarySet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "delegate", - "type": "address" - } - ], - "name": "DelegateSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - } - ], - "name": "InboundNonceSkipped", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "newLib", - "type": "address" - } - ], - "name": "LibraryRegistered", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "executor", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "guid", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint16", - "name": "index", - "type": "uint16" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "gas", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "message", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "extraData", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "reason", - "type": "bytes" - } - ], - "name": "LzComposeAlert", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "executor", - "type": "address" - }, - { - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - } - ], - "indexed": false, - "internalType": "struct Origin", - "name": "origin", - "type": "tuple" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "guid", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "gas", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "message", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "extraData", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "reason", - "type": "bytes" - } - ], - "name": "LzReceiveAlert", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "token", - "type": "address" - } - ], - "name": "LzTokenSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "payloadHash", - "type": "bytes32" - } - ], - "name": "PacketBurnt", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - } - ], - "indexed": false, - "internalType": "struct Origin", - "name": "origin", - "type": "tuple" - }, - { - "indexed": false, - "internalType": "address", - "name": "receiver", - "type": "address" - } - ], - "name": "PacketDelivered", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "payloadHash", - "type": "bytes32" - } - ], - "name": "PacketNilified", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes", - "name": "encodedPayload", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "options", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "address", - "name": "sendLibrary", - "type": "address" - } - ], - "name": "PacketSent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - } - ], - "indexed": false, - "internalType": "struct Origin", - "name": "origin", - "type": "tuple" - }, - { - "indexed": false, - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "payloadHash", - "type": "bytes32" - } - ], - "name": "PacketVerified", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "eid", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "newLib", - "type": "address" - } - ], - "name": "ReceiveLibrarySet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "eid", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "oldLib", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "timeout", - "type": "uint256" - } - ], - "name": "ReceiveLibraryTimeoutSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "eid", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "newLib", - "type": "address" - } - ], - "name": "SendLibrarySet", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_oapp", - "type": "address" - }, - { - "internalType": "uint32", - "name": "_srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_sender", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "_nonce", - "type": "uint64" - }, - { - "internalType": "bytes32", - "name": "_payloadHash", - "type": "bytes32" - } - ], - "name": "burn", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_oapp", - "type": "address" - }, - { - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - } - ], - "internalType": "struct Origin", - "name": "_origin", - "type": "tuple" - }, - { - "internalType": "bytes32", - "name": "_guid", - "type": "bytes32" - }, - { "internalType": "bytes", "name": "_message", "type": "bytes" } - ], - "name": "clear", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_from", - "type": "address" - }, - { "internalType": "address", "name": "_to", "type": "address" }, - { - "internalType": "bytes32", - "name": "_guid", - "type": "bytes32" - }, - { "internalType": "uint16", "name": "_index", "type": "uint16" } - ], - "name": "composeQueue", - "outputs": [ - { - "internalType": "bytes32", - "name": "messageHash", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" } - ], - "name": "defaultReceiveLibrary", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" } - ], - "name": "defaultReceiveLibraryTimeout", - "outputs": [ - { "internalType": "address", "name": "lib", "type": "address" }, - { - "internalType": "uint256", - "name": "expiry", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" } - ], - "name": "defaultSendLibrary", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "eid", - "outputs": [ - { "internalType": "uint32", "name": "", "type": "uint32" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_oapp", - "type": "address" - }, - { - "internalType": "address", - "name": "_lib", - "type": "address" - }, - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { - "internalType": "uint32", - "name": "_configType", - "type": "uint32" - } - ], - "name": "getConfig", - "outputs": [ - { "internalType": "bytes", "name": "config", "type": "bytes" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_receiver", - "type": "address" - }, - { "internalType": "uint32", "name": "_eid", "type": "uint32" } - ], - "name": "getReceiveLibrary", - "outputs": [ - { "internalType": "address", "name": "lib", "type": "address" }, - { "internalType": "bool", "name": "isDefault", "type": "bool" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getRegisteredLibraries", - "outputs": [ - { "internalType": "address[]", "name": "", "type": "address[]" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getSendContext", - "outputs": [ - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sender", - "type": "address" - }, - { "internalType": "uint32", "name": "_eid", "type": "uint32" } - ], - "name": "getSendLibrary", - "outputs": [ - { "internalType": "address", "name": "lib", "type": "address" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_receiver", - "type": "address" - }, - { - "internalType": "uint32", - "name": "_srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_sender", - "type": "bytes32" - } - ], - "name": "inboundNonce", - "outputs": [ - { "internalType": "uint64", "name": "", "type": "uint64" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_receiver", - "type": "address" - }, - { - "internalType": "uint32", - "name": "_srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_sender", - "type": "bytes32" - }, - { "internalType": "uint64", "name": "_nonce", "type": "uint64" } - ], - "name": "inboundPayloadHash", - "outputs": [ - { "internalType": "bytes32", "name": "", "type": "bytes32" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - } - ], - "internalType": "struct Origin", - "name": "_origin", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_receiver", - "type": "address" - } - ], - "name": "initializable", - "outputs": [ - { "internalType": "bool", "name": "", "type": "bool" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sender", - "type": "address" - }, - { "internalType": "uint32", "name": "_eid", "type": "uint32" } - ], - "name": "isDefaultSendLibrary", - "outputs": [ - { "internalType": "bool", "name": "", "type": "bool" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "_lib", "type": "address" } - ], - "name": "isRegisteredLibrary", - "outputs": [ - { "internalType": "bool", "name": "", "type": "bool" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "isSendingMessage", - "outputs": [ - { "internalType": "bool", "name": "", "type": "bool" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" } - ], - "name": "isSupportedEid", - "outputs": [ - { "internalType": "bool", "name": "", "type": "bool" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_receiver", - "type": "address" - }, - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { "internalType": "address", "name": "_lib", "type": "address" } - ], - "name": "isValidReceiveLibrary", - "outputs": [ - { "internalType": "bool", "name": "", "type": "bool" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_receiver", - "type": "address" - }, - { - "internalType": "uint32", - "name": "_srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_sender", - "type": "bytes32" - } - ], - "name": "lazyInboundNonce", - "outputs": [ - { "internalType": "uint64", "name": "", "type": "uint64" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_from", - "type": "address" - }, - { "internalType": "address", "name": "_to", "type": "address" }, - { - "internalType": "bytes32", - "name": "_guid", - "type": "bytes32" - }, - { - "internalType": "uint16", - "name": "_index", - "type": "uint16" - }, - { - "internalType": "bytes", - "name": "_message", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "lzCompose", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - } - ], - "internalType": "struct Origin", - "name": "_origin", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_receiver", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "_guid", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "_message", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "lzReceive", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "lzToken", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "nativeToken", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sender", - "type": "address" - }, - { - "internalType": "uint32", - "name": "_dstEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_receiver", - "type": "bytes32" - } - ], - "name": "nextGuid", - "outputs": [ - { "internalType": "bytes32", "name": "", "type": "bytes32" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_oapp", - "type": "address" - }, - { - "internalType": "uint32", - "name": "_srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_sender", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "_nonce", - "type": "uint64" - }, - { - "internalType": "bytes32", - "name": "_payloadHash", - "type": "bytes32" - } - ], - "name": "nilify", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sender", - "type": "address" - }, - { - "internalType": "uint32", - "name": "_dstEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_receiver", - "type": "bytes32" - } - ], - "name": "outboundNonce", - "outputs": [ - { "internalType": "uint64", "name": "", "type": "uint64" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "receiver", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "message", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "options", - "type": "bytes" - }, - { - "internalType": "bool", - "name": "payInLzToken", - "type": "bool" - } - ], - "internalType": "struct MessagingParams", - "name": "_params", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_sender", - "type": "address" - } - ], - "name": "quote", - "outputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "nativeFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "lzTokenFee", - "type": "uint256" - } - ], - "internalType": "struct MessagingFee", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_receiver", - "type": "address" - }, - { "internalType": "uint32", "name": "_eid", "type": "uint32" } - ], - "name": "receiveLibraryTimeout", - "outputs": [ - { "internalType": "address", "name": "lib", "type": "address" }, - { - "internalType": "uint256", - "name": "expiry", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "_lib", "type": "address" } - ], - "name": "registerLibrary", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "receiver", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "message", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "options", - "type": "bytes" - }, - { - "internalType": "bool", - "name": "payInLzToken", - "type": "bool" - } - ], - "internalType": "struct MessagingParams", - "name": "_params", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_refundAddress", - "type": "address" - } - ], - "name": "send", - "outputs": [ - { - "components": [ - { - "internalType": "bytes32", - "name": "guid", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "nativeFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "lzTokenFee", - "type": "uint256" - } - ], - "internalType": "struct MessagingFee", - "name": "fee", - "type": "tuple" - } - ], - "internalType": "struct MessagingReceipt", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "_to", "type": "address" }, - { - "internalType": "bytes32", - "name": "_guid", - "type": "bytes32" - }, - { - "internalType": "uint16", - "name": "_index", - "type": "uint16" - }, - { "internalType": "bytes", "name": "_message", "type": "bytes" } - ], - "name": "sendCompose", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_oapp", - "type": "address" - }, - { - "internalType": "address", - "name": "_lib", - "type": "address" - }, - { - "components": [ - { - "internalType": "uint32", - "name": "eid", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "configType", - "type": "uint32" - }, - { - "internalType": "bytes", - "name": "config", - "type": "bytes" - } - ], - "internalType": "struct SetConfigParam[]", - "name": "_params", - "type": "tuple[]" - } - ], - "name": "setConfig", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { - "internalType": "address", - "name": "_newLib", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_gracePeriod", - "type": "uint256" - } - ], - "name": "setDefaultReceiveLibrary", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { - "internalType": "address", - "name": "_lib", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_expiry", - "type": "uint256" - } - ], - "name": "setDefaultReceiveLibraryTimeout", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { - "internalType": "address", - "name": "_newLib", - "type": "address" - } - ], - "name": "setDefaultSendLibrary", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_delegate", - "type": "address" - } - ], - "name": "setDelegate", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_lzToken", - "type": "address" - } - ], - "name": "setLzToken", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_oapp", - "type": "address" - }, - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { - "internalType": "address", - "name": "_newLib", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_gracePeriod", - "type": "uint256" - } - ], - "name": "setReceiveLibrary", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_oapp", - "type": "address" - }, - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { - "internalType": "address", - "name": "_lib", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_expiry", - "type": "uint256" - } - ], - "name": "setReceiveLibraryTimeout", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_oapp", - "type": "address" - }, - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { - "internalType": "address", - "name": "_newLib", - "type": "address" - } - ], - "name": "setSendLibrary", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_oapp", - "type": "address" - }, - { - "internalType": "uint32", - "name": "_srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_sender", - "type": "bytes32" - }, - { "internalType": "uint64", "name": "_nonce", "type": "uint64" } - ], - "name": "skip", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - } - ], - "internalType": "struct Origin", - "name": "_origin", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_receiver", - "type": "address" - } - ], - "name": "verifiable", - "outputs": [ - { "internalType": "bool", "name": "", "type": "bool" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - } - ], - "internalType": "struct Origin", - "name": "_origin", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_receiver", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "_payloadHash", - "type": "bytes32" - } - ], - "name": "verify", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": { - "burn(address,uint32,bytes32,uint64,bytes32)": "40f80683", - "clear(address,(uint32,bytes32,uint64),bytes32,bytes)": "2a56c1b0", - "composeQueue(address,address,bytes32,uint16)": "35d330b0", - "defaultReceiveLibrary(uint32)": "6f50a803", - "defaultReceiveLibraryTimeout(uint32)": "6e83f5bb", - "defaultSendLibrary(uint32)": "f64be4c7", - "eid()": "416ecebf", - "getConfig(address,address,uint32,uint32)": "2b3197b9", - "getReceiveLibrary(address,uint32)": "402f8468", - "getRegisteredLibraries()": "9132e5c3", - "getSendContext()": "14f651a9", - "getSendLibrary(address,uint32)": "b96a277f", - "inboundNonce(address,uint32,bytes32)": "a0dd43fc", - "inboundPayloadHash(address,uint32,bytes32,uint64)": "c9fc7bcd", - "initializable((uint32,bytes32,uint64),address)": "861e1ca5", - "isDefaultSendLibrary(address,uint32)": "dc93c8a2", - "isRegisteredLibrary(address)": "dc706a62", - "isSendingMessage()": "79624ca9", - "isSupportedEid(uint32)": "6750cd4c", - "isValidReceiveLibrary(address,uint32,address)": "9d7f9775", - "lazyInboundNonce(address,uint32,bytes32)": "5b17bb70", - "lzCompose(address,address,bytes32,uint16,bytes,bytes)": "91d20fa1", - "lzReceive((uint32,bytes32,uint64),address,bytes32,bytes,bytes)": "0c0c389e", - "lzToken()": "e4fe1d94", - "nativeToken()": "e1758bd8", - "nextGuid(address,uint32,bytes32)": "aafe5e07", - "nilify(address,uint32,bytes32,uint64,bytes32)": "2e80fbf3", - "outboundNonce(address,uint32,bytes32)": "9c6d7340", - "quote((uint32,bytes32,bytes,bytes,bool),address)": "ddc28c58", - "receiveLibraryTimeout(address,uint32)": "ef667aa1", - "registerLibrary(address)": "e8964e81", - "send((uint32,bytes32,bytes,bytes,bool),address)": "2637a450", - "sendCompose(address,bytes32,uint16,bytes)": "7cb59012", - "setConfig(address,address,(uint32,uint32,bytes)[])": "6dbd9f90", - "setDefaultReceiveLibrary(uint32,address,uint256)": "a718531b", - "setDefaultReceiveLibraryTimeout(uint32,address,uint256)": "d4b4ec8f", - "setDefaultSendLibrary(uint32,address)": "aafea312", - "setDelegate(address)": "ca5eb5e1", - "setLzToken(address)": "c28e0eed", - "setReceiveLibrary(address,uint32,address,uint256)": "6a14d715", - "setReceiveLibraryTimeout(address,uint32,address,uint256)": "183c834f", - "setSendLibrary(address,uint32,address)": "9535ff30", - "skip(address,uint32,bytes32,uint64)": "d70b8902", - "verifiable((uint32,bytes32,uint64),address)": "c9a54a99", - "verify((uint32,bytes32,uint64),address,bytes32)": "a825d747" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"index\",\"type\":\"uint16\"}],\"name\":\"ComposeDelivered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"index\",\"type\":\"uint16\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"ComposeSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newLib\",\"type\":\"address\"}],\"name\":\"DefaultReceiveLibrarySet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldLib\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"expiry\",\"type\":\"uint256\"}],\"name\":\"DefaultReceiveLibraryTimeoutSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newLib\",\"type\":\"address\"}],\"name\":\"DefaultSendLibrarySet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"delegate\",\"type\":\"address\"}],\"name\":\"DelegateSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"name\":\"InboundNonceSkipped\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newLib\",\"type\":\"address\"}],\"name\":\"LibraryRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"executor\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"index\",\"type\":\"uint16\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gas\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"reason\",\"type\":\"bytes\"}],\"name\":\"LzComposeAlert\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"executor\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"indexed\":false,\"internalType\":\"struct Origin\",\"name\":\"origin\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gas\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"reason\",\"type\":\"bytes\"}],\"name\":\"LzReceiveAlert\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"LzTokenSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"payloadHash\",\"type\":\"bytes32\"}],\"name\":\"PacketBurnt\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"indexed\":false,\"internalType\":\"struct Origin\",\"name\":\"origin\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"PacketDelivered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"payloadHash\",\"type\":\"bytes32\"}],\"name\":\"PacketNilified\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"encodedPayload\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"options\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sendLibrary\",\"type\":\"address\"}],\"name\":\"PacketSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"indexed\":false,\"internalType\":\"struct Origin\",\"name\":\"origin\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"payloadHash\",\"type\":\"bytes32\"}],\"name\":\"PacketVerified\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newLib\",\"type\":\"address\"}],\"name\":\"ReceiveLibrarySet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldLib\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timeout\",\"type\":\"uint256\"}],\"name\":\"ReceiveLibraryTimeoutSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newLib\",\"type\":\"address\"}],\"name\":\"SendLibrarySet\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_oapp\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"_nonce\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"_payloadHash\",\"type\":\"bytes32\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_oapp\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"_origin\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"_guid\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"}],\"name\":\"clear\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_guid\",\"type\":\"bytes32\"},{\"internalType\":\"uint16\",\"name\":\"_index\",\"type\":\"uint16\"}],\"name\":\"composeQueue\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageHash\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"}],\"name\":\"defaultReceiveLibrary\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"}],\"name\":\"defaultReceiveLibraryTimeout\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"lib\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"expiry\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"}],\"name\":\"defaultSendLibrary\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"eid\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_oapp\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_lib\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"_configType\",\"type\":\"uint32\"}],\"name\":\"getConfig\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"config\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"}],\"name\":\"getReceiveLibrary\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"lib\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isDefault\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRegisteredLibraries\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSendContext\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"}],\"name\":\"getSendLibrary\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"lib\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_sender\",\"type\":\"bytes32\"}],\"name\":\"inboundNonce\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"_nonce\",\"type\":\"uint64\"}],\"name\":\"inboundPayloadHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"_origin\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"}],\"name\":\"initializable\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"}],\"name\":\"isDefaultSendLibrary\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_lib\",\"type\":\"address\"}],\"name\":\"isRegisteredLibrary\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isSendingMessage\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"}],\"name\":\"isSupportedEid\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"_lib\",\"type\":\"address\"}],\"name\":\"isValidReceiveLibrary\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_sender\",\"type\":\"bytes32\"}],\"name\":\"lazyInboundNonce\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_guid\",\"type\":\"bytes32\"},{\"internalType\":\"uint16\",\"name\":\"_index\",\"type\":\"uint16\"},{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"lzCompose\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"_origin\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_guid\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"lzReceive\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lzToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nativeToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_receiver\",\"type\":\"bytes32\"}],\"name\":\"nextGuid\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_oapp\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"_nonce\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"_payloadHash\",\"type\":\"bytes32\"}],\"name\":\"nilify\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_receiver\",\"type\":\"bytes32\"}],\"name\":\"outboundNonce\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"receiver\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"options\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"payInLzToken\",\"type\":\"bool\"}],\"internalType\":\"struct MessagingParams\",\"name\":\"_params\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"}],\"name\":\"quote\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nativeFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lzTokenFee\",\"type\":\"uint256\"}],\"internalType\":\"struct MessagingFee\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"}],\"name\":\"receiveLibraryTimeout\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"lib\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"expiry\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_lib\",\"type\":\"address\"}],\"name\":\"registerLibrary\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"receiver\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"options\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"payInLzToken\",\"type\":\"bool\"}],\"internalType\":\"struct MessagingParams\",\"name\":\"_params\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"_refundAddress\",\"type\":\"address\"}],\"name\":\"send\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nativeFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lzTokenFee\",\"type\":\"uint256\"}],\"internalType\":\"struct MessagingFee\",\"name\":\"fee\",\"type\":\"tuple\"}],\"internalType\":\"struct MessagingReceipt\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_guid\",\"type\":\"bytes32\"},{\"internalType\":\"uint16\",\"name\":\"_index\",\"type\":\"uint16\"},{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"}],\"name\":\"sendCompose\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_oapp\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_lib\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"configType\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"config\",\"type\":\"bytes\"}],\"internalType\":\"struct SetConfigParam[]\",\"name\":\"_params\",\"type\":\"tuple[]\"}],\"name\":\"setConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"_newLib\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_gracePeriod\",\"type\":\"uint256\"}],\"name\":\"setDefaultReceiveLibrary\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"_lib\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_expiry\",\"type\":\"uint256\"}],\"name\":\"setDefaultReceiveLibraryTimeout\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"_newLib\",\"type\":\"address\"}],\"name\":\"setDefaultSendLibrary\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_delegate\",\"type\":\"address\"}],\"name\":\"setDelegate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_lzToken\",\"type\":\"address\"}],\"name\":\"setLzToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_oapp\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"_newLib\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_gracePeriod\",\"type\":\"uint256\"}],\"name\":\"setReceiveLibrary\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_oapp\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"_lib\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_expiry\",\"type\":\"uint256\"}],\"name\":\"setReceiveLibraryTimeout\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_oapp\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"_newLib\",\"type\":\"address\"}],\"name\":\"setSendLibrary\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_oapp\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"_nonce\",\"type\":\"uint64\"}],\"name\":\"skip\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"_origin\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"}],\"name\":\"verifiable\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"_origin\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_payloadHash\",\"type\":\"bytes32\"}],\"name\":\"verify\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"setSendLibrary(address,uint32,address)\":{\"notice\":\"------------------- OApp interfaces -------------------\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\":\"ILayerZeroEndpointV2\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\nimport { IMessageLibManager } from \\\"./IMessageLibManager.sol\\\";\\nimport { IMessagingComposer } from \\\"./IMessagingComposer.sol\\\";\\nimport { IMessagingChannel } from \\\"./IMessagingChannel.sol\\\";\\nimport { IMessagingContext } from \\\"./IMessagingContext.sol\\\";\\n\\nstruct MessagingParams {\\n uint32 dstEid;\\n bytes32 receiver;\\n bytes message;\\n bytes options;\\n bool payInLzToken;\\n}\\n\\nstruct MessagingReceipt {\\n bytes32 guid;\\n uint64 nonce;\\n MessagingFee fee;\\n}\\n\\nstruct MessagingFee {\\n uint256 nativeFee;\\n uint256 lzTokenFee;\\n}\\n\\nstruct Origin {\\n uint32 srcEid;\\n bytes32 sender;\\n uint64 nonce;\\n}\\n\\ninterface ILayerZeroEndpointV2 is IMessageLibManager, IMessagingComposer, IMessagingChannel, IMessagingContext {\\n event PacketSent(bytes encodedPayload, bytes options, address sendLibrary);\\n\\n event PacketVerified(Origin origin, address receiver, bytes32 payloadHash);\\n\\n event PacketDelivered(Origin origin, address receiver);\\n\\n event LzReceiveAlert(\\n address indexed receiver,\\n address indexed executor,\\n Origin origin,\\n bytes32 guid,\\n uint256 gas,\\n uint256 value,\\n bytes message,\\n bytes extraData,\\n bytes reason\\n );\\n\\n event LzTokenSet(address token);\\n\\n event DelegateSet(address sender, address delegate);\\n\\n function quote(MessagingParams calldata _params, address _sender) external view returns (MessagingFee memory);\\n\\n function send(\\n MessagingParams calldata _params,\\n address _refundAddress\\n ) external payable returns (MessagingReceipt memory);\\n\\n function verify(Origin calldata _origin, address _receiver, bytes32 _payloadHash) external;\\n\\n function verifiable(Origin calldata _origin, address _receiver) external view returns (bool);\\n\\n function initializable(Origin calldata _origin, address _receiver) external view returns (bool);\\n\\n function lzReceive(\\n Origin calldata _origin,\\n address _receiver,\\n bytes32 _guid,\\n bytes calldata _message,\\n bytes calldata _extraData\\n ) external payable;\\n\\n // oapp can burn messages partially by calling this function with its own business logic if messages are verified in order\\n function clear(address _oapp, Origin calldata _origin, bytes32 _guid, bytes calldata _message) external;\\n\\n function setLzToken(address _lzToken) external;\\n\\n function lzToken() external view returns (address);\\n\\n function nativeToken() external view returns (address);\\n\\n function setDelegate(address _delegate) external;\\n}\\n\",\"keccak256\":\"0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\nstruct SetConfigParam {\\n uint32 eid;\\n uint32 configType;\\n bytes config;\\n}\\n\\ninterface IMessageLibManager {\\n struct Timeout {\\n address lib;\\n uint256 expiry;\\n }\\n\\n event LibraryRegistered(address newLib);\\n event DefaultSendLibrarySet(uint32 eid, address newLib);\\n event DefaultReceiveLibrarySet(uint32 eid, address newLib);\\n event DefaultReceiveLibraryTimeoutSet(uint32 eid, address oldLib, uint256 expiry);\\n event SendLibrarySet(address sender, uint32 eid, address newLib);\\n event ReceiveLibrarySet(address receiver, uint32 eid, address newLib);\\n event ReceiveLibraryTimeoutSet(address receiver, uint32 eid, address oldLib, uint256 timeout);\\n\\n function registerLibrary(address _lib) external;\\n\\n function isRegisteredLibrary(address _lib) external view returns (bool);\\n\\n function getRegisteredLibraries() external view returns (address[] memory);\\n\\n function setDefaultSendLibrary(uint32 _eid, address _newLib) external;\\n\\n function defaultSendLibrary(uint32 _eid) external view returns (address);\\n\\n function setDefaultReceiveLibrary(uint32 _eid, address _newLib, uint256 _gracePeriod) external;\\n\\n function defaultReceiveLibrary(uint32 _eid) external view returns (address);\\n\\n function setDefaultReceiveLibraryTimeout(uint32 _eid, address _lib, uint256 _expiry) external;\\n\\n function defaultReceiveLibraryTimeout(uint32 _eid) external view returns (address lib, uint256 expiry);\\n\\n function isSupportedEid(uint32 _eid) external view returns (bool);\\n\\n function isValidReceiveLibrary(address _receiver, uint32 _eid, address _lib) external view returns (bool);\\n\\n /// ------------------- OApp interfaces -------------------\\n function setSendLibrary(address _oapp, uint32 _eid, address _newLib) external;\\n\\n function getSendLibrary(address _sender, uint32 _eid) external view returns (address lib);\\n\\n function isDefaultSendLibrary(address _sender, uint32 _eid) external view returns (bool);\\n\\n function setReceiveLibrary(address _oapp, uint32 _eid, address _newLib, uint256 _gracePeriod) external;\\n\\n function getReceiveLibrary(address _receiver, uint32 _eid) external view returns (address lib, bool isDefault);\\n\\n function setReceiveLibraryTimeout(address _oapp, uint32 _eid, address _lib, uint256 _expiry) external;\\n\\n function receiveLibraryTimeout(address _receiver, uint32 _eid) external view returns (address lib, uint256 expiry);\\n\\n function setConfig(address _oapp, address _lib, SetConfigParam[] calldata _params) external;\\n\\n function getConfig(\\n address _oapp,\\n address _lib,\\n uint32 _eid,\\n uint32 _configType\\n ) external view returns (bytes memory config);\\n}\\n\",\"keccak256\":\"0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\ninterface IMessagingChannel {\\n event InboundNonceSkipped(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce);\\n event PacketNilified(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce, bytes32 payloadHash);\\n event PacketBurnt(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce, bytes32 payloadHash);\\n\\n function eid() external view returns (uint32);\\n\\n // this is an emergency function if a message cannot be verified for some reasons\\n // required to provide _nextNonce to avoid race condition\\n function skip(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce) external;\\n\\n function nilify(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce, bytes32 _payloadHash) external;\\n\\n function burn(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce, bytes32 _payloadHash) external;\\n\\n function nextGuid(address _sender, uint32 _dstEid, bytes32 _receiver) external view returns (bytes32);\\n\\n function inboundNonce(address _receiver, uint32 _srcEid, bytes32 _sender) external view returns (uint64);\\n\\n function outboundNonce(address _sender, uint32 _dstEid, bytes32 _receiver) external view returns (uint64);\\n\\n function inboundPayloadHash(\\n address _receiver,\\n uint32 _srcEid,\\n bytes32 _sender,\\n uint64 _nonce\\n ) external view returns (bytes32);\\n\\n function lazyInboundNonce(address _receiver, uint32 _srcEid, bytes32 _sender) external view returns (uint64);\\n}\\n\",\"keccak256\":\"0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\ninterface IMessagingComposer {\\n event ComposeSent(address from, address to, bytes32 guid, uint16 index, bytes message);\\n event ComposeDelivered(address from, address to, bytes32 guid, uint16 index);\\n event LzComposeAlert(\\n address indexed from,\\n address indexed to,\\n address indexed executor,\\n bytes32 guid,\\n uint16 index,\\n uint256 gas,\\n uint256 value,\\n bytes message,\\n bytes extraData,\\n bytes reason\\n );\\n\\n function composeQueue(\\n address _from,\\n address _to,\\n bytes32 _guid,\\n uint16 _index\\n ) external view returns (bytes32 messageHash);\\n\\n function sendCompose(address _to, bytes32 _guid, uint16 _index, bytes calldata _message) external;\\n\\n function lzCompose(\\n address _from,\\n address _to,\\n bytes32 _guid,\\n uint16 _index,\\n bytes calldata _message,\\n bytes calldata _extraData\\n ) external payable;\\n}\\n\",\"keccak256\":\"0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\ninterface IMessagingContext {\\n function isSendingMessage() external view returns (bool);\\n\\n function getSendContext() external view returns (uint32 dstEid, address sender);\\n}\\n\",\"keccak256\":\"0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e\",\"license\":\"MIT\"}},\"version\":1}", - "storageLayout": { "storage": [], "types": null }, - "userdoc": { - "kind": "user", - "methods": { - "setSendLibrary(address,uint32,address)": { - "notice": "------------------- OApp interfaces -------------------" - } - }, - "version": 1 - } - } - }, - "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol": { - "ILayerZeroReceiver": { - "abi": [ - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - } - ], - "internalType": "struct Origin", - "name": "_origin", - "type": "tuple" - } - ], - "name": "allowInitializePath", - "outputs": [ - { "internalType": "bool", "name": "", "type": "bool" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - } - ], - "internalType": "struct Origin", - "name": "_origin", - "type": "tuple" - }, - { - "internalType": "bytes32", - "name": "_guid", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "_message", - "type": "bytes" - }, - { - "internalType": "address", - "name": "_executor", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "lzReceive", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { - "internalType": "bytes32", - "name": "_sender", - "type": "bytes32" - } - ], - "name": "nextNonce", - "outputs": [ - { "internalType": "uint64", "name": "", "type": "uint64" } - ], - "stateMutability": "view", - "type": "function" - } - ], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": { - "allowInitializePath((uint32,bytes32,uint64))": "ff7bd03d", - "lzReceive((uint32,bytes32,uint64),bytes32,bytes,address,bytes)": "13137d65", - "nextNonce(uint32,bytes32)": "7d25a05e" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"_origin\",\"type\":\"tuple\"}],\"name\":\"allowInitializePath\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"_origin\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"_guid\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"_executor\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"lzReceive\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_sender\",\"type\":\"bytes32\"}],\"name\":\"nextNonce\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol\":\"ILayerZeroReceiver\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\nimport { IMessageLibManager } from \\\"./IMessageLibManager.sol\\\";\\nimport { IMessagingComposer } from \\\"./IMessagingComposer.sol\\\";\\nimport { IMessagingChannel } from \\\"./IMessagingChannel.sol\\\";\\nimport { IMessagingContext } from \\\"./IMessagingContext.sol\\\";\\n\\nstruct MessagingParams {\\n uint32 dstEid;\\n bytes32 receiver;\\n bytes message;\\n bytes options;\\n bool payInLzToken;\\n}\\n\\nstruct MessagingReceipt {\\n bytes32 guid;\\n uint64 nonce;\\n MessagingFee fee;\\n}\\n\\nstruct MessagingFee {\\n uint256 nativeFee;\\n uint256 lzTokenFee;\\n}\\n\\nstruct Origin {\\n uint32 srcEid;\\n bytes32 sender;\\n uint64 nonce;\\n}\\n\\ninterface ILayerZeroEndpointV2 is IMessageLibManager, IMessagingComposer, IMessagingChannel, IMessagingContext {\\n event PacketSent(bytes encodedPayload, bytes options, address sendLibrary);\\n\\n event PacketVerified(Origin origin, address receiver, bytes32 payloadHash);\\n\\n event PacketDelivered(Origin origin, address receiver);\\n\\n event LzReceiveAlert(\\n address indexed receiver,\\n address indexed executor,\\n Origin origin,\\n bytes32 guid,\\n uint256 gas,\\n uint256 value,\\n bytes message,\\n bytes extraData,\\n bytes reason\\n );\\n\\n event LzTokenSet(address token);\\n\\n event DelegateSet(address sender, address delegate);\\n\\n function quote(MessagingParams calldata _params, address _sender) external view returns (MessagingFee memory);\\n\\n function send(\\n MessagingParams calldata _params,\\n address _refundAddress\\n ) external payable returns (MessagingReceipt memory);\\n\\n function verify(Origin calldata _origin, address _receiver, bytes32 _payloadHash) external;\\n\\n function verifiable(Origin calldata _origin, address _receiver) external view returns (bool);\\n\\n function initializable(Origin calldata _origin, address _receiver) external view returns (bool);\\n\\n function lzReceive(\\n Origin calldata _origin,\\n address _receiver,\\n bytes32 _guid,\\n bytes calldata _message,\\n bytes calldata _extraData\\n ) external payable;\\n\\n // oapp can burn messages partially by calling this function with its own business logic if messages are verified in order\\n function clear(address _oapp, Origin calldata _origin, bytes32 _guid, bytes calldata _message) external;\\n\\n function setLzToken(address _lzToken) external;\\n\\n function lzToken() external view returns (address);\\n\\n function nativeToken() external view returns (address);\\n\\n function setDelegate(address _delegate) external;\\n}\\n\",\"keccak256\":\"0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\nimport { Origin } from \\\"./ILayerZeroEndpointV2.sol\\\";\\n\\ninterface ILayerZeroReceiver {\\n function allowInitializePath(Origin calldata _origin) external view returns (bool);\\n\\n function nextNonce(uint32 _eid, bytes32 _sender) external view returns (uint64);\\n\\n function lzReceive(\\n Origin calldata _origin,\\n bytes32 _guid,\\n bytes calldata _message,\\n address _executor,\\n bytes calldata _extraData\\n ) external payable;\\n}\\n\",\"keccak256\":\"0x9641abba8d53b08bb517d1b74801dd15ea7b84d77a6719085bd96c8ea94e3ca0\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\nstruct SetConfigParam {\\n uint32 eid;\\n uint32 configType;\\n bytes config;\\n}\\n\\ninterface IMessageLibManager {\\n struct Timeout {\\n address lib;\\n uint256 expiry;\\n }\\n\\n event LibraryRegistered(address newLib);\\n event DefaultSendLibrarySet(uint32 eid, address newLib);\\n event DefaultReceiveLibrarySet(uint32 eid, address newLib);\\n event DefaultReceiveLibraryTimeoutSet(uint32 eid, address oldLib, uint256 expiry);\\n event SendLibrarySet(address sender, uint32 eid, address newLib);\\n event ReceiveLibrarySet(address receiver, uint32 eid, address newLib);\\n event ReceiveLibraryTimeoutSet(address receiver, uint32 eid, address oldLib, uint256 timeout);\\n\\n function registerLibrary(address _lib) external;\\n\\n function isRegisteredLibrary(address _lib) external view returns (bool);\\n\\n function getRegisteredLibraries() external view returns (address[] memory);\\n\\n function setDefaultSendLibrary(uint32 _eid, address _newLib) external;\\n\\n function defaultSendLibrary(uint32 _eid) external view returns (address);\\n\\n function setDefaultReceiveLibrary(uint32 _eid, address _newLib, uint256 _gracePeriod) external;\\n\\n function defaultReceiveLibrary(uint32 _eid) external view returns (address);\\n\\n function setDefaultReceiveLibraryTimeout(uint32 _eid, address _lib, uint256 _expiry) external;\\n\\n function defaultReceiveLibraryTimeout(uint32 _eid) external view returns (address lib, uint256 expiry);\\n\\n function isSupportedEid(uint32 _eid) external view returns (bool);\\n\\n function isValidReceiveLibrary(address _receiver, uint32 _eid, address _lib) external view returns (bool);\\n\\n /// ------------------- OApp interfaces -------------------\\n function setSendLibrary(address _oapp, uint32 _eid, address _newLib) external;\\n\\n function getSendLibrary(address _sender, uint32 _eid) external view returns (address lib);\\n\\n function isDefaultSendLibrary(address _sender, uint32 _eid) external view returns (bool);\\n\\n function setReceiveLibrary(address _oapp, uint32 _eid, address _newLib, uint256 _gracePeriod) external;\\n\\n function getReceiveLibrary(address _receiver, uint32 _eid) external view returns (address lib, bool isDefault);\\n\\n function setReceiveLibraryTimeout(address _oapp, uint32 _eid, address _lib, uint256 _expiry) external;\\n\\n function receiveLibraryTimeout(address _receiver, uint32 _eid) external view returns (address lib, uint256 expiry);\\n\\n function setConfig(address _oapp, address _lib, SetConfigParam[] calldata _params) external;\\n\\n function getConfig(\\n address _oapp,\\n address _lib,\\n uint32 _eid,\\n uint32 _configType\\n ) external view returns (bytes memory config);\\n}\\n\",\"keccak256\":\"0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\ninterface IMessagingChannel {\\n event InboundNonceSkipped(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce);\\n event PacketNilified(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce, bytes32 payloadHash);\\n event PacketBurnt(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce, bytes32 payloadHash);\\n\\n function eid() external view returns (uint32);\\n\\n // this is an emergency function if a message cannot be verified for some reasons\\n // required to provide _nextNonce to avoid race condition\\n function skip(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce) external;\\n\\n function nilify(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce, bytes32 _payloadHash) external;\\n\\n function burn(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce, bytes32 _payloadHash) external;\\n\\n function nextGuid(address _sender, uint32 _dstEid, bytes32 _receiver) external view returns (bytes32);\\n\\n function inboundNonce(address _receiver, uint32 _srcEid, bytes32 _sender) external view returns (uint64);\\n\\n function outboundNonce(address _sender, uint32 _dstEid, bytes32 _receiver) external view returns (uint64);\\n\\n function inboundPayloadHash(\\n address _receiver,\\n uint32 _srcEid,\\n bytes32 _sender,\\n uint64 _nonce\\n ) external view returns (bytes32);\\n\\n function lazyInboundNonce(address _receiver, uint32 _srcEid, bytes32 _sender) external view returns (uint64);\\n}\\n\",\"keccak256\":\"0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\ninterface IMessagingComposer {\\n event ComposeSent(address from, address to, bytes32 guid, uint16 index, bytes message);\\n event ComposeDelivered(address from, address to, bytes32 guid, uint16 index);\\n event LzComposeAlert(\\n address indexed from,\\n address indexed to,\\n address indexed executor,\\n bytes32 guid,\\n uint16 index,\\n uint256 gas,\\n uint256 value,\\n bytes message,\\n bytes extraData,\\n bytes reason\\n );\\n\\n function composeQueue(\\n address _from,\\n address _to,\\n bytes32 _guid,\\n uint16 _index\\n ) external view returns (bytes32 messageHash);\\n\\n function sendCompose(address _to, bytes32 _guid, uint16 _index, bytes calldata _message) external;\\n\\n function lzCompose(\\n address _from,\\n address _to,\\n bytes32 _guid,\\n uint16 _index,\\n bytes calldata _message,\\n bytes calldata _extraData\\n ) external payable;\\n}\\n\",\"keccak256\":\"0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\ninterface IMessagingContext {\\n function isSendingMessage() external view returns (bool);\\n\\n function getSendContext() external view returns (uint32 dstEid, address sender);\\n}\\n\",\"keccak256\":\"0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e\",\"license\":\"MIT\"}},\"version\":1}", - "storageLayout": { "storage": [], "types": null }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - } - }, - "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol": { - "IMessageLib": { - "abi": [ - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { - "internalType": "address", - "name": "_oapp", - "type": "address" - }, - { - "internalType": "uint32", - "name": "_configType", - "type": "uint32" - } - ], - "name": "getConfig", - "outputs": [ - { "internalType": "bytes", "name": "config", "type": "bytes" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" } - ], - "name": "isSupportedEid", - "outputs": [ - { "internalType": "bool", "name": "", "type": "bool" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "messageLibType", - "outputs": [ - { - "internalType": "enum MessageLibType", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_oapp", - "type": "address" - }, - { - "components": [ - { - "internalType": "uint32", - "name": "eid", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "configType", - "type": "uint32" - }, - { - "internalType": "bytes", - "name": "config", - "type": "bytes" - } - ], - "internalType": "struct SetConfigParam[]", - "name": "_config", - "type": "tuple[]" - } - ], - "name": "setConfig", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { "internalType": "bool", "name": "", "type": "bool" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "version", - "outputs": [ - { "internalType": "uint64", "name": "major", "type": "uint64" }, - { "internalType": "uint8", "name": "minor", "type": "uint8" }, - { - "internalType": "uint8", - "name": "endpointVersion", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "devdoc": { - "kind": "dev", - "methods": { - "supportsInterface(bytes4)": { - "details": "Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section] to learn more about how these ids are created. This function call must use less than 30 000 gas." - } - }, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": { - "getConfig(uint32,address,uint32)": "9c33abf7", - "isSupportedEid(uint32)": "6750cd4c", - "messageLibType()": "1881d94d", - "setConfig(address,(uint32,uint32,bytes)[])": "20efd722", - "supportsInterface(bytes4)": "01ffc9a7", - "version()": "54fd4d50" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"_oapp\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_configType\",\"type\":\"uint32\"}],\"name\":\"getConfig\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"config\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"}],\"name\":\"isSupportedEid\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"messageLibType\",\"outputs\":[{\"internalType\":\"enum MessageLibType\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_oapp\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"configType\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"config\",\"type\":\"bytes\"}],\"internalType\":\"struct SetConfigParam[]\",\"name\":\"_config\",\"type\":\"tuple[]\"}],\"name\":\"setConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"major\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"minor\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"endpointVersion\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"supportsInterface(bytes4)\":{\"details\":\"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section] to learn more about how these ids are created. This function call must use less than 30 000 gas.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol\":\"IMessageLib\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\nimport { IERC165 } from \\\"@openzeppelin/contracts/utils/introspection/IERC165.sol\\\";\\n\\nimport { SetConfigParam } from \\\"./IMessageLibManager.sol\\\";\\n\\nenum MessageLibType {\\n Send,\\n Receive,\\n SendAndReceive\\n}\\n\\ninterface IMessageLib is IERC165 {\\n function setConfig(address _oapp, SetConfigParam[] calldata _config) external;\\n\\n function getConfig(uint32 _eid, address _oapp, uint32 _configType) external view returns (bytes memory config);\\n\\n function isSupportedEid(uint32 _eid) external view returns (bool);\\n\\n // message libs of same major version are compatible\\n function version() external view returns (uint64 major, uint8 minor, uint8 endpointVersion);\\n\\n function messageLibType() external view returns (MessageLibType);\\n}\\n\",\"keccak256\":\"0x5cf5f24751b4e3ea1c9c5ded07cedfdfd62566b6daaffcc0144733859c9dba0c\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\nstruct SetConfigParam {\\n uint32 eid;\\n uint32 configType;\\n bytes config;\\n}\\n\\ninterface IMessageLibManager {\\n struct Timeout {\\n address lib;\\n uint256 expiry;\\n }\\n\\n event LibraryRegistered(address newLib);\\n event DefaultSendLibrarySet(uint32 eid, address newLib);\\n event DefaultReceiveLibrarySet(uint32 eid, address newLib);\\n event DefaultReceiveLibraryTimeoutSet(uint32 eid, address oldLib, uint256 expiry);\\n event SendLibrarySet(address sender, uint32 eid, address newLib);\\n event ReceiveLibrarySet(address receiver, uint32 eid, address newLib);\\n event ReceiveLibraryTimeoutSet(address receiver, uint32 eid, address oldLib, uint256 timeout);\\n\\n function registerLibrary(address _lib) external;\\n\\n function isRegisteredLibrary(address _lib) external view returns (bool);\\n\\n function getRegisteredLibraries() external view returns (address[] memory);\\n\\n function setDefaultSendLibrary(uint32 _eid, address _newLib) external;\\n\\n function defaultSendLibrary(uint32 _eid) external view returns (address);\\n\\n function setDefaultReceiveLibrary(uint32 _eid, address _newLib, uint256 _gracePeriod) external;\\n\\n function defaultReceiveLibrary(uint32 _eid) external view returns (address);\\n\\n function setDefaultReceiveLibraryTimeout(uint32 _eid, address _lib, uint256 _expiry) external;\\n\\n function defaultReceiveLibraryTimeout(uint32 _eid) external view returns (address lib, uint256 expiry);\\n\\n function isSupportedEid(uint32 _eid) external view returns (bool);\\n\\n function isValidReceiveLibrary(address _receiver, uint32 _eid, address _lib) external view returns (bool);\\n\\n /// ------------------- OApp interfaces -------------------\\n function setSendLibrary(address _oapp, uint32 _eid, address _newLib) external;\\n\\n function getSendLibrary(address _sender, uint32 _eid) external view returns (address lib);\\n\\n function isDefaultSendLibrary(address _sender, uint32 _eid) external view returns (bool);\\n\\n function setReceiveLibrary(address _oapp, uint32 _eid, address _newLib, uint256 _gracePeriod) external;\\n\\n function getReceiveLibrary(address _receiver, uint32 _eid) external view returns (address lib, bool isDefault);\\n\\n function setReceiveLibraryTimeout(address _oapp, uint32 _eid, address _lib, uint256 _expiry) external;\\n\\n function receiveLibraryTimeout(address _receiver, uint32 _eid) external view returns (address lib, uint256 expiry);\\n\\n function setConfig(address _oapp, address _lib, SetConfigParam[] calldata _params) external;\\n\\n function getConfig(\\n address _oapp,\\n address _lib,\\n uint32 _eid,\\n uint32 _configType\\n ) external view returns (bytes memory config);\\n}\\n\",\"keccak256\":\"0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/introspection/IERC165.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Interface of the ERC-165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[ERC].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\"}},\"version\":1}", - "storageLayout": { "storage": [], "types": null }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - } - }, - "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol": { - "IMessageLibManager": { - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "eid", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "newLib", - "type": "address" - } - ], - "name": "DefaultReceiveLibrarySet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "eid", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "oldLib", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "expiry", - "type": "uint256" - } - ], - "name": "DefaultReceiveLibraryTimeoutSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "eid", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "newLib", - "type": "address" - } - ], - "name": "DefaultSendLibrarySet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "newLib", - "type": "address" - } - ], - "name": "LibraryRegistered", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "eid", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "newLib", - "type": "address" - } - ], - "name": "ReceiveLibrarySet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "eid", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "oldLib", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "timeout", - "type": "uint256" - } - ], - "name": "ReceiveLibraryTimeoutSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "eid", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "address", - "name": "newLib", - "type": "address" - } - ], - "name": "SendLibrarySet", - "type": "event" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" } - ], - "name": "defaultReceiveLibrary", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" } - ], - "name": "defaultReceiveLibraryTimeout", - "outputs": [ - { "internalType": "address", "name": "lib", "type": "address" }, - { - "internalType": "uint256", - "name": "expiry", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" } - ], - "name": "defaultSendLibrary", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_oapp", - "type": "address" - }, - { - "internalType": "address", - "name": "_lib", - "type": "address" - }, - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { - "internalType": "uint32", - "name": "_configType", - "type": "uint32" - } - ], - "name": "getConfig", - "outputs": [ - { "internalType": "bytes", "name": "config", "type": "bytes" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_receiver", - "type": "address" - }, - { "internalType": "uint32", "name": "_eid", "type": "uint32" } - ], - "name": "getReceiveLibrary", - "outputs": [ - { "internalType": "address", "name": "lib", "type": "address" }, - { "internalType": "bool", "name": "isDefault", "type": "bool" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getRegisteredLibraries", - "outputs": [ - { "internalType": "address[]", "name": "", "type": "address[]" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sender", - "type": "address" - }, - { "internalType": "uint32", "name": "_eid", "type": "uint32" } - ], - "name": "getSendLibrary", - "outputs": [ - { "internalType": "address", "name": "lib", "type": "address" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sender", - "type": "address" - }, - { "internalType": "uint32", "name": "_eid", "type": "uint32" } - ], - "name": "isDefaultSendLibrary", - "outputs": [ - { "internalType": "bool", "name": "", "type": "bool" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "_lib", "type": "address" } - ], - "name": "isRegisteredLibrary", - "outputs": [ - { "internalType": "bool", "name": "", "type": "bool" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" } - ], - "name": "isSupportedEid", - "outputs": [ - { "internalType": "bool", "name": "", "type": "bool" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_receiver", - "type": "address" - }, - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { "internalType": "address", "name": "_lib", "type": "address" } - ], - "name": "isValidReceiveLibrary", - "outputs": [ - { "internalType": "bool", "name": "", "type": "bool" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_receiver", - "type": "address" - }, - { "internalType": "uint32", "name": "_eid", "type": "uint32" } - ], - "name": "receiveLibraryTimeout", - "outputs": [ - { "internalType": "address", "name": "lib", "type": "address" }, - { - "internalType": "uint256", - "name": "expiry", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "_lib", "type": "address" } - ], - "name": "registerLibrary", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_oapp", - "type": "address" - }, - { - "internalType": "address", - "name": "_lib", - "type": "address" - }, - { - "components": [ - { - "internalType": "uint32", - "name": "eid", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "configType", - "type": "uint32" - }, - { - "internalType": "bytes", - "name": "config", - "type": "bytes" - } - ], - "internalType": "struct SetConfigParam[]", - "name": "_params", - "type": "tuple[]" - } - ], - "name": "setConfig", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { - "internalType": "address", - "name": "_newLib", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_gracePeriod", - "type": "uint256" - } - ], - "name": "setDefaultReceiveLibrary", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { - "internalType": "address", - "name": "_lib", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_expiry", - "type": "uint256" - } - ], - "name": "setDefaultReceiveLibraryTimeout", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { - "internalType": "address", - "name": "_newLib", - "type": "address" - } - ], - "name": "setDefaultSendLibrary", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_oapp", - "type": "address" - }, - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { - "internalType": "address", - "name": "_newLib", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_gracePeriod", - "type": "uint256" - } - ], - "name": "setReceiveLibrary", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_oapp", - "type": "address" - }, - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { - "internalType": "address", - "name": "_lib", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_expiry", - "type": "uint256" - } - ], - "name": "setReceiveLibraryTimeout", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_oapp", - "type": "address" - }, - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { - "internalType": "address", - "name": "_newLib", - "type": "address" - } - ], - "name": "setSendLibrary", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": { - "defaultReceiveLibrary(uint32)": "6f50a803", - "defaultReceiveLibraryTimeout(uint32)": "6e83f5bb", - "defaultSendLibrary(uint32)": "f64be4c7", - "getConfig(address,address,uint32,uint32)": "2b3197b9", - "getReceiveLibrary(address,uint32)": "402f8468", - "getRegisteredLibraries()": "9132e5c3", - "getSendLibrary(address,uint32)": "b96a277f", - "isDefaultSendLibrary(address,uint32)": "dc93c8a2", - "isRegisteredLibrary(address)": "dc706a62", - "isSupportedEid(uint32)": "6750cd4c", - "isValidReceiveLibrary(address,uint32,address)": "9d7f9775", - "receiveLibraryTimeout(address,uint32)": "ef667aa1", - "registerLibrary(address)": "e8964e81", - "setConfig(address,address,(uint32,uint32,bytes)[])": "6dbd9f90", - "setDefaultReceiveLibrary(uint32,address,uint256)": "a718531b", - "setDefaultReceiveLibraryTimeout(uint32,address,uint256)": "d4b4ec8f", - "setDefaultSendLibrary(uint32,address)": "aafea312", - "setReceiveLibrary(address,uint32,address,uint256)": "6a14d715", - "setReceiveLibraryTimeout(address,uint32,address,uint256)": "183c834f", - "setSendLibrary(address,uint32,address)": "9535ff30" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newLib\",\"type\":\"address\"}],\"name\":\"DefaultReceiveLibrarySet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldLib\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"expiry\",\"type\":\"uint256\"}],\"name\":\"DefaultReceiveLibraryTimeoutSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newLib\",\"type\":\"address\"}],\"name\":\"DefaultSendLibrarySet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newLib\",\"type\":\"address\"}],\"name\":\"LibraryRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newLib\",\"type\":\"address\"}],\"name\":\"ReceiveLibrarySet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldLib\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timeout\",\"type\":\"uint256\"}],\"name\":\"ReceiveLibraryTimeoutSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newLib\",\"type\":\"address\"}],\"name\":\"SendLibrarySet\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"}],\"name\":\"defaultReceiveLibrary\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"}],\"name\":\"defaultReceiveLibraryTimeout\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"lib\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"expiry\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"}],\"name\":\"defaultSendLibrary\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_oapp\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_lib\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"_configType\",\"type\":\"uint32\"}],\"name\":\"getConfig\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"config\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"}],\"name\":\"getReceiveLibrary\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"lib\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isDefault\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRegisteredLibraries\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"}],\"name\":\"getSendLibrary\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"lib\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"}],\"name\":\"isDefaultSendLibrary\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_lib\",\"type\":\"address\"}],\"name\":\"isRegisteredLibrary\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"}],\"name\":\"isSupportedEid\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"_lib\",\"type\":\"address\"}],\"name\":\"isValidReceiveLibrary\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"}],\"name\":\"receiveLibraryTimeout\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"lib\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"expiry\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_lib\",\"type\":\"address\"}],\"name\":\"registerLibrary\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_oapp\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_lib\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"configType\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"config\",\"type\":\"bytes\"}],\"internalType\":\"struct SetConfigParam[]\",\"name\":\"_params\",\"type\":\"tuple[]\"}],\"name\":\"setConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"_newLib\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_gracePeriod\",\"type\":\"uint256\"}],\"name\":\"setDefaultReceiveLibrary\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"_lib\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_expiry\",\"type\":\"uint256\"}],\"name\":\"setDefaultReceiveLibraryTimeout\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"_newLib\",\"type\":\"address\"}],\"name\":\"setDefaultSendLibrary\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_oapp\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"_newLib\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_gracePeriod\",\"type\":\"uint256\"}],\"name\":\"setReceiveLibrary\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_oapp\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"_lib\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_expiry\",\"type\":\"uint256\"}],\"name\":\"setReceiveLibraryTimeout\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_oapp\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"_newLib\",\"type\":\"address\"}],\"name\":\"setSendLibrary\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"setSendLibrary(address,uint32,address)\":{\"notice\":\"------------------- OApp interfaces -------------------\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol\":\"IMessageLibManager\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\nstruct SetConfigParam {\\n uint32 eid;\\n uint32 configType;\\n bytes config;\\n}\\n\\ninterface IMessageLibManager {\\n struct Timeout {\\n address lib;\\n uint256 expiry;\\n }\\n\\n event LibraryRegistered(address newLib);\\n event DefaultSendLibrarySet(uint32 eid, address newLib);\\n event DefaultReceiveLibrarySet(uint32 eid, address newLib);\\n event DefaultReceiveLibraryTimeoutSet(uint32 eid, address oldLib, uint256 expiry);\\n event SendLibrarySet(address sender, uint32 eid, address newLib);\\n event ReceiveLibrarySet(address receiver, uint32 eid, address newLib);\\n event ReceiveLibraryTimeoutSet(address receiver, uint32 eid, address oldLib, uint256 timeout);\\n\\n function registerLibrary(address _lib) external;\\n\\n function isRegisteredLibrary(address _lib) external view returns (bool);\\n\\n function getRegisteredLibraries() external view returns (address[] memory);\\n\\n function setDefaultSendLibrary(uint32 _eid, address _newLib) external;\\n\\n function defaultSendLibrary(uint32 _eid) external view returns (address);\\n\\n function setDefaultReceiveLibrary(uint32 _eid, address _newLib, uint256 _gracePeriod) external;\\n\\n function defaultReceiveLibrary(uint32 _eid) external view returns (address);\\n\\n function setDefaultReceiveLibraryTimeout(uint32 _eid, address _lib, uint256 _expiry) external;\\n\\n function defaultReceiveLibraryTimeout(uint32 _eid) external view returns (address lib, uint256 expiry);\\n\\n function isSupportedEid(uint32 _eid) external view returns (bool);\\n\\n function isValidReceiveLibrary(address _receiver, uint32 _eid, address _lib) external view returns (bool);\\n\\n /// ------------------- OApp interfaces -------------------\\n function setSendLibrary(address _oapp, uint32 _eid, address _newLib) external;\\n\\n function getSendLibrary(address _sender, uint32 _eid) external view returns (address lib);\\n\\n function isDefaultSendLibrary(address _sender, uint32 _eid) external view returns (bool);\\n\\n function setReceiveLibrary(address _oapp, uint32 _eid, address _newLib, uint256 _gracePeriod) external;\\n\\n function getReceiveLibrary(address _receiver, uint32 _eid) external view returns (address lib, bool isDefault);\\n\\n function setReceiveLibraryTimeout(address _oapp, uint32 _eid, address _lib, uint256 _expiry) external;\\n\\n function receiveLibraryTimeout(address _receiver, uint32 _eid) external view returns (address lib, uint256 expiry);\\n\\n function setConfig(address _oapp, address _lib, SetConfigParam[] calldata _params) external;\\n\\n function getConfig(\\n address _oapp,\\n address _lib,\\n uint32 _eid,\\n uint32 _configType\\n ) external view returns (bytes memory config);\\n}\\n\",\"keccak256\":\"0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc\",\"license\":\"MIT\"}},\"version\":1}", - "storageLayout": { "storage": [], "types": null }, - "userdoc": { - "kind": "user", - "methods": { - "setSendLibrary(address,uint32,address)": { - "notice": "------------------- OApp interfaces -------------------" - } - }, - "version": 1 - } - } - }, - "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol": { - "IMessagingChannel": { - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - } - ], - "name": "InboundNonceSkipped", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "payloadHash", - "type": "bytes32" - } - ], - "name": "PacketBurnt", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "payloadHash", - "type": "bytes32" - } - ], - "name": "PacketNilified", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_oapp", - "type": "address" - }, - { - "internalType": "uint32", - "name": "_srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_sender", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "_nonce", - "type": "uint64" - }, - { - "internalType": "bytes32", - "name": "_payloadHash", - "type": "bytes32" - } - ], - "name": "burn", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "eid", - "outputs": [ - { "internalType": "uint32", "name": "", "type": "uint32" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_receiver", - "type": "address" - }, - { - "internalType": "uint32", - "name": "_srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_sender", - "type": "bytes32" - } - ], - "name": "inboundNonce", - "outputs": [ - { "internalType": "uint64", "name": "", "type": "uint64" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_receiver", - "type": "address" - }, - { - "internalType": "uint32", - "name": "_srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_sender", - "type": "bytes32" - }, - { "internalType": "uint64", "name": "_nonce", "type": "uint64" } - ], - "name": "inboundPayloadHash", - "outputs": [ - { "internalType": "bytes32", "name": "", "type": "bytes32" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_receiver", - "type": "address" - }, - { - "internalType": "uint32", - "name": "_srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_sender", - "type": "bytes32" - } - ], - "name": "lazyInboundNonce", - "outputs": [ - { "internalType": "uint64", "name": "", "type": "uint64" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sender", - "type": "address" - }, - { - "internalType": "uint32", - "name": "_dstEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_receiver", - "type": "bytes32" - } - ], - "name": "nextGuid", - "outputs": [ - { "internalType": "bytes32", "name": "", "type": "bytes32" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_oapp", - "type": "address" - }, - { - "internalType": "uint32", - "name": "_srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_sender", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "_nonce", - "type": "uint64" - }, - { - "internalType": "bytes32", - "name": "_payloadHash", - "type": "bytes32" - } - ], - "name": "nilify", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sender", - "type": "address" - }, - { - "internalType": "uint32", - "name": "_dstEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_receiver", - "type": "bytes32" - } - ], - "name": "outboundNonce", - "outputs": [ - { "internalType": "uint64", "name": "", "type": "uint64" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_oapp", - "type": "address" - }, - { - "internalType": "uint32", - "name": "_srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_sender", - "type": "bytes32" - }, - { "internalType": "uint64", "name": "_nonce", "type": "uint64" } - ], - "name": "skip", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": { - "burn(address,uint32,bytes32,uint64,bytes32)": "40f80683", - "eid()": "416ecebf", - "inboundNonce(address,uint32,bytes32)": "a0dd43fc", - "inboundPayloadHash(address,uint32,bytes32,uint64)": "c9fc7bcd", - "lazyInboundNonce(address,uint32,bytes32)": "5b17bb70", - "nextGuid(address,uint32,bytes32)": "aafe5e07", - "nilify(address,uint32,bytes32,uint64,bytes32)": "2e80fbf3", - "outboundNonce(address,uint32,bytes32)": "9c6d7340", - "skip(address,uint32,bytes32,uint64)": "d70b8902" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"name\":\"InboundNonceSkipped\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"payloadHash\",\"type\":\"bytes32\"}],\"name\":\"PacketBurnt\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"payloadHash\",\"type\":\"bytes32\"}],\"name\":\"PacketNilified\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_oapp\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"_nonce\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"_payloadHash\",\"type\":\"bytes32\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"eid\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_sender\",\"type\":\"bytes32\"}],\"name\":\"inboundNonce\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"_nonce\",\"type\":\"uint64\"}],\"name\":\"inboundPayloadHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_sender\",\"type\":\"bytes32\"}],\"name\":\"lazyInboundNonce\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_receiver\",\"type\":\"bytes32\"}],\"name\":\"nextGuid\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_oapp\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"_nonce\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"_payloadHash\",\"type\":\"bytes32\"}],\"name\":\"nilify\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_receiver\",\"type\":\"bytes32\"}],\"name\":\"outboundNonce\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_oapp\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"_nonce\",\"type\":\"uint64\"}],\"name\":\"skip\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol\":\"IMessagingChannel\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\ninterface IMessagingChannel {\\n event InboundNonceSkipped(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce);\\n event PacketNilified(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce, bytes32 payloadHash);\\n event PacketBurnt(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce, bytes32 payloadHash);\\n\\n function eid() external view returns (uint32);\\n\\n // this is an emergency function if a message cannot be verified for some reasons\\n // required to provide _nextNonce to avoid race condition\\n function skip(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce) external;\\n\\n function nilify(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce, bytes32 _payloadHash) external;\\n\\n function burn(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce, bytes32 _payloadHash) external;\\n\\n function nextGuid(address _sender, uint32 _dstEid, bytes32 _receiver) external view returns (bytes32);\\n\\n function inboundNonce(address _receiver, uint32 _srcEid, bytes32 _sender) external view returns (uint64);\\n\\n function outboundNonce(address _sender, uint32 _dstEid, bytes32 _receiver) external view returns (uint64);\\n\\n function inboundPayloadHash(\\n address _receiver,\\n uint32 _srcEid,\\n bytes32 _sender,\\n uint64 _nonce\\n ) external view returns (bytes32);\\n\\n function lazyInboundNonce(address _receiver, uint32 _srcEid, bytes32 _sender) external view returns (uint64);\\n}\\n\",\"keccak256\":\"0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972\",\"license\":\"MIT\"}},\"version\":1}", - "storageLayout": { "storage": [], "types": null }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - } - }, - "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol": { - "IMessagingComposer": { - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "guid", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint16", - "name": "index", - "type": "uint16" - } - ], - "name": "ComposeDelivered", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "guid", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint16", - "name": "index", - "type": "uint16" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "message", - "type": "bytes" - } - ], - "name": "ComposeSent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "executor", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "guid", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint16", - "name": "index", - "type": "uint16" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "gas", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "message", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "extraData", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "reason", - "type": "bytes" - } - ], - "name": "LzComposeAlert", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_from", - "type": "address" - }, - { "internalType": "address", "name": "_to", "type": "address" }, - { - "internalType": "bytes32", - "name": "_guid", - "type": "bytes32" - }, - { "internalType": "uint16", "name": "_index", "type": "uint16" } - ], - "name": "composeQueue", - "outputs": [ - { - "internalType": "bytes32", - "name": "messageHash", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_from", - "type": "address" - }, - { "internalType": "address", "name": "_to", "type": "address" }, - { - "internalType": "bytes32", - "name": "_guid", - "type": "bytes32" - }, - { - "internalType": "uint16", - "name": "_index", - "type": "uint16" - }, - { - "internalType": "bytes", - "name": "_message", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "lzCompose", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "_to", "type": "address" }, - { - "internalType": "bytes32", - "name": "_guid", - "type": "bytes32" - }, - { - "internalType": "uint16", - "name": "_index", - "type": "uint16" - }, - { "internalType": "bytes", "name": "_message", "type": "bytes" } - ], - "name": "sendCompose", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": { - "composeQueue(address,address,bytes32,uint16)": "35d330b0", - "lzCompose(address,address,bytes32,uint16,bytes,bytes)": "91d20fa1", - "sendCompose(address,bytes32,uint16,bytes)": "7cb59012" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"index\",\"type\":\"uint16\"}],\"name\":\"ComposeDelivered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"index\",\"type\":\"uint16\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"ComposeSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"executor\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"index\",\"type\":\"uint16\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gas\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"reason\",\"type\":\"bytes\"}],\"name\":\"LzComposeAlert\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_guid\",\"type\":\"bytes32\"},{\"internalType\":\"uint16\",\"name\":\"_index\",\"type\":\"uint16\"}],\"name\":\"composeQueue\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageHash\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_guid\",\"type\":\"bytes32\"},{\"internalType\":\"uint16\",\"name\":\"_index\",\"type\":\"uint16\"},{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"lzCompose\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_guid\",\"type\":\"bytes32\"},{\"internalType\":\"uint16\",\"name\":\"_index\",\"type\":\"uint16\"},{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"}],\"name\":\"sendCompose\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol\":\"IMessagingComposer\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\ninterface IMessagingComposer {\\n event ComposeSent(address from, address to, bytes32 guid, uint16 index, bytes message);\\n event ComposeDelivered(address from, address to, bytes32 guid, uint16 index);\\n event LzComposeAlert(\\n address indexed from,\\n address indexed to,\\n address indexed executor,\\n bytes32 guid,\\n uint16 index,\\n uint256 gas,\\n uint256 value,\\n bytes message,\\n bytes extraData,\\n bytes reason\\n );\\n\\n function composeQueue(\\n address _from,\\n address _to,\\n bytes32 _guid,\\n uint16 _index\\n ) external view returns (bytes32 messageHash);\\n\\n function sendCompose(address _to, bytes32 _guid, uint16 _index, bytes calldata _message) external;\\n\\n function lzCompose(\\n address _from,\\n address _to,\\n bytes32 _guid,\\n uint16 _index,\\n bytes calldata _message,\\n bytes calldata _extraData\\n ) external payable;\\n}\\n\",\"keccak256\":\"0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901\",\"license\":\"MIT\"}},\"version\":1}", - "storageLayout": { "storage": [], "types": null }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - } - }, - "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol": { - "IMessagingContext": { - "abi": [ - { - "inputs": [], - "name": "getSendContext", - "outputs": [ - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "isSendingMessage", - "outputs": [ - { "internalType": "bool", "name": "", "type": "bool" } - ], - "stateMutability": "view", - "type": "function" - } - ], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": { - "getSendContext()": "14f651a9", - "isSendingMessage()": "79624ca9" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"getSendContext\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isSendingMessage\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol\":\"IMessagingContext\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\ninterface IMessagingContext {\\n function isSendingMessage() external view returns (bool);\\n\\n function getSendContext() external view returns (uint32 dstEid, address sender);\\n}\\n\",\"keccak256\":\"0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e\",\"license\":\"MIT\"}},\"version\":1}", - "storageLayout": { "storage": [], "types": null }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - } - }, - "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol": { - "ISendLib": { - "abi": [ - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { - "internalType": "address", - "name": "_oapp", - "type": "address" - }, - { - "internalType": "uint32", - "name": "_configType", - "type": "uint32" - } - ], - "name": "getConfig", - "outputs": [ - { "internalType": "bytes", "name": "config", "type": "bytes" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" } - ], - "name": "isSupportedEid", - "outputs": [ - { "internalType": "bool", "name": "", "type": "bool" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "messageLibType", - "outputs": [ - { - "internalType": "enum MessageLibType", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - }, - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "receiver", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "guid", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "message", - "type": "bytes" - } - ], - "internalType": "struct Packet", - "name": "_packet", - "type": "tuple" - }, - { - "internalType": "bytes", - "name": "_options", - "type": "bytes" - }, - { - "internalType": "bool", - "name": "_payInLzToken", - "type": "bool" - } - ], - "name": "quote", - "outputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "nativeFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "lzTokenFee", - "type": "uint256" - } - ], - "internalType": "struct MessagingFee", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - }, - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "receiver", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "guid", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "message", - "type": "bytes" - } - ], - "internalType": "struct Packet", - "name": "_packet", - "type": "tuple" - }, - { - "internalType": "bytes", - "name": "_options", - "type": "bytes" - }, - { - "internalType": "bool", - "name": "_payInLzToken", - "type": "bool" - } - ], - "name": "send", - "outputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "nativeFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "lzTokenFee", - "type": "uint256" - } - ], - "internalType": "struct MessagingFee", - "name": "", - "type": "tuple" - }, - { - "internalType": "bytes", - "name": "encodedPacket", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_oapp", - "type": "address" - }, - { - "components": [ - { - "internalType": "uint32", - "name": "eid", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "configType", - "type": "uint32" - }, - { - "internalType": "bytes", - "name": "config", - "type": "bytes" - } - ], - "internalType": "struct SetConfigParam[]", - "name": "_config", - "type": "tuple[]" - } - ], - "name": "setConfig", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_treasury", - "type": "address" - } - ], - "name": "setTreasury", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { "internalType": "bool", "name": "", "type": "bool" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "version", - "outputs": [ - { "internalType": "uint64", "name": "major", "type": "uint64" }, - { "internalType": "uint8", "name": "minor", "type": "uint8" }, - { - "internalType": "uint8", - "name": "endpointVersion", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "_to", "type": "address" }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "withdrawFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_lzToken", - "type": "address" - }, - { "internalType": "address", "name": "_to", "type": "address" }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "withdrawLzTokenFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "devdoc": { - "kind": "dev", - "methods": { - "supportsInterface(bytes4)": { - "details": "Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section] to learn more about how these ids are created. This function call must use less than 30 000 gas." - } - }, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": { - "getConfig(uint32,address,uint32)": "9c33abf7", - "isSupportedEid(uint32)": "6750cd4c", - "messageLibType()": "1881d94d", - "quote((uint64,uint32,address,uint32,bytes32,bytes32,bytes),bytes,bool)": "d80e9bd9", - "send((uint64,uint32,address,uint32,bytes32,bytes32,bytes),bytes,bool)": "4389e58f", - "setConfig(address,(uint32,uint32,bytes)[])": "20efd722", - "setTreasury(address)": "f0f44260", - "supportsInterface(bytes4)": "01ffc9a7", - "version()": "54fd4d50", - "withdrawFee(address,uint256)": "fd9be522", - "withdrawLzTokenFee(address,address,uint256)": "200175f7" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"_oapp\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_configType\",\"type\":\"uint32\"}],\"name\":\"getConfig\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"config\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"}],\"name\":\"isSupportedEid\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"messageLibType\",\"outputs\":[{\"internalType\":\"enum MessageLibType\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"receiver\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"internalType\":\"struct Packet\",\"name\":\"_packet\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"_options\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"_payInLzToken\",\"type\":\"bool\"}],\"name\":\"quote\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nativeFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lzTokenFee\",\"type\":\"uint256\"}],\"internalType\":\"struct MessagingFee\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"receiver\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"internalType\":\"struct Packet\",\"name\":\"_packet\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"_options\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"_payInLzToken\",\"type\":\"bool\"}],\"name\":\"send\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nativeFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lzTokenFee\",\"type\":\"uint256\"}],\"internalType\":\"struct MessagingFee\",\"name\":\"\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"encodedPacket\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_oapp\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"configType\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"config\",\"type\":\"bytes\"}],\"internalType\":\"struct SetConfigParam[]\",\"name\":\"_config\",\"type\":\"tuple[]\"}],\"name\":\"setConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_treasury\",\"type\":\"address\"}],\"name\":\"setTreasury\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"major\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"minor\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"endpointVersion\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"withdrawFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_lzToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"withdrawLzTokenFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"supportsInterface(bytes4)\":{\"details\":\"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section] to learn more about how these ids are created. This function call must use less than 30 000 gas.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol\":\"ISendLib\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\nimport { IMessageLibManager } from \\\"./IMessageLibManager.sol\\\";\\nimport { IMessagingComposer } from \\\"./IMessagingComposer.sol\\\";\\nimport { IMessagingChannel } from \\\"./IMessagingChannel.sol\\\";\\nimport { IMessagingContext } from \\\"./IMessagingContext.sol\\\";\\n\\nstruct MessagingParams {\\n uint32 dstEid;\\n bytes32 receiver;\\n bytes message;\\n bytes options;\\n bool payInLzToken;\\n}\\n\\nstruct MessagingReceipt {\\n bytes32 guid;\\n uint64 nonce;\\n MessagingFee fee;\\n}\\n\\nstruct MessagingFee {\\n uint256 nativeFee;\\n uint256 lzTokenFee;\\n}\\n\\nstruct Origin {\\n uint32 srcEid;\\n bytes32 sender;\\n uint64 nonce;\\n}\\n\\ninterface ILayerZeroEndpointV2 is IMessageLibManager, IMessagingComposer, IMessagingChannel, IMessagingContext {\\n event PacketSent(bytes encodedPayload, bytes options, address sendLibrary);\\n\\n event PacketVerified(Origin origin, address receiver, bytes32 payloadHash);\\n\\n event PacketDelivered(Origin origin, address receiver);\\n\\n event LzReceiveAlert(\\n address indexed receiver,\\n address indexed executor,\\n Origin origin,\\n bytes32 guid,\\n uint256 gas,\\n uint256 value,\\n bytes message,\\n bytes extraData,\\n bytes reason\\n );\\n\\n event LzTokenSet(address token);\\n\\n event DelegateSet(address sender, address delegate);\\n\\n function quote(MessagingParams calldata _params, address _sender) external view returns (MessagingFee memory);\\n\\n function send(\\n MessagingParams calldata _params,\\n address _refundAddress\\n ) external payable returns (MessagingReceipt memory);\\n\\n function verify(Origin calldata _origin, address _receiver, bytes32 _payloadHash) external;\\n\\n function verifiable(Origin calldata _origin, address _receiver) external view returns (bool);\\n\\n function initializable(Origin calldata _origin, address _receiver) external view returns (bool);\\n\\n function lzReceive(\\n Origin calldata _origin,\\n address _receiver,\\n bytes32 _guid,\\n bytes calldata _message,\\n bytes calldata _extraData\\n ) external payable;\\n\\n // oapp can burn messages partially by calling this function with its own business logic if messages are verified in order\\n function clear(address _oapp, Origin calldata _origin, bytes32 _guid, bytes calldata _message) external;\\n\\n function setLzToken(address _lzToken) external;\\n\\n function lzToken() external view returns (address);\\n\\n function nativeToken() external view returns (address);\\n\\n function setDelegate(address _delegate) external;\\n}\\n\",\"keccak256\":\"0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\nimport { IERC165 } from \\\"@openzeppelin/contracts/utils/introspection/IERC165.sol\\\";\\n\\nimport { SetConfigParam } from \\\"./IMessageLibManager.sol\\\";\\n\\nenum MessageLibType {\\n Send,\\n Receive,\\n SendAndReceive\\n}\\n\\ninterface IMessageLib is IERC165 {\\n function setConfig(address _oapp, SetConfigParam[] calldata _config) external;\\n\\n function getConfig(uint32 _eid, address _oapp, uint32 _configType) external view returns (bytes memory config);\\n\\n function isSupportedEid(uint32 _eid) external view returns (bool);\\n\\n // message libs of same major version are compatible\\n function version() external view returns (uint64 major, uint8 minor, uint8 endpointVersion);\\n\\n function messageLibType() external view returns (MessageLibType);\\n}\\n\",\"keccak256\":\"0x5cf5f24751b4e3ea1c9c5ded07cedfdfd62566b6daaffcc0144733859c9dba0c\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\nstruct SetConfigParam {\\n uint32 eid;\\n uint32 configType;\\n bytes config;\\n}\\n\\ninterface IMessageLibManager {\\n struct Timeout {\\n address lib;\\n uint256 expiry;\\n }\\n\\n event LibraryRegistered(address newLib);\\n event DefaultSendLibrarySet(uint32 eid, address newLib);\\n event DefaultReceiveLibrarySet(uint32 eid, address newLib);\\n event DefaultReceiveLibraryTimeoutSet(uint32 eid, address oldLib, uint256 expiry);\\n event SendLibrarySet(address sender, uint32 eid, address newLib);\\n event ReceiveLibrarySet(address receiver, uint32 eid, address newLib);\\n event ReceiveLibraryTimeoutSet(address receiver, uint32 eid, address oldLib, uint256 timeout);\\n\\n function registerLibrary(address _lib) external;\\n\\n function isRegisteredLibrary(address _lib) external view returns (bool);\\n\\n function getRegisteredLibraries() external view returns (address[] memory);\\n\\n function setDefaultSendLibrary(uint32 _eid, address _newLib) external;\\n\\n function defaultSendLibrary(uint32 _eid) external view returns (address);\\n\\n function setDefaultReceiveLibrary(uint32 _eid, address _newLib, uint256 _gracePeriod) external;\\n\\n function defaultReceiveLibrary(uint32 _eid) external view returns (address);\\n\\n function setDefaultReceiveLibraryTimeout(uint32 _eid, address _lib, uint256 _expiry) external;\\n\\n function defaultReceiveLibraryTimeout(uint32 _eid) external view returns (address lib, uint256 expiry);\\n\\n function isSupportedEid(uint32 _eid) external view returns (bool);\\n\\n function isValidReceiveLibrary(address _receiver, uint32 _eid, address _lib) external view returns (bool);\\n\\n /// ------------------- OApp interfaces -------------------\\n function setSendLibrary(address _oapp, uint32 _eid, address _newLib) external;\\n\\n function getSendLibrary(address _sender, uint32 _eid) external view returns (address lib);\\n\\n function isDefaultSendLibrary(address _sender, uint32 _eid) external view returns (bool);\\n\\n function setReceiveLibrary(address _oapp, uint32 _eid, address _newLib, uint256 _gracePeriod) external;\\n\\n function getReceiveLibrary(address _receiver, uint32 _eid) external view returns (address lib, bool isDefault);\\n\\n function setReceiveLibraryTimeout(address _oapp, uint32 _eid, address _lib, uint256 _expiry) external;\\n\\n function receiveLibraryTimeout(address _receiver, uint32 _eid) external view returns (address lib, uint256 expiry);\\n\\n function setConfig(address _oapp, address _lib, SetConfigParam[] calldata _params) external;\\n\\n function getConfig(\\n address _oapp,\\n address _lib,\\n uint32 _eid,\\n uint32 _configType\\n ) external view returns (bytes memory config);\\n}\\n\",\"keccak256\":\"0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\ninterface IMessagingChannel {\\n event InboundNonceSkipped(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce);\\n event PacketNilified(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce, bytes32 payloadHash);\\n event PacketBurnt(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce, bytes32 payloadHash);\\n\\n function eid() external view returns (uint32);\\n\\n // this is an emergency function if a message cannot be verified for some reasons\\n // required to provide _nextNonce to avoid race condition\\n function skip(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce) external;\\n\\n function nilify(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce, bytes32 _payloadHash) external;\\n\\n function burn(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce, bytes32 _payloadHash) external;\\n\\n function nextGuid(address _sender, uint32 _dstEid, bytes32 _receiver) external view returns (bytes32);\\n\\n function inboundNonce(address _receiver, uint32 _srcEid, bytes32 _sender) external view returns (uint64);\\n\\n function outboundNonce(address _sender, uint32 _dstEid, bytes32 _receiver) external view returns (uint64);\\n\\n function inboundPayloadHash(\\n address _receiver,\\n uint32 _srcEid,\\n bytes32 _sender,\\n uint64 _nonce\\n ) external view returns (bytes32);\\n\\n function lazyInboundNonce(address _receiver, uint32 _srcEid, bytes32 _sender) external view returns (uint64);\\n}\\n\",\"keccak256\":\"0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\ninterface IMessagingComposer {\\n event ComposeSent(address from, address to, bytes32 guid, uint16 index, bytes message);\\n event ComposeDelivered(address from, address to, bytes32 guid, uint16 index);\\n event LzComposeAlert(\\n address indexed from,\\n address indexed to,\\n address indexed executor,\\n bytes32 guid,\\n uint16 index,\\n uint256 gas,\\n uint256 value,\\n bytes message,\\n bytes extraData,\\n bytes reason\\n );\\n\\n function composeQueue(\\n address _from,\\n address _to,\\n bytes32 _guid,\\n uint16 _index\\n ) external view returns (bytes32 messageHash);\\n\\n function sendCompose(address _to, bytes32 _guid, uint16 _index, bytes calldata _message) external;\\n\\n function lzCompose(\\n address _from,\\n address _to,\\n bytes32 _guid,\\n uint16 _index,\\n bytes calldata _message,\\n bytes calldata _extraData\\n ) external payable;\\n}\\n\",\"keccak256\":\"0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\ninterface IMessagingContext {\\n function isSendingMessage() external view returns (bool);\\n\\n function getSendContext() external view returns (uint32 dstEid, address sender);\\n}\\n\",\"keccak256\":\"0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\nimport { MessagingFee } from \\\"./ILayerZeroEndpointV2.sol\\\";\\nimport { IMessageLib } from \\\"./IMessageLib.sol\\\";\\n\\nstruct Packet {\\n uint64 nonce;\\n uint32 srcEid;\\n address sender;\\n uint32 dstEid;\\n bytes32 receiver;\\n bytes32 guid;\\n bytes message;\\n}\\n\\ninterface ISendLib is IMessageLib {\\n function send(\\n Packet calldata _packet,\\n bytes calldata _options,\\n bool _payInLzToken\\n ) external returns (MessagingFee memory, bytes memory encodedPacket);\\n\\n function quote(\\n Packet calldata _packet,\\n bytes calldata _options,\\n bool _payInLzToken\\n ) external view returns (MessagingFee memory);\\n\\n function setTreasury(address _treasury) external;\\n\\n function withdrawFee(address _to, uint256 _amount) external;\\n\\n function withdrawLzTokenFee(address _lzToken, address _to, uint256 _amount) external;\\n}\\n\",\"keccak256\":\"0xf1c07bc61e7b1dce195ed12d50f87980fbf2d63cac1326fd28287f55fe0ba625\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/introspection/IERC165.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Interface of the ERC-165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[ERC].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\"}},\"version\":1}", - "storageLayout": { "storage": [], "types": null }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - } - }, - "@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol": { - "AddressCast": { - "abi": [ - { - "inputs": [], - "name": "AddressCast_InvalidAddress", - "type": "error" - }, - { - "inputs": [], - "name": "AddressCast_InvalidSizeForAddress", - "type": "error" - } - ], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212205c7c912ee158597c362dd2231f967bbff1f2e5e9420ddb60614885a7b61ff2c564736f6c63430008160033", - "opcodes": "PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x5C PUSH29 0x912EE158597C362DD2231F967BBFF1F2E5E9420DDB60614885A7B61FF2 0xC5 PUSH5 0x736F6C6343 STOP ADDMOD AND STOP CALLER ", - "sourceMap": "64:1401:8:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;64:1401:8;;;;;;;;;;;;;;;;;" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212205c7c912ee158597c362dd2231f967bbff1f2e5e9420ddb60614885a7b61ff2c564736f6c63430008160033", - "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x5C PUSH29 0x912EE158597C362DD2231F967BBFF1F2E5E9420DDB60614885A7B61FF2 0xC5 PUSH5 0x736F6C6343 STOP ADDMOD AND STOP CALLER ", - "sourceMap": "64:1401:8:-:0;;;;;;;;" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "17200", - "executionCost": "103", - "totalCost": "17303" - }, - "internal": { - "toAddress(bytes calldata)": "infinite", - "toAddress(bytes32)": "infinite", - "toBytes(bytes32,uint256)": "infinite", - "toBytes32(address)": "infinite", - "toBytes32(bytes calldata)": "infinite" - } - }, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AddressCast_InvalidAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AddressCast_InvalidSizeForAddress\",\"type\":\"error\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol\":\"AddressCast\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol\":{\"content\":\"// SPDX-License-Identifier: LZBL-1.2\\n\\npragma solidity ^0.8.20;\\n\\nlibrary AddressCast {\\n error AddressCast_InvalidSizeForAddress();\\n error AddressCast_InvalidAddress();\\n\\n function toBytes32(bytes calldata _addressBytes) internal pure returns (bytes32 result) {\\n if (_addressBytes.length > 32) revert AddressCast_InvalidAddress();\\n result = bytes32(_addressBytes);\\n unchecked {\\n uint256 offset = 32 - _addressBytes.length;\\n result = result >> (offset * 8);\\n }\\n }\\n\\n function toBytes32(address _address) internal pure returns (bytes32 result) {\\n result = bytes32(uint256(uint160(_address)));\\n }\\n\\n function toBytes(bytes32 _addressBytes32, uint256 _size) internal pure returns (bytes memory result) {\\n if (_size == 0 || _size > 32) revert AddressCast_InvalidSizeForAddress();\\n result = new bytes(_size);\\n unchecked {\\n uint256 offset = 256 - _size * 8;\\n assembly {\\n mstore(add(result, 32), shl(offset, _addressBytes32))\\n }\\n }\\n }\\n\\n function toAddress(bytes32 _addressBytes32) internal pure returns (address result) {\\n result = address(uint160(uint256(_addressBytes32)));\\n }\\n\\n function toAddress(bytes calldata _addressBytes) internal pure returns (address result) {\\n if (_addressBytes.length != 20) revert AddressCast_InvalidAddress();\\n result = address(bytes20(_addressBytes));\\n }\\n}\\n\",\"keccak256\":\"0x2ebbcaaab3554edcd41b581f1a72ac1806afbfb8047d0d47ff098f9af30d6deb\",\"license\":\"LZBL-1.2\"}},\"version\":1}", - "storageLayout": { "storage": [], "types": null }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - } - }, - "@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol": { - "PacketV1Codec": { - "abi": [], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220689bf5153250d295608081dab5723d9ebaca3e92d1943d871fd765e980c21c9864736f6c63430008160033", - "opcodes": "PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH9 0x9BF5153250D2956080 DUP2 0xDA 0xB5 PUSH19 0x3D9EBACA3E92D1943D871FD765E980C21C9864 PUSH20 0x6F6C634300081600330000000000000000000000 ", - "sourceMap": "179:3486:9:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;179:3486:9;;;;;;;;;;;;;;;;;" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220689bf5153250d295608081dab5723d9ebaca3e92d1943d871fd765e980c21c9864736f6c63430008160033", - "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH9 0x9BF5153250D2956080 DUP2 0xDA 0xB5 PUSH19 0x3D9EBACA3E92D1943D871FD765E980C21C9864 PUSH20 0x6F6C634300081600330000000000000000000000 ", - "sourceMap": "179:3486:9:-:0;;;;;;;;" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "17200", - "executionCost": "103", - "totalCost": "17303" - }, - "internal": { - "dstEid(bytes calldata)": "infinite", - "encode(struct Packet memory)": "infinite", - "encodePacketHeader(struct Packet memory)": "infinite", - "encodePayload(struct Packet memory)": "infinite", - "guid(bytes calldata)": "infinite", - "header(bytes calldata)": "infinite", - "message(bytes calldata)": "infinite", - "nonce(bytes calldata)": "infinite", - "payload(bytes calldata)": "infinite", - "payloadHash(bytes calldata)": "infinite", - "receiver(bytes calldata)": "infinite", - "receiverB20(bytes calldata)": "infinite", - "sender(bytes calldata)": "infinite", - "senderAddressB20(bytes calldata)": "infinite", - "srcEid(bytes calldata)": "infinite", - "version(bytes calldata)": "infinite" - } - }, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol\":\"PacketV1Codec\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\nimport { IMessageLibManager } from \\\"./IMessageLibManager.sol\\\";\\nimport { IMessagingComposer } from \\\"./IMessagingComposer.sol\\\";\\nimport { IMessagingChannel } from \\\"./IMessagingChannel.sol\\\";\\nimport { IMessagingContext } from \\\"./IMessagingContext.sol\\\";\\n\\nstruct MessagingParams {\\n uint32 dstEid;\\n bytes32 receiver;\\n bytes message;\\n bytes options;\\n bool payInLzToken;\\n}\\n\\nstruct MessagingReceipt {\\n bytes32 guid;\\n uint64 nonce;\\n MessagingFee fee;\\n}\\n\\nstruct MessagingFee {\\n uint256 nativeFee;\\n uint256 lzTokenFee;\\n}\\n\\nstruct Origin {\\n uint32 srcEid;\\n bytes32 sender;\\n uint64 nonce;\\n}\\n\\ninterface ILayerZeroEndpointV2 is IMessageLibManager, IMessagingComposer, IMessagingChannel, IMessagingContext {\\n event PacketSent(bytes encodedPayload, bytes options, address sendLibrary);\\n\\n event PacketVerified(Origin origin, address receiver, bytes32 payloadHash);\\n\\n event PacketDelivered(Origin origin, address receiver);\\n\\n event LzReceiveAlert(\\n address indexed receiver,\\n address indexed executor,\\n Origin origin,\\n bytes32 guid,\\n uint256 gas,\\n uint256 value,\\n bytes message,\\n bytes extraData,\\n bytes reason\\n );\\n\\n event LzTokenSet(address token);\\n\\n event DelegateSet(address sender, address delegate);\\n\\n function quote(MessagingParams calldata _params, address _sender) external view returns (MessagingFee memory);\\n\\n function send(\\n MessagingParams calldata _params,\\n address _refundAddress\\n ) external payable returns (MessagingReceipt memory);\\n\\n function verify(Origin calldata _origin, address _receiver, bytes32 _payloadHash) external;\\n\\n function verifiable(Origin calldata _origin, address _receiver) external view returns (bool);\\n\\n function initializable(Origin calldata _origin, address _receiver) external view returns (bool);\\n\\n function lzReceive(\\n Origin calldata _origin,\\n address _receiver,\\n bytes32 _guid,\\n bytes calldata _message,\\n bytes calldata _extraData\\n ) external payable;\\n\\n // oapp can burn messages partially by calling this function with its own business logic if messages are verified in order\\n function clear(address _oapp, Origin calldata _origin, bytes32 _guid, bytes calldata _message) external;\\n\\n function setLzToken(address _lzToken) external;\\n\\n function lzToken() external view returns (address);\\n\\n function nativeToken() external view returns (address);\\n\\n function setDelegate(address _delegate) external;\\n}\\n\",\"keccak256\":\"0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\nimport { IERC165 } from \\\"@openzeppelin/contracts/utils/introspection/IERC165.sol\\\";\\n\\nimport { SetConfigParam } from \\\"./IMessageLibManager.sol\\\";\\n\\nenum MessageLibType {\\n Send,\\n Receive,\\n SendAndReceive\\n}\\n\\ninterface IMessageLib is IERC165 {\\n function setConfig(address _oapp, SetConfigParam[] calldata _config) external;\\n\\n function getConfig(uint32 _eid, address _oapp, uint32 _configType) external view returns (bytes memory config);\\n\\n function isSupportedEid(uint32 _eid) external view returns (bool);\\n\\n // message libs of same major version are compatible\\n function version() external view returns (uint64 major, uint8 minor, uint8 endpointVersion);\\n\\n function messageLibType() external view returns (MessageLibType);\\n}\\n\",\"keccak256\":\"0x5cf5f24751b4e3ea1c9c5ded07cedfdfd62566b6daaffcc0144733859c9dba0c\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\nstruct SetConfigParam {\\n uint32 eid;\\n uint32 configType;\\n bytes config;\\n}\\n\\ninterface IMessageLibManager {\\n struct Timeout {\\n address lib;\\n uint256 expiry;\\n }\\n\\n event LibraryRegistered(address newLib);\\n event DefaultSendLibrarySet(uint32 eid, address newLib);\\n event DefaultReceiveLibrarySet(uint32 eid, address newLib);\\n event DefaultReceiveLibraryTimeoutSet(uint32 eid, address oldLib, uint256 expiry);\\n event SendLibrarySet(address sender, uint32 eid, address newLib);\\n event ReceiveLibrarySet(address receiver, uint32 eid, address newLib);\\n event ReceiveLibraryTimeoutSet(address receiver, uint32 eid, address oldLib, uint256 timeout);\\n\\n function registerLibrary(address _lib) external;\\n\\n function isRegisteredLibrary(address _lib) external view returns (bool);\\n\\n function getRegisteredLibraries() external view returns (address[] memory);\\n\\n function setDefaultSendLibrary(uint32 _eid, address _newLib) external;\\n\\n function defaultSendLibrary(uint32 _eid) external view returns (address);\\n\\n function setDefaultReceiveLibrary(uint32 _eid, address _newLib, uint256 _gracePeriod) external;\\n\\n function defaultReceiveLibrary(uint32 _eid) external view returns (address);\\n\\n function setDefaultReceiveLibraryTimeout(uint32 _eid, address _lib, uint256 _expiry) external;\\n\\n function defaultReceiveLibraryTimeout(uint32 _eid) external view returns (address lib, uint256 expiry);\\n\\n function isSupportedEid(uint32 _eid) external view returns (bool);\\n\\n function isValidReceiveLibrary(address _receiver, uint32 _eid, address _lib) external view returns (bool);\\n\\n /// ------------------- OApp interfaces -------------------\\n function setSendLibrary(address _oapp, uint32 _eid, address _newLib) external;\\n\\n function getSendLibrary(address _sender, uint32 _eid) external view returns (address lib);\\n\\n function isDefaultSendLibrary(address _sender, uint32 _eid) external view returns (bool);\\n\\n function setReceiveLibrary(address _oapp, uint32 _eid, address _newLib, uint256 _gracePeriod) external;\\n\\n function getReceiveLibrary(address _receiver, uint32 _eid) external view returns (address lib, bool isDefault);\\n\\n function setReceiveLibraryTimeout(address _oapp, uint32 _eid, address _lib, uint256 _expiry) external;\\n\\n function receiveLibraryTimeout(address _receiver, uint32 _eid) external view returns (address lib, uint256 expiry);\\n\\n function setConfig(address _oapp, address _lib, SetConfigParam[] calldata _params) external;\\n\\n function getConfig(\\n address _oapp,\\n address _lib,\\n uint32 _eid,\\n uint32 _configType\\n ) external view returns (bytes memory config);\\n}\\n\",\"keccak256\":\"0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\ninterface IMessagingChannel {\\n event InboundNonceSkipped(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce);\\n event PacketNilified(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce, bytes32 payloadHash);\\n event PacketBurnt(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce, bytes32 payloadHash);\\n\\n function eid() external view returns (uint32);\\n\\n // this is an emergency function if a message cannot be verified for some reasons\\n // required to provide _nextNonce to avoid race condition\\n function skip(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce) external;\\n\\n function nilify(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce, bytes32 _payloadHash) external;\\n\\n function burn(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce, bytes32 _payloadHash) external;\\n\\n function nextGuid(address _sender, uint32 _dstEid, bytes32 _receiver) external view returns (bytes32);\\n\\n function inboundNonce(address _receiver, uint32 _srcEid, bytes32 _sender) external view returns (uint64);\\n\\n function outboundNonce(address _sender, uint32 _dstEid, bytes32 _receiver) external view returns (uint64);\\n\\n function inboundPayloadHash(\\n address _receiver,\\n uint32 _srcEid,\\n bytes32 _sender,\\n uint64 _nonce\\n ) external view returns (bytes32);\\n\\n function lazyInboundNonce(address _receiver, uint32 _srcEid, bytes32 _sender) external view returns (uint64);\\n}\\n\",\"keccak256\":\"0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\ninterface IMessagingComposer {\\n event ComposeSent(address from, address to, bytes32 guid, uint16 index, bytes message);\\n event ComposeDelivered(address from, address to, bytes32 guid, uint16 index);\\n event LzComposeAlert(\\n address indexed from,\\n address indexed to,\\n address indexed executor,\\n bytes32 guid,\\n uint16 index,\\n uint256 gas,\\n uint256 value,\\n bytes message,\\n bytes extraData,\\n bytes reason\\n );\\n\\n function composeQueue(\\n address _from,\\n address _to,\\n bytes32 _guid,\\n uint16 _index\\n ) external view returns (bytes32 messageHash);\\n\\n function sendCompose(address _to, bytes32 _guid, uint16 _index, bytes calldata _message) external;\\n\\n function lzCompose(\\n address _from,\\n address _to,\\n bytes32 _guid,\\n uint16 _index,\\n bytes calldata _message,\\n bytes calldata _extraData\\n ) external payable;\\n}\\n\",\"keccak256\":\"0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\ninterface IMessagingContext {\\n function isSendingMessage() external view returns (bool);\\n\\n function getSendContext() external view returns (uint32 dstEid, address sender);\\n}\\n\",\"keccak256\":\"0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\nimport { MessagingFee } from \\\"./ILayerZeroEndpointV2.sol\\\";\\nimport { IMessageLib } from \\\"./IMessageLib.sol\\\";\\n\\nstruct Packet {\\n uint64 nonce;\\n uint32 srcEid;\\n address sender;\\n uint32 dstEid;\\n bytes32 receiver;\\n bytes32 guid;\\n bytes message;\\n}\\n\\ninterface ISendLib is IMessageLib {\\n function send(\\n Packet calldata _packet,\\n bytes calldata _options,\\n bool _payInLzToken\\n ) external returns (MessagingFee memory, bytes memory encodedPacket);\\n\\n function quote(\\n Packet calldata _packet,\\n bytes calldata _options,\\n bool _payInLzToken\\n ) external view returns (MessagingFee memory);\\n\\n function setTreasury(address _treasury) external;\\n\\n function withdrawFee(address _to, uint256 _amount) external;\\n\\n function withdrawLzTokenFee(address _lzToken, address _to, uint256 _amount) external;\\n}\\n\",\"keccak256\":\"0xf1c07bc61e7b1dce195ed12d50f87980fbf2d63cac1326fd28287f55fe0ba625\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol\":{\"content\":\"// SPDX-License-Identifier: LZBL-1.2\\n\\npragma solidity ^0.8.20;\\n\\nlibrary AddressCast {\\n error AddressCast_InvalidSizeForAddress();\\n error AddressCast_InvalidAddress();\\n\\n function toBytes32(bytes calldata _addressBytes) internal pure returns (bytes32 result) {\\n if (_addressBytes.length > 32) revert AddressCast_InvalidAddress();\\n result = bytes32(_addressBytes);\\n unchecked {\\n uint256 offset = 32 - _addressBytes.length;\\n result = result >> (offset * 8);\\n }\\n }\\n\\n function toBytes32(address _address) internal pure returns (bytes32 result) {\\n result = bytes32(uint256(uint160(_address)));\\n }\\n\\n function toBytes(bytes32 _addressBytes32, uint256 _size) internal pure returns (bytes memory result) {\\n if (_size == 0 || _size > 32) revert AddressCast_InvalidSizeForAddress();\\n result = new bytes(_size);\\n unchecked {\\n uint256 offset = 256 - _size * 8;\\n assembly {\\n mstore(add(result, 32), shl(offset, _addressBytes32))\\n }\\n }\\n }\\n\\n function toAddress(bytes32 _addressBytes32) internal pure returns (address result) {\\n result = address(uint160(uint256(_addressBytes32)));\\n }\\n\\n function toAddress(bytes calldata _addressBytes) internal pure returns (address result) {\\n if (_addressBytes.length != 20) revert AddressCast_InvalidAddress();\\n result = address(bytes20(_addressBytes));\\n }\\n}\\n\",\"keccak256\":\"0x2ebbcaaab3554edcd41b581f1a72ac1806afbfb8047d0d47ff098f9af30d6deb\",\"license\":\"LZBL-1.2\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol\":{\"content\":\"// SPDX-License-Identifier: LZBL-1.2\\n\\npragma solidity ^0.8.20;\\n\\nimport { Packet } from \\\"../../interfaces/ISendLib.sol\\\";\\nimport { AddressCast } from \\\"../../libs/AddressCast.sol\\\";\\n\\nlibrary PacketV1Codec {\\n using AddressCast for address;\\n using AddressCast for bytes32;\\n\\n uint8 internal constant PACKET_VERSION = 1;\\n\\n // header (version + nonce + path)\\n // version\\n uint256 private constant PACKET_VERSION_OFFSET = 0;\\n // nonce\\n uint256 private constant NONCE_OFFSET = 1;\\n // path\\n uint256 private constant SRC_EID_OFFSET = 9;\\n uint256 private constant SENDER_OFFSET = 13;\\n uint256 private constant DST_EID_OFFSET = 45;\\n uint256 private constant RECEIVER_OFFSET = 49;\\n // payload (guid + message)\\n uint256 private constant GUID_OFFSET = 81; // keccak256(nonce + path)\\n uint256 private constant MESSAGE_OFFSET = 113;\\n\\n function encode(Packet memory _packet) internal pure returns (bytes memory encodedPacket) {\\n encodedPacket = abi.encodePacked(\\n PACKET_VERSION,\\n _packet.nonce,\\n _packet.srcEid,\\n _packet.sender.toBytes32(),\\n _packet.dstEid,\\n _packet.receiver,\\n _packet.guid,\\n _packet.message\\n );\\n }\\n\\n function encodePacketHeader(Packet memory _packet) internal pure returns (bytes memory) {\\n return\\n abi.encodePacked(\\n PACKET_VERSION,\\n _packet.nonce,\\n _packet.srcEid,\\n _packet.sender.toBytes32(),\\n _packet.dstEid,\\n _packet.receiver\\n );\\n }\\n\\n function encodePayload(Packet memory _packet) internal pure returns (bytes memory) {\\n return abi.encodePacked(_packet.guid, _packet.message);\\n }\\n\\n function header(bytes calldata _packet) internal pure returns (bytes calldata) {\\n return _packet[0:GUID_OFFSET];\\n }\\n\\n function version(bytes calldata _packet) internal pure returns (uint8) {\\n return uint8(bytes1(_packet[PACKET_VERSION_OFFSET:NONCE_OFFSET]));\\n }\\n\\n function nonce(bytes calldata _packet) internal pure returns (uint64) {\\n return uint64(bytes8(_packet[NONCE_OFFSET:SRC_EID_OFFSET]));\\n }\\n\\n function srcEid(bytes calldata _packet) internal pure returns (uint32) {\\n return uint32(bytes4(_packet[SRC_EID_OFFSET:SENDER_OFFSET]));\\n }\\n\\n function sender(bytes calldata _packet) internal pure returns (bytes32) {\\n return bytes32(_packet[SENDER_OFFSET:DST_EID_OFFSET]);\\n }\\n\\n function senderAddressB20(bytes calldata _packet) internal pure returns (address) {\\n return sender(_packet).toAddress();\\n }\\n\\n function dstEid(bytes calldata _packet) internal pure returns (uint32) {\\n return uint32(bytes4(_packet[DST_EID_OFFSET:RECEIVER_OFFSET]));\\n }\\n\\n function receiver(bytes calldata _packet) internal pure returns (bytes32) {\\n return bytes32(_packet[RECEIVER_OFFSET:GUID_OFFSET]);\\n }\\n\\n function receiverB20(bytes calldata _packet) internal pure returns (address) {\\n return receiver(_packet).toAddress();\\n }\\n\\n function guid(bytes calldata _packet) internal pure returns (bytes32) {\\n return bytes32(_packet[GUID_OFFSET:MESSAGE_OFFSET]);\\n }\\n\\n function message(bytes calldata _packet) internal pure returns (bytes calldata) {\\n return bytes(_packet[MESSAGE_OFFSET:]);\\n }\\n\\n function payload(bytes calldata _packet) internal pure returns (bytes calldata) {\\n return bytes(_packet[GUID_OFFSET:]);\\n }\\n\\n function payloadHash(bytes calldata _packet) internal pure returns (bytes32) {\\n return keccak256(payload(_packet));\\n }\\n}\\n\",\"keccak256\":\"0xc84cf1bf785977fe1fbe7566eef902c2db68d0e163813ebe6c34921754802680\",\"license\":\"LZBL-1.2\"},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/introspection/IERC165.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Interface of the ERC-165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[ERC].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\"}},\"version\":1}", - "storageLayout": { "storage": [], "types": null }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - } - }, - "@layerzerolabs/oapp-evm/contracts/oapp/OApp.sol": { - "OApp": { - "abi": [ - { "inputs": [], "name": "InvalidDelegate", "type": "error" }, - { "inputs": [], "name": "InvalidEndpointCall", "type": "error" }, - { "inputs": [], "name": "LzTokenUnavailable", "type": "error" }, - { - "inputs": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" } - ], - "name": "NoPeer", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "msgValue", - "type": "uint256" - } - ], - "name": "NotEnoughNative", - "type": "error" - }, - { - "inputs": [ - { "internalType": "address", "name": "addr", "type": "address" } - ], - "name": "OnlyEndpoint", - "type": "error" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - } - ], - "name": "OnlyPeer", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "OwnableInvalidOwner", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "OwnableUnauthorizedAccount", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "eid", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "peer", - "type": "bytes32" - } - ], - "name": "PeerSet", - "type": "event" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - } - ], - "internalType": "struct Origin", - "name": "origin", - "type": "tuple" - } - ], - "name": "allowInitializePath", - "outputs": [ - { "internalType": "bool", "name": "", "type": "bool" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "endpoint", - "outputs": [ - { - "internalType": "contract ILayerZeroEndpointV2", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - } - ], - "internalType": "struct Origin", - "name": "", - "type": "tuple" - }, - { "internalType": "bytes", "name": "", "type": "bytes" }, - { - "internalType": "address", - "name": "_sender", - "type": "address" - } - ], - "name": "isComposeMsgSender", - "outputs": [ - { "internalType": "bool", "name": "", "type": "bool" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - } - ], - "internalType": "struct Origin", - "name": "_origin", - "type": "tuple" - }, - { - "internalType": "bytes32", - "name": "_guid", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "_message", - "type": "bytes" - }, - { - "internalType": "address", - "name": "_executor", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "lzReceive", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "", "type": "uint32" }, - { "internalType": "bytes32", "name": "", "type": "bytes32" } - ], - "name": "nextNonce", - "outputs": [ - { "internalType": "uint64", "name": "nonce", "type": "uint64" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "oAppVersion", - "outputs": [ - { - "internalType": "uint64", - "name": "senderVersion", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "receiverVersion", - "type": "uint64" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" } - ], - "name": "peers", - "outputs": [ - { "internalType": "bytes32", "name": "peer", "type": "bytes32" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_delegate", - "type": "address" - } - ], - "name": "setDelegate", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { - "internalType": "bytes32", - "name": "_peer", - "type": "bytes32" - } - ], - "name": "setPeer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "devdoc": { - "details": "Abstract contract serving as the base for OApp implementation, combining OAppSender and OAppReceiver functionality.", - "errors": { - "OwnableInvalidOwner(address)": [ - { - "details": "The owner is not a valid owner account. (eg. `address(0)`)" - } - ], - "OwnableUnauthorizedAccount(address)": [ - { - "details": "The caller account is not authorized to perform an operation." - } - ] - }, - "kind": "dev", - "methods": { - "allowInitializePath((uint32,bytes32,uint64))": { - "details": "This indicates to the endpoint that the OApp has enabled msgs for this particular path to be received.This defaults to assuming if a peer has been set, its initialized. Can be overridden by the OApp if there is other logic to determine this.", - "params": { - "origin": "The origin information containing the source endpoint and sender address." - }, - "returns": { "_0": "Whether the path has been initialized." } - }, - "constructor": { - "details": "Constructor to initialize the OApp with the provided endpoint and owner.", - "params": { - "_delegate": "The delegate capable of making OApp configurations inside of the endpoint.", - "_endpoint": "The address of the LOCAL LayerZero endpoint." - } - }, - "isComposeMsgSender((uint32,bytes32,uint64),bytes,address)": { - "details": "_origin The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message._message The lzReceive payload.Applications can optionally choose to implement separate composeMsg senders that are NOT the bridging layer.The default sender IS the OAppReceiver implementer.", - "params": { "_sender": "The sender address." }, - "returns": { "_0": "isSender Is a valid sender." } - }, - "lzReceive((uint32,bytes32,uint64),bytes32,bytes,address,bytes)": { - "details": "Entry point for receiving messages or packets from the endpoint.Entry point for receiving msg/packet from the LayerZero endpoint.", - "params": { - "_executor": "The address of the executor for the received message.", - "_extraData": "Additional arbitrary data provided by the corresponding executor.", - "_guid": "The unique identifier for the received LayerZero message.", - "_message": "The payload of the received message.", - "_origin": "The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message." - } - }, - "nextNonce(uint32,bytes32)": { - "details": "_srcEid The source endpoint ID._sender The sender address.The path nonce starts from 1. If 0 is returned it means that there is NO nonce ordered enforcement.Is required by the off-chain executor to determine the OApp expects msg execution is ordered.This is also enforced by the OApp.By default this is NOT enabled. ie. nextNonce is hardcoded to return 0.", - "returns": { "nonce": "The next nonce." } - }, - "oAppVersion()": { - "returns": { - "receiverVersion": "The version of the OAppReceiver.sol implementation.", - "senderVersion": "The version of the OAppSender.sol implementation." - } - }, - "owner()": { - "details": "Returns the address of the current owner." - }, - "renounceOwnership()": { - "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner." - }, - "setDelegate(address)": { - "details": "Only the owner/admin of the OApp can call this function.Provides the ability for a delegate to set configs, on behalf of the OApp, directly on the Endpoint contract.", - "params": { - "_delegate": "The address of the delegate to be set." - } - }, - "setPeer(uint32,bytes32)": { - "details": "Only the owner/admin of the OApp can call this function.Indicates that the peer is trusted to send LayerZero messages to this OApp.Set this to bytes32(0) to remove the peer address.Peer is a bytes32 to accommodate non-evm chains.", - "params": { - "_eid": "The endpoint ID.", - "_peer": "The address of the peer to be associated with the corresponding endpoint." - } - }, - "transferOwnership(address)": { - "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." - } - }, - "title": "OApp", - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": { - "allowInitializePath((uint32,bytes32,uint64))": "ff7bd03d", - "endpoint()": "5e280f11", - "isComposeMsgSender((uint32,bytes32,uint64),bytes,address)": "82413eac", - "lzReceive((uint32,bytes32,uint64),bytes32,bytes,address,bytes)": "13137d65", - "nextNonce(uint32,bytes32)": "7d25a05e", - "oAppVersion()": "17442b70", - "owner()": "8da5cb5b", - "peers(uint32)": "bb0b6a53", - "renounceOwnership()": "715018a6", - "setDelegate(address)": "ca5eb5e1", - "setPeer(uint32,bytes32)": "3400288b", - "transferOwnership(address)": "f2fde38b" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"InvalidDelegate\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidEndpointCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LzTokenUnavailable\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"}],\"name\":\"NoPeer\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"msgValue\",\"type\":\"uint256\"}],\"name\":\"NotEnoughNative\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"OnlyEndpoint\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"}],\"name\":\"OnlyPeer\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"peer\",\"type\":\"bytes32\"}],\"name\":\"PeerSet\",\"type\":\"event\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"origin\",\"type\":\"tuple\"}],\"name\":\"allowInitializePath\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"endpoint\",\"outputs\":[{\"internalType\":\"contract ILayerZeroEndpointV2\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"}],\"name\":\"isComposeMsgSender\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"_origin\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"_guid\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"_executor\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"lzReceive\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"nextNonce\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"oAppVersion\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"senderVersion\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"receiverVersion\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"}],\"name\":\"peers\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"peer\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_delegate\",\"type\":\"address\"}],\"name\":\"setDelegate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_peer\",\"type\":\"bytes32\"}],\"name\":\"setPeer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Abstract contract serving as the base for OApp implementation, combining OAppSender and OAppReceiver functionality.\",\"errors\":{\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}]},\"kind\":\"dev\",\"methods\":{\"allowInitializePath((uint32,bytes32,uint64))\":{\"details\":\"This indicates to the endpoint that the OApp has enabled msgs for this particular path to be received.This defaults to assuming if a peer has been set, its initialized. Can be overridden by the OApp if there is other logic to determine this.\",\"params\":{\"origin\":\"The origin information containing the source endpoint and sender address.\"},\"returns\":{\"_0\":\"Whether the path has been initialized.\"}},\"constructor\":{\"details\":\"Constructor to initialize the OApp with the provided endpoint and owner.\",\"params\":{\"_delegate\":\"The delegate capable of making OApp configurations inside of the endpoint.\",\"_endpoint\":\"The address of the LOCAL LayerZero endpoint.\"}},\"isComposeMsgSender((uint32,bytes32,uint64),bytes,address)\":{\"details\":\"_origin The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message._message The lzReceive payload.Applications can optionally choose to implement separate composeMsg senders that are NOT the bridging layer.The default sender IS the OAppReceiver implementer.\",\"params\":{\"_sender\":\"The sender address.\"},\"returns\":{\"_0\":\"isSender Is a valid sender.\"}},\"lzReceive((uint32,bytes32,uint64),bytes32,bytes,address,bytes)\":{\"details\":\"Entry point for receiving messages or packets from the endpoint.Entry point for receiving msg/packet from the LayerZero endpoint.\",\"params\":{\"_executor\":\"The address of the executor for the received message.\",\"_extraData\":\"Additional arbitrary data provided by the corresponding executor.\",\"_guid\":\"The unique identifier for the received LayerZero message.\",\"_message\":\"The payload of the received message.\",\"_origin\":\"The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message.\"}},\"nextNonce(uint32,bytes32)\":{\"details\":\"_srcEid The source endpoint ID._sender The sender address.The path nonce starts from 1. If 0 is returned it means that there is NO nonce ordered enforcement.Is required by the off-chain executor to determine the OApp expects msg execution is ordered.This is also enforced by the OApp.By default this is NOT enabled. ie. nextNonce is hardcoded to return 0.\",\"returns\":{\"nonce\":\"The next nonce.\"}},\"oAppVersion()\":{\"returns\":{\"receiverVersion\":\"The version of the OAppReceiver.sol implementation.\",\"senderVersion\":\"The version of the OAppSender.sol implementation.\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"setDelegate(address)\":{\"details\":\"Only the owner/admin of the OApp can call this function.Provides the ability for a delegate to set configs, on behalf of the OApp, directly on the Endpoint contract.\",\"params\":{\"_delegate\":\"The address of the delegate to be set.\"}},\"setPeer(uint32,bytes32)\":{\"details\":\"Only the owner/admin of the OApp can call this function.Indicates that the peer is trusted to send LayerZero messages to this OApp.Set this to bytes32(0) to remove the peer address.Peer is a bytes32 to accommodate non-evm chains.\",\"params\":{\"_eid\":\"The endpoint ID.\",\"_peer\":\"The address of the peer to be associated with the corresponding endpoint.\"}},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"title\":\"OApp\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"allowInitializePath((uint32,bytes32,uint64))\":{\"notice\":\"Checks if the path initialization is allowed based on the provided origin.\"},\"endpoint()\":{\"notice\":\"Retrieves the LayerZero endpoint associated with the OApp.\"},\"isComposeMsgSender((uint32,bytes32,uint64),bytes,address)\":{\"notice\":\"Indicates whether an address is an approved composeMsg sender to the Endpoint.\"},\"nextNonce(uint32,bytes32)\":{\"notice\":\"Retrieves the next nonce for a given source endpoint and sender address.\"},\"oAppVersion()\":{\"notice\":\"Retrieves the OApp version information.\"},\"peers(uint32)\":{\"notice\":\"Retrieves the peer (OApp) associated with a corresponding endpoint.\"},\"setDelegate(address)\":{\"notice\":\"Sets the delegate address for the OApp.\"},\"setPeer(uint32,bytes32)\":{\"notice\":\"Sets the peer address (OApp instance) for a corresponding endpoint.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@layerzerolabs/oapp-evm/contracts/oapp/OApp.sol\":\"OApp\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\nimport { IMessageLibManager } from \\\"./IMessageLibManager.sol\\\";\\nimport { IMessagingComposer } from \\\"./IMessagingComposer.sol\\\";\\nimport { IMessagingChannel } from \\\"./IMessagingChannel.sol\\\";\\nimport { IMessagingContext } from \\\"./IMessagingContext.sol\\\";\\n\\nstruct MessagingParams {\\n uint32 dstEid;\\n bytes32 receiver;\\n bytes message;\\n bytes options;\\n bool payInLzToken;\\n}\\n\\nstruct MessagingReceipt {\\n bytes32 guid;\\n uint64 nonce;\\n MessagingFee fee;\\n}\\n\\nstruct MessagingFee {\\n uint256 nativeFee;\\n uint256 lzTokenFee;\\n}\\n\\nstruct Origin {\\n uint32 srcEid;\\n bytes32 sender;\\n uint64 nonce;\\n}\\n\\ninterface ILayerZeroEndpointV2 is IMessageLibManager, IMessagingComposer, IMessagingChannel, IMessagingContext {\\n event PacketSent(bytes encodedPayload, bytes options, address sendLibrary);\\n\\n event PacketVerified(Origin origin, address receiver, bytes32 payloadHash);\\n\\n event PacketDelivered(Origin origin, address receiver);\\n\\n event LzReceiveAlert(\\n address indexed receiver,\\n address indexed executor,\\n Origin origin,\\n bytes32 guid,\\n uint256 gas,\\n uint256 value,\\n bytes message,\\n bytes extraData,\\n bytes reason\\n );\\n\\n event LzTokenSet(address token);\\n\\n event DelegateSet(address sender, address delegate);\\n\\n function quote(MessagingParams calldata _params, address _sender) external view returns (MessagingFee memory);\\n\\n function send(\\n MessagingParams calldata _params,\\n address _refundAddress\\n ) external payable returns (MessagingReceipt memory);\\n\\n function verify(Origin calldata _origin, address _receiver, bytes32 _payloadHash) external;\\n\\n function verifiable(Origin calldata _origin, address _receiver) external view returns (bool);\\n\\n function initializable(Origin calldata _origin, address _receiver) external view returns (bool);\\n\\n function lzReceive(\\n Origin calldata _origin,\\n address _receiver,\\n bytes32 _guid,\\n bytes calldata _message,\\n bytes calldata _extraData\\n ) external payable;\\n\\n // oapp can burn messages partially by calling this function with its own business logic if messages are verified in order\\n function clear(address _oapp, Origin calldata _origin, bytes32 _guid, bytes calldata _message) external;\\n\\n function setLzToken(address _lzToken) external;\\n\\n function lzToken() external view returns (address);\\n\\n function nativeToken() external view returns (address);\\n\\n function setDelegate(address _delegate) external;\\n}\\n\",\"keccak256\":\"0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\nimport { Origin } from \\\"./ILayerZeroEndpointV2.sol\\\";\\n\\ninterface ILayerZeroReceiver {\\n function allowInitializePath(Origin calldata _origin) external view returns (bool);\\n\\n function nextNonce(uint32 _eid, bytes32 _sender) external view returns (uint64);\\n\\n function lzReceive(\\n Origin calldata _origin,\\n bytes32 _guid,\\n bytes calldata _message,\\n address _executor,\\n bytes calldata _extraData\\n ) external payable;\\n}\\n\",\"keccak256\":\"0x9641abba8d53b08bb517d1b74801dd15ea7b84d77a6719085bd96c8ea94e3ca0\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\nstruct SetConfigParam {\\n uint32 eid;\\n uint32 configType;\\n bytes config;\\n}\\n\\ninterface IMessageLibManager {\\n struct Timeout {\\n address lib;\\n uint256 expiry;\\n }\\n\\n event LibraryRegistered(address newLib);\\n event DefaultSendLibrarySet(uint32 eid, address newLib);\\n event DefaultReceiveLibrarySet(uint32 eid, address newLib);\\n event DefaultReceiveLibraryTimeoutSet(uint32 eid, address oldLib, uint256 expiry);\\n event SendLibrarySet(address sender, uint32 eid, address newLib);\\n event ReceiveLibrarySet(address receiver, uint32 eid, address newLib);\\n event ReceiveLibraryTimeoutSet(address receiver, uint32 eid, address oldLib, uint256 timeout);\\n\\n function registerLibrary(address _lib) external;\\n\\n function isRegisteredLibrary(address _lib) external view returns (bool);\\n\\n function getRegisteredLibraries() external view returns (address[] memory);\\n\\n function setDefaultSendLibrary(uint32 _eid, address _newLib) external;\\n\\n function defaultSendLibrary(uint32 _eid) external view returns (address);\\n\\n function setDefaultReceiveLibrary(uint32 _eid, address _newLib, uint256 _gracePeriod) external;\\n\\n function defaultReceiveLibrary(uint32 _eid) external view returns (address);\\n\\n function setDefaultReceiveLibraryTimeout(uint32 _eid, address _lib, uint256 _expiry) external;\\n\\n function defaultReceiveLibraryTimeout(uint32 _eid) external view returns (address lib, uint256 expiry);\\n\\n function isSupportedEid(uint32 _eid) external view returns (bool);\\n\\n function isValidReceiveLibrary(address _receiver, uint32 _eid, address _lib) external view returns (bool);\\n\\n /// ------------------- OApp interfaces -------------------\\n function setSendLibrary(address _oapp, uint32 _eid, address _newLib) external;\\n\\n function getSendLibrary(address _sender, uint32 _eid) external view returns (address lib);\\n\\n function isDefaultSendLibrary(address _sender, uint32 _eid) external view returns (bool);\\n\\n function setReceiveLibrary(address _oapp, uint32 _eid, address _newLib, uint256 _gracePeriod) external;\\n\\n function getReceiveLibrary(address _receiver, uint32 _eid) external view returns (address lib, bool isDefault);\\n\\n function setReceiveLibraryTimeout(address _oapp, uint32 _eid, address _lib, uint256 _expiry) external;\\n\\n function receiveLibraryTimeout(address _receiver, uint32 _eid) external view returns (address lib, uint256 expiry);\\n\\n function setConfig(address _oapp, address _lib, SetConfigParam[] calldata _params) external;\\n\\n function getConfig(\\n address _oapp,\\n address _lib,\\n uint32 _eid,\\n uint32 _configType\\n ) external view returns (bytes memory config);\\n}\\n\",\"keccak256\":\"0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\ninterface IMessagingChannel {\\n event InboundNonceSkipped(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce);\\n event PacketNilified(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce, bytes32 payloadHash);\\n event PacketBurnt(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce, bytes32 payloadHash);\\n\\n function eid() external view returns (uint32);\\n\\n // this is an emergency function if a message cannot be verified for some reasons\\n // required to provide _nextNonce to avoid race condition\\n function skip(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce) external;\\n\\n function nilify(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce, bytes32 _payloadHash) external;\\n\\n function burn(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce, bytes32 _payloadHash) external;\\n\\n function nextGuid(address _sender, uint32 _dstEid, bytes32 _receiver) external view returns (bytes32);\\n\\n function inboundNonce(address _receiver, uint32 _srcEid, bytes32 _sender) external view returns (uint64);\\n\\n function outboundNonce(address _sender, uint32 _dstEid, bytes32 _receiver) external view returns (uint64);\\n\\n function inboundPayloadHash(\\n address _receiver,\\n uint32 _srcEid,\\n bytes32 _sender,\\n uint64 _nonce\\n ) external view returns (bytes32);\\n\\n function lazyInboundNonce(address _receiver, uint32 _srcEid, bytes32 _sender) external view returns (uint64);\\n}\\n\",\"keccak256\":\"0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\ninterface IMessagingComposer {\\n event ComposeSent(address from, address to, bytes32 guid, uint16 index, bytes message);\\n event ComposeDelivered(address from, address to, bytes32 guid, uint16 index);\\n event LzComposeAlert(\\n address indexed from,\\n address indexed to,\\n address indexed executor,\\n bytes32 guid,\\n uint16 index,\\n uint256 gas,\\n uint256 value,\\n bytes message,\\n bytes extraData,\\n bytes reason\\n );\\n\\n function composeQueue(\\n address _from,\\n address _to,\\n bytes32 _guid,\\n uint16 _index\\n ) external view returns (bytes32 messageHash);\\n\\n function sendCompose(address _to, bytes32 _guid, uint16 _index, bytes calldata _message) external;\\n\\n function lzCompose(\\n address _from,\\n address _to,\\n bytes32 _guid,\\n uint16 _index,\\n bytes calldata _message,\\n bytes calldata _extraData\\n ) external payable;\\n}\\n\",\"keccak256\":\"0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\ninterface IMessagingContext {\\n function isSendingMessage() external view returns (bool);\\n\\n function getSendContext() external view returns (uint32 dstEid, address sender);\\n}\\n\",\"keccak256\":\"0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e\",\"license\":\"MIT\"},\"@layerzerolabs/oapp-evm/contracts/oapp/OApp.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\n// @dev Import the 'MessagingFee' and 'MessagingReceipt' so it's exposed to OApp implementers\\n// solhint-disable-next-line no-unused-import\\nimport { OAppSender, MessagingFee, MessagingReceipt } from \\\"./OAppSender.sol\\\";\\n// @dev Import the 'Origin' so it's exposed to OApp implementers\\n// solhint-disable-next-line no-unused-import\\nimport { OAppReceiver, Origin } from \\\"./OAppReceiver.sol\\\";\\nimport { OAppCore } from \\\"./OAppCore.sol\\\";\\n\\n/**\\n * @title OApp\\n * @dev Abstract contract serving as the base for OApp implementation, combining OAppSender and OAppReceiver functionality.\\n */\\nabstract contract OApp is OAppSender, OAppReceiver {\\n /**\\n * @dev Constructor to initialize the OApp with the provided endpoint and owner.\\n * @param _endpoint The address of the LOCAL LayerZero endpoint.\\n * @param _delegate The delegate capable of making OApp configurations inside of the endpoint.\\n */\\n constructor(address _endpoint, address _delegate) OAppCore(_endpoint, _delegate) {}\\n\\n /**\\n * @notice Retrieves the OApp version information.\\n * @return senderVersion The version of the OAppSender.sol implementation.\\n * @return receiverVersion The version of the OAppReceiver.sol implementation.\\n */\\n function oAppVersion()\\n public\\n pure\\n virtual\\n override(OAppSender, OAppReceiver)\\n returns (uint64 senderVersion, uint64 receiverVersion)\\n {\\n return (SENDER_VERSION, RECEIVER_VERSION);\\n }\\n}\\n\",\"keccak256\":\"0xac362c4c291fad2f1511a968424b2e78a5ad502d1c867bd31da04be742aca8c5\",\"license\":\"MIT\"},\"@layerzerolabs/oapp-evm/contracts/oapp/OAppCore.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\nimport { IOAppCore, ILayerZeroEndpointV2 } from \\\"./interfaces/IOAppCore.sol\\\";\\n\\n/**\\n * @title OAppCore\\n * @dev Abstract contract implementing the IOAppCore interface with basic OApp configurations.\\n */\\nabstract contract OAppCore is IOAppCore, Ownable {\\n // The LayerZero endpoint associated with the given OApp\\n ILayerZeroEndpointV2 public immutable endpoint;\\n\\n // Mapping to store peers associated with corresponding endpoints\\n mapping(uint32 eid => bytes32 peer) public peers;\\n\\n /**\\n * @dev Constructor to initialize the OAppCore with the provided endpoint and delegate.\\n * @param _endpoint The address of the LOCAL Layer Zero endpoint.\\n * @param _delegate The delegate capable of making OApp configurations inside of the endpoint.\\n *\\n * @dev The delegate typically should be set as the owner of the contract.\\n */\\n constructor(address _endpoint, address _delegate) {\\n endpoint = ILayerZeroEndpointV2(_endpoint);\\n\\n if (_delegate == address(0)) revert InvalidDelegate();\\n endpoint.setDelegate(_delegate);\\n }\\n\\n /**\\n * @notice Sets the peer address (OApp instance) for a corresponding endpoint.\\n * @param _eid The endpoint ID.\\n * @param _peer The address of the peer to be associated with the corresponding endpoint.\\n *\\n * @dev Only the owner/admin of the OApp can call this function.\\n * @dev Indicates that the peer is trusted to send LayerZero messages to this OApp.\\n * @dev Set this to bytes32(0) to remove the peer address.\\n * @dev Peer is a bytes32 to accommodate non-evm chains.\\n */\\n function setPeer(uint32 _eid, bytes32 _peer) public virtual onlyOwner {\\n _setPeer(_eid, _peer);\\n }\\n\\n /**\\n * @notice Sets the peer address (OApp instance) for a corresponding endpoint.\\n * @param _eid The endpoint ID.\\n * @param _peer The address of the peer to be associated with the corresponding endpoint.\\n *\\n * @dev Indicates that the peer is trusted to send LayerZero messages to this OApp.\\n * @dev Set this to bytes32(0) to remove the peer address.\\n * @dev Peer is a bytes32 to accommodate non-evm chains.\\n */\\n function _setPeer(uint32 _eid, bytes32 _peer) internal virtual {\\n peers[_eid] = _peer;\\n emit PeerSet(_eid, _peer);\\n }\\n\\n /**\\n * @notice Internal function to get the peer address associated with a specific endpoint; reverts if NOT set.\\n * ie. the peer is set to bytes32(0).\\n * @param _eid The endpoint ID.\\n * @return peer The address of the peer associated with the specified endpoint.\\n */\\n function _getPeerOrRevert(uint32 _eid) internal view virtual returns (bytes32) {\\n bytes32 peer = peers[_eid];\\n if (peer == bytes32(0)) revert NoPeer(_eid);\\n return peer;\\n }\\n\\n /**\\n * @notice Sets the delegate address for the OApp.\\n * @param _delegate The address of the delegate to be set.\\n *\\n * @dev Only the owner/admin of the OApp can call this function.\\n * @dev Provides the ability for a delegate to set configs, on behalf of the OApp, directly on the Endpoint contract.\\n */\\n function setDelegate(address _delegate) public onlyOwner {\\n endpoint.setDelegate(_delegate);\\n }\\n}\\n\",\"keccak256\":\"0x13a9c2d1d2c1f086b8624f2e84c4a4702212daae36f701d92bb915b535cbe4cc\",\"license\":\"MIT\"},\"@layerzerolabs/oapp-evm/contracts/oapp/OAppReceiver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\nimport { IOAppReceiver, Origin } from \\\"./interfaces/IOAppReceiver.sol\\\";\\nimport { OAppCore } from \\\"./OAppCore.sol\\\";\\n\\n/**\\n * @title OAppReceiver\\n * @dev Abstract contract implementing the ILayerZeroReceiver interface and extending OAppCore for OApp receivers.\\n */\\nabstract contract OAppReceiver is IOAppReceiver, OAppCore {\\n // Custom error message for when the caller is not the registered endpoint/\\n error OnlyEndpoint(address addr);\\n\\n // @dev The version of the OAppReceiver implementation.\\n // @dev Version is bumped when changes are made to this contract.\\n uint64 internal constant RECEIVER_VERSION = 2;\\n\\n /**\\n * @notice Retrieves the OApp version information.\\n * @return senderVersion The version of the OAppSender.sol contract.\\n * @return receiverVersion The version of the OAppReceiver.sol contract.\\n *\\n * @dev Providing 0 as the default for OAppSender version. Indicates that the OAppSender is not implemented.\\n * ie. this is a RECEIVE only OApp.\\n * @dev If the OApp uses both OAppSender and OAppReceiver, then this needs to be override returning the correct versions.\\n */\\n function oAppVersion() public view virtual returns (uint64 senderVersion, uint64 receiverVersion) {\\n return (0, RECEIVER_VERSION);\\n }\\n\\n /**\\n * @notice Indicates whether an address is an approved composeMsg sender to the Endpoint.\\n * @dev _origin The origin information containing the source endpoint and sender address.\\n * - srcEid: The source chain endpoint ID.\\n * - sender: The sender address on the src chain.\\n * - nonce: The nonce of the message.\\n * @dev _message The lzReceive payload.\\n * @param _sender The sender address.\\n * @return isSender Is a valid sender.\\n *\\n * @dev Applications can optionally choose to implement separate composeMsg senders that are NOT the bridging layer.\\n * @dev The default sender IS the OAppReceiver implementer.\\n */\\n function isComposeMsgSender(\\n Origin calldata /*_origin*/,\\n bytes calldata /*_message*/,\\n address _sender\\n ) public view virtual returns (bool) {\\n return _sender == address(this);\\n }\\n\\n /**\\n * @notice Checks if the path initialization is allowed based on the provided origin.\\n * @param origin The origin information containing the source endpoint and sender address.\\n * @return Whether the path has been initialized.\\n *\\n * @dev This indicates to the endpoint that the OApp has enabled msgs for this particular path to be received.\\n * @dev This defaults to assuming if a peer has been set, its initialized.\\n * Can be overridden by the OApp if there is other logic to determine this.\\n */\\n function allowInitializePath(Origin calldata origin) public view virtual returns (bool) {\\n return peers[origin.srcEid] == origin.sender;\\n }\\n\\n /**\\n * @notice Retrieves the next nonce for a given source endpoint and sender address.\\n * @dev _srcEid The source endpoint ID.\\n * @dev _sender The sender address.\\n * @return nonce The next nonce.\\n *\\n * @dev The path nonce starts from 1. If 0 is returned it means that there is NO nonce ordered enforcement.\\n * @dev Is required by the off-chain executor to determine the OApp expects msg execution is ordered.\\n * @dev This is also enforced by the OApp.\\n * @dev By default this is NOT enabled. ie. nextNonce is hardcoded to return 0.\\n */\\n function nextNonce(uint32 /*_srcEid*/, bytes32 /*_sender*/) public view virtual returns (uint64 nonce) {\\n return 0;\\n }\\n\\n /**\\n * @dev Entry point for receiving messages or packets from the endpoint.\\n * @param _origin The origin information containing the source endpoint and sender address.\\n * - srcEid: The source chain endpoint ID.\\n * - sender: The sender address on the src chain.\\n * - nonce: The nonce of the message.\\n * @param _guid The unique identifier for the received LayerZero message.\\n * @param _message The payload of the received message.\\n * @param _executor The address of the executor for the received message.\\n * @param _extraData Additional arbitrary data provided by the corresponding executor.\\n *\\n * @dev Entry point for receiving msg/packet from the LayerZero endpoint.\\n */\\n function lzReceive(\\n Origin calldata _origin,\\n bytes32 _guid,\\n bytes calldata _message,\\n address _executor,\\n bytes calldata _extraData\\n ) public payable virtual {\\n // Ensures that only the endpoint can attempt to lzReceive() messages to this OApp.\\n if (address(endpoint) != msg.sender) revert OnlyEndpoint(msg.sender);\\n\\n // Ensure that the sender matches the expected peer for the source endpoint.\\n if (_getPeerOrRevert(_origin.srcEid) != _origin.sender) revert OnlyPeer(_origin.srcEid, _origin.sender);\\n\\n // Call the internal OApp implementation of lzReceive.\\n _lzReceive(_origin, _guid, _message, _executor, _extraData);\\n }\\n\\n /**\\n * @dev Internal function to implement lzReceive logic without needing to copy the basic parameter validation.\\n */\\n function _lzReceive(\\n Origin calldata _origin,\\n bytes32 _guid,\\n bytes calldata _message,\\n address _executor,\\n bytes calldata _extraData\\n ) internal virtual;\\n}\\n\",\"keccak256\":\"0x0174e9f1ec4cefe4b5adc26c392269c699b9ff75965364e5b7264426a462c70b\",\"license\":\"MIT\"},\"@layerzerolabs/oapp-evm/contracts/oapp/OAppSender.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\nimport { SafeERC20, IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\nimport { MessagingParams, MessagingFee, MessagingReceipt } from \\\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\\\";\\nimport { OAppCore } from \\\"./OAppCore.sol\\\";\\n\\n/**\\n * @title OAppSender\\n * @dev Abstract contract implementing the OAppSender functionality for sending messages to a LayerZero endpoint.\\n */\\nabstract contract OAppSender is OAppCore {\\n using SafeERC20 for IERC20;\\n\\n // Custom error messages\\n error NotEnoughNative(uint256 msgValue);\\n error LzTokenUnavailable();\\n\\n // @dev The version of the OAppSender implementation.\\n // @dev Version is bumped when changes are made to this contract.\\n uint64 internal constant SENDER_VERSION = 1;\\n\\n /**\\n * @notice Retrieves the OApp version information.\\n * @return senderVersion The version of the OAppSender.sol contract.\\n * @return receiverVersion The version of the OAppReceiver.sol contract.\\n *\\n * @dev Providing 0 as the default for OAppReceiver version. Indicates that the OAppReceiver is not implemented.\\n * ie. this is a SEND only OApp.\\n * @dev If the OApp uses both OAppSender and OAppReceiver, then this needs to be override returning the correct versions\\n */\\n function oAppVersion() public view virtual returns (uint64 senderVersion, uint64 receiverVersion) {\\n return (SENDER_VERSION, 0);\\n }\\n\\n /**\\n * @dev Internal function to interact with the LayerZero EndpointV2.quote() for fee calculation.\\n * @param _dstEid The destination endpoint ID.\\n * @param _message The message payload.\\n * @param _options Additional options for the message.\\n * @param _payInLzToken Flag indicating whether to pay the fee in LZ tokens.\\n * @return fee The calculated MessagingFee for the message.\\n * - nativeFee: The native fee for the message.\\n * - lzTokenFee: The LZ token fee for the message.\\n */\\n function _quote(\\n uint32 _dstEid,\\n bytes memory _message,\\n bytes memory _options,\\n bool _payInLzToken\\n ) internal view virtual returns (MessagingFee memory fee) {\\n return\\n endpoint.quote(\\n MessagingParams(_dstEid, _getPeerOrRevert(_dstEid), _message, _options, _payInLzToken),\\n address(this)\\n );\\n }\\n\\n /**\\n * @dev Internal function to interact with the LayerZero EndpointV2.send() for sending a message.\\n * @param _dstEid The destination endpoint ID.\\n * @param _message The message payload.\\n * @param _options Additional options for the message.\\n * @param _fee The calculated LayerZero fee for the message.\\n * - nativeFee: The native fee.\\n * - lzTokenFee: The lzToken fee.\\n * @param _refundAddress The address to receive any excess fee values sent to the endpoint.\\n * @return receipt The receipt for the sent message.\\n * - guid: The unique identifier for the sent message.\\n * - nonce: The nonce of the sent message.\\n * - fee: The LayerZero fee incurred for the message.\\n */\\n function _lzSend(\\n uint32 _dstEid,\\n bytes memory _message,\\n bytes memory _options,\\n MessagingFee memory _fee,\\n address _refundAddress\\n ) internal virtual returns (MessagingReceipt memory receipt) {\\n // @dev Push corresponding fees to the endpoint, any excess is sent back to the _refundAddress from the endpoint.\\n uint256 messageValue = _payNative(_fee.nativeFee);\\n if (_fee.lzTokenFee > 0) _payLzToken(_fee.lzTokenFee);\\n\\n return\\n // solhint-disable-next-line check-send-result\\n endpoint.send{ value: messageValue }(\\n MessagingParams(_dstEid, _getPeerOrRevert(_dstEid), _message, _options, _fee.lzTokenFee > 0),\\n _refundAddress\\n );\\n }\\n\\n /**\\n * @dev Internal function to pay the native fee associated with the message.\\n * @param _nativeFee The native fee to be paid.\\n * @return nativeFee The amount of native currency paid.\\n *\\n * @dev If the OApp needs to initiate MULTIPLE LayerZero messages in a single transaction,\\n * this will need to be overridden because msg.value would contain multiple lzFees.\\n * @dev Should be overridden in the event the LayerZero endpoint requires a different native currency.\\n * @dev Some EVMs use an ERC20 as a method for paying transactions/gasFees.\\n * @dev The endpoint is EITHER/OR, ie. it will NOT support both types of native payment at a time.\\n */\\n function _payNative(uint256 _nativeFee) internal virtual returns (uint256 nativeFee) {\\n if (msg.value != _nativeFee) revert NotEnoughNative(msg.value);\\n return _nativeFee;\\n }\\n\\n /**\\n * @dev Internal function to pay the LZ token fee associated with the message.\\n * @param _lzTokenFee The LZ token fee to be paid.\\n *\\n * @dev If the caller is trying to pay in the specified lzToken, then the lzTokenFee is passed to the endpoint.\\n * @dev Any excess sent, is passed back to the specified _refundAddress in the _lzSend().\\n */\\n function _payLzToken(uint256 _lzTokenFee) internal virtual {\\n // @dev Cannot cache the token because it is not immutable in the endpoint.\\n address lzToken = endpoint.lzToken();\\n if (lzToken == address(0)) revert LzTokenUnavailable();\\n\\n // Pay LZ token fee by sending tokens to the endpoint.\\n IERC20(lzToken).safeTransferFrom(msg.sender, address(endpoint), _lzTokenFee);\\n }\\n}\\n\",\"keccak256\":\"0x518cf4adca601923ed4baa6619846a253ea32b8d8775f8bc1faa3dfac7f67c20\",\"license\":\"MIT\"},\"@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppCore.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\nimport { ILayerZeroEndpointV2 } from \\\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\\\";\\n\\n/**\\n * @title IOAppCore\\n */\\ninterface IOAppCore {\\n // Custom error messages\\n error OnlyPeer(uint32 eid, bytes32 sender);\\n error NoPeer(uint32 eid);\\n error InvalidEndpointCall();\\n error InvalidDelegate();\\n\\n // Event emitted when a peer (OApp) is set for a corresponding endpoint\\n event PeerSet(uint32 eid, bytes32 peer);\\n\\n /**\\n * @notice Retrieves the OApp version information.\\n * @return senderVersion The version of the OAppSender.sol contract.\\n * @return receiverVersion The version of the OAppReceiver.sol contract.\\n */\\n function oAppVersion() external view returns (uint64 senderVersion, uint64 receiverVersion);\\n\\n /**\\n * @notice Retrieves the LayerZero endpoint associated with the OApp.\\n * @return iEndpoint The LayerZero endpoint as an interface.\\n */\\n function endpoint() external view returns (ILayerZeroEndpointV2 iEndpoint);\\n\\n /**\\n * @notice Retrieves the peer (OApp) associated with a corresponding endpoint.\\n * @param _eid The endpoint ID.\\n * @return peer The peer address (OApp instance) associated with the corresponding endpoint.\\n */\\n function peers(uint32 _eid) external view returns (bytes32 peer);\\n\\n /**\\n * @notice Sets the peer address (OApp instance) for a corresponding endpoint.\\n * @param _eid The endpoint ID.\\n * @param _peer The address of the peer to be associated with the corresponding endpoint.\\n */\\n function setPeer(uint32 _eid, bytes32 _peer) external;\\n\\n /**\\n * @notice Sets the delegate address for the OApp Core.\\n * @param _delegate The address of the delegate to be set.\\n */\\n function setDelegate(address _delegate) external;\\n}\\n\",\"keccak256\":\"0x40e49f2de74506e1da5dcaed53a39853f691647f4ceb0fccc8f49a68d3f47c58\",\"license\":\"MIT\"},\"@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppReceiver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.20;\\n\\nimport { ILayerZeroReceiver, Origin } from \\\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol\\\";\\n\\ninterface IOAppReceiver is ILayerZeroReceiver {\\n /**\\n * @notice Indicates whether an address is an approved composeMsg sender to the Endpoint.\\n * @param _origin The origin information containing the source endpoint and sender address.\\n * - srcEid: The source chain endpoint ID.\\n * - sender: The sender address on the src chain.\\n * - nonce: The nonce of the message.\\n * @param _message The lzReceive payload.\\n * @param _sender The sender address.\\n * @return isSender Is a valid sender.\\n *\\n * @dev Applications can optionally choose to implement a separate composeMsg sender that is NOT the bridging layer.\\n * @dev The default sender IS the OAppReceiver implementer.\\n */\\n function isComposeMsgSender(\\n Origin calldata _origin,\\n bytes calldata _message,\\n address _sender\\n ) external view returns (bool isSender);\\n}\\n\",\"keccak256\":\"0xd26135185e19b3732746d4a9e2923e896f28dec8664bab161faea2ee26fcdc3d\",\"license\":\"MIT\"},\"@openzeppelin/contracts/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {Context} from \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * The initial owner is set to the address provided by the deployer. This can\\n * later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n /**\\n * @dev The caller account is not authorized to perform an operation.\\n */\\n error OwnableUnauthorizedAccount(address account);\\n\\n /**\\n * @dev The owner is not a valid owner account. (eg. `address(0)`)\\n */\\n error OwnableInvalidOwner(address owner);\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the address provided by the deployer as the initial owner.\\n */\\n constructor(address initialOwner) {\\n if (initialOwner == address(0)) {\\n revert OwnableInvalidOwner(address(0));\\n }\\n _transferOwnership(initialOwner);\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n _checkOwner();\\n _;\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if the sender is not the owner.\\n */\\n function _checkOwner() internal view virtual {\\n if (owner() != _msgSender()) {\\n revert OwnableUnauthorizedAccount(_msgSender());\\n }\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby disabling any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n if (newOwner == address(0)) {\\n revert OwnableInvalidOwner(address(0));\\n }\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n}\\n\",\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\"},\"@openzeppelin/contracts/interfaces/IERC1363.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (interfaces/IERC1363.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {IERC20} from \\\"./IERC20.sol\\\";\\nimport {IERC165} from \\\"./IERC165.sol\\\";\\n\\n/**\\n * @title IERC1363\\n * @dev Interface of the ERC-1363 standard as defined in the https://eips.ethereum.org/EIPS/eip-1363[ERC-1363].\\n *\\n * Defines an extension interface for ERC-20 tokens that supports executing code on a recipient contract\\n * after `transfer` or `transferFrom`, or code on a spender contract after `approve`, in a single transaction.\\n */\\ninterface IERC1363 is IERC20, IERC165 {\\n /*\\n * Note: the ERC-165 identifier for this interface is 0xb0202a11.\\n * 0xb0202a11 ===\\n * bytes4(keccak256('transferAndCall(address,uint256)')) ^\\n * bytes4(keccak256('transferAndCall(address,uint256,bytes)')) ^\\n * bytes4(keccak256('transferFromAndCall(address,address,uint256)')) ^\\n * bytes4(keccak256('transferFromAndCall(address,address,uint256,bytes)')) ^\\n * bytes4(keccak256('approveAndCall(address,uint256)')) ^\\n * bytes4(keccak256('approveAndCall(address,uint256,bytes)'))\\n */\\n\\n /**\\n * @dev Moves a `value` amount of tokens from the caller's account to `to`\\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\\n * @param to The address which you want to transfer to.\\n * @param value The amount of tokens to be transferred.\\n * @return A boolean value indicating whether the operation succeeded unless throwing.\\n */\\n function transferAndCall(address to, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from the caller's account to `to`\\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\\n * @param to The address which you want to transfer to.\\n * @param value The amount of tokens to be transferred.\\n * @param data Additional data with no specified format, sent in call to `to`.\\n * @return A boolean value indicating whether the operation succeeded unless throwing.\\n */\\n function transferAndCall(address to, uint256 value, bytes calldata data) external returns (bool);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism\\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\\n * @param from The address which you want to send tokens from.\\n * @param to The address which you want to transfer to.\\n * @param value The amount of tokens to be transferred.\\n * @return A boolean value indicating whether the operation succeeded unless throwing.\\n */\\n function transferFromAndCall(address from, address to, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism\\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\\n * @param from The address which you want to send tokens from.\\n * @param to The address which you want to transfer to.\\n * @param value The amount of tokens to be transferred.\\n * @param data Additional data with no specified format, sent in call to `to`.\\n * @return A boolean value indicating whether the operation succeeded unless throwing.\\n */\\n function transferFromAndCall(address from, address to, uint256 value, bytes calldata data) external returns (bool);\\n\\n /**\\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\\n * caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`.\\n * @param spender The address which will spend the funds.\\n * @param value The amount of tokens to be spent.\\n * @return A boolean value indicating whether the operation succeeded unless throwing.\\n */\\n function approveAndCall(address spender, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\\n * caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`.\\n * @param spender The address which will spend the funds.\\n * @param value The amount of tokens to be spent.\\n * @param data Additional data with no specified format, sent in call to `spender`.\\n * @return A boolean value indicating whether the operation succeeded unless throwing.\\n */\\n function approveAndCall(address spender, uint256 value, bytes calldata data) external returns (bool);\\n}\\n\",\"keccak256\":\"0x9b6b3e7803bc5f2f8cd7ad57db8ac1def61a9930a5a3107df4882e028a9605d7\",\"license\":\"MIT\"},\"@openzeppelin/contracts/interfaces/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC165.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {IERC165} from \\\"../utils/introspection/IERC165.sol\\\";\\n\",\"keccak256\":\"0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724\",\"license\":\"MIT\"},\"@openzeppelin/contracts/interfaces/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC20.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {IERC20} from \\\"../token/ERC20/IERC20.sol\\\";\\n\",\"keccak256\":\"0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Interface of the ERC-20 standard as defined in the ERC.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the value of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the value of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\\n * caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from `from` to `to` using the\\n * allowance mechanism. `value` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 value) external returns (bool);\\n}\\n\",\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/utils/SafeERC20.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {IERC20} from \\\"../IERC20.sol\\\";\\nimport {IERC1363} from \\\"../../../interfaces/IERC1363.sol\\\";\\nimport {Address} from \\\"../../../utils/Address.sol\\\";\\n\\n/**\\n * @title SafeERC20\\n * @dev Wrappers around ERC-20 operations that throw on failure (when the token\\n * contract returns false). Tokens that return no value (and instead revert or\\n * throw on failure) are also supported, non-reverting calls are assumed to be\\n * successful.\\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\n */\\nlibrary SafeERC20 {\\n /**\\n * @dev An operation with an ERC-20 token failed.\\n */\\n error SafeERC20FailedOperation(address token);\\n\\n /**\\n * @dev Indicates a failed `decreaseAllowance` request.\\n */\\n error SafeERC20FailedDecreaseAllowance(address spender, uint256 currentAllowance, uint256 requestedDecrease);\\n\\n /**\\n * @dev Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value,\\n * non-reverting calls are assumed to be successful.\\n */\\n function safeTransfer(IERC20 token, address to, uint256 value) internal {\\n _callOptionalReturn(token, abi.encodeCall(token.transfer, (to, value)));\\n }\\n\\n /**\\n * @dev Transfer `value` amount of `token` from `from` to `to`, spending the approval given by `from` to the\\n * calling contract. If `token` returns no value, non-reverting calls are assumed to be successful.\\n */\\n function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\\n _callOptionalReturn(token, abi.encodeCall(token.transferFrom, (from, to, value)));\\n }\\n\\n /**\\n * @dev Increase the calling contract's allowance toward `spender` by `value`. If `token` returns no value,\\n * non-reverting calls are assumed to be successful.\\n *\\n * IMPORTANT: If the token implements ERC-7674 (ERC-20 with temporary allowance), and if the \\\"client\\\"\\n * smart contract uses ERC-7674 to set temporary allowances, then the \\\"client\\\" smart contract should avoid using\\n * this function. Performing a {safeIncreaseAllowance} or {safeDecreaseAllowance} operation on a token contract\\n * that has a non-zero temporary allowance (for that particular owner-spender) will result in unexpected behavior.\\n */\\n function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {\\n uint256 oldAllowance = token.allowance(address(this), spender);\\n forceApprove(token, spender, oldAllowance + value);\\n }\\n\\n /**\\n * @dev Decrease the calling contract's allowance toward `spender` by `requestedDecrease`. If `token` returns no\\n * value, non-reverting calls are assumed to be successful.\\n *\\n * IMPORTANT: If the token implements ERC-7674 (ERC-20 with temporary allowance), and if the \\\"client\\\"\\n * smart contract uses ERC-7674 to set temporary allowances, then the \\\"client\\\" smart contract should avoid using\\n * this function. Performing a {safeIncreaseAllowance} or {safeDecreaseAllowance} operation on a token contract\\n * that has a non-zero temporary allowance (for that particular owner-spender) will result in unexpected behavior.\\n */\\n function safeDecreaseAllowance(IERC20 token, address spender, uint256 requestedDecrease) internal {\\n unchecked {\\n uint256 currentAllowance = token.allowance(address(this), spender);\\n if (currentAllowance < requestedDecrease) {\\n revert SafeERC20FailedDecreaseAllowance(spender, currentAllowance, requestedDecrease);\\n }\\n forceApprove(token, spender, currentAllowance - requestedDecrease);\\n }\\n }\\n\\n /**\\n * @dev Set the calling contract's allowance toward `spender` to `value`. If `token` returns no value,\\n * non-reverting calls are assumed to be successful. Meant to be used with tokens that require the approval\\n * to be set to zero before setting it to a non-zero value, such as USDT.\\n *\\n * NOTE: If the token implements ERC-7674, this function will not modify any temporary allowance. This function\\n * only sets the \\\"standard\\\" allowance. Any temporary allowance will remain active, in addition to the value being\\n * set here.\\n */\\n function forceApprove(IERC20 token, address spender, uint256 value) internal {\\n bytes memory approvalCall = abi.encodeCall(token.approve, (spender, value));\\n\\n if (!_callOptionalReturnBool(token, approvalCall)) {\\n _callOptionalReturn(token, abi.encodeCall(token.approve, (spender, 0)));\\n _callOptionalReturn(token, approvalCall);\\n }\\n }\\n\\n /**\\n * @dev Performs an {ERC1363} transferAndCall, with a fallback to the simple {ERC20} transfer if the target has no\\n * code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\\n * targeting contracts.\\n *\\n * Reverts if the returned value is other than `true`.\\n */\\n function transferAndCallRelaxed(IERC1363 token, address to, uint256 value, bytes memory data) internal {\\n if (to.code.length == 0) {\\n safeTransfer(token, to, value);\\n } else if (!token.transferAndCall(to, value, data)) {\\n revert SafeERC20FailedOperation(address(token));\\n }\\n }\\n\\n /**\\n * @dev Performs an {ERC1363} transferFromAndCall, with a fallback to the simple {ERC20} transferFrom if the target\\n * has no code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\\n * targeting contracts.\\n *\\n * Reverts if the returned value is other than `true`.\\n */\\n function transferFromAndCallRelaxed(\\n IERC1363 token,\\n address from,\\n address to,\\n uint256 value,\\n bytes memory data\\n ) internal {\\n if (to.code.length == 0) {\\n safeTransferFrom(token, from, to, value);\\n } else if (!token.transferFromAndCall(from, to, value, data)) {\\n revert SafeERC20FailedOperation(address(token));\\n }\\n }\\n\\n /**\\n * @dev Performs an {ERC1363} approveAndCall, with a fallback to the simple {ERC20} approve if the target has no\\n * code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\\n * targeting contracts.\\n *\\n * NOTE: When the recipient address (`to`) has no code (i.e. is an EOA), this function behaves as {forceApprove}.\\n * Opposedly, when the recipient address (`to`) has code, this function only attempts to call {ERC1363-approveAndCall}\\n * once without retrying, and relies on the returned value to be true.\\n *\\n * Reverts if the returned value is other than `true`.\\n */\\n function approveAndCallRelaxed(IERC1363 token, address to, uint256 value, bytes memory data) internal {\\n if (to.code.length == 0) {\\n forceApprove(token, to, value);\\n } else if (!token.approveAndCall(to, value, data)) {\\n revert SafeERC20FailedOperation(address(token));\\n }\\n }\\n\\n /**\\n * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n * on the return value: the return value is optional (but if data is returned, it must not be false).\\n * @param token The token targeted by the call.\\n * @param data The call data (encoded using abi.encode or one of its variants).\\n *\\n * This is a variant of {_callOptionalReturnBool} that reverts if call fails to meet the requirements.\\n */\\n function _callOptionalReturn(IERC20 token, bytes memory data) private {\\n uint256 returnSize;\\n uint256 returnValue;\\n assembly (\\\"memory-safe\\\") {\\n let success := call(gas(), token, 0, add(data, 0x20), mload(data), 0, 0x20)\\n // bubble errors\\n if iszero(success) {\\n let ptr := mload(0x40)\\n returndatacopy(ptr, 0, returndatasize())\\n revert(ptr, returndatasize())\\n }\\n returnSize := returndatasize()\\n returnValue := mload(0)\\n }\\n\\n if (returnSize == 0 ? address(token).code.length == 0 : returnValue != 1) {\\n revert SafeERC20FailedOperation(address(token));\\n }\\n }\\n\\n /**\\n * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n * on the return value: the return value is optional (but if data is returned, it must not be false).\\n * @param token The token targeted by the call.\\n * @param data The call data (encoded using abi.encode or one of its variants).\\n *\\n * This is a variant of {_callOptionalReturn} that silently catches all reverts and returns a bool instead.\\n */\\n function _callOptionalReturnBool(IERC20 token, bytes memory data) private returns (bool) {\\n bool success;\\n uint256 returnSize;\\n uint256 returnValue;\\n assembly (\\\"memory-safe\\\") {\\n success := call(gas(), token, 0, add(data, 0x20), mload(data), 0, 0x20)\\n returnSize := returndatasize()\\n returnValue := mload(0)\\n }\\n return success && (returnSize == 0 ? address(token).code.length > 0 : returnValue == 1);\\n }\\n}\\n\",\"keccak256\":\"0xca2ae13e0610f6a99238dd00b97bd786bc92732dae6d6b9d61f573ec51018310\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {Errors} from \\\"./Errors.sol\\\";\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev There's no code at `target` (it is not a contract).\\n */\\n error AddressEmptyCode(address target);\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.8.20/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n if (address(this).balance < amount) {\\n revert Errors.InsufficientBalance(address(this).balance, amount);\\n }\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n if (!success) {\\n revert Errors.FailedCall();\\n }\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason or custom error, it is bubbled\\n * up by this function (like regular Solidity function calls). However, if\\n * the call reverted with no returned reason, this function reverts with a\\n * {Errors.FailedCall} error.\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n if (address(this).balance < value) {\\n revert Errors.InsufficientBalance(address(this).balance, value);\\n }\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResultFromTarget(target, success, returndata);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResultFromTarget(target, success, returndata);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResultFromTarget(target, success, returndata);\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call to smart-contract was successful, and reverts if the target\\n * was not a contract or bubbling up the revert reason (falling back to {Errors.FailedCall}) in case\\n * of an unsuccessful call.\\n */\\n function verifyCallResultFromTarget(\\n address target,\\n bool success,\\n bytes memory returndata\\n ) internal view returns (bytes memory) {\\n if (!success) {\\n _revert(returndata);\\n } else {\\n // only check if target is a contract if the call was successful and the return data is empty\\n // otherwise we already know that it was a contract\\n if (returndata.length == 0 && target.code.length == 0) {\\n revert AddressEmptyCode(target);\\n }\\n return returndata;\\n }\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call was successful, and reverts if it wasn't, either by bubbling the\\n * revert reason or with a default {Errors.FailedCall} error.\\n */\\n function verifyCallResult(bool success, bytes memory returndata) internal pure returns (bytes memory) {\\n if (!success) {\\n _revert(returndata);\\n } else {\\n return returndata;\\n }\\n }\\n\\n /**\\n * @dev Reverts with returndata if present. Otherwise reverts with {Errors.FailedCall}.\\n */\\n function _revert(bytes memory returndata) private pure {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n assembly (\\\"memory-safe\\\") {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert Errors.FailedCall();\\n }\\n }\\n}\\n\",\"keccak256\":\"0x9d8da059267bac779a2dbbb9a26c2acf00ca83085e105d62d5d4ef96054a47f5\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n\\n function _contextSuffixLength() internal view virtual returns (uint256) {\\n return 0;\\n }\\n}\\n\",\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Errors.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/Errors.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Collection of common custom errors used in multiple contracts\\n *\\n * IMPORTANT: Backwards compatibility is not guaranteed in future versions of the library.\\n * It is recommended to avoid relying on the error API for critical functionality.\\n *\\n * _Available since v5.1._\\n */\\nlibrary Errors {\\n /**\\n * @dev The ETH balance of the account is not enough to perform the operation.\\n */\\n error InsufficientBalance(uint256 balance, uint256 needed);\\n\\n /**\\n * @dev A call to an address target failed. The target may have reverted.\\n */\\n error FailedCall();\\n\\n /**\\n * @dev The deployment failed.\\n */\\n error FailedDeployment();\\n\\n /**\\n * @dev A necessary precompile is missing.\\n */\\n error MissingPrecompile(address);\\n}\\n\",\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/introspection/IERC165.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Interface of the ERC-165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[ERC].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\"}},\"version\":1}", - "storageLayout": { - "storage": [ - { - "astId": 3837, - "contract": "@layerzerolabs/oapp-evm/contracts/oapp/OApp.sol:OApp", - "label": "_owner", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 1390, - "contract": "@layerzerolabs/oapp-evm/contracts/oapp/OApp.sol:OApp", - "label": "peers", - "offset": 0, - "slot": "1", - "type": "t_mapping(t_uint32,t_bytes32)" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_bytes32": { - "encoding": "inplace", - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_mapping(t_uint32,t_bytes32)": { - "encoding": "mapping", - "key": "t_uint32", - "label": "mapping(uint32 => bytes32)", - "numberOfBytes": "32", - "value": "t_bytes32" - }, - "t_uint32": { - "encoding": "inplace", - "label": "uint32", - "numberOfBytes": "4" - } - } - }, - "userdoc": { - "kind": "user", - "methods": { - "allowInitializePath((uint32,bytes32,uint64))": { - "notice": "Checks if the path initialization is allowed based on the provided origin." - }, - "endpoint()": { - "notice": "Retrieves the LayerZero endpoint associated with the OApp." - }, - "isComposeMsgSender((uint32,bytes32,uint64),bytes,address)": { - "notice": "Indicates whether an address is an approved composeMsg sender to the Endpoint." - }, - "nextNonce(uint32,bytes32)": { - "notice": "Retrieves the next nonce for a given source endpoint and sender address." - }, - "oAppVersion()": { - "notice": "Retrieves the OApp version information." - }, - "peers(uint32)": { - "notice": "Retrieves the peer (OApp) associated with a corresponding endpoint." - }, - "setDelegate(address)": { - "notice": "Sets the delegate address for the OApp." - }, - "setPeer(uint32,bytes32)": { - "notice": "Sets the peer address (OApp instance) for a corresponding endpoint." - } - }, - "version": 1 - } - } - }, - "@layerzerolabs/oapp-evm/contracts/oapp/OAppCore.sol": { - "OAppCore": { - "abi": [ - { "inputs": [], "name": "InvalidDelegate", "type": "error" }, - { "inputs": [], "name": "InvalidEndpointCall", "type": "error" }, - { - "inputs": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" } - ], - "name": "NoPeer", - "type": "error" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - } - ], - "name": "OnlyPeer", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "OwnableInvalidOwner", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "OwnableUnauthorizedAccount", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "eid", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "peer", - "type": "bytes32" - } - ], - "name": "PeerSet", - "type": "event" - }, - { - "inputs": [], - "name": "endpoint", - "outputs": [ - { - "internalType": "contract ILayerZeroEndpointV2", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "oAppVersion", - "outputs": [ - { - "internalType": "uint64", - "name": "senderVersion", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "receiverVersion", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" } - ], - "name": "peers", - "outputs": [ - { "internalType": "bytes32", "name": "peer", "type": "bytes32" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_delegate", - "type": "address" - } - ], - "name": "setDelegate", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { - "internalType": "bytes32", - "name": "_peer", - "type": "bytes32" - } - ], - "name": "setPeer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "devdoc": { - "details": "Abstract contract implementing the IOAppCore interface with basic OApp configurations.", - "errors": { - "OwnableInvalidOwner(address)": [ - { - "details": "The owner is not a valid owner account. (eg. `address(0)`)" - } - ], - "OwnableUnauthorizedAccount(address)": [ - { - "details": "The caller account is not authorized to perform an operation." - } - ] - }, - "kind": "dev", - "methods": { - "constructor": { - "details": "Constructor to initialize the OAppCore with the provided endpoint and delegate.The delegate typically should be set as the owner of the contract.", - "params": { - "_delegate": "The delegate capable of making OApp configurations inside of the endpoint.", - "_endpoint": "The address of the LOCAL Layer Zero endpoint." - } - }, - "oAppVersion()": { - "returns": { - "receiverVersion": "The version of the OAppReceiver.sol contract.", - "senderVersion": "The version of the OAppSender.sol contract." - } - }, - "owner()": { - "details": "Returns the address of the current owner." - }, - "renounceOwnership()": { - "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner." - }, - "setDelegate(address)": { - "details": "Only the owner/admin of the OApp can call this function.Provides the ability for a delegate to set configs, on behalf of the OApp, directly on the Endpoint contract.", - "params": { - "_delegate": "The address of the delegate to be set." - } - }, - "setPeer(uint32,bytes32)": { - "details": "Only the owner/admin of the OApp can call this function.Indicates that the peer is trusted to send LayerZero messages to this OApp.Set this to bytes32(0) to remove the peer address.Peer is a bytes32 to accommodate non-evm chains.", - "params": { - "_eid": "The endpoint ID.", - "_peer": "The address of the peer to be associated with the corresponding endpoint." - } - }, - "transferOwnership(address)": { - "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." - } - }, - "stateVariables": { - "endpoint": { - "return": "The LayerZero endpoint as an interface.", - "returns": { "_0": "The LayerZero endpoint as an interface." } - }, - "peers": { - "params": { "_eid": "The endpoint ID." }, - "return": "peer The peer address (OApp instance) associated with the corresponding endpoint.", - "returns": { - "peer": "The peer address (OApp instance) associated with the corresponding endpoint." - } - } - }, - "title": "OAppCore", - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": { - "endpoint()": "5e280f11", - "oAppVersion()": "17442b70", - "owner()": "8da5cb5b", - "peers(uint32)": "bb0b6a53", - "renounceOwnership()": "715018a6", - "setDelegate(address)": "ca5eb5e1", - "setPeer(uint32,bytes32)": "3400288b", - "transferOwnership(address)": "f2fde38b" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"InvalidDelegate\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidEndpointCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"}],\"name\":\"NoPeer\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"}],\"name\":\"OnlyPeer\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"peer\",\"type\":\"bytes32\"}],\"name\":\"PeerSet\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"endpoint\",\"outputs\":[{\"internalType\":\"contract ILayerZeroEndpointV2\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"oAppVersion\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"senderVersion\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"receiverVersion\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"}],\"name\":\"peers\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"peer\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_delegate\",\"type\":\"address\"}],\"name\":\"setDelegate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_peer\",\"type\":\"bytes32\"}],\"name\":\"setPeer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Abstract contract implementing the IOAppCore interface with basic OApp configurations.\",\"errors\":{\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}]},\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Constructor to initialize the OAppCore with the provided endpoint and delegate.The delegate typically should be set as the owner of the contract.\",\"params\":{\"_delegate\":\"The delegate capable of making OApp configurations inside of the endpoint.\",\"_endpoint\":\"The address of the LOCAL Layer Zero endpoint.\"}},\"oAppVersion()\":{\"returns\":{\"receiverVersion\":\"The version of the OAppReceiver.sol contract.\",\"senderVersion\":\"The version of the OAppSender.sol contract.\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"setDelegate(address)\":{\"details\":\"Only the owner/admin of the OApp can call this function.Provides the ability for a delegate to set configs, on behalf of the OApp, directly on the Endpoint contract.\",\"params\":{\"_delegate\":\"The address of the delegate to be set.\"}},\"setPeer(uint32,bytes32)\":{\"details\":\"Only the owner/admin of the OApp can call this function.Indicates that the peer is trusted to send LayerZero messages to this OApp.Set this to bytes32(0) to remove the peer address.Peer is a bytes32 to accommodate non-evm chains.\",\"params\":{\"_eid\":\"The endpoint ID.\",\"_peer\":\"The address of the peer to be associated with the corresponding endpoint.\"}},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"stateVariables\":{\"endpoint\":{\"return\":\"The LayerZero endpoint as an interface.\",\"returns\":{\"_0\":\"The LayerZero endpoint as an interface.\"}},\"peers\":{\"params\":{\"_eid\":\"The endpoint ID.\"},\"return\":\"peer The peer address (OApp instance) associated with the corresponding endpoint.\",\"returns\":{\"peer\":\"The peer address (OApp instance) associated with the corresponding endpoint.\"}}},\"title\":\"OAppCore\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"endpoint()\":{\"notice\":\"Retrieves the LayerZero endpoint associated with the OApp.\"},\"oAppVersion()\":{\"notice\":\"Retrieves the OApp version information.\"},\"peers(uint32)\":{\"notice\":\"Retrieves the peer (OApp) associated with a corresponding endpoint.\"},\"setDelegate(address)\":{\"notice\":\"Sets the delegate address for the OApp.\"},\"setPeer(uint32,bytes32)\":{\"notice\":\"Sets the peer address (OApp instance) for a corresponding endpoint.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@layerzerolabs/oapp-evm/contracts/oapp/OAppCore.sol\":\"OAppCore\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\nimport { IMessageLibManager } from \\\"./IMessageLibManager.sol\\\";\\nimport { IMessagingComposer } from \\\"./IMessagingComposer.sol\\\";\\nimport { IMessagingChannel } from \\\"./IMessagingChannel.sol\\\";\\nimport { IMessagingContext } from \\\"./IMessagingContext.sol\\\";\\n\\nstruct MessagingParams {\\n uint32 dstEid;\\n bytes32 receiver;\\n bytes message;\\n bytes options;\\n bool payInLzToken;\\n}\\n\\nstruct MessagingReceipt {\\n bytes32 guid;\\n uint64 nonce;\\n MessagingFee fee;\\n}\\n\\nstruct MessagingFee {\\n uint256 nativeFee;\\n uint256 lzTokenFee;\\n}\\n\\nstruct Origin {\\n uint32 srcEid;\\n bytes32 sender;\\n uint64 nonce;\\n}\\n\\ninterface ILayerZeroEndpointV2 is IMessageLibManager, IMessagingComposer, IMessagingChannel, IMessagingContext {\\n event PacketSent(bytes encodedPayload, bytes options, address sendLibrary);\\n\\n event PacketVerified(Origin origin, address receiver, bytes32 payloadHash);\\n\\n event PacketDelivered(Origin origin, address receiver);\\n\\n event LzReceiveAlert(\\n address indexed receiver,\\n address indexed executor,\\n Origin origin,\\n bytes32 guid,\\n uint256 gas,\\n uint256 value,\\n bytes message,\\n bytes extraData,\\n bytes reason\\n );\\n\\n event LzTokenSet(address token);\\n\\n event DelegateSet(address sender, address delegate);\\n\\n function quote(MessagingParams calldata _params, address _sender) external view returns (MessagingFee memory);\\n\\n function send(\\n MessagingParams calldata _params,\\n address _refundAddress\\n ) external payable returns (MessagingReceipt memory);\\n\\n function verify(Origin calldata _origin, address _receiver, bytes32 _payloadHash) external;\\n\\n function verifiable(Origin calldata _origin, address _receiver) external view returns (bool);\\n\\n function initializable(Origin calldata _origin, address _receiver) external view returns (bool);\\n\\n function lzReceive(\\n Origin calldata _origin,\\n address _receiver,\\n bytes32 _guid,\\n bytes calldata _message,\\n bytes calldata _extraData\\n ) external payable;\\n\\n // oapp can burn messages partially by calling this function with its own business logic if messages are verified in order\\n function clear(address _oapp, Origin calldata _origin, bytes32 _guid, bytes calldata _message) external;\\n\\n function setLzToken(address _lzToken) external;\\n\\n function lzToken() external view returns (address);\\n\\n function nativeToken() external view returns (address);\\n\\n function setDelegate(address _delegate) external;\\n}\\n\",\"keccak256\":\"0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\nstruct SetConfigParam {\\n uint32 eid;\\n uint32 configType;\\n bytes config;\\n}\\n\\ninterface IMessageLibManager {\\n struct Timeout {\\n address lib;\\n uint256 expiry;\\n }\\n\\n event LibraryRegistered(address newLib);\\n event DefaultSendLibrarySet(uint32 eid, address newLib);\\n event DefaultReceiveLibrarySet(uint32 eid, address newLib);\\n event DefaultReceiveLibraryTimeoutSet(uint32 eid, address oldLib, uint256 expiry);\\n event SendLibrarySet(address sender, uint32 eid, address newLib);\\n event ReceiveLibrarySet(address receiver, uint32 eid, address newLib);\\n event ReceiveLibraryTimeoutSet(address receiver, uint32 eid, address oldLib, uint256 timeout);\\n\\n function registerLibrary(address _lib) external;\\n\\n function isRegisteredLibrary(address _lib) external view returns (bool);\\n\\n function getRegisteredLibraries() external view returns (address[] memory);\\n\\n function setDefaultSendLibrary(uint32 _eid, address _newLib) external;\\n\\n function defaultSendLibrary(uint32 _eid) external view returns (address);\\n\\n function setDefaultReceiveLibrary(uint32 _eid, address _newLib, uint256 _gracePeriod) external;\\n\\n function defaultReceiveLibrary(uint32 _eid) external view returns (address);\\n\\n function setDefaultReceiveLibraryTimeout(uint32 _eid, address _lib, uint256 _expiry) external;\\n\\n function defaultReceiveLibraryTimeout(uint32 _eid) external view returns (address lib, uint256 expiry);\\n\\n function isSupportedEid(uint32 _eid) external view returns (bool);\\n\\n function isValidReceiveLibrary(address _receiver, uint32 _eid, address _lib) external view returns (bool);\\n\\n /// ------------------- OApp interfaces -------------------\\n function setSendLibrary(address _oapp, uint32 _eid, address _newLib) external;\\n\\n function getSendLibrary(address _sender, uint32 _eid) external view returns (address lib);\\n\\n function isDefaultSendLibrary(address _sender, uint32 _eid) external view returns (bool);\\n\\n function setReceiveLibrary(address _oapp, uint32 _eid, address _newLib, uint256 _gracePeriod) external;\\n\\n function getReceiveLibrary(address _receiver, uint32 _eid) external view returns (address lib, bool isDefault);\\n\\n function setReceiveLibraryTimeout(address _oapp, uint32 _eid, address _lib, uint256 _expiry) external;\\n\\n function receiveLibraryTimeout(address _receiver, uint32 _eid) external view returns (address lib, uint256 expiry);\\n\\n function setConfig(address _oapp, address _lib, SetConfigParam[] calldata _params) external;\\n\\n function getConfig(\\n address _oapp,\\n address _lib,\\n uint32 _eid,\\n uint32 _configType\\n ) external view returns (bytes memory config);\\n}\\n\",\"keccak256\":\"0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\ninterface IMessagingChannel {\\n event InboundNonceSkipped(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce);\\n event PacketNilified(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce, bytes32 payloadHash);\\n event PacketBurnt(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce, bytes32 payloadHash);\\n\\n function eid() external view returns (uint32);\\n\\n // this is an emergency function if a message cannot be verified for some reasons\\n // required to provide _nextNonce to avoid race condition\\n function skip(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce) external;\\n\\n function nilify(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce, bytes32 _payloadHash) external;\\n\\n function burn(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce, bytes32 _payloadHash) external;\\n\\n function nextGuid(address _sender, uint32 _dstEid, bytes32 _receiver) external view returns (bytes32);\\n\\n function inboundNonce(address _receiver, uint32 _srcEid, bytes32 _sender) external view returns (uint64);\\n\\n function outboundNonce(address _sender, uint32 _dstEid, bytes32 _receiver) external view returns (uint64);\\n\\n function inboundPayloadHash(\\n address _receiver,\\n uint32 _srcEid,\\n bytes32 _sender,\\n uint64 _nonce\\n ) external view returns (bytes32);\\n\\n function lazyInboundNonce(address _receiver, uint32 _srcEid, bytes32 _sender) external view returns (uint64);\\n}\\n\",\"keccak256\":\"0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\ninterface IMessagingComposer {\\n event ComposeSent(address from, address to, bytes32 guid, uint16 index, bytes message);\\n event ComposeDelivered(address from, address to, bytes32 guid, uint16 index);\\n event LzComposeAlert(\\n address indexed from,\\n address indexed to,\\n address indexed executor,\\n bytes32 guid,\\n uint16 index,\\n uint256 gas,\\n uint256 value,\\n bytes message,\\n bytes extraData,\\n bytes reason\\n );\\n\\n function composeQueue(\\n address _from,\\n address _to,\\n bytes32 _guid,\\n uint16 _index\\n ) external view returns (bytes32 messageHash);\\n\\n function sendCompose(address _to, bytes32 _guid, uint16 _index, bytes calldata _message) external;\\n\\n function lzCompose(\\n address _from,\\n address _to,\\n bytes32 _guid,\\n uint16 _index,\\n bytes calldata _message,\\n bytes calldata _extraData\\n ) external payable;\\n}\\n\",\"keccak256\":\"0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\ninterface IMessagingContext {\\n function isSendingMessage() external view returns (bool);\\n\\n function getSendContext() external view returns (uint32 dstEid, address sender);\\n}\\n\",\"keccak256\":\"0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e\",\"license\":\"MIT\"},\"@layerzerolabs/oapp-evm/contracts/oapp/OAppCore.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\nimport { IOAppCore, ILayerZeroEndpointV2 } from \\\"./interfaces/IOAppCore.sol\\\";\\n\\n/**\\n * @title OAppCore\\n * @dev Abstract contract implementing the IOAppCore interface with basic OApp configurations.\\n */\\nabstract contract OAppCore is IOAppCore, Ownable {\\n // The LayerZero endpoint associated with the given OApp\\n ILayerZeroEndpointV2 public immutable endpoint;\\n\\n // Mapping to store peers associated with corresponding endpoints\\n mapping(uint32 eid => bytes32 peer) public peers;\\n\\n /**\\n * @dev Constructor to initialize the OAppCore with the provided endpoint and delegate.\\n * @param _endpoint The address of the LOCAL Layer Zero endpoint.\\n * @param _delegate The delegate capable of making OApp configurations inside of the endpoint.\\n *\\n * @dev The delegate typically should be set as the owner of the contract.\\n */\\n constructor(address _endpoint, address _delegate) {\\n endpoint = ILayerZeroEndpointV2(_endpoint);\\n\\n if (_delegate == address(0)) revert InvalidDelegate();\\n endpoint.setDelegate(_delegate);\\n }\\n\\n /**\\n * @notice Sets the peer address (OApp instance) for a corresponding endpoint.\\n * @param _eid The endpoint ID.\\n * @param _peer The address of the peer to be associated with the corresponding endpoint.\\n *\\n * @dev Only the owner/admin of the OApp can call this function.\\n * @dev Indicates that the peer is trusted to send LayerZero messages to this OApp.\\n * @dev Set this to bytes32(0) to remove the peer address.\\n * @dev Peer is a bytes32 to accommodate non-evm chains.\\n */\\n function setPeer(uint32 _eid, bytes32 _peer) public virtual onlyOwner {\\n _setPeer(_eid, _peer);\\n }\\n\\n /**\\n * @notice Sets the peer address (OApp instance) for a corresponding endpoint.\\n * @param _eid The endpoint ID.\\n * @param _peer The address of the peer to be associated with the corresponding endpoint.\\n *\\n * @dev Indicates that the peer is trusted to send LayerZero messages to this OApp.\\n * @dev Set this to bytes32(0) to remove the peer address.\\n * @dev Peer is a bytes32 to accommodate non-evm chains.\\n */\\n function _setPeer(uint32 _eid, bytes32 _peer) internal virtual {\\n peers[_eid] = _peer;\\n emit PeerSet(_eid, _peer);\\n }\\n\\n /**\\n * @notice Internal function to get the peer address associated with a specific endpoint; reverts if NOT set.\\n * ie. the peer is set to bytes32(0).\\n * @param _eid The endpoint ID.\\n * @return peer The address of the peer associated with the specified endpoint.\\n */\\n function _getPeerOrRevert(uint32 _eid) internal view virtual returns (bytes32) {\\n bytes32 peer = peers[_eid];\\n if (peer == bytes32(0)) revert NoPeer(_eid);\\n return peer;\\n }\\n\\n /**\\n * @notice Sets the delegate address for the OApp.\\n * @param _delegate The address of the delegate to be set.\\n *\\n * @dev Only the owner/admin of the OApp can call this function.\\n * @dev Provides the ability for a delegate to set configs, on behalf of the OApp, directly on the Endpoint contract.\\n */\\n function setDelegate(address _delegate) public onlyOwner {\\n endpoint.setDelegate(_delegate);\\n }\\n}\\n\",\"keccak256\":\"0x13a9c2d1d2c1f086b8624f2e84c4a4702212daae36f701d92bb915b535cbe4cc\",\"license\":\"MIT\"},\"@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppCore.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\nimport { ILayerZeroEndpointV2 } from \\\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\\\";\\n\\n/**\\n * @title IOAppCore\\n */\\ninterface IOAppCore {\\n // Custom error messages\\n error OnlyPeer(uint32 eid, bytes32 sender);\\n error NoPeer(uint32 eid);\\n error InvalidEndpointCall();\\n error InvalidDelegate();\\n\\n // Event emitted when a peer (OApp) is set for a corresponding endpoint\\n event PeerSet(uint32 eid, bytes32 peer);\\n\\n /**\\n * @notice Retrieves the OApp version information.\\n * @return senderVersion The version of the OAppSender.sol contract.\\n * @return receiverVersion The version of the OAppReceiver.sol contract.\\n */\\n function oAppVersion() external view returns (uint64 senderVersion, uint64 receiverVersion);\\n\\n /**\\n * @notice Retrieves the LayerZero endpoint associated with the OApp.\\n * @return iEndpoint The LayerZero endpoint as an interface.\\n */\\n function endpoint() external view returns (ILayerZeroEndpointV2 iEndpoint);\\n\\n /**\\n * @notice Retrieves the peer (OApp) associated with a corresponding endpoint.\\n * @param _eid The endpoint ID.\\n * @return peer The peer address (OApp instance) associated with the corresponding endpoint.\\n */\\n function peers(uint32 _eid) external view returns (bytes32 peer);\\n\\n /**\\n * @notice Sets the peer address (OApp instance) for a corresponding endpoint.\\n * @param _eid The endpoint ID.\\n * @param _peer The address of the peer to be associated with the corresponding endpoint.\\n */\\n function setPeer(uint32 _eid, bytes32 _peer) external;\\n\\n /**\\n * @notice Sets the delegate address for the OApp Core.\\n * @param _delegate The address of the delegate to be set.\\n */\\n function setDelegate(address _delegate) external;\\n}\\n\",\"keccak256\":\"0x40e49f2de74506e1da5dcaed53a39853f691647f4ceb0fccc8f49a68d3f47c58\",\"license\":\"MIT\"},\"@openzeppelin/contracts/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {Context} from \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * The initial owner is set to the address provided by the deployer. This can\\n * later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n /**\\n * @dev The caller account is not authorized to perform an operation.\\n */\\n error OwnableUnauthorizedAccount(address account);\\n\\n /**\\n * @dev The owner is not a valid owner account. (eg. `address(0)`)\\n */\\n error OwnableInvalidOwner(address owner);\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the address provided by the deployer as the initial owner.\\n */\\n constructor(address initialOwner) {\\n if (initialOwner == address(0)) {\\n revert OwnableInvalidOwner(address(0));\\n }\\n _transferOwnership(initialOwner);\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n _checkOwner();\\n _;\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if the sender is not the owner.\\n */\\n function _checkOwner() internal view virtual {\\n if (owner() != _msgSender()) {\\n revert OwnableUnauthorizedAccount(_msgSender());\\n }\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby disabling any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n if (newOwner == address(0)) {\\n revert OwnableInvalidOwner(address(0));\\n }\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n}\\n\",\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n\\n function _contextSuffixLength() internal view virtual returns (uint256) {\\n return 0;\\n }\\n}\\n\",\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\"}},\"version\":1}", - "storageLayout": { - "storage": [ - { - "astId": 3837, - "contract": "@layerzerolabs/oapp-evm/contracts/oapp/OAppCore.sol:OAppCore", - "label": "_owner", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 1390, - "contract": "@layerzerolabs/oapp-evm/contracts/oapp/OAppCore.sol:OAppCore", - "label": "peers", - "offset": 0, - "slot": "1", - "type": "t_mapping(t_uint32,t_bytes32)" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_bytes32": { - "encoding": "inplace", - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_mapping(t_uint32,t_bytes32)": { - "encoding": "mapping", - "key": "t_uint32", - "label": "mapping(uint32 => bytes32)", - "numberOfBytes": "32", - "value": "t_bytes32" - }, - "t_uint32": { - "encoding": "inplace", - "label": "uint32", - "numberOfBytes": "4" - } - } - }, - "userdoc": { - "kind": "user", - "methods": { - "endpoint()": { - "notice": "Retrieves the LayerZero endpoint associated with the OApp." - }, - "oAppVersion()": { - "notice": "Retrieves the OApp version information." - }, - "peers(uint32)": { - "notice": "Retrieves the peer (OApp) associated with a corresponding endpoint." - }, - "setDelegate(address)": { - "notice": "Sets the delegate address for the OApp." - }, - "setPeer(uint32,bytes32)": { - "notice": "Sets the peer address (OApp instance) for a corresponding endpoint." - } - }, - "version": 1 - } - } - }, - "@layerzerolabs/oapp-evm/contracts/oapp/OAppReceiver.sol": { - "OAppReceiver": { - "abi": [ - { "inputs": [], "name": "InvalidDelegate", "type": "error" }, - { "inputs": [], "name": "InvalidEndpointCall", "type": "error" }, - { - "inputs": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" } - ], - "name": "NoPeer", - "type": "error" - }, - { - "inputs": [ - { "internalType": "address", "name": "addr", "type": "address" } - ], - "name": "OnlyEndpoint", - "type": "error" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - } - ], - "name": "OnlyPeer", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "OwnableInvalidOwner", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "OwnableUnauthorizedAccount", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "eid", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "peer", - "type": "bytes32" - } - ], - "name": "PeerSet", - "type": "event" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - } - ], - "internalType": "struct Origin", - "name": "origin", - "type": "tuple" - } - ], - "name": "allowInitializePath", - "outputs": [ - { "internalType": "bool", "name": "", "type": "bool" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "endpoint", - "outputs": [ - { - "internalType": "contract ILayerZeroEndpointV2", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - } - ], - "internalType": "struct Origin", - "name": "", - "type": "tuple" - }, - { "internalType": "bytes", "name": "", "type": "bytes" }, - { - "internalType": "address", - "name": "_sender", - "type": "address" - } - ], - "name": "isComposeMsgSender", - "outputs": [ - { "internalType": "bool", "name": "", "type": "bool" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - } - ], - "internalType": "struct Origin", - "name": "_origin", - "type": "tuple" - }, - { - "internalType": "bytes32", - "name": "_guid", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "_message", - "type": "bytes" - }, - { - "internalType": "address", - "name": "_executor", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "lzReceive", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "", "type": "uint32" }, - { "internalType": "bytes32", "name": "", "type": "bytes32" } - ], - "name": "nextNonce", - "outputs": [ - { "internalType": "uint64", "name": "nonce", "type": "uint64" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "oAppVersion", - "outputs": [ - { - "internalType": "uint64", - "name": "senderVersion", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "receiverVersion", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" } - ], - "name": "peers", - "outputs": [ - { "internalType": "bytes32", "name": "peer", "type": "bytes32" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_delegate", - "type": "address" - } - ], - "name": "setDelegate", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { - "internalType": "bytes32", - "name": "_peer", - "type": "bytes32" - } - ], - "name": "setPeer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "devdoc": { - "details": "Abstract contract implementing the ILayerZeroReceiver interface and extending OAppCore for OApp receivers.", - "errors": { - "OwnableInvalidOwner(address)": [ - { - "details": "The owner is not a valid owner account. (eg. `address(0)`)" - } - ], - "OwnableUnauthorizedAccount(address)": [ - { - "details": "The caller account is not authorized to perform an operation." - } - ] - }, - "kind": "dev", - "methods": { - "allowInitializePath((uint32,bytes32,uint64))": { - "details": "This indicates to the endpoint that the OApp has enabled msgs for this particular path to be received.This defaults to assuming if a peer has been set, its initialized. Can be overridden by the OApp if there is other logic to determine this.", - "params": { - "origin": "The origin information containing the source endpoint and sender address." - }, - "returns": { "_0": "Whether the path has been initialized." } - }, - "isComposeMsgSender((uint32,bytes32,uint64),bytes,address)": { - "details": "_origin The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message._message The lzReceive payload.Applications can optionally choose to implement separate composeMsg senders that are NOT the bridging layer.The default sender IS the OAppReceiver implementer.", - "params": { "_sender": "The sender address." }, - "returns": { "_0": "isSender Is a valid sender." } - }, - "lzReceive((uint32,bytes32,uint64),bytes32,bytes,address,bytes)": { - "details": "Entry point for receiving messages or packets from the endpoint.Entry point for receiving msg/packet from the LayerZero endpoint.", - "params": { - "_executor": "The address of the executor for the received message.", - "_extraData": "Additional arbitrary data provided by the corresponding executor.", - "_guid": "The unique identifier for the received LayerZero message.", - "_message": "The payload of the received message.", - "_origin": "The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message." - } - }, - "nextNonce(uint32,bytes32)": { - "details": "_srcEid The source endpoint ID._sender The sender address.The path nonce starts from 1. If 0 is returned it means that there is NO nonce ordered enforcement.Is required by the off-chain executor to determine the OApp expects msg execution is ordered.This is also enforced by the OApp.By default this is NOT enabled. ie. nextNonce is hardcoded to return 0.", - "returns": { "nonce": "The next nonce." } - }, - "oAppVersion()": { - "details": "Providing 0 as the default for OAppSender version. Indicates that the OAppSender is not implemented. ie. this is a RECEIVE only OApp.If the OApp uses both OAppSender and OAppReceiver, then this needs to be override returning the correct versions.", - "returns": { - "receiverVersion": "The version of the OAppReceiver.sol contract.", - "senderVersion": "The version of the OAppSender.sol contract." - } - }, - "owner()": { - "details": "Returns the address of the current owner." - }, - "renounceOwnership()": { - "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner." - }, - "setDelegate(address)": { - "details": "Only the owner/admin of the OApp can call this function.Provides the ability for a delegate to set configs, on behalf of the OApp, directly on the Endpoint contract.", - "params": { - "_delegate": "The address of the delegate to be set." - } - }, - "setPeer(uint32,bytes32)": { - "details": "Only the owner/admin of the OApp can call this function.Indicates that the peer is trusted to send LayerZero messages to this OApp.Set this to bytes32(0) to remove the peer address.Peer is a bytes32 to accommodate non-evm chains.", - "params": { - "_eid": "The endpoint ID.", - "_peer": "The address of the peer to be associated with the corresponding endpoint." - } - }, - "transferOwnership(address)": { - "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." - } - }, - "title": "OAppReceiver", - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": { - "allowInitializePath((uint32,bytes32,uint64))": "ff7bd03d", - "endpoint()": "5e280f11", - "isComposeMsgSender((uint32,bytes32,uint64),bytes,address)": "82413eac", - "lzReceive((uint32,bytes32,uint64),bytes32,bytes,address,bytes)": "13137d65", - "nextNonce(uint32,bytes32)": "7d25a05e", - "oAppVersion()": "17442b70", - "owner()": "8da5cb5b", - "peers(uint32)": "bb0b6a53", - "renounceOwnership()": "715018a6", - "setDelegate(address)": "ca5eb5e1", - "setPeer(uint32,bytes32)": "3400288b", - "transferOwnership(address)": "f2fde38b" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"InvalidDelegate\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidEndpointCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"}],\"name\":\"NoPeer\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"OnlyEndpoint\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"}],\"name\":\"OnlyPeer\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"peer\",\"type\":\"bytes32\"}],\"name\":\"PeerSet\",\"type\":\"event\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"origin\",\"type\":\"tuple\"}],\"name\":\"allowInitializePath\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"endpoint\",\"outputs\":[{\"internalType\":\"contract ILayerZeroEndpointV2\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"}],\"name\":\"isComposeMsgSender\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"_origin\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"_guid\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"_executor\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"lzReceive\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"nextNonce\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"oAppVersion\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"senderVersion\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"receiverVersion\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"}],\"name\":\"peers\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"peer\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_delegate\",\"type\":\"address\"}],\"name\":\"setDelegate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_peer\",\"type\":\"bytes32\"}],\"name\":\"setPeer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Abstract contract implementing the ILayerZeroReceiver interface and extending OAppCore for OApp receivers.\",\"errors\":{\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}]},\"kind\":\"dev\",\"methods\":{\"allowInitializePath((uint32,bytes32,uint64))\":{\"details\":\"This indicates to the endpoint that the OApp has enabled msgs for this particular path to be received.This defaults to assuming if a peer has been set, its initialized. Can be overridden by the OApp if there is other logic to determine this.\",\"params\":{\"origin\":\"The origin information containing the source endpoint and sender address.\"},\"returns\":{\"_0\":\"Whether the path has been initialized.\"}},\"isComposeMsgSender((uint32,bytes32,uint64),bytes,address)\":{\"details\":\"_origin The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message._message The lzReceive payload.Applications can optionally choose to implement separate composeMsg senders that are NOT the bridging layer.The default sender IS the OAppReceiver implementer.\",\"params\":{\"_sender\":\"The sender address.\"},\"returns\":{\"_0\":\"isSender Is a valid sender.\"}},\"lzReceive((uint32,bytes32,uint64),bytes32,bytes,address,bytes)\":{\"details\":\"Entry point for receiving messages or packets from the endpoint.Entry point for receiving msg/packet from the LayerZero endpoint.\",\"params\":{\"_executor\":\"The address of the executor for the received message.\",\"_extraData\":\"Additional arbitrary data provided by the corresponding executor.\",\"_guid\":\"The unique identifier for the received LayerZero message.\",\"_message\":\"The payload of the received message.\",\"_origin\":\"The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message.\"}},\"nextNonce(uint32,bytes32)\":{\"details\":\"_srcEid The source endpoint ID._sender The sender address.The path nonce starts from 1. If 0 is returned it means that there is NO nonce ordered enforcement.Is required by the off-chain executor to determine the OApp expects msg execution is ordered.This is also enforced by the OApp.By default this is NOT enabled. ie. nextNonce is hardcoded to return 0.\",\"returns\":{\"nonce\":\"The next nonce.\"}},\"oAppVersion()\":{\"details\":\"Providing 0 as the default for OAppSender version. Indicates that the OAppSender is not implemented. ie. this is a RECEIVE only OApp.If the OApp uses both OAppSender and OAppReceiver, then this needs to be override returning the correct versions.\",\"returns\":{\"receiverVersion\":\"The version of the OAppReceiver.sol contract.\",\"senderVersion\":\"The version of the OAppSender.sol contract.\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"setDelegate(address)\":{\"details\":\"Only the owner/admin of the OApp can call this function.Provides the ability for a delegate to set configs, on behalf of the OApp, directly on the Endpoint contract.\",\"params\":{\"_delegate\":\"The address of the delegate to be set.\"}},\"setPeer(uint32,bytes32)\":{\"details\":\"Only the owner/admin of the OApp can call this function.Indicates that the peer is trusted to send LayerZero messages to this OApp.Set this to bytes32(0) to remove the peer address.Peer is a bytes32 to accommodate non-evm chains.\",\"params\":{\"_eid\":\"The endpoint ID.\",\"_peer\":\"The address of the peer to be associated with the corresponding endpoint.\"}},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"title\":\"OAppReceiver\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"allowInitializePath((uint32,bytes32,uint64))\":{\"notice\":\"Checks if the path initialization is allowed based on the provided origin.\"},\"endpoint()\":{\"notice\":\"Retrieves the LayerZero endpoint associated with the OApp.\"},\"isComposeMsgSender((uint32,bytes32,uint64),bytes,address)\":{\"notice\":\"Indicates whether an address is an approved composeMsg sender to the Endpoint.\"},\"nextNonce(uint32,bytes32)\":{\"notice\":\"Retrieves the next nonce for a given source endpoint and sender address.\"},\"oAppVersion()\":{\"notice\":\"Retrieves the OApp version information.\"},\"peers(uint32)\":{\"notice\":\"Retrieves the peer (OApp) associated with a corresponding endpoint.\"},\"setDelegate(address)\":{\"notice\":\"Sets the delegate address for the OApp.\"},\"setPeer(uint32,bytes32)\":{\"notice\":\"Sets the peer address (OApp instance) for a corresponding endpoint.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@layerzerolabs/oapp-evm/contracts/oapp/OAppReceiver.sol\":\"OAppReceiver\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\nimport { IMessageLibManager } from \\\"./IMessageLibManager.sol\\\";\\nimport { IMessagingComposer } from \\\"./IMessagingComposer.sol\\\";\\nimport { IMessagingChannel } from \\\"./IMessagingChannel.sol\\\";\\nimport { IMessagingContext } from \\\"./IMessagingContext.sol\\\";\\n\\nstruct MessagingParams {\\n uint32 dstEid;\\n bytes32 receiver;\\n bytes message;\\n bytes options;\\n bool payInLzToken;\\n}\\n\\nstruct MessagingReceipt {\\n bytes32 guid;\\n uint64 nonce;\\n MessagingFee fee;\\n}\\n\\nstruct MessagingFee {\\n uint256 nativeFee;\\n uint256 lzTokenFee;\\n}\\n\\nstruct Origin {\\n uint32 srcEid;\\n bytes32 sender;\\n uint64 nonce;\\n}\\n\\ninterface ILayerZeroEndpointV2 is IMessageLibManager, IMessagingComposer, IMessagingChannel, IMessagingContext {\\n event PacketSent(bytes encodedPayload, bytes options, address sendLibrary);\\n\\n event PacketVerified(Origin origin, address receiver, bytes32 payloadHash);\\n\\n event PacketDelivered(Origin origin, address receiver);\\n\\n event LzReceiveAlert(\\n address indexed receiver,\\n address indexed executor,\\n Origin origin,\\n bytes32 guid,\\n uint256 gas,\\n uint256 value,\\n bytes message,\\n bytes extraData,\\n bytes reason\\n );\\n\\n event LzTokenSet(address token);\\n\\n event DelegateSet(address sender, address delegate);\\n\\n function quote(MessagingParams calldata _params, address _sender) external view returns (MessagingFee memory);\\n\\n function send(\\n MessagingParams calldata _params,\\n address _refundAddress\\n ) external payable returns (MessagingReceipt memory);\\n\\n function verify(Origin calldata _origin, address _receiver, bytes32 _payloadHash) external;\\n\\n function verifiable(Origin calldata _origin, address _receiver) external view returns (bool);\\n\\n function initializable(Origin calldata _origin, address _receiver) external view returns (bool);\\n\\n function lzReceive(\\n Origin calldata _origin,\\n address _receiver,\\n bytes32 _guid,\\n bytes calldata _message,\\n bytes calldata _extraData\\n ) external payable;\\n\\n // oapp can burn messages partially by calling this function with its own business logic if messages are verified in order\\n function clear(address _oapp, Origin calldata _origin, bytes32 _guid, bytes calldata _message) external;\\n\\n function setLzToken(address _lzToken) external;\\n\\n function lzToken() external view returns (address);\\n\\n function nativeToken() external view returns (address);\\n\\n function setDelegate(address _delegate) external;\\n}\\n\",\"keccak256\":\"0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\nimport { Origin } from \\\"./ILayerZeroEndpointV2.sol\\\";\\n\\ninterface ILayerZeroReceiver {\\n function allowInitializePath(Origin calldata _origin) external view returns (bool);\\n\\n function nextNonce(uint32 _eid, bytes32 _sender) external view returns (uint64);\\n\\n function lzReceive(\\n Origin calldata _origin,\\n bytes32 _guid,\\n bytes calldata _message,\\n address _executor,\\n bytes calldata _extraData\\n ) external payable;\\n}\\n\",\"keccak256\":\"0x9641abba8d53b08bb517d1b74801dd15ea7b84d77a6719085bd96c8ea94e3ca0\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\nstruct SetConfigParam {\\n uint32 eid;\\n uint32 configType;\\n bytes config;\\n}\\n\\ninterface IMessageLibManager {\\n struct Timeout {\\n address lib;\\n uint256 expiry;\\n }\\n\\n event LibraryRegistered(address newLib);\\n event DefaultSendLibrarySet(uint32 eid, address newLib);\\n event DefaultReceiveLibrarySet(uint32 eid, address newLib);\\n event DefaultReceiveLibraryTimeoutSet(uint32 eid, address oldLib, uint256 expiry);\\n event SendLibrarySet(address sender, uint32 eid, address newLib);\\n event ReceiveLibrarySet(address receiver, uint32 eid, address newLib);\\n event ReceiveLibraryTimeoutSet(address receiver, uint32 eid, address oldLib, uint256 timeout);\\n\\n function registerLibrary(address _lib) external;\\n\\n function isRegisteredLibrary(address _lib) external view returns (bool);\\n\\n function getRegisteredLibraries() external view returns (address[] memory);\\n\\n function setDefaultSendLibrary(uint32 _eid, address _newLib) external;\\n\\n function defaultSendLibrary(uint32 _eid) external view returns (address);\\n\\n function setDefaultReceiveLibrary(uint32 _eid, address _newLib, uint256 _gracePeriod) external;\\n\\n function defaultReceiveLibrary(uint32 _eid) external view returns (address);\\n\\n function setDefaultReceiveLibraryTimeout(uint32 _eid, address _lib, uint256 _expiry) external;\\n\\n function defaultReceiveLibraryTimeout(uint32 _eid) external view returns (address lib, uint256 expiry);\\n\\n function isSupportedEid(uint32 _eid) external view returns (bool);\\n\\n function isValidReceiveLibrary(address _receiver, uint32 _eid, address _lib) external view returns (bool);\\n\\n /// ------------------- OApp interfaces -------------------\\n function setSendLibrary(address _oapp, uint32 _eid, address _newLib) external;\\n\\n function getSendLibrary(address _sender, uint32 _eid) external view returns (address lib);\\n\\n function isDefaultSendLibrary(address _sender, uint32 _eid) external view returns (bool);\\n\\n function setReceiveLibrary(address _oapp, uint32 _eid, address _newLib, uint256 _gracePeriod) external;\\n\\n function getReceiveLibrary(address _receiver, uint32 _eid) external view returns (address lib, bool isDefault);\\n\\n function setReceiveLibraryTimeout(address _oapp, uint32 _eid, address _lib, uint256 _expiry) external;\\n\\n function receiveLibraryTimeout(address _receiver, uint32 _eid) external view returns (address lib, uint256 expiry);\\n\\n function setConfig(address _oapp, address _lib, SetConfigParam[] calldata _params) external;\\n\\n function getConfig(\\n address _oapp,\\n address _lib,\\n uint32 _eid,\\n uint32 _configType\\n ) external view returns (bytes memory config);\\n}\\n\",\"keccak256\":\"0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\ninterface IMessagingChannel {\\n event InboundNonceSkipped(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce);\\n event PacketNilified(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce, bytes32 payloadHash);\\n event PacketBurnt(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce, bytes32 payloadHash);\\n\\n function eid() external view returns (uint32);\\n\\n // this is an emergency function if a message cannot be verified for some reasons\\n // required to provide _nextNonce to avoid race condition\\n function skip(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce) external;\\n\\n function nilify(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce, bytes32 _payloadHash) external;\\n\\n function burn(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce, bytes32 _payloadHash) external;\\n\\n function nextGuid(address _sender, uint32 _dstEid, bytes32 _receiver) external view returns (bytes32);\\n\\n function inboundNonce(address _receiver, uint32 _srcEid, bytes32 _sender) external view returns (uint64);\\n\\n function outboundNonce(address _sender, uint32 _dstEid, bytes32 _receiver) external view returns (uint64);\\n\\n function inboundPayloadHash(\\n address _receiver,\\n uint32 _srcEid,\\n bytes32 _sender,\\n uint64 _nonce\\n ) external view returns (bytes32);\\n\\n function lazyInboundNonce(address _receiver, uint32 _srcEid, bytes32 _sender) external view returns (uint64);\\n}\\n\",\"keccak256\":\"0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\ninterface IMessagingComposer {\\n event ComposeSent(address from, address to, bytes32 guid, uint16 index, bytes message);\\n event ComposeDelivered(address from, address to, bytes32 guid, uint16 index);\\n event LzComposeAlert(\\n address indexed from,\\n address indexed to,\\n address indexed executor,\\n bytes32 guid,\\n uint16 index,\\n uint256 gas,\\n uint256 value,\\n bytes message,\\n bytes extraData,\\n bytes reason\\n );\\n\\n function composeQueue(\\n address _from,\\n address _to,\\n bytes32 _guid,\\n uint16 _index\\n ) external view returns (bytes32 messageHash);\\n\\n function sendCompose(address _to, bytes32 _guid, uint16 _index, bytes calldata _message) external;\\n\\n function lzCompose(\\n address _from,\\n address _to,\\n bytes32 _guid,\\n uint16 _index,\\n bytes calldata _message,\\n bytes calldata _extraData\\n ) external payable;\\n}\\n\",\"keccak256\":\"0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\ninterface IMessagingContext {\\n function isSendingMessage() external view returns (bool);\\n\\n function getSendContext() external view returns (uint32 dstEid, address sender);\\n}\\n\",\"keccak256\":\"0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e\",\"license\":\"MIT\"},\"@layerzerolabs/oapp-evm/contracts/oapp/OAppCore.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\nimport { IOAppCore, ILayerZeroEndpointV2 } from \\\"./interfaces/IOAppCore.sol\\\";\\n\\n/**\\n * @title OAppCore\\n * @dev Abstract contract implementing the IOAppCore interface with basic OApp configurations.\\n */\\nabstract contract OAppCore is IOAppCore, Ownable {\\n // The LayerZero endpoint associated with the given OApp\\n ILayerZeroEndpointV2 public immutable endpoint;\\n\\n // Mapping to store peers associated with corresponding endpoints\\n mapping(uint32 eid => bytes32 peer) public peers;\\n\\n /**\\n * @dev Constructor to initialize the OAppCore with the provided endpoint and delegate.\\n * @param _endpoint The address of the LOCAL Layer Zero endpoint.\\n * @param _delegate The delegate capable of making OApp configurations inside of the endpoint.\\n *\\n * @dev The delegate typically should be set as the owner of the contract.\\n */\\n constructor(address _endpoint, address _delegate) {\\n endpoint = ILayerZeroEndpointV2(_endpoint);\\n\\n if (_delegate == address(0)) revert InvalidDelegate();\\n endpoint.setDelegate(_delegate);\\n }\\n\\n /**\\n * @notice Sets the peer address (OApp instance) for a corresponding endpoint.\\n * @param _eid The endpoint ID.\\n * @param _peer The address of the peer to be associated with the corresponding endpoint.\\n *\\n * @dev Only the owner/admin of the OApp can call this function.\\n * @dev Indicates that the peer is trusted to send LayerZero messages to this OApp.\\n * @dev Set this to bytes32(0) to remove the peer address.\\n * @dev Peer is a bytes32 to accommodate non-evm chains.\\n */\\n function setPeer(uint32 _eid, bytes32 _peer) public virtual onlyOwner {\\n _setPeer(_eid, _peer);\\n }\\n\\n /**\\n * @notice Sets the peer address (OApp instance) for a corresponding endpoint.\\n * @param _eid The endpoint ID.\\n * @param _peer The address of the peer to be associated with the corresponding endpoint.\\n *\\n * @dev Indicates that the peer is trusted to send LayerZero messages to this OApp.\\n * @dev Set this to bytes32(0) to remove the peer address.\\n * @dev Peer is a bytes32 to accommodate non-evm chains.\\n */\\n function _setPeer(uint32 _eid, bytes32 _peer) internal virtual {\\n peers[_eid] = _peer;\\n emit PeerSet(_eid, _peer);\\n }\\n\\n /**\\n * @notice Internal function to get the peer address associated with a specific endpoint; reverts if NOT set.\\n * ie. the peer is set to bytes32(0).\\n * @param _eid The endpoint ID.\\n * @return peer The address of the peer associated with the specified endpoint.\\n */\\n function _getPeerOrRevert(uint32 _eid) internal view virtual returns (bytes32) {\\n bytes32 peer = peers[_eid];\\n if (peer == bytes32(0)) revert NoPeer(_eid);\\n return peer;\\n }\\n\\n /**\\n * @notice Sets the delegate address for the OApp.\\n * @param _delegate The address of the delegate to be set.\\n *\\n * @dev Only the owner/admin of the OApp can call this function.\\n * @dev Provides the ability for a delegate to set configs, on behalf of the OApp, directly on the Endpoint contract.\\n */\\n function setDelegate(address _delegate) public onlyOwner {\\n endpoint.setDelegate(_delegate);\\n }\\n}\\n\",\"keccak256\":\"0x13a9c2d1d2c1f086b8624f2e84c4a4702212daae36f701d92bb915b535cbe4cc\",\"license\":\"MIT\"},\"@layerzerolabs/oapp-evm/contracts/oapp/OAppReceiver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\nimport { IOAppReceiver, Origin } from \\\"./interfaces/IOAppReceiver.sol\\\";\\nimport { OAppCore } from \\\"./OAppCore.sol\\\";\\n\\n/**\\n * @title OAppReceiver\\n * @dev Abstract contract implementing the ILayerZeroReceiver interface and extending OAppCore for OApp receivers.\\n */\\nabstract contract OAppReceiver is IOAppReceiver, OAppCore {\\n // Custom error message for when the caller is not the registered endpoint/\\n error OnlyEndpoint(address addr);\\n\\n // @dev The version of the OAppReceiver implementation.\\n // @dev Version is bumped when changes are made to this contract.\\n uint64 internal constant RECEIVER_VERSION = 2;\\n\\n /**\\n * @notice Retrieves the OApp version information.\\n * @return senderVersion The version of the OAppSender.sol contract.\\n * @return receiverVersion The version of the OAppReceiver.sol contract.\\n *\\n * @dev Providing 0 as the default for OAppSender version. Indicates that the OAppSender is not implemented.\\n * ie. this is a RECEIVE only OApp.\\n * @dev If the OApp uses both OAppSender and OAppReceiver, then this needs to be override returning the correct versions.\\n */\\n function oAppVersion() public view virtual returns (uint64 senderVersion, uint64 receiverVersion) {\\n return (0, RECEIVER_VERSION);\\n }\\n\\n /**\\n * @notice Indicates whether an address is an approved composeMsg sender to the Endpoint.\\n * @dev _origin The origin information containing the source endpoint and sender address.\\n * - srcEid: The source chain endpoint ID.\\n * - sender: The sender address on the src chain.\\n * - nonce: The nonce of the message.\\n * @dev _message The lzReceive payload.\\n * @param _sender The sender address.\\n * @return isSender Is a valid sender.\\n *\\n * @dev Applications can optionally choose to implement separate composeMsg senders that are NOT the bridging layer.\\n * @dev The default sender IS the OAppReceiver implementer.\\n */\\n function isComposeMsgSender(\\n Origin calldata /*_origin*/,\\n bytes calldata /*_message*/,\\n address _sender\\n ) public view virtual returns (bool) {\\n return _sender == address(this);\\n }\\n\\n /**\\n * @notice Checks if the path initialization is allowed based on the provided origin.\\n * @param origin The origin information containing the source endpoint and sender address.\\n * @return Whether the path has been initialized.\\n *\\n * @dev This indicates to the endpoint that the OApp has enabled msgs for this particular path to be received.\\n * @dev This defaults to assuming if a peer has been set, its initialized.\\n * Can be overridden by the OApp if there is other logic to determine this.\\n */\\n function allowInitializePath(Origin calldata origin) public view virtual returns (bool) {\\n return peers[origin.srcEid] == origin.sender;\\n }\\n\\n /**\\n * @notice Retrieves the next nonce for a given source endpoint and sender address.\\n * @dev _srcEid The source endpoint ID.\\n * @dev _sender The sender address.\\n * @return nonce The next nonce.\\n *\\n * @dev The path nonce starts from 1. If 0 is returned it means that there is NO nonce ordered enforcement.\\n * @dev Is required by the off-chain executor to determine the OApp expects msg execution is ordered.\\n * @dev This is also enforced by the OApp.\\n * @dev By default this is NOT enabled. ie. nextNonce is hardcoded to return 0.\\n */\\n function nextNonce(uint32 /*_srcEid*/, bytes32 /*_sender*/) public view virtual returns (uint64 nonce) {\\n return 0;\\n }\\n\\n /**\\n * @dev Entry point for receiving messages or packets from the endpoint.\\n * @param _origin The origin information containing the source endpoint and sender address.\\n * - srcEid: The source chain endpoint ID.\\n * - sender: The sender address on the src chain.\\n * - nonce: The nonce of the message.\\n * @param _guid The unique identifier for the received LayerZero message.\\n * @param _message The payload of the received message.\\n * @param _executor The address of the executor for the received message.\\n * @param _extraData Additional arbitrary data provided by the corresponding executor.\\n *\\n * @dev Entry point for receiving msg/packet from the LayerZero endpoint.\\n */\\n function lzReceive(\\n Origin calldata _origin,\\n bytes32 _guid,\\n bytes calldata _message,\\n address _executor,\\n bytes calldata _extraData\\n ) public payable virtual {\\n // Ensures that only the endpoint can attempt to lzReceive() messages to this OApp.\\n if (address(endpoint) != msg.sender) revert OnlyEndpoint(msg.sender);\\n\\n // Ensure that the sender matches the expected peer for the source endpoint.\\n if (_getPeerOrRevert(_origin.srcEid) != _origin.sender) revert OnlyPeer(_origin.srcEid, _origin.sender);\\n\\n // Call the internal OApp implementation of lzReceive.\\n _lzReceive(_origin, _guid, _message, _executor, _extraData);\\n }\\n\\n /**\\n * @dev Internal function to implement lzReceive logic without needing to copy the basic parameter validation.\\n */\\n function _lzReceive(\\n Origin calldata _origin,\\n bytes32 _guid,\\n bytes calldata _message,\\n address _executor,\\n bytes calldata _extraData\\n ) internal virtual;\\n}\\n\",\"keccak256\":\"0x0174e9f1ec4cefe4b5adc26c392269c699b9ff75965364e5b7264426a462c70b\",\"license\":\"MIT\"},\"@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppCore.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\nimport { ILayerZeroEndpointV2 } from \\\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\\\";\\n\\n/**\\n * @title IOAppCore\\n */\\ninterface IOAppCore {\\n // Custom error messages\\n error OnlyPeer(uint32 eid, bytes32 sender);\\n error NoPeer(uint32 eid);\\n error InvalidEndpointCall();\\n error InvalidDelegate();\\n\\n // Event emitted when a peer (OApp) is set for a corresponding endpoint\\n event PeerSet(uint32 eid, bytes32 peer);\\n\\n /**\\n * @notice Retrieves the OApp version information.\\n * @return senderVersion The version of the OAppSender.sol contract.\\n * @return receiverVersion The version of the OAppReceiver.sol contract.\\n */\\n function oAppVersion() external view returns (uint64 senderVersion, uint64 receiverVersion);\\n\\n /**\\n * @notice Retrieves the LayerZero endpoint associated with the OApp.\\n * @return iEndpoint The LayerZero endpoint as an interface.\\n */\\n function endpoint() external view returns (ILayerZeroEndpointV2 iEndpoint);\\n\\n /**\\n * @notice Retrieves the peer (OApp) associated with a corresponding endpoint.\\n * @param _eid The endpoint ID.\\n * @return peer The peer address (OApp instance) associated with the corresponding endpoint.\\n */\\n function peers(uint32 _eid) external view returns (bytes32 peer);\\n\\n /**\\n * @notice Sets the peer address (OApp instance) for a corresponding endpoint.\\n * @param _eid The endpoint ID.\\n * @param _peer The address of the peer to be associated with the corresponding endpoint.\\n */\\n function setPeer(uint32 _eid, bytes32 _peer) external;\\n\\n /**\\n * @notice Sets the delegate address for the OApp Core.\\n * @param _delegate The address of the delegate to be set.\\n */\\n function setDelegate(address _delegate) external;\\n}\\n\",\"keccak256\":\"0x40e49f2de74506e1da5dcaed53a39853f691647f4ceb0fccc8f49a68d3f47c58\",\"license\":\"MIT\"},\"@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppReceiver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.20;\\n\\nimport { ILayerZeroReceiver, Origin } from \\\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol\\\";\\n\\ninterface IOAppReceiver is ILayerZeroReceiver {\\n /**\\n * @notice Indicates whether an address is an approved composeMsg sender to the Endpoint.\\n * @param _origin The origin information containing the source endpoint and sender address.\\n * - srcEid: The source chain endpoint ID.\\n * - sender: The sender address on the src chain.\\n * - nonce: The nonce of the message.\\n * @param _message The lzReceive payload.\\n * @param _sender The sender address.\\n * @return isSender Is a valid sender.\\n *\\n * @dev Applications can optionally choose to implement a separate composeMsg sender that is NOT the bridging layer.\\n * @dev The default sender IS the OAppReceiver implementer.\\n */\\n function isComposeMsgSender(\\n Origin calldata _origin,\\n bytes calldata _message,\\n address _sender\\n ) external view returns (bool isSender);\\n}\\n\",\"keccak256\":\"0xd26135185e19b3732746d4a9e2923e896f28dec8664bab161faea2ee26fcdc3d\",\"license\":\"MIT\"},\"@openzeppelin/contracts/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {Context} from \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * The initial owner is set to the address provided by the deployer. This can\\n * later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n /**\\n * @dev The caller account is not authorized to perform an operation.\\n */\\n error OwnableUnauthorizedAccount(address account);\\n\\n /**\\n * @dev The owner is not a valid owner account. (eg. `address(0)`)\\n */\\n error OwnableInvalidOwner(address owner);\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the address provided by the deployer as the initial owner.\\n */\\n constructor(address initialOwner) {\\n if (initialOwner == address(0)) {\\n revert OwnableInvalidOwner(address(0));\\n }\\n _transferOwnership(initialOwner);\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n _checkOwner();\\n _;\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if the sender is not the owner.\\n */\\n function _checkOwner() internal view virtual {\\n if (owner() != _msgSender()) {\\n revert OwnableUnauthorizedAccount(_msgSender());\\n }\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby disabling any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n if (newOwner == address(0)) {\\n revert OwnableInvalidOwner(address(0));\\n }\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n}\\n\",\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n\\n function _contextSuffixLength() internal view virtual returns (uint256) {\\n return 0;\\n }\\n}\\n\",\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\"}},\"version\":1}", - "storageLayout": { - "storage": [ - { - "astId": 3837, - "contract": "@layerzerolabs/oapp-evm/contracts/oapp/OAppReceiver.sol:OAppReceiver", - "label": "_owner", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 1390, - "contract": "@layerzerolabs/oapp-evm/contracts/oapp/OAppReceiver.sol:OAppReceiver", - "label": "peers", - "offset": 0, - "slot": "1", - "type": "t_mapping(t_uint32,t_bytes32)" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_bytes32": { - "encoding": "inplace", - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_mapping(t_uint32,t_bytes32)": { - "encoding": "mapping", - "key": "t_uint32", - "label": "mapping(uint32 => bytes32)", - "numberOfBytes": "32", - "value": "t_bytes32" - }, - "t_uint32": { - "encoding": "inplace", - "label": "uint32", - "numberOfBytes": "4" - } - } - }, - "userdoc": { - "kind": "user", - "methods": { - "allowInitializePath((uint32,bytes32,uint64))": { - "notice": "Checks if the path initialization is allowed based on the provided origin." - }, - "endpoint()": { - "notice": "Retrieves the LayerZero endpoint associated with the OApp." - }, - "isComposeMsgSender((uint32,bytes32,uint64),bytes,address)": { - "notice": "Indicates whether an address is an approved composeMsg sender to the Endpoint." - }, - "nextNonce(uint32,bytes32)": { - "notice": "Retrieves the next nonce for a given source endpoint and sender address." - }, - "oAppVersion()": { - "notice": "Retrieves the OApp version information." - }, - "peers(uint32)": { - "notice": "Retrieves the peer (OApp) associated with a corresponding endpoint." - }, - "setDelegate(address)": { - "notice": "Sets the delegate address for the OApp." - }, - "setPeer(uint32,bytes32)": { - "notice": "Sets the peer address (OApp instance) for a corresponding endpoint." - } - }, - "version": 1 - } - } - }, - "@layerzerolabs/oapp-evm/contracts/oapp/OAppSender.sol": { - "OAppSender": { - "abi": [ - { "inputs": [], "name": "InvalidDelegate", "type": "error" }, - { "inputs": [], "name": "InvalidEndpointCall", "type": "error" }, - { "inputs": [], "name": "LzTokenUnavailable", "type": "error" }, - { - "inputs": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" } - ], - "name": "NoPeer", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "msgValue", - "type": "uint256" - } - ], - "name": "NotEnoughNative", - "type": "error" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - } - ], - "name": "OnlyPeer", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "OwnableInvalidOwner", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "OwnableUnauthorizedAccount", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "eid", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "peer", - "type": "bytes32" - } - ], - "name": "PeerSet", - "type": "event" - }, - { - "inputs": [], - "name": "endpoint", - "outputs": [ - { - "internalType": "contract ILayerZeroEndpointV2", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "oAppVersion", - "outputs": [ - { - "internalType": "uint64", - "name": "senderVersion", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "receiverVersion", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" } - ], - "name": "peers", - "outputs": [ - { "internalType": "bytes32", "name": "peer", "type": "bytes32" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_delegate", - "type": "address" - } - ], - "name": "setDelegate", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { - "internalType": "bytes32", - "name": "_peer", - "type": "bytes32" - } - ], - "name": "setPeer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "devdoc": { - "details": "Abstract contract implementing the OAppSender functionality for sending messages to a LayerZero endpoint.", - "errors": { - "OwnableInvalidOwner(address)": [ - { - "details": "The owner is not a valid owner account. (eg. `address(0)`)" - } - ], - "OwnableUnauthorizedAccount(address)": [ - { - "details": "The caller account is not authorized to perform an operation." - } - ] - }, - "kind": "dev", - "methods": { - "oAppVersion()": { - "details": "Providing 0 as the default for OAppReceiver version. Indicates that the OAppReceiver is not implemented. ie. this is a SEND only OApp.If the OApp uses both OAppSender and OAppReceiver, then this needs to be override returning the correct versions", - "returns": { - "receiverVersion": "The version of the OAppReceiver.sol contract.", - "senderVersion": "The version of the OAppSender.sol contract." - } - }, - "owner()": { - "details": "Returns the address of the current owner." - }, - "renounceOwnership()": { - "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner." - }, - "setDelegate(address)": { - "details": "Only the owner/admin of the OApp can call this function.Provides the ability for a delegate to set configs, on behalf of the OApp, directly on the Endpoint contract.", - "params": { - "_delegate": "The address of the delegate to be set." - } - }, - "setPeer(uint32,bytes32)": { - "details": "Only the owner/admin of the OApp can call this function.Indicates that the peer is trusted to send LayerZero messages to this OApp.Set this to bytes32(0) to remove the peer address.Peer is a bytes32 to accommodate non-evm chains.", - "params": { - "_eid": "The endpoint ID.", - "_peer": "The address of the peer to be associated with the corresponding endpoint." - } - }, - "transferOwnership(address)": { - "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." - } - }, - "title": "OAppSender", - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": { - "endpoint()": "5e280f11", - "oAppVersion()": "17442b70", - "owner()": "8da5cb5b", - "peers(uint32)": "bb0b6a53", - "renounceOwnership()": "715018a6", - "setDelegate(address)": "ca5eb5e1", - "setPeer(uint32,bytes32)": "3400288b", - "transferOwnership(address)": "f2fde38b" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"InvalidDelegate\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidEndpointCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LzTokenUnavailable\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"}],\"name\":\"NoPeer\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"msgValue\",\"type\":\"uint256\"}],\"name\":\"NotEnoughNative\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"}],\"name\":\"OnlyPeer\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"peer\",\"type\":\"bytes32\"}],\"name\":\"PeerSet\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"endpoint\",\"outputs\":[{\"internalType\":\"contract ILayerZeroEndpointV2\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"oAppVersion\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"senderVersion\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"receiverVersion\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"}],\"name\":\"peers\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"peer\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_delegate\",\"type\":\"address\"}],\"name\":\"setDelegate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_peer\",\"type\":\"bytes32\"}],\"name\":\"setPeer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Abstract contract implementing the OAppSender functionality for sending messages to a LayerZero endpoint.\",\"errors\":{\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}]},\"kind\":\"dev\",\"methods\":{\"oAppVersion()\":{\"details\":\"Providing 0 as the default for OAppReceiver version. Indicates that the OAppReceiver is not implemented. ie. this is a SEND only OApp.If the OApp uses both OAppSender and OAppReceiver, then this needs to be override returning the correct versions\",\"returns\":{\"receiverVersion\":\"The version of the OAppReceiver.sol contract.\",\"senderVersion\":\"The version of the OAppSender.sol contract.\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"setDelegate(address)\":{\"details\":\"Only the owner/admin of the OApp can call this function.Provides the ability for a delegate to set configs, on behalf of the OApp, directly on the Endpoint contract.\",\"params\":{\"_delegate\":\"The address of the delegate to be set.\"}},\"setPeer(uint32,bytes32)\":{\"details\":\"Only the owner/admin of the OApp can call this function.Indicates that the peer is trusted to send LayerZero messages to this OApp.Set this to bytes32(0) to remove the peer address.Peer is a bytes32 to accommodate non-evm chains.\",\"params\":{\"_eid\":\"The endpoint ID.\",\"_peer\":\"The address of the peer to be associated with the corresponding endpoint.\"}},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"title\":\"OAppSender\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"endpoint()\":{\"notice\":\"Retrieves the LayerZero endpoint associated with the OApp.\"},\"oAppVersion()\":{\"notice\":\"Retrieves the OApp version information.\"},\"peers(uint32)\":{\"notice\":\"Retrieves the peer (OApp) associated with a corresponding endpoint.\"},\"setDelegate(address)\":{\"notice\":\"Sets the delegate address for the OApp.\"},\"setPeer(uint32,bytes32)\":{\"notice\":\"Sets the peer address (OApp instance) for a corresponding endpoint.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@layerzerolabs/oapp-evm/contracts/oapp/OAppSender.sol\":\"OAppSender\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\nimport { IMessageLibManager } from \\\"./IMessageLibManager.sol\\\";\\nimport { IMessagingComposer } from \\\"./IMessagingComposer.sol\\\";\\nimport { IMessagingChannel } from \\\"./IMessagingChannel.sol\\\";\\nimport { IMessagingContext } from \\\"./IMessagingContext.sol\\\";\\n\\nstruct MessagingParams {\\n uint32 dstEid;\\n bytes32 receiver;\\n bytes message;\\n bytes options;\\n bool payInLzToken;\\n}\\n\\nstruct MessagingReceipt {\\n bytes32 guid;\\n uint64 nonce;\\n MessagingFee fee;\\n}\\n\\nstruct MessagingFee {\\n uint256 nativeFee;\\n uint256 lzTokenFee;\\n}\\n\\nstruct Origin {\\n uint32 srcEid;\\n bytes32 sender;\\n uint64 nonce;\\n}\\n\\ninterface ILayerZeroEndpointV2 is IMessageLibManager, IMessagingComposer, IMessagingChannel, IMessagingContext {\\n event PacketSent(bytes encodedPayload, bytes options, address sendLibrary);\\n\\n event PacketVerified(Origin origin, address receiver, bytes32 payloadHash);\\n\\n event PacketDelivered(Origin origin, address receiver);\\n\\n event LzReceiveAlert(\\n address indexed receiver,\\n address indexed executor,\\n Origin origin,\\n bytes32 guid,\\n uint256 gas,\\n uint256 value,\\n bytes message,\\n bytes extraData,\\n bytes reason\\n );\\n\\n event LzTokenSet(address token);\\n\\n event DelegateSet(address sender, address delegate);\\n\\n function quote(MessagingParams calldata _params, address _sender) external view returns (MessagingFee memory);\\n\\n function send(\\n MessagingParams calldata _params,\\n address _refundAddress\\n ) external payable returns (MessagingReceipt memory);\\n\\n function verify(Origin calldata _origin, address _receiver, bytes32 _payloadHash) external;\\n\\n function verifiable(Origin calldata _origin, address _receiver) external view returns (bool);\\n\\n function initializable(Origin calldata _origin, address _receiver) external view returns (bool);\\n\\n function lzReceive(\\n Origin calldata _origin,\\n address _receiver,\\n bytes32 _guid,\\n bytes calldata _message,\\n bytes calldata _extraData\\n ) external payable;\\n\\n // oapp can burn messages partially by calling this function with its own business logic if messages are verified in order\\n function clear(address _oapp, Origin calldata _origin, bytes32 _guid, bytes calldata _message) external;\\n\\n function setLzToken(address _lzToken) external;\\n\\n function lzToken() external view returns (address);\\n\\n function nativeToken() external view returns (address);\\n\\n function setDelegate(address _delegate) external;\\n}\\n\",\"keccak256\":\"0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\nstruct SetConfigParam {\\n uint32 eid;\\n uint32 configType;\\n bytes config;\\n}\\n\\ninterface IMessageLibManager {\\n struct Timeout {\\n address lib;\\n uint256 expiry;\\n }\\n\\n event LibraryRegistered(address newLib);\\n event DefaultSendLibrarySet(uint32 eid, address newLib);\\n event DefaultReceiveLibrarySet(uint32 eid, address newLib);\\n event DefaultReceiveLibraryTimeoutSet(uint32 eid, address oldLib, uint256 expiry);\\n event SendLibrarySet(address sender, uint32 eid, address newLib);\\n event ReceiveLibrarySet(address receiver, uint32 eid, address newLib);\\n event ReceiveLibraryTimeoutSet(address receiver, uint32 eid, address oldLib, uint256 timeout);\\n\\n function registerLibrary(address _lib) external;\\n\\n function isRegisteredLibrary(address _lib) external view returns (bool);\\n\\n function getRegisteredLibraries() external view returns (address[] memory);\\n\\n function setDefaultSendLibrary(uint32 _eid, address _newLib) external;\\n\\n function defaultSendLibrary(uint32 _eid) external view returns (address);\\n\\n function setDefaultReceiveLibrary(uint32 _eid, address _newLib, uint256 _gracePeriod) external;\\n\\n function defaultReceiveLibrary(uint32 _eid) external view returns (address);\\n\\n function setDefaultReceiveLibraryTimeout(uint32 _eid, address _lib, uint256 _expiry) external;\\n\\n function defaultReceiveLibraryTimeout(uint32 _eid) external view returns (address lib, uint256 expiry);\\n\\n function isSupportedEid(uint32 _eid) external view returns (bool);\\n\\n function isValidReceiveLibrary(address _receiver, uint32 _eid, address _lib) external view returns (bool);\\n\\n /// ------------------- OApp interfaces -------------------\\n function setSendLibrary(address _oapp, uint32 _eid, address _newLib) external;\\n\\n function getSendLibrary(address _sender, uint32 _eid) external view returns (address lib);\\n\\n function isDefaultSendLibrary(address _sender, uint32 _eid) external view returns (bool);\\n\\n function setReceiveLibrary(address _oapp, uint32 _eid, address _newLib, uint256 _gracePeriod) external;\\n\\n function getReceiveLibrary(address _receiver, uint32 _eid) external view returns (address lib, bool isDefault);\\n\\n function setReceiveLibraryTimeout(address _oapp, uint32 _eid, address _lib, uint256 _expiry) external;\\n\\n function receiveLibraryTimeout(address _receiver, uint32 _eid) external view returns (address lib, uint256 expiry);\\n\\n function setConfig(address _oapp, address _lib, SetConfigParam[] calldata _params) external;\\n\\n function getConfig(\\n address _oapp,\\n address _lib,\\n uint32 _eid,\\n uint32 _configType\\n ) external view returns (bytes memory config);\\n}\\n\",\"keccak256\":\"0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\ninterface IMessagingChannel {\\n event InboundNonceSkipped(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce);\\n event PacketNilified(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce, bytes32 payloadHash);\\n event PacketBurnt(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce, bytes32 payloadHash);\\n\\n function eid() external view returns (uint32);\\n\\n // this is an emergency function if a message cannot be verified for some reasons\\n // required to provide _nextNonce to avoid race condition\\n function skip(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce) external;\\n\\n function nilify(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce, bytes32 _payloadHash) external;\\n\\n function burn(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce, bytes32 _payloadHash) external;\\n\\n function nextGuid(address _sender, uint32 _dstEid, bytes32 _receiver) external view returns (bytes32);\\n\\n function inboundNonce(address _receiver, uint32 _srcEid, bytes32 _sender) external view returns (uint64);\\n\\n function outboundNonce(address _sender, uint32 _dstEid, bytes32 _receiver) external view returns (uint64);\\n\\n function inboundPayloadHash(\\n address _receiver,\\n uint32 _srcEid,\\n bytes32 _sender,\\n uint64 _nonce\\n ) external view returns (bytes32);\\n\\n function lazyInboundNonce(address _receiver, uint32 _srcEid, bytes32 _sender) external view returns (uint64);\\n}\\n\",\"keccak256\":\"0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\ninterface IMessagingComposer {\\n event ComposeSent(address from, address to, bytes32 guid, uint16 index, bytes message);\\n event ComposeDelivered(address from, address to, bytes32 guid, uint16 index);\\n event LzComposeAlert(\\n address indexed from,\\n address indexed to,\\n address indexed executor,\\n bytes32 guid,\\n uint16 index,\\n uint256 gas,\\n uint256 value,\\n bytes message,\\n bytes extraData,\\n bytes reason\\n );\\n\\n function composeQueue(\\n address _from,\\n address _to,\\n bytes32 _guid,\\n uint16 _index\\n ) external view returns (bytes32 messageHash);\\n\\n function sendCompose(address _to, bytes32 _guid, uint16 _index, bytes calldata _message) external;\\n\\n function lzCompose(\\n address _from,\\n address _to,\\n bytes32 _guid,\\n uint16 _index,\\n bytes calldata _message,\\n bytes calldata _extraData\\n ) external payable;\\n}\\n\",\"keccak256\":\"0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\ninterface IMessagingContext {\\n function isSendingMessage() external view returns (bool);\\n\\n function getSendContext() external view returns (uint32 dstEid, address sender);\\n}\\n\",\"keccak256\":\"0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e\",\"license\":\"MIT\"},\"@layerzerolabs/oapp-evm/contracts/oapp/OAppCore.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\nimport { IOAppCore, ILayerZeroEndpointV2 } from \\\"./interfaces/IOAppCore.sol\\\";\\n\\n/**\\n * @title OAppCore\\n * @dev Abstract contract implementing the IOAppCore interface with basic OApp configurations.\\n */\\nabstract contract OAppCore is IOAppCore, Ownable {\\n // The LayerZero endpoint associated with the given OApp\\n ILayerZeroEndpointV2 public immutable endpoint;\\n\\n // Mapping to store peers associated with corresponding endpoints\\n mapping(uint32 eid => bytes32 peer) public peers;\\n\\n /**\\n * @dev Constructor to initialize the OAppCore with the provided endpoint and delegate.\\n * @param _endpoint The address of the LOCAL Layer Zero endpoint.\\n * @param _delegate The delegate capable of making OApp configurations inside of the endpoint.\\n *\\n * @dev The delegate typically should be set as the owner of the contract.\\n */\\n constructor(address _endpoint, address _delegate) {\\n endpoint = ILayerZeroEndpointV2(_endpoint);\\n\\n if (_delegate == address(0)) revert InvalidDelegate();\\n endpoint.setDelegate(_delegate);\\n }\\n\\n /**\\n * @notice Sets the peer address (OApp instance) for a corresponding endpoint.\\n * @param _eid The endpoint ID.\\n * @param _peer The address of the peer to be associated with the corresponding endpoint.\\n *\\n * @dev Only the owner/admin of the OApp can call this function.\\n * @dev Indicates that the peer is trusted to send LayerZero messages to this OApp.\\n * @dev Set this to bytes32(0) to remove the peer address.\\n * @dev Peer is a bytes32 to accommodate non-evm chains.\\n */\\n function setPeer(uint32 _eid, bytes32 _peer) public virtual onlyOwner {\\n _setPeer(_eid, _peer);\\n }\\n\\n /**\\n * @notice Sets the peer address (OApp instance) for a corresponding endpoint.\\n * @param _eid The endpoint ID.\\n * @param _peer The address of the peer to be associated with the corresponding endpoint.\\n *\\n * @dev Indicates that the peer is trusted to send LayerZero messages to this OApp.\\n * @dev Set this to bytes32(0) to remove the peer address.\\n * @dev Peer is a bytes32 to accommodate non-evm chains.\\n */\\n function _setPeer(uint32 _eid, bytes32 _peer) internal virtual {\\n peers[_eid] = _peer;\\n emit PeerSet(_eid, _peer);\\n }\\n\\n /**\\n * @notice Internal function to get the peer address associated with a specific endpoint; reverts if NOT set.\\n * ie. the peer is set to bytes32(0).\\n * @param _eid The endpoint ID.\\n * @return peer The address of the peer associated with the specified endpoint.\\n */\\n function _getPeerOrRevert(uint32 _eid) internal view virtual returns (bytes32) {\\n bytes32 peer = peers[_eid];\\n if (peer == bytes32(0)) revert NoPeer(_eid);\\n return peer;\\n }\\n\\n /**\\n * @notice Sets the delegate address for the OApp.\\n * @param _delegate The address of the delegate to be set.\\n *\\n * @dev Only the owner/admin of the OApp can call this function.\\n * @dev Provides the ability for a delegate to set configs, on behalf of the OApp, directly on the Endpoint contract.\\n */\\n function setDelegate(address _delegate) public onlyOwner {\\n endpoint.setDelegate(_delegate);\\n }\\n}\\n\",\"keccak256\":\"0x13a9c2d1d2c1f086b8624f2e84c4a4702212daae36f701d92bb915b535cbe4cc\",\"license\":\"MIT\"},\"@layerzerolabs/oapp-evm/contracts/oapp/OAppSender.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\nimport { SafeERC20, IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\nimport { MessagingParams, MessagingFee, MessagingReceipt } from \\\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\\\";\\nimport { OAppCore } from \\\"./OAppCore.sol\\\";\\n\\n/**\\n * @title OAppSender\\n * @dev Abstract contract implementing the OAppSender functionality for sending messages to a LayerZero endpoint.\\n */\\nabstract contract OAppSender is OAppCore {\\n using SafeERC20 for IERC20;\\n\\n // Custom error messages\\n error NotEnoughNative(uint256 msgValue);\\n error LzTokenUnavailable();\\n\\n // @dev The version of the OAppSender implementation.\\n // @dev Version is bumped when changes are made to this contract.\\n uint64 internal constant SENDER_VERSION = 1;\\n\\n /**\\n * @notice Retrieves the OApp version information.\\n * @return senderVersion The version of the OAppSender.sol contract.\\n * @return receiverVersion The version of the OAppReceiver.sol contract.\\n *\\n * @dev Providing 0 as the default for OAppReceiver version. Indicates that the OAppReceiver is not implemented.\\n * ie. this is a SEND only OApp.\\n * @dev If the OApp uses both OAppSender and OAppReceiver, then this needs to be override returning the correct versions\\n */\\n function oAppVersion() public view virtual returns (uint64 senderVersion, uint64 receiverVersion) {\\n return (SENDER_VERSION, 0);\\n }\\n\\n /**\\n * @dev Internal function to interact with the LayerZero EndpointV2.quote() for fee calculation.\\n * @param _dstEid The destination endpoint ID.\\n * @param _message The message payload.\\n * @param _options Additional options for the message.\\n * @param _payInLzToken Flag indicating whether to pay the fee in LZ tokens.\\n * @return fee The calculated MessagingFee for the message.\\n * - nativeFee: The native fee for the message.\\n * - lzTokenFee: The LZ token fee for the message.\\n */\\n function _quote(\\n uint32 _dstEid,\\n bytes memory _message,\\n bytes memory _options,\\n bool _payInLzToken\\n ) internal view virtual returns (MessagingFee memory fee) {\\n return\\n endpoint.quote(\\n MessagingParams(_dstEid, _getPeerOrRevert(_dstEid), _message, _options, _payInLzToken),\\n address(this)\\n );\\n }\\n\\n /**\\n * @dev Internal function to interact with the LayerZero EndpointV2.send() for sending a message.\\n * @param _dstEid The destination endpoint ID.\\n * @param _message The message payload.\\n * @param _options Additional options for the message.\\n * @param _fee The calculated LayerZero fee for the message.\\n * - nativeFee: The native fee.\\n * - lzTokenFee: The lzToken fee.\\n * @param _refundAddress The address to receive any excess fee values sent to the endpoint.\\n * @return receipt The receipt for the sent message.\\n * - guid: The unique identifier for the sent message.\\n * - nonce: The nonce of the sent message.\\n * - fee: The LayerZero fee incurred for the message.\\n */\\n function _lzSend(\\n uint32 _dstEid,\\n bytes memory _message,\\n bytes memory _options,\\n MessagingFee memory _fee,\\n address _refundAddress\\n ) internal virtual returns (MessagingReceipt memory receipt) {\\n // @dev Push corresponding fees to the endpoint, any excess is sent back to the _refundAddress from the endpoint.\\n uint256 messageValue = _payNative(_fee.nativeFee);\\n if (_fee.lzTokenFee > 0) _payLzToken(_fee.lzTokenFee);\\n\\n return\\n // solhint-disable-next-line check-send-result\\n endpoint.send{ value: messageValue }(\\n MessagingParams(_dstEid, _getPeerOrRevert(_dstEid), _message, _options, _fee.lzTokenFee > 0),\\n _refundAddress\\n );\\n }\\n\\n /**\\n * @dev Internal function to pay the native fee associated with the message.\\n * @param _nativeFee The native fee to be paid.\\n * @return nativeFee The amount of native currency paid.\\n *\\n * @dev If the OApp needs to initiate MULTIPLE LayerZero messages in a single transaction,\\n * this will need to be overridden because msg.value would contain multiple lzFees.\\n * @dev Should be overridden in the event the LayerZero endpoint requires a different native currency.\\n * @dev Some EVMs use an ERC20 as a method for paying transactions/gasFees.\\n * @dev The endpoint is EITHER/OR, ie. it will NOT support both types of native payment at a time.\\n */\\n function _payNative(uint256 _nativeFee) internal virtual returns (uint256 nativeFee) {\\n if (msg.value != _nativeFee) revert NotEnoughNative(msg.value);\\n return _nativeFee;\\n }\\n\\n /**\\n * @dev Internal function to pay the LZ token fee associated with the message.\\n * @param _lzTokenFee The LZ token fee to be paid.\\n *\\n * @dev If the caller is trying to pay in the specified lzToken, then the lzTokenFee is passed to the endpoint.\\n * @dev Any excess sent, is passed back to the specified _refundAddress in the _lzSend().\\n */\\n function _payLzToken(uint256 _lzTokenFee) internal virtual {\\n // @dev Cannot cache the token because it is not immutable in the endpoint.\\n address lzToken = endpoint.lzToken();\\n if (lzToken == address(0)) revert LzTokenUnavailable();\\n\\n // Pay LZ token fee by sending tokens to the endpoint.\\n IERC20(lzToken).safeTransferFrom(msg.sender, address(endpoint), _lzTokenFee);\\n }\\n}\\n\",\"keccak256\":\"0x518cf4adca601923ed4baa6619846a253ea32b8d8775f8bc1faa3dfac7f67c20\",\"license\":\"MIT\"},\"@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppCore.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\nimport { ILayerZeroEndpointV2 } from \\\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\\\";\\n\\n/**\\n * @title IOAppCore\\n */\\ninterface IOAppCore {\\n // Custom error messages\\n error OnlyPeer(uint32 eid, bytes32 sender);\\n error NoPeer(uint32 eid);\\n error InvalidEndpointCall();\\n error InvalidDelegate();\\n\\n // Event emitted when a peer (OApp) is set for a corresponding endpoint\\n event PeerSet(uint32 eid, bytes32 peer);\\n\\n /**\\n * @notice Retrieves the OApp version information.\\n * @return senderVersion The version of the OAppSender.sol contract.\\n * @return receiverVersion The version of the OAppReceiver.sol contract.\\n */\\n function oAppVersion() external view returns (uint64 senderVersion, uint64 receiverVersion);\\n\\n /**\\n * @notice Retrieves the LayerZero endpoint associated with the OApp.\\n * @return iEndpoint The LayerZero endpoint as an interface.\\n */\\n function endpoint() external view returns (ILayerZeroEndpointV2 iEndpoint);\\n\\n /**\\n * @notice Retrieves the peer (OApp) associated with a corresponding endpoint.\\n * @param _eid The endpoint ID.\\n * @return peer The peer address (OApp instance) associated with the corresponding endpoint.\\n */\\n function peers(uint32 _eid) external view returns (bytes32 peer);\\n\\n /**\\n * @notice Sets the peer address (OApp instance) for a corresponding endpoint.\\n * @param _eid The endpoint ID.\\n * @param _peer The address of the peer to be associated with the corresponding endpoint.\\n */\\n function setPeer(uint32 _eid, bytes32 _peer) external;\\n\\n /**\\n * @notice Sets the delegate address for the OApp Core.\\n * @param _delegate The address of the delegate to be set.\\n */\\n function setDelegate(address _delegate) external;\\n}\\n\",\"keccak256\":\"0x40e49f2de74506e1da5dcaed53a39853f691647f4ceb0fccc8f49a68d3f47c58\",\"license\":\"MIT\"},\"@openzeppelin/contracts/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {Context} from \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * The initial owner is set to the address provided by the deployer. This can\\n * later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n /**\\n * @dev The caller account is not authorized to perform an operation.\\n */\\n error OwnableUnauthorizedAccount(address account);\\n\\n /**\\n * @dev The owner is not a valid owner account. (eg. `address(0)`)\\n */\\n error OwnableInvalidOwner(address owner);\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the address provided by the deployer as the initial owner.\\n */\\n constructor(address initialOwner) {\\n if (initialOwner == address(0)) {\\n revert OwnableInvalidOwner(address(0));\\n }\\n _transferOwnership(initialOwner);\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n _checkOwner();\\n _;\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if the sender is not the owner.\\n */\\n function _checkOwner() internal view virtual {\\n if (owner() != _msgSender()) {\\n revert OwnableUnauthorizedAccount(_msgSender());\\n }\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby disabling any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n if (newOwner == address(0)) {\\n revert OwnableInvalidOwner(address(0));\\n }\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n}\\n\",\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\"},\"@openzeppelin/contracts/interfaces/IERC1363.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (interfaces/IERC1363.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {IERC20} from \\\"./IERC20.sol\\\";\\nimport {IERC165} from \\\"./IERC165.sol\\\";\\n\\n/**\\n * @title IERC1363\\n * @dev Interface of the ERC-1363 standard as defined in the https://eips.ethereum.org/EIPS/eip-1363[ERC-1363].\\n *\\n * Defines an extension interface for ERC-20 tokens that supports executing code on a recipient contract\\n * after `transfer` or `transferFrom`, or code on a spender contract after `approve`, in a single transaction.\\n */\\ninterface IERC1363 is IERC20, IERC165 {\\n /*\\n * Note: the ERC-165 identifier for this interface is 0xb0202a11.\\n * 0xb0202a11 ===\\n * bytes4(keccak256('transferAndCall(address,uint256)')) ^\\n * bytes4(keccak256('transferAndCall(address,uint256,bytes)')) ^\\n * bytes4(keccak256('transferFromAndCall(address,address,uint256)')) ^\\n * bytes4(keccak256('transferFromAndCall(address,address,uint256,bytes)')) ^\\n * bytes4(keccak256('approveAndCall(address,uint256)')) ^\\n * bytes4(keccak256('approveAndCall(address,uint256,bytes)'))\\n */\\n\\n /**\\n * @dev Moves a `value` amount of tokens from the caller's account to `to`\\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\\n * @param to The address which you want to transfer to.\\n * @param value The amount of tokens to be transferred.\\n * @return A boolean value indicating whether the operation succeeded unless throwing.\\n */\\n function transferAndCall(address to, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from the caller's account to `to`\\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\\n * @param to The address which you want to transfer to.\\n * @param value The amount of tokens to be transferred.\\n * @param data Additional data with no specified format, sent in call to `to`.\\n * @return A boolean value indicating whether the operation succeeded unless throwing.\\n */\\n function transferAndCall(address to, uint256 value, bytes calldata data) external returns (bool);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism\\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\\n * @param from The address which you want to send tokens from.\\n * @param to The address which you want to transfer to.\\n * @param value The amount of tokens to be transferred.\\n * @return A boolean value indicating whether the operation succeeded unless throwing.\\n */\\n function transferFromAndCall(address from, address to, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism\\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\\n * @param from The address which you want to send tokens from.\\n * @param to The address which you want to transfer to.\\n * @param value The amount of tokens to be transferred.\\n * @param data Additional data with no specified format, sent in call to `to`.\\n * @return A boolean value indicating whether the operation succeeded unless throwing.\\n */\\n function transferFromAndCall(address from, address to, uint256 value, bytes calldata data) external returns (bool);\\n\\n /**\\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\\n * caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`.\\n * @param spender The address which will spend the funds.\\n * @param value The amount of tokens to be spent.\\n * @return A boolean value indicating whether the operation succeeded unless throwing.\\n */\\n function approveAndCall(address spender, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\\n * caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`.\\n * @param spender The address which will spend the funds.\\n * @param value The amount of tokens to be spent.\\n * @param data Additional data with no specified format, sent in call to `spender`.\\n * @return A boolean value indicating whether the operation succeeded unless throwing.\\n */\\n function approveAndCall(address spender, uint256 value, bytes calldata data) external returns (bool);\\n}\\n\",\"keccak256\":\"0x9b6b3e7803bc5f2f8cd7ad57db8ac1def61a9930a5a3107df4882e028a9605d7\",\"license\":\"MIT\"},\"@openzeppelin/contracts/interfaces/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC165.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {IERC165} from \\\"../utils/introspection/IERC165.sol\\\";\\n\",\"keccak256\":\"0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724\",\"license\":\"MIT\"},\"@openzeppelin/contracts/interfaces/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC20.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {IERC20} from \\\"../token/ERC20/IERC20.sol\\\";\\n\",\"keccak256\":\"0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Interface of the ERC-20 standard as defined in the ERC.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the value of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the value of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\\n * caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from `from` to `to` using the\\n * allowance mechanism. `value` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 value) external returns (bool);\\n}\\n\",\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/utils/SafeERC20.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {IERC20} from \\\"../IERC20.sol\\\";\\nimport {IERC1363} from \\\"../../../interfaces/IERC1363.sol\\\";\\nimport {Address} from \\\"../../../utils/Address.sol\\\";\\n\\n/**\\n * @title SafeERC20\\n * @dev Wrappers around ERC-20 operations that throw on failure (when the token\\n * contract returns false). Tokens that return no value (and instead revert or\\n * throw on failure) are also supported, non-reverting calls are assumed to be\\n * successful.\\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\n */\\nlibrary SafeERC20 {\\n /**\\n * @dev An operation with an ERC-20 token failed.\\n */\\n error SafeERC20FailedOperation(address token);\\n\\n /**\\n * @dev Indicates a failed `decreaseAllowance` request.\\n */\\n error SafeERC20FailedDecreaseAllowance(address spender, uint256 currentAllowance, uint256 requestedDecrease);\\n\\n /**\\n * @dev Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value,\\n * non-reverting calls are assumed to be successful.\\n */\\n function safeTransfer(IERC20 token, address to, uint256 value) internal {\\n _callOptionalReturn(token, abi.encodeCall(token.transfer, (to, value)));\\n }\\n\\n /**\\n * @dev Transfer `value` amount of `token` from `from` to `to`, spending the approval given by `from` to the\\n * calling contract. If `token` returns no value, non-reverting calls are assumed to be successful.\\n */\\n function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\\n _callOptionalReturn(token, abi.encodeCall(token.transferFrom, (from, to, value)));\\n }\\n\\n /**\\n * @dev Increase the calling contract's allowance toward `spender` by `value`. If `token` returns no value,\\n * non-reverting calls are assumed to be successful.\\n *\\n * IMPORTANT: If the token implements ERC-7674 (ERC-20 with temporary allowance), and if the \\\"client\\\"\\n * smart contract uses ERC-7674 to set temporary allowances, then the \\\"client\\\" smart contract should avoid using\\n * this function. Performing a {safeIncreaseAllowance} or {safeDecreaseAllowance} operation on a token contract\\n * that has a non-zero temporary allowance (for that particular owner-spender) will result in unexpected behavior.\\n */\\n function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {\\n uint256 oldAllowance = token.allowance(address(this), spender);\\n forceApprove(token, spender, oldAllowance + value);\\n }\\n\\n /**\\n * @dev Decrease the calling contract's allowance toward `spender` by `requestedDecrease`. If `token` returns no\\n * value, non-reverting calls are assumed to be successful.\\n *\\n * IMPORTANT: If the token implements ERC-7674 (ERC-20 with temporary allowance), and if the \\\"client\\\"\\n * smart contract uses ERC-7674 to set temporary allowances, then the \\\"client\\\" smart contract should avoid using\\n * this function. Performing a {safeIncreaseAllowance} or {safeDecreaseAllowance} operation on a token contract\\n * that has a non-zero temporary allowance (for that particular owner-spender) will result in unexpected behavior.\\n */\\n function safeDecreaseAllowance(IERC20 token, address spender, uint256 requestedDecrease) internal {\\n unchecked {\\n uint256 currentAllowance = token.allowance(address(this), spender);\\n if (currentAllowance < requestedDecrease) {\\n revert SafeERC20FailedDecreaseAllowance(spender, currentAllowance, requestedDecrease);\\n }\\n forceApprove(token, spender, currentAllowance - requestedDecrease);\\n }\\n }\\n\\n /**\\n * @dev Set the calling contract's allowance toward `spender` to `value`. If `token` returns no value,\\n * non-reverting calls are assumed to be successful. Meant to be used with tokens that require the approval\\n * to be set to zero before setting it to a non-zero value, such as USDT.\\n *\\n * NOTE: If the token implements ERC-7674, this function will not modify any temporary allowance. This function\\n * only sets the \\\"standard\\\" allowance. Any temporary allowance will remain active, in addition to the value being\\n * set here.\\n */\\n function forceApprove(IERC20 token, address spender, uint256 value) internal {\\n bytes memory approvalCall = abi.encodeCall(token.approve, (spender, value));\\n\\n if (!_callOptionalReturnBool(token, approvalCall)) {\\n _callOptionalReturn(token, abi.encodeCall(token.approve, (spender, 0)));\\n _callOptionalReturn(token, approvalCall);\\n }\\n }\\n\\n /**\\n * @dev Performs an {ERC1363} transferAndCall, with a fallback to the simple {ERC20} transfer if the target has no\\n * code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\\n * targeting contracts.\\n *\\n * Reverts if the returned value is other than `true`.\\n */\\n function transferAndCallRelaxed(IERC1363 token, address to, uint256 value, bytes memory data) internal {\\n if (to.code.length == 0) {\\n safeTransfer(token, to, value);\\n } else if (!token.transferAndCall(to, value, data)) {\\n revert SafeERC20FailedOperation(address(token));\\n }\\n }\\n\\n /**\\n * @dev Performs an {ERC1363} transferFromAndCall, with a fallback to the simple {ERC20} transferFrom if the target\\n * has no code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\\n * targeting contracts.\\n *\\n * Reverts if the returned value is other than `true`.\\n */\\n function transferFromAndCallRelaxed(\\n IERC1363 token,\\n address from,\\n address to,\\n uint256 value,\\n bytes memory data\\n ) internal {\\n if (to.code.length == 0) {\\n safeTransferFrom(token, from, to, value);\\n } else if (!token.transferFromAndCall(from, to, value, data)) {\\n revert SafeERC20FailedOperation(address(token));\\n }\\n }\\n\\n /**\\n * @dev Performs an {ERC1363} approveAndCall, with a fallback to the simple {ERC20} approve if the target has no\\n * code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\\n * targeting contracts.\\n *\\n * NOTE: When the recipient address (`to`) has no code (i.e. is an EOA), this function behaves as {forceApprove}.\\n * Opposedly, when the recipient address (`to`) has code, this function only attempts to call {ERC1363-approveAndCall}\\n * once without retrying, and relies on the returned value to be true.\\n *\\n * Reverts if the returned value is other than `true`.\\n */\\n function approveAndCallRelaxed(IERC1363 token, address to, uint256 value, bytes memory data) internal {\\n if (to.code.length == 0) {\\n forceApprove(token, to, value);\\n } else if (!token.approveAndCall(to, value, data)) {\\n revert SafeERC20FailedOperation(address(token));\\n }\\n }\\n\\n /**\\n * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n * on the return value: the return value is optional (but if data is returned, it must not be false).\\n * @param token The token targeted by the call.\\n * @param data The call data (encoded using abi.encode or one of its variants).\\n *\\n * This is a variant of {_callOptionalReturnBool} that reverts if call fails to meet the requirements.\\n */\\n function _callOptionalReturn(IERC20 token, bytes memory data) private {\\n uint256 returnSize;\\n uint256 returnValue;\\n assembly (\\\"memory-safe\\\") {\\n let success := call(gas(), token, 0, add(data, 0x20), mload(data), 0, 0x20)\\n // bubble errors\\n if iszero(success) {\\n let ptr := mload(0x40)\\n returndatacopy(ptr, 0, returndatasize())\\n revert(ptr, returndatasize())\\n }\\n returnSize := returndatasize()\\n returnValue := mload(0)\\n }\\n\\n if (returnSize == 0 ? address(token).code.length == 0 : returnValue != 1) {\\n revert SafeERC20FailedOperation(address(token));\\n }\\n }\\n\\n /**\\n * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n * on the return value: the return value is optional (but if data is returned, it must not be false).\\n * @param token The token targeted by the call.\\n * @param data The call data (encoded using abi.encode or one of its variants).\\n *\\n * This is a variant of {_callOptionalReturn} that silently catches all reverts and returns a bool instead.\\n */\\n function _callOptionalReturnBool(IERC20 token, bytes memory data) private returns (bool) {\\n bool success;\\n uint256 returnSize;\\n uint256 returnValue;\\n assembly (\\\"memory-safe\\\") {\\n success := call(gas(), token, 0, add(data, 0x20), mload(data), 0, 0x20)\\n returnSize := returndatasize()\\n returnValue := mload(0)\\n }\\n return success && (returnSize == 0 ? address(token).code.length > 0 : returnValue == 1);\\n }\\n}\\n\",\"keccak256\":\"0xca2ae13e0610f6a99238dd00b97bd786bc92732dae6d6b9d61f573ec51018310\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {Errors} from \\\"./Errors.sol\\\";\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev There's no code at `target` (it is not a contract).\\n */\\n error AddressEmptyCode(address target);\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.8.20/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n if (address(this).balance < amount) {\\n revert Errors.InsufficientBalance(address(this).balance, amount);\\n }\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n if (!success) {\\n revert Errors.FailedCall();\\n }\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason or custom error, it is bubbled\\n * up by this function (like regular Solidity function calls). However, if\\n * the call reverted with no returned reason, this function reverts with a\\n * {Errors.FailedCall} error.\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n if (address(this).balance < value) {\\n revert Errors.InsufficientBalance(address(this).balance, value);\\n }\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResultFromTarget(target, success, returndata);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResultFromTarget(target, success, returndata);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResultFromTarget(target, success, returndata);\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call to smart-contract was successful, and reverts if the target\\n * was not a contract or bubbling up the revert reason (falling back to {Errors.FailedCall}) in case\\n * of an unsuccessful call.\\n */\\n function verifyCallResultFromTarget(\\n address target,\\n bool success,\\n bytes memory returndata\\n ) internal view returns (bytes memory) {\\n if (!success) {\\n _revert(returndata);\\n } else {\\n // only check if target is a contract if the call was successful and the return data is empty\\n // otherwise we already know that it was a contract\\n if (returndata.length == 0 && target.code.length == 0) {\\n revert AddressEmptyCode(target);\\n }\\n return returndata;\\n }\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call was successful, and reverts if it wasn't, either by bubbling the\\n * revert reason or with a default {Errors.FailedCall} error.\\n */\\n function verifyCallResult(bool success, bytes memory returndata) internal pure returns (bytes memory) {\\n if (!success) {\\n _revert(returndata);\\n } else {\\n return returndata;\\n }\\n }\\n\\n /**\\n * @dev Reverts with returndata if present. Otherwise reverts with {Errors.FailedCall}.\\n */\\n function _revert(bytes memory returndata) private pure {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n assembly (\\\"memory-safe\\\") {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert Errors.FailedCall();\\n }\\n }\\n}\\n\",\"keccak256\":\"0x9d8da059267bac779a2dbbb9a26c2acf00ca83085e105d62d5d4ef96054a47f5\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n\\n function _contextSuffixLength() internal view virtual returns (uint256) {\\n return 0;\\n }\\n}\\n\",\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Errors.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/Errors.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Collection of common custom errors used in multiple contracts\\n *\\n * IMPORTANT: Backwards compatibility is not guaranteed in future versions of the library.\\n * It is recommended to avoid relying on the error API for critical functionality.\\n *\\n * _Available since v5.1._\\n */\\nlibrary Errors {\\n /**\\n * @dev The ETH balance of the account is not enough to perform the operation.\\n */\\n error InsufficientBalance(uint256 balance, uint256 needed);\\n\\n /**\\n * @dev A call to an address target failed. The target may have reverted.\\n */\\n error FailedCall();\\n\\n /**\\n * @dev The deployment failed.\\n */\\n error FailedDeployment();\\n\\n /**\\n * @dev A necessary precompile is missing.\\n */\\n error MissingPrecompile(address);\\n}\\n\",\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/introspection/IERC165.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Interface of the ERC-165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[ERC].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\"}},\"version\":1}", - "storageLayout": { - "storage": [ - { - "astId": 3837, - "contract": "@layerzerolabs/oapp-evm/contracts/oapp/OAppSender.sol:OAppSender", - "label": "_owner", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 1390, - "contract": "@layerzerolabs/oapp-evm/contracts/oapp/OAppSender.sol:OAppSender", - "label": "peers", - "offset": 0, - "slot": "1", - "type": "t_mapping(t_uint32,t_bytes32)" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_bytes32": { - "encoding": "inplace", - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_mapping(t_uint32,t_bytes32)": { - "encoding": "mapping", - "key": "t_uint32", - "label": "mapping(uint32 => bytes32)", - "numberOfBytes": "32", - "value": "t_bytes32" - }, - "t_uint32": { - "encoding": "inplace", - "label": "uint32", - "numberOfBytes": "4" - } - } - }, - "userdoc": { - "kind": "user", - "methods": { - "endpoint()": { - "notice": "Retrieves the LayerZero endpoint associated with the OApp." - }, - "oAppVersion()": { - "notice": "Retrieves the OApp version information." - }, - "peers(uint32)": { - "notice": "Retrieves the peer (OApp) associated with a corresponding endpoint." - }, - "setDelegate(address)": { - "notice": "Sets the delegate address for the OApp." - }, - "setPeer(uint32,bytes32)": { - "notice": "Sets the peer address (OApp instance) for a corresponding endpoint." - } - }, - "version": 1 - } - } - }, - "@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppCore.sol": { - "IOAppCore": { - "abi": [ - { "inputs": [], "name": "InvalidDelegate", "type": "error" }, - { "inputs": [], "name": "InvalidEndpointCall", "type": "error" }, - { - "inputs": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" } - ], - "name": "NoPeer", - "type": "error" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - } - ], - "name": "OnlyPeer", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "eid", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "peer", - "type": "bytes32" - } - ], - "name": "PeerSet", - "type": "event" - }, - { - "inputs": [], - "name": "endpoint", - "outputs": [ - { - "internalType": "contract ILayerZeroEndpointV2", - "name": "iEndpoint", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "oAppVersion", - "outputs": [ - { - "internalType": "uint64", - "name": "senderVersion", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "receiverVersion", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" } - ], - "name": "peers", - "outputs": [ - { "internalType": "bytes32", "name": "peer", "type": "bytes32" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_delegate", - "type": "address" - } - ], - "name": "setDelegate", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { - "internalType": "bytes32", - "name": "_peer", - "type": "bytes32" - } - ], - "name": "setPeer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "devdoc": { - "kind": "dev", - "methods": { - "endpoint()": { - "returns": { - "iEndpoint": "The LayerZero endpoint as an interface." - } - }, - "oAppVersion()": { - "returns": { - "receiverVersion": "The version of the OAppReceiver.sol contract.", - "senderVersion": "The version of the OAppSender.sol contract." - } - }, - "peers(uint32)": { - "params": { "_eid": "The endpoint ID." }, - "returns": { - "peer": "The peer address (OApp instance) associated with the corresponding endpoint." - } - }, - "setDelegate(address)": { - "params": { - "_delegate": "The address of the delegate to be set." - } - }, - "setPeer(uint32,bytes32)": { - "params": { - "_eid": "The endpoint ID.", - "_peer": "The address of the peer to be associated with the corresponding endpoint." - } - } - }, - "title": "IOAppCore", - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": { - "endpoint()": "5e280f11", - "oAppVersion()": "17442b70", - "peers(uint32)": "bb0b6a53", - "setDelegate(address)": "ca5eb5e1", - "setPeer(uint32,bytes32)": "3400288b" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"InvalidDelegate\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidEndpointCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"}],\"name\":\"NoPeer\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"}],\"name\":\"OnlyPeer\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"peer\",\"type\":\"bytes32\"}],\"name\":\"PeerSet\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"endpoint\",\"outputs\":[{\"internalType\":\"contract ILayerZeroEndpointV2\",\"name\":\"iEndpoint\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"oAppVersion\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"senderVersion\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"receiverVersion\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"}],\"name\":\"peers\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"peer\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_delegate\",\"type\":\"address\"}],\"name\":\"setDelegate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_peer\",\"type\":\"bytes32\"}],\"name\":\"setPeer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"endpoint()\":{\"returns\":{\"iEndpoint\":\"The LayerZero endpoint as an interface.\"}},\"oAppVersion()\":{\"returns\":{\"receiverVersion\":\"The version of the OAppReceiver.sol contract.\",\"senderVersion\":\"The version of the OAppSender.sol contract.\"}},\"peers(uint32)\":{\"params\":{\"_eid\":\"The endpoint ID.\"},\"returns\":{\"peer\":\"The peer address (OApp instance) associated with the corresponding endpoint.\"}},\"setDelegate(address)\":{\"params\":{\"_delegate\":\"The address of the delegate to be set.\"}},\"setPeer(uint32,bytes32)\":{\"params\":{\"_eid\":\"The endpoint ID.\",\"_peer\":\"The address of the peer to be associated with the corresponding endpoint.\"}}},\"title\":\"IOAppCore\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"endpoint()\":{\"notice\":\"Retrieves the LayerZero endpoint associated with the OApp.\"},\"oAppVersion()\":{\"notice\":\"Retrieves the OApp version information.\"},\"peers(uint32)\":{\"notice\":\"Retrieves the peer (OApp) associated with a corresponding endpoint.\"},\"setDelegate(address)\":{\"notice\":\"Sets the delegate address for the OApp Core.\"},\"setPeer(uint32,bytes32)\":{\"notice\":\"Sets the peer address (OApp instance) for a corresponding endpoint.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppCore.sol\":\"IOAppCore\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\nimport { IMessageLibManager } from \\\"./IMessageLibManager.sol\\\";\\nimport { IMessagingComposer } from \\\"./IMessagingComposer.sol\\\";\\nimport { IMessagingChannel } from \\\"./IMessagingChannel.sol\\\";\\nimport { IMessagingContext } from \\\"./IMessagingContext.sol\\\";\\n\\nstruct MessagingParams {\\n uint32 dstEid;\\n bytes32 receiver;\\n bytes message;\\n bytes options;\\n bool payInLzToken;\\n}\\n\\nstruct MessagingReceipt {\\n bytes32 guid;\\n uint64 nonce;\\n MessagingFee fee;\\n}\\n\\nstruct MessagingFee {\\n uint256 nativeFee;\\n uint256 lzTokenFee;\\n}\\n\\nstruct Origin {\\n uint32 srcEid;\\n bytes32 sender;\\n uint64 nonce;\\n}\\n\\ninterface ILayerZeroEndpointV2 is IMessageLibManager, IMessagingComposer, IMessagingChannel, IMessagingContext {\\n event PacketSent(bytes encodedPayload, bytes options, address sendLibrary);\\n\\n event PacketVerified(Origin origin, address receiver, bytes32 payloadHash);\\n\\n event PacketDelivered(Origin origin, address receiver);\\n\\n event LzReceiveAlert(\\n address indexed receiver,\\n address indexed executor,\\n Origin origin,\\n bytes32 guid,\\n uint256 gas,\\n uint256 value,\\n bytes message,\\n bytes extraData,\\n bytes reason\\n );\\n\\n event LzTokenSet(address token);\\n\\n event DelegateSet(address sender, address delegate);\\n\\n function quote(MessagingParams calldata _params, address _sender) external view returns (MessagingFee memory);\\n\\n function send(\\n MessagingParams calldata _params,\\n address _refundAddress\\n ) external payable returns (MessagingReceipt memory);\\n\\n function verify(Origin calldata _origin, address _receiver, bytes32 _payloadHash) external;\\n\\n function verifiable(Origin calldata _origin, address _receiver) external view returns (bool);\\n\\n function initializable(Origin calldata _origin, address _receiver) external view returns (bool);\\n\\n function lzReceive(\\n Origin calldata _origin,\\n address _receiver,\\n bytes32 _guid,\\n bytes calldata _message,\\n bytes calldata _extraData\\n ) external payable;\\n\\n // oapp can burn messages partially by calling this function with its own business logic if messages are verified in order\\n function clear(address _oapp, Origin calldata _origin, bytes32 _guid, bytes calldata _message) external;\\n\\n function setLzToken(address _lzToken) external;\\n\\n function lzToken() external view returns (address);\\n\\n function nativeToken() external view returns (address);\\n\\n function setDelegate(address _delegate) external;\\n}\\n\",\"keccak256\":\"0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\nstruct SetConfigParam {\\n uint32 eid;\\n uint32 configType;\\n bytes config;\\n}\\n\\ninterface IMessageLibManager {\\n struct Timeout {\\n address lib;\\n uint256 expiry;\\n }\\n\\n event LibraryRegistered(address newLib);\\n event DefaultSendLibrarySet(uint32 eid, address newLib);\\n event DefaultReceiveLibrarySet(uint32 eid, address newLib);\\n event DefaultReceiveLibraryTimeoutSet(uint32 eid, address oldLib, uint256 expiry);\\n event SendLibrarySet(address sender, uint32 eid, address newLib);\\n event ReceiveLibrarySet(address receiver, uint32 eid, address newLib);\\n event ReceiveLibraryTimeoutSet(address receiver, uint32 eid, address oldLib, uint256 timeout);\\n\\n function registerLibrary(address _lib) external;\\n\\n function isRegisteredLibrary(address _lib) external view returns (bool);\\n\\n function getRegisteredLibraries() external view returns (address[] memory);\\n\\n function setDefaultSendLibrary(uint32 _eid, address _newLib) external;\\n\\n function defaultSendLibrary(uint32 _eid) external view returns (address);\\n\\n function setDefaultReceiveLibrary(uint32 _eid, address _newLib, uint256 _gracePeriod) external;\\n\\n function defaultReceiveLibrary(uint32 _eid) external view returns (address);\\n\\n function setDefaultReceiveLibraryTimeout(uint32 _eid, address _lib, uint256 _expiry) external;\\n\\n function defaultReceiveLibraryTimeout(uint32 _eid) external view returns (address lib, uint256 expiry);\\n\\n function isSupportedEid(uint32 _eid) external view returns (bool);\\n\\n function isValidReceiveLibrary(address _receiver, uint32 _eid, address _lib) external view returns (bool);\\n\\n /// ------------------- OApp interfaces -------------------\\n function setSendLibrary(address _oapp, uint32 _eid, address _newLib) external;\\n\\n function getSendLibrary(address _sender, uint32 _eid) external view returns (address lib);\\n\\n function isDefaultSendLibrary(address _sender, uint32 _eid) external view returns (bool);\\n\\n function setReceiveLibrary(address _oapp, uint32 _eid, address _newLib, uint256 _gracePeriod) external;\\n\\n function getReceiveLibrary(address _receiver, uint32 _eid) external view returns (address lib, bool isDefault);\\n\\n function setReceiveLibraryTimeout(address _oapp, uint32 _eid, address _lib, uint256 _expiry) external;\\n\\n function receiveLibraryTimeout(address _receiver, uint32 _eid) external view returns (address lib, uint256 expiry);\\n\\n function setConfig(address _oapp, address _lib, SetConfigParam[] calldata _params) external;\\n\\n function getConfig(\\n address _oapp,\\n address _lib,\\n uint32 _eid,\\n uint32 _configType\\n ) external view returns (bytes memory config);\\n}\\n\",\"keccak256\":\"0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\ninterface IMessagingChannel {\\n event InboundNonceSkipped(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce);\\n event PacketNilified(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce, bytes32 payloadHash);\\n event PacketBurnt(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce, bytes32 payloadHash);\\n\\n function eid() external view returns (uint32);\\n\\n // this is an emergency function if a message cannot be verified for some reasons\\n // required to provide _nextNonce to avoid race condition\\n function skip(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce) external;\\n\\n function nilify(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce, bytes32 _payloadHash) external;\\n\\n function burn(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce, bytes32 _payloadHash) external;\\n\\n function nextGuid(address _sender, uint32 _dstEid, bytes32 _receiver) external view returns (bytes32);\\n\\n function inboundNonce(address _receiver, uint32 _srcEid, bytes32 _sender) external view returns (uint64);\\n\\n function outboundNonce(address _sender, uint32 _dstEid, bytes32 _receiver) external view returns (uint64);\\n\\n function inboundPayloadHash(\\n address _receiver,\\n uint32 _srcEid,\\n bytes32 _sender,\\n uint64 _nonce\\n ) external view returns (bytes32);\\n\\n function lazyInboundNonce(address _receiver, uint32 _srcEid, bytes32 _sender) external view returns (uint64);\\n}\\n\",\"keccak256\":\"0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\ninterface IMessagingComposer {\\n event ComposeSent(address from, address to, bytes32 guid, uint16 index, bytes message);\\n event ComposeDelivered(address from, address to, bytes32 guid, uint16 index);\\n event LzComposeAlert(\\n address indexed from,\\n address indexed to,\\n address indexed executor,\\n bytes32 guid,\\n uint16 index,\\n uint256 gas,\\n uint256 value,\\n bytes message,\\n bytes extraData,\\n bytes reason\\n );\\n\\n function composeQueue(\\n address _from,\\n address _to,\\n bytes32 _guid,\\n uint16 _index\\n ) external view returns (bytes32 messageHash);\\n\\n function sendCompose(address _to, bytes32 _guid, uint16 _index, bytes calldata _message) external;\\n\\n function lzCompose(\\n address _from,\\n address _to,\\n bytes32 _guid,\\n uint16 _index,\\n bytes calldata _message,\\n bytes calldata _extraData\\n ) external payable;\\n}\\n\",\"keccak256\":\"0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\ninterface IMessagingContext {\\n function isSendingMessage() external view returns (bool);\\n\\n function getSendContext() external view returns (uint32 dstEid, address sender);\\n}\\n\",\"keccak256\":\"0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e\",\"license\":\"MIT\"},\"@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppCore.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\nimport { ILayerZeroEndpointV2 } from \\\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\\\";\\n\\n/**\\n * @title IOAppCore\\n */\\ninterface IOAppCore {\\n // Custom error messages\\n error OnlyPeer(uint32 eid, bytes32 sender);\\n error NoPeer(uint32 eid);\\n error InvalidEndpointCall();\\n error InvalidDelegate();\\n\\n // Event emitted when a peer (OApp) is set for a corresponding endpoint\\n event PeerSet(uint32 eid, bytes32 peer);\\n\\n /**\\n * @notice Retrieves the OApp version information.\\n * @return senderVersion The version of the OAppSender.sol contract.\\n * @return receiverVersion The version of the OAppReceiver.sol contract.\\n */\\n function oAppVersion() external view returns (uint64 senderVersion, uint64 receiverVersion);\\n\\n /**\\n * @notice Retrieves the LayerZero endpoint associated with the OApp.\\n * @return iEndpoint The LayerZero endpoint as an interface.\\n */\\n function endpoint() external view returns (ILayerZeroEndpointV2 iEndpoint);\\n\\n /**\\n * @notice Retrieves the peer (OApp) associated with a corresponding endpoint.\\n * @param _eid The endpoint ID.\\n * @return peer The peer address (OApp instance) associated with the corresponding endpoint.\\n */\\n function peers(uint32 _eid) external view returns (bytes32 peer);\\n\\n /**\\n * @notice Sets the peer address (OApp instance) for a corresponding endpoint.\\n * @param _eid The endpoint ID.\\n * @param _peer The address of the peer to be associated with the corresponding endpoint.\\n */\\n function setPeer(uint32 _eid, bytes32 _peer) external;\\n\\n /**\\n * @notice Sets the delegate address for the OApp Core.\\n * @param _delegate The address of the delegate to be set.\\n */\\n function setDelegate(address _delegate) external;\\n}\\n\",\"keccak256\":\"0x40e49f2de74506e1da5dcaed53a39853f691647f4ceb0fccc8f49a68d3f47c58\",\"license\":\"MIT\"}},\"version\":1}", - "storageLayout": { "storage": [], "types": null }, - "userdoc": { - "kind": "user", - "methods": { - "endpoint()": { - "notice": "Retrieves the LayerZero endpoint associated with the OApp." - }, - "oAppVersion()": { - "notice": "Retrieves the OApp version information." - }, - "peers(uint32)": { - "notice": "Retrieves the peer (OApp) associated with a corresponding endpoint." - }, - "setDelegate(address)": { - "notice": "Sets the delegate address for the OApp Core." - }, - "setPeer(uint32,bytes32)": { - "notice": "Sets the peer address (OApp instance) for a corresponding endpoint." - } - }, - "version": 1 - } - } - }, - "@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppMsgInspector.sol": { - "IOAppMsgInspector": { - "abi": [ - { - "inputs": [ - { "internalType": "bytes", "name": "message", "type": "bytes" }, - { "internalType": "bytes", "name": "options", "type": "bytes" } - ], - "name": "InspectionFailed", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_message", - "type": "bytes" - }, - { "internalType": "bytes", "name": "_options", "type": "bytes" } - ], - "name": "inspect", - "outputs": [ - { "internalType": "bool", "name": "valid", "type": "bool" } - ], - "stateMutability": "view", - "type": "function" - } - ], - "devdoc": { - "details": "Interface for the OApp Message Inspector, allowing examination of message and options contents.", - "kind": "dev", - "methods": { - "inspect(bytes,bytes)": { - "details": "Optionally done as a revert, OR use the boolean provided to handle the failure.", - "params": { - "_message": "The message payload to be inspected.", - "_options": "Additional options or parameters for inspection." - }, - "returns": { - "valid": "A boolean indicating whether the inspection passed (true) or failed (false)." - } - } - }, - "title": "IOAppMsgInspector", - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": { "inspect(bytes,bytes)": "043a78eb" } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"options\",\"type\":\"bytes\"}],\"name\":\"InspectionFailed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_options\",\"type\":\"bytes\"}],\"name\":\"inspect\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"valid\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface for the OApp Message Inspector, allowing examination of message and options contents.\",\"kind\":\"dev\",\"methods\":{\"inspect(bytes,bytes)\":{\"details\":\"Optionally done as a revert, OR use the boolean provided to handle the failure.\",\"params\":{\"_message\":\"The message payload to be inspected.\",\"_options\":\"Additional options or parameters for inspection.\"},\"returns\":{\"valid\":\"A boolean indicating whether the inspection passed (true) or failed (false).\"}}},\"title\":\"IOAppMsgInspector\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"inspect(bytes,bytes)\":{\"notice\":\"Allows the inspector to examine LayerZero message contents and optionally throw a revert if invalid.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppMsgInspector.sol\":\"IOAppMsgInspector\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppMsgInspector.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @title IOAppMsgInspector\\n * @dev Interface for the OApp Message Inspector, allowing examination of message and options contents.\\n */\\ninterface IOAppMsgInspector {\\n // Custom error message for inspection failure\\n error InspectionFailed(bytes message, bytes options);\\n\\n /**\\n * @notice Allows the inspector to examine LayerZero message contents and optionally throw a revert if invalid.\\n * @param _message The message payload to be inspected.\\n * @param _options Additional options or parameters for inspection.\\n * @return valid A boolean indicating whether the inspection passed (true) or failed (false).\\n *\\n * @dev Optionally done as a revert, OR use the boolean provided to handle the failure.\\n */\\n function inspect(bytes calldata _message, bytes calldata _options) external view returns (bool valid);\\n}\\n\",\"keccak256\":\"0x339654e699043c400cad92de209aa23855ce10211c31cf4114042cc5224d3b7c\",\"license\":\"MIT\"}},\"version\":1}", - "storageLayout": { "storage": [], "types": null }, - "userdoc": { - "kind": "user", - "methods": { - "inspect(bytes,bytes)": { - "notice": "Allows the inspector to examine LayerZero message contents and optionally throw a revert if invalid." - } - }, - "version": 1 - } - } - }, - "@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppOptionsType3.sol": { - "IOAppOptionsType3": { - "abi": [ - { - "inputs": [ - { "internalType": "bytes", "name": "options", "type": "bytes" } - ], - "name": "InvalidOptions", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "eid", - "type": "uint32" - }, - { - "internalType": "uint16", - "name": "msgType", - "type": "uint16" - }, - { - "internalType": "bytes", - "name": "options", - "type": "bytes" - } - ], - "indexed": false, - "internalType": "struct EnforcedOptionParam[]", - "name": "_enforcedOptions", - "type": "tuple[]" - } - ], - "name": "EnforcedOptionSet", - "type": "event" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { - "internalType": "uint16", - "name": "_msgType", - "type": "uint16" - }, - { - "internalType": "bytes", - "name": "_extraOptions", - "type": "bytes" - } - ], - "name": "combineOptions", - "outputs": [ - { "internalType": "bytes", "name": "options", "type": "bytes" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "eid", - "type": "uint32" - }, - { - "internalType": "uint16", - "name": "msgType", - "type": "uint16" - }, - { - "internalType": "bytes", - "name": "options", - "type": "bytes" - } - ], - "internalType": "struct EnforcedOptionParam[]", - "name": "_enforcedOptions", - "type": "tuple[]" - } - ], - "name": "setEnforcedOptions", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "devdoc": { - "details": "Interface for the OApp with Type 3 Options, allowing the setting and combining of enforced options.", - "kind": "dev", - "methods": { - "combineOptions(uint32,uint16,bytes)": { - "params": { - "_eid": "The endpoint ID.", - "_extraOptions": "Additional options passed by the caller.", - "_msgType": "The OApp message type." - }, - "returns": { - "options": "The combination of caller specified options AND enforced options." - } - }, - "setEnforcedOptions((uint32,uint16,bytes)[])": { - "params": { - "_enforcedOptions": "An array of EnforcedOptionParam structures specifying enforced options." - } - } - }, - "title": "IOAppOptionsType3", - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": { - "combineOptions(uint32,uint16,bytes)": "bc70b354", - "setEnforcedOptions((uint32,uint16,bytes)[])": "b98bd070" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"options\",\"type\":\"bytes\"}],\"name\":\"InvalidOptions\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"msgType\",\"type\":\"uint16\"},{\"internalType\":\"bytes\",\"name\":\"options\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"struct EnforcedOptionParam[]\",\"name\":\"_enforcedOptions\",\"type\":\"tuple[]\"}],\"name\":\"EnforcedOptionSet\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"_msgType\",\"type\":\"uint16\"},{\"internalType\":\"bytes\",\"name\":\"_extraOptions\",\"type\":\"bytes\"}],\"name\":\"combineOptions\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"options\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"msgType\",\"type\":\"uint16\"},{\"internalType\":\"bytes\",\"name\":\"options\",\"type\":\"bytes\"}],\"internalType\":\"struct EnforcedOptionParam[]\",\"name\":\"_enforcedOptions\",\"type\":\"tuple[]\"}],\"name\":\"setEnforcedOptions\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface for the OApp with Type 3 Options, allowing the setting and combining of enforced options.\",\"kind\":\"dev\",\"methods\":{\"combineOptions(uint32,uint16,bytes)\":{\"params\":{\"_eid\":\"The endpoint ID.\",\"_extraOptions\":\"Additional options passed by the caller.\",\"_msgType\":\"The OApp message type.\"},\"returns\":{\"options\":\"The combination of caller specified options AND enforced options.\"}},\"setEnforcedOptions((uint32,uint16,bytes)[])\":{\"params\":{\"_enforcedOptions\":\"An array of EnforcedOptionParam structures specifying enforced options.\"}}},\"title\":\"IOAppOptionsType3\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"combineOptions(uint32,uint16,bytes)\":{\"notice\":\"Combines options for a given endpoint and message type.\"},\"setEnforcedOptions((uint32,uint16,bytes)[])\":{\"notice\":\"Sets enforced options for specific endpoint and message type combinations.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppOptionsType3.sol\":\"IOAppOptionsType3\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppOptionsType3.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Struct representing enforced option parameters.\\n */\\nstruct EnforcedOptionParam {\\n uint32 eid; // Endpoint ID\\n uint16 msgType; // Message Type\\n bytes options; // Additional options\\n}\\n\\n/**\\n * @title IOAppOptionsType3\\n * @dev Interface for the OApp with Type 3 Options, allowing the setting and combining of enforced options.\\n */\\ninterface IOAppOptionsType3 {\\n // Custom error message for invalid options\\n error InvalidOptions(bytes options);\\n\\n // Event emitted when enforced options are set\\n event EnforcedOptionSet(EnforcedOptionParam[] _enforcedOptions);\\n\\n /**\\n * @notice Sets enforced options for specific endpoint and message type combinations.\\n * @param _enforcedOptions An array of EnforcedOptionParam structures specifying enforced options.\\n */\\n function setEnforcedOptions(EnforcedOptionParam[] calldata _enforcedOptions) external;\\n\\n /**\\n * @notice Combines options for a given endpoint and message type.\\n * @param _eid The endpoint ID.\\n * @param _msgType The OApp message type.\\n * @param _extraOptions Additional options passed by the caller.\\n * @return options The combination of caller specified options AND enforced options.\\n */\\n function combineOptions(\\n uint32 _eid,\\n uint16 _msgType,\\n bytes calldata _extraOptions\\n ) external view returns (bytes memory options);\\n}\\n\",\"keccak256\":\"0x9fc08a51e9d7c9c710c4eb26f84fe77228305ad7da63fa486ff24ebf2f3bc461\",\"license\":\"MIT\"}},\"version\":1}", - "storageLayout": { "storage": [], "types": null }, - "userdoc": { - "kind": "user", - "methods": { - "combineOptions(uint32,uint16,bytes)": { - "notice": "Combines options for a given endpoint and message type." - }, - "setEnforcedOptions((uint32,uint16,bytes)[])": { - "notice": "Sets enforced options for specific endpoint and message type combinations." - } - }, - "version": 1 - } - } - }, - "@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppReceiver.sol": { - "IOAppReceiver": { - "abi": [ - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - } - ], - "internalType": "struct Origin", - "name": "_origin", - "type": "tuple" - } - ], - "name": "allowInitializePath", - "outputs": [ - { "internalType": "bool", "name": "", "type": "bool" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - } - ], - "internalType": "struct Origin", - "name": "_origin", - "type": "tuple" - }, - { - "internalType": "bytes", - "name": "_message", - "type": "bytes" - }, - { - "internalType": "address", - "name": "_sender", - "type": "address" - } - ], - "name": "isComposeMsgSender", - "outputs": [ - { "internalType": "bool", "name": "isSender", "type": "bool" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - } - ], - "internalType": "struct Origin", - "name": "_origin", - "type": "tuple" - }, - { - "internalType": "bytes32", - "name": "_guid", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "_message", - "type": "bytes" - }, - { - "internalType": "address", - "name": "_executor", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "lzReceive", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { - "internalType": "bytes32", - "name": "_sender", - "type": "bytes32" - } - ], - "name": "nextNonce", - "outputs": [ - { "internalType": "uint64", "name": "", "type": "uint64" } - ], - "stateMutability": "view", - "type": "function" - } - ], - "devdoc": { - "kind": "dev", - "methods": { - "isComposeMsgSender((uint32,bytes32,uint64),bytes,address)": { - "details": "Applications can optionally choose to implement a separate composeMsg sender that is NOT the bridging layer.The default sender IS the OAppReceiver implementer.", - "params": { - "_message": "The lzReceive payload.", - "_origin": "The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message.", - "_sender": "The sender address." - }, - "returns": { "isSender": "Is a valid sender." } - } - }, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": { - "allowInitializePath((uint32,bytes32,uint64))": "ff7bd03d", - "isComposeMsgSender((uint32,bytes32,uint64),bytes,address)": "82413eac", - "lzReceive((uint32,bytes32,uint64),bytes32,bytes,address,bytes)": "13137d65", - "nextNonce(uint32,bytes32)": "7d25a05e" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"_origin\",\"type\":\"tuple\"}],\"name\":\"allowInitializePath\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"_origin\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"}],\"name\":\"isComposeMsgSender\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"isSender\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"_origin\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"_guid\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"_executor\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"lzReceive\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_sender\",\"type\":\"bytes32\"}],\"name\":\"nextNonce\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"isComposeMsgSender((uint32,bytes32,uint64),bytes,address)\":{\"details\":\"Applications can optionally choose to implement a separate composeMsg sender that is NOT the bridging layer.The default sender IS the OAppReceiver implementer.\",\"params\":{\"_message\":\"The lzReceive payload.\",\"_origin\":\"The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message.\",\"_sender\":\"The sender address.\"},\"returns\":{\"isSender\":\"Is a valid sender.\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"isComposeMsgSender((uint32,bytes32,uint64),bytes,address)\":{\"notice\":\"Indicates whether an address is an approved composeMsg sender to the Endpoint.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppReceiver.sol\":\"IOAppReceiver\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\nimport { IMessageLibManager } from \\\"./IMessageLibManager.sol\\\";\\nimport { IMessagingComposer } from \\\"./IMessagingComposer.sol\\\";\\nimport { IMessagingChannel } from \\\"./IMessagingChannel.sol\\\";\\nimport { IMessagingContext } from \\\"./IMessagingContext.sol\\\";\\n\\nstruct MessagingParams {\\n uint32 dstEid;\\n bytes32 receiver;\\n bytes message;\\n bytes options;\\n bool payInLzToken;\\n}\\n\\nstruct MessagingReceipt {\\n bytes32 guid;\\n uint64 nonce;\\n MessagingFee fee;\\n}\\n\\nstruct MessagingFee {\\n uint256 nativeFee;\\n uint256 lzTokenFee;\\n}\\n\\nstruct Origin {\\n uint32 srcEid;\\n bytes32 sender;\\n uint64 nonce;\\n}\\n\\ninterface ILayerZeroEndpointV2 is IMessageLibManager, IMessagingComposer, IMessagingChannel, IMessagingContext {\\n event PacketSent(bytes encodedPayload, bytes options, address sendLibrary);\\n\\n event PacketVerified(Origin origin, address receiver, bytes32 payloadHash);\\n\\n event PacketDelivered(Origin origin, address receiver);\\n\\n event LzReceiveAlert(\\n address indexed receiver,\\n address indexed executor,\\n Origin origin,\\n bytes32 guid,\\n uint256 gas,\\n uint256 value,\\n bytes message,\\n bytes extraData,\\n bytes reason\\n );\\n\\n event LzTokenSet(address token);\\n\\n event DelegateSet(address sender, address delegate);\\n\\n function quote(MessagingParams calldata _params, address _sender) external view returns (MessagingFee memory);\\n\\n function send(\\n MessagingParams calldata _params,\\n address _refundAddress\\n ) external payable returns (MessagingReceipt memory);\\n\\n function verify(Origin calldata _origin, address _receiver, bytes32 _payloadHash) external;\\n\\n function verifiable(Origin calldata _origin, address _receiver) external view returns (bool);\\n\\n function initializable(Origin calldata _origin, address _receiver) external view returns (bool);\\n\\n function lzReceive(\\n Origin calldata _origin,\\n address _receiver,\\n bytes32 _guid,\\n bytes calldata _message,\\n bytes calldata _extraData\\n ) external payable;\\n\\n // oapp can burn messages partially by calling this function with its own business logic if messages are verified in order\\n function clear(address _oapp, Origin calldata _origin, bytes32 _guid, bytes calldata _message) external;\\n\\n function setLzToken(address _lzToken) external;\\n\\n function lzToken() external view returns (address);\\n\\n function nativeToken() external view returns (address);\\n\\n function setDelegate(address _delegate) external;\\n}\\n\",\"keccak256\":\"0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\nimport { Origin } from \\\"./ILayerZeroEndpointV2.sol\\\";\\n\\ninterface ILayerZeroReceiver {\\n function allowInitializePath(Origin calldata _origin) external view returns (bool);\\n\\n function nextNonce(uint32 _eid, bytes32 _sender) external view returns (uint64);\\n\\n function lzReceive(\\n Origin calldata _origin,\\n bytes32 _guid,\\n bytes calldata _message,\\n address _executor,\\n bytes calldata _extraData\\n ) external payable;\\n}\\n\",\"keccak256\":\"0x9641abba8d53b08bb517d1b74801dd15ea7b84d77a6719085bd96c8ea94e3ca0\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\nstruct SetConfigParam {\\n uint32 eid;\\n uint32 configType;\\n bytes config;\\n}\\n\\ninterface IMessageLibManager {\\n struct Timeout {\\n address lib;\\n uint256 expiry;\\n }\\n\\n event LibraryRegistered(address newLib);\\n event DefaultSendLibrarySet(uint32 eid, address newLib);\\n event DefaultReceiveLibrarySet(uint32 eid, address newLib);\\n event DefaultReceiveLibraryTimeoutSet(uint32 eid, address oldLib, uint256 expiry);\\n event SendLibrarySet(address sender, uint32 eid, address newLib);\\n event ReceiveLibrarySet(address receiver, uint32 eid, address newLib);\\n event ReceiveLibraryTimeoutSet(address receiver, uint32 eid, address oldLib, uint256 timeout);\\n\\n function registerLibrary(address _lib) external;\\n\\n function isRegisteredLibrary(address _lib) external view returns (bool);\\n\\n function getRegisteredLibraries() external view returns (address[] memory);\\n\\n function setDefaultSendLibrary(uint32 _eid, address _newLib) external;\\n\\n function defaultSendLibrary(uint32 _eid) external view returns (address);\\n\\n function setDefaultReceiveLibrary(uint32 _eid, address _newLib, uint256 _gracePeriod) external;\\n\\n function defaultReceiveLibrary(uint32 _eid) external view returns (address);\\n\\n function setDefaultReceiveLibraryTimeout(uint32 _eid, address _lib, uint256 _expiry) external;\\n\\n function defaultReceiveLibraryTimeout(uint32 _eid) external view returns (address lib, uint256 expiry);\\n\\n function isSupportedEid(uint32 _eid) external view returns (bool);\\n\\n function isValidReceiveLibrary(address _receiver, uint32 _eid, address _lib) external view returns (bool);\\n\\n /// ------------------- OApp interfaces -------------------\\n function setSendLibrary(address _oapp, uint32 _eid, address _newLib) external;\\n\\n function getSendLibrary(address _sender, uint32 _eid) external view returns (address lib);\\n\\n function isDefaultSendLibrary(address _sender, uint32 _eid) external view returns (bool);\\n\\n function setReceiveLibrary(address _oapp, uint32 _eid, address _newLib, uint256 _gracePeriod) external;\\n\\n function getReceiveLibrary(address _receiver, uint32 _eid) external view returns (address lib, bool isDefault);\\n\\n function setReceiveLibraryTimeout(address _oapp, uint32 _eid, address _lib, uint256 _expiry) external;\\n\\n function receiveLibraryTimeout(address _receiver, uint32 _eid) external view returns (address lib, uint256 expiry);\\n\\n function setConfig(address _oapp, address _lib, SetConfigParam[] calldata _params) external;\\n\\n function getConfig(\\n address _oapp,\\n address _lib,\\n uint32 _eid,\\n uint32 _configType\\n ) external view returns (bytes memory config);\\n}\\n\",\"keccak256\":\"0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\ninterface IMessagingChannel {\\n event InboundNonceSkipped(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce);\\n event PacketNilified(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce, bytes32 payloadHash);\\n event PacketBurnt(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce, bytes32 payloadHash);\\n\\n function eid() external view returns (uint32);\\n\\n // this is an emergency function if a message cannot be verified for some reasons\\n // required to provide _nextNonce to avoid race condition\\n function skip(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce) external;\\n\\n function nilify(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce, bytes32 _payloadHash) external;\\n\\n function burn(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce, bytes32 _payloadHash) external;\\n\\n function nextGuid(address _sender, uint32 _dstEid, bytes32 _receiver) external view returns (bytes32);\\n\\n function inboundNonce(address _receiver, uint32 _srcEid, bytes32 _sender) external view returns (uint64);\\n\\n function outboundNonce(address _sender, uint32 _dstEid, bytes32 _receiver) external view returns (uint64);\\n\\n function inboundPayloadHash(\\n address _receiver,\\n uint32 _srcEid,\\n bytes32 _sender,\\n uint64 _nonce\\n ) external view returns (bytes32);\\n\\n function lazyInboundNonce(address _receiver, uint32 _srcEid, bytes32 _sender) external view returns (uint64);\\n}\\n\",\"keccak256\":\"0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\ninterface IMessagingComposer {\\n event ComposeSent(address from, address to, bytes32 guid, uint16 index, bytes message);\\n event ComposeDelivered(address from, address to, bytes32 guid, uint16 index);\\n event LzComposeAlert(\\n address indexed from,\\n address indexed to,\\n address indexed executor,\\n bytes32 guid,\\n uint16 index,\\n uint256 gas,\\n uint256 value,\\n bytes message,\\n bytes extraData,\\n bytes reason\\n );\\n\\n function composeQueue(\\n address _from,\\n address _to,\\n bytes32 _guid,\\n uint16 _index\\n ) external view returns (bytes32 messageHash);\\n\\n function sendCompose(address _to, bytes32 _guid, uint16 _index, bytes calldata _message) external;\\n\\n function lzCompose(\\n address _from,\\n address _to,\\n bytes32 _guid,\\n uint16 _index,\\n bytes calldata _message,\\n bytes calldata _extraData\\n ) external payable;\\n}\\n\",\"keccak256\":\"0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\ninterface IMessagingContext {\\n function isSendingMessage() external view returns (bool);\\n\\n function getSendContext() external view returns (uint32 dstEid, address sender);\\n}\\n\",\"keccak256\":\"0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e\",\"license\":\"MIT\"},\"@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppReceiver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.20;\\n\\nimport { ILayerZeroReceiver, Origin } from \\\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol\\\";\\n\\ninterface IOAppReceiver is ILayerZeroReceiver {\\n /**\\n * @notice Indicates whether an address is an approved composeMsg sender to the Endpoint.\\n * @param _origin The origin information containing the source endpoint and sender address.\\n * - srcEid: The source chain endpoint ID.\\n * - sender: The sender address on the src chain.\\n * - nonce: The nonce of the message.\\n * @param _message The lzReceive payload.\\n * @param _sender The sender address.\\n * @return isSender Is a valid sender.\\n *\\n * @dev Applications can optionally choose to implement a separate composeMsg sender that is NOT the bridging layer.\\n * @dev The default sender IS the OAppReceiver implementer.\\n */\\n function isComposeMsgSender(\\n Origin calldata _origin,\\n bytes calldata _message,\\n address _sender\\n ) external view returns (bool isSender);\\n}\\n\",\"keccak256\":\"0xd26135185e19b3732746d4a9e2923e896f28dec8664bab161faea2ee26fcdc3d\",\"license\":\"MIT\"}},\"version\":1}", - "storageLayout": { "storage": [], "types": null }, - "userdoc": { - "kind": "user", - "methods": { - "isComposeMsgSender((uint32,bytes32,uint64),bytes,address)": { - "notice": "Indicates whether an address is an approved composeMsg sender to the Endpoint." - } - }, - "version": 1 - } - } - }, - "@layerzerolabs/oapp-evm/contracts/oapp/libs/OAppOptionsType3.sol": { - "OAppOptionsType3": { - "abi": [ - { - "inputs": [ - { "internalType": "bytes", "name": "options", "type": "bytes" } - ], - "name": "InvalidOptions", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "OwnableInvalidOwner", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "OwnableUnauthorizedAccount", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "eid", - "type": "uint32" - }, - { - "internalType": "uint16", - "name": "msgType", - "type": "uint16" - }, - { - "internalType": "bytes", - "name": "options", - "type": "bytes" - } - ], - "indexed": false, - "internalType": "struct EnforcedOptionParam[]", - "name": "_enforcedOptions", - "type": "tuple[]" - } - ], - "name": "EnforcedOptionSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { - "internalType": "uint16", - "name": "_msgType", - "type": "uint16" - }, - { - "internalType": "bytes", - "name": "_extraOptions", - "type": "bytes" - } - ], - "name": "combineOptions", - "outputs": [ - { "internalType": "bytes", "name": "", "type": "bytes" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" }, - { - "internalType": "uint16", - "name": "msgType", - "type": "uint16" - } - ], - "name": "enforcedOptions", - "outputs": [ - { - "internalType": "bytes", - "name": "enforcedOption", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "eid", - "type": "uint32" - }, - { - "internalType": "uint16", - "name": "msgType", - "type": "uint16" - }, - { - "internalType": "bytes", - "name": "options", - "type": "bytes" - } - ], - "internalType": "struct EnforcedOptionParam[]", - "name": "_enforcedOptions", - "type": "tuple[]" - } - ], - "name": "setEnforcedOptions", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "devdoc": { - "details": "Abstract contract implementing the IOAppOptionsType3 interface with type 3 options.", - "errors": { - "OwnableInvalidOwner(address)": [ - { - "details": "The owner is not a valid owner account. (eg. `address(0)`)" - } - ], - "OwnableUnauthorizedAccount(address)": [ - { - "details": "The caller account is not authorized to perform an operation." - } - ] - }, - "kind": "dev", - "methods": { - "combineOptions(uint32,uint16,bytes)": { - "details": "If there is an enforced lzReceive option: - {gasLimit: 200k, msg.value: 1 ether} AND a caller supplies a lzReceive option: {gasLimit: 100k, msg.value: 0.5 ether} - The resulting options will be {gasLimit: 300k, msg.value: 1.5 ether} when the message is executed on the remote lzReceive() function.This presence of duplicated options is handled off-chain in the verifier/executor.", - "params": { - "_eid": "The endpoint ID.", - "_extraOptions": "Additional options passed by the caller.", - "_msgType": "The OAPP message type." - }, - "returns": { - "_0": "options The combination of caller specified options AND enforced options." - } - }, - "owner()": { - "details": "Returns the address of the current owner." - }, - "renounceOwnership()": { - "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner." - }, - "setEnforcedOptions((uint32,uint16,bytes)[])": { - "details": "Sets the enforced options for specific endpoint and message type combinations.Only the owner/admin of the OApp can call this function.Provides a way for the OApp to enforce things like paying for PreCrime, AND/OR minimum dst lzReceive gas amounts etc.These enforced options can vary as the potential options/execution on the remote may differ as per the msgType. eg. Amount of lzReceive() gas necessary to deliver a lzCompose() message adds overhead you dont want to pay if you are only making a standard LayerZero message ie. lzReceive() WITHOUT sendCompose().", - "params": { - "_enforcedOptions": "An array of EnforcedOptionParam structures specifying enforced options." - } - }, - "transferOwnership(address)": { - "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." - } - }, - "title": "OAppOptionsType3", - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": { - "combineOptions(uint32,uint16,bytes)": "bc70b354", - "enforcedOptions(uint32,uint16)": "5535d461", - "owner()": "8da5cb5b", - "renounceOwnership()": "715018a6", - "setEnforcedOptions((uint32,uint16,bytes)[])": "b98bd070", - "transferOwnership(address)": "f2fde38b" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"options\",\"type\":\"bytes\"}],\"name\":\"InvalidOptions\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"msgType\",\"type\":\"uint16\"},{\"internalType\":\"bytes\",\"name\":\"options\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"struct EnforcedOptionParam[]\",\"name\":\"_enforcedOptions\",\"type\":\"tuple[]\"}],\"name\":\"EnforcedOptionSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"_msgType\",\"type\":\"uint16\"},{\"internalType\":\"bytes\",\"name\":\"_extraOptions\",\"type\":\"bytes\"}],\"name\":\"combineOptions\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"msgType\",\"type\":\"uint16\"}],\"name\":\"enforcedOptions\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"enforcedOption\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"msgType\",\"type\":\"uint16\"},{\"internalType\":\"bytes\",\"name\":\"options\",\"type\":\"bytes\"}],\"internalType\":\"struct EnforcedOptionParam[]\",\"name\":\"_enforcedOptions\",\"type\":\"tuple[]\"}],\"name\":\"setEnforcedOptions\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Abstract contract implementing the IOAppOptionsType3 interface with type 3 options.\",\"errors\":{\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}]},\"kind\":\"dev\",\"methods\":{\"combineOptions(uint32,uint16,bytes)\":{\"details\":\"If there is an enforced lzReceive option: - {gasLimit: 200k, msg.value: 1 ether} AND a caller supplies a lzReceive option: {gasLimit: 100k, msg.value: 0.5 ether} - The resulting options will be {gasLimit: 300k, msg.value: 1.5 ether} when the message is executed on the remote lzReceive() function.This presence of duplicated options is handled off-chain in the verifier/executor.\",\"params\":{\"_eid\":\"The endpoint ID.\",\"_extraOptions\":\"Additional options passed by the caller.\",\"_msgType\":\"The OAPP message type.\"},\"returns\":{\"_0\":\"options The combination of caller specified options AND enforced options.\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"setEnforcedOptions((uint32,uint16,bytes)[])\":{\"details\":\"Sets the enforced options for specific endpoint and message type combinations.Only the owner/admin of the OApp can call this function.Provides a way for the OApp to enforce things like paying for PreCrime, AND/OR minimum dst lzReceive gas amounts etc.These enforced options can vary as the potential options/execution on the remote may differ as per the msgType. eg. Amount of lzReceive() gas necessary to deliver a lzCompose() message adds overhead you dont want to pay if you are only making a standard LayerZero message ie. lzReceive() WITHOUT sendCompose().\",\"params\":{\"_enforcedOptions\":\"An array of EnforcedOptionParam structures specifying enforced options.\"}},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"title\":\"OAppOptionsType3\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"combineOptions(uint32,uint16,bytes)\":{\"notice\":\"Combines options for a given endpoint and message type.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@layerzerolabs/oapp-evm/contracts/oapp/libs/OAppOptionsType3.sol\":\"OAppOptionsType3\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppOptionsType3.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Struct representing enforced option parameters.\\n */\\nstruct EnforcedOptionParam {\\n uint32 eid; // Endpoint ID\\n uint16 msgType; // Message Type\\n bytes options; // Additional options\\n}\\n\\n/**\\n * @title IOAppOptionsType3\\n * @dev Interface for the OApp with Type 3 Options, allowing the setting and combining of enforced options.\\n */\\ninterface IOAppOptionsType3 {\\n // Custom error message for invalid options\\n error InvalidOptions(bytes options);\\n\\n // Event emitted when enforced options are set\\n event EnforcedOptionSet(EnforcedOptionParam[] _enforcedOptions);\\n\\n /**\\n * @notice Sets enforced options for specific endpoint and message type combinations.\\n * @param _enforcedOptions An array of EnforcedOptionParam structures specifying enforced options.\\n */\\n function setEnforcedOptions(EnforcedOptionParam[] calldata _enforcedOptions) external;\\n\\n /**\\n * @notice Combines options for a given endpoint and message type.\\n * @param _eid The endpoint ID.\\n * @param _msgType The OApp message type.\\n * @param _extraOptions Additional options passed by the caller.\\n * @return options The combination of caller specified options AND enforced options.\\n */\\n function combineOptions(\\n uint32 _eid,\\n uint16 _msgType,\\n bytes calldata _extraOptions\\n ) external view returns (bytes memory options);\\n}\\n\",\"keccak256\":\"0x9fc08a51e9d7c9c710c4eb26f84fe77228305ad7da63fa486ff24ebf2f3bc461\",\"license\":\"MIT\"},\"@layerzerolabs/oapp-evm/contracts/oapp/libs/OAppOptionsType3.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\nimport { IOAppOptionsType3, EnforcedOptionParam } from \\\"../interfaces/IOAppOptionsType3.sol\\\";\\n\\n/**\\n * @title OAppOptionsType3\\n * @dev Abstract contract implementing the IOAppOptionsType3 interface with type 3 options.\\n */\\nabstract contract OAppOptionsType3 is IOAppOptionsType3, Ownable {\\n uint16 internal constant OPTION_TYPE_3 = 3;\\n\\n // @dev The \\\"msgType\\\" should be defined in the child contract.\\n mapping(uint32 eid => mapping(uint16 msgType => bytes enforcedOption)) public enforcedOptions;\\n\\n /**\\n * @dev Sets the enforced options for specific endpoint and message type combinations.\\n * @param _enforcedOptions An array of EnforcedOptionParam structures specifying enforced options.\\n *\\n * @dev Only the owner/admin of the OApp can call this function.\\n * @dev Provides a way for the OApp to enforce things like paying for PreCrime, AND/OR minimum dst lzReceive gas amounts etc.\\n * @dev These enforced options can vary as the potential options/execution on the remote may differ as per the msgType.\\n * eg. Amount of lzReceive() gas necessary to deliver a lzCompose() message adds overhead you dont want to pay\\n * if you are only making a standard LayerZero message ie. lzReceive() WITHOUT sendCompose().\\n */\\n function setEnforcedOptions(EnforcedOptionParam[] calldata _enforcedOptions) public virtual onlyOwner {\\n _setEnforcedOptions(_enforcedOptions);\\n }\\n\\n /**\\n * @dev Sets the enforced options for specific endpoint and message type combinations.\\n * @param _enforcedOptions An array of EnforcedOptionParam structures specifying enforced options.\\n *\\n * @dev Provides a way for the OApp to enforce things like paying for PreCrime, AND/OR minimum dst lzReceive gas amounts etc.\\n * @dev These enforced options can vary as the potential options/execution on the remote may differ as per the msgType.\\n * eg. Amount of lzReceive() gas necessary to deliver a lzCompose() message adds overhead you dont want to pay\\n * if you are only making a standard LayerZero message ie. lzReceive() WITHOUT sendCompose().\\n */\\n function _setEnforcedOptions(EnforcedOptionParam[] memory _enforcedOptions) internal virtual {\\n for (uint256 i = 0; i < _enforcedOptions.length; i++) {\\n // @dev Enforced options are only available for optionType 3, as type 1 and 2 dont support combining.\\n _assertOptionsType3(_enforcedOptions[i].options);\\n enforcedOptions[_enforcedOptions[i].eid][_enforcedOptions[i].msgType] = _enforcedOptions[i].options;\\n }\\n\\n emit EnforcedOptionSet(_enforcedOptions);\\n }\\n\\n /**\\n * @notice Combines options for a given endpoint and message type.\\n * @param _eid The endpoint ID.\\n * @param _msgType The OAPP message type.\\n * @param _extraOptions Additional options passed by the caller.\\n * @return options The combination of caller specified options AND enforced options.\\n *\\n * @dev If there is an enforced lzReceive option:\\n * - {gasLimit: 200k, msg.value: 1 ether} AND a caller supplies a lzReceive option: {gasLimit: 100k, msg.value: 0.5 ether}\\n * - The resulting options will be {gasLimit: 300k, msg.value: 1.5 ether} when the message is executed on the remote lzReceive() function.\\n * @dev This presence of duplicated options is handled off-chain in the verifier/executor.\\n */\\n function combineOptions(\\n uint32 _eid,\\n uint16 _msgType,\\n bytes calldata _extraOptions\\n ) public view virtual returns (bytes memory) {\\n bytes memory enforced = enforcedOptions[_eid][_msgType];\\n\\n // No enforced options, pass whatever the caller supplied, even if it's empty or legacy type 1/2 options.\\n if (enforced.length == 0) return _extraOptions;\\n\\n // No caller options, return enforced\\n if (_extraOptions.length == 0) return enforced;\\n\\n // @dev If caller provided _extraOptions, must be type 3 as its the ONLY type that can be combined.\\n if (_extraOptions.length >= 2) {\\n _assertOptionsType3(_extraOptions);\\n // @dev Remove the first 2 bytes containing the type from the _extraOptions and combine with enforced.\\n return bytes.concat(enforced, _extraOptions[2:]);\\n }\\n\\n // No valid set of options was found.\\n revert InvalidOptions(_extraOptions);\\n }\\n\\n /**\\n * @dev Internal function to assert that options are of type 3.\\n * @param _options The options to be checked.\\n */\\n function _assertOptionsType3(bytes memory _options) internal pure virtual {\\n uint16 optionsType;\\n assembly {\\n optionsType := mload(add(_options, 2))\\n }\\n if (optionsType != OPTION_TYPE_3) revert InvalidOptions(_options);\\n }\\n}\\n\",\"keccak256\":\"0x5275636cd47e660a2fdf6c7fe9d41ff3cc866b785cc8a9d88c1b8ca983509f01\",\"license\":\"MIT\"},\"@openzeppelin/contracts/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {Context} from \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * The initial owner is set to the address provided by the deployer. This can\\n * later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n /**\\n * @dev The caller account is not authorized to perform an operation.\\n */\\n error OwnableUnauthorizedAccount(address account);\\n\\n /**\\n * @dev The owner is not a valid owner account. (eg. `address(0)`)\\n */\\n error OwnableInvalidOwner(address owner);\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the address provided by the deployer as the initial owner.\\n */\\n constructor(address initialOwner) {\\n if (initialOwner == address(0)) {\\n revert OwnableInvalidOwner(address(0));\\n }\\n _transferOwnership(initialOwner);\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n _checkOwner();\\n _;\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if the sender is not the owner.\\n */\\n function _checkOwner() internal view virtual {\\n if (owner() != _msgSender()) {\\n revert OwnableUnauthorizedAccount(_msgSender());\\n }\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby disabling any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n if (newOwner == address(0)) {\\n revert OwnableInvalidOwner(address(0));\\n }\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n}\\n\",\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n\\n function _contextSuffixLength() internal view virtual returns (uint256) {\\n return 0;\\n }\\n}\\n\",\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\"}},\"version\":1}", - "storageLayout": { - "storage": [ - { - "astId": 3837, - "contract": "@layerzerolabs/oapp-evm/contracts/oapp/libs/OAppOptionsType3.sol:OAppOptionsType3", - "label": "_owner", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 2006, - "contract": "@layerzerolabs/oapp-evm/contracts/oapp/libs/OAppOptionsType3.sol:OAppOptionsType3", - "label": "enforcedOptions", - "offset": 0, - "slot": "1", - "type": "t_mapping(t_uint32,t_mapping(t_uint16,t_bytes_storage))" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_bytes_storage": { - "encoding": "bytes", - "label": "bytes", - "numberOfBytes": "32" - }, - "t_mapping(t_uint16,t_bytes_storage)": { - "encoding": "mapping", - "key": "t_uint16", - "label": "mapping(uint16 => bytes)", - "numberOfBytes": "32", - "value": "t_bytes_storage" - }, - "t_mapping(t_uint32,t_mapping(t_uint16,t_bytes_storage))": { - "encoding": "mapping", - "key": "t_uint32", - "label": "mapping(uint32 => mapping(uint16 => bytes))", - "numberOfBytes": "32", - "value": "t_mapping(t_uint16,t_bytes_storage)" - }, - "t_uint16": { - "encoding": "inplace", - "label": "uint16", - "numberOfBytes": "2" - }, - "t_uint32": { - "encoding": "inplace", - "label": "uint32", - "numberOfBytes": "4" - } - } - }, - "userdoc": { - "kind": "user", - "methods": { - "combineOptions(uint32,uint16,bytes)": { - "notice": "Combines options for a given endpoint and message type." - } - }, - "version": 1 - } - } - }, - "@layerzerolabs/oapp-evm/contracts/precrime/OAppPreCrimeSimulator.sol": { - "OAppPreCrimeSimulator": { - "abi": [ - { "inputs": [], "name": "OnlySelf", "type": "error" }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "OwnableInvalidOwner", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "OwnableUnauthorizedAccount", - "type": "error" - }, - { - "inputs": [ - { "internalType": "bytes", "name": "result", "type": "bytes" } - ], - "name": "SimulationResult", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "preCrimeAddress", - "type": "address" - } - ], - "name": "PreCrimeSet", - "type": "event" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { - "internalType": "bytes32", - "name": "_peer", - "type": "bytes32" - } - ], - "name": "isPeer", - "outputs": [ - { "internalType": "bool", "name": "", "type": "bool" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - } - ], - "internalType": "struct Origin", - "name": "origin", - "type": "tuple" - }, - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "guid", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "address", - "name": "executor", - "type": "address" - }, - { - "internalType": "bytes", - "name": "message", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "extraData", - "type": "bytes" - } - ], - "internalType": "struct InboundPacket[]", - "name": "_packets", - "type": "tuple[]" - } - ], - "name": "lzReceiveAndRevert", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - } - ], - "internalType": "struct Origin", - "name": "_origin", - "type": "tuple" - }, - { - "internalType": "bytes32", - "name": "_guid", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "_message", - "type": "bytes" - }, - { - "internalType": "address", - "name": "_executor", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "lzReceiveSimulate", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "oApp", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "preCrime", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_preCrime", - "type": "address" - } - ], - "name": "setPreCrime", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "devdoc": { - "details": "Abstract contract serving as the base for preCrime simulation functionality in an OApp.", - "errors": { - "OwnableInvalidOwner(address)": [ - { - "details": "The owner is not a valid owner account. (eg. `address(0)`)" - } - ], - "OwnableUnauthorizedAccount(address)": [ - { - "details": "The caller account is not authorized to perform an operation." - } - ] - }, - "events": { - "PreCrimeSet(address)": { - "details": "Emitted when the preCrime contract address is set.", - "params": { - "preCrimeAddress": "The address of the preCrime contract." - } - } - }, - "kind": "dev", - "methods": { - "isPeer(uint32,bytes32)": { - "details": "checks if the specified peer is considered 'trusted' by the OApp.", - "params": { - "_eid": "The endpoint Id to check.", - "_peer": "The peer to check." - }, - "returns": { - "_0": "Whether the peer passed is considered 'trusted' by the OApp." - } - }, - "lzReceiveAndRevert(((uint32,bytes32,uint64),uint32,address,bytes32,uint256,address,bytes,bytes)[])": { - "details": "Interface for pre-crime simulations. Always reverts at the end with the simulation results.WARNING: MUST revert at the end with the simulation results.Gives the preCrime implementation the ability to mock sending packets to the lzReceive function, WITHOUT actually executing them.", - "params": { - "_packets": "An array of InboundPacket objects representing received packets to be delivered." - } - }, - "lzReceiveSimulate((uint32,bytes32,uint64),bytes32,bytes,address,bytes)": { - "details": "Is effectively an internal function because msg.sender must be address(this). Allows resetting the call stack for 'internal' calls.", - "params": { - "_executor": "The executor address for the packet.", - "_extraData": "Additional data for the packet.", - "_guid": "The unique identifier of the packet.", - "_message": "The message payload of the packet.", - "_origin": "The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message." - } - }, - "oApp()": { - "details": "Retrieves the address of the OApp contract.The simulator contract is the base contract for the OApp by default.If the simulator is a separate contract, override this function.", - "returns": { "_0": "The address of the OApp contract." } - }, - "owner()": { - "details": "Returns the address of the current owner." - }, - "renounceOwnership()": { - "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner." - }, - "setPreCrime(address)": { - "details": "Sets the preCrime contract address.", - "params": { - "_preCrime": "The address of the preCrime contract." - } - }, - "transferOwnership(address)": { - "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." - } - }, - "stateVariables": { - "preCrime": { - "details": "Retrieves the address of the preCrime contract implementation.", - "return": "The address of the preCrime contract.", - "returns": { "_0": "The address of the preCrime contract." } - } - }, - "title": "OAppPreCrimeSimulator", - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": { - "isPeer(uint32,bytes32)": "5a0dfe4d", - "lzReceiveAndRevert(((uint32,bytes32,uint64),uint32,address,bytes32,uint256,address,bytes,bytes)[])": "bd815db0", - "lzReceiveSimulate((uint32,bytes32,uint64),bytes32,bytes,address,bytes)": "d045a0dc", - "oApp()": "52ae2879", - "owner()": "8da5cb5b", - "preCrime()": "b731ea0a", - "renounceOwnership()": "715018a6", - "setPreCrime(address)": "d4243885", - "transferOwnership(address)": "f2fde38b" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"OnlySelf\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"name\":\"SimulationResult\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"preCrimeAddress\",\"type\":\"address\"}],\"name\":\"PreCrimeSet\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_peer\",\"type\":\"bytes32\"}],\"name\":\"isPeer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"origin\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"executor\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"internalType\":\"struct InboundPacket[]\",\"name\":\"_packets\",\"type\":\"tuple[]\"}],\"name\":\"lzReceiveAndRevert\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"_origin\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"_guid\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"_executor\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"lzReceiveSimulate\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"oApp\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"preCrime\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_preCrime\",\"type\":\"address\"}],\"name\":\"setPreCrime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Abstract contract serving as the base for preCrime simulation functionality in an OApp.\",\"errors\":{\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}]},\"events\":{\"PreCrimeSet(address)\":{\"details\":\"Emitted when the preCrime contract address is set.\",\"params\":{\"preCrimeAddress\":\"The address of the preCrime contract.\"}}},\"kind\":\"dev\",\"methods\":{\"isPeer(uint32,bytes32)\":{\"details\":\"checks if the specified peer is considered 'trusted' by the OApp.\",\"params\":{\"_eid\":\"The endpoint Id to check.\",\"_peer\":\"The peer to check.\"},\"returns\":{\"_0\":\"Whether the peer passed is considered 'trusted' by the OApp.\"}},\"lzReceiveAndRevert(((uint32,bytes32,uint64),uint32,address,bytes32,uint256,address,bytes,bytes)[])\":{\"details\":\"Interface for pre-crime simulations. Always reverts at the end with the simulation results.WARNING: MUST revert at the end with the simulation results.Gives the preCrime implementation the ability to mock sending packets to the lzReceive function, WITHOUT actually executing them.\",\"params\":{\"_packets\":\"An array of InboundPacket objects representing received packets to be delivered.\"}},\"lzReceiveSimulate((uint32,bytes32,uint64),bytes32,bytes,address,bytes)\":{\"details\":\"Is effectively an internal function because msg.sender must be address(this). Allows resetting the call stack for 'internal' calls.\",\"params\":{\"_executor\":\"The executor address for the packet.\",\"_extraData\":\"Additional data for the packet.\",\"_guid\":\"The unique identifier of the packet.\",\"_message\":\"The message payload of the packet.\",\"_origin\":\"The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message.\"}},\"oApp()\":{\"details\":\"Retrieves the address of the OApp contract.The simulator contract is the base contract for the OApp by default.If the simulator is a separate contract, override this function.\",\"returns\":{\"_0\":\"The address of the OApp contract.\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"setPreCrime(address)\":{\"details\":\"Sets the preCrime contract address.\",\"params\":{\"_preCrime\":\"The address of the preCrime contract.\"}},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"stateVariables\":{\"preCrime\":{\"details\":\"Retrieves the address of the preCrime contract implementation.\",\"return\":\"The address of the preCrime contract.\",\"returns\":{\"_0\":\"The address of the preCrime contract.\"}}},\"title\":\"OAppPreCrimeSimulator\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@layerzerolabs/oapp-evm/contracts/precrime/OAppPreCrimeSimulator.sol\":\"OAppPreCrimeSimulator\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\nimport { IMessageLibManager } from \\\"./IMessageLibManager.sol\\\";\\nimport { IMessagingComposer } from \\\"./IMessagingComposer.sol\\\";\\nimport { IMessagingChannel } from \\\"./IMessagingChannel.sol\\\";\\nimport { IMessagingContext } from \\\"./IMessagingContext.sol\\\";\\n\\nstruct MessagingParams {\\n uint32 dstEid;\\n bytes32 receiver;\\n bytes message;\\n bytes options;\\n bool payInLzToken;\\n}\\n\\nstruct MessagingReceipt {\\n bytes32 guid;\\n uint64 nonce;\\n MessagingFee fee;\\n}\\n\\nstruct MessagingFee {\\n uint256 nativeFee;\\n uint256 lzTokenFee;\\n}\\n\\nstruct Origin {\\n uint32 srcEid;\\n bytes32 sender;\\n uint64 nonce;\\n}\\n\\ninterface ILayerZeroEndpointV2 is IMessageLibManager, IMessagingComposer, IMessagingChannel, IMessagingContext {\\n event PacketSent(bytes encodedPayload, bytes options, address sendLibrary);\\n\\n event PacketVerified(Origin origin, address receiver, bytes32 payloadHash);\\n\\n event PacketDelivered(Origin origin, address receiver);\\n\\n event LzReceiveAlert(\\n address indexed receiver,\\n address indexed executor,\\n Origin origin,\\n bytes32 guid,\\n uint256 gas,\\n uint256 value,\\n bytes message,\\n bytes extraData,\\n bytes reason\\n );\\n\\n event LzTokenSet(address token);\\n\\n event DelegateSet(address sender, address delegate);\\n\\n function quote(MessagingParams calldata _params, address _sender) external view returns (MessagingFee memory);\\n\\n function send(\\n MessagingParams calldata _params,\\n address _refundAddress\\n ) external payable returns (MessagingReceipt memory);\\n\\n function verify(Origin calldata _origin, address _receiver, bytes32 _payloadHash) external;\\n\\n function verifiable(Origin calldata _origin, address _receiver) external view returns (bool);\\n\\n function initializable(Origin calldata _origin, address _receiver) external view returns (bool);\\n\\n function lzReceive(\\n Origin calldata _origin,\\n address _receiver,\\n bytes32 _guid,\\n bytes calldata _message,\\n bytes calldata _extraData\\n ) external payable;\\n\\n // oapp can burn messages partially by calling this function with its own business logic if messages are verified in order\\n function clear(address _oapp, Origin calldata _origin, bytes32 _guid, bytes calldata _message) external;\\n\\n function setLzToken(address _lzToken) external;\\n\\n function lzToken() external view returns (address);\\n\\n function nativeToken() external view returns (address);\\n\\n function setDelegate(address _delegate) external;\\n}\\n\",\"keccak256\":\"0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\nimport { IERC165 } from \\\"@openzeppelin/contracts/utils/introspection/IERC165.sol\\\";\\n\\nimport { SetConfigParam } from \\\"./IMessageLibManager.sol\\\";\\n\\nenum MessageLibType {\\n Send,\\n Receive,\\n SendAndReceive\\n}\\n\\ninterface IMessageLib is IERC165 {\\n function setConfig(address _oapp, SetConfigParam[] calldata _config) external;\\n\\n function getConfig(uint32 _eid, address _oapp, uint32 _configType) external view returns (bytes memory config);\\n\\n function isSupportedEid(uint32 _eid) external view returns (bool);\\n\\n // message libs of same major version are compatible\\n function version() external view returns (uint64 major, uint8 minor, uint8 endpointVersion);\\n\\n function messageLibType() external view returns (MessageLibType);\\n}\\n\",\"keccak256\":\"0x5cf5f24751b4e3ea1c9c5ded07cedfdfd62566b6daaffcc0144733859c9dba0c\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\nstruct SetConfigParam {\\n uint32 eid;\\n uint32 configType;\\n bytes config;\\n}\\n\\ninterface IMessageLibManager {\\n struct Timeout {\\n address lib;\\n uint256 expiry;\\n }\\n\\n event LibraryRegistered(address newLib);\\n event DefaultSendLibrarySet(uint32 eid, address newLib);\\n event DefaultReceiveLibrarySet(uint32 eid, address newLib);\\n event DefaultReceiveLibraryTimeoutSet(uint32 eid, address oldLib, uint256 expiry);\\n event SendLibrarySet(address sender, uint32 eid, address newLib);\\n event ReceiveLibrarySet(address receiver, uint32 eid, address newLib);\\n event ReceiveLibraryTimeoutSet(address receiver, uint32 eid, address oldLib, uint256 timeout);\\n\\n function registerLibrary(address _lib) external;\\n\\n function isRegisteredLibrary(address _lib) external view returns (bool);\\n\\n function getRegisteredLibraries() external view returns (address[] memory);\\n\\n function setDefaultSendLibrary(uint32 _eid, address _newLib) external;\\n\\n function defaultSendLibrary(uint32 _eid) external view returns (address);\\n\\n function setDefaultReceiveLibrary(uint32 _eid, address _newLib, uint256 _gracePeriod) external;\\n\\n function defaultReceiveLibrary(uint32 _eid) external view returns (address);\\n\\n function setDefaultReceiveLibraryTimeout(uint32 _eid, address _lib, uint256 _expiry) external;\\n\\n function defaultReceiveLibraryTimeout(uint32 _eid) external view returns (address lib, uint256 expiry);\\n\\n function isSupportedEid(uint32 _eid) external view returns (bool);\\n\\n function isValidReceiveLibrary(address _receiver, uint32 _eid, address _lib) external view returns (bool);\\n\\n /// ------------------- OApp interfaces -------------------\\n function setSendLibrary(address _oapp, uint32 _eid, address _newLib) external;\\n\\n function getSendLibrary(address _sender, uint32 _eid) external view returns (address lib);\\n\\n function isDefaultSendLibrary(address _sender, uint32 _eid) external view returns (bool);\\n\\n function setReceiveLibrary(address _oapp, uint32 _eid, address _newLib, uint256 _gracePeriod) external;\\n\\n function getReceiveLibrary(address _receiver, uint32 _eid) external view returns (address lib, bool isDefault);\\n\\n function setReceiveLibraryTimeout(address _oapp, uint32 _eid, address _lib, uint256 _expiry) external;\\n\\n function receiveLibraryTimeout(address _receiver, uint32 _eid) external view returns (address lib, uint256 expiry);\\n\\n function setConfig(address _oapp, address _lib, SetConfigParam[] calldata _params) external;\\n\\n function getConfig(\\n address _oapp,\\n address _lib,\\n uint32 _eid,\\n uint32 _configType\\n ) external view returns (bytes memory config);\\n}\\n\",\"keccak256\":\"0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\ninterface IMessagingChannel {\\n event InboundNonceSkipped(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce);\\n event PacketNilified(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce, bytes32 payloadHash);\\n event PacketBurnt(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce, bytes32 payloadHash);\\n\\n function eid() external view returns (uint32);\\n\\n // this is an emergency function if a message cannot be verified for some reasons\\n // required to provide _nextNonce to avoid race condition\\n function skip(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce) external;\\n\\n function nilify(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce, bytes32 _payloadHash) external;\\n\\n function burn(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce, bytes32 _payloadHash) external;\\n\\n function nextGuid(address _sender, uint32 _dstEid, bytes32 _receiver) external view returns (bytes32);\\n\\n function inboundNonce(address _receiver, uint32 _srcEid, bytes32 _sender) external view returns (uint64);\\n\\n function outboundNonce(address _sender, uint32 _dstEid, bytes32 _receiver) external view returns (uint64);\\n\\n function inboundPayloadHash(\\n address _receiver,\\n uint32 _srcEid,\\n bytes32 _sender,\\n uint64 _nonce\\n ) external view returns (bytes32);\\n\\n function lazyInboundNonce(address _receiver, uint32 _srcEid, bytes32 _sender) external view returns (uint64);\\n}\\n\",\"keccak256\":\"0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\ninterface IMessagingComposer {\\n event ComposeSent(address from, address to, bytes32 guid, uint16 index, bytes message);\\n event ComposeDelivered(address from, address to, bytes32 guid, uint16 index);\\n event LzComposeAlert(\\n address indexed from,\\n address indexed to,\\n address indexed executor,\\n bytes32 guid,\\n uint16 index,\\n uint256 gas,\\n uint256 value,\\n bytes message,\\n bytes extraData,\\n bytes reason\\n );\\n\\n function composeQueue(\\n address _from,\\n address _to,\\n bytes32 _guid,\\n uint16 _index\\n ) external view returns (bytes32 messageHash);\\n\\n function sendCompose(address _to, bytes32 _guid, uint16 _index, bytes calldata _message) external;\\n\\n function lzCompose(\\n address _from,\\n address _to,\\n bytes32 _guid,\\n uint16 _index,\\n bytes calldata _message,\\n bytes calldata _extraData\\n ) external payable;\\n}\\n\",\"keccak256\":\"0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\ninterface IMessagingContext {\\n function isSendingMessage() external view returns (bool);\\n\\n function getSendContext() external view returns (uint32 dstEid, address sender);\\n}\\n\",\"keccak256\":\"0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\nimport { MessagingFee } from \\\"./ILayerZeroEndpointV2.sol\\\";\\nimport { IMessageLib } from \\\"./IMessageLib.sol\\\";\\n\\nstruct Packet {\\n uint64 nonce;\\n uint32 srcEid;\\n address sender;\\n uint32 dstEid;\\n bytes32 receiver;\\n bytes32 guid;\\n bytes message;\\n}\\n\\ninterface ISendLib is IMessageLib {\\n function send(\\n Packet calldata _packet,\\n bytes calldata _options,\\n bool _payInLzToken\\n ) external returns (MessagingFee memory, bytes memory encodedPacket);\\n\\n function quote(\\n Packet calldata _packet,\\n bytes calldata _options,\\n bool _payInLzToken\\n ) external view returns (MessagingFee memory);\\n\\n function setTreasury(address _treasury) external;\\n\\n function withdrawFee(address _to, uint256 _amount) external;\\n\\n function withdrawLzTokenFee(address _lzToken, address _to, uint256 _amount) external;\\n}\\n\",\"keccak256\":\"0xf1c07bc61e7b1dce195ed12d50f87980fbf2d63cac1326fd28287f55fe0ba625\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol\":{\"content\":\"// SPDX-License-Identifier: LZBL-1.2\\n\\npragma solidity ^0.8.20;\\n\\nlibrary AddressCast {\\n error AddressCast_InvalidSizeForAddress();\\n error AddressCast_InvalidAddress();\\n\\n function toBytes32(bytes calldata _addressBytes) internal pure returns (bytes32 result) {\\n if (_addressBytes.length > 32) revert AddressCast_InvalidAddress();\\n result = bytes32(_addressBytes);\\n unchecked {\\n uint256 offset = 32 - _addressBytes.length;\\n result = result >> (offset * 8);\\n }\\n }\\n\\n function toBytes32(address _address) internal pure returns (bytes32 result) {\\n result = bytes32(uint256(uint160(_address)));\\n }\\n\\n function toBytes(bytes32 _addressBytes32, uint256 _size) internal pure returns (bytes memory result) {\\n if (_size == 0 || _size > 32) revert AddressCast_InvalidSizeForAddress();\\n result = new bytes(_size);\\n unchecked {\\n uint256 offset = 256 - _size * 8;\\n assembly {\\n mstore(add(result, 32), shl(offset, _addressBytes32))\\n }\\n }\\n }\\n\\n function toAddress(bytes32 _addressBytes32) internal pure returns (address result) {\\n result = address(uint160(uint256(_addressBytes32)));\\n }\\n\\n function toAddress(bytes calldata _addressBytes) internal pure returns (address result) {\\n if (_addressBytes.length != 20) revert AddressCast_InvalidAddress();\\n result = address(bytes20(_addressBytes));\\n }\\n}\\n\",\"keccak256\":\"0x2ebbcaaab3554edcd41b581f1a72ac1806afbfb8047d0d47ff098f9af30d6deb\",\"license\":\"LZBL-1.2\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol\":{\"content\":\"// SPDX-License-Identifier: LZBL-1.2\\n\\npragma solidity ^0.8.20;\\n\\nimport { Packet } from \\\"../../interfaces/ISendLib.sol\\\";\\nimport { AddressCast } from \\\"../../libs/AddressCast.sol\\\";\\n\\nlibrary PacketV1Codec {\\n using AddressCast for address;\\n using AddressCast for bytes32;\\n\\n uint8 internal constant PACKET_VERSION = 1;\\n\\n // header (version + nonce + path)\\n // version\\n uint256 private constant PACKET_VERSION_OFFSET = 0;\\n // nonce\\n uint256 private constant NONCE_OFFSET = 1;\\n // path\\n uint256 private constant SRC_EID_OFFSET = 9;\\n uint256 private constant SENDER_OFFSET = 13;\\n uint256 private constant DST_EID_OFFSET = 45;\\n uint256 private constant RECEIVER_OFFSET = 49;\\n // payload (guid + message)\\n uint256 private constant GUID_OFFSET = 81; // keccak256(nonce + path)\\n uint256 private constant MESSAGE_OFFSET = 113;\\n\\n function encode(Packet memory _packet) internal pure returns (bytes memory encodedPacket) {\\n encodedPacket = abi.encodePacked(\\n PACKET_VERSION,\\n _packet.nonce,\\n _packet.srcEid,\\n _packet.sender.toBytes32(),\\n _packet.dstEid,\\n _packet.receiver,\\n _packet.guid,\\n _packet.message\\n );\\n }\\n\\n function encodePacketHeader(Packet memory _packet) internal pure returns (bytes memory) {\\n return\\n abi.encodePacked(\\n PACKET_VERSION,\\n _packet.nonce,\\n _packet.srcEid,\\n _packet.sender.toBytes32(),\\n _packet.dstEid,\\n _packet.receiver\\n );\\n }\\n\\n function encodePayload(Packet memory _packet) internal pure returns (bytes memory) {\\n return abi.encodePacked(_packet.guid, _packet.message);\\n }\\n\\n function header(bytes calldata _packet) internal pure returns (bytes calldata) {\\n return _packet[0:GUID_OFFSET];\\n }\\n\\n function version(bytes calldata _packet) internal pure returns (uint8) {\\n return uint8(bytes1(_packet[PACKET_VERSION_OFFSET:NONCE_OFFSET]));\\n }\\n\\n function nonce(bytes calldata _packet) internal pure returns (uint64) {\\n return uint64(bytes8(_packet[NONCE_OFFSET:SRC_EID_OFFSET]));\\n }\\n\\n function srcEid(bytes calldata _packet) internal pure returns (uint32) {\\n return uint32(bytes4(_packet[SRC_EID_OFFSET:SENDER_OFFSET]));\\n }\\n\\n function sender(bytes calldata _packet) internal pure returns (bytes32) {\\n return bytes32(_packet[SENDER_OFFSET:DST_EID_OFFSET]);\\n }\\n\\n function senderAddressB20(bytes calldata _packet) internal pure returns (address) {\\n return sender(_packet).toAddress();\\n }\\n\\n function dstEid(bytes calldata _packet) internal pure returns (uint32) {\\n return uint32(bytes4(_packet[DST_EID_OFFSET:RECEIVER_OFFSET]));\\n }\\n\\n function receiver(bytes calldata _packet) internal pure returns (bytes32) {\\n return bytes32(_packet[RECEIVER_OFFSET:GUID_OFFSET]);\\n }\\n\\n function receiverB20(bytes calldata _packet) internal pure returns (address) {\\n return receiver(_packet).toAddress();\\n }\\n\\n function guid(bytes calldata _packet) internal pure returns (bytes32) {\\n return bytes32(_packet[GUID_OFFSET:MESSAGE_OFFSET]);\\n }\\n\\n function message(bytes calldata _packet) internal pure returns (bytes calldata) {\\n return bytes(_packet[MESSAGE_OFFSET:]);\\n }\\n\\n function payload(bytes calldata _packet) internal pure returns (bytes calldata) {\\n return bytes(_packet[GUID_OFFSET:]);\\n }\\n\\n function payloadHash(bytes calldata _packet) internal pure returns (bytes32) {\\n return keccak256(payload(_packet));\\n }\\n}\\n\",\"keccak256\":\"0xc84cf1bf785977fe1fbe7566eef902c2db68d0e163813ebe6c34921754802680\",\"license\":\"LZBL-1.2\"},\"@layerzerolabs/oapp-evm/contracts/precrime/OAppPreCrimeSimulator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\nimport { IPreCrime } from \\\"./interfaces/IPreCrime.sol\\\";\\nimport { IOAppPreCrimeSimulator, InboundPacket, Origin } from \\\"./interfaces/IOAppPreCrimeSimulator.sol\\\";\\n\\n/**\\n * @title OAppPreCrimeSimulator\\n * @dev Abstract contract serving as the base for preCrime simulation functionality in an OApp.\\n */\\nabstract contract OAppPreCrimeSimulator is IOAppPreCrimeSimulator, Ownable {\\n // The address of the preCrime implementation.\\n address public preCrime;\\n\\n /**\\n * @dev Retrieves the address of the OApp contract.\\n * @return The address of the OApp contract.\\n *\\n * @dev The simulator contract is the base contract for the OApp by default.\\n * @dev If the simulator is a separate contract, override this function.\\n */\\n function oApp() external view virtual returns (address) {\\n return address(this);\\n }\\n\\n /**\\n * @dev Sets the preCrime contract address.\\n * @param _preCrime The address of the preCrime contract.\\n */\\n function setPreCrime(address _preCrime) public virtual onlyOwner {\\n preCrime = _preCrime;\\n emit PreCrimeSet(_preCrime);\\n }\\n\\n /**\\n * @dev Interface for pre-crime simulations. Always reverts at the end with the simulation results.\\n * @param _packets An array of InboundPacket objects representing received packets to be delivered.\\n *\\n * @dev WARNING: MUST revert at the end with the simulation results.\\n * @dev Gives the preCrime implementation the ability to mock sending packets to the lzReceive function,\\n * WITHOUT actually executing them.\\n */\\n function lzReceiveAndRevert(InboundPacket[] calldata _packets) public payable virtual {\\n for (uint256 i = 0; i < _packets.length; i++) {\\n InboundPacket calldata packet = _packets[i];\\n\\n // Ignore packets that are not from trusted peers.\\n if (!isPeer(packet.origin.srcEid, packet.origin.sender)) continue;\\n\\n // @dev Because a verifier is calling this function, it doesnt have access to executor params:\\n // - address _executor\\n // - bytes calldata _extraData\\n // preCrime will NOT work for OApps that rely on these two parameters inside of their _lzReceive().\\n // They are instead stubbed to default values, address(0) and bytes(\\\"\\\")\\n // @dev Calling this.lzReceiveSimulate removes ability for assembly return 0 callstack exit,\\n // which would cause the revert to be ignored.\\n this.lzReceiveSimulate{ value: packet.value }(\\n packet.origin,\\n packet.guid,\\n packet.message,\\n packet.executor,\\n packet.extraData\\n );\\n }\\n\\n // @dev Revert with the simulation results. msg.sender must implement IPreCrime.buildSimulationResult().\\n revert SimulationResult(IPreCrime(msg.sender).buildSimulationResult());\\n }\\n\\n /**\\n * @dev Is effectively an internal function because msg.sender must be address(this).\\n * Allows resetting the call stack for 'internal' calls.\\n * @param _origin The origin information containing the source endpoint and sender address.\\n * - srcEid: The source chain endpoint ID.\\n * - sender: The sender address on the src chain.\\n * - nonce: The nonce of the message.\\n * @param _guid The unique identifier of the packet.\\n * @param _message The message payload of the packet.\\n * @param _executor The executor address for the packet.\\n * @param _extraData Additional data for the packet.\\n */\\n function lzReceiveSimulate(\\n Origin calldata _origin,\\n bytes32 _guid,\\n bytes calldata _message,\\n address _executor,\\n bytes calldata _extraData\\n ) external payable virtual {\\n // @dev Ensure ONLY can be called 'internally'.\\n if (msg.sender != address(this)) revert OnlySelf();\\n _lzReceiveSimulate(_origin, _guid, _message, _executor, _extraData);\\n }\\n\\n /**\\n * @dev Internal function to handle the OAppPreCrimeSimulator simulated receive.\\n * @param _origin The origin information.\\n * - srcEid: The source chain endpoint ID.\\n * - sender: The sender address from the src chain.\\n * - nonce: The nonce of the LayerZero message.\\n * @param _guid The GUID of the LayerZero message.\\n * @param _message The LayerZero message.\\n * @param _executor The address of the off-chain executor.\\n * @param _extraData Arbitrary data passed by the msg executor.\\n *\\n * @dev Enables the preCrime simulator to mock sending lzReceive() messages,\\n * routes the msg down from the OAppPreCrimeSimulator, and back up to the OAppReceiver.\\n */\\n function _lzReceiveSimulate(\\n Origin calldata _origin,\\n bytes32 _guid,\\n bytes calldata _message,\\n address _executor,\\n bytes calldata _extraData\\n ) internal virtual;\\n\\n /**\\n * @dev checks if the specified peer is considered 'trusted' by the OApp.\\n * @param _eid The endpoint Id to check.\\n * @param _peer The peer to check.\\n * @return Whether the peer passed is considered 'trusted' by the OApp.\\n */\\n function isPeer(uint32 _eid, bytes32 _peer) public view virtual returns (bool);\\n}\\n\",\"keccak256\":\"0x205a0abfd8b3c9af2740769f251381b84999b8e9347f3cd50de3ef8290a17750\",\"license\":\"MIT\"},\"@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IOAppPreCrimeSimulator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\n// @dev Import the Origin so it's exposed to OAppPreCrimeSimulator implementers.\\n// solhint-disable-next-line no-unused-import\\nimport { InboundPacket, Origin } from \\\"../libs/Packet.sol\\\";\\n\\n/**\\n * @title IOAppPreCrimeSimulator Interface\\n * @dev Interface for the preCrime simulation functionality in an OApp.\\n */\\ninterface IOAppPreCrimeSimulator {\\n // @dev simulation result used in PreCrime implementation\\n error SimulationResult(bytes result);\\n error OnlySelf();\\n\\n /**\\n * @dev Emitted when the preCrime contract address is set.\\n * @param preCrimeAddress The address of the preCrime contract.\\n */\\n event PreCrimeSet(address preCrimeAddress);\\n\\n /**\\n * @dev Retrieves the address of the preCrime contract implementation.\\n * @return The address of the preCrime contract.\\n */\\n function preCrime() external view returns (address);\\n\\n /**\\n * @dev Retrieves the address of the OApp contract.\\n * @return The address of the OApp contract.\\n */\\n function oApp() external view returns (address);\\n\\n /**\\n * @dev Sets the preCrime contract address.\\n * @param _preCrime The address of the preCrime contract.\\n */\\n function setPreCrime(address _preCrime) external;\\n\\n /**\\n * @dev Mocks receiving a packet, then reverts with a series of data to infer the state/result.\\n * @param _packets An array of LayerZero InboundPacket objects representing received packets.\\n */\\n function lzReceiveAndRevert(InboundPacket[] calldata _packets) external payable;\\n\\n /**\\n * @dev checks if the specified peer is considered 'trusted' by the OApp.\\n * @param _eid The endpoint Id to check.\\n * @param _peer The peer to check.\\n * @return Whether the peer passed is considered 'trusted' by the OApp.\\n */\\n function isPeer(uint32 _eid, bytes32 _peer) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x5d24db150949ea8e6437178e65a942e8c8b7f332e5daf32750f56b23b35b5bb2\",\"license\":\"MIT\"},\"@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IPreCrime.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\nstruct PreCrimePeer {\\n uint32 eid;\\n bytes32 preCrime;\\n bytes32 oApp;\\n}\\n\\n// TODO not done yet\\ninterface IPreCrime {\\n error OnlyOffChain();\\n\\n // for simulate()\\n error PacketOversize(uint256 max, uint256 actual);\\n error PacketUnsorted();\\n error SimulationFailed(bytes reason);\\n\\n // for preCrime()\\n error SimulationResultNotFound(uint32 eid);\\n error InvalidSimulationResult(uint32 eid, bytes reason);\\n error CrimeFound(bytes crime);\\n\\n function getConfig(bytes[] calldata _packets, uint256[] calldata _packetMsgValues) external returns (bytes memory);\\n\\n function simulate(\\n bytes[] calldata _packets,\\n uint256[] calldata _packetMsgValues\\n ) external payable returns (bytes memory);\\n\\n function buildSimulationResult() external view returns (bytes memory);\\n\\n function preCrime(\\n bytes[] calldata _packets,\\n uint256[] calldata _packetMsgValues,\\n bytes[] calldata _simulations\\n ) external;\\n\\n function version() external view returns (uint64 major, uint8 minor);\\n}\\n\",\"keccak256\":\"0xc8d869f27ef8ceb2e13fdf6a70682fd4dee3f90c4924eb8e125bc1e66cb6af84\",\"license\":\"MIT\"},\"@layerzerolabs/oapp-evm/contracts/precrime/libs/Packet.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\nimport { Origin } from \\\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\\\";\\nimport { PacketV1Codec } from \\\"@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol\\\";\\n\\n/**\\n * @title InboundPacket\\n * @dev Structure representing an inbound packet received by the contract.\\n */\\nstruct InboundPacket {\\n Origin origin; // Origin information of the packet.\\n uint32 dstEid; // Destination endpointId of the packet.\\n address receiver; // Receiver address for the packet.\\n bytes32 guid; // Unique identifier of the packet.\\n uint256 value; // msg.value of the packet.\\n address executor; // Executor address for the packet.\\n bytes message; // Message payload of the packet.\\n bytes extraData; // Additional arbitrary data for the packet.\\n}\\n\\n/**\\n * @title PacketDecoder\\n * @dev Library for decoding LayerZero packets.\\n */\\nlibrary PacketDecoder {\\n using PacketV1Codec for bytes;\\n\\n /**\\n * @dev Decode an inbound packet from the given packet data.\\n * @param _packet The packet data to decode.\\n * @return packet An InboundPacket struct representing the decoded packet.\\n */\\n function decode(bytes calldata _packet) internal pure returns (InboundPacket memory packet) {\\n packet.origin = Origin(_packet.srcEid(), _packet.sender(), _packet.nonce());\\n packet.dstEid = _packet.dstEid();\\n packet.receiver = _packet.receiverB20();\\n packet.guid = _packet.guid();\\n packet.message = _packet.message();\\n }\\n\\n /**\\n * @dev Decode multiple inbound packets from the given packet data and associated message values.\\n * @param _packets An array of packet data to decode.\\n * @param _packetMsgValues An array of associated message values for each packet.\\n * @return packets An array of InboundPacket structs representing the decoded packets.\\n */\\n function decode(\\n bytes[] calldata _packets,\\n uint256[] memory _packetMsgValues\\n ) internal pure returns (InboundPacket[] memory packets) {\\n packets = new InboundPacket[](_packets.length);\\n for (uint256 i = 0; i < _packets.length; i++) {\\n bytes calldata packet = _packets[i];\\n packets[i] = PacketDecoder.decode(packet);\\n // @dev Allows the verifier to specify the msg.value that gets passed in lzReceive.\\n packets[i].value = _packetMsgValues[i];\\n }\\n }\\n}\\n\",\"keccak256\":\"0xcb2fb1c5b2eb3731de78b479b9c2ab3bba326fe0b0b3a008590f18e881e457a6\",\"license\":\"MIT\"},\"@openzeppelin/contracts/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {Context} from \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * The initial owner is set to the address provided by the deployer. This can\\n * later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n /**\\n * @dev The caller account is not authorized to perform an operation.\\n */\\n error OwnableUnauthorizedAccount(address account);\\n\\n /**\\n * @dev The owner is not a valid owner account. (eg. `address(0)`)\\n */\\n error OwnableInvalidOwner(address owner);\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the address provided by the deployer as the initial owner.\\n */\\n constructor(address initialOwner) {\\n if (initialOwner == address(0)) {\\n revert OwnableInvalidOwner(address(0));\\n }\\n _transferOwnership(initialOwner);\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n _checkOwner();\\n _;\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if the sender is not the owner.\\n */\\n function _checkOwner() internal view virtual {\\n if (owner() != _msgSender()) {\\n revert OwnableUnauthorizedAccount(_msgSender());\\n }\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby disabling any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n if (newOwner == address(0)) {\\n revert OwnableInvalidOwner(address(0));\\n }\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n}\\n\",\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n\\n function _contextSuffixLength() internal view virtual returns (uint256) {\\n return 0;\\n }\\n}\\n\",\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/introspection/IERC165.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Interface of the ERC-165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[ERC].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\"}},\"version\":1}", - "storageLayout": { - "storage": [ - { - "astId": 3837, - "contract": "@layerzerolabs/oapp-evm/contracts/precrime/OAppPreCrimeSimulator.sol:OAppPreCrimeSimulator", - "label": "_owner", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 2166, - "contract": "@layerzerolabs/oapp-evm/contracts/precrime/OAppPreCrimeSimulator.sol:OAppPreCrimeSimulator", - "label": "preCrime", - "offset": 0, - "slot": "1", - "type": "t_address" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - } - } - }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - } - }, - "@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IOAppPreCrimeSimulator.sol": { - "IOAppPreCrimeSimulator": { - "abi": [ - { "inputs": [], "name": "OnlySelf", "type": "error" }, - { - "inputs": [ - { "internalType": "bytes", "name": "result", "type": "bytes" } - ], - "name": "SimulationResult", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "preCrimeAddress", - "type": "address" - } - ], - "name": "PreCrimeSet", - "type": "event" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { - "internalType": "bytes32", - "name": "_peer", - "type": "bytes32" - } - ], - "name": "isPeer", - "outputs": [ - { "internalType": "bool", "name": "", "type": "bool" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - } - ], - "internalType": "struct Origin", - "name": "origin", - "type": "tuple" - }, - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "guid", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "address", - "name": "executor", - "type": "address" - }, - { - "internalType": "bytes", - "name": "message", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "extraData", - "type": "bytes" - } - ], - "internalType": "struct InboundPacket[]", - "name": "_packets", - "type": "tuple[]" - } - ], - "name": "lzReceiveAndRevert", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "oApp", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "preCrime", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_preCrime", - "type": "address" - } - ], - "name": "setPreCrime", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "devdoc": { - "details": "Interface for the preCrime simulation functionality in an OApp.", - "events": { - "PreCrimeSet(address)": { - "details": "Emitted when the preCrime contract address is set.", - "params": { - "preCrimeAddress": "The address of the preCrime contract." - } - } - }, - "kind": "dev", - "methods": { - "isPeer(uint32,bytes32)": { - "details": "checks if the specified peer is considered 'trusted' by the OApp.", - "params": { - "_eid": "The endpoint Id to check.", - "_peer": "The peer to check." - }, - "returns": { - "_0": "Whether the peer passed is considered 'trusted' by the OApp." - } - }, - "lzReceiveAndRevert(((uint32,bytes32,uint64),uint32,address,bytes32,uint256,address,bytes,bytes)[])": { - "details": "Mocks receiving a packet, then reverts with a series of data to infer the state/result.", - "params": { - "_packets": "An array of LayerZero InboundPacket objects representing received packets." - } - }, - "oApp()": { - "details": "Retrieves the address of the OApp contract.", - "returns": { "_0": "The address of the OApp contract." } - }, - "preCrime()": { - "details": "Retrieves the address of the preCrime contract implementation.", - "returns": { "_0": "The address of the preCrime contract." } - }, - "setPreCrime(address)": { - "details": "Sets the preCrime contract address.", - "params": { - "_preCrime": "The address of the preCrime contract." - } - } - }, - "title": "IOAppPreCrimeSimulator Interface", - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": { - "isPeer(uint32,bytes32)": "5a0dfe4d", - "lzReceiveAndRevert(((uint32,bytes32,uint64),uint32,address,bytes32,uint256,address,bytes,bytes)[])": "bd815db0", - "oApp()": "52ae2879", - "preCrime()": "b731ea0a", - "setPreCrime(address)": "d4243885" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"OnlySelf\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"name\":\"SimulationResult\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"preCrimeAddress\",\"type\":\"address\"}],\"name\":\"PreCrimeSet\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_peer\",\"type\":\"bytes32\"}],\"name\":\"isPeer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"origin\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"executor\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"internalType\":\"struct InboundPacket[]\",\"name\":\"_packets\",\"type\":\"tuple[]\"}],\"name\":\"lzReceiveAndRevert\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"oApp\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"preCrime\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_preCrime\",\"type\":\"address\"}],\"name\":\"setPreCrime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface for the preCrime simulation functionality in an OApp.\",\"events\":{\"PreCrimeSet(address)\":{\"details\":\"Emitted when the preCrime contract address is set.\",\"params\":{\"preCrimeAddress\":\"The address of the preCrime contract.\"}}},\"kind\":\"dev\",\"methods\":{\"isPeer(uint32,bytes32)\":{\"details\":\"checks if the specified peer is considered 'trusted' by the OApp.\",\"params\":{\"_eid\":\"The endpoint Id to check.\",\"_peer\":\"The peer to check.\"},\"returns\":{\"_0\":\"Whether the peer passed is considered 'trusted' by the OApp.\"}},\"lzReceiveAndRevert(((uint32,bytes32,uint64),uint32,address,bytes32,uint256,address,bytes,bytes)[])\":{\"details\":\"Mocks receiving a packet, then reverts with a series of data to infer the state/result.\",\"params\":{\"_packets\":\"An array of LayerZero InboundPacket objects representing received packets.\"}},\"oApp()\":{\"details\":\"Retrieves the address of the OApp contract.\",\"returns\":{\"_0\":\"The address of the OApp contract.\"}},\"preCrime()\":{\"details\":\"Retrieves the address of the preCrime contract implementation.\",\"returns\":{\"_0\":\"The address of the preCrime contract.\"}},\"setPreCrime(address)\":{\"details\":\"Sets the preCrime contract address.\",\"params\":{\"_preCrime\":\"The address of the preCrime contract.\"}}},\"title\":\"IOAppPreCrimeSimulator Interface\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IOAppPreCrimeSimulator.sol\":\"IOAppPreCrimeSimulator\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\nimport { IMessageLibManager } from \\\"./IMessageLibManager.sol\\\";\\nimport { IMessagingComposer } from \\\"./IMessagingComposer.sol\\\";\\nimport { IMessagingChannel } from \\\"./IMessagingChannel.sol\\\";\\nimport { IMessagingContext } from \\\"./IMessagingContext.sol\\\";\\n\\nstruct MessagingParams {\\n uint32 dstEid;\\n bytes32 receiver;\\n bytes message;\\n bytes options;\\n bool payInLzToken;\\n}\\n\\nstruct MessagingReceipt {\\n bytes32 guid;\\n uint64 nonce;\\n MessagingFee fee;\\n}\\n\\nstruct MessagingFee {\\n uint256 nativeFee;\\n uint256 lzTokenFee;\\n}\\n\\nstruct Origin {\\n uint32 srcEid;\\n bytes32 sender;\\n uint64 nonce;\\n}\\n\\ninterface ILayerZeroEndpointV2 is IMessageLibManager, IMessagingComposer, IMessagingChannel, IMessagingContext {\\n event PacketSent(bytes encodedPayload, bytes options, address sendLibrary);\\n\\n event PacketVerified(Origin origin, address receiver, bytes32 payloadHash);\\n\\n event PacketDelivered(Origin origin, address receiver);\\n\\n event LzReceiveAlert(\\n address indexed receiver,\\n address indexed executor,\\n Origin origin,\\n bytes32 guid,\\n uint256 gas,\\n uint256 value,\\n bytes message,\\n bytes extraData,\\n bytes reason\\n );\\n\\n event LzTokenSet(address token);\\n\\n event DelegateSet(address sender, address delegate);\\n\\n function quote(MessagingParams calldata _params, address _sender) external view returns (MessagingFee memory);\\n\\n function send(\\n MessagingParams calldata _params,\\n address _refundAddress\\n ) external payable returns (MessagingReceipt memory);\\n\\n function verify(Origin calldata _origin, address _receiver, bytes32 _payloadHash) external;\\n\\n function verifiable(Origin calldata _origin, address _receiver) external view returns (bool);\\n\\n function initializable(Origin calldata _origin, address _receiver) external view returns (bool);\\n\\n function lzReceive(\\n Origin calldata _origin,\\n address _receiver,\\n bytes32 _guid,\\n bytes calldata _message,\\n bytes calldata _extraData\\n ) external payable;\\n\\n // oapp can burn messages partially by calling this function with its own business logic if messages are verified in order\\n function clear(address _oapp, Origin calldata _origin, bytes32 _guid, bytes calldata _message) external;\\n\\n function setLzToken(address _lzToken) external;\\n\\n function lzToken() external view returns (address);\\n\\n function nativeToken() external view returns (address);\\n\\n function setDelegate(address _delegate) external;\\n}\\n\",\"keccak256\":\"0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\nimport { IERC165 } from \\\"@openzeppelin/contracts/utils/introspection/IERC165.sol\\\";\\n\\nimport { SetConfigParam } from \\\"./IMessageLibManager.sol\\\";\\n\\nenum MessageLibType {\\n Send,\\n Receive,\\n SendAndReceive\\n}\\n\\ninterface IMessageLib is IERC165 {\\n function setConfig(address _oapp, SetConfigParam[] calldata _config) external;\\n\\n function getConfig(uint32 _eid, address _oapp, uint32 _configType) external view returns (bytes memory config);\\n\\n function isSupportedEid(uint32 _eid) external view returns (bool);\\n\\n // message libs of same major version are compatible\\n function version() external view returns (uint64 major, uint8 minor, uint8 endpointVersion);\\n\\n function messageLibType() external view returns (MessageLibType);\\n}\\n\",\"keccak256\":\"0x5cf5f24751b4e3ea1c9c5ded07cedfdfd62566b6daaffcc0144733859c9dba0c\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\nstruct SetConfigParam {\\n uint32 eid;\\n uint32 configType;\\n bytes config;\\n}\\n\\ninterface IMessageLibManager {\\n struct Timeout {\\n address lib;\\n uint256 expiry;\\n }\\n\\n event LibraryRegistered(address newLib);\\n event DefaultSendLibrarySet(uint32 eid, address newLib);\\n event DefaultReceiveLibrarySet(uint32 eid, address newLib);\\n event DefaultReceiveLibraryTimeoutSet(uint32 eid, address oldLib, uint256 expiry);\\n event SendLibrarySet(address sender, uint32 eid, address newLib);\\n event ReceiveLibrarySet(address receiver, uint32 eid, address newLib);\\n event ReceiveLibraryTimeoutSet(address receiver, uint32 eid, address oldLib, uint256 timeout);\\n\\n function registerLibrary(address _lib) external;\\n\\n function isRegisteredLibrary(address _lib) external view returns (bool);\\n\\n function getRegisteredLibraries() external view returns (address[] memory);\\n\\n function setDefaultSendLibrary(uint32 _eid, address _newLib) external;\\n\\n function defaultSendLibrary(uint32 _eid) external view returns (address);\\n\\n function setDefaultReceiveLibrary(uint32 _eid, address _newLib, uint256 _gracePeriod) external;\\n\\n function defaultReceiveLibrary(uint32 _eid) external view returns (address);\\n\\n function setDefaultReceiveLibraryTimeout(uint32 _eid, address _lib, uint256 _expiry) external;\\n\\n function defaultReceiveLibraryTimeout(uint32 _eid) external view returns (address lib, uint256 expiry);\\n\\n function isSupportedEid(uint32 _eid) external view returns (bool);\\n\\n function isValidReceiveLibrary(address _receiver, uint32 _eid, address _lib) external view returns (bool);\\n\\n /// ------------------- OApp interfaces -------------------\\n function setSendLibrary(address _oapp, uint32 _eid, address _newLib) external;\\n\\n function getSendLibrary(address _sender, uint32 _eid) external view returns (address lib);\\n\\n function isDefaultSendLibrary(address _sender, uint32 _eid) external view returns (bool);\\n\\n function setReceiveLibrary(address _oapp, uint32 _eid, address _newLib, uint256 _gracePeriod) external;\\n\\n function getReceiveLibrary(address _receiver, uint32 _eid) external view returns (address lib, bool isDefault);\\n\\n function setReceiveLibraryTimeout(address _oapp, uint32 _eid, address _lib, uint256 _expiry) external;\\n\\n function receiveLibraryTimeout(address _receiver, uint32 _eid) external view returns (address lib, uint256 expiry);\\n\\n function setConfig(address _oapp, address _lib, SetConfigParam[] calldata _params) external;\\n\\n function getConfig(\\n address _oapp,\\n address _lib,\\n uint32 _eid,\\n uint32 _configType\\n ) external view returns (bytes memory config);\\n}\\n\",\"keccak256\":\"0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\ninterface IMessagingChannel {\\n event InboundNonceSkipped(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce);\\n event PacketNilified(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce, bytes32 payloadHash);\\n event PacketBurnt(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce, bytes32 payloadHash);\\n\\n function eid() external view returns (uint32);\\n\\n // this is an emergency function if a message cannot be verified for some reasons\\n // required to provide _nextNonce to avoid race condition\\n function skip(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce) external;\\n\\n function nilify(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce, bytes32 _payloadHash) external;\\n\\n function burn(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce, bytes32 _payloadHash) external;\\n\\n function nextGuid(address _sender, uint32 _dstEid, bytes32 _receiver) external view returns (bytes32);\\n\\n function inboundNonce(address _receiver, uint32 _srcEid, bytes32 _sender) external view returns (uint64);\\n\\n function outboundNonce(address _sender, uint32 _dstEid, bytes32 _receiver) external view returns (uint64);\\n\\n function inboundPayloadHash(\\n address _receiver,\\n uint32 _srcEid,\\n bytes32 _sender,\\n uint64 _nonce\\n ) external view returns (bytes32);\\n\\n function lazyInboundNonce(address _receiver, uint32 _srcEid, bytes32 _sender) external view returns (uint64);\\n}\\n\",\"keccak256\":\"0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\ninterface IMessagingComposer {\\n event ComposeSent(address from, address to, bytes32 guid, uint16 index, bytes message);\\n event ComposeDelivered(address from, address to, bytes32 guid, uint16 index);\\n event LzComposeAlert(\\n address indexed from,\\n address indexed to,\\n address indexed executor,\\n bytes32 guid,\\n uint16 index,\\n uint256 gas,\\n uint256 value,\\n bytes message,\\n bytes extraData,\\n bytes reason\\n );\\n\\n function composeQueue(\\n address _from,\\n address _to,\\n bytes32 _guid,\\n uint16 _index\\n ) external view returns (bytes32 messageHash);\\n\\n function sendCompose(address _to, bytes32 _guid, uint16 _index, bytes calldata _message) external;\\n\\n function lzCompose(\\n address _from,\\n address _to,\\n bytes32 _guid,\\n uint16 _index,\\n bytes calldata _message,\\n bytes calldata _extraData\\n ) external payable;\\n}\\n\",\"keccak256\":\"0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\ninterface IMessagingContext {\\n function isSendingMessage() external view returns (bool);\\n\\n function getSendContext() external view returns (uint32 dstEid, address sender);\\n}\\n\",\"keccak256\":\"0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\nimport { MessagingFee } from \\\"./ILayerZeroEndpointV2.sol\\\";\\nimport { IMessageLib } from \\\"./IMessageLib.sol\\\";\\n\\nstruct Packet {\\n uint64 nonce;\\n uint32 srcEid;\\n address sender;\\n uint32 dstEid;\\n bytes32 receiver;\\n bytes32 guid;\\n bytes message;\\n}\\n\\ninterface ISendLib is IMessageLib {\\n function send(\\n Packet calldata _packet,\\n bytes calldata _options,\\n bool _payInLzToken\\n ) external returns (MessagingFee memory, bytes memory encodedPacket);\\n\\n function quote(\\n Packet calldata _packet,\\n bytes calldata _options,\\n bool _payInLzToken\\n ) external view returns (MessagingFee memory);\\n\\n function setTreasury(address _treasury) external;\\n\\n function withdrawFee(address _to, uint256 _amount) external;\\n\\n function withdrawLzTokenFee(address _lzToken, address _to, uint256 _amount) external;\\n}\\n\",\"keccak256\":\"0xf1c07bc61e7b1dce195ed12d50f87980fbf2d63cac1326fd28287f55fe0ba625\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol\":{\"content\":\"// SPDX-License-Identifier: LZBL-1.2\\n\\npragma solidity ^0.8.20;\\n\\nlibrary AddressCast {\\n error AddressCast_InvalidSizeForAddress();\\n error AddressCast_InvalidAddress();\\n\\n function toBytes32(bytes calldata _addressBytes) internal pure returns (bytes32 result) {\\n if (_addressBytes.length > 32) revert AddressCast_InvalidAddress();\\n result = bytes32(_addressBytes);\\n unchecked {\\n uint256 offset = 32 - _addressBytes.length;\\n result = result >> (offset * 8);\\n }\\n }\\n\\n function toBytes32(address _address) internal pure returns (bytes32 result) {\\n result = bytes32(uint256(uint160(_address)));\\n }\\n\\n function toBytes(bytes32 _addressBytes32, uint256 _size) internal pure returns (bytes memory result) {\\n if (_size == 0 || _size > 32) revert AddressCast_InvalidSizeForAddress();\\n result = new bytes(_size);\\n unchecked {\\n uint256 offset = 256 - _size * 8;\\n assembly {\\n mstore(add(result, 32), shl(offset, _addressBytes32))\\n }\\n }\\n }\\n\\n function toAddress(bytes32 _addressBytes32) internal pure returns (address result) {\\n result = address(uint160(uint256(_addressBytes32)));\\n }\\n\\n function toAddress(bytes calldata _addressBytes) internal pure returns (address result) {\\n if (_addressBytes.length != 20) revert AddressCast_InvalidAddress();\\n result = address(bytes20(_addressBytes));\\n }\\n}\\n\",\"keccak256\":\"0x2ebbcaaab3554edcd41b581f1a72ac1806afbfb8047d0d47ff098f9af30d6deb\",\"license\":\"LZBL-1.2\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol\":{\"content\":\"// SPDX-License-Identifier: LZBL-1.2\\n\\npragma solidity ^0.8.20;\\n\\nimport { Packet } from \\\"../../interfaces/ISendLib.sol\\\";\\nimport { AddressCast } from \\\"../../libs/AddressCast.sol\\\";\\n\\nlibrary PacketV1Codec {\\n using AddressCast for address;\\n using AddressCast for bytes32;\\n\\n uint8 internal constant PACKET_VERSION = 1;\\n\\n // header (version + nonce + path)\\n // version\\n uint256 private constant PACKET_VERSION_OFFSET = 0;\\n // nonce\\n uint256 private constant NONCE_OFFSET = 1;\\n // path\\n uint256 private constant SRC_EID_OFFSET = 9;\\n uint256 private constant SENDER_OFFSET = 13;\\n uint256 private constant DST_EID_OFFSET = 45;\\n uint256 private constant RECEIVER_OFFSET = 49;\\n // payload (guid + message)\\n uint256 private constant GUID_OFFSET = 81; // keccak256(nonce + path)\\n uint256 private constant MESSAGE_OFFSET = 113;\\n\\n function encode(Packet memory _packet) internal pure returns (bytes memory encodedPacket) {\\n encodedPacket = abi.encodePacked(\\n PACKET_VERSION,\\n _packet.nonce,\\n _packet.srcEid,\\n _packet.sender.toBytes32(),\\n _packet.dstEid,\\n _packet.receiver,\\n _packet.guid,\\n _packet.message\\n );\\n }\\n\\n function encodePacketHeader(Packet memory _packet) internal pure returns (bytes memory) {\\n return\\n abi.encodePacked(\\n PACKET_VERSION,\\n _packet.nonce,\\n _packet.srcEid,\\n _packet.sender.toBytes32(),\\n _packet.dstEid,\\n _packet.receiver\\n );\\n }\\n\\n function encodePayload(Packet memory _packet) internal pure returns (bytes memory) {\\n return abi.encodePacked(_packet.guid, _packet.message);\\n }\\n\\n function header(bytes calldata _packet) internal pure returns (bytes calldata) {\\n return _packet[0:GUID_OFFSET];\\n }\\n\\n function version(bytes calldata _packet) internal pure returns (uint8) {\\n return uint8(bytes1(_packet[PACKET_VERSION_OFFSET:NONCE_OFFSET]));\\n }\\n\\n function nonce(bytes calldata _packet) internal pure returns (uint64) {\\n return uint64(bytes8(_packet[NONCE_OFFSET:SRC_EID_OFFSET]));\\n }\\n\\n function srcEid(bytes calldata _packet) internal pure returns (uint32) {\\n return uint32(bytes4(_packet[SRC_EID_OFFSET:SENDER_OFFSET]));\\n }\\n\\n function sender(bytes calldata _packet) internal pure returns (bytes32) {\\n return bytes32(_packet[SENDER_OFFSET:DST_EID_OFFSET]);\\n }\\n\\n function senderAddressB20(bytes calldata _packet) internal pure returns (address) {\\n return sender(_packet).toAddress();\\n }\\n\\n function dstEid(bytes calldata _packet) internal pure returns (uint32) {\\n return uint32(bytes4(_packet[DST_EID_OFFSET:RECEIVER_OFFSET]));\\n }\\n\\n function receiver(bytes calldata _packet) internal pure returns (bytes32) {\\n return bytes32(_packet[RECEIVER_OFFSET:GUID_OFFSET]);\\n }\\n\\n function receiverB20(bytes calldata _packet) internal pure returns (address) {\\n return receiver(_packet).toAddress();\\n }\\n\\n function guid(bytes calldata _packet) internal pure returns (bytes32) {\\n return bytes32(_packet[GUID_OFFSET:MESSAGE_OFFSET]);\\n }\\n\\n function message(bytes calldata _packet) internal pure returns (bytes calldata) {\\n return bytes(_packet[MESSAGE_OFFSET:]);\\n }\\n\\n function payload(bytes calldata _packet) internal pure returns (bytes calldata) {\\n return bytes(_packet[GUID_OFFSET:]);\\n }\\n\\n function payloadHash(bytes calldata _packet) internal pure returns (bytes32) {\\n return keccak256(payload(_packet));\\n }\\n}\\n\",\"keccak256\":\"0xc84cf1bf785977fe1fbe7566eef902c2db68d0e163813ebe6c34921754802680\",\"license\":\"LZBL-1.2\"},\"@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IOAppPreCrimeSimulator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\n// @dev Import the Origin so it's exposed to OAppPreCrimeSimulator implementers.\\n// solhint-disable-next-line no-unused-import\\nimport { InboundPacket, Origin } from \\\"../libs/Packet.sol\\\";\\n\\n/**\\n * @title IOAppPreCrimeSimulator Interface\\n * @dev Interface for the preCrime simulation functionality in an OApp.\\n */\\ninterface IOAppPreCrimeSimulator {\\n // @dev simulation result used in PreCrime implementation\\n error SimulationResult(bytes result);\\n error OnlySelf();\\n\\n /**\\n * @dev Emitted when the preCrime contract address is set.\\n * @param preCrimeAddress The address of the preCrime contract.\\n */\\n event PreCrimeSet(address preCrimeAddress);\\n\\n /**\\n * @dev Retrieves the address of the preCrime contract implementation.\\n * @return The address of the preCrime contract.\\n */\\n function preCrime() external view returns (address);\\n\\n /**\\n * @dev Retrieves the address of the OApp contract.\\n * @return The address of the OApp contract.\\n */\\n function oApp() external view returns (address);\\n\\n /**\\n * @dev Sets the preCrime contract address.\\n * @param _preCrime The address of the preCrime contract.\\n */\\n function setPreCrime(address _preCrime) external;\\n\\n /**\\n * @dev Mocks receiving a packet, then reverts with a series of data to infer the state/result.\\n * @param _packets An array of LayerZero InboundPacket objects representing received packets.\\n */\\n function lzReceiveAndRevert(InboundPacket[] calldata _packets) external payable;\\n\\n /**\\n * @dev checks if the specified peer is considered 'trusted' by the OApp.\\n * @param _eid The endpoint Id to check.\\n * @param _peer The peer to check.\\n * @return Whether the peer passed is considered 'trusted' by the OApp.\\n */\\n function isPeer(uint32 _eid, bytes32 _peer) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x5d24db150949ea8e6437178e65a942e8c8b7f332e5daf32750f56b23b35b5bb2\",\"license\":\"MIT\"},\"@layerzerolabs/oapp-evm/contracts/precrime/libs/Packet.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\nimport { Origin } from \\\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\\\";\\nimport { PacketV1Codec } from \\\"@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol\\\";\\n\\n/**\\n * @title InboundPacket\\n * @dev Structure representing an inbound packet received by the contract.\\n */\\nstruct InboundPacket {\\n Origin origin; // Origin information of the packet.\\n uint32 dstEid; // Destination endpointId of the packet.\\n address receiver; // Receiver address for the packet.\\n bytes32 guid; // Unique identifier of the packet.\\n uint256 value; // msg.value of the packet.\\n address executor; // Executor address for the packet.\\n bytes message; // Message payload of the packet.\\n bytes extraData; // Additional arbitrary data for the packet.\\n}\\n\\n/**\\n * @title PacketDecoder\\n * @dev Library for decoding LayerZero packets.\\n */\\nlibrary PacketDecoder {\\n using PacketV1Codec for bytes;\\n\\n /**\\n * @dev Decode an inbound packet from the given packet data.\\n * @param _packet The packet data to decode.\\n * @return packet An InboundPacket struct representing the decoded packet.\\n */\\n function decode(bytes calldata _packet) internal pure returns (InboundPacket memory packet) {\\n packet.origin = Origin(_packet.srcEid(), _packet.sender(), _packet.nonce());\\n packet.dstEid = _packet.dstEid();\\n packet.receiver = _packet.receiverB20();\\n packet.guid = _packet.guid();\\n packet.message = _packet.message();\\n }\\n\\n /**\\n * @dev Decode multiple inbound packets from the given packet data and associated message values.\\n * @param _packets An array of packet data to decode.\\n * @param _packetMsgValues An array of associated message values for each packet.\\n * @return packets An array of InboundPacket structs representing the decoded packets.\\n */\\n function decode(\\n bytes[] calldata _packets,\\n uint256[] memory _packetMsgValues\\n ) internal pure returns (InboundPacket[] memory packets) {\\n packets = new InboundPacket[](_packets.length);\\n for (uint256 i = 0; i < _packets.length; i++) {\\n bytes calldata packet = _packets[i];\\n packets[i] = PacketDecoder.decode(packet);\\n // @dev Allows the verifier to specify the msg.value that gets passed in lzReceive.\\n packets[i].value = _packetMsgValues[i];\\n }\\n }\\n}\\n\",\"keccak256\":\"0xcb2fb1c5b2eb3731de78b479b9c2ab3bba326fe0b0b3a008590f18e881e457a6\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/introspection/IERC165.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Interface of the ERC-165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[ERC].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\"}},\"version\":1}", - "storageLayout": { "storage": [], "types": null }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - } - }, - "@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IPreCrime.sol": { - "IPreCrime": { - "abi": [ - { - "inputs": [ - { "internalType": "bytes", "name": "crime", "type": "bytes" } - ], - "name": "CrimeFound", - "type": "error" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" }, - { "internalType": "bytes", "name": "reason", "type": "bytes" } - ], - "name": "InvalidSimulationResult", - "type": "error" - }, - { "inputs": [], "name": "OnlyOffChain", "type": "error" }, - { - "inputs": [ - { "internalType": "uint256", "name": "max", "type": "uint256" }, - { - "internalType": "uint256", - "name": "actual", - "type": "uint256" - } - ], - "name": "PacketOversize", - "type": "error" - }, - { "inputs": [], "name": "PacketUnsorted", "type": "error" }, - { - "inputs": [ - { "internalType": "bytes", "name": "reason", "type": "bytes" } - ], - "name": "SimulationFailed", - "type": "error" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" } - ], - "name": "SimulationResultNotFound", - "type": "error" - }, - { - "inputs": [], - "name": "buildSimulationResult", - "outputs": [ - { "internalType": "bytes", "name": "", "type": "bytes" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes[]", - "name": "_packets", - "type": "bytes[]" - }, - { - "internalType": "uint256[]", - "name": "_packetMsgValues", - "type": "uint256[]" - } - ], - "name": "getConfig", - "outputs": [ - { "internalType": "bytes", "name": "", "type": "bytes" } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes[]", - "name": "_packets", - "type": "bytes[]" - }, - { - "internalType": "uint256[]", - "name": "_packetMsgValues", - "type": "uint256[]" - }, - { - "internalType": "bytes[]", - "name": "_simulations", - "type": "bytes[]" - } - ], - "name": "preCrime", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes[]", - "name": "_packets", - "type": "bytes[]" - }, - { - "internalType": "uint256[]", - "name": "_packetMsgValues", - "type": "uint256[]" - } - ], - "name": "simulate", - "outputs": [ - { "internalType": "bytes", "name": "", "type": "bytes" } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "version", - "outputs": [ - { "internalType": "uint64", "name": "major", "type": "uint64" }, - { "internalType": "uint8", "name": "minor", "type": "uint8" } - ], - "stateMutability": "view", - "type": "function" - } - ], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": { - "buildSimulationResult()": "8e9e7099", - "getConfig(bytes[],uint256[])": "f0cd3836", - "preCrime(bytes[],uint256[],bytes[])": "10f9cf3a", - "simulate(bytes[],uint256[])": "50dfa937", - "version()": "54fd4d50" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"crime\",\"type\":\"bytes\"}],\"name\":\"CrimeFound\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"reason\",\"type\":\"bytes\"}],\"name\":\"InvalidSimulationResult\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyOffChain\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"max\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actual\",\"type\":\"uint256\"}],\"name\":\"PacketOversize\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PacketUnsorted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"reason\",\"type\":\"bytes\"}],\"name\":\"SimulationFailed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"}],\"name\":\"SimulationResultNotFound\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"buildSimulationResult\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"_packets\",\"type\":\"bytes[]\"},{\"internalType\":\"uint256[]\",\"name\":\"_packetMsgValues\",\"type\":\"uint256[]\"}],\"name\":\"getConfig\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"_packets\",\"type\":\"bytes[]\"},{\"internalType\":\"uint256[]\",\"name\":\"_packetMsgValues\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes[]\",\"name\":\"_simulations\",\"type\":\"bytes[]\"}],\"name\":\"preCrime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"_packets\",\"type\":\"bytes[]\"},{\"internalType\":\"uint256[]\",\"name\":\"_packetMsgValues\",\"type\":\"uint256[]\"}],\"name\":\"simulate\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"major\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"minor\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IPreCrime.sol\":\"IPreCrime\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IPreCrime.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\nstruct PreCrimePeer {\\n uint32 eid;\\n bytes32 preCrime;\\n bytes32 oApp;\\n}\\n\\n// TODO not done yet\\ninterface IPreCrime {\\n error OnlyOffChain();\\n\\n // for simulate()\\n error PacketOversize(uint256 max, uint256 actual);\\n error PacketUnsorted();\\n error SimulationFailed(bytes reason);\\n\\n // for preCrime()\\n error SimulationResultNotFound(uint32 eid);\\n error InvalidSimulationResult(uint32 eid, bytes reason);\\n error CrimeFound(bytes crime);\\n\\n function getConfig(bytes[] calldata _packets, uint256[] calldata _packetMsgValues) external returns (bytes memory);\\n\\n function simulate(\\n bytes[] calldata _packets,\\n uint256[] calldata _packetMsgValues\\n ) external payable returns (bytes memory);\\n\\n function buildSimulationResult() external view returns (bytes memory);\\n\\n function preCrime(\\n bytes[] calldata _packets,\\n uint256[] calldata _packetMsgValues,\\n bytes[] calldata _simulations\\n ) external;\\n\\n function version() external view returns (uint64 major, uint8 minor);\\n}\\n\",\"keccak256\":\"0xc8d869f27ef8ceb2e13fdf6a70682fd4dee3f90c4924eb8e125bc1e66cb6af84\",\"license\":\"MIT\"}},\"version\":1}", - "storageLayout": { "storage": [], "types": null }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - } - }, - "@layerzerolabs/oapp-evm/contracts/precrime/libs/Packet.sol": { - "PacketDecoder": { - "abi": [], - "devdoc": { - "details": "Library for decoding LayerZero packets.", - "kind": "dev", - "methods": {}, - "title": "PacketDecoder", - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212205ff555c10480a219ee8a8785b0c889b29899f48f67e301d65976bb7b9bda2a0664736f6c63430008160033", - "opcodes": "PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH0 CREATE2 SSTORE 0xC1 DIV DUP1 LOG2 NOT 0xEE DUP11 DUP8 DUP6 0xB0 0xC8 DUP10 0xB2 SWAP9 SWAP10 DELEGATECALL DUP16 PUSH8 0xE301D65976BB7B9B 0xDA 0x2A MOD PUSH5 0x736F6C6343 STOP ADDMOD AND STOP CALLER ", - "sourceMap": "942:1527:22:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;942:1527:22;;;;;;;;;;;;;;;;;" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212205ff555c10480a219ee8a8785b0c889b29899f48f67e301d65976bb7b9bda2a0664736f6c63430008160033", - "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH0 CREATE2 SSTORE 0xC1 DIV DUP1 LOG2 NOT 0xEE DUP11 DUP8 DUP6 0xB0 0xC8 DUP10 0xB2 SWAP9 SWAP10 DELEGATECALL DUP16 PUSH8 0xE301D65976BB7B9B 0xDA 0x2A MOD PUSH5 0x736F6C6343 STOP ADDMOD AND STOP CALLER ", - "sourceMap": "942:1527:22:-:0;;;;;;;;" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "17200", - "executionCost": "103", - "totalCost": "17303" - }, - "internal": { - "decode(bytes calldata)": "infinite", - "decode(bytes calldata[] calldata,uint256[] memory)": "infinite" - } - }, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Library for decoding LayerZero packets.\",\"kind\":\"dev\",\"methods\":{},\"title\":\"PacketDecoder\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@layerzerolabs/oapp-evm/contracts/precrime/libs/Packet.sol\":\"PacketDecoder\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\nimport { IMessageLibManager } from \\\"./IMessageLibManager.sol\\\";\\nimport { IMessagingComposer } from \\\"./IMessagingComposer.sol\\\";\\nimport { IMessagingChannel } from \\\"./IMessagingChannel.sol\\\";\\nimport { IMessagingContext } from \\\"./IMessagingContext.sol\\\";\\n\\nstruct MessagingParams {\\n uint32 dstEid;\\n bytes32 receiver;\\n bytes message;\\n bytes options;\\n bool payInLzToken;\\n}\\n\\nstruct MessagingReceipt {\\n bytes32 guid;\\n uint64 nonce;\\n MessagingFee fee;\\n}\\n\\nstruct MessagingFee {\\n uint256 nativeFee;\\n uint256 lzTokenFee;\\n}\\n\\nstruct Origin {\\n uint32 srcEid;\\n bytes32 sender;\\n uint64 nonce;\\n}\\n\\ninterface ILayerZeroEndpointV2 is IMessageLibManager, IMessagingComposer, IMessagingChannel, IMessagingContext {\\n event PacketSent(bytes encodedPayload, bytes options, address sendLibrary);\\n\\n event PacketVerified(Origin origin, address receiver, bytes32 payloadHash);\\n\\n event PacketDelivered(Origin origin, address receiver);\\n\\n event LzReceiveAlert(\\n address indexed receiver,\\n address indexed executor,\\n Origin origin,\\n bytes32 guid,\\n uint256 gas,\\n uint256 value,\\n bytes message,\\n bytes extraData,\\n bytes reason\\n );\\n\\n event LzTokenSet(address token);\\n\\n event DelegateSet(address sender, address delegate);\\n\\n function quote(MessagingParams calldata _params, address _sender) external view returns (MessagingFee memory);\\n\\n function send(\\n MessagingParams calldata _params,\\n address _refundAddress\\n ) external payable returns (MessagingReceipt memory);\\n\\n function verify(Origin calldata _origin, address _receiver, bytes32 _payloadHash) external;\\n\\n function verifiable(Origin calldata _origin, address _receiver) external view returns (bool);\\n\\n function initializable(Origin calldata _origin, address _receiver) external view returns (bool);\\n\\n function lzReceive(\\n Origin calldata _origin,\\n address _receiver,\\n bytes32 _guid,\\n bytes calldata _message,\\n bytes calldata _extraData\\n ) external payable;\\n\\n // oapp can burn messages partially by calling this function with its own business logic if messages are verified in order\\n function clear(address _oapp, Origin calldata _origin, bytes32 _guid, bytes calldata _message) external;\\n\\n function setLzToken(address _lzToken) external;\\n\\n function lzToken() external view returns (address);\\n\\n function nativeToken() external view returns (address);\\n\\n function setDelegate(address _delegate) external;\\n}\\n\",\"keccak256\":\"0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\nimport { IERC165 } from \\\"@openzeppelin/contracts/utils/introspection/IERC165.sol\\\";\\n\\nimport { SetConfigParam } from \\\"./IMessageLibManager.sol\\\";\\n\\nenum MessageLibType {\\n Send,\\n Receive,\\n SendAndReceive\\n}\\n\\ninterface IMessageLib is IERC165 {\\n function setConfig(address _oapp, SetConfigParam[] calldata _config) external;\\n\\n function getConfig(uint32 _eid, address _oapp, uint32 _configType) external view returns (bytes memory config);\\n\\n function isSupportedEid(uint32 _eid) external view returns (bool);\\n\\n // message libs of same major version are compatible\\n function version() external view returns (uint64 major, uint8 minor, uint8 endpointVersion);\\n\\n function messageLibType() external view returns (MessageLibType);\\n}\\n\",\"keccak256\":\"0x5cf5f24751b4e3ea1c9c5ded07cedfdfd62566b6daaffcc0144733859c9dba0c\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\nstruct SetConfigParam {\\n uint32 eid;\\n uint32 configType;\\n bytes config;\\n}\\n\\ninterface IMessageLibManager {\\n struct Timeout {\\n address lib;\\n uint256 expiry;\\n }\\n\\n event LibraryRegistered(address newLib);\\n event DefaultSendLibrarySet(uint32 eid, address newLib);\\n event DefaultReceiveLibrarySet(uint32 eid, address newLib);\\n event DefaultReceiveLibraryTimeoutSet(uint32 eid, address oldLib, uint256 expiry);\\n event SendLibrarySet(address sender, uint32 eid, address newLib);\\n event ReceiveLibrarySet(address receiver, uint32 eid, address newLib);\\n event ReceiveLibraryTimeoutSet(address receiver, uint32 eid, address oldLib, uint256 timeout);\\n\\n function registerLibrary(address _lib) external;\\n\\n function isRegisteredLibrary(address _lib) external view returns (bool);\\n\\n function getRegisteredLibraries() external view returns (address[] memory);\\n\\n function setDefaultSendLibrary(uint32 _eid, address _newLib) external;\\n\\n function defaultSendLibrary(uint32 _eid) external view returns (address);\\n\\n function setDefaultReceiveLibrary(uint32 _eid, address _newLib, uint256 _gracePeriod) external;\\n\\n function defaultReceiveLibrary(uint32 _eid) external view returns (address);\\n\\n function setDefaultReceiveLibraryTimeout(uint32 _eid, address _lib, uint256 _expiry) external;\\n\\n function defaultReceiveLibraryTimeout(uint32 _eid) external view returns (address lib, uint256 expiry);\\n\\n function isSupportedEid(uint32 _eid) external view returns (bool);\\n\\n function isValidReceiveLibrary(address _receiver, uint32 _eid, address _lib) external view returns (bool);\\n\\n /// ------------------- OApp interfaces -------------------\\n function setSendLibrary(address _oapp, uint32 _eid, address _newLib) external;\\n\\n function getSendLibrary(address _sender, uint32 _eid) external view returns (address lib);\\n\\n function isDefaultSendLibrary(address _sender, uint32 _eid) external view returns (bool);\\n\\n function setReceiveLibrary(address _oapp, uint32 _eid, address _newLib, uint256 _gracePeriod) external;\\n\\n function getReceiveLibrary(address _receiver, uint32 _eid) external view returns (address lib, bool isDefault);\\n\\n function setReceiveLibraryTimeout(address _oapp, uint32 _eid, address _lib, uint256 _expiry) external;\\n\\n function receiveLibraryTimeout(address _receiver, uint32 _eid) external view returns (address lib, uint256 expiry);\\n\\n function setConfig(address _oapp, address _lib, SetConfigParam[] calldata _params) external;\\n\\n function getConfig(\\n address _oapp,\\n address _lib,\\n uint32 _eid,\\n uint32 _configType\\n ) external view returns (bytes memory config);\\n}\\n\",\"keccak256\":\"0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\ninterface IMessagingChannel {\\n event InboundNonceSkipped(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce);\\n event PacketNilified(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce, bytes32 payloadHash);\\n event PacketBurnt(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce, bytes32 payloadHash);\\n\\n function eid() external view returns (uint32);\\n\\n // this is an emergency function if a message cannot be verified for some reasons\\n // required to provide _nextNonce to avoid race condition\\n function skip(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce) external;\\n\\n function nilify(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce, bytes32 _payloadHash) external;\\n\\n function burn(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce, bytes32 _payloadHash) external;\\n\\n function nextGuid(address _sender, uint32 _dstEid, bytes32 _receiver) external view returns (bytes32);\\n\\n function inboundNonce(address _receiver, uint32 _srcEid, bytes32 _sender) external view returns (uint64);\\n\\n function outboundNonce(address _sender, uint32 _dstEid, bytes32 _receiver) external view returns (uint64);\\n\\n function inboundPayloadHash(\\n address _receiver,\\n uint32 _srcEid,\\n bytes32 _sender,\\n uint64 _nonce\\n ) external view returns (bytes32);\\n\\n function lazyInboundNonce(address _receiver, uint32 _srcEid, bytes32 _sender) external view returns (uint64);\\n}\\n\",\"keccak256\":\"0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\ninterface IMessagingComposer {\\n event ComposeSent(address from, address to, bytes32 guid, uint16 index, bytes message);\\n event ComposeDelivered(address from, address to, bytes32 guid, uint16 index);\\n event LzComposeAlert(\\n address indexed from,\\n address indexed to,\\n address indexed executor,\\n bytes32 guid,\\n uint16 index,\\n uint256 gas,\\n uint256 value,\\n bytes message,\\n bytes extraData,\\n bytes reason\\n );\\n\\n function composeQueue(\\n address _from,\\n address _to,\\n bytes32 _guid,\\n uint16 _index\\n ) external view returns (bytes32 messageHash);\\n\\n function sendCompose(address _to, bytes32 _guid, uint16 _index, bytes calldata _message) external;\\n\\n function lzCompose(\\n address _from,\\n address _to,\\n bytes32 _guid,\\n uint16 _index,\\n bytes calldata _message,\\n bytes calldata _extraData\\n ) external payable;\\n}\\n\",\"keccak256\":\"0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\ninterface IMessagingContext {\\n function isSendingMessage() external view returns (bool);\\n\\n function getSendContext() external view returns (uint32 dstEid, address sender);\\n}\\n\",\"keccak256\":\"0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\nimport { MessagingFee } from \\\"./ILayerZeroEndpointV2.sol\\\";\\nimport { IMessageLib } from \\\"./IMessageLib.sol\\\";\\n\\nstruct Packet {\\n uint64 nonce;\\n uint32 srcEid;\\n address sender;\\n uint32 dstEid;\\n bytes32 receiver;\\n bytes32 guid;\\n bytes message;\\n}\\n\\ninterface ISendLib is IMessageLib {\\n function send(\\n Packet calldata _packet,\\n bytes calldata _options,\\n bool _payInLzToken\\n ) external returns (MessagingFee memory, bytes memory encodedPacket);\\n\\n function quote(\\n Packet calldata _packet,\\n bytes calldata _options,\\n bool _payInLzToken\\n ) external view returns (MessagingFee memory);\\n\\n function setTreasury(address _treasury) external;\\n\\n function withdrawFee(address _to, uint256 _amount) external;\\n\\n function withdrawLzTokenFee(address _lzToken, address _to, uint256 _amount) external;\\n}\\n\",\"keccak256\":\"0xf1c07bc61e7b1dce195ed12d50f87980fbf2d63cac1326fd28287f55fe0ba625\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol\":{\"content\":\"// SPDX-License-Identifier: LZBL-1.2\\n\\npragma solidity ^0.8.20;\\n\\nlibrary AddressCast {\\n error AddressCast_InvalidSizeForAddress();\\n error AddressCast_InvalidAddress();\\n\\n function toBytes32(bytes calldata _addressBytes) internal pure returns (bytes32 result) {\\n if (_addressBytes.length > 32) revert AddressCast_InvalidAddress();\\n result = bytes32(_addressBytes);\\n unchecked {\\n uint256 offset = 32 - _addressBytes.length;\\n result = result >> (offset * 8);\\n }\\n }\\n\\n function toBytes32(address _address) internal pure returns (bytes32 result) {\\n result = bytes32(uint256(uint160(_address)));\\n }\\n\\n function toBytes(bytes32 _addressBytes32, uint256 _size) internal pure returns (bytes memory result) {\\n if (_size == 0 || _size > 32) revert AddressCast_InvalidSizeForAddress();\\n result = new bytes(_size);\\n unchecked {\\n uint256 offset = 256 - _size * 8;\\n assembly {\\n mstore(add(result, 32), shl(offset, _addressBytes32))\\n }\\n }\\n }\\n\\n function toAddress(bytes32 _addressBytes32) internal pure returns (address result) {\\n result = address(uint160(uint256(_addressBytes32)));\\n }\\n\\n function toAddress(bytes calldata _addressBytes) internal pure returns (address result) {\\n if (_addressBytes.length != 20) revert AddressCast_InvalidAddress();\\n result = address(bytes20(_addressBytes));\\n }\\n}\\n\",\"keccak256\":\"0x2ebbcaaab3554edcd41b581f1a72ac1806afbfb8047d0d47ff098f9af30d6deb\",\"license\":\"LZBL-1.2\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol\":{\"content\":\"// SPDX-License-Identifier: LZBL-1.2\\n\\npragma solidity ^0.8.20;\\n\\nimport { Packet } from \\\"../../interfaces/ISendLib.sol\\\";\\nimport { AddressCast } from \\\"../../libs/AddressCast.sol\\\";\\n\\nlibrary PacketV1Codec {\\n using AddressCast for address;\\n using AddressCast for bytes32;\\n\\n uint8 internal constant PACKET_VERSION = 1;\\n\\n // header (version + nonce + path)\\n // version\\n uint256 private constant PACKET_VERSION_OFFSET = 0;\\n // nonce\\n uint256 private constant NONCE_OFFSET = 1;\\n // path\\n uint256 private constant SRC_EID_OFFSET = 9;\\n uint256 private constant SENDER_OFFSET = 13;\\n uint256 private constant DST_EID_OFFSET = 45;\\n uint256 private constant RECEIVER_OFFSET = 49;\\n // payload (guid + message)\\n uint256 private constant GUID_OFFSET = 81; // keccak256(nonce + path)\\n uint256 private constant MESSAGE_OFFSET = 113;\\n\\n function encode(Packet memory _packet) internal pure returns (bytes memory encodedPacket) {\\n encodedPacket = abi.encodePacked(\\n PACKET_VERSION,\\n _packet.nonce,\\n _packet.srcEid,\\n _packet.sender.toBytes32(),\\n _packet.dstEid,\\n _packet.receiver,\\n _packet.guid,\\n _packet.message\\n );\\n }\\n\\n function encodePacketHeader(Packet memory _packet) internal pure returns (bytes memory) {\\n return\\n abi.encodePacked(\\n PACKET_VERSION,\\n _packet.nonce,\\n _packet.srcEid,\\n _packet.sender.toBytes32(),\\n _packet.dstEid,\\n _packet.receiver\\n );\\n }\\n\\n function encodePayload(Packet memory _packet) internal pure returns (bytes memory) {\\n return abi.encodePacked(_packet.guid, _packet.message);\\n }\\n\\n function header(bytes calldata _packet) internal pure returns (bytes calldata) {\\n return _packet[0:GUID_OFFSET];\\n }\\n\\n function version(bytes calldata _packet) internal pure returns (uint8) {\\n return uint8(bytes1(_packet[PACKET_VERSION_OFFSET:NONCE_OFFSET]));\\n }\\n\\n function nonce(bytes calldata _packet) internal pure returns (uint64) {\\n return uint64(bytes8(_packet[NONCE_OFFSET:SRC_EID_OFFSET]));\\n }\\n\\n function srcEid(bytes calldata _packet) internal pure returns (uint32) {\\n return uint32(bytes4(_packet[SRC_EID_OFFSET:SENDER_OFFSET]));\\n }\\n\\n function sender(bytes calldata _packet) internal pure returns (bytes32) {\\n return bytes32(_packet[SENDER_OFFSET:DST_EID_OFFSET]);\\n }\\n\\n function senderAddressB20(bytes calldata _packet) internal pure returns (address) {\\n return sender(_packet).toAddress();\\n }\\n\\n function dstEid(bytes calldata _packet) internal pure returns (uint32) {\\n return uint32(bytes4(_packet[DST_EID_OFFSET:RECEIVER_OFFSET]));\\n }\\n\\n function receiver(bytes calldata _packet) internal pure returns (bytes32) {\\n return bytes32(_packet[RECEIVER_OFFSET:GUID_OFFSET]);\\n }\\n\\n function receiverB20(bytes calldata _packet) internal pure returns (address) {\\n return receiver(_packet).toAddress();\\n }\\n\\n function guid(bytes calldata _packet) internal pure returns (bytes32) {\\n return bytes32(_packet[GUID_OFFSET:MESSAGE_OFFSET]);\\n }\\n\\n function message(bytes calldata _packet) internal pure returns (bytes calldata) {\\n return bytes(_packet[MESSAGE_OFFSET:]);\\n }\\n\\n function payload(bytes calldata _packet) internal pure returns (bytes calldata) {\\n return bytes(_packet[GUID_OFFSET:]);\\n }\\n\\n function payloadHash(bytes calldata _packet) internal pure returns (bytes32) {\\n return keccak256(payload(_packet));\\n }\\n}\\n\",\"keccak256\":\"0xc84cf1bf785977fe1fbe7566eef902c2db68d0e163813ebe6c34921754802680\",\"license\":\"LZBL-1.2\"},\"@layerzerolabs/oapp-evm/contracts/precrime/libs/Packet.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\nimport { Origin } from \\\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\\\";\\nimport { PacketV1Codec } from \\\"@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol\\\";\\n\\n/**\\n * @title InboundPacket\\n * @dev Structure representing an inbound packet received by the contract.\\n */\\nstruct InboundPacket {\\n Origin origin; // Origin information of the packet.\\n uint32 dstEid; // Destination endpointId of the packet.\\n address receiver; // Receiver address for the packet.\\n bytes32 guid; // Unique identifier of the packet.\\n uint256 value; // msg.value of the packet.\\n address executor; // Executor address for the packet.\\n bytes message; // Message payload of the packet.\\n bytes extraData; // Additional arbitrary data for the packet.\\n}\\n\\n/**\\n * @title PacketDecoder\\n * @dev Library for decoding LayerZero packets.\\n */\\nlibrary PacketDecoder {\\n using PacketV1Codec for bytes;\\n\\n /**\\n * @dev Decode an inbound packet from the given packet data.\\n * @param _packet The packet data to decode.\\n * @return packet An InboundPacket struct representing the decoded packet.\\n */\\n function decode(bytes calldata _packet) internal pure returns (InboundPacket memory packet) {\\n packet.origin = Origin(_packet.srcEid(), _packet.sender(), _packet.nonce());\\n packet.dstEid = _packet.dstEid();\\n packet.receiver = _packet.receiverB20();\\n packet.guid = _packet.guid();\\n packet.message = _packet.message();\\n }\\n\\n /**\\n * @dev Decode multiple inbound packets from the given packet data and associated message values.\\n * @param _packets An array of packet data to decode.\\n * @param _packetMsgValues An array of associated message values for each packet.\\n * @return packets An array of InboundPacket structs representing the decoded packets.\\n */\\n function decode(\\n bytes[] calldata _packets,\\n uint256[] memory _packetMsgValues\\n ) internal pure returns (InboundPacket[] memory packets) {\\n packets = new InboundPacket[](_packets.length);\\n for (uint256 i = 0; i < _packets.length; i++) {\\n bytes calldata packet = _packets[i];\\n packets[i] = PacketDecoder.decode(packet);\\n // @dev Allows the verifier to specify the msg.value that gets passed in lzReceive.\\n packets[i].value = _packetMsgValues[i];\\n }\\n }\\n}\\n\",\"keccak256\":\"0xcb2fb1c5b2eb3731de78b479b9c2ab3bba326fe0b0b3a008590f18e881e457a6\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/introspection/IERC165.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Interface of the ERC-165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[ERC].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\"}},\"version\":1}", - "storageLayout": { "storage": [], "types": null }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - } - }, - "@layerzerolabs/oft-evm/contracts/OFT.sol": { - "OFT": { - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "allowance", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "needed", - "type": "uint256" - } - ], - "name": "ERC20InsufficientAllowance", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "balance", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "needed", - "type": "uint256" - } - ], - "name": "ERC20InsufficientBalance", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "approver", - "type": "address" - } - ], - "name": "ERC20InvalidApprover", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "receiver", - "type": "address" - } - ], - "name": "ERC20InvalidReceiver", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "ERC20InvalidSender", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - } - ], - "name": "ERC20InvalidSpender", - "type": "error" - }, - { "inputs": [], "name": "InvalidDelegate", "type": "error" }, - { "inputs": [], "name": "InvalidEndpointCall", "type": "error" }, - { "inputs": [], "name": "InvalidLocalDecimals", "type": "error" }, - { - "inputs": [ - { "internalType": "bytes", "name": "options", "type": "bytes" } - ], - "name": "InvalidOptions", - "type": "error" - }, - { "inputs": [], "name": "LzTokenUnavailable", "type": "error" }, - { - "inputs": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" } - ], - "name": "NoPeer", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "msgValue", - "type": "uint256" - } - ], - "name": "NotEnoughNative", - "type": "error" - }, - { - "inputs": [ - { "internalType": "address", "name": "addr", "type": "address" } - ], - "name": "OnlyEndpoint", - "type": "error" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - } - ], - "name": "OnlyPeer", - "type": "error" - }, - { "inputs": [], "name": "OnlySelf", "type": "error" }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "OwnableInvalidOwner", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "OwnableUnauthorizedAccount", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - } - ], - "name": "SafeERC20FailedOperation", - "type": "error" - }, - { - "inputs": [ - { "internalType": "bytes", "name": "result", "type": "bytes" } - ], - "name": "SimulationResult", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "amountLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minAmountLD", - "type": "uint256" - } - ], - "name": "SlippageExceeded", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "eid", - "type": "uint32" - }, - { - "internalType": "uint16", - "name": "msgType", - "type": "uint16" - }, - { - "internalType": "bytes", - "name": "options", - "type": "bytes" - } - ], - "indexed": false, - "internalType": "struct EnforcedOptionParam[]", - "name": "_enforcedOptions", - "type": "tuple[]" - } - ], - "name": "EnforcedOptionSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "inspector", - "type": "address" - } - ], - "name": "MsgInspectorSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "guid", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "address", - "name": "toAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amountReceivedLD", - "type": "uint256" - } - ], - "name": "OFTReceived", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "guid", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "address", - "name": "fromAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amountSentLD", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amountReceivedLD", - "type": "uint256" - } - ], - "name": "OFTSent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "eid", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "peer", - "type": "bytes32" - } - ], - "name": "PeerSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "preCrimeAddress", - "type": "address" - } - ], - "name": "PreCrimeSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "inputs": [], - "name": "SEND", - "outputs": [ - { "internalType": "uint16", "name": "", "type": "uint16" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "SEND_AND_CALL", - "outputs": [ - { "internalType": "uint16", "name": "", "type": "uint16" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - } - ], - "internalType": "struct Origin", - "name": "origin", - "type": "tuple" - } - ], - "name": "allowInitializePath", - "outputs": [ - { "internalType": "bool", "name": "", "type": "bool" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "spender", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "approvalRequired", - "outputs": [ - { "internalType": "bool", "name": "", "type": "bool" } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { "internalType": "bool", "name": "", "type": "bool" } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { - "internalType": "uint16", - "name": "_msgType", - "type": "uint16" - }, - { - "internalType": "bytes", - "name": "_extraOptions", - "type": "bytes" - } - ], - "name": "combineOptions", - "outputs": [ - { "internalType": "bytes", "name": "", "type": "bytes" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "decimalConversionRate", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "decimals", - "outputs": [ - { "internalType": "uint8", "name": "", "type": "uint8" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "endpoint", - "outputs": [ - { - "internalType": "contract ILayerZeroEndpointV2", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" }, - { - "internalType": "uint16", - "name": "msgType", - "type": "uint16" - } - ], - "name": "enforcedOptions", - "outputs": [ - { - "internalType": "bytes", - "name": "enforcedOption", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - } - ], - "internalType": "struct Origin", - "name": "", - "type": "tuple" - }, - { "internalType": "bytes", "name": "", "type": "bytes" }, - { - "internalType": "address", - "name": "_sender", - "type": "address" - } - ], - "name": "isComposeMsgSender", - "outputs": [ - { "internalType": "bool", "name": "", "type": "bool" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { - "internalType": "bytes32", - "name": "_peer", - "type": "bytes32" - } - ], - "name": "isPeer", - "outputs": [ - { "internalType": "bool", "name": "", "type": "bool" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - } - ], - "internalType": "struct Origin", - "name": "_origin", - "type": "tuple" - }, - { - "internalType": "bytes32", - "name": "_guid", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "_message", - "type": "bytes" - }, - { - "internalType": "address", - "name": "_executor", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "lzReceive", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - } - ], - "internalType": "struct Origin", - "name": "origin", - "type": "tuple" - }, - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "guid", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "address", - "name": "executor", - "type": "address" - }, - { - "internalType": "bytes", - "name": "message", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "extraData", - "type": "bytes" - } - ], - "internalType": "struct InboundPacket[]", - "name": "_packets", - "type": "tuple[]" - } - ], - "name": "lzReceiveAndRevert", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - } - ], - "internalType": "struct Origin", - "name": "_origin", - "type": "tuple" - }, - { - "internalType": "bytes32", - "name": "_guid", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "_message", - "type": "bytes" - }, - { - "internalType": "address", - "name": "_executor", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "lzReceiveSimulate", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "msgInspector", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [ - { "internalType": "string", "name": "", "type": "string" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "", "type": "uint32" }, - { "internalType": "bytes32", "name": "", "type": "bytes32" } - ], - "name": "nextNonce", - "outputs": [ - { "internalType": "uint64", "name": "nonce", "type": "uint64" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "oApp", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "oAppVersion", - "outputs": [ - { - "internalType": "uint64", - "name": "senderVersion", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "receiverVersion", - "type": "uint64" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [], - "name": "oftVersion", - "outputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - }, - { - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" } - ], - "name": "peers", - "outputs": [ - { "internalType": "bytes32", "name": "peer", "type": "bytes32" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "preCrime", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "to", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amountLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minAmountLD", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "extraOptions", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "composeMsg", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "oftCmd", - "type": "bytes" - } - ], - "internalType": "struct SendParam", - "name": "_sendParam", - "type": "tuple" - } - ], - "name": "quoteOFT", - "outputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "minAmountLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxAmountLD", - "type": "uint256" - } - ], - "internalType": "struct OFTLimit", - "name": "oftLimit", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "int256", - "name": "feeAmountLD", - "type": "int256" - }, - { - "internalType": "string", - "name": "description", - "type": "string" - } - ], - "internalType": "struct OFTFeeDetail[]", - "name": "oftFeeDetails", - "type": "tuple[]" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "amountSentLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "amountReceivedLD", - "type": "uint256" - } - ], - "internalType": "struct OFTReceipt", - "name": "oftReceipt", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "to", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amountLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minAmountLD", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "extraOptions", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "composeMsg", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "oftCmd", - "type": "bytes" - } - ], - "internalType": "struct SendParam", - "name": "_sendParam", - "type": "tuple" - }, - { - "internalType": "bool", - "name": "_payInLzToken", - "type": "bool" - } - ], - "name": "quoteSend", - "outputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "nativeFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "lzTokenFee", - "type": "uint256" - } - ], - "internalType": "struct MessagingFee", - "name": "msgFee", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "to", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amountLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minAmountLD", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "extraOptions", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "composeMsg", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "oftCmd", - "type": "bytes" - } - ], - "internalType": "struct SendParam", - "name": "_sendParam", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "nativeFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "lzTokenFee", - "type": "uint256" - } - ], - "internalType": "struct MessagingFee", - "name": "_fee", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_refundAddress", - "type": "address" - } - ], - "name": "send", - "outputs": [ - { - "components": [ - { - "internalType": "bytes32", - "name": "guid", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "nativeFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "lzTokenFee", - "type": "uint256" - } - ], - "internalType": "struct MessagingFee", - "name": "fee", - "type": "tuple" - } - ], - "internalType": "struct MessagingReceipt", - "name": "msgReceipt", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "amountSentLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "amountReceivedLD", - "type": "uint256" - } - ], - "internalType": "struct OFTReceipt", - "name": "oftReceipt", - "type": "tuple" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_delegate", - "type": "address" - } - ], - "name": "setDelegate", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "eid", - "type": "uint32" - }, - { - "internalType": "uint16", - "name": "msgType", - "type": "uint16" - }, - { - "internalType": "bytes", - "name": "options", - "type": "bytes" - } - ], - "internalType": "struct EnforcedOptionParam[]", - "name": "_enforcedOptions", - "type": "tuple[]" - } - ], - "name": "setEnforcedOptions", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_msgInspector", - "type": "address" - } - ], - "name": "setMsgInspector", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { - "internalType": "bytes32", - "name": "_peer", - "type": "bytes32" - } - ], - "name": "setPeer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_preCrime", - "type": "address" - } - ], - "name": "setPreCrime", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "sharedDecimals", - "outputs": [ - { "internalType": "uint8", "name": "", "type": "uint8" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "outputs": [ - { "internalType": "string", "name": "", "type": "string" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "token", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalSupply", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "to", "type": "address" }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { "internalType": "bool", "name": "", "type": "bool" } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { "internalType": "address", "name": "to", "type": "address" }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { "internalType": "bool", "name": "", "type": "bool" } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "devdoc": { - "details": "OFT is an ERC-20 token that extends the functionality of the OFTCore contract.", - "errors": { - "ERC20InsufficientAllowance(address,uint256,uint256)": [ - { - "details": "Indicates a failure with the `spender`’s `allowance`. Used in transfers.", - "params": { - "allowance": "Amount of tokens a `spender` is allowed to operate with.", - "needed": "Minimum amount required to perform a transfer.", - "spender": "Address that may be allowed to operate on tokens without being their owner." - } - } - ], - "ERC20InsufficientBalance(address,uint256,uint256)": [ - { - "details": "Indicates an error related to the current `balance` of a `sender`. Used in transfers.", - "params": { - "balance": "Current balance for the interacting account.", - "needed": "Minimum amount required to perform a transfer.", - "sender": "Address whose tokens are being transferred." - } - } - ], - "ERC20InvalidApprover(address)": [ - { - "details": "Indicates a failure with the `approver` of a token to be approved. Used in approvals.", - "params": { - "approver": "Address initiating an approval operation." - } - } - ], - "ERC20InvalidReceiver(address)": [ - { - "details": "Indicates a failure with the token `receiver`. Used in transfers.", - "params": { - "receiver": "Address to which tokens are being transferred." - } - } - ], - "ERC20InvalidSender(address)": [ - { - "details": "Indicates a failure with the token `sender`. Used in transfers.", - "params": { - "sender": "Address whose tokens are being transferred." - } - } - ], - "ERC20InvalidSpender(address)": [ - { - "details": "Indicates a failure with the `spender` to be approved. Used in approvals.", - "params": { - "spender": "Address that may be allowed to operate on tokens without being their owner." - } - } - ], - "OwnableInvalidOwner(address)": [ - { - "details": "The owner is not a valid owner account. (eg. `address(0)`)" - } - ], - "OwnableUnauthorizedAccount(address)": [ - { - "details": "The caller account is not authorized to perform an operation." - } - ], - "SafeERC20FailedOperation(address)": [ - { "details": "An operation with an ERC-20 token failed." } - ] - }, - "events": { - "Approval(address,address,uint256)": { - "details": "Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance." - }, - "PreCrimeSet(address)": { - "details": "Emitted when the preCrime contract address is set.", - "params": { - "preCrimeAddress": "The address of the preCrime contract." - } - }, - "Transfer(address,address,uint256)": { - "details": "Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero." - } - }, - "kind": "dev", - "methods": { - "allowInitializePath((uint32,bytes32,uint64))": { - "details": "This indicates to the endpoint that the OApp has enabled msgs for this particular path to be received.This defaults to assuming if a peer has been set, its initialized. Can be overridden by the OApp if there is other logic to determine this.", - "params": { - "origin": "The origin information containing the source endpoint and sender address." - }, - "returns": { "_0": "Whether the path has been initialized." } - }, - "allowance(address,address)": { - "details": "See {IERC20-allowance}." - }, - "approvalRequired()": { - "details": "In the case of OFT where the contract IS the token, approval is NOT required.", - "returns": { - "_0": "requiresApproval Needs approval of the underlying token implementation." - } - }, - "approve(address,uint256)": { - "details": "See {IERC20-approve}. NOTE: If `value` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address." - }, - "balanceOf(address)": { "details": "See {IERC20-balanceOf}." }, - "combineOptions(uint32,uint16,bytes)": { - "details": "If there is an enforced lzReceive option: - {gasLimit: 200k, msg.value: 1 ether} AND a caller supplies a lzReceive option: {gasLimit: 100k, msg.value: 0.5 ether} - The resulting options will be {gasLimit: 300k, msg.value: 1.5 ether} when the message is executed on the remote lzReceive() function.This presence of duplicated options is handled off-chain in the verifier/executor.", - "params": { - "_eid": "The endpoint ID.", - "_extraOptions": "Additional options passed by the caller.", - "_msgType": "The OAPP message type." - }, - "returns": { - "_0": "options The combination of caller specified options AND enforced options." - } - }, - "constructor": { - "details": "Constructor for the OFT contract.", - "params": { - "_delegate": "The delegate capable of making OApp configurations inside of the endpoint.", - "_lzEndpoint": "The LayerZero endpoint address.", - "_name": "The name of the OFT.", - "_symbol": "The symbol of the OFT." - } - }, - "decimals()": { - "details": "Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the default value returned by this function, unless it's overridden. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}." - }, - "isComposeMsgSender((uint32,bytes32,uint64),bytes,address)": { - "details": "_origin The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message._message The lzReceive payload.Applications can optionally choose to implement separate composeMsg senders that are NOT the bridging layer.The default sender IS the OAppReceiver implementer.", - "params": { "_sender": "The sender address." }, - "returns": { "_0": "isSender Is a valid sender." } - }, - "isPeer(uint32,bytes32)": { - "details": "Check if the peer is considered 'trusted' by the OApp.Enables OAppPreCrimeSimulator to check whether a potential Inbound Packet is from a trusted source.", - "params": { - "_eid": "The endpoint ID to check.", - "_peer": "The peer to check." - }, - "returns": { - "_0": "Whether the peer passed is considered 'trusted' by the OApp." - } - }, - "lzReceive((uint32,bytes32,uint64),bytes32,bytes,address,bytes)": { - "details": "Entry point for receiving messages or packets from the endpoint.Entry point for receiving msg/packet from the LayerZero endpoint.", - "params": { - "_executor": "The address of the executor for the received message.", - "_extraData": "Additional arbitrary data provided by the corresponding executor.", - "_guid": "The unique identifier for the received LayerZero message.", - "_message": "The payload of the received message.", - "_origin": "The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message." - } - }, - "lzReceiveAndRevert(((uint32,bytes32,uint64),uint32,address,bytes32,uint256,address,bytes,bytes)[])": { - "details": "Interface for pre-crime simulations. Always reverts at the end with the simulation results.WARNING: MUST revert at the end with the simulation results.Gives the preCrime implementation the ability to mock sending packets to the lzReceive function, WITHOUT actually executing them.", - "params": { - "_packets": "An array of InboundPacket objects representing received packets to be delivered." - } - }, - "lzReceiveSimulate((uint32,bytes32,uint64),bytes32,bytes,address,bytes)": { - "details": "Is effectively an internal function because msg.sender must be address(this). Allows resetting the call stack for 'internal' calls.", - "params": { - "_executor": "The executor address for the packet.", - "_extraData": "Additional data for the packet.", - "_guid": "The unique identifier of the packet.", - "_message": "The message payload of the packet.", - "_origin": "The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message." - } - }, - "name()": { "details": "Returns the name of the token." }, - "nextNonce(uint32,bytes32)": { - "details": "_srcEid The source endpoint ID._sender The sender address.The path nonce starts from 1. If 0 is returned it means that there is NO nonce ordered enforcement.Is required by the off-chain executor to determine the OApp expects msg execution is ordered.This is also enforced by the OApp.By default this is NOT enabled. ie. nextNonce is hardcoded to return 0.", - "returns": { "nonce": "The next nonce." } - }, - "oApp()": { - "details": "Retrieves the address of the OApp contract.The simulator contract is the base contract for the OApp by default.If the simulator is a separate contract, override this function.", - "returns": { "_0": "The address of the OApp contract." } - }, - "oAppVersion()": { - "returns": { - "receiverVersion": "The version of the OAppReceiver.sol implementation.", - "senderVersion": "The version of the OAppSender.sol implementation." - } - }, - "oftVersion()": { - "details": "interfaceId: This specific interface ID is '0x02e49c2c'.version: Indicates a cross-chain compatible msg encoding with other OFTs.If a new feature is added to the OFT cross-chain msg encoding, the version will be incremented. ie. localOFT version(x,1) CAN send messages to remoteOFT version(x,1)", - "returns": { - "interfaceId": "The interface ID.", - "version": "The version." - } - }, - "owner()": { - "details": "Returns the address of the current owner." - }, - "quoteOFT((uint32,bytes32,uint256,uint256,bytes,bytes,bytes))": { - "params": { - "_sendParam": "The parameters for the send operation." - }, - "returns": { - "oftFeeDetails": "The details of OFT fees.", - "oftLimit": "The OFT limit information.", - "oftReceipt": "The OFT receipt information." - } - }, - "quoteSend((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),bool)": { - "details": "MessagingFee: LayerZero msg fee - nativeFee: The native fee. - lzTokenFee: The lzToken fee.", - "params": { - "_payInLzToken": "Flag indicating whether the caller is paying in the LZ token.", - "_sendParam": "The parameters for the send() operation." - }, - "returns": { - "msgFee": "The calculated LayerZero messaging fee from the send() operation." - } - }, - "renounceOwnership()": { - "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner." - }, - "send((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),(uint256,uint256),address)": { - "details": "Executes the send operation.MessagingReceipt: LayerZero msg receipt - guid: The unique identifier for the sent message. - nonce: The nonce of the sent message. - fee: The LayerZero fee incurred for the message.", - "params": { - "_fee": "The calculated fee for the send() operation. - nativeFee: The native fee. - lzTokenFee: The lzToken fee.", - "_refundAddress": "The address to receive any excess funds.", - "_sendParam": "The parameters for the send operation." - }, - "returns": { - "msgReceipt": "The receipt for the send operation.", - "oftReceipt": "The OFT receipt information." - } - }, - "setDelegate(address)": { - "details": "Only the owner/admin of the OApp can call this function.Provides the ability for a delegate to set configs, on behalf of the OApp, directly on the Endpoint contract.", - "params": { - "_delegate": "The address of the delegate to be set." - } - }, - "setEnforcedOptions((uint32,uint16,bytes)[])": { - "details": "Sets the enforced options for specific endpoint and message type combinations.Only the owner/admin of the OApp can call this function.Provides a way for the OApp to enforce things like paying for PreCrime, AND/OR minimum dst lzReceive gas amounts etc.These enforced options can vary as the potential options/execution on the remote may differ as per the msgType. eg. Amount of lzReceive() gas necessary to deliver a lzCompose() message adds overhead you dont want to pay if you are only making a standard LayerZero message ie. lzReceive() WITHOUT sendCompose().", - "params": { - "_enforcedOptions": "An array of EnforcedOptionParam structures specifying enforced options." - } - }, - "setMsgInspector(address)": { - "details": "Sets the message inspector address for the OFT.This is an optional contract that can be used to inspect both 'message' and 'options'.Set it to address(0) to disable it, or set it to a contract address to enable it.", - "params": { - "_msgInspector": "The address of the message inspector." - } - }, - "setPeer(uint32,bytes32)": { - "details": "Only the owner/admin of the OApp can call this function.Indicates that the peer is trusted to send LayerZero messages to this OApp.Set this to bytes32(0) to remove the peer address.Peer is a bytes32 to accommodate non-evm chains.", - "params": { - "_eid": "The endpoint ID.", - "_peer": "The address of the peer to be associated with the corresponding endpoint." - } - }, - "setPreCrime(address)": { - "details": "Sets the preCrime contract address.", - "params": { - "_preCrime": "The address of the preCrime contract." - } - }, - "sharedDecimals()": { - "details": "Retrieves the shared decimals of the OFT.Sets an implicit cap on the amount of tokens, over uint64.max() will need some sort of outbound cap / totalSupply cap Lowest common decimal denominator between chains. Defaults to 6 decimal places to provide up to 18,446,744,073,709.551615 units (max uint64). For tokens exceeding this totalSupply(), they will need to override the sharedDecimals function with something smaller. ie. 4 sharedDecimals would be 1,844,674,407,370,955.1615", - "returns": { "_0": "The shared decimals of the OFT." } - }, - "symbol()": { - "details": "Returns the symbol of the token, usually a shorter version of the name." - }, - "token()": { - "details": "Retrieves the address of the underlying ERC20 implementation.In the case of OFT, address(this) and erc20 are the same contract.", - "returns": { "_0": "The address of the OFT token." } - }, - "totalSupply()": { "details": "See {IERC20-totalSupply}." }, - "transfer(address,uint256)": { - "details": "See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `value`." - }, - "transferFrom(address,address,uint256)": { - "details": "See {IERC20-transferFrom}. Skips emitting an {Approval} event indicating an allowance update. This is not required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve]. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `value`. - the caller must have allowance for ``from``'s tokens of at least `value`." - }, - "transferOwnership(address)": { - "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." - } - }, - "title": "OFT Contract", - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": { - "SEND()": "1f5e1334", - "SEND_AND_CALL()": "134d4f25", - "allowInitializePath((uint32,bytes32,uint64))": "ff7bd03d", - "allowance(address,address)": "dd62ed3e", - "approvalRequired()": "9f68b964", - "approve(address,uint256)": "095ea7b3", - "balanceOf(address)": "70a08231", - "combineOptions(uint32,uint16,bytes)": "bc70b354", - "decimalConversionRate()": "963efcaa", - "decimals()": "313ce567", - "endpoint()": "5e280f11", - "enforcedOptions(uint32,uint16)": "5535d461", - "isComposeMsgSender((uint32,bytes32,uint64),bytes,address)": "82413eac", - "isPeer(uint32,bytes32)": "5a0dfe4d", - "lzReceive((uint32,bytes32,uint64),bytes32,bytes,address,bytes)": "13137d65", - "lzReceiveAndRevert(((uint32,bytes32,uint64),uint32,address,bytes32,uint256,address,bytes,bytes)[])": "bd815db0", - "lzReceiveSimulate((uint32,bytes32,uint64),bytes32,bytes,address,bytes)": "d045a0dc", - "msgInspector()": "111ecdad", - "name()": "06fdde03", - "nextNonce(uint32,bytes32)": "7d25a05e", - "oApp()": "52ae2879", - "oAppVersion()": "17442b70", - "oftVersion()": "156a0d0f", - "owner()": "8da5cb5b", - "peers(uint32)": "bb0b6a53", - "preCrime()": "b731ea0a", - "quoteOFT((uint32,bytes32,uint256,uint256,bytes,bytes,bytes))": "0d35b415", - "quoteSend((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),bool)": "3b6f743b", - "renounceOwnership()": "715018a6", - "send((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),(uint256,uint256),address)": "c7c7f5b3", - "setDelegate(address)": "ca5eb5e1", - "setEnforcedOptions((uint32,uint16,bytes)[])": "b98bd070", - "setMsgInspector(address)": "6fc1b31e", - "setPeer(uint32,bytes32)": "3400288b", - "setPreCrime(address)": "d4243885", - "sharedDecimals()": "857749b0", - "symbol()": "95d89b41", - "token()": "fc0c546a", - "totalSupply()": "18160ddd", - "transfer(address,uint256)": "a9059cbb", - "transferFrom(address,address,uint256)": "23b872dd", - "transferOwnership(address)": "f2fde38b" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"allowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSpender\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidDelegate\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidEndpointCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidLocalDecimals\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"options\",\"type\":\"bytes\"}],\"name\":\"InvalidOptions\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LzTokenUnavailable\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"}],\"name\":\"NoPeer\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"msgValue\",\"type\":\"uint256\"}],\"name\":\"NotEnoughNative\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"OnlyEndpoint\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"}],\"name\":\"OnlyPeer\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlySelf\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"name\":\"SimulationResult\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountLD\",\"type\":\"uint256\"}],\"name\":\"SlippageExceeded\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"msgType\",\"type\":\"uint16\"},{\"internalType\":\"bytes\",\"name\":\"options\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"struct EnforcedOptionParam[]\",\"name\":\"_enforcedOptions\",\"type\":\"tuple[]\"}],\"name\":\"EnforcedOptionSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"inspector\",\"type\":\"address\"}],\"name\":\"MsgInspectorSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"toAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountReceivedLD\",\"type\":\"uint256\"}],\"name\":\"OFTReceived\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"fromAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountSentLD\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountReceivedLD\",\"type\":\"uint256\"}],\"name\":\"OFTSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"peer\",\"type\":\"bytes32\"}],\"name\":\"PeerSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"preCrimeAddress\",\"type\":\"address\"}],\"name\":\"PreCrimeSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"SEND\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SEND_AND_CALL\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"origin\",\"type\":\"tuple\"}],\"name\":\"allowInitializePath\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"approvalRequired\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"_msgType\",\"type\":\"uint16\"},{\"internalType\":\"bytes\",\"name\":\"_extraOptions\",\"type\":\"bytes\"}],\"name\":\"combineOptions\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimalConversionRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"endpoint\",\"outputs\":[{\"internalType\":\"contract ILayerZeroEndpointV2\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"msgType\",\"type\":\"uint16\"}],\"name\":\"enforcedOptions\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"enforcedOption\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"}],\"name\":\"isComposeMsgSender\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_peer\",\"type\":\"bytes32\"}],\"name\":\"isPeer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"_origin\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"_guid\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"_executor\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"lzReceive\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"origin\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"executor\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"internalType\":\"struct InboundPacket[]\",\"name\":\"_packets\",\"type\":\"tuple[]\"}],\"name\":\"lzReceiveAndRevert\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"_origin\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"_guid\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"_executor\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"lzReceiveSimulate\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"msgInspector\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"nextNonce\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"oApp\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"oAppVersion\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"senderVersion\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"receiverVersion\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"oftVersion\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"},{\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"}],\"name\":\"peers\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"peer\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"preCrime\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"to\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"amountLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountLD\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"extraOptions\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"composeMsg\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"oftCmd\",\"type\":\"bytes\"}],\"internalType\":\"struct SendParam\",\"name\":\"_sendParam\",\"type\":\"tuple\"}],\"name\":\"quoteOFT\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"minAmountLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountLD\",\"type\":\"uint256\"}],\"internalType\":\"struct OFTLimit\",\"name\":\"oftLimit\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"int256\",\"name\":\"feeAmountLD\",\"type\":\"int256\"},{\"internalType\":\"string\",\"name\":\"description\",\"type\":\"string\"}],\"internalType\":\"struct OFTFeeDetail[]\",\"name\":\"oftFeeDetails\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"amountSentLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountReceivedLD\",\"type\":\"uint256\"}],\"internalType\":\"struct OFTReceipt\",\"name\":\"oftReceipt\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"to\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"amountLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountLD\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"extraOptions\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"composeMsg\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"oftCmd\",\"type\":\"bytes\"}],\"internalType\":\"struct SendParam\",\"name\":\"_sendParam\",\"type\":\"tuple\"},{\"internalType\":\"bool\",\"name\":\"_payInLzToken\",\"type\":\"bool\"}],\"name\":\"quoteSend\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nativeFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lzTokenFee\",\"type\":\"uint256\"}],\"internalType\":\"struct MessagingFee\",\"name\":\"msgFee\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"to\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"amountLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountLD\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"extraOptions\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"composeMsg\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"oftCmd\",\"type\":\"bytes\"}],\"internalType\":\"struct SendParam\",\"name\":\"_sendParam\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nativeFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lzTokenFee\",\"type\":\"uint256\"}],\"internalType\":\"struct MessagingFee\",\"name\":\"_fee\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"_refundAddress\",\"type\":\"address\"}],\"name\":\"send\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nativeFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lzTokenFee\",\"type\":\"uint256\"}],\"internalType\":\"struct MessagingFee\",\"name\":\"fee\",\"type\":\"tuple\"}],\"internalType\":\"struct MessagingReceipt\",\"name\":\"msgReceipt\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"amountSentLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountReceivedLD\",\"type\":\"uint256\"}],\"internalType\":\"struct OFTReceipt\",\"name\":\"oftReceipt\",\"type\":\"tuple\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_delegate\",\"type\":\"address\"}],\"name\":\"setDelegate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"msgType\",\"type\":\"uint16\"},{\"internalType\":\"bytes\",\"name\":\"options\",\"type\":\"bytes\"}],\"internalType\":\"struct EnforcedOptionParam[]\",\"name\":\"_enforcedOptions\",\"type\":\"tuple[]\"}],\"name\":\"setEnforcedOptions\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_msgInspector\",\"type\":\"address\"}],\"name\":\"setMsgInspector\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_peer\",\"type\":\"bytes32\"}],\"name\":\"setPeer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_preCrime\",\"type\":\"address\"}],\"name\":\"setPreCrime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sharedDecimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"token\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"OFT is an ERC-20 token that extends the functionality of the OFTCore contract.\",\"errors\":{\"ERC20InsufficientAllowance(address,uint256,uint256)\":[{\"details\":\"Indicates a failure with the `spender`\\u2019s `allowance`. Used in transfers.\",\"params\":{\"allowance\":\"Amount of tokens a `spender` is allowed to operate with.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC20InsufficientBalance(address,uint256,uint256)\":[{\"details\":\"Indicates an error related to the current `balance` of a `sender`. Used in transfers.\",\"params\":{\"balance\":\"Current balance for the interacting account.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC20InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC20InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidSpender(address)\":[{\"details\":\"Indicates a failure with the `spender` to be approved. Used in approvals.\",\"params\":{\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}],\"SafeERC20FailedOperation(address)\":[{\"details\":\"An operation with an ERC-20 token failed.\"}]},\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"PreCrimeSet(address)\":{\"details\":\"Emitted when the preCrime contract address is set.\",\"params\":{\"preCrimeAddress\":\"The address of the preCrime contract.\"}},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowInitializePath((uint32,bytes32,uint64))\":{\"details\":\"This indicates to the endpoint that the OApp has enabled msgs for this particular path to be received.This defaults to assuming if a peer has been set, its initialized. Can be overridden by the OApp if there is other logic to determine this.\",\"params\":{\"origin\":\"The origin information containing the source endpoint and sender address.\"},\"returns\":{\"_0\":\"Whether the path has been initialized.\"}},\"allowance(address,address)\":{\"details\":\"See {IERC20-allowance}.\"},\"approvalRequired()\":{\"details\":\"In the case of OFT where the contract IS the token, approval is NOT required.\",\"returns\":{\"_0\":\"requiresApproval Needs approval of the underlying token implementation.\"}},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. NOTE: If `value` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"See {IERC20-balanceOf}.\"},\"combineOptions(uint32,uint16,bytes)\":{\"details\":\"If there is an enforced lzReceive option: - {gasLimit: 200k, msg.value: 1 ether} AND a caller supplies a lzReceive option: {gasLimit: 100k, msg.value: 0.5 ether} - The resulting options will be {gasLimit: 300k, msg.value: 1.5 ether} when the message is executed on the remote lzReceive() function.This presence of duplicated options is handled off-chain in the verifier/executor.\",\"params\":{\"_eid\":\"The endpoint ID.\",\"_extraOptions\":\"Additional options passed by the caller.\",\"_msgType\":\"The OAPP message type.\"},\"returns\":{\"_0\":\"options The combination of caller specified options AND enforced options.\"}},\"constructor\":{\"details\":\"Constructor for the OFT contract.\",\"params\":{\"_delegate\":\"The delegate capable of making OApp configurations inside of the endpoint.\",\"_lzEndpoint\":\"The LayerZero endpoint address.\",\"_name\":\"The name of the OFT.\",\"_symbol\":\"The symbol of the OFT.\"}},\"decimals()\":{\"details\":\"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the default value returned by this function, unless it's overridden. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.\"},\"isComposeMsgSender((uint32,bytes32,uint64),bytes,address)\":{\"details\":\"_origin The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message._message The lzReceive payload.Applications can optionally choose to implement separate composeMsg senders that are NOT the bridging layer.The default sender IS the OAppReceiver implementer.\",\"params\":{\"_sender\":\"The sender address.\"},\"returns\":{\"_0\":\"isSender Is a valid sender.\"}},\"isPeer(uint32,bytes32)\":{\"details\":\"Check if the peer is considered 'trusted' by the OApp.Enables OAppPreCrimeSimulator to check whether a potential Inbound Packet is from a trusted source.\",\"params\":{\"_eid\":\"The endpoint ID to check.\",\"_peer\":\"The peer to check.\"},\"returns\":{\"_0\":\"Whether the peer passed is considered 'trusted' by the OApp.\"}},\"lzReceive((uint32,bytes32,uint64),bytes32,bytes,address,bytes)\":{\"details\":\"Entry point for receiving messages or packets from the endpoint.Entry point for receiving msg/packet from the LayerZero endpoint.\",\"params\":{\"_executor\":\"The address of the executor for the received message.\",\"_extraData\":\"Additional arbitrary data provided by the corresponding executor.\",\"_guid\":\"The unique identifier for the received LayerZero message.\",\"_message\":\"The payload of the received message.\",\"_origin\":\"The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message.\"}},\"lzReceiveAndRevert(((uint32,bytes32,uint64),uint32,address,bytes32,uint256,address,bytes,bytes)[])\":{\"details\":\"Interface for pre-crime simulations. Always reverts at the end with the simulation results.WARNING: MUST revert at the end with the simulation results.Gives the preCrime implementation the ability to mock sending packets to the lzReceive function, WITHOUT actually executing them.\",\"params\":{\"_packets\":\"An array of InboundPacket objects representing received packets to be delivered.\"}},\"lzReceiveSimulate((uint32,bytes32,uint64),bytes32,bytes,address,bytes)\":{\"details\":\"Is effectively an internal function because msg.sender must be address(this). Allows resetting the call stack for 'internal' calls.\",\"params\":{\"_executor\":\"The executor address for the packet.\",\"_extraData\":\"Additional data for the packet.\",\"_guid\":\"The unique identifier of the packet.\",\"_message\":\"The message payload of the packet.\",\"_origin\":\"The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message.\"}},\"name()\":{\"details\":\"Returns the name of the token.\"},\"nextNonce(uint32,bytes32)\":{\"details\":\"_srcEid The source endpoint ID._sender The sender address.The path nonce starts from 1. If 0 is returned it means that there is NO nonce ordered enforcement.Is required by the off-chain executor to determine the OApp expects msg execution is ordered.This is also enforced by the OApp.By default this is NOT enabled. ie. nextNonce is hardcoded to return 0.\",\"returns\":{\"nonce\":\"The next nonce.\"}},\"oApp()\":{\"details\":\"Retrieves the address of the OApp contract.The simulator contract is the base contract for the OApp by default.If the simulator is a separate contract, override this function.\",\"returns\":{\"_0\":\"The address of the OApp contract.\"}},\"oAppVersion()\":{\"returns\":{\"receiverVersion\":\"The version of the OAppReceiver.sol implementation.\",\"senderVersion\":\"The version of the OAppSender.sol implementation.\"}},\"oftVersion()\":{\"details\":\"interfaceId: This specific interface ID is '0x02e49c2c'.version: Indicates a cross-chain compatible msg encoding with other OFTs.If a new feature is added to the OFT cross-chain msg encoding, the version will be incremented. ie. localOFT version(x,1) CAN send messages to remoteOFT version(x,1)\",\"returns\":{\"interfaceId\":\"The interface ID.\",\"version\":\"The version.\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"quoteOFT((uint32,bytes32,uint256,uint256,bytes,bytes,bytes))\":{\"params\":{\"_sendParam\":\"The parameters for the send operation.\"},\"returns\":{\"oftFeeDetails\":\"The details of OFT fees.\",\"oftLimit\":\"The OFT limit information.\",\"oftReceipt\":\"The OFT receipt information.\"}},\"quoteSend((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),bool)\":{\"details\":\"MessagingFee: LayerZero msg fee - nativeFee: The native fee. - lzTokenFee: The lzToken fee.\",\"params\":{\"_payInLzToken\":\"Flag indicating whether the caller is paying in the LZ token.\",\"_sendParam\":\"The parameters for the send() operation.\"},\"returns\":{\"msgFee\":\"The calculated LayerZero messaging fee from the send() operation.\"}},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"send((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),(uint256,uint256),address)\":{\"details\":\"Executes the send operation.MessagingReceipt: LayerZero msg receipt - guid: The unique identifier for the sent message. - nonce: The nonce of the sent message. - fee: The LayerZero fee incurred for the message.\",\"params\":{\"_fee\":\"The calculated fee for the send() operation. - nativeFee: The native fee. - lzTokenFee: The lzToken fee.\",\"_refundAddress\":\"The address to receive any excess funds.\",\"_sendParam\":\"The parameters for the send operation.\"},\"returns\":{\"msgReceipt\":\"The receipt for the send operation.\",\"oftReceipt\":\"The OFT receipt information.\"}},\"setDelegate(address)\":{\"details\":\"Only the owner/admin of the OApp can call this function.Provides the ability for a delegate to set configs, on behalf of the OApp, directly on the Endpoint contract.\",\"params\":{\"_delegate\":\"The address of the delegate to be set.\"}},\"setEnforcedOptions((uint32,uint16,bytes)[])\":{\"details\":\"Sets the enforced options for specific endpoint and message type combinations.Only the owner/admin of the OApp can call this function.Provides a way for the OApp to enforce things like paying for PreCrime, AND/OR minimum dst lzReceive gas amounts etc.These enforced options can vary as the potential options/execution on the remote may differ as per the msgType. eg. Amount of lzReceive() gas necessary to deliver a lzCompose() message adds overhead you dont want to pay if you are only making a standard LayerZero message ie. lzReceive() WITHOUT sendCompose().\",\"params\":{\"_enforcedOptions\":\"An array of EnforcedOptionParam structures specifying enforced options.\"}},\"setMsgInspector(address)\":{\"details\":\"Sets the message inspector address for the OFT.This is an optional contract that can be used to inspect both 'message' and 'options'.Set it to address(0) to disable it, or set it to a contract address to enable it.\",\"params\":{\"_msgInspector\":\"The address of the message inspector.\"}},\"setPeer(uint32,bytes32)\":{\"details\":\"Only the owner/admin of the OApp can call this function.Indicates that the peer is trusted to send LayerZero messages to this OApp.Set this to bytes32(0) to remove the peer address.Peer is a bytes32 to accommodate non-evm chains.\",\"params\":{\"_eid\":\"The endpoint ID.\",\"_peer\":\"The address of the peer to be associated with the corresponding endpoint.\"}},\"setPreCrime(address)\":{\"details\":\"Sets the preCrime contract address.\",\"params\":{\"_preCrime\":\"The address of the preCrime contract.\"}},\"sharedDecimals()\":{\"details\":\"Retrieves the shared decimals of the OFT.Sets an implicit cap on the amount of tokens, over uint64.max() will need some sort of outbound cap / totalSupply cap Lowest common decimal denominator between chains. Defaults to 6 decimal places to provide up to 18,446,744,073,709.551615 units (max uint64). For tokens exceeding this totalSupply(), they will need to override the sharedDecimals function with something smaller. ie. 4 sharedDecimals would be 1,844,674,407,370,955.1615\",\"returns\":{\"_0\":\"The shared decimals of the OFT.\"}},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"token()\":{\"details\":\"Retrieves the address of the underlying ERC20 implementation.In the case of OFT, address(this) and erc20 are the same contract.\",\"returns\":{\"_0\":\"The address of the OFT token.\"}},\"totalSupply()\":{\"details\":\"See {IERC20-totalSupply}.\"},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `value`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC20-transferFrom}. Skips emitting an {Approval} event indicating an allowance update. This is not required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve]. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `value`. - the caller must have allowance for ``from``'s tokens of at least `value`.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"title\":\"OFT Contract\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"allowInitializePath((uint32,bytes32,uint64))\":{\"notice\":\"Checks if the path initialization is allowed based on the provided origin.\"},\"approvalRequired()\":{\"notice\":\"Indicates whether the OFT contract requires approval of the 'token()' to send.\"},\"combineOptions(uint32,uint16,bytes)\":{\"notice\":\"Combines options for a given endpoint and message type.\"},\"endpoint()\":{\"notice\":\"Retrieves the LayerZero endpoint associated with the OApp.\"},\"isComposeMsgSender((uint32,bytes32,uint64),bytes,address)\":{\"notice\":\"Indicates whether an address is an approved composeMsg sender to the Endpoint.\"},\"nextNonce(uint32,bytes32)\":{\"notice\":\"Retrieves the next nonce for a given source endpoint and sender address.\"},\"oAppVersion()\":{\"notice\":\"Retrieves the OApp version information.\"},\"oftVersion()\":{\"notice\":\"Retrieves interfaceID and the version of the OFT.\"},\"peers(uint32)\":{\"notice\":\"Retrieves the peer (OApp) associated with a corresponding endpoint.\"},\"quoteOFT((uint32,bytes32,uint256,uint256,bytes,bytes,bytes))\":{\"notice\":\"Provides the fee breakdown and settings data for an OFT. Unused in the default implementation.\"},\"quoteSend((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),bool)\":{\"notice\":\"Provides a quote for the send() operation.\"},\"setDelegate(address)\":{\"notice\":\"Sets the delegate address for the OApp.\"},\"setPeer(uint32,bytes32)\":{\"notice\":\"Sets the peer address (OApp instance) for a corresponding endpoint.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@layerzerolabs/oft-evm/contracts/OFT.sol\":\"OFT\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\nimport { IMessageLibManager } from \\\"./IMessageLibManager.sol\\\";\\nimport { IMessagingComposer } from \\\"./IMessagingComposer.sol\\\";\\nimport { IMessagingChannel } from \\\"./IMessagingChannel.sol\\\";\\nimport { IMessagingContext } from \\\"./IMessagingContext.sol\\\";\\n\\nstruct MessagingParams {\\n uint32 dstEid;\\n bytes32 receiver;\\n bytes message;\\n bytes options;\\n bool payInLzToken;\\n}\\n\\nstruct MessagingReceipt {\\n bytes32 guid;\\n uint64 nonce;\\n MessagingFee fee;\\n}\\n\\nstruct MessagingFee {\\n uint256 nativeFee;\\n uint256 lzTokenFee;\\n}\\n\\nstruct Origin {\\n uint32 srcEid;\\n bytes32 sender;\\n uint64 nonce;\\n}\\n\\ninterface ILayerZeroEndpointV2 is IMessageLibManager, IMessagingComposer, IMessagingChannel, IMessagingContext {\\n event PacketSent(bytes encodedPayload, bytes options, address sendLibrary);\\n\\n event PacketVerified(Origin origin, address receiver, bytes32 payloadHash);\\n\\n event PacketDelivered(Origin origin, address receiver);\\n\\n event LzReceiveAlert(\\n address indexed receiver,\\n address indexed executor,\\n Origin origin,\\n bytes32 guid,\\n uint256 gas,\\n uint256 value,\\n bytes message,\\n bytes extraData,\\n bytes reason\\n );\\n\\n event LzTokenSet(address token);\\n\\n event DelegateSet(address sender, address delegate);\\n\\n function quote(MessagingParams calldata _params, address _sender) external view returns (MessagingFee memory);\\n\\n function send(\\n MessagingParams calldata _params,\\n address _refundAddress\\n ) external payable returns (MessagingReceipt memory);\\n\\n function verify(Origin calldata _origin, address _receiver, bytes32 _payloadHash) external;\\n\\n function verifiable(Origin calldata _origin, address _receiver) external view returns (bool);\\n\\n function initializable(Origin calldata _origin, address _receiver) external view returns (bool);\\n\\n function lzReceive(\\n Origin calldata _origin,\\n address _receiver,\\n bytes32 _guid,\\n bytes calldata _message,\\n bytes calldata _extraData\\n ) external payable;\\n\\n // oapp can burn messages partially by calling this function with its own business logic if messages are verified in order\\n function clear(address _oapp, Origin calldata _origin, bytes32 _guid, bytes calldata _message) external;\\n\\n function setLzToken(address _lzToken) external;\\n\\n function lzToken() external view returns (address);\\n\\n function nativeToken() external view returns (address);\\n\\n function setDelegate(address _delegate) external;\\n}\\n\",\"keccak256\":\"0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\nimport { Origin } from \\\"./ILayerZeroEndpointV2.sol\\\";\\n\\ninterface ILayerZeroReceiver {\\n function allowInitializePath(Origin calldata _origin) external view returns (bool);\\n\\n function nextNonce(uint32 _eid, bytes32 _sender) external view returns (uint64);\\n\\n function lzReceive(\\n Origin calldata _origin,\\n bytes32 _guid,\\n bytes calldata _message,\\n address _executor,\\n bytes calldata _extraData\\n ) external payable;\\n}\\n\",\"keccak256\":\"0x9641abba8d53b08bb517d1b74801dd15ea7b84d77a6719085bd96c8ea94e3ca0\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\nimport { IERC165 } from \\\"@openzeppelin/contracts/utils/introspection/IERC165.sol\\\";\\n\\nimport { SetConfigParam } from \\\"./IMessageLibManager.sol\\\";\\n\\nenum MessageLibType {\\n Send,\\n Receive,\\n SendAndReceive\\n}\\n\\ninterface IMessageLib is IERC165 {\\n function setConfig(address _oapp, SetConfigParam[] calldata _config) external;\\n\\n function getConfig(uint32 _eid, address _oapp, uint32 _configType) external view returns (bytes memory config);\\n\\n function isSupportedEid(uint32 _eid) external view returns (bool);\\n\\n // message libs of same major version are compatible\\n function version() external view returns (uint64 major, uint8 minor, uint8 endpointVersion);\\n\\n function messageLibType() external view returns (MessageLibType);\\n}\\n\",\"keccak256\":\"0x5cf5f24751b4e3ea1c9c5ded07cedfdfd62566b6daaffcc0144733859c9dba0c\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\nstruct SetConfigParam {\\n uint32 eid;\\n uint32 configType;\\n bytes config;\\n}\\n\\ninterface IMessageLibManager {\\n struct Timeout {\\n address lib;\\n uint256 expiry;\\n }\\n\\n event LibraryRegistered(address newLib);\\n event DefaultSendLibrarySet(uint32 eid, address newLib);\\n event DefaultReceiveLibrarySet(uint32 eid, address newLib);\\n event DefaultReceiveLibraryTimeoutSet(uint32 eid, address oldLib, uint256 expiry);\\n event SendLibrarySet(address sender, uint32 eid, address newLib);\\n event ReceiveLibrarySet(address receiver, uint32 eid, address newLib);\\n event ReceiveLibraryTimeoutSet(address receiver, uint32 eid, address oldLib, uint256 timeout);\\n\\n function registerLibrary(address _lib) external;\\n\\n function isRegisteredLibrary(address _lib) external view returns (bool);\\n\\n function getRegisteredLibraries() external view returns (address[] memory);\\n\\n function setDefaultSendLibrary(uint32 _eid, address _newLib) external;\\n\\n function defaultSendLibrary(uint32 _eid) external view returns (address);\\n\\n function setDefaultReceiveLibrary(uint32 _eid, address _newLib, uint256 _gracePeriod) external;\\n\\n function defaultReceiveLibrary(uint32 _eid) external view returns (address);\\n\\n function setDefaultReceiveLibraryTimeout(uint32 _eid, address _lib, uint256 _expiry) external;\\n\\n function defaultReceiveLibraryTimeout(uint32 _eid) external view returns (address lib, uint256 expiry);\\n\\n function isSupportedEid(uint32 _eid) external view returns (bool);\\n\\n function isValidReceiveLibrary(address _receiver, uint32 _eid, address _lib) external view returns (bool);\\n\\n /// ------------------- OApp interfaces -------------------\\n function setSendLibrary(address _oapp, uint32 _eid, address _newLib) external;\\n\\n function getSendLibrary(address _sender, uint32 _eid) external view returns (address lib);\\n\\n function isDefaultSendLibrary(address _sender, uint32 _eid) external view returns (bool);\\n\\n function setReceiveLibrary(address _oapp, uint32 _eid, address _newLib, uint256 _gracePeriod) external;\\n\\n function getReceiveLibrary(address _receiver, uint32 _eid) external view returns (address lib, bool isDefault);\\n\\n function setReceiveLibraryTimeout(address _oapp, uint32 _eid, address _lib, uint256 _expiry) external;\\n\\n function receiveLibraryTimeout(address _receiver, uint32 _eid) external view returns (address lib, uint256 expiry);\\n\\n function setConfig(address _oapp, address _lib, SetConfigParam[] calldata _params) external;\\n\\n function getConfig(\\n address _oapp,\\n address _lib,\\n uint32 _eid,\\n uint32 _configType\\n ) external view returns (bytes memory config);\\n}\\n\",\"keccak256\":\"0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\ninterface IMessagingChannel {\\n event InboundNonceSkipped(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce);\\n event PacketNilified(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce, bytes32 payloadHash);\\n event PacketBurnt(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce, bytes32 payloadHash);\\n\\n function eid() external view returns (uint32);\\n\\n // this is an emergency function if a message cannot be verified for some reasons\\n // required to provide _nextNonce to avoid race condition\\n function skip(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce) external;\\n\\n function nilify(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce, bytes32 _payloadHash) external;\\n\\n function burn(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce, bytes32 _payloadHash) external;\\n\\n function nextGuid(address _sender, uint32 _dstEid, bytes32 _receiver) external view returns (bytes32);\\n\\n function inboundNonce(address _receiver, uint32 _srcEid, bytes32 _sender) external view returns (uint64);\\n\\n function outboundNonce(address _sender, uint32 _dstEid, bytes32 _receiver) external view returns (uint64);\\n\\n function inboundPayloadHash(\\n address _receiver,\\n uint32 _srcEid,\\n bytes32 _sender,\\n uint64 _nonce\\n ) external view returns (bytes32);\\n\\n function lazyInboundNonce(address _receiver, uint32 _srcEid, bytes32 _sender) external view returns (uint64);\\n}\\n\",\"keccak256\":\"0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\ninterface IMessagingComposer {\\n event ComposeSent(address from, address to, bytes32 guid, uint16 index, bytes message);\\n event ComposeDelivered(address from, address to, bytes32 guid, uint16 index);\\n event LzComposeAlert(\\n address indexed from,\\n address indexed to,\\n address indexed executor,\\n bytes32 guid,\\n uint16 index,\\n uint256 gas,\\n uint256 value,\\n bytes message,\\n bytes extraData,\\n bytes reason\\n );\\n\\n function composeQueue(\\n address _from,\\n address _to,\\n bytes32 _guid,\\n uint16 _index\\n ) external view returns (bytes32 messageHash);\\n\\n function sendCompose(address _to, bytes32 _guid, uint16 _index, bytes calldata _message) external;\\n\\n function lzCompose(\\n address _from,\\n address _to,\\n bytes32 _guid,\\n uint16 _index,\\n bytes calldata _message,\\n bytes calldata _extraData\\n ) external payable;\\n}\\n\",\"keccak256\":\"0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\ninterface IMessagingContext {\\n function isSendingMessage() external view returns (bool);\\n\\n function getSendContext() external view returns (uint32 dstEid, address sender);\\n}\\n\",\"keccak256\":\"0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\nimport { MessagingFee } from \\\"./ILayerZeroEndpointV2.sol\\\";\\nimport { IMessageLib } from \\\"./IMessageLib.sol\\\";\\n\\nstruct Packet {\\n uint64 nonce;\\n uint32 srcEid;\\n address sender;\\n uint32 dstEid;\\n bytes32 receiver;\\n bytes32 guid;\\n bytes message;\\n}\\n\\ninterface ISendLib is IMessageLib {\\n function send(\\n Packet calldata _packet,\\n bytes calldata _options,\\n bool _payInLzToken\\n ) external returns (MessagingFee memory, bytes memory encodedPacket);\\n\\n function quote(\\n Packet calldata _packet,\\n bytes calldata _options,\\n bool _payInLzToken\\n ) external view returns (MessagingFee memory);\\n\\n function setTreasury(address _treasury) external;\\n\\n function withdrawFee(address _to, uint256 _amount) external;\\n\\n function withdrawLzTokenFee(address _lzToken, address _to, uint256 _amount) external;\\n}\\n\",\"keccak256\":\"0xf1c07bc61e7b1dce195ed12d50f87980fbf2d63cac1326fd28287f55fe0ba625\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol\":{\"content\":\"// SPDX-License-Identifier: LZBL-1.2\\n\\npragma solidity ^0.8.20;\\n\\nlibrary AddressCast {\\n error AddressCast_InvalidSizeForAddress();\\n error AddressCast_InvalidAddress();\\n\\n function toBytes32(bytes calldata _addressBytes) internal pure returns (bytes32 result) {\\n if (_addressBytes.length > 32) revert AddressCast_InvalidAddress();\\n result = bytes32(_addressBytes);\\n unchecked {\\n uint256 offset = 32 - _addressBytes.length;\\n result = result >> (offset * 8);\\n }\\n }\\n\\n function toBytes32(address _address) internal pure returns (bytes32 result) {\\n result = bytes32(uint256(uint160(_address)));\\n }\\n\\n function toBytes(bytes32 _addressBytes32, uint256 _size) internal pure returns (bytes memory result) {\\n if (_size == 0 || _size > 32) revert AddressCast_InvalidSizeForAddress();\\n result = new bytes(_size);\\n unchecked {\\n uint256 offset = 256 - _size * 8;\\n assembly {\\n mstore(add(result, 32), shl(offset, _addressBytes32))\\n }\\n }\\n }\\n\\n function toAddress(bytes32 _addressBytes32) internal pure returns (address result) {\\n result = address(uint160(uint256(_addressBytes32)));\\n }\\n\\n function toAddress(bytes calldata _addressBytes) internal pure returns (address result) {\\n if (_addressBytes.length != 20) revert AddressCast_InvalidAddress();\\n result = address(bytes20(_addressBytes));\\n }\\n}\\n\",\"keccak256\":\"0x2ebbcaaab3554edcd41b581f1a72ac1806afbfb8047d0d47ff098f9af30d6deb\",\"license\":\"LZBL-1.2\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol\":{\"content\":\"// SPDX-License-Identifier: LZBL-1.2\\n\\npragma solidity ^0.8.20;\\n\\nimport { Packet } from \\\"../../interfaces/ISendLib.sol\\\";\\nimport { AddressCast } from \\\"../../libs/AddressCast.sol\\\";\\n\\nlibrary PacketV1Codec {\\n using AddressCast for address;\\n using AddressCast for bytes32;\\n\\n uint8 internal constant PACKET_VERSION = 1;\\n\\n // header (version + nonce + path)\\n // version\\n uint256 private constant PACKET_VERSION_OFFSET = 0;\\n // nonce\\n uint256 private constant NONCE_OFFSET = 1;\\n // path\\n uint256 private constant SRC_EID_OFFSET = 9;\\n uint256 private constant SENDER_OFFSET = 13;\\n uint256 private constant DST_EID_OFFSET = 45;\\n uint256 private constant RECEIVER_OFFSET = 49;\\n // payload (guid + message)\\n uint256 private constant GUID_OFFSET = 81; // keccak256(nonce + path)\\n uint256 private constant MESSAGE_OFFSET = 113;\\n\\n function encode(Packet memory _packet) internal pure returns (bytes memory encodedPacket) {\\n encodedPacket = abi.encodePacked(\\n PACKET_VERSION,\\n _packet.nonce,\\n _packet.srcEid,\\n _packet.sender.toBytes32(),\\n _packet.dstEid,\\n _packet.receiver,\\n _packet.guid,\\n _packet.message\\n );\\n }\\n\\n function encodePacketHeader(Packet memory _packet) internal pure returns (bytes memory) {\\n return\\n abi.encodePacked(\\n PACKET_VERSION,\\n _packet.nonce,\\n _packet.srcEid,\\n _packet.sender.toBytes32(),\\n _packet.dstEid,\\n _packet.receiver\\n );\\n }\\n\\n function encodePayload(Packet memory _packet) internal pure returns (bytes memory) {\\n return abi.encodePacked(_packet.guid, _packet.message);\\n }\\n\\n function header(bytes calldata _packet) internal pure returns (bytes calldata) {\\n return _packet[0:GUID_OFFSET];\\n }\\n\\n function version(bytes calldata _packet) internal pure returns (uint8) {\\n return uint8(bytes1(_packet[PACKET_VERSION_OFFSET:NONCE_OFFSET]));\\n }\\n\\n function nonce(bytes calldata _packet) internal pure returns (uint64) {\\n return uint64(bytes8(_packet[NONCE_OFFSET:SRC_EID_OFFSET]));\\n }\\n\\n function srcEid(bytes calldata _packet) internal pure returns (uint32) {\\n return uint32(bytes4(_packet[SRC_EID_OFFSET:SENDER_OFFSET]));\\n }\\n\\n function sender(bytes calldata _packet) internal pure returns (bytes32) {\\n return bytes32(_packet[SENDER_OFFSET:DST_EID_OFFSET]);\\n }\\n\\n function senderAddressB20(bytes calldata _packet) internal pure returns (address) {\\n return sender(_packet).toAddress();\\n }\\n\\n function dstEid(bytes calldata _packet) internal pure returns (uint32) {\\n return uint32(bytes4(_packet[DST_EID_OFFSET:RECEIVER_OFFSET]));\\n }\\n\\n function receiver(bytes calldata _packet) internal pure returns (bytes32) {\\n return bytes32(_packet[RECEIVER_OFFSET:GUID_OFFSET]);\\n }\\n\\n function receiverB20(bytes calldata _packet) internal pure returns (address) {\\n return receiver(_packet).toAddress();\\n }\\n\\n function guid(bytes calldata _packet) internal pure returns (bytes32) {\\n return bytes32(_packet[GUID_OFFSET:MESSAGE_OFFSET]);\\n }\\n\\n function message(bytes calldata _packet) internal pure returns (bytes calldata) {\\n return bytes(_packet[MESSAGE_OFFSET:]);\\n }\\n\\n function payload(bytes calldata _packet) internal pure returns (bytes calldata) {\\n return bytes(_packet[GUID_OFFSET:]);\\n }\\n\\n function payloadHash(bytes calldata _packet) internal pure returns (bytes32) {\\n return keccak256(payload(_packet));\\n }\\n}\\n\",\"keccak256\":\"0xc84cf1bf785977fe1fbe7566eef902c2db68d0e163813ebe6c34921754802680\",\"license\":\"LZBL-1.2\"},\"@layerzerolabs/oapp-evm/contracts/oapp/OApp.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\n// @dev Import the 'MessagingFee' and 'MessagingReceipt' so it's exposed to OApp implementers\\n// solhint-disable-next-line no-unused-import\\nimport { OAppSender, MessagingFee, MessagingReceipt } from \\\"./OAppSender.sol\\\";\\n// @dev Import the 'Origin' so it's exposed to OApp implementers\\n// solhint-disable-next-line no-unused-import\\nimport { OAppReceiver, Origin } from \\\"./OAppReceiver.sol\\\";\\nimport { OAppCore } from \\\"./OAppCore.sol\\\";\\n\\n/**\\n * @title OApp\\n * @dev Abstract contract serving as the base for OApp implementation, combining OAppSender and OAppReceiver functionality.\\n */\\nabstract contract OApp is OAppSender, OAppReceiver {\\n /**\\n * @dev Constructor to initialize the OApp with the provided endpoint and owner.\\n * @param _endpoint The address of the LOCAL LayerZero endpoint.\\n * @param _delegate The delegate capable of making OApp configurations inside of the endpoint.\\n */\\n constructor(address _endpoint, address _delegate) OAppCore(_endpoint, _delegate) {}\\n\\n /**\\n * @notice Retrieves the OApp version information.\\n * @return senderVersion The version of the OAppSender.sol implementation.\\n * @return receiverVersion The version of the OAppReceiver.sol implementation.\\n */\\n function oAppVersion()\\n public\\n pure\\n virtual\\n override(OAppSender, OAppReceiver)\\n returns (uint64 senderVersion, uint64 receiverVersion)\\n {\\n return (SENDER_VERSION, RECEIVER_VERSION);\\n }\\n}\\n\",\"keccak256\":\"0xac362c4c291fad2f1511a968424b2e78a5ad502d1c867bd31da04be742aca8c5\",\"license\":\"MIT\"},\"@layerzerolabs/oapp-evm/contracts/oapp/OAppCore.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\nimport { IOAppCore, ILayerZeroEndpointV2 } from \\\"./interfaces/IOAppCore.sol\\\";\\n\\n/**\\n * @title OAppCore\\n * @dev Abstract contract implementing the IOAppCore interface with basic OApp configurations.\\n */\\nabstract contract OAppCore is IOAppCore, Ownable {\\n // The LayerZero endpoint associated with the given OApp\\n ILayerZeroEndpointV2 public immutable endpoint;\\n\\n // Mapping to store peers associated with corresponding endpoints\\n mapping(uint32 eid => bytes32 peer) public peers;\\n\\n /**\\n * @dev Constructor to initialize the OAppCore with the provided endpoint and delegate.\\n * @param _endpoint The address of the LOCAL Layer Zero endpoint.\\n * @param _delegate The delegate capable of making OApp configurations inside of the endpoint.\\n *\\n * @dev The delegate typically should be set as the owner of the contract.\\n */\\n constructor(address _endpoint, address _delegate) {\\n endpoint = ILayerZeroEndpointV2(_endpoint);\\n\\n if (_delegate == address(0)) revert InvalidDelegate();\\n endpoint.setDelegate(_delegate);\\n }\\n\\n /**\\n * @notice Sets the peer address (OApp instance) for a corresponding endpoint.\\n * @param _eid The endpoint ID.\\n * @param _peer The address of the peer to be associated with the corresponding endpoint.\\n *\\n * @dev Only the owner/admin of the OApp can call this function.\\n * @dev Indicates that the peer is trusted to send LayerZero messages to this OApp.\\n * @dev Set this to bytes32(0) to remove the peer address.\\n * @dev Peer is a bytes32 to accommodate non-evm chains.\\n */\\n function setPeer(uint32 _eid, bytes32 _peer) public virtual onlyOwner {\\n _setPeer(_eid, _peer);\\n }\\n\\n /**\\n * @notice Sets the peer address (OApp instance) for a corresponding endpoint.\\n * @param _eid The endpoint ID.\\n * @param _peer The address of the peer to be associated with the corresponding endpoint.\\n *\\n * @dev Indicates that the peer is trusted to send LayerZero messages to this OApp.\\n * @dev Set this to bytes32(0) to remove the peer address.\\n * @dev Peer is a bytes32 to accommodate non-evm chains.\\n */\\n function _setPeer(uint32 _eid, bytes32 _peer) internal virtual {\\n peers[_eid] = _peer;\\n emit PeerSet(_eid, _peer);\\n }\\n\\n /**\\n * @notice Internal function to get the peer address associated with a specific endpoint; reverts if NOT set.\\n * ie. the peer is set to bytes32(0).\\n * @param _eid The endpoint ID.\\n * @return peer The address of the peer associated with the specified endpoint.\\n */\\n function _getPeerOrRevert(uint32 _eid) internal view virtual returns (bytes32) {\\n bytes32 peer = peers[_eid];\\n if (peer == bytes32(0)) revert NoPeer(_eid);\\n return peer;\\n }\\n\\n /**\\n * @notice Sets the delegate address for the OApp.\\n * @param _delegate The address of the delegate to be set.\\n *\\n * @dev Only the owner/admin of the OApp can call this function.\\n * @dev Provides the ability for a delegate to set configs, on behalf of the OApp, directly on the Endpoint contract.\\n */\\n function setDelegate(address _delegate) public onlyOwner {\\n endpoint.setDelegate(_delegate);\\n }\\n}\\n\",\"keccak256\":\"0x13a9c2d1d2c1f086b8624f2e84c4a4702212daae36f701d92bb915b535cbe4cc\",\"license\":\"MIT\"},\"@layerzerolabs/oapp-evm/contracts/oapp/OAppReceiver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\nimport { IOAppReceiver, Origin } from \\\"./interfaces/IOAppReceiver.sol\\\";\\nimport { OAppCore } from \\\"./OAppCore.sol\\\";\\n\\n/**\\n * @title OAppReceiver\\n * @dev Abstract contract implementing the ILayerZeroReceiver interface and extending OAppCore for OApp receivers.\\n */\\nabstract contract OAppReceiver is IOAppReceiver, OAppCore {\\n // Custom error message for when the caller is not the registered endpoint/\\n error OnlyEndpoint(address addr);\\n\\n // @dev The version of the OAppReceiver implementation.\\n // @dev Version is bumped when changes are made to this contract.\\n uint64 internal constant RECEIVER_VERSION = 2;\\n\\n /**\\n * @notice Retrieves the OApp version information.\\n * @return senderVersion The version of the OAppSender.sol contract.\\n * @return receiverVersion The version of the OAppReceiver.sol contract.\\n *\\n * @dev Providing 0 as the default for OAppSender version. Indicates that the OAppSender is not implemented.\\n * ie. this is a RECEIVE only OApp.\\n * @dev If the OApp uses both OAppSender and OAppReceiver, then this needs to be override returning the correct versions.\\n */\\n function oAppVersion() public view virtual returns (uint64 senderVersion, uint64 receiverVersion) {\\n return (0, RECEIVER_VERSION);\\n }\\n\\n /**\\n * @notice Indicates whether an address is an approved composeMsg sender to the Endpoint.\\n * @dev _origin The origin information containing the source endpoint and sender address.\\n * - srcEid: The source chain endpoint ID.\\n * - sender: The sender address on the src chain.\\n * - nonce: The nonce of the message.\\n * @dev _message The lzReceive payload.\\n * @param _sender The sender address.\\n * @return isSender Is a valid sender.\\n *\\n * @dev Applications can optionally choose to implement separate composeMsg senders that are NOT the bridging layer.\\n * @dev The default sender IS the OAppReceiver implementer.\\n */\\n function isComposeMsgSender(\\n Origin calldata /*_origin*/,\\n bytes calldata /*_message*/,\\n address _sender\\n ) public view virtual returns (bool) {\\n return _sender == address(this);\\n }\\n\\n /**\\n * @notice Checks if the path initialization is allowed based on the provided origin.\\n * @param origin The origin information containing the source endpoint and sender address.\\n * @return Whether the path has been initialized.\\n *\\n * @dev This indicates to the endpoint that the OApp has enabled msgs for this particular path to be received.\\n * @dev This defaults to assuming if a peer has been set, its initialized.\\n * Can be overridden by the OApp if there is other logic to determine this.\\n */\\n function allowInitializePath(Origin calldata origin) public view virtual returns (bool) {\\n return peers[origin.srcEid] == origin.sender;\\n }\\n\\n /**\\n * @notice Retrieves the next nonce for a given source endpoint and sender address.\\n * @dev _srcEid The source endpoint ID.\\n * @dev _sender The sender address.\\n * @return nonce The next nonce.\\n *\\n * @dev The path nonce starts from 1. If 0 is returned it means that there is NO nonce ordered enforcement.\\n * @dev Is required by the off-chain executor to determine the OApp expects msg execution is ordered.\\n * @dev This is also enforced by the OApp.\\n * @dev By default this is NOT enabled. ie. nextNonce is hardcoded to return 0.\\n */\\n function nextNonce(uint32 /*_srcEid*/, bytes32 /*_sender*/) public view virtual returns (uint64 nonce) {\\n return 0;\\n }\\n\\n /**\\n * @dev Entry point for receiving messages or packets from the endpoint.\\n * @param _origin The origin information containing the source endpoint and sender address.\\n * - srcEid: The source chain endpoint ID.\\n * - sender: The sender address on the src chain.\\n * - nonce: The nonce of the message.\\n * @param _guid The unique identifier for the received LayerZero message.\\n * @param _message The payload of the received message.\\n * @param _executor The address of the executor for the received message.\\n * @param _extraData Additional arbitrary data provided by the corresponding executor.\\n *\\n * @dev Entry point for receiving msg/packet from the LayerZero endpoint.\\n */\\n function lzReceive(\\n Origin calldata _origin,\\n bytes32 _guid,\\n bytes calldata _message,\\n address _executor,\\n bytes calldata _extraData\\n ) public payable virtual {\\n // Ensures that only the endpoint can attempt to lzReceive() messages to this OApp.\\n if (address(endpoint) != msg.sender) revert OnlyEndpoint(msg.sender);\\n\\n // Ensure that the sender matches the expected peer for the source endpoint.\\n if (_getPeerOrRevert(_origin.srcEid) != _origin.sender) revert OnlyPeer(_origin.srcEid, _origin.sender);\\n\\n // Call the internal OApp implementation of lzReceive.\\n _lzReceive(_origin, _guid, _message, _executor, _extraData);\\n }\\n\\n /**\\n * @dev Internal function to implement lzReceive logic without needing to copy the basic parameter validation.\\n */\\n function _lzReceive(\\n Origin calldata _origin,\\n bytes32 _guid,\\n bytes calldata _message,\\n address _executor,\\n bytes calldata _extraData\\n ) internal virtual;\\n}\\n\",\"keccak256\":\"0x0174e9f1ec4cefe4b5adc26c392269c699b9ff75965364e5b7264426a462c70b\",\"license\":\"MIT\"},\"@layerzerolabs/oapp-evm/contracts/oapp/OAppSender.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\nimport { SafeERC20, IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\nimport { MessagingParams, MessagingFee, MessagingReceipt } from \\\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\\\";\\nimport { OAppCore } from \\\"./OAppCore.sol\\\";\\n\\n/**\\n * @title OAppSender\\n * @dev Abstract contract implementing the OAppSender functionality for sending messages to a LayerZero endpoint.\\n */\\nabstract contract OAppSender is OAppCore {\\n using SafeERC20 for IERC20;\\n\\n // Custom error messages\\n error NotEnoughNative(uint256 msgValue);\\n error LzTokenUnavailable();\\n\\n // @dev The version of the OAppSender implementation.\\n // @dev Version is bumped when changes are made to this contract.\\n uint64 internal constant SENDER_VERSION = 1;\\n\\n /**\\n * @notice Retrieves the OApp version information.\\n * @return senderVersion The version of the OAppSender.sol contract.\\n * @return receiverVersion The version of the OAppReceiver.sol contract.\\n *\\n * @dev Providing 0 as the default for OAppReceiver version. Indicates that the OAppReceiver is not implemented.\\n * ie. this is a SEND only OApp.\\n * @dev If the OApp uses both OAppSender and OAppReceiver, then this needs to be override returning the correct versions\\n */\\n function oAppVersion() public view virtual returns (uint64 senderVersion, uint64 receiverVersion) {\\n return (SENDER_VERSION, 0);\\n }\\n\\n /**\\n * @dev Internal function to interact with the LayerZero EndpointV2.quote() for fee calculation.\\n * @param _dstEid The destination endpoint ID.\\n * @param _message The message payload.\\n * @param _options Additional options for the message.\\n * @param _payInLzToken Flag indicating whether to pay the fee in LZ tokens.\\n * @return fee The calculated MessagingFee for the message.\\n * - nativeFee: The native fee for the message.\\n * - lzTokenFee: The LZ token fee for the message.\\n */\\n function _quote(\\n uint32 _dstEid,\\n bytes memory _message,\\n bytes memory _options,\\n bool _payInLzToken\\n ) internal view virtual returns (MessagingFee memory fee) {\\n return\\n endpoint.quote(\\n MessagingParams(_dstEid, _getPeerOrRevert(_dstEid), _message, _options, _payInLzToken),\\n address(this)\\n );\\n }\\n\\n /**\\n * @dev Internal function to interact with the LayerZero EndpointV2.send() for sending a message.\\n * @param _dstEid The destination endpoint ID.\\n * @param _message The message payload.\\n * @param _options Additional options for the message.\\n * @param _fee The calculated LayerZero fee for the message.\\n * - nativeFee: The native fee.\\n * - lzTokenFee: The lzToken fee.\\n * @param _refundAddress The address to receive any excess fee values sent to the endpoint.\\n * @return receipt The receipt for the sent message.\\n * - guid: The unique identifier for the sent message.\\n * - nonce: The nonce of the sent message.\\n * - fee: The LayerZero fee incurred for the message.\\n */\\n function _lzSend(\\n uint32 _dstEid,\\n bytes memory _message,\\n bytes memory _options,\\n MessagingFee memory _fee,\\n address _refundAddress\\n ) internal virtual returns (MessagingReceipt memory receipt) {\\n // @dev Push corresponding fees to the endpoint, any excess is sent back to the _refundAddress from the endpoint.\\n uint256 messageValue = _payNative(_fee.nativeFee);\\n if (_fee.lzTokenFee > 0) _payLzToken(_fee.lzTokenFee);\\n\\n return\\n // solhint-disable-next-line check-send-result\\n endpoint.send{ value: messageValue }(\\n MessagingParams(_dstEid, _getPeerOrRevert(_dstEid), _message, _options, _fee.lzTokenFee > 0),\\n _refundAddress\\n );\\n }\\n\\n /**\\n * @dev Internal function to pay the native fee associated with the message.\\n * @param _nativeFee The native fee to be paid.\\n * @return nativeFee The amount of native currency paid.\\n *\\n * @dev If the OApp needs to initiate MULTIPLE LayerZero messages in a single transaction,\\n * this will need to be overridden because msg.value would contain multiple lzFees.\\n * @dev Should be overridden in the event the LayerZero endpoint requires a different native currency.\\n * @dev Some EVMs use an ERC20 as a method for paying transactions/gasFees.\\n * @dev The endpoint is EITHER/OR, ie. it will NOT support both types of native payment at a time.\\n */\\n function _payNative(uint256 _nativeFee) internal virtual returns (uint256 nativeFee) {\\n if (msg.value != _nativeFee) revert NotEnoughNative(msg.value);\\n return _nativeFee;\\n }\\n\\n /**\\n * @dev Internal function to pay the LZ token fee associated with the message.\\n * @param _lzTokenFee The LZ token fee to be paid.\\n *\\n * @dev If the caller is trying to pay in the specified lzToken, then the lzTokenFee is passed to the endpoint.\\n * @dev Any excess sent, is passed back to the specified _refundAddress in the _lzSend().\\n */\\n function _payLzToken(uint256 _lzTokenFee) internal virtual {\\n // @dev Cannot cache the token because it is not immutable in the endpoint.\\n address lzToken = endpoint.lzToken();\\n if (lzToken == address(0)) revert LzTokenUnavailable();\\n\\n // Pay LZ token fee by sending tokens to the endpoint.\\n IERC20(lzToken).safeTransferFrom(msg.sender, address(endpoint), _lzTokenFee);\\n }\\n}\\n\",\"keccak256\":\"0x518cf4adca601923ed4baa6619846a253ea32b8d8775f8bc1faa3dfac7f67c20\",\"license\":\"MIT\"},\"@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppCore.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\nimport { ILayerZeroEndpointV2 } from \\\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\\\";\\n\\n/**\\n * @title IOAppCore\\n */\\ninterface IOAppCore {\\n // Custom error messages\\n error OnlyPeer(uint32 eid, bytes32 sender);\\n error NoPeer(uint32 eid);\\n error InvalidEndpointCall();\\n error InvalidDelegate();\\n\\n // Event emitted when a peer (OApp) is set for a corresponding endpoint\\n event PeerSet(uint32 eid, bytes32 peer);\\n\\n /**\\n * @notice Retrieves the OApp version information.\\n * @return senderVersion The version of the OAppSender.sol contract.\\n * @return receiverVersion The version of the OAppReceiver.sol contract.\\n */\\n function oAppVersion() external view returns (uint64 senderVersion, uint64 receiverVersion);\\n\\n /**\\n * @notice Retrieves the LayerZero endpoint associated with the OApp.\\n * @return iEndpoint The LayerZero endpoint as an interface.\\n */\\n function endpoint() external view returns (ILayerZeroEndpointV2 iEndpoint);\\n\\n /**\\n * @notice Retrieves the peer (OApp) associated with a corresponding endpoint.\\n * @param _eid The endpoint ID.\\n * @return peer The peer address (OApp instance) associated with the corresponding endpoint.\\n */\\n function peers(uint32 _eid) external view returns (bytes32 peer);\\n\\n /**\\n * @notice Sets the peer address (OApp instance) for a corresponding endpoint.\\n * @param _eid The endpoint ID.\\n * @param _peer The address of the peer to be associated with the corresponding endpoint.\\n */\\n function setPeer(uint32 _eid, bytes32 _peer) external;\\n\\n /**\\n * @notice Sets the delegate address for the OApp Core.\\n * @param _delegate The address of the delegate to be set.\\n */\\n function setDelegate(address _delegate) external;\\n}\\n\",\"keccak256\":\"0x40e49f2de74506e1da5dcaed53a39853f691647f4ceb0fccc8f49a68d3f47c58\",\"license\":\"MIT\"},\"@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppMsgInspector.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @title IOAppMsgInspector\\n * @dev Interface for the OApp Message Inspector, allowing examination of message and options contents.\\n */\\ninterface IOAppMsgInspector {\\n // Custom error message for inspection failure\\n error InspectionFailed(bytes message, bytes options);\\n\\n /**\\n * @notice Allows the inspector to examine LayerZero message contents and optionally throw a revert if invalid.\\n * @param _message The message payload to be inspected.\\n * @param _options Additional options or parameters for inspection.\\n * @return valid A boolean indicating whether the inspection passed (true) or failed (false).\\n *\\n * @dev Optionally done as a revert, OR use the boolean provided to handle the failure.\\n */\\n function inspect(bytes calldata _message, bytes calldata _options) external view returns (bool valid);\\n}\\n\",\"keccak256\":\"0x339654e699043c400cad92de209aa23855ce10211c31cf4114042cc5224d3b7c\",\"license\":\"MIT\"},\"@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppOptionsType3.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Struct representing enforced option parameters.\\n */\\nstruct EnforcedOptionParam {\\n uint32 eid; // Endpoint ID\\n uint16 msgType; // Message Type\\n bytes options; // Additional options\\n}\\n\\n/**\\n * @title IOAppOptionsType3\\n * @dev Interface for the OApp with Type 3 Options, allowing the setting and combining of enforced options.\\n */\\ninterface IOAppOptionsType3 {\\n // Custom error message for invalid options\\n error InvalidOptions(bytes options);\\n\\n // Event emitted when enforced options are set\\n event EnforcedOptionSet(EnforcedOptionParam[] _enforcedOptions);\\n\\n /**\\n * @notice Sets enforced options for specific endpoint and message type combinations.\\n * @param _enforcedOptions An array of EnforcedOptionParam structures specifying enforced options.\\n */\\n function setEnforcedOptions(EnforcedOptionParam[] calldata _enforcedOptions) external;\\n\\n /**\\n * @notice Combines options for a given endpoint and message type.\\n * @param _eid The endpoint ID.\\n * @param _msgType The OApp message type.\\n * @param _extraOptions Additional options passed by the caller.\\n * @return options The combination of caller specified options AND enforced options.\\n */\\n function combineOptions(\\n uint32 _eid,\\n uint16 _msgType,\\n bytes calldata _extraOptions\\n ) external view returns (bytes memory options);\\n}\\n\",\"keccak256\":\"0x9fc08a51e9d7c9c710c4eb26f84fe77228305ad7da63fa486ff24ebf2f3bc461\",\"license\":\"MIT\"},\"@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppReceiver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.20;\\n\\nimport { ILayerZeroReceiver, Origin } from \\\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol\\\";\\n\\ninterface IOAppReceiver is ILayerZeroReceiver {\\n /**\\n * @notice Indicates whether an address is an approved composeMsg sender to the Endpoint.\\n * @param _origin The origin information containing the source endpoint and sender address.\\n * - srcEid: The source chain endpoint ID.\\n * - sender: The sender address on the src chain.\\n * - nonce: The nonce of the message.\\n * @param _message The lzReceive payload.\\n * @param _sender The sender address.\\n * @return isSender Is a valid sender.\\n *\\n * @dev Applications can optionally choose to implement a separate composeMsg sender that is NOT the bridging layer.\\n * @dev The default sender IS the OAppReceiver implementer.\\n */\\n function isComposeMsgSender(\\n Origin calldata _origin,\\n bytes calldata _message,\\n address _sender\\n ) external view returns (bool isSender);\\n}\\n\",\"keccak256\":\"0xd26135185e19b3732746d4a9e2923e896f28dec8664bab161faea2ee26fcdc3d\",\"license\":\"MIT\"},\"@layerzerolabs/oapp-evm/contracts/oapp/libs/OAppOptionsType3.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\nimport { IOAppOptionsType3, EnforcedOptionParam } from \\\"../interfaces/IOAppOptionsType3.sol\\\";\\n\\n/**\\n * @title OAppOptionsType3\\n * @dev Abstract contract implementing the IOAppOptionsType3 interface with type 3 options.\\n */\\nabstract contract OAppOptionsType3 is IOAppOptionsType3, Ownable {\\n uint16 internal constant OPTION_TYPE_3 = 3;\\n\\n // @dev The \\\"msgType\\\" should be defined in the child contract.\\n mapping(uint32 eid => mapping(uint16 msgType => bytes enforcedOption)) public enforcedOptions;\\n\\n /**\\n * @dev Sets the enforced options for specific endpoint and message type combinations.\\n * @param _enforcedOptions An array of EnforcedOptionParam structures specifying enforced options.\\n *\\n * @dev Only the owner/admin of the OApp can call this function.\\n * @dev Provides a way for the OApp to enforce things like paying for PreCrime, AND/OR minimum dst lzReceive gas amounts etc.\\n * @dev These enforced options can vary as the potential options/execution on the remote may differ as per the msgType.\\n * eg. Amount of lzReceive() gas necessary to deliver a lzCompose() message adds overhead you dont want to pay\\n * if you are only making a standard LayerZero message ie. lzReceive() WITHOUT sendCompose().\\n */\\n function setEnforcedOptions(EnforcedOptionParam[] calldata _enforcedOptions) public virtual onlyOwner {\\n _setEnforcedOptions(_enforcedOptions);\\n }\\n\\n /**\\n * @dev Sets the enforced options for specific endpoint and message type combinations.\\n * @param _enforcedOptions An array of EnforcedOptionParam structures specifying enforced options.\\n *\\n * @dev Provides a way for the OApp to enforce things like paying for PreCrime, AND/OR minimum dst lzReceive gas amounts etc.\\n * @dev These enforced options can vary as the potential options/execution on the remote may differ as per the msgType.\\n * eg. Amount of lzReceive() gas necessary to deliver a lzCompose() message adds overhead you dont want to pay\\n * if you are only making a standard LayerZero message ie. lzReceive() WITHOUT sendCompose().\\n */\\n function _setEnforcedOptions(EnforcedOptionParam[] memory _enforcedOptions) internal virtual {\\n for (uint256 i = 0; i < _enforcedOptions.length; i++) {\\n // @dev Enforced options are only available for optionType 3, as type 1 and 2 dont support combining.\\n _assertOptionsType3(_enforcedOptions[i].options);\\n enforcedOptions[_enforcedOptions[i].eid][_enforcedOptions[i].msgType] = _enforcedOptions[i].options;\\n }\\n\\n emit EnforcedOptionSet(_enforcedOptions);\\n }\\n\\n /**\\n * @notice Combines options for a given endpoint and message type.\\n * @param _eid The endpoint ID.\\n * @param _msgType The OAPP message type.\\n * @param _extraOptions Additional options passed by the caller.\\n * @return options The combination of caller specified options AND enforced options.\\n *\\n * @dev If there is an enforced lzReceive option:\\n * - {gasLimit: 200k, msg.value: 1 ether} AND a caller supplies a lzReceive option: {gasLimit: 100k, msg.value: 0.5 ether}\\n * - The resulting options will be {gasLimit: 300k, msg.value: 1.5 ether} when the message is executed on the remote lzReceive() function.\\n * @dev This presence of duplicated options is handled off-chain in the verifier/executor.\\n */\\n function combineOptions(\\n uint32 _eid,\\n uint16 _msgType,\\n bytes calldata _extraOptions\\n ) public view virtual returns (bytes memory) {\\n bytes memory enforced = enforcedOptions[_eid][_msgType];\\n\\n // No enforced options, pass whatever the caller supplied, even if it's empty or legacy type 1/2 options.\\n if (enforced.length == 0) return _extraOptions;\\n\\n // No caller options, return enforced\\n if (_extraOptions.length == 0) return enforced;\\n\\n // @dev If caller provided _extraOptions, must be type 3 as its the ONLY type that can be combined.\\n if (_extraOptions.length >= 2) {\\n _assertOptionsType3(_extraOptions);\\n // @dev Remove the first 2 bytes containing the type from the _extraOptions and combine with enforced.\\n return bytes.concat(enforced, _extraOptions[2:]);\\n }\\n\\n // No valid set of options was found.\\n revert InvalidOptions(_extraOptions);\\n }\\n\\n /**\\n * @dev Internal function to assert that options are of type 3.\\n * @param _options The options to be checked.\\n */\\n function _assertOptionsType3(bytes memory _options) internal pure virtual {\\n uint16 optionsType;\\n assembly {\\n optionsType := mload(add(_options, 2))\\n }\\n if (optionsType != OPTION_TYPE_3) revert InvalidOptions(_options);\\n }\\n}\\n\",\"keccak256\":\"0x5275636cd47e660a2fdf6c7fe9d41ff3cc866b785cc8a9d88c1b8ca983509f01\",\"license\":\"MIT\"},\"@layerzerolabs/oapp-evm/contracts/precrime/OAppPreCrimeSimulator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\nimport { IPreCrime } from \\\"./interfaces/IPreCrime.sol\\\";\\nimport { IOAppPreCrimeSimulator, InboundPacket, Origin } from \\\"./interfaces/IOAppPreCrimeSimulator.sol\\\";\\n\\n/**\\n * @title OAppPreCrimeSimulator\\n * @dev Abstract contract serving as the base for preCrime simulation functionality in an OApp.\\n */\\nabstract contract OAppPreCrimeSimulator is IOAppPreCrimeSimulator, Ownable {\\n // The address of the preCrime implementation.\\n address public preCrime;\\n\\n /**\\n * @dev Retrieves the address of the OApp contract.\\n * @return The address of the OApp contract.\\n *\\n * @dev The simulator contract is the base contract for the OApp by default.\\n * @dev If the simulator is a separate contract, override this function.\\n */\\n function oApp() external view virtual returns (address) {\\n return address(this);\\n }\\n\\n /**\\n * @dev Sets the preCrime contract address.\\n * @param _preCrime The address of the preCrime contract.\\n */\\n function setPreCrime(address _preCrime) public virtual onlyOwner {\\n preCrime = _preCrime;\\n emit PreCrimeSet(_preCrime);\\n }\\n\\n /**\\n * @dev Interface for pre-crime simulations. Always reverts at the end with the simulation results.\\n * @param _packets An array of InboundPacket objects representing received packets to be delivered.\\n *\\n * @dev WARNING: MUST revert at the end with the simulation results.\\n * @dev Gives the preCrime implementation the ability to mock sending packets to the lzReceive function,\\n * WITHOUT actually executing them.\\n */\\n function lzReceiveAndRevert(InboundPacket[] calldata _packets) public payable virtual {\\n for (uint256 i = 0; i < _packets.length; i++) {\\n InboundPacket calldata packet = _packets[i];\\n\\n // Ignore packets that are not from trusted peers.\\n if (!isPeer(packet.origin.srcEid, packet.origin.sender)) continue;\\n\\n // @dev Because a verifier is calling this function, it doesnt have access to executor params:\\n // - address _executor\\n // - bytes calldata _extraData\\n // preCrime will NOT work for OApps that rely on these two parameters inside of their _lzReceive().\\n // They are instead stubbed to default values, address(0) and bytes(\\\"\\\")\\n // @dev Calling this.lzReceiveSimulate removes ability for assembly return 0 callstack exit,\\n // which would cause the revert to be ignored.\\n this.lzReceiveSimulate{ value: packet.value }(\\n packet.origin,\\n packet.guid,\\n packet.message,\\n packet.executor,\\n packet.extraData\\n );\\n }\\n\\n // @dev Revert with the simulation results. msg.sender must implement IPreCrime.buildSimulationResult().\\n revert SimulationResult(IPreCrime(msg.sender).buildSimulationResult());\\n }\\n\\n /**\\n * @dev Is effectively an internal function because msg.sender must be address(this).\\n * Allows resetting the call stack for 'internal' calls.\\n * @param _origin The origin information containing the source endpoint and sender address.\\n * - srcEid: The source chain endpoint ID.\\n * - sender: The sender address on the src chain.\\n * - nonce: The nonce of the message.\\n * @param _guid The unique identifier of the packet.\\n * @param _message The message payload of the packet.\\n * @param _executor The executor address for the packet.\\n * @param _extraData Additional data for the packet.\\n */\\n function lzReceiveSimulate(\\n Origin calldata _origin,\\n bytes32 _guid,\\n bytes calldata _message,\\n address _executor,\\n bytes calldata _extraData\\n ) external payable virtual {\\n // @dev Ensure ONLY can be called 'internally'.\\n if (msg.sender != address(this)) revert OnlySelf();\\n _lzReceiveSimulate(_origin, _guid, _message, _executor, _extraData);\\n }\\n\\n /**\\n * @dev Internal function to handle the OAppPreCrimeSimulator simulated receive.\\n * @param _origin The origin information.\\n * - srcEid: The source chain endpoint ID.\\n * - sender: The sender address from the src chain.\\n * - nonce: The nonce of the LayerZero message.\\n * @param _guid The GUID of the LayerZero message.\\n * @param _message The LayerZero message.\\n * @param _executor The address of the off-chain executor.\\n * @param _extraData Arbitrary data passed by the msg executor.\\n *\\n * @dev Enables the preCrime simulator to mock sending lzReceive() messages,\\n * routes the msg down from the OAppPreCrimeSimulator, and back up to the OAppReceiver.\\n */\\n function _lzReceiveSimulate(\\n Origin calldata _origin,\\n bytes32 _guid,\\n bytes calldata _message,\\n address _executor,\\n bytes calldata _extraData\\n ) internal virtual;\\n\\n /**\\n * @dev checks if the specified peer is considered 'trusted' by the OApp.\\n * @param _eid The endpoint Id to check.\\n * @param _peer The peer to check.\\n * @return Whether the peer passed is considered 'trusted' by the OApp.\\n */\\n function isPeer(uint32 _eid, bytes32 _peer) public view virtual returns (bool);\\n}\\n\",\"keccak256\":\"0x205a0abfd8b3c9af2740769f251381b84999b8e9347f3cd50de3ef8290a17750\",\"license\":\"MIT\"},\"@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IOAppPreCrimeSimulator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\n// @dev Import the Origin so it's exposed to OAppPreCrimeSimulator implementers.\\n// solhint-disable-next-line no-unused-import\\nimport { InboundPacket, Origin } from \\\"../libs/Packet.sol\\\";\\n\\n/**\\n * @title IOAppPreCrimeSimulator Interface\\n * @dev Interface for the preCrime simulation functionality in an OApp.\\n */\\ninterface IOAppPreCrimeSimulator {\\n // @dev simulation result used in PreCrime implementation\\n error SimulationResult(bytes result);\\n error OnlySelf();\\n\\n /**\\n * @dev Emitted when the preCrime contract address is set.\\n * @param preCrimeAddress The address of the preCrime contract.\\n */\\n event PreCrimeSet(address preCrimeAddress);\\n\\n /**\\n * @dev Retrieves the address of the preCrime contract implementation.\\n * @return The address of the preCrime contract.\\n */\\n function preCrime() external view returns (address);\\n\\n /**\\n * @dev Retrieves the address of the OApp contract.\\n * @return The address of the OApp contract.\\n */\\n function oApp() external view returns (address);\\n\\n /**\\n * @dev Sets the preCrime contract address.\\n * @param _preCrime The address of the preCrime contract.\\n */\\n function setPreCrime(address _preCrime) external;\\n\\n /**\\n * @dev Mocks receiving a packet, then reverts with a series of data to infer the state/result.\\n * @param _packets An array of LayerZero InboundPacket objects representing received packets.\\n */\\n function lzReceiveAndRevert(InboundPacket[] calldata _packets) external payable;\\n\\n /**\\n * @dev checks if the specified peer is considered 'trusted' by the OApp.\\n * @param _eid The endpoint Id to check.\\n * @param _peer The peer to check.\\n * @return Whether the peer passed is considered 'trusted' by the OApp.\\n */\\n function isPeer(uint32 _eid, bytes32 _peer) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x5d24db150949ea8e6437178e65a942e8c8b7f332e5daf32750f56b23b35b5bb2\",\"license\":\"MIT\"},\"@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IPreCrime.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\nstruct PreCrimePeer {\\n uint32 eid;\\n bytes32 preCrime;\\n bytes32 oApp;\\n}\\n\\n// TODO not done yet\\ninterface IPreCrime {\\n error OnlyOffChain();\\n\\n // for simulate()\\n error PacketOversize(uint256 max, uint256 actual);\\n error PacketUnsorted();\\n error SimulationFailed(bytes reason);\\n\\n // for preCrime()\\n error SimulationResultNotFound(uint32 eid);\\n error InvalidSimulationResult(uint32 eid, bytes reason);\\n error CrimeFound(bytes crime);\\n\\n function getConfig(bytes[] calldata _packets, uint256[] calldata _packetMsgValues) external returns (bytes memory);\\n\\n function simulate(\\n bytes[] calldata _packets,\\n uint256[] calldata _packetMsgValues\\n ) external payable returns (bytes memory);\\n\\n function buildSimulationResult() external view returns (bytes memory);\\n\\n function preCrime(\\n bytes[] calldata _packets,\\n uint256[] calldata _packetMsgValues,\\n bytes[] calldata _simulations\\n ) external;\\n\\n function version() external view returns (uint64 major, uint8 minor);\\n}\\n\",\"keccak256\":\"0xc8d869f27ef8ceb2e13fdf6a70682fd4dee3f90c4924eb8e125bc1e66cb6af84\",\"license\":\"MIT\"},\"@layerzerolabs/oapp-evm/contracts/precrime/libs/Packet.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\nimport { Origin } from \\\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\\\";\\nimport { PacketV1Codec } from \\\"@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol\\\";\\n\\n/**\\n * @title InboundPacket\\n * @dev Structure representing an inbound packet received by the contract.\\n */\\nstruct InboundPacket {\\n Origin origin; // Origin information of the packet.\\n uint32 dstEid; // Destination endpointId of the packet.\\n address receiver; // Receiver address for the packet.\\n bytes32 guid; // Unique identifier of the packet.\\n uint256 value; // msg.value of the packet.\\n address executor; // Executor address for the packet.\\n bytes message; // Message payload of the packet.\\n bytes extraData; // Additional arbitrary data for the packet.\\n}\\n\\n/**\\n * @title PacketDecoder\\n * @dev Library for decoding LayerZero packets.\\n */\\nlibrary PacketDecoder {\\n using PacketV1Codec for bytes;\\n\\n /**\\n * @dev Decode an inbound packet from the given packet data.\\n * @param _packet The packet data to decode.\\n * @return packet An InboundPacket struct representing the decoded packet.\\n */\\n function decode(bytes calldata _packet) internal pure returns (InboundPacket memory packet) {\\n packet.origin = Origin(_packet.srcEid(), _packet.sender(), _packet.nonce());\\n packet.dstEid = _packet.dstEid();\\n packet.receiver = _packet.receiverB20();\\n packet.guid = _packet.guid();\\n packet.message = _packet.message();\\n }\\n\\n /**\\n * @dev Decode multiple inbound packets from the given packet data and associated message values.\\n * @param _packets An array of packet data to decode.\\n * @param _packetMsgValues An array of associated message values for each packet.\\n * @return packets An array of InboundPacket structs representing the decoded packets.\\n */\\n function decode(\\n bytes[] calldata _packets,\\n uint256[] memory _packetMsgValues\\n ) internal pure returns (InboundPacket[] memory packets) {\\n packets = new InboundPacket[](_packets.length);\\n for (uint256 i = 0; i < _packets.length; i++) {\\n bytes calldata packet = _packets[i];\\n packets[i] = PacketDecoder.decode(packet);\\n // @dev Allows the verifier to specify the msg.value that gets passed in lzReceive.\\n packets[i].value = _packetMsgValues[i];\\n }\\n }\\n}\\n\",\"keccak256\":\"0xcb2fb1c5b2eb3731de78b479b9c2ab3bba326fe0b0b3a008590f18e881e457a6\",\"license\":\"MIT\"},\"@layerzerolabs/oft-evm/contracts/OFT.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\nimport { ERC20 } from \\\"@openzeppelin/contracts/token/ERC20/ERC20.sol\\\";\\nimport { IOFT, OFTCore } from \\\"./OFTCore.sol\\\";\\n\\n/**\\n * @title OFT Contract\\n * @dev OFT is an ERC-20 token that extends the functionality of the OFTCore contract.\\n */\\nabstract contract OFT is OFTCore, ERC20 {\\n /**\\n * @dev Constructor for the OFT contract.\\n * @param _name The name of the OFT.\\n * @param _symbol The symbol of the OFT.\\n * @param _lzEndpoint The LayerZero endpoint address.\\n * @param _delegate The delegate capable of making OApp configurations inside of the endpoint.\\n */\\n constructor(\\n string memory _name,\\n string memory _symbol,\\n address _lzEndpoint,\\n address _delegate\\n ) ERC20(_name, _symbol) OFTCore(decimals(), _lzEndpoint, _delegate) {}\\n\\n /**\\n * @dev Retrieves the address of the underlying ERC20 implementation.\\n * @return The address of the OFT token.\\n *\\n * @dev In the case of OFT, address(this) and erc20 are the same contract.\\n */\\n function token() public view returns (address) {\\n return address(this);\\n }\\n\\n /**\\n * @notice Indicates whether the OFT contract requires approval of the 'token()' to send.\\n * @return requiresApproval Needs approval of the underlying token implementation.\\n *\\n * @dev In the case of OFT where the contract IS the token, approval is NOT required.\\n */\\n function approvalRequired() external pure virtual returns (bool) {\\n return false;\\n }\\n\\n /**\\n * @dev Burns tokens from the sender's specified balance.\\n * @param _from The address to debit the tokens from.\\n * @param _amountLD The amount of tokens to send in local decimals.\\n * @param _minAmountLD The minimum amount to send in local decimals.\\n * @param _dstEid The destination chain ID.\\n * @return amountSentLD The amount sent in local decimals.\\n * @return amountReceivedLD The amount received in local decimals on the remote.\\n */\\n function _debit(\\n address _from,\\n uint256 _amountLD,\\n uint256 _minAmountLD,\\n uint32 _dstEid\\n ) internal virtual override returns (uint256 amountSentLD, uint256 amountReceivedLD) {\\n (amountSentLD, amountReceivedLD) = _debitView(_amountLD, _minAmountLD, _dstEid);\\n\\n // @dev In NON-default OFT, amountSentLD could be 100, with a 10% fee, the amountReceivedLD amount is 90,\\n // therefore amountSentLD CAN differ from amountReceivedLD.\\n\\n // @dev Default OFT burns on src.\\n _burn(_from, amountSentLD);\\n }\\n\\n /**\\n * @dev Credits tokens to the specified address.\\n * @param _to The address to credit the tokens to.\\n * @param _amountLD The amount of tokens to credit in local decimals.\\n * @dev _srcEid The source chain ID.\\n * @return amountReceivedLD The amount of tokens ACTUALLY received in local decimals.\\n */\\n function _credit(\\n address _to,\\n uint256 _amountLD,\\n uint32 /*_srcEid*/\\n ) internal virtual override returns (uint256 amountReceivedLD) {\\n if (_to == address(0x0)) _to = address(0xdead); // _mint(...) does not support address(0x0)\\n // @dev Default OFT mints on dst.\\n _mint(_to, _amountLD);\\n // @dev In the case of NON-default OFT, the _amountLD MIGHT not be == amountReceivedLD.\\n return _amountLD;\\n }\\n}\\n\",\"keccak256\":\"0xdc3582e4a20e02a79050c17058a1f1f42a4335d1a70be06c0a52a3fb05d4c89a\",\"license\":\"MIT\"},\"@layerzerolabs/oft-evm/contracts/OFTCore.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\nimport { OApp, Origin } from \\\"@layerzerolabs/oapp-evm/contracts/oapp/OApp.sol\\\";\\nimport { OAppOptionsType3 } from \\\"@layerzerolabs/oapp-evm/contracts/oapp/libs/OAppOptionsType3.sol\\\";\\nimport { IOAppMsgInspector } from \\\"@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppMsgInspector.sol\\\";\\n\\nimport { OAppPreCrimeSimulator } from \\\"@layerzerolabs/oapp-evm/contracts/precrime/OAppPreCrimeSimulator.sol\\\";\\n\\nimport { IOFT, SendParam, OFTLimit, OFTReceipt, OFTFeeDetail, MessagingReceipt, MessagingFee } from \\\"./interfaces/IOFT.sol\\\";\\nimport { OFTMsgCodec } from \\\"./libs/OFTMsgCodec.sol\\\";\\nimport { OFTComposeMsgCodec } from \\\"./libs/OFTComposeMsgCodec.sol\\\";\\n\\n/**\\n * @title OFTCore\\n * @dev Abstract contract for the OftChain (OFT) token.\\n */\\nabstract contract OFTCore is IOFT, OApp, OAppPreCrimeSimulator, OAppOptionsType3 {\\n using OFTMsgCodec for bytes;\\n using OFTMsgCodec for bytes32;\\n\\n // @notice Provides a conversion rate when swapping between denominations of SD and LD\\n // - shareDecimals == SD == shared Decimals\\n // - localDecimals == LD == local decimals\\n // @dev Considers that tokens have different decimal amounts on various chains.\\n // @dev eg.\\n // For a token\\n // - locally with 4 decimals --> 1.2345 => uint(12345)\\n // - remotely with 2 decimals --> 1.23 => uint(123)\\n // - The conversion rate would be 10 ** (4 - 2) = 100\\n // @dev If you want to send 1.2345 -> (uint 12345), you CANNOT represent that value on the remote,\\n // you can only display 1.23 -> uint(123).\\n // @dev To preserve the dust that would otherwise be lost on that conversion,\\n // we need to unify a denomination that can be represented on ALL chains inside of the OFT mesh\\n uint256 public immutable decimalConversionRate;\\n\\n // @notice Msg types that are used to identify the various OFT operations.\\n // @dev This can be extended in child contracts for non-default oft operations\\n // @dev These values are used in things like combineOptions() in OAppOptionsType3.sol.\\n uint16 public constant SEND = 1;\\n uint16 public constant SEND_AND_CALL = 2;\\n\\n // Address of an optional contract to inspect both 'message' and 'options'\\n address public msgInspector;\\n event MsgInspectorSet(address inspector);\\n\\n /**\\n * @dev Constructor.\\n * @param _localDecimals The decimals of the token on the local chain (this chain).\\n * @param _endpoint The address of the LayerZero endpoint.\\n * @param _delegate The delegate capable of making OApp configurations inside of the endpoint.\\n */\\n constructor(uint8 _localDecimals, address _endpoint, address _delegate) OApp(_endpoint, _delegate) {\\n if (_localDecimals < sharedDecimals()) revert InvalidLocalDecimals();\\n decimalConversionRate = 10 ** (_localDecimals - sharedDecimals());\\n }\\n\\n /**\\n * @notice Retrieves interfaceID and the version of the OFT.\\n * @return interfaceId The interface ID.\\n * @return version The version.\\n *\\n * @dev interfaceId: This specific interface ID is '0x02e49c2c'.\\n * @dev version: Indicates a cross-chain compatible msg encoding with other OFTs.\\n * @dev If a new feature is added to the OFT cross-chain msg encoding, the version will be incremented.\\n * ie. localOFT version(x,1) CAN send messages to remoteOFT version(x,1)\\n */\\n function oftVersion() external pure virtual returns (bytes4 interfaceId, uint64 version) {\\n return (type(IOFT).interfaceId, 1);\\n }\\n\\n /**\\n * @dev Retrieves the shared decimals of the OFT.\\n * @return The shared decimals of the OFT.\\n *\\n * @dev Sets an implicit cap on the amount of tokens, over uint64.max() will need some sort of outbound cap / totalSupply cap\\n * Lowest common decimal denominator between chains.\\n * Defaults to 6 decimal places to provide up to 18,446,744,073,709.551615 units (max uint64).\\n * For tokens exceeding this totalSupply(), they will need to override the sharedDecimals function with something smaller.\\n * ie. 4 sharedDecimals would be 1,844,674,407,370,955.1615\\n */\\n function sharedDecimals() public view virtual returns (uint8) {\\n return 6;\\n }\\n\\n /**\\n * @dev Sets the message inspector address for the OFT.\\n * @param _msgInspector The address of the message inspector.\\n *\\n * @dev This is an optional contract that can be used to inspect both 'message' and 'options'.\\n * @dev Set it to address(0) to disable it, or set it to a contract address to enable it.\\n */\\n function setMsgInspector(address _msgInspector) public virtual onlyOwner {\\n msgInspector = _msgInspector;\\n emit MsgInspectorSet(_msgInspector);\\n }\\n\\n /**\\n * @notice Provides the fee breakdown and settings data for an OFT. Unused in the default implementation.\\n * @param _sendParam The parameters for the send operation.\\n * @return oftLimit The OFT limit information.\\n * @return oftFeeDetails The details of OFT fees.\\n * @return oftReceipt The OFT receipt information.\\n */\\n function quoteOFT(\\n SendParam calldata _sendParam\\n )\\n external\\n view\\n virtual\\n returns (OFTLimit memory oftLimit, OFTFeeDetail[] memory oftFeeDetails, OFTReceipt memory oftReceipt)\\n {\\n uint256 minAmountLD = 0; // Unused in the default implementation.\\n uint256 maxAmountLD = type(uint64).max; // Unused in the default implementation.\\n oftLimit = OFTLimit(minAmountLD, maxAmountLD);\\n\\n // Unused in the default implementation; reserved for future complex fee details.\\n oftFeeDetails = new OFTFeeDetail[](0);\\n\\n // @dev This is the same as the send() operation, but without the actual send.\\n // - amountSentLD is the amount in local decimals that would be sent from the sender.\\n // - amountReceivedLD is the amount in local decimals that will be credited to the recipient on the remote OFT instance.\\n // @dev The amountSentLD MIGHT not equal the amount the user actually receives. HOWEVER, the default does.\\n (uint256 amountSentLD, uint256 amountReceivedLD) = _debitView(\\n _sendParam.amountLD,\\n _sendParam.minAmountLD,\\n _sendParam.dstEid\\n );\\n oftReceipt = OFTReceipt(amountSentLD, amountReceivedLD);\\n }\\n\\n /**\\n * @notice Provides a quote for the send() operation.\\n * @param _sendParam The parameters for the send() operation.\\n * @param _payInLzToken Flag indicating whether the caller is paying in the LZ token.\\n * @return msgFee The calculated LayerZero messaging fee from the send() operation.\\n *\\n * @dev MessagingFee: LayerZero msg fee\\n * - nativeFee: The native fee.\\n * - lzTokenFee: The lzToken fee.\\n */\\n function quoteSend(\\n SendParam calldata _sendParam,\\n bool _payInLzToken\\n ) external view virtual returns (MessagingFee memory msgFee) {\\n // @dev mock the amount to receive, this is the same operation used in the send().\\n // The quote is as similar as possible to the actual send() operation.\\n (, uint256 amountReceivedLD) = _debitView(_sendParam.amountLD, _sendParam.minAmountLD, _sendParam.dstEid);\\n\\n // @dev Builds the options and OFT message to quote in the endpoint.\\n (bytes memory message, bytes memory options) = _buildMsgAndOptions(_sendParam, amountReceivedLD);\\n\\n // @dev Calculates the LayerZero fee for the send() operation.\\n return _quote(_sendParam.dstEid, message, options, _payInLzToken);\\n }\\n\\n /**\\n * @dev Executes the send operation.\\n * @param _sendParam The parameters for the send operation.\\n * @param _fee The calculated fee for the send() operation.\\n * - nativeFee: The native fee.\\n * - lzTokenFee: The lzToken fee.\\n * @param _refundAddress The address to receive any excess funds.\\n * @return msgReceipt The receipt for the send operation.\\n * @return oftReceipt The OFT receipt information.\\n *\\n * @dev MessagingReceipt: LayerZero msg receipt\\n * - guid: The unique identifier for the sent message.\\n * - nonce: The nonce of the sent message.\\n * - fee: The LayerZero fee incurred for the message.\\n */\\n function send(\\n SendParam calldata _sendParam,\\n MessagingFee calldata _fee,\\n address _refundAddress\\n ) external payable virtual returns (MessagingReceipt memory msgReceipt, OFTReceipt memory oftReceipt) {\\n return _send(_sendParam, _fee, _refundAddress);\\n }\\n\\n /**\\n * @dev Internal function to execute the send operation.\\n * @param _sendParam The parameters for the send operation.\\n * @param _fee The calculated fee for the send() operation.\\n * - nativeFee: The native fee.\\n * - lzTokenFee: The lzToken fee.\\n * @param _refundAddress The address to receive any excess funds.\\n * @return msgReceipt The receipt for the send operation.\\n * @return oftReceipt The OFT receipt information.\\n *\\n * @dev MessagingReceipt: LayerZero msg receipt\\n * - guid: The unique identifier for the sent message.\\n * - nonce: The nonce of the sent message.\\n * - fee: The LayerZero fee incurred for the message.\\n */\\n function _send(\\n SendParam calldata _sendParam,\\n MessagingFee calldata _fee,\\n address _refundAddress\\n ) internal virtual returns (MessagingReceipt memory msgReceipt, OFTReceipt memory oftReceipt) {\\n // @dev Applies the token transfers regarding this send() operation.\\n // - amountSentLD is the amount in local decimals that was ACTUALLY sent/debited from the sender.\\n // - amountReceivedLD is the amount in local decimals that will be received/credited to the recipient on the remote OFT instance.\\n (uint256 amountSentLD, uint256 amountReceivedLD) = _debit(\\n msg.sender,\\n _sendParam.amountLD,\\n _sendParam.minAmountLD,\\n _sendParam.dstEid\\n );\\n\\n // @dev Builds the options and OFT message to quote in the endpoint.\\n (bytes memory message, bytes memory options) = _buildMsgAndOptions(_sendParam, amountReceivedLD);\\n\\n // @dev Sends the message to the LayerZero endpoint and returns the LayerZero msg receipt.\\n msgReceipt = _lzSend(_sendParam.dstEid, message, options, _fee, _refundAddress);\\n // @dev Formulate the OFT receipt.\\n oftReceipt = OFTReceipt(amountSentLD, amountReceivedLD);\\n\\n emit OFTSent(msgReceipt.guid, _sendParam.dstEid, msg.sender, amountSentLD, amountReceivedLD);\\n }\\n\\n /**\\n * @dev Internal function to build the message and options.\\n * @param _sendParam The parameters for the send() operation.\\n * @param _amountLD The amount in local decimals.\\n * @return message The encoded message.\\n * @return options The encoded options.\\n */\\n function _buildMsgAndOptions(\\n SendParam calldata _sendParam,\\n uint256 _amountLD\\n ) internal view virtual returns (bytes memory message, bytes memory options) {\\n bool hasCompose;\\n // @dev This generated message has the msg.sender encoded into the payload so the remote knows who the caller is.\\n (message, hasCompose) = OFTMsgCodec.encode(\\n _sendParam.to,\\n _toSD(_amountLD),\\n // @dev Must be include a non empty bytes if you want to compose, EVEN if you dont need it on the remote.\\n // EVEN if you dont require an arbitrary payload to be sent... eg. '0x01'\\n _sendParam.composeMsg\\n );\\n // @dev Change the msg type depending if its composed or not.\\n uint16 msgType = hasCompose ? SEND_AND_CALL : SEND;\\n // @dev Combine the callers _extraOptions with the enforced options via the OAppOptionsType3.\\n options = combineOptions(_sendParam.dstEid, msgType, _sendParam.extraOptions);\\n\\n // @dev Optionally inspect the message and options depending if the OApp owner has set a msg inspector.\\n // @dev If it fails inspection, needs to revert in the implementation. ie. does not rely on return boolean\\n address inspector = msgInspector; // caches the msgInspector to avoid potential double storage read\\n if (inspector != address(0)) IOAppMsgInspector(inspector).inspect(message, options);\\n }\\n\\n /**\\n * @dev Internal function to handle the receive on the LayerZero endpoint.\\n * @param _origin The origin information.\\n * - srcEid: The source chain endpoint ID.\\n * - sender: The sender address from the src chain.\\n * - nonce: The nonce of the LayerZero message.\\n * @param _guid The unique identifier for the received LayerZero message.\\n * @param _message The encoded message.\\n * @dev _executor The address of the executor.\\n * @dev _extraData Additional data.\\n */\\n function _lzReceive(\\n Origin calldata _origin,\\n bytes32 _guid,\\n bytes calldata _message,\\n address /*_executor*/, // @dev unused in the default implementation.\\n bytes calldata /*_extraData*/ // @dev unused in the default implementation.\\n ) internal virtual override {\\n // @dev The src sending chain doesnt know the address length on this chain (potentially non-evm)\\n // Thus everything is bytes32() encoded in flight.\\n address toAddress = _message.sendTo().bytes32ToAddress();\\n // @dev Credit the amountLD to the recipient and return the ACTUAL amount the recipient received in local decimals\\n uint256 amountReceivedLD = _credit(toAddress, _toLD(_message.amountSD()), _origin.srcEid);\\n\\n if (_message.isComposed()) {\\n // @dev Proprietary composeMsg format for the OFT.\\n bytes memory composeMsg = OFTComposeMsgCodec.encode(\\n _origin.nonce,\\n _origin.srcEid,\\n amountReceivedLD,\\n _message.composeMsg()\\n );\\n\\n // @dev Stores the lzCompose payload that will be executed in a separate tx.\\n // Standardizes functionality for executing arbitrary contract invocation on some non-evm chains.\\n // @dev The off-chain executor will listen and process the msg based on the src-chain-callers compose options passed.\\n // @dev The index is used when a OApp needs to compose multiple msgs on lzReceive.\\n // For default OFT implementation there is only 1 compose msg per lzReceive, thus its always 0.\\n endpoint.sendCompose(toAddress, _guid, 0 /* the index of the composed message*/, composeMsg);\\n }\\n\\n emit OFTReceived(_guid, _origin.srcEid, toAddress, amountReceivedLD);\\n }\\n\\n /**\\n * @dev Internal function to handle the OAppPreCrimeSimulator simulated receive.\\n * @param _origin The origin information.\\n * - srcEid: The source chain endpoint ID.\\n * - sender: The sender address from the src chain.\\n * - nonce: The nonce of the LayerZero message.\\n * @param _guid The unique identifier for the received LayerZero message.\\n * @param _message The LayerZero message.\\n * @param _executor The address of the off-chain executor.\\n * @param _extraData Arbitrary data passed by the msg executor.\\n *\\n * @dev Enables the preCrime simulator to mock sending lzReceive() messages,\\n * routes the msg down from the OAppPreCrimeSimulator, and back up to the OAppReceiver.\\n */\\n function _lzReceiveSimulate(\\n Origin calldata _origin,\\n bytes32 _guid,\\n bytes calldata _message,\\n address _executor,\\n bytes calldata _extraData\\n ) internal virtual override {\\n _lzReceive(_origin, _guid, _message, _executor, _extraData);\\n }\\n\\n /**\\n * @dev Check if the peer is considered 'trusted' by the OApp.\\n * @param _eid The endpoint ID to check.\\n * @param _peer The peer to check.\\n * @return Whether the peer passed is considered 'trusted' by the OApp.\\n *\\n * @dev Enables OAppPreCrimeSimulator to check whether a potential Inbound Packet is from a trusted source.\\n */\\n function isPeer(uint32 _eid, bytes32 _peer) public view virtual override returns (bool) {\\n return peers[_eid] == _peer;\\n }\\n\\n /**\\n * @dev Internal function to remove dust from the given local decimal amount.\\n * @param _amountLD The amount in local decimals.\\n * @return amountLD The amount after removing dust.\\n *\\n * @dev Prevents the loss of dust when moving amounts between chains with different decimals.\\n * @dev eg. uint(123) with a conversion rate of 100 becomes uint(100).\\n */\\n function _removeDust(uint256 _amountLD) internal view virtual returns (uint256 amountLD) {\\n return (_amountLD / decimalConversionRate) * decimalConversionRate;\\n }\\n\\n /**\\n * @dev Internal function to convert an amount from shared decimals into local decimals.\\n * @param _amountSD The amount in shared decimals.\\n * @return amountLD The amount in local decimals.\\n */\\n function _toLD(uint64 _amountSD) internal view virtual returns (uint256 amountLD) {\\n return _amountSD * decimalConversionRate;\\n }\\n\\n /**\\n * @dev Internal function to convert an amount from local decimals into shared decimals.\\n * @param _amountLD The amount in local decimals.\\n * @return amountSD The amount in shared decimals.\\n */\\n function _toSD(uint256 _amountLD) internal view virtual returns (uint64 amountSD) {\\n return uint64(_amountLD / decimalConversionRate);\\n }\\n\\n /**\\n * @dev Internal function to mock the amount mutation from a OFT debit() operation.\\n * @param _amountLD The amount to send in local decimals.\\n * @param _minAmountLD The minimum amount to send in local decimals.\\n * @dev _dstEid The destination endpoint ID.\\n * @return amountSentLD The amount sent, in local decimals.\\n * @return amountReceivedLD The amount to be received on the remote chain, in local decimals.\\n *\\n * @dev This is where things like fees would be calculated and deducted from the amount to be received on the remote.\\n */\\n function _debitView(\\n uint256 _amountLD,\\n uint256 _minAmountLD,\\n uint32 /*_dstEid*/\\n ) internal view virtual returns (uint256 amountSentLD, uint256 amountReceivedLD) {\\n // @dev Remove the dust so nothing is lost on the conversion between chains with different decimals for the token.\\n amountSentLD = _removeDust(_amountLD);\\n // @dev The amount to send is the same as amount received in the default implementation.\\n amountReceivedLD = amountSentLD;\\n\\n // @dev Check for slippage.\\n if (amountReceivedLD < _minAmountLD) {\\n revert SlippageExceeded(amountReceivedLD, _minAmountLD);\\n }\\n }\\n\\n /**\\n * @dev Internal function to perform a debit operation.\\n * @param _from The address to debit.\\n * @param _amountLD The amount to send in local decimals.\\n * @param _minAmountLD The minimum amount to send in local decimals.\\n * @param _dstEid The destination endpoint ID.\\n * @return amountSentLD The amount sent in local decimals.\\n * @return amountReceivedLD The amount received in local decimals on the remote.\\n *\\n * @dev Defined here but are intended to be overriden depending on the OFT implementation.\\n * @dev Depending on OFT implementation the _amountLD could differ from the amountReceivedLD.\\n */\\n function _debit(\\n address _from,\\n uint256 _amountLD,\\n uint256 _minAmountLD,\\n uint32 _dstEid\\n ) internal virtual returns (uint256 amountSentLD, uint256 amountReceivedLD);\\n\\n /**\\n * @dev Internal function to perform a credit operation.\\n * @param _to The address to credit.\\n * @param _amountLD The amount to credit in local decimals.\\n * @param _srcEid The source endpoint ID.\\n * @return amountReceivedLD The amount ACTUALLY received in local decimals.\\n *\\n * @dev Defined here but are intended to be overriden depending on the OFT implementation.\\n * @dev Depending on OFT implementation the _amountLD could differ from the amountReceivedLD.\\n */\\n function _credit(\\n address _to,\\n uint256 _amountLD,\\n uint32 _srcEid\\n ) internal virtual returns (uint256 amountReceivedLD);\\n}\\n\",\"keccak256\":\"0x9ce49b83455df600b52538e42028c422a322643f7ffb4f2814c72c3b970ea7be\",\"license\":\"MIT\"},\"@layerzerolabs/oft-evm/contracts/interfaces/IOFT.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\nimport { MessagingReceipt, MessagingFee } from \\\"@layerzerolabs/oapp-evm/contracts/oapp/OAppSender.sol\\\";\\n\\n/**\\n * @dev Struct representing token parameters for the OFT send() operation.\\n */\\nstruct SendParam {\\n uint32 dstEid; // Destination endpoint ID.\\n bytes32 to; // Recipient address.\\n uint256 amountLD; // Amount to send in local decimals.\\n uint256 minAmountLD; // Minimum amount to send in local decimals.\\n bytes extraOptions; // Additional options supplied by the caller to be used in the LayerZero message.\\n bytes composeMsg; // The composed message for the send() operation.\\n bytes oftCmd; // The OFT command to be executed, unused in default OFT implementations.\\n}\\n\\n/**\\n * @dev Struct representing OFT limit information.\\n * @dev These amounts can change dynamically and are up the specific oft implementation.\\n */\\nstruct OFTLimit {\\n uint256 minAmountLD; // Minimum amount in local decimals that can be sent to the recipient.\\n uint256 maxAmountLD; // Maximum amount in local decimals that can be sent to the recipient.\\n}\\n\\n/**\\n * @dev Struct representing OFT receipt information.\\n */\\nstruct OFTReceipt {\\n uint256 amountSentLD; // Amount of tokens ACTUALLY debited from the sender in local decimals.\\n // @dev In non-default implementations, the amountReceivedLD COULD differ from this value.\\n uint256 amountReceivedLD; // Amount of tokens to be received on the remote side.\\n}\\n\\n/**\\n * @dev Struct representing OFT fee details.\\n * @dev Future proof mechanism to provide a standardized way to communicate fees to things like a UI.\\n */\\nstruct OFTFeeDetail {\\n int256 feeAmountLD; // Amount of the fee in local decimals.\\n string description; // Description of the fee.\\n}\\n\\n/**\\n * @title IOFT\\n * @dev Interface for the OftChain (OFT) token.\\n * @dev Does not inherit ERC20 to accommodate usage by OFTAdapter as well.\\n * @dev This specific interface ID is '0x02e49c2c'.\\n */\\ninterface IOFT {\\n // Custom error messages\\n error InvalidLocalDecimals();\\n error SlippageExceeded(uint256 amountLD, uint256 minAmountLD);\\n\\n // Events\\n event OFTSent(\\n bytes32 indexed guid, // GUID of the OFT message.\\n uint32 dstEid, // Destination Endpoint ID.\\n address indexed fromAddress, // Address of the sender on the src chain.\\n uint256 amountSentLD, // Amount of tokens sent in local decimals.\\n uint256 amountReceivedLD // Amount of tokens received in local decimals.\\n );\\n event OFTReceived(\\n bytes32 indexed guid, // GUID of the OFT message.\\n uint32 srcEid, // Source Endpoint ID.\\n address indexed toAddress, // Address of the recipient on the dst chain.\\n uint256 amountReceivedLD // Amount of tokens received in local decimals.\\n );\\n\\n /**\\n * @notice Retrieves interfaceID and the version of the OFT.\\n * @return interfaceId The interface ID.\\n * @return version The version.\\n *\\n * @dev interfaceId: This specific interface ID is '0x02e49c2c'.\\n * @dev version: Indicates a cross-chain compatible msg encoding with other OFTs.\\n * @dev If a new feature is added to the OFT cross-chain msg encoding, the version will be incremented.\\n * ie. localOFT version(x,1) CAN send messages to remoteOFT version(x,1)\\n */\\n function oftVersion() external view returns (bytes4 interfaceId, uint64 version);\\n\\n /**\\n * @notice Retrieves the address of the token associated with the OFT.\\n * @return token The address of the ERC20 token implementation.\\n */\\n function token() external view returns (address);\\n\\n /**\\n * @notice Indicates whether the OFT contract requires approval of the 'token()' to send.\\n * @return requiresApproval Needs approval of the underlying token implementation.\\n *\\n * @dev Allows things like wallet implementers to determine integration requirements,\\n * without understanding the underlying token implementation.\\n */\\n function approvalRequired() external view returns (bool);\\n\\n /**\\n * @notice Retrieves the shared decimals of the OFT.\\n * @return sharedDecimals The shared decimals of the OFT.\\n */\\n function sharedDecimals() external view returns (uint8);\\n\\n /**\\n * @notice Provides the fee breakdown and settings data for an OFT. Unused in the default implementation.\\n * @param _sendParam The parameters for the send operation.\\n * @return limit The OFT limit information.\\n * @return oftFeeDetails The details of OFT fees.\\n * @return receipt The OFT receipt information.\\n */\\n function quoteOFT(\\n SendParam calldata _sendParam\\n ) external view returns (OFTLimit memory, OFTFeeDetail[] memory oftFeeDetails, OFTReceipt memory);\\n\\n /**\\n * @notice Provides a quote for the send() operation.\\n * @param _sendParam The parameters for the send() operation.\\n * @param _payInLzToken Flag indicating whether the caller is paying in the LZ token.\\n * @return fee The calculated LayerZero messaging fee from the send() operation.\\n *\\n * @dev MessagingFee: LayerZero msg fee\\n * - nativeFee: The native fee.\\n * - lzTokenFee: The lzToken fee.\\n */\\n function quoteSend(SendParam calldata _sendParam, bool _payInLzToken) external view returns (MessagingFee memory);\\n\\n /**\\n * @notice Executes the send() operation.\\n * @param _sendParam The parameters for the send operation.\\n * @param _fee The fee information supplied by the caller.\\n * - nativeFee: The native fee.\\n * - lzTokenFee: The lzToken fee.\\n * @param _refundAddress The address to receive any excess funds from fees etc. on the src.\\n * @return receipt The LayerZero messaging receipt from the send() operation.\\n * @return oftReceipt The OFT receipt information.\\n *\\n * @dev MessagingReceipt: LayerZero msg receipt\\n * - guid: The unique identifier for the sent message.\\n * - nonce: The nonce of the sent message.\\n * - fee: The LayerZero fee incurred for the message.\\n */\\n function send(\\n SendParam calldata _sendParam,\\n MessagingFee calldata _fee,\\n address _refundAddress\\n ) external payable returns (MessagingReceipt memory, OFTReceipt memory);\\n}\\n\",\"keccak256\":\"0x7ba6bb62fba7ee83451cfb0e727ddeef0e96b4388bd4e9ff0fc6ce103e1101c8\",\"license\":\"MIT\"},\"@layerzerolabs/oft-evm/contracts/libs/OFTComposeMsgCodec.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\nlibrary OFTComposeMsgCodec {\\n // Offset constants for decoding composed messages\\n uint8 private constant NONCE_OFFSET = 8;\\n uint8 private constant SRC_EID_OFFSET = 12;\\n uint8 private constant AMOUNT_LD_OFFSET = 44;\\n uint8 private constant COMPOSE_FROM_OFFSET = 76;\\n\\n /**\\n * @dev Encodes a OFT composed message.\\n * @param _nonce The nonce value.\\n * @param _srcEid The source endpoint ID.\\n * @param _amountLD The amount in local decimals.\\n * @param _composeMsg The composed message.\\n * @return _msg The encoded Composed message.\\n */\\n function encode(\\n uint64 _nonce,\\n uint32 _srcEid,\\n uint256 _amountLD,\\n bytes memory _composeMsg // 0x[composeFrom][composeMsg]\\n ) internal pure returns (bytes memory _msg) {\\n _msg = abi.encodePacked(_nonce, _srcEid, _amountLD, _composeMsg);\\n }\\n\\n /**\\n * @dev Retrieves the nonce for the composed message.\\n * @param _msg The message.\\n * @return The nonce value.\\n */\\n function nonce(bytes calldata _msg) internal pure returns (uint64) {\\n return uint64(bytes8(_msg[:NONCE_OFFSET]));\\n }\\n\\n /**\\n * @dev Retrieves the source endpoint ID for the composed message.\\n * @param _msg The message.\\n * @return The source endpoint ID.\\n */\\n function srcEid(bytes calldata _msg) internal pure returns (uint32) {\\n return uint32(bytes4(_msg[NONCE_OFFSET:SRC_EID_OFFSET]));\\n }\\n\\n /**\\n * @dev Retrieves the amount in local decimals from the composed message.\\n * @param _msg The message.\\n * @return The amount in local decimals.\\n */\\n function amountLD(bytes calldata _msg) internal pure returns (uint256) {\\n return uint256(bytes32(_msg[SRC_EID_OFFSET:AMOUNT_LD_OFFSET]));\\n }\\n\\n /**\\n * @dev Retrieves the composeFrom value from the composed message.\\n * @param _msg The message.\\n * @return The composeFrom value.\\n */\\n function composeFrom(bytes calldata _msg) internal pure returns (bytes32) {\\n return bytes32(_msg[AMOUNT_LD_OFFSET:COMPOSE_FROM_OFFSET]);\\n }\\n\\n /**\\n * @dev Retrieves the composed message.\\n * @param _msg The message.\\n * @return The composed message.\\n */\\n function composeMsg(bytes calldata _msg) internal pure returns (bytes memory) {\\n return _msg[COMPOSE_FROM_OFFSET:];\\n }\\n\\n /**\\n * @dev Converts an address to bytes32.\\n * @param _addr The address to convert.\\n * @return The bytes32 representation of the address.\\n */\\n function addressToBytes32(address _addr) internal pure returns (bytes32) {\\n return bytes32(uint256(uint160(_addr)));\\n }\\n\\n /**\\n * @dev Converts bytes32 to an address.\\n * @param _b The bytes32 value to convert.\\n * @return The address representation of bytes32.\\n */\\n function bytes32ToAddress(bytes32 _b) internal pure returns (address) {\\n return address(uint160(uint256(_b)));\\n }\\n}\\n\",\"keccak256\":\"0xaae73d6eb8b9561c43f1802f3c416c00ccd35f172b711f9781ccdf1b25a40db5\",\"license\":\"MIT\"},\"@layerzerolabs/oft-evm/contracts/libs/OFTMsgCodec.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\nlibrary OFTMsgCodec {\\n // Offset constants for encoding and decoding OFT messages\\n uint8 private constant SEND_TO_OFFSET = 32;\\n uint8 private constant SEND_AMOUNT_SD_OFFSET = 40;\\n\\n /**\\n * @dev Encodes an OFT LayerZero message.\\n * @param _sendTo The recipient address.\\n * @param _amountShared The amount in shared decimals.\\n * @param _composeMsg The composed message.\\n * @return _msg The encoded message.\\n * @return hasCompose A boolean indicating whether the message has a composed payload.\\n */\\n function encode(\\n bytes32 _sendTo,\\n uint64 _amountShared,\\n bytes memory _composeMsg\\n ) internal view returns (bytes memory _msg, bool hasCompose) {\\n hasCompose = _composeMsg.length > 0;\\n // @dev Remote chains will want to know the composed function caller ie. msg.sender on the src.\\n _msg = hasCompose\\n ? abi.encodePacked(_sendTo, _amountShared, addressToBytes32(msg.sender), _composeMsg)\\n : abi.encodePacked(_sendTo, _amountShared);\\n }\\n\\n /**\\n * @dev Checks if the OFT message is composed.\\n * @param _msg The OFT message.\\n * @return A boolean indicating whether the message is composed.\\n */\\n function isComposed(bytes calldata _msg) internal pure returns (bool) {\\n return _msg.length > SEND_AMOUNT_SD_OFFSET;\\n }\\n\\n /**\\n * @dev Retrieves the recipient address from the OFT message.\\n * @param _msg The OFT message.\\n * @return The recipient address.\\n */\\n function sendTo(bytes calldata _msg) internal pure returns (bytes32) {\\n return bytes32(_msg[:SEND_TO_OFFSET]);\\n }\\n\\n /**\\n * @dev Retrieves the amount in shared decimals from the OFT message.\\n * @param _msg The OFT message.\\n * @return The amount in shared decimals.\\n */\\n function amountSD(bytes calldata _msg) internal pure returns (uint64) {\\n return uint64(bytes8(_msg[SEND_TO_OFFSET:SEND_AMOUNT_SD_OFFSET]));\\n }\\n\\n /**\\n * @dev Retrieves the composed message from the OFT message.\\n * @param _msg The OFT message.\\n * @return The composed message.\\n */\\n function composeMsg(bytes calldata _msg) internal pure returns (bytes memory) {\\n return _msg[SEND_AMOUNT_SD_OFFSET:];\\n }\\n\\n /**\\n * @dev Converts an address to bytes32.\\n * @param _addr The address to convert.\\n * @return The bytes32 representation of the address.\\n */\\n function addressToBytes32(address _addr) internal pure returns (bytes32) {\\n return bytes32(uint256(uint160(_addr)));\\n }\\n\\n /**\\n * @dev Converts bytes32 to an address.\\n * @param _b The bytes32 value to convert.\\n * @return The address representation of bytes32.\\n */\\n function bytes32ToAddress(bytes32 _b) internal pure returns (address) {\\n return address(uint160(uint256(_b)));\\n }\\n}\\n\",\"keccak256\":\"0x5358948017669c03e157f871d8c38e988f9004dbd0801ad3119d2487f0d40b0b\",\"license\":\"MIT\"},\"@openzeppelin/contracts/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {Context} from \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * The initial owner is set to the address provided by the deployer. This can\\n * later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n /**\\n * @dev The caller account is not authorized to perform an operation.\\n */\\n error OwnableUnauthorizedAccount(address account);\\n\\n /**\\n * @dev The owner is not a valid owner account. (eg. `address(0)`)\\n */\\n error OwnableInvalidOwner(address owner);\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the address provided by the deployer as the initial owner.\\n */\\n constructor(address initialOwner) {\\n if (initialOwner == address(0)) {\\n revert OwnableInvalidOwner(address(0));\\n }\\n _transferOwnership(initialOwner);\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n _checkOwner();\\n _;\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if the sender is not the owner.\\n */\\n function _checkOwner() internal view virtual {\\n if (owner() != _msgSender()) {\\n revert OwnableUnauthorizedAccount(_msgSender());\\n }\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby disabling any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n if (newOwner == address(0)) {\\n revert OwnableInvalidOwner(address(0));\\n }\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n}\\n\",\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\"},\"@openzeppelin/contracts/interfaces/IERC1363.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (interfaces/IERC1363.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {IERC20} from \\\"./IERC20.sol\\\";\\nimport {IERC165} from \\\"./IERC165.sol\\\";\\n\\n/**\\n * @title IERC1363\\n * @dev Interface of the ERC-1363 standard as defined in the https://eips.ethereum.org/EIPS/eip-1363[ERC-1363].\\n *\\n * Defines an extension interface for ERC-20 tokens that supports executing code on a recipient contract\\n * after `transfer` or `transferFrom`, or code on a spender contract after `approve`, in a single transaction.\\n */\\ninterface IERC1363 is IERC20, IERC165 {\\n /*\\n * Note: the ERC-165 identifier for this interface is 0xb0202a11.\\n * 0xb0202a11 ===\\n * bytes4(keccak256('transferAndCall(address,uint256)')) ^\\n * bytes4(keccak256('transferAndCall(address,uint256,bytes)')) ^\\n * bytes4(keccak256('transferFromAndCall(address,address,uint256)')) ^\\n * bytes4(keccak256('transferFromAndCall(address,address,uint256,bytes)')) ^\\n * bytes4(keccak256('approveAndCall(address,uint256)')) ^\\n * bytes4(keccak256('approveAndCall(address,uint256,bytes)'))\\n */\\n\\n /**\\n * @dev Moves a `value` amount of tokens from the caller's account to `to`\\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\\n * @param to The address which you want to transfer to.\\n * @param value The amount of tokens to be transferred.\\n * @return A boolean value indicating whether the operation succeeded unless throwing.\\n */\\n function transferAndCall(address to, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from the caller's account to `to`\\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\\n * @param to The address which you want to transfer to.\\n * @param value The amount of tokens to be transferred.\\n * @param data Additional data with no specified format, sent in call to `to`.\\n * @return A boolean value indicating whether the operation succeeded unless throwing.\\n */\\n function transferAndCall(address to, uint256 value, bytes calldata data) external returns (bool);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism\\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\\n * @param from The address which you want to send tokens from.\\n * @param to The address which you want to transfer to.\\n * @param value The amount of tokens to be transferred.\\n * @return A boolean value indicating whether the operation succeeded unless throwing.\\n */\\n function transferFromAndCall(address from, address to, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism\\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\\n * @param from The address which you want to send tokens from.\\n * @param to The address which you want to transfer to.\\n * @param value The amount of tokens to be transferred.\\n * @param data Additional data with no specified format, sent in call to `to`.\\n * @return A boolean value indicating whether the operation succeeded unless throwing.\\n */\\n function transferFromAndCall(address from, address to, uint256 value, bytes calldata data) external returns (bool);\\n\\n /**\\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\\n * caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`.\\n * @param spender The address which will spend the funds.\\n * @param value The amount of tokens to be spent.\\n * @return A boolean value indicating whether the operation succeeded unless throwing.\\n */\\n function approveAndCall(address spender, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\\n * caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`.\\n * @param spender The address which will spend the funds.\\n * @param value The amount of tokens to be spent.\\n * @param data Additional data with no specified format, sent in call to `spender`.\\n * @return A boolean value indicating whether the operation succeeded unless throwing.\\n */\\n function approveAndCall(address spender, uint256 value, bytes calldata data) external returns (bool);\\n}\\n\",\"keccak256\":\"0x9b6b3e7803bc5f2f8cd7ad57db8ac1def61a9930a5a3107df4882e028a9605d7\",\"license\":\"MIT\"},\"@openzeppelin/contracts/interfaces/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC165.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {IERC165} from \\\"../utils/introspection/IERC165.sol\\\";\\n\",\"keccak256\":\"0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724\",\"license\":\"MIT\"},\"@openzeppelin/contracts/interfaces/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC20.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {IERC20} from \\\"../token/ERC20/IERC20.sol\\\";\\n\",\"keccak256\":\"0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c\",\"license\":\"MIT\"},\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (interfaces/draft-IERC6093.sol)\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Standard ERC-20 Errors\\n * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-20 tokens.\\n */\\ninterface IERC20Errors {\\n /**\\n * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.\\n * @param sender Address whose tokens are being transferred.\\n * @param balance Current balance for the interacting account.\\n * @param needed Minimum amount required to perform a transfer.\\n */\\n error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed);\\n\\n /**\\n * @dev Indicates a failure with the token `sender`. Used in transfers.\\n * @param sender Address whose tokens are being transferred.\\n */\\n error ERC20InvalidSender(address sender);\\n\\n /**\\n * @dev Indicates a failure with the token `receiver`. Used in transfers.\\n * @param receiver Address to which tokens are being transferred.\\n */\\n error ERC20InvalidReceiver(address receiver);\\n\\n /**\\n * @dev Indicates a failure with the `spender`\\u2019s `allowance`. Used in transfers.\\n * @param spender Address that may be allowed to operate on tokens without being their owner.\\n * @param allowance Amount of tokens a `spender` is allowed to operate with.\\n * @param needed Minimum amount required to perform a transfer.\\n */\\n error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed);\\n\\n /**\\n * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\\n * @param approver Address initiating an approval operation.\\n */\\n error ERC20InvalidApprover(address approver);\\n\\n /**\\n * @dev Indicates a failure with the `spender` to be approved. Used in approvals.\\n * @param spender Address that may be allowed to operate on tokens without being their owner.\\n */\\n error ERC20InvalidSpender(address spender);\\n}\\n\\n/**\\n * @dev Standard ERC-721 Errors\\n * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-721 tokens.\\n */\\ninterface IERC721Errors {\\n /**\\n * @dev Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in ERC-20.\\n * Used in balance queries.\\n * @param owner Address of the current owner of a token.\\n */\\n error ERC721InvalidOwner(address owner);\\n\\n /**\\n * @dev Indicates a `tokenId` whose `owner` is the zero address.\\n * @param tokenId Identifier number of a token.\\n */\\n error ERC721NonexistentToken(uint256 tokenId);\\n\\n /**\\n * @dev Indicates an error related to the ownership over a particular token. Used in transfers.\\n * @param sender Address whose tokens are being transferred.\\n * @param tokenId Identifier number of a token.\\n * @param owner Address of the current owner of a token.\\n */\\n error ERC721IncorrectOwner(address sender, uint256 tokenId, address owner);\\n\\n /**\\n * @dev Indicates a failure with the token `sender`. Used in transfers.\\n * @param sender Address whose tokens are being transferred.\\n */\\n error ERC721InvalidSender(address sender);\\n\\n /**\\n * @dev Indicates a failure with the token `receiver`. Used in transfers.\\n * @param receiver Address to which tokens are being transferred.\\n */\\n error ERC721InvalidReceiver(address receiver);\\n\\n /**\\n * @dev Indicates a failure with the `operator`\\u2019s approval. Used in transfers.\\n * @param operator Address that may be allowed to operate on tokens without being their owner.\\n * @param tokenId Identifier number of a token.\\n */\\n error ERC721InsufficientApproval(address operator, uint256 tokenId);\\n\\n /**\\n * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\\n * @param approver Address initiating an approval operation.\\n */\\n error ERC721InvalidApprover(address approver);\\n\\n /**\\n * @dev Indicates a failure with the `operator` to be approved. Used in approvals.\\n * @param operator Address that may be allowed to operate on tokens without being their owner.\\n */\\n error ERC721InvalidOperator(address operator);\\n}\\n\\n/**\\n * @dev Standard ERC-1155 Errors\\n * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-1155 tokens.\\n */\\ninterface IERC1155Errors {\\n /**\\n * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.\\n * @param sender Address whose tokens are being transferred.\\n * @param balance Current balance for the interacting account.\\n * @param needed Minimum amount required to perform a transfer.\\n * @param tokenId Identifier number of a token.\\n */\\n error ERC1155InsufficientBalance(address sender, uint256 balance, uint256 needed, uint256 tokenId);\\n\\n /**\\n * @dev Indicates a failure with the token `sender`. Used in transfers.\\n * @param sender Address whose tokens are being transferred.\\n */\\n error ERC1155InvalidSender(address sender);\\n\\n /**\\n * @dev Indicates a failure with the token `receiver`. Used in transfers.\\n * @param receiver Address to which tokens are being transferred.\\n */\\n error ERC1155InvalidReceiver(address receiver);\\n\\n /**\\n * @dev Indicates a failure with the `operator`\\u2019s approval. Used in transfers.\\n * @param operator Address that may be allowed to operate on tokens without being their owner.\\n * @param owner Address of the current owner of a token.\\n */\\n error ERC1155MissingApprovalForAll(address operator, address owner);\\n\\n /**\\n * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\\n * @param approver Address initiating an approval operation.\\n */\\n error ERC1155InvalidApprover(address approver);\\n\\n /**\\n * @dev Indicates a failure with the `operator` to be approved. Used in approvals.\\n * @param operator Address that may be allowed to operate on tokens without being their owner.\\n */\\n error ERC1155InvalidOperator(address operator);\\n\\n /**\\n * @dev Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation.\\n * Used in batch transfers.\\n * @param idsLength Length of the array of token identifiers\\n * @param valuesLength Length of the array of token amounts\\n */\\n error ERC1155InvalidArrayLength(uint256 idsLength, uint256 valuesLength);\\n}\\n\",\"keccak256\":\"0x880da465c203cec76b10d72dbd87c80f387df4102274f23eea1f9c9b0918792b\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/ERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/ERC20.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {IERC20} from \\\"./IERC20.sol\\\";\\nimport {IERC20Metadata} from \\\"./extensions/IERC20Metadata.sol\\\";\\nimport {Context} from \\\"../../utils/Context.sol\\\";\\nimport {IERC20Errors} from \\\"../../interfaces/draft-IERC6093.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC20} interface.\\n *\\n * This implementation is agnostic to the way tokens are created. This means\\n * that a supply mechanism has to be added in a derived contract using {_mint}.\\n *\\n * TIP: For a detailed writeup see our guide\\n * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\\n * to implement supply mechanisms].\\n *\\n * The default value of {decimals} is 18. To change this, you should override\\n * this function so it returns a different value.\\n *\\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\\n * instead returning `false` on failure. This behavior is nonetheless\\n * conventional and does not conflict with the expectations of ERC-20\\n * applications.\\n */\\nabstract contract ERC20 is Context, IERC20, IERC20Metadata, IERC20Errors {\\n mapping(address account => uint256) private _balances;\\n\\n mapping(address account => mapping(address spender => uint256)) private _allowances;\\n\\n uint256 private _totalSupply;\\n\\n string private _name;\\n string private _symbol;\\n\\n /**\\n * @dev Sets the values for {name} and {symbol}.\\n *\\n * All two of these values are immutable: they can only be set once during\\n * construction.\\n */\\n constructor(string memory name_, string memory symbol_) {\\n _name = name_;\\n _symbol = symbol_;\\n }\\n\\n /**\\n * @dev Returns the name of the token.\\n */\\n function name() public view virtual returns (string memory) {\\n return _name;\\n }\\n\\n /**\\n * @dev Returns the symbol of the token, usually a shorter version of the\\n * name.\\n */\\n function symbol() public view virtual returns (string memory) {\\n return _symbol;\\n }\\n\\n /**\\n * @dev Returns the number of decimals used to get its user representation.\\n * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n * be displayed to a user as `5.05` (`505 / 10 ** 2`).\\n *\\n * Tokens usually opt for a value of 18, imitating the relationship between\\n * Ether and Wei. This is the default value returned by this function, unless\\n * it's overridden.\\n *\\n * NOTE: This information is only used for _display_ purposes: it in\\n * no way affects any of the arithmetic of the contract, including\\n * {IERC20-balanceOf} and {IERC20-transfer}.\\n */\\n function decimals() public view virtual returns (uint8) {\\n return 18;\\n }\\n\\n /**\\n * @dev See {IERC20-totalSupply}.\\n */\\n function totalSupply() public view virtual returns (uint256) {\\n return _totalSupply;\\n }\\n\\n /**\\n * @dev See {IERC20-balanceOf}.\\n */\\n function balanceOf(address account) public view virtual returns (uint256) {\\n return _balances[account];\\n }\\n\\n /**\\n * @dev See {IERC20-transfer}.\\n *\\n * Requirements:\\n *\\n * - `to` cannot be the zero address.\\n * - the caller must have a balance of at least `value`.\\n */\\n function transfer(address to, uint256 value) public virtual returns (bool) {\\n address owner = _msgSender();\\n _transfer(owner, to, value);\\n return true;\\n }\\n\\n /**\\n * @dev See {IERC20-allowance}.\\n */\\n function allowance(address owner, address spender) public view virtual returns (uint256) {\\n return _allowances[owner][spender];\\n }\\n\\n /**\\n * @dev See {IERC20-approve}.\\n *\\n * NOTE: If `value` is the maximum `uint256`, the allowance is not updated on\\n * `transferFrom`. This is semantically equivalent to an infinite approval.\\n *\\n * Requirements:\\n *\\n * - `spender` cannot be the zero address.\\n */\\n function approve(address spender, uint256 value) public virtual returns (bool) {\\n address owner = _msgSender();\\n _approve(owner, spender, value);\\n return true;\\n }\\n\\n /**\\n * @dev See {IERC20-transferFrom}.\\n *\\n * Skips emitting an {Approval} event indicating an allowance update. This is not\\n * required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve].\\n *\\n * NOTE: Does not update the allowance if the current allowance\\n * is the maximum `uint256`.\\n *\\n * Requirements:\\n *\\n * - `from` and `to` cannot be the zero address.\\n * - `from` must have a balance of at least `value`.\\n * - the caller must have allowance for ``from``'s tokens of at least\\n * `value`.\\n */\\n function transferFrom(address from, address to, uint256 value) public virtual returns (bool) {\\n address spender = _msgSender();\\n _spendAllowance(from, spender, value);\\n _transfer(from, to, value);\\n return true;\\n }\\n\\n /**\\n * @dev Moves a `value` amount of tokens from `from` to `to`.\\n *\\n * This internal function is equivalent to {transfer}, and can be used to\\n * e.g. implement automatic token fees, slashing mechanisms, etc.\\n *\\n * Emits a {Transfer} event.\\n *\\n * NOTE: This function is not virtual, {_update} should be overridden instead.\\n */\\n function _transfer(address from, address to, uint256 value) internal {\\n if (from == address(0)) {\\n revert ERC20InvalidSender(address(0));\\n }\\n if (to == address(0)) {\\n revert ERC20InvalidReceiver(address(0));\\n }\\n _update(from, to, value);\\n }\\n\\n /**\\n * @dev Transfers a `value` amount of tokens from `from` to `to`, or alternatively mints (or burns) if `from`\\n * (or `to`) is the zero address. All customizations to transfers, mints, and burns should be done by overriding\\n * this function.\\n *\\n * Emits a {Transfer} event.\\n */\\n function _update(address from, address to, uint256 value) internal virtual {\\n if (from == address(0)) {\\n // Overflow check required: The rest of the code assumes that totalSupply never overflows\\n _totalSupply += value;\\n } else {\\n uint256 fromBalance = _balances[from];\\n if (fromBalance < value) {\\n revert ERC20InsufficientBalance(from, fromBalance, value);\\n }\\n unchecked {\\n // Overflow not possible: value <= fromBalance <= totalSupply.\\n _balances[from] = fromBalance - value;\\n }\\n }\\n\\n if (to == address(0)) {\\n unchecked {\\n // Overflow not possible: value <= totalSupply or value <= fromBalance <= totalSupply.\\n _totalSupply -= value;\\n }\\n } else {\\n unchecked {\\n // Overflow not possible: balance + value is at most totalSupply, which we know fits into a uint256.\\n _balances[to] += value;\\n }\\n }\\n\\n emit Transfer(from, to, value);\\n }\\n\\n /**\\n * @dev Creates a `value` amount of tokens and assigns them to `account`, by transferring it from address(0).\\n * Relies on the `_update` mechanism\\n *\\n * Emits a {Transfer} event with `from` set to the zero address.\\n *\\n * NOTE: This function is not virtual, {_update} should be overridden instead.\\n */\\n function _mint(address account, uint256 value) internal {\\n if (account == address(0)) {\\n revert ERC20InvalidReceiver(address(0));\\n }\\n _update(address(0), account, value);\\n }\\n\\n /**\\n * @dev Destroys a `value` amount of tokens from `account`, lowering the total supply.\\n * Relies on the `_update` mechanism.\\n *\\n * Emits a {Transfer} event with `to` set to the zero address.\\n *\\n * NOTE: This function is not virtual, {_update} should be overridden instead\\n */\\n function _burn(address account, uint256 value) internal {\\n if (account == address(0)) {\\n revert ERC20InvalidSender(address(0));\\n }\\n _update(account, address(0), value);\\n }\\n\\n /**\\n * @dev Sets `value` as the allowance of `spender` over the `owner` s tokens.\\n *\\n * This internal function is equivalent to `approve`, and can be used to\\n * e.g. set automatic allowances for certain subsystems, etc.\\n *\\n * Emits an {Approval} event.\\n *\\n * Requirements:\\n *\\n * - `owner` cannot be the zero address.\\n * - `spender` cannot be the zero address.\\n *\\n * Overrides to this logic should be done to the variant with an additional `bool emitEvent` argument.\\n */\\n function _approve(address owner, address spender, uint256 value) internal {\\n _approve(owner, spender, value, true);\\n }\\n\\n /**\\n * @dev Variant of {_approve} with an optional flag to enable or disable the {Approval} event.\\n *\\n * By default (when calling {_approve}) the flag is set to true. On the other hand, approval changes made by\\n * `_spendAllowance` during the `transferFrom` operation set the flag to false. This saves gas by not emitting any\\n * `Approval` event during `transferFrom` operations.\\n *\\n * Anyone who wishes to continue emitting `Approval` events on the`transferFrom` operation can force the flag to\\n * true using the following override:\\n *\\n * ```solidity\\n * function _approve(address owner, address spender, uint256 value, bool) internal virtual override {\\n * super._approve(owner, spender, value, true);\\n * }\\n * ```\\n *\\n * Requirements are the same as {_approve}.\\n */\\n function _approve(address owner, address spender, uint256 value, bool emitEvent) internal virtual {\\n if (owner == address(0)) {\\n revert ERC20InvalidApprover(address(0));\\n }\\n if (spender == address(0)) {\\n revert ERC20InvalidSpender(address(0));\\n }\\n _allowances[owner][spender] = value;\\n if (emitEvent) {\\n emit Approval(owner, spender, value);\\n }\\n }\\n\\n /**\\n * @dev Updates `owner` s allowance for `spender` based on spent `value`.\\n *\\n * Does not update the allowance value in case of infinite allowance.\\n * Revert if not enough allowance is available.\\n *\\n * Does not emit an {Approval} event.\\n */\\n function _spendAllowance(address owner, address spender, uint256 value) internal virtual {\\n uint256 currentAllowance = allowance(owner, spender);\\n if (currentAllowance != type(uint256).max) {\\n if (currentAllowance < value) {\\n revert ERC20InsufficientAllowance(spender, currentAllowance, value);\\n }\\n unchecked {\\n _approve(owner, spender, currentAllowance - value, false);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0xbf61ab2ae1d575a17ea58fbb99ca232baddcc4e0eeea180e84cbc74b0c348b31\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Interface of the ERC-20 standard as defined in the ERC.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the value of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the value of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\\n * caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from `from` to `to` using the\\n * allowance mechanism. `value` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 value) external returns (bool);\\n}\\n\",\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {IERC20} from \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC-20 standard.\\n */\\ninterface IERC20Metadata is IERC20 {\\n /**\\n * @dev Returns the name of the token.\\n */\\n function name() external view returns (string memory);\\n\\n /**\\n * @dev Returns the symbol of the token.\\n */\\n function symbol() external view returns (string memory);\\n\\n /**\\n * @dev Returns the decimals places of the token.\\n */\\n function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x70f2f713b13b7ce4610bcd0ac9fec0f3cc43693b043abcb8dc40a42a726eb330\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/utils/SafeERC20.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {IERC20} from \\\"../IERC20.sol\\\";\\nimport {IERC1363} from \\\"../../../interfaces/IERC1363.sol\\\";\\nimport {Address} from \\\"../../../utils/Address.sol\\\";\\n\\n/**\\n * @title SafeERC20\\n * @dev Wrappers around ERC-20 operations that throw on failure (when the token\\n * contract returns false). Tokens that return no value (and instead revert or\\n * throw on failure) are also supported, non-reverting calls are assumed to be\\n * successful.\\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\n */\\nlibrary SafeERC20 {\\n /**\\n * @dev An operation with an ERC-20 token failed.\\n */\\n error SafeERC20FailedOperation(address token);\\n\\n /**\\n * @dev Indicates a failed `decreaseAllowance` request.\\n */\\n error SafeERC20FailedDecreaseAllowance(address spender, uint256 currentAllowance, uint256 requestedDecrease);\\n\\n /**\\n * @dev Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value,\\n * non-reverting calls are assumed to be successful.\\n */\\n function safeTransfer(IERC20 token, address to, uint256 value) internal {\\n _callOptionalReturn(token, abi.encodeCall(token.transfer, (to, value)));\\n }\\n\\n /**\\n * @dev Transfer `value` amount of `token` from `from` to `to`, spending the approval given by `from` to the\\n * calling contract. If `token` returns no value, non-reverting calls are assumed to be successful.\\n */\\n function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\\n _callOptionalReturn(token, abi.encodeCall(token.transferFrom, (from, to, value)));\\n }\\n\\n /**\\n * @dev Increase the calling contract's allowance toward `spender` by `value`. If `token` returns no value,\\n * non-reverting calls are assumed to be successful.\\n *\\n * IMPORTANT: If the token implements ERC-7674 (ERC-20 with temporary allowance), and if the \\\"client\\\"\\n * smart contract uses ERC-7674 to set temporary allowances, then the \\\"client\\\" smart contract should avoid using\\n * this function. Performing a {safeIncreaseAllowance} or {safeDecreaseAllowance} operation on a token contract\\n * that has a non-zero temporary allowance (for that particular owner-spender) will result in unexpected behavior.\\n */\\n function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {\\n uint256 oldAllowance = token.allowance(address(this), spender);\\n forceApprove(token, spender, oldAllowance + value);\\n }\\n\\n /**\\n * @dev Decrease the calling contract's allowance toward `spender` by `requestedDecrease`. If `token` returns no\\n * value, non-reverting calls are assumed to be successful.\\n *\\n * IMPORTANT: If the token implements ERC-7674 (ERC-20 with temporary allowance), and if the \\\"client\\\"\\n * smart contract uses ERC-7674 to set temporary allowances, then the \\\"client\\\" smart contract should avoid using\\n * this function. Performing a {safeIncreaseAllowance} or {safeDecreaseAllowance} operation on a token contract\\n * that has a non-zero temporary allowance (for that particular owner-spender) will result in unexpected behavior.\\n */\\n function safeDecreaseAllowance(IERC20 token, address spender, uint256 requestedDecrease) internal {\\n unchecked {\\n uint256 currentAllowance = token.allowance(address(this), spender);\\n if (currentAllowance < requestedDecrease) {\\n revert SafeERC20FailedDecreaseAllowance(spender, currentAllowance, requestedDecrease);\\n }\\n forceApprove(token, spender, currentAllowance - requestedDecrease);\\n }\\n }\\n\\n /**\\n * @dev Set the calling contract's allowance toward `spender` to `value`. If `token` returns no value,\\n * non-reverting calls are assumed to be successful. Meant to be used with tokens that require the approval\\n * to be set to zero before setting it to a non-zero value, such as USDT.\\n *\\n * NOTE: If the token implements ERC-7674, this function will not modify any temporary allowance. This function\\n * only sets the \\\"standard\\\" allowance. Any temporary allowance will remain active, in addition to the value being\\n * set here.\\n */\\n function forceApprove(IERC20 token, address spender, uint256 value) internal {\\n bytes memory approvalCall = abi.encodeCall(token.approve, (spender, value));\\n\\n if (!_callOptionalReturnBool(token, approvalCall)) {\\n _callOptionalReturn(token, abi.encodeCall(token.approve, (spender, 0)));\\n _callOptionalReturn(token, approvalCall);\\n }\\n }\\n\\n /**\\n * @dev Performs an {ERC1363} transferAndCall, with a fallback to the simple {ERC20} transfer if the target has no\\n * code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\\n * targeting contracts.\\n *\\n * Reverts if the returned value is other than `true`.\\n */\\n function transferAndCallRelaxed(IERC1363 token, address to, uint256 value, bytes memory data) internal {\\n if (to.code.length == 0) {\\n safeTransfer(token, to, value);\\n } else if (!token.transferAndCall(to, value, data)) {\\n revert SafeERC20FailedOperation(address(token));\\n }\\n }\\n\\n /**\\n * @dev Performs an {ERC1363} transferFromAndCall, with a fallback to the simple {ERC20} transferFrom if the target\\n * has no code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\\n * targeting contracts.\\n *\\n * Reverts if the returned value is other than `true`.\\n */\\n function transferFromAndCallRelaxed(\\n IERC1363 token,\\n address from,\\n address to,\\n uint256 value,\\n bytes memory data\\n ) internal {\\n if (to.code.length == 0) {\\n safeTransferFrom(token, from, to, value);\\n } else if (!token.transferFromAndCall(from, to, value, data)) {\\n revert SafeERC20FailedOperation(address(token));\\n }\\n }\\n\\n /**\\n * @dev Performs an {ERC1363} approveAndCall, with a fallback to the simple {ERC20} approve if the target has no\\n * code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\\n * targeting contracts.\\n *\\n * NOTE: When the recipient address (`to`) has no code (i.e. is an EOA), this function behaves as {forceApprove}.\\n * Opposedly, when the recipient address (`to`) has code, this function only attempts to call {ERC1363-approveAndCall}\\n * once without retrying, and relies on the returned value to be true.\\n *\\n * Reverts if the returned value is other than `true`.\\n */\\n function approveAndCallRelaxed(IERC1363 token, address to, uint256 value, bytes memory data) internal {\\n if (to.code.length == 0) {\\n forceApprove(token, to, value);\\n } else if (!token.approveAndCall(to, value, data)) {\\n revert SafeERC20FailedOperation(address(token));\\n }\\n }\\n\\n /**\\n * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n * on the return value: the return value is optional (but if data is returned, it must not be false).\\n * @param token The token targeted by the call.\\n * @param data The call data (encoded using abi.encode or one of its variants).\\n *\\n * This is a variant of {_callOptionalReturnBool} that reverts if call fails to meet the requirements.\\n */\\n function _callOptionalReturn(IERC20 token, bytes memory data) private {\\n uint256 returnSize;\\n uint256 returnValue;\\n assembly (\\\"memory-safe\\\") {\\n let success := call(gas(), token, 0, add(data, 0x20), mload(data), 0, 0x20)\\n // bubble errors\\n if iszero(success) {\\n let ptr := mload(0x40)\\n returndatacopy(ptr, 0, returndatasize())\\n revert(ptr, returndatasize())\\n }\\n returnSize := returndatasize()\\n returnValue := mload(0)\\n }\\n\\n if (returnSize == 0 ? address(token).code.length == 0 : returnValue != 1) {\\n revert SafeERC20FailedOperation(address(token));\\n }\\n }\\n\\n /**\\n * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n * on the return value: the return value is optional (but if data is returned, it must not be false).\\n * @param token The token targeted by the call.\\n * @param data The call data (encoded using abi.encode or one of its variants).\\n *\\n * This is a variant of {_callOptionalReturn} that silently catches all reverts and returns a bool instead.\\n */\\n function _callOptionalReturnBool(IERC20 token, bytes memory data) private returns (bool) {\\n bool success;\\n uint256 returnSize;\\n uint256 returnValue;\\n assembly (\\\"memory-safe\\\") {\\n success := call(gas(), token, 0, add(data, 0x20), mload(data), 0, 0x20)\\n returnSize := returndatasize()\\n returnValue := mload(0)\\n }\\n return success && (returnSize == 0 ? address(token).code.length > 0 : returnValue == 1);\\n }\\n}\\n\",\"keccak256\":\"0xca2ae13e0610f6a99238dd00b97bd786bc92732dae6d6b9d61f573ec51018310\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {Errors} from \\\"./Errors.sol\\\";\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev There's no code at `target` (it is not a contract).\\n */\\n error AddressEmptyCode(address target);\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.8.20/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n if (address(this).balance < amount) {\\n revert Errors.InsufficientBalance(address(this).balance, amount);\\n }\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n if (!success) {\\n revert Errors.FailedCall();\\n }\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason or custom error, it is bubbled\\n * up by this function (like regular Solidity function calls). However, if\\n * the call reverted with no returned reason, this function reverts with a\\n * {Errors.FailedCall} error.\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n if (address(this).balance < value) {\\n revert Errors.InsufficientBalance(address(this).balance, value);\\n }\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResultFromTarget(target, success, returndata);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResultFromTarget(target, success, returndata);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResultFromTarget(target, success, returndata);\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call to smart-contract was successful, and reverts if the target\\n * was not a contract or bubbling up the revert reason (falling back to {Errors.FailedCall}) in case\\n * of an unsuccessful call.\\n */\\n function verifyCallResultFromTarget(\\n address target,\\n bool success,\\n bytes memory returndata\\n ) internal view returns (bytes memory) {\\n if (!success) {\\n _revert(returndata);\\n } else {\\n // only check if target is a contract if the call was successful and the return data is empty\\n // otherwise we already know that it was a contract\\n if (returndata.length == 0 && target.code.length == 0) {\\n revert AddressEmptyCode(target);\\n }\\n return returndata;\\n }\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call was successful, and reverts if it wasn't, either by bubbling the\\n * revert reason or with a default {Errors.FailedCall} error.\\n */\\n function verifyCallResult(bool success, bytes memory returndata) internal pure returns (bytes memory) {\\n if (!success) {\\n _revert(returndata);\\n } else {\\n return returndata;\\n }\\n }\\n\\n /**\\n * @dev Reverts with returndata if present. Otherwise reverts with {Errors.FailedCall}.\\n */\\n function _revert(bytes memory returndata) private pure {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n assembly (\\\"memory-safe\\\") {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert Errors.FailedCall();\\n }\\n }\\n}\\n\",\"keccak256\":\"0x9d8da059267bac779a2dbbb9a26c2acf00ca83085e105d62d5d4ef96054a47f5\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n\\n function _contextSuffixLength() internal view virtual returns (uint256) {\\n return 0;\\n }\\n}\\n\",\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Errors.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/Errors.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Collection of common custom errors used in multiple contracts\\n *\\n * IMPORTANT: Backwards compatibility is not guaranteed in future versions of the library.\\n * It is recommended to avoid relying on the error API for critical functionality.\\n *\\n * _Available since v5.1._\\n */\\nlibrary Errors {\\n /**\\n * @dev The ETH balance of the account is not enough to perform the operation.\\n */\\n error InsufficientBalance(uint256 balance, uint256 needed);\\n\\n /**\\n * @dev A call to an address target failed. The target may have reverted.\\n */\\n error FailedCall();\\n\\n /**\\n * @dev The deployment failed.\\n */\\n error FailedDeployment();\\n\\n /**\\n * @dev A necessary precompile is missing.\\n */\\n error MissingPrecompile(address);\\n}\\n\",\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/introspection/IERC165.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Interface of the ERC-165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[ERC].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\"}},\"version\":1}", - "storageLayout": { - "storage": [ - { - "astId": 3837, - "contract": "@layerzerolabs/oft-evm/contracts/OFT.sol:OFT", - "label": "_owner", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 1390, - "contract": "@layerzerolabs/oft-evm/contracts/OFT.sol:OFT", - "label": "peers", - "offset": 0, - "slot": "1", - "type": "t_mapping(t_uint32,t_bytes32)" - }, - { - "astId": 2166, - "contract": "@layerzerolabs/oft-evm/contracts/OFT.sol:OFT", - "label": "preCrime", - "offset": 0, - "slot": "2", - "type": "t_address" - }, - { - "astId": 2006, - "contract": "@layerzerolabs/oft-evm/contracts/OFT.sol:OFT", - "label": "enforcedOptions", - "offset": 0, - "slot": "3", - "type": "t_mapping(t_uint32,t_mapping(t_uint16,t_bytes_storage))" - }, - { - "astId": 2784, - "contract": "@layerzerolabs/oft-evm/contracts/OFT.sol:OFT", - "label": "msgInspector", - "offset": 0, - "slot": "4", - "type": "t_address" - }, - { - "astId": 4226, - "contract": "@layerzerolabs/oft-evm/contracts/OFT.sol:OFT", - "label": "_balances", - "offset": 0, - "slot": "5", - "type": "t_mapping(t_address,t_uint256)" - }, - { - "astId": 4232, - "contract": "@layerzerolabs/oft-evm/contracts/OFT.sol:OFT", - "label": "_allowances", - "offset": 0, - "slot": "6", - "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))" - }, - { - "astId": 4234, - "contract": "@layerzerolabs/oft-evm/contracts/OFT.sol:OFT", - "label": "_totalSupply", - "offset": 0, - "slot": "7", - "type": "t_uint256" - }, - { - "astId": 4236, - "contract": "@layerzerolabs/oft-evm/contracts/OFT.sol:OFT", - "label": "_name", - "offset": 0, - "slot": "8", - "type": "t_string_storage" - }, - { - "astId": 4238, - "contract": "@layerzerolabs/oft-evm/contracts/OFT.sol:OFT", - "label": "_symbol", - "offset": 0, - "slot": "9", - "type": "t_string_storage" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_bytes32": { - "encoding": "inplace", - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes_storage": { - "encoding": "bytes", - "label": "bytes", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_mapping(t_address,t_uint256))": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => mapping(address => uint256))", - "numberOfBytes": "32", - "value": "t_mapping(t_address,t_uint256)" - }, - "t_mapping(t_address,t_uint256)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => uint256)", - "numberOfBytes": "32", - "value": "t_uint256" - }, - "t_mapping(t_uint16,t_bytes_storage)": { - "encoding": "mapping", - "key": "t_uint16", - "label": "mapping(uint16 => bytes)", - "numberOfBytes": "32", - "value": "t_bytes_storage" - }, - "t_mapping(t_uint32,t_bytes32)": { - "encoding": "mapping", - "key": "t_uint32", - "label": "mapping(uint32 => bytes32)", - "numberOfBytes": "32", - "value": "t_bytes32" - }, - "t_mapping(t_uint32,t_mapping(t_uint16,t_bytes_storage))": { - "encoding": "mapping", - "key": "t_uint32", - "label": "mapping(uint32 => mapping(uint16 => bytes))", - "numberOfBytes": "32", - "value": "t_mapping(t_uint16,t_bytes_storage)" - }, - "t_string_storage": { - "encoding": "bytes", - "label": "string", - "numberOfBytes": "32" - }, - "t_uint16": { - "encoding": "inplace", - "label": "uint16", - "numberOfBytes": "2" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint32": { - "encoding": "inplace", - "label": "uint32", - "numberOfBytes": "4" - } - } - }, - "userdoc": { - "kind": "user", - "methods": { - "allowInitializePath((uint32,bytes32,uint64))": { - "notice": "Checks if the path initialization is allowed based on the provided origin." - }, - "approvalRequired()": { - "notice": "Indicates whether the OFT contract requires approval of the 'token()' to send." - }, - "combineOptions(uint32,uint16,bytes)": { - "notice": "Combines options for a given endpoint and message type." - }, - "endpoint()": { - "notice": "Retrieves the LayerZero endpoint associated with the OApp." - }, - "isComposeMsgSender((uint32,bytes32,uint64),bytes,address)": { - "notice": "Indicates whether an address is an approved composeMsg sender to the Endpoint." - }, - "nextNonce(uint32,bytes32)": { - "notice": "Retrieves the next nonce for a given source endpoint and sender address." - }, - "oAppVersion()": { - "notice": "Retrieves the OApp version information." - }, - "oftVersion()": { - "notice": "Retrieves interfaceID and the version of the OFT." - }, - "peers(uint32)": { - "notice": "Retrieves the peer (OApp) associated with a corresponding endpoint." - }, - "quoteOFT((uint32,bytes32,uint256,uint256,bytes,bytes,bytes))": { - "notice": "Provides the fee breakdown and settings data for an OFT. Unused in the default implementation." - }, - "quoteSend((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),bool)": { - "notice": "Provides a quote for the send() operation." - }, - "setDelegate(address)": { - "notice": "Sets the delegate address for the OApp." - }, - "setPeer(uint32,bytes32)": { - "notice": "Sets the peer address (OApp instance) for a corresponding endpoint." - } - }, - "version": 1 - } - } - }, - "@layerzerolabs/oft-evm/contracts/OFTCore.sol": { - "OFTCore": { - "abi": [ - { "inputs": [], "name": "InvalidDelegate", "type": "error" }, - { "inputs": [], "name": "InvalidEndpointCall", "type": "error" }, - { "inputs": [], "name": "InvalidLocalDecimals", "type": "error" }, - { - "inputs": [ - { "internalType": "bytes", "name": "options", "type": "bytes" } - ], - "name": "InvalidOptions", - "type": "error" - }, - { "inputs": [], "name": "LzTokenUnavailable", "type": "error" }, - { - "inputs": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" } - ], - "name": "NoPeer", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "msgValue", - "type": "uint256" - } - ], - "name": "NotEnoughNative", - "type": "error" - }, - { - "inputs": [ - { "internalType": "address", "name": "addr", "type": "address" } - ], - "name": "OnlyEndpoint", - "type": "error" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - } - ], - "name": "OnlyPeer", - "type": "error" - }, - { "inputs": [], "name": "OnlySelf", "type": "error" }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "OwnableInvalidOwner", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "OwnableUnauthorizedAccount", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - } - ], - "name": "SafeERC20FailedOperation", - "type": "error" - }, - { - "inputs": [ - { "internalType": "bytes", "name": "result", "type": "bytes" } - ], - "name": "SimulationResult", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "amountLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minAmountLD", - "type": "uint256" - } - ], - "name": "SlippageExceeded", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "eid", - "type": "uint32" - }, - { - "internalType": "uint16", - "name": "msgType", - "type": "uint16" - }, - { - "internalType": "bytes", - "name": "options", - "type": "bytes" - } - ], - "indexed": false, - "internalType": "struct EnforcedOptionParam[]", - "name": "_enforcedOptions", - "type": "tuple[]" - } - ], - "name": "EnforcedOptionSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "inspector", - "type": "address" - } - ], - "name": "MsgInspectorSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "guid", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "address", - "name": "toAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amountReceivedLD", - "type": "uint256" - } - ], - "name": "OFTReceived", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "guid", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "address", - "name": "fromAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amountSentLD", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amountReceivedLD", - "type": "uint256" - } - ], - "name": "OFTSent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "eid", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "peer", - "type": "bytes32" - } - ], - "name": "PeerSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "preCrimeAddress", - "type": "address" - } - ], - "name": "PreCrimeSet", - "type": "event" - }, - { - "inputs": [], - "name": "SEND", - "outputs": [ - { "internalType": "uint16", "name": "", "type": "uint16" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "SEND_AND_CALL", - "outputs": [ - { "internalType": "uint16", "name": "", "type": "uint16" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - } - ], - "internalType": "struct Origin", - "name": "origin", - "type": "tuple" - } - ], - "name": "allowInitializePath", - "outputs": [ - { "internalType": "bool", "name": "", "type": "bool" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "approvalRequired", - "outputs": [ - { "internalType": "bool", "name": "", "type": "bool" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { - "internalType": "uint16", - "name": "_msgType", - "type": "uint16" - }, - { - "internalType": "bytes", - "name": "_extraOptions", - "type": "bytes" - } - ], - "name": "combineOptions", - "outputs": [ - { "internalType": "bytes", "name": "", "type": "bytes" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "decimalConversionRate", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "endpoint", - "outputs": [ - { - "internalType": "contract ILayerZeroEndpointV2", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" }, - { - "internalType": "uint16", - "name": "msgType", - "type": "uint16" - } - ], - "name": "enforcedOptions", - "outputs": [ - { - "internalType": "bytes", - "name": "enforcedOption", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - } - ], - "internalType": "struct Origin", - "name": "", - "type": "tuple" - }, - { "internalType": "bytes", "name": "", "type": "bytes" }, - { - "internalType": "address", - "name": "_sender", - "type": "address" - } - ], - "name": "isComposeMsgSender", - "outputs": [ - { "internalType": "bool", "name": "", "type": "bool" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { - "internalType": "bytes32", - "name": "_peer", - "type": "bytes32" - } - ], - "name": "isPeer", - "outputs": [ - { "internalType": "bool", "name": "", "type": "bool" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - } - ], - "internalType": "struct Origin", - "name": "_origin", - "type": "tuple" - }, - { - "internalType": "bytes32", - "name": "_guid", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "_message", - "type": "bytes" - }, - { - "internalType": "address", - "name": "_executor", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "lzReceive", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - } - ], - "internalType": "struct Origin", - "name": "origin", - "type": "tuple" - }, - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "guid", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "address", - "name": "executor", - "type": "address" - }, - { - "internalType": "bytes", - "name": "message", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "extraData", - "type": "bytes" - } - ], - "internalType": "struct InboundPacket[]", - "name": "_packets", - "type": "tuple[]" - } - ], - "name": "lzReceiveAndRevert", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - } - ], - "internalType": "struct Origin", - "name": "_origin", - "type": "tuple" - }, - { - "internalType": "bytes32", - "name": "_guid", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "_message", - "type": "bytes" - }, - { - "internalType": "address", - "name": "_executor", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "lzReceiveSimulate", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "msgInspector", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "", "type": "uint32" }, - { "internalType": "bytes32", "name": "", "type": "bytes32" } - ], - "name": "nextNonce", - "outputs": [ - { "internalType": "uint64", "name": "nonce", "type": "uint64" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "oApp", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "oAppVersion", - "outputs": [ - { - "internalType": "uint64", - "name": "senderVersion", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "receiverVersion", - "type": "uint64" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [], - "name": "oftVersion", - "outputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - }, - { - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" } - ], - "name": "peers", - "outputs": [ - { "internalType": "bytes32", "name": "peer", "type": "bytes32" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "preCrime", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "to", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amountLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minAmountLD", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "extraOptions", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "composeMsg", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "oftCmd", - "type": "bytes" - } - ], - "internalType": "struct SendParam", - "name": "_sendParam", - "type": "tuple" - } - ], - "name": "quoteOFT", - "outputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "minAmountLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxAmountLD", - "type": "uint256" - } - ], - "internalType": "struct OFTLimit", - "name": "oftLimit", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "int256", - "name": "feeAmountLD", - "type": "int256" - }, - { - "internalType": "string", - "name": "description", - "type": "string" - } - ], - "internalType": "struct OFTFeeDetail[]", - "name": "oftFeeDetails", - "type": "tuple[]" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "amountSentLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "amountReceivedLD", - "type": "uint256" - } - ], - "internalType": "struct OFTReceipt", - "name": "oftReceipt", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "to", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amountLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minAmountLD", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "extraOptions", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "composeMsg", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "oftCmd", - "type": "bytes" - } - ], - "internalType": "struct SendParam", - "name": "_sendParam", - "type": "tuple" - }, - { - "internalType": "bool", - "name": "_payInLzToken", - "type": "bool" - } - ], - "name": "quoteSend", - "outputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "nativeFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "lzTokenFee", - "type": "uint256" - } - ], - "internalType": "struct MessagingFee", - "name": "msgFee", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "to", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amountLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minAmountLD", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "extraOptions", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "composeMsg", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "oftCmd", - "type": "bytes" - } - ], - "internalType": "struct SendParam", - "name": "_sendParam", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "nativeFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "lzTokenFee", - "type": "uint256" - } - ], - "internalType": "struct MessagingFee", - "name": "_fee", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_refundAddress", - "type": "address" - } - ], - "name": "send", - "outputs": [ - { - "components": [ - { - "internalType": "bytes32", - "name": "guid", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "nativeFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "lzTokenFee", - "type": "uint256" - } - ], - "internalType": "struct MessagingFee", - "name": "fee", - "type": "tuple" - } - ], - "internalType": "struct MessagingReceipt", - "name": "msgReceipt", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "amountSentLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "amountReceivedLD", - "type": "uint256" - } - ], - "internalType": "struct OFTReceipt", - "name": "oftReceipt", - "type": "tuple" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_delegate", - "type": "address" - } - ], - "name": "setDelegate", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "eid", - "type": "uint32" - }, - { - "internalType": "uint16", - "name": "msgType", - "type": "uint16" - }, - { - "internalType": "bytes", - "name": "options", - "type": "bytes" - } - ], - "internalType": "struct EnforcedOptionParam[]", - "name": "_enforcedOptions", - "type": "tuple[]" - } - ], - "name": "setEnforcedOptions", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_msgInspector", - "type": "address" - } - ], - "name": "setMsgInspector", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { - "internalType": "bytes32", - "name": "_peer", - "type": "bytes32" - } - ], - "name": "setPeer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_preCrime", - "type": "address" - } - ], - "name": "setPreCrime", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "sharedDecimals", - "outputs": [ - { "internalType": "uint8", "name": "", "type": "uint8" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "token", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "devdoc": { - "details": "Abstract contract for the OftChain (OFT) token.", - "errors": { - "OwnableInvalidOwner(address)": [ - { - "details": "The owner is not a valid owner account. (eg. `address(0)`)" - } - ], - "OwnableUnauthorizedAccount(address)": [ - { - "details": "The caller account is not authorized to perform an operation." - } - ], - "SafeERC20FailedOperation(address)": [ - { "details": "An operation with an ERC-20 token failed." } - ] - }, - "events": { - "PreCrimeSet(address)": { - "details": "Emitted when the preCrime contract address is set.", - "params": { - "preCrimeAddress": "The address of the preCrime contract." - } - } - }, - "kind": "dev", - "methods": { - "allowInitializePath((uint32,bytes32,uint64))": { - "details": "This indicates to the endpoint that the OApp has enabled msgs for this particular path to be received.This defaults to assuming if a peer has been set, its initialized. Can be overridden by the OApp if there is other logic to determine this.", - "params": { - "origin": "The origin information containing the source endpoint and sender address." - }, - "returns": { "_0": "Whether the path has been initialized." } - }, - "approvalRequired()": { - "details": "Allows things like wallet implementers to determine integration requirements, without understanding the underlying token implementation.", - "returns": { - "_0": "requiresApproval Needs approval of the underlying token implementation." - } - }, - "combineOptions(uint32,uint16,bytes)": { - "details": "If there is an enforced lzReceive option: - {gasLimit: 200k, msg.value: 1 ether} AND a caller supplies a lzReceive option: {gasLimit: 100k, msg.value: 0.5 ether} - The resulting options will be {gasLimit: 300k, msg.value: 1.5 ether} when the message is executed on the remote lzReceive() function.This presence of duplicated options is handled off-chain in the verifier/executor.", - "params": { - "_eid": "The endpoint ID.", - "_extraOptions": "Additional options passed by the caller.", - "_msgType": "The OAPP message type." - }, - "returns": { - "_0": "options The combination of caller specified options AND enforced options." - } - }, - "constructor": { - "details": "Constructor.", - "params": { - "_delegate": "The delegate capable of making OApp configurations inside of the endpoint.", - "_endpoint": "The address of the LayerZero endpoint.", - "_localDecimals": "The decimals of the token on the local chain (this chain)." - } - }, - "isComposeMsgSender((uint32,bytes32,uint64),bytes,address)": { - "details": "_origin The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message._message The lzReceive payload.Applications can optionally choose to implement separate composeMsg senders that are NOT the bridging layer.The default sender IS the OAppReceiver implementer.", - "params": { "_sender": "The sender address." }, - "returns": { "_0": "isSender Is a valid sender." } - }, - "isPeer(uint32,bytes32)": { - "details": "Check if the peer is considered 'trusted' by the OApp.Enables OAppPreCrimeSimulator to check whether a potential Inbound Packet is from a trusted source.", - "params": { - "_eid": "The endpoint ID to check.", - "_peer": "The peer to check." - }, - "returns": { - "_0": "Whether the peer passed is considered 'trusted' by the OApp." - } - }, - "lzReceive((uint32,bytes32,uint64),bytes32,bytes,address,bytes)": { - "details": "Entry point for receiving messages or packets from the endpoint.Entry point for receiving msg/packet from the LayerZero endpoint.", - "params": { - "_executor": "The address of the executor for the received message.", - "_extraData": "Additional arbitrary data provided by the corresponding executor.", - "_guid": "The unique identifier for the received LayerZero message.", - "_message": "The payload of the received message.", - "_origin": "The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message." - } - }, - "lzReceiveAndRevert(((uint32,bytes32,uint64),uint32,address,bytes32,uint256,address,bytes,bytes)[])": { - "details": "Interface for pre-crime simulations. Always reverts at the end with the simulation results.WARNING: MUST revert at the end with the simulation results.Gives the preCrime implementation the ability to mock sending packets to the lzReceive function, WITHOUT actually executing them.", - "params": { - "_packets": "An array of InboundPacket objects representing received packets to be delivered." - } - }, - "lzReceiveSimulate((uint32,bytes32,uint64),bytes32,bytes,address,bytes)": { - "details": "Is effectively an internal function because msg.sender must be address(this). Allows resetting the call stack for 'internal' calls.", - "params": { - "_executor": "The executor address for the packet.", - "_extraData": "Additional data for the packet.", - "_guid": "The unique identifier of the packet.", - "_message": "The message payload of the packet.", - "_origin": "The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message." - } - }, - "nextNonce(uint32,bytes32)": { - "details": "_srcEid The source endpoint ID._sender The sender address.The path nonce starts from 1. If 0 is returned it means that there is NO nonce ordered enforcement.Is required by the off-chain executor to determine the OApp expects msg execution is ordered.This is also enforced by the OApp.By default this is NOT enabled. ie. nextNonce is hardcoded to return 0.", - "returns": { "nonce": "The next nonce." } - }, - "oApp()": { - "details": "Retrieves the address of the OApp contract.The simulator contract is the base contract for the OApp by default.If the simulator is a separate contract, override this function.", - "returns": { "_0": "The address of the OApp contract." } - }, - "oAppVersion()": { - "returns": { - "receiverVersion": "The version of the OAppReceiver.sol implementation.", - "senderVersion": "The version of the OAppSender.sol implementation." - } - }, - "oftVersion()": { - "details": "interfaceId: This specific interface ID is '0x02e49c2c'.version: Indicates a cross-chain compatible msg encoding with other OFTs.If a new feature is added to the OFT cross-chain msg encoding, the version will be incremented. ie. localOFT version(x,1) CAN send messages to remoteOFT version(x,1)", - "returns": { - "interfaceId": "The interface ID.", - "version": "The version." - } - }, - "owner()": { - "details": "Returns the address of the current owner." - }, - "quoteOFT((uint32,bytes32,uint256,uint256,bytes,bytes,bytes))": { - "params": { - "_sendParam": "The parameters for the send operation." - }, - "returns": { - "oftFeeDetails": "The details of OFT fees.", - "oftLimit": "The OFT limit information.", - "oftReceipt": "The OFT receipt information." - } - }, - "quoteSend((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),bool)": { - "details": "MessagingFee: LayerZero msg fee - nativeFee: The native fee. - lzTokenFee: The lzToken fee.", - "params": { - "_payInLzToken": "Flag indicating whether the caller is paying in the LZ token.", - "_sendParam": "The parameters for the send() operation." - }, - "returns": { - "msgFee": "The calculated LayerZero messaging fee from the send() operation." - } - }, - "renounceOwnership()": { - "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner." - }, - "send((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),(uint256,uint256),address)": { - "details": "Executes the send operation.MessagingReceipt: LayerZero msg receipt - guid: The unique identifier for the sent message. - nonce: The nonce of the sent message. - fee: The LayerZero fee incurred for the message.", - "params": { - "_fee": "The calculated fee for the send() operation. - nativeFee: The native fee. - lzTokenFee: The lzToken fee.", - "_refundAddress": "The address to receive any excess funds.", - "_sendParam": "The parameters for the send operation." - }, - "returns": { - "msgReceipt": "The receipt for the send operation.", - "oftReceipt": "The OFT receipt information." - } - }, - "setDelegate(address)": { - "details": "Only the owner/admin of the OApp can call this function.Provides the ability for a delegate to set configs, on behalf of the OApp, directly on the Endpoint contract.", - "params": { - "_delegate": "The address of the delegate to be set." - } - }, - "setEnforcedOptions((uint32,uint16,bytes)[])": { - "details": "Sets the enforced options for specific endpoint and message type combinations.Only the owner/admin of the OApp can call this function.Provides a way for the OApp to enforce things like paying for PreCrime, AND/OR minimum dst lzReceive gas amounts etc.These enforced options can vary as the potential options/execution on the remote may differ as per the msgType. eg. Amount of lzReceive() gas necessary to deliver a lzCompose() message adds overhead you dont want to pay if you are only making a standard LayerZero message ie. lzReceive() WITHOUT sendCompose().", - "params": { - "_enforcedOptions": "An array of EnforcedOptionParam structures specifying enforced options." - } - }, - "setMsgInspector(address)": { - "details": "Sets the message inspector address for the OFT.This is an optional contract that can be used to inspect both 'message' and 'options'.Set it to address(0) to disable it, or set it to a contract address to enable it.", - "params": { - "_msgInspector": "The address of the message inspector." - } - }, - "setPeer(uint32,bytes32)": { - "details": "Only the owner/admin of the OApp can call this function.Indicates that the peer is trusted to send LayerZero messages to this OApp.Set this to bytes32(0) to remove the peer address.Peer is a bytes32 to accommodate non-evm chains.", - "params": { - "_eid": "The endpoint ID.", - "_peer": "The address of the peer to be associated with the corresponding endpoint." - } - }, - "setPreCrime(address)": { - "details": "Sets the preCrime contract address.", - "params": { - "_preCrime": "The address of the preCrime contract." - } - }, - "sharedDecimals()": { - "details": "Retrieves the shared decimals of the OFT.Sets an implicit cap on the amount of tokens, over uint64.max() will need some sort of outbound cap / totalSupply cap Lowest common decimal denominator between chains. Defaults to 6 decimal places to provide up to 18,446,744,073,709.551615 units (max uint64). For tokens exceeding this totalSupply(), they will need to override the sharedDecimals function with something smaller. ie. 4 sharedDecimals would be 1,844,674,407,370,955.1615", - "returns": { "_0": "The shared decimals of the OFT." } - }, - "token()": { - "returns": { - "_0": "token The address of the ERC20 token implementation." - } - }, - "transferOwnership(address)": { - "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." - } - }, - "title": "OFTCore", - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": { - "SEND()": "1f5e1334", - "SEND_AND_CALL()": "134d4f25", - "allowInitializePath((uint32,bytes32,uint64))": "ff7bd03d", - "approvalRequired()": "9f68b964", - "combineOptions(uint32,uint16,bytes)": "bc70b354", - "decimalConversionRate()": "963efcaa", - "endpoint()": "5e280f11", - "enforcedOptions(uint32,uint16)": "5535d461", - "isComposeMsgSender((uint32,bytes32,uint64),bytes,address)": "82413eac", - "isPeer(uint32,bytes32)": "5a0dfe4d", - "lzReceive((uint32,bytes32,uint64),bytes32,bytes,address,bytes)": "13137d65", - "lzReceiveAndRevert(((uint32,bytes32,uint64),uint32,address,bytes32,uint256,address,bytes,bytes)[])": "bd815db0", - "lzReceiveSimulate((uint32,bytes32,uint64),bytes32,bytes,address,bytes)": "d045a0dc", - "msgInspector()": "111ecdad", - "nextNonce(uint32,bytes32)": "7d25a05e", - "oApp()": "52ae2879", - "oAppVersion()": "17442b70", - "oftVersion()": "156a0d0f", - "owner()": "8da5cb5b", - "peers(uint32)": "bb0b6a53", - "preCrime()": "b731ea0a", - "quoteOFT((uint32,bytes32,uint256,uint256,bytes,bytes,bytes))": "0d35b415", - "quoteSend((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),bool)": "3b6f743b", - "renounceOwnership()": "715018a6", - "send((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),(uint256,uint256),address)": "c7c7f5b3", - "setDelegate(address)": "ca5eb5e1", - "setEnforcedOptions((uint32,uint16,bytes)[])": "b98bd070", - "setMsgInspector(address)": "6fc1b31e", - "setPeer(uint32,bytes32)": "3400288b", - "setPreCrime(address)": "d4243885", - "sharedDecimals()": "857749b0", - "token()": "fc0c546a", - "transferOwnership(address)": "f2fde38b" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"InvalidDelegate\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidEndpointCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidLocalDecimals\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"options\",\"type\":\"bytes\"}],\"name\":\"InvalidOptions\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LzTokenUnavailable\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"}],\"name\":\"NoPeer\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"msgValue\",\"type\":\"uint256\"}],\"name\":\"NotEnoughNative\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"OnlyEndpoint\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"}],\"name\":\"OnlyPeer\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlySelf\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"name\":\"SimulationResult\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountLD\",\"type\":\"uint256\"}],\"name\":\"SlippageExceeded\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"msgType\",\"type\":\"uint16\"},{\"internalType\":\"bytes\",\"name\":\"options\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"struct EnforcedOptionParam[]\",\"name\":\"_enforcedOptions\",\"type\":\"tuple[]\"}],\"name\":\"EnforcedOptionSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"inspector\",\"type\":\"address\"}],\"name\":\"MsgInspectorSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"toAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountReceivedLD\",\"type\":\"uint256\"}],\"name\":\"OFTReceived\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"fromAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountSentLD\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountReceivedLD\",\"type\":\"uint256\"}],\"name\":\"OFTSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"peer\",\"type\":\"bytes32\"}],\"name\":\"PeerSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"preCrimeAddress\",\"type\":\"address\"}],\"name\":\"PreCrimeSet\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"SEND\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SEND_AND_CALL\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"origin\",\"type\":\"tuple\"}],\"name\":\"allowInitializePath\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"approvalRequired\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"_msgType\",\"type\":\"uint16\"},{\"internalType\":\"bytes\",\"name\":\"_extraOptions\",\"type\":\"bytes\"}],\"name\":\"combineOptions\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimalConversionRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"endpoint\",\"outputs\":[{\"internalType\":\"contract ILayerZeroEndpointV2\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"msgType\",\"type\":\"uint16\"}],\"name\":\"enforcedOptions\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"enforcedOption\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"}],\"name\":\"isComposeMsgSender\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_peer\",\"type\":\"bytes32\"}],\"name\":\"isPeer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"_origin\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"_guid\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"_executor\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"lzReceive\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"origin\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"executor\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"internalType\":\"struct InboundPacket[]\",\"name\":\"_packets\",\"type\":\"tuple[]\"}],\"name\":\"lzReceiveAndRevert\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"_origin\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"_guid\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"_executor\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"lzReceiveSimulate\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"msgInspector\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"nextNonce\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"oApp\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"oAppVersion\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"senderVersion\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"receiverVersion\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"oftVersion\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"},{\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"}],\"name\":\"peers\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"peer\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"preCrime\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"to\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"amountLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountLD\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"extraOptions\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"composeMsg\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"oftCmd\",\"type\":\"bytes\"}],\"internalType\":\"struct SendParam\",\"name\":\"_sendParam\",\"type\":\"tuple\"}],\"name\":\"quoteOFT\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"minAmountLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountLD\",\"type\":\"uint256\"}],\"internalType\":\"struct OFTLimit\",\"name\":\"oftLimit\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"int256\",\"name\":\"feeAmountLD\",\"type\":\"int256\"},{\"internalType\":\"string\",\"name\":\"description\",\"type\":\"string\"}],\"internalType\":\"struct OFTFeeDetail[]\",\"name\":\"oftFeeDetails\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"amountSentLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountReceivedLD\",\"type\":\"uint256\"}],\"internalType\":\"struct OFTReceipt\",\"name\":\"oftReceipt\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"to\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"amountLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountLD\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"extraOptions\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"composeMsg\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"oftCmd\",\"type\":\"bytes\"}],\"internalType\":\"struct SendParam\",\"name\":\"_sendParam\",\"type\":\"tuple\"},{\"internalType\":\"bool\",\"name\":\"_payInLzToken\",\"type\":\"bool\"}],\"name\":\"quoteSend\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nativeFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lzTokenFee\",\"type\":\"uint256\"}],\"internalType\":\"struct MessagingFee\",\"name\":\"msgFee\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"to\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"amountLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountLD\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"extraOptions\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"composeMsg\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"oftCmd\",\"type\":\"bytes\"}],\"internalType\":\"struct SendParam\",\"name\":\"_sendParam\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nativeFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lzTokenFee\",\"type\":\"uint256\"}],\"internalType\":\"struct MessagingFee\",\"name\":\"_fee\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"_refundAddress\",\"type\":\"address\"}],\"name\":\"send\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nativeFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lzTokenFee\",\"type\":\"uint256\"}],\"internalType\":\"struct MessagingFee\",\"name\":\"fee\",\"type\":\"tuple\"}],\"internalType\":\"struct MessagingReceipt\",\"name\":\"msgReceipt\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"amountSentLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountReceivedLD\",\"type\":\"uint256\"}],\"internalType\":\"struct OFTReceipt\",\"name\":\"oftReceipt\",\"type\":\"tuple\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_delegate\",\"type\":\"address\"}],\"name\":\"setDelegate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"msgType\",\"type\":\"uint16\"},{\"internalType\":\"bytes\",\"name\":\"options\",\"type\":\"bytes\"}],\"internalType\":\"struct EnforcedOptionParam[]\",\"name\":\"_enforcedOptions\",\"type\":\"tuple[]\"}],\"name\":\"setEnforcedOptions\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_msgInspector\",\"type\":\"address\"}],\"name\":\"setMsgInspector\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_peer\",\"type\":\"bytes32\"}],\"name\":\"setPeer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_preCrime\",\"type\":\"address\"}],\"name\":\"setPreCrime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sharedDecimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"token\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Abstract contract for the OftChain (OFT) token.\",\"errors\":{\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}],\"SafeERC20FailedOperation(address)\":[{\"details\":\"An operation with an ERC-20 token failed.\"}]},\"events\":{\"PreCrimeSet(address)\":{\"details\":\"Emitted when the preCrime contract address is set.\",\"params\":{\"preCrimeAddress\":\"The address of the preCrime contract.\"}}},\"kind\":\"dev\",\"methods\":{\"allowInitializePath((uint32,bytes32,uint64))\":{\"details\":\"This indicates to the endpoint that the OApp has enabled msgs for this particular path to be received.This defaults to assuming if a peer has been set, its initialized. Can be overridden by the OApp if there is other logic to determine this.\",\"params\":{\"origin\":\"The origin information containing the source endpoint and sender address.\"},\"returns\":{\"_0\":\"Whether the path has been initialized.\"}},\"approvalRequired()\":{\"details\":\"Allows things like wallet implementers to determine integration requirements, without understanding the underlying token implementation.\",\"returns\":{\"_0\":\"requiresApproval Needs approval of the underlying token implementation.\"}},\"combineOptions(uint32,uint16,bytes)\":{\"details\":\"If there is an enforced lzReceive option: - {gasLimit: 200k, msg.value: 1 ether} AND a caller supplies a lzReceive option: {gasLimit: 100k, msg.value: 0.5 ether} - The resulting options will be {gasLimit: 300k, msg.value: 1.5 ether} when the message is executed on the remote lzReceive() function.This presence of duplicated options is handled off-chain in the verifier/executor.\",\"params\":{\"_eid\":\"The endpoint ID.\",\"_extraOptions\":\"Additional options passed by the caller.\",\"_msgType\":\"The OAPP message type.\"},\"returns\":{\"_0\":\"options The combination of caller specified options AND enforced options.\"}},\"constructor\":{\"details\":\"Constructor.\",\"params\":{\"_delegate\":\"The delegate capable of making OApp configurations inside of the endpoint.\",\"_endpoint\":\"The address of the LayerZero endpoint.\",\"_localDecimals\":\"The decimals of the token on the local chain (this chain).\"}},\"isComposeMsgSender((uint32,bytes32,uint64),bytes,address)\":{\"details\":\"_origin The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message._message The lzReceive payload.Applications can optionally choose to implement separate composeMsg senders that are NOT the bridging layer.The default sender IS the OAppReceiver implementer.\",\"params\":{\"_sender\":\"The sender address.\"},\"returns\":{\"_0\":\"isSender Is a valid sender.\"}},\"isPeer(uint32,bytes32)\":{\"details\":\"Check if the peer is considered 'trusted' by the OApp.Enables OAppPreCrimeSimulator to check whether a potential Inbound Packet is from a trusted source.\",\"params\":{\"_eid\":\"The endpoint ID to check.\",\"_peer\":\"The peer to check.\"},\"returns\":{\"_0\":\"Whether the peer passed is considered 'trusted' by the OApp.\"}},\"lzReceive((uint32,bytes32,uint64),bytes32,bytes,address,bytes)\":{\"details\":\"Entry point for receiving messages or packets from the endpoint.Entry point for receiving msg/packet from the LayerZero endpoint.\",\"params\":{\"_executor\":\"The address of the executor for the received message.\",\"_extraData\":\"Additional arbitrary data provided by the corresponding executor.\",\"_guid\":\"The unique identifier for the received LayerZero message.\",\"_message\":\"The payload of the received message.\",\"_origin\":\"The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message.\"}},\"lzReceiveAndRevert(((uint32,bytes32,uint64),uint32,address,bytes32,uint256,address,bytes,bytes)[])\":{\"details\":\"Interface for pre-crime simulations. Always reverts at the end with the simulation results.WARNING: MUST revert at the end with the simulation results.Gives the preCrime implementation the ability to mock sending packets to the lzReceive function, WITHOUT actually executing them.\",\"params\":{\"_packets\":\"An array of InboundPacket objects representing received packets to be delivered.\"}},\"lzReceiveSimulate((uint32,bytes32,uint64),bytes32,bytes,address,bytes)\":{\"details\":\"Is effectively an internal function because msg.sender must be address(this). Allows resetting the call stack for 'internal' calls.\",\"params\":{\"_executor\":\"The executor address for the packet.\",\"_extraData\":\"Additional data for the packet.\",\"_guid\":\"The unique identifier of the packet.\",\"_message\":\"The message payload of the packet.\",\"_origin\":\"The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message.\"}},\"nextNonce(uint32,bytes32)\":{\"details\":\"_srcEid The source endpoint ID._sender The sender address.The path nonce starts from 1. If 0 is returned it means that there is NO nonce ordered enforcement.Is required by the off-chain executor to determine the OApp expects msg execution is ordered.This is also enforced by the OApp.By default this is NOT enabled. ie. nextNonce is hardcoded to return 0.\",\"returns\":{\"nonce\":\"The next nonce.\"}},\"oApp()\":{\"details\":\"Retrieves the address of the OApp contract.The simulator contract is the base contract for the OApp by default.If the simulator is a separate contract, override this function.\",\"returns\":{\"_0\":\"The address of the OApp contract.\"}},\"oAppVersion()\":{\"returns\":{\"receiverVersion\":\"The version of the OAppReceiver.sol implementation.\",\"senderVersion\":\"The version of the OAppSender.sol implementation.\"}},\"oftVersion()\":{\"details\":\"interfaceId: This specific interface ID is '0x02e49c2c'.version: Indicates a cross-chain compatible msg encoding with other OFTs.If a new feature is added to the OFT cross-chain msg encoding, the version will be incremented. ie. localOFT version(x,1) CAN send messages to remoteOFT version(x,1)\",\"returns\":{\"interfaceId\":\"The interface ID.\",\"version\":\"The version.\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"quoteOFT((uint32,bytes32,uint256,uint256,bytes,bytes,bytes))\":{\"params\":{\"_sendParam\":\"The parameters for the send operation.\"},\"returns\":{\"oftFeeDetails\":\"The details of OFT fees.\",\"oftLimit\":\"The OFT limit information.\",\"oftReceipt\":\"The OFT receipt information.\"}},\"quoteSend((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),bool)\":{\"details\":\"MessagingFee: LayerZero msg fee - nativeFee: The native fee. - lzTokenFee: The lzToken fee.\",\"params\":{\"_payInLzToken\":\"Flag indicating whether the caller is paying in the LZ token.\",\"_sendParam\":\"The parameters for the send() operation.\"},\"returns\":{\"msgFee\":\"The calculated LayerZero messaging fee from the send() operation.\"}},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"send((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),(uint256,uint256),address)\":{\"details\":\"Executes the send operation.MessagingReceipt: LayerZero msg receipt - guid: The unique identifier for the sent message. - nonce: The nonce of the sent message. - fee: The LayerZero fee incurred for the message.\",\"params\":{\"_fee\":\"The calculated fee for the send() operation. - nativeFee: The native fee. - lzTokenFee: The lzToken fee.\",\"_refundAddress\":\"The address to receive any excess funds.\",\"_sendParam\":\"The parameters for the send operation.\"},\"returns\":{\"msgReceipt\":\"The receipt for the send operation.\",\"oftReceipt\":\"The OFT receipt information.\"}},\"setDelegate(address)\":{\"details\":\"Only the owner/admin of the OApp can call this function.Provides the ability for a delegate to set configs, on behalf of the OApp, directly on the Endpoint contract.\",\"params\":{\"_delegate\":\"The address of the delegate to be set.\"}},\"setEnforcedOptions((uint32,uint16,bytes)[])\":{\"details\":\"Sets the enforced options for specific endpoint and message type combinations.Only the owner/admin of the OApp can call this function.Provides a way for the OApp to enforce things like paying for PreCrime, AND/OR minimum dst lzReceive gas amounts etc.These enforced options can vary as the potential options/execution on the remote may differ as per the msgType. eg. Amount of lzReceive() gas necessary to deliver a lzCompose() message adds overhead you dont want to pay if you are only making a standard LayerZero message ie. lzReceive() WITHOUT sendCompose().\",\"params\":{\"_enforcedOptions\":\"An array of EnforcedOptionParam structures specifying enforced options.\"}},\"setMsgInspector(address)\":{\"details\":\"Sets the message inspector address for the OFT.This is an optional contract that can be used to inspect both 'message' and 'options'.Set it to address(0) to disable it, or set it to a contract address to enable it.\",\"params\":{\"_msgInspector\":\"The address of the message inspector.\"}},\"setPeer(uint32,bytes32)\":{\"details\":\"Only the owner/admin of the OApp can call this function.Indicates that the peer is trusted to send LayerZero messages to this OApp.Set this to bytes32(0) to remove the peer address.Peer is a bytes32 to accommodate non-evm chains.\",\"params\":{\"_eid\":\"The endpoint ID.\",\"_peer\":\"The address of the peer to be associated with the corresponding endpoint.\"}},\"setPreCrime(address)\":{\"details\":\"Sets the preCrime contract address.\",\"params\":{\"_preCrime\":\"The address of the preCrime contract.\"}},\"sharedDecimals()\":{\"details\":\"Retrieves the shared decimals of the OFT.Sets an implicit cap on the amount of tokens, over uint64.max() will need some sort of outbound cap / totalSupply cap Lowest common decimal denominator between chains. Defaults to 6 decimal places to provide up to 18,446,744,073,709.551615 units (max uint64). For tokens exceeding this totalSupply(), they will need to override the sharedDecimals function with something smaller. ie. 4 sharedDecimals would be 1,844,674,407,370,955.1615\",\"returns\":{\"_0\":\"The shared decimals of the OFT.\"}},\"token()\":{\"returns\":{\"_0\":\"token The address of the ERC20 token implementation.\"}},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"title\":\"OFTCore\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"allowInitializePath((uint32,bytes32,uint64))\":{\"notice\":\"Checks if the path initialization is allowed based on the provided origin.\"},\"approvalRequired()\":{\"notice\":\"Indicates whether the OFT contract requires approval of the 'token()' to send.\"},\"combineOptions(uint32,uint16,bytes)\":{\"notice\":\"Combines options for a given endpoint and message type.\"},\"endpoint()\":{\"notice\":\"Retrieves the LayerZero endpoint associated with the OApp.\"},\"isComposeMsgSender((uint32,bytes32,uint64),bytes,address)\":{\"notice\":\"Indicates whether an address is an approved composeMsg sender to the Endpoint.\"},\"nextNonce(uint32,bytes32)\":{\"notice\":\"Retrieves the next nonce for a given source endpoint and sender address.\"},\"oAppVersion()\":{\"notice\":\"Retrieves the OApp version information.\"},\"oftVersion()\":{\"notice\":\"Retrieves interfaceID and the version of the OFT.\"},\"peers(uint32)\":{\"notice\":\"Retrieves the peer (OApp) associated with a corresponding endpoint.\"},\"quoteOFT((uint32,bytes32,uint256,uint256,bytes,bytes,bytes))\":{\"notice\":\"Provides the fee breakdown and settings data for an OFT. Unused in the default implementation.\"},\"quoteSend((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),bool)\":{\"notice\":\"Provides a quote for the send() operation.\"},\"setDelegate(address)\":{\"notice\":\"Sets the delegate address for the OApp.\"},\"setPeer(uint32,bytes32)\":{\"notice\":\"Sets the peer address (OApp instance) for a corresponding endpoint.\"},\"token()\":{\"notice\":\"Retrieves the address of the token associated with the OFT.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@layerzerolabs/oft-evm/contracts/OFTCore.sol\":\"OFTCore\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\nimport { IMessageLibManager } from \\\"./IMessageLibManager.sol\\\";\\nimport { IMessagingComposer } from \\\"./IMessagingComposer.sol\\\";\\nimport { IMessagingChannel } from \\\"./IMessagingChannel.sol\\\";\\nimport { IMessagingContext } from \\\"./IMessagingContext.sol\\\";\\n\\nstruct MessagingParams {\\n uint32 dstEid;\\n bytes32 receiver;\\n bytes message;\\n bytes options;\\n bool payInLzToken;\\n}\\n\\nstruct MessagingReceipt {\\n bytes32 guid;\\n uint64 nonce;\\n MessagingFee fee;\\n}\\n\\nstruct MessagingFee {\\n uint256 nativeFee;\\n uint256 lzTokenFee;\\n}\\n\\nstruct Origin {\\n uint32 srcEid;\\n bytes32 sender;\\n uint64 nonce;\\n}\\n\\ninterface ILayerZeroEndpointV2 is IMessageLibManager, IMessagingComposer, IMessagingChannel, IMessagingContext {\\n event PacketSent(bytes encodedPayload, bytes options, address sendLibrary);\\n\\n event PacketVerified(Origin origin, address receiver, bytes32 payloadHash);\\n\\n event PacketDelivered(Origin origin, address receiver);\\n\\n event LzReceiveAlert(\\n address indexed receiver,\\n address indexed executor,\\n Origin origin,\\n bytes32 guid,\\n uint256 gas,\\n uint256 value,\\n bytes message,\\n bytes extraData,\\n bytes reason\\n );\\n\\n event LzTokenSet(address token);\\n\\n event DelegateSet(address sender, address delegate);\\n\\n function quote(MessagingParams calldata _params, address _sender) external view returns (MessagingFee memory);\\n\\n function send(\\n MessagingParams calldata _params,\\n address _refundAddress\\n ) external payable returns (MessagingReceipt memory);\\n\\n function verify(Origin calldata _origin, address _receiver, bytes32 _payloadHash) external;\\n\\n function verifiable(Origin calldata _origin, address _receiver) external view returns (bool);\\n\\n function initializable(Origin calldata _origin, address _receiver) external view returns (bool);\\n\\n function lzReceive(\\n Origin calldata _origin,\\n address _receiver,\\n bytes32 _guid,\\n bytes calldata _message,\\n bytes calldata _extraData\\n ) external payable;\\n\\n // oapp can burn messages partially by calling this function with its own business logic if messages are verified in order\\n function clear(address _oapp, Origin calldata _origin, bytes32 _guid, bytes calldata _message) external;\\n\\n function setLzToken(address _lzToken) external;\\n\\n function lzToken() external view returns (address);\\n\\n function nativeToken() external view returns (address);\\n\\n function setDelegate(address _delegate) external;\\n}\\n\",\"keccak256\":\"0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\nimport { Origin } from \\\"./ILayerZeroEndpointV2.sol\\\";\\n\\ninterface ILayerZeroReceiver {\\n function allowInitializePath(Origin calldata _origin) external view returns (bool);\\n\\n function nextNonce(uint32 _eid, bytes32 _sender) external view returns (uint64);\\n\\n function lzReceive(\\n Origin calldata _origin,\\n bytes32 _guid,\\n bytes calldata _message,\\n address _executor,\\n bytes calldata _extraData\\n ) external payable;\\n}\\n\",\"keccak256\":\"0x9641abba8d53b08bb517d1b74801dd15ea7b84d77a6719085bd96c8ea94e3ca0\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\nimport { IERC165 } from \\\"@openzeppelin/contracts/utils/introspection/IERC165.sol\\\";\\n\\nimport { SetConfigParam } from \\\"./IMessageLibManager.sol\\\";\\n\\nenum MessageLibType {\\n Send,\\n Receive,\\n SendAndReceive\\n}\\n\\ninterface IMessageLib is IERC165 {\\n function setConfig(address _oapp, SetConfigParam[] calldata _config) external;\\n\\n function getConfig(uint32 _eid, address _oapp, uint32 _configType) external view returns (bytes memory config);\\n\\n function isSupportedEid(uint32 _eid) external view returns (bool);\\n\\n // message libs of same major version are compatible\\n function version() external view returns (uint64 major, uint8 minor, uint8 endpointVersion);\\n\\n function messageLibType() external view returns (MessageLibType);\\n}\\n\",\"keccak256\":\"0x5cf5f24751b4e3ea1c9c5ded07cedfdfd62566b6daaffcc0144733859c9dba0c\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\nstruct SetConfigParam {\\n uint32 eid;\\n uint32 configType;\\n bytes config;\\n}\\n\\ninterface IMessageLibManager {\\n struct Timeout {\\n address lib;\\n uint256 expiry;\\n }\\n\\n event LibraryRegistered(address newLib);\\n event DefaultSendLibrarySet(uint32 eid, address newLib);\\n event DefaultReceiveLibrarySet(uint32 eid, address newLib);\\n event DefaultReceiveLibraryTimeoutSet(uint32 eid, address oldLib, uint256 expiry);\\n event SendLibrarySet(address sender, uint32 eid, address newLib);\\n event ReceiveLibrarySet(address receiver, uint32 eid, address newLib);\\n event ReceiveLibraryTimeoutSet(address receiver, uint32 eid, address oldLib, uint256 timeout);\\n\\n function registerLibrary(address _lib) external;\\n\\n function isRegisteredLibrary(address _lib) external view returns (bool);\\n\\n function getRegisteredLibraries() external view returns (address[] memory);\\n\\n function setDefaultSendLibrary(uint32 _eid, address _newLib) external;\\n\\n function defaultSendLibrary(uint32 _eid) external view returns (address);\\n\\n function setDefaultReceiveLibrary(uint32 _eid, address _newLib, uint256 _gracePeriod) external;\\n\\n function defaultReceiveLibrary(uint32 _eid) external view returns (address);\\n\\n function setDefaultReceiveLibraryTimeout(uint32 _eid, address _lib, uint256 _expiry) external;\\n\\n function defaultReceiveLibraryTimeout(uint32 _eid) external view returns (address lib, uint256 expiry);\\n\\n function isSupportedEid(uint32 _eid) external view returns (bool);\\n\\n function isValidReceiveLibrary(address _receiver, uint32 _eid, address _lib) external view returns (bool);\\n\\n /// ------------------- OApp interfaces -------------------\\n function setSendLibrary(address _oapp, uint32 _eid, address _newLib) external;\\n\\n function getSendLibrary(address _sender, uint32 _eid) external view returns (address lib);\\n\\n function isDefaultSendLibrary(address _sender, uint32 _eid) external view returns (bool);\\n\\n function setReceiveLibrary(address _oapp, uint32 _eid, address _newLib, uint256 _gracePeriod) external;\\n\\n function getReceiveLibrary(address _receiver, uint32 _eid) external view returns (address lib, bool isDefault);\\n\\n function setReceiveLibraryTimeout(address _oapp, uint32 _eid, address _lib, uint256 _expiry) external;\\n\\n function receiveLibraryTimeout(address _receiver, uint32 _eid) external view returns (address lib, uint256 expiry);\\n\\n function setConfig(address _oapp, address _lib, SetConfigParam[] calldata _params) external;\\n\\n function getConfig(\\n address _oapp,\\n address _lib,\\n uint32 _eid,\\n uint32 _configType\\n ) external view returns (bytes memory config);\\n}\\n\",\"keccak256\":\"0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\ninterface IMessagingChannel {\\n event InboundNonceSkipped(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce);\\n event PacketNilified(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce, bytes32 payloadHash);\\n event PacketBurnt(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce, bytes32 payloadHash);\\n\\n function eid() external view returns (uint32);\\n\\n // this is an emergency function if a message cannot be verified for some reasons\\n // required to provide _nextNonce to avoid race condition\\n function skip(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce) external;\\n\\n function nilify(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce, bytes32 _payloadHash) external;\\n\\n function burn(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce, bytes32 _payloadHash) external;\\n\\n function nextGuid(address _sender, uint32 _dstEid, bytes32 _receiver) external view returns (bytes32);\\n\\n function inboundNonce(address _receiver, uint32 _srcEid, bytes32 _sender) external view returns (uint64);\\n\\n function outboundNonce(address _sender, uint32 _dstEid, bytes32 _receiver) external view returns (uint64);\\n\\n function inboundPayloadHash(\\n address _receiver,\\n uint32 _srcEid,\\n bytes32 _sender,\\n uint64 _nonce\\n ) external view returns (bytes32);\\n\\n function lazyInboundNonce(address _receiver, uint32 _srcEid, bytes32 _sender) external view returns (uint64);\\n}\\n\",\"keccak256\":\"0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\ninterface IMessagingComposer {\\n event ComposeSent(address from, address to, bytes32 guid, uint16 index, bytes message);\\n event ComposeDelivered(address from, address to, bytes32 guid, uint16 index);\\n event LzComposeAlert(\\n address indexed from,\\n address indexed to,\\n address indexed executor,\\n bytes32 guid,\\n uint16 index,\\n uint256 gas,\\n uint256 value,\\n bytes message,\\n bytes extraData,\\n bytes reason\\n );\\n\\n function composeQueue(\\n address _from,\\n address _to,\\n bytes32 _guid,\\n uint16 _index\\n ) external view returns (bytes32 messageHash);\\n\\n function sendCompose(address _to, bytes32 _guid, uint16 _index, bytes calldata _message) external;\\n\\n function lzCompose(\\n address _from,\\n address _to,\\n bytes32 _guid,\\n uint16 _index,\\n bytes calldata _message,\\n bytes calldata _extraData\\n ) external payable;\\n}\\n\",\"keccak256\":\"0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\ninterface IMessagingContext {\\n function isSendingMessage() external view returns (bool);\\n\\n function getSendContext() external view returns (uint32 dstEid, address sender);\\n}\\n\",\"keccak256\":\"0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\nimport { MessagingFee } from \\\"./ILayerZeroEndpointV2.sol\\\";\\nimport { IMessageLib } from \\\"./IMessageLib.sol\\\";\\n\\nstruct Packet {\\n uint64 nonce;\\n uint32 srcEid;\\n address sender;\\n uint32 dstEid;\\n bytes32 receiver;\\n bytes32 guid;\\n bytes message;\\n}\\n\\ninterface ISendLib is IMessageLib {\\n function send(\\n Packet calldata _packet,\\n bytes calldata _options,\\n bool _payInLzToken\\n ) external returns (MessagingFee memory, bytes memory encodedPacket);\\n\\n function quote(\\n Packet calldata _packet,\\n bytes calldata _options,\\n bool _payInLzToken\\n ) external view returns (MessagingFee memory);\\n\\n function setTreasury(address _treasury) external;\\n\\n function withdrawFee(address _to, uint256 _amount) external;\\n\\n function withdrawLzTokenFee(address _lzToken, address _to, uint256 _amount) external;\\n}\\n\",\"keccak256\":\"0xf1c07bc61e7b1dce195ed12d50f87980fbf2d63cac1326fd28287f55fe0ba625\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol\":{\"content\":\"// SPDX-License-Identifier: LZBL-1.2\\n\\npragma solidity ^0.8.20;\\n\\nlibrary AddressCast {\\n error AddressCast_InvalidSizeForAddress();\\n error AddressCast_InvalidAddress();\\n\\n function toBytes32(bytes calldata _addressBytes) internal pure returns (bytes32 result) {\\n if (_addressBytes.length > 32) revert AddressCast_InvalidAddress();\\n result = bytes32(_addressBytes);\\n unchecked {\\n uint256 offset = 32 - _addressBytes.length;\\n result = result >> (offset * 8);\\n }\\n }\\n\\n function toBytes32(address _address) internal pure returns (bytes32 result) {\\n result = bytes32(uint256(uint160(_address)));\\n }\\n\\n function toBytes(bytes32 _addressBytes32, uint256 _size) internal pure returns (bytes memory result) {\\n if (_size == 0 || _size > 32) revert AddressCast_InvalidSizeForAddress();\\n result = new bytes(_size);\\n unchecked {\\n uint256 offset = 256 - _size * 8;\\n assembly {\\n mstore(add(result, 32), shl(offset, _addressBytes32))\\n }\\n }\\n }\\n\\n function toAddress(bytes32 _addressBytes32) internal pure returns (address result) {\\n result = address(uint160(uint256(_addressBytes32)));\\n }\\n\\n function toAddress(bytes calldata _addressBytes) internal pure returns (address result) {\\n if (_addressBytes.length != 20) revert AddressCast_InvalidAddress();\\n result = address(bytes20(_addressBytes));\\n }\\n}\\n\",\"keccak256\":\"0x2ebbcaaab3554edcd41b581f1a72ac1806afbfb8047d0d47ff098f9af30d6deb\",\"license\":\"LZBL-1.2\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol\":{\"content\":\"// SPDX-License-Identifier: LZBL-1.2\\n\\npragma solidity ^0.8.20;\\n\\nimport { Packet } from \\\"../../interfaces/ISendLib.sol\\\";\\nimport { AddressCast } from \\\"../../libs/AddressCast.sol\\\";\\n\\nlibrary PacketV1Codec {\\n using AddressCast for address;\\n using AddressCast for bytes32;\\n\\n uint8 internal constant PACKET_VERSION = 1;\\n\\n // header (version + nonce + path)\\n // version\\n uint256 private constant PACKET_VERSION_OFFSET = 0;\\n // nonce\\n uint256 private constant NONCE_OFFSET = 1;\\n // path\\n uint256 private constant SRC_EID_OFFSET = 9;\\n uint256 private constant SENDER_OFFSET = 13;\\n uint256 private constant DST_EID_OFFSET = 45;\\n uint256 private constant RECEIVER_OFFSET = 49;\\n // payload (guid + message)\\n uint256 private constant GUID_OFFSET = 81; // keccak256(nonce + path)\\n uint256 private constant MESSAGE_OFFSET = 113;\\n\\n function encode(Packet memory _packet) internal pure returns (bytes memory encodedPacket) {\\n encodedPacket = abi.encodePacked(\\n PACKET_VERSION,\\n _packet.nonce,\\n _packet.srcEid,\\n _packet.sender.toBytes32(),\\n _packet.dstEid,\\n _packet.receiver,\\n _packet.guid,\\n _packet.message\\n );\\n }\\n\\n function encodePacketHeader(Packet memory _packet) internal pure returns (bytes memory) {\\n return\\n abi.encodePacked(\\n PACKET_VERSION,\\n _packet.nonce,\\n _packet.srcEid,\\n _packet.sender.toBytes32(),\\n _packet.dstEid,\\n _packet.receiver\\n );\\n }\\n\\n function encodePayload(Packet memory _packet) internal pure returns (bytes memory) {\\n return abi.encodePacked(_packet.guid, _packet.message);\\n }\\n\\n function header(bytes calldata _packet) internal pure returns (bytes calldata) {\\n return _packet[0:GUID_OFFSET];\\n }\\n\\n function version(bytes calldata _packet) internal pure returns (uint8) {\\n return uint8(bytes1(_packet[PACKET_VERSION_OFFSET:NONCE_OFFSET]));\\n }\\n\\n function nonce(bytes calldata _packet) internal pure returns (uint64) {\\n return uint64(bytes8(_packet[NONCE_OFFSET:SRC_EID_OFFSET]));\\n }\\n\\n function srcEid(bytes calldata _packet) internal pure returns (uint32) {\\n return uint32(bytes4(_packet[SRC_EID_OFFSET:SENDER_OFFSET]));\\n }\\n\\n function sender(bytes calldata _packet) internal pure returns (bytes32) {\\n return bytes32(_packet[SENDER_OFFSET:DST_EID_OFFSET]);\\n }\\n\\n function senderAddressB20(bytes calldata _packet) internal pure returns (address) {\\n return sender(_packet).toAddress();\\n }\\n\\n function dstEid(bytes calldata _packet) internal pure returns (uint32) {\\n return uint32(bytes4(_packet[DST_EID_OFFSET:RECEIVER_OFFSET]));\\n }\\n\\n function receiver(bytes calldata _packet) internal pure returns (bytes32) {\\n return bytes32(_packet[RECEIVER_OFFSET:GUID_OFFSET]);\\n }\\n\\n function receiverB20(bytes calldata _packet) internal pure returns (address) {\\n return receiver(_packet).toAddress();\\n }\\n\\n function guid(bytes calldata _packet) internal pure returns (bytes32) {\\n return bytes32(_packet[GUID_OFFSET:MESSAGE_OFFSET]);\\n }\\n\\n function message(bytes calldata _packet) internal pure returns (bytes calldata) {\\n return bytes(_packet[MESSAGE_OFFSET:]);\\n }\\n\\n function payload(bytes calldata _packet) internal pure returns (bytes calldata) {\\n return bytes(_packet[GUID_OFFSET:]);\\n }\\n\\n function payloadHash(bytes calldata _packet) internal pure returns (bytes32) {\\n return keccak256(payload(_packet));\\n }\\n}\\n\",\"keccak256\":\"0xc84cf1bf785977fe1fbe7566eef902c2db68d0e163813ebe6c34921754802680\",\"license\":\"LZBL-1.2\"},\"@layerzerolabs/oapp-evm/contracts/oapp/OApp.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\n// @dev Import the 'MessagingFee' and 'MessagingReceipt' so it's exposed to OApp implementers\\n// solhint-disable-next-line no-unused-import\\nimport { OAppSender, MessagingFee, MessagingReceipt } from \\\"./OAppSender.sol\\\";\\n// @dev Import the 'Origin' so it's exposed to OApp implementers\\n// solhint-disable-next-line no-unused-import\\nimport { OAppReceiver, Origin } from \\\"./OAppReceiver.sol\\\";\\nimport { OAppCore } from \\\"./OAppCore.sol\\\";\\n\\n/**\\n * @title OApp\\n * @dev Abstract contract serving as the base for OApp implementation, combining OAppSender and OAppReceiver functionality.\\n */\\nabstract contract OApp is OAppSender, OAppReceiver {\\n /**\\n * @dev Constructor to initialize the OApp with the provided endpoint and owner.\\n * @param _endpoint The address of the LOCAL LayerZero endpoint.\\n * @param _delegate The delegate capable of making OApp configurations inside of the endpoint.\\n */\\n constructor(address _endpoint, address _delegate) OAppCore(_endpoint, _delegate) {}\\n\\n /**\\n * @notice Retrieves the OApp version information.\\n * @return senderVersion The version of the OAppSender.sol implementation.\\n * @return receiverVersion The version of the OAppReceiver.sol implementation.\\n */\\n function oAppVersion()\\n public\\n pure\\n virtual\\n override(OAppSender, OAppReceiver)\\n returns (uint64 senderVersion, uint64 receiverVersion)\\n {\\n return (SENDER_VERSION, RECEIVER_VERSION);\\n }\\n}\\n\",\"keccak256\":\"0xac362c4c291fad2f1511a968424b2e78a5ad502d1c867bd31da04be742aca8c5\",\"license\":\"MIT\"},\"@layerzerolabs/oapp-evm/contracts/oapp/OAppCore.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\nimport { IOAppCore, ILayerZeroEndpointV2 } from \\\"./interfaces/IOAppCore.sol\\\";\\n\\n/**\\n * @title OAppCore\\n * @dev Abstract contract implementing the IOAppCore interface with basic OApp configurations.\\n */\\nabstract contract OAppCore is IOAppCore, Ownable {\\n // The LayerZero endpoint associated with the given OApp\\n ILayerZeroEndpointV2 public immutable endpoint;\\n\\n // Mapping to store peers associated with corresponding endpoints\\n mapping(uint32 eid => bytes32 peer) public peers;\\n\\n /**\\n * @dev Constructor to initialize the OAppCore with the provided endpoint and delegate.\\n * @param _endpoint The address of the LOCAL Layer Zero endpoint.\\n * @param _delegate The delegate capable of making OApp configurations inside of the endpoint.\\n *\\n * @dev The delegate typically should be set as the owner of the contract.\\n */\\n constructor(address _endpoint, address _delegate) {\\n endpoint = ILayerZeroEndpointV2(_endpoint);\\n\\n if (_delegate == address(0)) revert InvalidDelegate();\\n endpoint.setDelegate(_delegate);\\n }\\n\\n /**\\n * @notice Sets the peer address (OApp instance) for a corresponding endpoint.\\n * @param _eid The endpoint ID.\\n * @param _peer The address of the peer to be associated with the corresponding endpoint.\\n *\\n * @dev Only the owner/admin of the OApp can call this function.\\n * @dev Indicates that the peer is trusted to send LayerZero messages to this OApp.\\n * @dev Set this to bytes32(0) to remove the peer address.\\n * @dev Peer is a bytes32 to accommodate non-evm chains.\\n */\\n function setPeer(uint32 _eid, bytes32 _peer) public virtual onlyOwner {\\n _setPeer(_eid, _peer);\\n }\\n\\n /**\\n * @notice Sets the peer address (OApp instance) for a corresponding endpoint.\\n * @param _eid The endpoint ID.\\n * @param _peer The address of the peer to be associated with the corresponding endpoint.\\n *\\n * @dev Indicates that the peer is trusted to send LayerZero messages to this OApp.\\n * @dev Set this to bytes32(0) to remove the peer address.\\n * @dev Peer is a bytes32 to accommodate non-evm chains.\\n */\\n function _setPeer(uint32 _eid, bytes32 _peer) internal virtual {\\n peers[_eid] = _peer;\\n emit PeerSet(_eid, _peer);\\n }\\n\\n /**\\n * @notice Internal function to get the peer address associated with a specific endpoint; reverts if NOT set.\\n * ie. the peer is set to bytes32(0).\\n * @param _eid The endpoint ID.\\n * @return peer The address of the peer associated with the specified endpoint.\\n */\\n function _getPeerOrRevert(uint32 _eid) internal view virtual returns (bytes32) {\\n bytes32 peer = peers[_eid];\\n if (peer == bytes32(0)) revert NoPeer(_eid);\\n return peer;\\n }\\n\\n /**\\n * @notice Sets the delegate address for the OApp.\\n * @param _delegate The address of the delegate to be set.\\n *\\n * @dev Only the owner/admin of the OApp can call this function.\\n * @dev Provides the ability for a delegate to set configs, on behalf of the OApp, directly on the Endpoint contract.\\n */\\n function setDelegate(address _delegate) public onlyOwner {\\n endpoint.setDelegate(_delegate);\\n }\\n}\\n\",\"keccak256\":\"0x13a9c2d1d2c1f086b8624f2e84c4a4702212daae36f701d92bb915b535cbe4cc\",\"license\":\"MIT\"},\"@layerzerolabs/oapp-evm/contracts/oapp/OAppReceiver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\nimport { IOAppReceiver, Origin } from \\\"./interfaces/IOAppReceiver.sol\\\";\\nimport { OAppCore } from \\\"./OAppCore.sol\\\";\\n\\n/**\\n * @title OAppReceiver\\n * @dev Abstract contract implementing the ILayerZeroReceiver interface and extending OAppCore for OApp receivers.\\n */\\nabstract contract OAppReceiver is IOAppReceiver, OAppCore {\\n // Custom error message for when the caller is not the registered endpoint/\\n error OnlyEndpoint(address addr);\\n\\n // @dev The version of the OAppReceiver implementation.\\n // @dev Version is bumped when changes are made to this contract.\\n uint64 internal constant RECEIVER_VERSION = 2;\\n\\n /**\\n * @notice Retrieves the OApp version information.\\n * @return senderVersion The version of the OAppSender.sol contract.\\n * @return receiverVersion The version of the OAppReceiver.sol contract.\\n *\\n * @dev Providing 0 as the default for OAppSender version. Indicates that the OAppSender is not implemented.\\n * ie. this is a RECEIVE only OApp.\\n * @dev If the OApp uses both OAppSender and OAppReceiver, then this needs to be override returning the correct versions.\\n */\\n function oAppVersion() public view virtual returns (uint64 senderVersion, uint64 receiverVersion) {\\n return (0, RECEIVER_VERSION);\\n }\\n\\n /**\\n * @notice Indicates whether an address is an approved composeMsg sender to the Endpoint.\\n * @dev _origin The origin information containing the source endpoint and sender address.\\n * - srcEid: The source chain endpoint ID.\\n * - sender: The sender address on the src chain.\\n * - nonce: The nonce of the message.\\n * @dev _message The lzReceive payload.\\n * @param _sender The sender address.\\n * @return isSender Is a valid sender.\\n *\\n * @dev Applications can optionally choose to implement separate composeMsg senders that are NOT the bridging layer.\\n * @dev The default sender IS the OAppReceiver implementer.\\n */\\n function isComposeMsgSender(\\n Origin calldata /*_origin*/,\\n bytes calldata /*_message*/,\\n address _sender\\n ) public view virtual returns (bool) {\\n return _sender == address(this);\\n }\\n\\n /**\\n * @notice Checks if the path initialization is allowed based on the provided origin.\\n * @param origin The origin information containing the source endpoint and sender address.\\n * @return Whether the path has been initialized.\\n *\\n * @dev This indicates to the endpoint that the OApp has enabled msgs for this particular path to be received.\\n * @dev This defaults to assuming if a peer has been set, its initialized.\\n * Can be overridden by the OApp if there is other logic to determine this.\\n */\\n function allowInitializePath(Origin calldata origin) public view virtual returns (bool) {\\n return peers[origin.srcEid] == origin.sender;\\n }\\n\\n /**\\n * @notice Retrieves the next nonce for a given source endpoint and sender address.\\n * @dev _srcEid The source endpoint ID.\\n * @dev _sender The sender address.\\n * @return nonce The next nonce.\\n *\\n * @dev The path nonce starts from 1. If 0 is returned it means that there is NO nonce ordered enforcement.\\n * @dev Is required by the off-chain executor to determine the OApp expects msg execution is ordered.\\n * @dev This is also enforced by the OApp.\\n * @dev By default this is NOT enabled. ie. nextNonce is hardcoded to return 0.\\n */\\n function nextNonce(uint32 /*_srcEid*/, bytes32 /*_sender*/) public view virtual returns (uint64 nonce) {\\n return 0;\\n }\\n\\n /**\\n * @dev Entry point for receiving messages or packets from the endpoint.\\n * @param _origin The origin information containing the source endpoint and sender address.\\n * - srcEid: The source chain endpoint ID.\\n * - sender: The sender address on the src chain.\\n * - nonce: The nonce of the message.\\n * @param _guid The unique identifier for the received LayerZero message.\\n * @param _message The payload of the received message.\\n * @param _executor The address of the executor for the received message.\\n * @param _extraData Additional arbitrary data provided by the corresponding executor.\\n *\\n * @dev Entry point for receiving msg/packet from the LayerZero endpoint.\\n */\\n function lzReceive(\\n Origin calldata _origin,\\n bytes32 _guid,\\n bytes calldata _message,\\n address _executor,\\n bytes calldata _extraData\\n ) public payable virtual {\\n // Ensures that only the endpoint can attempt to lzReceive() messages to this OApp.\\n if (address(endpoint) != msg.sender) revert OnlyEndpoint(msg.sender);\\n\\n // Ensure that the sender matches the expected peer for the source endpoint.\\n if (_getPeerOrRevert(_origin.srcEid) != _origin.sender) revert OnlyPeer(_origin.srcEid, _origin.sender);\\n\\n // Call the internal OApp implementation of lzReceive.\\n _lzReceive(_origin, _guid, _message, _executor, _extraData);\\n }\\n\\n /**\\n * @dev Internal function to implement lzReceive logic without needing to copy the basic parameter validation.\\n */\\n function _lzReceive(\\n Origin calldata _origin,\\n bytes32 _guid,\\n bytes calldata _message,\\n address _executor,\\n bytes calldata _extraData\\n ) internal virtual;\\n}\\n\",\"keccak256\":\"0x0174e9f1ec4cefe4b5adc26c392269c699b9ff75965364e5b7264426a462c70b\",\"license\":\"MIT\"},\"@layerzerolabs/oapp-evm/contracts/oapp/OAppSender.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\nimport { SafeERC20, IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\nimport { MessagingParams, MessagingFee, MessagingReceipt } from \\\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\\\";\\nimport { OAppCore } from \\\"./OAppCore.sol\\\";\\n\\n/**\\n * @title OAppSender\\n * @dev Abstract contract implementing the OAppSender functionality for sending messages to a LayerZero endpoint.\\n */\\nabstract contract OAppSender is OAppCore {\\n using SafeERC20 for IERC20;\\n\\n // Custom error messages\\n error NotEnoughNative(uint256 msgValue);\\n error LzTokenUnavailable();\\n\\n // @dev The version of the OAppSender implementation.\\n // @dev Version is bumped when changes are made to this contract.\\n uint64 internal constant SENDER_VERSION = 1;\\n\\n /**\\n * @notice Retrieves the OApp version information.\\n * @return senderVersion The version of the OAppSender.sol contract.\\n * @return receiverVersion The version of the OAppReceiver.sol contract.\\n *\\n * @dev Providing 0 as the default for OAppReceiver version. Indicates that the OAppReceiver is not implemented.\\n * ie. this is a SEND only OApp.\\n * @dev If the OApp uses both OAppSender and OAppReceiver, then this needs to be override returning the correct versions\\n */\\n function oAppVersion() public view virtual returns (uint64 senderVersion, uint64 receiverVersion) {\\n return (SENDER_VERSION, 0);\\n }\\n\\n /**\\n * @dev Internal function to interact with the LayerZero EndpointV2.quote() for fee calculation.\\n * @param _dstEid The destination endpoint ID.\\n * @param _message The message payload.\\n * @param _options Additional options for the message.\\n * @param _payInLzToken Flag indicating whether to pay the fee in LZ tokens.\\n * @return fee The calculated MessagingFee for the message.\\n * - nativeFee: The native fee for the message.\\n * - lzTokenFee: The LZ token fee for the message.\\n */\\n function _quote(\\n uint32 _dstEid,\\n bytes memory _message,\\n bytes memory _options,\\n bool _payInLzToken\\n ) internal view virtual returns (MessagingFee memory fee) {\\n return\\n endpoint.quote(\\n MessagingParams(_dstEid, _getPeerOrRevert(_dstEid), _message, _options, _payInLzToken),\\n address(this)\\n );\\n }\\n\\n /**\\n * @dev Internal function to interact with the LayerZero EndpointV2.send() for sending a message.\\n * @param _dstEid The destination endpoint ID.\\n * @param _message The message payload.\\n * @param _options Additional options for the message.\\n * @param _fee The calculated LayerZero fee for the message.\\n * - nativeFee: The native fee.\\n * - lzTokenFee: The lzToken fee.\\n * @param _refundAddress The address to receive any excess fee values sent to the endpoint.\\n * @return receipt The receipt for the sent message.\\n * - guid: The unique identifier for the sent message.\\n * - nonce: The nonce of the sent message.\\n * - fee: The LayerZero fee incurred for the message.\\n */\\n function _lzSend(\\n uint32 _dstEid,\\n bytes memory _message,\\n bytes memory _options,\\n MessagingFee memory _fee,\\n address _refundAddress\\n ) internal virtual returns (MessagingReceipt memory receipt) {\\n // @dev Push corresponding fees to the endpoint, any excess is sent back to the _refundAddress from the endpoint.\\n uint256 messageValue = _payNative(_fee.nativeFee);\\n if (_fee.lzTokenFee > 0) _payLzToken(_fee.lzTokenFee);\\n\\n return\\n // solhint-disable-next-line check-send-result\\n endpoint.send{ value: messageValue }(\\n MessagingParams(_dstEid, _getPeerOrRevert(_dstEid), _message, _options, _fee.lzTokenFee > 0),\\n _refundAddress\\n );\\n }\\n\\n /**\\n * @dev Internal function to pay the native fee associated with the message.\\n * @param _nativeFee The native fee to be paid.\\n * @return nativeFee The amount of native currency paid.\\n *\\n * @dev If the OApp needs to initiate MULTIPLE LayerZero messages in a single transaction,\\n * this will need to be overridden because msg.value would contain multiple lzFees.\\n * @dev Should be overridden in the event the LayerZero endpoint requires a different native currency.\\n * @dev Some EVMs use an ERC20 as a method for paying transactions/gasFees.\\n * @dev The endpoint is EITHER/OR, ie. it will NOT support both types of native payment at a time.\\n */\\n function _payNative(uint256 _nativeFee) internal virtual returns (uint256 nativeFee) {\\n if (msg.value != _nativeFee) revert NotEnoughNative(msg.value);\\n return _nativeFee;\\n }\\n\\n /**\\n * @dev Internal function to pay the LZ token fee associated with the message.\\n * @param _lzTokenFee The LZ token fee to be paid.\\n *\\n * @dev If the caller is trying to pay in the specified lzToken, then the lzTokenFee is passed to the endpoint.\\n * @dev Any excess sent, is passed back to the specified _refundAddress in the _lzSend().\\n */\\n function _payLzToken(uint256 _lzTokenFee) internal virtual {\\n // @dev Cannot cache the token because it is not immutable in the endpoint.\\n address lzToken = endpoint.lzToken();\\n if (lzToken == address(0)) revert LzTokenUnavailable();\\n\\n // Pay LZ token fee by sending tokens to the endpoint.\\n IERC20(lzToken).safeTransferFrom(msg.sender, address(endpoint), _lzTokenFee);\\n }\\n}\\n\",\"keccak256\":\"0x518cf4adca601923ed4baa6619846a253ea32b8d8775f8bc1faa3dfac7f67c20\",\"license\":\"MIT\"},\"@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppCore.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\nimport { ILayerZeroEndpointV2 } from \\\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\\\";\\n\\n/**\\n * @title IOAppCore\\n */\\ninterface IOAppCore {\\n // Custom error messages\\n error OnlyPeer(uint32 eid, bytes32 sender);\\n error NoPeer(uint32 eid);\\n error InvalidEndpointCall();\\n error InvalidDelegate();\\n\\n // Event emitted when a peer (OApp) is set for a corresponding endpoint\\n event PeerSet(uint32 eid, bytes32 peer);\\n\\n /**\\n * @notice Retrieves the OApp version information.\\n * @return senderVersion The version of the OAppSender.sol contract.\\n * @return receiverVersion The version of the OAppReceiver.sol contract.\\n */\\n function oAppVersion() external view returns (uint64 senderVersion, uint64 receiverVersion);\\n\\n /**\\n * @notice Retrieves the LayerZero endpoint associated with the OApp.\\n * @return iEndpoint The LayerZero endpoint as an interface.\\n */\\n function endpoint() external view returns (ILayerZeroEndpointV2 iEndpoint);\\n\\n /**\\n * @notice Retrieves the peer (OApp) associated with a corresponding endpoint.\\n * @param _eid The endpoint ID.\\n * @return peer The peer address (OApp instance) associated with the corresponding endpoint.\\n */\\n function peers(uint32 _eid) external view returns (bytes32 peer);\\n\\n /**\\n * @notice Sets the peer address (OApp instance) for a corresponding endpoint.\\n * @param _eid The endpoint ID.\\n * @param _peer The address of the peer to be associated with the corresponding endpoint.\\n */\\n function setPeer(uint32 _eid, bytes32 _peer) external;\\n\\n /**\\n * @notice Sets the delegate address for the OApp Core.\\n * @param _delegate The address of the delegate to be set.\\n */\\n function setDelegate(address _delegate) external;\\n}\\n\",\"keccak256\":\"0x40e49f2de74506e1da5dcaed53a39853f691647f4ceb0fccc8f49a68d3f47c58\",\"license\":\"MIT\"},\"@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppMsgInspector.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @title IOAppMsgInspector\\n * @dev Interface for the OApp Message Inspector, allowing examination of message and options contents.\\n */\\ninterface IOAppMsgInspector {\\n // Custom error message for inspection failure\\n error InspectionFailed(bytes message, bytes options);\\n\\n /**\\n * @notice Allows the inspector to examine LayerZero message contents and optionally throw a revert if invalid.\\n * @param _message The message payload to be inspected.\\n * @param _options Additional options or parameters for inspection.\\n * @return valid A boolean indicating whether the inspection passed (true) or failed (false).\\n *\\n * @dev Optionally done as a revert, OR use the boolean provided to handle the failure.\\n */\\n function inspect(bytes calldata _message, bytes calldata _options) external view returns (bool valid);\\n}\\n\",\"keccak256\":\"0x339654e699043c400cad92de209aa23855ce10211c31cf4114042cc5224d3b7c\",\"license\":\"MIT\"},\"@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppOptionsType3.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Struct representing enforced option parameters.\\n */\\nstruct EnforcedOptionParam {\\n uint32 eid; // Endpoint ID\\n uint16 msgType; // Message Type\\n bytes options; // Additional options\\n}\\n\\n/**\\n * @title IOAppOptionsType3\\n * @dev Interface for the OApp with Type 3 Options, allowing the setting and combining of enforced options.\\n */\\ninterface IOAppOptionsType3 {\\n // Custom error message for invalid options\\n error InvalidOptions(bytes options);\\n\\n // Event emitted when enforced options are set\\n event EnforcedOptionSet(EnforcedOptionParam[] _enforcedOptions);\\n\\n /**\\n * @notice Sets enforced options for specific endpoint and message type combinations.\\n * @param _enforcedOptions An array of EnforcedOptionParam structures specifying enforced options.\\n */\\n function setEnforcedOptions(EnforcedOptionParam[] calldata _enforcedOptions) external;\\n\\n /**\\n * @notice Combines options for a given endpoint and message type.\\n * @param _eid The endpoint ID.\\n * @param _msgType The OApp message type.\\n * @param _extraOptions Additional options passed by the caller.\\n * @return options The combination of caller specified options AND enforced options.\\n */\\n function combineOptions(\\n uint32 _eid,\\n uint16 _msgType,\\n bytes calldata _extraOptions\\n ) external view returns (bytes memory options);\\n}\\n\",\"keccak256\":\"0x9fc08a51e9d7c9c710c4eb26f84fe77228305ad7da63fa486ff24ebf2f3bc461\",\"license\":\"MIT\"},\"@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppReceiver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.20;\\n\\nimport { ILayerZeroReceiver, Origin } from \\\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol\\\";\\n\\ninterface IOAppReceiver is ILayerZeroReceiver {\\n /**\\n * @notice Indicates whether an address is an approved composeMsg sender to the Endpoint.\\n * @param _origin The origin information containing the source endpoint and sender address.\\n * - srcEid: The source chain endpoint ID.\\n * - sender: The sender address on the src chain.\\n * - nonce: The nonce of the message.\\n * @param _message The lzReceive payload.\\n * @param _sender The sender address.\\n * @return isSender Is a valid sender.\\n *\\n * @dev Applications can optionally choose to implement a separate composeMsg sender that is NOT the bridging layer.\\n * @dev The default sender IS the OAppReceiver implementer.\\n */\\n function isComposeMsgSender(\\n Origin calldata _origin,\\n bytes calldata _message,\\n address _sender\\n ) external view returns (bool isSender);\\n}\\n\",\"keccak256\":\"0xd26135185e19b3732746d4a9e2923e896f28dec8664bab161faea2ee26fcdc3d\",\"license\":\"MIT\"},\"@layerzerolabs/oapp-evm/contracts/oapp/libs/OAppOptionsType3.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\nimport { IOAppOptionsType3, EnforcedOptionParam } from \\\"../interfaces/IOAppOptionsType3.sol\\\";\\n\\n/**\\n * @title OAppOptionsType3\\n * @dev Abstract contract implementing the IOAppOptionsType3 interface with type 3 options.\\n */\\nabstract contract OAppOptionsType3 is IOAppOptionsType3, Ownable {\\n uint16 internal constant OPTION_TYPE_3 = 3;\\n\\n // @dev The \\\"msgType\\\" should be defined in the child contract.\\n mapping(uint32 eid => mapping(uint16 msgType => bytes enforcedOption)) public enforcedOptions;\\n\\n /**\\n * @dev Sets the enforced options for specific endpoint and message type combinations.\\n * @param _enforcedOptions An array of EnforcedOptionParam structures specifying enforced options.\\n *\\n * @dev Only the owner/admin of the OApp can call this function.\\n * @dev Provides a way for the OApp to enforce things like paying for PreCrime, AND/OR minimum dst lzReceive gas amounts etc.\\n * @dev These enforced options can vary as the potential options/execution on the remote may differ as per the msgType.\\n * eg. Amount of lzReceive() gas necessary to deliver a lzCompose() message adds overhead you dont want to pay\\n * if you are only making a standard LayerZero message ie. lzReceive() WITHOUT sendCompose().\\n */\\n function setEnforcedOptions(EnforcedOptionParam[] calldata _enforcedOptions) public virtual onlyOwner {\\n _setEnforcedOptions(_enforcedOptions);\\n }\\n\\n /**\\n * @dev Sets the enforced options for specific endpoint and message type combinations.\\n * @param _enforcedOptions An array of EnforcedOptionParam structures specifying enforced options.\\n *\\n * @dev Provides a way for the OApp to enforce things like paying for PreCrime, AND/OR minimum dst lzReceive gas amounts etc.\\n * @dev These enforced options can vary as the potential options/execution on the remote may differ as per the msgType.\\n * eg. Amount of lzReceive() gas necessary to deliver a lzCompose() message adds overhead you dont want to pay\\n * if you are only making a standard LayerZero message ie. lzReceive() WITHOUT sendCompose().\\n */\\n function _setEnforcedOptions(EnforcedOptionParam[] memory _enforcedOptions) internal virtual {\\n for (uint256 i = 0; i < _enforcedOptions.length; i++) {\\n // @dev Enforced options are only available for optionType 3, as type 1 and 2 dont support combining.\\n _assertOptionsType3(_enforcedOptions[i].options);\\n enforcedOptions[_enforcedOptions[i].eid][_enforcedOptions[i].msgType] = _enforcedOptions[i].options;\\n }\\n\\n emit EnforcedOptionSet(_enforcedOptions);\\n }\\n\\n /**\\n * @notice Combines options for a given endpoint and message type.\\n * @param _eid The endpoint ID.\\n * @param _msgType The OAPP message type.\\n * @param _extraOptions Additional options passed by the caller.\\n * @return options The combination of caller specified options AND enforced options.\\n *\\n * @dev If there is an enforced lzReceive option:\\n * - {gasLimit: 200k, msg.value: 1 ether} AND a caller supplies a lzReceive option: {gasLimit: 100k, msg.value: 0.5 ether}\\n * - The resulting options will be {gasLimit: 300k, msg.value: 1.5 ether} when the message is executed on the remote lzReceive() function.\\n * @dev This presence of duplicated options is handled off-chain in the verifier/executor.\\n */\\n function combineOptions(\\n uint32 _eid,\\n uint16 _msgType,\\n bytes calldata _extraOptions\\n ) public view virtual returns (bytes memory) {\\n bytes memory enforced = enforcedOptions[_eid][_msgType];\\n\\n // No enforced options, pass whatever the caller supplied, even if it's empty or legacy type 1/2 options.\\n if (enforced.length == 0) return _extraOptions;\\n\\n // No caller options, return enforced\\n if (_extraOptions.length == 0) return enforced;\\n\\n // @dev If caller provided _extraOptions, must be type 3 as its the ONLY type that can be combined.\\n if (_extraOptions.length >= 2) {\\n _assertOptionsType3(_extraOptions);\\n // @dev Remove the first 2 bytes containing the type from the _extraOptions and combine with enforced.\\n return bytes.concat(enforced, _extraOptions[2:]);\\n }\\n\\n // No valid set of options was found.\\n revert InvalidOptions(_extraOptions);\\n }\\n\\n /**\\n * @dev Internal function to assert that options are of type 3.\\n * @param _options The options to be checked.\\n */\\n function _assertOptionsType3(bytes memory _options) internal pure virtual {\\n uint16 optionsType;\\n assembly {\\n optionsType := mload(add(_options, 2))\\n }\\n if (optionsType != OPTION_TYPE_3) revert InvalidOptions(_options);\\n }\\n}\\n\",\"keccak256\":\"0x5275636cd47e660a2fdf6c7fe9d41ff3cc866b785cc8a9d88c1b8ca983509f01\",\"license\":\"MIT\"},\"@layerzerolabs/oapp-evm/contracts/precrime/OAppPreCrimeSimulator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\nimport { IPreCrime } from \\\"./interfaces/IPreCrime.sol\\\";\\nimport { IOAppPreCrimeSimulator, InboundPacket, Origin } from \\\"./interfaces/IOAppPreCrimeSimulator.sol\\\";\\n\\n/**\\n * @title OAppPreCrimeSimulator\\n * @dev Abstract contract serving as the base for preCrime simulation functionality in an OApp.\\n */\\nabstract contract OAppPreCrimeSimulator is IOAppPreCrimeSimulator, Ownable {\\n // The address of the preCrime implementation.\\n address public preCrime;\\n\\n /**\\n * @dev Retrieves the address of the OApp contract.\\n * @return The address of the OApp contract.\\n *\\n * @dev The simulator contract is the base contract for the OApp by default.\\n * @dev If the simulator is a separate contract, override this function.\\n */\\n function oApp() external view virtual returns (address) {\\n return address(this);\\n }\\n\\n /**\\n * @dev Sets the preCrime contract address.\\n * @param _preCrime The address of the preCrime contract.\\n */\\n function setPreCrime(address _preCrime) public virtual onlyOwner {\\n preCrime = _preCrime;\\n emit PreCrimeSet(_preCrime);\\n }\\n\\n /**\\n * @dev Interface for pre-crime simulations. Always reverts at the end with the simulation results.\\n * @param _packets An array of InboundPacket objects representing received packets to be delivered.\\n *\\n * @dev WARNING: MUST revert at the end with the simulation results.\\n * @dev Gives the preCrime implementation the ability to mock sending packets to the lzReceive function,\\n * WITHOUT actually executing them.\\n */\\n function lzReceiveAndRevert(InboundPacket[] calldata _packets) public payable virtual {\\n for (uint256 i = 0; i < _packets.length; i++) {\\n InboundPacket calldata packet = _packets[i];\\n\\n // Ignore packets that are not from trusted peers.\\n if (!isPeer(packet.origin.srcEid, packet.origin.sender)) continue;\\n\\n // @dev Because a verifier is calling this function, it doesnt have access to executor params:\\n // - address _executor\\n // - bytes calldata _extraData\\n // preCrime will NOT work for OApps that rely on these two parameters inside of their _lzReceive().\\n // They are instead stubbed to default values, address(0) and bytes(\\\"\\\")\\n // @dev Calling this.lzReceiveSimulate removes ability for assembly return 0 callstack exit,\\n // which would cause the revert to be ignored.\\n this.lzReceiveSimulate{ value: packet.value }(\\n packet.origin,\\n packet.guid,\\n packet.message,\\n packet.executor,\\n packet.extraData\\n );\\n }\\n\\n // @dev Revert with the simulation results. msg.sender must implement IPreCrime.buildSimulationResult().\\n revert SimulationResult(IPreCrime(msg.sender).buildSimulationResult());\\n }\\n\\n /**\\n * @dev Is effectively an internal function because msg.sender must be address(this).\\n * Allows resetting the call stack for 'internal' calls.\\n * @param _origin The origin information containing the source endpoint and sender address.\\n * - srcEid: The source chain endpoint ID.\\n * - sender: The sender address on the src chain.\\n * - nonce: The nonce of the message.\\n * @param _guid The unique identifier of the packet.\\n * @param _message The message payload of the packet.\\n * @param _executor The executor address for the packet.\\n * @param _extraData Additional data for the packet.\\n */\\n function lzReceiveSimulate(\\n Origin calldata _origin,\\n bytes32 _guid,\\n bytes calldata _message,\\n address _executor,\\n bytes calldata _extraData\\n ) external payable virtual {\\n // @dev Ensure ONLY can be called 'internally'.\\n if (msg.sender != address(this)) revert OnlySelf();\\n _lzReceiveSimulate(_origin, _guid, _message, _executor, _extraData);\\n }\\n\\n /**\\n * @dev Internal function to handle the OAppPreCrimeSimulator simulated receive.\\n * @param _origin The origin information.\\n * - srcEid: The source chain endpoint ID.\\n * - sender: The sender address from the src chain.\\n * - nonce: The nonce of the LayerZero message.\\n * @param _guid The GUID of the LayerZero message.\\n * @param _message The LayerZero message.\\n * @param _executor The address of the off-chain executor.\\n * @param _extraData Arbitrary data passed by the msg executor.\\n *\\n * @dev Enables the preCrime simulator to mock sending lzReceive() messages,\\n * routes the msg down from the OAppPreCrimeSimulator, and back up to the OAppReceiver.\\n */\\n function _lzReceiveSimulate(\\n Origin calldata _origin,\\n bytes32 _guid,\\n bytes calldata _message,\\n address _executor,\\n bytes calldata _extraData\\n ) internal virtual;\\n\\n /**\\n * @dev checks if the specified peer is considered 'trusted' by the OApp.\\n * @param _eid The endpoint Id to check.\\n * @param _peer The peer to check.\\n * @return Whether the peer passed is considered 'trusted' by the OApp.\\n */\\n function isPeer(uint32 _eid, bytes32 _peer) public view virtual returns (bool);\\n}\\n\",\"keccak256\":\"0x205a0abfd8b3c9af2740769f251381b84999b8e9347f3cd50de3ef8290a17750\",\"license\":\"MIT\"},\"@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IOAppPreCrimeSimulator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\n// @dev Import the Origin so it's exposed to OAppPreCrimeSimulator implementers.\\n// solhint-disable-next-line no-unused-import\\nimport { InboundPacket, Origin } from \\\"../libs/Packet.sol\\\";\\n\\n/**\\n * @title IOAppPreCrimeSimulator Interface\\n * @dev Interface for the preCrime simulation functionality in an OApp.\\n */\\ninterface IOAppPreCrimeSimulator {\\n // @dev simulation result used in PreCrime implementation\\n error SimulationResult(bytes result);\\n error OnlySelf();\\n\\n /**\\n * @dev Emitted when the preCrime contract address is set.\\n * @param preCrimeAddress The address of the preCrime contract.\\n */\\n event PreCrimeSet(address preCrimeAddress);\\n\\n /**\\n * @dev Retrieves the address of the preCrime contract implementation.\\n * @return The address of the preCrime contract.\\n */\\n function preCrime() external view returns (address);\\n\\n /**\\n * @dev Retrieves the address of the OApp contract.\\n * @return The address of the OApp contract.\\n */\\n function oApp() external view returns (address);\\n\\n /**\\n * @dev Sets the preCrime contract address.\\n * @param _preCrime The address of the preCrime contract.\\n */\\n function setPreCrime(address _preCrime) external;\\n\\n /**\\n * @dev Mocks receiving a packet, then reverts with a series of data to infer the state/result.\\n * @param _packets An array of LayerZero InboundPacket objects representing received packets.\\n */\\n function lzReceiveAndRevert(InboundPacket[] calldata _packets) external payable;\\n\\n /**\\n * @dev checks if the specified peer is considered 'trusted' by the OApp.\\n * @param _eid The endpoint Id to check.\\n * @param _peer The peer to check.\\n * @return Whether the peer passed is considered 'trusted' by the OApp.\\n */\\n function isPeer(uint32 _eid, bytes32 _peer) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x5d24db150949ea8e6437178e65a942e8c8b7f332e5daf32750f56b23b35b5bb2\",\"license\":\"MIT\"},\"@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IPreCrime.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\nstruct PreCrimePeer {\\n uint32 eid;\\n bytes32 preCrime;\\n bytes32 oApp;\\n}\\n\\n// TODO not done yet\\ninterface IPreCrime {\\n error OnlyOffChain();\\n\\n // for simulate()\\n error PacketOversize(uint256 max, uint256 actual);\\n error PacketUnsorted();\\n error SimulationFailed(bytes reason);\\n\\n // for preCrime()\\n error SimulationResultNotFound(uint32 eid);\\n error InvalidSimulationResult(uint32 eid, bytes reason);\\n error CrimeFound(bytes crime);\\n\\n function getConfig(bytes[] calldata _packets, uint256[] calldata _packetMsgValues) external returns (bytes memory);\\n\\n function simulate(\\n bytes[] calldata _packets,\\n uint256[] calldata _packetMsgValues\\n ) external payable returns (bytes memory);\\n\\n function buildSimulationResult() external view returns (bytes memory);\\n\\n function preCrime(\\n bytes[] calldata _packets,\\n uint256[] calldata _packetMsgValues,\\n bytes[] calldata _simulations\\n ) external;\\n\\n function version() external view returns (uint64 major, uint8 minor);\\n}\\n\",\"keccak256\":\"0xc8d869f27ef8ceb2e13fdf6a70682fd4dee3f90c4924eb8e125bc1e66cb6af84\",\"license\":\"MIT\"},\"@layerzerolabs/oapp-evm/contracts/precrime/libs/Packet.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\nimport { Origin } from \\\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\\\";\\nimport { PacketV1Codec } from \\\"@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol\\\";\\n\\n/**\\n * @title InboundPacket\\n * @dev Structure representing an inbound packet received by the contract.\\n */\\nstruct InboundPacket {\\n Origin origin; // Origin information of the packet.\\n uint32 dstEid; // Destination endpointId of the packet.\\n address receiver; // Receiver address for the packet.\\n bytes32 guid; // Unique identifier of the packet.\\n uint256 value; // msg.value of the packet.\\n address executor; // Executor address for the packet.\\n bytes message; // Message payload of the packet.\\n bytes extraData; // Additional arbitrary data for the packet.\\n}\\n\\n/**\\n * @title PacketDecoder\\n * @dev Library for decoding LayerZero packets.\\n */\\nlibrary PacketDecoder {\\n using PacketV1Codec for bytes;\\n\\n /**\\n * @dev Decode an inbound packet from the given packet data.\\n * @param _packet The packet data to decode.\\n * @return packet An InboundPacket struct representing the decoded packet.\\n */\\n function decode(bytes calldata _packet) internal pure returns (InboundPacket memory packet) {\\n packet.origin = Origin(_packet.srcEid(), _packet.sender(), _packet.nonce());\\n packet.dstEid = _packet.dstEid();\\n packet.receiver = _packet.receiverB20();\\n packet.guid = _packet.guid();\\n packet.message = _packet.message();\\n }\\n\\n /**\\n * @dev Decode multiple inbound packets from the given packet data and associated message values.\\n * @param _packets An array of packet data to decode.\\n * @param _packetMsgValues An array of associated message values for each packet.\\n * @return packets An array of InboundPacket structs representing the decoded packets.\\n */\\n function decode(\\n bytes[] calldata _packets,\\n uint256[] memory _packetMsgValues\\n ) internal pure returns (InboundPacket[] memory packets) {\\n packets = new InboundPacket[](_packets.length);\\n for (uint256 i = 0; i < _packets.length; i++) {\\n bytes calldata packet = _packets[i];\\n packets[i] = PacketDecoder.decode(packet);\\n // @dev Allows the verifier to specify the msg.value that gets passed in lzReceive.\\n packets[i].value = _packetMsgValues[i];\\n }\\n }\\n}\\n\",\"keccak256\":\"0xcb2fb1c5b2eb3731de78b479b9c2ab3bba326fe0b0b3a008590f18e881e457a6\",\"license\":\"MIT\"},\"@layerzerolabs/oft-evm/contracts/OFTCore.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\nimport { OApp, Origin } from \\\"@layerzerolabs/oapp-evm/contracts/oapp/OApp.sol\\\";\\nimport { OAppOptionsType3 } from \\\"@layerzerolabs/oapp-evm/contracts/oapp/libs/OAppOptionsType3.sol\\\";\\nimport { IOAppMsgInspector } from \\\"@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppMsgInspector.sol\\\";\\n\\nimport { OAppPreCrimeSimulator } from \\\"@layerzerolabs/oapp-evm/contracts/precrime/OAppPreCrimeSimulator.sol\\\";\\n\\nimport { IOFT, SendParam, OFTLimit, OFTReceipt, OFTFeeDetail, MessagingReceipt, MessagingFee } from \\\"./interfaces/IOFT.sol\\\";\\nimport { OFTMsgCodec } from \\\"./libs/OFTMsgCodec.sol\\\";\\nimport { OFTComposeMsgCodec } from \\\"./libs/OFTComposeMsgCodec.sol\\\";\\n\\n/**\\n * @title OFTCore\\n * @dev Abstract contract for the OftChain (OFT) token.\\n */\\nabstract contract OFTCore is IOFT, OApp, OAppPreCrimeSimulator, OAppOptionsType3 {\\n using OFTMsgCodec for bytes;\\n using OFTMsgCodec for bytes32;\\n\\n // @notice Provides a conversion rate when swapping between denominations of SD and LD\\n // - shareDecimals == SD == shared Decimals\\n // - localDecimals == LD == local decimals\\n // @dev Considers that tokens have different decimal amounts on various chains.\\n // @dev eg.\\n // For a token\\n // - locally with 4 decimals --> 1.2345 => uint(12345)\\n // - remotely with 2 decimals --> 1.23 => uint(123)\\n // - The conversion rate would be 10 ** (4 - 2) = 100\\n // @dev If you want to send 1.2345 -> (uint 12345), you CANNOT represent that value on the remote,\\n // you can only display 1.23 -> uint(123).\\n // @dev To preserve the dust that would otherwise be lost on that conversion,\\n // we need to unify a denomination that can be represented on ALL chains inside of the OFT mesh\\n uint256 public immutable decimalConversionRate;\\n\\n // @notice Msg types that are used to identify the various OFT operations.\\n // @dev This can be extended in child contracts for non-default oft operations\\n // @dev These values are used in things like combineOptions() in OAppOptionsType3.sol.\\n uint16 public constant SEND = 1;\\n uint16 public constant SEND_AND_CALL = 2;\\n\\n // Address of an optional contract to inspect both 'message' and 'options'\\n address public msgInspector;\\n event MsgInspectorSet(address inspector);\\n\\n /**\\n * @dev Constructor.\\n * @param _localDecimals The decimals of the token on the local chain (this chain).\\n * @param _endpoint The address of the LayerZero endpoint.\\n * @param _delegate The delegate capable of making OApp configurations inside of the endpoint.\\n */\\n constructor(uint8 _localDecimals, address _endpoint, address _delegate) OApp(_endpoint, _delegate) {\\n if (_localDecimals < sharedDecimals()) revert InvalidLocalDecimals();\\n decimalConversionRate = 10 ** (_localDecimals - sharedDecimals());\\n }\\n\\n /**\\n * @notice Retrieves interfaceID and the version of the OFT.\\n * @return interfaceId The interface ID.\\n * @return version The version.\\n *\\n * @dev interfaceId: This specific interface ID is '0x02e49c2c'.\\n * @dev version: Indicates a cross-chain compatible msg encoding with other OFTs.\\n * @dev If a new feature is added to the OFT cross-chain msg encoding, the version will be incremented.\\n * ie. localOFT version(x,1) CAN send messages to remoteOFT version(x,1)\\n */\\n function oftVersion() external pure virtual returns (bytes4 interfaceId, uint64 version) {\\n return (type(IOFT).interfaceId, 1);\\n }\\n\\n /**\\n * @dev Retrieves the shared decimals of the OFT.\\n * @return The shared decimals of the OFT.\\n *\\n * @dev Sets an implicit cap on the amount of tokens, over uint64.max() will need some sort of outbound cap / totalSupply cap\\n * Lowest common decimal denominator between chains.\\n * Defaults to 6 decimal places to provide up to 18,446,744,073,709.551615 units (max uint64).\\n * For tokens exceeding this totalSupply(), they will need to override the sharedDecimals function with something smaller.\\n * ie. 4 sharedDecimals would be 1,844,674,407,370,955.1615\\n */\\n function sharedDecimals() public view virtual returns (uint8) {\\n return 6;\\n }\\n\\n /**\\n * @dev Sets the message inspector address for the OFT.\\n * @param _msgInspector The address of the message inspector.\\n *\\n * @dev This is an optional contract that can be used to inspect both 'message' and 'options'.\\n * @dev Set it to address(0) to disable it, or set it to a contract address to enable it.\\n */\\n function setMsgInspector(address _msgInspector) public virtual onlyOwner {\\n msgInspector = _msgInspector;\\n emit MsgInspectorSet(_msgInspector);\\n }\\n\\n /**\\n * @notice Provides the fee breakdown and settings data for an OFT. Unused in the default implementation.\\n * @param _sendParam The parameters for the send operation.\\n * @return oftLimit The OFT limit information.\\n * @return oftFeeDetails The details of OFT fees.\\n * @return oftReceipt The OFT receipt information.\\n */\\n function quoteOFT(\\n SendParam calldata _sendParam\\n )\\n external\\n view\\n virtual\\n returns (OFTLimit memory oftLimit, OFTFeeDetail[] memory oftFeeDetails, OFTReceipt memory oftReceipt)\\n {\\n uint256 minAmountLD = 0; // Unused in the default implementation.\\n uint256 maxAmountLD = type(uint64).max; // Unused in the default implementation.\\n oftLimit = OFTLimit(minAmountLD, maxAmountLD);\\n\\n // Unused in the default implementation; reserved for future complex fee details.\\n oftFeeDetails = new OFTFeeDetail[](0);\\n\\n // @dev This is the same as the send() operation, but without the actual send.\\n // - amountSentLD is the amount in local decimals that would be sent from the sender.\\n // - amountReceivedLD is the amount in local decimals that will be credited to the recipient on the remote OFT instance.\\n // @dev The amountSentLD MIGHT not equal the amount the user actually receives. HOWEVER, the default does.\\n (uint256 amountSentLD, uint256 amountReceivedLD) = _debitView(\\n _sendParam.amountLD,\\n _sendParam.minAmountLD,\\n _sendParam.dstEid\\n );\\n oftReceipt = OFTReceipt(amountSentLD, amountReceivedLD);\\n }\\n\\n /**\\n * @notice Provides a quote for the send() operation.\\n * @param _sendParam The parameters for the send() operation.\\n * @param _payInLzToken Flag indicating whether the caller is paying in the LZ token.\\n * @return msgFee The calculated LayerZero messaging fee from the send() operation.\\n *\\n * @dev MessagingFee: LayerZero msg fee\\n * - nativeFee: The native fee.\\n * - lzTokenFee: The lzToken fee.\\n */\\n function quoteSend(\\n SendParam calldata _sendParam,\\n bool _payInLzToken\\n ) external view virtual returns (MessagingFee memory msgFee) {\\n // @dev mock the amount to receive, this is the same operation used in the send().\\n // The quote is as similar as possible to the actual send() operation.\\n (, uint256 amountReceivedLD) = _debitView(_sendParam.amountLD, _sendParam.minAmountLD, _sendParam.dstEid);\\n\\n // @dev Builds the options and OFT message to quote in the endpoint.\\n (bytes memory message, bytes memory options) = _buildMsgAndOptions(_sendParam, amountReceivedLD);\\n\\n // @dev Calculates the LayerZero fee for the send() operation.\\n return _quote(_sendParam.dstEid, message, options, _payInLzToken);\\n }\\n\\n /**\\n * @dev Executes the send operation.\\n * @param _sendParam The parameters for the send operation.\\n * @param _fee The calculated fee for the send() operation.\\n * - nativeFee: The native fee.\\n * - lzTokenFee: The lzToken fee.\\n * @param _refundAddress The address to receive any excess funds.\\n * @return msgReceipt The receipt for the send operation.\\n * @return oftReceipt The OFT receipt information.\\n *\\n * @dev MessagingReceipt: LayerZero msg receipt\\n * - guid: The unique identifier for the sent message.\\n * - nonce: The nonce of the sent message.\\n * - fee: The LayerZero fee incurred for the message.\\n */\\n function send(\\n SendParam calldata _sendParam,\\n MessagingFee calldata _fee,\\n address _refundAddress\\n ) external payable virtual returns (MessagingReceipt memory msgReceipt, OFTReceipt memory oftReceipt) {\\n return _send(_sendParam, _fee, _refundAddress);\\n }\\n\\n /**\\n * @dev Internal function to execute the send operation.\\n * @param _sendParam The parameters for the send operation.\\n * @param _fee The calculated fee for the send() operation.\\n * - nativeFee: The native fee.\\n * - lzTokenFee: The lzToken fee.\\n * @param _refundAddress The address to receive any excess funds.\\n * @return msgReceipt The receipt for the send operation.\\n * @return oftReceipt The OFT receipt information.\\n *\\n * @dev MessagingReceipt: LayerZero msg receipt\\n * - guid: The unique identifier for the sent message.\\n * - nonce: The nonce of the sent message.\\n * - fee: The LayerZero fee incurred for the message.\\n */\\n function _send(\\n SendParam calldata _sendParam,\\n MessagingFee calldata _fee,\\n address _refundAddress\\n ) internal virtual returns (MessagingReceipt memory msgReceipt, OFTReceipt memory oftReceipt) {\\n // @dev Applies the token transfers regarding this send() operation.\\n // - amountSentLD is the amount in local decimals that was ACTUALLY sent/debited from the sender.\\n // - amountReceivedLD is the amount in local decimals that will be received/credited to the recipient on the remote OFT instance.\\n (uint256 amountSentLD, uint256 amountReceivedLD) = _debit(\\n msg.sender,\\n _sendParam.amountLD,\\n _sendParam.minAmountLD,\\n _sendParam.dstEid\\n );\\n\\n // @dev Builds the options and OFT message to quote in the endpoint.\\n (bytes memory message, bytes memory options) = _buildMsgAndOptions(_sendParam, amountReceivedLD);\\n\\n // @dev Sends the message to the LayerZero endpoint and returns the LayerZero msg receipt.\\n msgReceipt = _lzSend(_sendParam.dstEid, message, options, _fee, _refundAddress);\\n // @dev Formulate the OFT receipt.\\n oftReceipt = OFTReceipt(amountSentLD, amountReceivedLD);\\n\\n emit OFTSent(msgReceipt.guid, _sendParam.dstEid, msg.sender, amountSentLD, amountReceivedLD);\\n }\\n\\n /**\\n * @dev Internal function to build the message and options.\\n * @param _sendParam The parameters for the send() operation.\\n * @param _amountLD The amount in local decimals.\\n * @return message The encoded message.\\n * @return options The encoded options.\\n */\\n function _buildMsgAndOptions(\\n SendParam calldata _sendParam,\\n uint256 _amountLD\\n ) internal view virtual returns (bytes memory message, bytes memory options) {\\n bool hasCompose;\\n // @dev This generated message has the msg.sender encoded into the payload so the remote knows who the caller is.\\n (message, hasCompose) = OFTMsgCodec.encode(\\n _sendParam.to,\\n _toSD(_amountLD),\\n // @dev Must be include a non empty bytes if you want to compose, EVEN if you dont need it on the remote.\\n // EVEN if you dont require an arbitrary payload to be sent... eg. '0x01'\\n _sendParam.composeMsg\\n );\\n // @dev Change the msg type depending if its composed or not.\\n uint16 msgType = hasCompose ? SEND_AND_CALL : SEND;\\n // @dev Combine the callers _extraOptions with the enforced options via the OAppOptionsType3.\\n options = combineOptions(_sendParam.dstEid, msgType, _sendParam.extraOptions);\\n\\n // @dev Optionally inspect the message and options depending if the OApp owner has set a msg inspector.\\n // @dev If it fails inspection, needs to revert in the implementation. ie. does not rely on return boolean\\n address inspector = msgInspector; // caches the msgInspector to avoid potential double storage read\\n if (inspector != address(0)) IOAppMsgInspector(inspector).inspect(message, options);\\n }\\n\\n /**\\n * @dev Internal function to handle the receive on the LayerZero endpoint.\\n * @param _origin The origin information.\\n * - srcEid: The source chain endpoint ID.\\n * - sender: The sender address from the src chain.\\n * - nonce: The nonce of the LayerZero message.\\n * @param _guid The unique identifier for the received LayerZero message.\\n * @param _message The encoded message.\\n * @dev _executor The address of the executor.\\n * @dev _extraData Additional data.\\n */\\n function _lzReceive(\\n Origin calldata _origin,\\n bytes32 _guid,\\n bytes calldata _message,\\n address /*_executor*/, // @dev unused in the default implementation.\\n bytes calldata /*_extraData*/ // @dev unused in the default implementation.\\n ) internal virtual override {\\n // @dev The src sending chain doesnt know the address length on this chain (potentially non-evm)\\n // Thus everything is bytes32() encoded in flight.\\n address toAddress = _message.sendTo().bytes32ToAddress();\\n // @dev Credit the amountLD to the recipient and return the ACTUAL amount the recipient received in local decimals\\n uint256 amountReceivedLD = _credit(toAddress, _toLD(_message.amountSD()), _origin.srcEid);\\n\\n if (_message.isComposed()) {\\n // @dev Proprietary composeMsg format for the OFT.\\n bytes memory composeMsg = OFTComposeMsgCodec.encode(\\n _origin.nonce,\\n _origin.srcEid,\\n amountReceivedLD,\\n _message.composeMsg()\\n );\\n\\n // @dev Stores the lzCompose payload that will be executed in a separate tx.\\n // Standardizes functionality for executing arbitrary contract invocation on some non-evm chains.\\n // @dev The off-chain executor will listen and process the msg based on the src-chain-callers compose options passed.\\n // @dev The index is used when a OApp needs to compose multiple msgs on lzReceive.\\n // For default OFT implementation there is only 1 compose msg per lzReceive, thus its always 0.\\n endpoint.sendCompose(toAddress, _guid, 0 /* the index of the composed message*/, composeMsg);\\n }\\n\\n emit OFTReceived(_guid, _origin.srcEid, toAddress, amountReceivedLD);\\n }\\n\\n /**\\n * @dev Internal function to handle the OAppPreCrimeSimulator simulated receive.\\n * @param _origin The origin information.\\n * - srcEid: The source chain endpoint ID.\\n * - sender: The sender address from the src chain.\\n * - nonce: The nonce of the LayerZero message.\\n * @param _guid The unique identifier for the received LayerZero message.\\n * @param _message The LayerZero message.\\n * @param _executor The address of the off-chain executor.\\n * @param _extraData Arbitrary data passed by the msg executor.\\n *\\n * @dev Enables the preCrime simulator to mock sending lzReceive() messages,\\n * routes the msg down from the OAppPreCrimeSimulator, and back up to the OAppReceiver.\\n */\\n function _lzReceiveSimulate(\\n Origin calldata _origin,\\n bytes32 _guid,\\n bytes calldata _message,\\n address _executor,\\n bytes calldata _extraData\\n ) internal virtual override {\\n _lzReceive(_origin, _guid, _message, _executor, _extraData);\\n }\\n\\n /**\\n * @dev Check if the peer is considered 'trusted' by the OApp.\\n * @param _eid The endpoint ID to check.\\n * @param _peer The peer to check.\\n * @return Whether the peer passed is considered 'trusted' by the OApp.\\n *\\n * @dev Enables OAppPreCrimeSimulator to check whether a potential Inbound Packet is from a trusted source.\\n */\\n function isPeer(uint32 _eid, bytes32 _peer) public view virtual override returns (bool) {\\n return peers[_eid] == _peer;\\n }\\n\\n /**\\n * @dev Internal function to remove dust from the given local decimal amount.\\n * @param _amountLD The amount in local decimals.\\n * @return amountLD The amount after removing dust.\\n *\\n * @dev Prevents the loss of dust when moving amounts between chains with different decimals.\\n * @dev eg. uint(123) with a conversion rate of 100 becomes uint(100).\\n */\\n function _removeDust(uint256 _amountLD) internal view virtual returns (uint256 amountLD) {\\n return (_amountLD / decimalConversionRate) * decimalConversionRate;\\n }\\n\\n /**\\n * @dev Internal function to convert an amount from shared decimals into local decimals.\\n * @param _amountSD The amount in shared decimals.\\n * @return amountLD The amount in local decimals.\\n */\\n function _toLD(uint64 _amountSD) internal view virtual returns (uint256 amountLD) {\\n return _amountSD * decimalConversionRate;\\n }\\n\\n /**\\n * @dev Internal function to convert an amount from local decimals into shared decimals.\\n * @param _amountLD The amount in local decimals.\\n * @return amountSD The amount in shared decimals.\\n */\\n function _toSD(uint256 _amountLD) internal view virtual returns (uint64 amountSD) {\\n return uint64(_amountLD / decimalConversionRate);\\n }\\n\\n /**\\n * @dev Internal function to mock the amount mutation from a OFT debit() operation.\\n * @param _amountLD The amount to send in local decimals.\\n * @param _minAmountLD The minimum amount to send in local decimals.\\n * @dev _dstEid The destination endpoint ID.\\n * @return amountSentLD The amount sent, in local decimals.\\n * @return amountReceivedLD The amount to be received on the remote chain, in local decimals.\\n *\\n * @dev This is where things like fees would be calculated and deducted from the amount to be received on the remote.\\n */\\n function _debitView(\\n uint256 _amountLD,\\n uint256 _minAmountLD,\\n uint32 /*_dstEid*/\\n ) internal view virtual returns (uint256 amountSentLD, uint256 amountReceivedLD) {\\n // @dev Remove the dust so nothing is lost on the conversion between chains with different decimals for the token.\\n amountSentLD = _removeDust(_amountLD);\\n // @dev The amount to send is the same as amount received in the default implementation.\\n amountReceivedLD = amountSentLD;\\n\\n // @dev Check for slippage.\\n if (amountReceivedLD < _minAmountLD) {\\n revert SlippageExceeded(amountReceivedLD, _minAmountLD);\\n }\\n }\\n\\n /**\\n * @dev Internal function to perform a debit operation.\\n * @param _from The address to debit.\\n * @param _amountLD The amount to send in local decimals.\\n * @param _minAmountLD The minimum amount to send in local decimals.\\n * @param _dstEid The destination endpoint ID.\\n * @return amountSentLD The amount sent in local decimals.\\n * @return amountReceivedLD The amount received in local decimals on the remote.\\n *\\n * @dev Defined here but are intended to be overriden depending on the OFT implementation.\\n * @dev Depending on OFT implementation the _amountLD could differ from the amountReceivedLD.\\n */\\n function _debit(\\n address _from,\\n uint256 _amountLD,\\n uint256 _minAmountLD,\\n uint32 _dstEid\\n ) internal virtual returns (uint256 amountSentLD, uint256 amountReceivedLD);\\n\\n /**\\n * @dev Internal function to perform a credit operation.\\n * @param _to The address to credit.\\n * @param _amountLD The amount to credit in local decimals.\\n * @param _srcEid The source endpoint ID.\\n * @return amountReceivedLD The amount ACTUALLY received in local decimals.\\n *\\n * @dev Defined here but are intended to be overriden depending on the OFT implementation.\\n * @dev Depending on OFT implementation the _amountLD could differ from the amountReceivedLD.\\n */\\n function _credit(\\n address _to,\\n uint256 _amountLD,\\n uint32 _srcEid\\n ) internal virtual returns (uint256 amountReceivedLD);\\n}\\n\",\"keccak256\":\"0x9ce49b83455df600b52538e42028c422a322643f7ffb4f2814c72c3b970ea7be\",\"license\":\"MIT\"},\"@layerzerolabs/oft-evm/contracts/interfaces/IOFT.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\nimport { MessagingReceipt, MessagingFee } from \\\"@layerzerolabs/oapp-evm/contracts/oapp/OAppSender.sol\\\";\\n\\n/**\\n * @dev Struct representing token parameters for the OFT send() operation.\\n */\\nstruct SendParam {\\n uint32 dstEid; // Destination endpoint ID.\\n bytes32 to; // Recipient address.\\n uint256 amountLD; // Amount to send in local decimals.\\n uint256 minAmountLD; // Minimum amount to send in local decimals.\\n bytes extraOptions; // Additional options supplied by the caller to be used in the LayerZero message.\\n bytes composeMsg; // The composed message for the send() operation.\\n bytes oftCmd; // The OFT command to be executed, unused in default OFT implementations.\\n}\\n\\n/**\\n * @dev Struct representing OFT limit information.\\n * @dev These amounts can change dynamically and are up the specific oft implementation.\\n */\\nstruct OFTLimit {\\n uint256 minAmountLD; // Minimum amount in local decimals that can be sent to the recipient.\\n uint256 maxAmountLD; // Maximum amount in local decimals that can be sent to the recipient.\\n}\\n\\n/**\\n * @dev Struct representing OFT receipt information.\\n */\\nstruct OFTReceipt {\\n uint256 amountSentLD; // Amount of tokens ACTUALLY debited from the sender in local decimals.\\n // @dev In non-default implementations, the amountReceivedLD COULD differ from this value.\\n uint256 amountReceivedLD; // Amount of tokens to be received on the remote side.\\n}\\n\\n/**\\n * @dev Struct representing OFT fee details.\\n * @dev Future proof mechanism to provide a standardized way to communicate fees to things like a UI.\\n */\\nstruct OFTFeeDetail {\\n int256 feeAmountLD; // Amount of the fee in local decimals.\\n string description; // Description of the fee.\\n}\\n\\n/**\\n * @title IOFT\\n * @dev Interface for the OftChain (OFT) token.\\n * @dev Does not inherit ERC20 to accommodate usage by OFTAdapter as well.\\n * @dev This specific interface ID is '0x02e49c2c'.\\n */\\ninterface IOFT {\\n // Custom error messages\\n error InvalidLocalDecimals();\\n error SlippageExceeded(uint256 amountLD, uint256 minAmountLD);\\n\\n // Events\\n event OFTSent(\\n bytes32 indexed guid, // GUID of the OFT message.\\n uint32 dstEid, // Destination Endpoint ID.\\n address indexed fromAddress, // Address of the sender on the src chain.\\n uint256 amountSentLD, // Amount of tokens sent in local decimals.\\n uint256 amountReceivedLD // Amount of tokens received in local decimals.\\n );\\n event OFTReceived(\\n bytes32 indexed guid, // GUID of the OFT message.\\n uint32 srcEid, // Source Endpoint ID.\\n address indexed toAddress, // Address of the recipient on the dst chain.\\n uint256 amountReceivedLD // Amount of tokens received in local decimals.\\n );\\n\\n /**\\n * @notice Retrieves interfaceID and the version of the OFT.\\n * @return interfaceId The interface ID.\\n * @return version The version.\\n *\\n * @dev interfaceId: This specific interface ID is '0x02e49c2c'.\\n * @dev version: Indicates a cross-chain compatible msg encoding with other OFTs.\\n * @dev If a new feature is added to the OFT cross-chain msg encoding, the version will be incremented.\\n * ie. localOFT version(x,1) CAN send messages to remoteOFT version(x,1)\\n */\\n function oftVersion() external view returns (bytes4 interfaceId, uint64 version);\\n\\n /**\\n * @notice Retrieves the address of the token associated with the OFT.\\n * @return token The address of the ERC20 token implementation.\\n */\\n function token() external view returns (address);\\n\\n /**\\n * @notice Indicates whether the OFT contract requires approval of the 'token()' to send.\\n * @return requiresApproval Needs approval of the underlying token implementation.\\n *\\n * @dev Allows things like wallet implementers to determine integration requirements,\\n * without understanding the underlying token implementation.\\n */\\n function approvalRequired() external view returns (bool);\\n\\n /**\\n * @notice Retrieves the shared decimals of the OFT.\\n * @return sharedDecimals The shared decimals of the OFT.\\n */\\n function sharedDecimals() external view returns (uint8);\\n\\n /**\\n * @notice Provides the fee breakdown and settings data for an OFT. Unused in the default implementation.\\n * @param _sendParam The parameters for the send operation.\\n * @return limit The OFT limit information.\\n * @return oftFeeDetails The details of OFT fees.\\n * @return receipt The OFT receipt information.\\n */\\n function quoteOFT(\\n SendParam calldata _sendParam\\n ) external view returns (OFTLimit memory, OFTFeeDetail[] memory oftFeeDetails, OFTReceipt memory);\\n\\n /**\\n * @notice Provides a quote for the send() operation.\\n * @param _sendParam The parameters for the send() operation.\\n * @param _payInLzToken Flag indicating whether the caller is paying in the LZ token.\\n * @return fee The calculated LayerZero messaging fee from the send() operation.\\n *\\n * @dev MessagingFee: LayerZero msg fee\\n * - nativeFee: The native fee.\\n * - lzTokenFee: The lzToken fee.\\n */\\n function quoteSend(SendParam calldata _sendParam, bool _payInLzToken) external view returns (MessagingFee memory);\\n\\n /**\\n * @notice Executes the send() operation.\\n * @param _sendParam The parameters for the send operation.\\n * @param _fee The fee information supplied by the caller.\\n * - nativeFee: The native fee.\\n * - lzTokenFee: The lzToken fee.\\n * @param _refundAddress The address to receive any excess funds from fees etc. on the src.\\n * @return receipt The LayerZero messaging receipt from the send() operation.\\n * @return oftReceipt The OFT receipt information.\\n *\\n * @dev MessagingReceipt: LayerZero msg receipt\\n * - guid: The unique identifier for the sent message.\\n * - nonce: The nonce of the sent message.\\n * - fee: The LayerZero fee incurred for the message.\\n */\\n function send(\\n SendParam calldata _sendParam,\\n MessagingFee calldata _fee,\\n address _refundAddress\\n ) external payable returns (MessagingReceipt memory, OFTReceipt memory);\\n}\\n\",\"keccak256\":\"0x7ba6bb62fba7ee83451cfb0e727ddeef0e96b4388bd4e9ff0fc6ce103e1101c8\",\"license\":\"MIT\"},\"@layerzerolabs/oft-evm/contracts/libs/OFTComposeMsgCodec.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\nlibrary OFTComposeMsgCodec {\\n // Offset constants for decoding composed messages\\n uint8 private constant NONCE_OFFSET = 8;\\n uint8 private constant SRC_EID_OFFSET = 12;\\n uint8 private constant AMOUNT_LD_OFFSET = 44;\\n uint8 private constant COMPOSE_FROM_OFFSET = 76;\\n\\n /**\\n * @dev Encodes a OFT composed message.\\n * @param _nonce The nonce value.\\n * @param _srcEid The source endpoint ID.\\n * @param _amountLD The amount in local decimals.\\n * @param _composeMsg The composed message.\\n * @return _msg The encoded Composed message.\\n */\\n function encode(\\n uint64 _nonce,\\n uint32 _srcEid,\\n uint256 _amountLD,\\n bytes memory _composeMsg // 0x[composeFrom][composeMsg]\\n ) internal pure returns (bytes memory _msg) {\\n _msg = abi.encodePacked(_nonce, _srcEid, _amountLD, _composeMsg);\\n }\\n\\n /**\\n * @dev Retrieves the nonce for the composed message.\\n * @param _msg The message.\\n * @return The nonce value.\\n */\\n function nonce(bytes calldata _msg) internal pure returns (uint64) {\\n return uint64(bytes8(_msg[:NONCE_OFFSET]));\\n }\\n\\n /**\\n * @dev Retrieves the source endpoint ID for the composed message.\\n * @param _msg The message.\\n * @return The source endpoint ID.\\n */\\n function srcEid(bytes calldata _msg) internal pure returns (uint32) {\\n return uint32(bytes4(_msg[NONCE_OFFSET:SRC_EID_OFFSET]));\\n }\\n\\n /**\\n * @dev Retrieves the amount in local decimals from the composed message.\\n * @param _msg The message.\\n * @return The amount in local decimals.\\n */\\n function amountLD(bytes calldata _msg) internal pure returns (uint256) {\\n return uint256(bytes32(_msg[SRC_EID_OFFSET:AMOUNT_LD_OFFSET]));\\n }\\n\\n /**\\n * @dev Retrieves the composeFrom value from the composed message.\\n * @param _msg The message.\\n * @return The composeFrom value.\\n */\\n function composeFrom(bytes calldata _msg) internal pure returns (bytes32) {\\n return bytes32(_msg[AMOUNT_LD_OFFSET:COMPOSE_FROM_OFFSET]);\\n }\\n\\n /**\\n * @dev Retrieves the composed message.\\n * @param _msg The message.\\n * @return The composed message.\\n */\\n function composeMsg(bytes calldata _msg) internal pure returns (bytes memory) {\\n return _msg[COMPOSE_FROM_OFFSET:];\\n }\\n\\n /**\\n * @dev Converts an address to bytes32.\\n * @param _addr The address to convert.\\n * @return The bytes32 representation of the address.\\n */\\n function addressToBytes32(address _addr) internal pure returns (bytes32) {\\n return bytes32(uint256(uint160(_addr)));\\n }\\n\\n /**\\n * @dev Converts bytes32 to an address.\\n * @param _b The bytes32 value to convert.\\n * @return The address representation of bytes32.\\n */\\n function bytes32ToAddress(bytes32 _b) internal pure returns (address) {\\n return address(uint160(uint256(_b)));\\n }\\n}\\n\",\"keccak256\":\"0xaae73d6eb8b9561c43f1802f3c416c00ccd35f172b711f9781ccdf1b25a40db5\",\"license\":\"MIT\"},\"@layerzerolabs/oft-evm/contracts/libs/OFTMsgCodec.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\nlibrary OFTMsgCodec {\\n // Offset constants for encoding and decoding OFT messages\\n uint8 private constant SEND_TO_OFFSET = 32;\\n uint8 private constant SEND_AMOUNT_SD_OFFSET = 40;\\n\\n /**\\n * @dev Encodes an OFT LayerZero message.\\n * @param _sendTo The recipient address.\\n * @param _amountShared The amount in shared decimals.\\n * @param _composeMsg The composed message.\\n * @return _msg The encoded message.\\n * @return hasCompose A boolean indicating whether the message has a composed payload.\\n */\\n function encode(\\n bytes32 _sendTo,\\n uint64 _amountShared,\\n bytes memory _composeMsg\\n ) internal view returns (bytes memory _msg, bool hasCompose) {\\n hasCompose = _composeMsg.length > 0;\\n // @dev Remote chains will want to know the composed function caller ie. msg.sender on the src.\\n _msg = hasCompose\\n ? abi.encodePacked(_sendTo, _amountShared, addressToBytes32(msg.sender), _composeMsg)\\n : abi.encodePacked(_sendTo, _amountShared);\\n }\\n\\n /**\\n * @dev Checks if the OFT message is composed.\\n * @param _msg The OFT message.\\n * @return A boolean indicating whether the message is composed.\\n */\\n function isComposed(bytes calldata _msg) internal pure returns (bool) {\\n return _msg.length > SEND_AMOUNT_SD_OFFSET;\\n }\\n\\n /**\\n * @dev Retrieves the recipient address from the OFT message.\\n * @param _msg The OFT message.\\n * @return The recipient address.\\n */\\n function sendTo(bytes calldata _msg) internal pure returns (bytes32) {\\n return bytes32(_msg[:SEND_TO_OFFSET]);\\n }\\n\\n /**\\n * @dev Retrieves the amount in shared decimals from the OFT message.\\n * @param _msg The OFT message.\\n * @return The amount in shared decimals.\\n */\\n function amountSD(bytes calldata _msg) internal pure returns (uint64) {\\n return uint64(bytes8(_msg[SEND_TO_OFFSET:SEND_AMOUNT_SD_OFFSET]));\\n }\\n\\n /**\\n * @dev Retrieves the composed message from the OFT message.\\n * @param _msg The OFT message.\\n * @return The composed message.\\n */\\n function composeMsg(bytes calldata _msg) internal pure returns (bytes memory) {\\n return _msg[SEND_AMOUNT_SD_OFFSET:];\\n }\\n\\n /**\\n * @dev Converts an address to bytes32.\\n * @param _addr The address to convert.\\n * @return The bytes32 representation of the address.\\n */\\n function addressToBytes32(address _addr) internal pure returns (bytes32) {\\n return bytes32(uint256(uint160(_addr)));\\n }\\n\\n /**\\n * @dev Converts bytes32 to an address.\\n * @param _b The bytes32 value to convert.\\n * @return The address representation of bytes32.\\n */\\n function bytes32ToAddress(bytes32 _b) internal pure returns (address) {\\n return address(uint160(uint256(_b)));\\n }\\n}\\n\",\"keccak256\":\"0x5358948017669c03e157f871d8c38e988f9004dbd0801ad3119d2487f0d40b0b\",\"license\":\"MIT\"},\"@openzeppelin/contracts/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {Context} from \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * The initial owner is set to the address provided by the deployer. This can\\n * later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n /**\\n * @dev The caller account is not authorized to perform an operation.\\n */\\n error OwnableUnauthorizedAccount(address account);\\n\\n /**\\n * @dev The owner is not a valid owner account. (eg. `address(0)`)\\n */\\n error OwnableInvalidOwner(address owner);\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the address provided by the deployer as the initial owner.\\n */\\n constructor(address initialOwner) {\\n if (initialOwner == address(0)) {\\n revert OwnableInvalidOwner(address(0));\\n }\\n _transferOwnership(initialOwner);\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n _checkOwner();\\n _;\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if the sender is not the owner.\\n */\\n function _checkOwner() internal view virtual {\\n if (owner() != _msgSender()) {\\n revert OwnableUnauthorizedAccount(_msgSender());\\n }\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby disabling any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n if (newOwner == address(0)) {\\n revert OwnableInvalidOwner(address(0));\\n }\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n}\\n\",\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\"},\"@openzeppelin/contracts/interfaces/IERC1363.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (interfaces/IERC1363.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {IERC20} from \\\"./IERC20.sol\\\";\\nimport {IERC165} from \\\"./IERC165.sol\\\";\\n\\n/**\\n * @title IERC1363\\n * @dev Interface of the ERC-1363 standard as defined in the https://eips.ethereum.org/EIPS/eip-1363[ERC-1363].\\n *\\n * Defines an extension interface for ERC-20 tokens that supports executing code on a recipient contract\\n * after `transfer` or `transferFrom`, or code on a spender contract after `approve`, in a single transaction.\\n */\\ninterface IERC1363 is IERC20, IERC165 {\\n /*\\n * Note: the ERC-165 identifier for this interface is 0xb0202a11.\\n * 0xb0202a11 ===\\n * bytes4(keccak256('transferAndCall(address,uint256)')) ^\\n * bytes4(keccak256('transferAndCall(address,uint256,bytes)')) ^\\n * bytes4(keccak256('transferFromAndCall(address,address,uint256)')) ^\\n * bytes4(keccak256('transferFromAndCall(address,address,uint256,bytes)')) ^\\n * bytes4(keccak256('approveAndCall(address,uint256)')) ^\\n * bytes4(keccak256('approveAndCall(address,uint256,bytes)'))\\n */\\n\\n /**\\n * @dev Moves a `value` amount of tokens from the caller's account to `to`\\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\\n * @param to The address which you want to transfer to.\\n * @param value The amount of tokens to be transferred.\\n * @return A boolean value indicating whether the operation succeeded unless throwing.\\n */\\n function transferAndCall(address to, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from the caller's account to `to`\\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\\n * @param to The address which you want to transfer to.\\n * @param value The amount of tokens to be transferred.\\n * @param data Additional data with no specified format, sent in call to `to`.\\n * @return A boolean value indicating whether the operation succeeded unless throwing.\\n */\\n function transferAndCall(address to, uint256 value, bytes calldata data) external returns (bool);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism\\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\\n * @param from The address which you want to send tokens from.\\n * @param to The address which you want to transfer to.\\n * @param value The amount of tokens to be transferred.\\n * @return A boolean value indicating whether the operation succeeded unless throwing.\\n */\\n function transferFromAndCall(address from, address to, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism\\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\\n * @param from The address which you want to send tokens from.\\n * @param to The address which you want to transfer to.\\n * @param value The amount of tokens to be transferred.\\n * @param data Additional data with no specified format, sent in call to `to`.\\n * @return A boolean value indicating whether the operation succeeded unless throwing.\\n */\\n function transferFromAndCall(address from, address to, uint256 value, bytes calldata data) external returns (bool);\\n\\n /**\\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\\n * caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`.\\n * @param spender The address which will spend the funds.\\n * @param value The amount of tokens to be spent.\\n * @return A boolean value indicating whether the operation succeeded unless throwing.\\n */\\n function approveAndCall(address spender, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\\n * caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`.\\n * @param spender The address which will spend the funds.\\n * @param value The amount of tokens to be spent.\\n * @param data Additional data with no specified format, sent in call to `spender`.\\n * @return A boolean value indicating whether the operation succeeded unless throwing.\\n */\\n function approveAndCall(address spender, uint256 value, bytes calldata data) external returns (bool);\\n}\\n\",\"keccak256\":\"0x9b6b3e7803bc5f2f8cd7ad57db8ac1def61a9930a5a3107df4882e028a9605d7\",\"license\":\"MIT\"},\"@openzeppelin/contracts/interfaces/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC165.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {IERC165} from \\\"../utils/introspection/IERC165.sol\\\";\\n\",\"keccak256\":\"0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724\",\"license\":\"MIT\"},\"@openzeppelin/contracts/interfaces/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC20.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {IERC20} from \\\"../token/ERC20/IERC20.sol\\\";\\n\",\"keccak256\":\"0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Interface of the ERC-20 standard as defined in the ERC.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the value of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the value of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\\n * caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from `from` to `to` using the\\n * allowance mechanism. `value` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 value) external returns (bool);\\n}\\n\",\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/utils/SafeERC20.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {IERC20} from \\\"../IERC20.sol\\\";\\nimport {IERC1363} from \\\"../../../interfaces/IERC1363.sol\\\";\\nimport {Address} from \\\"../../../utils/Address.sol\\\";\\n\\n/**\\n * @title SafeERC20\\n * @dev Wrappers around ERC-20 operations that throw on failure (when the token\\n * contract returns false). Tokens that return no value (and instead revert or\\n * throw on failure) are also supported, non-reverting calls are assumed to be\\n * successful.\\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\n */\\nlibrary SafeERC20 {\\n /**\\n * @dev An operation with an ERC-20 token failed.\\n */\\n error SafeERC20FailedOperation(address token);\\n\\n /**\\n * @dev Indicates a failed `decreaseAllowance` request.\\n */\\n error SafeERC20FailedDecreaseAllowance(address spender, uint256 currentAllowance, uint256 requestedDecrease);\\n\\n /**\\n * @dev Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value,\\n * non-reverting calls are assumed to be successful.\\n */\\n function safeTransfer(IERC20 token, address to, uint256 value) internal {\\n _callOptionalReturn(token, abi.encodeCall(token.transfer, (to, value)));\\n }\\n\\n /**\\n * @dev Transfer `value` amount of `token` from `from` to `to`, spending the approval given by `from` to the\\n * calling contract. If `token` returns no value, non-reverting calls are assumed to be successful.\\n */\\n function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\\n _callOptionalReturn(token, abi.encodeCall(token.transferFrom, (from, to, value)));\\n }\\n\\n /**\\n * @dev Increase the calling contract's allowance toward `spender` by `value`. If `token` returns no value,\\n * non-reverting calls are assumed to be successful.\\n *\\n * IMPORTANT: If the token implements ERC-7674 (ERC-20 with temporary allowance), and if the \\\"client\\\"\\n * smart contract uses ERC-7674 to set temporary allowances, then the \\\"client\\\" smart contract should avoid using\\n * this function. Performing a {safeIncreaseAllowance} or {safeDecreaseAllowance} operation on a token contract\\n * that has a non-zero temporary allowance (for that particular owner-spender) will result in unexpected behavior.\\n */\\n function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {\\n uint256 oldAllowance = token.allowance(address(this), spender);\\n forceApprove(token, spender, oldAllowance + value);\\n }\\n\\n /**\\n * @dev Decrease the calling contract's allowance toward `spender` by `requestedDecrease`. If `token` returns no\\n * value, non-reverting calls are assumed to be successful.\\n *\\n * IMPORTANT: If the token implements ERC-7674 (ERC-20 with temporary allowance), and if the \\\"client\\\"\\n * smart contract uses ERC-7674 to set temporary allowances, then the \\\"client\\\" smart contract should avoid using\\n * this function. Performing a {safeIncreaseAllowance} or {safeDecreaseAllowance} operation on a token contract\\n * that has a non-zero temporary allowance (for that particular owner-spender) will result in unexpected behavior.\\n */\\n function safeDecreaseAllowance(IERC20 token, address spender, uint256 requestedDecrease) internal {\\n unchecked {\\n uint256 currentAllowance = token.allowance(address(this), spender);\\n if (currentAllowance < requestedDecrease) {\\n revert SafeERC20FailedDecreaseAllowance(spender, currentAllowance, requestedDecrease);\\n }\\n forceApprove(token, spender, currentAllowance - requestedDecrease);\\n }\\n }\\n\\n /**\\n * @dev Set the calling contract's allowance toward `spender` to `value`. If `token` returns no value,\\n * non-reverting calls are assumed to be successful. Meant to be used with tokens that require the approval\\n * to be set to zero before setting it to a non-zero value, such as USDT.\\n *\\n * NOTE: If the token implements ERC-7674, this function will not modify any temporary allowance. This function\\n * only sets the \\\"standard\\\" allowance. Any temporary allowance will remain active, in addition to the value being\\n * set here.\\n */\\n function forceApprove(IERC20 token, address spender, uint256 value) internal {\\n bytes memory approvalCall = abi.encodeCall(token.approve, (spender, value));\\n\\n if (!_callOptionalReturnBool(token, approvalCall)) {\\n _callOptionalReturn(token, abi.encodeCall(token.approve, (spender, 0)));\\n _callOptionalReturn(token, approvalCall);\\n }\\n }\\n\\n /**\\n * @dev Performs an {ERC1363} transferAndCall, with a fallback to the simple {ERC20} transfer if the target has no\\n * code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\\n * targeting contracts.\\n *\\n * Reverts if the returned value is other than `true`.\\n */\\n function transferAndCallRelaxed(IERC1363 token, address to, uint256 value, bytes memory data) internal {\\n if (to.code.length == 0) {\\n safeTransfer(token, to, value);\\n } else if (!token.transferAndCall(to, value, data)) {\\n revert SafeERC20FailedOperation(address(token));\\n }\\n }\\n\\n /**\\n * @dev Performs an {ERC1363} transferFromAndCall, with a fallback to the simple {ERC20} transferFrom if the target\\n * has no code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\\n * targeting contracts.\\n *\\n * Reverts if the returned value is other than `true`.\\n */\\n function transferFromAndCallRelaxed(\\n IERC1363 token,\\n address from,\\n address to,\\n uint256 value,\\n bytes memory data\\n ) internal {\\n if (to.code.length == 0) {\\n safeTransferFrom(token, from, to, value);\\n } else if (!token.transferFromAndCall(from, to, value, data)) {\\n revert SafeERC20FailedOperation(address(token));\\n }\\n }\\n\\n /**\\n * @dev Performs an {ERC1363} approveAndCall, with a fallback to the simple {ERC20} approve if the target has no\\n * code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\\n * targeting contracts.\\n *\\n * NOTE: When the recipient address (`to`) has no code (i.e. is an EOA), this function behaves as {forceApprove}.\\n * Opposedly, when the recipient address (`to`) has code, this function only attempts to call {ERC1363-approveAndCall}\\n * once without retrying, and relies on the returned value to be true.\\n *\\n * Reverts if the returned value is other than `true`.\\n */\\n function approveAndCallRelaxed(IERC1363 token, address to, uint256 value, bytes memory data) internal {\\n if (to.code.length == 0) {\\n forceApprove(token, to, value);\\n } else if (!token.approveAndCall(to, value, data)) {\\n revert SafeERC20FailedOperation(address(token));\\n }\\n }\\n\\n /**\\n * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n * on the return value: the return value is optional (but if data is returned, it must not be false).\\n * @param token The token targeted by the call.\\n * @param data The call data (encoded using abi.encode or one of its variants).\\n *\\n * This is a variant of {_callOptionalReturnBool} that reverts if call fails to meet the requirements.\\n */\\n function _callOptionalReturn(IERC20 token, bytes memory data) private {\\n uint256 returnSize;\\n uint256 returnValue;\\n assembly (\\\"memory-safe\\\") {\\n let success := call(gas(), token, 0, add(data, 0x20), mload(data), 0, 0x20)\\n // bubble errors\\n if iszero(success) {\\n let ptr := mload(0x40)\\n returndatacopy(ptr, 0, returndatasize())\\n revert(ptr, returndatasize())\\n }\\n returnSize := returndatasize()\\n returnValue := mload(0)\\n }\\n\\n if (returnSize == 0 ? address(token).code.length == 0 : returnValue != 1) {\\n revert SafeERC20FailedOperation(address(token));\\n }\\n }\\n\\n /**\\n * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n * on the return value: the return value is optional (but if data is returned, it must not be false).\\n * @param token The token targeted by the call.\\n * @param data The call data (encoded using abi.encode or one of its variants).\\n *\\n * This is a variant of {_callOptionalReturn} that silently catches all reverts and returns a bool instead.\\n */\\n function _callOptionalReturnBool(IERC20 token, bytes memory data) private returns (bool) {\\n bool success;\\n uint256 returnSize;\\n uint256 returnValue;\\n assembly (\\\"memory-safe\\\") {\\n success := call(gas(), token, 0, add(data, 0x20), mload(data), 0, 0x20)\\n returnSize := returndatasize()\\n returnValue := mload(0)\\n }\\n return success && (returnSize == 0 ? address(token).code.length > 0 : returnValue == 1);\\n }\\n}\\n\",\"keccak256\":\"0xca2ae13e0610f6a99238dd00b97bd786bc92732dae6d6b9d61f573ec51018310\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {Errors} from \\\"./Errors.sol\\\";\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev There's no code at `target` (it is not a contract).\\n */\\n error AddressEmptyCode(address target);\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.8.20/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n if (address(this).balance < amount) {\\n revert Errors.InsufficientBalance(address(this).balance, amount);\\n }\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n if (!success) {\\n revert Errors.FailedCall();\\n }\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason or custom error, it is bubbled\\n * up by this function (like regular Solidity function calls). However, if\\n * the call reverted with no returned reason, this function reverts with a\\n * {Errors.FailedCall} error.\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n if (address(this).balance < value) {\\n revert Errors.InsufficientBalance(address(this).balance, value);\\n }\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResultFromTarget(target, success, returndata);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResultFromTarget(target, success, returndata);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResultFromTarget(target, success, returndata);\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call to smart-contract was successful, and reverts if the target\\n * was not a contract or bubbling up the revert reason (falling back to {Errors.FailedCall}) in case\\n * of an unsuccessful call.\\n */\\n function verifyCallResultFromTarget(\\n address target,\\n bool success,\\n bytes memory returndata\\n ) internal view returns (bytes memory) {\\n if (!success) {\\n _revert(returndata);\\n } else {\\n // only check if target is a contract if the call was successful and the return data is empty\\n // otherwise we already know that it was a contract\\n if (returndata.length == 0 && target.code.length == 0) {\\n revert AddressEmptyCode(target);\\n }\\n return returndata;\\n }\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call was successful, and reverts if it wasn't, either by bubbling the\\n * revert reason or with a default {Errors.FailedCall} error.\\n */\\n function verifyCallResult(bool success, bytes memory returndata) internal pure returns (bytes memory) {\\n if (!success) {\\n _revert(returndata);\\n } else {\\n return returndata;\\n }\\n }\\n\\n /**\\n * @dev Reverts with returndata if present. Otherwise reverts with {Errors.FailedCall}.\\n */\\n function _revert(bytes memory returndata) private pure {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n assembly (\\\"memory-safe\\\") {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert Errors.FailedCall();\\n }\\n }\\n}\\n\",\"keccak256\":\"0x9d8da059267bac779a2dbbb9a26c2acf00ca83085e105d62d5d4ef96054a47f5\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n\\n function _contextSuffixLength() internal view virtual returns (uint256) {\\n return 0;\\n }\\n}\\n\",\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Errors.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/Errors.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Collection of common custom errors used in multiple contracts\\n *\\n * IMPORTANT: Backwards compatibility is not guaranteed in future versions of the library.\\n * It is recommended to avoid relying on the error API for critical functionality.\\n *\\n * _Available since v5.1._\\n */\\nlibrary Errors {\\n /**\\n * @dev The ETH balance of the account is not enough to perform the operation.\\n */\\n error InsufficientBalance(uint256 balance, uint256 needed);\\n\\n /**\\n * @dev A call to an address target failed. The target may have reverted.\\n */\\n error FailedCall();\\n\\n /**\\n * @dev The deployment failed.\\n */\\n error FailedDeployment();\\n\\n /**\\n * @dev A necessary precompile is missing.\\n */\\n error MissingPrecompile(address);\\n}\\n\",\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/introspection/IERC165.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Interface of the ERC-165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[ERC].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\"}},\"version\":1}", - "storageLayout": { - "storage": [ - { - "astId": 3837, - "contract": "@layerzerolabs/oft-evm/contracts/OFTCore.sol:OFTCore", - "label": "_owner", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 1390, - "contract": "@layerzerolabs/oft-evm/contracts/OFTCore.sol:OFTCore", - "label": "peers", - "offset": 0, - "slot": "1", - "type": "t_mapping(t_uint32,t_bytes32)" - }, - { - "astId": 2166, - "contract": "@layerzerolabs/oft-evm/contracts/OFTCore.sol:OFTCore", - "label": "preCrime", - "offset": 0, - "slot": "2", - "type": "t_address" - }, - { - "astId": 2006, - "contract": "@layerzerolabs/oft-evm/contracts/OFTCore.sol:OFTCore", - "label": "enforcedOptions", - "offset": 0, - "slot": "3", - "type": "t_mapping(t_uint32,t_mapping(t_uint16,t_bytes_storage))" - }, - { - "astId": 2784, - "contract": "@layerzerolabs/oft-evm/contracts/OFTCore.sol:OFTCore", - "label": "msgInspector", - "offset": 0, - "slot": "4", - "type": "t_address" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_bytes32": { - "encoding": "inplace", - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes_storage": { - "encoding": "bytes", - "label": "bytes", - "numberOfBytes": "32" - }, - "t_mapping(t_uint16,t_bytes_storage)": { - "encoding": "mapping", - "key": "t_uint16", - "label": "mapping(uint16 => bytes)", - "numberOfBytes": "32", - "value": "t_bytes_storage" - }, - "t_mapping(t_uint32,t_bytes32)": { - "encoding": "mapping", - "key": "t_uint32", - "label": "mapping(uint32 => bytes32)", - "numberOfBytes": "32", - "value": "t_bytes32" - }, - "t_mapping(t_uint32,t_mapping(t_uint16,t_bytes_storage))": { - "encoding": "mapping", - "key": "t_uint32", - "label": "mapping(uint32 => mapping(uint16 => bytes))", - "numberOfBytes": "32", - "value": "t_mapping(t_uint16,t_bytes_storage)" - }, - "t_uint16": { - "encoding": "inplace", - "label": "uint16", - "numberOfBytes": "2" - }, - "t_uint32": { - "encoding": "inplace", - "label": "uint32", - "numberOfBytes": "4" - } - } - }, - "userdoc": { - "kind": "user", - "methods": { - "allowInitializePath((uint32,bytes32,uint64))": { - "notice": "Checks if the path initialization is allowed based on the provided origin." - }, - "approvalRequired()": { - "notice": "Indicates whether the OFT contract requires approval of the 'token()' to send." - }, - "combineOptions(uint32,uint16,bytes)": { - "notice": "Combines options for a given endpoint and message type." - }, - "endpoint()": { - "notice": "Retrieves the LayerZero endpoint associated with the OApp." - }, - "isComposeMsgSender((uint32,bytes32,uint64),bytes,address)": { - "notice": "Indicates whether an address is an approved composeMsg sender to the Endpoint." - }, - "nextNonce(uint32,bytes32)": { - "notice": "Retrieves the next nonce for a given source endpoint and sender address." - }, - "oAppVersion()": { - "notice": "Retrieves the OApp version information." - }, - "oftVersion()": { - "notice": "Retrieves interfaceID and the version of the OFT." - }, - "peers(uint32)": { - "notice": "Retrieves the peer (OApp) associated with a corresponding endpoint." - }, - "quoteOFT((uint32,bytes32,uint256,uint256,bytes,bytes,bytes))": { - "notice": "Provides the fee breakdown and settings data for an OFT. Unused in the default implementation." - }, - "quoteSend((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),bool)": { - "notice": "Provides a quote for the send() operation." - }, - "setDelegate(address)": { - "notice": "Sets the delegate address for the OApp." - }, - "setPeer(uint32,bytes32)": { - "notice": "Sets the peer address (OApp instance) for a corresponding endpoint." - }, - "token()": { - "notice": "Retrieves the address of the token associated with the OFT." - } - }, - "version": 1 - } - } - }, - "@layerzerolabs/oft-evm/contracts/interfaces/IOFT.sol": { - "IOFT": { - "abi": [ - { "inputs": [], "name": "InvalidLocalDecimals", "type": "error" }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "amountLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minAmountLD", - "type": "uint256" - } - ], - "name": "SlippageExceeded", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "guid", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "address", - "name": "toAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amountReceivedLD", - "type": "uint256" - } - ], - "name": "OFTReceived", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "guid", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "address", - "name": "fromAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amountSentLD", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amountReceivedLD", - "type": "uint256" - } - ], - "name": "OFTSent", - "type": "event" - }, - { - "inputs": [], - "name": "approvalRequired", - "outputs": [ - { "internalType": "bool", "name": "", "type": "bool" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "oftVersion", - "outputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - }, - { - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "to", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amountLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minAmountLD", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "extraOptions", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "composeMsg", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "oftCmd", - "type": "bytes" - } - ], - "internalType": "struct SendParam", - "name": "_sendParam", - "type": "tuple" - } - ], - "name": "quoteOFT", - "outputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "minAmountLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxAmountLD", - "type": "uint256" - } - ], - "internalType": "struct OFTLimit", - "name": "", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "int256", - "name": "feeAmountLD", - "type": "int256" - }, - { - "internalType": "string", - "name": "description", - "type": "string" - } - ], - "internalType": "struct OFTFeeDetail[]", - "name": "oftFeeDetails", - "type": "tuple[]" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "amountSentLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "amountReceivedLD", - "type": "uint256" - } - ], - "internalType": "struct OFTReceipt", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "to", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amountLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minAmountLD", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "extraOptions", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "composeMsg", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "oftCmd", - "type": "bytes" - } - ], - "internalType": "struct SendParam", - "name": "_sendParam", - "type": "tuple" - }, - { - "internalType": "bool", - "name": "_payInLzToken", - "type": "bool" - } - ], - "name": "quoteSend", - "outputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "nativeFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "lzTokenFee", - "type": "uint256" - } - ], - "internalType": "struct MessagingFee", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "to", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amountLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minAmountLD", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "extraOptions", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "composeMsg", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "oftCmd", - "type": "bytes" - } - ], - "internalType": "struct SendParam", - "name": "_sendParam", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "nativeFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "lzTokenFee", - "type": "uint256" - } - ], - "internalType": "struct MessagingFee", - "name": "_fee", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_refundAddress", - "type": "address" - } - ], - "name": "send", - "outputs": [ - { - "components": [ - { - "internalType": "bytes32", - "name": "guid", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "nativeFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "lzTokenFee", - "type": "uint256" - } - ], - "internalType": "struct MessagingFee", - "name": "fee", - "type": "tuple" - } - ], - "internalType": "struct MessagingReceipt", - "name": "", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "amountSentLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "amountReceivedLD", - "type": "uint256" - } - ], - "internalType": "struct OFTReceipt", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "sharedDecimals", - "outputs": [ - { "internalType": "uint8", "name": "", "type": "uint8" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "token", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ], - "stateMutability": "view", - "type": "function" - } - ], - "devdoc": { - "details": "Interface for the OftChain (OFT) token.Does not inherit ERC20 to accommodate usage by OFTAdapter as well.This specific interface ID is '0x02e49c2c'.", - "kind": "dev", - "methods": { - "approvalRequired()": { - "details": "Allows things like wallet implementers to determine integration requirements, without understanding the underlying token implementation.", - "returns": { - "_0": "requiresApproval Needs approval of the underlying token implementation." - } - }, - "oftVersion()": { - "details": "interfaceId: This specific interface ID is '0x02e49c2c'.version: Indicates a cross-chain compatible msg encoding with other OFTs.If a new feature is added to the OFT cross-chain msg encoding, the version will be incremented. ie. localOFT version(x,1) CAN send messages to remoteOFT version(x,1)", - "returns": { - "interfaceId": "The interface ID.", - "version": "The version." - } - }, - "quoteOFT((uint32,bytes32,uint256,uint256,bytes,bytes,bytes))": { - "params": { - "_sendParam": "The parameters for the send operation." - }, - "returns": { - "_0": "limit The OFT limit information.", - "_2": "receipt The OFT receipt information.", - "oftFeeDetails": "The details of OFT fees." - } - }, - "quoteSend((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),bool)": { - "details": "MessagingFee: LayerZero msg fee - nativeFee: The native fee. - lzTokenFee: The lzToken fee.", - "params": { - "_payInLzToken": "Flag indicating whether the caller is paying in the LZ token.", - "_sendParam": "The parameters for the send() operation." - }, - "returns": { - "_0": "fee The calculated LayerZero messaging fee from the send() operation." - } - }, - "send((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),(uint256,uint256),address)": { - "details": "MessagingReceipt: LayerZero msg receipt - guid: The unique identifier for the sent message. - nonce: The nonce of the sent message. - fee: The LayerZero fee incurred for the message.", - "params": { - "_fee": "The fee information supplied by the caller. - nativeFee: The native fee. - lzTokenFee: The lzToken fee.", - "_refundAddress": "The address to receive any excess funds from fees etc. on the src.", - "_sendParam": "The parameters for the send operation." - }, - "returns": { - "_0": "receipt The LayerZero messaging receipt from the send() operation.", - "_1": "oftReceipt The OFT receipt information." - } - }, - "sharedDecimals()": { - "returns": { - "_0": "sharedDecimals The shared decimals of the OFT." - } - }, - "token()": { - "returns": { - "_0": "token The address of the ERC20 token implementation." - } - } - }, - "title": "IOFT", - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": { - "approvalRequired()": "9f68b964", - "oftVersion()": "156a0d0f", - "quoteOFT((uint32,bytes32,uint256,uint256,bytes,bytes,bytes))": "0d35b415", - "quoteSend((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),bool)": "3b6f743b", - "send((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),(uint256,uint256),address)": "c7c7f5b3", - "sharedDecimals()": "857749b0", - "token()": "fc0c546a" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"InvalidLocalDecimals\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountLD\",\"type\":\"uint256\"}],\"name\":\"SlippageExceeded\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"toAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountReceivedLD\",\"type\":\"uint256\"}],\"name\":\"OFTReceived\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"fromAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountSentLD\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountReceivedLD\",\"type\":\"uint256\"}],\"name\":\"OFTSent\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"approvalRequired\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"oftVersion\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"},{\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"to\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"amountLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountLD\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"extraOptions\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"composeMsg\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"oftCmd\",\"type\":\"bytes\"}],\"internalType\":\"struct SendParam\",\"name\":\"_sendParam\",\"type\":\"tuple\"}],\"name\":\"quoteOFT\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"minAmountLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountLD\",\"type\":\"uint256\"}],\"internalType\":\"struct OFTLimit\",\"name\":\"\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"int256\",\"name\":\"feeAmountLD\",\"type\":\"int256\"},{\"internalType\":\"string\",\"name\":\"description\",\"type\":\"string\"}],\"internalType\":\"struct OFTFeeDetail[]\",\"name\":\"oftFeeDetails\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"amountSentLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountReceivedLD\",\"type\":\"uint256\"}],\"internalType\":\"struct OFTReceipt\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"to\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"amountLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountLD\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"extraOptions\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"composeMsg\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"oftCmd\",\"type\":\"bytes\"}],\"internalType\":\"struct SendParam\",\"name\":\"_sendParam\",\"type\":\"tuple\"},{\"internalType\":\"bool\",\"name\":\"_payInLzToken\",\"type\":\"bool\"}],\"name\":\"quoteSend\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nativeFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lzTokenFee\",\"type\":\"uint256\"}],\"internalType\":\"struct MessagingFee\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"to\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"amountLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountLD\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"extraOptions\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"composeMsg\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"oftCmd\",\"type\":\"bytes\"}],\"internalType\":\"struct SendParam\",\"name\":\"_sendParam\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nativeFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lzTokenFee\",\"type\":\"uint256\"}],\"internalType\":\"struct MessagingFee\",\"name\":\"_fee\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"_refundAddress\",\"type\":\"address\"}],\"name\":\"send\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nativeFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lzTokenFee\",\"type\":\"uint256\"}],\"internalType\":\"struct MessagingFee\",\"name\":\"fee\",\"type\":\"tuple\"}],\"internalType\":\"struct MessagingReceipt\",\"name\":\"\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"amountSentLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountReceivedLD\",\"type\":\"uint256\"}],\"internalType\":\"struct OFTReceipt\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sharedDecimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"token\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface for the OftChain (OFT) token.Does not inherit ERC20 to accommodate usage by OFTAdapter as well.This specific interface ID is '0x02e49c2c'.\",\"kind\":\"dev\",\"methods\":{\"approvalRequired()\":{\"details\":\"Allows things like wallet implementers to determine integration requirements, without understanding the underlying token implementation.\",\"returns\":{\"_0\":\"requiresApproval Needs approval of the underlying token implementation.\"}},\"oftVersion()\":{\"details\":\"interfaceId: This specific interface ID is '0x02e49c2c'.version: Indicates a cross-chain compatible msg encoding with other OFTs.If a new feature is added to the OFT cross-chain msg encoding, the version will be incremented. ie. localOFT version(x,1) CAN send messages to remoteOFT version(x,1)\",\"returns\":{\"interfaceId\":\"The interface ID.\",\"version\":\"The version.\"}},\"quoteOFT((uint32,bytes32,uint256,uint256,bytes,bytes,bytes))\":{\"params\":{\"_sendParam\":\"The parameters for the send operation.\"},\"returns\":{\"_0\":\"limit The OFT limit information.\",\"_2\":\"receipt The OFT receipt information.\",\"oftFeeDetails\":\"The details of OFT fees.\"}},\"quoteSend((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),bool)\":{\"details\":\"MessagingFee: LayerZero msg fee - nativeFee: The native fee. - lzTokenFee: The lzToken fee.\",\"params\":{\"_payInLzToken\":\"Flag indicating whether the caller is paying in the LZ token.\",\"_sendParam\":\"The parameters for the send() operation.\"},\"returns\":{\"_0\":\"fee The calculated LayerZero messaging fee from the send() operation.\"}},\"send((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),(uint256,uint256),address)\":{\"details\":\"MessagingReceipt: LayerZero msg receipt - guid: The unique identifier for the sent message. - nonce: The nonce of the sent message. - fee: The LayerZero fee incurred for the message.\",\"params\":{\"_fee\":\"The fee information supplied by the caller. - nativeFee: The native fee. - lzTokenFee: The lzToken fee.\",\"_refundAddress\":\"The address to receive any excess funds from fees etc. on the src.\",\"_sendParam\":\"The parameters for the send operation.\"},\"returns\":{\"_0\":\"receipt The LayerZero messaging receipt from the send() operation.\",\"_1\":\"oftReceipt The OFT receipt information.\"}},\"sharedDecimals()\":{\"returns\":{\"_0\":\"sharedDecimals The shared decimals of the OFT.\"}},\"token()\":{\"returns\":{\"_0\":\"token The address of the ERC20 token implementation.\"}}},\"title\":\"IOFT\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"approvalRequired()\":{\"notice\":\"Indicates whether the OFT contract requires approval of the 'token()' to send.\"},\"oftVersion()\":{\"notice\":\"Retrieves interfaceID and the version of the OFT.\"},\"quoteOFT((uint32,bytes32,uint256,uint256,bytes,bytes,bytes))\":{\"notice\":\"Provides the fee breakdown and settings data for an OFT. Unused in the default implementation.\"},\"quoteSend((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),bool)\":{\"notice\":\"Provides a quote for the send() operation.\"},\"send((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),(uint256,uint256),address)\":{\"notice\":\"Executes the send() operation.\"},\"sharedDecimals()\":{\"notice\":\"Retrieves the shared decimals of the OFT.\"},\"token()\":{\"notice\":\"Retrieves the address of the token associated with the OFT.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@layerzerolabs/oft-evm/contracts/interfaces/IOFT.sol\":\"IOFT\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\nimport { IMessageLibManager } from \\\"./IMessageLibManager.sol\\\";\\nimport { IMessagingComposer } from \\\"./IMessagingComposer.sol\\\";\\nimport { IMessagingChannel } from \\\"./IMessagingChannel.sol\\\";\\nimport { IMessagingContext } from \\\"./IMessagingContext.sol\\\";\\n\\nstruct MessagingParams {\\n uint32 dstEid;\\n bytes32 receiver;\\n bytes message;\\n bytes options;\\n bool payInLzToken;\\n}\\n\\nstruct MessagingReceipt {\\n bytes32 guid;\\n uint64 nonce;\\n MessagingFee fee;\\n}\\n\\nstruct MessagingFee {\\n uint256 nativeFee;\\n uint256 lzTokenFee;\\n}\\n\\nstruct Origin {\\n uint32 srcEid;\\n bytes32 sender;\\n uint64 nonce;\\n}\\n\\ninterface ILayerZeroEndpointV2 is IMessageLibManager, IMessagingComposer, IMessagingChannel, IMessagingContext {\\n event PacketSent(bytes encodedPayload, bytes options, address sendLibrary);\\n\\n event PacketVerified(Origin origin, address receiver, bytes32 payloadHash);\\n\\n event PacketDelivered(Origin origin, address receiver);\\n\\n event LzReceiveAlert(\\n address indexed receiver,\\n address indexed executor,\\n Origin origin,\\n bytes32 guid,\\n uint256 gas,\\n uint256 value,\\n bytes message,\\n bytes extraData,\\n bytes reason\\n );\\n\\n event LzTokenSet(address token);\\n\\n event DelegateSet(address sender, address delegate);\\n\\n function quote(MessagingParams calldata _params, address _sender) external view returns (MessagingFee memory);\\n\\n function send(\\n MessagingParams calldata _params,\\n address _refundAddress\\n ) external payable returns (MessagingReceipt memory);\\n\\n function verify(Origin calldata _origin, address _receiver, bytes32 _payloadHash) external;\\n\\n function verifiable(Origin calldata _origin, address _receiver) external view returns (bool);\\n\\n function initializable(Origin calldata _origin, address _receiver) external view returns (bool);\\n\\n function lzReceive(\\n Origin calldata _origin,\\n address _receiver,\\n bytes32 _guid,\\n bytes calldata _message,\\n bytes calldata _extraData\\n ) external payable;\\n\\n // oapp can burn messages partially by calling this function with its own business logic if messages are verified in order\\n function clear(address _oapp, Origin calldata _origin, bytes32 _guid, bytes calldata _message) external;\\n\\n function setLzToken(address _lzToken) external;\\n\\n function lzToken() external view returns (address);\\n\\n function nativeToken() external view returns (address);\\n\\n function setDelegate(address _delegate) external;\\n}\\n\",\"keccak256\":\"0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\nstruct SetConfigParam {\\n uint32 eid;\\n uint32 configType;\\n bytes config;\\n}\\n\\ninterface IMessageLibManager {\\n struct Timeout {\\n address lib;\\n uint256 expiry;\\n }\\n\\n event LibraryRegistered(address newLib);\\n event DefaultSendLibrarySet(uint32 eid, address newLib);\\n event DefaultReceiveLibrarySet(uint32 eid, address newLib);\\n event DefaultReceiveLibraryTimeoutSet(uint32 eid, address oldLib, uint256 expiry);\\n event SendLibrarySet(address sender, uint32 eid, address newLib);\\n event ReceiveLibrarySet(address receiver, uint32 eid, address newLib);\\n event ReceiveLibraryTimeoutSet(address receiver, uint32 eid, address oldLib, uint256 timeout);\\n\\n function registerLibrary(address _lib) external;\\n\\n function isRegisteredLibrary(address _lib) external view returns (bool);\\n\\n function getRegisteredLibraries() external view returns (address[] memory);\\n\\n function setDefaultSendLibrary(uint32 _eid, address _newLib) external;\\n\\n function defaultSendLibrary(uint32 _eid) external view returns (address);\\n\\n function setDefaultReceiveLibrary(uint32 _eid, address _newLib, uint256 _gracePeriod) external;\\n\\n function defaultReceiveLibrary(uint32 _eid) external view returns (address);\\n\\n function setDefaultReceiveLibraryTimeout(uint32 _eid, address _lib, uint256 _expiry) external;\\n\\n function defaultReceiveLibraryTimeout(uint32 _eid) external view returns (address lib, uint256 expiry);\\n\\n function isSupportedEid(uint32 _eid) external view returns (bool);\\n\\n function isValidReceiveLibrary(address _receiver, uint32 _eid, address _lib) external view returns (bool);\\n\\n /// ------------------- OApp interfaces -------------------\\n function setSendLibrary(address _oapp, uint32 _eid, address _newLib) external;\\n\\n function getSendLibrary(address _sender, uint32 _eid) external view returns (address lib);\\n\\n function isDefaultSendLibrary(address _sender, uint32 _eid) external view returns (bool);\\n\\n function setReceiveLibrary(address _oapp, uint32 _eid, address _newLib, uint256 _gracePeriod) external;\\n\\n function getReceiveLibrary(address _receiver, uint32 _eid) external view returns (address lib, bool isDefault);\\n\\n function setReceiveLibraryTimeout(address _oapp, uint32 _eid, address _lib, uint256 _expiry) external;\\n\\n function receiveLibraryTimeout(address _receiver, uint32 _eid) external view returns (address lib, uint256 expiry);\\n\\n function setConfig(address _oapp, address _lib, SetConfigParam[] calldata _params) external;\\n\\n function getConfig(\\n address _oapp,\\n address _lib,\\n uint32 _eid,\\n uint32 _configType\\n ) external view returns (bytes memory config);\\n}\\n\",\"keccak256\":\"0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\ninterface IMessagingChannel {\\n event InboundNonceSkipped(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce);\\n event PacketNilified(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce, bytes32 payloadHash);\\n event PacketBurnt(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce, bytes32 payloadHash);\\n\\n function eid() external view returns (uint32);\\n\\n // this is an emergency function if a message cannot be verified for some reasons\\n // required to provide _nextNonce to avoid race condition\\n function skip(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce) external;\\n\\n function nilify(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce, bytes32 _payloadHash) external;\\n\\n function burn(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce, bytes32 _payloadHash) external;\\n\\n function nextGuid(address _sender, uint32 _dstEid, bytes32 _receiver) external view returns (bytes32);\\n\\n function inboundNonce(address _receiver, uint32 _srcEid, bytes32 _sender) external view returns (uint64);\\n\\n function outboundNonce(address _sender, uint32 _dstEid, bytes32 _receiver) external view returns (uint64);\\n\\n function inboundPayloadHash(\\n address _receiver,\\n uint32 _srcEid,\\n bytes32 _sender,\\n uint64 _nonce\\n ) external view returns (bytes32);\\n\\n function lazyInboundNonce(address _receiver, uint32 _srcEid, bytes32 _sender) external view returns (uint64);\\n}\\n\",\"keccak256\":\"0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\ninterface IMessagingComposer {\\n event ComposeSent(address from, address to, bytes32 guid, uint16 index, bytes message);\\n event ComposeDelivered(address from, address to, bytes32 guid, uint16 index);\\n event LzComposeAlert(\\n address indexed from,\\n address indexed to,\\n address indexed executor,\\n bytes32 guid,\\n uint16 index,\\n uint256 gas,\\n uint256 value,\\n bytes message,\\n bytes extraData,\\n bytes reason\\n );\\n\\n function composeQueue(\\n address _from,\\n address _to,\\n bytes32 _guid,\\n uint16 _index\\n ) external view returns (bytes32 messageHash);\\n\\n function sendCompose(address _to, bytes32 _guid, uint16 _index, bytes calldata _message) external;\\n\\n function lzCompose(\\n address _from,\\n address _to,\\n bytes32 _guid,\\n uint16 _index,\\n bytes calldata _message,\\n bytes calldata _extraData\\n ) external payable;\\n}\\n\",\"keccak256\":\"0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\ninterface IMessagingContext {\\n function isSendingMessage() external view returns (bool);\\n\\n function getSendContext() external view returns (uint32 dstEid, address sender);\\n}\\n\",\"keccak256\":\"0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e\",\"license\":\"MIT\"},\"@layerzerolabs/oapp-evm/contracts/oapp/OAppCore.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\nimport { IOAppCore, ILayerZeroEndpointV2 } from \\\"./interfaces/IOAppCore.sol\\\";\\n\\n/**\\n * @title OAppCore\\n * @dev Abstract contract implementing the IOAppCore interface with basic OApp configurations.\\n */\\nabstract contract OAppCore is IOAppCore, Ownable {\\n // The LayerZero endpoint associated with the given OApp\\n ILayerZeroEndpointV2 public immutable endpoint;\\n\\n // Mapping to store peers associated with corresponding endpoints\\n mapping(uint32 eid => bytes32 peer) public peers;\\n\\n /**\\n * @dev Constructor to initialize the OAppCore with the provided endpoint and delegate.\\n * @param _endpoint The address of the LOCAL Layer Zero endpoint.\\n * @param _delegate The delegate capable of making OApp configurations inside of the endpoint.\\n *\\n * @dev The delegate typically should be set as the owner of the contract.\\n */\\n constructor(address _endpoint, address _delegate) {\\n endpoint = ILayerZeroEndpointV2(_endpoint);\\n\\n if (_delegate == address(0)) revert InvalidDelegate();\\n endpoint.setDelegate(_delegate);\\n }\\n\\n /**\\n * @notice Sets the peer address (OApp instance) for a corresponding endpoint.\\n * @param _eid The endpoint ID.\\n * @param _peer The address of the peer to be associated with the corresponding endpoint.\\n *\\n * @dev Only the owner/admin of the OApp can call this function.\\n * @dev Indicates that the peer is trusted to send LayerZero messages to this OApp.\\n * @dev Set this to bytes32(0) to remove the peer address.\\n * @dev Peer is a bytes32 to accommodate non-evm chains.\\n */\\n function setPeer(uint32 _eid, bytes32 _peer) public virtual onlyOwner {\\n _setPeer(_eid, _peer);\\n }\\n\\n /**\\n * @notice Sets the peer address (OApp instance) for a corresponding endpoint.\\n * @param _eid The endpoint ID.\\n * @param _peer The address of the peer to be associated with the corresponding endpoint.\\n *\\n * @dev Indicates that the peer is trusted to send LayerZero messages to this OApp.\\n * @dev Set this to bytes32(0) to remove the peer address.\\n * @dev Peer is a bytes32 to accommodate non-evm chains.\\n */\\n function _setPeer(uint32 _eid, bytes32 _peer) internal virtual {\\n peers[_eid] = _peer;\\n emit PeerSet(_eid, _peer);\\n }\\n\\n /**\\n * @notice Internal function to get the peer address associated with a specific endpoint; reverts if NOT set.\\n * ie. the peer is set to bytes32(0).\\n * @param _eid The endpoint ID.\\n * @return peer The address of the peer associated with the specified endpoint.\\n */\\n function _getPeerOrRevert(uint32 _eid) internal view virtual returns (bytes32) {\\n bytes32 peer = peers[_eid];\\n if (peer == bytes32(0)) revert NoPeer(_eid);\\n return peer;\\n }\\n\\n /**\\n * @notice Sets the delegate address for the OApp.\\n * @param _delegate The address of the delegate to be set.\\n *\\n * @dev Only the owner/admin of the OApp can call this function.\\n * @dev Provides the ability for a delegate to set configs, on behalf of the OApp, directly on the Endpoint contract.\\n */\\n function setDelegate(address _delegate) public onlyOwner {\\n endpoint.setDelegate(_delegate);\\n }\\n}\\n\",\"keccak256\":\"0x13a9c2d1d2c1f086b8624f2e84c4a4702212daae36f701d92bb915b535cbe4cc\",\"license\":\"MIT\"},\"@layerzerolabs/oapp-evm/contracts/oapp/OAppSender.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\nimport { SafeERC20, IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\nimport { MessagingParams, MessagingFee, MessagingReceipt } from \\\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\\\";\\nimport { OAppCore } from \\\"./OAppCore.sol\\\";\\n\\n/**\\n * @title OAppSender\\n * @dev Abstract contract implementing the OAppSender functionality for sending messages to a LayerZero endpoint.\\n */\\nabstract contract OAppSender is OAppCore {\\n using SafeERC20 for IERC20;\\n\\n // Custom error messages\\n error NotEnoughNative(uint256 msgValue);\\n error LzTokenUnavailable();\\n\\n // @dev The version of the OAppSender implementation.\\n // @dev Version is bumped when changes are made to this contract.\\n uint64 internal constant SENDER_VERSION = 1;\\n\\n /**\\n * @notice Retrieves the OApp version information.\\n * @return senderVersion The version of the OAppSender.sol contract.\\n * @return receiverVersion The version of the OAppReceiver.sol contract.\\n *\\n * @dev Providing 0 as the default for OAppReceiver version. Indicates that the OAppReceiver is not implemented.\\n * ie. this is a SEND only OApp.\\n * @dev If the OApp uses both OAppSender and OAppReceiver, then this needs to be override returning the correct versions\\n */\\n function oAppVersion() public view virtual returns (uint64 senderVersion, uint64 receiverVersion) {\\n return (SENDER_VERSION, 0);\\n }\\n\\n /**\\n * @dev Internal function to interact with the LayerZero EndpointV2.quote() for fee calculation.\\n * @param _dstEid The destination endpoint ID.\\n * @param _message The message payload.\\n * @param _options Additional options for the message.\\n * @param _payInLzToken Flag indicating whether to pay the fee in LZ tokens.\\n * @return fee The calculated MessagingFee for the message.\\n * - nativeFee: The native fee for the message.\\n * - lzTokenFee: The LZ token fee for the message.\\n */\\n function _quote(\\n uint32 _dstEid,\\n bytes memory _message,\\n bytes memory _options,\\n bool _payInLzToken\\n ) internal view virtual returns (MessagingFee memory fee) {\\n return\\n endpoint.quote(\\n MessagingParams(_dstEid, _getPeerOrRevert(_dstEid), _message, _options, _payInLzToken),\\n address(this)\\n );\\n }\\n\\n /**\\n * @dev Internal function to interact with the LayerZero EndpointV2.send() for sending a message.\\n * @param _dstEid The destination endpoint ID.\\n * @param _message The message payload.\\n * @param _options Additional options for the message.\\n * @param _fee The calculated LayerZero fee for the message.\\n * - nativeFee: The native fee.\\n * - lzTokenFee: The lzToken fee.\\n * @param _refundAddress The address to receive any excess fee values sent to the endpoint.\\n * @return receipt The receipt for the sent message.\\n * - guid: The unique identifier for the sent message.\\n * - nonce: The nonce of the sent message.\\n * - fee: The LayerZero fee incurred for the message.\\n */\\n function _lzSend(\\n uint32 _dstEid,\\n bytes memory _message,\\n bytes memory _options,\\n MessagingFee memory _fee,\\n address _refundAddress\\n ) internal virtual returns (MessagingReceipt memory receipt) {\\n // @dev Push corresponding fees to the endpoint, any excess is sent back to the _refundAddress from the endpoint.\\n uint256 messageValue = _payNative(_fee.nativeFee);\\n if (_fee.lzTokenFee > 0) _payLzToken(_fee.lzTokenFee);\\n\\n return\\n // solhint-disable-next-line check-send-result\\n endpoint.send{ value: messageValue }(\\n MessagingParams(_dstEid, _getPeerOrRevert(_dstEid), _message, _options, _fee.lzTokenFee > 0),\\n _refundAddress\\n );\\n }\\n\\n /**\\n * @dev Internal function to pay the native fee associated with the message.\\n * @param _nativeFee The native fee to be paid.\\n * @return nativeFee The amount of native currency paid.\\n *\\n * @dev If the OApp needs to initiate MULTIPLE LayerZero messages in a single transaction,\\n * this will need to be overridden because msg.value would contain multiple lzFees.\\n * @dev Should be overridden in the event the LayerZero endpoint requires a different native currency.\\n * @dev Some EVMs use an ERC20 as a method for paying transactions/gasFees.\\n * @dev The endpoint is EITHER/OR, ie. it will NOT support both types of native payment at a time.\\n */\\n function _payNative(uint256 _nativeFee) internal virtual returns (uint256 nativeFee) {\\n if (msg.value != _nativeFee) revert NotEnoughNative(msg.value);\\n return _nativeFee;\\n }\\n\\n /**\\n * @dev Internal function to pay the LZ token fee associated with the message.\\n * @param _lzTokenFee The LZ token fee to be paid.\\n *\\n * @dev If the caller is trying to pay in the specified lzToken, then the lzTokenFee is passed to the endpoint.\\n * @dev Any excess sent, is passed back to the specified _refundAddress in the _lzSend().\\n */\\n function _payLzToken(uint256 _lzTokenFee) internal virtual {\\n // @dev Cannot cache the token because it is not immutable in the endpoint.\\n address lzToken = endpoint.lzToken();\\n if (lzToken == address(0)) revert LzTokenUnavailable();\\n\\n // Pay LZ token fee by sending tokens to the endpoint.\\n IERC20(lzToken).safeTransferFrom(msg.sender, address(endpoint), _lzTokenFee);\\n }\\n}\\n\",\"keccak256\":\"0x518cf4adca601923ed4baa6619846a253ea32b8d8775f8bc1faa3dfac7f67c20\",\"license\":\"MIT\"},\"@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppCore.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\nimport { ILayerZeroEndpointV2 } from \\\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\\\";\\n\\n/**\\n * @title IOAppCore\\n */\\ninterface IOAppCore {\\n // Custom error messages\\n error OnlyPeer(uint32 eid, bytes32 sender);\\n error NoPeer(uint32 eid);\\n error InvalidEndpointCall();\\n error InvalidDelegate();\\n\\n // Event emitted when a peer (OApp) is set for a corresponding endpoint\\n event PeerSet(uint32 eid, bytes32 peer);\\n\\n /**\\n * @notice Retrieves the OApp version information.\\n * @return senderVersion The version of the OAppSender.sol contract.\\n * @return receiverVersion The version of the OAppReceiver.sol contract.\\n */\\n function oAppVersion() external view returns (uint64 senderVersion, uint64 receiverVersion);\\n\\n /**\\n * @notice Retrieves the LayerZero endpoint associated with the OApp.\\n * @return iEndpoint The LayerZero endpoint as an interface.\\n */\\n function endpoint() external view returns (ILayerZeroEndpointV2 iEndpoint);\\n\\n /**\\n * @notice Retrieves the peer (OApp) associated with a corresponding endpoint.\\n * @param _eid The endpoint ID.\\n * @return peer The peer address (OApp instance) associated with the corresponding endpoint.\\n */\\n function peers(uint32 _eid) external view returns (bytes32 peer);\\n\\n /**\\n * @notice Sets the peer address (OApp instance) for a corresponding endpoint.\\n * @param _eid The endpoint ID.\\n * @param _peer The address of the peer to be associated with the corresponding endpoint.\\n */\\n function setPeer(uint32 _eid, bytes32 _peer) external;\\n\\n /**\\n * @notice Sets the delegate address for the OApp Core.\\n * @param _delegate The address of the delegate to be set.\\n */\\n function setDelegate(address _delegate) external;\\n}\\n\",\"keccak256\":\"0x40e49f2de74506e1da5dcaed53a39853f691647f4ceb0fccc8f49a68d3f47c58\",\"license\":\"MIT\"},\"@layerzerolabs/oft-evm/contracts/interfaces/IOFT.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\nimport { MessagingReceipt, MessagingFee } from \\\"@layerzerolabs/oapp-evm/contracts/oapp/OAppSender.sol\\\";\\n\\n/**\\n * @dev Struct representing token parameters for the OFT send() operation.\\n */\\nstruct SendParam {\\n uint32 dstEid; // Destination endpoint ID.\\n bytes32 to; // Recipient address.\\n uint256 amountLD; // Amount to send in local decimals.\\n uint256 minAmountLD; // Minimum amount to send in local decimals.\\n bytes extraOptions; // Additional options supplied by the caller to be used in the LayerZero message.\\n bytes composeMsg; // The composed message for the send() operation.\\n bytes oftCmd; // The OFT command to be executed, unused in default OFT implementations.\\n}\\n\\n/**\\n * @dev Struct representing OFT limit information.\\n * @dev These amounts can change dynamically and are up the specific oft implementation.\\n */\\nstruct OFTLimit {\\n uint256 minAmountLD; // Minimum amount in local decimals that can be sent to the recipient.\\n uint256 maxAmountLD; // Maximum amount in local decimals that can be sent to the recipient.\\n}\\n\\n/**\\n * @dev Struct representing OFT receipt information.\\n */\\nstruct OFTReceipt {\\n uint256 amountSentLD; // Amount of tokens ACTUALLY debited from the sender in local decimals.\\n // @dev In non-default implementations, the amountReceivedLD COULD differ from this value.\\n uint256 amountReceivedLD; // Amount of tokens to be received on the remote side.\\n}\\n\\n/**\\n * @dev Struct representing OFT fee details.\\n * @dev Future proof mechanism to provide a standardized way to communicate fees to things like a UI.\\n */\\nstruct OFTFeeDetail {\\n int256 feeAmountLD; // Amount of the fee in local decimals.\\n string description; // Description of the fee.\\n}\\n\\n/**\\n * @title IOFT\\n * @dev Interface for the OftChain (OFT) token.\\n * @dev Does not inherit ERC20 to accommodate usage by OFTAdapter as well.\\n * @dev This specific interface ID is '0x02e49c2c'.\\n */\\ninterface IOFT {\\n // Custom error messages\\n error InvalidLocalDecimals();\\n error SlippageExceeded(uint256 amountLD, uint256 minAmountLD);\\n\\n // Events\\n event OFTSent(\\n bytes32 indexed guid, // GUID of the OFT message.\\n uint32 dstEid, // Destination Endpoint ID.\\n address indexed fromAddress, // Address of the sender on the src chain.\\n uint256 amountSentLD, // Amount of tokens sent in local decimals.\\n uint256 amountReceivedLD // Amount of tokens received in local decimals.\\n );\\n event OFTReceived(\\n bytes32 indexed guid, // GUID of the OFT message.\\n uint32 srcEid, // Source Endpoint ID.\\n address indexed toAddress, // Address of the recipient on the dst chain.\\n uint256 amountReceivedLD // Amount of tokens received in local decimals.\\n );\\n\\n /**\\n * @notice Retrieves interfaceID and the version of the OFT.\\n * @return interfaceId The interface ID.\\n * @return version The version.\\n *\\n * @dev interfaceId: This specific interface ID is '0x02e49c2c'.\\n * @dev version: Indicates a cross-chain compatible msg encoding with other OFTs.\\n * @dev If a new feature is added to the OFT cross-chain msg encoding, the version will be incremented.\\n * ie. localOFT version(x,1) CAN send messages to remoteOFT version(x,1)\\n */\\n function oftVersion() external view returns (bytes4 interfaceId, uint64 version);\\n\\n /**\\n * @notice Retrieves the address of the token associated with the OFT.\\n * @return token The address of the ERC20 token implementation.\\n */\\n function token() external view returns (address);\\n\\n /**\\n * @notice Indicates whether the OFT contract requires approval of the 'token()' to send.\\n * @return requiresApproval Needs approval of the underlying token implementation.\\n *\\n * @dev Allows things like wallet implementers to determine integration requirements,\\n * without understanding the underlying token implementation.\\n */\\n function approvalRequired() external view returns (bool);\\n\\n /**\\n * @notice Retrieves the shared decimals of the OFT.\\n * @return sharedDecimals The shared decimals of the OFT.\\n */\\n function sharedDecimals() external view returns (uint8);\\n\\n /**\\n * @notice Provides the fee breakdown and settings data for an OFT. Unused in the default implementation.\\n * @param _sendParam The parameters for the send operation.\\n * @return limit The OFT limit information.\\n * @return oftFeeDetails The details of OFT fees.\\n * @return receipt The OFT receipt information.\\n */\\n function quoteOFT(\\n SendParam calldata _sendParam\\n ) external view returns (OFTLimit memory, OFTFeeDetail[] memory oftFeeDetails, OFTReceipt memory);\\n\\n /**\\n * @notice Provides a quote for the send() operation.\\n * @param _sendParam The parameters for the send() operation.\\n * @param _payInLzToken Flag indicating whether the caller is paying in the LZ token.\\n * @return fee The calculated LayerZero messaging fee from the send() operation.\\n *\\n * @dev MessagingFee: LayerZero msg fee\\n * - nativeFee: The native fee.\\n * - lzTokenFee: The lzToken fee.\\n */\\n function quoteSend(SendParam calldata _sendParam, bool _payInLzToken) external view returns (MessagingFee memory);\\n\\n /**\\n * @notice Executes the send() operation.\\n * @param _sendParam The parameters for the send operation.\\n * @param _fee The fee information supplied by the caller.\\n * - nativeFee: The native fee.\\n * - lzTokenFee: The lzToken fee.\\n * @param _refundAddress The address to receive any excess funds from fees etc. on the src.\\n * @return receipt The LayerZero messaging receipt from the send() operation.\\n * @return oftReceipt The OFT receipt information.\\n *\\n * @dev MessagingReceipt: LayerZero msg receipt\\n * - guid: The unique identifier for the sent message.\\n * - nonce: The nonce of the sent message.\\n * - fee: The LayerZero fee incurred for the message.\\n */\\n function send(\\n SendParam calldata _sendParam,\\n MessagingFee calldata _fee,\\n address _refundAddress\\n ) external payable returns (MessagingReceipt memory, OFTReceipt memory);\\n}\\n\",\"keccak256\":\"0x7ba6bb62fba7ee83451cfb0e727ddeef0e96b4388bd4e9ff0fc6ce103e1101c8\",\"license\":\"MIT\"},\"@openzeppelin/contracts/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {Context} from \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * The initial owner is set to the address provided by the deployer. This can\\n * later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n /**\\n * @dev The caller account is not authorized to perform an operation.\\n */\\n error OwnableUnauthorizedAccount(address account);\\n\\n /**\\n * @dev The owner is not a valid owner account. (eg. `address(0)`)\\n */\\n error OwnableInvalidOwner(address owner);\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the address provided by the deployer as the initial owner.\\n */\\n constructor(address initialOwner) {\\n if (initialOwner == address(0)) {\\n revert OwnableInvalidOwner(address(0));\\n }\\n _transferOwnership(initialOwner);\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n _checkOwner();\\n _;\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if the sender is not the owner.\\n */\\n function _checkOwner() internal view virtual {\\n if (owner() != _msgSender()) {\\n revert OwnableUnauthorizedAccount(_msgSender());\\n }\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby disabling any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n if (newOwner == address(0)) {\\n revert OwnableInvalidOwner(address(0));\\n }\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n}\\n\",\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\"},\"@openzeppelin/contracts/interfaces/IERC1363.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (interfaces/IERC1363.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {IERC20} from \\\"./IERC20.sol\\\";\\nimport {IERC165} from \\\"./IERC165.sol\\\";\\n\\n/**\\n * @title IERC1363\\n * @dev Interface of the ERC-1363 standard as defined in the https://eips.ethereum.org/EIPS/eip-1363[ERC-1363].\\n *\\n * Defines an extension interface for ERC-20 tokens that supports executing code on a recipient contract\\n * after `transfer` or `transferFrom`, or code on a spender contract after `approve`, in a single transaction.\\n */\\ninterface IERC1363 is IERC20, IERC165 {\\n /*\\n * Note: the ERC-165 identifier for this interface is 0xb0202a11.\\n * 0xb0202a11 ===\\n * bytes4(keccak256('transferAndCall(address,uint256)')) ^\\n * bytes4(keccak256('transferAndCall(address,uint256,bytes)')) ^\\n * bytes4(keccak256('transferFromAndCall(address,address,uint256)')) ^\\n * bytes4(keccak256('transferFromAndCall(address,address,uint256,bytes)')) ^\\n * bytes4(keccak256('approveAndCall(address,uint256)')) ^\\n * bytes4(keccak256('approveAndCall(address,uint256,bytes)'))\\n */\\n\\n /**\\n * @dev Moves a `value` amount of tokens from the caller's account to `to`\\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\\n * @param to The address which you want to transfer to.\\n * @param value The amount of tokens to be transferred.\\n * @return A boolean value indicating whether the operation succeeded unless throwing.\\n */\\n function transferAndCall(address to, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from the caller's account to `to`\\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\\n * @param to The address which you want to transfer to.\\n * @param value The amount of tokens to be transferred.\\n * @param data Additional data with no specified format, sent in call to `to`.\\n * @return A boolean value indicating whether the operation succeeded unless throwing.\\n */\\n function transferAndCall(address to, uint256 value, bytes calldata data) external returns (bool);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism\\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\\n * @param from The address which you want to send tokens from.\\n * @param to The address which you want to transfer to.\\n * @param value The amount of tokens to be transferred.\\n * @return A boolean value indicating whether the operation succeeded unless throwing.\\n */\\n function transferFromAndCall(address from, address to, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism\\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\\n * @param from The address which you want to send tokens from.\\n * @param to The address which you want to transfer to.\\n * @param value The amount of tokens to be transferred.\\n * @param data Additional data with no specified format, sent in call to `to`.\\n * @return A boolean value indicating whether the operation succeeded unless throwing.\\n */\\n function transferFromAndCall(address from, address to, uint256 value, bytes calldata data) external returns (bool);\\n\\n /**\\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\\n * caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`.\\n * @param spender The address which will spend the funds.\\n * @param value The amount of tokens to be spent.\\n * @return A boolean value indicating whether the operation succeeded unless throwing.\\n */\\n function approveAndCall(address spender, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\\n * caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`.\\n * @param spender The address which will spend the funds.\\n * @param value The amount of tokens to be spent.\\n * @param data Additional data with no specified format, sent in call to `spender`.\\n * @return A boolean value indicating whether the operation succeeded unless throwing.\\n */\\n function approveAndCall(address spender, uint256 value, bytes calldata data) external returns (bool);\\n}\\n\",\"keccak256\":\"0x9b6b3e7803bc5f2f8cd7ad57db8ac1def61a9930a5a3107df4882e028a9605d7\",\"license\":\"MIT\"},\"@openzeppelin/contracts/interfaces/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC165.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {IERC165} from \\\"../utils/introspection/IERC165.sol\\\";\\n\",\"keccak256\":\"0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724\",\"license\":\"MIT\"},\"@openzeppelin/contracts/interfaces/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC20.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {IERC20} from \\\"../token/ERC20/IERC20.sol\\\";\\n\",\"keccak256\":\"0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Interface of the ERC-20 standard as defined in the ERC.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the value of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the value of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\\n * caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from `from` to `to` using the\\n * allowance mechanism. `value` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 value) external returns (bool);\\n}\\n\",\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/utils/SafeERC20.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {IERC20} from \\\"../IERC20.sol\\\";\\nimport {IERC1363} from \\\"../../../interfaces/IERC1363.sol\\\";\\nimport {Address} from \\\"../../../utils/Address.sol\\\";\\n\\n/**\\n * @title SafeERC20\\n * @dev Wrappers around ERC-20 operations that throw on failure (when the token\\n * contract returns false). Tokens that return no value (and instead revert or\\n * throw on failure) are also supported, non-reverting calls are assumed to be\\n * successful.\\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\n */\\nlibrary SafeERC20 {\\n /**\\n * @dev An operation with an ERC-20 token failed.\\n */\\n error SafeERC20FailedOperation(address token);\\n\\n /**\\n * @dev Indicates a failed `decreaseAllowance` request.\\n */\\n error SafeERC20FailedDecreaseAllowance(address spender, uint256 currentAllowance, uint256 requestedDecrease);\\n\\n /**\\n * @dev Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value,\\n * non-reverting calls are assumed to be successful.\\n */\\n function safeTransfer(IERC20 token, address to, uint256 value) internal {\\n _callOptionalReturn(token, abi.encodeCall(token.transfer, (to, value)));\\n }\\n\\n /**\\n * @dev Transfer `value` amount of `token` from `from` to `to`, spending the approval given by `from` to the\\n * calling contract. If `token` returns no value, non-reverting calls are assumed to be successful.\\n */\\n function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\\n _callOptionalReturn(token, abi.encodeCall(token.transferFrom, (from, to, value)));\\n }\\n\\n /**\\n * @dev Increase the calling contract's allowance toward `spender` by `value`. If `token` returns no value,\\n * non-reverting calls are assumed to be successful.\\n *\\n * IMPORTANT: If the token implements ERC-7674 (ERC-20 with temporary allowance), and if the \\\"client\\\"\\n * smart contract uses ERC-7674 to set temporary allowances, then the \\\"client\\\" smart contract should avoid using\\n * this function. Performing a {safeIncreaseAllowance} or {safeDecreaseAllowance} operation on a token contract\\n * that has a non-zero temporary allowance (for that particular owner-spender) will result in unexpected behavior.\\n */\\n function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {\\n uint256 oldAllowance = token.allowance(address(this), spender);\\n forceApprove(token, spender, oldAllowance + value);\\n }\\n\\n /**\\n * @dev Decrease the calling contract's allowance toward `spender` by `requestedDecrease`. If `token` returns no\\n * value, non-reverting calls are assumed to be successful.\\n *\\n * IMPORTANT: If the token implements ERC-7674 (ERC-20 with temporary allowance), and if the \\\"client\\\"\\n * smart contract uses ERC-7674 to set temporary allowances, then the \\\"client\\\" smart contract should avoid using\\n * this function. Performing a {safeIncreaseAllowance} or {safeDecreaseAllowance} operation on a token contract\\n * that has a non-zero temporary allowance (for that particular owner-spender) will result in unexpected behavior.\\n */\\n function safeDecreaseAllowance(IERC20 token, address spender, uint256 requestedDecrease) internal {\\n unchecked {\\n uint256 currentAllowance = token.allowance(address(this), spender);\\n if (currentAllowance < requestedDecrease) {\\n revert SafeERC20FailedDecreaseAllowance(spender, currentAllowance, requestedDecrease);\\n }\\n forceApprove(token, spender, currentAllowance - requestedDecrease);\\n }\\n }\\n\\n /**\\n * @dev Set the calling contract's allowance toward `spender` to `value`. If `token` returns no value,\\n * non-reverting calls are assumed to be successful. Meant to be used with tokens that require the approval\\n * to be set to zero before setting it to a non-zero value, such as USDT.\\n *\\n * NOTE: If the token implements ERC-7674, this function will not modify any temporary allowance. This function\\n * only sets the \\\"standard\\\" allowance. Any temporary allowance will remain active, in addition to the value being\\n * set here.\\n */\\n function forceApprove(IERC20 token, address spender, uint256 value) internal {\\n bytes memory approvalCall = abi.encodeCall(token.approve, (spender, value));\\n\\n if (!_callOptionalReturnBool(token, approvalCall)) {\\n _callOptionalReturn(token, abi.encodeCall(token.approve, (spender, 0)));\\n _callOptionalReturn(token, approvalCall);\\n }\\n }\\n\\n /**\\n * @dev Performs an {ERC1363} transferAndCall, with a fallback to the simple {ERC20} transfer if the target has no\\n * code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\\n * targeting contracts.\\n *\\n * Reverts if the returned value is other than `true`.\\n */\\n function transferAndCallRelaxed(IERC1363 token, address to, uint256 value, bytes memory data) internal {\\n if (to.code.length == 0) {\\n safeTransfer(token, to, value);\\n } else if (!token.transferAndCall(to, value, data)) {\\n revert SafeERC20FailedOperation(address(token));\\n }\\n }\\n\\n /**\\n * @dev Performs an {ERC1363} transferFromAndCall, with a fallback to the simple {ERC20} transferFrom if the target\\n * has no code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\\n * targeting contracts.\\n *\\n * Reverts if the returned value is other than `true`.\\n */\\n function transferFromAndCallRelaxed(\\n IERC1363 token,\\n address from,\\n address to,\\n uint256 value,\\n bytes memory data\\n ) internal {\\n if (to.code.length == 0) {\\n safeTransferFrom(token, from, to, value);\\n } else if (!token.transferFromAndCall(from, to, value, data)) {\\n revert SafeERC20FailedOperation(address(token));\\n }\\n }\\n\\n /**\\n * @dev Performs an {ERC1363} approveAndCall, with a fallback to the simple {ERC20} approve if the target has no\\n * code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\\n * targeting contracts.\\n *\\n * NOTE: When the recipient address (`to`) has no code (i.e. is an EOA), this function behaves as {forceApprove}.\\n * Opposedly, when the recipient address (`to`) has code, this function only attempts to call {ERC1363-approveAndCall}\\n * once without retrying, and relies on the returned value to be true.\\n *\\n * Reverts if the returned value is other than `true`.\\n */\\n function approveAndCallRelaxed(IERC1363 token, address to, uint256 value, bytes memory data) internal {\\n if (to.code.length == 0) {\\n forceApprove(token, to, value);\\n } else if (!token.approveAndCall(to, value, data)) {\\n revert SafeERC20FailedOperation(address(token));\\n }\\n }\\n\\n /**\\n * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n * on the return value: the return value is optional (but if data is returned, it must not be false).\\n * @param token The token targeted by the call.\\n * @param data The call data (encoded using abi.encode or one of its variants).\\n *\\n * This is a variant of {_callOptionalReturnBool} that reverts if call fails to meet the requirements.\\n */\\n function _callOptionalReturn(IERC20 token, bytes memory data) private {\\n uint256 returnSize;\\n uint256 returnValue;\\n assembly (\\\"memory-safe\\\") {\\n let success := call(gas(), token, 0, add(data, 0x20), mload(data), 0, 0x20)\\n // bubble errors\\n if iszero(success) {\\n let ptr := mload(0x40)\\n returndatacopy(ptr, 0, returndatasize())\\n revert(ptr, returndatasize())\\n }\\n returnSize := returndatasize()\\n returnValue := mload(0)\\n }\\n\\n if (returnSize == 0 ? address(token).code.length == 0 : returnValue != 1) {\\n revert SafeERC20FailedOperation(address(token));\\n }\\n }\\n\\n /**\\n * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n * on the return value: the return value is optional (but if data is returned, it must not be false).\\n * @param token The token targeted by the call.\\n * @param data The call data (encoded using abi.encode or one of its variants).\\n *\\n * This is a variant of {_callOptionalReturn} that silently catches all reverts and returns a bool instead.\\n */\\n function _callOptionalReturnBool(IERC20 token, bytes memory data) private returns (bool) {\\n bool success;\\n uint256 returnSize;\\n uint256 returnValue;\\n assembly (\\\"memory-safe\\\") {\\n success := call(gas(), token, 0, add(data, 0x20), mload(data), 0, 0x20)\\n returnSize := returndatasize()\\n returnValue := mload(0)\\n }\\n return success && (returnSize == 0 ? address(token).code.length > 0 : returnValue == 1);\\n }\\n}\\n\",\"keccak256\":\"0xca2ae13e0610f6a99238dd00b97bd786bc92732dae6d6b9d61f573ec51018310\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {Errors} from \\\"./Errors.sol\\\";\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev There's no code at `target` (it is not a contract).\\n */\\n error AddressEmptyCode(address target);\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.8.20/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n if (address(this).balance < amount) {\\n revert Errors.InsufficientBalance(address(this).balance, amount);\\n }\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n if (!success) {\\n revert Errors.FailedCall();\\n }\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason or custom error, it is bubbled\\n * up by this function (like regular Solidity function calls). However, if\\n * the call reverted with no returned reason, this function reverts with a\\n * {Errors.FailedCall} error.\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n if (address(this).balance < value) {\\n revert Errors.InsufficientBalance(address(this).balance, value);\\n }\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResultFromTarget(target, success, returndata);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResultFromTarget(target, success, returndata);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResultFromTarget(target, success, returndata);\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call to smart-contract was successful, and reverts if the target\\n * was not a contract or bubbling up the revert reason (falling back to {Errors.FailedCall}) in case\\n * of an unsuccessful call.\\n */\\n function verifyCallResultFromTarget(\\n address target,\\n bool success,\\n bytes memory returndata\\n ) internal view returns (bytes memory) {\\n if (!success) {\\n _revert(returndata);\\n } else {\\n // only check if target is a contract if the call was successful and the return data is empty\\n // otherwise we already know that it was a contract\\n if (returndata.length == 0 && target.code.length == 0) {\\n revert AddressEmptyCode(target);\\n }\\n return returndata;\\n }\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call was successful, and reverts if it wasn't, either by bubbling the\\n * revert reason or with a default {Errors.FailedCall} error.\\n */\\n function verifyCallResult(bool success, bytes memory returndata) internal pure returns (bytes memory) {\\n if (!success) {\\n _revert(returndata);\\n } else {\\n return returndata;\\n }\\n }\\n\\n /**\\n * @dev Reverts with returndata if present. Otherwise reverts with {Errors.FailedCall}.\\n */\\n function _revert(bytes memory returndata) private pure {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n assembly (\\\"memory-safe\\\") {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert Errors.FailedCall();\\n }\\n }\\n}\\n\",\"keccak256\":\"0x9d8da059267bac779a2dbbb9a26c2acf00ca83085e105d62d5d4ef96054a47f5\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n\\n function _contextSuffixLength() internal view virtual returns (uint256) {\\n return 0;\\n }\\n}\\n\",\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Errors.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/Errors.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Collection of common custom errors used in multiple contracts\\n *\\n * IMPORTANT: Backwards compatibility is not guaranteed in future versions of the library.\\n * It is recommended to avoid relying on the error API for critical functionality.\\n *\\n * _Available since v5.1._\\n */\\nlibrary Errors {\\n /**\\n * @dev The ETH balance of the account is not enough to perform the operation.\\n */\\n error InsufficientBalance(uint256 balance, uint256 needed);\\n\\n /**\\n * @dev A call to an address target failed. The target may have reverted.\\n */\\n error FailedCall();\\n\\n /**\\n * @dev The deployment failed.\\n */\\n error FailedDeployment();\\n\\n /**\\n * @dev A necessary precompile is missing.\\n */\\n error MissingPrecompile(address);\\n}\\n\",\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/introspection/IERC165.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Interface of the ERC-165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[ERC].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\"}},\"version\":1}", - "storageLayout": { "storage": [], "types": null }, - "userdoc": { - "kind": "user", - "methods": { - "approvalRequired()": { - "notice": "Indicates whether the OFT contract requires approval of the 'token()' to send." - }, - "oftVersion()": { - "notice": "Retrieves interfaceID and the version of the OFT." - }, - "quoteOFT((uint32,bytes32,uint256,uint256,bytes,bytes,bytes))": { - "notice": "Provides the fee breakdown and settings data for an OFT. Unused in the default implementation." - }, - "quoteSend((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),bool)": { - "notice": "Provides a quote for the send() operation." - }, - "send((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),(uint256,uint256),address)": { - "notice": "Executes the send() operation." - }, - "sharedDecimals()": { - "notice": "Retrieves the shared decimals of the OFT." - }, - "token()": { - "notice": "Retrieves the address of the token associated with the OFT." - } - }, - "version": 1 - } - } - }, - "@layerzerolabs/oft-evm/contracts/libs/OFTComposeMsgCodec.sol": { - "OFTComposeMsgCodec": { - "abi": [], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212209150eae0310d029a09a609e3d47f56ad7845051c16cb0145ad9f81dfcbe51bf364736f6c63430008160033", - "opcodes": "PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP2 POP 0xEA 0xE0 BALANCE 0xD MUL SWAP11 MULMOD 0xA6 MULMOD 0xE3 0xD4 PUSH32 0x56AD7845051C16CB0145AD9F81DFCBE51BF364736F6C63430008160033000000 ", - "sourceMap": "59:2931:26:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;59:2931:26;;;;;;;;;;;;;;;;;" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212209150eae0310d029a09a609e3d47f56ad7845051c16cb0145ad9f81dfcbe51bf364736f6c63430008160033", - "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP2 POP 0xEA 0xE0 BALANCE 0xD MUL SWAP11 MULMOD 0xA6 MULMOD 0xE3 0xD4 PUSH32 0x56AD7845051C16CB0145AD9F81DFCBE51BF364736F6C63430008160033000000 ", - "sourceMap": "59:2931:26:-:0;;;;;;;;" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "17200", - "executionCost": "103", - "totalCost": "17303" - }, - "internal": { - "addressToBytes32(address)": "infinite", - "amountLD(bytes calldata)": "infinite", - "bytes32ToAddress(bytes32)": "infinite", - "composeFrom(bytes calldata)": "infinite", - "composeMsg(bytes calldata)": "infinite", - "encode(uint64,uint32,uint256,bytes memory)": "infinite", - "nonce(bytes calldata)": "infinite", - "srcEid(bytes calldata)": "infinite" - } - }, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@layerzerolabs/oft-evm/contracts/libs/OFTComposeMsgCodec.sol\":\"OFTComposeMsgCodec\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@layerzerolabs/oft-evm/contracts/libs/OFTComposeMsgCodec.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\nlibrary OFTComposeMsgCodec {\\n // Offset constants for decoding composed messages\\n uint8 private constant NONCE_OFFSET = 8;\\n uint8 private constant SRC_EID_OFFSET = 12;\\n uint8 private constant AMOUNT_LD_OFFSET = 44;\\n uint8 private constant COMPOSE_FROM_OFFSET = 76;\\n\\n /**\\n * @dev Encodes a OFT composed message.\\n * @param _nonce The nonce value.\\n * @param _srcEid The source endpoint ID.\\n * @param _amountLD The amount in local decimals.\\n * @param _composeMsg The composed message.\\n * @return _msg The encoded Composed message.\\n */\\n function encode(\\n uint64 _nonce,\\n uint32 _srcEid,\\n uint256 _amountLD,\\n bytes memory _composeMsg // 0x[composeFrom][composeMsg]\\n ) internal pure returns (bytes memory _msg) {\\n _msg = abi.encodePacked(_nonce, _srcEid, _amountLD, _composeMsg);\\n }\\n\\n /**\\n * @dev Retrieves the nonce for the composed message.\\n * @param _msg The message.\\n * @return The nonce value.\\n */\\n function nonce(bytes calldata _msg) internal pure returns (uint64) {\\n return uint64(bytes8(_msg[:NONCE_OFFSET]));\\n }\\n\\n /**\\n * @dev Retrieves the source endpoint ID for the composed message.\\n * @param _msg The message.\\n * @return The source endpoint ID.\\n */\\n function srcEid(bytes calldata _msg) internal pure returns (uint32) {\\n return uint32(bytes4(_msg[NONCE_OFFSET:SRC_EID_OFFSET]));\\n }\\n\\n /**\\n * @dev Retrieves the amount in local decimals from the composed message.\\n * @param _msg The message.\\n * @return The amount in local decimals.\\n */\\n function amountLD(bytes calldata _msg) internal pure returns (uint256) {\\n return uint256(bytes32(_msg[SRC_EID_OFFSET:AMOUNT_LD_OFFSET]));\\n }\\n\\n /**\\n * @dev Retrieves the composeFrom value from the composed message.\\n * @param _msg The message.\\n * @return The composeFrom value.\\n */\\n function composeFrom(bytes calldata _msg) internal pure returns (bytes32) {\\n return bytes32(_msg[AMOUNT_LD_OFFSET:COMPOSE_FROM_OFFSET]);\\n }\\n\\n /**\\n * @dev Retrieves the composed message.\\n * @param _msg The message.\\n * @return The composed message.\\n */\\n function composeMsg(bytes calldata _msg) internal pure returns (bytes memory) {\\n return _msg[COMPOSE_FROM_OFFSET:];\\n }\\n\\n /**\\n * @dev Converts an address to bytes32.\\n * @param _addr The address to convert.\\n * @return The bytes32 representation of the address.\\n */\\n function addressToBytes32(address _addr) internal pure returns (bytes32) {\\n return bytes32(uint256(uint160(_addr)));\\n }\\n\\n /**\\n * @dev Converts bytes32 to an address.\\n * @param _b The bytes32 value to convert.\\n * @return The address representation of bytes32.\\n */\\n function bytes32ToAddress(bytes32 _b) internal pure returns (address) {\\n return address(uint160(uint256(_b)));\\n }\\n}\\n\",\"keccak256\":\"0xaae73d6eb8b9561c43f1802f3c416c00ccd35f172b711f9781ccdf1b25a40db5\",\"license\":\"MIT\"}},\"version\":1}", - "storageLayout": { "storage": [], "types": null }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - } - }, - "@layerzerolabs/oft-evm/contracts/libs/OFTMsgCodec.sol": { - "OFTMsgCodec": { - "abi": [], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220006456bf94e40c5f9877c080b7f87343e8733959f30cea0f5b6cfabed8e3266364736f6c63430008160033", - "opcodes": "PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 STOP PUSH5 0x56BF94E40C PUSH0 SWAP9 PUSH24 0xC080B7F87343E8733959F30CEA0F5B6CFABED8E326636473 PUSH16 0x6C634300081600330000000000000000 ", - "sourceMap": "59:2846:27:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;59:2846:27;;;;;;;;;;;;;;;;;" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220006456bf94e40c5f9877c080b7f87343e8733959f30cea0f5b6cfabed8e3266364736f6c63430008160033", - "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 STOP PUSH5 0x56BF94E40C PUSH0 SWAP9 PUSH24 0xC080B7F87343E8733959F30CEA0F5B6CFABED8E326636473 PUSH16 0x6C634300081600330000000000000000 ", - "sourceMap": "59:2846:27:-:0;;;;;;;;" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "17200", - "executionCost": "103", - "totalCost": "17303" - }, - "internal": { - "addressToBytes32(address)": "infinite", - "amountSD(bytes calldata)": "infinite", - "bytes32ToAddress(bytes32)": "infinite", - "composeMsg(bytes calldata)": "infinite", - "encode(bytes32,uint64,bytes memory)": "infinite", - "isComposed(bytes calldata)": "infinite", - "sendTo(bytes calldata)": "infinite" - } - }, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@layerzerolabs/oft-evm/contracts/libs/OFTMsgCodec.sol\":\"OFTMsgCodec\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@layerzerolabs/oft-evm/contracts/libs/OFTMsgCodec.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\nlibrary OFTMsgCodec {\\n // Offset constants for encoding and decoding OFT messages\\n uint8 private constant SEND_TO_OFFSET = 32;\\n uint8 private constant SEND_AMOUNT_SD_OFFSET = 40;\\n\\n /**\\n * @dev Encodes an OFT LayerZero message.\\n * @param _sendTo The recipient address.\\n * @param _amountShared The amount in shared decimals.\\n * @param _composeMsg The composed message.\\n * @return _msg The encoded message.\\n * @return hasCompose A boolean indicating whether the message has a composed payload.\\n */\\n function encode(\\n bytes32 _sendTo,\\n uint64 _amountShared,\\n bytes memory _composeMsg\\n ) internal view returns (bytes memory _msg, bool hasCompose) {\\n hasCompose = _composeMsg.length > 0;\\n // @dev Remote chains will want to know the composed function caller ie. msg.sender on the src.\\n _msg = hasCompose\\n ? abi.encodePacked(_sendTo, _amountShared, addressToBytes32(msg.sender), _composeMsg)\\n : abi.encodePacked(_sendTo, _amountShared);\\n }\\n\\n /**\\n * @dev Checks if the OFT message is composed.\\n * @param _msg The OFT message.\\n * @return A boolean indicating whether the message is composed.\\n */\\n function isComposed(bytes calldata _msg) internal pure returns (bool) {\\n return _msg.length > SEND_AMOUNT_SD_OFFSET;\\n }\\n\\n /**\\n * @dev Retrieves the recipient address from the OFT message.\\n * @param _msg The OFT message.\\n * @return The recipient address.\\n */\\n function sendTo(bytes calldata _msg) internal pure returns (bytes32) {\\n return bytes32(_msg[:SEND_TO_OFFSET]);\\n }\\n\\n /**\\n * @dev Retrieves the amount in shared decimals from the OFT message.\\n * @param _msg The OFT message.\\n * @return The amount in shared decimals.\\n */\\n function amountSD(bytes calldata _msg) internal pure returns (uint64) {\\n return uint64(bytes8(_msg[SEND_TO_OFFSET:SEND_AMOUNT_SD_OFFSET]));\\n }\\n\\n /**\\n * @dev Retrieves the composed message from the OFT message.\\n * @param _msg The OFT message.\\n * @return The composed message.\\n */\\n function composeMsg(bytes calldata _msg) internal pure returns (bytes memory) {\\n return _msg[SEND_AMOUNT_SD_OFFSET:];\\n }\\n\\n /**\\n * @dev Converts an address to bytes32.\\n * @param _addr The address to convert.\\n * @return The bytes32 representation of the address.\\n */\\n function addressToBytes32(address _addr) internal pure returns (bytes32) {\\n return bytes32(uint256(uint160(_addr)));\\n }\\n\\n /**\\n * @dev Converts bytes32 to an address.\\n * @param _b The bytes32 value to convert.\\n * @return The address representation of bytes32.\\n */\\n function bytes32ToAddress(bytes32 _b) internal pure returns (address) {\\n return address(uint160(uint256(_b)));\\n }\\n}\\n\",\"keccak256\":\"0x5358948017669c03e157f871d8c38e988f9004dbd0801ad3119d2487f0d40b0b\",\"license\":\"MIT\"}},\"version\":1}", - "storageLayout": { "storage": [], "types": null }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - } - }, - "@openzeppelin/contracts/access/Ownable.sol": { - "Ownable": { - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "OwnableInvalidOwner", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "OwnableUnauthorizedAccount", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "devdoc": { - "details": "Contract module which provides a basic access control mechanism, where there is an account (an owner) that can be granted exclusive access to specific functions. The initial owner is set to the address provided by the deployer. This can later be changed with {transferOwnership}. This module is used through inheritance. It will make available the modifier `onlyOwner`, which can be applied to your functions to restrict their use to the owner.", - "errors": { - "OwnableInvalidOwner(address)": [ - { - "details": "The owner is not a valid owner account. (eg. `address(0)`)" - } - ], - "OwnableUnauthorizedAccount(address)": [ - { - "details": "The caller account is not authorized to perform an operation." - } - ] - }, - "kind": "dev", - "methods": { - "constructor": { - "details": "Initializes the contract setting the address provided by the deployer as the initial owner." - }, - "owner()": { - "details": "Returns the address of the current owner." - }, - "renounceOwnership()": { - "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner." - }, - "transferOwnership(address)": { - "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." - } - }, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": { - "owner()": "8da5cb5b", - "renounceOwnership()": "715018a6", - "transferOwnership(address)": "f2fde38b" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Contract module which provides a basic access control mechanism, where there is an account (an owner) that can be granted exclusive access to specific functions. The initial owner is set to the address provided by the deployer. This can later be changed with {transferOwnership}. This module is used through inheritance. It will make available the modifier `onlyOwner`, which can be applied to your functions to restrict their use to the owner.\",\"errors\":{\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}]},\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Initializes the contract setting the address provided by the deployer as the initial owner.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/access/Ownable.sol\":\"Ownable\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {Context} from \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * The initial owner is set to the address provided by the deployer. This can\\n * later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n /**\\n * @dev The caller account is not authorized to perform an operation.\\n */\\n error OwnableUnauthorizedAccount(address account);\\n\\n /**\\n * @dev The owner is not a valid owner account. (eg. `address(0)`)\\n */\\n error OwnableInvalidOwner(address owner);\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the address provided by the deployer as the initial owner.\\n */\\n constructor(address initialOwner) {\\n if (initialOwner == address(0)) {\\n revert OwnableInvalidOwner(address(0));\\n }\\n _transferOwnership(initialOwner);\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n _checkOwner();\\n _;\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if the sender is not the owner.\\n */\\n function _checkOwner() internal view virtual {\\n if (owner() != _msgSender()) {\\n revert OwnableUnauthorizedAccount(_msgSender());\\n }\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby disabling any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n if (newOwner == address(0)) {\\n revert OwnableInvalidOwner(address(0));\\n }\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n}\\n\",\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n\\n function _contextSuffixLength() internal view virtual returns (uint256) {\\n return 0;\\n }\\n}\\n\",\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\"}},\"version\":1}", - "storageLayout": { - "storage": [ - { - "astId": 3837, - "contract": "@openzeppelin/contracts/access/Ownable.sol:Ownable", - "label": "_owner", - "offset": 0, - "slot": "0", - "type": "t_address" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - } - } - }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - } - }, - "@openzeppelin/contracts/interfaces/IERC1363.sol": { - "IERC1363": { - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "spender", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { "internalType": "bool", "name": "", "type": "bool" } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "approveAndCall", - "outputs": [ - { "internalType": "bool", "name": "", "type": "bool" } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { "internalType": "bytes", "name": "data", "type": "bytes" } - ], - "name": "approveAndCall", - "outputs": [ - { "internalType": "bool", "name": "", "type": "bool" } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { "internalType": "bool", "name": "", "type": "bool" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalSupply", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "to", "type": "address" }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { "internalType": "bool", "name": "", "type": "bool" } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "to", "type": "address" }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transferAndCall", - "outputs": [ - { "internalType": "bool", "name": "", "type": "bool" } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "to", "type": "address" }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { "internalType": "bytes", "name": "data", "type": "bytes" } - ], - "name": "transferAndCall", - "outputs": [ - { "internalType": "bool", "name": "", "type": "bool" } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { "internalType": "address", "name": "to", "type": "address" }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { "internalType": "bool", "name": "", "type": "bool" } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { "internalType": "address", "name": "to", "type": "address" }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { "internalType": "bytes", "name": "data", "type": "bytes" } - ], - "name": "transferFromAndCall", - "outputs": [ - { "internalType": "bool", "name": "", "type": "bool" } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { "internalType": "address", "name": "to", "type": "address" }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transferFromAndCall", - "outputs": [ - { "internalType": "bool", "name": "", "type": "bool" } - ], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "devdoc": { - "details": "Interface of the ERC-1363 standard as defined in the https://eips.ethereum.org/EIPS/eip-1363[ERC-1363]. Defines an extension interface for ERC-20 tokens that supports executing code on a recipient contract after `transfer` or `transferFrom`, or code on a spender contract after `approve`, in a single transaction.", - "events": { - "Approval(address,address,uint256)": { - "details": "Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance." - }, - "Transfer(address,address,uint256)": { - "details": "Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero." - } - }, - "kind": "dev", - "methods": { - "allowance(address,address)": { - "details": "Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called." - }, - "approve(address,uint256)": { - "details": "Sets a `value` amount of tokens as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event." - }, - "approveAndCall(address,uint256)": { - "details": "Sets a `value` amount of tokens as the allowance of `spender` over the caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`.", - "params": { - "spender": "The address which will spend the funds.", - "value": "The amount of tokens to be spent." - }, - "returns": { - "_0": "A boolean value indicating whether the operation succeeded unless throwing." - } - }, - "approveAndCall(address,uint256,bytes)": { - "details": "Sets a `value` amount of tokens as the allowance of `spender` over the caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`.", - "params": { - "data": "Additional data with no specified format, sent in call to `spender`.", - "spender": "The address which will spend the funds.", - "value": "The amount of tokens to be spent." - }, - "returns": { - "_0": "A boolean value indicating whether the operation succeeded unless throwing." - } - }, - "balanceOf(address)": { - "details": "Returns the value of tokens owned by `account`." - }, - "supportsInterface(bytes4)": { - "details": "Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section] to learn more about how these ids are created. This function call must use less than 30 000 gas." - }, - "totalSupply()": { - "details": "Returns the value of tokens in existence." - }, - "transfer(address,uint256)": { - "details": "Moves a `value` amount of tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event." - }, - "transferAndCall(address,uint256)": { - "details": "Moves a `value` amount of tokens from the caller's account to `to` and then calls {IERC1363Receiver-onTransferReceived} on `to`.", - "params": { - "to": "The address which you want to transfer to.", - "value": "The amount of tokens to be transferred." - }, - "returns": { - "_0": "A boolean value indicating whether the operation succeeded unless throwing." - } - }, - "transferAndCall(address,uint256,bytes)": { - "details": "Moves a `value` amount of tokens from the caller's account to `to` and then calls {IERC1363Receiver-onTransferReceived} on `to`.", - "params": { - "data": "Additional data with no specified format, sent in call to `to`.", - "to": "The address which you want to transfer to.", - "value": "The amount of tokens to be transferred." - }, - "returns": { - "_0": "A boolean value indicating whether the operation succeeded unless throwing." - } - }, - "transferFrom(address,address,uint256)": { - "details": "Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism. `value` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event." - }, - "transferFromAndCall(address,address,uint256)": { - "details": "Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism and then calls {IERC1363Receiver-onTransferReceived} on `to`.", - "params": { - "from": "The address which you want to send tokens from.", - "to": "The address which you want to transfer to.", - "value": "The amount of tokens to be transferred." - }, - "returns": { - "_0": "A boolean value indicating whether the operation succeeded unless throwing." - } - }, - "transferFromAndCall(address,address,uint256,bytes)": { - "details": "Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism and then calls {IERC1363Receiver-onTransferReceived} on `to`.", - "params": { - "data": "Additional data with no specified format, sent in call to `to`.", - "from": "The address which you want to send tokens from.", - "to": "The address which you want to transfer to.", - "value": "The amount of tokens to be transferred." - }, - "returns": { - "_0": "A boolean value indicating whether the operation succeeded unless throwing." - } - } - }, - "title": "IERC1363", - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": { - "allowance(address,address)": "dd62ed3e", - "approve(address,uint256)": "095ea7b3", - "approveAndCall(address,uint256)": "3177029f", - "approveAndCall(address,uint256,bytes)": "cae9ca51", - "balanceOf(address)": "70a08231", - "supportsInterface(bytes4)": "01ffc9a7", - "totalSupply()": "18160ddd", - "transfer(address,uint256)": "a9059cbb", - "transferAndCall(address,uint256)": "1296ee62", - "transferAndCall(address,uint256,bytes)": "4000aea0", - "transferFrom(address,address,uint256)": "23b872dd", - "transferFromAndCall(address,address,uint256)": "d8fbe994", - "transferFromAndCall(address,address,uint256,bytes)": "c1d34b89" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approveAndCall\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"approveAndCall\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferAndCall\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"transferAndCall\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"transferFromAndCall\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFromAndCall\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface of the ERC-1363 standard as defined in the https://eips.ethereum.org/EIPS/eip-1363[ERC-1363]. Defines an extension interface for ERC-20 tokens that supports executing code on a recipient contract after `transfer` or `transferFrom`, or code on a spender contract after `approve`, in a single transaction.\",\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called.\"},\"approve(address,uint256)\":{\"details\":\"Sets a `value` amount of tokens as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event.\"},\"approveAndCall(address,uint256)\":{\"details\":\"Sets a `value` amount of tokens as the allowance of `spender` over the caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`.\",\"params\":{\"spender\":\"The address which will spend the funds.\",\"value\":\"The amount of tokens to be spent.\"},\"returns\":{\"_0\":\"A boolean value indicating whether the operation succeeded unless throwing.\"}},\"approveAndCall(address,uint256,bytes)\":{\"details\":\"Sets a `value` amount of tokens as the allowance of `spender` over the caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`.\",\"params\":{\"data\":\"Additional data with no specified format, sent in call to `spender`.\",\"spender\":\"The address which will spend the funds.\",\"value\":\"The amount of tokens to be spent.\"},\"returns\":{\"_0\":\"A boolean value indicating whether the operation succeeded unless throwing.\"}},\"balanceOf(address)\":{\"details\":\"Returns the value of tokens owned by `account`.\"},\"supportsInterface(bytes4)\":{\"details\":\"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section] to learn more about how these ids are created. This function call must use less than 30 000 gas.\"},\"totalSupply()\":{\"details\":\"Returns the value of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferAndCall(address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from the caller's account to `to` and then calls {IERC1363Receiver-onTransferReceived} on `to`.\",\"params\":{\"to\":\"The address which you want to transfer to.\",\"value\":\"The amount of tokens to be transferred.\"},\"returns\":{\"_0\":\"A boolean value indicating whether the operation succeeded unless throwing.\"}},\"transferAndCall(address,uint256,bytes)\":{\"details\":\"Moves a `value` amount of tokens from the caller's account to `to` and then calls {IERC1363Receiver-onTransferReceived} on `to`.\",\"params\":{\"data\":\"Additional data with no specified format, sent in call to `to`.\",\"to\":\"The address which you want to transfer to.\",\"value\":\"The amount of tokens to be transferred.\"},\"returns\":{\"_0\":\"A boolean value indicating whether the operation succeeded unless throwing.\"}},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism. `value` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFromAndCall(address,address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism and then calls {IERC1363Receiver-onTransferReceived} on `to`.\",\"params\":{\"from\":\"The address which you want to send tokens from.\",\"to\":\"The address which you want to transfer to.\",\"value\":\"The amount of tokens to be transferred.\"},\"returns\":{\"_0\":\"A boolean value indicating whether the operation succeeded unless throwing.\"}},\"transferFromAndCall(address,address,uint256,bytes)\":{\"details\":\"Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism and then calls {IERC1363Receiver-onTransferReceived} on `to`.\",\"params\":{\"data\":\"Additional data with no specified format, sent in call to `to`.\",\"from\":\"The address which you want to send tokens from.\",\"to\":\"The address which you want to transfer to.\",\"value\":\"The amount of tokens to be transferred.\"},\"returns\":{\"_0\":\"A boolean value indicating whether the operation succeeded unless throwing.\"}}},\"title\":\"IERC1363\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/interfaces/IERC1363.sol\":\"IERC1363\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/interfaces/IERC1363.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (interfaces/IERC1363.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {IERC20} from \\\"./IERC20.sol\\\";\\nimport {IERC165} from \\\"./IERC165.sol\\\";\\n\\n/**\\n * @title IERC1363\\n * @dev Interface of the ERC-1363 standard as defined in the https://eips.ethereum.org/EIPS/eip-1363[ERC-1363].\\n *\\n * Defines an extension interface for ERC-20 tokens that supports executing code on a recipient contract\\n * after `transfer` or `transferFrom`, or code on a spender contract after `approve`, in a single transaction.\\n */\\ninterface IERC1363 is IERC20, IERC165 {\\n /*\\n * Note: the ERC-165 identifier for this interface is 0xb0202a11.\\n * 0xb0202a11 ===\\n * bytes4(keccak256('transferAndCall(address,uint256)')) ^\\n * bytes4(keccak256('transferAndCall(address,uint256,bytes)')) ^\\n * bytes4(keccak256('transferFromAndCall(address,address,uint256)')) ^\\n * bytes4(keccak256('transferFromAndCall(address,address,uint256,bytes)')) ^\\n * bytes4(keccak256('approveAndCall(address,uint256)')) ^\\n * bytes4(keccak256('approveAndCall(address,uint256,bytes)'))\\n */\\n\\n /**\\n * @dev Moves a `value` amount of tokens from the caller's account to `to`\\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\\n * @param to The address which you want to transfer to.\\n * @param value The amount of tokens to be transferred.\\n * @return A boolean value indicating whether the operation succeeded unless throwing.\\n */\\n function transferAndCall(address to, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from the caller's account to `to`\\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\\n * @param to The address which you want to transfer to.\\n * @param value The amount of tokens to be transferred.\\n * @param data Additional data with no specified format, sent in call to `to`.\\n * @return A boolean value indicating whether the operation succeeded unless throwing.\\n */\\n function transferAndCall(address to, uint256 value, bytes calldata data) external returns (bool);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism\\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\\n * @param from The address which you want to send tokens from.\\n * @param to The address which you want to transfer to.\\n * @param value The amount of tokens to be transferred.\\n * @return A boolean value indicating whether the operation succeeded unless throwing.\\n */\\n function transferFromAndCall(address from, address to, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism\\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\\n * @param from The address which you want to send tokens from.\\n * @param to The address which you want to transfer to.\\n * @param value The amount of tokens to be transferred.\\n * @param data Additional data with no specified format, sent in call to `to`.\\n * @return A boolean value indicating whether the operation succeeded unless throwing.\\n */\\n function transferFromAndCall(address from, address to, uint256 value, bytes calldata data) external returns (bool);\\n\\n /**\\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\\n * caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`.\\n * @param spender The address which will spend the funds.\\n * @param value The amount of tokens to be spent.\\n * @return A boolean value indicating whether the operation succeeded unless throwing.\\n */\\n function approveAndCall(address spender, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\\n * caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`.\\n * @param spender The address which will spend the funds.\\n * @param value The amount of tokens to be spent.\\n * @param data Additional data with no specified format, sent in call to `spender`.\\n * @return A boolean value indicating whether the operation succeeded unless throwing.\\n */\\n function approveAndCall(address spender, uint256 value, bytes calldata data) external returns (bool);\\n}\\n\",\"keccak256\":\"0x9b6b3e7803bc5f2f8cd7ad57db8ac1def61a9930a5a3107df4882e028a9605d7\",\"license\":\"MIT\"},\"@openzeppelin/contracts/interfaces/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC165.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {IERC165} from \\\"../utils/introspection/IERC165.sol\\\";\\n\",\"keccak256\":\"0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724\",\"license\":\"MIT\"},\"@openzeppelin/contracts/interfaces/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC20.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {IERC20} from \\\"../token/ERC20/IERC20.sol\\\";\\n\",\"keccak256\":\"0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Interface of the ERC-20 standard as defined in the ERC.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the value of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the value of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\\n * caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from `from` to `to` using the\\n * allowance mechanism. `value` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 value) external returns (bool);\\n}\\n\",\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/introspection/IERC165.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Interface of the ERC-165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[ERC].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\"}},\"version\":1}", - "storageLayout": { "storage": [], "types": null }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - } - }, - "@openzeppelin/contracts/interfaces/draft-IERC6093.sol": { - "IERC1155Errors": { - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "balance", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "needed", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "ERC1155InsufficientBalance", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "approver", - "type": "address" - } - ], - "name": "ERC1155InvalidApprover", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "idsLength", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "valuesLength", - "type": "uint256" - } - ], - "name": "ERC1155InvalidArrayLength", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - } - ], - "name": "ERC1155InvalidOperator", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "receiver", - "type": "address" - } - ], - "name": "ERC1155InvalidReceiver", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "ERC1155InvalidSender", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "ERC1155MissingApprovalForAll", - "type": "error" - } - ], - "devdoc": { - "details": "Standard ERC-1155 Errors Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-1155 tokens.", - "errors": { - "ERC1155InsufficientBalance(address,uint256,uint256,uint256)": [ - { - "details": "Indicates an error related to the current `balance` of a `sender`. Used in transfers.", - "params": { - "balance": "Current balance for the interacting account.", - "needed": "Minimum amount required to perform a transfer.", - "sender": "Address whose tokens are being transferred.", - "tokenId": "Identifier number of a token." - } - } - ], - "ERC1155InvalidApprover(address)": [ - { - "details": "Indicates a failure with the `approver` of a token to be approved. Used in approvals.", - "params": { - "approver": "Address initiating an approval operation." - } - } - ], - "ERC1155InvalidArrayLength(uint256,uint256)": [ - { - "details": "Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation. Used in batch transfers.", - "params": { - "idsLength": "Length of the array of token identifiers", - "valuesLength": "Length of the array of token amounts" - } - } - ], - "ERC1155InvalidOperator(address)": [ - { - "details": "Indicates a failure with the `operator` to be approved. Used in approvals.", - "params": { - "operator": "Address that may be allowed to operate on tokens without being their owner." - } - } - ], - "ERC1155InvalidReceiver(address)": [ - { - "details": "Indicates a failure with the token `receiver`. Used in transfers.", - "params": { - "receiver": "Address to which tokens are being transferred." - } - } - ], - "ERC1155InvalidSender(address)": [ - { - "details": "Indicates a failure with the token `sender`. Used in transfers.", - "params": { - "sender": "Address whose tokens are being transferred." - } - } - ], - "ERC1155MissingApprovalForAll(address,address)": [ - { - "details": "Indicates a failure with the `operator`’s approval. Used in transfers.", - "params": { - "operator": "Address that may be allowed to operate on tokens without being their owner.", - "owner": "Address of the current owner of a token." - } - } - ] - }, - "kind": "dev", - "methods": {}, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ERC1155InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC1155InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"idsLength\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"valuesLength\",\"type\":\"uint256\"}],\"name\":\"ERC1155InvalidArrayLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"ERC1155InvalidOperator\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC1155InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC1155InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ERC1155MissingApprovalForAll\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Standard ERC-1155 Errors Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-1155 tokens.\",\"errors\":{\"ERC1155InsufficientBalance(address,uint256,uint256,uint256)\":[{\"details\":\"Indicates an error related to the current `balance` of a `sender`. Used in transfers.\",\"params\":{\"balance\":\"Current balance for the interacting account.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"sender\":\"Address whose tokens are being transferred.\",\"tokenId\":\"Identifier number of a token.\"}}],\"ERC1155InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC1155InvalidArrayLength(uint256,uint256)\":[{\"details\":\"Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation. Used in batch transfers.\",\"params\":{\"idsLength\":\"Length of the array of token identifiers\",\"valuesLength\":\"Length of the array of token amounts\"}}],\"ERC1155InvalidOperator(address)\":[{\"details\":\"Indicates a failure with the `operator` to be approved. Used in approvals.\",\"params\":{\"operator\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC1155InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC1155InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC1155MissingApprovalForAll(address,address)\":[{\"details\":\"Indicates a failure with the `operator`\\u2019s approval. Used in transfers.\",\"params\":{\"operator\":\"Address that may be allowed to operate on tokens without being their owner.\",\"owner\":\"Address of the current owner of a token.\"}}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":\"IERC1155Errors\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (interfaces/draft-IERC6093.sol)\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Standard ERC-20 Errors\\n * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-20 tokens.\\n */\\ninterface IERC20Errors {\\n /**\\n * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.\\n * @param sender Address whose tokens are being transferred.\\n * @param balance Current balance for the interacting account.\\n * @param needed Minimum amount required to perform a transfer.\\n */\\n error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed);\\n\\n /**\\n * @dev Indicates a failure with the token `sender`. Used in transfers.\\n * @param sender Address whose tokens are being transferred.\\n */\\n error ERC20InvalidSender(address sender);\\n\\n /**\\n * @dev Indicates a failure with the token `receiver`. Used in transfers.\\n * @param receiver Address to which tokens are being transferred.\\n */\\n error ERC20InvalidReceiver(address receiver);\\n\\n /**\\n * @dev Indicates a failure with the `spender`\\u2019s `allowance`. Used in transfers.\\n * @param spender Address that may be allowed to operate on tokens without being their owner.\\n * @param allowance Amount of tokens a `spender` is allowed to operate with.\\n * @param needed Minimum amount required to perform a transfer.\\n */\\n error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed);\\n\\n /**\\n * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\\n * @param approver Address initiating an approval operation.\\n */\\n error ERC20InvalidApprover(address approver);\\n\\n /**\\n * @dev Indicates a failure with the `spender` to be approved. Used in approvals.\\n * @param spender Address that may be allowed to operate on tokens without being their owner.\\n */\\n error ERC20InvalidSpender(address spender);\\n}\\n\\n/**\\n * @dev Standard ERC-721 Errors\\n * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-721 tokens.\\n */\\ninterface IERC721Errors {\\n /**\\n * @dev Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in ERC-20.\\n * Used in balance queries.\\n * @param owner Address of the current owner of a token.\\n */\\n error ERC721InvalidOwner(address owner);\\n\\n /**\\n * @dev Indicates a `tokenId` whose `owner` is the zero address.\\n * @param tokenId Identifier number of a token.\\n */\\n error ERC721NonexistentToken(uint256 tokenId);\\n\\n /**\\n * @dev Indicates an error related to the ownership over a particular token. Used in transfers.\\n * @param sender Address whose tokens are being transferred.\\n * @param tokenId Identifier number of a token.\\n * @param owner Address of the current owner of a token.\\n */\\n error ERC721IncorrectOwner(address sender, uint256 tokenId, address owner);\\n\\n /**\\n * @dev Indicates a failure with the token `sender`. Used in transfers.\\n * @param sender Address whose tokens are being transferred.\\n */\\n error ERC721InvalidSender(address sender);\\n\\n /**\\n * @dev Indicates a failure with the token `receiver`. Used in transfers.\\n * @param receiver Address to which tokens are being transferred.\\n */\\n error ERC721InvalidReceiver(address receiver);\\n\\n /**\\n * @dev Indicates a failure with the `operator`\\u2019s approval. Used in transfers.\\n * @param operator Address that may be allowed to operate on tokens without being their owner.\\n * @param tokenId Identifier number of a token.\\n */\\n error ERC721InsufficientApproval(address operator, uint256 tokenId);\\n\\n /**\\n * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\\n * @param approver Address initiating an approval operation.\\n */\\n error ERC721InvalidApprover(address approver);\\n\\n /**\\n * @dev Indicates a failure with the `operator` to be approved. Used in approvals.\\n * @param operator Address that may be allowed to operate on tokens without being their owner.\\n */\\n error ERC721InvalidOperator(address operator);\\n}\\n\\n/**\\n * @dev Standard ERC-1155 Errors\\n * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-1155 tokens.\\n */\\ninterface IERC1155Errors {\\n /**\\n * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.\\n * @param sender Address whose tokens are being transferred.\\n * @param balance Current balance for the interacting account.\\n * @param needed Minimum amount required to perform a transfer.\\n * @param tokenId Identifier number of a token.\\n */\\n error ERC1155InsufficientBalance(address sender, uint256 balance, uint256 needed, uint256 tokenId);\\n\\n /**\\n * @dev Indicates a failure with the token `sender`. Used in transfers.\\n * @param sender Address whose tokens are being transferred.\\n */\\n error ERC1155InvalidSender(address sender);\\n\\n /**\\n * @dev Indicates a failure with the token `receiver`. Used in transfers.\\n * @param receiver Address to which tokens are being transferred.\\n */\\n error ERC1155InvalidReceiver(address receiver);\\n\\n /**\\n * @dev Indicates a failure with the `operator`\\u2019s approval. Used in transfers.\\n * @param operator Address that may be allowed to operate on tokens without being their owner.\\n * @param owner Address of the current owner of a token.\\n */\\n error ERC1155MissingApprovalForAll(address operator, address owner);\\n\\n /**\\n * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\\n * @param approver Address initiating an approval operation.\\n */\\n error ERC1155InvalidApprover(address approver);\\n\\n /**\\n * @dev Indicates a failure with the `operator` to be approved. Used in approvals.\\n * @param operator Address that may be allowed to operate on tokens without being their owner.\\n */\\n error ERC1155InvalidOperator(address operator);\\n\\n /**\\n * @dev Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation.\\n * Used in batch transfers.\\n * @param idsLength Length of the array of token identifiers\\n * @param valuesLength Length of the array of token amounts\\n */\\n error ERC1155InvalidArrayLength(uint256 idsLength, uint256 valuesLength);\\n}\\n\",\"keccak256\":\"0x880da465c203cec76b10d72dbd87c80f387df4102274f23eea1f9c9b0918792b\",\"license\":\"MIT\"}},\"version\":1}", - "storageLayout": { "storage": [], "types": null }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "IERC20Errors": { - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "allowance", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "needed", - "type": "uint256" - } - ], - "name": "ERC20InsufficientAllowance", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "balance", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "needed", - "type": "uint256" - } - ], - "name": "ERC20InsufficientBalance", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "approver", - "type": "address" - } - ], - "name": "ERC20InvalidApprover", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "receiver", - "type": "address" - } - ], - "name": "ERC20InvalidReceiver", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "ERC20InvalidSender", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - } - ], - "name": "ERC20InvalidSpender", - "type": "error" - } - ], - "devdoc": { - "details": "Standard ERC-20 Errors Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-20 tokens.", - "errors": { - "ERC20InsufficientAllowance(address,uint256,uint256)": [ - { - "details": "Indicates a failure with the `spender`’s `allowance`. Used in transfers.", - "params": { - "allowance": "Amount of tokens a `spender` is allowed to operate with.", - "needed": "Minimum amount required to perform a transfer.", - "spender": "Address that may be allowed to operate on tokens without being their owner." - } - } - ], - "ERC20InsufficientBalance(address,uint256,uint256)": [ - { - "details": "Indicates an error related to the current `balance` of a `sender`. Used in transfers.", - "params": { - "balance": "Current balance for the interacting account.", - "needed": "Minimum amount required to perform a transfer.", - "sender": "Address whose tokens are being transferred." - } - } - ], - "ERC20InvalidApprover(address)": [ - { - "details": "Indicates a failure with the `approver` of a token to be approved. Used in approvals.", - "params": { - "approver": "Address initiating an approval operation." - } - } - ], - "ERC20InvalidReceiver(address)": [ - { - "details": "Indicates a failure with the token `receiver`. Used in transfers.", - "params": { - "receiver": "Address to which tokens are being transferred." - } - } - ], - "ERC20InvalidSender(address)": [ - { - "details": "Indicates a failure with the token `sender`. Used in transfers.", - "params": { - "sender": "Address whose tokens are being transferred." - } - } - ], - "ERC20InvalidSpender(address)": [ - { - "details": "Indicates a failure with the `spender` to be approved. Used in approvals.", - "params": { - "spender": "Address that may be allowed to operate on tokens without being their owner." - } - } - ] - }, - "kind": "dev", - "methods": {}, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"allowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSpender\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Standard ERC-20 Errors Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-20 tokens.\",\"errors\":{\"ERC20InsufficientAllowance(address,uint256,uint256)\":[{\"details\":\"Indicates a failure with the `spender`\\u2019s `allowance`. Used in transfers.\",\"params\":{\"allowance\":\"Amount of tokens a `spender` is allowed to operate with.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC20InsufficientBalance(address,uint256,uint256)\":[{\"details\":\"Indicates an error related to the current `balance` of a `sender`. Used in transfers.\",\"params\":{\"balance\":\"Current balance for the interacting account.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC20InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC20InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidSpender(address)\":[{\"details\":\"Indicates a failure with the `spender` to be approved. Used in approvals.\",\"params\":{\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":\"IERC20Errors\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (interfaces/draft-IERC6093.sol)\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Standard ERC-20 Errors\\n * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-20 tokens.\\n */\\ninterface IERC20Errors {\\n /**\\n * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.\\n * @param sender Address whose tokens are being transferred.\\n * @param balance Current balance for the interacting account.\\n * @param needed Minimum amount required to perform a transfer.\\n */\\n error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed);\\n\\n /**\\n * @dev Indicates a failure with the token `sender`. Used in transfers.\\n * @param sender Address whose tokens are being transferred.\\n */\\n error ERC20InvalidSender(address sender);\\n\\n /**\\n * @dev Indicates a failure with the token `receiver`. Used in transfers.\\n * @param receiver Address to which tokens are being transferred.\\n */\\n error ERC20InvalidReceiver(address receiver);\\n\\n /**\\n * @dev Indicates a failure with the `spender`\\u2019s `allowance`. Used in transfers.\\n * @param spender Address that may be allowed to operate on tokens without being their owner.\\n * @param allowance Amount of tokens a `spender` is allowed to operate with.\\n * @param needed Minimum amount required to perform a transfer.\\n */\\n error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed);\\n\\n /**\\n * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\\n * @param approver Address initiating an approval operation.\\n */\\n error ERC20InvalidApprover(address approver);\\n\\n /**\\n * @dev Indicates a failure with the `spender` to be approved. Used in approvals.\\n * @param spender Address that may be allowed to operate on tokens without being their owner.\\n */\\n error ERC20InvalidSpender(address spender);\\n}\\n\\n/**\\n * @dev Standard ERC-721 Errors\\n * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-721 tokens.\\n */\\ninterface IERC721Errors {\\n /**\\n * @dev Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in ERC-20.\\n * Used in balance queries.\\n * @param owner Address of the current owner of a token.\\n */\\n error ERC721InvalidOwner(address owner);\\n\\n /**\\n * @dev Indicates a `tokenId` whose `owner` is the zero address.\\n * @param tokenId Identifier number of a token.\\n */\\n error ERC721NonexistentToken(uint256 tokenId);\\n\\n /**\\n * @dev Indicates an error related to the ownership over a particular token. Used in transfers.\\n * @param sender Address whose tokens are being transferred.\\n * @param tokenId Identifier number of a token.\\n * @param owner Address of the current owner of a token.\\n */\\n error ERC721IncorrectOwner(address sender, uint256 tokenId, address owner);\\n\\n /**\\n * @dev Indicates a failure with the token `sender`. Used in transfers.\\n * @param sender Address whose tokens are being transferred.\\n */\\n error ERC721InvalidSender(address sender);\\n\\n /**\\n * @dev Indicates a failure with the token `receiver`. Used in transfers.\\n * @param receiver Address to which tokens are being transferred.\\n */\\n error ERC721InvalidReceiver(address receiver);\\n\\n /**\\n * @dev Indicates a failure with the `operator`\\u2019s approval. Used in transfers.\\n * @param operator Address that may be allowed to operate on tokens without being their owner.\\n * @param tokenId Identifier number of a token.\\n */\\n error ERC721InsufficientApproval(address operator, uint256 tokenId);\\n\\n /**\\n * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\\n * @param approver Address initiating an approval operation.\\n */\\n error ERC721InvalidApprover(address approver);\\n\\n /**\\n * @dev Indicates a failure with the `operator` to be approved. Used in approvals.\\n * @param operator Address that may be allowed to operate on tokens without being their owner.\\n */\\n error ERC721InvalidOperator(address operator);\\n}\\n\\n/**\\n * @dev Standard ERC-1155 Errors\\n * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-1155 tokens.\\n */\\ninterface IERC1155Errors {\\n /**\\n * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.\\n * @param sender Address whose tokens are being transferred.\\n * @param balance Current balance for the interacting account.\\n * @param needed Minimum amount required to perform a transfer.\\n * @param tokenId Identifier number of a token.\\n */\\n error ERC1155InsufficientBalance(address sender, uint256 balance, uint256 needed, uint256 tokenId);\\n\\n /**\\n * @dev Indicates a failure with the token `sender`. Used in transfers.\\n * @param sender Address whose tokens are being transferred.\\n */\\n error ERC1155InvalidSender(address sender);\\n\\n /**\\n * @dev Indicates a failure with the token `receiver`. Used in transfers.\\n * @param receiver Address to which tokens are being transferred.\\n */\\n error ERC1155InvalidReceiver(address receiver);\\n\\n /**\\n * @dev Indicates a failure with the `operator`\\u2019s approval. Used in transfers.\\n * @param operator Address that may be allowed to operate on tokens without being their owner.\\n * @param owner Address of the current owner of a token.\\n */\\n error ERC1155MissingApprovalForAll(address operator, address owner);\\n\\n /**\\n * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\\n * @param approver Address initiating an approval operation.\\n */\\n error ERC1155InvalidApprover(address approver);\\n\\n /**\\n * @dev Indicates a failure with the `operator` to be approved. Used in approvals.\\n * @param operator Address that may be allowed to operate on tokens without being their owner.\\n */\\n error ERC1155InvalidOperator(address operator);\\n\\n /**\\n * @dev Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation.\\n * Used in batch transfers.\\n * @param idsLength Length of the array of token identifiers\\n * @param valuesLength Length of the array of token amounts\\n */\\n error ERC1155InvalidArrayLength(uint256 idsLength, uint256 valuesLength);\\n}\\n\",\"keccak256\":\"0x880da465c203cec76b10d72dbd87c80f387df4102274f23eea1f9c9b0918792b\",\"license\":\"MIT\"}},\"version\":1}", - "storageLayout": { "storage": [], "types": null }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "IERC721Errors": { - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "ERC721IncorrectOwner", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "ERC721InsufficientApproval", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "approver", - "type": "address" - } - ], - "name": "ERC721InvalidApprover", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - } - ], - "name": "ERC721InvalidOperator", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "ERC721InvalidOwner", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "receiver", - "type": "address" - } - ], - "name": "ERC721InvalidReceiver", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "ERC721InvalidSender", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "ERC721NonexistentToken", - "type": "error" - } - ], - "devdoc": { - "details": "Standard ERC-721 Errors Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-721 tokens.", - "errors": { - "ERC721IncorrectOwner(address,uint256,address)": [ - { - "details": "Indicates an error related to the ownership over a particular token. Used in transfers.", - "params": { - "owner": "Address of the current owner of a token.", - "sender": "Address whose tokens are being transferred.", - "tokenId": "Identifier number of a token." - } - } - ], - "ERC721InsufficientApproval(address,uint256)": [ - { - "details": "Indicates a failure with the `operator`’s approval. Used in transfers.", - "params": { - "operator": "Address that may be allowed to operate on tokens without being their owner.", - "tokenId": "Identifier number of a token." - } - } - ], - "ERC721InvalidApprover(address)": [ - { - "details": "Indicates a failure with the `approver` of a token to be approved. Used in approvals.", - "params": { - "approver": "Address initiating an approval operation." - } - } - ], - "ERC721InvalidOperator(address)": [ - { - "details": "Indicates a failure with the `operator` to be approved. Used in approvals.", - "params": { - "operator": "Address that may be allowed to operate on tokens without being their owner." - } - } - ], - "ERC721InvalidOwner(address)": [ - { - "details": "Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in ERC-20. Used in balance queries.", - "params": { - "owner": "Address of the current owner of a token." - } - } - ], - "ERC721InvalidReceiver(address)": [ - { - "details": "Indicates a failure with the token `receiver`. Used in transfers.", - "params": { - "receiver": "Address to which tokens are being transferred." - } - } - ], - "ERC721InvalidSender(address)": [ - { - "details": "Indicates a failure with the token `sender`. Used in transfers.", - "params": { - "sender": "Address whose tokens are being transferred." - } - } - ], - "ERC721NonexistentToken(uint256)": [ - { - "details": "Indicates a `tokenId` whose `owner` is the zero address.", - "params": { "tokenId": "Identifier number of a token." } - } - ] - }, - "kind": "dev", - "methods": {}, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ERC721IncorrectOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ERC721InsufficientApproval\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC721InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"ERC721InvalidOperator\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ERC721InvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC721InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC721InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ERC721NonexistentToken\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Standard ERC-721 Errors Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-721 tokens.\",\"errors\":{\"ERC721IncorrectOwner(address,uint256,address)\":[{\"details\":\"Indicates an error related to the ownership over a particular token. Used in transfers.\",\"params\":{\"owner\":\"Address of the current owner of a token.\",\"sender\":\"Address whose tokens are being transferred.\",\"tokenId\":\"Identifier number of a token.\"}}],\"ERC721InsufficientApproval(address,uint256)\":[{\"details\":\"Indicates a failure with the `operator`\\u2019s approval. Used in transfers.\",\"params\":{\"operator\":\"Address that may be allowed to operate on tokens without being their owner.\",\"tokenId\":\"Identifier number of a token.\"}}],\"ERC721InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC721InvalidOperator(address)\":[{\"details\":\"Indicates a failure with the `operator` to be approved. Used in approvals.\",\"params\":{\"operator\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC721InvalidOwner(address)\":[{\"details\":\"Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in ERC-20. Used in balance queries.\",\"params\":{\"owner\":\"Address of the current owner of a token.\"}}],\"ERC721InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC721InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC721NonexistentToken(uint256)\":[{\"details\":\"Indicates a `tokenId` whose `owner` is the zero address.\",\"params\":{\"tokenId\":\"Identifier number of a token.\"}}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":\"IERC721Errors\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (interfaces/draft-IERC6093.sol)\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Standard ERC-20 Errors\\n * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-20 tokens.\\n */\\ninterface IERC20Errors {\\n /**\\n * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.\\n * @param sender Address whose tokens are being transferred.\\n * @param balance Current balance for the interacting account.\\n * @param needed Minimum amount required to perform a transfer.\\n */\\n error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed);\\n\\n /**\\n * @dev Indicates a failure with the token `sender`. Used in transfers.\\n * @param sender Address whose tokens are being transferred.\\n */\\n error ERC20InvalidSender(address sender);\\n\\n /**\\n * @dev Indicates a failure with the token `receiver`. Used in transfers.\\n * @param receiver Address to which tokens are being transferred.\\n */\\n error ERC20InvalidReceiver(address receiver);\\n\\n /**\\n * @dev Indicates a failure with the `spender`\\u2019s `allowance`. Used in transfers.\\n * @param spender Address that may be allowed to operate on tokens without being their owner.\\n * @param allowance Amount of tokens a `spender` is allowed to operate with.\\n * @param needed Minimum amount required to perform a transfer.\\n */\\n error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed);\\n\\n /**\\n * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\\n * @param approver Address initiating an approval operation.\\n */\\n error ERC20InvalidApprover(address approver);\\n\\n /**\\n * @dev Indicates a failure with the `spender` to be approved. Used in approvals.\\n * @param spender Address that may be allowed to operate on tokens without being their owner.\\n */\\n error ERC20InvalidSpender(address spender);\\n}\\n\\n/**\\n * @dev Standard ERC-721 Errors\\n * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-721 tokens.\\n */\\ninterface IERC721Errors {\\n /**\\n * @dev Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in ERC-20.\\n * Used in balance queries.\\n * @param owner Address of the current owner of a token.\\n */\\n error ERC721InvalidOwner(address owner);\\n\\n /**\\n * @dev Indicates a `tokenId` whose `owner` is the zero address.\\n * @param tokenId Identifier number of a token.\\n */\\n error ERC721NonexistentToken(uint256 tokenId);\\n\\n /**\\n * @dev Indicates an error related to the ownership over a particular token. Used in transfers.\\n * @param sender Address whose tokens are being transferred.\\n * @param tokenId Identifier number of a token.\\n * @param owner Address of the current owner of a token.\\n */\\n error ERC721IncorrectOwner(address sender, uint256 tokenId, address owner);\\n\\n /**\\n * @dev Indicates a failure with the token `sender`. Used in transfers.\\n * @param sender Address whose tokens are being transferred.\\n */\\n error ERC721InvalidSender(address sender);\\n\\n /**\\n * @dev Indicates a failure with the token `receiver`. Used in transfers.\\n * @param receiver Address to which tokens are being transferred.\\n */\\n error ERC721InvalidReceiver(address receiver);\\n\\n /**\\n * @dev Indicates a failure with the `operator`\\u2019s approval. Used in transfers.\\n * @param operator Address that may be allowed to operate on tokens without being their owner.\\n * @param tokenId Identifier number of a token.\\n */\\n error ERC721InsufficientApproval(address operator, uint256 tokenId);\\n\\n /**\\n * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\\n * @param approver Address initiating an approval operation.\\n */\\n error ERC721InvalidApprover(address approver);\\n\\n /**\\n * @dev Indicates a failure with the `operator` to be approved. Used in approvals.\\n * @param operator Address that may be allowed to operate on tokens without being their owner.\\n */\\n error ERC721InvalidOperator(address operator);\\n}\\n\\n/**\\n * @dev Standard ERC-1155 Errors\\n * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-1155 tokens.\\n */\\ninterface IERC1155Errors {\\n /**\\n * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.\\n * @param sender Address whose tokens are being transferred.\\n * @param balance Current balance for the interacting account.\\n * @param needed Minimum amount required to perform a transfer.\\n * @param tokenId Identifier number of a token.\\n */\\n error ERC1155InsufficientBalance(address sender, uint256 balance, uint256 needed, uint256 tokenId);\\n\\n /**\\n * @dev Indicates a failure with the token `sender`. Used in transfers.\\n * @param sender Address whose tokens are being transferred.\\n */\\n error ERC1155InvalidSender(address sender);\\n\\n /**\\n * @dev Indicates a failure with the token `receiver`. Used in transfers.\\n * @param receiver Address to which tokens are being transferred.\\n */\\n error ERC1155InvalidReceiver(address receiver);\\n\\n /**\\n * @dev Indicates a failure with the `operator`\\u2019s approval. Used in transfers.\\n * @param operator Address that may be allowed to operate on tokens without being their owner.\\n * @param owner Address of the current owner of a token.\\n */\\n error ERC1155MissingApprovalForAll(address operator, address owner);\\n\\n /**\\n * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\\n * @param approver Address initiating an approval operation.\\n */\\n error ERC1155InvalidApprover(address approver);\\n\\n /**\\n * @dev Indicates a failure with the `operator` to be approved. Used in approvals.\\n * @param operator Address that may be allowed to operate on tokens without being their owner.\\n */\\n error ERC1155InvalidOperator(address operator);\\n\\n /**\\n * @dev Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation.\\n * Used in batch transfers.\\n * @param idsLength Length of the array of token identifiers\\n * @param valuesLength Length of the array of token amounts\\n */\\n error ERC1155InvalidArrayLength(uint256 idsLength, uint256 valuesLength);\\n}\\n\",\"keccak256\":\"0x880da465c203cec76b10d72dbd87c80f387df4102274f23eea1f9c9b0918792b\",\"license\":\"MIT\"}},\"version\":1}", - "storageLayout": { "storage": [], "types": null }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - } - }, - "@openzeppelin/contracts/token/ERC20/ERC20.sol": { - "ERC20": { - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "allowance", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "needed", - "type": "uint256" - } - ], - "name": "ERC20InsufficientAllowance", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "balance", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "needed", - "type": "uint256" - } - ], - "name": "ERC20InsufficientBalance", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "approver", - "type": "address" - } - ], - "name": "ERC20InvalidApprover", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "receiver", - "type": "address" - } - ], - "name": "ERC20InvalidReceiver", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "ERC20InvalidSender", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - } - ], - "name": "ERC20InvalidSpender", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "spender", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { "internalType": "bool", "name": "", "type": "bool" } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "decimals", - "outputs": [ - { "internalType": "uint8", "name": "", "type": "uint8" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [ - { "internalType": "string", "name": "", "type": "string" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "outputs": [ - { "internalType": "string", "name": "", "type": "string" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalSupply", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "to", "type": "address" }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { "internalType": "bool", "name": "", "type": "bool" } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { "internalType": "address", "name": "to", "type": "address" }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { "internalType": "bool", "name": "", "type": "bool" } - ], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "devdoc": { - "details": "Implementation of the {IERC20} interface. This implementation is agnostic to the way tokens are created. This means that a supply mechanism has to be added in a derived contract using {_mint}. TIP: For a detailed writeup see our guide https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How to implement supply mechanisms]. The default value of {decimals} is 18. To change this, you should override this function so it returns a different value. We have followed general OpenZeppelin Contracts guidelines: functions revert instead returning `false` on failure. This behavior is nonetheless conventional and does not conflict with the expectations of ERC-20 applications.", - "errors": { - "ERC20InsufficientAllowance(address,uint256,uint256)": [ - { - "details": "Indicates a failure with the `spender`’s `allowance`. Used in transfers.", - "params": { - "allowance": "Amount of tokens a `spender` is allowed to operate with.", - "needed": "Minimum amount required to perform a transfer.", - "spender": "Address that may be allowed to operate on tokens without being their owner." - } - } - ], - "ERC20InsufficientBalance(address,uint256,uint256)": [ - { - "details": "Indicates an error related to the current `balance` of a `sender`. Used in transfers.", - "params": { - "balance": "Current balance for the interacting account.", - "needed": "Minimum amount required to perform a transfer.", - "sender": "Address whose tokens are being transferred." - } - } - ], - "ERC20InvalidApprover(address)": [ - { - "details": "Indicates a failure with the `approver` of a token to be approved. Used in approvals.", - "params": { - "approver": "Address initiating an approval operation." - } - } - ], - "ERC20InvalidReceiver(address)": [ - { - "details": "Indicates a failure with the token `receiver`. Used in transfers.", - "params": { - "receiver": "Address to which tokens are being transferred." - } - } - ], - "ERC20InvalidSender(address)": [ - { - "details": "Indicates a failure with the token `sender`. Used in transfers.", - "params": { - "sender": "Address whose tokens are being transferred." - } - } - ], - "ERC20InvalidSpender(address)": [ - { - "details": "Indicates a failure with the `spender` to be approved. Used in approvals.", - "params": { - "spender": "Address that may be allowed to operate on tokens without being their owner." - } - } - ] - }, - "events": { - "Approval(address,address,uint256)": { - "details": "Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance." - }, - "Transfer(address,address,uint256)": { - "details": "Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero." - } - }, - "kind": "dev", - "methods": { - "allowance(address,address)": { - "details": "See {IERC20-allowance}." - }, - "approve(address,uint256)": { - "details": "See {IERC20-approve}. NOTE: If `value` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address." - }, - "balanceOf(address)": { "details": "See {IERC20-balanceOf}." }, - "constructor": { - "details": "Sets the values for {name} and {symbol}. All two of these values are immutable: they can only be set once during construction." - }, - "decimals()": { - "details": "Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the default value returned by this function, unless it's overridden. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}." - }, - "name()": { "details": "Returns the name of the token." }, - "symbol()": { - "details": "Returns the symbol of the token, usually a shorter version of the name." - }, - "totalSupply()": { "details": "See {IERC20-totalSupply}." }, - "transfer(address,uint256)": { - "details": "See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `value`." - }, - "transferFrom(address,address,uint256)": { - "details": "See {IERC20-transferFrom}. Skips emitting an {Approval} event indicating an allowance update. This is not required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve]. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `value`. - the caller must have allowance for ``from``'s tokens of at least `value`." - } - }, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": { - "allowance(address,address)": "dd62ed3e", - "approve(address,uint256)": "095ea7b3", - "balanceOf(address)": "70a08231", - "decimals()": "313ce567", - "name()": "06fdde03", - "symbol()": "95d89b41", - "totalSupply()": "18160ddd", - "transfer(address,uint256)": "a9059cbb", - "transferFrom(address,address,uint256)": "23b872dd" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"allowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSpender\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Implementation of the {IERC20} interface. This implementation is agnostic to the way tokens are created. This means that a supply mechanism has to be added in a derived contract using {_mint}. TIP: For a detailed writeup see our guide https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How to implement supply mechanisms]. The default value of {decimals} is 18. To change this, you should override this function so it returns a different value. We have followed general OpenZeppelin Contracts guidelines: functions revert instead returning `false` on failure. This behavior is nonetheless conventional and does not conflict with the expectations of ERC-20 applications.\",\"errors\":{\"ERC20InsufficientAllowance(address,uint256,uint256)\":[{\"details\":\"Indicates a failure with the `spender`\\u2019s `allowance`. Used in transfers.\",\"params\":{\"allowance\":\"Amount of tokens a `spender` is allowed to operate with.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC20InsufficientBalance(address,uint256,uint256)\":[{\"details\":\"Indicates an error related to the current `balance` of a `sender`. Used in transfers.\",\"params\":{\"balance\":\"Current balance for the interacting account.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC20InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC20InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidSpender(address)\":[{\"details\":\"Indicates a failure with the `spender` to be approved. Used in approvals.\",\"params\":{\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}]},\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"See {IERC20-allowance}.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. NOTE: If `value` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"See {IERC20-balanceOf}.\"},\"constructor\":{\"details\":\"Sets the values for {name} and {symbol}. All two of these values are immutable: they can only be set once during construction.\"},\"decimals()\":{\"details\":\"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the default value returned by this function, unless it's overridden. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"totalSupply()\":{\"details\":\"See {IERC20-totalSupply}.\"},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `value`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC20-transferFrom}. Skips emitting an {Approval} event indicating an allowance update. This is not required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve]. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `value`. - the caller must have allowance for ``from``'s tokens of at least `value`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC20/ERC20.sol\":\"ERC20\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (interfaces/draft-IERC6093.sol)\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Standard ERC-20 Errors\\n * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-20 tokens.\\n */\\ninterface IERC20Errors {\\n /**\\n * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.\\n * @param sender Address whose tokens are being transferred.\\n * @param balance Current balance for the interacting account.\\n * @param needed Minimum amount required to perform a transfer.\\n */\\n error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed);\\n\\n /**\\n * @dev Indicates a failure with the token `sender`. Used in transfers.\\n * @param sender Address whose tokens are being transferred.\\n */\\n error ERC20InvalidSender(address sender);\\n\\n /**\\n * @dev Indicates a failure with the token `receiver`. Used in transfers.\\n * @param receiver Address to which tokens are being transferred.\\n */\\n error ERC20InvalidReceiver(address receiver);\\n\\n /**\\n * @dev Indicates a failure with the `spender`\\u2019s `allowance`. Used in transfers.\\n * @param spender Address that may be allowed to operate on tokens without being their owner.\\n * @param allowance Amount of tokens a `spender` is allowed to operate with.\\n * @param needed Minimum amount required to perform a transfer.\\n */\\n error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed);\\n\\n /**\\n * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\\n * @param approver Address initiating an approval operation.\\n */\\n error ERC20InvalidApprover(address approver);\\n\\n /**\\n * @dev Indicates a failure with the `spender` to be approved. Used in approvals.\\n * @param spender Address that may be allowed to operate on tokens without being their owner.\\n */\\n error ERC20InvalidSpender(address spender);\\n}\\n\\n/**\\n * @dev Standard ERC-721 Errors\\n * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-721 tokens.\\n */\\ninterface IERC721Errors {\\n /**\\n * @dev Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in ERC-20.\\n * Used in balance queries.\\n * @param owner Address of the current owner of a token.\\n */\\n error ERC721InvalidOwner(address owner);\\n\\n /**\\n * @dev Indicates a `tokenId` whose `owner` is the zero address.\\n * @param tokenId Identifier number of a token.\\n */\\n error ERC721NonexistentToken(uint256 tokenId);\\n\\n /**\\n * @dev Indicates an error related to the ownership over a particular token. Used in transfers.\\n * @param sender Address whose tokens are being transferred.\\n * @param tokenId Identifier number of a token.\\n * @param owner Address of the current owner of a token.\\n */\\n error ERC721IncorrectOwner(address sender, uint256 tokenId, address owner);\\n\\n /**\\n * @dev Indicates a failure with the token `sender`. Used in transfers.\\n * @param sender Address whose tokens are being transferred.\\n */\\n error ERC721InvalidSender(address sender);\\n\\n /**\\n * @dev Indicates a failure with the token `receiver`. Used in transfers.\\n * @param receiver Address to which tokens are being transferred.\\n */\\n error ERC721InvalidReceiver(address receiver);\\n\\n /**\\n * @dev Indicates a failure with the `operator`\\u2019s approval. Used in transfers.\\n * @param operator Address that may be allowed to operate on tokens without being their owner.\\n * @param tokenId Identifier number of a token.\\n */\\n error ERC721InsufficientApproval(address operator, uint256 tokenId);\\n\\n /**\\n * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\\n * @param approver Address initiating an approval operation.\\n */\\n error ERC721InvalidApprover(address approver);\\n\\n /**\\n * @dev Indicates a failure with the `operator` to be approved. Used in approvals.\\n * @param operator Address that may be allowed to operate on tokens without being their owner.\\n */\\n error ERC721InvalidOperator(address operator);\\n}\\n\\n/**\\n * @dev Standard ERC-1155 Errors\\n * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-1155 tokens.\\n */\\ninterface IERC1155Errors {\\n /**\\n * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.\\n * @param sender Address whose tokens are being transferred.\\n * @param balance Current balance for the interacting account.\\n * @param needed Minimum amount required to perform a transfer.\\n * @param tokenId Identifier number of a token.\\n */\\n error ERC1155InsufficientBalance(address sender, uint256 balance, uint256 needed, uint256 tokenId);\\n\\n /**\\n * @dev Indicates a failure with the token `sender`. Used in transfers.\\n * @param sender Address whose tokens are being transferred.\\n */\\n error ERC1155InvalidSender(address sender);\\n\\n /**\\n * @dev Indicates a failure with the token `receiver`. Used in transfers.\\n * @param receiver Address to which tokens are being transferred.\\n */\\n error ERC1155InvalidReceiver(address receiver);\\n\\n /**\\n * @dev Indicates a failure with the `operator`\\u2019s approval. Used in transfers.\\n * @param operator Address that may be allowed to operate on tokens without being their owner.\\n * @param owner Address of the current owner of a token.\\n */\\n error ERC1155MissingApprovalForAll(address operator, address owner);\\n\\n /**\\n * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\\n * @param approver Address initiating an approval operation.\\n */\\n error ERC1155InvalidApprover(address approver);\\n\\n /**\\n * @dev Indicates a failure with the `operator` to be approved. Used in approvals.\\n * @param operator Address that may be allowed to operate on tokens without being their owner.\\n */\\n error ERC1155InvalidOperator(address operator);\\n\\n /**\\n * @dev Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation.\\n * Used in batch transfers.\\n * @param idsLength Length of the array of token identifiers\\n * @param valuesLength Length of the array of token amounts\\n */\\n error ERC1155InvalidArrayLength(uint256 idsLength, uint256 valuesLength);\\n}\\n\",\"keccak256\":\"0x880da465c203cec76b10d72dbd87c80f387df4102274f23eea1f9c9b0918792b\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/ERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/ERC20.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {IERC20} from \\\"./IERC20.sol\\\";\\nimport {IERC20Metadata} from \\\"./extensions/IERC20Metadata.sol\\\";\\nimport {Context} from \\\"../../utils/Context.sol\\\";\\nimport {IERC20Errors} from \\\"../../interfaces/draft-IERC6093.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC20} interface.\\n *\\n * This implementation is agnostic to the way tokens are created. This means\\n * that a supply mechanism has to be added in a derived contract using {_mint}.\\n *\\n * TIP: For a detailed writeup see our guide\\n * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\\n * to implement supply mechanisms].\\n *\\n * The default value of {decimals} is 18. To change this, you should override\\n * this function so it returns a different value.\\n *\\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\\n * instead returning `false` on failure. This behavior is nonetheless\\n * conventional and does not conflict with the expectations of ERC-20\\n * applications.\\n */\\nabstract contract ERC20 is Context, IERC20, IERC20Metadata, IERC20Errors {\\n mapping(address account => uint256) private _balances;\\n\\n mapping(address account => mapping(address spender => uint256)) private _allowances;\\n\\n uint256 private _totalSupply;\\n\\n string private _name;\\n string private _symbol;\\n\\n /**\\n * @dev Sets the values for {name} and {symbol}.\\n *\\n * All two of these values are immutable: they can only be set once during\\n * construction.\\n */\\n constructor(string memory name_, string memory symbol_) {\\n _name = name_;\\n _symbol = symbol_;\\n }\\n\\n /**\\n * @dev Returns the name of the token.\\n */\\n function name() public view virtual returns (string memory) {\\n return _name;\\n }\\n\\n /**\\n * @dev Returns the symbol of the token, usually a shorter version of the\\n * name.\\n */\\n function symbol() public view virtual returns (string memory) {\\n return _symbol;\\n }\\n\\n /**\\n * @dev Returns the number of decimals used to get its user representation.\\n * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n * be displayed to a user as `5.05` (`505 / 10 ** 2`).\\n *\\n * Tokens usually opt for a value of 18, imitating the relationship between\\n * Ether and Wei. This is the default value returned by this function, unless\\n * it's overridden.\\n *\\n * NOTE: This information is only used for _display_ purposes: it in\\n * no way affects any of the arithmetic of the contract, including\\n * {IERC20-balanceOf} and {IERC20-transfer}.\\n */\\n function decimals() public view virtual returns (uint8) {\\n return 18;\\n }\\n\\n /**\\n * @dev See {IERC20-totalSupply}.\\n */\\n function totalSupply() public view virtual returns (uint256) {\\n return _totalSupply;\\n }\\n\\n /**\\n * @dev See {IERC20-balanceOf}.\\n */\\n function balanceOf(address account) public view virtual returns (uint256) {\\n return _balances[account];\\n }\\n\\n /**\\n * @dev See {IERC20-transfer}.\\n *\\n * Requirements:\\n *\\n * - `to` cannot be the zero address.\\n * - the caller must have a balance of at least `value`.\\n */\\n function transfer(address to, uint256 value) public virtual returns (bool) {\\n address owner = _msgSender();\\n _transfer(owner, to, value);\\n return true;\\n }\\n\\n /**\\n * @dev See {IERC20-allowance}.\\n */\\n function allowance(address owner, address spender) public view virtual returns (uint256) {\\n return _allowances[owner][spender];\\n }\\n\\n /**\\n * @dev See {IERC20-approve}.\\n *\\n * NOTE: If `value` is the maximum `uint256`, the allowance is not updated on\\n * `transferFrom`. This is semantically equivalent to an infinite approval.\\n *\\n * Requirements:\\n *\\n * - `spender` cannot be the zero address.\\n */\\n function approve(address spender, uint256 value) public virtual returns (bool) {\\n address owner = _msgSender();\\n _approve(owner, spender, value);\\n return true;\\n }\\n\\n /**\\n * @dev See {IERC20-transferFrom}.\\n *\\n * Skips emitting an {Approval} event indicating an allowance update. This is not\\n * required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve].\\n *\\n * NOTE: Does not update the allowance if the current allowance\\n * is the maximum `uint256`.\\n *\\n * Requirements:\\n *\\n * - `from` and `to` cannot be the zero address.\\n * - `from` must have a balance of at least `value`.\\n * - the caller must have allowance for ``from``'s tokens of at least\\n * `value`.\\n */\\n function transferFrom(address from, address to, uint256 value) public virtual returns (bool) {\\n address spender = _msgSender();\\n _spendAllowance(from, spender, value);\\n _transfer(from, to, value);\\n return true;\\n }\\n\\n /**\\n * @dev Moves a `value` amount of tokens from `from` to `to`.\\n *\\n * This internal function is equivalent to {transfer}, and can be used to\\n * e.g. implement automatic token fees, slashing mechanisms, etc.\\n *\\n * Emits a {Transfer} event.\\n *\\n * NOTE: This function is not virtual, {_update} should be overridden instead.\\n */\\n function _transfer(address from, address to, uint256 value) internal {\\n if (from == address(0)) {\\n revert ERC20InvalidSender(address(0));\\n }\\n if (to == address(0)) {\\n revert ERC20InvalidReceiver(address(0));\\n }\\n _update(from, to, value);\\n }\\n\\n /**\\n * @dev Transfers a `value` amount of tokens from `from` to `to`, or alternatively mints (or burns) if `from`\\n * (or `to`) is the zero address. All customizations to transfers, mints, and burns should be done by overriding\\n * this function.\\n *\\n * Emits a {Transfer} event.\\n */\\n function _update(address from, address to, uint256 value) internal virtual {\\n if (from == address(0)) {\\n // Overflow check required: The rest of the code assumes that totalSupply never overflows\\n _totalSupply += value;\\n } else {\\n uint256 fromBalance = _balances[from];\\n if (fromBalance < value) {\\n revert ERC20InsufficientBalance(from, fromBalance, value);\\n }\\n unchecked {\\n // Overflow not possible: value <= fromBalance <= totalSupply.\\n _balances[from] = fromBalance - value;\\n }\\n }\\n\\n if (to == address(0)) {\\n unchecked {\\n // Overflow not possible: value <= totalSupply or value <= fromBalance <= totalSupply.\\n _totalSupply -= value;\\n }\\n } else {\\n unchecked {\\n // Overflow not possible: balance + value is at most totalSupply, which we know fits into a uint256.\\n _balances[to] += value;\\n }\\n }\\n\\n emit Transfer(from, to, value);\\n }\\n\\n /**\\n * @dev Creates a `value` amount of tokens and assigns them to `account`, by transferring it from address(0).\\n * Relies on the `_update` mechanism\\n *\\n * Emits a {Transfer} event with `from` set to the zero address.\\n *\\n * NOTE: This function is not virtual, {_update} should be overridden instead.\\n */\\n function _mint(address account, uint256 value) internal {\\n if (account == address(0)) {\\n revert ERC20InvalidReceiver(address(0));\\n }\\n _update(address(0), account, value);\\n }\\n\\n /**\\n * @dev Destroys a `value` amount of tokens from `account`, lowering the total supply.\\n * Relies on the `_update` mechanism.\\n *\\n * Emits a {Transfer} event with `to` set to the zero address.\\n *\\n * NOTE: This function is not virtual, {_update} should be overridden instead\\n */\\n function _burn(address account, uint256 value) internal {\\n if (account == address(0)) {\\n revert ERC20InvalidSender(address(0));\\n }\\n _update(account, address(0), value);\\n }\\n\\n /**\\n * @dev Sets `value` as the allowance of `spender` over the `owner` s tokens.\\n *\\n * This internal function is equivalent to `approve`, and can be used to\\n * e.g. set automatic allowances for certain subsystems, etc.\\n *\\n * Emits an {Approval} event.\\n *\\n * Requirements:\\n *\\n * - `owner` cannot be the zero address.\\n * - `spender` cannot be the zero address.\\n *\\n * Overrides to this logic should be done to the variant with an additional `bool emitEvent` argument.\\n */\\n function _approve(address owner, address spender, uint256 value) internal {\\n _approve(owner, spender, value, true);\\n }\\n\\n /**\\n * @dev Variant of {_approve} with an optional flag to enable or disable the {Approval} event.\\n *\\n * By default (when calling {_approve}) the flag is set to true. On the other hand, approval changes made by\\n * `_spendAllowance` during the `transferFrom` operation set the flag to false. This saves gas by not emitting any\\n * `Approval` event during `transferFrom` operations.\\n *\\n * Anyone who wishes to continue emitting `Approval` events on the`transferFrom` operation can force the flag to\\n * true using the following override:\\n *\\n * ```solidity\\n * function _approve(address owner, address spender, uint256 value, bool) internal virtual override {\\n * super._approve(owner, spender, value, true);\\n * }\\n * ```\\n *\\n * Requirements are the same as {_approve}.\\n */\\n function _approve(address owner, address spender, uint256 value, bool emitEvent) internal virtual {\\n if (owner == address(0)) {\\n revert ERC20InvalidApprover(address(0));\\n }\\n if (spender == address(0)) {\\n revert ERC20InvalidSpender(address(0));\\n }\\n _allowances[owner][spender] = value;\\n if (emitEvent) {\\n emit Approval(owner, spender, value);\\n }\\n }\\n\\n /**\\n * @dev Updates `owner` s allowance for `spender` based on spent `value`.\\n *\\n * Does not update the allowance value in case of infinite allowance.\\n * Revert if not enough allowance is available.\\n *\\n * Does not emit an {Approval} event.\\n */\\n function _spendAllowance(address owner, address spender, uint256 value) internal virtual {\\n uint256 currentAllowance = allowance(owner, spender);\\n if (currentAllowance != type(uint256).max) {\\n if (currentAllowance < value) {\\n revert ERC20InsufficientAllowance(spender, currentAllowance, value);\\n }\\n unchecked {\\n _approve(owner, spender, currentAllowance - value, false);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0xbf61ab2ae1d575a17ea58fbb99ca232baddcc4e0eeea180e84cbc74b0c348b31\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Interface of the ERC-20 standard as defined in the ERC.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the value of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the value of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\\n * caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from `from` to `to` using the\\n * allowance mechanism. `value` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 value) external returns (bool);\\n}\\n\",\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {IERC20} from \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC-20 standard.\\n */\\ninterface IERC20Metadata is IERC20 {\\n /**\\n * @dev Returns the name of the token.\\n */\\n function name() external view returns (string memory);\\n\\n /**\\n * @dev Returns the symbol of the token.\\n */\\n function symbol() external view returns (string memory);\\n\\n /**\\n * @dev Returns the decimals places of the token.\\n */\\n function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x70f2f713b13b7ce4610bcd0ac9fec0f3cc43693b043abcb8dc40a42a726eb330\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n\\n function _contextSuffixLength() internal view virtual returns (uint256) {\\n return 0;\\n }\\n}\\n\",\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\"}},\"version\":1}", - "storageLayout": { - "storage": [ - { - "astId": 4226, - "contract": "@openzeppelin/contracts/token/ERC20/ERC20.sol:ERC20", - "label": "_balances", - "offset": 0, - "slot": "0", - "type": "t_mapping(t_address,t_uint256)" - }, - { - "astId": 4232, - "contract": "@openzeppelin/contracts/token/ERC20/ERC20.sol:ERC20", - "label": "_allowances", - "offset": 0, - "slot": "1", - "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))" - }, - { - "astId": 4234, - "contract": "@openzeppelin/contracts/token/ERC20/ERC20.sol:ERC20", - "label": "_totalSupply", - "offset": 0, - "slot": "2", - "type": "t_uint256" - }, - { - "astId": 4236, - "contract": "@openzeppelin/contracts/token/ERC20/ERC20.sol:ERC20", - "label": "_name", - "offset": 0, - "slot": "3", - "type": "t_string_storage" - }, - { - "astId": 4238, - "contract": "@openzeppelin/contracts/token/ERC20/ERC20.sol:ERC20", - "label": "_symbol", - "offset": 0, - "slot": "4", - "type": "t_string_storage" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_mapping(t_address,t_mapping(t_address,t_uint256))": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => mapping(address => uint256))", - "numberOfBytes": "32", - "value": "t_mapping(t_address,t_uint256)" - }, - "t_mapping(t_address,t_uint256)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => uint256)", - "numberOfBytes": "32", - "value": "t_uint256" - }, - "t_string_storage": { - "encoding": "bytes", - "label": "string", - "numberOfBytes": "32" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - } - } - }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - } - }, - "@openzeppelin/contracts/token/ERC20/IERC20.sol": { - "IERC20": { - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "spender", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { "internalType": "bool", "name": "", "type": "bool" } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalSupply", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "to", "type": "address" }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { "internalType": "bool", "name": "", "type": "bool" } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { "internalType": "address", "name": "to", "type": "address" }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { "internalType": "bool", "name": "", "type": "bool" } - ], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "devdoc": { - "details": "Interface of the ERC-20 standard as defined in the ERC.", - "events": { - "Approval(address,address,uint256)": { - "details": "Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance." - }, - "Transfer(address,address,uint256)": { - "details": "Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero." - } - }, - "kind": "dev", - "methods": { - "allowance(address,address)": { - "details": "Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called." - }, - "approve(address,uint256)": { - "details": "Sets a `value` amount of tokens as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event." - }, - "balanceOf(address)": { - "details": "Returns the value of tokens owned by `account`." - }, - "totalSupply()": { - "details": "Returns the value of tokens in existence." - }, - "transfer(address,uint256)": { - "details": "Moves a `value` amount of tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event." - }, - "transferFrom(address,address,uint256)": { - "details": "Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism. `value` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event." - } - }, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": { - "allowance(address,address)": "dd62ed3e", - "approve(address,uint256)": "095ea7b3", - "balanceOf(address)": "70a08231", - "totalSupply()": "18160ddd", - "transfer(address,uint256)": "a9059cbb", - "transferFrom(address,address,uint256)": "23b872dd" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface of the ERC-20 standard as defined in the ERC.\",\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called.\"},\"approve(address,uint256)\":{\"details\":\"Sets a `value` amount of tokens as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event.\"},\"balanceOf(address)\":{\"details\":\"Returns the value of tokens owned by `account`.\"},\"totalSupply()\":{\"details\":\"Returns the value of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism. `value` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":\"IERC20\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Interface of the ERC-20 standard as defined in the ERC.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the value of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the value of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\\n * caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from `from` to `to` using the\\n * allowance mechanism. `value` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 value) external returns (bool);\\n}\\n\",\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\"}},\"version\":1}", - "storageLayout": { "storage": [], "types": null }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - } - }, - "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol": { - "IERC20Metadata": { - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "spender", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { "internalType": "bool", "name": "", "type": "bool" } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "decimals", - "outputs": [ - { "internalType": "uint8", "name": "", "type": "uint8" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [ - { "internalType": "string", "name": "", "type": "string" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "outputs": [ - { "internalType": "string", "name": "", "type": "string" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalSupply", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "to", "type": "address" }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { "internalType": "bool", "name": "", "type": "bool" } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { "internalType": "address", "name": "to", "type": "address" }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { "internalType": "bool", "name": "", "type": "bool" } - ], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "devdoc": { - "details": "Interface for the optional metadata functions from the ERC-20 standard.", - "events": { - "Approval(address,address,uint256)": { - "details": "Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance." - }, - "Transfer(address,address,uint256)": { - "details": "Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero." - } - }, - "kind": "dev", - "methods": { - "allowance(address,address)": { - "details": "Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called." - }, - "approve(address,uint256)": { - "details": "Sets a `value` amount of tokens as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event." - }, - "balanceOf(address)": { - "details": "Returns the value of tokens owned by `account`." - }, - "decimals()": { - "details": "Returns the decimals places of the token." - }, - "name()": { "details": "Returns the name of the token." }, - "symbol()": { "details": "Returns the symbol of the token." }, - "totalSupply()": { - "details": "Returns the value of tokens in existence." - }, - "transfer(address,uint256)": { - "details": "Moves a `value` amount of tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event." - }, - "transferFrom(address,address,uint256)": { - "details": "Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism. `value` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event." - } - }, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": { - "allowance(address,address)": "dd62ed3e", - "approve(address,uint256)": "095ea7b3", - "balanceOf(address)": "70a08231", - "decimals()": "313ce567", - "name()": "06fdde03", - "symbol()": "95d89b41", - "totalSupply()": "18160ddd", - "transfer(address,uint256)": "a9059cbb", - "transferFrom(address,address,uint256)": "23b872dd" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface for the optional metadata functions from the ERC-20 standard.\",\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called.\"},\"approve(address,uint256)\":{\"details\":\"Sets a `value` amount of tokens as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event.\"},\"balanceOf(address)\":{\"details\":\"Returns the value of tokens owned by `account`.\"},\"decimals()\":{\"details\":\"Returns the decimals places of the token.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token.\"},\"totalSupply()\":{\"details\":\"Returns the value of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism. `value` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":\"IERC20Metadata\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Interface of the ERC-20 standard as defined in the ERC.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the value of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the value of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\\n * caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from `from` to `to` using the\\n * allowance mechanism. `value` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 value) external returns (bool);\\n}\\n\",\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {IERC20} from \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC-20 standard.\\n */\\ninterface IERC20Metadata is IERC20 {\\n /**\\n * @dev Returns the name of the token.\\n */\\n function name() external view returns (string memory);\\n\\n /**\\n * @dev Returns the symbol of the token.\\n */\\n function symbol() external view returns (string memory);\\n\\n /**\\n * @dev Returns the decimals places of the token.\\n */\\n function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x70f2f713b13b7ce4610bcd0ac9fec0f3cc43693b043abcb8dc40a42a726eb330\",\"license\":\"MIT\"}},\"version\":1}", - "storageLayout": { "storage": [], "types": null }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - } - }, - "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol": { - "SafeERC20": { - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "currentAllowance", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "requestedDecrease", - "type": "uint256" - } - ], - "name": "SafeERC20FailedDecreaseAllowance", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - } - ], - "name": "SafeERC20FailedOperation", - "type": "error" - } - ], - "devdoc": { - "details": "Wrappers around ERC-20 operations that throw on failure (when the token contract returns false). Tokens that return no value (and instead revert or throw on failure) are also supported, non-reverting calls are assumed to be successful. To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, which allows you to call the safe operations as `token.safeTransfer(...)`, etc.", - "errors": { - "SafeERC20FailedDecreaseAllowance(address,uint256,uint256)": [ - { "details": "Indicates a failed `decreaseAllowance` request." } - ], - "SafeERC20FailedOperation(address)": [ - { "details": "An operation with an ERC-20 token failed." } - ] - }, - "kind": "dev", - "methods": {}, - "title": "SafeERC20", - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220e2d4aa3c317780aad14de5fcb5eadb5c2ddf8d18d1fba62ba142d5d8b266f7b664736f6c63430008160033", - "opcodes": "PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE2 0xD4 0xAA EXTCODECOPY BALANCE PUSH24 0x80AAD14DE5FCB5EADB5C2DDF8D18D1FBA62BA142D5D8B266 0xF7 0xB6 PUSH5 0x736F6C6343 STOP ADDMOD AND STOP CALLER ", - "sourceMap": "750:8692:36:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;750:8692:36;;;;;;;;;;;;;;;;;" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220e2d4aa3c317780aad14de5fcb5eadb5c2ddf8d18d1fba62ba142d5d8b266f7b664736f6c63430008160033", - "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE2 0xD4 0xAA EXTCODECOPY BALANCE PUSH24 0x80AAD14DE5FCB5EADB5C2DDF8D18D1FBA62BA142D5D8B266 0xF7 0xB6 PUSH5 0x736F6C6343 STOP ADDMOD AND STOP CALLER ", - "sourceMap": "750:8692:36:-:0;;;;;;;;" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "17200", - "executionCost": "103", - "totalCost": "17303" - }, - "internal": { - "_callOptionalReturn(contract IERC20,bytes memory)": "infinite", - "_callOptionalReturnBool(contract IERC20,bytes memory)": "infinite", - "approveAndCallRelaxed(contract IERC1363,address,uint256,bytes memory)": "infinite", - "forceApprove(contract IERC20,address,uint256)": "infinite", - "safeDecreaseAllowance(contract IERC20,address,uint256)": "infinite", - "safeIncreaseAllowance(contract IERC20,address,uint256)": "infinite", - "safeTransfer(contract IERC20,address,uint256)": "infinite", - "safeTransferFrom(contract IERC20,address,address,uint256)": "infinite", - "transferAndCallRelaxed(contract IERC1363,address,uint256,bytes memory)": "infinite", - "transferFromAndCallRelaxed(contract IERC1363,address,address,uint256,bytes memory)": "infinite" - } - }, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"currentAllowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requestedDecrease\",\"type\":\"uint256\"}],\"name\":\"SafeERC20FailedDecreaseAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Wrappers around ERC-20 operations that throw on failure (when the token contract returns false). Tokens that return no value (and instead revert or throw on failure) are also supported, non-reverting calls are assumed to be successful. To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\",\"errors\":{\"SafeERC20FailedDecreaseAllowance(address,uint256,uint256)\":[{\"details\":\"Indicates a failed `decreaseAllowance` request.\"}],\"SafeERC20FailedOperation(address)\":[{\"details\":\"An operation with an ERC-20 token failed.\"}]},\"kind\":\"dev\",\"methods\":{},\"title\":\"SafeERC20\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":\"SafeERC20\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/interfaces/IERC1363.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (interfaces/IERC1363.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {IERC20} from \\\"./IERC20.sol\\\";\\nimport {IERC165} from \\\"./IERC165.sol\\\";\\n\\n/**\\n * @title IERC1363\\n * @dev Interface of the ERC-1363 standard as defined in the https://eips.ethereum.org/EIPS/eip-1363[ERC-1363].\\n *\\n * Defines an extension interface for ERC-20 tokens that supports executing code on a recipient contract\\n * after `transfer` or `transferFrom`, or code on a spender contract after `approve`, in a single transaction.\\n */\\ninterface IERC1363 is IERC20, IERC165 {\\n /*\\n * Note: the ERC-165 identifier for this interface is 0xb0202a11.\\n * 0xb0202a11 ===\\n * bytes4(keccak256('transferAndCall(address,uint256)')) ^\\n * bytes4(keccak256('transferAndCall(address,uint256,bytes)')) ^\\n * bytes4(keccak256('transferFromAndCall(address,address,uint256)')) ^\\n * bytes4(keccak256('transferFromAndCall(address,address,uint256,bytes)')) ^\\n * bytes4(keccak256('approveAndCall(address,uint256)')) ^\\n * bytes4(keccak256('approveAndCall(address,uint256,bytes)'))\\n */\\n\\n /**\\n * @dev Moves a `value` amount of tokens from the caller's account to `to`\\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\\n * @param to The address which you want to transfer to.\\n * @param value The amount of tokens to be transferred.\\n * @return A boolean value indicating whether the operation succeeded unless throwing.\\n */\\n function transferAndCall(address to, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from the caller's account to `to`\\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\\n * @param to The address which you want to transfer to.\\n * @param value The amount of tokens to be transferred.\\n * @param data Additional data with no specified format, sent in call to `to`.\\n * @return A boolean value indicating whether the operation succeeded unless throwing.\\n */\\n function transferAndCall(address to, uint256 value, bytes calldata data) external returns (bool);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism\\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\\n * @param from The address which you want to send tokens from.\\n * @param to The address which you want to transfer to.\\n * @param value The amount of tokens to be transferred.\\n * @return A boolean value indicating whether the operation succeeded unless throwing.\\n */\\n function transferFromAndCall(address from, address to, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism\\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\\n * @param from The address which you want to send tokens from.\\n * @param to The address which you want to transfer to.\\n * @param value The amount of tokens to be transferred.\\n * @param data Additional data with no specified format, sent in call to `to`.\\n * @return A boolean value indicating whether the operation succeeded unless throwing.\\n */\\n function transferFromAndCall(address from, address to, uint256 value, bytes calldata data) external returns (bool);\\n\\n /**\\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\\n * caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`.\\n * @param spender The address which will spend the funds.\\n * @param value The amount of tokens to be spent.\\n * @return A boolean value indicating whether the operation succeeded unless throwing.\\n */\\n function approveAndCall(address spender, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\\n * caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`.\\n * @param spender The address which will spend the funds.\\n * @param value The amount of tokens to be spent.\\n * @param data Additional data with no specified format, sent in call to `spender`.\\n * @return A boolean value indicating whether the operation succeeded unless throwing.\\n */\\n function approveAndCall(address spender, uint256 value, bytes calldata data) external returns (bool);\\n}\\n\",\"keccak256\":\"0x9b6b3e7803bc5f2f8cd7ad57db8ac1def61a9930a5a3107df4882e028a9605d7\",\"license\":\"MIT\"},\"@openzeppelin/contracts/interfaces/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC165.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {IERC165} from \\\"../utils/introspection/IERC165.sol\\\";\\n\",\"keccak256\":\"0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724\",\"license\":\"MIT\"},\"@openzeppelin/contracts/interfaces/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC20.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {IERC20} from \\\"../token/ERC20/IERC20.sol\\\";\\n\",\"keccak256\":\"0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Interface of the ERC-20 standard as defined in the ERC.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the value of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the value of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\\n * caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from `from` to `to` using the\\n * allowance mechanism. `value` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 value) external returns (bool);\\n}\\n\",\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/utils/SafeERC20.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {IERC20} from \\\"../IERC20.sol\\\";\\nimport {IERC1363} from \\\"../../../interfaces/IERC1363.sol\\\";\\nimport {Address} from \\\"../../../utils/Address.sol\\\";\\n\\n/**\\n * @title SafeERC20\\n * @dev Wrappers around ERC-20 operations that throw on failure (when the token\\n * contract returns false). Tokens that return no value (and instead revert or\\n * throw on failure) are also supported, non-reverting calls are assumed to be\\n * successful.\\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\n */\\nlibrary SafeERC20 {\\n /**\\n * @dev An operation with an ERC-20 token failed.\\n */\\n error SafeERC20FailedOperation(address token);\\n\\n /**\\n * @dev Indicates a failed `decreaseAllowance` request.\\n */\\n error SafeERC20FailedDecreaseAllowance(address spender, uint256 currentAllowance, uint256 requestedDecrease);\\n\\n /**\\n * @dev Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value,\\n * non-reverting calls are assumed to be successful.\\n */\\n function safeTransfer(IERC20 token, address to, uint256 value) internal {\\n _callOptionalReturn(token, abi.encodeCall(token.transfer, (to, value)));\\n }\\n\\n /**\\n * @dev Transfer `value` amount of `token` from `from` to `to`, spending the approval given by `from` to the\\n * calling contract. If `token` returns no value, non-reverting calls are assumed to be successful.\\n */\\n function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\\n _callOptionalReturn(token, abi.encodeCall(token.transferFrom, (from, to, value)));\\n }\\n\\n /**\\n * @dev Increase the calling contract's allowance toward `spender` by `value`. If `token` returns no value,\\n * non-reverting calls are assumed to be successful.\\n *\\n * IMPORTANT: If the token implements ERC-7674 (ERC-20 with temporary allowance), and if the \\\"client\\\"\\n * smart contract uses ERC-7674 to set temporary allowances, then the \\\"client\\\" smart contract should avoid using\\n * this function. Performing a {safeIncreaseAllowance} or {safeDecreaseAllowance} operation on a token contract\\n * that has a non-zero temporary allowance (for that particular owner-spender) will result in unexpected behavior.\\n */\\n function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {\\n uint256 oldAllowance = token.allowance(address(this), spender);\\n forceApprove(token, spender, oldAllowance + value);\\n }\\n\\n /**\\n * @dev Decrease the calling contract's allowance toward `spender` by `requestedDecrease`. If `token` returns no\\n * value, non-reverting calls are assumed to be successful.\\n *\\n * IMPORTANT: If the token implements ERC-7674 (ERC-20 with temporary allowance), and if the \\\"client\\\"\\n * smart contract uses ERC-7674 to set temporary allowances, then the \\\"client\\\" smart contract should avoid using\\n * this function. Performing a {safeIncreaseAllowance} or {safeDecreaseAllowance} operation on a token contract\\n * that has a non-zero temporary allowance (for that particular owner-spender) will result in unexpected behavior.\\n */\\n function safeDecreaseAllowance(IERC20 token, address spender, uint256 requestedDecrease) internal {\\n unchecked {\\n uint256 currentAllowance = token.allowance(address(this), spender);\\n if (currentAllowance < requestedDecrease) {\\n revert SafeERC20FailedDecreaseAllowance(spender, currentAllowance, requestedDecrease);\\n }\\n forceApprove(token, spender, currentAllowance - requestedDecrease);\\n }\\n }\\n\\n /**\\n * @dev Set the calling contract's allowance toward `spender` to `value`. If `token` returns no value,\\n * non-reverting calls are assumed to be successful. Meant to be used with tokens that require the approval\\n * to be set to zero before setting it to a non-zero value, such as USDT.\\n *\\n * NOTE: If the token implements ERC-7674, this function will not modify any temporary allowance. This function\\n * only sets the \\\"standard\\\" allowance. Any temporary allowance will remain active, in addition to the value being\\n * set here.\\n */\\n function forceApprove(IERC20 token, address spender, uint256 value) internal {\\n bytes memory approvalCall = abi.encodeCall(token.approve, (spender, value));\\n\\n if (!_callOptionalReturnBool(token, approvalCall)) {\\n _callOptionalReturn(token, abi.encodeCall(token.approve, (spender, 0)));\\n _callOptionalReturn(token, approvalCall);\\n }\\n }\\n\\n /**\\n * @dev Performs an {ERC1363} transferAndCall, with a fallback to the simple {ERC20} transfer if the target has no\\n * code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\\n * targeting contracts.\\n *\\n * Reverts if the returned value is other than `true`.\\n */\\n function transferAndCallRelaxed(IERC1363 token, address to, uint256 value, bytes memory data) internal {\\n if (to.code.length == 0) {\\n safeTransfer(token, to, value);\\n } else if (!token.transferAndCall(to, value, data)) {\\n revert SafeERC20FailedOperation(address(token));\\n }\\n }\\n\\n /**\\n * @dev Performs an {ERC1363} transferFromAndCall, with a fallback to the simple {ERC20} transferFrom if the target\\n * has no code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\\n * targeting contracts.\\n *\\n * Reverts if the returned value is other than `true`.\\n */\\n function transferFromAndCallRelaxed(\\n IERC1363 token,\\n address from,\\n address to,\\n uint256 value,\\n bytes memory data\\n ) internal {\\n if (to.code.length == 0) {\\n safeTransferFrom(token, from, to, value);\\n } else if (!token.transferFromAndCall(from, to, value, data)) {\\n revert SafeERC20FailedOperation(address(token));\\n }\\n }\\n\\n /**\\n * @dev Performs an {ERC1363} approveAndCall, with a fallback to the simple {ERC20} approve if the target has no\\n * code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\\n * targeting contracts.\\n *\\n * NOTE: When the recipient address (`to`) has no code (i.e. is an EOA), this function behaves as {forceApprove}.\\n * Opposedly, when the recipient address (`to`) has code, this function only attempts to call {ERC1363-approveAndCall}\\n * once without retrying, and relies on the returned value to be true.\\n *\\n * Reverts if the returned value is other than `true`.\\n */\\n function approveAndCallRelaxed(IERC1363 token, address to, uint256 value, bytes memory data) internal {\\n if (to.code.length == 0) {\\n forceApprove(token, to, value);\\n } else if (!token.approveAndCall(to, value, data)) {\\n revert SafeERC20FailedOperation(address(token));\\n }\\n }\\n\\n /**\\n * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n * on the return value: the return value is optional (but if data is returned, it must not be false).\\n * @param token The token targeted by the call.\\n * @param data The call data (encoded using abi.encode or one of its variants).\\n *\\n * This is a variant of {_callOptionalReturnBool} that reverts if call fails to meet the requirements.\\n */\\n function _callOptionalReturn(IERC20 token, bytes memory data) private {\\n uint256 returnSize;\\n uint256 returnValue;\\n assembly (\\\"memory-safe\\\") {\\n let success := call(gas(), token, 0, add(data, 0x20), mload(data), 0, 0x20)\\n // bubble errors\\n if iszero(success) {\\n let ptr := mload(0x40)\\n returndatacopy(ptr, 0, returndatasize())\\n revert(ptr, returndatasize())\\n }\\n returnSize := returndatasize()\\n returnValue := mload(0)\\n }\\n\\n if (returnSize == 0 ? address(token).code.length == 0 : returnValue != 1) {\\n revert SafeERC20FailedOperation(address(token));\\n }\\n }\\n\\n /**\\n * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n * on the return value: the return value is optional (but if data is returned, it must not be false).\\n * @param token The token targeted by the call.\\n * @param data The call data (encoded using abi.encode or one of its variants).\\n *\\n * This is a variant of {_callOptionalReturn} that silently catches all reverts and returns a bool instead.\\n */\\n function _callOptionalReturnBool(IERC20 token, bytes memory data) private returns (bool) {\\n bool success;\\n uint256 returnSize;\\n uint256 returnValue;\\n assembly (\\\"memory-safe\\\") {\\n success := call(gas(), token, 0, add(data, 0x20), mload(data), 0, 0x20)\\n returnSize := returndatasize()\\n returnValue := mload(0)\\n }\\n return success && (returnSize == 0 ? address(token).code.length > 0 : returnValue == 1);\\n }\\n}\\n\",\"keccak256\":\"0xca2ae13e0610f6a99238dd00b97bd786bc92732dae6d6b9d61f573ec51018310\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {Errors} from \\\"./Errors.sol\\\";\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev There's no code at `target` (it is not a contract).\\n */\\n error AddressEmptyCode(address target);\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.8.20/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n if (address(this).balance < amount) {\\n revert Errors.InsufficientBalance(address(this).balance, amount);\\n }\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n if (!success) {\\n revert Errors.FailedCall();\\n }\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason or custom error, it is bubbled\\n * up by this function (like regular Solidity function calls). However, if\\n * the call reverted with no returned reason, this function reverts with a\\n * {Errors.FailedCall} error.\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n if (address(this).balance < value) {\\n revert Errors.InsufficientBalance(address(this).balance, value);\\n }\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResultFromTarget(target, success, returndata);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResultFromTarget(target, success, returndata);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResultFromTarget(target, success, returndata);\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call to smart-contract was successful, and reverts if the target\\n * was not a contract or bubbling up the revert reason (falling back to {Errors.FailedCall}) in case\\n * of an unsuccessful call.\\n */\\n function verifyCallResultFromTarget(\\n address target,\\n bool success,\\n bytes memory returndata\\n ) internal view returns (bytes memory) {\\n if (!success) {\\n _revert(returndata);\\n } else {\\n // only check if target is a contract if the call was successful and the return data is empty\\n // otherwise we already know that it was a contract\\n if (returndata.length == 0 && target.code.length == 0) {\\n revert AddressEmptyCode(target);\\n }\\n return returndata;\\n }\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call was successful, and reverts if it wasn't, either by bubbling the\\n * revert reason or with a default {Errors.FailedCall} error.\\n */\\n function verifyCallResult(bool success, bytes memory returndata) internal pure returns (bytes memory) {\\n if (!success) {\\n _revert(returndata);\\n } else {\\n return returndata;\\n }\\n }\\n\\n /**\\n * @dev Reverts with returndata if present. Otherwise reverts with {Errors.FailedCall}.\\n */\\n function _revert(bytes memory returndata) private pure {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n assembly (\\\"memory-safe\\\") {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert Errors.FailedCall();\\n }\\n }\\n}\\n\",\"keccak256\":\"0x9d8da059267bac779a2dbbb9a26c2acf00ca83085e105d62d5d4ef96054a47f5\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Errors.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/Errors.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Collection of common custom errors used in multiple contracts\\n *\\n * IMPORTANT: Backwards compatibility is not guaranteed in future versions of the library.\\n * It is recommended to avoid relying on the error API for critical functionality.\\n *\\n * _Available since v5.1._\\n */\\nlibrary Errors {\\n /**\\n * @dev The ETH balance of the account is not enough to perform the operation.\\n */\\n error InsufficientBalance(uint256 balance, uint256 needed);\\n\\n /**\\n * @dev A call to an address target failed. The target may have reverted.\\n */\\n error FailedCall();\\n\\n /**\\n * @dev The deployment failed.\\n */\\n error FailedDeployment();\\n\\n /**\\n * @dev A necessary precompile is missing.\\n */\\n error MissingPrecompile(address);\\n}\\n\",\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/introspection/IERC165.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Interface of the ERC-165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[ERC].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\"}},\"version\":1}", - "storageLayout": { "storage": [], "types": null }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - } - }, - "@openzeppelin/contracts/utils/Address.sol": { - "Address": { - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "target", - "type": "address" - } - ], - "name": "AddressEmptyCode", - "type": "error" - } - ], - "devdoc": { - "details": "Collection of functions related to the address type", - "errors": { - "AddressEmptyCode(address)": [ - { - "details": "There's no code at `target` (it is not a contract)." - } - ] - }, - "kind": "dev", - "methods": {}, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122040fe4c7a5cf02d28cfc2a42e519ef4cf6dc6591196a25cded03008626f579bf064736f6c63430008160033", - "opcodes": "PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 BLOCKHASH INVALID 0x4C PUSH27 0x5CF02D28CFC2A42E519EF4CF6DC6591196A25CDED03008626F579B CREATE PUSH5 0x736F6C6343 STOP ADDMOD AND STOP CALLER ", - "sourceMap": "233:5799:37:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;233:5799:37;;;;;;;;;;;;;;;;;" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122040fe4c7a5cf02d28cfc2a42e519ef4cf6dc6591196a25cded03008626f579bf064736f6c63430008160033", - "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 BLOCKHASH INVALID 0x4C PUSH27 0x5CF02D28CFC2A42E519EF4CF6DC6591196A25CDED03008626F579B CREATE PUSH5 0x736F6C6343 STOP ADDMOD AND STOP CALLER ", - "sourceMap": "233:5799:37:-:0;;;;;;;;" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "17200", - "executionCost": "103", - "totalCost": "17303" - }, - "internal": { - "_revert(bytes memory)": "infinite", - "functionCall(address,bytes memory)": "infinite", - "functionCallWithValue(address,bytes memory,uint256)": "infinite", - "functionDelegateCall(address,bytes memory)": "infinite", - "functionStaticCall(address,bytes memory)": "infinite", - "sendValue(address payable,uint256)": "infinite", - "verifyCallResult(bool,bytes memory)": "infinite", - "verifyCallResultFromTarget(address,bool,bytes memory)": "infinite" - } - }, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Collection of functions related to the address type\",\"errors\":{\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/Address.sol\":\"Address\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {Errors} from \\\"./Errors.sol\\\";\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev There's no code at `target` (it is not a contract).\\n */\\n error AddressEmptyCode(address target);\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.8.20/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n if (address(this).balance < amount) {\\n revert Errors.InsufficientBalance(address(this).balance, amount);\\n }\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n if (!success) {\\n revert Errors.FailedCall();\\n }\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason or custom error, it is bubbled\\n * up by this function (like regular Solidity function calls). However, if\\n * the call reverted with no returned reason, this function reverts with a\\n * {Errors.FailedCall} error.\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n if (address(this).balance < value) {\\n revert Errors.InsufficientBalance(address(this).balance, value);\\n }\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResultFromTarget(target, success, returndata);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResultFromTarget(target, success, returndata);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResultFromTarget(target, success, returndata);\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call to smart-contract was successful, and reverts if the target\\n * was not a contract or bubbling up the revert reason (falling back to {Errors.FailedCall}) in case\\n * of an unsuccessful call.\\n */\\n function verifyCallResultFromTarget(\\n address target,\\n bool success,\\n bytes memory returndata\\n ) internal view returns (bytes memory) {\\n if (!success) {\\n _revert(returndata);\\n } else {\\n // only check if target is a contract if the call was successful and the return data is empty\\n // otherwise we already know that it was a contract\\n if (returndata.length == 0 && target.code.length == 0) {\\n revert AddressEmptyCode(target);\\n }\\n return returndata;\\n }\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call was successful, and reverts if it wasn't, either by bubbling the\\n * revert reason or with a default {Errors.FailedCall} error.\\n */\\n function verifyCallResult(bool success, bytes memory returndata) internal pure returns (bytes memory) {\\n if (!success) {\\n _revert(returndata);\\n } else {\\n return returndata;\\n }\\n }\\n\\n /**\\n * @dev Reverts with returndata if present. Otherwise reverts with {Errors.FailedCall}.\\n */\\n function _revert(bytes memory returndata) private pure {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n assembly (\\\"memory-safe\\\") {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert Errors.FailedCall();\\n }\\n }\\n}\\n\",\"keccak256\":\"0x9d8da059267bac779a2dbbb9a26c2acf00ca83085e105d62d5d4ef96054a47f5\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Errors.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/Errors.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Collection of common custom errors used in multiple contracts\\n *\\n * IMPORTANT: Backwards compatibility is not guaranteed in future versions of the library.\\n * It is recommended to avoid relying on the error API for critical functionality.\\n *\\n * _Available since v5.1._\\n */\\nlibrary Errors {\\n /**\\n * @dev The ETH balance of the account is not enough to perform the operation.\\n */\\n error InsufficientBalance(uint256 balance, uint256 needed);\\n\\n /**\\n * @dev A call to an address target failed. The target may have reverted.\\n */\\n error FailedCall();\\n\\n /**\\n * @dev The deployment failed.\\n */\\n error FailedDeployment();\\n\\n /**\\n * @dev A necessary precompile is missing.\\n */\\n error MissingPrecompile(address);\\n}\\n\",\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\"}},\"version\":1}", - "storageLayout": { "storage": [], "types": null }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - } - }, - "@openzeppelin/contracts/utils/Context.sol": { - "Context": { - "abi": [], - "devdoc": { - "details": "Provides information about the current execution context, including the sender of the transaction and its data. While these are generally available via msg.sender and msg.data, they should not be accessed in such a direct manner, since when dealing with meta-transactions the account sending and paying for execution may not be the actual sender (as far as an application is concerned). This contract is only required for intermediate, library-like contracts.", - "kind": "dev", - "methods": {}, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Provides information about the current execution context, including the sender of the transaction and its data. While these are generally available via msg.sender and msg.data, they should not be accessed in such a direct manner, since when dealing with meta-transactions the account sending and paying for execution may not be the actual sender (as far as an application is concerned). This contract is only required for intermediate, library-like contracts.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/Context.sol\":\"Context\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n\\n function _contextSuffixLength() internal view virtual returns (uint256) {\\n return 0;\\n }\\n}\\n\",\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\"}},\"version\":1}", - "storageLayout": { "storage": [], "types": null }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - } - }, - "@openzeppelin/contracts/utils/Errors.sol": { - "Errors": { - "abi": [ - { "inputs": [], "name": "FailedCall", "type": "error" }, - { "inputs": [], "name": "FailedDeployment", "type": "error" }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "balance", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "needed", - "type": "uint256" - } - ], - "name": "InsufficientBalance", - "type": "error" - }, - { - "inputs": [ - { "internalType": "address", "name": "", "type": "address" } - ], - "name": "MissingPrecompile", - "type": "error" - } - ], - "devdoc": { - "details": "Collection of common custom errors used in multiple contracts IMPORTANT: Backwards compatibility is not guaranteed in future versions of the library. It is recommended to avoid relying on the error API for critical functionality. _Available since v5.1._", - "errors": { - "FailedCall()": [ - { - "details": "A call to an address target failed. The target may have reverted." - } - ], - "FailedDeployment()": [{ "details": "The deployment failed." }], - "InsufficientBalance(uint256,uint256)": [ - { - "details": "The ETH balance of the account is not enough to perform the operation." - } - ], - "MissingPrecompile(address)": [ - { "details": "A necessary precompile is missing." } - ] - }, - "kind": "dev", - "methods": {}, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212204dc9d5abf73c2dbd9a8371aa17f429ee6e5bf442558fed171264f729582e6c7b64736f6c63430008160033", - "opcodes": "PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x4D 0xC9 0xD5 0xAB 0xF7 EXTCODECOPY 0x2D 0xBD SWAP11 DUP4 PUSH18 0xAA17F429EE6E5BF442558FED171264F72958 0x2E PUSH13 0x7B64736F6C6343000816003300 ", - "sourceMap": "411:484:39:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;411:484:39;;;;;;;;;;;;;;;;;" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212204dc9d5abf73c2dbd9a8371aa17f429ee6e5bf442558fed171264f729582e6c7b64736f6c63430008160033", - "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x4D 0xC9 0xD5 0xAB 0xF7 EXTCODECOPY 0x2D 0xBD SWAP11 DUP4 PUSH18 0xAA17F429EE6E5BF442558FED171264F72958 0x2E PUSH13 0x7B64736F6C6343000816003300 ", - "sourceMap": "411:484:39:-:0;;;;;;;;" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "17200", - "executionCost": "103", - "totalCost": "17303" - } - }, - "methodIdentifiers": {} - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"FailedCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedDeployment\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"MissingPrecompile\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Collection of common custom errors used in multiple contracts IMPORTANT: Backwards compatibility is not guaranteed in future versions of the library. It is recommended to avoid relying on the error API for critical functionality. _Available since v5.1._\",\"errors\":{\"FailedCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}],\"FailedDeployment()\":[{\"details\":\"The deployment failed.\"}],\"InsufficientBalance(uint256,uint256)\":[{\"details\":\"The ETH balance of the account is not enough to perform the operation.\"}],\"MissingPrecompile(address)\":[{\"details\":\"A necessary precompile is missing.\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/Errors.sol\":\"Errors\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/Errors.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/Errors.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Collection of common custom errors used in multiple contracts\\n *\\n * IMPORTANT: Backwards compatibility is not guaranteed in future versions of the library.\\n * It is recommended to avoid relying on the error API for critical functionality.\\n *\\n * _Available since v5.1._\\n */\\nlibrary Errors {\\n /**\\n * @dev The ETH balance of the account is not enough to perform the operation.\\n */\\n error InsufficientBalance(uint256 balance, uint256 needed);\\n\\n /**\\n * @dev A call to an address target failed. The target may have reverted.\\n */\\n error FailedCall();\\n\\n /**\\n * @dev The deployment failed.\\n */\\n error FailedDeployment();\\n\\n /**\\n * @dev A necessary precompile is missing.\\n */\\n error MissingPrecompile(address);\\n}\\n\",\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\"}},\"version\":1}", - "storageLayout": { "storage": [], "types": null }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - } - }, - "@openzeppelin/contracts/utils/introspection/IERC165.sol": { - "IERC165": { - "abi": [ - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { "internalType": "bool", "name": "", "type": "bool" } - ], - "stateMutability": "view", - "type": "function" - } - ], - "devdoc": { - "details": "Interface of the ERC-165 standard, as defined in the https://eips.ethereum.org/EIPS/eip-165[ERC]. Implementers can declare support of contract interfaces, which can then be queried by others ({ERC165Checker}). For an implementation, see {ERC165}.", - "kind": "dev", - "methods": { - "supportsInterface(bytes4)": { - "details": "Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section] to learn more about how these ids are created. This function call must use less than 30 000 gas." - } - }, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": {}, - "generatedSources": [], - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "deployedBytecode": { - "functionDebugData": {}, - "generatedSources": [], - "immutableReferences": {}, - "linkReferences": {}, - "object": "", - "opcodes": "", - "sourceMap": "" - }, - "gasEstimates": null, - "methodIdentifiers": { "supportsInterface(bytes4)": "01ffc9a7" } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface of the ERC-165 standard, as defined in the https://eips.ethereum.org/EIPS/eip-165[ERC]. Implementers can declare support of contract interfaces, which can then be queried by others ({ERC165Checker}). For an implementation, see {ERC165}.\",\"kind\":\"dev\",\"methods\":{\"supportsInterface(bytes4)\":{\"details\":\"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section] to learn more about how these ids are created. This function call must use less than 30 000 gas.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":\"IERC165\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/introspection/IERC165.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Interface of the ERC-165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[ERC].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\"}},\"version\":1}", - "storageLayout": { "storage": [], "types": null }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - } - }, - "contracts/MyOFT.sol": { - "MyOFT": { - "abi": [ - { - "inputs": [ - { "internalType": "string", "name": "_name", "type": "string" }, - { - "internalType": "string", - "name": "_symbol", - "type": "string" - }, - { - "internalType": "address", - "name": "_lzEndpoint", - "type": "address" - }, - { - "internalType": "address", - "name": "_delegate", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "allowance", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "needed", - "type": "uint256" - } - ], - "name": "ERC20InsufficientAllowance", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "balance", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "needed", - "type": "uint256" - } - ], - "name": "ERC20InsufficientBalance", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "approver", - "type": "address" - } - ], - "name": "ERC20InvalidApprover", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "receiver", - "type": "address" - } - ], - "name": "ERC20InvalidReceiver", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "ERC20InvalidSender", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - } - ], - "name": "ERC20InvalidSpender", - "type": "error" - }, - { "inputs": [], "name": "InvalidDelegate", "type": "error" }, - { "inputs": [], "name": "InvalidEndpointCall", "type": "error" }, - { "inputs": [], "name": "InvalidLocalDecimals", "type": "error" }, - { - "inputs": [ - { "internalType": "bytes", "name": "options", "type": "bytes" } - ], - "name": "InvalidOptions", - "type": "error" - }, - { "inputs": [], "name": "LzTokenUnavailable", "type": "error" }, - { - "inputs": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" } - ], - "name": "NoPeer", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "msgValue", - "type": "uint256" - } - ], - "name": "NotEnoughNative", - "type": "error" - }, - { - "inputs": [ - { "internalType": "address", "name": "addr", "type": "address" } - ], - "name": "OnlyEndpoint", - "type": "error" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - } - ], - "name": "OnlyPeer", - "type": "error" - }, - { "inputs": [], "name": "OnlySelf", "type": "error" }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "OwnableInvalidOwner", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "OwnableUnauthorizedAccount", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - } - ], - "name": "SafeERC20FailedOperation", - "type": "error" - }, - { - "inputs": [ - { "internalType": "bytes", "name": "result", "type": "bytes" } - ], - "name": "SimulationResult", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "amountLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minAmountLD", - "type": "uint256" - } - ], - "name": "SlippageExceeded", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "eid", - "type": "uint32" - }, - { - "internalType": "uint16", - "name": "msgType", - "type": "uint16" - }, - { - "internalType": "bytes", - "name": "options", - "type": "bytes" - } - ], - "indexed": false, - "internalType": "struct EnforcedOptionParam[]", - "name": "_enforcedOptions", - "type": "tuple[]" - } - ], - "name": "EnforcedOptionSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "inspector", - "type": "address" - } - ], - "name": "MsgInspectorSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "guid", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "address", - "name": "toAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amountReceivedLD", - "type": "uint256" - } - ], - "name": "OFTReceived", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "guid", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "address", - "name": "fromAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amountSentLD", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amountReceivedLD", - "type": "uint256" - } - ], - "name": "OFTSent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "eid", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "peer", - "type": "bytes32" - } - ], - "name": "PeerSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "preCrimeAddress", - "type": "address" - } - ], - "name": "PreCrimeSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "inputs": [], - "name": "SEND", - "outputs": [ - { "internalType": "uint16", "name": "", "type": "uint16" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "SEND_AND_CALL", - "outputs": [ - { "internalType": "uint16", "name": "", "type": "uint16" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - } - ], - "internalType": "struct Origin", - "name": "origin", - "type": "tuple" - } - ], - "name": "allowInitializePath", - "outputs": [ - { "internalType": "bool", "name": "", "type": "bool" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "spender", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "approvalRequired", - "outputs": [ - { "internalType": "bool", "name": "", "type": "bool" } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { "internalType": "bool", "name": "", "type": "bool" } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { - "internalType": "uint16", - "name": "_msgType", - "type": "uint16" - }, - { - "internalType": "bytes", - "name": "_extraOptions", - "type": "bytes" - } - ], - "name": "combineOptions", - "outputs": [ - { "internalType": "bytes", "name": "", "type": "bytes" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "decimalConversionRate", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "decimals", - "outputs": [ - { "internalType": "uint8", "name": "", "type": "uint8" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "endpoint", - "outputs": [ - { - "internalType": "contract ILayerZeroEndpointV2", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" }, - { - "internalType": "uint16", - "name": "msgType", - "type": "uint16" - } - ], - "name": "enforcedOptions", - "outputs": [ - { - "internalType": "bytes", - "name": "enforcedOption", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - } - ], - "internalType": "struct Origin", - "name": "", - "type": "tuple" - }, - { "internalType": "bytes", "name": "", "type": "bytes" }, - { - "internalType": "address", - "name": "_sender", - "type": "address" - } - ], - "name": "isComposeMsgSender", - "outputs": [ - { "internalType": "bool", "name": "", "type": "bool" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { - "internalType": "bytes32", - "name": "_peer", - "type": "bytes32" - } - ], - "name": "isPeer", - "outputs": [ - { "internalType": "bool", "name": "", "type": "bool" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - } - ], - "internalType": "struct Origin", - "name": "_origin", - "type": "tuple" - }, - { - "internalType": "bytes32", - "name": "_guid", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "_message", - "type": "bytes" - }, - { - "internalType": "address", - "name": "_executor", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "lzReceive", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - } - ], - "internalType": "struct Origin", - "name": "origin", - "type": "tuple" - }, - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "guid", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "address", - "name": "executor", - "type": "address" - }, - { - "internalType": "bytes", - "name": "message", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "extraData", - "type": "bytes" - } - ], - "internalType": "struct InboundPacket[]", - "name": "_packets", - "type": "tuple[]" - } - ], - "name": "lzReceiveAndRevert", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - } - ], - "internalType": "struct Origin", - "name": "_origin", - "type": "tuple" - }, - { - "internalType": "bytes32", - "name": "_guid", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "_message", - "type": "bytes" - }, - { - "internalType": "address", - "name": "_executor", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "lzReceiveSimulate", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "msgInspector", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [ - { "internalType": "string", "name": "", "type": "string" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "", "type": "uint32" }, - { "internalType": "bytes32", "name": "", "type": "bytes32" } - ], - "name": "nextNonce", - "outputs": [ - { "internalType": "uint64", "name": "nonce", "type": "uint64" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "oApp", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "oAppVersion", - "outputs": [ - { - "internalType": "uint64", - "name": "senderVersion", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "receiverVersion", - "type": "uint64" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [], - "name": "oftVersion", - "outputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - }, - { - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" } - ], - "name": "peers", - "outputs": [ - { "internalType": "bytes32", "name": "peer", "type": "bytes32" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "preCrime", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "to", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amountLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minAmountLD", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "extraOptions", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "composeMsg", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "oftCmd", - "type": "bytes" - } - ], - "internalType": "struct SendParam", - "name": "_sendParam", - "type": "tuple" - } - ], - "name": "quoteOFT", - "outputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "minAmountLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxAmountLD", - "type": "uint256" - } - ], - "internalType": "struct OFTLimit", - "name": "oftLimit", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "int256", - "name": "feeAmountLD", - "type": "int256" - }, - { - "internalType": "string", - "name": "description", - "type": "string" - } - ], - "internalType": "struct OFTFeeDetail[]", - "name": "oftFeeDetails", - "type": "tuple[]" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "amountSentLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "amountReceivedLD", - "type": "uint256" - } - ], - "internalType": "struct OFTReceipt", - "name": "oftReceipt", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "to", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amountLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minAmountLD", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "extraOptions", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "composeMsg", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "oftCmd", - "type": "bytes" - } - ], - "internalType": "struct SendParam", - "name": "_sendParam", - "type": "tuple" - }, - { - "internalType": "bool", - "name": "_payInLzToken", - "type": "bool" - } - ], - "name": "quoteSend", - "outputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "nativeFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "lzTokenFee", - "type": "uint256" - } - ], - "internalType": "struct MessagingFee", - "name": "msgFee", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "to", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amountLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minAmountLD", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "extraOptions", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "composeMsg", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "oftCmd", - "type": "bytes" - } - ], - "internalType": "struct SendParam", - "name": "_sendParam", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "nativeFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "lzTokenFee", - "type": "uint256" - } - ], - "internalType": "struct MessagingFee", - "name": "_fee", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_refundAddress", - "type": "address" - } - ], - "name": "send", - "outputs": [ - { - "components": [ - { - "internalType": "bytes32", - "name": "guid", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "nativeFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "lzTokenFee", - "type": "uint256" - } - ], - "internalType": "struct MessagingFee", - "name": "fee", - "type": "tuple" - } - ], - "internalType": "struct MessagingReceipt", - "name": "msgReceipt", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "amountSentLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "amountReceivedLD", - "type": "uint256" - } - ], - "internalType": "struct OFTReceipt", - "name": "oftReceipt", - "type": "tuple" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_delegate", - "type": "address" - } - ], - "name": "setDelegate", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "eid", - "type": "uint32" - }, - { - "internalType": "uint16", - "name": "msgType", - "type": "uint16" - }, - { - "internalType": "bytes", - "name": "options", - "type": "bytes" - } - ], - "internalType": "struct EnforcedOptionParam[]", - "name": "_enforcedOptions", - "type": "tuple[]" - } - ], - "name": "setEnforcedOptions", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_msgInspector", - "type": "address" - } - ], - "name": "setMsgInspector", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { - "internalType": "bytes32", - "name": "_peer", - "type": "bytes32" - } - ], - "name": "setPeer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_preCrime", - "type": "address" - } - ], - "name": "setPreCrime", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "sharedDecimals", - "outputs": [ - { "internalType": "uint8", "name": "", "type": "uint8" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "outputs": [ - { "internalType": "string", "name": "", "type": "string" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "token", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalSupply", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "to", "type": "address" }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { "internalType": "bool", "name": "", "type": "bool" } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { "internalType": "address", "name": "to", "type": "address" }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { "internalType": "bool", "name": "", "type": "bool" } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "devdoc": { - "errors": { - "ERC20InsufficientAllowance(address,uint256,uint256)": [ - { - "details": "Indicates a failure with the `spender`’s `allowance`. Used in transfers.", - "params": { - "allowance": "Amount of tokens a `spender` is allowed to operate with.", - "needed": "Minimum amount required to perform a transfer.", - "spender": "Address that may be allowed to operate on tokens without being their owner." - } - } - ], - "ERC20InsufficientBalance(address,uint256,uint256)": [ - { - "details": "Indicates an error related to the current `balance` of a `sender`. Used in transfers.", - "params": { - "balance": "Current balance for the interacting account.", - "needed": "Minimum amount required to perform a transfer.", - "sender": "Address whose tokens are being transferred." - } - } - ], - "ERC20InvalidApprover(address)": [ - { - "details": "Indicates a failure with the `approver` of a token to be approved. Used in approvals.", - "params": { - "approver": "Address initiating an approval operation." - } - } - ], - "ERC20InvalidReceiver(address)": [ - { - "details": "Indicates a failure with the token `receiver`. Used in transfers.", - "params": { - "receiver": "Address to which tokens are being transferred." - } - } - ], - "ERC20InvalidSender(address)": [ - { - "details": "Indicates a failure with the token `sender`. Used in transfers.", - "params": { - "sender": "Address whose tokens are being transferred." - } - } - ], - "ERC20InvalidSpender(address)": [ - { - "details": "Indicates a failure with the `spender` to be approved. Used in approvals.", - "params": { - "spender": "Address that may be allowed to operate on tokens without being their owner." - } - } - ], - "OwnableInvalidOwner(address)": [ - { - "details": "The owner is not a valid owner account. (eg. `address(0)`)" - } - ], - "OwnableUnauthorizedAccount(address)": [ - { - "details": "The caller account is not authorized to perform an operation." - } - ], - "SafeERC20FailedOperation(address)": [ - { "details": "An operation with an ERC-20 token failed." } - ] - }, - "events": { - "Approval(address,address,uint256)": { - "details": "Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance." - }, - "PreCrimeSet(address)": { - "details": "Emitted when the preCrime contract address is set.", - "params": { - "preCrimeAddress": "The address of the preCrime contract." - } - }, - "Transfer(address,address,uint256)": { - "details": "Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero." - } - }, - "kind": "dev", - "methods": { - "allowInitializePath((uint32,bytes32,uint64))": { - "details": "This indicates to the endpoint that the OApp has enabled msgs for this particular path to be received.This defaults to assuming if a peer has been set, its initialized. Can be overridden by the OApp if there is other logic to determine this.", - "params": { - "origin": "The origin information containing the source endpoint and sender address." - }, - "returns": { "_0": "Whether the path has been initialized." } - }, - "allowance(address,address)": { - "details": "See {IERC20-allowance}." - }, - "approvalRequired()": { - "details": "In the case of OFT where the contract IS the token, approval is NOT required.", - "returns": { - "_0": "requiresApproval Needs approval of the underlying token implementation." - } - }, - "approve(address,uint256)": { - "details": "See {IERC20-approve}. NOTE: If `value` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address." - }, - "balanceOf(address)": { "details": "See {IERC20-balanceOf}." }, - "combineOptions(uint32,uint16,bytes)": { - "details": "If there is an enforced lzReceive option: - {gasLimit: 200k, msg.value: 1 ether} AND a caller supplies a lzReceive option: {gasLimit: 100k, msg.value: 0.5 ether} - The resulting options will be {gasLimit: 300k, msg.value: 1.5 ether} when the message is executed on the remote lzReceive() function.This presence of duplicated options is handled off-chain in the verifier/executor.", - "params": { - "_eid": "The endpoint ID.", - "_extraOptions": "Additional options passed by the caller.", - "_msgType": "The OAPP message type." - }, - "returns": { - "_0": "options The combination of caller specified options AND enforced options." - } - }, - "decimals()": { - "details": "Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the default value returned by this function, unless it's overridden. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}." - }, - "isComposeMsgSender((uint32,bytes32,uint64),bytes,address)": { - "details": "_origin The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message._message The lzReceive payload.Applications can optionally choose to implement separate composeMsg senders that are NOT the bridging layer.The default sender IS the OAppReceiver implementer.", - "params": { "_sender": "The sender address." }, - "returns": { "_0": "isSender Is a valid sender." } - }, - "isPeer(uint32,bytes32)": { - "details": "Check if the peer is considered 'trusted' by the OApp.Enables OAppPreCrimeSimulator to check whether a potential Inbound Packet is from a trusted source.", - "params": { - "_eid": "The endpoint ID to check.", - "_peer": "The peer to check." - }, - "returns": { - "_0": "Whether the peer passed is considered 'trusted' by the OApp." - } - }, - "lzReceive((uint32,bytes32,uint64),bytes32,bytes,address,bytes)": { - "details": "Entry point for receiving messages or packets from the endpoint.Entry point for receiving msg/packet from the LayerZero endpoint.", - "params": { - "_executor": "The address of the executor for the received message.", - "_extraData": "Additional arbitrary data provided by the corresponding executor.", - "_guid": "The unique identifier for the received LayerZero message.", - "_message": "The payload of the received message.", - "_origin": "The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message." - } - }, - "lzReceiveAndRevert(((uint32,bytes32,uint64),uint32,address,bytes32,uint256,address,bytes,bytes)[])": { - "details": "Interface for pre-crime simulations. Always reverts at the end with the simulation results.WARNING: MUST revert at the end with the simulation results.Gives the preCrime implementation the ability to mock sending packets to the lzReceive function, WITHOUT actually executing them.", - "params": { - "_packets": "An array of InboundPacket objects representing received packets to be delivered." - } - }, - "lzReceiveSimulate((uint32,bytes32,uint64),bytes32,bytes,address,bytes)": { - "details": "Is effectively an internal function because msg.sender must be address(this). Allows resetting the call stack for 'internal' calls.", - "params": { - "_executor": "The executor address for the packet.", - "_extraData": "Additional data for the packet.", - "_guid": "The unique identifier of the packet.", - "_message": "The message payload of the packet.", - "_origin": "The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message." - } - }, - "name()": { "details": "Returns the name of the token." }, - "nextNonce(uint32,bytes32)": { - "details": "_srcEid The source endpoint ID._sender The sender address.The path nonce starts from 1. If 0 is returned it means that there is NO nonce ordered enforcement.Is required by the off-chain executor to determine the OApp expects msg execution is ordered.This is also enforced by the OApp.By default this is NOT enabled. ie. nextNonce is hardcoded to return 0.", - "returns": { "nonce": "The next nonce." } - }, - "oApp()": { - "details": "Retrieves the address of the OApp contract.The simulator contract is the base contract for the OApp by default.If the simulator is a separate contract, override this function.", - "returns": { "_0": "The address of the OApp contract." } - }, - "oAppVersion()": { - "returns": { - "receiverVersion": "The version of the OAppReceiver.sol implementation.", - "senderVersion": "The version of the OAppSender.sol implementation." - } - }, - "oftVersion()": { - "details": "interfaceId: This specific interface ID is '0x02e49c2c'.version: Indicates a cross-chain compatible msg encoding with other OFTs.If a new feature is added to the OFT cross-chain msg encoding, the version will be incremented. ie. localOFT version(x,1) CAN send messages to remoteOFT version(x,1)", - "returns": { - "interfaceId": "The interface ID.", - "version": "The version." - } - }, - "owner()": { - "details": "Returns the address of the current owner." - }, - "quoteOFT((uint32,bytes32,uint256,uint256,bytes,bytes,bytes))": { - "params": { - "_sendParam": "The parameters for the send operation." - }, - "returns": { - "oftFeeDetails": "The details of OFT fees.", - "oftLimit": "The OFT limit information.", - "oftReceipt": "The OFT receipt information." - } - }, - "quoteSend((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),bool)": { - "details": "MessagingFee: LayerZero msg fee - nativeFee: The native fee. - lzTokenFee: The lzToken fee.", - "params": { - "_payInLzToken": "Flag indicating whether the caller is paying in the LZ token.", - "_sendParam": "The parameters for the send() operation." - }, - "returns": { - "msgFee": "The calculated LayerZero messaging fee from the send() operation." - } - }, - "renounceOwnership()": { - "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner." - }, - "send((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),(uint256,uint256),address)": { - "details": "Executes the send operation.MessagingReceipt: LayerZero msg receipt - guid: The unique identifier for the sent message. - nonce: The nonce of the sent message. - fee: The LayerZero fee incurred for the message.", - "params": { - "_fee": "The calculated fee for the send() operation. - nativeFee: The native fee. - lzTokenFee: The lzToken fee.", - "_refundAddress": "The address to receive any excess funds.", - "_sendParam": "The parameters for the send operation." - }, - "returns": { - "msgReceipt": "The receipt for the send operation.", - "oftReceipt": "The OFT receipt information." - } - }, - "setDelegate(address)": { - "details": "Only the owner/admin of the OApp can call this function.Provides the ability for a delegate to set configs, on behalf of the OApp, directly on the Endpoint contract.", - "params": { - "_delegate": "The address of the delegate to be set." - } - }, - "setEnforcedOptions((uint32,uint16,bytes)[])": { - "details": "Sets the enforced options for specific endpoint and message type combinations.Only the owner/admin of the OApp can call this function.Provides a way for the OApp to enforce things like paying for PreCrime, AND/OR minimum dst lzReceive gas amounts etc.These enforced options can vary as the potential options/execution on the remote may differ as per the msgType. eg. Amount of lzReceive() gas necessary to deliver a lzCompose() message adds overhead you dont want to pay if you are only making a standard LayerZero message ie. lzReceive() WITHOUT sendCompose().", - "params": { - "_enforcedOptions": "An array of EnforcedOptionParam structures specifying enforced options." - } - }, - "setMsgInspector(address)": { - "details": "Sets the message inspector address for the OFT.This is an optional contract that can be used to inspect both 'message' and 'options'.Set it to address(0) to disable it, or set it to a contract address to enable it.", - "params": { - "_msgInspector": "The address of the message inspector." - } - }, - "setPeer(uint32,bytes32)": { - "details": "Only the owner/admin of the OApp can call this function.Indicates that the peer is trusted to send LayerZero messages to this OApp.Set this to bytes32(0) to remove the peer address.Peer is a bytes32 to accommodate non-evm chains.", - "params": { - "_eid": "The endpoint ID.", - "_peer": "The address of the peer to be associated with the corresponding endpoint." - } - }, - "setPreCrime(address)": { - "details": "Sets the preCrime contract address.", - "params": { - "_preCrime": "The address of the preCrime contract." - } - }, - "sharedDecimals()": { - "details": "Retrieves the shared decimals of the OFT.Sets an implicit cap on the amount of tokens, over uint64.max() will need some sort of outbound cap / totalSupply cap Lowest common decimal denominator between chains. Defaults to 6 decimal places to provide up to 18,446,744,073,709.551615 units (max uint64). For tokens exceeding this totalSupply(), they will need to override the sharedDecimals function with something smaller. ie. 4 sharedDecimals would be 1,844,674,407,370,955.1615", - "returns": { "_0": "The shared decimals of the OFT." } - }, - "symbol()": { - "details": "Returns the symbol of the token, usually a shorter version of the name." - }, - "token()": { - "details": "Retrieves the address of the underlying ERC20 implementation.In the case of OFT, address(this) and erc20 are the same contract.", - "returns": { "_0": "The address of the OFT token." } - }, - "totalSupply()": { "details": "See {IERC20-totalSupply}." }, - "transfer(address,uint256)": { - "details": "See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `value`." - }, - "transferFrom(address,address,uint256)": { - "details": "See {IERC20-transferFrom}. Skips emitting an {Approval} event indicating an allowance update. This is not required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve]. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `value`. - the caller must have allowance for ``from``'s tokens of at least `value`." - }, - "transferOwnership(address)": { - "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." - } - }, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": { - "@_1354": { - "entryPoint": null, - "id": 1354, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@_1421": { - "entryPoint": null, - "id": 1421, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@_2646": { - "entryPoint": null, - "id": 2646, - "parameterSlots": 4, - "returnSlots": 0 - }, - "@_2821": { - "entryPoint": null, - "id": 2821, - "parameterSlots": 3, - "returnSlots": 0 - }, - "@_3879": { - "entryPoint": null, - "id": 3879, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@_4255": { - "entryPoint": null, - "id": 4255, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@_5585": { - "entryPoint": null, - "id": 5585, - "parameterSlots": 4, - "returnSlots": 0 - }, - "@_transferOwnership_3975": { - "entryPoint": 408, - "id": 3975, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@decimals_4282": { - "entryPoint": null, - "id": 4282, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@sharedDecimals_2846": { - "entryPoint": 488, - "id": 2846, - "parameterSlots": 0, - "returnSlots": 1 - }, - "abi_decode_address_fromMemory": { - "entryPoint": 693, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_decode_string_fromMemory": { - "entryPoint": 515, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_string_memory_ptrt_string_memory_ptrt_addresst_address_fromMemory": { - "entryPoint": 722, - "id": null, - "parameterSlots": 2, - "returnSlots": 4 - }, - "abi_encode_tuple_t_address__to_t_address__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "array_dataslot_string_storage": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "checked_exp_helper": { - "entryPoint": 921, - "id": null, - "parameterSlots": 2, - "returnSlots": 2 - }, - "checked_exp_t_uint256_t_uint8": { - "entryPoint": 1174, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "checked_exp_unsigned": { - "entryPoint": 994, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "checked_sub_t_uint8": { - "entryPoint": 887, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "clean_up_bytearray_end_slots_string_storage": { - "entryPoint": 1258, - "id": null, - "parameterSlots": 3, - "returnSlots": 0 - }, - "copy_byte_array_to_storage_from_t_string_memory_ptr_to_t_string_storage": { - "entryPoint": 1343, - "id": null, - "parameterSlots": 2, - "returnSlots": 0 - }, - "extract_byte_array_length": { - "entryPoint": 1198, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "extract_used_part_and_set_length_of_short_byte_array": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "panic_error_0x11": { - "entryPoint": 865, - "id": null, - "parameterSlots": 0, - "returnSlots": 0 - }, - "panic_error_0x41": { - "entryPoint": 493, - "id": null, - "parameterSlots": 0, - "returnSlots": 0 - } - }, - "generatedSources": [ - { - "ast": { - "nativeSrc": "0:6365:43", - "nodeType": "YulBlock", - "src": "0:6365:43", - "statements": [ - { - "nativeSrc": "6:3:43", - "nodeType": "YulBlock", - "src": "6:3:43", - "statements": [] - }, - { - "body": { - "nativeSrc": "46:95:43", - "nodeType": "YulBlock", - "src": "46:95:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "63:1:43", - "nodeType": "YulLiteral", - "src": "63:1:43", - "type": "", - "value": "0" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "70:3:43", - "nodeType": "YulLiteral", - "src": "70:3:43", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nativeSrc": "75:10:43", - "nodeType": "YulLiteral", - "src": "75:10:43", - "type": "", - "value": "0x4e487b71" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "66:3:43", - "nodeType": "YulIdentifier", - "src": "66:3:43" - }, - "nativeSrc": "66:20:43", - "nodeType": "YulFunctionCall", - "src": "66:20:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "56:6:43", - "nodeType": "YulIdentifier", - "src": "56:6:43" - }, - "nativeSrc": "56:31:43", - "nodeType": "YulFunctionCall", - "src": "56:31:43" - }, - "nativeSrc": "56:31:43", - "nodeType": "YulExpressionStatement", - "src": "56:31:43" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "103:1:43", - "nodeType": "YulLiteral", - "src": "103:1:43", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nativeSrc": "106:4:43", - "nodeType": "YulLiteral", - "src": "106:4:43", - "type": "", - "value": "0x41" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "96:6:43", - "nodeType": "YulIdentifier", - "src": "96:6:43" - }, - "nativeSrc": "96:15:43", - "nodeType": "YulFunctionCall", - "src": "96:15:43" - }, - "nativeSrc": "96:15:43", - "nodeType": "YulExpressionStatement", - "src": "96:15:43" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "127:1:43", - "nodeType": "YulLiteral", - "src": "127:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "130:4:43", - "nodeType": "YulLiteral", - "src": "130:4:43", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "120:6:43", - "nodeType": "YulIdentifier", - "src": "120:6:43" - }, - "nativeSrc": "120:15:43", - "nodeType": "YulFunctionCall", - "src": "120:15:43" - }, - "nativeSrc": "120:15:43", - "nodeType": "YulExpressionStatement", - "src": "120:15:43" - } - ] - }, - "name": "panic_error_0x41", - "nativeSrc": "14:127:43", - "nodeType": "YulFunctionDefinition", - "src": "14:127:43" - }, - { - "body": { - "nativeSrc": "210:780:43", - "nodeType": "YulBlock", - "src": "210:780:43", - "statements": [ - { - "body": { - "nativeSrc": "259:16:43", - "nodeType": "YulBlock", - "src": "259:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "268:1:43", - "nodeType": "YulLiteral", - "src": "268:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "271:1:43", - "nodeType": "YulLiteral", - "src": "271:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "261:6:43", - "nodeType": "YulIdentifier", - "src": "261:6:43" - }, - "nativeSrc": "261:12:43", - "nodeType": "YulFunctionCall", - "src": "261:12:43" - }, - "nativeSrc": "261:12:43", - "nodeType": "YulExpressionStatement", - "src": "261:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "offset", - "nativeSrc": "238:6:43", - "nodeType": "YulIdentifier", - "src": "238:6:43" - }, - { - "kind": "number", - "nativeSrc": "246:4:43", - "nodeType": "YulLiteral", - "src": "246:4:43", - "type": "", - "value": "0x1f" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "234:3:43", - "nodeType": "YulIdentifier", - "src": "234:3:43" - }, - "nativeSrc": "234:17:43", - "nodeType": "YulFunctionCall", - "src": "234:17:43" - }, - { - "name": "end", - "nativeSrc": "253:3:43", - "nodeType": "YulIdentifier", - "src": "253:3:43" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "230:3:43", - "nodeType": "YulIdentifier", - "src": "230:3:43" - }, - "nativeSrc": "230:27:43", - "nodeType": "YulFunctionCall", - "src": "230:27:43" - } - ], - "functionName": { - "name": "iszero", - "nativeSrc": "223:6:43", - "nodeType": "YulIdentifier", - "src": "223:6:43" - }, - "nativeSrc": "223:35:43", - "nodeType": "YulFunctionCall", - "src": "223:35:43" - }, - "nativeSrc": "220:55:43", - "nodeType": "YulIf", - "src": "220:55:43" - }, - { - "nativeSrc": "284:23:43", - "nodeType": "YulVariableDeclaration", - "src": "284:23:43", - "value": { - "arguments": [ - { - "name": "offset", - "nativeSrc": "300:6:43", - "nodeType": "YulIdentifier", - "src": "300:6:43" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "294:5:43", - "nodeType": "YulIdentifier", - "src": "294:5:43" - }, - "nativeSrc": "294:13:43", - "nodeType": "YulFunctionCall", - "src": "294:13:43" - }, - "variables": [ - { - "name": "_1", - "nativeSrc": "288:2:43", - "nodeType": "YulTypedName", - "src": "288:2:43", - "type": "" - } - ] - }, - { - "nativeSrc": "316:28:43", - "nodeType": "YulVariableDeclaration", - "src": "316:28:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "334:2:43", - "nodeType": "YulLiteral", - "src": "334:2:43", - "type": "", - "value": "64" - }, - { - "kind": "number", - "nativeSrc": "338:1:43", - "nodeType": "YulLiteral", - "src": "338:1:43", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "330:3:43", - "nodeType": "YulIdentifier", - "src": "330:3:43" - }, - "nativeSrc": "330:10:43", - "nodeType": "YulFunctionCall", - "src": "330:10:43" - }, - { - "kind": "number", - "nativeSrc": "342:1:43", - "nodeType": "YulLiteral", - "src": "342:1:43", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "326:3:43", - "nodeType": "YulIdentifier", - "src": "326:3:43" - }, - "nativeSrc": "326:18:43", - "nodeType": "YulFunctionCall", - "src": "326:18:43" - }, - "variables": [ - { - "name": "_2", - "nativeSrc": "320:2:43", - "nodeType": "YulTypedName", - "src": "320:2:43", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "367:22:43", - "nodeType": "YulBlock", - "src": "367:22:43", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x41", - "nativeSrc": "369:16:43", - "nodeType": "YulIdentifier", - "src": "369:16:43" - }, - "nativeSrc": "369:18:43", - "nodeType": "YulFunctionCall", - "src": "369:18:43" - }, - "nativeSrc": "369:18:43", - "nodeType": "YulExpressionStatement", - "src": "369:18:43" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "_1", - "nativeSrc": "359:2:43", - "nodeType": "YulIdentifier", - "src": "359:2:43" - }, - { - "name": "_2", - "nativeSrc": "363:2:43", - "nodeType": "YulIdentifier", - "src": "363:2:43" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "356:2:43", - "nodeType": "YulIdentifier", - "src": "356:2:43" - }, - "nativeSrc": "356:10:43", - "nodeType": "YulFunctionCall", - "src": "356:10:43" - }, - "nativeSrc": "353:36:43", - "nodeType": "YulIf", - "src": "353:36:43" - }, - { - "nativeSrc": "398:17:43", - "nodeType": "YulVariableDeclaration", - "src": "398:17:43", - "value": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "412:2:43", - "nodeType": "YulLiteral", - "src": "412:2:43", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "not", - "nativeSrc": "408:3:43", - "nodeType": "YulIdentifier", - "src": "408:3:43" - }, - "nativeSrc": "408:7:43", - "nodeType": "YulFunctionCall", - "src": "408:7:43" - }, - "variables": [ - { - "name": "_3", - "nativeSrc": "402:2:43", - "nodeType": "YulTypedName", - "src": "402:2:43", - "type": "" - } - ] - }, - { - "nativeSrc": "424:23:43", - "nodeType": "YulVariableDeclaration", - "src": "424:23:43", - "value": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "444:2:43", - "nodeType": "YulLiteral", - "src": "444:2:43", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "438:5:43", - "nodeType": "YulIdentifier", - "src": "438:5:43" - }, - "nativeSrc": "438:9:43", - "nodeType": "YulFunctionCall", - "src": "438:9:43" - }, - "variables": [ - { - "name": "memPtr", - "nativeSrc": "428:6:43", - "nodeType": "YulTypedName", - "src": "428:6:43", - "type": "" - } - ] - }, - { - "nativeSrc": "456:71:43", - "nodeType": "YulVariableDeclaration", - "src": "456:71:43", - "value": { - "arguments": [ - { - "name": "memPtr", - "nativeSrc": "478:6:43", - "nodeType": "YulIdentifier", - "src": "478:6:43" - }, - { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "_1", - "nativeSrc": "502:2:43", - "nodeType": "YulIdentifier", - "src": "502:2:43" - }, - { - "kind": "number", - "nativeSrc": "506:4:43", - "nodeType": "YulLiteral", - "src": "506:4:43", - "type": "", - "value": "0x1f" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "498:3:43", - "nodeType": "YulIdentifier", - "src": "498:3:43" - }, - "nativeSrc": "498:13:43", - "nodeType": "YulFunctionCall", - "src": "498:13:43" - }, - { - "name": "_3", - "nativeSrc": "513:2:43", - "nodeType": "YulIdentifier", - "src": "513:2:43" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "494:3:43", - "nodeType": "YulIdentifier", - "src": "494:3:43" - }, - "nativeSrc": "494:22:43", - "nodeType": "YulFunctionCall", - "src": "494:22:43" - }, - { - "kind": "number", - "nativeSrc": "518:2:43", - "nodeType": "YulLiteral", - "src": "518:2:43", - "type": "", - "value": "63" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "490:3:43", - "nodeType": "YulIdentifier", - "src": "490:3:43" - }, - "nativeSrc": "490:31:43", - "nodeType": "YulFunctionCall", - "src": "490:31:43" - }, - { - "name": "_3", - "nativeSrc": "523:2:43", - "nodeType": "YulIdentifier", - "src": "523:2:43" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "486:3:43", - "nodeType": "YulIdentifier", - "src": "486:3:43" - }, - "nativeSrc": "486:40:43", - "nodeType": "YulFunctionCall", - "src": "486:40:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "474:3:43", - "nodeType": "YulIdentifier", - "src": "474:3:43" - }, - "nativeSrc": "474:53:43", - "nodeType": "YulFunctionCall", - "src": "474:53:43" - }, - "variables": [ - { - "name": "newFreePtr", - "nativeSrc": "460:10:43", - "nodeType": "YulTypedName", - "src": "460:10:43", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "586:22:43", - "nodeType": "YulBlock", - "src": "586:22:43", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x41", - "nativeSrc": "588:16:43", - "nodeType": "YulIdentifier", - "src": "588:16:43" - }, - "nativeSrc": "588:18:43", - "nodeType": "YulFunctionCall", - "src": "588:18:43" - }, - "nativeSrc": "588:18:43", - "nodeType": "YulExpressionStatement", - "src": "588:18:43" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "newFreePtr", - "nativeSrc": "545:10:43", - "nodeType": "YulIdentifier", - "src": "545:10:43" - }, - { - "name": "_2", - "nativeSrc": "557:2:43", - "nodeType": "YulIdentifier", - "src": "557:2:43" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "542:2:43", - "nodeType": "YulIdentifier", - "src": "542:2:43" - }, - "nativeSrc": "542:18:43", - "nodeType": "YulFunctionCall", - "src": "542:18:43" - }, - { - "arguments": [ - { - "name": "newFreePtr", - "nativeSrc": "565:10:43", - "nodeType": "YulIdentifier", - "src": "565:10:43" - }, - { - "name": "memPtr", - "nativeSrc": "577:6:43", - "nodeType": "YulIdentifier", - "src": "577:6:43" - } - ], - "functionName": { - "name": "lt", - "nativeSrc": "562:2:43", - "nodeType": "YulIdentifier", - "src": "562:2:43" - }, - "nativeSrc": "562:22:43", - "nodeType": "YulFunctionCall", - "src": "562:22:43" - } - ], - "functionName": { - "name": "or", - "nativeSrc": "539:2:43", - "nodeType": "YulIdentifier", - "src": "539:2:43" - }, - "nativeSrc": "539:46:43", - "nodeType": "YulFunctionCall", - "src": "539:46:43" - }, - "nativeSrc": "536:72:43", - "nodeType": "YulIf", - "src": "536:72:43" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "624:2:43", - "nodeType": "YulLiteral", - "src": "624:2:43", - "type": "", - "value": "64" - }, - { - "name": "newFreePtr", - "nativeSrc": "628:10:43", - "nodeType": "YulIdentifier", - "src": "628:10:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "617:6:43", - "nodeType": "YulIdentifier", - "src": "617:6:43" - }, - "nativeSrc": "617:22:43", - "nodeType": "YulFunctionCall", - "src": "617:22:43" - }, - "nativeSrc": "617:22:43", - "nodeType": "YulExpressionStatement", - "src": "617:22:43" - }, - { - "expression": { - "arguments": [ - { - "name": "memPtr", - "nativeSrc": "655:6:43", - "nodeType": "YulIdentifier", - "src": "655:6:43" - }, - { - "name": "_1", - "nativeSrc": "663:2:43", - "nodeType": "YulIdentifier", - "src": "663:2:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "648:6:43", - "nodeType": "YulIdentifier", - "src": "648:6:43" - }, - "nativeSrc": "648:18:43", - "nodeType": "YulFunctionCall", - "src": "648:18:43" - }, - "nativeSrc": "648:18:43", - "nodeType": "YulExpressionStatement", - "src": "648:18:43" - }, - { - "nativeSrc": "675:14:43", - "nodeType": "YulVariableDeclaration", - "src": "675:14:43", - "value": { - "kind": "number", - "nativeSrc": "685:4:43", - "nodeType": "YulLiteral", - "src": "685:4:43", - "type": "", - "value": "0x20" - }, - "variables": [ - { - "name": "_4", - "nativeSrc": "679:2:43", - "nodeType": "YulTypedName", - "src": "679:2:43", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "737:16:43", - "nodeType": "YulBlock", - "src": "737:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "746:1:43", - "nodeType": "YulLiteral", - "src": "746:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "749:1:43", - "nodeType": "YulLiteral", - "src": "749:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "739:6:43", - "nodeType": "YulIdentifier", - "src": "739:6:43" - }, - "nativeSrc": "739:12:43", - "nodeType": "YulFunctionCall", - "src": "739:12:43" - }, - "nativeSrc": "739:12:43", - "nodeType": "YulExpressionStatement", - "src": "739:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "offset", - "nativeSrc": "712:6:43", - "nodeType": "YulIdentifier", - "src": "712:6:43" - }, - { - "name": "_1", - "nativeSrc": "720:2:43", - "nodeType": "YulIdentifier", - "src": "720:2:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "708:3:43", - "nodeType": "YulIdentifier", - "src": "708:3:43" - }, - "nativeSrc": "708:15:43", - "nodeType": "YulFunctionCall", - "src": "708:15:43" - }, - { - "kind": "number", - "nativeSrc": "725:4:43", - "nodeType": "YulLiteral", - "src": "725:4:43", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "704:3:43", - "nodeType": "YulIdentifier", - "src": "704:3:43" - }, - "nativeSrc": "704:26:43", - "nodeType": "YulFunctionCall", - "src": "704:26:43" - }, - { - "name": "end", - "nativeSrc": "732:3:43", - "nodeType": "YulIdentifier", - "src": "732:3:43" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "701:2:43", - "nodeType": "YulIdentifier", - "src": "701:2:43" - }, - "nativeSrc": "701:35:43", - "nodeType": "YulFunctionCall", - "src": "701:35:43" - }, - "nativeSrc": "698:55:43", - "nodeType": "YulIf", - "src": "698:55:43" - }, - { - "nativeSrc": "762:10:43", - "nodeType": "YulVariableDeclaration", - "src": "762:10:43", - "value": { - "kind": "number", - "nativeSrc": "771:1:43", - "nodeType": "YulLiteral", - "src": "771:1:43", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "i", - "nativeSrc": "766:1:43", - "nodeType": "YulTypedName", - "src": "766:1:43", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "827:87:43", - "nodeType": "YulBlock", - "src": "827:87:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "memPtr", - "nativeSrc": "856:6:43", - "nodeType": "YulIdentifier", - "src": "856:6:43" - }, - { - "name": "i", - "nativeSrc": "864:1:43", - "nodeType": "YulIdentifier", - "src": "864:1:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "852:3:43", - "nodeType": "YulIdentifier", - "src": "852:3:43" - }, - "nativeSrc": "852:14:43", - "nodeType": "YulFunctionCall", - "src": "852:14:43" - }, - { - "name": "_4", - "nativeSrc": "868:2:43", - "nodeType": "YulIdentifier", - "src": "868:2:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "848:3:43", - "nodeType": "YulIdentifier", - "src": "848:3:43" - }, - "nativeSrc": "848:23:43", - "nodeType": "YulFunctionCall", - "src": "848:23:43" - }, - { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "offset", - "nativeSrc": "887:6:43", - "nodeType": "YulIdentifier", - "src": "887:6:43" - }, - { - "name": "i", - "nativeSrc": "895:1:43", - "nodeType": "YulIdentifier", - "src": "895:1:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "883:3:43", - "nodeType": "YulIdentifier", - "src": "883:3:43" - }, - "nativeSrc": "883:14:43", - "nodeType": "YulFunctionCall", - "src": "883:14:43" - }, - { - "name": "_4", - "nativeSrc": "899:2:43", - "nodeType": "YulIdentifier", - "src": "899:2:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "879:3:43", - "nodeType": "YulIdentifier", - "src": "879:3:43" - }, - "nativeSrc": "879:23:43", - "nodeType": "YulFunctionCall", - "src": "879:23:43" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "873:5:43", - "nodeType": "YulIdentifier", - "src": "873:5:43" - }, - "nativeSrc": "873:30:43", - "nodeType": "YulFunctionCall", - "src": "873:30:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "841:6:43", - "nodeType": "YulIdentifier", - "src": "841:6:43" - }, - "nativeSrc": "841:63:43", - "nodeType": "YulFunctionCall", - "src": "841:63:43" - }, - "nativeSrc": "841:63:43", - "nodeType": "YulExpressionStatement", - "src": "841:63:43" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nativeSrc": "792:1:43", - "nodeType": "YulIdentifier", - "src": "792:1:43" - }, - { - "name": "_1", - "nativeSrc": "795:2:43", - "nodeType": "YulIdentifier", - "src": "795:2:43" - } - ], - "functionName": { - "name": "lt", - "nativeSrc": "789:2:43", - "nodeType": "YulIdentifier", - "src": "789:2:43" - }, - "nativeSrc": "789:9:43", - "nodeType": "YulFunctionCall", - "src": "789:9:43" - }, - "nativeSrc": "781:133:43", - "nodeType": "YulForLoop", - "post": { - "nativeSrc": "799:19:43", - "nodeType": "YulBlock", - "src": "799:19:43", - "statements": [ - { - "nativeSrc": "801:15:43", - "nodeType": "YulAssignment", - "src": "801:15:43", - "value": { - "arguments": [ - { - "name": "i", - "nativeSrc": "810:1:43", - "nodeType": "YulIdentifier", - "src": "810:1:43" - }, - { - "name": "_4", - "nativeSrc": "813:2:43", - "nodeType": "YulIdentifier", - "src": "813:2:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "806:3:43", - "nodeType": "YulIdentifier", - "src": "806:3:43" - }, - "nativeSrc": "806:10:43", - "nodeType": "YulFunctionCall", - "src": "806:10:43" - }, - "variableNames": [ - { - "name": "i", - "nativeSrc": "801:1:43", - "nodeType": "YulIdentifier", - "src": "801:1:43" - } - ] - } - ] - }, - "pre": { - "nativeSrc": "785:3:43", - "nodeType": "YulBlock", - "src": "785:3:43", - "statements": [] - }, - "src": "781:133:43" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "memPtr", - "nativeSrc": "938:6:43", - "nodeType": "YulIdentifier", - "src": "938:6:43" - }, - { - "name": "_1", - "nativeSrc": "946:2:43", - "nodeType": "YulIdentifier", - "src": "946:2:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "934:3:43", - "nodeType": "YulIdentifier", - "src": "934:3:43" - }, - "nativeSrc": "934:15:43", - "nodeType": "YulFunctionCall", - "src": "934:15:43" - }, - { - "kind": "number", - "nativeSrc": "951:4:43", - "nodeType": "YulLiteral", - "src": "951:4:43", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "930:3:43", - "nodeType": "YulIdentifier", - "src": "930:3:43" - }, - "nativeSrc": "930:26:43", - "nodeType": "YulFunctionCall", - "src": "930:26:43" - }, - { - "kind": "number", - "nativeSrc": "958:1:43", - "nodeType": "YulLiteral", - "src": "958:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "923:6:43", - "nodeType": "YulIdentifier", - "src": "923:6:43" - }, - "nativeSrc": "923:37:43", - "nodeType": "YulFunctionCall", - "src": "923:37:43" - }, - "nativeSrc": "923:37:43", - "nodeType": "YulExpressionStatement", - "src": "923:37:43" - }, - { - "nativeSrc": "969:15:43", - "nodeType": "YulAssignment", - "src": "969:15:43", - "value": { - "name": "memPtr", - "nativeSrc": "978:6:43", - "nodeType": "YulIdentifier", - "src": "978:6:43" - }, - "variableNames": [ - { - "name": "array", - "nativeSrc": "969:5:43", - "nodeType": "YulIdentifier", - "src": "969:5:43" - } - ] - } - ] - }, - "name": "abi_decode_string_fromMemory", - "nativeSrc": "146:844:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "offset", - "nativeSrc": "184:6:43", - "nodeType": "YulTypedName", - "src": "184:6:43", - "type": "" - }, - { - "name": "end", - "nativeSrc": "192:3:43", - "nodeType": "YulTypedName", - "src": "192:3:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "array", - "nativeSrc": "200:5:43", - "nodeType": "YulTypedName", - "src": "200:5:43", - "type": "" - } - ], - "src": "146:844:43" - }, - { - "body": { - "nativeSrc": "1055:117:43", - "nodeType": "YulBlock", - "src": "1055:117:43", - "statements": [ - { - "nativeSrc": "1065:22:43", - "nodeType": "YulAssignment", - "src": "1065:22:43", - "value": { - "arguments": [ - { - "name": "offset", - "nativeSrc": "1080:6:43", - "nodeType": "YulIdentifier", - "src": "1080:6:43" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "1074:5:43", - "nodeType": "YulIdentifier", - "src": "1074:5:43" - }, - "nativeSrc": "1074:13:43", - "nodeType": "YulFunctionCall", - "src": "1074:13:43" - }, - "variableNames": [ - { - "name": "value", - "nativeSrc": "1065:5:43", - "nodeType": "YulIdentifier", - "src": "1065:5:43" - } - ] - }, - { - "body": { - "nativeSrc": "1150:16:43", - "nodeType": "YulBlock", - "src": "1150:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "1159:1:43", - "nodeType": "YulLiteral", - "src": "1159:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "1162:1:43", - "nodeType": "YulLiteral", - "src": "1162:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "1152:6:43", - "nodeType": "YulIdentifier", - "src": "1152:6:43" - }, - "nativeSrc": "1152:12:43", - "nodeType": "YulFunctionCall", - "src": "1152:12:43" - }, - "nativeSrc": "1152:12:43", - "nodeType": "YulExpressionStatement", - "src": "1152:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nativeSrc": "1109:5:43", - "nodeType": "YulIdentifier", - "src": "1109:5:43" - }, - { - "arguments": [ - { - "name": "value", - "nativeSrc": "1120:5:43", - "nodeType": "YulIdentifier", - "src": "1120:5:43" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "1135:3:43", - "nodeType": "YulLiteral", - "src": "1135:3:43", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nativeSrc": "1140:1:43", - "nodeType": "YulLiteral", - "src": "1140:1:43", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "1131:3:43", - "nodeType": "YulIdentifier", - "src": "1131:3:43" - }, - "nativeSrc": "1131:11:43", - "nodeType": "YulFunctionCall", - "src": "1131:11:43" - }, - { - "kind": "number", - "nativeSrc": "1144:1:43", - "nodeType": "YulLiteral", - "src": "1144:1:43", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "1127:3:43", - "nodeType": "YulIdentifier", - "src": "1127:3:43" - }, - "nativeSrc": "1127:19:43", - "nodeType": "YulFunctionCall", - "src": "1127:19:43" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "1116:3:43", - "nodeType": "YulIdentifier", - "src": "1116:3:43" - }, - "nativeSrc": "1116:31:43", - "nodeType": "YulFunctionCall", - "src": "1116:31:43" - } - ], - "functionName": { - "name": "eq", - "nativeSrc": "1106:2:43", - "nodeType": "YulIdentifier", - "src": "1106:2:43" - }, - "nativeSrc": "1106:42:43", - "nodeType": "YulFunctionCall", - "src": "1106:42:43" - } - ], - "functionName": { - "name": "iszero", - "nativeSrc": "1099:6:43", - "nodeType": "YulIdentifier", - "src": "1099:6:43" - }, - "nativeSrc": "1099:50:43", - "nodeType": "YulFunctionCall", - "src": "1099:50:43" - }, - "nativeSrc": "1096:70:43", - "nodeType": "YulIf", - "src": "1096:70:43" - } - ] - }, - "name": "abi_decode_address_fromMemory", - "nativeSrc": "995:177:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "offset", - "nativeSrc": "1034:6:43", - "nodeType": "YulTypedName", - "src": "1034:6:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value", - "nativeSrc": "1045:5:43", - "nodeType": "YulTypedName", - "src": "1045:5:43", - "type": "" - } - ], - "src": "995:177:43" - }, - { - "body": { - "nativeSrc": "1329:581:43", - "nodeType": "YulBlock", - "src": "1329:581:43", - "statements": [ - { - "body": { - "nativeSrc": "1376:16:43", - "nodeType": "YulBlock", - "src": "1376:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "1385:1:43", - "nodeType": "YulLiteral", - "src": "1385:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "1388:1:43", - "nodeType": "YulLiteral", - "src": "1388:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "1378:6:43", - "nodeType": "YulIdentifier", - "src": "1378:6:43" - }, - "nativeSrc": "1378:12:43", - "nodeType": "YulFunctionCall", - "src": "1378:12:43" - }, - "nativeSrc": "1378:12:43", - "nodeType": "YulExpressionStatement", - "src": "1378:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nativeSrc": "1350:7:43", - "nodeType": "YulIdentifier", - "src": "1350:7:43" - }, - { - "name": "headStart", - "nativeSrc": "1359:9:43", - "nodeType": "YulIdentifier", - "src": "1359:9:43" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "1346:3:43", - "nodeType": "YulIdentifier", - "src": "1346:3:43" - }, - "nativeSrc": "1346:23:43", - "nodeType": "YulFunctionCall", - "src": "1346:23:43" - }, - { - "kind": "number", - "nativeSrc": "1371:3:43", - "nodeType": "YulLiteral", - "src": "1371:3:43", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "1342:3:43", - "nodeType": "YulIdentifier", - "src": "1342:3:43" - }, - "nativeSrc": "1342:33:43", - "nodeType": "YulFunctionCall", - "src": "1342:33:43" - }, - "nativeSrc": "1339:53:43", - "nodeType": "YulIf", - "src": "1339:53:43" - }, - { - "nativeSrc": "1401:30:43", - "nodeType": "YulVariableDeclaration", - "src": "1401:30:43", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "1421:9:43", - "nodeType": "YulIdentifier", - "src": "1421:9:43" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "1415:5:43", - "nodeType": "YulIdentifier", - "src": "1415:5:43" - }, - "nativeSrc": "1415:16:43", - "nodeType": "YulFunctionCall", - "src": "1415:16:43" - }, - "variables": [ - { - "name": "offset", - "nativeSrc": "1405:6:43", - "nodeType": "YulTypedName", - "src": "1405:6:43", - "type": "" - } - ] - }, - { - "nativeSrc": "1440:28:43", - "nodeType": "YulVariableDeclaration", - "src": "1440:28:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "1458:2:43", - "nodeType": "YulLiteral", - "src": "1458:2:43", - "type": "", - "value": "64" - }, - { - "kind": "number", - "nativeSrc": "1462:1:43", - "nodeType": "YulLiteral", - "src": "1462:1:43", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "1454:3:43", - "nodeType": "YulIdentifier", - "src": "1454:3:43" - }, - "nativeSrc": "1454:10:43", - "nodeType": "YulFunctionCall", - "src": "1454:10:43" - }, - { - "kind": "number", - "nativeSrc": "1466:1:43", - "nodeType": "YulLiteral", - "src": "1466:1:43", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "1450:3:43", - "nodeType": "YulIdentifier", - "src": "1450:3:43" - }, - "nativeSrc": "1450:18:43", - "nodeType": "YulFunctionCall", - "src": "1450:18:43" - }, - "variables": [ - { - "name": "_1", - "nativeSrc": "1444:2:43", - "nodeType": "YulTypedName", - "src": "1444:2:43", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "1495:16:43", - "nodeType": "YulBlock", - "src": "1495:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "1504:1:43", - "nodeType": "YulLiteral", - "src": "1504:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "1507:1:43", - "nodeType": "YulLiteral", - "src": "1507:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "1497:6:43", - "nodeType": "YulIdentifier", - "src": "1497:6:43" - }, - "nativeSrc": "1497:12:43", - "nodeType": "YulFunctionCall", - "src": "1497:12:43" - }, - "nativeSrc": "1497:12:43", - "nodeType": "YulExpressionStatement", - "src": "1497:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "offset", - "nativeSrc": "1483:6:43", - "nodeType": "YulIdentifier", - "src": "1483:6:43" - }, - { - "name": "_1", - "nativeSrc": "1491:2:43", - "nodeType": "YulIdentifier", - "src": "1491:2:43" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "1480:2:43", - "nodeType": "YulIdentifier", - "src": "1480:2:43" - }, - "nativeSrc": "1480:14:43", - "nodeType": "YulFunctionCall", - "src": "1480:14:43" - }, - "nativeSrc": "1477:34:43", - "nodeType": "YulIf", - "src": "1477:34:43" - }, - { - "nativeSrc": "1520:71:43", - "nodeType": "YulAssignment", - "src": "1520:71:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "1563:9:43", - "nodeType": "YulIdentifier", - "src": "1563:9:43" - }, - { - "name": "offset", - "nativeSrc": "1574:6:43", - "nodeType": "YulIdentifier", - "src": "1574:6:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "1559:3:43", - "nodeType": "YulIdentifier", - "src": "1559:3:43" - }, - "nativeSrc": "1559:22:43", - "nodeType": "YulFunctionCall", - "src": "1559:22:43" - }, - { - "name": "dataEnd", - "nativeSrc": "1583:7:43", - "nodeType": "YulIdentifier", - "src": "1583:7:43" - } - ], - "functionName": { - "name": "abi_decode_string_fromMemory", - "nativeSrc": "1530:28:43", - "nodeType": "YulIdentifier", - "src": "1530:28:43" - }, - "nativeSrc": "1530:61:43", - "nodeType": "YulFunctionCall", - "src": "1530:61:43" - }, - "variableNames": [ - { - "name": "value0", - "nativeSrc": "1520:6:43", - "nodeType": "YulIdentifier", - "src": "1520:6:43" - } - ] - }, - { - "nativeSrc": "1600:41:43", - "nodeType": "YulVariableDeclaration", - "src": "1600:41:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "1626:9:43", - "nodeType": "YulIdentifier", - "src": "1626:9:43" - }, - { - "kind": "number", - "nativeSrc": "1637:2:43", - "nodeType": "YulLiteral", - "src": "1637:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "1622:3:43", - "nodeType": "YulIdentifier", - "src": "1622:3:43" - }, - "nativeSrc": "1622:18:43", - "nodeType": "YulFunctionCall", - "src": "1622:18:43" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "1616:5:43", - "nodeType": "YulIdentifier", - "src": "1616:5:43" - }, - "nativeSrc": "1616:25:43", - "nodeType": "YulFunctionCall", - "src": "1616:25:43" - }, - "variables": [ - { - "name": "offset_1", - "nativeSrc": "1604:8:43", - "nodeType": "YulTypedName", - "src": "1604:8:43", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "1670:16:43", - "nodeType": "YulBlock", - "src": "1670:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "1679:1:43", - "nodeType": "YulLiteral", - "src": "1679:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "1682:1:43", - "nodeType": "YulLiteral", - "src": "1682:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "1672:6:43", - "nodeType": "YulIdentifier", - "src": "1672:6:43" - }, - "nativeSrc": "1672:12:43", - "nodeType": "YulFunctionCall", - "src": "1672:12:43" - }, - "nativeSrc": "1672:12:43", - "nodeType": "YulExpressionStatement", - "src": "1672:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "offset_1", - "nativeSrc": "1656:8:43", - "nodeType": "YulIdentifier", - "src": "1656:8:43" - }, - { - "name": "_1", - "nativeSrc": "1666:2:43", - "nodeType": "YulIdentifier", - "src": "1666:2:43" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "1653:2:43", - "nodeType": "YulIdentifier", - "src": "1653:2:43" - }, - "nativeSrc": "1653:16:43", - "nodeType": "YulFunctionCall", - "src": "1653:16:43" - }, - "nativeSrc": "1650:36:43", - "nodeType": "YulIf", - "src": "1650:36:43" - }, - { - "nativeSrc": "1695:73:43", - "nodeType": "YulAssignment", - "src": "1695:73:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "1738:9:43", - "nodeType": "YulIdentifier", - "src": "1738:9:43" - }, - { - "name": "offset_1", - "nativeSrc": "1749:8:43", - "nodeType": "YulIdentifier", - "src": "1749:8:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "1734:3:43", - "nodeType": "YulIdentifier", - "src": "1734:3:43" - }, - "nativeSrc": "1734:24:43", - "nodeType": "YulFunctionCall", - "src": "1734:24:43" - }, - { - "name": "dataEnd", - "nativeSrc": "1760:7:43", - "nodeType": "YulIdentifier", - "src": "1760:7:43" - } - ], - "functionName": { - "name": "abi_decode_string_fromMemory", - "nativeSrc": "1705:28:43", - "nodeType": "YulIdentifier", - "src": "1705:28:43" - }, - "nativeSrc": "1705:63:43", - "nodeType": "YulFunctionCall", - "src": "1705:63:43" - }, - "variableNames": [ - { - "name": "value1", - "nativeSrc": "1695:6:43", - "nodeType": "YulIdentifier", - "src": "1695:6:43" - } - ] - }, - { - "nativeSrc": "1777:59:43", - "nodeType": "YulAssignment", - "src": "1777:59:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "1821:9:43", - "nodeType": "YulIdentifier", - "src": "1821:9:43" - }, - { - "kind": "number", - "nativeSrc": "1832:2:43", - "nodeType": "YulLiteral", - "src": "1832:2:43", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "1817:3:43", - "nodeType": "YulIdentifier", - "src": "1817:3:43" - }, - "nativeSrc": "1817:18:43", - "nodeType": "YulFunctionCall", - "src": "1817:18:43" - } - ], - "functionName": { - "name": "abi_decode_address_fromMemory", - "nativeSrc": "1787:29:43", - "nodeType": "YulIdentifier", - "src": "1787:29:43" - }, - "nativeSrc": "1787:49:43", - "nodeType": "YulFunctionCall", - "src": "1787:49:43" - }, - "variableNames": [ - { - "name": "value2", - "nativeSrc": "1777:6:43", - "nodeType": "YulIdentifier", - "src": "1777:6:43" - } - ] - }, - { - "nativeSrc": "1845:59:43", - "nodeType": "YulAssignment", - "src": "1845:59:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "1889:9:43", - "nodeType": "YulIdentifier", - "src": "1889:9:43" - }, - { - "kind": "number", - "nativeSrc": "1900:2:43", - "nodeType": "YulLiteral", - "src": "1900:2:43", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "1885:3:43", - "nodeType": "YulIdentifier", - "src": "1885:3:43" - }, - "nativeSrc": "1885:18:43", - "nodeType": "YulFunctionCall", - "src": "1885:18:43" - } - ], - "functionName": { - "name": "abi_decode_address_fromMemory", - "nativeSrc": "1855:29:43", - "nodeType": "YulIdentifier", - "src": "1855:29:43" - }, - "nativeSrc": "1855:49:43", - "nodeType": "YulFunctionCall", - "src": "1855:49:43" - }, - "variableNames": [ - { - "name": "value3", - "nativeSrc": "1845:6:43", - "nodeType": "YulIdentifier", - "src": "1845:6:43" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_string_memory_ptrt_string_memory_ptrt_addresst_address_fromMemory", - "nativeSrc": "1177:733:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "1271:9:43", - "nodeType": "YulTypedName", - "src": "1271:9:43", - "type": "" - }, - { - "name": "dataEnd", - "nativeSrc": "1282:7:43", - "nodeType": "YulTypedName", - "src": "1282:7:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nativeSrc": "1294:6:43", - "nodeType": "YulTypedName", - "src": "1294:6:43", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "1302:6:43", - "nodeType": "YulTypedName", - "src": "1302:6:43", - "type": "" - }, - { - "name": "value2", - "nativeSrc": "1310:6:43", - "nodeType": "YulTypedName", - "src": "1310:6:43", - "type": "" - }, - { - "name": "value3", - "nativeSrc": "1318:6:43", - "nodeType": "YulTypedName", - "src": "1318:6:43", - "type": "" - } - ], - "src": "1177:733:43" - }, - { - "body": { - "nativeSrc": "2016:102:43", - "nodeType": "YulBlock", - "src": "2016:102:43", - "statements": [ - { - "nativeSrc": "2026:26:43", - "nodeType": "YulAssignment", - "src": "2026:26:43", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "2038:9:43", - "nodeType": "YulIdentifier", - "src": "2038:9:43" - }, - { - "kind": "number", - "nativeSrc": "2049:2:43", - "nodeType": "YulLiteral", - "src": "2049:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "2034:3:43", - "nodeType": "YulIdentifier", - "src": "2034:3:43" - }, - "nativeSrc": "2034:18:43", - "nodeType": "YulFunctionCall", - "src": "2034:18:43" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "2026:4:43", - "nodeType": "YulIdentifier", - "src": "2026:4:43" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "2068:9:43", - "nodeType": "YulIdentifier", - "src": "2068:9:43" - }, - { - "arguments": [ - { - "name": "value0", - "nativeSrc": "2083:6:43", - "nodeType": "YulIdentifier", - "src": "2083:6:43" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "2099:3:43", - "nodeType": "YulLiteral", - "src": "2099:3:43", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nativeSrc": "2104:1:43", - "nodeType": "YulLiteral", - "src": "2104:1:43", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "2095:3:43", - "nodeType": "YulIdentifier", - "src": "2095:3:43" - }, - "nativeSrc": "2095:11:43", - "nodeType": "YulFunctionCall", - "src": "2095:11:43" - }, - { - "kind": "number", - "nativeSrc": "2108:1:43", - "nodeType": "YulLiteral", - "src": "2108:1:43", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "2091:3:43", - "nodeType": "YulIdentifier", - "src": "2091:3:43" - }, - "nativeSrc": "2091:19:43", - "nodeType": "YulFunctionCall", - "src": "2091:19:43" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "2079:3:43", - "nodeType": "YulIdentifier", - "src": "2079:3:43" - }, - "nativeSrc": "2079:32:43", - "nodeType": "YulFunctionCall", - "src": "2079:32:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "2061:6:43", - "nodeType": "YulIdentifier", - "src": "2061:6:43" - }, - "nativeSrc": "2061:51:43", - "nodeType": "YulFunctionCall", - "src": "2061:51:43" - }, - "nativeSrc": "2061:51:43", - "nodeType": "YulExpressionStatement", - "src": "2061:51:43" - } - ] - }, - "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed", - "nativeSrc": "1915:203:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "1985:9:43", - "nodeType": "YulTypedName", - "src": "1985:9:43", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "1996:6:43", - "nodeType": "YulTypedName", - "src": "1996:6:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "2007:4:43", - "nodeType": "YulTypedName", - "src": "2007:4:43", - "type": "" - } - ], - "src": "1915:203:43" - }, - { - "body": { - "nativeSrc": "2155:95:43", - "nodeType": "YulBlock", - "src": "2155:95:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "2172:1:43", - "nodeType": "YulLiteral", - "src": "2172:1:43", - "type": "", - "value": "0" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "2179:3:43", - "nodeType": "YulLiteral", - "src": "2179:3:43", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nativeSrc": "2184:10:43", - "nodeType": "YulLiteral", - "src": "2184:10:43", - "type": "", - "value": "0x4e487b71" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "2175:3:43", - "nodeType": "YulIdentifier", - "src": "2175:3:43" - }, - "nativeSrc": "2175:20:43", - "nodeType": "YulFunctionCall", - "src": "2175:20:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "2165:6:43", - "nodeType": "YulIdentifier", - "src": "2165:6:43" - }, - "nativeSrc": "2165:31:43", - "nodeType": "YulFunctionCall", - "src": "2165:31:43" - }, - "nativeSrc": "2165:31:43", - "nodeType": "YulExpressionStatement", - "src": "2165:31:43" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "2212:1:43", - "nodeType": "YulLiteral", - "src": "2212:1:43", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nativeSrc": "2215:4:43", - "nodeType": "YulLiteral", - "src": "2215:4:43", - "type": "", - "value": "0x11" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "2205:6:43", - "nodeType": "YulIdentifier", - "src": "2205:6:43" - }, - "nativeSrc": "2205:15:43", - "nodeType": "YulFunctionCall", - "src": "2205:15:43" - }, - "nativeSrc": "2205:15:43", - "nodeType": "YulExpressionStatement", - "src": "2205:15:43" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "2236:1:43", - "nodeType": "YulLiteral", - "src": "2236:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "2239:4:43", - "nodeType": "YulLiteral", - "src": "2239:4:43", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "2229:6:43", - "nodeType": "YulIdentifier", - "src": "2229:6:43" - }, - "nativeSrc": "2229:15:43", - "nodeType": "YulFunctionCall", - "src": "2229:15:43" - }, - "nativeSrc": "2229:15:43", - "nodeType": "YulExpressionStatement", - "src": "2229:15:43" - } - ] - }, - "name": "panic_error_0x11", - "nativeSrc": "2123:127:43", - "nodeType": "YulFunctionDefinition", - "src": "2123:127:43" - }, - { - "body": { - "nativeSrc": "2302:104:43", - "nodeType": "YulBlock", - "src": "2302:104:43", - "statements": [ - { - "nativeSrc": "2312:39:43", - "nodeType": "YulAssignment", - "src": "2312:39:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "x", - "nativeSrc": "2328:1:43", - "nodeType": "YulIdentifier", - "src": "2328:1:43" - }, - { - "kind": "number", - "nativeSrc": "2331:4:43", - "nodeType": "YulLiteral", - "src": "2331:4:43", - "type": "", - "value": "0xff" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "2324:3:43", - "nodeType": "YulIdentifier", - "src": "2324:3:43" - }, - "nativeSrc": "2324:12:43", - "nodeType": "YulFunctionCall", - "src": "2324:12:43" - }, - { - "arguments": [ - { - "name": "y", - "nativeSrc": "2342:1:43", - "nodeType": "YulIdentifier", - "src": "2342:1:43" - }, - { - "kind": "number", - "nativeSrc": "2345:4:43", - "nodeType": "YulLiteral", - "src": "2345:4:43", - "type": "", - "value": "0xff" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "2338:3:43", - "nodeType": "YulIdentifier", - "src": "2338:3:43" - }, - "nativeSrc": "2338:12:43", - "nodeType": "YulFunctionCall", - "src": "2338:12:43" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "2320:3:43", - "nodeType": "YulIdentifier", - "src": "2320:3:43" - }, - "nativeSrc": "2320:31:43", - "nodeType": "YulFunctionCall", - "src": "2320:31:43" - }, - "variableNames": [ - { - "name": "diff", - "nativeSrc": "2312:4:43", - "nodeType": "YulIdentifier", - "src": "2312:4:43" - } - ] - }, - { - "body": { - "nativeSrc": "2378:22:43", - "nodeType": "YulBlock", - "src": "2378:22:43", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x11", - "nativeSrc": "2380:16:43", - "nodeType": "YulIdentifier", - "src": "2380:16:43" - }, - "nativeSrc": "2380:18:43", - "nodeType": "YulFunctionCall", - "src": "2380:18:43" - }, - "nativeSrc": "2380:18:43", - "nodeType": "YulExpressionStatement", - "src": "2380:18:43" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "diff", - "nativeSrc": "2366:4:43", - "nodeType": "YulIdentifier", - "src": "2366:4:43" - }, - { - "kind": "number", - "nativeSrc": "2372:4:43", - "nodeType": "YulLiteral", - "src": "2372:4:43", - "type": "", - "value": "0xff" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "2363:2:43", - "nodeType": "YulIdentifier", - "src": "2363:2:43" - }, - "nativeSrc": "2363:14:43", - "nodeType": "YulFunctionCall", - "src": "2363:14:43" - }, - "nativeSrc": "2360:40:43", - "nodeType": "YulIf", - "src": "2360:40:43" - } - ] - }, - "name": "checked_sub_t_uint8", - "nativeSrc": "2255:151:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "x", - "nativeSrc": "2284:1:43", - "nodeType": "YulTypedName", - "src": "2284:1:43", - "type": "" - }, - { - "name": "y", - "nativeSrc": "2287:1:43", - "nodeType": "YulTypedName", - "src": "2287:1:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "diff", - "nativeSrc": "2293:4:43", - "nodeType": "YulTypedName", - "src": "2293:4:43", - "type": "" - } - ], - "src": "2255:151:43" - }, - { - "body": { - "nativeSrc": "2475:352:43", - "nodeType": "YulBlock", - "src": "2475:352:43", - "statements": [ - { - "nativeSrc": "2485:16:43", - "nodeType": "YulVariableDeclaration", - "src": "2485:16:43", - "value": { - "kind": "number", - "nativeSrc": "2500:1:43", - "nodeType": "YulLiteral", - "src": "2500:1:43", - "type": "", - "value": "1" - }, - "variables": [ - { - "name": "power_1", - "nativeSrc": "2489:7:43", - "nodeType": "YulTypedName", - "src": "2489:7:43", - "type": "" - } - ] - }, - { - "nativeSrc": "2510:10:43", - "nodeType": "YulAssignment", - "src": "2510:10:43", - "value": { - "kind": "number", - "nativeSrc": "2519:1:43", - "nodeType": "YulLiteral", - "src": "2519:1:43", - "type": "", - "value": "1" - }, - "variableNames": [ - { - "name": "power", - "nativeSrc": "2510:5:43", - "nodeType": "YulIdentifier", - "src": "2510:5:43" - } - ] - }, - { - "nativeSrc": "2529:13:43", - "nodeType": "YulAssignment", - "src": "2529:13:43", - "value": { - "name": "_base", - "nativeSrc": "2537:5:43", - "nodeType": "YulIdentifier", - "src": "2537:5:43" - }, - "variableNames": [ - { - "name": "base", - "nativeSrc": "2529:4:43", - "nodeType": "YulIdentifier", - "src": "2529:4:43" - } - ] - }, - { - "body": { - "nativeSrc": "2593:228:43", - "nodeType": "YulBlock", - "src": "2593:228:43", - "statements": [ - { - "body": { - "nativeSrc": "2638:22:43", - "nodeType": "YulBlock", - "src": "2638:22:43", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x11", - "nativeSrc": "2640:16:43", - "nodeType": "YulIdentifier", - "src": "2640:16:43" - }, - "nativeSrc": "2640:18:43", - "nodeType": "YulFunctionCall", - "src": "2640:18:43" - }, - "nativeSrc": "2640:18:43", - "nodeType": "YulExpressionStatement", - "src": "2640:18:43" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "base", - "nativeSrc": "2613:4:43", - "nodeType": "YulIdentifier", - "src": "2613:4:43" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "2627:1:43", - "nodeType": "YulLiteral", - "src": "2627:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "not", - "nativeSrc": "2623:3:43", - "nodeType": "YulIdentifier", - "src": "2623:3:43" - }, - "nativeSrc": "2623:6:43", - "nodeType": "YulFunctionCall", - "src": "2623:6:43" - }, - { - "name": "base", - "nativeSrc": "2631:4:43", - "nodeType": "YulIdentifier", - "src": "2631:4:43" - } - ], - "functionName": { - "name": "div", - "nativeSrc": "2619:3:43", - "nodeType": "YulIdentifier", - "src": "2619:3:43" - }, - "nativeSrc": "2619:17:43", - "nodeType": "YulFunctionCall", - "src": "2619:17:43" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "2610:2:43", - "nodeType": "YulIdentifier", - "src": "2610:2:43" - }, - "nativeSrc": "2610:27:43", - "nodeType": "YulFunctionCall", - "src": "2610:27:43" - }, - "nativeSrc": "2607:53:43", - "nodeType": "YulIf", - "src": "2607:53:43" - }, - { - "body": { - "nativeSrc": "2699:29:43", - "nodeType": "YulBlock", - "src": "2699:29:43", - "statements": [ - { - "nativeSrc": "2701:25:43", - "nodeType": "YulAssignment", - "src": "2701:25:43", - "value": { - "arguments": [ - { - "name": "power", - "nativeSrc": "2714:5:43", - "nodeType": "YulIdentifier", - "src": "2714:5:43" - }, - { - "name": "base", - "nativeSrc": "2721:4:43", - "nodeType": "YulIdentifier", - "src": "2721:4:43" - } - ], - "functionName": { - "name": "mul", - "nativeSrc": "2710:3:43", - "nodeType": "YulIdentifier", - "src": "2710:3:43" - }, - "nativeSrc": "2710:16:43", - "nodeType": "YulFunctionCall", - "src": "2710:16:43" - }, - "variableNames": [ - { - "name": "power", - "nativeSrc": "2701:5:43", - "nodeType": "YulIdentifier", - "src": "2701:5:43" - } - ] - } - ] - }, - "condition": { - "arguments": [ - { - "name": "exponent", - "nativeSrc": "2680:8:43", - "nodeType": "YulIdentifier", - "src": "2680:8:43" - }, - { - "name": "power_1", - "nativeSrc": "2690:7:43", - "nodeType": "YulIdentifier", - "src": "2690:7:43" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "2676:3:43", - "nodeType": "YulIdentifier", - "src": "2676:3:43" - }, - "nativeSrc": "2676:22:43", - "nodeType": "YulFunctionCall", - "src": "2676:22:43" - }, - "nativeSrc": "2673:55:43", - "nodeType": "YulIf", - "src": "2673:55:43" - }, - { - "nativeSrc": "2741:23:43", - "nodeType": "YulAssignment", - "src": "2741:23:43", - "value": { - "arguments": [ - { - "name": "base", - "nativeSrc": "2753:4:43", - "nodeType": "YulIdentifier", - "src": "2753:4:43" - }, - { - "name": "base", - "nativeSrc": "2759:4:43", - "nodeType": "YulIdentifier", - "src": "2759:4:43" - } - ], - "functionName": { - "name": "mul", - "nativeSrc": "2749:3:43", - "nodeType": "YulIdentifier", - "src": "2749:3:43" - }, - "nativeSrc": "2749:15:43", - "nodeType": "YulFunctionCall", - "src": "2749:15:43" - }, - "variableNames": [ - { - "name": "base", - "nativeSrc": "2741:4:43", - "nodeType": "YulIdentifier", - "src": "2741:4:43" - } - ] - }, - { - "nativeSrc": "2777:34:43", - "nodeType": "YulAssignment", - "src": "2777:34:43", - "value": { - "arguments": [ - { - "name": "power_1", - "nativeSrc": "2793:7:43", - "nodeType": "YulIdentifier", - "src": "2793:7:43" - }, - { - "name": "exponent", - "nativeSrc": "2802:8:43", - "nodeType": "YulIdentifier", - "src": "2802:8:43" - } - ], - "functionName": { - "name": "shr", - "nativeSrc": "2789:3:43", - "nodeType": "YulIdentifier", - "src": "2789:3:43" - }, - "nativeSrc": "2789:22:43", - "nodeType": "YulFunctionCall", - "src": "2789:22:43" - }, - "variableNames": [ - { - "name": "exponent", - "nativeSrc": "2777:8:43", - "nodeType": "YulIdentifier", - "src": "2777:8:43" - } - ] - } - ] - }, - "condition": { - "arguments": [ - { - "name": "exponent", - "nativeSrc": "2562:8:43", - "nodeType": "YulIdentifier", - "src": "2562:8:43" - }, - { - "name": "power_1", - "nativeSrc": "2572:7:43", - "nodeType": "YulIdentifier", - "src": "2572:7:43" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "2559:2:43", - "nodeType": "YulIdentifier", - "src": "2559:2:43" - }, - "nativeSrc": "2559:21:43", - "nodeType": "YulFunctionCall", - "src": "2559:21:43" - }, - "nativeSrc": "2551:270:43", - "nodeType": "YulForLoop", - "post": { - "nativeSrc": "2581:3:43", - "nodeType": "YulBlock", - "src": "2581:3:43", - "statements": [] - }, - "pre": { - "nativeSrc": "2555:3:43", - "nodeType": "YulBlock", - "src": "2555:3:43", - "statements": [] - }, - "src": "2551:270:43" - } - ] - }, - "name": "checked_exp_helper", - "nativeSrc": "2411:416:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "_base", - "nativeSrc": "2439:5:43", - "nodeType": "YulTypedName", - "src": "2439:5:43", - "type": "" - }, - { - "name": "exponent", - "nativeSrc": "2446:8:43", - "nodeType": "YulTypedName", - "src": "2446:8:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "power", - "nativeSrc": "2459:5:43", - "nodeType": "YulTypedName", - "src": "2459:5:43", - "type": "" - }, - { - "name": "base", - "nativeSrc": "2466:4:43", - "nodeType": "YulTypedName", - "src": "2466:4:43", - "type": "" - } - ], - "src": "2411:416:43" - }, - { - "body": { - "nativeSrc": "2891:747:43", - "nodeType": "YulBlock", - "src": "2891:747:43", - "statements": [ - { - "body": { - "nativeSrc": "2929:52:43", - "nodeType": "YulBlock", - "src": "2929:52:43", - "statements": [ - { - "nativeSrc": "2943:10:43", - "nodeType": "YulAssignment", - "src": "2943:10:43", - "value": { - "kind": "number", - "nativeSrc": "2952:1:43", - "nodeType": "YulLiteral", - "src": "2952:1:43", - "type": "", - "value": "1" - }, - "variableNames": [ - { - "name": "power", - "nativeSrc": "2943:5:43", - "nodeType": "YulIdentifier", - "src": "2943:5:43" - } - ] - }, - { - "nativeSrc": "2966:5:43", - "nodeType": "YulLeave", - "src": "2966:5:43" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "exponent", - "nativeSrc": "2911:8:43", - "nodeType": "YulIdentifier", - "src": "2911:8:43" - } - ], - "functionName": { - "name": "iszero", - "nativeSrc": "2904:6:43", - "nodeType": "YulIdentifier", - "src": "2904:6:43" - }, - "nativeSrc": "2904:16:43", - "nodeType": "YulFunctionCall", - "src": "2904:16:43" - }, - "nativeSrc": "2901:80:43", - "nodeType": "YulIf", - "src": "2901:80:43" - }, - { - "body": { - "nativeSrc": "3014:52:43", - "nodeType": "YulBlock", - "src": "3014:52:43", - "statements": [ - { - "nativeSrc": "3028:10:43", - "nodeType": "YulAssignment", - "src": "3028:10:43", - "value": { - "kind": "number", - "nativeSrc": "3037:1:43", - "nodeType": "YulLiteral", - "src": "3037:1:43", - "type": "", - "value": "0" - }, - "variableNames": [ - { - "name": "power", - "nativeSrc": "3028:5:43", - "nodeType": "YulIdentifier", - "src": "3028:5:43" - } - ] - }, - { - "nativeSrc": "3051:5:43", - "nodeType": "YulLeave", - "src": "3051:5:43" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "base", - "nativeSrc": "3000:4:43", - "nodeType": "YulIdentifier", - "src": "3000:4:43" - } - ], - "functionName": { - "name": "iszero", - "nativeSrc": "2993:6:43", - "nodeType": "YulIdentifier", - "src": "2993:6:43" - }, - "nativeSrc": "2993:12:43", - "nodeType": "YulFunctionCall", - "src": "2993:12:43" - }, - "nativeSrc": "2990:76:43", - "nodeType": "YulIf", - "src": "2990:76:43" - }, - { - "cases": [ - { - "body": { - "nativeSrc": "3102:52:43", - "nodeType": "YulBlock", - "src": "3102:52:43", - "statements": [ - { - "nativeSrc": "3116:10:43", - "nodeType": "YulAssignment", - "src": "3116:10:43", - "value": { - "kind": "number", - "nativeSrc": "3125:1:43", - "nodeType": "YulLiteral", - "src": "3125:1:43", - "type": "", - "value": "1" - }, - "variableNames": [ - { - "name": "power", - "nativeSrc": "3116:5:43", - "nodeType": "YulIdentifier", - "src": "3116:5:43" - } - ] - }, - { - "nativeSrc": "3139:5:43", - "nodeType": "YulLeave", - "src": "3139:5:43" - } - ] - }, - "nativeSrc": "3095:59:43", - "nodeType": "YulCase", - "src": "3095:59:43", - "value": { - "kind": "number", - "nativeSrc": "3100:1:43", - "nodeType": "YulLiteral", - "src": "3100:1:43", - "type": "", - "value": "1" - } - }, - { - "body": { - "nativeSrc": "3170:123:43", - "nodeType": "YulBlock", - "src": "3170:123:43", - "statements": [ - { - "body": { - "nativeSrc": "3205:22:43", - "nodeType": "YulBlock", - "src": "3205:22:43", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x11", - "nativeSrc": "3207:16:43", - "nodeType": "YulIdentifier", - "src": "3207:16:43" - }, - "nativeSrc": "3207:18:43", - "nodeType": "YulFunctionCall", - "src": "3207:18:43" - }, - "nativeSrc": "3207:18:43", - "nodeType": "YulExpressionStatement", - "src": "3207:18:43" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "exponent", - "nativeSrc": "3190:8:43", - "nodeType": "YulIdentifier", - "src": "3190:8:43" - }, - { - "kind": "number", - "nativeSrc": "3200:3:43", - "nodeType": "YulLiteral", - "src": "3200:3:43", - "type": "", - "value": "255" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "3187:2:43", - "nodeType": "YulIdentifier", - "src": "3187:2:43" - }, - "nativeSrc": "3187:17:43", - "nodeType": "YulFunctionCall", - "src": "3187:17:43" - }, - "nativeSrc": "3184:43:43", - "nodeType": "YulIf", - "src": "3184:43:43" - }, - { - "nativeSrc": "3240:25:43", - "nodeType": "YulAssignment", - "src": "3240:25:43", - "value": { - "arguments": [ - { - "name": "exponent", - "nativeSrc": "3253:8:43", - "nodeType": "YulIdentifier", - "src": "3253:8:43" - }, - { - "kind": "number", - "nativeSrc": "3263:1:43", - "nodeType": "YulLiteral", - "src": "3263:1:43", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "3249:3:43", - "nodeType": "YulIdentifier", - "src": "3249:3:43" - }, - "nativeSrc": "3249:16:43", - "nodeType": "YulFunctionCall", - "src": "3249:16:43" - }, - "variableNames": [ - { - "name": "power", - "nativeSrc": "3240:5:43", - "nodeType": "YulIdentifier", - "src": "3240:5:43" - } - ] - }, - { - "nativeSrc": "3278:5:43", - "nodeType": "YulLeave", - "src": "3278:5:43" - } - ] - }, - "nativeSrc": "3163:130:43", - "nodeType": "YulCase", - "src": "3163:130:43", - "value": { - "kind": "number", - "nativeSrc": "3168:1:43", - "nodeType": "YulLiteral", - "src": "3168:1:43", - "type": "", - "value": "2" - } - } - ], - "expression": { - "name": "base", - "nativeSrc": "3082:4:43", - "nodeType": "YulIdentifier", - "src": "3082:4:43" - }, - "nativeSrc": "3075:218:43", - "nodeType": "YulSwitch", - "src": "3075:218:43" - }, - { - "body": { - "nativeSrc": "3391:70:43", - "nodeType": "YulBlock", - "src": "3391:70:43", - "statements": [ - { - "nativeSrc": "3405:28:43", - "nodeType": "YulAssignment", - "src": "3405:28:43", - "value": { - "arguments": [ - { - "name": "base", - "nativeSrc": "3418:4:43", - "nodeType": "YulIdentifier", - "src": "3418:4:43" - }, - { - "name": "exponent", - "nativeSrc": "3424:8:43", - "nodeType": "YulIdentifier", - "src": "3424:8:43" - } - ], - "functionName": { - "name": "exp", - "nativeSrc": "3414:3:43", - "nodeType": "YulIdentifier", - "src": "3414:3:43" - }, - "nativeSrc": "3414:19:43", - "nodeType": "YulFunctionCall", - "src": "3414:19:43" - }, - "variableNames": [ - { - "name": "power", - "nativeSrc": "3405:5:43", - "nodeType": "YulIdentifier", - "src": "3405:5:43" - } - ] - }, - { - "nativeSrc": "3446:5:43", - "nodeType": "YulLeave", - "src": "3446:5:43" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "base", - "nativeSrc": "3315:4:43", - "nodeType": "YulIdentifier", - "src": "3315:4:43" - }, - { - "kind": "number", - "nativeSrc": "3321:2:43", - "nodeType": "YulLiteral", - "src": "3321:2:43", - "type": "", - "value": "11" - } - ], - "functionName": { - "name": "lt", - "nativeSrc": "3312:2:43", - "nodeType": "YulIdentifier", - "src": "3312:2:43" - }, - "nativeSrc": "3312:12:43", - "nodeType": "YulFunctionCall", - "src": "3312:12:43" - }, - { - "arguments": [ - { - "name": "exponent", - "nativeSrc": "3329:8:43", - "nodeType": "YulIdentifier", - "src": "3329:8:43" - }, - { - "kind": "number", - "nativeSrc": "3339:2:43", - "nodeType": "YulLiteral", - "src": "3339:2:43", - "type": "", - "value": "78" - } - ], - "functionName": { - "name": "lt", - "nativeSrc": "3326:2:43", - "nodeType": "YulIdentifier", - "src": "3326:2:43" - }, - "nativeSrc": "3326:16:43", - "nodeType": "YulFunctionCall", - "src": "3326:16:43" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "3308:3:43", - "nodeType": "YulIdentifier", - "src": "3308:3:43" - }, - "nativeSrc": "3308:35:43", - "nodeType": "YulFunctionCall", - "src": "3308:35:43" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "base", - "nativeSrc": "3352:4:43", - "nodeType": "YulIdentifier", - "src": "3352:4:43" - }, - { - "kind": "number", - "nativeSrc": "3358:3:43", - "nodeType": "YulLiteral", - "src": "3358:3:43", - "type": "", - "value": "307" - } - ], - "functionName": { - "name": "lt", - "nativeSrc": "3349:2:43", - "nodeType": "YulIdentifier", - "src": "3349:2:43" - }, - "nativeSrc": "3349:13:43", - "nodeType": "YulFunctionCall", - "src": "3349:13:43" - }, - { - "arguments": [ - { - "name": "exponent", - "nativeSrc": "3367:8:43", - "nodeType": "YulIdentifier", - "src": "3367:8:43" - }, - { - "kind": "number", - "nativeSrc": "3377:2:43", - "nodeType": "YulLiteral", - "src": "3377:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "lt", - "nativeSrc": "3364:2:43", - "nodeType": "YulIdentifier", - "src": "3364:2:43" - }, - "nativeSrc": "3364:16:43", - "nodeType": "YulFunctionCall", - "src": "3364:16:43" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "3345:3:43", - "nodeType": "YulIdentifier", - "src": "3345:3:43" - }, - "nativeSrc": "3345:36:43", - "nodeType": "YulFunctionCall", - "src": "3345:36:43" - } - ], - "functionName": { - "name": "or", - "nativeSrc": "3305:2:43", - "nodeType": "YulIdentifier", - "src": "3305:2:43" - }, - "nativeSrc": "3305:77:43", - "nodeType": "YulFunctionCall", - "src": "3305:77:43" - }, - "nativeSrc": "3302:159:43", - "nodeType": "YulIf", - "src": "3302:159:43" - }, - { - "nativeSrc": "3470:57:43", - "nodeType": "YulVariableDeclaration", - "src": "3470:57:43", - "value": { - "arguments": [ - { - "name": "base", - "nativeSrc": "3512:4:43", - "nodeType": "YulIdentifier", - "src": "3512:4:43" - }, - { - "name": "exponent", - "nativeSrc": "3518:8:43", - "nodeType": "YulIdentifier", - "src": "3518:8:43" - } - ], - "functionName": { - "name": "checked_exp_helper", - "nativeSrc": "3493:18:43", - "nodeType": "YulIdentifier", - "src": "3493:18:43" - }, - "nativeSrc": "3493:34:43", - "nodeType": "YulFunctionCall", - "src": "3493:34:43" - }, - "variables": [ - { - "name": "power_1", - "nativeSrc": "3474:7:43", - "nodeType": "YulTypedName", - "src": "3474:7:43", - "type": "" - }, - { - "name": "base_1", - "nativeSrc": "3483:6:43", - "nodeType": "YulTypedName", - "src": "3483:6:43", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "3572:22:43", - "nodeType": "YulBlock", - "src": "3572:22:43", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x11", - "nativeSrc": "3574:16:43", - "nodeType": "YulIdentifier", - "src": "3574:16:43" - }, - "nativeSrc": "3574:18:43", - "nodeType": "YulFunctionCall", - "src": "3574:18:43" - }, - "nativeSrc": "3574:18:43", - "nodeType": "YulExpressionStatement", - "src": "3574:18:43" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "power_1", - "nativeSrc": "3542:7:43", - "nodeType": "YulIdentifier", - "src": "3542:7:43" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "3559:1:43", - "nodeType": "YulLiteral", - "src": "3559:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "not", - "nativeSrc": "3555:3:43", - "nodeType": "YulIdentifier", - "src": "3555:3:43" - }, - "nativeSrc": "3555:6:43", - "nodeType": "YulFunctionCall", - "src": "3555:6:43" - }, - { - "name": "base_1", - "nativeSrc": "3563:6:43", - "nodeType": "YulIdentifier", - "src": "3563:6:43" - } - ], - "functionName": { - "name": "div", - "nativeSrc": "3551:3:43", - "nodeType": "YulIdentifier", - "src": "3551:3:43" - }, - "nativeSrc": "3551:19:43", - "nodeType": "YulFunctionCall", - "src": "3551:19:43" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "3539:2:43", - "nodeType": "YulIdentifier", - "src": "3539:2:43" - }, - "nativeSrc": "3539:32:43", - "nodeType": "YulFunctionCall", - "src": "3539:32:43" - }, - "nativeSrc": "3536:58:43", - "nodeType": "YulIf", - "src": "3536:58:43" - }, - { - "nativeSrc": "3603:29:43", - "nodeType": "YulAssignment", - "src": "3603:29:43", - "value": { - "arguments": [ - { - "name": "power_1", - "nativeSrc": "3616:7:43", - "nodeType": "YulIdentifier", - "src": "3616:7:43" - }, - { - "name": "base_1", - "nativeSrc": "3625:6:43", - "nodeType": "YulIdentifier", - "src": "3625:6:43" - } - ], - "functionName": { - "name": "mul", - "nativeSrc": "3612:3:43", - "nodeType": "YulIdentifier", - "src": "3612:3:43" - }, - "nativeSrc": "3612:20:43", - "nodeType": "YulFunctionCall", - "src": "3612:20:43" - }, - "variableNames": [ - { - "name": "power", - "nativeSrc": "3603:5:43", - "nodeType": "YulIdentifier", - "src": "3603:5:43" - } - ] - } - ] - }, - "name": "checked_exp_unsigned", - "nativeSrc": "2832:806:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "base", - "nativeSrc": "2862:4:43", - "nodeType": "YulTypedName", - "src": "2862:4:43", - "type": "" - }, - { - "name": "exponent", - "nativeSrc": "2868:8:43", - "nodeType": "YulTypedName", - "src": "2868:8:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "power", - "nativeSrc": "2881:5:43", - "nodeType": "YulTypedName", - "src": "2881:5:43", - "type": "" - } - ], - "src": "2832:806:43" - }, - { - "body": { - "nativeSrc": "3711:72:43", - "nodeType": "YulBlock", - "src": "3711:72:43", - "statements": [ - { - "nativeSrc": "3721:56:43", - "nodeType": "YulAssignment", - "src": "3721:56:43", - "value": { - "arguments": [ - { - "name": "base", - "nativeSrc": "3751:4:43", - "nodeType": "YulIdentifier", - "src": "3751:4:43" - }, - { - "arguments": [ - { - "name": "exponent", - "nativeSrc": "3761:8:43", - "nodeType": "YulIdentifier", - "src": "3761:8:43" - }, - { - "kind": "number", - "nativeSrc": "3771:4:43", - "nodeType": "YulLiteral", - "src": "3771:4:43", - "type": "", - "value": "0xff" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "3757:3:43", - "nodeType": "YulIdentifier", - "src": "3757:3:43" - }, - "nativeSrc": "3757:19:43", - "nodeType": "YulFunctionCall", - "src": "3757:19:43" - } - ], - "functionName": { - "name": "checked_exp_unsigned", - "nativeSrc": "3730:20:43", - "nodeType": "YulIdentifier", - "src": "3730:20:43" - }, - "nativeSrc": "3730:47:43", - "nodeType": "YulFunctionCall", - "src": "3730:47:43" - }, - "variableNames": [ - { - "name": "power", - "nativeSrc": "3721:5:43", - "nodeType": "YulIdentifier", - "src": "3721:5:43" - } - ] - } - ] - }, - "name": "checked_exp_t_uint256_t_uint8", - "nativeSrc": "3643:140:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "base", - "nativeSrc": "3682:4:43", - "nodeType": "YulTypedName", - "src": "3682:4:43", - "type": "" - }, - { - "name": "exponent", - "nativeSrc": "3688:8:43", - "nodeType": "YulTypedName", - "src": "3688:8:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "power", - "nativeSrc": "3701:5:43", - "nodeType": "YulTypedName", - "src": "3701:5:43", - "type": "" - } - ], - "src": "3643:140:43" - }, - { - "body": { - "nativeSrc": "3843:325:43", - "nodeType": "YulBlock", - "src": "3843:325:43", - "statements": [ - { - "nativeSrc": "3853:22:43", - "nodeType": "YulAssignment", - "src": "3853:22:43", - "value": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "3867:1:43", - "nodeType": "YulLiteral", - "src": "3867:1:43", - "type": "", - "value": "1" - }, - { - "name": "data", - "nativeSrc": "3870:4:43", - "nodeType": "YulIdentifier", - "src": "3870:4:43" - } - ], - "functionName": { - "name": "shr", - "nativeSrc": "3863:3:43", - "nodeType": "YulIdentifier", - "src": "3863:3:43" - }, - "nativeSrc": "3863:12:43", - "nodeType": "YulFunctionCall", - "src": "3863:12:43" - }, - "variableNames": [ - { - "name": "length", - "nativeSrc": "3853:6:43", - "nodeType": "YulIdentifier", - "src": "3853:6:43" - } - ] - }, - { - "nativeSrc": "3884:38:43", - "nodeType": "YulVariableDeclaration", - "src": "3884:38:43", - "value": { - "arguments": [ - { - "name": "data", - "nativeSrc": "3914:4:43", - "nodeType": "YulIdentifier", - "src": "3914:4:43" - }, - { - "kind": "number", - "nativeSrc": "3920:1:43", - "nodeType": "YulLiteral", - "src": "3920:1:43", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "3910:3:43", - "nodeType": "YulIdentifier", - "src": "3910:3:43" - }, - "nativeSrc": "3910:12:43", - "nodeType": "YulFunctionCall", - "src": "3910:12:43" - }, - "variables": [ - { - "name": "outOfPlaceEncoding", - "nativeSrc": "3888:18:43", - "nodeType": "YulTypedName", - "src": "3888:18:43", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "3961:31:43", - "nodeType": "YulBlock", - "src": "3961:31:43", - "statements": [ - { - "nativeSrc": "3963:27:43", - "nodeType": "YulAssignment", - "src": "3963:27:43", - "value": { - "arguments": [ - { - "name": "length", - "nativeSrc": "3977:6:43", - "nodeType": "YulIdentifier", - "src": "3977:6:43" - }, - { - "kind": "number", - "nativeSrc": "3985:4:43", - "nodeType": "YulLiteral", - "src": "3985:4:43", - "type": "", - "value": "0x7f" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "3973:3:43", - "nodeType": "YulIdentifier", - "src": "3973:3:43" - }, - "nativeSrc": "3973:17:43", - "nodeType": "YulFunctionCall", - "src": "3973:17:43" - }, - "variableNames": [ - { - "name": "length", - "nativeSrc": "3963:6:43", - "nodeType": "YulIdentifier", - "src": "3963:6:43" - } - ] - } - ] - }, - "condition": { - "arguments": [ - { - "name": "outOfPlaceEncoding", - "nativeSrc": "3941:18:43", - "nodeType": "YulIdentifier", - "src": "3941:18:43" - } - ], - "functionName": { - "name": "iszero", - "nativeSrc": "3934:6:43", - "nodeType": "YulIdentifier", - "src": "3934:6:43" - }, - "nativeSrc": "3934:26:43", - "nodeType": "YulFunctionCall", - "src": "3934:26:43" - }, - "nativeSrc": "3931:61:43", - "nodeType": "YulIf", - "src": "3931:61:43" - }, - { - "body": { - "nativeSrc": "4051:111:43", - "nodeType": "YulBlock", - "src": "4051:111:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "4072:1:43", - "nodeType": "YulLiteral", - "src": "4072:1:43", - "type": "", - "value": "0" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "4079:3:43", - "nodeType": "YulLiteral", - "src": "4079:3:43", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nativeSrc": "4084:10:43", - "nodeType": "YulLiteral", - "src": "4084:10:43", - "type": "", - "value": "0x4e487b71" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "4075:3:43", - "nodeType": "YulIdentifier", - "src": "4075:3:43" - }, - "nativeSrc": "4075:20:43", - "nodeType": "YulFunctionCall", - "src": "4075:20:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "4065:6:43", - "nodeType": "YulIdentifier", - "src": "4065:6:43" - }, - "nativeSrc": "4065:31:43", - "nodeType": "YulFunctionCall", - "src": "4065:31:43" - }, - "nativeSrc": "4065:31:43", - "nodeType": "YulExpressionStatement", - "src": "4065:31:43" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "4116:1:43", - "nodeType": "YulLiteral", - "src": "4116:1:43", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nativeSrc": "4119:4:43", - "nodeType": "YulLiteral", - "src": "4119:4:43", - "type": "", - "value": "0x22" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "4109:6:43", - "nodeType": "YulIdentifier", - "src": "4109:6:43" - }, - "nativeSrc": "4109:15:43", - "nodeType": "YulFunctionCall", - "src": "4109:15:43" - }, - "nativeSrc": "4109:15:43", - "nodeType": "YulExpressionStatement", - "src": "4109:15:43" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "4144:1:43", - "nodeType": "YulLiteral", - "src": "4144:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "4147:4:43", - "nodeType": "YulLiteral", - "src": "4147:4:43", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "4137:6:43", - "nodeType": "YulIdentifier", - "src": "4137:6:43" - }, - "nativeSrc": "4137:15:43", - "nodeType": "YulFunctionCall", - "src": "4137:15:43" - }, - "nativeSrc": "4137:15:43", - "nodeType": "YulExpressionStatement", - "src": "4137:15:43" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "outOfPlaceEncoding", - "nativeSrc": "4007:18:43", - "nodeType": "YulIdentifier", - "src": "4007:18:43" - }, - { - "arguments": [ - { - "name": "length", - "nativeSrc": "4030:6:43", - "nodeType": "YulIdentifier", - "src": "4030:6:43" - }, - { - "kind": "number", - "nativeSrc": "4038:2:43", - "nodeType": "YulLiteral", - "src": "4038:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "lt", - "nativeSrc": "4027:2:43", - "nodeType": "YulIdentifier", - "src": "4027:2:43" - }, - "nativeSrc": "4027:14:43", - "nodeType": "YulFunctionCall", - "src": "4027:14:43" - } - ], - "functionName": { - "name": "eq", - "nativeSrc": "4004:2:43", - "nodeType": "YulIdentifier", - "src": "4004:2:43" - }, - "nativeSrc": "4004:38:43", - "nodeType": "YulFunctionCall", - "src": "4004:38:43" - }, - "nativeSrc": "4001:161:43", - "nodeType": "YulIf", - "src": "4001:161:43" - } - ] - }, - "name": "extract_byte_array_length", - "nativeSrc": "3788:380:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "data", - "nativeSrc": "3823:4:43", - "nodeType": "YulTypedName", - "src": "3823:4:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "length", - "nativeSrc": "3832:6:43", - "nodeType": "YulTypedName", - "src": "3832:6:43", - "type": "" - } - ], - "src": "3788:380:43" - }, - { - "body": { - "nativeSrc": "4229:65:43", - "nodeType": "YulBlock", - "src": "4229:65:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "4246:1:43", - "nodeType": "YulLiteral", - "src": "4246:1:43", - "type": "", - "value": "0" - }, - { - "name": "ptr", - "nativeSrc": "4249:3:43", - "nodeType": "YulIdentifier", - "src": "4249:3:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "4239:6:43", - "nodeType": "YulIdentifier", - "src": "4239:6:43" - }, - "nativeSrc": "4239:14:43", - "nodeType": "YulFunctionCall", - "src": "4239:14:43" - }, - "nativeSrc": "4239:14:43", - "nodeType": "YulExpressionStatement", - "src": "4239:14:43" - }, - { - "nativeSrc": "4262:26:43", - "nodeType": "YulAssignment", - "src": "4262:26:43", - "value": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "4280:1:43", - "nodeType": "YulLiteral", - "src": "4280:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "4283:4:43", - "nodeType": "YulLiteral", - "src": "4283:4:43", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "keccak256", - "nativeSrc": "4270:9:43", - "nodeType": "YulIdentifier", - "src": "4270:9:43" - }, - "nativeSrc": "4270:18:43", - "nodeType": "YulFunctionCall", - "src": "4270:18:43" - }, - "variableNames": [ - { - "name": "data", - "nativeSrc": "4262:4:43", - "nodeType": "YulIdentifier", - "src": "4262:4:43" - } - ] - } - ] - }, - "name": "array_dataslot_string_storage", - "nativeSrc": "4173:121:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "ptr", - "nativeSrc": "4212:3:43", - "nodeType": "YulTypedName", - "src": "4212:3:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "data", - "nativeSrc": "4220:4:43", - "nodeType": "YulTypedName", - "src": "4220:4:43", - "type": "" - } - ], - "src": "4173:121:43" - }, - { - "body": { - "nativeSrc": "4380:462:43", - "nodeType": "YulBlock", - "src": "4380:462:43", - "statements": [ - { - "body": { - "nativeSrc": "4413:423:43", - "nodeType": "YulBlock", - "src": "4413:423:43", - "statements": [ - { - "nativeSrc": "4427:11:43", - "nodeType": "YulVariableDeclaration", - "src": "4427:11:43", - "value": { - "kind": "number", - "nativeSrc": "4437:1:43", - "nodeType": "YulLiteral", - "src": "4437:1:43", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "_1", - "nativeSrc": "4431:2:43", - "nodeType": "YulTypedName", - "src": "4431:2:43", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "4458:1:43", - "nodeType": "YulLiteral", - "src": "4458:1:43", - "type": "", - "value": "0" - }, - { - "name": "array", - "nativeSrc": "4461:5:43", - "nodeType": "YulIdentifier", - "src": "4461:5:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "4451:6:43", - "nodeType": "YulIdentifier", - "src": "4451:6:43" - }, - "nativeSrc": "4451:16:43", - "nodeType": "YulFunctionCall", - "src": "4451:16:43" - }, - "nativeSrc": "4451:16:43", - "nodeType": "YulExpressionStatement", - "src": "4451:16:43" - }, - { - "nativeSrc": "4480:30:43", - "nodeType": "YulVariableDeclaration", - "src": "4480:30:43", - "value": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "4502:1:43", - "nodeType": "YulLiteral", - "src": "4502:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "4505:4:43", - "nodeType": "YulLiteral", - "src": "4505:4:43", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "keccak256", - "nativeSrc": "4492:9:43", - "nodeType": "YulIdentifier", - "src": "4492:9:43" - }, - "nativeSrc": "4492:18:43", - "nodeType": "YulFunctionCall", - "src": "4492:18:43" - }, - "variables": [ - { - "name": "data", - "nativeSrc": "4484:4:43", - "nodeType": "YulTypedName", - "src": "4484:4:43", - "type": "" - } - ] - }, - { - "nativeSrc": "4523:57:43", - "nodeType": "YulVariableDeclaration", - "src": "4523:57:43", - "value": { - "arguments": [ - { - "name": "data", - "nativeSrc": "4546:4:43", - "nodeType": "YulIdentifier", - "src": "4546:4:43" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "4556:1:43", - "nodeType": "YulLiteral", - "src": "4556:1:43", - "type": "", - "value": "5" - }, - { - "arguments": [ - { - "name": "startIndex", - "nativeSrc": "4563:10:43", - "nodeType": "YulIdentifier", - "src": "4563:10:43" - }, - { - "kind": "number", - "nativeSrc": "4575:2:43", - "nodeType": "YulLiteral", - "src": "4575:2:43", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "4559:3:43", - "nodeType": "YulIdentifier", - "src": "4559:3:43" - }, - "nativeSrc": "4559:19:43", - "nodeType": "YulFunctionCall", - "src": "4559:19:43" - } - ], - "functionName": { - "name": "shr", - "nativeSrc": "4552:3:43", - "nodeType": "YulIdentifier", - "src": "4552:3:43" - }, - "nativeSrc": "4552:27:43", - "nodeType": "YulFunctionCall", - "src": "4552:27:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "4542:3:43", - "nodeType": "YulIdentifier", - "src": "4542:3:43" - }, - "nativeSrc": "4542:38:43", - "nodeType": "YulFunctionCall", - "src": "4542:38:43" - }, - "variables": [ - { - "name": "deleteStart", - "nativeSrc": "4527:11:43", - "nodeType": "YulTypedName", - "src": "4527:11:43", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "4617:23:43", - "nodeType": "YulBlock", - "src": "4617:23:43", - "statements": [ - { - "nativeSrc": "4619:19:43", - "nodeType": "YulAssignment", - "src": "4619:19:43", - "value": { - "name": "data", - "nativeSrc": "4634:4:43", - "nodeType": "YulIdentifier", - "src": "4634:4:43" - }, - "variableNames": [ - { - "name": "deleteStart", - "nativeSrc": "4619:11:43", - "nodeType": "YulIdentifier", - "src": "4619:11:43" - } - ] - } - ] - }, - "condition": { - "arguments": [ - { - "name": "startIndex", - "nativeSrc": "4599:10:43", - "nodeType": "YulIdentifier", - "src": "4599:10:43" - }, - { - "kind": "number", - "nativeSrc": "4611:4:43", - "nodeType": "YulLiteral", - "src": "4611:4:43", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "lt", - "nativeSrc": "4596:2:43", - "nodeType": "YulIdentifier", - "src": "4596:2:43" - }, - "nativeSrc": "4596:20:43", - "nodeType": "YulFunctionCall", - "src": "4596:20:43" - }, - "nativeSrc": "4593:47:43", - "nodeType": "YulIf", - "src": "4593:47:43" - }, - { - "nativeSrc": "4653:41:43", - "nodeType": "YulVariableDeclaration", - "src": "4653:41:43", - "value": { - "arguments": [ - { - "name": "data", - "nativeSrc": "4667:4:43", - "nodeType": "YulIdentifier", - "src": "4667:4:43" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "4677:1:43", - "nodeType": "YulLiteral", - "src": "4677:1:43", - "type": "", - "value": "5" - }, - { - "arguments": [ - { - "name": "len", - "nativeSrc": "4684:3:43", - "nodeType": "YulIdentifier", - "src": "4684:3:43" - }, - { - "kind": "number", - "nativeSrc": "4689:2:43", - "nodeType": "YulLiteral", - "src": "4689:2:43", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "4680:3:43", - "nodeType": "YulIdentifier", - "src": "4680:3:43" - }, - "nativeSrc": "4680:12:43", - "nodeType": "YulFunctionCall", - "src": "4680:12:43" - } - ], - "functionName": { - "name": "shr", - "nativeSrc": "4673:3:43", - "nodeType": "YulIdentifier", - "src": "4673:3:43" - }, - "nativeSrc": "4673:20:43", - "nodeType": "YulFunctionCall", - "src": "4673:20:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "4663:3:43", - "nodeType": "YulIdentifier", - "src": "4663:3:43" - }, - "nativeSrc": "4663:31:43", - "nodeType": "YulFunctionCall", - "src": "4663:31:43" - }, - "variables": [ - { - "name": "_2", - "nativeSrc": "4657:2:43", - "nodeType": "YulTypedName", - "src": "4657:2:43", - "type": "" - } - ] - }, - { - "nativeSrc": "4707:24:43", - "nodeType": "YulVariableDeclaration", - "src": "4707:24:43", - "value": { - "name": "deleteStart", - "nativeSrc": "4720:11:43", - "nodeType": "YulIdentifier", - "src": "4720:11:43" - }, - "variables": [ - { - "name": "start", - "nativeSrc": "4711:5:43", - "nodeType": "YulTypedName", - "src": "4711:5:43", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "4805:21:43", - "nodeType": "YulBlock", - "src": "4805:21:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "start", - "nativeSrc": "4814:5:43", - "nodeType": "YulIdentifier", - "src": "4814:5:43" - }, - { - "name": "_1", - "nativeSrc": "4821:2:43", - "nodeType": "YulIdentifier", - "src": "4821:2:43" - } - ], - "functionName": { - "name": "sstore", - "nativeSrc": "4807:6:43", - "nodeType": "YulIdentifier", - "src": "4807:6:43" - }, - "nativeSrc": "4807:17:43", - "nodeType": "YulFunctionCall", - "src": "4807:17:43" - }, - "nativeSrc": "4807:17:43", - "nodeType": "YulExpressionStatement", - "src": "4807:17:43" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "start", - "nativeSrc": "4755:5:43", - "nodeType": "YulIdentifier", - "src": "4755:5:43" - }, - { - "name": "_2", - "nativeSrc": "4762:2:43", - "nodeType": "YulIdentifier", - "src": "4762:2:43" - } - ], - "functionName": { - "name": "lt", - "nativeSrc": "4752:2:43", - "nodeType": "YulIdentifier", - "src": "4752:2:43" - }, - "nativeSrc": "4752:13:43", - "nodeType": "YulFunctionCall", - "src": "4752:13:43" - }, - "nativeSrc": "4744:82:43", - "nodeType": "YulForLoop", - "post": { - "nativeSrc": "4766:26:43", - "nodeType": "YulBlock", - "src": "4766:26:43", - "statements": [ - { - "nativeSrc": "4768:22:43", - "nodeType": "YulAssignment", - "src": "4768:22:43", - "value": { - "arguments": [ - { - "name": "start", - "nativeSrc": "4781:5:43", - "nodeType": "YulIdentifier", - "src": "4781:5:43" - }, - { - "kind": "number", - "nativeSrc": "4788:1:43", - "nodeType": "YulLiteral", - "src": "4788:1:43", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "4777:3:43", - "nodeType": "YulIdentifier", - "src": "4777:3:43" - }, - "nativeSrc": "4777:13:43", - "nodeType": "YulFunctionCall", - "src": "4777:13:43" - }, - "variableNames": [ - { - "name": "start", - "nativeSrc": "4768:5:43", - "nodeType": "YulIdentifier", - "src": "4768:5:43" - } - ] - } - ] - }, - "pre": { - "nativeSrc": "4748:3:43", - "nodeType": "YulBlock", - "src": "4748:3:43", - "statements": [] - }, - "src": "4744:82:43" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "len", - "nativeSrc": "4396:3:43", - "nodeType": "YulIdentifier", - "src": "4396:3:43" - }, - { - "kind": "number", - "nativeSrc": "4401:2:43", - "nodeType": "YulLiteral", - "src": "4401:2:43", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "4393:2:43", - "nodeType": "YulIdentifier", - "src": "4393:2:43" - }, - "nativeSrc": "4393:11:43", - "nodeType": "YulFunctionCall", - "src": "4393:11:43" - }, - "nativeSrc": "4390:446:43", - "nodeType": "YulIf", - "src": "4390:446:43" - } - ] - }, - "name": "clean_up_bytearray_end_slots_string_storage", - "nativeSrc": "4299:543:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "array", - "nativeSrc": "4352:5:43", - "nodeType": "YulTypedName", - "src": "4352:5:43", - "type": "" - }, - { - "name": "len", - "nativeSrc": "4359:3:43", - "nodeType": "YulTypedName", - "src": "4359:3:43", - "type": "" - }, - { - "name": "startIndex", - "nativeSrc": "4364:10:43", - "nodeType": "YulTypedName", - "src": "4364:10:43", - "type": "" - } - ], - "src": "4299:543:43" - }, - { - "body": { - "nativeSrc": "4932:81:43", - "nodeType": "YulBlock", - "src": "4932:81:43", - "statements": [ - { - "nativeSrc": "4942:65:43", - "nodeType": "YulAssignment", - "src": "4942:65:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "data", - "nativeSrc": "4957:4:43", - "nodeType": "YulIdentifier", - "src": "4957:4:43" - }, - { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "4975:1:43", - "nodeType": "YulLiteral", - "src": "4975:1:43", - "type": "", - "value": "3" - }, - { - "name": "len", - "nativeSrc": "4978:3:43", - "nodeType": "YulIdentifier", - "src": "4978:3:43" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "4971:3:43", - "nodeType": "YulIdentifier", - "src": "4971:3:43" - }, - "nativeSrc": "4971:11:43", - "nodeType": "YulFunctionCall", - "src": "4971:11:43" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "4988:1:43", - "nodeType": "YulLiteral", - "src": "4988:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "not", - "nativeSrc": "4984:3:43", - "nodeType": "YulIdentifier", - "src": "4984:3:43" - }, - "nativeSrc": "4984:6:43", - "nodeType": "YulFunctionCall", - "src": "4984:6:43" - } - ], - "functionName": { - "name": "shr", - "nativeSrc": "4967:3:43", - "nodeType": "YulIdentifier", - "src": "4967:3:43" - }, - "nativeSrc": "4967:24:43", - "nodeType": "YulFunctionCall", - "src": "4967:24:43" - } - ], - "functionName": { - "name": "not", - "nativeSrc": "4963:3:43", - "nodeType": "YulIdentifier", - "src": "4963:3:43" - }, - "nativeSrc": "4963:29:43", - "nodeType": "YulFunctionCall", - "src": "4963:29:43" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "4953:3:43", - "nodeType": "YulIdentifier", - "src": "4953:3:43" - }, - "nativeSrc": "4953:40:43", - "nodeType": "YulFunctionCall", - "src": "4953:40:43" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "4999:1:43", - "nodeType": "YulLiteral", - "src": "4999:1:43", - "type": "", - "value": "1" - }, - { - "name": "len", - "nativeSrc": "5002:3:43", - "nodeType": "YulIdentifier", - "src": "5002:3:43" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "4995:3:43", - "nodeType": "YulIdentifier", - "src": "4995:3:43" - }, - "nativeSrc": "4995:11:43", - "nodeType": "YulFunctionCall", - "src": "4995:11:43" - } - ], - "functionName": { - "name": "or", - "nativeSrc": "4950:2:43", - "nodeType": "YulIdentifier", - "src": "4950:2:43" - }, - "nativeSrc": "4950:57:43", - "nodeType": "YulFunctionCall", - "src": "4950:57:43" - }, - "variableNames": [ - { - "name": "used", - "nativeSrc": "4942:4:43", - "nodeType": "YulIdentifier", - "src": "4942:4:43" - } - ] - } - ] - }, - "name": "extract_used_part_and_set_length_of_short_byte_array", - "nativeSrc": "4847:166:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "data", - "nativeSrc": "4909:4:43", - "nodeType": "YulTypedName", - "src": "4909:4:43", - "type": "" - }, - { - "name": "len", - "nativeSrc": "4915:3:43", - "nodeType": "YulTypedName", - "src": "4915:3:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "used", - "nativeSrc": "4923:4:43", - "nodeType": "YulTypedName", - "src": "4923:4:43", - "type": "" - } - ], - "src": "4847:166:43" - }, - { - "body": { - "nativeSrc": "5114:1249:43", - "nodeType": "YulBlock", - "src": "5114:1249:43", - "statements": [ - { - "nativeSrc": "5124:24:43", - "nodeType": "YulVariableDeclaration", - "src": "5124:24:43", - "value": { - "arguments": [ - { - "name": "src", - "nativeSrc": "5144:3:43", - "nodeType": "YulIdentifier", - "src": "5144:3:43" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "5138:5:43", - "nodeType": "YulIdentifier", - "src": "5138:5:43" - }, - "nativeSrc": "5138:10:43", - "nodeType": "YulFunctionCall", - "src": "5138:10:43" - }, - "variables": [ - { - "name": "newLen", - "nativeSrc": "5128:6:43", - "nodeType": "YulTypedName", - "src": "5128:6:43", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "5191:22:43", - "nodeType": "YulBlock", - "src": "5191:22:43", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x41", - "nativeSrc": "5193:16:43", - "nodeType": "YulIdentifier", - "src": "5193:16:43" - }, - "nativeSrc": "5193:18:43", - "nodeType": "YulFunctionCall", - "src": "5193:18:43" - }, - "nativeSrc": "5193:18:43", - "nodeType": "YulExpressionStatement", - "src": "5193:18:43" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "newLen", - "nativeSrc": "5163:6:43", - "nodeType": "YulIdentifier", - "src": "5163:6:43" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "5179:2:43", - "nodeType": "YulLiteral", - "src": "5179:2:43", - "type": "", - "value": "64" - }, - { - "kind": "number", - "nativeSrc": "5183:1:43", - "nodeType": "YulLiteral", - "src": "5183:1:43", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "5175:3:43", - "nodeType": "YulIdentifier", - "src": "5175:3:43" - }, - "nativeSrc": "5175:10:43", - "nodeType": "YulFunctionCall", - "src": "5175:10:43" - }, - { - "kind": "number", - "nativeSrc": "5187:1:43", - "nodeType": "YulLiteral", - "src": "5187:1:43", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "5171:3:43", - "nodeType": "YulIdentifier", - "src": "5171:3:43" - }, - "nativeSrc": "5171:18:43", - "nodeType": "YulFunctionCall", - "src": "5171:18:43" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "5160:2:43", - "nodeType": "YulIdentifier", - "src": "5160:2:43" - }, - "nativeSrc": "5160:30:43", - "nodeType": "YulFunctionCall", - "src": "5160:30:43" - }, - "nativeSrc": "5157:56:43", - "nodeType": "YulIf", - "src": "5157:56:43" - }, - { - "expression": { - "arguments": [ - { - "name": "slot", - "nativeSrc": "5266:4:43", - "nodeType": "YulIdentifier", - "src": "5266:4:43" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "slot", - "nativeSrc": "5304:4:43", - "nodeType": "YulIdentifier", - "src": "5304:4:43" - } - ], - "functionName": { - "name": "sload", - "nativeSrc": "5298:5:43", - "nodeType": "YulIdentifier", - "src": "5298:5:43" - }, - "nativeSrc": "5298:11:43", - "nodeType": "YulFunctionCall", - "src": "5298:11:43" - } - ], - "functionName": { - "name": "extract_byte_array_length", - "nativeSrc": "5272:25:43", - "nodeType": "YulIdentifier", - "src": "5272:25:43" - }, - "nativeSrc": "5272:38:43", - "nodeType": "YulFunctionCall", - "src": "5272:38:43" - }, - { - "name": "newLen", - "nativeSrc": "5312:6:43", - "nodeType": "YulIdentifier", - "src": "5312:6:43" - } - ], - "functionName": { - "name": "clean_up_bytearray_end_slots_string_storage", - "nativeSrc": "5222:43:43", - "nodeType": "YulIdentifier", - "src": "5222:43:43" - }, - "nativeSrc": "5222:97:43", - "nodeType": "YulFunctionCall", - "src": "5222:97:43" - }, - "nativeSrc": "5222:97:43", - "nodeType": "YulExpressionStatement", - "src": "5222:97:43" - }, - { - "nativeSrc": "5328:18:43", - "nodeType": "YulVariableDeclaration", - "src": "5328:18:43", - "value": { - "kind": "number", - "nativeSrc": "5345:1:43", - "nodeType": "YulLiteral", - "src": "5345:1:43", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "srcOffset", - "nativeSrc": "5332:9:43", - "nodeType": "YulTypedName", - "src": "5332:9:43", - "type": "" - } - ] - }, - { - "nativeSrc": "5355:23:43", - "nodeType": "YulVariableDeclaration", - "src": "5355:23:43", - "value": { - "kind": "number", - "nativeSrc": "5374:4:43", - "nodeType": "YulLiteral", - "src": "5374:4:43", - "type": "", - "value": "0x20" - }, - "variables": [ - { - "name": "srcOffset_1", - "nativeSrc": "5359:11:43", - "nodeType": "YulTypedName", - "src": "5359:11:43", - "type": "" - } - ] - }, - { - "nativeSrc": "5387:17:43", - "nodeType": "YulAssignment", - "src": "5387:17:43", - "value": { - "kind": "number", - "nativeSrc": "5400:4:43", - "nodeType": "YulLiteral", - "src": "5400:4:43", - "type": "", - "value": "0x20" - }, - "variableNames": [ - { - "name": "srcOffset", - "nativeSrc": "5387:9:43", - "nodeType": "YulIdentifier", - "src": "5387:9:43" - } - ] - }, - { - "cases": [ - { - "body": { - "nativeSrc": "5450:656:43", - "nodeType": "YulBlock", - "src": "5450:656:43", - "statements": [ - { - "nativeSrc": "5464:35:43", - "nodeType": "YulVariableDeclaration", - "src": "5464:35:43", - "value": { - "arguments": [ - { - "name": "newLen", - "nativeSrc": "5483:6:43", - "nodeType": "YulIdentifier", - "src": "5483:6:43" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "5495:2:43", - "nodeType": "YulLiteral", - "src": "5495:2:43", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "not", - "nativeSrc": "5491:3:43", - "nodeType": "YulIdentifier", - "src": "5491:3:43" - }, - "nativeSrc": "5491:7:43", - "nodeType": "YulFunctionCall", - "src": "5491:7:43" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "5479:3:43", - "nodeType": "YulIdentifier", - "src": "5479:3:43" - }, - "nativeSrc": "5479:20:43", - "nodeType": "YulFunctionCall", - "src": "5479:20:43" - }, - "variables": [ - { - "name": "loopEnd", - "nativeSrc": "5468:7:43", - "nodeType": "YulTypedName", - "src": "5468:7:43", - "type": "" - } - ] - }, - { - "nativeSrc": "5512:49:43", - "nodeType": "YulVariableDeclaration", - "src": "5512:49:43", - "value": { - "arguments": [ - { - "name": "slot", - "nativeSrc": "5556:4:43", - "nodeType": "YulIdentifier", - "src": "5556:4:43" - } - ], - "functionName": { - "name": "array_dataslot_string_storage", - "nativeSrc": "5526:29:43", - "nodeType": "YulIdentifier", - "src": "5526:29:43" - }, - "nativeSrc": "5526:35:43", - "nodeType": "YulFunctionCall", - "src": "5526:35:43" - }, - "variables": [ - { - "name": "dstPtr", - "nativeSrc": "5516:6:43", - "nodeType": "YulTypedName", - "src": "5516:6:43", - "type": "" - } - ] - }, - { - "nativeSrc": "5574:10:43", - "nodeType": "YulVariableDeclaration", - "src": "5574:10:43", - "value": { - "kind": "number", - "nativeSrc": "5583:1:43", - "nodeType": "YulLiteral", - "src": "5583:1:43", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "i", - "nativeSrc": "5578:1:43", - "nodeType": "YulTypedName", - "src": "5578:1:43", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "5661:172:43", - "nodeType": "YulBlock", - "src": "5661:172:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "dstPtr", - "nativeSrc": "5686:6:43", - "nodeType": "YulIdentifier", - "src": "5686:6:43" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "src", - "nativeSrc": "5704:3:43", - "nodeType": "YulIdentifier", - "src": "5704:3:43" - }, - { - "name": "srcOffset", - "nativeSrc": "5709:9:43", - "nodeType": "YulIdentifier", - "src": "5709:9:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "5700:3:43", - "nodeType": "YulIdentifier", - "src": "5700:3:43" - }, - "nativeSrc": "5700:19:43", - "nodeType": "YulFunctionCall", - "src": "5700:19:43" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "5694:5:43", - "nodeType": "YulIdentifier", - "src": "5694:5:43" - }, - "nativeSrc": "5694:26:43", - "nodeType": "YulFunctionCall", - "src": "5694:26:43" - } - ], - "functionName": { - "name": "sstore", - "nativeSrc": "5679:6:43", - "nodeType": "YulIdentifier", - "src": "5679:6:43" - }, - "nativeSrc": "5679:42:43", - "nodeType": "YulFunctionCall", - "src": "5679:42:43" - }, - "nativeSrc": "5679:42:43", - "nodeType": "YulExpressionStatement", - "src": "5679:42:43" - }, - { - "nativeSrc": "5738:24:43", - "nodeType": "YulAssignment", - "src": "5738:24:43", - "value": { - "arguments": [ - { - "name": "dstPtr", - "nativeSrc": "5752:6:43", - "nodeType": "YulIdentifier", - "src": "5752:6:43" - }, - { - "kind": "number", - "nativeSrc": "5760:1:43", - "nodeType": "YulLiteral", - "src": "5760:1:43", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "5748:3:43", - "nodeType": "YulIdentifier", - "src": "5748:3:43" - }, - "nativeSrc": "5748:14:43", - "nodeType": "YulFunctionCall", - "src": "5748:14:43" - }, - "variableNames": [ - { - "name": "dstPtr", - "nativeSrc": "5738:6:43", - "nodeType": "YulIdentifier", - "src": "5738:6:43" - } - ] - }, - { - "nativeSrc": "5779:40:43", - "nodeType": "YulAssignment", - "src": "5779:40:43", - "value": { - "arguments": [ - { - "name": "srcOffset", - "nativeSrc": "5796:9:43", - "nodeType": "YulIdentifier", - "src": "5796:9:43" - }, - { - "name": "srcOffset_1", - "nativeSrc": "5807:11:43", - "nodeType": "YulIdentifier", - "src": "5807:11:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "5792:3:43", - "nodeType": "YulIdentifier", - "src": "5792:3:43" - }, - "nativeSrc": "5792:27:43", - "nodeType": "YulFunctionCall", - "src": "5792:27:43" - }, - "variableNames": [ - { - "name": "srcOffset", - "nativeSrc": "5779:9:43", - "nodeType": "YulIdentifier", - "src": "5779:9:43" - } - ] - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nativeSrc": "5608:1:43", - "nodeType": "YulIdentifier", - "src": "5608:1:43" - }, - { - "name": "loopEnd", - "nativeSrc": "5611:7:43", - "nodeType": "YulIdentifier", - "src": "5611:7:43" - } - ], - "functionName": { - "name": "lt", - "nativeSrc": "5605:2:43", - "nodeType": "YulIdentifier", - "src": "5605:2:43" - }, - "nativeSrc": "5605:14:43", - "nodeType": "YulFunctionCall", - "src": "5605:14:43" - }, - "nativeSrc": "5597:236:43", - "nodeType": "YulForLoop", - "post": { - "nativeSrc": "5620:28:43", - "nodeType": "YulBlock", - "src": "5620:28:43", - "statements": [ - { - "nativeSrc": "5622:24:43", - "nodeType": "YulAssignment", - "src": "5622:24:43", - "value": { - "arguments": [ - { - "name": "i", - "nativeSrc": "5631:1:43", - "nodeType": "YulIdentifier", - "src": "5631:1:43" - }, - { - "name": "srcOffset_1", - "nativeSrc": "5634:11:43", - "nodeType": "YulIdentifier", - "src": "5634:11:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "5627:3:43", - "nodeType": "YulIdentifier", - "src": "5627:3:43" - }, - "nativeSrc": "5627:19:43", - "nodeType": "YulFunctionCall", - "src": "5627:19:43" - }, - "variableNames": [ - { - "name": "i", - "nativeSrc": "5622:1:43", - "nodeType": "YulIdentifier", - "src": "5622:1:43" - } - ] - } - ] - }, - "pre": { - "nativeSrc": "5601:3:43", - "nodeType": "YulBlock", - "src": "5601:3:43", - "statements": [] - }, - "src": "5597:236:43" - }, - { - "body": { - "nativeSrc": "5881:166:43", - "nodeType": "YulBlock", - "src": "5881:166:43", - "statements": [ - { - "nativeSrc": "5899:43:43", - "nodeType": "YulVariableDeclaration", - "src": "5899:43:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "src", - "nativeSrc": "5926:3:43", - "nodeType": "YulIdentifier", - "src": "5926:3:43" - }, - { - "name": "srcOffset", - "nativeSrc": "5931:9:43", - "nodeType": "YulIdentifier", - "src": "5931:9:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "5922:3:43", - "nodeType": "YulIdentifier", - "src": "5922:3:43" - }, - "nativeSrc": "5922:19:43", - "nodeType": "YulFunctionCall", - "src": "5922:19:43" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "5916:5:43", - "nodeType": "YulIdentifier", - "src": "5916:5:43" - }, - "nativeSrc": "5916:26:43", - "nodeType": "YulFunctionCall", - "src": "5916:26:43" - }, - "variables": [ - { - "name": "lastValue", - "nativeSrc": "5903:9:43", - "nodeType": "YulTypedName", - "src": "5903:9:43", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "dstPtr", - "nativeSrc": "5966:6:43", - "nodeType": "YulIdentifier", - "src": "5966:6:43" - }, - { - "arguments": [ - { - "name": "lastValue", - "nativeSrc": "5978:9:43", - "nodeType": "YulIdentifier", - "src": "5978:9:43" - }, - { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "6005:1:43", - "nodeType": "YulLiteral", - "src": "6005:1:43", - "type": "", - "value": "3" - }, - { - "name": "newLen", - "nativeSrc": "6008:6:43", - "nodeType": "YulIdentifier", - "src": "6008:6:43" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "6001:3:43", - "nodeType": "YulIdentifier", - "src": "6001:3:43" - }, - "nativeSrc": "6001:14:43", - "nodeType": "YulFunctionCall", - "src": "6001:14:43" - }, - { - "kind": "number", - "nativeSrc": "6017:3:43", - "nodeType": "YulLiteral", - "src": "6017:3:43", - "type": "", - "value": "248" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "5997:3:43", - "nodeType": "YulIdentifier", - "src": "5997:3:43" - }, - "nativeSrc": "5997:24:43", - "nodeType": "YulFunctionCall", - "src": "5997:24:43" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "6027:1:43", - "nodeType": "YulLiteral", - "src": "6027:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "not", - "nativeSrc": "6023:3:43", - "nodeType": "YulIdentifier", - "src": "6023:3:43" - }, - "nativeSrc": "6023:6:43", - "nodeType": "YulFunctionCall", - "src": "6023:6:43" - } - ], - "functionName": { - "name": "shr", - "nativeSrc": "5993:3:43", - "nodeType": "YulIdentifier", - "src": "5993:3:43" - }, - "nativeSrc": "5993:37:43", - "nodeType": "YulFunctionCall", - "src": "5993:37:43" - } - ], - "functionName": { - "name": "not", - "nativeSrc": "5989:3:43", - "nodeType": "YulIdentifier", - "src": "5989:3:43" - }, - "nativeSrc": "5989:42:43", - "nodeType": "YulFunctionCall", - "src": "5989:42:43" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "5974:3:43", - "nodeType": "YulIdentifier", - "src": "5974:3:43" - }, - "nativeSrc": "5974:58:43", - "nodeType": "YulFunctionCall", - "src": "5974:58:43" - } - ], - "functionName": { - "name": "sstore", - "nativeSrc": "5959:6:43", - "nodeType": "YulIdentifier", - "src": "5959:6:43" - }, - "nativeSrc": "5959:74:43", - "nodeType": "YulFunctionCall", - "src": "5959:74:43" - }, - "nativeSrc": "5959:74:43", - "nodeType": "YulExpressionStatement", - "src": "5959:74:43" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "loopEnd", - "nativeSrc": "5852:7:43", - "nodeType": "YulIdentifier", - "src": "5852:7:43" - }, - { - "name": "newLen", - "nativeSrc": "5861:6:43", - "nodeType": "YulIdentifier", - "src": "5861:6:43" - } - ], - "functionName": { - "name": "lt", - "nativeSrc": "5849:2:43", - "nodeType": "YulIdentifier", - "src": "5849:2:43" - }, - "nativeSrc": "5849:19:43", - "nodeType": "YulFunctionCall", - "src": "5849:19:43" - }, - "nativeSrc": "5846:201:43", - "nodeType": "YulIf", - "src": "5846:201:43" - }, - { - "expression": { - "arguments": [ - { - "name": "slot", - "nativeSrc": "6067:4:43", - "nodeType": "YulIdentifier", - "src": "6067:4:43" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "6081:1:43", - "nodeType": "YulLiteral", - "src": "6081:1:43", - "type": "", - "value": "1" - }, - { - "name": "newLen", - "nativeSrc": "6084:6:43", - "nodeType": "YulIdentifier", - "src": "6084:6:43" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "6077:3:43", - "nodeType": "YulIdentifier", - "src": "6077:3:43" - }, - "nativeSrc": "6077:14:43", - "nodeType": "YulFunctionCall", - "src": "6077:14:43" - }, - { - "kind": "number", - "nativeSrc": "6093:1:43", - "nodeType": "YulLiteral", - "src": "6093:1:43", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "6073:3:43", - "nodeType": "YulIdentifier", - "src": "6073:3:43" - }, - "nativeSrc": "6073:22:43", - "nodeType": "YulFunctionCall", - "src": "6073:22:43" - } - ], - "functionName": { - "name": "sstore", - "nativeSrc": "6060:6:43", - "nodeType": "YulIdentifier", - "src": "6060:6:43" - }, - "nativeSrc": "6060:36:43", - "nodeType": "YulFunctionCall", - "src": "6060:36:43" - }, - "nativeSrc": "6060:36:43", - "nodeType": "YulExpressionStatement", - "src": "6060:36:43" - } - ] - }, - "nativeSrc": "5443:663:43", - "nodeType": "YulCase", - "src": "5443:663:43", - "value": { - "kind": "number", - "nativeSrc": "5448:1:43", - "nodeType": "YulLiteral", - "src": "5448:1:43", - "type": "", - "value": "1" - } - }, - { - "body": { - "nativeSrc": "6123:234:43", - "nodeType": "YulBlock", - "src": "6123:234:43", - "statements": [ - { - "nativeSrc": "6137:14:43", - "nodeType": "YulVariableDeclaration", - "src": "6137:14:43", - "value": { - "kind": "number", - "nativeSrc": "6150:1:43", - "nodeType": "YulLiteral", - "src": "6150:1:43", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "value", - "nativeSrc": "6141:5:43", - "nodeType": "YulTypedName", - "src": "6141:5:43", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "6186:67:43", - "nodeType": "YulBlock", - "src": "6186:67:43", - "statements": [ - { - "nativeSrc": "6204:35:43", - "nodeType": "YulAssignment", - "src": "6204:35:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "src", - "nativeSrc": "6223:3:43", - "nodeType": "YulIdentifier", - "src": "6223:3:43" - }, - { - "name": "srcOffset", - "nativeSrc": "6228:9:43", - "nodeType": "YulIdentifier", - "src": "6228:9:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "6219:3:43", - "nodeType": "YulIdentifier", - "src": "6219:3:43" - }, - "nativeSrc": "6219:19:43", - "nodeType": "YulFunctionCall", - "src": "6219:19:43" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "6213:5:43", - "nodeType": "YulIdentifier", - "src": "6213:5:43" - }, - "nativeSrc": "6213:26:43", - "nodeType": "YulFunctionCall", - "src": "6213:26:43" - }, - "variableNames": [ - { - "name": "value", - "nativeSrc": "6204:5:43", - "nodeType": "YulIdentifier", - "src": "6204:5:43" - } - ] - } - ] - }, - "condition": { - "name": "newLen", - "nativeSrc": "6167:6:43", - "nodeType": "YulIdentifier", - "src": "6167:6:43" - }, - "nativeSrc": "6164:89:43", - "nodeType": "YulIf", - "src": "6164:89:43" - }, - { - "expression": { - "arguments": [ - { - "name": "slot", - "nativeSrc": "6273:4:43", - "nodeType": "YulIdentifier", - "src": "6273:4:43" - }, - { - "arguments": [ - { - "name": "value", - "nativeSrc": "6332:5:43", - "nodeType": "YulIdentifier", - "src": "6332:5:43" - }, - { - "name": "newLen", - "nativeSrc": "6339:6:43", - "nodeType": "YulIdentifier", - "src": "6339:6:43" - } - ], - "functionName": { - "name": "extract_used_part_and_set_length_of_short_byte_array", - "nativeSrc": "6279:52:43", - "nodeType": "YulIdentifier", - "src": "6279:52:43" - }, - "nativeSrc": "6279:67:43", - "nodeType": "YulFunctionCall", - "src": "6279:67:43" - } - ], - "functionName": { - "name": "sstore", - "nativeSrc": "6266:6:43", - "nodeType": "YulIdentifier", - "src": "6266:6:43" - }, - "nativeSrc": "6266:81:43", - "nodeType": "YulFunctionCall", - "src": "6266:81:43" - }, - "nativeSrc": "6266:81:43", - "nodeType": "YulExpressionStatement", - "src": "6266:81:43" - } - ] - }, - "nativeSrc": "6115:242:43", - "nodeType": "YulCase", - "src": "6115:242:43", - "value": "default" - } - ], - "expression": { - "arguments": [ - { - "name": "newLen", - "nativeSrc": "5423:6:43", - "nodeType": "YulIdentifier", - "src": "5423:6:43" - }, - { - "kind": "number", - "nativeSrc": "5431:2:43", - "nodeType": "YulLiteral", - "src": "5431:2:43", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "5420:2:43", - "nodeType": "YulIdentifier", - "src": "5420:2:43" - }, - "nativeSrc": "5420:14:43", - "nodeType": "YulFunctionCall", - "src": "5420:14:43" - }, - "nativeSrc": "5413:944:43", - "nodeType": "YulSwitch", - "src": "5413:944:43" - } - ] - }, - "name": "copy_byte_array_to_storage_from_t_string_memory_ptr_to_t_string_storage", - "nativeSrc": "5018:1345:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "slot", - "nativeSrc": "5099:4:43", - "nodeType": "YulTypedName", - "src": "5099:4:43", - "type": "" - }, - { - "name": "src", - "nativeSrc": "5105:3:43", - "nodeType": "YulTypedName", - "src": "5105:3:43", - "type": "" - } - ], - "src": "5018:1345:43" - } - ] - }, - "contents": "{\n { }\n function panic_error_0x41()\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n function abi_decode_string_fromMemory(offset, end) -> array\n {\n if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n let _1 := mload(offset)\n let _2 := sub(shl(64, 1), 1)\n if gt(_1, _2) { panic_error_0x41() }\n let _3 := not(31)\n let memPtr := mload(64)\n let newFreePtr := add(memPtr, and(add(and(add(_1, 0x1f), _3), 63), _3))\n if or(gt(newFreePtr, _2), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n mstore(64, newFreePtr)\n mstore(memPtr, _1)\n let _4 := 0x20\n if gt(add(add(offset, _1), 0x20), end) { revert(0, 0) }\n let i := 0\n for { } lt(i, _1) { i := add(i, _4) }\n {\n mstore(add(add(memPtr, i), _4), mload(add(add(offset, i), _4)))\n }\n mstore(add(add(memPtr, _1), 0x20), 0)\n array := memPtr\n }\n function abi_decode_address_fromMemory(offset) -> value\n {\n value := mload(offset)\n if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n }\n function abi_decode_tuple_t_string_memory_ptrt_string_memory_ptrt_addresst_address_fromMemory(headStart, dataEnd) -> value0, value1, value2, value3\n {\n if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n let offset := mload(headStart)\n let _1 := sub(shl(64, 1), 1)\n if gt(offset, _1) { revert(0, 0) }\n value0 := abi_decode_string_fromMemory(add(headStart, offset), dataEnd)\n let offset_1 := mload(add(headStart, 32))\n if gt(offset_1, _1) { revert(0, 0) }\n value1 := abi_decode_string_fromMemory(add(headStart, offset_1), dataEnd)\n value2 := abi_decode_address_fromMemory(add(headStart, 64))\n value3 := abi_decode_address_fromMemory(add(headStart, 96))\n }\n function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n }\n function panic_error_0x11()\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n function checked_sub_t_uint8(x, y) -> diff\n {\n diff := sub(and(x, 0xff), and(y, 0xff))\n if gt(diff, 0xff) { panic_error_0x11() }\n }\n function checked_exp_helper(_base, exponent) -> power, base\n {\n let power_1 := 1\n power := 1\n base := _base\n for { } gt(exponent, power_1) { }\n {\n if gt(base, div(not(0), base)) { panic_error_0x11() }\n if and(exponent, power_1) { power := mul(power, base) }\n base := mul(base, base)\n exponent := shr(power_1, exponent)\n }\n }\n function checked_exp_unsigned(base, exponent) -> power\n {\n if iszero(exponent)\n {\n power := 1\n leave\n }\n if iszero(base)\n {\n power := 0\n leave\n }\n switch base\n case 1 {\n power := 1\n leave\n }\n case 2 {\n if gt(exponent, 255) { panic_error_0x11() }\n power := shl(exponent, 1)\n leave\n }\n if or(and(lt(base, 11), lt(exponent, 78)), and(lt(base, 307), lt(exponent, 32)))\n {\n power := exp(base, exponent)\n leave\n }\n let power_1, base_1 := checked_exp_helper(base, exponent)\n if gt(power_1, div(not(0), base_1)) { panic_error_0x11() }\n power := mul(power_1, base_1)\n }\n function checked_exp_t_uint256_t_uint8(base, exponent) -> power\n {\n power := checked_exp_unsigned(base, and(exponent, 0xff))\n }\n function extract_byte_array_length(data) -> length\n {\n length := shr(1, data)\n let outOfPlaceEncoding := and(data, 1)\n if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n if eq(outOfPlaceEncoding, lt(length, 32))\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x22)\n revert(0, 0x24)\n }\n }\n function array_dataslot_string_storage(ptr) -> data\n {\n mstore(0, ptr)\n data := keccak256(0, 0x20)\n }\n function clean_up_bytearray_end_slots_string_storage(array, len, startIndex)\n {\n if gt(len, 31)\n {\n let _1 := 0\n mstore(0, array)\n let data := keccak256(0, 0x20)\n let deleteStart := add(data, shr(5, add(startIndex, 31)))\n if lt(startIndex, 0x20) { deleteStart := data }\n let _2 := add(data, shr(5, add(len, 31)))\n let start := deleteStart\n for { } lt(start, _2) { start := add(start, 1) }\n { sstore(start, _1) }\n }\n }\n function extract_used_part_and_set_length_of_short_byte_array(data, len) -> used\n {\n used := or(and(data, not(shr(shl(3, len), not(0)))), shl(1, len))\n }\n function copy_byte_array_to_storage_from_t_string_memory_ptr_to_t_string_storage(slot, src)\n {\n let newLen := mload(src)\n if gt(newLen, sub(shl(64, 1), 1)) { panic_error_0x41() }\n clean_up_bytearray_end_slots_string_storage(slot, extract_byte_array_length(sload(slot)), newLen)\n let srcOffset := 0\n let srcOffset_1 := 0x20\n srcOffset := 0x20\n switch gt(newLen, 31)\n case 1 {\n let loopEnd := and(newLen, not(31))\n let dstPtr := array_dataslot_string_storage(slot)\n let i := 0\n for { } lt(i, loopEnd) { i := add(i, srcOffset_1) }\n {\n sstore(dstPtr, mload(add(src, srcOffset)))\n dstPtr := add(dstPtr, 1)\n srcOffset := add(srcOffset, srcOffset_1)\n }\n if lt(loopEnd, newLen)\n {\n let lastValue := mload(add(src, srcOffset))\n sstore(dstPtr, and(lastValue, not(shr(and(shl(3, newLen), 248), not(0)))))\n }\n sstore(slot, add(shl(1, newLen), 1))\n }\n default {\n let value := 0\n if newLen\n {\n value := mload(add(src, srcOffset))\n }\n sstore(slot, extract_used_part_and_set_length_of_short_byte_array(value, newLen))\n }\n }\n}", - "id": 43, - "language": "Yul", - "name": "#utility.yul" - } - ], - "linkReferences": {}, - "object": "60c06040523480156200001157600080fd5b506040516200366a3803806200366a8339810160408190526200003491620002d2565b83838383838360128484818181818d6001600160a01b0381166200007257604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b6200007d8162000198565b506001600160a01b038083166080528116620000ac57604051632d618d8160e21b815260040160405180910390fd5b60805160405163ca5eb5e160e01b81526001600160a01b0383811660048301529091169063ca5eb5e190602401600060405180830381600087803b158015620000f457600080fd5b505af115801562000109573d6000803e3d6000fd5b505050505050505062000121620001e860201b60201c565b60ff168360ff16101562000148576040516301e9714b60e41b815260040160405180910390fd5b6200015560068462000377565b6200016290600a62000496565b60a052506008915062000178905083826200053f565b5060096200018782826200053f565b50505050505050505050506200060b565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600690565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200021557600080fd5b81516001600160401b0380821115620002325762000232620001ed565b604051601f8301601f19908116603f011681019082821181831017156200025d576200025d620001ed565b81604052838152602092508660208588010111156200027b57600080fd5b600091505b838210156200029f578582018301518183018401529082019062000280565b6000602085830101528094505050505092915050565b80516001600160a01b0381168114620002cd57600080fd5b919050565b60008060008060808587031215620002e957600080fd5b84516001600160401b03808211156200030157600080fd5b6200030f8883890162000203565b955060208701519150808211156200032657600080fd5b50620003358782880162000203565b9350506200034660408601620002b5565b91506200035660608601620002b5565b905092959194509250565b634e487b7160e01b600052601160045260246000fd5b60ff828116828216039081111562000393576200039362000361565b92915050565b600181815b80851115620003da578160001904821115620003be57620003be62000361565b80851615620003cc57918102915b93841c93908002906200039e565b509250929050565b600082620003f35750600162000393565b81620004025750600062000393565b81600181146200041b5760028114620004265762000446565b600191505062000393565b60ff8411156200043a576200043a62000361565b50506001821b62000393565b5060208310610133831016604e8410600b84101617156200046b575081810a62000393565b62000477838362000399565b80600019048211156200048e576200048e62000361565b029392505050565b6000620004a760ff841683620003e2565b9392505050565b600181811c90821680620004c357607f821691505b602082108103620004e457634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200053a576000816000526020600020601f850160051c81016020861015620005155750805b601f850160051c820191505b81811015620005365782815560010162000521565b5050505b505050565b81516001600160401b038111156200055b576200055b620001ed565b62000573816200056c8454620004ae565b84620004ea565b602080601f831160018114620005ab5760008415620005925750858301515b600019600386901b1c1916600185901b17855562000536565b600085815260208120601f198616915b82811015620005dc57888601518255948401946001909101908401620005bb565b5085821015620005fb5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a051612ff3620006776000396000818161061e015281816119e001528181611a550152611c590152600081816104dd0152818161098d01528181610fdd01528181611254015281816115be01528181611d5101528181611ec10152611f780152612ff36000f3fe6080604052600436106102515760003560e01c80637d25a05e11610139578063bb0b6a53116100b6578063d045a0dc1161007a578063d045a0dc14610755578063d424388514610768578063dd62ed3e14610788578063f2fde38b146107ce578063fc0c546a14610461578063ff7bd03d146107ee57600080fd5b8063bb0b6a53146106b4578063bc70b354146106e1578063bd815db014610701578063c7c7f5b314610714578063ca5eb5e11461073557600080fd5b8063963efcaa116100fd578063963efcaa1461060c5780639f68b96414610640578063a9059cbb14610654578063b731ea0a14610674578063b98bd0701461069457600080fd5b80637d25a05e1461056a57806382413eac146105a5578063857749b0146105c55780638da5cb5b146105d957806395d89b41146105f757600080fd5b806323b872dd116101d25780635535d461116101965780635535d461146104745780635a0dfe4d146104945780635e280f11146104cb5780636fc1b31e146104ff57806370a082311461051f578063715018a61461055557600080fd5b806323b872dd146103d2578063313ce567146103f25780633400288b146104145780633b6f743b1461043457806352ae28791461046157600080fd5b8063134d4f2511610219578063134d4f251461032d578063156a0d0f1461035557806317442b701461037c57806318160ddd1461039e5780631f5e1334146103bd57600080fd5b806306fdde0314610256578063095ea7b3146102815780630d35b415146102b1578063111ecdad146102e057806313137d6514610318575b600080fd5b34801561026257600080fd5b5061026b61080e565b60405161027891906120f0565b60405180910390f35b34801561028d57600080fd5b506102a161029c366004612118565b6108a0565b6040519015158152602001610278565b3480156102bd57600080fd5b506102d16102cc36600461215c565b6108ba565b60405161027893929190612190565b3480156102ec57600080fd5b50600454610300906001600160a01b031681565b6040516001600160a01b039091168152602001610278565b61032b610326366004612283565b61098b565b005b34801561033957600080fd5b50610342600281565b60405161ffff9091168152602001610278565b34801561036157600080fd5b506040805162b9270b60e21b81526001602082015201610278565b34801561038857600080fd5b5060408051600181526002602082015201610278565b3480156103aa57600080fd5b506007545b604051908152602001610278565b3480156103c957600080fd5b50610342600181565b3480156103de57600080fd5b506102a16103ed366004612322565b610a4b565b3480156103fe57600080fd5b5060125b60405160ff9091168152602001610278565b34801561042057600080fd5b5061032b61042f36600461237c565b610a71565b34801561044057600080fd5b5061045461044f3660046123a6565b610a87565b60405161027891906123f7565b34801561046d57600080fd5b5030610300565b34801561048057600080fd5b5061026b61048f366004612420565b610aee565b3480156104a057600080fd5b506102a16104af36600461237c565b63ffffffff919091166000908152600160205260409020541490565b3480156104d757600080fd5b506103007f000000000000000000000000000000000000000000000000000000000000000081565b34801561050b57600080fd5b5061032b61051a366004612453565b610b93565b34801561052b57600080fd5b506103af61053a366004612453565b6001600160a01b031660009081526005602052604090205490565b34801561056157600080fd5b5061032b610bf0565b34801561057657600080fd5b5061058d61058536600461237c565b600092915050565b6040516001600160401b039091168152602001610278565b3480156105b157600080fd5b506102a16105c0366004612470565b610c04565b3480156105d157600080fd5b506006610402565b3480156105e557600080fd5b506000546001600160a01b0316610300565b34801561060357600080fd5b5061026b610c19565b34801561061857600080fd5b506103af7f000000000000000000000000000000000000000000000000000000000000000081565b34801561064c57600080fd5b5060006102a1565b34801561066057600080fd5b506102a161066f366004612118565b610c28565b34801561068057600080fd5b50600254610300906001600160a01b031681565b3480156106a057600080fd5b5061032b6106af36600461251a565b610c36565b3480156106c057600080fd5b506103af6106cf36600461255b565b60016020526000908152604090205481565b3480156106ed57600080fd5b5061026b6106fc366004612576565b610c50565b61032b61070f36600461251a565b610df8565b6107276107223660046125d6565b610f82565b604051610278929190612643565b34801561074157600080fd5b5061032b610750366004612453565b610fb6565b61032b610763366004612283565b61103c565b34801561077457600080fd5b5061032b610783366004612453565b61106b565b34801561079457600080fd5b506103af6107a3366004612695565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b3480156107da57600080fd5b5061032b6107e9366004612453565b6110c1565b3480156107fa57600080fd5b506102a16108093660046126c3565b6110ff565b60606008805461081d906126df565b80601f0160208091040260200160405190810160405280929190818152602001828054610849906126df565b80156108965780601f1061086b57610100808354040283529160200191610896565b820191906000526020600020905b81548152906001019060200180831161087957829003601f168201915b5050505050905090565b6000336108ae818585611135565b60019150505b92915050565b604080518082019091526000808252602082015260606108ed604051806040016040528060008152602001600081525090565b60408051808201825260008082526001600160401b03602080840182905284518381529081019094529195509182610948565b6040805180820190915260008152606060208201528152602001906001900390816109205790505b50935060008061096d604089013560608a013561096860208c018c61255b565b611147565b60408051808201909152918252602082015296989597505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633146109db576040516391ac5e4f60e01b81523360048201526024015b60405180910390fd5b602087018035906109f5906109f0908a61255b565b611183565b14610a3357610a07602088018861255b565b60405163309afaf360e21b815263ffffffff9091166004820152602088013560248201526044016109d2565b610a42878787878787876111bf565b50505050505050565b600033610a59858285611326565b610a648585856113a4565b60019150505b9392505050565b610a79611403565b610a838282611430565b5050565b60408051808201909152600080825260208201526000610ab760408501356060860135610968602088018861255b565b915050600080610ac78684611485565b9092509050610ae4610adc602088018861255b565b8383886115a8565b9695505050505050565b600360209081526000928352604080842090915290825290208054610b12906126df565b80601f0160208091040260200160405190810160405280929190818152602001828054610b3e906126df565b8015610b8b5780601f10610b6057610100808354040283529160200191610b8b565b820191906000526020600020905b815481529060010190602001808311610b6e57829003601f168201915b505050505081565b610b9b611403565b600480546001600160a01b0319166001600160a01b0383169081179091556040519081527ff0be4f1e87349231d80c36b33f9e8639658eeaf474014dee15a3e6a4d4414197906020015b60405180910390a150565b610bf8611403565b610c026000611689565b565b6001600160a01b03811630145b949350505050565b60606009805461081d906126df565b6000336108ae8185856113a4565b610c3e611403565b610a83610c4b82846127ca565b6116d9565b63ffffffff8416600090815260036020908152604080832061ffff87168452909152812080546060929190610c84906126df565b80601f0160208091040260200160405190810160405280929190818152602001828054610cb0906126df565b8015610cfd5780601f10610cd257610100808354040283529160200191610cfd565b820191906000526020600020905b815481529060010190602001808311610ce057829003601f168201915b505050505090508051600003610d4d5783838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929450610c119350505050565b6000839003610d5d579050610c11565b60028310610ddb57610da484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506117e092505050565b80610db284600281886128df565b604051602001610dc493929190612909565b604051602081830303815290604052915050610c11565b8383604051639a6d49cd60e01b81526004016109d292919061295a565b60005b81811015610f015736838383818110610e1657610e1661296e565b9050602002810190610e289190612984565b9050610e5b610e3a602083018361255b565b602083013563ffffffff919091166000908152600160205260409020541490565b610e655750610ef9565b3063d045a0dc60c08301358360a0810135610e846101008301836129a5565b610e95610100890160e08a01612453565b610ea36101208a018a6129a5565b6040518963ffffffff1660e01b8152600401610ec59796959493929190612a00565b6000604051808303818588803b158015610ede57600080fd5b505af1158015610ef2573d6000803e3d6000fd5b5050505050505b600101610dfb565b50336001600160a01b0316638e9e70996040518163ffffffff1660e01b8152600401600060405180830381865afa158015610f40573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610f689190810190612a86565b604051638351eea760e01b81526004016109d291906120f0565b610f8a612059565b6040805180820190915260008082526020820152610fa985858561180c565b915091505b935093915050565b610fbe611403565b60405163ca5eb5e160e01b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063ca5eb5e190602401600060405180830381600087803b15801561102157600080fd5b505af1158015611035573d6000803e3d6000fd5b5050505050565b33301461105c5760405163029a949d60e31b815260040160405180910390fd5b610a4287878787878787610a33565b611073611403565b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527fd48d879cef83a1c0bdda516f27b13ddb1b3f8bbac1c9e1511bb2a659c242776090602001610be5565b6110c9611403565b6001600160a01b0381166110f357604051631e4fbdf760e01b8152600060048201526024016109d2565b6110fc81611689565b50565b6000602082018035906001908390611117908661255b565b63ffffffff1681526020810191909152604001600020541492915050565b6111428383836001611907565b505050565b600080611153856119dc565b915081905083811015610fae576040516371c4efed60e01b815260048101829052602481018590526044016109d2565b63ffffffff8116600090815260016020526040812054806108b45760405163f6ff4fb760e01b815263ffffffff841660048201526024016109d2565b60006111d16111ce8787611a13565b90565b905060006111fd826111eb6111e68a8a611a2b565b611a4e565b6111f860208d018d61255b565b611a83565b905060288611156112c457600061123a61121d60608c0160408d01612af3565b61122a60208d018d61255b565b846112358c8c611aab565b611af6565b604051633e5ac80960e11b81529091506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690637cb59012906112909086908d906000908790600401612b10565b600060405180830381600087803b1580156112aa57600080fd5b505af11580156112be573d6000803e3d6000fd5b50505050505b6001600160a01b038216887fefed6d3500546b29533b128a29e3a94d70788727f0507505ac12eaf2e578fd9c6112fd60208d018d61255b565b6040805163ffffffff9092168252602082018690520160405180910390a3505050505050505050565b6001600160a01b03838116600090815260066020908152604080832093861683529290522054600019811461139e578181101561138f57604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064016109d2565b61139e84848484036000611907565b50505050565b6001600160a01b0383166113ce57604051634b637e8f60e11b8152600060048201526024016109d2565b6001600160a01b0382166113f85760405163ec442f0560e01b8152600060048201526024016109d2565b611142838383611b28565b6000546001600160a01b03163314610c025760405163118cdaa760e01b81523360048201526024016109d2565b63ffffffff8216600081815260016020908152604091829020849055815192835282018390527f238399d427b947898edb290f5ff0f9109849b1c3ba196a42e35f00c50a54b98b910160405180910390a15050565b60608060006114e2856020013561149b86611c52565b6114a860a08901896129a5565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c7e92505050565b90935090506000816114f55760016114f8565b60025b905061151861150a602088018861255b565b826106fc60808a018a6129a5565b6004549093506001600160a01b0316801561159e5760405163043a78eb60e01b81526001600160a01b0382169063043a78eb9061155b9088908890600401612b41565b602060405180830381865afa158015611578573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061159c9190612b66565b505b5050509250929050565b60408051808201909152600080825260208201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ddc28c586040518060a001604052808863ffffffff16815260200161160b89611183565b8152602001878152602001868152602001851515815250306040518363ffffffff1660e01b8152600401611640929190612b83565b6040805180830381865afa15801561165c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116809190612c2c565b95945050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60005b81518110156117b05761170b8282815181106116fa576116fa61296e565b6020026020010151604001516117e0565b81818151811061171d5761171d61296e565b6020026020010151604001516003600084848151811061173f5761173f61296e565b60200260200101516000015163ffffffff1663ffffffff16815260200190815260200160002060008484815181106117795761177961296e565b60200260200101516020015161ffff1661ffff16815260200190815260200160002090816117a79190612c98565b506001016116dc565b507fbe4864a8e820971c0247f5992e2da559595f7bf076a21cb5928d443d2a13b67481604051610be59190612d57565b600281015161ffff8116600314610a835781604051639a6d49cd60e01b81526004016109d291906120f0565b611814612059565b604080518082019091526000808252602082015260008061184b33604089013560608a013561184660208c018c61255b565b611cf8565b9150915060008061185c8984611485565b909250905061188861187160208b018b61255b565b8383611882368d90038d018d612de2565b8b611d1e565b60408051808201909152858152602080820186905282519298509096503391907f85496b760a4b7f8d66384b9df21b381f5d1b1e79f229a47aaf4c232edc2fe59a906118d6908d018d61255b565b6040805163ffffffff909216825260208201899052810187905260600160405180910390a350505050935093915050565b6001600160a01b0384166119315760405163e602df0560e01b8152600060048201526024016109d2565b6001600160a01b03831661195b57604051634a1406b160e11b8152600060048201526024016109d2565b6001600160a01b038085166000908152600660209081526040808320938716835292905220829055801561139e57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516119ce91815260200190565b60405180910390a350505050565b60007f0000000000000000000000000000000000000000000000000000000000000000611a098184612e2a565b6108b49190612e4c565b6000611a2260208284866128df565b610a6a91612e63565b6000611a3b6028602084866128df565b611a4491612e81565b60c01c9392505050565b60006108b47f00000000000000000000000000000000000000000000000000000000000000006001600160401b038416612e4c565b60006001600160a01b038416611a995761dead93505b611aa38484611e29565b509092915050565b6060611aba82602881866128df565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929695505050505050565b606084848484604051602001611b0f9493929190612eb1565b6040516020818303038152906040529050949350505050565b6001600160a01b038316611b53578060076000828254611b489190612f00565b90915550611bc59050565b6001600160a01b03831660009081526005602052604090205481811015611ba65760405163391434e360e21b81526001600160a01b038516600482015260248101829052604481018390526064016109d2565b6001600160a01b03841660009081526005602052604090209082900390555b6001600160a01b038216611be157600780548290039055611c00565b6001600160a01b03821660009081526005602052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611c4591815260200190565b60405180910390a3505050565b60006108b47f000000000000000000000000000000000000000000000000000000000000000083612e2a565b8051606090151580611cc7578484604051602001611cb392919091825260c01b6001600160c01b031916602082015260280190565b604051602081830303815290604052611cee565b84843385604051602001611cde9493929190612f13565b6040516020818303038152906040525b9150935093915050565b600080611d06858585611147565b9092509050611d158683611e5f565b94509492505050565b611d26612059565b6000611d358460000151611e95565b602085015190915015611d4f57611d4f8460200151611ebd565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632637a450826040518060a001604052808b63ffffffff168152602001611d9f8c611183565b81526020018a815260200189815260200160008960200151111515815250866040518463ffffffff1660e01b8152600401611ddb929190612b83565b60806040518083038185885af1158015611df9573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611e1e9190612f56565b979650505050505050565b6001600160a01b038216611e535760405163ec442f0560e01b8152600060048201526024016109d2565b610a8360008383611b28565b6001600160a01b038216611e8957604051634b637e8f60e11b8152600060048201526024016109d2565b610a8382600083611b28565b6000813414611eb9576040516304fb820960e51b81523460048201526024016109d2565b5090565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e4fe1d946040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f419190612fa0565b90506001600160a01b038116611f6a576040516329b99a9560e11b815260040160405180910390fd5b6040805133602482018190527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0381811660448501526064808501889052855180860390910181526084909401909452602080840180516001600160e01b03166323b872dd60e01b1781528451610a8396881695899361139e93889360009283929091839182885af18061200b576040513d6000823e3d81fd5b50506000513d91508115612023578060011415612030565b6001600160a01b0384163b155b1561139e57604051635274afe760e01b81526001600160a01b03851660048201526024016109d2565b60405180606001604052806000801916815260200160006001600160401b0316815260200161209b604051806040016040528060008152602001600081525090565b905290565b60005b838110156120bb5781810151838201526020016120a3565b50506000910152565b600081518084526120dc8160208601602086016120a0565b601f01601f19169290920160200192915050565b602081526000610a6a60208301846120c4565b6001600160a01b03811681146110fc57600080fd5b6000806040838503121561212b57600080fd5b823561213681612103565b946020939093013593505050565b600060e0828403121561215657600080fd5b50919050565b60006020828403121561216e57600080fd5b81356001600160401b0381111561218457600080fd5b610c1184828501612144565b8351815260208085015190820152600060a08201604060a0604085015281865180845260c08601915060c08160051b8701019350602080890160005b8381101561220b5788870360bf190185528151805188528301518388018790526121f8878901826120c4565b97505093820193908201906001016121cc565b50508751606088015250505060208501516080850152509050610c11565b60006060828403121561215657600080fd5b60008083601f84011261224d57600080fd5b5081356001600160401b0381111561226457600080fd5b60208301915083602082850101111561227c57600080fd5b9250929050565b600080600080600080600060e0888a03121561229e57600080fd5b6122a88989612229565b96506060880135955060808801356001600160401b03808211156122cb57600080fd5b6122d78b838c0161223b565b909750955060a08a013591506122ec82612103565b90935060c0890135908082111561230257600080fd5b5061230f8a828b0161223b565b989b979a50959850939692959293505050565b60008060006060848603121561233757600080fd5b833561234281612103565b9250602084013561235281612103565b929592945050506040919091013590565b803563ffffffff8116811461237757600080fd5b919050565b6000806040838503121561238f57600080fd5b61213683612363565b80151581146110fc57600080fd5b600080604083850312156123b957600080fd5b82356001600160401b038111156123cf57600080fd5b6123db85828601612144565b92505060208301356123ec81612398565b809150509250929050565b8151815260208083015190820152604081016108b4565b803561ffff8116811461237757600080fd5b6000806040838503121561243357600080fd5b61243c83612363565b915061244a6020840161240e565b90509250929050565b60006020828403121561246557600080fd5b8135610a6a81612103565b60008060008060a0858703121561248657600080fd5b6124908686612229565b935060608501356001600160401b038111156124ab57600080fd5b6124b78782880161223b565b90945092505060808501356124cb81612103565b939692955090935050565b60008083601f8401126124e857600080fd5b5081356001600160401b038111156124ff57600080fd5b6020830191508360208260051b850101111561227c57600080fd5b6000806020838503121561252d57600080fd5b82356001600160401b0381111561254357600080fd5b61254f858286016124d6565b90969095509350505050565b60006020828403121561256d57600080fd5b610a6a82612363565b6000806000806060858703121561258c57600080fd5b61259585612363565b93506125a36020860161240e565b925060408501356001600160401b038111156125be57600080fd5b6125ca8782880161223b565b95989497509550505050565b600080600083850360808112156125ec57600080fd5b84356001600160401b0381111561260257600080fd5b61260e87828801612144565b9450506040601f198201121561262357600080fd5b50602084019150606084013561263881612103565b809150509250925092565b600060c082019050835182526001600160401b036020850151166020830152604084015161267e604084018280518252602090810151910152565b5082516080830152602083015160a0830152610a6a565b600080604083850312156126a857600080fd5b82356126b381612103565b915060208301356123ec81612103565b6000606082840312156126d557600080fd5b610a6a8383612229565b600181811c908216806126f357607f821691505b60208210810361215657634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b038111828210171561274b5761274b612713565b60405290565b604080519081016001600160401b038111828210171561274b5761274b612713565b604051601f8201601f191681016001600160401b038111828210171561279b5761279b612713565b604052919050565b60006001600160401b038211156127bc576127bc612713565b50601f01601f191660200190565b60006001600160401b03808411156127e4576127e4612713565b8360051b60206127f5818301612773565b86815291850191818101903684111561280d57600080fd5b865b848110156128d3578035868111156128275760008081fd5b8801606036829003121561283b5760008081fd5b612843612729565b61284c82612363565b815261285986830161240e565b86820152604080830135898111156128715760008081fd5b929092019136601f8401126128865760008081fd5b8235612899612894826127a3565b612773565b81815236898387010111156128ae5760008081fd5b818986018a83013760009181018901919091529082015284525091830191830161280f565b50979650505050505050565b600080858511156128ef57600080fd5b838611156128fc57600080fd5b5050820193919092039150565b6000845161291b8184602089016120a0565b8201838582376000930192835250909392505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b602081526000610c11602083018486612931565b634e487b7160e01b600052603260045260246000fd5b6000823561013e1983360301811261299b57600080fd5b9190910192915050565b6000808335601e198436030181126129bc57600080fd5b8301803591506001600160401b038211156129d657600080fd5b60200191503681900382131561227c57600080fd5b6001600160401b03811681146110fc57600080fd5b63ffffffff612a0e89612363565b1681526020880135602082015260006040890135612a2b816129eb565b6001600160401b03811660408401525087606083015260e06080830152612a5660e083018789612931565b6001600160a01b03861660a084015282810360c0840152612a78818587612931565b9a9950505050505050505050565b600060208284031215612a9857600080fd5b81516001600160401b03811115612aae57600080fd5b8201601f81018413612abf57600080fd5b8051612acd612894826127a3565b818152856020838501011115612ae257600080fd5b6116808260208301602086016120a0565b600060208284031215612b0557600080fd5b8135610a6a816129eb565b60018060a01b038516815283602082015261ffff83166040820152608060608201526000610ae460808301846120c4565b604081526000612b5460408301856120c4565b828103602084015261168081856120c4565b600060208284031215612b7857600080fd5b8151610a6a81612398565b6040815263ffffffff8351166040820152602083015160608201526000604084015160a06080840152612bb960e08401826120c4565b90506060850151603f198483030160a0850152612bd682826120c4565b60809690960151151560c08501525050506001600160a01b039190911660209091015290565b600060408284031215612c0e57600080fd5b612c16612751565b9050815181526020820151602082015292915050565b600060408284031215612c3e57600080fd5b610a6a8383612bfc565b601f821115611142576000816000526020600020601f850160051c81016020861015612c715750805b601f850160051c820191505b81811015612c9057828155600101612c7d565b505050505050565b81516001600160401b03811115612cb157612cb1612713565b612cc581612cbf84546126df565b84612c48565b602080601f831160018114612cfa5760008415612ce25750858301515b600019600386901b1c1916600185901b178555612c90565b600085815260208120601f198616915b82811015612d2957888601518255948401946001909101908401612d0a565b5085821015612d475787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b83811015612dd457888303603f190185528151805163ffffffff1684528781015161ffff16888501528601516060878501819052612dc0818601836120c4565b968901969450505090860190600101612d80565b509098975050505050505050565b600060408284031215612df457600080fd5b612dfc612751565b82358152602083013560208201528091505092915050565b634e487b7160e01b600052601160045260246000fd5b600082612e4757634e487b7160e01b600052601260045260246000fd5b500490565b80820281158282048414176108b4576108b4612e14565b803560208310156108b457600019602084900360031b1b1692915050565b6001600160c01b03198135818116916008851015612ea95780818660080360031b1b83161692505b505092915050565b6001600160401b0360c01b8560c01b16815263ffffffff60e01b8460e01b16600882015282600c82015260008251612ef081602c8501602087016120a0565b91909101602c0195945050505050565b808201808211156108b4576108b4612e14565b8481526001600160401b0360c01b8460c01b16602082015282602882015260008251612f468160488501602087016120a0565b9190910160480195945050505050565b600060808284031215612f6857600080fd5b612f70612729565b825181526020830151612f82816129eb565b6020820152612f948460408501612bfc565b60408201529392505050565b600060208284031215612fb257600080fd5b8151610a6a8161210356fea2646970667358221220a57d7f89465f52382b6c4fb535f012253eb27ee453204fb5020648385f95c20764736f6c63430008160033", - "opcodes": "PUSH1 0xC0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x366A CODESIZE SUB DUP1 PUSH3 0x366A DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x34 SWAP2 PUSH3 0x2D2 JUMP JUMPDEST DUP4 DUP4 DUP4 DUP4 DUP4 DUP4 PUSH1 0x12 DUP5 DUP5 DUP2 DUP2 DUP2 DUP2 DUP14 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH3 0x72 JUMPI PUSH1 0x40 MLOAD PUSH4 0x1E4FBDF7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH3 0x7D DUP2 PUSH3 0x198 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND PUSH1 0x80 MSTORE DUP2 AND PUSH3 0xAC JUMPI PUSH1 0x40 MLOAD PUSH4 0x2D618D81 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x80 MLOAD PUSH1 0x40 MLOAD PUSH4 0xCA5EB5E1 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0xCA5EB5E1 SWAP1 PUSH1 0x24 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0xF4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH3 0x109 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP PUSH3 0x121 PUSH3 0x1E8 PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST PUSH1 0xFF AND DUP4 PUSH1 0xFF AND LT ISZERO PUSH3 0x148 JUMPI PUSH1 0x40 MLOAD PUSH4 0x1E9714B PUSH1 0xE4 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH3 0x155 PUSH1 0x6 DUP5 PUSH3 0x377 JUMP JUMPDEST PUSH3 0x162 SWAP1 PUSH1 0xA PUSH3 0x496 JUMP JUMPDEST PUSH1 0xA0 MSTORE POP PUSH1 0x8 SWAP2 POP PUSH3 0x178 SWAP1 POP DUP4 DUP3 PUSH3 0x53F JUMP JUMPDEST POP PUSH1 0x9 PUSH3 0x187 DUP3 DUP3 PUSH3 0x53F JUMP JUMPDEST POP POP POP POP POP POP POP POP POP POP POP PUSH3 0x60B JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND DUP2 OR DUP5 SSTORE PUSH1 0x40 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP3 DUP4 SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x6 SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH3 0x215 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH3 0x232 JUMPI PUSH3 0x232 PUSH3 0x1ED JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP4 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP3 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH3 0x25D JUMPI PUSH3 0x25D PUSH3 0x1ED JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP4 DUP2 MSTORE PUSH1 0x20 SWAP3 POP DUP7 PUSH1 0x20 DUP6 DUP9 ADD ADD GT ISZERO PUSH3 0x27B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 SWAP2 POP JUMPDEST DUP4 DUP3 LT ISZERO PUSH3 0x29F JUMPI DUP6 DUP3 ADD DUP4 ADD MLOAD DUP2 DUP4 ADD DUP5 ADD MSTORE SWAP1 DUP3 ADD SWAP1 PUSH3 0x280 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP6 DUP4 ADD ADD MSTORE DUP1 SWAP5 POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x2CD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH3 0x2E9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH3 0x301 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x30F DUP9 DUP4 DUP10 ADD PUSH3 0x203 JUMP JUMPDEST SWAP6 POP PUSH1 0x20 DUP8 ADD MLOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH3 0x326 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH3 0x335 DUP8 DUP3 DUP9 ADD PUSH3 0x203 JUMP JUMPDEST SWAP4 POP POP PUSH3 0x346 PUSH1 0x40 DUP7 ADD PUSH3 0x2B5 JUMP JUMPDEST SWAP2 POP PUSH3 0x356 PUSH1 0x60 DUP7 ADD PUSH3 0x2B5 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0xFF DUP3 DUP2 AND DUP3 DUP3 AND SUB SWAP1 DUP2 GT ISZERO PUSH3 0x393 JUMPI PUSH3 0x393 PUSH3 0x361 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 JUMPDEST DUP1 DUP6 GT ISZERO PUSH3 0x3DA JUMPI DUP2 PUSH1 0x0 NOT DIV DUP3 GT ISZERO PUSH3 0x3BE JUMPI PUSH3 0x3BE PUSH3 0x361 JUMP JUMPDEST DUP1 DUP6 AND ISZERO PUSH3 0x3CC JUMPI SWAP2 DUP2 MUL SWAP2 JUMPDEST SWAP4 DUP5 SHR SWAP4 SWAP1 DUP1 MUL SWAP1 PUSH3 0x39E JUMP JUMPDEST POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH3 0x3F3 JUMPI POP PUSH1 0x1 PUSH3 0x393 JUMP JUMPDEST DUP2 PUSH3 0x402 JUMPI POP PUSH1 0x0 PUSH3 0x393 JUMP JUMPDEST DUP2 PUSH1 0x1 DUP2 EQ PUSH3 0x41B JUMPI PUSH1 0x2 DUP2 EQ PUSH3 0x426 JUMPI PUSH3 0x446 JUMP JUMPDEST PUSH1 0x1 SWAP2 POP POP PUSH3 0x393 JUMP JUMPDEST PUSH1 0xFF DUP5 GT ISZERO PUSH3 0x43A JUMPI PUSH3 0x43A PUSH3 0x361 JUMP JUMPDEST POP POP PUSH1 0x1 DUP3 SHL PUSH3 0x393 JUMP JUMPDEST POP PUSH1 0x20 DUP4 LT PUSH2 0x133 DUP4 LT AND PUSH1 0x4E DUP5 LT PUSH1 0xB DUP5 LT AND OR ISZERO PUSH3 0x46B JUMPI POP DUP2 DUP2 EXP PUSH3 0x393 JUMP JUMPDEST PUSH3 0x477 DUP4 DUP4 PUSH3 0x399 JUMP JUMPDEST DUP1 PUSH1 0x0 NOT DIV DUP3 GT ISZERO PUSH3 0x48E JUMPI PUSH3 0x48E PUSH3 0x361 JUMP JUMPDEST MUL SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH3 0x4A7 PUSH1 0xFF DUP5 AND DUP4 PUSH3 0x3E2 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH3 0x4C3 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 SUB PUSH3 0x4E4 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x1F DUP3 GT ISZERO PUSH3 0x53A JUMPI PUSH1 0x0 DUP2 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 PUSH1 0x1F DUP6 ADD PUSH1 0x5 SHR DUP2 ADD PUSH1 0x20 DUP7 LT ISZERO PUSH3 0x515 JUMPI POP DUP1 JUMPDEST PUSH1 0x1F DUP6 ADD PUSH1 0x5 SHR DUP3 ADD SWAP2 POP JUMPDEST DUP2 DUP2 LT ISZERO PUSH3 0x536 JUMPI DUP3 DUP2 SSTORE PUSH1 0x1 ADD PUSH3 0x521 JUMP JUMPDEST POP POP POP JUMPDEST POP POP POP JUMP JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH3 0x55B JUMPI PUSH3 0x55B PUSH3 0x1ED JUMP JUMPDEST PUSH3 0x573 DUP2 PUSH3 0x56C DUP5 SLOAD PUSH3 0x4AE JUMP JUMPDEST DUP5 PUSH3 0x4EA JUMP JUMPDEST PUSH1 0x20 DUP1 PUSH1 0x1F DUP4 GT PUSH1 0x1 DUP2 EQ PUSH3 0x5AB JUMPI PUSH1 0x0 DUP5 ISZERO PUSH3 0x592 JUMPI POP DUP6 DUP4 ADD MLOAD JUMPDEST PUSH1 0x0 NOT PUSH1 0x3 DUP7 SWAP1 SHL SHR NOT AND PUSH1 0x1 DUP6 SWAP1 SHL OR DUP6 SSTORE PUSH3 0x536 JUMP JUMPDEST PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x20 DUP2 KECCAK256 PUSH1 0x1F NOT DUP7 AND SWAP2 JUMPDEST DUP3 DUP2 LT ISZERO PUSH3 0x5DC JUMPI DUP9 DUP7 ADD MLOAD DUP3 SSTORE SWAP5 DUP5 ADD SWAP5 PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 DUP5 ADD PUSH3 0x5BB JUMP JUMPDEST POP DUP6 DUP3 LT ISZERO PUSH3 0x5FB JUMPI DUP8 DUP6 ADD MLOAD PUSH1 0x0 NOT PUSH1 0x3 DUP9 SWAP1 SHL PUSH1 0xF8 AND SHR NOT AND DUP2 SSTORE JUMPDEST POP POP POP POP POP PUSH1 0x1 SWAP1 DUP2 SHL ADD SWAP1 SSTORE POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH1 0xA0 MLOAD PUSH2 0x2FF3 PUSH3 0x677 PUSH1 0x0 CODECOPY PUSH1 0x0 DUP2 DUP2 PUSH2 0x61E ADD MSTORE DUP2 DUP2 PUSH2 0x19E0 ADD MSTORE DUP2 DUP2 PUSH2 0x1A55 ADD MSTORE PUSH2 0x1C59 ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x4DD ADD MSTORE DUP2 DUP2 PUSH2 0x98D ADD MSTORE DUP2 DUP2 PUSH2 0xFDD ADD MSTORE DUP2 DUP2 PUSH2 0x1254 ADD MSTORE DUP2 DUP2 PUSH2 0x15BE ADD MSTORE DUP2 DUP2 PUSH2 0x1D51 ADD MSTORE DUP2 DUP2 PUSH2 0x1EC1 ADD MSTORE PUSH2 0x1F78 ADD MSTORE PUSH2 0x2FF3 PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x251 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x7D25A05E GT PUSH2 0x139 JUMPI DUP1 PUSH4 0xBB0B6A53 GT PUSH2 0xB6 JUMPI DUP1 PUSH4 0xD045A0DC GT PUSH2 0x7A JUMPI DUP1 PUSH4 0xD045A0DC EQ PUSH2 0x755 JUMPI DUP1 PUSH4 0xD4243885 EQ PUSH2 0x768 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x788 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x7CE JUMPI DUP1 PUSH4 0xFC0C546A EQ PUSH2 0x461 JUMPI DUP1 PUSH4 0xFF7BD03D EQ PUSH2 0x7EE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xBB0B6A53 EQ PUSH2 0x6B4 JUMPI DUP1 PUSH4 0xBC70B354 EQ PUSH2 0x6E1 JUMPI DUP1 PUSH4 0xBD815DB0 EQ PUSH2 0x701 JUMPI DUP1 PUSH4 0xC7C7F5B3 EQ PUSH2 0x714 JUMPI DUP1 PUSH4 0xCA5EB5E1 EQ PUSH2 0x735 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x963EFCAA GT PUSH2 0xFD JUMPI DUP1 PUSH4 0x963EFCAA EQ PUSH2 0x60C JUMPI DUP1 PUSH4 0x9F68B964 EQ PUSH2 0x640 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x654 JUMPI DUP1 PUSH4 0xB731EA0A EQ PUSH2 0x674 JUMPI DUP1 PUSH4 0xB98BD070 EQ PUSH2 0x694 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x7D25A05E EQ PUSH2 0x56A JUMPI DUP1 PUSH4 0x82413EAC EQ PUSH2 0x5A5 JUMPI DUP1 PUSH4 0x857749B0 EQ PUSH2 0x5C5 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x5D9 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x5F7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x23B872DD GT PUSH2 0x1D2 JUMPI DUP1 PUSH4 0x5535D461 GT PUSH2 0x196 JUMPI DUP1 PUSH4 0x5535D461 EQ PUSH2 0x474 JUMPI DUP1 PUSH4 0x5A0DFE4D EQ PUSH2 0x494 JUMPI DUP1 PUSH4 0x5E280F11 EQ PUSH2 0x4CB JUMPI DUP1 PUSH4 0x6FC1B31E EQ PUSH2 0x4FF JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x51F JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x555 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x23B872DD EQ PUSH2 0x3D2 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x3F2 JUMPI DUP1 PUSH4 0x3400288B EQ PUSH2 0x414 JUMPI DUP1 PUSH4 0x3B6F743B EQ PUSH2 0x434 JUMPI DUP1 PUSH4 0x52AE2879 EQ PUSH2 0x461 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x134D4F25 GT PUSH2 0x219 JUMPI DUP1 PUSH4 0x134D4F25 EQ PUSH2 0x32D JUMPI DUP1 PUSH4 0x156A0D0F EQ PUSH2 0x355 JUMPI DUP1 PUSH4 0x17442B70 EQ PUSH2 0x37C JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x39E JUMPI DUP1 PUSH4 0x1F5E1334 EQ PUSH2 0x3BD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x256 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x281 JUMPI DUP1 PUSH4 0xD35B415 EQ PUSH2 0x2B1 JUMPI DUP1 PUSH4 0x111ECDAD EQ PUSH2 0x2E0 JUMPI DUP1 PUSH4 0x13137D65 EQ PUSH2 0x318 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x262 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x26B PUSH2 0x80E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x278 SWAP2 SWAP1 PUSH2 0x20F0 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x28D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2A1 PUSH2 0x29C CALLDATASIZE PUSH1 0x4 PUSH2 0x2118 JUMP JUMPDEST PUSH2 0x8A0 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x278 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2BD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2D1 PUSH2 0x2CC CALLDATASIZE PUSH1 0x4 PUSH2 0x215C JUMP JUMPDEST PUSH2 0x8BA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x278 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x2190 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2EC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 SLOAD PUSH2 0x300 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x278 JUMP JUMPDEST PUSH2 0x32B PUSH2 0x326 CALLDATASIZE PUSH1 0x4 PUSH2 0x2283 JUMP JUMPDEST PUSH2 0x98B JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x339 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x342 PUSH1 0x2 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x278 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x361 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH3 0xB9270B PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP3 ADD MSTORE ADD PUSH2 0x278 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x388 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 DUP3 ADD MSTORE ADD PUSH2 0x278 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3AA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x7 SLOAD JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x278 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3C9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x342 PUSH1 0x1 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3DE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2A1 PUSH2 0x3ED CALLDATASIZE PUSH1 0x4 PUSH2 0x2322 JUMP JUMPDEST PUSH2 0xA4B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3FE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x12 JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x278 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x420 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x32B PUSH2 0x42F CALLDATASIZE PUSH1 0x4 PUSH2 0x237C JUMP JUMPDEST PUSH2 0xA71 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x440 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x454 PUSH2 0x44F CALLDATASIZE PUSH1 0x4 PUSH2 0x23A6 JUMP JUMPDEST PUSH2 0xA87 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x278 SWAP2 SWAP1 PUSH2 0x23F7 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x46D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP ADDRESS PUSH2 0x300 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x480 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x26B PUSH2 0x48F CALLDATASIZE PUSH1 0x4 PUSH2 0x2420 JUMP JUMPDEST PUSH2 0xAEE JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4A0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2A1 PUSH2 0x4AF CALLDATASIZE PUSH1 0x4 PUSH2 0x237C JUMP JUMPDEST PUSH4 0xFFFFFFFF SWAP2 SWAP1 SWAP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD EQ SWAP1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x300 PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x50B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x32B PUSH2 0x51A CALLDATASIZE PUSH1 0x4 PUSH2 0x2453 JUMP JUMPDEST PUSH2 0xB93 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x52B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3AF PUSH2 0x53A CALLDATASIZE PUSH1 0x4 PUSH2 0x2453 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x561 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x32B PUSH2 0xBF0 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x576 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x58D PUSH2 0x585 CALLDATASIZE PUSH1 0x4 PUSH2 0x237C JUMP JUMPDEST PUSH1 0x0 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x278 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5B1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2A1 PUSH2 0x5C0 CALLDATASIZE PUSH1 0x4 PUSH2 0x2470 JUMP JUMPDEST PUSH2 0xC04 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5D1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x6 PUSH2 0x402 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5E5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x300 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x603 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x26B PUSH2 0xC19 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x618 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3AF PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x64C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 PUSH2 0x2A1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x660 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2A1 PUSH2 0x66F CALLDATASIZE PUSH1 0x4 PUSH2 0x2118 JUMP JUMPDEST PUSH2 0xC28 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x680 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x2 SLOAD PUSH2 0x300 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6A0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x32B PUSH2 0x6AF CALLDATASIZE PUSH1 0x4 PUSH2 0x251A JUMP JUMPDEST PUSH2 0xC36 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6C0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3AF PUSH2 0x6CF CALLDATASIZE PUSH1 0x4 PUSH2 0x255B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6ED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x26B PUSH2 0x6FC CALLDATASIZE PUSH1 0x4 PUSH2 0x2576 JUMP JUMPDEST PUSH2 0xC50 JUMP JUMPDEST PUSH2 0x32B PUSH2 0x70F CALLDATASIZE PUSH1 0x4 PUSH2 0x251A JUMP JUMPDEST PUSH2 0xDF8 JUMP JUMPDEST PUSH2 0x727 PUSH2 0x722 CALLDATASIZE PUSH1 0x4 PUSH2 0x25D6 JUMP JUMPDEST PUSH2 0xF82 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x278 SWAP3 SWAP2 SWAP1 PUSH2 0x2643 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x741 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x32B PUSH2 0x750 CALLDATASIZE PUSH1 0x4 PUSH2 0x2453 JUMP JUMPDEST PUSH2 0xFB6 JUMP JUMPDEST PUSH2 0x32B PUSH2 0x763 CALLDATASIZE PUSH1 0x4 PUSH2 0x2283 JUMP JUMPDEST PUSH2 0x103C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x774 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x32B PUSH2 0x783 CALLDATASIZE PUSH1 0x4 PUSH2 0x2453 JUMP JUMPDEST PUSH2 0x106B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x794 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3AF PUSH2 0x7A3 CALLDATASIZE PUSH1 0x4 PUSH2 0x2695 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x32B PUSH2 0x7E9 CALLDATASIZE PUSH1 0x4 PUSH2 0x2453 JUMP JUMPDEST PUSH2 0x10C1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7FA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2A1 PUSH2 0x809 CALLDATASIZE PUSH1 0x4 PUSH2 0x26C3 JUMP JUMPDEST PUSH2 0x10FF JUMP JUMPDEST PUSH1 0x60 PUSH1 0x8 DUP1 SLOAD PUSH2 0x81D SWAP1 PUSH2 0x26DF JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x849 SWAP1 PUSH2 0x26DF JUMP JUMPDEST DUP1 ISZERO PUSH2 0x896 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x86B JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x896 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x879 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 CALLER PUSH2 0x8AE DUP2 DUP6 DUP6 PUSH2 0x1135 JUMP JUMPDEST PUSH1 0x1 SWAP2 POP POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x60 PUSH2 0x8ED PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB PUSH1 0x20 DUP1 DUP5 ADD DUP3 SWAP1 MSTORE DUP5 MLOAD DUP4 DUP2 MSTORE SWAP1 DUP2 ADD SWAP1 SWAP5 MSTORE SWAP2 SWAP6 POP SWAP2 DUP3 PUSH2 0x948 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE PUSH1 0x60 PUSH1 0x20 DUP3 ADD MSTORE DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x920 JUMPI SWAP1 POP JUMPDEST POP SWAP4 POP PUSH1 0x0 DUP1 PUSH2 0x96D PUSH1 0x40 DUP10 ADD CALLDATALOAD PUSH1 0x60 DUP11 ADD CALLDATALOAD PUSH2 0x968 PUSH1 0x20 DUP13 ADD DUP13 PUSH2 0x255B JUMP JUMPDEST PUSH2 0x1147 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE SWAP7 SWAP9 SWAP6 SWAP8 POP POP POP POP POP POP JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x9DB JUMPI PUSH1 0x40 MLOAD PUSH4 0x91AC5E4F PUSH1 0xE0 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x20 DUP8 ADD DUP1 CALLDATALOAD SWAP1 PUSH2 0x9F5 SWAP1 PUSH2 0x9F0 SWAP1 DUP11 PUSH2 0x255B JUMP JUMPDEST PUSH2 0x1183 JUMP JUMPDEST EQ PUSH2 0xA33 JUMPI PUSH2 0xA07 PUSH1 0x20 DUP9 ADD DUP9 PUSH2 0x255B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x309AFAF3 PUSH1 0xE2 SHL DUP2 MSTORE PUSH4 0xFFFFFFFF SWAP1 SWAP2 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x20 DUP9 ADD CALLDATALOAD PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 ADD PUSH2 0x9D2 JUMP JUMPDEST PUSH2 0xA42 DUP8 DUP8 DUP8 DUP8 DUP8 DUP8 DUP8 PUSH2 0x11BF JUMP JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 CALLER PUSH2 0xA59 DUP6 DUP3 DUP6 PUSH2 0x1326 JUMP JUMPDEST PUSH2 0xA64 DUP6 DUP6 DUP6 PUSH2 0x13A4 JUMP JUMPDEST PUSH1 0x1 SWAP2 POP POP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0xA79 PUSH2 0x1403 JUMP JUMPDEST PUSH2 0xA83 DUP3 DUP3 PUSH2 0x1430 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0xAB7 PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH1 0x60 DUP7 ADD CALLDATALOAD PUSH2 0x968 PUSH1 0x20 DUP9 ADD DUP9 PUSH2 0x255B JUMP JUMPDEST SWAP2 POP POP PUSH1 0x0 DUP1 PUSH2 0xAC7 DUP7 DUP5 PUSH2 0x1485 JUMP JUMPDEST SWAP1 SWAP3 POP SWAP1 POP PUSH2 0xAE4 PUSH2 0xADC PUSH1 0x20 DUP9 ADD DUP9 PUSH2 0x255B JUMP JUMPDEST DUP4 DUP4 DUP9 PUSH2 0x15A8 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 DUP1 SLOAD PUSH2 0xB12 SWAP1 PUSH2 0x26DF JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0xB3E SWAP1 PUSH2 0x26DF JUMP JUMPDEST DUP1 ISZERO PUSH2 0xB8B JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xB60 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xB8B JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xB6E JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 JUMP JUMPDEST PUSH2 0xB9B PUSH2 0x1403 JUMP JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH32 0xF0BE4F1E87349231D80C36B33F9E8639658EEAF474014DEE15A3E6A4D4414197 SWAP1 PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH2 0xBF8 PUSH2 0x1403 JUMP JUMPDEST PUSH2 0xC02 PUSH1 0x0 PUSH2 0x1689 JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND ADDRESS EQ JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x9 DUP1 SLOAD PUSH2 0x81D SWAP1 PUSH2 0x26DF JUMP JUMPDEST PUSH1 0x0 CALLER PUSH2 0x8AE DUP2 DUP6 DUP6 PUSH2 0x13A4 JUMP JUMPDEST PUSH2 0xC3E PUSH2 0x1403 JUMP JUMPDEST PUSH2 0xA83 PUSH2 0xC4B DUP3 DUP5 PUSH2 0x27CA JUMP JUMPDEST PUSH2 0x16D9 JUMP JUMPDEST PUSH4 0xFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH2 0xFFFF DUP8 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 DUP1 SLOAD PUSH1 0x60 SWAP3 SWAP2 SWAP1 PUSH2 0xC84 SWAP1 PUSH2 0x26DF JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0xCB0 SWAP1 PUSH2 0x26DF JUMP JUMPDEST DUP1 ISZERO PUSH2 0xCFD JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xCD2 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xCFD JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xCE0 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP DUP1 MLOAD PUSH1 0x0 SUB PUSH2 0xD4D JUMPI DUP4 DUP4 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP5 POP PUSH2 0xC11 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP4 SWAP1 SUB PUSH2 0xD5D JUMPI SWAP1 POP PUSH2 0xC11 JUMP JUMPDEST PUSH1 0x2 DUP4 LT PUSH2 0xDDB JUMPI PUSH2 0xDA4 DUP5 DUP5 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x17E0 SWAP3 POP POP POP JUMP JUMPDEST DUP1 PUSH2 0xDB2 DUP5 PUSH1 0x2 DUP2 DUP9 PUSH2 0x28DF JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0xDC4 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x2909 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP2 POP POP PUSH2 0xC11 JUMP JUMPDEST DUP4 DUP4 PUSH1 0x40 MLOAD PUSH4 0x9A6D49CD PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x9D2 SWAP3 SWAP2 SWAP1 PUSH2 0x295A JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xF01 JUMPI CALLDATASIZE DUP4 DUP4 DUP4 DUP2 DUP2 LT PUSH2 0xE16 JUMPI PUSH2 0xE16 PUSH2 0x296E JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL DUP2 ADD SWAP1 PUSH2 0xE28 SWAP2 SWAP1 PUSH2 0x2984 JUMP JUMPDEST SWAP1 POP PUSH2 0xE5B PUSH2 0xE3A PUSH1 0x20 DUP4 ADD DUP4 PUSH2 0x255B JUMP JUMPDEST PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH4 0xFFFFFFFF SWAP2 SWAP1 SWAP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD EQ SWAP1 JUMP JUMPDEST PUSH2 0xE65 JUMPI POP PUSH2 0xEF9 JUMP JUMPDEST ADDRESS PUSH4 0xD045A0DC PUSH1 0xC0 DUP4 ADD CALLDATALOAD DUP4 PUSH1 0xA0 DUP2 ADD CALLDATALOAD PUSH2 0xE84 PUSH2 0x100 DUP4 ADD DUP4 PUSH2 0x29A5 JUMP JUMPDEST PUSH2 0xE95 PUSH2 0x100 DUP10 ADD PUSH1 0xE0 DUP11 ADD PUSH2 0x2453 JUMP JUMPDEST PUSH2 0xEA3 PUSH2 0x120 DUP11 ADD DUP11 PUSH2 0x29A5 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP10 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xEC5 SWAP8 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x2A00 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP9 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xEDE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xEF2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP JUMPDEST PUSH1 0x1 ADD PUSH2 0xDFB JUMP JUMPDEST POP CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x8E9E7099 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xF40 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0xF68 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x2A86 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x8351EEA7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x9D2 SWAP2 SWAP1 PUSH2 0x20F0 JUMP JUMPDEST PUSH2 0xF8A PUSH2 0x2059 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0xFA9 DUP6 DUP6 DUP6 PUSH2 0x180C JUMP JUMPDEST SWAP2 POP SWAP2 POP JUMPDEST SWAP4 POP SWAP4 SWAP2 POP POP JUMP JUMPDEST PUSH2 0xFBE PUSH2 0x1403 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xCA5EB5E1 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH32 0x0 AND SWAP1 PUSH4 0xCA5EB5E1 SWAP1 PUSH1 0x24 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1021 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1035 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST CALLER ADDRESS EQ PUSH2 0x105C JUMPI PUSH1 0x40 MLOAD PUSH4 0x29A949D PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xA42 DUP8 DUP8 DUP8 DUP8 DUP8 DUP8 DUP8 PUSH2 0xA33 JUMP JUMPDEST PUSH2 0x1073 PUSH2 0x1403 JUMP JUMPDEST PUSH1 0x2 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH32 0xD48D879CEF83A1C0BDDA516F27B13DDB1B3F8BBAC1C9E1511BB2A659C2427760 SWAP1 PUSH1 0x20 ADD PUSH2 0xBE5 JUMP JUMPDEST PUSH2 0x10C9 PUSH2 0x1403 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x10F3 JUMPI PUSH1 0x40 MLOAD PUSH4 0x1E4FBDF7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x9D2 JUMP JUMPDEST PUSH2 0x10FC DUP2 PUSH2 0x1689 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD DUP1 CALLDATALOAD SWAP1 PUSH1 0x1 SWAP1 DUP4 SWAP1 PUSH2 0x1117 SWAP1 DUP7 PUSH2 0x255B JUMP JUMPDEST PUSH4 0xFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD EQ SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x1142 DUP4 DUP4 DUP4 PUSH1 0x1 PUSH2 0x1907 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1153 DUP6 PUSH2 0x19DC JUMP JUMPDEST SWAP2 POP DUP2 SWAP1 POP DUP4 DUP2 LT ISZERO PUSH2 0xFAE JUMPI PUSH1 0x40 MLOAD PUSH4 0x71C4EFED PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x24 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0x44 ADD PUSH2 0x9D2 JUMP JUMPDEST PUSH4 0xFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP1 PUSH2 0x8B4 JUMPI PUSH1 0x40 MLOAD PUSH4 0xF6FF4FB7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH4 0xFFFFFFFF DUP5 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x9D2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x11D1 PUSH2 0x11CE DUP8 DUP8 PUSH2 0x1A13 JUMP JUMPDEST SWAP1 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x11FD DUP3 PUSH2 0x11EB PUSH2 0x11E6 DUP11 DUP11 PUSH2 0x1A2B JUMP JUMPDEST PUSH2 0x1A4E JUMP JUMPDEST PUSH2 0x11F8 PUSH1 0x20 DUP14 ADD DUP14 PUSH2 0x255B JUMP JUMPDEST PUSH2 0x1A83 JUMP JUMPDEST SWAP1 POP PUSH1 0x28 DUP7 GT ISZERO PUSH2 0x12C4 JUMPI PUSH1 0x0 PUSH2 0x123A PUSH2 0x121D PUSH1 0x60 DUP13 ADD PUSH1 0x40 DUP14 ADD PUSH2 0x2AF3 JUMP JUMPDEST PUSH2 0x122A PUSH1 0x20 DUP14 ADD DUP14 PUSH2 0x255B JUMP JUMPDEST DUP5 PUSH2 0x1235 DUP13 DUP13 PUSH2 0x1AAB JUMP JUMPDEST PUSH2 0x1AF6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x3E5AC809 PUSH1 0xE1 SHL DUP2 MSTORE SWAP1 SWAP2 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND SWAP1 PUSH4 0x7CB59012 SWAP1 PUSH2 0x1290 SWAP1 DUP7 SWAP1 DUP14 SWAP1 PUSH1 0x0 SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0x2B10 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x12AA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x12BE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP9 PUSH32 0xEFED6D3500546B29533B128A29E3A94D70788727F0507505AC12EAF2E578FD9C PUSH2 0x12FD PUSH1 0x20 DUP14 ADD DUP14 PUSH2 0x255B JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0xFFFFFFFF SWAP1 SWAP3 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP7 SWAP1 MSTORE ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP7 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH1 0x0 NOT DUP2 EQ PUSH2 0x139E JUMPI DUP2 DUP2 LT ISZERO PUSH2 0x138F JUMPI PUSH1 0x40 MLOAD PUSH4 0x7DC7A0D9 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x44 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x64 ADD PUSH2 0x9D2 JUMP JUMPDEST PUSH2 0x139E DUP5 DUP5 DUP5 DUP5 SUB PUSH1 0x0 PUSH2 0x1907 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x13CE JUMPI PUSH1 0x40 MLOAD PUSH4 0x4B637E8F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x0 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x9D2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x13F8 JUMPI PUSH1 0x40 MLOAD PUSH4 0xEC442F05 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x9D2 JUMP JUMPDEST PUSH2 0x1142 DUP4 DUP4 DUP4 PUSH2 0x1B28 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xC02 JUMPI PUSH1 0x40 MLOAD PUSH4 0x118CDAA7 PUSH1 0xE0 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x9D2 JUMP JUMPDEST PUSH4 0xFFFFFFFF DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP5 SWAP1 SSTORE DUP2 MLOAD SWAP3 DUP4 MSTORE DUP3 ADD DUP4 SWAP1 MSTORE PUSH32 0x238399D427B947898EDB290F5FF0F9109849B1C3BA196A42E35F00C50A54B98B SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP JUMP JUMPDEST PUSH1 0x60 DUP1 PUSH1 0x0 PUSH2 0x14E2 DUP6 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x149B DUP7 PUSH2 0x1C52 JUMP JUMPDEST PUSH2 0x14A8 PUSH1 0xA0 DUP10 ADD DUP10 PUSH2 0x29A5 JUMP JUMPDEST DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x1C7E SWAP3 POP POP POP JUMP JUMPDEST SWAP1 SWAP4 POP SWAP1 POP PUSH1 0x0 DUP2 PUSH2 0x14F5 JUMPI PUSH1 0x1 PUSH2 0x14F8 JUMP JUMPDEST PUSH1 0x2 JUMPDEST SWAP1 POP PUSH2 0x1518 PUSH2 0x150A PUSH1 0x20 DUP9 ADD DUP9 PUSH2 0x255B JUMP JUMPDEST DUP3 PUSH2 0x6FC PUSH1 0x80 DUP11 ADD DUP11 PUSH2 0x29A5 JUMP JUMPDEST PUSH1 0x4 SLOAD SWAP1 SWAP4 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP1 ISZERO PUSH2 0x159E JUMPI PUSH1 0x40 MLOAD PUSH4 0x43A78EB PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND SWAP1 PUSH4 0x43A78EB SWAP1 PUSH2 0x155B SWAP1 DUP9 SWAP1 DUP9 SWAP1 PUSH1 0x4 ADD PUSH2 0x2B41 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1578 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x159C SWAP2 SWAP1 PUSH2 0x2B66 JUMP JUMPDEST POP JUMPDEST POP POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xDDC28C58 PUSH1 0x40 MLOAD DUP1 PUSH1 0xA0 ADD PUSH1 0x40 MSTORE DUP1 DUP9 PUSH4 0xFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x160B DUP10 PUSH2 0x1183 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD DUP8 DUP2 MSTORE PUSH1 0x20 ADD DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP6 ISZERO ISZERO DUP2 MSTORE POP ADDRESS PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1640 SWAP3 SWAP2 SWAP1 PUSH2 0x2B83 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x165C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1680 SWAP2 SWAP1 PUSH2 0x2C2C JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND DUP2 OR DUP5 SSTORE PUSH1 0x40 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP3 DUP4 SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0x17B0 JUMPI PUSH2 0x170B DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x16FA JUMPI PUSH2 0x16FA PUSH2 0x296E JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 ADD MLOAD PUSH2 0x17E0 JUMP JUMPDEST DUP2 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x171D JUMPI PUSH2 0x171D PUSH2 0x296E JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 ADD MLOAD PUSH1 0x3 PUSH1 0x0 DUP5 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x173F JUMPI PUSH2 0x173F PUSH2 0x296E JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 ADD MLOAD PUSH4 0xFFFFFFFF AND PUSH4 0xFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP5 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x1779 JUMPI PUSH2 0x1779 PUSH2 0x296E JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x20 ADD MLOAD PUSH2 0xFFFF AND PUSH2 0xFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SWAP1 DUP2 PUSH2 0x17A7 SWAP2 SWAP1 PUSH2 0x2C98 JUMP JUMPDEST POP PUSH1 0x1 ADD PUSH2 0x16DC JUMP JUMPDEST POP PUSH32 0xBE4864A8E820971C0247F5992E2DA559595F7BF076A21CB5928D443D2A13B674 DUP2 PUSH1 0x40 MLOAD PUSH2 0xBE5 SWAP2 SWAP1 PUSH2 0x2D57 JUMP JUMPDEST PUSH1 0x2 DUP2 ADD MLOAD PUSH2 0xFFFF DUP2 AND PUSH1 0x3 EQ PUSH2 0xA83 JUMPI DUP2 PUSH1 0x40 MLOAD PUSH4 0x9A6D49CD PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x9D2 SWAP2 SWAP1 PUSH2 0x20F0 JUMP JUMPDEST PUSH2 0x1814 PUSH2 0x2059 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 DUP1 PUSH2 0x184B CALLER PUSH1 0x40 DUP10 ADD CALLDATALOAD PUSH1 0x60 DUP11 ADD CALLDATALOAD PUSH2 0x1846 PUSH1 0x20 DUP13 ADD DUP13 PUSH2 0x255B JUMP JUMPDEST PUSH2 0x1CF8 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH1 0x0 DUP1 PUSH2 0x185C DUP10 DUP5 PUSH2 0x1485 JUMP JUMPDEST SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x1888 PUSH2 0x1871 PUSH1 0x20 DUP12 ADD DUP12 PUSH2 0x255B JUMP JUMPDEST DUP4 DUP4 PUSH2 0x1882 CALLDATASIZE DUP14 SWAP1 SUB DUP14 ADD DUP14 PUSH2 0x2DE2 JUMP JUMPDEST DUP12 PUSH2 0x1D1E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE DUP6 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 ADD DUP7 SWAP1 MSTORE DUP3 MLOAD SWAP3 SWAP9 POP SWAP1 SWAP7 POP CALLER SWAP2 SWAP1 PUSH32 0x85496B760A4B7F8D66384B9DF21B381F5D1B1E79F229A47AAF4C232EDC2FE59A SWAP1 PUSH2 0x18D6 SWAP1 DUP14 ADD DUP14 PUSH2 0x255B JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0xFFFFFFFF SWAP1 SWAP3 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP10 SWAP1 MSTORE DUP2 ADD DUP8 SWAP1 MSTORE PUSH1 0x60 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP SWAP4 POP SWAP4 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH2 0x1931 JUMPI PUSH1 0x40 MLOAD PUSH4 0xE602DF05 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x9D2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x195B JUMPI PUSH1 0x40 MLOAD PUSH4 0x4A1406B1 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x0 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x9D2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP8 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 DUP3 SWAP1 SSTORE DUP1 ISZERO PUSH2 0x139E JUMPI DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 DUP5 PUSH1 0x40 MLOAD PUSH2 0x19CE SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH2 0x1A09 DUP2 DUP5 PUSH2 0x2E2A JUMP JUMPDEST PUSH2 0x8B4 SWAP2 SWAP1 PUSH2 0x2E4C JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1A22 PUSH1 0x20 DUP3 DUP5 DUP7 PUSH2 0x28DF JUMP JUMPDEST PUSH2 0xA6A SWAP2 PUSH2 0x2E63 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1A3B PUSH1 0x28 PUSH1 0x20 DUP5 DUP7 PUSH2 0x28DF JUMP JUMPDEST PUSH2 0x1A44 SWAP2 PUSH2 0x2E81 JUMP JUMPDEST PUSH1 0xC0 SHR SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x8B4 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP5 AND PUSH2 0x2E4C JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH2 0x1A99 JUMPI PUSH2 0xDEAD SWAP4 POP JUMPDEST PUSH2 0x1AA3 DUP5 DUP5 PUSH2 0x1E29 JUMP JUMPDEST POP SWAP1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x1ABA DUP3 PUSH1 0x28 DUP2 DUP7 PUSH2 0x28DF JUMP JUMPDEST DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP5 DUP5 DUP5 DUP5 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x1B0F SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x2EB1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP1 POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x1B53 JUMPI DUP1 PUSH1 0x7 PUSH1 0x0 DUP3 DUP3 SLOAD PUSH2 0x1B48 SWAP2 SWAP1 PUSH2 0x2F00 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP PUSH2 0x1BC5 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 DUP2 LT ISZERO PUSH2 0x1BA6 JUMPI PUSH1 0x40 MLOAD PUSH4 0x391434E3 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x44 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x64 ADD PUSH2 0x9D2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP1 DUP3 SWAP1 SUB SWAP1 SSTORE JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x1BE1 JUMPI PUSH1 0x7 DUP1 SLOAD DUP3 SWAP1 SUB SWAP1 SSTORE PUSH2 0x1C00 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD DUP3 ADD SWAP1 SSTORE JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP4 PUSH1 0x40 MLOAD PUSH2 0x1C45 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x8B4 PUSH32 0x0 DUP4 PUSH2 0x2E2A JUMP JUMPDEST DUP1 MLOAD PUSH1 0x60 SWAP1 ISZERO ISZERO DUP1 PUSH2 0x1CC7 JUMPI DUP5 DUP5 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x1CB3 SWAP3 SWAP2 SWAP1 SWAP2 DUP3 MSTORE PUSH1 0xC0 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0xC0 SHL SUB NOT AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x28 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH2 0x1CEE JUMP JUMPDEST DUP5 DUP5 CALLER DUP6 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x1CDE SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x2F13 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE JUMPDEST SWAP2 POP SWAP4 POP SWAP4 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1D06 DUP6 DUP6 DUP6 PUSH2 0x1147 JUMP JUMPDEST SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x1D15 DUP7 DUP4 PUSH2 0x1E5F JUMP JUMPDEST SWAP5 POP SWAP5 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x1D26 PUSH2 0x2059 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1D35 DUP5 PUSH1 0x0 ADD MLOAD PUSH2 0x1E95 JUMP JUMPDEST PUSH1 0x20 DUP6 ADD MLOAD SWAP1 SWAP2 POP ISZERO PUSH2 0x1D4F JUMPI PUSH2 0x1D4F DUP5 PUSH1 0x20 ADD MLOAD PUSH2 0x1EBD JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x2637A450 DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0xA0 ADD PUSH1 0x40 MSTORE DUP1 DUP12 PUSH4 0xFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1D9F DUP13 PUSH2 0x1183 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD DUP11 DUP2 MSTORE PUSH1 0x20 ADD DUP10 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP10 PUSH1 0x20 ADD MLOAD GT ISZERO ISZERO DUP2 MSTORE POP DUP7 PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1DDB SWAP3 SWAP2 SWAP1 PUSH2 0x2B83 JUMP JUMPDEST PUSH1 0x80 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP9 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1DF9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1E1E SWAP2 SWAP1 PUSH2 0x2F56 JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x1E53 JUMPI PUSH1 0x40 MLOAD PUSH4 0xEC442F05 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x9D2 JUMP JUMPDEST PUSH2 0xA83 PUSH1 0x0 DUP4 DUP4 PUSH2 0x1B28 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x1E89 JUMPI PUSH1 0x40 MLOAD PUSH4 0x4B637E8F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x0 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x9D2 JUMP JUMPDEST PUSH2 0xA83 DUP3 PUSH1 0x0 DUP4 PUSH2 0x1B28 JUMP JUMPDEST PUSH1 0x0 DUP2 CALLVALUE EQ PUSH2 0x1EB9 JUMPI PUSH1 0x40 MLOAD PUSH4 0x4FB8209 PUSH1 0xE5 SHL DUP2 MSTORE CALLVALUE PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x9D2 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xE4FE1D94 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1F1D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1F41 SWAP2 SWAP1 PUSH2 0x2FA0 JUMP JUMPDEST SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x1F6A JUMPI PUSH1 0x40 MLOAD PUSH4 0x29B99A95 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD CALLER PUSH1 0x24 DUP3 ADD DUP2 SWAP1 MSTORE PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 DUP2 AND PUSH1 0x44 DUP6 ADD MSTORE PUSH1 0x64 DUP1 DUP6 ADD DUP9 SWAP1 MSTORE DUP6 MLOAD DUP1 DUP7 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x84 SWAP1 SWAP5 ADD SWAP1 SWAP5 MSTORE PUSH1 0x20 DUP1 DUP5 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0x23B872DD PUSH1 0xE0 SHL OR DUP2 MSTORE DUP5 MLOAD PUSH2 0xA83 SWAP7 DUP9 AND SWAP6 DUP10 SWAP4 PUSH2 0x139E SWAP4 DUP9 SWAP4 PUSH1 0x0 SWAP3 DUP4 SWAP3 SWAP1 SWAP2 DUP4 SWAP2 DUP3 DUP9 GAS CALL DUP1 PUSH2 0x200B JUMPI PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY RETURNDATASIZE DUP2 REVERT JUMPDEST POP POP PUSH1 0x0 MLOAD RETURNDATASIZE SWAP2 POP DUP2 ISZERO PUSH2 0x2023 JUMPI DUP1 PUSH1 0x1 EQ ISZERO PUSH2 0x2030 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND EXTCODESIZE ISZERO JUMPDEST ISZERO PUSH2 0x139E JUMPI PUSH1 0x40 MLOAD PUSH4 0x5274AFE7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x9D2 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP1 NOT AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x209B PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST SWAP1 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x20BB JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x20A3 JUMP JUMPDEST POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x20DC DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x20A0 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0xA6A PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x20C4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x10FC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x212B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x2136 DUP2 PUSH2 0x2103 JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0xE0 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2156 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x216E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x2184 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xC11 DUP5 DUP3 DUP6 ADD PUSH2 0x2144 JUMP JUMPDEST DUP4 MLOAD DUP2 MSTORE PUSH1 0x20 DUP1 DUP6 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0x0 PUSH1 0xA0 DUP3 ADD PUSH1 0x40 PUSH1 0xA0 PUSH1 0x40 DUP6 ADD MSTORE DUP2 DUP7 MLOAD DUP1 DUP5 MSTORE PUSH1 0xC0 DUP7 ADD SWAP2 POP PUSH1 0xC0 DUP2 PUSH1 0x5 SHL DUP8 ADD ADD SWAP4 POP PUSH1 0x20 DUP1 DUP10 ADD PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x220B JUMPI DUP9 DUP8 SUB PUSH1 0xBF NOT ADD DUP6 MSTORE DUP2 MLOAD DUP1 MLOAD DUP9 MSTORE DUP4 ADD MLOAD DUP4 DUP9 ADD DUP8 SWAP1 MSTORE PUSH2 0x21F8 DUP8 DUP10 ADD DUP3 PUSH2 0x20C4 JUMP JUMPDEST SWAP8 POP POP SWAP4 DUP3 ADD SWAP4 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x21CC JUMP JUMPDEST POP POP DUP8 MLOAD PUSH1 0x60 DUP9 ADD MSTORE POP POP POP PUSH1 0x20 DUP6 ADD MLOAD PUSH1 0x80 DUP6 ADD MSTORE POP SWAP1 POP PUSH2 0xC11 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2156 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x224D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x2264 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x227C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x229E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x22A8 DUP10 DUP10 PUSH2 0x2229 JUMP JUMPDEST SWAP7 POP PUSH1 0x60 DUP9 ADD CALLDATALOAD SWAP6 POP PUSH1 0x80 DUP9 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH2 0x22CB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x22D7 DUP12 DUP4 DUP13 ADD PUSH2 0x223B JUMP JUMPDEST SWAP1 SWAP8 POP SWAP6 POP PUSH1 0xA0 DUP11 ADD CALLDATALOAD SWAP2 POP PUSH2 0x22EC DUP3 PUSH2 0x2103 JUMP JUMPDEST SWAP1 SWAP4 POP PUSH1 0xC0 DUP10 ADD CALLDATALOAD SWAP1 DUP1 DUP3 GT ISZERO PUSH2 0x2302 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x230F DUP11 DUP3 DUP12 ADD PUSH2 0x223B JUMP JUMPDEST SWAP9 SWAP12 SWAP8 SWAP11 POP SWAP6 SWAP9 POP SWAP4 SWAP7 SWAP3 SWAP6 SWAP3 SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x2337 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x2342 DUP2 PUSH2 0x2103 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x2352 DUP2 PUSH2 0x2103 JUMP JUMPDEST SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x2377 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x238F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2136 DUP4 PUSH2 0x2363 JUMP JUMPDEST DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x10FC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x23B9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x23CF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x23DB DUP6 DUP3 DUP7 ADD PUSH2 0x2144 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x23EC DUP2 PUSH2 0x2398 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 DUP1 DUP4 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0x40 DUP2 ADD PUSH2 0x8B4 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0xFFFF DUP2 AND DUP2 EQ PUSH2 0x2377 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2433 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x243C DUP4 PUSH2 0x2363 JUMP JUMPDEST SWAP2 POP PUSH2 0x244A PUSH1 0x20 DUP5 ADD PUSH2 0x240E JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2465 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0xA6A DUP2 PUSH2 0x2103 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xA0 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x2486 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2490 DUP7 DUP7 PUSH2 0x2229 JUMP JUMPDEST SWAP4 POP PUSH1 0x60 DUP6 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x24AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x24B7 DUP8 DUP3 DUP9 ADD PUSH2 0x223B JUMP JUMPDEST SWAP1 SWAP5 POP SWAP3 POP POP PUSH1 0x80 DUP6 ADD CALLDATALOAD PUSH2 0x24CB DUP2 PUSH2 0x2103 JUMP JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP1 SWAP4 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x24E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x24FF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 PUSH1 0x5 SHL DUP6 ADD ADD GT ISZERO PUSH2 0x227C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x20 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x252D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x2543 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x254F DUP6 DUP3 DUP7 ADD PUSH2 0x24D6 JUMP JUMPDEST SWAP1 SWAP7 SWAP1 SWAP6 POP SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x256D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xA6A DUP3 PUSH2 0x2363 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x60 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x258C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2595 DUP6 PUSH2 0x2363 JUMP JUMPDEST SWAP4 POP PUSH2 0x25A3 PUSH1 0x20 DUP7 ADD PUSH2 0x240E JUMP JUMPDEST SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x25BE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x25CA DUP8 DUP3 DUP9 ADD PUSH2 0x223B JUMP JUMPDEST SWAP6 SWAP9 SWAP5 SWAP8 POP SWAP6 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP4 DUP6 SUB PUSH1 0x80 DUP2 SLT ISZERO PUSH2 0x25EC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x2602 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x260E DUP8 DUP3 DUP9 ADD PUSH2 0x2144 JUMP JUMPDEST SWAP5 POP POP PUSH1 0x40 PUSH1 0x1F NOT DUP3 ADD SLT ISZERO PUSH2 0x2623 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x20 DUP5 ADD SWAP2 POP PUSH1 0x60 DUP5 ADD CALLDATALOAD PUSH2 0x2638 DUP2 PUSH2 0x2103 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0xC0 DUP3 ADD SWAP1 POP DUP4 MLOAD DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB PUSH1 0x20 DUP6 ADD MLOAD AND PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x40 DUP5 ADD MLOAD PUSH2 0x267E PUSH1 0x40 DUP5 ADD DUP3 DUP1 MLOAD DUP3 MSTORE PUSH1 0x20 SWAP1 DUP2 ADD MLOAD SWAP2 ADD MSTORE JUMP JUMPDEST POP DUP3 MLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0xA0 DUP4 ADD MSTORE PUSH2 0xA6A JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x26A8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x26B3 DUP2 PUSH2 0x2103 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x23EC DUP2 PUSH2 0x2103 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x26D5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xA6A DUP4 DUP4 PUSH2 0x2229 JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x26F3 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 SUB PUSH2 0x2156 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x60 DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x274B JUMPI PUSH2 0x274B PUSH2 0x2713 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP1 DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x274B JUMPI PUSH2 0x274B PUSH2 0x2713 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT AND DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x279B JUMPI PUSH2 0x279B PUSH2 0x2713 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT ISZERO PUSH2 0x27BC JUMPI PUSH2 0x27BC PUSH2 0x2713 JUMP JUMPDEST POP PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP5 GT ISZERO PUSH2 0x27E4 JUMPI PUSH2 0x27E4 PUSH2 0x2713 JUMP JUMPDEST DUP4 PUSH1 0x5 SHL PUSH1 0x20 PUSH2 0x27F5 DUP2 DUP4 ADD PUSH2 0x2773 JUMP JUMPDEST DUP7 DUP2 MSTORE SWAP2 DUP6 ADD SWAP2 DUP2 DUP2 ADD SWAP1 CALLDATASIZE DUP5 GT ISZERO PUSH2 0x280D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0x28D3 JUMPI DUP1 CALLDATALOAD DUP7 DUP2 GT ISZERO PUSH2 0x2827 JUMPI PUSH1 0x0 DUP1 DUP2 REVERT JUMPDEST DUP9 ADD PUSH1 0x60 CALLDATASIZE DUP3 SWAP1 SUB SLT ISZERO PUSH2 0x283B JUMPI PUSH1 0x0 DUP1 DUP2 REVERT JUMPDEST PUSH2 0x2843 PUSH2 0x2729 JUMP JUMPDEST PUSH2 0x284C DUP3 PUSH2 0x2363 JUMP JUMPDEST DUP2 MSTORE PUSH2 0x2859 DUP7 DUP4 ADD PUSH2 0x240E JUMP JUMPDEST DUP7 DUP3 ADD MSTORE PUSH1 0x40 DUP1 DUP4 ADD CALLDATALOAD DUP10 DUP2 GT ISZERO PUSH2 0x2871 JUMPI PUSH1 0x0 DUP1 DUP2 REVERT JUMPDEST SWAP3 SWAP1 SWAP3 ADD SWAP2 CALLDATASIZE PUSH1 0x1F DUP5 ADD SLT PUSH2 0x2886 JUMPI PUSH1 0x0 DUP1 DUP2 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x2899 PUSH2 0x2894 DUP3 PUSH2 0x27A3 JUMP JUMPDEST PUSH2 0x2773 JUMP JUMPDEST DUP2 DUP2 MSTORE CALLDATASIZE DUP10 DUP4 DUP8 ADD ADD GT ISZERO PUSH2 0x28AE JUMPI PUSH1 0x0 DUP1 DUP2 REVERT JUMPDEST DUP2 DUP10 DUP7 ADD DUP11 DUP4 ADD CALLDATACOPY PUSH1 0x0 SWAP2 DUP2 ADD DUP10 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 DUP3 ADD MSTORE DUP5 MSTORE POP SWAP2 DUP4 ADD SWAP2 DUP4 ADD PUSH2 0x280F JUMP JUMPDEST POP SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP6 DUP6 GT ISZERO PUSH2 0x28EF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 DUP7 GT ISZERO PUSH2 0x28FC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP3 ADD SWAP4 SWAP2 SWAP1 SWAP3 SUB SWAP2 POP JUMP JUMPDEST PUSH1 0x0 DUP5 MLOAD PUSH2 0x291B DUP2 DUP5 PUSH1 0x20 DUP10 ADD PUSH2 0x20A0 JUMP JUMPDEST DUP3 ADD DUP4 DUP6 DUP3 CALLDATACOPY PUSH1 0x0 SWAP4 ADD SWAP3 DUP4 MSTORE POP SWAP1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP2 DUP4 MSTORE DUP2 DUP2 PUSH1 0x20 DUP6 ADD CALLDATACOPY POP PUSH1 0x0 DUP3 DUP3 ADD PUSH1 0x20 SWAP1 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x1F SWAP1 SWAP2 ADD PUSH1 0x1F NOT AND SWAP1 SWAP2 ADD ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0xC11 PUSH1 0x20 DUP4 ADD DUP5 DUP7 PUSH2 0x2931 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 CALLDATALOAD PUSH2 0x13E NOT DUP4 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x299B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 CALLDATALOAD PUSH1 0x1E NOT DUP5 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x29BC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 ADD DUP1 CALLDATALOAD SWAP2 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT ISZERO PUSH2 0x29D6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 ADD SWAP2 POP CALLDATASIZE DUP2 SWAP1 SUB DUP3 SGT ISZERO PUSH2 0x227C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x10FC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH4 0xFFFFFFFF PUSH2 0x2A0E DUP10 PUSH2 0x2363 JUMP JUMPDEST AND DUP2 MSTORE PUSH1 0x20 DUP9 ADD CALLDATALOAD PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 PUSH1 0x40 DUP10 ADD CALLDATALOAD PUSH2 0x2A2B DUP2 PUSH2 0x29EB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 AND PUSH1 0x40 DUP5 ADD MSTORE POP DUP8 PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0xE0 PUSH1 0x80 DUP4 ADD MSTORE PUSH2 0x2A56 PUSH1 0xE0 DUP4 ADD DUP8 DUP10 PUSH2 0x2931 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0xA0 DUP5 ADD MSTORE DUP3 DUP2 SUB PUSH1 0xC0 DUP5 ADD MSTORE PUSH2 0x2A78 DUP2 DUP6 DUP8 PUSH2 0x2931 JUMP JUMPDEST SWAP11 SWAP10 POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2A98 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x2AAE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD PUSH1 0x1F DUP2 ADD DUP5 SGT PUSH2 0x2ABF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD PUSH2 0x2ACD PUSH2 0x2894 DUP3 PUSH2 0x27A3 JUMP JUMPDEST DUP2 DUP2 MSTORE DUP6 PUSH1 0x20 DUP4 DUP6 ADD ADD GT ISZERO PUSH2 0x2AE2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1680 DUP3 PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x20A0 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2B05 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0xA6A DUP2 PUSH2 0x29EB JUMP JUMPDEST PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB DUP6 AND DUP2 MSTORE DUP4 PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0xFFFF DUP4 AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x80 PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0xAE4 PUSH1 0x80 DUP4 ADD DUP5 PUSH2 0x20C4 JUMP JUMPDEST PUSH1 0x40 DUP2 MSTORE PUSH1 0x0 PUSH2 0x2B54 PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0x20C4 JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x1680 DUP2 DUP6 PUSH2 0x20C4 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2B78 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0xA6A DUP2 PUSH2 0x2398 JUMP JUMPDEST PUSH1 0x40 DUP2 MSTORE PUSH4 0xFFFFFFFF DUP4 MLOAD AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x0 PUSH1 0x40 DUP5 ADD MLOAD PUSH1 0xA0 PUSH1 0x80 DUP5 ADD MSTORE PUSH2 0x2BB9 PUSH1 0xE0 DUP5 ADD DUP3 PUSH2 0x20C4 JUMP JUMPDEST SWAP1 POP PUSH1 0x60 DUP6 ADD MLOAD PUSH1 0x3F NOT DUP5 DUP4 SUB ADD PUSH1 0xA0 DUP6 ADD MSTORE PUSH2 0x2BD6 DUP3 DUP3 PUSH2 0x20C4 JUMP JUMPDEST PUSH1 0x80 SWAP7 SWAP1 SWAP7 ADD MLOAD ISZERO ISZERO PUSH1 0xC0 DUP6 ADD MSTORE POP POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND PUSH1 0x20 SWAP1 SWAP2 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2C0E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2C16 PUSH2 0x2751 JUMP JUMPDEST SWAP1 POP DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x20 DUP3 ADD MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2C3E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xA6A DUP4 DUP4 PUSH2 0x2BFC JUMP JUMPDEST PUSH1 0x1F DUP3 GT ISZERO PUSH2 0x1142 JUMPI PUSH1 0x0 DUP2 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 PUSH1 0x1F DUP6 ADD PUSH1 0x5 SHR DUP2 ADD PUSH1 0x20 DUP7 LT ISZERO PUSH2 0x2C71 JUMPI POP DUP1 JUMPDEST PUSH1 0x1F DUP6 ADD PUSH1 0x5 SHR DUP3 ADD SWAP2 POP JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x2C90 JUMPI DUP3 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x2C7D JUMP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x2CB1 JUMPI PUSH2 0x2CB1 PUSH2 0x2713 JUMP JUMPDEST PUSH2 0x2CC5 DUP2 PUSH2 0x2CBF DUP5 SLOAD PUSH2 0x26DF JUMP JUMPDEST DUP5 PUSH2 0x2C48 JUMP JUMPDEST PUSH1 0x20 DUP1 PUSH1 0x1F DUP4 GT PUSH1 0x1 DUP2 EQ PUSH2 0x2CFA JUMPI PUSH1 0x0 DUP5 ISZERO PUSH2 0x2CE2 JUMPI POP DUP6 DUP4 ADD MLOAD JUMPDEST PUSH1 0x0 NOT PUSH1 0x3 DUP7 SWAP1 SHL SHR NOT AND PUSH1 0x1 DUP6 SWAP1 SHL OR DUP6 SSTORE PUSH2 0x2C90 JUMP JUMPDEST PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x20 DUP2 KECCAK256 PUSH1 0x1F NOT DUP7 AND SWAP2 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x2D29 JUMPI DUP9 DUP7 ADD MLOAD DUP3 SSTORE SWAP5 DUP5 ADD SWAP5 PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 DUP5 ADD PUSH2 0x2D0A JUMP JUMPDEST POP DUP6 DUP3 LT ISZERO PUSH2 0x2D47 JUMPI DUP8 DUP6 ADD MLOAD PUSH1 0x0 NOT PUSH1 0x3 DUP9 SWAP1 SHL PUSH1 0xF8 AND SHR NOT AND DUP2 SSTORE JUMPDEST POP POP POP POP POP PUSH1 0x1 SWAP1 DUP2 SHL ADD SWAP1 SSTORE POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 ADD DUP2 DUP5 MSTORE DUP1 DUP6 MLOAD DUP1 DUP4 MSTORE PUSH1 0x40 SWAP3 POP PUSH1 0x40 DUP7 ADD SWAP2 POP PUSH1 0x40 DUP2 PUSH1 0x5 SHL DUP8 ADD ADD DUP5 DUP9 ADD PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2DD4 JUMPI DUP9 DUP4 SUB PUSH1 0x3F NOT ADD DUP6 MSTORE DUP2 MLOAD DUP1 MLOAD PUSH4 0xFFFFFFFF AND DUP5 MSTORE DUP8 DUP2 ADD MLOAD PUSH2 0xFFFF AND DUP9 DUP6 ADD MSTORE DUP7 ADD MLOAD PUSH1 0x60 DUP8 DUP6 ADD DUP2 SWAP1 MSTORE PUSH2 0x2DC0 DUP2 DUP7 ADD DUP4 PUSH2 0x20C4 JUMP JUMPDEST SWAP7 DUP10 ADD SWAP7 SWAP5 POP POP POP SWAP1 DUP7 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x2D80 JUMP JUMPDEST POP SWAP1 SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2DF4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2DFC PUSH2 0x2751 JUMP JUMPDEST DUP3 CALLDATALOAD DUP2 MSTORE PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH1 0x20 DUP3 ADD MSTORE DUP1 SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x2E47 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP DIV SWAP1 JUMP JUMPDEST DUP1 DUP3 MUL DUP2 ISZERO DUP3 DUP3 DIV DUP5 EQ OR PUSH2 0x8B4 JUMPI PUSH2 0x8B4 PUSH2 0x2E14 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x20 DUP4 LT ISZERO PUSH2 0x8B4 JUMPI PUSH1 0x0 NOT PUSH1 0x20 DUP5 SWAP1 SUB PUSH1 0x3 SHL SHL AND SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xC0 SHL SUB NOT DUP2 CALLDATALOAD DUP2 DUP2 AND SWAP2 PUSH1 0x8 DUP6 LT ISZERO PUSH2 0x2EA9 JUMPI DUP1 DUP2 DUP7 PUSH1 0x8 SUB PUSH1 0x3 SHL SHL DUP4 AND AND SWAP3 POP JUMPDEST POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB PUSH1 0xC0 SHL DUP6 PUSH1 0xC0 SHL AND DUP2 MSTORE PUSH4 0xFFFFFFFF PUSH1 0xE0 SHL DUP5 PUSH1 0xE0 SHL AND PUSH1 0x8 DUP3 ADD MSTORE DUP3 PUSH1 0xC DUP3 ADD MSTORE PUSH1 0x0 DUP3 MLOAD PUSH2 0x2EF0 DUP2 PUSH1 0x2C DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x20A0 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD PUSH1 0x2C ADD SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0x8B4 JUMPI PUSH2 0x8B4 PUSH2 0x2E14 JUMP JUMPDEST DUP5 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB PUSH1 0xC0 SHL DUP5 PUSH1 0xC0 SHL AND PUSH1 0x20 DUP3 ADD MSTORE DUP3 PUSH1 0x28 DUP3 ADD MSTORE PUSH1 0x0 DUP3 MLOAD PUSH2 0x2F46 DUP2 PUSH1 0x48 DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x20A0 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD PUSH1 0x48 ADD SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x80 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2F68 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2F70 PUSH2 0x2729 JUMP JUMPDEST DUP3 MLOAD DUP2 MSTORE PUSH1 0x20 DUP4 ADD MLOAD PUSH2 0x2F82 DUP2 PUSH2 0x29EB JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x2F94 DUP5 PUSH1 0x40 DUP6 ADD PUSH2 0x2BFC JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2FB2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0xA6A DUP2 PUSH2 0x2103 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xA5 PUSH30 0x7F89465F52382B6C4FB535F012253EB27EE453204FB5020648385F95C207 PUSH5 0x736F6C6343 STOP ADDMOD AND STOP CALLER ", - "sourceMap": "200:229:41:-:0;;;228:199;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;366:5;373:7;382:11;395:9;366:5;373:7;2780:2:33;823:11:23;836:9;823:11;836:9;823:11;836:9;414::41;-1:-1:-1;;;;;1273:26:28;;1269:95;;1322:31;;-1:-1:-1;;;1322:31:28;;1350:1;1322:31;;;2061:51:43;2034:18;;1322:31:28;;;;;;;1269:95;1373:32;1392:12;1373:18;:32::i;:::-;-1:-1:-1;;;;;;1047:42:11;;;;;1104:23;;1100:53;;1136:17;;-1:-1:-1;;;1136:17:11;;;;;;;;;;;1100:53;1163:8;;:31;;-1:-1:-1;;;1163:31:11;;-1:-1:-1;;;;;2079:32:43;;;1163:31:11;;;2061:51:43;1163:20:11;;;;;;2034:18:43;;1163:31:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;987:214;;965:83:10;;2757:16:24::1;:14;;;:16;;:::i;:::-;2740:33;;:14;:33;;;2736:68;;;2782:22;;-1:-1:-1::0;;;2782:22:24::1;;;;;;;;;;;2736:68;2845:33;4227:1:::0;2845:14;:33:::1;:::i;:::-;2838:41;::::0;:2:::1;:41;:::i;:::-;2814:65;::::0;-1:-1:-1;1667:5:33;;-1:-1:-1;1667:13:33;;-1:-1:-1;1675:5:33;1667;:13;:::i;:::-;-1:-1:-1;1690:7:33;:17;1700:7;1690;:17;:::i;:::-;;1601:113;;647:202:23;;;;228:199:41;;;;200:229;;2912:187:28;2985:16;3004:6;;-1:-1:-1;;;;;3020:17:28;;;-1:-1:-1;;;;;;3020:17:28;;;;;;3052:40;;3004:6;;;;;;;3052:40;;2985:16;3052:40;2975:124;2912:187;:::o;4148:87:24:-;4227:1;;4148:87::o;14:127:43:-;75:10;70:3;66:20;63:1;56:31;106:4;103:1;96:15;130:4;127:1;120:15;146:844;200:5;253:3;246:4;238:6;234:17;230:27;220:55;;271:1;268;261:12;220:55;294:13;;-1:-1:-1;;;;;356:10:43;;;353:36;;;369:18;;:::i;:::-;444:2;438:9;412:2;498:13;;-1:-1:-1;;494:22:43;;;518:2;490:31;486:40;474:53;;;542:18;;;562:22;;;539:46;536:72;;;588:18;;:::i;:::-;628:10;624:2;617:22;663:2;655:6;648:18;685:4;675:14;;732:3;725:4;720:2;712:6;708:15;704:26;701:35;698:55;;;749:1;746;739:12;698:55;771:1;762:10;;781:133;795:2;792:1;789:9;781:133;;;883:14;;;879:23;;873:30;852:14;;;848:23;;841:63;806:10;;;;781:133;;;958:1;951:4;946:2;938:6;934:15;930:26;923:37;978:6;969:15;;;;;;146:844;;;;:::o;995:177::-;1074:13;;-1:-1:-1;;;;;1116:31:43;;1106:42;;1096:70;;1162:1;1159;1152:12;1096:70;995:177;;;:::o;1177:733::-;1294:6;1302;1310;1318;1371:3;1359:9;1350:7;1346:23;1342:33;1339:53;;;1388:1;1385;1378:12;1339:53;1415:16;;-1:-1:-1;;;;;1480:14:43;;;1477:34;;;1507:1;1504;1497:12;1477:34;1530:61;1583:7;1574:6;1563:9;1559:22;1530:61;:::i;:::-;1520:71;;1637:2;1626:9;1622:18;1616:25;1600:41;;1666:2;1656:8;1653:16;1650:36;;;1682:1;1679;1672:12;1650:36;;1705:63;1760:7;1749:8;1738:9;1734:24;1705:63;:::i;:::-;1695:73;;;1787:49;1832:2;1821:9;1817:18;1787:49;:::i;:::-;1777:59;;1855:49;1900:2;1889:9;1885:18;1855:49;:::i;:::-;1845:59;;1177:733;;;;;;;:::o;2123:127::-;2184:10;2179:3;2175:20;2172:1;2165:31;2215:4;2212:1;2205:15;2239:4;2236:1;2229:15;2255:151;2345:4;2338:12;;;2324;;;2320:31;;2363:14;;2360:40;;;2380:18;;:::i;:::-;2255:151;;;;:::o;2411:416::-;2500:1;2537:5;2500:1;2551:270;2572:7;2562:8;2559:21;2551:270;;;2631:4;2627:1;2623:6;2619:17;2613:4;2610:27;2607:53;;;2640:18;;:::i;:::-;2690:7;2680:8;2676:22;2673:55;;;2710:16;;;;2673:55;2789:22;;;;2749:15;;;;2551:270;;;2555:3;2411:416;;;;;:::o;2832:806::-;2881:5;2911:8;2901:80;;-1:-1:-1;2952:1:43;2966:5;;2901:80;3000:4;2990:76;;-1:-1:-1;3037:1:43;3051:5;;2990:76;3082:4;3100:1;3095:59;;;;3168:1;3163:130;;;;3075:218;;3095:59;3125:1;3116:10;;3139:5;;;3163:130;3200:3;3190:8;3187:17;3184:43;;;3207:18;;:::i;:::-;-1:-1:-1;;3263:1:43;3249:16;;3278:5;;3075:218;;3377:2;3367:8;3364:16;3358:3;3352:4;3349:13;3345:36;3339:2;3329:8;3326:16;3321:2;3315:4;3312:12;3308:35;3305:77;3302:159;;;-1:-1:-1;3414:19:43;;;3446:5;;3302:159;3493:34;3518:8;3512:4;3493:34;:::i;:::-;3563:6;3559:1;3555:6;3551:19;3542:7;3539:32;3536:58;;;3574:18;;:::i;:::-;3612:20;;2832:806;-1:-1:-1;;;2832:806:43:o;3643:140::-;3701:5;3730:47;3771:4;3761:8;3757:19;3751:4;3730:47;:::i;:::-;3721:56;3643:140;-1:-1:-1;;;3643:140:43:o;3788:380::-;3867:1;3863:12;;;;3910;;;3931:61;;3985:4;3977:6;3973:17;3963:27;;3931:61;4038:2;4030:6;4027:14;4007:18;4004:38;4001:161;;4084:10;4079:3;4075:20;4072:1;4065:31;4119:4;4116:1;4109:15;4147:4;4144:1;4137:15;4001:161;;3788:380;;;:::o;4299:543::-;4401:2;4396:3;4393:11;4390:446;;;4437:1;4461:5;4458:1;4451:16;4505:4;4502:1;4492:18;4575:2;4563:10;4559:19;4556:1;4552:27;4546:4;4542:38;4611:4;4599:10;4596:20;4593:47;;;-1:-1:-1;4634:4:43;4593:47;4689:2;4684:3;4680:12;4677:1;4673:20;4667:4;4663:31;4653:41;;4744:82;4762:2;4755:5;4752:13;4744:82;;;4807:17;;;4788:1;4777:13;4744:82;;;4748:3;;;4390:446;4299:543;;;:::o;5018:1345::-;5138:10;;-1:-1:-1;;;;;5160:30:43;;5157:56;;;5193:18;;:::i;:::-;5222:97;5312:6;5272:38;5304:4;5298:11;5272:38;:::i;:::-;5266:4;5222:97;:::i;:::-;5374:4;;5431:2;5420:14;;5448:1;5443:663;;;;6150:1;6167:6;6164:89;;;-1:-1:-1;6219:19:43;;;6213:26;6164:89;-1:-1:-1;;4975:1:43;4971:11;;;4967:24;4963:29;4953:40;4999:1;4995:11;;;4950:57;6266:81;;5413:944;;5443:663;4246:1;4239:14;;;4283:4;4270:18;;-1:-1:-1;;5479:20:43;;;5597:236;5611:7;5608:1;5605:14;5597:236;;;5700:19;;;5694:26;5679:42;;5792:27;;;;5760:1;5748:14;;;;5627:19;;5597:236;;;5601:3;5861:6;5852:7;5849:19;5846:201;;;5922:19;;;5916:26;-1:-1:-1;;6005:1:43;6001:14;;;6017:3;5997:24;5993:37;5989:42;5974:58;5959:74;;5846:201;-1:-1:-1;;;;;6093:1:43;6077:14;;;6073:22;6060:36;;-1:-1:-1;5018:1345:43:o;:::-;200:229:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;" - }, - "deployedBytecode": { - "functionDebugData": { - "@SEND_2779": { - "entryPoint": null, - "id": 2779, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@SEND_AND_CALL_2782": { - "entryPoint": null, - "id": 2782, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@_approve_4609": { - "entryPoint": 4405, - "id": 4609, - "parameterSlots": 3, - "returnSlots": 0 - }, - "@_approve_4669": { - "entryPoint": 6407, - "id": 4669, - "parameterSlots": 4, - "returnSlots": 0 - }, - "@_assertOptionsType3_2148": { - "entryPoint": 6112, - "id": 2148, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@_buildMsgAndOptions_3135": { - "entryPoint": 5253, - "id": 3135, - "parameterSlots": 2, - "returnSlots": 2 - }, - "@_burn_4591": { - "entryPoint": 7775, - "id": 4591, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@_callOptionalReturn_5191": { - "entryPoint": null, - "id": 5191, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@_checkOwner_3913": { - "entryPoint": 5123, - "id": 3913, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@_credit_2735": { - "entryPoint": 6787, - "id": 2735, - "parameterSlots": 3, - "returnSlots": 1 - }, - "@_debitView_3332": { - "entryPoint": 4423, - "id": 3332, - "parameterSlots": 3, - "returnSlots": 2 - }, - "@_debit_2700": { - "entryPoint": 7416, - "id": 2700, - "parameterSlots": 4, - "returnSlots": 2 - }, - "@_getPeerOrRevert_1485": { - "entryPoint": 4483, - "id": 1485, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@_lzReceiveSimulate_3234": { - "entryPoint": null, - "id": 3234, - "parameterSlots": 7, - "returnSlots": 0 - }, - "@_lzReceive_3209": { - "entryPoint": 4543, - "id": 3209, - "parameterSlots": 7, - "returnSlots": 0 - }, - "@_lzSend_1781": { - "entryPoint": 7454, - "id": 1781, - "parameterSlots": 5, - "returnSlots": 1 - }, - "@_mint_4558": { - "entryPoint": 7721, - "id": 4558, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@_msgSender_5504": { - "entryPoint": null, - "id": 5504, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@_payLzToken_1838": { - "entryPoint": 7869, - "id": 1838, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@_payNative_1802": { - "entryPoint": 7829, - "id": 1802, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@_quote_1726": { - "entryPoint": 5544, - "id": 1726, - "parameterSlots": 4, - "returnSlots": 1 - }, - "@_removeDust_3268": { - "entryPoint": 6620, - "id": 3268, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@_send_3067": { - "entryPoint": 6156, - "id": 3067, - "parameterSlots": 3, - "returnSlots": 2 - }, - "@_setEnforcedOptions_2071": { - "entryPoint": 5849, - "id": 2071, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@_setPeer_1457": { - "entryPoint": 5168, - "id": 1457, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@_spendAllowance_4717": { - "entryPoint": 4902, - "id": 4717, - "parameterSlots": 3, - "returnSlots": 0 - }, - "@_toLD_3281": { - "entryPoint": 6734, - "id": 3281, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@_toSD_3297": { - "entryPoint": 7250, - "id": 3297, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@_transferOwnership_3975": { - "entryPoint": 5769, - "id": 3975, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@_transfer_4448": { - "entryPoint": 5028, - "id": 4448, - "parameterSlots": 3, - "returnSlots": 0 - }, - "@_update_4525": { - "entryPoint": 6952, - "id": 4525, - "parameterSlots": 3, - "returnSlots": 0 - }, - "@addressToBytes32_3807": { - "entryPoint": null, - "id": 3807, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@allowInitializePath_1572": { - "entryPoint": 4351, - "id": 1572, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@allowance_4345": { - "entryPoint": null, - "id": 4345, - "parameterSlots": 2, - "returnSlots": 1 - }, - "@amountSD_3774": { - "entryPoint": 6699, - "id": 3774, - "parameterSlots": 2, - "returnSlots": 1 - }, - "@approvalRequired_2667": { - "entryPoint": null, - "id": 2667, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@approve_4369": { - "entryPoint": 2208, - "id": 4369, - "parameterSlots": 2, - "returnSlots": 1 - }, - "@balanceOf_4304": { - "entryPoint": null, - "id": 4304, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@bytes32ToAddress_3827": { - "entryPoint": null, - "id": 3827, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@combineOptions_2129": { - "entryPoint": 3152, - "id": 2129, - "parameterSlots": 4, - "returnSlots": 1 - }, - "@composeMsg_3787": { - "entryPoint": 6827, - "id": 3787, - "parameterSlots": 2, - "returnSlots": 1 - }, - "@decimalConversionRate_2776": { - "entryPoint": null, - "id": 2776, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@decimals_4282": { - "entryPoint": null, - "id": 4282, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@encode_3544": { - "entryPoint": 6902, - "id": 3544, - "parameterSlots": 4, - "returnSlots": 1 - }, - "@encode_3724": { - "entryPoint": 7294, - "id": 3724, - "parameterSlots": 3, - "returnSlots": 2 - }, - "@endpoint_1386": { - "entryPoint": null, - "id": 1386, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@enforcedOptions_2006": { - "entryPoint": 2798, - "id": 2006, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@isComposeMsgSender_1554": { - "entryPoint": 3076, - "id": 1554, - "parameterSlots": 4, - "returnSlots": 1 - }, - "@isComposed_3738": { - "entryPoint": null, - "id": 3738, - "parameterSlots": 2, - "returnSlots": 1 - }, - "@isPeer_3252": { - "entryPoint": null, - "id": 3252, - "parameterSlots": 2, - "returnSlots": 1 - }, - "@lzReceiveAndRevert_2262": { - "entryPoint": 3576, - "id": 2262, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@lzReceiveSimulate_2297": { - "entryPoint": 4156, - "id": 2297, - "parameterSlots": 7, - "returnSlots": 0 - }, - "@lzReceive_1637": { - "entryPoint": 2443, - "id": 1637, - "parameterSlots": 7, - "returnSlots": 0 - }, - "@msgInspector_2784": { - "entryPoint": null, - "id": 2784, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@name_4264": { - "entryPoint": 2062, - "id": 4264, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@nextNonce_1585": { - "entryPoint": null, - "id": 1585, - "parameterSlots": 2, - "returnSlots": 1 - }, - "@oAppVersion_1370": { - "entryPoint": null, - "id": 1370, - "parameterSlots": 0, - "returnSlots": 2 - }, - "@oApp_2178": { - "entryPoint": null, - "id": 2178, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@oftVersion_2837": { - "entryPoint": null, - "id": 2837, - "parameterSlots": 0, - "returnSlots": 2 - }, - "@owner_3896": { - "entryPoint": null, - "id": 3896, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@peers_1390": { - "entryPoint": null, - "id": 1390, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@preCrime_2166": { - "entryPoint": null, - "id": 2166, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@quoteOFT_2929": { - "entryPoint": 2234, - "id": 2929, - "parameterSlots": 1, - "returnSlots": 3 - }, - "@quoteSend_2970": { - "entryPoint": 2695, - "id": 2970, - "parameterSlots": 2, - "returnSlots": 1 - }, - "@renounceOwnership_3927": { - "entryPoint": 3056, - "id": 3927, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@safeTransferFrom_4896": { - "entryPoint": null, - "id": 4896, - "parameterSlots": 4, - "returnSlots": 0 - }, - "@sendTo_3754": { - "entryPoint": 6675, - "id": 3754, - "parameterSlots": 2, - "returnSlots": 1 - }, - "@send_2995": { - "entryPoint": 3970, - "id": 2995, - "parameterSlots": 3, - "returnSlots": 2 - }, - "@setDelegate_1500": { - "entryPoint": 4022, - "id": 1500, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@setEnforcedOptions_2021": { - "entryPoint": 3126, - "id": 2021, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@setMsgInspector_2863": { - "entryPoint": 2963, - "id": 2863, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@setPeer_1437": { - "entryPoint": 2673, - "id": 1437, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@setPreCrime_2195": { - "entryPoint": 4203, - "id": 2195, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@sharedDecimals_2846": { - "entryPoint": null, - "id": 2846, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@symbol_4273": { - "entryPoint": 3097, - "id": 4273, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@token_2658": { - "entryPoint": null, - "id": 2658, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@totalSupply_4291": { - "entryPoint": null, - "id": 4291, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@transferFrom_4401": { - "entryPoint": 2635, - "id": 4401, - "parameterSlots": 3, - "returnSlots": 1 - }, - "@transferOwnership_3955": { - "entryPoint": 4289, - "id": 3955, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@transfer_4328": { - "entryPoint": 3112, - "id": 4328, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_array_struct_EnforcedOptionParam_calldata_dyn_calldata": { - "entryPoint": 9430, - "id": null, - "parameterSlots": 2, - "returnSlots": 2 - }, - "abi_decode_bytes_calldata": { - "entryPoint": 8763, - "id": null, - "parameterSlots": 2, - "returnSlots": 2 - }, - "abi_decode_struct_MessagingFee_fromMemory": { - "entryPoint": 11260, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_struct_Origin_calldata": { - "entryPoint": 8745, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_struct_SendParam_calldata": { - "entryPoint": 8516, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_address": { - "entryPoint": 9299, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_address_fromMemory": { - "entryPoint": 12192, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_addresst_address": { - "entryPoint": 9877, - "id": null, - "parameterSlots": 2, - "returnSlots": 2 - }, - "abi_decode_tuple_t_addresst_addresst_uint256": { - "entryPoint": 8994, - "id": null, - "parameterSlots": 2, - "returnSlots": 3 - }, - "abi_decode_tuple_t_addresst_uint256": { - "entryPoint": 8472, - "id": null, - "parameterSlots": 2, - "returnSlots": 2 - }, - "abi_decode_tuple_t_array$_t_struct$_EnforcedOptionParam_$1932_calldata_ptr_$dyn_calldata_ptr": { - "entryPoint": 9498, - "id": null, - "parameterSlots": 2, - "returnSlots": 2 - }, - "abi_decode_tuple_t_array$_t_struct$_InboundPacket_$2486_calldata_ptr_$dyn_calldata_ptr": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 2 - }, - "abi_decode_tuple_t_bool_fromMemory": { - "entryPoint": 11110, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_bytes_memory_ptr_fromMemory": { - "entryPoint": 10886, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_struct$_MessagingFee_$33_memory_ptr": { - "entryPoint": 11746, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_struct$_MessagingFee_$33_memory_ptr_fromMemory": { - "entryPoint": 11308, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_struct$_MessagingReceipt_$28_memory_ptr_fromMemory": { - "entryPoint": 12118, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_struct$_Origin_$40_calldata_ptr": { - "entryPoint": 9923, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_struct$_Origin_$40_calldata_ptrt_bytes32t_bytes_calldata_ptrt_addresst_bytes_calldata_ptr": { - "entryPoint": 8835, - "id": null, - "parameterSlots": 2, - "returnSlots": 7 - }, - "abi_decode_tuple_t_struct$_Origin_$40_calldata_ptrt_bytes_calldata_ptrt_address": { - "entryPoint": 9328, - "id": null, - "parameterSlots": 2, - "returnSlots": 4 - }, - "abi_decode_tuple_t_struct$_SendParam_$3382_calldata_ptr": { - "entryPoint": 8540, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_struct$_SendParam_$3382_calldata_ptrt_bool": { - "entryPoint": 9126, - "id": null, - "parameterSlots": 2, - "returnSlots": 2 - }, - "abi_decode_tuple_t_struct$_SendParam_$3382_calldata_ptrt_struct$_MessagingFee_$33_calldata_ptrt_address": { - "entryPoint": 9686, - "id": null, - "parameterSlots": 2, - "returnSlots": 3 - }, - "abi_decode_tuple_t_uint32": { - "entryPoint": 9563, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_uint32t_bytes32": { - "entryPoint": 9084, - "id": null, - "parameterSlots": 2, - "returnSlots": 2 - }, - "abi_decode_tuple_t_uint32t_uint16": { - "entryPoint": 9248, - "id": null, - "parameterSlots": 2, - "returnSlots": 2 - }, - "abi_decode_tuple_t_uint32t_uint16t_bytes_calldata_ptr": { - "entryPoint": 9590, - "id": null, - "parameterSlots": 2, - "returnSlots": 4 - }, - "abi_decode_tuple_t_uint64": { - "entryPoint": 10995, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_uint16": { - "entryPoint": 9230, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_decode_uint32": { - "entryPoint": 9059, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_bytes_calldata": { - "entryPoint": 10545, - "id": null, - "parameterSlots": 3, - "returnSlots": 1 - }, - "abi_encode_string": { - "entryPoint": 8388, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_struct_OFTLimit": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 0 - }, - "abi_encode_tuple_packed_t_bytes32_t_uint64__to_t_bytes32_t_uint64__nonPadded_inplace_fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 3, - "returnSlots": 1 - }, - "abi_encode_tuple_packed_t_bytes32_t_uint64_t_bytes32_t_bytes_memory_ptr__to_t_bytes32_t_uint64_t_bytes32_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed": { - "entryPoint": 12051, - "id": null, - "parameterSlots": 5, - "returnSlots": 1 - }, - "abi_encode_tuple_packed_t_bytes_memory_ptr_t_bytes_calldata_ptr_slice__to_t_bytes_memory_ptr_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed": { - "entryPoint": 10505, - "id": null, - "parameterSlots": 4, - "returnSlots": 1 - }, - "abi_encode_tuple_packed_t_uint64_t_uint32_t_uint256_t_bytes_memory_ptr__to_t_uint64_t_uint32_t_uint256_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed": { - "entryPoint": 11953, - "id": null, - "parameterSlots": 5, - "returnSlots": 1 - }, - "abi_encode_tuple_t_address__to_t_address__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 4, - "returnSlots": 1 - }, - "abi_encode_tuple_t_address_t_bytes32_t_rational_0_by_1_t_bytes_memory_ptr__to_t_address_t_bytes32_t_uint16_t_bytes_memory_ptr__fromStack_reversed": { - "entryPoint": 11024, - "id": null, - "parameterSlots": 5, - "returnSlots": 1 - }, - "abi_encode_tuple_t_address_t_uint256_t_uint256__to_t_address_t_uint256_t_uint256__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 4, - "returnSlots": 1 - }, - "abi_encode_tuple_t_array$_t_struct$_EnforcedOptionParam_$1932_memory_ptr_$dyn_memory_ptr__to_t_array$_t_struct$_EnforcedOptionParam_$1932_memory_ptr_$dyn_memory_ptr__fromStack_reversed": { - "entryPoint": 11607, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_bytes4_t_uint64__to_t_bytes4_t_uint64__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 3, - "returnSlots": 1 - }, - "abi_encode_tuple_t_bytes_calldata_ptr__to_t_bytes_memory_ptr__fromStack_reversed": { - "entryPoint": 10586, - "id": null, - "parameterSlots": 3, - "returnSlots": 1 - }, - "abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_bytes_memory_ptr_t_bytes_memory_ptr__to_t_bytes_memory_ptr_t_bytes_memory_ptr__fromStack_reversed": { - "entryPoint": 11073, - "id": null, - "parameterSlots": 3, - "returnSlots": 1 - }, - "abi_encode_tuple_t_contract$_ILayerZeroEndpointV2_$202__to_t_address__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": 8432, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_struct$_MessagingFee_$33_memory_ptr__to_t_struct$_MessagingFee_$33_memory_ptr__fromStack_reversed": { - "entryPoint": 9207, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_struct$_MessagingParams_$20_memory_ptr_t_address__to_t_struct$_MessagingParams_$20_memory_ptr_t_address__fromStack_reversed": { - "entryPoint": 11139, - "id": null, - "parameterSlots": 3, - "returnSlots": 1 - }, - "abi_encode_tuple_t_struct$_MessagingReceipt_$28_memory_ptr_t_struct$_OFTReceipt_$3394_memory_ptr__to_t_struct$_MessagingReceipt_$28_memory_ptr_t_struct$_OFTReceipt_$3394_memory_ptr__fromStack_reversed": { - "entryPoint": 9795, - "id": null, - "parameterSlots": 3, - "returnSlots": 1 - }, - "abi_encode_tuple_t_struct$_OFTLimit_$3388_memory_ptr_t_array$_t_struct$_OFTFeeDetail_$3400_memory_ptr_$dyn_memory_ptr_t_struct$_OFTReceipt_$3394_memory_ptr__to_t_struct$_OFTLimit_$3388_memory_ptr_t_array$_t_struct$_OFTFeeDetail_$3400_memory_ptr_$dyn_memory_ptr_t_struct$_OFTReceipt_$3394_memory_ptr__fromStack_reversed": { - "entryPoint": 8592, - "id": null, - "parameterSlots": 4, - "returnSlots": 1 - }, - "abi_encode_tuple_t_struct$_Origin_$40_calldata_ptr_t_bytes32_t_bytes_calldata_ptr_t_address_t_bytes_calldata_ptr__to_t_struct$_Origin_$40_memory_ptr_t_bytes32_t_bytes_memory_ptr_t_address_t_bytes_memory_ptr__fromStack_reversed": { - "entryPoint": 10752, - "id": null, - "parameterSlots": 8, - "returnSlots": 1 - }, - "abi_encode_tuple_t_uint16__to_t_uint16__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 3, - "returnSlots": 1 - }, - "abi_encode_tuple_t_uint32__to_t_uint32__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_uint32_t_bytes32__to_t_uint32_t_bytes32__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 3, - "returnSlots": 1 - }, - "abi_encode_tuple_t_uint32_t_uint256__to_t_uint32_t_uint256__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 3, - "returnSlots": 1 - }, - "abi_encode_tuple_t_uint32_t_uint256_t_uint256__to_t_uint32_t_uint256_t_uint256__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 4, - "returnSlots": 1 - }, - "abi_encode_tuple_t_uint64__to_t_uint64__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_uint64_t_uint64__to_t_uint64_t_uint64__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 3, - "returnSlots": 1 - }, - "abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "access_calldata_tail_t_bytes_calldata_ptr": { - "entryPoint": 10661, - "id": null, - "parameterSlots": 2, - "returnSlots": 2 - }, - "access_calldata_tail_t_struct$_InboundPacket_$2486_calldata_ptr": { - "entryPoint": 10628, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "allocate_memory": { - "entryPoint": 10099, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "allocate_memory_4159": { - "entryPoint": 10025, - "id": null, - "parameterSlots": 0, - "returnSlots": 1 - }, - "allocate_memory_4160": { - "entryPoint": 10065, - "id": null, - "parameterSlots": 0, - "returnSlots": 1 - }, - "array_allocation_size_bytes": { - "entryPoint": 10147, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "array_dataslot_bytes_storage": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "calldata_array_index_range_access_t_bytes_calldata_ptr": { - "entryPoint": 10463, - "id": null, - "parameterSlots": 4, - "returnSlots": 2 - }, - "checked_add_t_uint256": { - "entryPoint": 12032, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "checked_div_t_uint256": { - "entryPoint": 11818, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "checked_mul_t_uint256": { - "entryPoint": 11852, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "clean_up_bytearray_end_slots_bytes_storage": { - "entryPoint": 11336, - "id": null, - "parameterSlots": 3, - "returnSlots": 0 - }, - "convert_array_t_array$_t_struct$_EnforcedOptionParam_$1932_calldata_ptr_$dyn_calldata_ptr_to_t_array$_t_struct$_EnforcedOptionParam_$1932_memory_ptr_$dyn_memory_ptr": { - "entryPoint": 10186, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "convert_bytes_to_fixedbytes_from_t_bytes_calldata_ptr_to_t_bytes32": { - "entryPoint": 11875, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "convert_bytes_to_fixedbytes_from_t_bytes_calldata_ptr_to_t_bytes8": { - "entryPoint": 11905, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "copy_byte_array_to_storage_from_t_bytes_memory_ptr_to_t_bytes_storage": { - "entryPoint": 11416, - "id": null, - "parameterSlots": 2, - "returnSlots": 0 - }, - "copy_memory_to_memory_with_cleanup": { - "entryPoint": 8352, - "id": null, - "parameterSlots": 3, - "returnSlots": 0 - }, - "extract_byte_array_length": { - "entryPoint": 9951, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "extract_used_part_and_set_length_of_short_byte_array": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "panic_error_0x11": { - "entryPoint": 11796, - "id": null, - "parameterSlots": 0, - "returnSlots": 0 - }, - "panic_error_0x32": { - "entryPoint": 10606, - "id": null, - "parameterSlots": 0, - "returnSlots": 0 - }, - "panic_error_0x41": { - "entryPoint": 10003, - "id": null, - "parameterSlots": 0, - "returnSlots": 0 - }, - "validator_revert_address": { - "entryPoint": 8451, - "id": null, - "parameterSlots": 1, - "returnSlots": 0 - }, - "validator_revert_bool": { - "entryPoint": 9112, - "id": null, - "parameterSlots": 1, - "returnSlots": 0 - }, - "validator_revert_uint64": { - "entryPoint": 10731, - "id": null, - "parameterSlots": 1, - "returnSlots": 0 - } - }, - "generatedSources": [ - { - "ast": { - "nativeSrc": "0:34156:43", - "nodeType": "YulBlock", - "src": "0:34156:43", - "statements": [ - { - "nativeSrc": "6:3:43", - "nodeType": "YulBlock", - "src": "6:3:43", - "statements": [] - }, - { - "body": { - "nativeSrc": "80:184:43", - "nodeType": "YulBlock", - "src": "80:184:43", - "statements": [ - { - "nativeSrc": "90:10:43", - "nodeType": "YulVariableDeclaration", - "src": "90:10:43", - "value": { - "kind": "number", - "nativeSrc": "99:1:43", - "nodeType": "YulLiteral", - "src": "99:1:43", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "i", - "nativeSrc": "94:1:43", - "nodeType": "YulTypedName", - "src": "94:1:43", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "159:63:43", - "nodeType": "YulBlock", - "src": "159:63:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "dst", - "nativeSrc": "184:3:43", - "nodeType": "YulIdentifier", - "src": "184:3:43" - }, - { - "name": "i", - "nativeSrc": "189:1:43", - "nodeType": "YulIdentifier", - "src": "189:1:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "180:3:43", - "nodeType": "YulIdentifier", - "src": "180:3:43" - }, - "nativeSrc": "180:11:43", - "nodeType": "YulFunctionCall", - "src": "180:11:43" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "src", - "nativeSrc": "203:3:43", - "nodeType": "YulIdentifier", - "src": "203:3:43" - }, - { - "name": "i", - "nativeSrc": "208:1:43", - "nodeType": "YulIdentifier", - "src": "208:1:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "199:3:43", - "nodeType": "YulIdentifier", - "src": "199:3:43" - }, - "nativeSrc": "199:11:43", - "nodeType": "YulFunctionCall", - "src": "199:11:43" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "193:5:43", - "nodeType": "YulIdentifier", - "src": "193:5:43" - }, - "nativeSrc": "193:18:43", - "nodeType": "YulFunctionCall", - "src": "193:18:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "173:6:43", - "nodeType": "YulIdentifier", - "src": "173:6:43" - }, - "nativeSrc": "173:39:43", - "nodeType": "YulFunctionCall", - "src": "173:39:43" - }, - "nativeSrc": "173:39:43", - "nodeType": "YulExpressionStatement", - "src": "173:39:43" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nativeSrc": "120:1:43", - "nodeType": "YulIdentifier", - "src": "120:1:43" - }, - { - "name": "length", - "nativeSrc": "123:6:43", - "nodeType": "YulIdentifier", - "src": "123:6:43" - } - ], - "functionName": { - "name": "lt", - "nativeSrc": "117:2:43", - "nodeType": "YulIdentifier", - "src": "117:2:43" - }, - "nativeSrc": "117:13:43", - "nodeType": "YulFunctionCall", - "src": "117:13:43" - }, - "nativeSrc": "109:113:43", - "nodeType": "YulForLoop", - "post": { - "nativeSrc": "131:19:43", - "nodeType": "YulBlock", - "src": "131:19:43", - "statements": [ - { - "nativeSrc": "133:15:43", - "nodeType": "YulAssignment", - "src": "133:15:43", - "value": { - "arguments": [ - { - "name": "i", - "nativeSrc": "142:1:43", - "nodeType": "YulIdentifier", - "src": "142:1:43" - }, - { - "kind": "number", - "nativeSrc": "145:2:43", - "nodeType": "YulLiteral", - "src": "145:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "138:3:43", - "nodeType": "YulIdentifier", - "src": "138:3:43" - }, - "nativeSrc": "138:10:43", - "nodeType": "YulFunctionCall", - "src": "138:10:43" - }, - "variableNames": [ - { - "name": "i", - "nativeSrc": "133:1:43", - "nodeType": "YulIdentifier", - "src": "133:1:43" - } - ] - } - ] - }, - "pre": { - "nativeSrc": "113:3:43", - "nodeType": "YulBlock", - "src": "113:3:43", - "statements": [] - }, - "src": "109:113:43" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "dst", - "nativeSrc": "242:3:43", - "nodeType": "YulIdentifier", - "src": "242:3:43" - }, - { - "name": "length", - "nativeSrc": "247:6:43", - "nodeType": "YulIdentifier", - "src": "247:6:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "238:3:43", - "nodeType": "YulIdentifier", - "src": "238:3:43" - }, - "nativeSrc": "238:16:43", - "nodeType": "YulFunctionCall", - "src": "238:16:43" - }, - { - "kind": "number", - "nativeSrc": "256:1:43", - "nodeType": "YulLiteral", - "src": "256:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "231:6:43", - "nodeType": "YulIdentifier", - "src": "231:6:43" - }, - "nativeSrc": "231:27:43", - "nodeType": "YulFunctionCall", - "src": "231:27:43" - }, - "nativeSrc": "231:27:43", - "nodeType": "YulExpressionStatement", - "src": "231:27:43" - } - ] - }, - "name": "copy_memory_to_memory_with_cleanup", - "nativeSrc": "14:250:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "src", - "nativeSrc": "58:3:43", - "nodeType": "YulTypedName", - "src": "58:3:43", - "type": "" - }, - { - "name": "dst", - "nativeSrc": "63:3:43", - "nodeType": "YulTypedName", - "src": "63:3:43", - "type": "" - }, - { - "name": "length", - "nativeSrc": "68:6:43", - "nodeType": "YulTypedName", - "src": "68:6:43", - "type": "" - } - ], - "src": "14:250:43" - }, - { - "body": { - "nativeSrc": "319:221:43", - "nodeType": "YulBlock", - "src": "319:221:43", - "statements": [ - { - "nativeSrc": "329:26:43", - "nodeType": "YulVariableDeclaration", - "src": "329:26:43", - "value": { - "arguments": [ - { - "name": "value", - "nativeSrc": "349:5:43", - "nodeType": "YulIdentifier", - "src": "349:5:43" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "343:5:43", - "nodeType": "YulIdentifier", - "src": "343:5:43" - }, - "nativeSrc": "343:12:43", - "nodeType": "YulFunctionCall", - "src": "343:12:43" - }, - "variables": [ - { - "name": "length", - "nativeSrc": "333:6:43", - "nodeType": "YulTypedName", - "src": "333:6:43", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "pos", - "nativeSrc": "371:3:43", - "nodeType": "YulIdentifier", - "src": "371:3:43" - }, - { - "name": "length", - "nativeSrc": "376:6:43", - "nodeType": "YulIdentifier", - "src": "376:6:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "364:6:43", - "nodeType": "YulIdentifier", - "src": "364:6:43" - }, - "nativeSrc": "364:19:43", - "nodeType": "YulFunctionCall", - "src": "364:19:43" - }, - "nativeSrc": "364:19:43", - "nodeType": "YulExpressionStatement", - "src": "364:19:43" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nativeSrc": "431:5:43", - "nodeType": "YulIdentifier", - "src": "431:5:43" - }, - { - "kind": "number", - "nativeSrc": "438:4:43", - "nodeType": "YulLiteral", - "src": "438:4:43", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "427:3:43", - "nodeType": "YulIdentifier", - "src": "427:3:43" - }, - "nativeSrc": "427:16:43", - "nodeType": "YulFunctionCall", - "src": "427:16:43" - }, - { - "arguments": [ - { - "name": "pos", - "nativeSrc": "449:3:43", - "nodeType": "YulIdentifier", - "src": "449:3:43" - }, - { - "kind": "number", - "nativeSrc": "454:4:43", - "nodeType": "YulLiteral", - "src": "454:4:43", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "445:3:43", - "nodeType": "YulIdentifier", - "src": "445:3:43" - }, - "nativeSrc": "445:14:43", - "nodeType": "YulFunctionCall", - "src": "445:14:43" - }, - { - "name": "length", - "nativeSrc": "461:6:43", - "nodeType": "YulIdentifier", - "src": "461:6:43" - } - ], - "functionName": { - "name": "copy_memory_to_memory_with_cleanup", - "nativeSrc": "392:34:43", - "nodeType": "YulIdentifier", - "src": "392:34:43" - }, - "nativeSrc": "392:76:43", - "nodeType": "YulFunctionCall", - "src": "392:76:43" - }, - "nativeSrc": "392:76:43", - "nodeType": "YulExpressionStatement", - "src": "392:76:43" - }, - { - "nativeSrc": "477:57:43", - "nodeType": "YulAssignment", - "src": "477:57:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "pos", - "nativeSrc": "492:3:43", - "nodeType": "YulIdentifier", - "src": "492:3:43" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "length", - "nativeSrc": "505:6:43", - "nodeType": "YulIdentifier", - "src": "505:6:43" - }, - { - "kind": "number", - "nativeSrc": "513:2:43", - "nodeType": "YulLiteral", - "src": "513:2:43", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "501:3:43", - "nodeType": "YulIdentifier", - "src": "501:3:43" - }, - "nativeSrc": "501:15:43", - "nodeType": "YulFunctionCall", - "src": "501:15:43" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "522:2:43", - "nodeType": "YulLiteral", - "src": "522:2:43", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "not", - "nativeSrc": "518:3:43", - "nodeType": "YulIdentifier", - "src": "518:3:43" - }, - "nativeSrc": "518:7:43", - "nodeType": "YulFunctionCall", - "src": "518:7:43" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "497:3:43", - "nodeType": "YulIdentifier", - "src": "497:3:43" - }, - "nativeSrc": "497:29:43", - "nodeType": "YulFunctionCall", - "src": "497:29:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "488:3:43", - "nodeType": "YulIdentifier", - "src": "488:3:43" - }, - "nativeSrc": "488:39:43", - "nodeType": "YulFunctionCall", - "src": "488:39:43" - }, - { - "kind": "number", - "nativeSrc": "529:4:43", - "nodeType": "YulLiteral", - "src": "529:4:43", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "484:3:43", - "nodeType": "YulIdentifier", - "src": "484:3:43" - }, - "nativeSrc": "484:50:43", - "nodeType": "YulFunctionCall", - "src": "484:50:43" - }, - "variableNames": [ - { - "name": "end", - "nativeSrc": "477:3:43", - "nodeType": "YulIdentifier", - "src": "477:3:43" - } - ] - } - ] - }, - "name": "abi_encode_string", - "nativeSrc": "269:271:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nativeSrc": "296:5:43", - "nodeType": "YulTypedName", - "src": "296:5:43", - "type": "" - }, - { - "name": "pos", - "nativeSrc": "303:3:43", - "nodeType": "YulTypedName", - "src": "303:3:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "end", - "nativeSrc": "311:3:43", - "nodeType": "YulTypedName", - "src": "311:3:43", - "type": "" - } - ], - "src": "269:271:43" - }, - { - "body": { - "nativeSrc": "666:99:43", - "nodeType": "YulBlock", - "src": "666:99:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "683:9:43", - "nodeType": "YulIdentifier", - "src": "683:9:43" - }, - { - "kind": "number", - "nativeSrc": "694:2:43", - "nodeType": "YulLiteral", - "src": "694:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "676:6:43", - "nodeType": "YulIdentifier", - "src": "676:6:43" - }, - "nativeSrc": "676:21:43", - "nodeType": "YulFunctionCall", - "src": "676:21:43" - }, - "nativeSrc": "676:21:43", - "nodeType": "YulExpressionStatement", - "src": "676:21:43" - }, - { - "nativeSrc": "706:53:43", - "nodeType": "YulAssignment", - "src": "706:53:43", - "value": { - "arguments": [ - { - "name": "value0", - "nativeSrc": "732:6:43", - "nodeType": "YulIdentifier", - "src": "732:6:43" - }, - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "744:9:43", - "nodeType": "YulIdentifier", - "src": "744:9:43" - }, - { - "kind": "number", - "nativeSrc": "755:2:43", - "nodeType": "YulLiteral", - "src": "755:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "740:3:43", - "nodeType": "YulIdentifier", - "src": "740:3:43" - }, - "nativeSrc": "740:18:43", - "nodeType": "YulFunctionCall", - "src": "740:18:43" - } - ], - "functionName": { - "name": "abi_encode_string", - "nativeSrc": "714:17:43", - "nodeType": "YulIdentifier", - "src": "714:17:43" - }, - "nativeSrc": "714:45:43", - "nodeType": "YulFunctionCall", - "src": "714:45:43" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "706:4:43", - "nodeType": "YulIdentifier", - "src": "706:4:43" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed", - "nativeSrc": "545:220:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "635:9:43", - "nodeType": "YulTypedName", - "src": "635:9:43", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "646:6:43", - "nodeType": "YulTypedName", - "src": "646:6:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "657:4:43", - "nodeType": "YulTypedName", - "src": "657:4:43", - "type": "" - } - ], - "src": "545:220:43" - }, - { - "body": { - "nativeSrc": "815:86:43", - "nodeType": "YulBlock", - "src": "815:86:43", - "statements": [ - { - "body": { - "nativeSrc": "879:16:43", - "nodeType": "YulBlock", - "src": "879:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "888:1:43", - "nodeType": "YulLiteral", - "src": "888:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "891:1:43", - "nodeType": "YulLiteral", - "src": "891:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "881:6:43", - "nodeType": "YulIdentifier", - "src": "881:6:43" - }, - "nativeSrc": "881:12:43", - "nodeType": "YulFunctionCall", - "src": "881:12:43" - }, - "nativeSrc": "881:12:43", - "nodeType": "YulExpressionStatement", - "src": "881:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nativeSrc": "838:5:43", - "nodeType": "YulIdentifier", - "src": "838:5:43" - }, - { - "arguments": [ - { - "name": "value", - "nativeSrc": "849:5:43", - "nodeType": "YulIdentifier", - "src": "849:5:43" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "864:3:43", - "nodeType": "YulLiteral", - "src": "864:3:43", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nativeSrc": "869:1:43", - "nodeType": "YulLiteral", - "src": "869:1:43", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "860:3:43", - "nodeType": "YulIdentifier", - "src": "860:3:43" - }, - "nativeSrc": "860:11:43", - "nodeType": "YulFunctionCall", - "src": "860:11:43" - }, - { - "kind": "number", - "nativeSrc": "873:1:43", - "nodeType": "YulLiteral", - "src": "873:1:43", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "856:3:43", - "nodeType": "YulIdentifier", - "src": "856:3:43" - }, - "nativeSrc": "856:19:43", - "nodeType": "YulFunctionCall", - "src": "856:19:43" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "845:3:43", - "nodeType": "YulIdentifier", - "src": "845:3:43" - }, - "nativeSrc": "845:31:43", - "nodeType": "YulFunctionCall", - "src": "845:31:43" - } - ], - "functionName": { - "name": "eq", - "nativeSrc": "835:2:43", - "nodeType": "YulIdentifier", - "src": "835:2:43" - }, - "nativeSrc": "835:42:43", - "nodeType": "YulFunctionCall", - "src": "835:42:43" - } - ], - "functionName": { - "name": "iszero", - "nativeSrc": "828:6:43", - "nodeType": "YulIdentifier", - "src": "828:6:43" - }, - "nativeSrc": "828:50:43", - "nodeType": "YulFunctionCall", - "src": "828:50:43" - }, - "nativeSrc": "825:70:43", - "nodeType": "YulIf", - "src": "825:70:43" - } - ] - }, - "name": "validator_revert_address", - "nativeSrc": "770:131:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nativeSrc": "804:5:43", - "nodeType": "YulTypedName", - "src": "804:5:43", - "type": "" - } - ], - "src": "770:131:43" - }, - { - "body": { - "nativeSrc": "993:228:43", - "nodeType": "YulBlock", - "src": "993:228:43", - "statements": [ - { - "body": { - "nativeSrc": "1039:16:43", - "nodeType": "YulBlock", - "src": "1039:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "1048:1:43", - "nodeType": "YulLiteral", - "src": "1048:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "1051:1:43", - "nodeType": "YulLiteral", - "src": "1051:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "1041:6:43", - "nodeType": "YulIdentifier", - "src": "1041:6:43" - }, - "nativeSrc": "1041:12:43", - "nodeType": "YulFunctionCall", - "src": "1041:12:43" - }, - "nativeSrc": "1041:12:43", - "nodeType": "YulExpressionStatement", - "src": "1041:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nativeSrc": "1014:7:43", - "nodeType": "YulIdentifier", - "src": "1014:7:43" - }, - { - "name": "headStart", - "nativeSrc": "1023:9:43", - "nodeType": "YulIdentifier", - "src": "1023:9:43" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "1010:3:43", - "nodeType": "YulIdentifier", - "src": "1010:3:43" - }, - "nativeSrc": "1010:23:43", - "nodeType": "YulFunctionCall", - "src": "1010:23:43" - }, - { - "kind": "number", - "nativeSrc": "1035:2:43", - "nodeType": "YulLiteral", - "src": "1035:2:43", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "1006:3:43", - "nodeType": "YulIdentifier", - "src": "1006:3:43" - }, - "nativeSrc": "1006:32:43", - "nodeType": "YulFunctionCall", - "src": "1006:32:43" - }, - "nativeSrc": "1003:52:43", - "nodeType": "YulIf", - "src": "1003:52:43" - }, - { - "nativeSrc": "1064:36:43", - "nodeType": "YulVariableDeclaration", - "src": "1064:36:43", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "1090:9:43", - "nodeType": "YulIdentifier", - "src": "1090:9:43" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "1077:12:43", - "nodeType": "YulIdentifier", - "src": "1077:12:43" - }, - "nativeSrc": "1077:23:43", - "nodeType": "YulFunctionCall", - "src": "1077:23:43" - }, - "variables": [ - { - "name": "value", - "nativeSrc": "1068:5:43", - "nodeType": "YulTypedName", - "src": "1068:5:43", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nativeSrc": "1134:5:43", - "nodeType": "YulIdentifier", - "src": "1134:5:43" - } - ], - "functionName": { - "name": "validator_revert_address", - "nativeSrc": "1109:24:43", - "nodeType": "YulIdentifier", - "src": "1109:24:43" - }, - "nativeSrc": "1109:31:43", - "nodeType": "YulFunctionCall", - "src": "1109:31:43" - }, - "nativeSrc": "1109:31:43", - "nodeType": "YulExpressionStatement", - "src": "1109:31:43" - }, - { - "nativeSrc": "1149:15:43", - "nodeType": "YulAssignment", - "src": "1149:15:43", - "value": { - "name": "value", - "nativeSrc": "1159:5:43", - "nodeType": "YulIdentifier", - "src": "1159:5:43" - }, - "variableNames": [ - { - "name": "value0", - "nativeSrc": "1149:6:43", - "nodeType": "YulIdentifier", - "src": "1149:6:43" - } - ] - }, - { - "nativeSrc": "1173:42:43", - "nodeType": "YulAssignment", - "src": "1173:42:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "1200:9:43", - "nodeType": "YulIdentifier", - "src": "1200:9:43" - }, - { - "kind": "number", - "nativeSrc": "1211:2:43", - "nodeType": "YulLiteral", - "src": "1211:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "1196:3:43", - "nodeType": "YulIdentifier", - "src": "1196:3:43" - }, - "nativeSrc": "1196:18:43", - "nodeType": "YulFunctionCall", - "src": "1196:18:43" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "1183:12:43", - "nodeType": "YulIdentifier", - "src": "1183:12:43" - }, - "nativeSrc": "1183:32:43", - "nodeType": "YulFunctionCall", - "src": "1183:32:43" - }, - "variableNames": [ - { - "name": "value1", - "nativeSrc": "1173:6:43", - "nodeType": "YulIdentifier", - "src": "1173:6:43" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_addresst_uint256", - "nativeSrc": "906:315:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "951:9:43", - "nodeType": "YulTypedName", - "src": "951:9:43", - "type": "" - }, - { - "name": "dataEnd", - "nativeSrc": "962:7:43", - "nodeType": "YulTypedName", - "src": "962:7:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nativeSrc": "974:6:43", - "nodeType": "YulTypedName", - "src": "974:6:43", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "982:6:43", - "nodeType": "YulTypedName", - "src": "982:6:43", - "type": "" - } - ], - "src": "906:315:43" - }, - { - "body": { - "nativeSrc": "1321:92:43", - "nodeType": "YulBlock", - "src": "1321:92:43", - "statements": [ - { - "nativeSrc": "1331:26:43", - "nodeType": "YulAssignment", - "src": "1331:26:43", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "1343:9:43", - "nodeType": "YulIdentifier", - "src": "1343:9:43" - }, - { - "kind": "number", - "nativeSrc": "1354:2:43", - "nodeType": "YulLiteral", - "src": "1354:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "1339:3:43", - "nodeType": "YulIdentifier", - "src": "1339:3:43" - }, - "nativeSrc": "1339:18:43", - "nodeType": "YulFunctionCall", - "src": "1339:18:43" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "1331:4:43", - "nodeType": "YulIdentifier", - "src": "1331:4:43" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "1373:9:43", - "nodeType": "YulIdentifier", - "src": "1373:9:43" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nativeSrc": "1398:6:43", - "nodeType": "YulIdentifier", - "src": "1398:6:43" - } - ], - "functionName": { - "name": "iszero", - "nativeSrc": "1391:6:43", - "nodeType": "YulIdentifier", - "src": "1391:6:43" - }, - "nativeSrc": "1391:14:43", - "nodeType": "YulFunctionCall", - "src": "1391:14:43" - } - ], - "functionName": { - "name": "iszero", - "nativeSrc": "1384:6:43", - "nodeType": "YulIdentifier", - "src": "1384:6:43" - }, - "nativeSrc": "1384:22:43", - "nodeType": "YulFunctionCall", - "src": "1384:22:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "1366:6:43", - "nodeType": "YulIdentifier", - "src": "1366:6:43" - }, - "nativeSrc": "1366:41:43", - "nodeType": "YulFunctionCall", - "src": "1366:41:43" - }, - "nativeSrc": "1366:41:43", - "nodeType": "YulExpressionStatement", - "src": "1366:41:43" - } - ] - }, - "name": "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed", - "nativeSrc": "1226:187:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "1290:9:43", - "nodeType": "YulTypedName", - "src": "1290:9:43", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "1301:6:43", - "nodeType": "YulTypedName", - "src": "1301:6:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "1312:4:43", - "nodeType": "YulTypedName", - "src": "1312:4:43", - "type": "" - } - ], - "src": "1226:187:43" - }, - { - "body": { - "nativeSrc": "1490:86:43", - "nodeType": "YulBlock", - "src": "1490:86:43", - "statements": [ - { - "body": { - "nativeSrc": "1530:16:43", - "nodeType": "YulBlock", - "src": "1530:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "1539:1:43", - "nodeType": "YulLiteral", - "src": "1539:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "1542:1:43", - "nodeType": "YulLiteral", - "src": "1542:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "1532:6:43", - "nodeType": "YulIdentifier", - "src": "1532:6:43" - }, - "nativeSrc": "1532:12:43", - "nodeType": "YulFunctionCall", - "src": "1532:12:43" - }, - "nativeSrc": "1532:12:43", - "nodeType": "YulExpressionStatement", - "src": "1532:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "end", - "nativeSrc": "1511:3:43", - "nodeType": "YulIdentifier", - "src": "1511:3:43" - }, - { - "name": "offset", - "nativeSrc": "1516:6:43", - "nodeType": "YulIdentifier", - "src": "1516:6:43" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "1507:3:43", - "nodeType": "YulIdentifier", - "src": "1507:3:43" - }, - "nativeSrc": "1507:16:43", - "nodeType": "YulFunctionCall", - "src": "1507:16:43" - }, - { - "kind": "number", - "nativeSrc": "1525:3:43", - "nodeType": "YulLiteral", - "src": "1525:3:43", - "type": "", - "value": "224" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "1503:3:43", - "nodeType": "YulIdentifier", - "src": "1503:3:43" - }, - "nativeSrc": "1503:26:43", - "nodeType": "YulFunctionCall", - "src": "1503:26:43" - }, - "nativeSrc": "1500:46:43", - "nodeType": "YulIf", - "src": "1500:46:43" - }, - { - "nativeSrc": "1555:15:43", - "nodeType": "YulAssignment", - "src": "1555:15:43", - "value": { - "name": "offset", - "nativeSrc": "1564:6:43", - "nodeType": "YulIdentifier", - "src": "1564:6:43" - }, - "variableNames": [ - { - "name": "value", - "nativeSrc": "1555:5:43", - "nodeType": "YulIdentifier", - "src": "1555:5:43" - } - ] - } - ] - }, - "name": "abi_decode_struct_SendParam_calldata", - "nativeSrc": "1418:158:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "offset", - "nativeSrc": "1464:6:43", - "nodeType": "YulTypedName", - "src": "1464:6:43", - "type": "" - }, - { - "name": "end", - "nativeSrc": "1472:3:43", - "nodeType": "YulTypedName", - "src": "1472:3:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value", - "nativeSrc": "1480:5:43", - "nodeType": "YulTypedName", - "src": "1480:5:43", - "type": "" - } - ], - "src": "1418:158:43" - }, - { - "body": { - "nativeSrc": "1680:261:43", - "nodeType": "YulBlock", - "src": "1680:261:43", - "statements": [ - { - "body": { - "nativeSrc": "1726:16:43", - "nodeType": "YulBlock", - "src": "1726:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "1735:1:43", - "nodeType": "YulLiteral", - "src": "1735:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "1738:1:43", - "nodeType": "YulLiteral", - "src": "1738:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "1728:6:43", - "nodeType": "YulIdentifier", - "src": "1728:6:43" - }, - "nativeSrc": "1728:12:43", - "nodeType": "YulFunctionCall", - "src": "1728:12:43" - }, - "nativeSrc": "1728:12:43", - "nodeType": "YulExpressionStatement", - "src": "1728:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nativeSrc": "1701:7:43", - "nodeType": "YulIdentifier", - "src": "1701:7:43" - }, - { - "name": "headStart", - "nativeSrc": "1710:9:43", - "nodeType": "YulIdentifier", - "src": "1710:9:43" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "1697:3:43", - "nodeType": "YulIdentifier", - "src": "1697:3:43" - }, - "nativeSrc": "1697:23:43", - "nodeType": "YulFunctionCall", - "src": "1697:23:43" - }, - { - "kind": "number", - "nativeSrc": "1722:2:43", - "nodeType": "YulLiteral", - "src": "1722:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "1693:3:43", - "nodeType": "YulIdentifier", - "src": "1693:3:43" - }, - "nativeSrc": "1693:32:43", - "nodeType": "YulFunctionCall", - "src": "1693:32:43" - }, - "nativeSrc": "1690:52:43", - "nodeType": "YulIf", - "src": "1690:52:43" - }, - { - "nativeSrc": "1751:37:43", - "nodeType": "YulVariableDeclaration", - "src": "1751:37:43", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "1778:9:43", - "nodeType": "YulIdentifier", - "src": "1778:9:43" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "1765:12:43", - "nodeType": "YulIdentifier", - "src": "1765:12:43" - }, - "nativeSrc": "1765:23:43", - "nodeType": "YulFunctionCall", - "src": "1765:23:43" - }, - "variables": [ - { - "name": "offset", - "nativeSrc": "1755:6:43", - "nodeType": "YulTypedName", - "src": "1755:6:43", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "1831:16:43", - "nodeType": "YulBlock", - "src": "1831:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "1840:1:43", - "nodeType": "YulLiteral", - "src": "1840:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "1843:1:43", - "nodeType": "YulLiteral", - "src": "1843:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "1833:6:43", - "nodeType": "YulIdentifier", - "src": "1833:6:43" - }, - "nativeSrc": "1833:12:43", - "nodeType": "YulFunctionCall", - "src": "1833:12:43" - }, - "nativeSrc": "1833:12:43", - "nodeType": "YulExpressionStatement", - "src": "1833:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "offset", - "nativeSrc": "1803:6:43", - "nodeType": "YulIdentifier", - "src": "1803:6:43" - }, - { - "kind": "number", - "nativeSrc": "1811:18:43", - "nodeType": "YulLiteral", - "src": "1811:18:43", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "1800:2:43", - "nodeType": "YulIdentifier", - "src": "1800:2:43" - }, - "nativeSrc": "1800:30:43", - "nodeType": "YulFunctionCall", - "src": "1800:30:43" - }, - "nativeSrc": "1797:50:43", - "nodeType": "YulIf", - "src": "1797:50:43" - }, - { - "nativeSrc": "1856:79:43", - "nodeType": "YulAssignment", - "src": "1856:79:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "1907:9:43", - "nodeType": "YulIdentifier", - "src": "1907:9:43" - }, - { - "name": "offset", - "nativeSrc": "1918:6:43", - "nodeType": "YulIdentifier", - "src": "1918:6:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "1903:3:43", - "nodeType": "YulIdentifier", - "src": "1903:3:43" - }, - "nativeSrc": "1903:22:43", - "nodeType": "YulFunctionCall", - "src": "1903:22:43" - }, - { - "name": "dataEnd", - "nativeSrc": "1927:7:43", - "nodeType": "YulIdentifier", - "src": "1927:7:43" - } - ], - "functionName": { - "name": "abi_decode_struct_SendParam_calldata", - "nativeSrc": "1866:36:43", - "nodeType": "YulIdentifier", - "src": "1866:36:43" - }, - "nativeSrc": "1866:69:43", - "nodeType": "YulFunctionCall", - "src": "1866:69:43" - }, - "variableNames": [ - { - "name": "value0", - "nativeSrc": "1856:6:43", - "nodeType": "YulIdentifier", - "src": "1856:6:43" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_struct$_SendParam_$3382_calldata_ptr", - "nativeSrc": "1581:360:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "1646:9:43", - "nodeType": "YulTypedName", - "src": "1646:9:43", - "type": "" - }, - { - "name": "dataEnd", - "nativeSrc": "1657:7:43", - "nodeType": "YulTypedName", - "src": "1657:7:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nativeSrc": "1669:6:43", - "nodeType": "YulTypedName", - "src": "1669:6:43", - "type": "" - } - ], - "src": "1581:360:43" - }, - { - "body": { - "nativeSrc": "1998:97:43", - "nodeType": "YulBlock", - "src": "1998:97:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "pos", - "nativeSrc": "2015:3:43", - "nodeType": "YulIdentifier", - "src": "2015:3:43" - }, - { - "arguments": [ - { - "name": "value", - "nativeSrc": "2026:5:43", - "nodeType": "YulIdentifier", - "src": "2026:5:43" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "2020:5:43", - "nodeType": "YulIdentifier", - "src": "2020:5:43" - }, - "nativeSrc": "2020:12:43", - "nodeType": "YulFunctionCall", - "src": "2020:12:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "2008:6:43", - "nodeType": "YulIdentifier", - "src": "2008:6:43" - }, - "nativeSrc": "2008:25:43", - "nodeType": "YulFunctionCall", - "src": "2008:25:43" - }, - "nativeSrc": "2008:25:43", - "nodeType": "YulExpressionStatement", - "src": "2008:25:43" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "pos", - "nativeSrc": "2053:3:43", - "nodeType": "YulIdentifier", - "src": "2053:3:43" - }, - { - "kind": "number", - "nativeSrc": "2058:4:43", - "nodeType": "YulLiteral", - "src": "2058:4:43", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "2049:3:43", - "nodeType": "YulIdentifier", - "src": "2049:3:43" - }, - "nativeSrc": "2049:14:43", - "nodeType": "YulFunctionCall", - "src": "2049:14:43" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nativeSrc": "2075:5:43", - "nodeType": "YulIdentifier", - "src": "2075:5:43" - }, - { - "kind": "number", - "nativeSrc": "2082:4:43", - "nodeType": "YulLiteral", - "src": "2082:4:43", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "2071:3:43", - "nodeType": "YulIdentifier", - "src": "2071:3:43" - }, - "nativeSrc": "2071:16:43", - "nodeType": "YulFunctionCall", - "src": "2071:16:43" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "2065:5:43", - "nodeType": "YulIdentifier", - "src": "2065:5:43" - }, - "nativeSrc": "2065:23:43", - "nodeType": "YulFunctionCall", - "src": "2065:23:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "2042:6:43", - "nodeType": "YulIdentifier", - "src": "2042:6:43" - }, - "nativeSrc": "2042:47:43", - "nodeType": "YulFunctionCall", - "src": "2042:47:43" - }, - "nativeSrc": "2042:47:43", - "nodeType": "YulExpressionStatement", - "src": "2042:47:43" - } - ] - }, - "name": "abi_encode_struct_OFTLimit", - "nativeSrc": "1946:149:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nativeSrc": "1982:5:43", - "nodeType": "YulTypedName", - "src": "1982:5:43", - "type": "" - }, - { - "name": "pos", - "nativeSrc": "1989:3:43", - "nodeType": "YulTypedName", - "src": "1989:3:43", - "type": "" - } - ], - "src": "1946:149:43" - }, - { - "body": { - "nativeSrc": "2475:961:43", - "nodeType": "YulBlock", - "src": "2475:961:43", - "statements": [ - { - "nativeSrc": "2485:33:43", - "nodeType": "YulVariableDeclaration", - "src": "2485:33:43", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "2503:9:43", - "nodeType": "YulIdentifier", - "src": "2503:9:43" - }, - { - "kind": "number", - "nativeSrc": "2514:3:43", - "nodeType": "YulLiteral", - "src": "2514:3:43", - "type": "", - "value": "160" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "2499:3:43", - "nodeType": "YulIdentifier", - "src": "2499:3:43" - }, - "nativeSrc": "2499:19:43", - "nodeType": "YulFunctionCall", - "src": "2499:19:43" - }, - "variables": [ - { - "name": "tail_1", - "nativeSrc": "2489:6:43", - "nodeType": "YulTypedName", - "src": "2489:6:43", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value0", - "nativeSrc": "2554:6:43", - "nodeType": "YulIdentifier", - "src": "2554:6:43" - }, - { - "name": "headStart", - "nativeSrc": "2562:9:43", - "nodeType": "YulIdentifier", - "src": "2562:9:43" - } - ], - "functionName": { - "name": "abi_encode_struct_OFTLimit", - "nativeSrc": "2527:26:43", - "nodeType": "YulIdentifier", - "src": "2527:26:43" - }, - "nativeSrc": "2527:45:43", - "nodeType": "YulFunctionCall", - "src": "2527:45:43" - }, - "nativeSrc": "2527:45:43", - "nodeType": "YulExpressionStatement", - "src": "2527:45:43" - }, - { - "nativeSrc": "2581:12:43", - "nodeType": "YulVariableDeclaration", - "src": "2581:12:43", - "value": { - "kind": "number", - "nativeSrc": "2591:2:43", - "nodeType": "YulLiteral", - "src": "2591:2:43", - "type": "", - "value": "64" - }, - "variables": [ - { - "name": "_1", - "nativeSrc": "2585:2:43", - "nodeType": "YulTypedName", - "src": "2585:2:43", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "2613:9:43", - "nodeType": "YulIdentifier", - "src": "2613:9:43" - }, - { - "kind": "number", - "nativeSrc": "2624:2:43", - "nodeType": "YulLiteral", - "src": "2624:2:43", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "2609:3:43", - "nodeType": "YulIdentifier", - "src": "2609:3:43" - }, - "nativeSrc": "2609:18:43", - "nodeType": "YulFunctionCall", - "src": "2609:18:43" - }, - { - "kind": "number", - "nativeSrc": "2629:3:43", - "nodeType": "YulLiteral", - "src": "2629:3:43", - "type": "", - "value": "160" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "2602:6:43", - "nodeType": "YulIdentifier", - "src": "2602:6:43" - }, - "nativeSrc": "2602:31:43", - "nodeType": "YulFunctionCall", - "src": "2602:31:43" - }, - "nativeSrc": "2602:31:43", - "nodeType": "YulExpressionStatement", - "src": "2602:31:43" - }, - { - "nativeSrc": "2642:17:43", - "nodeType": "YulVariableDeclaration", - "src": "2642:17:43", - "value": { - "name": "tail_1", - "nativeSrc": "2653:6:43", - "nodeType": "YulIdentifier", - "src": "2653:6:43" - }, - "variables": [ - { - "name": "pos", - "nativeSrc": "2646:3:43", - "nodeType": "YulTypedName", - "src": "2646:3:43", - "type": "" - } - ] - }, - { - "nativeSrc": "2668:27:43", - "nodeType": "YulVariableDeclaration", - "src": "2668:27:43", - "value": { - "arguments": [ - { - "name": "value1", - "nativeSrc": "2688:6:43", - "nodeType": "YulIdentifier", - "src": "2688:6:43" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "2682:5:43", - "nodeType": "YulIdentifier", - "src": "2682:5:43" - }, - "nativeSrc": "2682:13:43", - "nodeType": "YulFunctionCall", - "src": "2682:13:43" - }, - "variables": [ - { - "name": "length", - "nativeSrc": "2672:6:43", - "nodeType": "YulTypedName", - "src": "2672:6:43", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "tail_1", - "nativeSrc": "2711:6:43", - "nodeType": "YulIdentifier", - "src": "2711:6:43" - }, - { - "name": "length", - "nativeSrc": "2719:6:43", - "nodeType": "YulIdentifier", - "src": "2719:6:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "2704:6:43", - "nodeType": "YulIdentifier", - "src": "2704:6:43" - }, - "nativeSrc": "2704:22:43", - "nodeType": "YulFunctionCall", - "src": "2704:22:43" - }, - "nativeSrc": "2704:22:43", - "nodeType": "YulExpressionStatement", - "src": "2704:22:43" - }, - { - "nativeSrc": "2735:26:43", - "nodeType": "YulAssignment", - "src": "2735:26:43", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "2746:9:43", - "nodeType": "YulIdentifier", - "src": "2746:9:43" - }, - { - "kind": "number", - "nativeSrc": "2757:3:43", - "nodeType": "YulLiteral", - "src": "2757:3:43", - "type": "", - "value": "192" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "2742:3:43", - "nodeType": "YulIdentifier", - "src": "2742:3:43" - }, - "nativeSrc": "2742:19:43", - "nodeType": "YulFunctionCall", - "src": "2742:19:43" - }, - "variableNames": [ - { - "name": "pos", - "nativeSrc": "2735:3:43", - "nodeType": "YulIdentifier", - "src": "2735:3:43" - } - ] - }, - { - "nativeSrc": "2770:54:43", - "nodeType": "YulVariableDeclaration", - "src": "2770:54:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "2792:9:43", - "nodeType": "YulIdentifier", - "src": "2792:9:43" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "2807:1:43", - "nodeType": "YulLiteral", - "src": "2807:1:43", - "type": "", - "value": "5" - }, - { - "name": "length", - "nativeSrc": "2810:6:43", - "nodeType": "YulIdentifier", - "src": "2810:6:43" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "2803:3:43", - "nodeType": "YulIdentifier", - "src": "2803:3:43" - }, - "nativeSrc": "2803:14:43", - "nodeType": "YulFunctionCall", - "src": "2803:14:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "2788:3:43", - "nodeType": "YulIdentifier", - "src": "2788:3:43" - }, - "nativeSrc": "2788:30:43", - "nodeType": "YulFunctionCall", - "src": "2788:30:43" - }, - { - "kind": "number", - "nativeSrc": "2820:3:43", - "nodeType": "YulLiteral", - "src": "2820:3:43", - "type": "", - "value": "192" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "2784:3:43", - "nodeType": "YulIdentifier", - "src": "2784:3:43" - }, - "nativeSrc": "2784:40:43", - "nodeType": "YulFunctionCall", - "src": "2784:40:43" - }, - "variables": [ - { - "name": "tail_2", - "nativeSrc": "2774:6:43", - "nodeType": "YulTypedName", - "src": "2774:6:43", - "type": "" - } - ] - }, - { - "nativeSrc": "2833:14:43", - "nodeType": "YulVariableDeclaration", - "src": "2833:14:43", - "value": { - "kind": "number", - "nativeSrc": "2843:4:43", - "nodeType": "YulLiteral", - "src": "2843:4:43", - "type": "", - "value": "0x20" - }, - "variables": [ - { - "name": "_2", - "nativeSrc": "2837:2:43", - "nodeType": "YulTypedName", - "src": "2837:2:43", - "type": "" - } - ] - }, - { - "nativeSrc": "2856:31:43", - "nodeType": "YulVariableDeclaration", - "src": "2856:31:43", - "value": { - "arguments": [ - { - "name": "value1", - "nativeSrc": "2874:6:43", - "nodeType": "YulIdentifier", - "src": "2874:6:43" - }, - { - "kind": "number", - "nativeSrc": "2882:4:43", - "nodeType": "YulLiteral", - "src": "2882:4:43", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "2870:3:43", - "nodeType": "YulIdentifier", - "src": "2870:3:43" - }, - "nativeSrc": "2870:17:43", - "nodeType": "YulFunctionCall", - "src": "2870:17:43" - }, - "variables": [ - { - "name": "srcPtr", - "nativeSrc": "2860:6:43", - "nodeType": "YulTypedName", - "src": "2860:6:43", - "type": "" - } - ] - }, - { - "nativeSrc": "2896:10:43", - "nodeType": "YulVariableDeclaration", - "src": "2896:10:43", - "value": { - "kind": "number", - "nativeSrc": "2905:1:43", - "nodeType": "YulLiteral", - "src": "2905:1:43", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "i", - "nativeSrc": "2900:1:43", - "nodeType": "YulTypedName", - "src": "2900:1:43", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "2964:380:43", - "nodeType": "YulBlock", - "src": "2964:380:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "pos", - "nativeSrc": "2985:3:43", - "nodeType": "YulIdentifier", - "src": "2985:3:43" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "tail_2", - "nativeSrc": "2998:6:43", - "nodeType": "YulIdentifier", - "src": "2998:6:43" - }, - { - "name": "headStart", - "nativeSrc": "3006:9:43", - "nodeType": "YulIdentifier", - "src": "3006:9:43" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "2994:3:43", - "nodeType": "YulIdentifier", - "src": "2994:3:43" - }, - "nativeSrc": "2994:22:43", - "nodeType": "YulFunctionCall", - "src": "2994:22:43" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "3022:3:43", - "nodeType": "YulLiteral", - "src": "3022:3:43", - "type": "", - "value": "191" - } - ], - "functionName": { - "name": "not", - "nativeSrc": "3018:3:43", - "nodeType": "YulIdentifier", - "src": "3018:3:43" - }, - "nativeSrc": "3018:8:43", - "nodeType": "YulFunctionCall", - "src": "3018:8:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "2990:3:43", - "nodeType": "YulIdentifier", - "src": "2990:3:43" - }, - "nativeSrc": "2990:37:43", - "nodeType": "YulFunctionCall", - "src": "2990:37:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "2978:6:43", - "nodeType": "YulIdentifier", - "src": "2978:6:43" - }, - "nativeSrc": "2978:50:43", - "nodeType": "YulFunctionCall", - "src": "2978:50:43" - }, - "nativeSrc": "2978:50:43", - "nodeType": "YulExpressionStatement", - "src": "2978:50:43" - }, - { - "nativeSrc": "3041:23:43", - "nodeType": "YulVariableDeclaration", - "src": "3041:23:43", - "value": { - "arguments": [ - { - "name": "srcPtr", - "nativeSrc": "3057:6:43", - "nodeType": "YulIdentifier", - "src": "3057:6:43" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "3051:5:43", - "nodeType": "YulIdentifier", - "src": "3051:5:43" - }, - "nativeSrc": "3051:13:43", - "nodeType": "YulFunctionCall", - "src": "3051:13:43" - }, - "variables": [ - { - "name": "_3", - "nativeSrc": "3045:2:43", - "nodeType": "YulTypedName", - "src": "3045:2:43", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "tail_2", - "nativeSrc": "3084:6:43", - "nodeType": "YulIdentifier", - "src": "3084:6:43" - }, - { - "arguments": [ - { - "name": "_3", - "nativeSrc": "3098:2:43", - "nodeType": "YulIdentifier", - "src": "3098:2:43" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "3092:5:43", - "nodeType": "YulIdentifier", - "src": "3092:5:43" - }, - "nativeSrc": "3092:9:43", - "nodeType": "YulFunctionCall", - "src": "3092:9:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "3077:6:43", - "nodeType": "YulIdentifier", - "src": "3077:6:43" - }, - "nativeSrc": "3077:25:43", - "nodeType": "YulFunctionCall", - "src": "3077:25:43" - }, - "nativeSrc": "3077:25:43", - "nodeType": "YulExpressionStatement", - "src": "3077:25:43" - }, - { - "nativeSrc": "3115:38:43", - "nodeType": "YulVariableDeclaration", - "src": "3115:38:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "_3", - "nativeSrc": "3145:2:43", - "nodeType": "YulIdentifier", - "src": "3145:2:43" - }, - { - "name": "_2", - "nativeSrc": "3149:2:43", - "nodeType": "YulIdentifier", - "src": "3149:2:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "3141:3:43", - "nodeType": "YulIdentifier", - "src": "3141:3:43" - }, - "nativeSrc": "3141:11:43", - "nodeType": "YulFunctionCall", - "src": "3141:11:43" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "3135:5:43", - "nodeType": "YulIdentifier", - "src": "3135:5:43" - }, - "nativeSrc": "3135:18:43", - "nodeType": "YulFunctionCall", - "src": "3135:18:43" - }, - "variables": [ - { - "name": "memberValue0", - "nativeSrc": "3119:12:43", - "nodeType": "YulTypedName", - "src": "3119:12:43", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "tail_2", - "nativeSrc": "3177:6:43", - "nodeType": "YulIdentifier", - "src": "3177:6:43" - }, - { - "name": "_2", - "nativeSrc": "3185:2:43", - "nodeType": "YulIdentifier", - "src": "3185:2:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "3173:3:43", - "nodeType": "YulIdentifier", - "src": "3173:3:43" - }, - "nativeSrc": "3173:15:43", - "nodeType": "YulFunctionCall", - "src": "3173:15:43" - }, - { - "name": "_1", - "nativeSrc": "3190:2:43", - "nodeType": "YulIdentifier", - "src": "3190:2:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "3166:6:43", - "nodeType": "YulIdentifier", - "src": "3166:6:43" - }, - "nativeSrc": "3166:27:43", - "nodeType": "YulFunctionCall", - "src": "3166:27:43" - }, - "nativeSrc": "3166:27:43", - "nodeType": "YulExpressionStatement", - "src": "3166:27:43" - }, - { - "nativeSrc": "3206:58:43", - "nodeType": "YulAssignment", - "src": "3206:58:43", - "value": { - "arguments": [ - { - "name": "memberValue0", - "nativeSrc": "3234:12:43", - "nodeType": "YulIdentifier", - "src": "3234:12:43" - }, - { - "arguments": [ - { - "name": "tail_2", - "nativeSrc": "3252:6:43", - "nodeType": "YulIdentifier", - "src": "3252:6:43" - }, - { - "name": "_1", - "nativeSrc": "3260:2:43", - "nodeType": "YulIdentifier", - "src": "3260:2:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "3248:3:43", - "nodeType": "YulIdentifier", - "src": "3248:3:43" - }, - "nativeSrc": "3248:15:43", - "nodeType": "YulFunctionCall", - "src": "3248:15:43" - } - ], - "functionName": { - "name": "abi_encode_string", - "nativeSrc": "3216:17:43", - "nodeType": "YulIdentifier", - "src": "3216:17:43" - }, - "nativeSrc": "3216:48:43", - "nodeType": "YulFunctionCall", - "src": "3216:48:43" - }, - "variableNames": [ - { - "name": "tail_2", - "nativeSrc": "3206:6:43", - "nodeType": "YulIdentifier", - "src": "3206:6:43" - } - ] - }, - { - "nativeSrc": "3277:25:43", - "nodeType": "YulAssignment", - "src": "3277:25:43", - "value": { - "arguments": [ - { - "name": "srcPtr", - "nativeSrc": "3291:6:43", - "nodeType": "YulIdentifier", - "src": "3291:6:43" - }, - { - "name": "_2", - "nativeSrc": "3299:2:43", - "nodeType": "YulIdentifier", - "src": "3299:2:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "3287:3:43", - "nodeType": "YulIdentifier", - "src": "3287:3:43" - }, - "nativeSrc": "3287:15:43", - "nodeType": "YulFunctionCall", - "src": "3287:15:43" - }, - "variableNames": [ - { - "name": "srcPtr", - "nativeSrc": "3277:6:43", - "nodeType": "YulIdentifier", - "src": "3277:6:43" - } - ] - }, - { - "nativeSrc": "3315:19:43", - "nodeType": "YulAssignment", - "src": "3315:19:43", - "value": { - "arguments": [ - { - "name": "pos", - "nativeSrc": "3326:3:43", - "nodeType": "YulIdentifier", - "src": "3326:3:43" - }, - { - "name": "_2", - "nativeSrc": "3331:2:43", - "nodeType": "YulIdentifier", - "src": "3331:2:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "3322:3:43", - "nodeType": "YulIdentifier", - "src": "3322:3:43" - }, - "nativeSrc": "3322:12:43", - "nodeType": "YulFunctionCall", - "src": "3322:12:43" - }, - "variableNames": [ - { - "name": "pos", - "nativeSrc": "3315:3:43", - "nodeType": "YulIdentifier", - "src": "3315:3:43" - } - ] - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nativeSrc": "2926:1:43", - "nodeType": "YulIdentifier", - "src": "2926:1:43" - }, - { - "name": "length", - "nativeSrc": "2929:6:43", - "nodeType": "YulIdentifier", - "src": "2929:6:43" - } - ], - "functionName": { - "name": "lt", - "nativeSrc": "2923:2:43", - "nodeType": "YulIdentifier", - "src": "2923:2:43" - }, - "nativeSrc": "2923:13:43", - "nodeType": "YulFunctionCall", - "src": "2923:13:43" - }, - "nativeSrc": "2915:429:43", - "nodeType": "YulForLoop", - "post": { - "nativeSrc": "2937:18:43", - "nodeType": "YulBlock", - "src": "2937:18:43", - "statements": [ - { - "nativeSrc": "2939:14:43", - "nodeType": "YulAssignment", - "src": "2939:14:43", - "value": { - "arguments": [ - { - "name": "i", - "nativeSrc": "2948:1:43", - "nodeType": "YulIdentifier", - "src": "2948:1:43" - }, - { - "kind": "number", - "nativeSrc": "2951:1:43", - "nodeType": "YulLiteral", - "src": "2951:1:43", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "2944:3:43", - "nodeType": "YulIdentifier", - "src": "2944:3:43" - }, - "nativeSrc": "2944:9:43", - "nodeType": "YulFunctionCall", - "src": "2944:9:43" - }, - "variableNames": [ - { - "name": "i", - "nativeSrc": "2939:1:43", - "nodeType": "YulIdentifier", - "src": "2939:1:43" - } - ] - } - ] - }, - "pre": { - "nativeSrc": "2919:3:43", - "nodeType": "YulBlock", - "src": "2919:3:43", - "statements": [] - }, - "src": "2915:429:43" - }, - { - "nativeSrc": "3353:14:43", - "nodeType": "YulAssignment", - "src": "3353:14:43", - "value": { - "name": "tail_2", - "nativeSrc": "3361:6:43", - "nodeType": "YulIdentifier", - "src": "3361:6:43" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "3353:4:43", - "nodeType": "YulIdentifier", - "src": "3353:4:43" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value2", - "nativeSrc": "3403:6:43", - "nodeType": "YulIdentifier", - "src": "3403:6:43" - }, - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "3415:9:43", - "nodeType": "YulIdentifier", - "src": "3415:9:43" - }, - { - "kind": "number", - "nativeSrc": "3426:2:43", - "nodeType": "YulLiteral", - "src": "3426:2:43", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "3411:3:43", - "nodeType": "YulIdentifier", - "src": "3411:3:43" - }, - "nativeSrc": "3411:18:43", - "nodeType": "YulFunctionCall", - "src": "3411:18:43" - } - ], - "functionName": { - "name": "abi_encode_struct_OFTLimit", - "nativeSrc": "3376:26:43", - "nodeType": "YulIdentifier", - "src": "3376:26:43" - }, - "nativeSrc": "3376:54:43", - "nodeType": "YulFunctionCall", - "src": "3376:54:43" - }, - "nativeSrc": "3376:54:43", - "nodeType": "YulExpressionStatement", - "src": "3376:54:43" - } - ] - }, - "name": "abi_encode_tuple_t_struct$_OFTLimit_$3388_memory_ptr_t_array$_t_struct$_OFTFeeDetail_$3400_memory_ptr_$dyn_memory_ptr_t_struct$_OFTReceipt_$3394_memory_ptr__to_t_struct$_OFTLimit_$3388_memory_ptr_t_array$_t_struct$_OFTFeeDetail_$3400_memory_ptr_$dyn_memory_ptr_t_struct$_OFTReceipt_$3394_memory_ptr__fromStack_reversed", - "nativeSrc": "2100:1336:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "2428:9:43", - "nodeType": "YulTypedName", - "src": "2428:9:43", - "type": "" - }, - { - "name": "value2", - "nativeSrc": "2439:6:43", - "nodeType": "YulTypedName", - "src": "2439:6:43", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "2447:6:43", - "nodeType": "YulTypedName", - "src": "2447:6:43", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "2455:6:43", - "nodeType": "YulTypedName", - "src": "2455:6:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "2466:4:43", - "nodeType": "YulTypedName", - "src": "2466:4:43", - "type": "" - } - ], - "src": "2100:1336:43" - }, - { - "body": { - "nativeSrc": "3542:102:43", - "nodeType": "YulBlock", - "src": "3542:102:43", - "statements": [ - { - "nativeSrc": "3552:26:43", - "nodeType": "YulAssignment", - "src": "3552:26:43", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "3564:9:43", - "nodeType": "YulIdentifier", - "src": "3564:9:43" - }, - { - "kind": "number", - "nativeSrc": "3575:2:43", - "nodeType": "YulLiteral", - "src": "3575:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "3560:3:43", - "nodeType": "YulIdentifier", - "src": "3560:3:43" - }, - "nativeSrc": "3560:18:43", - "nodeType": "YulFunctionCall", - "src": "3560:18:43" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "3552:4:43", - "nodeType": "YulIdentifier", - "src": "3552:4:43" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "3594:9:43", - "nodeType": "YulIdentifier", - "src": "3594:9:43" - }, - { - "arguments": [ - { - "name": "value0", - "nativeSrc": "3609:6:43", - "nodeType": "YulIdentifier", - "src": "3609:6:43" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "3625:3:43", - "nodeType": "YulLiteral", - "src": "3625:3:43", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nativeSrc": "3630:1:43", - "nodeType": "YulLiteral", - "src": "3630:1:43", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "3621:3:43", - "nodeType": "YulIdentifier", - "src": "3621:3:43" - }, - "nativeSrc": "3621:11:43", - "nodeType": "YulFunctionCall", - "src": "3621:11:43" - }, - { - "kind": "number", - "nativeSrc": "3634:1:43", - "nodeType": "YulLiteral", - "src": "3634:1:43", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "3617:3:43", - "nodeType": "YulIdentifier", - "src": "3617:3:43" - }, - "nativeSrc": "3617:19:43", - "nodeType": "YulFunctionCall", - "src": "3617:19:43" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "3605:3:43", - "nodeType": "YulIdentifier", - "src": "3605:3:43" - }, - "nativeSrc": "3605:32:43", - "nodeType": "YulFunctionCall", - "src": "3605:32:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "3587:6:43", - "nodeType": "YulIdentifier", - "src": "3587:6:43" - }, - "nativeSrc": "3587:51:43", - "nodeType": "YulFunctionCall", - "src": "3587:51:43" - }, - "nativeSrc": "3587:51:43", - "nodeType": "YulExpressionStatement", - "src": "3587:51:43" - } - ] - }, - "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed", - "nativeSrc": "3441:203:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "3511:9:43", - "nodeType": "YulTypedName", - "src": "3511:9:43", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "3522:6:43", - "nodeType": "YulTypedName", - "src": "3522:6:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "3533:4:43", - "nodeType": "YulTypedName", - "src": "3533:4:43", - "type": "" - } - ], - "src": "3441:203:43" - }, - { - "body": { - "nativeSrc": "3718:85:43", - "nodeType": "YulBlock", - "src": "3718:85:43", - "statements": [ - { - "body": { - "nativeSrc": "3757:16:43", - "nodeType": "YulBlock", - "src": "3757:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "3766:1:43", - "nodeType": "YulLiteral", - "src": "3766:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "3769:1:43", - "nodeType": "YulLiteral", - "src": "3769:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "3759:6:43", - "nodeType": "YulIdentifier", - "src": "3759:6:43" - }, - "nativeSrc": "3759:12:43", - "nodeType": "YulFunctionCall", - "src": "3759:12:43" - }, - "nativeSrc": "3759:12:43", - "nodeType": "YulExpressionStatement", - "src": "3759:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "end", - "nativeSrc": "3739:3:43", - "nodeType": "YulIdentifier", - "src": "3739:3:43" - }, - { - "name": "offset", - "nativeSrc": "3744:6:43", - "nodeType": "YulIdentifier", - "src": "3744:6:43" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "3735:3:43", - "nodeType": "YulIdentifier", - "src": "3735:3:43" - }, - "nativeSrc": "3735:16:43", - "nodeType": "YulFunctionCall", - "src": "3735:16:43" - }, - { - "kind": "number", - "nativeSrc": "3753:2:43", - "nodeType": "YulLiteral", - "src": "3753:2:43", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "3731:3:43", - "nodeType": "YulIdentifier", - "src": "3731:3:43" - }, - "nativeSrc": "3731:25:43", - "nodeType": "YulFunctionCall", - "src": "3731:25:43" - }, - "nativeSrc": "3728:45:43", - "nodeType": "YulIf", - "src": "3728:45:43" - }, - { - "nativeSrc": "3782:15:43", - "nodeType": "YulAssignment", - "src": "3782:15:43", - "value": { - "name": "offset", - "nativeSrc": "3791:6:43", - "nodeType": "YulIdentifier", - "src": "3791:6:43" - }, - "variableNames": [ - { - "name": "value", - "nativeSrc": "3782:5:43", - "nodeType": "YulIdentifier", - "src": "3782:5:43" - } - ] - } - ] - }, - "name": "abi_decode_struct_Origin_calldata", - "nativeSrc": "3649:154:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "offset", - "nativeSrc": "3692:6:43", - "nodeType": "YulTypedName", - "src": "3692:6:43", - "type": "" - }, - { - "name": "end", - "nativeSrc": "3700:3:43", - "nodeType": "YulTypedName", - "src": "3700:3:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value", - "nativeSrc": "3708:5:43", - "nodeType": "YulTypedName", - "src": "3708:5:43", - "type": "" - } - ], - "src": "3649:154:43" - }, - { - "body": { - "nativeSrc": "3880:275:43", - "nodeType": "YulBlock", - "src": "3880:275:43", - "statements": [ - { - "body": { - "nativeSrc": "3929:16:43", - "nodeType": "YulBlock", - "src": "3929:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "3938:1:43", - "nodeType": "YulLiteral", - "src": "3938:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "3941:1:43", - "nodeType": "YulLiteral", - "src": "3941:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "3931:6:43", - "nodeType": "YulIdentifier", - "src": "3931:6:43" - }, - "nativeSrc": "3931:12:43", - "nodeType": "YulFunctionCall", - "src": "3931:12:43" - }, - "nativeSrc": "3931:12:43", - "nodeType": "YulExpressionStatement", - "src": "3931:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "offset", - "nativeSrc": "3908:6:43", - "nodeType": "YulIdentifier", - "src": "3908:6:43" - }, - { - "kind": "number", - "nativeSrc": "3916:4:43", - "nodeType": "YulLiteral", - "src": "3916:4:43", - "type": "", - "value": "0x1f" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "3904:3:43", - "nodeType": "YulIdentifier", - "src": "3904:3:43" - }, - "nativeSrc": "3904:17:43", - "nodeType": "YulFunctionCall", - "src": "3904:17:43" - }, - { - "name": "end", - "nativeSrc": "3923:3:43", - "nodeType": "YulIdentifier", - "src": "3923:3:43" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "3900:3:43", - "nodeType": "YulIdentifier", - "src": "3900:3:43" - }, - "nativeSrc": "3900:27:43", - "nodeType": "YulFunctionCall", - "src": "3900:27:43" - } - ], - "functionName": { - "name": "iszero", - "nativeSrc": "3893:6:43", - "nodeType": "YulIdentifier", - "src": "3893:6:43" - }, - "nativeSrc": "3893:35:43", - "nodeType": "YulFunctionCall", - "src": "3893:35:43" - }, - "nativeSrc": "3890:55:43", - "nodeType": "YulIf", - "src": "3890:55:43" - }, - { - "nativeSrc": "3954:30:43", - "nodeType": "YulAssignment", - "src": "3954:30:43", - "value": { - "arguments": [ - { - "name": "offset", - "nativeSrc": "3977:6:43", - "nodeType": "YulIdentifier", - "src": "3977:6:43" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "3964:12:43", - "nodeType": "YulIdentifier", - "src": "3964:12:43" - }, - "nativeSrc": "3964:20:43", - "nodeType": "YulFunctionCall", - "src": "3964:20:43" - }, - "variableNames": [ - { - "name": "length", - "nativeSrc": "3954:6:43", - "nodeType": "YulIdentifier", - "src": "3954:6:43" - } - ] - }, - { - "body": { - "nativeSrc": "4027:16:43", - "nodeType": "YulBlock", - "src": "4027:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "4036:1:43", - "nodeType": "YulLiteral", - "src": "4036:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "4039:1:43", - "nodeType": "YulLiteral", - "src": "4039:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "4029:6:43", - "nodeType": "YulIdentifier", - "src": "4029:6:43" - }, - "nativeSrc": "4029:12:43", - "nodeType": "YulFunctionCall", - "src": "4029:12:43" - }, - "nativeSrc": "4029:12:43", - "nodeType": "YulExpressionStatement", - "src": "4029:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "length", - "nativeSrc": "3999:6:43", - "nodeType": "YulIdentifier", - "src": "3999:6:43" - }, - { - "kind": "number", - "nativeSrc": "4007:18:43", - "nodeType": "YulLiteral", - "src": "4007:18:43", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "3996:2:43", - "nodeType": "YulIdentifier", - "src": "3996:2:43" - }, - "nativeSrc": "3996:30:43", - "nodeType": "YulFunctionCall", - "src": "3996:30:43" - }, - "nativeSrc": "3993:50:43", - "nodeType": "YulIf", - "src": "3993:50:43" - }, - { - "nativeSrc": "4052:29:43", - "nodeType": "YulAssignment", - "src": "4052:29:43", - "value": { - "arguments": [ - { - "name": "offset", - "nativeSrc": "4068:6:43", - "nodeType": "YulIdentifier", - "src": "4068:6:43" - }, - { - "kind": "number", - "nativeSrc": "4076:4:43", - "nodeType": "YulLiteral", - "src": "4076:4:43", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "4064:3:43", - "nodeType": "YulIdentifier", - "src": "4064:3:43" - }, - "nativeSrc": "4064:17:43", - "nodeType": "YulFunctionCall", - "src": "4064:17:43" - }, - "variableNames": [ - { - "name": "arrayPos", - "nativeSrc": "4052:8:43", - "nodeType": "YulIdentifier", - "src": "4052:8:43" - } - ] - }, - { - "body": { - "nativeSrc": "4133:16:43", - "nodeType": "YulBlock", - "src": "4133:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "4142:1:43", - "nodeType": "YulLiteral", - "src": "4142:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "4145:1:43", - "nodeType": "YulLiteral", - "src": "4145:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "4135:6:43", - "nodeType": "YulIdentifier", - "src": "4135:6:43" - }, - "nativeSrc": "4135:12:43", - "nodeType": "YulFunctionCall", - "src": "4135:12:43" - }, - "nativeSrc": "4135:12:43", - "nodeType": "YulExpressionStatement", - "src": "4135:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "offset", - "nativeSrc": "4104:6:43", - "nodeType": "YulIdentifier", - "src": "4104:6:43" - }, - { - "name": "length", - "nativeSrc": "4112:6:43", - "nodeType": "YulIdentifier", - "src": "4112:6:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "4100:3:43", - "nodeType": "YulIdentifier", - "src": "4100:3:43" - }, - "nativeSrc": "4100:19:43", - "nodeType": "YulFunctionCall", - "src": "4100:19:43" - }, - { - "kind": "number", - "nativeSrc": "4121:4:43", - "nodeType": "YulLiteral", - "src": "4121:4:43", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "4096:3:43", - "nodeType": "YulIdentifier", - "src": "4096:3:43" - }, - "nativeSrc": "4096:30:43", - "nodeType": "YulFunctionCall", - "src": "4096:30:43" - }, - { - "name": "end", - "nativeSrc": "4128:3:43", - "nodeType": "YulIdentifier", - "src": "4128:3:43" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "4093:2:43", - "nodeType": "YulIdentifier", - "src": "4093:2:43" - }, - "nativeSrc": "4093:39:43", - "nodeType": "YulFunctionCall", - "src": "4093:39:43" - }, - "nativeSrc": "4090:59:43", - "nodeType": "YulIf", - "src": "4090:59:43" - } - ] - }, - "name": "abi_decode_bytes_calldata", - "nativeSrc": "3808:347:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "offset", - "nativeSrc": "3843:6:43", - "nodeType": "YulTypedName", - "src": "3843:6:43", - "type": "" - }, - { - "name": "end", - "nativeSrc": "3851:3:43", - "nodeType": "YulTypedName", - "src": "3851:3:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "arrayPos", - "nativeSrc": "3859:8:43", - "nodeType": "YulTypedName", - "src": "3859:8:43", - "type": "" - }, - { - "name": "length", - "nativeSrc": "3869:6:43", - "nodeType": "YulTypedName", - "src": "3869:6:43", - "type": "" - } - ], - "src": "3808:347:43" - }, - { - "body": { - "nativeSrc": "4360:846:43", - "nodeType": "YulBlock", - "src": "4360:846:43", - "statements": [ - { - "body": { - "nativeSrc": "4407:16:43", - "nodeType": "YulBlock", - "src": "4407:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "4416:1:43", - "nodeType": "YulLiteral", - "src": "4416:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "4419:1:43", - "nodeType": "YulLiteral", - "src": "4419:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "4409:6:43", - "nodeType": "YulIdentifier", - "src": "4409:6:43" - }, - "nativeSrc": "4409:12:43", - "nodeType": "YulFunctionCall", - "src": "4409:12:43" - }, - "nativeSrc": "4409:12:43", - "nodeType": "YulExpressionStatement", - "src": "4409:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nativeSrc": "4381:7:43", - "nodeType": "YulIdentifier", - "src": "4381:7:43" - }, - { - "name": "headStart", - "nativeSrc": "4390:9:43", - "nodeType": "YulIdentifier", - "src": "4390:9:43" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "4377:3:43", - "nodeType": "YulIdentifier", - "src": "4377:3:43" - }, - "nativeSrc": "4377:23:43", - "nodeType": "YulFunctionCall", - "src": "4377:23:43" - }, - { - "kind": "number", - "nativeSrc": "4402:3:43", - "nodeType": "YulLiteral", - "src": "4402:3:43", - "type": "", - "value": "224" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "4373:3:43", - "nodeType": "YulIdentifier", - "src": "4373:3:43" - }, - "nativeSrc": "4373:33:43", - "nodeType": "YulFunctionCall", - "src": "4373:33:43" - }, - "nativeSrc": "4370:53:43", - "nodeType": "YulIf", - "src": "4370:53:43" - }, - { - "nativeSrc": "4432:63:43", - "nodeType": "YulAssignment", - "src": "4432:63:43", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "4476:9:43", - "nodeType": "YulIdentifier", - "src": "4476:9:43" - }, - { - "name": "dataEnd", - "nativeSrc": "4487:7:43", - "nodeType": "YulIdentifier", - "src": "4487:7:43" - } - ], - "functionName": { - "name": "abi_decode_struct_Origin_calldata", - "nativeSrc": "4442:33:43", - "nodeType": "YulIdentifier", - "src": "4442:33:43" - }, - "nativeSrc": "4442:53:43", - "nodeType": "YulFunctionCall", - "src": "4442:53:43" - }, - "variableNames": [ - { - "name": "value0", - "nativeSrc": "4432:6:43", - "nodeType": "YulIdentifier", - "src": "4432:6:43" - } - ] - }, - { - "nativeSrc": "4504:42:43", - "nodeType": "YulAssignment", - "src": "4504:42:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "4531:9:43", - "nodeType": "YulIdentifier", - "src": "4531:9:43" - }, - { - "kind": "number", - "nativeSrc": "4542:2:43", - "nodeType": "YulLiteral", - "src": "4542:2:43", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "4527:3:43", - "nodeType": "YulIdentifier", - "src": "4527:3:43" - }, - "nativeSrc": "4527:18:43", - "nodeType": "YulFunctionCall", - "src": "4527:18:43" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "4514:12:43", - "nodeType": "YulIdentifier", - "src": "4514:12:43" - }, - "nativeSrc": "4514:32:43", - "nodeType": "YulFunctionCall", - "src": "4514:32:43" - }, - "variableNames": [ - { - "name": "value1", - "nativeSrc": "4504:6:43", - "nodeType": "YulIdentifier", - "src": "4504:6:43" - } - ] - }, - { - "nativeSrc": "4555:47:43", - "nodeType": "YulVariableDeclaration", - "src": "4555:47:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "4586:9:43", - "nodeType": "YulIdentifier", - "src": "4586:9:43" - }, - { - "kind": "number", - "nativeSrc": "4597:3:43", - "nodeType": "YulLiteral", - "src": "4597:3:43", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "4582:3:43", - "nodeType": "YulIdentifier", - "src": "4582:3:43" - }, - "nativeSrc": "4582:19:43", - "nodeType": "YulFunctionCall", - "src": "4582:19:43" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "4569:12:43", - "nodeType": "YulIdentifier", - "src": "4569:12:43" - }, - "nativeSrc": "4569:33:43", - "nodeType": "YulFunctionCall", - "src": "4569:33:43" - }, - "variables": [ - { - "name": "offset", - "nativeSrc": "4559:6:43", - "nodeType": "YulTypedName", - "src": "4559:6:43", - "type": "" - } - ] - }, - { - "nativeSrc": "4611:28:43", - "nodeType": "YulVariableDeclaration", - "src": "4611:28:43", - "value": { - "kind": "number", - "nativeSrc": "4621:18:43", - "nodeType": "YulLiteral", - "src": "4621:18:43", - "type": "", - "value": "0xffffffffffffffff" - }, - "variables": [ - { - "name": "_1", - "nativeSrc": "4615:2:43", - "nodeType": "YulTypedName", - "src": "4615:2:43", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "4666:16:43", - "nodeType": "YulBlock", - "src": "4666:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "4675:1:43", - "nodeType": "YulLiteral", - "src": "4675:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "4678:1:43", - "nodeType": "YulLiteral", - "src": "4678:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "4668:6:43", - "nodeType": "YulIdentifier", - "src": "4668:6:43" - }, - "nativeSrc": "4668:12:43", - "nodeType": "YulFunctionCall", - "src": "4668:12:43" - }, - "nativeSrc": "4668:12:43", - "nodeType": "YulExpressionStatement", - "src": "4668:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "offset", - "nativeSrc": "4654:6:43", - "nodeType": "YulIdentifier", - "src": "4654:6:43" - }, - { - "name": "_1", - "nativeSrc": "4662:2:43", - "nodeType": "YulIdentifier", - "src": "4662:2:43" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "4651:2:43", - "nodeType": "YulIdentifier", - "src": "4651:2:43" - }, - "nativeSrc": "4651:14:43", - "nodeType": "YulFunctionCall", - "src": "4651:14:43" - }, - "nativeSrc": "4648:34:43", - "nodeType": "YulIf", - "src": "4648:34:43" - }, - { - "nativeSrc": "4691:84:43", - "nodeType": "YulVariableDeclaration", - "src": "4691:84:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "4747:9:43", - "nodeType": "YulIdentifier", - "src": "4747:9:43" - }, - { - "name": "offset", - "nativeSrc": "4758:6:43", - "nodeType": "YulIdentifier", - "src": "4758:6:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "4743:3:43", - "nodeType": "YulIdentifier", - "src": "4743:3:43" - }, - "nativeSrc": "4743:22:43", - "nodeType": "YulFunctionCall", - "src": "4743:22:43" - }, - { - "name": "dataEnd", - "nativeSrc": "4767:7:43", - "nodeType": "YulIdentifier", - "src": "4767:7:43" - } - ], - "functionName": { - "name": "abi_decode_bytes_calldata", - "nativeSrc": "4717:25:43", - "nodeType": "YulIdentifier", - "src": "4717:25:43" - }, - "nativeSrc": "4717:58:43", - "nodeType": "YulFunctionCall", - "src": "4717:58:43" - }, - "variables": [ - { - "name": "value2_1", - "nativeSrc": "4695:8:43", - "nodeType": "YulTypedName", - "src": "4695:8:43", - "type": "" - }, - { - "name": "value3_1", - "nativeSrc": "4705:8:43", - "nodeType": "YulTypedName", - "src": "4705:8:43", - "type": "" - } - ] - }, - { - "nativeSrc": "4784:18:43", - "nodeType": "YulAssignment", - "src": "4784:18:43", - "value": { - "name": "value2_1", - "nativeSrc": "4794:8:43", - "nodeType": "YulIdentifier", - "src": "4794:8:43" - }, - "variableNames": [ - { - "name": "value2", - "nativeSrc": "4784:6:43", - "nodeType": "YulIdentifier", - "src": "4784:6:43" - } - ] - }, - { - "nativeSrc": "4811:18:43", - "nodeType": "YulAssignment", - "src": "4811:18:43", - "value": { - "name": "value3_1", - "nativeSrc": "4821:8:43", - "nodeType": "YulIdentifier", - "src": "4821:8:43" - }, - "variableNames": [ - { - "name": "value3", - "nativeSrc": "4811:6:43", - "nodeType": "YulIdentifier", - "src": "4811:6:43" - } - ] - }, - { - "nativeSrc": "4838:46:43", - "nodeType": "YulVariableDeclaration", - "src": "4838:46:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "4868:9:43", - "nodeType": "YulIdentifier", - "src": "4868:9:43" - }, - { - "kind": "number", - "nativeSrc": "4879:3:43", - "nodeType": "YulLiteral", - "src": "4879:3:43", - "type": "", - "value": "160" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "4864:3:43", - "nodeType": "YulIdentifier", - "src": "4864:3:43" - }, - "nativeSrc": "4864:19:43", - "nodeType": "YulFunctionCall", - "src": "4864:19:43" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "4851:12:43", - "nodeType": "YulIdentifier", - "src": "4851:12:43" - }, - "nativeSrc": "4851:33:43", - "nodeType": "YulFunctionCall", - "src": "4851:33:43" - }, - "variables": [ - { - "name": "value", - "nativeSrc": "4842:5:43", - "nodeType": "YulTypedName", - "src": "4842:5:43", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nativeSrc": "4918:5:43", - "nodeType": "YulIdentifier", - "src": "4918:5:43" - } - ], - "functionName": { - "name": "validator_revert_address", - "nativeSrc": "4893:24:43", - "nodeType": "YulIdentifier", - "src": "4893:24:43" - }, - "nativeSrc": "4893:31:43", - "nodeType": "YulFunctionCall", - "src": "4893:31:43" - }, - "nativeSrc": "4893:31:43", - "nodeType": "YulExpressionStatement", - "src": "4893:31:43" - }, - { - "nativeSrc": "4933:15:43", - "nodeType": "YulAssignment", - "src": "4933:15:43", - "value": { - "name": "value", - "nativeSrc": "4943:5:43", - "nodeType": "YulIdentifier", - "src": "4943:5:43" - }, - "variableNames": [ - { - "name": "value4", - "nativeSrc": "4933:6:43", - "nodeType": "YulIdentifier", - "src": "4933:6:43" - } - ] - }, - { - "nativeSrc": "4957:49:43", - "nodeType": "YulVariableDeclaration", - "src": "4957:49:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "4990:9:43", - "nodeType": "YulIdentifier", - "src": "4990:9:43" - }, - { - "kind": "number", - "nativeSrc": "5001:3:43", - "nodeType": "YulLiteral", - "src": "5001:3:43", - "type": "", - "value": "192" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "4986:3:43", - "nodeType": "YulIdentifier", - "src": "4986:3:43" - }, - "nativeSrc": "4986:19:43", - "nodeType": "YulFunctionCall", - "src": "4986:19:43" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "4973:12:43", - "nodeType": "YulIdentifier", - "src": "4973:12:43" - }, - "nativeSrc": "4973:33:43", - "nodeType": "YulFunctionCall", - "src": "4973:33:43" - }, - "variables": [ - { - "name": "offset_1", - "nativeSrc": "4961:8:43", - "nodeType": "YulTypedName", - "src": "4961:8:43", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "5035:16:43", - "nodeType": "YulBlock", - "src": "5035:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "5044:1:43", - "nodeType": "YulLiteral", - "src": "5044:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "5047:1:43", - "nodeType": "YulLiteral", - "src": "5047:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "5037:6:43", - "nodeType": "YulIdentifier", - "src": "5037:6:43" - }, - "nativeSrc": "5037:12:43", - "nodeType": "YulFunctionCall", - "src": "5037:12:43" - }, - "nativeSrc": "5037:12:43", - "nodeType": "YulExpressionStatement", - "src": "5037:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "offset_1", - "nativeSrc": "5021:8:43", - "nodeType": "YulIdentifier", - "src": "5021:8:43" - }, - { - "name": "_1", - "nativeSrc": "5031:2:43", - "nodeType": "YulIdentifier", - "src": "5031:2:43" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "5018:2:43", - "nodeType": "YulIdentifier", - "src": "5018:2:43" - }, - "nativeSrc": "5018:16:43", - "nodeType": "YulFunctionCall", - "src": "5018:16:43" - }, - "nativeSrc": "5015:36:43", - "nodeType": "YulIf", - "src": "5015:36:43" - }, - { - "nativeSrc": "5060:86:43", - "nodeType": "YulVariableDeclaration", - "src": "5060:86:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "5116:9:43", - "nodeType": "YulIdentifier", - "src": "5116:9:43" - }, - { - "name": "offset_1", - "nativeSrc": "5127:8:43", - "nodeType": "YulIdentifier", - "src": "5127:8:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "5112:3:43", - "nodeType": "YulIdentifier", - "src": "5112:3:43" - }, - "nativeSrc": "5112:24:43", - "nodeType": "YulFunctionCall", - "src": "5112:24:43" - }, - { - "name": "dataEnd", - "nativeSrc": "5138:7:43", - "nodeType": "YulIdentifier", - "src": "5138:7:43" - } - ], - "functionName": { - "name": "abi_decode_bytes_calldata", - "nativeSrc": "5086:25:43", - "nodeType": "YulIdentifier", - "src": "5086:25:43" - }, - "nativeSrc": "5086:60:43", - "nodeType": "YulFunctionCall", - "src": "5086:60:43" - }, - "variables": [ - { - "name": "value5_1", - "nativeSrc": "5064:8:43", - "nodeType": "YulTypedName", - "src": "5064:8:43", - "type": "" - }, - { - "name": "value6_1", - "nativeSrc": "5074:8:43", - "nodeType": "YulTypedName", - "src": "5074:8:43", - "type": "" - } - ] - }, - { - "nativeSrc": "5155:18:43", - "nodeType": "YulAssignment", - "src": "5155:18:43", - "value": { - "name": "value5_1", - "nativeSrc": "5165:8:43", - "nodeType": "YulIdentifier", - "src": "5165:8:43" - }, - "variableNames": [ - { - "name": "value5", - "nativeSrc": "5155:6:43", - "nodeType": "YulIdentifier", - "src": "5155:6:43" - } - ] - }, - { - "nativeSrc": "5182:18:43", - "nodeType": "YulAssignment", - "src": "5182:18:43", - "value": { - "name": "value6_1", - "nativeSrc": "5192:8:43", - "nodeType": "YulIdentifier", - "src": "5192:8:43" - }, - "variableNames": [ - { - "name": "value6", - "nativeSrc": "5182:6:43", - "nodeType": "YulIdentifier", - "src": "5182:6:43" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_struct$_Origin_$40_calldata_ptrt_bytes32t_bytes_calldata_ptrt_addresst_bytes_calldata_ptr", - "nativeSrc": "4160:1046:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "4278:9:43", - "nodeType": "YulTypedName", - "src": "4278:9:43", - "type": "" - }, - { - "name": "dataEnd", - "nativeSrc": "4289:7:43", - "nodeType": "YulTypedName", - "src": "4289:7:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nativeSrc": "4301:6:43", - "nodeType": "YulTypedName", - "src": "4301:6:43", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "4309:6:43", - "nodeType": "YulTypedName", - "src": "4309:6:43", - "type": "" - }, - { - "name": "value2", - "nativeSrc": "4317:6:43", - "nodeType": "YulTypedName", - "src": "4317:6:43", - "type": "" - }, - { - "name": "value3", - "nativeSrc": "4325:6:43", - "nodeType": "YulTypedName", - "src": "4325:6:43", - "type": "" - }, - { - "name": "value4", - "nativeSrc": "4333:6:43", - "nodeType": "YulTypedName", - "src": "4333:6:43", - "type": "" - }, - { - "name": "value5", - "nativeSrc": "4341:6:43", - "nodeType": "YulTypedName", - "src": "4341:6:43", - "type": "" - }, - { - "name": "value6", - "nativeSrc": "4349:6:43", - "nodeType": "YulTypedName", - "src": "4349:6:43", - "type": "" - } - ], - "src": "4160:1046:43" - }, - { - "body": { - "nativeSrc": "5310:89:43", - "nodeType": "YulBlock", - "src": "5310:89:43", - "statements": [ - { - "nativeSrc": "5320:26:43", - "nodeType": "YulAssignment", - "src": "5320:26:43", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "5332:9:43", - "nodeType": "YulIdentifier", - "src": "5332:9:43" - }, - { - "kind": "number", - "nativeSrc": "5343:2:43", - "nodeType": "YulLiteral", - "src": "5343:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "5328:3:43", - "nodeType": "YulIdentifier", - "src": "5328:3:43" - }, - "nativeSrc": "5328:18:43", - "nodeType": "YulFunctionCall", - "src": "5328:18:43" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "5320:4:43", - "nodeType": "YulIdentifier", - "src": "5320:4:43" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "5362:9:43", - "nodeType": "YulIdentifier", - "src": "5362:9:43" - }, - { - "arguments": [ - { - "name": "value0", - "nativeSrc": "5377:6:43", - "nodeType": "YulIdentifier", - "src": "5377:6:43" - }, - { - "kind": "number", - "nativeSrc": "5385:6:43", - "nodeType": "YulLiteral", - "src": "5385:6:43", - "type": "", - "value": "0xffff" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "5373:3:43", - "nodeType": "YulIdentifier", - "src": "5373:3:43" - }, - "nativeSrc": "5373:19:43", - "nodeType": "YulFunctionCall", - "src": "5373:19:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "5355:6:43", - "nodeType": "YulIdentifier", - "src": "5355:6:43" - }, - "nativeSrc": "5355:38:43", - "nodeType": "YulFunctionCall", - "src": "5355:38:43" - }, - "nativeSrc": "5355:38:43", - "nodeType": "YulExpressionStatement", - "src": "5355:38:43" - } - ] - }, - "name": "abi_encode_tuple_t_uint16__to_t_uint16__fromStack_reversed", - "nativeSrc": "5211:188:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "5279:9:43", - "nodeType": "YulTypedName", - "src": "5279:9:43", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "5290:6:43", - "nodeType": "YulTypedName", - "src": "5290:6:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "5301:4:43", - "nodeType": "YulTypedName", - "src": "5301:4:43", - "type": "" - } - ], - "src": "5211:188:43" - }, - { - "body": { - "nativeSrc": "5529:171:43", - "nodeType": "YulBlock", - "src": "5529:171:43", - "statements": [ - { - "nativeSrc": "5539:26:43", - "nodeType": "YulAssignment", - "src": "5539:26:43", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "5551:9:43", - "nodeType": "YulIdentifier", - "src": "5551:9:43" - }, - { - "kind": "number", - "nativeSrc": "5562:2:43", - "nodeType": "YulLiteral", - "src": "5562:2:43", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "5547:3:43", - "nodeType": "YulIdentifier", - "src": "5547:3:43" - }, - "nativeSrc": "5547:18:43", - "nodeType": "YulFunctionCall", - "src": "5547:18:43" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "5539:4:43", - "nodeType": "YulIdentifier", - "src": "5539:4:43" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "5581:9:43", - "nodeType": "YulIdentifier", - "src": "5581:9:43" - }, - { - "arguments": [ - { - "name": "value0", - "nativeSrc": "5596:6:43", - "nodeType": "YulIdentifier", - "src": "5596:6:43" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "5608:3:43", - "nodeType": "YulLiteral", - "src": "5608:3:43", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nativeSrc": "5613:10:43", - "nodeType": "YulLiteral", - "src": "5613:10:43", - "type": "", - "value": "0xffffffff" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "5604:3:43", - "nodeType": "YulIdentifier", - "src": "5604:3:43" - }, - "nativeSrc": "5604:20:43", - "nodeType": "YulFunctionCall", - "src": "5604:20:43" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "5592:3:43", - "nodeType": "YulIdentifier", - "src": "5592:3:43" - }, - "nativeSrc": "5592:33:43", - "nodeType": "YulFunctionCall", - "src": "5592:33:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "5574:6:43", - "nodeType": "YulIdentifier", - "src": "5574:6:43" - }, - "nativeSrc": "5574:52:43", - "nodeType": "YulFunctionCall", - "src": "5574:52:43" - }, - "nativeSrc": "5574:52:43", - "nodeType": "YulExpressionStatement", - "src": "5574:52:43" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "5646:9:43", - "nodeType": "YulIdentifier", - "src": "5646:9:43" - }, - { - "kind": "number", - "nativeSrc": "5657:2:43", - "nodeType": "YulLiteral", - "src": "5657:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "5642:3:43", - "nodeType": "YulIdentifier", - "src": "5642:3:43" - }, - "nativeSrc": "5642:18:43", - "nodeType": "YulFunctionCall", - "src": "5642:18:43" - }, - { - "arguments": [ - { - "name": "value1", - "nativeSrc": "5666:6:43", - "nodeType": "YulIdentifier", - "src": "5666:6:43" - }, - { - "kind": "number", - "nativeSrc": "5674:18:43", - "nodeType": "YulLiteral", - "src": "5674:18:43", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "5662:3:43", - "nodeType": "YulIdentifier", - "src": "5662:3:43" - }, - "nativeSrc": "5662:31:43", - "nodeType": "YulFunctionCall", - "src": "5662:31:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "5635:6:43", - "nodeType": "YulIdentifier", - "src": "5635:6:43" - }, - "nativeSrc": "5635:59:43", - "nodeType": "YulFunctionCall", - "src": "5635:59:43" - }, - "nativeSrc": "5635:59:43", - "nodeType": "YulExpressionStatement", - "src": "5635:59:43" - } - ] - }, - "name": "abi_encode_tuple_t_bytes4_t_uint64__to_t_bytes4_t_uint64__fromStack_reversed", - "nativeSrc": "5404:296:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "5490:9:43", - "nodeType": "YulTypedName", - "src": "5490:9:43", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "5501:6:43", - "nodeType": "YulTypedName", - "src": "5501:6:43", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "5509:6:43", - "nodeType": "YulTypedName", - "src": "5509:6:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "5520:4:43", - "nodeType": "YulTypedName", - "src": "5520:4:43", - "type": "" - } - ], - "src": "5404:296:43" - }, - { - "body": { - "nativeSrc": "5830:174:43", - "nodeType": "YulBlock", - "src": "5830:174:43", - "statements": [ - { - "nativeSrc": "5840:26:43", - "nodeType": "YulAssignment", - "src": "5840:26:43", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "5852:9:43", - "nodeType": "YulIdentifier", - "src": "5852:9:43" - }, - { - "kind": "number", - "nativeSrc": "5863:2:43", - "nodeType": "YulLiteral", - "src": "5863:2:43", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "5848:3:43", - "nodeType": "YulIdentifier", - "src": "5848:3:43" - }, - "nativeSrc": "5848:18:43", - "nodeType": "YulFunctionCall", - "src": "5848:18:43" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "5840:4:43", - "nodeType": "YulIdentifier", - "src": "5840:4:43" - } - ] - }, - { - "nativeSrc": "5875:28:43", - "nodeType": "YulVariableDeclaration", - "src": "5875:28:43", - "value": { - "kind": "number", - "nativeSrc": "5885:18:43", - "nodeType": "YulLiteral", - "src": "5885:18:43", - "type": "", - "value": "0xffffffffffffffff" - }, - "variables": [ - { - "name": "_1", - "nativeSrc": "5879:2:43", - "nodeType": "YulTypedName", - "src": "5879:2:43", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "5919:9:43", - "nodeType": "YulIdentifier", - "src": "5919:9:43" - }, - { - "arguments": [ - { - "name": "value0", - "nativeSrc": "5934:6:43", - "nodeType": "YulIdentifier", - "src": "5934:6:43" - }, - { - "name": "_1", - "nativeSrc": "5942:2:43", - "nodeType": "YulIdentifier", - "src": "5942:2:43" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "5930:3:43", - "nodeType": "YulIdentifier", - "src": "5930:3:43" - }, - "nativeSrc": "5930:15:43", - "nodeType": "YulFunctionCall", - "src": "5930:15:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "5912:6:43", - "nodeType": "YulIdentifier", - "src": "5912:6:43" - }, - "nativeSrc": "5912:34:43", - "nodeType": "YulFunctionCall", - "src": "5912:34:43" - }, - "nativeSrc": "5912:34:43", - "nodeType": "YulExpressionStatement", - "src": "5912:34:43" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "5966:9:43", - "nodeType": "YulIdentifier", - "src": "5966:9:43" - }, - { - "kind": "number", - "nativeSrc": "5977:2:43", - "nodeType": "YulLiteral", - "src": "5977:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "5962:3:43", - "nodeType": "YulIdentifier", - "src": "5962:3:43" - }, - "nativeSrc": "5962:18:43", - "nodeType": "YulFunctionCall", - "src": "5962:18:43" - }, - { - "arguments": [ - { - "name": "value1", - "nativeSrc": "5986:6:43", - "nodeType": "YulIdentifier", - "src": "5986:6:43" - }, - { - "name": "_1", - "nativeSrc": "5994:2:43", - "nodeType": "YulIdentifier", - "src": "5994:2:43" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "5982:3:43", - "nodeType": "YulIdentifier", - "src": "5982:3:43" - }, - "nativeSrc": "5982:15:43", - "nodeType": "YulFunctionCall", - "src": "5982:15:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "5955:6:43", - "nodeType": "YulIdentifier", - "src": "5955:6:43" - }, - "nativeSrc": "5955:43:43", - "nodeType": "YulFunctionCall", - "src": "5955:43:43" - }, - "nativeSrc": "5955:43:43", - "nodeType": "YulExpressionStatement", - "src": "5955:43:43" - } - ] - }, - "name": "abi_encode_tuple_t_uint64_t_uint64__to_t_uint64_t_uint64__fromStack_reversed", - "nativeSrc": "5705:299:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "5791:9:43", - "nodeType": "YulTypedName", - "src": "5791:9:43", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "5802:6:43", - "nodeType": "YulTypedName", - "src": "5802:6:43", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "5810:6:43", - "nodeType": "YulTypedName", - "src": "5810:6:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "5821:4:43", - "nodeType": "YulTypedName", - "src": "5821:4:43", - "type": "" - } - ], - "src": "5705:299:43" - }, - { - "body": { - "nativeSrc": "6110:76:43", - "nodeType": "YulBlock", - "src": "6110:76:43", - "statements": [ - { - "nativeSrc": "6120:26:43", - "nodeType": "YulAssignment", - "src": "6120:26:43", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "6132:9:43", - "nodeType": "YulIdentifier", - "src": "6132:9:43" - }, - { - "kind": "number", - "nativeSrc": "6143:2:43", - "nodeType": "YulLiteral", - "src": "6143:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "6128:3:43", - "nodeType": "YulIdentifier", - "src": "6128:3:43" - }, - "nativeSrc": "6128:18:43", - "nodeType": "YulFunctionCall", - "src": "6128:18:43" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "6120:4:43", - "nodeType": "YulIdentifier", - "src": "6120:4:43" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "6162:9:43", - "nodeType": "YulIdentifier", - "src": "6162:9:43" - }, - { - "name": "value0", - "nativeSrc": "6173:6:43", - "nodeType": "YulIdentifier", - "src": "6173:6:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "6155:6:43", - "nodeType": "YulIdentifier", - "src": "6155:6:43" - }, - "nativeSrc": "6155:25:43", - "nodeType": "YulFunctionCall", - "src": "6155:25:43" - }, - "nativeSrc": "6155:25:43", - "nodeType": "YulExpressionStatement", - "src": "6155:25:43" - } - ] - }, - "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed", - "nativeSrc": "6009:177:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "6079:9:43", - "nodeType": "YulTypedName", - "src": "6079:9:43", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "6090:6:43", - "nodeType": "YulTypedName", - "src": "6090:6:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "6101:4:43", - "nodeType": "YulTypedName", - "src": "6101:4:43", - "type": "" - } - ], - "src": "6009:177:43" - }, - { - "body": { - "nativeSrc": "6295:352:43", - "nodeType": "YulBlock", - "src": "6295:352:43", - "statements": [ - { - "body": { - "nativeSrc": "6341:16:43", - "nodeType": "YulBlock", - "src": "6341:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "6350:1:43", - "nodeType": "YulLiteral", - "src": "6350:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "6353:1:43", - "nodeType": "YulLiteral", - "src": "6353:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "6343:6:43", - "nodeType": "YulIdentifier", - "src": "6343:6:43" - }, - "nativeSrc": "6343:12:43", - "nodeType": "YulFunctionCall", - "src": "6343:12:43" - }, - "nativeSrc": "6343:12:43", - "nodeType": "YulExpressionStatement", - "src": "6343:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nativeSrc": "6316:7:43", - "nodeType": "YulIdentifier", - "src": "6316:7:43" - }, - { - "name": "headStart", - "nativeSrc": "6325:9:43", - "nodeType": "YulIdentifier", - "src": "6325:9:43" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "6312:3:43", - "nodeType": "YulIdentifier", - "src": "6312:3:43" - }, - "nativeSrc": "6312:23:43", - "nodeType": "YulFunctionCall", - "src": "6312:23:43" - }, - { - "kind": "number", - "nativeSrc": "6337:2:43", - "nodeType": "YulLiteral", - "src": "6337:2:43", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "6308:3:43", - "nodeType": "YulIdentifier", - "src": "6308:3:43" - }, - "nativeSrc": "6308:32:43", - "nodeType": "YulFunctionCall", - "src": "6308:32:43" - }, - "nativeSrc": "6305:52:43", - "nodeType": "YulIf", - "src": "6305:52:43" - }, - { - "nativeSrc": "6366:36:43", - "nodeType": "YulVariableDeclaration", - "src": "6366:36:43", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "6392:9:43", - "nodeType": "YulIdentifier", - "src": "6392:9:43" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "6379:12:43", - "nodeType": "YulIdentifier", - "src": "6379:12:43" - }, - "nativeSrc": "6379:23:43", - "nodeType": "YulFunctionCall", - "src": "6379:23:43" - }, - "variables": [ - { - "name": "value", - "nativeSrc": "6370:5:43", - "nodeType": "YulTypedName", - "src": "6370:5:43", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nativeSrc": "6436:5:43", - "nodeType": "YulIdentifier", - "src": "6436:5:43" - } - ], - "functionName": { - "name": "validator_revert_address", - "nativeSrc": "6411:24:43", - "nodeType": "YulIdentifier", - "src": "6411:24:43" - }, - "nativeSrc": "6411:31:43", - "nodeType": "YulFunctionCall", - "src": "6411:31:43" - }, - "nativeSrc": "6411:31:43", - "nodeType": "YulExpressionStatement", - "src": "6411:31:43" - }, - { - "nativeSrc": "6451:15:43", - "nodeType": "YulAssignment", - "src": "6451:15:43", - "value": { - "name": "value", - "nativeSrc": "6461:5:43", - "nodeType": "YulIdentifier", - "src": "6461:5:43" - }, - "variableNames": [ - { - "name": "value0", - "nativeSrc": "6451:6:43", - "nodeType": "YulIdentifier", - "src": "6451:6:43" - } - ] - }, - { - "nativeSrc": "6475:47:43", - "nodeType": "YulVariableDeclaration", - "src": "6475:47:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "6507:9:43", - "nodeType": "YulIdentifier", - "src": "6507:9:43" - }, - { - "kind": "number", - "nativeSrc": "6518:2:43", - "nodeType": "YulLiteral", - "src": "6518:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "6503:3:43", - "nodeType": "YulIdentifier", - "src": "6503:3:43" - }, - "nativeSrc": "6503:18:43", - "nodeType": "YulFunctionCall", - "src": "6503:18:43" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "6490:12:43", - "nodeType": "YulIdentifier", - "src": "6490:12:43" - }, - "nativeSrc": "6490:32:43", - "nodeType": "YulFunctionCall", - "src": "6490:32:43" - }, - "variables": [ - { - "name": "value_1", - "nativeSrc": "6479:7:43", - "nodeType": "YulTypedName", - "src": "6479:7:43", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value_1", - "nativeSrc": "6556:7:43", - "nodeType": "YulIdentifier", - "src": "6556:7:43" - } - ], - "functionName": { - "name": "validator_revert_address", - "nativeSrc": "6531:24:43", - "nodeType": "YulIdentifier", - "src": "6531:24:43" - }, - "nativeSrc": "6531:33:43", - "nodeType": "YulFunctionCall", - "src": "6531:33:43" - }, - "nativeSrc": "6531:33:43", - "nodeType": "YulExpressionStatement", - "src": "6531:33:43" - }, - { - "nativeSrc": "6573:17:43", - "nodeType": "YulAssignment", - "src": "6573:17:43", - "value": { - "name": "value_1", - "nativeSrc": "6583:7:43", - "nodeType": "YulIdentifier", - "src": "6583:7:43" - }, - "variableNames": [ - { - "name": "value1", - "nativeSrc": "6573:6:43", - "nodeType": "YulIdentifier", - "src": "6573:6:43" - } - ] - }, - { - "nativeSrc": "6599:42:43", - "nodeType": "YulAssignment", - "src": "6599:42:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "6626:9:43", - "nodeType": "YulIdentifier", - "src": "6626:9:43" - }, - { - "kind": "number", - "nativeSrc": "6637:2:43", - "nodeType": "YulLiteral", - "src": "6637:2:43", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "6622:3:43", - "nodeType": "YulIdentifier", - "src": "6622:3:43" - }, - "nativeSrc": "6622:18:43", - "nodeType": "YulFunctionCall", - "src": "6622:18:43" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "6609:12:43", - "nodeType": "YulIdentifier", - "src": "6609:12:43" - }, - "nativeSrc": "6609:32:43", - "nodeType": "YulFunctionCall", - "src": "6609:32:43" - }, - "variableNames": [ - { - "name": "value2", - "nativeSrc": "6599:6:43", - "nodeType": "YulIdentifier", - "src": "6599:6:43" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_addresst_addresst_uint256", - "nativeSrc": "6191:456:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "6245:9:43", - "nodeType": "YulTypedName", - "src": "6245:9:43", - "type": "" - }, - { - "name": "dataEnd", - "nativeSrc": "6256:7:43", - "nodeType": "YulTypedName", - "src": "6256:7:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nativeSrc": "6268:6:43", - "nodeType": "YulTypedName", - "src": "6268:6:43", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "6276:6:43", - "nodeType": "YulTypedName", - "src": "6276:6:43", - "type": "" - }, - { - "name": "value2", - "nativeSrc": "6284:6:43", - "nodeType": "YulTypedName", - "src": "6284:6:43", - "type": "" - } - ], - "src": "6191:456:43" - }, - { - "body": { - "nativeSrc": "6749:87:43", - "nodeType": "YulBlock", - "src": "6749:87:43", - "statements": [ - { - "nativeSrc": "6759:26:43", - "nodeType": "YulAssignment", - "src": "6759:26:43", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "6771:9:43", - "nodeType": "YulIdentifier", - "src": "6771:9:43" - }, - { - "kind": "number", - "nativeSrc": "6782:2:43", - "nodeType": "YulLiteral", - "src": "6782:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "6767:3:43", - "nodeType": "YulIdentifier", - "src": "6767:3:43" - }, - "nativeSrc": "6767:18:43", - "nodeType": "YulFunctionCall", - "src": "6767:18:43" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "6759:4:43", - "nodeType": "YulIdentifier", - "src": "6759:4:43" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "6801:9:43", - "nodeType": "YulIdentifier", - "src": "6801:9:43" - }, - { - "arguments": [ - { - "name": "value0", - "nativeSrc": "6816:6:43", - "nodeType": "YulIdentifier", - "src": "6816:6:43" - }, - { - "kind": "number", - "nativeSrc": "6824:4:43", - "nodeType": "YulLiteral", - "src": "6824:4:43", - "type": "", - "value": "0xff" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "6812:3:43", - "nodeType": "YulIdentifier", - "src": "6812:3:43" - }, - "nativeSrc": "6812:17:43", - "nodeType": "YulFunctionCall", - "src": "6812:17:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "6794:6:43", - "nodeType": "YulIdentifier", - "src": "6794:6:43" - }, - "nativeSrc": "6794:36:43", - "nodeType": "YulFunctionCall", - "src": "6794:36:43" - }, - "nativeSrc": "6794:36:43", - "nodeType": "YulExpressionStatement", - "src": "6794:36:43" - } - ] - }, - "name": "abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed", - "nativeSrc": "6652:184:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "6718:9:43", - "nodeType": "YulTypedName", - "src": "6718:9:43", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "6729:6:43", - "nodeType": "YulTypedName", - "src": "6729:6:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "6740:4:43", - "nodeType": "YulTypedName", - "src": "6740:4:43", - "type": "" - } - ], - "src": "6652:184:43" - }, - { - "body": { - "nativeSrc": "6889:115:43", - "nodeType": "YulBlock", - "src": "6889:115:43", - "statements": [ - { - "nativeSrc": "6899:29:43", - "nodeType": "YulAssignment", - "src": "6899:29:43", - "value": { - "arguments": [ - { - "name": "offset", - "nativeSrc": "6921:6:43", - "nodeType": "YulIdentifier", - "src": "6921:6:43" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "6908:12:43", - "nodeType": "YulIdentifier", - "src": "6908:12:43" - }, - "nativeSrc": "6908:20:43", - "nodeType": "YulFunctionCall", - "src": "6908:20:43" - }, - "variableNames": [ - { - "name": "value", - "nativeSrc": "6899:5:43", - "nodeType": "YulIdentifier", - "src": "6899:5:43" - } - ] - }, - { - "body": { - "nativeSrc": "6982:16:43", - "nodeType": "YulBlock", - "src": "6982:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "6991:1:43", - "nodeType": "YulLiteral", - "src": "6991:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "6994:1:43", - "nodeType": "YulLiteral", - "src": "6994:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "6984:6:43", - "nodeType": "YulIdentifier", - "src": "6984:6:43" - }, - "nativeSrc": "6984:12:43", - "nodeType": "YulFunctionCall", - "src": "6984:12:43" - }, - "nativeSrc": "6984:12:43", - "nodeType": "YulExpressionStatement", - "src": "6984:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nativeSrc": "6950:5:43", - "nodeType": "YulIdentifier", - "src": "6950:5:43" - }, - { - "arguments": [ - { - "name": "value", - "nativeSrc": "6961:5:43", - "nodeType": "YulIdentifier", - "src": "6961:5:43" - }, - { - "kind": "number", - "nativeSrc": "6968:10:43", - "nodeType": "YulLiteral", - "src": "6968:10:43", - "type": "", - "value": "0xffffffff" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "6957:3:43", - "nodeType": "YulIdentifier", - "src": "6957:3:43" - }, - "nativeSrc": "6957:22:43", - "nodeType": "YulFunctionCall", - "src": "6957:22:43" - } - ], - "functionName": { - "name": "eq", - "nativeSrc": "6947:2:43", - "nodeType": "YulIdentifier", - "src": "6947:2:43" - }, - "nativeSrc": "6947:33:43", - "nodeType": "YulFunctionCall", - "src": "6947:33:43" - } - ], - "functionName": { - "name": "iszero", - "nativeSrc": "6940:6:43", - "nodeType": "YulIdentifier", - "src": "6940:6:43" - }, - "nativeSrc": "6940:41:43", - "nodeType": "YulFunctionCall", - "src": "6940:41:43" - }, - "nativeSrc": "6937:61:43", - "nodeType": "YulIf", - "src": "6937:61:43" - } - ] - }, - "name": "abi_decode_uint32", - "nativeSrc": "6841:163:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "offset", - "nativeSrc": "6868:6:43", - "nodeType": "YulTypedName", - "src": "6868:6:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value", - "nativeSrc": "6879:5:43", - "nodeType": "YulTypedName", - "src": "6879:5:43", - "type": "" - } - ], - "src": "6841:163:43" - }, - { - "body": { - "nativeSrc": "7095:166:43", - "nodeType": "YulBlock", - "src": "7095:166:43", - "statements": [ - { - "body": { - "nativeSrc": "7141:16:43", - "nodeType": "YulBlock", - "src": "7141:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "7150:1:43", - "nodeType": "YulLiteral", - "src": "7150:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "7153:1:43", - "nodeType": "YulLiteral", - "src": "7153:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "7143:6:43", - "nodeType": "YulIdentifier", - "src": "7143:6:43" - }, - "nativeSrc": "7143:12:43", - "nodeType": "YulFunctionCall", - "src": "7143:12:43" - }, - "nativeSrc": "7143:12:43", - "nodeType": "YulExpressionStatement", - "src": "7143:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nativeSrc": "7116:7:43", - "nodeType": "YulIdentifier", - "src": "7116:7:43" - }, - { - "name": "headStart", - "nativeSrc": "7125:9:43", - "nodeType": "YulIdentifier", - "src": "7125:9:43" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "7112:3:43", - "nodeType": "YulIdentifier", - "src": "7112:3:43" - }, - "nativeSrc": "7112:23:43", - "nodeType": "YulFunctionCall", - "src": "7112:23:43" - }, - { - "kind": "number", - "nativeSrc": "7137:2:43", - "nodeType": "YulLiteral", - "src": "7137:2:43", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "7108:3:43", - "nodeType": "YulIdentifier", - "src": "7108:3:43" - }, - "nativeSrc": "7108:32:43", - "nodeType": "YulFunctionCall", - "src": "7108:32:43" - }, - "nativeSrc": "7105:52:43", - "nodeType": "YulIf", - "src": "7105:52:43" - }, - { - "nativeSrc": "7166:38:43", - "nodeType": "YulAssignment", - "src": "7166:38:43", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "7194:9:43", - "nodeType": "YulIdentifier", - "src": "7194:9:43" - } - ], - "functionName": { - "name": "abi_decode_uint32", - "nativeSrc": "7176:17:43", - "nodeType": "YulIdentifier", - "src": "7176:17:43" - }, - "nativeSrc": "7176:28:43", - "nodeType": "YulFunctionCall", - "src": "7176:28:43" - }, - "variableNames": [ - { - "name": "value0", - "nativeSrc": "7166:6:43", - "nodeType": "YulIdentifier", - "src": "7166:6:43" - } - ] - }, - { - "nativeSrc": "7213:42:43", - "nodeType": "YulAssignment", - "src": "7213:42:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "7240:9:43", - "nodeType": "YulIdentifier", - "src": "7240:9:43" - }, - { - "kind": "number", - "nativeSrc": "7251:2:43", - "nodeType": "YulLiteral", - "src": "7251:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "7236:3:43", - "nodeType": "YulIdentifier", - "src": "7236:3:43" - }, - "nativeSrc": "7236:18:43", - "nodeType": "YulFunctionCall", - "src": "7236:18:43" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "7223:12:43", - "nodeType": "YulIdentifier", - "src": "7223:12:43" - }, - "nativeSrc": "7223:32:43", - "nodeType": "YulFunctionCall", - "src": "7223:32:43" - }, - "variableNames": [ - { - "name": "value1", - "nativeSrc": "7213:6:43", - "nodeType": "YulIdentifier", - "src": "7213:6:43" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_uint32t_bytes32", - "nativeSrc": "7009:252:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "7053:9:43", - "nodeType": "YulTypedName", - "src": "7053:9:43", - "type": "" - }, - { - "name": "dataEnd", - "nativeSrc": "7064:7:43", - "nodeType": "YulTypedName", - "src": "7064:7:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nativeSrc": "7076:6:43", - "nodeType": "YulTypedName", - "src": "7076:6:43", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "7084:6:43", - "nodeType": "YulTypedName", - "src": "7084:6:43", - "type": "" - } - ], - "src": "7009:252:43" - }, - { - "body": { - "nativeSrc": "7308:76:43", - "nodeType": "YulBlock", - "src": "7308:76:43", - "statements": [ - { - "body": { - "nativeSrc": "7362:16:43", - "nodeType": "YulBlock", - "src": "7362:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "7371:1:43", - "nodeType": "YulLiteral", - "src": "7371:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "7374:1:43", - "nodeType": "YulLiteral", - "src": "7374:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "7364:6:43", - "nodeType": "YulIdentifier", - "src": "7364:6:43" - }, - "nativeSrc": "7364:12:43", - "nodeType": "YulFunctionCall", - "src": "7364:12:43" - }, - "nativeSrc": "7364:12:43", - "nodeType": "YulExpressionStatement", - "src": "7364:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nativeSrc": "7331:5:43", - "nodeType": "YulIdentifier", - "src": "7331:5:43" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nativeSrc": "7352:5:43", - "nodeType": "YulIdentifier", - "src": "7352:5:43" - } - ], - "functionName": { - "name": "iszero", - "nativeSrc": "7345:6:43", - "nodeType": "YulIdentifier", - "src": "7345:6:43" - }, - "nativeSrc": "7345:13:43", - "nodeType": "YulFunctionCall", - "src": "7345:13:43" - } - ], - "functionName": { - "name": "iszero", - "nativeSrc": "7338:6:43", - "nodeType": "YulIdentifier", - "src": "7338:6:43" - }, - "nativeSrc": "7338:21:43", - "nodeType": "YulFunctionCall", - "src": "7338:21:43" - } - ], - "functionName": { - "name": "eq", - "nativeSrc": "7328:2:43", - "nodeType": "YulIdentifier", - "src": "7328:2:43" - }, - "nativeSrc": "7328:32:43", - "nodeType": "YulFunctionCall", - "src": "7328:32:43" - } - ], - "functionName": { - "name": "iszero", - "nativeSrc": "7321:6:43", - "nodeType": "YulIdentifier", - "src": "7321:6:43" - }, - "nativeSrc": "7321:40:43", - "nodeType": "YulFunctionCall", - "src": "7321:40:43" - }, - "nativeSrc": "7318:60:43", - "nodeType": "YulIf", - "src": "7318:60:43" - } - ] - }, - "name": "validator_revert_bool", - "nativeSrc": "7266:118:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nativeSrc": "7297:5:43", - "nodeType": "YulTypedName", - "src": "7297:5:43", - "type": "" - } - ], - "src": "7266:118:43" - }, - { - "body": { - "nativeSrc": "7502:376:43", - "nodeType": "YulBlock", - "src": "7502:376:43", - "statements": [ - { - "body": { - "nativeSrc": "7548:16:43", - "nodeType": "YulBlock", - "src": "7548:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "7557:1:43", - "nodeType": "YulLiteral", - "src": "7557:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "7560:1:43", - "nodeType": "YulLiteral", - "src": "7560:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "7550:6:43", - "nodeType": "YulIdentifier", - "src": "7550:6:43" - }, - "nativeSrc": "7550:12:43", - "nodeType": "YulFunctionCall", - "src": "7550:12:43" - }, - "nativeSrc": "7550:12:43", - "nodeType": "YulExpressionStatement", - "src": "7550:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nativeSrc": "7523:7:43", - "nodeType": "YulIdentifier", - "src": "7523:7:43" - }, - { - "name": "headStart", - "nativeSrc": "7532:9:43", - "nodeType": "YulIdentifier", - "src": "7532:9:43" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "7519:3:43", - "nodeType": "YulIdentifier", - "src": "7519:3:43" - }, - "nativeSrc": "7519:23:43", - "nodeType": "YulFunctionCall", - "src": "7519:23:43" - }, - { - "kind": "number", - "nativeSrc": "7544:2:43", - "nodeType": "YulLiteral", - "src": "7544:2:43", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "7515:3:43", - "nodeType": "YulIdentifier", - "src": "7515:3:43" - }, - "nativeSrc": "7515:32:43", - "nodeType": "YulFunctionCall", - "src": "7515:32:43" - }, - "nativeSrc": "7512:52:43", - "nodeType": "YulIf", - "src": "7512:52:43" - }, - { - "nativeSrc": "7573:37:43", - "nodeType": "YulVariableDeclaration", - "src": "7573:37:43", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "7600:9:43", - "nodeType": "YulIdentifier", - "src": "7600:9:43" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "7587:12:43", - "nodeType": "YulIdentifier", - "src": "7587:12:43" - }, - "nativeSrc": "7587:23:43", - "nodeType": "YulFunctionCall", - "src": "7587:23:43" - }, - "variables": [ - { - "name": "offset", - "nativeSrc": "7577:6:43", - "nodeType": "YulTypedName", - "src": "7577:6:43", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "7653:16:43", - "nodeType": "YulBlock", - "src": "7653:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "7662:1:43", - "nodeType": "YulLiteral", - "src": "7662:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "7665:1:43", - "nodeType": "YulLiteral", - "src": "7665:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "7655:6:43", - "nodeType": "YulIdentifier", - "src": "7655:6:43" - }, - "nativeSrc": "7655:12:43", - "nodeType": "YulFunctionCall", - "src": "7655:12:43" - }, - "nativeSrc": "7655:12:43", - "nodeType": "YulExpressionStatement", - "src": "7655:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "offset", - "nativeSrc": "7625:6:43", - "nodeType": "YulIdentifier", - "src": "7625:6:43" - }, - { - "kind": "number", - "nativeSrc": "7633:18:43", - "nodeType": "YulLiteral", - "src": "7633:18:43", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "7622:2:43", - "nodeType": "YulIdentifier", - "src": "7622:2:43" - }, - "nativeSrc": "7622:30:43", - "nodeType": "YulFunctionCall", - "src": "7622:30:43" - }, - "nativeSrc": "7619:50:43", - "nodeType": "YulIf", - "src": "7619:50:43" - }, - { - "nativeSrc": "7678:79:43", - "nodeType": "YulAssignment", - "src": "7678:79:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "7729:9:43", - "nodeType": "YulIdentifier", - "src": "7729:9:43" - }, - { - "name": "offset", - "nativeSrc": "7740:6:43", - "nodeType": "YulIdentifier", - "src": "7740:6:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "7725:3:43", - "nodeType": "YulIdentifier", - "src": "7725:3:43" - }, - "nativeSrc": "7725:22:43", - "nodeType": "YulFunctionCall", - "src": "7725:22:43" - }, - { - "name": "dataEnd", - "nativeSrc": "7749:7:43", - "nodeType": "YulIdentifier", - "src": "7749:7:43" - } - ], - "functionName": { - "name": "abi_decode_struct_SendParam_calldata", - "nativeSrc": "7688:36:43", - "nodeType": "YulIdentifier", - "src": "7688:36:43" - }, - "nativeSrc": "7688:69:43", - "nodeType": "YulFunctionCall", - "src": "7688:69:43" - }, - "variableNames": [ - { - "name": "value0", - "nativeSrc": "7678:6:43", - "nodeType": "YulIdentifier", - "src": "7678:6:43" - } - ] - }, - { - "nativeSrc": "7766:45:43", - "nodeType": "YulVariableDeclaration", - "src": "7766:45:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "7796:9:43", - "nodeType": "YulIdentifier", - "src": "7796:9:43" - }, - { - "kind": "number", - "nativeSrc": "7807:2:43", - "nodeType": "YulLiteral", - "src": "7807:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "7792:3:43", - "nodeType": "YulIdentifier", - "src": "7792:3:43" - }, - "nativeSrc": "7792:18:43", - "nodeType": "YulFunctionCall", - "src": "7792:18:43" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "7779:12:43", - "nodeType": "YulIdentifier", - "src": "7779:12:43" - }, - "nativeSrc": "7779:32:43", - "nodeType": "YulFunctionCall", - "src": "7779:32:43" - }, - "variables": [ - { - "name": "value", - "nativeSrc": "7770:5:43", - "nodeType": "YulTypedName", - "src": "7770:5:43", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nativeSrc": "7842:5:43", - "nodeType": "YulIdentifier", - "src": "7842:5:43" - } - ], - "functionName": { - "name": "validator_revert_bool", - "nativeSrc": "7820:21:43", - "nodeType": "YulIdentifier", - "src": "7820:21:43" - }, - "nativeSrc": "7820:28:43", - "nodeType": "YulFunctionCall", - "src": "7820:28:43" - }, - "nativeSrc": "7820:28:43", - "nodeType": "YulExpressionStatement", - "src": "7820:28:43" - }, - { - "nativeSrc": "7857:15:43", - "nodeType": "YulAssignment", - "src": "7857:15:43", - "value": { - "name": "value", - "nativeSrc": "7867:5:43", - "nodeType": "YulIdentifier", - "src": "7867:5:43" - }, - "variableNames": [ - { - "name": "value1", - "nativeSrc": "7857:6:43", - "nodeType": "YulIdentifier", - "src": "7857:6:43" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_struct$_SendParam_$3382_calldata_ptrt_bool", - "nativeSrc": "7389:489:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "7460:9:43", - "nodeType": "YulTypedName", - "src": "7460:9:43", - "type": "" - }, - { - "name": "dataEnd", - "nativeSrc": "7471:7:43", - "nodeType": "YulTypedName", - "src": "7471:7:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nativeSrc": "7483:6:43", - "nodeType": "YulTypedName", - "src": "7483:6:43", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "7491:6:43", - "nodeType": "YulTypedName", - "src": "7491:6:43", - "type": "" - } - ], - "src": "7389:489:43" - }, - { - "body": { - "nativeSrc": "8040:96:43", - "nodeType": "YulBlock", - "src": "8040:96:43", - "statements": [ - { - "nativeSrc": "8050:26:43", - "nodeType": "YulAssignment", - "src": "8050:26:43", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "8062:9:43", - "nodeType": "YulIdentifier", - "src": "8062:9:43" - }, - { - "kind": "number", - "nativeSrc": "8073:2:43", - "nodeType": "YulLiteral", - "src": "8073:2:43", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "8058:3:43", - "nodeType": "YulIdentifier", - "src": "8058:3:43" - }, - "nativeSrc": "8058:18:43", - "nodeType": "YulFunctionCall", - "src": "8058:18:43" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "8050:4:43", - "nodeType": "YulIdentifier", - "src": "8050:4:43" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value0", - "nativeSrc": "8112:6:43", - "nodeType": "YulIdentifier", - "src": "8112:6:43" - }, - { - "name": "headStart", - "nativeSrc": "8120:9:43", - "nodeType": "YulIdentifier", - "src": "8120:9:43" - } - ], - "functionName": { - "name": "abi_encode_struct_OFTLimit", - "nativeSrc": "8085:26:43", - "nodeType": "YulIdentifier", - "src": "8085:26:43" - }, - "nativeSrc": "8085:45:43", - "nodeType": "YulFunctionCall", - "src": "8085:45:43" - }, - "nativeSrc": "8085:45:43", - "nodeType": "YulExpressionStatement", - "src": "8085:45:43" - } - ] - }, - "name": "abi_encode_tuple_t_struct$_MessagingFee_$33_memory_ptr__to_t_struct$_MessagingFee_$33_memory_ptr__fromStack_reversed", - "nativeSrc": "7883:253:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "8009:9:43", - "nodeType": "YulTypedName", - "src": "8009:9:43", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "8020:6:43", - "nodeType": "YulTypedName", - "src": "8020:6:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "8031:4:43", - "nodeType": "YulTypedName", - "src": "8031:4:43", - "type": "" - } - ], - "src": "7883:253:43" - }, - { - "body": { - "nativeSrc": "8189:111:43", - "nodeType": "YulBlock", - "src": "8189:111:43", - "statements": [ - { - "nativeSrc": "8199:29:43", - "nodeType": "YulAssignment", - "src": "8199:29:43", - "value": { - "arguments": [ - { - "name": "offset", - "nativeSrc": "8221:6:43", - "nodeType": "YulIdentifier", - "src": "8221:6:43" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "8208:12:43", - "nodeType": "YulIdentifier", - "src": "8208:12:43" - }, - "nativeSrc": "8208:20:43", - "nodeType": "YulFunctionCall", - "src": "8208:20:43" - }, - "variableNames": [ - { - "name": "value", - "nativeSrc": "8199:5:43", - "nodeType": "YulIdentifier", - "src": "8199:5:43" - } - ] - }, - { - "body": { - "nativeSrc": "8278:16:43", - "nodeType": "YulBlock", - "src": "8278:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "8287:1:43", - "nodeType": "YulLiteral", - "src": "8287:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "8290:1:43", - "nodeType": "YulLiteral", - "src": "8290:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "8280:6:43", - "nodeType": "YulIdentifier", - "src": "8280:6:43" - }, - "nativeSrc": "8280:12:43", - "nodeType": "YulFunctionCall", - "src": "8280:12:43" - }, - "nativeSrc": "8280:12:43", - "nodeType": "YulExpressionStatement", - "src": "8280:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nativeSrc": "8250:5:43", - "nodeType": "YulIdentifier", - "src": "8250:5:43" - }, - { - "arguments": [ - { - "name": "value", - "nativeSrc": "8261:5:43", - "nodeType": "YulIdentifier", - "src": "8261:5:43" - }, - { - "kind": "number", - "nativeSrc": "8268:6:43", - "nodeType": "YulLiteral", - "src": "8268:6:43", - "type": "", - "value": "0xffff" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "8257:3:43", - "nodeType": "YulIdentifier", - "src": "8257:3:43" - }, - "nativeSrc": "8257:18:43", - "nodeType": "YulFunctionCall", - "src": "8257:18:43" - } - ], - "functionName": { - "name": "eq", - "nativeSrc": "8247:2:43", - "nodeType": "YulIdentifier", - "src": "8247:2:43" - }, - "nativeSrc": "8247:29:43", - "nodeType": "YulFunctionCall", - "src": "8247:29:43" - } - ], - "functionName": { - "name": "iszero", - "nativeSrc": "8240:6:43", - "nodeType": "YulIdentifier", - "src": "8240:6:43" - }, - "nativeSrc": "8240:37:43", - "nodeType": "YulFunctionCall", - "src": "8240:37:43" - }, - "nativeSrc": "8237:57:43", - "nodeType": "YulIf", - "src": "8237:57:43" - } - ] - }, - "name": "abi_decode_uint16", - "nativeSrc": "8141:159:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "offset", - "nativeSrc": "8168:6:43", - "nodeType": "YulTypedName", - "src": "8168:6:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value", - "nativeSrc": "8179:5:43", - "nodeType": "YulTypedName", - "src": "8179:5:43", - "type": "" - } - ], - "src": "8141:159:43" - }, - { - "body": { - "nativeSrc": "8390:171:43", - "nodeType": "YulBlock", - "src": "8390:171:43", - "statements": [ - { - "body": { - "nativeSrc": "8436:16:43", - "nodeType": "YulBlock", - "src": "8436:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "8445:1:43", - "nodeType": "YulLiteral", - "src": "8445:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "8448:1:43", - "nodeType": "YulLiteral", - "src": "8448:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "8438:6:43", - "nodeType": "YulIdentifier", - "src": "8438:6:43" - }, - "nativeSrc": "8438:12:43", - "nodeType": "YulFunctionCall", - "src": "8438:12:43" - }, - "nativeSrc": "8438:12:43", - "nodeType": "YulExpressionStatement", - "src": "8438:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nativeSrc": "8411:7:43", - "nodeType": "YulIdentifier", - "src": "8411:7:43" - }, - { - "name": "headStart", - "nativeSrc": "8420:9:43", - "nodeType": "YulIdentifier", - "src": "8420:9:43" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "8407:3:43", - "nodeType": "YulIdentifier", - "src": "8407:3:43" - }, - "nativeSrc": "8407:23:43", - "nodeType": "YulFunctionCall", - "src": "8407:23:43" - }, - { - "kind": "number", - "nativeSrc": "8432:2:43", - "nodeType": "YulLiteral", - "src": "8432:2:43", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "8403:3:43", - "nodeType": "YulIdentifier", - "src": "8403:3:43" - }, - "nativeSrc": "8403:32:43", - "nodeType": "YulFunctionCall", - "src": "8403:32:43" - }, - "nativeSrc": "8400:52:43", - "nodeType": "YulIf", - "src": "8400:52:43" - }, - { - "nativeSrc": "8461:38:43", - "nodeType": "YulAssignment", - "src": "8461:38:43", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "8489:9:43", - "nodeType": "YulIdentifier", - "src": "8489:9:43" - } - ], - "functionName": { - "name": "abi_decode_uint32", - "nativeSrc": "8471:17:43", - "nodeType": "YulIdentifier", - "src": "8471:17:43" - }, - "nativeSrc": "8471:28:43", - "nodeType": "YulFunctionCall", - "src": "8471:28:43" - }, - "variableNames": [ - { - "name": "value0", - "nativeSrc": "8461:6:43", - "nodeType": "YulIdentifier", - "src": "8461:6:43" - } - ] - }, - { - "nativeSrc": "8508:47:43", - "nodeType": "YulAssignment", - "src": "8508:47:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "8540:9:43", - "nodeType": "YulIdentifier", - "src": "8540:9:43" - }, - { - "kind": "number", - "nativeSrc": "8551:2:43", - "nodeType": "YulLiteral", - "src": "8551:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "8536:3:43", - "nodeType": "YulIdentifier", - "src": "8536:3:43" - }, - "nativeSrc": "8536:18:43", - "nodeType": "YulFunctionCall", - "src": "8536:18:43" - } - ], - "functionName": { - "name": "abi_decode_uint16", - "nativeSrc": "8518:17:43", - "nodeType": "YulIdentifier", - "src": "8518:17:43" - }, - "nativeSrc": "8518:37:43", - "nodeType": "YulFunctionCall", - "src": "8518:37:43" - }, - "variableNames": [ - { - "name": "value1", - "nativeSrc": "8508:6:43", - "nodeType": "YulIdentifier", - "src": "8508:6:43" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_uint32t_uint16", - "nativeSrc": "8305:256:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "8348:9:43", - "nodeType": "YulTypedName", - "src": "8348:9:43", - "type": "" - }, - { - "name": "dataEnd", - "nativeSrc": "8359:7:43", - "nodeType": "YulTypedName", - "src": "8359:7:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nativeSrc": "8371:6:43", - "nodeType": "YulTypedName", - "src": "8371:6:43", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "8379:6:43", - "nodeType": "YulTypedName", - "src": "8379:6:43", - "type": "" - } - ], - "src": "8305:256:43" - }, - { - "body": { - "nativeSrc": "8685:99:43", - "nodeType": "YulBlock", - "src": "8685:99:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "8702:9:43", - "nodeType": "YulIdentifier", - "src": "8702:9:43" - }, - { - "kind": "number", - "nativeSrc": "8713:2:43", - "nodeType": "YulLiteral", - "src": "8713:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "8695:6:43", - "nodeType": "YulIdentifier", - "src": "8695:6:43" - }, - "nativeSrc": "8695:21:43", - "nodeType": "YulFunctionCall", - "src": "8695:21:43" - }, - "nativeSrc": "8695:21:43", - "nodeType": "YulExpressionStatement", - "src": "8695:21:43" - }, - { - "nativeSrc": "8725:53:43", - "nodeType": "YulAssignment", - "src": "8725:53:43", - "value": { - "arguments": [ - { - "name": "value0", - "nativeSrc": "8751:6:43", - "nodeType": "YulIdentifier", - "src": "8751:6:43" - }, - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "8763:9:43", - "nodeType": "YulIdentifier", - "src": "8763:9:43" - }, - { - "kind": "number", - "nativeSrc": "8774:2:43", - "nodeType": "YulLiteral", - "src": "8774:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "8759:3:43", - "nodeType": "YulIdentifier", - "src": "8759:3:43" - }, - "nativeSrc": "8759:18:43", - "nodeType": "YulFunctionCall", - "src": "8759:18:43" - } - ], - "functionName": { - "name": "abi_encode_string", - "nativeSrc": "8733:17:43", - "nodeType": "YulIdentifier", - "src": "8733:17:43" - }, - "nativeSrc": "8733:45:43", - "nodeType": "YulFunctionCall", - "src": "8733:45:43" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "8725:4:43", - "nodeType": "YulIdentifier", - "src": "8725:4:43" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed", - "nativeSrc": "8566:218:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "8654:9:43", - "nodeType": "YulTypedName", - "src": "8654:9:43", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "8665:6:43", - "nodeType": "YulTypedName", - "src": "8665:6:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "8676:4:43", - "nodeType": "YulTypedName", - "src": "8676:4:43", - "type": "" - } - ], - "src": "8566:218:43" - }, - { - "body": { - "nativeSrc": "8918:102:43", - "nodeType": "YulBlock", - "src": "8918:102:43", - "statements": [ - { - "nativeSrc": "8928:26:43", - "nodeType": "YulAssignment", - "src": "8928:26:43", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "8940:9:43", - "nodeType": "YulIdentifier", - "src": "8940:9:43" - }, - { - "kind": "number", - "nativeSrc": "8951:2:43", - "nodeType": "YulLiteral", - "src": "8951:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "8936:3:43", - "nodeType": "YulIdentifier", - "src": "8936:3:43" - }, - "nativeSrc": "8936:18:43", - "nodeType": "YulFunctionCall", - "src": "8936:18:43" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "8928:4:43", - "nodeType": "YulIdentifier", - "src": "8928:4:43" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "8970:9:43", - "nodeType": "YulIdentifier", - "src": "8970:9:43" - }, - { - "arguments": [ - { - "name": "value0", - "nativeSrc": "8985:6:43", - "nodeType": "YulIdentifier", - "src": "8985:6:43" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "9001:3:43", - "nodeType": "YulLiteral", - "src": "9001:3:43", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nativeSrc": "9006:1:43", - "nodeType": "YulLiteral", - "src": "9006:1:43", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "8997:3:43", - "nodeType": "YulIdentifier", - "src": "8997:3:43" - }, - "nativeSrc": "8997:11:43", - "nodeType": "YulFunctionCall", - "src": "8997:11:43" - }, - { - "kind": "number", - "nativeSrc": "9010:1:43", - "nodeType": "YulLiteral", - "src": "9010:1:43", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "8993:3:43", - "nodeType": "YulIdentifier", - "src": "8993:3:43" - }, - "nativeSrc": "8993:19:43", - "nodeType": "YulFunctionCall", - "src": "8993:19:43" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "8981:3:43", - "nodeType": "YulIdentifier", - "src": "8981:3:43" - }, - "nativeSrc": "8981:32:43", - "nodeType": "YulFunctionCall", - "src": "8981:32:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "8963:6:43", - "nodeType": "YulIdentifier", - "src": "8963:6:43" - }, - "nativeSrc": "8963:51:43", - "nodeType": "YulFunctionCall", - "src": "8963:51:43" - }, - "nativeSrc": "8963:51:43", - "nodeType": "YulExpressionStatement", - "src": "8963:51:43" - } - ] - }, - "name": "abi_encode_tuple_t_contract$_ILayerZeroEndpointV2_$202__to_t_address__fromStack_reversed", - "nativeSrc": "8789:231:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "8887:9:43", - "nodeType": "YulTypedName", - "src": "8887:9:43", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "8898:6:43", - "nodeType": "YulTypedName", - "src": "8898:6:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "8909:4:43", - "nodeType": "YulTypedName", - "src": "8909:4:43", - "type": "" - } - ], - "src": "8789:231:43" - }, - { - "body": { - "nativeSrc": "9095:177:43", - "nodeType": "YulBlock", - "src": "9095:177:43", - "statements": [ - { - "body": { - "nativeSrc": "9141:16:43", - "nodeType": "YulBlock", - "src": "9141:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "9150:1:43", - "nodeType": "YulLiteral", - "src": "9150:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "9153:1:43", - "nodeType": "YulLiteral", - "src": "9153:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "9143:6:43", - "nodeType": "YulIdentifier", - "src": "9143:6:43" - }, - "nativeSrc": "9143:12:43", - "nodeType": "YulFunctionCall", - "src": "9143:12:43" - }, - "nativeSrc": "9143:12:43", - "nodeType": "YulExpressionStatement", - "src": "9143:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nativeSrc": "9116:7:43", - "nodeType": "YulIdentifier", - "src": "9116:7:43" - }, - { - "name": "headStart", - "nativeSrc": "9125:9:43", - "nodeType": "YulIdentifier", - "src": "9125:9:43" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "9112:3:43", - "nodeType": "YulIdentifier", - "src": "9112:3:43" - }, - "nativeSrc": "9112:23:43", - "nodeType": "YulFunctionCall", - "src": "9112:23:43" - }, - { - "kind": "number", - "nativeSrc": "9137:2:43", - "nodeType": "YulLiteral", - "src": "9137:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "9108:3:43", - "nodeType": "YulIdentifier", - "src": "9108:3:43" - }, - "nativeSrc": "9108:32:43", - "nodeType": "YulFunctionCall", - "src": "9108:32:43" - }, - "nativeSrc": "9105:52:43", - "nodeType": "YulIf", - "src": "9105:52:43" - }, - { - "nativeSrc": "9166:36:43", - "nodeType": "YulVariableDeclaration", - "src": "9166:36:43", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "9192:9:43", - "nodeType": "YulIdentifier", - "src": "9192:9:43" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "9179:12:43", - "nodeType": "YulIdentifier", - "src": "9179:12:43" - }, - "nativeSrc": "9179:23:43", - "nodeType": "YulFunctionCall", - "src": "9179:23:43" - }, - "variables": [ - { - "name": "value", - "nativeSrc": "9170:5:43", - "nodeType": "YulTypedName", - "src": "9170:5:43", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nativeSrc": "9236:5:43", - "nodeType": "YulIdentifier", - "src": "9236:5:43" - } - ], - "functionName": { - "name": "validator_revert_address", - "nativeSrc": "9211:24:43", - "nodeType": "YulIdentifier", - "src": "9211:24:43" - }, - "nativeSrc": "9211:31:43", - "nodeType": "YulFunctionCall", - "src": "9211:31:43" - }, - "nativeSrc": "9211:31:43", - "nodeType": "YulExpressionStatement", - "src": "9211:31:43" - }, - { - "nativeSrc": "9251:15:43", - "nodeType": "YulAssignment", - "src": "9251:15:43", - "value": { - "name": "value", - "nativeSrc": "9261:5:43", - "nodeType": "YulIdentifier", - "src": "9261:5:43" - }, - "variableNames": [ - { - "name": "value0", - "nativeSrc": "9251:6:43", - "nodeType": "YulIdentifier", - "src": "9251:6:43" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_address", - "nativeSrc": "9025:247:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "9061:9:43", - "nodeType": "YulTypedName", - "src": "9061:9:43", - "type": "" - }, - { - "name": "dataEnd", - "nativeSrc": "9072:7:43", - "nodeType": "YulTypedName", - "src": "9072:7:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nativeSrc": "9084:6:43", - "nodeType": "YulTypedName", - "src": "9084:6:43", - "type": "" - } - ], - "src": "9025:247:43" - }, - { - "body": { - "nativeSrc": "9376:101:43", - "nodeType": "YulBlock", - "src": "9376:101:43", - "statements": [ - { - "nativeSrc": "9386:26:43", - "nodeType": "YulAssignment", - "src": "9386:26:43", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "9398:9:43", - "nodeType": "YulIdentifier", - "src": "9398:9:43" - }, - { - "kind": "number", - "nativeSrc": "9409:2:43", - "nodeType": "YulLiteral", - "src": "9409:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "9394:3:43", - "nodeType": "YulIdentifier", - "src": "9394:3:43" - }, - "nativeSrc": "9394:18:43", - "nodeType": "YulFunctionCall", - "src": "9394:18:43" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "9386:4:43", - "nodeType": "YulIdentifier", - "src": "9386:4:43" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "9428:9:43", - "nodeType": "YulIdentifier", - "src": "9428:9:43" - }, - { - "arguments": [ - { - "name": "value0", - "nativeSrc": "9443:6:43", - "nodeType": "YulIdentifier", - "src": "9443:6:43" - }, - { - "kind": "number", - "nativeSrc": "9451:18:43", - "nodeType": "YulLiteral", - "src": "9451:18:43", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "9439:3:43", - "nodeType": "YulIdentifier", - "src": "9439:3:43" - }, - "nativeSrc": "9439:31:43", - "nodeType": "YulFunctionCall", - "src": "9439:31:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "9421:6:43", - "nodeType": "YulIdentifier", - "src": "9421:6:43" - }, - "nativeSrc": "9421:50:43", - "nodeType": "YulFunctionCall", - "src": "9421:50:43" - }, - "nativeSrc": "9421:50:43", - "nodeType": "YulExpressionStatement", - "src": "9421:50:43" - } - ] - }, - "name": "abi_encode_tuple_t_uint64__to_t_uint64__fromStack_reversed", - "nativeSrc": "9277:200:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "9345:9:43", - "nodeType": "YulTypedName", - "src": "9345:9:43", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "9356:6:43", - "nodeType": "YulTypedName", - "src": "9356:6:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "9367:4:43", - "nodeType": "YulTypedName", - "src": "9367:4:43", - "type": "" - } - ], - "src": "9277:200:43" - }, - { - "body": { - "nativeSrc": "9629:521:43", - "nodeType": "YulBlock", - "src": "9629:521:43", - "statements": [ - { - "body": { - "nativeSrc": "9676:16:43", - "nodeType": "YulBlock", - "src": "9676:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "9685:1:43", - "nodeType": "YulLiteral", - "src": "9685:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "9688:1:43", - "nodeType": "YulLiteral", - "src": "9688:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "9678:6:43", - "nodeType": "YulIdentifier", - "src": "9678:6:43" - }, - "nativeSrc": "9678:12:43", - "nodeType": "YulFunctionCall", - "src": "9678:12:43" - }, - "nativeSrc": "9678:12:43", - "nodeType": "YulExpressionStatement", - "src": "9678:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nativeSrc": "9650:7:43", - "nodeType": "YulIdentifier", - "src": "9650:7:43" - }, - { - "name": "headStart", - "nativeSrc": "9659:9:43", - "nodeType": "YulIdentifier", - "src": "9659:9:43" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "9646:3:43", - "nodeType": "YulIdentifier", - "src": "9646:3:43" - }, - "nativeSrc": "9646:23:43", - "nodeType": "YulFunctionCall", - "src": "9646:23:43" - }, - { - "kind": "number", - "nativeSrc": "9671:3:43", - "nodeType": "YulLiteral", - "src": "9671:3:43", - "type": "", - "value": "160" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "9642:3:43", - "nodeType": "YulIdentifier", - "src": "9642:3:43" - }, - "nativeSrc": "9642:33:43", - "nodeType": "YulFunctionCall", - "src": "9642:33:43" - }, - "nativeSrc": "9639:53:43", - "nodeType": "YulIf", - "src": "9639:53:43" - }, - { - "nativeSrc": "9701:63:43", - "nodeType": "YulAssignment", - "src": "9701:63:43", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "9745:9:43", - "nodeType": "YulIdentifier", - "src": "9745:9:43" - }, - { - "name": "dataEnd", - "nativeSrc": "9756:7:43", - "nodeType": "YulIdentifier", - "src": "9756:7:43" - } - ], - "functionName": { - "name": "abi_decode_struct_Origin_calldata", - "nativeSrc": "9711:33:43", - "nodeType": "YulIdentifier", - "src": "9711:33:43" - }, - "nativeSrc": "9711:53:43", - "nodeType": "YulFunctionCall", - "src": "9711:53:43" - }, - "variableNames": [ - { - "name": "value0", - "nativeSrc": "9701:6:43", - "nodeType": "YulIdentifier", - "src": "9701:6:43" - } - ] - }, - { - "nativeSrc": "9773:46:43", - "nodeType": "YulVariableDeclaration", - "src": "9773:46:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "9804:9:43", - "nodeType": "YulIdentifier", - "src": "9804:9:43" - }, - { - "kind": "number", - "nativeSrc": "9815:2:43", - "nodeType": "YulLiteral", - "src": "9815:2:43", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "9800:3:43", - "nodeType": "YulIdentifier", - "src": "9800:3:43" - }, - "nativeSrc": "9800:18:43", - "nodeType": "YulFunctionCall", - "src": "9800:18:43" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "9787:12:43", - "nodeType": "YulIdentifier", - "src": "9787:12:43" - }, - "nativeSrc": "9787:32:43", - "nodeType": "YulFunctionCall", - "src": "9787:32:43" - }, - "variables": [ - { - "name": "offset", - "nativeSrc": "9777:6:43", - "nodeType": "YulTypedName", - "src": "9777:6:43", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "9862:16:43", - "nodeType": "YulBlock", - "src": "9862:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "9871:1:43", - "nodeType": "YulLiteral", - "src": "9871:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "9874:1:43", - "nodeType": "YulLiteral", - "src": "9874:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "9864:6:43", - "nodeType": "YulIdentifier", - "src": "9864:6:43" - }, - "nativeSrc": "9864:12:43", - "nodeType": "YulFunctionCall", - "src": "9864:12:43" - }, - "nativeSrc": "9864:12:43", - "nodeType": "YulExpressionStatement", - "src": "9864:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "offset", - "nativeSrc": "9834:6:43", - "nodeType": "YulIdentifier", - "src": "9834:6:43" - }, - { - "kind": "number", - "nativeSrc": "9842:18:43", - "nodeType": "YulLiteral", - "src": "9842:18:43", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "9831:2:43", - "nodeType": "YulIdentifier", - "src": "9831:2:43" - }, - "nativeSrc": "9831:30:43", - "nodeType": "YulFunctionCall", - "src": "9831:30:43" - }, - "nativeSrc": "9828:50:43", - "nodeType": "YulIf", - "src": "9828:50:43" - }, - { - "nativeSrc": "9887:84:43", - "nodeType": "YulVariableDeclaration", - "src": "9887:84:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "9943:9:43", - "nodeType": "YulIdentifier", - "src": "9943:9:43" - }, - { - "name": "offset", - "nativeSrc": "9954:6:43", - "nodeType": "YulIdentifier", - "src": "9954:6:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "9939:3:43", - "nodeType": "YulIdentifier", - "src": "9939:3:43" - }, - "nativeSrc": "9939:22:43", - "nodeType": "YulFunctionCall", - "src": "9939:22:43" - }, - { - "name": "dataEnd", - "nativeSrc": "9963:7:43", - "nodeType": "YulIdentifier", - "src": "9963:7:43" - } - ], - "functionName": { - "name": "abi_decode_bytes_calldata", - "nativeSrc": "9913:25:43", - "nodeType": "YulIdentifier", - "src": "9913:25:43" - }, - "nativeSrc": "9913:58:43", - "nodeType": "YulFunctionCall", - "src": "9913:58:43" - }, - "variables": [ - { - "name": "value1_1", - "nativeSrc": "9891:8:43", - "nodeType": "YulTypedName", - "src": "9891:8:43", - "type": "" - }, - { - "name": "value2_1", - "nativeSrc": "9901:8:43", - "nodeType": "YulTypedName", - "src": "9901:8:43", - "type": "" - } - ] - }, - { - "nativeSrc": "9980:18:43", - "nodeType": "YulAssignment", - "src": "9980:18:43", - "value": { - "name": "value1_1", - "nativeSrc": "9990:8:43", - "nodeType": "YulIdentifier", - "src": "9990:8:43" - }, - "variableNames": [ - { - "name": "value1", - "nativeSrc": "9980:6:43", - "nodeType": "YulIdentifier", - "src": "9980:6:43" - } - ] - }, - { - "nativeSrc": "10007:18:43", - "nodeType": "YulAssignment", - "src": "10007:18:43", - "value": { - "name": "value2_1", - "nativeSrc": "10017:8:43", - "nodeType": "YulIdentifier", - "src": "10017:8:43" - }, - "variableNames": [ - { - "name": "value2", - "nativeSrc": "10007:6:43", - "nodeType": "YulIdentifier", - "src": "10007:6:43" - } - ] - }, - { - "nativeSrc": "10034:46:43", - "nodeType": "YulVariableDeclaration", - "src": "10034:46:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "10064:9:43", - "nodeType": "YulIdentifier", - "src": "10064:9:43" - }, - { - "kind": "number", - "nativeSrc": "10075:3:43", - "nodeType": "YulLiteral", - "src": "10075:3:43", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "10060:3:43", - "nodeType": "YulIdentifier", - "src": "10060:3:43" - }, - "nativeSrc": "10060:19:43", - "nodeType": "YulFunctionCall", - "src": "10060:19:43" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "10047:12:43", - "nodeType": "YulIdentifier", - "src": "10047:12:43" - }, - "nativeSrc": "10047:33:43", - "nodeType": "YulFunctionCall", - "src": "10047:33:43" - }, - "variables": [ - { - "name": "value", - "nativeSrc": "10038:5:43", - "nodeType": "YulTypedName", - "src": "10038:5:43", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nativeSrc": "10114:5:43", - "nodeType": "YulIdentifier", - "src": "10114:5:43" - } - ], - "functionName": { - "name": "validator_revert_address", - "nativeSrc": "10089:24:43", - "nodeType": "YulIdentifier", - "src": "10089:24:43" - }, - "nativeSrc": "10089:31:43", - "nodeType": "YulFunctionCall", - "src": "10089:31:43" - }, - "nativeSrc": "10089:31:43", - "nodeType": "YulExpressionStatement", - "src": "10089:31:43" - }, - { - "nativeSrc": "10129:15:43", - "nodeType": "YulAssignment", - "src": "10129:15:43", - "value": { - "name": "value", - "nativeSrc": "10139:5:43", - "nodeType": "YulIdentifier", - "src": "10139:5:43" - }, - "variableNames": [ - { - "name": "value3", - "nativeSrc": "10129:6:43", - "nodeType": "YulIdentifier", - "src": "10129:6:43" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_struct$_Origin_$40_calldata_ptrt_bytes_calldata_ptrt_address", - "nativeSrc": "9482:668:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "9571:9:43", - "nodeType": "YulTypedName", - "src": "9571:9:43", - "type": "" - }, - { - "name": "dataEnd", - "nativeSrc": "9582:7:43", - "nodeType": "YulTypedName", - "src": "9582:7:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nativeSrc": "9594:6:43", - "nodeType": "YulTypedName", - "src": "9594:6:43", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "9602:6:43", - "nodeType": "YulTypedName", - "src": "9602:6:43", - "type": "" - }, - { - "name": "value2", - "nativeSrc": "9610:6:43", - "nodeType": "YulTypedName", - "src": "9610:6:43", - "type": "" - }, - { - "name": "value3", - "nativeSrc": "9618:6:43", - "nodeType": "YulTypedName", - "src": "9618:6:43", - "type": "" - } - ], - "src": "9482:668:43" - }, - { - "body": { - "nativeSrc": "10267:283:43", - "nodeType": "YulBlock", - "src": "10267:283:43", - "statements": [ - { - "body": { - "nativeSrc": "10316:16:43", - "nodeType": "YulBlock", - "src": "10316:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "10325:1:43", - "nodeType": "YulLiteral", - "src": "10325:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "10328:1:43", - "nodeType": "YulLiteral", - "src": "10328:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "10318:6:43", - "nodeType": "YulIdentifier", - "src": "10318:6:43" - }, - "nativeSrc": "10318:12:43", - "nodeType": "YulFunctionCall", - "src": "10318:12:43" - }, - "nativeSrc": "10318:12:43", - "nodeType": "YulExpressionStatement", - "src": "10318:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "offset", - "nativeSrc": "10295:6:43", - "nodeType": "YulIdentifier", - "src": "10295:6:43" - }, - { - "kind": "number", - "nativeSrc": "10303:4:43", - "nodeType": "YulLiteral", - "src": "10303:4:43", - "type": "", - "value": "0x1f" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "10291:3:43", - "nodeType": "YulIdentifier", - "src": "10291:3:43" - }, - "nativeSrc": "10291:17:43", - "nodeType": "YulFunctionCall", - "src": "10291:17:43" - }, - { - "name": "end", - "nativeSrc": "10310:3:43", - "nodeType": "YulIdentifier", - "src": "10310:3:43" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "10287:3:43", - "nodeType": "YulIdentifier", - "src": "10287:3:43" - }, - "nativeSrc": "10287:27:43", - "nodeType": "YulFunctionCall", - "src": "10287:27:43" - } - ], - "functionName": { - "name": "iszero", - "nativeSrc": "10280:6:43", - "nodeType": "YulIdentifier", - "src": "10280:6:43" - }, - "nativeSrc": "10280:35:43", - "nodeType": "YulFunctionCall", - "src": "10280:35:43" - }, - "nativeSrc": "10277:55:43", - "nodeType": "YulIf", - "src": "10277:55:43" - }, - { - "nativeSrc": "10341:30:43", - "nodeType": "YulAssignment", - "src": "10341:30:43", - "value": { - "arguments": [ - { - "name": "offset", - "nativeSrc": "10364:6:43", - "nodeType": "YulIdentifier", - "src": "10364:6:43" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "10351:12:43", - "nodeType": "YulIdentifier", - "src": "10351:12:43" - }, - "nativeSrc": "10351:20:43", - "nodeType": "YulFunctionCall", - "src": "10351:20:43" - }, - "variableNames": [ - { - "name": "length", - "nativeSrc": "10341:6:43", - "nodeType": "YulIdentifier", - "src": "10341:6:43" - } - ] - }, - { - "body": { - "nativeSrc": "10414:16:43", - "nodeType": "YulBlock", - "src": "10414:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "10423:1:43", - "nodeType": "YulLiteral", - "src": "10423:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "10426:1:43", - "nodeType": "YulLiteral", - "src": "10426:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "10416:6:43", - "nodeType": "YulIdentifier", - "src": "10416:6:43" - }, - "nativeSrc": "10416:12:43", - "nodeType": "YulFunctionCall", - "src": "10416:12:43" - }, - "nativeSrc": "10416:12:43", - "nodeType": "YulExpressionStatement", - "src": "10416:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "length", - "nativeSrc": "10386:6:43", - "nodeType": "YulIdentifier", - "src": "10386:6:43" - }, - { - "kind": "number", - "nativeSrc": "10394:18:43", - "nodeType": "YulLiteral", - "src": "10394:18:43", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "10383:2:43", - "nodeType": "YulIdentifier", - "src": "10383:2:43" - }, - "nativeSrc": "10383:30:43", - "nodeType": "YulFunctionCall", - "src": "10383:30:43" - }, - "nativeSrc": "10380:50:43", - "nodeType": "YulIf", - "src": "10380:50:43" - }, - { - "nativeSrc": "10439:29:43", - "nodeType": "YulAssignment", - "src": "10439:29:43", - "value": { - "arguments": [ - { - "name": "offset", - "nativeSrc": "10455:6:43", - "nodeType": "YulIdentifier", - "src": "10455:6:43" - }, - { - "kind": "number", - "nativeSrc": "10463:4:43", - "nodeType": "YulLiteral", - "src": "10463:4:43", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "10451:3:43", - "nodeType": "YulIdentifier", - "src": "10451:3:43" - }, - "nativeSrc": "10451:17:43", - "nodeType": "YulFunctionCall", - "src": "10451:17:43" - }, - "variableNames": [ - { - "name": "arrayPos", - "nativeSrc": "10439:8:43", - "nodeType": "YulIdentifier", - "src": "10439:8:43" - } - ] - }, - { - "body": { - "nativeSrc": "10528:16:43", - "nodeType": "YulBlock", - "src": "10528:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "10537:1:43", - "nodeType": "YulLiteral", - "src": "10537:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "10540:1:43", - "nodeType": "YulLiteral", - "src": "10540:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "10530:6:43", - "nodeType": "YulIdentifier", - "src": "10530:6:43" - }, - "nativeSrc": "10530:12:43", - "nodeType": "YulFunctionCall", - "src": "10530:12:43" - }, - "nativeSrc": "10530:12:43", - "nodeType": "YulExpressionStatement", - "src": "10530:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "offset", - "nativeSrc": "10491:6:43", - "nodeType": "YulIdentifier", - "src": "10491:6:43" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "10503:1:43", - "nodeType": "YulLiteral", - "src": "10503:1:43", - "type": "", - "value": "5" - }, - { - "name": "length", - "nativeSrc": "10506:6:43", - "nodeType": "YulIdentifier", - "src": "10506:6:43" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "10499:3:43", - "nodeType": "YulIdentifier", - "src": "10499:3:43" - }, - "nativeSrc": "10499:14:43", - "nodeType": "YulFunctionCall", - "src": "10499:14:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "10487:3:43", - "nodeType": "YulIdentifier", - "src": "10487:3:43" - }, - "nativeSrc": "10487:27:43", - "nodeType": "YulFunctionCall", - "src": "10487:27:43" - }, - { - "kind": "number", - "nativeSrc": "10516:4:43", - "nodeType": "YulLiteral", - "src": "10516:4:43", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "10483:3:43", - "nodeType": "YulIdentifier", - "src": "10483:3:43" - }, - "nativeSrc": "10483:38:43", - "nodeType": "YulFunctionCall", - "src": "10483:38:43" - }, - { - "name": "end", - "nativeSrc": "10523:3:43", - "nodeType": "YulIdentifier", - "src": "10523:3:43" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "10480:2:43", - "nodeType": "YulIdentifier", - "src": "10480:2:43" - }, - "nativeSrc": "10480:47:43", - "nodeType": "YulFunctionCall", - "src": "10480:47:43" - }, - "nativeSrc": "10477:67:43", - "nodeType": "YulIf", - "src": "10477:67:43" - } - ] - }, - "name": "abi_decode_array_struct_EnforcedOptionParam_calldata_dyn_calldata", - "nativeSrc": "10155:395:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "offset", - "nativeSrc": "10230:6:43", - "nodeType": "YulTypedName", - "src": "10230:6:43", - "type": "" - }, - { - "name": "end", - "nativeSrc": "10238:3:43", - "nodeType": "YulTypedName", - "src": "10238:3:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "arrayPos", - "nativeSrc": "10246:8:43", - "nodeType": "YulTypedName", - "src": "10246:8:43", - "type": "" - }, - { - "name": "length", - "nativeSrc": "10256:6:43", - "nodeType": "YulTypedName", - "src": "10256:6:43", - "type": "" - } - ], - "src": "10155:395:43" - }, - { - "body": { - "nativeSrc": "10699:360:43", - "nodeType": "YulBlock", - "src": "10699:360:43", - "statements": [ - { - "body": { - "nativeSrc": "10745:16:43", - "nodeType": "YulBlock", - "src": "10745:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "10754:1:43", - "nodeType": "YulLiteral", - "src": "10754:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "10757:1:43", - "nodeType": "YulLiteral", - "src": "10757:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "10747:6:43", - "nodeType": "YulIdentifier", - "src": "10747:6:43" - }, - "nativeSrc": "10747:12:43", - "nodeType": "YulFunctionCall", - "src": "10747:12:43" - }, - "nativeSrc": "10747:12:43", - "nodeType": "YulExpressionStatement", - "src": "10747:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nativeSrc": "10720:7:43", - "nodeType": "YulIdentifier", - "src": "10720:7:43" - }, - { - "name": "headStart", - "nativeSrc": "10729:9:43", - "nodeType": "YulIdentifier", - "src": "10729:9:43" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "10716:3:43", - "nodeType": "YulIdentifier", - "src": "10716:3:43" - }, - "nativeSrc": "10716:23:43", - "nodeType": "YulFunctionCall", - "src": "10716:23:43" - }, - { - "kind": "number", - "nativeSrc": "10741:2:43", - "nodeType": "YulLiteral", - "src": "10741:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "10712:3:43", - "nodeType": "YulIdentifier", - "src": "10712:3:43" - }, - "nativeSrc": "10712:32:43", - "nodeType": "YulFunctionCall", - "src": "10712:32:43" - }, - "nativeSrc": "10709:52:43", - "nodeType": "YulIf", - "src": "10709:52:43" - }, - { - "nativeSrc": "10770:37:43", - "nodeType": "YulVariableDeclaration", - "src": "10770:37:43", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "10797:9:43", - "nodeType": "YulIdentifier", - "src": "10797:9:43" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "10784:12:43", - "nodeType": "YulIdentifier", - "src": "10784:12:43" - }, - "nativeSrc": "10784:23:43", - "nodeType": "YulFunctionCall", - "src": "10784:23:43" - }, - "variables": [ - { - "name": "offset", - "nativeSrc": "10774:6:43", - "nodeType": "YulTypedName", - "src": "10774:6:43", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "10850:16:43", - "nodeType": "YulBlock", - "src": "10850:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "10859:1:43", - "nodeType": "YulLiteral", - "src": "10859:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "10862:1:43", - "nodeType": "YulLiteral", - "src": "10862:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "10852:6:43", - "nodeType": "YulIdentifier", - "src": "10852:6:43" - }, - "nativeSrc": "10852:12:43", - "nodeType": "YulFunctionCall", - "src": "10852:12:43" - }, - "nativeSrc": "10852:12:43", - "nodeType": "YulExpressionStatement", - "src": "10852:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "offset", - "nativeSrc": "10822:6:43", - "nodeType": "YulIdentifier", - "src": "10822:6:43" - }, - { - "kind": "number", - "nativeSrc": "10830:18:43", - "nodeType": "YulLiteral", - "src": "10830:18:43", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "10819:2:43", - "nodeType": "YulIdentifier", - "src": "10819:2:43" - }, - "nativeSrc": "10819:30:43", - "nodeType": "YulFunctionCall", - "src": "10819:30:43" - }, - "nativeSrc": "10816:50:43", - "nodeType": "YulIf", - "src": "10816:50:43" - }, - { - "nativeSrc": "10875:124:43", - "nodeType": "YulVariableDeclaration", - "src": "10875:124:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "10971:9:43", - "nodeType": "YulIdentifier", - "src": "10971:9:43" - }, - { - "name": "offset", - "nativeSrc": "10982:6:43", - "nodeType": "YulIdentifier", - "src": "10982:6:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "10967:3:43", - "nodeType": "YulIdentifier", - "src": "10967:3:43" - }, - "nativeSrc": "10967:22:43", - "nodeType": "YulFunctionCall", - "src": "10967:22:43" - }, - { - "name": "dataEnd", - "nativeSrc": "10991:7:43", - "nodeType": "YulIdentifier", - "src": "10991:7:43" - } - ], - "functionName": { - "name": "abi_decode_array_struct_EnforcedOptionParam_calldata_dyn_calldata", - "nativeSrc": "10901:65:43", - "nodeType": "YulIdentifier", - "src": "10901:65:43" - }, - "nativeSrc": "10901:98:43", - "nodeType": "YulFunctionCall", - "src": "10901:98:43" - }, - "variables": [ - { - "name": "value0_1", - "nativeSrc": "10879:8:43", - "nodeType": "YulTypedName", - "src": "10879:8:43", - "type": "" - }, - { - "name": "value1_1", - "nativeSrc": "10889:8:43", - "nodeType": "YulTypedName", - "src": "10889:8:43", - "type": "" - } - ] - }, - { - "nativeSrc": "11008:18:43", - "nodeType": "YulAssignment", - "src": "11008:18:43", - "value": { - "name": "value0_1", - "nativeSrc": "11018:8:43", - "nodeType": "YulIdentifier", - "src": "11018:8:43" - }, - "variableNames": [ - { - "name": "value0", - "nativeSrc": "11008:6:43", - "nodeType": "YulIdentifier", - "src": "11008:6:43" - } - ] - }, - { - "nativeSrc": "11035:18:43", - "nodeType": "YulAssignment", - "src": "11035:18:43", - "value": { - "name": "value1_1", - "nativeSrc": "11045:8:43", - "nodeType": "YulIdentifier", - "src": "11045:8:43" - }, - "variableNames": [ - { - "name": "value1", - "nativeSrc": "11035:6:43", - "nodeType": "YulIdentifier", - "src": "11035:6:43" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_array$_t_struct$_EnforcedOptionParam_$1932_calldata_ptr_$dyn_calldata_ptr", - "nativeSrc": "10555:504:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "10657:9:43", - "nodeType": "YulTypedName", - "src": "10657:9:43", - "type": "" - }, - { - "name": "dataEnd", - "nativeSrc": "10668:7:43", - "nodeType": "YulTypedName", - "src": "10668:7:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nativeSrc": "10680:6:43", - "nodeType": "YulTypedName", - "src": "10680:6:43", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "10688:6:43", - "nodeType": "YulTypedName", - "src": "10688:6:43", - "type": "" - } - ], - "src": "10555:504:43" - }, - { - "body": { - "nativeSrc": "11133:115:43", - "nodeType": "YulBlock", - "src": "11133:115:43", - "statements": [ - { - "body": { - "nativeSrc": "11179:16:43", - "nodeType": "YulBlock", - "src": "11179:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "11188:1:43", - "nodeType": "YulLiteral", - "src": "11188:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "11191:1:43", - "nodeType": "YulLiteral", - "src": "11191:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "11181:6:43", - "nodeType": "YulIdentifier", - "src": "11181:6:43" - }, - "nativeSrc": "11181:12:43", - "nodeType": "YulFunctionCall", - "src": "11181:12:43" - }, - "nativeSrc": "11181:12:43", - "nodeType": "YulExpressionStatement", - "src": "11181:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nativeSrc": "11154:7:43", - "nodeType": "YulIdentifier", - "src": "11154:7:43" - }, - { - "name": "headStart", - "nativeSrc": "11163:9:43", - "nodeType": "YulIdentifier", - "src": "11163:9:43" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "11150:3:43", - "nodeType": "YulIdentifier", - "src": "11150:3:43" - }, - "nativeSrc": "11150:23:43", - "nodeType": "YulFunctionCall", - "src": "11150:23:43" - }, - { - "kind": "number", - "nativeSrc": "11175:2:43", - "nodeType": "YulLiteral", - "src": "11175:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "11146:3:43", - "nodeType": "YulIdentifier", - "src": "11146:3:43" - }, - "nativeSrc": "11146:32:43", - "nodeType": "YulFunctionCall", - "src": "11146:32:43" - }, - "nativeSrc": "11143:52:43", - "nodeType": "YulIf", - "src": "11143:52:43" - }, - { - "nativeSrc": "11204:38:43", - "nodeType": "YulAssignment", - "src": "11204:38:43", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "11232:9:43", - "nodeType": "YulIdentifier", - "src": "11232:9:43" - } - ], - "functionName": { - "name": "abi_decode_uint32", - "nativeSrc": "11214:17:43", - "nodeType": "YulIdentifier", - "src": "11214:17:43" - }, - "nativeSrc": "11214:28:43", - "nodeType": "YulFunctionCall", - "src": "11214:28:43" - }, - "variableNames": [ - { - "name": "value0", - "nativeSrc": "11204:6:43", - "nodeType": "YulIdentifier", - "src": "11204:6:43" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_uint32", - "nativeSrc": "11064:184:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "11099:9:43", - "nodeType": "YulTypedName", - "src": "11099:9:43", - "type": "" - }, - { - "name": "dataEnd", - "nativeSrc": "11110:7:43", - "nodeType": "YulTypedName", - "src": "11110:7:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nativeSrc": "11122:6:43", - "nodeType": "YulTypedName", - "src": "11122:6:43", - "type": "" - } - ], - "src": "11064:184:43" - }, - { - "body": { - "nativeSrc": "11354:76:43", - "nodeType": "YulBlock", - "src": "11354:76:43", - "statements": [ - { - "nativeSrc": "11364:26:43", - "nodeType": "YulAssignment", - "src": "11364:26:43", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "11376:9:43", - "nodeType": "YulIdentifier", - "src": "11376:9:43" - }, - { - "kind": "number", - "nativeSrc": "11387:2:43", - "nodeType": "YulLiteral", - "src": "11387:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "11372:3:43", - "nodeType": "YulIdentifier", - "src": "11372:3:43" - }, - "nativeSrc": "11372:18:43", - "nodeType": "YulFunctionCall", - "src": "11372:18:43" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "11364:4:43", - "nodeType": "YulIdentifier", - "src": "11364:4:43" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "11406:9:43", - "nodeType": "YulIdentifier", - "src": "11406:9:43" - }, - { - "name": "value0", - "nativeSrc": "11417:6:43", - "nodeType": "YulIdentifier", - "src": "11417:6:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "11399:6:43", - "nodeType": "YulIdentifier", - "src": "11399:6:43" - }, - "nativeSrc": "11399:25:43", - "nodeType": "YulFunctionCall", - "src": "11399:25:43" - }, - "nativeSrc": "11399:25:43", - "nodeType": "YulExpressionStatement", - "src": "11399:25:43" - } - ] - }, - "name": "abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed", - "nativeSrc": "11253:177:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "11323:9:43", - "nodeType": "YulTypedName", - "src": "11323:9:43", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "11334:6:43", - "nodeType": "YulTypedName", - "src": "11334:6:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "11345:4:43", - "nodeType": "YulTypedName", - "src": "11345:4:43", - "type": "" - } - ], - "src": "11253:177:43" - }, - { - "body": { - "nativeSrc": "11556:432:43", - "nodeType": "YulBlock", - "src": "11556:432:43", - "statements": [ - { - "body": { - "nativeSrc": "11602:16:43", - "nodeType": "YulBlock", - "src": "11602:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "11611:1:43", - "nodeType": "YulLiteral", - "src": "11611:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "11614:1:43", - "nodeType": "YulLiteral", - "src": "11614:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "11604:6:43", - "nodeType": "YulIdentifier", - "src": "11604:6:43" - }, - "nativeSrc": "11604:12:43", - "nodeType": "YulFunctionCall", - "src": "11604:12:43" - }, - "nativeSrc": "11604:12:43", - "nodeType": "YulExpressionStatement", - "src": "11604:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nativeSrc": "11577:7:43", - "nodeType": "YulIdentifier", - "src": "11577:7:43" - }, - { - "name": "headStart", - "nativeSrc": "11586:9:43", - "nodeType": "YulIdentifier", - "src": "11586:9:43" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "11573:3:43", - "nodeType": "YulIdentifier", - "src": "11573:3:43" - }, - "nativeSrc": "11573:23:43", - "nodeType": "YulFunctionCall", - "src": "11573:23:43" - }, - { - "kind": "number", - "nativeSrc": "11598:2:43", - "nodeType": "YulLiteral", - "src": "11598:2:43", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "11569:3:43", - "nodeType": "YulIdentifier", - "src": "11569:3:43" - }, - "nativeSrc": "11569:32:43", - "nodeType": "YulFunctionCall", - "src": "11569:32:43" - }, - "nativeSrc": "11566:52:43", - "nodeType": "YulIf", - "src": "11566:52:43" - }, - { - "nativeSrc": "11627:38:43", - "nodeType": "YulAssignment", - "src": "11627:38:43", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "11655:9:43", - "nodeType": "YulIdentifier", - "src": "11655:9:43" - } - ], - "functionName": { - "name": "abi_decode_uint32", - "nativeSrc": "11637:17:43", - "nodeType": "YulIdentifier", - "src": "11637:17:43" - }, - "nativeSrc": "11637:28:43", - "nodeType": "YulFunctionCall", - "src": "11637:28:43" - }, - "variableNames": [ - { - "name": "value0", - "nativeSrc": "11627:6:43", - "nodeType": "YulIdentifier", - "src": "11627:6:43" - } - ] - }, - { - "nativeSrc": "11674:47:43", - "nodeType": "YulAssignment", - "src": "11674:47:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "11706:9:43", - "nodeType": "YulIdentifier", - "src": "11706:9:43" - }, - { - "kind": "number", - "nativeSrc": "11717:2:43", - "nodeType": "YulLiteral", - "src": "11717:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "11702:3:43", - "nodeType": "YulIdentifier", - "src": "11702:3:43" - }, - "nativeSrc": "11702:18:43", - "nodeType": "YulFunctionCall", - "src": "11702:18:43" - } - ], - "functionName": { - "name": "abi_decode_uint16", - "nativeSrc": "11684:17:43", - "nodeType": "YulIdentifier", - "src": "11684:17:43" - }, - "nativeSrc": "11684:37:43", - "nodeType": "YulFunctionCall", - "src": "11684:37:43" - }, - "variableNames": [ - { - "name": "value1", - "nativeSrc": "11674:6:43", - "nodeType": "YulIdentifier", - "src": "11674:6:43" - } - ] - }, - { - "nativeSrc": "11730:46:43", - "nodeType": "YulVariableDeclaration", - "src": "11730:46:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "11761:9:43", - "nodeType": "YulIdentifier", - "src": "11761:9:43" - }, - { - "kind": "number", - "nativeSrc": "11772:2:43", - "nodeType": "YulLiteral", - "src": "11772:2:43", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "11757:3:43", - "nodeType": "YulIdentifier", - "src": "11757:3:43" - }, - "nativeSrc": "11757:18:43", - "nodeType": "YulFunctionCall", - "src": "11757:18:43" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "11744:12:43", - "nodeType": "YulIdentifier", - "src": "11744:12:43" - }, - "nativeSrc": "11744:32:43", - "nodeType": "YulFunctionCall", - "src": "11744:32:43" - }, - "variables": [ - { - "name": "offset", - "nativeSrc": "11734:6:43", - "nodeType": "YulTypedName", - "src": "11734:6:43", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "11819:16:43", - "nodeType": "YulBlock", - "src": "11819:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "11828:1:43", - "nodeType": "YulLiteral", - "src": "11828:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "11831:1:43", - "nodeType": "YulLiteral", - "src": "11831:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "11821:6:43", - "nodeType": "YulIdentifier", - "src": "11821:6:43" - }, - "nativeSrc": "11821:12:43", - "nodeType": "YulFunctionCall", - "src": "11821:12:43" - }, - "nativeSrc": "11821:12:43", - "nodeType": "YulExpressionStatement", - "src": "11821:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "offset", - "nativeSrc": "11791:6:43", - "nodeType": "YulIdentifier", - "src": "11791:6:43" - }, - { - "kind": "number", - "nativeSrc": "11799:18:43", - "nodeType": "YulLiteral", - "src": "11799:18:43", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "11788:2:43", - "nodeType": "YulIdentifier", - "src": "11788:2:43" - }, - "nativeSrc": "11788:30:43", - "nodeType": "YulFunctionCall", - "src": "11788:30:43" - }, - "nativeSrc": "11785:50:43", - "nodeType": "YulIf", - "src": "11785:50:43" - }, - { - "nativeSrc": "11844:84:43", - "nodeType": "YulVariableDeclaration", - "src": "11844:84:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "11900:9:43", - "nodeType": "YulIdentifier", - "src": "11900:9:43" - }, - { - "name": "offset", - "nativeSrc": "11911:6:43", - "nodeType": "YulIdentifier", - "src": "11911:6:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "11896:3:43", - "nodeType": "YulIdentifier", - "src": "11896:3:43" - }, - "nativeSrc": "11896:22:43", - "nodeType": "YulFunctionCall", - "src": "11896:22:43" - }, - { - "name": "dataEnd", - "nativeSrc": "11920:7:43", - "nodeType": "YulIdentifier", - "src": "11920:7:43" - } - ], - "functionName": { - "name": "abi_decode_bytes_calldata", - "nativeSrc": "11870:25:43", - "nodeType": "YulIdentifier", - "src": "11870:25:43" - }, - "nativeSrc": "11870:58:43", - "nodeType": "YulFunctionCall", - "src": "11870:58:43" - }, - "variables": [ - { - "name": "value2_1", - "nativeSrc": "11848:8:43", - "nodeType": "YulTypedName", - "src": "11848:8:43", - "type": "" - }, - { - "name": "value3_1", - "nativeSrc": "11858:8:43", - "nodeType": "YulTypedName", - "src": "11858:8:43", - "type": "" - } - ] - }, - { - "nativeSrc": "11937:18:43", - "nodeType": "YulAssignment", - "src": "11937:18:43", - "value": { - "name": "value2_1", - "nativeSrc": "11947:8:43", - "nodeType": "YulIdentifier", - "src": "11947:8:43" - }, - "variableNames": [ - { - "name": "value2", - "nativeSrc": "11937:6:43", - "nodeType": "YulIdentifier", - "src": "11937:6:43" - } - ] - }, - { - "nativeSrc": "11964:18:43", - "nodeType": "YulAssignment", - "src": "11964:18:43", - "value": { - "name": "value3_1", - "nativeSrc": "11974:8:43", - "nodeType": "YulIdentifier", - "src": "11974:8:43" - }, - "variableNames": [ - { - "name": "value3", - "nativeSrc": "11964:6:43", - "nodeType": "YulIdentifier", - "src": "11964:6:43" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_uint32t_uint16t_bytes_calldata_ptr", - "nativeSrc": "11435:553:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "11498:9:43", - "nodeType": "YulTypedName", - "src": "11498:9:43", - "type": "" - }, - { - "name": "dataEnd", - "nativeSrc": "11509:7:43", - "nodeType": "YulTypedName", - "src": "11509:7:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nativeSrc": "11521:6:43", - "nodeType": "YulTypedName", - "src": "11521:6:43", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "11529:6:43", - "nodeType": "YulTypedName", - "src": "11529:6:43", - "type": "" - }, - { - "name": "value2", - "nativeSrc": "11537:6:43", - "nodeType": "YulTypedName", - "src": "11537:6:43", - "type": "" - }, - { - "name": "value3", - "nativeSrc": "11545:6:43", - "nodeType": "YulTypedName", - "src": "11545:6:43", - "type": "" - } - ], - "src": "11435:553:43" - }, - { - "body": { - "nativeSrc": "12131:360:43", - "nodeType": "YulBlock", - "src": "12131:360:43", - "statements": [ - { - "body": { - "nativeSrc": "12177:16:43", - "nodeType": "YulBlock", - "src": "12177:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "12186:1:43", - "nodeType": "YulLiteral", - "src": "12186:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "12189:1:43", - "nodeType": "YulLiteral", - "src": "12189:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "12179:6:43", - "nodeType": "YulIdentifier", - "src": "12179:6:43" - }, - "nativeSrc": "12179:12:43", - "nodeType": "YulFunctionCall", - "src": "12179:12:43" - }, - "nativeSrc": "12179:12:43", - "nodeType": "YulExpressionStatement", - "src": "12179:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nativeSrc": "12152:7:43", - "nodeType": "YulIdentifier", - "src": "12152:7:43" - }, - { - "name": "headStart", - "nativeSrc": "12161:9:43", - "nodeType": "YulIdentifier", - "src": "12161:9:43" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "12148:3:43", - "nodeType": "YulIdentifier", - "src": "12148:3:43" - }, - "nativeSrc": "12148:23:43", - "nodeType": "YulFunctionCall", - "src": "12148:23:43" - }, - { - "kind": "number", - "nativeSrc": "12173:2:43", - "nodeType": "YulLiteral", - "src": "12173:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "12144:3:43", - "nodeType": "YulIdentifier", - "src": "12144:3:43" - }, - "nativeSrc": "12144:32:43", - "nodeType": "YulFunctionCall", - "src": "12144:32:43" - }, - "nativeSrc": "12141:52:43", - "nodeType": "YulIf", - "src": "12141:52:43" - }, - { - "nativeSrc": "12202:37:43", - "nodeType": "YulVariableDeclaration", - "src": "12202:37:43", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "12229:9:43", - "nodeType": "YulIdentifier", - "src": "12229:9:43" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "12216:12:43", - "nodeType": "YulIdentifier", - "src": "12216:12:43" - }, - "nativeSrc": "12216:23:43", - "nodeType": "YulFunctionCall", - "src": "12216:23:43" - }, - "variables": [ - { - "name": "offset", - "nativeSrc": "12206:6:43", - "nodeType": "YulTypedName", - "src": "12206:6:43", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "12282:16:43", - "nodeType": "YulBlock", - "src": "12282:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "12291:1:43", - "nodeType": "YulLiteral", - "src": "12291:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "12294:1:43", - "nodeType": "YulLiteral", - "src": "12294:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "12284:6:43", - "nodeType": "YulIdentifier", - "src": "12284:6:43" - }, - "nativeSrc": "12284:12:43", - "nodeType": "YulFunctionCall", - "src": "12284:12:43" - }, - "nativeSrc": "12284:12:43", - "nodeType": "YulExpressionStatement", - "src": "12284:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "offset", - "nativeSrc": "12254:6:43", - "nodeType": "YulIdentifier", - "src": "12254:6:43" - }, - { - "kind": "number", - "nativeSrc": "12262:18:43", - "nodeType": "YulLiteral", - "src": "12262:18:43", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "12251:2:43", - "nodeType": "YulIdentifier", - "src": "12251:2:43" - }, - "nativeSrc": "12251:30:43", - "nodeType": "YulFunctionCall", - "src": "12251:30:43" - }, - "nativeSrc": "12248:50:43", - "nodeType": "YulIf", - "src": "12248:50:43" - }, - { - "nativeSrc": "12307:124:43", - "nodeType": "YulVariableDeclaration", - "src": "12307:124:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "12403:9:43", - "nodeType": "YulIdentifier", - "src": "12403:9:43" - }, - { - "name": "offset", - "nativeSrc": "12414:6:43", - "nodeType": "YulIdentifier", - "src": "12414:6:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "12399:3:43", - "nodeType": "YulIdentifier", - "src": "12399:3:43" - }, - "nativeSrc": "12399:22:43", - "nodeType": "YulFunctionCall", - "src": "12399:22:43" - }, - { - "name": "dataEnd", - "nativeSrc": "12423:7:43", - "nodeType": "YulIdentifier", - "src": "12423:7:43" - } - ], - "functionName": { - "name": "abi_decode_array_struct_EnforcedOptionParam_calldata_dyn_calldata", - "nativeSrc": "12333:65:43", - "nodeType": "YulIdentifier", - "src": "12333:65:43" - }, - "nativeSrc": "12333:98:43", - "nodeType": "YulFunctionCall", - "src": "12333:98:43" - }, - "variables": [ - { - "name": "value0_1", - "nativeSrc": "12311:8:43", - "nodeType": "YulTypedName", - "src": "12311:8:43", - "type": "" - }, - { - "name": "value1_1", - "nativeSrc": "12321:8:43", - "nodeType": "YulTypedName", - "src": "12321:8:43", - "type": "" - } - ] - }, - { - "nativeSrc": "12440:18:43", - "nodeType": "YulAssignment", - "src": "12440:18:43", - "value": { - "name": "value0_1", - "nativeSrc": "12450:8:43", - "nodeType": "YulIdentifier", - "src": "12450:8:43" - }, - "variableNames": [ - { - "name": "value0", - "nativeSrc": "12440:6:43", - "nodeType": "YulIdentifier", - "src": "12440:6:43" - } - ] - }, - { - "nativeSrc": "12467:18:43", - "nodeType": "YulAssignment", - "src": "12467:18:43", - "value": { - "name": "value1_1", - "nativeSrc": "12477:8:43", - "nodeType": "YulIdentifier", - "src": "12477:8:43" - }, - "variableNames": [ - { - "name": "value1", - "nativeSrc": "12467:6:43", - "nodeType": "YulIdentifier", - "src": "12467:6:43" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_array$_t_struct$_InboundPacket_$2486_calldata_ptr_$dyn_calldata_ptr", - "nativeSrc": "11993:498:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "12089:9:43", - "nodeType": "YulTypedName", - "src": "12089:9:43", - "type": "" - }, - { - "name": "dataEnd", - "nativeSrc": "12100:7:43", - "nodeType": "YulTypedName", - "src": "12100:7:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nativeSrc": "12112:6:43", - "nodeType": "YulTypedName", - "src": "12112:6:43", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "12120:6:43", - "nodeType": "YulTypedName", - "src": "12120:6:43", - "type": "" - } - ], - "src": "11993:498:43" - }, - { - "body": { - "nativeSrc": "12659:492:43", - "nodeType": "YulBlock", - "src": "12659:492:43", - "statements": [ - { - "nativeSrc": "12669:33:43", - "nodeType": "YulVariableDeclaration", - "src": "12669:33:43", - "value": { - "arguments": [ - { - "name": "dataEnd", - "nativeSrc": "12683:7:43", - "nodeType": "YulIdentifier", - "src": "12683:7:43" - }, - { - "name": "headStart", - "nativeSrc": "12692:9:43", - "nodeType": "YulIdentifier", - "src": "12692:9:43" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "12679:3:43", - "nodeType": "YulIdentifier", - "src": "12679:3:43" - }, - "nativeSrc": "12679:23:43", - "nodeType": "YulFunctionCall", - "src": "12679:23:43" - }, - "variables": [ - { - "name": "_1", - "nativeSrc": "12673:2:43", - "nodeType": "YulTypedName", - "src": "12673:2:43", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "12727:16:43", - "nodeType": "YulBlock", - "src": "12727:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "12736:1:43", - "nodeType": "YulLiteral", - "src": "12736:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "12739:1:43", - "nodeType": "YulLiteral", - "src": "12739:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "12729:6:43", - "nodeType": "YulIdentifier", - "src": "12729:6:43" - }, - "nativeSrc": "12729:12:43", - "nodeType": "YulFunctionCall", - "src": "12729:12:43" - }, - "nativeSrc": "12729:12:43", - "nodeType": "YulExpressionStatement", - "src": "12729:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "_1", - "nativeSrc": "12718:2:43", - "nodeType": "YulIdentifier", - "src": "12718:2:43" - }, - { - "kind": "number", - "nativeSrc": "12722:3:43", - "nodeType": "YulLiteral", - "src": "12722:3:43", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "12714:3:43", - "nodeType": "YulIdentifier", - "src": "12714:3:43" - }, - "nativeSrc": "12714:12:43", - "nodeType": "YulFunctionCall", - "src": "12714:12:43" - }, - "nativeSrc": "12711:32:43", - "nodeType": "YulIf", - "src": "12711:32:43" - }, - { - "nativeSrc": "12752:37:43", - "nodeType": "YulVariableDeclaration", - "src": "12752:37:43", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "12779:9:43", - "nodeType": "YulIdentifier", - "src": "12779:9:43" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "12766:12:43", - "nodeType": "YulIdentifier", - "src": "12766:12:43" - }, - "nativeSrc": "12766:23:43", - "nodeType": "YulFunctionCall", - "src": "12766:23:43" - }, - "variables": [ - { - "name": "offset", - "nativeSrc": "12756:6:43", - "nodeType": "YulTypedName", - "src": "12756:6:43", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "12832:16:43", - "nodeType": "YulBlock", - "src": "12832:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "12841:1:43", - "nodeType": "YulLiteral", - "src": "12841:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "12844:1:43", - "nodeType": "YulLiteral", - "src": "12844:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "12834:6:43", - "nodeType": "YulIdentifier", - "src": "12834:6:43" - }, - "nativeSrc": "12834:12:43", - "nodeType": "YulFunctionCall", - "src": "12834:12:43" - }, - "nativeSrc": "12834:12:43", - "nodeType": "YulExpressionStatement", - "src": "12834:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "offset", - "nativeSrc": "12804:6:43", - "nodeType": "YulIdentifier", - "src": "12804:6:43" - }, - { - "kind": "number", - "nativeSrc": "12812:18:43", - "nodeType": "YulLiteral", - "src": "12812:18:43", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "12801:2:43", - "nodeType": "YulIdentifier", - "src": "12801:2:43" - }, - "nativeSrc": "12801:30:43", - "nodeType": "YulFunctionCall", - "src": "12801:30:43" - }, - "nativeSrc": "12798:50:43", - "nodeType": "YulIf", - "src": "12798:50:43" - }, - { - "nativeSrc": "12857:79:43", - "nodeType": "YulAssignment", - "src": "12857:79:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "12908:9:43", - "nodeType": "YulIdentifier", - "src": "12908:9:43" - }, - { - "name": "offset", - "nativeSrc": "12919:6:43", - "nodeType": "YulIdentifier", - "src": "12919:6:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "12904:3:43", - "nodeType": "YulIdentifier", - "src": "12904:3:43" - }, - "nativeSrc": "12904:22:43", - "nodeType": "YulFunctionCall", - "src": "12904:22:43" - }, - { - "name": "dataEnd", - "nativeSrc": "12928:7:43", - "nodeType": "YulIdentifier", - "src": "12928:7:43" - } - ], - "functionName": { - "name": "abi_decode_struct_SendParam_calldata", - "nativeSrc": "12867:36:43", - "nodeType": "YulIdentifier", - "src": "12867:36:43" - }, - "nativeSrc": "12867:69:43", - "nodeType": "YulFunctionCall", - "src": "12867:69:43" - }, - "variableNames": [ - { - "name": "value0", - "nativeSrc": "12857:6:43", - "nodeType": "YulIdentifier", - "src": "12857:6:43" - } - ] - }, - { - "body": { - "nativeSrc": "12974:16:43", - "nodeType": "YulBlock", - "src": "12974:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "12983:1:43", - "nodeType": "YulLiteral", - "src": "12983:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "12986:1:43", - "nodeType": "YulLiteral", - "src": "12986:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "12976:6:43", - "nodeType": "YulIdentifier", - "src": "12976:6:43" - }, - "nativeSrc": "12976:12:43", - "nodeType": "YulFunctionCall", - "src": "12976:12:43" - }, - "nativeSrc": "12976:12:43", - "nodeType": "YulExpressionStatement", - "src": "12976:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "_1", - "nativeSrc": "12956:2:43", - "nodeType": "YulIdentifier", - "src": "12956:2:43" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "12964:2:43", - "nodeType": "YulLiteral", - "src": "12964:2:43", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "not", - "nativeSrc": "12960:3:43", - "nodeType": "YulIdentifier", - "src": "12960:3:43" - }, - "nativeSrc": "12960:7:43", - "nodeType": "YulFunctionCall", - "src": "12960:7:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "12952:3:43", - "nodeType": "YulIdentifier", - "src": "12952:3:43" - }, - "nativeSrc": "12952:16:43", - "nodeType": "YulFunctionCall", - "src": "12952:16:43" - }, - { - "kind": "number", - "nativeSrc": "12970:2:43", - "nodeType": "YulLiteral", - "src": "12970:2:43", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "12948:3:43", - "nodeType": "YulIdentifier", - "src": "12948:3:43" - }, - "nativeSrc": "12948:25:43", - "nodeType": "YulFunctionCall", - "src": "12948:25:43" - }, - "nativeSrc": "12945:45:43", - "nodeType": "YulIf", - "src": "12945:45:43" - }, - { - "nativeSrc": "12999:28:43", - "nodeType": "YulAssignment", - "src": "12999:28:43", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "13013:9:43", - "nodeType": "YulIdentifier", - "src": "13013:9:43" - }, - { - "kind": "number", - "nativeSrc": "13024:2:43", - "nodeType": "YulLiteral", - "src": "13024:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "13009:3:43", - "nodeType": "YulIdentifier", - "src": "13009:3:43" - }, - "nativeSrc": "13009:18:43", - "nodeType": "YulFunctionCall", - "src": "13009:18:43" - }, - "variableNames": [ - { - "name": "value1", - "nativeSrc": "12999:6:43", - "nodeType": "YulIdentifier", - "src": "12999:6:43" - } - ] - }, - { - "nativeSrc": "13036:45:43", - "nodeType": "YulVariableDeclaration", - "src": "13036:45:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "13066:9:43", - "nodeType": "YulIdentifier", - "src": "13066:9:43" - }, - { - "kind": "number", - "nativeSrc": "13077:2:43", - "nodeType": "YulLiteral", - "src": "13077:2:43", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "13062:3:43", - "nodeType": "YulIdentifier", - "src": "13062:3:43" - }, - "nativeSrc": "13062:18:43", - "nodeType": "YulFunctionCall", - "src": "13062:18:43" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "13049:12:43", - "nodeType": "YulIdentifier", - "src": "13049:12:43" - }, - "nativeSrc": "13049:32:43", - "nodeType": "YulFunctionCall", - "src": "13049:32:43" - }, - "variables": [ - { - "name": "value", - "nativeSrc": "13040:5:43", - "nodeType": "YulTypedName", - "src": "13040:5:43", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nativeSrc": "13115:5:43", - "nodeType": "YulIdentifier", - "src": "13115:5:43" - } - ], - "functionName": { - "name": "validator_revert_address", - "nativeSrc": "13090:24:43", - "nodeType": "YulIdentifier", - "src": "13090:24:43" - }, - "nativeSrc": "13090:31:43", - "nodeType": "YulFunctionCall", - "src": "13090:31:43" - }, - "nativeSrc": "13090:31:43", - "nodeType": "YulExpressionStatement", - "src": "13090:31:43" - }, - { - "nativeSrc": "13130:15:43", - "nodeType": "YulAssignment", - "src": "13130:15:43", - "value": { - "name": "value", - "nativeSrc": "13140:5:43", - "nodeType": "YulIdentifier", - "src": "13140:5:43" - }, - "variableNames": [ - { - "name": "value2", - "nativeSrc": "13130:6:43", - "nodeType": "YulIdentifier", - "src": "13130:6:43" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_struct$_SendParam_$3382_calldata_ptrt_struct$_MessagingFee_$33_calldata_ptrt_address", - "nativeSrc": "12496:655:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "12609:9:43", - "nodeType": "YulTypedName", - "src": "12609:9:43", - "type": "" - }, - { - "name": "dataEnd", - "nativeSrc": "12620:7:43", - "nodeType": "YulTypedName", - "src": "12620:7:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nativeSrc": "12632:6:43", - "nodeType": "YulTypedName", - "src": "12632:6:43", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "12640:6:43", - "nodeType": "YulTypedName", - "src": "12640:6:43", - "type": "" - }, - { - "name": "value2", - "nativeSrc": "12648:6:43", - "nodeType": "YulTypedName", - "src": "12648:6:43", - "type": "" - } - ], - "src": "12496:655:43" - }, - { - "body": { - "nativeSrc": "13405:360:43", - "nodeType": "YulBlock", - "src": "13405:360:43", - "statements": [ - { - "nativeSrc": "13415:27:43", - "nodeType": "YulAssignment", - "src": "13415:27:43", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "13427:9:43", - "nodeType": "YulIdentifier", - "src": "13427:9:43" - }, - { - "kind": "number", - "nativeSrc": "13438:3:43", - "nodeType": "YulLiteral", - "src": "13438:3:43", - "type": "", - "value": "192" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "13423:3:43", - "nodeType": "YulIdentifier", - "src": "13423:3:43" - }, - "nativeSrc": "13423:19:43", - "nodeType": "YulFunctionCall", - "src": "13423:19:43" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "13415:4:43", - "nodeType": "YulIdentifier", - "src": "13415:4:43" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "13458:9:43", - "nodeType": "YulIdentifier", - "src": "13458:9:43" - }, - { - "arguments": [ - { - "name": "value0", - "nativeSrc": "13475:6:43", - "nodeType": "YulIdentifier", - "src": "13475:6:43" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "13469:5:43", - "nodeType": "YulIdentifier", - "src": "13469:5:43" - }, - "nativeSrc": "13469:13:43", - "nodeType": "YulFunctionCall", - "src": "13469:13:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "13451:6:43", - "nodeType": "YulIdentifier", - "src": "13451:6:43" - }, - "nativeSrc": "13451:32:43", - "nodeType": "YulFunctionCall", - "src": "13451:32:43" - }, - "nativeSrc": "13451:32:43", - "nodeType": "YulExpressionStatement", - "src": "13451:32:43" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "13503:9:43", - "nodeType": "YulIdentifier", - "src": "13503:9:43" - }, - { - "kind": "number", - "nativeSrc": "13514:4:43", - "nodeType": "YulLiteral", - "src": "13514:4:43", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "13499:3:43", - "nodeType": "YulIdentifier", - "src": "13499:3:43" - }, - "nativeSrc": "13499:20:43", - "nodeType": "YulFunctionCall", - "src": "13499:20:43" - }, - { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nativeSrc": "13535:6:43", - "nodeType": "YulIdentifier", - "src": "13535:6:43" - }, - { - "kind": "number", - "nativeSrc": "13543:4:43", - "nodeType": "YulLiteral", - "src": "13543:4:43", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "13531:3:43", - "nodeType": "YulIdentifier", - "src": "13531:3:43" - }, - "nativeSrc": "13531:17:43", - "nodeType": "YulFunctionCall", - "src": "13531:17:43" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "13525:5:43", - "nodeType": "YulIdentifier", - "src": "13525:5:43" - }, - "nativeSrc": "13525:24:43", - "nodeType": "YulFunctionCall", - "src": "13525:24:43" - }, - { - "kind": "number", - "nativeSrc": "13551:18:43", - "nodeType": "YulLiteral", - "src": "13551:18:43", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "13521:3:43", - "nodeType": "YulIdentifier", - "src": "13521:3:43" - }, - "nativeSrc": "13521:49:43", - "nodeType": "YulFunctionCall", - "src": "13521:49:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "13492:6:43", - "nodeType": "YulIdentifier", - "src": "13492:6:43" - }, - "nativeSrc": "13492:79:43", - "nodeType": "YulFunctionCall", - "src": "13492:79:43" - }, - "nativeSrc": "13492:79:43", - "nodeType": "YulExpressionStatement", - "src": "13492:79:43" - }, - { - "nativeSrc": "13580:44:43", - "nodeType": "YulVariableDeclaration", - "src": "13580:44:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nativeSrc": "13610:6:43", - "nodeType": "YulIdentifier", - "src": "13610:6:43" - }, - { - "kind": "number", - "nativeSrc": "13618:4:43", - "nodeType": "YulLiteral", - "src": "13618:4:43", - "type": "", - "value": "0x40" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "13606:3:43", - "nodeType": "YulIdentifier", - "src": "13606:3:43" - }, - "nativeSrc": "13606:17:43", - "nodeType": "YulFunctionCall", - "src": "13606:17:43" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "13600:5:43", - "nodeType": "YulIdentifier", - "src": "13600:5:43" - }, - "nativeSrc": "13600:24:43", - "nodeType": "YulFunctionCall", - "src": "13600:24:43" - }, - "variables": [ - { - "name": "memberValue0", - "nativeSrc": "13584:12:43", - "nodeType": "YulTypedName", - "src": "13584:12:43", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "memberValue0", - "nativeSrc": "13660:12:43", - "nodeType": "YulIdentifier", - "src": "13660:12:43" - }, - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "13678:9:43", - "nodeType": "YulIdentifier", - "src": "13678:9:43" - }, - { - "kind": "number", - "nativeSrc": "13689:4:43", - "nodeType": "YulLiteral", - "src": "13689:4:43", - "type": "", - "value": "0x40" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "13674:3:43", - "nodeType": "YulIdentifier", - "src": "13674:3:43" - }, - "nativeSrc": "13674:20:43", - "nodeType": "YulFunctionCall", - "src": "13674:20:43" - } - ], - "functionName": { - "name": "abi_encode_struct_OFTLimit", - "nativeSrc": "13633:26:43", - "nodeType": "YulIdentifier", - "src": "13633:26:43" - }, - "nativeSrc": "13633:62:43", - "nodeType": "YulFunctionCall", - "src": "13633:62:43" - }, - "nativeSrc": "13633:62:43", - "nodeType": "YulExpressionStatement", - "src": "13633:62:43" - }, - { - "expression": { - "arguments": [ - { - "name": "value1", - "nativeSrc": "13731:6:43", - "nodeType": "YulIdentifier", - "src": "13731:6:43" - }, - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "13743:9:43", - "nodeType": "YulIdentifier", - "src": "13743:9:43" - }, - { - "kind": "number", - "nativeSrc": "13754:3:43", - "nodeType": "YulLiteral", - "src": "13754:3:43", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "13739:3:43", - "nodeType": "YulIdentifier", - "src": "13739:3:43" - }, - "nativeSrc": "13739:19:43", - "nodeType": "YulFunctionCall", - "src": "13739:19:43" - } - ], - "functionName": { - "name": "abi_encode_struct_OFTLimit", - "nativeSrc": "13704:26:43", - "nodeType": "YulIdentifier", - "src": "13704:26:43" - }, - "nativeSrc": "13704:55:43", - "nodeType": "YulFunctionCall", - "src": "13704:55:43" - }, - "nativeSrc": "13704:55:43", - "nodeType": "YulExpressionStatement", - "src": "13704:55:43" - } - ] - }, - "name": "abi_encode_tuple_t_struct$_MessagingReceipt_$28_memory_ptr_t_struct$_OFTReceipt_$3394_memory_ptr__to_t_struct$_MessagingReceipt_$28_memory_ptr_t_struct$_OFTReceipt_$3394_memory_ptr__fromStack_reversed", - "nativeSrc": "13156:609:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "13366:9:43", - "nodeType": "YulTypedName", - "src": "13366:9:43", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "13377:6:43", - "nodeType": "YulTypedName", - "src": "13377:6:43", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "13385:6:43", - "nodeType": "YulTypedName", - "src": "13385:6:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "13396:4:43", - "nodeType": "YulTypedName", - "src": "13396:4:43", - "type": "" - } - ], - "src": "13156:609:43" - }, - { - "body": { - "nativeSrc": "13857:301:43", - "nodeType": "YulBlock", - "src": "13857:301:43", - "statements": [ - { - "body": { - "nativeSrc": "13903:16:43", - "nodeType": "YulBlock", - "src": "13903:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "13912:1:43", - "nodeType": "YulLiteral", - "src": "13912:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "13915:1:43", - "nodeType": "YulLiteral", - "src": "13915:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "13905:6:43", - "nodeType": "YulIdentifier", - "src": "13905:6:43" - }, - "nativeSrc": "13905:12:43", - "nodeType": "YulFunctionCall", - "src": "13905:12:43" - }, - "nativeSrc": "13905:12:43", - "nodeType": "YulExpressionStatement", - "src": "13905:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nativeSrc": "13878:7:43", - "nodeType": "YulIdentifier", - "src": "13878:7:43" - }, - { - "name": "headStart", - "nativeSrc": "13887:9:43", - "nodeType": "YulIdentifier", - "src": "13887:9:43" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "13874:3:43", - "nodeType": "YulIdentifier", - "src": "13874:3:43" - }, - "nativeSrc": "13874:23:43", - "nodeType": "YulFunctionCall", - "src": "13874:23:43" - }, - { - "kind": "number", - "nativeSrc": "13899:2:43", - "nodeType": "YulLiteral", - "src": "13899:2:43", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "13870:3:43", - "nodeType": "YulIdentifier", - "src": "13870:3:43" - }, - "nativeSrc": "13870:32:43", - "nodeType": "YulFunctionCall", - "src": "13870:32:43" - }, - "nativeSrc": "13867:52:43", - "nodeType": "YulIf", - "src": "13867:52:43" - }, - { - "nativeSrc": "13928:36:43", - "nodeType": "YulVariableDeclaration", - "src": "13928:36:43", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "13954:9:43", - "nodeType": "YulIdentifier", - "src": "13954:9:43" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "13941:12:43", - "nodeType": "YulIdentifier", - "src": "13941:12:43" - }, - "nativeSrc": "13941:23:43", - "nodeType": "YulFunctionCall", - "src": "13941:23:43" - }, - "variables": [ - { - "name": "value", - "nativeSrc": "13932:5:43", - "nodeType": "YulTypedName", - "src": "13932:5:43", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nativeSrc": "13998:5:43", - "nodeType": "YulIdentifier", - "src": "13998:5:43" - } - ], - "functionName": { - "name": "validator_revert_address", - "nativeSrc": "13973:24:43", - "nodeType": "YulIdentifier", - "src": "13973:24:43" - }, - "nativeSrc": "13973:31:43", - "nodeType": "YulFunctionCall", - "src": "13973:31:43" - }, - "nativeSrc": "13973:31:43", - "nodeType": "YulExpressionStatement", - "src": "13973:31:43" - }, - { - "nativeSrc": "14013:15:43", - "nodeType": "YulAssignment", - "src": "14013:15:43", - "value": { - "name": "value", - "nativeSrc": "14023:5:43", - "nodeType": "YulIdentifier", - "src": "14023:5:43" - }, - "variableNames": [ - { - "name": "value0", - "nativeSrc": "14013:6:43", - "nodeType": "YulIdentifier", - "src": "14013:6:43" - } - ] - }, - { - "nativeSrc": "14037:47:43", - "nodeType": "YulVariableDeclaration", - "src": "14037:47:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "14069:9:43", - "nodeType": "YulIdentifier", - "src": "14069:9:43" - }, - { - "kind": "number", - "nativeSrc": "14080:2:43", - "nodeType": "YulLiteral", - "src": "14080:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "14065:3:43", - "nodeType": "YulIdentifier", - "src": "14065:3:43" - }, - "nativeSrc": "14065:18:43", - "nodeType": "YulFunctionCall", - "src": "14065:18:43" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "14052:12:43", - "nodeType": "YulIdentifier", - "src": "14052:12:43" - }, - "nativeSrc": "14052:32:43", - "nodeType": "YulFunctionCall", - "src": "14052:32:43" - }, - "variables": [ - { - "name": "value_1", - "nativeSrc": "14041:7:43", - "nodeType": "YulTypedName", - "src": "14041:7:43", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value_1", - "nativeSrc": "14118:7:43", - "nodeType": "YulIdentifier", - "src": "14118:7:43" - } - ], - "functionName": { - "name": "validator_revert_address", - "nativeSrc": "14093:24:43", - "nodeType": "YulIdentifier", - "src": "14093:24:43" - }, - "nativeSrc": "14093:33:43", - "nodeType": "YulFunctionCall", - "src": "14093:33:43" - }, - "nativeSrc": "14093:33:43", - "nodeType": "YulExpressionStatement", - "src": "14093:33:43" - }, - { - "nativeSrc": "14135:17:43", - "nodeType": "YulAssignment", - "src": "14135:17:43", - "value": { - "name": "value_1", - "nativeSrc": "14145:7:43", - "nodeType": "YulIdentifier", - "src": "14145:7:43" - }, - "variableNames": [ - { - "name": "value1", - "nativeSrc": "14135:6:43", - "nodeType": "YulIdentifier", - "src": "14135:6:43" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_addresst_address", - "nativeSrc": "13770:388:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "13815:9:43", - "nodeType": "YulTypedName", - "src": "13815:9:43", - "type": "" - }, - { - "name": "dataEnd", - "nativeSrc": "13826:7:43", - "nodeType": "YulTypedName", - "src": "13826:7:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nativeSrc": "13838:6:43", - "nodeType": "YulTypedName", - "src": "13838:6:43", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "13846:6:43", - "nodeType": "YulTypedName", - "src": "13846:6:43", - "type": "" - } - ], - "src": "13770:388:43" - }, - { - "body": { - "nativeSrc": "14257:140:43", - "nodeType": "YulBlock", - "src": "14257:140:43", - "statements": [ - { - "body": { - "nativeSrc": "14303:16:43", - "nodeType": "YulBlock", - "src": "14303:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "14312:1:43", - "nodeType": "YulLiteral", - "src": "14312:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "14315:1:43", - "nodeType": "YulLiteral", - "src": "14315:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "14305:6:43", - "nodeType": "YulIdentifier", - "src": "14305:6:43" - }, - "nativeSrc": "14305:12:43", - "nodeType": "YulFunctionCall", - "src": "14305:12:43" - }, - "nativeSrc": "14305:12:43", - "nodeType": "YulExpressionStatement", - "src": "14305:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nativeSrc": "14278:7:43", - "nodeType": "YulIdentifier", - "src": "14278:7:43" - }, - { - "name": "headStart", - "nativeSrc": "14287:9:43", - "nodeType": "YulIdentifier", - "src": "14287:9:43" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "14274:3:43", - "nodeType": "YulIdentifier", - "src": "14274:3:43" - }, - "nativeSrc": "14274:23:43", - "nodeType": "YulFunctionCall", - "src": "14274:23:43" - }, - { - "kind": "number", - "nativeSrc": "14299:2:43", - "nodeType": "YulLiteral", - "src": "14299:2:43", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "14270:3:43", - "nodeType": "YulIdentifier", - "src": "14270:3:43" - }, - "nativeSrc": "14270:32:43", - "nodeType": "YulFunctionCall", - "src": "14270:32:43" - }, - "nativeSrc": "14267:52:43", - "nodeType": "YulIf", - "src": "14267:52:43" - }, - { - "nativeSrc": "14328:63:43", - "nodeType": "YulAssignment", - "src": "14328:63:43", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "14372:9:43", - "nodeType": "YulIdentifier", - "src": "14372:9:43" - }, - { - "name": "dataEnd", - "nativeSrc": "14383:7:43", - "nodeType": "YulIdentifier", - "src": "14383:7:43" - } - ], - "functionName": { - "name": "abi_decode_struct_Origin_calldata", - "nativeSrc": "14338:33:43", - "nodeType": "YulIdentifier", - "src": "14338:33:43" - }, - "nativeSrc": "14338:53:43", - "nodeType": "YulFunctionCall", - "src": "14338:53:43" - }, - "variableNames": [ - { - "name": "value0", - "nativeSrc": "14328:6:43", - "nodeType": "YulIdentifier", - "src": "14328:6:43" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_struct$_Origin_$40_calldata_ptr", - "nativeSrc": "14163:234:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "14223:9:43", - "nodeType": "YulTypedName", - "src": "14223:9:43", - "type": "" - }, - { - "name": "dataEnd", - "nativeSrc": "14234:7:43", - "nodeType": "YulTypedName", - "src": "14234:7:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nativeSrc": "14246:6:43", - "nodeType": "YulTypedName", - "src": "14246:6:43", - "type": "" - } - ], - "src": "14163:234:43" - }, - { - "body": { - "nativeSrc": "14457:325:43", - "nodeType": "YulBlock", - "src": "14457:325:43", - "statements": [ - { - "nativeSrc": "14467:22:43", - "nodeType": "YulAssignment", - "src": "14467:22:43", - "value": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "14481:1:43", - "nodeType": "YulLiteral", - "src": "14481:1:43", - "type": "", - "value": "1" - }, - { - "name": "data", - "nativeSrc": "14484:4:43", - "nodeType": "YulIdentifier", - "src": "14484:4:43" - } - ], - "functionName": { - "name": "shr", - "nativeSrc": "14477:3:43", - "nodeType": "YulIdentifier", - "src": "14477:3:43" - }, - "nativeSrc": "14477:12:43", - "nodeType": "YulFunctionCall", - "src": "14477:12:43" - }, - "variableNames": [ - { - "name": "length", - "nativeSrc": "14467:6:43", - "nodeType": "YulIdentifier", - "src": "14467:6:43" - } - ] - }, - { - "nativeSrc": "14498:38:43", - "nodeType": "YulVariableDeclaration", - "src": "14498:38:43", - "value": { - "arguments": [ - { - "name": "data", - "nativeSrc": "14528:4:43", - "nodeType": "YulIdentifier", - "src": "14528:4:43" - }, - { - "kind": "number", - "nativeSrc": "14534:1:43", - "nodeType": "YulLiteral", - "src": "14534:1:43", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "14524:3:43", - "nodeType": "YulIdentifier", - "src": "14524:3:43" - }, - "nativeSrc": "14524:12:43", - "nodeType": "YulFunctionCall", - "src": "14524:12:43" - }, - "variables": [ - { - "name": "outOfPlaceEncoding", - "nativeSrc": "14502:18:43", - "nodeType": "YulTypedName", - "src": "14502:18:43", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "14575:31:43", - "nodeType": "YulBlock", - "src": "14575:31:43", - "statements": [ - { - "nativeSrc": "14577:27:43", - "nodeType": "YulAssignment", - "src": "14577:27:43", - "value": { - "arguments": [ - { - "name": "length", - "nativeSrc": "14591:6:43", - "nodeType": "YulIdentifier", - "src": "14591:6:43" - }, - { - "kind": "number", - "nativeSrc": "14599:4:43", - "nodeType": "YulLiteral", - "src": "14599:4:43", - "type": "", - "value": "0x7f" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "14587:3:43", - "nodeType": "YulIdentifier", - "src": "14587:3:43" - }, - "nativeSrc": "14587:17:43", - "nodeType": "YulFunctionCall", - "src": "14587:17:43" - }, - "variableNames": [ - { - "name": "length", - "nativeSrc": "14577:6:43", - "nodeType": "YulIdentifier", - "src": "14577:6:43" - } - ] - } - ] - }, - "condition": { - "arguments": [ - { - "name": "outOfPlaceEncoding", - "nativeSrc": "14555:18:43", - "nodeType": "YulIdentifier", - "src": "14555:18:43" - } - ], - "functionName": { - "name": "iszero", - "nativeSrc": "14548:6:43", - "nodeType": "YulIdentifier", - "src": "14548:6:43" - }, - "nativeSrc": "14548:26:43", - "nodeType": "YulFunctionCall", - "src": "14548:26:43" - }, - "nativeSrc": "14545:61:43", - "nodeType": "YulIf", - "src": "14545:61:43" - }, - { - "body": { - "nativeSrc": "14665:111:43", - "nodeType": "YulBlock", - "src": "14665:111:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "14686:1:43", - "nodeType": "YulLiteral", - "src": "14686:1:43", - "type": "", - "value": "0" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "14693:3:43", - "nodeType": "YulLiteral", - "src": "14693:3:43", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nativeSrc": "14698:10:43", - "nodeType": "YulLiteral", - "src": "14698:10:43", - "type": "", - "value": "0x4e487b71" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "14689:3:43", - "nodeType": "YulIdentifier", - "src": "14689:3:43" - }, - "nativeSrc": "14689:20:43", - "nodeType": "YulFunctionCall", - "src": "14689:20:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "14679:6:43", - "nodeType": "YulIdentifier", - "src": "14679:6:43" - }, - "nativeSrc": "14679:31:43", - "nodeType": "YulFunctionCall", - "src": "14679:31:43" - }, - "nativeSrc": "14679:31:43", - "nodeType": "YulExpressionStatement", - "src": "14679:31:43" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "14730:1:43", - "nodeType": "YulLiteral", - "src": "14730:1:43", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nativeSrc": "14733:4:43", - "nodeType": "YulLiteral", - "src": "14733:4:43", - "type": "", - "value": "0x22" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "14723:6:43", - "nodeType": "YulIdentifier", - "src": "14723:6:43" - }, - "nativeSrc": "14723:15:43", - "nodeType": "YulFunctionCall", - "src": "14723:15:43" - }, - "nativeSrc": "14723:15:43", - "nodeType": "YulExpressionStatement", - "src": "14723:15:43" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "14758:1:43", - "nodeType": "YulLiteral", - "src": "14758:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "14761:4:43", - "nodeType": "YulLiteral", - "src": "14761:4:43", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "14751:6:43", - "nodeType": "YulIdentifier", - "src": "14751:6:43" - }, - "nativeSrc": "14751:15:43", - "nodeType": "YulFunctionCall", - "src": "14751:15:43" - }, - "nativeSrc": "14751:15:43", - "nodeType": "YulExpressionStatement", - "src": "14751:15:43" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "outOfPlaceEncoding", - "nativeSrc": "14621:18:43", - "nodeType": "YulIdentifier", - "src": "14621:18:43" - }, - { - "arguments": [ - { - "name": "length", - "nativeSrc": "14644:6:43", - "nodeType": "YulIdentifier", - "src": "14644:6:43" - }, - { - "kind": "number", - "nativeSrc": "14652:2:43", - "nodeType": "YulLiteral", - "src": "14652:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "lt", - "nativeSrc": "14641:2:43", - "nodeType": "YulIdentifier", - "src": "14641:2:43" - }, - "nativeSrc": "14641:14:43", - "nodeType": "YulFunctionCall", - "src": "14641:14:43" - } - ], - "functionName": { - "name": "eq", - "nativeSrc": "14618:2:43", - "nodeType": "YulIdentifier", - "src": "14618:2:43" - }, - "nativeSrc": "14618:38:43", - "nodeType": "YulFunctionCall", - "src": "14618:38:43" - }, - "nativeSrc": "14615:161:43", - "nodeType": "YulIf", - "src": "14615:161:43" - } - ] - }, - "name": "extract_byte_array_length", - "nativeSrc": "14402:380:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "data", - "nativeSrc": "14437:4:43", - "nodeType": "YulTypedName", - "src": "14437:4:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "length", - "nativeSrc": "14446:6:43", - "nodeType": "YulTypedName", - "src": "14446:6:43", - "type": "" - } - ], - "src": "14402:380:43" - }, - { - "body": { - "nativeSrc": "14819:95:43", - "nodeType": "YulBlock", - "src": "14819:95:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "14836:1:43", - "nodeType": "YulLiteral", - "src": "14836:1:43", - "type": "", - "value": "0" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "14843:3:43", - "nodeType": "YulLiteral", - "src": "14843:3:43", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nativeSrc": "14848:10:43", - "nodeType": "YulLiteral", - "src": "14848:10:43", - "type": "", - "value": "0x4e487b71" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "14839:3:43", - "nodeType": "YulIdentifier", - "src": "14839:3:43" - }, - "nativeSrc": "14839:20:43", - "nodeType": "YulFunctionCall", - "src": "14839:20:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "14829:6:43", - "nodeType": "YulIdentifier", - "src": "14829:6:43" - }, - "nativeSrc": "14829:31:43", - "nodeType": "YulFunctionCall", - "src": "14829:31:43" - }, - "nativeSrc": "14829:31:43", - "nodeType": "YulExpressionStatement", - "src": "14829:31:43" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "14876:1:43", - "nodeType": "YulLiteral", - "src": "14876:1:43", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nativeSrc": "14879:4:43", - "nodeType": "YulLiteral", - "src": "14879:4:43", - "type": "", - "value": "0x41" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "14869:6:43", - "nodeType": "YulIdentifier", - "src": "14869:6:43" - }, - "nativeSrc": "14869:15:43", - "nodeType": "YulFunctionCall", - "src": "14869:15:43" - }, - "nativeSrc": "14869:15:43", - "nodeType": "YulExpressionStatement", - "src": "14869:15:43" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "14900:1:43", - "nodeType": "YulLiteral", - "src": "14900:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "14903:4:43", - "nodeType": "YulLiteral", - "src": "14903:4:43", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "14893:6:43", - "nodeType": "YulIdentifier", - "src": "14893:6:43" - }, - "nativeSrc": "14893:15:43", - "nodeType": "YulFunctionCall", - "src": "14893:15:43" - }, - "nativeSrc": "14893:15:43", - "nodeType": "YulExpressionStatement", - "src": "14893:15:43" - } - ] - }, - "name": "panic_error_0x41", - "nativeSrc": "14787:127:43", - "nodeType": "YulFunctionDefinition", - "src": "14787:127:43" - }, - { - "body": { - "nativeSrc": "15046:136:43", - "nodeType": "YulBlock", - "src": "15046:136:43", - "statements": [ - { - "nativeSrc": "15056:26:43", - "nodeType": "YulAssignment", - "src": "15056:26:43", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "15068:9:43", - "nodeType": "YulIdentifier", - "src": "15068:9:43" - }, - { - "kind": "number", - "nativeSrc": "15079:2:43", - "nodeType": "YulLiteral", - "src": "15079:2:43", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "15064:3:43", - "nodeType": "YulIdentifier", - "src": "15064:3:43" - }, - "nativeSrc": "15064:18:43", - "nodeType": "YulFunctionCall", - "src": "15064:18:43" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "15056:4:43", - "nodeType": "YulIdentifier", - "src": "15056:4:43" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "15098:9:43", - "nodeType": "YulIdentifier", - "src": "15098:9:43" - }, - { - "arguments": [ - { - "name": "value0", - "nativeSrc": "15113:6:43", - "nodeType": "YulIdentifier", - "src": "15113:6:43" - }, - { - "kind": "number", - "nativeSrc": "15121:10:43", - "nodeType": "YulLiteral", - "src": "15121:10:43", - "type": "", - "value": "0xffffffff" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "15109:3:43", - "nodeType": "YulIdentifier", - "src": "15109:3:43" - }, - "nativeSrc": "15109:23:43", - "nodeType": "YulFunctionCall", - "src": "15109:23:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "15091:6:43", - "nodeType": "YulIdentifier", - "src": "15091:6:43" - }, - "nativeSrc": "15091:42:43", - "nodeType": "YulFunctionCall", - "src": "15091:42:43" - }, - "nativeSrc": "15091:42:43", - "nodeType": "YulExpressionStatement", - "src": "15091:42:43" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "15153:9:43", - "nodeType": "YulIdentifier", - "src": "15153:9:43" - }, - { - "kind": "number", - "nativeSrc": "15164:2:43", - "nodeType": "YulLiteral", - "src": "15164:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "15149:3:43", - "nodeType": "YulIdentifier", - "src": "15149:3:43" - }, - "nativeSrc": "15149:18:43", - "nodeType": "YulFunctionCall", - "src": "15149:18:43" - }, - { - "name": "value1", - "nativeSrc": "15169:6:43", - "nodeType": "YulIdentifier", - "src": "15169:6:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "15142:6:43", - "nodeType": "YulIdentifier", - "src": "15142:6:43" - }, - "nativeSrc": "15142:34:43", - "nodeType": "YulFunctionCall", - "src": "15142:34:43" - }, - "nativeSrc": "15142:34:43", - "nodeType": "YulExpressionStatement", - "src": "15142:34:43" - } - ] - }, - "name": "abi_encode_tuple_t_uint32_t_bytes32__to_t_uint32_t_bytes32__fromStack_reversed", - "nativeSrc": "14919:263:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "15007:9:43", - "nodeType": "YulTypedName", - "src": "15007:9:43", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "15018:6:43", - "nodeType": "YulTypedName", - "src": "15018:6:43", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "15026:6:43", - "nodeType": "YulTypedName", - "src": "15026:6:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "15037:4:43", - "nodeType": "YulTypedName", - "src": "15037:4:43", - "type": "" - } - ], - "src": "14919:263:43" - }, - { - "body": { - "nativeSrc": "15233:207:43", - "nodeType": "YulBlock", - "src": "15233:207:43", - "statements": [ - { - "nativeSrc": "15243:19:43", - "nodeType": "YulAssignment", - "src": "15243:19:43", - "value": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "15259:2:43", - "nodeType": "YulLiteral", - "src": "15259:2:43", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "15253:5:43", - "nodeType": "YulIdentifier", - "src": "15253:5:43" - }, - "nativeSrc": "15253:9:43", - "nodeType": "YulFunctionCall", - "src": "15253:9:43" - }, - "variableNames": [ - { - "name": "memPtr", - "nativeSrc": "15243:6:43", - "nodeType": "YulIdentifier", - "src": "15243:6:43" - } - ] - }, - { - "nativeSrc": "15271:35:43", - "nodeType": "YulVariableDeclaration", - "src": "15271:35:43", - "value": { - "arguments": [ - { - "name": "memPtr", - "nativeSrc": "15293:6:43", - "nodeType": "YulIdentifier", - "src": "15293:6:43" - }, - { - "kind": "number", - "nativeSrc": "15301:4:43", - "nodeType": "YulLiteral", - "src": "15301:4:43", - "type": "", - "value": "0x60" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "15289:3:43", - "nodeType": "YulIdentifier", - "src": "15289:3:43" - }, - "nativeSrc": "15289:17:43", - "nodeType": "YulFunctionCall", - "src": "15289:17:43" - }, - "variables": [ - { - "name": "newFreePtr", - "nativeSrc": "15275:10:43", - "nodeType": "YulTypedName", - "src": "15275:10:43", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "15381:22:43", - "nodeType": "YulBlock", - "src": "15381:22:43", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x41", - "nativeSrc": "15383:16:43", - "nodeType": "YulIdentifier", - "src": "15383:16:43" - }, - "nativeSrc": "15383:18:43", - "nodeType": "YulFunctionCall", - "src": "15383:18:43" - }, - "nativeSrc": "15383:18:43", - "nodeType": "YulExpressionStatement", - "src": "15383:18:43" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "newFreePtr", - "nativeSrc": "15324:10:43", - "nodeType": "YulIdentifier", - "src": "15324:10:43" - }, - { - "kind": "number", - "nativeSrc": "15336:18:43", - "nodeType": "YulLiteral", - "src": "15336:18:43", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "15321:2:43", - "nodeType": "YulIdentifier", - "src": "15321:2:43" - }, - "nativeSrc": "15321:34:43", - "nodeType": "YulFunctionCall", - "src": "15321:34:43" - }, - { - "arguments": [ - { - "name": "newFreePtr", - "nativeSrc": "15360:10:43", - "nodeType": "YulIdentifier", - "src": "15360:10:43" - }, - { - "name": "memPtr", - "nativeSrc": "15372:6:43", - "nodeType": "YulIdentifier", - "src": "15372:6:43" - } - ], - "functionName": { - "name": "lt", - "nativeSrc": "15357:2:43", - "nodeType": "YulIdentifier", - "src": "15357:2:43" - }, - "nativeSrc": "15357:22:43", - "nodeType": "YulFunctionCall", - "src": "15357:22:43" - } - ], - "functionName": { - "name": "or", - "nativeSrc": "15318:2:43", - "nodeType": "YulIdentifier", - "src": "15318:2:43" - }, - "nativeSrc": "15318:62:43", - "nodeType": "YulFunctionCall", - "src": "15318:62:43" - }, - "nativeSrc": "15315:88:43", - "nodeType": "YulIf", - "src": "15315:88:43" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "15419:2:43", - "nodeType": "YulLiteral", - "src": "15419:2:43", - "type": "", - "value": "64" - }, - { - "name": "newFreePtr", - "nativeSrc": "15423:10:43", - "nodeType": "YulIdentifier", - "src": "15423:10:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "15412:6:43", - "nodeType": "YulIdentifier", - "src": "15412:6:43" - }, - "nativeSrc": "15412:22:43", - "nodeType": "YulFunctionCall", - "src": "15412:22:43" - }, - "nativeSrc": "15412:22:43", - "nodeType": "YulExpressionStatement", - "src": "15412:22:43" - } - ] - }, - "name": "allocate_memory_4159", - "nativeSrc": "15187:253:43", - "nodeType": "YulFunctionDefinition", - "returnVariables": [ - { - "name": "memPtr", - "nativeSrc": "15222:6:43", - "nodeType": "YulTypedName", - "src": "15222:6:43", - "type": "" - } - ], - "src": "15187:253:43" - }, - { - "body": { - "nativeSrc": "15491:211:43", - "nodeType": "YulBlock", - "src": "15491:211:43", - "statements": [ - { - "nativeSrc": "15501:21:43", - "nodeType": "YulAssignment", - "src": "15501:21:43", - "value": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "15517:4:43", - "nodeType": "YulLiteral", - "src": "15517:4:43", - "type": "", - "value": "0x40" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "15511:5:43", - "nodeType": "YulIdentifier", - "src": "15511:5:43" - }, - "nativeSrc": "15511:11:43", - "nodeType": "YulFunctionCall", - "src": "15511:11:43" - }, - "variableNames": [ - { - "name": "memPtr", - "nativeSrc": "15501:6:43", - "nodeType": "YulIdentifier", - "src": "15501:6:43" - } - ] - }, - { - "nativeSrc": "15531:35:43", - "nodeType": "YulVariableDeclaration", - "src": "15531:35:43", - "value": { - "arguments": [ - { - "name": "memPtr", - "nativeSrc": "15553:6:43", - "nodeType": "YulIdentifier", - "src": "15553:6:43" - }, - { - "kind": "number", - "nativeSrc": "15561:4:43", - "nodeType": "YulLiteral", - "src": "15561:4:43", - "type": "", - "value": "0x40" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "15549:3:43", - "nodeType": "YulIdentifier", - "src": "15549:3:43" - }, - "nativeSrc": "15549:17:43", - "nodeType": "YulFunctionCall", - "src": "15549:17:43" - }, - "variables": [ - { - "name": "newFreePtr", - "nativeSrc": "15535:10:43", - "nodeType": "YulTypedName", - "src": "15535:10:43", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "15641:22:43", - "nodeType": "YulBlock", - "src": "15641:22:43", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x41", - "nativeSrc": "15643:16:43", - "nodeType": "YulIdentifier", - "src": "15643:16:43" - }, - "nativeSrc": "15643:18:43", - "nodeType": "YulFunctionCall", - "src": "15643:18:43" - }, - "nativeSrc": "15643:18:43", - "nodeType": "YulExpressionStatement", - "src": "15643:18:43" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "newFreePtr", - "nativeSrc": "15584:10:43", - "nodeType": "YulIdentifier", - "src": "15584:10:43" - }, - { - "kind": "number", - "nativeSrc": "15596:18:43", - "nodeType": "YulLiteral", - "src": "15596:18:43", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "15581:2:43", - "nodeType": "YulIdentifier", - "src": "15581:2:43" - }, - "nativeSrc": "15581:34:43", - "nodeType": "YulFunctionCall", - "src": "15581:34:43" - }, - { - "arguments": [ - { - "name": "newFreePtr", - "nativeSrc": "15620:10:43", - "nodeType": "YulIdentifier", - "src": "15620:10:43" - }, - { - "name": "memPtr", - "nativeSrc": "15632:6:43", - "nodeType": "YulIdentifier", - "src": "15632:6:43" - } - ], - "functionName": { - "name": "lt", - "nativeSrc": "15617:2:43", - "nodeType": "YulIdentifier", - "src": "15617:2:43" - }, - "nativeSrc": "15617:22:43", - "nodeType": "YulFunctionCall", - "src": "15617:22:43" - } - ], - "functionName": { - "name": "or", - "nativeSrc": "15578:2:43", - "nodeType": "YulIdentifier", - "src": "15578:2:43" - }, - "nativeSrc": "15578:62:43", - "nodeType": "YulFunctionCall", - "src": "15578:62:43" - }, - "nativeSrc": "15575:88:43", - "nodeType": "YulIf", - "src": "15575:88:43" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "15679:4:43", - "nodeType": "YulLiteral", - "src": "15679:4:43", - "type": "", - "value": "0x40" - }, - { - "name": "newFreePtr", - "nativeSrc": "15685:10:43", - "nodeType": "YulIdentifier", - "src": "15685:10:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "15672:6:43", - "nodeType": "YulIdentifier", - "src": "15672:6:43" - }, - "nativeSrc": "15672:24:43", - "nodeType": "YulFunctionCall", - "src": "15672:24:43" - }, - "nativeSrc": "15672:24:43", - "nodeType": "YulExpressionStatement", - "src": "15672:24:43" - } - ] - }, - "name": "allocate_memory_4160", - "nativeSrc": "15445:257:43", - "nodeType": "YulFunctionDefinition", - "returnVariables": [ - { - "name": "memPtr", - "nativeSrc": "15480:6:43", - "nodeType": "YulTypedName", - "src": "15480:6:43", - "type": "" - } - ], - "src": "15445:257:43" - }, - { - "body": { - "nativeSrc": "15752:230:43", - "nodeType": "YulBlock", - "src": "15752:230:43", - "statements": [ - { - "nativeSrc": "15762:19:43", - "nodeType": "YulAssignment", - "src": "15762:19:43", - "value": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "15778:2:43", - "nodeType": "YulLiteral", - "src": "15778:2:43", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "15772:5:43", - "nodeType": "YulIdentifier", - "src": "15772:5:43" - }, - "nativeSrc": "15772:9:43", - "nodeType": "YulFunctionCall", - "src": "15772:9:43" - }, - "variableNames": [ - { - "name": "memPtr", - "nativeSrc": "15762:6:43", - "nodeType": "YulIdentifier", - "src": "15762:6:43" - } - ] - }, - { - "nativeSrc": "15790:58:43", - "nodeType": "YulVariableDeclaration", - "src": "15790:58:43", - "value": { - "arguments": [ - { - "name": "memPtr", - "nativeSrc": "15812:6:43", - "nodeType": "YulIdentifier", - "src": "15812:6:43" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "size", - "nativeSrc": "15828:4:43", - "nodeType": "YulIdentifier", - "src": "15828:4:43" - }, - { - "kind": "number", - "nativeSrc": "15834:2:43", - "nodeType": "YulLiteral", - "src": "15834:2:43", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "15824:3:43", - "nodeType": "YulIdentifier", - "src": "15824:3:43" - }, - "nativeSrc": "15824:13:43", - "nodeType": "YulFunctionCall", - "src": "15824:13:43" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "15843:2:43", - "nodeType": "YulLiteral", - "src": "15843:2:43", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "not", - "nativeSrc": "15839:3:43", - "nodeType": "YulIdentifier", - "src": "15839:3:43" - }, - "nativeSrc": "15839:7:43", - "nodeType": "YulFunctionCall", - "src": "15839:7:43" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "15820:3:43", - "nodeType": "YulIdentifier", - "src": "15820:3:43" - }, - "nativeSrc": "15820:27:43", - "nodeType": "YulFunctionCall", - "src": "15820:27:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "15808:3:43", - "nodeType": "YulIdentifier", - "src": "15808:3:43" - }, - "nativeSrc": "15808:40:43", - "nodeType": "YulFunctionCall", - "src": "15808:40:43" - }, - "variables": [ - { - "name": "newFreePtr", - "nativeSrc": "15794:10:43", - "nodeType": "YulTypedName", - "src": "15794:10:43", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "15923:22:43", - "nodeType": "YulBlock", - "src": "15923:22:43", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x41", - "nativeSrc": "15925:16:43", - "nodeType": "YulIdentifier", - "src": "15925:16:43" - }, - "nativeSrc": "15925:18:43", - "nodeType": "YulFunctionCall", - "src": "15925:18:43" - }, - "nativeSrc": "15925:18:43", - "nodeType": "YulExpressionStatement", - "src": "15925:18:43" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "newFreePtr", - "nativeSrc": "15866:10:43", - "nodeType": "YulIdentifier", - "src": "15866:10:43" - }, - { - "kind": "number", - "nativeSrc": "15878:18:43", - "nodeType": "YulLiteral", - "src": "15878:18:43", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "15863:2:43", - "nodeType": "YulIdentifier", - "src": "15863:2:43" - }, - "nativeSrc": "15863:34:43", - "nodeType": "YulFunctionCall", - "src": "15863:34:43" - }, - { - "arguments": [ - { - "name": "newFreePtr", - "nativeSrc": "15902:10:43", - "nodeType": "YulIdentifier", - "src": "15902:10:43" - }, - { - "name": "memPtr", - "nativeSrc": "15914:6:43", - "nodeType": "YulIdentifier", - "src": "15914:6:43" - } - ], - "functionName": { - "name": "lt", - "nativeSrc": "15899:2:43", - "nodeType": "YulIdentifier", - "src": "15899:2:43" - }, - "nativeSrc": "15899:22:43", - "nodeType": "YulFunctionCall", - "src": "15899:22:43" - } - ], - "functionName": { - "name": "or", - "nativeSrc": "15860:2:43", - "nodeType": "YulIdentifier", - "src": "15860:2:43" - }, - "nativeSrc": "15860:62:43", - "nodeType": "YulFunctionCall", - "src": "15860:62:43" - }, - "nativeSrc": "15857:88:43", - "nodeType": "YulIf", - "src": "15857:88:43" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "15961:2:43", - "nodeType": "YulLiteral", - "src": "15961:2:43", - "type": "", - "value": "64" - }, - { - "name": "newFreePtr", - "nativeSrc": "15965:10:43", - "nodeType": "YulIdentifier", - "src": "15965:10:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "15954:6:43", - "nodeType": "YulIdentifier", - "src": "15954:6:43" - }, - "nativeSrc": "15954:22:43", - "nodeType": "YulFunctionCall", - "src": "15954:22:43" - }, - "nativeSrc": "15954:22:43", - "nodeType": "YulExpressionStatement", - "src": "15954:22:43" - } - ] - }, - "name": "allocate_memory", - "nativeSrc": "15707:275:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "size", - "nativeSrc": "15732:4:43", - "nodeType": "YulTypedName", - "src": "15732:4:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "memPtr", - "nativeSrc": "15741:6:43", - "nodeType": "YulTypedName", - "src": "15741:6:43", - "type": "" - } - ], - "src": "15707:275:43" - }, - { - "body": { - "nativeSrc": "16044:129:43", - "nodeType": "YulBlock", - "src": "16044:129:43", - "statements": [ - { - "body": { - "nativeSrc": "16088:22:43", - "nodeType": "YulBlock", - "src": "16088:22:43", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x41", - "nativeSrc": "16090:16:43", - "nodeType": "YulIdentifier", - "src": "16090:16:43" - }, - "nativeSrc": "16090:18:43", - "nodeType": "YulFunctionCall", - "src": "16090:18:43" - }, - "nativeSrc": "16090:18:43", - "nodeType": "YulExpressionStatement", - "src": "16090:18:43" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "length", - "nativeSrc": "16060:6:43", - "nodeType": "YulIdentifier", - "src": "16060:6:43" - }, - { - "kind": "number", - "nativeSrc": "16068:18:43", - "nodeType": "YulLiteral", - "src": "16068:18:43", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "16057:2:43", - "nodeType": "YulIdentifier", - "src": "16057:2:43" - }, - "nativeSrc": "16057:30:43", - "nodeType": "YulFunctionCall", - "src": "16057:30:43" - }, - "nativeSrc": "16054:56:43", - "nodeType": "YulIf", - "src": "16054:56:43" - }, - { - "nativeSrc": "16119:48:43", - "nodeType": "YulAssignment", - "src": "16119:48:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "length", - "nativeSrc": "16139:6:43", - "nodeType": "YulIdentifier", - "src": "16139:6:43" - }, - { - "kind": "number", - "nativeSrc": "16147:2:43", - "nodeType": "YulLiteral", - "src": "16147:2:43", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "16135:3:43", - "nodeType": "YulIdentifier", - "src": "16135:3:43" - }, - "nativeSrc": "16135:15:43", - "nodeType": "YulFunctionCall", - "src": "16135:15:43" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "16156:2:43", - "nodeType": "YulLiteral", - "src": "16156:2:43", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "not", - "nativeSrc": "16152:3:43", - "nodeType": "YulIdentifier", - "src": "16152:3:43" - }, - "nativeSrc": "16152:7:43", - "nodeType": "YulFunctionCall", - "src": "16152:7:43" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "16131:3:43", - "nodeType": "YulIdentifier", - "src": "16131:3:43" - }, - "nativeSrc": "16131:29:43", - "nodeType": "YulFunctionCall", - "src": "16131:29:43" - }, - { - "kind": "number", - "nativeSrc": "16162:4:43", - "nodeType": "YulLiteral", - "src": "16162:4:43", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "16127:3:43", - "nodeType": "YulIdentifier", - "src": "16127:3:43" - }, - "nativeSrc": "16127:40:43", - "nodeType": "YulFunctionCall", - "src": "16127:40:43" - }, - "variableNames": [ - { - "name": "size", - "nativeSrc": "16119:4:43", - "nodeType": "YulIdentifier", - "src": "16119:4:43" - } - ] - } - ] - }, - "name": "array_allocation_size_bytes", - "nativeSrc": "15987:186:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "length", - "nativeSrc": "16024:6:43", - "nodeType": "YulTypedName", - "src": "16024:6:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "size", - "nativeSrc": "16035:4:43", - "nodeType": "YulTypedName", - "src": "16035:4:43", - "type": "" - } - ], - "src": "15987:186:43" - }, - { - "body": { - "nativeSrc": "16384:1911:43", - "nodeType": "YulBlock", - "src": "16384:1911:43", - "statements": [ - { - "nativeSrc": "16394:28:43", - "nodeType": "YulVariableDeclaration", - "src": "16394:28:43", - "value": { - "kind": "number", - "nativeSrc": "16404:18:43", - "nodeType": "YulLiteral", - "src": "16404:18:43", - "type": "", - "value": "0xffffffffffffffff" - }, - "variables": [ - { - "name": "_1", - "nativeSrc": "16398:2:43", - "nodeType": "YulTypedName", - "src": "16398:2:43", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "16449:22:43", - "nodeType": "YulBlock", - "src": "16449:22:43", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x41", - "nativeSrc": "16451:16:43", - "nodeType": "YulIdentifier", - "src": "16451:16:43" - }, - "nativeSrc": "16451:18:43", - "nodeType": "YulFunctionCall", - "src": "16451:18:43" - }, - "nativeSrc": "16451:18:43", - "nodeType": "YulExpressionStatement", - "src": "16451:18:43" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "length", - "nativeSrc": "16437:6:43", - "nodeType": "YulIdentifier", - "src": "16437:6:43" - }, - { - "name": "_1", - "nativeSrc": "16445:2:43", - "nodeType": "YulIdentifier", - "src": "16445:2:43" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "16434:2:43", - "nodeType": "YulIdentifier", - "src": "16434:2:43" - }, - "nativeSrc": "16434:14:43", - "nodeType": "YulFunctionCall", - "src": "16434:14:43" - }, - "nativeSrc": "16431:40:43", - "nodeType": "YulIf", - "src": "16431:40:43" - }, - { - "nativeSrc": "16480:24:43", - "nodeType": "YulVariableDeclaration", - "src": "16480:24:43", - "value": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "16494:1:43", - "nodeType": "YulLiteral", - "src": "16494:1:43", - "type": "", - "value": "5" - }, - { - "name": "length", - "nativeSrc": "16497:6:43", - "nodeType": "YulIdentifier", - "src": "16497:6:43" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "16490:3:43", - "nodeType": "YulIdentifier", - "src": "16490:3:43" - }, - "nativeSrc": "16490:14:43", - "nodeType": "YulFunctionCall", - "src": "16490:14:43" - }, - "variables": [ - { - "name": "_2", - "nativeSrc": "16484:2:43", - "nodeType": "YulTypedName", - "src": "16484:2:43", - "type": "" - } - ] - }, - { - "nativeSrc": "16513:14:43", - "nodeType": "YulVariableDeclaration", - "src": "16513:14:43", - "value": { - "kind": "number", - "nativeSrc": "16523:4:43", - "nodeType": "YulLiteral", - "src": "16523:4:43", - "type": "", - "value": "0x20" - }, - "variables": [ - { - "name": "_3", - "nativeSrc": "16517:2:43", - "nodeType": "YulTypedName", - "src": "16517:2:43", - "type": "" - } - ] - }, - { - "nativeSrc": "16536:39:43", - "nodeType": "YulVariableDeclaration", - "src": "16536:39:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "_2", - "nativeSrc": "16567:2:43", - "nodeType": "YulIdentifier", - "src": "16567:2:43" - }, - { - "name": "_3", - "nativeSrc": "16571:2:43", - "nodeType": "YulIdentifier", - "src": "16571:2:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "16563:3:43", - "nodeType": "YulIdentifier", - "src": "16563:3:43" - }, - "nativeSrc": "16563:11:43", - "nodeType": "YulFunctionCall", - "src": "16563:11:43" - } - ], - "functionName": { - "name": "allocate_memory", - "nativeSrc": "16547:15:43", - "nodeType": "YulIdentifier", - "src": "16547:15:43" - }, - "nativeSrc": "16547:28:43", - "nodeType": "YulFunctionCall", - "src": "16547:28:43" - }, - "variables": [ - { - "name": "dst", - "nativeSrc": "16540:3:43", - "nodeType": "YulTypedName", - "src": "16540:3:43", - "type": "" - } - ] - }, - { - "nativeSrc": "16584:16:43", - "nodeType": "YulVariableDeclaration", - "src": "16584:16:43", - "value": { - "name": "dst", - "nativeSrc": "16597:3:43", - "nodeType": "YulIdentifier", - "src": "16597:3:43" - }, - "variables": [ - { - "name": "dst_1", - "nativeSrc": "16588:5:43", - "nodeType": "YulTypedName", - "src": "16588:5:43", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "dst", - "nativeSrc": "16616:3:43", - "nodeType": "YulIdentifier", - "src": "16616:3:43" - }, - { - "name": "length", - "nativeSrc": "16621:6:43", - "nodeType": "YulIdentifier", - "src": "16621:6:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "16609:6:43", - "nodeType": "YulIdentifier", - "src": "16609:6:43" - }, - "nativeSrc": "16609:19:43", - "nodeType": "YulFunctionCall", - "src": "16609:19:43" - }, - "nativeSrc": "16609:19:43", - "nodeType": "YulExpressionStatement", - "src": "16609:19:43" - }, - { - "nativeSrc": "16637:19:43", - "nodeType": "YulAssignment", - "src": "16637:19:43", - "value": { - "arguments": [ - { - "name": "dst", - "nativeSrc": "16648:3:43", - "nodeType": "YulIdentifier", - "src": "16648:3:43" - }, - { - "name": "_3", - "nativeSrc": "16653:2:43", - "nodeType": "YulIdentifier", - "src": "16653:2:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "16644:3:43", - "nodeType": "YulIdentifier", - "src": "16644:3:43" - }, - "nativeSrc": "16644:12:43", - "nodeType": "YulFunctionCall", - "src": "16644:12:43" - }, - "variableNames": [ - { - "name": "dst", - "nativeSrc": "16637:3:43", - "nodeType": "YulIdentifier", - "src": "16637:3:43" - } - ] - }, - { - "nativeSrc": "16665:28:43", - "nodeType": "YulVariableDeclaration", - "src": "16665:28:43", - "value": { - "arguments": [ - { - "name": "value", - "nativeSrc": "16683:5:43", - "nodeType": "YulIdentifier", - "src": "16683:5:43" - }, - { - "name": "_2", - "nativeSrc": "16690:2:43", - "nodeType": "YulIdentifier", - "src": "16690:2:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "16679:3:43", - "nodeType": "YulIdentifier", - "src": "16679:3:43" - }, - "nativeSrc": "16679:14:43", - "nodeType": "YulFunctionCall", - "src": "16679:14:43" - }, - "variables": [ - { - "name": "srcEnd", - "nativeSrc": "16669:6:43", - "nodeType": "YulTypedName", - "src": "16669:6:43", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "16732:16:43", - "nodeType": "YulBlock", - "src": "16732:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "16741:1:43", - "nodeType": "YulLiteral", - "src": "16741:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "16744:1:43", - "nodeType": "YulLiteral", - "src": "16744:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "16734:6:43", - "nodeType": "YulIdentifier", - "src": "16734:6:43" - }, - "nativeSrc": "16734:12:43", - "nodeType": "YulFunctionCall", - "src": "16734:12:43" - }, - "nativeSrc": "16734:12:43", - "nodeType": "YulExpressionStatement", - "src": "16734:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "srcEnd", - "nativeSrc": "16708:6:43", - "nodeType": "YulIdentifier", - "src": "16708:6:43" - }, - { - "arguments": [], - "functionName": { - "name": "calldatasize", - "nativeSrc": "16716:12:43", - "nodeType": "YulIdentifier", - "src": "16716:12:43" - }, - "nativeSrc": "16716:14:43", - "nodeType": "YulFunctionCall", - "src": "16716:14:43" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "16705:2:43", - "nodeType": "YulIdentifier", - "src": "16705:2:43" - }, - "nativeSrc": "16705:26:43", - "nodeType": "YulFunctionCall", - "src": "16705:26:43" - }, - "nativeSrc": "16702:46:43", - "nodeType": "YulIf", - "src": "16702:46:43" - }, - { - "nativeSrc": "16757:16:43", - "nodeType": "YulVariableDeclaration", - "src": "16757:16:43", - "value": { - "name": "value", - "nativeSrc": "16768:5:43", - "nodeType": "YulIdentifier", - "src": "16768:5:43" - }, - "variables": [ - { - "name": "src", - "nativeSrc": "16761:3:43", - "nodeType": "YulTypedName", - "src": "16761:3:43", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "16838:1424:43", - "nodeType": "YulBlock", - "src": "16838:1424:43", - "statements": [ - { - "nativeSrc": "16852:36:43", - "nodeType": "YulVariableDeclaration", - "src": "16852:36:43", - "value": { - "arguments": [ - { - "name": "src", - "nativeSrc": "16884:3:43", - "nodeType": "YulIdentifier", - "src": "16884:3:43" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "16871:12:43", - "nodeType": "YulIdentifier", - "src": "16871:12:43" - }, - "nativeSrc": "16871:17:43", - "nodeType": "YulFunctionCall", - "src": "16871:17:43" - }, - "variables": [ - { - "name": "innerOffset", - "nativeSrc": "16856:11:43", - "nodeType": "YulTypedName", - "src": "16856:11:43", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "16936:74:43", - "nodeType": "YulBlock", - "src": "16936:74:43", - "statements": [ - { - "nativeSrc": "16954:11:43", - "nodeType": "YulVariableDeclaration", - "src": "16954:11:43", - "value": { - "kind": "number", - "nativeSrc": "16964:1:43", - "nodeType": "YulLiteral", - "src": "16964:1:43", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "_4", - "nativeSrc": "16958:2:43", - "nodeType": "YulTypedName", - "src": "16958:2:43", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "_4", - "nativeSrc": "16989:2:43", - "nodeType": "YulIdentifier", - "src": "16989:2:43" - }, - { - "name": "_4", - "nativeSrc": "16993:2:43", - "nodeType": "YulIdentifier", - "src": "16993:2:43" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "16982:6:43", - "nodeType": "YulIdentifier", - "src": "16982:6:43" - }, - "nativeSrc": "16982:14:43", - "nodeType": "YulFunctionCall", - "src": "16982:14:43" - }, - "nativeSrc": "16982:14:43", - "nodeType": "YulExpressionStatement", - "src": "16982:14:43" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "innerOffset", - "nativeSrc": "16907:11:43", - "nodeType": "YulIdentifier", - "src": "16907:11:43" - }, - { - "name": "_1", - "nativeSrc": "16920:2:43", - "nodeType": "YulIdentifier", - "src": "16920:2:43" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "16904:2:43", - "nodeType": "YulIdentifier", - "src": "16904:2:43" - }, - "nativeSrc": "16904:19:43", - "nodeType": "YulFunctionCall", - "src": "16904:19:43" - }, - "nativeSrc": "16901:109:43", - "nodeType": "YulIf", - "src": "16901:109:43" - }, - { - "nativeSrc": "17023:33:43", - "nodeType": "YulVariableDeclaration", - "src": "17023:33:43", - "value": { - "arguments": [ - { - "name": "value", - "nativeSrc": "17037:5:43", - "nodeType": "YulIdentifier", - "src": "17037:5:43" - }, - { - "name": "innerOffset", - "nativeSrc": "17044:11:43", - "nodeType": "YulIdentifier", - "src": "17044:11:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "17033:3:43", - "nodeType": "YulIdentifier", - "src": "17033:3:43" - }, - "nativeSrc": "17033:23:43", - "nodeType": "YulFunctionCall", - "src": "17033:23:43" - }, - "variables": [ - { - "name": "_5", - "nativeSrc": "17027:2:43", - "nodeType": "YulTypedName", - "src": "17027:2:43", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "17119:74:43", - "nodeType": "YulBlock", - "src": "17119:74:43", - "statements": [ - { - "nativeSrc": "17137:11:43", - "nodeType": "YulVariableDeclaration", - "src": "17137:11:43", - "value": { - "kind": "number", - "nativeSrc": "17147:1:43", - "nodeType": "YulLiteral", - "src": "17147:1:43", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "_6", - "nativeSrc": "17141:2:43", - "nodeType": "YulTypedName", - "src": "17141:2:43", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "_6", - "nativeSrc": "17172:2:43", - "nodeType": "YulIdentifier", - "src": "17172:2:43" - }, - { - "name": "_6", - "nativeSrc": "17176:2:43", - "nodeType": "YulIdentifier", - "src": "17176:2:43" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "17165:6:43", - "nodeType": "YulIdentifier", - "src": "17165:6:43" - }, - "nativeSrc": "17165:14:43", - "nodeType": "YulFunctionCall", - "src": "17165:14:43" - }, - "nativeSrc": "17165:14:43", - "nodeType": "YulExpressionStatement", - "src": "17165:14:43" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [], - "functionName": { - "name": "calldatasize", - "nativeSrc": "17080:12:43", - "nodeType": "YulIdentifier", - "src": "17080:12:43" - }, - "nativeSrc": "17080:14:43", - "nodeType": "YulFunctionCall", - "src": "17080:14:43" - }, - { - "name": "_5", - "nativeSrc": "17096:2:43", - "nodeType": "YulIdentifier", - "src": "17096:2:43" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "17076:3:43", - "nodeType": "YulIdentifier", - "src": "17076:3:43" - }, - "nativeSrc": "17076:23:43", - "nodeType": "YulFunctionCall", - "src": "17076:23:43" - }, - { - "kind": "number", - "nativeSrc": "17101:4:43", - "nodeType": "YulLiteral", - "src": "17101:4:43", - "type": "", - "value": "0x60" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "17072:3:43", - "nodeType": "YulIdentifier", - "src": "17072:3:43" - }, - "nativeSrc": "17072:34:43", - "nodeType": "YulFunctionCall", - "src": "17072:34:43" - }, - "nativeSrc": "17069:124:43", - "nodeType": "YulIf", - "src": "17069:124:43" - }, - { - "nativeSrc": "17206:37:43", - "nodeType": "YulVariableDeclaration", - "src": "17206:37:43", - "value": { - "arguments": [], - "functionName": { - "name": "allocate_memory_4159", - "nativeSrc": "17221:20:43", - "nodeType": "YulIdentifier", - "src": "17221:20:43" - }, - "nativeSrc": "17221:22:43", - "nodeType": "YulFunctionCall", - "src": "17221:22:43" - }, - "variables": [ - { - "name": "value_1", - "nativeSrc": "17210:7:43", - "nodeType": "YulTypedName", - "src": "17210:7:43", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value_1", - "nativeSrc": "17263:7:43", - "nodeType": "YulIdentifier", - "src": "17263:7:43" - }, - { - "arguments": [ - { - "name": "_5", - "nativeSrc": "17290:2:43", - "nodeType": "YulIdentifier", - "src": "17290:2:43" - } - ], - "functionName": { - "name": "abi_decode_uint32", - "nativeSrc": "17272:17:43", - "nodeType": "YulIdentifier", - "src": "17272:17:43" - }, - "nativeSrc": "17272:21:43", - "nodeType": "YulFunctionCall", - "src": "17272:21:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "17256:6:43", - "nodeType": "YulIdentifier", - "src": "17256:6:43" - }, - "nativeSrc": "17256:38:43", - "nodeType": "YulFunctionCall", - "src": "17256:38:43" - }, - "nativeSrc": "17256:38:43", - "nodeType": "YulExpressionStatement", - "src": "17256:38:43" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value_1", - "nativeSrc": "17318:7:43", - "nodeType": "YulIdentifier", - "src": "17318:7:43" - }, - { - "name": "_3", - "nativeSrc": "17327:2:43", - "nodeType": "YulIdentifier", - "src": "17327:2:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "17314:3:43", - "nodeType": "YulIdentifier", - "src": "17314:3:43" - }, - "nativeSrc": "17314:16:43", - "nodeType": "YulFunctionCall", - "src": "17314:16:43" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "_5", - "nativeSrc": "17354:2:43", - "nodeType": "YulIdentifier", - "src": "17354:2:43" - }, - { - "name": "_3", - "nativeSrc": "17358:2:43", - "nodeType": "YulIdentifier", - "src": "17358:2:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "17350:3:43", - "nodeType": "YulIdentifier", - "src": "17350:3:43" - }, - "nativeSrc": "17350:11:43", - "nodeType": "YulFunctionCall", - "src": "17350:11:43" - } - ], - "functionName": { - "name": "abi_decode_uint16", - "nativeSrc": "17332:17:43", - "nodeType": "YulIdentifier", - "src": "17332:17:43" - }, - "nativeSrc": "17332:30:43", - "nodeType": "YulFunctionCall", - "src": "17332:30:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "17307:6:43", - "nodeType": "YulIdentifier", - "src": "17307:6:43" - }, - "nativeSrc": "17307:56:43", - "nodeType": "YulFunctionCall", - "src": "17307:56:43" - }, - "nativeSrc": "17307:56:43", - "nodeType": "YulExpressionStatement", - "src": "17307:56:43" - }, - { - "nativeSrc": "17376:12:43", - "nodeType": "YulVariableDeclaration", - "src": "17376:12:43", - "value": { - "kind": "number", - "nativeSrc": "17386:2:43", - "nodeType": "YulLiteral", - "src": "17386:2:43", - "type": "", - "value": "64" - }, - "variables": [ - { - "name": "_7", - "nativeSrc": "17380:2:43", - "nodeType": "YulTypedName", - "src": "17380:2:43", - "type": "" - } - ] - }, - { - "nativeSrc": "17401:39:43", - "nodeType": "YulVariableDeclaration", - "src": "17401:39:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "_5", - "nativeSrc": "17432:2:43", - "nodeType": "YulIdentifier", - "src": "17432:2:43" - }, - { - "name": "_7", - "nativeSrc": "17436:2:43", - "nodeType": "YulIdentifier", - "src": "17436:2:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "17428:3:43", - "nodeType": "YulIdentifier", - "src": "17428:3:43" - }, - "nativeSrc": "17428:11:43", - "nodeType": "YulFunctionCall", - "src": "17428:11:43" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "17415:12:43", - "nodeType": "YulIdentifier", - "src": "17415:12:43" - }, - "nativeSrc": "17415:25:43", - "nodeType": "YulFunctionCall", - "src": "17415:25:43" - }, - "variables": [ - { - "name": "offset", - "nativeSrc": "17405:6:43", - "nodeType": "YulTypedName", - "src": "17405:6:43", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "17483:74:43", - "nodeType": "YulBlock", - "src": "17483:74:43", - "statements": [ - { - "nativeSrc": "17501:11:43", - "nodeType": "YulVariableDeclaration", - "src": "17501:11:43", - "value": { - "kind": "number", - "nativeSrc": "17511:1:43", - "nodeType": "YulLiteral", - "src": "17511:1:43", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "_8", - "nativeSrc": "17505:2:43", - "nodeType": "YulTypedName", - "src": "17505:2:43", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "_8", - "nativeSrc": "17536:2:43", - "nodeType": "YulIdentifier", - "src": "17536:2:43" - }, - { - "name": "_8", - "nativeSrc": "17540:2:43", - "nodeType": "YulIdentifier", - "src": "17540:2:43" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "17529:6:43", - "nodeType": "YulIdentifier", - "src": "17529:6:43" - }, - "nativeSrc": "17529:14:43", - "nodeType": "YulFunctionCall", - "src": "17529:14:43" - }, - "nativeSrc": "17529:14:43", - "nodeType": "YulExpressionStatement", - "src": "17529:14:43" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "offset", - "nativeSrc": "17459:6:43", - "nodeType": "YulIdentifier", - "src": "17459:6:43" - }, - { - "name": "_1", - "nativeSrc": "17467:2:43", - "nodeType": "YulIdentifier", - "src": "17467:2:43" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "17456:2:43", - "nodeType": "YulIdentifier", - "src": "17456:2:43" - }, - "nativeSrc": "17456:14:43", - "nodeType": "YulFunctionCall", - "src": "17456:14:43" - }, - "nativeSrc": "17453:104:43", - "nodeType": "YulIf", - "src": "17453:104:43" - }, - { - "nativeSrc": "17570:25:43", - "nodeType": "YulVariableDeclaration", - "src": "17570:25:43", - "value": { - "arguments": [ - { - "name": "_5", - "nativeSrc": "17584:2:43", - "nodeType": "YulIdentifier", - "src": "17584:2:43" - }, - { - "name": "offset", - "nativeSrc": "17588:6:43", - "nodeType": "YulIdentifier", - "src": "17588:6:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "17580:3:43", - "nodeType": "YulIdentifier", - "src": "17580:3:43" - }, - "nativeSrc": "17580:15:43", - "nodeType": "YulFunctionCall", - "src": "17580:15:43" - }, - "variables": [ - { - "name": "_9", - "nativeSrc": "17574:2:43", - "nodeType": "YulTypedName", - "src": "17574:2:43", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "17666:77:43", - "nodeType": "YulBlock", - "src": "17666:77:43", - "statements": [ - { - "nativeSrc": "17684:12:43", - "nodeType": "YulVariableDeclaration", - "src": "17684:12:43", - "value": { - "kind": "number", - "nativeSrc": "17695:1:43", - "nodeType": "YulLiteral", - "src": "17695:1:43", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "_10", - "nativeSrc": "17688:3:43", - "nodeType": "YulTypedName", - "src": "17688:3:43", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "_10", - "nativeSrc": "17720:3:43", - "nodeType": "YulIdentifier", - "src": "17720:3:43" - }, - { - "name": "_10", - "nativeSrc": "17725:3:43", - "nodeType": "YulIdentifier", - "src": "17725:3:43" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "17713:6:43", - "nodeType": "YulIdentifier", - "src": "17713:6:43" - }, - "nativeSrc": "17713:16:43", - "nodeType": "YulFunctionCall", - "src": "17713:16:43" - }, - "nativeSrc": "17713:16:43", - "nodeType": "YulExpressionStatement", - "src": "17713:16:43" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "_9", - "nativeSrc": "17626:2:43", - "nodeType": "YulIdentifier", - "src": "17626:2:43" - }, - { - "kind": "number", - "nativeSrc": "17630:4:43", - "nodeType": "YulLiteral", - "src": "17630:4:43", - "type": "", - "value": "0x1f" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "17622:3:43", - "nodeType": "YulIdentifier", - "src": "17622:3:43" - }, - "nativeSrc": "17622:13:43", - "nodeType": "YulFunctionCall", - "src": "17622:13:43" - }, - { - "arguments": [], - "functionName": { - "name": "calldatasize", - "nativeSrc": "17637:12:43", - "nodeType": "YulIdentifier", - "src": "17637:12:43" - }, - "nativeSrc": "17637:14:43", - "nodeType": "YulFunctionCall", - "src": "17637:14:43" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "17618:3:43", - "nodeType": "YulIdentifier", - "src": "17618:3:43" - }, - "nativeSrc": "17618:34:43", - "nodeType": "YulFunctionCall", - "src": "17618:34:43" - } - ], - "functionName": { - "name": "iszero", - "nativeSrc": "17611:6:43", - "nodeType": "YulIdentifier", - "src": "17611:6:43" - }, - "nativeSrc": "17611:42:43", - "nodeType": "YulFunctionCall", - "src": "17611:42:43" - }, - "nativeSrc": "17608:135:43", - "nodeType": "YulIf", - "src": "17608:135:43" - }, - { - "nativeSrc": "17756:27:43", - "nodeType": "YulVariableDeclaration", - "src": "17756:27:43", - "value": { - "arguments": [ - { - "name": "_9", - "nativeSrc": "17780:2:43", - "nodeType": "YulIdentifier", - "src": "17780:2:43" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "17767:12:43", - "nodeType": "YulIdentifier", - "src": "17767:12:43" - }, - "nativeSrc": "17767:16:43", - "nodeType": "YulFunctionCall", - "src": "17767:16:43" - }, - "variables": [ - { - "name": "_11", - "nativeSrc": "17760:3:43", - "nodeType": "YulTypedName", - "src": "17760:3:43", - "type": "" - } - ] - }, - { - "nativeSrc": "17796:62:43", - "nodeType": "YulVariableDeclaration", - "src": "17796:62:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "_11", - "nativeSrc": "17853:3:43", - "nodeType": "YulIdentifier", - "src": "17853:3:43" - } - ], - "functionName": { - "name": "array_allocation_size_bytes", - "nativeSrc": "17825:27:43", - "nodeType": "YulIdentifier", - "src": "17825:27:43" - }, - "nativeSrc": "17825:32:43", - "nodeType": "YulFunctionCall", - "src": "17825:32:43" - } - ], - "functionName": { - "name": "allocate_memory", - "nativeSrc": "17809:15:43", - "nodeType": "YulIdentifier", - "src": "17809:15:43" - }, - "nativeSrc": "17809:49:43", - "nodeType": "YulFunctionCall", - "src": "17809:49:43" - }, - "variables": [ - { - "name": "array", - "nativeSrc": "17800:5:43", - "nodeType": "YulTypedName", - "src": "17800:5:43", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "array", - "nativeSrc": "17878:5:43", - "nodeType": "YulIdentifier", - "src": "17878:5:43" - }, - { - "name": "_11", - "nativeSrc": "17885:3:43", - "nodeType": "YulIdentifier", - "src": "17885:3:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "17871:6:43", - "nodeType": "YulIdentifier", - "src": "17871:6:43" - }, - "nativeSrc": "17871:18:43", - "nodeType": "YulFunctionCall", - "src": "17871:18:43" - }, - "nativeSrc": "17871:18:43", - "nodeType": "YulExpressionStatement", - "src": "17871:18:43" - }, - { - "body": { - "nativeSrc": "17959:77:43", - "nodeType": "YulBlock", - "src": "17959:77:43", - "statements": [ - { - "nativeSrc": "17977:12:43", - "nodeType": "YulVariableDeclaration", - "src": "17977:12:43", - "value": { - "kind": "number", - "nativeSrc": "17988:1:43", - "nodeType": "YulLiteral", - "src": "17988:1:43", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "_12", - "nativeSrc": "17981:3:43", - "nodeType": "YulTypedName", - "src": "17981:3:43", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "_12", - "nativeSrc": "18013:3:43", - "nodeType": "YulIdentifier", - "src": "18013:3:43" - }, - { - "name": "_12", - "nativeSrc": "18018:3:43", - "nodeType": "YulIdentifier", - "src": "18018:3:43" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "18006:6:43", - "nodeType": "YulIdentifier", - "src": "18006:6:43" - }, - "nativeSrc": "18006:16:43", - "nodeType": "YulFunctionCall", - "src": "18006:16:43" - }, - "nativeSrc": "18006:16:43", - "nodeType": "YulExpressionStatement", - "src": "18006:16:43" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "_9", - "nativeSrc": "17916:2:43", - "nodeType": "YulIdentifier", - "src": "17916:2:43" - }, - { - "name": "_11", - "nativeSrc": "17920:3:43", - "nodeType": "YulIdentifier", - "src": "17920:3:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "17912:3:43", - "nodeType": "YulIdentifier", - "src": "17912:3:43" - }, - "nativeSrc": "17912:12:43", - "nodeType": "YulFunctionCall", - "src": "17912:12:43" - }, - { - "name": "_3", - "nativeSrc": "17926:2:43", - "nodeType": "YulIdentifier", - "src": "17926:2:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "17908:3:43", - "nodeType": "YulIdentifier", - "src": "17908:3:43" - }, - "nativeSrc": "17908:21:43", - "nodeType": "YulFunctionCall", - "src": "17908:21:43" - }, - { - "arguments": [], - "functionName": { - "name": "calldatasize", - "nativeSrc": "17931:12:43", - "nodeType": "YulIdentifier", - "src": "17931:12:43" - }, - "nativeSrc": "17931:14:43", - "nodeType": "YulFunctionCall", - "src": "17931:14:43" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "17905:2:43", - "nodeType": "YulIdentifier", - "src": "17905:2:43" - }, - "nativeSrc": "17905:41:43", - "nodeType": "YulFunctionCall", - "src": "17905:41:43" - }, - "nativeSrc": "17902:134:43", - "nodeType": "YulIf", - "src": "17902:134:43" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "array", - "nativeSrc": "18066:5:43", - "nodeType": "YulIdentifier", - "src": "18066:5:43" - }, - { - "name": "_3", - "nativeSrc": "18073:2:43", - "nodeType": "YulIdentifier", - "src": "18073:2:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "18062:3:43", - "nodeType": "YulIdentifier", - "src": "18062:3:43" - }, - "nativeSrc": "18062:14:43", - "nodeType": "YulFunctionCall", - "src": "18062:14:43" - }, - { - "arguments": [ - { - "name": "_9", - "nativeSrc": "18082:2:43", - "nodeType": "YulIdentifier", - "src": "18082:2:43" - }, - { - "name": "_3", - "nativeSrc": "18086:2:43", - "nodeType": "YulIdentifier", - "src": "18086:2:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "18078:3:43", - "nodeType": "YulIdentifier", - "src": "18078:3:43" - }, - "nativeSrc": "18078:11:43", - "nodeType": "YulFunctionCall", - "src": "18078:11:43" - }, - { - "name": "_11", - "nativeSrc": "18091:3:43", - "nodeType": "YulIdentifier", - "src": "18091:3:43" - } - ], - "functionName": { - "name": "calldatacopy", - "nativeSrc": "18049:12:43", - "nodeType": "YulIdentifier", - "src": "18049:12:43" - }, - "nativeSrc": "18049:46:43", - "nodeType": "YulFunctionCall", - "src": "18049:46:43" - }, - "nativeSrc": "18049:46:43", - "nodeType": "YulExpressionStatement", - "src": "18049:46:43" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "array", - "nativeSrc": "18123:5:43", - "nodeType": "YulIdentifier", - "src": "18123:5:43" - }, - { - "name": "_11", - "nativeSrc": "18130:3:43", - "nodeType": "YulIdentifier", - "src": "18130:3:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "18119:3:43", - "nodeType": "YulIdentifier", - "src": "18119:3:43" - }, - "nativeSrc": "18119:15:43", - "nodeType": "YulFunctionCall", - "src": "18119:15:43" - }, - { - "name": "_3", - "nativeSrc": "18136:2:43", - "nodeType": "YulIdentifier", - "src": "18136:2:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "18115:3:43", - "nodeType": "YulIdentifier", - "src": "18115:3:43" - }, - "nativeSrc": "18115:24:43", - "nodeType": "YulFunctionCall", - "src": "18115:24:43" - }, - { - "kind": "number", - "nativeSrc": "18141:1:43", - "nodeType": "YulLiteral", - "src": "18141:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "18108:6:43", - "nodeType": "YulIdentifier", - "src": "18108:6:43" - }, - "nativeSrc": "18108:35:43", - "nodeType": "YulFunctionCall", - "src": "18108:35:43" - }, - "nativeSrc": "18108:35:43", - "nodeType": "YulExpressionStatement", - "src": "18108:35:43" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value_1", - "nativeSrc": "18167:7:43", - "nodeType": "YulIdentifier", - "src": "18167:7:43" - }, - { - "name": "_7", - "nativeSrc": "18176:2:43", - "nodeType": "YulIdentifier", - "src": "18176:2:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "18163:3:43", - "nodeType": "YulIdentifier", - "src": "18163:3:43" - }, - "nativeSrc": "18163:16:43", - "nodeType": "YulFunctionCall", - "src": "18163:16:43" - }, - { - "name": "array", - "nativeSrc": "18181:5:43", - "nodeType": "YulIdentifier", - "src": "18181:5:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "18156:6:43", - "nodeType": "YulIdentifier", - "src": "18156:6:43" - }, - "nativeSrc": "18156:31:43", - "nodeType": "YulFunctionCall", - "src": "18156:31:43" - }, - "nativeSrc": "18156:31:43", - "nodeType": "YulExpressionStatement", - "src": "18156:31:43" - }, - { - "expression": { - "arguments": [ - { - "name": "dst", - "nativeSrc": "18207:3:43", - "nodeType": "YulIdentifier", - "src": "18207:3:43" - }, - { - "name": "value_1", - "nativeSrc": "18212:7:43", - "nodeType": "YulIdentifier", - "src": "18212:7:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "18200:6:43", - "nodeType": "YulIdentifier", - "src": "18200:6:43" - }, - "nativeSrc": "18200:20:43", - "nodeType": "YulFunctionCall", - "src": "18200:20:43" - }, - "nativeSrc": "18200:20:43", - "nodeType": "YulExpressionStatement", - "src": "18200:20:43" - }, - { - "nativeSrc": "18233:19:43", - "nodeType": "YulAssignment", - "src": "18233:19:43", - "value": { - "arguments": [ - { - "name": "dst", - "nativeSrc": "18244:3:43", - "nodeType": "YulIdentifier", - "src": "18244:3:43" - }, - { - "name": "_3", - "nativeSrc": "18249:2:43", - "nodeType": "YulIdentifier", - "src": "18249:2:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "18240:3:43", - "nodeType": "YulIdentifier", - "src": "18240:3:43" - }, - "nativeSrc": "18240:12:43", - "nodeType": "YulFunctionCall", - "src": "18240:12:43" - }, - "variableNames": [ - { - "name": "dst", - "nativeSrc": "18233:3:43", - "nodeType": "YulIdentifier", - "src": "18233:3:43" - } - ] - } - ] - }, - "condition": { - "arguments": [ - { - "name": "src", - "nativeSrc": "16793:3:43", - "nodeType": "YulIdentifier", - "src": "16793:3:43" - }, - { - "name": "srcEnd", - "nativeSrc": "16798:6:43", - "nodeType": "YulIdentifier", - "src": "16798:6:43" - } - ], - "functionName": { - "name": "lt", - "nativeSrc": "16790:2:43", - "nodeType": "YulIdentifier", - "src": "16790:2:43" - }, - "nativeSrc": "16790:15:43", - "nodeType": "YulFunctionCall", - "src": "16790:15:43" - }, - "nativeSrc": "16782:1480:43", - "nodeType": "YulForLoop", - "post": { - "nativeSrc": "16806:23:43", - "nodeType": "YulBlock", - "src": "16806:23:43", - "statements": [ - { - "nativeSrc": "16808:19:43", - "nodeType": "YulAssignment", - "src": "16808:19:43", - "value": { - "arguments": [ - { - "name": "src", - "nativeSrc": "16819:3:43", - "nodeType": "YulIdentifier", - "src": "16819:3:43" - }, - { - "name": "_3", - "nativeSrc": "16824:2:43", - "nodeType": "YulIdentifier", - "src": "16824:2:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "16815:3:43", - "nodeType": "YulIdentifier", - "src": "16815:3:43" - }, - "nativeSrc": "16815:12:43", - "nodeType": "YulFunctionCall", - "src": "16815:12:43" - }, - "variableNames": [ - { - "name": "src", - "nativeSrc": "16808:3:43", - "nodeType": "YulIdentifier", - "src": "16808:3:43" - } - ] - } - ] - }, - "pre": { - "nativeSrc": "16786:3:43", - "nodeType": "YulBlock", - "src": "16786:3:43", - "statements": [] - }, - "src": "16782:1480:43" - }, - { - "nativeSrc": "18271:18:43", - "nodeType": "YulAssignment", - "src": "18271:18:43", - "value": { - "name": "dst_1", - "nativeSrc": "18284:5:43", - "nodeType": "YulIdentifier", - "src": "18284:5:43" - }, - "variableNames": [ - { - "name": "converted", - "nativeSrc": "18271:9:43", - "nodeType": "YulIdentifier", - "src": "18271:9:43" - } - ] - } - ] - }, - "name": "convert_array_t_array$_t_struct$_EnforcedOptionParam_$1932_calldata_ptr_$dyn_calldata_ptr_to_t_array$_t_struct$_EnforcedOptionParam_$1932_memory_ptr_$dyn_memory_ptr", - "nativeSrc": "16178:2117:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nativeSrc": "16352:5:43", - "nodeType": "YulTypedName", - "src": "16352:5:43", - "type": "" - }, - { - "name": "length", - "nativeSrc": "16359:6:43", - "nodeType": "YulTypedName", - "src": "16359:6:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "converted", - "nativeSrc": "16370:9:43", - "nodeType": "YulTypedName", - "src": "16370:9:43", - "type": "" - } - ], - "src": "16178:2117:43" - }, - { - "body": { - "nativeSrc": "18430:201:43", - "nodeType": "YulBlock", - "src": "18430:201:43", - "statements": [ - { - "body": { - "nativeSrc": "18468:16:43", - "nodeType": "YulBlock", - "src": "18468:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "18477:1:43", - "nodeType": "YulLiteral", - "src": "18477:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "18480:1:43", - "nodeType": "YulLiteral", - "src": "18480:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "18470:6:43", - "nodeType": "YulIdentifier", - "src": "18470:6:43" - }, - "nativeSrc": "18470:12:43", - "nodeType": "YulFunctionCall", - "src": "18470:12:43" - }, - "nativeSrc": "18470:12:43", - "nodeType": "YulExpressionStatement", - "src": "18470:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "startIndex", - "nativeSrc": "18446:10:43", - "nodeType": "YulIdentifier", - "src": "18446:10:43" - }, - { - "name": "endIndex", - "nativeSrc": "18458:8:43", - "nodeType": "YulIdentifier", - "src": "18458:8:43" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "18443:2:43", - "nodeType": "YulIdentifier", - "src": "18443:2:43" - }, - "nativeSrc": "18443:24:43", - "nodeType": "YulFunctionCall", - "src": "18443:24:43" - }, - "nativeSrc": "18440:44:43", - "nodeType": "YulIf", - "src": "18440:44:43" - }, - { - "body": { - "nativeSrc": "18517:16:43", - "nodeType": "YulBlock", - "src": "18517:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "18526:1:43", - "nodeType": "YulLiteral", - "src": "18526:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "18529:1:43", - "nodeType": "YulLiteral", - "src": "18529:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "18519:6:43", - "nodeType": "YulIdentifier", - "src": "18519:6:43" - }, - "nativeSrc": "18519:12:43", - "nodeType": "YulFunctionCall", - "src": "18519:12:43" - }, - "nativeSrc": "18519:12:43", - "nodeType": "YulExpressionStatement", - "src": "18519:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "endIndex", - "nativeSrc": "18499:8:43", - "nodeType": "YulIdentifier", - "src": "18499:8:43" - }, - { - "name": "length", - "nativeSrc": "18509:6:43", - "nodeType": "YulIdentifier", - "src": "18509:6:43" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "18496:2:43", - "nodeType": "YulIdentifier", - "src": "18496:2:43" - }, - "nativeSrc": "18496:20:43", - "nodeType": "YulFunctionCall", - "src": "18496:20:43" - }, - "nativeSrc": "18493:40:43", - "nodeType": "YulIf", - "src": "18493:40:43" - }, - { - "nativeSrc": "18542:36:43", - "nodeType": "YulAssignment", - "src": "18542:36:43", - "value": { - "arguments": [ - { - "name": "offset", - "nativeSrc": "18559:6:43", - "nodeType": "YulIdentifier", - "src": "18559:6:43" - }, - { - "name": "startIndex", - "nativeSrc": "18567:10:43", - "nodeType": "YulIdentifier", - "src": "18567:10:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "18555:3:43", - "nodeType": "YulIdentifier", - "src": "18555:3:43" - }, - "nativeSrc": "18555:23:43", - "nodeType": "YulFunctionCall", - "src": "18555:23:43" - }, - "variableNames": [ - { - "name": "offsetOut", - "nativeSrc": "18542:9:43", - "nodeType": "YulIdentifier", - "src": "18542:9:43" - } - ] - }, - { - "nativeSrc": "18587:38:43", - "nodeType": "YulAssignment", - "src": "18587:38:43", - "value": { - "arguments": [ - { - "name": "endIndex", - "nativeSrc": "18604:8:43", - "nodeType": "YulIdentifier", - "src": "18604:8:43" - }, - { - "name": "startIndex", - "nativeSrc": "18614:10:43", - "nodeType": "YulIdentifier", - "src": "18614:10:43" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "18600:3:43", - "nodeType": "YulIdentifier", - "src": "18600:3:43" - }, - "nativeSrc": "18600:25:43", - "nodeType": "YulFunctionCall", - "src": "18600:25:43" - }, - "variableNames": [ - { - "name": "lengthOut", - "nativeSrc": "18587:9:43", - "nodeType": "YulIdentifier", - "src": "18587:9:43" - } - ] - } - ] - }, - "name": "calldata_array_index_range_access_t_bytes_calldata_ptr", - "nativeSrc": "18300:331:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "offset", - "nativeSrc": "18364:6:43", - "nodeType": "YulTypedName", - "src": "18364:6:43", - "type": "" - }, - { - "name": "length", - "nativeSrc": "18372:6:43", - "nodeType": "YulTypedName", - "src": "18372:6:43", - "type": "" - }, - { - "name": "startIndex", - "nativeSrc": "18380:10:43", - "nodeType": "YulTypedName", - "src": "18380:10:43", - "type": "" - }, - { - "name": "endIndex", - "nativeSrc": "18392:8:43", - "nodeType": "YulTypedName", - "src": "18392:8:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "offsetOut", - "nativeSrc": "18405:9:43", - "nodeType": "YulTypedName", - "src": "18405:9:43", - "type": "" - }, - { - "name": "lengthOut", - "nativeSrc": "18416:9:43", - "nodeType": "YulTypedName", - "src": "18416:9:43", - "type": "" - } - ], - "src": "18300:331:43" - }, - { - "body": { - "nativeSrc": "18835:277:43", - "nodeType": "YulBlock", - "src": "18835:277:43", - "statements": [ - { - "nativeSrc": "18845:27:43", - "nodeType": "YulVariableDeclaration", - "src": "18845:27:43", - "value": { - "arguments": [ - { - "name": "value0", - "nativeSrc": "18865:6:43", - "nodeType": "YulIdentifier", - "src": "18865:6:43" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "18859:5:43", - "nodeType": "YulIdentifier", - "src": "18859:5:43" - }, - "nativeSrc": "18859:13:43", - "nodeType": "YulFunctionCall", - "src": "18859:13:43" - }, - "variables": [ - { - "name": "length", - "nativeSrc": "18849:6:43", - "nodeType": "YulTypedName", - "src": "18849:6:43", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nativeSrc": "18920:6:43", - "nodeType": "YulIdentifier", - "src": "18920:6:43" - }, - { - "kind": "number", - "nativeSrc": "18928:4:43", - "nodeType": "YulLiteral", - "src": "18928:4:43", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "18916:3:43", - "nodeType": "YulIdentifier", - "src": "18916:3:43" - }, - "nativeSrc": "18916:17:43", - "nodeType": "YulFunctionCall", - "src": "18916:17:43" - }, - { - "name": "pos", - "nativeSrc": "18935:3:43", - "nodeType": "YulIdentifier", - "src": "18935:3:43" - }, - { - "name": "length", - "nativeSrc": "18940:6:43", - "nodeType": "YulIdentifier", - "src": "18940:6:43" - } - ], - "functionName": { - "name": "copy_memory_to_memory_with_cleanup", - "nativeSrc": "18881:34:43", - "nodeType": "YulIdentifier", - "src": "18881:34:43" - }, - "nativeSrc": "18881:66:43", - "nodeType": "YulFunctionCall", - "src": "18881:66:43" - }, - "nativeSrc": "18881:66:43", - "nodeType": "YulExpressionStatement", - "src": "18881:66:43" - }, - { - "nativeSrc": "18956:29:43", - "nodeType": "YulVariableDeclaration", - "src": "18956:29:43", - "value": { - "arguments": [ - { - "name": "pos", - "nativeSrc": "18973:3:43", - "nodeType": "YulIdentifier", - "src": "18973:3:43" - }, - { - "name": "length", - "nativeSrc": "18978:6:43", - "nodeType": "YulIdentifier", - "src": "18978:6:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "18969:3:43", - "nodeType": "YulIdentifier", - "src": "18969:3:43" - }, - "nativeSrc": "18969:16:43", - "nodeType": "YulFunctionCall", - "src": "18969:16:43" - }, - "variables": [ - { - "name": "end_1", - "nativeSrc": "18960:5:43", - "nodeType": "YulTypedName", - "src": "18960:5:43", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "end_1", - "nativeSrc": "19007:5:43", - "nodeType": "YulIdentifier", - "src": "19007:5:43" - }, - { - "name": "value1", - "nativeSrc": "19014:6:43", - "nodeType": "YulIdentifier", - "src": "19014:6:43" - }, - { - "name": "value2", - "nativeSrc": "19022:6:43", - "nodeType": "YulIdentifier", - "src": "19022:6:43" - } - ], - "functionName": { - "name": "calldatacopy", - "nativeSrc": "18994:12:43", - "nodeType": "YulIdentifier", - "src": "18994:12:43" - }, - "nativeSrc": "18994:35:43", - "nodeType": "YulFunctionCall", - "src": "18994:35:43" - }, - "nativeSrc": "18994:35:43", - "nodeType": "YulExpressionStatement", - "src": "18994:35:43" - }, - { - "nativeSrc": "19038:28:43", - "nodeType": "YulVariableDeclaration", - "src": "19038:28:43", - "value": { - "arguments": [ - { - "name": "end_1", - "nativeSrc": "19052:5:43", - "nodeType": "YulIdentifier", - "src": "19052:5:43" - }, - { - "name": "value2", - "nativeSrc": "19059:6:43", - "nodeType": "YulIdentifier", - "src": "19059:6:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "19048:3:43", - "nodeType": "YulIdentifier", - "src": "19048:3:43" - }, - "nativeSrc": "19048:18:43", - "nodeType": "YulFunctionCall", - "src": "19048:18:43" - }, - "variables": [ - { - "name": "_1", - "nativeSrc": "19042:2:43", - "nodeType": "YulTypedName", - "src": "19042:2:43", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "_1", - "nativeSrc": "19082:2:43", - "nodeType": "YulIdentifier", - "src": "19082:2:43" - }, - { - "kind": "number", - "nativeSrc": "19086:1:43", - "nodeType": "YulLiteral", - "src": "19086:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "19075:6:43", - "nodeType": "YulIdentifier", - "src": "19075:6:43" - }, - "nativeSrc": "19075:13:43", - "nodeType": "YulFunctionCall", - "src": "19075:13:43" - }, - "nativeSrc": "19075:13:43", - "nodeType": "YulExpressionStatement", - "src": "19075:13:43" - }, - { - "nativeSrc": "19097:9:43", - "nodeType": "YulAssignment", - "src": "19097:9:43", - "value": { - "name": "_1", - "nativeSrc": "19104:2:43", - "nodeType": "YulIdentifier", - "src": "19104:2:43" - }, - "variableNames": [ - { - "name": "end", - "nativeSrc": "19097:3:43", - "nodeType": "YulIdentifier", - "src": "19097:3:43" - } - ] - } - ] - }, - "name": "abi_encode_tuple_packed_t_bytes_memory_ptr_t_bytes_calldata_ptr_slice__to_t_bytes_memory_ptr_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed", - "nativeSrc": "18636:476:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "pos", - "nativeSrc": "18795:3:43", - "nodeType": "YulTypedName", - "src": "18795:3:43", - "type": "" - }, - { - "name": "value2", - "nativeSrc": "18800:6:43", - "nodeType": "YulTypedName", - "src": "18800:6:43", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "18808:6:43", - "nodeType": "YulTypedName", - "src": "18808:6:43", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "18816:6:43", - "nodeType": "YulTypedName", - "src": "18816:6:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "end", - "nativeSrc": "18827:3:43", - "nodeType": "YulTypedName", - "src": "18827:3:43", - "type": "" - } - ], - "src": "18636:476:43" - }, - { - "body": { - "nativeSrc": "19183:200:43", - "nodeType": "YulBlock", - "src": "19183:200:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "pos", - "nativeSrc": "19200:3:43", - "nodeType": "YulIdentifier", - "src": "19200:3:43" - }, - { - "name": "length", - "nativeSrc": "19205:6:43", - "nodeType": "YulIdentifier", - "src": "19205:6:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "19193:6:43", - "nodeType": "YulIdentifier", - "src": "19193:6:43" - }, - "nativeSrc": "19193:19:43", - "nodeType": "YulFunctionCall", - "src": "19193:19:43" - }, - "nativeSrc": "19193:19:43", - "nodeType": "YulExpressionStatement", - "src": "19193:19:43" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "pos", - "nativeSrc": "19238:3:43", - "nodeType": "YulIdentifier", - "src": "19238:3:43" - }, - { - "kind": "number", - "nativeSrc": "19243:4:43", - "nodeType": "YulLiteral", - "src": "19243:4:43", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "19234:3:43", - "nodeType": "YulIdentifier", - "src": "19234:3:43" - }, - "nativeSrc": "19234:14:43", - "nodeType": "YulFunctionCall", - "src": "19234:14:43" - }, - { - "name": "start", - "nativeSrc": "19250:5:43", - "nodeType": "YulIdentifier", - "src": "19250:5:43" - }, - { - "name": "length", - "nativeSrc": "19257:6:43", - "nodeType": "YulIdentifier", - "src": "19257:6:43" - } - ], - "functionName": { - "name": "calldatacopy", - "nativeSrc": "19221:12:43", - "nodeType": "YulIdentifier", - "src": "19221:12:43" - }, - "nativeSrc": "19221:43:43", - "nodeType": "YulFunctionCall", - "src": "19221:43:43" - }, - "nativeSrc": "19221:43:43", - "nodeType": "YulExpressionStatement", - "src": "19221:43:43" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "pos", - "nativeSrc": "19288:3:43", - "nodeType": "YulIdentifier", - "src": "19288:3:43" - }, - { - "name": "length", - "nativeSrc": "19293:6:43", - "nodeType": "YulIdentifier", - "src": "19293:6:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "19284:3:43", - "nodeType": "YulIdentifier", - "src": "19284:3:43" - }, - "nativeSrc": "19284:16:43", - "nodeType": "YulFunctionCall", - "src": "19284:16:43" - }, - { - "kind": "number", - "nativeSrc": "19302:4:43", - "nodeType": "YulLiteral", - "src": "19302:4:43", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "19280:3:43", - "nodeType": "YulIdentifier", - "src": "19280:3:43" - }, - "nativeSrc": "19280:27:43", - "nodeType": "YulFunctionCall", - "src": "19280:27:43" - }, - { - "kind": "number", - "nativeSrc": "19309:1:43", - "nodeType": "YulLiteral", - "src": "19309:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "19273:6:43", - "nodeType": "YulIdentifier", - "src": "19273:6:43" - }, - "nativeSrc": "19273:38:43", - "nodeType": "YulFunctionCall", - "src": "19273:38:43" - }, - "nativeSrc": "19273:38:43", - "nodeType": "YulExpressionStatement", - "src": "19273:38:43" - }, - { - "nativeSrc": "19320:57:43", - "nodeType": "YulAssignment", - "src": "19320:57:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "pos", - "nativeSrc": "19335:3:43", - "nodeType": "YulIdentifier", - "src": "19335:3:43" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "length", - "nativeSrc": "19348:6:43", - "nodeType": "YulIdentifier", - "src": "19348:6:43" - }, - { - "kind": "number", - "nativeSrc": "19356:2:43", - "nodeType": "YulLiteral", - "src": "19356:2:43", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "19344:3:43", - "nodeType": "YulIdentifier", - "src": "19344:3:43" - }, - "nativeSrc": "19344:15:43", - "nodeType": "YulFunctionCall", - "src": "19344:15:43" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "19365:2:43", - "nodeType": "YulLiteral", - "src": "19365:2:43", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "not", - "nativeSrc": "19361:3:43", - "nodeType": "YulIdentifier", - "src": "19361:3:43" - }, - "nativeSrc": "19361:7:43", - "nodeType": "YulFunctionCall", - "src": "19361:7:43" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "19340:3:43", - "nodeType": "YulIdentifier", - "src": "19340:3:43" - }, - "nativeSrc": "19340:29:43", - "nodeType": "YulFunctionCall", - "src": "19340:29:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "19331:3:43", - "nodeType": "YulIdentifier", - "src": "19331:3:43" - }, - "nativeSrc": "19331:39:43", - "nodeType": "YulFunctionCall", - "src": "19331:39:43" - }, - { - "kind": "number", - "nativeSrc": "19372:4:43", - "nodeType": "YulLiteral", - "src": "19372:4:43", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "19327:3:43", - "nodeType": "YulIdentifier", - "src": "19327:3:43" - }, - "nativeSrc": "19327:50:43", - "nodeType": "YulFunctionCall", - "src": "19327:50:43" - }, - "variableNames": [ - { - "name": "end", - "nativeSrc": "19320:3:43", - "nodeType": "YulIdentifier", - "src": "19320:3:43" - } - ] - } - ] - }, - "name": "abi_encode_bytes_calldata", - "nativeSrc": "19117:266:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "start", - "nativeSrc": "19152:5:43", - "nodeType": "YulTypedName", - "src": "19152:5:43", - "type": "" - }, - { - "name": "length", - "nativeSrc": "19159:6:43", - "nodeType": "YulTypedName", - "src": "19159:6:43", - "type": "" - }, - { - "name": "pos", - "nativeSrc": "19167:3:43", - "nodeType": "YulTypedName", - "src": "19167:3:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "end", - "nativeSrc": "19175:3:43", - "nodeType": "YulTypedName", - "src": "19175:3:43", - "type": "" - } - ], - "src": "19117:266:43" - }, - { - "body": { - "nativeSrc": "19517:115:43", - "nodeType": "YulBlock", - "src": "19517:115:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "19534:9:43", - "nodeType": "YulIdentifier", - "src": "19534:9:43" - }, - { - "kind": "number", - "nativeSrc": "19545:2:43", - "nodeType": "YulLiteral", - "src": "19545:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "19527:6:43", - "nodeType": "YulIdentifier", - "src": "19527:6:43" - }, - "nativeSrc": "19527:21:43", - "nodeType": "YulFunctionCall", - "src": "19527:21:43" - }, - "nativeSrc": "19527:21:43", - "nodeType": "YulExpressionStatement", - "src": "19527:21:43" - }, - { - "nativeSrc": "19557:69:43", - "nodeType": "YulAssignment", - "src": "19557:69:43", - "value": { - "arguments": [ - { - "name": "value0", - "nativeSrc": "19591:6:43", - "nodeType": "YulIdentifier", - "src": "19591:6:43" - }, - { - "name": "value1", - "nativeSrc": "19599:6:43", - "nodeType": "YulIdentifier", - "src": "19599:6:43" - }, - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "19611:9:43", - "nodeType": "YulIdentifier", - "src": "19611:9:43" - }, - { - "kind": "number", - "nativeSrc": "19622:2:43", - "nodeType": "YulLiteral", - "src": "19622:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "19607:3:43", - "nodeType": "YulIdentifier", - "src": "19607:3:43" - }, - "nativeSrc": "19607:18:43", - "nodeType": "YulFunctionCall", - "src": "19607:18:43" - } - ], - "functionName": { - "name": "abi_encode_bytes_calldata", - "nativeSrc": "19565:25:43", - "nodeType": "YulIdentifier", - "src": "19565:25:43" - }, - "nativeSrc": "19565:61:43", - "nodeType": "YulFunctionCall", - "src": "19565:61:43" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "19557:4:43", - "nodeType": "YulIdentifier", - "src": "19557:4:43" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_bytes_calldata_ptr__to_t_bytes_memory_ptr__fromStack_reversed", - "nativeSrc": "19388:244:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "19478:9:43", - "nodeType": "YulTypedName", - "src": "19478:9:43", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "19489:6:43", - "nodeType": "YulTypedName", - "src": "19489:6:43", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "19497:6:43", - "nodeType": "YulTypedName", - "src": "19497:6:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "19508:4:43", - "nodeType": "YulTypedName", - "src": "19508:4:43", - "type": "" - } - ], - "src": "19388:244:43" - }, - { - "body": { - "nativeSrc": "19669:95:43", - "nodeType": "YulBlock", - "src": "19669:95:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "19686:1:43", - "nodeType": "YulLiteral", - "src": "19686:1:43", - "type": "", - "value": "0" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "19693:3:43", - "nodeType": "YulLiteral", - "src": "19693:3:43", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nativeSrc": "19698:10:43", - "nodeType": "YulLiteral", - "src": "19698:10:43", - "type": "", - "value": "0x4e487b71" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "19689:3:43", - "nodeType": "YulIdentifier", - "src": "19689:3:43" - }, - "nativeSrc": "19689:20:43", - "nodeType": "YulFunctionCall", - "src": "19689:20:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "19679:6:43", - "nodeType": "YulIdentifier", - "src": "19679:6:43" - }, - "nativeSrc": "19679:31:43", - "nodeType": "YulFunctionCall", - "src": "19679:31:43" - }, - "nativeSrc": "19679:31:43", - "nodeType": "YulExpressionStatement", - "src": "19679:31:43" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "19726:1:43", - "nodeType": "YulLiteral", - "src": "19726:1:43", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nativeSrc": "19729:4:43", - "nodeType": "YulLiteral", - "src": "19729:4:43", - "type": "", - "value": "0x32" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "19719:6:43", - "nodeType": "YulIdentifier", - "src": "19719:6:43" - }, - "nativeSrc": "19719:15:43", - "nodeType": "YulFunctionCall", - "src": "19719:15:43" - }, - "nativeSrc": "19719:15:43", - "nodeType": "YulExpressionStatement", - "src": "19719:15:43" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "19750:1:43", - "nodeType": "YulLiteral", - "src": "19750:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "19753:4:43", - "nodeType": "YulLiteral", - "src": "19753:4:43", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "19743:6:43", - "nodeType": "YulIdentifier", - "src": "19743:6:43" - }, - "nativeSrc": "19743:15:43", - "nodeType": "YulFunctionCall", - "src": "19743:15:43" - }, - "nativeSrc": "19743:15:43", - "nodeType": "YulExpressionStatement", - "src": "19743:15:43" - } - ] - }, - "name": "panic_error_0x32", - "nativeSrc": "19637:127:43", - "nodeType": "YulFunctionDefinition", - "src": "19637:127:43" - }, - { - "body": { - "nativeSrc": "19877:223:43", - "nodeType": "YulBlock", - "src": "19877:223:43", - "statements": [ - { - "nativeSrc": "19887:51:43", - "nodeType": "YulVariableDeclaration", - "src": "19887:51:43", - "value": { - "arguments": [ - { - "name": "ptr_to_tail", - "nativeSrc": "19926:11:43", - "nodeType": "YulIdentifier", - "src": "19926:11:43" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "19913:12:43", - "nodeType": "YulIdentifier", - "src": "19913:12:43" - }, - "nativeSrc": "19913:25:43", - "nodeType": "YulFunctionCall", - "src": "19913:25:43" - }, - "variables": [ - { - "name": "rel_offset_of_tail", - "nativeSrc": "19891:18:43", - "nodeType": "YulTypedName", - "src": "19891:18:43", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "20028:16:43", - "nodeType": "YulBlock", - "src": "20028:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "20037:1:43", - "nodeType": "YulLiteral", - "src": "20037:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "20040:1:43", - "nodeType": "YulLiteral", - "src": "20040:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "20030:6:43", - "nodeType": "YulIdentifier", - "src": "20030:6:43" - }, - "nativeSrc": "20030:12:43", - "nodeType": "YulFunctionCall", - "src": "20030:12:43" - }, - "nativeSrc": "20030:12:43", - "nodeType": "YulExpressionStatement", - "src": "20030:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "rel_offset_of_tail", - "nativeSrc": "19961:18:43", - "nodeType": "YulIdentifier", - "src": "19961:18:43" - }, - { - "arguments": [ - { - "arguments": [ - { - "arguments": [], - "functionName": { - "name": "calldatasize", - "nativeSrc": "19989:12:43", - "nodeType": "YulIdentifier", - "src": "19989:12:43" - }, - "nativeSrc": "19989:14:43", - "nodeType": "YulFunctionCall", - "src": "19989:14:43" - }, - { - "name": "base_ref", - "nativeSrc": "20005:8:43", - "nodeType": "YulIdentifier", - "src": "20005:8:43" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "19985:3:43", - "nodeType": "YulIdentifier", - "src": "19985:3:43" - }, - "nativeSrc": "19985:29:43", - "nodeType": "YulFunctionCall", - "src": "19985:29:43" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "20020:3:43", - "nodeType": "YulLiteral", - "src": "20020:3:43", - "type": "", - "value": "318" - } - ], - "functionName": { - "name": "not", - "nativeSrc": "20016:3:43", - "nodeType": "YulIdentifier", - "src": "20016:3:43" - }, - "nativeSrc": "20016:8:43", - "nodeType": "YulFunctionCall", - "src": "20016:8:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "19981:3:43", - "nodeType": "YulIdentifier", - "src": "19981:3:43" - }, - "nativeSrc": "19981:44:43", - "nodeType": "YulFunctionCall", - "src": "19981:44:43" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "19957:3:43", - "nodeType": "YulIdentifier", - "src": "19957:3:43" - }, - "nativeSrc": "19957:69:43", - "nodeType": "YulFunctionCall", - "src": "19957:69:43" - } - ], - "functionName": { - "name": "iszero", - "nativeSrc": "19950:6:43", - "nodeType": "YulIdentifier", - "src": "19950:6:43" - }, - "nativeSrc": "19950:77:43", - "nodeType": "YulFunctionCall", - "src": "19950:77:43" - }, - "nativeSrc": "19947:97:43", - "nodeType": "YulIf", - "src": "19947:97:43" - }, - { - "nativeSrc": "20053:41:43", - "nodeType": "YulAssignment", - "src": "20053:41:43", - "value": { - "arguments": [ - { - "name": "base_ref", - "nativeSrc": "20065:8:43", - "nodeType": "YulIdentifier", - "src": "20065:8:43" - }, - { - "name": "rel_offset_of_tail", - "nativeSrc": "20075:18:43", - "nodeType": "YulIdentifier", - "src": "20075:18:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "20061:3:43", - "nodeType": "YulIdentifier", - "src": "20061:3:43" - }, - "nativeSrc": "20061:33:43", - "nodeType": "YulFunctionCall", - "src": "20061:33:43" - }, - "variableNames": [ - { - "name": "addr", - "nativeSrc": "20053:4:43", - "nodeType": "YulIdentifier", - "src": "20053:4:43" - } - ] - } - ] - }, - "name": "access_calldata_tail_t_struct$_InboundPacket_$2486_calldata_ptr", - "nativeSrc": "19769:331:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "base_ref", - "nativeSrc": "19842:8:43", - "nodeType": "YulTypedName", - "src": "19842:8:43", - "type": "" - }, - { - "name": "ptr_to_tail", - "nativeSrc": "19852:11:43", - "nodeType": "YulTypedName", - "src": "19852:11:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "addr", - "nativeSrc": "19868:4:43", - "nodeType": "YulTypedName", - "src": "19868:4:43", - "type": "" - } - ], - "src": "19769:331:43" - }, - { - "body": { - "nativeSrc": "20199:427:43", - "nodeType": "YulBlock", - "src": "20199:427:43", - "statements": [ - { - "nativeSrc": "20209:51:43", - "nodeType": "YulVariableDeclaration", - "src": "20209:51:43", - "value": { - "arguments": [ - { - "name": "ptr_to_tail", - "nativeSrc": "20248:11:43", - "nodeType": "YulIdentifier", - "src": "20248:11:43" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "20235:12:43", - "nodeType": "YulIdentifier", - "src": "20235:12:43" - }, - "nativeSrc": "20235:25:43", - "nodeType": "YulFunctionCall", - "src": "20235:25:43" - }, - "variables": [ - { - "name": "rel_offset_of_tail", - "nativeSrc": "20213:18:43", - "nodeType": "YulTypedName", - "src": "20213:18:43", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "20349:16:43", - "nodeType": "YulBlock", - "src": "20349:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "20358:1:43", - "nodeType": "YulLiteral", - "src": "20358:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "20361:1:43", - "nodeType": "YulLiteral", - "src": "20361:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "20351:6:43", - "nodeType": "YulIdentifier", - "src": "20351:6:43" - }, - "nativeSrc": "20351:12:43", - "nodeType": "YulFunctionCall", - "src": "20351:12:43" - }, - "nativeSrc": "20351:12:43", - "nodeType": "YulExpressionStatement", - "src": "20351:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "rel_offset_of_tail", - "nativeSrc": "20283:18:43", - "nodeType": "YulIdentifier", - "src": "20283:18:43" - }, - { - "arguments": [ - { - "arguments": [ - { - "arguments": [], - "functionName": { - "name": "calldatasize", - "nativeSrc": "20311:12:43", - "nodeType": "YulIdentifier", - "src": "20311:12:43" - }, - "nativeSrc": "20311:14:43", - "nodeType": "YulFunctionCall", - "src": "20311:14:43" - }, - { - "name": "base_ref", - "nativeSrc": "20327:8:43", - "nodeType": "YulIdentifier", - "src": "20327:8:43" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "20307:3:43", - "nodeType": "YulIdentifier", - "src": "20307:3:43" - }, - "nativeSrc": "20307:29:43", - "nodeType": "YulFunctionCall", - "src": "20307:29:43" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "20342:2:43", - "nodeType": "YulLiteral", - "src": "20342:2:43", - "type": "", - "value": "30" - } - ], - "functionName": { - "name": "not", - "nativeSrc": "20338:3:43", - "nodeType": "YulIdentifier", - "src": "20338:3:43" - }, - "nativeSrc": "20338:7:43", - "nodeType": "YulFunctionCall", - "src": "20338:7:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "20303:3:43", - "nodeType": "YulIdentifier", - "src": "20303:3:43" - }, - "nativeSrc": "20303:43:43", - "nodeType": "YulFunctionCall", - "src": "20303:43:43" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "20279:3:43", - "nodeType": "YulIdentifier", - "src": "20279:3:43" - }, - "nativeSrc": "20279:68:43", - "nodeType": "YulFunctionCall", - "src": "20279:68:43" - } - ], - "functionName": { - "name": "iszero", - "nativeSrc": "20272:6:43", - "nodeType": "YulIdentifier", - "src": "20272:6:43" - }, - "nativeSrc": "20272:76:43", - "nodeType": "YulFunctionCall", - "src": "20272:76:43" - }, - "nativeSrc": "20269:96:43", - "nodeType": "YulIf", - "src": "20269:96:43" - }, - { - "nativeSrc": "20374:47:43", - "nodeType": "YulVariableDeclaration", - "src": "20374:47:43", - "value": { - "arguments": [ - { - "name": "base_ref", - "nativeSrc": "20392:8:43", - "nodeType": "YulIdentifier", - "src": "20392:8:43" - }, - { - "name": "rel_offset_of_tail", - "nativeSrc": "20402:18:43", - "nodeType": "YulIdentifier", - "src": "20402:18:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "20388:3:43", - "nodeType": "YulIdentifier", - "src": "20388:3:43" - }, - "nativeSrc": "20388:33:43", - "nodeType": "YulFunctionCall", - "src": "20388:33:43" - }, - "variables": [ - { - "name": "addr_1", - "nativeSrc": "20378:6:43", - "nodeType": "YulTypedName", - "src": "20378:6:43", - "type": "" - } - ] - }, - { - "nativeSrc": "20430:30:43", - "nodeType": "YulAssignment", - "src": "20430:30:43", - "value": { - "arguments": [ - { - "name": "addr_1", - "nativeSrc": "20453:6:43", - "nodeType": "YulIdentifier", - "src": "20453:6:43" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "20440:12:43", - "nodeType": "YulIdentifier", - "src": "20440:12:43" - }, - "nativeSrc": "20440:20:43", - "nodeType": "YulFunctionCall", - "src": "20440:20:43" - }, - "variableNames": [ - { - "name": "length", - "nativeSrc": "20430:6:43", - "nodeType": "YulIdentifier", - "src": "20430:6:43" - } - ] - }, - { - "body": { - "nativeSrc": "20503:16:43", - "nodeType": "YulBlock", - "src": "20503:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "20512:1:43", - "nodeType": "YulLiteral", - "src": "20512:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "20515:1:43", - "nodeType": "YulLiteral", - "src": "20515:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "20505:6:43", - "nodeType": "YulIdentifier", - "src": "20505:6:43" - }, - "nativeSrc": "20505:12:43", - "nodeType": "YulFunctionCall", - "src": "20505:12:43" - }, - "nativeSrc": "20505:12:43", - "nodeType": "YulExpressionStatement", - "src": "20505:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "length", - "nativeSrc": "20475:6:43", - "nodeType": "YulIdentifier", - "src": "20475:6:43" - }, - { - "kind": "number", - "nativeSrc": "20483:18:43", - "nodeType": "YulLiteral", - "src": "20483:18:43", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "20472:2:43", - "nodeType": "YulIdentifier", - "src": "20472:2:43" - }, - "nativeSrc": "20472:30:43", - "nodeType": "YulFunctionCall", - "src": "20472:30:43" - }, - "nativeSrc": "20469:50:43", - "nodeType": "YulIf", - "src": "20469:50:43" - }, - { - "nativeSrc": "20528:25:43", - "nodeType": "YulAssignment", - "src": "20528:25:43", - "value": { - "arguments": [ - { - "name": "addr_1", - "nativeSrc": "20540:6:43", - "nodeType": "YulIdentifier", - "src": "20540:6:43" - }, - { - "kind": "number", - "nativeSrc": "20548:4:43", - "nodeType": "YulLiteral", - "src": "20548:4:43", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "20536:3:43", - "nodeType": "YulIdentifier", - "src": "20536:3:43" - }, - "nativeSrc": "20536:17:43", - "nodeType": "YulFunctionCall", - "src": "20536:17:43" - }, - "variableNames": [ - { - "name": "addr", - "nativeSrc": "20528:4:43", - "nodeType": "YulIdentifier", - "src": "20528:4:43" - } - ] - }, - { - "body": { - "nativeSrc": "20604:16:43", - "nodeType": "YulBlock", - "src": "20604:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "20613:1:43", - "nodeType": "YulLiteral", - "src": "20613:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "20616:1:43", - "nodeType": "YulLiteral", - "src": "20616:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "20606:6:43", - "nodeType": "YulIdentifier", - "src": "20606:6:43" - }, - "nativeSrc": "20606:12:43", - "nodeType": "YulFunctionCall", - "src": "20606:12:43" - }, - "nativeSrc": "20606:12:43", - "nodeType": "YulExpressionStatement", - "src": "20606:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "addr", - "nativeSrc": "20569:4:43", - "nodeType": "YulIdentifier", - "src": "20569:4:43" - }, - { - "arguments": [ - { - "arguments": [], - "functionName": { - "name": "calldatasize", - "nativeSrc": "20579:12:43", - "nodeType": "YulIdentifier", - "src": "20579:12:43" - }, - "nativeSrc": "20579:14:43", - "nodeType": "YulFunctionCall", - "src": "20579:14:43" - }, - { - "name": "length", - "nativeSrc": "20595:6:43", - "nodeType": "YulIdentifier", - "src": "20595:6:43" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "20575:3:43", - "nodeType": "YulIdentifier", - "src": "20575:3:43" - }, - "nativeSrc": "20575:27:43", - "nodeType": "YulFunctionCall", - "src": "20575:27:43" - } - ], - "functionName": { - "name": "sgt", - "nativeSrc": "20565:3:43", - "nodeType": "YulIdentifier", - "src": "20565:3:43" - }, - "nativeSrc": "20565:38:43", - "nodeType": "YulFunctionCall", - "src": "20565:38:43" - }, - "nativeSrc": "20562:58:43", - "nodeType": "YulIf", - "src": "20562:58:43" - } - ] - }, - "name": "access_calldata_tail_t_bytes_calldata_ptr", - "nativeSrc": "20105:521:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "base_ref", - "nativeSrc": "20156:8:43", - "nodeType": "YulTypedName", - "src": "20156:8:43", - "type": "" - }, - { - "name": "ptr_to_tail", - "nativeSrc": "20166:11:43", - "nodeType": "YulTypedName", - "src": "20166:11:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "addr", - "nativeSrc": "20182:4:43", - "nodeType": "YulTypedName", - "src": "20182:4:43", - "type": "" - }, - { - "name": "length", - "nativeSrc": "20188:6:43", - "nodeType": "YulTypedName", - "src": "20188:6:43", - "type": "" - } - ], - "src": "20105:521:43" - }, - { - "body": { - "nativeSrc": "20675:85:43", - "nodeType": "YulBlock", - "src": "20675:85:43", - "statements": [ - { - "body": { - "nativeSrc": "20738:16:43", - "nodeType": "YulBlock", - "src": "20738:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "20747:1:43", - "nodeType": "YulLiteral", - "src": "20747:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "20750:1:43", - "nodeType": "YulLiteral", - "src": "20750:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "20740:6:43", - "nodeType": "YulIdentifier", - "src": "20740:6:43" - }, - "nativeSrc": "20740:12:43", - "nodeType": "YulFunctionCall", - "src": "20740:12:43" - }, - "nativeSrc": "20740:12:43", - "nodeType": "YulExpressionStatement", - "src": "20740:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nativeSrc": "20698:5:43", - "nodeType": "YulIdentifier", - "src": "20698:5:43" - }, - { - "arguments": [ - { - "name": "value", - "nativeSrc": "20709:5:43", - "nodeType": "YulIdentifier", - "src": "20709:5:43" - }, - { - "kind": "number", - "nativeSrc": "20716:18:43", - "nodeType": "YulLiteral", - "src": "20716:18:43", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "20705:3:43", - "nodeType": "YulIdentifier", - "src": "20705:3:43" - }, - "nativeSrc": "20705:30:43", - "nodeType": "YulFunctionCall", - "src": "20705:30:43" - } - ], - "functionName": { - "name": "eq", - "nativeSrc": "20695:2:43", - "nodeType": "YulIdentifier", - "src": "20695:2:43" - }, - "nativeSrc": "20695:41:43", - "nodeType": "YulFunctionCall", - "src": "20695:41:43" - } - ], - "functionName": { - "name": "iszero", - "nativeSrc": "20688:6:43", - "nodeType": "YulIdentifier", - "src": "20688:6:43" - }, - "nativeSrc": "20688:49:43", - "nodeType": "YulFunctionCall", - "src": "20688:49:43" - }, - "nativeSrc": "20685:69:43", - "nodeType": "YulIf", - "src": "20685:69:43" - } - ] - }, - "name": "validator_revert_uint64", - "nativeSrc": "20631:129:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nativeSrc": "20664:5:43", - "nodeType": "YulTypedName", - "src": "20664:5:43", - "type": "" - } - ], - "src": "20631:129:43" - }, - { - "body": { - "nativeSrc": "21080:673:43", - "nodeType": "YulBlock", - "src": "21080:673:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "21097:9:43", - "nodeType": "YulIdentifier", - "src": "21097:9:43" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nativeSrc": "21130:6:43", - "nodeType": "YulIdentifier", - "src": "21130:6:43" - } - ], - "functionName": { - "name": "abi_decode_uint32", - "nativeSrc": "21112:17:43", - "nodeType": "YulIdentifier", - "src": "21112:17:43" - }, - "nativeSrc": "21112:25:43", - "nodeType": "YulFunctionCall", - "src": "21112:25:43" - }, - { - "kind": "number", - "nativeSrc": "21139:10:43", - "nodeType": "YulLiteral", - "src": "21139:10:43", - "type": "", - "value": "0xffffffff" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "21108:3:43", - "nodeType": "YulIdentifier", - "src": "21108:3:43" - }, - "nativeSrc": "21108:42:43", - "nodeType": "YulFunctionCall", - "src": "21108:42:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "21090:6:43", - "nodeType": "YulIdentifier", - "src": "21090:6:43" - }, - "nativeSrc": "21090:61:43", - "nodeType": "YulFunctionCall", - "src": "21090:61:43" - }, - "nativeSrc": "21090:61:43", - "nodeType": "YulExpressionStatement", - "src": "21090:61:43" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "21171:9:43", - "nodeType": "YulIdentifier", - "src": "21171:9:43" - }, - { - "kind": "number", - "nativeSrc": "21182:4:43", - "nodeType": "YulLiteral", - "src": "21182:4:43", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "21167:3:43", - "nodeType": "YulIdentifier", - "src": "21167:3:43" - }, - "nativeSrc": "21167:20:43", - "nodeType": "YulFunctionCall", - "src": "21167:20:43" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nativeSrc": "21206:6:43", - "nodeType": "YulIdentifier", - "src": "21206:6:43" - }, - { - "kind": "number", - "nativeSrc": "21214:4:43", - "nodeType": "YulLiteral", - "src": "21214:4:43", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "21202:3:43", - "nodeType": "YulIdentifier", - "src": "21202:3:43" - }, - "nativeSrc": "21202:17:43", - "nodeType": "YulFunctionCall", - "src": "21202:17:43" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "21189:12:43", - "nodeType": "YulIdentifier", - "src": "21189:12:43" - }, - "nativeSrc": "21189:31:43", - "nodeType": "YulFunctionCall", - "src": "21189:31:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "21160:6:43", - "nodeType": "YulIdentifier", - "src": "21160:6:43" - }, - "nativeSrc": "21160:61:43", - "nodeType": "YulFunctionCall", - "src": "21160:61:43" - }, - "nativeSrc": "21160:61:43", - "nodeType": "YulExpressionStatement", - "src": "21160:61:43" - }, - { - "nativeSrc": "21230:44:43", - "nodeType": "YulVariableDeclaration", - "src": "21230:44:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nativeSrc": "21260:6:43", - "nodeType": "YulIdentifier", - "src": "21260:6:43" - }, - { - "kind": "number", - "nativeSrc": "21268:4:43", - "nodeType": "YulLiteral", - "src": "21268:4:43", - "type": "", - "value": "0x40" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "21256:3:43", - "nodeType": "YulIdentifier", - "src": "21256:3:43" - }, - "nativeSrc": "21256:17:43", - "nodeType": "YulFunctionCall", - "src": "21256:17:43" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "21243:12:43", - "nodeType": "YulIdentifier", - "src": "21243:12:43" - }, - "nativeSrc": "21243:31:43", - "nodeType": "YulFunctionCall", - "src": "21243:31:43" - }, - "variables": [ - { - "name": "value", - "nativeSrc": "21234:5:43", - "nodeType": "YulTypedName", - "src": "21234:5:43", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nativeSrc": "21307:5:43", - "nodeType": "YulIdentifier", - "src": "21307:5:43" - } - ], - "functionName": { - "name": "validator_revert_uint64", - "nativeSrc": "21283:23:43", - "nodeType": "YulIdentifier", - "src": "21283:23:43" - }, - "nativeSrc": "21283:30:43", - "nodeType": "YulFunctionCall", - "src": "21283:30:43" - }, - "nativeSrc": "21283:30:43", - "nodeType": "YulExpressionStatement", - "src": "21283:30:43" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "21333:9:43", - "nodeType": "YulIdentifier", - "src": "21333:9:43" - }, - { - "kind": "number", - "nativeSrc": "21344:4:43", - "nodeType": "YulLiteral", - "src": "21344:4:43", - "type": "", - "value": "0x40" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "21329:3:43", - "nodeType": "YulIdentifier", - "src": "21329:3:43" - }, - "nativeSrc": "21329:20:43", - "nodeType": "YulFunctionCall", - "src": "21329:20:43" - }, - { - "arguments": [ - { - "name": "value", - "nativeSrc": "21355:5:43", - "nodeType": "YulIdentifier", - "src": "21355:5:43" - }, - { - "kind": "number", - "nativeSrc": "21362:18:43", - "nodeType": "YulLiteral", - "src": "21362:18:43", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "21351:3:43", - "nodeType": "YulIdentifier", - "src": "21351:3:43" - }, - "nativeSrc": "21351:30:43", - "nodeType": "YulFunctionCall", - "src": "21351:30:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "21322:6:43", - "nodeType": "YulIdentifier", - "src": "21322:6:43" - }, - "nativeSrc": "21322:60:43", - "nodeType": "YulFunctionCall", - "src": "21322:60:43" - }, - "nativeSrc": "21322:60:43", - "nodeType": "YulExpressionStatement", - "src": "21322:60:43" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "21402:9:43", - "nodeType": "YulIdentifier", - "src": "21402:9:43" - }, - { - "kind": "number", - "nativeSrc": "21413:2:43", - "nodeType": "YulLiteral", - "src": "21413:2:43", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "21398:3:43", - "nodeType": "YulIdentifier", - "src": "21398:3:43" - }, - "nativeSrc": "21398:18:43", - "nodeType": "YulFunctionCall", - "src": "21398:18:43" - }, - { - "name": "value1", - "nativeSrc": "21418:6:43", - "nodeType": "YulIdentifier", - "src": "21418:6:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "21391:6:43", - "nodeType": "YulIdentifier", - "src": "21391:6:43" - }, - "nativeSrc": "21391:34:43", - "nodeType": "YulFunctionCall", - "src": "21391:34:43" - }, - "nativeSrc": "21391:34:43", - "nodeType": "YulExpressionStatement", - "src": "21391:34:43" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "21445:9:43", - "nodeType": "YulIdentifier", - "src": "21445:9:43" - }, - { - "kind": "number", - "nativeSrc": "21456:3:43", - "nodeType": "YulLiteral", - "src": "21456:3:43", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "21441:3:43", - "nodeType": "YulIdentifier", - "src": "21441:3:43" - }, - "nativeSrc": "21441:19:43", - "nodeType": "YulFunctionCall", - "src": "21441:19:43" - }, - { - "kind": "number", - "nativeSrc": "21462:3:43", - "nodeType": "YulLiteral", - "src": "21462:3:43", - "type": "", - "value": "224" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "21434:6:43", - "nodeType": "YulIdentifier", - "src": "21434:6:43" - }, - "nativeSrc": "21434:32:43", - "nodeType": "YulFunctionCall", - "src": "21434:32:43" - }, - "nativeSrc": "21434:32:43", - "nodeType": "YulExpressionStatement", - "src": "21434:32:43" - }, - { - "nativeSrc": "21475:76:43", - "nodeType": "YulVariableDeclaration", - "src": "21475:76:43", - "value": { - "arguments": [ - { - "name": "value2", - "nativeSrc": "21515:6:43", - "nodeType": "YulIdentifier", - "src": "21515:6:43" - }, - { - "name": "value3", - "nativeSrc": "21523:6:43", - "nodeType": "YulIdentifier", - "src": "21523:6:43" - }, - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "21535:9:43", - "nodeType": "YulIdentifier", - "src": "21535:9:43" - }, - { - "kind": "number", - "nativeSrc": "21546:3:43", - "nodeType": "YulLiteral", - "src": "21546:3:43", - "type": "", - "value": "224" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "21531:3:43", - "nodeType": "YulIdentifier", - "src": "21531:3:43" - }, - "nativeSrc": "21531:19:43", - "nodeType": "YulFunctionCall", - "src": "21531:19:43" - } - ], - "functionName": { - "name": "abi_encode_bytes_calldata", - "nativeSrc": "21489:25:43", - "nodeType": "YulIdentifier", - "src": "21489:25:43" - }, - "nativeSrc": "21489:62:43", - "nodeType": "YulFunctionCall", - "src": "21489:62:43" - }, - "variables": [ - { - "name": "tail_1", - "nativeSrc": "21479:6:43", - "nodeType": "YulTypedName", - "src": "21479:6:43", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "21571:9:43", - "nodeType": "YulIdentifier", - "src": "21571:9:43" - }, - { - "kind": "number", - "nativeSrc": "21582:3:43", - "nodeType": "YulLiteral", - "src": "21582:3:43", - "type": "", - "value": "160" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "21567:3:43", - "nodeType": "YulIdentifier", - "src": "21567:3:43" - }, - "nativeSrc": "21567:19:43", - "nodeType": "YulFunctionCall", - "src": "21567:19:43" - }, - { - "arguments": [ - { - "name": "value4", - "nativeSrc": "21592:6:43", - "nodeType": "YulIdentifier", - "src": "21592:6:43" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "21608:3:43", - "nodeType": "YulLiteral", - "src": "21608:3:43", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nativeSrc": "21613:1:43", - "nodeType": "YulLiteral", - "src": "21613:1:43", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "21604:3:43", - "nodeType": "YulIdentifier", - "src": "21604:3:43" - }, - "nativeSrc": "21604:11:43", - "nodeType": "YulFunctionCall", - "src": "21604:11:43" - }, - { - "kind": "number", - "nativeSrc": "21617:1:43", - "nodeType": "YulLiteral", - "src": "21617:1:43", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "21600:3:43", - "nodeType": "YulIdentifier", - "src": "21600:3:43" - }, - "nativeSrc": "21600:19:43", - "nodeType": "YulFunctionCall", - "src": "21600:19:43" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "21588:3:43", - "nodeType": "YulIdentifier", - "src": "21588:3:43" - }, - "nativeSrc": "21588:32:43", - "nodeType": "YulFunctionCall", - "src": "21588:32:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "21560:6:43", - "nodeType": "YulIdentifier", - "src": "21560:6:43" - }, - "nativeSrc": "21560:61:43", - "nodeType": "YulFunctionCall", - "src": "21560:61:43" - }, - "nativeSrc": "21560:61:43", - "nodeType": "YulExpressionStatement", - "src": "21560:61:43" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "21641:9:43", - "nodeType": "YulIdentifier", - "src": "21641:9:43" - }, - { - "kind": "number", - "nativeSrc": "21652:3:43", - "nodeType": "YulLiteral", - "src": "21652:3:43", - "type": "", - "value": "192" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "21637:3:43", - "nodeType": "YulIdentifier", - "src": "21637:3:43" - }, - "nativeSrc": "21637:19:43", - "nodeType": "YulFunctionCall", - "src": "21637:19:43" - }, - { - "arguments": [ - { - "name": "tail_1", - "nativeSrc": "21662:6:43", - "nodeType": "YulIdentifier", - "src": "21662:6:43" - }, - { - "name": "headStart", - "nativeSrc": "21670:9:43", - "nodeType": "YulIdentifier", - "src": "21670:9:43" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "21658:3:43", - "nodeType": "YulIdentifier", - "src": "21658:3:43" - }, - "nativeSrc": "21658:22:43", - "nodeType": "YulFunctionCall", - "src": "21658:22:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "21630:6:43", - "nodeType": "YulIdentifier", - "src": "21630:6:43" - }, - "nativeSrc": "21630:51:43", - "nodeType": "YulFunctionCall", - "src": "21630:51:43" - }, - "nativeSrc": "21630:51:43", - "nodeType": "YulExpressionStatement", - "src": "21630:51:43" - }, - { - "nativeSrc": "21690:57:43", - "nodeType": "YulAssignment", - "src": "21690:57:43", - "value": { - "arguments": [ - { - "name": "value5", - "nativeSrc": "21724:6:43", - "nodeType": "YulIdentifier", - "src": "21724:6:43" - }, - { - "name": "value6", - "nativeSrc": "21732:6:43", - "nodeType": "YulIdentifier", - "src": "21732:6:43" - }, - { - "name": "tail_1", - "nativeSrc": "21740:6:43", - "nodeType": "YulIdentifier", - "src": "21740:6:43" - } - ], - "functionName": { - "name": "abi_encode_bytes_calldata", - "nativeSrc": "21698:25:43", - "nodeType": "YulIdentifier", - "src": "21698:25:43" - }, - "nativeSrc": "21698:49:43", - "nodeType": "YulFunctionCall", - "src": "21698:49:43" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "21690:4:43", - "nodeType": "YulIdentifier", - "src": "21690:4:43" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_struct$_Origin_$40_calldata_ptr_t_bytes32_t_bytes_calldata_ptr_t_address_t_bytes_calldata_ptr__to_t_struct$_Origin_$40_memory_ptr_t_bytes32_t_bytes_memory_ptr_t_address_t_bytes_memory_ptr__fromStack_reversed", - "nativeSrc": "20765:988:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "21001:9:43", - "nodeType": "YulTypedName", - "src": "21001:9:43", - "type": "" - }, - { - "name": "value6", - "nativeSrc": "21012:6:43", - "nodeType": "YulTypedName", - "src": "21012:6:43", - "type": "" - }, - { - "name": "value5", - "nativeSrc": "21020:6:43", - "nodeType": "YulTypedName", - "src": "21020:6:43", - "type": "" - }, - { - "name": "value4", - "nativeSrc": "21028:6:43", - "nodeType": "YulTypedName", - "src": "21028:6:43", - "type": "" - }, - { - "name": "value3", - "nativeSrc": "21036:6:43", - "nodeType": "YulTypedName", - "src": "21036:6:43", - "type": "" - }, - { - "name": "value2", - "nativeSrc": "21044:6:43", - "nodeType": "YulTypedName", - "src": "21044:6:43", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "21052:6:43", - "nodeType": "YulTypedName", - "src": "21052:6:43", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "21060:6:43", - "nodeType": "YulTypedName", - "src": "21060:6:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "21071:4:43", - "nodeType": "YulTypedName", - "src": "21071:4:43", - "type": "" - } - ], - "src": "20765:988:43" - }, - { - "body": { - "nativeSrc": "21848:557:43", - "nodeType": "YulBlock", - "src": "21848:557:43", - "statements": [ - { - "body": { - "nativeSrc": "21894:16:43", - "nodeType": "YulBlock", - "src": "21894:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "21903:1:43", - "nodeType": "YulLiteral", - "src": "21903:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "21906:1:43", - "nodeType": "YulLiteral", - "src": "21906:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "21896:6:43", - "nodeType": "YulIdentifier", - "src": "21896:6:43" - }, - "nativeSrc": "21896:12:43", - "nodeType": "YulFunctionCall", - "src": "21896:12:43" - }, - "nativeSrc": "21896:12:43", - "nodeType": "YulExpressionStatement", - "src": "21896:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nativeSrc": "21869:7:43", - "nodeType": "YulIdentifier", - "src": "21869:7:43" - }, - { - "name": "headStart", - "nativeSrc": "21878:9:43", - "nodeType": "YulIdentifier", - "src": "21878:9:43" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "21865:3:43", - "nodeType": "YulIdentifier", - "src": "21865:3:43" - }, - "nativeSrc": "21865:23:43", - "nodeType": "YulFunctionCall", - "src": "21865:23:43" - }, - { - "kind": "number", - "nativeSrc": "21890:2:43", - "nodeType": "YulLiteral", - "src": "21890:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "21861:3:43", - "nodeType": "YulIdentifier", - "src": "21861:3:43" - }, - "nativeSrc": "21861:32:43", - "nodeType": "YulFunctionCall", - "src": "21861:32:43" - }, - "nativeSrc": "21858:52:43", - "nodeType": "YulIf", - "src": "21858:52:43" - }, - { - "nativeSrc": "21919:30:43", - "nodeType": "YulVariableDeclaration", - "src": "21919:30:43", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "21939:9:43", - "nodeType": "YulIdentifier", - "src": "21939:9:43" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "21933:5:43", - "nodeType": "YulIdentifier", - "src": "21933:5:43" - }, - "nativeSrc": "21933:16:43", - "nodeType": "YulFunctionCall", - "src": "21933:16:43" - }, - "variables": [ - { - "name": "offset", - "nativeSrc": "21923:6:43", - "nodeType": "YulTypedName", - "src": "21923:6:43", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "21992:16:43", - "nodeType": "YulBlock", - "src": "21992:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "22001:1:43", - "nodeType": "YulLiteral", - "src": "22001:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "22004:1:43", - "nodeType": "YulLiteral", - "src": "22004:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "21994:6:43", - "nodeType": "YulIdentifier", - "src": "21994:6:43" - }, - "nativeSrc": "21994:12:43", - "nodeType": "YulFunctionCall", - "src": "21994:12:43" - }, - "nativeSrc": "21994:12:43", - "nodeType": "YulExpressionStatement", - "src": "21994:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "offset", - "nativeSrc": "21964:6:43", - "nodeType": "YulIdentifier", - "src": "21964:6:43" - }, - { - "kind": "number", - "nativeSrc": "21972:18:43", - "nodeType": "YulLiteral", - "src": "21972:18:43", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "21961:2:43", - "nodeType": "YulIdentifier", - "src": "21961:2:43" - }, - "nativeSrc": "21961:30:43", - "nodeType": "YulFunctionCall", - "src": "21961:30:43" - }, - "nativeSrc": "21958:50:43", - "nodeType": "YulIf", - "src": "21958:50:43" - }, - { - "nativeSrc": "22017:32:43", - "nodeType": "YulVariableDeclaration", - "src": "22017:32:43", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "22031:9:43", - "nodeType": "YulIdentifier", - "src": "22031:9:43" - }, - { - "name": "offset", - "nativeSrc": "22042:6:43", - "nodeType": "YulIdentifier", - "src": "22042:6:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "22027:3:43", - "nodeType": "YulIdentifier", - "src": "22027:3:43" - }, - "nativeSrc": "22027:22:43", - "nodeType": "YulFunctionCall", - "src": "22027:22:43" - }, - "variables": [ - { - "name": "_1", - "nativeSrc": "22021:2:43", - "nodeType": "YulTypedName", - "src": "22021:2:43", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "22097:16:43", - "nodeType": "YulBlock", - "src": "22097:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "22106:1:43", - "nodeType": "YulLiteral", - "src": "22106:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "22109:1:43", - "nodeType": "YulLiteral", - "src": "22109:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "22099:6:43", - "nodeType": "YulIdentifier", - "src": "22099:6:43" - }, - "nativeSrc": "22099:12:43", - "nodeType": "YulFunctionCall", - "src": "22099:12:43" - }, - "nativeSrc": "22099:12:43", - "nodeType": "YulExpressionStatement", - "src": "22099:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "_1", - "nativeSrc": "22076:2:43", - "nodeType": "YulIdentifier", - "src": "22076:2:43" - }, - { - "kind": "number", - "nativeSrc": "22080:4:43", - "nodeType": "YulLiteral", - "src": "22080:4:43", - "type": "", - "value": "0x1f" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "22072:3:43", - "nodeType": "YulIdentifier", - "src": "22072:3:43" - }, - "nativeSrc": "22072:13:43", - "nodeType": "YulFunctionCall", - "src": "22072:13:43" - }, - { - "name": "dataEnd", - "nativeSrc": "22087:7:43", - "nodeType": "YulIdentifier", - "src": "22087:7:43" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "22068:3:43", - "nodeType": "YulIdentifier", - "src": "22068:3:43" - }, - "nativeSrc": "22068:27:43", - "nodeType": "YulFunctionCall", - "src": "22068:27:43" - } - ], - "functionName": { - "name": "iszero", - "nativeSrc": "22061:6:43", - "nodeType": "YulIdentifier", - "src": "22061:6:43" - }, - "nativeSrc": "22061:35:43", - "nodeType": "YulFunctionCall", - "src": "22061:35:43" - }, - "nativeSrc": "22058:55:43", - "nodeType": "YulIf", - "src": "22058:55:43" - }, - { - "nativeSrc": "22122:19:43", - "nodeType": "YulVariableDeclaration", - "src": "22122:19:43", - "value": { - "arguments": [ - { - "name": "_1", - "nativeSrc": "22138:2:43", - "nodeType": "YulIdentifier", - "src": "22138:2:43" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "22132:5:43", - "nodeType": "YulIdentifier", - "src": "22132:5:43" - }, - "nativeSrc": "22132:9:43", - "nodeType": "YulFunctionCall", - "src": "22132:9:43" - }, - "variables": [ - { - "name": "_2", - "nativeSrc": "22126:2:43", - "nodeType": "YulTypedName", - "src": "22126:2:43", - "type": "" - } - ] - }, - { - "nativeSrc": "22150:61:43", - "nodeType": "YulVariableDeclaration", - "src": "22150:61:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "_2", - "nativeSrc": "22207:2:43", - "nodeType": "YulIdentifier", - "src": "22207:2:43" - } - ], - "functionName": { - "name": "array_allocation_size_bytes", - "nativeSrc": "22179:27:43", - "nodeType": "YulIdentifier", - "src": "22179:27:43" - }, - "nativeSrc": "22179:31:43", - "nodeType": "YulFunctionCall", - "src": "22179:31:43" - } - ], - "functionName": { - "name": "allocate_memory", - "nativeSrc": "22163:15:43", - "nodeType": "YulIdentifier", - "src": "22163:15:43" - }, - "nativeSrc": "22163:48:43", - "nodeType": "YulFunctionCall", - "src": "22163:48:43" - }, - "variables": [ - { - "name": "array", - "nativeSrc": "22154:5:43", - "nodeType": "YulTypedName", - "src": "22154:5:43", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "array", - "nativeSrc": "22227:5:43", - "nodeType": "YulIdentifier", - "src": "22227:5:43" - }, - { - "name": "_2", - "nativeSrc": "22234:2:43", - "nodeType": "YulIdentifier", - "src": "22234:2:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "22220:6:43", - "nodeType": "YulIdentifier", - "src": "22220:6:43" - }, - "nativeSrc": "22220:17:43", - "nodeType": "YulFunctionCall", - "src": "22220:17:43" - }, - "nativeSrc": "22220:17:43", - "nodeType": "YulExpressionStatement", - "src": "22220:17:43" - }, - { - "body": { - "nativeSrc": "22283:16:43", - "nodeType": "YulBlock", - "src": "22283:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "22292:1:43", - "nodeType": "YulLiteral", - "src": "22292:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "22295:1:43", - "nodeType": "YulLiteral", - "src": "22295:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "22285:6:43", - "nodeType": "YulIdentifier", - "src": "22285:6:43" - }, - "nativeSrc": "22285:12:43", - "nodeType": "YulFunctionCall", - "src": "22285:12:43" - }, - "nativeSrc": "22285:12:43", - "nodeType": "YulExpressionStatement", - "src": "22285:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "_1", - "nativeSrc": "22260:2:43", - "nodeType": "YulIdentifier", - "src": "22260:2:43" - }, - { - "name": "_2", - "nativeSrc": "22264:2:43", - "nodeType": "YulIdentifier", - "src": "22264:2:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "22256:3:43", - "nodeType": "YulIdentifier", - "src": "22256:3:43" - }, - "nativeSrc": "22256:11:43", - "nodeType": "YulFunctionCall", - "src": "22256:11:43" - }, - { - "kind": "number", - "nativeSrc": "22269:2:43", - "nodeType": "YulLiteral", - "src": "22269:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "22252:3:43", - "nodeType": "YulIdentifier", - "src": "22252:3:43" - }, - "nativeSrc": "22252:20:43", - "nodeType": "YulFunctionCall", - "src": "22252:20:43" - }, - { - "name": "dataEnd", - "nativeSrc": "22274:7:43", - "nodeType": "YulIdentifier", - "src": "22274:7:43" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "22249:2:43", - "nodeType": "YulIdentifier", - "src": "22249:2:43" - }, - "nativeSrc": "22249:33:43", - "nodeType": "YulFunctionCall", - "src": "22249:33:43" - }, - "nativeSrc": "22246:53:43", - "nodeType": "YulIf", - "src": "22246:53:43" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "_1", - "nativeSrc": "22347:2:43", - "nodeType": "YulIdentifier", - "src": "22347:2:43" - }, - { - "kind": "number", - "nativeSrc": "22351:2:43", - "nodeType": "YulLiteral", - "src": "22351:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "22343:3:43", - "nodeType": "YulIdentifier", - "src": "22343:3:43" - }, - "nativeSrc": "22343:11:43", - "nodeType": "YulFunctionCall", - "src": "22343:11:43" - }, - { - "arguments": [ - { - "name": "array", - "nativeSrc": "22360:5:43", - "nodeType": "YulIdentifier", - "src": "22360:5:43" - }, - { - "kind": "number", - "nativeSrc": "22367:2:43", - "nodeType": "YulLiteral", - "src": "22367:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "22356:3:43", - "nodeType": "YulIdentifier", - "src": "22356:3:43" - }, - "nativeSrc": "22356:14:43", - "nodeType": "YulFunctionCall", - "src": "22356:14:43" - }, - { - "name": "_2", - "nativeSrc": "22372:2:43", - "nodeType": "YulIdentifier", - "src": "22372:2:43" - } - ], - "functionName": { - "name": "copy_memory_to_memory_with_cleanup", - "nativeSrc": "22308:34:43", - "nodeType": "YulIdentifier", - "src": "22308:34:43" - }, - "nativeSrc": "22308:67:43", - "nodeType": "YulFunctionCall", - "src": "22308:67:43" - }, - "nativeSrc": "22308:67:43", - "nodeType": "YulExpressionStatement", - "src": "22308:67:43" - }, - { - "nativeSrc": "22384:15:43", - "nodeType": "YulAssignment", - "src": "22384:15:43", - "value": { - "name": "array", - "nativeSrc": "22394:5:43", - "nodeType": "YulIdentifier", - "src": "22394:5:43" - }, - "variableNames": [ - { - "name": "value0", - "nativeSrc": "22384:6:43", - "nodeType": "YulIdentifier", - "src": "22384:6:43" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_bytes_memory_ptr_fromMemory", - "nativeSrc": "21758:647:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "21814:9:43", - "nodeType": "YulTypedName", - "src": "21814:9:43", - "type": "" - }, - { - "name": "dataEnd", - "nativeSrc": "21825:7:43", - "nodeType": "YulTypedName", - "src": "21825:7:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nativeSrc": "21837:6:43", - "nodeType": "YulTypedName", - "src": "21837:6:43", - "type": "" - } - ], - "src": "21758:647:43" - }, - { - "body": { - "nativeSrc": "22539:119:43", - "nodeType": "YulBlock", - "src": "22539:119:43", - "statements": [ - { - "nativeSrc": "22549:26:43", - "nodeType": "YulAssignment", - "src": "22549:26:43", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "22561:9:43", - "nodeType": "YulIdentifier", - "src": "22561:9:43" - }, - { - "kind": "number", - "nativeSrc": "22572:2:43", - "nodeType": "YulLiteral", - "src": "22572:2:43", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "22557:3:43", - "nodeType": "YulIdentifier", - "src": "22557:3:43" - }, - "nativeSrc": "22557:18:43", - "nodeType": "YulFunctionCall", - "src": "22557:18:43" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "22549:4:43", - "nodeType": "YulIdentifier", - "src": "22549:4:43" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "22591:9:43", - "nodeType": "YulIdentifier", - "src": "22591:9:43" - }, - { - "name": "value0", - "nativeSrc": "22602:6:43", - "nodeType": "YulIdentifier", - "src": "22602:6:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "22584:6:43", - "nodeType": "YulIdentifier", - "src": "22584:6:43" - }, - "nativeSrc": "22584:25:43", - "nodeType": "YulFunctionCall", - "src": "22584:25:43" - }, - "nativeSrc": "22584:25:43", - "nodeType": "YulExpressionStatement", - "src": "22584:25:43" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "22629:9:43", - "nodeType": "YulIdentifier", - "src": "22629:9:43" - }, - { - "kind": "number", - "nativeSrc": "22640:2:43", - "nodeType": "YulLiteral", - "src": "22640:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "22625:3:43", - "nodeType": "YulIdentifier", - "src": "22625:3:43" - }, - "nativeSrc": "22625:18:43", - "nodeType": "YulFunctionCall", - "src": "22625:18:43" - }, - { - "name": "value1", - "nativeSrc": "22645:6:43", - "nodeType": "YulIdentifier", - "src": "22645:6:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "22618:6:43", - "nodeType": "YulIdentifier", - "src": "22618:6:43" - }, - "nativeSrc": "22618:34:43", - "nodeType": "YulFunctionCall", - "src": "22618:34:43" - }, - "nativeSrc": "22618:34:43", - "nodeType": "YulExpressionStatement", - "src": "22618:34:43" - } - ] - }, - "name": "abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed", - "nativeSrc": "22410:248:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "22500:9:43", - "nodeType": "YulTypedName", - "src": "22500:9:43", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "22511:6:43", - "nodeType": "YulTypedName", - "src": "22511:6:43", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "22519:6:43", - "nodeType": "YulTypedName", - "src": "22519:6:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "22530:4:43", - "nodeType": "YulTypedName", - "src": "22530:4:43", - "type": "" - } - ], - "src": "22410:248:43" - }, - { - "body": { - "nativeSrc": "22762:93:43", - "nodeType": "YulBlock", - "src": "22762:93:43", - "statements": [ - { - "nativeSrc": "22772:26:43", - "nodeType": "YulAssignment", - "src": "22772:26:43", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "22784:9:43", - "nodeType": "YulIdentifier", - "src": "22784:9:43" - }, - { - "kind": "number", - "nativeSrc": "22795:2:43", - "nodeType": "YulLiteral", - "src": "22795:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "22780:3:43", - "nodeType": "YulIdentifier", - "src": "22780:3:43" - }, - "nativeSrc": "22780:18:43", - "nodeType": "YulFunctionCall", - "src": "22780:18:43" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "22772:4:43", - "nodeType": "YulIdentifier", - "src": "22772:4:43" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "22814:9:43", - "nodeType": "YulIdentifier", - "src": "22814:9:43" - }, - { - "arguments": [ - { - "name": "value0", - "nativeSrc": "22829:6:43", - "nodeType": "YulIdentifier", - "src": "22829:6:43" - }, - { - "kind": "number", - "nativeSrc": "22837:10:43", - "nodeType": "YulLiteral", - "src": "22837:10:43", - "type": "", - "value": "0xffffffff" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "22825:3:43", - "nodeType": "YulIdentifier", - "src": "22825:3:43" - }, - "nativeSrc": "22825:23:43", - "nodeType": "YulFunctionCall", - "src": "22825:23:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "22807:6:43", - "nodeType": "YulIdentifier", - "src": "22807:6:43" - }, - "nativeSrc": "22807:42:43", - "nodeType": "YulFunctionCall", - "src": "22807:42:43" - }, - "nativeSrc": "22807:42:43", - "nodeType": "YulExpressionStatement", - "src": "22807:42:43" - } - ] - }, - "name": "abi_encode_tuple_t_uint32__to_t_uint32__fromStack_reversed", - "nativeSrc": "22663:192:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "22731:9:43", - "nodeType": "YulTypedName", - "src": "22731:9:43", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "22742:6:43", - "nodeType": "YulTypedName", - "src": "22742:6:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "22753:4:43", - "nodeType": "YulTypedName", - "src": "22753:4:43", - "type": "" - } - ], - "src": "22663:192:43" - }, - { - "body": { - "nativeSrc": "22929:176:43", - "nodeType": "YulBlock", - "src": "22929:176:43", - "statements": [ - { - "body": { - "nativeSrc": "22975:16:43", - "nodeType": "YulBlock", - "src": "22975:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "22984:1:43", - "nodeType": "YulLiteral", - "src": "22984:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "22987:1:43", - "nodeType": "YulLiteral", - "src": "22987:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "22977:6:43", - "nodeType": "YulIdentifier", - "src": "22977:6:43" - }, - "nativeSrc": "22977:12:43", - "nodeType": "YulFunctionCall", - "src": "22977:12:43" - }, - "nativeSrc": "22977:12:43", - "nodeType": "YulExpressionStatement", - "src": "22977:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nativeSrc": "22950:7:43", - "nodeType": "YulIdentifier", - "src": "22950:7:43" - }, - { - "name": "headStart", - "nativeSrc": "22959:9:43", - "nodeType": "YulIdentifier", - "src": "22959:9:43" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "22946:3:43", - "nodeType": "YulIdentifier", - "src": "22946:3:43" - }, - "nativeSrc": "22946:23:43", - "nodeType": "YulFunctionCall", - "src": "22946:23:43" - }, - { - "kind": "number", - "nativeSrc": "22971:2:43", - "nodeType": "YulLiteral", - "src": "22971:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "22942:3:43", - "nodeType": "YulIdentifier", - "src": "22942:3:43" - }, - "nativeSrc": "22942:32:43", - "nodeType": "YulFunctionCall", - "src": "22942:32:43" - }, - "nativeSrc": "22939:52:43", - "nodeType": "YulIf", - "src": "22939:52:43" - }, - { - "nativeSrc": "23000:36:43", - "nodeType": "YulVariableDeclaration", - "src": "23000:36:43", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "23026:9:43", - "nodeType": "YulIdentifier", - "src": "23026:9:43" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "23013:12:43", - "nodeType": "YulIdentifier", - "src": "23013:12:43" - }, - "nativeSrc": "23013:23:43", - "nodeType": "YulFunctionCall", - "src": "23013:23:43" - }, - "variables": [ - { - "name": "value", - "nativeSrc": "23004:5:43", - "nodeType": "YulTypedName", - "src": "23004:5:43", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nativeSrc": "23069:5:43", - "nodeType": "YulIdentifier", - "src": "23069:5:43" - } - ], - "functionName": { - "name": "validator_revert_uint64", - "nativeSrc": "23045:23:43", - "nodeType": "YulIdentifier", - "src": "23045:23:43" - }, - "nativeSrc": "23045:30:43", - "nodeType": "YulFunctionCall", - "src": "23045:30:43" - }, - "nativeSrc": "23045:30:43", - "nodeType": "YulExpressionStatement", - "src": "23045:30:43" - }, - { - "nativeSrc": "23084:15:43", - "nodeType": "YulAssignment", - "src": "23084:15:43", - "value": { - "name": "value", - "nativeSrc": "23094:5:43", - "nodeType": "YulIdentifier", - "src": "23094:5:43" - }, - "variableNames": [ - { - "name": "value0", - "nativeSrc": "23084:6:43", - "nodeType": "YulIdentifier", - "src": "23084:6:43" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_uint64", - "nativeSrc": "22860:245:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "22895:9:43", - "nodeType": "YulTypedName", - "src": "22895:9:43", - "type": "" - }, - { - "name": "dataEnd", - "nativeSrc": "22906:7:43", - "nodeType": "YulTypedName", - "src": "22906:7:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nativeSrc": "22918:6:43", - "nodeType": "YulTypedName", - "src": "22918:6:43", - "type": "" - } - ], - "src": "22860:245:43" - }, - { - "body": { - "nativeSrc": "23320:269:43", - "nodeType": "YulBlock", - "src": "23320:269:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "23337:9:43", - "nodeType": "YulIdentifier", - "src": "23337:9:43" - }, - { - "arguments": [ - { - "name": "value0", - "nativeSrc": "23352:6:43", - "nodeType": "YulIdentifier", - "src": "23352:6:43" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "23368:3:43", - "nodeType": "YulLiteral", - "src": "23368:3:43", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nativeSrc": "23373:1:43", - "nodeType": "YulLiteral", - "src": "23373:1:43", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "23364:3:43", - "nodeType": "YulIdentifier", - "src": "23364:3:43" - }, - "nativeSrc": "23364:11:43", - "nodeType": "YulFunctionCall", - "src": "23364:11:43" - }, - { - "kind": "number", - "nativeSrc": "23377:1:43", - "nodeType": "YulLiteral", - "src": "23377:1:43", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "23360:3:43", - "nodeType": "YulIdentifier", - "src": "23360:3:43" - }, - "nativeSrc": "23360:19:43", - "nodeType": "YulFunctionCall", - "src": "23360:19:43" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "23348:3:43", - "nodeType": "YulIdentifier", - "src": "23348:3:43" - }, - "nativeSrc": "23348:32:43", - "nodeType": "YulFunctionCall", - "src": "23348:32:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "23330:6:43", - "nodeType": "YulIdentifier", - "src": "23330:6:43" - }, - "nativeSrc": "23330:51:43", - "nodeType": "YulFunctionCall", - "src": "23330:51:43" - }, - "nativeSrc": "23330:51:43", - "nodeType": "YulExpressionStatement", - "src": "23330:51:43" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "23401:9:43", - "nodeType": "YulIdentifier", - "src": "23401:9:43" - }, - { - "kind": "number", - "nativeSrc": "23412:2:43", - "nodeType": "YulLiteral", - "src": "23412:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "23397:3:43", - "nodeType": "YulIdentifier", - "src": "23397:3:43" - }, - "nativeSrc": "23397:18:43", - "nodeType": "YulFunctionCall", - "src": "23397:18:43" - }, - { - "name": "value1", - "nativeSrc": "23417:6:43", - "nodeType": "YulIdentifier", - "src": "23417:6:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "23390:6:43", - "nodeType": "YulIdentifier", - "src": "23390:6:43" - }, - "nativeSrc": "23390:34:43", - "nodeType": "YulFunctionCall", - "src": "23390:34:43" - }, - "nativeSrc": "23390:34:43", - "nodeType": "YulExpressionStatement", - "src": "23390:34:43" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "23444:9:43", - "nodeType": "YulIdentifier", - "src": "23444:9:43" - }, - { - "kind": "number", - "nativeSrc": "23455:2:43", - "nodeType": "YulLiteral", - "src": "23455:2:43", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "23440:3:43", - "nodeType": "YulIdentifier", - "src": "23440:3:43" - }, - "nativeSrc": "23440:18:43", - "nodeType": "YulFunctionCall", - "src": "23440:18:43" - }, - { - "arguments": [ - { - "name": "value2", - "nativeSrc": "23464:6:43", - "nodeType": "YulIdentifier", - "src": "23464:6:43" - }, - { - "kind": "number", - "nativeSrc": "23472:6:43", - "nodeType": "YulLiteral", - "src": "23472:6:43", - "type": "", - "value": "0xffff" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "23460:3:43", - "nodeType": "YulIdentifier", - "src": "23460:3:43" - }, - "nativeSrc": "23460:19:43", - "nodeType": "YulFunctionCall", - "src": "23460:19:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "23433:6:43", - "nodeType": "YulIdentifier", - "src": "23433:6:43" - }, - "nativeSrc": "23433:47:43", - "nodeType": "YulFunctionCall", - "src": "23433:47:43" - }, - "nativeSrc": "23433:47:43", - "nodeType": "YulExpressionStatement", - "src": "23433:47:43" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "23500:9:43", - "nodeType": "YulIdentifier", - "src": "23500:9:43" - }, - { - "kind": "number", - "nativeSrc": "23511:2:43", - "nodeType": "YulLiteral", - "src": "23511:2:43", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "23496:3:43", - "nodeType": "YulIdentifier", - "src": "23496:3:43" - }, - "nativeSrc": "23496:18:43", - "nodeType": "YulFunctionCall", - "src": "23496:18:43" - }, - { - "kind": "number", - "nativeSrc": "23516:3:43", - "nodeType": "YulLiteral", - "src": "23516:3:43", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "23489:6:43", - "nodeType": "YulIdentifier", - "src": "23489:6:43" - }, - "nativeSrc": "23489:31:43", - "nodeType": "YulFunctionCall", - "src": "23489:31:43" - }, - "nativeSrc": "23489:31:43", - "nodeType": "YulExpressionStatement", - "src": "23489:31:43" - }, - { - "nativeSrc": "23529:54:43", - "nodeType": "YulAssignment", - "src": "23529:54:43", - "value": { - "arguments": [ - { - "name": "value3", - "nativeSrc": "23555:6:43", - "nodeType": "YulIdentifier", - "src": "23555:6:43" - }, - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "23567:9:43", - "nodeType": "YulIdentifier", - "src": "23567:9:43" - }, - { - "kind": "number", - "nativeSrc": "23578:3:43", - "nodeType": "YulLiteral", - "src": "23578:3:43", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "23563:3:43", - "nodeType": "YulIdentifier", - "src": "23563:3:43" - }, - "nativeSrc": "23563:19:43", - "nodeType": "YulFunctionCall", - "src": "23563:19:43" - } - ], - "functionName": { - "name": "abi_encode_string", - "nativeSrc": "23537:17:43", - "nodeType": "YulIdentifier", - "src": "23537:17:43" - }, - "nativeSrc": "23537:46:43", - "nodeType": "YulFunctionCall", - "src": "23537:46:43" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "23529:4:43", - "nodeType": "YulIdentifier", - "src": "23529:4:43" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_address_t_bytes32_t_rational_0_by_1_t_bytes_memory_ptr__to_t_address_t_bytes32_t_uint16_t_bytes_memory_ptr__fromStack_reversed", - "nativeSrc": "23110:479:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "23265:9:43", - "nodeType": "YulTypedName", - "src": "23265:9:43", - "type": "" - }, - { - "name": "value3", - "nativeSrc": "23276:6:43", - "nodeType": "YulTypedName", - "src": "23276:6:43", - "type": "" - }, - { - "name": "value2", - "nativeSrc": "23284:6:43", - "nodeType": "YulTypedName", - "src": "23284:6:43", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "23292:6:43", - "nodeType": "YulTypedName", - "src": "23292:6:43", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "23300:6:43", - "nodeType": "YulTypedName", - "src": "23300:6:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "23311:4:43", - "nodeType": "YulTypedName", - "src": "23311:4:43", - "type": "" - } - ], - "src": "23110:479:43" - }, - { - "body": { - "nativeSrc": "23721:136:43", - "nodeType": "YulBlock", - "src": "23721:136:43", - "statements": [ - { - "nativeSrc": "23731:26:43", - "nodeType": "YulAssignment", - "src": "23731:26:43", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "23743:9:43", - "nodeType": "YulIdentifier", - "src": "23743:9:43" - }, - { - "kind": "number", - "nativeSrc": "23754:2:43", - "nodeType": "YulLiteral", - "src": "23754:2:43", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "23739:3:43", - "nodeType": "YulIdentifier", - "src": "23739:3:43" - }, - "nativeSrc": "23739:18:43", - "nodeType": "YulFunctionCall", - "src": "23739:18:43" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "23731:4:43", - "nodeType": "YulIdentifier", - "src": "23731:4:43" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "23773:9:43", - "nodeType": "YulIdentifier", - "src": "23773:9:43" - }, - { - "arguments": [ - { - "name": "value0", - "nativeSrc": "23788:6:43", - "nodeType": "YulIdentifier", - "src": "23788:6:43" - }, - { - "kind": "number", - "nativeSrc": "23796:10:43", - "nodeType": "YulLiteral", - "src": "23796:10:43", - "type": "", - "value": "0xffffffff" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "23784:3:43", - "nodeType": "YulIdentifier", - "src": "23784:3:43" - }, - "nativeSrc": "23784:23:43", - "nodeType": "YulFunctionCall", - "src": "23784:23:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "23766:6:43", - "nodeType": "YulIdentifier", - "src": "23766:6:43" - }, - "nativeSrc": "23766:42:43", - "nodeType": "YulFunctionCall", - "src": "23766:42:43" - }, - "nativeSrc": "23766:42:43", - "nodeType": "YulExpressionStatement", - "src": "23766:42:43" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "23828:9:43", - "nodeType": "YulIdentifier", - "src": "23828:9:43" - }, - { - "kind": "number", - "nativeSrc": "23839:2:43", - "nodeType": "YulLiteral", - "src": "23839:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "23824:3:43", - "nodeType": "YulIdentifier", - "src": "23824:3:43" - }, - "nativeSrc": "23824:18:43", - "nodeType": "YulFunctionCall", - "src": "23824:18:43" - }, - { - "name": "value1", - "nativeSrc": "23844:6:43", - "nodeType": "YulIdentifier", - "src": "23844:6:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "23817:6:43", - "nodeType": "YulIdentifier", - "src": "23817:6:43" - }, - "nativeSrc": "23817:34:43", - "nodeType": "YulFunctionCall", - "src": "23817:34:43" - }, - "nativeSrc": "23817:34:43", - "nodeType": "YulExpressionStatement", - "src": "23817:34:43" - } - ] - }, - "name": "abi_encode_tuple_t_uint32_t_uint256__to_t_uint32_t_uint256__fromStack_reversed", - "nativeSrc": "23594:263:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "23682:9:43", - "nodeType": "YulTypedName", - "src": "23682:9:43", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "23693:6:43", - "nodeType": "YulTypedName", - "src": "23693:6:43", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "23701:6:43", - "nodeType": "YulTypedName", - "src": "23701:6:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "23712:4:43", - "nodeType": "YulTypedName", - "src": "23712:4:43", - "type": "" - } - ], - "src": "23594:263:43" - }, - { - "body": { - "nativeSrc": "24019:188:43", - "nodeType": "YulBlock", - "src": "24019:188:43", - "statements": [ - { - "nativeSrc": "24029:26:43", - "nodeType": "YulAssignment", - "src": "24029:26:43", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "24041:9:43", - "nodeType": "YulIdentifier", - "src": "24041:9:43" - }, - { - "kind": "number", - "nativeSrc": "24052:2:43", - "nodeType": "YulLiteral", - "src": "24052:2:43", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "24037:3:43", - "nodeType": "YulIdentifier", - "src": "24037:3:43" - }, - "nativeSrc": "24037:18:43", - "nodeType": "YulFunctionCall", - "src": "24037:18:43" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "24029:4:43", - "nodeType": "YulIdentifier", - "src": "24029:4:43" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "24071:9:43", - "nodeType": "YulIdentifier", - "src": "24071:9:43" - }, - { - "arguments": [ - { - "name": "value0", - "nativeSrc": "24086:6:43", - "nodeType": "YulIdentifier", - "src": "24086:6:43" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "24102:3:43", - "nodeType": "YulLiteral", - "src": "24102:3:43", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nativeSrc": "24107:1:43", - "nodeType": "YulLiteral", - "src": "24107:1:43", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "24098:3:43", - "nodeType": "YulIdentifier", - "src": "24098:3:43" - }, - "nativeSrc": "24098:11:43", - "nodeType": "YulFunctionCall", - "src": "24098:11:43" - }, - { - "kind": "number", - "nativeSrc": "24111:1:43", - "nodeType": "YulLiteral", - "src": "24111:1:43", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "24094:3:43", - "nodeType": "YulIdentifier", - "src": "24094:3:43" - }, - "nativeSrc": "24094:19:43", - "nodeType": "YulFunctionCall", - "src": "24094:19:43" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "24082:3:43", - "nodeType": "YulIdentifier", - "src": "24082:3:43" - }, - "nativeSrc": "24082:32:43", - "nodeType": "YulFunctionCall", - "src": "24082:32:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "24064:6:43", - "nodeType": "YulIdentifier", - "src": "24064:6:43" - }, - "nativeSrc": "24064:51:43", - "nodeType": "YulFunctionCall", - "src": "24064:51:43" - }, - "nativeSrc": "24064:51:43", - "nodeType": "YulExpressionStatement", - "src": "24064:51:43" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "24135:9:43", - "nodeType": "YulIdentifier", - "src": "24135:9:43" - }, - { - "kind": "number", - "nativeSrc": "24146:2:43", - "nodeType": "YulLiteral", - "src": "24146:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "24131:3:43", - "nodeType": "YulIdentifier", - "src": "24131:3:43" - }, - "nativeSrc": "24131:18:43", - "nodeType": "YulFunctionCall", - "src": "24131:18:43" - }, - { - "name": "value1", - "nativeSrc": "24151:6:43", - "nodeType": "YulIdentifier", - "src": "24151:6:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "24124:6:43", - "nodeType": "YulIdentifier", - "src": "24124:6:43" - }, - "nativeSrc": "24124:34:43", - "nodeType": "YulFunctionCall", - "src": "24124:34:43" - }, - "nativeSrc": "24124:34:43", - "nodeType": "YulExpressionStatement", - "src": "24124:34:43" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "24178:9:43", - "nodeType": "YulIdentifier", - "src": "24178:9:43" - }, - { - "kind": "number", - "nativeSrc": "24189:2:43", - "nodeType": "YulLiteral", - "src": "24189:2:43", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "24174:3:43", - "nodeType": "YulIdentifier", - "src": "24174:3:43" - }, - "nativeSrc": "24174:18:43", - "nodeType": "YulFunctionCall", - "src": "24174:18:43" - }, - { - "name": "value2", - "nativeSrc": "24194:6:43", - "nodeType": "YulIdentifier", - "src": "24194:6:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "24167:6:43", - "nodeType": "YulIdentifier", - "src": "24167:6:43" - }, - "nativeSrc": "24167:34:43", - "nodeType": "YulFunctionCall", - "src": "24167:34:43" - }, - "nativeSrc": "24167:34:43", - "nodeType": "YulExpressionStatement", - "src": "24167:34:43" - } - ] - }, - "name": "abi_encode_tuple_t_address_t_uint256_t_uint256__to_t_address_t_uint256_t_uint256__fromStack_reversed", - "nativeSrc": "23862:345:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "23972:9:43", - "nodeType": "YulTypedName", - "src": "23972:9:43", - "type": "" - }, - { - "name": "value2", - "nativeSrc": "23983:6:43", - "nodeType": "YulTypedName", - "src": "23983:6:43", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "23991:6:43", - "nodeType": "YulTypedName", - "src": "23991:6:43", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "23999:6:43", - "nodeType": "YulTypedName", - "src": "23999:6:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "24010:4:43", - "nodeType": "YulTypedName", - "src": "24010:4:43", - "type": "" - } - ], - "src": "23862:345:43" - }, - { - "body": { - "nativeSrc": "24377:214:43", - "nodeType": "YulBlock", - "src": "24377:214:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "24394:9:43", - "nodeType": "YulIdentifier", - "src": "24394:9:43" - }, - { - "kind": "number", - "nativeSrc": "24405:2:43", - "nodeType": "YulLiteral", - "src": "24405:2:43", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "24387:6:43", - "nodeType": "YulIdentifier", - "src": "24387:6:43" - }, - "nativeSrc": "24387:21:43", - "nodeType": "YulFunctionCall", - "src": "24387:21:43" - }, - "nativeSrc": "24387:21:43", - "nodeType": "YulExpressionStatement", - "src": "24387:21:43" - }, - { - "nativeSrc": "24417:59:43", - "nodeType": "YulVariableDeclaration", - "src": "24417:59:43", - "value": { - "arguments": [ - { - "name": "value0", - "nativeSrc": "24449:6:43", - "nodeType": "YulIdentifier", - "src": "24449:6:43" - }, - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "24461:9:43", - "nodeType": "YulIdentifier", - "src": "24461:9:43" - }, - { - "kind": "number", - "nativeSrc": "24472:2:43", - "nodeType": "YulLiteral", - "src": "24472:2:43", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "24457:3:43", - "nodeType": "YulIdentifier", - "src": "24457:3:43" - }, - "nativeSrc": "24457:18:43", - "nodeType": "YulFunctionCall", - "src": "24457:18:43" - } - ], - "functionName": { - "name": "abi_encode_string", - "nativeSrc": "24431:17:43", - "nodeType": "YulIdentifier", - "src": "24431:17:43" - }, - "nativeSrc": "24431:45:43", - "nodeType": "YulFunctionCall", - "src": "24431:45:43" - }, - "variables": [ - { - "name": "tail_1", - "nativeSrc": "24421:6:43", - "nodeType": "YulTypedName", - "src": "24421:6:43", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "24496:9:43", - "nodeType": "YulIdentifier", - "src": "24496:9:43" - }, - { - "kind": "number", - "nativeSrc": "24507:2:43", - "nodeType": "YulLiteral", - "src": "24507:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "24492:3:43", - "nodeType": "YulIdentifier", - "src": "24492:3:43" - }, - "nativeSrc": "24492:18:43", - "nodeType": "YulFunctionCall", - "src": "24492:18:43" - }, - { - "arguments": [ - { - "name": "tail_1", - "nativeSrc": "24516:6:43", - "nodeType": "YulIdentifier", - "src": "24516:6:43" - }, - { - "name": "headStart", - "nativeSrc": "24524:9:43", - "nodeType": "YulIdentifier", - "src": "24524:9:43" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "24512:3:43", - "nodeType": "YulIdentifier", - "src": "24512:3:43" - }, - "nativeSrc": "24512:22:43", - "nodeType": "YulFunctionCall", - "src": "24512:22:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "24485:6:43", - "nodeType": "YulIdentifier", - "src": "24485:6:43" - }, - "nativeSrc": "24485:50:43", - "nodeType": "YulFunctionCall", - "src": "24485:50:43" - }, - "nativeSrc": "24485:50:43", - "nodeType": "YulExpressionStatement", - "src": "24485:50:43" - }, - { - "nativeSrc": "24544:41:43", - "nodeType": "YulAssignment", - "src": "24544:41:43", - "value": { - "arguments": [ - { - "name": "value1", - "nativeSrc": "24570:6:43", - "nodeType": "YulIdentifier", - "src": "24570:6:43" - }, - { - "name": "tail_1", - "nativeSrc": "24578:6:43", - "nodeType": "YulIdentifier", - "src": "24578:6:43" - } - ], - "functionName": { - "name": "abi_encode_string", - "nativeSrc": "24552:17:43", - "nodeType": "YulIdentifier", - "src": "24552:17:43" - }, - "nativeSrc": "24552:33:43", - "nodeType": "YulFunctionCall", - "src": "24552:33:43" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "24544:4:43", - "nodeType": "YulIdentifier", - "src": "24544:4:43" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_bytes_memory_ptr_t_bytes_memory_ptr__to_t_bytes_memory_ptr_t_bytes_memory_ptr__fromStack_reversed", - "nativeSrc": "24212:379:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "24338:9:43", - "nodeType": "YulTypedName", - "src": "24338:9:43", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "24349:6:43", - "nodeType": "YulTypedName", - "src": "24349:6:43", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "24357:6:43", - "nodeType": "YulTypedName", - "src": "24357:6:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "24368:4:43", - "nodeType": "YulTypedName", - "src": "24368:4:43", - "type": "" - } - ], - "src": "24212:379:43" - }, - { - "body": { - "nativeSrc": "24674:167:43", - "nodeType": "YulBlock", - "src": "24674:167:43", - "statements": [ - { - "body": { - "nativeSrc": "24720:16:43", - "nodeType": "YulBlock", - "src": "24720:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "24729:1:43", - "nodeType": "YulLiteral", - "src": "24729:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "24732:1:43", - "nodeType": "YulLiteral", - "src": "24732:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "24722:6:43", - "nodeType": "YulIdentifier", - "src": "24722:6:43" - }, - "nativeSrc": "24722:12:43", - "nodeType": "YulFunctionCall", - "src": "24722:12:43" - }, - "nativeSrc": "24722:12:43", - "nodeType": "YulExpressionStatement", - "src": "24722:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nativeSrc": "24695:7:43", - "nodeType": "YulIdentifier", - "src": "24695:7:43" - }, - { - "name": "headStart", - "nativeSrc": "24704:9:43", - "nodeType": "YulIdentifier", - "src": "24704:9:43" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "24691:3:43", - "nodeType": "YulIdentifier", - "src": "24691:3:43" - }, - "nativeSrc": "24691:23:43", - "nodeType": "YulFunctionCall", - "src": "24691:23:43" - }, - { - "kind": "number", - "nativeSrc": "24716:2:43", - "nodeType": "YulLiteral", - "src": "24716:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "24687:3:43", - "nodeType": "YulIdentifier", - "src": "24687:3:43" - }, - "nativeSrc": "24687:32:43", - "nodeType": "YulFunctionCall", - "src": "24687:32:43" - }, - "nativeSrc": "24684:52:43", - "nodeType": "YulIf", - "src": "24684:52:43" - }, - { - "nativeSrc": "24745:29:43", - "nodeType": "YulVariableDeclaration", - "src": "24745:29:43", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "24764:9:43", - "nodeType": "YulIdentifier", - "src": "24764:9:43" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "24758:5:43", - "nodeType": "YulIdentifier", - "src": "24758:5:43" - }, - "nativeSrc": "24758:16:43", - "nodeType": "YulFunctionCall", - "src": "24758:16:43" - }, - "variables": [ - { - "name": "value", - "nativeSrc": "24749:5:43", - "nodeType": "YulTypedName", - "src": "24749:5:43", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nativeSrc": "24805:5:43", - "nodeType": "YulIdentifier", - "src": "24805:5:43" - } - ], - "functionName": { - "name": "validator_revert_bool", - "nativeSrc": "24783:21:43", - "nodeType": "YulIdentifier", - "src": "24783:21:43" - }, - "nativeSrc": "24783:28:43", - "nodeType": "YulFunctionCall", - "src": "24783:28:43" - }, - "nativeSrc": "24783:28:43", - "nodeType": "YulExpressionStatement", - "src": "24783:28:43" - }, - { - "nativeSrc": "24820:15:43", - "nodeType": "YulAssignment", - "src": "24820:15:43", - "value": { - "name": "value", - "nativeSrc": "24830:5:43", - "nodeType": "YulIdentifier", - "src": "24830:5:43" - }, - "variableNames": [ - { - "name": "value0", - "nativeSrc": "24820:6:43", - "nodeType": "YulIdentifier", - "src": "24820:6:43" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_bool_fromMemory", - "nativeSrc": "24596:245:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "24640:9:43", - "nodeType": "YulTypedName", - "src": "24640:9:43", - "type": "" - }, - { - "name": "dataEnd", - "nativeSrc": "24651:7:43", - "nodeType": "YulTypedName", - "src": "24651:7:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nativeSrc": "24663:6:43", - "nodeType": "YulTypedName", - "src": "24663:6:43", - "type": "" - } - ], - "src": "24596:245:43" - }, - { - "body": { - "nativeSrc": "25037:696:43", - "nodeType": "YulBlock", - "src": "25037:696:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "25054:9:43", - "nodeType": "YulIdentifier", - "src": "25054:9:43" - }, - { - "kind": "number", - "nativeSrc": "25065:2:43", - "nodeType": "YulLiteral", - "src": "25065:2:43", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "25047:6:43", - "nodeType": "YulIdentifier", - "src": "25047:6:43" - }, - "nativeSrc": "25047:21:43", - "nodeType": "YulFunctionCall", - "src": "25047:21:43" - }, - "nativeSrc": "25047:21:43", - "nodeType": "YulExpressionStatement", - "src": "25047:21:43" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "25088:9:43", - "nodeType": "YulIdentifier", - "src": "25088:9:43" - }, - { - "kind": "number", - "nativeSrc": "25099:2:43", - "nodeType": "YulLiteral", - "src": "25099:2:43", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "25084:3:43", - "nodeType": "YulIdentifier", - "src": "25084:3:43" - }, - "nativeSrc": "25084:18:43", - "nodeType": "YulFunctionCall", - "src": "25084:18:43" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nativeSrc": "25114:6:43", - "nodeType": "YulIdentifier", - "src": "25114:6:43" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "25108:5:43", - "nodeType": "YulIdentifier", - "src": "25108:5:43" - }, - "nativeSrc": "25108:13:43", - "nodeType": "YulFunctionCall", - "src": "25108:13:43" - }, - { - "kind": "number", - "nativeSrc": "25123:10:43", - "nodeType": "YulLiteral", - "src": "25123:10:43", - "type": "", - "value": "0xffffffff" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "25104:3:43", - "nodeType": "YulIdentifier", - "src": "25104:3:43" - }, - "nativeSrc": "25104:30:43", - "nodeType": "YulFunctionCall", - "src": "25104:30:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "25077:6:43", - "nodeType": "YulIdentifier", - "src": "25077:6:43" - }, - "nativeSrc": "25077:58:43", - "nodeType": "YulFunctionCall", - "src": "25077:58:43" - }, - "nativeSrc": "25077:58:43", - "nodeType": "YulExpressionStatement", - "src": "25077:58:43" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "25155:9:43", - "nodeType": "YulIdentifier", - "src": "25155:9:43" - }, - { - "kind": "number", - "nativeSrc": "25166:2:43", - "nodeType": "YulLiteral", - "src": "25166:2:43", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "25151:3:43", - "nodeType": "YulIdentifier", - "src": "25151:3:43" - }, - "nativeSrc": "25151:18:43", - "nodeType": "YulFunctionCall", - "src": "25151:18:43" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nativeSrc": "25181:6:43", - "nodeType": "YulIdentifier", - "src": "25181:6:43" - }, - { - "kind": "number", - "nativeSrc": "25189:4:43", - "nodeType": "YulLiteral", - "src": "25189:4:43", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "25177:3:43", - "nodeType": "YulIdentifier", - "src": "25177:3:43" - }, - "nativeSrc": "25177:17:43", - "nodeType": "YulFunctionCall", - "src": "25177:17:43" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "25171:5:43", - "nodeType": "YulIdentifier", - "src": "25171:5:43" - }, - "nativeSrc": "25171:24:43", - "nodeType": "YulFunctionCall", - "src": "25171:24:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "25144:6:43", - "nodeType": "YulIdentifier", - "src": "25144:6:43" - }, - "nativeSrc": "25144:52:43", - "nodeType": "YulFunctionCall", - "src": "25144:52:43" - }, - "nativeSrc": "25144:52:43", - "nodeType": "YulExpressionStatement", - "src": "25144:52:43" - }, - { - "nativeSrc": "25205:42:43", - "nodeType": "YulVariableDeclaration", - "src": "25205:42:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nativeSrc": "25235:6:43", - "nodeType": "YulIdentifier", - "src": "25235:6:43" - }, - { - "kind": "number", - "nativeSrc": "25243:2:43", - "nodeType": "YulLiteral", - "src": "25243:2:43", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "25231:3:43", - "nodeType": "YulIdentifier", - "src": "25231:3:43" - }, - "nativeSrc": "25231:15:43", - "nodeType": "YulFunctionCall", - "src": "25231:15:43" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "25225:5:43", - "nodeType": "YulIdentifier", - "src": "25225:5:43" - }, - "nativeSrc": "25225:22:43", - "nodeType": "YulFunctionCall", - "src": "25225:22:43" - }, - "variables": [ - { - "name": "memberValue0", - "nativeSrc": "25209:12:43", - "nodeType": "YulTypedName", - "src": "25209:12:43", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "25267:9:43", - "nodeType": "YulIdentifier", - "src": "25267:9:43" - }, - { - "kind": "number", - "nativeSrc": "25278:3:43", - "nodeType": "YulLiteral", - "src": "25278:3:43", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "25263:3:43", - "nodeType": "YulIdentifier", - "src": "25263:3:43" - }, - "nativeSrc": "25263:19:43", - "nodeType": "YulFunctionCall", - "src": "25263:19:43" - }, - { - "kind": "number", - "nativeSrc": "25284:4:43", - "nodeType": "YulLiteral", - "src": "25284:4:43", - "type": "", - "value": "0xa0" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "25256:6:43", - "nodeType": "YulIdentifier", - "src": "25256:6:43" - }, - "nativeSrc": "25256:33:43", - "nodeType": "YulFunctionCall", - "src": "25256:33:43" - }, - "nativeSrc": "25256:33:43", - "nodeType": "YulExpressionStatement", - "src": "25256:33:43" - }, - { - "nativeSrc": "25298:66:43", - "nodeType": "YulVariableDeclaration", - "src": "25298:66:43", - "value": { - "arguments": [ - { - "name": "memberValue0", - "nativeSrc": "25330:12:43", - "nodeType": "YulIdentifier", - "src": "25330:12:43" - }, - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "25348:9:43", - "nodeType": "YulIdentifier", - "src": "25348:9:43" - }, - { - "kind": "number", - "nativeSrc": "25359:3:43", - "nodeType": "YulLiteral", - "src": "25359:3:43", - "type": "", - "value": "224" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "25344:3:43", - "nodeType": "YulIdentifier", - "src": "25344:3:43" - }, - "nativeSrc": "25344:19:43", - "nodeType": "YulFunctionCall", - "src": "25344:19:43" - } - ], - "functionName": { - "name": "abi_encode_string", - "nativeSrc": "25312:17:43", - "nodeType": "YulIdentifier", - "src": "25312:17:43" - }, - "nativeSrc": "25312:52:43", - "nodeType": "YulFunctionCall", - "src": "25312:52:43" - }, - "variables": [ - { - "name": "tail_1", - "nativeSrc": "25302:6:43", - "nodeType": "YulTypedName", - "src": "25302:6:43", - "type": "" - } - ] - }, - { - "nativeSrc": "25373:44:43", - "nodeType": "YulVariableDeclaration", - "src": "25373:44:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nativeSrc": "25405:6:43", - "nodeType": "YulIdentifier", - "src": "25405:6:43" - }, - { - "kind": "number", - "nativeSrc": "25413:2:43", - "nodeType": "YulLiteral", - "src": "25413:2:43", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "25401:3:43", - "nodeType": "YulIdentifier", - "src": "25401:3:43" - }, - "nativeSrc": "25401:15:43", - "nodeType": "YulFunctionCall", - "src": "25401:15:43" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "25395:5:43", - "nodeType": "YulIdentifier", - "src": "25395:5:43" - }, - "nativeSrc": "25395:22:43", - "nodeType": "YulFunctionCall", - "src": "25395:22:43" - }, - "variables": [ - { - "name": "memberValue0_1", - "nativeSrc": "25377:14:43", - "nodeType": "YulTypedName", - "src": "25377:14:43", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "25437:9:43", - "nodeType": "YulIdentifier", - "src": "25437:9:43" - }, - { - "kind": "number", - "nativeSrc": "25448:4:43", - "nodeType": "YulLiteral", - "src": "25448:4:43", - "type": "", - "value": "0xa0" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "25433:3:43", - "nodeType": "YulIdentifier", - "src": "25433:3:43" - }, - "nativeSrc": "25433:20:43", - "nodeType": "YulFunctionCall", - "src": "25433:20:43" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "tail_1", - "nativeSrc": "25463:6:43", - "nodeType": "YulIdentifier", - "src": "25463:6:43" - }, - { - "name": "headStart", - "nativeSrc": "25471:9:43", - "nodeType": "YulIdentifier", - "src": "25471:9:43" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "25459:3:43", - "nodeType": "YulIdentifier", - "src": "25459:3:43" - }, - "nativeSrc": "25459:22:43", - "nodeType": "YulFunctionCall", - "src": "25459:22:43" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "25487:2:43", - "nodeType": "YulLiteral", - "src": "25487:2:43", - "type": "", - "value": "63" - } - ], - "functionName": { - "name": "not", - "nativeSrc": "25483:3:43", - "nodeType": "YulIdentifier", - "src": "25483:3:43" - }, - "nativeSrc": "25483:7:43", - "nodeType": "YulFunctionCall", - "src": "25483:7:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "25455:3:43", - "nodeType": "YulIdentifier", - "src": "25455:3:43" - }, - "nativeSrc": "25455:36:43", - "nodeType": "YulFunctionCall", - "src": "25455:36:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "25426:6:43", - "nodeType": "YulIdentifier", - "src": "25426:6:43" - }, - "nativeSrc": "25426:66:43", - "nodeType": "YulFunctionCall", - "src": "25426:66:43" - }, - "nativeSrc": "25426:66:43", - "nodeType": "YulExpressionStatement", - "src": "25426:66:43" - }, - { - "nativeSrc": "25501:55:43", - "nodeType": "YulVariableDeclaration", - "src": "25501:55:43", - "value": { - "arguments": [ - { - "name": "memberValue0_1", - "nativeSrc": "25533:14:43", - "nodeType": "YulIdentifier", - "src": "25533:14:43" - }, - { - "name": "tail_1", - "nativeSrc": "25549:6:43", - "nodeType": "YulIdentifier", - "src": "25549:6:43" - } - ], - "functionName": { - "name": "abi_encode_string", - "nativeSrc": "25515:17:43", - "nodeType": "YulIdentifier", - "src": "25515:17:43" - }, - "nativeSrc": "25515:41:43", - "nodeType": "YulFunctionCall", - "src": "25515:41:43" - }, - "variables": [ - { - "name": "tail_2", - "nativeSrc": "25505:6:43", - "nodeType": "YulTypedName", - "src": "25505:6:43", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "25576:9:43", - "nodeType": "YulIdentifier", - "src": "25576:9:43" - }, - { - "kind": "number", - "nativeSrc": "25587:3:43", - "nodeType": "YulLiteral", - "src": "25587:3:43", - "type": "", - "value": "192" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "25572:3:43", - "nodeType": "YulIdentifier", - "src": "25572:3:43" - }, - "nativeSrc": "25572:19:43", - "nodeType": "YulFunctionCall", - "src": "25572:19:43" - }, - { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nativeSrc": "25617:6:43", - "nodeType": "YulIdentifier", - "src": "25617:6:43" - }, - { - "kind": "number", - "nativeSrc": "25625:3:43", - "nodeType": "YulLiteral", - "src": "25625:3:43", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "25613:3:43", - "nodeType": "YulIdentifier", - "src": "25613:3:43" - }, - "nativeSrc": "25613:16:43", - "nodeType": "YulFunctionCall", - "src": "25613:16:43" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "25607:5:43", - "nodeType": "YulIdentifier", - "src": "25607:5:43" - }, - "nativeSrc": "25607:23:43", - "nodeType": "YulFunctionCall", - "src": "25607:23:43" - } - ], - "functionName": { - "name": "iszero", - "nativeSrc": "25600:6:43", - "nodeType": "YulIdentifier", - "src": "25600:6:43" - }, - "nativeSrc": "25600:31:43", - "nodeType": "YulFunctionCall", - "src": "25600:31:43" - } - ], - "functionName": { - "name": "iszero", - "nativeSrc": "25593:6:43", - "nodeType": "YulIdentifier", - "src": "25593:6:43" - }, - "nativeSrc": "25593:39:43", - "nodeType": "YulFunctionCall", - "src": "25593:39:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "25565:6:43", - "nodeType": "YulIdentifier", - "src": "25565:6:43" - }, - "nativeSrc": "25565:68:43", - "nodeType": "YulFunctionCall", - "src": "25565:68:43" - }, - "nativeSrc": "25565:68:43", - "nodeType": "YulExpressionStatement", - "src": "25565:68:43" - }, - { - "nativeSrc": "25642:14:43", - "nodeType": "YulAssignment", - "src": "25642:14:43", - "value": { - "name": "tail_2", - "nativeSrc": "25650:6:43", - "nodeType": "YulIdentifier", - "src": "25650:6:43" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "25642:4:43", - "nodeType": "YulIdentifier", - "src": "25642:4:43" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "25676:9:43", - "nodeType": "YulIdentifier", - "src": "25676:9:43" - }, - { - "kind": "number", - "nativeSrc": "25687:4:43", - "nodeType": "YulLiteral", - "src": "25687:4:43", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "25672:3:43", - "nodeType": "YulIdentifier", - "src": "25672:3:43" - }, - "nativeSrc": "25672:20:43", - "nodeType": "YulFunctionCall", - "src": "25672:20:43" - }, - { - "arguments": [ - { - "name": "value1", - "nativeSrc": "25698:6:43", - "nodeType": "YulIdentifier", - "src": "25698:6:43" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "25714:3:43", - "nodeType": "YulLiteral", - "src": "25714:3:43", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nativeSrc": "25719:1:43", - "nodeType": "YulLiteral", - "src": "25719:1:43", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "25710:3:43", - "nodeType": "YulIdentifier", - "src": "25710:3:43" - }, - "nativeSrc": "25710:11:43", - "nodeType": "YulFunctionCall", - "src": "25710:11:43" - }, - { - "kind": "number", - "nativeSrc": "25723:1:43", - "nodeType": "YulLiteral", - "src": "25723:1:43", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "25706:3:43", - "nodeType": "YulIdentifier", - "src": "25706:3:43" - }, - "nativeSrc": "25706:19:43", - "nodeType": "YulFunctionCall", - "src": "25706:19:43" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "25694:3:43", - "nodeType": "YulIdentifier", - "src": "25694:3:43" - }, - "nativeSrc": "25694:32:43", - "nodeType": "YulFunctionCall", - "src": "25694:32:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "25665:6:43", - "nodeType": "YulIdentifier", - "src": "25665:6:43" - }, - "nativeSrc": "25665:62:43", - "nodeType": "YulFunctionCall", - "src": "25665:62:43" - }, - "nativeSrc": "25665:62:43", - "nodeType": "YulExpressionStatement", - "src": "25665:62:43" - } - ] - }, - "name": "abi_encode_tuple_t_struct$_MessagingParams_$20_memory_ptr_t_address__to_t_struct$_MessagingParams_$20_memory_ptr_t_address__fromStack_reversed", - "nativeSrc": "24846:887:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "24998:9:43", - "nodeType": "YulTypedName", - "src": "24998:9:43", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "25009:6:43", - "nodeType": "YulTypedName", - "src": "25009:6:43", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "25017:6:43", - "nodeType": "YulTypedName", - "src": "25017:6:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "25028:4:43", - "nodeType": "YulTypedName", - "src": "25028:4:43", - "type": "" - } - ], - "src": "24846:887:43" - }, - { - "body": { - "nativeSrc": "25818:204:43", - "nodeType": "YulBlock", - "src": "25818:204:43", - "statements": [ - { - "body": { - "nativeSrc": "25862:16:43", - "nodeType": "YulBlock", - "src": "25862:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "25871:1:43", - "nodeType": "YulLiteral", - "src": "25871:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "25874:1:43", - "nodeType": "YulLiteral", - "src": "25874:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "25864:6:43", - "nodeType": "YulIdentifier", - "src": "25864:6:43" - }, - "nativeSrc": "25864:12:43", - "nodeType": "YulFunctionCall", - "src": "25864:12:43" - }, - "nativeSrc": "25864:12:43", - "nodeType": "YulExpressionStatement", - "src": "25864:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "end", - "nativeSrc": "25839:3:43", - "nodeType": "YulIdentifier", - "src": "25839:3:43" - }, - { - "name": "headStart", - "nativeSrc": "25844:9:43", - "nodeType": "YulIdentifier", - "src": "25844:9:43" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "25835:3:43", - "nodeType": "YulIdentifier", - "src": "25835:3:43" - }, - "nativeSrc": "25835:19:43", - "nodeType": "YulFunctionCall", - "src": "25835:19:43" - }, - { - "kind": "number", - "nativeSrc": "25856:4:43", - "nodeType": "YulLiteral", - "src": "25856:4:43", - "type": "", - "value": "0x40" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "25831:3:43", - "nodeType": "YulIdentifier", - "src": "25831:3:43" - }, - "nativeSrc": "25831:30:43", - "nodeType": "YulFunctionCall", - "src": "25831:30:43" - }, - "nativeSrc": "25828:50:43", - "nodeType": "YulIf", - "src": "25828:50:43" - }, - { - "nativeSrc": "25887:31:43", - "nodeType": "YulAssignment", - "src": "25887:31:43", - "value": { - "arguments": [], - "functionName": { - "name": "allocate_memory_4160", - "nativeSrc": "25896:20:43", - "nodeType": "YulIdentifier", - "src": "25896:20:43" - }, - "nativeSrc": "25896:22:43", - "nodeType": "YulFunctionCall", - "src": "25896:22:43" - }, - "variableNames": [ - { - "name": "value", - "nativeSrc": "25887:5:43", - "nodeType": "YulIdentifier", - "src": "25887:5:43" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nativeSrc": "25934:5:43", - "nodeType": "YulIdentifier", - "src": "25934:5:43" - }, - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "25947:9:43", - "nodeType": "YulIdentifier", - "src": "25947:9:43" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "25941:5:43", - "nodeType": "YulIdentifier", - "src": "25941:5:43" - }, - "nativeSrc": "25941:16:43", - "nodeType": "YulFunctionCall", - "src": "25941:16:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "25927:6:43", - "nodeType": "YulIdentifier", - "src": "25927:6:43" - }, - "nativeSrc": "25927:31:43", - "nodeType": "YulFunctionCall", - "src": "25927:31:43" - }, - "nativeSrc": "25927:31:43", - "nodeType": "YulExpressionStatement", - "src": "25927:31:43" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nativeSrc": "25978:5:43", - "nodeType": "YulIdentifier", - "src": "25978:5:43" - }, - { - "kind": "number", - "nativeSrc": "25985:2:43", - "nodeType": "YulLiteral", - "src": "25985:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "25974:3:43", - "nodeType": "YulIdentifier", - "src": "25974:3:43" - }, - "nativeSrc": "25974:14:43", - "nodeType": "YulFunctionCall", - "src": "25974:14:43" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "26000:9:43", - "nodeType": "YulIdentifier", - "src": "26000:9:43" - }, - { - "kind": "number", - "nativeSrc": "26011:2:43", - "nodeType": "YulLiteral", - "src": "26011:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "25996:3:43", - "nodeType": "YulIdentifier", - "src": "25996:3:43" - }, - "nativeSrc": "25996:18:43", - "nodeType": "YulFunctionCall", - "src": "25996:18:43" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "25990:5:43", - "nodeType": "YulIdentifier", - "src": "25990:5:43" - }, - "nativeSrc": "25990:25:43", - "nodeType": "YulFunctionCall", - "src": "25990:25:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "25967:6:43", - "nodeType": "YulIdentifier", - "src": "25967:6:43" - }, - "nativeSrc": "25967:49:43", - "nodeType": "YulFunctionCall", - "src": "25967:49:43" - }, - "nativeSrc": "25967:49:43", - "nodeType": "YulExpressionStatement", - "src": "25967:49:43" - } - ] - }, - "name": "abi_decode_struct_MessagingFee_fromMemory", - "nativeSrc": "25738:284:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "25789:9:43", - "nodeType": "YulTypedName", - "src": "25789:9:43", - "type": "" - }, - { - "name": "end", - "nativeSrc": "25800:3:43", - "nodeType": "YulTypedName", - "src": "25800:3:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value", - "nativeSrc": "25808:5:43", - "nodeType": "YulTypedName", - "src": "25808:5:43", - "type": "" - } - ], - "src": "25738:284:43" - }, - { - "body": { - "nativeSrc": "26136:148:43", - "nodeType": "YulBlock", - "src": "26136:148:43", - "statements": [ - { - "body": { - "nativeSrc": "26182:16:43", - "nodeType": "YulBlock", - "src": "26182:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "26191:1:43", - "nodeType": "YulLiteral", - "src": "26191:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "26194:1:43", - "nodeType": "YulLiteral", - "src": "26194:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "26184:6:43", - "nodeType": "YulIdentifier", - "src": "26184:6:43" - }, - "nativeSrc": "26184:12:43", - "nodeType": "YulFunctionCall", - "src": "26184:12:43" - }, - "nativeSrc": "26184:12:43", - "nodeType": "YulExpressionStatement", - "src": "26184:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nativeSrc": "26157:7:43", - "nodeType": "YulIdentifier", - "src": "26157:7:43" - }, - { - "name": "headStart", - "nativeSrc": "26166:9:43", - "nodeType": "YulIdentifier", - "src": "26166:9:43" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "26153:3:43", - "nodeType": "YulIdentifier", - "src": "26153:3:43" - }, - "nativeSrc": "26153:23:43", - "nodeType": "YulFunctionCall", - "src": "26153:23:43" - }, - { - "kind": "number", - "nativeSrc": "26178:2:43", - "nodeType": "YulLiteral", - "src": "26178:2:43", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "26149:3:43", - "nodeType": "YulIdentifier", - "src": "26149:3:43" - }, - "nativeSrc": "26149:32:43", - "nodeType": "YulFunctionCall", - "src": "26149:32:43" - }, - "nativeSrc": "26146:52:43", - "nodeType": "YulIf", - "src": "26146:52:43" - }, - { - "nativeSrc": "26207:71:43", - "nodeType": "YulAssignment", - "src": "26207:71:43", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "26259:9:43", - "nodeType": "YulIdentifier", - "src": "26259:9:43" - }, - { - "name": "dataEnd", - "nativeSrc": "26270:7:43", - "nodeType": "YulIdentifier", - "src": "26270:7:43" - } - ], - "functionName": { - "name": "abi_decode_struct_MessagingFee_fromMemory", - "nativeSrc": "26217:41:43", - "nodeType": "YulIdentifier", - "src": "26217:41:43" - }, - "nativeSrc": "26217:61:43", - "nodeType": "YulFunctionCall", - "src": "26217:61:43" - }, - "variableNames": [ - { - "name": "value0", - "nativeSrc": "26207:6:43", - "nodeType": "YulIdentifier", - "src": "26207:6:43" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_struct$_MessagingFee_$33_memory_ptr_fromMemory", - "nativeSrc": "26027:257:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "26102:9:43", - "nodeType": "YulTypedName", - "src": "26102:9:43", - "type": "" - }, - { - "name": "dataEnd", - "nativeSrc": "26113:7:43", - "nodeType": "YulTypedName", - "src": "26113:7:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nativeSrc": "26125:6:43", - "nodeType": "YulTypedName", - "src": "26125:6:43", - "type": "" - } - ], - "src": "26027:257:43" - }, - { - "body": { - "nativeSrc": "26344:65:43", - "nodeType": "YulBlock", - "src": "26344:65:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "26361:1:43", - "nodeType": "YulLiteral", - "src": "26361:1:43", - "type": "", - "value": "0" - }, - { - "name": "ptr", - "nativeSrc": "26364:3:43", - "nodeType": "YulIdentifier", - "src": "26364:3:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "26354:6:43", - "nodeType": "YulIdentifier", - "src": "26354:6:43" - }, - "nativeSrc": "26354:14:43", - "nodeType": "YulFunctionCall", - "src": "26354:14:43" - }, - "nativeSrc": "26354:14:43", - "nodeType": "YulExpressionStatement", - "src": "26354:14:43" - }, - { - "nativeSrc": "26377:26:43", - "nodeType": "YulAssignment", - "src": "26377:26:43", - "value": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "26395:1:43", - "nodeType": "YulLiteral", - "src": "26395:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "26398:4:43", - "nodeType": "YulLiteral", - "src": "26398:4:43", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "keccak256", - "nativeSrc": "26385:9:43", - "nodeType": "YulIdentifier", - "src": "26385:9:43" - }, - "nativeSrc": "26385:18:43", - "nodeType": "YulFunctionCall", - "src": "26385:18:43" - }, - "variableNames": [ - { - "name": "data", - "nativeSrc": "26377:4:43", - "nodeType": "YulIdentifier", - "src": "26377:4:43" - } - ] - } - ] - }, - "name": "array_dataslot_bytes_storage", - "nativeSrc": "26289:120:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "ptr", - "nativeSrc": "26327:3:43", - "nodeType": "YulTypedName", - "src": "26327:3:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "data", - "nativeSrc": "26335:4:43", - "nodeType": "YulTypedName", - "src": "26335:4:43", - "type": "" - } - ], - "src": "26289:120:43" - }, - { - "body": { - "nativeSrc": "26494:462:43", - "nodeType": "YulBlock", - "src": "26494:462:43", - "statements": [ - { - "body": { - "nativeSrc": "26527:423:43", - "nodeType": "YulBlock", - "src": "26527:423:43", - "statements": [ - { - "nativeSrc": "26541:11:43", - "nodeType": "YulVariableDeclaration", - "src": "26541:11:43", - "value": { - "kind": "number", - "nativeSrc": "26551:1:43", - "nodeType": "YulLiteral", - "src": "26551:1:43", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "_1", - "nativeSrc": "26545:2:43", - "nodeType": "YulTypedName", - "src": "26545:2:43", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "26572:1:43", - "nodeType": "YulLiteral", - "src": "26572:1:43", - "type": "", - "value": "0" - }, - { - "name": "array", - "nativeSrc": "26575:5:43", - "nodeType": "YulIdentifier", - "src": "26575:5:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "26565:6:43", - "nodeType": "YulIdentifier", - "src": "26565:6:43" - }, - "nativeSrc": "26565:16:43", - "nodeType": "YulFunctionCall", - "src": "26565:16:43" - }, - "nativeSrc": "26565:16:43", - "nodeType": "YulExpressionStatement", - "src": "26565:16:43" - }, - { - "nativeSrc": "26594:30:43", - "nodeType": "YulVariableDeclaration", - "src": "26594:30:43", - "value": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "26616:1:43", - "nodeType": "YulLiteral", - "src": "26616:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "26619:4:43", - "nodeType": "YulLiteral", - "src": "26619:4:43", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "keccak256", - "nativeSrc": "26606:9:43", - "nodeType": "YulIdentifier", - "src": "26606:9:43" - }, - "nativeSrc": "26606:18:43", - "nodeType": "YulFunctionCall", - "src": "26606:18:43" - }, - "variables": [ - { - "name": "data", - "nativeSrc": "26598:4:43", - "nodeType": "YulTypedName", - "src": "26598:4:43", - "type": "" - } - ] - }, - { - "nativeSrc": "26637:57:43", - "nodeType": "YulVariableDeclaration", - "src": "26637:57:43", - "value": { - "arguments": [ - { - "name": "data", - "nativeSrc": "26660:4:43", - "nodeType": "YulIdentifier", - "src": "26660:4:43" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "26670:1:43", - "nodeType": "YulLiteral", - "src": "26670:1:43", - "type": "", - "value": "5" - }, - { - "arguments": [ - { - "name": "startIndex", - "nativeSrc": "26677:10:43", - "nodeType": "YulIdentifier", - "src": "26677:10:43" - }, - { - "kind": "number", - "nativeSrc": "26689:2:43", - "nodeType": "YulLiteral", - "src": "26689:2:43", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "26673:3:43", - "nodeType": "YulIdentifier", - "src": "26673:3:43" - }, - "nativeSrc": "26673:19:43", - "nodeType": "YulFunctionCall", - "src": "26673:19:43" - } - ], - "functionName": { - "name": "shr", - "nativeSrc": "26666:3:43", - "nodeType": "YulIdentifier", - "src": "26666:3:43" - }, - "nativeSrc": "26666:27:43", - "nodeType": "YulFunctionCall", - "src": "26666:27:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "26656:3:43", - "nodeType": "YulIdentifier", - "src": "26656:3:43" - }, - "nativeSrc": "26656:38:43", - "nodeType": "YulFunctionCall", - "src": "26656:38:43" - }, - "variables": [ - { - "name": "deleteStart", - "nativeSrc": "26641:11:43", - "nodeType": "YulTypedName", - "src": "26641:11:43", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "26731:23:43", - "nodeType": "YulBlock", - "src": "26731:23:43", - "statements": [ - { - "nativeSrc": "26733:19:43", - "nodeType": "YulAssignment", - "src": "26733:19:43", - "value": { - "name": "data", - "nativeSrc": "26748:4:43", - "nodeType": "YulIdentifier", - "src": "26748:4:43" - }, - "variableNames": [ - { - "name": "deleteStart", - "nativeSrc": "26733:11:43", - "nodeType": "YulIdentifier", - "src": "26733:11:43" - } - ] - } - ] - }, - "condition": { - "arguments": [ - { - "name": "startIndex", - "nativeSrc": "26713:10:43", - "nodeType": "YulIdentifier", - "src": "26713:10:43" - }, - { - "kind": "number", - "nativeSrc": "26725:4:43", - "nodeType": "YulLiteral", - "src": "26725:4:43", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "lt", - "nativeSrc": "26710:2:43", - "nodeType": "YulIdentifier", - "src": "26710:2:43" - }, - "nativeSrc": "26710:20:43", - "nodeType": "YulFunctionCall", - "src": "26710:20:43" - }, - "nativeSrc": "26707:47:43", - "nodeType": "YulIf", - "src": "26707:47:43" - }, - { - "nativeSrc": "26767:41:43", - "nodeType": "YulVariableDeclaration", - "src": "26767:41:43", - "value": { - "arguments": [ - { - "name": "data", - "nativeSrc": "26781:4:43", - "nodeType": "YulIdentifier", - "src": "26781:4:43" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "26791:1:43", - "nodeType": "YulLiteral", - "src": "26791:1:43", - "type": "", - "value": "5" - }, - { - "arguments": [ - { - "name": "len", - "nativeSrc": "26798:3:43", - "nodeType": "YulIdentifier", - "src": "26798:3:43" - }, - { - "kind": "number", - "nativeSrc": "26803:2:43", - "nodeType": "YulLiteral", - "src": "26803:2:43", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "26794:3:43", - "nodeType": "YulIdentifier", - "src": "26794:3:43" - }, - "nativeSrc": "26794:12:43", - "nodeType": "YulFunctionCall", - "src": "26794:12:43" - } - ], - "functionName": { - "name": "shr", - "nativeSrc": "26787:3:43", - "nodeType": "YulIdentifier", - "src": "26787:3:43" - }, - "nativeSrc": "26787:20:43", - "nodeType": "YulFunctionCall", - "src": "26787:20:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "26777:3:43", - "nodeType": "YulIdentifier", - "src": "26777:3:43" - }, - "nativeSrc": "26777:31:43", - "nodeType": "YulFunctionCall", - "src": "26777:31:43" - }, - "variables": [ - { - "name": "_2", - "nativeSrc": "26771:2:43", - "nodeType": "YulTypedName", - "src": "26771:2:43", - "type": "" - } - ] - }, - { - "nativeSrc": "26821:24:43", - "nodeType": "YulVariableDeclaration", - "src": "26821:24:43", - "value": { - "name": "deleteStart", - "nativeSrc": "26834:11:43", - "nodeType": "YulIdentifier", - "src": "26834:11:43" - }, - "variables": [ - { - "name": "start", - "nativeSrc": "26825:5:43", - "nodeType": "YulTypedName", - "src": "26825:5:43", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "26919:21:43", - "nodeType": "YulBlock", - "src": "26919:21:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "start", - "nativeSrc": "26928:5:43", - "nodeType": "YulIdentifier", - "src": "26928:5:43" - }, - { - "name": "_1", - "nativeSrc": "26935:2:43", - "nodeType": "YulIdentifier", - "src": "26935:2:43" - } - ], - "functionName": { - "name": "sstore", - "nativeSrc": "26921:6:43", - "nodeType": "YulIdentifier", - "src": "26921:6:43" - }, - "nativeSrc": "26921:17:43", - "nodeType": "YulFunctionCall", - "src": "26921:17:43" - }, - "nativeSrc": "26921:17:43", - "nodeType": "YulExpressionStatement", - "src": "26921:17:43" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "start", - "nativeSrc": "26869:5:43", - "nodeType": "YulIdentifier", - "src": "26869:5:43" - }, - { - "name": "_2", - "nativeSrc": "26876:2:43", - "nodeType": "YulIdentifier", - "src": "26876:2:43" - } - ], - "functionName": { - "name": "lt", - "nativeSrc": "26866:2:43", - "nodeType": "YulIdentifier", - "src": "26866:2:43" - }, - "nativeSrc": "26866:13:43", - "nodeType": "YulFunctionCall", - "src": "26866:13:43" - }, - "nativeSrc": "26858:82:43", - "nodeType": "YulForLoop", - "post": { - "nativeSrc": "26880:26:43", - "nodeType": "YulBlock", - "src": "26880:26:43", - "statements": [ - { - "nativeSrc": "26882:22:43", - "nodeType": "YulAssignment", - "src": "26882:22:43", - "value": { - "arguments": [ - { - "name": "start", - "nativeSrc": "26895:5:43", - "nodeType": "YulIdentifier", - "src": "26895:5:43" - }, - { - "kind": "number", - "nativeSrc": "26902:1:43", - "nodeType": "YulLiteral", - "src": "26902:1:43", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "26891:3:43", - "nodeType": "YulIdentifier", - "src": "26891:3:43" - }, - "nativeSrc": "26891:13:43", - "nodeType": "YulFunctionCall", - "src": "26891:13:43" - }, - "variableNames": [ - { - "name": "start", - "nativeSrc": "26882:5:43", - "nodeType": "YulIdentifier", - "src": "26882:5:43" - } - ] - } - ] - }, - "pre": { - "nativeSrc": "26862:3:43", - "nodeType": "YulBlock", - "src": "26862:3:43", - "statements": [] - }, - "src": "26858:82:43" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "len", - "nativeSrc": "26510:3:43", - "nodeType": "YulIdentifier", - "src": "26510:3:43" - }, - { - "kind": "number", - "nativeSrc": "26515:2:43", - "nodeType": "YulLiteral", - "src": "26515:2:43", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "26507:2:43", - "nodeType": "YulIdentifier", - "src": "26507:2:43" - }, - "nativeSrc": "26507:11:43", - "nodeType": "YulFunctionCall", - "src": "26507:11:43" - }, - "nativeSrc": "26504:446:43", - "nodeType": "YulIf", - "src": "26504:446:43" - } - ] - }, - "name": "clean_up_bytearray_end_slots_bytes_storage", - "nativeSrc": "26414:542:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "array", - "nativeSrc": "26466:5:43", - "nodeType": "YulTypedName", - "src": "26466:5:43", - "type": "" - }, - { - "name": "len", - "nativeSrc": "26473:3:43", - "nodeType": "YulTypedName", - "src": "26473:3:43", - "type": "" - }, - { - "name": "startIndex", - "nativeSrc": "26478:10:43", - "nodeType": "YulTypedName", - "src": "26478:10:43", - "type": "" - } - ], - "src": "26414:542:43" - }, - { - "body": { - "nativeSrc": "27046:81:43", - "nodeType": "YulBlock", - "src": "27046:81:43", - "statements": [ - { - "nativeSrc": "27056:65:43", - "nodeType": "YulAssignment", - "src": "27056:65:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "data", - "nativeSrc": "27071:4:43", - "nodeType": "YulIdentifier", - "src": "27071:4:43" - }, - { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "27089:1:43", - "nodeType": "YulLiteral", - "src": "27089:1:43", - "type": "", - "value": "3" - }, - { - "name": "len", - "nativeSrc": "27092:3:43", - "nodeType": "YulIdentifier", - "src": "27092:3:43" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "27085:3:43", - "nodeType": "YulIdentifier", - "src": "27085:3:43" - }, - "nativeSrc": "27085:11:43", - "nodeType": "YulFunctionCall", - "src": "27085:11:43" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "27102:1:43", - "nodeType": "YulLiteral", - "src": "27102:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "not", - "nativeSrc": "27098:3:43", - "nodeType": "YulIdentifier", - "src": "27098:3:43" - }, - "nativeSrc": "27098:6:43", - "nodeType": "YulFunctionCall", - "src": "27098:6:43" - } - ], - "functionName": { - "name": "shr", - "nativeSrc": "27081:3:43", - "nodeType": "YulIdentifier", - "src": "27081:3:43" - }, - "nativeSrc": "27081:24:43", - "nodeType": "YulFunctionCall", - "src": "27081:24:43" - } - ], - "functionName": { - "name": "not", - "nativeSrc": "27077:3:43", - "nodeType": "YulIdentifier", - "src": "27077:3:43" - }, - "nativeSrc": "27077:29:43", - "nodeType": "YulFunctionCall", - "src": "27077:29:43" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "27067:3:43", - "nodeType": "YulIdentifier", - "src": "27067:3:43" - }, - "nativeSrc": "27067:40:43", - "nodeType": "YulFunctionCall", - "src": "27067:40:43" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "27113:1:43", - "nodeType": "YulLiteral", - "src": "27113:1:43", - "type": "", - "value": "1" - }, - { - "name": "len", - "nativeSrc": "27116:3:43", - "nodeType": "YulIdentifier", - "src": "27116:3:43" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "27109:3:43", - "nodeType": "YulIdentifier", - "src": "27109:3:43" - }, - "nativeSrc": "27109:11:43", - "nodeType": "YulFunctionCall", - "src": "27109:11:43" - } - ], - "functionName": { - "name": "or", - "nativeSrc": "27064:2:43", - "nodeType": "YulIdentifier", - "src": "27064:2:43" - }, - "nativeSrc": "27064:57:43", - "nodeType": "YulFunctionCall", - "src": "27064:57:43" - }, - "variableNames": [ - { - "name": "used", - "nativeSrc": "27056:4:43", - "nodeType": "YulIdentifier", - "src": "27056:4:43" - } - ] - } - ] - }, - "name": "extract_used_part_and_set_length_of_short_byte_array", - "nativeSrc": "26961:166:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "data", - "nativeSrc": "27023:4:43", - "nodeType": "YulTypedName", - "src": "27023:4:43", - "type": "" - }, - { - "name": "len", - "nativeSrc": "27029:3:43", - "nodeType": "YulTypedName", - "src": "27029:3:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "used", - "nativeSrc": "27037:4:43", - "nodeType": "YulTypedName", - "src": "27037:4:43", - "type": "" - } - ], - "src": "26961:166:43" - }, - { - "body": { - "nativeSrc": "27226:1247:43", - "nodeType": "YulBlock", - "src": "27226:1247:43", - "statements": [ - { - "nativeSrc": "27236:24:43", - "nodeType": "YulVariableDeclaration", - "src": "27236:24:43", - "value": { - "arguments": [ - { - "name": "src", - "nativeSrc": "27256:3:43", - "nodeType": "YulIdentifier", - "src": "27256:3:43" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "27250:5:43", - "nodeType": "YulIdentifier", - "src": "27250:5:43" - }, - "nativeSrc": "27250:10:43", - "nodeType": "YulFunctionCall", - "src": "27250:10:43" - }, - "variables": [ - { - "name": "newLen", - "nativeSrc": "27240:6:43", - "nodeType": "YulTypedName", - "src": "27240:6:43", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "27303:22:43", - "nodeType": "YulBlock", - "src": "27303:22:43", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x41", - "nativeSrc": "27305:16:43", - "nodeType": "YulIdentifier", - "src": "27305:16:43" - }, - "nativeSrc": "27305:18:43", - "nodeType": "YulFunctionCall", - "src": "27305:18:43" - }, - "nativeSrc": "27305:18:43", - "nodeType": "YulExpressionStatement", - "src": "27305:18:43" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "newLen", - "nativeSrc": "27275:6:43", - "nodeType": "YulIdentifier", - "src": "27275:6:43" - }, - { - "kind": "number", - "nativeSrc": "27283:18:43", - "nodeType": "YulLiteral", - "src": "27283:18:43", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "27272:2:43", - "nodeType": "YulIdentifier", - "src": "27272:2:43" - }, - "nativeSrc": "27272:30:43", - "nodeType": "YulFunctionCall", - "src": "27272:30:43" - }, - "nativeSrc": "27269:56:43", - "nodeType": "YulIf", - "src": "27269:56:43" - }, - { - "expression": { - "arguments": [ - { - "name": "slot", - "nativeSrc": "27377:4:43", - "nodeType": "YulIdentifier", - "src": "27377:4:43" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "slot", - "nativeSrc": "27415:4:43", - "nodeType": "YulIdentifier", - "src": "27415:4:43" - } - ], - "functionName": { - "name": "sload", - "nativeSrc": "27409:5:43", - "nodeType": "YulIdentifier", - "src": "27409:5:43" - }, - "nativeSrc": "27409:11:43", - "nodeType": "YulFunctionCall", - "src": "27409:11:43" - } - ], - "functionName": { - "name": "extract_byte_array_length", - "nativeSrc": "27383:25:43", - "nodeType": "YulIdentifier", - "src": "27383:25:43" - }, - "nativeSrc": "27383:38:43", - "nodeType": "YulFunctionCall", - "src": "27383:38:43" - }, - { - "name": "newLen", - "nativeSrc": "27423:6:43", - "nodeType": "YulIdentifier", - "src": "27423:6:43" - } - ], - "functionName": { - "name": "clean_up_bytearray_end_slots_bytes_storage", - "nativeSrc": "27334:42:43", - "nodeType": "YulIdentifier", - "src": "27334:42:43" - }, - "nativeSrc": "27334:96:43", - "nodeType": "YulFunctionCall", - "src": "27334:96:43" - }, - "nativeSrc": "27334:96:43", - "nodeType": "YulExpressionStatement", - "src": "27334:96:43" - }, - { - "nativeSrc": "27439:18:43", - "nodeType": "YulVariableDeclaration", - "src": "27439:18:43", - "value": { - "kind": "number", - "nativeSrc": "27456:1:43", - "nodeType": "YulLiteral", - "src": "27456:1:43", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "srcOffset", - "nativeSrc": "27443:9:43", - "nodeType": "YulTypedName", - "src": "27443:9:43", - "type": "" - } - ] - }, - { - "nativeSrc": "27466:23:43", - "nodeType": "YulVariableDeclaration", - "src": "27466:23:43", - "value": { - "kind": "number", - "nativeSrc": "27485:4:43", - "nodeType": "YulLiteral", - "src": "27485:4:43", - "type": "", - "value": "0x20" - }, - "variables": [ - { - "name": "srcOffset_1", - "nativeSrc": "27470:11:43", - "nodeType": "YulTypedName", - "src": "27470:11:43", - "type": "" - } - ] - }, - { - "nativeSrc": "27498:17:43", - "nodeType": "YulAssignment", - "src": "27498:17:43", - "value": { - "kind": "number", - "nativeSrc": "27511:4:43", - "nodeType": "YulLiteral", - "src": "27511:4:43", - "type": "", - "value": "0x20" - }, - "variableNames": [ - { - "name": "srcOffset", - "nativeSrc": "27498:9:43", - "nodeType": "YulIdentifier", - "src": "27498:9:43" - } - ] - }, - { - "cases": [ - { - "body": { - "nativeSrc": "27561:655:43", - "nodeType": "YulBlock", - "src": "27561:655:43", - "statements": [ - { - "nativeSrc": "27575:35:43", - "nodeType": "YulVariableDeclaration", - "src": "27575:35:43", - "value": { - "arguments": [ - { - "name": "newLen", - "nativeSrc": "27594:6:43", - "nodeType": "YulIdentifier", - "src": "27594:6:43" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "27606:2:43", - "nodeType": "YulLiteral", - "src": "27606:2:43", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "not", - "nativeSrc": "27602:3:43", - "nodeType": "YulIdentifier", - "src": "27602:3:43" - }, - "nativeSrc": "27602:7:43", - "nodeType": "YulFunctionCall", - "src": "27602:7:43" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "27590:3:43", - "nodeType": "YulIdentifier", - "src": "27590:3:43" - }, - "nativeSrc": "27590:20:43", - "nodeType": "YulFunctionCall", - "src": "27590:20:43" - }, - "variables": [ - { - "name": "loopEnd", - "nativeSrc": "27579:7:43", - "nodeType": "YulTypedName", - "src": "27579:7:43", - "type": "" - } - ] - }, - { - "nativeSrc": "27623:48:43", - "nodeType": "YulVariableDeclaration", - "src": "27623:48:43", - "value": { - "arguments": [ - { - "name": "slot", - "nativeSrc": "27666:4:43", - "nodeType": "YulIdentifier", - "src": "27666:4:43" - } - ], - "functionName": { - "name": "array_dataslot_bytes_storage", - "nativeSrc": "27637:28:43", - "nodeType": "YulIdentifier", - "src": "27637:28:43" - }, - "nativeSrc": "27637:34:43", - "nodeType": "YulFunctionCall", - "src": "27637:34:43" - }, - "variables": [ - { - "name": "dstPtr", - "nativeSrc": "27627:6:43", - "nodeType": "YulTypedName", - "src": "27627:6:43", - "type": "" - } - ] - }, - { - "nativeSrc": "27684:10:43", - "nodeType": "YulVariableDeclaration", - "src": "27684:10:43", - "value": { - "kind": "number", - "nativeSrc": "27693:1:43", - "nodeType": "YulLiteral", - "src": "27693:1:43", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "i", - "nativeSrc": "27688:1:43", - "nodeType": "YulTypedName", - "src": "27688:1:43", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "27771:172:43", - "nodeType": "YulBlock", - "src": "27771:172:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "dstPtr", - "nativeSrc": "27796:6:43", - "nodeType": "YulIdentifier", - "src": "27796:6:43" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "src", - "nativeSrc": "27814:3:43", - "nodeType": "YulIdentifier", - "src": "27814:3:43" - }, - { - "name": "srcOffset", - "nativeSrc": "27819:9:43", - "nodeType": "YulIdentifier", - "src": "27819:9:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "27810:3:43", - "nodeType": "YulIdentifier", - "src": "27810:3:43" - }, - "nativeSrc": "27810:19:43", - "nodeType": "YulFunctionCall", - "src": "27810:19:43" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "27804:5:43", - "nodeType": "YulIdentifier", - "src": "27804:5:43" - }, - "nativeSrc": "27804:26:43", - "nodeType": "YulFunctionCall", - "src": "27804:26:43" - } - ], - "functionName": { - "name": "sstore", - "nativeSrc": "27789:6:43", - "nodeType": "YulIdentifier", - "src": "27789:6:43" - }, - "nativeSrc": "27789:42:43", - "nodeType": "YulFunctionCall", - "src": "27789:42:43" - }, - "nativeSrc": "27789:42:43", - "nodeType": "YulExpressionStatement", - "src": "27789:42:43" - }, - { - "nativeSrc": "27848:24:43", - "nodeType": "YulAssignment", - "src": "27848:24:43", - "value": { - "arguments": [ - { - "name": "dstPtr", - "nativeSrc": "27862:6:43", - "nodeType": "YulIdentifier", - "src": "27862:6:43" - }, - { - "kind": "number", - "nativeSrc": "27870:1:43", - "nodeType": "YulLiteral", - "src": "27870:1:43", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "27858:3:43", - "nodeType": "YulIdentifier", - "src": "27858:3:43" - }, - "nativeSrc": "27858:14:43", - "nodeType": "YulFunctionCall", - "src": "27858:14:43" - }, - "variableNames": [ - { - "name": "dstPtr", - "nativeSrc": "27848:6:43", - "nodeType": "YulIdentifier", - "src": "27848:6:43" - } - ] - }, - { - "nativeSrc": "27889:40:43", - "nodeType": "YulAssignment", - "src": "27889:40:43", - "value": { - "arguments": [ - { - "name": "srcOffset", - "nativeSrc": "27906:9:43", - "nodeType": "YulIdentifier", - "src": "27906:9:43" - }, - { - "name": "srcOffset_1", - "nativeSrc": "27917:11:43", - "nodeType": "YulIdentifier", - "src": "27917:11:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "27902:3:43", - "nodeType": "YulIdentifier", - "src": "27902:3:43" - }, - "nativeSrc": "27902:27:43", - "nodeType": "YulFunctionCall", - "src": "27902:27:43" - }, - "variableNames": [ - { - "name": "srcOffset", - "nativeSrc": "27889:9:43", - "nodeType": "YulIdentifier", - "src": "27889:9:43" - } - ] - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nativeSrc": "27718:1:43", - "nodeType": "YulIdentifier", - "src": "27718:1:43" - }, - { - "name": "loopEnd", - "nativeSrc": "27721:7:43", - "nodeType": "YulIdentifier", - "src": "27721:7:43" - } - ], - "functionName": { - "name": "lt", - "nativeSrc": "27715:2:43", - "nodeType": "YulIdentifier", - "src": "27715:2:43" - }, - "nativeSrc": "27715:14:43", - "nodeType": "YulFunctionCall", - "src": "27715:14:43" - }, - "nativeSrc": "27707:236:43", - "nodeType": "YulForLoop", - "post": { - "nativeSrc": "27730:28:43", - "nodeType": "YulBlock", - "src": "27730:28:43", - "statements": [ - { - "nativeSrc": "27732:24:43", - "nodeType": "YulAssignment", - "src": "27732:24:43", - "value": { - "arguments": [ - { - "name": "i", - "nativeSrc": "27741:1:43", - "nodeType": "YulIdentifier", - "src": "27741:1:43" - }, - { - "name": "srcOffset_1", - "nativeSrc": "27744:11:43", - "nodeType": "YulIdentifier", - "src": "27744:11:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "27737:3:43", - "nodeType": "YulIdentifier", - "src": "27737:3:43" - }, - "nativeSrc": "27737:19:43", - "nodeType": "YulFunctionCall", - "src": "27737:19:43" - }, - "variableNames": [ - { - "name": "i", - "nativeSrc": "27732:1:43", - "nodeType": "YulIdentifier", - "src": "27732:1:43" - } - ] - } - ] - }, - "pre": { - "nativeSrc": "27711:3:43", - "nodeType": "YulBlock", - "src": "27711:3:43", - "statements": [] - }, - "src": "27707:236:43" - }, - { - "body": { - "nativeSrc": "27991:166:43", - "nodeType": "YulBlock", - "src": "27991:166:43", - "statements": [ - { - "nativeSrc": "28009:43:43", - "nodeType": "YulVariableDeclaration", - "src": "28009:43:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "src", - "nativeSrc": "28036:3:43", - "nodeType": "YulIdentifier", - "src": "28036:3:43" - }, - { - "name": "srcOffset", - "nativeSrc": "28041:9:43", - "nodeType": "YulIdentifier", - "src": "28041:9:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "28032:3:43", - "nodeType": "YulIdentifier", - "src": "28032:3:43" - }, - "nativeSrc": "28032:19:43", - "nodeType": "YulFunctionCall", - "src": "28032:19:43" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "28026:5:43", - "nodeType": "YulIdentifier", - "src": "28026:5:43" - }, - "nativeSrc": "28026:26:43", - "nodeType": "YulFunctionCall", - "src": "28026:26:43" - }, - "variables": [ - { - "name": "lastValue", - "nativeSrc": "28013:9:43", - "nodeType": "YulTypedName", - "src": "28013:9:43", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "dstPtr", - "nativeSrc": "28076:6:43", - "nodeType": "YulIdentifier", - "src": "28076:6:43" - }, - { - "arguments": [ - { - "name": "lastValue", - "nativeSrc": "28088:9:43", - "nodeType": "YulIdentifier", - "src": "28088:9:43" - }, - { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "28115:1:43", - "nodeType": "YulLiteral", - "src": "28115:1:43", - "type": "", - "value": "3" - }, - { - "name": "newLen", - "nativeSrc": "28118:6:43", - "nodeType": "YulIdentifier", - "src": "28118:6:43" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "28111:3:43", - "nodeType": "YulIdentifier", - "src": "28111:3:43" - }, - "nativeSrc": "28111:14:43", - "nodeType": "YulFunctionCall", - "src": "28111:14:43" - }, - { - "kind": "number", - "nativeSrc": "28127:3:43", - "nodeType": "YulLiteral", - "src": "28127:3:43", - "type": "", - "value": "248" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "28107:3:43", - "nodeType": "YulIdentifier", - "src": "28107:3:43" - }, - "nativeSrc": "28107:24:43", - "nodeType": "YulFunctionCall", - "src": "28107:24:43" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "28137:1:43", - "nodeType": "YulLiteral", - "src": "28137:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "not", - "nativeSrc": "28133:3:43", - "nodeType": "YulIdentifier", - "src": "28133:3:43" - }, - "nativeSrc": "28133:6:43", - "nodeType": "YulFunctionCall", - "src": "28133:6:43" - } - ], - "functionName": { - "name": "shr", - "nativeSrc": "28103:3:43", - "nodeType": "YulIdentifier", - "src": "28103:3:43" - }, - "nativeSrc": "28103:37:43", - "nodeType": "YulFunctionCall", - "src": "28103:37:43" - } - ], - "functionName": { - "name": "not", - "nativeSrc": "28099:3:43", - "nodeType": "YulIdentifier", - "src": "28099:3:43" - }, - "nativeSrc": "28099:42:43", - "nodeType": "YulFunctionCall", - "src": "28099:42:43" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "28084:3:43", - "nodeType": "YulIdentifier", - "src": "28084:3:43" - }, - "nativeSrc": "28084:58:43", - "nodeType": "YulFunctionCall", - "src": "28084:58:43" - } - ], - "functionName": { - "name": "sstore", - "nativeSrc": "28069:6:43", - "nodeType": "YulIdentifier", - "src": "28069:6:43" - }, - "nativeSrc": "28069:74:43", - "nodeType": "YulFunctionCall", - "src": "28069:74:43" - }, - "nativeSrc": "28069:74:43", - "nodeType": "YulExpressionStatement", - "src": "28069:74:43" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "loopEnd", - "nativeSrc": "27962:7:43", - "nodeType": "YulIdentifier", - "src": "27962:7:43" - }, - { - "name": "newLen", - "nativeSrc": "27971:6:43", - "nodeType": "YulIdentifier", - "src": "27971:6:43" - } - ], - "functionName": { - "name": "lt", - "nativeSrc": "27959:2:43", - "nodeType": "YulIdentifier", - "src": "27959:2:43" - }, - "nativeSrc": "27959:19:43", - "nodeType": "YulFunctionCall", - "src": "27959:19:43" - }, - "nativeSrc": "27956:201:43", - "nodeType": "YulIf", - "src": "27956:201:43" - }, - { - "expression": { - "arguments": [ - { - "name": "slot", - "nativeSrc": "28177:4:43", - "nodeType": "YulIdentifier", - "src": "28177:4:43" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "28191:1:43", - "nodeType": "YulLiteral", - "src": "28191:1:43", - "type": "", - "value": "1" - }, - { - "name": "newLen", - "nativeSrc": "28194:6:43", - "nodeType": "YulIdentifier", - "src": "28194:6:43" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "28187:3:43", - "nodeType": "YulIdentifier", - "src": "28187:3:43" - }, - "nativeSrc": "28187:14:43", - "nodeType": "YulFunctionCall", - "src": "28187:14:43" - }, - { - "kind": "number", - "nativeSrc": "28203:1:43", - "nodeType": "YulLiteral", - "src": "28203:1:43", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "28183:3:43", - "nodeType": "YulIdentifier", - "src": "28183:3:43" - }, - "nativeSrc": "28183:22:43", - "nodeType": "YulFunctionCall", - "src": "28183:22:43" - } - ], - "functionName": { - "name": "sstore", - "nativeSrc": "28170:6:43", - "nodeType": "YulIdentifier", - "src": "28170:6:43" - }, - "nativeSrc": "28170:36:43", - "nodeType": "YulFunctionCall", - "src": "28170:36:43" - }, - "nativeSrc": "28170:36:43", - "nodeType": "YulExpressionStatement", - "src": "28170:36:43" - } - ] - }, - "nativeSrc": "27554:662:43", - "nodeType": "YulCase", - "src": "27554:662:43", - "value": { - "kind": "number", - "nativeSrc": "27559:1:43", - "nodeType": "YulLiteral", - "src": "27559:1:43", - "type": "", - "value": "1" - } - }, - { - "body": { - "nativeSrc": "28233:234:43", - "nodeType": "YulBlock", - "src": "28233:234:43", - "statements": [ - { - "nativeSrc": "28247:14:43", - "nodeType": "YulVariableDeclaration", - "src": "28247:14:43", - "value": { - "kind": "number", - "nativeSrc": "28260:1:43", - "nodeType": "YulLiteral", - "src": "28260:1:43", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "value", - "nativeSrc": "28251:5:43", - "nodeType": "YulTypedName", - "src": "28251:5:43", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "28296:67:43", - "nodeType": "YulBlock", - "src": "28296:67:43", - "statements": [ - { - "nativeSrc": "28314:35:43", - "nodeType": "YulAssignment", - "src": "28314:35:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "src", - "nativeSrc": "28333:3:43", - "nodeType": "YulIdentifier", - "src": "28333:3:43" - }, - { - "name": "srcOffset", - "nativeSrc": "28338:9:43", - "nodeType": "YulIdentifier", - "src": "28338:9:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "28329:3:43", - "nodeType": "YulIdentifier", - "src": "28329:3:43" - }, - "nativeSrc": "28329:19:43", - "nodeType": "YulFunctionCall", - "src": "28329:19:43" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "28323:5:43", - "nodeType": "YulIdentifier", - "src": "28323:5:43" - }, - "nativeSrc": "28323:26:43", - "nodeType": "YulFunctionCall", - "src": "28323:26:43" - }, - "variableNames": [ - { - "name": "value", - "nativeSrc": "28314:5:43", - "nodeType": "YulIdentifier", - "src": "28314:5:43" - } - ] - } - ] - }, - "condition": { - "name": "newLen", - "nativeSrc": "28277:6:43", - "nodeType": "YulIdentifier", - "src": "28277:6:43" - }, - "nativeSrc": "28274:89:43", - "nodeType": "YulIf", - "src": "28274:89:43" - }, - { - "expression": { - "arguments": [ - { - "name": "slot", - "nativeSrc": "28383:4:43", - "nodeType": "YulIdentifier", - "src": "28383:4:43" - }, - { - "arguments": [ - { - "name": "value", - "nativeSrc": "28442:5:43", - "nodeType": "YulIdentifier", - "src": "28442:5:43" - }, - { - "name": "newLen", - "nativeSrc": "28449:6:43", - "nodeType": "YulIdentifier", - "src": "28449:6:43" - } - ], - "functionName": { - "name": "extract_used_part_and_set_length_of_short_byte_array", - "nativeSrc": "28389:52:43", - "nodeType": "YulIdentifier", - "src": "28389:52:43" - }, - "nativeSrc": "28389:67:43", - "nodeType": "YulFunctionCall", - "src": "28389:67:43" - } - ], - "functionName": { - "name": "sstore", - "nativeSrc": "28376:6:43", - "nodeType": "YulIdentifier", - "src": "28376:6:43" - }, - "nativeSrc": "28376:81:43", - "nodeType": "YulFunctionCall", - "src": "28376:81:43" - }, - "nativeSrc": "28376:81:43", - "nodeType": "YulExpressionStatement", - "src": "28376:81:43" - } - ] - }, - "nativeSrc": "28225:242:43", - "nodeType": "YulCase", - "src": "28225:242:43", - "value": "default" - } - ], - "expression": { - "arguments": [ - { - "name": "newLen", - "nativeSrc": "27534:6:43", - "nodeType": "YulIdentifier", - "src": "27534:6:43" - }, - { - "kind": "number", - "nativeSrc": "27542:2:43", - "nodeType": "YulLiteral", - "src": "27542:2:43", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "27531:2:43", - "nodeType": "YulIdentifier", - "src": "27531:2:43" - }, - "nativeSrc": "27531:14:43", - "nodeType": "YulFunctionCall", - "src": "27531:14:43" - }, - "nativeSrc": "27524:943:43", - "nodeType": "YulSwitch", - "src": "27524:943:43" - } - ] - }, - "name": "copy_byte_array_to_storage_from_t_bytes_memory_ptr_to_t_bytes_storage", - "nativeSrc": "27132:1341:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "slot", - "nativeSrc": "27211:4:43", - "nodeType": "YulTypedName", - "src": "27211:4:43", - "type": "" - }, - { - "name": "src", - "nativeSrc": "27217:3:43", - "nodeType": "YulTypedName", - "src": "27217:3:43", - "type": "" - } - ], - "src": "27132:1341:43" - }, - { - "body": { - "nativeSrc": "28703:939:43", - "nodeType": "YulBlock", - "src": "28703:939:43", - "statements": [ - { - "nativeSrc": "28713:12:43", - "nodeType": "YulVariableDeclaration", - "src": "28713:12:43", - "value": { - "kind": "number", - "nativeSrc": "28723:2:43", - "nodeType": "YulLiteral", - "src": "28723:2:43", - "type": "", - "value": "32" - }, - "variables": [ - { - "name": "_1", - "nativeSrc": "28717:2:43", - "nodeType": "YulTypedName", - "src": "28717:2:43", - "type": "" - } - ] - }, - { - "nativeSrc": "28734:32:43", - "nodeType": "YulVariableDeclaration", - "src": "28734:32:43", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "28752:9:43", - "nodeType": "YulIdentifier", - "src": "28752:9:43" - }, - { - "name": "_1", - "nativeSrc": "28763:2:43", - "nodeType": "YulIdentifier", - "src": "28763:2:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "28748:3:43", - "nodeType": "YulIdentifier", - "src": "28748:3:43" - }, - "nativeSrc": "28748:18:43", - "nodeType": "YulFunctionCall", - "src": "28748:18:43" - }, - "variables": [ - { - "name": "tail_1", - "nativeSrc": "28738:6:43", - "nodeType": "YulTypedName", - "src": "28738:6:43", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "28782:9:43", - "nodeType": "YulIdentifier", - "src": "28782:9:43" - }, - { - "name": "_1", - "nativeSrc": "28793:2:43", - "nodeType": "YulIdentifier", - "src": "28793:2:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "28775:6:43", - "nodeType": "YulIdentifier", - "src": "28775:6:43" - }, - "nativeSrc": "28775:21:43", - "nodeType": "YulFunctionCall", - "src": "28775:21:43" - }, - "nativeSrc": "28775:21:43", - "nodeType": "YulExpressionStatement", - "src": "28775:21:43" - }, - { - "nativeSrc": "28805:17:43", - "nodeType": "YulVariableDeclaration", - "src": "28805:17:43", - "value": { - "name": "tail_1", - "nativeSrc": "28816:6:43", - "nodeType": "YulIdentifier", - "src": "28816:6:43" - }, - "variables": [ - { - "name": "pos", - "nativeSrc": "28809:3:43", - "nodeType": "YulTypedName", - "src": "28809:3:43", - "type": "" - } - ] - }, - { - "nativeSrc": "28831:27:43", - "nodeType": "YulVariableDeclaration", - "src": "28831:27:43", - "value": { - "arguments": [ - { - "name": "value0", - "nativeSrc": "28851:6:43", - "nodeType": "YulIdentifier", - "src": "28851:6:43" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "28845:5:43", - "nodeType": "YulIdentifier", - "src": "28845:5:43" - }, - "nativeSrc": "28845:13:43", - "nodeType": "YulFunctionCall", - "src": "28845:13:43" - }, - "variables": [ - { - "name": "length", - "nativeSrc": "28835:6:43", - "nodeType": "YulTypedName", - "src": "28835:6:43", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "tail_1", - "nativeSrc": "28874:6:43", - "nodeType": "YulIdentifier", - "src": "28874:6:43" - }, - { - "name": "length", - "nativeSrc": "28882:6:43", - "nodeType": "YulIdentifier", - "src": "28882:6:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "28867:6:43", - "nodeType": "YulIdentifier", - "src": "28867:6:43" - }, - "nativeSrc": "28867:22:43", - "nodeType": "YulFunctionCall", - "src": "28867:22:43" - }, - "nativeSrc": "28867:22:43", - "nodeType": "YulExpressionStatement", - "src": "28867:22:43" - }, - { - "nativeSrc": "28898:12:43", - "nodeType": "YulVariableDeclaration", - "src": "28898:12:43", - "value": { - "kind": "number", - "nativeSrc": "28908:2:43", - "nodeType": "YulLiteral", - "src": "28908:2:43", - "type": "", - "value": "64" - }, - "variables": [ - { - "name": "_2", - "nativeSrc": "28902:2:43", - "nodeType": "YulTypedName", - "src": "28902:2:43", - "type": "" - } - ] - }, - { - "nativeSrc": "28919:25:43", - "nodeType": "YulAssignment", - "src": "28919:25:43", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "28930:9:43", - "nodeType": "YulIdentifier", - "src": "28930:9:43" - }, - { - "kind": "number", - "nativeSrc": "28941:2:43", - "nodeType": "YulLiteral", - "src": "28941:2:43", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "28926:3:43", - "nodeType": "YulIdentifier", - "src": "28926:3:43" - }, - "nativeSrc": "28926:18:43", - "nodeType": "YulFunctionCall", - "src": "28926:18:43" - }, - "variableNames": [ - { - "name": "pos", - "nativeSrc": "28919:3:43", - "nodeType": "YulIdentifier", - "src": "28919:3:43" - } - ] - }, - { - "nativeSrc": "28953:53:43", - "nodeType": "YulVariableDeclaration", - "src": "28953:53:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "28975:9:43", - "nodeType": "YulIdentifier", - "src": "28975:9:43" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "28990:1:43", - "nodeType": "YulLiteral", - "src": "28990:1:43", - "type": "", - "value": "5" - }, - { - "name": "length", - "nativeSrc": "28993:6:43", - "nodeType": "YulIdentifier", - "src": "28993:6:43" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "28986:3:43", - "nodeType": "YulIdentifier", - "src": "28986:3:43" - }, - "nativeSrc": "28986:14:43", - "nodeType": "YulFunctionCall", - "src": "28986:14:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "28971:3:43", - "nodeType": "YulIdentifier", - "src": "28971:3:43" - }, - "nativeSrc": "28971:30:43", - "nodeType": "YulFunctionCall", - "src": "28971:30:43" - }, - { - "kind": "number", - "nativeSrc": "29003:2:43", - "nodeType": "YulLiteral", - "src": "29003:2:43", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "28967:3:43", - "nodeType": "YulIdentifier", - "src": "28967:3:43" - }, - "nativeSrc": "28967:39:43", - "nodeType": "YulFunctionCall", - "src": "28967:39:43" - }, - "variables": [ - { - "name": "tail_2", - "nativeSrc": "28957:6:43", - "nodeType": "YulTypedName", - "src": "28957:6:43", - "type": "" - } - ] - }, - { - "nativeSrc": "29015:29:43", - "nodeType": "YulVariableDeclaration", - "src": "29015:29:43", - "value": { - "arguments": [ - { - "name": "value0", - "nativeSrc": "29033:6:43", - "nodeType": "YulIdentifier", - "src": "29033:6:43" - }, - { - "name": "_1", - "nativeSrc": "29041:2:43", - "nodeType": "YulIdentifier", - "src": "29041:2:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "29029:3:43", - "nodeType": "YulIdentifier", - "src": "29029:3:43" - }, - "nativeSrc": "29029:15:43", - "nodeType": "YulFunctionCall", - "src": "29029:15:43" - }, - "variables": [ - { - "name": "srcPtr", - "nativeSrc": "29019:6:43", - "nodeType": "YulTypedName", - "src": "29019:6:43", - "type": "" - } - ] - }, - { - "nativeSrc": "29053:10:43", - "nodeType": "YulVariableDeclaration", - "src": "29053:10:43", - "value": { - "kind": "number", - "nativeSrc": "29062:1:43", - "nodeType": "YulLiteral", - "src": "29062:1:43", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "i", - "nativeSrc": "29057:1:43", - "nodeType": "YulTypedName", - "src": "29057:1:43", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "29121:492:43", - "nodeType": "YulBlock", - "src": "29121:492:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "pos", - "nativeSrc": "29142:3:43", - "nodeType": "YulIdentifier", - "src": "29142:3:43" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "tail_2", - "nativeSrc": "29155:6:43", - "nodeType": "YulIdentifier", - "src": "29155:6:43" - }, - { - "name": "headStart", - "nativeSrc": "29163:9:43", - "nodeType": "YulIdentifier", - "src": "29163:9:43" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "29151:3:43", - "nodeType": "YulIdentifier", - "src": "29151:3:43" - }, - "nativeSrc": "29151:22:43", - "nodeType": "YulFunctionCall", - "src": "29151:22:43" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "29179:2:43", - "nodeType": "YulLiteral", - "src": "29179:2:43", - "type": "", - "value": "63" - } - ], - "functionName": { - "name": "not", - "nativeSrc": "29175:3:43", - "nodeType": "YulIdentifier", - "src": "29175:3:43" - }, - "nativeSrc": "29175:7:43", - "nodeType": "YulFunctionCall", - "src": "29175:7:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "29147:3:43", - "nodeType": "YulIdentifier", - "src": "29147:3:43" - }, - "nativeSrc": "29147:36:43", - "nodeType": "YulFunctionCall", - "src": "29147:36:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "29135:6:43", - "nodeType": "YulIdentifier", - "src": "29135:6:43" - }, - "nativeSrc": "29135:49:43", - "nodeType": "YulFunctionCall", - "src": "29135:49:43" - }, - "nativeSrc": "29135:49:43", - "nodeType": "YulExpressionStatement", - "src": "29135:49:43" - }, - { - "nativeSrc": "29197:23:43", - "nodeType": "YulVariableDeclaration", - "src": "29197:23:43", - "value": { - "arguments": [ - { - "name": "srcPtr", - "nativeSrc": "29213:6:43", - "nodeType": "YulIdentifier", - "src": "29213:6:43" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "29207:5:43", - "nodeType": "YulIdentifier", - "src": "29207:5:43" - }, - "nativeSrc": "29207:13:43", - "nodeType": "YulFunctionCall", - "src": "29207:13:43" - }, - "variables": [ - { - "name": "_3", - "nativeSrc": "29201:2:43", - "nodeType": "YulTypedName", - "src": "29201:2:43", - "type": "" - } - ] - }, - { - "nativeSrc": "29233:14:43", - "nodeType": "YulVariableDeclaration", - "src": "29233:14:43", - "value": { - "kind": "number", - "nativeSrc": "29243:4:43", - "nodeType": "YulLiteral", - "src": "29243:4:43", - "type": "", - "value": "0x60" - }, - "variables": [ - { - "name": "_4", - "nativeSrc": "29237:2:43", - "nodeType": "YulTypedName", - "src": "29237:2:43", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "tail_2", - "nativeSrc": "29267:6:43", - "nodeType": "YulIdentifier", - "src": "29267:6:43" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "_3", - "nativeSrc": "29285:2:43", - "nodeType": "YulIdentifier", - "src": "29285:2:43" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "29279:5:43", - "nodeType": "YulIdentifier", - "src": "29279:5:43" - }, - "nativeSrc": "29279:9:43", - "nodeType": "YulFunctionCall", - "src": "29279:9:43" - }, - { - "kind": "number", - "nativeSrc": "29290:10:43", - "nodeType": "YulLiteral", - "src": "29290:10:43", - "type": "", - "value": "0xffffffff" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "29275:3:43", - "nodeType": "YulIdentifier", - "src": "29275:3:43" - }, - "nativeSrc": "29275:26:43", - "nodeType": "YulFunctionCall", - "src": "29275:26:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "29260:6:43", - "nodeType": "YulIdentifier", - "src": "29260:6:43" - }, - "nativeSrc": "29260:42:43", - "nodeType": "YulFunctionCall", - "src": "29260:42:43" - }, - "nativeSrc": "29260:42:43", - "nodeType": "YulExpressionStatement", - "src": "29260:42:43" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "tail_2", - "nativeSrc": "29326:6:43", - "nodeType": "YulIdentifier", - "src": "29326:6:43" - }, - { - "name": "_1", - "nativeSrc": "29334:2:43", - "nodeType": "YulIdentifier", - "src": "29334:2:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "29322:3:43", - "nodeType": "YulIdentifier", - "src": "29322:3:43" - }, - "nativeSrc": "29322:15:43", - "nodeType": "YulFunctionCall", - "src": "29322:15:43" - }, - { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "_3", - "nativeSrc": "29353:2:43", - "nodeType": "YulIdentifier", - "src": "29353:2:43" - }, - { - "name": "_1", - "nativeSrc": "29357:2:43", - "nodeType": "YulIdentifier", - "src": "29357:2:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "29349:3:43", - "nodeType": "YulIdentifier", - "src": "29349:3:43" - }, - "nativeSrc": "29349:11:43", - "nodeType": "YulFunctionCall", - "src": "29349:11:43" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "29343:5:43", - "nodeType": "YulIdentifier", - "src": "29343:5:43" - }, - "nativeSrc": "29343:18:43", - "nodeType": "YulFunctionCall", - "src": "29343:18:43" - }, - { - "kind": "number", - "nativeSrc": "29363:6:43", - "nodeType": "YulLiteral", - "src": "29363:6:43", - "type": "", - "value": "0xffff" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "29339:3:43", - "nodeType": "YulIdentifier", - "src": "29339:3:43" - }, - "nativeSrc": "29339:31:43", - "nodeType": "YulFunctionCall", - "src": "29339:31:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "29315:6:43", - "nodeType": "YulIdentifier", - "src": "29315:6:43" - }, - "nativeSrc": "29315:56:43", - "nodeType": "YulFunctionCall", - "src": "29315:56:43" - }, - "nativeSrc": "29315:56:43", - "nodeType": "YulExpressionStatement", - "src": "29315:56:43" - }, - { - "nativeSrc": "29384:38:43", - "nodeType": "YulVariableDeclaration", - "src": "29384:38:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "_3", - "nativeSrc": "29414:2:43", - "nodeType": "YulIdentifier", - "src": "29414:2:43" - }, - { - "name": "_2", - "nativeSrc": "29418:2:43", - "nodeType": "YulIdentifier", - "src": "29418:2:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "29410:3:43", - "nodeType": "YulIdentifier", - "src": "29410:3:43" - }, - "nativeSrc": "29410:11:43", - "nodeType": "YulFunctionCall", - "src": "29410:11:43" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "29404:5:43", - "nodeType": "YulIdentifier", - "src": "29404:5:43" - }, - "nativeSrc": "29404:18:43", - "nodeType": "YulFunctionCall", - "src": "29404:18:43" - }, - "variables": [ - { - "name": "memberValue0", - "nativeSrc": "29388:12:43", - "nodeType": "YulTypedName", - "src": "29388:12:43", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "tail_2", - "nativeSrc": "29446:6:43", - "nodeType": "YulIdentifier", - "src": "29446:6:43" - }, - { - "name": "_2", - "nativeSrc": "29454:2:43", - "nodeType": "YulIdentifier", - "src": "29454:2:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "29442:3:43", - "nodeType": "YulIdentifier", - "src": "29442:3:43" - }, - "nativeSrc": "29442:15:43", - "nodeType": "YulFunctionCall", - "src": "29442:15:43" - }, - { - "name": "_4", - "nativeSrc": "29459:2:43", - "nodeType": "YulIdentifier", - "src": "29459:2:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "29435:6:43", - "nodeType": "YulIdentifier", - "src": "29435:6:43" - }, - "nativeSrc": "29435:27:43", - "nodeType": "YulFunctionCall", - "src": "29435:27:43" - }, - "nativeSrc": "29435:27:43", - "nodeType": "YulExpressionStatement", - "src": "29435:27:43" - }, - { - "nativeSrc": "29475:58:43", - "nodeType": "YulAssignment", - "src": "29475:58:43", - "value": { - "arguments": [ - { - "name": "memberValue0", - "nativeSrc": "29503:12:43", - "nodeType": "YulIdentifier", - "src": "29503:12:43" - }, - { - "arguments": [ - { - "name": "tail_2", - "nativeSrc": "29521:6:43", - "nodeType": "YulIdentifier", - "src": "29521:6:43" - }, - { - "name": "_4", - "nativeSrc": "29529:2:43", - "nodeType": "YulIdentifier", - "src": "29529:2:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "29517:3:43", - "nodeType": "YulIdentifier", - "src": "29517:3:43" - }, - "nativeSrc": "29517:15:43", - "nodeType": "YulFunctionCall", - "src": "29517:15:43" - } - ], - "functionName": { - "name": "abi_encode_string", - "nativeSrc": "29485:17:43", - "nodeType": "YulIdentifier", - "src": "29485:17:43" - }, - "nativeSrc": "29485:48:43", - "nodeType": "YulFunctionCall", - "src": "29485:48:43" - }, - "variableNames": [ - { - "name": "tail_2", - "nativeSrc": "29475:6:43", - "nodeType": "YulIdentifier", - "src": "29475:6:43" - } - ] - }, - { - "nativeSrc": "29546:25:43", - "nodeType": "YulAssignment", - "src": "29546:25:43", - "value": { - "arguments": [ - { - "name": "srcPtr", - "nativeSrc": "29560:6:43", - "nodeType": "YulIdentifier", - "src": "29560:6:43" - }, - { - "name": "_1", - "nativeSrc": "29568:2:43", - "nodeType": "YulIdentifier", - "src": "29568:2:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "29556:3:43", - "nodeType": "YulIdentifier", - "src": "29556:3:43" - }, - "nativeSrc": "29556:15:43", - "nodeType": "YulFunctionCall", - "src": "29556:15:43" - }, - "variableNames": [ - { - "name": "srcPtr", - "nativeSrc": "29546:6:43", - "nodeType": "YulIdentifier", - "src": "29546:6:43" - } - ] - }, - { - "nativeSrc": "29584:19:43", - "nodeType": "YulAssignment", - "src": "29584:19:43", - "value": { - "arguments": [ - { - "name": "pos", - "nativeSrc": "29595:3:43", - "nodeType": "YulIdentifier", - "src": "29595:3:43" - }, - { - "name": "_1", - "nativeSrc": "29600:2:43", - "nodeType": "YulIdentifier", - "src": "29600:2:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "29591:3:43", - "nodeType": "YulIdentifier", - "src": "29591:3:43" - }, - "nativeSrc": "29591:12:43", - "nodeType": "YulFunctionCall", - "src": "29591:12:43" - }, - "variableNames": [ - { - "name": "pos", - "nativeSrc": "29584:3:43", - "nodeType": "YulIdentifier", - "src": "29584:3:43" - } - ] - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nativeSrc": "29083:1:43", - "nodeType": "YulIdentifier", - "src": "29083:1:43" - }, - { - "name": "length", - "nativeSrc": "29086:6:43", - "nodeType": "YulIdentifier", - "src": "29086:6:43" - } - ], - "functionName": { - "name": "lt", - "nativeSrc": "29080:2:43", - "nodeType": "YulIdentifier", - "src": "29080:2:43" - }, - "nativeSrc": "29080:13:43", - "nodeType": "YulFunctionCall", - "src": "29080:13:43" - }, - "nativeSrc": "29072:541:43", - "nodeType": "YulForLoop", - "post": { - "nativeSrc": "29094:18:43", - "nodeType": "YulBlock", - "src": "29094:18:43", - "statements": [ - { - "nativeSrc": "29096:14:43", - "nodeType": "YulAssignment", - "src": "29096:14:43", - "value": { - "arguments": [ - { - "name": "i", - "nativeSrc": "29105:1:43", - "nodeType": "YulIdentifier", - "src": "29105:1:43" - }, - { - "kind": "number", - "nativeSrc": "29108:1:43", - "nodeType": "YulLiteral", - "src": "29108:1:43", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "29101:3:43", - "nodeType": "YulIdentifier", - "src": "29101:3:43" - }, - "nativeSrc": "29101:9:43", - "nodeType": "YulFunctionCall", - "src": "29101:9:43" - }, - "variableNames": [ - { - "name": "i", - "nativeSrc": "29096:1:43", - "nodeType": "YulIdentifier", - "src": "29096:1:43" - } - ] - } - ] - }, - "pre": { - "nativeSrc": "29076:3:43", - "nodeType": "YulBlock", - "src": "29076:3:43", - "statements": [] - }, - "src": "29072:541:43" - }, - { - "nativeSrc": "29622:14:43", - "nodeType": "YulAssignment", - "src": "29622:14:43", - "value": { - "name": "tail_2", - "nativeSrc": "29630:6:43", - "nodeType": "YulIdentifier", - "src": "29630:6:43" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "29622:4:43", - "nodeType": "YulIdentifier", - "src": "29622:4:43" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_array$_t_struct$_EnforcedOptionParam_$1932_memory_ptr_$dyn_memory_ptr__to_t_array$_t_struct$_EnforcedOptionParam_$1932_memory_ptr_$dyn_memory_ptr__fromStack_reversed", - "nativeSrc": "28478:1164:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "28672:9:43", - "nodeType": "YulTypedName", - "src": "28672:9:43", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "28683:6:43", - "nodeType": "YulTypedName", - "src": "28683:6:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "28694:4:43", - "nodeType": "YulTypedName", - "src": "28694:4:43", - "type": "" - } - ], - "src": "28478:1164:43" - }, - { - "body": { - "nativeSrc": "29745:248:43", - "nodeType": "YulBlock", - "src": "29745:248:43", - "statements": [ - { - "body": { - "nativeSrc": "29791:16:43", - "nodeType": "YulBlock", - "src": "29791:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "29800:1:43", - "nodeType": "YulLiteral", - "src": "29800:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "29803:1:43", - "nodeType": "YulLiteral", - "src": "29803:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "29793:6:43", - "nodeType": "YulIdentifier", - "src": "29793:6:43" - }, - "nativeSrc": "29793:12:43", - "nodeType": "YulFunctionCall", - "src": "29793:12:43" - }, - "nativeSrc": "29793:12:43", - "nodeType": "YulExpressionStatement", - "src": "29793:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nativeSrc": "29766:7:43", - "nodeType": "YulIdentifier", - "src": "29766:7:43" - }, - { - "name": "headStart", - "nativeSrc": "29775:9:43", - "nodeType": "YulIdentifier", - "src": "29775:9:43" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "29762:3:43", - "nodeType": "YulIdentifier", - "src": "29762:3:43" - }, - "nativeSrc": "29762:23:43", - "nodeType": "YulFunctionCall", - "src": "29762:23:43" - }, - { - "kind": "number", - "nativeSrc": "29787:2:43", - "nodeType": "YulLiteral", - "src": "29787:2:43", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "29758:3:43", - "nodeType": "YulIdentifier", - "src": "29758:3:43" - }, - "nativeSrc": "29758:32:43", - "nodeType": "YulFunctionCall", - "src": "29758:32:43" - }, - "nativeSrc": "29755:52:43", - "nodeType": "YulIf", - "src": "29755:52:43" - }, - { - "nativeSrc": "29816:35:43", - "nodeType": "YulVariableDeclaration", - "src": "29816:35:43", - "value": { - "arguments": [], - "functionName": { - "name": "allocate_memory_4160", - "nativeSrc": "29829:20:43", - "nodeType": "YulIdentifier", - "src": "29829:20:43" - }, - "nativeSrc": "29829:22:43", - "nodeType": "YulFunctionCall", - "src": "29829:22:43" - }, - "variables": [ - { - "name": "value", - "nativeSrc": "29820:5:43", - "nodeType": "YulTypedName", - "src": "29820:5:43", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nativeSrc": "29867:5:43", - "nodeType": "YulIdentifier", - "src": "29867:5:43" - }, - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "29887:9:43", - "nodeType": "YulIdentifier", - "src": "29887:9:43" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "29874:12:43", - "nodeType": "YulIdentifier", - "src": "29874:12:43" - }, - "nativeSrc": "29874:23:43", - "nodeType": "YulFunctionCall", - "src": "29874:23:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "29860:6:43", - "nodeType": "YulIdentifier", - "src": "29860:6:43" - }, - "nativeSrc": "29860:38:43", - "nodeType": "YulFunctionCall", - "src": "29860:38:43" - }, - "nativeSrc": "29860:38:43", - "nodeType": "YulExpressionStatement", - "src": "29860:38:43" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nativeSrc": "29918:5:43", - "nodeType": "YulIdentifier", - "src": "29918:5:43" - }, - { - "kind": "number", - "nativeSrc": "29925:2:43", - "nodeType": "YulLiteral", - "src": "29925:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "29914:3:43", - "nodeType": "YulIdentifier", - "src": "29914:3:43" - }, - "nativeSrc": "29914:14:43", - "nodeType": "YulFunctionCall", - "src": "29914:14:43" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "29947:9:43", - "nodeType": "YulIdentifier", - "src": "29947:9:43" - }, - { - "kind": "number", - "nativeSrc": "29958:2:43", - "nodeType": "YulLiteral", - "src": "29958:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "29943:3:43", - "nodeType": "YulIdentifier", - "src": "29943:3:43" - }, - "nativeSrc": "29943:18:43", - "nodeType": "YulFunctionCall", - "src": "29943:18:43" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "29930:12:43", - "nodeType": "YulIdentifier", - "src": "29930:12:43" - }, - "nativeSrc": "29930:32:43", - "nodeType": "YulFunctionCall", - "src": "29930:32:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "29907:6:43", - "nodeType": "YulIdentifier", - "src": "29907:6:43" - }, - "nativeSrc": "29907:56:43", - "nodeType": "YulFunctionCall", - "src": "29907:56:43" - }, - "nativeSrc": "29907:56:43", - "nodeType": "YulExpressionStatement", - "src": "29907:56:43" - }, - { - "nativeSrc": "29972:15:43", - "nodeType": "YulAssignment", - "src": "29972:15:43", - "value": { - "name": "value", - "nativeSrc": "29982:5:43", - "nodeType": "YulIdentifier", - "src": "29982:5:43" - }, - "variableNames": [ - { - "name": "value0", - "nativeSrc": "29972:6:43", - "nodeType": "YulIdentifier", - "src": "29972:6:43" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_struct$_MessagingFee_$33_memory_ptr", - "nativeSrc": "29647:346:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "29711:9:43", - "nodeType": "YulTypedName", - "src": "29711:9:43", - "type": "" - }, - { - "name": "dataEnd", - "nativeSrc": "29722:7:43", - "nodeType": "YulTypedName", - "src": "29722:7:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nativeSrc": "29734:6:43", - "nodeType": "YulTypedName", - "src": "29734:6:43", - "type": "" - } - ], - "src": "29647:346:43" - }, - { - "body": { - "nativeSrc": "30153:179:43", - "nodeType": "YulBlock", - "src": "30153:179:43", - "statements": [ - { - "nativeSrc": "30163:26:43", - "nodeType": "YulAssignment", - "src": "30163:26:43", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "30175:9:43", - "nodeType": "YulIdentifier", - "src": "30175:9:43" - }, - { - "kind": "number", - "nativeSrc": "30186:2:43", - "nodeType": "YulLiteral", - "src": "30186:2:43", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "30171:3:43", - "nodeType": "YulIdentifier", - "src": "30171:3:43" - }, - "nativeSrc": "30171:18:43", - "nodeType": "YulFunctionCall", - "src": "30171:18:43" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "30163:4:43", - "nodeType": "YulIdentifier", - "src": "30163:4:43" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "30205:9:43", - "nodeType": "YulIdentifier", - "src": "30205:9:43" - }, - { - "arguments": [ - { - "name": "value0", - "nativeSrc": "30220:6:43", - "nodeType": "YulIdentifier", - "src": "30220:6:43" - }, - { - "kind": "number", - "nativeSrc": "30228:10:43", - "nodeType": "YulLiteral", - "src": "30228:10:43", - "type": "", - "value": "0xffffffff" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "30216:3:43", - "nodeType": "YulIdentifier", - "src": "30216:3:43" - }, - "nativeSrc": "30216:23:43", - "nodeType": "YulFunctionCall", - "src": "30216:23:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "30198:6:43", - "nodeType": "YulIdentifier", - "src": "30198:6:43" - }, - "nativeSrc": "30198:42:43", - "nodeType": "YulFunctionCall", - "src": "30198:42:43" - }, - "nativeSrc": "30198:42:43", - "nodeType": "YulExpressionStatement", - "src": "30198:42:43" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "30260:9:43", - "nodeType": "YulIdentifier", - "src": "30260:9:43" - }, - { - "kind": "number", - "nativeSrc": "30271:2:43", - "nodeType": "YulLiteral", - "src": "30271:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "30256:3:43", - "nodeType": "YulIdentifier", - "src": "30256:3:43" - }, - "nativeSrc": "30256:18:43", - "nodeType": "YulFunctionCall", - "src": "30256:18:43" - }, - { - "name": "value1", - "nativeSrc": "30276:6:43", - "nodeType": "YulIdentifier", - "src": "30276:6:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "30249:6:43", - "nodeType": "YulIdentifier", - "src": "30249:6:43" - }, - "nativeSrc": "30249:34:43", - "nodeType": "YulFunctionCall", - "src": "30249:34:43" - }, - "nativeSrc": "30249:34:43", - "nodeType": "YulExpressionStatement", - "src": "30249:34:43" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "30303:9:43", - "nodeType": "YulIdentifier", - "src": "30303:9:43" - }, - { - "kind": "number", - "nativeSrc": "30314:2:43", - "nodeType": "YulLiteral", - "src": "30314:2:43", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "30299:3:43", - "nodeType": "YulIdentifier", - "src": "30299:3:43" - }, - "nativeSrc": "30299:18:43", - "nodeType": "YulFunctionCall", - "src": "30299:18:43" - }, - { - "name": "value2", - "nativeSrc": "30319:6:43", - "nodeType": "YulIdentifier", - "src": "30319:6:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "30292:6:43", - "nodeType": "YulIdentifier", - "src": "30292:6:43" - }, - "nativeSrc": "30292:34:43", - "nodeType": "YulFunctionCall", - "src": "30292:34:43" - }, - "nativeSrc": "30292:34:43", - "nodeType": "YulExpressionStatement", - "src": "30292:34:43" - } - ] - }, - "name": "abi_encode_tuple_t_uint32_t_uint256_t_uint256__to_t_uint32_t_uint256_t_uint256__fromStack_reversed", - "nativeSrc": "29998:334:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "30106:9:43", - "nodeType": "YulTypedName", - "src": "30106:9:43", - "type": "" - }, - { - "name": "value2", - "nativeSrc": "30117:6:43", - "nodeType": "YulTypedName", - "src": "30117:6:43", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "30125:6:43", - "nodeType": "YulTypedName", - "src": "30125:6:43", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "30133:6:43", - "nodeType": "YulTypedName", - "src": "30133:6:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "30144:4:43", - "nodeType": "YulTypedName", - "src": "30144:4:43", - "type": "" - } - ], - "src": "29998:334:43" - }, - { - "body": { - "nativeSrc": "30369:95:43", - "nodeType": "YulBlock", - "src": "30369:95:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "30386:1:43", - "nodeType": "YulLiteral", - "src": "30386:1:43", - "type": "", - "value": "0" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "30393:3:43", - "nodeType": "YulLiteral", - "src": "30393:3:43", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nativeSrc": "30398:10:43", - "nodeType": "YulLiteral", - "src": "30398:10:43", - "type": "", - "value": "0x4e487b71" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "30389:3:43", - "nodeType": "YulIdentifier", - "src": "30389:3:43" - }, - "nativeSrc": "30389:20:43", - "nodeType": "YulFunctionCall", - "src": "30389:20:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "30379:6:43", - "nodeType": "YulIdentifier", - "src": "30379:6:43" - }, - "nativeSrc": "30379:31:43", - "nodeType": "YulFunctionCall", - "src": "30379:31:43" - }, - "nativeSrc": "30379:31:43", - "nodeType": "YulExpressionStatement", - "src": "30379:31:43" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "30426:1:43", - "nodeType": "YulLiteral", - "src": "30426:1:43", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nativeSrc": "30429:4:43", - "nodeType": "YulLiteral", - "src": "30429:4:43", - "type": "", - "value": "0x11" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "30419:6:43", - "nodeType": "YulIdentifier", - "src": "30419:6:43" - }, - "nativeSrc": "30419:15:43", - "nodeType": "YulFunctionCall", - "src": "30419:15:43" - }, - "nativeSrc": "30419:15:43", - "nodeType": "YulExpressionStatement", - "src": "30419:15:43" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "30450:1:43", - "nodeType": "YulLiteral", - "src": "30450:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "30453:4:43", - "nodeType": "YulLiteral", - "src": "30453:4:43", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "30443:6:43", - "nodeType": "YulIdentifier", - "src": "30443:6:43" - }, - "nativeSrc": "30443:15:43", - "nodeType": "YulFunctionCall", - "src": "30443:15:43" - }, - "nativeSrc": "30443:15:43", - "nodeType": "YulExpressionStatement", - "src": "30443:15:43" - } - ] - }, - "name": "panic_error_0x11", - "nativeSrc": "30337:127:43", - "nodeType": "YulFunctionDefinition", - "src": "30337:127:43" - }, - { - "body": { - "nativeSrc": "30515:171:43", - "nodeType": "YulBlock", - "src": "30515:171:43", - "statements": [ - { - "body": { - "nativeSrc": "30546:111:43", - "nodeType": "YulBlock", - "src": "30546:111:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "30567:1:43", - "nodeType": "YulLiteral", - "src": "30567:1:43", - "type": "", - "value": "0" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "30574:3:43", - "nodeType": "YulLiteral", - "src": "30574:3:43", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nativeSrc": "30579:10:43", - "nodeType": "YulLiteral", - "src": "30579:10:43", - "type": "", - "value": "0x4e487b71" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "30570:3:43", - "nodeType": "YulIdentifier", - "src": "30570:3:43" - }, - "nativeSrc": "30570:20:43", - "nodeType": "YulFunctionCall", - "src": "30570:20:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "30560:6:43", - "nodeType": "YulIdentifier", - "src": "30560:6:43" - }, - "nativeSrc": "30560:31:43", - "nodeType": "YulFunctionCall", - "src": "30560:31:43" - }, - "nativeSrc": "30560:31:43", - "nodeType": "YulExpressionStatement", - "src": "30560:31:43" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "30611:1:43", - "nodeType": "YulLiteral", - "src": "30611:1:43", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nativeSrc": "30614:4:43", - "nodeType": "YulLiteral", - "src": "30614:4:43", - "type": "", - "value": "0x12" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "30604:6:43", - "nodeType": "YulIdentifier", - "src": "30604:6:43" - }, - "nativeSrc": "30604:15:43", - "nodeType": "YulFunctionCall", - "src": "30604:15:43" - }, - "nativeSrc": "30604:15:43", - "nodeType": "YulExpressionStatement", - "src": "30604:15:43" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "30639:1:43", - "nodeType": "YulLiteral", - "src": "30639:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "30642:4:43", - "nodeType": "YulLiteral", - "src": "30642:4:43", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "30632:6:43", - "nodeType": "YulIdentifier", - "src": "30632:6:43" - }, - "nativeSrc": "30632:15:43", - "nodeType": "YulFunctionCall", - "src": "30632:15:43" - }, - "nativeSrc": "30632:15:43", - "nodeType": "YulExpressionStatement", - "src": "30632:15:43" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "y", - "nativeSrc": "30535:1:43", - "nodeType": "YulIdentifier", - "src": "30535:1:43" - } - ], - "functionName": { - "name": "iszero", - "nativeSrc": "30528:6:43", - "nodeType": "YulIdentifier", - "src": "30528:6:43" - }, - "nativeSrc": "30528:9:43", - "nodeType": "YulFunctionCall", - "src": "30528:9:43" - }, - "nativeSrc": "30525:132:43", - "nodeType": "YulIf", - "src": "30525:132:43" - }, - { - "nativeSrc": "30666:14:43", - "nodeType": "YulAssignment", - "src": "30666:14:43", - "value": { - "arguments": [ - { - "name": "x", - "nativeSrc": "30675:1:43", - "nodeType": "YulIdentifier", - "src": "30675:1:43" - }, - { - "name": "y", - "nativeSrc": "30678:1:43", - "nodeType": "YulIdentifier", - "src": "30678:1:43" - } - ], - "functionName": { - "name": "div", - "nativeSrc": "30671:3:43", - "nodeType": "YulIdentifier", - "src": "30671:3:43" - }, - "nativeSrc": "30671:9:43", - "nodeType": "YulFunctionCall", - "src": "30671:9:43" - }, - "variableNames": [ - { - "name": "r", - "nativeSrc": "30666:1:43", - "nodeType": "YulIdentifier", - "src": "30666:1:43" - } - ] - } - ] - }, - "name": "checked_div_t_uint256", - "nativeSrc": "30469:217:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "x", - "nativeSrc": "30500:1:43", - "nodeType": "YulTypedName", - "src": "30500:1:43", - "type": "" - }, - { - "name": "y", - "nativeSrc": "30503:1:43", - "nodeType": "YulTypedName", - "src": "30503:1:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "r", - "nativeSrc": "30509:1:43", - "nodeType": "YulTypedName", - "src": "30509:1:43", - "type": "" - } - ], - "src": "30469:217:43" - }, - { - "body": { - "nativeSrc": "30743:116:43", - "nodeType": "YulBlock", - "src": "30743:116:43", - "statements": [ - { - "nativeSrc": "30753:20:43", - "nodeType": "YulAssignment", - "src": "30753:20:43", - "value": { - "arguments": [ - { - "name": "x", - "nativeSrc": "30768:1:43", - "nodeType": "YulIdentifier", - "src": "30768:1:43" - }, - { - "name": "y", - "nativeSrc": "30771:1:43", - "nodeType": "YulIdentifier", - "src": "30771:1:43" - } - ], - "functionName": { - "name": "mul", - "nativeSrc": "30764:3:43", - "nodeType": "YulIdentifier", - "src": "30764:3:43" - }, - "nativeSrc": "30764:9:43", - "nodeType": "YulFunctionCall", - "src": "30764:9:43" - }, - "variableNames": [ - { - "name": "product", - "nativeSrc": "30753:7:43", - "nodeType": "YulIdentifier", - "src": "30753:7:43" - } - ] - }, - { - "body": { - "nativeSrc": "30831:22:43", - "nodeType": "YulBlock", - "src": "30831:22:43", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x11", - "nativeSrc": "30833:16:43", - "nodeType": "YulIdentifier", - "src": "30833:16:43" - }, - "nativeSrc": "30833:18:43", - "nodeType": "YulFunctionCall", - "src": "30833:18:43" - }, - "nativeSrc": "30833:18:43", - "nodeType": "YulExpressionStatement", - "src": "30833:18:43" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "x", - "nativeSrc": "30802:1:43", - "nodeType": "YulIdentifier", - "src": "30802:1:43" - } - ], - "functionName": { - "name": "iszero", - "nativeSrc": "30795:6:43", - "nodeType": "YulIdentifier", - "src": "30795:6:43" - }, - "nativeSrc": "30795:9:43", - "nodeType": "YulFunctionCall", - "src": "30795:9:43" - }, - { - "arguments": [ - { - "name": "y", - "nativeSrc": "30809:1:43", - "nodeType": "YulIdentifier", - "src": "30809:1:43" - }, - { - "arguments": [ - { - "name": "product", - "nativeSrc": "30816:7:43", - "nodeType": "YulIdentifier", - "src": "30816:7:43" - }, - { - "name": "x", - "nativeSrc": "30825:1:43", - "nodeType": "YulIdentifier", - "src": "30825:1:43" - } - ], - "functionName": { - "name": "div", - "nativeSrc": "30812:3:43", - "nodeType": "YulIdentifier", - "src": "30812:3:43" - }, - "nativeSrc": "30812:15:43", - "nodeType": "YulFunctionCall", - "src": "30812:15:43" - } - ], - "functionName": { - "name": "eq", - "nativeSrc": "30806:2:43", - "nodeType": "YulIdentifier", - "src": "30806:2:43" - }, - "nativeSrc": "30806:22:43", - "nodeType": "YulFunctionCall", - "src": "30806:22:43" - } - ], - "functionName": { - "name": "or", - "nativeSrc": "30792:2:43", - "nodeType": "YulIdentifier", - "src": "30792:2:43" - }, - "nativeSrc": "30792:37:43", - "nodeType": "YulFunctionCall", - "src": "30792:37:43" - } - ], - "functionName": { - "name": "iszero", - "nativeSrc": "30785:6:43", - "nodeType": "YulIdentifier", - "src": "30785:6:43" - }, - "nativeSrc": "30785:45:43", - "nodeType": "YulFunctionCall", - "src": "30785:45:43" - }, - "nativeSrc": "30782:71:43", - "nodeType": "YulIf", - "src": "30782:71:43" - } - ] - }, - "name": "checked_mul_t_uint256", - "nativeSrc": "30691:168:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "x", - "nativeSrc": "30722:1:43", - "nodeType": "YulTypedName", - "src": "30722:1:43", - "type": "" - }, - { - "name": "y", - "nativeSrc": "30725:1:43", - "nodeType": "YulTypedName", - "src": "30725:1:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "product", - "nativeSrc": "30731:7:43", - "nodeType": "YulTypedName", - "src": "30731:7:43", - "type": "" - } - ], - "src": "30691:168:43" - }, - { - "body": { - "nativeSrc": "30965:154:43", - "nodeType": "YulBlock", - "src": "30965:154:43", - "statements": [ - { - "nativeSrc": "30975:28:43", - "nodeType": "YulAssignment", - "src": "30975:28:43", - "value": { - "arguments": [ - { - "name": "array", - "nativeSrc": "30997:5:43", - "nodeType": "YulIdentifier", - "src": "30997:5:43" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "30984:12:43", - "nodeType": "YulIdentifier", - "src": "30984:12:43" - }, - "nativeSrc": "30984:19:43", - "nodeType": "YulFunctionCall", - "src": "30984:19:43" - }, - "variableNames": [ - { - "name": "value", - "nativeSrc": "30975:5:43", - "nodeType": "YulIdentifier", - "src": "30975:5:43" - } - ] - }, - { - "body": { - "nativeSrc": "31035:78:43", - "nodeType": "YulBlock", - "src": "31035:78:43", - "statements": [ - { - "nativeSrc": "31049:54:43", - "nodeType": "YulAssignment", - "src": "31049:54:43", - "value": { - "arguments": [ - { - "name": "value", - "nativeSrc": "31062:5:43", - "nodeType": "YulIdentifier", - "src": "31062:5:43" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "31077:1:43", - "nodeType": "YulLiteral", - "src": "31077:1:43", - "type": "", - "value": "3" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "31084:2:43", - "nodeType": "YulLiteral", - "src": "31084:2:43", - "type": "", - "value": "32" - }, - { - "name": "len", - "nativeSrc": "31088:3:43", - "nodeType": "YulIdentifier", - "src": "31088:3:43" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "31080:3:43", - "nodeType": "YulIdentifier", - "src": "31080:3:43" - }, - "nativeSrc": "31080:12:43", - "nodeType": "YulFunctionCall", - "src": "31080:12:43" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "31073:3:43", - "nodeType": "YulIdentifier", - "src": "31073:3:43" - }, - "nativeSrc": "31073:20:43", - "nodeType": "YulFunctionCall", - "src": "31073:20:43" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "31099:1:43", - "nodeType": "YulLiteral", - "src": "31099:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "not", - "nativeSrc": "31095:3:43", - "nodeType": "YulIdentifier", - "src": "31095:3:43" - }, - "nativeSrc": "31095:6:43", - "nodeType": "YulFunctionCall", - "src": "31095:6:43" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "31069:3:43", - "nodeType": "YulIdentifier", - "src": "31069:3:43" - }, - "nativeSrc": "31069:33:43", - "nodeType": "YulFunctionCall", - "src": "31069:33:43" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "31058:3:43", - "nodeType": "YulIdentifier", - "src": "31058:3:43" - }, - "nativeSrc": "31058:45:43", - "nodeType": "YulFunctionCall", - "src": "31058:45:43" - }, - "variableNames": [ - { - "name": "value", - "nativeSrc": "31049:5:43", - "nodeType": "YulIdentifier", - "src": "31049:5:43" - } - ] - } - ] - }, - "condition": { - "arguments": [ - { - "name": "len", - "nativeSrc": "31018:3:43", - "nodeType": "YulIdentifier", - "src": "31018:3:43" - }, - { - "kind": "number", - "nativeSrc": "31023:2:43", - "nodeType": "YulLiteral", - "src": "31023:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "lt", - "nativeSrc": "31015:2:43", - "nodeType": "YulIdentifier", - "src": "31015:2:43" - }, - "nativeSrc": "31015:11:43", - "nodeType": "YulFunctionCall", - "src": "31015:11:43" - }, - "nativeSrc": "31012:101:43", - "nodeType": "YulIf", - "src": "31012:101:43" - } - ] - }, - "name": "convert_bytes_to_fixedbytes_from_t_bytes_calldata_ptr_to_t_bytes32", - "nativeSrc": "30864:255:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "array", - "nativeSrc": "30940:5:43", - "nodeType": "YulTypedName", - "src": "30940:5:43", - "type": "" - }, - { - "name": "len", - "nativeSrc": "30947:3:43", - "nodeType": "YulTypedName", - "src": "30947:3:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value", - "nativeSrc": "30955:5:43", - "nodeType": "YulTypedName", - "src": "30955:5:43", - "type": "" - } - ], - "src": "30864:255:43" - }, - { - "body": { - "nativeSrc": "31224:231:43", - "nodeType": "YulBlock", - "src": "31224:231:43", - "statements": [ - { - "nativeSrc": "31234:29:43", - "nodeType": "YulVariableDeclaration", - "src": "31234:29:43", - "value": { - "arguments": [ - { - "name": "array", - "nativeSrc": "31257:5:43", - "nodeType": "YulIdentifier", - "src": "31257:5:43" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "31244:12:43", - "nodeType": "YulIdentifier", - "src": "31244:12:43" - }, - "nativeSrc": "31244:19:43", - "nodeType": "YulFunctionCall", - "src": "31244:19:43" - }, - "variables": [ - { - "name": "_1", - "nativeSrc": "31238:2:43", - "nodeType": "YulTypedName", - "src": "31238:2:43", - "type": "" - } - ] - }, - { - "nativeSrc": "31272:38:43", - "nodeType": "YulVariableDeclaration", - "src": "31272:38:43", - "value": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "31286:3:43", - "nodeType": "YulLiteral", - "src": "31286:3:43", - "type": "", - "value": "192" - }, - { - "kind": "number", - "nativeSrc": "31291:18:43", - "nodeType": "YulLiteral", - "src": "31291:18:43", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "31282:3:43", - "nodeType": "YulIdentifier", - "src": "31282:3:43" - }, - "nativeSrc": "31282:28:43", - "nodeType": "YulFunctionCall", - "src": "31282:28:43" - }, - "variables": [ - { - "name": "_2", - "nativeSrc": "31276:2:43", - "nodeType": "YulTypedName", - "src": "31276:2:43", - "type": "" - } - ] - }, - { - "nativeSrc": "31319:20:43", - "nodeType": "YulAssignment", - "src": "31319:20:43", - "value": { - "arguments": [ - { - "name": "_1", - "nativeSrc": "31332:2:43", - "nodeType": "YulIdentifier", - "src": "31332:2:43" - }, - { - "name": "_2", - "nativeSrc": "31336:2:43", - "nodeType": "YulIdentifier", - "src": "31336:2:43" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "31328:3:43", - "nodeType": "YulIdentifier", - "src": "31328:3:43" - }, - "nativeSrc": "31328:11:43", - "nodeType": "YulFunctionCall", - "src": "31328:11:43" - }, - "variableNames": [ - { - "name": "value", - "nativeSrc": "31319:5:43", - "nodeType": "YulIdentifier", - "src": "31319:5:43" - } - ] - }, - { - "body": { - "nativeSrc": "31370:79:43", - "nodeType": "YulBlock", - "src": "31370:79:43", - "statements": [ - { - "nativeSrc": "31384:55:43", - "nodeType": "YulAssignment", - "src": "31384:55:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "_1", - "nativeSrc": "31401:2:43", - "nodeType": "YulIdentifier", - "src": "31401:2:43" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "31413:1:43", - "nodeType": "YulLiteral", - "src": "31413:1:43", - "type": "", - "value": "3" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "31420:1:43", - "nodeType": "YulLiteral", - "src": "31420:1:43", - "type": "", - "value": "8" - }, - { - "name": "len", - "nativeSrc": "31423:3:43", - "nodeType": "YulIdentifier", - "src": "31423:3:43" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "31416:3:43", - "nodeType": "YulIdentifier", - "src": "31416:3:43" - }, - "nativeSrc": "31416:11:43", - "nodeType": "YulFunctionCall", - "src": "31416:11:43" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "31409:3:43", - "nodeType": "YulIdentifier", - "src": "31409:3:43" - }, - "nativeSrc": "31409:19:43", - "nodeType": "YulFunctionCall", - "src": "31409:19:43" - }, - { - "name": "_2", - "nativeSrc": "31430:2:43", - "nodeType": "YulIdentifier", - "src": "31430:2:43" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "31405:3:43", - "nodeType": "YulIdentifier", - "src": "31405:3:43" - }, - "nativeSrc": "31405:28:43", - "nodeType": "YulFunctionCall", - "src": "31405:28:43" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "31397:3:43", - "nodeType": "YulIdentifier", - "src": "31397:3:43" - }, - "nativeSrc": "31397:37:43", - "nodeType": "YulFunctionCall", - "src": "31397:37:43" - }, - { - "name": "_2", - "nativeSrc": "31436:2:43", - "nodeType": "YulIdentifier", - "src": "31436:2:43" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "31393:3:43", - "nodeType": "YulIdentifier", - "src": "31393:3:43" - }, - "nativeSrc": "31393:46:43", - "nodeType": "YulFunctionCall", - "src": "31393:46:43" - }, - "variableNames": [ - { - "name": "value", - "nativeSrc": "31384:5:43", - "nodeType": "YulIdentifier", - "src": "31384:5:43" - } - ] - } - ] - }, - "condition": { - "arguments": [ - { - "name": "len", - "nativeSrc": "31354:3:43", - "nodeType": "YulIdentifier", - "src": "31354:3:43" - }, - { - "kind": "number", - "nativeSrc": "31359:1:43", - "nodeType": "YulLiteral", - "src": "31359:1:43", - "type": "", - "value": "8" - } - ], - "functionName": { - "name": "lt", - "nativeSrc": "31351:2:43", - "nodeType": "YulIdentifier", - "src": "31351:2:43" - }, - "nativeSrc": "31351:10:43", - "nodeType": "YulFunctionCall", - "src": "31351:10:43" - }, - "nativeSrc": "31348:101:43", - "nodeType": "YulIf", - "src": "31348:101:43" - } - ] - }, - "name": "convert_bytes_to_fixedbytes_from_t_bytes_calldata_ptr_to_t_bytes8", - "nativeSrc": "31124:331:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "array", - "nativeSrc": "31199:5:43", - "nodeType": "YulTypedName", - "src": "31199:5:43", - "type": "" - }, - { - "name": "len", - "nativeSrc": "31206:3:43", - "nodeType": "YulTypedName", - "src": "31206:3:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value", - "nativeSrc": "31214:5:43", - "nodeType": "YulTypedName", - "src": "31214:5:43", - "type": "" - } - ], - "src": "31124:331:43" - }, - { - "body": { - "nativeSrc": "31677:351:43", - "nodeType": "YulBlock", - "src": "31677:351:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "pos", - "nativeSrc": "31694:3:43", - "nodeType": "YulIdentifier", - "src": "31694:3:43" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "31707:3:43", - "nodeType": "YulLiteral", - "src": "31707:3:43", - "type": "", - "value": "192" - }, - { - "name": "value0", - "nativeSrc": "31712:6:43", - "nodeType": "YulIdentifier", - "src": "31712:6:43" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "31703:3:43", - "nodeType": "YulIdentifier", - "src": "31703:3:43" - }, - "nativeSrc": "31703:16:43", - "nodeType": "YulFunctionCall", - "src": "31703:16:43" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "31725:3:43", - "nodeType": "YulLiteral", - "src": "31725:3:43", - "type": "", - "value": "192" - }, - { - "kind": "number", - "nativeSrc": "31730:18:43", - "nodeType": "YulLiteral", - "src": "31730:18:43", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "31721:3:43", - "nodeType": "YulIdentifier", - "src": "31721:3:43" - }, - "nativeSrc": "31721:28:43", - "nodeType": "YulFunctionCall", - "src": "31721:28:43" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "31699:3:43", - "nodeType": "YulIdentifier", - "src": "31699:3:43" - }, - "nativeSrc": "31699:51:43", - "nodeType": "YulFunctionCall", - "src": "31699:51:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "31687:6:43", - "nodeType": "YulIdentifier", - "src": "31687:6:43" - }, - "nativeSrc": "31687:64:43", - "nodeType": "YulFunctionCall", - "src": "31687:64:43" - }, - "nativeSrc": "31687:64:43", - "nodeType": "YulExpressionStatement", - "src": "31687:64:43" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "pos", - "nativeSrc": "31771:3:43", - "nodeType": "YulIdentifier", - "src": "31771:3:43" - }, - { - "kind": "number", - "nativeSrc": "31776:1:43", - "nodeType": "YulLiteral", - "src": "31776:1:43", - "type": "", - "value": "8" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "31767:3:43", - "nodeType": "YulIdentifier", - "src": "31767:3:43" - }, - "nativeSrc": "31767:11:43", - "nodeType": "YulFunctionCall", - "src": "31767:11:43" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "31788:3:43", - "nodeType": "YulLiteral", - "src": "31788:3:43", - "type": "", - "value": "224" - }, - { - "name": "value1", - "nativeSrc": "31793:6:43", - "nodeType": "YulIdentifier", - "src": "31793:6:43" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "31784:3:43", - "nodeType": "YulIdentifier", - "src": "31784:3:43" - }, - "nativeSrc": "31784:16:43", - "nodeType": "YulFunctionCall", - "src": "31784:16:43" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "31806:3:43", - "nodeType": "YulLiteral", - "src": "31806:3:43", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nativeSrc": "31811:10:43", - "nodeType": "YulLiteral", - "src": "31811:10:43", - "type": "", - "value": "0xffffffff" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "31802:3:43", - "nodeType": "YulIdentifier", - "src": "31802:3:43" - }, - "nativeSrc": "31802:20:43", - "nodeType": "YulFunctionCall", - "src": "31802:20:43" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "31780:3:43", - "nodeType": "YulIdentifier", - "src": "31780:3:43" - }, - "nativeSrc": "31780:43:43", - "nodeType": "YulFunctionCall", - "src": "31780:43:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "31760:6:43", - "nodeType": "YulIdentifier", - "src": "31760:6:43" - }, - "nativeSrc": "31760:64:43", - "nodeType": "YulFunctionCall", - "src": "31760:64:43" - }, - "nativeSrc": "31760:64:43", - "nodeType": "YulExpressionStatement", - "src": "31760:64:43" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "pos", - "nativeSrc": "31844:3:43", - "nodeType": "YulIdentifier", - "src": "31844:3:43" - }, - { - "kind": "number", - "nativeSrc": "31849:2:43", - "nodeType": "YulLiteral", - "src": "31849:2:43", - "type": "", - "value": "12" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "31840:3:43", - "nodeType": "YulIdentifier", - "src": "31840:3:43" - }, - "nativeSrc": "31840:12:43", - "nodeType": "YulFunctionCall", - "src": "31840:12:43" - }, - { - "name": "value2", - "nativeSrc": "31854:6:43", - "nodeType": "YulIdentifier", - "src": "31854:6:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "31833:6:43", - "nodeType": "YulIdentifier", - "src": "31833:6:43" - }, - "nativeSrc": "31833:28:43", - "nodeType": "YulFunctionCall", - "src": "31833:28:43" - }, - "nativeSrc": "31833:28:43", - "nodeType": "YulExpressionStatement", - "src": "31833:28:43" - }, - { - "nativeSrc": "31870:27:43", - "nodeType": "YulVariableDeclaration", - "src": "31870:27:43", - "value": { - "arguments": [ - { - "name": "value3", - "nativeSrc": "31890:6:43", - "nodeType": "YulIdentifier", - "src": "31890:6:43" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "31884:5:43", - "nodeType": "YulIdentifier", - "src": "31884:5:43" - }, - "nativeSrc": "31884:13:43", - "nodeType": "YulFunctionCall", - "src": "31884:13:43" - }, - "variables": [ - { - "name": "length", - "nativeSrc": "31874:6:43", - "nodeType": "YulTypedName", - "src": "31874:6:43", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value3", - "nativeSrc": "31945:6:43", - "nodeType": "YulIdentifier", - "src": "31945:6:43" - }, - { - "kind": "number", - "nativeSrc": "31953:4:43", - "nodeType": "YulLiteral", - "src": "31953:4:43", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "31941:3:43", - "nodeType": "YulIdentifier", - "src": "31941:3:43" - }, - "nativeSrc": "31941:17:43", - "nodeType": "YulFunctionCall", - "src": "31941:17:43" - }, - { - "arguments": [ - { - "name": "pos", - "nativeSrc": "31964:3:43", - "nodeType": "YulIdentifier", - "src": "31964:3:43" - }, - { - "kind": "number", - "nativeSrc": "31969:2:43", - "nodeType": "YulLiteral", - "src": "31969:2:43", - "type": "", - "value": "44" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "31960:3:43", - "nodeType": "YulIdentifier", - "src": "31960:3:43" - }, - "nativeSrc": "31960:12:43", - "nodeType": "YulFunctionCall", - "src": "31960:12:43" - }, - { - "name": "length", - "nativeSrc": "31974:6:43", - "nodeType": "YulIdentifier", - "src": "31974:6:43" - } - ], - "functionName": { - "name": "copy_memory_to_memory_with_cleanup", - "nativeSrc": "31906:34:43", - "nodeType": "YulIdentifier", - "src": "31906:34:43" - }, - "nativeSrc": "31906:75:43", - "nodeType": "YulFunctionCall", - "src": "31906:75:43" - }, - "nativeSrc": "31906:75:43", - "nodeType": "YulExpressionStatement", - "src": "31906:75:43" - }, - { - "nativeSrc": "31990:32:43", - "nodeType": "YulAssignment", - "src": "31990:32:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "pos", - "nativeSrc": "32005:3:43", - "nodeType": "YulIdentifier", - "src": "32005:3:43" - }, - { - "name": "length", - "nativeSrc": "32010:6:43", - "nodeType": "YulIdentifier", - "src": "32010:6:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "32001:3:43", - "nodeType": "YulIdentifier", - "src": "32001:3:43" - }, - "nativeSrc": "32001:16:43", - "nodeType": "YulFunctionCall", - "src": "32001:16:43" - }, - { - "kind": "number", - "nativeSrc": "32019:2:43", - "nodeType": "YulLiteral", - "src": "32019:2:43", - "type": "", - "value": "44" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "31997:3:43", - "nodeType": "YulIdentifier", - "src": "31997:3:43" - }, - "nativeSrc": "31997:25:43", - "nodeType": "YulFunctionCall", - "src": "31997:25:43" - }, - "variableNames": [ - { - "name": "end", - "nativeSrc": "31990:3:43", - "nodeType": "YulIdentifier", - "src": "31990:3:43" - } - ] - } - ] - }, - "name": "abi_encode_tuple_packed_t_uint64_t_uint32_t_uint256_t_bytes_memory_ptr__to_t_uint64_t_uint32_t_uint256_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed", - "nativeSrc": "31460:568:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "pos", - "nativeSrc": "31629:3:43", - "nodeType": "YulTypedName", - "src": "31629:3:43", - "type": "" - }, - { - "name": "value3", - "nativeSrc": "31634:6:43", - "nodeType": "YulTypedName", - "src": "31634:6:43", - "type": "" - }, - { - "name": "value2", - "nativeSrc": "31642:6:43", - "nodeType": "YulTypedName", - "src": "31642:6:43", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "31650:6:43", - "nodeType": "YulTypedName", - "src": "31650:6:43", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "31658:6:43", - "nodeType": "YulTypedName", - "src": "31658:6:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "end", - "nativeSrc": "31669:3:43", - "nodeType": "YulTypedName", - "src": "31669:3:43", - "type": "" - } - ], - "src": "31460:568:43" - }, - { - "body": { - "nativeSrc": "32081:77:43", - "nodeType": "YulBlock", - "src": "32081:77:43", - "statements": [ - { - "nativeSrc": "32091:16:43", - "nodeType": "YulAssignment", - "src": "32091:16:43", - "value": { - "arguments": [ - { - "name": "x", - "nativeSrc": "32102:1:43", - "nodeType": "YulIdentifier", - "src": "32102:1:43" - }, - { - "name": "y", - "nativeSrc": "32105:1:43", - "nodeType": "YulIdentifier", - "src": "32105:1:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "32098:3:43", - "nodeType": "YulIdentifier", - "src": "32098:3:43" - }, - "nativeSrc": "32098:9:43", - "nodeType": "YulFunctionCall", - "src": "32098:9:43" - }, - "variableNames": [ - { - "name": "sum", - "nativeSrc": "32091:3:43", - "nodeType": "YulIdentifier", - "src": "32091:3:43" - } - ] - }, - { - "body": { - "nativeSrc": "32130:22:43", - "nodeType": "YulBlock", - "src": "32130:22:43", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x11", - "nativeSrc": "32132:16:43", - "nodeType": "YulIdentifier", - "src": "32132:16:43" - }, - "nativeSrc": "32132:18:43", - "nodeType": "YulFunctionCall", - "src": "32132:18:43" - }, - "nativeSrc": "32132:18:43", - "nodeType": "YulExpressionStatement", - "src": "32132:18:43" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "x", - "nativeSrc": "32122:1:43", - "nodeType": "YulIdentifier", - "src": "32122:1:43" - }, - { - "name": "sum", - "nativeSrc": "32125:3:43", - "nodeType": "YulIdentifier", - "src": "32125:3:43" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "32119:2:43", - "nodeType": "YulIdentifier", - "src": "32119:2:43" - }, - "nativeSrc": "32119:10:43", - "nodeType": "YulFunctionCall", - "src": "32119:10:43" - }, - "nativeSrc": "32116:36:43", - "nodeType": "YulIf", - "src": "32116:36:43" - } - ] - }, - "name": "checked_add_t_uint256", - "nativeSrc": "32033:125:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "x", - "nativeSrc": "32064:1:43", - "nodeType": "YulTypedName", - "src": "32064:1:43", - "type": "" - }, - { - "name": "y", - "nativeSrc": "32067:1:43", - "nodeType": "YulTypedName", - "src": "32067:1:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "sum", - "nativeSrc": "32073:3:43", - "nodeType": "YulTypedName", - "src": "32073:3:43", - "type": "" - } - ], - "src": "32033:125:43" - }, - { - "body": { - "nativeSrc": "32308:145:43", - "nodeType": "YulBlock", - "src": "32308:145:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "pos", - "nativeSrc": "32325:3:43", - "nodeType": "YulIdentifier", - "src": "32325:3:43" - }, - { - "name": "value0", - "nativeSrc": "32330:6:43", - "nodeType": "YulIdentifier", - "src": "32330:6:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "32318:6:43", - "nodeType": "YulIdentifier", - "src": "32318:6:43" - }, - "nativeSrc": "32318:19:43", - "nodeType": "YulFunctionCall", - "src": "32318:19:43" - }, - "nativeSrc": "32318:19:43", - "nodeType": "YulExpressionStatement", - "src": "32318:19:43" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "pos", - "nativeSrc": "32357:3:43", - "nodeType": "YulIdentifier", - "src": "32357:3:43" - }, - { - "kind": "number", - "nativeSrc": "32362:2:43", - "nodeType": "YulLiteral", - "src": "32362:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "32353:3:43", - "nodeType": "YulIdentifier", - "src": "32353:3:43" - }, - "nativeSrc": "32353:12:43", - "nodeType": "YulFunctionCall", - "src": "32353:12:43" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "32375:3:43", - "nodeType": "YulLiteral", - "src": "32375:3:43", - "type": "", - "value": "192" - }, - { - "name": "value1", - "nativeSrc": "32380:6:43", - "nodeType": "YulIdentifier", - "src": "32380:6:43" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "32371:3:43", - "nodeType": "YulIdentifier", - "src": "32371:3:43" - }, - "nativeSrc": "32371:16:43", - "nodeType": "YulFunctionCall", - "src": "32371:16:43" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "32393:3:43", - "nodeType": "YulLiteral", - "src": "32393:3:43", - "type": "", - "value": "192" - }, - { - "kind": "number", - "nativeSrc": "32398:18:43", - "nodeType": "YulLiteral", - "src": "32398:18:43", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "32389:3:43", - "nodeType": "YulIdentifier", - "src": "32389:3:43" - }, - "nativeSrc": "32389:28:43", - "nodeType": "YulFunctionCall", - "src": "32389:28:43" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "32367:3:43", - "nodeType": "YulIdentifier", - "src": "32367:3:43" - }, - "nativeSrc": "32367:51:43", - "nodeType": "YulFunctionCall", - "src": "32367:51:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "32346:6:43", - "nodeType": "YulIdentifier", - "src": "32346:6:43" - }, - "nativeSrc": "32346:73:43", - "nodeType": "YulFunctionCall", - "src": "32346:73:43" - }, - "nativeSrc": "32346:73:43", - "nodeType": "YulExpressionStatement", - "src": "32346:73:43" - }, - { - "nativeSrc": "32428:19:43", - "nodeType": "YulAssignment", - "src": "32428:19:43", - "value": { - "arguments": [ - { - "name": "pos", - "nativeSrc": "32439:3:43", - "nodeType": "YulIdentifier", - "src": "32439:3:43" - }, - { - "kind": "number", - "nativeSrc": "32444:2:43", - "nodeType": "YulLiteral", - "src": "32444:2:43", - "type": "", - "value": "40" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "32435:3:43", - "nodeType": "YulIdentifier", - "src": "32435:3:43" - }, - "nativeSrc": "32435:12:43", - "nodeType": "YulFunctionCall", - "src": "32435:12:43" - }, - "variableNames": [ - { - "name": "end", - "nativeSrc": "32428:3:43", - "nodeType": "YulIdentifier", - "src": "32428:3:43" - } - ] - } - ] - }, - "name": "abi_encode_tuple_packed_t_bytes32_t_uint64__to_t_bytes32_t_uint64__nonPadded_inplace_fromStack_reversed", - "nativeSrc": "32163:290:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "pos", - "nativeSrc": "32276:3:43", - "nodeType": "YulTypedName", - "src": "32276:3:43", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "32281:6:43", - "nodeType": "YulTypedName", - "src": "32281:6:43", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "32289:6:43", - "nodeType": "YulTypedName", - "src": "32289:6:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "end", - "nativeSrc": "32300:3:43", - "nodeType": "YulTypedName", - "src": "32300:3:43", - "type": "" - } - ], - "src": "32163:290:43" - }, - { - "body": { - "nativeSrc": "32677:313:43", - "nodeType": "YulBlock", - "src": "32677:313:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "pos", - "nativeSrc": "32694:3:43", - "nodeType": "YulIdentifier", - "src": "32694:3:43" - }, - { - "name": "value0", - "nativeSrc": "32699:6:43", - "nodeType": "YulIdentifier", - "src": "32699:6:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "32687:6:43", - "nodeType": "YulIdentifier", - "src": "32687:6:43" - }, - "nativeSrc": "32687:19:43", - "nodeType": "YulFunctionCall", - "src": "32687:19:43" - }, - "nativeSrc": "32687:19:43", - "nodeType": "YulExpressionStatement", - "src": "32687:19:43" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "pos", - "nativeSrc": "32726:3:43", - "nodeType": "YulIdentifier", - "src": "32726:3:43" - }, - { - "kind": "number", - "nativeSrc": "32731:2:43", - "nodeType": "YulLiteral", - "src": "32731:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "32722:3:43", - "nodeType": "YulIdentifier", - "src": "32722:3:43" - }, - "nativeSrc": "32722:12:43", - "nodeType": "YulFunctionCall", - "src": "32722:12:43" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "32744:3:43", - "nodeType": "YulLiteral", - "src": "32744:3:43", - "type": "", - "value": "192" - }, - { - "name": "value1", - "nativeSrc": "32749:6:43", - "nodeType": "YulIdentifier", - "src": "32749:6:43" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "32740:3:43", - "nodeType": "YulIdentifier", - "src": "32740:3:43" - }, - "nativeSrc": "32740:16:43", - "nodeType": "YulFunctionCall", - "src": "32740:16:43" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "32762:3:43", - "nodeType": "YulLiteral", - "src": "32762:3:43", - "type": "", - "value": "192" - }, - { - "kind": "number", - "nativeSrc": "32767:18:43", - "nodeType": "YulLiteral", - "src": "32767:18:43", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "32758:3:43", - "nodeType": "YulIdentifier", - "src": "32758:3:43" - }, - "nativeSrc": "32758:28:43", - "nodeType": "YulFunctionCall", - "src": "32758:28:43" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "32736:3:43", - "nodeType": "YulIdentifier", - "src": "32736:3:43" - }, - "nativeSrc": "32736:51:43", - "nodeType": "YulFunctionCall", - "src": "32736:51:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "32715:6:43", - "nodeType": "YulIdentifier", - "src": "32715:6:43" - }, - "nativeSrc": "32715:73:43", - "nodeType": "YulFunctionCall", - "src": "32715:73:43" - }, - "nativeSrc": "32715:73:43", - "nodeType": "YulExpressionStatement", - "src": "32715:73:43" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "pos", - "nativeSrc": "32808:3:43", - "nodeType": "YulIdentifier", - "src": "32808:3:43" - }, - { - "kind": "number", - "nativeSrc": "32813:2:43", - "nodeType": "YulLiteral", - "src": "32813:2:43", - "type": "", - "value": "40" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "32804:3:43", - "nodeType": "YulIdentifier", - "src": "32804:3:43" - }, - "nativeSrc": "32804:12:43", - "nodeType": "YulFunctionCall", - "src": "32804:12:43" - }, - { - "name": "value2", - "nativeSrc": "32818:6:43", - "nodeType": "YulIdentifier", - "src": "32818:6:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "32797:6:43", - "nodeType": "YulIdentifier", - "src": "32797:6:43" - }, - "nativeSrc": "32797:28:43", - "nodeType": "YulFunctionCall", - "src": "32797:28:43" - }, - "nativeSrc": "32797:28:43", - "nodeType": "YulExpressionStatement", - "src": "32797:28:43" - }, - { - "nativeSrc": "32834:27:43", - "nodeType": "YulVariableDeclaration", - "src": "32834:27:43", - "value": { - "arguments": [ - { - "name": "value3", - "nativeSrc": "32854:6:43", - "nodeType": "YulIdentifier", - "src": "32854:6:43" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "32848:5:43", - "nodeType": "YulIdentifier", - "src": "32848:5:43" - }, - "nativeSrc": "32848:13:43", - "nodeType": "YulFunctionCall", - "src": "32848:13:43" - }, - "variables": [ - { - "name": "length", - "nativeSrc": "32838:6:43", - "nodeType": "YulTypedName", - "src": "32838:6:43", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value3", - "nativeSrc": "32909:6:43", - "nodeType": "YulIdentifier", - "src": "32909:6:43" - }, - { - "kind": "number", - "nativeSrc": "32917:2:43", - "nodeType": "YulLiteral", - "src": "32917:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "32905:3:43", - "nodeType": "YulIdentifier", - "src": "32905:3:43" - }, - "nativeSrc": "32905:15:43", - "nodeType": "YulFunctionCall", - "src": "32905:15:43" - }, - { - "arguments": [ - { - "name": "pos", - "nativeSrc": "32926:3:43", - "nodeType": "YulIdentifier", - "src": "32926:3:43" - }, - { - "kind": "number", - "nativeSrc": "32931:2:43", - "nodeType": "YulLiteral", - "src": "32931:2:43", - "type": "", - "value": "72" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "32922:3:43", - "nodeType": "YulIdentifier", - "src": "32922:3:43" - }, - "nativeSrc": "32922:12:43", - "nodeType": "YulFunctionCall", - "src": "32922:12:43" - }, - { - "name": "length", - "nativeSrc": "32936:6:43", - "nodeType": "YulIdentifier", - "src": "32936:6:43" - } - ], - "functionName": { - "name": "copy_memory_to_memory_with_cleanup", - "nativeSrc": "32870:34:43", - "nodeType": "YulIdentifier", - "src": "32870:34:43" - }, - "nativeSrc": "32870:73:43", - "nodeType": "YulFunctionCall", - "src": "32870:73:43" - }, - "nativeSrc": "32870:73:43", - "nodeType": "YulExpressionStatement", - "src": "32870:73:43" - }, - { - "nativeSrc": "32952:32:43", - "nodeType": "YulAssignment", - "src": "32952:32:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "pos", - "nativeSrc": "32967:3:43", - "nodeType": "YulIdentifier", - "src": "32967:3:43" - }, - { - "name": "length", - "nativeSrc": "32972:6:43", - "nodeType": "YulIdentifier", - "src": "32972:6:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "32963:3:43", - "nodeType": "YulIdentifier", - "src": "32963:3:43" - }, - "nativeSrc": "32963:16:43", - "nodeType": "YulFunctionCall", - "src": "32963:16:43" - }, - { - "kind": "number", - "nativeSrc": "32981:2:43", - "nodeType": "YulLiteral", - "src": "32981:2:43", - "type": "", - "value": "72" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "32959:3:43", - "nodeType": "YulIdentifier", - "src": "32959:3:43" - }, - "nativeSrc": "32959:25:43", - "nodeType": "YulFunctionCall", - "src": "32959:25:43" - }, - "variableNames": [ - { - "name": "end", - "nativeSrc": "32952:3:43", - "nodeType": "YulIdentifier", - "src": "32952:3:43" - } - ] - } - ] - }, - "name": "abi_encode_tuple_packed_t_bytes32_t_uint64_t_bytes32_t_bytes_memory_ptr__to_t_bytes32_t_uint64_t_bytes32_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed", - "nativeSrc": "32458:532:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "pos", - "nativeSrc": "32629:3:43", - "nodeType": "YulTypedName", - "src": "32629:3:43", - "type": "" - }, - { - "name": "value3", - "nativeSrc": "32634:6:43", - "nodeType": "YulTypedName", - "src": "32634:6:43", - "type": "" - }, - { - "name": "value2", - "nativeSrc": "32642:6:43", - "nodeType": "YulTypedName", - "src": "32642:6:43", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "32650:6:43", - "nodeType": "YulTypedName", - "src": "32650:6:43", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "32658:6:43", - "nodeType": "YulTypedName", - "src": "32658:6:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "end", - "nativeSrc": "32669:3:43", - "nodeType": "YulTypedName", - "src": "32669:3:43", - "type": "" - } - ], - "src": "32458:532:43" - }, - { - "body": { - "nativeSrc": "33108:410:43", - "nodeType": "YulBlock", - "src": "33108:410:43", - "statements": [ - { - "body": { - "nativeSrc": "33155:16:43", - "nodeType": "YulBlock", - "src": "33155:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "33164:1:43", - "nodeType": "YulLiteral", - "src": "33164:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "33167:1:43", - "nodeType": "YulLiteral", - "src": "33167:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "33157:6:43", - "nodeType": "YulIdentifier", - "src": "33157:6:43" - }, - "nativeSrc": "33157:12:43", - "nodeType": "YulFunctionCall", - "src": "33157:12:43" - }, - "nativeSrc": "33157:12:43", - "nodeType": "YulExpressionStatement", - "src": "33157:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nativeSrc": "33129:7:43", - "nodeType": "YulIdentifier", - "src": "33129:7:43" - }, - { - "name": "headStart", - "nativeSrc": "33138:9:43", - "nodeType": "YulIdentifier", - "src": "33138:9:43" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "33125:3:43", - "nodeType": "YulIdentifier", - "src": "33125:3:43" - }, - "nativeSrc": "33125:23:43", - "nodeType": "YulFunctionCall", - "src": "33125:23:43" - }, - { - "kind": "number", - "nativeSrc": "33150:3:43", - "nodeType": "YulLiteral", - "src": "33150:3:43", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "33121:3:43", - "nodeType": "YulIdentifier", - "src": "33121:3:43" - }, - "nativeSrc": "33121:33:43", - "nodeType": "YulFunctionCall", - "src": "33121:33:43" - }, - "nativeSrc": "33118:53:43", - "nodeType": "YulIf", - "src": "33118:53:43" - }, - { - "nativeSrc": "33180:35:43", - "nodeType": "YulVariableDeclaration", - "src": "33180:35:43", - "value": { - "arguments": [], - "functionName": { - "name": "allocate_memory_4159", - "nativeSrc": "33193:20:43", - "nodeType": "YulIdentifier", - "src": "33193:20:43" - }, - "nativeSrc": "33193:22:43", - "nodeType": "YulFunctionCall", - "src": "33193:22:43" - }, - "variables": [ - { - "name": "value", - "nativeSrc": "33184:5:43", - "nodeType": "YulTypedName", - "src": "33184:5:43", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nativeSrc": "33231:5:43", - "nodeType": "YulIdentifier", - "src": "33231:5:43" - }, - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "33244:9:43", - "nodeType": "YulIdentifier", - "src": "33244:9:43" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "33238:5:43", - "nodeType": "YulIdentifier", - "src": "33238:5:43" - }, - "nativeSrc": "33238:16:43", - "nodeType": "YulFunctionCall", - "src": "33238:16:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "33224:6:43", - "nodeType": "YulIdentifier", - "src": "33224:6:43" - }, - "nativeSrc": "33224:31:43", - "nodeType": "YulFunctionCall", - "src": "33224:31:43" - }, - "nativeSrc": "33224:31:43", - "nodeType": "YulExpressionStatement", - "src": "33224:31:43" - }, - { - "nativeSrc": "33264:40:43", - "nodeType": "YulVariableDeclaration", - "src": "33264:40:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "33289:9:43", - "nodeType": "YulIdentifier", - "src": "33289:9:43" - }, - { - "kind": "number", - "nativeSrc": "33300:2:43", - "nodeType": "YulLiteral", - "src": "33300:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "33285:3:43", - "nodeType": "YulIdentifier", - "src": "33285:3:43" - }, - "nativeSrc": "33285:18:43", - "nodeType": "YulFunctionCall", - "src": "33285:18:43" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "33279:5:43", - "nodeType": "YulIdentifier", - "src": "33279:5:43" - }, - "nativeSrc": "33279:25:43", - "nodeType": "YulFunctionCall", - "src": "33279:25:43" - }, - "variables": [ - { - "name": "value_1", - "nativeSrc": "33268:7:43", - "nodeType": "YulTypedName", - "src": "33268:7:43", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value_1", - "nativeSrc": "33337:7:43", - "nodeType": "YulIdentifier", - "src": "33337:7:43" - } - ], - "functionName": { - "name": "validator_revert_uint64", - "nativeSrc": "33313:23:43", - "nodeType": "YulIdentifier", - "src": "33313:23:43" - }, - "nativeSrc": "33313:32:43", - "nodeType": "YulFunctionCall", - "src": "33313:32:43" - }, - "nativeSrc": "33313:32:43", - "nodeType": "YulExpressionStatement", - "src": "33313:32:43" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nativeSrc": "33365:5:43", - "nodeType": "YulIdentifier", - "src": "33365:5:43" - }, - { - "kind": "number", - "nativeSrc": "33372:2:43", - "nodeType": "YulLiteral", - "src": "33372:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "33361:3:43", - "nodeType": "YulIdentifier", - "src": "33361:3:43" - }, - "nativeSrc": "33361:14:43", - "nodeType": "YulFunctionCall", - "src": "33361:14:43" - }, - { - "name": "value_1", - "nativeSrc": "33377:7:43", - "nodeType": "YulIdentifier", - "src": "33377:7:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "33354:6:43", - "nodeType": "YulIdentifier", - "src": "33354:6:43" - }, - "nativeSrc": "33354:31:43", - "nodeType": "YulFunctionCall", - "src": "33354:31:43" - }, - "nativeSrc": "33354:31:43", - "nodeType": "YulExpressionStatement", - "src": "33354:31:43" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nativeSrc": "33405:5:43", - "nodeType": "YulIdentifier", - "src": "33405:5:43" - }, - { - "kind": "number", - "nativeSrc": "33412:2:43", - "nodeType": "YulLiteral", - "src": "33412:2:43", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "33401:3:43", - "nodeType": "YulIdentifier", - "src": "33401:3:43" - }, - "nativeSrc": "33401:14:43", - "nodeType": "YulFunctionCall", - "src": "33401:14:43" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "33463:9:43", - "nodeType": "YulIdentifier", - "src": "33463:9:43" - }, - { - "kind": "number", - "nativeSrc": "33474:2:43", - "nodeType": "YulLiteral", - "src": "33474:2:43", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "33459:3:43", - "nodeType": "YulIdentifier", - "src": "33459:3:43" - }, - "nativeSrc": "33459:18:43", - "nodeType": "YulFunctionCall", - "src": "33459:18:43" - }, - { - "name": "dataEnd", - "nativeSrc": "33479:7:43", - "nodeType": "YulIdentifier", - "src": "33479:7:43" - } - ], - "functionName": { - "name": "abi_decode_struct_MessagingFee_fromMemory", - "nativeSrc": "33417:41:43", - "nodeType": "YulIdentifier", - "src": "33417:41:43" - }, - "nativeSrc": "33417:70:43", - "nodeType": "YulFunctionCall", - "src": "33417:70:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "33394:6:43", - "nodeType": "YulIdentifier", - "src": "33394:6:43" - }, - "nativeSrc": "33394:94:43", - "nodeType": "YulFunctionCall", - "src": "33394:94:43" - }, - "nativeSrc": "33394:94:43", - "nodeType": "YulExpressionStatement", - "src": "33394:94:43" - }, - { - "nativeSrc": "33497:15:43", - "nodeType": "YulAssignment", - "src": "33497:15:43", - "value": { - "name": "value", - "nativeSrc": "33507:5:43", - "nodeType": "YulIdentifier", - "src": "33507:5:43" - }, - "variableNames": [ - { - "name": "value0", - "nativeSrc": "33497:6:43", - "nodeType": "YulIdentifier", - "src": "33497:6:43" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_struct$_MessagingReceipt_$28_memory_ptr_fromMemory", - "nativeSrc": "32995:523:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "33074:9:43", - "nodeType": "YulTypedName", - "src": "33074:9:43", - "type": "" - }, - { - "name": "dataEnd", - "nativeSrc": "33085:7:43", - "nodeType": "YulTypedName", - "src": "33085:7:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nativeSrc": "33097:6:43", - "nodeType": "YulTypedName", - "src": "33097:6:43", - "type": "" - } - ], - "src": "32995:523:43" - }, - { - "body": { - "nativeSrc": "33604:170:43", - "nodeType": "YulBlock", - "src": "33604:170:43", - "statements": [ - { - "body": { - "nativeSrc": "33650:16:43", - "nodeType": "YulBlock", - "src": "33650:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "33659:1:43", - "nodeType": "YulLiteral", - "src": "33659:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "33662:1:43", - "nodeType": "YulLiteral", - "src": "33662:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "33652:6:43", - "nodeType": "YulIdentifier", - "src": "33652:6:43" - }, - "nativeSrc": "33652:12:43", - "nodeType": "YulFunctionCall", - "src": "33652:12:43" - }, - "nativeSrc": "33652:12:43", - "nodeType": "YulExpressionStatement", - "src": "33652:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nativeSrc": "33625:7:43", - "nodeType": "YulIdentifier", - "src": "33625:7:43" - }, - { - "name": "headStart", - "nativeSrc": "33634:9:43", - "nodeType": "YulIdentifier", - "src": "33634:9:43" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "33621:3:43", - "nodeType": "YulIdentifier", - "src": "33621:3:43" - }, - "nativeSrc": "33621:23:43", - "nodeType": "YulFunctionCall", - "src": "33621:23:43" - }, - { - "kind": "number", - "nativeSrc": "33646:2:43", - "nodeType": "YulLiteral", - "src": "33646:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "33617:3:43", - "nodeType": "YulIdentifier", - "src": "33617:3:43" - }, - "nativeSrc": "33617:32:43", - "nodeType": "YulFunctionCall", - "src": "33617:32:43" - }, - "nativeSrc": "33614:52:43", - "nodeType": "YulIf", - "src": "33614:52:43" - }, - { - "nativeSrc": "33675:29:43", - "nodeType": "YulVariableDeclaration", - "src": "33675:29:43", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "33694:9:43", - "nodeType": "YulIdentifier", - "src": "33694:9:43" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "33688:5:43", - "nodeType": "YulIdentifier", - "src": "33688:5:43" - }, - "nativeSrc": "33688:16:43", - "nodeType": "YulFunctionCall", - "src": "33688:16:43" - }, - "variables": [ - { - "name": "value", - "nativeSrc": "33679:5:43", - "nodeType": "YulTypedName", - "src": "33679:5:43", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nativeSrc": "33738:5:43", - "nodeType": "YulIdentifier", - "src": "33738:5:43" - } - ], - "functionName": { - "name": "validator_revert_address", - "nativeSrc": "33713:24:43", - "nodeType": "YulIdentifier", - "src": "33713:24:43" - }, - "nativeSrc": "33713:31:43", - "nodeType": "YulFunctionCall", - "src": "33713:31:43" - }, - "nativeSrc": "33713:31:43", - "nodeType": "YulExpressionStatement", - "src": "33713:31:43" - }, - { - "nativeSrc": "33753:15:43", - "nodeType": "YulAssignment", - "src": "33753:15:43", - "value": { - "name": "value", - "nativeSrc": "33763:5:43", - "nodeType": "YulIdentifier", - "src": "33763:5:43" - }, - "variableNames": [ - { - "name": "value0", - "nativeSrc": "33753:6:43", - "nodeType": "YulIdentifier", - "src": "33753:6:43" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_address_fromMemory", - "nativeSrc": "33523:251:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "33570:9:43", - "nodeType": "YulTypedName", - "src": "33570:9:43", - "type": "" - }, - { - "name": "dataEnd", - "nativeSrc": "33581:7:43", - "nodeType": "YulTypedName", - "src": "33581:7:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nativeSrc": "33593:6:43", - "nodeType": "YulTypedName", - "src": "33593:6:43", - "type": "" - } - ], - "src": "33523:251:43" - }, - { - "body": { - "nativeSrc": "33936:218:43", - "nodeType": "YulBlock", - "src": "33936:218:43", - "statements": [ - { - "nativeSrc": "33946:26:43", - "nodeType": "YulAssignment", - "src": "33946:26:43", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "33958:9:43", - "nodeType": "YulIdentifier", - "src": "33958:9:43" - }, - { - "kind": "number", - "nativeSrc": "33969:2:43", - "nodeType": "YulLiteral", - "src": "33969:2:43", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "33954:3:43", - "nodeType": "YulIdentifier", - "src": "33954:3:43" - }, - "nativeSrc": "33954:18:43", - "nodeType": "YulFunctionCall", - "src": "33954:18:43" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "33946:4:43", - "nodeType": "YulIdentifier", - "src": "33946:4:43" - } - ] - }, - { - "nativeSrc": "33981:29:43", - "nodeType": "YulVariableDeclaration", - "src": "33981:29:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "33999:3:43", - "nodeType": "YulLiteral", - "src": "33999:3:43", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nativeSrc": "34004:1:43", - "nodeType": "YulLiteral", - "src": "34004:1:43", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "33995:3:43", - "nodeType": "YulIdentifier", - "src": "33995:3:43" - }, - "nativeSrc": "33995:11:43", - "nodeType": "YulFunctionCall", - "src": "33995:11:43" - }, - { - "kind": "number", - "nativeSrc": "34008:1:43", - "nodeType": "YulLiteral", - "src": "34008:1:43", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "33991:3:43", - "nodeType": "YulIdentifier", - "src": "33991:3:43" - }, - "nativeSrc": "33991:19:43", - "nodeType": "YulFunctionCall", - "src": "33991:19:43" - }, - "variables": [ - { - "name": "_1", - "nativeSrc": "33985:2:43", - "nodeType": "YulTypedName", - "src": "33985:2:43", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "34026:9:43", - "nodeType": "YulIdentifier", - "src": "34026:9:43" - }, - { - "arguments": [ - { - "name": "value0", - "nativeSrc": "34041:6:43", - "nodeType": "YulIdentifier", - "src": "34041:6:43" - }, - { - "name": "_1", - "nativeSrc": "34049:2:43", - "nodeType": "YulIdentifier", - "src": "34049:2:43" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "34037:3:43", - "nodeType": "YulIdentifier", - "src": "34037:3:43" - }, - "nativeSrc": "34037:15:43", - "nodeType": "YulFunctionCall", - "src": "34037:15:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "34019:6:43", - "nodeType": "YulIdentifier", - "src": "34019:6:43" - }, - "nativeSrc": "34019:34:43", - "nodeType": "YulFunctionCall", - "src": "34019:34:43" - }, - "nativeSrc": "34019:34:43", - "nodeType": "YulExpressionStatement", - "src": "34019:34:43" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "34073:9:43", - "nodeType": "YulIdentifier", - "src": "34073:9:43" - }, - { - "kind": "number", - "nativeSrc": "34084:2:43", - "nodeType": "YulLiteral", - "src": "34084:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "34069:3:43", - "nodeType": "YulIdentifier", - "src": "34069:3:43" - }, - "nativeSrc": "34069:18:43", - "nodeType": "YulFunctionCall", - "src": "34069:18:43" - }, - { - "arguments": [ - { - "name": "value1", - "nativeSrc": "34093:6:43", - "nodeType": "YulIdentifier", - "src": "34093:6:43" - }, - { - "name": "_1", - "nativeSrc": "34101:2:43", - "nodeType": "YulIdentifier", - "src": "34101:2:43" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "34089:3:43", - "nodeType": "YulIdentifier", - "src": "34089:3:43" - }, - "nativeSrc": "34089:15:43", - "nodeType": "YulFunctionCall", - "src": "34089:15:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "34062:6:43", - "nodeType": "YulIdentifier", - "src": "34062:6:43" - }, - "nativeSrc": "34062:43:43", - "nodeType": "YulFunctionCall", - "src": "34062:43:43" - }, - "nativeSrc": "34062:43:43", - "nodeType": "YulExpressionStatement", - "src": "34062:43:43" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "34125:9:43", - "nodeType": "YulIdentifier", - "src": "34125:9:43" - }, - { - "kind": "number", - "nativeSrc": "34136:2:43", - "nodeType": "YulLiteral", - "src": "34136:2:43", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "34121:3:43", - "nodeType": "YulIdentifier", - "src": "34121:3:43" - }, - "nativeSrc": "34121:18:43", - "nodeType": "YulFunctionCall", - "src": "34121:18:43" - }, - { - "name": "value2", - "nativeSrc": "34141:6:43", - "nodeType": "YulIdentifier", - "src": "34141:6:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "34114:6:43", - "nodeType": "YulIdentifier", - "src": "34114:6:43" - }, - "nativeSrc": "34114:34:43", - "nodeType": "YulFunctionCall", - "src": "34114:34:43" - }, - "nativeSrc": "34114:34:43", - "nodeType": "YulExpressionStatement", - "src": "34114:34:43" - } - ] - }, - "name": "abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed", - "nativeSrc": "33779:375:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "33889:9:43", - "nodeType": "YulTypedName", - "src": "33889:9:43", - "type": "" - }, - { - "name": "value2", - "nativeSrc": "33900:6:43", - "nodeType": "YulTypedName", - "src": "33900:6:43", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "33908:6:43", - "nodeType": "YulTypedName", - "src": "33908:6:43", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "33916:6:43", - "nodeType": "YulTypedName", - "src": "33916:6:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "33927:4:43", - "nodeType": "YulTypedName", - "src": "33927:4:43", - "type": "" - } - ], - "src": "33779:375:43" - } - ] - }, - "contents": "{\n { }\n function copy_memory_to_memory_with_cleanup(src, dst, length)\n {\n let i := 0\n for { } lt(i, length) { i := add(i, 32) }\n {\n mstore(add(dst, i), mload(add(src, i)))\n }\n mstore(add(dst, length), 0)\n }\n function abi_encode_string(value, pos) -> end\n {\n let length := mload(value)\n mstore(pos, length)\n copy_memory_to_memory_with_cleanup(add(value, 0x20), add(pos, 0x20), length)\n end := add(add(pos, and(add(length, 31), not(31))), 0x20)\n }\n function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n {\n mstore(headStart, 32)\n tail := abi_encode_string(value0, add(headStart, 32))\n }\n function validator_revert_address(value)\n {\n if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n }\n function abi_decode_tuple_t_addresst_uint256(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n let value := calldataload(headStart)\n validator_revert_address(value)\n value0 := value\n value1 := calldataload(add(headStart, 32))\n }\n function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, iszero(iszero(value0)))\n }\n function abi_decode_struct_SendParam_calldata(offset, end) -> value\n {\n if slt(sub(end, offset), 224) { revert(0, 0) }\n value := offset\n }\n function abi_decode_tuple_t_struct$_SendParam_$3382_calldata_ptr(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let offset := calldataload(headStart)\n if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n value0 := abi_decode_struct_SendParam_calldata(add(headStart, offset), dataEnd)\n }\n function abi_encode_struct_OFTLimit(value, pos)\n {\n mstore(pos, mload(value))\n mstore(add(pos, 0x20), mload(add(value, 0x20)))\n }\n function abi_encode_tuple_t_struct$_OFTLimit_$3388_memory_ptr_t_array$_t_struct$_OFTFeeDetail_$3400_memory_ptr_$dyn_memory_ptr_t_struct$_OFTReceipt_$3394_memory_ptr__to_t_struct$_OFTLimit_$3388_memory_ptr_t_array$_t_struct$_OFTFeeDetail_$3400_memory_ptr_$dyn_memory_ptr_t_struct$_OFTReceipt_$3394_memory_ptr__fromStack_reversed(headStart, value2, value1, value0) -> tail\n {\n let tail_1 := add(headStart, 160)\n abi_encode_struct_OFTLimit(value0, headStart)\n let _1 := 64\n mstore(add(headStart, 64), 160)\n let pos := tail_1\n let length := mload(value1)\n mstore(tail_1, length)\n pos := add(headStart, 192)\n let tail_2 := add(add(headStart, shl(5, length)), 192)\n let _2 := 0x20\n let srcPtr := add(value1, 0x20)\n let i := 0\n for { } lt(i, length) { i := add(i, 1) }\n {\n mstore(pos, add(sub(tail_2, headStart), not(191)))\n let _3 := mload(srcPtr)\n mstore(tail_2, mload(_3))\n let memberValue0 := mload(add(_3, _2))\n mstore(add(tail_2, _2), _1)\n tail_2 := abi_encode_string(memberValue0, add(tail_2, _1))\n srcPtr := add(srcPtr, _2)\n pos := add(pos, _2)\n }\n tail := tail_2\n abi_encode_struct_OFTLimit(value2, add(headStart, 96))\n }\n function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n }\n function abi_decode_struct_Origin_calldata(offset, end) -> value\n {\n if slt(sub(end, offset), 96) { revert(0, 0) }\n value := offset\n }\n function abi_decode_bytes_calldata(offset, end) -> arrayPos, length\n {\n if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n length := calldataload(offset)\n if gt(length, 0xffffffffffffffff) { revert(0, 0) }\n arrayPos := add(offset, 0x20)\n if gt(add(add(offset, length), 0x20), end) { revert(0, 0) }\n }\n function abi_decode_tuple_t_struct$_Origin_$40_calldata_ptrt_bytes32t_bytes_calldata_ptrt_addresst_bytes_calldata_ptr(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6\n {\n if slt(sub(dataEnd, headStart), 224) { revert(0, 0) }\n value0 := abi_decode_struct_Origin_calldata(headStart, dataEnd)\n value1 := calldataload(add(headStart, 96))\n let offset := calldataload(add(headStart, 128))\n let _1 := 0xffffffffffffffff\n if gt(offset, _1) { revert(0, 0) }\n let value2_1, value3_1 := abi_decode_bytes_calldata(add(headStart, offset), dataEnd)\n value2 := value2_1\n value3 := value3_1\n let value := calldataload(add(headStart, 160))\n validator_revert_address(value)\n value4 := value\n let offset_1 := calldataload(add(headStart, 192))\n if gt(offset_1, _1) { revert(0, 0) }\n let value5_1, value6_1 := abi_decode_bytes_calldata(add(headStart, offset_1), dataEnd)\n value5 := value5_1\n value6 := value6_1\n }\n function abi_encode_tuple_t_uint16__to_t_uint16__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, 0xffff))\n }\n function abi_encode_tuple_t_bytes4_t_uint64__to_t_bytes4_t_uint64__fromStack_reversed(headStart, value1, value0) -> tail\n {\n tail := add(headStart, 64)\n mstore(headStart, and(value0, shl(224, 0xffffffff)))\n mstore(add(headStart, 32), and(value1, 0xffffffffffffffff))\n }\n function abi_encode_tuple_t_uint64_t_uint64__to_t_uint64_t_uint64__fromStack_reversed(headStart, value1, value0) -> tail\n {\n tail := add(headStart, 64)\n let _1 := 0xffffffffffffffff\n mstore(headStart, and(value0, _1))\n mstore(add(headStart, 32), and(value1, _1))\n }\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, value0)\n }\n function abi_decode_tuple_t_addresst_addresst_uint256(headStart, dataEnd) -> value0, value1, value2\n {\n if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n let value := calldataload(headStart)\n validator_revert_address(value)\n value0 := value\n let value_1 := calldataload(add(headStart, 32))\n validator_revert_address(value_1)\n value1 := value_1\n value2 := calldataload(add(headStart, 64))\n }\n function abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, 0xff))\n }\n function abi_decode_uint32(offset) -> value\n {\n value := calldataload(offset)\n if iszero(eq(value, and(value, 0xffffffff))) { revert(0, 0) }\n }\n function abi_decode_tuple_t_uint32t_bytes32(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n value0 := abi_decode_uint32(headStart)\n value1 := calldataload(add(headStart, 32))\n }\n function validator_revert_bool(value)\n {\n if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n }\n function abi_decode_tuple_t_struct$_SendParam_$3382_calldata_ptrt_bool(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n let offset := calldataload(headStart)\n if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n value0 := abi_decode_struct_SendParam_calldata(add(headStart, offset), dataEnd)\n let value := calldataload(add(headStart, 32))\n validator_revert_bool(value)\n value1 := value\n }\n function abi_encode_tuple_t_struct$_MessagingFee_$33_memory_ptr__to_t_struct$_MessagingFee_$33_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 64)\n abi_encode_struct_OFTLimit(value0, headStart)\n }\n function abi_decode_uint16(offset) -> value\n {\n value := calldataload(offset)\n if iszero(eq(value, and(value, 0xffff))) { revert(0, 0) }\n }\n function abi_decode_tuple_t_uint32t_uint16(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n value0 := abi_decode_uint32(headStart)\n value1 := abi_decode_uint16(add(headStart, 32))\n }\n function abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n {\n mstore(headStart, 32)\n tail := abi_encode_string(value0, add(headStart, 32))\n }\n function abi_encode_tuple_t_contract$_ILayerZeroEndpointV2_$202__to_t_address__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n }\n function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := calldataload(headStart)\n validator_revert_address(value)\n value0 := value\n }\n function abi_encode_tuple_t_uint64__to_t_uint64__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, 0xffffffffffffffff))\n }\n function abi_decode_tuple_t_struct$_Origin_$40_calldata_ptrt_bytes_calldata_ptrt_address(headStart, dataEnd) -> value0, value1, value2, value3\n {\n if slt(sub(dataEnd, headStart), 160) { revert(0, 0) }\n value0 := abi_decode_struct_Origin_calldata(headStart, dataEnd)\n let offset := calldataload(add(headStart, 96))\n if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n let value1_1, value2_1 := abi_decode_bytes_calldata(add(headStart, offset), dataEnd)\n value1 := value1_1\n value2 := value2_1\n let value := calldataload(add(headStart, 128))\n validator_revert_address(value)\n value3 := value\n }\n function abi_decode_array_struct_EnforcedOptionParam_calldata_dyn_calldata(offset, end) -> arrayPos, length\n {\n if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n length := calldataload(offset)\n if gt(length, 0xffffffffffffffff) { revert(0, 0) }\n arrayPos := add(offset, 0x20)\n if gt(add(add(offset, shl(5, length)), 0x20), end) { revert(0, 0) }\n }\n function abi_decode_tuple_t_array$_t_struct$_EnforcedOptionParam_$1932_calldata_ptr_$dyn_calldata_ptr(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let offset := calldataload(headStart)\n if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n let value0_1, value1_1 := abi_decode_array_struct_EnforcedOptionParam_calldata_dyn_calldata(add(headStart, offset), dataEnd)\n value0 := value0_1\n value1 := value1_1\n }\n function abi_decode_tuple_t_uint32(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n value0 := abi_decode_uint32(headStart)\n }\n function abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, value0)\n }\n function abi_decode_tuple_t_uint32t_uint16t_bytes_calldata_ptr(headStart, dataEnd) -> value0, value1, value2, value3\n {\n if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n value0 := abi_decode_uint32(headStart)\n value1 := abi_decode_uint16(add(headStart, 32))\n let offset := calldataload(add(headStart, 64))\n if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n let value2_1, value3_1 := abi_decode_bytes_calldata(add(headStart, offset), dataEnd)\n value2 := value2_1\n value3 := value3_1\n }\n function abi_decode_tuple_t_array$_t_struct$_InboundPacket_$2486_calldata_ptr_$dyn_calldata_ptr(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let offset := calldataload(headStart)\n if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n let value0_1, value1_1 := abi_decode_array_struct_EnforcedOptionParam_calldata_dyn_calldata(add(headStart, offset), dataEnd)\n value0 := value0_1\n value1 := value1_1\n }\n function abi_decode_tuple_t_struct$_SendParam_$3382_calldata_ptrt_struct$_MessagingFee_$33_calldata_ptrt_address(headStart, dataEnd) -> value0, value1, value2\n {\n let _1 := sub(dataEnd, headStart)\n if slt(_1, 128) { revert(0, 0) }\n let offset := calldataload(headStart)\n if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n value0 := abi_decode_struct_SendParam_calldata(add(headStart, offset), dataEnd)\n if slt(add(_1, not(31)), 64) { revert(0, 0) }\n value1 := add(headStart, 32)\n let value := calldataload(add(headStart, 96))\n validator_revert_address(value)\n value2 := value\n }\n function abi_encode_tuple_t_struct$_MessagingReceipt_$28_memory_ptr_t_struct$_OFTReceipt_$3394_memory_ptr__to_t_struct$_MessagingReceipt_$28_memory_ptr_t_struct$_OFTReceipt_$3394_memory_ptr__fromStack_reversed(headStart, value1, value0) -> tail\n {\n tail := add(headStart, 192)\n mstore(headStart, mload(value0))\n mstore(add(headStart, 0x20), and(mload(add(value0, 0x20)), 0xffffffffffffffff))\n let memberValue0 := mload(add(value0, 0x40))\n abi_encode_struct_OFTLimit(memberValue0, add(headStart, 0x40))\n abi_encode_struct_OFTLimit(value1, add(headStart, 128))\n }\n function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n let value := calldataload(headStart)\n validator_revert_address(value)\n value0 := value\n let value_1 := calldataload(add(headStart, 32))\n validator_revert_address(value_1)\n value1 := value_1\n }\n function abi_decode_tuple_t_struct$_Origin_$40_calldata_ptr(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n value0 := abi_decode_struct_Origin_calldata(headStart, dataEnd)\n }\n function extract_byte_array_length(data) -> length\n {\n length := shr(1, data)\n let outOfPlaceEncoding := and(data, 1)\n if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n if eq(outOfPlaceEncoding, lt(length, 32))\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x22)\n revert(0, 0x24)\n }\n }\n function panic_error_0x41()\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n function abi_encode_tuple_t_uint32_t_bytes32__to_t_uint32_t_bytes32__fromStack_reversed(headStart, value1, value0) -> tail\n {\n tail := add(headStart, 64)\n mstore(headStart, and(value0, 0xffffffff))\n mstore(add(headStart, 32), value1)\n }\n function allocate_memory_4159() -> memPtr\n {\n memPtr := mload(64)\n let newFreePtr := add(memPtr, 0x60)\n if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n mstore(64, newFreePtr)\n }\n function allocate_memory_4160() -> memPtr\n {\n memPtr := mload(0x40)\n let newFreePtr := add(memPtr, 0x40)\n if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n mstore(0x40, newFreePtr)\n }\n function allocate_memory(size) -> memPtr\n {\n memPtr := mload(64)\n let newFreePtr := add(memPtr, and(add(size, 31), not(31)))\n if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n mstore(64, newFreePtr)\n }\n function array_allocation_size_bytes(length) -> size\n {\n if gt(length, 0xffffffffffffffff) { panic_error_0x41() }\n size := add(and(add(length, 31), not(31)), 0x20)\n }\n function convert_array_t_array$_t_struct$_EnforcedOptionParam_$1932_calldata_ptr_$dyn_calldata_ptr_to_t_array$_t_struct$_EnforcedOptionParam_$1932_memory_ptr_$dyn_memory_ptr(value, length) -> converted\n {\n let _1 := 0xffffffffffffffff\n if gt(length, _1) { panic_error_0x41() }\n let _2 := shl(5, length)\n let _3 := 0x20\n let dst := allocate_memory(add(_2, _3))\n let dst_1 := dst\n mstore(dst, length)\n dst := add(dst, _3)\n let srcEnd := add(value, _2)\n if gt(srcEnd, calldatasize()) { revert(0, 0) }\n let src := value\n for { } lt(src, srcEnd) { src := add(src, _3) }\n {\n let innerOffset := calldataload(src)\n if gt(innerOffset, _1)\n {\n let _4 := 0\n revert(_4, _4)\n }\n let _5 := add(value, innerOffset)\n if slt(sub(calldatasize(), _5), 0x60)\n {\n let _6 := 0\n revert(_6, _6)\n }\n let value_1 := allocate_memory_4159()\n mstore(value_1, abi_decode_uint32(_5))\n mstore(add(value_1, _3), abi_decode_uint16(add(_5, _3)))\n let _7 := 64\n let offset := calldataload(add(_5, _7))\n if gt(offset, _1)\n {\n let _8 := 0\n revert(_8, _8)\n }\n let _9 := add(_5, offset)\n if iszero(slt(add(_9, 0x1f), calldatasize()))\n {\n let _10 := 0\n revert(_10, _10)\n }\n let _11 := calldataload(_9)\n let array := allocate_memory(array_allocation_size_bytes(_11))\n mstore(array, _11)\n if gt(add(add(_9, _11), _3), calldatasize())\n {\n let _12 := 0\n revert(_12, _12)\n }\n calldatacopy(add(array, _3), add(_9, _3), _11)\n mstore(add(add(array, _11), _3), 0)\n mstore(add(value_1, _7), array)\n mstore(dst, value_1)\n dst := add(dst, _3)\n }\n converted := dst_1\n }\n function calldata_array_index_range_access_t_bytes_calldata_ptr(offset, length, startIndex, endIndex) -> offsetOut, lengthOut\n {\n if gt(startIndex, endIndex) { revert(0, 0) }\n if gt(endIndex, length) { revert(0, 0) }\n offsetOut := add(offset, startIndex)\n lengthOut := sub(endIndex, startIndex)\n }\n function abi_encode_tuple_packed_t_bytes_memory_ptr_t_bytes_calldata_ptr_slice__to_t_bytes_memory_ptr_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value2, value1, value0) -> end\n {\n let length := mload(value0)\n copy_memory_to_memory_with_cleanup(add(value0, 0x20), pos, length)\n let end_1 := add(pos, length)\n calldatacopy(end_1, value1, value2)\n let _1 := add(end_1, value2)\n mstore(_1, 0)\n end := _1\n }\n function abi_encode_bytes_calldata(start, length, pos) -> end\n {\n mstore(pos, length)\n calldatacopy(add(pos, 0x20), start, length)\n mstore(add(add(pos, length), 0x20), 0)\n end := add(add(pos, and(add(length, 31), not(31))), 0x20)\n }\n function abi_encode_tuple_t_bytes_calldata_ptr__to_t_bytes_memory_ptr__fromStack_reversed(headStart, value1, value0) -> tail\n {\n mstore(headStart, 32)\n tail := abi_encode_bytes_calldata(value0, value1, add(headStart, 32))\n }\n function panic_error_0x32()\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x32)\n revert(0, 0x24)\n }\n function access_calldata_tail_t_struct$_InboundPacket_$2486_calldata_ptr(base_ref, ptr_to_tail) -> addr\n {\n let rel_offset_of_tail := calldataload(ptr_to_tail)\n if iszero(slt(rel_offset_of_tail, add(sub(calldatasize(), base_ref), not(318)))) { revert(0, 0) }\n addr := add(base_ref, rel_offset_of_tail)\n }\n function access_calldata_tail_t_bytes_calldata_ptr(base_ref, ptr_to_tail) -> addr, length\n {\n let rel_offset_of_tail := calldataload(ptr_to_tail)\n if iszero(slt(rel_offset_of_tail, add(sub(calldatasize(), base_ref), not(30)))) { revert(0, 0) }\n let addr_1 := add(base_ref, rel_offset_of_tail)\n length := calldataload(addr_1)\n if gt(length, 0xffffffffffffffff) { revert(0, 0) }\n addr := add(addr_1, 0x20)\n if sgt(addr, sub(calldatasize(), length)) { revert(0, 0) }\n }\n function validator_revert_uint64(value)\n {\n if iszero(eq(value, and(value, 0xffffffffffffffff))) { revert(0, 0) }\n }\n function abi_encode_tuple_t_struct$_Origin_$40_calldata_ptr_t_bytes32_t_bytes_calldata_ptr_t_address_t_bytes_calldata_ptr__to_t_struct$_Origin_$40_memory_ptr_t_bytes32_t_bytes_memory_ptr_t_address_t_bytes_memory_ptr__fromStack_reversed(headStart, value6, value5, value4, value3, value2, value1, value0) -> tail\n {\n mstore(headStart, and(abi_decode_uint32(value0), 0xffffffff))\n mstore(add(headStart, 0x20), calldataload(add(value0, 0x20)))\n let value := calldataload(add(value0, 0x40))\n validator_revert_uint64(value)\n mstore(add(headStart, 0x40), and(value, 0xffffffffffffffff))\n mstore(add(headStart, 96), value1)\n mstore(add(headStart, 128), 224)\n let tail_1 := abi_encode_bytes_calldata(value2, value3, add(headStart, 224))\n mstore(add(headStart, 160), and(value4, sub(shl(160, 1), 1)))\n mstore(add(headStart, 192), sub(tail_1, headStart))\n tail := abi_encode_bytes_calldata(value5, value6, tail_1)\n }\n function abi_decode_tuple_t_bytes_memory_ptr_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let offset := mload(headStart)\n if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n let _1 := add(headStart, offset)\n if iszero(slt(add(_1, 0x1f), dataEnd)) { revert(0, 0) }\n let _2 := mload(_1)\n let array := allocate_memory(array_allocation_size_bytes(_2))\n mstore(array, _2)\n if gt(add(add(_1, _2), 32), dataEnd) { revert(0, 0) }\n copy_memory_to_memory_with_cleanup(add(_1, 32), add(array, 32), _2)\n value0 := array\n }\n function abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n {\n tail := add(headStart, 64)\n mstore(headStart, value0)\n mstore(add(headStart, 32), value1)\n }\n function abi_encode_tuple_t_uint32__to_t_uint32__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, 0xffffffff))\n }\n function abi_decode_tuple_t_uint64(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := calldataload(headStart)\n validator_revert_uint64(value)\n value0 := value\n }\n function abi_encode_tuple_t_address_t_bytes32_t_rational_0_by_1_t_bytes_memory_ptr__to_t_address_t_bytes32_t_uint16_t_bytes_memory_ptr__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n {\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n mstore(add(headStart, 32), value1)\n mstore(add(headStart, 64), and(value2, 0xffff))\n mstore(add(headStart, 96), 128)\n tail := abi_encode_string(value3, add(headStart, 128))\n }\n function abi_encode_tuple_t_uint32_t_uint256__to_t_uint32_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n {\n tail := add(headStart, 64)\n mstore(headStart, and(value0, 0xffffffff))\n mstore(add(headStart, 32), value1)\n }\n function abi_encode_tuple_t_address_t_uint256_t_uint256__to_t_address_t_uint256_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n {\n tail := add(headStart, 96)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n mstore(add(headStart, 32), value1)\n mstore(add(headStart, 64), value2)\n }\n function abi_encode_tuple_t_bytes_memory_ptr_t_bytes_memory_ptr__to_t_bytes_memory_ptr_t_bytes_memory_ptr__fromStack_reversed(headStart, value1, value0) -> tail\n {\n mstore(headStart, 64)\n let tail_1 := abi_encode_string(value0, add(headStart, 64))\n mstore(add(headStart, 32), sub(tail_1, headStart))\n tail := abi_encode_string(value1, tail_1)\n }\n function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := mload(headStart)\n validator_revert_bool(value)\n value0 := value\n }\n function abi_encode_tuple_t_struct$_MessagingParams_$20_memory_ptr_t_address__to_t_struct$_MessagingParams_$20_memory_ptr_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n {\n mstore(headStart, 64)\n mstore(add(headStart, 64), and(mload(value0), 0xffffffff))\n mstore(add(headStart, 96), mload(add(value0, 0x20)))\n let memberValue0 := mload(add(value0, 64))\n mstore(add(headStart, 128), 0xa0)\n let tail_1 := abi_encode_string(memberValue0, add(headStart, 224))\n let memberValue0_1 := mload(add(value0, 96))\n mstore(add(headStart, 0xa0), add(sub(tail_1, headStart), not(63)))\n let tail_2 := abi_encode_string(memberValue0_1, tail_1)\n mstore(add(headStart, 192), iszero(iszero(mload(add(value0, 128)))))\n tail := tail_2\n mstore(add(headStart, 0x20), and(value1, sub(shl(160, 1), 1)))\n }\n function abi_decode_struct_MessagingFee_fromMemory(headStart, end) -> value\n {\n if slt(sub(end, headStart), 0x40) { revert(0, 0) }\n value := allocate_memory_4160()\n mstore(value, mload(headStart))\n mstore(add(value, 32), mload(add(headStart, 32)))\n }\n function abi_decode_tuple_t_struct$_MessagingFee_$33_memory_ptr_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n value0 := abi_decode_struct_MessagingFee_fromMemory(headStart, dataEnd)\n }\n function array_dataslot_bytes_storage(ptr) -> data\n {\n mstore(0, ptr)\n data := keccak256(0, 0x20)\n }\n function clean_up_bytearray_end_slots_bytes_storage(array, len, startIndex)\n {\n if gt(len, 31)\n {\n let _1 := 0\n mstore(0, array)\n let data := keccak256(0, 0x20)\n let deleteStart := add(data, shr(5, add(startIndex, 31)))\n if lt(startIndex, 0x20) { deleteStart := data }\n let _2 := add(data, shr(5, add(len, 31)))\n let start := deleteStart\n for { } lt(start, _2) { start := add(start, 1) }\n { sstore(start, _1) }\n }\n }\n function extract_used_part_and_set_length_of_short_byte_array(data, len) -> used\n {\n used := or(and(data, not(shr(shl(3, len), not(0)))), shl(1, len))\n }\n function copy_byte_array_to_storage_from_t_bytes_memory_ptr_to_t_bytes_storage(slot, src)\n {\n let newLen := mload(src)\n if gt(newLen, 0xffffffffffffffff) { panic_error_0x41() }\n clean_up_bytearray_end_slots_bytes_storage(slot, extract_byte_array_length(sload(slot)), newLen)\n let srcOffset := 0\n let srcOffset_1 := 0x20\n srcOffset := 0x20\n switch gt(newLen, 31)\n case 1 {\n let loopEnd := and(newLen, not(31))\n let dstPtr := array_dataslot_bytes_storage(slot)\n let i := 0\n for { } lt(i, loopEnd) { i := add(i, srcOffset_1) }\n {\n sstore(dstPtr, mload(add(src, srcOffset)))\n dstPtr := add(dstPtr, 1)\n srcOffset := add(srcOffset, srcOffset_1)\n }\n if lt(loopEnd, newLen)\n {\n let lastValue := mload(add(src, srcOffset))\n sstore(dstPtr, and(lastValue, not(shr(and(shl(3, newLen), 248), not(0)))))\n }\n sstore(slot, add(shl(1, newLen), 1))\n }\n default {\n let value := 0\n if newLen\n {\n value := mload(add(src, srcOffset))\n }\n sstore(slot, extract_used_part_and_set_length_of_short_byte_array(value, newLen))\n }\n }\n function abi_encode_tuple_t_array$_t_struct$_EnforcedOptionParam_$1932_memory_ptr_$dyn_memory_ptr__to_t_array$_t_struct$_EnforcedOptionParam_$1932_memory_ptr_$dyn_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n {\n let _1 := 32\n let tail_1 := add(headStart, _1)\n mstore(headStart, _1)\n let pos := tail_1\n let length := mload(value0)\n mstore(tail_1, length)\n let _2 := 64\n pos := add(headStart, 64)\n let tail_2 := add(add(headStart, shl(5, length)), 64)\n let srcPtr := add(value0, _1)\n let i := 0\n for { } lt(i, length) { i := add(i, 1) }\n {\n mstore(pos, add(sub(tail_2, headStart), not(63)))\n let _3 := mload(srcPtr)\n let _4 := 0x60\n mstore(tail_2, and(mload(_3), 0xffffffff))\n mstore(add(tail_2, _1), and(mload(add(_3, _1)), 0xffff))\n let memberValue0 := mload(add(_3, _2))\n mstore(add(tail_2, _2), _4)\n tail_2 := abi_encode_string(memberValue0, add(tail_2, _4))\n srcPtr := add(srcPtr, _1)\n pos := add(pos, _1)\n }\n tail := tail_2\n }\n function abi_decode_tuple_t_struct$_MessagingFee_$33_memory_ptr(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n let value := allocate_memory_4160()\n mstore(value, calldataload(headStart))\n mstore(add(value, 32), calldataload(add(headStart, 32)))\n value0 := value\n }\n function abi_encode_tuple_t_uint32_t_uint256_t_uint256__to_t_uint32_t_uint256_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n {\n tail := add(headStart, 96)\n mstore(headStart, and(value0, 0xffffffff))\n mstore(add(headStart, 32), value1)\n mstore(add(headStart, 64), value2)\n }\n function panic_error_0x11()\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n function checked_div_t_uint256(x, y) -> r\n {\n if iszero(y)\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x12)\n revert(0, 0x24)\n }\n r := div(x, y)\n }\n function checked_mul_t_uint256(x, y) -> product\n {\n product := mul(x, y)\n if iszero(or(iszero(x), eq(y, div(product, x)))) { panic_error_0x11() }\n }\n function convert_bytes_to_fixedbytes_from_t_bytes_calldata_ptr_to_t_bytes32(array, len) -> value\n {\n value := calldataload(array)\n if lt(len, 32)\n {\n value := and(value, shl(shl(3, sub(32, len)), not(0)))\n }\n }\n function convert_bytes_to_fixedbytes_from_t_bytes_calldata_ptr_to_t_bytes8(array, len) -> value\n {\n let _1 := calldataload(array)\n let _2 := shl(192, 0xffffffffffffffff)\n value := and(_1, _2)\n if lt(len, 8)\n {\n value := and(and(_1, shl(shl(3, sub(8, len)), _2)), _2)\n }\n }\n function abi_encode_tuple_packed_t_uint64_t_uint32_t_uint256_t_bytes_memory_ptr__to_t_uint64_t_uint32_t_uint256_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value3, value2, value1, value0) -> end\n {\n mstore(pos, and(shl(192, value0), shl(192, 0xffffffffffffffff)))\n mstore(add(pos, 8), and(shl(224, value1), shl(224, 0xffffffff)))\n mstore(add(pos, 12), value2)\n let length := mload(value3)\n copy_memory_to_memory_with_cleanup(add(value3, 0x20), add(pos, 44), length)\n end := add(add(pos, length), 44)\n }\n function checked_add_t_uint256(x, y) -> sum\n {\n sum := add(x, y)\n if gt(x, sum) { panic_error_0x11() }\n }\n function abi_encode_tuple_packed_t_bytes32_t_uint64__to_t_bytes32_t_uint64__nonPadded_inplace_fromStack_reversed(pos, value1, value0) -> end\n {\n mstore(pos, value0)\n mstore(add(pos, 32), and(shl(192, value1), shl(192, 0xffffffffffffffff)))\n end := add(pos, 40)\n }\n function abi_encode_tuple_packed_t_bytes32_t_uint64_t_bytes32_t_bytes_memory_ptr__to_t_bytes32_t_uint64_t_bytes32_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value3, value2, value1, value0) -> end\n {\n mstore(pos, value0)\n mstore(add(pos, 32), and(shl(192, value1), shl(192, 0xffffffffffffffff)))\n mstore(add(pos, 40), value2)\n let length := mload(value3)\n copy_memory_to_memory_with_cleanup(add(value3, 32), add(pos, 72), length)\n end := add(add(pos, length), 72)\n }\n function abi_decode_tuple_t_struct$_MessagingReceipt_$28_memory_ptr_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n let value := allocate_memory_4159()\n mstore(value, mload(headStart))\n let value_1 := mload(add(headStart, 32))\n validator_revert_uint64(value_1)\n mstore(add(value, 32), value_1)\n mstore(add(value, 64), abi_decode_struct_MessagingFee_fromMemory(add(headStart, 64), dataEnd))\n value0 := value\n }\n function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := mload(headStart)\n validator_revert_address(value)\n value0 := value\n }\n function abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n {\n tail := add(headStart, 96)\n let _1 := sub(shl(160, 1), 1)\n mstore(headStart, and(value0, _1))\n mstore(add(headStart, 32), and(value1, _1))\n mstore(add(headStart, 64), value2)\n }\n}", - "id": 43, - "language": "Yul", - "name": "#utility.yul" - } - ], - "immutableReferences": { - "1386": [ - { "length": 32, "start": 1245 }, - { "length": 32, "start": 2445 }, - { "length": 32, "start": 4061 }, - { "length": 32, "start": 4692 }, - { "length": 32, "start": 5566 }, - { "length": 32, "start": 7505 }, - { "length": 32, "start": 7873 }, - { "length": 32, "start": 8056 } - ], - "2776": [ - { "length": 32, "start": 1566 }, - { "length": 32, "start": 6624 }, - { "length": 32, "start": 6741 }, - { "length": 32, "start": 7257 } - ] - }, - "linkReferences": {}, - "object": "6080604052600436106102515760003560e01c80637d25a05e11610139578063bb0b6a53116100b6578063d045a0dc1161007a578063d045a0dc14610755578063d424388514610768578063dd62ed3e14610788578063f2fde38b146107ce578063fc0c546a14610461578063ff7bd03d146107ee57600080fd5b8063bb0b6a53146106b4578063bc70b354146106e1578063bd815db014610701578063c7c7f5b314610714578063ca5eb5e11461073557600080fd5b8063963efcaa116100fd578063963efcaa1461060c5780639f68b96414610640578063a9059cbb14610654578063b731ea0a14610674578063b98bd0701461069457600080fd5b80637d25a05e1461056a57806382413eac146105a5578063857749b0146105c55780638da5cb5b146105d957806395d89b41146105f757600080fd5b806323b872dd116101d25780635535d461116101965780635535d461146104745780635a0dfe4d146104945780635e280f11146104cb5780636fc1b31e146104ff57806370a082311461051f578063715018a61461055557600080fd5b806323b872dd146103d2578063313ce567146103f25780633400288b146104145780633b6f743b1461043457806352ae28791461046157600080fd5b8063134d4f2511610219578063134d4f251461032d578063156a0d0f1461035557806317442b701461037c57806318160ddd1461039e5780631f5e1334146103bd57600080fd5b806306fdde0314610256578063095ea7b3146102815780630d35b415146102b1578063111ecdad146102e057806313137d6514610318575b600080fd5b34801561026257600080fd5b5061026b61080e565b60405161027891906120f0565b60405180910390f35b34801561028d57600080fd5b506102a161029c366004612118565b6108a0565b6040519015158152602001610278565b3480156102bd57600080fd5b506102d16102cc36600461215c565b6108ba565b60405161027893929190612190565b3480156102ec57600080fd5b50600454610300906001600160a01b031681565b6040516001600160a01b039091168152602001610278565b61032b610326366004612283565b61098b565b005b34801561033957600080fd5b50610342600281565b60405161ffff9091168152602001610278565b34801561036157600080fd5b506040805162b9270b60e21b81526001602082015201610278565b34801561038857600080fd5b5060408051600181526002602082015201610278565b3480156103aa57600080fd5b506007545b604051908152602001610278565b3480156103c957600080fd5b50610342600181565b3480156103de57600080fd5b506102a16103ed366004612322565b610a4b565b3480156103fe57600080fd5b5060125b60405160ff9091168152602001610278565b34801561042057600080fd5b5061032b61042f36600461237c565b610a71565b34801561044057600080fd5b5061045461044f3660046123a6565b610a87565b60405161027891906123f7565b34801561046d57600080fd5b5030610300565b34801561048057600080fd5b5061026b61048f366004612420565b610aee565b3480156104a057600080fd5b506102a16104af36600461237c565b63ffffffff919091166000908152600160205260409020541490565b3480156104d757600080fd5b506103007f000000000000000000000000000000000000000000000000000000000000000081565b34801561050b57600080fd5b5061032b61051a366004612453565b610b93565b34801561052b57600080fd5b506103af61053a366004612453565b6001600160a01b031660009081526005602052604090205490565b34801561056157600080fd5b5061032b610bf0565b34801561057657600080fd5b5061058d61058536600461237c565b600092915050565b6040516001600160401b039091168152602001610278565b3480156105b157600080fd5b506102a16105c0366004612470565b610c04565b3480156105d157600080fd5b506006610402565b3480156105e557600080fd5b506000546001600160a01b0316610300565b34801561060357600080fd5b5061026b610c19565b34801561061857600080fd5b506103af7f000000000000000000000000000000000000000000000000000000000000000081565b34801561064c57600080fd5b5060006102a1565b34801561066057600080fd5b506102a161066f366004612118565b610c28565b34801561068057600080fd5b50600254610300906001600160a01b031681565b3480156106a057600080fd5b5061032b6106af36600461251a565b610c36565b3480156106c057600080fd5b506103af6106cf36600461255b565b60016020526000908152604090205481565b3480156106ed57600080fd5b5061026b6106fc366004612576565b610c50565b61032b61070f36600461251a565b610df8565b6107276107223660046125d6565b610f82565b604051610278929190612643565b34801561074157600080fd5b5061032b610750366004612453565b610fb6565b61032b610763366004612283565b61103c565b34801561077457600080fd5b5061032b610783366004612453565b61106b565b34801561079457600080fd5b506103af6107a3366004612695565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b3480156107da57600080fd5b5061032b6107e9366004612453565b6110c1565b3480156107fa57600080fd5b506102a16108093660046126c3565b6110ff565b60606008805461081d906126df565b80601f0160208091040260200160405190810160405280929190818152602001828054610849906126df565b80156108965780601f1061086b57610100808354040283529160200191610896565b820191906000526020600020905b81548152906001019060200180831161087957829003601f168201915b5050505050905090565b6000336108ae818585611135565b60019150505b92915050565b604080518082019091526000808252602082015260606108ed604051806040016040528060008152602001600081525090565b60408051808201825260008082526001600160401b03602080840182905284518381529081019094529195509182610948565b6040805180820190915260008152606060208201528152602001906001900390816109205790505b50935060008061096d604089013560608a013561096860208c018c61255b565b611147565b60408051808201909152918252602082015296989597505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633146109db576040516391ac5e4f60e01b81523360048201526024015b60405180910390fd5b602087018035906109f5906109f0908a61255b565b611183565b14610a3357610a07602088018861255b565b60405163309afaf360e21b815263ffffffff9091166004820152602088013560248201526044016109d2565b610a42878787878787876111bf565b50505050505050565b600033610a59858285611326565b610a648585856113a4565b60019150505b9392505050565b610a79611403565b610a838282611430565b5050565b60408051808201909152600080825260208201526000610ab760408501356060860135610968602088018861255b565b915050600080610ac78684611485565b9092509050610ae4610adc602088018861255b565b8383886115a8565b9695505050505050565b600360209081526000928352604080842090915290825290208054610b12906126df565b80601f0160208091040260200160405190810160405280929190818152602001828054610b3e906126df565b8015610b8b5780601f10610b6057610100808354040283529160200191610b8b565b820191906000526020600020905b815481529060010190602001808311610b6e57829003601f168201915b505050505081565b610b9b611403565b600480546001600160a01b0319166001600160a01b0383169081179091556040519081527ff0be4f1e87349231d80c36b33f9e8639658eeaf474014dee15a3e6a4d4414197906020015b60405180910390a150565b610bf8611403565b610c026000611689565b565b6001600160a01b03811630145b949350505050565b60606009805461081d906126df565b6000336108ae8185856113a4565b610c3e611403565b610a83610c4b82846127ca565b6116d9565b63ffffffff8416600090815260036020908152604080832061ffff87168452909152812080546060929190610c84906126df565b80601f0160208091040260200160405190810160405280929190818152602001828054610cb0906126df565b8015610cfd5780601f10610cd257610100808354040283529160200191610cfd565b820191906000526020600020905b815481529060010190602001808311610ce057829003601f168201915b505050505090508051600003610d4d5783838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929450610c119350505050565b6000839003610d5d579050610c11565b60028310610ddb57610da484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506117e092505050565b80610db284600281886128df565b604051602001610dc493929190612909565b604051602081830303815290604052915050610c11565b8383604051639a6d49cd60e01b81526004016109d292919061295a565b60005b81811015610f015736838383818110610e1657610e1661296e565b9050602002810190610e289190612984565b9050610e5b610e3a602083018361255b565b602083013563ffffffff919091166000908152600160205260409020541490565b610e655750610ef9565b3063d045a0dc60c08301358360a0810135610e846101008301836129a5565b610e95610100890160e08a01612453565b610ea36101208a018a6129a5565b6040518963ffffffff1660e01b8152600401610ec59796959493929190612a00565b6000604051808303818588803b158015610ede57600080fd5b505af1158015610ef2573d6000803e3d6000fd5b5050505050505b600101610dfb565b50336001600160a01b0316638e9e70996040518163ffffffff1660e01b8152600401600060405180830381865afa158015610f40573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610f689190810190612a86565b604051638351eea760e01b81526004016109d291906120f0565b610f8a612059565b6040805180820190915260008082526020820152610fa985858561180c565b915091505b935093915050565b610fbe611403565b60405163ca5eb5e160e01b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063ca5eb5e190602401600060405180830381600087803b15801561102157600080fd5b505af1158015611035573d6000803e3d6000fd5b5050505050565b33301461105c5760405163029a949d60e31b815260040160405180910390fd5b610a4287878787878787610a33565b611073611403565b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527fd48d879cef83a1c0bdda516f27b13ddb1b3f8bbac1c9e1511bb2a659c242776090602001610be5565b6110c9611403565b6001600160a01b0381166110f357604051631e4fbdf760e01b8152600060048201526024016109d2565b6110fc81611689565b50565b6000602082018035906001908390611117908661255b565b63ffffffff1681526020810191909152604001600020541492915050565b6111428383836001611907565b505050565b600080611153856119dc565b915081905083811015610fae576040516371c4efed60e01b815260048101829052602481018590526044016109d2565b63ffffffff8116600090815260016020526040812054806108b45760405163f6ff4fb760e01b815263ffffffff841660048201526024016109d2565b60006111d16111ce8787611a13565b90565b905060006111fd826111eb6111e68a8a611a2b565b611a4e565b6111f860208d018d61255b565b611a83565b905060288611156112c457600061123a61121d60608c0160408d01612af3565b61122a60208d018d61255b565b846112358c8c611aab565b611af6565b604051633e5ac80960e11b81529091506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690637cb59012906112909086908d906000908790600401612b10565b600060405180830381600087803b1580156112aa57600080fd5b505af11580156112be573d6000803e3d6000fd5b50505050505b6001600160a01b038216887fefed6d3500546b29533b128a29e3a94d70788727f0507505ac12eaf2e578fd9c6112fd60208d018d61255b565b6040805163ffffffff9092168252602082018690520160405180910390a3505050505050505050565b6001600160a01b03838116600090815260066020908152604080832093861683529290522054600019811461139e578181101561138f57604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064016109d2565b61139e84848484036000611907565b50505050565b6001600160a01b0383166113ce57604051634b637e8f60e11b8152600060048201526024016109d2565b6001600160a01b0382166113f85760405163ec442f0560e01b8152600060048201526024016109d2565b611142838383611b28565b6000546001600160a01b03163314610c025760405163118cdaa760e01b81523360048201526024016109d2565b63ffffffff8216600081815260016020908152604091829020849055815192835282018390527f238399d427b947898edb290f5ff0f9109849b1c3ba196a42e35f00c50a54b98b910160405180910390a15050565b60608060006114e2856020013561149b86611c52565b6114a860a08901896129a5565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c7e92505050565b90935090506000816114f55760016114f8565b60025b905061151861150a602088018861255b565b826106fc60808a018a6129a5565b6004549093506001600160a01b0316801561159e5760405163043a78eb60e01b81526001600160a01b0382169063043a78eb9061155b9088908890600401612b41565b602060405180830381865afa158015611578573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061159c9190612b66565b505b5050509250929050565b60408051808201909152600080825260208201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ddc28c586040518060a001604052808863ffffffff16815260200161160b89611183565b8152602001878152602001868152602001851515815250306040518363ffffffff1660e01b8152600401611640929190612b83565b6040805180830381865afa15801561165c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116809190612c2c565b95945050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60005b81518110156117b05761170b8282815181106116fa576116fa61296e565b6020026020010151604001516117e0565b81818151811061171d5761171d61296e565b6020026020010151604001516003600084848151811061173f5761173f61296e565b60200260200101516000015163ffffffff1663ffffffff16815260200190815260200160002060008484815181106117795761177961296e565b60200260200101516020015161ffff1661ffff16815260200190815260200160002090816117a79190612c98565b506001016116dc565b507fbe4864a8e820971c0247f5992e2da559595f7bf076a21cb5928d443d2a13b67481604051610be59190612d57565b600281015161ffff8116600314610a835781604051639a6d49cd60e01b81526004016109d291906120f0565b611814612059565b604080518082019091526000808252602082015260008061184b33604089013560608a013561184660208c018c61255b565b611cf8565b9150915060008061185c8984611485565b909250905061188861187160208b018b61255b565b8383611882368d90038d018d612de2565b8b611d1e565b60408051808201909152858152602080820186905282519298509096503391907f85496b760a4b7f8d66384b9df21b381f5d1b1e79f229a47aaf4c232edc2fe59a906118d6908d018d61255b565b6040805163ffffffff909216825260208201899052810187905260600160405180910390a350505050935093915050565b6001600160a01b0384166119315760405163e602df0560e01b8152600060048201526024016109d2565b6001600160a01b03831661195b57604051634a1406b160e11b8152600060048201526024016109d2565b6001600160a01b038085166000908152600660209081526040808320938716835292905220829055801561139e57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516119ce91815260200190565b60405180910390a350505050565b60007f0000000000000000000000000000000000000000000000000000000000000000611a098184612e2a565b6108b49190612e4c565b6000611a2260208284866128df565b610a6a91612e63565b6000611a3b6028602084866128df565b611a4491612e81565b60c01c9392505050565b60006108b47f00000000000000000000000000000000000000000000000000000000000000006001600160401b038416612e4c565b60006001600160a01b038416611a995761dead93505b611aa38484611e29565b509092915050565b6060611aba82602881866128df565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929695505050505050565b606084848484604051602001611b0f9493929190612eb1565b6040516020818303038152906040529050949350505050565b6001600160a01b038316611b53578060076000828254611b489190612f00565b90915550611bc59050565b6001600160a01b03831660009081526005602052604090205481811015611ba65760405163391434e360e21b81526001600160a01b038516600482015260248101829052604481018390526064016109d2565b6001600160a01b03841660009081526005602052604090209082900390555b6001600160a01b038216611be157600780548290039055611c00565b6001600160a01b03821660009081526005602052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611c4591815260200190565b60405180910390a3505050565b60006108b47f000000000000000000000000000000000000000000000000000000000000000083612e2a565b8051606090151580611cc7578484604051602001611cb392919091825260c01b6001600160c01b031916602082015260280190565b604051602081830303815290604052611cee565b84843385604051602001611cde9493929190612f13565b6040516020818303038152906040525b9150935093915050565b600080611d06858585611147565b9092509050611d158683611e5f565b94509492505050565b611d26612059565b6000611d358460000151611e95565b602085015190915015611d4f57611d4f8460200151611ebd565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632637a450826040518060a001604052808b63ffffffff168152602001611d9f8c611183565b81526020018a815260200189815260200160008960200151111515815250866040518463ffffffff1660e01b8152600401611ddb929190612b83565b60806040518083038185885af1158015611df9573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611e1e9190612f56565b979650505050505050565b6001600160a01b038216611e535760405163ec442f0560e01b8152600060048201526024016109d2565b610a8360008383611b28565b6001600160a01b038216611e8957604051634b637e8f60e11b8152600060048201526024016109d2565b610a8382600083611b28565b6000813414611eb9576040516304fb820960e51b81523460048201526024016109d2565b5090565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e4fe1d946040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f419190612fa0565b90506001600160a01b038116611f6a576040516329b99a9560e11b815260040160405180910390fd5b6040805133602482018190527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0381811660448501526064808501889052855180860390910181526084909401909452602080840180516001600160e01b03166323b872dd60e01b1781528451610a8396881695899361139e93889360009283929091839182885af18061200b576040513d6000823e3d81fd5b50506000513d91508115612023578060011415612030565b6001600160a01b0384163b155b1561139e57604051635274afe760e01b81526001600160a01b03851660048201526024016109d2565b60405180606001604052806000801916815260200160006001600160401b0316815260200161209b604051806040016040528060008152602001600081525090565b905290565b60005b838110156120bb5781810151838201526020016120a3565b50506000910152565b600081518084526120dc8160208601602086016120a0565b601f01601f19169290920160200192915050565b602081526000610a6a60208301846120c4565b6001600160a01b03811681146110fc57600080fd5b6000806040838503121561212b57600080fd5b823561213681612103565b946020939093013593505050565b600060e0828403121561215657600080fd5b50919050565b60006020828403121561216e57600080fd5b81356001600160401b0381111561218457600080fd5b610c1184828501612144565b8351815260208085015190820152600060a08201604060a0604085015281865180845260c08601915060c08160051b8701019350602080890160005b8381101561220b5788870360bf190185528151805188528301518388018790526121f8878901826120c4565b97505093820193908201906001016121cc565b50508751606088015250505060208501516080850152509050610c11565b60006060828403121561215657600080fd5b60008083601f84011261224d57600080fd5b5081356001600160401b0381111561226457600080fd5b60208301915083602082850101111561227c57600080fd5b9250929050565b600080600080600080600060e0888a03121561229e57600080fd5b6122a88989612229565b96506060880135955060808801356001600160401b03808211156122cb57600080fd5b6122d78b838c0161223b565b909750955060a08a013591506122ec82612103565b90935060c0890135908082111561230257600080fd5b5061230f8a828b0161223b565b989b979a50959850939692959293505050565b60008060006060848603121561233757600080fd5b833561234281612103565b9250602084013561235281612103565b929592945050506040919091013590565b803563ffffffff8116811461237757600080fd5b919050565b6000806040838503121561238f57600080fd5b61213683612363565b80151581146110fc57600080fd5b600080604083850312156123b957600080fd5b82356001600160401b038111156123cf57600080fd5b6123db85828601612144565b92505060208301356123ec81612398565b809150509250929050565b8151815260208083015190820152604081016108b4565b803561ffff8116811461237757600080fd5b6000806040838503121561243357600080fd5b61243c83612363565b915061244a6020840161240e565b90509250929050565b60006020828403121561246557600080fd5b8135610a6a81612103565b60008060008060a0858703121561248657600080fd5b6124908686612229565b935060608501356001600160401b038111156124ab57600080fd5b6124b78782880161223b565b90945092505060808501356124cb81612103565b939692955090935050565b60008083601f8401126124e857600080fd5b5081356001600160401b038111156124ff57600080fd5b6020830191508360208260051b850101111561227c57600080fd5b6000806020838503121561252d57600080fd5b82356001600160401b0381111561254357600080fd5b61254f858286016124d6565b90969095509350505050565b60006020828403121561256d57600080fd5b610a6a82612363565b6000806000806060858703121561258c57600080fd5b61259585612363565b93506125a36020860161240e565b925060408501356001600160401b038111156125be57600080fd5b6125ca8782880161223b565b95989497509550505050565b600080600083850360808112156125ec57600080fd5b84356001600160401b0381111561260257600080fd5b61260e87828801612144565b9450506040601f198201121561262357600080fd5b50602084019150606084013561263881612103565b809150509250925092565b600060c082019050835182526001600160401b036020850151166020830152604084015161267e604084018280518252602090810151910152565b5082516080830152602083015160a0830152610a6a565b600080604083850312156126a857600080fd5b82356126b381612103565b915060208301356123ec81612103565b6000606082840312156126d557600080fd5b610a6a8383612229565b600181811c908216806126f357607f821691505b60208210810361215657634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b038111828210171561274b5761274b612713565b60405290565b604080519081016001600160401b038111828210171561274b5761274b612713565b604051601f8201601f191681016001600160401b038111828210171561279b5761279b612713565b604052919050565b60006001600160401b038211156127bc576127bc612713565b50601f01601f191660200190565b60006001600160401b03808411156127e4576127e4612713565b8360051b60206127f5818301612773565b86815291850191818101903684111561280d57600080fd5b865b848110156128d3578035868111156128275760008081fd5b8801606036829003121561283b5760008081fd5b612843612729565b61284c82612363565b815261285986830161240e565b86820152604080830135898111156128715760008081fd5b929092019136601f8401126128865760008081fd5b8235612899612894826127a3565b612773565b81815236898387010111156128ae5760008081fd5b818986018a83013760009181018901919091529082015284525091830191830161280f565b50979650505050505050565b600080858511156128ef57600080fd5b838611156128fc57600080fd5b5050820193919092039150565b6000845161291b8184602089016120a0565b8201838582376000930192835250909392505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b602081526000610c11602083018486612931565b634e487b7160e01b600052603260045260246000fd5b6000823561013e1983360301811261299b57600080fd5b9190910192915050565b6000808335601e198436030181126129bc57600080fd5b8301803591506001600160401b038211156129d657600080fd5b60200191503681900382131561227c57600080fd5b6001600160401b03811681146110fc57600080fd5b63ffffffff612a0e89612363565b1681526020880135602082015260006040890135612a2b816129eb565b6001600160401b03811660408401525087606083015260e06080830152612a5660e083018789612931565b6001600160a01b03861660a084015282810360c0840152612a78818587612931565b9a9950505050505050505050565b600060208284031215612a9857600080fd5b81516001600160401b03811115612aae57600080fd5b8201601f81018413612abf57600080fd5b8051612acd612894826127a3565b818152856020838501011115612ae257600080fd5b6116808260208301602086016120a0565b600060208284031215612b0557600080fd5b8135610a6a816129eb565b60018060a01b038516815283602082015261ffff83166040820152608060608201526000610ae460808301846120c4565b604081526000612b5460408301856120c4565b828103602084015261168081856120c4565b600060208284031215612b7857600080fd5b8151610a6a81612398565b6040815263ffffffff8351166040820152602083015160608201526000604084015160a06080840152612bb960e08401826120c4565b90506060850151603f198483030160a0850152612bd682826120c4565b60809690960151151560c08501525050506001600160a01b039190911660209091015290565b600060408284031215612c0e57600080fd5b612c16612751565b9050815181526020820151602082015292915050565b600060408284031215612c3e57600080fd5b610a6a8383612bfc565b601f821115611142576000816000526020600020601f850160051c81016020861015612c715750805b601f850160051c820191505b81811015612c9057828155600101612c7d565b505050505050565b81516001600160401b03811115612cb157612cb1612713565b612cc581612cbf84546126df565b84612c48565b602080601f831160018114612cfa5760008415612ce25750858301515b600019600386901b1c1916600185901b178555612c90565b600085815260208120601f198616915b82811015612d2957888601518255948401946001909101908401612d0a565b5085821015612d475787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b83811015612dd457888303603f190185528151805163ffffffff1684528781015161ffff16888501528601516060878501819052612dc0818601836120c4565b968901969450505090860190600101612d80565b509098975050505050505050565b600060408284031215612df457600080fd5b612dfc612751565b82358152602083013560208201528091505092915050565b634e487b7160e01b600052601160045260246000fd5b600082612e4757634e487b7160e01b600052601260045260246000fd5b500490565b80820281158282048414176108b4576108b4612e14565b803560208310156108b457600019602084900360031b1b1692915050565b6001600160c01b03198135818116916008851015612ea95780818660080360031b1b83161692505b505092915050565b6001600160401b0360c01b8560c01b16815263ffffffff60e01b8460e01b16600882015282600c82015260008251612ef081602c8501602087016120a0565b91909101602c0195945050505050565b808201808211156108b4576108b4612e14565b8481526001600160401b0360c01b8460c01b16602082015282602882015260008251612f468160488501602087016120a0565b9190910160480195945050505050565b600060808284031215612f6857600080fd5b612f70612729565b825181526020830151612f82816129eb565b6020820152612f948460408501612bfc565b60408201529392505050565b600060208284031215612fb257600080fd5b8151610a6a8161210356fea2646970667358221220a57d7f89465f52382b6c4fb535f012253eb27ee453204fb5020648385f95c20764736f6c63430008160033", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x251 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x7D25A05E GT PUSH2 0x139 JUMPI DUP1 PUSH4 0xBB0B6A53 GT PUSH2 0xB6 JUMPI DUP1 PUSH4 0xD045A0DC GT PUSH2 0x7A JUMPI DUP1 PUSH4 0xD045A0DC EQ PUSH2 0x755 JUMPI DUP1 PUSH4 0xD4243885 EQ PUSH2 0x768 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x788 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x7CE JUMPI DUP1 PUSH4 0xFC0C546A EQ PUSH2 0x461 JUMPI DUP1 PUSH4 0xFF7BD03D EQ PUSH2 0x7EE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xBB0B6A53 EQ PUSH2 0x6B4 JUMPI DUP1 PUSH4 0xBC70B354 EQ PUSH2 0x6E1 JUMPI DUP1 PUSH4 0xBD815DB0 EQ PUSH2 0x701 JUMPI DUP1 PUSH4 0xC7C7F5B3 EQ PUSH2 0x714 JUMPI DUP1 PUSH4 0xCA5EB5E1 EQ PUSH2 0x735 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x963EFCAA GT PUSH2 0xFD JUMPI DUP1 PUSH4 0x963EFCAA EQ PUSH2 0x60C JUMPI DUP1 PUSH4 0x9F68B964 EQ PUSH2 0x640 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x654 JUMPI DUP1 PUSH4 0xB731EA0A EQ PUSH2 0x674 JUMPI DUP1 PUSH4 0xB98BD070 EQ PUSH2 0x694 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x7D25A05E EQ PUSH2 0x56A JUMPI DUP1 PUSH4 0x82413EAC EQ PUSH2 0x5A5 JUMPI DUP1 PUSH4 0x857749B0 EQ PUSH2 0x5C5 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x5D9 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x5F7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x23B872DD GT PUSH2 0x1D2 JUMPI DUP1 PUSH4 0x5535D461 GT PUSH2 0x196 JUMPI DUP1 PUSH4 0x5535D461 EQ PUSH2 0x474 JUMPI DUP1 PUSH4 0x5A0DFE4D EQ PUSH2 0x494 JUMPI DUP1 PUSH4 0x5E280F11 EQ PUSH2 0x4CB JUMPI DUP1 PUSH4 0x6FC1B31E EQ PUSH2 0x4FF JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x51F JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x555 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x23B872DD EQ PUSH2 0x3D2 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x3F2 JUMPI DUP1 PUSH4 0x3400288B EQ PUSH2 0x414 JUMPI DUP1 PUSH4 0x3B6F743B EQ PUSH2 0x434 JUMPI DUP1 PUSH4 0x52AE2879 EQ PUSH2 0x461 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x134D4F25 GT PUSH2 0x219 JUMPI DUP1 PUSH4 0x134D4F25 EQ PUSH2 0x32D JUMPI DUP1 PUSH4 0x156A0D0F EQ PUSH2 0x355 JUMPI DUP1 PUSH4 0x17442B70 EQ PUSH2 0x37C JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x39E JUMPI DUP1 PUSH4 0x1F5E1334 EQ PUSH2 0x3BD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x256 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x281 JUMPI DUP1 PUSH4 0xD35B415 EQ PUSH2 0x2B1 JUMPI DUP1 PUSH4 0x111ECDAD EQ PUSH2 0x2E0 JUMPI DUP1 PUSH4 0x13137D65 EQ PUSH2 0x318 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x262 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x26B PUSH2 0x80E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x278 SWAP2 SWAP1 PUSH2 0x20F0 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x28D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2A1 PUSH2 0x29C CALLDATASIZE PUSH1 0x4 PUSH2 0x2118 JUMP JUMPDEST PUSH2 0x8A0 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x278 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2BD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2D1 PUSH2 0x2CC CALLDATASIZE PUSH1 0x4 PUSH2 0x215C JUMP JUMPDEST PUSH2 0x8BA JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x278 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x2190 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2EC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 SLOAD PUSH2 0x300 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x278 JUMP JUMPDEST PUSH2 0x32B PUSH2 0x326 CALLDATASIZE PUSH1 0x4 PUSH2 0x2283 JUMP JUMPDEST PUSH2 0x98B JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x339 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x342 PUSH1 0x2 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x278 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x361 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH3 0xB9270B PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP3 ADD MSTORE ADD PUSH2 0x278 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x388 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 DUP3 ADD MSTORE ADD PUSH2 0x278 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3AA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x7 SLOAD JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x278 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3C9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x342 PUSH1 0x1 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3DE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2A1 PUSH2 0x3ED CALLDATASIZE PUSH1 0x4 PUSH2 0x2322 JUMP JUMPDEST PUSH2 0xA4B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3FE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x12 JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x278 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x420 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x32B PUSH2 0x42F CALLDATASIZE PUSH1 0x4 PUSH2 0x237C JUMP JUMPDEST PUSH2 0xA71 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x440 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x454 PUSH2 0x44F CALLDATASIZE PUSH1 0x4 PUSH2 0x23A6 JUMP JUMPDEST PUSH2 0xA87 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x278 SWAP2 SWAP1 PUSH2 0x23F7 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x46D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP ADDRESS PUSH2 0x300 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x480 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x26B PUSH2 0x48F CALLDATASIZE PUSH1 0x4 PUSH2 0x2420 JUMP JUMPDEST PUSH2 0xAEE JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4A0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2A1 PUSH2 0x4AF CALLDATASIZE PUSH1 0x4 PUSH2 0x237C JUMP JUMPDEST PUSH4 0xFFFFFFFF SWAP2 SWAP1 SWAP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD EQ SWAP1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4D7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x300 PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x50B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x32B PUSH2 0x51A CALLDATASIZE PUSH1 0x4 PUSH2 0x2453 JUMP JUMPDEST PUSH2 0xB93 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x52B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3AF PUSH2 0x53A CALLDATASIZE PUSH1 0x4 PUSH2 0x2453 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x561 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x32B PUSH2 0xBF0 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x576 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x58D PUSH2 0x585 CALLDATASIZE PUSH1 0x4 PUSH2 0x237C JUMP JUMPDEST PUSH1 0x0 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x278 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5B1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2A1 PUSH2 0x5C0 CALLDATASIZE PUSH1 0x4 PUSH2 0x2470 JUMP JUMPDEST PUSH2 0xC04 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5D1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x6 PUSH2 0x402 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5E5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x300 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x603 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x26B PUSH2 0xC19 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x618 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3AF PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x64C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 PUSH2 0x2A1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x660 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2A1 PUSH2 0x66F CALLDATASIZE PUSH1 0x4 PUSH2 0x2118 JUMP JUMPDEST PUSH2 0xC28 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x680 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x2 SLOAD PUSH2 0x300 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6A0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x32B PUSH2 0x6AF CALLDATASIZE PUSH1 0x4 PUSH2 0x251A JUMP JUMPDEST PUSH2 0xC36 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6C0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3AF PUSH2 0x6CF CALLDATASIZE PUSH1 0x4 PUSH2 0x255B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6ED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x26B PUSH2 0x6FC CALLDATASIZE PUSH1 0x4 PUSH2 0x2576 JUMP JUMPDEST PUSH2 0xC50 JUMP JUMPDEST PUSH2 0x32B PUSH2 0x70F CALLDATASIZE PUSH1 0x4 PUSH2 0x251A JUMP JUMPDEST PUSH2 0xDF8 JUMP JUMPDEST PUSH2 0x727 PUSH2 0x722 CALLDATASIZE PUSH1 0x4 PUSH2 0x25D6 JUMP JUMPDEST PUSH2 0xF82 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x278 SWAP3 SWAP2 SWAP1 PUSH2 0x2643 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x741 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x32B PUSH2 0x750 CALLDATASIZE PUSH1 0x4 PUSH2 0x2453 JUMP JUMPDEST PUSH2 0xFB6 JUMP JUMPDEST PUSH2 0x32B PUSH2 0x763 CALLDATASIZE PUSH1 0x4 PUSH2 0x2283 JUMP JUMPDEST PUSH2 0x103C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x774 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x32B PUSH2 0x783 CALLDATASIZE PUSH1 0x4 PUSH2 0x2453 JUMP JUMPDEST PUSH2 0x106B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x794 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3AF PUSH2 0x7A3 CALLDATASIZE PUSH1 0x4 PUSH2 0x2695 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x32B PUSH2 0x7E9 CALLDATASIZE PUSH1 0x4 PUSH2 0x2453 JUMP JUMPDEST PUSH2 0x10C1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7FA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2A1 PUSH2 0x809 CALLDATASIZE PUSH1 0x4 PUSH2 0x26C3 JUMP JUMPDEST PUSH2 0x10FF JUMP JUMPDEST PUSH1 0x60 PUSH1 0x8 DUP1 SLOAD PUSH2 0x81D SWAP1 PUSH2 0x26DF JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x849 SWAP1 PUSH2 0x26DF JUMP JUMPDEST DUP1 ISZERO PUSH2 0x896 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x86B JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x896 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x879 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 CALLER PUSH2 0x8AE DUP2 DUP6 DUP6 PUSH2 0x1135 JUMP JUMPDEST PUSH1 0x1 SWAP2 POP POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x60 PUSH2 0x8ED PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB PUSH1 0x20 DUP1 DUP5 ADD DUP3 SWAP1 MSTORE DUP5 MLOAD DUP4 DUP2 MSTORE SWAP1 DUP2 ADD SWAP1 SWAP5 MSTORE SWAP2 SWAP6 POP SWAP2 DUP3 PUSH2 0x948 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE PUSH1 0x60 PUSH1 0x20 DUP3 ADD MSTORE DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x920 JUMPI SWAP1 POP JUMPDEST POP SWAP4 POP PUSH1 0x0 DUP1 PUSH2 0x96D PUSH1 0x40 DUP10 ADD CALLDATALOAD PUSH1 0x60 DUP11 ADD CALLDATALOAD PUSH2 0x968 PUSH1 0x20 DUP13 ADD DUP13 PUSH2 0x255B JUMP JUMPDEST PUSH2 0x1147 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE SWAP7 SWAP9 SWAP6 SWAP8 POP POP POP POP POP POP JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x9DB JUMPI PUSH1 0x40 MLOAD PUSH4 0x91AC5E4F PUSH1 0xE0 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x20 DUP8 ADD DUP1 CALLDATALOAD SWAP1 PUSH2 0x9F5 SWAP1 PUSH2 0x9F0 SWAP1 DUP11 PUSH2 0x255B JUMP JUMPDEST PUSH2 0x1183 JUMP JUMPDEST EQ PUSH2 0xA33 JUMPI PUSH2 0xA07 PUSH1 0x20 DUP9 ADD DUP9 PUSH2 0x255B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x309AFAF3 PUSH1 0xE2 SHL DUP2 MSTORE PUSH4 0xFFFFFFFF SWAP1 SWAP2 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x20 DUP9 ADD CALLDATALOAD PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 ADD PUSH2 0x9D2 JUMP JUMPDEST PUSH2 0xA42 DUP8 DUP8 DUP8 DUP8 DUP8 DUP8 DUP8 PUSH2 0x11BF JUMP JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 CALLER PUSH2 0xA59 DUP6 DUP3 DUP6 PUSH2 0x1326 JUMP JUMPDEST PUSH2 0xA64 DUP6 DUP6 DUP6 PUSH2 0x13A4 JUMP JUMPDEST PUSH1 0x1 SWAP2 POP POP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0xA79 PUSH2 0x1403 JUMP JUMPDEST PUSH2 0xA83 DUP3 DUP3 PUSH2 0x1430 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0xAB7 PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH1 0x60 DUP7 ADD CALLDATALOAD PUSH2 0x968 PUSH1 0x20 DUP9 ADD DUP9 PUSH2 0x255B JUMP JUMPDEST SWAP2 POP POP PUSH1 0x0 DUP1 PUSH2 0xAC7 DUP7 DUP5 PUSH2 0x1485 JUMP JUMPDEST SWAP1 SWAP3 POP SWAP1 POP PUSH2 0xAE4 PUSH2 0xADC PUSH1 0x20 DUP9 ADD DUP9 PUSH2 0x255B JUMP JUMPDEST DUP4 DUP4 DUP9 PUSH2 0x15A8 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 DUP1 SLOAD PUSH2 0xB12 SWAP1 PUSH2 0x26DF JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0xB3E SWAP1 PUSH2 0x26DF JUMP JUMPDEST DUP1 ISZERO PUSH2 0xB8B JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xB60 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xB8B JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xB6E JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 JUMP JUMPDEST PUSH2 0xB9B PUSH2 0x1403 JUMP JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH32 0xF0BE4F1E87349231D80C36B33F9E8639658EEAF474014DEE15A3E6A4D4414197 SWAP1 PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH2 0xBF8 PUSH2 0x1403 JUMP JUMPDEST PUSH2 0xC02 PUSH1 0x0 PUSH2 0x1689 JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND ADDRESS EQ JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x9 DUP1 SLOAD PUSH2 0x81D SWAP1 PUSH2 0x26DF JUMP JUMPDEST PUSH1 0x0 CALLER PUSH2 0x8AE DUP2 DUP6 DUP6 PUSH2 0x13A4 JUMP JUMPDEST PUSH2 0xC3E PUSH2 0x1403 JUMP JUMPDEST PUSH2 0xA83 PUSH2 0xC4B DUP3 DUP5 PUSH2 0x27CA JUMP JUMPDEST PUSH2 0x16D9 JUMP JUMPDEST PUSH4 0xFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH2 0xFFFF DUP8 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 DUP1 SLOAD PUSH1 0x60 SWAP3 SWAP2 SWAP1 PUSH2 0xC84 SWAP1 PUSH2 0x26DF JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0xCB0 SWAP1 PUSH2 0x26DF JUMP JUMPDEST DUP1 ISZERO PUSH2 0xCFD JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xCD2 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xCFD JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xCE0 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP DUP1 MLOAD PUSH1 0x0 SUB PUSH2 0xD4D JUMPI DUP4 DUP4 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP5 POP PUSH2 0xC11 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP4 SWAP1 SUB PUSH2 0xD5D JUMPI SWAP1 POP PUSH2 0xC11 JUMP JUMPDEST PUSH1 0x2 DUP4 LT PUSH2 0xDDB JUMPI PUSH2 0xDA4 DUP5 DUP5 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x17E0 SWAP3 POP POP POP JUMP JUMPDEST DUP1 PUSH2 0xDB2 DUP5 PUSH1 0x2 DUP2 DUP9 PUSH2 0x28DF JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0xDC4 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x2909 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP2 POP POP PUSH2 0xC11 JUMP JUMPDEST DUP4 DUP4 PUSH1 0x40 MLOAD PUSH4 0x9A6D49CD PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x9D2 SWAP3 SWAP2 SWAP1 PUSH2 0x295A JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xF01 JUMPI CALLDATASIZE DUP4 DUP4 DUP4 DUP2 DUP2 LT PUSH2 0xE16 JUMPI PUSH2 0xE16 PUSH2 0x296E JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL DUP2 ADD SWAP1 PUSH2 0xE28 SWAP2 SWAP1 PUSH2 0x2984 JUMP JUMPDEST SWAP1 POP PUSH2 0xE5B PUSH2 0xE3A PUSH1 0x20 DUP4 ADD DUP4 PUSH2 0x255B JUMP JUMPDEST PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH4 0xFFFFFFFF SWAP2 SWAP1 SWAP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD EQ SWAP1 JUMP JUMPDEST PUSH2 0xE65 JUMPI POP PUSH2 0xEF9 JUMP JUMPDEST ADDRESS PUSH4 0xD045A0DC PUSH1 0xC0 DUP4 ADD CALLDATALOAD DUP4 PUSH1 0xA0 DUP2 ADD CALLDATALOAD PUSH2 0xE84 PUSH2 0x100 DUP4 ADD DUP4 PUSH2 0x29A5 JUMP JUMPDEST PUSH2 0xE95 PUSH2 0x100 DUP10 ADD PUSH1 0xE0 DUP11 ADD PUSH2 0x2453 JUMP JUMPDEST PUSH2 0xEA3 PUSH2 0x120 DUP11 ADD DUP11 PUSH2 0x29A5 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP10 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xEC5 SWAP8 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x2A00 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP9 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xEDE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xEF2 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP JUMPDEST PUSH1 0x1 ADD PUSH2 0xDFB JUMP JUMPDEST POP CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x8E9E7099 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xF40 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0xF68 SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x2A86 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x8351EEA7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x9D2 SWAP2 SWAP1 PUSH2 0x20F0 JUMP JUMPDEST PUSH2 0xF8A PUSH2 0x2059 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0xFA9 DUP6 DUP6 DUP6 PUSH2 0x180C JUMP JUMPDEST SWAP2 POP SWAP2 POP JUMPDEST SWAP4 POP SWAP4 SWAP2 POP POP JUMP JUMPDEST PUSH2 0xFBE PUSH2 0x1403 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xCA5EB5E1 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH32 0x0 AND SWAP1 PUSH4 0xCA5EB5E1 SWAP1 PUSH1 0x24 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1021 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1035 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST CALLER ADDRESS EQ PUSH2 0x105C JUMPI PUSH1 0x40 MLOAD PUSH4 0x29A949D PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xA42 DUP8 DUP8 DUP8 DUP8 DUP8 DUP8 DUP8 PUSH2 0xA33 JUMP JUMPDEST PUSH2 0x1073 PUSH2 0x1403 JUMP JUMPDEST PUSH1 0x2 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH32 0xD48D879CEF83A1C0BDDA516F27B13DDB1B3F8BBAC1C9E1511BB2A659C2427760 SWAP1 PUSH1 0x20 ADD PUSH2 0xBE5 JUMP JUMPDEST PUSH2 0x10C9 PUSH2 0x1403 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x10F3 JUMPI PUSH1 0x40 MLOAD PUSH4 0x1E4FBDF7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x9D2 JUMP JUMPDEST PUSH2 0x10FC DUP2 PUSH2 0x1689 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD DUP1 CALLDATALOAD SWAP1 PUSH1 0x1 SWAP1 DUP4 SWAP1 PUSH2 0x1117 SWAP1 DUP7 PUSH2 0x255B JUMP JUMPDEST PUSH4 0xFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD EQ SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x1142 DUP4 DUP4 DUP4 PUSH1 0x1 PUSH2 0x1907 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1153 DUP6 PUSH2 0x19DC JUMP JUMPDEST SWAP2 POP DUP2 SWAP1 POP DUP4 DUP2 LT ISZERO PUSH2 0xFAE JUMPI PUSH1 0x40 MLOAD PUSH4 0x71C4EFED PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x24 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0x44 ADD PUSH2 0x9D2 JUMP JUMPDEST PUSH4 0xFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP1 PUSH2 0x8B4 JUMPI PUSH1 0x40 MLOAD PUSH4 0xF6FF4FB7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH4 0xFFFFFFFF DUP5 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x9D2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x11D1 PUSH2 0x11CE DUP8 DUP8 PUSH2 0x1A13 JUMP JUMPDEST SWAP1 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x11FD DUP3 PUSH2 0x11EB PUSH2 0x11E6 DUP11 DUP11 PUSH2 0x1A2B JUMP JUMPDEST PUSH2 0x1A4E JUMP JUMPDEST PUSH2 0x11F8 PUSH1 0x20 DUP14 ADD DUP14 PUSH2 0x255B JUMP JUMPDEST PUSH2 0x1A83 JUMP JUMPDEST SWAP1 POP PUSH1 0x28 DUP7 GT ISZERO PUSH2 0x12C4 JUMPI PUSH1 0x0 PUSH2 0x123A PUSH2 0x121D PUSH1 0x60 DUP13 ADD PUSH1 0x40 DUP14 ADD PUSH2 0x2AF3 JUMP JUMPDEST PUSH2 0x122A PUSH1 0x20 DUP14 ADD DUP14 PUSH2 0x255B JUMP JUMPDEST DUP5 PUSH2 0x1235 DUP13 DUP13 PUSH2 0x1AAB JUMP JUMPDEST PUSH2 0x1AF6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x3E5AC809 PUSH1 0xE1 SHL DUP2 MSTORE SWAP1 SWAP2 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND SWAP1 PUSH4 0x7CB59012 SWAP1 PUSH2 0x1290 SWAP1 DUP7 SWAP1 DUP14 SWAP1 PUSH1 0x0 SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0x2B10 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x12AA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x12BE JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP9 PUSH32 0xEFED6D3500546B29533B128A29E3A94D70788727F0507505AC12EAF2E578FD9C PUSH2 0x12FD PUSH1 0x20 DUP14 ADD DUP14 PUSH2 0x255B JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0xFFFFFFFF SWAP1 SWAP3 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP7 SWAP1 MSTORE ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP7 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH1 0x0 NOT DUP2 EQ PUSH2 0x139E JUMPI DUP2 DUP2 LT ISZERO PUSH2 0x138F JUMPI PUSH1 0x40 MLOAD PUSH4 0x7DC7A0D9 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x44 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x64 ADD PUSH2 0x9D2 JUMP JUMPDEST PUSH2 0x139E DUP5 DUP5 DUP5 DUP5 SUB PUSH1 0x0 PUSH2 0x1907 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x13CE JUMPI PUSH1 0x40 MLOAD PUSH4 0x4B637E8F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x0 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x9D2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x13F8 JUMPI PUSH1 0x40 MLOAD PUSH4 0xEC442F05 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x9D2 JUMP JUMPDEST PUSH2 0x1142 DUP4 DUP4 DUP4 PUSH2 0x1B28 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xC02 JUMPI PUSH1 0x40 MLOAD PUSH4 0x118CDAA7 PUSH1 0xE0 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x9D2 JUMP JUMPDEST PUSH4 0xFFFFFFFF DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP5 SWAP1 SSTORE DUP2 MLOAD SWAP3 DUP4 MSTORE DUP3 ADD DUP4 SWAP1 MSTORE PUSH32 0x238399D427B947898EDB290F5FF0F9109849B1C3BA196A42E35F00C50A54B98B SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP JUMP JUMPDEST PUSH1 0x60 DUP1 PUSH1 0x0 PUSH2 0x14E2 DUP6 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x149B DUP7 PUSH2 0x1C52 JUMP JUMPDEST PUSH2 0x14A8 PUSH1 0xA0 DUP10 ADD DUP10 PUSH2 0x29A5 JUMP JUMPDEST DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x1C7E SWAP3 POP POP POP JUMP JUMPDEST SWAP1 SWAP4 POP SWAP1 POP PUSH1 0x0 DUP2 PUSH2 0x14F5 JUMPI PUSH1 0x1 PUSH2 0x14F8 JUMP JUMPDEST PUSH1 0x2 JUMPDEST SWAP1 POP PUSH2 0x1518 PUSH2 0x150A PUSH1 0x20 DUP9 ADD DUP9 PUSH2 0x255B JUMP JUMPDEST DUP3 PUSH2 0x6FC PUSH1 0x80 DUP11 ADD DUP11 PUSH2 0x29A5 JUMP JUMPDEST PUSH1 0x4 SLOAD SWAP1 SWAP4 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP1 ISZERO PUSH2 0x159E JUMPI PUSH1 0x40 MLOAD PUSH4 0x43A78EB PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND SWAP1 PUSH4 0x43A78EB SWAP1 PUSH2 0x155B SWAP1 DUP9 SWAP1 DUP9 SWAP1 PUSH1 0x4 ADD PUSH2 0x2B41 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1578 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x159C SWAP2 SWAP1 PUSH2 0x2B66 JUMP JUMPDEST POP JUMPDEST POP POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xDDC28C58 PUSH1 0x40 MLOAD DUP1 PUSH1 0xA0 ADD PUSH1 0x40 MSTORE DUP1 DUP9 PUSH4 0xFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x160B DUP10 PUSH2 0x1183 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD DUP8 DUP2 MSTORE PUSH1 0x20 ADD DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP6 ISZERO ISZERO DUP2 MSTORE POP ADDRESS PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1640 SWAP3 SWAP2 SWAP1 PUSH2 0x2B83 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x165C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1680 SWAP2 SWAP1 PUSH2 0x2C2C JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND DUP2 OR DUP5 SSTORE PUSH1 0x40 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP3 DUP4 SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0x17B0 JUMPI PUSH2 0x170B DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x16FA JUMPI PUSH2 0x16FA PUSH2 0x296E JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 ADD MLOAD PUSH2 0x17E0 JUMP JUMPDEST DUP2 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x171D JUMPI PUSH2 0x171D PUSH2 0x296E JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 ADD MLOAD PUSH1 0x3 PUSH1 0x0 DUP5 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x173F JUMPI PUSH2 0x173F PUSH2 0x296E JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 ADD MLOAD PUSH4 0xFFFFFFFF AND PUSH4 0xFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP5 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x1779 JUMPI PUSH2 0x1779 PUSH2 0x296E JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x20 ADD MLOAD PUSH2 0xFFFF AND PUSH2 0xFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SWAP1 DUP2 PUSH2 0x17A7 SWAP2 SWAP1 PUSH2 0x2C98 JUMP JUMPDEST POP PUSH1 0x1 ADD PUSH2 0x16DC JUMP JUMPDEST POP PUSH32 0xBE4864A8E820971C0247F5992E2DA559595F7BF076A21CB5928D443D2A13B674 DUP2 PUSH1 0x40 MLOAD PUSH2 0xBE5 SWAP2 SWAP1 PUSH2 0x2D57 JUMP JUMPDEST PUSH1 0x2 DUP2 ADD MLOAD PUSH2 0xFFFF DUP2 AND PUSH1 0x3 EQ PUSH2 0xA83 JUMPI DUP2 PUSH1 0x40 MLOAD PUSH4 0x9A6D49CD PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x9D2 SWAP2 SWAP1 PUSH2 0x20F0 JUMP JUMPDEST PUSH2 0x1814 PUSH2 0x2059 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 DUP1 PUSH2 0x184B CALLER PUSH1 0x40 DUP10 ADD CALLDATALOAD PUSH1 0x60 DUP11 ADD CALLDATALOAD PUSH2 0x1846 PUSH1 0x20 DUP13 ADD DUP13 PUSH2 0x255B JUMP JUMPDEST PUSH2 0x1CF8 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH1 0x0 DUP1 PUSH2 0x185C DUP10 DUP5 PUSH2 0x1485 JUMP JUMPDEST SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x1888 PUSH2 0x1871 PUSH1 0x20 DUP12 ADD DUP12 PUSH2 0x255B JUMP JUMPDEST DUP4 DUP4 PUSH2 0x1882 CALLDATASIZE DUP14 SWAP1 SUB DUP14 ADD DUP14 PUSH2 0x2DE2 JUMP JUMPDEST DUP12 PUSH2 0x1D1E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE DUP6 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 ADD DUP7 SWAP1 MSTORE DUP3 MLOAD SWAP3 SWAP9 POP SWAP1 SWAP7 POP CALLER SWAP2 SWAP1 PUSH32 0x85496B760A4B7F8D66384B9DF21B381F5D1B1E79F229A47AAF4C232EDC2FE59A SWAP1 PUSH2 0x18D6 SWAP1 DUP14 ADD DUP14 PUSH2 0x255B JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0xFFFFFFFF SWAP1 SWAP3 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP10 SWAP1 MSTORE DUP2 ADD DUP8 SWAP1 MSTORE PUSH1 0x60 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP SWAP4 POP SWAP4 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH2 0x1931 JUMPI PUSH1 0x40 MLOAD PUSH4 0xE602DF05 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x9D2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x195B JUMPI PUSH1 0x40 MLOAD PUSH4 0x4A1406B1 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x0 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x9D2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP8 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 DUP3 SWAP1 SSTORE DUP1 ISZERO PUSH2 0x139E JUMPI DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 DUP5 PUSH1 0x40 MLOAD PUSH2 0x19CE SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH2 0x1A09 DUP2 DUP5 PUSH2 0x2E2A JUMP JUMPDEST PUSH2 0x8B4 SWAP2 SWAP1 PUSH2 0x2E4C JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1A22 PUSH1 0x20 DUP3 DUP5 DUP7 PUSH2 0x28DF JUMP JUMPDEST PUSH2 0xA6A SWAP2 PUSH2 0x2E63 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1A3B PUSH1 0x28 PUSH1 0x20 DUP5 DUP7 PUSH2 0x28DF JUMP JUMPDEST PUSH2 0x1A44 SWAP2 PUSH2 0x2E81 JUMP JUMPDEST PUSH1 0xC0 SHR SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x8B4 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP5 AND PUSH2 0x2E4C JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH2 0x1A99 JUMPI PUSH2 0xDEAD SWAP4 POP JUMPDEST PUSH2 0x1AA3 DUP5 DUP5 PUSH2 0x1E29 JUMP JUMPDEST POP SWAP1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x1ABA DUP3 PUSH1 0x28 DUP2 DUP7 PUSH2 0x28DF JUMP JUMPDEST DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP5 DUP5 DUP5 DUP5 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x1B0F SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x2EB1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP1 POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x1B53 JUMPI DUP1 PUSH1 0x7 PUSH1 0x0 DUP3 DUP3 SLOAD PUSH2 0x1B48 SWAP2 SWAP1 PUSH2 0x2F00 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP PUSH2 0x1BC5 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 DUP2 LT ISZERO PUSH2 0x1BA6 JUMPI PUSH1 0x40 MLOAD PUSH4 0x391434E3 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x44 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x64 ADD PUSH2 0x9D2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP1 DUP3 SWAP1 SUB SWAP1 SSTORE JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x1BE1 JUMPI PUSH1 0x7 DUP1 SLOAD DUP3 SWAP1 SUB SWAP1 SSTORE PUSH2 0x1C00 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD DUP3 ADD SWAP1 SSTORE JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP4 PUSH1 0x40 MLOAD PUSH2 0x1C45 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x8B4 PUSH32 0x0 DUP4 PUSH2 0x2E2A JUMP JUMPDEST DUP1 MLOAD PUSH1 0x60 SWAP1 ISZERO ISZERO DUP1 PUSH2 0x1CC7 JUMPI DUP5 DUP5 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x1CB3 SWAP3 SWAP2 SWAP1 SWAP2 DUP3 MSTORE PUSH1 0xC0 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0xC0 SHL SUB NOT AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x28 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH2 0x1CEE JUMP JUMPDEST DUP5 DUP5 CALLER DUP6 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x1CDE SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x2F13 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE JUMPDEST SWAP2 POP SWAP4 POP SWAP4 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1D06 DUP6 DUP6 DUP6 PUSH2 0x1147 JUMP JUMPDEST SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x1D15 DUP7 DUP4 PUSH2 0x1E5F JUMP JUMPDEST SWAP5 POP SWAP5 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x1D26 PUSH2 0x2059 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1D35 DUP5 PUSH1 0x0 ADD MLOAD PUSH2 0x1E95 JUMP JUMPDEST PUSH1 0x20 DUP6 ADD MLOAD SWAP1 SWAP2 POP ISZERO PUSH2 0x1D4F JUMPI PUSH2 0x1D4F DUP5 PUSH1 0x20 ADD MLOAD PUSH2 0x1EBD JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x2637A450 DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0xA0 ADD PUSH1 0x40 MSTORE DUP1 DUP12 PUSH4 0xFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1D9F DUP13 PUSH2 0x1183 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD DUP11 DUP2 MSTORE PUSH1 0x20 ADD DUP10 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP10 PUSH1 0x20 ADD MLOAD GT ISZERO ISZERO DUP2 MSTORE POP DUP7 PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1DDB SWAP3 SWAP2 SWAP1 PUSH2 0x2B83 JUMP JUMPDEST PUSH1 0x80 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP9 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1DF9 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1E1E SWAP2 SWAP1 PUSH2 0x2F56 JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x1E53 JUMPI PUSH1 0x40 MLOAD PUSH4 0xEC442F05 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x9D2 JUMP JUMPDEST PUSH2 0xA83 PUSH1 0x0 DUP4 DUP4 PUSH2 0x1B28 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x1E89 JUMPI PUSH1 0x40 MLOAD PUSH4 0x4B637E8F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x0 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x9D2 JUMP JUMPDEST PUSH2 0xA83 DUP3 PUSH1 0x0 DUP4 PUSH2 0x1B28 JUMP JUMPDEST PUSH1 0x0 DUP2 CALLVALUE EQ PUSH2 0x1EB9 JUMPI PUSH1 0x40 MLOAD PUSH4 0x4FB8209 PUSH1 0xE5 SHL DUP2 MSTORE CALLVALUE PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x9D2 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xE4FE1D94 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1F1D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1F41 SWAP2 SWAP1 PUSH2 0x2FA0 JUMP JUMPDEST SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x1F6A JUMPI PUSH1 0x40 MLOAD PUSH4 0x29B99A95 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD CALLER PUSH1 0x24 DUP3 ADD DUP2 SWAP1 MSTORE PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 DUP2 AND PUSH1 0x44 DUP6 ADD MSTORE PUSH1 0x64 DUP1 DUP6 ADD DUP9 SWAP1 MSTORE DUP6 MLOAD DUP1 DUP7 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x84 SWAP1 SWAP5 ADD SWAP1 SWAP5 MSTORE PUSH1 0x20 DUP1 DUP5 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0x23B872DD PUSH1 0xE0 SHL OR DUP2 MSTORE DUP5 MLOAD PUSH2 0xA83 SWAP7 DUP9 AND SWAP6 DUP10 SWAP4 PUSH2 0x139E SWAP4 DUP9 SWAP4 PUSH1 0x0 SWAP3 DUP4 SWAP3 SWAP1 SWAP2 DUP4 SWAP2 DUP3 DUP9 GAS CALL DUP1 PUSH2 0x200B JUMPI PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY RETURNDATASIZE DUP2 REVERT JUMPDEST POP POP PUSH1 0x0 MLOAD RETURNDATASIZE SWAP2 POP DUP2 ISZERO PUSH2 0x2023 JUMPI DUP1 PUSH1 0x1 EQ ISZERO PUSH2 0x2030 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND EXTCODESIZE ISZERO JUMPDEST ISZERO PUSH2 0x139E JUMPI PUSH1 0x40 MLOAD PUSH4 0x5274AFE7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x9D2 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP1 NOT AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x209B PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST SWAP1 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x20BB JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x20A3 JUMP JUMPDEST POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x20DC DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x20A0 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0xA6A PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x20C4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x10FC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x212B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x2136 DUP2 PUSH2 0x2103 JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0xE0 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2156 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x216E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x2184 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xC11 DUP5 DUP3 DUP6 ADD PUSH2 0x2144 JUMP JUMPDEST DUP4 MLOAD DUP2 MSTORE PUSH1 0x20 DUP1 DUP6 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0x0 PUSH1 0xA0 DUP3 ADD PUSH1 0x40 PUSH1 0xA0 PUSH1 0x40 DUP6 ADD MSTORE DUP2 DUP7 MLOAD DUP1 DUP5 MSTORE PUSH1 0xC0 DUP7 ADD SWAP2 POP PUSH1 0xC0 DUP2 PUSH1 0x5 SHL DUP8 ADD ADD SWAP4 POP PUSH1 0x20 DUP1 DUP10 ADD PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x220B JUMPI DUP9 DUP8 SUB PUSH1 0xBF NOT ADD DUP6 MSTORE DUP2 MLOAD DUP1 MLOAD DUP9 MSTORE DUP4 ADD MLOAD DUP4 DUP9 ADD DUP8 SWAP1 MSTORE PUSH2 0x21F8 DUP8 DUP10 ADD DUP3 PUSH2 0x20C4 JUMP JUMPDEST SWAP8 POP POP SWAP4 DUP3 ADD SWAP4 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x21CC JUMP JUMPDEST POP POP DUP8 MLOAD PUSH1 0x60 DUP9 ADD MSTORE POP POP POP PUSH1 0x20 DUP6 ADD MLOAD PUSH1 0x80 DUP6 ADD MSTORE POP SWAP1 POP PUSH2 0xC11 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2156 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x224D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x2264 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x227C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x229E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x22A8 DUP10 DUP10 PUSH2 0x2229 JUMP JUMPDEST SWAP7 POP PUSH1 0x60 DUP9 ADD CALLDATALOAD SWAP6 POP PUSH1 0x80 DUP9 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH2 0x22CB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x22D7 DUP12 DUP4 DUP13 ADD PUSH2 0x223B JUMP JUMPDEST SWAP1 SWAP8 POP SWAP6 POP PUSH1 0xA0 DUP11 ADD CALLDATALOAD SWAP2 POP PUSH2 0x22EC DUP3 PUSH2 0x2103 JUMP JUMPDEST SWAP1 SWAP4 POP PUSH1 0xC0 DUP10 ADD CALLDATALOAD SWAP1 DUP1 DUP3 GT ISZERO PUSH2 0x2302 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x230F DUP11 DUP3 DUP12 ADD PUSH2 0x223B JUMP JUMPDEST SWAP9 SWAP12 SWAP8 SWAP11 POP SWAP6 SWAP9 POP SWAP4 SWAP7 SWAP3 SWAP6 SWAP3 SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x2337 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x2342 DUP2 PUSH2 0x2103 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x2352 DUP2 PUSH2 0x2103 JUMP JUMPDEST SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x2377 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x238F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2136 DUP4 PUSH2 0x2363 JUMP JUMPDEST DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x10FC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x23B9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x23CF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x23DB DUP6 DUP3 DUP7 ADD PUSH2 0x2144 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x23EC DUP2 PUSH2 0x2398 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 DUP1 DUP4 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0x40 DUP2 ADD PUSH2 0x8B4 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0xFFFF DUP2 AND DUP2 EQ PUSH2 0x2377 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2433 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x243C DUP4 PUSH2 0x2363 JUMP JUMPDEST SWAP2 POP PUSH2 0x244A PUSH1 0x20 DUP5 ADD PUSH2 0x240E JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2465 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0xA6A DUP2 PUSH2 0x2103 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xA0 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x2486 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2490 DUP7 DUP7 PUSH2 0x2229 JUMP JUMPDEST SWAP4 POP PUSH1 0x60 DUP6 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x24AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x24B7 DUP8 DUP3 DUP9 ADD PUSH2 0x223B JUMP JUMPDEST SWAP1 SWAP5 POP SWAP3 POP POP PUSH1 0x80 DUP6 ADD CALLDATALOAD PUSH2 0x24CB DUP2 PUSH2 0x2103 JUMP JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP1 SWAP4 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x24E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x24FF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 PUSH1 0x5 SHL DUP6 ADD ADD GT ISZERO PUSH2 0x227C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x20 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x252D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x2543 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x254F DUP6 DUP3 DUP7 ADD PUSH2 0x24D6 JUMP JUMPDEST SWAP1 SWAP7 SWAP1 SWAP6 POP SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x256D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xA6A DUP3 PUSH2 0x2363 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x60 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x258C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2595 DUP6 PUSH2 0x2363 JUMP JUMPDEST SWAP4 POP PUSH2 0x25A3 PUSH1 0x20 DUP7 ADD PUSH2 0x240E JUMP JUMPDEST SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x25BE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x25CA DUP8 DUP3 DUP9 ADD PUSH2 0x223B JUMP JUMPDEST SWAP6 SWAP9 SWAP5 SWAP8 POP SWAP6 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP4 DUP6 SUB PUSH1 0x80 DUP2 SLT ISZERO PUSH2 0x25EC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x2602 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x260E DUP8 DUP3 DUP9 ADD PUSH2 0x2144 JUMP JUMPDEST SWAP5 POP POP PUSH1 0x40 PUSH1 0x1F NOT DUP3 ADD SLT ISZERO PUSH2 0x2623 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x20 DUP5 ADD SWAP2 POP PUSH1 0x60 DUP5 ADD CALLDATALOAD PUSH2 0x2638 DUP2 PUSH2 0x2103 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0xC0 DUP3 ADD SWAP1 POP DUP4 MLOAD DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB PUSH1 0x20 DUP6 ADD MLOAD AND PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x40 DUP5 ADD MLOAD PUSH2 0x267E PUSH1 0x40 DUP5 ADD DUP3 DUP1 MLOAD DUP3 MSTORE PUSH1 0x20 SWAP1 DUP2 ADD MLOAD SWAP2 ADD MSTORE JUMP JUMPDEST POP DUP3 MLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0xA0 DUP4 ADD MSTORE PUSH2 0xA6A JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x26A8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x26B3 DUP2 PUSH2 0x2103 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x23EC DUP2 PUSH2 0x2103 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x26D5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xA6A DUP4 DUP4 PUSH2 0x2229 JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x26F3 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 SUB PUSH2 0x2156 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x60 DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x274B JUMPI PUSH2 0x274B PUSH2 0x2713 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP1 DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x274B JUMPI PUSH2 0x274B PUSH2 0x2713 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT AND DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x279B JUMPI PUSH2 0x279B PUSH2 0x2713 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT ISZERO PUSH2 0x27BC JUMPI PUSH2 0x27BC PUSH2 0x2713 JUMP JUMPDEST POP PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP5 GT ISZERO PUSH2 0x27E4 JUMPI PUSH2 0x27E4 PUSH2 0x2713 JUMP JUMPDEST DUP4 PUSH1 0x5 SHL PUSH1 0x20 PUSH2 0x27F5 DUP2 DUP4 ADD PUSH2 0x2773 JUMP JUMPDEST DUP7 DUP2 MSTORE SWAP2 DUP6 ADD SWAP2 DUP2 DUP2 ADD SWAP1 CALLDATASIZE DUP5 GT ISZERO PUSH2 0x280D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0x28D3 JUMPI DUP1 CALLDATALOAD DUP7 DUP2 GT ISZERO PUSH2 0x2827 JUMPI PUSH1 0x0 DUP1 DUP2 REVERT JUMPDEST DUP9 ADD PUSH1 0x60 CALLDATASIZE DUP3 SWAP1 SUB SLT ISZERO PUSH2 0x283B JUMPI PUSH1 0x0 DUP1 DUP2 REVERT JUMPDEST PUSH2 0x2843 PUSH2 0x2729 JUMP JUMPDEST PUSH2 0x284C DUP3 PUSH2 0x2363 JUMP JUMPDEST DUP2 MSTORE PUSH2 0x2859 DUP7 DUP4 ADD PUSH2 0x240E JUMP JUMPDEST DUP7 DUP3 ADD MSTORE PUSH1 0x40 DUP1 DUP4 ADD CALLDATALOAD DUP10 DUP2 GT ISZERO PUSH2 0x2871 JUMPI PUSH1 0x0 DUP1 DUP2 REVERT JUMPDEST SWAP3 SWAP1 SWAP3 ADD SWAP2 CALLDATASIZE PUSH1 0x1F DUP5 ADD SLT PUSH2 0x2886 JUMPI PUSH1 0x0 DUP1 DUP2 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x2899 PUSH2 0x2894 DUP3 PUSH2 0x27A3 JUMP JUMPDEST PUSH2 0x2773 JUMP JUMPDEST DUP2 DUP2 MSTORE CALLDATASIZE DUP10 DUP4 DUP8 ADD ADD GT ISZERO PUSH2 0x28AE JUMPI PUSH1 0x0 DUP1 DUP2 REVERT JUMPDEST DUP2 DUP10 DUP7 ADD DUP11 DUP4 ADD CALLDATACOPY PUSH1 0x0 SWAP2 DUP2 ADD DUP10 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 DUP3 ADD MSTORE DUP5 MSTORE POP SWAP2 DUP4 ADD SWAP2 DUP4 ADD PUSH2 0x280F JUMP JUMPDEST POP SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP6 DUP6 GT ISZERO PUSH2 0x28EF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 DUP7 GT ISZERO PUSH2 0x28FC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP3 ADD SWAP4 SWAP2 SWAP1 SWAP3 SUB SWAP2 POP JUMP JUMPDEST PUSH1 0x0 DUP5 MLOAD PUSH2 0x291B DUP2 DUP5 PUSH1 0x20 DUP10 ADD PUSH2 0x20A0 JUMP JUMPDEST DUP3 ADD DUP4 DUP6 DUP3 CALLDATACOPY PUSH1 0x0 SWAP4 ADD SWAP3 DUP4 MSTORE POP SWAP1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP2 DUP4 MSTORE DUP2 DUP2 PUSH1 0x20 DUP6 ADD CALLDATACOPY POP PUSH1 0x0 DUP3 DUP3 ADD PUSH1 0x20 SWAP1 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x1F SWAP1 SWAP2 ADD PUSH1 0x1F NOT AND SWAP1 SWAP2 ADD ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0xC11 PUSH1 0x20 DUP4 ADD DUP5 DUP7 PUSH2 0x2931 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 CALLDATALOAD PUSH2 0x13E NOT DUP4 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x299B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 CALLDATALOAD PUSH1 0x1E NOT DUP5 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x29BC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 ADD DUP1 CALLDATALOAD SWAP2 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT ISZERO PUSH2 0x29D6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 ADD SWAP2 POP CALLDATASIZE DUP2 SWAP1 SUB DUP3 SGT ISZERO PUSH2 0x227C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x10FC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH4 0xFFFFFFFF PUSH2 0x2A0E DUP10 PUSH2 0x2363 JUMP JUMPDEST AND DUP2 MSTORE PUSH1 0x20 DUP9 ADD CALLDATALOAD PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 PUSH1 0x40 DUP10 ADD CALLDATALOAD PUSH2 0x2A2B DUP2 PUSH2 0x29EB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 AND PUSH1 0x40 DUP5 ADD MSTORE POP DUP8 PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0xE0 PUSH1 0x80 DUP4 ADD MSTORE PUSH2 0x2A56 PUSH1 0xE0 DUP4 ADD DUP8 DUP10 PUSH2 0x2931 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0xA0 DUP5 ADD MSTORE DUP3 DUP2 SUB PUSH1 0xC0 DUP5 ADD MSTORE PUSH2 0x2A78 DUP2 DUP6 DUP8 PUSH2 0x2931 JUMP JUMPDEST SWAP11 SWAP10 POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2A98 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x2AAE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD PUSH1 0x1F DUP2 ADD DUP5 SGT PUSH2 0x2ABF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD PUSH2 0x2ACD PUSH2 0x2894 DUP3 PUSH2 0x27A3 JUMP JUMPDEST DUP2 DUP2 MSTORE DUP6 PUSH1 0x20 DUP4 DUP6 ADD ADD GT ISZERO PUSH2 0x2AE2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1680 DUP3 PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x20A0 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2B05 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0xA6A DUP2 PUSH2 0x29EB JUMP JUMPDEST PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB DUP6 AND DUP2 MSTORE DUP4 PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0xFFFF DUP4 AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x80 PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0xAE4 PUSH1 0x80 DUP4 ADD DUP5 PUSH2 0x20C4 JUMP JUMPDEST PUSH1 0x40 DUP2 MSTORE PUSH1 0x0 PUSH2 0x2B54 PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0x20C4 JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x1680 DUP2 DUP6 PUSH2 0x20C4 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2B78 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0xA6A DUP2 PUSH2 0x2398 JUMP JUMPDEST PUSH1 0x40 DUP2 MSTORE PUSH4 0xFFFFFFFF DUP4 MLOAD AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x0 PUSH1 0x40 DUP5 ADD MLOAD PUSH1 0xA0 PUSH1 0x80 DUP5 ADD MSTORE PUSH2 0x2BB9 PUSH1 0xE0 DUP5 ADD DUP3 PUSH2 0x20C4 JUMP JUMPDEST SWAP1 POP PUSH1 0x60 DUP6 ADD MLOAD PUSH1 0x3F NOT DUP5 DUP4 SUB ADD PUSH1 0xA0 DUP6 ADD MSTORE PUSH2 0x2BD6 DUP3 DUP3 PUSH2 0x20C4 JUMP JUMPDEST PUSH1 0x80 SWAP7 SWAP1 SWAP7 ADD MLOAD ISZERO ISZERO PUSH1 0xC0 DUP6 ADD MSTORE POP POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND PUSH1 0x20 SWAP1 SWAP2 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2C0E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2C16 PUSH2 0x2751 JUMP JUMPDEST SWAP1 POP DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x20 DUP3 ADD MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2C3E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xA6A DUP4 DUP4 PUSH2 0x2BFC JUMP JUMPDEST PUSH1 0x1F DUP3 GT ISZERO PUSH2 0x1142 JUMPI PUSH1 0x0 DUP2 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 PUSH1 0x1F DUP6 ADD PUSH1 0x5 SHR DUP2 ADD PUSH1 0x20 DUP7 LT ISZERO PUSH2 0x2C71 JUMPI POP DUP1 JUMPDEST PUSH1 0x1F DUP6 ADD PUSH1 0x5 SHR DUP3 ADD SWAP2 POP JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x2C90 JUMPI DUP3 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x2C7D JUMP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x2CB1 JUMPI PUSH2 0x2CB1 PUSH2 0x2713 JUMP JUMPDEST PUSH2 0x2CC5 DUP2 PUSH2 0x2CBF DUP5 SLOAD PUSH2 0x26DF JUMP JUMPDEST DUP5 PUSH2 0x2C48 JUMP JUMPDEST PUSH1 0x20 DUP1 PUSH1 0x1F DUP4 GT PUSH1 0x1 DUP2 EQ PUSH2 0x2CFA JUMPI PUSH1 0x0 DUP5 ISZERO PUSH2 0x2CE2 JUMPI POP DUP6 DUP4 ADD MLOAD JUMPDEST PUSH1 0x0 NOT PUSH1 0x3 DUP7 SWAP1 SHL SHR NOT AND PUSH1 0x1 DUP6 SWAP1 SHL OR DUP6 SSTORE PUSH2 0x2C90 JUMP JUMPDEST PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x20 DUP2 KECCAK256 PUSH1 0x1F NOT DUP7 AND SWAP2 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x2D29 JUMPI DUP9 DUP7 ADD MLOAD DUP3 SSTORE SWAP5 DUP5 ADD SWAP5 PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 DUP5 ADD PUSH2 0x2D0A JUMP JUMPDEST POP DUP6 DUP3 LT ISZERO PUSH2 0x2D47 JUMPI DUP8 DUP6 ADD MLOAD PUSH1 0x0 NOT PUSH1 0x3 DUP9 SWAP1 SHL PUSH1 0xF8 AND SHR NOT AND DUP2 SSTORE JUMPDEST POP POP POP POP POP PUSH1 0x1 SWAP1 DUP2 SHL ADD SWAP1 SSTORE POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 ADD DUP2 DUP5 MSTORE DUP1 DUP6 MLOAD DUP1 DUP4 MSTORE PUSH1 0x40 SWAP3 POP PUSH1 0x40 DUP7 ADD SWAP2 POP PUSH1 0x40 DUP2 PUSH1 0x5 SHL DUP8 ADD ADD DUP5 DUP9 ADD PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2DD4 JUMPI DUP9 DUP4 SUB PUSH1 0x3F NOT ADD DUP6 MSTORE DUP2 MLOAD DUP1 MLOAD PUSH4 0xFFFFFFFF AND DUP5 MSTORE DUP8 DUP2 ADD MLOAD PUSH2 0xFFFF AND DUP9 DUP6 ADD MSTORE DUP7 ADD MLOAD PUSH1 0x60 DUP8 DUP6 ADD DUP2 SWAP1 MSTORE PUSH2 0x2DC0 DUP2 DUP7 ADD DUP4 PUSH2 0x20C4 JUMP JUMPDEST SWAP7 DUP10 ADD SWAP7 SWAP5 POP POP POP SWAP1 DUP7 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x2D80 JUMP JUMPDEST POP SWAP1 SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2DF4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2DFC PUSH2 0x2751 JUMP JUMPDEST DUP3 CALLDATALOAD DUP2 MSTORE PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH1 0x20 DUP3 ADD MSTORE DUP1 SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x2E47 JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP DIV SWAP1 JUMP JUMPDEST DUP1 DUP3 MUL DUP2 ISZERO DUP3 DUP3 DIV DUP5 EQ OR PUSH2 0x8B4 JUMPI PUSH2 0x8B4 PUSH2 0x2E14 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x20 DUP4 LT ISZERO PUSH2 0x8B4 JUMPI PUSH1 0x0 NOT PUSH1 0x20 DUP5 SWAP1 SUB PUSH1 0x3 SHL SHL AND SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xC0 SHL SUB NOT DUP2 CALLDATALOAD DUP2 DUP2 AND SWAP2 PUSH1 0x8 DUP6 LT ISZERO PUSH2 0x2EA9 JUMPI DUP1 DUP2 DUP7 PUSH1 0x8 SUB PUSH1 0x3 SHL SHL DUP4 AND AND SWAP3 POP JUMPDEST POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB PUSH1 0xC0 SHL DUP6 PUSH1 0xC0 SHL AND DUP2 MSTORE PUSH4 0xFFFFFFFF PUSH1 0xE0 SHL DUP5 PUSH1 0xE0 SHL AND PUSH1 0x8 DUP3 ADD MSTORE DUP3 PUSH1 0xC DUP3 ADD MSTORE PUSH1 0x0 DUP3 MLOAD PUSH2 0x2EF0 DUP2 PUSH1 0x2C DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x20A0 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD PUSH1 0x2C ADD SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0x8B4 JUMPI PUSH2 0x8B4 PUSH2 0x2E14 JUMP JUMPDEST DUP5 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB PUSH1 0xC0 SHL DUP5 PUSH1 0xC0 SHL AND PUSH1 0x20 DUP3 ADD MSTORE DUP3 PUSH1 0x28 DUP3 ADD MSTORE PUSH1 0x0 DUP3 MLOAD PUSH2 0x2F46 DUP2 PUSH1 0x48 DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x20A0 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD PUSH1 0x48 ADD SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x80 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2F68 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2F70 PUSH2 0x2729 JUMP JUMPDEST DUP3 MLOAD DUP2 MSTORE PUSH1 0x20 DUP4 ADD MLOAD PUSH2 0x2F82 DUP2 PUSH2 0x29EB JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x2F94 DUP5 PUSH1 0x40 DUP6 ADD PUSH2 0x2BFC JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2FB2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0xA6A DUP2 PUSH2 0x2103 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xA5 PUSH30 0x7F89465F52382B6C4FB535F012253EB27EE453204FB5020648385F95C207 PUSH5 0x736F6C6343 STOP ADDMOD AND STOP CALLER ", - "sourceMap": "200:229:41:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1779:89:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3998:186;;;;;;;;;;-1:-1:-1;3998:186:33;;;;;:::i;:::-;;:::i;:::-;;;1391:14:43;;1384:22;1366:41;;1354:2;1339:18;3998:186:33;1226:187:43;5102:1258:24;;;;;;;;;;-1:-1:-1;5102:1258:24;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;2256:27::-;;;;;;;;;;-1:-1:-1;2256:27:24;;;;-1:-1:-1;;;;;2256:27:24;;;;;;-1:-1:-1;;;;;3605:32:43;;;3587:51;;3575:2;3560:18;2256:27:24;3441:203:43;4368:708:12;;;;;;:::i;:::-;;:::i;:::-;;2130:40:24;;;;;;;;;;;;2169:1;2130:40;;;;;5385:6:43;5373:19;;;5355:38;;5343:2;5328:18;2130:40:24;5211:188:43;3401:140:24;;;;;;;;;;-1:-1:-1;3401:140:24;;;-1:-1:-1;;;5574:52:43;;3532:1:24;5657:2:43;5642:18;;5635:59;5547:18;3401:140:24;5404:296:43;1287:235:10;;;;;;;;;;-1:-1:-1;1287:235:10;;;843:1:13;5912:34:43;;678:1:12;5977:2:43;5962:18;;5955:43;5848:18;1287:235:10;5705:299:43;2849:97:33;;;;;;;;;;-1:-1:-1;2927:12:33;;2849:97;;;6155:25:43;;;6143:2;6128:18;2849:97:33;6009:177:43;2093:31:24;;;;;;;;;;;;2123:1;2093:31;;4776:244:33;;;;;;;;;;-1:-1:-1;4776:244:33;;;;;:::i;:::-;;:::i;2707:82::-;;;;;;;;;;-1:-1:-1;2780:2:33;2707:82;;;6824:4:43;6812:17;;;6794:36;;6782:2;6767:18;2707:82:33;6652:184:43;1724:108:11;;;;;;;;;;-1:-1:-1;1724:108:11;;;;;:::i;:::-;;:::i;6811:774:24:-;;;;;;;;;;-1:-1:-1;6811:774:24;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;875:93:19:-;;;;;;;;;;-1:-1:-1;956:4:19;875:93;;538::18;;;;;;;;;;-1:-1:-1;538:93:18;;;;;:::i;:::-;;:::i;16059:132:24:-;;;;;;;;;;-1:-1:-1;16059:132:24;;;;;:::i;:::-;16164:11;;;;;16141:4;16164:11;;;:5;:11;;;;;;:20;;16059:132;446:46:11;;;;;;;;;;;;;;;4583:163:24;;;;;;;;;;-1:-1:-1;4583:163:24;;;;;:::i;:::-;;:::i;3004:116:33:-;;;;;;;;;;-1:-1:-1;3004:116:33;;;;;:::i;:::-;-1:-1:-1;;;;;3095:18:33;3069:7;3095:18;;;:9;:18;;;;;;;3004:116;2293:101:28;;;;;;;;;;;;;:::i;3507:128:12:-;;;;;;;;;;-1:-1:-1;3507:128:12;;;;;:::i;:::-;3596:12;3507:128;;;;;;;;-1:-1:-1;;;;;9439:31:43;;;9421:50;;9409:2;9394:18;3507:128:12;9277:200:43;2013:216:12;;;;;;;;;;-1:-1:-1;2013:216:12;;;;;:::i;:::-;;:::i;4148:87:24:-;;;;;;;;;;-1:-1:-1;4227:1:24;4148:87;;1638:85:28;;;;;;;;;;-1:-1:-1;1684:7:28;1710:6;-1:-1:-1;;;;;1710:6:28;1638:85;;1981:93:33;;;;;;;;;;;;;:::i;1787:46:24:-;;;;;;;;;;;;;;;1460:94:23;;;;;;;;;;-1:-1:-1;1519:4:23;1460:94;;3315:178:33;;;;;;;;;;-1:-1:-1;3315:178:33;;;;;:::i;:::-;;:::i;559:23:19:-;;;;;;;;;;-1:-1:-1;559:23:19;;;;-1:-1:-1;;;;;559:23:19;;;1391:156:18;;;;;;;;;;-1:-1:-1;1391:156:18;;;;;:::i;:::-;;:::i;569:48:11:-;;;;;;;;;;-1:-1:-1;569:48:11;;;;;:::i;:::-;;;;;;;;;;;;;;3510:981:18;;;;;;;;;;-1:-1:-1;3510:981:18;;;;;:::i;:::-;;:::i;1698:1333:19:-;;;;;;:::i;:::-;;:::i;8273:290:24:-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;3252:105:11:-;;;;;;;;;;-1:-1:-1;3252:105:11;;;;;:::i;:::-;;:::i;3679:409:19:-;;;;;;:::i;:::-;;:::i;1100:139::-;;;;;;;;;;-1:-1:-1;1100:139:19;;;;;:::i;:::-;;:::i;3551:140:33:-;;;;;;;;;;-1:-1:-1;3551:140:33;;;;;:::i;:::-;-1:-1:-1;;;;;3657:18:33;;;3631:7;3657:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;3551:140;2543:215:28;;;;;;;;;;-1:-1:-1;2543:215:28;;;;;:::i;:::-;;:::i;2771:149:12:-;;;;;;;;;;-1:-1:-1;2771:149:12;;;;;:::i;:::-;;:::i;1779:89:33:-;1824:13;1856:5;1849:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1779:89;:::o;3998:186::-;4071:4;735:10:38;4125:31:33;735:10:38;4141:7:33;4150:5;4125:8;:31::i;:::-;4173:4;4166:11;;;3998:186;;;;;:::o;5102:1258:24:-;-1:-1:-1;;;;;;;;;;;;;;;;;5254:35:24;5291:28;-1:-1:-1;;;;;;;;;;;;;;;;;;;5291:28:24;5509:34;;;;;;;;-1:-1:-1;5509:34:24;;;-1:-1:-1;;;;;5509:34:24;;;;;;;5660:21;;;;;;;;;;;5509:34;;-1:-1:-1;;;5660:21:24;;;-1:-1:-1;;;;;;;;;;;;;;;;;5660:21:24;;;;;;;;;;;;;;;-1:-1:-1;5644:37:24;-1:-1:-1;6118:20:24;;6168:120;6192:19;;;;6225:22;;;;6261:17;;;;6192:10;6261:17;:::i;:::-;6168:10;:120::i;:::-;6311:42;;;;;;;;;;;;;;;;5102:1258;;;;-1:-1:-1;;;;;;5102:1258:24:o;4368:708:12:-;4681:8;-1:-1:-1;;;;;4673:31:12;4694:10;4673:31;4669:68;;4713:24;;-1:-1:-1;;;4713:24:12;;4726:10;4713:24;;;3587:51:43;3560:18;;4713:24:12;;;;;;;;4669:68;4873:14;;;;;;4837:32;;4854:14;;4873:7;4854:14;:::i;:::-;4837:16;:32::i;:::-;:50;4833:103;;4905:14;;;;:7;:14;:::i;:::-;4896:40;;-1:-1:-1;;;4896:40:12;;15121:10:43;15109:23;;;4896:40:12;;;15091:42:43;4921:14:12;;;;15149:18:43;;;15142:34;15064:18;;4896:40:12;14919:263:43;4833:103:12;5010:59;5021:7;5030:5;5037:8;;5047:9;5058:10;;5010;:59::i;:::-;4368:708;;;;;;;:::o;4776:244:33:-;4863:4;735:10:38;4919:37:33;4935:4;735:10:38;4950:5:33;4919:15;:37::i;:::-;4966:26;4976:4;4982:2;4986:5;4966:9;:26::i;:::-;5009:4;5002:11;;;4776:244;;;;;;:::o;1724:108:11:-;1531:13:28;:11;:13::i;:::-;1804:21:11::1;1813:4;1819:5;1804:8;:21::i;:::-;1724:108:::0;;:::o;6811:774:24:-;-1:-1:-1;;;;;;;;;;;;;;;;;7145:24:24;7173:74;7184:19;;;;7205:22;;;;7229:17;;;;7184:10;7229:17;:::i;7173:74::-;7142:105;;;7336:20;7358;7382:49;7402:10;7414:16;7382:19;:49::i;:::-;7335:96;;-1:-1:-1;7335:96:24;-1:-1:-1;7520:58:24;7527:17;;;;:10;:17;:::i;:::-;7546:7;7555;7564:13;7520:6;:58::i;:::-;7513:65;6811:774;-1:-1:-1;;;;;;6811:774:24:o;538:93:18:-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;4583:163:24:-;1531:13:28;:11;:13::i;:::-;4666:12:24::1;:28:::0;;-1:-1:-1;;;;;;4666:28:24::1;-1:-1:-1::0;;;;;4666:28:24;::::1;::::0;;::::1;::::0;;;4709:30:::1;::::0;3587:51:43;;;4709:30:24::1;::::0;3575:2:43;3560:18;4709:30:24::1;;;;;;;;4583:163:::0;:::o;2293:101:28:-;1531:13;:11;:13::i;:::-;2357:30:::1;2384:1;2357:18;:30::i;:::-;2293:101::o:0;2013:216:12:-;-1:-1:-1;;;;;2198:24:12;;2217:4;2198:24;2013:216;;;;;;;:::o;1981:93:33:-;2028:13;2060:7;2053:14;;;;;:::i;3315:178::-;3384:4;735:10:38;3438:27:33;735:10:38;3455:2:33;3459:5;3438:9;:27::i;1391:156:18:-;1531:13:28;:11;:13::i;:::-;1503:37:18::1;;1523:16:::0;;1503:37:::1;:::i;:::-;:19;:37::i;3510:981::-:0;3701:21;;;3677;3701;;;:15;:21;;;;;;;;:31;;;;;;;;;;3677:55;;3653:12;;3677:21;3701:31;3677:55;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3861:8;:15;3880:1;3861:20;3857:46;;3890:13;;3883:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3883:20:18;;-1:-1:-1;3883:20:18;;-1:-1:-1;;;;3883:20:18;3857:46;3988:1;3964:25;;;3960:46;;3998:8;-1:-1:-1;3991:15:18;;3960:46;4153:1;4129:25;;4125:267;;4170:34;4190:13;;4170:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4170:19:18;;-1:-1:-1;;;4170:34:18:i;:::-;4353:8;4363:17;:13;4377:1;4363:13;;:17;:::i;:::-;4340:41;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;4333:48;;;;;4125:267;4470:13;;4455:29;;-1:-1:-1;;;4455:29:18;;;;;;;;;:::i;1698:1333:19:-;1799:9;1794:1037;1814:19;;;1794:1037;;;1854:29;1886:8;;1895:1;1886:11;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;1854:43;-1:-1:-1;1980:50:19;1987:20;;;;1854:43;1987:20;:::i;:::-;2009;;;;16164:11:24;;;;;16141:4;16164:11;;;:5;:11;;;;;;:20;;16059:132;1980:50:19;1975:65;;2032:8;;;1975:65;2602:4;:22;2633:12;;;;:6;2696:11;;;;2725:14;;;;2633:6;2725:14;:::i;:::-;2757:15;;;;;;;;:::i;:::-;2790:16;;;;:6;:16;:::i;:::-;2602:218;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1840:991;1794:1037;1835:3;;1794:1037;;;;2988:10;-1:-1:-1;;;;;2978:43:19;;:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2978:45:19;;;;;;;;;;;;:::i;:::-;2961:63;;-1:-1:-1;;;2961:63:19;;;;;;;;:::i;8273:290:24:-;8434:34;;:::i;:::-;-1:-1:-1;;;;;;;;;;;;;;;;;8517:39:24;8523:10;8535:4;8541:14;8517:5;:39::i;:::-;8510:46;;;;8273:290;;;;;;;:::o;3252:105:11:-;1531:13:28;:11;:13::i;:::-;3319:31:11::1;::::0;-1:-1:-1;;;3319:31:11;;-1:-1:-1;;;;;3605:32:43;;;3319:31:11::1;::::0;::::1;3587:51:43::0;3319:8:11::1;:20;::::0;::::1;::::0;3560:18:43;;3319:31:11::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;3252:105:::0;:::o;3679:409:19:-;3958:10;3980:4;3958:27;3954:50;;3994:10;;-1:-1:-1;;;3994:10:19;;;;;;;;;;;3954:50;4014:67;4033:7;4042:5;4049:8;;4059:9;4070:10;;4014:18;:67::i;1100:139::-;1531:13:28;:11;:13::i;:::-;1175:8:19::1;:20:::0;;-1:-1:-1;;;;;;1175:20:19::1;-1:-1:-1::0;;;;;1175:20:19;::::1;::::0;;::::1;::::0;;;1210:22:::1;::::0;3587:51:43;;;1210:22:19::1;::::0;3575:2:43;3560:18;1210:22:19::1;3441:203:43::0;2543:215:28;1531:13;:11;:13::i;:::-;-1:-1:-1;;;;;2627:22:28;::::1;2623:91;;2672:31;::::0;-1:-1:-1;;;2672:31:28;;2700:1:::1;2672:31;::::0;::::1;3587:51:43::0;3560:18;;2672:31:28::1;3441:203:43::0;2623:91:28::1;2723:28;2742:8;2723:18;:28::i;:::-;2543:215:::0;:::o;2771:149:12:-;2853:4;2900:13;;;;;;2876:5;;2853:4;;2882:13;;2900:6;2882:13;:::i;:::-;2876:20;;;;;;;;;;;;;-1:-1:-1;2876:20:12;;:37;;2771:149;-1:-1:-1;;2771:149:12:o;8726:128:33:-;8810:37;8819:5;8826:7;8835:5;8842:4;8810:8;:37::i;:::-;8726:128;;;:::o;18076:668:24:-;18218:20;18240:24;18414:22;18426:9;18414:11;:22::i;:::-;18399:37;;18562:12;18543:31;;18644:12;18625:16;:31;18621:117;;;18679:48;;-1:-1:-1;;;18679:48:24;;;;;22584:25:43;;;22625:18;;;22618:34;;;22557:18;;18679:48:24;22410:248:43;2718:196:11;2822:11;;;2788:7;2822:11;;;:5;:11;;;;;;;2843:43;;2874:12;;-1:-1:-1;;;2874:12:11;;22837:10:43;22825:23;;2874:12:11;;;22807:42:43;22780:18;;2874:12:11;22663:192:43;12852:1806:24;13329:17;13349:36;:17;:8;;:15;:17::i;:::-;2891:2:27;2780:123;13349:36:24;13329:56;;13518:24;13545:62;13553:9;13564:26;13570:19;:8;;:17;:19::i;:::-;13564:5;:26::i;:::-;13592:14;;;;:7;:14;:::i;:::-;13545:7;:62::i;:::-;13518:89;-1:-1:-1;243:2:27;-1:-1:-1;;13618:955:24;;;13722:23;13748:175;13791:13;;;;;;;;:::i;:::-;13822:14;;;;:7;:14;:::i;:::-;13854:16;13888:21;:8;;:19;:21::i;:::-;13748:25;:175::i;:::-;14470:92;;-1:-1:-1;;;14470:92:24;;13722:201;;-1:-1:-1;;;;;;14470:8:24;:20;;;;:92;;14491:9;;14502:5;;14509:1;;13722:201;;14470:92;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13645:928;13618:955;-1:-1:-1;;;;;14588:63:24;;14600:5;14588:63;14607:14;;;;:7;:14;:::i;:::-;14588:63;;;15121:10:43;15109:23;;;15091:42;;15164:2;15149:18;;15142:34;;;15064:18;14588:63:24;;;;;;;13155:1503;;12852:1806;;;;;;;:::o;10415:477:33:-;-1:-1:-1;;;;;3657:18:33;;;10514:24;3657:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;-1:-1:-1;;10580:37:33;;10576:310;;10656:5;10637:16;:24;10633:130;;;10688:60;;-1:-1:-1;;;10688:60:33;;-1:-1:-1;;;;;24082:32:43;;10688:60:33;;;24064:51:43;24131:18;;;24124:34;;;24174:18;;;24167:34;;;24037:18;;10688:60:33;23862:345:43;10633:130:33;10804:57;10813:5;10820:7;10848:5;10829:16;:24;10855:5;10804:8;:57::i;:::-;10504:388;10415:477;;;:::o;5393:300::-;-1:-1:-1;;;;;5476:18:33;;5472:86;;5517:30;;-1:-1:-1;;;5517:30:33;;5544:1;5517:30;;;3587:51:43;3560:18;;5517:30:33;3441:203:43;5472:86:33;-1:-1:-1;;;;;5571:16:33;;5567:86;;5610:32;;-1:-1:-1;;;5610:32:33;;5639:1;5610:32;;;3587:51:43;3560:18;;5610:32:33;3441:203:43;5567:86:33;5662:24;5670:4;5676:2;5680:5;5662:7;:24::i;1796:162:28:-;1684:7;1710:6;-1:-1:-1;;;;;1710:6:28;735:10:38;1855:23:28;1851:101;;1901:40;;-1:-1:-1;;;1901:40:28;;735:10:38;1901:40:28;;;3587:51:43;3560:18;;1901:40:28;3441:203:43;2286:134:11;2359:11;;;;;;;:5;:11;;;;;;;;;:19;;;2393:20;;15091:42:43;;;15149:18;;15142:34;;;2393:20:11;;15064:18:43;2393:20:11;;;;;;;2286:134;;:::o;10898:1436:24:-;11030:20;11052;11084:15;11255:324;11287:10;:13;;;11314:16;11320:9;11314:5;:16::i;:::-;11548:21;;;;:10;:21;:::i;:::-;11255:324;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11255:18:24;;-1:-1:-1;;;11255:324:24:i;:::-;11231:348;;-1:-1:-1;11231:348:24;-1:-1:-1;11659:14:24;11231:348;11676:33;;2123:1;11676:33;;;2169:1;11676:33;11659:50;-1:-1:-1;11831:67:24;11846:17;;;;:10;:17;:::i;:::-;11865:7;11874:23;;;;:10;:23;:::i;11831:67::-;12156:12;;11821:77;;-1:-1:-1;;;;;;12156:12:24;12248:23;;12244:83;;12273:54;;-1:-1:-1;;;12273:54:24;;-1:-1:-1;;;;;12273:36:24;;;;;:54;;12310:7;;12319;;12273:54;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;12244:83;11074:1260;;;10898:1436;;;;;:::o;2038:391:13:-;-1:-1:-1;;;;;;;;;;;;;;;;;2259:8:13;-1:-1:-1;;;;;2259:14:13;;2291:86;;;;;;;;2307:7;2291:86;;;;;;2316:25;2333:7;2316:16;:25::i;:::-;2291:86;;;;2343:8;2291:86;;;;2353:8;2291:86;;;;2363:13;2291:86;;;;;2403:4;2259:163;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2240:182;2038:391;-1:-1:-1;;;;;2038:391:13:o;2912:187:28:-;2985:16;3004:6;;-1:-1:-1;;;;;3020:17:28;;;-1:-1:-1;;;;;;3020:17:28;;;;;;3052:40;;3004:6;;;;;;;3052:40;;2985:16;3052:40;2975:124;2912:187;:::o;2237:514:18:-;2345:9;2340:354;2364:16;:23;2360:1;:27;2340:354;;;2522:48;2542:16;2559:1;2542:19;;;;;;;;:::i;:::-;;;;;;;:27;;;2522:19;:48::i;:::-;2656:16;2673:1;2656:19;;;;;;;;:::i;:::-;;;;;;;:27;;;2584:15;:40;2600:16;2617:1;2600:19;;;;;;;;:::i;:::-;;;;;;;:23;;;2584:40;;;;;;;;;;;;;;;:69;2625:16;2642:1;2625:19;;;;;;;;:::i;:::-;;;;;;;:27;;;2584:69;;;;;;;;;;;;;;;:99;;;;;;:::i;:::-;-1:-1:-1;2389:3:18;;2340:354;;;;2709:35;2727:16;2709:35;;;;;;:::i;4631:264::-;4801:1;4787:16;;4781:23;4827:28;;;463:1;4827:28;4823:65;;4879:8;4864:24;;-1:-1:-1;;;4864:24:18;;;;;;;;:::i;9271:1333:24:-;9425:34;;:::i;:::-;-1:-1:-1;;;;;;;;;;;;;;;;;9823:20:24;;9873:140;9893:10;9917:19;;;;9950:22;;;;9986:17;;;;9917:10;9986:17;:::i;:::-;9873:6;:140::i;:::-;9822:191;;;;10102:20;10124;10148:49;10168:10;10180:16;10148:19;:49::i;:::-;10101:96;;-1:-1:-1;10101:96:24;-1:-1:-1;10320:66:24;10328:17;;;;:10;:17;:::i;:::-;10347:7;10356;10320:66;;;;;;;10365:4;10320:66;:::i;:::-;10371:14;10320:7;:66::i;:::-;10452:42;;;;;;;;;;;;;;;;;;;10518:15;;10307:79;;-1:-1:-1;10452:42:24;;-1:-1:-1;10554:10:24;;10518:15;10510:87;;10535:17;;;;:10;:17;:::i;:::-;10510:87;;;30228:10:43;30216:23;;;30198:42;;30271:2;30256:18;;30249:34;;;30299:18;;30292:34;;;30186:2;30171:18;10510:87:24;;;;;;;9491:1113;;;;9271:1333;;;;;;:::o;9701:432:33:-;-1:-1:-1;;;;;9813:19:33;;9809:89;;9855:32;;-1:-1:-1;;;9855:32:33;;9884:1;9855:32;;;3587:51:43;3560:18;;9855:32:33;3441:203:43;9809:89:33;-1:-1:-1;;;;;9911:21:33;;9907:90;;9955:31;;-1:-1:-1;;;9955:31:33;;9983:1;9955:31;;;3587:51:43;3560:18;;9955:31:33;3441:203:43;9907:90:33;-1:-1:-1;;;;;10006:18:33;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;:35;;;10051:76;;;;10101:7;-1:-1:-1;;;;;10085:31:33;10094:5;-1:-1:-1;;;;;10085:31:33;;10110:5;10085:31;;;;6155:25:43;;6143:2;6128:18;;6009:177;10085:31:33;;;;;;;;9701:432;;;;:::o;16585:172:24:-;16656:16;16729:21;16692:33;16729:21;16692:9;:33;:::i;:::-;16691:59;;;;:::i;1573:123:27:-;1633:7;1667:21;188:2;1633:7;1667:4;;:21;:::i;:::-;1659:30;;;:::i;1874:152::-;1936:6;1975:42;243:2;188;1975:4;;:42;:::i;:::-;1968:50;;;:::i;:::-;1961:58;;;1874:152;-1:-1:-1;;;1874:152:27:o;16981:139:24:-;17045:16;17080:33;17092:21;-1:-1:-1;;;;;17080:33:24;;;:::i;2939:462:23:-;3073:24;-1:-1:-1;;;;;3113:19:23;;3109:46;;3148:6;3134:21;;3109:46;3251:21;3257:3;3262:9;3251:5;:21::i;:::-;-1:-1:-1;3385:9:23;;2939:462;-1:-1:-1;;2939:462:23:o;2186:130:27:-;2250:12;2281:28;:4;243:2;2281:4;;:28;:::i;:::-;2274:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2274:35:27;;2186:130;-1:-1:-1;;;;;;2186:130:27:o;640:284:26:-;824:17;877:6;885:7;894:9;905:11;860:57;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;853:64;;640:284;;;;;;:::o;6008:1107:33:-;-1:-1:-1;;;;;6097:18:33;;6093:540;;6249:5;6233:12;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;6093:540:33;;-1:-1:-1;6093:540:33;;-1:-1:-1;;;;;6307:15:33;;6285:19;6307:15;;;:9;:15;;;;;;6340:19;;;6336:115;;;6386:50;;-1:-1:-1;;;6386:50:33;;-1:-1:-1;;;;;24082:32:43;;6386:50:33;;;24064:51:43;24131:18;;;24124:34;;;24174:18;;;24167:34;;;24037:18;;6386:50:33;23862:345:43;6336:115:33;-1:-1:-1;;;;;6571:15:33;;;;;;:9;:15;;;;;6589:19;;;;6571:37;;6093:540;-1:-1:-1;;;;;6647:16:33;;6643:425;;6810:12;:21;;;;;;;6643:425;;;-1:-1:-1;;;;;7021:13:33;;;;;;:9;:13;;;;;:22;;;;;;6643:425;7098:2;-1:-1:-1;;;;;7083:25:33;7092:4;-1:-1:-1;;;;;7083:25:33;;7102:5;7083:25;;;;6155::43;;6143:2;6128:18;;6009:177;7083:25:33;;;;;;;;6008:1107;;;:::o;17344:147:24:-;17409:15;17450:33;17462:21;17450:9;:33;:::i;598:506:27:-;791:18;;732:17;;791:22;;;934:163;;1074:7;1083:13;1057:40;;;;;;;;32318:19:43;;;32393:3;32371:16;-1:-1:-1;;;;;;32367:51:43;32362:2;32353:12;;32346:73;32444:2;32435:12;;32163:290;1057:40:27;;;;;;;;;;;;;934:163;;;976:7;985:13;1017:10;1030:11;959:83;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;934:163;927:170;;598:506;;;;;;:::o;2037:567:23:-;2198:20;2220:24;2291:44;2302:9;2313:12;2327:7;2291:10;:44::i;:::-;2256:79;;-1:-1:-1;2256:79:23;-1:-1:-1;2571:26:23;2577:5;2256:79;2571:5;:26::i;:::-;2037:567;;;;;;;:::o;3188:766:13:-;3389:31;;:::i;:::-;3554:20;3577:26;3588:4;:14;;;3577:10;:26::i;:::-;3617:15;;;;3554:49;;-1:-1:-1;3617:19:13;3613:53;;3638:28;3650:4;:15;;;3638:11;:28::i;:::-;3755:8;-1:-1:-1;;;;;3755:13:13;;3777:12;3809:92;;;;;;;;3825:7;3809:92;;;;;;3834:25;3851:7;3834:16;:25::i;:::-;3809:92;;;;3861:8;3809:92;;;;3871:8;3809:92;;;;3899:1;3881:4;:15;;;:19;3809:92;;;;;3919:14;3755:192;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3677:270;3188:766;-1:-1:-1;;;;;;;3188:766:13:o;7458:208:33:-;-1:-1:-1;;;;;7528:21:33;;7524:91;;7572:32;;-1:-1:-1;;;7572:32:33;;7601:1;7572:32;;;3587:51:43;3560:18;;7572:32:33;3441:203:43;7524:91:33;7624:35;7640:1;7644:7;7653:5;7624:7;:35::i;7984:206::-;-1:-1:-1;;;;;8054:21:33;;8050:89;;8098:30;;-1:-1:-1;;;8098:30:33;;8125:1;8098:30;;;3587:51:43;3560:18;;8098:30:33;3441:203:43;8050:89:33;8148:35;8156:7;8173:1;8177:5;8148:7;:35::i;4650:191:13:-;4716:17;4762:10;4749:9;:23;4745:62;;4781:26;;-1:-1:-1;;;4781:26:13;;4797:9;4781:26;;;6155:25:43;6128:18;;4781:26:13;6009:177:43;4745:62:13;-1:-1:-1;4824:10:13;4650:191::o;5218:410::-;5371:15;5389:8;-1:-1:-1;;;;;5389:16:13;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5371:36;-1:-1:-1;;;;;;5421:21:13;;5417:54;;5451:20;;-1:-1:-1;;;5451:20:13;;;;;;;;;;;5417:54;1797:53:36;;;5578:10:13;1797:53:36;;;34019:34:43;;;5598:8:13;-1:-1:-1;;;;;34089:15:43;;;34069:18;;;34062:43;34121:18;;;;34114:34;;;1797:53:36;;;;;;;;;;33954:18:43;;;;1797:53:36;;;;;;;;;-1:-1:-1;;;;;1797:53:36;-1:-1:-1;;;1797:53:36;;;7968:11;;5545:76:13;;:32;;;5609:11;;1770:81:36;;5545:32:13;;-1:-1:-1;;;;1797:53:36;;-1:-1:-1;;;5545:32:13;7934:5:36;7929:60;8041:7;8031:176;;8085:4;8079:11;8130:16;8127:1;8122:3;8107:40;8176:16;8171:3;8164:29;8031:176;-1:-1:-1;;8284:1:36;8278:8;8234:16;;-1:-1:-1;8310:15:36;;:68;;8362:11;8377:1;8362:16;;8310:68;;;-1:-1:-1;;;;;8328:26:36;;;:31;8310:68;8306:146;;;8401:40;;-1:-1:-1;;;8401:40:36;;-1:-1:-1;;;;;3605:32:43;;8401:40:36;;;3587:51:43;3560:18;;8401:40:36;3441:203:43;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:250:43:-;99:1;109:113;123:6;120:1;117:13;109:113;;;199:11;;;193:18;180:11;;;173:39;145:2;138:10;109:113;;;-1:-1:-1;;256:1:43;238:16;;231:27;14:250::o;269:271::-;311:3;349:5;343:12;376:6;371:3;364:19;392:76;461:6;454:4;449:3;445:14;438:4;431:5;427:16;392:76;:::i;:::-;522:2;501:15;-1:-1:-1;;497:29:43;488:39;;;;529:4;484:50;;269:271;-1:-1:-1;;269:271:43:o;545:220::-;694:2;683:9;676:21;657:4;714:45;755:2;744:9;740:18;732:6;714:45;:::i;770:131::-;-1:-1:-1;;;;;845:31:43;;835:42;;825:70;;891:1;888;881:12;906:315;974:6;982;1035:2;1023:9;1014:7;1010:23;1006:32;1003:52;;;1051:1;1048;1041:12;1003:52;1090:9;1077:23;1109:31;1134:5;1109:31;:::i;:::-;1159:5;1211:2;1196:18;;;;1183:32;;-1:-1:-1;;;906:315:43:o;1418:158::-;1480:5;1525:3;1516:6;1511:3;1507:16;1503:26;1500:46;;;1542:1;1539;1532:12;1500:46;-1:-1:-1;1564:6:43;1418:158;-1:-1:-1;1418:158:43:o;1581:360::-;1669:6;1722:2;1710:9;1701:7;1697:23;1693:32;1690:52;;;1738:1;1735;1728:12;1690:52;1778:9;1765:23;-1:-1:-1;;;;;1803:6:43;1800:30;1797:50;;;1843:1;1840;1833:12;1797:50;1866:69;1927:7;1918:6;1907:9;1903:22;1866:69;:::i;2100:1336::-;2020:12;;2008:25;;2082:4;2071:16;;;2065:23;2049:14;;;2042:47;2466:4;2514:3;2499:19;;2591:2;2629:3;2624:2;2613:9;2609:18;2602:31;2653:6;2688;2682:13;2719:6;2711;2704:22;2757:3;2746:9;2742:19;2735:26;;2820:3;2810:6;2807:1;2803:14;2792:9;2788:30;2784:40;2770:54;;2843:4;2882;2874:6;2870:17;2905:1;2915:429;2929:6;2926:1;2923:13;2915:429;;;2994:22;;;-1:-1:-1;;2990:37:43;2978:50;;3051:13;;3092:9;;3077:25;;3141:11;;3135:18;3173:15;;;3166:27;;;3216:48;3248:15;;;3135:18;3216:48;:::i;:::-;3206:58;-1:-1:-1;;3322:12:43;;;;3287:15;;;;2951:1;2944:9;2915:429;;;-1:-1:-1;;2020:12:43;;3426:2;3411:18;;2008:25;-1:-1:-1;;;2082:4:43;2071:16;;2065:23;2049:14;;;2042:47;-1:-1:-1;3361:6:43;-1:-1:-1;3376:54:43;1946:149;3649:154;3708:5;3753:2;3744:6;3739:3;3735:16;3731:25;3728:45;;;3769:1;3766;3759:12;3808:347;3859:8;3869:6;3923:3;3916:4;3908:6;3904:17;3900:27;3890:55;;3941:1;3938;3931:12;3890:55;-1:-1:-1;3964:20:43;;-1:-1:-1;;;;;3996:30:43;;3993:50;;;4039:1;4036;4029:12;3993:50;4076:4;4068:6;4064:17;4052:29;;4128:3;4121:4;4112:6;4104;4100:19;4096:30;4093:39;4090:59;;;4145:1;4142;4135:12;4090:59;3808:347;;;;;:::o;4160:1046::-;4301:6;4309;4317;4325;4333;4341;4349;4402:3;4390:9;4381:7;4377:23;4373:33;4370:53;;;4419:1;4416;4409:12;4370:53;4442;4487:7;4476:9;4442:53;:::i;:::-;4432:63;;4542:2;4531:9;4527:18;4514:32;4504:42;;4597:3;4586:9;4582:19;4569:33;-1:-1:-1;;;;;4662:2:43;4654:6;4651:14;4648:34;;;4678:1;4675;4668:12;4648:34;4717:58;4767:7;4758:6;4747:9;4743:22;4717:58;:::i;:::-;4794:8;;-1:-1:-1;4691:84:43;-1:-1:-1;4879:3:43;4864:19;;4851:33;;-1:-1:-1;4893:31:43;4851:33;4893:31;:::i;:::-;4943:5;;-1:-1:-1;5001:3:43;4986:19;;4973:33;;5018:16;;;5015:36;;;5047:1;5044;5037:12;5015:36;;5086:60;5138:7;5127:8;5116:9;5112:24;5086:60;:::i;:::-;4160:1046;;;;-1:-1:-1;4160:1046:43;;-1:-1:-1;4160:1046:43;;;;5060:86;;-1:-1:-1;;;4160:1046:43:o;6191:456::-;6268:6;6276;6284;6337:2;6325:9;6316:7;6312:23;6308:32;6305:52;;;6353:1;6350;6343:12;6305:52;6392:9;6379:23;6411:31;6436:5;6411:31;:::i;:::-;6461:5;-1:-1:-1;6518:2:43;6503:18;;6490:32;6531:33;6490:32;6531:33;:::i;:::-;6191:456;;6583:7;;-1:-1:-1;;;6637:2:43;6622:18;;;;6609:32;;6191:456::o;6841:163::-;6908:20;;6968:10;6957:22;;6947:33;;6937:61;;6994:1;6991;6984:12;6937:61;6841:163;;;:::o;7009:252::-;7076:6;7084;7137:2;7125:9;7116:7;7112:23;7108:32;7105:52;;;7153:1;7150;7143:12;7105:52;7176:28;7194:9;7176:28;:::i;7266:118::-;7352:5;7345:13;7338:21;7331:5;7328:32;7318:60;;7374:1;7371;7364:12;7389:489;7483:6;7491;7544:2;7532:9;7523:7;7519:23;7515:32;7512:52;;;7560:1;7557;7550:12;7512:52;7600:9;7587:23;-1:-1:-1;;;;;7625:6:43;7622:30;7619:50;;;7665:1;7662;7655:12;7619:50;7688:69;7749:7;7740:6;7729:9;7725:22;7688:69;:::i;:::-;7678:79;;;7807:2;7796:9;7792:18;7779:32;7820:28;7842:5;7820:28;:::i;:::-;7867:5;7857:15;;;7389:489;;;;;:::o;7883:253::-;2020:12;;2008:25;;2082:4;2071:16;;;2065:23;2049:14;;;2042:47;8073:2;8058:18;;8085:45;1946:149;8141:159;8208:20;;8268:6;8257:18;;8247:29;;8237:57;;8290:1;8287;8280:12;8305:256;8371:6;8379;8432:2;8420:9;8411:7;8407:23;8403:32;8400:52;;;8448:1;8445;8438:12;8400:52;8471:28;8489:9;8471:28;:::i;:::-;8461:38;;8518:37;8551:2;8540:9;8536:18;8518:37;:::i;:::-;8508:47;;8305:256;;;;;:::o;9025:247::-;9084:6;9137:2;9125:9;9116:7;9112:23;9108:32;9105:52;;;9153:1;9150;9143:12;9105:52;9192:9;9179:23;9211:31;9236:5;9211:31;:::i;9482:668::-;9594:6;9602;9610;9618;9671:3;9659:9;9650:7;9646:23;9642:33;9639:53;;;9688:1;9685;9678:12;9639:53;9711;9756:7;9745:9;9711:53;:::i;:::-;9701:63;;9815:2;9804:9;9800:18;9787:32;-1:-1:-1;;;;;9834:6:43;9831:30;9828:50;;;9874:1;9871;9864:12;9828:50;9913:58;9963:7;9954:6;9943:9;9939:22;9913:58;:::i;:::-;9990:8;;-1:-1:-1;9887:84:43;-1:-1:-1;;10075:3:43;10060:19;;10047:33;10089:31;10047:33;10089:31;:::i;:::-;9482:668;;;;-1:-1:-1;9482:668:43;;-1:-1:-1;;9482:668:43:o;10155:395::-;10246:8;10256:6;10310:3;10303:4;10295:6;10291:17;10287:27;10277:55;;10328:1;10325;10318:12;10277:55;-1:-1:-1;10351:20:43;;-1:-1:-1;;;;;10383:30:43;;10380:50;;;10426:1;10423;10416:12;10380:50;10463:4;10455:6;10451:17;10439:29;;10523:3;10516:4;10506:6;10503:1;10499:14;10491:6;10487:27;10483:38;10480:47;10477:67;;;10540:1;10537;10530:12;10555:504;10680:6;10688;10741:2;10729:9;10720:7;10716:23;10712:32;10709:52;;;10757:1;10754;10747:12;10709:52;10797:9;10784:23;-1:-1:-1;;;;;10822:6:43;10819:30;10816:50;;;10862:1;10859;10852:12;10816:50;10901:98;10991:7;10982:6;10971:9;10967:22;10901:98;:::i;:::-;11018:8;;10875:124;;-1:-1:-1;10555:504:43;-1:-1:-1;;;;10555:504:43:o;11064:184::-;11122:6;11175:2;11163:9;11154:7;11150:23;11146:32;11143:52;;;11191:1;11188;11181:12;11143:52;11214:28;11232:9;11214:28;:::i;11435:553::-;11521:6;11529;11537;11545;11598:2;11586:9;11577:7;11573:23;11569:32;11566:52;;;11614:1;11611;11604:12;11566:52;11637:28;11655:9;11637:28;:::i;:::-;11627:38;;11684:37;11717:2;11706:9;11702:18;11684:37;:::i;:::-;11674:47;;11772:2;11761:9;11757:18;11744:32;-1:-1:-1;;;;;11791:6:43;11788:30;11785:50;;;11831:1;11828;11821:12;11785:50;11870:58;11920:7;11911:6;11900:9;11896:22;11870:58;:::i;:::-;11435:553;;;;-1:-1:-1;11947:8:43;-1:-1:-1;;;;11435:553:43:o;12496:655::-;12632:6;12640;12648;12692:9;12683:7;12679:23;12722:3;12718:2;12714:12;12711:32;;;12739:1;12736;12729:12;12711:32;12779:9;12766:23;-1:-1:-1;;;;;12804:6:43;12801:30;12798:50;;;12844:1;12841;12834:12;12798:50;12867:69;12928:7;12919:6;12908:9;12904:22;12867:69;:::i;:::-;12857:79;-1:-1:-1;;12970:2:43;-1:-1:-1;;12952:16:43;;12948:25;12945:45;;;12986:1;12983;12976:12;12945:45;;13024:2;13013:9;13009:18;12999:28;;13077:2;13066:9;13062:18;13049:32;13090:31;13115:5;13090:31;:::i;:::-;13140:5;13130:15;;;12496:655;;;;;:::o;13156:609::-;13396:4;13438:3;13427:9;13423:19;13415:27;;13475:6;13469:13;13458:9;13451:32;-1:-1:-1;;;;;13543:4:43;13535:6;13531:17;13525:24;13521:49;13514:4;13503:9;13499:20;13492:79;13618:4;13610:6;13606:17;13600:24;13633:62;13689:4;13678:9;13674:20;13660:12;2020;;2008:25;;2082:4;2071:16;;;2065:23;2049:14;;2042:47;1946:149;13633:62;-1:-1:-1;2020:12:43;;13754:3;13739:19;;2008:25;2082:4;2071:16;;2065:23;2049:14;;;2042:47;13704:55;1946:149;13770:388;13838:6;13846;13899:2;13887:9;13878:7;13874:23;13870:32;13867:52;;;13915:1;13912;13905:12;13867:52;13954:9;13941:23;13973:31;13998:5;13973:31;:::i;:::-;14023:5;-1:-1:-1;14080:2:43;14065:18;;14052:32;14093:33;14052:32;14093:33;:::i;14163:234::-;14246:6;14299:2;14287:9;14278:7;14274:23;14270:32;14267:52;;;14315:1;14312;14305:12;14267:52;14338:53;14383:7;14372:9;14338:53;:::i;14402:380::-;14481:1;14477:12;;;;14524;;;14545:61;;14599:4;14591:6;14587:17;14577:27;;14545:61;14652:2;14644:6;14641:14;14621:18;14618:38;14615:161;;14698:10;14693:3;14689:20;14686:1;14679:31;14733:4;14730:1;14723:15;14761:4;14758:1;14751:15;14787:127;14848:10;14843:3;14839:20;14836:1;14829:31;14879:4;14876:1;14869:15;14903:4;14900:1;14893:15;15187:253;15259:2;15253:9;15301:4;15289:17;;-1:-1:-1;;;;;15321:34:43;;15357:22;;;15318:62;15315:88;;;15383:18;;:::i;:::-;15419:2;15412:22;15187:253;:::o;15445:257::-;15517:4;15511:11;;;15549:17;;-1:-1:-1;;;;;15581:34:43;;15617:22;;;15578:62;15575:88;;;15643:18;;:::i;15707:275::-;15778:2;15772:9;15843:2;15824:13;;-1:-1:-1;;15820:27:43;15808:40;;-1:-1:-1;;;;;15863:34:43;;15899:22;;;15860:62;15857:88;;;15925:18;;:::i;:::-;15961:2;15954:22;15707:275;;-1:-1:-1;15707:275:43:o;15987:186::-;16035:4;-1:-1:-1;;;;;16060:6:43;16057:30;16054:56;;;16090:18;;:::i;:::-;-1:-1:-1;16156:2:43;16135:15;-1:-1:-1;;16131:29:43;16162:4;16127:40;;15987:186::o;16178:2117::-;16370:9;-1:-1:-1;;;;;16445:2:43;16437:6;16434:14;16431:40;;;16451:18;;:::i;:::-;16497:6;16494:1;16490:14;16523:4;16547:28;16571:2;16567;16563:11;16547:28;:::i;:::-;16609:19;;;16679:14;;;;16644:12;;;;16716:14;16705:26;;16702:46;;;16744:1;16741;16734:12;16702:46;16768:5;16782:1480;16798:6;16793:3;16790:15;16782:1480;;;16884:3;16871:17;16920:2;16907:11;16904:19;16901:109;;;16964:1;16993:2;16989;16982:14;16901:109;17033:23;;17101:4;17080:14;17076:23;;;17072:34;17069:124;;;17147:1;17176:2;17172;17165:14;17069:124;17221:22;;:::i;:::-;17272:21;17290:2;17272:21;:::i;:::-;17263:7;17256:38;17332:30;17358:2;17354;17350:11;17332:30;:::i;:::-;17327:2;17318:7;17314:16;17307:56;17386:2;17436;17432;17428:11;17415:25;17467:2;17459:6;17456:14;17453:104;;;17511:1;17540:2;17536;17529:14;17453:104;17580:15;;;;;17637:14;17630:4;17622:13;;17618:34;17608:135;;17695:1;17725:3;17720;17713:16;17608:135;17780:2;17767:16;17809:49;17825:32;17853:3;17825:32;:::i;:::-;17809:49;:::i;:::-;17885:3;17878:5;17871:18;17931:14;17926:2;17920:3;17916:2;17912:12;17908:21;17905:41;17902:134;;;17988:1;18018:3;18013;18006:16;17902:134;18091:3;18086:2;18082;18078:11;18073:2;18066:5;18062:14;18049:46;18141:1;18119:15;;;18115:24;;18108:35;;;;18163:16;;;18156:31;18200:20;;-1:-1:-1;18240:12:43;;;;16815;;16782:1480;;;-1:-1:-1;18284:5:43;16178:2117;-1:-1:-1;;;;;;;16178:2117:43:o;18300:331::-;18405:9;18416;18458:8;18446:10;18443:24;18440:44;;;18480:1;18477;18470:12;18440:44;18509:6;18499:8;18496:20;18493:40;;;18529:1;18526;18519:12;18493:40;-1:-1:-1;;18555:23:43;;;18600:25;;;;;-1:-1:-1;18300:331:43:o;18636:476::-;18827:3;18865:6;18859:13;18881:66;18940:6;18935:3;18928:4;18920:6;18916:17;18881:66;:::i;:::-;18969:16;;19022:6;19014;18969:16;18994:35;19086:1;19048:18;;19075:13;;;-1:-1:-1;19048:18:43;;18636:476;-1:-1:-1;;;18636:476:43:o;19117:266::-;19205:6;19200:3;19193:19;19257:6;19250:5;19243:4;19238:3;19234:14;19221:43;-1:-1:-1;19309:1:43;19284:16;;;19302:4;19280:27;;;19273:38;;;;19365:2;19344:15;;;-1:-1:-1;;19340:29:43;19331:39;;;19327:50;;19117:266::o;19388:244::-;19545:2;19534:9;19527:21;19508:4;19565:61;19622:2;19611:9;19607:18;19599:6;19591;19565:61;:::i;19637:127::-;19698:10;19693:3;19689:20;19686:1;19679:31;19729:4;19726:1;19719:15;19753:4;19750:1;19743:15;19769:331;19868:4;19926:11;19913:25;20020:3;20016:8;20005;19989:14;19985:29;19981:44;19961:18;19957:69;19947:97;;20040:1;20037;20030:12;19947:97;20061:33;;;;;19769:331;-1:-1:-1;;19769:331:43:o;20105:521::-;20182:4;20188:6;20248:11;20235:25;20342:2;20338:7;20327:8;20311:14;20307:29;20303:43;20283:18;20279:68;20269:96;;20361:1;20358;20351:12;20269:96;20388:33;;20440:20;;;-1:-1:-1;;;;;;20472:30:43;;20469:50;;;20515:1;20512;20505:12;20469:50;20548:4;20536:17;;-1:-1:-1;20579:14:43;20575:27;;;20565:38;;20562:58;;;20616:1;20613;20606:12;20631:129;-1:-1:-1;;;;;20709:5:43;20705:30;20698:5;20695:41;20685:69;;20750:1;20747;20740:12;20765:988;21139:10;21112:25;21130:6;21112:25;:::i;:::-;21108:42;21097:9;21090:61;21214:4;21206:6;21202:17;21189:31;21182:4;21171:9;21167:20;21160:61;21071:4;21268;21260:6;21256:17;21243:31;21283:30;21307:5;21283:30;:::i;:::-;-1:-1:-1;;;;;21355:5:43;21351:30;21344:4;21333:9;21329:20;21322:60;;21418:6;21413:2;21402:9;21398:18;21391:34;21462:3;21456;21445:9;21441:19;21434:32;21489:62;21546:3;21535:9;21531:19;21523:6;21515;21489:62;:::i;:::-;-1:-1:-1;;;;;21588:32:43;;21608:3;21567:19;;21560:61;21658:22;;;21652:3;21637:19;;21630:51;21698:49;21662:6;21732;21724;21698:49;:::i;:::-;21690:57;20765:988;-1:-1:-1;;;;;;;;;;20765:988:43:o;21758:647::-;21837:6;21890:2;21878:9;21869:7;21865:23;21861:32;21858:52;;;21906:1;21903;21896:12;21858:52;21939:9;21933:16;-1:-1:-1;;;;;21964:6:43;21961:30;21958:50;;;22004:1;22001;21994:12;21958:50;22027:22;;22080:4;22072:13;;22068:27;-1:-1:-1;22058:55:43;;22109:1;22106;22099:12;22058:55;22138:2;22132:9;22163:48;22179:31;22207:2;22179:31;:::i;22163:48::-;22234:2;22227:5;22220:17;22274:7;22269:2;22264;22260;22256:11;22252:20;22249:33;22246:53;;;22295:1;22292;22285:12;22246:53;22308:67;22372:2;22367;22360:5;22356:14;22351:2;22347;22343:11;22308:67;:::i;22860:245::-;22918:6;22971:2;22959:9;22950:7;22946:23;22942:32;22939:52;;;22987:1;22984;22977:12;22939:52;23026:9;23013:23;23045:30;23069:5;23045:30;:::i;23110:479::-;23377:1;23373;23368:3;23364:11;23360:19;23352:6;23348:32;23337:9;23330:51;23417:6;23412:2;23401:9;23397:18;23390:34;23472:6;23464;23460:19;23455:2;23444:9;23440:18;23433:47;23516:3;23511:2;23500:9;23496:18;23489:31;23311:4;23537:46;23578:3;23567:9;23563:19;23555:6;23537:46;:::i;24212:379::-;24405:2;24394:9;24387:21;24368:4;24431:45;24472:2;24461:9;24457:18;24449:6;24431:45;:::i;:::-;24524:9;24516:6;24512:22;24507:2;24496:9;24492:18;24485:50;24552:33;24578:6;24570;24552:33;:::i;24596:245::-;24663:6;24716:2;24704:9;24695:7;24691:23;24687:32;24684:52;;;24732:1;24729;24722:12;24684:52;24764:9;24758:16;24783:28;24805:5;24783:28;:::i;24846:887::-;25065:2;25054:9;25047:21;25123:10;25114:6;25108:13;25104:30;25099:2;25088:9;25084:18;25077:58;25189:4;25181:6;25177:17;25171:24;25166:2;25155:9;25151:18;25144:52;25028:4;25243:2;25235:6;25231:15;25225:22;25284:4;25278:3;25267:9;25263:19;25256:33;25312:52;25359:3;25348:9;25344:19;25330:12;25312:52;:::i;:::-;25298:66;;25413:2;25405:6;25401:15;25395:22;25487:2;25483:7;25471:9;25463:6;25459:22;25455:36;25448:4;25437:9;25433:20;25426:66;25515:41;25549:6;25533:14;25515:41;:::i;:::-;25625:3;25613:16;;;;25607:23;25600:31;25593:39;25587:3;25572:19;;25565:68;-1:-1:-1;;;;;;;;25694:32:43;;;;25687:4;25672:20;;;25665:62;25501:55;24846:887::o;25738:284::-;25808:5;25856:4;25844:9;25839:3;25835:19;25831:30;25828:50;;;25874:1;25871;25864:12;25828:50;25896:22;;:::i;:::-;25887:31;;25947:9;25941:16;25934:5;25927:31;26011:2;26000:9;25996:18;25990:25;25985:2;25978:5;25974:14;25967:49;25738:284;;;;:::o;26027:257::-;26125:6;26178:2;26166:9;26157:7;26153:23;26149:32;26146:52;;;26194:1;26191;26184:12;26146:52;26217:61;26270:7;26259:9;26217:61;:::i;26414:542::-;26515:2;26510:3;26507:11;26504:446;;;26551:1;26575:5;26572:1;26565:16;26619:4;26616:1;26606:18;26689:2;26677:10;26673:19;26670:1;26666:27;26660:4;26656:38;26725:4;26713:10;26710:20;26707:47;;;-1:-1:-1;26748:4:43;26707:47;26803:2;26798:3;26794:12;26791:1;26787:20;26781:4;26777:31;26767:41;;26858:82;26876:2;26869:5;26866:13;26858:82;;;26921:17;;;26902:1;26891:13;26858:82;;;26862:3;;;26414:542;;;:::o;27132:1341::-;27256:3;27250:10;-1:-1:-1;;;;;27275:6:43;27272:30;27269:56;;;27305:18;;:::i;:::-;27334:96;27423:6;27383:38;27415:4;27409:11;27383:38;:::i;:::-;27377:4;27334:96;:::i;:::-;27485:4;;27542:2;27531:14;;27559:1;27554:662;;;;28260:1;28277:6;28274:89;;;-1:-1:-1;28329:19:43;;;28323:26;28274:89;-1:-1:-1;;27089:1:43;27085:11;;;27081:24;27077:29;27067:40;27113:1;27109:11;;;27064:57;28376:81;;27524:943;;27554:662;26361:1;26354:14;;;26398:4;26385:18;;-1:-1:-1;;27590:20:43;;;27707:236;27721:7;27718:1;27715:14;27707:236;;;27810:19;;;27804:26;27789:42;;27902:27;;;;27870:1;27858:14;;;;27737:19;;27707:236;;;27711:3;27971:6;27962:7;27959:19;27956:201;;;28032:19;;;28026:26;-1:-1:-1;;28115:1:43;28111:14;;;28127:3;28107:24;28103:37;28099:42;28084:58;28069:74;;27956:201;-1:-1:-1;;;;;28203:1:43;28187:14;;;28183:22;28170:36;;-1:-1:-1;27132:1341:43:o;28478:1164::-;28694:4;28723:2;28763;28752:9;28748:18;28793:2;28782:9;28775:21;28816:6;28851;28845:13;28882:6;28874;28867:22;28908:2;28898:12;;28941:2;28930:9;28926:18;28919:25;;29003:2;28993:6;28990:1;28986:14;28975:9;28971:30;28967:39;29041:2;29033:6;29029:15;29062:1;29072:541;29086:6;29083:1;29080:13;29072:541;;;29151:22;;;-1:-1:-1;;29147:36:43;29135:49;;29207:13;;29279:9;;29290:10;29275:26;29260:42;;29349:11;;;29343:18;29363:6;29339:31;29322:15;;;29315:56;29410:11;;29404:18;29243:4;29442:15;;;29435:27;;;29485:48;29517:15;;;29404:18;29485:48;:::i;:::-;29591:12;;;;29475:58;-1:-1:-1;;;29556:15:43;;;;29108:1;29101:9;29072:541;;;-1:-1:-1;29630:6:43;;28478:1164;-1:-1:-1;;;;;;;;28478:1164:43:o;29647:346::-;29734:6;29787:2;29775:9;29766:7;29762:23;29758:32;29755:52;;;29803:1;29800;29793:12;29755:52;29829:22;;:::i;:::-;29887:9;29874:23;29867:5;29860:38;29958:2;29947:9;29943:18;29930:32;29925:2;29918:5;29914:14;29907:56;29982:5;29972:15;;;29647:346;;;;:::o;30337:127::-;30398:10;30393:3;30389:20;30386:1;30379:31;30429:4;30426:1;30419:15;30453:4;30450:1;30443:15;30469:217;30509:1;30535;30525:132;;30579:10;30574:3;30570:20;30567:1;30560:31;30614:4;30611:1;30604:15;30642:4;30639:1;30632:15;30525:132;-1:-1:-1;30671:9:43;;30469:217::o;30691:168::-;30764:9;;;30795;;30812:15;;;30806:22;;30792:37;30782:71;;30833:18;;:::i;30864:255::-;30984:19;;31023:2;31015:11;;31012:101;;;-1:-1:-1;;31084:2:43;31080:12;;;31077:1;31073:20;31069:33;31058:45;30864:255;;;;:::o;31124:331::-;-1:-1:-1;;;;;;31244:19:43;;31328:11;;;;31359:1;31351:10;;31348:101;;;31436:2;31430;31423:3;31420:1;31416:11;31413:1;31409:19;31405:28;31401:2;31397:37;31393:46;31384:55;;31348:101;;;31124:331;;;;:::o;31460:568::-;-1:-1:-1;;;;;31725:3:43;31721:28;31712:6;31707:3;31703:16;31699:51;31694:3;31687:64;31811:10;31806:3;31802:20;31793:6;31788:3;31784:16;31780:43;31776:1;31771:3;31767:11;31760:64;31854:6;31849:2;31844:3;31840:12;31833:28;31669:3;31890:6;31884:13;31906:75;31974:6;31969:2;31964:3;31960:12;31953:4;31945:6;31941:17;31906:75;:::i;:::-;32001:16;;;;32019:2;31997:25;;31460:568;-1:-1:-1;;;;;31460:568:43:o;32033:125::-;32098:9;;;32119:10;;;32116:36;;;32132:18;;:::i;32458:532::-;32699:6;32694:3;32687:19;-1:-1:-1;;;;;32762:3:43;32758:28;32749:6;32744:3;32740:16;32736:51;32731:2;32726:3;32722:12;32715:73;32818:6;32813:2;32808:3;32804:12;32797:28;32669:3;32854:6;32848:13;32870:73;32936:6;32931:2;32926:3;32922:12;32917:2;32909:6;32905:15;32870:73;:::i;:::-;32963:16;;;;32981:2;32959:25;;32458:532;-1:-1:-1;;;;;32458:532:43:o;32995:523::-;33097:6;33150:3;33138:9;33129:7;33125:23;33121:33;33118:53;;;33167:1;33164;33157:12;33118:53;33193:22;;:::i;:::-;33244:9;33238:16;33231:5;33224:31;33300:2;33289:9;33285:18;33279:25;33313:32;33337:7;33313:32;:::i;:::-;33372:2;33361:14;;33354:31;33417:70;33479:7;33474:2;33459:18;;33417:70;:::i;:::-;33412:2;33401:14;;33394:94;33405:5;32995:523;-1:-1:-1;;;32995:523:43:o;33523:251::-;33593:6;33646:2;33634:9;33625:7;33621:23;33617:32;33614:52;;;33662:1;33659;33652:12;33614:52;33694:9;33688:16;33713:31;33738:5;33713:31;:::i" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "2455000", - "executionCost": "infinite", - "totalCost": "infinite" - }, - "external": { - "SEND()": "338", - "SEND_AND_CALL()": "250", - "allowInitializePath((uint32,bytes32,uint64))": "infinite", - "allowance(address,address)": "infinite", - "approvalRequired()": "265", - "approve(address,uint256)": "24779", - "balanceOf(address)": "2664", - "combineOptions(uint32,uint16,bytes)": "infinite", - "decimalConversionRate()": "infinite", - "decimals()": "258", - "endpoint()": "infinite", - "enforcedOptions(uint32,uint16)": "infinite", - "isComposeMsgSender((uint32,bytes32,uint64),bytes,address)": "822", - "isPeer(uint32,bytes32)": "2619", - "lzReceive((uint32,bytes32,uint64),bytes32,bytes,address,bytes)": "infinite", - "lzReceiveAndRevert(((uint32,bytes32,uint64),uint32,address,bytes32,uint256,address,bytes,bytes)[])": "infinite", - "lzReceiveSimulate((uint32,bytes32,uint64),bytes32,bytes,address,bytes)": "infinite", - "msgInspector()": "2450", - "name()": "infinite", - "nextNonce(uint32,bytes32)": "436", - "oApp()": "346", - "oAppVersion()": "285", - "oftVersion()": "269", - "owner()": "2443", - "peers(uint32)": "2552", - "preCrime()": "2448", - "quoteOFT((uint32,bytes32,uint256,uint256,bytes,bytes,bytes))": "infinite", - "quoteSend((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),bool)": "infinite", - "renounceOwnership()": "infinite", - "send((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),(uint256,uint256),address)": "infinite", - "setDelegate(address)": "infinite", - "setEnforcedOptions((uint32,uint16,bytes)[])": "infinite", - "setMsgInspector(address)": "27894", - "setPeer(uint32,bytes32)": "26127", - "setPreCrime(address)": "27860", - "sharedDecimals()": "291", - "symbol()": "infinite", - "token()": "344", - "totalSupply()": "2393", - "transfer(address,uint256)": "51296", - "transferFrom(address,address,uint256)": "infinite", - "transferOwnership(address)": "infinite" - } - }, - "methodIdentifiers": { - "SEND()": "1f5e1334", - "SEND_AND_CALL()": "134d4f25", - "allowInitializePath((uint32,bytes32,uint64))": "ff7bd03d", - "allowance(address,address)": "dd62ed3e", - "approvalRequired()": "9f68b964", - "approve(address,uint256)": "095ea7b3", - "balanceOf(address)": "70a08231", - "combineOptions(uint32,uint16,bytes)": "bc70b354", - "decimalConversionRate()": "963efcaa", - "decimals()": "313ce567", - "endpoint()": "5e280f11", - "enforcedOptions(uint32,uint16)": "5535d461", - "isComposeMsgSender((uint32,bytes32,uint64),bytes,address)": "82413eac", - "isPeer(uint32,bytes32)": "5a0dfe4d", - "lzReceive((uint32,bytes32,uint64),bytes32,bytes,address,bytes)": "13137d65", - "lzReceiveAndRevert(((uint32,bytes32,uint64),uint32,address,bytes32,uint256,address,bytes,bytes)[])": "bd815db0", - "lzReceiveSimulate((uint32,bytes32,uint64),bytes32,bytes,address,bytes)": "d045a0dc", - "msgInspector()": "111ecdad", - "name()": "06fdde03", - "nextNonce(uint32,bytes32)": "7d25a05e", - "oApp()": "52ae2879", - "oAppVersion()": "17442b70", - "oftVersion()": "156a0d0f", - "owner()": "8da5cb5b", - "peers(uint32)": "bb0b6a53", - "preCrime()": "b731ea0a", - "quoteOFT((uint32,bytes32,uint256,uint256,bytes,bytes,bytes))": "0d35b415", - "quoteSend((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),bool)": "3b6f743b", - "renounceOwnership()": "715018a6", - "send((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),(uint256,uint256),address)": "c7c7f5b3", - "setDelegate(address)": "ca5eb5e1", - "setEnforcedOptions((uint32,uint16,bytes)[])": "b98bd070", - "setMsgInspector(address)": "6fc1b31e", - "setPeer(uint32,bytes32)": "3400288b", - "setPreCrime(address)": "d4243885", - "sharedDecimals()": "857749b0", - "symbol()": "95d89b41", - "token()": "fc0c546a", - "totalSupply()": "18160ddd", - "transfer(address,uint256)": "a9059cbb", - "transferFrom(address,address,uint256)": "23b872dd", - "transferOwnership(address)": "f2fde38b" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"_lzEndpoint\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_delegate\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"allowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSpender\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidDelegate\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidEndpointCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidLocalDecimals\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"options\",\"type\":\"bytes\"}],\"name\":\"InvalidOptions\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LzTokenUnavailable\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"}],\"name\":\"NoPeer\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"msgValue\",\"type\":\"uint256\"}],\"name\":\"NotEnoughNative\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"OnlyEndpoint\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"}],\"name\":\"OnlyPeer\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlySelf\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"name\":\"SimulationResult\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountLD\",\"type\":\"uint256\"}],\"name\":\"SlippageExceeded\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"msgType\",\"type\":\"uint16\"},{\"internalType\":\"bytes\",\"name\":\"options\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"struct EnforcedOptionParam[]\",\"name\":\"_enforcedOptions\",\"type\":\"tuple[]\"}],\"name\":\"EnforcedOptionSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"inspector\",\"type\":\"address\"}],\"name\":\"MsgInspectorSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"toAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountReceivedLD\",\"type\":\"uint256\"}],\"name\":\"OFTReceived\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"fromAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountSentLD\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountReceivedLD\",\"type\":\"uint256\"}],\"name\":\"OFTSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"peer\",\"type\":\"bytes32\"}],\"name\":\"PeerSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"preCrimeAddress\",\"type\":\"address\"}],\"name\":\"PreCrimeSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"SEND\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SEND_AND_CALL\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"origin\",\"type\":\"tuple\"}],\"name\":\"allowInitializePath\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"approvalRequired\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"_msgType\",\"type\":\"uint16\"},{\"internalType\":\"bytes\",\"name\":\"_extraOptions\",\"type\":\"bytes\"}],\"name\":\"combineOptions\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimalConversionRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"endpoint\",\"outputs\":[{\"internalType\":\"contract ILayerZeroEndpointV2\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"msgType\",\"type\":\"uint16\"}],\"name\":\"enforcedOptions\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"enforcedOption\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"}],\"name\":\"isComposeMsgSender\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_peer\",\"type\":\"bytes32\"}],\"name\":\"isPeer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"_origin\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"_guid\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"_executor\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"lzReceive\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"origin\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"executor\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"internalType\":\"struct InboundPacket[]\",\"name\":\"_packets\",\"type\":\"tuple[]\"}],\"name\":\"lzReceiveAndRevert\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"_origin\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"_guid\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"_executor\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"lzReceiveSimulate\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"msgInspector\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"nextNonce\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"oApp\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"oAppVersion\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"senderVersion\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"receiverVersion\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"oftVersion\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"},{\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"}],\"name\":\"peers\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"peer\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"preCrime\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"to\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"amountLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountLD\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"extraOptions\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"composeMsg\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"oftCmd\",\"type\":\"bytes\"}],\"internalType\":\"struct SendParam\",\"name\":\"_sendParam\",\"type\":\"tuple\"}],\"name\":\"quoteOFT\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"minAmountLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountLD\",\"type\":\"uint256\"}],\"internalType\":\"struct OFTLimit\",\"name\":\"oftLimit\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"int256\",\"name\":\"feeAmountLD\",\"type\":\"int256\"},{\"internalType\":\"string\",\"name\":\"description\",\"type\":\"string\"}],\"internalType\":\"struct OFTFeeDetail[]\",\"name\":\"oftFeeDetails\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"amountSentLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountReceivedLD\",\"type\":\"uint256\"}],\"internalType\":\"struct OFTReceipt\",\"name\":\"oftReceipt\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"to\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"amountLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountLD\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"extraOptions\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"composeMsg\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"oftCmd\",\"type\":\"bytes\"}],\"internalType\":\"struct SendParam\",\"name\":\"_sendParam\",\"type\":\"tuple\"},{\"internalType\":\"bool\",\"name\":\"_payInLzToken\",\"type\":\"bool\"}],\"name\":\"quoteSend\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nativeFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lzTokenFee\",\"type\":\"uint256\"}],\"internalType\":\"struct MessagingFee\",\"name\":\"msgFee\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"to\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"amountLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountLD\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"extraOptions\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"composeMsg\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"oftCmd\",\"type\":\"bytes\"}],\"internalType\":\"struct SendParam\",\"name\":\"_sendParam\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nativeFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lzTokenFee\",\"type\":\"uint256\"}],\"internalType\":\"struct MessagingFee\",\"name\":\"_fee\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"_refundAddress\",\"type\":\"address\"}],\"name\":\"send\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nativeFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lzTokenFee\",\"type\":\"uint256\"}],\"internalType\":\"struct MessagingFee\",\"name\":\"fee\",\"type\":\"tuple\"}],\"internalType\":\"struct MessagingReceipt\",\"name\":\"msgReceipt\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"amountSentLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountReceivedLD\",\"type\":\"uint256\"}],\"internalType\":\"struct OFTReceipt\",\"name\":\"oftReceipt\",\"type\":\"tuple\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_delegate\",\"type\":\"address\"}],\"name\":\"setDelegate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"msgType\",\"type\":\"uint16\"},{\"internalType\":\"bytes\",\"name\":\"options\",\"type\":\"bytes\"}],\"internalType\":\"struct EnforcedOptionParam[]\",\"name\":\"_enforcedOptions\",\"type\":\"tuple[]\"}],\"name\":\"setEnforcedOptions\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_msgInspector\",\"type\":\"address\"}],\"name\":\"setMsgInspector\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_peer\",\"type\":\"bytes32\"}],\"name\":\"setPeer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_preCrime\",\"type\":\"address\"}],\"name\":\"setPreCrime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sharedDecimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"token\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"ERC20InsufficientAllowance(address,uint256,uint256)\":[{\"details\":\"Indicates a failure with the `spender`\\u2019s `allowance`. Used in transfers.\",\"params\":{\"allowance\":\"Amount of tokens a `spender` is allowed to operate with.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC20InsufficientBalance(address,uint256,uint256)\":[{\"details\":\"Indicates an error related to the current `balance` of a `sender`. Used in transfers.\",\"params\":{\"balance\":\"Current balance for the interacting account.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC20InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC20InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidSpender(address)\":[{\"details\":\"Indicates a failure with the `spender` to be approved. Used in approvals.\",\"params\":{\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}],\"SafeERC20FailedOperation(address)\":[{\"details\":\"An operation with an ERC-20 token failed.\"}]},\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"PreCrimeSet(address)\":{\"details\":\"Emitted when the preCrime contract address is set.\",\"params\":{\"preCrimeAddress\":\"The address of the preCrime contract.\"}},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowInitializePath((uint32,bytes32,uint64))\":{\"details\":\"This indicates to the endpoint that the OApp has enabled msgs for this particular path to be received.This defaults to assuming if a peer has been set, its initialized. Can be overridden by the OApp if there is other logic to determine this.\",\"params\":{\"origin\":\"The origin information containing the source endpoint and sender address.\"},\"returns\":{\"_0\":\"Whether the path has been initialized.\"}},\"allowance(address,address)\":{\"details\":\"See {IERC20-allowance}.\"},\"approvalRequired()\":{\"details\":\"In the case of OFT where the contract IS the token, approval is NOT required.\",\"returns\":{\"_0\":\"requiresApproval Needs approval of the underlying token implementation.\"}},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. NOTE: If `value` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"See {IERC20-balanceOf}.\"},\"combineOptions(uint32,uint16,bytes)\":{\"details\":\"If there is an enforced lzReceive option: - {gasLimit: 200k, msg.value: 1 ether} AND a caller supplies a lzReceive option: {gasLimit: 100k, msg.value: 0.5 ether} - The resulting options will be {gasLimit: 300k, msg.value: 1.5 ether} when the message is executed on the remote lzReceive() function.This presence of duplicated options is handled off-chain in the verifier/executor.\",\"params\":{\"_eid\":\"The endpoint ID.\",\"_extraOptions\":\"Additional options passed by the caller.\",\"_msgType\":\"The OAPP message type.\"},\"returns\":{\"_0\":\"options The combination of caller specified options AND enforced options.\"}},\"decimals()\":{\"details\":\"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the default value returned by this function, unless it's overridden. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.\"},\"isComposeMsgSender((uint32,bytes32,uint64),bytes,address)\":{\"details\":\"_origin The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message._message The lzReceive payload.Applications can optionally choose to implement separate composeMsg senders that are NOT the bridging layer.The default sender IS the OAppReceiver implementer.\",\"params\":{\"_sender\":\"The sender address.\"},\"returns\":{\"_0\":\"isSender Is a valid sender.\"}},\"isPeer(uint32,bytes32)\":{\"details\":\"Check if the peer is considered 'trusted' by the OApp.Enables OAppPreCrimeSimulator to check whether a potential Inbound Packet is from a trusted source.\",\"params\":{\"_eid\":\"The endpoint ID to check.\",\"_peer\":\"The peer to check.\"},\"returns\":{\"_0\":\"Whether the peer passed is considered 'trusted' by the OApp.\"}},\"lzReceive((uint32,bytes32,uint64),bytes32,bytes,address,bytes)\":{\"details\":\"Entry point for receiving messages or packets from the endpoint.Entry point for receiving msg/packet from the LayerZero endpoint.\",\"params\":{\"_executor\":\"The address of the executor for the received message.\",\"_extraData\":\"Additional arbitrary data provided by the corresponding executor.\",\"_guid\":\"The unique identifier for the received LayerZero message.\",\"_message\":\"The payload of the received message.\",\"_origin\":\"The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message.\"}},\"lzReceiveAndRevert(((uint32,bytes32,uint64),uint32,address,bytes32,uint256,address,bytes,bytes)[])\":{\"details\":\"Interface for pre-crime simulations. Always reverts at the end with the simulation results.WARNING: MUST revert at the end with the simulation results.Gives the preCrime implementation the ability to mock sending packets to the lzReceive function, WITHOUT actually executing them.\",\"params\":{\"_packets\":\"An array of InboundPacket objects representing received packets to be delivered.\"}},\"lzReceiveSimulate((uint32,bytes32,uint64),bytes32,bytes,address,bytes)\":{\"details\":\"Is effectively an internal function because msg.sender must be address(this). Allows resetting the call stack for 'internal' calls.\",\"params\":{\"_executor\":\"The executor address for the packet.\",\"_extraData\":\"Additional data for the packet.\",\"_guid\":\"The unique identifier of the packet.\",\"_message\":\"The message payload of the packet.\",\"_origin\":\"The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message.\"}},\"name()\":{\"details\":\"Returns the name of the token.\"},\"nextNonce(uint32,bytes32)\":{\"details\":\"_srcEid The source endpoint ID._sender The sender address.The path nonce starts from 1. If 0 is returned it means that there is NO nonce ordered enforcement.Is required by the off-chain executor to determine the OApp expects msg execution is ordered.This is also enforced by the OApp.By default this is NOT enabled. ie. nextNonce is hardcoded to return 0.\",\"returns\":{\"nonce\":\"The next nonce.\"}},\"oApp()\":{\"details\":\"Retrieves the address of the OApp contract.The simulator contract is the base contract for the OApp by default.If the simulator is a separate contract, override this function.\",\"returns\":{\"_0\":\"The address of the OApp contract.\"}},\"oAppVersion()\":{\"returns\":{\"receiverVersion\":\"The version of the OAppReceiver.sol implementation.\",\"senderVersion\":\"The version of the OAppSender.sol implementation.\"}},\"oftVersion()\":{\"details\":\"interfaceId: This specific interface ID is '0x02e49c2c'.version: Indicates a cross-chain compatible msg encoding with other OFTs.If a new feature is added to the OFT cross-chain msg encoding, the version will be incremented. ie. localOFT version(x,1) CAN send messages to remoteOFT version(x,1)\",\"returns\":{\"interfaceId\":\"The interface ID.\",\"version\":\"The version.\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"quoteOFT((uint32,bytes32,uint256,uint256,bytes,bytes,bytes))\":{\"params\":{\"_sendParam\":\"The parameters for the send operation.\"},\"returns\":{\"oftFeeDetails\":\"The details of OFT fees.\",\"oftLimit\":\"The OFT limit information.\",\"oftReceipt\":\"The OFT receipt information.\"}},\"quoteSend((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),bool)\":{\"details\":\"MessagingFee: LayerZero msg fee - nativeFee: The native fee. - lzTokenFee: The lzToken fee.\",\"params\":{\"_payInLzToken\":\"Flag indicating whether the caller is paying in the LZ token.\",\"_sendParam\":\"The parameters for the send() operation.\"},\"returns\":{\"msgFee\":\"The calculated LayerZero messaging fee from the send() operation.\"}},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"send((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),(uint256,uint256),address)\":{\"details\":\"Executes the send operation.MessagingReceipt: LayerZero msg receipt - guid: The unique identifier for the sent message. - nonce: The nonce of the sent message. - fee: The LayerZero fee incurred for the message.\",\"params\":{\"_fee\":\"The calculated fee for the send() operation. - nativeFee: The native fee. - lzTokenFee: The lzToken fee.\",\"_refundAddress\":\"The address to receive any excess funds.\",\"_sendParam\":\"The parameters for the send operation.\"},\"returns\":{\"msgReceipt\":\"The receipt for the send operation.\",\"oftReceipt\":\"The OFT receipt information.\"}},\"setDelegate(address)\":{\"details\":\"Only the owner/admin of the OApp can call this function.Provides the ability for a delegate to set configs, on behalf of the OApp, directly on the Endpoint contract.\",\"params\":{\"_delegate\":\"The address of the delegate to be set.\"}},\"setEnforcedOptions((uint32,uint16,bytes)[])\":{\"details\":\"Sets the enforced options for specific endpoint and message type combinations.Only the owner/admin of the OApp can call this function.Provides a way for the OApp to enforce things like paying for PreCrime, AND/OR minimum dst lzReceive gas amounts etc.These enforced options can vary as the potential options/execution on the remote may differ as per the msgType. eg. Amount of lzReceive() gas necessary to deliver a lzCompose() message adds overhead you dont want to pay if you are only making a standard LayerZero message ie. lzReceive() WITHOUT sendCompose().\",\"params\":{\"_enforcedOptions\":\"An array of EnforcedOptionParam structures specifying enforced options.\"}},\"setMsgInspector(address)\":{\"details\":\"Sets the message inspector address for the OFT.This is an optional contract that can be used to inspect both 'message' and 'options'.Set it to address(0) to disable it, or set it to a contract address to enable it.\",\"params\":{\"_msgInspector\":\"The address of the message inspector.\"}},\"setPeer(uint32,bytes32)\":{\"details\":\"Only the owner/admin of the OApp can call this function.Indicates that the peer is trusted to send LayerZero messages to this OApp.Set this to bytes32(0) to remove the peer address.Peer is a bytes32 to accommodate non-evm chains.\",\"params\":{\"_eid\":\"The endpoint ID.\",\"_peer\":\"The address of the peer to be associated with the corresponding endpoint.\"}},\"setPreCrime(address)\":{\"details\":\"Sets the preCrime contract address.\",\"params\":{\"_preCrime\":\"The address of the preCrime contract.\"}},\"sharedDecimals()\":{\"details\":\"Retrieves the shared decimals of the OFT.Sets an implicit cap on the amount of tokens, over uint64.max() will need some sort of outbound cap / totalSupply cap Lowest common decimal denominator between chains. Defaults to 6 decimal places to provide up to 18,446,744,073,709.551615 units (max uint64). For tokens exceeding this totalSupply(), they will need to override the sharedDecimals function with something smaller. ie. 4 sharedDecimals would be 1,844,674,407,370,955.1615\",\"returns\":{\"_0\":\"The shared decimals of the OFT.\"}},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"token()\":{\"details\":\"Retrieves the address of the underlying ERC20 implementation.In the case of OFT, address(this) and erc20 are the same contract.\",\"returns\":{\"_0\":\"The address of the OFT token.\"}},\"totalSupply()\":{\"details\":\"See {IERC20-totalSupply}.\"},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `value`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC20-transferFrom}. Skips emitting an {Approval} event indicating an allowance update. This is not required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve]. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `value`. - the caller must have allowance for ``from``'s tokens of at least `value`.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"allowInitializePath((uint32,bytes32,uint64))\":{\"notice\":\"Checks if the path initialization is allowed based on the provided origin.\"},\"approvalRequired()\":{\"notice\":\"Indicates whether the OFT contract requires approval of the 'token()' to send.\"},\"combineOptions(uint32,uint16,bytes)\":{\"notice\":\"Combines options for a given endpoint and message type.\"},\"endpoint()\":{\"notice\":\"Retrieves the LayerZero endpoint associated with the OApp.\"},\"isComposeMsgSender((uint32,bytes32,uint64),bytes,address)\":{\"notice\":\"Indicates whether an address is an approved composeMsg sender to the Endpoint.\"},\"nextNonce(uint32,bytes32)\":{\"notice\":\"Retrieves the next nonce for a given source endpoint and sender address.\"},\"oAppVersion()\":{\"notice\":\"Retrieves the OApp version information.\"},\"oftVersion()\":{\"notice\":\"Retrieves interfaceID and the version of the OFT.\"},\"peers(uint32)\":{\"notice\":\"Retrieves the peer (OApp) associated with a corresponding endpoint.\"},\"quoteOFT((uint32,bytes32,uint256,uint256,bytes,bytes,bytes))\":{\"notice\":\"Provides the fee breakdown and settings data for an OFT. Unused in the default implementation.\"},\"quoteSend((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),bool)\":{\"notice\":\"Provides a quote for the send() operation.\"},\"setDelegate(address)\":{\"notice\":\"Sets the delegate address for the OApp.\"},\"setPeer(uint32,bytes32)\":{\"notice\":\"Sets the peer address (OApp instance) for a corresponding endpoint.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/MyOFT.sol\":\"MyOFT\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\nimport { IMessageLibManager } from \\\"./IMessageLibManager.sol\\\";\\nimport { IMessagingComposer } from \\\"./IMessagingComposer.sol\\\";\\nimport { IMessagingChannel } from \\\"./IMessagingChannel.sol\\\";\\nimport { IMessagingContext } from \\\"./IMessagingContext.sol\\\";\\n\\nstruct MessagingParams {\\n uint32 dstEid;\\n bytes32 receiver;\\n bytes message;\\n bytes options;\\n bool payInLzToken;\\n}\\n\\nstruct MessagingReceipt {\\n bytes32 guid;\\n uint64 nonce;\\n MessagingFee fee;\\n}\\n\\nstruct MessagingFee {\\n uint256 nativeFee;\\n uint256 lzTokenFee;\\n}\\n\\nstruct Origin {\\n uint32 srcEid;\\n bytes32 sender;\\n uint64 nonce;\\n}\\n\\ninterface ILayerZeroEndpointV2 is IMessageLibManager, IMessagingComposer, IMessagingChannel, IMessagingContext {\\n event PacketSent(bytes encodedPayload, bytes options, address sendLibrary);\\n\\n event PacketVerified(Origin origin, address receiver, bytes32 payloadHash);\\n\\n event PacketDelivered(Origin origin, address receiver);\\n\\n event LzReceiveAlert(\\n address indexed receiver,\\n address indexed executor,\\n Origin origin,\\n bytes32 guid,\\n uint256 gas,\\n uint256 value,\\n bytes message,\\n bytes extraData,\\n bytes reason\\n );\\n\\n event LzTokenSet(address token);\\n\\n event DelegateSet(address sender, address delegate);\\n\\n function quote(MessagingParams calldata _params, address _sender) external view returns (MessagingFee memory);\\n\\n function send(\\n MessagingParams calldata _params,\\n address _refundAddress\\n ) external payable returns (MessagingReceipt memory);\\n\\n function verify(Origin calldata _origin, address _receiver, bytes32 _payloadHash) external;\\n\\n function verifiable(Origin calldata _origin, address _receiver) external view returns (bool);\\n\\n function initializable(Origin calldata _origin, address _receiver) external view returns (bool);\\n\\n function lzReceive(\\n Origin calldata _origin,\\n address _receiver,\\n bytes32 _guid,\\n bytes calldata _message,\\n bytes calldata _extraData\\n ) external payable;\\n\\n // oapp can burn messages partially by calling this function with its own business logic if messages are verified in order\\n function clear(address _oapp, Origin calldata _origin, bytes32 _guid, bytes calldata _message) external;\\n\\n function setLzToken(address _lzToken) external;\\n\\n function lzToken() external view returns (address);\\n\\n function nativeToken() external view returns (address);\\n\\n function setDelegate(address _delegate) external;\\n}\\n\",\"keccak256\":\"0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\nimport { Origin } from \\\"./ILayerZeroEndpointV2.sol\\\";\\n\\ninterface ILayerZeroReceiver {\\n function allowInitializePath(Origin calldata _origin) external view returns (bool);\\n\\n function nextNonce(uint32 _eid, bytes32 _sender) external view returns (uint64);\\n\\n function lzReceive(\\n Origin calldata _origin,\\n bytes32 _guid,\\n bytes calldata _message,\\n address _executor,\\n bytes calldata _extraData\\n ) external payable;\\n}\\n\",\"keccak256\":\"0x9641abba8d53b08bb517d1b74801dd15ea7b84d77a6719085bd96c8ea94e3ca0\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\nimport { IERC165 } from \\\"@openzeppelin/contracts/utils/introspection/IERC165.sol\\\";\\n\\nimport { SetConfigParam } from \\\"./IMessageLibManager.sol\\\";\\n\\nenum MessageLibType {\\n Send,\\n Receive,\\n SendAndReceive\\n}\\n\\ninterface IMessageLib is IERC165 {\\n function setConfig(address _oapp, SetConfigParam[] calldata _config) external;\\n\\n function getConfig(uint32 _eid, address _oapp, uint32 _configType) external view returns (bytes memory config);\\n\\n function isSupportedEid(uint32 _eid) external view returns (bool);\\n\\n // message libs of same major version are compatible\\n function version() external view returns (uint64 major, uint8 minor, uint8 endpointVersion);\\n\\n function messageLibType() external view returns (MessageLibType);\\n}\\n\",\"keccak256\":\"0x5cf5f24751b4e3ea1c9c5ded07cedfdfd62566b6daaffcc0144733859c9dba0c\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\nstruct SetConfigParam {\\n uint32 eid;\\n uint32 configType;\\n bytes config;\\n}\\n\\ninterface IMessageLibManager {\\n struct Timeout {\\n address lib;\\n uint256 expiry;\\n }\\n\\n event LibraryRegistered(address newLib);\\n event DefaultSendLibrarySet(uint32 eid, address newLib);\\n event DefaultReceiveLibrarySet(uint32 eid, address newLib);\\n event DefaultReceiveLibraryTimeoutSet(uint32 eid, address oldLib, uint256 expiry);\\n event SendLibrarySet(address sender, uint32 eid, address newLib);\\n event ReceiveLibrarySet(address receiver, uint32 eid, address newLib);\\n event ReceiveLibraryTimeoutSet(address receiver, uint32 eid, address oldLib, uint256 timeout);\\n\\n function registerLibrary(address _lib) external;\\n\\n function isRegisteredLibrary(address _lib) external view returns (bool);\\n\\n function getRegisteredLibraries() external view returns (address[] memory);\\n\\n function setDefaultSendLibrary(uint32 _eid, address _newLib) external;\\n\\n function defaultSendLibrary(uint32 _eid) external view returns (address);\\n\\n function setDefaultReceiveLibrary(uint32 _eid, address _newLib, uint256 _gracePeriod) external;\\n\\n function defaultReceiveLibrary(uint32 _eid) external view returns (address);\\n\\n function setDefaultReceiveLibraryTimeout(uint32 _eid, address _lib, uint256 _expiry) external;\\n\\n function defaultReceiveLibraryTimeout(uint32 _eid) external view returns (address lib, uint256 expiry);\\n\\n function isSupportedEid(uint32 _eid) external view returns (bool);\\n\\n function isValidReceiveLibrary(address _receiver, uint32 _eid, address _lib) external view returns (bool);\\n\\n /// ------------------- OApp interfaces -------------------\\n function setSendLibrary(address _oapp, uint32 _eid, address _newLib) external;\\n\\n function getSendLibrary(address _sender, uint32 _eid) external view returns (address lib);\\n\\n function isDefaultSendLibrary(address _sender, uint32 _eid) external view returns (bool);\\n\\n function setReceiveLibrary(address _oapp, uint32 _eid, address _newLib, uint256 _gracePeriod) external;\\n\\n function getReceiveLibrary(address _receiver, uint32 _eid) external view returns (address lib, bool isDefault);\\n\\n function setReceiveLibraryTimeout(address _oapp, uint32 _eid, address _lib, uint256 _expiry) external;\\n\\n function receiveLibraryTimeout(address _receiver, uint32 _eid) external view returns (address lib, uint256 expiry);\\n\\n function setConfig(address _oapp, address _lib, SetConfigParam[] calldata _params) external;\\n\\n function getConfig(\\n address _oapp,\\n address _lib,\\n uint32 _eid,\\n uint32 _configType\\n ) external view returns (bytes memory config);\\n}\\n\",\"keccak256\":\"0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\ninterface IMessagingChannel {\\n event InboundNonceSkipped(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce);\\n event PacketNilified(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce, bytes32 payloadHash);\\n event PacketBurnt(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce, bytes32 payloadHash);\\n\\n function eid() external view returns (uint32);\\n\\n // this is an emergency function if a message cannot be verified for some reasons\\n // required to provide _nextNonce to avoid race condition\\n function skip(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce) external;\\n\\n function nilify(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce, bytes32 _payloadHash) external;\\n\\n function burn(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce, bytes32 _payloadHash) external;\\n\\n function nextGuid(address _sender, uint32 _dstEid, bytes32 _receiver) external view returns (bytes32);\\n\\n function inboundNonce(address _receiver, uint32 _srcEid, bytes32 _sender) external view returns (uint64);\\n\\n function outboundNonce(address _sender, uint32 _dstEid, bytes32 _receiver) external view returns (uint64);\\n\\n function inboundPayloadHash(\\n address _receiver,\\n uint32 _srcEid,\\n bytes32 _sender,\\n uint64 _nonce\\n ) external view returns (bytes32);\\n\\n function lazyInboundNonce(address _receiver, uint32 _srcEid, bytes32 _sender) external view returns (uint64);\\n}\\n\",\"keccak256\":\"0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\ninterface IMessagingComposer {\\n event ComposeSent(address from, address to, bytes32 guid, uint16 index, bytes message);\\n event ComposeDelivered(address from, address to, bytes32 guid, uint16 index);\\n event LzComposeAlert(\\n address indexed from,\\n address indexed to,\\n address indexed executor,\\n bytes32 guid,\\n uint16 index,\\n uint256 gas,\\n uint256 value,\\n bytes message,\\n bytes extraData,\\n bytes reason\\n );\\n\\n function composeQueue(\\n address _from,\\n address _to,\\n bytes32 _guid,\\n uint16 _index\\n ) external view returns (bytes32 messageHash);\\n\\n function sendCompose(address _to, bytes32 _guid, uint16 _index, bytes calldata _message) external;\\n\\n function lzCompose(\\n address _from,\\n address _to,\\n bytes32 _guid,\\n uint16 _index,\\n bytes calldata _message,\\n bytes calldata _extraData\\n ) external payable;\\n}\\n\",\"keccak256\":\"0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\ninterface IMessagingContext {\\n function isSendingMessage() external view returns (bool);\\n\\n function getSendContext() external view returns (uint32 dstEid, address sender);\\n}\\n\",\"keccak256\":\"0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\nimport { MessagingFee } from \\\"./ILayerZeroEndpointV2.sol\\\";\\nimport { IMessageLib } from \\\"./IMessageLib.sol\\\";\\n\\nstruct Packet {\\n uint64 nonce;\\n uint32 srcEid;\\n address sender;\\n uint32 dstEid;\\n bytes32 receiver;\\n bytes32 guid;\\n bytes message;\\n}\\n\\ninterface ISendLib is IMessageLib {\\n function send(\\n Packet calldata _packet,\\n bytes calldata _options,\\n bool _payInLzToken\\n ) external returns (MessagingFee memory, bytes memory encodedPacket);\\n\\n function quote(\\n Packet calldata _packet,\\n bytes calldata _options,\\n bool _payInLzToken\\n ) external view returns (MessagingFee memory);\\n\\n function setTreasury(address _treasury) external;\\n\\n function withdrawFee(address _to, uint256 _amount) external;\\n\\n function withdrawLzTokenFee(address _lzToken, address _to, uint256 _amount) external;\\n}\\n\",\"keccak256\":\"0xf1c07bc61e7b1dce195ed12d50f87980fbf2d63cac1326fd28287f55fe0ba625\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol\":{\"content\":\"// SPDX-License-Identifier: LZBL-1.2\\n\\npragma solidity ^0.8.20;\\n\\nlibrary AddressCast {\\n error AddressCast_InvalidSizeForAddress();\\n error AddressCast_InvalidAddress();\\n\\n function toBytes32(bytes calldata _addressBytes) internal pure returns (bytes32 result) {\\n if (_addressBytes.length > 32) revert AddressCast_InvalidAddress();\\n result = bytes32(_addressBytes);\\n unchecked {\\n uint256 offset = 32 - _addressBytes.length;\\n result = result >> (offset * 8);\\n }\\n }\\n\\n function toBytes32(address _address) internal pure returns (bytes32 result) {\\n result = bytes32(uint256(uint160(_address)));\\n }\\n\\n function toBytes(bytes32 _addressBytes32, uint256 _size) internal pure returns (bytes memory result) {\\n if (_size == 0 || _size > 32) revert AddressCast_InvalidSizeForAddress();\\n result = new bytes(_size);\\n unchecked {\\n uint256 offset = 256 - _size * 8;\\n assembly {\\n mstore(add(result, 32), shl(offset, _addressBytes32))\\n }\\n }\\n }\\n\\n function toAddress(bytes32 _addressBytes32) internal pure returns (address result) {\\n result = address(uint160(uint256(_addressBytes32)));\\n }\\n\\n function toAddress(bytes calldata _addressBytes) internal pure returns (address result) {\\n if (_addressBytes.length != 20) revert AddressCast_InvalidAddress();\\n result = address(bytes20(_addressBytes));\\n }\\n}\\n\",\"keccak256\":\"0x2ebbcaaab3554edcd41b581f1a72ac1806afbfb8047d0d47ff098f9af30d6deb\",\"license\":\"LZBL-1.2\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol\":{\"content\":\"// SPDX-License-Identifier: LZBL-1.2\\n\\npragma solidity ^0.8.20;\\n\\nimport { Packet } from \\\"../../interfaces/ISendLib.sol\\\";\\nimport { AddressCast } from \\\"../../libs/AddressCast.sol\\\";\\n\\nlibrary PacketV1Codec {\\n using AddressCast for address;\\n using AddressCast for bytes32;\\n\\n uint8 internal constant PACKET_VERSION = 1;\\n\\n // header (version + nonce + path)\\n // version\\n uint256 private constant PACKET_VERSION_OFFSET = 0;\\n // nonce\\n uint256 private constant NONCE_OFFSET = 1;\\n // path\\n uint256 private constant SRC_EID_OFFSET = 9;\\n uint256 private constant SENDER_OFFSET = 13;\\n uint256 private constant DST_EID_OFFSET = 45;\\n uint256 private constant RECEIVER_OFFSET = 49;\\n // payload (guid + message)\\n uint256 private constant GUID_OFFSET = 81; // keccak256(nonce + path)\\n uint256 private constant MESSAGE_OFFSET = 113;\\n\\n function encode(Packet memory _packet) internal pure returns (bytes memory encodedPacket) {\\n encodedPacket = abi.encodePacked(\\n PACKET_VERSION,\\n _packet.nonce,\\n _packet.srcEid,\\n _packet.sender.toBytes32(),\\n _packet.dstEid,\\n _packet.receiver,\\n _packet.guid,\\n _packet.message\\n );\\n }\\n\\n function encodePacketHeader(Packet memory _packet) internal pure returns (bytes memory) {\\n return\\n abi.encodePacked(\\n PACKET_VERSION,\\n _packet.nonce,\\n _packet.srcEid,\\n _packet.sender.toBytes32(),\\n _packet.dstEid,\\n _packet.receiver\\n );\\n }\\n\\n function encodePayload(Packet memory _packet) internal pure returns (bytes memory) {\\n return abi.encodePacked(_packet.guid, _packet.message);\\n }\\n\\n function header(bytes calldata _packet) internal pure returns (bytes calldata) {\\n return _packet[0:GUID_OFFSET];\\n }\\n\\n function version(bytes calldata _packet) internal pure returns (uint8) {\\n return uint8(bytes1(_packet[PACKET_VERSION_OFFSET:NONCE_OFFSET]));\\n }\\n\\n function nonce(bytes calldata _packet) internal pure returns (uint64) {\\n return uint64(bytes8(_packet[NONCE_OFFSET:SRC_EID_OFFSET]));\\n }\\n\\n function srcEid(bytes calldata _packet) internal pure returns (uint32) {\\n return uint32(bytes4(_packet[SRC_EID_OFFSET:SENDER_OFFSET]));\\n }\\n\\n function sender(bytes calldata _packet) internal pure returns (bytes32) {\\n return bytes32(_packet[SENDER_OFFSET:DST_EID_OFFSET]);\\n }\\n\\n function senderAddressB20(bytes calldata _packet) internal pure returns (address) {\\n return sender(_packet).toAddress();\\n }\\n\\n function dstEid(bytes calldata _packet) internal pure returns (uint32) {\\n return uint32(bytes4(_packet[DST_EID_OFFSET:RECEIVER_OFFSET]));\\n }\\n\\n function receiver(bytes calldata _packet) internal pure returns (bytes32) {\\n return bytes32(_packet[RECEIVER_OFFSET:GUID_OFFSET]);\\n }\\n\\n function receiverB20(bytes calldata _packet) internal pure returns (address) {\\n return receiver(_packet).toAddress();\\n }\\n\\n function guid(bytes calldata _packet) internal pure returns (bytes32) {\\n return bytes32(_packet[GUID_OFFSET:MESSAGE_OFFSET]);\\n }\\n\\n function message(bytes calldata _packet) internal pure returns (bytes calldata) {\\n return bytes(_packet[MESSAGE_OFFSET:]);\\n }\\n\\n function payload(bytes calldata _packet) internal pure returns (bytes calldata) {\\n return bytes(_packet[GUID_OFFSET:]);\\n }\\n\\n function payloadHash(bytes calldata _packet) internal pure returns (bytes32) {\\n return keccak256(payload(_packet));\\n }\\n}\\n\",\"keccak256\":\"0xc84cf1bf785977fe1fbe7566eef902c2db68d0e163813ebe6c34921754802680\",\"license\":\"LZBL-1.2\"},\"@layerzerolabs/oapp-evm/contracts/oapp/OApp.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\n// @dev Import the 'MessagingFee' and 'MessagingReceipt' so it's exposed to OApp implementers\\n// solhint-disable-next-line no-unused-import\\nimport { OAppSender, MessagingFee, MessagingReceipt } from \\\"./OAppSender.sol\\\";\\n// @dev Import the 'Origin' so it's exposed to OApp implementers\\n// solhint-disable-next-line no-unused-import\\nimport { OAppReceiver, Origin } from \\\"./OAppReceiver.sol\\\";\\nimport { OAppCore } from \\\"./OAppCore.sol\\\";\\n\\n/**\\n * @title OApp\\n * @dev Abstract contract serving as the base for OApp implementation, combining OAppSender and OAppReceiver functionality.\\n */\\nabstract contract OApp is OAppSender, OAppReceiver {\\n /**\\n * @dev Constructor to initialize the OApp with the provided endpoint and owner.\\n * @param _endpoint The address of the LOCAL LayerZero endpoint.\\n * @param _delegate The delegate capable of making OApp configurations inside of the endpoint.\\n */\\n constructor(address _endpoint, address _delegate) OAppCore(_endpoint, _delegate) {}\\n\\n /**\\n * @notice Retrieves the OApp version information.\\n * @return senderVersion The version of the OAppSender.sol implementation.\\n * @return receiverVersion The version of the OAppReceiver.sol implementation.\\n */\\n function oAppVersion()\\n public\\n pure\\n virtual\\n override(OAppSender, OAppReceiver)\\n returns (uint64 senderVersion, uint64 receiverVersion)\\n {\\n return (SENDER_VERSION, RECEIVER_VERSION);\\n }\\n}\\n\",\"keccak256\":\"0xac362c4c291fad2f1511a968424b2e78a5ad502d1c867bd31da04be742aca8c5\",\"license\":\"MIT\"},\"@layerzerolabs/oapp-evm/contracts/oapp/OAppCore.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\nimport { IOAppCore, ILayerZeroEndpointV2 } from \\\"./interfaces/IOAppCore.sol\\\";\\n\\n/**\\n * @title OAppCore\\n * @dev Abstract contract implementing the IOAppCore interface with basic OApp configurations.\\n */\\nabstract contract OAppCore is IOAppCore, Ownable {\\n // The LayerZero endpoint associated with the given OApp\\n ILayerZeroEndpointV2 public immutable endpoint;\\n\\n // Mapping to store peers associated with corresponding endpoints\\n mapping(uint32 eid => bytes32 peer) public peers;\\n\\n /**\\n * @dev Constructor to initialize the OAppCore with the provided endpoint and delegate.\\n * @param _endpoint The address of the LOCAL Layer Zero endpoint.\\n * @param _delegate The delegate capable of making OApp configurations inside of the endpoint.\\n *\\n * @dev The delegate typically should be set as the owner of the contract.\\n */\\n constructor(address _endpoint, address _delegate) {\\n endpoint = ILayerZeroEndpointV2(_endpoint);\\n\\n if (_delegate == address(0)) revert InvalidDelegate();\\n endpoint.setDelegate(_delegate);\\n }\\n\\n /**\\n * @notice Sets the peer address (OApp instance) for a corresponding endpoint.\\n * @param _eid The endpoint ID.\\n * @param _peer The address of the peer to be associated with the corresponding endpoint.\\n *\\n * @dev Only the owner/admin of the OApp can call this function.\\n * @dev Indicates that the peer is trusted to send LayerZero messages to this OApp.\\n * @dev Set this to bytes32(0) to remove the peer address.\\n * @dev Peer is a bytes32 to accommodate non-evm chains.\\n */\\n function setPeer(uint32 _eid, bytes32 _peer) public virtual onlyOwner {\\n _setPeer(_eid, _peer);\\n }\\n\\n /**\\n * @notice Sets the peer address (OApp instance) for a corresponding endpoint.\\n * @param _eid The endpoint ID.\\n * @param _peer The address of the peer to be associated with the corresponding endpoint.\\n *\\n * @dev Indicates that the peer is trusted to send LayerZero messages to this OApp.\\n * @dev Set this to bytes32(0) to remove the peer address.\\n * @dev Peer is a bytes32 to accommodate non-evm chains.\\n */\\n function _setPeer(uint32 _eid, bytes32 _peer) internal virtual {\\n peers[_eid] = _peer;\\n emit PeerSet(_eid, _peer);\\n }\\n\\n /**\\n * @notice Internal function to get the peer address associated with a specific endpoint; reverts if NOT set.\\n * ie. the peer is set to bytes32(0).\\n * @param _eid The endpoint ID.\\n * @return peer The address of the peer associated with the specified endpoint.\\n */\\n function _getPeerOrRevert(uint32 _eid) internal view virtual returns (bytes32) {\\n bytes32 peer = peers[_eid];\\n if (peer == bytes32(0)) revert NoPeer(_eid);\\n return peer;\\n }\\n\\n /**\\n * @notice Sets the delegate address for the OApp.\\n * @param _delegate The address of the delegate to be set.\\n *\\n * @dev Only the owner/admin of the OApp can call this function.\\n * @dev Provides the ability for a delegate to set configs, on behalf of the OApp, directly on the Endpoint contract.\\n */\\n function setDelegate(address _delegate) public onlyOwner {\\n endpoint.setDelegate(_delegate);\\n }\\n}\\n\",\"keccak256\":\"0x13a9c2d1d2c1f086b8624f2e84c4a4702212daae36f701d92bb915b535cbe4cc\",\"license\":\"MIT\"},\"@layerzerolabs/oapp-evm/contracts/oapp/OAppReceiver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\nimport { IOAppReceiver, Origin } from \\\"./interfaces/IOAppReceiver.sol\\\";\\nimport { OAppCore } from \\\"./OAppCore.sol\\\";\\n\\n/**\\n * @title OAppReceiver\\n * @dev Abstract contract implementing the ILayerZeroReceiver interface and extending OAppCore for OApp receivers.\\n */\\nabstract contract OAppReceiver is IOAppReceiver, OAppCore {\\n // Custom error message for when the caller is not the registered endpoint/\\n error OnlyEndpoint(address addr);\\n\\n // @dev The version of the OAppReceiver implementation.\\n // @dev Version is bumped when changes are made to this contract.\\n uint64 internal constant RECEIVER_VERSION = 2;\\n\\n /**\\n * @notice Retrieves the OApp version information.\\n * @return senderVersion The version of the OAppSender.sol contract.\\n * @return receiverVersion The version of the OAppReceiver.sol contract.\\n *\\n * @dev Providing 0 as the default for OAppSender version. Indicates that the OAppSender is not implemented.\\n * ie. this is a RECEIVE only OApp.\\n * @dev If the OApp uses both OAppSender and OAppReceiver, then this needs to be override returning the correct versions.\\n */\\n function oAppVersion() public view virtual returns (uint64 senderVersion, uint64 receiverVersion) {\\n return (0, RECEIVER_VERSION);\\n }\\n\\n /**\\n * @notice Indicates whether an address is an approved composeMsg sender to the Endpoint.\\n * @dev _origin The origin information containing the source endpoint and sender address.\\n * - srcEid: The source chain endpoint ID.\\n * - sender: The sender address on the src chain.\\n * - nonce: The nonce of the message.\\n * @dev _message The lzReceive payload.\\n * @param _sender The sender address.\\n * @return isSender Is a valid sender.\\n *\\n * @dev Applications can optionally choose to implement separate composeMsg senders that are NOT the bridging layer.\\n * @dev The default sender IS the OAppReceiver implementer.\\n */\\n function isComposeMsgSender(\\n Origin calldata /*_origin*/,\\n bytes calldata /*_message*/,\\n address _sender\\n ) public view virtual returns (bool) {\\n return _sender == address(this);\\n }\\n\\n /**\\n * @notice Checks if the path initialization is allowed based on the provided origin.\\n * @param origin The origin information containing the source endpoint and sender address.\\n * @return Whether the path has been initialized.\\n *\\n * @dev This indicates to the endpoint that the OApp has enabled msgs for this particular path to be received.\\n * @dev This defaults to assuming if a peer has been set, its initialized.\\n * Can be overridden by the OApp if there is other logic to determine this.\\n */\\n function allowInitializePath(Origin calldata origin) public view virtual returns (bool) {\\n return peers[origin.srcEid] == origin.sender;\\n }\\n\\n /**\\n * @notice Retrieves the next nonce for a given source endpoint and sender address.\\n * @dev _srcEid The source endpoint ID.\\n * @dev _sender The sender address.\\n * @return nonce The next nonce.\\n *\\n * @dev The path nonce starts from 1. If 0 is returned it means that there is NO nonce ordered enforcement.\\n * @dev Is required by the off-chain executor to determine the OApp expects msg execution is ordered.\\n * @dev This is also enforced by the OApp.\\n * @dev By default this is NOT enabled. ie. nextNonce is hardcoded to return 0.\\n */\\n function nextNonce(uint32 /*_srcEid*/, bytes32 /*_sender*/) public view virtual returns (uint64 nonce) {\\n return 0;\\n }\\n\\n /**\\n * @dev Entry point for receiving messages or packets from the endpoint.\\n * @param _origin The origin information containing the source endpoint and sender address.\\n * - srcEid: The source chain endpoint ID.\\n * - sender: The sender address on the src chain.\\n * - nonce: The nonce of the message.\\n * @param _guid The unique identifier for the received LayerZero message.\\n * @param _message The payload of the received message.\\n * @param _executor The address of the executor for the received message.\\n * @param _extraData Additional arbitrary data provided by the corresponding executor.\\n *\\n * @dev Entry point for receiving msg/packet from the LayerZero endpoint.\\n */\\n function lzReceive(\\n Origin calldata _origin,\\n bytes32 _guid,\\n bytes calldata _message,\\n address _executor,\\n bytes calldata _extraData\\n ) public payable virtual {\\n // Ensures that only the endpoint can attempt to lzReceive() messages to this OApp.\\n if (address(endpoint) != msg.sender) revert OnlyEndpoint(msg.sender);\\n\\n // Ensure that the sender matches the expected peer for the source endpoint.\\n if (_getPeerOrRevert(_origin.srcEid) != _origin.sender) revert OnlyPeer(_origin.srcEid, _origin.sender);\\n\\n // Call the internal OApp implementation of lzReceive.\\n _lzReceive(_origin, _guid, _message, _executor, _extraData);\\n }\\n\\n /**\\n * @dev Internal function to implement lzReceive logic without needing to copy the basic parameter validation.\\n */\\n function _lzReceive(\\n Origin calldata _origin,\\n bytes32 _guid,\\n bytes calldata _message,\\n address _executor,\\n bytes calldata _extraData\\n ) internal virtual;\\n}\\n\",\"keccak256\":\"0x0174e9f1ec4cefe4b5adc26c392269c699b9ff75965364e5b7264426a462c70b\",\"license\":\"MIT\"},\"@layerzerolabs/oapp-evm/contracts/oapp/OAppSender.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\nimport { SafeERC20, IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\nimport { MessagingParams, MessagingFee, MessagingReceipt } from \\\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\\\";\\nimport { OAppCore } from \\\"./OAppCore.sol\\\";\\n\\n/**\\n * @title OAppSender\\n * @dev Abstract contract implementing the OAppSender functionality for sending messages to a LayerZero endpoint.\\n */\\nabstract contract OAppSender is OAppCore {\\n using SafeERC20 for IERC20;\\n\\n // Custom error messages\\n error NotEnoughNative(uint256 msgValue);\\n error LzTokenUnavailable();\\n\\n // @dev The version of the OAppSender implementation.\\n // @dev Version is bumped when changes are made to this contract.\\n uint64 internal constant SENDER_VERSION = 1;\\n\\n /**\\n * @notice Retrieves the OApp version information.\\n * @return senderVersion The version of the OAppSender.sol contract.\\n * @return receiverVersion The version of the OAppReceiver.sol contract.\\n *\\n * @dev Providing 0 as the default for OAppReceiver version. Indicates that the OAppReceiver is not implemented.\\n * ie. this is a SEND only OApp.\\n * @dev If the OApp uses both OAppSender and OAppReceiver, then this needs to be override returning the correct versions\\n */\\n function oAppVersion() public view virtual returns (uint64 senderVersion, uint64 receiverVersion) {\\n return (SENDER_VERSION, 0);\\n }\\n\\n /**\\n * @dev Internal function to interact with the LayerZero EndpointV2.quote() for fee calculation.\\n * @param _dstEid The destination endpoint ID.\\n * @param _message The message payload.\\n * @param _options Additional options for the message.\\n * @param _payInLzToken Flag indicating whether to pay the fee in LZ tokens.\\n * @return fee The calculated MessagingFee for the message.\\n * - nativeFee: The native fee for the message.\\n * - lzTokenFee: The LZ token fee for the message.\\n */\\n function _quote(\\n uint32 _dstEid,\\n bytes memory _message,\\n bytes memory _options,\\n bool _payInLzToken\\n ) internal view virtual returns (MessagingFee memory fee) {\\n return\\n endpoint.quote(\\n MessagingParams(_dstEid, _getPeerOrRevert(_dstEid), _message, _options, _payInLzToken),\\n address(this)\\n );\\n }\\n\\n /**\\n * @dev Internal function to interact with the LayerZero EndpointV2.send() for sending a message.\\n * @param _dstEid The destination endpoint ID.\\n * @param _message The message payload.\\n * @param _options Additional options for the message.\\n * @param _fee The calculated LayerZero fee for the message.\\n * - nativeFee: The native fee.\\n * - lzTokenFee: The lzToken fee.\\n * @param _refundAddress The address to receive any excess fee values sent to the endpoint.\\n * @return receipt The receipt for the sent message.\\n * - guid: The unique identifier for the sent message.\\n * - nonce: The nonce of the sent message.\\n * - fee: The LayerZero fee incurred for the message.\\n */\\n function _lzSend(\\n uint32 _dstEid,\\n bytes memory _message,\\n bytes memory _options,\\n MessagingFee memory _fee,\\n address _refundAddress\\n ) internal virtual returns (MessagingReceipt memory receipt) {\\n // @dev Push corresponding fees to the endpoint, any excess is sent back to the _refundAddress from the endpoint.\\n uint256 messageValue = _payNative(_fee.nativeFee);\\n if (_fee.lzTokenFee > 0) _payLzToken(_fee.lzTokenFee);\\n\\n return\\n // solhint-disable-next-line check-send-result\\n endpoint.send{ value: messageValue }(\\n MessagingParams(_dstEid, _getPeerOrRevert(_dstEid), _message, _options, _fee.lzTokenFee > 0),\\n _refundAddress\\n );\\n }\\n\\n /**\\n * @dev Internal function to pay the native fee associated with the message.\\n * @param _nativeFee The native fee to be paid.\\n * @return nativeFee The amount of native currency paid.\\n *\\n * @dev If the OApp needs to initiate MULTIPLE LayerZero messages in a single transaction,\\n * this will need to be overridden because msg.value would contain multiple lzFees.\\n * @dev Should be overridden in the event the LayerZero endpoint requires a different native currency.\\n * @dev Some EVMs use an ERC20 as a method for paying transactions/gasFees.\\n * @dev The endpoint is EITHER/OR, ie. it will NOT support both types of native payment at a time.\\n */\\n function _payNative(uint256 _nativeFee) internal virtual returns (uint256 nativeFee) {\\n if (msg.value != _nativeFee) revert NotEnoughNative(msg.value);\\n return _nativeFee;\\n }\\n\\n /**\\n * @dev Internal function to pay the LZ token fee associated with the message.\\n * @param _lzTokenFee The LZ token fee to be paid.\\n *\\n * @dev If the caller is trying to pay in the specified lzToken, then the lzTokenFee is passed to the endpoint.\\n * @dev Any excess sent, is passed back to the specified _refundAddress in the _lzSend().\\n */\\n function _payLzToken(uint256 _lzTokenFee) internal virtual {\\n // @dev Cannot cache the token because it is not immutable in the endpoint.\\n address lzToken = endpoint.lzToken();\\n if (lzToken == address(0)) revert LzTokenUnavailable();\\n\\n // Pay LZ token fee by sending tokens to the endpoint.\\n IERC20(lzToken).safeTransferFrom(msg.sender, address(endpoint), _lzTokenFee);\\n }\\n}\\n\",\"keccak256\":\"0x518cf4adca601923ed4baa6619846a253ea32b8d8775f8bc1faa3dfac7f67c20\",\"license\":\"MIT\"},\"@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppCore.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\nimport { ILayerZeroEndpointV2 } from \\\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\\\";\\n\\n/**\\n * @title IOAppCore\\n */\\ninterface IOAppCore {\\n // Custom error messages\\n error OnlyPeer(uint32 eid, bytes32 sender);\\n error NoPeer(uint32 eid);\\n error InvalidEndpointCall();\\n error InvalidDelegate();\\n\\n // Event emitted when a peer (OApp) is set for a corresponding endpoint\\n event PeerSet(uint32 eid, bytes32 peer);\\n\\n /**\\n * @notice Retrieves the OApp version information.\\n * @return senderVersion The version of the OAppSender.sol contract.\\n * @return receiverVersion The version of the OAppReceiver.sol contract.\\n */\\n function oAppVersion() external view returns (uint64 senderVersion, uint64 receiverVersion);\\n\\n /**\\n * @notice Retrieves the LayerZero endpoint associated with the OApp.\\n * @return iEndpoint The LayerZero endpoint as an interface.\\n */\\n function endpoint() external view returns (ILayerZeroEndpointV2 iEndpoint);\\n\\n /**\\n * @notice Retrieves the peer (OApp) associated with a corresponding endpoint.\\n * @param _eid The endpoint ID.\\n * @return peer The peer address (OApp instance) associated with the corresponding endpoint.\\n */\\n function peers(uint32 _eid) external view returns (bytes32 peer);\\n\\n /**\\n * @notice Sets the peer address (OApp instance) for a corresponding endpoint.\\n * @param _eid The endpoint ID.\\n * @param _peer The address of the peer to be associated with the corresponding endpoint.\\n */\\n function setPeer(uint32 _eid, bytes32 _peer) external;\\n\\n /**\\n * @notice Sets the delegate address for the OApp Core.\\n * @param _delegate The address of the delegate to be set.\\n */\\n function setDelegate(address _delegate) external;\\n}\\n\",\"keccak256\":\"0x40e49f2de74506e1da5dcaed53a39853f691647f4ceb0fccc8f49a68d3f47c58\",\"license\":\"MIT\"},\"@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppMsgInspector.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @title IOAppMsgInspector\\n * @dev Interface for the OApp Message Inspector, allowing examination of message and options contents.\\n */\\ninterface IOAppMsgInspector {\\n // Custom error message for inspection failure\\n error InspectionFailed(bytes message, bytes options);\\n\\n /**\\n * @notice Allows the inspector to examine LayerZero message contents and optionally throw a revert if invalid.\\n * @param _message The message payload to be inspected.\\n * @param _options Additional options or parameters for inspection.\\n * @return valid A boolean indicating whether the inspection passed (true) or failed (false).\\n *\\n * @dev Optionally done as a revert, OR use the boolean provided to handle the failure.\\n */\\n function inspect(bytes calldata _message, bytes calldata _options) external view returns (bool valid);\\n}\\n\",\"keccak256\":\"0x339654e699043c400cad92de209aa23855ce10211c31cf4114042cc5224d3b7c\",\"license\":\"MIT\"},\"@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppOptionsType3.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Struct representing enforced option parameters.\\n */\\nstruct EnforcedOptionParam {\\n uint32 eid; // Endpoint ID\\n uint16 msgType; // Message Type\\n bytes options; // Additional options\\n}\\n\\n/**\\n * @title IOAppOptionsType3\\n * @dev Interface for the OApp with Type 3 Options, allowing the setting and combining of enforced options.\\n */\\ninterface IOAppOptionsType3 {\\n // Custom error message for invalid options\\n error InvalidOptions(bytes options);\\n\\n // Event emitted when enforced options are set\\n event EnforcedOptionSet(EnforcedOptionParam[] _enforcedOptions);\\n\\n /**\\n * @notice Sets enforced options for specific endpoint and message type combinations.\\n * @param _enforcedOptions An array of EnforcedOptionParam structures specifying enforced options.\\n */\\n function setEnforcedOptions(EnforcedOptionParam[] calldata _enforcedOptions) external;\\n\\n /**\\n * @notice Combines options for a given endpoint and message type.\\n * @param _eid The endpoint ID.\\n * @param _msgType The OApp message type.\\n * @param _extraOptions Additional options passed by the caller.\\n * @return options The combination of caller specified options AND enforced options.\\n */\\n function combineOptions(\\n uint32 _eid,\\n uint16 _msgType,\\n bytes calldata _extraOptions\\n ) external view returns (bytes memory options);\\n}\\n\",\"keccak256\":\"0x9fc08a51e9d7c9c710c4eb26f84fe77228305ad7da63fa486ff24ebf2f3bc461\",\"license\":\"MIT\"},\"@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppReceiver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.20;\\n\\nimport { ILayerZeroReceiver, Origin } from \\\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol\\\";\\n\\ninterface IOAppReceiver is ILayerZeroReceiver {\\n /**\\n * @notice Indicates whether an address is an approved composeMsg sender to the Endpoint.\\n * @param _origin The origin information containing the source endpoint and sender address.\\n * - srcEid: The source chain endpoint ID.\\n * - sender: The sender address on the src chain.\\n * - nonce: The nonce of the message.\\n * @param _message The lzReceive payload.\\n * @param _sender The sender address.\\n * @return isSender Is a valid sender.\\n *\\n * @dev Applications can optionally choose to implement a separate composeMsg sender that is NOT the bridging layer.\\n * @dev The default sender IS the OAppReceiver implementer.\\n */\\n function isComposeMsgSender(\\n Origin calldata _origin,\\n bytes calldata _message,\\n address _sender\\n ) external view returns (bool isSender);\\n}\\n\",\"keccak256\":\"0xd26135185e19b3732746d4a9e2923e896f28dec8664bab161faea2ee26fcdc3d\",\"license\":\"MIT\"},\"@layerzerolabs/oapp-evm/contracts/oapp/libs/OAppOptionsType3.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\nimport { IOAppOptionsType3, EnforcedOptionParam } from \\\"../interfaces/IOAppOptionsType3.sol\\\";\\n\\n/**\\n * @title OAppOptionsType3\\n * @dev Abstract contract implementing the IOAppOptionsType3 interface with type 3 options.\\n */\\nabstract contract OAppOptionsType3 is IOAppOptionsType3, Ownable {\\n uint16 internal constant OPTION_TYPE_3 = 3;\\n\\n // @dev The \\\"msgType\\\" should be defined in the child contract.\\n mapping(uint32 eid => mapping(uint16 msgType => bytes enforcedOption)) public enforcedOptions;\\n\\n /**\\n * @dev Sets the enforced options for specific endpoint and message type combinations.\\n * @param _enforcedOptions An array of EnforcedOptionParam structures specifying enforced options.\\n *\\n * @dev Only the owner/admin of the OApp can call this function.\\n * @dev Provides a way for the OApp to enforce things like paying for PreCrime, AND/OR minimum dst lzReceive gas amounts etc.\\n * @dev These enforced options can vary as the potential options/execution on the remote may differ as per the msgType.\\n * eg. Amount of lzReceive() gas necessary to deliver a lzCompose() message adds overhead you dont want to pay\\n * if you are only making a standard LayerZero message ie. lzReceive() WITHOUT sendCompose().\\n */\\n function setEnforcedOptions(EnforcedOptionParam[] calldata _enforcedOptions) public virtual onlyOwner {\\n _setEnforcedOptions(_enforcedOptions);\\n }\\n\\n /**\\n * @dev Sets the enforced options for specific endpoint and message type combinations.\\n * @param _enforcedOptions An array of EnforcedOptionParam structures specifying enforced options.\\n *\\n * @dev Provides a way for the OApp to enforce things like paying for PreCrime, AND/OR minimum dst lzReceive gas amounts etc.\\n * @dev These enforced options can vary as the potential options/execution on the remote may differ as per the msgType.\\n * eg. Amount of lzReceive() gas necessary to deliver a lzCompose() message adds overhead you dont want to pay\\n * if you are only making a standard LayerZero message ie. lzReceive() WITHOUT sendCompose().\\n */\\n function _setEnforcedOptions(EnforcedOptionParam[] memory _enforcedOptions) internal virtual {\\n for (uint256 i = 0; i < _enforcedOptions.length; i++) {\\n // @dev Enforced options are only available for optionType 3, as type 1 and 2 dont support combining.\\n _assertOptionsType3(_enforcedOptions[i].options);\\n enforcedOptions[_enforcedOptions[i].eid][_enforcedOptions[i].msgType] = _enforcedOptions[i].options;\\n }\\n\\n emit EnforcedOptionSet(_enforcedOptions);\\n }\\n\\n /**\\n * @notice Combines options for a given endpoint and message type.\\n * @param _eid The endpoint ID.\\n * @param _msgType The OAPP message type.\\n * @param _extraOptions Additional options passed by the caller.\\n * @return options The combination of caller specified options AND enforced options.\\n *\\n * @dev If there is an enforced lzReceive option:\\n * - {gasLimit: 200k, msg.value: 1 ether} AND a caller supplies a lzReceive option: {gasLimit: 100k, msg.value: 0.5 ether}\\n * - The resulting options will be {gasLimit: 300k, msg.value: 1.5 ether} when the message is executed on the remote lzReceive() function.\\n * @dev This presence of duplicated options is handled off-chain in the verifier/executor.\\n */\\n function combineOptions(\\n uint32 _eid,\\n uint16 _msgType,\\n bytes calldata _extraOptions\\n ) public view virtual returns (bytes memory) {\\n bytes memory enforced = enforcedOptions[_eid][_msgType];\\n\\n // No enforced options, pass whatever the caller supplied, even if it's empty or legacy type 1/2 options.\\n if (enforced.length == 0) return _extraOptions;\\n\\n // No caller options, return enforced\\n if (_extraOptions.length == 0) return enforced;\\n\\n // @dev If caller provided _extraOptions, must be type 3 as its the ONLY type that can be combined.\\n if (_extraOptions.length >= 2) {\\n _assertOptionsType3(_extraOptions);\\n // @dev Remove the first 2 bytes containing the type from the _extraOptions and combine with enforced.\\n return bytes.concat(enforced, _extraOptions[2:]);\\n }\\n\\n // No valid set of options was found.\\n revert InvalidOptions(_extraOptions);\\n }\\n\\n /**\\n * @dev Internal function to assert that options are of type 3.\\n * @param _options The options to be checked.\\n */\\n function _assertOptionsType3(bytes memory _options) internal pure virtual {\\n uint16 optionsType;\\n assembly {\\n optionsType := mload(add(_options, 2))\\n }\\n if (optionsType != OPTION_TYPE_3) revert InvalidOptions(_options);\\n }\\n}\\n\",\"keccak256\":\"0x5275636cd47e660a2fdf6c7fe9d41ff3cc866b785cc8a9d88c1b8ca983509f01\",\"license\":\"MIT\"},\"@layerzerolabs/oapp-evm/contracts/precrime/OAppPreCrimeSimulator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\nimport { IPreCrime } from \\\"./interfaces/IPreCrime.sol\\\";\\nimport { IOAppPreCrimeSimulator, InboundPacket, Origin } from \\\"./interfaces/IOAppPreCrimeSimulator.sol\\\";\\n\\n/**\\n * @title OAppPreCrimeSimulator\\n * @dev Abstract contract serving as the base for preCrime simulation functionality in an OApp.\\n */\\nabstract contract OAppPreCrimeSimulator is IOAppPreCrimeSimulator, Ownable {\\n // The address of the preCrime implementation.\\n address public preCrime;\\n\\n /**\\n * @dev Retrieves the address of the OApp contract.\\n * @return The address of the OApp contract.\\n *\\n * @dev The simulator contract is the base contract for the OApp by default.\\n * @dev If the simulator is a separate contract, override this function.\\n */\\n function oApp() external view virtual returns (address) {\\n return address(this);\\n }\\n\\n /**\\n * @dev Sets the preCrime contract address.\\n * @param _preCrime The address of the preCrime contract.\\n */\\n function setPreCrime(address _preCrime) public virtual onlyOwner {\\n preCrime = _preCrime;\\n emit PreCrimeSet(_preCrime);\\n }\\n\\n /**\\n * @dev Interface for pre-crime simulations. Always reverts at the end with the simulation results.\\n * @param _packets An array of InboundPacket objects representing received packets to be delivered.\\n *\\n * @dev WARNING: MUST revert at the end with the simulation results.\\n * @dev Gives the preCrime implementation the ability to mock sending packets to the lzReceive function,\\n * WITHOUT actually executing them.\\n */\\n function lzReceiveAndRevert(InboundPacket[] calldata _packets) public payable virtual {\\n for (uint256 i = 0; i < _packets.length; i++) {\\n InboundPacket calldata packet = _packets[i];\\n\\n // Ignore packets that are not from trusted peers.\\n if (!isPeer(packet.origin.srcEid, packet.origin.sender)) continue;\\n\\n // @dev Because a verifier is calling this function, it doesnt have access to executor params:\\n // - address _executor\\n // - bytes calldata _extraData\\n // preCrime will NOT work for OApps that rely on these two parameters inside of their _lzReceive().\\n // They are instead stubbed to default values, address(0) and bytes(\\\"\\\")\\n // @dev Calling this.lzReceiveSimulate removes ability for assembly return 0 callstack exit,\\n // which would cause the revert to be ignored.\\n this.lzReceiveSimulate{ value: packet.value }(\\n packet.origin,\\n packet.guid,\\n packet.message,\\n packet.executor,\\n packet.extraData\\n );\\n }\\n\\n // @dev Revert with the simulation results. msg.sender must implement IPreCrime.buildSimulationResult().\\n revert SimulationResult(IPreCrime(msg.sender).buildSimulationResult());\\n }\\n\\n /**\\n * @dev Is effectively an internal function because msg.sender must be address(this).\\n * Allows resetting the call stack for 'internal' calls.\\n * @param _origin The origin information containing the source endpoint and sender address.\\n * - srcEid: The source chain endpoint ID.\\n * - sender: The sender address on the src chain.\\n * - nonce: The nonce of the message.\\n * @param _guid The unique identifier of the packet.\\n * @param _message The message payload of the packet.\\n * @param _executor The executor address for the packet.\\n * @param _extraData Additional data for the packet.\\n */\\n function lzReceiveSimulate(\\n Origin calldata _origin,\\n bytes32 _guid,\\n bytes calldata _message,\\n address _executor,\\n bytes calldata _extraData\\n ) external payable virtual {\\n // @dev Ensure ONLY can be called 'internally'.\\n if (msg.sender != address(this)) revert OnlySelf();\\n _lzReceiveSimulate(_origin, _guid, _message, _executor, _extraData);\\n }\\n\\n /**\\n * @dev Internal function to handle the OAppPreCrimeSimulator simulated receive.\\n * @param _origin The origin information.\\n * - srcEid: The source chain endpoint ID.\\n * - sender: The sender address from the src chain.\\n * - nonce: The nonce of the LayerZero message.\\n * @param _guid The GUID of the LayerZero message.\\n * @param _message The LayerZero message.\\n * @param _executor The address of the off-chain executor.\\n * @param _extraData Arbitrary data passed by the msg executor.\\n *\\n * @dev Enables the preCrime simulator to mock sending lzReceive() messages,\\n * routes the msg down from the OAppPreCrimeSimulator, and back up to the OAppReceiver.\\n */\\n function _lzReceiveSimulate(\\n Origin calldata _origin,\\n bytes32 _guid,\\n bytes calldata _message,\\n address _executor,\\n bytes calldata _extraData\\n ) internal virtual;\\n\\n /**\\n * @dev checks if the specified peer is considered 'trusted' by the OApp.\\n * @param _eid The endpoint Id to check.\\n * @param _peer The peer to check.\\n * @return Whether the peer passed is considered 'trusted' by the OApp.\\n */\\n function isPeer(uint32 _eid, bytes32 _peer) public view virtual returns (bool);\\n}\\n\",\"keccak256\":\"0x205a0abfd8b3c9af2740769f251381b84999b8e9347f3cd50de3ef8290a17750\",\"license\":\"MIT\"},\"@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IOAppPreCrimeSimulator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\n// @dev Import the Origin so it's exposed to OAppPreCrimeSimulator implementers.\\n// solhint-disable-next-line no-unused-import\\nimport { InboundPacket, Origin } from \\\"../libs/Packet.sol\\\";\\n\\n/**\\n * @title IOAppPreCrimeSimulator Interface\\n * @dev Interface for the preCrime simulation functionality in an OApp.\\n */\\ninterface IOAppPreCrimeSimulator {\\n // @dev simulation result used in PreCrime implementation\\n error SimulationResult(bytes result);\\n error OnlySelf();\\n\\n /**\\n * @dev Emitted when the preCrime contract address is set.\\n * @param preCrimeAddress The address of the preCrime contract.\\n */\\n event PreCrimeSet(address preCrimeAddress);\\n\\n /**\\n * @dev Retrieves the address of the preCrime contract implementation.\\n * @return The address of the preCrime contract.\\n */\\n function preCrime() external view returns (address);\\n\\n /**\\n * @dev Retrieves the address of the OApp contract.\\n * @return The address of the OApp contract.\\n */\\n function oApp() external view returns (address);\\n\\n /**\\n * @dev Sets the preCrime contract address.\\n * @param _preCrime The address of the preCrime contract.\\n */\\n function setPreCrime(address _preCrime) external;\\n\\n /**\\n * @dev Mocks receiving a packet, then reverts with a series of data to infer the state/result.\\n * @param _packets An array of LayerZero InboundPacket objects representing received packets.\\n */\\n function lzReceiveAndRevert(InboundPacket[] calldata _packets) external payable;\\n\\n /**\\n * @dev checks if the specified peer is considered 'trusted' by the OApp.\\n * @param _eid The endpoint Id to check.\\n * @param _peer The peer to check.\\n * @return Whether the peer passed is considered 'trusted' by the OApp.\\n */\\n function isPeer(uint32 _eid, bytes32 _peer) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x5d24db150949ea8e6437178e65a942e8c8b7f332e5daf32750f56b23b35b5bb2\",\"license\":\"MIT\"},\"@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IPreCrime.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\nstruct PreCrimePeer {\\n uint32 eid;\\n bytes32 preCrime;\\n bytes32 oApp;\\n}\\n\\n// TODO not done yet\\ninterface IPreCrime {\\n error OnlyOffChain();\\n\\n // for simulate()\\n error PacketOversize(uint256 max, uint256 actual);\\n error PacketUnsorted();\\n error SimulationFailed(bytes reason);\\n\\n // for preCrime()\\n error SimulationResultNotFound(uint32 eid);\\n error InvalidSimulationResult(uint32 eid, bytes reason);\\n error CrimeFound(bytes crime);\\n\\n function getConfig(bytes[] calldata _packets, uint256[] calldata _packetMsgValues) external returns (bytes memory);\\n\\n function simulate(\\n bytes[] calldata _packets,\\n uint256[] calldata _packetMsgValues\\n ) external payable returns (bytes memory);\\n\\n function buildSimulationResult() external view returns (bytes memory);\\n\\n function preCrime(\\n bytes[] calldata _packets,\\n uint256[] calldata _packetMsgValues,\\n bytes[] calldata _simulations\\n ) external;\\n\\n function version() external view returns (uint64 major, uint8 minor);\\n}\\n\",\"keccak256\":\"0xc8d869f27ef8ceb2e13fdf6a70682fd4dee3f90c4924eb8e125bc1e66cb6af84\",\"license\":\"MIT\"},\"@layerzerolabs/oapp-evm/contracts/precrime/libs/Packet.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\nimport { Origin } from \\\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\\\";\\nimport { PacketV1Codec } from \\\"@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol\\\";\\n\\n/**\\n * @title InboundPacket\\n * @dev Structure representing an inbound packet received by the contract.\\n */\\nstruct InboundPacket {\\n Origin origin; // Origin information of the packet.\\n uint32 dstEid; // Destination endpointId of the packet.\\n address receiver; // Receiver address for the packet.\\n bytes32 guid; // Unique identifier of the packet.\\n uint256 value; // msg.value of the packet.\\n address executor; // Executor address for the packet.\\n bytes message; // Message payload of the packet.\\n bytes extraData; // Additional arbitrary data for the packet.\\n}\\n\\n/**\\n * @title PacketDecoder\\n * @dev Library for decoding LayerZero packets.\\n */\\nlibrary PacketDecoder {\\n using PacketV1Codec for bytes;\\n\\n /**\\n * @dev Decode an inbound packet from the given packet data.\\n * @param _packet The packet data to decode.\\n * @return packet An InboundPacket struct representing the decoded packet.\\n */\\n function decode(bytes calldata _packet) internal pure returns (InboundPacket memory packet) {\\n packet.origin = Origin(_packet.srcEid(), _packet.sender(), _packet.nonce());\\n packet.dstEid = _packet.dstEid();\\n packet.receiver = _packet.receiverB20();\\n packet.guid = _packet.guid();\\n packet.message = _packet.message();\\n }\\n\\n /**\\n * @dev Decode multiple inbound packets from the given packet data and associated message values.\\n * @param _packets An array of packet data to decode.\\n * @param _packetMsgValues An array of associated message values for each packet.\\n * @return packets An array of InboundPacket structs representing the decoded packets.\\n */\\n function decode(\\n bytes[] calldata _packets,\\n uint256[] memory _packetMsgValues\\n ) internal pure returns (InboundPacket[] memory packets) {\\n packets = new InboundPacket[](_packets.length);\\n for (uint256 i = 0; i < _packets.length; i++) {\\n bytes calldata packet = _packets[i];\\n packets[i] = PacketDecoder.decode(packet);\\n // @dev Allows the verifier to specify the msg.value that gets passed in lzReceive.\\n packets[i].value = _packetMsgValues[i];\\n }\\n }\\n}\\n\",\"keccak256\":\"0xcb2fb1c5b2eb3731de78b479b9c2ab3bba326fe0b0b3a008590f18e881e457a6\",\"license\":\"MIT\"},\"@layerzerolabs/oft-evm/contracts/OFT.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\nimport { ERC20 } from \\\"@openzeppelin/contracts/token/ERC20/ERC20.sol\\\";\\nimport { IOFT, OFTCore } from \\\"./OFTCore.sol\\\";\\n\\n/**\\n * @title OFT Contract\\n * @dev OFT is an ERC-20 token that extends the functionality of the OFTCore contract.\\n */\\nabstract contract OFT is OFTCore, ERC20 {\\n /**\\n * @dev Constructor for the OFT contract.\\n * @param _name The name of the OFT.\\n * @param _symbol The symbol of the OFT.\\n * @param _lzEndpoint The LayerZero endpoint address.\\n * @param _delegate The delegate capable of making OApp configurations inside of the endpoint.\\n */\\n constructor(\\n string memory _name,\\n string memory _symbol,\\n address _lzEndpoint,\\n address _delegate\\n ) ERC20(_name, _symbol) OFTCore(decimals(), _lzEndpoint, _delegate) {}\\n\\n /**\\n * @dev Retrieves the address of the underlying ERC20 implementation.\\n * @return The address of the OFT token.\\n *\\n * @dev In the case of OFT, address(this) and erc20 are the same contract.\\n */\\n function token() public view returns (address) {\\n return address(this);\\n }\\n\\n /**\\n * @notice Indicates whether the OFT contract requires approval of the 'token()' to send.\\n * @return requiresApproval Needs approval of the underlying token implementation.\\n *\\n * @dev In the case of OFT where the contract IS the token, approval is NOT required.\\n */\\n function approvalRequired() external pure virtual returns (bool) {\\n return false;\\n }\\n\\n /**\\n * @dev Burns tokens from the sender's specified balance.\\n * @param _from The address to debit the tokens from.\\n * @param _amountLD The amount of tokens to send in local decimals.\\n * @param _minAmountLD The minimum amount to send in local decimals.\\n * @param _dstEid The destination chain ID.\\n * @return amountSentLD The amount sent in local decimals.\\n * @return amountReceivedLD The amount received in local decimals on the remote.\\n */\\n function _debit(\\n address _from,\\n uint256 _amountLD,\\n uint256 _minAmountLD,\\n uint32 _dstEid\\n ) internal virtual override returns (uint256 amountSentLD, uint256 amountReceivedLD) {\\n (amountSentLD, amountReceivedLD) = _debitView(_amountLD, _minAmountLD, _dstEid);\\n\\n // @dev In NON-default OFT, amountSentLD could be 100, with a 10% fee, the amountReceivedLD amount is 90,\\n // therefore amountSentLD CAN differ from amountReceivedLD.\\n\\n // @dev Default OFT burns on src.\\n _burn(_from, amountSentLD);\\n }\\n\\n /**\\n * @dev Credits tokens to the specified address.\\n * @param _to The address to credit the tokens to.\\n * @param _amountLD The amount of tokens to credit in local decimals.\\n * @dev _srcEid The source chain ID.\\n * @return amountReceivedLD The amount of tokens ACTUALLY received in local decimals.\\n */\\n function _credit(\\n address _to,\\n uint256 _amountLD,\\n uint32 /*_srcEid*/\\n ) internal virtual override returns (uint256 amountReceivedLD) {\\n if (_to == address(0x0)) _to = address(0xdead); // _mint(...) does not support address(0x0)\\n // @dev Default OFT mints on dst.\\n _mint(_to, _amountLD);\\n // @dev In the case of NON-default OFT, the _amountLD MIGHT not be == amountReceivedLD.\\n return _amountLD;\\n }\\n}\\n\",\"keccak256\":\"0xdc3582e4a20e02a79050c17058a1f1f42a4335d1a70be06c0a52a3fb05d4c89a\",\"license\":\"MIT\"},\"@layerzerolabs/oft-evm/contracts/OFTCore.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\nimport { OApp, Origin } from \\\"@layerzerolabs/oapp-evm/contracts/oapp/OApp.sol\\\";\\nimport { OAppOptionsType3 } from \\\"@layerzerolabs/oapp-evm/contracts/oapp/libs/OAppOptionsType3.sol\\\";\\nimport { IOAppMsgInspector } from \\\"@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppMsgInspector.sol\\\";\\n\\nimport { OAppPreCrimeSimulator } from \\\"@layerzerolabs/oapp-evm/contracts/precrime/OAppPreCrimeSimulator.sol\\\";\\n\\nimport { IOFT, SendParam, OFTLimit, OFTReceipt, OFTFeeDetail, MessagingReceipt, MessagingFee } from \\\"./interfaces/IOFT.sol\\\";\\nimport { OFTMsgCodec } from \\\"./libs/OFTMsgCodec.sol\\\";\\nimport { OFTComposeMsgCodec } from \\\"./libs/OFTComposeMsgCodec.sol\\\";\\n\\n/**\\n * @title OFTCore\\n * @dev Abstract contract for the OftChain (OFT) token.\\n */\\nabstract contract OFTCore is IOFT, OApp, OAppPreCrimeSimulator, OAppOptionsType3 {\\n using OFTMsgCodec for bytes;\\n using OFTMsgCodec for bytes32;\\n\\n // @notice Provides a conversion rate when swapping between denominations of SD and LD\\n // - shareDecimals == SD == shared Decimals\\n // - localDecimals == LD == local decimals\\n // @dev Considers that tokens have different decimal amounts on various chains.\\n // @dev eg.\\n // For a token\\n // - locally with 4 decimals --> 1.2345 => uint(12345)\\n // - remotely with 2 decimals --> 1.23 => uint(123)\\n // - The conversion rate would be 10 ** (4 - 2) = 100\\n // @dev If you want to send 1.2345 -> (uint 12345), you CANNOT represent that value on the remote,\\n // you can only display 1.23 -> uint(123).\\n // @dev To preserve the dust that would otherwise be lost on that conversion,\\n // we need to unify a denomination that can be represented on ALL chains inside of the OFT mesh\\n uint256 public immutable decimalConversionRate;\\n\\n // @notice Msg types that are used to identify the various OFT operations.\\n // @dev This can be extended in child contracts for non-default oft operations\\n // @dev These values are used in things like combineOptions() in OAppOptionsType3.sol.\\n uint16 public constant SEND = 1;\\n uint16 public constant SEND_AND_CALL = 2;\\n\\n // Address of an optional contract to inspect both 'message' and 'options'\\n address public msgInspector;\\n event MsgInspectorSet(address inspector);\\n\\n /**\\n * @dev Constructor.\\n * @param _localDecimals The decimals of the token on the local chain (this chain).\\n * @param _endpoint The address of the LayerZero endpoint.\\n * @param _delegate The delegate capable of making OApp configurations inside of the endpoint.\\n */\\n constructor(uint8 _localDecimals, address _endpoint, address _delegate) OApp(_endpoint, _delegate) {\\n if (_localDecimals < sharedDecimals()) revert InvalidLocalDecimals();\\n decimalConversionRate = 10 ** (_localDecimals - sharedDecimals());\\n }\\n\\n /**\\n * @notice Retrieves interfaceID and the version of the OFT.\\n * @return interfaceId The interface ID.\\n * @return version The version.\\n *\\n * @dev interfaceId: This specific interface ID is '0x02e49c2c'.\\n * @dev version: Indicates a cross-chain compatible msg encoding with other OFTs.\\n * @dev If a new feature is added to the OFT cross-chain msg encoding, the version will be incremented.\\n * ie. localOFT version(x,1) CAN send messages to remoteOFT version(x,1)\\n */\\n function oftVersion() external pure virtual returns (bytes4 interfaceId, uint64 version) {\\n return (type(IOFT).interfaceId, 1);\\n }\\n\\n /**\\n * @dev Retrieves the shared decimals of the OFT.\\n * @return The shared decimals of the OFT.\\n *\\n * @dev Sets an implicit cap on the amount of tokens, over uint64.max() will need some sort of outbound cap / totalSupply cap\\n * Lowest common decimal denominator between chains.\\n * Defaults to 6 decimal places to provide up to 18,446,744,073,709.551615 units (max uint64).\\n * For tokens exceeding this totalSupply(), they will need to override the sharedDecimals function with something smaller.\\n * ie. 4 sharedDecimals would be 1,844,674,407,370,955.1615\\n */\\n function sharedDecimals() public view virtual returns (uint8) {\\n return 6;\\n }\\n\\n /**\\n * @dev Sets the message inspector address for the OFT.\\n * @param _msgInspector The address of the message inspector.\\n *\\n * @dev This is an optional contract that can be used to inspect both 'message' and 'options'.\\n * @dev Set it to address(0) to disable it, or set it to a contract address to enable it.\\n */\\n function setMsgInspector(address _msgInspector) public virtual onlyOwner {\\n msgInspector = _msgInspector;\\n emit MsgInspectorSet(_msgInspector);\\n }\\n\\n /**\\n * @notice Provides the fee breakdown and settings data for an OFT. Unused in the default implementation.\\n * @param _sendParam The parameters for the send operation.\\n * @return oftLimit The OFT limit information.\\n * @return oftFeeDetails The details of OFT fees.\\n * @return oftReceipt The OFT receipt information.\\n */\\n function quoteOFT(\\n SendParam calldata _sendParam\\n )\\n external\\n view\\n virtual\\n returns (OFTLimit memory oftLimit, OFTFeeDetail[] memory oftFeeDetails, OFTReceipt memory oftReceipt)\\n {\\n uint256 minAmountLD = 0; // Unused in the default implementation.\\n uint256 maxAmountLD = type(uint64).max; // Unused in the default implementation.\\n oftLimit = OFTLimit(minAmountLD, maxAmountLD);\\n\\n // Unused in the default implementation; reserved for future complex fee details.\\n oftFeeDetails = new OFTFeeDetail[](0);\\n\\n // @dev This is the same as the send() operation, but without the actual send.\\n // - amountSentLD is the amount in local decimals that would be sent from the sender.\\n // - amountReceivedLD is the amount in local decimals that will be credited to the recipient on the remote OFT instance.\\n // @dev The amountSentLD MIGHT not equal the amount the user actually receives. HOWEVER, the default does.\\n (uint256 amountSentLD, uint256 amountReceivedLD) = _debitView(\\n _sendParam.amountLD,\\n _sendParam.minAmountLD,\\n _sendParam.dstEid\\n );\\n oftReceipt = OFTReceipt(amountSentLD, amountReceivedLD);\\n }\\n\\n /**\\n * @notice Provides a quote for the send() operation.\\n * @param _sendParam The parameters for the send() operation.\\n * @param _payInLzToken Flag indicating whether the caller is paying in the LZ token.\\n * @return msgFee The calculated LayerZero messaging fee from the send() operation.\\n *\\n * @dev MessagingFee: LayerZero msg fee\\n * - nativeFee: The native fee.\\n * - lzTokenFee: The lzToken fee.\\n */\\n function quoteSend(\\n SendParam calldata _sendParam,\\n bool _payInLzToken\\n ) external view virtual returns (MessagingFee memory msgFee) {\\n // @dev mock the amount to receive, this is the same operation used in the send().\\n // The quote is as similar as possible to the actual send() operation.\\n (, uint256 amountReceivedLD) = _debitView(_sendParam.amountLD, _sendParam.minAmountLD, _sendParam.dstEid);\\n\\n // @dev Builds the options and OFT message to quote in the endpoint.\\n (bytes memory message, bytes memory options) = _buildMsgAndOptions(_sendParam, amountReceivedLD);\\n\\n // @dev Calculates the LayerZero fee for the send() operation.\\n return _quote(_sendParam.dstEid, message, options, _payInLzToken);\\n }\\n\\n /**\\n * @dev Executes the send operation.\\n * @param _sendParam The parameters for the send operation.\\n * @param _fee The calculated fee for the send() operation.\\n * - nativeFee: The native fee.\\n * - lzTokenFee: The lzToken fee.\\n * @param _refundAddress The address to receive any excess funds.\\n * @return msgReceipt The receipt for the send operation.\\n * @return oftReceipt The OFT receipt information.\\n *\\n * @dev MessagingReceipt: LayerZero msg receipt\\n * - guid: The unique identifier for the sent message.\\n * - nonce: The nonce of the sent message.\\n * - fee: The LayerZero fee incurred for the message.\\n */\\n function send(\\n SendParam calldata _sendParam,\\n MessagingFee calldata _fee,\\n address _refundAddress\\n ) external payable virtual returns (MessagingReceipt memory msgReceipt, OFTReceipt memory oftReceipt) {\\n return _send(_sendParam, _fee, _refundAddress);\\n }\\n\\n /**\\n * @dev Internal function to execute the send operation.\\n * @param _sendParam The parameters for the send operation.\\n * @param _fee The calculated fee for the send() operation.\\n * - nativeFee: The native fee.\\n * - lzTokenFee: The lzToken fee.\\n * @param _refundAddress The address to receive any excess funds.\\n * @return msgReceipt The receipt for the send operation.\\n * @return oftReceipt The OFT receipt information.\\n *\\n * @dev MessagingReceipt: LayerZero msg receipt\\n * - guid: The unique identifier for the sent message.\\n * - nonce: The nonce of the sent message.\\n * - fee: The LayerZero fee incurred for the message.\\n */\\n function _send(\\n SendParam calldata _sendParam,\\n MessagingFee calldata _fee,\\n address _refundAddress\\n ) internal virtual returns (MessagingReceipt memory msgReceipt, OFTReceipt memory oftReceipt) {\\n // @dev Applies the token transfers regarding this send() operation.\\n // - amountSentLD is the amount in local decimals that was ACTUALLY sent/debited from the sender.\\n // - amountReceivedLD is the amount in local decimals that will be received/credited to the recipient on the remote OFT instance.\\n (uint256 amountSentLD, uint256 amountReceivedLD) = _debit(\\n msg.sender,\\n _sendParam.amountLD,\\n _sendParam.minAmountLD,\\n _sendParam.dstEid\\n );\\n\\n // @dev Builds the options and OFT message to quote in the endpoint.\\n (bytes memory message, bytes memory options) = _buildMsgAndOptions(_sendParam, amountReceivedLD);\\n\\n // @dev Sends the message to the LayerZero endpoint and returns the LayerZero msg receipt.\\n msgReceipt = _lzSend(_sendParam.dstEid, message, options, _fee, _refundAddress);\\n // @dev Formulate the OFT receipt.\\n oftReceipt = OFTReceipt(amountSentLD, amountReceivedLD);\\n\\n emit OFTSent(msgReceipt.guid, _sendParam.dstEid, msg.sender, amountSentLD, amountReceivedLD);\\n }\\n\\n /**\\n * @dev Internal function to build the message and options.\\n * @param _sendParam The parameters for the send() operation.\\n * @param _amountLD The amount in local decimals.\\n * @return message The encoded message.\\n * @return options The encoded options.\\n */\\n function _buildMsgAndOptions(\\n SendParam calldata _sendParam,\\n uint256 _amountLD\\n ) internal view virtual returns (bytes memory message, bytes memory options) {\\n bool hasCompose;\\n // @dev This generated message has the msg.sender encoded into the payload so the remote knows who the caller is.\\n (message, hasCompose) = OFTMsgCodec.encode(\\n _sendParam.to,\\n _toSD(_amountLD),\\n // @dev Must be include a non empty bytes if you want to compose, EVEN if you dont need it on the remote.\\n // EVEN if you dont require an arbitrary payload to be sent... eg. '0x01'\\n _sendParam.composeMsg\\n );\\n // @dev Change the msg type depending if its composed or not.\\n uint16 msgType = hasCompose ? SEND_AND_CALL : SEND;\\n // @dev Combine the callers _extraOptions with the enforced options via the OAppOptionsType3.\\n options = combineOptions(_sendParam.dstEid, msgType, _sendParam.extraOptions);\\n\\n // @dev Optionally inspect the message and options depending if the OApp owner has set a msg inspector.\\n // @dev If it fails inspection, needs to revert in the implementation. ie. does not rely on return boolean\\n address inspector = msgInspector; // caches the msgInspector to avoid potential double storage read\\n if (inspector != address(0)) IOAppMsgInspector(inspector).inspect(message, options);\\n }\\n\\n /**\\n * @dev Internal function to handle the receive on the LayerZero endpoint.\\n * @param _origin The origin information.\\n * - srcEid: The source chain endpoint ID.\\n * - sender: The sender address from the src chain.\\n * - nonce: The nonce of the LayerZero message.\\n * @param _guid The unique identifier for the received LayerZero message.\\n * @param _message The encoded message.\\n * @dev _executor The address of the executor.\\n * @dev _extraData Additional data.\\n */\\n function _lzReceive(\\n Origin calldata _origin,\\n bytes32 _guid,\\n bytes calldata _message,\\n address /*_executor*/, // @dev unused in the default implementation.\\n bytes calldata /*_extraData*/ // @dev unused in the default implementation.\\n ) internal virtual override {\\n // @dev The src sending chain doesnt know the address length on this chain (potentially non-evm)\\n // Thus everything is bytes32() encoded in flight.\\n address toAddress = _message.sendTo().bytes32ToAddress();\\n // @dev Credit the amountLD to the recipient and return the ACTUAL amount the recipient received in local decimals\\n uint256 amountReceivedLD = _credit(toAddress, _toLD(_message.amountSD()), _origin.srcEid);\\n\\n if (_message.isComposed()) {\\n // @dev Proprietary composeMsg format for the OFT.\\n bytes memory composeMsg = OFTComposeMsgCodec.encode(\\n _origin.nonce,\\n _origin.srcEid,\\n amountReceivedLD,\\n _message.composeMsg()\\n );\\n\\n // @dev Stores the lzCompose payload that will be executed in a separate tx.\\n // Standardizes functionality for executing arbitrary contract invocation on some non-evm chains.\\n // @dev The off-chain executor will listen and process the msg based on the src-chain-callers compose options passed.\\n // @dev The index is used when a OApp needs to compose multiple msgs on lzReceive.\\n // For default OFT implementation there is only 1 compose msg per lzReceive, thus its always 0.\\n endpoint.sendCompose(toAddress, _guid, 0 /* the index of the composed message*/, composeMsg);\\n }\\n\\n emit OFTReceived(_guid, _origin.srcEid, toAddress, amountReceivedLD);\\n }\\n\\n /**\\n * @dev Internal function to handle the OAppPreCrimeSimulator simulated receive.\\n * @param _origin The origin information.\\n * - srcEid: The source chain endpoint ID.\\n * - sender: The sender address from the src chain.\\n * - nonce: The nonce of the LayerZero message.\\n * @param _guid The unique identifier for the received LayerZero message.\\n * @param _message The LayerZero message.\\n * @param _executor The address of the off-chain executor.\\n * @param _extraData Arbitrary data passed by the msg executor.\\n *\\n * @dev Enables the preCrime simulator to mock sending lzReceive() messages,\\n * routes the msg down from the OAppPreCrimeSimulator, and back up to the OAppReceiver.\\n */\\n function _lzReceiveSimulate(\\n Origin calldata _origin,\\n bytes32 _guid,\\n bytes calldata _message,\\n address _executor,\\n bytes calldata _extraData\\n ) internal virtual override {\\n _lzReceive(_origin, _guid, _message, _executor, _extraData);\\n }\\n\\n /**\\n * @dev Check if the peer is considered 'trusted' by the OApp.\\n * @param _eid The endpoint ID to check.\\n * @param _peer The peer to check.\\n * @return Whether the peer passed is considered 'trusted' by the OApp.\\n *\\n * @dev Enables OAppPreCrimeSimulator to check whether a potential Inbound Packet is from a trusted source.\\n */\\n function isPeer(uint32 _eid, bytes32 _peer) public view virtual override returns (bool) {\\n return peers[_eid] == _peer;\\n }\\n\\n /**\\n * @dev Internal function to remove dust from the given local decimal amount.\\n * @param _amountLD The amount in local decimals.\\n * @return amountLD The amount after removing dust.\\n *\\n * @dev Prevents the loss of dust when moving amounts between chains with different decimals.\\n * @dev eg. uint(123) with a conversion rate of 100 becomes uint(100).\\n */\\n function _removeDust(uint256 _amountLD) internal view virtual returns (uint256 amountLD) {\\n return (_amountLD / decimalConversionRate) * decimalConversionRate;\\n }\\n\\n /**\\n * @dev Internal function to convert an amount from shared decimals into local decimals.\\n * @param _amountSD The amount in shared decimals.\\n * @return amountLD The amount in local decimals.\\n */\\n function _toLD(uint64 _amountSD) internal view virtual returns (uint256 amountLD) {\\n return _amountSD * decimalConversionRate;\\n }\\n\\n /**\\n * @dev Internal function to convert an amount from local decimals into shared decimals.\\n * @param _amountLD The amount in local decimals.\\n * @return amountSD The amount in shared decimals.\\n */\\n function _toSD(uint256 _amountLD) internal view virtual returns (uint64 amountSD) {\\n return uint64(_amountLD / decimalConversionRate);\\n }\\n\\n /**\\n * @dev Internal function to mock the amount mutation from a OFT debit() operation.\\n * @param _amountLD The amount to send in local decimals.\\n * @param _minAmountLD The minimum amount to send in local decimals.\\n * @dev _dstEid The destination endpoint ID.\\n * @return amountSentLD The amount sent, in local decimals.\\n * @return amountReceivedLD The amount to be received on the remote chain, in local decimals.\\n *\\n * @dev This is where things like fees would be calculated and deducted from the amount to be received on the remote.\\n */\\n function _debitView(\\n uint256 _amountLD,\\n uint256 _minAmountLD,\\n uint32 /*_dstEid*/\\n ) internal view virtual returns (uint256 amountSentLD, uint256 amountReceivedLD) {\\n // @dev Remove the dust so nothing is lost on the conversion between chains with different decimals for the token.\\n amountSentLD = _removeDust(_amountLD);\\n // @dev The amount to send is the same as amount received in the default implementation.\\n amountReceivedLD = amountSentLD;\\n\\n // @dev Check for slippage.\\n if (amountReceivedLD < _minAmountLD) {\\n revert SlippageExceeded(amountReceivedLD, _minAmountLD);\\n }\\n }\\n\\n /**\\n * @dev Internal function to perform a debit operation.\\n * @param _from The address to debit.\\n * @param _amountLD The amount to send in local decimals.\\n * @param _minAmountLD The minimum amount to send in local decimals.\\n * @param _dstEid The destination endpoint ID.\\n * @return amountSentLD The amount sent in local decimals.\\n * @return amountReceivedLD The amount received in local decimals on the remote.\\n *\\n * @dev Defined here but are intended to be overriden depending on the OFT implementation.\\n * @dev Depending on OFT implementation the _amountLD could differ from the amountReceivedLD.\\n */\\n function _debit(\\n address _from,\\n uint256 _amountLD,\\n uint256 _minAmountLD,\\n uint32 _dstEid\\n ) internal virtual returns (uint256 amountSentLD, uint256 amountReceivedLD);\\n\\n /**\\n * @dev Internal function to perform a credit operation.\\n * @param _to The address to credit.\\n * @param _amountLD The amount to credit in local decimals.\\n * @param _srcEid The source endpoint ID.\\n * @return amountReceivedLD The amount ACTUALLY received in local decimals.\\n *\\n * @dev Defined here but are intended to be overriden depending on the OFT implementation.\\n * @dev Depending on OFT implementation the _amountLD could differ from the amountReceivedLD.\\n */\\n function _credit(\\n address _to,\\n uint256 _amountLD,\\n uint32 _srcEid\\n ) internal virtual returns (uint256 amountReceivedLD);\\n}\\n\",\"keccak256\":\"0x9ce49b83455df600b52538e42028c422a322643f7ffb4f2814c72c3b970ea7be\",\"license\":\"MIT\"},\"@layerzerolabs/oft-evm/contracts/interfaces/IOFT.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\nimport { MessagingReceipt, MessagingFee } from \\\"@layerzerolabs/oapp-evm/contracts/oapp/OAppSender.sol\\\";\\n\\n/**\\n * @dev Struct representing token parameters for the OFT send() operation.\\n */\\nstruct SendParam {\\n uint32 dstEid; // Destination endpoint ID.\\n bytes32 to; // Recipient address.\\n uint256 amountLD; // Amount to send in local decimals.\\n uint256 minAmountLD; // Minimum amount to send in local decimals.\\n bytes extraOptions; // Additional options supplied by the caller to be used in the LayerZero message.\\n bytes composeMsg; // The composed message for the send() operation.\\n bytes oftCmd; // The OFT command to be executed, unused in default OFT implementations.\\n}\\n\\n/**\\n * @dev Struct representing OFT limit information.\\n * @dev These amounts can change dynamically and are up the specific oft implementation.\\n */\\nstruct OFTLimit {\\n uint256 minAmountLD; // Minimum amount in local decimals that can be sent to the recipient.\\n uint256 maxAmountLD; // Maximum amount in local decimals that can be sent to the recipient.\\n}\\n\\n/**\\n * @dev Struct representing OFT receipt information.\\n */\\nstruct OFTReceipt {\\n uint256 amountSentLD; // Amount of tokens ACTUALLY debited from the sender in local decimals.\\n // @dev In non-default implementations, the amountReceivedLD COULD differ from this value.\\n uint256 amountReceivedLD; // Amount of tokens to be received on the remote side.\\n}\\n\\n/**\\n * @dev Struct representing OFT fee details.\\n * @dev Future proof mechanism to provide a standardized way to communicate fees to things like a UI.\\n */\\nstruct OFTFeeDetail {\\n int256 feeAmountLD; // Amount of the fee in local decimals.\\n string description; // Description of the fee.\\n}\\n\\n/**\\n * @title IOFT\\n * @dev Interface for the OftChain (OFT) token.\\n * @dev Does not inherit ERC20 to accommodate usage by OFTAdapter as well.\\n * @dev This specific interface ID is '0x02e49c2c'.\\n */\\ninterface IOFT {\\n // Custom error messages\\n error InvalidLocalDecimals();\\n error SlippageExceeded(uint256 amountLD, uint256 minAmountLD);\\n\\n // Events\\n event OFTSent(\\n bytes32 indexed guid, // GUID of the OFT message.\\n uint32 dstEid, // Destination Endpoint ID.\\n address indexed fromAddress, // Address of the sender on the src chain.\\n uint256 amountSentLD, // Amount of tokens sent in local decimals.\\n uint256 amountReceivedLD // Amount of tokens received in local decimals.\\n );\\n event OFTReceived(\\n bytes32 indexed guid, // GUID of the OFT message.\\n uint32 srcEid, // Source Endpoint ID.\\n address indexed toAddress, // Address of the recipient on the dst chain.\\n uint256 amountReceivedLD // Amount of tokens received in local decimals.\\n );\\n\\n /**\\n * @notice Retrieves interfaceID and the version of the OFT.\\n * @return interfaceId The interface ID.\\n * @return version The version.\\n *\\n * @dev interfaceId: This specific interface ID is '0x02e49c2c'.\\n * @dev version: Indicates a cross-chain compatible msg encoding with other OFTs.\\n * @dev If a new feature is added to the OFT cross-chain msg encoding, the version will be incremented.\\n * ie. localOFT version(x,1) CAN send messages to remoteOFT version(x,1)\\n */\\n function oftVersion() external view returns (bytes4 interfaceId, uint64 version);\\n\\n /**\\n * @notice Retrieves the address of the token associated with the OFT.\\n * @return token The address of the ERC20 token implementation.\\n */\\n function token() external view returns (address);\\n\\n /**\\n * @notice Indicates whether the OFT contract requires approval of the 'token()' to send.\\n * @return requiresApproval Needs approval of the underlying token implementation.\\n *\\n * @dev Allows things like wallet implementers to determine integration requirements,\\n * without understanding the underlying token implementation.\\n */\\n function approvalRequired() external view returns (bool);\\n\\n /**\\n * @notice Retrieves the shared decimals of the OFT.\\n * @return sharedDecimals The shared decimals of the OFT.\\n */\\n function sharedDecimals() external view returns (uint8);\\n\\n /**\\n * @notice Provides the fee breakdown and settings data for an OFT. Unused in the default implementation.\\n * @param _sendParam The parameters for the send operation.\\n * @return limit The OFT limit information.\\n * @return oftFeeDetails The details of OFT fees.\\n * @return receipt The OFT receipt information.\\n */\\n function quoteOFT(\\n SendParam calldata _sendParam\\n ) external view returns (OFTLimit memory, OFTFeeDetail[] memory oftFeeDetails, OFTReceipt memory);\\n\\n /**\\n * @notice Provides a quote for the send() operation.\\n * @param _sendParam The parameters for the send() operation.\\n * @param _payInLzToken Flag indicating whether the caller is paying in the LZ token.\\n * @return fee The calculated LayerZero messaging fee from the send() operation.\\n *\\n * @dev MessagingFee: LayerZero msg fee\\n * - nativeFee: The native fee.\\n * - lzTokenFee: The lzToken fee.\\n */\\n function quoteSend(SendParam calldata _sendParam, bool _payInLzToken) external view returns (MessagingFee memory);\\n\\n /**\\n * @notice Executes the send() operation.\\n * @param _sendParam The parameters for the send operation.\\n * @param _fee The fee information supplied by the caller.\\n * - nativeFee: The native fee.\\n * - lzTokenFee: The lzToken fee.\\n * @param _refundAddress The address to receive any excess funds from fees etc. on the src.\\n * @return receipt The LayerZero messaging receipt from the send() operation.\\n * @return oftReceipt The OFT receipt information.\\n *\\n * @dev MessagingReceipt: LayerZero msg receipt\\n * - guid: The unique identifier for the sent message.\\n * - nonce: The nonce of the sent message.\\n * - fee: The LayerZero fee incurred for the message.\\n */\\n function send(\\n SendParam calldata _sendParam,\\n MessagingFee calldata _fee,\\n address _refundAddress\\n ) external payable returns (MessagingReceipt memory, OFTReceipt memory);\\n}\\n\",\"keccak256\":\"0x7ba6bb62fba7ee83451cfb0e727ddeef0e96b4388bd4e9ff0fc6ce103e1101c8\",\"license\":\"MIT\"},\"@layerzerolabs/oft-evm/contracts/libs/OFTComposeMsgCodec.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\nlibrary OFTComposeMsgCodec {\\n // Offset constants for decoding composed messages\\n uint8 private constant NONCE_OFFSET = 8;\\n uint8 private constant SRC_EID_OFFSET = 12;\\n uint8 private constant AMOUNT_LD_OFFSET = 44;\\n uint8 private constant COMPOSE_FROM_OFFSET = 76;\\n\\n /**\\n * @dev Encodes a OFT composed message.\\n * @param _nonce The nonce value.\\n * @param _srcEid The source endpoint ID.\\n * @param _amountLD The amount in local decimals.\\n * @param _composeMsg The composed message.\\n * @return _msg The encoded Composed message.\\n */\\n function encode(\\n uint64 _nonce,\\n uint32 _srcEid,\\n uint256 _amountLD,\\n bytes memory _composeMsg // 0x[composeFrom][composeMsg]\\n ) internal pure returns (bytes memory _msg) {\\n _msg = abi.encodePacked(_nonce, _srcEid, _amountLD, _composeMsg);\\n }\\n\\n /**\\n * @dev Retrieves the nonce for the composed message.\\n * @param _msg The message.\\n * @return The nonce value.\\n */\\n function nonce(bytes calldata _msg) internal pure returns (uint64) {\\n return uint64(bytes8(_msg[:NONCE_OFFSET]));\\n }\\n\\n /**\\n * @dev Retrieves the source endpoint ID for the composed message.\\n * @param _msg The message.\\n * @return The source endpoint ID.\\n */\\n function srcEid(bytes calldata _msg) internal pure returns (uint32) {\\n return uint32(bytes4(_msg[NONCE_OFFSET:SRC_EID_OFFSET]));\\n }\\n\\n /**\\n * @dev Retrieves the amount in local decimals from the composed message.\\n * @param _msg The message.\\n * @return The amount in local decimals.\\n */\\n function amountLD(bytes calldata _msg) internal pure returns (uint256) {\\n return uint256(bytes32(_msg[SRC_EID_OFFSET:AMOUNT_LD_OFFSET]));\\n }\\n\\n /**\\n * @dev Retrieves the composeFrom value from the composed message.\\n * @param _msg The message.\\n * @return The composeFrom value.\\n */\\n function composeFrom(bytes calldata _msg) internal pure returns (bytes32) {\\n return bytes32(_msg[AMOUNT_LD_OFFSET:COMPOSE_FROM_OFFSET]);\\n }\\n\\n /**\\n * @dev Retrieves the composed message.\\n * @param _msg The message.\\n * @return The composed message.\\n */\\n function composeMsg(bytes calldata _msg) internal pure returns (bytes memory) {\\n return _msg[COMPOSE_FROM_OFFSET:];\\n }\\n\\n /**\\n * @dev Converts an address to bytes32.\\n * @param _addr The address to convert.\\n * @return The bytes32 representation of the address.\\n */\\n function addressToBytes32(address _addr) internal pure returns (bytes32) {\\n return bytes32(uint256(uint160(_addr)));\\n }\\n\\n /**\\n * @dev Converts bytes32 to an address.\\n * @param _b The bytes32 value to convert.\\n * @return The address representation of bytes32.\\n */\\n function bytes32ToAddress(bytes32 _b) internal pure returns (address) {\\n return address(uint160(uint256(_b)));\\n }\\n}\\n\",\"keccak256\":\"0xaae73d6eb8b9561c43f1802f3c416c00ccd35f172b711f9781ccdf1b25a40db5\",\"license\":\"MIT\"},\"@layerzerolabs/oft-evm/contracts/libs/OFTMsgCodec.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\nlibrary OFTMsgCodec {\\n // Offset constants for encoding and decoding OFT messages\\n uint8 private constant SEND_TO_OFFSET = 32;\\n uint8 private constant SEND_AMOUNT_SD_OFFSET = 40;\\n\\n /**\\n * @dev Encodes an OFT LayerZero message.\\n * @param _sendTo The recipient address.\\n * @param _amountShared The amount in shared decimals.\\n * @param _composeMsg The composed message.\\n * @return _msg The encoded message.\\n * @return hasCompose A boolean indicating whether the message has a composed payload.\\n */\\n function encode(\\n bytes32 _sendTo,\\n uint64 _amountShared,\\n bytes memory _composeMsg\\n ) internal view returns (bytes memory _msg, bool hasCompose) {\\n hasCompose = _composeMsg.length > 0;\\n // @dev Remote chains will want to know the composed function caller ie. msg.sender on the src.\\n _msg = hasCompose\\n ? abi.encodePacked(_sendTo, _amountShared, addressToBytes32(msg.sender), _composeMsg)\\n : abi.encodePacked(_sendTo, _amountShared);\\n }\\n\\n /**\\n * @dev Checks if the OFT message is composed.\\n * @param _msg The OFT message.\\n * @return A boolean indicating whether the message is composed.\\n */\\n function isComposed(bytes calldata _msg) internal pure returns (bool) {\\n return _msg.length > SEND_AMOUNT_SD_OFFSET;\\n }\\n\\n /**\\n * @dev Retrieves the recipient address from the OFT message.\\n * @param _msg The OFT message.\\n * @return The recipient address.\\n */\\n function sendTo(bytes calldata _msg) internal pure returns (bytes32) {\\n return bytes32(_msg[:SEND_TO_OFFSET]);\\n }\\n\\n /**\\n * @dev Retrieves the amount in shared decimals from the OFT message.\\n * @param _msg The OFT message.\\n * @return The amount in shared decimals.\\n */\\n function amountSD(bytes calldata _msg) internal pure returns (uint64) {\\n return uint64(bytes8(_msg[SEND_TO_OFFSET:SEND_AMOUNT_SD_OFFSET]));\\n }\\n\\n /**\\n * @dev Retrieves the composed message from the OFT message.\\n * @param _msg The OFT message.\\n * @return The composed message.\\n */\\n function composeMsg(bytes calldata _msg) internal pure returns (bytes memory) {\\n return _msg[SEND_AMOUNT_SD_OFFSET:];\\n }\\n\\n /**\\n * @dev Converts an address to bytes32.\\n * @param _addr The address to convert.\\n * @return The bytes32 representation of the address.\\n */\\n function addressToBytes32(address _addr) internal pure returns (bytes32) {\\n return bytes32(uint256(uint160(_addr)));\\n }\\n\\n /**\\n * @dev Converts bytes32 to an address.\\n * @param _b The bytes32 value to convert.\\n * @return The address representation of bytes32.\\n */\\n function bytes32ToAddress(bytes32 _b) internal pure returns (address) {\\n return address(uint160(uint256(_b)));\\n }\\n}\\n\",\"keccak256\":\"0x5358948017669c03e157f871d8c38e988f9004dbd0801ad3119d2487f0d40b0b\",\"license\":\"MIT\"},\"@openzeppelin/contracts/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {Context} from \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * The initial owner is set to the address provided by the deployer. This can\\n * later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n /**\\n * @dev The caller account is not authorized to perform an operation.\\n */\\n error OwnableUnauthorizedAccount(address account);\\n\\n /**\\n * @dev The owner is not a valid owner account. (eg. `address(0)`)\\n */\\n error OwnableInvalidOwner(address owner);\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the address provided by the deployer as the initial owner.\\n */\\n constructor(address initialOwner) {\\n if (initialOwner == address(0)) {\\n revert OwnableInvalidOwner(address(0));\\n }\\n _transferOwnership(initialOwner);\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n _checkOwner();\\n _;\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if the sender is not the owner.\\n */\\n function _checkOwner() internal view virtual {\\n if (owner() != _msgSender()) {\\n revert OwnableUnauthorizedAccount(_msgSender());\\n }\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby disabling any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n if (newOwner == address(0)) {\\n revert OwnableInvalidOwner(address(0));\\n }\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n}\\n\",\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\"},\"@openzeppelin/contracts/interfaces/IERC1363.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (interfaces/IERC1363.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {IERC20} from \\\"./IERC20.sol\\\";\\nimport {IERC165} from \\\"./IERC165.sol\\\";\\n\\n/**\\n * @title IERC1363\\n * @dev Interface of the ERC-1363 standard as defined in the https://eips.ethereum.org/EIPS/eip-1363[ERC-1363].\\n *\\n * Defines an extension interface for ERC-20 tokens that supports executing code on a recipient contract\\n * after `transfer` or `transferFrom`, or code on a spender contract after `approve`, in a single transaction.\\n */\\ninterface IERC1363 is IERC20, IERC165 {\\n /*\\n * Note: the ERC-165 identifier for this interface is 0xb0202a11.\\n * 0xb0202a11 ===\\n * bytes4(keccak256('transferAndCall(address,uint256)')) ^\\n * bytes4(keccak256('transferAndCall(address,uint256,bytes)')) ^\\n * bytes4(keccak256('transferFromAndCall(address,address,uint256)')) ^\\n * bytes4(keccak256('transferFromAndCall(address,address,uint256,bytes)')) ^\\n * bytes4(keccak256('approveAndCall(address,uint256)')) ^\\n * bytes4(keccak256('approveAndCall(address,uint256,bytes)'))\\n */\\n\\n /**\\n * @dev Moves a `value` amount of tokens from the caller's account to `to`\\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\\n * @param to The address which you want to transfer to.\\n * @param value The amount of tokens to be transferred.\\n * @return A boolean value indicating whether the operation succeeded unless throwing.\\n */\\n function transferAndCall(address to, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from the caller's account to `to`\\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\\n * @param to The address which you want to transfer to.\\n * @param value The amount of tokens to be transferred.\\n * @param data Additional data with no specified format, sent in call to `to`.\\n * @return A boolean value indicating whether the operation succeeded unless throwing.\\n */\\n function transferAndCall(address to, uint256 value, bytes calldata data) external returns (bool);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism\\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\\n * @param from The address which you want to send tokens from.\\n * @param to The address which you want to transfer to.\\n * @param value The amount of tokens to be transferred.\\n * @return A boolean value indicating whether the operation succeeded unless throwing.\\n */\\n function transferFromAndCall(address from, address to, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism\\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\\n * @param from The address which you want to send tokens from.\\n * @param to The address which you want to transfer to.\\n * @param value The amount of tokens to be transferred.\\n * @param data Additional data with no specified format, sent in call to `to`.\\n * @return A boolean value indicating whether the operation succeeded unless throwing.\\n */\\n function transferFromAndCall(address from, address to, uint256 value, bytes calldata data) external returns (bool);\\n\\n /**\\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\\n * caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`.\\n * @param spender The address which will spend the funds.\\n * @param value The amount of tokens to be spent.\\n * @return A boolean value indicating whether the operation succeeded unless throwing.\\n */\\n function approveAndCall(address spender, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\\n * caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`.\\n * @param spender The address which will spend the funds.\\n * @param value The amount of tokens to be spent.\\n * @param data Additional data with no specified format, sent in call to `spender`.\\n * @return A boolean value indicating whether the operation succeeded unless throwing.\\n */\\n function approveAndCall(address spender, uint256 value, bytes calldata data) external returns (bool);\\n}\\n\",\"keccak256\":\"0x9b6b3e7803bc5f2f8cd7ad57db8ac1def61a9930a5a3107df4882e028a9605d7\",\"license\":\"MIT\"},\"@openzeppelin/contracts/interfaces/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC165.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {IERC165} from \\\"../utils/introspection/IERC165.sol\\\";\\n\",\"keccak256\":\"0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724\",\"license\":\"MIT\"},\"@openzeppelin/contracts/interfaces/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC20.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {IERC20} from \\\"../token/ERC20/IERC20.sol\\\";\\n\",\"keccak256\":\"0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c\",\"license\":\"MIT\"},\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (interfaces/draft-IERC6093.sol)\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Standard ERC-20 Errors\\n * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-20 tokens.\\n */\\ninterface IERC20Errors {\\n /**\\n * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.\\n * @param sender Address whose tokens are being transferred.\\n * @param balance Current balance for the interacting account.\\n * @param needed Minimum amount required to perform a transfer.\\n */\\n error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed);\\n\\n /**\\n * @dev Indicates a failure with the token `sender`. Used in transfers.\\n * @param sender Address whose tokens are being transferred.\\n */\\n error ERC20InvalidSender(address sender);\\n\\n /**\\n * @dev Indicates a failure with the token `receiver`. Used in transfers.\\n * @param receiver Address to which tokens are being transferred.\\n */\\n error ERC20InvalidReceiver(address receiver);\\n\\n /**\\n * @dev Indicates a failure with the `spender`\\u2019s `allowance`. Used in transfers.\\n * @param spender Address that may be allowed to operate on tokens without being their owner.\\n * @param allowance Amount of tokens a `spender` is allowed to operate with.\\n * @param needed Minimum amount required to perform a transfer.\\n */\\n error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed);\\n\\n /**\\n * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\\n * @param approver Address initiating an approval operation.\\n */\\n error ERC20InvalidApprover(address approver);\\n\\n /**\\n * @dev Indicates a failure with the `spender` to be approved. Used in approvals.\\n * @param spender Address that may be allowed to operate on tokens without being their owner.\\n */\\n error ERC20InvalidSpender(address spender);\\n}\\n\\n/**\\n * @dev Standard ERC-721 Errors\\n * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-721 tokens.\\n */\\ninterface IERC721Errors {\\n /**\\n * @dev Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in ERC-20.\\n * Used in balance queries.\\n * @param owner Address of the current owner of a token.\\n */\\n error ERC721InvalidOwner(address owner);\\n\\n /**\\n * @dev Indicates a `tokenId` whose `owner` is the zero address.\\n * @param tokenId Identifier number of a token.\\n */\\n error ERC721NonexistentToken(uint256 tokenId);\\n\\n /**\\n * @dev Indicates an error related to the ownership over a particular token. Used in transfers.\\n * @param sender Address whose tokens are being transferred.\\n * @param tokenId Identifier number of a token.\\n * @param owner Address of the current owner of a token.\\n */\\n error ERC721IncorrectOwner(address sender, uint256 tokenId, address owner);\\n\\n /**\\n * @dev Indicates a failure with the token `sender`. Used in transfers.\\n * @param sender Address whose tokens are being transferred.\\n */\\n error ERC721InvalidSender(address sender);\\n\\n /**\\n * @dev Indicates a failure with the token `receiver`. Used in transfers.\\n * @param receiver Address to which tokens are being transferred.\\n */\\n error ERC721InvalidReceiver(address receiver);\\n\\n /**\\n * @dev Indicates a failure with the `operator`\\u2019s approval. Used in transfers.\\n * @param operator Address that may be allowed to operate on tokens without being their owner.\\n * @param tokenId Identifier number of a token.\\n */\\n error ERC721InsufficientApproval(address operator, uint256 tokenId);\\n\\n /**\\n * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\\n * @param approver Address initiating an approval operation.\\n */\\n error ERC721InvalidApprover(address approver);\\n\\n /**\\n * @dev Indicates a failure with the `operator` to be approved. Used in approvals.\\n * @param operator Address that may be allowed to operate on tokens without being their owner.\\n */\\n error ERC721InvalidOperator(address operator);\\n}\\n\\n/**\\n * @dev Standard ERC-1155 Errors\\n * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-1155 tokens.\\n */\\ninterface IERC1155Errors {\\n /**\\n * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.\\n * @param sender Address whose tokens are being transferred.\\n * @param balance Current balance for the interacting account.\\n * @param needed Minimum amount required to perform a transfer.\\n * @param tokenId Identifier number of a token.\\n */\\n error ERC1155InsufficientBalance(address sender, uint256 balance, uint256 needed, uint256 tokenId);\\n\\n /**\\n * @dev Indicates a failure with the token `sender`. Used in transfers.\\n * @param sender Address whose tokens are being transferred.\\n */\\n error ERC1155InvalidSender(address sender);\\n\\n /**\\n * @dev Indicates a failure with the token `receiver`. Used in transfers.\\n * @param receiver Address to which tokens are being transferred.\\n */\\n error ERC1155InvalidReceiver(address receiver);\\n\\n /**\\n * @dev Indicates a failure with the `operator`\\u2019s approval. Used in transfers.\\n * @param operator Address that may be allowed to operate on tokens without being their owner.\\n * @param owner Address of the current owner of a token.\\n */\\n error ERC1155MissingApprovalForAll(address operator, address owner);\\n\\n /**\\n * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\\n * @param approver Address initiating an approval operation.\\n */\\n error ERC1155InvalidApprover(address approver);\\n\\n /**\\n * @dev Indicates a failure with the `operator` to be approved. Used in approvals.\\n * @param operator Address that may be allowed to operate on tokens without being their owner.\\n */\\n error ERC1155InvalidOperator(address operator);\\n\\n /**\\n * @dev Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation.\\n * Used in batch transfers.\\n * @param idsLength Length of the array of token identifiers\\n * @param valuesLength Length of the array of token amounts\\n */\\n error ERC1155InvalidArrayLength(uint256 idsLength, uint256 valuesLength);\\n}\\n\",\"keccak256\":\"0x880da465c203cec76b10d72dbd87c80f387df4102274f23eea1f9c9b0918792b\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/ERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/ERC20.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {IERC20} from \\\"./IERC20.sol\\\";\\nimport {IERC20Metadata} from \\\"./extensions/IERC20Metadata.sol\\\";\\nimport {Context} from \\\"../../utils/Context.sol\\\";\\nimport {IERC20Errors} from \\\"../../interfaces/draft-IERC6093.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC20} interface.\\n *\\n * This implementation is agnostic to the way tokens are created. This means\\n * that a supply mechanism has to be added in a derived contract using {_mint}.\\n *\\n * TIP: For a detailed writeup see our guide\\n * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\\n * to implement supply mechanisms].\\n *\\n * The default value of {decimals} is 18. To change this, you should override\\n * this function so it returns a different value.\\n *\\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\\n * instead returning `false` on failure. This behavior is nonetheless\\n * conventional and does not conflict with the expectations of ERC-20\\n * applications.\\n */\\nabstract contract ERC20 is Context, IERC20, IERC20Metadata, IERC20Errors {\\n mapping(address account => uint256) private _balances;\\n\\n mapping(address account => mapping(address spender => uint256)) private _allowances;\\n\\n uint256 private _totalSupply;\\n\\n string private _name;\\n string private _symbol;\\n\\n /**\\n * @dev Sets the values for {name} and {symbol}.\\n *\\n * All two of these values are immutable: they can only be set once during\\n * construction.\\n */\\n constructor(string memory name_, string memory symbol_) {\\n _name = name_;\\n _symbol = symbol_;\\n }\\n\\n /**\\n * @dev Returns the name of the token.\\n */\\n function name() public view virtual returns (string memory) {\\n return _name;\\n }\\n\\n /**\\n * @dev Returns the symbol of the token, usually a shorter version of the\\n * name.\\n */\\n function symbol() public view virtual returns (string memory) {\\n return _symbol;\\n }\\n\\n /**\\n * @dev Returns the number of decimals used to get its user representation.\\n * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n * be displayed to a user as `5.05` (`505 / 10 ** 2`).\\n *\\n * Tokens usually opt for a value of 18, imitating the relationship between\\n * Ether and Wei. This is the default value returned by this function, unless\\n * it's overridden.\\n *\\n * NOTE: This information is only used for _display_ purposes: it in\\n * no way affects any of the arithmetic of the contract, including\\n * {IERC20-balanceOf} and {IERC20-transfer}.\\n */\\n function decimals() public view virtual returns (uint8) {\\n return 18;\\n }\\n\\n /**\\n * @dev See {IERC20-totalSupply}.\\n */\\n function totalSupply() public view virtual returns (uint256) {\\n return _totalSupply;\\n }\\n\\n /**\\n * @dev See {IERC20-balanceOf}.\\n */\\n function balanceOf(address account) public view virtual returns (uint256) {\\n return _balances[account];\\n }\\n\\n /**\\n * @dev See {IERC20-transfer}.\\n *\\n * Requirements:\\n *\\n * - `to` cannot be the zero address.\\n * - the caller must have a balance of at least `value`.\\n */\\n function transfer(address to, uint256 value) public virtual returns (bool) {\\n address owner = _msgSender();\\n _transfer(owner, to, value);\\n return true;\\n }\\n\\n /**\\n * @dev See {IERC20-allowance}.\\n */\\n function allowance(address owner, address spender) public view virtual returns (uint256) {\\n return _allowances[owner][spender];\\n }\\n\\n /**\\n * @dev See {IERC20-approve}.\\n *\\n * NOTE: If `value` is the maximum `uint256`, the allowance is not updated on\\n * `transferFrom`. This is semantically equivalent to an infinite approval.\\n *\\n * Requirements:\\n *\\n * - `spender` cannot be the zero address.\\n */\\n function approve(address spender, uint256 value) public virtual returns (bool) {\\n address owner = _msgSender();\\n _approve(owner, spender, value);\\n return true;\\n }\\n\\n /**\\n * @dev See {IERC20-transferFrom}.\\n *\\n * Skips emitting an {Approval} event indicating an allowance update. This is not\\n * required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve].\\n *\\n * NOTE: Does not update the allowance if the current allowance\\n * is the maximum `uint256`.\\n *\\n * Requirements:\\n *\\n * - `from` and `to` cannot be the zero address.\\n * - `from` must have a balance of at least `value`.\\n * - the caller must have allowance for ``from``'s tokens of at least\\n * `value`.\\n */\\n function transferFrom(address from, address to, uint256 value) public virtual returns (bool) {\\n address spender = _msgSender();\\n _spendAllowance(from, spender, value);\\n _transfer(from, to, value);\\n return true;\\n }\\n\\n /**\\n * @dev Moves a `value` amount of tokens from `from` to `to`.\\n *\\n * This internal function is equivalent to {transfer}, and can be used to\\n * e.g. implement automatic token fees, slashing mechanisms, etc.\\n *\\n * Emits a {Transfer} event.\\n *\\n * NOTE: This function is not virtual, {_update} should be overridden instead.\\n */\\n function _transfer(address from, address to, uint256 value) internal {\\n if (from == address(0)) {\\n revert ERC20InvalidSender(address(0));\\n }\\n if (to == address(0)) {\\n revert ERC20InvalidReceiver(address(0));\\n }\\n _update(from, to, value);\\n }\\n\\n /**\\n * @dev Transfers a `value` amount of tokens from `from` to `to`, or alternatively mints (or burns) if `from`\\n * (or `to`) is the zero address. All customizations to transfers, mints, and burns should be done by overriding\\n * this function.\\n *\\n * Emits a {Transfer} event.\\n */\\n function _update(address from, address to, uint256 value) internal virtual {\\n if (from == address(0)) {\\n // Overflow check required: The rest of the code assumes that totalSupply never overflows\\n _totalSupply += value;\\n } else {\\n uint256 fromBalance = _balances[from];\\n if (fromBalance < value) {\\n revert ERC20InsufficientBalance(from, fromBalance, value);\\n }\\n unchecked {\\n // Overflow not possible: value <= fromBalance <= totalSupply.\\n _balances[from] = fromBalance - value;\\n }\\n }\\n\\n if (to == address(0)) {\\n unchecked {\\n // Overflow not possible: value <= totalSupply or value <= fromBalance <= totalSupply.\\n _totalSupply -= value;\\n }\\n } else {\\n unchecked {\\n // Overflow not possible: balance + value is at most totalSupply, which we know fits into a uint256.\\n _balances[to] += value;\\n }\\n }\\n\\n emit Transfer(from, to, value);\\n }\\n\\n /**\\n * @dev Creates a `value` amount of tokens and assigns them to `account`, by transferring it from address(0).\\n * Relies on the `_update` mechanism\\n *\\n * Emits a {Transfer} event with `from` set to the zero address.\\n *\\n * NOTE: This function is not virtual, {_update} should be overridden instead.\\n */\\n function _mint(address account, uint256 value) internal {\\n if (account == address(0)) {\\n revert ERC20InvalidReceiver(address(0));\\n }\\n _update(address(0), account, value);\\n }\\n\\n /**\\n * @dev Destroys a `value` amount of tokens from `account`, lowering the total supply.\\n * Relies on the `_update` mechanism.\\n *\\n * Emits a {Transfer} event with `to` set to the zero address.\\n *\\n * NOTE: This function is not virtual, {_update} should be overridden instead\\n */\\n function _burn(address account, uint256 value) internal {\\n if (account == address(0)) {\\n revert ERC20InvalidSender(address(0));\\n }\\n _update(account, address(0), value);\\n }\\n\\n /**\\n * @dev Sets `value` as the allowance of `spender` over the `owner` s tokens.\\n *\\n * This internal function is equivalent to `approve`, and can be used to\\n * e.g. set automatic allowances for certain subsystems, etc.\\n *\\n * Emits an {Approval} event.\\n *\\n * Requirements:\\n *\\n * - `owner` cannot be the zero address.\\n * - `spender` cannot be the zero address.\\n *\\n * Overrides to this logic should be done to the variant with an additional `bool emitEvent` argument.\\n */\\n function _approve(address owner, address spender, uint256 value) internal {\\n _approve(owner, spender, value, true);\\n }\\n\\n /**\\n * @dev Variant of {_approve} with an optional flag to enable or disable the {Approval} event.\\n *\\n * By default (when calling {_approve}) the flag is set to true. On the other hand, approval changes made by\\n * `_spendAllowance` during the `transferFrom` operation set the flag to false. This saves gas by not emitting any\\n * `Approval` event during `transferFrom` operations.\\n *\\n * Anyone who wishes to continue emitting `Approval` events on the`transferFrom` operation can force the flag to\\n * true using the following override:\\n *\\n * ```solidity\\n * function _approve(address owner, address spender, uint256 value, bool) internal virtual override {\\n * super._approve(owner, spender, value, true);\\n * }\\n * ```\\n *\\n * Requirements are the same as {_approve}.\\n */\\n function _approve(address owner, address spender, uint256 value, bool emitEvent) internal virtual {\\n if (owner == address(0)) {\\n revert ERC20InvalidApprover(address(0));\\n }\\n if (spender == address(0)) {\\n revert ERC20InvalidSpender(address(0));\\n }\\n _allowances[owner][spender] = value;\\n if (emitEvent) {\\n emit Approval(owner, spender, value);\\n }\\n }\\n\\n /**\\n * @dev Updates `owner` s allowance for `spender` based on spent `value`.\\n *\\n * Does not update the allowance value in case of infinite allowance.\\n * Revert if not enough allowance is available.\\n *\\n * Does not emit an {Approval} event.\\n */\\n function _spendAllowance(address owner, address spender, uint256 value) internal virtual {\\n uint256 currentAllowance = allowance(owner, spender);\\n if (currentAllowance != type(uint256).max) {\\n if (currentAllowance < value) {\\n revert ERC20InsufficientAllowance(spender, currentAllowance, value);\\n }\\n unchecked {\\n _approve(owner, spender, currentAllowance - value, false);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0xbf61ab2ae1d575a17ea58fbb99ca232baddcc4e0eeea180e84cbc74b0c348b31\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Interface of the ERC-20 standard as defined in the ERC.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the value of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the value of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\\n * caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from `from` to `to` using the\\n * allowance mechanism. `value` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 value) external returns (bool);\\n}\\n\",\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {IERC20} from \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC-20 standard.\\n */\\ninterface IERC20Metadata is IERC20 {\\n /**\\n * @dev Returns the name of the token.\\n */\\n function name() external view returns (string memory);\\n\\n /**\\n * @dev Returns the symbol of the token.\\n */\\n function symbol() external view returns (string memory);\\n\\n /**\\n * @dev Returns the decimals places of the token.\\n */\\n function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x70f2f713b13b7ce4610bcd0ac9fec0f3cc43693b043abcb8dc40a42a726eb330\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/utils/SafeERC20.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {IERC20} from \\\"../IERC20.sol\\\";\\nimport {IERC1363} from \\\"../../../interfaces/IERC1363.sol\\\";\\nimport {Address} from \\\"../../../utils/Address.sol\\\";\\n\\n/**\\n * @title SafeERC20\\n * @dev Wrappers around ERC-20 operations that throw on failure (when the token\\n * contract returns false). Tokens that return no value (and instead revert or\\n * throw on failure) are also supported, non-reverting calls are assumed to be\\n * successful.\\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\n */\\nlibrary SafeERC20 {\\n /**\\n * @dev An operation with an ERC-20 token failed.\\n */\\n error SafeERC20FailedOperation(address token);\\n\\n /**\\n * @dev Indicates a failed `decreaseAllowance` request.\\n */\\n error SafeERC20FailedDecreaseAllowance(address spender, uint256 currentAllowance, uint256 requestedDecrease);\\n\\n /**\\n * @dev Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value,\\n * non-reverting calls are assumed to be successful.\\n */\\n function safeTransfer(IERC20 token, address to, uint256 value) internal {\\n _callOptionalReturn(token, abi.encodeCall(token.transfer, (to, value)));\\n }\\n\\n /**\\n * @dev Transfer `value` amount of `token` from `from` to `to`, spending the approval given by `from` to the\\n * calling contract. If `token` returns no value, non-reverting calls are assumed to be successful.\\n */\\n function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\\n _callOptionalReturn(token, abi.encodeCall(token.transferFrom, (from, to, value)));\\n }\\n\\n /**\\n * @dev Increase the calling contract's allowance toward `spender` by `value`. If `token` returns no value,\\n * non-reverting calls are assumed to be successful.\\n *\\n * IMPORTANT: If the token implements ERC-7674 (ERC-20 with temporary allowance), and if the \\\"client\\\"\\n * smart contract uses ERC-7674 to set temporary allowances, then the \\\"client\\\" smart contract should avoid using\\n * this function. Performing a {safeIncreaseAllowance} or {safeDecreaseAllowance} operation on a token contract\\n * that has a non-zero temporary allowance (for that particular owner-spender) will result in unexpected behavior.\\n */\\n function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {\\n uint256 oldAllowance = token.allowance(address(this), spender);\\n forceApprove(token, spender, oldAllowance + value);\\n }\\n\\n /**\\n * @dev Decrease the calling contract's allowance toward `spender` by `requestedDecrease`. If `token` returns no\\n * value, non-reverting calls are assumed to be successful.\\n *\\n * IMPORTANT: If the token implements ERC-7674 (ERC-20 with temporary allowance), and if the \\\"client\\\"\\n * smart contract uses ERC-7674 to set temporary allowances, then the \\\"client\\\" smart contract should avoid using\\n * this function. Performing a {safeIncreaseAllowance} or {safeDecreaseAllowance} operation on a token contract\\n * that has a non-zero temporary allowance (for that particular owner-spender) will result in unexpected behavior.\\n */\\n function safeDecreaseAllowance(IERC20 token, address spender, uint256 requestedDecrease) internal {\\n unchecked {\\n uint256 currentAllowance = token.allowance(address(this), spender);\\n if (currentAllowance < requestedDecrease) {\\n revert SafeERC20FailedDecreaseAllowance(spender, currentAllowance, requestedDecrease);\\n }\\n forceApprove(token, spender, currentAllowance - requestedDecrease);\\n }\\n }\\n\\n /**\\n * @dev Set the calling contract's allowance toward `spender` to `value`. If `token` returns no value,\\n * non-reverting calls are assumed to be successful. Meant to be used with tokens that require the approval\\n * to be set to zero before setting it to a non-zero value, such as USDT.\\n *\\n * NOTE: If the token implements ERC-7674, this function will not modify any temporary allowance. This function\\n * only sets the \\\"standard\\\" allowance. Any temporary allowance will remain active, in addition to the value being\\n * set here.\\n */\\n function forceApprove(IERC20 token, address spender, uint256 value) internal {\\n bytes memory approvalCall = abi.encodeCall(token.approve, (spender, value));\\n\\n if (!_callOptionalReturnBool(token, approvalCall)) {\\n _callOptionalReturn(token, abi.encodeCall(token.approve, (spender, 0)));\\n _callOptionalReturn(token, approvalCall);\\n }\\n }\\n\\n /**\\n * @dev Performs an {ERC1363} transferAndCall, with a fallback to the simple {ERC20} transfer if the target has no\\n * code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\\n * targeting contracts.\\n *\\n * Reverts if the returned value is other than `true`.\\n */\\n function transferAndCallRelaxed(IERC1363 token, address to, uint256 value, bytes memory data) internal {\\n if (to.code.length == 0) {\\n safeTransfer(token, to, value);\\n } else if (!token.transferAndCall(to, value, data)) {\\n revert SafeERC20FailedOperation(address(token));\\n }\\n }\\n\\n /**\\n * @dev Performs an {ERC1363} transferFromAndCall, with a fallback to the simple {ERC20} transferFrom if the target\\n * has no code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\\n * targeting contracts.\\n *\\n * Reverts if the returned value is other than `true`.\\n */\\n function transferFromAndCallRelaxed(\\n IERC1363 token,\\n address from,\\n address to,\\n uint256 value,\\n bytes memory data\\n ) internal {\\n if (to.code.length == 0) {\\n safeTransferFrom(token, from, to, value);\\n } else if (!token.transferFromAndCall(from, to, value, data)) {\\n revert SafeERC20FailedOperation(address(token));\\n }\\n }\\n\\n /**\\n * @dev Performs an {ERC1363} approveAndCall, with a fallback to the simple {ERC20} approve if the target has no\\n * code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\\n * targeting contracts.\\n *\\n * NOTE: When the recipient address (`to`) has no code (i.e. is an EOA), this function behaves as {forceApprove}.\\n * Opposedly, when the recipient address (`to`) has code, this function only attempts to call {ERC1363-approveAndCall}\\n * once without retrying, and relies on the returned value to be true.\\n *\\n * Reverts if the returned value is other than `true`.\\n */\\n function approveAndCallRelaxed(IERC1363 token, address to, uint256 value, bytes memory data) internal {\\n if (to.code.length == 0) {\\n forceApprove(token, to, value);\\n } else if (!token.approveAndCall(to, value, data)) {\\n revert SafeERC20FailedOperation(address(token));\\n }\\n }\\n\\n /**\\n * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n * on the return value: the return value is optional (but if data is returned, it must not be false).\\n * @param token The token targeted by the call.\\n * @param data The call data (encoded using abi.encode or one of its variants).\\n *\\n * This is a variant of {_callOptionalReturnBool} that reverts if call fails to meet the requirements.\\n */\\n function _callOptionalReturn(IERC20 token, bytes memory data) private {\\n uint256 returnSize;\\n uint256 returnValue;\\n assembly (\\\"memory-safe\\\") {\\n let success := call(gas(), token, 0, add(data, 0x20), mload(data), 0, 0x20)\\n // bubble errors\\n if iszero(success) {\\n let ptr := mload(0x40)\\n returndatacopy(ptr, 0, returndatasize())\\n revert(ptr, returndatasize())\\n }\\n returnSize := returndatasize()\\n returnValue := mload(0)\\n }\\n\\n if (returnSize == 0 ? address(token).code.length == 0 : returnValue != 1) {\\n revert SafeERC20FailedOperation(address(token));\\n }\\n }\\n\\n /**\\n * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n * on the return value: the return value is optional (but if data is returned, it must not be false).\\n * @param token The token targeted by the call.\\n * @param data The call data (encoded using abi.encode or one of its variants).\\n *\\n * This is a variant of {_callOptionalReturn} that silently catches all reverts and returns a bool instead.\\n */\\n function _callOptionalReturnBool(IERC20 token, bytes memory data) private returns (bool) {\\n bool success;\\n uint256 returnSize;\\n uint256 returnValue;\\n assembly (\\\"memory-safe\\\") {\\n success := call(gas(), token, 0, add(data, 0x20), mload(data), 0, 0x20)\\n returnSize := returndatasize()\\n returnValue := mload(0)\\n }\\n return success && (returnSize == 0 ? address(token).code.length > 0 : returnValue == 1);\\n }\\n}\\n\",\"keccak256\":\"0xca2ae13e0610f6a99238dd00b97bd786bc92732dae6d6b9d61f573ec51018310\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {Errors} from \\\"./Errors.sol\\\";\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev There's no code at `target` (it is not a contract).\\n */\\n error AddressEmptyCode(address target);\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.8.20/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n if (address(this).balance < amount) {\\n revert Errors.InsufficientBalance(address(this).balance, amount);\\n }\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n if (!success) {\\n revert Errors.FailedCall();\\n }\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason or custom error, it is bubbled\\n * up by this function (like regular Solidity function calls). However, if\\n * the call reverted with no returned reason, this function reverts with a\\n * {Errors.FailedCall} error.\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n if (address(this).balance < value) {\\n revert Errors.InsufficientBalance(address(this).balance, value);\\n }\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResultFromTarget(target, success, returndata);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResultFromTarget(target, success, returndata);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResultFromTarget(target, success, returndata);\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call to smart-contract was successful, and reverts if the target\\n * was not a contract or bubbling up the revert reason (falling back to {Errors.FailedCall}) in case\\n * of an unsuccessful call.\\n */\\n function verifyCallResultFromTarget(\\n address target,\\n bool success,\\n bytes memory returndata\\n ) internal view returns (bytes memory) {\\n if (!success) {\\n _revert(returndata);\\n } else {\\n // only check if target is a contract if the call was successful and the return data is empty\\n // otherwise we already know that it was a contract\\n if (returndata.length == 0 && target.code.length == 0) {\\n revert AddressEmptyCode(target);\\n }\\n return returndata;\\n }\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call was successful, and reverts if it wasn't, either by bubbling the\\n * revert reason or with a default {Errors.FailedCall} error.\\n */\\n function verifyCallResult(bool success, bytes memory returndata) internal pure returns (bytes memory) {\\n if (!success) {\\n _revert(returndata);\\n } else {\\n return returndata;\\n }\\n }\\n\\n /**\\n * @dev Reverts with returndata if present. Otherwise reverts with {Errors.FailedCall}.\\n */\\n function _revert(bytes memory returndata) private pure {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n assembly (\\\"memory-safe\\\") {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert Errors.FailedCall();\\n }\\n }\\n}\\n\",\"keccak256\":\"0x9d8da059267bac779a2dbbb9a26c2acf00ca83085e105d62d5d4ef96054a47f5\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n\\n function _contextSuffixLength() internal view virtual returns (uint256) {\\n return 0;\\n }\\n}\\n\",\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Errors.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/Errors.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Collection of common custom errors used in multiple contracts\\n *\\n * IMPORTANT: Backwards compatibility is not guaranteed in future versions of the library.\\n * It is recommended to avoid relying on the error API for critical functionality.\\n *\\n * _Available since v5.1._\\n */\\nlibrary Errors {\\n /**\\n * @dev The ETH balance of the account is not enough to perform the operation.\\n */\\n error InsufficientBalance(uint256 balance, uint256 needed);\\n\\n /**\\n * @dev A call to an address target failed. The target may have reverted.\\n */\\n error FailedCall();\\n\\n /**\\n * @dev The deployment failed.\\n */\\n error FailedDeployment();\\n\\n /**\\n * @dev A necessary precompile is missing.\\n */\\n error MissingPrecompile(address);\\n}\\n\",\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/introspection/IERC165.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Interface of the ERC-165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[ERC].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\"},\"contracts/MyOFT.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.8.22;\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\nimport { OFT } from \\\"@layerzerolabs/oft-evm/contracts/OFT.sol\\\";\\n\\ncontract MyOFT is OFT {\\n constructor(\\n string memory _name,\\n string memory _symbol,\\n address _lzEndpoint,\\n address _delegate\\n ) OFT(_name, _symbol, _lzEndpoint, _delegate) Ownable(_delegate) {}\\n}\\n\",\"keccak256\":\"0x903ef3775b76a5c87c69530c8c70b97b3474317b72dae1967b4cc3e00bbb3042\",\"license\":\"UNLICENSED\"}},\"version\":1}", - "storageLayout": { - "storage": [ - { - "astId": 3837, - "contract": "contracts/MyOFT.sol:MyOFT", - "label": "_owner", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 1390, - "contract": "contracts/MyOFT.sol:MyOFT", - "label": "peers", - "offset": 0, - "slot": "1", - "type": "t_mapping(t_uint32,t_bytes32)" - }, - { - "astId": 2166, - "contract": "contracts/MyOFT.sol:MyOFT", - "label": "preCrime", - "offset": 0, - "slot": "2", - "type": "t_address" - }, - { - "astId": 2006, - "contract": "contracts/MyOFT.sol:MyOFT", - "label": "enforcedOptions", - "offset": 0, - "slot": "3", - "type": "t_mapping(t_uint32,t_mapping(t_uint16,t_bytes_storage))" - }, - { - "astId": 2784, - "contract": "contracts/MyOFT.sol:MyOFT", - "label": "msgInspector", - "offset": 0, - "slot": "4", - "type": "t_address" - }, - { - "astId": 4226, - "contract": "contracts/MyOFT.sol:MyOFT", - "label": "_balances", - "offset": 0, - "slot": "5", - "type": "t_mapping(t_address,t_uint256)" - }, - { - "astId": 4232, - "contract": "contracts/MyOFT.sol:MyOFT", - "label": "_allowances", - "offset": 0, - "slot": "6", - "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))" - }, - { - "astId": 4234, - "contract": "contracts/MyOFT.sol:MyOFT", - "label": "_totalSupply", - "offset": 0, - "slot": "7", - "type": "t_uint256" - }, - { - "astId": 4236, - "contract": "contracts/MyOFT.sol:MyOFT", - "label": "_name", - "offset": 0, - "slot": "8", - "type": "t_string_storage" - }, - { - "astId": 4238, - "contract": "contracts/MyOFT.sol:MyOFT", - "label": "_symbol", - "offset": 0, - "slot": "9", - "type": "t_string_storage" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_bytes32": { - "encoding": "inplace", - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes_storage": { - "encoding": "bytes", - "label": "bytes", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_mapping(t_address,t_uint256))": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => mapping(address => uint256))", - "numberOfBytes": "32", - "value": "t_mapping(t_address,t_uint256)" - }, - "t_mapping(t_address,t_uint256)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => uint256)", - "numberOfBytes": "32", - "value": "t_uint256" - }, - "t_mapping(t_uint16,t_bytes_storage)": { - "encoding": "mapping", - "key": "t_uint16", - "label": "mapping(uint16 => bytes)", - "numberOfBytes": "32", - "value": "t_bytes_storage" - }, - "t_mapping(t_uint32,t_bytes32)": { - "encoding": "mapping", - "key": "t_uint32", - "label": "mapping(uint32 => bytes32)", - "numberOfBytes": "32", - "value": "t_bytes32" - }, - "t_mapping(t_uint32,t_mapping(t_uint16,t_bytes_storage))": { - "encoding": "mapping", - "key": "t_uint32", - "label": "mapping(uint32 => mapping(uint16 => bytes))", - "numberOfBytes": "32", - "value": "t_mapping(t_uint16,t_bytes_storage)" - }, - "t_string_storage": { - "encoding": "bytes", - "label": "string", - "numberOfBytes": "32" - }, - "t_uint16": { - "encoding": "inplace", - "label": "uint16", - "numberOfBytes": "2" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint32": { - "encoding": "inplace", - "label": "uint32", - "numberOfBytes": "4" - } - } - }, - "userdoc": { - "kind": "user", - "methods": { - "allowInitializePath((uint32,bytes32,uint64))": { - "notice": "Checks if the path initialization is allowed based on the provided origin." - }, - "approvalRequired()": { - "notice": "Indicates whether the OFT contract requires approval of the 'token()' to send." - }, - "combineOptions(uint32,uint16,bytes)": { - "notice": "Combines options for a given endpoint and message type." - }, - "endpoint()": { - "notice": "Retrieves the LayerZero endpoint associated with the OApp." - }, - "isComposeMsgSender((uint32,bytes32,uint64),bytes,address)": { - "notice": "Indicates whether an address is an approved composeMsg sender to the Endpoint." - }, - "nextNonce(uint32,bytes32)": { - "notice": "Retrieves the next nonce for a given source endpoint and sender address." - }, - "oAppVersion()": { - "notice": "Retrieves the OApp version information." - }, - "oftVersion()": { - "notice": "Retrieves interfaceID and the version of the OFT." - }, - "peers(uint32)": { - "notice": "Retrieves the peer (OApp) associated with a corresponding endpoint." - }, - "quoteOFT((uint32,bytes32,uint256,uint256,bytes,bytes,bytes))": { - "notice": "Provides the fee breakdown and settings data for an OFT. Unused in the default implementation." - }, - "quoteSend((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),bool)": { - "notice": "Provides a quote for the send() operation." - }, - "setDelegate(address)": { - "notice": "Sets the delegate address for the OApp." - }, - "setPeer(uint32,bytes32)": { - "notice": "Sets the peer address (OApp instance) for a corresponding endpoint." - } - }, - "version": 1 - } - } - }, - "contracts/mocks/MyOFTMock.sol": { - "MyOFTMock": { - "abi": [ - { - "inputs": [ - { "internalType": "string", "name": "_name", "type": "string" }, - { - "internalType": "string", - "name": "_symbol", - "type": "string" - }, - { - "internalType": "address", - "name": "_lzEndpoint", - "type": "address" - }, - { - "internalType": "address", - "name": "_delegate", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "allowance", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "needed", - "type": "uint256" - } - ], - "name": "ERC20InsufficientAllowance", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "balance", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "needed", - "type": "uint256" - } - ], - "name": "ERC20InsufficientBalance", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "approver", - "type": "address" - } - ], - "name": "ERC20InvalidApprover", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "receiver", - "type": "address" - } - ], - "name": "ERC20InvalidReceiver", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "ERC20InvalidSender", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - } - ], - "name": "ERC20InvalidSpender", - "type": "error" - }, - { "inputs": [], "name": "InvalidDelegate", "type": "error" }, - { "inputs": [], "name": "InvalidEndpointCall", "type": "error" }, - { "inputs": [], "name": "InvalidLocalDecimals", "type": "error" }, - { - "inputs": [ - { "internalType": "bytes", "name": "options", "type": "bytes" } - ], - "name": "InvalidOptions", - "type": "error" - }, - { "inputs": [], "name": "LzTokenUnavailable", "type": "error" }, - { - "inputs": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" } - ], - "name": "NoPeer", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "msgValue", - "type": "uint256" - } - ], - "name": "NotEnoughNative", - "type": "error" - }, - { - "inputs": [ - { "internalType": "address", "name": "addr", "type": "address" } - ], - "name": "OnlyEndpoint", - "type": "error" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - } - ], - "name": "OnlyPeer", - "type": "error" - }, - { "inputs": [], "name": "OnlySelf", "type": "error" }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "OwnableInvalidOwner", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "OwnableUnauthorizedAccount", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - } - ], - "name": "SafeERC20FailedOperation", - "type": "error" - }, - { - "inputs": [ - { "internalType": "bytes", "name": "result", "type": "bytes" } - ], - "name": "SimulationResult", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "amountLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minAmountLD", - "type": "uint256" - } - ], - "name": "SlippageExceeded", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "eid", - "type": "uint32" - }, - { - "internalType": "uint16", - "name": "msgType", - "type": "uint16" - }, - { - "internalType": "bytes", - "name": "options", - "type": "bytes" - } - ], - "indexed": false, - "internalType": "struct EnforcedOptionParam[]", - "name": "_enforcedOptions", - "type": "tuple[]" - } - ], - "name": "EnforcedOptionSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "inspector", - "type": "address" - } - ], - "name": "MsgInspectorSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "guid", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "address", - "name": "toAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amountReceivedLD", - "type": "uint256" - } - ], - "name": "OFTReceived", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "guid", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "address", - "name": "fromAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amountSentLD", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amountReceivedLD", - "type": "uint256" - } - ], - "name": "OFTSent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "eid", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "peer", - "type": "bytes32" - } - ], - "name": "PeerSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "preCrimeAddress", - "type": "address" - } - ], - "name": "PreCrimeSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "inputs": [], - "name": "SEND", - "outputs": [ - { "internalType": "uint16", "name": "", "type": "uint16" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "SEND_AND_CALL", - "outputs": [ - { "internalType": "uint16", "name": "", "type": "uint16" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - } - ], - "internalType": "struct Origin", - "name": "origin", - "type": "tuple" - } - ], - "name": "allowInitializePath", - "outputs": [ - { "internalType": "bool", "name": "", "type": "bool" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "spender", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "approvalRequired", - "outputs": [ - { "internalType": "bool", "name": "", "type": "bool" } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { "internalType": "bool", "name": "", "type": "bool" } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { - "internalType": "uint16", - "name": "_msgType", - "type": "uint16" - }, - { - "internalType": "bytes", - "name": "_extraOptions", - "type": "bytes" - } - ], - "name": "combineOptions", - "outputs": [ - { "internalType": "bytes", "name": "", "type": "bytes" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "decimalConversionRate", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "decimals", - "outputs": [ - { "internalType": "uint8", "name": "", "type": "uint8" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "endpoint", - "outputs": [ - { - "internalType": "contract ILayerZeroEndpointV2", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" }, - { - "internalType": "uint16", - "name": "msgType", - "type": "uint16" - } - ], - "name": "enforcedOptions", - "outputs": [ - { - "internalType": "bytes", - "name": "enforcedOption", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - } - ], - "internalType": "struct Origin", - "name": "", - "type": "tuple" - }, - { "internalType": "bytes", "name": "", "type": "bytes" }, - { - "internalType": "address", - "name": "_sender", - "type": "address" - } - ], - "name": "isComposeMsgSender", - "outputs": [ - { "internalType": "bool", "name": "", "type": "bool" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { - "internalType": "bytes32", - "name": "_peer", - "type": "bytes32" - } - ], - "name": "isPeer", - "outputs": [ - { "internalType": "bool", "name": "", "type": "bool" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - } - ], - "internalType": "struct Origin", - "name": "_origin", - "type": "tuple" - }, - { - "internalType": "bytes32", - "name": "_guid", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "_message", - "type": "bytes" - }, - { - "internalType": "address", - "name": "_executor", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "lzReceive", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - } - ], - "internalType": "struct Origin", - "name": "origin", - "type": "tuple" - }, - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "guid", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "address", - "name": "executor", - "type": "address" - }, - { - "internalType": "bytes", - "name": "message", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "extraData", - "type": "bytes" - } - ], - "internalType": "struct InboundPacket[]", - "name": "_packets", - "type": "tuple[]" - } - ], - "name": "lzReceiveAndRevert", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - } - ], - "internalType": "struct Origin", - "name": "_origin", - "type": "tuple" - }, - { - "internalType": "bytes32", - "name": "_guid", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "_message", - "type": "bytes" - }, - { - "internalType": "address", - "name": "_executor", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "lzReceiveSimulate", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "_to", "type": "address" }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "mint", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "msgInspector", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [ - { "internalType": "string", "name": "", "type": "string" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "", "type": "uint32" }, - { "internalType": "bytes32", "name": "", "type": "bytes32" } - ], - "name": "nextNonce", - "outputs": [ - { "internalType": "uint64", "name": "nonce", "type": "uint64" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "oApp", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "oAppVersion", - "outputs": [ - { - "internalType": "uint64", - "name": "senderVersion", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "receiverVersion", - "type": "uint64" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [], - "name": "oftVersion", - "outputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - }, - { - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" } - ], - "name": "peers", - "outputs": [ - { "internalType": "bytes32", "name": "peer", "type": "bytes32" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "preCrime", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "to", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amountLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minAmountLD", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "extraOptions", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "composeMsg", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "oftCmd", - "type": "bytes" - } - ], - "internalType": "struct SendParam", - "name": "_sendParam", - "type": "tuple" - } - ], - "name": "quoteOFT", - "outputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "minAmountLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxAmountLD", - "type": "uint256" - } - ], - "internalType": "struct OFTLimit", - "name": "oftLimit", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "int256", - "name": "feeAmountLD", - "type": "int256" - }, - { - "internalType": "string", - "name": "description", - "type": "string" - } - ], - "internalType": "struct OFTFeeDetail[]", - "name": "oftFeeDetails", - "type": "tuple[]" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "amountSentLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "amountReceivedLD", - "type": "uint256" - } - ], - "internalType": "struct OFTReceipt", - "name": "oftReceipt", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "to", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amountLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minAmountLD", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "extraOptions", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "composeMsg", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "oftCmd", - "type": "bytes" - } - ], - "internalType": "struct SendParam", - "name": "_sendParam", - "type": "tuple" - }, - { - "internalType": "bool", - "name": "_payInLzToken", - "type": "bool" - } - ], - "name": "quoteSend", - "outputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "nativeFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "lzTokenFee", - "type": "uint256" - } - ], - "internalType": "struct MessagingFee", - "name": "msgFee", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "to", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amountLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minAmountLD", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "extraOptions", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "composeMsg", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "oftCmd", - "type": "bytes" - } - ], - "internalType": "struct SendParam", - "name": "_sendParam", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "nativeFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "lzTokenFee", - "type": "uint256" - } - ], - "internalType": "struct MessagingFee", - "name": "_fee", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_refundAddress", - "type": "address" - } - ], - "name": "send", - "outputs": [ - { - "components": [ - { - "internalType": "bytes32", - "name": "guid", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "nativeFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "lzTokenFee", - "type": "uint256" - } - ], - "internalType": "struct MessagingFee", - "name": "fee", - "type": "tuple" - } - ], - "internalType": "struct MessagingReceipt", - "name": "msgReceipt", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "amountSentLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "amountReceivedLD", - "type": "uint256" - } - ], - "internalType": "struct OFTReceipt", - "name": "oftReceipt", - "type": "tuple" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_delegate", - "type": "address" - } - ], - "name": "setDelegate", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "eid", - "type": "uint32" - }, - { - "internalType": "uint16", - "name": "msgType", - "type": "uint16" - }, - { - "internalType": "bytes", - "name": "options", - "type": "bytes" - } - ], - "internalType": "struct EnforcedOptionParam[]", - "name": "_enforcedOptions", - "type": "tuple[]" - } - ], - "name": "setEnforcedOptions", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_msgInspector", - "type": "address" - } - ], - "name": "setMsgInspector", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { - "internalType": "bytes32", - "name": "_peer", - "type": "bytes32" - } - ], - "name": "setPeer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_preCrime", - "type": "address" - } - ], - "name": "setPreCrime", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "sharedDecimals", - "outputs": [ - { "internalType": "uint8", "name": "", "type": "uint8" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "outputs": [ - { "internalType": "string", "name": "", "type": "string" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "token", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalSupply", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "to", "type": "address" }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { "internalType": "bool", "name": "", "type": "bool" } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { "internalType": "address", "name": "to", "type": "address" }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { "internalType": "bool", "name": "", "type": "bool" } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "devdoc": { - "errors": { - "ERC20InsufficientAllowance(address,uint256,uint256)": [ - { - "details": "Indicates a failure with the `spender`’s `allowance`. Used in transfers.", - "params": { - "allowance": "Amount of tokens a `spender` is allowed to operate with.", - "needed": "Minimum amount required to perform a transfer.", - "spender": "Address that may be allowed to operate on tokens without being their owner." - } - } - ], - "ERC20InsufficientBalance(address,uint256,uint256)": [ - { - "details": "Indicates an error related to the current `balance` of a `sender`. Used in transfers.", - "params": { - "balance": "Current balance for the interacting account.", - "needed": "Minimum amount required to perform a transfer.", - "sender": "Address whose tokens are being transferred." - } - } - ], - "ERC20InvalidApprover(address)": [ - { - "details": "Indicates a failure with the `approver` of a token to be approved. Used in approvals.", - "params": { - "approver": "Address initiating an approval operation." - } - } - ], - "ERC20InvalidReceiver(address)": [ - { - "details": "Indicates a failure with the token `receiver`. Used in transfers.", - "params": { - "receiver": "Address to which tokens are being transferred." - } - } - ], - "ERC20InvalidSender(address)": [ - { - "details": "Indicates a failure with the token `sender`. Used in transfers.", - "params": { - "sender": "Address whose tokens are being transferred." - } - } - ], - "ERC20InvalidSpender(address)": [ - { - "details": "Indicates a failure with the `spender` to be approved. Used in approvals.", - "params": { - "spender": "Address that may be allowed to operate on tokens without being their owner." - } - } - ], - "OwnableInvalidOwner(address)": [ - { - "details": "The owner is not a valid owner account. (eg. `address(0)`)" - } - ], - "OwnableUnauthorizedAccount(address)": [ - { - "details": "The caller account is not authorized to perform an operation." - } - ], - "SafeERC20FailedOperation(address)": [ - { "details": "An operation with an ERC-20 token failed." } - ] - }, - "events": { - "Approval(address,address,uint256)": { - "details": "Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance." - }, - "PreCrimeSet(address)": { - "details": "Emitted when the preCrime contract address is set.", - "params": { - "preCrimeAddress": "The address of the preCrime contract." - } - }, - "Transfer(address,address,uint256)": { - "details": "Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero." - } - }, - "kind": "dev", - "methods": { - "allowInitializePath((uint32,bytes32,uint64))": { - "details": "This indicates to the endpoint that the OApp has enabled msgs for this particular path to be received.This defaults to assuming if a peer has been set, its initialized. Can be overridden by the OApp if there is other logic to determine this.", - "params": { - "origin": "The origin information containing the source endpoint and sender address." - }, - "returns": { "_0": "Whether the path has been initialized." } - }, - "allowance(address,address)": { - "details": "See {IERC20-allowance}." - }, - "approvalRequired()": { - "details": "In the case of OFT where the contract IS the token, approval is NOT required.", - "returns": { - "_0": "requiresApproval Needs approval of the underlying token implementation." - } - }, - "approve(address,uint256)": { - "details": "See {IERC20-approve}. NOTE: If `value` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address." - }, - "balanceOf(address)": { "details": "See {IERC20-balanceOf}." }, - "combineOptions(uint32,uint16,bytes)": { - "details": "If there is an enforced lzReceive option: - {gasLimit: 200k, msg.value: 1 ether} AND a caller supplies a lzReceive option: {gasLimit: 100k, msg.value: 0.5 ether} - The resulting options will be {gasLimit: 300k, msg.value: 1.5 ether} when the message is executed on the remote lzReceive() function.This presence of duplicated options is handled off-chain in the verifier/executor.", - "params": { - "_eid": "The endpoint ID.", - "_extraOptions": "Additional options passed by the caller.", - "_msgType": "The OAPP message type." - }, - "returns": { - "_0": "options The combination of caller specified options AND enforced options." - } - }, - "decimals()": { - "details": "Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the default value returned by this function, unless it's overridden. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}." - }, - "isComposeMsgSender((uint32,bytes32,uint64),bytes,address)": { - "details": "_origin The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message._message The lzReceive payload.Applications can optionally choose to implement separate composeMsg senders that are NOT the bridging layer.The default sender IS the OAppReceiver implementer.", - "params": { "_sender": "The sender address." }, - "returns": { "_0": "isSender Is a valid sender." } - }, - "isPeer(uint32,bytes32)": { - "details": "Check if the peer is considered 'trusted' by the OApp.Enables OAppPreCrimeSimulator to check whether a potential Inbound Packet is from a trusted source.", - "params": { - "_eid": "The endpoint ID to check.", - "_peer": "The peer to check." - }, - "returns": { - "_0": "Whether the peer passed is considered 'trusted' by the OApp." - } - }, - "lzReceive((uint32,bytes32,uint64),bytes32,bytes,address,bytes)": { - "details": "Entry point for receiving messages or packets from the endpoint.Entry point for receiving msg/packet from the LayerZero endpoint.", - "params": { - "_executor": "The address of the executor for the received message.", - "_extraData": "Additional arbitrary data provided by the corresponding executor.", - "_guid": "The unique identifier for the received LayerZero message.", - "_message": "The payload of the received message.", - "_origin": "The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message." - } - }, - "lzReceiveAndRevert(((uint32,bytes32,uint64),uint32,address,bytes32,uint256,address,bytes,bytes)[])": { - "details": "Interface for pre-crime simulations. Always reverts at the end with the simulation results.WARNING: MUST revert at the end with the simulation results.Gives the preCrime implementation the ability to mock sending packets to the lzReceive function, WITHOUT actually executing them.", - "params": { - "_packets": "An array of InboundPacket objects representing received packets to be delivered." - } - }, - "lzReceiveSimulate((uint32,bytes32,uint64),bytes32,bytes,address,bytes)": { - "details": "Is effectively an internal function because msg.sender must be address(this). Allows resetting the call stack for 'internal' calls.", - "params": { - "_executor": "The executor address for the packet.", - "_extraData": "Additional data for the packet.", - "_guid": "The unique identifier of the packet.", - "_message": "The message payload of the packet.", - "_origin": "The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message." - } - }, - "name()": { "details": "Returns the name of the token." }, - "nextNonce(uint32,bytes32)": { - "details": "_srcEid The source endpoint ID._sender The sender address.The path nonce starts from 1. If 0 is returned it means that there is NO nonce ordered enforcement.Is required by the off-chain executor to determine the OApp expects msg execution is ordered.This is also enforced by the OApp.By default this is NOT enabled. ie. nextNonce is hardcoded to return 0.", - "returns": { "nonce": "The next nonce." } - }, - "oApp()": { - "details": "Retrieves the address of the OApp contract.The simulator contract is the base contract for the OApp by default.If the simulator is a separate contract, override this function.", - "returns": { "_0": "The address of the OApp contract." } - }, - "oAppVersion()": { - "returns": { - "receiverVersion": "The version of the OAppReceiver.sol implementation.", - "senderVersion": "The version of the OAppSender.sol implementation." - } - }, - "oftVersion()": { - "details": "interfaceId: This specific interface ID is '0x02e49c2c'.version: Indicates a cross-chain compatible msg encoding with other OFTs.If a new feature is added to the OFT cross-chain msg encoding, the version will be incremented. ie. localOFT version(x,1) CAN send messages to remoteOFT version(x,1)", - "returns": { - "interfaceId": "The interface ID.", - "version": "The version." - } - }, - "owner()": { - "details": "Returns the address of the current owner." - }, - "quoteOFT((uint32,bytes32,uint256,uint256,bytes,bytes,bytes))": { - "params": { - "_sendParam": "The parameters for the send operation." - }, - "returns": { - "oftFeeDetails": "The details of OFT fees.", - "oftLimit": "The OFT limit information.", - "oftReceipt": "The OFT receipt information." - } - }, - "quoteSend((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),bool)": { - "details": "MessagingFee: LayerZero msg fee - nativeFee: The native fee. - lzTokenFee: The lzToken fee.", - "params": { - "_payInLzToken": "Flag indicating whether the caller is paying in the LZ token.", - "_sendParam": "The parameters for the send() operation." - }, - "returns": { - "msgFee": "The calculated LayerZero messaging fee from the send() operation." - } - }, - "renounceOwnership()": { - "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner." - }, - "send((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),(uint256,uint256),address)": { - "details": "Executes the send operation.MessagingReceipt: LayerZero msg receipt - guid: The unique identifier for the sent message. - nonce: The nonce of the sent message. - fee: The LayerZero fee incurred for the message.", - "params": { - "_fee": "The calculated fee for the send() operation. - nativeFee: The native fee. - lzTokenFee: The lzToken fee.", - "_refundAddress": "The address to receive any excess funds.", - "_sendParam": "The parameters for the send operation." - }, - "returns": { - "msgReceipt": "The receipt for the send operation.", - "oftReceipt": "The OFT receipt information." - } - }, - "setDelegate(address)": { - "details": "Only the owner/admin of the OApp can call this function.Provides the ability for a delegate to set configs, on behalf of the OApp, directly on the Endpoint contract.", - "params": { - "_delegate": "The address of the delegate to be set." - } - }, - "setEnforcedOptions((uint32,uint16,bytes)[])": { - "details": "Sets the enforced options for specific endpoint and message type combinations.Only the owner/admin of the OApp can call this function.Provides a way for the OApp to enforce things like paying for PreCrime, AND/OR minimum dst lzReceive gas amounts etc.These enforced options can vary as the potential options/execution on the remote may differ as per the msgType. eg. Amount of lzReceive() gas necessary to deliver a lzCompose() message adds overhead you dont want to pay if you are only making a standard LayerZero message ie. lzReceive() WITHOUT sendCompose().", - "params": { - "_enforcedOptions": "An array of EnforcedOptionParam structures specifying enforced options." - } - }, - "setMsgInspector(address)": { - "details": "Sets the message inspector address for the OFT.This is an optional contract that can be used to inspect both 'message' and 'options'.Set it to address(0) to disable it, or set it to a contract address to enable it.", - "params": { - "_msgInspector": "The address of the message inspector." - } - }, - "setPeer(uint32,bytes32)": { - "details": "Only the owner/admin of the OApp can call this function.Indicates that the peer is trusted to send LayerZero messages to this OApp.Set this to bytes32(0) to remove the peer address.Peer is a bytes32 to accommodate non-evm chains.", - "params": { - "_eid": "The endpoint ID.", - "_peer": "The address of the peer to be associated with the corresponding endpoint." - } - }, - "setPreCrime(address)": { - "details": "Sets the preCrime contract address.", - "params": { - "_preCrime": "The address of the preCrime contract." - } - }, - "sharedDecimals()": { - "details": "Retrieves the shared decimals of the OFT.Sets an implicit cap on the amount of tokens, over uint64.max() will need some sort of outbound cap / totalSupply cap Lowest common decimal denominator between chains. Defaults to 6 decimal places to provide up to 18,446,744,073,709.551615 units (max uint64). For tokens exceeding this totalSupply(), they will need to override the sharedDecimals function with something smaller. ie. 4 sharedDecimals would be 1,844,674,407,370,955.1615", - "returns": { "_0": "The shared decimals of the OFT." } - }, - "symbol()": { - "details": "Returns the symbol of the token, usually a shorter version of the name." - }, - "token()": { - "details": "Retrieves the address of the underlying ERC20 implementation.In the case of OFT, address(this) and erc20 are the same contract.", - "returns": { "_0": "The address of the OFT token." } - }, - "totalSupply()": { "details": "See {IERC20-totalSupply}." }, - "transfer(address,uint256)": { - "details": "See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `value`." - }, - "transferFrom(address,address,uint256)": { - "details": "See {IERC20-transferFrom}. Skips emitting an {Approval} event indicating an allowance update. This is not required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve]. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `value`. - the caller must have allowance for ``from``'s tokens of at least `value`." - }, - "transferOwnership(address)": { - "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." - } - }, - "version": 1 - }, - "evm": { - "bytecode": { - "functionDebugData": { - "@_1354": { - "entryPoint": null, - "id": 1354, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@_1421": { - "entryPoint": null, - "id": 1421, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@_2646": { - "entryPoint": null, - "id": 2646, - "parameterSlots": 4, - "returnSlots": 0 - }, - "@_2821": { - "entryPoint": null, - "id": 2821, - "parameterSlots": 3, - "returnSlots": 0 - }, - "@_3879": { - "entryPoint": null, - "id": 3879, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@_4255": { - "entryPoint": null, - "id": 4255, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@_5585": { - "entryPoint": null, - "id": 5585, - "parameterSlots": 4, - "returnSlots": 0 - }, - "@_5610": { - "entryPoint": null, - "id": 5610, - "parameterSlots": 4, - "returnSlots": 0 - }, - "@_transferOwnership_3975": { - "entryPoint": 416, - "id": 3975, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@decimals_4282": { - "entryPoint": null, - "id": 4282, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@sharedDecimals_2846": { - "entryPoint": 496, - "id": 2846, - "parameterSlots": 0, - "returnSlots": 1 - }, - "abi_decode_address_fromMemory": { - "entryPoint": 701, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_decode_string_fromMemory": { - "entryPoint": 523, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_string_memory_ptrt_string_memory_ptrt_addresst_address_fromMemory": { - "entryPoint": 730, - "id": null, - "parameterSlots": 2, - "returnSlots": 4 - }, - "abi_encode_tuple_t_address__to_t_address__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "array_dataslot_string_storage": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "checked_exp_helper": { - "entryPoint": 929, - "id": null, - "parameterSlots": 2, - "returnSlots": 2 - }, - "checked_exp_t_uint256_t_uint8": { - "entryPoint": 1182, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "checked_exp_unsigned": { - "entryPoint": 1002, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "checked_sub_t_uint8": { - "entryPoint": 895, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "clean_up_bytearray_end_slots_string_storage": { - "entryPoint": 1266, - "id": null, - "parameterSlots": 3, - "returnSlots": 0 - }, - "copy_byte_array_to_storage_from_t_string_memory_ptr_to_t_string_storage": { - "entryPoint": 1351, - "id": null, - "parameterSlots": 2, - "returnSlots": 0 - }, - "extract_byte_array_length": { - "entryPoint": 1206, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "extract_used_part_and_set_length_of_short_byte_array": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "panic_error_0x11": { - "entryPoint": 873, - "id": null, - "parameterSlots": 0, - "returnSlots": 0 - }, - "panic_error_0x41": { - "entryPoint": 501, - "id": null, - "parameterSlots": 0, - "returnSlots": 0 - } - }, - "generatedSources": [ - { - "ast": { - "nativeSrc": "0:6365:43", - "nodeType": "YulBlock", - "src": "0:6365:43", - "statements": [ - { - "nativeSrc": "6:3:43", - "nodeType": "YulBlock", - "src": "6:3:43", - "statements": [] - }, - { - "body": { - "nativeSrc": "46:95:43", - "nodeType": "YulBlock", - "src": "46:95:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "63:1:43", - "nodeType": "YulLiteral", - "src": "63:1:43", - "type": "", - "value": "0" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "70:3:43", - "nodeType": "YulLiteral", - "src": "70:3:43", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nativeSrc": "75:10:43", - "nodeType": "YulLiteral", - "src": "75:10:43", - "type": "", - "value": "0x4e487b71" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "66:3:43", - "nodeType": "YulIdentifier", - "src": "66:3:43" - }, - "nativeSrc": "66:20:43", - "nodeType": "YulFunctionCall", - "src": "66:20:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "56:6:43", - "nodeType": "YulIdentifier", - "src": "56:6:43" - }, - "nativeSrc": "56:31:43", - "nodeType": "YulFunctionCall", - "src": "56:31:43" - }, - "nativeSrc": "56:31:43", - "nodeType": "YulExpressionStatement", - "src": "56:31:43" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "103:1:43", - "nodeType": "YulLiteral", - "src": "103:1:43", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nativeSrc": "106:4:43", - "nodeType": "YulLiteral", - "src": "106:4:43", - "type": "", - "value": "0x41" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "96:6:43", - "nodeType": "YulIdentifier", - "src": "96:6:43" - }, - "nativeSrc": "96:15:43", - "nodeType": "YulFunctionCall", - "src": "96:15:43" - }, - "nativeSrc": "96:15:43", - "nodeType": "YulExpressionStatement", - "src": "96:15:43" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "127:1:43", - "nodeType": "YulLiteral", - "src": "127:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "130:4:43", - "nodeType": "YulLiteral", - "src": "130:4:43", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "120:6:43", - "nodeType": "YulIdentifier", - "src": "120:6:43" - }, - "nativeSrc": "120:15:43", - "nodeType": "YulFunctionCall", - "src": "120:15:43" - }, - "nativeSrc": "120:15:43", - "nodeType": "YulExpressionStatement", - "src": "120:15:43" - } - ] - }, - "name": "panic_error_0x41", - "nativeSrc": "14:127:43", - "nodeType": "YulFunctionDefinition", - "src": "14:127:43" - }, - { - "body": { - "nativeSrc": "210:780:43", - "nodeType": "YulBlock", - "src": "210:780:43", - "statements": [ - { - "body": { - "nativeSrc": "259:16:43", - "nodeType": "YulBlock", - "src": "259:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "268:1:43", - "nodeType": "YulLiteral", - "src": "268:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "271:1:43", - "nodeType": "YulLiteral", - "src": "271:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "261:6:43", - "nodeType": "YulIdentifier", - "src": "261:6:43" - }, - "nativeSrc": "261:12:43", - "nodeType": "YulFunctionCall", - "src": "261:12:43" - }, - "nativeSrc": "261:12:43", - "nodeType": "YulExpressionStatement", - "src": "261:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "offset", - "nativeSrc": "238:6:43", - "nodeType": "YulIdentifier", - "src": "238:6:43" - }, - { - "kind": "number", - "nativeSrc": "246:4:43", - "nodeType": "YulLiteral", - "src": "246:4:43", - "type": "", - "value": "0x1f" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "234:3:43", - "nodeType": "YulIdentifier", - "src": "234:3:43" - }, - "nativeSrc": "234:17:43", - "nodeType": "YulFunctionCall", - "src": "234:17:43" - }, - { - "name": "end", - "nativeSrc": "253:3:43", - "nodeType": "YulIdentifier", - "src": "253:3:43" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "230:3:43", - "nodeType": "YulIdentifier", - "src": "230:3:43" - }, - "nativeSrc": "230:27:43", - "nodeType": "YulFunctionCall", - "src": "230:27:43" - } - ], - "functionName": { - "name": "iszero", - "nativeSrc": "223:6:43", - "nodeType": "YulIdentifier", - "src": "223:6:43" - }, - "nativeSrc": "223:35:43", - "nodeType": "YulFunctionCall", - "src": "223:35:43" - }, - "nativeSrc": "220:55:43", - "nodeType": "YulIf", - "src": "220:55:43" - }, - { - "nativeSrc": "284:23:43", - "nodeType": "YulVariableDeclaration", - "src": "284:23:43", - "value": { - "arguments": [ - { - "name": "offset", - "nativeSrc": "300:6:43", - "nodeType": "YulIdentifier", - "src": "300:6:43" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "294:5:43", - "nodeType": "YulIdentifier", - "src": "294:5:43" - }, - "nativeSrc": "294:13:43", - "nodeType": "YulFunctionCall", - "src": "294:13:43" - }, - "variables": [ - { - "name": "_1", - "nativeSrc": "288:2:43", - "nodeType": "YulTypedName", - "src": "288:2:43", - "type": "" - } - ] - }, - { - "nativeSrc": "316:28:43", - "nodeType": "YulVariableDeclaration", - "src": "316:28:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "334:2:43", - "nodeType": "YulLiteral", - "src": "334:2:43", - "type": "", - "value": "64" - }, - { - "kind": "number", - "nativeSrc": "338:1:43", - "nodeType": "YulLiteral", - "src": "338:1:43", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "330:3:43", - "nodeType": "YulIdentifier", - "src": "330:3:43" - }, - "nativeSrc": "330:10:43", - "nodeType": "YulFunctionCall", - "src": "330:10:43" - }, - { - "kind": "number", - "nativeSrc": "342:1:43", - "nodeType": "YulLiteral", - "src": "342:1:43", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "326:3:43", - "nodeType": "YulIdentifier", - "src": "326:3:43" - }, - "nativeSrc": "326:18:43", - "nodeType": "YulFunctionCall", - "src": "326:18:43" - }, - "variables": [ - { - "name": "_2", - "nativeSrc": "320:2:43", - "nodeType": "YulTypedName", - "src": "320:2:43", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "367:22:43", - "nodeType": "YulBlock", - "src": "367:22:43", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x41", - "nativeSrc": "369:16:43", - "nodeType": "YulIdentifier", - "src": "369:16:43" - }, - "nativeSrc": "369:18:43", - "nodeType": "YulFunctionCall", - "src": "369:18:43" - }, - "nativeSrc": "369:18:43", - "nodeType": "YulExpressionStatement", - "src": "369:18:43" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "_1", - "nativeSrc": "359:2:43", - "nodeType": "YulIdentifier", - "src": "359:2:43" - }, - { - "name": "_2", - "nativeSrc": "363:2:43", - "nodeType": "YulIdentifier", - "src": "363:2:43" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "356:2:43", - "nodeType": "YulIdentifier", - "src": "356:2:43" - }, - "nativeSrc": "356:10:43", - "nodeType": "YulFunctionCall", - "src": "356:10:43" - }, - "nativeSrc": "353:36:43", - "nodeType": "YulIf", - "src": "353:36:43" - }, - { - "nativeSrc": "398:17:43", - "nodeType": "YulVariableDeclaration", - "src": "398:17:43", - "value": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "412:2:43", - "nodeType": "YulLiteral", - "src": "412:2:43", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "not", - "nativeSrc": "408:3:43", - "nodeType": "YulIdentifier", - "src": "408:3:43" - }, - "nativeSrc": "408:7:43", - "nodeType": "YulFunctionCall", - "src": "408:7:43" - }, - "variables": [ - { - "name": "_3", - "nativeSrc": "402:2:43", - "nodeType": "YulTypedName", - "src": "402:2:43", - "type": "" - } - ] - }, - { - "nativeSrc": "424:23:43", - "nodeType": "YulVariableDeclaration", - "src": "424:23:43", - "value": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "444:2:43", - "nodeType": "YulLiteral", - "src": "444:2:43", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "438:5:43", - "nodeType": "YulIdentifier", - "src": "438:5:43" - }, - "nativeSrc": "438:9:43", - "nodeType": "YulFunctionCall", - "src": "438:9:43" - }, - "variables": [ - { - "name": "memPtr", - "nativeSrc": "428:6:43", - "nodeType": "YulTypedName", - "src": "428:6:43", - "type": "" - } - ] - }, - { - "nativeSrc": "456:71:43", - "nodeType": "YulVariableDeclaration", - "src": "456:71:43", - "value": { - "arguments": [ - { - "name": "memPtr", - "nativeSrc": "478:6:43", - "nodeType": "YulIdentifier", - "src": "478:6:43" - }, - { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "_1", - "nativeSrc": "502:2:43", - "nodeType": "YulIdentifier", - "src": "502:2:43" - }, - { - "kind": "number", - "nativeSrc": "506:4:43", - "nodeType": "YulLiteral", - "src": "506:4:43", - "type": "", - "value": "0x1f" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "498:3:43", - "nodeType": "YulIdentifier", - "src": "498:3:43" - }, - "nativeSrc": "498:13:43", - "nodeType": "YulFunctionCall", - "src": "498:13:43" - }, - { - "name": "_3", - "nativeSrc": "513:2:43", - "nodeType": "YulIdentifier", - "src": "513:2:43" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "494:3:43", - "nodeType": "YulIdentifier", - "src": "494:3:43" - }, - "nativeSrc": "494:22:43", - "nodeType": "YulFunctionCall", - "src": "494:22:43" - }, - { - "kind": "number", - "nativeSrc": "518:2:43", - "nodeType": "YulLiteral", - "src": "518:2:43", - "type": "", - "value": "63" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "490:3:43", - "nodeType": "YulIdentifier", - "src": "490:3:43" - }, - "nativeSrc": "490:31:43", - "nodeType": "YulFunctionCall", - "src": "490:31:43" - }, - { - "name": "_3", - "nativeSrc": "523:2:43", - "nodeType": "YulIdentifier", - "src": "523:2:43" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "486:3:43", - "nodeType": "YulIdentifier", - "src": "486:3:43" - }, - "nativeSrc": "486:40:43", - "nodeType": "YulFunctionCall", - "src": "486:40:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "474:3:43", - "nodeType": "YulIdentifier", - "src": "474:3:43" - }, - "nativeSrc": "474:53:43", - "nodeType": "YulFunctionCall", - "src": "474:53:43" - }, - "variables": [ - { - "name": "newFreePtr", - "nativeSrc": "460:10:43", - "nodeType": "YulTypedName", - "src": "460:10:43", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "586:22:43", - "nodeType": "YulBlock", - "src": "586:22:43", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x41", - "nativeSrc": "588:16:43", - "nodeType": "YulIdentifier", - "src": "588:16:43" - }, - "nativeSrc": "588:18:43", - "nodeType": "YulFunctionCall", - "src": "588:18:43" - }, - "nativeSrc": "588:18:43", - "nodeType": "YulExpressionStatement", - "src": "588:18:43" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "newFreePtr", - "nativeSrc": "545:10:43", - "nodeType": "YulIdentifier", - "src": "545:10:43" - }, - { - "name": "_2", - "nativeSrc": "557:2:43", - "nodeType": "YulIdentifier", - "src": "557:2:43" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "542:2:43", - "nodeType": "YulIdentifier", - "src": "542:2:43" - }, - "nativeSrc": "542:18:43", - "nodeType": "YulFunctionCall", - "src": "542:18:43" - }, - { - "arguments": [ - { - "name": "newFreePtr", - "nativeSrc": "565:10:43", - "nodeType": "YulIdentifier", - "src": "565:10:43" - }, - { - "name": "memPtr", - "nativeSrc": "577:6:43", - "nodeType": "YulIdentifier", - "src": "577:6:43" - } - ], - "functionName": { - "name": "lt", - "nativeSrc": "562:2:43", - "nodeType": "YulIdentifier", - "src": "562:2:43" - }, - "nativeSrc": "562:22:43", - "nodeType": "YulFunctionCall", - "src": "562:22:43" - } - ], - "functionName": { - "name": "or", - "nativeSrc": "539:2:43", - "nodeType": "YulIdentifier", - "src": "539:2:43" - }, - "nativeSrc": "539:46:43", - "nodeType": "YulFunctionCall", - "src": "539:46:43" - }, - "nativeSrc": "536:72:43", - "nodeType": "YulIf", - "src": "536:72:43" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "624:2:43", - "nodeType": "YulLiteral", - "src": "624:2:43", - "type": "", - "value": "64" - }, - { - "name": "newFreePtr", - "nativeSrc": "628:10:43", - "nodeType": "YulIdentifier", - "src": "628:10:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "617:6:43", - "nodeType": "YulIdentifier", - "src": "617:6:43" - }, - "nativeSrc": "617:22:43", - "nodeType": "YulFunctionCall", - "src": "617:22:43" - }, - "nativeSrc": "617:22:43", - "nodeType": "YulExpressionStatement", - "src": "617:22:43" - }, - { - "expression": { - "arguments": [ - { - "name": "memPtr", - "nativeSrc": "655:6:43", - "nodeType": "YulIdentifier", - "src": "655:6:43" - }, - { - "name": "_1", - "nativeSrc": "663:2:43", - "nodeType": "YulIdentifier", - "src": "663:2:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "648:6:43", - "nodeType": "YulIdentifier", - "src": "648:6:43" - }, - "nativeSrc": "648:18:43", - "nodeType": "YulFunctionCall", - "src": "648:18:43" - }, - "nativeSrc": "648:18:43", - "nodeType": "YulExpressionStatement", - "src": "648:18:43" - }, - { - "nativeSrc": "675:14:43", - "nodeType": "YulVariableDeclaration", - "src": "675:14:43", - "value": { - "kind": "number", - "nativeSrc": "685:4:43", - "nodeType": "YulLiteral", - "src": "685:4:43", - "type": "", - "value": "0x20" - }, - "variables": [ - { - "name": "_4", - "nativeSrc": "679:2:43", - "nodeType": "YulTypedName", - "src": "679:2:43", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "737:16:43", - "nodeType": "YulBlock", - "src": "737:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "746:1:43", - "nodeType": "YulLiteral", - "src": "746:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "749:1:43", - "nodeType": "YulLiteral", - "src": "749:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "739:6:43", - "nodeType": "YulIdentifier", - "src": "739:6:43" - }, - "nativeSrc": "739:12:43", - "nodeType": "YulFunctionCall", - "src": "739:12:43" - }, - "nativeSrc": "739:12:43", - "nodeType": "YulExpressionStatement", - "src": "739:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "offset", - "nativeSrc": "712:6:43", - "nodeType": "YulIdentifier", - "src": "712:6:43" - }, - { - "name": "_1", - "nativeSrc": "720:2:43", - "nodeType": "YulIdentifier", - "src": "720:2:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "708:3:43", - "nodeType": "YulIdentifier", - "src": "708:3:43" - }, - "nativeSrc": "708:15:43", - "nodeType": "YulFunctionCall", - "src": "708:15:43" - }, - { - "kind": "number", - "nativeSrc": "725:4:43", - "nodeType": "YulLiteral", - "src": "725:4:43", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "704:3:43", - "nodeType": "YulIdentifier", - "src": "704:3:43" - }, - "nativeSrc": "704:26:43", - "nodeType": "YulFunctionCall", - "src": "704:26:43" - }, - { - "name": "end", - "nativeSrc": "732:3:43", - "nodeType": "YulIdentifier", - "src": "732:3:43" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "701:2:43", - "nodeType": "YulIdentifier", - "src": "701:2:43" - }, - "nativeSrc": "701:35:43", - "nodeType": "YulFunctionCall", - "src": "701:35:43" - }, - "nativeSrc": "698:55:43", - "nodeType": "YulIf", - "src": "698:55:43" - }, - { - "nativeSrc": "762:10:43", - "nodeType": "YulVariableDeclaration", - "src": "762:10:43", - "value": { - "kind": "number", - "nativeSrc": "771:1:43", - "nodeType": "YulLiteral", - "src": "771:1:43", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "i", - "nativeSrc": "766:1:43", - "nodeType": "YulTypedName", - "src": "766:1:43", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "827:87:43", - "nodeType": "YulBlock", - "src": "827:87:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "memPtr", - "nativeSrc": "856:6:43", - "nodeType": "YulIdentifier", - "src": "856:6:43" - }, - { - "name": "i", - "nativeSrc": "864:1:43", - "nodeType": "YulIdentifier", - "src": "864:1:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "852:3:43", - "nodeType": "YulIdentifier", - "src": "852:3:43" - }, - "nativeSrc": "852:14:43", - "nodeType": "YulFunctionCall", - "src": "852:14:43" - }, - { - "name": "_4", - "nativeSrc": "868:2:43", - "nodeType": "YulIdentifier", - "src": "868:2:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "848:3:43", - "nodeType": "YulIdentifier", - "src": "848:3:43" - }, - "nativeSrc": "848:23:43", - "nodeType": "YulFunctionCall", - "src": "848:23:43" - }, - { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "offset", - "nativeSrc": "887:6:43", - "nodeType": "YulIdentifier", - "src": "887:6:43" - }, - { - "name": "i", - "nativeSrc": "895:1:43", - "nodeType": "YulIdentifier", - "src": "895:1:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "883:3:43", - "nodeType": "YulIdentifier", - "src": "883:3:43" - }, - "nativeSrc": "883:14:43", - "nodeType": "YulFunctionCall", - "src": "883:14:43" - }, - { - "name": "_4", - "nativeSrc": "899:2:43", - "nodeType": "YulIdentifier", - "src": "899:2:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "879:3:43", - "nodeType": "YulIdentifier", - "src": "879:3:43" - }, - "nativeSrc": "879:23:43", - "nodeType": "YulFunctionCall", - "src": "879:23:43" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "873:5:43", - "nodeType": "YulIdentifier", - "src": "873:5:43" - }, - "nativeSrc": "873:30:43", - "nodeType": "YulFunctionCall", - "src": "873:30:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "841:6:43", - "nodeType": "YulIdentifier", - "src": "841:6:43" - }, - "nativeSrc": "841:63:43", - "nodeType": "YulFunctionCall", - "src": "841:63:43" - }, - "nativeSrc": "841:63:43", - "nodeType": "YulExpressionStatement", - "src": "841:63:43" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nativeSrc": "792:1:43", - "nodeType": "YulIdentifier", - "src": "792:1:43" - }, - { - "name": "_1", - "nativeSrc": "795:2:43", - "nodeType": "YulIdentifier", - "src": "795:2:43" - } - ], - "functionName": { - "name": "lt", - "nativeSrc": "789:2:43", - "nodeType": "YulIdentifier", - "src": "789:2:43" - }, - "nativeSrc": "789:9:43", - "nodeType": "YulFunctionCall", - "src": "789:9:43" - }, - "nativeSrc": "781:133:43", - "nodeType": "YulForLoop", - "post": { - "nativeSrc": "799:19:43", - "nodeType": "YulBlock", - "src": "799:19:43", - "statements": [ - { - "nativeSrc": "801:15:43", - "nodeType": "YulAssignment", - "src": "801:15:43", - "value": { - "arguments": [ - { - "name": "i", - "nativeSrc": "810:1:43", - "nodeType": "YulIdentifier", - "src": "810:1:43" - }, - { - "name": "_4", - "nativeSrc": "813:2:43", - "nodeType": "YulIdentifier", - "src": "813:2:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "806:3:43", - "nodeType": "YulIdentifier", - "src": "806:3:43" - }, - "nativeSrc": "806:10:43", - "nodeType": "YulFunctionCall", - "src": "806:10:43" - }, - "variableNames": [ - { - "name": "i", - "nativeSrc": "801:1:43", - "nodeType": "YulIdentifier", - "src": "801:1:43" - } - ] - } - ] - }, - "pre": { - "nativeSrc": "785:3:43", - "nodeType": "YulBlock", - "src": "785:3:43", - "statements": [] - }, - "src": "781:133:43" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "memPtr", - "nativeSrc": "938:6:43", - "nodeType": "YulIdentifier", - "src": "938:6:43" - }, - { - "name": "_1", - "nativeSrc": "946:2:43", - "nodeType": "YulIdentifier", - "src": "946:2:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "934:3:43", - "nodeType": "YulIdentifier", - "src": "934:3:43" - }, - "nativeSrc": "934:15:43", - "nodeType": "YulFunctionCall", - "src": "934:15:43" - }, - { - "kind": "number", - "nativeSrc": "951:4:43", - "nodeType": "YulLiteral", - "src": "951:4:43", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "930:3:43", - "nodeType": "YulIdentifier", - "src": "930:3:43" - }, - "nativeSrc": "930:26:43", - "nodeType": "YulFunctionCall", - "src": "930:26:43" - }, - { - "kind": "number", - "nativeSrc": "958:1:43", - "nodeType": "YulLiteral", - "src": "958:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "923:6:43", - "nodeType": "YulIdentifier", - "src": "923:6:43" - }, - "nativeSrc": "923:37:43", - "nodeType": "YulFunctionCall", - "src": "923:37:43" - }, - "nativeSrc": "923:37:43", - "nodeType": "YulExpressionStatement", - "src": "923:37:43" - }, - { - "nativeSrc": "969:15:43", - "nodeType": "YulAssignment", - "src": "969:15:43", - "value": { - "name": "memPtr", - "nativeSrc": "978:6:43", - "nodeType": "YulIdentifier", - "src": "978:6:43" - }, - "variableNames": [ - { - "name": "array", - "nativeSrc": "969:5:43", - "nodeType": "YulIdentifier", - "src": "969:5:43" - } - ] - } - ] - }, - "name": "abi_decode_string_fromMemory", - "nativeSrc": "146:844:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "offset", - "nativeSrc": "184:6:43", - "nodeType": "YulTypedName", - "src": "184:6:43", - "type": "" - }, - { - "name": "end", - "nativeSrc": "192:3:43", - "nodeType": "YulTypedName", - "src": "192:3:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "array", - "nativeSrc": "200:5:43", - "nodeType": "YulTypedName", - "src": "200:5:43", - "type": "" - } - ], - "src": "146:844:43" - }, - { - "body": { - "nativeSrc": "1055:117:43", - "nodeType": "YulBlock", - "src": "1055:117:43", - "statements": [ - { - "nativeSrc": "1065:22:43", - "nodeType": "YulAssignment", - "src": "1065:22:43", - "value": { - "arguments": [ - { - "name": "offset", - "nativeSrc": "1080:6:43", - "nodeType": "YulIdentifier", - "src": "1080:6:43" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "1074:5:43", - "nodeType": "YulIdentifier", - "src": "1074:5:43" - }, - "nativeSrc": "1074:13:43", - "nodeType": "YulFunctionCall", - "src": "1074:13:43" - }, - "variableNames": [ - { - "name": "value", - "nativeSrc": "1065:5:43", - "nodeType": "YulIdentifier", - "src": "1065:5:43" - } - ] - }, - { - "body": { - "nativeSrc": "1150:16:43", - "nodeType": "YulBlock", - "src": "1150:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "1159:1:43", - "nodeType": "YulLiteral", - "src": "1159:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "1162:1:43", - "nodeType": "YulLiteral", - "src": "1162:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "1152:6:43", - "nodeType": "YulIdentifier", - "src": "1152:6:43" - }, - "nativeSrc": "1152:12:43", - "nodeType": "YulFunctionCall", - "src": "1152:12:43" - }, - "nativeSrc": "1152:12:43", - "nodeType": "YulExpressionStatement", - "src": "1152:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nativeSrc": "1109:5:43", - "nodeType": "YulIdentifier", - "src": "1109:5:43" - }, - { - "arguments": [ - { - "name": "value", - "nativeSrc": "1120:5:43", - "nodeType": "YulIdentifier", - "src": "1120:5:43" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "1135:3:43", - "nodeType": "YulLiteral", - "src": "1135:3:43", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nativeSrc": "1140:1:43", - "nodeType": "YulLiteral", - "src": "1140:1:43", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "1131:3:43", - "nodeType": "YulIdentifier", - "src": "1131:3:43" - }, - "nativeSrc": "1131:11:43", - "nodeType": "YulFunctionCall", - "src": "1131:11:43" - }, - { - "kind": "number", - "nativeSrc": "1144:1:43", - "nodeType": "YulLiteral", - "src": "1144:1:43", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "1127:3:43", - "nodeType": "YulIdentifier", - "src": "1127:3:43" - }, - "nativeSrc": "1127:19:43", - "nodeType": "YulFunctionCall", - "src": "1127:19:43" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "1116:3:43", - "nodeType": "YulIdentifier", - "src": "1116:3:43" - }, - "nativeSrc": "1116:31:43", - "nodeType": "YulFunctionCall", - "src": "1116:31:43" - } - ], - "functionName": { - "name": "eq", - "nativeSrc": "1106:2:43", - "nodeType": "YulIdentifier", - "src": "1106:2:43" - }, - "nativeSrc": "1106:42:43", - "nodeType": "YulFunctionCall", - "src": "1106:42:43" - } - ], - "functionName": { - "name": "iszero", - "nativeSrc": "1099:6:43", - "nodeType": "YulIdentifier", - "src": "1099:6:43" - }, - "nativeSrc": "1099:50:43", - "nodeType": "YulFunctionCall", - "src": "1099:50:43" - }, - "nativeSrc": "1096:70:43", - "nodeType": "YulIf", - "src": "1096:70:43" - } - ] - }, - "name": "abi_decode_address_fromMemory", - "nativeSrc": "995:177:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "offset", - "nativeSrc": "1034:6:43", - "nodeType": "YulTypedName", - "src": "1034:6:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value", - "nativeSrc": "1045:5:43", - "nodeType": "YulTypedName", - "src": "1045:5:43", - "type": "" - } - ], - "src": "995:177:43" - }, - { - "body": { - "nativeSrc": "1329:581:43", - "nodeType": "YulBlock", - "src": "1329:581:43", - "statements": [ - { - "body": { - "nativeSrc": "1376:16:43", - "nodeType": "YulBlock", - "src": "1376:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "1385:1:43", - "nodeType": "YulLiteral", - "src": "1385:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "1388:1:43", - "nodeType": "YulLiteral", - "src": "1388:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "1378:6:43", - "nodeType": "YulIdentifier", - "src": "1378:6:43" - }, - "nativeSrc": "1378:12:43", - "nodeType": "YulFunctionCall", - "src": "1378:12:43" - }, - "nativeSrc": "1378:12:43", - "nodeType": "YulExpressionStatement", - "src": "1378:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nativeSrc": "1350:7:43", - "nodeType": "YulIdentifier", - "src": "1350:7:43" - }, - { - "name": "headStart", - "nativeSrc": "1359:9:43", - "nodeType": "YulIdentifier", - "src": "1359:9:43" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "1346:3:43", - "nodeType": "YulIdentifier", - "src": "1346:3:43" - }, - "nativeSrc": "1346:23:43", - "nodeType": "YulFunctionCall", - "src": "1346:23:43" - }, - { - "kind": "number", - "nativeSrc": "1371:3:43", - "nodeType": "YulLiteral", - "src": "1371:3:43", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "1342:3:43", - "nodeType": "YulIdentifier", - "src": "1342:3:43" - }, - "nativeSrc": "1342:33:43", - "nodeType": "YulFunctionCall", - "src": "1342:33:43" - }, - "nativeSrc": "1339:53:43", - "nodeType": "YulIf", - "src": "1339:53:43" - }, - { - "nativeSrc": "1401:30:43", - "nodeType": "YulVariableDeclaration", - "src": "1401:30:43", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "1421:9:43", - "nodeType": "YulIdentifier", - "src": "1421:9:43" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "1415:5:43", - "nodeType": "YulIdentifier", - "src": "1415:5:43" - }, - "nativeSrc": "1415:16:43", - "nodeType": "YulFunctionCall", - "src": "1415:16:43" - }, - "variables": [ - { - "name": "offset", - "nativeSrc": "1405:6:43", - "nodeType": "YulTypedName", - "src": "1405:6:43", - "type": "" - } - ] - }, - { - "nativeSrc": "1440:28:43", - "nodeType": "YulVariableDeclaration", - "src": "1440:28:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "1458:2:43", - "nodeType": "YulLiteral", - "src": "1458:2:43", - "type": "", - "value": "64" - }, - { - "kind": "number", - "nativeSrc": "1462:1:43", - "nodeType": "YulLiteral", - "src": "1462:1:43", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "1454:3:43", - "nodeType": "YulIdentifier", - "src": "1454:3:43" - }, - "nativeSrc": "1454:10:43", - "nodeType": "YulFunctionCall", - "src": "1454:10:43" - }, - { - "kind": "number", - "nativeSrc": "1466:1:43", - "nodeType": "YulLiteral", - "src": "1466:1:43", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "1450:3:43", - "nodeType": "YulIdentifier", - "src": "1450:3:43" - }, - "nativeSrc": "1450:18:43", - "nodeType": "YulFunctionCall", - "src": "1450:18:43" - }, - "variables": [ - { - "name": "_1", - "nativeSrc": "1444:2:43", - "nodeType": "YulTypedName", - "src": "1444:2:43", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "1495:16:43", - "nodeType": "YulBlock", - "src": "1495:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "1504:1:43", - "nodeType": "YulLiteral", - "src": "1504:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "1507:1:43", - "nodeType": "YulLiteral", - "src": "1507:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "1497:6:43", - "nodeType": "YulIdentifier", - "src": "1497:6:43" - }, - "nativeSrc": "1497:12:43", - "nodeType": "YulFunctionCall", - "src": "1497:12:43" - }, - "nativeSrc": "1497:12:43", - "nodeType": "YulExpressionStatement", - "src": "1497:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "offset", - "nativeSrc": "1483:6:43", - "nodeType": "YulIdentifier", - "src": "1483:6:43" - }, - { - "name": "_1", - "nativeSrc": "1491:2:43", - "nodeType": "YulIdentifier", - "src": "1491:2:43" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "1480:2:43", - "nodeType": "YulIdentifier", - "src": "1480:2:43" - }, - "nativeSrc": "1480:14:43", - "nodeType": "YulFunctionCall", - "src": "1480:14:43" - }, - "nativeSrc": "1477:34:43", - "nodeType": "YulIf", - "src": "1477:34:43" - }, - { - "nativeSrc": "1520:71:43", - "nodeType": "YulAssignment", - "src": "1520:71:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "1563:9:43", - "nodeType": "YulIdentifier", - "src": "1563:9:43" - }, - { - "name": "offset", - "nativeSrc": "1574:6:43", - "nodeType": "YulIdentifier", - "src": "1574:6:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "1559:3:43", - "nodeType": "YulIdentifier", - "src": "1559:3:43" - }, - "nativeSrc": "1559:22:43", - "nodeType": "YulFunctionCall", - "src": "1559:22:43" - }, - { - "name": "dataEnd", - "nativeSrc": "1583:7:43", - "nodeType": "YulIdentifier", - "src": "1583:7:43" - } - ], - "functionName": { - "name": "abi_decode_string_fromMemory", - "nativeSrc": "1530:28:43", - "nodeType": "YulIdentifier", - "src": "1530:28:43" - }, - "nativeSrc": "1530:61:43", - "nodeType": "YulFunctionCall", - "src": "1530:61:43" - }, - "variableNames": [ - { - "name": "value0", - "nativeSrc": "1520:6:43", - "nodeType": "YulIdentifier", - "src": "1520:6:43" - } - ] - }, - { - "nativeSrc": "1600:41:43", - "nodeType": "YulVariableDeclaration", - "src": "1600:41:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "1626:9:43", - "nodeType": "YulIdentifier", - "src": "1626:9:43" - }, - { - "kind": "number", - "nativeSrc": "1637:2:43", - "nodeType": "YulLiteral", - "src": "1637:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "1622:3:43", - "nodeType": "YulIdentifier", - "src": "1622:3:43" - }, - "nativeSrc": "1622:18:43", - "nodeType": "YulFunctionCall", - "src": "1622:18:43" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "1616:5:43", - "nodeType": "YulIdentifier", - "src": "1616:5:43" - }, - "nativeSrc": "1616:25:43", - "nodeType": "YulFunctionCall", - "src": "1616:25:43" - }, - "variables": [ - { - "name": "offset_1", - "nativeSrc": "1604:8:43", - "nodeType": "YulTypedName", - "src": "1604:8:43", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "1670:16:43", - "nodeType": "YulBlock", - "src": "1670:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "1679:1:43", - "nodeType": "YulLiteral", - "src": "1679:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "1682:1:43", - "nodeType": "YulLiteral", - "src": "1682:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "1672:6:43", - "nodeType": "YulIdentifier", - "src": "1672:6:43" - }, - "nativeSrc": "1672:12:43", - "nodeType": "YulFunctionCall", - "src": "1672:12:43" - }, - "nativeSrc": "1672:12:43", - "nodeType": "YulExpressionStatement", - "src": "1672:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "offset_1", - "nativeSrc": "1656:8:43", - "nodeType": "YulIdentifier", - "src": "1656:8:43" - }, - { - "name": "_1", - "nativeSrc": "1666:2:43", - "nodeType": "YulIdentifier", - "src": "1666:2:43" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "1653:2:43", - "nodeType": "YulIdentifier", - "src": "1653:2:43" - }, - "nativeSrc": "1653:16:43", - "nodeType": "YulFunctionCall", - "src": "1653:16:43" - }, - "nativeSrc": "1650:36:43", - "nodeType": "YulIf", - "src": "1650:36:43" - }, - { - "nativeSrc": "1695:73:43", - "nodeType": "YulAssignment", - "src": "1695:73:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "1738:9:43", - "nodeType": "YulIdentifier", - "src": "1738:9:43" - }, - { - "name": "offset_1", - "nativeSrc": "1749:8:43", - "nodeType": "YulIdentifier", - "src": "1749:8:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "1734:3:43", - "nodeType": "YulIdentifier", - "src": "1734:3:43" - }, - "nativeSrc": "1734:24:43", - "nodeType": "YulFunctionCall", - "src": "1734:24:43" - }, - { - "name": "dataEnd", - "nativeSrc": "1760:7:43", - "nodeType": "YulIdentifier", - "src": "1760:7:43" - } - ], - "functionName": { - "name": "abi_decode_string_fromMemory", - "nativeSrc": "1705:28:43", - "nodeType": "YulIdentifier", - "src": "1705:28:43" - }, - "nativeSrc": "1705:63:43", - "nodeType": "YulFunctionCall", - "src": "1705:63:43" - }, - "variableNames": [ - { - "name": "value1", - "nativeSrc": "1695:6:43", - "nodeType": "YulIdentifier", - "src": "1695:6:43" - } - ] - }, - { - "nativeSrc": "1777:59:43", - "nodeType": "YulAssignment", - "src": "1777:59:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "1821:9:43", - "nodeType": "YulIdentifier", - "src": "1821:9:43" - }, - { - "kind": "number", - "nativeSrc": "1832:2:43", - "nodeType": "YulLiteral", - "src": "1832:2:43", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "1817:3:43", - "nodeType": "YulIdentifier", - "src": "1817:3:43" - }, - "nativeSrc": "1817:18:43", - "nodeType": "YulFunctionCall", - "src": "1817:18:43" - } - ], - "functionName": { - "name": "abi_decode_address_fromMemory", - "nativeSrc": "1787:29:43", - "nodeType": "YulIdentifier", - "src": "1787:29:43" - }, - "nativeSrc": "1787:49:43", - "nodeType": "YulFunctionCall", - "src": "1787:49:43" - }, - "variableNames": [ - { - "name": "value2", - "nativeSrc": "1777:6:43", - "nodeType": "YulIdentifier", - "src": "1777:6:43" - } - ] - }, - { - "nativeSrc": "1845:59:43", - "nodeType": "YulAssignment", - "src": "1845:59:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "1889:9:43", - "nodeType": "YulIdentifier", - "src": "1889:9:43" - }, - { - "kind": "number", - "nativeSrc": "1900:2:43", - "nodeType": "YulLiteral", - "src": "1900:2:43", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "1885:3:43", - "nodeType": "YulIdentifier", - "src": "1885:3:43" - }, - "nativeSrc": "1885:18:43", - "nodeType": "YulFunctionCall", - "src": "1885:18:43" - } - ], - "functionName": { - "name": "abi_decode_address_fromMemory", - "nativeSrc": "1855:29:43", - "nodeType": "YulIdentifier", - "src": "1855:29:43" - }, - "nativeSrc": "1855:49:43", - "nodeType": "YulFunctionCall", - "src": "1855:49:43" - }, - "variableNames": [ - { - "name": "value3", - "nativeSrc": "1845:6:43", - "nodeType": "YulIdentifier", - "src": "1845:6:43" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_string_memory_ptrt_string_memory_ptrt_addresst_address_fromMemory", - "nativeSrc": "1177:733:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "1271:9:43", - "nodeType": "YulTypedName", - "src": "1271:9:43", - "type": "" - }, - { - "name": "dataEnd", - "nativeSrc": "1282:7:43", - "nodeType": "YulTypedName", - "src": "1282:7:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nativeSrc": "1294:6:43", - "nodeType": "YulTypedName", - "src": "1294:6:43", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "1302:6:43", - "nodeType": "YulTypedName", - "src": "1302:6:43", - "type": "" - }, - { - "name": "value2", - "nativeSrc": "1310:6:43", - "nodeType": "YulTypedName", - "src": "1310:6:43", - "type": "" - }, - { - "name": "value3", - "nativeSrc": "1318:6:43", - "nodeType": "YulTypedName", - "src": "1318:6:43", - "type": "" - } - ], - "src": "1177:733:43" - }, - { - "body": { - "nativeSrc": "2016:102:43", - "nodeType": "YulBlock", - "src": "2016:102:43", - "statements": [ - { - "nativeSrc": "2026:26:43", - "nodeType": "YulAssignment", - "src": "2026:26:43", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "2038:9:43", - "nodeType": "YulIdentifier", - "src": "2038:9:43" - }, - { - "kind": "number", - "nativeSrc": "2049:2:43", - "nodeType": "YulLiteral", - "src": "2049:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "2034:3:43", - "nodeType": "YulIdentifier", - "src": "2034:3:43" - }, - "nativeSrc": "2034:18:43", - "nodeType": "YulFunctionCall", - "src": "2034:18:43" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "2026:4:43", - "nodeType": "YulIdentifier", - "src": "2026:4:43" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "2068:9:43", - "nodeType": "YulIdentifier", - "src": "2068:9:43" - }, - { - "arguments": [ - { - "name": "value0", - "nativeSrc": "2083:6:43", - "nodeType": "YulIdentifier", - "src": "2083:6:43" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "2099:3:43", - "nodeType": "YulLiteral", - "src": "2099:3:43", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nativeSrc": "2104:1:43", - "nodeType": "YulLiteral", - "src": "2104:1:43", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "2095:3:43", - "nodeType": "YulIdentifier", - "src": "2095:3:43" - }, - "nativeSrc": "2095:11:43", - "nodeType": "YulFunctionCall", - "src": "2095:11:43" - }, - { - "kind": "number", - "nativeSrc": "2108:1:43", - "nodeType": "YulLiteral", - "src": "2108:1:43", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "2091:3:43", - "nodeType": "YulIdentifier", - "src": "2091:3:43" - }, - "nativeSrc": "2091:19:43", - "nodeType": "YulFunctionCall", - "src": "2091:19:43" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "2079:3:43", - "nodeType": "YulIdentifier", - "src": "2079:3:43" - }, - "nativeSrc": "2079:32:43", - "nodeType": "YulFunctionCall", - "src": "2079:32:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "2061:6:43", - "nodeType": "YulIdentifier", - "src": "2061:6:43" - }, - "nativeSrc": "2061:51:43", - "nodeType": "YulFunctionCall", - "src": "2061:51:43" - }, - "nativeSrc": "2061:51:43", - "nodeType": "YulExpressionStatement", - "src": "2061:51:43" - } - ] - }, - "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed", - "nativeSrc": "1915:203:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "1985:9:43", - "nodeType": "YulTypedName", - "src": "1985:9:43", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "1996:6:43", - "nodeType": "YulTypedName", - "src": "1996:6:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "2007:4:43", - "nodeType": "YulTypedName", - "src": "2007:4:43", - "type": "" - } - ], - "src": "1915:203:43" - }, - { - "body": { - "nativeSrc": "2155:95:43", - "nodeType": "YulBlock", - "src": "2155:95:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "2172:1:43", - "nodeType": "YulLiteral", - "src": "2172:1:43", - "type": "", - "value": "0" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "2179:3:43", - "nodeType": "YulLiteral", - "src": "2179:3:43", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nativeSrc": "2184:10:43", - "nodeType": "YulLiteral", - "src": "2184:10:43", - "type": "", - "value": "0x4e487b71" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "2175:3:43", - "nodeType": "YulIdentifier", - "src": "2175:3:43" - }, - "nativeSrc": "2175:20:43", - "nodeType": "YulFunctionCall", - "src": "2175:20:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "2165:6:43", - "nodeType": "YulIdentifier", - "src": "2165:6:43" - }, - "nativeSrc": "2165:31:43", - "nodeType": "YulFunctionCall", - "src": "2165:31:43" - }, - "nativeSrc": "2165:31:43", - "nodeType": "YulExpressionStatement", - "src": "2165:31:43" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "2212:1:43", - "nodeType": "YulLiteral", - "src": "2212:1:43", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nativeSrc": "2215:4:43", - "nodeType": "YulLiteral", - "src": "2215:4:43", - "type": "", - "value": "0x11" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "2205:6:43", - "nodeType": "YulIdentifier", - "src": "2205:6:43" - }, - "nativeSrc": "2205:15:43", - "nodeType": "YulFunctionCall", - "src": "2205:15:43" - }, - "nativeSrc": "2205:15:43", - "nodeType": "YulExpressionStatement", - "src": "2205:15:43" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "2236:1:43", - "nodeType": "YulLiteral", - "src": "2236:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "2239:4:43", - "nodeType": "YulLiteral", - "src": "2239:4:43", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "2229:6:43", - "nodeType": "YulIdentifier", - "src": "2229:6:43" - }, - "nativeSrc": "2229:15:43", - "nodeType": "YulFunctionCall", - "src": "2229:15:43" - }, - "nativeSrc": "2229:15:43", - "nodeType": "YulExpressionStatement", - "src": "2229:15:43" - } - ] - }, - "name": "panic_error_0x11", - "nativeSrc": "2123:127:43", - "nodeType": "YulFunctionDefinition", - "src": "2123:127:43" - }, - { - "body": { - "nativeSrc": "2302:104:43", - "nodeType": "YulBlock", - "src": "2302:104:43", - "statements": [ - { - "nativeSrc": "2312:39:43", - "nodeType": "YulAssignment", - "src": "2312:39:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "x", - "nativeSrc": "2328:1:43", - "nodeType": "YulIdentifier", - "src": "2328:1:43" - }, - { - "kind": "number", - "nativeSrc": "2331:4:43", - "nodeType": "YulLiteral", - "src": "2331:4:43", - "type": "", - "value": "0xff" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "2324:3:43", - "nodeType": "YulIdentifier", - "src": "2324:3:43" - }, - "nativeSrc": "2324:12:43", - "nodeType": "YulFunctionCall", - "src": "2324:12:43" - }, - { - "arguments": [ - { - "name": "y", - "nativeSrc": "2342:1:43", - "nodeType": "YulIdentifier", - "src": "2342:1:43" - }, - { - "kind": "number", - "nativeSrc": "2345:4:43", - "nodeType": "YulLiteral", - "src": "2345:4:43", - "type": "", - "value": "0xff" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "2338:3:43", - "nodeType": "YulIdentifier", - "src": "2338:3:43" - }, - "nativeSrc": "2338:12:43", - "nodeType": "YulFunctionCall", - "src": "2338:12:43" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "2320:3:43", - "nodeType": "YulIdentifier", - "src": "2320:3:43" - }, - "nativeSrc": "2320:31:43", - "nodeType": "YulFunctionCall", - "src": "2320:31:43" - }, - "variableNames": [ - { - "name": "diff", - "nativeSrc": "2312:4:43", - "nodeType": "YulIdentifier", - "src": "2312:4:43" - } - ] - }, - { - "body": { - "nativeSrc": "2378:22:43", - "nodeType": "YulBlock", - "src": "2378:22:43", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x11", - "nativeSrc": "2380:16:43", - "nodeType": "YulIdentifier", - "src": "2380:16:43" - }, - "nativeSrc": "2380:18:43", - "nodeType": "YulFunctionCall", - "src": "2380:18:43" - }, - "nativeSrc": "2380:18:43", - "nodeType": "YulExpressionStatement", - "src": "2380:18:43" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "diff", - "nativeSrc": "2366:4:43", - "nodeType": "YulIdentifier", - "src": "2366:4:43" - }, - { - "kind": "number", - "nativeSrc": "2372:4:43", - "nodeType": "YulLiteral", - "src": "2372:4:43", - "type": "", - "value": "0xff" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "2363:2:43", - "nodeType": "YulIdentifier", - "src": "2363:2:43" - }, - "nativeSrc": "2363:14:43", - "nodeType": "YulFunctionCall", - "src": "2363:14:43" - }, - "nativeSrc": "2360:40:43", - "nodeType": "YulIf", - "src": "2360:40:43" - } - ] - }, - "name": "checked_sub_t_uint8", - "nativeSrc": "2255:151:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "x", - "nativeSrc": "2284:1:43", - "nodeType": "YulTypedName", - "src": "2284:1:43", - "type": "" - }, - { - "name": "y", - "nativeSrc": "2287:1:43", - "nodeType": "YulTypedName", - "src": "2287:1:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "diff", - "nativeSrc": "2293:4:43", - "nodeType": "YulTypedName", - "src": "2293:4:43", - "type": "" - } - ], - "src": "2255:151:43" - }, - { - "body": { - "nativeSrc": "2475:352:43", - "nodeType": "YulBlock", - "src": "2475:352:43", - "statements": [ - { - "nativeSrc": "2485:16:43", - "nodeType": "YulVariableDeclaration", - "src": "2485:16:43", - "value": { - "kind": "number", - "nativeSrc": "2500:1:43", - "nodeType": "YulLiteral", - "src": "2500:1:43", - "type": "", - "value": "1" - }, - "variables": [ - { - "name": "power_1", - "nativeSrc": "2489:7:43", - "nodeType": "YulTypedName", - "src": "2489:7:43", - "type": "" - } - ] - }, - { - "nativeSrc": "2510:10:43", - "nodeType": "YulAssignment", - "src": "2510:10:43", - "value": { - "kind": "number", - "nativeSrc": "2519:1:43", - "nodeType": "YulLiteral", - "src": "2519:1:43", - "type": "", - "value": "1" - }, - "variableNames": [ - { - "name": "power", - "nativeSrc": "2510:5:43", - "nodeType": "YulIdentifier", - "src": "2510:5:43" - } - ] - }, - { - "nativeSrc": "2529:13:43", - "nodeType": "YulAssignment", - "src": "2529:13:43", - "value": { - "name": "_base", - "nativeSrc": "2537:5:43", - "nodeType": "YulIdentifier", - "src": "2537:5:43" - }, - "variableNames": [ - { - "name": "base", - "nativeSrc": "2529:4:43", - "nodeType": "YulIdentifier", - "src": "2529:4:43" - } - ] - }, - { - "body": { - "nativeSrc": "2593:228:43", - "nodeType": "YulBlock", - "src": "2593:228:43", - "statements": [ - { - "body": { - "nativeSrc": "2638:22:43", - "nodeType": "YulBlock", - "src": "2638:22:43", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x11", - "nativeSrc": "2640:16:43", - "nodeType": "YulIdentifier", - "src": "2640:16:43" - }, - "nativeSrc": "2640:18:43", - "nodeType": "YulFunctionCall", - "src": "2640:18:43" - }, - "nativeSrc": "2640:18:43", - "nodeType": "YulExpressionStatement", - "src": "2640:18:43" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "base", - "nativeSrc": "2613:4:43", - "nodeType": "YulIdentifier", - "src": "2613:4:43" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "2627:1:43", - "nodeType": "YulLiteral", - "src": "2627:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "not", - "nativeSrc": "2623:3:43", - "nodeType": "YulIdentifier", - "src": "2623:3:43" - }, - "nativeSrc": "2623:6:43", - "nodeType": "YulFunctionCall", - "src": "2623:6:43" - }, - { - "name": "base", - "nativeSrc": "2631:4:43", - "nodeType": "YulIdentifier", - "src": "2631:4:43" - } - ], - "functionName": { - "name": "div", - "nativeSrc": "2619:3:43", - "nodeType": "YulIdentifier", - "src": "2619:3:43" - }, - "nativeSrc": "2619:17:43", - "nodeType": "YulFunctionCall", - "src": "2619:17:43" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "2610:2:43", - "nodeType": "YulIdentifier", - "src": "2610:2:43" - }, - "nativeSrc": "2610:27:43", - "nodeType": "YulFunctionCall", - "src": "2610:27:43" - }, - "nativeSrc": "2607:53:43", - "nodeType": "YulIf", - "src": "2607:53:43" - }, - { - "body": { - "nativeSrc": "2699:29:43", - "nodeType": "YulBlock", - "src": "2699:29:43", - "statements": [ - { - "nativeSrc": "2701:25:43", - "nodeType": "YulAssignment", - "src": "2701:25:43", - "value": { - "arguments": [ - { - "name": "power", - "nativeSrc": "2714:5:43", - "nodeType": "YulIdentifier", - "src": "2714:5:43" - }, - { - "name": "base", - "nativeSrc": "2721:4:43", - "nodeType": "YulIdentifier", - "src": "2721:4:43" - } - ], - "functionName": { - "name": "mul", - "nativeSrc": "2710:3:43", - "nodeType": "YulIdentifier", - "src": "2710:3:43" - }, - "nativeSrc": "2710:16:43", - "nodeType": "YulFunctionCall", - "src": "2710:16:43" - }, - "variableNames": [ - { - "name": "power", - "nativeSrc": "2701:5:43", - "nodeType": "YulIdentifier", - "src": "2701:5:43" - } - ] - } - ] - }, - "condition": { - "arguments": [ - { - "name": "exponent", - "nativeSrc": "2680:8:43", - "nodeType": "YulIdentifier", - "src": "2680:8:43" - }, - { - "name": "power_1", - "nativeSrc": "2690:7:43", - "nodeType": "YulIdentifier", - "src": "2690:7:43" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "2676:3:43", - "nodeType": "YulIdentifier", - "src": "2676:3:43" - }, - "nativeSrc": "2676:22:43", - "nodeType": "YulFunctionCall", - "src": "2676:22:43" - }, - "nativeSrc": "2673:55:43", - "nodeType": "YulIf", - "src": "2673:55:43" - }, - { - "nativeSrc": "2741:23:43", - "nodeType": "YulAssignment", - "src": "2741:23:43", - "value": { - "arguments": [ - { - "name": "base", - "nativeSrc": "2753:4:43", - "nodeType": "YulIdentifier", - "src": "2753:4:43" - }, - { - "name": "base", - "nativeSrc": "2759:4:43", - "nodeType": "YulIdentifier", - "src": "2759:4:43" - } - ], - "functionName": { - "name": "mul", - "nativeSrc": "2749:3:43", - "nodeType": "YulIdentifier", - "src": "2749:3:43" - }, - "nativeSrc": "2749:15:43", - "nodeType": "YulFunctionCall", - "src": "2749:15:43" - }, - "variableNames": [ - { - "name": "base", - "nativeSrc": "2741:4:43", - "nodeType": "YulIdentifier", - "src": "2741:4:43" - } - ] - }, - { - "nativeSrc": "2777:34:43", - "nodeType": "YulAssignment", - "src": "2777:34:43", - "value": { - "arguments": [ - { - "name": "power_1", - "nativeSrc": "2793:7:43", - "nodeType": "YulIdentifier", - "src": "2793:7:43" - }, - { - "name": "exponent", - "nativeSrc": "2802:8:43", - "nodeType": "YulIdentifier", - "src": "2802:8:43" - } - ], - "functionName": { - "name": "shr", - "nativeSrc": "2789:3:43", - "nodeType": "YulIdentifier", - "src": "2789:3:43" - }, - "nativeSrc": "2789:22:43", - "nodeType": "YulFunctionCall", - "src": "2789:22:43" - }, - "variableNames": [ - { - "name": "exponent", - "nativeSrc": "2777:8:43", - "nodeType": "YulIdentifier", - "src": "2777:8:43" - } - ] - } - ] - }, - "condition": { - "arguments": [ - { - "name": "exponent", - "nativeSrc": "2562:8:43", - "nodeType": "YulIdentifier", - "src": "2562:8:43" - }, - { - "name": "power_1", - "nativeSrc": "2572:7:43", - "nodeType": "YulIdentifier", - "src": "2572:7:43" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "2559:2:43", - "nodeType": "YulIdentifier", - "src": "2559:2:43" - }, - "nativeSrc": "2559:21:43", - "nodeType": "YulFunctionCall", - "src": "2559:21:43" - }, - "nativeSrc": "2551:270:43", - "nodeType": "YulForLoop", - "post": { - "nativeSrc": "2581:3:43", - "nodeType": "YulBlock", - "src": "2581:3:43", - "statements": [] - }, - "pre": { - "nativeSrc": "2555:3:43", - "nodeType": "YulBlock", - "src": "2555:3:43", - "statements": [] - }, - "src": "2551:270:43" - } - ] - }, - "name": "checked_exp_helper", - "nativeSrc": "2411:416:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "_base", - "nativeSrc": "2439:5:43", - "nodeType": "YulTypedName", - "src": "2439:5:43", - "type": "" - }, - { - "name": "exponent", - "nativeSrc": "2446:8:43", - "nodeType": "YulTypedName", - "src": "2446:8:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "power", - "nativeSrc": "2459:5:43", - "nodeType": "YulTypedName", - "src": "2459:5:43", - "type": "" - }, - { - "name": "base", - "nativeSrc": "2466:4:43", - "nodeType": "YulTypedName", - "src": "2466:4:43", - "type": "" - } - ], - "src": "2411:416:43" - }, - { - "body": { - "nativeSrc": "2891:747:43", - "nodeType": "YulBlock", - "src": "2891:747:43", - "statements": [ - { - "body": { - "nativeSrc": "2929:52:43", - "nodeType": "YulBlock", - "src": "2929:52:43", - "statements": [ - { - "nativeSrc": "2943:10:43", - "nodeType": "YulAssignment", - "src": "2943:10:43", - "value": { - "kind": "number", - "nativeSrc": "2952:1:43", - "nodeType": "YulLiteral", - "src": "2952:1:43", - "type": "", - "value": "1" - }, - "variableNames": [ - { - "name": "power", - "nativeSrc": "2943:5:43", - "nodeType": "YulIdentifier", - "src": "2943:5:43" - } - ] - }, - { - "nativeSrc": "2966:5:43", - "nodeType": "YulLeave", - "src": "2966:5:43" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "exponent", - "nativeSrc": "2911:8:43", - "nodeType": "YulIdentifier", - "src": "2911:8:43" - } - ], - "functionName": { - "name": "iszero", - "nativeSrc": "2904:6:43", - "nodeType": "YulIdentifier", - "src": "2904:6:43" - }, - "nativeSrc": "2904:16:43", - "nodeType": "YulFunctionCall", - "src": "2904:16:43" - }, - "nativeSrc": "2901:80:43", - "nodeType": "YulIf", - "src": "2901:80:43" - }, - { - "body": { - "nativeSrc": "3014:52:43", - "nodeType": "YulBlock", - "src": "3014:52:43", - "statements": [ - { - "nativeSrc": "3028:10:43", - "nodeType": "YulAssignment", - "src": "3028:10:43", - "value": { - "kind": "number", - "nativeSrc": "3037:1:43", - "nodeType": "YulLiteral", - "src": "3037:1:43", - "type": "", - "value": "0" - }, - "variableNames": [ - { - "name": "power", - "nativeSrc": "3028:5:43", - "nodeType": "YulIdentifier", - "src": "3028:5:43" - } - ] - }, - { - "nativeSrc": "3051:5:43", - "nodeType": "YulLeave", - "src": "3051:5:43" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "base", - "nativeSrc": "3000:4:43", - "nodeType": "YulIdentifier", - "src": "3000:4:43" - } - ], - "functionName": { - "name": "iszero", - "nativeSrc": "2993:6:43", - "nodeType": "YulIdentifier", - "src": "2993:6:43" - }, - "nativeSrc": "2993:12:43", - "nodeType": "YulFunctionCall", - "src": "2993:12:43" - }, - "nativeSrc": "2990:76:43", - "nodeType": "YulIf", - "src": "2990:76:43" - }, - { - "cases": [ - { - "body": { - "nativeSrc": "3102:52:43", - "nodeType": "YulBlock", - "src": "3102:52:43", - "statements": [ - { - "nativeSrc": "3116:10:43", - "nodeType": "YulAssignment", - "src": "3116:10:43", - "value": { - "kind": "number", - "nativeSrc": "3125:1:43", - "nodeType": "YulLiteral", - "src": "3125:1:43", - "type": "", - "value": "1" - }, - "variableNames": [ - { - "name": "power", - "nativeSrc": "3116:5:43", - "nodeType": "YulIdentifier", - "src": "3116:5:43" - } - ] - }, - { - "nativeSrc": "3139:5:43", - "nodeType": "YulLeave", - "src": "3139:5:43" - } - ] - }, - "nativeSrc": "3095:59:43", - "nodeType": "YulCase", - "src": "3095:59:43", - "value": { - "kind": "number", - "nativeSrc": "3100:1:43", - "nodeType": "YulLiteral", - "src": "3100:1:43", - "type": "", - "value": "1" - } - }, - { - "body": { - "nativeSrc": "3170:123:43", - "nodeType": "YulBlock", - "src": "3170:123:43", - "statements": [ - { - "body": { - "nativeSrc": "3205:22:43", - "nodeType": "YulBlock", - "src": "3205:22:43", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x11", - "nativeSrc": "3207:16:43", - "nodeType": "YulIdentifier", - "src": "3207:16:43" - }, - "nativeSrc": "3207:18:43", - "nodeType": "YulFunctionCall", - "src": "3207:18:43" - }, - "nativeSrc": "3207:18:43", - "nodeType": "YulExpressionStatement", - "src": "3207:18:43" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "exponent", - "nativeSrc": "3190:8:43", - "nodeType": "YulIdentifier", - "src": "3190:8:43" - }, - { - "kind": "number", - "nativeSrc": "3200:3:43", - "nodeType": "YulLiteral", - "src": "3200:3:43", - "type": "", - "value": "255" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "3187:2:43", - "nodeType": "YulIdentifier", - "src": "3187:2:43" - }, - "nativeSrc": "3187:17:43", - "nodeType": "YulFunctionCall", - "src": "3187:17:43" - }, - "nativeSrc": "3184:43:43", - "nodeType": "YulIf", - "src": "3184:43:43" - }, - { - "nativeSrc": "3240:25:43", - "nodeType": "YulAssignment", - "src": "3240:25:43", - "value": { - "arguments": [ - { - "name": "exponent", - "nativeSrc": "3253:8:43", - "nodeType": "YulIdentifier", - "src": "3253:8:43" - }, - { - "kind": "number", - "nativeSrc": "3263:1:43", - "nodeType": "YulLiteral", - "src": "3263:1:43", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "3249:3:43", - "nodeType": "YulIdentifier", - "src": "3249:3:43" - }, - "nativeSrc": "3249:16:43", - "nodeType": "YulFunctionCall", - "src": "3249:16:43" - }, - "variableNames": [ - { - "name": "power", - "nativeSrc": "3240:5:43", - "nodeType": "YulIdentifier", - "src": "3240:5:43" - } - ] - }, - { - "nativeSrc": "3278:5:43", - "nodeType": "YulLeave", - "src": "3278:5:43" - } - ] - }, - "nativeSrc": "3163:130:43", - "nodeType": "YulCase", - "src": "3163:130:43", - "value": { - "kind": "number", - "nativeSrc": "3168:1:43", - "nodeType": "YulLiteral", - "src": "3168:1:43", - "type": "", - "value": "2" - } - } - ], - "expression": { - "name": "base", - "nativeSrc": "3082:4:43", - "nodeType": "YulIdentifier", - "src": "3082:4:43" - }, - "nativeSrc": "3075:218:43", - "nodeType": "YulSwitch", - "src": "3075:218:43" - }, - { - "body": { - "nativeSrc": "3391:70:43", - "nodeType": "YulBlock", - "src": "3391:70:43", - "statements": [ - { - "nativeSrc": "3405:28:43", - "nodeType": "YulAssignment", - "src": "3405:28:43", - "value": { - "arguments": [ - { - "name": "base", - "nativeSrc": "3418:4:43", - "nodeType": "YulIdentifier", - "src": "3418:4:43" - }, - { - "name": "exponent", - "nativeSrc": "3424:8:43", - "nodeType": "YulIdentifier", - "src": "3424:8:43" - } - ], - "functionName": { - "name": "exp", - "nativeSrc": "3414:3:43", - "nodeType": "YulIdentifier", - "src": "3414:3:43" - }, - "nativeSrc": "3414:19:43", - "nodeType": "YulFunctionCall", - "src": "3414:19:43" - }, - "variableNames": [ - { - "name": "power", - "nativeSrc": "3405:5:43", - "nodeType": "YulIdentifier", - "src": "3405:5:43" - } - ] - }, - { - "nativeSrc": "3446:5:43", - "nodeType": "YulLeave", - "src": "3446:5:43" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "base", - "nativeSrc": "3315:4:43", - "nodeType": "YulIdentifier", - "src": "3315:4:43" - }, - { - "kind": "number", - "nativeSrc": "3321:2:43", - "nodeType": "YulLiteral", - "src": "3321:2:43", - "type": "", - "value": "11" - } - ], - "functionName": { - "name": "lt", - "nativeSrc": "3312:2:43", - "nodeType": "YulIdentifier", - "src": "3312:2:43" - }, - "nativeSrc": "3312:12:43", - "nodeType": "YulFunctionCall", - "src": "3312:12:43" - }, - { - "arguments": [ - { - "name": "exponent", - "nativeSrc": "3329:8:43", - "nodeType": "YulIdentifier", - "src": "3329:8:43" - }, - { - "kind": "number", - "nativeSrc": "3339:2:43", - "nodeType": "YulLiteral", - "src": "3339:2:43", - "type": "", - "value": "78" - } - ], - "functionName": { - "name": "lt", - "nativeSrc": "3326:2:43", - "nodeType": "YulIdentifier", - "src": "3326:2:43" - }, - "nativeSrc": "3326:16:43", - "nodeType": "YulFunctionCall", - "src": "3326:16:43" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "3308:3:43", - "nodeType": "YulIdentifier", - "src": "3308:3:43" - }, - "nativeSrc": "3308:35:43", - "nodeType": "YulFunctionCall", - "src": "3308:35:43" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "base", - "nativeSrc": "3352:4:43", - "nodeType": "YulIdentifier", - "src": "3352:4:43" - }, - { - "kind": "number", - "nativeSrc": "3358:3:43", - "nodeType": "YulLiteral", - "src": "3358:3:43", - "type": "", - "value": "307" - } - ], - "functionName": { - "name": "lt", - "nativeSrc": "3349:2:43", - "nodeType": "YulIdentifier", - "src": "3349:2:43" - }, - "nativeSrc": "3349:13:43", - "nodeType": "YulFunctionCall", - "src": "3349:13:43" - }, - { - "arguments": [ - { - "name": "exponent", - "nativeSrc": "3367:8:43", - "nodeType": "YulIdentifier", - "src": "3367:8:43" - }, - { - "kind": "number", - "nativeSrc": "3377:2:43", - "nodeType": "YulLiteral", - "src": "3377:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "lt", - "nativeSrc": "3364:2:43", - "nodeType": "YulIdentifier", - "src": "3364:2:43" - }, - "nativeSrc": "3364:16:43", - "nodeType": "YulFunctionCall", - "src": "3364:16:43" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "3345:3:43", - "nodeType": "YulIdentifier", - "src": "3345:3:43" - }, - "nativeSrc": "3345:36:43", - "nodeType": "YulFunctionCall", - "src": "3345:36:43" - } - ], - "functionName": { - "name": "or", - "nativeSrc": "3305:2:43", - "nodeType": "YulIdentifier", - "src": "3305:2:43" - }, - "nativeSrc": "3305:77:43", - "nodeType": "YulFunctionCall", - "src": "3305:77:43" - }, - "nativeSrc": "3302:159:43", - "nodeType": "YulIf", - "src": "3302:159:43" - }, - { - "nativeSrc": "3470:57:43", - "nodeType": "YulVariableDeclaration", - "src": "3470:57:43", - "value": { - "arguments": [ - { - "name": "base", - "nativeSrc": "3512:4:43", - "nodeType": "YulIdentifier", - "src": "3512:4:43" - }, - { - "name": "exponent", - "nativeSrc": "3518:8:43", - "nodeType": "YulIdentifier", - "src": "3518:8:43" - } - ], - "functionName": { - "name": "checked_exp_helper", - "nativeSrc": "3493:18:43", - "nodeType": "YulIdentifier", - "src": "3493:18:43" - }, - "nativeSrc": "3493:34:43", - "nodeType": "YulFunctionCall", - "src": "3493:34:43" - }, - "variables": [ - { - "name": "power_1", - "nativeSrc": "3474:7:43", - "nodeType": "YulTypedName", - "src": "3474:7:43", - "type": "" - }, - { - "name": "base_1", - "nativeSrc": "3483:6:43", - "nodeType": "YulTypedName", - "src": "3483:6:43", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "3572:22:43", - "nodeType": "YulBlock", - "src": "3572:22:43", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x11", - "nativeSrc": "3574:16:43", - "nodeType": "YulIdentifier", - "src": "3574:16:43" - }, - "nativeSrc": "3574:18:43", - "nodeType": "YulFunctionCall", - "src": "3574:18:43" - }, - "nativeSrc": "3574:18:43", - "nodeType": "YulExpressionStatement", - "src": "3574:18:43" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "power_1", - "nativeSrc": "3542:7:43", - "nodeType": "YulIdentifier", - "src": "3542:7:43" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "3559:1:43", - "nodeType": "YulLiteral", - "src": "3559:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "not", - "nativeSrc": "3555:3:43", - "nodeType": "YulIdentifier", - "src": "3555:3:43" - }, - "nativeSrc": "3555:6:43", - "nodeType": "YulFunctionCall", - "src": "3555:6:43" - }, - { - "name": "base_1", - "nativeSrc": "3563:6:43", - "nodeType": "YulIdentifier", - "src": "3563:6:43" - } - ], - "functionName": { - "name": "div", - "nativeSrc": "3551:3:43", - "nodeType": "YulIdentifier", - "src": "3551:3:43" - }, - "nativeSrc": "3551:19:43", - "nodeType": "YulFunctionCall", - "src": "3551:19:43" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "3539:2:43", - "nodeType": "YulIdentifier", - "src": "3539:2:43" - }, - "nativeSrc": "3539:32:43", - "nodeType": "YulFunctionCall", - "src": "3539:32:43" - }, - "nativeSrc": "3536:58:43", - "nodeType": "YulIf", - "src": "3536:58:43" - }, - { - "nativeSrc": "3603:29:43", - "nodeType": "YulAssignment", - "src": "3603:29:43", - "value": { - "arguments": [ - { - "name": "power_1", - "nativeSrc": "3616:7:43", - "nodeType": "YulIdentifier", - "src": "3616:7:43" - }, - { - "name": "base_1", - "nativeSrc": "3625:6:43", - "nodeType": "YulIdentifier", - "src": "3625:6:43" - } - ], - "functionName": { - "name": "mul", - "nativeSrc": "3612:3:43", - "nodeType": "YulIdentifier", - "src": "3612:3:43" - }, - "nativeSrc": "3612:20:43", - "nodeType": "YulFunctionCall", - "src": "3612:20:43" - }, - "variableNames": [ - { - "name": "power", - "nativeSrc": "3603:5:43", - "nodeType": "YulIdentifier", - "src": "3603:5:43" - } - ] - } - ] - }, - "name": "checked_exp_unsigned", - "nativeSrc": "2832:806:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "base", - "nativeSrc": "2862:4:43", - "nodeType": "YulTypedName", - "src": "2862:4:43", - "type": "" - }, - { - "name": "exponent", - "nativeSrc": "2868:8:43", - "nodeType": "YulTypedName", - "src": "2868:8:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "power", - "nativeSrc": "2881:5:43", - "nodeType": "YulTypedName", - "src": "2881:5:43", - "type": "" - } - ], - "src": "2832:806:43" - }, - { - "body": { - "nativeSrc": "3711:72:43", - "nodeType": "YulBlock", - "src": "3711:72:43", - "statements": [ - { - "nativeSrc": "3721:56:43", - "nodeType": "YulAssignment", - "src": "3721:56:43", - "value": { - "arguments": [ - { - "name": "base", - "nativeSrc": "3751:4:43", - "nodeType": "YulIdentifier", - "src": "3751:4:43" - }, - { - "arguments": [ - { - "name": "exponent", - "nativeSrc": "3761:8:43", - "nodeType": "YulIdentifier", - "src": "3761:8:43" - }, - { - "kind": "number", - "nativeSrc": "3771:4:43", - "nodeType": "YulLiteral", - "src": "3771:4:43", - "type": "", - "value": "0xff" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "3757:3:43", - "nodeType": "YulIdentifier", - "src": "3757:3:43" - }, - "nativeSrc": "3757:19:43", - "nodeType": "YulFunctionCall", - "src": "3757:19:43" - } - ], - "functionName": { - "name": "checked_exp_unsigned", - "nativeSrc": "3730:20:43", - "nodeType": "YulIdentifier", - "src": "3730:20:43" - }, - "nativeSrc": "3730:47:43", - "nodeType": "YulFunctionCall", - "src": "3730:47:43" - }, - "variableNames": [ - { - "name": "power", - "nativeSrc": "3721:5:43", - "nodeType": "YulIdentifier", - "src": "3721:5:43" - } - ] - } - ] - }, - "name": "checked_exp_t_uint256_t_uint8", - "nativeSrc": "3643:140:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "base", - "nativeSrc": "3682:4:43", - "nodeType": "YulTypedName", - "src": "3682:4:43", - "type": "" - }, - { - "name": "exponent", - "nativeSrc": "3688:8:43", - "nodeType": "YulTypedName", - "src": "3688:8:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "power", - "nativeSrc": "3701:5:43", - "nodeType": "YulTypedName", - "src": "3701:5:43", - "type": "" - } - ], - "src": "3643:140:43" - }, - { - "body": { - "nativeSrc": "3843:325:43", - "nodeType": "YulBlock", - "src": "3843:325:43", - "statements": [ - { - "nativeSrc": "3853:22:43", - "nodeType": "YulAssignment", - "src": "3853:22:43", - "value": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "3867:1:43", - "nodeType": "YulLiteral", - "src": "3867:1:43", - "type": "", - "value": "1" - }, - { - "name": "data", - "nativeSrc": "3870:4:43", - "nodeType": "YulIdentifier", - "src": "3870:4:43" - } - ], - "functionName": { - "name": "shr", - "nativeSrc": "3863:3:43", - "nodeType": "YulIdentifier", - "src": "3863:3:43" - }, - "nativeSrc": "3863:12:43", - "nodeType": "YulFunctionCall", - "src": "3863:12:43" - }, - "variableNames": [ - { - "name": "length", - "nativeSrc": "3853:6:43", - "nodeType": "YulIdentifier", - "src": "3853:6:43" - } - ] - }, - { - "nativeSrc": "3884:38:43", - "nodeType": "YulVariableDeclaration", - "src": "3884:38:43", - "value": { - "arguments": [ - { - "name": "data", - "nativeSrc": "3914:4:43", - "nodeType": "YulIdentifier", - "src": "3914:4:43" - }, - { - "kind": "number", - "nativeSrc": "3920:1:43", - "nodeType": "YulLiteral", - "src": "3920:1:43", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "3910:3:43", - "nodeType": "YulIdentifier", - "src": "3910:3:43" - }, - "nativeSrc": "3910:12:43", - "nodeType": "YulFunctionCall", - "src": "3910:12:43" - }, - "variables": [ - { - "name": "outOfPlaceEncoding", - "nativeSrc": "3888:18:43", - "nodeType": "YulTypedName", - "src": "3888:18:43", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "3961:31:43", - "nodeType": "YulBlock", - "src": "3961:31:43", - "statements": [ - { - "nativeSrc": "3963:27:43", - "nodeType": "YulAssignment", - "src": "3963:27:43", - "value": { - "arguments": [ - { - "name": "length", - "nativeSrc": "3977:6:43", - "nodeType": "YulIdentifier", - "src": "3977:6:43" - }, - { - "kind": "number", - "nativeSrc": "3985:4:43", - "nodeType": "YulLiteral", - "src": "3985:4:43", - "type": "", - "value": "0x7f" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "3973:3:43", - "nodeType": "YulIdentifier", - "src": "3973:3:43" - }, - "nativeSrc": "3973:17:43", - "nodeType": "YulFunctionCall", - "src": "3973:17:43" - }, - "variableNames": [ - { - "name": "length", - "nativeSrc": "3963:6:43", - "nodeType": "YulIdentifier", - "src": "3963:6:43" - } - ] - } - ] - }, - "condition": { - "arguments": [ - { - "name": "outOfPlaceEncoding", - "nativeSrc": "3941:18:43", - "nodeType": "YulIdentifier", - "src": "3941:18:43" - } - ], - "functionName": { - "name": "iszero", - "nativeSrc": "3934:6:43", - "nodeType": "YulIdentifier", - "src": "3934:6:43" - }, - "nativeSrc": "3934:26:43", - "nodeType": "YulFunctionCall", - "src": "3934:26:43" - }, - "nativeSrc": "3931:61:43", - "nodeType": "YulIf", - "src": "3931:61:43" - }, - { - "body": { - "nativeSrc": "4051:111:43", - "nodeType": "YulBlock", - "src": "4051:111:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "4072:1:43", - "nodeType": "YulLiteral", - "src": "4072:1:43", - "type": "", - "value": "0" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "4079:3:43", - "nodeType": "YulLiteral", - "src": "4079:3:43", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nativeSrc": "4084:10:43", - "nodeType": "YulLiteral", - "src": "4084:10:43", - "type": "", - "value": "0x4e487b71" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "4075:3:43", - "nodeType": "YulIdentifier", - "src": "4075:3:43" - }, - "nativeSrc": "4075:20:43", - "nodeType": "YulFunctionCall", - "src": "4075:20:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "4065:6:43", - "nodeType": "YulIdentifier", - "src": "4065:6:43" - }, - "nativeSrc": "4065:31:43", - "nodeType": "YulFunctionCall", - "src": "4065:31:43" - }, - "nativeSrc": "4065:31:43", - "nodeType": "YulExpressionStatement", - "src": "4065:31:43" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "4116:1:43", - "nodeType": "YulLiteral", - "src": "4116:1:43", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nativeSrc": "4119:4:43", - "nodeType": "YulLiteral", - "src": "4119:4:43", - "type": "", - "value": "0x22" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "4109:6:43", - "nodeType": "YulIdentifier", - "src": "4109:6:43" - }, - "nativeSrc": "4109:15:43", - "nodeType": "YulFunctionCall", - "src": "4109:15:43" - }, - "nativeSrc": "4109:15:43", - "nodeType": "YulExpressionStatement", - "src": "4109:15:43" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "4144:1:43", - "nodeType": "YulLiteral", - "src": "4144:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "4147:4:43", - "nodeType": "YulLiteral", - "src": "4147:4:43", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "4137:6:43", - "nodeType": "YulIdentifier", - "src": "4137:6:43" - }, - "nativeSrc": "4137:15:43", - "nodeType": "YulFunctionCall", - "src": "4137:15:43" - }, - "nativeSrc": "4137:15:43", - "nodeType": "YulExpressionStatement", - "src": "4137:15:43" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "outOfPlaceEncoding", - "nativeSrc": "4007:18:43", - "nodeType": "YulIdentifier", - "src": "4007:18:43" - }, - { - "arguments": [ - { - "name": "length", - "nativeSrc": "4030:6:43", - "nodeType": "YulIdentifier", - "src": "4030:6:43" - }, - { - "kind": "number", - "nativeSrc": "4038:2:43", - "nodeType": "YulLiteral", - "src": "4038:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "lt", - "nativeSrc": "4027:2:43", - "nodeType": "YulIdentifier", - "src": "4027:2:43" - }, - "nativeSrc": "4027:14:43", - "nodeType": "YulFunctionCall", - "src": "4027:14:43" - } - ], - "functionName": { - "name": "eq", - "nativeSrc": "4004:2:43", - "nodeType": "YulIdentifier", - "src": "4004:2:43" - }, - "nativeSrc": "4004:38:43", - "nodeType": "YulFunctionCall", - "src": "4004:38:43" - }, - "nativeSrc": "4001:161:43", - "nodeType": "YulIf", - "src": "4001:161:43" - } - ] - }, - "name": "extract_byte_array_length", - "nativeSrc": "3788:380:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "data", - "nativeSrc": "3823:4:43", - "nodeType": "YulTypedName", - "src": "3823:4:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "length", - "nativeSrc": "3832:6:43", - "nodeType": "YulTypedName", - "src": "3832:6:43", - "type": "" - } - ], - "src": "3788:380:43" - }, - { - "body": { - "nativeSrc": "4229:65:43", - "nodeType": "YulBlock", - "src": "4229:65:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "4246:1:43", - "nodeType": "YulLiteral", - "src": "4246:1:43", - "type": "", - "value": "0" - }, - { - "name": "ptr", - "nativeSrc": "4249:3:43", - "nodeType": "YulIdentifier", - "src": "4249:3:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "4239:6:43", - "nodeType": "YulIdentifier", - "src": "4239:6:43" - }, - "nativeSrc": "4239:14:43", - "nodeType": "YulFunctionCall", - "src": "4239:14:43" - }, - "nativeSrc": "4239:14:43", - "nodeType": "YulExpressionStatement", - "src": "4239:14:43" - }, - { - "nativeSrc": "4262:26:43", - "nodeType": "YulAssignment", - "src": "4262:26:43", - "value": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "4280:1:43", - "nodeType": "YulLiteral", - "src": "4280:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "4283:4:43", - "nodeType": "YulLiteral", - "src": "4283:4:43", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "keccak256", - "nativeSrc": "4270:9:43", - "nodeType": "YulIdentifier", - "src": "4270:9:43" - }, - "nativeSrc": "4270:18:43", - "nodeType": "YulFunctionCall", - "src": "4270:18:43" - }, - "variableNames": [ - { - "name": "data", - "nativeSrc": "4262:4:43", - "nodeType": "YulIdentifier", - "src": "4262:4:43" - } - ] - } - ] - }, - "name": "array_dataslot_string_storage", - "nativeSrc": "4173:121:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "ptr", - "nativeSrc": "4212:3:43", - "nodeType": "YulTypedName", - "src": "4212:3:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "data", - "nativeSrc": "4220:4:43", - "nodeType": "YulTypedName", - "src": "4220:4:43", - "type": "" - } - ], - "src": "4173:121:43" - }, - { - "body": { - "nativeSrc": "4380:462:43", - "nodeType": "YulBlock", - "src": "4380:462:43", - "statements": [ - { - "body": { - "nativeSrc": "4413:423:43", - "nodeType": "YulBlock", - "src": "4413:423:43", - "statements": [ - { - "nativeSrc": "4427:11:43", - "nodeType": "YulVariableDeclaration", - "src": "4427:11:43", - "value": { - "kind": "number", - "nativeSrc": "4437:1:43", - "nodeType": "YulLiteral", - "src": "4437:1:43", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "_1", - "nativeSrc": "4431:2:43", - "nodeType": "YulTypedName", - "src": "4431:2:43", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "4458:1:43", - "nodeType": "YulLiteral", - "src": "4458:1:43", - "type": "", - "value": "0" - }, - { - "name": "array", - "nativeSrc": "4461:5:43", - "nodeType": "YulIdentifier", - "src": "4461:5:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "4451:6:43", - "nodeType": "YulIdentifier", - "src": "4451:6:43" - }, - "nativeSrc": "4451:16:43", - "nodeType": "YulFunctionCall", - "src": "4451:16:43" - }, - "nativeSrc": "4451:16:43", - "nodeType": "YulExpressionStatement", - "src": "4451:16:43" - }, - { - "nativeSrc": "4480:30:43", - "nodeType": "YulVariableDeclaration", - "src": "4480:30:43", - "value": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "4502:1:43", - "nodeType": "YulLiteral", - "src": "4502:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "4505:4:43", - "nodeType": "YulLiteral", - "src": "4505:4:43", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "keccak256", - "nativeSrc": "4492:9:43", - "nodeType": "YulIdentifier", - "src": "4492:9:43" - }, - "nativeSrc": "4492:18:43", - "nodeType": "YulFunctionCall", - "src": "4492:18:43" - }, - "variables": [ - { - "name": "data", - "nativeSrc": "4484:4:43", - "nodeType": "YulTypedName", - "src": "4484:4:43", - "type": "" - } - ] - }, - { - "nativeSrc": "4523:57:43", - "nodeType": "YulVariableDeclaration", - "src": "4523:57:43", - "value": { - "arguments": [ - { - "name": "data", - "nativeSrc": "4546:4:43", - "nodeType": "YulIdentifier", - "src": "4546:4:43" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "4556:1:43", - "nodeType": "YulLiteral", - "src": "4556:1:43", - "type": "", - "value": "5" - }, - { - "arguments": [ - { - "name": "startIndex", - "nativeSrc": "4563:10:43", - "nodeType": "YulIdentifier", - "src": "4563:10:43" - }, - { - "kind": "number", - "nativeSrc": "4575:2:43", - "nodeType": "YulLiteral", - "src": "4575:2:43", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "4559:3:43", - "nodeType": "YulIdentifier", - "src": "4559:3:43" - }, - "nativeSrc": "4559:19:43", - "nodeType": "YulFunctionCall", - "src": "4559:19:43" - } - ], - "functionName": { - "name": "shr", - "nativeSrc": "4552:3:43", - "nodeType": "YulIdentifier", - "src": "4552:3:43" - }, - "nativeSrc": "4552:27:43", - "nodeType": "YulFunctionCall", - "src": "4552:27:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "4542:3:43", - "nodeType": "YulIdentifier", - "src": "4542:3:43" - }, - "nativeSrc": "4542:38:43", - "nodeType": "YulFunctionCall", - "src": "4542:38:43" - }, - "variables": [ - { - "name": "deleteStart", - "nativeSrc": "4527:11:43", - "nodeType": "YulTypedName", - "src": "4527:11:43", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "4617:23:43", - "nodeType": "YulBlock", - "src": "4617:23:43", - "statements": [ - { - "nativeSrc": "4619:19:43", - "nodeType": "YulAssignment", - "src": "4619:19:43", - "value": { - "name": "data", - "nativeSrc": "4634:4:43", - "nodeType": "YulIdentifier", - "src": "4634:4:43" - }, - "variableNames": [ - { - "name": "deleteStart", - "nativeSrc": "4619:11:43", - "nodeType": "YulIdentifier", - "src": "4619:11:43" - } - ] - } - ] - }, - "condition": { - "arguments": [ - { - "name": "startIndex", - "nativeSrc": "4599:10:43", - "nodeType": "YulIdentifier", - "src": "4599:10:43" - }, - { - "kind": "number", - "nativeSrc": "4611:4:43", - "nodeType": "YulLiteral", - "src": "4611:4:43", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "lt", - "nativeSrc": "4596:2:43", - "nodeType": "YulIdentifier", - "src": "4596:2:43" - }, - "nativeSrc": "4596:20:43", - "nodeType": "YulFunctionCall", - "src": "4596:20:43" - }, - "nativeSrc": "4593:47:43", - "nodeType": "YulIf", - "src": "4593:47:43" - }, - { - "nativeSrc": "4653:41:43", - "nodeType": "YulVariableDeclaration", - "src": "4653:41:43", - "value": { - "arguments": [ - { - "name": "data", - "nativeSrc": "4667:4:43", - "nodeType": "YulIdentifier", - "src": "4667:4:43" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "4677:1:43", - "nodeType": "YulLiteral", - "src": "4677:1:43", - "type": "", - "value": "5" - }, - { - "arguments": [ - { - "name": "len", - "nativeSrc": "4684:3:43", - "nodeType": "YulIdentifier", - "src": "4684:3:43" - }, - { - "kind": "number", - "nativeSrc": "4689:2:43", - "nodeType": "YulLiteral", - "src": "4689:2:43", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "4680:3:43", - "nodeType": "YulIdentifier", - "src": "4680:3:43" - }, - "nativeSrc": "4680:12:43", - "nodeType": "YulFunctionCall", - "src": "4680:12:43" - } - ], - "functionName": { - "name": "shr", - "nativeSrc": "4673:3:43", - "nodeType": "YulIdentifier", - "src": "4673:3:43" - }, - "nativeSrc": "4673:20:43", - "nodeType": "YulFunctionCall", - "src": "4673:20:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "4663:3:43", - "nodeType": "YulIdentifier", - "src": "4663:3:43" - }, - "nativeSrc": "4663:31:43", - "nodeType": "YulFunctionCall", - "src": "4663:31:43" - }, - "variables": [ - { - "name": "_2", - "nativeSrc": "4657:2:43", - "nodeType": "YulTypedName", - "src": "4657:2:43", - "type": "" - } - ] - }, - { - "nativeSrc": "4707:24:43", - "nodeType": "YulVariableDeclaration", - "src": "4707:24:43", - "value": { - "name": "deleteStart", - "nativeSrc": "4720:11:43", - "nodeType": "YulIdentifier", - "src": "4720:11:43" - }, - "variables": [ - { - "name": "start", - "nativeSrc": "4711:5:43", - "nodeType": "YulTypedName", - "src": "4711:5:43", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "4805:21:43", - "nodeType": "YulBlock", - "src": "4805:21:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "start", - "nativeSrc": "4814:5:43", - "nodeType": "YulIdentifier", - "src": "4814:5:43" - }, - { - "name": "_1", - "nativeSrc": "4821:2:43", - "nodeType": "YulIdentifier", - "src": "4821:2:43" - } - ], - "functionName": { - "name": "sstore", - "nativeSrc": "4807:6:43", - "nodeType": "YulIdentifier", - "src": "4807:6:43" - }, - "nativeSrc": "4807:17:43", - "nodeType": "YulFunctionCall", - "src": "4807:17:43" - }, - "nativeSrc": "4807:17:43", - "nodeType": "YulExpressionStatement", - "src": "4807:17:43" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "start", - "nativeSrc": "4755:5:43", - "nodeType": "YulIdentifier", - "src": "4755:5:43" - }, - { - "name": "_2", - "nativeSrc": "4762:2:43", - "nodeType": "YulIdentifier", - "src": "4762:2:43" - } - ], - "functionName": { - "name": "lt", - "nativeSrc": "4752:2:43", - "nodeType": "YulIdentifier", - "src": "4752:2:43" - }, - "nativeSrc": "4752:13:43", - "nodeType": "YulFunctionCall", - "src": "4752:13:43" - }, - "nativeSrc": "4744:82:43", - "nodeType": "YulForLoop", - "post": { - "nativeSrc": "4766:26:43", - "nodeType": "YulBlock", - "src": "4766:26:43", - "statements": [ - { - "nativeSrc": "4768:22:43", - "nodeType": "YulAssignment", - "src": "4768:22:43", - "value": { - "arguments": [ - { - "name": "start", - "nativeSrc": "4781:5:43", - "nodeType": "YulIdentifier", - "src": "4781:5:43" - }, - { - "kind": "number", - "nativeSrc": "4788:1:43", - "nodeType": "YulLiteral", - "src": "4788:1:43", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "4777:3:43", - "nodeType": "YulIdentifier", - "src": "4777:3:43" - }, - "nativeSrc": "4777:13:43", - "nodeType": "YulFunctionCall", - "src": "4777:13:43" - }, - "variableNames": [ - { - "name": "start", - "nativeSrc": "4768:5:43", - "nodeType": "YulIdentifier", - "src": "4768:5:43" - } - ] - } - ] - }, - "pre": { - "nativeSrc": "4748:3:43", - "nodeType": "YulBlock", - "src": "4748:3:43", - "statements": [] - }, - "src": "4744:82:43" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "len", - "nativeSrc": "4396:3:43", - "nodeType": "YulIdentifier", - "src": "4396:3:43" - }, - { - "kind": "number", - "nativeSrc": "4401:2:43", - "nodeType": "YulLiteral", - "src": "4401:2:43", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "4393:2:43", - "nodeType": "YulIdentifier", - "src": "4393:2:43" - }, - "nativeSrc": "4393:11:43", - "nodeType": "YulFunctionCall", - "src": "4393:11:43" - }, - "nativeSrc": "4390:446:43", - "nodeType": "YulIf", - "src": "4390:446:43" - } - ] - }, - "name": "clean_up_bytearray_end_slots_string_storage", - "nativeSrc": "4299:543:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "array", - "nativeSrc": "4352:5:43", - "nodeType": "YulTypedName", - "src": "4352:5:43", - "type": "" - }, - { - "name": "len", - "nativeSrc": "4359:3:43", - "nodeType": "YulTypedName", - "src": "4359:3:43", - "type": "" - }, - { - "name": "startIndex", - "nativeSrc": "4364:10:43", - "nodeType": "YulTypedName", - "src": "4364:10:43", - "type": "" - } - ], - "src": "4299:543:43" - }, - { - "body": { - "nativeSrc": "4932:81:43", - "nodeType": "YulBlock", - "src": "4932:81:43", - "statements": [ - { - "nativeSrc": "4942:65:43", - "nodeType": "YulAssignment", - "src": "4942:65:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "data", - "nativeSrc": "4957:4:43", - "nodeType": "YulIdentifier", - "src": "4957:4:43" - }, - { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "4975:1:43", - "nodeType": "YulLiteral", - "src": "4975:1:43", - "type": "", - "value": "3" - }, - { - "name": "len", - "nativeSrc": "4978:3:43", - "nodeType": "YulIdentifier", - "src": "4978:3:43" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "4971:3:43", - "nodeType": "YulIdentifier", - "src": "4971:3:43" - }, - "nativeSrc": "4971:11:43", - "nodeType": "YulFunctionCall", - "src": "4971:11:43" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "4988:1:43", - "nodeType": "YulLiteral", - "src": "4988:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "not", - "nativeSrc": "4984:3:43", - "nodeType": "YulIdentifier", - "src": "4984:3:43" - }, - "nativeSrc": "4984:6:43", - "nodeType": "YulFunctionCall", - "src": "4984:6:43" - } - ], - "functionName": { - "name": "shr", - "nativeSrc": "4967:3:43", - "nodeType": "YulIdentifier", - "src": "4967:3:43" - }, - "nativeSrc": "4967:24:43", - "nodeType": "YulFunctionCall", - "src": "4967:24:43" - } - ], - "functionName": { - "name": "not", - "nativeSrc": "4963:3:43", - "nodeType": "YulIdentifier", - "src": "4963:3:43" - }, - "nativeSrc": "4963:29:43", - "nodeType": "YulFunctionCall", - "src": "4963:29:43" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "4953:3:43", - "nodeType": "YulIdentifier", - "src": "4953:3:43" - }, - "nativeSrc": "4953:40:43", - "nodeType": "YulFunctionCall", - "src": "4953:40:43" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "4999:1:43", - "nodeType": "YulLiteral", - "src": "4999:1:43", - "type": "", - "value": "1" - }, - { - "name": "len", - "nativeSrc": "5002:3:43", - "nodeType": "YulIdentifier", - "src": "5002:3:43" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "4995:3:43", - "nodeType": "YulIdentifier", - "src": "4995:3:43" - }, - "nativeSrc": "4995:11:43", - "nodeType": "YulFunctionCall", - "src": "4995:11:43" - } - ], - "functionName": { - "name": "or", - "nativeSrc": "4950:2:43", - "nodeType": "YulIdentifier", - "src": "4950:2:43" - }, - "nativeSrc": "4950:57:43", - "nodeType": "YulFunctionCall", - "src": "4950:57:43" - }, - "variableNames": [ - { - "name": "used", - "nativeSrc": "4942:4:43", - "nodeType": "YulIdentifier", - "src": "4942:4:43" - } - ] - } - ] - }, - "name": "extract_used_part_and_set_length_of_short_byte_array", - "nativeSrc": "4847:166:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "data", - "nativeSrc": "4909:4:43", - "nodeType": "YulTypedName", - "src": "4909:4:43", - "type": "" - }, - { - "name": "len", - "nativeSrc": "4915:3:43", - "nodeType": "YulTypedName", - "src": "4915:3:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "used", - "nativeSrc": "4923:4:43", - "nodeType": "YulTypedName", - "src": "4923:4:43", - "type": "" - } - ], - "src": "4847:166:43" - }, - { - "body": { - "nativeSrc": "5114:1249:43", - "nodeType": "YulBlock", - "src": "5114:1249:43", - "statements": [ - { - "nativeSrc": "5124:24:43", - "nodeType": "YulVariableDeclaration", - "src": "5124:24:43", - "value": { - "arguments": [ - { - "name": "src", - "nativeSrc": "5144:3:43", - "nodeType": "YulIdentifier", - "src": "5144:3:43" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "5138:5:43", - "nodeType": "YulIdentifier", - "src": "5138:5:43" - }, - "nativeSrc": "5138:10:43", - "nodeType": "YulFunctionCall", - "src": "5138:10:43" - }, - "variables": [ - { - "name": "newLen", - "nativeSrc": "5128:6:43", - "nodeType": "YulTypedName", - "src": "5128:6:43", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "5191:22:43", - "nodeType": "YulBlock", - "src": "5191:22:43", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x41", - "nativeSrc": "5193:16:43", - "nodeType": "YulIdentifier", - "src": "5193:16:43" - }, - "nativeSrc": "5193:18:43", - "nodeType": "YulFunctionCall", - "src": "5193:18:43" - }, - "nativeSrc": "5193:18:43", - "nodeType": "YulExpressionStatement", - "src": "5193:18:43" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "newLen", - "nativeSrc": "5163:6:43", - "nodeType": "YulIdentifier", - "src": "5163:6:43" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "5179:2:43", - "nodeType": "YulLiteral", - "src": "5179:2:43", - "type": "", - "value": "64" - }, - { - "kind": "number", - "nativeSrc": "5183:1:43", - "nodeType": "YulLiteral", - "src": "5183:1:43", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "5175:3:43", - "nodeType": "YulIdentifier", - "src": "5175:3:43" - }, - "nativeSrc": "5175:10:43", - "nodeType": "YulFunctionCall", - "src": "5175:10:43" - }, - { - "kind": "number", - "nativeSrc": "5187:1:43", - "nodeType": "YulLiteral", - "src": "5187:1:43", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "5171:3:43", - "nodeType": "YulIdentifier", - "src": "5171:3:43" - }, - "nativeSrc": "5171:18:43", - "nodeType": "YulFunctionCall", - "src": "5171:18:43" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "5160:2:43", - "nodeType": "YulIdentifier", - "src": "5160:2:43" - }, - "nativeSrc": "5160:30:43", - "nodeType": "YulFunctionCall", - "src": "5160:30:43" - }, - "nativeSrc": "5157:56:43", - "nodeType": "YulIf", - "src": "5157:56:43" - }, - { - "expression": { - "arguments": [ - { - "name": "slot", - "nativeSrc": "5266:4:43", - "nodeType": "YulIdentifier", - "src": "5266:4:43" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "slot", - "nativeSrc": "5304:4:43", - "nodeType": "YulIdentifier", - "src": "5304:4:43" - } - ], - "functionName": { - "name": "sload", - "nativeSrc": "5298:5:43", - "nodeType": "YulIdentifier", - "src": "5298:5:43" - }, - "nativeSrc": "5298:11:43", - "nodeType": "YulFunctionCall", - "src": "5298:11:43" - } - ], - "functionName": { - "name": "extract_byte_array_length", - "nativeSrc": "5272:25:43", - "nodeType": "YulIdentifier", - "src": "5272:25:43" - }, - "nativeSrc": "5272:38:43", - "nodeType": "YulFunctionCall", - "src": "5272:38:43" - }, - { - "name": "newLen", - "nativeSrc": "5312:6:43", - "nodeType": "YulIdentifier", - "src": "5312:6:43" - } - ], - "functionName": { - "name": "clean_up_bytearray_end_slots_string_storage", - "nativeSrc": "5222:43:43", - "nodeType": "YulIdentifier", - "src": "5222:43:43" - }, - "nativeSrc": "5222:97:43", - "nodeType": "YulFunctionCall", - "src": "5222:97:43" - }, - "nativeSrc": "5222:97:43", - "nodeType": "YulExpressionStatement", - "src": "5222:97:43" - }, - { - "nativeSrc": "5328:18:43", - "nodeType": "YulVariableDeclaration", - "src": "5328:18:43", - "value": { - "kind": "number", - "nativeSrc": "5345:1:43", - "nodeType": "YulLiteral", - "src": "5345:1:43", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "srcOffset", - "nativeSrc": "5332:9:43", - "nodeType": "YulTypedName", - "src": "5332:9:43", - "type": "" - } - ] - }, - { - "nativeSrc": "5355:23:43", - "nodeType": "YulVariableDeclaration", - "src": "5355:23:43", - "value": { - "kind": "number", - "nativeSrc": "5374:4:43", - "nodeType": "YulLiteral", - "src": "5374:4:43", - "type": "", - "value": "0x20" - }, - "variables": [ - { - "name": "srcOffset_1", - "nativeSrc": "5359:11:43", - "nodeType": "YulTypedName", - "src": "5359:11:43", - "type": "" - } - ] - }, - { - "nativeSrc": "5387:17:43", - "nodeType": "YulAssignment", - "src": "5387:17:43", - "value": { - "kind": "number", - "nativeSrc": "5400:4:43", - "nodeType": "YulLiteral", - "src": "5400:4:43", - "type": "", - "value": "0x20" - }, - "variableNames": [ - { - "name": "srcOffset", - "nativeSrc": "5387:9:43", - "nodeType": "YulIdentifier", - "src": "5387:9:43" - } - ] - }, - { - "cases": [ - { - "body": { - "nativeSrc": "5450:656:43", - "nodeType": "YulBlock", - "src": "5450:656:43", - "statements": [ - { - "nativeSrc": "5464:35:43", - "nodeType": "YulVariableDeclaration", - "src": "5464:35:43", - "value": { - "arguments": [ - { - "name": "newLen", - "nativeSrc": "5483:6:43", - "nodeType": "YulIdentifier", - "src": "5483:6:43" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "5495:2:43", - "nodeType": "YulLiteral", - "src": "5495:2:43", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "not", - "nativeSrc": "5491:3:43", - "nodeType": "YulIdentifier", - "src": "5491:3:43" - }, - "nativeSrc": "5491:7:43", - "nodeType": "YulFunctionCall", - "src": "5491:7:43" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "5479:3:43", - "nodeType": "YulIdentifier", - "src": "5479:3:43" - }, - "nativeSrc": "5479:20:43", - "nodeType": "YulFunctionCall", - "src": "5479:20:43" - }, - "variables": [ - { - "name": "loopEnd", - "nativeSrc": "5468:7:43", - "nodeType": "YulTypedName", - "src": "5468:7:43", - "type": "" - } - ] - }, - { - "nativeSrc": "5512:49:43", - "nodeType": "YulVariableDeclaration", - "src": "5512:49:43", - "value": { - "arguments": [ - { - "name": "slot", - "nativeSrc": "5556:4:43", - "nodeType": "YulIdentifier", - "src": "5556:4:43" - } - ], - "functionName": { - "name": "array_dataslot_string_storage", - "nativeSrc": "5526:29:43", - "nodeType": "YulIdentifier", - "src": "5526:29:43" - }, - "nativeSrc": "5526:35:43", - "nodeType": "YulFunctionCall", - "src": "5526:35:43" - }, - "variables": [ - { - "name": "dstPtr", - "nativeSrc": "5516:6:43", - "nodeType": "YulTypedName", - "src": "5516:6:43", - "type": "" - } - ] - }, - { - "nativeSrc": "5574:10:43", - "nodeType": "YulVariableDeclaration", - "src": "5574:10:43", - "value": { - "kind": "number", - "nativeSrc": "5583:1:43", - "nodeType": "YulLiteral", - "src": "5583:1:43", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "i", - "nativeSrc": "5578:1:43", - "nodeType": "YulTypedName", - "src": "5578:1:43", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "5661:172:43", - "nodeType": "YulBlock", - "src": "5661:172:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "dstPtr", - "nativeSrc": "5686:6:43", - "nodeType": "YulIdentifier", - "src": "5686:6:43" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "src", - "nativeSrc": "5704:3:43", - "nodeType": "YulIdentifier", - "src": "5704:3:43" - }, - { - "name": "srcOffset", - "nativeSrc": "5709:9:43", - "nodeType": "YulIdentifier", - "src": "5709:9:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "5700:3:43", - "nodeType": "YulIdentifier", - "src": "5700:3:43" - }, - "nativeSrc": "5700:19:43", - "nodeType": "YulFunctionCall", - "src": "5700:19:43" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "5694:5:43", - "nodeType": "YulIdentifier", - "src": "5694:5:43" - }, - "nativeSrc": "5694:26:43", - "nodeType": "YulFunctionCall", - "src": "5694:26:43" - } - ], - "functionName": { - "name": "sstore", - "nativeSrc": "5679:6:43", - "nodeType": "YulIdentifier", - "src": "5679:6:43" - }, - "nativeSrc": "5679:42:43", - "nodeType": "YulFunctionCall", - "src": "5679:42:43" - }, - "nativeSrc": "5679:42:43", - "nodeType": "YulExpressionStatement", - "src": "5679:42:43" - }, - { - "nativeSrc": "5738:24:43", - "nodeType": "YulAssignment", - "src": "5738:24:43", - "value": { - "arguments": [ - { - "name": "dstPtr", - "nativeSrc": "5752:6:43", - "nodeType": "YulIdentifier", - "src": "5752:6:43" - }, - { - "kind": "number", - "nativeSrc": "5760:1:43", - "nodeType": "YulLiteral", - "src": "5760:1:43", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "5748:3:43", - "nodeType": "YulIdentifier", - "src": "5748:3:43" - }, - "nativeSrc": "5748:14:43", - "nodeType": "YulFunctionCall", - "src": "5748:14:43" - }, - "variableNames": [ - { - "name": "dstPtr", - "nativeSrc": "5738:6:43", - "nodeType": "YulIdentifier", - "src": "5738:6:43" - } - ] - }, - { - "nativeSrc": "5779:40:43", - "nodeType": "YulAssignment", - "src": "5779:40:43", - "value": { - "arguments": [ - { - "name": "srcOffset", - "nativeSrc": "5796:9:43", - "nodeType": "YulIdentifier", - "src": "5796:9:43" - }, - { - "name": "srcOffset_1", - "nativeSrc": "5807:11:43", - "nodeType": "YulIdentifier", - "src": "5807:11:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "5792:3:43", - "nodeType": "YulIdentifier", - "src": "5792:3:43" - }, - "nativeSrc": "5792:27:43", - "nodeType": "YulFunctionCall", - "src": "5792:27:43" - }, - "variableNames": [ - { - "name": "srcOffset", - "nativeSrc": "5779:9:43", - "nodeType": "YulIdentifier", - "src": "5779:9:43" - } - ] - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nativeSrc": "5608:1:43", - "nodeType": "YulIdentifier", - "src": "5608:1:43" - }, - { - "name": "loopEnd", - "nativeSrc": "5611:7:43", - "nodeType": "YulIdentifier", - "src": "5611:7:43" - } - ], - "functionName": { - "name": "lt", - "nativeSrc": "5605:2:43", - "nodeType": "YulIdentifier", - "src": "5605:2:43" - }, - "nativeSrc": "5605:14:43", - "nodeType": "YulFunctionCall", - "src": "5605:14:43" - }, - "nativeSrc": "5597:236:43", - "nodeType": "YulForLoop", - "post": { - "nativeSrc": "5620:28:43", - "nodeType": "YulBlock", - "src": "5620:28:43", - "statements": [ - { - "nativeSrc": "5622:24:43", - "nodeType": "YulAssignment", - "src": "5622:24:43", - "value": { - "arguments": [ - { - "name": "i", - "nativeSrc": "5631:1:43", - "nodeType": "YulIdentifier", - "src": "5631:1:43" - }, - { - "name": "srcOffset_1", - "nativeSrc": "5634:11:43", - "nodeType": "YulIdentifier", - "src": "5634:11:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "5627:3:43", - "nodeType": "YulIdentifier", - "src": "5627:3:43" - }, - "nativeSrc": "5627:19:43", - "nodeType": "YulFunctionCall", - "src": "5627:19:43" - }, - "variableNames": [ - { - "name": "i", - "nativeSrc": "5622:1:43", - "nodeType": "YulIdentifier", - "src": "5622:1:43" - } - ] - } - ] - }, - "pre": { - "nativeSrc": "5601:3:43", - "nodeType": "YulBlock", - "src": "5601:3:43", - "statements": [] - }, - "src": "5597:236:43" - }, - { - "body": { - "nativeSrc": "5881:166:43", - "nodeType": "YulBlock", - "src": "5881:166:43", - "statements": [ - { - "nativeSrc": "5899:43:43", - "nodeType": "YulVariableDeclaration", - "src": "5899:43:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "src", - "nativeSrc": "5926:3:43", - "nodeType": "YulIdentifier", - "src": "5926:3:43" - }, - { - "name": "srcOffset", - "nativeSrc": "5931:9:43", - "nodeType": "YulIdentifier", - "src": "5931:9:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "5922:3:43", - "nodeType": "YulIdentifier", - "src": "5922:3:43" - }, - "nativeSrc": "5922:19:43", - "nodeType": "YulFunctionCall", - "src": "5922:19:43" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "5916:5:43", - "nodeType": "YulIdentifier", - "src": "5916:5:43" - }, - "nativeSrc": "5916:26:43", - "nodeType": "YulFunctionCall", - "src": "5916:26:43" - }, - "variables": [ - { - "name": "lastValue", - "nativeSrc": "5903:9:43", - "nodeType": "YulTypedName", - "src": "5903:9:43", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "dstPtr", - "nativeSrc": "5966:6:43", - "nodeType": "YulIdentifier", - "src": "5966:6:43" - }, - { - "arguments": [ - { - "name": "lastValue", - "nativeSrc": "5978:9:43", - "nodeType": "YulIdentifier", - "src": "5978:9:43" - }, - { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "6005:1:43", - "nodeType": "YulLiteral", - "src": "6005:1:43", - "type": "", - "value": "3" - }, - { - "name": "newLen", - "nativeSrc": "6008:6:43", - "nodeType": "YulIdentifier", - "src": "6008:6:43" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "6001:3:43", - "nodeType": "YulIdentifier", - "src": "6001:3:43" - }, - "nativeSrc": "6001:14:43", - "nodeType": "YulFunctionCall", - "src": "6001:14:43" - }, - { - "kind": "number", - "nativeSrc": "6017:3:43", - "nodeType": "YulLiteral", - "src": "6017:3:43", - "type": "", - "value": "248" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "5997:3:43", - "nodeType": "YulIdentifier", - "src": "5997:3:43" - }, - "nativeSrc": "5997:24:43", - "nodeType": "YulFunctionCall", - "src": "5997:24:43" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "6027:1:43", - "nodeType": "YulLiteral", - "src": "6027:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "not", - "nativeSrc": "6023:3:43", - "nodeType": "YulIdentifier", - "src": "6023:3:43" - }, - "nativeSrc": "6023:6:43", - "nodeType": "YulFunctionCall", - "src": "6023:6:43" - } - ], - "functionName": { - "name": "shr", - "nativeSrc": "5993:3:43", - "nodeType": "YulIdentifier", - "src": "5993:3:43" - }, - "nativeSrc": "5993:37:43", - "nodeType": "YulFunctionCall", - "src": "5993:37:43" - } - ], - "functionName": { - "name": "not", - "nativeSrc": "5989:3:43", - "nodeType": "YulIdentifier", - "src": "5989:3:43" - }, - "nativeSrc": "5989:42:43", - "nodeType": "YulFunctionCall", - "src": "5989:42:43" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "5974:3:43", - "nodeType": "YulIdentifier", - "src": "5974:3:43" - }, - "nativeSrc": "5974:58:43", - "nodeType": "YulFunctionCall", - "src": "5974:58:43" - } - ], - "functionName": { - "name": "sstore", - "nativeSrc": "5959:6:43", - "nodeType": "YulIdentifier", - "src": "5959:6:43" - }, - "nativeSrc": "5959:74:43", - "nodeType": "YulFunctionCall", - "src": "5959:74:43" - }, - "nativeSrc": "5959:74:43", - "nodeType": "YulExpressionStatement", - "src": "5959:74:43" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "loopEnd", - "nativeSrc": "5852:7:43", - "nodeType": "YulIdentifier", - "src": "5852:7:43" - }, - { - "name": "newLen", - "nativeSrc": "5861:6:43", - "nodeType": "YulIdentifier", - "src": "5861:6:43" - } - ], - "functionName": { - "name": "lt", - "nativeSrc": "5849:2:43", - "nodeType": "YulIdentifier", - "src": "5849:2:43" - }, - "nativeSrc": "5849:19:43", - "nodeType": "YulFunctionCall", - "src": "5849:19:43" - }, - "nativeSrc": "5846:201:43", - "nodeType": "YulIf", - "src": "5846:201:43" - }, - { - "expression": { - "arguments": [ - { - "name": "slot", - "nativeSrc": "6067:4:43", - "nodeType": "YulIdentifier", - "src": "6067:4:43" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "6081:1:43", - "nodeType": "YulLiteral", - "src": "6081:1:43", - "type": "", - "value": "1" - }, - { - "name": "newLen", - "nativeSrc": "6084:6:43", - "nodeType": "YulIdentifier", - "src": "6084:6:43" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "6077:3:43", - "nodeType": "YulIdentifier", - "src": "6077:3:43" - }, - "nativeSrc": "6077:14:43", - "nodeType": "YulFunctionCall", - "src": "6077:14:43" - }, - { - "kind": "number", - "nativeSrc": "6093:1:43", - "nodeType": "YulLiteral", - "src": "6093:1:43", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "6073:3:43", - "nodeType": "YulIdentifier", - "src": "6073:3:43" - }, - "nativeSrc": "6073:22:43", - "nodeType": "YulFunctionCall", - "src": "6073:22:43" - } - ], - "functionName": { - "name": "sstore", - "nativeSrc": "6060:6:43", - "nodeType": "YulIdentifier", - "src": "6060:6:43" - }, - "nativeSrc": "6060:36:43", - "nodeType": "YulFunctionCall", - "src": "6060:36:43" - }, - "nativeSrc": "6060:36:43", - "nodeType": "YulExpressionStatement", - "src": "6060:36:43" - } - ] - }, - "nativeSrc": "5443:663:43", - "nodeType": "YulCase", - "src": "5443:663:43", - "value": { - "kind": "number", - "nativeSrc": "5448:1:43", - "nodeType": "YulLiteral", - "src": "5448:1:43", - "type": "", - "value": "1" - } - }, - { - "body": { - "nativeSrc": "6123:234:43", - "nodeType": "YulBlock", - "src": "6123:234:43", - "statements": [ - { - "nativeSrc": "6137:14:43", - "nodeType": "YulVariableDeclaration", - "src": "6137:14:43", - "value": { - "kind": "number", - "nativeSrc": "6150:1:43", - "nodeType": "YulLiteral", - "src": "6150:1:43", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "value", - "nativeSrc": "6141:5:43", - "nodeType": "YulTypedName", - "src": "6141:5:43", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "6186:67:43", - "nodeType": "YulBlock", - "src": "6186:67:43", - "statements": [ - { - "nativeSrc": "6204:35:43", - "nodeType": "YulAssignment", - "src": "6204:35:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "src", - "nativeSrc": "6223:3:43", - "nodeType": "YulIdentifier", - "src": "6223:3:43" - }, - { - "name": "srcOffset", - "nativeSrc": "6228:9:43", - "nodeType": "YulIdentifier", - "src": "6228:9:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "6219:3:43", - "nodeType": "YulIdentifier", - "src": "6219:3:43" - }, - "nativeSrc": "6219:19:43", - "nodeType": "YulFunctionCall", - "src": "6219:19:43" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "6213:5:43", - "nodeType": "YulIdentifier", - "src": "6213:5:43" - }, - "nativeSrc": "6213:26:43", - "nodeType": "YulFunctionCall", - "src": "6213:26:43" - }, - "variableNames": [ - { - "name": "value", - "nativeSrc": "6204:5:43", - "nodeType": "YulIdentifier", - "src": "6204:5:43" - } - ] - } - ] - }, - "condition": { - "name": "newLen", - "nativeSrc": "6167:6:43", - "nodeType": "YulIdentifier", - "src": "6167:6:43" - }, - "nativeSrc": "6164:89:43", - "nodeType": "YulIf", - "src": "6164:89:43" - }, - { - "expression": { - "arguments": [ - { - "name": "slot", - "nativeSrc": "6273:4:43", - "nodeType": "YulIdentifier", - "src": "6273:4:43" - }, - { - "arguments": [ - { - "name": "value", - "nativeSrc": "6332:5:43", - "nodeType": "YulIdentifier", - "src": "6332:5:43" - }, - { - "name": "newLen", - "nativeSrc": "6339:6:43", - "nodeType": "YulIdentifier", - "src": "6339:6:43" - } - ], - "functionName": { - "name": "extract_used_part_and_set_length_of_short_byte_array", - "nativeSrc": "6279:52:43", - "nodeType": "YulIdentifier", - "src": "6279:52:43" - }, - "nativeSrc": "6279:67:43", - "nodeType": "YulFunctionCall", - "src": "6279:67:43" - } - ], - "functionName": { - "name": "sstore", - "nativeSrc": "6266:6:43", - "nodeType": "YulIdentifier", - "src": "6266:6:43" - }, - "nativeSrc": "6266:81:43", - "nodeType": "YulFunctionCall", - "src": "6266:81:43" - }, - "nativeSrc": "6266:81:43", - "nodeType": "YulExpressionStatement", - "src": "6266:81:43" - } - ] - }, - "nativeSrc": "6115:242:43", - "nodeType": "YulCase", - "src": "6115:242:43", - "value": "default" - } - ], - "expression": { - "arguments": [ - { - "name": "newLen", - "nativeSrc": "5423:6:43", - "nodeType": "YulIdentifier", - "src": "5423:6:43" - }, - { - "kind": "number", - "nativeSrc": "5431:2:43", - "nodeType": "YulLiteral", - "src": "5431:2:43", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "5420:2:43", - "nodeType": "YulIdentifier", - "src": "5420:2:43" - }, - "nativeSrc": "5420:14:43", - "nodeType": "YulFunctionCall", - "src": "5420:14:43" - }, - "nativeSrc": "5413:944:43", - "nodeType": "YulSwitch", - "src": "5413:944:43" - } - ] - }, - "name": "copy_byte_array_to_storage_from_t_string_memory_ptr_to_t_string_storage", - "nativeSrc": "5018:1345:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "slot", - "nativeSrc": "5099:4:43", - "nodeType": "YulTypedName", - "src": "5099:4:43", - "type": "" - }, - { - "name": "src", - "nativeSrc": "5105:3:43", - "nodeType": "YulTypedName", - "src": "5105:3:43", - "type": "" - } - ], - "src": "5018:1345:43" - } - ] - }, - "contents": "{\n { }\n function panic_error_0x41()\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n function abi_decode_string_fromMemory(offset, end) -> array\n {\n if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n let _1 := mload(offset)\n let _2 := sub(shl(64, 1), 1)\n if gt(_1, _2) { panic_error_0x41() }\n let _3 := not(31)\n let memPtr := mload(64)\n let newFreePtr := add(memPtr, and(add(and(add(_1, 0x1f), _3), 63), _3))\n if or(gt(newFreePtr, _2), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n mstore(64, newFreePtr)\n mstore(memPtr, _1)\n let _4 := 0x20\n if gt(add(add(offset, _1), 0x20), end) { revert(0, 0) }\n let i := 0\n for { } lt(i, _1) { i := add(i, _4) }\n {\n mstore(add(add(memPtr, i), _4), mload(add(add(offset, i), _4)))\n }\n mstore(add(add(memPtr, _1), 0x20), 0)\n array := memPtr\n }\n function abi_decode_address_fromMemory(offset) -> value\n {\n value := mload(offset)\n if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n }\n function abi_decode_tuple_t_string_memory_ptrt_string_memory_ptrt_addresst_address_fromMemory(headStart, dataEnd) -> value0, value1, value2, value3\n {\n if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n let offset := mload(headStart)\n let _1 := sub(shl(64, 1), 1)\n if gt(offset, _1) { revert(0, 0) }\n value0 := abi_decode_string_fromMemory(add(headStart, offset), dataEnd)\n let offset_1 := mload(add(headStart, 32))\n if gt(offset_1, _1) { revert(0, 0) }\n value1 := abi_decode_string_fromMemory(add(headStart, offset_1), dataEnd)\n value2 := abi_decode_address_fromMemory(add(headStart, 64))\n value3 := abi_decode_address_fromMemory(add(headStart, 96))\n }\n function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n }\n function panic_error_0x11()\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n function checked_sub_t_uint8(x, y) -> diff\n {\n diff := sub(and(x, 0xff), and(y, 0xff))\n if gt(diff, 0xff) { panic_error_0x11() }\n }\n function checked_exp_helper(_base, exponent) -> power, base\n {\n let power_1 := 1\n power := 1\n base := _base\n for { } gt(exponent, power_1) { }\n {\n if gt(base, div(not(0), base)) { panic_error_0x11() }\n if and(exponent, power_1) { power := mul(power, base) }\n base := mul(base, base)\n exponent := shr(power_1, exponent)\n }\n }\n function checked_exp_unsigned(base, exponent) -> power\n {\n if iszero(exponent)\n {\n power := 1\n leave\n }\n if iszero(base)\n {\n power := 0\n leave\n }\n switch base\n case 1 {\n power := 1\n leave\n }\n case 2 {\n if gt(exponent, 255) { panic_error_0x11() }\n power := shl(exponent, 1)\n leave\n }\n if or(and(lt(base, 11), lt(exponent, 78)), and(lt(base, 307), lt(exponent, 32)))\n {\n power := exp(base, exponent)\n leave\n }\n let power_1, base_1 := checked_exp_helper(base, exponent)\n if gt(power_1, div(not(0), base_1)) { panic_error_0x11() }\n power := mul(power_1, base_1)\n }\n function checked_exp_t_uint256_t_uint8(base, exponent) -> power\n {\n power := checked_exp_unsigned(base, and(exponent, 0xff))\n }\n function extract_byte_array_length(data) -> length\n {\n length := shr(1, data)\n let outOfPlaceEncoding := and(data, 1)\n if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n if eq(outOfPlaceEncoding, lt(length, 32))\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x22)\n revert(0, 0x24)\n }\n }\n function array_dataslot_string_storage(ptr) -> data\n {\n mstore(0, ptr)\n data := keccak256(0, 0x20)\n }\n function clean_up_bytearray_end_slots_string_storage(array, len, startIndex)\n {\n if gt(len, 31)\n {\n let _1 := 0\n mstore(0, array)\n let data := keccak256(0, 0x20)\n let deleteStart := add(data, shr(5, add(startIndex, 31)))\n if lt(startIndex, 0x20) { deleteStart := data }\n let _2 := add(data, shr(5, add(len, 31)))\n let start := deleteStart\n for { } lt(start, _2) { start := add(start, 1) }\n { sstore(start, _1) }\n }\n }\n function extract_used_part_and_set_length_of_short_byte_array(data, len) -> used\n {\n used := or(and(data, not(shr(shl(3, len), not(0)))), shl(1, len))\n }\n function copy_byte_array_to_storage_from_t_string_memory_ptr_to_t_string_storage(slot, src)\n {\n let newLen := mload(src)\n if gt(newLen, sub(shl(64, 1), 1)) { panic_error_0x41() }\n clean_up_bytearray_end_slots_string_storage(slot, extract_byte_array_length(sload(slot)), newLen)\n let srcOffset := 0\n let srcOffset_1 := 0x20\n srcOffset := 0x20\n switch gt(newLen, 31)\n case 1 {\n let loopEnd := and(newLen, not(31))\n let dstPtr := array_dataslot_string_storage(slot)\n let i := 0\n for { } lt(i, loopEnd) { i := add(i, srcOffset_1) }\n {\n sstore(dstPtr, mload(add(src, srcOffset)))\n dstPtr := add(dstPtr, 1)\n srcOffset := add(srcOffset, srcOffset_1)\n }\n if lt(loopEnd, newLen)\n {\n let lastValue := mload(add(src, srcOffset))\n sstore(dstPtr, and(lastValue, not(shr(and(shl(3, newLen), 248), not(0)))))\n }\n sstore(slot, add(shl(1, newLen), 1))\n }\n default {\n let value := 0\n if newLen\n {\n value := mload(add(src, srcOffset))\n }\n sstore(slot, extract_used_part_and_set_length_of_short_byte_array(value, newLen))\n }\n }\n}", - "id": 43, - "language": "Yul", - "name": "#utility.yul" - } - ], - "linkReferences": {}, - "object": "60c06040523480156200001157600080fd5b50604051620036a7380380620036a78339810160408190526200003491620002da565b8383838383838383838360128484818181818d6001600160a01b0381166200007657604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b6200008181620001a0565b506001600160a01b038083166080528116620000b057604051632d618d8160e21b815260040160405180910390fd5b60805160405163ca5eb5e160e01b81526001600160a01b0383811660048301529091169063ca5eb5e190602401600060405180830381600087803b158015620000f857600080fd5b505af11580156200010d573d6000803e3d6000fd5b505050505050505062000125620001f060201b60201c565b60ff168360ff1610156200014c576040516301e9714b60e41b815260040160405180910390fd5b620001596006846200037f565b6200016690600a6200049e565b60a05250600891506200017c9050838262000547565b5060096200018b828262000547565b50505050505050505050505050505062000613565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600690565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200021d57600080fd5b81516001600160401b03808211156200023a576200023a620001f5565b604051601f8301601f19908116603f01168101908282118183101715620002655762000265620001f5565b81604052838152602092508660208588010111156200028357600080fd5b600091505b83821015620002a7578582018301518183018401529082019062000288565b6000602085830101528094505050505092915050565b80516001600160a01b0381168114620002d557600080fd5b919050565b60008060008060808587031215620002f157600080fd5b84516001600160401b03808211156200030957600080fd5b62000317888389016200020b565b955060208701519150808211156200032e57600080fd5b506200033d878288016200020b565b9350506200034e60408601620002bd565b91506200035e60608601620002bd565b905092959194509250565b634e487b7160e01b600052601160045260246000fd5b60ff82811682821603908111156200039b576200039b62000369565b92915050565b600181815b80851115620003e2578160001904821115620003c657620003c662000369565b80851615620003d457918102915b93841c9390800290620003a6565b509250929050565b600082620003fb575060016200039b565b816200040a575060006200039b565b81600181146200042357600281146200042e576200044e565b60019150506200039b565b60ff84111562000442576200044262000369565b50506001821b6200039b565b5060208310610133831016604e8410600b841016171562000473575081810a6200039b565b6200047f8383620003a1565b806000190482111562000496576200049662000369565b029392505050565b6000620004af60ff841683620003ea565b9392505050565b600181811c90821680620004cb57607f821691505b602082108103620004ec57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000542576000816000526020600020601f850160051c810160208610156200051d5750805b601f850160051c820191505b818110156200053e5782815560010162000529565b5050505b505050565b81516001600160401b03811115620005635762000563620001f5565b6200057b81620005748454620004b6565b84620004f2565b602080601f831160018114620005b357600084156200059a5750858301515b600019600386901b1c1916600185901b1785556200053e565b600085815260208120601f198616915b82811015620005e457888601518255948401946001909101908401620005c3565b5085821015620006035787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a0516130286200067f6000396000818161064901528181611a4b01528181611ac00152611cc4015260008181610508015281816109b80152818161101201528181611289015281816115f301528181611dbc01528181611ef60152611fad01526130286000f3fe60806040526004361061025c5760003560e01c8063715018a611610144578063bb0b6a53116100b6578063d045a0dc1161007a578063d045a0dc14610780578063d424388514610793578063dd62ed3e146107b3578063f2fde38b146107f9578063fc0c546a1461048c578063ff7bd03d1461081957600080fd5b8063bb0b6a53146106df578063bc70b3541461070c578063bd815db01461072c578063c7c7f5b31461073f578063ca5eb5e11461076057600080fd5b806395d89b411161010857806395d89b4114610622578063963efcaa146106375780639f68b9641461066b578063a9059cbb1461067f578063b731ea0a1461069f578063b98bd070146106bf57600080fd5b8063715018a6146105805780637d25a05e1461059557806382413eac146105d0578063857749b0146105f05780638da5cb5b1461060457600080fd5b806323b872dd116101dd57806352ae2879116101a157806352ae28791461048c5780635535d4611461049f5780635a0dfe4d146104bf5780635e280f11146104f65780636fc1b31e1461052a57806370a082311461054a57600080fd5b806323b872dd146103dd578063313ce567146103fd5780633400288b1461041f5780633b6f743b1461043f57806340c10f191461046c57600080fd5b8063134d4f2511610224578063134d4f2514610338578063156a0d0f1461036057806317442b701461038757806318160ddd146103a95780631f5e1334146103c857600080fd5b806306fdde0314610261578063095ea7b31461028c5780630d35b415146102bc578063111ecdad146102eb57806313137d6514610323575b600080fd5b34801561026d57600080fd5b50610276610839565b6040516102839190612125565b60405180910390f35b34801561029857600080fd5b506102ac6102a736600461214d565b6108cb565b6040519015158152602001610283565b3480156102c857600080fd5b506102dc6102d7366004612191565b6108e5565b604051610283939291906121c5565b3480156102f757600080fd5b5060045461030b906001600160a01b031681565b6040516001600160a01b039091168152602001610283565b6103366103313660046122b8565b6109b6565b005b34801561034457600080fd5b5061034d600281565b60405161ffff9091168152602001610283565b34801561036c57600080fd5b506040805162b9270b60e21b81526001602082015201610283565b34801561039357600080fd5b5060408051600181526002602082015201610283565b3480156103b557600080fd5b506007545b604051908152602001610283565b3480156103d457600080fd5b5061034d600181565b3480156103e957600080fd5b506102ac6103f8366004612357565b610a76565b34801561040957600080fd5b5060125b60405160ff9091168152602001610283565b34801561042b57600080fd5b5061033661043a3660046123b1565b610a9c565b34801561044b57600080fd5b5061045f61045a3660046123db565b610ab2565b604051610283919061242c565b34801561047857600080fd5b5061033661048736600461214d565b610b19565b34801561049857600080fd5b503061030b565b3480156104ab57600080fd5b506102766104ba366004612455565b610b23565b3480156104cb57600080fd5b506102ac6104da3660046123b1565b63ffffffff919091166000908152600160205260409020541490565b34801561050257600080fd5b5061030b7f000000000000000000000000000000000000000000000000000000000000000081565b34801561053657600080fd5b50610336610545366004612488565b610bc8565b34801561055657600080fd5b506103ba610565366004612488565b6001600160a01b031660009081526005602052604090205490565b34801561058c57600080fd5b50610336610c25565b3480156105a157600080fd5b506105b86105b03660046123b1565b600092915050565b6040516001600160401b039091168152602001610283565b3480156105dc57600080fd5b506102ac6105eb3660046124a5565b610c39565b3480156105fc57600080fd5b50600661040d565b34801561061057600080fd5b506000546001600160a01b031661030b565b34801561062e57600080fd5b50610276610c4e565b34801561064357600080fd5b506103ba7f000000000000000000000000000000000000000000000000000000000000000081565b34801561067757600080fd5b5060006102ac565b34801561068b57600080fd5b506102ac61069a36600461214d565b610c5d565b3480156106ab57600080fd5b5060025461030b906001600160a01b031681565b3480156106cb57600080fd5b506103366106da36600461254f565b610c6b565b3480156106eb57600080fd5b506103ba6106fa366004612590565b60016020526000908152604090205481565b34801561071857600080fd5b506102766107273660046125ab565b610c85565b61033661073a36600461254f565b610e2d565b61075261074d36600461260b565b610fb7565b604051610283929190612678565b34801561076c57600080fd5b5061033661077b366004612488565b610feb565b61033661078e3660046122b8565b611071565b34801561079f57600080fd5b506103366107ae366004612488565b6110a0565b3480156107bf57600080fd5b506103ba6107ce3660046126ca565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b34801561080557600080fd5b50610336610814366004612488565b6110f6565b34801561082557600080fd5b506102ac6108343660046126f8565b611134565b60606008805461084890612714565b80601f016020809104026020016040519081016040528092919081815260200182805461087490612714565b80156108c15780601f10610896576101008083540402835291602001916108c1565b820191906000526020600020905b8154815290600101906020018083116108a457829003601f168201915b5050505050905090565b6000336108d981858561116a565b60019150505b92915050565b60408051808201909152600080825260208201526060610918604051806040016040528060008152602001600081525090565b60408051808201825260008082526001600160401b03602080840182905284518381529081019094529195509182610973565b60408051808201909152600081526060602082015281526020019060019003908161094b5790505b509350600080610998604089013560608a013561099360208c018c612590565b61117c565b60408051808201909152918252602082015296989597505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163314610a06576040516391ac5e4f60e01b81523360048201526024015b60405180910390fd5b60208701803590610a2090610a1b908a612590565b6111b8565b14610a5e57610a326020880188612590565b60405163309afaf360e21b815263ffffffff9091166004820152602088013560248201526044016109fd565b610a6d878787878787876111f4565b50505050505050565b600033610a8485828561135b565b610a8f8585856113d9565b60019150505b9392505050565b610aa4611438565b610aae8282611465565b5050565b60408051808201909152600080825260208201526000610ae2604085013560608601356109936020880188612590565b915050600080610af286846114ba565b9092509050610b0f610b076020880188612590565b8383886115dd565b9695505050505050565b610aae82826116be565b600360209081526000928352604080842090915290825290208054610b4790612714565b80601f0160208091040260200160405190810160405280929190818152602001828054610b7390612714565b8015610bc05780601f10610b9557610100808354040283529160200191610bc0565b820191906000526020600020905b815481529060010190602001808311610ba357829003601f168201915b505050505081565b610bd0611438565b600480546001600160a01b0319166001600160a01b0383169081179091556040519081527ff0be4f1e87349231d80c36b33f9e8639658eeaf474014dee15a3e6a4d4414197906020015b60405180910390a150565b610c2d611438565b610c3760006116f4565b565b6001600160a01b03811630145b949350505050565b60606009805461084890612714565b6000336108d98185856113d9565b610c73611438565b610aae610c8082846127ff565b611744565b63ffffffff8416600090815260036020908152604080832061ffff87168452909152812080546060929190610cb990612714565b80601f0160208091040260200160405190810160405280929190818152602001828054610ce590612714565b8015610d325780601f10610d0757610100808354040283529160200191610d32565b820191906000526020600020905b815481529060010190602001808311610d1557829003601f168201915b505050505090508051600003610d825783838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929450610c469350505050565b6000839003610d92579050610c46565b60028310610e1057610dd984848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061184b92505050565b80610de78460028188612914565b604051602001610df99392919061293e565b604051602081830303815290604052915050610c46565b8383604051639a6d49cd60e01b81526004016109fd92919061298f565b60005b81811015610f365736838383818110610e4b57610e4b6129a3565b9050602002810190610e5d91906129b9565b9050610e90610e6f6020830183612590565b602083013563ffffffff919091166000908152600160205260409020541490565b610e9a5750610f2e565b3063d045a0dc60c08301358360a0810135610eb96101008301836129da565b610eca610100890160e08a01612488565b610ed86101208a018a6129da565b6040518963ffffffff1660e01b8152600401610efa9796959493929190612a35565b6000604051808303818588803b158015610f1357600080fd5b505af1158015610f27573d6000803e3d6000fd5b5050505050505b600101610e30565b50336001600160a01b0316638e9e70996040518163ffffffff1660e01b8152600401600060405180830381865afa158015610f75573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610f9d9190810190612abb565b604051638351eea760e01b81526004016109fd9190612125565b610fbf61208e565b6040805180820190915260008082526020820152610fde858585611877565b915091505b935093915050565b610ff3611438565b60405163ca5eb5e160e01b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063ca5eb5e190602401600060405180830381600087803b15801561105657600080fd5b505af115801561106a573d6000803e3d6000fd5b5050505050565b3330146110915760405163029a949d60e31b815260040160405180910390fd5b610a6d87878787878787610a5e565b6110a8611438565b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527fd48d879cef83a1c0bdda516f27b13ddb1b3f8bbac1c9e1511bb2a659c242776090602001610c1a565b6110fe611438565b6001600160a01b03811661112857604051631e4fbdf760e01b8152600060048201526024016109fd565b611131816116f4565b50565b600060208201803590600190839061114c9086612590565b63ffffffff1681526020810191909152604001600020541492915050565b6111778383836001611972565b505050565b60008061118885611a47565b915081905083811015610fe3576040516371c4efed60e01b815260048101829052602481018590526044016109fd565b63ffffffff8116600090815260016020526040812054806108df5760405163f6ff4fb760e01b815263ffffffff841660048201526024016109fd565b60006112066112038787611a7e565b90565b905060006112328261122061121b8a8a611a96565b611ab9565b61122d60208d018d612590565b611aee565b905060288611156112f957600061126f61125260608c0160408d01612b28565b61125f60208d018d612590565b8461126a8c8c611b16565b611b61565b604051633e5ac80960e11b81529091506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690637cb59012906112c59086908d906000908790600401612b45565b600060405180830381600087803b1580156112df57600080fd5b505af11580156112f3573d6000803e3d6000fd5b50505050505b6001600160a01b038216887fefed6d3500546b29533b128a29e3a94d70788727f0507505ac12eaf2e578fd9c61133260208d018d612590565b6040805163ffffffff9092168252602082018690520160405180910390a3505050505050505050565b6001600160a01b0383811660009081526006602090815260408083209386168352929052205460001981146113d357818110156113c457604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064016109fd565b6113d384848484036000611972565b50505050565b6001600160a01b03831661140357604051634b637e8f60e11b8152600060048201526024016109fd565b6001600160a01b03821661142d5760405163ec442f0560e01b8152600060048201526024016109fd565b611177838383611b93565b6000546001600160a01b03163314610c375760405163118cdaa760e01b81523360048201526024016109fd565b63ffffffff8216600081815260016020908152604091829020849055815192835282018390527f238399d427b947898edb290f5ff0f9109849b1c3ba196a42e35f00c50a54b98b910160405180910390a15050565b606080600061151785602001356114d086611cbd565b6114dd60a08901896129da565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611ce992505050565b909350905060008161152a57600161152d565b60025b905061154d61153f6020880188612590565b8261072760808a018a6129da565b6004549093506001600160a01b031680156115d35760405163043a78eb60e01b81526001600160a01b0382169063043a78eb906115909088908890600401612b76565b602060405180830381865afa1580156115ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115d19190612b9b565b505b5050509250929050565b60408051808201909152600080825260208201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ddc28c586040518060a001604052808863ffffffff168152602001611640896111b8565b8152602001878152602001868152602001851515815250306040518363ffffffff1660e01b8152600401611675929190612bb8565b6040805180830381865afa158015611691573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116b59190612c61565b95945050505050565b6001600160a01b0382166116e85760405163ec442f0560e01b8152600060048201526024016109fd565b610aae60008383611b93565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60005b815181101561181b57611776828281518110611765576117656129a3565b60200260200101516040015161184b565b818181518110611788576117886129a3565b602002602001015160400151600360008484815181106117aa576117aa6129a3565b60200260200101516000015163ffffffff1663ffffffff16815260200190815260200160002060008484815181106117e4576117e46129a3565b60200260200101516020015161ffff1661ffff16815260200190815260200160002090816118129190612ccd565b50600101611747565b507fbe4864a8e820971c0247f5992e2da559595f7bf076a21cb5928d443d2a13b67481604051610c1a9190612d8c565b600281015161ffff8116600314610aae5781604051639a6d49cd60e01b81526004016109fd9190612125565b61187f61208e565b60408051808201909152600080825260208201526000806118b633604089013560608a01356118b160208c018c612590565b611d63565b915091506000806118c789846114ba565b90925090506118f36118dc60208b018b612590565b83836118ed368d90038d018d612e17565b8b611d89565b60408051808201909152858152602080820186905282519298509096503391907f85496b760a4b7f8d66384b9df21b381f5d1b1e79f229a47aaf4c232edc2fe59a90611941908d018d612590565b6040805163ffffffff909216825260208201899052810187905260600160405180910390a350505050935093915050565b6001600160a01b03841661199c5760405163e602df0560e01b8152600060048201526024016109fd565b6001600160a01b0383166119c657604051634a1406b160e11b8152600060048201526024016109fd565b6001600160a01b03808516600090815260066020908152604080832093871683529290522082905580156113d357826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051611a3991815260200190565b60405180910390a350505050565b60007f0000000000000000000000000000000000000000000000000000000000000000611a748184612e5f565b6108df9190612e81565b6000611a8d6020828486612914565b610a9591612e98565b6000611aa6602860208486612914565b611aaf91612eb6565b60c01c9392505050565b60006108df7f00000000000000000000000000000000000000000000000000000000000000006001600160401b038416612e81565b60006001600160a01b038416611b045761dead93505b611b0e84846116be565b509092915050565b6060611b258260288186612914565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929695505050505050565b606084848484604051602001611b7a9493929190612ee6565b6040516020818303038152906040529050949350505050565b6001600160a01b038316611bbe578060076000828254611bb39190612f35565b90915550611c309050565b6001600160a01b03831660009081526005602052604090205481811015611c115760405163391434e360e21b81526001600160a01b038516600482015260248101829052604481018390526064016109fd565b6001600160a01b03841660009081526005602052604090209082900390555b6001600160a01b038216611c4c57600780548290039055611c6b565b6001600160a01b03821660009081526005602052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611cb091815260200190565b60405180910390a3505050565b60006108df7f000000000000000000000000000000000000000000000000000000000000000083612e5f565b8051606090151580611d32578484604051602001611d1e92919091825260c01b6001600160c01b031916602082015260280190565b604051602081830303815290604052611d59565b84843385604051602001611d499493929190612f48565b6040516020818303038152906040525b9150935093915050565b600080611d7185858561117c565b9092509050611d808683611e94565b94509492505050565b611d9161208e565b6000611da08460000151611eca565b602085015190915015611dba57611dba8460200151611ef2565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632637a450826040518060a001604052808b63ffffffff168152602001611e0a8c6111b8565b81526020018a815260200189815260200160008960200151111515815250866040518463ffffffff1660e01b8152600401611e46929190612bb8565b60806040518083038185885af1158015611e64573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611e899190612f8b565b979650505050505050565b6001600160a01b038216611ebe57604051634b637e8f60e11b8152600060048201526024016109fd565b610aae82600083611b93565b6000813414611eee576040516304fb820960e51b81523460048201526024016109fd565b5090565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e4fe1d946040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f769190612fd5565b90506001600160a01b038116611f9f576040516329b99a9560e11b815260040160405180910390fd5b6040805133602482018190527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0381811660448501526064808501889052855180860390910181526084909401909452602080840180516001600160e01b03166323b872dd60e01b1781528451610aae9688169589936113d393889360009283929091839182885af180612040576040513d6000823e3d81fd5b50506000513d91508115612058578060011415612065565b6001600160a01b0384163b155b156113d357604051635274afe760e01b81526001600160a01b03851660048201526024016109fd565b60405180606001604052806000801916815260200160006001600160401b031681526020016120d0604051806040016040528060008152602001600081525090565b905290565b60005b838110156120f05781810151838201526020016120d8565b50506000910152565b600081518084526121118160208601602086016120d5565b601f01601f19169290920160200192915050565b602081526000610a9560208301846120f9565b6001600160a01b038116811461113157600080fd5b6000806040838503121561216057600080fd5b823561216b81612138565b946020939093013593505050565b600060e0828403121561218b57600080fd5b50919050565b6000602082840312156121a357600080fd5b81356001600160401b038111156121b957600080fd5b610c4684828501612179565b8351815260208085015190820152600060a08201604060a0604085015281865180845260c08601915060c08160051b8701019350602080890160005b838110156122405788870360bf1901855281518051885283015183880187905261222d878901826120f9565b9750509382019390820190600101612201565b50508751606088015250505060208501516080850152509050610c46565b60006060828403121561218b57600080fd5b60008083601f84011261228257600080fd5b5081356001600160401b0381111561229957600080fd5b6020830191508360208285010111156122b157600080fd5b9250929050565b600080600080600080600060e0888a0312156122d357600080fd5b6122dd898961225e565b96506060880135955060808801356001600160401b038082111561230057600080fd5b61230c8b838c01612270565b909750955060a08a0135915061232182612138565b90935060c0890135908082111561233757600080fd5b506123448a828b01612270565b989b979a50959850939692959293505050565b60008060006060848603121561236c57600080fd5b833561237781612138565b9250602084013561238781612138565b929592945050506040919091013590565b803563ffffffff811681146123ac57600080fd5b919050565b600080604083850312156123c457600080fd5b61216b83612398565b801515811461113157600080fd5b600080604083850312156123ee57600080fd5b82356001600160401b0381111561240457600080fd5b61241085828601612179565b9250506020830135612421816123cd565b809150509250929050565b8151815260208083015190820152604081016108df565b803561ffff811681146123ac57600080fd5b6000806040838503121561246857600080fd5b61247183612398565b915061247f60208401612443565b90509250929050565b60006020828403121561249a57600080fd5b8135610a9581612138565b60008060008060a085870312156124bb57600080fd5b6124c5868661225e565b935060608501356001600160401b038111156124e057600080fd5b6124ec87828801612270565b909450925050608085013561250081612138565b939692955090935050565b60008083601f84011261251d57600080fd5b5081356001600160401b0381111561253457600080fd5b6020830191508360208260051b85010111156122b157600080fd5b6000806020838503121561256257600080fd5b82356001600160401b0381111561257857600080fd5b6125848582860161250b565b90969095509350505050565b6000602082840312156125a257600080fd5b610a9582612398565b600080600080606085870312156125c157600080fd5b6125ca85612398565b93506125d860208601612443565b925060408501356001600160401b038111156125f357600080fd5b6125ff87828801612270565b95989497509550505050565b6000806000838503608081121561262157600080fd5b84356001600160401b0381111561263757600080fd5b61264387828801612179565b9450506040601f198201121561265857600080fd5b50602084019150606084013561266d81612138565b809150509250925092565b600060c082019050835182526001600160401b03602085015116602083015260408401516126b3604084018280518252602090810151910152565b5082516080830152602083015160a0830152610a95565b600080604083850312156126dd57600080fd5b82356126e881612138565b9150602083013561242181612138565b60006060828403121561270a57600080fd5b610a95838361225e565b600181811c9082168061272857607f821691505b60208210810361218b57634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b038111828210171561278057612780612748565b60405290565b604080519081016001600160401b038111828210171561278057612780612748565b604051601f8201601f191681016001600160401b03811182821017156127d0576127d0612748565b604052919050565b60006001600160401b038211156127f1576127f1612748565b50601f01601f191660200190565b60006001600160401b038084111561281957612819612748565b8360051b602061282a8183016127a8565b86815291850191818101903684111561284257600080fd5b865b848110156129085780358681111561285c5760008081fd5b880160603682900312156128705760008081fd5b61287861275e565b61288182612398565b815261288e868301612443565b86820152604080830135898111156128a65760008081fd5b929092019136601f8401126128bb5760008081fd5b82356128ce6128c9826127d8565b6127a8565b81815236898387010111156128e35760008081fd5b818986018a830137600091810189019190915290820152845250918301918301612844565b50979650505050505050565b6000808585111561292457600080fd5b8386111561293157600080fd5b5050820193919092039150565b600084516129508184602089016120d5565b8201838582376000930192835250909392505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b602081526000610c46602083018486612966565b634e487b7160e01b600052603260045260246000fd5b6000823561013e198336030181126129d057600080fd5b9190910192915050565b6000808335601e198436030181126129f157600080fd5b8301803591506001600160401b03821115612a0b57600080fd5b6020019150368190038213156122b157600080fd5b6001600160401b038116811461113157600080fd5b63ffffffff612a4389612398565b1681526020880135602082015260006040890135612a6081612a20565b6001600160401b03811660408401525087606083015260e06080830152612a8b60e083018789612966565b6001600160a01b03861660a084015282810360c0840152612aad818587612966565b9a9950505050505050505050565b600060208284031215612acd57600080fd5b81516001600160401b03811115612ae357600080fd5b8201601f81018413612af457600080fd5b8051612b026128c9826127d8565b818152856020838501011115612b1757600080fd5b6116b58260208301602086016120d5565b600060208284031215612b3a57600080fd5b8135610a9581612a20565b60018060a01b038516815283602082015261ffff83166040820152608060608201526000610b0f60808301846120f9565b604081526000612b8960408301856120f9565b82810360208401526116b581856120f9565b600060208284031215612bad57600080fd5b8151610a95816123cd565b6040815263ffffffff8351166040820152602083015160608201526000604084015160a06080840152612bee60e08401826120f9565b90506060850151603f198483030160a0850152612c0b82826120f9565b60809690960151151560c08501525050506001600160a01b039190911660209091015290565b600060408284031215612c4357600080fd5b612c4b612786565b9050815181526020820151602082015292915050565b600060408284031215612c7357600080fd5b610a958383612c31565b601f821115611177576000816000526020600020601f850160051c81016020861015612ca65750805b601f850160051c820191505b81811015612cc557828155600101612cb2565b505050505050565b81516001600160401b03811115612ce657612ce6612748565b612cfa81612cf48454612714565b84612c7d565b602080601f831160018114612d2f5760008415612d175750858301515b600019600386901b1c1916600185901b178555612cc5565b600085815260208120601f198616915b82811015612d5e57888601518255948401946001909101908401612d3f565b5085821015612d7c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b83811015612e0957888303603f190185528151805163ffffffff1684528781015161ffff16888501528601516060878501819052612df5818601836120f9565b968901969450505090860190600101612db5565b509098975050505050505050565b600060408284031215612e2957600080fd5b612e31612786565b82358152602083013560208201528091505092915050565b634e487b7160e01b600052601160045260246000fd5b600082612e7c57634e487b7160e01b600052601260045260246000fd5b500490565b80820281158282048414176108df576108df612e49565b803560208310156108df57600019602084900360031b1b1692915050565b6001600160c01b03198135818116916008851015612ede5780818660080360031b1b83161692505b505092915050565b6001600160401b0360c01b8560c01b16815263ffffffff60e01b8460e01b16600882015282600c82015260008251612f2581602c8501602087016120d5565b91909101602c0195945050505050565b808201808211156108df576108df612e49565b8481526001600160401b0360c01b8460c01b16602082015282602882015260008251612f7b8160488501602087016120d5565b9190910160480195945050505050565b600060808284031215612f9d57600080fd5b612fa561275e565b825181526020830151612fb781612a20565b6020820152612fc98460408501612c31565b60408201529392505050565b600060208284031215612fe757600080fd5b8151610a958161213856fea2646970667358221220645fbf12560a7699955d058d106f0e740ad9cbc14ee055c7fe136365795a23de64736f6c63430008160033", - "opcodes": "PUSH1 0xC0 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x36A7 CODESIZE SUB DUP1 PUSH3 0x36A7 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x34 SWAP2 PUSH3 0x2DA JUMP JUMPDEST DUP4 DUP4 DUP4 DUP4 DUP4 DUP4 DUP4 DUP4 DUP4 DUP4 PUSH1 0x12 DUP5 DUP5 DUP2 DUP2 DUP2 DUP2 DUP14 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH3 0x76 JUMPI PUSH1 0x40 MLOAD PUSH4 0x1E4FBDF7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH3 0x81 DUP2 PUSH3 0x1A0 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND PUSH1 0x80 MSTORE DUP2 AND PUSH3 0xB0 JUMPI PUSH1 0x40 MLOAD PUSH4 0x2D618D81 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x80 MLOAD PUSH1 0x40 MLOAD PUSH4 0xCA5EB5E1 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP1 SWAP2 AND SWAP1 PUSH4 0xCA5EB5E1 SWAP1 PUSH1 0x24 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH3 0xF8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH3 0x10D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP POP POP PUSH3 0x125 PUSH3 0x1F0 PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST PUSH1 0xFF AND DUP4 PUSH1 0xFF AND LT ISZERO PUSH3 0x14C JUMPI PUSH1 0x40 MLOAD PUSH4 0x1E9714B PUSH1 0xE4 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH3 0x159 PUSH1 0x6 DUP5 PUSH3 0x37F JUMP JUMPDEST PUSH3 0x166 SWAP1 PUSH1 0xA PUSH3 0x49E JUMP JUMPDEST PUSH1 0xA0 MSTORE POP PUSH1 0x8 SWAP2 POP PUSH3 0x17C SWAP1 POP DUP4 DUP3 PUSH3 0x547 JUMP JUMPDEST POP PUSH1 0x9 PUSH3 0x18B DUP3 DUP3 PUSH3 0x547 JUMP JUMPDEST POP POP POP POP POP POP POP POP POP POP POP POP POP POP POP PUSH3 0x613 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND DUP2 OR DUP5 SSTORE PUSH1 0x40 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP3 DUP4 SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x6 SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH3 0x21D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH3 0x23A JUMPI PUSH3 0x23A PUSH3 0x1F5 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP4 ADD PUSH1 0x1F NOT SWAP1 DUP2 AND PUSH1 0x3F ADD AND DUP2 ADD SWAP1 DUP3 DUP3 GT DUP2 DUP4 LT OR ISZERO PUSH3 0x265 JUMPI PUSH3 0x265 PUSH3 0x1F5 JUMP JUMPDEST DUP2 PUSH1 0x40 MSTORE DUP4 DUP2 MSTORE PUSH1 0x20 SWAP3 POP DUP7 PUSH1 0x20 DUP6 DUP9 ADD ADD GT ISZERO PUSH3 0x283 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 SWAP2 POP JUMPDEST DUP4 DUP3 LT ISZERO PUSH3 0x2A7 JUMPI DUP6 DUP3 ADD DUP4 ADD MLOAD DUP2 DUP4 ADD DUP5 ADD MSTORE SWAP1 DUP3 ADD SWAP1 PUSH3 0x288 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP6 DUP4 ADD ADD MSTORE DUP1 SWAP5 POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x2D5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x80 DUP6 DUP8 SUB SLT ISZERO PUSH3 0x2F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH3 0x309 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH3 0x317 DUP9 DUP4 DUP10 ADD PUSH3 0x20B JUMP JUMPDEST SWAP6 POP PUSH1 0x20 DUP8 ADD MLOAD SWAP2 POP DUP1 DUP3 GT ISZERO PUSH3 0x32E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH3 0x33D DUP8 DUP3 DUP9 ADD PUSH3 0x20B JUMP JUMPDEST SWAP4 POP POP PUSH3 0x34E PUSH1 0x40 DUP7 ADD PUSH3 0x2BD JUMP JUMPDEST SWAP2 POP PUSH3 0x35E PUSH1 0x60 DUP7 ADD PUSH3 0x2BD JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0xFF DUP3 DUP2 AND DUP3 DUP3 AND SUB SWAP1 DUP2 GT ISZERO PUSH3 0x39B JUMPI PUSH3 0x39B PUSH3 0x369 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 JUMPDEST DUP1 DUP6 GT ISZERO PUSH3 0x3E2 JUMPI DUP2 PUSH1 0x0 NOT DIV DUP3 GT ISZERO PUSH3 0x3C6 JUMPI PUSH3 0x3C6 PUSH3 0x369 JUMP JUMPDEST DUP1 DUP6 AND ISZERO PUSH3 0x3D4 JUMPI SWAP2 DUP2 MUL SWAP2 JUMPDEST SWAP4 DUP5 SHR SWAP4 SWAP1 DUP1 MUL SWAP1 PUSH3 0x3A6 JUMP JUMPDEST POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH3 0x3FB JUMPI POP PUSH1 0x1 PUSH3 0x39B JUMP JUMPDEST DUP2 PUSH3 0x40A JUMPI POP PUSH1 0x0 PUSH3 0x39B JUMP JUMPDEST DUP2 PUSH1 0x1 DUP2 EQ PUSH3 0x423 JUMPI PUSH1 0x2 DUP2 EQ PUSH3 0x42E JUMPI PUSH3 0x44E JUMP JUMPDEST PUSH1 0x1 SWAP2 POP POP PUSH3 0x39B JUMP JUMPDEST PUSH1 0xFF DUP5 GT ISZERO PUSH3 0x442 JUMPI PUSH3 0x442 PUSH3 0x369 JUMP JUMPDEST POP POP PUSH1 0x1 DUP3 SHL PUSH3 0x39B JUMP JUMPDEST POP PUSH1 0x20 DUP4 LT PUSH2 0x133 DUP4 LT AND PUSH1 0x4E DUP5 LT PUSH1 0xB DUP5 LT AND OR ISZERO PUSH3 0x473 JUMPI POP DUP2 DUP2 EXP PUSH3 0x39B JUMP JUMPDEST PUSH3 0x47F DUP4 DUP4 PUSH3 0x3A1 JUMP JUMPDEST DUP1 PUSH1 0x0 NOT DIV DUP3 GT ISZERO PUSH3 0x496 JUMPI PUSH3 0x496 PUSH3 0x369 JUMP JUMPDEST MUL SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH3 0x4AF PUSH1 0xFF DUP5 AND DUP4 PUSH3 0x3EA JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH3 0x4CB JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 SUB PUSH3 0x4EC JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x1F DUP3 GT ISZERO PUSH3 0x542 JUMPI PUSH1 0x0 DUP2 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 PUSH1 0x1F DUP6 ADD PUSH1 0x5 SHR DUP2 ADD PUSH1 0x20 DUP7 LT ISZERO PUSH3 0x51D JUMPI POP DUP1 JUMPDEST PUSH1 0x1F DUP6 ADD PUSH1 0x5 SHR DUP3 ADD SWAP2 POP JUMPDEST DUP2 DUP2 LT ISZERO PUSH3 0x53E JUMPI DUP3 DUP2 SSTORE PUSH1 0x1 ADD PUSH3 0x529 JUMP JUMPDEST POP POP POP JUMPDEST POP POP POP JUMP JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH3 0x563 JUMPI PUSH3 0x563 PUSH3 0x1F5 JUMP JUMPDEST PUSH3 0x57B DUP2 PUSH3 0x574 DUP5 SLOAD PUSH3 0x4B6 JUMP JUMPDEST DUP5 PUSH3 0x4F2 JUMP JUMPDEST PUSH1 0x20 DUP1 PUSH1 0x1F DUP4 GT PUSH1 0x1 DUP2 EQ PUSH3 0x5B3 JUMPI PUSH1 0x0 DUP5 ISZERO PUSH3 0x59A JUMPI POP DUP6 DUP4 ADD MLOAD JUMPDEST PUSH1 0x0 NOT PUSH1 0x3 DUP7 SWAP1 SHL SHR NOT AND PUSH1 0x1 DUP6 SWAP1 SHL OR DUP6 SSTORE PUSH3 0x53E JUMP JUMPDEST PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x20 DUP2 KECCAK256 PUSH1 0x1F NOT DUP7 AND SWAP2 JUMPDEST DUP3 DUP2 LT ISZERO PUSH3 0x5E4 JUMPI DUP9 DUP7 ADD MLOAD DUP3 SSTORE SWAP5 DUP5 ADD SWAP5 PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 DUP5 ADD PUSH3 0x5C3 JUMP JUMPDEST POP DUP6 DUP3 LT ISZERO PUSH3 0x603 JUMPI DUP8 DUP6 ADD MLOAD PUSH1 0x0 NOT PUSH1 0x3 DUP9 SWAP1 SHL PUSH1 0xF8 AND SHR NOT AND DUP2 SSTORE JUMPDEST POP POP POP POP POP PUSH1 0x1 SWAP1 DUP2 SHL ADD SWAP1 SSTORE POP JUMP JUMPDEST PUSH1 0x80 MLOAD PUSH1 0xA0 MLOAD PUSH2 0x3028 PUSH3 0x67F PUSH1 0x0 CODECOPY PUSH1 0x0 DUP2 DUP2 PUSH2 0x649 ADD MSTORE DUP2 DUP2 PUSH2 0x1A4B ADD MSTORE DUP2 DUP2 PUSH2 0x1AC0 ADD MSTORE PUSH2 0x1CC4 ADD MSTORE PUSH1 0x0 DUP2 DUP2 PUSH2 0x508 ADD MSTORE DUP2 DUP2 PUSH2 0x9B8 ADD MSTORE DUP2 DUP2 PUSH2 0x1012 ADD MSTORE DUP2 DUP2 PUSH2 0x1289 ADD MSTORE DUP2 DUP2 PUSH2 0x15F3 ADD MSTORE DUP2 DUP2 PUSH2 0x1DBC ADD MSTORE DUP2 DUP2 PUSH2 0x1EF6 ADD MSTORE PUSH2 0x1FAD ADD MSTORE PUSH2 0x3028 PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x25C JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x715018A6 GT PUSH2 0x144 JUMPI DUP1 PUSH4 0xBB0B6A53 GT PUSH2 0xB6 JUMPI DUP1 PUSH4 0xD045A0DC GT PUSH2 0x7A JUMPI DUP1 PUSH4 0xD045A0DC EQ PUSH2 0x780 JUMPI DUP1 PUSH4 0xD4243885 EQ PUSH2 0x793 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x7B3 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x7F9 JUMPI DUP1 PUSH4 0xFC0C546A EQ PUSH2 0x48C JUMPI DUP1 PUSH4 0xFF7BD03D EQ PUSH2 0x819 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xBB0B6A53 EQ PUSH2 0x6DF JUMPI DUP1 PUSH4 0xBC70B354 EQ PUSH2 0x70C JUMPI DUP1 PUSH4 0xBD815DB0 EQ PUSH2 0x72C JUMPI DUP1 PUSH4 0xC7C7F5B3 EQ PUSH2 0x73F JUMPI DUP1 PUSH4 0xCA5EB5E1 EQ PUSH2 0x760 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x95D89B41 GT PUSH2 0x108 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x622 JUMPI DUP1 PUSH4 0x963EFCAA EQ PUSH2 0x637 JUMPI DUP1 PUSH4 0x9F68B964 EQ PUSH2 0x66B JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x67F JUMPI DUP1 PUSH4 0xB731EA0A EQ PUSH2 0x69F JUMPI DUP1 PUSH4 0xB98BD070 EQ PUSH2 0x6BF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x715018A6 EQ PUSH2 0x580 JUMPI DUP1 PUSH4 0x7D25A05E EQ PUSH2 0x595 JUMPI DUP1 PUSH4 0x82413EAC EQ PUSH2 0x5D0 JUMPI DUP1 PUSH4 0x857749B0 EQ PUSH2 0x5F0 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x604 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x23B872DD GT PUSH2 0x1DD JUMPI DUP1 PUSH4 0x52AE2879 GT PUSH2 0x1A1 JUMPI DUP1 PUSH4 0x52AE2879 EQ PUSH2 0x48C JUMPI DUP1 PUSH4 0x5535D461 EQ PUSH2 0x49F JUMPI DUP1 PUSH4 0x5A0DFE4D EQ PUSH2 0x4BF JUMPI DUP1 PUSH4 0x5E280F11 EQ PUSH2 0x4F6 JUMPI DUP1 PUSH4 0x6FC1B31E EQ PUSH2 0x52A JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x54A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x23B872DD EQ PUSH2 0x3DD JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x3FD JUMPI DUP1 PUSH4 0x3400288B EQ PUSH2 0x41F JUMPI DUP1 PUSH4 0x3B6F743B EQ PUSH2 0x43F JUMPI DUP1 PUSH4 0x40C10F19 EQ PUSH2 0x46C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x134D4F25 GT PUSH2 0x224 JUMPI DUP1 PUSH4 0x134D4F25 EQ PUSH2 0x338 JUMPI DUP1 PUSH4 0x156A0D0F EQ PUSH2 0x360 JUMPI DUP1 PUSH4 0x17442B70 EQ PUSH2 0x387 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x3A9 JUMPI DUP1 PUSH4 0x1F5E1334 EQ PUSH2 0x3C8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x261 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x28C JUMPI DUP1 PUSH4 0xD35B415 EQ PUSH2 0x2BC JUMPI DUP1 PUSH4 0x111ECDAD EQ PUSH2 0x2EB JUMPI DUP1 PUSH4 0x13137D65 EQ PUSH2 0x323 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x26D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x276 PUSH2 0x839 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x283 SWAP2 SWAP1 PUSH2 0x2125 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x298 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2AC PUSH2 0x2A7 CALLDATASIZE PUSH1 0x4 PUSH2 0x214D JUMP JUMPDEST PUSH2 0x8CB JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x283 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2C8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2DC PUSH2 0x2D7 CALLDATASIZE PUSH1 0x4 PUSH2 0x2191 JUMP JUMPDEST PUSH2 0x8E5 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x283 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x21C5 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2F7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 SLOAD PUSH2 0x30B SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x283 JUMP JUMPDEST PUSH2 0x336 PUSH2 0x331 CALLDATASIZE PUSH1 0x4 PUSH2 0x22B8 JUMP JUMPDEST PUSH2 0x9B6 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x344 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x34D PUSH1 0x2 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x283 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x36C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH3 0xB9270B PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP3 ADD MSTORE ADD PUSH2 0x283 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x393 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 DUP3 ADD MSTORE ADD PUSH2 0x283 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3B5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x7 SLOAD JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x283 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3D4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x34D PUSH1 0x1 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3E9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2AC PUSH2 0x3F8 CALLDATASIZE PUSH1 0x4 PUSH2 0x2357 JUMP JUMPDEST PUSH2 0xA76 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x409 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x12 JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x283 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x42B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x336 PUSH2 0x43A CALLDATASIZE PUSH1 0x4 PUSH2 0x23B1 JUMP JUMPDEST PUSH2 0xA9C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x44B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x45F PUSH2 0x45A CALLDATASIZE PUSH1 0x4 PUSH2 0x23DB JUMP JUMPDEST PUSH2 0xAB2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x283 SWAP2 SWAP1 PUSH2 0x242C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x478 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x336 PUSH2 0x487 CALLDATASIZE PUSH1 0x4 PUSH2 0x214D JUMP JUMPDEST PUSH2 0xB19 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x498 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP ADDRESS PUSH2 0x30B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x276 PUSH2 0x4BA CALLDATASIZE PUSH1 0x4 PUSH2 0x2455 JUMP JUMPDEST PUSH2 0xB23 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4CB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2AC PUSH2 0x4DA CALLDATASIZE PUSH1 0x4 PUSH2 0x23B1 JUMP JUMPDEST PUSH4 0xFFFFFFFF SWAP2 SWAP1 SWAP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD EQ SWAP1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x502 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x30B PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x536 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x336 PUSH2 0x545 CALLDATASIZE PUSH1 0x4 PUSH2 0x2488 JUMP JUMPDEST PUSH2 0xBC8 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x556 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3BA PUSH2 0x565 CALLDATASIZE PUSH1 0x4 PUSH2 0x2488 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x58C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x336 PUSH2 0xC25 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5A1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x5B8 PUSH2 0x5B0 CALLDATASIZE PUSH1 0x4 PUSH2 0x23B1 JUMP JUMPDEST PUSH1 0x0 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x283 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5DC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2AC PUSH2 0x5EB CALLDATASIZE PUSH1 0x4 PUSH2 0x24A5 JUMP JUMPDEST PUSH2 0xC39 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5FC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x6 PUSH2 0x40D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x610 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x30B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x62E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x276 PUSH2 0xC4E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x643 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3BA PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x677 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 PUSH2 0x2AC JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x68B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2AC PUSH2 0x69A CALLDATASIZE PUSH1 0x4 PUSH2 0x214D JUMP JUMPDEST PUSH2 0xC5D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x2 SLOAD PUSH2 0x30B SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6CB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x336 PUSH2 0x6DA CALLDATASIZE PUSH1 0x4 PUSH2 0x254F JUMP JUMPDEST PUSH2 0xC6B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6EB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3BA PUSH2 0x6FA CALLDATASIZE PUSH1 0x4 PUSH2 0x2590 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x718 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x276 PUSH2 0x727 CALLDATASIZE PUSH1 0x4 PUSH2 0x25AB JUMP JUMPDEST PUSH2 0xC85 JUMP JUMPDEST PUSH2 0x336 PUSH2 0x73A CALLDATASIZE PUSH1 0x4 PUSH2 0x254F JUMP JUMPDEST PUSH2 0xE2D JUMP JUMPDEST PUSH2 0x752 PUSH2 0x74D CALLDATASIZE PUSH1 0x4 PUSH2 0x260B JUMP JUMPDEST PUSH2 0xFB7 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x283 SWAP3 SWAP2 SWAP1 PUSH2 0x2678 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x76C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x336 PUSH2 0x77B CALLDATASIZE PUSH1 0x4 PUSH2 0x2488 JUMP JUMPDEST PUSH2 0xFEB JUMP JUMPDEST PUSH2 0x336 PUSH2 0x78E CALLDATASIZE PUSH1 0x4 PUSH2 0x22B8 JUMP JUMPDEST PUSH2 0x1071 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x79F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x336 PUSH2 0x7AE CALLDATASIZE PUSH1 0x4 PUSH2 0x2488 JUMP JUMPDEST PUSH2 0x10A0 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7BF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3BA PUSH2 0x7CE CALLDATASIZE PUSH1 0x4 PUSH2 0x26CA JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x805 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x336 PUSH2 0x814 CALLDATASIZE PUSH1 0x4 PUSH2 0x2488 JUMP JUMPDEST PUSH2 0x10F6 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x825 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2AC PUSH2 0x834 CALLDATASIZE PUSH1 0x4 PUSH2 0x26F8 JUMP JUMPDEST PUSH2 0x1134 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x8 DUP1 SLOAD PUSH2 0x848 SWAP1 PUSH2 0x2714 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x874 SWAP1 PUSH2 0x2714 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x8C1 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x896 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x8C1 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x8A4 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 CALLER PUSH2 0x8D9 DUP2 DUP6 DUP6 PUSH2 0x116A JUMP JUMPDEST PUSH1 0x1 SWAP2 POP POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x60 PUSH2 0x918 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB PUSH1 0x20 DUP1 DUP5 ADD DUP3 SWAP1 MSTORE DUP5 MLOAD DUP4 DUP2 MSTORE SWAP1 DUP2 ADD SWAP1 SWAP5 MSTORE SWAP2 SWAP6 POP SWAP2 DUP3 PUSH2 0x973 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE PUSH1 0x60 PUSH1 0x20 DUP3 ADD MSTORE DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x94B JUMPI SWAP1 POP JUMPDEST POP SWAP4 POP PUSH1 0x0 DUP1 PUSH2 0x998 PUSH1 0x40 DUP10 ADD CALLDATALOAD PUSH1 0x60 DUP11 ADD CALLDATALOAD PUSH2 0x993 PUSH1 0x20 DUP13 ADD DUP13 PUSH2 0x2590 JUMP JUMPDEST PUSH2 0x117C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE SWAP7 SWAP9 SWAP6 SWAP8 POP POP POP POP POP POP JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xA06 JUMPI PUSH1 0x40 MLOAD PUSH4 0x91AC5E4F PUSH1 0xE0 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x20 DUP8 ADD DUP1 CALLDATALOAD SWAP1 PUSH2 0xA20 SWAP1 PUSH2 0xA1B SWAP1 DUP11 PUSH2 0x2590 JUMP JUMPDEST PUSH2 0x11B8 JUMP JUMPDEST EQ PUSH2 0xA5E JUMPI PUSH2 0xA32 PUSH1 0x20 DUP9 ADD DUP9 PUSH2 0x2590 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x309AFAF3 PUSH1 0xE2 SHL DUP2 MSTORE PUSH4 0xFFFFFFFF SWAP1 SWAP2 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x20 DUP9 ADD CALLDATALOAD PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 ADD PUSH2 0x9FD JUMP JUMPDEST PUSH2 0xA6D DUP8 DUP8 DUP8 DUP8 DUP8 DUP8 DUP8 PUSH2 0x11F4 JUMP JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 CALLER PUSH2 0xA84 DUP6 DUP3 DUP6 PUSH2 0x135B JUMP JUMPDEST PUSH2 0xA8F DUP6 DUP6 DUP6 PUSH2 0x13D9 JUMP JUMPDEST PUSH1 0x1 SWAP2 POP POP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0xAA4 PUSH2 0x1438 JUMP JUMPDEST PUSH2 0xAAE DUP3 DUP3 PUSH2 0x1465 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0xAE2 PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH1 0x60 DUP7 ADD CALLDATALOAD PUSH2 0x993 PUSH1 0x20 DUP9 ADD DUP9 PUSH2 0x2590 JUMP JUMPDEST SWAP2 POP POP PUSH1 0x0 DUP1 PUSH2 0xAF2 DUP7 DUP5 PUSH2 0x14BA JUMP JUMPDEST SWAP1 SWAP3 POP SWAP1 POP PUSH2 0xB0F PUSH2 0xB07 PUSH1 0x20 DUP9 ADD DUP9 PUSH2 0x2590 JUMP JUMPDEST DUP4 DUP4 DUP9 PUSH2 0x15DD JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0xAAE DUP3 DUP3 PUSH2 0x16BE JUMP JUMPDEST PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 DUP1 SLOAD PUSH2 0xB47 SWAP1 PUSH2 0x2714 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0xB73 SWAP1 PUSH2 0x2714 JUMP JUMPDEST DUP1 ISZERO PUSH2 0xBC0 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xB95 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xBC0 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xBA3 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 JUMP JUMPDEST PUSH2 0xBD0 PUSH2 0x1438 JUMP JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH32 0xF0BE4F1E87349231D80C36B33F9E8639658EEAF474014DEE15A3E6A4D4414197 SWAP1 PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH2 0xC2D PUSH2 0x1438 JUMP JUMPDEST PUSH2 0xC37 PUSH1 0x0 PUSH2 0x16F4 JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND ADDRESS EQ JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x9 DUP1 SLOAD PUSH2 0x848 SWAP1 PUSH2 0x2714 JUMP JUMPDEST PUSH1 0x0 CALLER PUSH2 0x8D9 DUP2 DUP6 DUP6 PUSH2 0x13D9 JUMP JUMPDEST PUSH2 0xC73 PUSH2 0x1438 JUMP JUMPDEST PUSH2 0xAAE PUSH2 0xC80 DUP3 DUP5 PUSH2 0x27FF JUMP JUMPDEST PUSH2 0x1744 JUMP JUMPDEST PUSH4 0xFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH2 0xFFFF DUP8 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 DUP1 SLOAD PUSH1 0x60 SWAP3 SWAP2 SWAP1 PUSH2 0xCB9 SWAP1 PUSH2 0x2714 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0xCE5 SWAP1 PUSH2 0x2714 JUMP JUMPDEST DUP1 ISZERO PUSH2 0xD32 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xD07 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xD32 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xD15 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP DUP1 MLOAD PUSH1 0x0 SUB PUSH2 0xD82 JUMPI DUP4 DUP4 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP5 POP PUSH2 0xC46 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP4 SWAP1 SUB PUSH2 0xD92 JUMPI SWAP1 POP PUSH2 0xC46 JUMP JUMPDEST PUSH1 0x2 DUP4 LT PUSH2 0xE10 JUMPI PUSH2 0xDD9 DUP5 DUP5 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x184B SWAP3 POP POP POP JUMP JUMPDEST DUP1 PUSH2 0xDE7 DUP5 PUSH1 0x2 DUP2 DUP9 PUSH2 0x2914 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0xDF9 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x293E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP2 POP POP PUSH2 0xC46 JUMP JUMPDEST DUP4 DUP4 PUSH1 0x40 MLOAD PUSH4 0x9A6D49CD PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x9FD SWAP3 SWAP2 SWAP1 PUSH2 0x298F JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xF36 JUMPI CALLDATASIZE DUP4 DUP4 DUP4 DUP2 DUP2 LT PUSH2 0xE4B JUMPI PUSH2 0xE4B PUSH2 0x29A3 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL DUP2 ADD SWAP1 PUSH2 0xE5D SWAP2 SWAP1 PUSH2 0x29B9 JUMP JUMPDEST SWAP1 POP PUSH2 0xE90 PUSH2 0xE6F PUSH1 0x20 DUP4 ADD DUP4 PUSH2 0x2590 JUMP JUMPDEST PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH4 0xFFFFFFFF SWAP2 SWAP1 SWAP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD EQ SWAP1 JUMP JUMPDEST PUSH2 0xE9A JUMPI POP PUSH2 0xF2E JUMP JUMPDEST ADDRESS PUSH4 0xD045A0DC PUSH1 0xC0 DUP4 ADD CALLDATALOAD DUP4 PUSH1 0xA0 DUP2 ADD CALLDATALOAD PUSH2 0xEB9 PUSH2 0x100 DUP4 ADD DUP4 PUSH2 0x29DA JUMP JUMPDEST PUSH2 0xECA PUSH2 0x100 DUP10 ADD PUSH1 0xE0 DUP11 ADD PUSH2 0x2488 JUMP JUMPDEST PUSH2 0xED8 PUSH2 0x120 DUP11 ADD DUP11 PUSH2 0x29DA JUMP JUMPDEST PUSH1 0x40 MLOAD DUP10 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xEFA SWAP8 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x2A35 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP9 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xF13 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xF27 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP JUMPDEST PUSH1 0x1 ADD PUSH2 0xE30 JUMP JUMPDEST POP CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x8E9E7099 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xF75 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0xF9D SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x2ABB JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x8351EEA7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x9FD SWAP2 SWAP1 PUSH2 0x2125 JUMP JUMPDEST PUSH2 0xFBF PUSH2 0x208E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0xFDE DUP6 DUP6 DUP6 PUSH2 0x1877 JUMP JUMPDEST SWAP2 POP SWAP2 POP JUMPDEST SWAP4 POP SWAP4 SWAP2 POP POP JUMP JUMPDEST PUSH2 0xFF3 PUSH2 0x1438 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xCA5EB5E1 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH32 0x0 AND SWAP1 PUSH4 0xCA5EB5E1 SWAP1 PUSH1 0x24 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1056 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x106A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST CALLER ADDRESS EQ PUSH2 0x1091 JUMPI PUSH1 0x40 MLOAD PUSH4 0x29A949D PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xA6D DUP8 DUP8 DUP8 DUP8 DUP8 DUP8 DUP8 PUSH2 0xA5E JUMP JUMPDEST PUSH2 0x10A8 PUSH2 0x1438 JUMP JUMPDEST PUSH1 0x2 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH32 0xD48D879CEF83A1C0BDDA516F27B13DDB1B3F8BBAC1C9E1511BB2A659C2427760 SWAP1 PUSH1 0x20 ADD PUSH2 0xC1A JUMP JUMPDEST PUSH2 0x10FE PUSH2 0x1438 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x1128 JUMPI PUSH1 0x40 MLOAD PUSH4 0x1E4FBDF7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x9FD JUMP JUMPDEST PUSH2 0x1131 DUP2 PUSH2 0x16F4 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD DUP1 CALLDATALOAD SWAP1 PUSH1 0x1 SWAP1 DUP4 SWAP1 PUSH2 0x114C SWAP1 DUP7 PUSH2 0x2590 JUMP JUMPDEST PUSH4 0xFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD EQ SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x1177 DUP4 DUP4 DUP4 PUSH1 0x1 PUSH2 0x1972 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1188 DUP6 PUSH2 0x1A47 JUMP JUMPDEST SWAP2 POP DUP2 SWAP1 POP DUP4 DUP2 LT ISZERO PUSH2 0xFE3 JUMPI PUSH1 0x40 MLOAD PUSH4 0x71C4EFED PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x24 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0x44 ADD PUSH2 0x9FD JUMP JUMPDEST PUSH4 0xFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP1 PUSH2 0x8DF JUMPI PUSH1 0x40 MLOAD PUSH4 0xF6FF4FB7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH4 0xFFFFFFFF DUP5 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x9FD JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1206 PUSH2 0x1203 DUP8 DUP8 PUSH2 0x1A7E JUMP JUMPDEST SWAP1 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x1232 DUP3 PUSH2 0x1220 PUSH2 0x121B DUP11 DUP11 PUSH2 0x1A96 JUMP JUMPDEST PUSH2 0x1AB9 JUMP JUMPDEST PUSH2 0x122D PUSH1 0x20 DUP14 ADD DUP14 PUSH2 0x2590 JUMP JUMPDEST PUSH2 0x1AEE JUMP JUMPDEST SWAP1 POP PUSH1 0x28 DUP7 GT ISZERO PUSH2 0x12F9 JUMPI PUSH1 0x0 PUSH2 0x126F PUSH2 0x1252 PUSH1 0x60 DUP13 ADD PUSH1 0x40 DUP14 ADD PUSH2 0x2B28 JUMP JUMPDEST PUSH2 0x125F PUSH1 0x20 DUP14 ADD DUP14 PUSH2 0x2590 JUMP JUMPDEST DUP5 PUSH2 0x126A DUP13 DUP13 PUSH2 0x1B16 JUMP JUMPDEST PUSH2 0x1B61 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x3E5AC809 PUSH1 0xE1 SHL DUP2 MSTORE SWAP1 SWAP2 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND SWAP1 PUSH4 0x7CB59012 SWAP1 PUSH2 0x12C5 SWAP1 DUP7 SWAP1 DUP14 SWAP1 PUSH1 0x0 SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0x2B45 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x12DF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x12F3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP9 PUSH32 0xEFED6D3500546B29533B128A29E3A94D70788727F0507505AC12EAF2E578FD9C PUSH2 0x1332 PUSH1 0x20 DUP14 ADD DUP14 PUSH2 0x2590 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0xFFFFFFFF SWAP1 SWAP3 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP7 SWAP1 MSTORE ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP7 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH1 0x0 NOT DUP2 EQ PUSH2 0x13D3 JUMPI DUP2 DUP2 LT ISZERO PUSH2 0x13C4 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7DC7A0D9 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x44 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x64 ADD PUSH2 0x9FD JUMP JUMPDEST PUSH2 0x13D3 DUP5 DUP5 DUP5 DUP5 SUB PUSH1 0x0 PUSH2 0x1972 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x1403 JUMPI PUSH1 0x40 MLOAD PUSH4 0x4B637E8F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x0 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x9FD JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x142D JUMPI PUSH1 0x40 MLOAD PUSH4 0xEC442F05 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x9FD JUMP JUMPDEST PUSH2 0x1177 DUP4 DUP4 DUP4 PUSH2 0x1B93 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xC37 JUMPI PUSH1 0x40 MLOAD PUSH4 0x118CDAA7 PUSH1 0xE0 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x9FD JUMP JUMPDEST PUSH4 0xFFFFFFFF DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP5 SWAP1 SSTORE DUP2 MLOAD SWAP3 DUP4 MSTORE DUP3 ADD DUP4 SWAP1 MSTORE PUSH32 0x238399D427B947898EDB290F5FF0F9109849B1C3BA196A42E35F00C50A54B98B SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP JUMP JUMPDEST PUSH1 0x60 DUP1 PUSH1 0x0 PUSH2 0x1517 DUP6 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x14D0 DUP7 PUSH2 0x1CBD JUMP JUMPDEST PUSH2 0x14DD PUSH1 0xA0 DUP10 ADD DUP10 PUSH2 0x29DA JUMP JUMPDEST DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x1CE9 SWAP3 POP POP POP JUMP JUMPDEST SWAP1 SWAP4 POP SWAP1 POP PUSH1 0x0 DUP2 PUSH2 0x152A JUMPI PUSH1 0x1 PUSH2 0x152D JUMP JUMPDEST PUSH1 0x2 JUMPDEST SWAP1 POP PUSH2 0x154D PUSH2 0x153F PUSH1 0x20 DUP9 ADD DUP9 PUSH2 0x2590 JUMP JUMPDEST DUP3 PUSH2 0x727 PUSH1 0x80 DUP11 ADD DUP11 PUSH2 0x29DA JUMP JUMPDEST PUSH1 0x4 SLOAD SWAP1 SWAP4 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP1 ISZERO PUSH2 0x15D3 JUMPI PUSH1 0x40 MLOAD PUSH4 0x43A78EB PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND SWAP1 PUSH4 0x43A78EB SWAP1 PUSH2 0x1590 SWAP1 DUP9 SWAP1 DUP9 SWAP1 PUSH1 0x4 ADD PUSH2 0x2B76 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x15AD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x15D1 SWAP2 SWAP1 PUSH2 0x2B9B JUMP JUMPDEST POP JUMPDEST POP POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xDDC28C58 PUSH1 0x40 MLOAD DUP1 PUSH1 0xA0 ADD PUSH1 0x40 MSTORE DUP1 DUP9 PUSH4 0xFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1640 DUP10 PUSH2 0x11B8 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD DUP8 DUP2 MSTORE PUSH1 0x20 ADD DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP6 ISZERO ISZERO DUP2 MSTORE POP ADDRESS PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1675 SWAP3 SWAP2 SWAP1 PUSH2 0x2BB8 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1691 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x16B5 SWAP2 SWAP1 PUSH2 0x2C61 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x16E8 JUMPI PUSH1 0x40 MLOAD PUSH4 0xEC442F05 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x9FD JUMP JUMPDEST PUSH2 0xAAE PUSH1 0x0 DUP4 DUP4 PUSH2 0x1B93 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND DUP2 OR DUP5 SSTORE PUSH1 0x40 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP3 DUP4 SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0x181B JUMPI PUSH2 0x1776 DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1765 JUMPI PUSH2 0x1765 PUSH2 0x29A3 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 ADD MLOAD PUSH2 0x184B JUMP JUMPDEST DUP2 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x1788 JUMPI PUSH2 0x1788 PUSH2 0x29A3 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 ADD MLOAD PUSH1 0x3 PUSH1 0x0 DUP5 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x17AA JUMPI PUSH2 0x17AA PUSH2 0x29A3 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 ADD MLOAD PUSH4 0xFFFFFFFF AND PUSH4 0xFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP5 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x17E4 JUMPI PUSH2 0x17E4 PUSH2 0x29A3 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x20 ADD MLOAD PUSH2 0xFFFF AND PUSH2 0xFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SWAP1 DUP2 PUSH2 0x1812 SWAP2 SWAP1 PUSH2 0x2CCD JUMP JUMPDEST POP PUSH1 0x1 ADD PUSH2 0x1747 JUMP JUMPDEST POP PUSH32 0xBE4864A8E820971C0247F5992E2DA559595F7BF076A21CB5928D443D2A13B674 DUP2 PUSH1 0x40 MLOAD PUSH2 0xC1A SWAP2 SWAP1 PUSH2 0x2D8C JUMP JUMPDEST PUSH1 0x2 DUP2 ADD MLOAD PUSH2 0xFFFF DUP2 AND PUSH1 0x3 EQ PUSH2 0xAAE JUMPI DUP2 PUSH1 0x40 MLOAD PUSH4 0x9A6D49CD PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x9FD SWAP2 SWAP1 PUSH2 0x2125 JUMP JUMPDEST PUSH2 0x187F PUSH2 0x208E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 DUP1 PUSH2 0x18B6 CALLER PUSH1 0x40 DUP10 ADD CALLDATALOAD PUSH1 0x60 DUP11 ADD CALLDATALOAD PUSH2 0x18B1 PUSH1 0x20 DUP13 ADD DUP13 PUSH2 0x2590 JUMP JUMPDEST PUSH2 0x1D63 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH1 0x0 DUP1 PUSH2 0x18C7 DUP10 DUP5 PUSH2 0x14BA JUMP JUMPDEST SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x18F3 PUSH2 0x18DC PUSH1 0x20 DUP12 ADD DUP12 PUSH2 0x2590 JUMP JUMPDEST DUP4 DUP4 PUSH2 0x18ED CALLDATASIZE DUP14 SWAP1 SUB DUP14 ADD DUP14 PUSH2 0x2E17 JUMP JUMPDEST DUP12 PUSH2 0x1D89 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE DUP6 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 ADD DUP7 SWAP1 MSTORE DUP3 MLOAD SWAP3 SWAP9 POP SWAP1 SWAP7 POP CALLER SWAP2 SWAP1 PUSH32 0x85496B760A4B7F8D66384B9DF21B381F5D1B1E79F229A47AAF4C232EDC2FE59A SWAP1 PUSH2 0x1941 SWAP1 DUP14 ADD DUP14 PUSH2 0x2590 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0xFFFFFFFF SWAP1 SWAP3 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP10 SWAP1 MSTORE DUP2 ADD DUP8 SWAP1 MSTORE PUSH1 0x60 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP SWAP4 POP SWAP4 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH2 0x199C JUMPI PUSH1 0x40 MLOAD PUSH4 0xE602DF05 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x9FD JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x19C6 JUMPI PUSH1 0x40 MLOAD PUSH4 0x4A1406B1 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x0 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x9FD JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP8 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 DUP3 SWAP1 SSTORE DUP1 ISZERO PUSH2 0x13D3 JUMPI DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 DUP5 PUSH1 0x40 MLOAD PUSH2 0x1A39 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH2 0x1A74 DUP2 DUP5 PUSH2 0x2E5F JUMP JUMPDEST PUSH2 0x8DF SWAP2 SWAP1 PUSH2 0x2E81 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1A8D PUSH1 0x20 DUP3 DUP5 DUP7 PUSH2 0x2914 JUMP JUMPDEST PUSH2 0xA95 SWAP2 PUSH2 0x2E98 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1AA6 PUSH1 0x28 PUSH1 0x20 DUP5 DUP7 PUSH2 0x2914 JUMP JUMPDEST PUSH2 0x1AAF SWAP2 PUSH2 0x2EB6 JUMP JUMPDEST PUSH1 0xC0 SHR SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x8DF PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP5 AND PUSH2 0x2E81 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH2 0x1B04 JUMPI PUSH2 0xDEAD SWAP4 POP JUMPDEST PUSH2 0x1B0E DUP5 DUP5 PUSH2 0x16BE JUMP JUMPDEST POP SWAP1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x1B25 DUP3 PUSH1 0x28 DUP2 DUP7 PUSH2 0x2914 JUMP JUMPDEST DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP5 DUP5 DUP5 DUP5 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x1B7A SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x2EE6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP1 POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x1BBE JUMPI DUP1 PUSH1 0x7 PUSH1 0x0 DUP3 DUP3 SLOAD PUSH2 0x1BB3 SWAP2 SWAP1 PUSH2 0x2F35 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP PUSH2 0x1C30 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 DUP2 LT ISZERO PUSH2 0x1C11 JUMPI PUSH1 0x40 MLOAD PUSH4 0x391434E3 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x44 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x64 ADD PUSH2 0x9FD JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP1 DUP3 SWAP1 SUB SWAP1 SSTORE JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x1C4C JUMPI PUSH1 0x7 DUP1 SLOAD DUP3 SWAP1 SUB SWAP1 SSTORE PUSH2 0x1C6B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD DUP3 ADD SWAP1 SSTORE JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP4 PUSH1 0x40 MLOAD PUSH2 0x1CB0 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x8DF PUSH32 0x0 DUP4 PUSH2 0x2E5F JUMP JUMPDEST DUP1 MLOAD PUSH1 0x60 SWAP1 ISZERO ISZERO DUP1 PUSH2 0x1D32 JUMPI DUP5 DUP5 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x1D1E SWAP3 SWAP2 SWAP1 SWAP2 DUP3 MSTORE PUSH1 0xC0 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0xC0 SHL SUB NOT AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x28 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH2 0x1D59 JUMP JUMPDEST DUP5 DUP5 CALLER DUP6 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x1D49 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x2F48 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE JUMPDEST SWAP2 POP SWAP4 POP SWAP4 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1D71 DUP6 DUP6 DUP6 PUSH2 0x117C JUMP JUMPDEST SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x1D80 DUP7 DUP4 PUSH2 0x1E94 JUMP JUMPDEST SWAP5 POP SWAP5 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x1D91 PUSH2 0x208E JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1DA0 DUP5 PUSH1 0x0 ADD MLOAD PUSH2 0x1ECA JUMP JUMPDEST PUSH1 0x20 DUP6 ADD MLOAD SWAP1 SWAP2 POP ISZERO PUSH2 0x1DBA JUMPI PUSH2 0x1DBA DUP5 PUSH1 0x20 ADD MLOAD PUSH2 0x1EF2 JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x2637A450 DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0xA0 ADD PUSH1 0x40 MSTORE DUP1 DUP12 PUSH4 0xFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1E0A DUP13 PUSH2 0x11B8 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD DUP11 DUP2 MSTORE PUSH1 0x20 ADD DUP10 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP10 PUSH1 0x20 ADD MLOAD GT ISZERO ISZERO DUP2 MSTORE POP DUP7 PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1E46 SWAP3 SWAP2 SWAP1 PUSH2 0x2BB8 JUMP JUMPDEST PUSH1 0x80 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP9 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1E64 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1E89 SWAP2 SWAP1 PUSH2 0x2F8B JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x1EBE JUMPI PUSH1 0x40 MLOAD PUSH4 0x4B637E8F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x0 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x9FD JUMP JUMPDEST PUSH2 0xAAE DUP3 PUSH1 0x0 DUP4 PUSH2 0x1B93 JUMP JUMPDEST PUSH1 0x0 DUP2 CALLVALUE EQ PUSH2 0x1EEE JUMPI PUSH1 0x40 MLOAD PUSH4 0x4FB8209 PUSH1 0xE5 SHL DUP2 MSTORE CALLVALUE PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x9FD JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xE4FE1D94 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1F52 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1F76 SWAP2 SWAP1 PUSH2 0x2FD5 JUMP JUMPDEST SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x1F9F JUMPI PUSH1 0x40 MLOAD PUSH4 0x29B99A95 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD CALLER PUSH1 0x24 DUP3 ADD DUP2 SWAP1 MSTORE PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 DUP2 AND PUSH1 0x44 DUP6 ADD MSTORE PUSH1 0x64 DUP1 DUP6 ADD DUP9 SWAP1 MSTORE DUP6 MLOAD DUP1 DUP7 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x84 SWAP1 SWAP5 ADD SWAP1 SWAP5 MSTORE PUSH1 0x20 DUP1 DUP5 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0x23B872DD PUSH1 0xE0 SHL OR DUP2 MSTORE DUP5 MLOAD PUSH2 0xAAE SWAP7 DUP9 AND SWAP6 DUP10 SWAP4 PUSH2 0x13D3 SWAP4 DUP9 SWAP4 PUSH1 0x0 SWAP3 DUP4 SWAP3 SWAP1 SWAP2 DUP4 SWAP2 DUP3 DUP9 GAS CALL DUP1 PUSH2 0x2040 JUMPI PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY RETURNDATASIZE DUP2 REVERT JUMPDEST POP POP PUSH1 0x0 MLOAD RETURNDATASIZE SWAP2 POP DUP2 ISZERO PUSH2 0x2058 JUMPI DUP1 PUSH1 0x1 EQ ISZERO PUSH2 0x2065 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND EXTCODESIZE ISZERO JUMPDEST ISZERO PUSH2 0x13D3 JUMPI PUSH1 0x40 MLOAD PUSH4 0x5274AFE7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x9FD JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP1 NOT AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x20D0 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST SWAP1 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x20F0 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x20D8 JUMP JUMPDEST POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x2111 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x20D5 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0xA95 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x20F9 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x1131 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2160 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x216B DUP2 PUSH2 0x2138 JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0xE0 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x218B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x21A3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x21B9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xC46 DUP5 DUP3 DUP6 ADD PUSH2 0x2179 JUMP JUMPDEST DUP4 MLOAD DUP2 MSTORE PUSH1 0x20 DUP1 DUP6 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0x0 PUSH1 0xA0 DUP3 ADD PUSH1 0x40 PUSH1 0xA0 PUSH1 0x40 DUP6 ADD MSTORE DUP2 DUP7 MLOAD DUP1 DUP5 MSTORE PUSH1 0xC0 DUP7 ADD SWAP2 POP PUSH1 0xC0 DUP2 PUSH1 0x5 SHL DUP8 ADD ADD SWAP4 POP PUSH1 0x20 DUP1 DUP10 ADD PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2240 JUMPI DUP9 DUP8 SUB PUSH1 0xBF NOT ADD DUP6 MSTORE DUP2 MLOAD DUP1 MLOAD DUP9 MSTORE DUP4 ADD MLOAD DUP4 DUP9 ADD DUP8 SWAP1 MSTORE PUSH2 0x222D DUP8 DUP10 ADD DUP3 PUSH2 0x20F9 JUMP JUMPDEST SWAP8 POP POP SWAP4 DUP3 ADD SWAP4 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x2201 JUMP JUMPDEST POP POP DUP8 MLOAD PUSH1 0x60 DUP9 ADD MSTORE POP POP POP PUSH1 0x20 DUP6 ADD MLOAD PUSH1 0x80 DUP6 ADD MSTORE POP SWAP1 POP PUSH2 0xC46 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x218B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x2282 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x2299 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x22B1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x22D3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x22DD DUP10 DUP10 PUSH2 0x225E JUMP JUMPDEST SWAP7 POP PUSH1 0x60 DUP9 ADD CALLDATALOAD SWAP6 POP PUSH1 0x80 DUP9 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH2 0x2300 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x230C DUP12 DUP4 DUP13 ADD PUSH2 0x2270 JUMP JUMPDEST SWAP1 SWAP8 POP SWAP6 POP PUSH1 0xA0 DUP11 ADD CALLDATALOAD SWAP2 POP PUSH2 0x2321 DUP3 PUSH2 0x2138 JUMP JUMPDEST SWAP1 SWAP4 POP PUSH1 0xC0 DUP10 ADD CALLDATALOAD SWAP1 DUP1 DUP3 GT ISZERO PUSH2 0x2337 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2344 DUP11 DUP3 DUP12 ADD PUSH2 0x2270 JUMP JUMPDEST SWAP9 SWAP12 SWAP8 SWAP11 POP SWAP6 SWAP9 POP SWAP4 SWAP7 SWAP3 SWAP6 SWAP3 SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x236C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x2377 DUP2 PUSH2 0x2138 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x2387 DUP2 PUSH2 0x2138 JUMP JUMPDEST SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x23AC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x23C4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x216B DUP4 PUSH2 0x2398 JUMP JUMPDEST DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x1131 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x23EE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x2404 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2410 DUP6 DUP3 DUP7 ADD PUSH2 0x2179 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x2421 DUP2 PUSH2 0x23CD JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 DUP1 DUP4 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0x40 DUP2 ADD PUSH2 0x8DF JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0xFFFF DUP2 AND DUP2 EQ PUSH2 0x23AC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2468 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2471 DUP4 PUSH2 0x2398 JUMP JUMPDEST SWAP2 POP PUSH2 0x247F PUSH1 0x20 DUP5 ADD PUSH2 0x2443 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x249A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0xA95 DUP2 PUSH2 0x2138 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xA0 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x24BB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x24C5 DUP7 DUP7 PUSH2 0x225E JUMP JUMPDEST SWAP4 POP PUSH1 0x60 DUP6 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x24E0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x24EC DUP8 DUP3 DUP9 ADD PUSH2 0x2270 JUMP JUMPDEST SWAP1 SWAP5 POP SWAP3 POP POP PUSH1 0x80 DUP6 ADD CALLDATALOAD PUSH2 0x2500 DUP2 PUSH2 0x2138 JUMP JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP1 SWAP4 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x251D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x2534 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 PUSH1 0x5 SHL DUP6 ADD ADD GT ISZERO PUSH2 0x22B1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x20 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2562 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x2578 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2584 DUP6 DUP3 DUP7 ADD PUSH2 0x250B JUMP JUMPDEST SWAP1 SWAP7 SWAP1 SWAP6 POP SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x25A2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xA95 DUP3 PUSH2 0x2398 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x60 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x25C1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x25CA DUP6 PUSH2 0x2398 JUMP JUMPDEST SWAP4 POP PUSH2 0x25D8 PUSH1 0x20 DUP7 ADD PUSH2 0x2443 JUMP JUMPDEST SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x25F3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x25FF DUP8 DUP3 DUP9 ADD PUSH2 0x2270 JUMP JUMPDEST SWAP6 SWAP9 SWAP5 SWAP8 POP SWAP6 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP4 DUP6 SUB PUSH1 0x80 DUP2 SLT ISZERO PUSH2 0x2621 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x2637 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2643 DUP8 DUP3 DUP9 ADD PUSH2 0x2179 JUMP JUMPDEST SWAP5 POP POP PUSH1 0x40 PUSH1 0x1F NOT DUP3 ADD SLT ISZERO PUSH2 0x2658 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x20 DUP5 ADD SWAP2 POP PUSH1 0x60 DUP5 ADD CALLDATALOAD PUSH2 0x266D DUP2 PUSH2 0x2138 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0xC0 DUP3 ADD SWAP1 POP DUP4 MLOAD DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB PUSH1 0x20 DUP6 ADD MLOAD AND PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x40 DUP5 ADD MLOAD PUSH2 0x26B3 PUSH1 0x40 DUP5 ADD DUP3 DUP1 MLOAD DUP3 MSTORE PUSH1 0x20 SWAP1 DUP2 ADD MLOAD SWAP2 ADD MSTORE JUMP JUMPDEST POP DUP3 MLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0xA0 DUP4 ADD MSTORE PUSH2 0xA95 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x26DD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x26E8 DUP2 PUSH2 0x2138 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x2421 DUP2 PUSH2 0x2138 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x270A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xA95 DUP4 DUP4 PUSH2 0x225E JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x2728 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 SUB PUSH2 0x218B JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x60 DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x2780 JUMPI PUSH2 0x2780 PUSH2 0x2748 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP1 DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x2780 JUMPI PUSH2 0x2780 PUSH2 0x2748 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT AND DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x27D0 JUMPI PUSH2 0x27D0 PUSH2 0x2748 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT ISZERO PUSH2 0x27F1 JUMPI PUSH2 0x27F1 PUSH2 0x2748 JUMP JUMPDEST POP PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP5 GT ISZERO PUSH2 0x2819 JUMPI PUSH2 0x2819 PUSH2 0x2748 JUMP JUMPDEST DUP4 PUSH1 0x5 SHL PUSH1 0x20 PUSH2 0x282A DUP2 DUP4 ADD PUSH2 0x27A8 JUMP JUMPDEST DUP7 DUP2 MSTORE SWAP2 DUP6 ADD SWAP2 DUP2 DUP2 ADD SWAP1 CALLDATASIZE DUP5 GT ISZERO PUSH2 0x2842 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0x2908 JUMPI DUP1 CALLDATALOAD DUP7 DUP2 GT ISZERO PUSH2 0x285C JUMPI PUSH1 0x0 DUP1 DUP2 REVERT JUMPDEST DUP9 ADD PUSH1 0x60 CALLDATASIZE DUP3 SWAP1 SUB SLT ISZERO PUSH2 0x2870 JUMPI PUSH1 0x0 DUP1 DUP2 REVERT JUMPDEST PUSH2 0x2878 PUSH2 0x275E JUMP JUMPDEST PUSH2 0x2881 DUP3 PUSH2 0x2398 JUMP JUMPDEST DUP2 MSTORE PUSH2 0x288E DUP7 DUP4 ADD PUSH2 0x2443 JUMP JUMPDEST DUP7 DUP3 ADD MSTORE PUSH1 0x40 DUP1 DUP4 ADD CALLDATALOAD DUP10 DUP2 GT ISZERO PUSH2 0x28A6 JUMPI PUSH1 0x0 DUP1 DUP2 REVERT JUMPDEST SWAP3 SWAP1 SWAP3 ADD SWAP2 CALLDATASIZE PUSH1 0x1F DUP5 ADD SLT PUSH2 0x28BB JUMPI PUSH1 0x0 DUP1 DUP2 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x28CE PUSH2 0x28C9 DUP3 PUSH2 0x27D8 JUMP JUMPDEST PUSH2 0x27A8 JUMP JUMPDEST DUP2 DUP2 MSTORE CALLDATASIZE DUP10 DUP4 DUP8 ADD ADD GT ISZERO PUSH2 0x28E3 JUMPI PUSH1 0x0 DUP1 DUP2 REVERT JUMPDEST DUP2 DUP10 DUP7 ADD DUP11 DUP4 ADD CALLDATACOPY PUSH1 0x0 SWAP2 DUP2 ADD DUP10 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 DUP3 ADD MSTORE DUP5 MSTORE POP SWAP2 DUP4 ADD SWAP2 DUP4 ADD PUSH2 0x2844 JUMP JUMPDEST POP SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP6 DUP6 GT ISZERO PUSH2 0x2924 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 DUP7 GT ISZERO PUSH2 0x2931 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP3 ADD SWAP4 SWAP2 SWAP1 SWAP3 SUB SWAP2 POP JUMP JUMPDEST PUSH1 0x0 DUP5 MLOAD PUSH2 0x2950 DUP2 DUP5 PUSH1 0x20 DUP10 ADD PUSH2 0x20D5 JUMP JUMPDEST DUP3 ADD DUP4 DUP6 DUP3 CALLDATACOPY PUSH1 0x0 SWAP4 ADD SWAP3 DUP4 MSTORE POP SWAP1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP2 DUP4 MSTORE DUP2 DUP2 PUSH1 0x20 DUP6 ADD CALLDATACOPY POP PUSH1 0x0 DUP3 DUP3 ADD PUSH1 0x20 SWAP1 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x1F SWAP1 SWAP2 ADD PUSH1 0x1F NOT AND SWAP1 SWAP2 ADD ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0xC46 PUSH1 0x20 DUP4 ADD DUP5 DUP7 PUSH2 0x2966 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 CALLDATALOAD PUSH2 0x13E NOT DUP4 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x29D0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 CALLDATALOAD PUSH1 0x1E NOT DUP5 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x29F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 ADD DUP1 CALLDATALOAD SWAP2 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT ISZERO PUSH2 0x2A0B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 ADD SWAP2 POP CALLDATASIZE DUP2 SWAP1 SUB DUP3 SGT ISZERO PUSH2 0x22B1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x1131 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH4 0xFFFFFFFF PUSH2 0x2A43 DUP10 PUSH2 0x2398 JUMP JUMPDEST AND DUP2 MSTORE PUSH1 0x20 DUP9 ADD CALLDATALOAD PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 PUSH1 0x40 DUP10 ADD CALLDATALOAD PUSH2 0x2A60 DUP2 PUSH2 0x2A20 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 AND PUSH1 0x40 DUP5 ADD MSTORE POP DUP8 PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0xE0 PUSH1 0x80 DUP4 ADD MSTORE PUSH2 0x2A8B PUSH1 0xE0 DUP4 ADD DUP8 DUP10 PUSH2 0x2966 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0xA0 DUP5 ADD MSTORE DUP3 DUP2 SUB PUSH1 0xC0 DUP5 ADD MSTORE PUSH2 0x2AAD DUP2 DUP6 DUP8 PUSH2 0x2966 JUMP JUMPDEST SWAP11 SWAP10 POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2ACD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x2AE3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD PUSH1 0x1F DUP2 ADD DUP5 SGT PUSH2 0x2AF4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD PUSH2 0x2B02 PUSH2 0x28C9 DUP3 PUSH2 0x27D8 JUMP JUMPDEST DUP2 DUP2 MSTORE DUP6 PUSH1 0x20 DUP4 DUP6 ADD ADD GT ISZERO PUSH2 0x2B17 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x16B5 DUP3 PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x20D5 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2B3A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0xA95 DUP2 PUSH2 0x2A20 JUMP JUMPDEST PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB DUP6 AND DUP2 MSTORE DUP4 PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0xFFFF DUP4 AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x80 PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0xB0F PUSH1 0x80 DUP4 ADD DUP5 PUSH2 0x20F9 JUMP JUMPDEST PUSH1 0x40 DUP2 MSTORE PUSH1 0x0 PUSH2 0x2B89 PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0x20F9 JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x16B5 DUP2 DUP6 PUSH2 0x20F9 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2BAD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0xA95 DUP2 PUSH2 0x23CD JUMP JUMPDEST PUSH1 0x40 DUP2 MSTORE PUSH4 0xFFFFFFFF DUP4 MLOAD AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x0 PUSH1 0x40 DUP5 ADD MLOAD PUSH1 0xA0 PUSH1 0x80 DUP5 ADD MSTORE PUSH2 0x2BEE PUSH1 0xE0 DUP5 ADD DUP3 PUSH2 0x20F9 JUMP JUMPDEST SWAP1 POP PUSH1 0x60 DUP6 ADD MLOAD PUSH1 0x3F NOT DUP5 DUP4 SUB ADD PUSH1 0xA0 DUP6 ADD MSTORE PUSH2 0x2C0B DUP3 DUP3 PUSH2 0x20F9 JUMP JUMPDEST PUSH1 0x80 SWAP7 SWAP1 SWAP7 ADD MLOAD ISZERO ISZERO PUSH1 0xC0 DUP6 ADD MSTORE POP POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND PUSH1 0x20 SWAP1 SWAP2 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2C43 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2C4B PUSH2 0x2786 JUMP JUMPDEST SWAP1 POP DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x20 DUP3 ADD MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2C73 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xA95 DUP4 DUP4 PUSH2 0x2C31 JUMP JUMPDEST PUSH1 0x1F DUP3 GT ISZERO PUSH2 0x1177 JUMPI PUSH1 0x0 DUP2 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 PUSH1 0x1F DUP6 ADD PUSH1 0x5 SHR DUP2 ADD PUSH1 0x20 DUP7 LT ISZERO PUSH2 0x2CA6 JUMPI POP DUP1 JUMPDEST PUSH1 0x1F DUP6 ADD PUSH1 0x5 SHR DUP3 ADD SWAP2 POP JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x2CC5 JUMPI DUP3 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x2CB2 JUMP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x2CE6 JUMPI PUSH2 0x2CE6 PUSH2 0x2748 JUMP JUMPDEST PUSH2 0x2CFA DUP2 PUSH2 0x2CF4 DUP5 SLOAD PUSH2 0x2714 JUMP JUMPDEST DUP5 PUSH2 0x2C7D JUMP JUMPDEST PUSH1 0x20 DUP1 PUSH1 0x1F DUP4 GT PUSH1 0x1 DUP2 EQ PUSH2 0x2D2F JUMPI PUSH1 0x0 DUP5 ISZERO PUSH2 0x2D17 JUMPI POP DUP6 DUP4 ADD MLOAD JUMPDEST PUSH1 0x0 NOT PUSH1 0x3 DUP7 SWAP1 SHL SHR NOT AND PUSH1 0x1 DUP6 SWAP1 SHL OR DUP6 SSTORE PUSH2 0x2CC5 JUMP JUMPDEST PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x20 DUP2 KECCAK256 PUSH1 0x1F NOT DUP7 AND SWAP2 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x2D5E JUMPI DUP9 DUP7 ADD MLOAD DUP3 SSTORE SWAP5 DUP5 ADD SWAP5 PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 DUP5 ADD PUSH2 0x2D3F JUMP JUMPDEST POP DUP6 DUP3 LT ISZERO PUSH2 0x2D7C JUMPI DUP8 DUP6 ADD MLOAD PUSH1 0x0 NOT PUSH1 0x3 DUP9 SWAP1 SHL PUSH1 0xF8 AND SHR NOT AND DUP2 SSTORE JUMPDEST POP POP POP POP POP PUSH1 0x1 SWAP1 DUP2 SHL ADD SWAP1 SSTORE POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 ADD DUP2 DUP5 MSTORE DUP1 DUP6 MLOAD DUP1 DUP4 MSTORE PUSH1 0x40 SWAP3 POP PUSH1 0x40 DUP7 ADD SWAP2 POP PUSH1 0x40 DUP2 PUSH1 0x5 SHL DUP8 ADD ADD DUP5 DUP9 ADD PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2E09 JUMPI DUP9 DUP4 SUB PUSH1 0x3F NOT ADD DUP6 MSTORE DUP2 MLOAD DUP1 MLOAD PUSH4 0xFFFFFFFF AND DUP5 MSTORE DUP8 DUP2 ADD MLOAD PUSH2 0xFFFF AND DUP9 DUP6 ADD MSTORE DUP7 ADD MLOAD PUSH1 0x60 DUP8 DUP6 ADD DUP2 SWAP1 MSTORE PUSH2 0x2DF5 DUP2 DUP7 ADD DUP4 PUSH2 0x20F9 JUMP JUMPDEST SWAP7 DUP10 ADD SWAP7 SWAP5 POP POP POP SWAP1 DUP7 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x2DB5 JUMP JUMPDEST POP SWAP1 SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2E29 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2E31 PUSH2 0x2786 JUMP JUMPDEST DUP3 CALLDATALOAD DUP2 MSTORE PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH1 0x20 DUP3 ADD MSTORE DUP1 SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x2E7C JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP DIV SWAP1 JUMP JUMPDEST DUP1 DUP3 MUL DUP2 ISZERO DUP3 DUP3 DIV DUP5 EQ OR PUSH2 0x8DF JUMPI PUSH2 0x8DF PUSH2 0x2E49 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x20 DUP4 LT ISZERO PUSH2 0x8DF JUMPI PUSH1 0x0 NOT PUSH1 0x20 DUP5 SWAP1 SUB PUSH1 0x3 SHL SHL AND SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xC0 SHL SUB NOT DUP2 CALLDATALOAD DUP2 DUP2 AND SWAP2 PUSH1 0x8 DUP6 LT ISZERO PUSH2 0x2EDE JUMPI DUP1 DUP2 DUP7 PUSH1 0x8 SUB PUSH1 0x3 SHL SHL DUP4 AND AND SWAP3 POP JUMPDEST POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB PUSH1 0xC0 SHL DUP6 PUSH1 0xC0 SHL AND DUP2 MSTORE PUSH4 0xFFFFFFFF PUSH1 0xE0 SHL DUP5 PUSH1 0xE0 SHL AND PUSH1 0x8 DUP3 ADD MSTORE DUP3 PUSH1 0xC DUP3 ADD MSTORE PUSH1 0x0 DUP3 MLOAD PUSH2 0x2F25 DUP2 PUSH1 0x2C DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x20D5 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD PUSH1 0x2C ADD SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0x8DF JUMPI PUSH2 0x8DF PUSH2 0x2E49 JUMP JUMPDEST DUP5 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB PUSH1 0xC0 SHL DUP5 PUSH1 0xC0 SHL AND PUSH1 0x20 DUP3 ADD MSTORE DUP3 PUSH1 0x28 DUP3 ADD MSTORE PUSH1 0x0 DUP3 MLOAD PUSH2 0x2F7B DUP2 PUSH1 0x48 DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x20D5 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD PUSH1 0x48 ADD SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x80 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2F9D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2FA5 PUSH2 0x275E JUMP JUMPDEST DUP3 MLOAD DUP2 MSTORE PUSH1 0x20 DUP4 ADD MLOAD PUSH2 0x2FB7 DUP2 PUSH2 0x2A20 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x2FC9 DUP5 PUSH1 0x40 DUP6 ADD PUSH2 0x2C31 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2FE7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0xA95 DUP2 PUSH2 0x2138 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH5 0x5FBF12560A PUSH23 0x99955D058D106F0E740AD9CBC14EE055C7FE136365795A 0x23 0xDE PUSH5 0x736F6C6343 STOP ADDMOD AND STOP CALLER ", - "sourceMap": "155:311:42:-:0;;;189:182;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;329:5;336:7;345:11;358:9;329:5;336:7;345:11;358:9;329:5;336:7;2780:2:33;823:11:23;836:9;823:11;836:9;823:11;836:9;414::41;-1:-1:-1;;;;;1273:26:28;;1269:95;;1322:31;;-1:-1:-1;;;1322:31:28;;1350:1;1322:31;;;2061:51:43;2034:18;;1322:31:28;;;;;;;1269:95;1373:32;1392:12;1373:18;:32::i;:::-;-1:-1:-1;;;;;;1047:42:11;;;;;1104:23;;1100:53;;1136:17;;-1:-1:-1;;;1136:17:11;;;;;;;;;;;1100:53;1163:8;;:31;;-1:-1:-1;;;1163:31:11;;-1:-1:-1;;;;;2079:32:43;;;1163:31:11;;;2061:51:43;1163:20:11;;;;;;2034:18:43;;1163:31:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;987:214;;965:83:10;;2757:16:24::1;:14;;;:16;;:::i;:::-;2740:33;;:14;:33;;;2736:68;;;2782:22;;-1:-1:-1::0;;;2782:22:24::1;;;;;;;;;;;2736:68;2845:33;4227:1:::0;2845:14;:33:::1;:::i;:::-;2838:41;::::0;:2:::1;:41;:::i;:::-;2814:65;::::0;-1:-1:-1;1667:5:33;;-1:-1:-1;1667:13:33;;-1:-1:-1;1675:5:33;1667;:13;:::i;:::-;-1:-1:-1;1690:7:33;:17;1700:7;1690;:17;:::i;:::-;;1601:113;;647:202:23;;;;228:199:41;;;;189:182:42;;;;155:311;;2912:187:28;2985:16;3004:6;;-1:-1:-1;;;;;3020:17:28;;;-1:-1:-1;;;;;;3020:17:28;;;;;;3052:40;;3004:6;;;;;;;3052:40;;2985:16;3052:40;2975:124;2912:187;:::o;4148:87:24:-;4227:1;;4148:87::o;14:127:43:-;75:10;70:3;66:20;63:1;56:31;106:4;103:1;96:15;130:4;127:1;120:15;146:844;200:5;253:3;246:4;238:6;234:17;230:27;220:55;;271:1;268;261:12;220:55;294:13;;-1:-1:-1;;;;;356:10:43;;;353:36;;;369:18;;:::i;:::-;444:2;438:9;412:2;498:13;;-1:-1:-1;;494:22:43;;;518:2;490:31;486:40;474:53;;;542:18;;;562:22;;;539:46;536:72;;;588:18;;:::i;:::-;628:10;624:2;617:22;663:2;655:6;648:18;685:4;675:14;;732:3;725:4;720:2;712:6;708:15;704:26;701:35;698:55;;;749:1;746;739:12;698:55;771:1;762:10;;781:133;795:2;792:1;789:9;781:133;;;883:14;;;879:23;;873:30;852:14;;;848:23;;841:63;806:10;;;;781:133;;;958:1;951:4;946:2;938:6;934:15;930:26;923:37;978:6;969:15;;;;;;146:844;;;;:::o;995:177::-;1074:13;;-1:-1:-1;;;;;1116:31:43;;1106:42;;1096:70;;1162:1;1159;1152:12;1096:70;995:177;;;:::o;1177:733::-;1294:6;1302;1310;1318;1371:3;1359:9;1350:7;1346:23;1342:33;1339:53;;;1388:1;1385;1378:12;1339:53;1415:16;;-1:-1:-1;;;;;1480:14:43;;;1477:34;;;1507:1;1504;1497:12;1477:34;1530:61;1583:7;1574:6;1563:9;1559:22;1530:61;:::i;:::-;1520:71;;1637:2;1626:9;1622:18;1616:25;1600:41;;1666:2;1656:8;1653:16;1650:36;;;1682:1;1679;1672:12;1650:36;;1705:63;1760:7;1749:8;1738:9;1734:24;1705:63;:::i;:::-;1695:73;;;1787:49;1832:2;1821:9;1817:18;1787:49;:::i;:::-;1777:59;;1855:49;1900:2;1889:9;1885:18;1855:49;:::i;:::-;1845:59;;1177:733;;;;;;;:::o;2123:127::-;2184:10;2179:3;2175:20;2172:1;2165:31;2215:4;2212:1;2205:15;2239:4;2236:1;2229:15;2255:151;2345:4;2338:12;;;2324;;;2320:31;;2363:14;;2360:40;;;2380:18;;:::i;:::-;2255:151;;;;:::o;2411:416::-;2500:1;2537:5;2500:1;2551:270;2572:7;2562:8;2559:21;2551:270;;;2631:4;2627:1;2623:6;2619:17;2613:4;2610:27;2607:53;;;2640:18;;:::i;:::-;2690:7;2680:8;2676:22;2673:55;;;2710:16;;;;2673:55;2789:22;;;;2749:15;;;;2551:270;;;2555:3;2411:416;;;;;:::o;2832:806::-;2881:5;2911:8;2901:80;;-1:-1:-1;2952:1:43;2966:5;;2901:80;3000:4;2990:76;;-1:-1:-1;3037:1:43;3051:5;;2990:76;3082:4;3100:1;3095:59;;;;3168:1;3163:130;;;;3075:218;;3095:59;3125:1;3116:10;;3139:5;;;3163:130;3200:3;3190:8;3187:17;3184:43;;;3207:18;;:::i;:::-;-1:-1:-1;;3263:1:43;3249:16;;3278:5;;3075:218;;3377:2;3367:8;3364:16;3358:3;3352:4;3349:13;3345:36;3339:2;3329:8;3326:16;3321:2;3315:4;3312:12;3308:35;3305:77;3302:159;;;-1:-1:-1;3414:19:43;;;3446:5;;3302:159;3493:34;3518:8;3512:4;3493:34;:::i;:::-;3563:6;3559:1;3555:6;3551:19;3542:7;3539:32;3536:58;;;3574:18;;:::i;:::-;3612:20;;2832:806;-1:-1:-1;;;2832:806:43:o;3643:140::-;3701:5;3730:47;3771:4;3761:8;3757:19;3751:4;3730:47;:::i;:::-;3721:56;3643:140;-1:-1:-1;;;3643:140:43:o;3788:380::-;3867:1;3863:12;;;;3910;;;3931:61;;3985:4;3977:6;3973:17;3963:27;;3931:61;4038:2;4030:6;4027:14;4007:18;4004:38;4001:161;;4084:10;4079:3;4075:20;4072:1;4065:31;4119:4;4116:1;4109:15;4147:4;4144:1;4137:15;4001:161;;3788:380;;;:::o;4299:543::-;4401:2;4396:3;4393:11;4390:446;;;4437:1;4461:5;4458:1;4451:16;4505:4;4502:1;4492:18;4575:2;4563:10;4559:19;4556:1;4552:27;4546:4;4542:38;4611:4;4599:10;4596:20;4593:47;;;-1:-1:-1;4634:4:43;4593:47;4689:2;4684:3;4680:12;4677:1;4673:20;4667:4;4663:31;4653:41;;4744:82;4762:2;4755:5;4752:13;4744:82;;;4807:17;;;4788:1;4777:13;4744:82;;;4748:3;;;4390:446;4299:543;;;:::o;5018:1345::-;5138:10;;-1:-1:-1;;;;;5160:30:43;;5157:56;;;5193:18;;:::i;:::-;5222:97;5312:6;5272:38;5304:4;5298:11;5272:38;:::i;:::-;5266:4;5222:97;:::i;:::-;5374:4;;5431:2;5420:14;;5448:1;5443:663;;;;6150:1;6167:6;6164:89;;;-1:-1:-1;6219:19:43;;;6213:26;6164:89;-1:-1:-1;;4975:1:43;4971:11;;;4967:24;4963:29;4953:40;4999:1;4995:11;;;4950:57;6266:81;;5413:944;;5443:663;4246:1;4239:14;;;4283:4;4270:18;;-1:-1:-1;;5479:20:43;;;5597:236;5611:7;5608:1;5605:14;5597:236;;;5700:19;;;5694:26;5679:42;;5792:27;;;;5760:1;5748:14;;;;5627:19;;5597:236;;;5601:3;5861:6;5852:7;5849:19;5846:201;;;5922:19;;;5916:26;-1:-1:-1;;6005:1:43;6001:14;;;6017:3;5997:24;5993:37;5989:42;5974:58;5959:74;;5846:201;-1:-1:-1;;;;;6093:1:43;6077:14;;;6073:22;6060:36;;-1:-1:-1;5018:1345:43:o;:::-;155:311:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;" - }, - "deployedBytecode": { - "functionDebugData": { - "@SEND_2779": { - "entryPoint": null, - "id": 2779, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@SEND_AND_CALL_2782": { - "entryPoint": null, - "id": 2782, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@_approve_4609": { - "entryPoint": 4458, - "id": 4609, - "parameterSlots": 3, - "returnSlots": 0 - }, - "@_approve_4669": { - "entryPoint": 6514, - "id": 4669, - "parameterSlots": 4, - "returnSlots": 0 - }, - "@_assertOptionsType3_2148": { - "entryPoint": 6219, - "id": 2148, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@_buildMsgAndOptions_3135": { - "entryPoint": 5306, - "id": 3135, - "parameterSlots": 2, - "returnSlots": 2 - }, - "@_burn_4591": { - "entryPoint": 7828, - "id": 4591, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@_callOptionalReturn_5191": { - "entryPoint": null, - "id": 5191, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@_checkOwner_3913": { - "entryPoint": 5176, - "id": 3913, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@_credit_2735": { - "entryPoint": 6894, - "id": 2735, - "parameterSlots": 3, - "returnSlots": 1 - }, - "@_debitView_3332": { - "entryPoint": 4476, - "id": 3332, - "parameterSlots": 3, - "returnSlots": 2 - }, - "@_debit_2700": { - "entryPoint": 7523, - "id": 2700, - "parameterSlots": 4, - "returnSlots": 2 - }, - "@_getPeerOrRevert_1485": { - "entryPoint": 4536, - "id": 1485, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@_lzReceiveSimulate_3234": { - "entryPoint": null, - "id": 3234, - "parameterSlots": 7, - "returnSlots": 0 - }, - "@_lzReceive_3209": { - "entryPoint": 4596, - "id": 3209, - "parameterSlots": 7, - "returnSlots": 0 - }, - "@_lzSend_1781": { - "entryPoint": 7561, - "id": 1781, - "parameterSlots": 5, - "returnSlots": 1 - }, - "@_mint_4558": { - "entryPoint": 5822, - "id": 4558, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@_msgSender_5504": { - "entryPoint": null, - "id": 5504, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@_payLzToken_1838": { - "entryPoint": 7922, - "id": 1838, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@_payNative_1802": { - "entryPoint": 7882, - "id": 1802, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@_quote_1726": { - "entryPoint": 5597, - "id": 1726, - "parameterSlots": 4, - "returnSlots": 1 - }, - "@_removeDust_3268": { - "entryPoint": 6727, - "id": 3268, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@_send_3067": { - "entryPoint": 6263, - "id": 3067, - "parameterSlots": 3, - "returnSlots": 2 - }, - "@_setEnforcedOptions_2071": { - "entryPoint": 5956, - "id": 2071, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@_setPeer_1457": { - "entryPoint": 5221, - "id": 1457, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@_spendAllowance_4717": { - "entryPoint": 4955, - "id": 4717, - "parameterSlots": 3, - "returnSlots": 0 - }, - "@_toLD_3281": { - "entryPoint": 6841, - "id": 3281, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@_toSD_3297": { - "entryPoint": 7357, - "id": 3297, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@_transferOwnership_3975": { - "entryPoint": 5876, - "id": 3975, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@_transfer_4448": { - "entryPoint": 5081, - "id": 4448, - "parameterSlots": 3, - "returnSlots": 0 - }, - "@_update_4525": { - "entryPoint": 7059, - "id": 4525, - "parameterSlots": 3, - "returnSlots": 0 - }, - "@addressToBytes32_3807": { - "entryPoint": null, - "id": 3807, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@allowInitializePath_1572": { - "entryPoint": 4404, - "id": 1572, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@allowance_4345": { - "entryPoint": null, - "id": 4345, - "parameterSlots": 2, - "returnSlots": 1 - }, - "@amountSD_3774": { - "entryPoint": 6806, - "id": 3774, - "parameterSlots": 2, - "returnSlots": 1 - }, - "@approvalRequired_2667": { - "entryPoint": null, - "id": 2667, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@approve_4369": { - "entryPoint": 2251, - "id": 4369, - "parameterSlots": 2, - "returnSlots": 1 - }, - "@balanceOf_4304": { - "entryPoint": null, - "id": 4304, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@bytes32ToAddress_3827": { - "entryPoint": null, - "id": 3827, - "parameterSlots": 1, - "returnSlots": 1 - }, - "@combineOptions_2129": { - "entryPoint": 3205, - "id": 2129, - "parameterSlots": 4, - "returnSlots": 1 - }, - "@composeMsg_3787": { - "entryPoint": 6934, - "id": 3787, - "parameterSlots": 2, - "returnSlots": 1 - }, - "@decimalConversionRate_2776": { - "entryPoint": null, - "id": 2776, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@decimals_4282": { - "entryPoint": null, - "id": 4282, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@encode_3544": { - "entryPoint": 7009, - "id": 3544, - "parameterSlots": 4, - "returnSlots": 1 - }, - "@encode_3724": { - "entryPoint": 7401, - "id": 3724, - "parameterSlots": 3, - "returnSlots": 2 - }, - "@endpoint_1386": { - "entryPoint": null, - "id": 1386, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@enforcedOptions_2006": { - "entryPoint": 2851, - "id": 2006, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@isComposeMsgSender_1554": { - "entryPoint": 3129, - "id": 1554, - "parameterSlots": 4, - "returnSlots": 1 - }, - "@isComposed_3738": { - "entryPoint": null, - "id": 3738, - "parameterSlots": 2, - "returnSlots": 1 - }, - "@isPeer_3252": { - "entryPoint": null, - "id": 3252, - "parameterSlots": 2, - "returnSlots": 1 - }, - "@lzReceiveAndRevert_2262": { - "entryPoint": 3629, - "id": 2262, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@lzReceiveSimulate_2297": { - "entryPoint": 4209, - "id": 2297, - "parameterSlots": 7, - "returnSlots": 0 - }, - "@lzReceive_1637": { - "entryPoint": 2486, - "id": 1637, - "parameterSlots": 7, - "returnSlots": 0 - }, - "@mint_5623": { - "entryPoint": 2841, - "id": 5623, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@msgInspector_2784": { - "entryPoint": null, - "id": 2784, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@name_4264": { - "entryPoint": 2105, - "id": 4264, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@nextNonce_1585": { - "entryPoint": null, - "id": 1585, - "parameterSlots": 2, - "returnSlots": 1 - }, - "@oAppVersion_1370": { - "entryPoint": null, - "id": 1370, - "parameterSlots": 0, - "returnSlots": 2 - }, - "@oApp_2178": { - "entryPoint": null, - "id": 2178, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@oftVersion_2837": { - "entryPoint": null, - "id": 2837, - "parameterSlots": 0, - "returnSlots": 2 - }, - "@owner_3896": { - "entryPoint": null, - "id": 3896, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@peers_1390": { - "entryPoint": null, - "id": 1390, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@preCrime_2166": { - "entryPoint": null, - "id": 2166, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@quoteOFT_2929": { - "entryPoint": 2277, - "id": 2929, - "parameterSlots": 1, - "returnSlots": 3 - }, - "@quoteSend_2970": { - "entryPoint": 2738, - "id": 2970, - "parameterSlots": 2, - "returnSlots": 1 - }, - "@renounceOwnership_3927": { - "entryPoint": 3109, - "id": 3927, - "parameterSlots": 0, - "returnSlots": 0 - }, - "@safeTransferFrom_4896": { - "entryPoint": null, - "id": 4896, - "parameterSlots": 4, - "returnSlots": 0 - }, - "@sendTo_3754": { - "entryPoint": 6782, - "id": 3754, - "parameterSlots": 2, - "returnSlots": 1 - }, - "@send_2995": { - "entryPoint": 4023, - "id": 2995, - "parameterSlots": 3, - "returnSlots": 2 - }, - "@setDelegate_1500": { - "entryPoint": 4075, - "id": 1500, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@setEnforcedOptions_2021": { - "entryPoint": 3179, - "id": 2021, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@setMsgInspector_2863": { - "entryPoint": 3016, - "id": 2863, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@setPeer_1437": { - "entryPoint": 2716, - "id": 1437, - "parameterSlots": 2, - "returnSlots": 0 - }, - "@setPreCrime_2195": { - "entryPoint": 4256, - "id": 2195, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@sharedDecimals_2846": { - "entryPoint": null, - "id": 2846, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@symbol_4273": { - "entryPoint": 3150, - "id": 4273, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@token_2658": { - "entryPoint": null, - "id": 2658, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@totalSupply_4291": { - "entryPoint": null, - "id": 4291, - "parameterSlots": 0, - "returnSlots": 1 - }, - "@transferFrom_4401": { - "entryPoint": 2678, - "id": 4401, - "parameterSlots": 3, - "returnSlots": 1 - }, - "@transferOwnership_3955": { - "entryPoint": 4342, - "id": 3955, - "parameterSlots": 1, - "returnSlots": 0 - }, - "@transfer_4328": { - "entryPoint": 3165, - "id": 4328, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_array_struct_EnforcedOptionParam_calldata_dyn_calldata": { - "entryPoint": 9483, - "id": null, - "parameterSlots": 2, - "returnSlots": 2 - }, - "abi_decode_bytes_calldata": { - "entryPoint": 8816, - "id": null, - "parameterSlots": 2, - "returnSlots": 2 - }, - "abi_decode_struct_MessagingFee_fromMemory": { - "entryPoint": 11313, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_struct_Origin_calldata": { - "entryPoint": 8798, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_struct_SendParam_calldata": { - "entryPoint": 8569, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_address": { - "entryPoint": 9352, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_address_fromMemory": { - "entryPoint": 12245, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_addresst_address": { - "entryPoint": 9930, - "id": null, - "parameterSlots": 2, - "returnSlots": 2 - }, - "abi_decode_tuple_t_addresst_addresst_uint256": { - "entryPoint": 9047, - "id": null, - "parameterSlots": 2, - "returnSlots": 3 - }, - "abi_decode_tuple_t_addresst_uint256": { - "entryPoint": 8525, - "id": null, - "parameterSlots": 2, - "returnSlots": 2 - }, - "abi_decode_tuple_t_array$_t_struct$_EnforcedOptionParam_$1932_calldata_ptr_$dyn_calldata_ptr": { - "entryPoint": 9551, - "id": null, - "parameterSlots": 2, - "returnSlots": 2 - }, - "abi_decode_tuple_t_array$_t_struct$_InboundPacket_$2486_calldata_ptr_$dyn_calldata_ptr": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 2 - }, - "abi_decode_tuple_t_bool_fromMemory": { - "entryPoint": 11163, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_bytes_memory_ptr_fromMemory": { - "entryPoint": 10939, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_struct$_MessagingFee_$33_memory_ptr": { - "entryPoint": 11799, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_struct$_MessagingFee_$33_memory_ptr_fromMemory": { - "entryPoint": 11361, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_struct$_MessagingReceipt_$28_memory_ptr_fromMemory": { - "entryPoint": 12171, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_struct$_Origin_$40_calldata_ptr": { - "entryPoint": 9976, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_struct$_Origin_$40_calldata_ptrt_bytes32t_bytes_calldata_ptrt_addresst_bytes_calldata_ptr": { - "entryPoint": 8888, - "id": null, - "parameterSlots": 2, - "returnSlots": 7 - }, - "abi_decode_tuple_t_struct$_Origin_$40_calldata_ptrt_bytes_calldata_ptrt_address": { - "entryPoint": 9381, - "id": null, - "parameterSlots": 2, - "returnSlots": 4 - }, - "abi_decode_tuple_t_struct$_SendParam_$3382_calldata_ptr": { - "entryPoint": 8593, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_struct$_SendParam_$3382_calldata_ptrt_bool": { - "entryPoint": 9179, - "id": null, - "parameterSlots": 2, - "returnSlots": 2 - }, - "abi_decode_tuple_t_struct$_SendParam_$3382_calldata_ptrt_struct$_MessagingFee_$33_calldata_ptrt_address": { - "entryPoint": 9739, - "id": null, - "parameterSlots": 2, - "returnSlots": 3 - }, - "abi_decode_tuple_t_uint32": { - "entryPoint": 9616, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_tuple_t_uint32t_bytes32": { - "entryPoint": 9137, - "id": null, - "parameterSlots": 2, - "returnSlots": 2 - }, - "abi_decode_tuple_t_uint32t_uint16": { - "entryPoint": 9301, - "id": null, - "parameterSlots": 2, - "returnSlots": 2 - }, - "abi_decode_tuple_t_uint32t_uint16t_bytes_calldata_ptr": { - "entryPoint": 9643, - "id": null, - "parameterSlots": 2, - "returnSlots": 4 - }, - "abi_decode_tuple_t_uint64": { - "entryPoint": 11048, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_decode_uint16": { - "entryPoint": 9283, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_decode_uint32": { - "entryPoint": 9112, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "abi_encode_bytes_calldata": { - "entryPoint": 10598, - "id": null, - "parameterSlots": 3, - "returnSlots": 1 - }, - "abi_encode_string": { - "entryPoint": 8441, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_struct_OFTLimit": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 0 - }, - "abi_encode_tuple_packed_t_bytes32_t_uint64__to_t_bytes32_t_uint64__nonPadded_inplace_fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 3, - "returnSlots": 1 - }, - "abi_encode_tuple_packed_t_bytes32_t_uint64_t_bytes32_t_bytes_memory_ptr__to_t_bytes32_t_uint64_t_bytes32_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed": { - "entryPoint": 12104, - "id": null, - "parameterSlots": 5, - "returnSlots": 1 - }, - "abi_encode_tuple_packed_t_bytes_memory_ptr_t_bytes_calldata_ptr_slice__to_t_bytes_memory_ptr_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed": { - "entryPoint": 10558, - "id": null, - "parameterSlots": 4, - "returnSlots": 1 - }, - "abi_encode_tuple_packed_t_uint64_t_uint32_t_uint256_t_bytes_memory_ptr__to_t_uint64_t_uint32_t_uint256_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed": { - "entryPoint": 12006, - "id": null, - "parameterSlots": 5, - "returnSlots": 1 - }, - "abi_encode_tuple_t_address__to_t_address__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 4, - "returnSlots": 1 - }, - "abi_encode_tuple_t_address_t_bytes32_t_rational_0_by_1_t_bytes_memory_ptr__to_t_address_t_bytes32_t_uint16_t_bytes_memory_ptr__fromStack_reversed": { - "entryPoint": 11077, - "id": null, - "parameterSlots": 5, - "returnSlots": 1 - }, - "abi_encode_tuple_t_address_t_uint256_t_uint256__to_t_address_t_uint256_t_uint256__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 4, - "returnSlots": 1 - }, - "abi_encode_tuple_t_array$_t_struct$_EnforcedOptionParam_$1932_memory_ptr_$dyn_memory_ptr__to_t_array$_t_struct$_EnforcedOptionParam_$1932_memory_ptr_$dyn_memory_ptr__fromStack_reversed": { - "entryPoint": 11660, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_bytes4_t_uint64__to_t_bytes4_t_uint64__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 3, - "returnSlots": 1 - }, - "abi_encode_tuple_t_bytes_calldata_ptr__to_t_bytes_memory_ptr__fromStack_reversed": { - "entryPoint": 10639, - "id": null, - "parameterSlots": 3, - "returnSlots": 1 - }, - "abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_bytes_memory_ptr_t_bytes_memory_ptr__to_t_bytes_memory_ptr_t_bytes_memory_ptr__fromStack_reversed": { - "entryPoint": 11126, - "id": null, - "parameterSlots": 3, - "returnSlots": 1 - }, - "abi_encode_tuple_t_contract$_ILayerZeroEndpointV2_$202__to_t_address__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed": { - "entryPoint": 8485, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_struct$_MessagingFee_$33_memory_ptr__to_t_struct$_MessagingFee_$33_memory_ptr__fromStack_reversed": { - "entryPoint": 9260, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_struct$_MessagingParams_$20_memory_ptr_t_address__to_t_struct$_MessagingParams_$20_memory_ptr_t_address__fromStack_reversed": { - "entryPoint": 11192, - "id": null, - "parameterSlots": 3, - "returnSlots": 1 - }, - "abi_encode_tuple_t_struct$_MessagingReceipt_$28_memory_ptr_t_struct$_OFTReceipt_$3394_memory_ptr__to_t_struct$_MessagingReceipt_$28_memory_ptr_t_struct$_OFTReceipt_$3394_memory_ptr__fromStack_reversed": { - "entryPoint": 9848, - "id": null, - "parameterSlots": 3, - "returnSlots": 1 - }, - "abi_encode_tuple_t_struct$_OFTLimit_$3388_memory_ptr_t_array$_t_struct$_OFTFeeDetail_$3400_memory_ptr_$dyn_memory_ptr_t_struct$_OFTReceipt_$3394_memory_ptr__to_t_struct$_OFTLimit_$3388_memory_ptr_t_array$_t_struct$_OFTFeeDetail_$3400_memory_ptr_$dyn_memory_ptr_t_struct$_OFTReceipt_$3394_memory_ptr__fromStack_reversed": { - "entryPoint": 8645, - "id": null, - "parameterSlots": 4, - "returnSlots": 1 - }, - "abi_encode_tuple_t_struct$_Origin_$40_calldata_ptr_t_bytes32_t_bytes_calldata_ptr_t_address_t_bytes_calldata_ptr__to_t_struct$_Origin_$40_memory_ptr_t_bytes32_t_bytes_memory_ptr_t_address_t_bytes_memory_ptr__fromStack_reversed": { - "entryPoint": 10805, - "id": null, - "parameterSlots": 8, - "returnSlots": 1 - }, - "abi_encode_tuple_t_uint16__to_t_uint16__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 3, - "returnSlots": 1 - }, - "abi_encode_tuple_t_uint32__to_t_uint32__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_uint32_t_bytes32__to_t_uint32_t_bytes32__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 3, - "returnSlots": 1 - }, - "abi_encode_tuple_t_uint32_t_uint256__to_t_uint32_t_uint256__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 3, - "returnSlots": 1 - }, - "abi_encode_tuple_t_uint32_t_uint256_t_uint256__to_t_uint32_t_uint256_t_uint256__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 4, - "returnSlots": 1 - }, - "abi_encode_tuple_t_uint64__to_t_uint64__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "abi_encode_tuple_t_uint64_t_uint64__to_t_uint64_t_uint64__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 3, - "returnSlots": 1 - }, - "abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "access_calldata_tail_t_bytes_calldata_ptr": { - "entryPoint": 10714, - "id": null, - "parameterSlots": 2, - "returnSlots": 2 - }, - "access_calldata_tail_t_struct$_InboundPacket_$2486_calldata_ptr": { - "entryPoint": 10681, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "allocate_memory": { - "entryPoint": 10152, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "allocate_memory_4159": { - "entryPoint": 10078, - "id": null, - "parameterSlots": 0, - "returnSlots": 1 - }, - "allocate_memory_4160": { - "entryPoint": 10118, - "id": null, - "parameterSlots": 0, - "returnSlots": 1 - }, - "array_allocation_size_bytes": { - "entryPoint": 10200, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "array_dataslot_bytes_storage": { - "entryPoint": null, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "calldata_array_index_range_access_t_bytes_calldata_ptr": { - "entryPoint": 10516, - "id": null, - "parameterSlots": 4, - "returnSlots": 2 - }, - "checked_add_t_uint256": { - "entryPoint": 12085, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "checked_div_t_uint256": { - "entryPoint": 11871, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "checked_mul_t_uint256": { - "entryPoint": 11905, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "clean_up_bytearray_end_slots_bytes_storage": { - "entryPoint": 11389, - "id": null, - "parameterSlots": 3, - "returnSlots": 0 - }, - "convert_array_t_array$_t_struct$_EnforcedOptionParam_$1932_calldata_ptr_$dyn_calldata_ptr_to_t_array$_t_struct$_EnforcedOptionParam_$1932_memory_ptr_$dyn_memory_ptr": { - "entryPoint": 10239, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "convert_bytes_to_fixedbytes_from_t_bytes_calldata_ptr_to_t_bytes32": { - "entryPoint": 11928, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "convert_bytes_to_fixedbytes_from_t_bytes_calldata_ptr_to_t_bytes8": { - "entryPoint": 11958, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "copy_byte_array_to_storage_from_t_bytes_memory_ptr_to_t_bytes_storage": { - "entryPoint": 11469, - "id": null, - "parameterSlots": 2, - "returnSlots": 0 - }, - "copy_memory_to_memory_with_cleanup": { - "entryPoint": 8405, - "id": null, - "parameterSlots": 3, - "returnSlots": 0 - }, - "extract_byte_array_length": { - "entryPoint": 10004, - "id": null, - "parameterSlots": 1, - "returnSlots": 1 - }, - "extract_used_part_and_set_length_of_short_byte_array": { - "entryPoint": null, - "id": null, - "parameterSlots": 2, - "returnSlots": 1 - }, - "panic_error_0x11": { - "entryPoint": 11849, - "id": null, - "parameterSlots": 0, - "returnSlots": 0 - }, - "panic_error_0x32": { - "entryPoint": 10659, - "id": null, - "parameterSlots": 0, - "returnSlots": 0 - }, - "panic_error_0x41": { - "entryPoint": 10056, - "id": null, - "parameterSlots": 0, - "returnSlots": 0 - }, - "validator_revert_address": { - "entryPoint": 8504, - "id": null, - "parameterSlots": 1, - "returnSlots": 0 - }, - "validator_revert_bool": { - "entryPoint": 9165, - "id": null, - "parameterSlots": 1, - "returnSlots": 0 - }, - "validator_revert_uint64": { - "entryPoint": 10784, - "id": null, - "parameterSlots": 1, - "returnSlots": 0 - } - }, - "generatedSources": [ - { - "ast": { - "nativeSrc": "0:34156:43", - "nodeType": "YulBlock", - "src": "0:34156:43", - "statements": [ - { - "nativeSrc": "6:3:43", - "nodeType": "YulBlock", - "src": "6:3:43", - "statements": [] - }, - { - "body": { - "nativeSrc": "80:184:43", - "nodeType": "YulBlock", - "src": "80:184:43", - "statements": [ - { - "nativeSrc": "90:10:43", - "nodeType": "YulVariableDeclaration", - "src": "90:10:43", - "value": { - "kind": "number", - "nativeSrc": "99:1:43", - "nodeType": "YulLiteral", - "src": "99:1:43", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "i", - "nativeSrc": "94:1:43", - "nodeType": "YulTypedName", - "src": "94:1:43", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "159:63:43", - "nodeType": "YulBlock", - "src": "159:63:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "dst", - "nativeSrc": "184:3:43", - "nodeType": "YulIdentifier", - "src": "184:3:43" - }, - { - "name": "i", - "nativeSrc": "189:1:43", - "nodeType": "YulIdentifier", - "src": "189:1:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "180:3:43", - "nodeType": "YulIdentifier", - "src": "180:3:43" - }, - "nativeSrc": "180:11:43", - "nodeType": "YulFunctionCall", - "src": "180:11:43" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "src", - "nativeSrc": "203:3:43", - "nodeType": "YulIdentifier", - "src": "203:3:43" - }, - { - "name": "i", - "nativeSrc": "208:1:43", - "nodeType": "YulIdentifier", - "src": "208:1:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "199:3:43", - "nodeType": "YulIdentifier", - "src": "199:3:43" - }, - "nativeSrc": "199:11:43", - "nodeType": "YulFunctionCall", - "src": "199:11:43" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "193:5:43", - "nodeType": "YulIdentifier", - "src": "193:5:43" - }, - "nativeSrc": "193:18:43", - "nodeType": "YulFunctionCall", - "src": "193:18:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "173:6:43", - "nodeType": "YulIdentifier", - "src": "173:6:43" - }, - "nativeSrc": "173:39:43", - "nodeType": "YulFunctionCall", - "src": "173:39:43" - }, - "nativeSrc": "173:39:43", - "nodeType": "YulExpressionStatement", - "src": "173:39:43" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nativeSrc": "120:1:43", - "nodeType": "YulIdentifier", - "src": "120:1:43" - }, - { - "name": "length", - "nativeSrc": "123:6:43", - "nodeType": "YulIdentifier", - "src": "123:6:43" - } - ], - "functionName": { - "name": "lt", - "nativeSrc": "117:2:43", - "nodeType": "YulIdentifier", - "src": "117:2:43" - }, - "nativeSrc": "117:13:43", - "nodeType": "YulFunctionCall", - "src": "117:13:43" - }, - "nativeSrc": "109:113:43", - "nodeType": "YulForLoop", - "post": { - "nativeSrc": "131:19:43", - "nodeType": "YulBlock", - "src": "131:19:43", - "statements": [ - { - "nativeSrc": "133:15:43", - "nodeType": "YulAssignment", - "src": "133:15:43", - "value": { - "arguments": [ - { - "name": "i", - "nativeSrc": "142:1:43", - "nodeType": "YulIdentifier", - "src": "142:1:43" - }, - { - "kind": "number", - "nativeSrc": "145:2:43", - "nodeType": "YulLiteral", - "src": "145:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "138:3:43", - "nodeType": "YulIdentifier", - "src": "138:3:43" - }, - "nativeSrc": "138:10:43", - "nodeType": "YulFunctionCall", - "src": "138:10:43" - }, - "variableNames": [ - { - "name": "i", - "nativeSrc": "133:1:43", - "nodeType": "YulIdentifier", - "src": "133:1:43" - } - ] - } - ] - }, - "pre": { - "nativeSrc": "113:3:43", - "nodeType": "YulBlock", - "src": "113:3:43", - "statements": [] - }, - "src": "109:113:43" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "dst", - "nativeSrc": "242:3:43", - "nodeType": "YulIdentifier", - "src": "242:3:43" - }, - { - "name": "length", - "nativeSrc": "247:6:43", - "nodeType": "YulIdentifier", - "src": "247:6:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "238:3:43", - "nodeType": "YulIdentifier", - "src": "238:3:43" - }, - "nativeSrc": "238:16:43", - "nodeType": "YulFunctionCall", - "src": "238:16:43" - }, - { - "kind": "number", - "nativeSrc": "256:1:43", - "nodeType": "YulLiteral", - "src": "256:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "231:6:43", - "nodeType": "YulIdentifier", - "src": "231:6:43" - }, - "nativeSrc": "231:27:43", - "nodeType": "YulFunctionCall", - "src": "231:27:43" - }, - "nativeSrc": "231:27:43", - "nodeType": "YulExpressionStatement", - "src": "231:27:43" - } - ] - }, - "name": "copy_memory_to_memory_with_cleanup", - "nativeSrc": "14:250:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "src", - "nativeSrc": "58:3:43", - "nodeType": "YulTypedName", - "src": "58:3:43", - "type": "" - }, - { - "name": "dst", - "nativeSrc": "63:3:43", - "nodeType": "YulTypedName", - "src": "63:3:43", - "type": "" - }, - { - "name": "length", - "nativeSrc": "68:6:43", - "nodeType": "YulTypedName", - "src": "68:6:43", - "type": "" - } - ], - "src": "14:250:43" - }, - { - "body": { - "nativeSrc": "319:221:43", - "nodeType": "YulBlock", - "src": "319:221:43", - "statements": [ - { - "nativeSrc": "329:26:43", - "nodeType": "YulVariableDeclaration", - "src": "329:26:43", - "value": { - "arguments": [ - { - "name": "value", - "nativeSrc": "349:5:43", - "nodeType": "YulIdentifier", - "src": "349:5:43" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "343:5:43", - "nodeType": "YulIdentifier", - "src": "343:5:43" - }, - "nativeSrc": "343:12:43", - "nodeType": "YulFunctionCall", - "src": "343:12:43" - }, - "variables": [ - { - "name": "length", - "nativeSrc": "333:6:43", - "nodeType": "YulTypedName", - "src": "333:6:43", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "pos", - "nativeSrc": "371:3:43", - "nodeType": "YulIdentifier", - "src": "371:3:43" - }, - { - "name": "length", - "nativeSrc": "376:6:43", - "nodeType": "YulIdentifier", - "src": "376:6:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "364:6:43", - "nodeType": "YulIdentifier", - "src": "364:6:43" - }, - "nativeSrc": "364:19:43", - "nodeType": "YulFunctionCall", - "src": "364:19:43" - }, - "nativeSrc": "364:19:43", - "nodeType": "YulExpressionStatement", - "src": "364:19:43" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nativeSrc": "431:5:43", - "nodeType": "YulIdentifier", - "src": "431:5:43" - }, - { - "kind": "number", - "nativeSrc": "438:4:43", - "nodeType": "YulLiteral", - "src": "438:4:43", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "427:3:43", - "nodeType": "YulIdentifier", - "src": "427:3:43" - }, - "nativeSrc": "427:16:43", - "nodeType": "YulFunctionCall", - "src": "427:16:43" - }, - { - "arguments": [ - { - "name": "pos", - "nativeSrc": "449:3:43", - "nodeType": "YulIdentifier", - "src": "449:3:43" - }, - { - "kind": "number", - "nativeSrc": "454:4:43", - "nodeType": "YulLiteral", - "src": "454:4:43", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "445:3:43", - "nodeType": "YulIdentifier", - "src": "445:3:43" - }, - "nativeSrc": "445:14:43", - "nodeType": "YulFunctionCall", - "src": "445:14:43" - }, - { - "name": "length", - "nativeSrc": "461:6:43", - "nodeType": "YulIdentifier", - "src": "461:6:43" - } - ], - "functionName": { - "name": "copy_memory_to_memory_with_cleanup", - "nativeSrc": "392:34:43", - "nodeType": "YulIdentifier", - "src": "392:34:43" - }, - "nativeSrc": "392:76:43", - "nodeType": "YulFunctionCall", - "src": "392:76:43" - }, - "nativeSrc": "392:76:43", - "nodeType": "YulExpressionStatement", - "src": "392:76:43" - }, - { - "nativeSrc": "477:57:43", - "nodeType": "YulAssignment", - "src": "477:57:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "pos", - "nativeSrc": "492:3:43", - "nodeType": "YulIdentifier", - "src": "492:3:43" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "length", - "nativeSrc": "505:6:43", - "nodeType": "YulIdentifier", - "src": "505:6:43" - }, - { - "kind": "number", - "nativeSrc": "513:2:43", - "nodeType": "YulLiteral", - "src": "513:2:43", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "501:3:43", - "nodeType": "YulIdentifier", - "src": "501:3:43" - }, - "nativeSrc": "501:15:43", - "nodeType": "YulFunctionCall", - "src": "501:15:43" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "522:2:43", - "nodeType": "YulLiteral", - "src": "522:2:43", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "not", - "nativeSrc": "518:3:43", - "nodeType": "YulIdentifier", - "src": "518:3:43" - }, - "nativeSrc": "518:7:43", - "nodeType": "YulFunctionCall", - "src": "518:7:43" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "497:3:43", - "nodeType": "YulIdentifier", - "src": "497:3:43" - }, - "nativeSrc": "497:29:43", - "nodeType": "YulFunctionCall", - "src": "497:29:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "488:3:43", - "nodeType": "YulIdentifier", - "src": "488:3:43" - }, - "nativeSrc": "488:39:43", - "nodeType": "YulFunctionCall", - "src": "488:39:43" - }, - { - "kind": "number", - "nativeSrc": "529:4:43", - "nodeType": "YulLiteral", - "src": "529:4:43", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "484:3:43", - "nodeType": "YulIdentifier", - "src": "484:3:43" - }, - "nativeSrc": "484:50:43", - "nodeType": "YulFunctionCall", - "src": "484:50:43" - }, - "variableNames": [ - { - "name": "end", - "nativeSrc": "477:3:43", - "nodeType": "YulIdentifier", - "src": "477:3:43" - } - ] - } - ] - }, - "name": "abi_encode_string", - "nativeSrc": "269:271:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nativeSrc": "296:5:43", - "nodeType": "YulTypedName", - "src": "296:5:43", - "type": "" - }, - { - "name": "pos", - "nativeSrc": "303:3:43", - "nodeType": "YulTypedName", - "src": "303:3:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "end", - "nativeSrc": "311:3:43", - "nodeType": "YulTypedName", - "src": "311:3:43", - "type": "" - } - ], - "src": "269:271:43" - }, - { - "body": { - "nativeSrc": "666:99:43", - "nodeType": "YulBlock", - "src": "666:99:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "683:9:43", - "nodeType": "YulIdentifier", - "src": "683:9:43" - }, - { - "kind": "number", - "nativeSrc": "694:2:43", - "nodeType": "YulLiteral", - "src": "694:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "676:6:43", - "nodeType": "YulIdentifier", - "src": "676:6:43" - }, - "nativeSrc": "676:21:43", - "nodeType": "YulFunctionCall", - "src": "676:21:43" - }, - "nativeSrc": "676:21:43", - "nodeType": "YulExpressionStatement", - "src": "676:21:43" - }, - { - "nativeSrc": "706:53:43", - "nodeType": "YulAssignment", - "src": "706:53:43", - "value": { - "arguments": [ - { - "name": "value0", - "nativeSrc": "732:6:43", - "nodeType": "YulIdentifier", - "src": "732:6:43" - }, - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "744:9:43", - "nodeType": "YulIdentifier", - "src": "744:9:43" - }, - { - "kind": "number", - "nativeSrc": "755:2:43", - "nodeType": "YulLiteral", - "src": "755:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "740:3:43", - "nodeType": "YulIdentifier", - "src": "740:3:43" - }, - "nativeSrc": "740:18:43", - "nodeType": "YulFunctionCall", - "src": "740:18:43" - } - ], - "functionName": { - "name": "abi_encode_string", - "nativeSrc": "714:17:43", - "nodeType": "YulIdentifier", - "src": "714:17:43" - }, - "nativeSrc": "714:45:43", - "nodeType": "YulFunctionCall", - "src": "714:45:43" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "706:4:43", - "nodeType": "YulIdentifier", - "src": "706:4:43" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed", - "nativeSrc": "545:220:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "635:9:43", - "nodeType": "YulTypedName", - "src": "635:9:43", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "646:6:43", - "nodeType": "YulTypedName", - "src": "646:6:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "657:4:43", - "nodeType": "YulTypedName", - "src": "657:4:43", - "type": "" - } - ], - "src": "545:220:43" - }, - { - "body": { - "nativeSrc": "815:86:43", - "nodeType": "YulBlock", - "src": "815:86:43", - "statements": [ - { - "body": { - "nativeSrc": "879:16:43", - "nodeType": "YulBlock", - "src": "879:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "888:1:43", - "nodeType": "YulLiteral", - "src": "888:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "891:1:43", - "nodeType": "YulLiteral", - "src": "891:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "881:6:43", - "nodeType": "YulIdentifier", - "src": "881:6:43" - }, - "nativeSrc": "881:12:43", - "nodeType": "YulFunctionCall", - "src": "881:12:43" - }, - "nativeSrc": "881:12:43", - "nodeType": "YulExpressionStatement", - "src": "881:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nativeSrc": "838:5:43", - "nodeType": "YulIdentifier", - "src": "838:5:43" - }, - { - "arguments": [ - { - "name": "value", - "nativeSrc": "849:5:43", - "nodeType": "YulIdentifier", - "src": "849:5:43" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "864:3:43", - "nodeType": "YulLiteral", - "src": "864:3:43", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nativeSrc": "869:1:43", - "nodeType": "YulLiteral", - "src": "869:1:43", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "860:3:43", - "nodeType": "YulIdentifier", - "src": "860:3:43" - }, - "nativeSrc": "860:11:43", - "nodeType": "YulFunctionCall", - "src": "860:11:43" - }, - { - "kind": "number", - "nativeSrc": "873:1:43", - "nodeType": "YulLiteral", - "src": "873:1:43", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "856:3:43", - "nodeType": "YulIdentifier", - "src": "856:3:43" - }, - "nativeSrc": "856:19:43", - "nodeType": "YulFunctionCall", - "src": "856:19:43" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "845:3:43", - "nodeType": "YulIdentifier", - "src": "845:3:43" - }, - "nativeSrc": "845:31:43", - "nodeType": "YulFunctionCall", - "src": "845:31:43" - } - ], - "functionName": { - "name": "eq", - "nativeSrc": "835:2:43", - "nodeType": "YulIdentifier", - "src": "835:2:43" - }, - "nativeSrc": "835:42:43", - "nodeType": "YulFunctionCall", - "src": "835:42:43" - } - ], - "functionName": { - "name": "iszero", - "nativeSrc": "828:6:43", - "nodeType": "YulIdentifier", - "src": "828:6:43" - }, - "nativeSrc": "828:50:43", - "nodeType": "YulFunctionCall", - "src": "828:50:43" - }, - "nativeSrc": "825:70:43", - "nodeType": "YulIf", - "src": "825:70:43" - } - ] - }, - "name": "validator_revert_address", - "nativeSrc": "770:131:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nativeSrc": "804:5:43", - "nodeType": "YulTypedName", - "src": "804:5:43", - "type": "" - } - ], - "src": "770:131:43" - }, - { - "body": { - "nativeSrc": "993:228:43", - "nodeType": "YulBlock", - "src": "993:228:43", - "statements": [ - { - "body": { - "nativeSrc": "1039:16:43", - "nodeType": "YulBlock", - "src": "1039:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "1048:1:43", - "nodeType": "YulLiteral", - "src": "1048:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "1051:1:43", - "nodeType": "YulLiteral", - "src": "1051:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "1041:6:43", - "nodeType": "YulIdentifier", - "src": "1041:6:43" - }, - "nativeSrc": "1041:12:43", - "nodeType": "YulFunctionCall", - "src": "1041:12:43" - }, - "nativeSrc": "1041:12:43", - "nodeType": "YulExpressionStatement", - "src": "1041:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nativeSrc": "1014:7:43", - "nodeType": "YulIdentifier", - "src": "1014:7:43" - }, - { - "name": "headStart", - "nativeSrc": "1023:9:43", - "nodeType": "YulIdentifier", - "src": "1023:9:43" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "1010:3:43", - "nodeType": "YulIdentifier", - "src": "1010:3:43" - }, - "nativeSrc": "1010:23:43", - "nodeType": "YulFunctionCall", - "src": "1010:23:43" - }, - { - "kind": "number", - "nativeSrc": "1035:2:43", - "nodeType": "YulLiteral", - "src": "1035:2:43", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "1006:3:43", - "nodeType": "YulIdentifier", - "src": "1006:3:43" - }, - "nativeSrc": "1006:32:43", - "nodeType": "YulFunctionCall", - "src": "1006:32:43" - }, - "nativeSrc": "1003:52:43", - "nodeType": "YulIf", - "src": "1003:52:43" - }, - { - "nativeSrc": "1064:36:43", - "nodeType": "YulVariableDeclaration", - "src": "1064:36:43", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "1090:9:43", - "nodeType": "YulIdentifier", - "src": "1090:9:43" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "1077:12:43", - "nodeType": "YulIdentifier", - "src": "1077:12:43" - }, - "nativeSrc": "1077:23:43", - "nodeType": "YulFunctionCall", - "src": "1077:23:43" - }, - "variables": [ - { - "name": "value", - "nativeSrc": "1068:5:43", - "nodeType": "YulTypedName", - "src": "1068:5:43", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nativeSrc": "1134:5:43", - "nodeType": "YulIdentifier", - "src": "1134:5:43" - } - ], - "functionName": { - "name": "validator_revert_address", - "nativeSrc": "1109:24:43", - "nodeType": "YulIdentifier", - "src": "1109:24:43" - }, - "nativeSrc": "1109:31:43", - "nodeType": "YulFunctionCall", - "src": "1109:31:43" - }, - "nativeSrc": "1109:31:43", - "nodeType": "YulExpressionStatement", - "src": "1109:31:43" - }, - { - "nativeSrc": "1149:15:43", - "nodeType": "YulAssignment", - "src": "1149:15:43", - "value": { - "name": "value", - "nativeSrc": "1159:5:43", - "nodeType": "YulIdentifier", - "src": "1159:5:43" - }, - "variableNames": [ - { - "name": "value0", - "nativeSrc": "1149:6:43", - "nodeType": "YulIdentifier", - "src": "1149:6:43" - } - ] - }, - { - "nativeSrc": "1173:42:43", - "nodeType": "YulAssignment", - "src": "1173:42:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "1200:9:43", - "nodeType": "YulIdentifier", - "src": "1200:9:43" - }, - { - "kind": "number", - "nativeSrc": "1211:2:43", - "nodeType": "YulLiteral", - "src": "1211:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "1196:3:43", - "nodeType": "YulIdentifier", - "src": "1196:3:43" - }, - "nativeSrc": "1196:18:43", - "nodeType": "YulFunctionCall", - "src": "1196:18:43" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "1183:12:43", - "nodeType": "YulIdentifier", - "src": "1183:12:43" - }, - "nativeSrc": "1183:32:43", - "nodeType": "YulFunctionCall", - "src": "1183:32:43" - }, - "variableNames": [ - { - "name": "value1", - "nativeSrc": "1173:6:43", - "nodeType": "YulIdentifier", - "src": "1173:6:43" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_addresst_uint256", - "nativeSrc": "906:315:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "951:9:43", - "nodeType": "YulTypedName", - "src": "951:9:43", - "type": "" - }, - { - "name": "dataEnd", - "nativeSrc": "962:7:43", - "nodeType": "YulTypedName", - "src": "962:7:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nativeSrc": "974:6:43", - "nodeType": "YulTypedName", - "src": "974:6:43", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "982:6:43", - "nodeType": "YulTypedName", - "src": "982:6:43", - "type": "" - } - ], - "src": "906:315:43" - }, - { - "body": { - "nativeSrc": "1321:92:43", - "nodeType": "YulBlock", - "src": "1321:92:43", - "statements": [ - { - "nativeSrc": "1331:26:43", - "nodeType": "YulAssignment", - "src": "1331:26:43", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "1343:9:43", - "nodeType": "YulIdentifier", - "src": "1343:9:43" - }, - { - "kind": "number", - "nativeSrc": "1354:2:43", - "nodeType": "YulLiteral", - "src": "1354:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "1339:3:43", - "nodeType": "YulIdentifier", - "src": "1339:3:43" - }, - "nativeSrc": "1339:18:43", - "nodeType": "YulFunctionCall", - "src": "1339:18:43" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "1331:4:43", - "nodeType": "YulIdentifier", - "src": "1331:4:43" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "1373:9:43", - "nodeType": "YulIdentifier", - "src": "1373:9:43" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nativeSrc": "1398:6:43", - "nodeType": "YulIdentifier", - "src": "1398:6:43" - } - ], - "functionName": { - "name": "iszero", - "nativeSrc": "1391:6:43", - "nodeType": "YulIdentifier", - "src": "1391:6:43" - }, - "nativeSrc": "1391:14:43", - "nodeType": "YulFunctionCall", - "src": "1391:14:43" - } - ], - "functionName": { - "name": "iszero", - "nativeSrc": "1384:6:43", - "nodeType": "YulIdentifier", - "src": "1384:6:43" - }, - "nativeSrc": "1384:22:43", - "nodeType": "YulFunctionCall", - "src": "1384:22:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "1366:6:43", - "nodeType": "YulIdentifier", - "src": "1366:6:43" - }, - "nativeSrc": "1366:41:43", - "nodeType": "YulFunctionCall", - "src": "1366:41:43" - }, - "nativeSrc": "1366:41:43", - "nodeType": "YulExpressionStatement", - "src": "1366:41:43" - } - ] - }, - "name": "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed", - "nativeSrc": "1226:187:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "1290:9:43", - "nodeType": "YulTypedName", - "src": "1290:9:43", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "1301:6:43", - "nodeType": "YulTypedName", - "src": "1301:6:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "1312:4:43", - "nodeType": "YulTypedName", - "src": "1312:4:43", - "type": "" - } - ], - "src": "1226:187:43" - }, - { - "body": { - "nativeSrc": "1490:86:43", - "nodeType": "YulBlock", - "src": "1490:86:43", - "statements": [ - { - "body": { - "nativeSrc": "1530:16:43", - "nodeType": "YulBlock", - "src": "1530:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "1539:1:43", - "nodeType": "YulLiteral", - "src": "1539:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "1542:1:43", - "nodeType": "YulLiteral", - "src": "1542:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "1532:6:43", - "nodeType": "YulIdentifier", - "src": "1532:6:43" - }, - "nativeSrc": "1532:12:43", - "nodeType": "YulFunctionCall", - "src": "1532:12:43" - }, - "nativeSrc": "1532:12:43", - "nodeType": "YulExpressionStatement", - "src": "1532:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "end", - "nativeSrc": "1511:3:43", - "nodeType": "YulIdentifier", - "src": "1511:3:43" - }, - { - "name": "offset", - "nativeSrc": "1516:6:43", - "nodeType": "YulIdentifier", - "src": "1516:6:43" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "1507:3:43", - "nodeType": "YulIdentifier", - "src": "1507:3:43" - }, - "nativeSrc": "1507:16:43", - "nodeType": "YulFunctionCall", - "src": "1507:16:43" - }, - { - "kind": "number", - "nativeSrc": "1525:3:43", - "nodeType": "YulLiteral", - "src": "1525:3:43", - "type": "", - "value": "224" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "1503:3:43", - "nodeType": "YulIdentifier", - "src": "1503:3:43" - }, - "nativeSrc": "1503:26:43", - "nodeType": "YulFunctionCall", - "src": "1503:26:43" - }, - "nativeSrc": "1500:46:43", - "nodeType": "YulIf", - "src": "1500:46:43" - }, - { - "nativeSrc": "1555:15:43", - "nodeType": "YulAssignment", - "src": "1555:15:43", - "value": { - "name": "offset", - "nativeSrc": "1564:6:43", - "nodeType": "YulIdentifier", - "src": "1564:6:43" - }, - "variableNames": [ - { - "name": "value", - "nativeSrc": "1555:5:43", - "nodeType": "YulIdentifier", - "src": "1555:5:43" - } - ] - } - ] - }, - "name": "abi_decode_struct_SendParam_calldata", - "nativeSrc": "1418:158:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "offset", - "nativeSrc": "1464:6:43", - "nodeType": "YulTypedName", - "src": "1464:6:43", - "type": "" - }, - { - "name": "end", - "nativeSrc": "1472:3:43", - "nodeType": "YulTypedName", - "src": "1472:3:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value", - "nativeSrc": "1480:5:43", - "nodeType": "YulTypedName", - "src": "1480:5:43", - "type": "" - } - ], - "src": "1418:158:43" - }, - { - "body": { - "nativeSrc": "1680:261:43", - "nodeType": "YulBlock", - "src": "1680:261:43", - "statements": [ - { - "body": { - "nativeSrc": "1726:16:43", - "nodeType": "YulBlock", - "src": "1726:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "1735:1:43", - "nodeType": "YulLiteral", - "src": "1735:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "1738:1:43", - "nodeType": "YulLiteral", - "src": "1738:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "1728:6:43", - "nodeType": "YulIdentifier", - "src": "1728:6:43" - }, - "nativeSrc": "1728:12:43", - "nodeType": "YulFunctionCall", - "src": "1728:12:43" - }, - "nativeSrc": "1728:12:43", - "nodeType": "YulExpressionStatement", - "src": "1728:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nativeSrc": "1701:7:43", - "nodeType": "YulIdentifier", - "src": "1701:7:43" - }, - { - "name": "headStart", - "nativeSrc": "1710:9:43", - "nodeType": "YulIdentifier", - "src": "1710:9:43" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "1697:3:43", - "nodeType": "YulIdentifier", - "src": "1697:3:43" - }, - "nativeSrc": "1697:23:43", - "nodeType": "YulFunctionCall", - "src": "1697:23:43" - }, - { - "kind": "number", - "nativeSrc": "1722:2:43", - "nodeType": "YulLiteral", - "src": "1722:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "1693:3:43", - "nodeType": "YulIdentifier", - "src": "1693:3:43" - }, - "nativeSrc": "1693:32:43", - "nodeType": "YulFunctionCall", - "src": "1693:32:43" - }, - "nativeSrc": "1690:52:43", - "nodeType": "YulIf", - "src": "1690:52:43" - }, - { - "nativeSrc": "1751:37:43", - "nodeType": "YulVariableDeclaration", - "src": "1751:37:43", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "1778:9:43", - "nodeType": "YulIdentifier", - "src": "1778:9:43" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "1765:12:43", - "nodeType": "YulIdentifier", - "src": "1765:12:43" - }, - "nativeSrc": "1765:23:43", - "nodeType": "YulFunctionCall", - "src": "1765:23:43" - }, - "variables": [ - { - "name": "offset", - "nativeSrc": "1755:6:43", - "nodeType": "YulTypedName", - "src": "1755:6:43", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "1831:16:43", - "nodeType": "YulBlock", - "src": "1831:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "1840:1:43", - "nodeType": "YulLiteral", - "src": "1840:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "1843:1:43", - "nodeType": "YulLiteral", - "src": "1843:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "1833:6:43", - "nodeType": "YulIdentifier", - "src": "1833:6:43" - }, - "nativeSrc": "1833:12:43", - "nodeType": "YulFunctionCall", - "src": "1833:12:43" - }, - "nativeSrc": "1833:12:43", - "nodeType": "YulExpressionStatement", - "src": "1833:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "offset", - "nativeSrc": "1803:6:43", - "nodeType": "YulIdentifier", - "src": "1803:6:43" - }, - { - "kind": "number", - "nativeSrc": "1811:18:43", - "nodeType": "YulLiteral", - "src": "1811:18:43", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "1800:2:43", - "nodeType": "YulIdentifier", - "src": "1800:2:43" - }, - "nativeSrc": "1800:30:43", - "nodeType": "YulFunctionCall", - "src": "1800:30:43" - }, - "nativeSrc": "1797:50:43", - "nodeType": "YulIf", - "src": "1797:50:43" - }, - { - "nativeSrc": "1856:79:43", - "nodeType": "YulAssignment", - "src": "1856:79:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "1907:9:43", - "nodeType": "YulIdentifier", - "src": "1907:9:43" - }, - { - "name": "offset", - "nativeSrc": "1918:6:43", - "nodeType": "YulIdentifier", - "src": "1918:6:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "1903:3:43", - "nodeType": "YulIdentifier", - "src": "1903:3:43" - }, - "nativeSrc": "1903:22:43", - "nodeType": "YulFunctionCall", - "src": "1903:22:43" - }, - { - "name": "dataEnd", - "nativeSrc": "1927:7:43", - "nodeType": "YulIdentifier", - "src": "1927:7:43" - } - ], - "functionName": { - "name": "abi_decode_struct_SendParam_calldata", - "nativeSrc": "1866:36:43", - "nodeType": "YulIdentifier", - "src": "1866:36:43" - }, - "nativeSrc": "1866:69:43", - "nodeType": "YulFunctionCall", - "src": "1866:69:43" - }, - "variableNames": [ - { - "name": "value0", - "nativeSrc": "1856:6:43", - "nodeType": "YulIdentifier", - "src": "1856:6:43" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_struct$_SendParam_$3382_calldata_ptr", - "nativeSrc": "1581:360:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "1646:9:43", - "nodeType": "YulTypedName", - "src": "1646:9:43", - "type": "" - }, - { - "name": "dataEnd", - "nativeSrc": "1657:7:43", - "nodeType": "YulTypedName", - "src": "1657:7:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nativeSrc": "1669:6:43", - "nodeType": "YulTypedName", - "src": "1669:6:43", - "type": "" - } - ], - "src": "1581:360:43" - }, - { - "body": { - "nativeSrc": "1998:97:43", - "nodeType": "YulBlock", - "src": "1998:97:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "pos", - "nativeSrc": "2015:3:43", - "nodeType": "YulIdentifier", - "src": "2015:3:43" - }, - { - "arguments": [ - { - "name": "value", - "nativeSrc": "2026:5:43", - "nodeType": "YulIdentifier", - "src": "2026:5:43" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "2020:5:43", - "nodeType": "YulIdentifier", - "src": "2020:5:43" - }, - "nativeSrc": "2020:12:43", - "nodeType": "YulFunctionCall", - "src": "2020:12:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "2008:6:43", - "nodeType": "YulIdentifier", - "src": "2008:6:43" - }, - "nativeSrc": "2008:25:43", - "nodeType": "YulFunctionCall", - "src": "2008:25:43" - }, - "nativeSrc": "2008:25:43", - "nodeType": "YulExpressionStatement", - "src": "2008:25:43" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "pos", - "nativeSrc": "2053:3:43", - "nodeType": "YulIdentifier", - "src": "2053:3:43" - }, - { - "kind": "number", - "nativeSrc": "2058:4:43", - "nodeType": "YulLiteral", - "src": "2058:4:43", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "2049:3:43", - "nodeType": "YulIdentifier", - "src": "2049:3:43" - }, - "nativeSrc": "2049:14:43", - "nodeType": "YulFunctionCall", - "src": "2049:14:43" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nativeSrc": "2075:5:43", - "nodeType": "YulIdentifier", - "src": "2075:5:43" - }, - { - "kind": "number", - "nativeSrc": "2082:4:43", - "nodeType": "YulLiteral", - "src": "2082:4:43", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "2071:3:43", - "nodeType": "YulIdentifier", - "src": "2071:3:43" - }, - "nativeSrc": "2071:16:43", - "nodeType": "YulFunctionCall", - "src": "2071:16:43" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "2065:5:43", - "nodeType": "YulIdentifier", - "src": "2065:5:43" - }, - "nativeSrc": "2065:23:43", - "nodeType": "YulFunctionCall", - "src": "2065:23:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "2042:6:43", - "nodeType": "YulIdentifier", - "src": "2042:6:43" - }, - "nativeSrc": "2042:47:43", - "nodeType": "YulFunctionCall", - "src": "2042:47:43" - }, - "nativeSrc": "2042:47:43", - "nodeType": "YulExpressionStatement", - "src": "2042:47:43" - } - ] - }, - "name": "abi_encode_struct_OFTLimit", - "nativeSrc": "1946:149:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nativeSrc": "1982:5:43", - "nodeType": "YulTypedName", - "src": "1982:5:43", - "type": "" - }, - { - "name": "pos", - "nativeSrc": "1989:3:43", - "nodeType": "YulTypedName", - "src": "1989:3:43", - "type": "" - } - ], - "src": "1946:149:43" - }, - { - "body": { - "nativeSrc": "2475:961:43", - "nodeType": "YulBlock", - "src": "2475:961:43", - "statements": [ - { - "nativeSrc": "2485:33:43", - "nodeType": "YulVariableDeclaration", - "src": "2485:33:43", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "2503:9:43", - "nodeType": "YulIdentifier", - "src": "2503:9:43" - }, - { - "kind": "number", - "nativeSrc": "2514:3:43", - "nodeType": "YulLiteral", - "src": "2514:3:43", - "type": "", - "value": "160" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "2499:3:43", - "nodeType": "YulIdentifier", - "src": "2499:3:43" - }, - "nativeSrc": "2499:19:43", - "nodeType": "YulFunctionCall", - "src": "2499:19:43" - }, - "variables": [ - { - "name": "tail_1", - "nativeSrc": "2489:6:43", - "nodeType": "YulTypedName", - "src": "2489:6:43", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value0", - "nativeSrc": "2554:6:43", - "nodeType": "YulIdentifier", - "src": "2554:6:43" - }, - { - "name": "headStart", - "nativeSrc": "2562:9:43", - "nodeType": "YulIdentifier", - "src": "2562:9:43" - } - ], - "functionName": { - "name": "abi_encode_struct_OFTLimit", - "nativeSrc": "2527:26:43", - "nodeType": "YulIdentifier", - "src": "2527:26:43" - }, - "nativeSrc": "2527:45:43", - "nodeType": "YulFunctionCall", - "src": "2527:45:43" - }, - "nativeSrc": "2527:45:43", - "nodeType": "YulExpressionStatement", - "src": "2527:45:43" - }, - { - "nativeSrc": "2581:12:43", - "nodeType": "YulVariableDeclaration", - "src": "2581:12:43", - "value": { - "kind": "number", - "nativeSrc": "2591:2:43", - "nodeType": "YulLiteral", - "src": "2591:2:43", - "type": "", - "value": "64" - }, - "variables": [ - { - "name": "_1", - "nativeSrc": "2585:2:43", - "nodeType": "YulTypedName", - "src": "2585:2:43", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "2613:9:43", - "nodeType": "YulIdentifier", - "src": "2613:9:43" - }, - { - "kind": "number", - "nativeSrc": "2624:2:43", - "nodeType": "YulLiteral", - "src": "2624:2:43", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "2609:3:43", - "nodeType": "YulIdentifier", - "src": "2609:3:43" - }, - "nativeSrc": "2609:18:43", - "nodeType": "YulFunctionCall", - "src": "2609:18:43" - }, - { - "kind": "number", - "nativeSrc": "2629:3:43", - "nodeType": "YulLiteral", - "src": "2629:3:43", - "type": "", - "value": "160" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "2602:6:43", - "nodeType": "YulIdentifier", - "src": "2602:6:43" - }, - "nativeSrc": "2602:31:43", - "nodeType": "YulFunctionCall", - "src": "2602:31:43" - }, - "nativeSrc": "2602:31:43", - "nodeType": "YulExpressionStatement", - "src": "2602:31:43" - }, - { - "nativeSrc": "2642:17:43", - "nodeType": "YulVariableDeclaration", - "src": "2642:17:43", - "value": { - "name": "tail_1", - "nativeSrc": "2653:6:43", - "nodeType": "YulIdentifier", - "src": "2653:6:43" - }, - "variables": [ - { - "name": "pos", - "nativeSrc": "2646:3:43", - "nodeType": "YulTypedName", - "src": "2646:3:43", - "type": "" - } - ] - }, - { - "nativeSrc": "2668:27:43", - "nodeType": "YulVariableDeclaration", - "src": "2668:27:43", - "value": { - "arguments": [ - { - "name": "value1", - "nativeSrc": "2688:6:43", - "nodeType": "YulIdentifier", - "src": "2688:6:43" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "2682:5:43", - "nodeType": "YulIdentifier", - "src": "2682:5:43" - }, - "nativeSrc": "2682:13:43", - "nodeType": "YulFunctionCall", - "src": "2682:13:43" - }, - "variables": [ - { - "name": "length", - "nativeSrc": "2672:6:43", - "nodeType": "YulTypedName", - "src": "2672:6:43", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "tail_1", - "nativeSrc": "2711:6:43", - "nodeType": "YulIdentifier", - "src": "2711:6:43" - }, - { - "name": "length", - "nativeSrc": "2719:6:43", - "nodeType": "YulIdentifier", - "src": "2719:6:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "2704:6:43", - "nodeType": "YulIdentifier", - "src": "2704:6:43" - }, - "nativeSrc": "2704:22:43", - "nodeType": "YulFunctionCall", - "src": "2704:22:43" - }, - "nativeSrc": "2704:22:43", - "nodeType": "YulExpressionStatement", - "src": "2704:22:43" - }, - { - "nativeSrc": "2735:26:43", - "nodeType": "YulAssignment", - "src": "2735:26:43", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "2746:9:43", - "nodeType": "YulIdentifier", - "src": "2746:9:43" - }, - { - "kind": "number", - "nativeSrc": "2757:3:43", - "nodeType": "YulLiteral", - "src": "2757:3:43", - "type": "", - "value": "192" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "2742:3:43", - "nodeType": "YulIdentifier", - "src": "2742:3:43" - }, - "nativeSrc": "2742:19:43", - "nodeType": "YulFunctionCall", - "src": "2742:19:43" - }, - "variableNames": [ - { - "name": "pos", - "nativeSrc": "2735:3:43", - "nodeType": "YulIdentifier", - "src": "2735:3:43" - } - ] - }, - { - "nativeSrc": "2770:54:43", - "nodeType": "YulVariableDeclaration", - "src": "2770:54:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "2792:9:43", - "nodeType": "YulIdentifier", - "src": "2792:9:43" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "2807:1:43", - "nodeType": "YulLiteral", - "src": "2807:1:43", - "type": "", - "value": "5" - }, - { - "name": "length", - "nativeSrc": "2810:6:43", - "nodeType": "YulIdentifier", - "src": "2810:6:43" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "2803:3:43", - "nodeType": "YulIdentifier", - "src": "2803:3:43" - }, - "nativeSrc": "2803:14:43", - "nodeType": "YulFunctionCall", - "src": "2803:14:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "2788:3:43", - "nodeType": "YulIdentifier", - "src": "2788:3:43" - }, - "nativeSrc": "2788:30:43", - "nodeType": "YulFunctionCall", - "src": "2788:30:43" - }, - { - "kind": "number", - "nativeSrc": "2820:3:43", - "nodeType": "YulLiteral", - "src": "2820:3:43", - "type": "", - "value": "192" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "2784:3:43", - "nodeType": "YulIdentifier", - "src": "2784:3:43" - }, - "nativeSrc": "2784:40:43", - "nodeType": "YulFunctionCall", - "src": "2784:40:43" - }, - "variables": [ - { - "name": "tail_2", - "nativeSrc": "2774:6:43", - "nodeType": "YulTypedName", - "src": "2774:6:43", - "type": "" - } - ] - }, - { - "nativeSrc": "2833:14:43", - "nodeType": "YulVariableDeclaration", - "src": "2833:14:43", - "value": { - "kind": "number", - "nativeSrc": "2843:4:43", - "nodeType": "YulLiteral", - "src": "2843:4:43", - "type": "", - "value": "0x20" - }, - "variables": [ - { - "name": "_2", - "nativeSrc": "2837:2:43", - "nodeType": "YulTypedName", - "src": "2837:2:43", - "type": "" - } - ] - }, - { - "nativeSrc": "2856:31:43", - "nodeType": "YulVariableDeclaration", - "src": "2856:31:43", - "value": { - "arguments": [ - { - "name": "value1", - "nativeSrc": "2874:6:43", - "nodeType": "YulIdentifier", - "src": "2874:6:43" - }, - { - "kind": "number", - "nativeSrc": "2882:4:43", - "nodeType": "YulLiteral", - "src": "2882:4:43", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "2870:3:43", - "nodeType": "YulIdentifier", - "src": "2870:3:43" - }, - "nativeSrc": "2870:17:43", - "nodeType": "YulFunctionCall", - "src": "2870:17:43" - }, - "variables": [ - { - "name": "srcPtr", - "nativeSrc": "2860:6:43", - "nodeType": "YulTypedName", - "src": "2860:6:43", - "type": "" - } - ] - }, - { - "nativeSrc": "2896:10:43", - "nodeType": "YulVariableDeclaration", - "src": "2896:10:43", - "value": { - "kind": "number", - "nativeSrc": "2905:1:43", - "nodeType": "YulLiteral", - "src": "2905:1:43", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "i", - "nativeSrc": "2900:1:43", - "nodeType": "YulTypedName", - "src": "2900:1:43", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "2964:380:43", - "nodeType": "YulBlock", - "src": "2964:380:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "pos", - "nativeSrc": "2985:3:43", - "nodeType": "YulIdentifier", - "src": "2985:3:43" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "tail_2", - "nativeSrc": "2998:6:43", - "nodeType": "YulIdentifier", - "src": "2998:6:43" - }, - { - "name": "headStart", - "nativeSrc": "3006:9:43", - "nodeType": "YulIdentifier", - "src": "3006:9:43" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "2994:3:43", - "nodeType": "YulIdentifier", - "src": "2994:3:43" - }, - "nativeSrc": "2994:22:43", - "nodeType": "YulFunctionCall", - "src": "2994:22:43" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "3022:3:43", - "nodeType": "YulLiteral", - "src": "3022:3:43", - "type": "", - "value": "191" - } - ], - "functionName": { - "name": "not", - "nativeSrc": "3018:3:43", - "nodeType": "YulIdentifier", - "src": "3018:3:43" - }, - "nativeSrc": "3018:8:43", - "nodeType": "YulFunctionCall", - "src": "3018:8:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "2990:3:43", - "nodeType": "YulIdentifier", - "src": "2990:3:43" - }, - "nativeSrc": "2990:37:43", - "nodeType": "YulFunctionCall", - "src": "2990:37:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "2978:6:43", - "nodeType": "YulIdentifier", - "src": "2978:6:43" - }, - "nativeSrc": "2978:50:43", - "nodeType": "YulFunctionCall", - "src": "2978:50:43" - }, - "nativeSrc": "2978:50:43", - "nodeType": "YulExpressionStatement", - "src": "2978:50:43" - }, - { - "nativeSrc": "3041:23:43", - "nodeType": "YulVariableDeclaration", - "src": "3041:23:43", - "value": { - "arguments": [ - { - "name": "srcPtr", - "nativeSrc": "3057:6:43", - "nodeType": "YulIdentifier", - "src": "3057:6:43" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "3051:5:43", - "nodeType": "YulIdentifier", - "src": "3051:5:43" - }, - "nativeSrc": "3051:13:43", - "nodeType": "YulFunctionCall", - "src": "3051:13:43" - }, - "variables": [ - { - "name": "_3", - "nativeSrc": "3045:2:43", - "nodeType": "YulTypedName", - "src": "3045:2:43", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "tail_2", - "nativeSrc": "3084:6:43", - "nodeType": "YulIdentifier", - "src": "3084:6:43" - }, - { - "arguments": [ - { - "name": "_3", - "nativeSrc": "3098:2:43", - "nodeType": "YulIdentifier", - "src": "3098:2:43" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "3092:5:43", - "nodeType": "YulIdentifier", - "src": "3092:5:43" - }, - "nativeSrc": "3092:9:43", - "nodeType": "YulFunctionCall", - "src": "3092:9:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "3077:6:43", - "nodeType": "YulIdentifier", - "src": "3077:6:43" - }, - "nativeSrc": "3077:25:43", - "nodeType": "YulFunctionCall", - "src": "3077:25:43" - }, - "nativeSrc": "3077:25:43", - "nodeType": "YulExpressionStatement", - "src": "3077:25:43" - }, - { - "nativeSrc": "3115:38:43", - "nodeType": "YulVariableDeclaration", - "src": "3115:38:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "_3", - "nativeSrc": "3145:2:43", - "nodeType": "YulIdentifier", - "src": "3145:2:43" - }, - { - "name": "_2", - "nativeSrc": "3149:2:43", - "nodeType": "YulIdentifier", - "src": "3149:2:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "3141:3:43", - "nodeType": "YulIdentifier", - "src": "3141:3:43" - }, - "nativeSrc": "3141:11:43", - "nodeType": "YulFunctionCall", - "src": "3141:11:43" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "3135:5:43", - "nodeType": "YulIdentifier", - "src": "3135:5:43" - }, - "nativeSrc": "3135:18:43", - "nodeType": "YulFunctionCall", - "src": "3135:18:43" - }, - "variables": [ - { - "name": "memberValue0", - "nativeSrc": "3119:12:43", - "nodeType": "YulTypedName", - "src": "3119:12:43", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "tail_2", - "nativeSrc": "3177:6:43", - "nodeType": "YulIdentifier", - "src": "3177:6:43" - }, - { - "name": "_2", - "nativeSrc": "3185:2:43", - "nodeType": "YulIdentifier", - "src": "3185:2:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "3173:3:43", - "nodeType": "YulIdentifier", - "src": "3173:3:43" - }, - "nativeSrc": "3173:15:43", - "nodeType": "YulFunctionCall", - "src": "3173:15:43" - }, - { - "name": "_1", - "nativeSrc": "3190:2:43", - "nodeType": "YulIdentifier", - "src": "3190:2:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "3166:6:43", - "nodeType": "YulIdentifier", - "src": "3166:6:43" - }, - "nativeSrc": "3166:27:43", - "nodeType": "YulFunctionCall", - "src": "3166:27:43" - }, - "nativeSrc": "3166:27:43", - "nodeType": "YulExpressionStatement", - "src": "3166:27:43" - }, - { - "nativeSrc": "3206:58:43", - "nodeType": "YulAssignment", - "src": "3206:58:43", - "value": { - "arguments": [ - { - "name": "memberValue0", - "nativeSrc": "3234:12:43", - "nodeType": "YulIdentifier", - "src": "3234:12:43" - }, - { - "arguments": [ - { - "name": "tail_2", - "nativeSrc": "3252:6:43", - "nodeType": "YulIdentifier", - "src": "3252:6:43" - }, - { - "name": "_1", - "nativeSrc": "3260:2:43", - "nodeType": "YulIdentifier", - "src": "3260:2:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "3248:3:43", - "nodeType": "YulIdentifier", - "src": "3248:3:43" - }, - "nativeSrc": "3248:15:43", - "nodeType": "YulFunctionCall", - "src": "3248:15:43" - } - ], - "functionName": { - "name": "abi_encode_string", - "nativeSrc": "3216:17:43", - "nodeType": "YulIdentifier", - "src": "3216:17:43" - }, - "nativeSrc": "3216:48:43", - "nodeType": "YulFunctionCall", - "src": "3216:48:43" - }, - "variableNames": [ - { - "name": "tail_2", - "nativeSrc": "3206:6:43", - "nodeType": "YulIdentifier", - "src": "3206:6:43" - } - ] - }, - { - "nativeSrc": "3277:25:43", - "nodeType": "YulAssignment", - "src": "3277:25:43", - "value": { - "arguments": [ - { - "name": "srcPtr", - "nativeSrc": "3291:6:43", - "nodeType": "YulIdentifier", - "src": "3291:6:43" - }, - { - "name": "_2", - "nativeSrc": "3299:2:43", - "nodeType": "YulIdentifier", - "src": "3299:2:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "3287:3:43", - "nodeType": "YulIdentifier", - "src": "3287:3:43" - }, - "nativeSrc": "3287:15:43", - "nodeType": "YulFunctionCall", - "src": "3287:15:43" - }, - "variableNames": [ - { - "name": "srcPtr", - "nativeSrc": "3277:6:43", - "nodeType": "YulIdentifier", - "src": "3277:6:43" - } - ] - }, - { - "nativeSrc": "3315:19:43", - "nodeType": "YulAssignment", - "src": "3315:19:43", - "value": { - "arguments": [ - { - "name": "pos", - "nativeSrc": "3326:3:43", - "nodeType": "YulIdentifier", - "src": "3326:3:43" - }, - { - "name": "_2", - "nativeSrc": "3331:2:43", - "nodeType": "YulIdentifier", - "src": "3331:2:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "3322:3:43", - "nodeType": "YulIdentifier", - "src": "3322:3:43" - }, - "nativeSrc": "3322:12:43", - "nodeType": "YulFunctionCall", - "src": "3322:12:43" - }, - "variableNames": [ - { - "name": "pos", - "nativeSrc": "3315:3:43", - "nodeType": "YulIdentifier", - "src": "3315:3:43" - } - ] - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nativeSrc": "2926:1:43", - "nodeType": "YulIdentifier", - "src": "2926:1:43" - }, - { - "name": "length", - "nativeSrc": "2929:6:43", - "nodeType": "YulIdentifier", - "src": "2929:6:43" - } - ], - "functionName": { - "name": "lt", - "nativeSrc": "2923:2:43", - "nodeType": "YulIdentifier", - "src": "2923:2:43" - }, - "nativeSrc": "2923:13:43", - "nodeType": "YulFunctionCall", - "src": "2923:13:43" - }, - "nativeSrc": "2915:429:43", - "nodeType": "YulForLoop", - "post": { - "nativeSrc": "2937:18:43", - "nodeType": "YulBlock", - "src": "2937:18:43", - "statements": [ - { - "nativeSrc": "2939:14:43", - "nodeType": "YulAssignment", - "src": "2939:14:43", - "value": { - "arguments": [ - { - "name": "i", - "nativeSrc": "2948:1:43", - "nodeType": "YulIdentifier", - "src": "2948:1:43" - }, - { - "kind": "number", - "nativeSrc": "2951:1:43", - "nodeType": "YulLiteral", - "src": "2951:1:43", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "2944:3:43", - "nodeType": "YulIdentifier", - "src": "2944:3:43" - }, - "nativeSrc": "2944:9:43", - "nodeType": "YulFunctionCall", - "src": "2944:9:43" - }, - "variableNames": [ - { - "name": "i", - "nativeSrc": "2939:1:43", - "nodeType": "YulIdentifier", - "src": "2939:1:43" - } - ] - } - ] - }, - "pre": { - "nativeSrc": "2919:3:43", - "nodeType": "YulBlock", - "src": "2919:3:43", - "statements": [] - }, - "src": "2915:429:43" - }, - { - "nativeSrc": "3353:14:43", - "nodeType": "YulAssignment", - "src": "3353:14:43", - "value": { - "name": "tail_2", - "nativeSrc": "3361:6:43", - "nodeType": "YulIdentifier", - "src": "3361:6:43" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "3353:4:43", - "nodeType": "YulIdentifier", - "src": "3353:4:43" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value2", - "nativeSrc": "3403:6:43", - "nodeType": "YulIdentifier", - "src": "3403:6:43" - }, - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "3415:9:43", - "nodeType": "YulIdentifier", - "src": "3415:9:43" - }, - { - "kind": "number", - "nativeSrc": "3426:2:43", - "nodeType": "YulLiteral", - "src": "3426:2:43", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "3411:3:43", - "nodeType": "YulIdentifier", - "src": "3411:3:43" - }, - "nativeSrc": "3411:18:43", - "nodeType": "YulFunctionCall", - "src": "3411:18:43" - } - ], - "functionName": { - "name": "abi_encode_struct_OFTLimit", - "nativeSrc": "3376:26:43", - "nodeType": "YulIdentifier", - "src": "3376:26:43" - }, - "nativeSrc": "3376:54:43", - "nodeType": "YulFunctionCall", - "src": "3376:54:43" - }, - "nativeSrc": "3376:54:43", - "nodeType": "YulExpressionStatement", - "src": "3376:54:43" - } - ] - }, - "name": "abi_encode_tuple_t_struct$_OFTLimit_$3388_memory_ptr_t_array$_t_struct$_OFTFeeDetail_$3400_memory_ptr_$dyn_memory_ptr_t_struct$_OFTReceipt_$3394_memory_ptr__to_t_struct$_OFTLimit_$3388_memory_ptr_t_array$_t_struct$_OFTFeeDetail_$3400_memory_ptr_$dyn_memory_ptr_t_struct$_OFTReceipt_$3394_memory_ptr__fromStack_reversed", - "nativeSrc": "2100:1336:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "2428:9:43", - "nodeType": "YulTypedName", - "src": "2428:9:43", - "type": "" - }, - { - "name": "value2", - "nativeSrc": "2439:6:43", - "nodeType": "YulTypedName", - "src": "2439:6:43", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "2447:6:43", - "nodeType": "YulTypedName", - "src": "2447:6:43", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "2455:6:43", - "nodeType": "YulTypedName", - "src": "2455:6:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "2466:4:43", - "nodeType": "YulTypedName", - "src": "2466:4:43", - "type": "" - } - ], - "src": "2100:1336:43" - }, - { - "body": { - "nativeSrc": "3542:102:43", - "nodeType": "YulBlock", - "src": "3542:102:43", - "statements": [ - { - "nativeSrc": "3552:26:43", - "nodeType": "YulAssignment", - "src": "3552:26:43", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "3564:9:43", - "nodeType": "YulIdentifier", - "src": "3564:9:43" - }, - { - "kind": "number", - "nativeSrc": "3575:2:43", - "nodeType": "YulLiteral", - "src": "3575:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "3560:3:43", - "nodeType": "YulIdentifier", - "src": "3560:3:43" - }, - "nativeSrc": "3560:18:43", - "nodeType": "YulFunctionCall", - "src": "3560:18:43" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "3552:4:43", - "nodeType": "YulIdentifier", - "src": "3552:4:43" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "3594:9:43", - "nodeType": "YulIdentifier", - "src": "3594:9:43" - }, - { - "arguments": [ - { - "name": "value0", - "nativeSrc": "3609:6:43", - "nodeType": "YulIdentifier", - "src": "3609:6:43" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "3625:3:43", - "nodeType": "YulLiteral", - "src": "3625:3:43", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nativeSrc": "3630:1:43", - "nodeType": "YulLiteral", - "src": "3630:1:43", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "3621:3:43", - "nodeType": "YulIdentifier", - "src": "3621:3:43" - }, - "nativeSrc": "3621:11:43", - "nodeType": "YulFunctionCall", - "src": "3621:11:43" - }, - { - "kind": "number", - "nativeSrc": "3634:1:43", - "nodeType": "YulLiteral", - "src": "3634:1:43", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "3617:3:43", - "nodeType": "YulIdentifier", - "src": "3617:3:43" - }, - "nativeSrc": "3617:19:43", - "nodeType": "YulFunctionCall", - "src": "3617:19:43" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "3605:3:43", - "nodeType": "YulIdentifier", - "src": "3605:3:43" - }, - "nativeSrc": "3605:32:43", - "nodeType": "YulFunctionCall", - "src": "3605:32:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "3587:6:43", - "nodeType": "YulIdentifier", - "src": "3587:6:43" - }, - "nativeSrc": "3587:51:43", - "nodeType": "YulFunctionCall", - "src": "3587:51:43" - }, - "nativeSrc": "3587:51:43", - "nodeType": "YulExpressionStatement", - "src": "3587:51:43" - } - ] - }, - "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed", - "nativeSrc": "3441:203:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "3511:9:43", - "nodeType": "YulTypedName", - "src": "3511:9:43", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "3522:6:43", - "nodeType": "YulTypedName", - "src": "3522:6:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "3533:4:43", - "nodeType": "YulTypedName", - "src": "3533:4:43", - "type": "" - } - ], - "src": "3441:203:43" - }, - { - "body": { - "nativeSrc": "3718:85:43", - "nodeType": "YulBlock", - "src": "3718:85:43", - "statements": [ - { - "body": { - "nativeSrc": "3757:16:43", - "nodeType": "YulBlock", - "src": "3757:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "3766:1:43", - "nodeType": "YulLiteral", - "src": "3766:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "3769:1:43", - "nodeType": "YulLiteral", - "src": "3769:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "3759:6:43", - "nodeType": "YulIdentifier", - "src": "3759:6:43" - }, - "nativeSrc": "3759:12:43", - "nodeType": "YulFunctionCall", - "src": "3759:12:43" - }, - "nativeSrc": "3759:12:43", - "nodeType": "YulExpressionStatement", - "src": "3759:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "end", - "nativeSrc": "3739:3:43", - "nodeType": "YulIdentifier", - "src": "3739:3:43" - }, - { - "name": "offset", - "nativeSrc": "3744:6:43", - "nodeType": "YulIdentifier", - "src": "3744:6:43" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "3735:3:43", - "nodeType": "YulIdentifier", - "src": "3735:3:43" - }, - "nativeSrc": "3735:16:43", - "nodeType": "YulFunctionCall", - "src": "3735:16:43" - }, - { - "kind": "number", - "nativeSrc": "3753:2:43", - "nodeType": "YulLiteral", - "src": "3753:2:43", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "3731:3:43", - "nodeType": "YulIdentifier", - "src": "3731:3:43" - }, - "nativeSrc": "3731:25:43", - "nodeType": "YulFunctionCall", - "src": "3731:25:43" - }, - "nativeSrc": "3728:45:43", - "nodeType": "YulIf", - "src": "3728:45:43" - }, - { - "nativeSrc": "3782:15:43", - "nodeType": "YulAssignment", - "src": "3782:15:43", - "value": { - "name": "offset", - "nativeSrc": "3791:6:43", - "nodeType": "YulIdentifier", - "src": "3791:6:43" - }, - "variableNames": [ - { - "name": "value", - "nativeSrc": "3782:5:43", - "nodeType": "YulIdentifier", - "src": "3782:5:43" - } - ] - } - ] - }, - "name": "abi_decode_struct_Origin_calldata", - "nativeSrc": "3649:154:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "offset", - "nativeSrc": "3692:6:43", - "nodeType": "YulTypedName", - "src": "3692:6:43", - "type": "" - }, - { - "name": "end", - "nativeSrc": "3700:3:43", - "nodeType": "YulTypedName", - "src": "3700:3:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value", - "nativeSrc": "3708:5:43", - "nodeType": "YulTypedName", - "src": "3708:5:43", - "type": "" - } - ], - "src": "3649:154:43" - }, - { - "body": { - "nativeSrc": "3880:275:43", - "nodeType": "YulBlock", - "src": "3880:275:43", - "statements": [ - { - "body": { - "nativeSrc": "3929:16:43", - "nodeType": "YulBlock", - "src": "3929:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "3938:1:43", - "nodeType": "YulLiteral", - "src": "3938:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "3941:1:43", - "nodeType": "YulLiteral", - "src": "3941:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "3931:6:43", - "nodeType": "YulIdentifier", - "src": "3931:6:43" - }, - "nativeSrc": "3931:12:43", - "nodeType": "YulFunctionCall", - "src": "3931:12:43" - }, - "nativeSrc": "3931:12:43", - "nodeType": "YulExpressionStatement", - "src": "3931:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "offset", - "nativeSrc": "3908:6:43", - "nodeType": "YulIdentifier", - "src": "3908:6:43" - }, - { - "kind": "number", - "nativeSrc": "3916:4:43", - "nodeType": "YulLiteral", - "src": "3916:4:43", - "type": "", - "value": "0x1f" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "3904:3:43", - "nodeType": "YulIdentifier", - "src": "3904:3:43" - }, - "nativeSrc": "3904:17:43", - "nodeType": "YulFunctionCall", - "src": "3904:17:43" - }, - { - "name": "end", - "nativeSrc": "3923:3:43", - "nodeType": "YulIdentifier", - "src": "3923:3:43" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "3900:3:43", - "nodeType": "YulIdentifier", - "src": "3900:3:43" - }, - "nativeSrc": "3900:27:43", - "nodeType": "YulFunctionCall", - "src": "3900:27:43" - } - ], - "functionName": { - "name": "iszero", - "nativeSrc": "3893:6:43", - "nodeType": "YulIdentifier", - "src": "3893:6:43" - }, - "nativeSrc": "3893:35:43", - "nodeType": "YulFunctionCall", - "src": "3893:35:43" - }, - "nativeSrc": "3890:55:43", - "nodeType": "YulIf", - "src": "3890:55:43" - }, - { - "nativeSrc": "3954:30:43", - "nodeType": "YulAssignment", - "src": "3954:30:43", - "value": { - "arguments": [ - { - "name": "offset", - "nativeSrc": "3977:6:43", - "nodeType": "YulIdentifier", - "src": "3977:6:43" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "3964:12:43", - "nodeType": "YulIdentifier", - "src": "3964:12:43" - }, - "nativeSrc": "3964:20:43", - "nodeType": "YulFunctionCall", - "src": "3964:20:43" - }, - "variableNames": [ - { - "name": "length", - "nativeSrc": "3954:6:43", - "nodeType": "YulIdentifier", - "src": "3954:6:43" - } - ] - }, - { - "body": { - "nativeSrc": "4027:16:43", - "nodeType": "YulBlock", - "src": "4027:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "4036:1:43", - "nodeType": "YulLiteral", - "src": "4036:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "4039:1:43", - "nodeType": "YulLiteral", - "src": "4039:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "4029:6:43", - "nodeType": "YulIdentifier", - "src": "4029:6:43" - }, - "nativeSrc": "4029:12:43", - "nodeType": "YulFunctionCall", - "src": "4029:12:43" - }, - "nativeSrc": "4029:12:43", - "nodeType": "YulExpressionStatement", - "src": "4029:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "length", - "nativeSrc": "3999:6:43", - "nodeType": "YulIdentifier", - "src": "3999:6:43" - }, - { - "kind": "number", - "nativeSrc": "4007:18:43", - "nodeType": "YulLiteral", - "src": "4007:18:43", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "3996:2:43", - "nodeType": "YulIdentifier", - "src": "3996:2:43" - }, - "nativeSrc": "3996:30:43", - "nodeType": "YulFunctionCall", - "src": "3996:30:43" - }, - "nativeSrc": "3993:50:43", - "nodeType": "YulIf", - "src": "3993:50:43" - }, - { - "nativeSrc": "4052:29:43", - "nodeType": "YulAssignment", - "src": "4052:29:43", - "value": { - "arguments": [ - { - "name": "offset", - "nativeSrc": "4068:6:43", - "nodeType": "YulIdentifier", - "src": "4068:6:43" - }, - { - "kind": "number", - "nativeSrc": "4076:4:43", - "nodeType": "YulLiteral", - "src": "4076:4:43", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "4064:3:43", - "nodeType": "YulIdentifier", - "src": "4064:3:43" - }, - "nativeSrc": "4064:17:43", - "nodeType": "YulFunctionCall", - "src": "4064:17:43" - }, - "variableNames": [ - { - "name": "arrayPos", - "nativeSrc": "4052:8:43", - "nodeType": "YulIdentifier", - "src": "4052:8:43" - } - ] - }, - { - "body": { - "nativeSrc": "4133:16:43", - "nodeType": "YulBlock", - "src": "4133:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "4142:1:43", - "nodeType": "YulLiteral", - "src": "4142:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "4145:1:43", - "nodeType": "YulLiteral", - "src": "4145:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "4135:6:43", - "nodeType": "YulIdentifier", - "src": "4135:6:43" - }, - "nativeSrc": "4135:12:43", - "nodeType": "YulFunctionCall", - "src": "4135:12:43" - }, - "nativeSrc": "4135:12:43", - "nodeType": "YulExpressionStatement", - "src": "4135:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "offset", - "nativeSrc": "4104:6:43", - "nodeType": "YulIdentifier", - "src": "4104:6:43" - }, - { - "name": "length", - "nativeSrc": "4112:6:43", - "nodeType": "YulIdentifier", - "src": "4112:6:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "4100:3:43", - "nodeType": "YulIdentifier", - "src": "4100:3:43" - }, - "nativeSrc": "4100:19:43", - "nodeType": "YulFunctionCall", - "src": "4100:19:43" - }, - { - "kind": "number", - "nativeSrc": "4121:4:43", - "nodeType": "YulLiteral", - "src": "4121:4:43", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "4096:3:43", - "nodeType": "YulIdentifier", - "src": "4096:3:43" - }, - "nativeSrc": "4096:30:43", - "nodeType": "YulFunctionCall", - "src": "4096:30:43" - }, - { - "name": "end", - "nativeSrc": "4128:3:43", - "nodeType": "YulIdentifier", - "src": "4128:3:43" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "4093:2:43", - "nodeType": "YulIdentifier", - "src": "4093:2:43" - }, - "nativeSrc": "4093:39:43", - "nodeType": "YulFunctionCall", - "src": "4093:39:43" - }, - "nativeSrc": "4090:59:43", - "nodeType": "YulIf", - "src": "4090:59:43" - } - ] - }, - "name": "abi_decode_bytes_calldata", - "nativeSrc": "3808:347:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "offset", - "nativeSrc": "3843:6:43", - "nodeType": "YulTypedName", - "src": "3843:6:43", - "type": "" - }, - { - "name": "end", - "nativeSrc": "3851:3:43", - "nodeType": "YulTypedName", - "src": "3851:3:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "arrayPos", - "nativeSrc": "3859:8:43", - "nodeType": "YulTypedName", - "src": "3859:8:43", - "type": "" - }, - { - "name": "length", - "nativeSrc": "3869:6:43", - "nodeType": "YulTypedName", - "src": "3869:6:43", - "type": "" - } - ], - "src": "3808:347:43" - }, - { - "body": { - "nativeSrc": "4360:846:43", - "nodeType": "YulBlock", - "src": "4360:846:43", - "statements": [ - { - "body": { - "nativeSrc": "4407:16:43", - "nodeType": "YulBlock", - "src": "4407:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "4416:1:43", - "nodeType": "YulLiteral", - "src": "4416:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "4419:1:43", - "nodeType": "YulLiteral", - "src": "4419:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "4409:6:43", - "nodeType": "YulIdentifier", - "src": "4409:6:43" - }, - "nativeSrc": "4409:12:43", - "nodeType": "YulFunctionCall", - "src": "4409:12:43" - }, - "nativeSrc": "4409:12:43", - "nodeType": "YulExpressionStatement", - "src": "4409:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nativeSrc": "4381:7:43", - "nodeType": "YulIdentifier", - "src": "4381:7:43" - }, - { - "name": "headStart", - "nativeSrc": "4390:9:43", - "nodeType": "YulIdentifier", - "src": "4390:9:43" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "4377:3:43", - "nodeType": "YulIdentifier", - "src": "4377:3:43" - }, - "nativeSrc": "4377:23:43", - "nodeType": "YulFunctionCall", - "src": "4377:23:43" - }, - { - "kind": "number", - "nativeSrc": "4402:3:43", - "nodeType": "YulLiteral", - "src": "4402:3:43", - "type": "", - "value": "224" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "4373:3:43", - "nodeType": "YulIdentifier", - "src": "4373:3:43" - }, - "nativeSrc": "4373:33:43", - "nodeType": "YulFunctionCall", - "src": "4373:33:43" - }, - "nativeSrc": "4370:53:43", - "nodeType": "YulIf", - "src": "4370:53:43" - }, - { - "nativeSrc": "4432:63:43", - "nodeType": "YulAssignment", - "src": "4432:63:43", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "4476:9:43", - "nodeType": "YulIdentifier", - "src": "4476:9:43" - }, - { - "name": "dataEnd", - "nativeSrc": "4487:7:43", - "nodeType": "YulIdentifier", - "src": "4487:7:43" - } - ], - "functionName": { - "name": "abi_decode_struct_Origin_calldata", - "nativeSrc": "4442:33:43", - "nodeType": "YulIdentifier", - "src": "4442:33:43" - }, - "nativeSrc": "4442:53:43", - "nodeType": "YulFunctionCall", - "src": "4442:53:43" - }, - "variableNames": [ - { - "name": "value0", - "nativeSrc": "4432:6:43", - "nodeType": "YulIdentifier", - "src": "4432:6:43" - } - ] - }, - { - "nativeSrc": "4504:42:43", - "nodeType": "YulAssignment", - "src": "4504:42:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "4531:9:43", - "nodeType": "YulIdentifier", - "src": "4531:9:43" - }, - { - "kind": "number", - "nativeSrc": "4542:2:43", - "nodeType": "YulLiteral", - "src": "4542:2:43", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "4527:3:43", - "nodeType": "YulIdentifier", - "src": "4527:3:43" - }, - "nativeSrc": "4527:18:43", - "nodeType": "YulFunctionCall", - "src": "4527:18:43" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "4514:12:43", - "nodeType": "YulIdentifier", - "src": "4514:12:43" - }, - "nativeSrc": "4514:32:43", - "nodeType": "YulFunctionCall", - "src": "4514:32:43" - }, - "variableNames": [ - { - "name": "value1", - "nativeSrc": "4504:6:43", - "nodeType": "YulIdentifier", - "src": "4504:6:43" - } - ] - }, - { - "nativeSrc": "4555:47:43", - "nodeType": "YulVariableDeclaration", - "src": "4555:47:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "4586:9:43", - "nodeType": "YulIdentifier", - "src": "4586:9:43" - }, - { - "kind": "number", - "nativeSrc": "4597:3:43", - "nodeType": "YulLiteral", - "src": "4597:3:43", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "4582:3:43", - "nodeType": "YulIdentifier", - "src": "4582:3:43" - }, - "nativeSrc": "4582:19:43", - "nodeType": "YulFunctionCall", - "src": "4582:19:43" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "4569:12:43", - "nodeType": "YulIdentifier", - "src": "4569:12:43" - }, - "nativeSrc": "4569:33:43", - "nodeType": "YulFunctionCall", - "src": "4569:33:43" - }, - "variables": [ - { - "name": "offset", - "nativeSrc": "4559:6:43", - "nodeType": "YulTypedName", - "src": "4559:6:43", - "type": "" - } - ] - }, - { - "nativeSrc": "4611:28:43", - "nodeType": "YulVariableDeclaration", - "src": "4611:28:43", - "value": { - "kind": "number", - "nativeSrc": "4621:18:43", - "nodeType": "YulLiteral", - "src": "4621:18:43", - "type": "", - "value": "0xffffffffffffffff" - }, - "variables": [ - { - "name": "_1", - "nativeSrc": "4615:2:43", - "nodeType": "YulTypedName", - "src": "4615:2:43", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "4666:16:43", - "nodeType": "YulBlock", - "src": "4666:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "4675:1:43", - "nodeType": "YulLiteral", - "src": "4675:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "4678:1:43", - "nodeType": "YulLiteral", - "src": "4678:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "4668:6:43", - "nodeType": "YulIdentifier", - "src": "4668:6:43" - }, - "nativeSrc": "4668:12:43", - "nodeType": "YulFunctionCall", - "src": "4668:12:43" - }, - "nativeSrc": "4668:12:43", - "nodeType": "YulExpressionStatement", - "src": "4668:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "offset", - "nativeSrc": "4654:6:43", - "nodeType": "YulIdentifier", - "src": "4654:6:43" - }, - { - "name": "_1", - "nativeSrc": "4662:2:43", - "nodeType": "YulIdentifier", - "src": "4662:2:43" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "4651:2:43", - "nodeType": "YulIdentifier", - "src": "4651:2:43" - }, - "nativeSrc": "4651:14:43", - "nodeType": "YulFunctionCall", - "src": "4651:14:43" - }, - "nativeSrc": "4648:34:43", - "nodeType": "YulIf", - "src": "4648:34:43" - }, - { - "nativeSrc": "4691:84:43", - "nodeType": "YulVariableDeclaration", - "src": "4691:84:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "4747:9:43", - "nodeType": "YulIdentifier", - "src": "4747:9:43" - }, - { - "name": "offset", - "nativeSrc": "4758:6:43", - "nodeType": "YulIdentifier", - "src": "4758:6:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "4743:3:43", - "nodeType": "YulIdentifier", - "src": "4743:3:43" - }, - "nativeSrc": "4743:22:43", - "nodeType": "YulFunctionCall", - "src": "4743:22:43" - }, - { - "name": "dataEnd", - "nativeSrc": "4767:7:43", - "nodeType": "YulIdentifier", - "src": "4767:7:43" - } - ], - "functionName": { - "name": "abi_decode_bytes_calldata", - "nativeSrc": "4717:25:43", - "nodeType": "YulIdentifier", - "src": "4717:25:43" - }, - "nativeSrc": "4717:58:43", - "nodeType": "YulFunctionCall", - "src": "4717:58:43" - }, - "variables": [ - { - "name": "value2_1", - "nativeSrc": "4695:8:43", - "nodeType": "YulTypedName", - "src": "4695:8:43", - "type": "" - }, - { - "name": "value3_1", - "nativeSrc": "4705:8:43", - "nodeType": "YulTypedName", - "src": "4705:8:43", - "type": "" - } - ] - }, - { - "nativeSrc": "4784:18:43", - "nodeType": "YulAssignment", - "src": "4784:18:43", - "value": { - "name": "value2_1", - "nativeSrc": "4794:8:43", - "nodeType": "YulIdentifier", - "src": "4794:8:43" - }, - "variableNames": [ - { - "name": "value2", - "nativeSrc": "4784:6:43", - "nodeType": "YulIdentifier", - "src": "4784:6:43" - } - ] - }, - { - "nativeSrc": "4811:18:43", - "nodeType": "YulAssignment", - "src": "4811:18:43", - "value": { - "name": "value3_1", - "nativeSrc": "4821:8:43", - "nodeType": "YulIdentifier", - "src": "4821:8:43" - }, - "variableNames": [ - { - "name": "value3", - "nativeSrc": "4811:6:43", - "nodeType": "YulIdentifier", - "src": "4811:6:43" - } - ] - }, - { - "nativeSrc": "4838:46:43", - "nodeType": "YulVariableDeclaration", - "src": "4838:46:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "4868:9:43", - "nodeType": "YulIdentifier", - "src": "4868:9:43" - }, - { - "kind": "number", - "nativeSrc": "4879:3:43", - "nodeType": "YulLiteral", - "src": "4879:3:43", - "type": "", - "value": "160" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "4864:3:43", - "nodeType": "YulIdentifier", - "src": "4864:3:43" - }, - "nativeSrc": "4864:19:43", - "nodeType": "YulFunctionCall", - "src": "4864:19:43" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "4851:12:43", - "nodeType": "YulIdentifier", - "src": "4851:12:43" - }, - "nativeSrc": "4851:33:43", - "nodeType": "YulFunctionCall", - "src": "4851:33:43" - }, - "variables": [ - { - "name": "value", - "nativeSrc": "4842:5:43", - "nodeType": "YulTypedName", - "src": "4842:5:43", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nativeSrc": "4918:5:43", - "nodeType": "YulIdentifier", - "src": "4918:5:43" - } - ], - "functionName": { - "name": "validator_revert_address", - "nativeSrc": "4893:24:43", - "nodeType": "YulIdentifier", - "src": "4893:24:43" - }, - "nativeSrc": "4893:31:43", - "nodeType": "YulFunctionCall", - "src": "4893:31:43" - }, - "nativeSrc": "4893:31:43", - "nodeType": "YulExpressionStatement", - "src": "4893:31:43" - }, - { - "nativeSrc": "4933:15:43", - "nodeType": "YulAssignment", - "src": "4933:15:43", - "value": { - "name": "value", - "nativeSrc": "4943:5:43", - "nodeType": "YulIdentifier", - "src": "4943:5:43" - }, - "variableNames": [ - { - "name": "value4", - "nativeSrc": "4933:6:43", - "nodeType": "YulIdentifier", - "src": "4933:6:43" - } - ] - }, - { - "nativeSrc": "4957:49:43", - "nodeType": "YulVariableDeclaration", - "src": "4957:49:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "4990:9:43", - "nodeType": "YulIdentifier", - "src": "4990:9:43" - }, - { - "kind": "number", - "nativeSrc": "5001:3:43", - "nodeType": "YulLiteral", - "src": "5001:3:43", - "type": "", - "value": "192" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "4986:3:43", - "nodeType": "YulIdentifier", - "src": "4986:3:43" - }, - "nativeSrc": "4986:19:43", - "nodeType": "YulFunctionCall", - "src": "4986:19:43" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "4973:12:43", - "nodeType": "YulIdentifier", - "src": "4973:12:43" - }, - "nativeSrc": "4973:33:43", - "nodeType": "YulFunctionCall", - "src": "4973:33:43" - }, - "variables": [ - { - "name": "offset_1", - "nativeSrc": "4961:8:43", - "nodeType": "YulTypedName", - "src": "4961:8:43", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "5035:16:43", - "nodeType": "YulBlock", - "src": "5035:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "5044:1:43", - "nodeType": "YulLiteral", - "src": "5044:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "5047:1:43", - "nodeType": "YulLiteral", - "src": "5047:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "5037:6:43", - "nodeType": "YulIdentifier", - "src": "5037:6:43" - }, - "nativeSrc": "5037:12:43", - "nodeType": "YulFunctionCall", - "src": "5037:12:43" - }, - "nativeSrc": "5037:12:43", - "nodeType": "YulExpressionStatement", - "src": "5037:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "offset_1", - "nativeSrc": "5021:8:43", - "nodeType": "YulIdentifier", - "src": "5021:8:43" - }, - { - "name": "_1", - "nativeSrc": "5031:2:43", - "nodeType": "YulIdentifier", - "src": "5031:2:43" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "5018:2:43", - "nodeType": "YulIdentifier", - "src": "5018:2:43" - }, - "nativeSrc": "5018:16:43", - "nodeType": "YulFunctionCall", - "src": "5018:16:43" - }, - "nativeSrc": "5015:36:43", - "nodeType": "YulIf", - "src": "5015:36:43" - }, - { - "nativeSrc": "5060:86:43", - "nodeType": "YulVariableDeclaration", - "src": "5060:86:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "5116:9:43", - "nodeType": "YulIdentifier", - "src": "5116:9:43" - }, - { - "name": "offset_1", - "nativeSrc": "5127:8:43", - "nodeType": "YulIdentifier", - "src": "5127:8:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "5112:3:43", - "nodeType": "YulIdentifier", - "src": "5112:3:43" - }, - "nativeSrc": "5112:24:43", - "nodeType": "YulFunctionCall", - "src": "5112:24:43" - }, - { - "name": "dataEnd", - "nativeSrc": "5138:7:43", - "nodeType": "YulIdentifier", - "src": "5138:7:43" - } - ], - "functionName": { - "name": "abi_decode_bytes_calldata", - "nativeSrc": "5086:25:43", - "nodeType": "YulIdentifier", - "src": "5086:25:43" - }, - "nativeSrc": "5086:60:43", - "nodeType": "YulFunctionCall", - "src": "5086:60:43" - }, - "variables": [ - { - "name": "value5_1", - "nativeSrc": "5064:8:43", - "nodeType": "YulTypedName", - "src": "5064:8:43", - "type": "" - }, - { - "name": "value6_1", - "nativeSrc": "5074:8:43", - "nodeType": "YulTypedName", - "src": "5074:8:43", - "type": "" - } - ] - }, - { - "nativeSrc": "5155:18:43", - "nodeType": "YulAssignment", - "src": "5155:18:43", - "value": { - "name": "value5_1", - "nativeSrc": "5165:8:43", - "nodeType": "YulIdentifier", - "src": "5165:8:43" - }, - "variableNames": [ - { - "name": "value5", - "nativeSrc": "5155:6:43", - "nodeType": "YulIdentifier", - "src": "5155:6:43" - } - ] - }, - { - "nativeSrc": "5182:18:43", - "nodeType": "YulAssignment", - "src": "5182:18:43", - "value": { - "name": "value6_1", - "nativeSrc": "5192:8:43", - "nodeType": "YulIdentifier", - "src": "5192:8:43" - }, - "variableNames": [ - { - "name": "value6", - "nativeSrc": "5182:6:43", - "nodeType": "YulIdentifier", - "src": "5182:6:43" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_struct$_Origin_$40_calldata_ptrt_bytes32t_bytes_calldata_ptrt_addresst_bytes_calldata_ptr", - "nativeSrc": "4160:1046:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "4278:9:43", - "nodeType": "YulTypedName", - "src": "4278:9:43", - "type": "" - }, - { - "name": "dataEnd", - "nativeSrc": "4289:7:43", - "nodeType": "YulTypedName", - "src": "4289:7:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nativeSrc": "4301:6:43", - "nodeType": "YulTypedName", - "src": "4301:6:43", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "4309:6:43", - "nodeType": "YulTypedName", - "src": "4309:6:43", - "type": "" - }, - { - "name": "value2", - "nativeSrc": "4317:6:43", - "nodeType": "YulTypedName", - "src": "4317:6:43", - "type": "" - }, - { - "name": "value3", - "nativeSrc": "4325:6:43", - "nodeType": "YulTypedName", - "src": "4325:6:43", - "type": "" - }, - { - "name": "value4", - "nativeSrc": "4333:6:43", - "nodeType": "YulTypedName", - "src": "4333:6:43", - "type": "" - }, - { - "name": "value5", - "nativeSrc": "4341:6:43", - "nodeType": "YulTypedName", - "src": "4341:6:43", - "type": "" - }, - { - "name": "value6", - "nativeSrc": "4349:6:43", - "nodeType": "YulTypedName", - "src": "4349:6:43", - "type": "" - } - ], - "src": "4160:1046:43" - }, - { - "body": { - "nativeSrc": "5310:89:43", - "nodeType": "YulBlock", - "src": "5310:89:43", - "statements": [ - { - "nativeSrc": "5320:26:43", - "nodeType": "YulAssignment", - "src": "5320:26:43", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "5332:9:43", - "nodeType": "YulIdentifier", - "src": "5332:9:43" - }, - { - "kind": "number", - "nativeSrc": "5343:2:43", - "nodeType": "YulLiteral", - "src": "5343:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "5328:3:43", - "nodeType": "YulIdentifier", - "src": "5328:3:43" - }, - "nativeSrc": "5328:18:43", - "nodeType": "YulFunctionCall", - "src": "5328:18:43" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "5320:4:43", - "nodeType": "YulIdentifier", - "src": "5320:4:43" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "5362:9:43", - "nodeType": "YulIdentifier", - "src": "5362:9:43" - }, - { - "arguments": [ - { - "name": "value0", - "nativeSrc": "5377:6:43", - "nodeType": "YulIdentifier", - "src": "5377:6:43" - }, - { - "kind": "number", - "nativeSrc": "5385:6:43", - "nodeType": "YulLiteral", - "src": "5385:6:43", - "type": "", - "value": "0xffff" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "5373:3:43", - "nodeType": "YulIdentifier", - "src": "5373:3:43" - }, - "nativeSrc": "5373:19:43", - "nodeType": "YulFunctionCall", - "src": "5373:19:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "5355:6:43", - "nodeType": "YulIdentifier", - "src": "5355:6:43" - }, - "nativeSrc": "5355:38:43", - "nodeType": "YulFunctionCall", - "src": "5355:38:43" - }, - "nativeSrc": "5355:38:43", - "nodeType": "YulExpressionStatement", - "src": "5355:38:43" - } - ] - }, - "name": "abi_encode_tuple_t_uint16__to_t_uint16__fromStack_reversed", - "nativeSrc": "5211:188:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "5279:9:43", - "nodeType": "YulTypedName", - "src": "5279:9:43", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "5290:6:43", - "nodeType": "YulTypedName", - "src": "5290:6:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "5301:4:43", - "nodeType": "YulTypedName", - "src": "5301:4:43", - "type": "" - } - ], - "src": "5211:188:43" - }, - { - "body": { - "nativeSrc": "5529:171:43", - "nodeType": "YulBlock", - "src": "5529:171:43", - "statements": [ - { - "nativeSrc": "5539:26:43", - "nodeType": "YulAssignment", - "src": "5539:26:43", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "5551:9:43", - "nodeType": "YulIdentifier", - "src": "5551:9:43" - }, - { - "kind": "number", - "nativeSrc": "5562:2:43", - "nodeType": "YulLiteral", - "src": "5562:2:43", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "5547:3:43", - "nodeType": "YulIdentifier", - "src": "5547:3:43" - }, - "nativeSrc": "5547:18:43", - "nodeType": "YulFunctionCall", - "src": "5547:18:43" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "5539:4:43", - "nodeType": "YulIdentifier", - "src": "5539:4:43" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "5581:9:43", - "nodeType": "YulIdentifier", - "src": "5581:9:43" - }, - { - "arguments": [ - { - "name": "value0", - "nativeSrc": "5596:6:43", - "nodeType": "YulIdentifier", - "src": "5596:6:43" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "5608:3:43", - "nodeType": "YulLiteral", - "src": "5608:3:43", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nativeSrc": "5613:10:43", - "nodeType": "YulLiteral", - "src": "5613:10:43", - "type": "", - "value": "0xffffffff" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "5604:3:43", - "nodeType": "YulIdentifier", - "src": "5604:3:43" - }, - "nativeSrc": "5604:20:43", - "nodeType": "YulFunctionCall", - "src": "5604:20:43" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "5592:3:43", - "nodeType": "YulIdentifier", - "src": "5592:3:43" - }, - "nativeSrc": "5592:33:43", - "nodeType": "YulFunctionCall", - "src": "5592:33:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "5574:6:43", - "nodeType": "YulIdentifier", - "src": "5574:6:43" - }, - "nativeSrc": "5574:52:43", - "nodeType": "YulFunctionCall", - "src": "5574:52:43" - }, - "nativeSrc": "5574:52:43", - "nodeType": "YulExpressionStatement", - "src": "5574:52:43" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "5646:9:43", - "nodeType": "YulIdentifier", - "src": "5646:9:43" - }, - { - "kind": "number", - "nativeSrc": "5657:2:43", - "nodeType": "YulLiteral", - "src": "5657:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "5642:3:43", - "nodeType": "YulIdentifier", - "src": "5642:3:43" - }, - "nativeSrc": "5642:18:43", - "nodeType": "YulFunctionCall", - "src": "5642:18:43" - }, - { - "arguments": [ - { - "name": "value1", - "nativeSrc": "5666:6:43", - "nodeType": "YulIdentifier", - "src": "5666:6:43" - }, - { - "kind": "number", - "nativeSrc": "5674:18:43", - "nodeType": "YulLiteral", - "src": "5674:18:43", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "5662:3:43", - "nodeType": "YulIdentifier", - "src": "5662:3:43" - }, - "nativeSrc": "5662:31:43", - "nodeType": "YulFunctionCall", - "src": "5662:31:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "5635:6:43", - "nodeType": "YulIdentifier", - "src": "5635:6:43" - }, - "nativeSrc": "5635:59:43", - "nodeType": "YulFunctionCall", - "src": "5635:59:43" - }, - "nativeSrc": "5635:59:43", - "nodeType": "YulExpressionStatement", - "src": "5635:59:43" - } - ] - }, - "name": "abi_encode_tuple_t_bytes4_t_uint64__to_t_bytes4_t_uint64__fromStack_reversed", - "nativeSrc": "5404:296:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "5490:9:43", - "nodeType": "YulTypedName", - "src": "5490:9:43", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "5501:6:43", - "nodeType": "YulTypedName", - "src": "5501:6:43", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "5509:6:43", - "nodeType": "YulTypedName", - "src": "5509:6:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "5520:4:43", - "nodeType": "YulTypedName", - "src": "5520:4:43", - "type": "" - } - ], - "src": "5404:296:43" - }, - { - "body": { - "nativeSrc": "5830:174:43", - "nodeType": "YulBlock", - "src": "5830:174:43", - "statements": [ - { - "nativeSrc": "5840:26:43", - "nodeType": "YulAssignment", - "src": "5840:26:43", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "5852:9:43", - "nodeType": "YulIdentifier", - "src": "5852:9:43" - }, - { - "kind": "number", - "nativeSrc": "5863:2:43", - "nodeType": "YulLiteral", - "src": "5863:2:43", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "5848:3:43", - "nodeType": "YulIdentifier", - "src": "5848:3:43" - }, - "nativeSrc": "5848:18:43", - "nodeType": "YulFunctionCall", - "src": "5848:18:43" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "5840:4:43", - "nodeType": "YulIdentifier", - "src": "5840:4:43" - } - ] - }, - { - "nativeSrc": "5875:28:43", - "nodeType": "YulVariableDeclaration", - "src": "5875:28:43", - "value": { - "kind": "number", - "nativeSrc": "5885:18:43", - "nodeType": "YulLiteral", - "src": "5885:18:43", - "type": "", - "value": "0xffffffffffffffff" - }, - "variables": [ - { - "name": "_1", - "nativeSrc": "5879:2:43", - "nodeType": "YulTypedName", - "src": "5879:2:43", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "5919:9:43", - "nodeType": "YulIdentifier", - "src": "5919:9:43" - }, - { - "arguments": [ - { - "name": "value0", - "nativeSrc": "5934:6:43", - "nodeType": "YulIdentifier", - "src": "5934:6:43" - }, - { - "name": "_1", - "nativeSrc": "5942:2:43", - "nodeType": "YulIdentifier", - "src": "5942:2:43" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "5930:3:43", - "nodeType": "YulIdentifier", - "src": "5930:3:43" - }, - "nativeSrc": "5930:15:43", - "nodeType": "YulFunctionCall", - "src": "5930:15:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "5912:6:43", - "nodeType": "YulIdentifier", - "src": "5912:6:43" - }, - "nativeSrc": "5912:34:43", - "nodeType": "YulFunctionCall", - "src": "5912:34:43" - }, - "nativeSrc": "5912:34:43", - "nodeType": "YulExpressionStatement", - "src": "5912:34:43" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "5966:9:43", - "nodeType": "YulIdentifier", - "src": "5966:9:43" - }, - { - "kind": "number", - "nativeSrc": "5977:2:43", - "nodeType": "YulLiteral", - "src": "5977:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "5962:3:43", - "nodeType": "YulIdentifier", - "src": "5962:3:43" - }, - "nativeSrc": "5962:18:43", - "nodeType": "YulFunctionCall", - "src": "5962:18:43" - }, - { - "arguments": [ - { - "name": "value1", - "nativeSrc": "5986:6:43", - "nodeType": "YulIdentifier", - "src": "5986:6:43" - }, - { - "name": "_1", - "nativeSrc": "5994:2:43", - "nodeType": "YulIdentifier", - "src": "5994:2:43" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "5982:3:43", - "nodeType": "YulIdentifier", - "src": "5982:3:43" - }, - "nativeSrc": "5982:15:43", - "nodeType": "YulFunctionCall", - "src": "5982:15:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "5955:6:43", - "nodeType": "YulIdentifier", - "src": "5955:6:43" - }, - "nativeSrc": "5955:43:43", - "nodeType": "YulFunctionCall", - "src": "5955:43:43" - }, - "nativeSrc": "5955:43:43", - "nodeType": "YulExpressionStatement", - "src": "5955:43:43" - } - ] - }, - "name": "abi_encode_tuple_t_uint64_t_uint64__to_t_uint64_t_uint64__fromStack_reversed", - "nativeSrc": "5705:299:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "5791:9:43", - "nodeType": "YulTypedName", - "src": "5791:9:43", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "5802:6:43", - "nodeType": "YulTypedName", - "src": "5802:6:43", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "5810:6:43", - "nodeType": "YulTypedName", - "src": "5810:6:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "5821:4:43", - "nodeType": "YulTypedName", - "src": "5821:4:43", - "type": "" - } - ], - "src": "5705:299:43" - }, - { - "body": { - "nativeSrc": "6110:76:43", - "nodeType": "YulBlock", - "src": "6110:76:43", - "statements": [ - { - "nativeSrc": "6120:26:43", - "nodeType": "YulAssignment", - "src": "6120:26:43", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "6132:9:43", - "nodeType": "YulIdentifier", - "src": "6132:9:43" - }, - { - "kind": "number", - "nativeSrc": "6143:2:43", - "nodeType": "YulLiteral", - "src": "6143:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "6128:3:43", - "nodeType": "YulIdentifier", - "src": "6128:3:43" - }, - "nativeSrc": "6128:18:43", - "nodeType": "YulFunctionCall", - "src": "6128:18:43" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "6120:4:43", - "nodeType": "YulIdentifier", - "src": "6120:4:43" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "6162:9:43", - "nodeType": "YulIdentifier", - "src": "6162:9:43" - }, - { - "name": "value0", - "nativeSrc": "6173:6:43", - "nodeType": "YulIdentifier", - "src": "6173:6:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "6155:6:43", - "nodeType": "YulIdentifier", - "src": "6155:6:43" - }, - "nativeSrc": "6155:25:43", - "nodeType": "YulFunctionCall", - "src": "6155:25:43" - }, - "nativeSrc": "6155:25:43", - "nodeType": "YulExpressionStatement", - "src": "6155:25:43" - } - ] - }, - "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed", - "nativeSrc": "6009:177:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "6079:9:43", - "nodeType": "YulTypedName", - "src": "6079:9:43", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "6090:6:43", - "nodeType": "YulTypedName", - "src": "6090:6:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "6101:4:43", - "nodeType": "YulTypedName", - "src": "6101:4:43", - "type": "" - } - ], - "src": "6009:177:43" - }, - { - "body": { - "nativeSrc": "6295:352:43", - "nodeType": "YulBlock", - "src": "6295:352:43", - "statements": [ - { - "body": { - "nativeSrc": "6341:16:43", - "nodeType": "YulBlock", - "src": "6341:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "6350:1:43", - "nodeType": "YulLiteral", - "src": "6350:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "6353:1:43", - "nodeType": "YulLiteral", - "src": "6353:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "6343:6:43", - "nodeType": "YulIdentifier", - "src": "6343:6:43" - }, - "nativeSrc": "6343:12:43", - "nodeType": "YulFunctionCall", - "src": "6343:12:43" - }, - "nativeSrc": "6343:12:43", - "nodeType": "YulExpressionStatement", - "src": "6343:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nativeSrc": "6316:7:43", - "nodeType": "YulIdentifier", - "src": "6316:7:43" - }, - { - "name": "headStart", - "nativeSrc": "6325:9:43", - "nodeType": "YulIdentifier", - "src": "6325:9:43" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "6312:3:43", - "nodeType": "YulIdentifier", - "src": "6312:3:43" - }, - "nativeSrc": "6312:23:43", - "nodeType": "YulFunctionCall", - "src": "6312:23:43" - }, - { - "kind": "number", - "nativeSrc": "6337:2:43", - "nodeType": "YulLiteral", - "src": "6337:2:43", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "6308:3:43", - "nodeType": "YulIdentifier", - "src": "6308:3:43" - }, - "nativeSrc": "6308:32:43", - "nodeType": "YulFunctionCall", - "src": "6308:32:43" - }, - "nativeSrc": "6305:52:43", - "nodeType": "YulIf", - "src": "6305:52:43" - }, - { - "nativeSrc": "6366:36:43", - "nodeType": "YulVariableDeclaration", - "src": "6366:36:43", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "6392:9:43", - "nodeType": "YulIdentifier", - "src": "6392:9:43" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "6379:12:43", - "nodeType": "YulIdentifier", - "src": "6379:12:43" - }, - "nativeSrc": "6379:23:43", - "nodeType": "YulFunctionCall", - "src": "6379:23:43" - }, - "variables": [ - { - "name": "value", - "nativeSrc": "6370:5:43", - "nodeType": "YulTypedName", - "src": "6370:5:43", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nativeSrc": "6436:5:43", - "nodeType": "YulIdentifier", - "src": "6436:5:43" - } - ], - "functionName": { - "name": "validator_revert_address", - "nativeSrc": "6411:24:43", - "nodeType": "YulIdentifier", - "src": "6411:24:43" - }, - "nativeSrc": "6411:31:43", - "nodeType": "YulFunctionCall", - "src": "6411:31:43" - }, - "nativeSrc": "6411:31:43", - "nodeType": "YulExpressionStatement", - "src": "6411:31:43" - }, - { - "nativeSrc": "6451:15:43", - "nodeType": "YulAssignment", - "src": "6451:15:43", - "value": { - "name": "value", - "nativeSrc": "6461:5:43", - "nodeType": "YulIdentifier", - "src": "6461:5:43" - }, - "variableNames": [ - { - "name": "value0", - "nativeSrc": "6451:6:43", - "nodeType": "YulIdentifier", - "src": "6451:6:43" - } - ] - }, - { - "nativeSrc": "6475:47:43", - "nodeType": "YulVariableDeclaration", - "src": "6475:47:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "6507:9:43", - "nodeType": "YulIdentifier", - "src": "6507:9:43" - }, - { - "kind": "number", - "nativeSrc": "6518:2:43", - "nodeType": "YulLiteral", - "src": "6518:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "6503:3:43", - "nodeType": "YulIdentifier", - "src": "6503:3:43" - }, - "nativeSrc": "6503:18:43", - "nodeType": "YulFunctionCall", - "src": "6503:18:43" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "6490:12:43", - "nodeType": "YulIdentifier", - "src": "6490:12:43" - }, - "nativeSrc": "6490:32:43", - "nodeType": "YulFunctionCall", - "src": "6490:32:43" - }, - "variables": [ - { - "name": "value_1", - "nativeSrc": "6479:7:43", - "nodeType": "YulTypedName", - "src": "6479:7:43", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value_1", - "nativeSrc": "6556:7:43", - "nodeType": "YulIdentifier", - "src": "6556:7:43" - } - ], - "functionName": { - "name": "validator_revert_address", - "nativeSrc": "6531:24:43", - "nodeType": "YulIdentifier", - "src": "6531:24:43" - }, - "nativeSrc": "6531:33:43", - "nodeType": "YulFunctionCall", - "src": "6531:33:43" - }, - "nativeSrc": "6531:33:43", - "nodeType": "YulExpressionStatement", - "src": "6531:33:43" - }, - { - "nativeSrc": "6573:17:43", - "nodeType": "YulAssignment", - "src": "6573:17:43", - "value": { - "name": "value_1", - "nativeSrc": "6583:7:43", - "nodeType": "YulIdentifier", - "src": "6583:7:43" - }, - "variableNames": [ - { - "name": "value1", - "nativeSrc": "6573:6:43", - "nodeType": "YulIdentifier", - "src": "6573:6:43" - } - ] - }, - { - "nativeSrc": "6599:42:43", - "nodeType": "YulAssignment", - "src": "6599:42:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "6626:9:43", - "nodeType": "YulIdentifier", - "src": "6626:9:43" - }, - { - "kind": "number", - "nativeSrc": "6637:2:43", - "nodeType": "YulLiteral", - "src": "6637:2:43", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "6622:3:43", - "nodeType": "YulIdentifier", - "src": "6622:3:43" - }, - "nativeSrc": "6622:18:43", - "nodeType": "YulFunctionCall", - "src": "6622:18:43" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "6609:12:43", - "nodeType": "YulIdentifier", - "src": "6609:12:43" - }, - "nativeSrc": "6609:32:43", - "nodeType": "YulFunctionCall", - "src": "6609:32:43" - }, - "variableNames": [ - { - "name": "value2", - "nativeSrc": "6599:6:43", - "nodeType": "YulIdentifier", - "src": "6599:6:43" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_addresst_addresst_uint256", - "nativeSrc": "6191:456:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "6245:9:43", - "nodeType": "YulTypedName", - "src": "6245:9:43", - "type": "" - }, - { - "name": "dataEnd", - "nativeSrc": "6256:7:43", - "nodeType": "YulTypedName", - "src": "6256:7:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nativeSrc": "6268:6:43", - "nodeType": "YulTypedName", - "src": "6268:6:43", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "6276:6:43", - "nodeType": "YulTypedName", - "src": "6276:6:43", - "type": "" - }, - { - "name": "value2", - "nativeSrc": "6284:6:43", - "nodeType": "YulTypedName", - "src": "6284:6:43", - "type": "" - } - ], - "src": "6191:456:43" - }, - { - "body": { - "nativeSrc": "6749:87:43", - "nodeType": "YulBlock", - "src": "6749:87:43", - "statements": [ - { - "nativeSrc": "6759:26:43", - "nodeType": "YulAssignment", - "src": "6759:26:43", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "6771:9:43", - "nodeType": "YulIdentifier", - "src": "6771:9:43" - }, - { - "kind": "number", - "nativeSrc": "6782:2:43", - "nodeType": "YulLiteral", - "src": "6782:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "6767:3:43", - "nodeType": "YulIdentifier", - "src": "6767:3:43" - }, - "nativeSrc": "6767:18:43", - "nodeType": "YulFunctionCall", - "src": "6767:18:43" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "6759:4:43", - "nodeType": "YulIdentifier", - "src": "6759:4:43" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "6801:9:43", - "nodeType": "YulIdentifier", - "src": "6801:9:43" - }, - { - "arguments": [ - { - "name": "value0", - "nativeSrc": "6816:6:43", - "nodeType": "YulIdentifier", - "src": "6816:6:43" - }, - { - "kind": "number", - "nativeSrc": "6824:4:43", - "nodeType": "YulLiteral", - "src": "6824:4:43", - "type": "", - "value": "0xff" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "6812:3:43", - "nodeType": "YulIdentifier", - "src": "6812:3:43" - }, - "nativeSrc": "6812:17:43", - "nodeType": "YulFunctionCall", - "src": "6812:17:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "6794:6:43", - "nodeType": "YulIdentifier", - "src": "6794:6:43" - }, - "nativeSrc": "6794:36:43", - "nodeType": "YulFunctionCall", - "src": "6794:36:43" - }, - "nativeSrc": "6794:36:43", - "nodeType": "YulExpressionStatement", - "src": "6794:36:43" - } - ] - }, - "name": "abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed", - "nativeSrc": "6652:184:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "6718:9:43", - "nodeType": "YulTypedName", - "src": "6718:9:43", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "6729:6:43", - "nodeType": "YulTypedName", - "src": "6729:6:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "6740:4:43", - "nodeType": "YulTypedName", - "src": "6740:4:43", - "type": "" - } - ], - "src": "6652:184:43" - }, - { - "body": { - "nativeSrc": "6889:115:43", - "nodeType": "YulBlock", - "src": "6889:115:43", - "statements": [ - { - "nativeSrc": "6899:29:43", - "nodeType": "YulAssignment", - "src": "6899:29:43", - "value": { - "arguments": [ - { - "name": "offset", - "nativeSrc": "6921:6:43", - "nodeType": "YulIdentifier", - "src": "6921:6:43" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "6908:12:43", - "nodeType": "YulIdentifier", - "src": "6908:12:43" - }, - "nativeSrc": "6908:20:43", - "nodeType": "YulFunctionCall", - "src": "6908:20:43" - }, - "variableNames": [ - { - "name": "value", - "nativeSrc": "6899:5:43", - "nodeType": "YulIdentifier", - "src": "6899:5:43" - } - ] - }, - { - "body": { - "nativeSrc": "6982:16:43", - "nodeType": "YulBlock", - "src": "6982:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "6991:1:43", - "nodeType": "YulLiteral", - "src": "6991:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "6994:1:43", - "nodeType": "YulLiteral", - "src": "6994:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "6984:6:43", - "nodeType": "YulIdentifier", - "src": "6984:6:43" - }, - "nativeSrc": "6984:12:43", - "nodeType": "YulFunctionCall", - "src": "6984:12:43" - }, - "nativeSrc": "6984:12:43", - "nodeType": "YulExpressionStatement", - "src": "6984:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nativeSrc": "6950:5:43", - "nodeType": "YulIdentifier", - "src": "6950:5:43" - }, - { - "arguments": [ - { - "name": "value", - "nativeSrc": "6961:5:43", - "nodeType": "YulIdentifier", - "src": "6961:5:43" - }, - { - "kind": "number", - "nativeSrc": "6968:10:43", - "nodeType": "YulLiteral", - "src": "6968:10:43", - "type": "", - "value": "0xffffffff" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "6957:3:43", - "nodeType": "YulIdentifier", - "src": "6957:3:43" - }, - "nativeSrc": "6957:22:43", - "nodeType": "YulFunctionCall", - "src": "6957:22:43" - } - ], - "functionName": { - "name": "eq", - "nativeSrc": "6947:2:43", - "nodeType": "YulIdentifier", - "src": "6947:2:43" - }, - "nativeSrc": "6947:33:43", - "nodeType": "YulFunctionCall", - "src": "6947:33:43" - } - ], - "functionName": { - "name": "iszero", - "nativeSrc": "6940:6:43", - "nodeType": "YulIdentifier", - "src": "6940:6:43" - }, - "nativeSrc": "6940:41:43", - "nodeType": "YulFunctionCall", - "src": "6940:41:43" - }, - "nativeSrc": "6937:61:43", - "nodeType": "YulIf", - "src": "6937:61:43" - } - ] - }, - "name": "abi_decode_uint32", - "nativeSrc": "6841:163:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "offset", - "nativeSrc": "6868:6:43", - "nodeType": "YulTypedName", - "src": "6868:6:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value", - "nativeSrc": "6879:5:43", - "nodeType": "YulTypedName", - "src": "6879:5:43", - "type": "" - } - ], - "src": "6841:163:43" - }, - { - "body": { - "nativeSrc": "7095:166:43", - "nodeType": "YulBlock", - "src": "7095:166:43", - "statements": [ - { - "body": { - "nativeSrc": "7141:16:43", - "nodeType": "YulBlock", - "src": "7141:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "7150:1:43", - "nodeType": "YulLiteral", - "src": "7150:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "7153:1:43", - "nodeType": "YulLiteral", - "src": "7153:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "7143:6:43", - "nodeType": "YulIdentifier", - "src": "7143:6:43" - }, - "nativeSrc": "7143:12:43", - "nodeType": "YulFunctionCall", - "src": "7143:12:43" - }, - "nativeSrc": "7143:12:43", - "nodeType": "YulExpressionStatement", - "src": "7143:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nativeSrc": "7116:7:43", - "nodeType": "YulIdentifier", - "src": "7116:7:43" - }, - { - "name": "headStart", - "nativeSrc": "7125:9:43", - "nodeType": "YulIdentifier", - "src": "7125:9:43" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "7112:3:43", - "nodeType": "YulIdentifier", - "src": "7112:3:43" - }, - "nativeSrc": "7112:23:43", - "nodeType": "YulFunctionCall", - "src": "7112:23:43" - }, - { - "kind": "number", - "nativeSrc": "7137:2:43", - "nodeType": "YulLiteral", - "src": "7137:2:43", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "7108:3:43", - "nodeType": "YulIdentifier", - "src": "7108:3:43" - }, - "nativeSrc": "7108:32:43", - "nodeType": "YulFunctionCall", - "src": "7108:32:43" - }, - "nativeSrc": "7105:52:43", - "nodeType": "YulIf", - "src": "7105:52:43" - }, - { - "nativeSrc": "7166:38:43", - "nodeType": "YulAssignment", - "src": "7166:38:43", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "7194:9:43", - "nodeType": "YulIdentifier", - "src": "7194:9:43" - } - ], - "functionName": { - "name": "abi_decode_uint32", - "nativeSrc": "7176:17:43", - "nodeType": "YulIdentifier", - "src": "7176:17:43" - }, - "nativeSrc": "7176:28:43", - "nodeType": "YulFunctionCall", - "src": "7176:28:43" - }, - "variableNames": [ - { - "name": "value0", - "nativeSrc": "7166:6:43", - "nodeType": "YulIdentifier", - "src": "7166:6:43" - } - ] - }, - { - "nativeSrc": "7213:42:43", - "nodeType": "YulAssignment", - "src": "7213:42:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "7240:9:43", - "nodeType": "YulIdentifier", - "src": "7240:9:43" - }, - { - "kind": "number", - "nativeSrc": "7251:2:43", - "nodeType": "YulLiteral", - "src": "7251:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "7236:3:43", - "nodeType": "YulIdentifier", - "src": "7236:3:43" - }, - "nativeSrc": "7236:18:43", - "nodeType": "YulFunctionCall", - "src": "7236:18:43" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "7223:12:43", - "nodeType": "YulIdentifier", - "src": "7223:12:43" - }, - "nativeSrc": "7223:32:43", - "nodeType": "YulFunctionCall", - "src": "7223:32:43" - }, - "variableNames": [ - { - "name": "value1", - "nativeSrc": "7213:6:43", - "nodeType": "YulIdentifier", - "src": "7213:6:43" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_uint32t_bytes32", - "nativeSrc": "7009:252:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "7053:9:43", - "nodeType": "YulTypedName", - "src": "7053:9:43", - "type": "" - }, - { - "name": "dataEnd", - "nativeSrc": "7064:7:43", - "nodeType": "YulTypedName", - "src": "7064:7:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nativeSrc": "7076:6:43", - "nodeType": "YulTypedName", - "src": "7076:6:43", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "7084:6:43", - "nodeType": "YulTypedName", - "src": "7084:6:43", - "type": "" - } - ], - "src": "7009:252:43" - }, - { - "body": { - "nativeSrc": "7308:76:43", - "nodeType": "YulBlock", - "src": "7308:76:43", - "statements": [ - { - "body": { - "nativeSrc": "7362:16:43", - "nodeType": "YulBlock", - "src": "7362:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "7371:1:43", - "nodeType": "YulLiteral", - "src": "7371:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "7374:1:43", - "nodeType": "YulLiteral", - "src": "7374:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "7364:6:43", - "nodeType": "YulIdentifier", - "src": "7364:6:43" - }, - "nativeSrc": "7364:12:43", - "nodeType": "YulFunctionCall", - "src": "7364:12:43" - }, - "nativeSrc": "7364:12:43", - "nodeType": "YulExpressionStatement", - "src": "7364:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nativeSrc": "7331:5:43", - "nodeType": "YulIdentifier", - "src": "7331:5:43" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nativeSrc": "7352:5:43", - "nodeType": "YulIdentifier", - "src": "7352:5:43" - } - ], - "functionName": { - "name": "iszero", - "nativeSrc": "7345:6:43", - "nodeType": "YulIdentifier", - "src": "7345:6:43" - }, - "nativeSrc": "7345:13:43", - "nodeType": "YulFunctionCall", - "src": "7345:13:43" - } - ], - "functionName": { - "name": "iszero", - "nativeSrc": "7338:6:43", - "nodeType": "YulIdentifier", - "src": "7338:6:43" - }, - "nativeSrc": "7338:21:43", - "nodeType": "YulFunctionCall", - "src": "7338:21:43" - } - ], - "functionName": { - "name": "eq", - "nativeSrc": "7328:2:43", - "nodeType": "YulIdentifier", - "src": "7328:2:43" - }, - "nativeSrc": "7328:32:43", - "nodeType": "YulFunctionCall", - "src": "7328:32:43" - } - ], - "functionName": { - "name": "iszero", - "nativeSrc": "7321:6:43", - "nodeType": "YulIdentifier", - "src": "7321:6:43" - }, - "nativeSrc": "7321:40:43", - "nodeType": "YulFunctionCall", - "src": "7321:40:43" - }, - "nativeSrc": "7318:60:43", - "nodeType": "YulIf", - "src": "7318:60:43" - } - ] - }, - "name": "validator_revert_bool", - "nativeSrc": "7266:118:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nativeSrc": "7297:5:43", - "nodeType": "YulTypedName", - "src": "7297:5:43", - "type": "" - } - ], - "src": "7266:118:43" - }, - { - "body": { - "nativeSrc": "7502:376:43", - "nodeType": "YulBlock", - "src": "7502:376:43", - "statements": [ - { - "body": { - "nativeSrc": "7548:16:43", - "nodeType": "YulBlock", - "src": "7548:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "7557:1:43", - "nodeType": "YulLiteral", - "src": "7557:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "7560:1:43", - "nodeType": "YulLiteral", - "src": "7560:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "7550:6:43", - "nodeType": "YulIdentifier", - "src": "7550:6:43" - }, - "nativeSrc": "7550:12:43", - "nodeType": "YulFunctionCall", - "src": "7550:12:43" - }, - "nativeSrc": "7550:12:43", - "nodeType": "YulExpressionStatement", - "src": "7550:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nativeSrc": "7523:7:43", - "nodeType": "YulIdentifier", - "src": "7523:7:43" - }, - { - "name": "headStart", - "nativeSrc": "7532:9:43", - "nodeType": "YulIdentifier", - "src": "7532:9:43" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "7519:3:43", - "nodeType": "YulIdentifier", - "src": "7519:3:43" - }, - "nativeSrc": "7519:23:43", - "nodeType": "YulFunctionCall", - "src": "7519:23:43" - }, - { - "kind": "number", - "nativeSrc": "7544:2:43", - "nodeType": "YulLiteral", - "src": "7544:2:43", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "7515:3:43", - "nodeType": "YulIdentifier", - "src": "7515:3:43" - }, - "nativeSrc": "7515:32:43", - "nodeType": "YulFunctionCall", - "src": "7515:32:43" - }, - "nativeSrc": "7512:52:43", - "nodeType": "YulIf", - "src": "7512:52:43" - }, - { - "nativeSrc": "7573:37:43", - "nodeType": "YulVariableDeclaration", - "src": "7573:37:43", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "7600:9:43", - "nodeType": "YulIdentifier", - "src": "7600:9:43" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "7587:12:43", - "nodeType": "YulIdentifier", - "src": "7587:12:43" - }, - "nativeSrc": "7587:23:43", - "nodeType": "YulFunctionCall", - "src": "7587:23:43" - }, - "variables": [ - { - "name": "offset", - "nativeSrc": "7577:6:43", - "nodeType": "YulTypedName", - "src": "7577:6:43", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "7653:16:43", - "nodeType": "YulBlock", - "src": "7653:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "7662:1:43", - "nodeType": "YulLiteral", - "src": "7662:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "7665:1:43", - "nodeType": "YulLiteral", - "src": "7665:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "7655:6:43", - "nodeType": "YulIdentifier", - "src": "7655:6:43" - }, - "nativeSrc": "7655:12:43", - "nodeType": "YulFunctionCall", - "src": "7655:12:43" - }, - "nativeSrc": "7655:12:43", - "nodeType": "YulExpressionStatement", - "src": "7655:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "offset", - "nativeSrc": "7625:6:43", - "nodeType": "YulIdentifier", - "src": "7625:6:43" - }, - { - "kind": "number", - "nativeSrc": "7633:18:43", - "nodeType": "YulLiteral", - "src": "7633:18:43", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "7622:2:43", - "nodeType": "YulIdentifier", - "src": "7622:2:43" - }, - "nativeSrc": "7622:30:43", - "nodeType": "YulFunctionCall", - "src": "7622:30:43" - }, - "nativeSrc": "7619:50:43", - "nodeType": "YulIf", - "src": "7619:50:43" - }, - { - "nativeSrc": "7678:79:43", - "nodeType": "YulAssignment", - "src": "7678:79:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "7729:9:43", - "nodeType": "YulIdentifier", - "src": "7729:9:43" - }, - { - "name": "offset", - "nativeSrc": "7740:6:43", - "nodeType": "YulIdentifier", - "src": "7740:6:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "7725:3:43", - "nodeType": "YulIdentifier", - "src": "7725:3:43" - }, - "nativeSrc": "7725:22:43", - "nodeType": "YulFunctionCall", - "src": "7725:22:43" - }, - { - "name": "dataEnd", - "nativeSrc": "7749:7:43", - "nodeType": "YulIdentifier", - "src": "7749:7:43" - } - ], - "functionName": { - "name": "abi_decode_struct_SendParam_calldata", - "nativeSrc": "7688:36:43", - "nodeType": "YulIdentifier", - "src": "7688:36:43" - }, - "nativeSrc": "7688:69:43", - "nodeType": "YulFunctionCall", - "src": "7688:69:43" - }, - "variableNames": [ - { - "name": "value0", - "nativeSrc": "7678:6:43", - "nodeType": "YulIdentifier", - "src": "7678:6:43" - } - ] - }, - { - "nativeSrc": "7766:45:43", - "nodeType": "YulVariableDeclaration", - "src": "7766:45:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "7796:9:43", - "nodeType": "YulIdentifier", - "src": "7796:9:43" - }, - { - "kind": "number", - "nativeSrc": "7807:2:43", - "nodeType": "YulLiteral", - "src": "7807:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "7792:3:43", - "nodeType": "YulIdentifier", - "src": "7792:3:43" - }, - "nativeSrc": "7792:18:43", - "nodeType": "YulFunctionCall", - "src": "7792:18:43" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "7779:12:43", - "nodeType": "YulIdentifier", - "src": "7779:12:43" - }, - "nativeSrc": "7779:32:43", - "nodeType": "YulFunctionCall", - "src": "7779:32:43" - }, - "variables": [ - { - "name": "value", - "nativeSrc": "7770:5:43", - "nodeType": "YulTypedName", - "src": "7770:5:43", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nativeSrc": "7842:5:43", - "nodeType": "YulIdentifier", - "src": "7842:5:43" - } - ], - "functionName": { - "name": "validator_revert_bool", - "nativeSrc": "7820:21:43", - "nodeType": "YulIdentifier", - "src": "7820:21:43" - }, - "nativeSrc": "7820:28:43", - "nodeType": "YulFunctionCall", - "src": "7820:28:43" - }, - "nativeSrc": "7820:28:43", - "nodeType": "YulExpressionStatement", - "src": "7820:28:43" - }, - { - "nativeSrc": "7857:15:43", - "nodeType": "YulAssignment", - "src": "7857:15:43", - "value": { - "name": "value", - "nativeSrc": "7867:5:43", - "nodeType": "YulIdentifier", - "src": "7867:5:43" - }, - "variableNames": [ - { - "name": "value1", - "nativeSrc": "7857:6:43", - "nodeType": "YulIdentifier", - "src": "7857:6:43" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_struct$_SendParam_$3382_calldata_ptrt_bool", - "nativeSrc": "7389:489:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "7460:9:43", - "nodeType": "YulTypedName", - "src": "7460:9:43", - "type": "" - }, - { - "name": "dataEnd", - "nativeSrc": "7471:7:43", - "nodeType": "YulTypedName", - "src": "7471:7:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nativeSrc": "7483:6:43", - "nodeType": "YulTypedName", - "src": "7483:6:43", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "7491:6:43", - "nodeType": "YulTypedName", - "src": "7491:6:43", - "type": "" - } - ], - "src": "7389:489:43" - }, - { - "body": { - "nativeSrc": "8040:96:43", - "nodeType": "YulBlock", - "src": "8040:96:43", - "statements": [ - { - "nativeSrc": "8050:26:43", - "nodeType": "YulAssignment", - "src": "8050:26:43", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "8062:9:43", - "nodeType": "YulIdentifier", - "src": "8062:9:43" - }, - { - "kind": "number", - "nativeSrc": "8073:2:43", - "nodeType": "YulLiteral", - "src": "8073:2:43", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "8058:3:43", - "nodeType": "YulIdentifier", - "src": "8058:3:43" - }, - "nativeSrc": "8058:18:43", - "nodeType": "YulFunctionCall", - "src": "8058:18:43" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "8050:4:43", - "nodeType": "YulIdentifier", - "src": "8050:4:43" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value0", - "nativeSrc": "8112:6:43", - "nodeType": "YulIdentifier", - "src": "8112:6:43" - }, - { - "name": "headStart", - "nativeSrc": "8120:9:43", - "nodeType": "YulIdentifier", - "src": "8120:9:43" - } - ], - "functionName": { - "name": "abi_encode_struct_OFTLimit", - "nativeSrc": "8085:26:43", - "nodeType": "YulIdentifier", - "src": "8085:26:43" - }, - "nativeSrc": "8085:45:43", - "nodeType": "YulFunctionCall", - "src": "8085:45:43" - }, - "nativeSrc": "8085:45:43", - "nodeType": "YulExpressionStatement", - "src": "8085:45:43" - } - ] - }, - "name": "abi_encode_tuple_t_struct$_MessagingFee_$33_memory_ptr__to_t_struct$_MessagingFee_$33_memory_ptr__fromStack_reversed", - "nativeSrc": "7883:253:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "8009:9:43", - "nodeType": "YulTypedName", - "src": "8009:9:43", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "8020:6:43", - "nodeType": "YulTypedName", - "src": "8020:6:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "8031:4:43", - "nodeType": "YulTypedName", - "src": "8031:4:43", - "type": "" - } - ], - "src": "7883:253:43" - }, - { - "body": { - "nativeSrc": "8189:111:43", - "nodeType": "YulBlock", - "src": "8189:111:43", - "statements": [ - { - "nativeSrc": "8199:29:43", - "nodeType": "YulAssignment", - "src": "8199:29:43", - "value": { - "arguments": [ - { - "name": "offset", - "nativeSrc": "8221:6:43", - "nodeType": "YulIdentifier", - "src": "8221:6:43" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "8208:12:43", - "nodeType": "YulIdentifier", - "src": "8208:12:43" - }, - "nativeSrc": "8208:20:43", - "nodeType": "YulFunctionCall", - "src": "8208:20:43" - }, - "variableNames": [ - { - "name": "value", - "nativeSrc": "8199:5:43", - "nodeType": "YulIdentifier", - "src": "8199:5:43" - } - ] - }, - { - "body": { - "nativeSrc": "8278:16:43", - "nodeType": "YulBlock", - "src": "8278:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "8287:1:43", - "nodeType": "YulLiteral", - "src": "8287:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "8290:1:43", - "nodeType": "YulLiteral", - "src": "8290:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "8280:6:43", - "nodeType": "YulIdentifier", - "src": "8280:6:43" - }, - "nativeSrc": "8280:12:43", - "nodeType": "YulFunctionCall", - "src": "8280:12:43" - }, - "nativeSrc": "8280:12:43", - "nodeType": "YulExpressionStatement", - "src": "8280:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nativeSrc": "8250:5:43", - "nodeType": "YulIdentifier", - "src": "8250:5:43" - }, - { - "arguments": [ - { - "name": "value", - "nativeSrc": "8261:5:43", - "nodeType": "YulIdentifier", - "src": "8261:5:43" - }, - { - "kind": "number", - "nativeSrc": "8268:6:43", - "nodeType": "YulLiteral", - "src": "8268:6:43", - "type": "", - "value": "0xffff" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "8257:3:43", - "nodeType": "YulIdentifier", - "src": "8257:3:43" - }, - "nativeSrc": "8257:18:43", - "nodeType": "YulFunctionCall", - "src": "8257:18:43" - } - ], - "functionName": { - "name": "eq", - "nativeSrc": "8247:2:43", - "nodeType": "YulIdentifier", - "src": "8247:2:43" - }, - "nativeSrc": "8247:29:43", - "nodeType": "YulFunctionCall", - "src": "8247:29:43" - } - ], - "functionName": { - "name": "iszero", - "nativeSrc": "8240:6:43", - "nodeType": "YulIdentifier", - "src": "8240:6:43" - }, - "nativeSrc": "8240:37:43", - "nodeType": "YulFunctionCall", - "src": "8240:37:43" - }, - "nativeSrc": "8237:57:43", - "nodeType": "YulIf", - "src": "8237:57:43" - } - ] - }, - "name": "abi_decode_uint16", - "nativeSrc": "8141:159:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "offset", - "nativeSrc": "8168:6:43", - "nodeType": "YulTypedName", - "src": "8168:6:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value", - "nativeSrc": "8179:5:43", - "nodeType": "YulTypedName", - "src": "8179:5:43", - "type": "" - } - ], - "src": "8141:159:43" - }, - { - "body": { - "nativeSrc": "8390:171:43", - "nodeType": "YulBlock", - "src": "8390:171:43", - "statements": [ - { - "body": { - "nativeSrc": "8436:16:43", - "nodeType": "YulBlock", - "src": "8436:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "8445:1:43", - "nodeType": "YulLiteral", - "src": "8445:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "8448:1:43", - "nodeType": "YulLiteral", - "src": "8448:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "8438:6:43", - "nodeType": "YulIdentifier", - "src": "8438:6:43" - }, - "nativeSrc": "8438:12:43", - "nodeType": "YulFunctionCall", - "src": "8438:12:43" - }, - "nativeSrc": "8438:12:43", - "nodeType": "YulExpressionStatement", - "src": "8438:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nativeSrc": "8411:7:43", - "nodeType": "YulIdentifier", - "src": "8411:7:43" - }, - { - "name": "headStart", - "nativeSrc": "8420:9:43", - "nodeType": "YulIdentifier", - "src": "8420:9:43" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "8407:3:43", - "nodeType": "YulIdentifier", - "src": "8407:3:43" - }, - "nativeSrc": "8407:23:43", - "nodeType": "YulFunctionCall", - "src": "8407:23:43" - }, - { - "kind": "number", - "nativeSrc": "8432:2:43", - "nodeType": "YulLiteral", - "src": "8432:2:43", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "8403:3:43", - "nodeType": "YulIdentifier", - "src": "8403:3:43" - }, - "nativeSrc": "8403:32:43", - "nodeType": "YulFunctionCall", - "src": "8403:32:43" - }, - "nativeSrc": "8400:52:43", - "nodeType": "YulIf", - "src": "8400:52:43" - }, - { - "nativeSrc": "8461:38:43", - "nodeType": "YulAssignment", - "src": "8461:38:43", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "8489:9:43", - "nodeType": "YulIdentifier", - "src": "8489:9:43" - } - ], - "functionName": { - "name": "abi_decode_uint32", - "nativeSrc": "8471:17:43", - "nodeType": "YulIdentifier", - "src": "8471:17:43" - }, - "nativeSrc": "8471:28:43", - "nodeType": "YulFunctionCall", - "src": "8471:28:43" - }, - "variableNames": [ - { - "name": "value0", - "nativeSrc": "8461:6:43", - "nodeType": "YulIdentifier", - "src": "8461:6:43" - } - ] - }, - { - "nativeSrc": "8508:47:43", - "nodeType": "YulAssignment", - "src": "8508:47:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "8540:9:43", - "nodeType": "YulIdentifier", - "src": "8540:9:43" - }, - { - "kind": "number", - "nativeSrc": "8551:2:43", - "nodeType": "YulLiteral", - "src": "8551:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "8536:3:43", - "nodeType": "YulIdentifier", - "src": "8536:3:43" - }, - "nativeSrc": "8536:18:43", - "nodeType": "YulFunctionCall", - "src": "8536:18:43" - } - ], - "functionName": { - "name": "abi_decode_uint16", - "nativeSrc": "8518:17:43", - "nodeType": "YulIdentifier", - "src": "8518:17:43" - }, - "nativeSrc": "8518:37:43", - "nodeType": "YulFunctionCall", - "src": "8518:37:43" - }, - "variableNames": [ - { - "name": "value1", - "nativeSrc": "8508:6:43", - "nodeType": "YulIdentifier", - "src": "8508:6:43" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_uint32t_uint16", - "nativeSrc": "8305:256:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "8348:9:43", - "nodeType": "YulTypedName", - "src": "8348:9:43", - "type": "" - }, - { - "name": "dataEnd", - "nativeSrc": "8359:7:43", - "nodeType": "YulTypedName", - "src": "8359:7:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nativeSrc": "8371:6:43", - "nodeType": "YulTypedName", - "src": "8371:6:43", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "8379:6:43", - "nodeType": "YulTypedName", - "src": "8379:6:43", - "type": "" - } - ], - "src": "8305:256:43" - }, - { - "body": { - "nativeSrc": "8685:99:43", - "nodeType": "YulBlock", - "src": "8685:99:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "8702:9:43", - "nodeType": "YulIdentifier", - "src": "8702:9:43" - }, - { - "kind": "number", - "nativeSrc": "8713:2:43", - "nodeType": "YulLiteral", - "src": "8713:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "8695:6:43", - "nodeType": "YulIdentifier", - "src": "8695:6:43" - }, - "nativeSrc": "8695:21:43", - "nodeType": "YulFunctionCall", - "src": "8695:21:43" - }, - "nativeSrc": "8695:21:43", - "nodeType": "YulExpressionStatement", - "src": "8695:21:43" - }, - { - "nativeSrc": "8725:53:43", - "nodeType": "YulAssignment", - "src": "8725:53:43", - "value": { - "arguments": [ - { - "name": "value0", - "nativeSrc": "8751:6:43", - "nodeType": "YulIdentifier", - "src": "8751:6:43" - }, - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "8763:9:43", - "nodeType": "YulIdentifier", - "src": "8763:9:43" - }, - { - "kind": "number", - "nativeSrc": "8774:2:43", - "nodeType": "YulLiteral", - "src": "8774:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "8759:3:43", - "nodeType": "YulIdentifier", - "src": "8759:3:43" - }, - "nativeSrc": "8759:18:43", - "nodeType": "YulFunctionCall", - "src": "8759:18:43" - } - ], - "functionName": { - "name": "abi_encode_string", - "nativeSrc": "8733:17:43", - "nodeType": "YulIdentifier", - "src": "8733:17:43" - }, - "nativeSrc": "8733:45:43", - "nodeType": "YulFunctionCall", - "src": "8733:45:43" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "8725:4:43", - "nodeType": "YulIdentifier", - "src": "8725:4:43" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed", - "nativeSrc": "8566:218:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "8654:9:43", - "nodeType": "YulTypedName", - "src": "8654:9:43", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "8665:6:43", - "nodeType": "YulTypedName", - "src": "8665:6:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "8676:4:43", - "nodeType": "YulTypedName", - "src": "8676:4:43", - "type": "" - } - ], - "src": "8566:218:43" - }, - { - "body": { - "nativeSrc": "8918:102:43", - "nodeType": "YulBlock", - "src": "8918:102:43", - "statements": [ - { - "nativeSrc": "8928:26:43", - "nodeType": "YulAssignment", - "src": "8928:26:43", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "8940:9:43", - "nodeType": "YulIdentifier", - "src": "8940:9:43" - }, - { - "kind": "number", - "nativeSrc": "8951:2:43", - "nodeType": "YulLiteral", - "src": "8951:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "8936:3:43", - "nodeType": "YulIdentifier", - "src": "8936:3:43" - }, - "nativeSrc": "8936:18:43", - "nodeType": "YulFunctionCall", - "src": "8936:18:43" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "8928:4:43", - "nodeType": "YulIdentifier", - "src": "8928:4:43" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "8970:9:43", - "nodeType": "YulIdentifier", - "src": "8970:9:43" - }, - { - "arguments": [ - { - "name": "value0", - "nativeSrc": "8985:6:43", - "nodeType": "YulIdentifier", - "src": "8985:6:43" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "9001:3:43", - "nodeType": "YulLiteral", - "src": "9001:3:43", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nativeSrc": "9006:1:43", - "nodeType": "YulLiteral", - "src": "9006:1:43", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "8997:3:43", - "nodeType": "YulIdentifier", - "src": "8997:3:43" - }, - "nativeSrc": "8997:11:43", - "nodeType": "YulFunctionCall", - "src": "8997:11:43" - }, - { - "kind": "number", - "nativeSrc": "9010:1:43", - "nodeType": "YulLiteral", - "src": "9010:1:43", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "8993:3:43", - "nodeType": "YulIdentifier", - "src": "8993:3:43" - }, - "nativeSrc": "8993:19:43", - "nodeType": "YulFunctionCall", - "src": "8993:19:43" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "8981:3:43", - "nodeType": "YulIdentifier", - "src": "8981:3:43" - }, - "nativeSrc": "8981:32:43", - "nodeType": "YulFunctionCall", - "src": "8981:32:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "8963:6:43", - "nodeType": "YulIdentifier", - "src": "8963:6:43" - }, - "nativeSrc": "8963:51:43", - "nodeType": "YulFunctionCall", - "src": "8963:51:43" - }, - "nativeSrc": "8963:51:43", - "nodeType": "YulExpressionStatement", - "src": "8963:51:43" - } - ] - }, - "name": "abi_encode_tuple_t_contract$_ILayerZeroEndpointV2_$202__to_t_address__fromStack_reversed", - "nativeSrc": "8789:231:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "8887:9:43", - "nodeType": "YulTypedName", - "src": "8887:9:43", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "8898:6:43", - "nodeType": "YulTypedName", - "src": "8898:6:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "8909:4:43", - "nodeType": "YulTypedName", - "src": "8909:4:43", - "type": "" - } - ], - "src": "8789:231:43" - }, - { - "body": { - "nativeSrc": "9095:177:43", - "nodeType": "YulBlock", - "src": "9095:177:43", - "statements": [ - { - "body": { - "nativeSrc": "9141:16:43", - "nodeType": "YulBlock", - "src": "9141:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "9150:1:43", - "nodeType": "YulLiteral", - "src": "9150:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "9153:1:43", - "nodeType": "YulLiteral", - "src": "9153:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "9143:6:43", - "nodeType": "YulIdentifier", - "src": "9143:6:43" - }, - "nativeSrc": "9143:12:43", - "nodeType": "YulFunctionCall", - "src": "9143:12:43" - }, - "nativeSrc": "9143:12:43", - "nodeType": "YulExpressionStatement", - "src": "9143:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nativeSrc": "9116:7:43", - "nodeType": "YulIdentifier", - "src": "9116:7:43" - }, - { - "name": "headStart", - "nativeSrc": "9125:9:43", - "nodeType": "YulIdentifier", - "src": "9125:9:43" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "9112:3:43", - "nodeType": "YulIdentifier", - "src": "9112:3:43" - }, - "nativeSrc": "9112:23:43", - "nodeType": "YulFunctionCall", - "src": "9112:23:43" - }, - { - "kind": "number", - "nativeSrc": "9137:2:43", - "nodeType": "YulLiteral", - "src": "9137:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "9108:3:43", - "nodeType": "YulIdentifier", - "src": "9108:3:43" - }, - "nativeSrc": "9108:32:43", - "nodeType": "YulFunctionCall", - "src": "9108:32:43" - }, - "nativeSrc": "9105:52:43", - "nodeType": "YulIf", - "src": "9105:52:43" - }, - { - "nativeSrc": "9166:36:43", - "nodeType": "YulVariableDeclaration", - "src": "9166:36:43", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "9192:9:43", - "nodeType": "YulIdentifier", - "src": "9192:9:43" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "9179:12:43", - "nodeType": "YulIdentifier", - "src": "9179:12:43" - }, - "nativeSrc": "9179:23:43", - "nodeType": "YulFunctionCall", - "src": "9179:23:43" - }, - "variables": [ - { - "name": "value", - "nativeSrc": "9170:5:43", - "nodeType": "YulTypedName", - "src": "9170:5:43", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nativeSrc": "9236:5:43", - "nodeType": "YulIdentifier", - "src": "9236:5:43" - } - ], - "functionName": { - "name": "validator_revert_address", - "nativeSrc": "9211:24:43", - "nodeType": "YulIdentifier", - "src": "9211:24:43" - }, - "nativeSrc": "9211:31:43", - "nodeType": "YulFunctionCall", - "src": "9211:31:43" - }, - "nativeSrc": "9211:31:43", - "nodeType": "YulExpressionStatement", - "src": "9211:31:43" - }, - { - "nativeSrc": "9251:15:43", - "nodeType": "YulAssignment", - "src": "9251:15:43", - "value": { - "name": "value", - "nativeSrc": "9261:5:43", - "nodeType": "YulIdentifier", - "src": "9261:5:43" - }, - "variableNames": [ - { - "name": "value0", - "nativeSrc": "9251:6:43", - "nodeType": "YulIdentifier", - "src": "9251:6:43" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_address", - "nativeSrc": "9025:247:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "9061:9:43", - "nodeType": "YulTypedName", - "src": "9061:9:43", - "type": "" - }, - { - "name": "dataEnd", - "nativeSrc": "9072:7:43", - "nodeType": "YulTypedName", - "src": "9072:7:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nativeSrc": "9084:6:43", - "nodeType": "YulTypedName", - "src": "9084:6:43", - "type": "" - } - ], - "src": "9025:247:43" - }, - { - "body": { - "nativeSrc": "9376:101:43", - "nodeType": "YulBlock", - "src": "9376:101:43", - "statements": [ - { - "nativeSrc": "9386:26:43", - "nodeType": "YulAssignment", - "src": "9386:26:43", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "9398:9:43", - "nodeType": "YulIdentifier", - "src": "9398:9:43" - }, - { - "kind": "number", - "nativeSrc": "9409:2:43", - "nodeType": "YulLiteral", - "src": "9409:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "9394:3:43", - "nodeType": "YulIdentifier", - "src": "9394:3:43" - }, - "nativeSrc": "9394:18:43", - "nodeType": "YulFunctionCall", - "src": "9394:18:43" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "9386:4:43", - "nodeType": "YulIdentifier", - "src": "9386:4:43" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "9428:9:43", - "nodeType": "YulIdentifier", - "src": "9428:9:43" - }, - { - "arguments": [ - { - "name": "value0", - "nativeSrc": "9443:6:43", - "nodeType": "YulIdentifier", - "src": "9443:6:43" - }, - { - "kind": "number", - "nativeSrc": "9451:18:43", - "nodeType": "YulLiteral", - "src": "9451:18:43", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "9439:3:43", - "nodeType": "YulIdentifier", - "src": "9439:3:43" - }, - "nativeSrc": "9439:31:43", - "nodeType": "YulFunctionCall", - "src": "9439:31:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "9421:6:43", - "nodeType": "YulIdentifier", - "src": "9421:6:43" - }, - "nativeSrc": "9421:50:43", - "nodeType": "YulFunctionCall", - "src": "9421:50:43" - }, - "nativeSrc": "9421:50:43", - "nodeType": "YulExpressionStatement", - "src": "9421:50:43" - } - ] - }, - "name": "abi_encode_tuple_t_uint64__to_t_uint64__fromStack_reversed", - "nativeSrc": "9277:200:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "9345:9:43", - "nodeType": "YulTypedName", - "src": "9345:9:43", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "9356:6:43", - "nodeType": "YulTypedName", - "src": "9356:6:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "9367:4:43", - "nodeType": "YulTypedName", - "src": "9367:4:43", - "type": "" - } - ], - "src": "9277:200:43" - }, - { - "body": { - "nativeSrc": "9629:521:43", - "nodeType": "YulBlock", - "src": "9629:521:43", - "statements": [ - { - "body": { - "nativeSrc": "9676:16:43", - "nodeType": "YulBlock", - "src": "9676:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "9685:1:43", - "nodeType": "YulLiteral", - "src": "9685:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "9688:1:43", - "nodeType": "YulLiteral", - "src": "9688:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "9678:6:43", - "nodeType": "YulIdentifier", - "src": "9678:6:43" - }, - "nativeSrc": "9678:12:43", - "nodeType": "YulFunctionCall", - "src": "9678:12:43" - }, - "nativeSrc": "9678:12:43", - "nodeType": "YulExpressionStatement", - "src": "9678:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nativeSrc": "9650:7:43", - "nodeType": "YulIdentifier", - "src": "9650:7:43" - }, - { - "name": "headStart", - "nativeSrc": "9659:9:43", - "nodeType": "YulIdentifier", - "src": "9659:9:43" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "9646:3:43", - "nodeType": "YulIdentifier", - "src": "9646:3:43" - }, - "nativeSrc": "9646:23:43", - "nodeType": "YulFunctionCall", - "src": "9646:23:43" - }, - { - "kind": "number", - "nativeSrc": "9671:3:43", - "nodeType": "YulLiteral", - "src": "9671:3:43", - "type": "", - "value": "160" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "9642:3:43", - "nodeType": "YulIdentifier", - "src": "9642:3:43" - }, - "nativeSrc": "9642:33:43", - "nodeType": "YulFunctionCall", - "src": "9642:33:43" - }, - "nativeSrc": "9639:53:43", - "nodeType": "YulIf", - "src": "9639:53:43" - }, - { - "nativeSrc": "9701:63:43", - "nodeType": "YulAssignment", - "src": "9701:63:43", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "9745:9:43", - "nodeType": "YulIdentifier", - "src": "9745:9:43" - }, - { - "name": "dataEnd", - "nativeSrc": "9756:7:43", - "nodeType": "YulIdentifier", - "src": "9756:7:43" - } - ], - "functionName": { - "name": "abi_decode_struct_Origin_calldata", - "nativeSrc": "9711:33:43", - "nodeType": "YulIdentifier", - "src": "9711:33:43" - }, - "nativeSrc": "9711:53:43", - "nodeType": "YulFunctionCall", - "src": "9711:53:43" - }, - "variableNames": [ - { - "name": "value0", - "nativeSrc": "9701:6:43", - "nodeType": "YulIdentifier", - "src": "9701:6:43" - } - ] - }, - { - "nativeSrc": "9773:46:43", - "nodeType": "YulVariableDeclaration", - "src": "9773:46:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "9804:9:43", - "nodeType": "YulIdentifier", - "src": "9804:9:43" - }, - { - "kind": "number", - "nativeSrc": "9815:2:43", - "nodeType": "YulLiteral", - "src": "9815:2:43", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "9800:3:43", - "nodeType": "YulIdentifier", - "src": "9800:3:43" - }, - "nativeSrc": "9800:18:43", - "nodeType": "YulFunctionCall", - "src": "9800:18:43" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "9787:12:43", - "nodeType": "YulIdentifier", - "src": "9787:12:43" - }, - "nativeSrc": "9787:32:43", - "nodeType": "YulFunctionCall", - "src": "9787:32:43" - }, - "variables": [ - { - "name": "offset", - "nativeSrc": "9777:6:43", - "nodeType": "YulTypedName", - "src": "9777:6:43", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "9862:16:43", - "nodeType": "YulBlock", - "src": "9862:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "9871:1:43", - "nodeType": "YulLiteral", - "src": "9871:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "9874:1:43", - "nodeType": "YulLiteral", - "src": "9874:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "9864:6:43", - "nodeType": "YulIdentifier", - "src": "9864:6:43" - }, - "nativeSrc": "9864:12:43", - "nodeType": "YulFunctionCall", - "src": "9864:12:43" - }, - "nativeSrc": "9864:12:43", - "nodeType": "YulExpressionStatement", - "src": "9864:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "offset", - "nativeSrc": "9834:6:43", - "nodeType": "YulIdentifier", - "src": "9834:6:43" - }, - { - "kind": "number", - "nativeSrc": "9842:18:43", - "nodeType": "YulLiteral", - "src": "9842:18:43", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "9831:2:43", - "nodeType": "YulIdentifier", - "src": "9831:2:43" - }, - "nativeSrc": "9831:30:43", - "nodeType": "YulFunctionCall", - "src": "9831:30:43" - }, - "nativeSrc": "9828:50:43", - "nodeType": "YulIf", - "src": "9828:50:43" - }, - { - "nativeSrc": "9887:84:43", - "nodeType": "YulVariableDeclaration", - "src": "9887:84:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "9943:9:43", - "nodeType": "YulIdentifier", - "src": "9943:9:43" - }, - { - "name": "offset", - "nativeSrc": "9954:6:43", - "nodeType": "YulIdentifier", - "src": "9954:6:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "9939:3:43", - "nodeType": "YulIdentifier", - "src": "9939:3:43" - }, - "nativeSrc": "9939:22:43", - "nodeType": "YulFunctionCall", - "src": "9939:22:43" - }, - { - "name": "dataEnd", - "nativeSrc": "9963:7:43", - "nodeType": "YulIdentifier", - "src": "9963:7:43" - } - ], - "functionName": { - "name": "abi_decode_bytes_calldata", - "nativeSrc": "9913:25:43", - "nodeType": "YulIdentifier", - "src": "9913:25:43" - }, - "nativeSrc": "9913:58:43", - "nodeType": "YulFunctionCall", - "src": "9913:58:43" - }, - "variables": [ - { - "name": "value1_1", - "nativeSrc": "9891:8:43", - "nodeType": "YulTypedName", - "src": "9891:8:43", - "type": "" - }, - { - "name": "value2_1", - "nativeSrc": "9901:8:43", - "nodeType": "YulTypedName", - "src": "9901:8:43", - "type": "" - } - ] - }, - { - "nativeSrc": "9980:18:43", - "nodeType": "YulAssignment", - "src": "9980:18:43", - "value": { - "name": "value1_1", - "nativeSrc": "9990:8:43", - "nodeType": "YulIdentifier", - "src": "9990:8:43" - }, - "variableNames": [ - { - "name": "value1", - "nativeSrc": "9980:6:43", - "nodeType": "YulIdentifier", - "src": "9980:6:43" - } - ] - }, - { - "nativeSrc": "10007:18:43", - "nodeType": "YulAssignment", - "src": "10007:18:43", - "value": { - "name": "value2_1", - "nativeSrc": "10017:8:43", - "nodeType": "YulIdentifier", - "src": "10017:8:43" - }, - "variableNames": [ - { - "name": "value2", - "nativeSrc": "10007:6:43", - "nodeType": "YulIdentifier", - "src": "10007:6:43" - } - ] - }, - { - "nativeSrc": "10034:46:43", - "nodeType": "YulVariableDeclaration", - "src": "10034:46:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "10064:9:43", - "nodeType": "YulIdentifier", - "src": "10064:9:43" - }, - { - "kind": "number", - "nativeSrc": "10075:3:43", - "nodeType": "YulLiteral", - "src": "10075:3:43", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "10060:3:43", - "nodeType": "YulIdentifier", - "src": "10060:3:43" - }, - "nativeSrc": "10060:19:43", - "nodeType": "YulFunctionCall", - "src": "10060:19:43" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "10047:12:43", - "nodeType": "YulIdentifier", - "src": "10047:12:43" - }, - "nativeSrc": "10047:33:43", - "nodeType": "YulFunctionCall", - "src": "10047:33:43" - }, - "variables": [ - { - "name": "value", - "nativeSrc": "10038:5:43", - "nodeType": "YulTypedName", - "src": "10038:5:43", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nativeSrc": "10114:5:43", - "nodeType": "YulIdentifier", - "src": "10114:5:43" - } - ], - "functionName": { - "name": "validator_revert_address", - "nativeSrc": "10089:24:43", - "nodeType": "YulIdentifier", - "src": "10089:24:43" - }, - "nativeSrc": "10089:31:43", - "nodeType": "YulFunctionCall", - "src": "10089:31:43" - }, - "nativeSrc": "10089:31:43", - "nodeType": "YulExpressionStatement", - "src": "10089:31:43" - }, - { - "nativeSrc": "10129:15:43", - "nodeType": "YulAssignment", - "src": "10129:15:43", - "value": { - "name": "value", - "nativeSrc": "10139:5:43", - "nodeType": "YulIdentifier", - "src": "10139:5:43" - }, - "variableNames": [ - { - "name": "value3", - "nativeSrc": "10129:6:43", - "nodeType": "YulIdentifier", - "src": "10129:6:43" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_struct$_Origin_$40_calldata_ptrt_bytes_calldata_ptrt_address", - "nativeSrc": "9482:668:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "9571:9:43", - "nodeType": "YulTypedName", - "src": "9571:9:43", - "type": "" - }, - { - "name": "dataEnd", - "nativeSrc": "9582:7:43", - "nodeType": "YulTypedName", - "src": "9582:7:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nativeSrc": "9594:6:43", - "nodeType": "YulTypedName", - "src": "9594:6:43", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "9602:6:43", - "nodeType": "YulTypedName", - "src": "9602:6:43", - "type": "" - }, - { - "name": "value2", - "nativeSrc": "9610:6:43", - "nodeType": "YulTypedName", - "src": "9610:6:43", - "type": "" - }, - { - "name": "value3", - "nativeSrc": "9618:6:43", - "nodeType": "YulTypedName", - "src": "9618:6:43", - "type": "" - } - ], - "src": "9482:668:43" - }, - { - "body": { - "nativeSrc": "10267:283:43", - "nodeType": "YulBlock", - "src": "10267:283:43", - "statements": [ - { - "body": { - "nativeSrc": "10316:16:43", - "nodeType": "YulBlock", - "src": "10316:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "10325:1:43", - "nodeType": "YulLiteral", - "src": "10325:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "10328:1:43", - "nodeType": "YulLiteral", - "src": "10328:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "10318:6:43", - "nodeType": "YulIdentifier", - "src": "10318:6:43" - }, - "nativeSrc": "10318:12:43", - "nodeType": "YulFunctionCall", - "src": "10318:12:43" - }, - "nativeSrc": "10318:12:43", - "nodeType": "YulExpressionStatement", - "src": "10318:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "offset", - "nativeSrc": "10295:6:43", - "nodeType": "YulIdentifier", - "src": "10295:6:43" - }, - { - "kind": "number", - "nativeSrc": "10303:4:43", - "nodeType": "YulLiteral", - "src": "10303:4:43", - "type": "", - "value": "0x1f" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "10291:3:43", - "nodeType": "YulIdentifier", - "src": "10291:3:43" - }, - "nativeSrc": "10291:17:43", - "nodeType": "YulFunctionCall", - "src": "10291:17:43" - }, - { - "name": "end", - "nativeSrc": "10310:3:43", - "nodeType": "YulIdentifier", - "src": "10310:3:43" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "10287:3:43", - "nodeType": "YulIdentifier", - "src": "10287:3:43" - }, - "nativeSrc": "10287:27:43", - "nodeType": "YulFunctionCall", - "src": "10287:27:43" - } - ], - "functionName": { - "name": "iszero", - "nativeSrc": "10280:6:43", - "nodeType": "YulIdentifier", - "src": "10280:6:43" - }, - "nativeSrc": "10280:35:43", - "nodeType": "YulFunctionCall", - "src": "10280:35:43" - }, - "nativeSrc": "10277:55:43", - "nodeType": "YulIf", - "src": "10277:55:43" - }, - { - "nativeSrc": "10341:30:43", - "nodeType": "YulAssignment", - "src": "10341:30:43", - "value": { - "arguments": [ - { - "name": "offset", - "nativeSrc": "10364:6:43", - "nodeType": "YulIdentifier", - "src": "10364:6:43" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "10351:12:43", - "nodeType": "YulIdentifier", - "src": "10351:12:43" - }, - "nativeSrc": "10351:20:43", - "nodeType": "YulFunctionCall", - "src": "10351:20:43" - }, - "variableNames": [ - { - "name": "length", - "nativeSrc": "10341:6:43", - "nodeType": "YulIdentifier", - "src": "10341:6:43" - } - ] - }, - { - "body": { - "nativeSrc": "10414:16:43", - "nodeType": "YulBlock", - "src": "10414:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "10423:1:43", - "nodeType": "YulLiteral", - "src": "10423:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "10426:1:43", - "nodeType": "YulLiteral", - "src": "10426:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "10416:6:43", - "nodeType": "YulIdentifier", - "src": "10416:6:43" - }, - "nativeSrc": "10416:12:43", - "nodeType": "YulFunctionCall", - "src": "10416:12:43" - }, - "nativeSrc": "10416:12:43", - "nodeType": "YulExpressionStatement", - "src": "10416:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "length", - "nativeSrc": "10386:6:43", - "nodeType": "YulIdentifier", - "src": "10386:6:43" - }, - { - "kind": "number", - "nativeSrc": "10394:18:43", - "nodeType": "YulLiteral", - "src": "10394:18:43", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "10383:2:43", - "nodeType": "YulIdentifier", - "src": "10383:2:43" - }, - "nativeSrc": "10383:30:43", - "nodeType": "YulFunctionCall", - "src": "10383:30:43" - }, - "nativeSrc": "10380:50:43", - "nodeType": "YulIf", - "src": "10380:50:43" - }, - { - "nativeSrc": "10439:29:43", - "nodeType": "YulAssignment", - "src": "10439:29:43", - "value": { - "arguments": [ - { - "name": "offset", - "nativeSrc": "10455:6:43", - "nodeType": "YulIdentifier", - "src": "10455:6:43" - }, - { - "kind": "number", - "nativeSrc": "10463:4:43", - "nodeType": "YulLiteral", - "src": "10463:4:43", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "10451:3:43", - "nodeType": "YulIdentifier", - "src": "10451:3:43" - }, - "nativeSrc": "10451:17:43", - "nodeType": "YulFunctionCall", - "src": "10451:17:43" - }, - "variableNames": [ - { - "name": "arrayPos", - "nativeSrc": "10439:8:43", - "nodeType": "YulIdentifier", - "src": "10439:8:43" - } - ] - }, - { - "body": { - "nativeSrc": "10528:16:43", - "nodeType": "YulBlock", - "src": "10528:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "10537:1:43", - "nodeType": "YulLiteral", - "src": "10537:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "10540:1:43", - "nodeType": "YulLiteral", - "src": "10540:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "10530:6:43", - "nodeType": "YulIdentifier", - "src": "10530:6:43" - }, - "nativeSrc": "10530:12:43", - "nodeType": "YulFunctionCall", - "src": "10530:12:43" - }, - "nativeSrc": "10530:12:43", - "nodeType": "YulExpressionStatement", - "src": "10530:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "offset", - "nativeSrc": "10491:6:43", - "nodeType": "YulIdentifier", - "src": "10491:6:43" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "10503:1:43", - "nodeType": "YulLiteral", - "src": "10503:1:43", - "type": "", - "value": "5" - }, - { - "name": "length", - "nativeSrc": "10506:6:43", - "nodeType": "YulIdentifier", - "src": "10506:6:43" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "10499:3:43", - "nodeType": "YulIdentifier", - "src": "10499:3:43" - }, - "nativeSrc": "10499:14:43", - "nodeType": "YulFunctionCall", - "src": "10499:14:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "10487:3:43", - "nodeType": "YulIdentifier", - "src": "10487:3:43" - }, - "nativeSrc": "10487:27:43", - "nodeType": "YulFunctionCall", - "src": "10487:27:43" - }, - { - "kind": "number", - "nativeSrc": "10516:4:43", - "nodeType": "YulLiteral", - "src": "10516:4:43", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "10483:3:43", - "nodeType": "YulIdentifier", - "src": "10483:3:43" - }, - "nativeSrc": "10483:38:43", - "nodeType": "YulFunctionCall", - "src": "10483:38:43" - }, - { - "name": "end", - "nativeSrc": "10523:3:43", - "nodeType": "YulIdentifier", - "src": "10523:3:43" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "10480:2:43", - "nodeType": "YulIdentifier", - "src": "10480:2:43" - }, - "nativeSrc": "10480:47:43", - "nodeType": "YulFunctionCall", - "src": "10480:47:43" - }, - "nativeSrc": "10477:67:43", - "nodeType": "YulIf", - "src": "10477:67:43" - } - ] - }, - "name": "abi_decode_array_struct_EnforcedOptionParam_calldata_dyn_calldata", - "nativeSrc": "10155:395:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "offset", - "nativeSrc": "10230:6:43", - "nodeType": "YulTypedName", - "src": "10230:6:43", - "type": "" - }, - { - "name": "end", - "nativeSrc": "10238:3:43", - "nodeType": "YulTypedName", - "src": "10238:3:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "arrayPos", - "nativeSrc": "10246:8:43", - "nodeType": "YulTypedName", - "src": "10246:8:43", - "type": "" - }, - { - "name": "length", - "nativeSrc": "10256:6:43", - "nodeType": "YulTypedName", - "src": "10256:6:43", - "type": "" - } - ], - "src": "10155:395:43" - }, - { - "body": { - "nativeSrc": "10699:360:43", - "nodeType": "YulBlock", - "src": "10699:360:43", - "statements": [ - { - "body": { - "nativeSrc": "10745:16:43", - "nodeType": "YulBlock", - "src": "10745:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "10754:1:43", - "nodeType": "YulLiteral", - "src": "10754:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "10757:1:43", - "nodeType": "YulLiteral", - "src": "10757:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "10747:6:43", - "nodeType": "YulIdentifier", - "src": "10747:6:43" - }, - "nativeSrc": "10747:12:43", - "nodeType": "YulFunctionCall", - "src": "10747:12:43" - }, - "nativeSrc": "10747:12:43", - "nodeType": "YulExpressionStatement", - "src": "10747:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nativeSrc": "10720:7:43", - "nodeType": "YulIdentifier", - "src": "10720:7:43" - }, - { - "name": "headStart", - "nativeSrc": "10729:9:43", - "nodeType": "YulIdentifier", - "src": "10729:9:43" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "10716:3:43", - "nodeType": "YulIdentifier", - "src": "10716:3:43" - }, - "nativeSrc": "10716:23:43", - "nodeType": "YulFunctionCall", - "src": "10716:23:43" - }, - { - "kind": "number", - "nativeSrc": "10741:2:43", - "nodeType": "YulLiteral", - "src": "10741:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "10712:3:43", - "nodeType": "YulIdentifier", - "src": "10712:3:43" - }, - "nativeSrc": "10712:32:43", - "nodeType": "YulFunctionCall", - "src": "10712:32:43" - }, - "nativeSrc": "10709:52:43", - "nodeType": "YulIf", - "src": "10709:52:43" - }, - { - "nativeSrc": "10770:37:43", - "nodeType": "YulVariableDeclaration", - "src": "10770:37:43", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "10797:9:43", - "nodeType": "YulIdentifier", - "src": "10797:9:43" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "10784:12:43", - "nodeType": "YulIdentifier", - "src": "10784:12:43" - }, - "nativeSrc": "10784:23:43", - "nodeType": "YulFunctionCall", - "src": "10784:23:43" - }, - "variables": [ - { - "name": "offset", - "nativeSrc": "10774:6:43", - "nodeType": "YulTypedName", - "src": "10774:6:43", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "10850:16:43", - "nodeType": "YulBlock", - "src": "10850:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "10859:1:43", - "nodeType": "YulLiteral", - "src": "10859:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "10862:1:43", - "nodeType": "YulLiteral", - "src": "10862:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "10852:6:43", - "nodeType": "YulIdentifier", - "src": "10852:6:43" - }, - "nativeSrc": "10852:12:43", - "nodeType": "YulFunctionCall", - "src": "10852:12:43" - }, - "nativeSrc": "10852:12:43", - "nodeType": "YulExpressionStatement", - "src": "10852:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "offset", - "nativeSrc": "10822:6:43", - "nodeType": "YulIdentifier", - "src": "10822:6:43" - }, - { - "kind": "number", - "nativeSrc": "10830:18:43", - "nodeType": "YulLiteral", - "src": "10830:18:43", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "10819:2:43", - "nodeType": "YulIdentifier", - "src": "10819:2:43" - }, - "nativeSrc": "10819:30:43", - "nodeType": "YulFunctionCall", - "src": "10819:30:43" - }, - "nativeSrc": "10816:50:43", - "nodeType": "YulIf", - "src": "10816:50:43" - }, - { - "nativeSrc": "10875:124:43", - "nodeType": "YulVariableDeclaration", - "src": "10875:124:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "10971:9:43", - "nodeType": "YulIdentifier", - "src": "10971:9:43" - }, - { - "name": "offset", - "nativeSrc": "10982:6:43", - "nodeType": "YulIdentifier", - "src": "10982:6:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "10967:3:43", - "nodeType": "YulIdentifier", - "src": "10967:3:43" - }, - "nativeSrc": "10967:22:43", - "nodeType": "YulFunctionCall", - "src": "10967:22:43" - }, - { - "name": "dataEnd", - "nativeSrc": "10991:7:43", - "nodeType": "YulIdentifier", - "src": "10991:7:43" - } - ], - "functionName": { - "name": "abi_decode_array_struct_EnforcedOptionParam_calldata_dyn_calldata", - "nativeSrc": "10901:65:43", - "nodeType": "YulIdentifier", - "src": "10901:65:43" - }, - "nativeSrc": "10901:98:43", - "nodeType": "YulFunctionCall", - "src": "10901:98:43" - }, - "variables": [ - { - "name": "value0_1", - "nativeSrc": "10879:8:43", - "nodeType": "YulTypedName", - "src": "10879:8:43", - "type": "" - }, - { - "name": "value1_1", - "nativeSrc": "10889:8:43", - "nodeType": "YulTypedName", - "src": "10889:8:43", - "type": "" - } - ] - }, - { - "nativeSrc": "11008:18:43", - "nodeType": "YulAssignment", - "src": "11008:18:43", - "value": { - "name": "value0_1", - "nativeSrc": "11018:8:43", - "nodeType": "YulIdentifier", - "src": "11018:8:43" - }, - "variableNames": [ - { - "name": "value0", - "nativeSrc": "11008:6:43", - "nodeType": "YulIdentifier", - "src": "11008:6:43" - } - ] - }, - { - "nativeSrc": "11035:18:43", - "nodeType": "YulAssignment", - "src": "11035:18:43", - "value": { - "name": "value1_1", - "nativeSrc": "11045:8:43", - "nodeType": "YulIdentifier", - "src": "11045:8:43" - }, - "variableNames": [ - { - "name": "value1", - "nativeSrc": "11035:6:43", - "nodeType": "YulIdentifier", - "src": "11035:6:43" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_array$_t_struct$_EnforcedOptionParam_$1932_calldata_ptr_$dyn_calldata_ptr", - "nativeSrc": "10555:504:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "10657:9:43", - "nodeType": "YulTypedName", - "src": "10657:9:43", - "type": "" - }, - { - "name": "dataEnd", - "nativeSrc": "10668:7:43", - "nodeType": "YulTypedName", - "src": "10668:7:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nativeSrc": "10680:6:43", - "nodeType": "YulTypedName", - "src": "10680:6:43", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "10688:6:43", - "nodeType": "YulTypedName", - "src": "10688:6:43", - "type": "" - } - ], - "src": "10555:504:43" - }, - { - "body": { - "nativeSrc": "11133:115:43", - "nodeType": "YulBlock", - "src": "11133:115:43", - "statements": [ - { - "body": { - "nativeSrc": "11179:16:43", - "nodeType": "YulBlock", - "src": "11179:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "11188:1:43", - "nodeType": "YulLiteral", - "src": "11188:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "11191:1:43", - "nodeType": "YulLiteral", - "src": "11191:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "11181:6:43", - "nodeType": "YulIdentifier", - "src": "11181:6:43" - }, - "nativeSrc": "11181:12:43", - "nodeType": "YulFunctionCall", - "src": "11181:12:43" - }, - "nativeSrc": "11181:12:43", - "nodeType": "YulExpressionStatement", - "src": "11181:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nativeSrc": "11154:7:43", - "nodeType": "YulIdentifier", - "src": "11154:7:43" - }, - { - "name": "headStart", - "nativeSrc": "11163:9:43", - "nodeType": "YulIdentifier", - "src": "11163:9:43" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "11150:3:43", - "nodeType": "YulIdentifier", - "src": "11150:3:43" - }, - "nativeSrc": "11150:23:43", - "nodeType": "YulFunctionCall", - "src": "11150:23:43" - }, - { - "kind": "number", - "nativeSrc": "11175:2:43", - "nodeType": "YulLiteral", - "src": "11175:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "11146:3:43", - "nodeType": "YulIdentifier", - "src": "11146:3:43" - }, - "nativeSrc": "11146:32:43", - "nodeType": "YulFunctionCall", - "src": "11146:32:43" - }, - "nativeSrc": "11143:52:43", - "nodeType": "YulIf", - "src": "11143:52:43" - }, - { - "nativeSrc": "11204:38:43", - "nodeType": "YulAssignment", - "src": "11204:38:43", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "11232:9:43", - "nodeType": "YulIdentifier", - "src": "11232:9:43" - } - ], - "functionName": { - "name": "abi_decode_uint32", - "nativeSrc": "11214:17:43", - "nodeType": "YulIdentifier", - "src": "11214:17:43" - }, - "nativeSrc": "11214:28:43", - "nodeType": "YulFunctionCall", - "src": "11214:28:43" - }, - "variableNames": [ - { - "name": "value0", - "nativeSrc": "11204:6:43", - "nodeType": "YulIdentifier", - "src": "11204:6:43" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_uint32", - "nativeSrc": "11064:184:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "11099:9:43", - "nodeType": "YulTypedName", - "src": "11099:9:43", - "type": "" - }, - { - "name": "dataEnd", - "nativeSrc": "11110:7:43", - "nodeType": "YulTypedName", - "src": "11110:7:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nativeSrc": "11122:6:43", - "nodeType": "YulTypedName", - "src": "11122:6:43", - "type": "" - } - ], - "src": "11064:184:43" - }, - { - "body": { - "nativeSrc": "11354:76:43", - "nodeType": "YulBlock", - "src": "11354:76:43", - "statements": [ - { - "nativeSrc": "11364:26:43", - "nodeType": "YulAssignment", - "src": "11364:26:43", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "11376:9:43", - "nodeType": "YulIdentifier", - "src": "11376:9:43" - }, - { - "kind": "number", - "nativeSrc": "11387:2:43", - "nodeType": "YulLiteral", - "src": "11387:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "11372:3:43", - "nodeType": "YulIdentifier", - "src": "11372:3:43" - }, - "nativeSrc": "11372:18:43", - "nodeType": "YulFunctionCall", - "src": "11372:18:43" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "11364:4:43", - "nodeType": "YulIdentifier", - "src": "11364:4:43" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "11406:9:43", - "nodeType": "YulIdentifier", - "src": "11406:9:43" - }, - { - "name": "value0", - "nativeSrc": "11417:6:43", - "nodeType": "YulIdentifier", - "src": "11417:6:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "11399:6:43", - "nodeType": "YulIdentifier", - "src": "11399:6:43" - }, - "nativeSrc": "11399:25:43", - "nodeType": "YulFunctionCall", - "src": "11399:25:43" - }, - "nativeSrc": "11399:25:43", - "nodeType": "YulExpressionStatement", - "src": "11399:25:43" - } - ] - }, - "name": "abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed", - "nativeSrc": "11253:177:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "11323:9:43", - "nodeType": "YulTypedName", - "src": "11323:9:43", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "11334:6:43", - "nodeType": "YulTypedName", - "src": "11334:6:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "11345:4:43", - "nodeType": "YulTypedName", - "src": "11345:4:43", - "type": "" - } - ], - "src": "11253:177:43" - }, - { - "body": { - "nativeSrc": "11556:432:43", - "nodeType": "YulBlock", - "src": "11556:432:43", - "statements": [ - { - "body": { - "nativeSrc": "11602:16:43", - "nodeType": "YulBlock", - "src": "11602:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "11611:1:43", - "nodeType": "YulLiteral", - "src": "11611:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "11614:1:43", - "nodeType": "YulLiteral", - "src": "11614:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "11604:6:43", - "nodeType": "YulIdentifier", - "src": "11604:6:43" - }, - "nativeSrc": "11604:12:43", - "nodeType": "YulFunctionCall", - "src": "11604:12:43" - }, - "nativeSrc": "11604:12:43", - "nodeType": "YulExpressionStatement", - "src": "11604:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nativeSrc": "11577:7:43", - "nodeType": "YulIdentifier", - "src": "11577:7:43" - }, - { - "name": "headStart", - "nativeSrc": "11586:9:43", - "nodeType": "YulIdentifier", - "src": "11586:9:43" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "11573:3:43", - "nodeType": "YulIdentifier", - "src": "11573:3:43" - }, - "nativeSrc": "11573:23:43", - "nodeType": "YulFunctionCall", - "src": "11573:23:43" - }, - { - "kind": "number", - "nativeSrc": "11598:2:43", - "nodeType": "YulLiteral", - "src": "11598:2:43", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "11569:3:43", - "nodeType": "YulIdentifier", - "src": "11569:3:43" - }, - "nativeSrc": "11569:32:43", - "nodeType": "YulFunctionCall", - "src": "11569:32:43" - }, - "nativeSrc": "11566:52:43", - "nodeType": "YulIf", - "src": "11566:52:43" - }, - { - "nativeSrc": "11627:38:43", - "nodeType": "YulAssignment", - "src": "11627:38:43", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "11655:9:43", - "nodeType": "YulIdentifier", - "src": "11655:9:43" - } - ], - "functionName": { - "name": "abi_decode_uint32", - "nativeSrc": "11637:17:43", - "nodeType": "YulIdentifier", - "src": "11637:17:43" - }, - "nativeSrc": "11637:28:43", - "nodeType": "YulFunctionCall", - "src": "11637:28:43" - }, - "variableNames": [ - { - "name": "value0", - "nativeSrc": "11627:6:43", - "nodeType": "YulIdentifier", - "src": "11627:6:43" - } - ] - }, - { - "nativeSrc": "11674:47:43", - "nodeType": "YulAssignment", - "src": "11674:47:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "11706:9:43", - "nodeType": "YulIdentifier", - "src": "11706:9:43" - }, - { - "kind": "number", - "nativeSrc": "11717:2:43", - "nodeType": "YulLiteral", - "src": "11717:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "11702:3:43", - "nodeType": "YulIdentifier", - "src": "11702:3:43" - }, - "nativeSrc": "11702:18:43", - "nodeType": "YulFunctionCall", - "src": "11702:18:43" - } - ], - "functionName": { - "name": "abi_decode_uint16", - "nativeSrc": "11684:17:43", - "nodeType": "YulIdentifier", - "src": "11684:17:43" - }, - "nativeSrc": "11684:37:43", - "nodeType": "YulFunctionCall", - "src": "11684:37:43" - }, - "variableNames": [ - { - "name": "value1", - "nativeSrc": "11674:6:43", - "nodeType": "YulIdentifier", - "src": "11674:6:43" - } - ] - }, - { - "nativeSrc": "11730:46:43", - "nodeType": "YulVariableDeclaration", - "src": "11730:46:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "11761:9:43", - "nodeType": "YulIdentifier", - "src": "11761:9:43" - }, - { - "kind": "number", - "nativeSrc": "11772:2:43", - "nodeType": "YulLiteral", - "src": "11772:2:43", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "11757:3:43", - "nodeType": "YulIdentifier", - "src": "11757:3:43" - }, - "nativeSrc": "11757:18:43", - "nodeType": "YulFunctionCall", - "src": "11757:18:43" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "11744:12:43", - "nodeType": "YulIdentifier", - "src": "11744:12:43" - }, - "nativeSrc": "11744:32:43", - "nodeType": "YulFunctionCall", - "src": "11744:32:43" - }, - "variables": [ - { - "name": "offset", - "nativeSrc": "11734:6:43", - "nodeType": "YulTypedName", - "src": "11734:6:43", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "11819:16:43", - "nodeType": "YulBlock", - "src": "11819:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "11828:1:43", - "nodeType": "YulLiteral", - "src": "11828:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "11831:1:43", - "nodeType": "YulLiteral", - "src": "11831:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "11821:6:43", - "nodeType": "YulIdentifier", - "src": "11821:6:43" - }, - "nativeSrc": "11821:12:43", - "nodeType": "YulFunctionCall", - "src": "11821:12:43" - }, - "nativeSrc": "11821:12:43", - "nodeType": "YulExpressionStatement", - "src": "11821:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "offset", - "nativeSrc": "11791:6:43", - "nodeType": "YulIdentifier", - "src": "11791:6:43" - }, - { - "kind": "number", - "nativeSrc": "11799:18:43", - "nodeType": "YulLiteral", - "src": "11799:18:43", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "11788:2:43", - "nodeType": "YulIdentifier", - "src": "11788:2:43" - }, - "nativeSrc": "11788:30:43", - "nodeType": "YulFunctionCall", - "src": "11788:30:43" - }, - "nativeSrc": "11785:50:43", - "nodeType": "YulIf", - "src": "11785:50:43" - }, - { - "nativeSrc": "11844:84:43", - "nodeType": "YulVariableDeclaration", - "src": "11844:84:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "11900:9:43", - "nodeType": "YulIdentifier", - "src": "11900:9:43" - }, - { - "name": "offset", - "nativeSrc": "11911:6:43", - "nodeType": "YulIdentifier", - "src": "11911:6:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "11896:3:43", - "nodeType": "YulIdentifier", - "src": "11896:3:43" - }, - "nativeSrc": "11896:22:43", - "nodeType": "YulFunctionCall", - "src": "11896:22:43" - }, - { - "name": "dataEnd", - "nativeSrc": "11920:7:43", - "nodeType": "YulIdentifier", - "src": "11920:7:43" - } - ], - "functionName": { - "name": "abi_decode_bytes_calldata", - "nativeSrc": "11870:25:43", - "nodeType": "YulIdentifier", - "src": "11870:25:43" - }, - "nativeSrc": "11870:58:43", - "nodeType": "YulFunctionCall", - "src": "11870:58:43" - }, - "variables": [ - { - "name": "value2_1", - "nativeSrc": "11848:8:43", - "nodeType": "YulTypedName", - "src": "11848:8:43", - "type": "" - }, - { - "name": "value3_1", - "nativeSrc": "11858:8:43", - "nodeType": "YulTypedName", - "src": "11858:8:43", - "type": "" - } - ] - }, - { - "nativeSrc": "11937:18:43", - "nodeType": "YulAssignment", - "src": "11937:18:43", - "value": { - "name": "value2_1", - "nativeSrc": "11947:8:43", - "nodeType": "YulIdentifier", - "src": "11947:8:43" - }, - "variableNames": [ - { - "name": "value2", - "nativeSrc": "11937:6:43", - "nodeType": "YulIdentifier", - "src": "11937:6:43" - } - ] - }, - { - "nativeSrc": "11964:18:43", - "nodeType": "YulAssignment", - "src": "11964:18:43", - "value": { - "name": "value3_1", - "nativeSrc": "11974:8:43", - "nodeType": "YulIdentifier", - "src": "11974:8:43" - }, - "variableNames": [ - { - "name": "value3", - "nativeSrc": "11964:6:43", - "nodeType": "YulIdentifier", - "src": "11964:6:43" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_uint32t_uint16t_bytes_calldata_ptr", - "nativeSrc": "11435:553:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "11498:9:43", - "nodeType": "YulTypedName", - "src": "11498:9:43", - "type": "" - }, - { - "name": "dataEnd", - "nativeSrc": "11509:7:43", - "nodeType": "YulTypedName", - "src": "11509:7:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nativeSrc": "11521:6:43", - "nodeType": "YulTypedName", - "src": "11521:6:43", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "11529:6:43", - "nodeType": "YulTypedName", - "src": "11529:6:43", - "type": "" - }, - { - "name": "value2", - "nativeSrc": "11537:6:43", - "nodeType": "YulTypedName", - "src": "11537:6:43", - "type": "" - }, - { - "name": "value3", - "nativeSrc": "11545:6:43", - "nodeType": "YulTypedName", - "src": "11545:6:43", - "type": "" - } - ], - "src": "11435:553:43" - }, - { - "body": { - "nativeSrc": "12131:360:43", - "nodeType": "YulBlock", - "src": "12131:360:43", - "statements": [ - { - "body": { - "nativeSrc": "12177:16:43", - "nodeType": "YulBlock", - "src": "12177:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "12186:1:43", - "nodeType": "YulLiteral", - "src": "12186:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "12189:1:43", - "nodeType": "YulLiteral", - "src": "12189:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "12179:6:43", - "nodeType": "YulIdentifier", - "src": "12179:6:43" - }, - "nativeSrc": "12179:12:43", - "nodeType": "YulFunctionCall", - "src": "12179:12:43" - }, - "nativeSrc": "12179:12:43", - "nodeType": "YulExpressionStatement", - "src": "12179:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nativeSrc": "12152:7:43", - "nodeType": "YulIdentifier", - "src": "12152:7:43" - }, - { - "name": "headStart", - "nativeSrc": "12161:9:43", - "nodeType": "YulIdentifier", - "src": "12161:9:43" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "12148:3:43", - "nodeType": "YulIdentifier", - "src": "12148:3:43" - }, - "nativeSrc": "12148:23:43", - "nodeType": "YulFunctionCall", - "src": "12148:23:43" - }, - { - "kind": "number", - "nativeSrc": "12173:2:43", - "nodeType": "YulLiteral", - "src": "12173:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "12144:3:43", - "nodeType": "YulIdentifier", - "src": "12144:3:43" - }, - "nativeSrc": "12144:32:43", - "nodeType": "YulFunctionCall", - "src": "12144:32:43" - }, - "nativeSrc": "12141:52:43", - "nodeType": "YulIf", - "src": "12141:52:43" - }, - { - "nativeSrc": "12202:37:43", - "nodeType": "YulVariableDeclaration", - "src": "12202:37:43", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "12229:9:43", - "nodeType": "YulIdentifier", - "src": "12229:9:43" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "12216:12:43", - "nodeType": "YulIdentifier", - "src": "12216:12:43" - }, - "nativeSrc": "12216:23:43", - "nodeType": "YulFunctionCall", - "src": "12216:23:43" - }, - "variables": [ - { - "name": "offset", - "nativeSrc": "12206:6:43", - "nodeType": "YulTypedName", - "src": "12206:6:43", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "12282:16:43", - "nodeType": "YulBlock", - "src": "12282:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "12291:1:43", - "nodeType": "YulLiteral", - "src": "12291:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "12294:1:43", - "nodeType": "YulLiteral", - "src": "12294:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "12284:6:43", - "nodeType": "YulIdentifier", - "src": "12284:6:43" - }, - "nativeSrc": "12284:12:43", - "nodeType": "YulFunctionCall", - "src": "12284:12:43" - }, - "nativeSrc": "12284:12:43", - "nodeType": "YulExpressionStatement", - "src": "12284:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "offset", - "nativeSrc": "12254:6:43", - "nodeType": "YulIdentifier", - "src": "12254:6:43" - }, - { - "kind": "number", - "nativeSrc": "12262:18:43", - "nodeType": "YulLiteral", - "src": "12262:18:43", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "12251:2:43", - "nodeType": "YulIdentifier", - "src": "12251:2:43" - }, - "nativeSrc": "12251:30:43", - "nodeType": "YulFunctionCall", - "src": "12251:30:43" - }, - "nativeSrc": "12248:50:43", - "nodeType": "YulIf", - "src": "12248:50:43" - }, - { - "nativeSrc": "12307:124:43", - "nodeType": "YulVariableDeclaration", - "src": "12307:124:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "12403:9:43", - "nodeType": "YulIdentifier", - "src": "12403:9:43" - }, - { - "name": "offset", - "nativeSrc": "12414:6:43", - "nodeType": "YulIdentifier", - "src": "12414:6:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "12399:3:43", - "nodeType": "YulIdentifier", - "src": "12399:3:43" - }, - "nativeSrc": "12399:22:43", - "nodeType": "YulFunctionCall", - "src": "12399:22:43" - }, - { - "name": "dataEnd", - "nativeSrc": "12423:7:43", - "nodeType": "YulIdentifier", - "src": "12423:7:43" - } - ], - "functionName": { - "name": "abi_decode_array_struct_EnforcedOptionParam_calldata_dyn_calldata", - "nativeSrc": "12333:65:43", - "nodeType": "YulIdentifier", - "src": "12333:65:43" - }, - "nativeSrc": "12333:98:43", - "nodeType": "YulFunctionCall", - "src": "12333:98:43" - }, - "variables": [ - { - "name": "value0_1", - "nativeSrc": "12311:8:43", - "nodeType": "YulTypedName", - "src": "12311:8:43", - "type": "" - }, - { - "name": "value1_1", - "nativeSrc": "12321:8:43", - "nodeType": "YulTypedName", - "src": "12321:8:43", - "type": "" - } - ] - }, - { - "nativeSrc": "12440:18:43", - "nodeType": "YulAssignment", - "src": "12440:18:43", - "value": { - "name": "value0_1", - "nativeSrc": "12450:8:43", - "nodeType": "YulIdentifier", - "src": "12450:8:43" - }, - "variableNames": [ - { - "name": "value0", - "nativeSrc": "12440:6:43", - "nodeType": "YulIdentifier", - "src": "12440:6:43" - } - ] - }, - { - "nativeSrc": "12467:18:43", - "nodeType": "YulAssignment", - "src": "12467:18:43", - "value": { - "name": "value1_1", - "nativeSrc": "12477:8:43", - "nodeType": "YulIdentifier", - "src": "12477:8:43" - }, - "variableNames": [ - { - "name": "value1", - "nativeSrc": "12467:6:43", - "nodeType": "YulIdentifier", - "src": "12467:6:43" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_array$_t_struct$_InboundPacket_$2486_calldata_ptr_$dyn_calldata_ptr", - "nativeSrc": "11993:498:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "12089:9:43", - "nodeType": "YulTypedName", - "src": "12089:9:43", - "type": "" - }, - { - "name": "dataEnd", - "nativeSrc": "12100:7:43", - "nodeType": "YulTypedName", - "src": "12100:7:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nativeSrc": "12112:6:43", - "nodeType": "YulTypedName", - "src": "12112:6:43", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "12120:6:43", - "nodeType": "YulTypedName", - "src": "12120:6:43", - "type": "" - } - ], - "src": "11993:498:43" - }, - { - "body": { - "nativeSrc": "12659:492:43", - "nodeType": "YulBlock", - "src": "12659:492:43", - "statements": [ - { - "nativeSrc": "12669:33:43", - "nodeType": "YulVariableDeclaration", - "src": "12669:33:43", - "value": { - "arguments": [ - { - "name": "dataEnd", - "nativeSrc": "12683:7:43", - "nodeType": "YulIdentifier", - "src": "12683:7:43" - }, - { - "name": "headStart", - "nativeSrc": "12692:9:43", - "nodeType": "YulIdentifier", - "src": "12692:9:43" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "12679:3:43", - "nodeType": "YulIdentifier", - "src": "12679:3:43" - }, - "nativeSrc": "12679:23:43", - "nodeType": "YulFunctionCall", - "src": "12679:23:43" - }, - "variables": [ - { - "name": "_1", - "nativeSrc": "12673:2:43", - "nodeType": "YulTypedName", - "src": "12673:2:43", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "12727:16:43", - "nodeType": "YulBlock", - "src": "12727:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "12736:1:43", - "nodeType": "YulLiteral", - "src": "12736:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "12739:1:43", - "nodeType": "YulLiteral", - "src": "12739:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "12729:6:43", - "nodeType": "YulIdentifier", - "src": "12729:6:43" - }, - "nativeSrc": "12729:12:43", - "nodeType": "YulFunctionCall", - "src": "12729:12:43" - }, - "nativeSrc": "12729:12:43", - "nodeType": "YulExpressionStatement", - "src": "12729:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "_1", - "nativeSrc": "12718:2:43", - "nodeType": "YulIdentifier", - "src": "12718:2:43" - }, - { - "kind": "number", - "nativeSrc": "12722:3:43", - "nodeType": "YulLiteral", - "src": "12722:3:43", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "12714:3:43", - "nodeType": "YulIdentifier", - "src": "12714:3:43" - }, - "nativeSrc": "12714:12:43", - "nodeType": "YulFunctionCall", - "src": "12714:12:43" - }, - "nativeSrc": "12711:32:43", - "nodeType": "YulIf", - "src": "12711:32:43" - }, - { - "nativeSrc": "12752:37:43", - "nodeType": "YulVariableDeclaration", - "src": "12752:37:43", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "12779:9:43", - "nodeType": "YulIdentifier", - "src": "12779:9:43" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "12766:12:43", - "nodeType": "YulIdentifier", - "src": "12766:12:43" - }, - "nativeSrc": "12766:23:43", - "nodeType": "YulFunctionCall", - "src": "12766:23:43" - }, - "variables": [ - { - "name": "offset", - "nativeSrc": "12756:6:43", - "nodeType": "YulTypedName", - "src": "12756:6:43", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "12832:16:43", - "nodeType": "YulBlock", - "src": "12832:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "12841:1:43", - "nodeType": "YulLiteral", - "src": "12841:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "12844:1:43", - "nodeType": "YulLiteral", - "src": "12844:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "12834:6:43", - "nodeType": "YulIdentifier", - "src": "12834:6:43" - }, - "nativeSrc": "12834:12:43", - "nodeType": "YulFunctionCall", - "src": "12834:12:43" - }, - "nativeSrc": "12834:12:43", - "nodeType": "YulExpressionStatement", - "src": "12834:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "offset", - "nativeSrc": "12804:6:43", - "nodeType": "YulIdentifier", - "src": "12804:6:43" - }, - { - "kind": "number", - "nativeSrc": "12812:18:43", - "nodeType": "YulLiteral", - "src": "12812:18:43", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "12801:2:43", - "nodeType": "YulIdentifier", - "src": "12801:2:43" - }, - "nativeSrc": "12801:30:43", - "nodeType": "YulFunctionCall", - "src": "12801:30:43" - }, - "nativeSrc": "12798:50:43", - "nodeType": "YulIf", - "src": "12798:50:43" - }, - { - "nativeSrc": "12857:79:43", - "nodeType": "YulAssignment", - "src": "12857:79:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "12908:9:43", - "nodeType": "YulIdentifier", - "src": "12908:9:43" - }, - { - "name": "offset", - "nativeSrc": "12919:6:43", - "nodeType": "YulIdentifier", - "src": "12919:6:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "12904:3:43", - "nodeType": "YulIdentifier", - "src": "12904:3:43" - }, - "nativeSrc": "12904:22:43", - "nodeType": "YulFunctionCall", - "src": "12904:22:43" - }, - { - "name": "dataEnd", - "nativeSrc": "12928:7:43", - "nodeType": "YulIdentifier", - "src": "12928:7:43" - } - ], - "functionName": { - "name": "abi_decode_struct_SendParam_calldata", - "nativeSrc": "12867:36:43", - "nodeType": "YulIdentifier", - "src": "12867:36:43" - }, - "nativeSrc": "12867:69:43", - "nodeType": "YulFunctionCall", - "src": "12867:69:43" - }, - "variableNames": [ - { - "name": "value0", - "nativeSrc": "12857:6:43", - "nodeType": "YulIdentifier", - "src": "12857:6:43" - } - ] - }, - { - "body": { - "nativeSrc": "12974:16:43", - "nodeType": "YulBlock", - "src": "12974:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "12983:1:43", - "nodeType": "YulLiteral", - "src": "12983:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "12986:1:43", - "nodeType": "YulLiteral", - "src": "12986:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "12976:6:43", - "nodeType": "YulIdentifier", - "src": "12976:6:43" - }, - "nativeSrc": "12976:12:43", - "nodeType": "YulFunctionCall", - "src": "12976:12:43" - }, - "nativeSrc": "12976:12:43", - "nodeType": "YulExpressionStatement", - "src": "12976:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "_1", - "nativeSrc": "12956:2:43", - "nodeType": "YulIdentifier", - "src": "12956:2:43" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "12964:2:43", - "nodeType": "YulLiteral", - "src": "12964:2:43", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "not", - "nativeSrc": "12960:3:43", - "nodeType": "YulIdentifier", - "src": "12960:3:43" - }, - "nativeSrc": "12960:7:43", - "nodeType": "YulFunctionCall", - "src": "12960:7:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "12952:3:43", - "nodeType": "YulIdentifier", - "src": "12952:3:43" - }, - "nativeSrc": "12952:16:43", - "nodeType": "YulFunctionCall", - "src": "12952:16:43" - }, - { - "kind": "number", - "nativeSrc": "12970:2:43", - "nodeType": "YulLiteral", - "src": "12970:2:43", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "12948:3:43", - "nodeType": "YulIdentifier", - "src": "12948:3:43" - }, - "nativeSrc": "12948:25:43", - "nodeType": "YulFunctionCall", - "src": "12948:25:43" - }, - "nativeSrc": "12945:45:43", - "nodeType": "YulIf", - "src": "12945:45:43" - }, - { - "nativeSrc": "12999:28:43", - "nodeType": "YulAssignment", - "src": "12999:28:43", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "13013:9:43", - "nodeType": "YulIdentifier", - "src": "13013:9:43" - }, - { - "kind": "number", - "nativeSrc": "13024:2:43", - "nodeType": "YulLiteral", - "src": "13024:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "13009:3:43", - "nodeType": "YulIdentifier", - "src": "13009:3:43" - }, - "nativeSrc": "13009:18:43", - "nodeType": "YulFunctionCall", - "src": "13009:18:43" - }, - "variableNames": [ - { - "name": "value1", - "nativeSrc": "12999:6:43", - "nodeType": "YulIdentifier", - "src": "12999:6:43" - } - ] - }, - { - "nativeSrc": "13036:45:43", - "nodeType": "YulVariableDeclaration", - "src": "13036:45:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "13066:9:43", - "nodeType": "YulIdentifier", - "src": "13066:9:43" - }, - { - "kind": "number", - "nativeSrc": "13077:2:43", - "nodeType": "YulLiteral", - "src": "13077:2:43", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "13062:3:43", - "nodeType": "YulIdentifier", - "src": "13062:3:43" - }, - "nativeSrc": "13062:18:43", - "nodeType": "YulFunctionCall", - "src": "13062:18:43" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "13049:12:43", - "nodeType": "YulIdentifier", - "src": "13049:12:43" - }, - "nativeSrc": "13049:32:43", - "nodeType": "YulFunctionCall", - "src": "13049:32:43" - }, - "variables": [ - { - "name": "value", - "nativeSrc": "13040:5:43", - "nodeType": "YulTypedName", - "src": "13040:5:43", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nativeSrc": "13115:5:43", - "nodeType": "YulIdentifier", - "src": "13115:5:43" - } - ], - "functionName": { - "name": "validator_revert_address", - "nativeSrc": "13090:24:43", - "nodeType": "YulIdentifier", - "src": "13090:24:43" - }, - "nativeSrc": "13090:31:43", - "nodeType": "YulFunctionCall", - "src": "13090:31:43" - }, - "nativeSrc": "13090:31:43", - "nodeType": "YulExpressionStatement", - "src": "13090:31:43" - }, - { - "nativeSrc": "13130:15:43", - "nodeType": "YulAssignment", - "src": "13130:15:43", - "value": { - "name": "value", - "nativeSrc": "13140:5:43", - "nodeType": "YulIdentifier", - "src": "13140:5:43" - }, - "variableNames": [ - { - "name": "value2", - "nativeSrc": "13130:6:43", - "nodeType": "YulIdentifier", - "src": "13130:6:43" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_struct$_SendParam_$3382_calldata_ptrt_struct$_MessagingFee_$33_calldata_ptrt_address", - "nativeSrc": "12496:655:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "12609:9:43", - "nodeType": "YulTypedName", - "src": "12609:9:43", - "type": "" - }, - { - "name": "dataEnd", - "nativeSrc": "12620:7:43", - "nodeType": "YulTypedName", - "src": "12620:7:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nativeSrc": "12632:6:43", - "nodeType": "YulTypedName", - "src": "12632:6:43", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "12640:6:43", - "nodeType": "YulTypedName", - "src": "12640:6:43", - "type": "" - }, - { - "name": "value2", - "nativeSrc": "12648:6:43", - "nodeType": "YulTypedName", - "src": "12648:6:43", - "type": "" - } - ], - "src": "12496:655:43" - }, - { - "body": { - "nativeSrc": "13405:360:43", - "nodeType": "YulBlock", - "src": "13405:360:43", - "statements": [ - { - "nativeSrc": "13415:27:43", - "nodeType": "YulAssignment", - "src": "13415:27:43", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "13427:9:43", - "nodeType": "YulIdentifier", - "src": "13427:9:43" - }, - { - "kind": "number", - "nativeSrc": "13438:3:43", - "nodeType": "YulLiteral", - "src": "13438:3:43", - "type": "", - "value": "192" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "13423:3:43", - "nodeType": "YulIdentifier", - "src": "13423:3:43" - }, - "nativeSrc": "13423:19:43", - "nodeType": "YulFunctionCall", - "src": "13423:19:43" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "13415:4:43", - "nodeType": "YulIdentifier", - "src": "13415:4:43" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "13458:9:43", - "nodeType": "YulIdentifier", - "src": "13458:9:43" - }, - { - "arguments": [ - { - "name": "value0", - "nativeSrc": "13475:6:43", - "nodeType": "YulIdentifier", - "src": "13475:6:43" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "13469:5:43", - "nodeType": "YulIdentifier", - "src": "13469:5:43" - }, - "nativeSrc": "13469:13:43", - "nodeType": "YulFunctionCall", - "src": "13469:13:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "13451:6:43", - "nodeType": "YulIdentifier", - "src": "13451:6:43" - }, - "nativeSrc": "13451:32:43", - "nodeType": "YulFunctionCall", - "src": "13451:32:43" - }, - "nativeSrc": "13451:32:43", - "nodeType": "YulExpressionStatement", - "src": "13451:32:43" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "13503:9:43", - "nodeType": "YulIdentifier", - "src": "13503:9:43" - }, - { - "kind": "number", - "nativeSrc": "13514:4:43", - "nodeType": "YulLiteral", - "src": "13514:4:43", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "13499:3:43", - "nodeType": "YulIdentifier", - "src": "13499:3:43" - }, - "nativeSrc": "13499:20:43", - "nodeType": "YulFunctionCall", - "src": "13499:20:43" - }, - { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nativeSrc": "13535:6:43", - "nodeType": "YulIdentifier", - "src": "13535:6:43" - }, - { - "kind": "number", - "nativeSrc": "13543:4:43", - "nodeType": "YulLiteral", - "src": "13543:4:43", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "13531:3:43", - "nodeType": "YulIdentifier", - "src": "13531:3:43" - }, - "nativeSrc": "13531:17:43", - "nodeType": "YulFunctionCall", - "src": "13531:17:43" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "13525:5:43", - "nodeType": "YulIdentifier", - "src": "13525:5:43" - }, - "nativeSrc": "13525:24:43", - "nodeType": "YulFunctionCall", - "src": "13525:24:43" - }, - { - "kind": "number", - "nativeSrc": "13551:18:43", - "nodeType": "YulLiteral", - "src": "13551:18:43", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "13521:3:43", - "nodeType": "YulIdentifier", - "src": "13521:3:43" - }, - "nativeSrc": "13521:49:43", - "nodeType": "YulFunctionCall", - "src": "13521:49:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "13492:6:43", - "nodeType": "YulIdentifier", - "src": "13492:6:43" - }, - "nativeSrc": "13492:79:43", - "nodeType": "YulFunctionCall", - "src": "13492:79:43" - }, - "nativeSrc": "13492:79:43", - "nodeType": "YulExpressionStatement", - "src": "13492:79:43" - }, - { - "nativeSrc": "13580:44:43", - "nodeType": "YulVariableDeclaration", - "src": "13580:44:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nativeSrc": "13610:6:43", - "nodeType": "YulIdentifier", - "src": "13610:6:43" - }, - { - "kind": "number", - "nativeSrc": "13618:4:43", - "nodeType": "YulLiteral", - "src": "13618:4:43", - "type": "", - "value": "0x40" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "13606:3:43", - "nodeType": "YulIdentifier", - "src": "13606:3:43" - }, - "nativeSrc": "13606:17:43", - "nodeType": "YulFunctionCall", - "src": "13606:17:43" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "13600:5:43", - "nodeType": "YulIdentifier", - "src": "13600:5:43" - }, - "nativeSrc": "13600:24:43", - "nodeType": "YulFunctionCall", - "src": "13600:24:43" - }, - "variables": [ - { - "name": "memberValue0", - "nativeSrc": "13584:12:43", - "nodeType": "YulTypedName", - "src": "13584:12:43", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "memberValue0", - "nativeSrc": "13660:12:43", - "nodeType": "YulIdentifier", - "src": "13660:12:43" - }, - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "13678:9:43", - "nodeType": "YulIdentifier", - "src": "13678:9:43" - }, - { - "kind": "number", - "nativeSrc": "13689:4:43", - "nodeType": "YulLiteral", - "src": "13689:4:43", - "type": "", - "value": "0x40" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "13674:3:43", - "nodeType": "YulIdentifier", - "src": "13674:3:43" - }, - "nativeSrc": "13674:20:43", - "nodeType": "YulFunctionCall", - "src": "13674:20:43" - } - ], - "functionName": { - "name": "abi_encode_struct_OFTLimit", - "nativeSrc": "13633:26:43", - "nodeType": "YulIdentifier", - "src": "13633:26:43" - }, - "nativeSrc": "13633:62:43", - "nodeType": "YulFunctionCall", - "src": "13633:62:43" - }, - "nativeSrc": "13633:62:43", - "nodeType": "YulExpressionStatement", - "src": "13633:62:43" - }, - { - "expression": { - "arguments": [ - { - "name": "value1", - "nativeSrc": "13731:6:43", - "nodeType": "YulIdentifier", - "src": "13731:6:43" - }, - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "13743:9:43", - "nodeType": "YulIdentifier", - "src": "13743:9:43" - }, - { - "kind": "number", - "nativeSrc": "13754:3:43", - "nodeType": "YulLiteral", - "src": "13754:3:43", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "13739:3:43", - "nodeType": "YulIdentifier", - "src": "13739:3:43" - }, - "nativeSrc": "13739:19:43", - "nodeType": "YulFunctionCall", - "src": "13739:19:43" - } - ], - "functionName": { - "name": "abi_encode_struct_OFTLimit", - "nativeSrc": "13704:26:43", - "nodeType": "YulIdentifier", - "src": "13704:26:43" - }, - "nativeSrc": "13704:55:43", - "nodeType": "YulFunctionCall", - "src": "13704:55:43" - }, - "nativeSrc": "13704:55:43", - "nodeType": "YulExpressionStatement", - "src": "13704:55:43" - } - ] - }, - "name": "abi_encode_tuple_t_struct$_MessagingReceipt_$28_memory_ptr_t_struct$_OFTReceipt_$3394_memory_ptr__to_t_struct$_MessagingReceipt_$28_memory_ptr_t_struct$_OFTReceipt_$3394_memory_ptr__fromStack_reversed", - "nativeSrc": "13156:609:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "13366:9:43", - "nodeType": "YulTypedName", - "src": "13366:9:43", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "13377:6:43", - "nodeType": "YulTypedName", - "src": "13377:6:43", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "13385:6:43", - "nodeType": "YulTypedName", - "src": "13385:6:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "13396:4:43", - "nodeType": "YulTypedName", - "src": "13396:4:43", - "type": "" - } - ], - "src": "13156:609:43" - }, - { - "body": { - "nativeSrc": "13857:301:43", - "nodeType": "YulBlock", - "src": "13857:301:43", - "statements": [ - { - "body": { - "nativeSrc": "13903:16:43", - "nodeType": "YulBlock", - "src": "13903:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "13912:1:43", - "nodeType": "YulLiteral", - "src": "13912:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "13915:1:43", - "nodeType": "YulLiteral", - "src": "13915:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "13905:6:43", - "nodeType": "YulIdentifier", - "src": "13905:6:43" - }, - "nativeSrc": "13905:12:43", - "nodeType": "YulFunctionCall", - "src": "13905:12:43" - }, - "nativeSrc": "13905:12:43", - "nodeType": "YulExpressionStatement", - "src": "13905:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nativeSrc": "13878:7:43", - "nodeType": "YulIdentifier", - "src": "13878:7:43" - }, - { - "name": "headStart", - "nativeSrc": "13887:9:43", - "nodeType": "YulIdentifier", - "src": "13887:9:43" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "13874:3:43", - "nodeType": "YulIdentifier", - "src": "13874:3:43" - }, - "nativeSrc": "13874:23:43", - "nodeType": "YulFunctionCall", - "src": "13874:23:43" - }, - { - "kind": "number", - "nativeSrc": "13899:2:43", - "nodeType": "YulLiteral", - "src": "13899:2:43", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "13870:3:43", - "nodeType": "YulIdentifier", - "src": "13870:3:43" - }, - "nativeSrc": "13870:32:43", - "nodeType": "YulFunctionCall", - "src": "13870:32:43" - }, - "nativeSrc": "13867:52:43", - "nodeType": "YulIf", - "src": "13867:52:43" - }, - { - "nativeSrc": "13928:36:43", - "nodeType": "YulVariableDeclaration", - "src": "13928:36:43", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "13954:9:43", - "nodeType": "YulIdentifier", - "src": "13954:9:43" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "13941:12:43", - "nodeType": "YulIdentifier", - "src": "13941:12:43" - }, - "nativeSrc": "13941:23:43", - "nodeType": "YulFunctionCall", - "src": "13941:23:43" - }, - "variables": [ - { - "name": "value", - "nativeSrc": "13932:5:43", - "nodeType": "YulTypedName", - "src": "13932:5:43", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nativeSrc": "13998:5:43", - "nodeType": "YulIdentifier", - "src": "13998:5:43" - } - ], - "functionName": { - "name": "validator_revert_address", - "nativeSrc": "13973:24:43", - "nodeType": "YulIdentifier", - "src": "13973:24:43" - }, - "nativeSrc": "13973:31:43", - "nodeType": "YulFunctionCall", - "src": "13973:31:43" - }, - "nativeSrc": "13973:31:43", - "nodeType": "YulExpressionStatement", - "src": "13973:31:43" - }, - { - "nativeSrc": "14013:15:43", - "nodeType": "YulAssignment", - "src": "14013:15:43", - "value": { - "name": "value", - "nativeSrc": "14023:5:43", - "nodeType": "YulIdentifier", - "src": "14023:5:43" - }, - "variableNames": [ - { - "name": "value0", - "nativeSrc": "14013:6:43", - "nodeType": "YulIdentifier", - "src": "14013:6:43" - } - ] - }, - { - "nativeSrc": "14037:47:43", - "nodeType": "YulVariableDeclaration", - "src": "14037:47:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "14069:9:43", - "nodeType": "YulIdentifier", - "src": "14069:9:43" - }, - { - "kind": "number", - "nativeSrc": "14080:2:43", - "nodeType": "YulLiteral", - "src": "14080:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "14065:3:43", - "nodeType": "YulIdentifier", - "src": "14065:3:43" - }, - "nativeSrc": "14065:18:43", - "nodeType": "YulFunctionCall", - "src": "14065:18:43" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "14052:12:43", - "nodeType": "YulIdentifier", - "src": "14052:12:43" - }, - "nativeSrc": "14052:32:43", - "nodeType": "YulFunctionCall", - "src": "14052:32:43" - }, - "variables": [ - { - "name": "value_1", - "nativeSrc": "14041:7:43", - "nodeType": "YulTypedName", - "src": "14041:7:43", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value_1", - "nativeSrc": "14118:7:43", - "nodeType": "YulIdentifier", - "src": "14118:7:43" - } - ], - "functionName": { - "name": "validator_revert_address", - "nativeSrc": "14093:24:43", - "nodeType": "YulIdentifier", - "src": "14093:24:43" - }, - "nativeSrc": "14093:33:43", - "nodeType": "YulFunctionCall", - "src": "14093:33:43" - }, - "nativeSrc": "14093:33:43", - "nodeType": "YulExpressionStatement", - "src": "14093:33:43" - }, - { - "nativeSrc": "14135:17:43", - "nodeType": "YulAssignment", - "src": "14135:17:43", - "value": { - "name": "value_1", - "nativeSrc": "14145:7:43", - "nodeType": "YulIdentifier", - "src": "14145:7:43" - }, - "variableNames": [ - { - "name": "value1", - "nativeSrc": "14135:6:43", - "nodeType": "YulIdentifier", - "src": "14135:6:43" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_addresst_address", - "nativeSrc": "13770:388:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "13815:9:43", - "nodeType": "YulTypedName", - "src": "13815:9:43", - "type": "" - }, - { - "name": "dataEnd", - "nativeSrc": "13826:7:43", - "nodeType": "YulTypedName", - "src": "13826:7:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nativeSrc": "13838:6:43", - "nodeType": "YulTypedName", - "src": "13838:6:43", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "13846:6:43", - "nodeType": "YulTypedName", - "src": "13846:6:43", - "type": "" - } - ], - "src": "13770:388:43" - }, - { - "body": { - "nativeSrc": "14257:140:43", - "nodeType": "YulBlock", - "src": "14257:140:43", - "statements": [ - { - "body": { - "nativeSrc": "14303:16:43", - "nodeType": "YulBlock", - "src": "14303:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "14312:1:43", - "nodeType": "YulLiteral", - "src": "14312:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "14315:1:43", - "nodeType": "YulLiteral", - "src": "14315:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "14305:6:43", - "nodeType": "YulIdentifier", - "src": "14305:6:43" - }, - "nativeSrc": "14305:12:43", - "nodeType": "YulFunctionCall", - "src": "14305:12:43" - }, - "nativeSrc": "14305:12:43", - "nodeType": "YulExpressionStatement", - "src": "14305:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nativeSrc": "14278:7:43", - "nodeType": "YulIdentifier", - "src": "14278:7:43" - }, - { - "name": "headStart", - "nativeSrc": "14287:9:43", - "nodeType": "YulIdentifier", - "src": "14287:9:43" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "14274:3:43", - "nodeType": "YulIdentifier", - "src": "14274:3:43" - }, - "nativeSrc": "14274:23:43", - "nodeType": "YulFunctionCall", - "src": "14274:23:43" - }, - { - "kind": "number", - "nativeSrc": "14299:2:43", - "nodeType": "YulLiteral", - "src": "14299:2:43", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "14270:3:43", - "nodeType": "YulIdentifier", - "src": "14270:3:43" - }, - "nativeSrc": "14270:32:43", - "nodeType": "YulFunctionCall", - "src": "14270:32:43" - }, - "nativeSrc": "14267:52:43", - "nodeType": "YulIf", - "src": "14267:52:43" - }, - { - "nativeSrc": "14328:63:43", - "nodeType": "YulAssignment", - "src": "14328:63:43", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "14372:9:43", - "nodeType": "YulIdentifier", - "src": "14372:9:43" - }, - { - "name": "dataEnd", - "nativeSrc": "14383:7:43", - "nodeType": "YulIdentifier", - "src": "14383:7:43" - } - ], - "functionName": { - "name": "abi_decode_struct_Origin_calldata", - "nativeSrc": "14338:33:43", - "nodeType": "YulIdentifier", - "src": "14338:33:43" - }, - "nativeSrc": "14338:53:43", - "nodeType": "YulFunctionCall", - "src": "14338:53:43" - }, - "variableNames": [ - { - "name": "value0", - "nativeSrc": "14328:6:43", - "nodeType": "YulIdentifier", - "src": "14328:6:43" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_struct$_Origin_$40_calldata_ptr", - "nativeSrc": "14163:234:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "14223:9:43", - "nodeType": "YulTypedName", - "src": "14223:9:43", - "type": "" - }, - { - "name": "dataEnd", - "nativeSrc": "14234:7:43", - "nodeType": "YulTypedName", - "src": "14234:7:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nativeSrc": "14246:6:43", - "nodeType": "YulTypedName", - "src": "14246:6:43", - "type": "" - } - ], - "src": "14163:234:43" - }, - { - "body": { - "nativeSrc": "14457:325:43", - "nodeType": "YulBlock", - "src": "14457:325:43", - "statements": [ - { - "nativeSrc": "14467:22:43", - "nodeType": "YulAssignment", - "src": "14467:22:43", - "value": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "14481:1:43", - "nodeType": "YulLiteral", - "src": "14481:1:43", - "type": "", - "value": "1" - }, - { - "name": "data", - "nativeSrc": "14484:4:43", - "nodeType": "YulIdentifier", - "src": "14484:4:43" - } - ], - "functionName": { - "name": "shr", - "nativeSrc": "14477:3:43", - "nodeType": "YulIdentifier", - "src": "14477:3:43" - }, - "nativeSrc": "14477:12:43", - "nodeType": "YulFunctionCall", - "src": "14477:12:43" - }, - "variableNames": [ - { - "name": "length", - "nativeSrc": "14467:6:43", - "nodeType": "YulIdentifier", - "src": "14467:6:43" - } - ] - }, - { - "nativeSrc": "14498:38:43", - "nodeType": "YulVariableDeclaration", - "src": "14498:38:43", - "value": { - "arguments": [ - { - "name": "data", - "nativeSrc": "14528:4:43", - "nodeType": "YulIdentifier", - "src": "14528:4:43" - }, - { - "kind": "number", - "nativeSrc": "14534:1:43", - "nodeType": "YulLiteral", - "src": "14534:1:43", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "14524:3:43", - "nodeType": "YulIdentifier", - "src": "14524:3:43" - }, - "nativeSrc": "14524:12:43", - "nodeType": "YulFunctionCall", - "src": "14524:12:43" - }, - "variables": [ - { - "name": "outOfPlaceEncoding", - "nativeSrc": "14502:18:43", - "nodeType": "YulTypedName", - "src": "14502:18:43", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "14575:31:43", - "nodeType": "YulBlock", - "src": "14575:31:43", - "statements": [ - { - "nativeSrc": "14577:27:43", - "nodeType": "YulAssignment", - "src": "14577:27:43", - "value": { - "arguments": [ - { - "name": "length", - "nativeSrc": "14591:6:43", - "nodeType": "YulIdentifier", - "src": "14591:6:43" - }, - { - "kind": "number", - "nativeSrc": "14599:4:43", - "nodeType": "YulLiteral", - "src": "14599:4:43", - "type": "", - "value": "0x7f" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "14587:3:43", - "nodeType": "YulIdentifier", - "src": "14587:3:43" - }, - "nativeSrc": "14587:17:43", - "nodeType": "YulFunctionCall", - "src": "14587:17:43" - }, - "variableNames": [ - { - "name": "length", - "nativeSrc": "14577:6:43", - "nodeType": "YulIdentifier", - "src": "14577:6:43" - } - ] - } - ] - }, - "condition": { - "arguments": [ - { - "name": "outOfPlaceEncoding", - "nativeSrc": "14555:18:43", - "nodeType": "YulIdentifier", - "src": "14555:18:43" - } - ], - "functionName": { - "name": "iszero", - "nativeSrc": "14548:6:43", - "nodeType": "YulIdentifier", - "src": "14548:6:43" - }, - "nativeSrc": "14548:26:43", - "nodeType": "YulFunctionCall", - "src": "14548:26:43" - }, - "nativeSrc": "14545:61:43", - "nodeType": "YulIf", - "src": "14545:61:43" - }, - { - "body": { - "nativeSrc": "14665:111:43", - "nodeType": "YulBlock", - "src": "14665:111:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "14686:1:43", - "nodeType": "YulLiteral", - "src": "14686:1:43", - "type": "", - "value": "0" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "14693:3:43", - "nodeType": "YulLiteral", - "src": "14693:3:43", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nativeSrc": "14698:10:43", - "nodeType": "YulLiteral", - "src": "14698:10:43", - "type": "", - "value": "0x4e487b71" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "14689:3:43", - "nodeType": "YulIdentifier", - "src": "14689:3:43" - }, - "nativeSrc": "14689:20:43", - "nodeType": "YulFunctionCall", - "src": "14689:20:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "14679:6:43", - "nodeType": "YulIdentifier", - "src": "14679:6:43" - }, - "nativeSrc": "14679:31:43", - "nodeType": "YulFunctionCall", - "src": "14679:31:43" - }, - "nativeSrc": "14679:31:43", - "nodeType": "YulExpressionStatement", - "src": "14679:31:43" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "14730:1:43", - "nodeType": "YulLiteral", - "src": "14730:1:43", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nativeSrc": "14733:4:43", - "nodeType": "YulLiteral", - "src": "14733:4:43", - "type": "", - "value": "0x22" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "14723:6:43", - "nodeType": "YulIdentifier", - "src": "14723:6:43" - }, - "nativeSrc": "14723:15:43", - "nodeType": "YulFunctionCall", - "src": "14723:15:43" - }, - "nativeSrc": "14723:15:43", - "nodeType": "YulExpressionStatement", - "src": "14723:15:43" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "14758:1:43", - "nodeType": "YulLiteral", - "src": "14758:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "14761:4:43", - "nodeType": "YulLiteral", - "src": "14761:4:43", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "14751:6:43", - "nodeType": "YulIdentifier", - "src": "14751:6:43" - }, - "nativeSrc": "14751:15:43", - "nodeType": "YulFunctionCall", - "src": "14751:15:43" - }, - "nativeSrc": "14751:15:43", - "nodeType": "YulExpressionStatement", - "src": "14751:15:43" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "outOfPlaceEncoding", - "nativeSrc": "14621:18:43", - "nodeType": "YulIdentifier", - "src": "14621:18:43" - }, - { - "arguments": [ - { - "name": "length", - "nativeSrc": "14644:6:43", - "nodeType": "YulIdentifier", - "src": "14644:6:43" - }, - { - "kind": "number", - "nativeSrc": "14652:2:43", - "nodeType": "YulLiteral", - "src": "14652:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "lt", - "nativeSrc": "14641:2:43", - "nodeType": "YulIdentifier", - "src": "14641:2:43" - }, - "nativeSrc": "14641:14:43", - "nodeType": "YulFunctionCall", - "src": "14641:14:43" - } - ], - "functionName": { - "name": "eq", - "nativeSrc": "14618:2:43", - "nodeType": "YulIdentifier", - "src": "14618:2:43" - }, - "nativeSrc": "14618:38:43", - "nodeType": "YulFunctionCall", - "src": "14618:38:43" - }, - "nativeSrc": "14615:161:43", - "nodeType": "YulIf", - "src": "14615:161:43" - } - ] - }, - "name": "extract_byte_array_length", - "nativeSrc": "14402:380:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "data", - "nativeSrc": "14437:4:43", - "nodeType": "YulTypedName", - "src": "14437:4:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "length", - "nativeSrc": "14446:6:43", - "nodeType": "YulTypedName", - "src": "14446:6:43", - "type": "" - } - ], - "src": "14402:380:43" - }, - { - "body": { - "nativeSrc": "14819:95:43", - "nodeType": "YulBlock", - "src": "14819:95:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "14836:1:43", - "nodeType": "YulLiteral", - "src": "14836:1:43", - "type": "", - "value": "0" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "14843:3:43", - "nodeType": "YulLiteral", - "src": "14843:3:43", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nativeSrc": "14848:10:43", - "nodeType": "YulLiteral", - "src": "14848:10:43", - "type": "", - "value": "0x4e487b71" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "14839:3:43", - "nodeType": "YulIdentifier", - "src": "14839:3:43" - }, - "nativeSrc": "14839:20:43", - "nodeType": "YulFunctionCall", - "src": "14839:20:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "14829:6:43", - "nodeType": "YulIdentifier", - "src": "14829:6:43" - }, - "nativeSrc": "14829:31:43", - "nodeType": "YulFunctionCall", - "src": "14829:31:43" - }, - "nativeSrc": "14829:31:43", - "nodeType": "YulExpressionStatement", - "src": "14829:31:43" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "14876:1:43", - "nodeType": "YulLiteral", - "src": "14876:1:43", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nativeSrc": "14879:4:43", - "nodeType": "YulLiteral", - "src": "14879:4:43", - "type": "", - "value": "0x41" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "14869:6:43", - "nodeType": "YulIdentifier", - "src": "14869:6:43" - }, - "nativeSrc": "14869:15:43", - "nodeType": "YulFunctionCall", - "src": "14869:15:43" - }, - "nativeSrc": "14869:15:43", - "nodeType": "YulExpressionStatement", - "src": "14869:15:43" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "14900:1:43", - "nodeType": "YulLiteral", - "src": "14900:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "14903:4:43", - "nodeType": "YulLiteral", - "src": "14903:4:43", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "14893:6:43", - "nodeType": "YulIdentifier", - "src": "14893:6:43" - }, - "nativeSrc": "14893:15:43", - "nodeType": "YulFunctionCall", - "src": "14893:15:43" - }, - "nativeSrc": "14893:15:43", - "nodeType": "YulExpressionStatement", - "src": "14893:15:43" - } - ] - }, - "name": "panic_error_0x41", - "nativeSrc": "14787:127:43", - "nodeType": "YulFunctionDefinition", - "src": "14787:127:43" - }, - { - "body": { - "nativeSrc": "15046:136:43", - "nodeType": "YulBlock", - "src": "15046:136:43", - "statements": [ - { - "nativeSrc": "15056:26:43", - "nodeType": "YulAssignment", - "src": "15056:26:43", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "15068:9:43", - "nodeType": "YulIdentifier", - "src": "15068:9:43" - }, - { - "kind": "number", - "nativeSrc": "15079:2:43", - "nodeType": "YulLiteral", - "src": "15079:2:43", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "15064:3:43", - "nodeType": "YulIdentifier", - "src": "15064:3:43" - }, - "nativeSrc": "15064:18:43", - "nodeType": "YulFunctionCall", - "src": "15064:18:43" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "15056:4:43", - "nodeType": "YulIdentifier", - "src": "15056:4:43" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "15098:9:43", - "nodeType": "YulIdentifier", - "src": "15098:9:43" - }, - { - "arguments": [ - { - "name": "value0", - "nativeSrc": "15113:6:43", - "nodeType": "YulIdentifier", - "src": "15113:6:43" - }, - { - "kind": "number", - "nativeSrc": "15121:10:43", - "nodeType": "YulLiteral", - "src": "15121:10:43", - "type": "", - "value": "0xffffffff" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "15109:3:43", - "nodeType": "YulIdentifier", - "src": "15109:3:43" - }, - "nativeSrc": "15109:23:43", - "nodeType": "YulFunctionCall", - "src": "15109:23:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "15091:6:43", - "nodeType": "YulIdentifier", - "src": "15091:6:43" - }, - "nativeSrc": "15091:42:43", - "nodeType": "YulFunctionCall", - "src": "15091:42:43" - }, - "nativeSrc": "15091:42:43", - "nodeType": "YulExpressionStatement", - "src": "15091:42:43" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "15153:9:43", - "nodeType": "YulIdentifier", - "src": "15153:9:43" - }, - { - "kind": "number", - "nativeSrc": "15164:2:43", - "nodeType": "YulLiteral", - "src": "15164:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "15149:3:43", - "nodeType": "YulIdentifier", - "src": "15149:3:43" - }, - "nativeSrc": "15149:18:43", - "nodeType": "YulFunctionCall", - "src": "15149:18:43" - }, - { - "name": "value1", - "nativeSrc": "15169:6:43", - "nodeType": "YulIdentifier", - "src": "15169:6:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "15142:6:43", - "nodeType": "YulIdentifier", - "src": "15142:6:43" - }, - "nativeSrc": "15142:34:43", - "nodeType": "YulFunctionCall", - "src": "15142:34:43" - }, - "nativeSrc": "15142:34:43", - "nodeType": "YulExpressionStatement", - "src": "15142:34:43" - } - ] - }, - "name": "abi_encode_tuple_t_uint32_t_bytes32__to_t_uint32_t_bytes32__fromStack_reversed", - "nativeSrc": "14919:263:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "15007:9:43", - "nodeType": "YulTypedName", - "src": "15007:9:43", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "15018:6:43", - "nodeType": "YulTypedName", - "src": "15018:6:43", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "15026:6:43", - "nodeType": "YulTypedName", - "src": "15026:6:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "15037:4:43", - "nodeType": "YulTypedName", - "src": "15037:4:43", - "type": "" - } - ], - "src": "14919:263:43" - }, - { - "body": { - "nativeSrc": "15233:207:43", - "nodeType": "YulBlock", - "src": "15233:207:43", - "statements": [ - { - "nativeSrc": "15243:19:43", - "nodeType": "YulAssignment", - "src": "15243:19:43", - "value": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "15259:2:43", - "nodeType": "YulLiteral", - "src": "15259:2:43", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "15253:5:43", - "nodeType": "YulIdentifier", - "src": "15253:5:43" - }, - "nativeSrc": "15253:9:43", - "nodeType": "YulFunctionCall", - "src": "15253:9:43" - }, - "variableNames": [ - { - "name": "memPtr", - "nativeSrc": "15243:6:43", - "nodeType": "YulIdentifier", - "src": "15243:6:43" - } - ] - }, - { - "nativeSrc": "15271:35:43", - "nodeType": "YulVariableDeclaration", - "src": "15271:35:43", - "value": { - "arguments": [ - { - "name": "memPtr", - "nativeSrc": "15293:6:43", - "nodeType": "YulIdentifier", - "src": "15293:6:43" - }, - { - "kind": "number", - "nativeSrc": "15301:4:43", - "nodeType": "YulLiteral", - "src": "15301:4:43", - "type": "", - "value": "0x60" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "15289:3:43", - "nodeType": "YulIdentifier", - "src": "15289:3:43" - }, - "nativeSrc": "15289:17:43", - "nodeType": "YulFunctionCall", - "src": "15289:17:43" - }, - "variables": [ - { - "name": "newFreePtr", - "nativeSrc": "15275:10:43", - "nodeType": "YulTypedName", - "src": "15275:10:43", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "15381:22:43", - "nodeType": "YulBlock", - "src": "15381:22:43", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x41", - "nativeSrc": "15383:16:43", - "nodeType": "YulIdentifier", - "src": "15383:16:43" - }, - "nativeSrc": "15383:18:43", - "nodeType": "YulFunctionCall", - "src": "15383:18:43" - }, - "nativeSrc": "15383:18:43", - "nodeType": "YulExpressionStatement", - "src": "15383:18:43" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "newFreePtr", - "nativeSrc": "15324:10:43", - "nodeType": "YulIdentifier", - "src": "15324:10:43" - }, - { - "kind": "number", - "nativeSrc": "15336:18:43", - "nodeType": "YulLiteral", - "src": "15336:18:43", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "15321:2:43", - "nodeType": "YulIdentifier", - "src": "15321:2:43" - }, - "nativeSrc": "15321:34:43", - "nodeType": "YulFunctionCall", - "src": "15321:34:43" - }, - { - "arguments": [ - { - "name": "newFreePtr", - "nativeSrc": "15360:10:43", - "nodeType": "YulIdentifier", - "src": "15360:10:43" - }, - { - "name": "memPtr", - "nativeSrc": "15372:6:43", - "nodeType": "YulIdentifier", - "src": "15372:6:43" - } - ], - "functionName": { - "name": "lt", - "nativeSrc": "15357:2:43", - "nodeType": "YulIdentifier", - "src": "15357:2:43" - }, - "nativeSrc": "15357:22:43", - "nodeType": "YulFunctionCall", - "src": "15357:22:43" - } - ], - "functionName": { - "name": "or", - "nativeSrc": "15318:2:43", - "nodeType": "YulIdentifier", - "src": "15318:2:43" - }, - "nativeSrc": "15318:62:43", - "nodeType": "YulFunctionCall", - "src": "15318:62:43" - }, - "nativeSrc": "15315:88:43", - "nodeType": "YulIf", - "src": "15315:88:43" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "15419:2:43", - "nodeType": "YulLiteral", - "src": "15419:2:43", - "type": "", - "value": "64" - }, - { - "name": "newFreePtr", - "nativeSrc": "15423:10:43", - "nodeType": "YulIdentifier", - "src": "15423:10:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "15412:6:43", - "nodeType": "YulIdentifier", - "src": "15412:6:43" - }, - "nativeSrc": "15412:22:43", - "nodeType": "YulFunctionCall", - "src": "15412:22:43" - }, - "nativeSrc": "15412:22:43", - "nodeType": "YulExpressionStatement", - "src": "15412:22:43" - } - ] - }, - "name": "allocate_memory_4159", - "nativeSrc": "15187:253:43", - "nodeType": "YulFunctionDefinition", - "returnVariables": [ - { - "name": "memPtr", - "nativeSrc": "15222:6:43", - "nodeType": "YulTypedName", - "src": "15222:6:43", - "type": "" - } - ], - "src": "15187:253:43" - }, - { - "body": { - "nativeSrc": "15491:211:43", - "nodeType": "YulBlock", - "src": "15491:211:43", - "statements": [ - { - "nativeSrc": "15501:21:43", - "nodeType": "YulAssignment", - "src": "15501:21:43", - "value": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "15517:4:43", - "nodeType": "YulLiteral", - "src": "15517:4:43", - "type": "", - "value": "0x40" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "15511:5:43", - "nodeType": "YulIdentifier", - "src": "15511:5:43" - }, - "nativeSrc": "15511:11:43", - "nodeType": "YulFunctionCall", - "src": "15511:11:43" - }, - "variableNames": [ - { - "name": "memPtr", - "nativeSrc": "15501:6:43", - "nodeType": "YulIdentifier", - "src": "15501:6:43" - } - ] - }, - { - "nativeSrc": "15531:35:43", - "nodeType": "YulVariableDeclaration", - "src": "15531:35:43", - "value": { - "arguments": [ - { - "name": "memPtr", - "nativeSrc": "15553:6:43", - "nodeType": "YulIdentifier", - "src": "15553:6:43" - }, - { - "kind": "number", - "nativeSrc": "15561:4:43", - "nodeType": "YulLiteral", - "src": "15561:4:43", - "type": "", - "value": "0x40" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "15549:3:43", - "nodeType": "YulIdentifier", - "src": "15549:3:43" - }, - "nativeSrc": "15549:17:43", - "nodeType": "YulFunctionCall", - "src": "15549:17:43" - }, - "variables": [ - { - "name": "newFreePtr", - "nativeSrc": "15535:10:43", - "nodeType": "YulTypedName", - "src": "15535:10:43", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "15641:22:43", - "nodeType": "YulBlock", - "src": "15641:22:43", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x41", - "nativeSrc": "15643:16:43", - "nodeType": "YulIdentifier", - "src": "15643:16:43" - }, - "nativeSrc": "15643:18:43", - "nodeType": "YulFunctionCall", - "src": "15643:18:43" - }, - "nativeSrc": "15643:18:43", - "nodeType": "YulExpressionStatement", - "src": "15643:18:43" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "newFreePtr", - "nativeSrc": "15584:10:43", - "nodeType": "YulIdentifier", - "src": "15584:10:43" - }, - { - "kind": "number", - "nativeSrc": "15596:18:43", - "nodeType": "YulLiteral", - "src": "15596:18:43", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "15581:2:43", - "nodeType": "YulIdentifier", - "src": "15581:2:43" - }, - "nativeSrc": "15581:34:43", - "nodeType": "YulFunctionCall", - "src": "15581:34:43" - }, - { - "arguments": [ - { - "name": "newFreePtr", - "nativeSrc": "15620:10:43", - "nodeType": "YulIdentifier", - "src": "15620:10:43" - }, - { - "name": "memPtr", - "nativeSrc": "15632:6:43", - "nodeType": "YulIdentifier", - "src": "15632:6:43" - } - ], - "functionName": { - "name": "lt", - "nativeSrc": "15617:2:43", - "nodeType": "YulIdentifier", - "src": "15617:2:43" - }, - "nativeSrc": "15617:22:43", - "nodeType": "YulFunctionCall", - "src": "15617:22:43" - } - ], - "functionName": { - "name": "or", - "nativeSrc": "15578:2:43", - "nodeType": "YulIdentifier", - "src": "15578:2:43" - }, - "nativeSrc": "15578:62:43", - "nodeType": "YulFunctionCall", - "src": "15578:62:43" - }, - "nativeSrc": "15575:88:43", - "nodeType": "YulIf", - "src": "15575:88:43" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "15679:4:43", - "nodeType": "YulLiteral", - "src": "15679:4:43", - "type": "", - "value": "0x40" - }, - { - "name": "newFreePtr", - "nativeSrc": "15685:10:43", - "nodeType": "YulIdentifier", - "src": "15685:10:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "15672:6:43", - "nodeType": "YulIdentifier", - "src": "15672:6:43" - }, - "nativeSrc": "15672:24:43", - "nodeType": "YulFunctionCall", - "src": "15672:24:43" - }, - "nativeSrc": "15672:24:43", - "nodeType": "YulExpressionStatement", - "src": "15672:24:43" - } - ] - }, - "name": "allocate_memory_4160", - "nativeSrc": "15445:257:43", - "nodeType": "YulFunctionDefinition", - "returnVariables": [ - { - "name": "memPtr", - "nativeSrc": "15480:6:43", - "nodeType": "YulTypedName", - "src": "15480:6:43", - "type": "" - } - ], - "src": "15445:257:43" - }, - { - "body": { - "nativeSrc": "15752:230:43", - "nodeType": "YulBlock", - "src": "15752:230:43", - "statements": [ - { - "nativeSrc": "15762:19:43", - "nodeType": "YulAssignment", - "src": "15762:19:43", - "value": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "15778:2:43", - "nodeType": "YulLiteral", - "src": "15778:2:43", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "15772:5:43", - "nodeType": "YulIdentifier", - "src": "15772:5:43" - }, - "nativeSrc": "15772:9:43", - "nodeType": "YulFunctionCall", - "src": "15772:9:43" - }, - "variableNames": [ - { - "name": "memPtr", - "nativeSrc": "15762:6:43", - "nodeType": "YulIdentifier", - "src": "15762:6:43" - } - ] - }, - { - "nativeSrc": "15790:58:43", - "nodeType": "YulVariableDeclaration", - "src": "15790:58:43", - "value": { - "arguments": [ - { - "name": "memPtr", - "nativeSrc": "15812:6:43", - "nodeType": "YulIdentifier", - "src": "15812:6:43" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "size", - "nativeSrc": "15828:4:43", - "nodeType": "YulIdentifier", - "src": "15828:4:43" - }, - { - "kind": "number", - "nativeSrc": "15834:2:43", - "nodeType": "YulLiteral", - "src": "15834:2:43", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "15824:3:43", - "nodeType": "YulIdentifier", - "src": "15824:3:43" - }, - "nativeSrc": "15824:13:43", - "nodeType": "YulFunctionCall", - "src": "15824:13:43" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "15843:2:43", - "nodeType": "YulLiteral", - "src": "15843:2:43", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "not", - "nativeSrc": "15839:3:43", - "nodeType": "YulIdentifier", - "src": "15839:3:43" - }, - "nativeSrc": "15839:7:43", - "nodeType": "YulFunctionCall", - "src": "15839:7:43" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "15820:3:43", - "nodeType": "YulIdentifier", - "src": "15820:3:43" - }, - "nativeSrc": "15820:27:43", - "nodeType": "YulFunctionCall", - "src": "15820:27:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "15808:3:43", - "nodeType": "YulIdentifier", - "src": "15808:3:43" - }, - "nativeSrc": "15808:40:43", - "nodeType": "YulFunctionCall", - "src": "15808:40:43" - }, - "variables": [ - { - "name": "newFreePtr", - "nativeSrc": "15794:10:43", - "nodeType": "YulTypedName", - "src": "15794:10:43", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "15923:22:43", - "nodeType": "YulBlock", - "src": "15923:22:43", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x41", - "nativeSrc": "15925:16:43", - "nodeType": "YulIdentifier", - "src": "15925:16:43" - }, - "nativeSrc": "15925:18:43", - "nodeType": "YulFunctionCall", - "src": "15925:18:43" - }, - "nativeSrc": "15925:18:43", - "nodeType": "YulExpressionStatement", - "src": "15925:18:43" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "newFreePtr", - "nativeSrc": "15866:10:43", - "nodeType": "YulIdentifier", - "src": "15866:10:43" - }, - { - "kind": "number", - "nativeSrc": "15878:18:43", - "nodeType": "YulLiteral", - "src": "15878:18:43", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "15863:2:43", - "nodeType": "YulIdentifier", - "src": "15863:2:43" - }, - "nativeSrc": "15863:34:43", - "nodeType": "YulFunctionCall", - "src": "15863:34:43" - }, - { - "arguments": [ - { - "name": "newFreePtr", - "nativeSrc": "15902:10:43", - "nodeType": "YulIdentifier", - "src": "15902:10:43" - }, - { - "name": "memPtr", - "nativeSrc": "15914:6:43", - "nodeType": "YulIdentifier", - "src": "15914:6:43" - } - ], - "functionName": { - "name": "lt", - "nativeSrc": "15899:2:43", - "nodeType": "YulIdentifier", - "src": "15899:2:43" - }, - "nativeSrc": "15899:22:43", - "nodeType": "YulFunctionCall", - "src": "15899:22:43" - } - ], - "functionName": { - "name": "or", - "nativeSrc": "15860:2:43", - "nodeType": "YulIdentifier", - "src": "15860:2:43" - }, - "nativeSrc": "15860:62:43", - "nodeType": "YulFunctionCall", - "src": "15860:62:43" - }, - "nativeSrc": "15857:88:43", - "nodeType": "YulIf", - "src": "15857:88:43" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "15961:2:43", - "nodeType": "YulLiteral", - "src": "15961:2:43", - "type": "", - "value": "64" - }, - { - "name": "newFreePtr", - "nativeSrc": "15965:10:43", - "nodeType": "YulIdentifier", - "src": "15965:10:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "15954:6:43", - "nodeType": "YulIdentifier", - "src": "15954:6:43" - }, - "nativeSrc": "15954:22:43", - "nodeType": "YulFunctionCall", - "src": "15954:22:43" - }, - "nativeSrc": "15954:22:43", - "nodeType": "YulExpressionStatement", - "src": "15954:22:43" - } - ] - }, - "name": "allocate_memory", - "nativeSrc": "15707:275:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "size", - "nativeSrc": "15732:4:43", - "nodeType": "YulTypedName", - "src": "15732:4:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "memPtr", - "nativeSrc": "15741:6:43", - "nodeType": "YulTypedName", - "src": "15741:6:43", - "type": "" - } - ], - "src": "15707:275:43" - }, - { - "body": { - "nativeSrc": "16044:129:43", - "nodeType": "YulBlock", - "src": "16044:129:43", - "statements": [ - { - "body": { - "nativeSrc": "16088:22:43", - "nodeType": "YulBlock", - "src": "16088:22:43", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x41", - "nativeSrc": "16090:16:43", - "nodeType": "YulIdentifier", - "src": "16090:16:43" - }, - "nativeSrc": "16090:18:43", - "nodeType": "YulFunctionCall", - "src": "16090:18:43" - }, - "nativeSrc": "16090:18:43", - "nodeType": "YulExpressionStatement", - "src": "16090:18:43" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "length", - "nativeSrc": "16060:6:43", - "nodeType": "YulIdentifier", - "src": "16060:6:43" - }, - { - "kind": "number", - "nativeSrc": "16068:18:43", - "nodeType": "YulLiteral", - "src": "16068:18:43", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "16057:2:43", - "nodeType": "YulIdentifier", - "src": "16057:2:43" - }, - "nativeSrc": "16057:30:43", - "nodeType": "YulFunctionCall", - "src": "16057:30:43" - }, - "nativeSrc": "16054:56:43", - "nodeType": "YulIf", - "src": "16054:56:43" - }, - { - "nativeSrc": "16119:48:43", - "nodeType": "YulAssignment", - "src": "16119:48:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "length", - "nativeSrc": "16139:6:43", - "nodeType": "YulIdentifier", - "src": "16139:6:43" - }, - { - "kind": "number", - "nativeSrc": "16147:2:43", - "nodeType": "YulLiteral", - "src": "16147:2:43", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "16135:3:43", - "nodeType": "YulIdentifier", - "src": "16135:3:43" - }, - "nativeSrc": "16135:15:43", - "nodeType": "YulFunctionCall", - "src": "16135:15:43" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "16156:2:43", - "nodeType": "YulLiteral", - "src": "16156:2:43", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "not", - "nativeSrc": "16152:3:43", - "nodeType": "YulIdentifier", - "src": "16152:3:43" - }, - "nativeSrc": "16152:7:43", - "nodeType": "YulFunctionCall", - "src": "16152:7:43" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "16131:3:43", - "nodeType": "YulIdentifier", - "src": "16131:3:43" - }, - "nativeSrc": "16131:29:43", - "nodeType": "YulFunctionCall", - "src": "16131:29:43" - }, - { - "kind": "number", - "nativeSrc": "16162:4:43", - "nodeType": "YulLiteral", - "src": "16162:4:43", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "16127:3:43", - "nodeType": "YulIdentifier", - "src": "16127:3:43" - }, - "nativeSrc": "16127:40:43", - "nodeType": "YulFunctionCall", - "src": "16127:40:43" - }, - "variableNames": [ - { - "name": "size", - "nativeSrc": "16119:4:43", - "nodeType": "YulIdentifier", - "src": "16119:4:43" - } - ] - } - ] - }, - "name": "array_allocation_size_bytes", - "nativeSrc": "15987:186:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "length", - "nativeSrc": "16024:6:43", - "nodeType": "YulTypedName", - "src": "16024:6:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "size", - "nativeSrc": "16035:4:43", - "nodeType": "YulTypedName", - "src": "16035:4:43", - "type": "" - } - ], - "src": "15987:186:43" - }, - { - "body": { - "nativeSrc": "16384:1911:43", - "nodeType": "YulBlock", - "src": "16384:1911:43", - "statements": [ - { - "nativeSrc": "16394:28:43", - "nodeType": "YulVariableDeclaration", - "src": "16394:28:43", - "value": { - "kind": "number", - "nativeSrc": "16404:18:43", - "nodeType": "YulLiteral", - "src": "16404:18:43", - "type": "", - "value": "0xffffffffffffffff" - }, - "variables": [ - { - "name": "_1", - "nativeSrc": "16398:2:43", - "nodeType": "YulTypedName", - "src": "16398:2:43", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "16449:22:43", - "nodeType": "YulBlock", - "src": "16449:22:43", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x41", - "nativeSrc": "16451:16:43", - "nodeType": "YulIdentifier", - "src": "16451:16:43" - }, - "nativeSrc": "16451:18:43", - "nodeType": "YulFunctionCall", - "src": "16451:18:43" - }, - "nativeSrc": "16451:18:43", - "nodeType": "YulExpressionStatement", - "src": "16451:18:43" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "length", - "nativeSrc": "16437:6:43", - "nodeType": "YulIdentifier", - "src": "16437:6:43" - }, - { - "name": "_1", - "nativeSrc": "16445:2:43", - "nodeType": "YulIdentifier", - "src": "16445:2:43" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "16434:2:43", - "nodeType": "YulIdentifier", - "src": "16434:2:43" - }, - "nativeSrc": "16434:14:43", - "nodeType": "YulFunctionCall", - "src": "16434:14:43" - }, - "nativeSrc": "16431:40:43", - "nodeType": "YulIf", - "src": "16431:40:43" - }, - { - "nativeSrc": "16480:24:43", - "nodeType": "YulVariableDeclaration", - "src": "16480:24:43", - "value": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "16494:1:43", - "nodeType": "YulLiteral", - "src": "16494:1:43", - "type": "", - "value": "5" - }, - { - "name": "length", - "nativeSrc": "16497:6:43", - "nodeType": "YulIdentifier", - "src": "16497:6:43" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "16490:3:43", - "nodeType": "YulIdentifier", - "src": "16490:3:43" - }, - "nativeSrc": "16490:14:43", - "nodeType": "YulFunctionCall", - "src": "16490:14:43" - }, - "variables": [ - { - "name": "_2", - "nativeSrc": "16484:2:43", - "nodeType": "YulTypedName", - "src": "16484:2:43", - "type": "" - } - ] - }, - { - "nativeSrc": "16513:14:43", - "nodeType": "YulVariableDeclaration", - "src": "16513:14:43", - "value": { - "kind": "number", - "nativeSrc": "16523:4:43", - "nodeType": "YulLiteral", - "src": "16523:4:43", - "type": "", - "value": "0x20" - }, - "variables": [ - { - "name": "_3", - "nativeSrc": "16517:2:43", - "nodeType": "YulTypedName", - "src": "16517:2:43", - "type": "" - } - ] - }, - { - "nativeSrc": "16536:39:43", - "nodeType": "YulVariableDeclaration", - "src": "16536:39:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "_2", - "nativeSrc": "16567:2:43", - "nodeType": "YulIdentifier", - "src": "16567:2:43" - }, - { - "name": "_3", - "nativeSrc": "16571:2:43", - "nodeType": "YulIdentifier", - "src": "16571:2:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "16563:3:43", - "nodeType": "YulIdentifier", - "src": "16563:3:43" - }, - "nativeSrc": "16563:11:43", - "nodeType": "YulFunctionCall", - "src": "16563:11:43" - } - ], - "functionName": { - "name": "allocate_memory", - "nativeSrc": "16547:15:43", - "nodeType": "YulIdentifier", - "src": "16547:15:43" - }, - "nativeSrc": "16547:28:43", - "nodeType": "YulFunctionCall", - "src": "16547:28:43" - }, - "variables": [ - { - "name": "dst", - "nativeSrc": "16540:3:43", - "nodeType": "YulTypedName", - "src": "16540:3:43", - "type": "" - } - ] - }, - { - "nativeSrc": "16584:16:43", - "nodeType": "YulVariableDeclaration", - "src": "16584:16:43", - "value": { - "name": "dst", - "nativeSrc": "16597:3:43", - "nodeType": "YulIdentifier", - "src": "16597:3:43" - }, - "variables": [ - { - "name": "dst_1", - "nativeSrc": "16588:5:43", - "nodeType": "YulTypedName", - "src": "16588:5:43", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "dst", - "nativeSrc": "16616:3:43", - "nodeType": "YulIdentifier", - "src": "16616:3:43" - }, - { - "name": "length", - "nativeSrc": "16621:6:43", - "nodeType": "YulIdentifier", - "src": "16621:6:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "16609:6:43", - "nodeType": "YulIdentifier", - "src": "16609:6:43" - }, - "nativeSrc": "16609:19:43", - "nodeType": "YulFunctionCall", - "src": "16609:19:43" - }, - "nativeSrc": "16609:19:43", - "nodeType": "YulExpressionStatement", - "src": "16609:19:43" - }, - { - "nativeSrc": "16637:19:43", - "nodeType": "YulAssignment", - "src": "16637:19:43", - "value": { - "arguments": [ - { - "name": "dst", - "nativeSrc": "16648:3:43", - "nodeType": "YulIdentifier", - "src": "16648:3:43" - }, - { - "name": "_3", - "nativeSrc": "16653:2:43", - "nodeType": "YulIdentifier", - "src": "16653:2:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "16644:3:43", - "nodeType": "YulIdentifier", - "src": "16644:3:43" - }, - "nativeSrc": "16644:12:43", - "nodeType": "YulFunctionCall", - "src": "16644:12:43" - }, - "variableNames": [ - { - "name": "dst", - "nativeSrc": "16637:3:43", - "nodeType": "YulIdentifier", - "src": "16637:3:43" - } - ] - }, - { - "nativeSrc": "16665:28:43", - "nodeType": "YulVariableDeclaration", - "src": "16665:28:43", - "value": { - "arguments": [ - { - "name": "value", - "nativeSrc": "16683:5:43", - "nodeType": "YulIdentifier", - "src": "16683:5:43" - }, - { - "name": "_2", - "nativeSrc": "16690:2:43", - "nodeType": "YulIdentifier", - "src": "16690:2:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "16679:3:43", - "nodeType": "YulIdentifier", - "src": "16679:3:43" - }, - "nativeSrc": "16679:14:43", - "nodeType": "YulFunctionCall", - "src": "16679:14:43" - }, - "variables": [ - { - "name": "srcEnd", - "nativeSrc": "16669:6:43", - "nodeType": "YulTypedName", - "src": "16669:6:43", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "16732:16:43", - "nodeType": "YulBlock", - "src": "16732:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "16741:1:43", - "nodeType": "YulLiteral", - "src": "16741:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "16744:1:43", - "nodeType": "YulLiteral", - "src": "16744:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "16734:6:43", - "nodeType": "YulIdentifier", - "src": "16734:6:43" - }, - "nativeSrc": "16734:12:43", - "nodeType": "YulFunctionCall", - "src": "16734:12:43" - }, - "nativeSrc": "16734:12:43", - "nodeType": "YulExpressionStatement", - "src": "16734:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "srcEnd", - "nativeSrc": "16708:6:43", - "nodeType": "YulIdentifier", - "src": "16708:6:43" - }, - { - "arguments": [], - "functionName": { - "name": "calldatasize", - "nativeSrc": "16716:12:43", - "nodeType": "YulIdentifier", - "src": "16716:12:43" - }, - "nativeSrc": "16716:14:43", - "nodeType": "YulFunctionCall", - "src": "16716:14:43" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "16705:2:43", - "nodeType": "YulIdentifier", - "src": "16705:2:43" - }, - "nativeSrc": "16705:26:43", - "nodeType": "YulFunctionCall", - "src": "16705:26:43" - }, - "nativeSrc": "16702:46:43", - "nodeType": "YulIf", - "src": "16702:46:43" - }, - { - "nativeSrc": "16757:16:43", - "nodeType": "YulVariableDeclaration", - "src": "16757:16:43", - "value": { - "name": "value", - "nativeSrc": "16768:5:43", - "nodeType": "YulIdentifier", - "src": "16768:5:43" - }, - "variables": [ - { - "name": "src", - "nativeSrc": "16761:3:43", - "nodeType": "YulTypedName", - "src": "16761:3:43", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "16838:1424:43", - "nodeType": "YulBlock", - "src": "16838:1424:43", - "statements": [ - { - "nativeSrc": "16852:36:43", - "nodeType": "YulVariableDeclaration", - "src": "16852:36:43", - "value": { - "arguments": [ - { - "name": "src", - "nativeSrc": "16884:3:43", - "nodeType": "YulIdentifier", - "src": "16884:3:43" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "16871:12:43", - "nodeType": "YulIdentifier", - "src": "16871:12:43" - }, - "nativeSrc": "16871:17:43", - "nodeType": "YulFunctionCall", - "src": "16871:17:43" - }, - "variables": [ - { - "name": "innerOffset", - "nativeSrc": "16856:11:43", - "nodeType": "YulTypedName", - "src": "16856:11:43", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "16936:74:43", - "nodeType": "YulBlock", - "src": "16936:74:43", - "statements": [ - { - "nativeSrc": "16954:11:43", - "nodeType": "YulVariableDeclaration", - "src": "16954:11:43", - "value": { - "kind": "number", - "nativeSrc": "16964:1:43", - "nodeType": "YulLiteral", - "src": "16964:1:43", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "_4", - "nativeSrc": "16958:2:43", - "nodeType": "YulTypedName", - "src": "16958:2:43", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "_4", - "nativeSrc": "16989:2:43", - "nodeType": "YulIdentifier", - "src": "16989:2:43" - }, - { - "name": "_4", - "nativeSrc": "16993:2:43", - "nodeType": "YulIdentifier", - "src": "16993:2:43" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "16982:6:43", - "nodeType": "YulIdentifier", - "src": "16982:6:43" - }, - "nativeSrc": "16982:14:43", - "nodeType": "YulFunctionCall", - "src": "16982:14:43" - }, - "nativeSrc": "16982:14:43", - "nodeType": "YulExpressionStatement", - "src": "16982:14:43" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "innerOffset", - "nativeSrc": "16907:11:43", - "nodeType": "YulIdentifier", - "src": "16907:11:43" - }, - { - "name": "_1", - "nativeSrc": "16920:2:43", - "nodeType": "YulIdentifier", - "src": "16920:2:43" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "16904:2:43", - "nodeType": "YulIdentifier", - "src": "16904:2:43" - }, - "nativeSrc": "16904:19:43", - "nodeType": "YulFunctionCall", - "src": "16904:19:43" - }, - "nativeSrc": "16901:109:43", - "nodeType": "YulIf", - "src": "16901:109:43" - }, - { - "nativeSrc": "17023:33:43", - "nodeType": "YulVariableDeclaration", - "src": "17023:33:43", - "value": { - "arguments": [ - { - "name": "value", - "nativeSrc": "17037:5:43", - "nodeType": "YulIdentifier", - "src": "17037:5:43" - }, - { - "name": "innerOffset", - "nativeSrc": "17044:11:43", - "nodeType": "YulIdentifier", - "src": "17044:11:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "17033:3:43", - "nodeType": "YulIdentifier", - "src": "17033:3:43" - }, - "nativeSrc": "17033:23:43", - "nodeType": "YulFunctionCall", - "src": "17033:23:43" - }, - "variables": [ - { - "name": "_5", - "nativeSrc": "17027:2:43", - "nodeType": "YulTypedName", - "src": "17027:2:43", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "17119:74:43", - "nodeType": "YulBlock", - "src": "17119:74:43", - "statements": [ - { - "nativeSrc": "17137:11:43", - "nodeType": "YulVariableDeclaration", - "src": "17137:11:43", - "value": { - "kind": "number", - "nativeSrc": "17147:1:43", - "nodeType": "YulLiteral", - "src": "17147:1:43", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "_6", - "nativeSrc": "17141:2:43", - "nodeType": "YulTypedName", - "src": "17141:2:43", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "_6", - "nativeSrc": "17172:2:43", - "nodeType": "YulIdentifier", - "src": "17172:2:43" - }, - { - "name": "_6", - "nativeSrc": "17176:2:43", - "nodeType": "YulIdentifier", - "src": "17176:2:43" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "17165:6:43", - "nodeType": "YulIdentifier", - "src": "17165:6:43" - }, - "nativeSrc": "17165:14:43", - "nodeType": "YulFunctionCall", - "src": "17165:14:43" - }, - "nativeSrc": "17165:14:43", - "nodeType": "YulExpressionStatement", - "src": "17165:14:43" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [], - "functionName": { - "name": "calldatasize", - "nativeSrc": "17080:12:43", - "nodeType": "YulIdentifier", - "src": "17080:12:43" - }, - "nativeSrc": "17080:14:43", - "nodeType": "YulFunctionCall", - "src": "17080:14:43" - }, - { - "name": "_5", - "nativeSrc": "17096:2:43", - "nodeType": "YulIdentifier", - "src": "17096:2:43" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "17076:3:43", - "nodeType": "YulIdentifier", - "src": "17076:3:43" - }, - "nativeSrc": "17076:23:43", - "nodeType": "YulFunctionCall", - "src": "17076:23:43" - }, - { - "kind": "number", - "nativeSrc": "17101:4:43", - "nodeType": "YulLiteral", - "src": "17101:4:43", - "type": "", - "value": "0x60" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "17072:3:43", - "nodeType": "YulIdentifier", - "src": "17072:3:43" - }, - "nativeSrc": "17072:34:43", - "nodeType": "YulFunctionCall", - "src": "17072:34:43" - }, - "nativeSrc": "17069:124:43", - "nodeType": "YulIf", - "src": "17069:124:43" - }, - { - "nativeSrc": "17206:37:43", - "nodeType": "YulVariableDeclaration", - "src": "17206:37:43", - "value": { - "arguments": [], - "functionName": { - "name": "allocate_memory_4159", - "nativeSrc": "17221:20:43", - "nodeType": "YulIdentifier", - "src": "17221:20:43" - }, - "nativeSrc": "17221:22:43", - "nodeType": "YulFunctionCall", - "src": "17221:22:43" - }, - "variables": [ - { - "name": "value_1", - "nativeSrc": "17210:7:43", - "nodeType": "YulTypedName", - "src": "17210:7:43", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value_1", - "nativeSrc": "17263:7:43", - "nodeType": "YulIdentifier", - "src": "17263:7:43" - }, - { - "arguments": [ - { - "name": "_5", - "nativeSrc": "17290:2:43", - "nodeType": "YulIdentifier", - "src": "17290:2:43" - } - ], - "functionName": { - "name": "abi_decode_uint32", - "nativeSrc": "17272:17:43", - "nodeType": "YulIdentifier", - "src": "17272:17:43" - }, - "nativeSrc": "17272:21:43", - "nodeType": "YulFunctionCall", - "src": "17272:21:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "17256:6:43", - "nodeType": "YulIdentifier", - "src": "17256:6:43" - }, - "nativeSrc": "17256:38:43", - "nodeType": "YulFunctionCall", - "src": "17256:38:43" - }, - "nativeSrc": "17256:38:43", - "nodeType": "YulExpressionStatement", - "src": "17256:38:43" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value_1", - "nativeSrc": "17318:7:43", - "nodeType": "YulIdentifier", - "src": "17318:7:43" - }, - { - "name": "_3", - "nativeSrc": "17327:2:43", - "nodeType": "YulIdentifier", - "src": "17327:2:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "17314:3:43", - "nodeType": "YulIdentifier", - "src": "17314:3:43" - }, - "nativeSrc": "17314:16:43", - "nodeType": "YulFunctionCall", - "src": "17314:16:43" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "_5", - "nativeSrc": "17354:2:43", - "nodeType": "YulIdentifier", - "src": "17354:2:43" - }, - { - "name": "_3", - "nativeSrc": "17358:2:43", - "nodeType": "YulIdentifier", - "src": "17358:2:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "17350:3:43", - "nodeType": "YulIdentifier", - "src": "17350:3:43" - }, - "nativeSrc": "17350:11:43", - "nodeType": "YulFunctionCall", - "src": "17350:11:43" - } - ], - "functionName": { - "name": "abi_decode_uint16", - "nativeSrc": "17332:17:43", - "nodeType": "YulIdentifier", - "src": "17332:17:43" - }, - "nativeSrc": "17332:30:43", - "nodeType": "YulFunctionCall", - "src": "17332:30:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "17307:6:43", - "nodeType": "YulIdentifier", - "src": "17307:6:43" - }, - "nativeSrc": "17307:56:43", - "nodeType": "YulFunctionCall", - "src": "17307:56:43" - }, - "nativeSrc": "17307:56:43", - "nodeType": "YulExpressionStatement", - "src": "17307:56:43" - }, - { - "nativeSrc": "17376:12:43", - "nodeType": "YulVariableDeclaration", - "src": "17376:12:43", - "value": { - "kind": "number", - "nativeSrc": "17386:2:43", - "nodeType": "YulLiteral", - "src": "17386:2:43", - "type": "", - "value": "64" - }, - "variables": [ - { - "name": "_7", - "nativeSrc": "17380:2:43", - "nodeType": "YulTypedName", - "src": "17380:2:43", - "type": "" - } - ] - }, - { - "nativeSrc": "17401:39:43", - "nodeType": "YulVariableDeclaration", - "src": "17401:39:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "_5", - "nativeSrc": "17432:2:43", - "nodeType": "YulIdentifier", - "src": "17432:2:43" - }, - { - "name": "_7", - "nativeSrc": "17436:2:43", - "nodeType": "YulIdentifier", - "src": "17436:2:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "17428:3:43", - "nodeType": "YulIdentifier", - "src": "17428:3:43" - }, - "nativeSrc": "17428:11:43", - "nodeType": "YulFunctionCall", - "src": "17428:11:43" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "17415:12:43", - "nodeType": "YulIdentifier", - "src": "17415:12:43" - }, - "nativeSrc": "17415:25:43", - "nodeType": "YulFunctionCall", - "src": "17415:25:43" - }, - "variables": [ - { - "name": "offset", - "nativeSrc": "17405:6:43", - "nodeType": "YulTypedName", - "src": "17405:6:43", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "17483:74:43", - "nodeType": "YulBlock", - "src": "17483:74:43", - "statements": [ - { - "nativeSrc": "17501:11:43", - "nodeType": "YulVariableDeclaration", - "src": "17501:11:43", - "value": { - "kind": "number", - "nativeSrc": "17511:1:43", - "nodeType": "YulLiteral", - "src": "17511:1:43", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "_8", - "nativeSrc": "17505:2:43", - "nodeType": "YulTypedName", - "src": "17505:2:43", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "_8", - "nativeSrc": "17536:2:43", - "nodeType": "YulIdentifier", - "src": "17536:2:43" - }, - { - "name": "_8", - "nativeSrc": "17540:2:43", - "nodeType": "YulIdentifier", - "src": "17540:2:43" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "17529:6:43", - "nodeType": "YulIdentifier", - "src": "17529:6:43" - }, - "nativeSrc": "17529:14:43", - "nodeType": "YulFunctionCall", - "src": "17529:14:43" - }, - "nativeSrc": "17529:14:43", - "nodeType": "YulExpressionStatement", - "src": "17529:14:43" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "offset", - "nativeSrc": "17459:6:43", - "nodeType": "YulIdentifier", - "src": "17459:6:43" - }, - { - "name": "_1", - "nativeSrc": "17467:2:43", - "nodeType": "YulIdentifier", - "src": "17467:2:43" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "17456:2:43", - "nodeType": "YulIdentifier", - "src": "17456:2:43" - }, - "nativeSrc": "17456:14:43", - "nodeType": "YulFunctionCall", - "src": "17456:14:43" - }, - "nativeSrc": "17453:104:43", - "nodeType": "YulIf", - "src": "17453:104:43" - }, - { - "nativeSrc": "17570:25:43", - "nodeType": "YulVariableDeclaration", - "src": "17570:25:43", - "value": { - "arguments": [ - { - "name": "_5", - "nativeSrc": "17584:2:43", - "nodeType": "YulIdentifier", - "src": "17584:2:43" - }, - { - "name": "offset", - "nativeSrc": "17588:6:43", - "nodeType": "YulIdentifier", - "src": "17588:6:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "17580:3:43", - "nodeType": "YulIdentifier", - "src": "17580:3:43" - }, - "nativeSrc": "17580:15:43", - "nodeType": "YulFunctionCall", - "src": "17580:15:43" - }, - "variables": [ - { - "name": "_9", - "nativeSrc": "17574:2:43", - "nodeType": "YulTypedName", - "src": "17574:2:43", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "17666:77:43", - "nodeType": "YulBlock", - "src": "17666:77:43", - "statements": [ - { - "nativeSrc": "17684:12:43", - "nodeType": "YulVariableDeclaration", - "src": "17684:12:43", - "value": { - "kind": "number", - "nativeSrc": "17695:1:43", - "nodeType": "YulLiteral", - "src": "17695:1:43", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "_10", - "nativeSrc": "17688:3:43", - "nodeType": "YulTypedName", - "src": "17688:3:43", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "_10", - "nativeSrc": "17720:3:43", - "nodeType": "YulIdentifier", - "src": "17720:3:43" - }, - { - "name": "_10", - "nativeSrc": "17725:3:43", - "nodeType": "YulIdentifier", - "src": "17725:3:43" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "17713:6:43", - "nodeType": "YulIdentifier", - "src": "17713:6:43" - }, - "nativeSrc": "17713:16:43", - "nodeType": "YulFunctionCall", - "src": "17713:16:43" - }, - "nativeSrc": "17713:16:43", - "nodeType": "YulExpressionStatement", - "src": "17713:16:43" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "_9", - "nativeSrc": "17626:2:43", - "nodeType": "YulIdentifier", - "src": "17626:2:43" - }, - { - "kind": "number", - "nativeSrc": "17630:4:43", - "nodeType": "YulLiteral", - "src": "17630:4:43", - "type": "", - "value": "0x1f" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "17622:3:43", - "nodeType": "YulIdentifier", - "src": "17622:3:43" - }, - "nativeSrc": "17622:13:43", - "nodeType": "YulFunctionCall", - "src": "17622:13:43" - }, - { - "arguments": [], - "functionName": { - "name": "calldatasize", - "nativeSrc": "17637:12:43", - "nodeType": "YulIdentifier", - "src": "17637:12:43" - }, - "nativeSrc": "17637:14:43", - "nodeType": "YulFunctionCall", - "src": "17637:14:43" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "17618:3:43", - "nodeType": "YulIdentifier", - "src": "17618:3:43" - }, - "nativeSrc": "17618:34:43", - "nodeType": "YulFunctionCall", - "src": "17618:34:43" - } - ], - "functionName": { - "name": "iszero", - "nativeSrc": "17611:6:43", - "nodeType": "YulIdentifier", - "src": "17611:6:43" - }, - "nativeSrc": "17611:42:43", - "nodeType": "YulFunctionCall", - "src": "17611:42:43" - }, - "nativeSrc": "17608:135:43", - "nodeType": "YulIf", - "src": "17608:135:43" - }, - { - "nativeSrc": "17756:27:43", - "nodeType": "YulVariableDeclaration", - "src": "17756:27:43", - "value": { - "arguments": [ - { - "name": "_9", - "nativeSrc": "17780:2:43", - "nodeType": "YulIdentifier", - "src": "17780:2:43" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "17767:12:43", - "nodeType": "YulIdentifier", - "src": "17767:12:43" - }, - "nativeSrc": "17767:16:43", - "nodeType": "YulFunctionCall", - "src": "17767:16:43" - }, - "variables": [ - { - "name": "_11", - "nativeSrc": "17760:3:43", - "nodeType": "YulTypedName", - "src": "17760:3:43", - "type": "" - } - ] - }, - { - "nativeSrc": "17796:62:43", - "nodeType": "YulVariableDeclaration", - "src": "17796:62:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "_11", - "nativeSrc": "17853:3:43", - "nodeType": "YulIdentifier", - "src": "17853:3:43" - } - ], - "functionName": { - "name": "array_allocation_size_bytes", - "nativeSrc": "17825:27:43", - "nodeType": "YulIdentifier", - "src": "17825:27:43" - }, - "nativeSrc": "17825:32:43", - "nodeType": "YulFunctionCall", - "src": "17825:32:43" - } - ], - "functionName": { - "name": "allocate_memory", - "nativeSrc": "17809:15:43", - "nodeType": "YulIdentifier", - "src": "17809:15:43" - }, - "nativeSrc": "17809:49:43", - "nodeType": "YulFunctionCall", - "src": "17809:49:43" - }, - "variables": [ - { - "name": "array", - "nativeSrc": "17800:5:43", - "nodeType": "YulTypedName", - "src": "17800:5:43", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "array", - "nativeSrc": "17878:5:43", - "nodeType": "YulIdentifier", - "src": "17878:5:43" - }, - { - "name": "_11", - "nativeSrc": "17885:3:43", - "nodeType": "YulIdentifier", - "src": "17885:3:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "17871:6:43", - "nodeType": "YulIdentifier", - "src": "17871:6:43" - }, - "nativeSrc": "17871:18:43", - "nodeType": "YulFunctionCall", - "src": "17871:18:43" - }, - "nativeSrc": "17871:18:43", - "nodeType": "YulExpressionStatement", - "src": "17871:18:43" - }, - { - "body": { - "nativeSrc": "17959:77:43", - "nodeType": "YulBlock", - "src": "17959:77:43", - "statements": [ - { - "nativeSrc": "17977:12:43", - "nodeType": "YulVariableDeclaration", - "src": "17977:12:43", - "value": { - "kind": "number", - "nativeSrc": "17988:1:43", - "nodeType": "YulLiteral", - "src": "17988:1:43", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "_12", - "nativeSrc": "17981:3:43", - "nodeType": "YulTypedName", - "src": "17981:3:43", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "_12", - "nativeSrc": "18013:3:43", - "nodeType": "YulIdentifier", - "src": "18013:3:43" - }, - { - "name": "_12", - "nativeSrc": "18018:3:43", - "nodeType": "YulIdentifier", - "src": "18018:3:43" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "18006:6:43", - "nodeType": "YulIdentifier", - "src": "18006:6:43" - }, - "nativeSrc": "18006:16:43", - "nodeType": "YulFunctionCall", - "src": "18006:16:43" - }, - "nativeSrc": "18006:16:43", - "nodeType": "YulExpressionStatement", - "src": "18006:16:43" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "_9", - "nativeSrc": "17916:2:43", - "nodeType": "YulIdentifier", - "src": "17916:2:43" - }, - { - "name": "_11", - "nativeSrc": "17920:3:43", - "nodeType": "YulIdentifier", - "src": "17920:3:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "17912:3:43", - "nodeType": "YulIdentifier", - "src": "17912:3:43" - }, - "nativeSrc": "17912:12:43", - "nodeType": "YulFunctionCall", - "src": "17912:12:43" - }, - { - "name": "_3", - "nativeSrc": "17926:2:43", - "nodeType": "YulIdentifier", - "src": "17926:2:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "17908:3:43", - "nodeType": "YulIdentifier", - "src": "17908:3:43" - }, - "nativeSrc": "17908:21:43", - "nodeType": "YulFunctionCall", - "src": "17908:21:43" - }, - { - "arguments": [], - "functionName": { - "name": "calldatasize", - "nativeSrc": "17931:12:43", - "nodeType": "YulIdentifier", - "src": "17931:12:43" - }, - "nativeSrc": "17931:14:43", - "nodeType": "YulFunctionCall", - "src": "17931:14:43" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "17905:2:43", - "nodeType": "YulIdentifier", - "src": "17905:2:43" - }, - "nativeSrc": "17905:41:43", - "nodeType": "YulFunctionCall", - "src": "17905:41:43" - }, - "nativeSrc": "17902:134:43", - "nodeType": "YulIf", - "src": "17902:134:43" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "array", - "nativeSrc": "18066:5:43", - "nodeType": "YulIdentifier", - "src": "18066:5:43" - }, - { - "name": "_3", - "nativeSrc": "18073:2:43", - "nodeType": "YulIdentifier", - "src": "18073:2:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "18062:3:43", - "nodeType": "YulIdentifier", - "src": "18062:3:43" - }, - "nativeSrc": "18062:14:43", - "nodeType": "YulFunctionCall", - "src": "18062:14:43" - }, - { - "arguments": [ - { - "name": "_9", - "nativeSrc": "18082:2:43", - "nodeType": "YulIdentifier", - "src": "18082:2:43" - }, - { - "name": "_3", - "nativeSrc": "18086:2:43", - "nodeType": "YulIdentifier", - "src": "18086:2:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "18078:3:43", - "nodeType": "YulIdentifier", - "src": "18078:3:43" - }, - "nativeSrc": "18078:11:43", - "nodeType": "YulFunctionCall", - "src": "18078:11:43" - }, - { - "name": "_11", - "nativeSrc": "18091:3:43", - "nodeType": "YulIdentifier", - "src": "18091:3:43" - } - ], - "functionName": { - "name": "calldatacopy", - "nativeSrc": "18049:12:43", - "nodeType": "YulIdentifier", - "src": "18049:12:43" - }, - "nativeSrc": "18049:46:43", - "nodeType": "YulFunctionCall", - "src": "18049:46:43" - }, - "nativeSrc": "18049:46:43", - "nodeType": "YulExpressionStatement", - "src": "18049:46:43" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "array", - "nativeSrc": "18123:5:43", - "nodeType": "YulIdentifier", - "src": "18123:5:43" - }, - { - "name": "_11", - "nativeSrc": "18130:3:43", - "nodeType": "YulIdentifier", - "src": "18130:3:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "18119:3:43", - "nodeType": "YulIdentifier", - "src": "18119:3:43" - }, - "nativeSrc": "18119:15:43", - "nodeType": "YulFunctionCall", - "src": "18119:15:43" - }, - { - "name": "_3", - "nativeSrc": "18136:2:43", - "nodeType": "YulIdentifier", - "src": "18136:2:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "18115:3:43", - "nodeType": "YulIdentifier", - "src": "18115:3:43" - }, - "nativeSrc": "18115:24:43", - "nodeType": "YulFunctionCall", - "src": "18115:24:43" - }, - { - "kind": "number", - "nativeSrc": "18141:1:43", - "nodeType": "YulLiteral", - "src": "18141:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "18108:6:43", - "nodeType": "YulIdentifier", - "src": "18108:6:43" - }, - "nativeSrc": "18108:35:43", - "nodeType": "YulFunctionCall", - "src": "18108:35:43" - }, - "nativeSrc": "18108:35:43", - "nodeType": "YulExpressionStatement", - "src": "18108:35:43" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value_1", - "nativeSrc": "18167:7:43", - "nodeType": "YulIdentifier", - "src": "18167:7:43" - }, - { - "name": "_7", - "nativeSrc": "18176:2:43", - "nodeType": "YulIdentifier", - "src": "18176:2:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "18163:3:43", - "nodeType": "YulIdentifier", - "src": "18163:3:43" - }, - "nativeSrc": "18163:16:43", - "nodeType": "YulFunctionCall", - "src": "18163:16:43" - }, - { - "name": "array", - "nativeSrc": "18181:5:43", - "nodeType": "YulIdentifier", - "src": "18181:5:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "18156:6:43", - "nodeType": "YulIdentifier", - "src": "18156:6:43" - }, - "nativeSrc": "18156:31:43", - "nodeType": "YulFunctionCall", - "src": "18156:31:43" - }, - "nativeSrc": "18156:31:43", - "nodeType": "YulExpressionStatement", - "src": "18156:31:43" - }, - { - "expression": { - "arguments": [ - { - "name": "dst", - "nativeSrc": "18207:3:43", - "nodeType": "YulIdentifier", - "src": "18207:3:43" - }, - { - "name": "value_1", - "nativeSrc": "18212:7:43", - "nodeType": "YulIdentifier", - "src": "18212:7:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "18200:6:43", - "nodeType": "YulIdentifier", - "src": "18200:6:43" - }, - "nativeSrc": "18200:20:43", - "nodeType": "YulFunctionCall", - "src": "18200:20:43" - }, - "nativeSrc": "18200:20:43", - "nodeType": "YulExpressionStatement", - "src": "18200:20:43" - }, - { - "nativeSrc": "18233:19:43", - "nodeType": "YulAssignment", - "src": "18233:19:43", - "value": { - "arguments": [ - { - "name": "dst", - "nativeSrc": "18244:3:43", - "nodeType": "YulIdentifier", - "src": "18244:3:43" - }, - { - "name": "_3", - "nativeSrc": "18249:2:43", - "nodeType": "YulIdentifier", - "src": "18249:2:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "18240:3:43", - "nodeType": "YulIdentifier", - "src": "18240:3:43" - }, - "nativeSrc": "18240:12:43", - "nodeType": "YulFunctionCall", - "src": "18240:12:43" - }, - "variableNames": [ - { - "name": "dst", - "nativeSrc": "18233:3:43", - "nodeType": "YulIdentifier", - "src": "18233:3:43" - } - ] - } - ] - }, - "condition": { - "arguments": [ - { - "name": "src", - "nativeSrc": "16793:3:43", - "nodeType": "YulIdentifier", - "src": "16793:3:43" - }, - { - "name": "srcEnd", - "nativeSrc": "16798:6:43", - "nodeType": "YulIdentifier", - "src": "16798:6:43" - } - ], - "functionName": { - "name": "lt", - "nativeSrc": "16790:2:43", - "nodeType": "YulIdentifier", - "src": "16790:2:43" - }, - "nativeSrc": "16790:15:43", - "nodeType": "YulFunctionCall", - "src": "16790:15:43" - }, - "nativeSrc": "16782:1480:43", - "nodeType": "YulForLoop", - "post": { - "nativeSrc": "16806:23:43", - "nodeType": "YulBlock", - "src": "16806:23:43", - "statements": [ - { - "nativeSrc": "16808:19:43", - "nodeType": "YulAssignment", - "src": "16808:19:43", - "value": { - "arguments": [ - { - "name": "src", - "nativeSrc": "16819:3:43", - "nodeType": "YulIdentifier", - "src": "16819:3:43" - }, - { - "name": "_3", - "nativeSrc": "16824:2:43", - "nodeType": "YulIdentifier", - "src": "16824:2:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "16815:3:43", - "nodeType": "YulIdentifier", - "src": "16815:3:43" - }, - "nativeSrc": "16815:12:43", - "nodeType": "YulFunctionCall", - "src": "16815:12:43" - }, - "variableNames": [ - { - "name": "src", - "nativeSrc": "16808:3:43", - "nodeType": "YulIdentifier", - "src": "16808:3:43" - } - ] - } - ] - }, - "pre": { - "nativeSrc": "16786:3:43", - "nodeType": "YulBlock", - "src": "16786:3:43", - "statements": [] - }, - "src": "16782:1480:43" - }, - { - "nativeSrc": "18271:18:43", - "nodeType": "YulAssignment", - "src": "18271:18:43", - "value": { - "name": "dst_1", - "nativeSrc": "18284:5:43", - "nodeType": "YulIdentifier", - "src": "18284:5:43" - }, - "variableNames": [ - { - "name": "converted", - "nativeSrc": "18271:9:43", - "nodeType": "YulIdentifier", - "src": "18271:9:43" - } - ] - } - ] - }, - "name": "convert_array_t_array$_t_struct$_EnforcedOptionParam_$1932_calldata_ptr_$dyn_calldata_ptr_to_t_array$_t_struct$_EnforcedOptionParam_$1932_memory_ptr_$dyn_memory_ptr", - "nativeSrc": "16178:2117:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nativeSrc": "16352:5:43", - "nodeType": "YulTypedName", - "src": "16352:5:43", - "type": "" - }, - { - "name": "length", - "nativeSrc": "16359:6:43", - "nodeType": "YulTypedName", - "src": "16359:6:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "converted", - "nativeSrc": "16370:9:43", - "nodeType": "YulTypedName", - "src": "16370:9:43", - "type": "" - } - ], - "src": "16178:2117:43" - }, - { - "body": { - "nativeSrc": "18430:201:43", - "nodeType": "YulBlock", - "src": "18430:201:43", - "statements": [ - { - "body": { - "nativeSrc": "18468:16:43", - "nodeType": "YulBlock", - "src": "18468:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "18477:1:43", - "nodeType": "YulLiteral", - "src": "18477:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "18480:1:43", - "nodeType": "YulLiteral", - "src": "18480:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "18470:6:43", - "nodeType": "YulIdentifier", - "src": "18470:6:43" - }, - "nativeSrc": "18470:12:43", - "nodeType": "YulFunctionCall", - "src": "18470:12:43" - }, - "nativeSrc": "18470:12:43", - "nodeType": "YulExpressionStatement", - "src": "18470:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "startIndex", - "nativeSrc": "18446:10:43", - "nodeType": "YulIdentifier", - "src": "18446:10:43" - }, - { - "name": "endIndex", - "nativeSrc": "18458:8:43", - "nodeType": "YulIdentifier", - "src": "18458:8:43" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "18443:2:43", - "nodeType": "YulIdentifier", - "src": "18443:2:43" - }, - "nativeSrc": "18443:24:43", - "nodeType": "YulFunctionCall", - "src": "18443:24:43" - }, - "nativeSrc": "18440:44:43", - "nodeType": "YulIf", - "src": "18440:44:43" - }, - { - "body": { - "nativeSrc": "18517:16:43", - "nodeType": "YulBlock", - "src": "18517:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "18526:1:43", - "nodeType": "YulLiteral", - "src": "18526:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "18529:1:43", - "nodeType": "YulLiteral", - "src": "18529:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "18519:6:43", - "nodeType": "YulIdentifier", - "src": "18519:6:43" - }, - "nativeSrc": "18519:12:43", - "nodeType": "YulFunctionCall", - "src": "18519:12:43" - }, - "nativeSrc": "18519:12:43", - "nodeType": "YulExpressionStatement", - "src": "18519:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "endIndex", - "nativeSrc": "18499:8:43", - "nodeType": "YulIdentifier", - "src": "18499:8:43" - }, - { - "name": "length", - "nativeSrc": "18509:6:43", - "nodeType": "YulIdentifier", - "src": "18509:6:43" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "18496:2:43", - "nodeType": "YulIdentifier", - "src": "18496:2:43" - }, - "nativeSrc": "18496:20:43", - "nodeType": "YulFunctionCall", - "src": "18496:20:43" - }, - "nativeSrc": "18493:40:43", - "nodeType": "YulIf", - "src": "18493:40:43" - }, - { - "nativeSrc": "18542:36:43", - "nodeType": "YulAssignment", - "src": "18542:36:43", - "value": { - "arguments": [ - { - "name": "offset", - "nativeSrc": "18559:6:43", - "nodeType": "YulIdentifier", - "src": "18559:6:43" - }, - { - "name": "startIndex", - "nativeSrc": "18567:10:43", - "nodeType": "YulIdentifier", - "src": "18567:10:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "18555:3:43", - "nodeType": "YulIdentifier", - "src": "18555:3:43" - }, - "nativeSrc": "18555:23:43", - "nodeType": "YulFunctionCall", - "src": "18555:23:43" - }, - "variableNames": [ - { - "name": "offsetOut", - "nativeSrc": "18542:9:43", - "nodeType": "YulIdentifier", - "src": "18542:9:43" - } - ] - }, - { - "nativeSrc": "18587:38:43", - "nodeType": "YulAssignment", - "src": "18587:38:43", - "value": { - "arguments": [ - { - "name": "endIndex", - "nativeSrc": "18604:8:43", - "nodeType": "YulIdentifier", - "src": "18604:8:43" - }, - { - "name": "startIndex", - "nativeSrc": "18614:10:43", - "nodeType": "YulIdentifier", - "src": "18614:10:43" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "18600:3:43", - "nodeType": "YulIdentifier", - "src": "18600:3:43" - }, - "nativeSrc": "18600:25:43", - "nodeType": "YulFunctionCall", - "src": "18600:25:43" - }, - "variableNames": [ - { - "name": "lengthOut", - "nativeSrc": "18587:9:43", - "nodeType": "YulIdentifier", - "src": "18587:9:43" - } - ] - } - ] - }, - "name": "calldata_array_index_range_access_t_bytes_calldata_ptr", - "nativeSrc": "18300:331:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "offset", - "nativeSrc": "18364:6:43", - "nodeType": "YulTypedName", - "src": "18364:6:43", - "type": "" - }, - { - "name": "length", - "nativeSrc": "18372:6:43", - "nodeType": "YulTypedName", - "src": "18372:6:43", - "type": "" - }, - { - "name": "startIndex", - "nativeSrc": "18380:10:43", - "nodeType": "YulTypedName", - "src": "18380:10:43", - "type": "" - }, - { - "name": "endIndex", - "nativeSrc": "18392:8:43", - "nodeType": "YulTypedName", - "src": "18392:8:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "offsetOut", - "nativeSrc": "18405:9:43", - "nodeType": "YulTypedName", - "src": "18405:9:43", - "type": "" - }, - { - "name": "lengthOut", - "nativeSrc": "18416:9:43", - "nodeType": "YulTypedName", - "src": "18416:9:43", - "type": "" - } - ], - "src": "18300:331:43" - }, - { - "body": { - "nativeSrc": "18835:277:43", - "nodeType": "YulBlock", - "src": "18835:277:43", - "statements": [ - { - "nativeSrc": "18845:27:43", - "nodeType": "YulVariableDeclaration", - "src": "18845:27:43", - "value": { - "arguments": [ - { - "name": "value0", - "nativeSrc": "18865:6:43", - "nodeType": "YulIdentifier", - "src": "18865:6:43" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "18859:5:43", - "nodeType": "YulIdentifier", - "src": "18859:5:43" - }, - "nativeSrc": "18859:13:43", - "nodeType": "YulFunctionCall", - "src": "18859:13:43" - }, - "variables": [ - { - "name": "length", - "nativeSrc": "18849:6:43", - "nodeType": "YulTypedName", - "src": "18849:6:43", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nativeSrc": "18920:6:43", - "nodeType": "YulIdentifier", - "src": "18920:6:43" - }, - { - "kind": "number", - "nativeSrc": "18928:4:43", - "nodeType": "YulLiteral", - "src": "18928:4:43", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "18916:3:43", - "nodeType": "YulIdentifier", - "src": "18916:3:43" - }, - "nativeSrc": "18916:17:43", - "nodeType": "YulFunctionCall", - "src": "18916:17:43" - }, - { - "name": "pos", - "nativeSrc": "18935:3:43", - "nodeType": "YulIdentifier", - "src": "18935:3:43" - }, - { - "name": "length", - "nativeSrc": "18940:6:43", - "nodeType": "YulIdentifier", - "src": "18940:6:43" - } - ], - "functionName": { - "name": "copy_memory_to_memory_with_cleanup", - "nativeSrc": "18881:34:43", - "nodeType": "YulIdentifier", - "src": "18881:34:43" - }, - "nativeSrc": "18881:66:43", - "nodeType": "YulFunctionCall", - "src": "18881:66:43" - }, - "nativeSrc": "18881:66:43", - "nodeType": "YulExpressionStatement", - "src": "18881:66:43" - }, - { - "nativeSrc": "18956:29:43", - "nodeType": "YulVariableDeclaration", - "src": "18956:29:43", - "value": { - "arguments": [ - { - "name": "pos", - "nativeSrc": "18973:3:43", - "nodeType": "YulIdentifier", - "src": "18973:3:43" - }, - { - "name": "length", - "nativeSrc": "18978:6:43", - "nodeType": "YulIdentifier", - "src": "18978:6:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "18969:3:43", - "nodeType": "YulIdentifier", - "src": "18969:3:43" - }, - "nativeSrc": "18969:16:43", - "nodeType": "YulFunctionCall", - "src": "18969:16:43" - }, - "variables": [ - { - "name": "end_1", - "nativeSrc": "18960:5:43", - "nodeType": "YulTypedName", - "src": "18960:5:43", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "end_1", - "nativeSrc": "19007:5:43", - "nodeType": "YulIdentifier", - "src": "19007:5:43" - }, - { - "name": "value1", - "nativeSrc": "19014:6:43", - "nodeType": "YulIdentifier", - "src": "19014:6:43" - }, - { - "name": "value2", - "nativeSrc": "19022:6:43", - "nodeType": "YulIdentifier", - "src": "19022:6:43" - } - ], - "functionName": { - "name": "calldatacopy", - "nativeSrc": "18994:12:43", - "nodeType": "YulIdentifier", - "src": "18994:12:43" - }, - "nativeSrc": "18994:35:43", - "nodeType": "YulFunctionCall", - "src": "18994:35:43" - }, - "nativeSrc": "18994:35:43", - "nodeType": "YulExpressionStatement", - "src": "18994:35:43" - }, - { - "nativeSrc": "19038:28:43", - "nodeType": "YulVariableDeclaration", - "src": "19038:28:43", - "value": { - "arguments": [ - { - "name": "end_1", - "nativeSrc": "19052:5:43", - "nodeType": "YulIdentifier", - "src": "19052:5:43" - }, - { - "name": "value2", - "nativeSrc": "19059:6:43", - "nodeType": "YulIdentifier", - "src": "19059:6:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "19048:3:43", - "nodeType": "YulIdentifier", - "src": "19048:3:43" - }, - "nativeSrc": "19048:18:43", - "nodeType": "YulFunctionCall", - "src": "19048:18:43" - }, - "variables": [ - { - "name": "_1", - "nativeSrc": "19042:2:43", - "nodeType": "YulTypedName", - "src": "19042:2:43", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "_1", - "nativeSrc": "19082:2:43", - "nodeType": "YulIdentifier", - "src": "19082:2:43" - }, - { - "kind": "number", - "nativeSrc": "19086:1:43", - "nodeType": "YulLiteral", - "src": "19086:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "19075:6:43", - "nodeType": "YulIdentifier", - "src": "19075:6:43" - }, - "nativeSrc": "19075:13:43", - "nodeType": "YulFunctionCall", - "src": "19075:13:43" - }, - "nativeSrc": "19075:13:43", - "nodeType": "YulExpressionStatement", - "src": "19075:13:43" - }, - { - "nativeSrc": "19097:9:43", - "nodeType": "YulAssignment", - "src": "19097:9:43", - "value": { - "name": "_1", - "nativeSrc": "19104:2:43", - "nodeType": "YulIdentifier", - "src": "19104:2:43" - }, - "variableNames": [ - { - "name": "end", - "nativeSrc": "19097:3:43", - "nodeType": "YulIdentifier", - "src": "19097:3:43" - } - ] - } - ] - }, - "name": "abi_encode_tuple_packed_t_bytes_memory_ptr_t_bytes_calldata_ptr_slice__to_t_bytes_memory_ptr_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed", - "nativeSrc": "18636:476:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "pos", - "nativeSrc": "18795:3:43", - "nodeType": "YulTypedName", - "src": "18795:3:43", - "type": "" - }, - { - "name": "value2", - "nativeSrc": "18800:6:43", - "nodeType": "YulTypedName", - "src": "18800:6:43", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "18808:6:43", - "nodeType": "YulTypedName", - "src": "18808:6:43", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "18816:6:43", - "nodeType": "YulTypedName", - "src": "18816:6:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "end", - "nativeSrc": "18827:3:43", - "nodeType": "YulTypedName", - "src": "18827:3:43", - "type": "" - } - ], - "src": "18636:476:43" - }, - { - "body": { - "nativeSrc": "19183:200:43", - "nodeType": "YulBlock", - "src": "19183:200:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "pos", - "nativeSrc": "19200:3:43", - "nodeType": "YulIdentifier", - "src": "19200:3:43" - }, - { - "name": "length", - "nativeSrc": "19205:6:43", - "nodeType": "YulIdentifier", - "src": "19205:6:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "19193:6:43", - "nodeType": "YulIdentifier", - "src": "19193:6:43" - }, - "nativeSrc": "19193:19:43", - "nodeType": "YulFunctionCall", - "src": "19193:19:43" - }, - "nativeSrc": "19193:19:43", - "nodeType": "YulExpressionStatement", - "src": "19193:19:43" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "pos", - "nativeSrc": "19238:3:43", - "nodeType": "YulIdentifier", - "src": "19238:3:43" - }, - { - "kind": "number", - "nativeSrc": "19243:4:43", - "nodeType": "YulLiteral", - "src": "19243:4:43", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "19234:3:43", - "nodeType": "YulIdentifier", - "src": "19234:3:43" - }, - "nativeSrc": "19234:14:43", - "nodeType": "YulFunctionCall", - "src": "19234:14:43" - }, - { - "name": "start", - "nativeSrc": "19250:5:43", - "nodeType": "YulIdentifier", - "src": "19250:5:43" - }, - { - "name": "length", - "nativeSrc": "19257:6:43", - "nodeType": "YulIdentifier", - "src": "19257:6:43" - } - ], - "functionName": { - "name": "calldatacopy", - "nativeSrc": "19221:12:43", - "nodeType": "YulIdentifier", - "src": "19221:12:43" - }, - "nativeSrc": "19221:43:43", - "nodeType": "YulFunctionCall", - "src": "19221:43:43" - }, - "nativeSrc": "19221:43:43", - "nodeType": "YulExpressionStatement", - "src": "19221:43:43" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "pos", - "nativeSrc": "19288:3:43", - "nodeType": "YulIdentifier", - "src": "19288:3:43" - }, - { - "name": "length", - "nativeSrc": "19293:6:43", - "nodeType": "YulIdentifier", - "src": "19293:6:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "19284:3:43", - "nodeType": "YulIdentifier", - "src": "19284:3:43" - }, - "nativeSrc": "19284:16:43", - "nodeType": "YulFunctionCall", - "src": "19284:16:43" - }, - { - "kind": "number", - "nativeSrc": "19302:4:43", - "nodeType": "YulLiteral", - "src": "19302:4:43", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "19280:3:43", - "nodeType": "YulIdentifier", - "src": "19280:3:43" - }, - "nativeSrc": "19280:27:43", - "nodeType": "YulFunctionCall", - "src": "19280:27:43" - }, - { - "kind": "number", - "nativeSrc": "19309:1:43", - "nodeType": "YulLiteral", - "src": "19309:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "19273:6:43", - "nodeType": "YulIdentifier", - "src": "19273:6:43" - }, - "nativeSrc": "19273:38:43", - "nodeType": "YulFunctionCall", - "src": "19273:38:43" - }, - "nativeSrc": "19273:38:43", - "nodeType": "YulExpressionStatement", - "src": "19273:38:43" - }, - { - "nativeSrc": "19320:57:43", - "nodeType": "YulAssignment", - "src": "19320:57:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "pos", - "nativeSrc": "19335:3:43", - "nodeType": "YulIdentifier", - "src": "19335:3:43" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "length", - "nativeSrc": "19348:6:43", - "nodeType": "YulIdentifier", - "src": "19348:6:43" - }, - { - "kind": "number", - "nativeSrc": "19356:2:43", - "nodeType": "YulLiteral", - "src": "19356:2:43", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "19344:3:43", - "nodeType": "YulIdentifier", - "src": "19344:3:43" - }, - "nativeSrc": "19344:15:43", - "nodeType": "YulFunctionCall", - "src": "19344:15:43" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "19365:2:43", - "nodeType": "YulLiteral", - "src": "19365:2:43", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "not", - "nativeSrc": "19361:3:43", - "nodeType": "YulIdentifier", - "src": "19361:3:43" - }, - "nativeSrc": "19361:7:43", - "nodeType": "YulFunctionCall", - "src": "19361:7:43" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "19340:3:43", - "nodeType": "YulIdentifier", - "src": "19340:3:43" - }, - "nativeSrc": "19340:29:43", - "nodeType": "YulFunctionCall", - "src": "19340:29:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "19331:3:43", - "nodeType": "YulIdentifier", - "src": "19331:3:43" - }, - "nativeSrc": "19331:39:43", - "nodeType": "YulFunctionCall", - "src": "19331:39:43" - }, - { - "kind": "number", - "nativeSrc": "19372:4:43", - "nodeType": "YulLiteral", - "src": "19372:4:43", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "19327:3:43", - "nodeType": "YulIdentifier", - "src": "19327:3:43" - }, - "nativeSrc": "19327:50:43", - "nodeType": "YulFunctionCall", - "src": "19327:50:43" - }, - "variableNames": [ - { - "name": "end", - "nativeSrc": "19320:3:43", - "nodeType": "YulIdentifier", - "src": "19320:3:43" - } - ] - } - ] - }, - "name": "abi_encode_bytes_calldata", - "nativeSrc": "19117:266:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "start", - "nativeSrc": "19152:5:43", - "nodeType": "YulTypedName", - "src": "19152:5:43", - "type": "" - }, - { - "name": "length", - "nativeSrc": "19159:6:43", - "nodeType": "YulTypedName", - "src": "19159:6:43", - "type": "" - }, - { - "name": "pos", - "nativeSrc": "19167:3:43", - "nodeType": "YulTypedName", - "src": "19167:3:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "end", - "nativeSrc": "19175:3:43", - "nodeType": "YulTypedName", - "src": "19175:3:43", - "type": "" - } - ], - "src": "19117:266:43" - }, - { - "body": { - "nativeSrc": "19517:115:43", - "nodeType": "YulBlock", - "src": "19517:115:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "19534:9:43", - "nodeType": "YulIdentifier", - "src": "19534:9:43" - }, - { - "kind": "number", - "nativeSrc": "19545:2:43", - "nodeType": "YulLiteral", - "src": "19545:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "19527:6:43", - "nodeType": "YulIdentifier", - "src": "19527:6:43" - }, - "nativeSrc": "19527:21:43", - "nodeType": "YulFunctionCall", - "src": "19527:21:43" - }, - "nativeSrc": "19527:21:43", - "nodeType": "YulExpressionStatement", - "src": "19527:21:43" - }, - { - "nativeSrc": "19557:69:43", - "nodeType": "YulAssignment", - "src": "19557:69:43", - "value": { - "arguments": [ - { - "name": "value0", - "nativeSrc": "19591:6:43", - "nodeType": "YulIdentifier", - "src": "19591:6:43" - }, - { - "name": "value1", - "nativeSrc": "19599:6:43", - "nodeType": "YulIdentifier", - "src": "19599:6:43" - }, - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "19611:9:43", - "nodeType": "YulIdentifier", - "src": "19611:9:43" - }, - { - "kind": "number", - "nativeSrc": "19622:2:43", - "nodeType": "YulLiteral", - "src": "19622:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "19607:3:43", - "nodeType": "YulIdentifier", - "src": "19607:3:43" - }, - "nativeSrc": "19607:18:43", - "nodeType": "YulFunctionCall", - "src": "19607:18:43" - } - ], - "functionName": { - "name": "abi_encode_bytes_calldata", - "nativeSrc": "19565:25:43", - "nodeType": "YulIdentifier", - "src": "19565:25:43" - }, - "nativeSrc": "19565:61:43", - "nodeType": "YulFunctionCall", - "src": "19565:61:43" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "19557:4:43", - "nodeType": "YulIdentifier", - "src": "19557:4:43" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_bytes_calldata_ptr__to_t_bytes_memory_ptr__fromStack_reversed", - "nativeSrc": "19388:244:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "19478:9:43", - "nodeType": "YulTypedName", - "src": "19478:9:43", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "19489:6:43", - "nodeType": "YulTypedName", - "src": "19489:6:43", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "19497:6:43", - "nodeType": "YulTypedName", - "src": "19497:6:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "19508:4:43", - "nodeType": "YulTypedName", - "src": "19508:4:43", - "type": "" - } - ], - "src": "19388:244:43" - }, - { - "body": { - "nativeSrc": "19669:95:43", - "nodeType": "YulBlock", - "src": "19669:95:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "19686:1:43", - "nodeType": "YulLiteral", - "src": "19686:1:43", - "type": "", - "value": "0" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "19693:3:43", - "nodeType": "YulLiteral", - "src": "19693:3:43", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nativeSrc": "19698:10:43", - "nodeType": "YulLiteral", - "src": "19698:10:43", - "type": "", - "value": "0x4e487b71" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "19689:3:43", - "nodeType": "YulIdentifier", - "src": "19689:3:43" - }, - "nativeSrc": "19689:20:43", - "nodeType": "YulFunctionCall", - "src": "19689:20:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "19679:6:43", - "nodeType": "YulIdentifier", - "src": "19679:6:43" - }, - "nativeSrc": "19679:31:43", - "nodeType": "YulFunctionCall", - "src": "19679:31:43" - }, - "nativeSrc": "19679:31:43", - "nodeType": "YulExpressionStatement", - "src": "19679:31:43" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "19726:1:43", - "nodeType": "YulLiteral", - "src": "19726:1:43", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nativeSrc": "19729:4:43", - "nodeType": "YulLiteral", - "src": "19729:4:43", - "type": "", - "value": "0x32" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "19719:6:43", - "nodeType": "YulIdentifier", - "src": "19719:6:43" - }, - "nativeSrc": "19719:15:43", - "nodeType": "YulFunctionCall", - "src": "19719:15:43" - }, - "nativeSrc": "19719:15:43", - "nodeType": "YulExpressionStatement", - "src": "19719:15:43" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "19750:1:43", - "nodeType": "YulLiteral", - "src": "19750:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "19753:4:43", - "nodeType": "YulLiteral", - "src": "19753:4:43", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "19743:6:43", - "nodeType": "YulIdentifier", - "src": "19743:6:43" - }, - "nativeSrc": "19743:15:43", - "nodeType": "YulFunctionCall", - "src": "19743:15:43" - }, - "nativeSrc": "19743:15:43", - "nodeType": "YulExpressionStatement", - "src": "19743:15:43" - } - ] - }, - "name": "panic_error_0x32", - "nativeSrc": "19637:127:43", - "nodeType": "YulFunctionDefinition", - "src": "19637:127:43" - }, - { - "body": { - "nativeSrc": "19877:223:43", - "nodeType": "YulBlock", - "src": "19877:223:43", - "statements": [ - { - "nativeSrc": "19887:51:43", - "nodeType": "YulVariableDeclaration", - "src": "19887:51:43", - "value": { - "arguments": [ - { - "name": "ptr_to_tail", - "nativeSrc": "19926:11:43", - "nodeType": "YulIdentifier", - "src": "19926:11:43" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "19913:12:43", - "nodeType": "YulIdentifier", - "src": "19913:12:43" - }, - "nativeSrc": "19913:25:43", - "nodeType": "YulFunctionCall", - "src": "19913:25:43" - }, - "variables": [ - { - "name": "rel_offset_of_tail", - "nativeSrc": "19891:18:43", - "nodeType": "YulTypedName", - "src": "19891:18:43", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "20028:16:43", - "nodeType": "YulBlock", - "src": "20028:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "20037:1:43", - "nodeType": "YulLiteral", - "src": "20037:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "20040:1:43", - "nodeType": "YulLiteral", - "src": "20040:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "20030:6:43", - "nodeType": "YulIdentifier", - "src": "20030:6:43" - }, - "nativeSrc": "20030:12:43", - "nodeType": "YulFunctionCall", - "src": "20030:12:43" - }, - "nativeSrc": "20030:12:43", - "nodeType": "YulExpressionStatement", - "src": "20030:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "rel_offset_of_tail", - "nativeSrc": "19961:18:43", - "nodeType": "YulIdentifier", - "src": "19961:18:43" - }, - { - "arguments": [ - { - "arguments": [ - { - "arguments": [], - "functionName": { - "name": "calldatasize", - "nativeSrc": "19989:12:43", - "nodeType": "YulIdentifier", - "src": "19989:12:43" - }, - "nativeSrc": "19989:14:43", - "nodeType": "YulFunctionCall", - "src": "19989:14:43" - }, - { - "name": "base_ref", - "nativeSrc": "20005:8:43", - "nodeType": "YulIdentifier", - "src": "20005:8:43" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "19985:3:43", - "nodeType": "YulIdentifier", - "src": "19985:3:43" - }, - "nativeSrc": "19985:29:43", - "nodeType": "YulFunctionCall", - "src": "19985:29:43" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "20020:3:43", - "nodeType": "YulLiteral", - "src": "20020:3:43", - "type": "", - "value": "318" - } - ], - "functionName": { - "name": "not", - "nativeSrc": "20016:3:43", - "nodeType": "YulIdentifier", - "src": "20016:3:43" - }, - "nativeSrc": "20016:8:43", - "nodeType": "YulFunctionCall", - "src": "20016:8:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "19981:3:43", - "nodeType": "YulIdentifier", - "src": "19981:3:43" - }, - "nativeSrc": "19981:44:43", - "nodeType": "YulFunctionCall", - "src": "19981:44:43" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "19957:3:43", - "nodeType": "YulIdentifier", - "src": "19957:3:43" - }, - "nativeSrc": "19957:69:43", - "nodeType": "YulFunctionCall", - "src": "19957:69:43" - } - ], - "functionName": { - "name": "iszero", - "nativeSrc": "19950:6:43", - "nodeType": "YulIdentifier", - "src": "19950:6:43" - }, - "nativeSrc": "19950:77:43", - "nodeType": "YulFunctionCall", - "src": "19950:77:43" - }, - "nativeSrc": "19947:97:43", - "nodeType": "YulIf", - "src": "19947:97:43" - }, - { - "nativeSrc": "20053:41:43", - "nodeType": "YulAssignment", - "src": "20053:41:43", - "value": { - "arguments": [ - { - "name": "base_ref", - "nativeSrc": "20065:8:43", - "nodeType": "YulIdentifier", - "src": "20065:8:43" - }, - { - "name": "rel_offset_of_tail", - "nativeSrc": "20075:18:43", - "nodeType": "YulIdentifier", - "src": "20075:18:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "20061:3:43", - "nodeType": "YulIdentifier", - "src": "20061:3:43" - }, - "nativeSrc": "20061:33:43", - "nodeType": "YulFunctionCall", - "src": "20061:33:43" - }, - "variableNames": [ - { - "name": "addr", - "nativeSrc": "20053:4:43", - "nodeType": "YulIdentifier", - "src": "20053:4:43" - } - ] - } - ] - }, - "name": "access_calldata_tail_t_struct$_InboundPacket_$2486_calldata_ptr", - "nativeSrc": "19769:331:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "base_ref", - "nativeSrc": "19842:8:43", - "nodeType": "YulTypedName", - "src": "19842:8:43", - "type": "" - }, - { - "name": "ptr_to_tail", - "nativeSrc": "19852:11:43", - "nodeType": "YulTypedName", - "src": "19852:11:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "addr", - "nativeSrc": "19868:4:43", - "nodeType": "YulTypedName", - "src": "19868:4:43", - "type": "" - } - ], - "src": "19769:331:43" - }, - { - "body": { - "nativeSrc": "20199:427:43", - "nodeType": "YulBlock", - "src": "20199:427:43", - "statements": [ - { - "nativeSrc": "20209:51:43", - "nodeType": "YulVariableDeclaration", - "src": "20209:51:43", - "value": { - "arguments": [ - { - "name": "ptr_to_tail", - "nativeSrc": "20248:11:43", - "nodeType": "YulIdentifier", - "src": "20248:11:43" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "20235:12:43", - "nodeType": "YulIdentifier", - "src": "20235:12:43" - }, - "nativeSrc": "20235:25:43", - "nodeType": "YulFunctionCall", - "src": "20235:25:43" - }, - "variables": [ - { - "name": "rel_offset_of_tail", - "nativeSrc": "20213:18:43", - "nodeType": "YulTypedName", - "src": "20213:18:43", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "20349:16:43", - "nodeType": "YulBlock", - "src": "20349:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "20358:1:43", - "nodeType": "YulLiteral", - "src": "20358:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "20361:1:43", - "nodeType": "YulLiteral", - "src": "20361:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "20351:6:43", - "nodeType": "YulIdentifier", - "src": "20351:6:43" - }, - "nativeSrc": "20351:12:43", - "nodeType": "YulFunctionCall", - "src": "20351:12:43" - }, - "nativeSrc": "20351:12:43", - "nodeType": "YulExpressionStatement", - "src": "20351:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "rel_offset_of_tail", - "nativeSrc": "20283:18:43", - "nodeType": "YulIdentifier", - "src": "20283:18:43" - }, - { - "arguments": [ - { - "arguments": [ - { - "arguments": [], - "functionName": { - "name": "calldatasize", - "nativeSrc": "20311:12:43", - "nodeType": "YulIdentifier", - "src": "20311:12:43" - }, - "nativeSrc": "20311:14:43", - "nodeType": "YulFunctionCall", - "src": "20311:14:43" - }, - { - "name": "base_ref", - "nativeSrc": "20327:8:43", - "nodeType": "YulIdentifier", - "src": "20327:8:43" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "20307:3:43", - "nodeType": "YulIdentifier", - "src": "20307:3:43" - }, - "nativeSrc": "20307:29:43", - "nodeType": "YulFunctionCall", - "src": "20307:29:43" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "20342:2:43", - "nodeType": "YulLiteral", - "src": "20342:2:43", - "type": "", - "value": "30" - } - ], - "functionName": { - "name": "not", - "nativeSrc": "20338:3:43", - "nodeType": "YulIdentifier", - "src": "20338:3:43" - }, - "nativeSrc": "20338:7:43", - "nodeType": "YulFunctionCall", - "src": "20338:7:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "20303:3:43", - "nodeType": "YulIdentifier", - "src": "20303:3:43" - }, - "nativeSrc": "20303:43:43", - "nodeType": "YulFunctionCall", - "src": "20303:43:43" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "20279:3:43", - "nodeType": "YulIdentifier", - "src": "20279:3:43" - }, - "nativeSrc": "20279:68:43", - "nodeType": "YulFunctionCall", - "src": "20279:68:43" - } - ], - "functionName": { - "name": "iszero", - "nativeSrc": "20272:6:43", - "nodeType": "YulIdentifier", - "src": "20272:6:43" - }, - "nativeSrc": "20272:76:43", - "nodeType": "YulFunctionCall", - "src": "20272:76:43" - }, - "nativeSrc": "20269:96:43", - "nodeType": "YulIf", - "src": "20269:96:43" - }, - { - "nativeSrc": "20374:47:43", - "nodeType": "YulVariableDeclaration", - "src": "20374:47:43", - "value": { - "arguments": [ - { - "name": "base_ref", - "nativeSrc": "20392:8:43", - "nodeType": "YulIdentifier", - "src": "20392:8:43" - }, - { - "name": "rel_offset_of_tail", - "nativeSrc": "20402:18:43", - "nodeType": "YulIdentifier", - "src": "20402:18:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "20388:3:43", - "nodeType": "YulIdentifier", - "src": "20388:3:43" - }, - "nativeSrc": "20388:33:43", - "nodeType": "YulFunctionCall", - "src": "20388:33:43" - }, - "variables": [ - { - "name": "addr_1", - "nativeSrc": "20378:6:43", - "nodeType": "YulTypedName", - "src": "20378:6:43", - "type": "" - } - ] - }, - { - "nativeSrc": "20430:30:43", - "nodeType": "YulAssignment", - "src": "20430:30:43", - "value": { - "arguments": [ - { - "name": "addr_1", - "nativeSrc": "20453:6:43", - "nodeType": "YulIdentifier", - "src": "20453:6:43" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "20440:12:43", - "nodeType": "YulIdentifier", - "src": "20440:12:43" - }, - "nativeSrc": "20440:20:43", - "nodeType": "YulFunctionCall", - "src": "20440:20:43" - }, - "variableNames": [ - { - "name": "length", - "nativeSrc": "20430:6:43", - "nodeType": "YulIdentifier", - "src": "20430:6:43" - } - ] - }, - { - "body": { - "nativeSrc": "20503:16:43", - "nodeType": "YulBlock", - "src": "20503:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "20512:1:43", - "nodeType": "YulLiteral", - "src": "20512:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "20515:1:43", - "nodeType": "YulLiteral", - "src": "20515:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "20505:6:43", - "nodeType": "YulIdentifier", - "src": "20505:6:43" - }, - "nativeSrc": "20505:12:43", - "nodeType": "YulFunctionCall", - "src": "20505:12:43" - }, - "nativeSrc": "20505:12:43", - "nodeType": "YulExpressionStatement", - "src": "20505:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "length", - "nativeSrc": "20475:6:43", - "nodeType": "YulIdentifier", - "src": "20475:6:43" - }, - { - "kind": "number", - "nativeSrc": "20483:18:43", - "nodeType": "YulLiteral", - "src": "20483:18:43", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "20472:2:43", - "nodeType": "YulIdentifier", - "src": "20472:2:43" - }, - "nativeSrc": "20472:30:43", - "nodeType": "YulFunctionCall", - "src": "20472:30:43" - }, - "nativeSrc": "20469:50:43", - "nodeType": "YulIf", - "src": "20469:50:43" - }, - { - "nativeSrc": "20528:25:43", - "nodeType": "YulAssignment", - "src": "20528:25:43", - "value": { - "arguments": [ - { - "name": "addr_1", - "nativeSrc": "20540:6:43", - "nodeType": "YulIdentifier", - "src": "20540:6:43" - }, - { - "kind": "number", - "nativeSrc": "20548:4:43", - "nodeType": "YulLiteral", - "src": "20548:4:43", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "20536:3:43", - "nodeType": "YulIdentifier", - "src": "20536:3:43" - }, - "nativeSrc": "20536:17:43", - "nodeType": "YulFunctionCall", - "src": "20536:17:43" - }, - "variableNames": [ - { - "name": "addr", - "nativeSrc": "20528:4:43", - "nodeType": "YulIdentifier", - "src": "20528:4:43" - } - ] - }, - { - "body": { - "nativeSrc": "20604:16:43", - "nodeType": "YulBlock", - "src": "20604:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "20613:1:43", - "nodeType": "YulLiteral", - "src": "20613:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "20616:1:43", - "nodeType": "YulLiteral", - "src": "20616:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "20606:6:43", - "nodeType": "YulIdentifier", - "src": "20606:6:43" - }, - "nativeSrc": "20606:12:43", - "nodeType": "YulFunctionCall", - "src": "20606:12:43" - }, - "nativeSrc": "20606:12:43", - "nodeType": "YulExpressionStatement", - "src": "20606:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "addr", - "nativeSrc": "20569:4:43", - "nodeType": "YulIdentifier", - "src": "20569:4:43" - }, - { - "arguments": [ - { - "arguments": [], - "functionName": { - "name": "calldatasize", - "nativeSrc": "20579:12:43", - "nodeType": "YulIdentifier", - "src": "20579:12:43" - }, - "nativeSrc": "20579:14:43", - "nodeType": "YulFunctionCall", - "src": "20579:14:43" - }, - { - "name": "length", - "nativeSrc": "20595:6:43", - "nodeType": "YulIdentifier", - "src": "20595:6:43" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "20575:3:43", - "nodeType": "YulIdentifier", - "src": "20575:3:43" - }, - "nativeSrc": "20575:27:43", - "nodeType": "YulFunctionCall", - "src": "20575:27:43" - } - ], - "functionName": { - "name": "sgt", - "nativeSrc": "20565:3:43", - "nodeType": "YulIdentifier", - "src": "20565:3:43" - }, - "nativeSrc": "20565:38:43", - "nodeType": "YulFunctionCall", - "src": "20565:38:43" - }, - "nativeSrc": "20562:58:43", - "nodeType": "YulIf", - "src": "20562:58:43" - } - ] - }, - "name": "access_calldata_tail_t_bytes_calldata_ptr", - "nativeSrc": "20105:521:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "base_ref", - "nativeSrc": "20156:8:43", - "nodeType": "YulTypedName", - "src": "20156:8:43", - "type": "" - }, - { - "name": "ptr_to_tail", - "nativeSrc": "20166:11:43", - "nodeType": "YulTypedName", - "src": "20166:11:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "addr", - "nativeSrc": "20182:4:43", - "nodeType": "YulTypedName", - "src": "20182:4:43", - "type": "" - }, - { - "name": "length", - "nativeSrc": "20188:6:43", - "nodeType": "YulTypedName", - "src": "20188:6:43", - "type": "" - } - ], - "src": "20105:521:43" - }, - { - "body": { - "nativeSrc": "20675:85:43", - "nodeType": "YulBlock", - "src": "20675:85:43", - "statements": [ - { - "body": { - "nativeSrc": "20738:16:43", - "nodeType": "YulBlock", - "src": "20738:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "20747:1:43", - "nodeType": "YulLiteral", - "src": "20747:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "20750:1:43", - "nodeType": "YulLiteral", - "src": "20750:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "20740:6:43", - "nodeType": "YulIdentifier", - "src": "20740:6:43" - }, - "nativeSrc": "20740:12:43", - "nodeType": "YulFunctionCall", - "src": "20740:12:43" - }, - "nativeSrc": "20740:12:43", - "nodeType": "YulExpressionStatement", - "src": "20740:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nativeSrc": "20698:5:43", - "nodeType": "YulIdentifier", - "src": "20698:5:43" - }, - { - "arguments": [ - { - "name": "value", - "nativeSrc": "20709:5:43", - "nodeType": "YulIdentifier", - "src": "20709:5:43" - }, - { - "kind": "number", - "nativeSrc": "20716:18:43", - "nodeType": "YulLiteral", - "src": "20716:18:43", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "20705:3:43", - "nodeType": "YulIdentifier", - "src": "20705:3:43" - }, - "nativeSrc": "20705:30:43", - "nodeType": "YulFunctionCall", - "src": "20705:30:43" - } - ], - "functionName": { - "name": "eq", - "nativeSrc": "20695:2:43", - "nodeType": "YulIdentifier", - "src": "20695:2:43" - }, - "nativeSrc": "20695:41:43", - "nodeType": "YulFunctionCall", - "src": "20695:41:43" - } - ], - "functionName": { - "name": "iszero", - "nativeSrc": "20688:6:43", - "nodeType": "YulIdentifier", - "src": "20688:6:43" - }, - "nativeSrc": "20688:49:43", - "nodeType": "YulFunctionCall", - "src": "20688:49:43" - }, - "nativeSrc": "20685:69:43", - "nodeType": "YulIf", - "src": "20685:69:43" - } - ] - }, - "name": "validator_revert_uint64", - "nativeSrc": "20631:129:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "value", - "nativeSrc": "20664:5:43", - "nodeType": "YulTypedName", - "src": "20664:5:43", - "type": "" - } - ], - "src": "20631:129:43" - }, - { - "body": { - "nativeSrc": "21080:673:43", - "nodeType": "YulBlock", - "src": "21080:673:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "21097:9:43", - "nodeType": "YulIdentifier", - "src": "21097:9:43" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nativeSrc": "21130:6:43", - "nodeType": "YulIdentifier", - "src": "21130:6:43" - } - ], - "functionName": { - "name": "abi_decode_uint32", - "nativeSrc": "21112:17:43", - "nodeType": "YulIdentifier", - "src": "21112:17:43" - }, - "nativeSrc": "21112:25:43", - "nodeType": "YulFunctionCall", - "src": "21112:25:43" - }, - { - "kind": "number", - "nativeSrc": "21139:10:43", - "nodeType": "YulLiteral", - "src": "21139:10:43", - "type": "", - "value": "0xffffffff" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "21108:3:43", - "nodeType": "YulIdentifier", - "src": "21108:3:43" - }, - "nativeSrc": "21108:42:43", - "nodeType": "YulFunctionCall", - "src": "21108:42:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "21090:6:43", - "nodeType": "YulIdentifier", - "src": "21090:6:43" - }, - "nativeSrc": "21090:61:43", - "nodeType": "YulFunctionCall", - "src": "21090:61:43" - }, - "nativeSrc": "21090:61:43", - "nodeType": "YulExpressionStatement", - "src": "21090:61:43" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "21171:9:43", - "nodeType": "YulIdentifier", - "src": "21171:9:43" - }, - { - "kind": "number", - "nativeSrc": "21182:4:43", - "nodeType": "YulLiteral", - "src": "21182:4:43", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "21167:3:43", - "nodeType": "YulIdentifier", - "src": "21167:3:43" - }, - "nativeSrc": "21167:20:43", - "nodeType": "YulFunctionCall", - "src": "21167:20:43" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nativeSrc": "21206:6:43", - "nodeType": "YulIdentifier", - "src": "21206:6:43" - }, - { - "kind": "number", - "nativeSrc": "21214:4:43", - "nodeType": "YulLiteral", - "src": "21214:4:43", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "21202:3:43", - "nodeType": "YulIdentifier", - "src": "21202:3:43" - }, - "nativeSrc": "21202:17:43", - "nodeType": "YulFunctionCall", - "src": "21202:17:43" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "21189:12:43", - "nodeType": "YulIdentifier", - "src": "21189:12:43" - }, - "nativeSrc": "21189:31:43", - "nodeType": "YulFunctionCall", - "src": "21189:31:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "21160:6:43", - "nodeType": "YulIdentifier", - "src": "21160:6:43" - }, - "nativeSrc": "21160:61:43", - "nodeType": "YulFunctionCall", - "src": "21160:61:43" - }, - "nativeSrc": "21160:61:43", - "nodeType": "YulExpressionStatement", - "src": "21160:61:43" - }, - { - "nativeSrc": "21230:44:43", - "nodeType": "YulVariableDeclaration", - "src": "21230:44:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nativeSrc": "21260:6:43", - "nodeType": "YulIdentifier", - "src": "21260:6:43" - }, - { - "kind": "number", - "nativeSrc": "21268:4:43", - "nodeType": "YulLiteral", - "src": "21268:4:43", - "type": "", - "value": "0x40" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "21256:3:43", - "nodeType": "YulIdentifier", - "src": "21256:3:43" - }, - "nativeSrc": "21256:17:43", - "nodeType": "YulFunctionCall", - "src": "21256:17:43" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "21243:12:43", - "nodeType": "YulIdentifier", - "src": "21243:12:43" - }, - "nativeSrc": "21243:31:43", - "nodeType": "YulFunctionCall", - "src": "21243:31:43" - }, - "variables": [ - { - "name": "value", - "nativeSrc": "21234:5:43", - "nodeType": "YulTypedName", - "src": "21234:5:43", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nativeSrc": "21307:5:43", - "nodeType": "YulIdentifier", - "src": "21307:5:43" - } - ], - "functionName": { - "name": "validator_revert_uint64", - "nativeSrc": "21283:23:43", - "nodeType": "YulIdentifier", - "src": "21283:23:43" - }, - "nativeSrc": "21283:30:43", - "nodeType": "YulFunctionCall", - "src": "21283:30:43" - }, - "nativeSrc": "21283:30:43", - "nodeType": "YulExpressionStatement", - "src": "21283:30:43" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "21333:9:43", - "nodeType": "YulIdentifier", - "src": "21333:9:43" - }, - { - "kind": "number", - "nativeSrc": "21344:4:43", - "nodeType": "YulLiteral", - "src": "21344:4:43", - "type": "", - "value": "0x40" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "21329:3:43", - "nodeType": "YulIdentifier", - "src": "21329:3:43" - }, - "nativeSrc": "21329:20:43", - "nodeType": "YulFunctionCall", - "src": "21329:20:43" - }, - { - "arguments": [ - { - "name": "value", - "nativeSrc": "21355:5:43", - "nodeType": "YulIdentifier", - "src": "21355:5:43" - }, - { - "kind": "number", - "nativeSrc": "21362:18:43", - "nodeType": "YulLiteral", - "src": "21362:18:43", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "21351:3:43", - "nodeType": "YulIdentifier", - "src": "21351:3:43" - }, - "nativeSrc": "21351:30:43", - "nodeType": "YulFunctionCall", - "src": "21351:30:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "21322:6:43", - "nodeType": "YulIdentifier", - "src": "21322:6:43" - }, - "nativeSrc": "21322:60:43", - "nodeType": "YulFunctionCall", - "src": "21322:60:43" - }, - "nativeSrc": "21322:60:43", - "nodeType": "YulExpressionStatement", - "src": "21322:60:43" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "21402:9:43", - "nodeType": "YulIdentifier", - "src": "21402:9:43" - }, - { - "kind": "number", - "nativeSrc": "21413:2:43", - "nodeType": "YulLiteral", - "src": "21413:2:43", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "21398:3:43", - "nodeType": "YulIdentifier", - "src": "21398:3:43" - }, - "nativeSrc": "21398:18:43", - "nodeType": "YulFunctionCall", - "src": "21398:18:43" - }, - { - "name": "value1", - "nativeSrc": "21418:6:43", - "nodeType": "YulIdentifier", - "src": "21418:6:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "21391:6:43", - "nodeType": "YulIdentifier", - "src": "21391:6:43" - }, - "nativeSrc": "21391:34:43", - "nodeType": "YulFunctionCall", - "src": "21391:34:43" - }, - "nativeSrc": "21391:34:43", - "nodeType": "YulExpressionStatement", - "src": "21391:34:43" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "21445:9:43", - "nodeType": "YulIdentifier", - "src": "21445:9:43" - }, - { - "kind": "number", - "nativeSrc": "21456:3:43", - "nodeType": "YulLiteral", - "src": "21456:3:43", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "21441:3:43", - "nodeType": "YulIdentifier", - "src": "21441:3:43" - }, - "nativeSrc": "21441:19:43", - "nodeType": "YulFunctionCall", - "src": "21441:19:43" - }, - { - "kind": "number", - "nativeSrc": "21462:3:43", - "nodeType": "YulLiteral", - "src": "21462:3:43", - "type": "", - "value": "224" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "21434:6:43", - "nodeType": "YulIdentifier", - "src": "21434:6:43" - }, - "nativeSrc": "21434:32:43", - "nodeType": "YulFunctionCall", - "src": "21434:32:43" - }, - "nativeSrc": "21434:32:43", - "nodeType": "YulExpressionStatement", - "src": "21434:32:43" - }, - { - "nativeSrc": "21475:76:43", - "nodeType": "YulVariableDeclaration", - "src": "21475:76:43", - "value": { - "arguments": [ - { - "name": "value2", - "nativeSrc": "21515:6:43", - "nodeType": "YulIdentifier", - "src": "21515:6:43" - }, - { - "name": "value3", - "nativeSrc": "21523:6:43", - "nodeType": "YulIdentifier", - "src": "21523:6:43" - }, - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "21535:9:43", - "nodeType": "YulIdentifier", - "src": "21535:9:43" - }, - { - "kind": "number", - "nativeSrc": "21546:3:43", - "nodeType": "YulLiteral", - "src": "21546:3:43", - "type": "", - "value": "224" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "21531:3:43", - "nodeType": "YulIdentifier", - "src": "21531:3:43" - }, - "nativeSrc": "21531:19:43", - "nodeType": "YulFunctionCall", - "src": "21531:19:43" - } - ], - "functionName": { - "name": "abi_encode_bytes_calldata", - "nativeSrc": "21489:25:43", - "nodeType": "YulIdentifier", - "src": "21489:25:43" - }, - "nativeSrc": "21489:62:43", - "nodeType": "YulFunctionCall", - "src": "21489:62:43" - }, - "variables": [ - { - "name": "tail_1", - "nativeSrc": "21479:6:43", - "nodeType": "YulTypedName", - "src": "21479:6:43", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "21571:9:43", - "nodeType": "YulIdentifier", - "src": "21571:9:43" - }, - { - "kind": "number", - "nativeSrc": "21582:3:43", - "nodeType": "YulLiteral", - "src": "21582:3:43", - "type": "", - "value": "160" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "21567:3:43", - "nodeType": "YulIdentifier", - "src": "21567:3:43" - }, - "nativeSrc": "21567:19:43", - "nodeType": "YulFunctionCall", - "src": "21567:19:43" - }, - { - "arguments": [ - { - "name": "value4", - "nativeSrc": "21592:6:43", - "nodeType": "YulIdentifier", - "src": "21592:6:43" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "21608:3:43", - "nodeType": "YulLiteral", - "src": "21608:3:43", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nativeSrc": "21613:1:43", - "nodeType": "YulLiteral", - "src": "21613:1:43", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "21604:3:43", - "nodeType": "YulIdentifier", - "src": "21604:3:43" - }, - "nativeSrc": "21604:11:43", - "nodeType": "YulFunctionCall", - "src": "21604:11:43" - }, - { - "kind": "number", - "nativeSrc": "21617:1:43", - "nodeType": "YulLiteral", - "src": "21617:1:43", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "21600:3:43", - "nodeType": "YulIdentifier", - "src": "21600:3:43" - }, - "nativeSrc": "21600:19:43", - "nodeType": "YulFunctionCall", - "src": "21600:19:43" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "21588:3:43", - "nodeType": "YulIdentifier", - "src": "21588:3:43" - }, - "nativeSrc": "21588:32:43", - "nodeType": "YulFunctionCall", - "src": "21588:32:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "21560:6:43", - "nodeType": "YulIdentifier", - "src": "21560:6:43" - }, - "nativeSrc": "21560:61:43", - "nodeType": "YulFunctionCall", - "src": "21560:61:43" - }, - "nativeSrc": "21560:61:43", - "nodeType": "YulExpressionStatement", - "src": "21560:61:43" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "21641:9:43", - "nodeType": "YulIdentifier", - "src": "21641:9:43" - }, - { - "kind": "number", - "nativeSrc": "21652:3:43", - "nodeType": "YulLiteral", - "src": "21652:3:43", - "type": "", - "value": "192" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "21637:3:43", - "nodeType": "YulIdentifier", - "src": "21637:3:43" - }, - "nativeSrc": "21637:19:43", - "nodeType": "YulFunctionCall", - "src": "21637:19:43" - }, - { - "arguments": [ - { - "name": "tail_1", - "nativeSrc": "21662:6:43", - "nodeType": "YulIdentifier", - "src": "21662:6:43" - }, - { - "name": "headStart", - "nativeSrc": "21670:9:43", - "nodeType": "YulIdentifier", - "src": "21670:9:43" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "21658:3:43", - "nodeType": "YulIdentifier", - "src": "21658:3:43" - }, - "nativeSrc": "21658:22:43", - "nodeType": "YulFunctionCall", - "src": "21658:22:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "21630:6:43", - "nodeType": "YulIdentifier", - "src": "21630:6:43" - }, - "nativeSrc": "21630:51:43", - "nodeType": "YulFunctionCall", - "src": "21630:51:43" - }, - "nativeSrc": "21630:51:43", - "nodeType": "YulExpressionStatement", - "src": "21630:51:43" - }, - { - "nativeSrc": "21690:57:43", - "nodeType": "YulAssignment", - "src": "21690:57:43", - "value": { - "arguments": [ - { - "name": "value5", - "nativeSrc": "21724:6:43", - "nodeType": "YulIdentifier", - "src": "21724:6:43" - }, - { - "name": "value6", - "nativeSrc": "21732:6:43", - "nodeType": "YulIdentifier", - "src": "21732:6:43" - }, - { - "name": "tail_1", - "nativeSrc": "21740:6:43", - "nodeType": "YulIdentifier", - "src": "21740:6:43" - } - ], - "functionName": { - "name": "abi_encode_bytes_calldata", - "nativeSrc": "21698:25:43", - "nodeType": "YulIdentifier", - "src": "21698:25:43" - }, - "nativeSrc": "21698:49:43", - "nodeType": "YulFunctionCall", - "src": "21698:49:43" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "21690:4:43", - "nodeType": "YulIdentifier", - "src": "21690:4:43" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_struct$_Origin_$40_calldata_ptr_t_bytes32_t_bytes_calldata_ptr_t_address_t_bytes_calldata_ptr__to_t_struct$_Origin_$40_memory_ptr_t_bytes32_t_bytes_memory_ptr_t_address_t_bytes_memory_ptr__fromStack_reversed", - "nativeSrc": "20765:988:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "21001:9:43", - "nodeType": "YulTypedName", - "src": "21001:9:43", - "type": "" - }, - { - "name": "value6", - "nativeSrc": "21012:6:43", - "nodeType": "YulTypedName", - "src": "21012:6:43", - "type": "" - }, - { - "name": "value5", - "nativeSrc": "21020:6:43", - "nodeType": "YulTypedName", - "src": "21020:6:43", - "type": "" - }, - { - "name": "value4", - "nativeSrc": "21028:6:43", - "nodeType": "YulTypedName", - "src": "21028:6:43", - "type": "" - }, - { - "name": "value3", - "nativeSrc": "21036:6:43", - "nodeType": "YulTypedName", - "src": "21036:6:43", - "type": "" - }, - { - "name": "value2", - "nativeSrc": "21044:6:43", - "nodeType": "YulTypedName", - "src": "21044:6:43", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "21052:6:43", - "nodeType": "YulTypedName", - "src": "21052:6:43", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "21060:6:43", - "nodeType": "YulTypedName", - "src": "21060:6:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "21071:4:43", - "nodeType": "YulTypedName", - "src": "21071:4:43", - "type": "" - } - ], - "src": "20765:988:43" - }, - { - "body": { - "nativeSrc": "21848:557:43", - "nodeType": "YulBlock", - "src": "21848:557:43", - "statements": [ - { - "body": { - "nativeSrc": "21894:16:43", - "nodeType": "YulBlock", - "src": "21894:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "21903:1:43", - "nodeType": "YulLiteral", - "src": "21903:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "21906:1:43", - "nodeType": "YulLiteral", - "src": "21906:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "21896:6:43", - "nodeType": "YulIdentifier", - "src": "21896:6:43" - }, - "nativeSrc": "21896:12:43", - "nodeType": "YulFunctionCall", - "src": "21896:12:43" - }, - "nativeSrc": "21896:12:43", - "nodeType": "YulExpressionStatement", - "src": "21896:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nativeSrc": "21869:7:43", - "nodeType": "YulIdentifier", - "src": "21869:7:43" - }, - { - "name": "headStart", - "nativeSrc": "21878:9:43", - "nodeType": "YulIdentifier", - "src": "21878:9:43" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "21865:3:43", - "nodeType": "YulIdentifier", - "src": "21865:3:43" - }, - "nativeSrc": "21865:23:43", - "nodeType": "YulFunctionCall", - "src": "21865:23:43" - }, - { - "kind": "number", - "nativeSrc": "21890:2:43", - "nodeType": "YulLiteral", - "src": "21890:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "21861:3:43", - "nodeType": "YulIdentifier", - "src": "21861:3:43" - }, - "nativeSrc": "21861:32:43", - "nodeType": "YulFunctionCall", - "src": "21861:32:43" - }, - "nativeSrc": "21858:52:43", - "nodeType": "YulIf", - "src": "21858:52:43" - }, - { - "nativeSrc": "21919:30:43", - "nodeType": "YulVariableDeclaration", - "src": "21919:30:43", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "21939:9:43", - "nodeType": "YulIdentifier", - "src": "21939:9:43" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "21933:5:43", - "nodeType": "YulIdentifier", - "src": "21933:5:43" - }, - "nativeSrc": "21933:16:43", - "nodeType": "YulFunctionCall", - "src": "21933:16:43" - }, - "variables": [ - { - "name": "offset", - "nativeSrc": "21923:6:43", - "nodeType": "YulTypedName", - "src": "21923:6:43", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "21992:16:43", - "nodeType": "YulBlock", - "src": "21992:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "22001:1:43", - "nodeType": "YulLiteral", - "src": "22001:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "22004:1:43", - "nodeType": "YulLiteral", - "src": "22004:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "21994:6:43", - "nodeType": "YulIdentifier", - "src": "21994:6:43" - }, - "nativeSrc": "21994:12:43", - "nodeType": "YulFunctionCall", - "src": "21994:12:43" - }, - "nativeSrc": "21994:12:43", - "nodeType": "YulExpressionStatement", - "src": "21994:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "offset", - "nativeSrc": "21964:6:43", - "nodeType": "YulIdentifier", - "src": "21964:6:43" - }, - { - "kind": "number", - "nativeSrc": "21972:18:43", - "nodeType": "YulLiteral", - "src": "21972:18:43", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "21961:2:43", - "nodeType": "YulIdentifier", - "src": "21961:2:43" - }, - "nativeSrc": "21961:30:43", - "nodeType": "YulFunctionCall", - "src": "21961:30:43" - }, - "nativeSrc": "21958:50:43", - "nodeType": "YulIf", - "src": "21958:50:43" - }, - { - "nativeSrc": "22017:32:43", - "nodeType": "YulVariableDeclaration", - "src": "22017:32:43", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "22031:9:43", - "nodeType": "YulIdentifier", - "src": "22031:9:43" - }, - { - "name": "offset", - "nativeSrc": "22042:6:43", - "nodeType": "YulIdentifier", - "src": "22042:6:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "22027:3:43", - "nodeType": "YulIdentifier", - "src": "22027:3:43" - }, - "nativeSrc": "22027:22:43", - "nodeType": "YulFunctionCall", - "src": "22027:22:43" - }, - "variables": [ - { - "name": "_1", - "nativeSrc": "22021:2:43", - "nodeType": "YulTypedName", - "src": "22021:2:43", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "22097:16:43", - "nodeType": "YulBlock", - "src": "22097:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "22106:1:43", - "nodeType": "YulLiteral", - "src": "22106:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "22109:1:43", - "nodeType": "YulLiteral", - "src": "22109:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "22099:6:43", - "nodeType": "YulIdentifier", - "src": "22099:6:43" - }, - "nativeSrc": "22099:12:43", - "nodeType": "YulFunctionCall", - "src": "22099:12:43" - }, - "nativeSrc": "22099:12:43", - "nodeType": "YulExpressionStatement", - "src": "22099:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "_1", - "nativeSrc": "22076:2:43", - "nodeType": "YulIdentifier", - "src": "22076:2:43" - }, - { - "kind": "number", - "nativeSrc": "22080:4:43", - "nodeType": "YulLiteral", - "src": "22080:4:43", - "type": "", - "value": "0x1f" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "22072:3:43", - "nodeType": "YulIdentifier", - "src": "22072:3:43" - }, - "nativeSrc": "22072:13:43", - "nodeType": "YulFunctionCall", - "src": "22072:13:43" - }, - { - "name": "dataEnd", - "nativeSrc": "22087:7:43", - "nodeType": "YulIdentifier", - "src": "22087:7:43" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "22068:3:43", - "nodeType": "YulIdentifier", - "src": "22068:3:43" - }, - "nativeSrc": "22068:27:43", - "nodeType": "YulFunctionCall", - "src": "22068:27:43" - } - ], - "functionName": { - "name": "iszero", - "nativeSrc": "22061:6:43", - "nodeType": "YulIdentifier", - "src": "22061:6:43" - }, - "nativeSrc": "22061:35:43", - "nodeType": "YulFunctionCall", - "src": "22061:35:43" - }, - "nativeSrc": "22058:55:43", - "nodeType": "YulIf", - "src": "22058:55:43" - }, - { - "nativeSrc": "22122:19:43", - "nodeType": "YulVariableDeclaration", - "src": "22122:19:43", - "value": { - "arguments": [ - { - "name": "_1", - "nativeSrc": "22138:2:43", - "nodeType": "YulIdentifier", - "src": "22138:2:43" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "22132:5:43", - "nodeType": "YulIdentifier", - "src": "22132:5:43" - }, - "nativeSrc": "22132:9:43", - "nodeType": "YulFunctionCall", - "src": "22132:9:43" - }, - "variables": [ - { - "name": "_2", - "nativeSrc": "22126:2:43", - "nodeType": "YulTypedName", - "src": "22126:2:43", - "type": "" - } - ] - }, - { - "nativeSrc": "22150:61:43", - "nodeType": "YulVariableDeclaration", - "src": "22150:61:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "_2", - "nativeSrc": "22207:2:43", - "nodeType": "YulIdentifier", - "src": "22207:2:43" - } - ], - "functionName": { - "name": "array_allocation_size_bytes", - "nativeSrc": "22179:27:43", - "nodeType": "YulIdentifier", - "src": "22179:27:43" - }, - "nativeSrc": "22179:31:43", - "nodeType": "YulFunctionCall", - "src": "22179:31:43" - } - ], - "functionName": { - "name": "allocate_memory", - "nativeSrc": "22163:15:43", - "nodeType": "YulIdentifier", - "src": "22163:15:43" - }, - "nativeSrc": "22163:48:43", - "nodeType": "YulFunctionCall", - "src": "22163:48:43" - }, - "variables": [ - { - "name": "array", - "nativeSrc": "22154:5:43", - "nodeType": "YulTypedName", - "src": "22154:5:43", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "array", - "nativeSrc": "22227:5:43", - "nodeType": "YulIdentifier", - "src": "22227:5:43" - }, - { - "name": "_2", - "nativeSrc": "22234:2:43", - "nodeType": "YulIdentifier", - "src": "22234:2:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "22220:6:43", - "nodeType": "YulIdentifier", - "src": "22220:6:43" - }, - "nativeSrc": "22220:17:43", - "nodeType": "YulFunctionCall", - "src": "22220:17:43" - }, - "nativeSrc": "22220:17:43", - "nodeType": "YulExpressionStatement", - "src": "22220:17:43" - }, - { - "body": { - "nativeSrc": "22283:16:43", - "nodeType": "YulBlock", - "src": "22283:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "22292:1:43", - "nodeType": "YulLiteral", - "src": "22292:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "22295:1:43", - "nodeType": "YulLiteral", - "src": "22295:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "22285:6:43", - "nodeType": "YulIdentifier", - "src": "22285:6:43" - }, - "nativeSrc": "22285:12:43", - "nodeType": "YulFunctionCall", - "src": "22285:12:43" - }, - "nativeSrc": "22285:12:43", - "nodeType": "YulExpressionStatement", - "src": "22285:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "_1", - "nativeSrc": "22260:2:43", - "nodeType": "YulIdentifier", - "src": "22260:2:43" - }, - { - "name": "_2", - "nativeSrc": "22264:2:43", - "nodeType": "YulIdentifier", - "src": "22264:2:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "22256:3:43", - "nodeType": "YulIdentifier", - "src": "22256:3:43" - }, - "nativeSrc": "22256:11:43", - "nodeType": "YulFunctionCall", - "src": "22256:11:43" - }, - { - "kind": "number", - "nativeSrc": "22269:2:43", - "nodeType": "YulLiteral", - "src": "22269:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "22252:3:43", - "nodeType": "YulIdentifier", - "src": "22252:3:43" - }, - "nativeSrc": "22252:20:43", - "nodeType": "YulFunctionCall", - "src": "22252:20:43" - }, - { - "name": "dataEnd", - "nativeSrc": "22274:7:43", - "nodeType": "YulIdentifier", - "src": "22274:7:43" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "22249:2:43", - "nodeType": "YulIdentifier", - "src": "22249:2:43" - }, - "nativeSrc": "22249:33:43", - "nodeType": "YulFunctionCall", - "src": "22249:33:43" - }, - "nativeSrc": "22246:53:43", - "nodeType": "YulIf", - "src": "22246:53:43" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "_1", - "nativeSrc": "22347:2:43", - "nodeType": "YulIdentifier", - "src": "22347:2:43" - }, - { - "kind": "number", - "nativeSrc": "22351:2:43", - "nodeType": "YulLiteral", - "src": "22351:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "22343:3:43", - "nodeType": "YulIdentifier", - "src": "22343:3:43" - }, - "nativeSrc": "22343:11:43", - "nodeType": "YulFunctionCall", - "src": "22343:11:43" - }, - { - "arguments": [ - { - "name": "array", - "nativeSrc": "22360:5:43", - "nodeType": "YulIdentifier", - "src": "22360:5:43" - }, - { - "kind": "number", - "nativeSrc": "22367:2:43", - "nodeType": "YulLiteral", - "src": "22367:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "22356:3:43", - "nodeType": "YulIdentifier", - "src": "22356:3:43" - }, - "nativeSrc": "22356:14:43", - "nodeType": "YulFunctionCall", - "src": "22356:14:43" - }, - { - "name": "_2", - "nativeSrc": "22372:2:43", - "nodeType": "YulIdentifier", - "src": "22372:2:43" - } - ], - "functionName": { - "name": "copy_memory_to_memory_with_cleanup", - "nativeSrc": "22308:34:43", - "nodeType": "YulIdentifier", - "src": "22308:34:43" - }, - "nativeSrc": "22308:67:43", - "nodeType": "YulFunctionCall", - "src": "22308:67:43" - }, - "nativeSrc": "22308:67:43", - "nodeType": "YulExpressionStatement", - "src": "22308:67:43" - }, - { - "nativeSrc": "22384:15:43", - "nodeType": "YulAssignment", - "src": "22384:15:43", - "value": { - "name": "array", - "nativeSrc": "22394:5:43", - "nodeType": "YulIdentifier", - "src": "22394:5:43" - }, - "variableNames": [ - { - "name": "value0", - "nativeSrc": "22384:6:43", - "nodeType": "YulIdentifier", - "src": "22384:6:43" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_bytes_memory_ptr_fromMemory", - "nativeSrc": "21758:647:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "21814:9:43", - "nodeType": "YulTypedName", - "src": "21814:9:43", - "type": "" - }, - { - "name": "dataEnd", - "nativeSrc": "21825:7:43", - "nodeType": "YulTypedName", - "src": "21825:7:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nativeSrc": "21837:6:43", - "nodeType": "YulTypedName", - "src": "21837:6:43", - "type": "" - } - ], - "src": "21758:647:43" - }, - { - "body": { - "nativeSrc": "22539:119:43", - "nodeType": "YulBlock", - "src": "22539:119:43", - "statements": [ - { - "nativeSrc": "22549:26:43", - "nodeType": "YulAssignment", - "src": "22549:26:43", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "22561:9:43", - "nodeType": "YulIdentifier", - "src": "22561:9:43" - }, - { - "kind": "number", - "nativeSrc": "22572:2:43", - "nodeType": "YulLiteral", - "src": "22572:2:43", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "22557:3:43", - "nodeType": "YulIdentifier", - "src": "22557:3:43" - }, - "nativeSrc": "22557:18:43", - "nodeType": "YulFunctionCall", - "src": "22557:18:43" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "22549:4:43", - "nodeType": "YulIdentifier", - "src": "22549:4:43" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "22591:9:43", - "nodeType": "YulIdentifier", - "src": "22591:9:43" - }, - { - "name": "value0", - "nativeSrc": "22602:6:43", - "nodeType": "YulIdentifier", - "src": "22602:6:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "22584:6:43", - "nodeType": "YulIdentifier", - "src": "22584:6:43" - }, - "nativeSrc": "22584:25:43", - "nodeType": "YulFunctionCall", - "src": "22584:25:43" - }, - "nativeSrc": "22584:25:43", - "nodeType": "YulExpressionStatement", - "src": "22584:25:43" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "22629:9:43", - "nodeType": "YulIdentifier", - "src": "22629:9:43" - }, - { - "kind": "number", - "nativeSrc": "22640:2:43", - "nodeType": "YulLiteral", - "src": "22640:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "22625:3:43", - "nodeType": "YulIdentifier", - "src": "22625:3:43" - }, - "nativeSrc": "22625:18:43", - "nodeType": "YulFunctionCall", - "src": "22625:18:43" - }, - { - "name": "value1", - "nativeSrc": "22645:6:43", - "nodeType": "YulIdentifier", - "src": "22645:6:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "22618:6:43", - "nodeType": "YulIdentifier", - "src": "22618:6:43" - }, - "nativeSrc": "22618:34:43", - "nodeType": "YulFunctionCall", - "src": "22618:34:43" - }, - "nativeSrc": "22618:34:43", - "nodeType": "YulExpressionStatement", - "src": "22618:34:43" - } - ] - }, - "name": "abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed", - "nativeSrc": "22410:248:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "22500:9:43", - "nodeType": "YulTypedName", - "src": "22500:9:43", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "22511:6:43", - "nodeType": "YulTypedName", - "src": "22511:6:43", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "22519:6:43", - "nodeType": "YulTypedName", - "src": "22519:6:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "22530:4:43", - "nodeType": "YulTypedName", - "src": "22530:4:43", - "type": "" - } - ], - "src": "22410:248:43" - }, - { - "body": { - "nativeSrc": "22762:93:43", - "nodeType": "YulBlock", - "src": "22762:93:43", - "statements": [ - { - "nativeSrc": "22772:26:43", - "nodeType": "YulAssignment", - "src": "22772:26:43", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "22784:9:43", - "nodeType": "YulIdentifier", - "src": "22784:9:43" - }, - { - "kind": "number", - "nativeSrc": "22795:2:43", - "nodeType": "YulLiteral", - "src": "22795:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "22780:3:43", - "nodeType": "YulIdentifier", - "src": "22780:3:43" - }, - "nativeSrc": "22780:18:43", - "nodeType": "YulFunctionCall", - "src": "22780:18:43" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "22772:4:43", - "nodeType": "YulIdentifier", - "src": "22772:4:43" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "22814:9:43", - "nodeType": "YulIdentifier", - "src": "22814:9:43" - }, - { - "arguments": [ - { - "name": "value0", - "nativeSrc": "22829:6:43", - "nodeType": "YulIdentifier", - "src": "22829:6:43" - }, - { - "kind": "number", - "nativeSrc": "22837:10:43", - "nodeType": "YulLiteral", - "src": "22837:10:43", - "type": "", - "value": "0xffffffff" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "22825:3:43", - "nodeType": "YulIdentifier", - "src": "22825:3:43" - }, - "nativeSrc": "22825:23:43", - "nodeType": "YulFunctionCall", - "src": "22825:23:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "22807:6:43", - "nodeType": "YulIdentifier", - "src": "22807:6:43" - }, - "nativeSrc": "22807:42:43", - "nodeType": "YulFunctionCall", - "src": "22807:42:43" - }, - "nativeSrc": "22807:42:43", - "nodeType": "YulExpressionStatement", - "src": "22807:42:43" - } - ] - }, - "name": "abi_encode_tuple_t_uint32__to_t_uint32__fromStack_reversed", - "nativeSrc": "22663:192:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "22731:9:43", - "nodeType": "YulTypedName", - "src": "22731:9:43", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "22742:6:43", - "nodeType": "YulTypedName", - "src": "22742:6:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "22753:4:43", - "nodeType": "YulTypedName", - "src": "22753:4:43", - "type": "" - } - ], - "src": "22663:192:43" - }, - { - "body": { - "nativeSrc": "22929:176:43", - "nodeType": "YulBlock", - "src": "22929:176:43", - "statements": [ - { - "body": { - "nativeSrc": "22975:16:43", - "nodeType": "YulBlock", - "src": "22975:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "22984:1:43", - "nodeType": "YulLiteral", - "src": "22984:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "22987:1:43", - "nodeType": "YulLiteral", - "src": "22987:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "22977:6:43", - "nodeType": "YulIdentifier", - "src": "22977:6:43" - }, - "nativeSrc": "22977:12:43", - "nodeType": "YulFunctionCall", - "src": "22977:12:43" - }, - "nativeSrc": "22977:12:43", - "nodeType": "YulExpressionStatement", - "src": "22977:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nativeSrc": "22950:7:43", - "nodeType": "YulIdentifier", - "src": "22950:7:43" - }, - { - "name": "headStart", - "nativeSrc": "22959:9:43", - "nodeType": "YulIdentifier", - "src": "22959:9:43" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "22946:3:43", - "nodeType": "YulIdentifier", - "src": "22946:3:43" - }, - "nativeSrc": "22946:23:43", - "nodeType": "YulFunctionCall", - "src": "22946:23:43" - }, - { - "kind": "number", - "nativeSrc": "22971:2:43", - "nodeType": "YulLiteral", - "src": "22971:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "22942:3:43", - "nodeType": "YulIdentifier", - "src": "22942:3:43" - }, - "nativeSrc": "22942:32:43", - "nodeType": "YulFunctionCall", - "src": "22942:32:43" - }, - "nativeSrc": "22939:52:43", - "nodeType": "YulIf", - "src": "22939:52:43" - }, - { - "nativeSrc": "23000:36:43", - "nodeType": "YulVariableDeclaration", - "src": "23000:36:43", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "23026:9:43", - "nodeType": "YulIdentifier", - "src": "23026:9:43" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "23013:12:43", - "nodeType": "YulIdentifier", - "src": "23013:12:43" - }, - "nativeSrc": "23013:23:43", - "nodeType": "YulFunctionCall", - "src": "23013:23:43" - }, - "variables": [ - { - "name": "value", - "nativeSrc": "23004:5:43", - "nodeType": "YulTypedName", - "src": "23004:5:43", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nativeSrc": "23069:5:43", - "nodeType": "YulIdentifier", - "src": "23069:5:43" - } - ], - "functionName": { - "name": "validator_revert_uint64", - "nativeSrc": "23045:23:43", - "nodeType": "YulIdentifier", - "src": "23045:23:43" - }, - "nativeSrc": "23045:30:43", - "nodeType": "YulFunctionCall", - "src": "23045:30:43" - }, - "nativeSrc": "23045:30:43", - "nodeType": "YulExpressionStatement", - "src": "23045:30:43" - }, - { - "nativeSrc": "23084:15:43", - "nodeType": "YulAssignment", - "src": "23084:15:43", - "value": { - "name": "value", - "nativeSrc": "23094:5:43", - "nodeType": "YulIdentifier", - "src": "23094:5:43" - }, - "variableNames": [ - { - "name": "value0", - "nativeSrc": "23084:6:43", - "nodeType": "YulIdentifier", - "src": "23084:6:43" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_uint64", - "nativeSrc": "22860:245:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "22895:9:43", - "nodeType": "YulTypedName", - "src": "22895:9:43", - "type": "" - }, - { - "name": "dataEnd", - "nativeSrc": "22906:7:43", - "nodeType": "YulTypedName", - "src": "22906:7:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nativeSrc": "22918:6:43", - "nodeType": "YulTypedName", - "src": "22918:6:43", - "type": "" - } - ], - "src": "22860:245:43" - }, - { - "body": { - "nativeSrc": "23320:269:43", - "nodeType": "YulBlock", - "src": "23320:269:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "23337:9:43", - "nodeType": "YulIdentifier", - "src": "23337:9:43" - }, - { - "arguments": [ - { - "name": "value0", - "nativeSrc": "23352:6:43", - "nodeType": "YulIdentifier", - "src": "23352:6:43" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "23368:3:43", - "nodeType": "YulLiteral", - "src": "23368:3:43", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nativeSrc": "23373:1:43", - "nodeType": "YulLiteral", - "src": "23373:1:43", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "23364:3:43", - "nodeType": "YulIdentifier", - "src": "23364:3:43" - }, - "nativeSrc": "23364:11:43", - "nodeType": "YulFunctionCall", - "src": "23364:11:43" - }, - { - "kind": "number", - "nativeSrc": "23377:1:43", - "nodeType": "YulLiteral", - "src": "23377:1:43", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "23360:3:43", - "nodeType": "YulIdentifier", - "src": "23360:3:43" - }, - "nativeSrc": "23360:19:43", - "nodeType": "YulFunctionCall", - "src": "23360:19:43" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "23348:3:43", - "nodeType": "YulIdentifier", - "src": "23348:3:43" - }, - "nativeSrc": "23348:32:43", - "nodeType": "YulFunctionCall", - "src": "23348:32:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "23330:6:43", - "nodeType": "YulIdentifier", - "src": "23330:6:43" - }, - "nativeSrc": "23330:51:43", - "nodeType": "YulFunctionCall", - "src": "23330:51:43" - }, - "nativeSrc": "23330:51:43", - "nodeType": "YulExpressionStatement", - "src": "23330:51:43" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "23401:9:43", - "nodeType": "YulIdentifier", - "src": "23401:9:43" - }, - { - "kind": "number", - "nativeSrc": "23412:2:43", - "nodeType": "YulLiteral", - "src": "23412:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "23397:3:43", - "nodeType": "YulIdentifier", - "src": "23397:3:43" - }, - "nativeSrc": "23397:18:43", - "nodeType": "YulFunctionCall", - "src": "23397:18:43" - }, - { - "name": "value1", - "nativeSrc": "23417:6:43", - "nodeType": "YulIdentifier", - "src": "23417:6:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "23390:6:43", - "nodeType": "YulIdentifier", - "src": "23390:6:43" - }, - "nativeSrc": "23390:34:43", - "nodeType": "YulFunctionCall", - "src": "23390:34:43" - }, - "nativeSrc": "23390:34:43", - "nodeType": "YulExpressionStatement", - "src": "23390:34:43" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "23444:9:43", - "nodeType": "YulIdentifier", - "src": "23444:9:43" - }, - { - "kind": "number", - "nativeSrc": "23455:2:43", - "nodeType": "YulLiteral", - "src": "23455:2:43", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "23440:3:43", - "nodeType": "YulIdentifier", - "src": "23440:3:43" - }, - "nativeSrc": "23440:18:43", - "nodeType": "YulFunctionCall", - "src": "23440:18:43" - }, - { - "arguments": [ - { - "name": "value2", - "nativeSrc": "23464:6:43", - "nodeType": "YulIdentifier", - "src": "23464:6:43" - }, - { - "kind": "number", - "nativeSrc": "23472:6:43", - "nodeType": "YulLiteral", - "src": "23472:6:43", - "type": "", - "value": "0xffff" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "23460:3:43", - "nodeType": "YulIdentifier", - "src": "23460:3:43" - }, - "nativeSrc": "23460:19:43", - "nodeType": "YulFunctionCall", - "src": "23460:19:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "23433:6:43", - "nodeType": "YulIdentifier", - "src": "23433:6:43" - }, - "nativeSrc": "23433:47:43", - "nodeType": "YulFunctionCall", - "src": "23433:47:43" - }, - "nativeSrc": "23433:47:43", - "nodeType": "YulExpressionStatement", - "src": "23433:47:43" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "23500:9:43", - "nodeType": "YulIdentifier", - "src": "23500:9:43" - }, - { - "kind": "number", - "nativeSrc": "23511:2:43", - "nodeType": "YulLiteral", - "src": "23511:2:43", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "23496:3:43", - "nodeType": "YulIdentifier", - "src": "23496:3:43" - }, - "nativeSrc": "23496:18:43", - "nodeType": "YulFunctionCall", - "src": "23496:18:43" - }, - { - "kind": "number", - "nativeSrc": "23516:3:43", - "nodeType": "YulLiteral", - "src": "23516:3:43", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "23489:6:43", - "nodeType": "YulIdentifier", - "src": "23489:6:43" - }, - "nativeSrc": "23489:31:43", - "nodeType": "YulFunctionCall", - "src": "23489:31:43" - }, - "nativeSrc": "23489:31:43", - "nodeType": "YulExpressionStatement", - "src": "23489:31:43" - }, - { - "nativeSrc": "23529:54:43", - "nodeType": "YulAssignment", - "src": "23529:54:43", - "value": { - "arguments": [ - { - "name": "value3", - "nativeSrc": "23555:6:43", - "nodeType": "YulIdentifier", - "src": "23555:6:43" - }, - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "23567:9:43", - "nodeType": "YulIdentifier", - "src": "23567:9:43" - }, - { - "kind": "number", - "nativeSrc": "23578:3:43", - "nodeType": "YulLiteral", - "src": "23578:3:43", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "23563:3:43", - "nodeType": "YulIdentifier", - "src": "23563:3:43" - }, - "nativeSrc": "23563:19:43", - "nodeType": "YulFunctionCall", - "src": "23563:19:43" - } - ], - "functionName": { - "name": "abi_encode_string", - "nativeSrc": "23537:17:43", - "nodeType": "YulIdentifier", - "src": "23537:17:43" - }, - "nativeSrc": "23537:46:43", - "nodeType": "YulFunctionCall", - "src": "23537:46:43" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "23529:4:43", - "nodeType": "YulIdentifier", - "src": "23529:4:43" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_address_t_bytes32_t_rational_0_by_1_t_bytes_memory_ptr__to_t_address_t_bytes32_t_uint16_t_bytes_memory_ptr__fromStack_reversed", - "nativeSrc": "23110:479:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "23265:9:43", - "nodeType": "YulTypedName", - "src": "23265:9:43", - "type": "" - }, - { - "name": "value3", - "nativeSrc": "23276:6:43", - "nodeType": "YulTypedName", - "src": "23276:6:43", - "type": "" - }, - { - "name": "value2", - "nativeSrc": "23284:6:43", - "nodeType": "YulTypedName", - "src": "23284:6:43", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "23292:6:43", - "nodeType": "YulTypedName", - "src": "23292:6:43", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "23300:6:43", - "nodeType": "YulTypedName", - "src": "23300:6:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "23311:4:43", - "nodeType": "YulTypedName", - "src": "23311:4:43", - "type": "" - } - ], - "src": "23110:479:43" - }, - { - "body": { - "nativeSrc": "23721:136:43", - "nodeType": "YulBlock", - "src": "23721:136:43", - "statements": [ - { - "nativeSrc": "23731:26:43", - "nodeType": "YulAssignment", - "src": "23731:26:43", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "23743:9:43", - "nodeType": "YulIdentifier", - "src": "23743:9:43" - }, - { - "kind": "number", - "nativeSrc": "23754:2:43", - "nodeType": "YulLiteral", - "src": "23754:2:43", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "23739:3:43", - "nodeType": "YulIdentifier", - "src": "23739:3:43" - }, - "nativeSrc": "23739:18:43", - "nodeType": "YulFunctionCall", - "src": "23739:18:43" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "23731:4:43", - "nodeType": "YulIdentifier", - "src": "23731:4:43" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "23773:9:43", - "nodeType": "YulIdentifier", - "src": "23773:9:43" - }, - { - "arguments": [ - { - "name": "value0", - "nativeSrc": "23788:6:43", - "nodeType": "YulIdentifier", - "src": "23788:6:43" - }, - { - "kind": "number", - "nativeSrc": "23796:10:43", - "nodeType": "YulLiteral", - "src": "23796:10:43", - "type": "", - "value": "0xffffffff" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "23784:3:43", - "nodeType": "YulIdentifier", - "src": "23784:3:43" - }, - "nativeSrc": "23784:23:43", - "nodeType": "YulFunctionCall", - "src": "23784:23:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "23766:6:43", - "nodeType": "YulIdentifier", - "src": "23766:6:43" - }, - "nativeSrc": "23766:42:43", - "nodeType": "YulFunctionCall", - "src": "23766:42:43" - }, - "nativeSrc": "23766:42:43", - "nodeType": "YulExpressionStatement", - "src": "23766:42:43" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "23828:9:43", - "nodeType": "YulIdentifier", - "src": "23828:9:43" - }, - { - "kind": "number", - "nativeSrc": "23839:2:43", - "nodeType": "YulLiteral", - "src": "23839:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "23824:3:43", - "nodeType": "YulIdentifier", - "src": "23824:3:43" - }, - "nativeSrc": "23824:18:43", - "nodeType": "YulFunctionCall", - "src": "23824:18:43" - }, - { - "name": "value1", - "nativeSrc": "23844:6:43", - "nodeType": "YulIdentifier", - "src": "23844:6:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "23817:6:43", - "nodeType": "YulIdentifier", - "src": "23817:6:43" - }, - "nativeSrc": "23817:34:43", - "nodeType": "YulFunctionCall", - "src": "23817:34:43" - }, - "nativeSrc": "23817:34:43", - "nodeType": "YulExpressionStatement", - "src": "23817:34:43" - } - ] - }, - "name": "abi_encode_tuple_t_uint32_t_uint256__to_t_uint32_t_uint256__fromStack_reversed", - "nativeSrc": "23594:263:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "23682:9:43", - "nodeType": "YulTypedName", - "src": "23682:9:43", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "23693:6:43", - "nodeType": "YulTypedName", - "src": "23693:6:43", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "23701:6:43", - "nodeType": "YulTypedName", - "src": "23701:6:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "23712:4:43", - "nodeType": "YulTypedName", - "src": "23712:4:43", - "type": "" - } - ], - "src": "23594:263:43" - }, - { - "body": { - "nativeSrc": "24019:188:43", - "nodeType": "YulBlock", - "src": "24019:188:43", - "statements": [ - { - "nativeSrc": "24029:26:43", - "nodeType": "YulAssignment", - "src": "24029:26:43", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "24041:9:43", - "nodeType": "YulIdentifier", - "src": "24041:9:43" - }, - { - "kind": "number", - "nativeSrc": "24052:2:43", - "nodeType": "YulLiteral", - "src": "24052:2:43", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "24037:3:43", - "nodeType": "YulIdentifier", - "src": "24037:3:43" - }, - "nativeSrc": "24037:18:43", - "nodeType": "YulFunctionCall", - "src": "24037:18:43" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "24029:4:43", - "nodeType": "YulIdentifier", - "src": "24029:4:43" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "24071:9:43", - "nodeType": "YulIdentifier", - "src": "24071:9:43" - }, - { - "arguments": [ - { - "name": "value0", - "nativeSrc": "24086:6:43", - "nodeType": "YulIdentifier", - "src": "24086:6:43" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "24102:3:43", - "nodeType": "YulLiteral", - "src": "24102:3:43", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nativeSrc": "24107:1:43", - "nodeType": "YulLiteral", - "src": "24107:1:43", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "24098:3:43", - "nodeType": "YulIdentifier", - "src": "24098:3:43" - }, - "nativeSrc": "24098:11:43", - "nodeType": "YulFunctionCall", - "src": "24098:11:43" - }, - { - "kind": "number", - "nativeSrc": "24111:1:43", - "nodeType": "YulLiteral", - "src": "24111:1:43", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "24094:3:43", - "nodeType": "YulIdentifier", - "src": "24094:3:43" - }, - "nativeSrc": "24094:19:43", - "nodeType": "YulFunctionCall", - "src": "24094:19:43" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "24082:3:43", - "nodeType": "YulIdentifier", - "src": "24082:3:43" - }, - "nativeSrc": "24082:32:43", - "nodeType": "YulFunctionCall", - "src": "24082:32:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "24064:6:43", - "nodeType": "YulIdentifier", - "src": "24064:6:43" - }, - "nativeSrc": "24064:51:43", - "nodeType": "YulFunctionCall", - "src": "24064:51:43" - }, - "nativeSrc": "24064:51:43", - "nodeType": "YulExpressionStatement", - "src": "24064:51:43" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "24135:9:43", - "nodeType": "YulIdentifier", - "src": "24135:9:43" - }, - { - "kind": "number", - "nativeSrc": "24146:2:43", - "nodeType": "YulLiteral", - "src": "24146:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "24131:3:43", - "nodeType": "YulIdentifier", - "src": "24131:3:43" - }, - "nativeSrc": "24131:18:43", - "nodeType": "YulFunctionCall", - "src": "24131:18:43" - }, - { - "name": "value1", - "nativeSrc": "24151:6:43", - "nodeType": "YulIdentifier", - "src": "24151:6:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "24124:6:43", - "nodeType": "YulIdentifier", - "src": "24124:6:43" - }, - "nativeSrc": "24124:34:43", - "nodeType": "YulFunctionCall", - "src": "24124:34:43" - }, - "nativeSrc": "24124:34:43", - "nodeType": "YulExpressionStatement", - "src": "24124:34:43" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "24178:9:43", - "nodeType": "YulIdentifier", - "src": "24178:9:43" - }, - { - "kind": "number", - "nativeSrc": "24189:2:43", - "nodeType": "YulLiteral", - "src": "24189:2:43", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "24174:3:43", - "nodeType": "YulIdentifier", - "src": "24174:3:43" - }, - "nativeSrc": "24174:18:43", - "nodeType": "YulFunctionCall", - "src": "24174:18:43" - }, - { - "name": "value2", - "nativeSrc": "24194:6:43", - "nodeType": "YulIdentifier", - "src": "24194:6:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "24167:6:43", - "nodeType": "YulIdentifier", - "src": "24167:6:43" - }, - "nativeSrc": "24167:34:43", - "nodeType": "YulFunctionCall", - "src": "24167:34:43" - }, - "nativeSrc": "24167:34:43", - "nodeType": "YulExpressionStatement", - "src": "24167:34:43" - } - ] - }, - "name": "abi_encode_tuple_t_address_t_uint256_t_uint256__to_t_address_t_uint256_t_uint256__fromStack_reversed", - "nativeSrc": "23862:345:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "23972:9:43", - "nodeType": "YulTypedName", - "src": "23972:9:43", - "type": "" - }, - { - "name": "value2", - "nativeSrc": "23983:6:43", - "nodeType": "YulTypedName", - "src": "23983:6:43", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "23991:6:43", - "nodeType": "YulTypedName", - "src": "23991:6:43", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "23999:6:43", - "nodeType": "YulTypedName", - "src": "23999:6:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "24010:4:43", - "nodeType": "YulTypedName", - "src": "24010:4:43", - "type": "" - } - ], - "src": "23862:345:43" - }, - { - "body": { - "nativeSrc": "24377:214:43", - "nodeType": "YulBlock", - "src": "24377:214:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "24394:9:43", - "nodeType": "YulIdentifier", - "src": "24394:9:43" - }, - { - "kind": "number", - "nativeSrc": "24405:2:43", - "nodeType": "YulLiteral", - "src": "24405:2:43", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "24387:6:43", - "nodeType": "YulIdentifier", - "src": "24387:6:43" - }, - "nativeSrc": "24387:21:43", - "nodeType": "YulFunctionCall", - "src": "24387:21:43" - }, - "nativeSrc": "24387:21:43", - "nodeType": "YulExpressionStatement", - "src": "24387:21:43" - }, - { - "nativeSrc": "24417:59:43", - "nodeType": "YulVariableDeclaration", - "src": "24417:59:43", - "value": { - "arguments": [ - { - "name": "value0", - "nativeSrc": "24449:6:43", - "nodeType": "YulIdentifier", - "src": "24449:6:43" - }, - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "24461:9:43", - "nodeType": "YulIdentifier", - "src": "24461:9:43" - }, - { - "kind": "number", - "nativeSrc": "24472:2:43", - "nodeType": "YulLiteral", - "src": "24472:2:43", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "24457:3:43", - "nodeType": "YulIdentifier", - "src": "24457:3:43" - }, - "nativeSrc": "24457:18:43", - "nodeType": "YulFunctionCall", - "src": "24457:18:43" - } - ], - "functionName": { - "name": "abi_encode_string", - "nativeSrc": "24431:17:43", - "nodeType": "YulIdentifier", - "src": "24431:17:43" - }, - "nativeSrc": "24431:45:43", - "nodeType": "YulFunctionCall", - "src": "24431:45:43" - }, - "variables": [ - { - "name": "tail_1", - "nativeSrc": "24421:6:43", - "nodeType": "YulTypedName", - "src": "24421:6:43", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "24496:9:43", - "nodeType": "YulIdentifier", - "src": "24496:9:43" - }, - { - "kind": "number", - "nativeSrc": "24507:2:43", - "nodeType": "YulLiteral", - "src": "24507:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "24492:3:43", - "nodeType": "YulIdentifier", - "src": "24492:3:43" - }, - "nativeSrc": "24492:18:43", - "nodeType": "YulFunctionCall", - "src": "24492:18:43" - }, - { - "arguments": [ - { - "name": "tail_1", - "nativeSrc": "24516:6:43", - "nodeType": "YulIdentifier", - "src": "24516:6:43" - }, - { - "name": "headStart", - "nativeSrc": "24524:9:43", - "nodeType": "YulIdentifier", - "src": "24524:9:43" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "24512:3:43", - "nodeType": "YulIdentifier", - "src": "24512:3:43" - }, - "nativeSrc": "24512:22:43", - "nodeType": "YulFunctionCall", - "src": "24512:22:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "24485:6:43", - "nodeType": "YulIdentifier", - "src": "24485:6:43" - }, - "nativeSrc": "24485:50:43", - "nodeType": "YulFunctionCall", - "src": "24485:50:43" - }, - "nativeSrc": "24485:50:43", - "nodeType": "YulExpressionStatement", - "src": "24485:50:43" - }, - { - "nativeSrc": "24544:41:43", - "nodeType": "YulAssignment", - "src": "24544:41:43", - "value": { - "arguments": [ - { - "name": "value1", - "nativeSrc": "24570:6:43", - "nodeType": "YulIdentifier", - "src": "24570:6:43" - }, - { - "name": "tail_1", - "nativeSrc": "24578:6:43", - "nodeType": "YulIdentifier", - "src": "24578:6:43" - } - ], - "functionName": { - "name": "abi_encode_string", - "nativeSrc": "24552:17:43", - "nodeType": "YulIdentifier", - "src": "24552:17:43" - }, - "nativeSrc": "24552:33:43", - "nodeType": "YulFunctionCall", - "src": "24552:33:43" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "24544:4:43", - "nodeType": "YulIdentifier", - "src": "24544:4:43" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_bytes_memory_ptr_t_bytes_memory_ptr__to_t_bytes_memory_ptr_t_bytes_memory_ptr__fromStack_reversed", - "nativeSrc": "24212:379:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "24338:9:43", - "nodeType": "YulTypedName", - "src": "24338:9:43", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "24349:6:43", - "nodeType": "YulTypedName", - "src": "24349:6:43", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "24357:6:43", - "nodeType": "YulTypedName", - "src": "24357:6:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "24368:4:43", - "nodeType": "YulTypedName", - "src": "24368:4:43", - "type": "" - } - ], - "src": "24212:379:43" - }, - { - "body": { - "nativeSrc": "24674:167:43", - "nodeType": "YulBlock", - "src": "24674:167:43", - "statements": [ - { - "body": { - "nativeSrc": "24720:16:43", - "nodeType": "YulBlock", - "src": "24720:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "24729:1:43", - "nodeType": "YulLiteral", - "src": "24729:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "24732:1:43", - "nodeType": "YulLiteral", - "src": "24732:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "24722:6:43", - "nodeType": "YulIdentifier", - "src": "24722:6:43" - }, - "nativeSrc": "24722:12:43", - "nodeType": "YulFunctionCall", - "src": "24722:12:43" - }, - "nativeSrc": "24722:12:43", - "nodeType": "YulExpressionStatement", - "src": "24722:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nativeSrc": "24695:7:43", - "nodeType": "YulIdentifier", - "src": "24695:7:43" - }, - { - "name": "headStart", - "nativeSrc": "24704:9:43", - "nodeType": "YulIdentifier", - "src": "24704:9:43" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "24691:3:43", - "nodeType": "YulIdentifier", - "src": "24691:3:43" - }, - "nativeSrc": "24691:23:43", - "nodeType": "YulFunctionCall", - "src": "24691:23:43" - }, - { - "kind": "number", - "nativeSrc": "24716:2:43", - "nodeType": "YulLiteral", - "src": "24716:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "24687:3:43", - "nodeType": "YulIdentifier", - "src": "24687:3:43" - }, - "nativeSrc": "24687:32:43", - "nodeType": "YulFunctionCall", - "src": "24687:32:43" - }, - "nativeSrc": "24684:52:43", - "nodeType": "YulIf", - "src": "24684:52:43" - }, - { - "nativeSrc": "24745:29:43", - "nodeType": "YulVariableDeclaration", - "src": "24745:29:43", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "24764:9:43", - "nodeType": "YulIdentifier", - "src": "24764:9:43" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "24758:5:43", - "nodeType": "YulIdentifier", - "src": "24758:5:43" - }, - "nativeSrc": "24758:16:43", - "nodeType": "YulFunctionCall", - "src": "24758:16:43" - }, - "variables": [ - { - "name": "value", - "nativeSrc": "24749:5:43", - "nodeType": "YulTypedName", - "src": "24749:5:43", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nativeSrc": "24805:5:43", - "nodeType": "YulIdentifier", - "src": "24805:5:43" - } - ], - "functionName": { - "name": "validator_revert_bool", - "nativeSrc": "24783:21:43", - "nodeType": "YulIdentifier", - "src": "24783:21:43" - }, - "nativeSrc": "24783:28:43", - "nodeType": "YulFunctionCall", - "src": "24783:28:43" - }, - "nativeSrc": "24783:28:43", - "nodeType": "YulExpressionStatement", - "src": "24783:28:43" - }, - { - "nativeSrc": "24820:15:43", - "nodeType": "YulAssignment", - "src": "24820:15:43", - "value": { - "name": "value", - "nativeSrc": "24830:5:43", - "nodeType": "YulIdentifier", - "src": "24830:5:43" - }, - "variableNames": [ - { - "name": "value0", - "nativeSrc": "24820:6:43", - "nodeType": "YulIdentifier", - "src": "24820:6:43" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_bool_fromMemory", - "nativeSrc": "24596:245:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "24640:9:43", - "nodeType": "YulTypedName", - "src": "24640:9:43", - "type": "" - }, - { - "name": "dataEnd", - "nativeSrc": "24651:7:43", - "nodeType": "YulTypedName", - "src": "24651:7:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nativeSrc": "24663:6:43", - "nodeType": "YulTypedName", - "src": "24663:6:43", - "type": "" - } - ], - "src": "24596:245:43" - }, - { - "body": { - "nativeSrc": "25037:696:43", - "nodeType": "YulBlock", - "src": "25037:696:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "25054:9:43", - "nodeType": "YulIdentifier", - "src": "25054:9:43" - }, - { - "kind": "number", - "nativeSrc": "25065:2:43", - "nodeType": "YulLiteral", - "src": "25065:2:43", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "25047:6:43", - "nodeType": "YulIdentifier", - "src": "25047:6:43" - }, - "nativeSrc": "25047:21:43", - "nodeType": "YulFunctionCall", - "src": "25047:21:43" - }, - "nativeSrc": "25047:21:43", - "nodeType": "YulExpressionStatement", - "src": "25047:21:43" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "25088:9:43", - "nodeType": "YulIdentifier", - "src": "25088:9:43" - }, - { - "kind": "number", - "nativeSrc": "25099:2:43", - "nodeType": "YulLiteral", - "src": "25099:2:43", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "25084:3:43", - "nodeType": "YulIdentifier", - "src": "25084:3:43" - }, - "nativeSrc": "25084:18:43", - "nodeType": "YulFunctionCall", - "src": "25084:18:43" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nativeSrc": "25114:6:43", - "nodeType": "YulIdentifier", - "src": "25114:6:43" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "25108:5:43", - "nodeType": "YulIdentifier", - "src": "25108:5:43" - }, - "nativeSrc": "25108:13:43", - "nodeType": "YulFunctionCall", - "src": "25108:13:43" - }, - { - "kind": "number", - "nativeSrc": "25123:10:43", - "nodeType": "YulLiteral", - "src": "25123:10:43", - "type": "", - "value": "0xffffffff" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "25104:3:43", - "nodeType": "YulIdentifier", - "src": "25104:3:43" - }, - "nativeSrc": "25104:30:43", - "nodeType": "YulFunctionCall", - "src": "25104:30:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "25077:6:43", - "nodeType": "YulIdentifier", - "src": "25077:6:43" - }, - "nativeSrc": "25077:58:43", - "nodeType": "YulFunctionCall", - "src": "25077:58:43" - }, - "nativeSrc": "25077:58:43", - "nodeType": "YulExpressionStatement", - "src": "25077:58:43" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "25155:9:43", - "nodeType": "YulIdentifier", - "src": "25155:9:43" - }, - { - "kind": "number", - "nativeSrc": "25166:2:43", - "nodeType": "YulLiteral", - "src": "25166:2:43", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "25151:3:43", - "nodeType": "YulIdentifier", - "src": "25151:3:43" - }, - "nativeSrc": "25151:18:43", - "nodeType": "YulFunctionCall", - "src": "25151:18:43" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nativeSrc": "25181:6:43", - "nodeType": "YulIdentifier", - "src": "25181:6:43" - }, - { - "kind": "number", - "nativeSrc": "25189:4:43", - "nodeType": "YulLiteral", - "src": "25189:4:43", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "25177:3:43", - "nodeType": "YulIdentifier", - "src": "25177:3:43" - }, - "nativeSrc": "25177:17:43", - "nodeType": "YulFunctionCall", - "src": "25177:17:43" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "25171:5:43", - "nodeType": "YulIdentifier", - "src": "25171:5:43" - }, - "nativeSrc": "25171:24:43", - "nodeType": "YulFunctionCall", - "src": "25171:24:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "25144:6:43", - "nodeType": "YulIdentifier", - "src": "25144:6:43" - }, - "nativeSrc": "25144:52:43", - "nodeType": "YulFunctionCall", - "src": "25144:52:43" - }, - "nativeSrc": "25144:52:43", - "nodeType": "YulExpressionStatement", - "src": "25144:52:43" - }, - { - "nativeSrc": "25205:42:43", - "nodeType": "YulVariableDeclaration", - "src": "25205:42:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nativeSrc": "25235:6:43", - "nodeType": "YulIdentifier", - "src": "25235:6:43" - }, - { - "kind": "number", - "nativeSrc": "25243:2:43", - "nodeType": "YulLiteral", - "src": "25243:2:43", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "25231:3:43", - "nodeType": "YulIdentifier", - "src": "25231:3:43" - }, - "nativeSrc": "25231:15:43", - "nodeType": "YulFunctionCall", - "src": "25231:15:43" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "25225:5:43", - "nodeType": "YulIdentifier", - "src": "25225:5:43" - }, - "nativeSrc": "25225:22:43", - "nodeType": "YulFunctionCall", - "src": "25225:22:43" - }, - "variables": [ - { - "name": "memberValue0", - "nativeSrc": "25209:12:43", - "nodeType": "YulTypedName", - "src": "25209:12:43", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "25267:9:43", - "nodeType": "YulIdentifier", - "src": "25267:9:43" - }, - { - "kind": "number", - "nativeSrc": "25278:3:43", - "nodeType": "YulLiteral", - "src": "25278:3:43", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "25263:3:43", - "nodeType": "YulIdentifier", - "src": "25263:3:43" - }, - "nativeSrc": "25263:19:43", - "nodeType": "YulFunctionCall", - "src": "25263:19:43" - }, - { - "kind": "number", - "nativeSrc": "25284:4:43", - "nodeType": "YulLiteral", - "src": "25284:4:43", - "type": "", - "value": "0xa0" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "25256:6:43", - "nodeType": "YulIdentifier", - "src": "25256:6:43" - }, - "nativeSrc": "25256:33:43", - "nodeType": "YulFunctionCall", - "src": "25256:33:43" - }, - "nativeSrc": "25256:33:43", - "nodeType": "YulExpressionStatement", - "src": "25256:33:43" - }, - { - "nativeSrc": "25298:66:43", - "nodeType": "YulVariableDeclaration", - "src": "25298:66:43", - "value": { - "arguments": [ - { - "name": "memberValue0", - "nativeSrc": "25330:12:43", - "nodeType": "YulIdentifier", - "src": "25330:12:43" - }, - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "25348:9:43", - "nodeType": "YulIdentifier", - "src": "25348:9:43" - }, - { - "kind": "number", - "nativeSrc": "25359:3:43", - "nodeType": "YulLiteral", - "src": "25359:3:43", - "type": "", - "value": "224" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "25344:3:43", - "nodeType": "YulIdentifier", - "src": "25344:3:43" - }, - "nativeSrc": "25344:19:43", - "nodeType": "YulFunctionCall", - "src": "25344:19:43" - } - ], - "functionName": { - "name": "abi_encode_string", - "nativeSrc": "25312:17:43", - "nodeType": "YulIdentifier", - "src": "25312:17:43" - }, - "nativeSrc": "25312:52:43", - "nodeType": "YulFunctionCall", - "src": "25312:52:43" - }, - "variables": [ - { - "name": "tail_1", - "nativeSrc": "25302:6:43", - "nodeType": "YulTypedName", - "src": "25302:6:43", - "type": "" - } - ] - }, - { - "nativeSrc": "25373:44:43", - "nodeType": "YulVariableDeclaration", - "src": "25373:44:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nativeSrc": "25405:6:43", - "nodeType": "YulIdentifier", - "src": "25405:6:43" - }, - { - "kind": "number", - "nativeSrc": "25413:2:43", - "nodeType": "YulLiteral", - "src": "25413:2:43", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "25401:3:43", - "nodeType": "YulIdentifier", - "src": "25401:3:43" - }, - "nativeSrc": "25401:15:43", - "nodeType": "YulFunctionCall", - "src": "25401:15:43" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "25395:5:43", - "nodeType": "YulIdentifier", - "src": "25395:5:43" - }, - "nativeSrc": "25395:22:43", - "nodeType": "YulFunctionCall", - "src": "25395:22:43" - }, - "variables": [ - { - "name": "memberValue0_1", - "nativeSrc": "25377:14:43", - "nodeType": "YulTypedName", - "src": "25377:14:43", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "25437:9:43", - "nodeType": "YulIdentifier", - "src": "25437:9:43" - }, - { - "kind": "number", - "nativeSrc": "25448:4:43", - "nodeType": "YulLiteral", - "src": "25448:4:43", - "type": "", - "value": "0xa0" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "25433:3:43", - "nodeType": "YulIdentifier", - "src": "25433:3:43" - }, - "nativeSrc": "25433:20:43", - "nodeType": "YulFunctionCall", - "src": "25433:20:43" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "tail_1", - "nativeSrc": "25463:6:43", - "nodeType": "YulIdentifier", - "src": "25463:6:43" - }, - { - "name": "headStart", - "nativeSrc": "25471:9:43", - "nodeType": "YulIdentifier", - "src": "25471:9:43" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "25459:3:43", - "nodeType": "YulIdentifier", - "src": "25459:3:43" - }, - "nativeSrc": "25459:22:43", - "nodeType": "YulFunctionCall", - "src": "25459:22:43" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "25487:2:43", - "nodeType": "YulLiteral", - "src": "25487:2:43", - "type": "", - "value": "63" - } - ], - "functionName": { - "name": "not", - "nativeSrc": "25483:3:43", - "nodeType": "YulIdentifier", - "src": "25483:3:43" - }, - "nativeSrc": "25483:7:43", - "nodeType": "YulFunctionCall", - "src": "25483:7:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "25455:3:43", - "nodeType": "YulIdentifier", - "src": "25455:3:43" - }, - "nativeSrc": "25455:36:43", - "nodeType": "YulFunctionCall", - "src": "25455:36:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "25426:6:43", - "nodeType": "YulIdentifier", - "src": "25426:6:43" - }, - "nativeSrc": "25426:66:43", - "nodeType": "YulFunctionCall", - "src": "25426:66:43" - }, - "nativeSrc": "25426:66:43", - "nodeType": "YulExpressionStatement", - "src": "25426:66:43" - }, - { - "nativeSrc": "25501:55:43", - "nodeType": "YulVariableDeclaration", - "src": "25501:55:43", - "value": { - "arguments": [ - { - "name": "memberValue0_1", - "nativeSrc": "25533:14:43", - "nodeType": "YulIdentifier", - "src": "25533:14:43" - }, - { - "name": "tail_1", - "nativeSrc": "25549:6:43", - "nodeType": "YulIdentifier", - "src": "25549:6:43" - } - ], - "functionName": { - "name": "abi_encode_string", - "nativeSrc": "25515:17:43", - "nodeType": "YulIdentifier", - "src": "25515:17:43" - }, - "nativeSrc": "25515:41:43", - "nodeType": "YulFunctionCall", - "src": "25515:41:43" - }, - "variables": [ - { - "name": "tail_2", - "nativeSrc": "25505:6:43", - "nodeType": "YulTypedName", - "src": "25505:6:43", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "25576:9:43", - "nodeType": "YulIdentifier", - "src": "25576:9:43" - }, - { - "kind": "number", - "nativeSrc": "25587:3:43", - "nodeType": "YulLiteral", - "src": "25587:3:43", - "type": "", - "value": "192" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "25572:3:43", - "nodeType": "YulIdentifier", - "src": "25572:3:43" - }, - "nativeSrc": "25572:19:43", - "nodeType": "YulFunctionCall", - "src": "25572:19:43" - }, - { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nativeSrc": "25617:6:43", - "nodeType": "YulIdentifier", - "src": "25617:6:43" - }, - { - "kind": "number", - "nativeSrc": "25625:3:43", - "nodeType": "YulLiteral", - "src": "25625:3:43", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "25613:3:43", - "nodeType": "YulIdentifier", - "src": "25613:3:43" - }, - "nativeSrc": "25613:16:43", - "nodeType": "YulFunctionCall", - "src": "25613:16:43" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "25607:5:43", - "nodeType": "YulIdentifier", - "src": "25607:5:43" - }, - "nativeSrc": "25607:23:43", - "nodeType": "YulFunctionCall", - "src": "25607:23:43" - } - ], - "functionName": { - "name": "iszero", - "nativeSrc": "25600:6:43", - "nodeType": "YulIdentifier", - "src": "25600:6:43" - }, - "nativeSrc": "25600:31:43", - "nodeType": "YulFunctionCall", - "src": "25600:31:43" - } - ], - "functionName": { - "name": "iszero", - "nativeSrc": "25593:6:43", - "nodeType": "YulIdentifier", - "src": "25593:6:43" - }, - "nativeSrc": "25593:39:43", - "nodeType": "YulFunctionCall", - "src": "25593:39:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "25565:6:43", - "nodeType": "YulIdentifier", - "src": "25565:6:43" - }, - "nativeSrc": "25565:68:43", - "nodeType": "YulFunctionCall", - "src": "25565:68:43" - }, - "nativeSrc": "25565:68:43", - "nodeType": "YulExpressionStatement", - "src": "25565:68:43" - }, - { - "nativeSrc": "25642:14:43", - "nodeType": "YulAssignment", - "src": "25642:14:43", - "value": { - "name": "tail_2", - "nativeSrc": "25650:6:43", - "nodeType": "YulIdentifier", - "src": "25650:6:43" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "25642:4:43", - "nodeType": "YulIdentifier", - "src": "25642:4:43" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "25676:9:43", - "nodeType": "YulIdentifier", - "src": "25676:9:43" - }, - { - "kind": "number", - "nativeSrc": "25687:4:43", - "nodeType": "YulLiteral", - "src": "25687:4:43", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "25672:3:43", - "nodeType": "YulIdentifier", - "src": "25672:3:43" - }, - "nativeSrc": "25672:20:43", - "nodeType": "YulFunctionCall", - "src": "25672:20:43" - }, - { - "arguments": [ - { - "name": "value1", - "nativeSrc": "25698:6:43", - "nodeType": "YulIdentifier", - "src": "25698:6:43" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "25714:3:43", - "nodeType": "YulLiteral", - "src": "25714:3:43", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nativeSrc": "25719:1:43", - "nodeType": "YulLiteral", - "src": "25719:1:43", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "25710:3:43", - "nodeType": "YulIdentifier", - "src": "25710:3:43" - }, - "nativeSrc": "25710:11:43", - "nodeType": "YulFunctionCall", - "src": "25710:11:43" - }, - { - "kind": "number", - "nativeSrc": "25723:1:43", - "nodeType": "YulLiteral", - "src": "25723:1:43", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "25706:3:43", - "nodeType": "YulIdentifier", - "src": "25706:3:43" - }, - "nativeSrc": "25706:19:43", - "nodeType": "YulFunctionCall", - "src": "25706:19:43" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "25694:3:43", - "nodeType": "YulIdentifier", - "src": "25694:3:43" - }, - "nativeSrc": "25694:32:43", - "nodeType": "YulFunctionCall", - "src": "25694:32:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "25665:6:43", - "nodeType": "YulIdentifier", - "src": "25665:6:43" - }, - "nativeSrc": "25665:62:43", - "nodeType": "YulFunctionCall", - "src": "25665:62:43" - }, - "nativeSrc": "25665:62:43", - "nodeType": "YulExpressionStatement", - "src": "25665:62:43" - } - ] - }, - "name": "abi_encode_tuple_t_struct$_MessagingParams_$20_memory_ptr_t_address__to_t_struct$_MessagingParams_$20_memory_ptr_t_address__fromStack_reversed", - "nativeSrc": "24846:887:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "24998:9:43", - "nodeType": "YulTypedName", - "src": "24998:9:43", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "25009:6:43", - "nodeType": "YulTypedName", - "src": "25009:6:43", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "25017:6:43", - "nodeType": "YulTypedName", - "src": "25017:6:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "25028:4:43", - "nodeType": "YulTypedName", - "src": "25028:4:43", - "type": "" - } - ], - "src": "24846:887:43" - }, - { - "body": { - "nativeSrc": "25818:204:43", - "nodeType": "YulBlock", - "src": "25818:204:43", - "statements": [ - { - "body": { - "nativeSrc": "25862:16:43", - "nodeType": "YulBlock", - "src": "25862:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "25871:1:43", - "nodeType": "YulLiteral", - "src": "25871:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "25874:1:43", - "nodeType": "YulLiteral", - "src": "25874:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "25864:6:43", - "nodeType": "YulIdentifier", - "src": "25864:6:43" - }, - "nativeSrc": "25864:12:43", - "nodeType": "YulFunctionCall", - "src": "25864:12:43" - }, - "nativeSrc": "25864:12:43", - "nodeType": "YulExpressionStatement", - "src": "25864:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "end", - "nativeSrc": "25839:3:43", - "nodeType": "YulIdentifier", - "src": "25839:3:43" - }, - { - "name": "headStart", - "nativeSrc": "25844:9:43", - "nodeType": "YulIdentifier", - "src": "25844:9:43" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "25835:3:43", - "nodeType": "YulIdentifier", - "src": "25835:3:43" - }, - "nativeSrc": "25835:19:43", - "nodeType": "YulFunctionCall", - "src": "25835:19:43" - }, - { - "kind": "number", - "nativeSrc": "25856:4:43", - "nodeType": "YulLiteral", - "src": "25856:4:43", - "type": "", - "value": "0x40" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "25831:3:43", - "nodeType": "YulIdentifier", - "src": "25831:3:43" - }, - "nativeSrc": "25831:30:43", - "nodeType": "YulFunctionCall", - "src": "25831:30:43" - }, - "nativeSrc": "25828:50:43", - "nodeType": "YulIf", - "src": "25828:50:43" - }, - { - "nativeSrc": "25887:31:43", - "nodeType": "YulAssignment", - "src": "25887:31:43", - "value": { - "arguments": [], - "functionName": { - "name": "allocate_memory_4160", - "nativeSrc": "25896:20:43", - "nodeType": "YulIdentifier", - "src": "25896:20:43" - }, - "nativeSrc": "25896:22:43", - "nodeType": "YulFunctionCall", - "src": "25896:22:43" - }, - "variableNames": [ - { - "name": "value", - "nativeSrc": "25887:5:43", - "nodeType": "YulIdentifier", - "src": "25887:5:43" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nativeSrc": "25934:5:43", - "nodeType": "YulIdentifier", - "src": "25934:5:43" - }, - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "25947:9:43", - "nodeType": "YulIdentifier", - "src": "25947:9:43" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "25941:5:43", - "nodeType": "YulIdentifier", - "src": "25941:5:43" - }, - "nativeSrc": "25941:16:43", - "nodeType": "YulFunctionCall", - "src": "25941:16:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "25927:6:43", - "nodeType": "YulIdentifier", - "src": "25927:6:43" - }, - "nativeSrc": "25927:31:43", - "nodeType": "YulFunctionCall", - "src": "25927:31:43" - }, - "nativeSrc": "25927:31:43", - "nodeType": "YulExpressionStatement", - "src": "25927:31:43" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nativeSrc": "25978:5:43", - "nodeType": "YulIdentifier", - "src": "25978:5:43" - }, - { - "kind": "number", - "nativeSrc": "25985:2:43", - "nodeType": "YulLiteral", - "src": "25985:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "25974:3:43", - "nodeType": "YulIdentifier", - "src": "25974:3:43" - }, - "nativeSrc": "25974:14:43", - "nodeType": "YulFunctionCall", - "src": "25974:14:43" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "26000:9:43", - "nodeType": "YulIdentifier", - "src": "26000:9:43" - }, - { - "kind": "number", - "nativeSrc": "26011:2:43", - "nodeType": "YulLiteral", - "src": "26011:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "25996:3:43", - "nodeType": "YulIdentifier", - "src": "25996:3:43" - }, - "nativeSrc": "25996:18:43", - "nodeType": "YulFunctionCall", - "src": "25996:18:43" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "25990:5:43", - "nodeType": "YulIdentifier", - "src": "25990:5:43" - }, - "nativeSrc": "25990:25:43", - "nodeType": "YulFunctionCall", - "src": "25990:25:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "25967:6:43", - "nodeType": "YulIdentifier", - "src": "25967:6:43" - }, - "nativeSrc": "25967:49:43", - "nodeType": "YulFunctionCall", - "src": "25967:49:43" - }, - "nativeSrc": "25967:49:43", - "nodeType": "YulExpressionStatement", - "src": "25967:49:43" - } - ] - }, - "name": "abi_decode_struct_MessagingFee_fromMemory", - "nativeSrc": "25738:284:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "25789:9:43", - "nodeType": "YulTypedName", - "src": "25789:9:43", - "type": "" - }, - { - "name": "end", - "nativeSrc": "25800:3:43", - "nodeType": "YulTypedName", - "src": "25800:3:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value", - "nativeSrc": "25808:5:43", - "nodeType": "YulTypedName", - "src": "25808:5:43", - "type": "" - } - ], - "src": "25738:284:43" - }, - { - "body": { - "nativeSrc": "26136:148:43", - "nodeType": "YulBlock", - "src": "26136:148:43", - "statements": [ - { - "body": { - "nativeSrc": "26182:16:43", - "nodeType": "YulBlock", - "src": "26182:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "26191:1:43", - "nodeType": "YulLiteral", - "src": "26191:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "26194:1:43", - "nodeType": "YulLiteral", - "src": "26194:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "26184:6:43", - "nodeType": "YulIdentifier", - "src": "26184:6:43" - }, - "nativeSrc": "26184:12:43", - "nodeType": "YulFunctionCall", - "src": "26184:12:43" - }, - "nativeSrc": "26184:12:43", - "nodeType": "YulExpressionStatement", - "src": "26184:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nativeSrc": "26157:7:43", - "nodeType": "YulIdentifier", - "src": "26157:7:43" - }, - { - "name": "headStart", - "nativeSrc": "26166:9:43", - "nodeType": "YulIdentifier", - "src": "26166:9:43" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "26153:3:43", - "nodeType": "YulIdentifier", - "src": "26153:3:43" - }, - "nativeSrc": "26153:23:43", - "nodeType": "YulFunctionCall", - "src": "26153:23:43" - }, - { - "kind": "number", - "nativeSrc": "26178:2:43", - "nodeType": "YulLiteral", - "src": "26178:2:43", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "26149:3:43", - "nodeType": "YulIdentifier", - "src": "26149:3:43" - }, - "nativeSrc": "26149:32:43", - "nodeType": "YulFunctionCall", - "src": "26149:32:43" - }, - "nativeSrc": "26146:52:43", - "nodeType": "YulIf", - "src": "26146:52:43" - }, - { - "nativeSrc": "26207:71:43", - "nodeType": "YulAssignment", - "src": "26207:71:43", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "26259:9:43", - "nodeType": "YulIdentifier", - "src": "26259:9:43" - }, - { - "name": "dataEnd", - "nativeSrc": "26270:7:43", - "nodeType": "YulIdentifier", - "src": "26270:7:43" - } - ], - "functionName": { - "name": "abi_decode_struct_MessagingFee_fromMemory", - "nativeSrc": "26217:41:43", - "nodeType": "YulIdentifier", - "src": "26217:41:43" - }, - "nativeSrc": "26217:61:43", - "nodeType": "YulFunctionCall", - "src": "26217:61:43" - }, - "variableNames": [ - { - "name": "value0", - "nativeSrc": "26207:6:43", - "nodeType": "YulIdentifier", - "src": "26207:6:43" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_struct$_MessagingFee_$33_memory_ptr_fromMemory", - "nativeSrc": "26027:257:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "26102:9:43", - "nodeType": "YulTypedName", - "src": "26102:9:43", - "type": "" - }, - { - "name": "dataEnd", - "nativeSrc": "26113:7:43", - "nodeType": "YulTypedName", - "src": "26113:7:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nativeSrc": "26125:6:43", - "nodeType": "YulTypedName", - "src": "26125:6:43", - "type": "" - } - ], - "src": "26027:257:43" - }, - { - "body": { - "nativeSrc": "26344:65:43", - "nodeType": "YulBlock", - "src": "26344:65:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "26361:1:43", - "nodeType": "YulLiteral", - "src": "26361:1:43", - "type": "", - "value": "0" - }, - { - "name": "ptr", - "nativeSrc": "26364:3:43", - "nodeType": "YulIdentifier", - "src": "26364:3:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "26354:6:43", - "nodeType": "YulIdentifier", - "src": "26354:6:43" - }, - "nativeSrc": "26354:14:43", - "nodeType": "YulFunctionCall", - "src": "26354:14:43" - }, - "nativeSrc": "26354:14:43", - "nodeType": "YulExpressionStatement", - "src": "26354:14:43" - }, - { - "nativeSrc": "26377:26:43", - "nodeType": "YulAssignment", - "src": "26377:26:43", - "value": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "26395:1:43", - "nodeType": "YulLiteral", - "src": "26395:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "26398:4:43", - "nodeType": "YulLiteral", - "src": "26398:4:43", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "keccak256", - "nativeSrc": "26385:9:43", - "nodeType": "YulIdentifier", - "src": "26385:9:43" - }, - "nativeSrc": "26385:18:43", - "nodeType": "YulFunctionCall", - "src": "26385:18:43" - }, - "variableNames": [ - { - "name": "data", - "nativeSrc": "26377:4:43", - "nodeType": "YulIdentifier", - "src": "26377:4:43" - } - ] - } - ] - }, - "name": "array_dataslot_bytes_storage", - "nativeSrc": "26289:120:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "ptr", - "nativeSrc": "26327:3:43", - "nodeType": "YulTypedName", - "src": "26327:3:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "data", - "nativeSrc": "26335:4:43", - "nodeType": "YulTypedName", - "src": "26335:4:43", - "type": "" - } - ], - "src": "26289:120:43" - }, - { - "body": { - "nativeSrc": "26494:462:43", - "nodeType": "YulBlock", - "src": "26494:462:43", - "statements": [ - { - "body": { - "nativeSrc": "26527:423:43", - "nodeType": "YulBlock", - "src": "26527:423:43", - "statements": [ - { - "nativeSrc": "26541:11:43", - "nodeType": "YulVariableDeclaration", - "src": "26541:11:43", - "value": { - "kind": "number", - "nativeSrc": "26551:1:43", - "nodeType": "YulLiteral", - "src": "26551:1:43", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "_1", - "nativeSrc": "26545:2:43", - "nodeType": "YulTypedName", - "src": "26545:2:43", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "26572:1:43", - "nodeType": "YulLiteral", - "src": "26572:1:43", - "type": "", - "value": "0" - }, - { - "name": "array", - "nativeSrc": "26575:5:43", - "nodeType": "YulIdentifier", - "src": "26575:5:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "26565:6:43", - "nodeType": "YulIdentifier", - "src": "26565:6:43" - }, - "nativeSrc": "26565:16:43", - "nodeType": "YulFunctionCall", - "src": "26565:16:43" - }, - "nativeSrc": "26565:16:43", - "nodeType": "YulExpressionStatement", - "src": "26565:16:43" - }, - { - "nativeSrc": "26594:30:43", - "nodeType": "YulVariableDeclaration", - "src": "26594:30:43", - "value": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "26616:1:43", - "nodeType": "YulLiteral", - "src": "26616:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "26619:4:43", - "nodeType": "YulLiteral", - "src": "26619:4:43", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "keccak256", - "nativeSrc": "26606:9:43", - "nodeType": "YulIdentifier", - "src": "26606:9:43" - }, - "nativeSrc": "26606:18:43", - "nodeType": "YulFunctionCall", - "src": "26606:18:43" - }, - "variables": [ - { - "name": "data", - "nativeSrc": "26598:4:43", - "nodeType": "YulTypedName", - "src": "26598:4:43", - "type": "" - } - ] - }, - { - "nativeSrc": "26637:57:43", - "nodeType": "YulVariableDeclaration", - "src": "26637:57:43", - "value": { - "arguments": [ - { - "name": "data", - "nativeSrc": "26660:4:43", - "nodeType": "YulIdentifier", - "src": "26660:4:43" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "26670:1:43", - "nodeType": "YulLiteral", - "src": "26670:1:43", - "type": "", - "value": "5" - }, - { - "arguments": [ - { - "name": "startIndex", - "nativeSrc": "26677:10:43", - "nodeType": "YulIdentifier", - "src": "26677:10:43" - }, - { - "kind": "number", - "nativeSrc": "26689:2:43", - "nodeType": "YulLiteral", - "src": "26689:2:43", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "26673:3:43", - "nodeType": "YulIdentifier", - "src": "26673:3:43" - }, - "nativeSrc": "26673:19:43", - "nodeType": "YulFunctionCall", - "src": "26673:19:43" - } - ], - "functionName": { - "name": "shr", - "nativeSrc": "26666:3:43", - "nodeType": "YulIdentifier", - "src": "26666:3:43" - }, - "nativeSrc": "26666:27:43", - "nodeType": "YulFunctionCall", - "src": "26666:27:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "26656:3:43", - "nodeType": "YulIdentifier", - "src": "26656:3:43" - }, - "nativeSrc": "26656:38:43", - "nodeType": "YulFunctionCall", - "src": "26656:38:43" - }, - "variables": [ - { - "name": "deleteStart", - "nativeSrc": "26641:11:43", - "nodeType": "YulTypedName", - "src": "26641:11:43", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "26731:23:43", - "nodeType": "YulBlock", - "src": "26731:23:43", - "statements": [ - { - "nativeSrc": "26733:19:43", - "nodeType": "YulAssignment", - "src": "26733:19:43", - "value": { - "name": "data", - "nativeSrc": "26748:4:43", - "nodeType": "YulIdentifier", - "src": "26748:4:43" - }, - "variableNames": [ - { - "name": "deleteStart", - "nativeSrc": "26733:11:43", - "nodeType": "YulIdentifier", - "src": "26733:11:43" - } - ] - } - ] - }, - "condition": { - "arguments": [ - { - "name": "startIndex", - "nativeSrc": "26713:10:43", - "nodeType": "YulIdentifier", - "src": "26713:10:43" - }, - { - "kind": "number", - "nativeSrc": "26725:4:43", - "nodeType": "YulLiteral", - "src": "26725:4:43", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "lt", - "nativeSrc": "26710:2:43", - "nodeType": "YulIdentifier", - "src": "26710:2:43" - }, - "nativeSrc": "26710:20:43", - "nodeType": "YulFunctionCall", - "src": "26710:20:43" - }, - "nativeSrc": "26707:47:43", - "nodeType": "YulIf", - "src": "26707:47:43" - }, - { - "nativeSrc": "26767:41:43", - "nodeType": "YulVariableDeclaration", - "src": "26767:41:43", - "value": { - "arguments": [ - { - "name": "data", - "nativeSrc": "26781:4:43", - "nodeType": "YulIdentifier", - "src": "26781:4:43" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "26791:1:43", - "nodeType": "YulLiteral", - "src": "26791:1:43", - "type": "", - "value": "5" - }, - { - "arguments": [ - { - "name": "len", - "nativeSrc": "26798:3:43", - "nodeType": "YulIdentifier", - "src": "26798:3:43" - }, - { - "kind": "number", - "nativeSrc": "26803:2:43", - "nodeType": "YulLiteral", - "src": "26803:2:43", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "26794:3:43", - "nodeType": "YulIdentifier", - "src": "26794:3:43" - }, - "nativeSrc": "26794:12:43", - "nodeType": "YulFunctionCall", - "src": "26794:12:43" - } - ], - "functionName": { - "name": "shr", - "nativeSrc": "26787:3:43", - "nodeType": "YulIdentifier", - "src": "26787:3:43" - }, - "nativeSrc": "26787:20:43", - "nodeType": "YulFunctionCall", - "src": "26787:20:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "26777:3:43", - "nodeType": "YulIdentifier", - "src": "26777:3:43" - }, - "nativeSrc": "26777:31:43", - "nodeType": "YulFunctionCall", - "src": "26777:31:43" - }, - "variables": [ - { - "name": "_2", - "nativeSrc": "26771:2:43", - "nodeType": "YulTypedName", - "src": "26771:2:43", - "type": "" - } - ] - }, - { - "nativeSrc": "26821:24:43", - "nodeType": "YulVariableDeclaration", - "src": "26821:24:43", - "value": { - "name": "deleteStart", - "nativeSrc": "26834:11:43", - "nodeType": "YulIdentifier", - "src": "26834:11:43" - }, - "variables": [ - { - "name": "start", - "nativeSrc": "26825:5:43", - "nodeType": "YulTypedName", - "src": "26825:5:43", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "26919:21:43", - "nodeType": "YulBlock", - "src": "26919:21:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "start", - "nativeSrc": "26928:5:43", - "nodeType": "YulIdentifier", - "src": "26928:5:43" - }, - { - "name": "_1", - "nativeSrc": "26935:2:43", - "nodeType": "YulIdentifier", - "src": "26935:2:43" - } - ], - "functionName": { - "name": "sstore", - "nativeSrc": "26921:6:43", - "nodeType": "YulIdentifier", - "src": "26921:6:43" - }, - "nativeSrc": "26921:17:43", - "nodeType": "YulFunctionCall", - "src": "26921:17:43" - }, - "nativeSrc": "26921:17:43", - "nodeType": "YulExpressionStatement", - "src": "26921:17:43" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "start", - "nativeSrc": "26869:5:43", - "nodeType": "YulIdentifier", - "src": "26869:5:43" - }, - { - "name": "_2", - "nativeSrc": "26876:2:43", - "nodeType": "YulIdentifier", - "src": "26876:2:43" - } - ], - "functionName": { - "name": "lt", - "nativeSrc": "26866:2:43", - "nodeType": "YulIdentifier", - "src": "26866:2:43" - }, - "nativeSrc": "26866:13:43", - "nodeType": "YulFunctionCall", - "src": "26866:13:43" - }, - "nativeSrc": "26858:82:43", - "nodeType": "YulForLoop", - "post": { - "nativeSrc": "26880:26:43", - "nodeType": "YulBlock", - "src": "26880:26:43", - "statements": [ - { - "nativeSrc": "26882:22:43", - "nodeType": "YulAssignment", - "src": "26882:22:43", - "value": { - "arguments": [ - { - "name": "start", - "nativeSrc": "26895:5:43", - "nodeType": "YulIdentifier", - "src": "26895:5:43" - }, - { - "kind": "number", - "nativeSrc": "26902:1:43", - "nodeType": "YulLiteral", - "src": "26902:1:43", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "26891:3:43", - "nodeType": "YulIdentifier", - "src": "26891:3:43" - }, - "nativeSrc": "26891:13:43", - "nodeType": "YulFunctionCall", - "src": "26891:13:43" - }, - "variableNames": [ - { - "name": "start", - "nativeSrc": "26882:5:43", - "nodeType": "YulIdentifier", - "src": "26882:5:43" - } - ] - } - ] - }, - "pre": { - "nativeSrc": "26862:3:43", - "nodeType": "YulBlock", - "src": "26862:3:43", - "statements": [] - }, - "src": "26858:82:43" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "len", - "nativeSrc": "26510:3:43", - "nodeType": "YulIdentifier", - "src": "26510:3:43" - }, - { - "kind": "number", - "nativeSrc": "26515:2:43", - "nodeType": "YulLiteral", - "src": "26515:2:43", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "26507:2:43", - "nodeType": "YulIdentifier", - "src": "26507:2:43" - }, - "nativeSrc": "26507:11:43", - "nodeType": "YulFunctionCall", - "src": "26507:11:43" - }, - "nativeSrc": "26504:446:43", - "nodeType": "YulIf", - "src": "26504:446:43" - } - ] - }, - "name": "clean_up_bytearray_end_slots_bytes_storage", - "nativeSrc": "26414:542:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "array", - "nativeSrc": "26466:5:43", - "nodeType": "YulTypedName", - "src": "26466:5:43", - "type": "" - }, - { - "name": "len", - "nativeSrc": "26473:3:43", - "nodeType": "YulTypedName", - "src": "26473:3:43", - "type": "" - }, - { - "name": "startIndex", - "nativeSrc": "26478:10:43", - "nodeType": "YulTypedName", - "src": "26478:10:43", - "type": "" - } - ], - "src": "26414:542:43" - }, - { - "body": { - "nativeSrc": "27046:81:43", - "nodeType": "YulBlock", - "src": "27046:81:43", - "statements": [ - { - "nativeSrc": "27056:65:43", - "nodeType": "YulAssignment", - "src": "27056:65:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "data", - "nativeSrc": "27071:4:43", - "nodeType": "YulIdentifier", - "src": "27071:4:43" - }, - { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "27089:1:43", - "nodeType": "YulLiteral", - "src": "27089:1:43", - "type": "", - "value": "3" - }, - { - "name": "len", - "nativeSrc": "27092:3:43", - "nodeType": "YulIdentifier", - "src": "27092:3:43" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "27085:3:43", - "nodeType": "YulIdentifier", - "src": "27085:3:43" - }, - "nativeSrc": "27085:11:43", - "nodeType": "YulFunctionCall", - "src": "27085:11:43" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "27102:1:43", - "nodeType": "YulLiteral", - "src": "27102:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "not", - "nativeSrc": "27098:3:43", - "nodeType": "YulIdentifier", - "src": "27098:3:43" - }, - "nativeSrc": "27098:6:43", - "nodeType": "YulFunctionCall", - "src": "27098:6:43" - } - ], - "functionName": { - "name": "shr", - "nativeSrc": "27081:3:43", - "nodeType": "YulIdentifier", - "src": "27081:3:43" - }, - "nativeSrc": "27081:24:43", - "nodeType": "YulFunctionCall", - "src": "27081:24:43" - } - ], - "functionName": { - "name": "not", - "nativeSrc": "27077:3:43", - "nodeType": "YulIdentifier", - "src": "27077:3:43" - }, - "nativeSrc": "27077:29:43", - "nodeType": "YulFunctionCall", - "src": "27077:29:43" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "27067:3:43", - "nodeType": "YulIdentifier", - "src": "27067:3:43" - }, - "nativeSrc": "27067:40:43", - "nodeType": "YulFunctionCall", - "src": "27067:40:43" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "27113:1:43", - "nodeType": "YulLiteral", - "src": "27113:1:43", - "type": "", - "value": "1" - }, - { - "name": "len", - "nativeSrc": "27116:3:43", - "nodeType": "YulIdentifier", - "src": "27116:3:43" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "27109:3:43", - "nodeType": "YulIdentifier", - "src": "27109:3:43" - }, - "nativeSrc": "27109:11:43", - "nodeType": "YulFunctionCall", - "src": "27109:11:43" - } - ], - "functionName": { - "name": "or", - "nativeSrc": "27064:2:43", - "nodeType": "YulIdentifier", - "src": "27064:2:43" - }, - "nativeSrc": "27064:57:43", - "nodeType": "YulFunctionCall", - "src": "27064:57:43" - }, - "variableNames": [ - { - "name": "used", - "nativeSrc": "27056:4:43", - "nodeType": "YulIdentifier", - "src": "27056:4:43" - } - ] - } - ] - }, - "name": "extract_used_part_and_set_length_of_short_byte_array", - "nativeSrc": "26961:166:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "data", - "nativeSrc": "27023:4:43", - "nodeType": "YulTypedName", - "src": "27023:4:43", - "type": "" - }, - { - "name": "len", - "nativeSrc": "27029:3:43", - "nodeType": "YulTypedName", - "src": "27029:3:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "used", - "nativeSrc": "27037:4:43", - "nodeType": "YulTypedName", - "src": "27037:4:43", - "type": "" - } - ], - "src": "26961:166:43" - }, - { - "body": { - "nativeSrc": "27226:1247:43", - "nodeType": "YulBlock", - "src": "27226:1247:43", - "statements": [ - { - "nativeSrc": "27236:24:43", - "nodeType": "YulVariableDeclaration", - "src": "27236:24:43", - "value": { - "arguments": [ - { - "name": "src", - "nativeSrc": "27256:3:43", - "nodeType": "YulIdentifier", - "src": "27256:3:43" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "27250:5:43", - "nodeType": "YulIdentifier", - "src": "27250:5:43" - }, - "nativeSrc": "27250:10:43", - "nodeType": "YulFunctionCall", - "src": "27250:10:43" - }, - "variables": [ - { - "name": "newLen", - "nativeSrc": "27240:6:43", - "nodeType": "YulTypedName", - "src": "27240:6:43", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "27303:22:43", - "nodeType": "YulBlock", - "src": "27303:22:43", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x41", - "nativeSrc": "27305:16:43", - "nodeType": "YulIdentifier", - "src": "27305:16:43" - }, - "nativeSrc": "27305:18:43", - "nodeType": "YulFunctionCall", - "src": "27305:18:43" - }, - "nativeSrc": "27305:18:43", - "nodeType": "YulExpressionStatement", - "src": "27305:18:43" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "newLen", - "nativeSrc": "27275:6:43", - "nodeType": "YulIdentifier", - "src": "27275:6:43" - }, - { - "kind": "number", - "nativeSrc": "27283:18:43", - "nodeType": "YulLiteral", - "src": "27283:18:43", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "27272:2:43", - "nodeType": "YulIdentifier", - "src": "27272:2:43" - }, - "nativeSrc": "27272:30:43", - "nodeType": "YulFunctionCall", - "src": "27272:30:43" - }, - "nativeSrc": "27269:56:43", - "nodeType": "YulIf", - "src": "27269:56:43" - }, - { - "expression": { - "arguments": [ - { - "name": "slot", - "nativeSrc": "27377:4:43", - "nodeType": "YulIdentifier", - "src": "27377:4:43" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "slot", - "nativeSrc": "27415:4:43", - "nodeType": "YulIdentifier", - "src": "27415:4:43" - } - ], - "functionName": { - "name": "sload", - "nativeSrc": "27409:5:43", - "nodeType": "YulIdentifier", - "src": "27409:5:43" - }, - "nativeSrc": "27409:11:43", - "nodeType": "YulFunctionCall", - "src": "27409:11:43" - } - ], - "functionName": { - "name": "extract_byte_array_length", - "nativeSrc": "27383:25:43", - "nodeType": "YulIdentifier", - "src": "27383:25:43" - }, - "nativeSrc": "27383:38:43", - "nodeType": "YulFunctionCall", - "src": "27383:38:43" - }, - { - "name": "newLen", - "nativeSrc": "27423:6:43", - "nodeType": "YulIdentifier", - "src": "27423:6:43" - } - ], - "functionName": { - "name": "clean_up_bytearray_end_slots_bytes_storage", - "nativeSrc": "27334:42:43", - "nodeType": "YulIdentifier", - "src": "27334:42:43" - }, - "nativeSrc": "27334:96:43", - "nodeType": "YulFunctionCall", - "src": "27334:96:43" - }, - "nativeSrc": "27334:96:43", - "nodeType": "YulExpressionStatement", - "src": "27334:96:43" - }, - { - "nativeSrc": "27439:18:43", - "nodeType": "YulVariableDeclaration", - "src": "27439:18:43", - "value": { - "kind": "number", - "nativeSrc": "27456:1:43", - "nodeType": "YulLiteral", - "src": "27456:1:43", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "srcOffset", - "nativeSrc": "27443:9:43", - "nodeType": "YulTypedName", - "src": "27443:9:43", - "type": "" - } - ] - }, - { - "nativeSrc": "27466:23:43", - "nodeType": "YulVariableDeclaration", - "src": "27466:23:43", - "value": { - "kind": "number", - "nativeSrc": "27485:4:43", - "nodeType": "YulLiteral", - "src": "27485:4:43", - "type": "", - "value": "0x20" - }, - "variables": [ - { - "name": "srcOffset_1", - "nativeSrc": "27470:11:43", - "nodeType": "YulTypedName", - "src": "27470:11:43", - "type": "" - } - ] - }, - { - "nativeSrc": "27498:17:43", - "nodeType": "YulAssignment", - "src": "27498:17:43", - "value": { - "kind": "number", - "nativeSrc": "27511:4:43", - "nodeType": "YulLiteral", - "src": "27511:4:43", - "type": "", - "value": "0x20" - }, - "variableNames": [ - { - "name": "srcOffset", - "nativeSrc": "27498:9:43", - "nodeType": "YulIdentifier", - "src": "27498:9:43" - } - ] - }, - { - "cases": [ - { - "body": { - "nativeSrc": "27561:655:43", - "nodeType": "YulBlock", - "src": "27561:655:43", - "statements": [ - { - "nativeSrc": "27575:35:43", - "nodeType": "YulVariableDeclaration", - "src": "27575:35:43", - "value": { - "arguments": [ - { - "name": "newLen", - "nativeSrc": "27594:6:43", - "nodeType": "YulIdentifier", - "src": "27594:6:43" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "27606:2:43", - "nodeType": "YulLiteral", - "src": "27606:2:43", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "not", - "nativeSrc": "27602:3:43", - "nodeType": "YulIdentifier", - "src": "27602:3:43" - }, - "nativeSrc": "27602:7:43", - "nodeType": "YulFunctionCall", - "src": "27602:7:43" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "27590:3:43", - "nodeType": "YulIdentifier", - "src": "27590:3:43" - }, - "nativeSrc": "27590:20:43", - "nodeType": "YulFunctionCall", - "src": "27590:20:43" - }, - "variables": [ - { - "name": "loopEnd", - "nativeSrc": "27579:7:43", - "nodeType": "YulTypedName", - "src": "27579:7:43", - "type": "" - } - ] - }, - { - "nativeSrc": "27623:48:43", - "nodeType": "YulVariableDeclaration", - "src": "27623:48:43", - "value": { - "arguments": [ - { - "name": "slot", - "nativeSrc": "27666:4:43", - "nodeType": "YulIdentifier", - "src": "27666:4:43" - } - ], - "functionName": { - "name": "array_dataslot_bytes_storage", - "nativeSrc": "27637:28:43", - "nodeType": "YulIdentifier", - "src": "27637:28:43" - }, - "nativeSrc": "27637:34:43", - "nodeType": "YulFunctionCall", - "src": "27637:34:43" - }, - "variables": [ - { - "name": "dstPtr", - "nativeSrc": "27627:6:43", - "nodeType": "YulTypedName", - "src": "27627:6:43", - "type": "" - } - ] - }, - { - "nativeSrc": "27684:10:43", - "nodeType": "YulVariableDeclaration", - "src": "27684:10:43", - "value": { - "kind": "number", - "nativeSrc": "27693:1:43", - "nodeType": "YulLiteral", - "src": "27693:1:43", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "i", - "nativeSrc": "27688:1:43", - "nodeType": "YulTypedName", - "src": "27688:1:43", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "27771:172:43", - "nodeType": "YulBlock", - "src": "27771:172:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "dstPtr", - "nativeSrc": "27796:6:43", - "nodeType": "YulIdentifier", - "src": "27796:6:43" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "src", - "nativeSrc": "27814:3:43", - "nodeType": "YulIdentifier", - "src": "27814:3:43" - }, - { - "name": "srcOffset", - "nativeSrc": "27819:9:43", - "nodeType": "YulIdentifier", - "src": "27819:9:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "27810:3:43", - "nodeType": "YulIdentifier", - "src": "27810:3:43" - }, - "nativeSrc": "27810:19:43", - "nodeType": "YulFunctionCall", - "src": "27810:19:43" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "27804:5:43", - "nodeType": "YulIdentifier", - "src": "27804:5:43" - }, - "nativeSrc": "27804:26:43", - "nodeType": "YulFunctionCall", - "src": "27804:26:43" - } - ], - "functionName": { - "name": "sstore", - "nativeSrc": "27789:6:43", - "nodeType": "YulIdentifier", - "src": "27789:6:43" - }, - "nativeSrc": "27789:42:43", - "nodeType": "YulFunctionCall", - "src": "27789:42:43" - }, - "nativeSrc": "27789:42:43", - "nodeType": "YulExpressionStatement", - "src": "27789:42:43" - }, - { - "nativeSrc": "27848:24:43", - "nodeType": "YulAssignment", - "src": "27848:24:43", - "value": { - "arguments": [ - { - "name": "dstPtr", - "nativeSrc": "27862:6:43", - "nodeType": "YulIdentifier", - "src": "27862:6:43" - }, - { - "kind": "number", - "nativeSrc": "27870:1:43", - "nodeType": "YulLiteral", - "src": "27870:1:43", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "27858:3:43", - "nodeType": "YulIdentifier", - "src": "27858:3:43" - }, - "nativeSrc": "27858:14:43", - "nodeType": "YulFunctionCall", - "src": "27858:14:43" - }, - "variableNames": [ - { - "name": "dstPtr", - "nativeSrc": "27848:6:43", - "nodeType": "YulIdentifier", - "src": "27848:6:43" - } - ] - }, - { - "nativeSrc": "27889:40:43", - "nodeType": "YulAssignment", - "src": "27889:40:43", - "value": { - "arguments": [ - { - "name": "srcOffset", - "nativeSrc": "27906:9:43", - "nodeType": "YulIdentifier", - "src": "27906:9:43" - }, - { - "name": "srcOffset_1", - "nativeSrc": "27917:11:43", - "nodeType": "YulIdentifier", - "src": "27917:11:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "27902:3:43", - "nodeType": "YulIdentifier", - "src": "27902:3:43" - }, - "nativeSrc": "27902:27:43", - "nodeType": "YulFunctionCall", - "src": "27902:27:43" - }, - "variableNames": [ - { - "name": "srcOffset", - "nativeSrc": "27889:9:43", - "nodeType": "YulIdentifier", - "src": "27889:9:43" - } - ] - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nativeSrc": "27718:1:43", - "nodeType": "YulIdentifier", - "src": "27718:1:43" - }, - { - "name": "loopEnd", - "nativeSrc": "27721:7:43", - "nodeType": "YulIdentifier", - "src": "27721:7:43" - } - ], - "functionName": { - "name": "lt", - "nativeSrc": "27715:2:43", - "nodeType": "YulIdentifier", - "src": "27715:2:43" - }, - "nativeSrc": "27715:14:43", - "nodeType": "YulFunctionCall", - "src": "27715:14:43" - }, - "nativeSrc": "27707:236:43", - "nodeType": "YulForLoop", - "post": { - "nativeSrc": "27730:28:43", - "nodeType": "YulBlock", - "src": "27730:28:43", - "statements": [ - { - "nativeSrc": "27732:24:43", - "nodeType": "YulAssignment", - "src": "27732:24:43", - "value": { - "arguments": [ - { - "name": "i", - "nativeSrc": "27741:1:43", - "nodeType": "YulIdentifier", - "src": "27741:1:43" - }, - { - "name": "srcOffset_1", - "nativeSrc": "27744:11:43", - "nodeType": "YulIdentifier", - "src": "27744:11:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "27737:3:43", - "nodeType": "YulIdentifier", - "src": "27737:3:43" - }, - "nativeSrc": "27737:19:43", - "nodeType": "YulFunctionCall", - "src": "27737:19:43" - }, - "variableNames": [ - { - "name": "i", - "nativeSrc": "27732:1:43", - "nodeType": "YulIdentifier", - "src": "27732:1:43" - } - ] - } - ] - }, - "pre": { - "nativeSrc": "27711:3:43", - "nodeType": "YulBlock", - "src": "27711:3:43", - "statements": [] - }, - "src": "27707:236:43" - }, - { - "body": { - "nativeSrc": "27991:166:43", - "nodeType": "YulBlock", - "src": "27991:166:43", - "statements": [ - { - "nativeSrc": "28009:43:43", - "nodeType": "YulVariableDeclaration", - "src": "28009:43:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "src", - "nativeSrc": "28036:3:43", - "nodeType": "YulIdentifier", - "src": "28036:3:43" - }, - { - "name": "srcOffset", - "nativeSrc": "28041:9:43", - "nodeType": "YulIdentifier", - "src": "28041:9:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "28032:3:43", - "nodeType": "YulIdentifier", - "src": "28032:3:43" - }, - "nativeSrc": "28032:19:43", - "nodeType": "YulFunctionCall", - "src": "28032:19:43" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "28026:5:43", - "nodeType": "YulIdentifier", - "src": "28026:5:43" - }, - "nativeSrc": "28026:26:43", - "nodeType": "YulFunctionCall", - "src": "28026:26:43" - }, - "variables": [ - { - "name": "lastValue", - "nativeSrc": "28013:9:43", - "nodeType": "YulTypedName", - "src": "28013:9:43", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "dstPtr", - "nativeSrc": "28076:6:43", - "nodeType": "YulIdentifier", - "src": "28076:6:43" - }, - { - "arguments": [ - { - "name": "lastValue", - "nativeSrc": "28088:9:43", - "nodeType": "YulIdentifier", - "src": "28088:9:43" - }, - { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "28115:1:43", - "nodeType": "YulLiteral", - "src": "28115:1:43", - "type": "", - "value": "3" - }, - { - "name": "newLen", - "nativeSrc": "28118:6:43", - "nodeType": "YulIdentifier", - "src": "28118:6:43" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "28111:3:43", - "nodeType": "YulIdentifier", - "src": "28111:3:43" - }, - "nativeSrc": "28111:14:43", - "nodeType": "YulFunctionCall", - "src": "28111:14:43" - }, - { - "kind": "number", - "nativeSrc": "28127:3:43", - "nodeType": "YulLiteral", - "src": "28127:3:43", - "type": "", - "value": "248" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "28107:3:43", - "nodeType": "YulIdentifier", - "src": "28107:3:43" - }, - "nativeSrc": "28107:24:43", - "nodeType": "YulFunctionCall", - "src": "28107:24:43" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "28137:1:43", - "nodeType": "YulLiteral", - "src": "28137:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "not", - "nativeSrc": "28133:3:43", - "nodeType": "YulIdentifier", - "src": "28133:3:43" - }, - "nativeSrc": "28133:6:43", - "nodeType": "YulFunctionCall", - "src": "28133:6:43" - } - ], - "functionName": { - "name": "shr", - "nativeSrc": "28103:3:43", - "nodeType": "YulIdentifier", - "src": "28103:3:43" - }, - "nativeSrc": "28103:37:43", - "nodeType": "YulFunctionCall", - "src": "28103:37:43" - } - ], - "functionName": { - "name": "not", - "nativeSrc": "28099:3:43", - "nodeType": "YulIdentifier", - "src": "28099:3:43" - }, - "nativeSrc": "28099:42:43", - "nodeType": "YulFunctionCall", - "src": "28099:42:43" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "28084:3:43", - "nodeType": "YulIdentifier", - "src": "28084:3:43" - }, - "nativeSrc": "28084:58:43", - "nodeType": "YulFunctionCall", - "src": "28084:58:43" - } - ], - "functionName": { - "name": "sstore", - "nativeSrc": "28069:6:43", - "nodeType": "YulIdentifier", - "src": "28069:6:43" - }, - "nativeSrc": "28069:74:43", - "nodeType": "YulFunctionCall", - "src": "28069:74:43" - }, - "nativeSrc": "28069:74:43", - "nodeType": "YulExpressionStatement", - "src": "28069:74:43" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "loopEnd", - "nativeSrc": "27962:7:43", - "nodeType": "YulIdentifier", - "src": "27962:7:43" - }, - { - "name": "newLen", - "nativeSrc": "27971:6:43", - "nodeType": "YulIdentifier", - "src": "27971:6:43" - } - ], - "functionName": { - "name": "lt", - "nativeSrc": "27959:2:43", - "nodeType": "YulIdentifier", - "src": "27959:2:43" - }, - "nativeSrc": "27959:19:43", - "nodeType": "YulFunctionCall", - "src": "27959:19:43" - }, - "nativeSrc": "27956:201:43", - "nodeType": "YulIf", - "src": "27956:201:43" - }, - { - "expression": { - "arguments": [ - { - "name": "slot", - "nativeSrc": "28177:4:43", - "nodeType": "YulIdentifier", - "src": "28177:4:43" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "28191:1:43", - "nodeType": "YulLiteral", - "src": "28191:1:43", - "type": "", - "value": "1" - }, - { - "name": "newLen", - "nativeSrc": "28194:6:43", - "nodeType": "YulIdentifier", - "src": "28194:6:43" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "28187:3:43", - "nodeType": "YulIdentifier", - "src": "28187:3:43" - }, - "nativeSrc": "28187:14:43", - "nodeType": "YulFunctionCall", - "src": "28187:14:43" - }, - { - "kind": "number", - "nativeSrc": "28203:1:43", - "nodeType": "YulLiteral", - "src": "28203:1:43", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "28183:3:43", - "nodeType": "YulIdentifier", - "src": "28183:3:43" - }, - "nativeSrc": "28183:22:43", - "nodeType": "YulFunctionCall", - "src": "28183:22:43" - } - ], - "functionName": { - "name": "sstore", - "nativeSrc": "28170:6:43", - "nodeType": "YulIdentifier", - "src": "28170:6:43" - }, - "nativeSrc": "28170:36:43", - "nodeType": "YulFunctionCall", - "src": "28170:36:43" - }, - "nativeSrc": "28170:36:43", - "nodeType": "YulExpressionStatement", - "src": "28170:36:43" - } - ] - }, - "nativeSrc": "27554:662:43", - "nodeType": "YulCase", - "src": "27554:662:43", - "value": { - "kind": "number", - "nativeSrc": "27559:1:43", - "nodeType": "YulLiteral", - "src": "27559:1:43", - "type": "", - "value": "1" - } - }, - { - "body": { - "nativeSrc": "28233:234:43", - "nodeType": "YulBlock", - "src": "28233:234:43", - "statements": [ - { - "nativeSrc": "28247:14:43", - "nodeType": "YulVariableDeclaration", - "src": "28247:14:43", - "value": { - "kind": "number", - "nativeSrc": "28260:1:43", - "nodeType": "YulLiteral", - "src": "28260:1:43", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "value", - "nativeSrc": "28251:5:43", - "nodeType": "YulTypedName", - "src": "28251:5:43", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "28296:67:43", - "nodeType": "YulBlock", - "src": "28296:67:43", - "statements": [ - { - "nativeSrc": "28314:35:43", - "nodeType": "YulAssignment", - "src": "28314:35:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "src", - "nativeSrc": "28333:3:43", - "nodeType": "YulIdentifier", - "src": "28333:3:43" - }, - { - "name": "srcOffset", - "nativeSrc": "28338:9:43", - "nodeType": "YulIdentifier", - "src": "28338:9:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "28329:3:43", - "nodeType": "YulIdentifier", - "src": "28329:3:43" - }, - "nativeSrc": "28329:19:43", - "nodeType": "YulFunctionCall", - "src": "28329:19:43" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "28323:5:43", - "nodeType": "YulIdentifier", - "src": "28323:5:43" - }, - "nativeSrc": "28323:26:43", - "nodeType": "YulFunctionCall", - "src": "28323:26:43" - }, - "variableNames": [ - { - "name": "value", - "nativeSrc": "28314:5:43", - "nodeType": "YulIdentifier", - "src": "28314:5:43" - } - ] - } - ] - }, - "condition": { - "name": "newLen", - "nativeSrc": "28277:6:43", - "nodeType": "YulIdentifier", - "src": "28277:6:43" - }, - "nativeSrc": "28274:89:43", - "nodeType": "YulIf", - "src": "28274:89:43" - }, - { - "expression": { - "arguments": [ - { - "name": "slot", - "nativeSrc": "28383:4:43", - "nodeType": "YulIdentifier", - "src": "28383:4:43" - }, - { - "arguments": [ - { - "name": "value", - "nativeSrc": "28442:5:43", - "nodeType": "YulIdentifier", - "src": "28442:5:43" - }, - { - "name": "newLen", - "nativeSrc": "28449:6:43", - "nodeType": "YulIdentifier", - "src": "28449:6:43" - } - ], - "functionName": { - "name": "extract_used_part_and_set_length_of_short_byte_array", - "nativeSrc": "28389:52:43", - "nodeType": "YulIdentifier", - "src": "28389:52:43" - }, - "nativeSrc": "28389:67:43", - "nodeType": "YulFunctionCall", - "src": "28389:67:43" - } - ], - "functionName": { - "name": "sstore", - "nativeSrc": "28376:6:43", - "nodeType": "YulIdentifier", - "src": "28376:6:43" - }, - "nativeSrc": "28376:81:43", - "nodeType": "YulFunctionCall", - "src": "28376:81:43" - }, - "nativeSrc": "28376:81:43", - "nodeType": "YulExpressionStatement", - "src": "28376:81:43" - } - ] - }, - "nativeSrc": "28225:242:43", - "nodeType": "YulCase", - "src": "28225:242:43", - "value": "default" - } - ], - "expression": { - "arguments": [ - { - "name": "newLen", - "nativeSrc": "27534:6:43", - "nodeType": "YulIdentifier", - "src": "27534:6:43" - }, - { - "kind": "number", - "nativeSrc": "27542:2:43", - "nodeType": "YulLiteral", - "src": "27542:2:43", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "27531:2:43", - "nodeType": "YulIdentifier", - "src": "27531:2:43" - }, - "nativeSrc": "27531:14:43", - "nodeType": "YulFunctionCall", - "src": "27531:14:43" - }, - "nativeSrc": "27524:943:43", - "nodeType": "YulSwitch", - "src": "27524:943:43" - } - ] - }, - "name": "copy_byte_array_to_storage_from_t_bytes_memory_ptr_to_t_bytes_storage", - "nativeSrc": "27132:1341:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "slot", - "nativeSrc": "27211:4:43", - "nodeType": "YulTypedName", - "src": "27211:4:43", - "type": "" - }, - { - "name": "src", - "nativeSrc": "27217:3:43", - "nodeType": "YulTypedName", - "src": "27217:3:43", - "type": "" - } - ], - "src": "27132:1341:43" - }, - { - "body": { - "nativeSrc": "28703:939:43", - "nodeType": "YulBlock", - "src": "28703:939:43", - "statements": [ - { - "nativeSrc": "28713:12:43", - "nodeType": "YulVariableDeclaration", - "src": "28713:12:43", - "value": { - "kind": "number", - "nativeSrc": "28723:2:43", - "nodeType": "YulLiteral", - "src": "28723:2:43", - "type": "", - "value": "32" - }, - "variables": [ - { - "name": "_1", - "nativeSrc": "28717:2:43", - "nodeType": "YulTypedName", - "src": "28717:2:43", - "type": "" - } - ] - }, - { - "nativeSrc": "28734:32:43", - "nodeType": "YulVariableDeclaration", - "src": "28734:32:43", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "28752:9:43", - "nodeType": "YulIdentifier", - "src": "28752:9:43" - }, - { - "name": "_1", - "nativeSrc": "28763:2:43", - "nodeType": "YulIdentifier", - "src": "28763:2:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "28748:3:43", - "nodeType": "YulIdentifier", - "src": "28748:3:43" - }, - "nativeSrc": "28748:18:43", - "nodeType": "YulFunctionCall", - "src": "28748:18:43" - }, - "variables": [ - { - "name": "tail_1", - "nativeSrc": "28738:6:43", - "nodeType": "YulTypedName", - "src": "28738:6:43", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "28782:9:43", - "nodeType": "YulIdentifier", - "src": "28782:9:43" - }, - { - "name": "_1", - "nativeSrc": "28793:2:43", - "nodeType": "YulIdentifier", - "src": "28793:2:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "28775:6:43", - "nodeType": "YulIdentifier", - "src": "28775:6:43" - }, - "nativeSrc": "28775:21:43", - "nodeType": "YulFunctionCall", - "src": "28775:21:43" - }, - "nativeSrc": "28775:21:43", - "nodeType": "YulExpressionStatement", - "src": "28775:21:43" - }, - { - "nativeSrc": "28805:17:43", - "nodeType": "YulVariableDeclaration", - "src": "28805:17:43", - "value": { - "name": "tail_1", - "nativeSrc": "28816:6:43", - "nodeType": "YulIdentifier", - "src": "28816:6:43" - }, - "variables": [ - { - "name": "pos", - "nativeSrc": "28809:3:43", - "nodeType": "YulTypedName", - "src": "28809:3:43", - "type": "" - } - ] - }, - { - "nativeSrc": "28831:27:43", - "nodeType": "YulVariableDeclaration", - "src": "28831:27:43", - "value": { - "arguments": [ - { - "name": "value0", - "nativeSrc": "28851:6:43", - "nodeType": "YulIdentifier", - "src": "28851:6:43" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "28845:5:43", - "nodeType": "YulIdentifier", - "src": "28845:5:43" - }, - "nativeSrc": "28845:13:43", - "nodeType": "YulFunctionCall", - "src": "28845:13:43" - }, - "variables": [ - { - "name": "length", - "nativeSrc": "28835:6:43", - "nodeType": "YulTypedName", - "src": "28835:6:43", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "tail_1", - "nativeSrc": "28874:6:43", - "nodeType": "YulIdentifier", - "src": "28874:6:43" - }, - { - "name": "length", - "nativeSrc": "28882:6:43", - "nodeType": "YulIdentifier", - "src": "28882:6:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "28867:6:43", - "nodeType": "YulIdentifier", - "src": "28867:6:43" - }, - "nativeSrc": "28867:22:43", - "nodeType": "YulFunctionCall", - "src": "28867:22:43" - }, - "nativeSrc": "28867:22:43", - "nodeType": "YulExpressionStatement", - "src": "28867:22:43" - }, - { - "nativeSrc": "28898:12:43", - "nodeType": "YulVariableDeclaration", - "src": "28898:12:43", - "value": { - "kind": "number", - "nativeSrc": "28908:2:43", - "nodeType": "YulLiteral", - "src": "28908:2:43", - "type": "", - "value": "64" - }, - "variables": [ - { - "name": "_2", - "nativeSrc": "28902:2:43", - "nodeType": "YulTypedName", - "src": "28902:2:43", - "type": "" - } - ] - }, - { - "nativeSrc": "28919:25:43", - "nodeType": "YulAssignment", - "src": "28919:25:43", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "28930:9:43", - "nodeType": "YulIdentifier", - "src": "28930:9:43" - }, - { - "kind": "number", - "nativeSrc": "28941:2:43", - "nodeType": "YulLiteral", - "src": "28941:2:43", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "28926:3:43", - "nodeType": "YulIdentifier", - "src": "28926:3:43" - }, - "nativeSrc": "28926:18:43", - "nodeType": "YulFunctionCall", - "src": "28926:18:43" - }, - "variableNames": [ - { - "name": "pos", - "nativeSrc": "28919:3:43", - "nodeType": "YulIdentifier", - "src": "28919:3:43" - } - ] - }, - { - "nativeSrc": "28953:53:43", - "nodeType": "YulVariableDeclaration", - "src": "28953:53:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "28975:9:43", - "nodeType": "YulIdentifier", - "src": "28975:9:43" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "28990:1:43", - "nodeType": "YulLiteral", - "src": "28990:1:43", - "type": "", - "value": "5" - }, - { - "name": "length", - "nativeSrc": "28993:6:43", - "nodeType": "YulIdentifier", - "src": "28993:6:43" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "28986:3:43", - "nodeType": "YulIdentifier", - "src": "28986:3:43" - }, - "nativeSrc": "28986:14:43", - "nodeType": "YulFunctionCall", - "src": "28986:14:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "28971:3:43", - "nodeType": "YulIdentifier", - "src": "28971:3:43" - }, - "nativeSrc": "28971:30:43", - "nodeType": "YulFunctionCall", - "src": "28971:30:43" - }, - { - "kind": "number", - "nativeSrc": "29003:2:43", - "nodeType": "YulLiteral", - "src": "29003:2:43", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "28967:3:43", - "nodeType": "YulIdentifier", - "src": "28967:3:43" - }, - "nativeSrc": "28967:39:43", - "nodeType": "YulFunctionCall", - "src": "28967:39:43" - }, - "variables": [ - { - "name": "tail_2", - "nativeSrc": "28957:6:43", - "nodeType": "YulTypedName", - "src": "28957:6:43", - "type": "" - } - ] - }, - { - "nativeSrc": "29015:29:43", - "nodeType": "YulVariableDeclaration", - "src": "29015:29:43", - "value": { - "arguments": [ - { - "name": "value0", - "nativeSrc": "29033:6:43", - "nodeType": "YulIdentifier", - "src": "29033:6:43" - }, - { - "name": "_1", - "nativeSrc": "29041:2:43", - "nodeType": "YulIdentifier", - "src": "29041:2:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "29029:3:43", - "nodeType": "YulIdentifier", - "src": "29029:3:43" - }, - "nativeSrc": "29029:15:43", - "nodeType": "YulFunctionCall", - "src": "29029:15:43" - }, - "variables": [ - { - "name": "srcPtr", - "nativeSrc": "29019:6:43", - "nodeType": "YulTypedName", - "src": "29019:6:43", - "type": "" - } - ] - }, - { - "nativeSrc": "29053:10:43", - "nodeType": "YulVariableDeclaration", - "src": "29053:10:43", - "value": { - "kind": "number", - "nativeSrc": "29062:1:43", - "nodeType": "YulLiteral", - "src": "29062:1:43", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "i", - "nativeSrc": "29057:1:43", - "nodeType": "YulTypedName", - "src": "29057:1:43", - "type": "" - } - ] - }, - { - "body": { - "nativeSrc": "29121:492:43", - "nodeType": "YulBlock", - "src": "29121:492:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "pos", - "nativeSrc": "29142:3:43", - "nodeType": "YulIdentifier", - "src": "29142:3:43" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "tail_2", - "nativeSrc": "29155:6:43", - "nodeType": "YulIdentifier", - "src": "29155:6:43" - }, - { - "name": "headStart", - "nativeSrc": "29163:9:43", - "nodeType": "YulIdentifier", - "src": "29163:9:43" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "29151:3:43", - "nodeType": "YulIdentifier", - "src": "29151:3:43" - }, - "nativeSrc": "29151:22:43", - "nodeType": "YulFunctionCall", - "src": "29151:22:43" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "29179:2:43", - "nodeType": "YulLiteral", - "src": "29179:2:43", - "type": "", - "value": "63" - } - ], - "functionName": { - "name": "not", - "nativeSrc": "29175:3:43", - "nodeType": "YulIdentifier", - "src": "29175:3:43" - }, - "nativeSrc": "29175:7:43", - "nodeType": "YulFunctionCall", - "src": "29175:7:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "29147:3:43", - "nodeType": "YulIdentifier", - "src": "29147:3:43" - }, - "nativeSrc": "29147:36:43", - "nodeType": "YulFunctionCall", - "src": "29147:36:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "29135:6:43", - "nodeType": "YulIdentifier", - "src": "29135:6:43" - }, - "nativeSrc": "29135:49:43", - "nodeType": "YulFunctionCall", - "src": "29135:49:43" - }, - "nativeSrc": "29135:49:43", - "nodeType": "YulExpressionStatement", - "src": "29135:49:43" - }, - { - "nativeSrc": "29197:23:43", - "nodeType": "YulVariableDeclaration", - "src": "29197:23:43", - "value": { - "arguments": [ - { - "name": "srcPtr", - "nativeSrc": "29213:6:43", - "nodeType": "YulIdentifier", - "src": "29213:6:43" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "29207:5:43", - "nodeType": "YulIdentifier", - "src": "29207:5:43" - }, - "nativeSrc": "29207:13:43", - "nodeType": "YulFunctionCall", - "src": "29207:13:43" - }, - "variables": [ - { - "name": "_3", - "nativeSrc": "29201:2:43", - "nodeType": "YulTypedName", - "src": "29201:2:43", - "type": "" - } - ] - }, - { - "nativeSrc": "29233:14:43", - "nodeType": "YulVariableDeclaration", - "src": "29233:14:43", - "value": { - "kind": "number", - "nativeSrc": "29243:4:43", - "nodeType": "YulLiteral", - "src": "29243:4:43", - "type": "", - "value": "0x60" - }, - "variables": [ - { - "name": "_4", - "nativeSrc": "29237:2:43", - "nodeType": "YulTypedName", - "src": "29237:2:43", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "tail_2", - "nativeSrc": "29267:6:43", - "nodeType": "YulIdentifier", - "src": "29267:6:43" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "_3", - "nativeSrc": "29285:2:43", - "nodeType": "YulIdentifier", - "src": "29285:2:43" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "29279:5:43", - "nodeType": "YulIdentifier", - "src": "29279:5:43" - }, - "nativeSrc": "29279:9:43", - "nodeType": "YulFunctionCall", - "src": "29279:9:43" - }, - { - "kind": "number", - "nativeSrc": "29290:10:43", - "nodeType": "YulLiteral", - "src": "29290:10:43", - "type": "", - "value": "0xffffffff" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "29275:3:43", - "nodeType": "YulIdentifier", - "src": "29275:3:43" - }, - "nativeSrc": "29275:26:43", - "nodeType": "YulFunctionCall", - "src": "29275:26:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "29260:6:43", - "nodeType": "YulIdentifier", - "src": "29260:6:43" - }, - "nativeSrc": "29260:42:43", - "nodeType": "YulFunctionCall", - "src": "29260:42:43" - }, - "nativeSrc": "29260:42:43", - "nodeType": "YulExpressionStatement", - "src": "29260:42:43" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "tail_2", - "nativeSrc": "29326:6:43", - "nodeType": "YulIdentifier", - "src": "29326:6:43" - }, - { - "name": "_1", - "nativeSrc": "29334:2:43", - "nodeType": "YulIdentifier", - "src": "29334:2:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "29322:3:43", - "nodeType": "YulIdentifier", - "src": "29322:3:43" - }, - "nativeSrc": "29322:15:43", - "nodeType": "YulFunctionCall", - "src": "29322:15:43" - }, - { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "_3", - "nativeSrc": "29353:2:43", - "nodeType": "YulIdentifier", - "src": "29353:2:43" - }, - { - "name": "_1", - "nativeSrc": "29357:2:43", - "nodeType": "YulIdentifier", - "src": "29357:2:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "29349:3:43", - "nodeType": "YulIdentifier", - "src": "29349:3:43" - }, - "nativeSrc": "29349:11:43", - "nodeType": "YulFunctionCall", - "src": "29349:11:43" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "29343:5:43", - "nodeType": "YulIdentifier", - "src": "29343:5:43" - }, - "nativeSrc": "29343:18:43", - "nodeType": "YulFunctionCall", - "src": "29343:18:43" - }, - { - "kind": "number", - "nativeSrc": "29363:6:43", - "nodeType": "YulLiteral", - "src": "29363:6:43", - "type": "", - "value": "0xffff" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "29339:3:43", - "nodeType": "YulIdentifier", - "src": "29339:3:43" - }, - "nativeSrc": "29339:31:43", - "nodeType": "YulFunctionCall", - "src": "29339:31:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "29315:6:43", - "nodeType": "YulIdentifier", - "src": "29315:6:43" - }, - "nativeSrc": "29315:56:43", - "nodeType": "YulFunctionCall", - "src": "29315:56:43" - }, - "nativeSrc": "29315:56:43", - "nodeType": "YulExpressionStatement", - "src": "29315:56:43" - }, - { - "nativeSrc": "29384:38:43", - "nodeType": "YulVariableDeclaration", - "src": "29384:38:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "_3", - "nativeSrc": "29414:2:43", - "nodeType": "YulIdentifier", - "src": "29414:2:43" - }, - { - "name": "_2", - "nativeSrc": "29418:2:43", - "nodeType": "YulIdentifier", - "src": "29418:2:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "29410:3:43", - "nodeType": "YulIdentifier", - "src": "29410:3:43" - }, - "nativeSrc": "29410:11:43", - "nodeType": "YulFunctionCall", - "src": "29410:11:43" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "29404:5:43", - "nodeType": "YulIdentifier", - "src": "29404:5:43" - }, - "nativeSrc": "29404:18:43", - "nodeType": "YulFunctionCall", - "src": "29404:18:43" - }, - "variables": [ - { - "name": "memberValue0", - "nativeSrc": "29388:12:43", - "nodeType": "YulTypedName", - "src": "29388:12:43", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "tail_2", - "nativeSrc": "29446:6:43", - "nodeType": "YulIdentifier", - "src": "29446:6:43" - }, - { - "name": "_2", - "nativeSrc": "29454:2:43", - "nodeType": "YulIdentifier", - "src": "29454:2:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "29442:3:43", - "nodeType": "YulIdentifier", - "src": "29442:3:43" - }, - "nativeSrc": "29442:15:43", - "nodeType": "YulFunctionCall", - "src": "29442:15:43" - }, - { - "name": "_4", - "nativeSrc": "29459:2:43", - "nodeType": "YulIdentifier", - "src": "29459:2:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "29435:6:43", - "nodeType": "YulIdentifier", - "src": "29435:6:43" - }, - "nativeSrc": "29435:27:43", - "nodeType": "YulFunctionCall", - "src": "29435:27:43" - }, - "nativeSrc": "29435:27:43", - "nodeType": "YulExpressionStatement", - "src": "29435:27:43" - }, - { - "nativeSrc": "29475:58:43", - "nodeType": "YulAssignment", - "src": "29475:58:43", - "value": { - "arguments": [ - { - "name": "memberValue0", - "nativeSrc": "29503:12:43", - "nodeType": "YulIdentifier", - "src": "29503:12:43" - }, - { - "arguments": [ - { - "name": "tail_2", - "nativeSrc": "29521:6:43", - "nodeType": "YulIdentifier", - "src": "29521:6:43" - }, - { - "name": "_4", - "nativeSrc": "29529:2:43", - "nodeType": "YulIdentifier", - "src": "29529:2:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "29517:3:43", - "nodeType": "YulIdentifier", - "src": "29517:3:43" - }, - "nativeSrc": "29517:15:43", - "nodeType": "YulFunctionCall", - "src": "29517:15:43" - } - ], - "functionName": { - "name": "abi_encode_string", - "nativeSrc": "29485:17:43", - "nodeType": "YulIdentifier", - "src": "29485:17:43" - }, - "nativeSrc": "29485:48:43", - "nodeType": "YulFunctionCall", - "src": "29485:48:43" - }, - "variableNames": [ - { - "name": "tail_2", - "nativeSrc": "29475:6:43", - "nodeType": "YulIdentifier", - "src": "29475:6:43" - } - ] - }, - { - "nativeSrc": "29546:25:43", - "nodeType": "YulAssignment", - "src": "29546:25:43", - "value": { - "arguments": [ - { - "name": "srcPtr", - "nativeSrc": "29560:6:43", - "nodeType": "YulIdentifier", - "src": "29560:6:43" - }, - { - "name": "_1", - "nativeSrc": "29568:2:43", - "nodeType": "YulIdentifier", - "src": "29568:2:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "29556:3:43", - "nodeType": "YulIdentifier", - "src": "29556:3:43" - }, - "nativeSrc": "29556:15:43", - "nodeType": "YulFunctionCall", - "src": "29556:15:43" - }, - "variableNames": [ - { - "name": "srcPtr", - "nativeSrc": "29546:6:43", - "nodeType": "YulIdentifier", - "src": "29546:6:43" - } - ] - }, - { - "nativeSrc": "29584:19:43", - "nodeType": "YulAssignment", - "src": "29584:19:43", - "value": { - "arguments": [ - { - "name": "pos", - "nativeSrc": "29595:3:43", - "nodeType": "YulIdentifier", - "src": "29595:3:43" - }, - { - "name": "_1", - "nativeSrc": "29600:2:43", - "nodeType": "YulIdentifier", - "src": "29600:2:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "29591:3:43", - "nodeType": "YulIdentifier", - "src": "29591:3:43" - }, - "nativeSrc": "29591:12:43", - "nodeType": "YulFunctionCall", - "src": "29591:12:43" - }, - "variableNames": [ - { - "name": "pos", - "nativeSrc": "29584:3:43", - "nodeType": "YulIdentifier", - "src": "29584:3:43" - } - ] - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nativeSrc": "29083:1:43", - "nodeType": "YulIdentifier", - "src": "29083:1:43" - }, - { - "name": "length", - "nativeSrc": "29086:6:43", - "nodeType": "YulIdentifier", - "src": "29086:6:43" - } - ], - "functionName": { - "name": "lt", - "nativeSrc": "29080:2:43", - "nodeType": "YulIdentifier", - "src": "29080:2:43" - }, - "nativeSrc": "29080:13:43", - "nodeType": "YulFunctionCall", - "src": "29080:13:43" - }, - "nativeSrc": "29072:541:43", - "nodeType": "YulForLoop", - "post": { - "nativeSrc": "29094:18:43", - "nodeType": "YulBlock", - "src": "29094:18:43", - "statements": [ - { - "nativeSrc": "29096:14:43", - "nodeType": "YulAssignment", - "src": "29096:14:43", - "value": { - "arguments": [ - { - "name": "i", - "nativeSrc": "29105:1:43", - "nodeType": "YulIdentifier", - "src": "29105:1:43" - }, - { - "kind": "number", - "nativeSrc": "29108:1:43", - "nodeType": "YulLiteral", - "src": "29108:1:43", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "29101:3:43", - "nodeType": "YulIdentifier", - "src": "29101:3:43" - }, - "nativeSrc": "29101:9:43", - "nodeType": "YulFunctionCall", - "src": "29101:9:43" - }, - "variableNames": [ - { - "name": "i", - "nativeSrc": "29096:1:43", - "nodeType": "YulIdentifier", - "src": "29096:1:43" - } - ] - } - ] - }, - "pre": { - "nativeSrc": "29076:3:43", - "nodeType": "YulBlock", - "src": "29076:3:43", - "statements": [] - }, - "src": "29072:541:43" - }, - { - "nativeSrc": "29622:14:43", - "nodeType": "YulAssignment", - "src": "29622:14:43", - "value": { - "name": "tail_2", - "nativeSrc": "29630:6:43", - "nodeType": "YulIdentifier", - "src": "29630:6:43" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "29622:4:43", - "nodeType": "YulIdentifier", - "src": "29622:4:43" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_array$_t_struct$_EnforcedOptionParam_$1932_memory_ptr_$dyn_memory_ptr__to_t_array$_t_struct$_EnforcedOptionParam_$1932_memory_ptr_$dyn_memory_ptr__fromStack_reversed", - "nativeSrc": "28478:1164:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "28672:9:43", - "nodeType": "YulTypedName", - "src": "28672:9:43", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "28683:6:43", - "nodeType": "YulTypedName", - "src": "28683:6:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "28694:4:43", - "nodeType": "YulTypedName", - "src": "28694:4:43", - "type": "" - } - ], - "src": "28478:1164:43" - }, - { - "body": { - "nativeSrc": "29745:248:43", - "nodeType": "YulBlock", - "src": "29745:248:43", - "statements": [ - { - "body": { - "nativeSrc": "29791:16:43", - "nodeType": "YulBlock", - "src": "29791:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "29800:1:43", - "nodeType": "YulLiteral", - "src": "29800:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "29803:1:43", - "nodeType": "YulLiteral", - "src": "29803:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "29793:6:43", - "nodeType": "YulIdentifier", - "src": "29793:6:43" - }, - "nativeSrc": "29793:12:43", - "nodeType": "YulFunctionCall", - "src": "29793:12:43" - }, - "nativeSrc": "29793:12:43", - "nodeType": "YulExpressionStatement", - "src": "29793:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nativeSrc": "29766:7:43", - "nodeType": "YulIdentifier", - "src": "29766:7:43" - }, - { - "name": "headStart", - "nativeSrc": "29775:9:43", - "nodeType": "YulIdentifier", - "src": "29775:9:43" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "29762:3:43", - "nodeType": "YulIdentifier", - "src": "29762:3:43" - }, - "nativeSrc": "29762:23:43", - "nodeType": "YulFunctionCall", - "src": "29762:23:43" - }, - { - "kind": "number", - "nativeSrc": "29787:2:43", - "nodeType": "YulLiteral", - "src": "29787:2:43", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "29758:3:43", - "nodeType": "YulIdentifier", - "src": "29758:3:43" - }, - "nativeSrc": "29758:32:43", - "nodeType": "YulFunctionCall", - "src": "29758:32:43" - }, - "nativeSrc": "29755:52:43", - "nodeType": "YulIf", - "src": "29755:52:43" - }, - { - "nativeSrc": "29816:35:43", - "nodeType": "YulVariableDeclaration", - "src": "29816:35:43", - "value": { - "arguments": [], - "functionName": { - "name": "allocate_memory_4160", - "nativeSrc": "29829:20:43", - "nodeType": "YulIdentifier", - "src": "29829:20:43" - }, - "nativeSrc": "29829:22:43", - "nodeType": "YulFunctionCall", - "src": "29829:22:43" - }, - "variables": [ - { - "name": "value", - "nativeSrc": "29820:5:43", - "nodeType": "YulTypedName", - "src": "29820:5:43", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nativeSrc": "29867:5:43", - "nodeType": "YulIdentifier", - "src": "29867:5:43" - }, - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "29887:9:43", - "nodeType": "YulIdentifier", - "src": "29887:9:43" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "29874:12:43", - "nodeType": "YulIdentifier", - "src": "29874:12:43" - }, - "nativeSrc": "29874:23:43", - "nodeType": "YulFunctionCall", - "src": "29874:23:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "29860:6:43", - "nodeType": "YulIdentifier", - "src": "29860:6:43" - }, - "nativeSrc": "29860:38:43", - "nodeType": "YulFunctionCall", - "src": "29860:38:43" - }, - "nativeSrc": "29860:38:43", - "nodeType": "YulExpressionStatement", - "src": "29860:38:43" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nativeSrc": "29918:5:43", - "nodeType": "YulIdentifier", - "src": "29918:5:43" - }, - { - "kind": "number", - "nativeSrc": "29925:2:43", - "nodeType": "YulLiteral", - "src": "29925:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "29914:3:43", - "nodeType": "YulIdentifier", - "src": "29914:3:43" - }, - "nativeSrc": "29914:14:43", - "nodeType": "YulFunctionCall", - "src": "29914:14:43" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "29947:9:43", - "nodeType": "YulIdentifier", - "src": "29947:9:43" - }, - { - "kind": "number", - "nativeSrc": "29958:2:43", - "nodeType": "YulLiteral", - "src": "29958:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "29943:3:43", - "nodeType": "YulIdentifier", - "src": "29943:3:43" - }, - "nativeSrc": "29943:18:43", - "nodeType": "YulFunctionCall", - "src": "29943:18:43" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "29930:12:43", - "nodeType": "YulIdentifier", - "src": "29930:12:43" - }, - "nativeSrc": "29930:32:43", - "nodeType": "YulFunctionCall", - "src": "29930:32:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "29907:6:43", - "nodeType": "YulIdentifier", - "src": "29907:6:43" - }, - "nativeSrc": "29907:56:43", - "nodeType": "YulFunctionCall", - "src": "29907:56:43" - }, - "nativeSrc": "29907:56:43", - "nodeType": "YulExpressionStatement", - "src": "29907:56:43" - }, - { - "nativeSrc": "29972:15:43", - "nodeType": "YulAssignment", - "src": "29972:15:43", - "value": { - "name": "value", - "nativeSrc": "29982:5:43", - "nodeType": "YulIdentifier", - "src": "29982:5:43" - }, - "variableNames": [ - { - "name": "value0", - "nativeSrc": "29972:6:43", - "nodeType": "YulIdentifier", - "src": "29972:6:43" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_struct$_MessagingFee_$33_memory_ptr", - "nativeSrc": "29647:346:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "29711:9:43", - "nodeType": "YulTypedName", - "src": "29711:9:43", - "type": "" - }, - { - "name": "dataEnd", - "nativeSrc": "29722:7:43", - "nodeType": "YulTypedName", - "src": "29722:7:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nativeSrc": "29734:6:43", - "nodeType": "YulTypedName", - "src": "29734:6:43", - "type": "" - } - ], - "src": "29647:346:43" - }, - { - "body": { - "nativeSrc": "30153:179:43", - "nodeType": "YulBlock", - "src": "30153:179:43", - "statements": [ - { - "nativeSrc": "30163:26:43", - "nodeType": "YulAssignment", - "src": "30163:26:43", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "30175:9:43", - "nodeType": "YulIdentifier", - "src": "30175:9:43" - }, - { - "kind": "number", - "nativeSrc": "30186:2:43", - "nodeType": "YulLiteral", - "src": "30186:2:43", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "30171:3:43", - "nodeType": "YulIdentifier", - "src": "30171:3:43" - }, - "nativeSrc": "30171:18:43", - "nodeType": "YulFunctionCall", - "src": "30171:18:43" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "30163:4:43", - "nodeType": "YulIdentifier", - "src": "30163:4:43" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "30205:9:43", - "nodeType": "YulIdentifier", - "src": "30205:9:43" - }, - { - "arguments": [ - { - "name": "value0", - "nativeSrc": "30220:6:43", - "nodeType": "YulIdentifier", - "src": "30220:6:43" - }, - { - "kind": "number", - "nativeSrc": "30228:10:43", - "nodeType": "YulLiteral", - "src": "30228:10:43", - "type": "", - "value": "0xffffffff" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "30216:3:43", - "nodeType": "YulIdentifier", - "src": "30216:3:43" - }, - "nativeSrc": "30216:23:43", - "nodeType": "YulFunctionCall", - "src": "30216:23:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "30198:6:43", - "nodeType": "YulIdentifier", - "src": "30198:6:43" - }, - "nativeSrc": "30198:42:43", - "nodeType": "YulFunctionCall", - "src": "30198:42:43" - }, - "nativeSrc": "30198:42:43", - "nodeType": "YulExpressionStatement", - "src": "30198:42:43" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "30260:9:43", - "nodeType": "YulIdentifier", - "src": "30260:9:43" - }, - { - "kind": "number", - "nativeSrc": "30271:2:43", - "nodeType": "YulLiteral", - "src": "30271:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "30256:3:43", - "nodeType": "YulIdentifier", - "src": "30256:3:43" - }, - "nativeSrc": "30256:18:43", - "nodeType": "YulFunctionCall", - "src": "30256:18:43" - }, - { - "name": "value1", - "nativeSrc": "30276:6:43", - "nodeType": "YulIdentifier", - "src": "30276:6:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "30249:6:43", - "nodeType": "YulIdentifier", - "src": "30249:6:43" - }, - "nativeSrc": "30249:34:43", - "nodeType": "YulFunctionCall", - "src": "30249:34:43" - }, - "nativeSrc": "30249:34:43", - "nodeType": "YulExpressionStatement", - "src": "30249:34:43" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "30303:9:43", - "nodeType": "YulIdentifier", - "src": "30303:9:43" - }, - { - "kind": "number", - "nativeSrc": "30314:2:43", - "nodeType": "YulLiteral", - "src": "30314:2:43", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "30299:3:43", - "nodeType": "YulIdentifier", - "src": "30299:3:43" - }, - "nativeSrc": "30299:18:43", - "nodeType": "YulFunctionCall", - "src": "30299:18:43" - }, - { - "name": "value2", - "nativeSrc": "30319:6:43", - "nodeType": "YulIdentifier", - "src": "30319:6:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "30292:6:43", - "nodeType": "YulIdentifier", - "src": "30292:6:43" - }, - "nativeSrc": "30292:34:43", - "nodeType": "YulFunctionCall", - "src": "30292:34:43" - }, - "nativeSrc": "30292:34:43", - "nodeType": "YulExpressionStatement", - "src": "30292:34:43" - } - ] - }, - "name": "abi_encode_tuple_t_uint32_t_uint256_t_uint256__to_t_uint32_t_uint256_t_uint256__fromStack_reversed", - "nativeSrc": "29998:334:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "30106:9:43", - "nodeType": "YulTypedName", - "src": "30106:9:43", - "type": "" - }, - { - "name": "value2", - "nativeSrc": "30117:6:43", - "nodeType": "YulTypedName", - "src": "30117:6:43", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "30125:6:43", - "nodeType": "YulTypedName", - "src": "30125:6:43", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "30133:6:43", - "nodeType": "YulTypedName", - "src": "30133:6:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "30144:4:43", - "nodeType": "YulTypedName", - "src": "30144:4:43", - "type": "" - } - ], - "src": "29998:334:43" - }, - { - "body": { - "nativeSrc": "30369:95:43", - "nodeType": "YulBlock", - "src": "30369:95:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "30386:1:43", - "nodeType": "YulLiteral", - "src": "30386:1:43", - "type": "", - "value": "0" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "30393:3:43", - "nodeType": "YulLiteral", - "src": "30393:3:43", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nativeSrc": "30398:10:43", - "nodeType": "YulLiteral", - "src": "30398:10:43", - "type": "", - "value": "0x4e487b71" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "30389:3:43", - "nodeType": "YulIdentifier", - "src": "30389:3:43" - }, - "nativeSrc": "30389:20:43", - "nodeType": "YulFunctionCall", - "src": "30389:20:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "30379:6:43", - "nodeType": "YulIdentifier", - "src": "30379:6:43" - }, - "nativeSrc": "30379:31:43", - "nodeType": "YulFunctionCall", - "src": "30379:31:43" - }, - "nativeSrc": "30379:31:43", - "nodeType": "YulExpressionStatement", - "src": "30379:31:43" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "30426:1:43", - "nodeType": "YulLiteral", - "src": "30426:1:43", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nativeSrc": "30429:4:43", - "nodeType": "YulLiteral", - "src": "30429:4:43", - "type": "", - "value": "0x11" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "30419:6:43", - "nodeType": "YulIdentifier", - "src": "30419:6:43" - }, - "nativeSrc": "30419:15:43", - "nodeType": "YulFunctionCall", - "src": "30419:15:43" - }, - "nativeSrc": "30419:15:43", - "nodeType": "YulExpressionStatement", - "src": "30419:15:43" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "30450:1:43", - "nodeType": "YulLiteral", - "src": "30450:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "30453:4:43", - "nodeType": "YulLiteral", - "src": "30453:4:43", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "30443:6:43", - "nodeType": "YulIdentifier", - "src": "30443:6:43" - }, - "nativeSrc": "30443:15:43", - "nodeType": "YulFunctionCall", - "src": "30443:15:43" - }, - "nativeSrc": "30443:15:43", - "nodeType": "YulExpressionStatement", - "src": "30443:15:43" - } - ] - }, - "name": "panic_error_0x11", - "nativeSrc": "30337:127:43", - "nodeType": "YulFunctionDefinition", - "src": "30337:127:43" - }, - { - "body": { - "nativeSrc": "30515:171:43", - "nodeType": "YulBlock", - "src": "30515:171:43", - "statements": [ - { - "body": { - "nativeSrc": "30546:111:43", - "nodeType": "YulBlock", - "src": "30546:111:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "30567:1:43", - "nodeType": "YulLiteral", - "src": "30567:1:43", - "type": "", - "value": "0" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "30574:3:43", - "nodeType": "YulLiteral", - "src": "30574:3:43", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nativeSrc": "30579:10:43", - "nodeType": "YulLiteral", - "src": "30579:10:43", - "type": "", - "value": "0x4e487b71" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "30570:3:43", - "nodeType": "YulIdentifier", - "src": "30570:3:43" - }, - "nativeSrc": "30570:20:43", - "nodeType": "YulFunctionCall", - "src": "30570:20:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "30560:6:43", - "nodeType": "YulIdentifier", - "src": "30560:6:43" - }, - "nativeSrc": "30560:31:43", - "nodeType": "YulFunctionCall", - "src": "30560:31:43" - }, - "nativeSrc": "30560:31:43", - "nodeType": "YulExpressionStatement", - "src": "30560:31:43" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "30611:1:43", - "nodeType": "YulLiteral", - "src": "30611:1:43", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nativeSrc": "30614:4:43", - "nodeType": "YulLiteral", - "src": "30614:4:43", - "type": "", - "value": "0x12" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "30604:6:43", - "nodeType": "YulIdentifier", - "src": "30604:6:43" - }, - "nativeSrc": "30604:15:43", - "nodeType": "YulFunctionCall", - "src": "30604:15:43" - }, - "nativeSrc": "30604:15:43", - "nodeType": "YulExpressionStatement", - "src": "30604:15:43" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "30639:1:43", - "nodeType": "YulLiteral", - "src": "30639:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "30642:4:43", - "nodeType": "YulLiteral", - "src": "30642:4:43", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "30632:6:43", - "nodeType": "YulIdentifier", - "src": "30632:6:43" - }, - "nativeSrc": "30632:15:43", - "nodeType": "YulFunctionCall", - "src": "30632:15:43" - }, - "nativeSrc": "30632:15:43", - "nodeType": "YulExpressionStatement", - "src": "30632:15:43" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "y", - "nativeSrc": "30535:1:43", - "nodeType": "YulIdentifier", - "src": "30535:1:43" - } - ], - "functionName": { - "name": "iszero", - "nativeSrc": "30528:6:43", - "nodeType": "YulIdentifier", - "src": "30528:6:43" - }, - "nativeSrc": "30528:9:43", - "nodeType": "YulFunctionCall", - "src": "30528:9:43" - }, - "nativeSrc": "30525:132:43", - "nodeType": "YulIf", - "src": "30525:132:43" - }, - { - "nativeSrc": "30666:14:43", - "nodeType": "YulAssignment", - "src": "30666:14:43", - "value": { - "arguments": [ - { - "name": "x", - "nativeSrc": "30675:1:43", - "nodeType": "YulIdentifier", - "src": "30675:1:43" - }, - { - "name": "y", - "nativeSrc": "30678:1:43", - "nodeType": "YulIdentifier", - "src": "30678:1:43" - } - ], - "functionName": { - "name": "div", - "nativeSrc": "30671:3:43", - "nodeType": "YulIdentifier", - "src": "30671:3:43" - }, - "nativeSrc": "30671:9:43", - "nodeType": "YulFunctionCall", - "src": "30671:9:43" - }, - "variableNames": [ - { - "name": "r", - "nativeSrc": "30666:1:43", - "nodeType": "YulIdentifier", - "src": "30666:1:43" - } - ] - } - ] - }, - "name": "checked_div_t_uint256", - "nativeSrc": "30469:217:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "x", - "nativeSrc": "30500:1:43", - "nodeType": "YulTypedName", - "src": "30500:1:43", - "type": "" - }, - { - "name": "y", - "nativeSrc": "30503:1:43", - "nodeType": "YulTypedName", - "src": "30503:1:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "r", - "nativeSrc": "30509:1:43", - "nodeType": "YulTypedName", - "src": "30509:1:43", - "type": "" - } - ], - "src": "30469:217:43" - }, - { - "body": { - "nativeSrc": "30743:116:43", - "nodeType": "YulBlock", - "src": "30743:116:43", - "statements": [ - { - "nativeSrc": "30753:20:43", - "nodeType": "YulAssignment", - "src": "30753:20:43", - "value": { - "arguments": [ - { - "name": "x", - "nativeSrc": "30768:1:43", - "nodeType": "YulIdentifier", - "src": "30768:1:43" - }, - { - "name": "y", - "nativeSrc": "30771:1:43", - "nodeType": "YulIdentifier", - "src": "30771:1:43" - } - ], - "functionName": { - "name": "mul", - "nativeSrc": "30764:3:43", - "nodeType": "YulIdentifier", - "src": "30764:3:43" - }, - "nativeSrc": "30764:9:43", - "nodeType": "YulFunctionCall", - "src": "30764:9:43" - }, - "variableNames": [ - { - "name": "product", - "nativeSrc": "30753:7:43", - "nodeType": "YulIdentifier", - "src": "30753:7:43" - } - ] - }, - { - "body": { - "nativeSrc": "30831:22:43", - "nodeType": "YulBlock", - "src": "30831:22:43", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x11", - "nativeSrc": "30833:16:43", - "nodeType": "YulIdentifier", - "src": "30833:16:43" - }, - "nativeSrc": "30833:18:43", - "nodeType": "YulFunctionCall", - "src": "30833:18:43" - }, - "nativeSrc": "30833:18:43", - "nodeType": "YulExpressionStatement", - "src": "30833:18:43" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "x", - "nativeSrc": "30802:1:43", - "nodeType": "YulIdentifier", - "src": "30802:1:43" - } - ], - "functionName": { - "name": "iszero", - "nativeSrc": "30795:6:43", - "nodeType": "YulIdentifier", - "src": "30795:6:43" - }, - "nativeSrc": "30795:9:43", - "nodeType": "YulFunctionCall", - "src": "30795:9:43" - }, - { - "arguments": [ - { - "name": "y", - "nativeSrc": "30809:1:43", - "nodeType": "YulIdentifier", - "src": "30809:1:43" - }, - { - "arguments": [ - { - "name": "product", - "nativeSrc": "30816:7:43", - "nodeType": "YulIdentifier", - "src": "30816:7:43" - }, - { - "name": "x", - "nativeSrc": "30825:1:43", - "nodeType": "YulIdentifier", - "src": "30825:1:43" - } - ], - "functionName": { - "name": "div", - "nativeSrc": "30812:3:43", - "nodeType": "YulIdentifier", - "src": "30812:3:43" - }, - "nativeSrc": "30812:15:43", - "nodeType": "YulFunctionCall", - "src": "30812:15:43" - } - ], - "functionName": { - "name": "eq", - "nativeSrc": "30806:2:43", - "nodeType": "YulIdentifier", - "src": "30806:2:43" - }, - "nativeSrc": "30806:22:43", - "nodeType": "YulFunctionCall", - "src": "30806:22:43" - } - ], - "functionName": { - "name": "or", - "nativeSrc": "30792:2:43", - "nodeType": "YulIdentifier", - "src": "30792:2:43" - }, - "nativeSrc": "30792:37:43", - "nodeType": "YulFunctionCall", - "src": "30792:37:43" - } - ], - "functionName": { - "name": "iszero", - "nativeSrc": "30785:6:43", - "nodeType": "YulIdentifier", - "src": "30785:6:43" - }, - "nativeSrc": "30785:45:43", - "nodeType": "YulFunctionCall", - "src": "30785:45:43" - }, - "nativeSrc": "30782:71:43", - "nodeType": "YulIf", - "src": "30782:71:43" - } - ] - }, - "name": "checked_mul_t_uint256", - "nativeSrc": "30691:168:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "x", - "nativeSrc": "30722:1:43", - "nodeType": "YulTypedName", - "src": "30722:1:43", - "type": "" - }, - { - "name": "y", - "nativeSrc": "30725:1:43", - "nodeType": "YulTypedName", - "src": "30725:1:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "product", - "nativeSrc": "30731:7:43", - "nodeType": "YulTypedName", - "src": "30731:7:43", - "type": "" - } - ], - "src": "30691:168:43" - }, - { - "body": { - "nativeSrc": "30965:154:43", - "nodeType": "YulBlock", - "src": "30965:154:43", - "statements": [ - { - "nativeSrc": "30975:28:43", - "nodeType": "YulAssignment", - "src": "30975:28:43", - "value": { - "arguments": [ - { - "name": "array", - "nativeSrc": "30997:5:43", - "nodeType": "YulIdentifier", - "src": "30997:5:43" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "30984:12:43", - "nodeType": "YulIdentifier", - "src": "30984:12:43" - }, - "nativeSrc": "30984:19:43", - "nodeType": "YulFunctionCall", - "src": "30984:19:43" - }, - "variableNames": [ - { - "name": "value", - "nativeSrc": "30975:5:43", - "nodeType": "YulIdentifier", - "src": "30975:5:43" - } - ] - }, - { - "body": { - "nativeSrc": "31035:78:43", - "nodeType": "YulBlock", - "src": "31035:78:43", - "statements": [ - { - "nativeSrc": "31049:54:43", - "nodeType": "YulAssignment", - "src": "31049:54:43", - "value": { - "arguments": [ - { - "name": "value", - "nativeSrc": "31062:5:43", - "nodeType": "YulIdentifier", - "src": "31062:5:43" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "31077:1:43", - "nodeType": "YulLiteral", - "src": "31077:1:43", - "type": "", - "value": "3" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "31084:2:43", - "nodeType": "YulLiteral", - "src": "31084:2:43", - "type": "", - "value": "32" - }, - { - "name": "len", - "nativeSrc": "31088:3:43", - "nodeType": "YulIdentifier", - "src": "31088:3:43" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "31080:3:43", - "nodeType": "YulIdentifier", - "src": "31080:3:43" - }, - "nativeSrc": "31080:12:43", - "nodeType": "YulFunctionCall", - "src": "31080:12:43" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "31073:3:43", - "nodeType": "YulIdentifier", - "src": "31073:3:43" - }, - "nativeSrc": "31073:20:43", - "nodeType": "YulFunctionCall", - "src": "31073:20:43" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "31099:1:43", - "nodeType": "YulLiteral", - "src": "31099:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "not", - "nativeSrc": "31095:3:43", - "nodeType": "YulIdentifier", - "src": "31095:3:43" - }, - "nativeSrc": "31095:6:43", - "nodeType": "YulFunctionCall", - "src": "31095:6:43" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "31069:3:43", - "nodeType": "YulIdentifier", - "src": "31069:3:43" - }, - "nativeSrc": "31069:33:43", - "nodeType": "YulFunctionCall", - "src": "31069:33:43" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "31058:3:43", - "nodeType": "YulIdentifier", - "src": "31058:3:43" - }, - "nativeSrc": "31058:45:43", - "nodeType": "YulFunctionCall", - "src": "31058:45:43" - }, - "variableNames": [ - { - "name": "value", - "nativeSrc": "31049:5:43", - "nodeType": "YulIdentifier", - "src": "31049:5:43" - } - ] - } - ] - }, - "condition": { - "arguments": [ - { - "name": "len", - "nativeSrc": "31018:3:43", - "nodeType": "YulIdentifier", - "src": "31018:3:43" - }, - { - "kind": "number", - "nativeSrc": "31023:2:43", - "nodeType": "YulLiteral", - "src": "31023:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "lt", - "nativeSrc": "31015:2:43", - "nodeType": "YulIdentifier", - "src": "31015:2:43" - }, - "nativeSrc": "31015:11:43", - "nodeType": "YulFunctionCall", - "src": "31015:11:43" - }, - "nativeSrc": "31012:101:43", - "nodeType": "YulIf", - "src": "31012:101:43" - } - ] - }, - "name": "convert_bytes_to_fixedbytes_from_t_bytes_calldata_ptr_to_t_bytes32", - "nativeSrc": "30864:255:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "array", - "nativeSrc": "30940:5:43", - "nodeType": "YulTypedName", - "src": "30940:5:43", - "type": "" - }, - { - "name": "len", - "nativeSrc": "30947:3:43", - "nodeType": "YulTypedName", - "src": "30947:3:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value", - "nativeSrc": "30955:5:43", - "nodeType": "YulTypedName", - "src": "30955:5:43", - "type": "" - } - ], - "src": "30864:255:43" - }, - { - "body": { - "nativeSrc": "31224:231:43", - "nodeType": "YulBlock", - "src": "31224:231:43", - "statements": [ - { - "nativeSrc": "31234:29:43", - "nodeType": "YulVariableDeclaration", - "src": "31234:29:43", - "value": { - "arguments": [ - { - "name": "array", - "nativeSrc": "31257:5:43", - "nodeType": "YulIdentifier", - "src": "31257:5:43" - } - ], - "functionName": { - "name": "calldataload", - "nativeSrc": "31244:12:43", - "nodeType": "YulIdentifier", - "src": "31244:12:43" - }, - "nativeSrc": "31244:19:43", - "nodeType": "YulFunctionCall", - "src": "31244:19:43" - }, - "variables": [ - { - "name": "_1", - "nativeSrc": "31238:2:43", - "nodeType": "YulTypedName", - "src": "31238:2:43", - "type": "" - } - ] - }, - { - "nativeSrc": "31272:38:43", - "nodeType": "YulVariableDeclaration", - "src": "31272:38:43", - "value": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "31286:3:43", - "nodeType": "YulLiteral", - "src": "31286:3:43", - "type": "", - "value": "192" - }, - { - "kind": "number", - "nativeSrc": "31291:18:43", - "nodeType": "YulLiteral", - "src": "31291:18:43", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "31282:3:43", - "nodeType": "YulIdentifier", - "src": "31282:3:43" - }, - "nativeSrc": "31282:28:43", - "nodeType": "YulFunctionCall", - "src": "31282:28:43" - }, - "variables": [ - { - "name": "_2", - "nativeSrc": "31276:2:43", - "nodeType": "YulTypedName", - "src": "31276:2:43", - "type": "" - } - ] - }, - { - "nativeSrc": "31319:20:43", - "nodeType": "YulAssignment", - "src": "31319:20:43", - "value": { - "arguments": [ - { - "name": "_1", - "nativeSrc": "31332:2:43", - "nodeType": "YulIdentifier", - "src": "31332:2:43" - }, - { - "name": "_2", - "nativeSrc": "31336:2:43", - "nodeType": "YulIdentifier", - "src": "31336:2:43" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "31328:3:43", - "nodeType": "YulIdentifier", - "src": "31328:3:43" - }, - "nativeSrc": "31328:11:43", - "nodeType": "YulFunctionCall", - "src": "31328:11:43" - }, - "variableNames": [ - { - "name": "value", - "nativeSrc": "31319:5:43", - "nodeType": "YulIdentifier", - "src": "31319:5:43" - } - ] - }, - { - "body": { - "nativeSrc": "31370:79:43", - "nodeType": "YulBlock", - "src": "31370:79:43", - "statements": [ - { - "nativeSrc": "31384:55:43", - "nodeType": "YulAssignment", - "src": "31384:55:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "_1", - "nativeSrc": "31401:2:43", - "nodeType": "YulIdentifier", - "src": "31401:2:43" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "31413:1:43", - "nodeType": "YulLiteral", - "src": "31413:1:43", - "type": "", - "value": "3" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "31420:1:43", - "nodeType": "YulLiteral", - "src": "31420:1:43", - "type": "", - "value": "8" - }, - { - "name": "len", - "nativeSrc": "31423:3:43", - "nodeType": "YulIdentifier", - "src": "31423:3:43" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "31416:3:43", - "nodeType": "YulIdentifier", - "src": "31416:3:43" - }, - "nativeSrc": "31416:11:43", - "nodeType": "YulFunctionCall", - "src": "31416:11:43" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "31409:3:43", - "nodeType": "YulIdentifier", - "src": "31409:3:43" - }, - "nativeSrc": "31409:19:43", - "nodeType": "YulFunctionCall", - "src": "31409:19:43" - }, - { - "name": "_2", - "nativeSrc": "31430:2:43", - "nodeType": "YulIdentifier", - "src": "31430:2:43" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "31405:3:43", - "nodeType": "YulIdentifier", - "src": "31405:3:43" - }, - "nativeSrc": "31405:28:43", - "nodeType": "YulFunctionCall", - "src": "31405:28:43" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "31397:3:43", - "nodeType": "YulIdentifier", - "src": "31397:3:43" - }, - "nativeSrc": "31397:37:43", - "nodeType": "YulFunctionCall", - "src": "31397:37:43" - }, - { - "name": "_2", - "nativeSrc": "31436:2:43", - "nodeType": "YulIdentifier", - "src": "31436:2:43" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "31393:3:43", - "nodeType": "YulIdentifier", - "src": "31393:3:43" - }, - "nativeSrc": "31393:46:43", - "nodeType": "YulFunctionCall", - "src": "31393:46:43" - }, - "variableNames": [ - { - "name": "value", - "nativeSrc": "31384:5:43", - "nodeType": "YulIdentifier", - "src": "31384:5:43" - } - ] - } - ] - }, - "condition": { - "arguments": [ - { - "name": "len", - "nativeSrc": "31354:3:43", - "nodeType": "YulIdentifier", - "src": "31354:3:43" - }, - { - "kind": "number", - "nativeSrc": "31359:1:43", - "nodeType": "YulLiteral", - "src": "31359:1:43", - "type": "", - "value": "8" - } - ], - "functionName": { - "name": "lt", - "nativeSrc": "31351:2:43", - "nodeType": "YulIdentifier", - "src": "31351:2:43" - }, - "nativeSrc": "31351:10:43", - "nodeType": "YulFunctionCall", - "src": "31351:10:43" - }, - "nativeSrc": "31348:101:43", - "nodeType": "YulIf", - "src": "31348:101:43" - } - ] - }, - "name": "convert_bytes_to_fixedbytes_from_t_bytes_calldata_ptr_to_t_bytes8", - "nativeSrc": "31124:331:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "array", - "nativeSrc": "31199:5:43", - "nodeType": "YulTypedName", - "src": "31199:5:43", - "type": "" - }, - { - "name": "len", - "nativeSrc": "31206:3:43", - "nodeType": "YulTypedName", - "src": "31206:3:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value", - "nativeSrc": "31214:5:43", - "nodeType": "YulTypedName", - "src": "31214:5:43", - "type": "" - } - ], - "src": "31124:331:43" - }, - { - "body": { - "nativeSrc": "31677:351:43", - "nodeType": "YulBlock", - "src": "31677:351:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "pos", - "nativeSrc": "31694:3:43", - "nodeType": "YulIdentifier", - "src": "31694:3:43" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "31707:3:43", - "nodeType": "YulLiteral", - "src": "31707:3:43", - "type": "", - "value": "192" - }, - { - "name": "value0", - "nativeSrc": "31712:6:43", - "nodeType": "YulIdentifier", - "src": "31712:6:43" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "31703:3:43", - "nodeType": "YulIdentifier", - "src": "31703:3:43" - }, - "nativeSrc": "31703:16:43", - "nodeType": "YulFunctionCall", - "src": "31703:16:43" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "31725:3:43", - "nodeType": "YulLiteral", - "src": "31725:3:43", - "type": "", - "value": "192" - }, - { - "kind": "number", - "nativeSrc": "31730:18:43", - "nodeType": "YulLiteral", - "src": "31730:18:43", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "31721:3:43", - "nodeType": "YulIdentifier", - "src": "31721:3:43" - }, - "nativeSrc": "31721:28:43", - "nodeType": "YulFunctionCall", - "src": "31721:28:43" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "31699:3:43", - "nodeType": "YulIdentifier", - "src": "31699:3:43" - }, - "nativeSrc": "31699:51:43", - "nodeType": "YulFunctionCall", - "src": "31699:51:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "31687:6:43", - "nodeType": "YulIdentifier", - "src": "31687:6:43" - }, - "nativeSrc": "31687:64:43", - "nodeType": "YulFunctionCall", - "src": "31687:64:43" - }, - "nativeSrc": "31687:64:43", - "nodeType": "YulExpressionStatement", - "src": "31687:64:43" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "pos", - "nativeSrc": "31771:3:43", - "nodeType": "YulIdentifier", - "src": "31771:3:43" - }, - { - "kind": "number", - "nativeSrc": "31776:1:43", - "nodeType": "YulLiteral", - "src": "31776:1:43", - "type": "", - "value": "8" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "31767:3:43", - "nodeType": "YulIdentifier", - "src": "31767:3:43" - }, - "nativeSrc": "31767:11:43", - "nodeType": "YulFunctionCall", - "src": "31767:11:43" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "31788:3:43", - "nodeType": "YulLiteral", - "src": "31788:3:43", - "type": "", - "value": "224" - }, - { - "name": "value1", - "nativeSrc": "31793:6:43", - "nodeType": "YulIdentifier", - "src": "31793:6:43" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "31784:3:43", - "nodeType": "YulIdentifier", - "src": "31784:3:43" - }, - "nativeSrc": "31784:16:43", - "nodeType": "YulFunctionCall", - "src": "31784:16:43" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "31806:3:43", - "nodeType": "YulLiteral", - "src": "31806:3:43", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nativeSrc": "31811:10:43", - "nodeType": "YulLiteral", - "src": "31811:10:43", - "type": "", - "value": "0xffffffff" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "31802:3:43", - "nodeType": "YulIdentifier", - "src": "31802:3:43" - }, - "nativeSrc": "31802:20:43", - "nodeType": "YulFunctionCall", - "src": "31802:20:43" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "31780:3:43", - "nodeType": "YulIdentifier", - "src": "31780:3:43" - }, - "nativeSrc": "31780:43:43", - "nodeType": "YulFunctionCall", - "src": "31780:43:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "31760:6:43", - "nodeType": "YulIdentifier", - "src": "31760:6:43" - }, - "nativeSrc": "31760:64:43", - "nodeType": "YulFunctionCall", - "src": "31760:64:43" - }, - "nativeSrc": "31760:64:43", - "nodeType": "YulExpressionStatement", - "src": "31760:64:43" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "pos", - "nativeSrc": "31844:3:43", - "nodeType": "YulIdentifier", - "src": "31844:3:43" - }, - { - "kind": "number", - "nativeSrc": "31849:2:43", - "nodeType": "YulLiteral", - "src": "31849:2:43", - "type": "", - "value": "12" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "31840:3:43", - "nodeType": "YulIdentifier", - "src": "31840:3:43" - }, - "nativeSrc": "31840:12:43", - "nodeType": "YulFunctionCall", - "src": "31840:12:43" - }, - { - "name": "value2", - "nativeSrc": "31854:6:43", - "nodeType": "YulIdentifier", - "src": "31854:6:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "31833:6:43", - "nodeType": "YulIdentifier", - "src": "31833:6:43" - }, - "nativeSrc": "31833:28:43", - "nodeType": "YulFunctionCall", - "src": "31833:28:43" - }, - "nativeSrc": "31833:28:43", - "nodeType": "YulExpressionStatement", - "src": "31833:28:43" - }, - { - "nativeSrc": "31870:27:43", - "nodeType": "YulVariableDeclaration", - "src": "31870:27:43", - "value": { - "arguments": [ - { - "name": "value3", - "nativeSrc": "31890:6:43", - "nodeType": "YulIdentifier", - "src": "31890:6:43" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "31884:5:43", - "nodeType": "YulIdentifier", - "src": "31884:5:43" - }, - "nativeSrc": "31884:13:43", - "nodeType": "YulFunctionCall", - "src": "31884:13:43" - }, - "variables": [ - { - "name": "length", - "nativeSrc": "31874:6:43", - "nodeType": "YulTypedName", - "src": "31874:6:43", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value3", - "nativeSrc": "31945:6:43", - "nodeType": "YulIdentifier", - "src": "31945:6:43" - }, - { - "kind": "number", - "nativeSrc": "31953:4:43", - "nodeType": "YulLiteral", - "src": "31953:4:43", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "31941:3:43", - "nodeType": "YulIdentifier", - "src": "31941:3:43" - }, - "nativeSrc": "31941:17:43", - "nodeType": "YulFunctionCall", - "src": "31941:17:43" - }, - { - "arguments": [ - { - "name": "pos", - "nativeSrc": "31964:3:43", - "nodeType": "YulIdentifier", - "src": "31964:3:43" - }, - { - "kind": "number", - "nativeSrc": "31969:2:43", - "nodeType": "YulLiteral", - "src": "31969:2:43", - "type": "", - "value": "44" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "31960:3:43", - "nodeType": "YulIdentifier", - "src": "31960:3:43" - }, - "nativeSrc": "31960:12:43", - "nodeType": "YulFunctionCall", - "src": "31960:12:43" - }, - { - "name": "length", - "nativeSrc": "31974:6:43", - "nodeType": "YulIdentifier", - "src": "31974:6:43" - } - ], - "functionName": { - "name": "copy_memory_to_memory_with_cleanup", - "nativeSrc": "31906:34:43", - "nodeType": "YulIdentifier", - "src": "31906:34:43" - }, - "nativeSrc": "31906:75:43", - "nodeType": "YulFunctionCall", - "src": "31906:75:43" - }, - "nativeSrc": "31906:75:43", - "nodeType": "YulExpressionStatement", - "src": "31906:75:43" - }, - { - "nativeSrc": "31990:32:43", - "nodeType": "YulAssignment", - "src": "31990:32:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "pos", - "nativeSrc": "32005:3:43", - "nodeType": "YulIdentifier", - "src": "32005:3:43" - }, - { - "name": "length", - "nativeSrc": "32010:6:43", - "nodeType": "YulIdentifier", - "src": "32010:6:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "32001:3:43", - "nodeType": "YulIdentifier", - "src": "32001:3:43" - }, - "nativeSrc": "32001:16:43", - "nodeType": "YulFunctionCall", - "src": "32001:16:43" - }, - { - "kind": "number", - "nativeSrc": "32019:2:43", - "nodeType": "YulLiteral", - "src": "32019:2:43", - "type": "", - "value": "44" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "31997:3:43", - "nodeType": "YulIdentifier", - "src": "31997:3:43" - }, - "nativeSrc": "31997:25:43", - "nodeType": "YulFunctionCall", - "src": "31997:25:43" - }, - "variableNames": [ - { - "name": "end", - "nativeSrc": "31990:3:43", - "nodeType": "YulIdentifier", - "src": "31990:3:43" - } - ] - } - ] - }, - "name": "abi_encode_tuple_packed_t_uint64_t_uint32_t_uint256_t_bytes_memory_ptr__to_t_uint64_t_uint32_t_uint256_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed", - "nativeSrc": "31460:568:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "pos", - "nativeSrc": "31629:3:43", - "nodeType": "YulTypedName", - "src": "31629:3:43", - "type": "" - }, - { - "name": "value3", - "nativeSrc": "31634:6:43", - "nodeType": "YulTypedName", - "src": "31634:6:43", - "type": "" - }, - { - "name": "value2", - "nativeSrc": "31642:6:43", - "nodeType": "YulTypedName", - "src": "31642:6:43", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "31650:6:43", - "nodeType": "YulTypedName", - "src": "31650:6:43", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "31658:6:43", - "nodeType": "YulTypedName", - "src": "31658:6:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "end", - "nativeSrc": "31669:3:43", - "nodeType": "YulTypedName", - "src": "31669:3:43", - "type": "" - } - ], - "src": "31460:568:43" - }, - { - "body": { - "nativeSrc": "32081:77:43", - "nodeType": "YulBlock", - "src": "32081:77:43", - "statements": [ - { - "nativeSrc": "32091:16:43", - "nodeType": "YulAssignment", - "src": "32091:16:43", - "value": { - "arguments": [ - { - "name": "x", - "nativeSrc": "32102:1:43", - "nodeType": "YulIdentifier", - "src": "32102:1:43" - }, - { - "name": "y", - "nativeSrc": "32105:1:43", - "nodeType": "YulIdentifier", - "src": "32105:1:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "32098:3:43", - "nodeType": "YulIdentifier", - "src": "32098:3:43" - }, - "nativeSrc": "32098:9:43", - "nodeType": "YulFunctionCall", - "src": "32098:9:43" - }, - "variableNames": [ - { - "name": "sum", - "nativeSrc": "32091:3:43", - "nodeType": "YulIdentifier", - "src": "32091:3:43" - } - ] - }, - { - "body": { - "nativeSrc": "32130:22:43", - "nodeType": "YulBlock", - "src": "32130:22:43", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x11", - "nativeSrc": "32132:16:43", - "nodeType": "YulIdentifier", - "src": "32132:16:43" - }, - "nativeSrc": "32132:18:43", - "nodeType": "YulFunctionCall", - "src": "32132:18:43" - }, - "nativeSrc": "32132:18:43", - "nodeType": "YulExpressionStatement", - "src": "32132:18:43" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "x", - "nativeSrc": "32122:1:43", - "nodeType": "YulIdentifier", - "src": "32122:1:43" - }, - { - "name": "sum", - "nativeSrc": "32125:3:43", - "nodeType": "YulIdentifier", - "src": "32125:3:43" - } - ], - "functionName": { - "name": "gt", - "nativeSrc": "32119:2:43", - "nodeType": "YulIdentifier", - "src": "32119:2:43" - }, - "nativeSrc": "32119:10:43", - "nodeType": "YulFunctionCall", - "src": "32119:10:43" - }, - "nativeSrc": "32116:36:43", - "nodeType": "YulIf", - "src": "32116:36:43" - } - ] - }, - "name": "checked_add_t_uint256", - "nativeSrc": "32033:125:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "x", - "nativeSrc": "32064:1:43", - "nodeType": "YulTypedName", - "src": "32064:1:43", - "type": "" - }, - { - "name": "y", - "nativeSrc": "32067:1:43", - "nodeType": "YulTypedName", - "src": "32067:1:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "sum", - "nativeSrc": "32073:3:43", - "nodeType": "YulTypedName", - "src": "32073:3:43", - "type": "" - } - ], - "src": "32033:125:43" - }, - { - "body": { - "nativeSrc": "32308:145:43", - "nodeType": "YulBlock", - "src": "32308:145:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "pos", - "nativeSrc": "32325:3:43", - "nodeType": "YulIdentifier", - "src": "32325:3:43" - }, - { - "name": "value0", - "nativeSrc": "32330:6:43", - "nodeType": "YulIdentifier", - "src": "32330:6:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "32318:6:43", - "nodeType": "YulIdentifier", - "src": "32318:6:43" - }, - "nativeSrc": "32318:19:43", - "nodeType": "YulFunctionCall", - "src": "32318:19:43" - }, - "nativeSrc": "32318:19:43", - "nodeType": "YulExpressionStatement", - "src": "32318:19:43" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "pos", - "nativeSrc": "32357:3:43", - "nodeType": "YulIdentifier", - "src": "32357:3:43" - }, - { - "kind": "number", - "nativeSrc": "32362:2:43", - "nodeType": "YulLiteral", - "src": "32362:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "32353:3:43", - "nodeType": "YulIdentifier", - "src": "32353:3:43" - }, - "nativeSrc": "32353:12:43", - "nodeType": "YulFunctionCall", - "src": "32353:12:43" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "32375:3:43", - "nodeType": "YulLiteral", - "src": "32375:3:43", - "type": "", - "value": "192" - }, - { - "name": "value1", - "nativeSrc": "32380:6:43", - "nodeType": "YulIdentifier", - "src": "32380:6:43" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "32371:3:43", - "nodeType": "YulIdentifier", - "src": "32371:3:43" - }, - "nativeSrc": "32371:16:43", - "nodeType": "YulFunctionCall", - "src": "32371:16:43" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "32393:3:43", - "nodeType": "YulLiteral", - "src": "32393:3:43", - "type": "", - "value": "192" - }, - { - "kind": "number", - "nativeSrc": "32398:18:43", - "nodeType": "YulLiteral", - "src": "32398:18:43", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "32389:3:43", - "nodeType": "YulIdentifier", - "src": "32389:3:43" - }, - "nativeSrc": "32389:28:43", - "nodeType": "YulFunctionCall", - "src": "32389:28:43" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "32367:3:43", - "nodeType": "YulIdentifier", - "src": "32367:3:43" - }, - "nativeSrc": "32367:51:43", - "nodeType": "YulFunctionCall", - "src": "32367:51:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "32346:6:43", - "nodeType": "YulIdentifier", - "src": "32346:6:43" - }, - "nativeSrc": "32346:73:43", - "nodeType": "YulFunctionCall", - "src": "32346:73:43" - }, - "nativeSrc": "32346:73:43", - "nodeType": "YulExpressionStatement", - "src": "32346:73:43" - }, - { - "nativeSrc": "32428:19:43", - "nodeType": "YulAssignment", - "src": "32428:19:43", - "value": { - "arguments": [ - { - "name": "pos", - "nativeSrc": "32439:3:43", - "nodeType": "YulIdentifier", - "src": "32439:3:43" - }, - { - "kind": "number", - "nativeSrc": "32444:2:43", - "nodeType": "YulLiteral", - "src": "32444:2:43", - "type": "", - "value": "40" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "32435:3:43", - "nodeType": "YulIdentifier", - "src": "32435:3:43" - }, - "nativeSrc": "32435:12:43", - "nodeType": "YulFunctionCall", - "src": "32435:12:43" - }, - "variableNames": [ - { - "name": "end", - "nativeSrc": "32428:3:43", - "nodeType": "YulIdentifier", - "src": "32428:3:43" - } - ] - } - ] - }, - "name": "abi_encode_tuple_packed_t_bytes32_t_uint64__to_t_bytes32_t_uint64__nonPadded_inplace_fromStack_reversed", - "nativeSrc": "32163:290:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "pos", - "nativeSrc": "32276:3:43", - "nodeType": "YulTypedName", - "src": "32276:3:43", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "32281:6:43", - "nodeType": "YulTypedName", - "src": "32281:6:43", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "32289:6:43", - "nodeType": "YulTypedName", - "src": "32289:6:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "end", - "nativeSrc": "32300:3:43", - "nodeType": "YulTypedName", - "src": "32300:3:43", - "type": "" - } - ], - "src": "32163:290:43" - }, - { - "body": { - "nativeSrc": "32677:313:43", - "nodeType": "YulBlock", - "src": "32677:313:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "pos", - "nativeSrc": "32694:3:43", - "nodeType": "YulIdentifier", - "src": "32694:3:43" - }, - { - "name": "value0", - "nativeSrc": "32699:6:43", - "nodeType": "YulIdentifier", - "src": "32699:6:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "32687:6:43", - "nodeType": "YulIdentifier", - "src": "32687:6:43" - }, - "nativeSrc": "32687:19:43", - "nodeType": "YulFunctionCall", - "src": "32687:19:43" - }, - "nativeSrc": "32687:19:43", - "nodeType": "YulExpressionStatement", - "src": "32687:19:43" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "pos", - "nativeSrc": "32726:3:43", - "nodeType": "YulIdentifier", - "src": "32726:3:43" - }, - { - "kind": "number", - "nativeSrc": "32731:2:43", - "nodeType": "YulLiteral", - "src": "32731:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "32722:3:43", - "nodeType": "YulIdentifier", - "src": "32722:3:43" - }, - "nativeSrc": "32722:12:43", - "nodeType": "YulFunctionCall", - "src": "32722:12:43" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "32744:3:43", - "nodeType": "YulLiteral", - "src": "32744:3:43", - "type": "", - "value": "192" - }, - { - "name": "value1", - "nativeSrc": "32749:6:43", - "nodeType": "YulIdentifier", - "src": "32749:6:43" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "32740:3:43", - "nodeType": "YulIdentifier", - "src": "32740:3:43" - }, - "nativeSrc": "32740:16:43", - "nodeType": "YulFunctionCall", - "src": "32740:16:43" - }, - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "32762:3:43", - "nodeType": "YulLiteral", - "src": "32762:3:43", - "type": "", - "value": "192" - }, - { - "kind": "number", - "nativeSrc": "32767:18:43", - "nodeType": "YulLiteral", - "src": "32767:18:43", - "type": "", - "value": "0xffffffffffffffff" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "32758:3:43", - "nodeType": "YulIdentifier", - "src": "32758:3:43" - }, - "nativeSrc": "32758:28:43", - "nodeType": "YulFunctionCall", - "src": "32758:28:43" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "32736:3:43", - "nodeType": "YulIdentifier", - "src": "32736:3:43" - }, - "nativeSrc": "32736:51:43", - "nodeType": "YulFunctionCall", - "src": "32736:51:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "32715:6:43", - "nodeType": "YulIdentifier", - "src": "32715:6:43" - }, - "nativeSrc": "32715:73:43", - "nodeType": "YulFunctionCall", - "src": "32715:73:43" - }, - "nativeSrc": "32715:73:43", - "nodeType": "YulExpressionStatement", - "src": "32715:73:43" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "pos", - "nativeSrc": "32808:3:43", - "nodeType": "YulIdentifier", - "src": "32808:3:43" - }, - { - "kind": "number", - "nativeSrc": "32813:2:43", - "nodeType": "YulLiteral", - "src": "32813:2:43", - "type": "", - "value": "40" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "32804:3:43", - "nodeType": "YulIdentifier", - "src": "32804:3:43" - }, - "nativeSrc": "32804:12:43", - "nodeType": "YulFunctionCall", - "src": "32804:12:43" - }, - { - "name": "value2", - "nativeSrc": "32818:6:43", - "nodeType": "YulIdentifier", - "src": "32818:6:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "32797:6:43", - "nodeType": "YulIdentifier", - "src": "32797:6:43" - }, - "nativeSrc": "32797:28:43", - "nodeType": "YulFunctionCall", - "src": "32797:28:43" - }, - "nativeSrc": "32797:28:43", - "nodeType": "YulExpressionStatement", - "src": "32797:28:43" - }, - { - "nativeSrc": "32834:27:43", - "nodeType": "YulVariableDeclaration", - "src": "32834:27:43", - "value": { - "arguments": [ - { - "name": "value3", - "nativeSrc": "32854:6:43", - "nodeType": "YulIdentifier", - "src": "32854:6:43" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "32848:5:43", - "nodeType": "YulIdentifier", - "src": "32848:5:43" - }, - "nativeSrc": "32848:13:43", - "nodeType": "YulFunctionCall", - "src": "32848:13:43" - }, - "variables": [ - { - "name": "length", - "nativeSrc": "32838:6:43", - "nodeType": "YulTypedName", - "src": "32838:6:43", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value3", - "nativeSrc": "32909:6:43", - "nodeType": "YulIdentifier", - "src": "32909:6:43" - }, - { - "kind": "number", - "nativeSrc": "32917:2:43", - "nodeType": "YulLiteral", - "src": "32917:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "32905:3:43", - "nodeType": "YulIdentifier", - "src": "32905:3:43" - }, - "nativeSrc": "32905:15:43", - "nodeType": "YulFunctionCall", - "src": "32905:15:43" - }, - { - "arguments": [ - { - "name": "pos", - "nativeSrc": "32926:3:43", - "nodeType": "YulIdentifier", - "src": "32926:3:43" - }, - { - "kind": "number", - "nativeSrc": "32931:2:43", - "nodeType": "YulLiteral", - "src": "32931:2:43", - "type": "", - "value": "72" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "32922:3:43", - "nodeType": "YulIdentifier", - "src": "32922:3:43" - }, - "nativeSrc": "32922:12:43", - "nodeType": "YulFunctionCall", - "src": "32922:12:43" - }, - { - "name": "length", - "nativeSrc": "32936:6:43", - "nodeType": "YulIdentifier", - "src": "32936:6:43" - } - ], - "functionName": { - "name": "copy_memory_to_memory_with_cleanup", - "nativeSrc": "32870:34:43", - "nodeType": "YulIdentifier", - "src": "32870:34:43" - }, - "nativeSrc": "32870:73:43", - "nodeType": "YulFunctionCall", - "src": "32870:73:43" - }, - "nativeSrc": "32870:73:43", - "nodeType": "YulExpressionStatement", - "src": "32870:73:43" - }, - { - "nativeSrc": "32952:32:43", - "nodeType": "YulAssignment", - "src": "32952:32:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "pos", - "nativeSrc": "32967:3:43", - "nodeType": "YulIdentifier", - "src": "32967:3:43" - }, - { - "name": "length", - "nativeSrc": "32972:6:43", - "nodeType": "YulIdentifier", - "src": "32972:6:43" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "32963:3:43", - "nodeType": "YulIdentifier", - "src": "32963:3:43" - }, - "nativeSrc": "32963:16:43", - "nodeType": "YulFunctionCall", - "src": "32963:16:43" - }, - { - "kind": "number", - "nativeSrc": "32981:2:43", - "nodeType": "YulLiteral", - "src": "32981:2:43", - "type": "", - "value": "72" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "32959:3:43", - "nodeType": "YulIdentifier", - "src": "32959:3:43" - }, - "nativeSrc": "32959:25:43", - "nodeType": "YulFunctionCall", - "src": "32959:25:43" - }, - "variableNames": [ - { - "name": "end", - "nativeSrc": "32952:3:43", - "nodeType": "YulIdentifier", - "src": "32952:3:43" - } - ] - } - ] - }, - "name": "abi_encode_tuple_packed_t_bytes32_t_uint64_t_bytes32_t_bytes_memory_ptr__to_t_bytes32_t_uint64_t_bytes32_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed", - "nativeSrc": "32458:532:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "pos", - "nativeSrc": "32629:3:43", - "nodeType": "YulTypedName", - "src": "32629:3:43", - "type": "" - }, - { - "name": "value3", - "nativeSrc": "32634:6:43", - "nodeType": "YulTypedName", - "src": "32634:6:43", - "type": "" - }, - { - "name": "value2", - "nativeSrc": "32642:6:43", - "nodeType": "YulTypedName", - "src": "32642:6:43", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "32650:6:43", - "nodeType": "YulTypedName", - "src": "32650:6:43", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "32658:6:43", - "nodeType": "YulTypedName", - "src": "32658:6:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "end", - "nativeSrc": "32669:3:43", - "nodeType": "YulTypedName", - "src": "32669:3:43", - "type": "" - } - ], - "src": "32458:532:43" - }, - { - "body": { - "nativeSrc": "33108:410:43", - "nodeType": "YulBlock", - "src": "33108:410:43", - "statements": [ - { - "body": { - "nativeSrc": "33155:16:43", - "nodeType": "YulBlock", - "src": "33155:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "33164:1:43", - "nodeType": "YulLiteral", - "src": "33164:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "33167:1:43", - "nodeType": "YulLiteral", - "src": "33167:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "33157:6:43", - "nodeType": "YulIdentifier", - "src": "33157:6:43" - }, - "nativeSrc": "33157:12:43", - "nodeType": "YulFunctionCall", - "src": "33157:12:43" - }, - "nativeSrc": "33157:12:43", - "nodeType": "YulExpressionStatement", - "src": "33157:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nativeSrc": "33129:7:43", - "nodeType": "YulIdentifier", - "src": "33129:7:43" - }, - { - "name": "headStart", - "nativeSrc": "33138:9:43", - "nodeType": "YulIdentifier", - "src": "33138:9:43" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "33125:3:43", - "nodeType": "YulIdentifier", - "src": "33125:3:43" - }, - "nativeSrc": "33125:23:43", - "nodeType": "YulFunctionCall", - "src": "33125:23:43" - }, - { - "kind": "number", - "nativeSrc": "33150:3:43", - "nodeType": "YulLiteral", - "src": "33150:3:43", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "33121:3:43", - "nodeType": "YulIdentifier", - "src": "33121:3:43" - }, - "nativeSrc": "33121:33:43", - "nodeType": "YulFunctionCall", - "src": "33121:33:43" - }, - "nativeSrc": "33118:53:43", - "nodeType": "YulIf", - "src": "33118:53:43" - }, - { - "nativeSrc": "33180:35:43", - "nodeType": "YulVariableDeclaration", - "src": "33180:35:43", - "value": { - "arguments": [], - "functionName": { - "name": "allocate_memory_4159", - "nativeSrc": "33193:20:43", - "nodeType": "YulIdentifier", - "src": "33193:20:43" - }, - "nativeSrc": "33193:22:43", - "nodeType": "YulFunctionCall", - "src": "33193:22:43" - }, - "variables": [ - { - "name": "value", - "nativeSrc": "33184:5:43", - "nodeType": "YulTypedName", - "src": "33184:5:43", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nativeSrc": "33231:5:43", - "nodeType": "YulIdentifier", - "src": "33231:5:43" - }, - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "33244:9:43", - "nodeType": "YulIdentifier", - "src": "33244:9:43" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "33238:5:43", - "nodeType": "YulIdentifier", - "src": "33238:5:43" - }, - "nativeSrc": "33238:16:43", - "nodeType": "YulFunctionCall", - "src": "33238:16:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "33224:6:43", - "nodeType": "YulIdentifier", - "src": "33224:6:43" - }, - "nativeSrc": "33224:31:43", - "nodeType": "YulFunctionCall", - "src": "33224:31:43" - }, - "nativeSrc": "33224:31:43", - "nodeType": "YulExpressionStatement", - "src": "33224:31:43" - }, - { - "nativeSrc": "33264:40:43", - "nodeType": "YulVariableDeclaration", - "src": "33264:40:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "33289:9:43", - "nodeType": "YulIdentifier", - "src": "33289:9:43" - }, - { - "kind": "number", - "nativeSrc": "33300:2:43", - "nodeType": "YulLiteral", - "src": "33300:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "33285:3:43", - "nodeType": "YulIdentifier", - "src": "33285:3:43" - }, - "nativeSrc": "33285:18:43", - "nodeType": "YulFunctionCall", - "src": "33285:18:43" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "33279:5:43", - "nodeType": "YulIdentifier", - "src": "33279:5:43" - }, - "nativeSrc": "33279:25:43", - "nodeType": "YulFunctionCall", - "src": "33279:25:43" - }, - "variables": [ - { - "name": "value_1", - "nativeSrc": "33268:7:43", - "nodeType": "YulTypedName", - "src": "33268:7:43", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value_1", - "nativeSrc": "33337:7:43", - "nodeType": "YulIdentifier", - "src": "33337:7:43" - } - ], - "functionName": { - "name": "validator_revert_uint64", - "nativeSrc": "33313:23:43", - "nodeType": "YulIdentifier", - "src": "33313:23:43" - }, - "nativeSrc": "33313:32:43", - "nodeType": "YulFunctionCall", - "src": "33313:32:43" - }, - "nativeSrc": "33313:32:43", - "nodeType": "YulExpressionStatement", - "src": "33313:32:43" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nativeSrc": "33365:5:43", - "nodeType": "YulIdentifier", - "src": "33365:5:43" - }, - { - "kind": "number", - "nativeSrc": "33372:2:43", - "nodeType": "YulLiteral", - "src": "33372:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "33361:3:43", - "nodeType": "YulIdentifier", - "src": "33361:3:43" - }, - "nativeSrc": "33361:14:43", - "nodeType": "YulFunctionCall", - "src": "33361:14:43" - }, - { - "name": "value_1", - "nativeSrc": "33377:7:43", - "nodeType": "YulIdentifier", - "src": "33377:7:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "33354:6:43", - "nodeType": "YulIdentifier", - "src": "33354:6:43" - }, - "nativeSrc": "33354:31:43", - "nodeType": "YulFunctionCall", - "src": "33354:31:43" - }, - "nativeSrc": "33354:31:43", - "nodeType": "YulExpressionStatement", - "src": "33354:31:43" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nativeSrc": "33405:5:43", - "nodeType": "YulIdentifier", - "src": "33405:5:43" - }, - { - "kind": "number", - "nativeSrc": "33412:2:43", - "nodeType": "YulLiteral", - "src": "33412:2:43", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "33401:3:43", - "nodeType": "YulIdentifier", - "src": "33401:3:43" - }, - "nativeSrc": "33401:14:43", - "nodeType": "YulFunctionCall", - "src": "33401:14:43" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "33463:9:43", - "nodeType": "YulIdentifier", - "src": "33463:9:43" - }, - { - "kind": "number", - "nativeSrc": "33474:2:43", - "nodeType": "YulLiteral", - "src": "33474:2:43", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "33459:3:43", - "nodeType": "YulIdentifier", - "src": "33459:3:43" - }, - "nativeSrc": "33459:18:43", - "nodeType": "YulFunctionCall", - "src": "33459:18:43" - }, - { - "name": "dataEnd", - "nativeSrc": "33479:7:43", - "nodeType": "YulIdentifier", - "src": "33479:7:43" - } - ], - "functionName": { - "name": "abi_decode_struct_MessagingFee_fromMemory", - "nativeSrc": "33417:41:43", - "nodeType": "YulIdentifier", - "src": "33417:41:43" - }, - "nativeSrc": "33417:70:43", - "nodeType": "YulFunctionCall", - "src": "33417:70:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "33394:6:43", - "nodeType": "YulIdentifier", - "src": "33394:6:43" - }, - "nativeSrc": "33394:94:43", - "nodeType": "YulFunctionCall", - "src": "33394:94:43" - }, - "nativeSrc": "33394:94:43", - "nodeType": "YulExpressionStatement", - "src": "33394:94:43" - }, - { - "nativeSrc": "33497:15:43", - "nodeType": "YulAssignment", - "src": "33497:15:43", - "value": { - "name": "value", - "nativeSrc": "33507:5:43", - "nodeType": "YulIdentifier", - "src": "33507:5:43" - }, - "variableNames": [ - { - "name": "value0", - "nativeSrc": "33497:6:43", - "nodeType": "YulIdentifier", - "src": "33497:6:43" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_struct$_MessagingReceipt_$28_memory_ptr_fromMemory", - "nativeSrc": "32995:523:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "33074:9:43", - "nodeType": "YulTypedName", - "src": "33074:9:43", - "type": "" - }, - { - "name": "dataEnd", - "nativeSrc": "33085:7:43", - "nodeType": "YulTypedName", - "src": "33085:7:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nativeSrc": "33097:6:43", - "nodeType": "YulTypedName", - "src": "33097:6:43", - "type": "" - } - ], - "src": "32995:523:43" - }, - { - "body": { - "nativeSrc": "33604:170:43", - "nodeType": "YulBlock", - "src": "33604:170:43", - "statements": [ - { - "body": { - "nativeSrc": "33650:16:43", - "nodeType": "YulBlock", - "src": "33650:16:43", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nativeSrc": "33659:1:43", - "nodeType": "YulLiteral", - "src": "33659:1:43", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nativeSrc": "33662:1:43", - "nodeType": "YulLiteral", - "src": "33662:1:43", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nativeSrc": "33652:6:43", - "nodeType": "YulIdentifier", - "src": "33652:6:43" - }, - "nativeSrc": "33652:12:43", - "nodeType": "YulFunctionCall", - "src": "33652:12:43" - }, - "nativeSrc": "33652:12:43", - "nodeType": "YulExpressionStatement", - "src": "33652:12:43" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nativeSrc": "33625:7:43", - "nodeType": "YulIdentifier", - "src": "33625:7:43" - }, - { - "name": "headStart", - "nativeSrc": "33634:9:43", - "nodeType": "YulIdentifier", - "src": "33634:9:43" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "33621:3:43", - "nodeType": "YulIdentifier", - "src": "33621:3:43" - }, - "nativeSrc": "33621:23:43", - "nodeType": "YulFunctionCall", - "src": "33621:23:43" - }, - { - "kind": "number", - "nativeSrc": "33646:2:43", - "nodeType": "YulLiteral", - "src": "33646:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nativeSrc": "33617:3:43", - "nodeType": "YulIdentifier", - "src": "33617:3:43" - }, - "nativeSrc": "33617:32:43", - "nodeType": "YulFunctionCall", - "src": "33617:32:43" - }, - "nativeSrc": "33614:52:43", - "nodeType": "YulIf", - "src": "33614:52:43" - }, - { - "nativeSrc": "33675:29:43", - "nodeType": "YulVariableDeclaration", - "src": "33675:29:43", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "33694:9:43", - "nodeType": "YulIdentifier", - "src": "33694:9:43" - } - ], - "functionName": { - "name": "mload", - "nativeSrc": "33688:5:43", - "nodeType": "YulIdentifier", - "src": "33688:5:43" - }, - "nativeSrc": "33688:16:43", - "nodeType": "YulFunctionCall", - "src": "33688:16:43" - }, - "variables": [ - { - "name": "value", - "nativeSrc": "33679:5:43", - "nodeType": "YulTypedName", - "src": "33679:5:43", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "value", - "nativeSrc": "33738:5:43", - "nodeType": "YulIdentifier", - "src": "33738:5:43" - } - ], - "functionName": { - "name": "validator_revert_address", - "nativeSrc": "33713:24:43", - "nodeType": "YulIdentifier", - "src": "33713:24:43" - }, - "nativeSrc": "33713:31:43", - "nodeType": "YulFunctionCall", - "src": "33713:31:43" - }, - "nativeSrc": "33713:31:43", - "nodeType": "YulExpressionStatement", - "src": "33713:31:43" - }, - { - "nativeSrc": "33753:15:43", - "nodeType": "YulAssignment", - "src": "33753:15:43", - "value": { - "name": "value", - "nativeSrc": "33763:5:43", - "nodeType": "YulIdentifier", - "src": "33763:5:43" - }, - "variableNames": [ - { - "name": "value0", - "nativeSrc": "33753:6:43", - "nodeType": "YulIdentifier", - "src": "33753:6:43" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_address_fromMemory", - "nativeSrc": "33523:251:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "33570:9:43", - "nodeType": "YulTypedName", - "src": "33570:9:43", - "type": "" - }, - { - "name": "dataEnd", - "nativeSrc": "33581:7:43", - "nodeType": "YulTypedName", - "src": "33581:7:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nativeSrc": "33593:6:43", - "nodeType": "YulTypedName", - "src": "33593:6:43", - "type": "" - } - ], - "src": "33523:251:43" - }, - { - "body": { - "nativeSrc": "33936:218:43", - "nodeType": "YulBlock", - "src": "33936:218:43", - "statements": [ - { - "nativeSrc": "33946:26:43", - "nodeType": "YulAssignment", - "src": "33946:26:43", - "value": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "33958:9:43", - "nodeType": "YulIdentifier", - "src": "33958:9:43" - }, - { - "kind": "number", - "nativeSrc": "33969:2:43", - "nodeType": "YulLiteral", - "src": "33969:2:43", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "33954:3:43", - "nodeType": "YulIdentifier", - "src": "33954:3:43" - }, - "nativeSrc": "33954:18:43", - "nodeType": "YulFunctionCall", - "src": "33954:18:43" - }, - "variableNames": [ - { - "name": "tail", - "nativeSrc": "33946:4:43", - "nodeType": "YulIdentifier", - "src": "33946:4:43" - } - ] - }, - { - "nativeSrc": "33981:29:43", - "nodeType": "YulVariableDeclaration", - "src": "33981:29:43", - "value": { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nativeSrc": "33999:3:43", - "nodeType": "YulLiteral", - "src": "33999:3:43", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nativeSrc": "34004:1:43", - "nodeType": "YulLiteral", - "src": "34004:1:43", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nativeSrc": "33995:3:43", - "nodeType": "YulIdentifier", - "src": "33995:3:43" - }, - "nativeSrc": "33995:11:43", - "nodeType": "YulFunctionCall", - "src": "33995:11:43" - }, - { - "kind": "number", - "nativeSrc": "34008:1:43", - "nodeType": "YulLiteral", - "src": "34008:1:43", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nativeSrc": "33991:3:43", - "nodeType": "YulIdentifier", - "src": "33991:3:43" - }, - "nativeSrc": "33991:19:43", - "nodeType": "YulFunctionCall", - "src": "33991:19:43" - }, - "variables": [ - { - "name": "_1", - "nativeSrc": "33985:2:43", - "nodeType": "YulTypedName", - "src": "33985:2:43", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "34026:9:43", - "nodeType": "YulIdentifier", - "src": "34026:9:43" - }, - { - "arguments": [ - { - "name": "value0", - "nativeSrc": "34041:6:43", - "nodeType": "YulIdentifier", - "src": "34041:6:43" - }, - { - "name": "_1", - "nativeSrc": "34049:2:43", - "nodeType": "YulIdentifier", - "src": "34049:2:43" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "34037:3:43", - "nodeType": "YulIdentifier", - "src": "34037:3:43" - }, - "nativeSrc": "34037:15:43", - "nodeType": "YulFunctionCall", - "src": "34037:15:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "34019:6:43", - "nodeType": "YulIdentifier", - "src": "34019:6:43" - }, - "nativeSrc": "34019:34:43", - "nodeType": "YulFunctionCall", - "src": "34019:34:43" - }, - "nativeSrc": "34019:34:43", - "nodeType": "YulExpressionStatement", - "src": "34019:34:43" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "34073:9:43", - "nodeType": "YulIdentifier", - "src": "34073:9:43" - }, - { - "kind": "number", - "nativeSrc": "34084:2:43", - "nodeType": "YulLiteral", - "src": "34084:2:43", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "34069:3:43", - "nodeType": "YulIdentifier", - "src": "34069:3:43" - }, - "nativeSrc": "34069:18:43", - "nodeType": "YulFunctionCall", - "src": "34069:18:43" - }, - { - "arguments": [ - { - "name": "value1", - "nativeSrc": "34093:6:43", - "nodeType": "YulIdentifier", - "src": "34093:6:43" - }, - { - "name": "_1", - "nativeSrc": "34101:2:43", - "nodeType": "YulIdentifier", - "src": "34101:2:43" - } - ], - "functionName": { - "name": "and", - "nativeSrc": "34089:3:43", - "nodeType": "YulIdentifier", - "src": "34089:3:43" - }, - "nativeSrc": "34089:15:43", - "nodeType": "YulFunctionCall", - "src": "34089:15:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "34062:6:43", - "nodeType": "YulIdentifier", - "src": "34062:6:43" - }, - "nativeSrc": "34062:43:43", - "nodeType": "YulFunctionCall", - "src": "34062:43:43" - }, - "nativeSrc": "34062:43:43", - "nodeType": "YulExpressionStatement", - "src": "34062:43:43" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nativeSrc": "34125:9:43", - "nodeType": "YulIdentifier", - "src": "34125:9:43" - }, - { - "kind": "number", - "nativeSrc": "34136:2:43", - "nodeType": "YulLiteral", - "src": "34136:2:43", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nativeSrc": "34121:3:43", - "nodeType": "YulIdentifier", - "src": "34121:3:43" - }, - "nativeSrc": "34121:18:43", - "nodeType": "YulFunctionCall", - "src": "34121:18:43" - }, - { - "name": "value2", - "nativeSrc": "34141:6:43", - "nodeType": "YulIdentifier", - "src": "34141:6:43" - } - ], - "functionName": { - "name": "mstore", - "nativeSrc": "34114:6:43", - "nodeType": "YulIdentifier", - "src": "34114:6:43" - }, - "nativeSrc": "34114:34:43", - "nodeType": "YulFunctionCall", - "src": "34114:34:43" - }, - "nativeSrc": "34114:34:43", - "nodeType": "YulExpressionStatement", - "src": "34114:34:43" - } - ] - }, - "name": "abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed", - "nativeSrc": "33779:375:43", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nativeSrc": "33889:9:43", - "nodeType": "YulTypedName", - "src": "33889:9:43", - "type": "" - }, - { - "name": "value2", - "nativeSrc": "33900:6:43", - "nodeType": "YulTypedName", - "src": "33900:6:43", - "type": "" - }, - { - "name": "value1", - "nativeSrc": "33908:6:43", - "nodeType": "YulTypedName", - "src": "33908:6:43", - "type": "" - }, - { - "name": "value0", - "nativeSrc": "33916:6:43", - "nodeType": "YulTypedName", - "src": "33916:6:43", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nativeSrc": "33927:4:43", - "nodeType": "YulTypedName", - "src": "33927:4:43", - "type": "" - } - ], - "src": "33779:375:43" - } - ] - }, - "contents": "{\n { }\n function copy_memory_to_memory_with_cleanup(src, dst, length)\n {\n let i := 0\n for { } lt(i, length) { i := add(i, 32) }\n {\n mstore(add(dst, i), mload(add(src, i)))\n }\n mstore(add(dst, length), 0)\n }\n function abi_encode_string(value, pos) -> end\n {\n let length := mload(value)\n mstore(pos, length)\n copy_memory_to_memory_with_cleanup(add(value, 0x20), add(pos, 0x20), length)\n end := add(add(pos, and(add(length, 31), not(31))), 0x20)\n }\n function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n {\n mstore(headStart, 32)\n tail := abi_encode_string(value0, add(headStart, 32))\n }\n function validator_revert_address(value)\n {\n if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n }\n function abi_decode_tuple_t_addresst_uint256(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n let value := calldataload(headStart)\n validator_revert_address(value)\n value0 := value\n value1 := calldataload(add(headStart, 32))\n }\n function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, iszero(iszero(value0)))\n }\n function abi_decode_struct_SendParam_calldata(offset, end) -> value\n {\n if slt(sub(end, offset), 224) { revert(0, 0) }\n value := offset\n }\n function abi_decode_tuple_t_struct$_SendParam_$3382_calldata_ptr(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let offset := calldataload(headStart)\n if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n value0 := abi_decode_struct_SendParam_calldata(add(headStart, offset), dataEnd)\n }\n function abi_encode_struct_OFTLimit(value, pos)\n {\n mstore(pos, mload(value))\n mstore(add(pos, 0x20), mload(add(value, 0x20)))\n }\n function abi_encode_tuple_t_struct$_OFTLimit_$3388_memory_ptr_t_array$_t_struct$_OFTFeeDetail_$3400_memory_ptr_$dyn_memory_ptr_t_struct$_OFTReceipt_$3394_memory_ptr__to_t_struct$_OFTLimit_$3388_memory_ptr_t_array$_t_struct$_OFTFeeDetail_$3400_memory_ptr_$dyn_memory_ptr_t_struct$_OFTReceipt_$3394_memory_ptr__fromStack_reversed(headStart, value2, value1, value0) -> tail\n {\n let tail_1 := add(headStart, 160)\n abi_encode_struct_OFTLimit(value0, headStart)\n let _1 := 64\n mstore(add(headStart, 64), 160)\n let pos := tail_1\n let length := mload(value1)\n mstore(tail_1, length)\n pos := add(headStart, 192)\n let tail_2 := add(add(headStart, shl(5, length)), 192)\n let _2 := 0x20\n let srcPtr := add(value1, 0x20)\n let i := 0\n for { } lt(i, length) { i := add(i, 1) }\n {\n mstore(pos, add(sub(tail_2, headStart), not(191)))\n let _3 := mload(srcPtr)\n mstore(tail_2, mload(_3))\n let memberValue0 := mload(add(_3, _2))\n mstore(add(tail_2, _2), _1)\n tail_2 := abi_encode_string(memberValue0, add(tail_2, _1))\n srcPtr := add(srcPtr, _2)\n pos := add(pos, _2)\n }\n tail := tail_2\n abi_encode_struct_OFTLimit(value2, add(headStart, 96))\n }\n function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n }\n function abi_decode_struct_Origin_calldata(offset, end) -> value\n {\n if slt(sub(end, offset), 96) { revert(0, 0) }\n value := offset\n }\n function abi_decode_bytes_calldata(offset, end) -> arrayPos, length\n {\n if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n length := calldataload(offset)\n if gt(length, 0xffffffffffffffff) { revert(0, 0) }\n arrayPos := add(offset, 0x20)\n if gt(add(add(offset, length), 0x20), end) { revert(0, 0) }\n }\n function abi_decode_tuple_t_struct$_Origin_$40_calldata_ptrt_bytes32t_bytes_calldata_ptrt_addresst_bytes_calldata_ptr(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6\n {\n if slt(sub(dataEnd, headStart), 224) { revert(0, 0) }\n value0 := abi_decode_struct_Origin_calldata(headStart, dataEnd)\n value1 := calldataload(add(headStart, 96))\n let offset := calldataload(add(headStart, 128))\n let _1 := 0xffffffffffffffff\n if gt(offset, _1) { revert(0, 0) }\n let value2_1, value3_1 := abi_decode_bytes_calldata(add(headStart, offset), dataEnd)\n value2 := value2_1\n value3 := value3_1\n let value := calldataload(add(headStart, 160))\n validator_revert_address(value)\n value4 := value\n let offset_1 := calldataload(add(headStart, 192))\n if gt(offset_1, _1) { revert(0, 0) }\n let value5_1, value6_1 := abi_decode_bytes_calldata(add(headStart, offset_1), dataEnd)\n value5 := value5_1\n value6 := value6_1\n }\n function abi_encode_tuple_t_uint16__to_t_uint16__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, 0xffff))\n }\n function abi_encode_tuple_t_bytes4_t_uint64__to_t_bytes4_t_uint64__fromStack_reversed(headStart, value1, value0) -> tail\n {\n tail := add(headStart, 64)\n mstore(headStart, and(value0, shl(224, 0xffffffff)))\n mstore(add(headStart, 32), and(value1, 0xffffffffffffffff))\n }\n function abi_encode_tuple_t_uint64_t_uint64__to_t_uint64_t_uint64__fromStack_reversed(headStart, value1, value0) -> tail\n {\n tail := add(headStart, 64)\n let _1 := 0xffffffffffffffff\n mstore(headStart, and(value0, _1))\n mstore(add(headStart, 32), and(value1, _1))\n }\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, value0)\n }\n function abi_decode_tuple_t_addresst_addresst_uint256(headStart, dataEnd) -> value0, value1, value2\n {\n if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n let value := calldataload(headStart)\n validator_revert_address(value)\n value0 := value\n let value_1 := calldataload(add(headStart, 32))\n validator_revert_address(value_1)\n value1 := value_1\n value2 := calldataload(add(headStart, 64))\n }\n function abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, 0xff))\n }\n function abi_decode_uint32(offset) -> value\n {\n value := calldataload(offset)\n if iszero(eq(value, and(value, 0xffffffff))) { revert(0, 0) }\n }\n function abi_decode_tuple_t_uint32t_bytes32(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n value0 := abi_decode_uint32(headStart)\n value1 := calldataload(add(headStart, 32))\n }\n function validator_revert_bool(value)\n {\n if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n }\n function abi_decode_tuple_t_struct$_SendParam_$3382_calldata_ptrt_bool(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n let offset := calldataload(headStart)\n if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n value0 := abi_decode_struct_SendParam_calldata(add(headStart, offset), dataEnd)\n let value := calldataload(add(headStart, 32))\n validator_revert_bool(value)\n value1 := value\n }\n function abi_encode_tuple_t_struct$_MessagingFee_$33_memory_ptr__to_t_struct$_MessagingFee_$33_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 64)\n abi_encode_struct_OFTLimit(value0, headStart)\n }\n function abi_decode_uint16(offset) -> value\n {\n value := calldataload(offset)\n if iszero(eq(value, and(value, 0xffff))) { revert(0, 0) }\n }\n function abi_decode_tuple_t_uint32t_uint16(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n value0 := abi_decode_uint32(headStart)\n value1 := abi_decode_uint16(add(headStart, 32))\n }\n function abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n {\n mstore(headStart, 32)\n tail := abi_encode_string(value0, add(headStart, 32))\n }\n function abi_encode_tuple_t_contract$_ILayerZeroEndpointV2_$202__to_t_address__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n }\n function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := calldataload(headStart)\n validator_revert_address(value)\n value0 := value\n }\n function abi_encode_tuple_t_uint64__to_t_uint64__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, 0xffffffffffffffff))\n }\n function abi_decode_tuple_t_struct$_Origin_$40_calldata_ptrt_bytes_calldata_ptrt_address(headStart, dataEnd) -> value0, value1, value2, value3\n {\n if slt(sub(dataEnd, headStart), 160) { revert(0, 0) }\n value0 := abi_decode_struct_Origin_calldata(headStart, dataEnd)\n let offset := calldataload(add(headStart, 96))\n if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n let value1_1, value2_1 := abi_decode_bytes_calldata(add(headStart, offset), dataEnd)\n value1 := value1_1\n value2 := value2_1\n let value := calldataload(add(headStart, 128))\n validator_revert_address(value)\n value3 := value\n }\n function abi_decode_array_struct_EnforcedOptionParam_calldata_dyn_calldata(offset, end) -> arrayPos, length\n {\n if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n length := calldataload(offset)\n if gt(length, 0xffffffffffffffff) { revert(0, 0) }\n arrayPos := add(offset, 0x20)\n if gt(add(add(offset, shl(5, length)), 0x20), end) { revert(0, 0) }\n }\n function abi_decode_tuple_t_array$_t_struct$_EnforcedOptionParam_$1932_calldata_ptr_$dyn_calldata_ptr(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let offset := calldataload(headStart)\n if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n let value0_1, value1_1 := abi_decode_array_struct_EnforcedOptionParam_calldata_dyn_calldata(add(headStart, offset), dataEnd)\n value0 := value0_1\n value1 := value1_1\n }\n function abi_decode_tuple_t_uint32(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n value0 := abi_decode_uint32(headStart)\n }\n function abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, value0)\n }\n function abi_decode_tuple_t_uint32t_uint16t_bytes_calldata_ptr(headStart, dataEnd) -> value0, value1, value2, value3\n {\n if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n value0 := abi_decode_uint32(headStart)\n value1 := abi_decode_uint16(add(headStart, 32))\n let offset := calldataload(add(headStart, 64))\n if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n let value2_1, value3_1 := abi_decode_bytes_calldata(add(headStart, offset), dataEnd)\n value2 := value2_1\n value3 := value3_1\n }\n function abi_decode_tuple_t_array$_t_struct$_InboundPacket_$2486_calldata_ptr_$dyn_calldata_ptr(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let offset := calldataload(headStart)\n if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n let value0_1, value1_1 := abi_decode_array_struct_EnforcedOptionParam_calldata_dyn_calldata(add(headStart, offset), dataEnd)\n value0 := value0_1\n value1 := value1_1\n }\n function abi_decode_tuple_t_struct$_SendParam_$3382_calldata_ptrt_struct$_MessagingFee_$33_calldata_ptrt_address(headStart, dataEnd) -> value0, value1, value2\n {\n let _1 := sub(dataEnd, headStart)\n if slt(_1, 128) { revert(0, 0) }\n let offset := calldataload(headStart)\n if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n value0 := abi_decode_struct_SendParam_calldata(add(headStart, offset), dataEnd)\n if slt(add(_1, not(31)), 64) { revert(0, 0) }\n value1 := add(headStart, 32)\n let value := calldataload(add(headStart, 96))\n validator_revert_address(value)\n value2 := value\n }\n function abi_encode_tuple_t_struct$_MessagingReceipt_$28_memory_ptr_t_struct$_OFTReceipt_$3394_memory_ptr__to_t_struct$_MessagingReceipt_$28_memory_ptr_t_struct$_OFTReceipt_$3394_memory_ptr__fromStack_reversed(headStart, value1, value0) -> tail\n {\n tail := add(headStart, 192)\n mstore(headStart, mload(value0))\n mstore(add(headStart, 0x20), and(mload(add(value0, 0x20)), 0xffffffffffffffff))\n let memberValue0 := mload(add(value0, 0x40))\n abi_encode_struct_OFTLimit(memberValue0, add(headStart, 0x40))\n abi_encode_struct_OFTLimit(value1, add(headStart, 128))\n }\n function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n let value := calldataload(headStart)\n validator_revert_address(value)\n value0 := value\n let value_1 := calldataload(add(headStart, 32))\n validator_revert_address(value_1)\n value1 := value_1\n }\n function abi_decode_tuple_t_struct$_Origin_$40_calldata_ptr(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n value0 := abi_decode_struct_Origin_calldata(headStart, dataEnd)\n }\n function extract_byte_array_length(data) -> length\n {\n length := shr(1, data)\n let outOfPlaceEncoding := and(data, 1)\n if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n if eq(outOfPlaceEncoding, lt(length, 32))\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x22)\n revert(0, 0x24)\n }\n }\n function panic_error_0x41()\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n function abi_encode_tuple_t_uint32_t_bytes32__to_t_uint32_t_bytes32__fromStack_reversed(headStart, value1, value0) -> tail\n {\n tail := add(headStart, 64)\n mstore(headStart, and(value0, 0xffffffff))\n mstore(add(headStart, 32), value1)\n }\n function allocate_memory_4159() -> memPtr\n {\n memPtr := mload(64)\n let newFreePtr := add(memPtr, 0x60)\n if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n mstore(64, newFreePtr)\n }\n function allocate_memory_4160() -> memPtr\n {\n memPtr := mload(0x40)\n let newFreePtr := add(memPtr, 0x40)\n if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n mstore(0x40, newFreePtr)\n }\n function allocate_memory(size) -> memPtr\n {\n memPtr := mload(64)\n let newFreePtr := add(memPtr, and(add(size, 31), not(31)))\n if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n mstore(64, newFreePtr)\n }\n function array_allocation_size_bytes(length) -> size\n {\n if gt(length, 0xffffffffffffffff) { panic_error_0x41() }\n size := add(and(add(length, 31), not(31)), 0x20)\n }\n function convert_array_t_array$_t_struct$_EnforcedOptionParam_$1932_calldata_ptr_$dyn_calldata_ptr_to_t_array$_t_struct$_EnforcedOptionParam_$1932_memory_ptr_$dyn_memory_ptr(value, length) -> converted\n {\n let _1 := 0xffffffffffffffff\n if gt(length, _1) { panic_error_0x41() }\n let _2 := shl(5, length)\n let _3 := 0x20\n let dst := allocate_memory(add(_2, _3))\n let dst_1 := dst\n mstore(dst, length)\n dst := add(dst, _3)\n let srcEnd := add(value, _2)\n if gt(srcEnd, calldatasize()) { revert(0, 0) }\n let src := value\n for { } lt(src, srcEnd) { src := add(src, _3) }\n {\n let innerOffset := calldataload(src)\n if gt(innerOffset, _1)\n {\n let _4 := 0\n revert(_4, _4)\n }\n let _5 := add(value, innerOffset)\n if slt(sub(calldatasize(), _5), 0x60)\n {\n let _6 := 0\n revert(_6, _6)\n }\n let value_1 := allocate_memory_4159()\n mstore(value_1, abi_decode_uint32(_5))\n mstore(add(value_1, _3), abi_decode_uint16(add(_5, _3)))\n let _7 := 64\n let offset := calldataload(add(_5, _7))\n if gt(offset, _1)\n {\n let _8 := 0\n revert(_8, _8)\n }\n let _9 := add(_5, offset)\n if iszero(slt(add(_9, 0x1f), calldatasize()))\n {\n let _10 := 0\n revert(_10, _10)\n }\n let _11 := calldataload(_9)\n let array := allocate_memory(array_allocation_size_bytes(_11))\n mstore(array, _11)\n if gt(add(add(_9, _11), _3), calldatasize())\n {\n let _12 := 0\n revert(_12, _12)\n }\n calldatacopy(add(array, _3), add(_9, _3), _11)\n mstore(add(add(array, _11), _3), 0)\n mstore(add(value_1, _7), array)\n mstore(dst, value_1)\n dst := add(dst, _3)\n }\n converted := dst_1\n }\n function calldata_array_index_range_access_t_bytes_calldata_ptr(offset, length, startIndex, endIndex) -> offsetOut, lengthOut\n {\n if gt(startIndex, endIndex) { revert(0, 0) }\n if gt(endIndex, length) { revert(0, 0) }\n offsetOut := add(offset, startIndex)\n lengthOut := sub(endIndex, startIndex)\n }\n function abi_encode_tuple_packed_t_bytes_memory_ptr_t_bytes_calldata_ptr_slice__to_t_bytes_memory_ptr_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value2, value1, value0) -> end\n {\n let length := mload(value0)\n copy_memory_to_memory_with_cleanup(add(value0, 0x20), pos, length)\n let end_1 := add(pos, length)\n calldatacopy(end_1, value1, value2)\n let _1 := add(end_1, value2)\n mstore(_1, 0)\n end := _1\n }\n function abi_encode_bytes_calldata(start, length, pos) -> end\n {\n mstore(pos, length)\n calldatacopy(add(pos, 0x20), start, length)\n mstore(add(add(pos, length), 0x20), 0)\n end := add(add(pos, and(add(length, 31), not(31))), 0x20)\n }\n function abi_encode_tuple_t_bytes_calldata_ptr__to_t_bytes_memory_ptr__fromStack_reversed(headStart, value1, value0) -> tail\n {\n mstore(headStart, 32)\n tail := abi_encode_bytes_calldata(value0, value1, add(headStart, 32))\n }\n function panic_error_0x32()\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x32)\n revert(0, 0x24)\n }\n function access_calldata_tail_t_struct$_InboundPacket_$2486_calldata_ptr(base_ref, ptr_to_tail) -> addr\n {\n let rel_offset_of_tail := calldataload(ptr_to_tail)\n if iszero(slt(rel_offset_of_tail, add(sub(calldatasize(), base_ref), not(318)))) { revert(0, 0) }\n addr := add(base_ref, rel_offset_of_tail)\n }\n function access_calldata_tail_t_bytes_calldata_ptr(base_ref, ptr_to_tail) -> addr, length\n {\n let rel_offset_of_tail := calldataload(ptr_to_tail)\n if iszero(slt(rel_offset_of_tail, add(sub(calldatasize(), base_ref), not(30)))) { revert(0, 0) }\n let addr_1 := add(base_ref, rel_offset_of_tail)\n length := calldataload(addr_1)\n if gt(length, 0xffffffffffffffff) { revert(0, 0) }\n addr := add(addr_1, 0x20)\n if sgt(addr, sub(calldatasize(), length)) { revert(0, 0) }\n }\n function validator_revert_uint64(value)\n {\n if iszero(eq(value, and(value, 0xffffffffffffffff))) { revert(0, 0) }\n }\n function abi_encode_tuple_t_struct$_Origin_$40_calldata_ptr_t_bytes32_t_bytes_calldata_ptr_t_address_t_bytes_calldata_ptr__to_t_struct$_Origin_$40_memory_ptr_t_bytes32_t_bytes_memory_ptr_t_address_t_bytes_memory_ptr__fromStack_reversed(headStart, value6, value5, value4, value3, value2, value1, value0) -> tail\n {\n mstore(headStart, and(abi_decode_uint32(value0), 0xffffffff))\n mstore(add(headStart, 0x20), calldataload(add(value0, 0x20)))\n let value := calldataload(add(value0, 0x40))\n validator_revert_uint64(value)\n mstore(add(headStart, 0x40), and(value, 0xffffffffffffffff))\n mstore(add(headStart, 96), value1)\n mstore(add(headStart, 128), 224)\n let tail_1 := abi_encode_bytes_calldata(value2, value3, add(headStart, 224))\n mstore(add(headStart, 160), and(value4, sub(shl(160, 1), 1)))\n mstore(add(headStart, 192), sub(tail_1, headStart))\n tail := abi_encode_bytes_calldata(value5, value6, tail_1)\n }\n function abi_decode_tuple_t_bytes_memory_ptr_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let offset := mload(headStart)\n if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n let _1 := add(headStart, offset)\n if iszero(slt(add(_1, 0x1f), dataEnd)) { revert(0, 0) }\n let _2 := mload(_1)\n let array := allocate_memory(array_allocation_size_bytes(_2))\n mstore(array, _2)\n if gt(add(add(_1, _2), 32), dataEnd) { revert(0, 0) }\n copy_memory_to_memory_with_cleanup(add(_1, 32), add(array, 32), _2)\n value0 := array\n }\n function abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n {\n tail := add(headStart, 64)\n mstore(headStart, value0)\n mstore(add(headStart, 32), value1)\n }\n function abi_encode_tuple_t_uint32__to_t_uint32__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, 0xffffffff))\n }\n function abi_decode_tuple_t_uint64(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := calldataload(headStart)\n validator_revert_uint64(value)\n value0 := value\n }\n function abi_encode_tuple_t_address_t_bytes32_t_rational_0_by_1_t_bytes_memory_ptr__to_t_address_t_bytes32_t_uint16_t_bytes_memory_ptr__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n {\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n mstore(add(headStart, 32), value1)\n mstore(add(headStart, 64), and(value2, 0xffff))\n mstore(add(headStart, 96), 128)\n tail := abi_encode_string(value3, add(headStart, 128))\n }\n function abi_encode_tuple_t_uint32_t_uint256__to_t_uint32_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n {\n tail := add(headStart, 64)\n mstore(headStart, and(value0, 0xffffffff))\n mstore(add(headStart, 32), value1)\n }\n function abi_encode_tuple_t_address_t_uint256_t_uint256__to_t_address_t_uint256_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n {\n tail := add(headStart, 96)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n mstore(add(headStart, 32), value1)\n mstore(add(headStart, 64), value2)\n }\n function abi_encode_tuple_t_bytes_memory_ptr_t_bytes_memory_ptr__to_t_bytes_memory_ptr_t_bytes_memory_ptr__fromStack_reversed(headStart, value1, value0) -> tail\n {\n mstore(headStart, 64)\n let tail_1 := abi_encode_string(value0, add(headStart, 64))\n mstore(add(headStart, 32), sub(tail_1, headStart))\n tail := abi_encode_string(value1, tail_1)\n }\n function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := mload(headStart)\n validator_revert_bool(value)\n value0 := value\n }\n function abi_encode_tuple_t_struct$_MessagingParams_$20_memory_ptr_t_address__to_t_struct$_MessagingParams_$20_memory_ptr_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n {\n mstore(headStart, 64)\n mstore(add(headStart, 64), and(mload(value0), 0xffffffff))\n mstore(add(headStart, 96), mload(add(value0, 0x20)))\n let memberValue0 := mload(add(value0, 64))\n mstore(add(headStart, 128), 0xa0)\n let tail_1 := abi_encode_string(memberValue0, add(headStart, 224))\n let memberValue0_1 := mload(add(value0, 96))\n mstore(add(headStart, 0xa0), add(sub(tail_1, headStart), not(63)))\n let tail_2 := abi_encode_string(memberValue0_1, tail_1)\n mstore(add(headStart, 192), iszero(iszero(mload(add(value0, 128)))))\n tail := tail_2\n mstore(add(headStart, 0x20), and(value1, sub(shl(160, 1), 1)))\n }\n function abi_decode_struct_MessagingFee_fromMemory(headStart, end) -> value\n {\n if slt(sub(end, headStart), 0x40) { revert(0, 0) }\n value := allocate_memory_4160()\n mstore(value, mload(headStart))\n mstore(add(value, 32), mload(add(headStart, 32)))\n }\n function abi_decode_tuple_t_struct$_MessagingFee_$33_memory_ptr_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n value0 := abi_decode_struct_MessagingFee_fromMemory(headStart, dataEnd)\n }\n function array_dataslot_bytes_storage(ptr) -> data\n {\n mstore(0, ptr)\n data := keccak256(0, 0x20)\n }\n function clean_up_bytearray_end_slots_bytes_storage(array, len, startIndex)\n {\n if gt(len, 31)\n {\n let _1 := 0\n mstore(0, array)\n let data := keccak256(0, 0x20)\n let deleteStart := add(data, shr(5, add(startIndex, 31)))\n if lt(startIndex, 0x20) { deleteStart := data }\n let _2 := add(data, shr(5, add(len, 31)))\n let start := deleteStart\n for { } lt(start, _2) { start := add(start, 1) }\n { sstore(start, _1) }\n }\n }\n function extract_used_part_and_set_length_of_short_byte_array(data, len) -> used\n {\n used := or(and(data, not(shr(shl(3, len), not(0)))), shl(1, len))\n }\n function copy_byte_array_to_storage_from_t_bytes_memory_ptr_to_t_bytes_storage(slot, src)\n {\n let newLen := mload(src)\n if gt(newLen, 0xffffffffffffffff) { panic_error_0x41() }\n clean_up_bytearray_end_slots_bytes_storage(slot, extract_byte_array_length(sload(slot)), newLen)\n let srcOffset := 0\n let srcOffset_1 := 0x20\n srcOffset := 0x20\n switch gt(newLen, 31)\n case 1 {\n let loopEnd := and(newLen, not(31))\n let dstPtr := array_dataslot_bytes_storage(slot)\n let i := 0\n for { } lt(i, loopEnd) { i := add(i, srcOffset_1) }\n {\n sstore(dstPtr, mload(add(src, srcOffset)))\n dstPtr := add(dstPtr, 1)\n srcOffset := add(srcOffset, srcOffset_1)\n }\n if lt(loopEnd, newLen)\n {\n let lastValue := mload(add(src, srcOffset))\n sstore(dstPtr, and(lastValue, not(shr(and(shl(3, newLen), 248), not(0)))))\n }\n sstore(slot, add(shl(1, newLen), 1))\n }\n default {\n let value := 0\n if newLen\n {\n value := mload(add(src, srcOffset))\n }\n sstore(slot, extract_used_part_and_set_length_of_short_byte_array(value, newLen))\n }\n }\n function abi_encode_tuple_t_array$_t_struct$_EnforcedOptionParam_$1932_memory_ptr_$dyn_memory_ptr__to_t_array$_t_struct$_EnforcedOptionParam_$1932_memory_ptr_$dyn_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n {\n let _1 := 32\n let tail_1 := add(headStart, _1)\n mstore(headStart, _1)\n let pos := tail_1\n let length := mload(value0)\n mstore(tail_1, length)\n let _2 := 64\n pos := add(headStart, 64)\n let tail_2 := add(add(headStart, shl(5, length)), 64)\n let srcPtr := add(value0, _1)\n let i := 0\n for { } lt(i, length) { i := add(i, 1) }\n {\n mstore(pos, add(sub(tail_2, headStart), not(63)))\n let _3 := mload(srcPtr)\n let _4 := 0x60\n mstore(tail_2, and(mload(_3), 0xffffffff))\n mstore(add(tail_2, _1), and(mload(add(_3, _1)), 0xffff))\n let memberValue0 := mload(add(_3, _2))\n mstore(add(tail_2, _2), _4)\n tail_2 := abi_encode_string(memberValue0, add(tail_2, _4))\n srcPtr := add(srcPtr, _1)\n pos := add(pos, _1)\n }\n tail := tail_2\n }\n function abi_decode_tuple_t_struct$_MessagingFee_$33_memory_ptr(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n let value := allocate_memory_4160()\n mstore(value, calldataload(headStart))\n mstore(add(value, 32), calldataload(add(headStart, 32)))\n value0 := value\n }\n function abi_encode_tuple_t_uint32_t_uint256_t_uint256__to_t_uint32_t_uint256_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n {\n tail := add(headStart, 96)\n mstore(headStart, and(value0, 0xffffffff))\n mstore(add(headStart, 32), value1)\n mstore(add(headStart, 64), value2)\n }\n function panic_error_0x11()\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n function checked_div_t_uint256(x, y) -> r\n {\n if iszero(y)\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x12)\n revert(0, 0x24)\n }\n r := div(x, y)\n }\n function checked_mul_t_uint256(x, y) -> product\n {\n product := mul(x, y)\n if iszero(or(iszero(x), eq(y, div(product, x)))) { panic_error_0x11() }\n }\n function convert_bytes_to_fixedbytes_from_t_bytes_calldata_ptr_to_t_bytes32(array, len) -> value\n {\n value := calldataload(array)\n if lt(len, 32)\n {\n value := and(value, shl(shl(3, sub(32, len)), not(0)))\n }\n }\n function convert_bytes_to_fixedbytes_from_t_bytes_calldata_ptr_to_t_bytes8(array, len) -> value\n {\n let _1 := calldataload(array)\n let _2 := shl(192, 0xffffffffffffffff)\n value := and(_1, _2)\n if lt(len, 8)\n {\n value := and(and(_1, shl(shl(3, sub(8, len)), _2)), _2)\n }\n }\n function abi_encode_tuple_packed_t_uint64_t_uint32_t_uint256_t_bytes_memory_ptr__to_t_uint64_t_uint32_t_uint256_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value3, value2, value1, value0) -> end\n {\n mstore(pos, and(shl(192, value0), shl(192, 0xffffffffffffffff)))\n mstore(add(pos, 8), and(shl(224, value1), shl(224, 0xffffffff)))\n mstore(add(pos, 12), value2)\n let length := mload(value3)\n copy_memory_to_memory_with_cleanup(add(value3, 0x20), add(pos, 44), length)\n end := add(add(pos, length), 44)\n }\n function checked_add_t_uint256(x, y) -> sum\n {\n sum := add(x, y)\n if gt(x, sum) { panic_error_0x11() }\n }\n function abi_encode_tuple_packed_t_bytes32_t_uint64__to_t_bytes32_t_uint64__nonPadded_inplace_fromStack_reversed(pos, value1, value0) -> end\n {\n mstore(pos, value0)\n mstore(add(pos, 32), and(shl(192, value1), shl(192, 0xffffffffffffffff)))\n end := add(pos, 40)\n }\n function abi_encode_tuple_packed_t_bytes32_t_uint64_t_bytes32_t_bytes_memory_ptr__to_t_bytes32_t_uint64_t_bytes32_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value3, value2, value1, value0) -> end\n {\n mstore(pos, value0)\n mstore(add(pos, 32), and(shl(192, value1), shl(192, 0xffffffffffffffff)))\n mstore(add(pos, 40), value2)\n let length := mload(value3)\n copy_memory_to_memory_with_cleanup(add(value3, 32), add(pos, 72), length)\n end := add(add(pos, length), 72)\n }\n function abi_decode_tuple_t_struct$_MessagingReceipt_$28_memory_ptr_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 128) { revert(0, 0) }\n let value := allocate_memory_4159()\n mstore(value, mload(headStart))\n let value_1 := mload(add(headStart, 32))\n validator_revert_uint64(value_1)\n mstore(add(value, 32), value_1)\n mstore(add(value, 64), abi_decode_struct_MessagingFee_fromMemory(add(headStart, 64), dataEnd))\n value0 := value\n }\n function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := mload(headStart)\n validator_revert_address(value)\n value0 := value\n }\n function abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n {\n tail := add(headStart, 96)\n let _1 := sub(shl(160, 1), 1)\n mstore(headStart, and(value0, _1))\n mstore(add(headStart, 32), and(value1, _1))\n mstore(add(headStart, 64), value2)\n }\n}", - "id": 43, - "language": "Yul", - "name": "#utility.yul" - } - ], - "immutableReferences": { - "1386": [ - { "length": 32, "start": 1288 }, - { "length": 32, "start": 2488 }, - { "length": 32, "start": 4114 }, - { "length": 32, "start": 4745 }, - { "length": 32, "start": 5619 }, - { "length": 32, "start": 7612 }, - { "length": 32, "start": 7926 }, - { "length": 32, "start": 8109 } - ], - "2776": [ - { "length": 32, "start": 1609 }, - { "length": 32, "start": 6731 }, - { "length": 32, "start": 6848 }, - { "length": 32, "start": 7364 } - ] - }, - "linkReferences": {}, - "object": "60806040526004361061025c5760003560e01c8063715018a611610144578063bb0b6a53116100b6578063d045a0dc1161007a578063d045a0dc14610780578063d424388514610793578063dd62ed3e146107b3578063f2fde38b146107f9578063fc0c546a1461048c578063ff7bd03d1461081957600080fd5b8063bb0b6a53146106df578063bc70b3541461070c578063bd815db01461072c578063c7c7f5b31461073f578063ca5eb5e11461076057600080fd5b806395d89b411161010857806395d89b4114610622578063963efcaa146106375780639f68b9641461066b578063a9059cbb1461067f578063b731ea0a1461069f578063b98bd070146106bf57600080fd5b8063715018a6146105805780637d25a05e1461059557806382413eac146105d0578063857749b0146105f05780638da5cb5b1461060457600080fd5b806323b872dd116101dd57806352ae2879116101a157806352ae28791461048c5780635535d4611461049f5780635a0dfe4d146104bf5780635e280f11146104f65780636fc1b31e1461052a57806370a082311461054a57600080fd5b806323b872dd146103dd578063313ce567146103fd5780633400288b1461041f5780633b6f743b1461043f57806340c10f191461046c57600080fd5b8063134d4f2511610224578063134d4f2514610338578063156a0d0f1461036057806317442b701461038757806318160ddd146103a95780631f5e1334146103c857600080fd5b806306fdde0314610261578063095ea7b31461028c5780630d35b415146102bc578063111ecdad146102eb57806313137d6514610323575b600080fd5b34801561026d57600080fd5b50610276610839565b6040516102839190612125565b60405180910390f35b34801561029857600080fd5b506102ac6102a736600461214d565b6108cb565b6040519015158152602001610283565b3480156102c857600080fd5b506102dc6102d7366004612191565b6108e5565b604051610283939291906121c5565b3480156102f757600080fd5b5060045461030b906001600160a01b031681565b6040516001600160a01b039091168152602001610283565b6103366103313660046122b8565b6109b6565b005b34801561034457600080fd5b5061034d600281565b60405161ffff9091168152602001610283565b34801561036c57600080fd5b506040805162b9270b60e21b81526001602082015201610283565b34801561039357600080fd5b5060408051600181526002602082015201610283565b3480156103b557600080fd5b506007545b604051908152602001610283565b3480156103d457600080fd5b5061034d600181565b3480156103e957600080fd5b506102ac6103f8366004612357565b610a76565b34801561040957600080fd5b5060125b60405160ff9091168152602001610283565b34801561042b57600080fd5b5061033661043a3660046123b1565b610a9c565b34801561044b57600080fd5b5061045f61045a3660046123db565b610ab2565b604051610283919061242c565b34801561047857600080fd5b5061033661048736600461214d565b610b19565b34801561049857600080fd5b503061030b565b3480156104ab57600080fd5b506102766104ba366004612455565b610b23565b3480156104cb57600080fd5b506102ac6104da3660046123b1565b63ffffffff919091166000908152600160205260409020541490565b34801561050257600080fd5b5061030b7f000000000000000000000000000000000000000000000000000000000000000081565b34801561053657600080fd5b50610336610545366004612488565b610bc8565b34801561055657600080fd5b506103ba610565366004612488565b6001600160a01b031660009081526005602052604090205490565b34801561058c57600080fd5b50610336610c25565b3480156105a157600080fd5b506105b86105b03660046123b1565b600092915050565b6040516001600160401b039091168152602001610283565b3480156105dc57600080fd5b506102ac6105eb3660046124a5565b610c39565b3480156105fc57600080fd5b50600661040d565b34801561061057600080fd5b506000546001600160a01b031661030b565b34801561062e57600080fd5b50610276610c4e565b34801561064357600080fd5b506103ba7f000000000000000000000000000000000000000000000000000000000000000081565b34801561067757600080fd5b5060006102ac565b34801561068b57600080fd5b506102ac61069a36600461214d565b610c5d565b3480156106ab57600080fd5b5060025461030b906001600160a01b031681565b3480156106cb57600080fd5b506103366106da36600461254f565b610c6b565b3480156106eb57600080fd5b506103ba6106fa366004612590565b60016020526000908152604090205481565b34801561071857600080fd5b506102766107273660046125ab565b610c85565b61033661073a36600461254f565b610e2d565b61075261074d36600461260b565b610fb7565b604051610283929190612678565b34801561076c57600080fd5b5061033661077b366004612488565b610feb565b61033661078e3660046122b8565b611071565b34801561079f57600080fd5b506103366107ae366004612488565b6110a0565b3480156107bf57600080fd5b506103ba6107ce3660046126ca565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b34801561080557600080fd5b50610336610814366004612488565b6110f6565b34801561082557600080fd5b506102ac6108343660046126f8565b611134565b60606008805461084890612714565b80601f016020809104026020016040519081016040528092919081815260200182805461087490612714565b80156108c15780601f10610896576101008083540402835291602001916108c1565b820191906000526020600020905b8154815290600101906020018083116108a457829003601f168201915b5050505050905090565b6000336108d981858561116a565b60019150505b92915050565b60408051808201909152600080825260208201526060610918604051806040016040528060008152602001600081525090565b60408051808201825260008082526001600160401b03602080840182905284518381529081019094529195509182610973565b60408051808201909152600081526060602082015281526020019060019003908161094b5790505b509350600080610998604089013560608a013561099360208c018c612590565b61117c565b60408051808201909152918252602082015296989597505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163314610a06576040516391ac5e4f60e01b81523360048201526024015b60405180910390fd5b60208701803590610a2090610a1b908a612590565b6111b8565b14610a5e57610a326020880188612590565b60405163309afaf360e21b815263ffffffff9091166004820152602088013560248201526044016109fd565b610a6d878787878787876111f4565b50505050505050565b600033610a8485828561135b565b610a8f8585856113d9565b60019150505b9392505050565b610aa4611438565b610aae8282611465565b5050565b60408051808201909152600080825260208201526000610ae2604085013560608601356109936020880188612590565b915050600080610af286846114ba565b9092509050610b0f610b076020880188612590565b8383886115dd565b9695505050505050565b610aae82826116be565b600360209081526000928352604080842090915290825290208054610b4790612714565b80601f0160208091040260200160405190810160405280929190818152602001828054610b7390612714565b8015610bc05780601f10610b9557610100808354040283529160200191610bc0565b820191906000526020600020905b815481529060010190602001808311610ba357829003601f168201915b505050505081565b610bd0611438565b600480546001600160a01b0319166001600160a01b0383169081179091556040519081527ff0be4f1e87349231d80c36b33f9e8639658eeaf474014dee15a3e6a4d4414197906020015b60405180910390a150565b610c2d611438565b610c3760006116f4565b565b6001600160a01b03811630145b949350505050565b60606009805461084890612714565b6000336108d98185856113d9565b610c73611438565b610aae610c8082846127ff565b611744565b63ffffffff8416600090815260036020908152604080832061ffff87168452909152812080546060929190610cb990612714565b80601f0160208091040260200160405190810160405280929190818152602001828054610ce590612714565b8015610d325780601f10610d0757610100808354040283529160200191610d32565b820191906000526020600020905b815481529060010190602001808311610d1557829003601f168201915b505050505090508051600003610d825783838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929450610c469350505050565b6000839003610d92579050610c46565b60028310610e1057610dd984848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061184b92505050565b80610de78460028188612914565b604051602001610df99392919061293e565b604051602081830303815290604052915050610c46565b8383604051639a6d49cd60e01b81526004016109fd92919061298f565b60005b81811015610f365736838383818110610e4b57610e4b6129a3565b9050602002810190610e5d91906129b9565b9050610e90610e6f6020830183612590565b602083013563ffffffff919091166000908152600160205260409020541490565b610e9a5750610f2e565b3063d045a0dc60c08301358360a0810135610eb96101008301836129da565b610eca610100890160e08a01612488565b610ed86101208a018a6129da565b6040518963ffffffff1660e01b8152600401610efa9796959493929190612a35565b6000604051808303818588803b158015610f1357600080fd5b505af1158015610f27573d6000803e3d6000fd5b5050505050505b600101610e30565b50336001600160a01b0316638e9e70996040518163ffffffff1660e01b8152600401600060405180830381865afa158015610f75573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610f9d9190810190612abb565b604051638351eea760e01b81526004016109fd9190612125565b610fbf61208e565b6040805180820190915260008082526020820152610fde858585611877565b915091505b935093915050565b610ff3611438565b60405163ca5eb5e160e01b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063ca5eb5e190602401600060405180830381600087803b15801561105657600080fd5b505af115801561106a573d6000803e3d6000fd5b5050505050565b3330146110915760405163029a949d60e31b815260040160405180910390fd5b610a6d87878787878787610a5e565b6110a8611438565b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527fd48d879cef83a1c0bdda516f27b13ddb1b3f8bbac1c9e1511bb2a659c242776090602001610c1a565b6110fe611438565b6001600160a01b03811661112857604051631e4fbdf760e01b8152600060048201526024016109fd565b611131816116f4565b50565b600060208201803590600190839061114c9086612590565b63ffffffff1681526020810191909152604001600020541492915050565b6111778383836001611972565b505050565b60008061118885611a47565b915081905083811015610fe3576040516371c4efed60e01b815260048101829052602481018590526044016109fd565b63ffffffff8116600090815260016020526040812054806108df5760405163f6ff4fb760e01b815263ffffffff841660048201526024016109fd565b60006112066112038787611a7e565b90565b905060006112328261122061121b8a8a611a96565b611ab9565b61122d60208d018d612590565b611aee565b905060288611156112f957600061126f61125260608c0160408d01612b28565b61125f60208d018d612590565b8461126a8c8c611b16565b611b61565b604051633e5ac80960e11b81529091506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690637cb59012906112c59086908d906000908790600401612b45565b600060405180830381600087803b1580156112df57600080fd5b505af11580156112f3573d6000803e3d6000fd5b50505050505b6001600160a01b038216887fefed6d3500546b29533b128a29e3a94d70788727f0507505ac12eaf2e578fd9c61133260208d018d612590565b6040805163ffffffff9092168252602082018690520160405180910390a3505050505050505050565b6001600160a01b0383811660009081526006602090815260408083209386168352929052205460001981146113d357818110156113c457604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064016109fd565b6113d384848484036000611972565b50505050565b6001600160a01b03831661140357604051634b637e8f60e11b8152600060048201526024016109fd565b6001600160a01b03821661142d5760405163ec442f0560e01b8152600060048201526024016109fd565b611177838383611b93565b6000546001600160a01b03163314610c375760405163118cdaa760e01b81523360048201526024016109fd565b63ffffffff8216600081815260016020908152604091829020849055815192835282018390527f238399d427b947898edb290f5ff0f9109849b1c3ba196a42e35f00c50a54b98b910160405180910390a15050565b606080600061151785602001356114d086611cbd565b6114dd60a08901896129da565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611ce992505050565b909350905060008161152a57600161152d565b60025b905061154d61153f6020880188612590565b8261072760808a018a6129da565b6004549093506001600160a01b031680156115d35760405163043a78eb60e01b81526001600160a01b0382169063043a78eb906115909088908890600401612b76565b602060405180830381865afa1580156115ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115d19190612b9b565b505b5050509250929050565b60408051808201909152600080825260208201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ddc28c586040518060a001604052808863ffffffff168152602001611640896111b8565b8152602001878152602001868152602001851515815250306040518363ffffffff1660e01b8152600401611675929190612bb8565b6040805180830381865afa158015611691573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116b59190612c61565b95945050505050565b6001600160a01b0382166116e85760405163ec442f0560e01b8152600060048201526024016109fd565b610aae60008383611b93565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60005b815181101561181b57611776828281518110611765576117656129a3565b60200260200101516040015161184b565b818181518110611788576117886129a3565b602002602001015160400151600360008484815181106117aa576117aa6129a3565b60200260200101516000015163ffffffff1663ffffffff16815260200190815260200160002060008484815181106117e4576117e46129a3565b60200260200101516020015161ffff1661ffff16815260200190815260200160002090816118129190612ccd565b50600101611747565b507fbe4864a8e820971c0247f5992e2da559595f7bf076a21cb5928d443d2a13b67481604051610c1a9190612d8c565b600281015161ffff8116600314610aae5781604051639a6d49cd60e01b81526004016109fd9190612125565b61187f61208e565b60408051808201909152600080825260208201526000806118b633604089013560608a01356118b160208c018c612590565b611d63565b915091506000806118c789846114ba565b90925090506118f36118dc60208b018b612590565b83836118ed368d90038d018d612e17565b8b611d89565b60408051808201909152858152602080820186905282519298509096503391907f85496b760a4b7f8d66384b9df21b381f5d1b1e79f229a47aaf4c232edc2fe59a90611941908d018d612590565b6040805163ffffffff909216825260208201899052810187905260600160405180910390a350505050935093915050565b6001600160a01b03841661199c5760405163e602df0560e01b8152600060048201526024016109fd565b6001600160a01b0383166119c657604051634a1406b160e11b8152600060048201526024016109fd565b6001600160a01b03808516600090815260066020908152604080832093871683529290522082905580156113d357826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051611a3991815260200190565b60405180910390a350505050565b60007f0000000000000000000000000000000000000000000000000000000000000000611a748184612e5f565b6108df9190612e81565b6000611a8d6020828486612914565b610a9591612e98565b6000611aa6602860208486612914565b611aaf91612eb6565b60c01c9392505050565b60006108df7f00000000000000000000000000000000000000000000000000000000000000006001600160401b038416612e81565b60006001600160a01b038416611b045761dead93505b611b0e84846116be565b509092915050565b6060611b258260288186612914565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929695505050505050565b606084848484604051602001611b7a9493929190612ee6565b6040516020818303038152906040529050949350505050565b6001600160a01b038316611bbe578060076000828254611bb39190612f35565b90915550611c309050565b6001600160a01b03831660009081526005602052604090205481811015611c115760405163391434e360e21b81526001600160a01b038516600482015260248101829052604481018390526064016109fd565b6001600160a01b03841660009081526005602052604090209082900390555b6001600160a01b038216611c4c57600780548290039055611c6b565b6001600160a01b03821660009081526005602052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611cb091815260200190565b60405180910390a3505050565b60006108df7f000000000000000000000000000000000000000000000000000000000000000083612e5f565b8051606090151580611d32578484604051602001611d1e92919091825260c01b6001600160c01b031916602082015260280190565b604051602081830303815290604052611d59565b84843385604051602001611d499493929190612f48565b6040516020818303038152906040525b9150935093915050565b600080611d7185858561117c565b9092509050611d808683611e94565b94509492505050565b611d9161208e565b6000611da08460000151611eca565b602085015190915015611dba57611dba8460200151611ef2565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632637a450826040518060a001604052808b63ffffffff168152602001611e0a8c6111b8565b81526020018a815260200189815260200160008960200151111515815250866040518463ffffffff1660e01b8152600401611e46929190612bb8565b60806040518083038185885af1158015611e64573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611e899190612f8b565b979650505050505050565b6001600160a01b038216611ebe57604051634b637e8f60e11b8152600060048201526024016109fd565b610aae82600083611b93565b6000813414611eee576040516304fb820960e51b81523460048201526024016109fd565b5090565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e4fe1d946040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f769190612fd5565b90506001600160a01b038116611f9f576040516329b99a9560e11b815260040160405180910390fd5b6040805133602482018190527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0381811660448501526064808501889052855180860390910181526084909401909452602080840180516001600160e01b03166323b872dd60e01b1781528451610aae9688169589936113d393889360009283929091839182885af180612040576040513d6000823e3d81fd5b50506000513d91508115612058578060011415612065565b6001600160a01b0384163b155b156113d357604051635274afe760e01b81526001600160a01b03851660048201526024016109fd565b60405180606001604052806000801916815260200160006001600160401b031681526020016120d0604051806040016040528060008152602001600081525090565b905290565b60005b838110156120f05781810151838201526020016120d8565b50506000910152565b600081518084526121118160208601602086016120d5565b601f01601f19169290920160200192915050565b602081526000610a9560208301846120f9565b6001600160a01b038116811461113157600080fd5b6000806040838503121561216057600080fd5b823561216b81612138565b946020939093013593505050565b600060e0828403121561218b57600080fd5b50919050565b6000602082840312156121a357600080fd5b81356001600160401b038111156121b957600080fd5b610c4684828501612179565b8351815260208085015190820152600060a08201604060a0604085015281865180845260c08601915060c08160051b8701019350602080890160005b838110156122405788870360bf1901855281518051885283015183880187905261222d878901826120f9565b9750509382019390820190600101612201565b50508751606088015250505060208501516080850152509050610c46565b60006060828403121561218b57600080fd5b60008083601f84011261228257600080fd5b5081356001600160401b0381111561229957600080fd5b6020830191508360208285010111156122b157600080fd5b9250929050565b600080600080600080600060e0888a0312156122d357600080fd5b6122dd898961225e565b96506060880135955060808801356001600160401b038082111561230057600080fd5b61230c8b838c01612270565b909750955060a08a0135915061232182612138565b90935060c0890135908082111561233757600080fd5b506123448a828b01612270565b989b979a50959850939692959293505050565b60008060006060848603121561236c57600080fd5b833561237781612138565b9250602084013561238781612138565b929592945050506040919091013590565b803563ffffffff811681146123ac57600080fd5b919050565b600080604083850312156123c457600080fd5b61216b83612398565b801515811461113157600080fd5b600080604083850312156123ee57600080fd5b82356001600160401b0381111561240457600080fd5b61241085828601612179565b9250506020830135612421816123cd565b809150509250929050565b8151815260208083015190820152604081016108df565b803561ffff811681146123ac57600080fd5b6000806040838503121561246857600080fd5b61247183612398565b915061247f60208401612443565b90509250929050565b60006020828403121561249a57600080fd5b8135610a9581612138565b60008060008060a085870312156124bb57600080fd5b6124c5868661225e565b935060608501356001600160401b038111156124e057600080fd5b6124ec87828801612270565b909450925050608085013561250081612138565b939692955090935050565b60008083601f84011261251d57600080fd5b5081356001600160401b0381111561253457600080fd5b6020830191508360208260051b85010111156122b157600080fd5b6000806020838503121561256257600080fd5b82356001600160401b0381111561257857600080fd5b6125848582860161250b565b90969095509350505050565b6000602082840312156125a257600080fd5b610a9582612398565b600080600080606085870312156125c157600080fd5b6125ca85612398565b93506125d860208601612443565b925060408501356001600160401b038111156125f357600080fd5b6125ff87828801612270565b95989497509550505050565b6000806000838503608081121561262157600080fd5b84356001600160401b0381111561263757600080fd5b61264387828801612179565b9450506040601f198201121561265857600080fd5b50602084019150606084013561266d81612138565b809150509250925092565b600060c082019050835182526001600160401b03602085015116602083015260408401516126b3604084018280518252602090810151910152565b5082516080830152602083015160a0830152610a95565b600080604083850312156126dd57600080fd5b82356126e881612138565b9150602083013561242181612138565b60006060828403121561270a57600080fd5b610a95838361225e565b600181811c9082168061272857607f821691505b60208210810361218b57634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b038111828210171561278057612780612748565b60405290565b604080519081016001600160401b038111828210171561278057612780612748565b604051601f8201601f191681016001600160401b03811182821017156127d0576127d0612748565b604052919050565b60006001600160401b038211156127f1576127f1612748565b50601f01601f191660200190565b60006001600160401b038084111561281957612819612748565b8360051b602061282a8183016127a8565b86815291850191818101903684111561284257600080fd5b865b848110156129085780358681111561285c5760008081fd5b880160603682900312156128705760008081fd5b61287861275e565b61288182612398565b815261288e868301612443565b86820152604080830135898111156128a65760008081fd5b929092019136601f8401126128bb5760008081fd5b82356128ce6128c9826127d8565b6127a8565b81815236898387010111156128e35760008081fd5b818986018a830137600091810189019190915290820152845250918301918301612844565b50979650505050505050565b6000808585111561292457600080fd5b8386111561293157600080fd5b5050820193919092039150565b600084516129508184602089016120d5565b8201838582376000930192835250909392505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b602081526000610c46602083018486612966565b634e487b7160e01b600052603260045260246000fd5b6000823561013e198336030181126129d057600080fd5b9190910192915050565b6000808335601e198436030181126129f157600080fd5b8301803591506001600160401b03821115612a0b57600080fd5b6020019150368190038213156122b157600080fd5b6001600160401b038116811461113157600080fd5b63ffffffff612a4389612398565b1681526020880135602082015260006040890135612a6081612a20565b6001600160401b03811660408401525087606083015260e06080830152612a8b60e083018789612966565b6001600160a01b03861660a084015282810360c0840152612aad818587612966565b9a9950505050505050505050565b600060208284031215612acd57600080fd5b81516001600160401b03811115612ae357600080fd5b8201601f81018413612af457600080fd5b8051612b026128c9826127d8565b818152856020838501011115612b1757600080fd5b6116b58260208301602086016120d5565b600060208284031215612b3a57600080fd5b8135610a9581612a20565b60018060a01b038516815283602082015261ffff83166040820152608060608201526000610b0f60808301846120f9565b604081526000612b8960408301856120f9565b82810360208401526116b581856120f9565b600060208284031215612bad57600080fd5b8151610a95816123cd565b6040815263ffffffff8351166040820152602083015160608201526000604084015160a06080840152612bee60e08401826120f9565b90506060850151603f198483030160a0850152612c0b82826120f9565b60809690960151151560c08501525050506001600160a01b039190911660209091015290565b600060408284031215612c4357600080fd5b612c4b612786565b9050815181526020820151602082015292915050565b600060408284031215612c7357600080fd5b610a958383612c31565b601f821115611177576000816000526020600020601f850160051c81016020861015612ca65750805b601f850160051c820191505b81811015612cc557828155600101612cb2565b505050505050565b81516001600160401b03811115612ce657612ce6612748565b612cfa81612cf48454612714565b84612c7d565b602080601f831160018114612d2f5760008415612d175750858301515b600019600386901b1c1916600185901b178555612cc5565b600085815260208120601f198616915b82811015612d5e57888601518255948401946001909101908401612d3f565b5085821015612d7c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b83811015612e0957888303603f190185528151805163ffffffff1684528781015161ffff16888501528601516060878501819052612df5818601836120f9565b968901969450505090860190600101612db5565b509098975050505050505050565b600060408284031215612e2957600080fd5b612e31612786565b82358152602083013560208201528091505092915050565b634e487b7160e01b600052601160045260246000fd5b600082612e7c57634e487b7160e01b600052601260045260246000fd5b500490565b80820281158282048414176108df576108df612e49565b803560208310156108df57600019602084900360031b1b1692915050565b6001600160c01b03198135818116916008851015612ede5780818660080360031b1b83161692505b505092915050565b6001600160401b0360c01b8560c01b16815263ffffffff60e01b8460e01b16600882015282600c82015260008251612f2581602c8501602087016120d5565b91909101602c0195945050505050565b808201808211156108df576108df612e49565b8481526001600160401b0360c01b8460c01b16602082015282602882015260008251612f7b8160488501602087016120d5565b9190910160480195945050505050565b600060808284031215612f9d57600080fd5b612fa561275e565b825181526020830151612fb781612a20565b6020820152612fc98460408501612c31565b60408201529392505050565b600060208284031215612fe757600080fd5b8151610a958161213856fea2646970667358221220645fbf12560a7699955d058d106f0e740ad9cbc14ee055c7fe136365795a23de64736f6c63430008160033", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x25C JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x715018A6 GT PUSH2 0x144 JUMPI DUP1 PUSH4 0xBB0B6A53 GT PUSH2 0xB6 JUMPI DUP1 PUSH4 0xD045A0DC GT PUSH2 0x7A JUMPI DUP1 PUSH4 0xD045A0DC EQ PUSH2 0x780 JUMPI DUP1 PUSH4 0xD4243885 EQ PUSH2 0x793 JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x7B3 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x7F9 JUMPI DUP1 PUSH4 0xFC0C546A EQ PUSH2 0x48C JUMPI DUP1 PUSH4 0xFF7BD03D EQ PUSH2 0x819 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xBB0B6A53 EQ PUSH2 0x6DF JUMPI DUP1 PUSH4 0xBC70B354 EQ PUSH2 0x70C JUMPI DUP1 PUSH4 0xBD815DB0 EQ PUSH2 0x72C JUMPI DUP1 PUSH4 0xC7C7F5B3 EQ PUSH2 0x73F JUMPI DUP1 PUSH4 0xCA5EB5E1 EQ PUSH2 0x760 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x95D89B41 GT PUSH2 0x108 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x622 JUMPI DUP1 PUSH4 0x963EFCAA EQ PUSH2 0x637 JUMPI DUP1 PUSH4 0x9F68B964 EQ PUSH2 0x66B JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x67F JUMPI DUP1 PUSH4 0xB731EA0A EQ PUSH2 0x69F JUMPI DUP1 PUSH4 0xB98BD070 EQ PUSH2 0x6BF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x715018A6 EQ PUSH2 0x580 JUMPI DUP1 PUSH4 0x7D25A05E EQ PUSH2 0x595 JUMPI DUP1 PUSH4 0x82413EAC EQ PUSH2 0x5D0 JUMPI DUP1 PUSH4 0x857749B0 EQ PUSH2 0x5F0 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x604 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x23B872DD GT PUSH2 0x1DD JUMPI DUP1 PUSH4 0x52AE2879 GT PUSH2 0x1A1 JUMPI DUP1 PUSH4 0x52AE2879 EQ PUSH2 0x48C JUMPI DUP1 PUSH4 0x5535D461 EQ PUSH2 0x49F JUMPI DUP1 PUSH4 0x5A0DFE4D EQ PUSH2 0x4BF JUMPI DUP1 PUSH4 0x5E280F11 EQ PUSH2 0x4F6 JUMPI DUP1 PUSH4 0x6FC1B31E EQ PUSH2 0x52A JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x54A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x23B872DD EQ PUSH2 0x3DD JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x3FD JUMPI DUP1 PUSH4 0x3400288B EQ PUSH2 0x41F JUMPI DUP1 PUSH4 0x3B6F743B EQ PUSH2 0x43F JUMPI DUP1 PUSH4 0x40C10F19 EQ PUSH2 0x46C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x134D4F25 GT PUSH2 0x224 JUMPI DUP1 PUSH4 0x134D4F25 EQ PUSH2 0x338 JUMPI DUP1 PUSH4 0x156A0D0F EQ PUSH2 0x360 JUMPI DUP1 PUSH4 0x17442B70 EQ PUSH2 0x387 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x3A9 JUMPI DUP1 PUSH4 0x1F5E1334 EQ PUSH2 0x3C8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x261 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x28C JUMPI DUP1 PUSH4 0xD35B415 EQ PUSH2 0x2BC JUMPI DUP1 PUSH4 0x111ECDAD EQ PUSH2 0x2EB JUMPI DUP1 PUSH4 0x13137D65 EQ PUSH2 0x323 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x26D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x276 PUSH2 0x839 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x283 SWAP2 SWAP1 PUSH2 0x2125 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x298 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2AC PUSH2 0x2A7 CALLDATASIZE PUSH1 0x4 PUSH2 0x214D JUMP JUMPDEST PUSH2 0x8CB JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x283 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2C8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2DC PUSH2 0x2D7 CALLDATASIZE PUSH1 0x4 PUSH2 0x2191 JUMP JUMPDEST PUSH2 0x8E5 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x283 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x21C5 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2F7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 SLOAD PUSH2 0x30B SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x283 JUMP JUMPDEST PUSH2 0x336 PUSH2 0x331 CALLDATASIZE PUSH1 0x4 PUSH2 0x22B8 JUMP JUMPDEST PUSH2 0x9B6 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x344 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x34D PUSH1 0x2 DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x283 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x36C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH3 0xB9270B PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP3 ADD MSTORE ADD PUSH2 0x283 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x393 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 DUP3 ADD MSTORE ADD PUSH2 0x283 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3B5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x7 SLOAD JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x283 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3D4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x34D PUSH1 0x1 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3E9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2AC PUSH2 0x3F8 CALLDATASIZE PUSH1 0x4 PUSH2 0x2357 JUMP JUMPDEST PUSH2 0xA76 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x409 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x12 JUMPDEST PUSH1 0x40 MLOAD PUSH1 0xFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x283 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x42B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x336 PUSH2 0x43A CALLDATASIZE PUSH1 0x4 PUSH2 0x23B1 JUMP JUMPDEST PUSH2 0xA9C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x44B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x45F PUSH2 0x45A CALLDATASIZE PUSH1 0x4 PUSH2 0x23DB JUMP JUMPDEST PUSH2 0xAB2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x283 SWAP2 SWAP1 PUSH2 0x242C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x478 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x336 PUSH2 0x487 CALLDATASIZE PUSH1 0x4 PUSH2 0x214D JUMP JUMPDEST PUSH2 0xB19 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x498 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP ADDRESS PUSH2 0x30B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x276 PUSH2 0x4BA CALLDATASIZE PUSH1 0x4 PUSH2 0x2455 JUMP JUMPDEST PUSH2 0xB23 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4CB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2AC PUSH2 0x4DA CALLDATASIZE PUSH1 0x4 PUSH2 0x23B1 JUMP JUMPDEST PUSH4 0xFFFFFFFF SWAP2 SWAP1 SWAP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD EQ SWAP1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x502 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x30B PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x536 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x336 PUSH2 0x545 CALLDATASIZE PUSH1 0x4 PUSH2 0x2488 JUMP JUMPDEST PUSH2 0xBC8 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x556 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3BA PUSH2 0x565 CALLDATASIZE PUSH1 0x4 PUSH2 0x2488 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x58C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x336 PUSH2 0xC25 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5A1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x5B8 PUSH2 0x5B0 CALLDATASIZE PUSH1 0x4 PUSH2 0x23B1 JUMP JUMPDEST PUSH1 0x0 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x283 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5DC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2AC PUSH2 0x5EB CALLDATASIZE PUSH1 0x4 PUSH2 0x24A5 JUMP JUMPDEST PUSH2 0xC39 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5FC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x6 PUSH2 0x40D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x610 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x30B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x62E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x276 PUSH2 0xC4E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x643 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3BA PUSH32 0x0 DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x677 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x0 PUSH2 0x2AC JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x68B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2AC PUSH2 0x69A CALLDATASIZE PUSH1 0x4 PUSH2 0x214D JUMP JUMPDEST PUSH2 0xC5D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x2 SLOAD PUSH2 0x30B SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6CB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x336 PUSH2 0x6DA CALLDATASIZE PUSH1 0x4 PUSH2 0x254F JUMP JUMPDEST PUSH2 0xC6B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6EB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3BA PUSH2 0x6FA CALLDATASIZE PUSH1 0x4 PUSH2 0x2590 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x718 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x276 PUSH2 0x727 CALLDATASIZE PUSH1 0x4 PUSH2 0x25AB JUMP JUMPDEST PUSH2 0xC85 JUMP JUMPDEST PUSH2 0x336 PUSH2 0x73A CALLDATASIZE PUSH1 0x4 PUSH2 0x254F JUMP JUMPDEST PUSH2 0xE2D JUMP JUMPDEST PUSH2 0x752 PUSH2 0x74D CALLDATASIZE PUSH1 0x4 PUSH2 0x260B JUMP JUMPDEST PUSH2 0xFB7 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x283 SWAP3 SWAP2 SWAP1 PUSH2 0x2678 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x76C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x336 PUSH2 0x77B CALLDATASIZE PUSH1 0x4 PUSH2 0x2488 JUMP JUMPDEST PUSH2 0xFEB JUMP JUMPDEST PUSH2 0x336 PUSH2 0x78E CALLDATASIZE PUSH1 0x4 PUSH2 0x22B8 JUMP JUMPDEST PUSH2 0x1071 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x79F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x336 PUSH2 0x7AE CALLDATASIZE PUSH1 0x4 PUSH2 0x2488 JUMP JUMPDEST PUSH2 0x10A0 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7BF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3BA PUSH2 0x7CE CALLDATASIZE PUSH1 0x4 PUSH2 0x26CA JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 SWAP1 SWAP5 AND DUP3 MSTORE SWAP2 SWAP1 SWAP2 MSTORE KECCAK256 SLOAD SWAP1 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x805 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x336 PUSH2 0x814 CALLDATASIZE PUSH1 0x4 PUSH2 0x2488 JUMP JUMPDEST PUSH2 0x10F6 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x825 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2AC PUSH2 0x834 CALLDATASIZE PUSH1 0x4 PUSH2 0x26F8 JUMP JUMPDEST PUSH2 0x1134 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x8 DUP1 SLOAD PUSH2 0x848 SWAP1 PUSH2 0x2714 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x874 SWAP1 PUSH2 0x2714 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x8C1 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x896 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x8C1 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x8A4 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 CALLER PUSH2 0x8D9 DUP2 DUP6 DUP6 PUSH2 0x116A JUMP JUMPDEST PUSH1 0x1 SWAP2 POP POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x60 PUSH2 0x918 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD DUP3 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB PUSH1 0x20 DUP1 DUP5 ADD DUP3 SWAP1 MSTORE DUP5 MLOAD DUP4 DUP2 MSTORE SWAP1 DUP2 ADD SWAP1 SWAP5 MSTORE SWAP2 SWAP6 POP SWAP2 DUP3 PUSH2 0x973 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP2 MSTORE PUSH1 0x60 PUSH1 0x20 DUP3 ADD MSTORE DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x94B JUMPI SWAP1 POP JUMPDEST POP SWAP4 POP PUSH1 0x0 DUP1 PUSH2 0x998 PUSH1 0x40 DUP10 ADD CALLDATALOAD PUSH1 0x60 DUP11 ADD CALLDATALOAD PUSH2 0x993 PUSH1 0x20 DUP13 ADD DUP13 PUSH2 0x2590 JUMP JUMPDEST PUSH2 0x117C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE SWAP7 SWAP9 SWAP6 SWAP8 POP POP POP POP POP POP JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xA06 JUMPI PUSH1 0x40 MLOAD PUSH4 0x91AC5E4F PUSH1 0xE0 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x20 DUP8 ADD DUP1 CALLDATALOAD SWAP1 PUSH2 0xA20 SWAP1 PUSH2 0xA1B SWAP1 DUP11 PUSH2 0x2590 JUMP JUMPDEST PUSH2 0x11B8 JUMP JUMPDEST EQ PUSH2 0xA5E JUMPI PUSH2 0xA32 PUSH1 0x20 DUP9 ADD DUP9 PUSH2 0x2590 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x309AFAF3 PUSH1 0xE2 SHL DUP2 MSTORE PUSH4 0xFFFFFFFF SWAP1 SWAP2 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x20 DUP9 ADD CALLDATALOAD PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 ADD PUSH2 0x9FD JUMP JUMPDEST PUSH2 0xA6D DUP8 DUP8 DUP8 DUP8 DUP8 DUP8 DUP8 PUSH2 0x11F4 JUMP JUMPDEST POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 CALLER PUSH2 0xA84 DUP6 DUP3 DUP6 PUSH2 0x135B JUMP JUMPDEST PUSH2 0xA8F DUP6 DUP6 DUP6 PUSH2 0x13D9 JUMP JUMPDEST PUSH1 0x1 SWAP2 POP POP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0xAA4 PUSH2 0x1438 JUMP JUMPDEST PUSH2 0xAAE DUP3 DUP3 PUSH2 0x1465 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0xAE2 PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH1 0x60 DUP7 ADD CALLDATALOAD PUSH2 0x993 PUSH1 0x20 DUP9 ADD DUP9 PUSH2 0x2590 JUMP JUMPDEST SWAP2 POP POP PUSH1 0x0 DUP1 PUSH2 0xAF2 DUP7 DUP5 PUSH2 0x14BA JUMP JUMPDEST SWAP1 SWAP3 POP SWAP1 POP PUSH2 0xB0F PUSH2 0xB07 PUSH1 0x20 DUP9 ADD DUP9 PUSH2 0x2590 JUMP JUMPDEST DUP4 DUP4 DUP9 PUSH2 0x15DD JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0xAAE DUP3 DUP3 PUSH2 0x16BE JUMP JUMPDEST PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 DUP1 SLOAD PUSH2 0xB47 SWAP1 PUSH2 0x2714 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0xB73 SWAP1 PUSH2 0x2714 JUMP JUMPDEST DUP1 ISZERO PUSH2 0xBC0 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xB95 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xBC0 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xBA3 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 JUMP JUMPDEST PUSH2 0xBD0 PUSH2 0x1438 JUMP JUMPDEST PUSH1 0x4 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH32 0xF0BE4F1E87349231D80C36B33F9E8639658EEAF474014DEE15A3E6A4D4414197 SWAP1 PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP JUMP JUMPDEST PUSH2 0xC2D PUSH2 0x1438 JUMP JUMPDEST PUSH2 0xC37 PUSH1 0x0 PUSH2 0x16F4 JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND ADDRESS EQ JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x9 DUP1 SLOAD PUSH2 0x848 SWAP1 PUSH2 0x2714 JUMP JUMPDEST PUSH1 0x0 CALLER PUSH2 0x8D9 DUP2 DUP6 DUP6 PUSH2 0x13D9 JUMP JUMPDEST PUSH2 0xC73 PUSH2 0x1438 JUMP JUMPDEST PUSH2 0xAAE PUSH2 0xC80 DUP3 DUP5 PUSH2 0x27FF JUMP JUMPDEST PUSH2 0x1744 JUMP JUMPDEST PUSH4 0xFFFFFFFF DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH2 0xFFFF DUP8 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE DUP2 KECCAK256 DUP1 SLOAD PUSH1 0x60 SWAP3 SWAP2 SWAP1 PUSH2 0xCB9 SWAP1 PUSH2 0x2714 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0xCE5 SWAP1 PUSH2 0x2714 JUMP JUMPDEST DUP1 ISZERO PUSH2 0xD32 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xD07 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xD32 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xD15 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP DUP1 MLOAD PUSH1 0x0 SUB PUSH2 0xD82 JUMPI DUP4 DUP4 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP5 POP PUSH2 0xC46 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP4 SWAP1 SUB PUSH2 0xD92 JUMPI SWAP1 POP PUSH2 0xC46 JUMP JUMPDEST PUSH1 0x2 DUP4 LT PUSH2 0xE10 JUMPI PUSH2 0xDD9 DUP5 DUP5 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x184B SWAP3 POP POP POP JUMP JUMPDEST DUP1 PUSH2 0xDE7 DUP5 PUSH1 0x2 DUP2 DUP9 PUSH2 0x2914 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0xDF9 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x293E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP2 POP POP PUSH2 0xC46 JUMP JUMPDEST DUP4 DUP4 PUSH1 0x40 MLOAD PUSH4 0x9A6D49CD PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x9FD SWAP3 SWAP2 SWAP1 PUSH2 0x298F JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xF36 JUMPI CALLDATASIZE DUP4 DUP4 DUP4 DUP2 DUP2 LT PUSH2 0xE4B JUMPI PUSH2 0xE4B PUSH2 0x29A3 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 MUL DUP2 ADD SWAP1 PUSH2 0xE5D SWAP2 SWAP1 PUSH2 0x29B9 JUMP JUMPDEST SWAP1 POP PUSH2 0xE90 PUSH2 0xE6F PUSH1 0x20 DUP4 ADD DUP4 PUSH2 0x2590 JUMP JUMPDEST PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH4 0xFFFFFFFF SWAP2 SWAP1 SWAP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD EQ SWAP1 JUMP JUMPDEST PUSH2 0xE9A JUMPI POP PUSH2 0xF2E JUMP JUMPDEST ADDRESS PUSH4 0xD045A0DC PUSH1 0xC0 DUP4 ADD CALLDATALOAD DUP4 PUSH1 0xA0 DUP2 ADD CALLDATALOAD PUSH2 0xEB9 PUSH2 0x100 DUP4 ADD DUP4 PUSH2 0x29DA JUMP JUMPDEST PUSH2 0xECA PUSH2 0x100 DUP10 ADD PUSH1 0xE0 DUP11 ADD PUSH2 0x2488 JUMP JUMPDEST PUSH2 0xED8 PUSH2 0x120 DUP11 ADD DUP11 PUSH2 0x29DA JUMP JUMPDEST PUSH1 0x40 MLOAD DUP10 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xEFA SWAP8 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x2A35 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP9 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0xF13 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0xF27 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP POP JUMPDEST PUSH1 0x1 ADD PUSH2 0xE30 JUMP JUMPDEST POP CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x8E9E7099 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0xF75 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY PUSH1 0x1F RETURNDATASIZE SWAP1 DUP2 ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0xF9D SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH2 0x2ABB JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x8351EEA7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x9FD SWAP2 SWAP1 PUSH2 0x2125 JUMP JUMPDEST PUSH2 0xFBF PUSH2 0x208E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0xFDE DUP6 DUP6 DUP6 PUSH2 0x1877 JUMP JUMPDEST SWAP2 POP SWAP2 POP JUMPDEST SWAP4 POP SWAP4 SWAP2 POP POP JUMP JUMPDEST PUSH2 0xFF3 PUSH2 0x1438 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0xCA5EB5E1 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH32 0x0 AND SWAP1 PUSH4 0xCA5EB5E1 SWAP1 PUSH1 0x24 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1056 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x106A JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMP JUMPDEST CALLER ADDRESS EQ PUSH2 0x1091 JUMPI PUSH1 0x40 MLOAD PUSH4 0x29A949D PUSH1 0xE3 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0xA6D DUP8 DUP8 DUP8 DUP8 DUP8 DUP8 DUP8 PUSH2 0xA5E JUMP JUMPDEST PUSH2 0x10A8 PUSH2 0x1438 JUMP JUMPDEST PUSH1 0x2 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH32 0xD48D879CEF83A1C0BDDA516F27B13DDB1B3F8BBAC1C9E1511BB2A659C2427760 SWAP1 PUSH1 0x20 ADD PUSH2 0xC1A JUMP JUMPDEST PUSH2 0x10FE PUSH2 0x1438 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x1128 JUMPI PUSH1 0x40 MLOAD PUSH4 0x1E4FBDF7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x9FD JUMP JUMPDEST PUSH2 0x1131 DUP2 PUSH2 0x16F4 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD DUP1 CALLDATALOAD SWAP1 PUSH1 0x1 SWAP1 DUP4 SWAP1 PUSH2 0x114C SWAP1 DUP7 PUSH2 0x2590 JUMP JUMPDEST PUSH4 0xFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD EQ SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x1177 DUP4 DUP4 DUP4 PUSH1 0x1 PUSH2 0x1972 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1188 DUP6 PUSH2 0x1A47 JUMP JUMPDEST SWAP2 POP DUP2 SWAP1 POP DUP4 DUP2 LT ISZERO PUSH2 0xFE3 JUMPI PUSH1 0x40 MLOAD PUSH4 0x71C4EFED PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x24 DUP2 ADD DUP6 SWAP1 MSTORE PUSH1 0x44 ADD PUSH2 0x9FD JUMP JUMPDEST PUSH4 0xFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD DUP1 PUSH2 0x8DF JUMPI PUSH1 0x40 MLOAD PUSH4 0xF6FF4FB7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH4 0xFFFFFFFF DUP5 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x9FD JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1206 PUSH2 0x1203 DUP8 DUP8 PUSH2 0x1A7E JUMP JUMPDEST SWAP1 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x1232 DUP3 PUSH2 0x1220 PUSH2 0x121B DUP11 DUP11 PUSH2 0x1A96 JUMP JUMPDEST PUSH2 0x1AB9 JUMP JUMPDEST PUSH2 0x122D PUSH1 0x20 DUP14 ADD DUP14 PUSH2 0x2590 JUMP JUMPDEST PUSH2 0x1AEE JUMP JUMPDEST SWAP1 POP PUSH1 0x28 DUP7 GT ISZERO PUSH2 0x12F9 JUMPI PUSH1 0x0 PUSH2 0x126F PUSH2 0x1252 PUSH1 0x60 DUP13 ADD PUSH1 0x40 DUP14 ADD PUSH2 0x2B28 JUMP JUMPDEST PUSH2 0x125F PUSH1 0x20 DUP14 ADD DUP14 PUSH2 0x2590 JUMP JUMPDEST DUP5 PUSH2 0x126A DUP13 DUP13 PUSH2 0x1B16 JUMP JUMPDEST PUSH2 0x1B61 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH4 0x3E5AC809 PUSH1 0xE1 SHL DUP2 MSTORE SWAP1 SWAP2 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND SWAP1 PUSH4 0x7CB59012 SWAP1 PUSH2 0x12C5 SWAP1 DUP7 SWAP1 DUP14 SWAP1 PUSH1 0x0 SWAP1 DUP8 SWAP1 PUSH1 0x4 ADD PUSH2 0x2B45 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x12DF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x12F3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP9 PUSH32 0xEFED6D3500546B29533B128A29E3A94D70788727F0507505AC12EAF2E578FD9C PUSH2 0x1332 PUSH1 0x20 DUP14 ADD DUP14 PUSH2 0x2590 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0xFFFFFFFF SWAP1 SWAP3 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP7 SWAP1 MSTORE ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP7 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 SLOAD PUSH1 0x0 NOT DUP2 EQ PUSH2 0x13D3 JUMPI DUP2 DUP2 LT ISZERO PUSH2 0x13C4 JUMPI PUSH1 0x40 MLOAD PUSH4 0x7DC7A0D9 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x44 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x64 ADD PUSH2 0x9FD JUMP JUMPDEST PUSH2 0x13D3 DUP5 DUP5 DUP5 DUP5 SUB PUSH1 0x0 PUSH2 0x1972 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x1403 JUMPI PUSH1 0x40 MLOAD PUSH4 0x4B637E8F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x0 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x9FD JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x142D JUMPI PUSH1 0x40 MLOAD PUSH4 0xEC442F05 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x9FD JUMP JUMPDEST PUSH2 0x1177 DUP4 DUP4 DUP4 PUSH2 0x1B93 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0xC37 JUMPI PUSH1 0x40 MLOAD PUSH4 0x118CDAA7 PUSH1 0xE0 SHL DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x9FD JUMP JUMPDEST PUSH4 0xFFFFFFFF DUP3 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 DUP5 SWAP1 SSTORE DUP2 MLOAD SWAP3 DUP4 MSTORE DUP3 ADD DUP4 SWAP1 MSTORE PUSH32 0x238399D427B947898EDB290F5FF0F9109849B1C3BA196A42E35F00C50A54B98B SWAP2 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP JUMP JUMPDEST PUSH1 0x60 DUP1 PUSH1 0x0 PUSH2 0x1517 DUP6 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x14D0 DUP7 PUSH2 0x1CBD JUMP JUMPDEST PUSH2 0x14DD PUSH1 0xA0 DUP10 ADD DUP10 PUSH2 0x29DA JUMP JUMPDEST DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH2 0x1CE9 SWAP3 POP POP POP JUMP JUMPDEST SWAP1 SWAP4 POP SWAP1 POP PUSH1 0x0 DUP2 PUSH2 0x152A JUMPI PUSH1 0x1 PUSH2 0x152D JUMP JUMPDEST PUSH1 0x2 JUMPDEST SWAP1 POP PUSH2 0x154D PUSH2 0x153F PUSH1 0x20 DUP9 ADD DUP9 PUSH2 0x2590 JUMP JUMPDEST DUP3 PUSH2 0x727 PUSH1 0x80 DUP11 ADD DUP11 PUSH2 0x29DA JUMP JUMPDEST PUSH1 0x4 SLOAD SWAP1 SWAP4 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP1 ISZERO PUSH2 0x15D3 JUMPI PUSH1 0x40 MLOAD PUSH4 0x43A78EB PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND SWAP1 PUSH4 0x43A78EB SWAP1 PUSH2 0x1590 SWAP1 DUP9 SWAP1 DUP9 SWAP1 PUSH1 0x4 ADD PUSH2 0x2B76 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x15AD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x15D1 SWAP2 SWAP1 PUSH2 0x2B9B JUMP JUMPDEST POP JUMPDEST POP POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xDDC28C58 PUSH1 0x40 MLOAD DUP1 PUSH1 0xA0 ADD PUSH1 0x40 MSTORE DUP1 DUP9 PUSH4 0xFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1640 DUP10 PUSH2 0x11B8 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD DUP8 DUP2 MSTORE PUSH1 0x20 ADD DUP7 DUP2 MSTORE PUSH1 0x20 ADD DUP6 ISZERO ISZERO DUP2 MSTORE POP ADDRESS PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1675 SWAP3 SWAP2 SWAP1 PUSH2 0x2BB8 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1691 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x16B5 SWAP2 SWAP1 PUSH2 0x2C61 JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x16E8 JUMPI PUSH1 0x40 MLOAD PUSH4 0xEC442F05 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x9FD JUMP JUMPDEST PUSH2 0xAAE PUSH1 0x0 DUP4 DUP4 PUSH2 0x1B93 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 DUP2 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT DUP4 AND DUP2 OR DUP5 SSTORE PUSH1 0x40 MLOAD SWAP2 SWAP1 SWAP3 AND SWAP3 DUP4 SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0x181B JUMPI PUSH2 0x1776 DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1765 JUMPI PUSH2 0x1765 PUSH2 0x29A3 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 ADD MLOAD PUSH2 0x184B JUMP JUMPDEST DUP2 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x1788 JUMPI PUSH2 0x1788 PUSH2 0x29A3 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 ADD MLOAD PUSH1 0x3 PUSH1 0x0 DUP5 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x17AA JUMPI PUSH2 0x17AA PUSH2 0x29A3 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x0 ADD MLOAD PUSH4 0xFFFFFFFF AND PUSH4 0xFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP5 DUP5 DUP2 MLOAD DUP2 LT PUSH2 0x17E4 JUMPI PUSH2 0x17E4 PUSH2 0x29A3 JUMP JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x20 ADD MLOAD PUSH2 0xFFFF AND PUSH2 0xFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SWAP1 DUP2 PUSH2 0x1812 SWAP2 SWAP1 PUSH2 0x2CCD JUMP JUMPDEST POP PUSH1 0x1 ADD PUSH2 0x1747 JUMP JUMPDEST POP PUSH32 0xBE4864A8E820971C0247F5992E2DA559595F7BF076A21CB5928D443D2A13B674 DUP2 PUSH1 0x40 MLOAD PUSH2 0xC1A SWAP2 SWAP1 PUSH2 0x2D8C JUMP JUMPDEST PUSH1 0x2 DUP2 ADD MLOAD PUSH2 0xFFFF DUP2 AND PUSH1 0x3 EQ PUSH2 0xAAE JUMPI DUP2 PUSH1 0x40 MLOAD PUSH4 0x9A6D49CD PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x9FD SWAP2 SWAP1 PUSH2 0x2125 JUMP JUMPDEST PUSH2 0x187F PUSH2 0x208E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x0 DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 DUP1 PUSH2 0x18B6 CALLER PUSH1 0x40 DUP10 ADD CALLDATALOAD PUSH1 0x60 DUP11 ADD CALLDATALOAD PUSH2 0x18B1 PUSH1 0x20 DUP13 ADD DUP13 PUSH2 0x2590 JUMP JUMPDEST PUSH2 0x1D63 JUMP JUMPDEST SWAP2 POP SWAP2 POP PUSH1 0x0 DUP1 PUSH2 0x18C7 DUP10 DUP5 PUSH2 0x14BA JUMP JUMPDEST SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x18F3 PUSH2 0x18DC PUSH1 0x20 DUP12 ADD DUP12 PUSH2 0x2590 JUMP JUMPDEST DUP4 DUP4 PUSH2 0x18ED CALLDATASIZE DUP14 SWAP1 SUB DUP14 ADD DUP14 PUSH2 0x2E17 JUMP JUMPDEST DUP12 PUSH2 0x1D89 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE DUP6 DUP2 MSTORE PUSH1 0x20 DUP1 DUP3 ADD DUP7 SWAP1 MSTORE DUP3 MLOAD SWAP3 SWAP9 POP SWAP1 SWAP7 POP CALLER SWAP2 SWAP1 PUSH32 0x85496B760A4B7F8D66384B9DF21B381F5D1B1E79F229A47AAF4C232EDC2FE59A SWAP1 PUSH2 0x1941 SWAP1 DUP14 ADD DUP14 PUSH2 0x2590 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH4 0xFFFFFFFF SWAP1 SWAP3 AND DUP3 MSTORE PUSH1 0x20 DUP3 ADD DUP10 SWAP1 MSTORE DUP2 ADD DUP8 SWAP1 MSTORE PUSH1 0x60 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP SWAP4 POP SWAP4 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH2 0x199C JUMPI PUSH1 0x40 MLOAD PUSH4 0xE602DF05 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x0 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x9FD JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x19C6 JUMPI PUSH1 0x40 MLOAD PUSH4 0x4A1406B1 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x0 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x9FD JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x6 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 SWAP4 DUP8 AND DUP4 MSTORE SWAP3 SWAP1 MSTORE KECCAK256 DUP3 SWAP1 SSTORE DUP1 ISZERO PUSH2 0x13D3 JUMPI DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 DUP5 PUSH1 0x40 MLOAD PUSH2 0x1A39 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH2 0x1A74 DUP2 DUP5 PUSH2 0x2E5F JUMP JUMPDEST PUSH2 0x8DF SWAP2 SWAP1 PUSH2 0x2E81 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1A8D PUSH1 0x20 DUP3 DUP5 DUP7 PUSH2 0x2914 JUMP JUMPDEST PUSH2 0xA95 SWAP2 PUSH2 0x2E98 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1AA6 PUSH1 0x28 PUSH1 0x20 DUP5 DUP7 PUSH2 0x2914 JUMP JUMPDEST PUSH2 0x1AAF SWAP2 PUSH2 0x2EB6 JUMP JUMPDEST PUSH1 0xC0 SHR SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x8DF PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP5 AND PUSH2 0x2E81 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH2 0x1B04 JUMPI PUSH2 0xDEAD SWAP4 POP JUMPDEST PUSH2 0x1B0E DUP5 DUP5 PUSH2 0x16BE JUMP JUMPDEST POP SWAP1 SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x1B25 DUP3 PUSH1 0x28 DUP2 DUP7 PUSH2 0x2914 JUMP JUMPDEST DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 DUP5 DUP5 DUP5 DUP5 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x1B7A SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x2EE6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP1 POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH2 0x1BBE JUMPI DUP1 PUSH1 0x7 PUSH1 0x0 DUP3 DUP3 SLOAD PUSH2 0x1BB3 SWAP2 SWAP1 PUSH2 0x2F35 JUMP JUMPDEST SWAP1 SWAP2 SSTORE POP PUSH2 0x1C30 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 DUP2 LT ISZERO PUSH2 0x1C11 JUMPI PUSH1 0x40 MLOAD PUSH4 0x391434E3 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x44 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x64 ADD PUSH2 0x9FD JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP1 DUP3 SWAP1 SUB SWAP1 SSTORE JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x1C4C JUMPI PUSH1 0x7 DUP1 SLOAD DUP3 SWAP1 SUB SWAP1 SSTORE PUSH2 0x1C6B JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD DUP3 ADD SWAP1 SSTORE JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP4 PUSH1 0x40 MLOAD PUSH2 0x1CB0 SWAP2 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x8DF PUSH32 0x0 DUP4 PUSH2 0x2E5F JUMP JUMPDEST DUP1 MLOAD PUSH1 0x60 SWAP1 ISZERO ISZERO DUP1 PUSH2 0x1D32 JUMPI DUP5 DUP5 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x1D1E SWAP3 SWAP2 SWAP1 SWAP2 DUP3 MSTORE PUSH1 0xC0 SHL PUSH1 0x1 PUSH1 0x1 PUSH1 0xC0 SHL SUB NOT AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x28 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE PUSH2 0x1D59 JUMP JUMPDEST DUP5 DUP5 CALLER DUP6 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x1D49 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x2F48 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE JUMPDEST SWAP2 POP SWAP4 POP SWAP4 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x1D71 DUP6 DUP6 DUP6 PUSH2 0x117C JUMP JUMPDEST SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x1D80 DUP7 DUP4 PUSH2 0x1E94 JUMP JUMPDEST SWAP5 POP SWAP5 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x1D91 PUSH2 0x208E JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1DA0 DUP5 PUSH1 0x0 ADD MLOAD PUSH2 0x1ECA JUMP JUMPDEST PUSH1 0x20 DUP6 ADD MLOAD SWAP1 SWAP2 POP ISZERO PUSH2 0x1DBA JUMPI PUSH2 0x1DBA DUP5 PUSH1 0x20 ADD MLOAD PUSH2 0x1EF2 JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0x2637A450 DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0xA0 ADD PUSH1 0x40 MSTORE DUP1 DUP12 PUSH4 0xFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x1E0A DUP13 PUSH2 0x11B8 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 ADD DUP11 DUP2 MSTORE PUSH1 0x20 ADD DUP10 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP10 PUSH1 0x20 ADD MLOAD GT ISZERO ISZERO DUP2 MSTORE POP DUP7 PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x1E46 SWAP3 SWAP2 SWAP1 PUSH2 0x2BB8 JUMP JUMPDEST PUSH1 0x80 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP9 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1E64 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1E89 SWAP2 SWAP1 PUSH2 0x2F8B JUMP JUMPDEST SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x1EBE JUMPI PUSH1 0x40 MLOAD PUSH4 0x4B637E8F PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x0 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x9FD JUMP JUMPDEST PUSH2 0xAAE DUP3 PUSH1 0x0 DUP4 PUSH2 0x1B93 JUMP JUMPDEST PUSH1 0x0 DUP2 CALLVALUE EQ PUSH2 0x1EEE JUMPI PUSH1 0x40 MLOAD PUSH4 0x4FB8209 PUSH1 0xE5 SHL DUP2 MSTORE CALLVALUE PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x9FD JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xE4FE1D94 PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x1F52 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x1F76 SWAP2 SWAP1 PUSH2 0x2FD5 JUMP JUMPDEST SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x1F9F JUMPI PUSH1 0x40 MLOAD PUSH4 0x29B99A95 PUSH1 0xE1 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD CALLER PUSH1 0x24 DUP3 ADD DUP2 SWAP1 MSTORE PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 DUP2 AND PUSH1 0x44 DUP6 ADD MSTORE PUSH1 0x64 DUP1 DUP6 ADD DUP9 SWAP1 MSTORE DUP6 MLOAD DUP1 DUP7 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x84 SWAP1 SWAP5 ADD SWAP1 SWAP5 MSTORE PUSH1 0x20 DUP1 DUP5 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0x23B872DD PUSH1 0xE0 SHL OR DUP2 MSTORE DUP5 MLOAD PUSH2 0xAAE SWAP7 DUP9 AND SWAP6 DUP10 SWAP4 PUSH2 0x13D3 SWAP4 DUP9 SWAP4 PUSH1 0x0 SWAP3 DUP4 SWAP3 SWAP1 SWAP2 DUP4 SWAP2 DUP3 DUP9 GAS CALL DUP1 PUSH2 0x2040 JUMPI PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY RETURNDATASIZE DUP2 REVERT JUMPDEST POP POP PUSH1 0x0 MLOAD RETURNDATASIZE SWAP2 POP DUP2 ISZERO PUSH2 0x2058 JUMPI DUP1 PUSH1 0x1 EQ ISZERO PUSH2 0x2065 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND EXTCODESIZE ISZERO JUMPDEST ISZERO PUSH2 0x13D3 JUMPI PUSH1 0x40 MLOAD PUSH4 0x5274AFE7 PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 ADD PUSH2 0x9FD JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP1 NOT AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x20D0 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x0 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 DUP2 MSTORE POP SWAP1 JUMP JUMPDEST SWAP1 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x20F0 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x20D8 JUMP JUMPDEST POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD DUP1 DUP5 MSTORE PUSH2 0x2111 DUP2 PUSH1 0x20 DUP7 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x20D5 JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP3 SWAP1 SWAP3 ADD PUSH1 0x20 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0xA95 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x20F9 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x1131 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2160 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x216B DUP2 PUSH2 0x2138 JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0xE0 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x218B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x21A3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x21B9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xC46 DUP5 DUP3 DUP6 ADD PUSH2 0x2179 JUMP JUMPDEST DUP4 MLOAD DUP2 MSTORE PUSH1 0x20 DUP1 DUP6 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0x0 PUSH1 0xA0 DUP3 ADD PUSH1 0x40 PUSH1 0xA0 PUSH1 0x40 DUP6 ADD MSTORE DUP2 DUP7 MLOAD DUP1 DUP5 MSTORE PUSH1 0xC0 DUP7 ADD SWAP2 POP PUSH1 0xC0 DUP2 PUSH1 0x5 SHL DUP8 ADD ADD SWAP4 POP PUSH1 0x20 DUP1 DUP10 ADD PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2240 JUMPI DUP9 DUP8 SUB PUSH1 0xBF NOT ADD DUP6 MSTORE DUP2 MLOAD DUP1 MLOAD DUP9 MSTORE DUP4 ADD MLOAD DUP4 DUP9 ADD DUP8 SWAP1 MSTORE PUSH2 0x222D DUP8 DUP10 ADD DUP3 PUSH2 0x20F9 JUMP JUMPDEST SWAP8 POP POP SWAP4 DUP3 ADD SWAP4 SWAP1 DUP3 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x2201 JUMP JUMPDEST POP POP DUP8 MLOAD PUSH1 0x60 DUP9 ADD MSTORE POP POP POP PUSH1 0x20 DUP6 ADD MLOAD PUSH1 0x80 DUP6 ADD MSTORE POP SWAP1 POP PUSH2 0xC46 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x218B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x2282 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x2299 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0x22B1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xE0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0x22D3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x22DD DUP10 DUP10 PUSH2 0x225E JUMP JUMPDEST SWAP7 POP PUSH1 0x60 DUP9 ADD CALLDATALOAD SWAP6 POP PUSH1 0x80 DUP9 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP3 GT ISZERO PUSH2 0x2300 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x230C DUP12 DUP4 DUP13 ADD PUSH2 0x2270 JUMP JUMPDEST SWAP1 SWAP8 POP SWAP6 POP PUSH1 0xA0 DUP11 ADD CALLDATALOAD SWAP2 POP PUSH2 0x2321 DUP3 PUSH2 0x2138 JUMP JUMPDEST SWAP1 SWAP4 POP PUSH1 0xC0 DUP10 ADD CALLDATALOAD SWAP1 DUP1 DUP3 GT ISZERO PUSH2 0x2337 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2344 DUP11 DUP3 DUP12 ADD PUSH2 0x2270 JUMP JUMPDEST SWAP9 SWAP12 SWAP8 SWAP11 POP SWAP6 SWAP9 POP SWAP4 SWAP7 SWAP3 SWAP6 SWAP3 SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 DUP5 DUP7 SUB SLT ISZERO PUSH2 0x236C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 CALLDATALOAD PUSH2 0x2377 DUP2 PUSH2 0x2138 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH2 0x2387 DUP2 PUSH2 0x2138 JUMP JUMPDEST SWAP3 SWAP6 SWAP3 SWAP5 POP POP POP PUSH1 0x40 SWAP2 SWAP1 SWAP2 ADD CALLDATALOAD SWAP1 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x23AC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x23C4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x216B DUP4 PUSH2 0x2398 JUMP JUMPDEST DUP1 ISZERO ISZERO DUP2 EQ PUSH2 0x1131 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x23EE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x2404 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2410 DUP6 DUP3 DUP7 ADD PUSH2 0x2179 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x2421 DUP2 PUSH2 0x23CD JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 DUP1 DUP4 ADD MLOAD SWAP1 DUP3 ADD MSTORE PUSH1 0x40 DUP2 ADD PUSH2 0x8DF JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0xFFFF DUP2 AND DUP2 EQ PUSH2 0x23AC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2468 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2471 DUP4 PUSH2 0x2398 JUMP JUMPDEST SWAP2 POP PUSH2 0x247F PUSH1 0x20 DUP5 ADD PUSH2 0x2443 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x249A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0xA95 DUP2 PUSH2 0x2138 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0xA0 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x24BB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x24C5 DUP7 DUP7 PUSH2 0x225E JUMP JUMPDEST SWAP4 POP PUSH1 0x60 DUP6 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x24E0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x24EC DUP8 DUP3 DUP9 ADD PUSH2 0x2270 JUMP JUMPDEST SWAP1 SWAP5 POP SWAP3 POP POP PUSH1 0x80 DUP6 ADD CALLDATALOAD PUSH2 0x2500 DUP2 PUSH2 0x2138 JUMP JUMPDEST SWAP4 SWAP7 SWAP3 SWAP6 POP SWAP1 SWAP4 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0x251D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x2534 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 PUSH1 0x5 SHL DUP6 ADD ADD GT ISZERO PUSH2 0x22B1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x20 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x2562 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x2578 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2584 DUP6 DUP3 DUP7 ADD PUSH2 0x250B JUMP JUMPDEST SWAP1 SWAP7 SWAP1 SWAP6 POP SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x25A2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xA95 DUP3 PUSH2 0x2398 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x60 DUP6 DUP8 SUB SLT ISZERO PUSH2 0x25C1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x25CA DUP6 PUSH2 0x2398 JUMP JUMPDEST SWAP4 POP PUSH2 0x25D8 PUSH1 0x20 DUP7 ADD PUSH2 0x2443 JUMP JUMPDEST SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x25F3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x25FF DUP8 DUP3 DUP9 ADD PUSH2 0x2270 JUMP JUMPDEST SWAP6 SWAP9 SWAP5 SWAP8 POP SWAP6 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP4 DUP6 SUB PUSH1 0x80 DUP2 SLT ISZERO PUSH2 0x2621 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x2637 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2643 DUP8 DUP3 DUP9 ADD PUSH2 0x2179 JUMP JUMPDEST SWAP5 POP POP PUSH1 0x40 PUSH1 0x1F NOT DUP3 ADD SLT ISZERO PUSH2 0x2658 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x20 DUP5 ADD SWAP2 POP PUSH1 0x60 DUP5 ADD CALLDATALOAD PUSH2 0x266D DUP2 PUSH2 0x2138 JUMP JUMPDEST DUP1 SWAP2 POP POP SWAP3 POP SWAP3 POP SWAP3 JUMP JUMPDEST PUSH1 0x0 PUSH1 0xC0 DUP3 ADD SWAP1 POP DUP4 MLOAD DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB PUSH1 0x20 DUP6 ADD MLOAD AND PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x40 DUP5 ADD MLOAD PUSH2 0x26B3 PUSH1 0x40 DUP5 ADD DUP3 DUP1 MLOAD DUP3 MSTORE PUSH1 0x20 SWAP1 DUP2 ADD MLOAD SWAP2 ADD MSTORE JUMP JUMPDEST POP DUP3 MLOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0xA0 DUP4 ADD MSTORE PUSH2 0xA95 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x26DD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x26E8 DUP2 PUSH2 0x2138 JUMP JUMPDEST SWAP2 POP PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH2 0x2421 DUP2 PUSH2 0x2138 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x270A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xA95 DUP4 DUP4 PUSH2 0x225E JUMP JUMPDEST PUSH1 0x1 DUP2 DUP2 SHR SWAP1 DUP3 AND DUP1 PUSH2 0x2728 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 SUB PUSH2 0x218B JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x60 DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x2780 JUMPI PUSH2 0x2780 PUSH2 0x2748 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP1 DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x2780 JUMPI PUSH2 0x2780 PUSH2 0x2748 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1F DUP3 ADD PUSH1 0x1F NOT AND DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR ISZERO PUSH2 0x27D0 JUMPI PUSH2 0x27D0 PUSH2 0x2748 JUMP JUMPDEST PUSH1 0x40 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT ISZERO PUSH2 0x27F1 JUMPI PUSH2 0x27F1 PUSH2 0x2748 JUMP JUMPDEST POP PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP1 DUP5 GT ISZERO PUSH2 0x2819 JUMPI PUSH2 0x2819 PUSH2 0x2748 JUMP JUMPDEST DUP4 PUSH1 0x5 SHL PUSH1 0x20 PUSH2 0x282A DUP2 DUP4 ADD PUSH2 0x27A8 JUMP JUMPDEST DUP7 DUP2 MSTORE SWAP2 DUP6 ADD SWAP2 DUP2 DUP2 ADD SWAP1 CALLDATASIZE DUP5 GT ISZERO PUSH2 0x2842 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP7 JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0x2908 JUMPI DUP1 CALLDATALOAD DUP7 DUP2 GT ISZERO PUSH2 0x285C JUMPI PUSH1 0x0 DUP1 DUP2 REVERT JUMPDEST DUP9 ADD PUSH1 0x60 CALLDATASIZE DUP3 SWAP1 SUB SLT ISZERO PUSH2 0x2870 JUMPI PUSH1 0x0 DUP1 DUP2 REVERT JUMPDEST PUSH2 0x2878 PUSH2 0x275E JUMP JUMPDEST PUSH2 0x2881 DUP3 PUSH2 0x2398 JUMP JUMPDEST DUP2 MSTORE PUSH2 0x288E DUP7 DUP4 ADD PUSH2 0x2443 JUMP JUMPDEST DUP7 DUP3 ADD MSTORE PUSH1 0x40 DUP1 DUP4 ADD CALLDATALOAD DUP10 DUP2 GT ISZERO PUSH2 0x28A6 JUMPI PUSH1 0x0 DUP1 DUP2 REVERT JUMPDEST SWAP3 SWAP1 SWAP3 ADD SWAP2 CALLDATASIZE PUSH1 0x1F DUP5 ADD SLT PUSH2 0x28BB JUMPI PUSH1 0x0 DUP1 DUP2 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH2 0x28CE PUSH2 0x28C9 DUP3 PUSH2 0x27D8 JUMP JUMPDEST PUSH2 0x27A8 JUMP JUMPDEST DUP2 DUP2 MSTORE CALLDATASIZE DUP10 DUP4 DUP8 ADD ADD GT ISZERO PUSH2 0x28E3 JUMPI PUSH1 0x0 DUP1 DUP2 REVERT JUMPDEST DUP2 DUP10 DUP7 ADD DUP11 DUP4 ADD CALLDATACOPY PUSH1 0x0 SWAP2 DUP2 ADD DUP10 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 DUP3 ADD MSTORE DUP5 MSTORE POP SWAP2 DUP4 ADD SWAP2 DUP4 ADD PUSH2 0x2844 JUMP JUMPDEST POP SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP6 DUP6 GT ISZERO PUSH2 0x2924 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 DUP7 GT ISZERO PUSH2 0x2931 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP DUP3 ADD SWAP4 SWAP2 SWAP1 SWAP3 SUB SWAP2 POP JUMP JUMPDEST PUSH1 0x0 DUP5 MLOAD PUSH2 0x2950 DUP2 DUP5 PUSH1 0x20 DUP10 ADD PUSH2 0x20D5 JUMP JUMPDEST DUP3 ADD DUP4 DUP6 DUP3 CALLDATACOPY PUSH1 0x0 SWAP4 ADD SWAP3 DUP4 MSTORE POP SWAP1 SWAP4 SWAP3 POP POP POP JUMP JUMPDEST DUP2 DUP4 MSTORE DUP2 DUP2 PUSH1 0x20 DUP6 ADD CALLDATACOPY POP PUSH1 0x0 DUP3 DUP3 ADD PUSH1 0x20 SWAP1 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x1F SWAP1 SWAP2 ADD PUSH1 0x1F NOT AND SWAP1 SWAP2 ADD ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 PUSH2 0xC46 PUSH1 0x20 DUP4 ADD DUP5 DUP7 PUSH2 0x2966 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 CALLDATALOAD PUSH2 0x13E NOT DUP4 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x29D0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 CALLDATALOAD PUSH1 0x1E NOT DUP5 CALLDATASIZE SUB ADD DUP2 SLT PUSH2 0x29F1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP4 ADD DUP1 CALLDATALOAD SWAP2 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT ISZERO PUSH2 0x2A0B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 ADD SWAP2 POP CALLDATASIZE DUP2 SWAP1 SUB DUP3 SGT ISZERO PUSH2 0x22B1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x1131 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH4 0xFFFFFFFF PUSH2 0x2A43 DUP10 PUSH2 0x2398 JUMP JUMPDEST AND DUP2 MSTORE PUSH1 0x20 DUP9 ADD CALLDATALOAD PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x0 PUSH1 0x40 DUP10 ADD CALLDATALOAD PUSH2 0x2A60 DUP2 PUSH2 0x2A20 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 AND PUSH1 0x40 DUP5 ADD MSTORE POP DUP8 PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0xE0 PUSH1 0x80 DUP4 ADD MSTORE PUSH2 0x2A8B PUSH1 0xE0 DUP4 ADD DUP8 DUP10 PUSH2 0x2966 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0xA0 DUP5 ADD MSTORE DUP3 DUP2 SUB PUSH1 0xC0 DUP5 ADD MSTORE PUSH2 0x2AAD DUP2 DUP6 DUP8 PUSH2 0x2966 JUMP JUMPDEST SWAP11 SWAP10 POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2ACD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x2AE3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD PUSH1 0x1F DUP2 ADD DUP5 SGT PUSH2 0x2AF4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 MLOAD PUSH2 0x2B02 PUSH2 0x28C9 DUP3 PUSH2 0x27D8 JUMP JUMPDEST DUP2 DUP2 MSTORE DUP6 PUSH1 0x20 DUP4 DUP6 ADD ADD GT ISZERO PUSH2 0x2B17 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x16B5 DUP3 PUSH1 0x20 DUP4 ADD PUSH1 0x20 DUP7 ADD PUSH2 0x20D5 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2B3A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0xA95 DUP2 PUSH2 0x2A20 JUMP JUMPDEST PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB DUP6 AND DUP2 MSTORE DUP4 PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0xFFFF DUP4 AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x80 PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x0 PUSH2 0xB0F PUSH1 0x80 DUP4 ADD DUP5 PUSH2 0x20F9 JUMP JUMPDEST PUSH1 0x40 DUP2 MSTORE PUSH1 0x0 PUSH2 0x2B89 PUSH1 0x40 DUP4 ADD DUP6 PUSH2 0x20F9 JUMP JUMPDEST DUP3 DUP2 SUB PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x16B5 DUP2 DUP6 PUSH2 0x20F9 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2BAD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0xA95 DUP2 PUSH2 0x23CD JUMP JUMPDEST PUSH1 0x40 DUP2 MSTORE PUSH4 0xFFFFFFFF DUP4 MLOAD AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x0 PUSH1 0x40 DUP5 ADD MLOAD PUSH1 0xA0 PUSH1 0x80 DUP5 ADD MSTORE PUSH2 0x2BEE PUSH1 0xE0 DUP5 ADD DUP3 PUSH2 0x20F9 JUMP JUMPDEST SWAP1 POP PUSH1 0x60 DUP6 ADD MLOAD PUSH1 0x3F NOT DUP5 DUP4 SUB ADD PUSH1 0xA0 DUP6 ADD MSTORE PUSH2 0x2C0B DUP3 DUP3 PUSH2 0x20F9 JUMP JUMPDEST PUSH1 0x80 SWAP7 SWAP1 SWAP7 ADD MLOAD ISZERO ISZERO PUSH1 0xC0 DUP6 ADD MSTORE POP POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND PUSH1 0x20 SWAP1 SWAP2 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2C43 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2C4B PUSH2 0x2786 JUMP JUMPDEST SWAP1 POP DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x20 DUP3 ADD MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2C73 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xA95 DUP4 DUP4 PUSH2 0x2C31 JUMP JUMPDEST PUSH1 0x1F DUP3 GT ISZERO PUSH2 0x1177 JUMPI PUSH1 0x0 DUP2 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 PUSH1 0x1F DUP6 ADD PUSH1 0x5 SHR DUP2 ADD PUSH1 0x20 DUP7 LT ISZERO PUSH2 0x2CA6 JUMPI POP DUP1 JUMPDEST PUSH1 0x1F DUP6 ADD PUSH1 0x5 SHR DUP3 ADD SWAP2 POP JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x2CC5 JUMPI DUP3 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x2CB2 JUMP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT ISZERO PUSH2 0x2CE6 JUMPI PUSH2 0x2CE6 PUSH2 0x2748 JUMP JUMPDEST PUSH2 0x2CFA DUP2 PUSH2 0x2CF4 DUP5 SLOAD PUSH2 0x2714 JUMP JUMPDEST DUP5 PUSH2 0x2C7D JUMP JUMPDEST PUSH1 0x20 DUP1 PUSH1 0x1F DUP4 GT PUSH1 0x1 DUP2 EQ PUSH2 0x2D2F JUMPI PUSH1 0x0 DUP5 ISZERO PUSH2 0x2D17 JUMPI POP DUP6 DUP4 ADD MLOAD JUMPDEST PUSH1 0x0 NOT PUSH1 0x3 DUP7 SWAP1 SHL SHR NOT AND PUSH1 0x1 DUP6 SWAP1 SHL OR DUP6 SSTORE PUSH2 0x2CC5 JUMP JUMPDEST PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x20 DUP2 KECCAK256 PUSH1 0x1F NOT DUP7 AND SWAP2 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x2D5E JUMPI DUP9 DUP7 ADD MLOAD DUP3 SSTORE SWAP5 DUP5 ADD SWAP5 PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 DUP5 ADD PUSH2 0x2D3F JUMP JUMPDEST POP DUP6 DUP3 LT ISZERO PUSH2 0x2D7C JUMPI DUP8 DUP6 ADD MLOAD PUSH1 0x0 NOT PUSH1 0x3 DUP9 SWAP1 SHL PUSH1 0xF8 AND SHR NOT AND DUP2 SSTORE JUMPDEST POP POP POP POP POP PUSH1 0x1 SWAP1 DUP2 SHL ADD SWAP1 SSTORE POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 ADD DUP2 DUP5 MSTORE DUP1 DUP6 MLOAD DUP1 DUP4 MSTORE PUSH1 0x40 SWAP3 POP PUSH1 0x40 DUP7 ADD SWAP2 POP PUSH1 0x40 DUP2 PUSH1 0x5 SHL DUP8 ADD ADD DUP5 DUP9 ADD PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2E09 JUMPI DUP9 DUP4 SUB PUSH1 0x3F NOT ADD DUP6 MSTORE DUP2 MLOAD DUP1 MLOAD PUSH4 0xFFFFFFFF AND DUP5 MSTORE DUP8 DUP2 ADD MLOAD PUSH2 0xFFFF AND DUP9 DUP6 ADD MSTORE DUP7 ADD MLOAD PUSH1 0x60 DUP8 DUP6 ADD DUP2 SWAP1 MSTORE PUSH2 0x2DF5 DUP2 DUP7 ADD DUP4 PUSH2 0x20F9 JUMP JUMPDEST SWAP7 DUP10 ADD SWAP7 SWAP5 POP POP POP SWAP1 DUP7 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x2DB5 JUMP JUMPDEST POP SWAP1 SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2E29 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2E31 PUSH2 0x2786 JUMP JUMPDEST DUP3 CALLDATALOAD DUP2 MSTORE PUSH1 0x20 DUP4 ADD CALLDATALOAD PUSH1 0x20 DUP3 ADD MSTORE DUP1 SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP3 PUSH2 0x2E7C JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP DIV SWAP1 JUMP JUMPDEST DUP1 DUP3 MUL DUP2 ISZERO DUP3 DUP3 DIV DUP5 EQ OR PUSH2 0x8DF JUMPI PUSH2 0x8DF PUSH2 0x2E49 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH1 0x20 DUP4 LT ISZERO PUSH2 0x8DF JUMPI PUSH1 0x0 NOT PUSH1 0x20 DUP5 SWAP1 SUB PUSH1 0x3 SHL SHL AND SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xC0 SHL SUB NOT DUP2 CALLDATALOAD DUP2 DUP2 AND SWAP2 PUSH1 0x8 DUP6 LT ISZERO PUSH2 0x2EDE JUMPI DUP1 DUP2 DUP7 PUSH1 0x8 SUB PUSH1 0x3 SHL SHL DUP4 AND AND SWAP3 POP JUMPDEST POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB PUSH1 0xC0 SHL DUP6 PUSH1 0xC0 SHL AND DUP2 MSTORE PUSH4 0xFFFFFFFF PUSH1 0xE0 SHL DUP5 PUSH1 0xE0 SHL AND PUSH1 0x8 DUP3 ADD MSTORE DUP3 PUSH1 0xC DUP3 ADD MSTORE PUSH1 0x0 DUP3 MLOAD PUSH2 0x2F25 DUP2 PUSH1 0x2C DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x20D5 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD PUSH1 0x2C ADD SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST DUP1 DUP3 ADD DUP1 DUP3 GT ISZERO PUSH2 0x8DF JUMPI PUSH2 0x8DF PUSH2 0x2E49 JUMP JUMPDEST DUP5 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB PUSH1 0xC0 SHL DUP5 PUSH1 0xC0 SHL AND PUSH1 0x20 DUP3 ADD MSTORE DUP3 PUSH1 0x28 DUP3 ADD MSTORE PUSH1 0x0 DUP3 MLOAD PUSH2 0x2F7B DUP2 PUSH1 0x48 DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0x20D5 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD PUSH1 0x48 ADD SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x80 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2F9D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x2FA5 PUSH2 0x275E JUMP JUMPDEST DUP3 MLOAD DUP2 MSTORE PUSH1 0x20 DUP4 ADD MLOAD PUSH2 0x2FB7 DUP2 PUSH2 0x2A20 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x2FC9 DUP5 PUSH1 0x40 DUP6 ADD PUSH2 0x2C31 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x2FE7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH2 0xA95 DUP2 PUSH2 0x2138 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH5 0x5FBF12560A PUSH23 0x99955D058D106F0E740AD9CBC14EE055C7FE136365795A 0x23 0xDE PUSH5 0x736F6C6343 STOP ADDMOD AND STOP CALLER ", - "sourceMap": "155:311:42:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1779:89:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3998:186;;;;;;;;;;-1:-1:-1;3998:186:33;;;;;:::i;:::-;;:::i;:::-;;;1391:14:43;;1384:22;1366:41;;1354:2;1339:18;3998:186:33;1226:187:43;5102:1258:24;;;;;;;;;;-1:-1:-1;5102:1258:24;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;2256:27::-;;;;;;;;;;-1:-1:-1;2256:27:24;;;;-1:-1:-1;;;;;2256:27:24;;;;;;-1:-1:-1;;;;;3605:32:43;;;3587:51;;3575:2;3560:18;2256:27:24;3441:203:43;4368:708:12;;;;;;:::i;:::-;;:::i;:::-;;2130:40:24;;;;;;;;;;;;2169:1;2130:40;;;;;5385:6:43;5373:19;;;5355:38;;5343:2;5328:18;2130:40:24;5211:188:43;3401:140:24;;;;;;;;;;-1:-1:-1;3401:140:24;;;-1:-1:-1;;;5574:52:43;;3532:1:24;5657:2:43;5642:18;;5635:59;5547:18;3401:140:24;5404:296:43;1287:235:10;;;;;;;;;;-1:-1:-1;1287:235:10;;;843:1:13;5912:34:43;;678:1:12;5977:2:43;5962:18;;5955:43;5848:18;1287:235:10;5705:299:43;2849:97:33;;;;;;;;;;-1:-1:-1;2927:12:33;;2849:97;;;6155:25:43;;;6143:2;6128:18;2849:97:33;6009:177:43;2093:31:24;;;;;;;;;;;;2123:1;2093:31;;4776:244:33;;;;;;;;;;-1:-1:-1;4776:244:33;;;;;:::i;:::-;;:::i;2707:82::-;;;;;;;;;;-1:-1:-1;2780:2:33;2707:82;;;6824:4:43;6812:17;;;6794:36;;6782:2;6767:18;2707:82:33;6652:184:43;1724:108:11;;;;;;;;;;-1:-1:-1;1724:108:11;;;;;:::i;:::-;;:::i;6811:774:24:-;;;;;;;;;;-1:-1:-1;6811:774:24;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;377:87:42:-;;;;;;;;;;-1:-1:-1;377:87:42;;;;;:::i;:::-;;:::i;875:93:19:-;;;;;;;;;;-1:-1:-1;956:4:19;875:93;;538::18;;;;;;;;;;-1:-1:-1;538:93:18;;;;;:::i;:::-;;:::i;16059:132:24:-;;;;;;;;;;-1:-1:-1;16059:132:24;;;;;:::i;:::-;16164:11;;;;;16141:4;16164:11;;;:5;:11;;;;;;:20;;16059:132;446:46:11;;;;;;;;;;;;;;;4583:163:24;;;;;;;;;;-1:-1:-1;4583:163:24;;;;;:::i;:::-;;:::i;3004:116:33:-;;;;;;;;;;-1:-1:-1;3004:116:33;;;;;:::i;:::-;-1:-1:-1;;;;;3095:18:33;3069:7;3095:18;;;:9;:18;;;;;;;3004:116;2293:101:28;;;;;;;;;;;;;:::i;3507:128:12:-;;;;;;;;;;-1:-1:-1;3507:128:12;;;;;:::i;:::-;3596:12;3507:128;;;;;;;;-1:-1:-1;;;;;9439:31:43;;;9421:50;;9409:2;9394:18;3507:128:12;9277:200:43;2013:216:12;;;;;;;;;;-1:-1:-1;2013:216:12;;;;;:::i;:::-;;:::i;4148:87:24:-;;;;;;;;;;-1:-1:-1;4227:1:24;4148:87;;1638:85:28;;;;;;;;;;-1:-1:-1;1684:7:28;1710:6;-1:-1:-1;;;;;1710:6:28;1638:85;;1981:93:33;;;;;;;;;;;;;:::i;1787:46:24:-;;;;;;;;;;;;;;;1460:94:23;;;;;;;;;;-1:-1:-1;1519:4:23;1460:94;;3315:178:33;;;;;;;;;;-1:-1:-1;3315:178:33;;;;;:::i;:::-;;:::i;559:23:19:-;;;;;;;;;;-1:-1:-1;559:23:19;;;;-1:-1:-1;;;;;559:23:19;;;1391:156:18;;;;;;;;;;-1:-1:-1;1391:156:18;;;;;:::i;:::-;;:::i;569:48:11:-;;;;;;;;;;-1:-1:-1;569:48:11;;;;;:::i;:::-;;;;;;;;;;;;;;3510:981:18;;;;;;;;;;-1:-1:-1;3510:981:18;;;;;:::i;:::-;;:::i;1698:1333:19:-;;;;;;:::i;:::-;;:::i;8273:290:24:-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;3252:105:11:-;;;;;;;;;;-1:-1:-1;3252:105:11;;;;;:::i;:::-;;:::i;3679:409:19:-;;;;;;:::i;:::-;;:::i;1100:139::-;;;;;;;;;;-1:-1:-1;1100:139:19;;;;;:::i;:::-;;:::i;3551:140:33:-;;;;;;;;;;-1:-1:-1;3551:140:33;;;;;:::i;:::-;-1:-1:-1;;;;;3657:18:33;;;3631:7;3657:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;3551:140;2543:215:28;;;;;;;;;;-1:-1:-1;2543:215:28;;;;;:::i;:::-;;:::i;2771:149:12:-;;;;;;;;;;-1:-1:-1;2771:149:12;;;;;:::i;:::-;;:::i;1779:89:33:-;1824:13;1856:5;1849:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1779:89;:::o;3998:186::-;4071:4;735:10:38;4125:31:33;735:10:38;4141:7:33;4150:5;4125:8;:31::i;:::-;4173:4;4166:11;;;3998:186;;;;;:::o;5102:1258:24:-;-1:-1:-1;;;;;;;;;;;;;;;;;5254:35:24;5291:28;-1:-1:-1;;;;;;;;;;;;;;;;;;;5291:28:24;5509:34;;;;;;;;-1:-1:-1;5509:34:24;;;-1:-1:-1;;;;;5509:34:24;;;;;;;5660:21;;;;;;;;;;;5509:34;;-1:-1:-1;;;5660:21:24;;;-1:-1:-1;;;;;;;;;;;;;;;;;5660:21:24;;;;;;;;;;;;;;;-1:-1:-1;5644:37:24;-1:-1:-1;6118:20:24;;6168:120;6192:19;;;;6225:22;;;;6261:17;;;;6192:10;6261:17;:::i;:::-;6168:10;:120::i;:::-;6311:42;;;;;;;;;;;;;;;;5102:1258;;;;-1:-1:-1;;;;;;5102:1258:24:o;4368:708:12:-;4681:8;-1:-1:-1;;;;;4673:31:12;4694:10;4673:31;4669:68;;4713:24;;-1:-1:-1;;;4713:24:12;;4726:10;4713:24;;;3587:51:43;3560:18;;4713:24:12;;;;;;;;4669:68;4873:14;;;;;;4837:32;;4854:14;;4873:7;4854:14;:::i;:::-;4837:16;:32::i;:::-;:50;4833:103;;4905:14;;;;:7;:14;:::i;:::-;4896:40;;-1:-1:-1;;;4896:40:12;;15121:10:43;15109:23;;;4896:40:12;;;15091:42:43;4921:14:12;;;;15149:18:43;;;15142:34;15064:18;;4896:40:12;14919:263:43;4833:103:12;5010:59;5021:7;5030:5;5037:8;;5047:9;5058:10;;5010;:59::i;:::-;4368:708;;;;;;;:::o;4776:244:33:-;4863:4;735:10:38;4919:37:33;4935:4;735:10:38;4950:5:33;4919:15;:37::i;:::-;4966:26;4976:4;4982:2;4986:5;4966:9;:26::i;:::-;5009:4;5002:11;;;4776:244;;;;;;:::o;1724:108:11:-;1531:13:28;:11;:13::i;:::-;1804:21:11::1;1813:4;1819:5;1804:8;:21::i;:::-;1724:108:::0;;:::o;6811:774:24:-;-1:-1:-1;;;;;;;;;;;;;;;;;7145:24:24;7173:74;7184:19;;;;7205:22;;;;7229:17;;;;7184:10;7229:17;:::i;7173:74::-;7142:105;;;7336:20;7358;7382:49;7402:10;7414:16;7382:19;:49::i;:::-;7335:96;;-1:-1:-1;7335:96:24;-1:-1:-1;7520:58:24;7527:17;;;;:10;:17;:::i;:::-;7546:7;7555;7564:13;7520:6;:58::i;:::-;7513:65;6811:774;-1:-1:-1;;;;;;6811:774:24:o;377:87:42:-;438:19;444:3;449:7;438:5;:19::i;538:93:18:-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;4583:163:24:-;1531:13:28;:11;:13::i;:::-;4666:12:24::1;:28:::0;;-1:-1:-1;;;;;;4666:28:24::1;-1:-1:-1::0;;;;;4666:28:24;::::1;::::0;;::::1;::::0;;;4709:30:::1;::::0;3587:51:43;;;4709:30:24::1;::::0;3575:2:43;3560:18;4709:30:24::1;;;;;;;;4583:163:::0;:::o;2293:101:28:-;1531:13;:11;:13::i;:::-;2357:30:::1;2384:1;2357:18;:30::i;:::-;2293:101::o:0;2013:216:12:-;-1:-1:-1;;;;;2198:24:12;;2217:4;2198:24;2013:216;;;;;;;:::o;1981:93:33:-;2028:13;2060:7;2053:14;;;;;:::i;3315:178::-;3384:4;735:10:38;3438:27:33;735:10:38;3455:2:33;3459:5;3438:9;:27::i;1391:156:18:-;1531:13:28;:11;:13::i;:::-;1503:37:18::1;;1523:16:::0;;1503:37:::1;:::i;:::-;:19;:37::i;3510:981::-:0;3701:21;;;3677;3701;;;:15;:21;;;;;;;;:31;;;;;;;;;;3677:55;;3653:12;;3677:21;3701:31;3677:55;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3861:8;:15;3880:1;3861:20;3857:46;;3890:13;;3883:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3883:20:18;;-1:-1:-1;3883:20:18;;-1:-1:-1;;;;3883:20:18;3857:46;3988:1;3964:25;;;3960:46;;3998:8;-1:-1:-1;3991:15:18;;3960:46;4153:1;4129:25;;4125:267;;4170:34;4190:13;;4170:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4170:19:18;;-1:-1:-1;;;4170:34:18:i;:::-;4353:8;4363:17;:13;4377:1;4363:13;;:17;:::i;:::-;4340:41;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;4333:48;;;;;4125:267;4470:13;;4455:29;;-1:-1:-1;;;4455:29:18;;;;;;;;;:::i;1698:1333:19:-;1799:9;1794:1037;1814:19;;;1794:1037;;;1854:29;1886:8;;1895:1;1886:11;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;1854:43;-1:-1:-1;1980:50:19;1987:20;;;;1854:43;1987:20;:::i;:::-;2009;;;;16164:11:24;;;;;16141:4;16164:11;;;:5;:11;;;;;;:20;;16059:132;1980:50:19;1975:65;;2032:8;;;1975:65;2602:4;:22;2633:12;;;;:6;2696:11;;;;2725:14;;;;2633:6;2725:14;:::i;:::-;2757:15;;;;;;;;:::i;:::-;2790:16;;;;:6;:16;:::i;:::-;2602:218;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1840:991;1794:1037;1835:3;;1794:1037;;;;2988:10;-1:-1:-1;;;;;2978:43:19;;:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2978:45:19;;;;;;;;;;;;:::i;:::-;2961:63;;-1:-1:-1;;;2961:63:19;;;;;;;;:::i;8273:290:24:-;8434:34;;:::i;:::-;-1:-1:-1;;;;;;;;;;;;;;;;;8517:39:24;8523:10;8535:4;8541:14;8517:5;:39::i;:::-;8510:46;;;;8273:290;;;;;;;:::o;3252:105:11:-;1531:13:28;:11;:13::i;:::-;3319:31:11::1;::::0;-1:-1:-1;;;3319:31:11;;-1:-1:-1;;;;;3605:32:43;;;3319:31:11::1;::::0;::::1;3587:51:43::0;3319:8:11::1;:20;::::0;::::1;::::0;3560:18:43;;3319:31:11::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;3252:105:::0;:::o;3679:409:19:-;3958:10;3980:4;3958:27;3954:50;;3994:10;;-1:-1:-1;;;3994:10:19;;;;;;;;;;;3954:50;4014:67;4033:7;4042:5;4049:8;;4059:9;4070:10;;4014:18;:67::i;1100:139::-;1531:13:28;:11;:13::i;:::-;1175:8:19::1;:20:::0;;-1:-1:-1;;;;;;1175:20:19::1;-1:-1:-1::0;;;;;1175:20:19;::::1;::::0;;::::1;::::0;;;1210:22:::1;::::0;3587:51:43;;;1210:22:19::1;::::0;3575:2:43;3560:18;1210:22:19::1;3441:203:43::0;2543:215:28;1531:13;:11;:13::i;:::-;-1:-1:-1;;;;;2627:22:28;::::1;2623:91;;2672:31;::::0;-1:-1:-1;;;2672:31:28;;2700:1:::1;2672:31;::::0;::::1;3587:51:43::0;3560:18;;2672:31:28::1;3441:203:43::0;2623:91:28::1;2723:28;2742:8;2723:18;:28::i;:::-;2543:215:::0;:::o;2771:149:12:-;2853:4;2900:13;;;;;;2876:5;;2853:4;;2882:13;;2900:6;2882:13;:::i;:::-;2876:20;;;;;;;;;;;;;-1:-1:-1;2876:20:12;;:37;;2771:149;-1:-1:-1;;2771:149:12:o;8726:128:33:-;8810:37;8819:5;8826:7;8835:5;8842:4;8810:8;:37::i;:::-;8726:128;;;:::o;18076:668:24:-;18218:20;18240:24;18414:22;18426:9;18414:11;:22::i;:::-;18399:37;;18562:12;18543:31;;18644:12;18625:16;:31;18621:117;;;18679:48;;-1:-1:-1;;;18679:48:24;;;;;22584:25:43;;;22625:18;;;22618:34;;;22557:18;;18679:48:24;22410:248:43;2718:196:11;2822:11;;;2788:7;2822:11;;;:5;:11;;;;;;;2843:43;;2874:12;;-1:-1:-1;;;2874:12:11;;22837:10:43;22825:23;;2874:12:11;;;22807:42:43;22780:18;;2874:12:11;22663:192:43;12852:1806:24;13329:17;13349:36;:17;:8;;:15;:17::i;:::-;2891:2:27;2780:123;13349:36:24;13329:56;;13518:24;13545:62;13553:9;13564:26;13570:19;:8;;:17;:19::i;:::-;13564:5;:26::i;:::-;13592:14;;;;:7;:14;:::i;:::-;13545:7;:62::i;:::-;13518:89;-1:-1:-1;243:2:27;-1:-1:-1;;13618:955:24;;;13722:23;13748:175;13791:13;;;;;;;;:::i;:::-;13822:14;;;;:7;:14;:::i;:::-;13854:16;13888:21;:8;;:19;:21::i;:::-;13748:25;:175::i;:::-;14470:92;;-1:-1:-1;;;14470:92:24;;13722:201;;-1:-1:-1;;;;;;14470:8:24;:20;;;;:92;;14491:9;;14502:5;;14509:1;;13722:201;;14470:92;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13645:928;13618:955;-1:-1:-1;;;;;14588:63:24;;14600:5;14588:63;14607:14;;;;:7;:14;:::i;:::-;14588:63;;;15121:10:43;15109:23;;;15091:42;;15164:2;15149:18;;15142:34;;;15064:18;14588:63:24;;;;;;;13155:1503;;12852:1806;;;;;;;:::o;10415:477:33:-;-1:-1:-1;;;;;3657:18:33;;;10514:24;3657:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;-1:-1:-1;;10580:37:33;;10576:310;;10656:5;10637:16;:24;10633:130;;;10688:60;;-1:-1:-1;;;10688:60:33;;-1:-1:-1;;;;;24082:32:43;;10688:60:33;;;24064:51:43;24131:18;;;24124:34;;;24174:18;;;24167:34;;;24037:18;;10688:60:33;23862:345:43;10633:130:33;10804:57;10813:5;10820:7;10848:5;10829:16;:24;10855:5;10804:8;:57::i;:::-;10504:388;10415:477;;;:::o;5393:300::-;-1:-1:-1;;;;;5476:18:33;;5472:86;;5517:30;;-1:-1:-1;;;5517:30:33;;5544:1;5517:30;;;3587:51:43;3560:18;;5517:30:33;3441:203:43;5472:86:33;-1:-1:-1;;;;;5571:16:33;;5567:86;;5610:32;;-1:-1:-1;;;5610:32:33;;5639:1;5610:32;;;3587:51:43;3560:18;;5610:32:33;3441:203:43;5567:86:33;5662:24;5670:4;5676:2;5680:5;5662:7;:24::i;1796:162:28:-;1684:7;1710:6;-1:-1:-1;;;;;1710:6:28;735:10:38;1855:23:28;1851:101;;1901:40;;-1:-1:-1;;;1901:40:28;;735:10:38;1901:40:28;;;3587:51:43;3560:18;;1901:40:28;3441:203:43;2286:134:11;2359:11;;;;;;;:5;:11;;;;;;;;;:19;;;2393:20;;15091:42:43;;;15149:18;;15142:34;;;2393:20:11;;15064:18:43;2393:20:11;;;;;;;2286:134;;:::o;10898:1436:24:-;11030:20;11052;11084:15;11255:324;11287:10;:13;;;11314:16;11320:9;11314:5;:16::i;:::-;11548:21;;;;:10;:21;:::i;:::-;11255:324;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11255:18:24;;-1:-1:-1;;;11255:324:24:i;:::-;11231:348;;-1:-1:-1;11231:348:24;-1:-1:-1;11659:14:24;11231:348;11676:33;;2123:1;11676:33;;;2169:1;11676:33;11659:50;-1:-1:-1;11831:67:24;11846:17;;;;:10;:17;:::i;:::-;11865:7;11874:23;;;;:10;:23;:::i;11831:67::-;12156:12;;11821:77;;-1:-1:-1;;;;;;12156:12:24;12248:23;;12244:83;;12273:54;;-1:-1:-1;;;12273:54:24;;-1:-1:-1;;;;;12273:36:24;;;;;:54;;12310:7;;12319;;12273:54;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;12244:83;11074:1260;;;10898:1436;;;;;:::o;2038:391:13:-;-1:-1:-1;;;;;;;;;;;;;;;;;2259:8:13;-1:-1:-1;;;;;2259:14:13;;2291:86;;;;;;;;2307:7;2291:86;;;;;;2316:25;2333:7;2316:16;:25::i;:::-;2291:86;;;;2343:8;2291:86;;;;2353:8;2291:86;;;;2363:13;2291:86;;;;;2403:4;2259:163;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2240:182;2038:391;-1:-1:-1;;;;;2038:391:13:o;7458:208:33:-;-1:-1:-1;;;;;7528:21:33;;7524:91;;7572:32;;-1:-1:-1;;;7572:32:33;;7601:1;7572:32;;;3587:51:43;3560:18;;7572:32:33;3441:203:43;7524:91:33;7624:35;7640:1;7644:7;7653:5;7624:7;:35::i;2912:187:28:-;2985:16;3004:6;;-1:-1:-1;;;;;3020:17:28;;;-1:-1:-1;;;;;;3020:17:28;;;;;;3052:40;;3004:6;;;;;;;3052:40;;2985:16;3052:40;2975:124;2912:187;:::o;2237:514:18:-;2345:9;2340:354;2364:16;:23;2360:1;:27;2340:354;;;2522:48;2542:16;2559:1;2542:19;;;;;;;;:::i;:::-;;;;;;;:27;;;2522:19;:48::i;:::-;2656:16;2673:1;2656:19;;;;;;;;:::i;:::-;;;;;;;:27;;;2584:15;:40;2600:16;2617:1;2600:19;;;;;;;;:::i;:::-;;;;;;;:23;;;2584:40;;;;;;;;;;;;;;;:69;2625:16;2642:1;2625:19;;;;;;;;:::i;:::-;;;;;;;:27;;;2584:69;;;;;;;;;;;;;;;:99;;;;;;:::i;:::-;-1:-1:-1;2389:3:18;;2340:354;;;;2709:35;2727:16;2709:35;;;;;;:::i;4631:264::-;4801:1;4787:16;;4781:23;4827:28;;;463:1;4827:28;4823:65;;4879:8;4864:24;;-1:-1:-1;;;4864:24:18;;;;;;;;:::i;9271:1333:24:-;9425:34;;:::i;:::-;-1:-1:-1;;;;;;;;;;;;;;;;;9823:20:24;;9873:140;9893:10;9917:19;;;;9950:22;;;;9986:17;;;;9917:10;9986:17;:::i;:::-;9873:6;:140::i;:::-;9822:191;;;;10102:20;10124;10148:49;10168:10;10180:16;10148:19;:49::i;:::-;10101:96;;-1:-1:-1;10101:96:24;-1:-1:-1;10320:66:24;10328:17;;;;:10;:17;:::i;:::-;10347:7;10356;10320:66;;;;;;;10365:4;10320:66;:::i;:::-;10371:14;10320:7;:66::i;:::-;10452:42;;;;;;;;;;;;;;;;;;;10518:15;;10307:79;;-1:-1:-1;10452:42:24;;-1:-1:-1;10554:10:24;;10518:15;10510:87;;10535:17;;;;:10;:17;:::i;:::-;10510:87;;;30228:10:43;30216:23;;;30198:42;;30271:2;30256:18;;30249:34;;;30299:18;;30292:34;;;30186:2;30171:18;10510:87:24;;;;;;;9491:1113;;;;9271:1333;;;;;;:::o;9701:432:33:-;-1:-1:-1;;;;;9813:19:33;;9809:89;;9855:32;;-1:-1:-1;;;9855:32:33;;9884:1;9855:32;;;3587:51:43;3560:18;;9855:32:33;3441:203:43;9809:89:33;-1:-1:-1;;;;;9911:21:33;;9907:90;;9955:31;;-1:-1:-1;;;9955:31:33;;9983:1;9955:31;;;3587:51:43;3560:18;;9955:31:33;3441:203:43;9907:90:33;-1:-1:-1;;;;;10006:18:33;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;:35;;;10051:76;;;;10101:7;-1:-1:-1;;;;;10085:31:33;10094:5;-1:-1:-1;;;;;10085:31:33;;10110:5;10085:31;;;;6155:25:43;;6143:2;6128:18;;6009:177;10085:31:33;;;;;;;;9701:432;;;;:::o;16585:172:24:-;16656:16;16729:21;16692:33;16729:21;16692:9;:33;:::i;:::-;16691:59;;;;:::i;1573:123:27:-;1633:7;1667:21;188:2;1633:7;1667:4;;:21;:::i;:::-;1659:30;;;:::i;1874:152::-;1936:6;1975:42;243:2;188;1975:4;;:42;:::i;:::-;1968:50;;;:::i;:::-;1961:58;;;1874:152;-1:-1:-1;;;1874:152:27:o;16981:139:24:-;17045:16;17080:33;17092:21;-1:-1:-1;;;;;17080:33:24;;;:::i;2939:462:23:-;3073:24;-1:-1:-1;;;;;3113:19:23;;3109:46;;3148:6;3134:21;;3109:46;3251:21;3257:3;3262:9;3251:5;:21::i;:::-;-1:-1:-1;3385:9:23;;2939:462;-1:-1:-1;;2939:462:23:o;2186:130:27:-;2250:12;2281:28;:4;243:2;2281:4;;:28;:::i;:::-;2274:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2274:35:27;;2186:130;-1:-1:-1;;;;;;2186:130:27:o;640:284:26:-;824:17;877:6;885:7;894:9;905:11;860:57;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;853:64;;640:284;;;;;;:::o;6008:1107:33:-;-1:-1:-1;;;;;6097:18:33;;6093:540;;6249:5;6233:12;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;6093:540:33;;-1:-1:-1;6093:540:33;;-1:-1:-1;;;;;6307:15:33;;6285:19;6307:15;;;:9;:15;;;;;;6340:19;;;6336:115;;;6386:50;;-1:-1:-1;;;6386:50:33;;-1:-1:-1;;;;;24082:32:43;;6386:50:33;;;24064:51:43;24131:18;;;24124:34;;;24174:18;;;24167:34;;;24037:18;;6386:50:33;23862:345:43;6336:115:33;-1:-1:-1;;;;;6571:15:33;;;;;;:9;:15;;;;;6589:19;;;;6571:37;;6093:540;-1:-1:-1;;;;;6647:16:33;;6643:425;;6810:12;:21;;;;;;;6643:425;;;-1:-1:-1;;;;;7021:13:33;;;;;;:9;:13;;;;;:22;;;;;;6643:425;7098:2;-1:-1:-1;;;;;7083:25:33;7092:4;-1:-1:-1;;;;;7083:25:33;;7102:5;7083:25;;;;6155::43;;6143:2;6128:18;;6009:177;7083:25:33;;;;;;;;6008:1107;;;:::o;17344:147:24:-;17409:15;17450:33;17462:21;17450:9;:33;:::i;598:506:27:-;791:18;;732:17;;791:22;;;934:163;;1074:7;1083:13;1057:40;;;;;;;;32318:19:43;;;32393:3;32371:16;-1:-1:-1;;;;;;32367:51:43;32362:2;32353:12;;32346:73;32444:2;32435:12;;32163:290;1057:40:27;;;;;;;;;;;;;934:163;;;976:7;985:13;1017:10;1030:11;959:83;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;934:163;927:170;;598:506;;;;;;:::o;2037:567:23:-;2198:20;2220:24;2291:44;2302:9;2313:12;2327:7;2291:10;:44::i;:::-;2256:79;;-1:-1:-1;2256:79:23;-1:-1:-1;2571:26:23;2577:5;2256:79;2571:5;:26::i;:::-;2037:567;;;;;;;:::o;3188:766:13:-;3389:31;;:::i;:::-;3554:20;3577:26;3588:4;:14;;;3577:10;:26::i;:::-;3617:15;;;;3554:49;;-1:-1:-1;3617:19:13;3613:53;;3638:28;3650:4;:15;;;3638:11;:28::i;:::-;3755:8;-1:-1:-1;;;;;3755:13:13;;3777:12;3809:92;;;;;;;;3825:7;3809:92;;;;;;3834:25;3851:7;3834:16;:25::i;:::-;3809:92;;;;3861:8;3809:92;;;;3871:8;3809:92;;;;3899:1;3881:4;:15;;;:19;3809:92;;;;;3919:14;3755:192;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3677:270;3188:766;-1:-1:-1;;;;;;;3188:766:13:o;7984:206:33:-;-1:-1:-1;;;;;8054:21:33;;8050:89;;8098:30;;-1:-1:-1;;;8098:30:33;;8125:1;8098:30;;;3587:51:43;3560:18;;8098:30:33;3441:203:43;8050:89:33;8148:35;8156:7;8173:1;8177:5;8148:7;:35::i;4650:191:13:-;4716:17;4762:10;4749:9;:23;4745:62;;4781:26;;-1:-1:-1;;;4781:26:13;;4797:9;4781:26;;;6155:25:43;6128:18;;4781:26:13;6009:177:43;4745:62:13;-1:-1:-1;4824:10:13;4650:191::o;5218:410::-;5371:15;5389:8;-1:-1:-1;;;;;5389:16:13;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5371:36;-1:-1:-1;;;;;;5421:21:13;;5417:54;;5451:20;;-1:-1:-1;;;5451:20:13;;;;;;;;;;;5417:54;1797:53:36;;;5578:10:13;1797:53:36;;;34019:34:43;;;5598:8:13;-1:-1:-1;;;;;34089:15:43;;;34069:18;;;34062:43;34121:18;;;;34114:34;;;1797:53:36;;;;;;;;;;33954:18:43;;;;1797:53:36;;;;;;;;;-1:-1:-1;;;;;1797:53:36;-1:-1:-1;;;1797:53:36;;;7968:11;;5545:76:13;;:32;;;5609:11;;1770:81:36;;5545:32:13;;-1:-1:-1;;;;1797:53:36;;-1:-1:-1;;;5545:32:13;7934:5:36;7929:60;8041:7;8031:176;;8085:4;8079:11;8130:16;8127:1;8122:3;8107:40;8176:16;8171:3;8164:29;8031:176;-1:-1:-1;;8284:1:36;8278:8;8234:16;;-1:-1:-1;8310:15:36;;:68;;8362:11;8377:1;8362:16;;8310:68;;;-1:-1:-1;;;;;8328:26:36;;;:31;8310:68;8306:146;;;8401:40;;-1:-1:-1;;;8401:40:36;;-1:-1:-1;;;;;3605:32:43;;8401:40:36;;;3587:51:43;3560:18;;8401:40:36;3441:203:43;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:250:43:-;99:1;109:113;123:6;120:1;117:13;109:113;;;199:11;;;193:18;180:11;;;173:39;145:2;138:10;109:113;;;-1:-1:-1;;256:1:43;238:16;;231:27;14:250::o;269:271::-;311:3;349:5;343:12;376:6;371:3;364:19;392:76;461:6;454:4;449:3;445:14;438:4;431:5;427:16;392:76;:::i;:::-;522:2;501:15;-1:-1:-1;;497:29:43;488:39;;;;529:4;484:50;;269:271;-1:-1:-1;;269:271:43:o;545:220::-;694:2;683:9;676:21;657:4;714:45;755:2;744:9;740:18;732:6;714:45;:::i;770:131::-;-1:-1:-1;;;;;845:31:43;;835:42;;825:70;;891:1;888;881:12;906:315;974:6;982;1035:2;1023:9;1014:7;1010:23;1006:32;1003:52;;;1051:1;1048;1041:12;1003:52;1090:9;1077:23;1109:31;1134:5;1109:31;:::i;:::-;1159:5;1211:2;1196:18;;;;1183:32;;-1:-1:-1;;;906:315:43:o;1418:158::-;1480:5;1525:3;1516:6;1511:3;1507:16;1503:26;1500:46;;;1542:1;1539;1532:12;1500:46;-1:-1:-1;1564:6:43;1418:158;-1:-1:-1;1418:158:43:o;1581:360::-;1669:6;1722:2;1710:9;1701:7;1697:23;1693:32;1690:52;;;1738:1;1735;1728:12;1690:52;1778:9;1765:23;-1:-1:-1;;;;;1803:6:43;1800:30;1797:50;;;1843:1;1840;1833:12;1797:50;1866:69;1927:7;1918:6;1907:9;1903:22;1866:69;:::i;2100:1336::-;2020:12;;2008:25;;2082:4;2071:16;;;2065:23;2049:14;;;2042:47;2466:4;2514:3;2499:19;;2591:2;2629:3;2624:2;2613:9;2609:18;2602:31;2653:6;2688;2682:13;2719:6;2711;2704:22;2757:3;2746:9;2742:19;2735:26;;2820:3;2810:6;2807:1;2803:14;2792:9;2788:30;2784:40;2770:54;;2843:4;2882;2874:6;2870:17;2905:1;2915:429;2929:6;2926:1;2923:13;2915:429;;;2994:22;;;-1:-1:-1;;2990:37:43;2978:50;;3051:13;;3092:9;;3077:25;;3141:11;;3135:18;3173:15;;;3166:27;;;3216:48;3248:15;;;3135:18;3216:48;:::i;:::-;3206:58;-1:-1:-1;;3322:12:43;;;;3287:15;;;;2951:1;2944:9;2915:429;;;-1:-1:-1;;2020:12:43;;3426:2;3411:18;;2008:25;-1:-1:-1;;;2082:4:43;2071:16;;2065:23;2049:14;;;2042:47;-1:-1:-1;3361:6:43;-1:-1:-1;3376:54:43;1946:149;3649:154;3708:5;3753:2;3744:6;3739:3;3735:16;3731:25;3728:45;;;3769:1;3766;3759:12;3808:347;3859:8;3869:6;3923:3;3916:4;3908:6;3904:17;3900:27;3890:55;;3941:1;3938;3931:12;3890:55;-1:-1:-1;3964:20:43;;-1:-1:-1;;;;;3996:30:43;;3993:50;;;4039:1;4036;4029:12;3993:50;4076:4;4068:6;4064:17;4052:29;;4128:3;4121:4;4112:6;4104;4100:19;4096:30;4093:39;4090:59;;;4145:1;4142;4135:12;4090:59;3808:347;;;;;:::o;4160:1046::-;4301:6;4309;4317;4325;4333;4341;4349;4402:3;4390:9;4381:7;4377:23;4373:33;4370:53;;;4419:1;4416;4409:12;4370:53;4442;4487:7;4476:9;4442:53;:::i;:::-;4432:63;;4542:2;4531:9;4527:18;4514:32;4504:42;;4597:3;4586:9;4582:19;4569:33;-1:-1:-1;;;;;4662:2:43;4654:6;4651:14;4648:34;;;4678:1;4675;4668:12;4648:34;4717:58;4767:7;4758:6;4747:9;4743:22;4717:58;:::i;:::-;4794:8;;-1:-1:-1;4691:84:43;-1:-1:-1;4879:3:43;4864:19;;4851:33;;-1:-1:-1;4893:31:43;4851:33;4893:31;:::i;:::-;4943:5;;-1:-1:-1;5001:3:43;4986:19;;4973:33;;5018:16;;;5015:36;;;5047:1;5044;5037:12;5015:36;;5086:60;5138:7;5127:8;5116:9;5112:24;5086:60;:::i;:::-;4160:1046;;;;-1:-1:-1;4160:1046:43;;-1:-1:-1;4160:1046:43;;;;5060:86;;-1:-1:-1;;;4160:1046:43:o;6191:456::-;6268:6;6276;6284;6337:2;6325:9;6316:7;6312:23;6308:32;6305:52;;;6353:1;6350;6343:12;6305:52;6392:9;6379:23;6411:31;6436:5;6411:31;:::i;:::-;6461:5;-1:-1:-1;6518:2:43;6503:18;;6490:32;6531:33;6490:32;6531:33;:::i;:::-;6191:456;;6583:7;;-1:-1:-1;;;6637:2:43;6622:18;;;;6609:32;;6191:456::o;6841:163::-;6908:20;;6968:10;6957:22;;6947:33;;6937:61;;6994:1;6991;6984:12;6937:61;6841:163;;;:::o;7009:252::-;7076:6;7084;7137:2;7125:9;7116:7;7112:23;7108:32;7105:52;;;7153:1;7150;7143:12;7105:52;7176:28;7194:9;7176:28;:::i;7266:118::-;7352:5;7345:13;7338:21;7331:5;7328:32;7318:60;;7374:1;7371;7364:12;7389:489;7483:6;7491;7544:2;7532:9;7523:7;7519:23;7515:32;7512:52;;;7560:1;7557;7550:12;7512:52;7600:9;7587:23;-1:-1:-1;;;;;7625:6:43;7622:30;7619:50;;;7665:1;7662;7655:12;7619:50;7688:69;7749:7;7740:6;7729:9;7725:22;7688:69;:::i;:::-;7678:79;;;7807:2;7796:9;7792:18;7779:32;7820:28;7842:5;7820:28;:::i;:::-;7867:5;7857:15;;;7389:489;;;;;:::o;7883:253::-;2020:12;;2008:25;;2082:4;2071:16;;;2065:23;2049:14;;;2042:47;8073:2;8058:18;;8085:45;1946:149;8141:159;8208:20;;8268:6;8257:18;;8247:29;;8237:57;;8290:1;8287;8280:12;8305:256;8371:6;8379;8432:2;8420:9;8411:7;8407:23;8403:32;8400:52;;;8448:1;8445;8438:12;8400:52;8471:28;8489:9;8471:28;:::i;:::-;8461:38;;8518:37;8551:2;8540:9;8536:18;8518:37;:::i;:::-;8508:47;;8305:256;;;;;:::o;9025:247::-;9084:6;9137:2;9125:9;9116:7;9112:23;9108:32;9105:52;;;9153:1;9150;9143:12;9105:52;9192:9;9179:23;9211:31;9236:5;9211:31;:::i;9482:668::-;9594:6;9602;9610;9618;9671:3;9659:9;9650:7;9646:23;9642:33;9639:53;;;9688:1;9685;9678:12;9639:53;9711;9756:7;9745:9;9711:53;:::i;:::-;9701:63;;9815:2;9804:9;9800:18;9787:32;-1:-1:-1;;;;;9834:6:43;9831:30;9828:50;;;9874:1;9871;9864:12;9828:50;9913:58;9963:7;9954:6;9943:9;9939:22;9913:58;:::i;:::-;9990:8;;-1:-1:-1;9887:84:43;-1:-1:-1;;10075:3:43;10060:19;;10047:33;10089:31;10047:33;10089:31;:::i;:::-;9482:668;;;;-1:-1:-1;9482:668:43;;-1:-1:-1;;9482:668:43:o;10155:395::-;10246:8;10256:6;10310:3;10303:4;10295:6;10291:17;10287:27;10277:55;;10328:1;10325;10318:12;10277:55;-1:-1:-1;10351:20:43;;-1:-1:-1;;;;;10383:30:43;;10380:50;;;10426:1;10423;10416:12;10380:50;10463:4;10455:6;10451:17;10439:29;;10523:3;10516:4;10506:6;10503:1;10499:14;10491:6;10487:27;10483:38;10480:47;10477:67;;;10540:1;10537;10530:12;10555:504;10680:6;10688;10741:2;10729:9;10720:7;10716:23;10712:32;10709:52;;;10757:1;10754;10747:12;10709:52;10797:9;10784:23;-1:-1:-1;;;;;10822:6:43;10819:30;10816:50;;;10862:1;10859;10852:12;10816:50;10901:98;10991:7;10982:6;10971:9;10967:22;10901:98;:::i;:::-;11018:8;;10875:124;;-1:-1:-1;10555:504:43;-1:-1:-1;;;;10555:504:43:o;11064:184::-;11122:6;11175:2;11163:9;11154:7;11150:23;11146:32;11143:52;;;11191:1;11188;11181:12;11143:52;11214:28;11232:9;11214:28;:::i;11435:553::-;11521:6;11529;11537;11545;11598:2;11586:9;11577:7;11573:23;11569:32;11566:52;;;11614:1;11611;11604:12;11566:52;11637:28;11655:9;11637:28;:::i;:::-;11627:38;;11684:37;11717:2;11706:9;11702:18;11684:37;:::i;:::-;11674:47;;11772:2;11761:9;11757:18;11744:32;-1:-1:-1;;;;;11791:6:43;11788:30;11785:50;;;11831:1;11828;11821:12;11785:50;11870:58;11920:7;11911:6;11900:9;11896:22;11870:58;:::i;:::-;11435:553;;;;-1:-1:-1;11947:8:43;-1:-1:-1;;;;11435:553:43:o;12496:655::-;12632:6;12640;12648;12692:9;12683:7;12679:23;12722:3;12718:2;12714:12;12711:32;;;12739:1;12736;12729:12;12711:32;12779:9;12766:23;-1:-1:-1;;;;;12804:6:43;12801:30;12798:50;;;12844:1;12841;12834:12;12798:50;12867:69;12928:7;12919:6;12908:9;12904:22;12867:69;:::i;:::-;12857:79;-1:-1:-1;;12970:2:43;-1:-1:-1;;12952:16:43;;12948:25;12945:45;;;12986:1;12983;12976:12;12945:45;;13024:2;13013:9;13009:18;12999:28;;13077:2;13066:9;13062:18;13049:32;13090:31;13115:5;13090:31;:::i;:::-;13140:5;13130:15;;;12496:655;;;;;:::o;13156:609::-;13396:4;13438:3;13427:9;13423:19;13415:27;;13475:6;13469:13;13458:9;13451:32;-1:-1:-1;;;;;13543:4:43;13535:6;13531:17;13525:24;13521:49;13514:4;13503:9;13499:20;13492:79;13618:4;13610:6;13606:17;13600:24;13633:62;13689:4;13678:9;13674:20;13660:12;2020;;2008:25;;2082:4;2071:16;;;2065:23;2049:14;;2042:47;1946:149;13633:62;-1:-1:-1;2020:12:43;;13754:3;13739:19;;2008:25;2082:4;2071:16;;2065:23;2049:14;;;2042:47;13704:55;1946:149;13770:388;13838:6;13846;13899:2;13887:9;13878:7;13874:23;13870:32;13867:52;;;13915:1;13912;13905:12;13867:52;13954:9;13941:23;13973:31;13998:5;13973:31;:::i;:::-;14023:5;-1:-1:-1;14080:2:43;14065:18;;14052:32;14093:33;14052:32;14093:33;:::i;14163:234::-;14246:6;14299:2;14287:9;14278:7;14274:23;14270:32;14267:52;;;14315:1;14312;14305:12;14267:52;14338:53;14383:7;14372:9;14338:53;:::i;14402:380::-;14481:1;14477:12;;;;14524;;;14545:61;;14599:4;14591:6;14587:17;14577:27;;14545:61;14652:2;14644:6;14641:14;14621:18;14618:38;14615:161;;14698:10;14693:3;14689:20;14686:1;14679:31;14733:4;14730:1;14723:15;14761:4;14758:1;14751:15;14787:127;14848:10;14843:3;14839:20;14836:1;14829:31;14879:4;14876:1;14869:15;14903:4;14900:1;14893:15;15187:253;15259:2;15253:9;15301:4;15289:17;;-1:-1:-1;;;;;15321:34:43;;15357:22;;;15318:62;15315:88;;;15383:18;;:::i;:::-;15419:2;15412:22;15187:253;:::o;15445:257::-;15517:4;15511:11;;;15549:17;;-1:-1:-1;;;;;15581:34:43;;15617:22;;;15578:62;15575:88;;;15643:18;;:::i;15707:275::-;15778:2;15772:9;15843:2;15824:13;;-1:-1:-1;;15820:27:43;15808:40;;-1:-1:-1;;;;;15863:34:43;;15899:22;;;15860:62;15857:88;;;15925:18;;:::i;:::-;15961:2;15954:22;15707:275;;-1:-1:-1;15707:275:43:o;15987:186::-;16035:4;-1:-1:-1;;;;;16060:6:43;16057:30;16054:56;;;16090:18;;:::i;:::-;-1:-1:-1;16156:2:43;16135:15;-1:-1:-1;;16131:29:43;16162:4;16127:40;;15987:186::o;16178:2117::-;16370:9;-1:-1:-1;;;;;16445:2:43;16437:6;16434:14;16431:40;;;16451:18;;:::i;:::-;16497:6;16494:1;16490:14;16523:4;16547:28;16571:2;16567;16563:11;16547:28;:::i;:::-;16609:19;;;16679:14;;;;16644:12;;;;16716:14;16705:26;;16702:46;;;16744:1;16741;16734:12;16702:46;16768:5;16782:1480;16798:6;16793:3;16790:15;16782:1480;;;16884:3;16871:17;16920:2;16907:11;16904:19;16901:109;;;16964:1;16993:2;16989;16982:14;16901:109;17033:23;;17101:4;17080:14;17076:23;;;17072:34;17069:124;;;17147:1;17176:2;17172;17165:14;17069:124;17221:22;;:::i;:::-;17272:21;17290:2;17272:21;:::i;:::-;17263:7;17256:38;17332:30;17358:2;17354;17350:11;17332:30;:::i;:::-;17327:2;17318:7;17314:16;17307:56;17386:2;17436;17432;17428:11;17415:25;17467:2;17459:6;17456:14;17453:104;;;17511:1;17540:2;17536;17529:14;17453:104;17580:15;;;;;17637:14;17630:4;17622:13;;17618:34;17608:135;;17695:1;17725:3;17720;17713:16;17608:135;17780:2;17767:16;17809:49;17825:32;17853:3;17825:32;:::i;:::-;17809:49;:::i;:::-;17885:3;17878:5;17871:18;17931:14;17926:2;17920:3;17916:2;17912:12;17908:21;17905:41;17902:134;;;17988:1;18018:3;18013;18006:16;17902:134;18091:3;18086:2;18082;18078:11;18073:2;18066:5;18062:14;18049:46;18141:1;18119:15;;;18115:24;;18108:35;;;;18163:16;;;18156:31;18200:20;;-1:-1:-1;18240:12:43;;;;16815;;16782:1480;;;-1:-1:-1;18284:5:43;16178:2117;-1:-1:-1;;;;;;;16178:2117:43:o;18300:331::-;18405:9;18416;18458:8;18446:10;18443:24;18440:44;;;18480:1;18477;18470:12;18440:44;18509:6;18499:8;18496:20;18493:40;;;18529:1;18526;18519:12;18493:40;-1:-1:-1;;18555:23:43;;;18600:25;;;;;-1:-1:-1;18300:331:43:o;18636:476::-;18827:3;18865:6;18859:13;18881:66;18940:6;18935:3;18928:4;18920:6;18916:17;18881:66;:::i;:::-;18969:16;;19022:6;19014;18969:16;18994:35;19086:1;19048:18;;19075:13;;;-1:-1:-1;19048:18:43;;18636:476;-1:-1:-1;;;18636:476:43:o;19117:266::-;19205:6;19200:3;19193:19;19257:6;19250:5;19243:4;19238:3;19234:14;19221:43;-1:-1:-1;19309:1:43;19284:16;;;19302:4;19280:27;;;19273:38;;;;19365:2;19344:15;;;-1:-1:-1;;19340:29:43;19331:39;;;19327:50;;19117:266::o;19388:244::-;19545:2;19534:9;19527:21;19508:4;19565:61;19622:2;19611:9;19607:18;19599:6;19591;19565:61;:::i;19637:127::-;19698:10;19693:3;19689:20;19686:1;19679:31;19729:4;19726:1;19719:15;19753:4;19750:1;19743:15;19769:331;19868:4;19926:11;19913:25;20020:3;20016:8;20005;19989:14;19985:29;19981:44;19961:18;19957:69;19947:97;;20040:1;20037;20030:12;19947:97;20061:33;;;;;19769:331;-1:-1:-1;;19769:331:43:o;20105:521::-;20182:4;20188:6;20248:11;20235:25;20342:2;20338:7;20327:8;20311:14;20307:29;20303:43;20283:18;20279:68;20269:96;;20361:1;20358;20351:12;20269:96;20388:33;;20440:20;;;-1:-1:-1;;;;;;20472:30:43;;20469:50;;;20515:1;20512;20505:12;20469:50;20548:4;20536:17;;-1:-1:-1;20579:14:43;20575:27;;;20565:38;;20562:58;;;20616:1;20613;20606:12;20631:129;-1:-1:-1;;;;;20709:5:43;20705:30;20698:5;20695:41;20685:69;;20750:1;20747;20740:12;20765:988;21139:10;21112:25;21130:6;21112:25;:::i;:::-;21108:42;21097:9;21090:61;21214:4;21206:6;21202:17;21189:31;21182:4;21171:9;21167:20;21160:61;21071:4;21268;21260:6;21256:17;21243:31;21283:30;21307:5;21283:30;:::i;:::-;-1:-1:-1;;;;;21355:5:43;21351:30;21344:4;21333:9;21329:20;21322:60;;21418:6;21413:2;21402:9;21398:18;21391:34;21462:3;21456;21445:9;21441:19;21434:32;21489:62;21546:3;21535:9;21531:19;21523:6;21515;21489:62;:::i;:::-;-1:-1:-1;;;;;21588:32:43;;21608:3;21567:19;;21560:61;21658:22;;;21652:3;21637:19;;21630:51;21698:49;21662:6;21732;21724;21698:49;:::i;:::-;21690:57;20765:988;-1:-1:-1;;;;;;;;;;20765:988:43:o;21758:647::-;21837:6;21890:2;21878:9;21869:7;21865:23;21861:32;21858:52;;;21906:1;21903;21896:12;21858:52;21939:9;21933:16;-1:-1:-1;;;;;21964:6:43;21961:30;21958:50;;;22004:1;22001;21994:12;21958:50;22027:22;;22080:4;22072:13;;22068:27;-1:-1:-1;22058:55:43;;22109:1;22106;22099:12;22058:55;22138:2;22132:9;22163:48;22179:31;22207:2;22179:31;:::i;22163:48::-;22234:2;22227:5;22220:17;22274:7;22269:2;22264;22260;22256:11;22252:20;22249:33;22246:53;;;22295:1;22292;22285:12;22246:53;22308:67;22372:2;22367;22360:5;22356:14;22351:2;22347;22343:11;22308:67;:::i;22860:245::-;22918:6;22971:2;22959:9;22950:7;22946:23;22942:32;22939:52;;;22987:1;22984;22977:12;22939:52;23026:9;23013:23;23045:30;23069:5;23045:30;:::i;23110:479::-;23377:1;23373;23368:3;23364:11;23360:19;23352:6;23348:32;23337:9;23330:51;23417:6;23412:2;23401:9;23397:18;23390:34;23472:6;23464;23460:19;23455:2;23444:9;23440:18;23433:47;23516:3;23511:2;23500:9;23496:18;23489:31;23311:4;23537:46;23578:3;23567:9;23563:19;23555:6;23537:46;:::i;24212:379::-;24405:2;24394:9;24387:21;24368:4;24431:45;24472:2;24461:9;24457:18;24449:6;24431:45;:::i;:::-;24524:9;24516:6;24512:22;24507:2;24496:9;24492:18;24485:50;24552:33;24578:6;24570;24552:33;:::i;24596:245::-;24663:6;24716:2;24704:9;24695:7;24691:23;24687:32;24684:52;;;24732:1;24729;24722:12;24684:52;24764:9;24758:16;24783:28;24805:5;24783:28;:::i;24846:887::-;25065:2;25054:9;25047:21;25123:10;25114:6;25108:13;25104:30;25099:2;25088:9;25084:18;25077:58;25189:4;25181:6;25177:17;25171:24;25166:2;25155:9;25151:18;25144:52;25028:4;25243:2;25235:6;25231:15;25225:22;25284:4;25278:3;25267:9;25263:19;25256:33;25312:52;25359:3;25348:9;25344:19;25330:12;25312:52;:::i;:::-;25298:66;;25413:2;25405:6;25401:15;25395:22;25487:2;25483:7;25471:9;25463:6;25459:22;25455:36;25448:4;25437:9;25433:20;25426:66;25515:41;25549:6;25533:14;25515:41;:::i;:::-;25625:3;25613:16;;;;25607:23;25600:31;25593:39;25587:3;25572:19;;25565:68;-1:-1:-1;;;;;;;;25694:32:43;;;;25687:4;25672:20;;;25665:62;25501:55;24846:887::o;25738:284::-;25808:5;25856:4;25844:9;25839:3;25835:19;25831:30;25828:50;;;25874:1;25871;25864:12;25828:50;25896:22;;:::i;:::-;25887:31;;25947:9;25941:16;25934:5;25927:31;26011:2;26000:9;25996:18;25990:25;25985:2;25978:5;25974:14;25967:49;25738:284;;;;:::o;26027:257::-;26125:6;26178:2;26166:9;26157:7;26153:23;26149:32;26146:52;;;26194:1;26191;26184:12;26146:52;26217:61;26270:7;26259:9;26217:61;:::i;26414:542::-;26515:2;26510:3;26507:11;26504:446;;;26551:1;26575:5;26572:1;26565:16;26619:4;26616:1;26606:18;26689:2;26677:10;26673:19;26670:1;26666:27;26660:4;26656:38;26725:4;26713:10;26710:20;26707:47;;;-1:-1:-1;26748:4:43;26707:47;26803:2;26798:3;26794:12;26791:1;26787:20;26781:4;26777:31;26767:41;;26858:82;26876:2;26869:5;26866:13;26858:82;;;26921:17;;;26902:1;26891:13;26858:82;;;26862:3;;;26414:542;;;:::o;27132:1341::-;27256:3;27250:10;-1:-1:-1;;;;;27275:6:43;27272:30;27269:56;;;27305:18;;:::i;:::-;27334:96;27423:6;27383:38;27415:4;27409:11;27383:38;:::i;:::-;27377:4;27334:96;:::i;:::-;27485:4;;27542:2;27531:14;;27559:1;27554:662;;;;28260:1;28277:6;28274:89;;;-1:-1:-1;28329:19:43;;;28323:26;28274:89;-1:-1:-1;;27089:1:43;27085:11;;;27081:24;27077:29;27067:40;27113:1;27109:11;;;27064:57;28376:81;;27524:943;;27554:662;26361:1;26354:14;;;26398:4;26385:18;;-1:-1:-1;;27590:20:43;;;27707:236;27721:7;27718:1;27715:14;27707:236;;;27810:19;;;27804:26;27789:42;;27902:27;;;;27870:1;27858:14;;;;27737:19;;27707:236;;;27711:3;27971:6;27962:7;27959:19;27956:201;;;28032:19;;;28026:26;-1:-1:-1;;28115:1:43;28111:14;;;28127:3;28107:24;28103:37;28099:42;28084:58;28069:74;;27956:201;-1:-1:-1;;;;;28203:1:43;28187:14;;;28183:22;28170:36;;-1:-1:-1;27132:1341:43:o;28478:1164::-;28694:4;28723:2;28763;28752:9;28748:18;28793:2;28782:9;28775:21;28816:6;28851;28845:13;28882:6;28874;28867:22;28908:2;28898:12;;28941:2;28930:9;28926:18;28919:25;;29003:2;28993:6;28990:1;28986:14;28975:9;28971:30;28967:39;29041:2;29033:6;29029:15;29062:1;29072:541;29086:6;29083:1;29080:13;29072:541;;;29151:22;;;-1:-1:-1;;29147:36:43;29135:49;;29207:13;;29279:9;;29290:10;29275:26;29260:42;;29349:11;;;29343:18;29363:6;29339:31;29322:15;;;29315:56;29410:11;;29404:18;29243:4;29442:15;;;29435:27;;;29485:48;29517:15;;;29404:18;29485:48;:::i;:::-;29591:12;;;;29475:58;-1:-1:-1;;;29556:15:43;;;;29108:1;29101:9;29072:541;;;-1:-1:-1;29630:6:43;;28478:1164;-1:-1:-1;;;;;;;;28478:1164:43:o;29647:346::-;29734:6;29787:2;29775:9;29766:7;29762:23;29758:32;29755:52;;;29803:1;29800;29793:12;29755:52;29829:22;;:::i;:::-;29887:9;29874:23;29867:5;29860:38;29958:2;29947:9;29943:18;29930:32;29925:2;29918:5;29914:14;29907:56;29982:5;29972:15;;;29647:346;;;;:::o;30337:127::-;30398:10;30393:3;30389:20;30386:1;30379:31;30429:4;30426:1;30419:15;30453:4;30450:1;30443:15;30469:217;30509:1;30535;30525:132;;30579:10;30574:3;30570:20;30567:1;30560:31;30614:4;30611:1;30604:15;30642:4;30639:1;30632:15;30525:132;-1:-1:-1;30671:9:43;;30469:217::o;30691:168::-;30764:9;;;30795;;30812:15;;;30806:22;;30792:37;30782:71;;30833:18;;:::i;30864:255::-;30984:19;;31023:2;31015:11;;31012:101;;;-1:-1:-1;;31084:2:43;31080:12;;;31077:1;31073:20;31069:33;31058:45;30864:255;;;;:::o;31124:331::-;-1:-1:-1;;;;;;31244:19:43;;31328:11;;;;31359:1;31351:10;;31348:101;;;31436:2;31430;31423:3;31420:1;31416:11;31413:1;31409:19;31405:28;31401:2;31397:37;31393:46;31384:55;;31348:101;;;31124:331;;;;:::o;31460:568::-;-1:-1:-1;;;;;31725:3:43;31721:28;31712:6;31707:3;31703:16;31699:51;31694:3;31687:64;31811:10;31806:3;31802:20;31793:6;31788:3;31784:16;31780:43;31776:1;31771:3;31767:11;31760:64;31854:6;31849:2;31844:3;31840:12;31833:28;31669:3;31890:6;31884:13;31906:75;31974:6;31969:2;31964:3;31960:12;31953:4;31945:6;31941:17;31906:75;:::i;:::-;32001:16;;;;32019:2;31997:25;;31460:568;-1:-1:-1;;;;;31460:568:43:o;32033:125::-;32098:9;;;32119:10;;;32116:36;;;32132:18;;:::i;32458:532::-;32699:6;32694:3;32687:19;-1:-1:-1;;;;;32762:3:43;32758:28;32749:6;32744:3;32740:16;32736:51;32731:2;32726:3;32722:12;32715:73;32818:6;32813:2;32808:3;32804:12;32797:28;32669:3;32854:6;32848:13;32870:73;32936:6;32931:2;32926:3;32922:12;32917:2;32909:6;32905:15;32870:73;:::i;:::-;32963:16;;;;32981:2;32959:25;;32458:532;-1:-1:-1;;;;;32458:532:43:o;32995:523::-;33097:6;33150:3;33138:9;33129:7;33125:23;33121:33;33118:53;;;33167:1;33164;33157:12;33118:53;33193:22;;:::i;:::-;33244:9;33238:16;33231:5;33224:31;33300:2;33289:9;33285:18;33279:25;33313:32;33337:7;33313:32;:::i;:::-;33372:2;33361:14;;33354:31;33417:70;33479:7;33474:2;33459:18;;33417:70;:::i;:::-;33412:2;33401:14;;33394:94;33405:5;32995:523;-1:-1:-1;;;32995:523:43:o;33523:251::-;33593:6;33646:2;33634:9;33625:7;33621:23;33617:32;33614:52;;;33662:1;33659;33652:12;33614:52;33694:9;33688:16;33713:31;33738:5;33713:31;:::i" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "2465600", - "executionCost": "infinite", - "totalCost": "infinite" - }, - "external": { - "SEND()": "338", - "SEND_AND_CALL()": "250", - "allowInitializePath((uint32,bytes32,uint64))": "infinite", - "allowance(address,address)": "infinite", - "approvalRequired()": "287", - "approve(address,uint256)": "24779", - "balanceOf(address)": "2686", - "combineOptions(uint32,uint16,bytes)": "infinite", - "decimalConversionRate()": "infinite", - "decimals()": "258", - "endpoint()": "infinite", - "enforcedOptions(uint32,uint16)": "infinite", - "isComposeMsgSender((uint32,bytes32,uint64),bytes,address)": "844", - "isPeer(uint32,bytes32)": "2641", - "lzReceive((uint32,bytes32,uint64),bytes32,bytes,address,bytes)": "infinite", - "lzReceiveAndRevert(((uint32,bytes32,uint64),uint32,address,bytes32,uint256,address,bytes,bytes)[])": "infinite", - "lzReceiveSimulate((uint32,bytes32,uint64),bytes32,bytes,address,bytes)": "infinite", - "mint(address,uint256)": "infinite", - "msgInspector()": "2450", - "name()": "infinite", - "nextNonce(uint32,bytes32)": "458", - "oApp()": "257", - "oAppVersion()": "285", - "oftVersion()": "269", - "owner()": "2465", - "peers(uint32)": "2552", - "preCrime()": "2470", - "quoteOFT((uint32,bytes32,uint256,uint256,bytes,bytes,bytes))": "infinite", - "quoteSend((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),bool)": "infinite", - "renounceOwnership()": "infinite", - "send((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),(uint256,uint256),address)": "infinite", - "setDelegate(address)": "infinite", - "setEnforcedOptions((uint32,uint16,bytes)[])": "infinite", - "setMsgInspector(address)": "27916", - "setPeer(uint32,bytes32)": "26127", - "setPreCrime(address)": "27860", - "sharedDecimals()": "313", - "symbol()": "infinite", - "token()": "344", - "totalSupply()": "2393", - "transfer(address,uint256)": "51318", - "transferFrom(address,address,uint256)": "infinite", - "transferOwnership(address)": "infinite" - } - }, - "methodIdentifiers": { - "SEND()": "1f5e1334", - "SEND_AND_CALL()": "134d4f25", - "allowInitializePath((uint32,bytes32,uint64))": "ff7bd03d", - "allowance(address,address)": "dd62ed3e", - "approvalRequired()": "9f68b964", - "approve(address,uint256)": "095ea7b3", - "balanceOf(address)": "70a08231", - "combineOptions(uint32,uint16,bytes)": "bc70b354", - "decimalConversionRate()": "963efcaa", - "decimals()": "313ce567", - "endpoint()": "5e280f11", - "enforcedOptions(uint32,uint16)": "5535d461", - "isComposeMsgSender((uint32,bytes32,uint64),bytes,address)": "82413eac", - "isPeer(uint32,bytes32)": "5a0dfe4d", - "lzReceive((uint32,bytes32,uint64),bytes32,bytes,address,bytes)": "13137d65", - "lzReceiveAndRevert(((uint32,bytes32,uint64),uint32,address,bytes32,uint256,address,bytes,bytes)[])": "bd815db0", - "lzReceiveSimulate((uint32,bytes32,uint64),bytes32,bytes,address,bytes)": "d045a0dc", - "mint(address,uint256)": "40c10f19", - "msgInspector()": "111ecdad", - "name()": "06fdde03", - "nextNonce(uint32,bytes32)": "7d25a05e", - "oApp()": "52ae2879", - "oAppVersion()": "17442b70", - "oftVersion()": "156a0d0f", - "owner()": "8da5cb5b", - "peers(uint32)": "bb0b6a53", - "preCrime()": "b731ea0a", - "quoteOFT((uint32,bytes32,uint256,uint256,bytes,bytes,bytes))": "0d35b415", - "quoteSend((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),bool)": "3b6f743b", - "renounceOwnership()": "715018a6", - "send((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),(uint256,uint256),address)": "c7c7f5b3", - "setDelegate(address)": "ca5eb5e1", - "setEnforcedOptions((uint32,uint16,bytes)[])": "b98bd070", - "setMsgInspector(address)": "6fc1b31e", - "setPeer(uint32,bytes32)": "3400288b", - "setPreCrime(address)": "d4243885", - "sharedDecimals()": "857749b0", - "symbol()": "95d89b41", - "token()": "fc0c546a", - "totalSupply()": "18160ddd", - "transfer(address,uint256)": "a9059cbb", - "transferFrom(address,address,uint256)": "23b872dd", - "transferOwnership(address)": "f2fde38b" - } - }, - "metadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"_lzEndpoint\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_delegate\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"allowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSpender\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidDelegate\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidEndpointCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidLocalDecimals\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"options\",\"type\":\"bytes\"}],\"name\":\"InvalidOptions\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LzTokenUnavailable\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"}],\"name\":\"NoPeer\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"msgValue\",\"type\":\"uint256\"}],\"name\":\"NotEnoughNative\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"OnlyEndpoint\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"}],\"name\":\"OnlyPeer\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlySelf\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"name\":\"SimulationResult\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountLD\",\"type\":\"uint256\"}],\"name\":\"SlippageExceeded\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"msgType\",\"type\":\"uint16\"},{\"internalType\":\"bytes\",\"name\":\"options\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"struct EnforcedOptionParam[]\",\"name\":\"_enforcedOptions\",\"type\":\"tuple[]\"}],\"name\":\"EnforcedOptionSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"inspector\",\"type\":\"address\"}],\"name\":\"MsgInspectorSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"toAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountReceivedLD\",\"type\":\"uint256\"}],\"name\":\"OFTReceived\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"fromAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountSentLD\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountReceivedLD\",\"type\":\"uint256\"}],\"name\":\"OFTSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"peer\",\"type\":\"bytes32\"}],\"name\":\"PeerSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"preCrimeAddress\",\"type\":\"address\"}],\"name\":\"PreCrimeSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"SEND\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SEND_AND_CALL\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"origin\",\"type\":\"tuple\"}],\"name\":\"allowInitializePath\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"approvalRequired\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"_msgType\",\"type\":\"uint16\"},{\"internalType\":\"bytes\",\"name\":\"_extraOptions\",\"type\":\"bytes\"}],\"name\":\"combineOptions\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimalConversionRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"endpoint\",\"outputs\":[{\"internalType\":\"contract ILayerZeroEndpointV2\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"msgType\",\"type\":\"uint16\"}],\"name\":\"enforcedOptions\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"enforcedOption\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"}],\"name\":\"isComposeMsgSender\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_peer\",\"type\":\"bytes32\"}],\"name\":\"isPeer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"_origin\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"_guid\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"_executor\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"lzReceive\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"origin\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"executor\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"internalType\":\"struct InboundPacket[]\",\"name\":\"_packets\",\"type\":\"tuple[]\"}],\"name\":\"lzReceiveAndRevert\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"_origin\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"_guid\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"_executor\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"lzReceiveSimulate\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"msgInspector\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"nextNonce\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"oApp\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"oAppVersion\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"senderVersion\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"receiverVersion\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"oftVersion\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"},{\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"}],\"name\":\"peers\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"peer\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"preCrime\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"to\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"amountLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountLD\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"extraOptions\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"composeMsg\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"oftCmd\",\"type\":\"bytes\"}],\"internalType\":\"struct SendParam\",\"name\":\"_sendParam\",\"type\":\"tuple\"}],\"name\":\"quoteOFT\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"minAmountLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountLD\",\"type\":\"uint256\"}],\"internalType\":\"struct OFTLimit\",\"name\":\"oftLimit\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"int256\",\"name\":\"feeAmountLD\",\"type\":\"int256\"},{\"internalType\":\"string\",\"name\":\"description\",\"type\":\"string\"}],\"internalType\":\"struct OFTFeeDetail[]\",\"name\":\"oftFeeDetails\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"amountSentLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountReceivedLD\",\"type\":\"uint256\"}],\"internalType\":\"struct OFTReceipt\",\"name\":\"oftReceipt\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"to\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"amountLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountLD\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"extraOptions\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"composeMsg\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"oftCmd\",\"type\":\"bytes\"}],\"internalType\":\"struct SendParam\",\"name\":\"_sendParam\",\"type\":\"tuple\"},{\"internalType\":\"bool\",\"name\":\"_payInLzToken\",\"type\":\"bool\"}],\"name\":\"quoteSend\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nativeFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lzTokenFee\",\"type\":\"uint256\"}],\"internalType\":\"struct MessagingFee\",\"name\":\"msgFee\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"to\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"amountLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountLD\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"extraOptions\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"composeMsg\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"oftCmd\",\"type\":\"bytes\"}],\"internalType\":\"struct SendParam\",\"name\":\"_sendParam\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nativeFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lzTokenFee\",\"type\":\"uint256\"}],\"internalType\":\"struct MessagingFee\",\"name\":\"_fee\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"_refundAddress\",\"type\":\"address\"}],\"name\":\"send\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nativeFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lzTokenFee\",\"type\":\"uint256\"}],\"internalType\":\"struct MessagingFee\",\"name\":\"fee\",\"type\":\"tuple\"}],\"internalType\":\"struct MessagingReceipt\",\"name\":\"msgReceipt\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"amountSentLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountReceivedLD\",\"type\":\"uint256\"}],\"internalType\":\"struct OFTReceipt\",\"name\":\"oftReceipt\",\"type\":\"tuple\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_delegate\",\"type\":\"address\"}],\"name\":\"setDelegate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"msgType\",\"type\":\"uint16\"},{\"internalType\":\"bytes\",\"name\":\"options\",\"type\":\"bytes\"}],\"internalType\":\"struct EnforcedOptionParam[]\",\"name\":\"_enforcedOptions\",\"type\":\"tuple[]\"}],\"name\":\"setEnforcedOptions\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_msgInspector\",\"type\":\"address\"}],\"name\":\"setMsgInspector\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_peer\",\"type\":\"bytes32\"}],\"name\":\"setPeer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_preCrime\",\"type\":\"address\"}],\"name\":\"setPreCrime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sharedDecimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"token\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"ERC20InsufficientAllowance(address,uint256,uint256)\":[{\"details\":\"Indicates a failure with the `spender`\\u2019s `allowance`. Used in transfers.\",\"params\":{\"allowance\":\"Amount of tokens a `spender` is allowed to operate with.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC20InsufficientBalance(address,uint256,uint256)\":[{\"details\":\"Indicates an error related to the current `balance` of a `sender`. Used in transfers.\",\"params\":{\"balance\":\"Current balance for the interacting account.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC20InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC20InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidSpender(address)\":[{\"details\":\"Indicates a failure with the `spender` to be approved. Used in approvals.\",\"params\":{\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}],\"SafeERC20FailedOperation(address)\":[{\"details\":\"An operation with an ERC-20 token failed.\"}]},\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"PreCrimeSet(address)\":{\"details\":\"Emitted when the preCrime contract address is set.\",\"params\":{\"preCrimeAddress\":\"The address of the preCrime contract.\"}},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowInitializePath((uint32,bytes32,uint64))\":{\"details\":\"This indicates to the endpoint that the OApp has enabled msgs for this particular path to be received.This defaults to assuming if a peer has been set, its initialized. Can be overridden by the OApp if there is other logic to determine this.\",\"params\":{\"origin\":\"The origin information containing the source endpoint and sender address.\"},\"returns\":{\"_0\":\"Whether the path has been initialized.\"}},\"allowance(address,address)\":{\"details\":\"See {IERC20-allowance}.\"},\"approvalRequired()\":{\"details\":\"In the case of OFT where the contract IS the token, approval is NOT required.\",\"returns\":{\"_0\":\"requiresApproval Needs approval of the underlying token implementation.\"}},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. NOTE: If `value` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"See {IERC20-balanceOf}.\"},\"combineOptions(uint32,uint16,bytes)\":{\"details\":\"If there is an enforced lzReceive option: - {gasLimit: 200k, msg.value: 1 ether} AND a caller supplies a lzReceive option: {gasLimit: 100k, msg.value: 0.5 ether} - The resulting options will be {gasLimit: 300k, msg.value: 1.5 ether} when the message is executed on the remote lzReceive() function.This presence of duplicated options is handled off-chain in the verifier/executor.\",\"params\":{\"_eid\":\"The endpoint ID.\",\"_extraOptions\":\"Additional options passed by the caller.\",\"_msgType\":\"The OAPP message type.\"},\"returns\":{\"_0\":\"options The combination of caller specified options AND enforced options.\"}},\"decimals()\":{\"details\":\"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the default value returned by this function, unless it's overridden. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.\"},\"isComposeMsgSender((uint32,bytes32,uint64),bytes,address)\":{\"details\":\"_origin The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message._message The lzReceive payload.Applications can optionally choose to implement separate composeMsg senders that are NOT the bridging layer.The default sender IS the OAppReceiver implementer.\",\"params\":{\"_sender\":\"The sender address.\"},\"returns\":{\"_0\":\"isSender Is a valid sender.\"}},\"isPeer(uint32,bytes32)\":{\"details\":\"Check if the peer is considered 'trusted' by the OApp.Enables OAppPreCrimeSimulator to check whether a potential Inbound Packet is from a trusted source.\",\"params\":{\"_eid\":\"The endpoint ID to check.\",\"_peer\":\"The peer to check.\"},\"returns\":{\"_0\":\"Whether the peer passed is considered 'trusted' by the OApp.\"}},\"lzReceive((uint32,bytes32,uint64),bytes32,bytes,address,bytes)\":{\"details\":\"Entry point for receiving messages or packets from the endpoint.Entry point for receiving msg/packet from the LayerZero endpoint.\",\"params\":{\"_executor\":\"The address of the executor for the received message.\",\"_extraData\":\"Additional arbitrary data provided by the corresponding executor.\",\"_guid\":\"The unique identifier for the received LayerZero message.\",\"_message\":\"The payload of the received message.\",\"_origin\":\"The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message.\"}},\"lzReceiveAndRevert(((uint32,bytes32,uint64),uint32,address,bytes32,uint256,address,bytes,bytes)[])\":{\"details\":\"Interface for pre-crime simulations. Always reverts at the end with the simulation results.WARNING: MUST revert at the end with the simulation results.Gives the preCrime implementation the ability to mock sending packets to the lzReceive function, WITHOUT actually executing them.\",\"params\":{\"_packets\":\"An array of InboundPacket objects representing received packets to be delivered.\"}},\"lzReceiveSimulate((uint32,bytes32,uint64),bytes32,bytes,address,bytes)\":{\"details\":\"Is effectively an internal function because msg.sender must be address(this). Allows resetting the call stack for 'internal' calls.\",\"params\":{\"_executor\":\"The executor address for the packet.\",\"_extraData\":\"Additional data for the packet.\",\"_guid\":\"The unique identifier of the packet.\",\"_message\":\"The message payload of the packet.\",\"_origin\":\"The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message.\"}},\"name()\":{\"details\":\"Returns the name of the token.\"},\"nextNonce(uint32,bytes32)\":{\"details\":\"_srcEid The source endpoint ID._sender The sender address.The path nonce starts from 1. If 0 is returned it means that there is NO nonce ordered enforcement.Is required by the off-chain executor to determine the OApp expects msg execution is ordered.This is also enforced by the OApp.By default this is NOT enabled. ie. nextNonce is hardcoded to return 0.\",\"returns\":{\"nonce\":\"The next nonce.\"}},\"oApp()\":{\"details\":\"Retrieves the address of the OApp contract.The simulator contract is the base contract for the OApp by default.If the simulator is a separate contract, override this function.\",\"returns\":{\"_0\":\"The address of the OApp contract.\"}},\"oAppVersion()\":{\"returns\":{\"receiverVersion\":\"The version of the OAppReceiver.sol implementation.\",\"senderVersion\":\"The version of the OAppSender.sol implementation.\"}},\"oftVersion()\":{\"details\":\"interfaceId: This specific interface ID is '0x02e49c2c'.version: Indicates a cross-chain compatible msg encoding with other OFTs.If a new feature is added to the OFT cross-chain msg encoding, the version will be incremented. ie. localOFT version(x,1) CAN send messages to remoteOFT version(x,1)\",\"returns\":{\"interfaceId\":\"The interface ID.\",\"version\":\"The version.\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"quoteOFT((uint32,bytes32,uint256,uint256,bytes,bytes,bytes))\":{\"params\":{\"_sendParam\":\"The parameters for the send operation.\"},\"returns\":{\"oftFeeDetails\":\"The details of OFT fees.\",\"oftLimit\":\"The OFT limit information.\",\"oftReceipt\":\"The OFT receipt information.\"}},\"quoteSend((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),bool)\":{\"details\":\"MessagingFee: LayerZero msg fee - nativeFee: The native fee. - lzTokenFee: The lzToken fee.\",\"params\":{\"_payInLzToken\":\"Flag indicating whether the caller is paying in the LZ token.\",\"_sendParam\":\"The parameters for the send() operation.\"},\"returns\":{\"msgFee\":\"The calculated LayerZero messaging fee from the send() operation.\"}},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"send((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),(uint256,uint256),address)\":{\"details\":\"Executes the send operation.MessagingReceipt: LayerZero msg receipt - guid: The unique identifier for the sent message. - nonce: The nonce of the sent message. - fee: The LayerZero fee incurred for the message.\",\"params\":{\"_fee\":\"The calculated fee for the send() operation. - nativeFee: The native fee. - lzTokenFee: The lzToken fee.\",\"_refundAddress\":\"The address to receive any excess funds.\",\"_sendParam\":\"The parameters for the send operation.\"},\"returns\":{\"msgReceipt\":\"The receipt for the send operation.\",\"oftReceipt\":\"The OFT receipt information.\"}},\"setDelegate(address)\":{\"details\":\"Only the owner/admin of the OApp can call this function.Provides the ability for a delegate to set configs, on behalf of the OApp, directly on the Endpoint contract.\",\"params\":{\"_delegate\":\"The address of the delegate to be set.\"}},\"setEnforcedOptions((uint32,uint16,bytes)[])\":{\"details\":\"Sets the enforced options for specific endpoint and message type combinations.Only the owner/admin of the OApp can call this function.Provides a way for the OApp to enforce things like paying for PreCrime, AND/OR minimum dst lzReceive gas amounts etc.These enforced options can vary as the potential options/execution on the remote may differ as per the msgType. eg. Amount of lzReceive() gas necessary to deliver a lzCompose() message adds overhead you dont want to pay if you are only making a standard LayerZero message ie. lzReceive() WITHOUT sendCompose().\",\"params\":{\"_enforcedOptions\":\"An array of EnforcedOptionParam structures specifying enforced options.\"}},\"setMsgInspector(address)\":{\"details\":\"Sets the message inspector address for the OFT.This is an optional contract that can be used to inspect both 'message' and 'options'.Set it to address(0) to disable it, or set it to a contract address to enable it.\",\"params\":{\"_msgInspector\":\"The address of the message inspector.\"}},\"setPeer(uint32,bytes32)\":{\"details\":\"Only the owner/admin of the OApp can call this function.Indicates that the peer is trusted to send LayerZero messages to this OApp.Set this to bytes32(0) to remove the peer address.Peer is a bytes32 to accommodate non-evm chains.\",\"params\":{\"_eid\":\"The endpoint ID.\",\"_peer\":\"The address of the peer to be associated with the corresponding endpoint.\"}},\"setPreCrime(address)\":{\"details\":\"Sets the preCrime contract address.\",\"params\":{\"_preCrime\":\"The address of the preCrime contract.\"}},\"sharedDecimals()\":{\"details\":\"Retrieves the shared decimals of the OFT.Sets an implicit cap on the amount of tokens, over uint64.max() will need some sort of outbound cap / totalSupply cap Lowest common decimal denominator between chains. Defaults to 6 decimal places to provide up to 18,446,744,073,709.551615 units (max uint64). For tokens exceeding this totalSupply(), they will need to override the sharedDecimals function with something smaller. ie. 4 sharedDecimals would be 1,844,674,407,370,955.1615\",\"returns\":{\"_0\":\"The shared decimals of the OFT.\"}},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"token()\":{\"details\":\"Retrieves the address of the underlying ERC20 implementation.In the case of OFT, address(this) and erc20 are the same contract.\",\"returns\":{\"_0\":\"The address of the OFT token.\"}},\"totalSupply()\":{\"details\":\"See {IERC20-totalSupply}.\"},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `value`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC20-transferFrom}. Skips emitting an {Approval} event indicating an allowance update. This is not required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve]. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `value`. - the caller must have allowance for ``from``'s tokens of at least `value`.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"allowInitializePath((uint32,bytes32,uint64))\":{\"notice\":\"Checks if the path initialization is allowed based on the provided origin.\"},\"approvalRequired()\":{\"notice\":\"Indicates whether the OFT contract requires approval of the 'token()' to send.\"},\"combineOptions(uint32,uint16,bytes)\":{\"notice\":\"Combines options for a given endpoint and message type.\"},\"endpoint()\":{\"notice\":\"Retrieves the LayerZero endpoint associated with the OApp.\"},\"isComposeMsgSender((uint32,bytes32,uint64),bytes,address)\":{\"notice\":\"Indicates whether an address is an approved composeMsg sender to the Endpoint.\"},\"nextNonce(uint32,bytes32)\":{\"notice\":\"Retrieves the next nonce for a given source endpoint and sender address.\"},\"oAppVersion()\":{\"notice\":\"Retrieves the OApp version information.\"},\"oftVersion()\":{\"notice\":\"Retrieves interfaceID and the version of the OFT.\"},\"peers(uint32)\":{\"notice\":\"Retrieves the peer (OApp) associated with a corresponding endpoint.\"},\"quoteOFT((uint32,bytes32,uint256,uint256,bytes,bytes,bytes))\":{\"notice\":\"Provides the fee breakdown and settings data for an OFT. Unused in the default implementation.\"},\"quoteSend((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),bool)\":{\"notice\":\"Provides a quote for the send() operation.\"},\"setDelegate(address)\":{\"notice\":\"Sets the delegate address for the OApp.\"},\"setPeer(uint32,bytes32)\":{\"notice\":\"Sets the peer address (OApp instance) for a corresponding endpoint.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/mocks/MyOFTMock.sol\":\"MyOFTMock\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\nimport { IMessageLibManager } from \\\"./IMessageLibManager.sol\\\";\\nimport { IMessagingComposer } from \\\"./IMessagingComposer.sol\\\";\\nimport { IMessagingChannel } from \\\"./IMessagingChannel.sol\\\";\\nimport { IMessagingContext } from \\\"./IMessagingContext.sol\\\";\\n\\nstruct MessagingParams {\\n uint32 dstEid;\\n bytes32 receiver;\\n bytes message;\\n bytes options;\\n bool payInLzToken;\\n}\\n\\nstruct MessagingReceipt {\\n bytes32 guid;\\n uint64 nonce;\\n MessagingFee fee;\\n}\\n\\nstruct MessagingFee {\\n uint256 nativeFee;\\n uint256 lzTokenFee;\\n}\\n\\nstruct Origin {\\n uint32 srcEid;\\n bytes32 sender;\\n uint64 nonce;\\n}\\n\\ninterface ILayerZeroEndpointV2 is IMessageLibManager, IMessagingComposer, IMessagingChannel, IMessagingContext {\\n event PacketSent(bytes encodedPayload, bytes options, address sendLibrary);\\n\\n event PacketVerified(Origin origin, address receiver, bytes32 payloadHash);\\n\\n event PacketDelivered(Origin origin, address receiver);\\n\\n event LzReceiveAlert(\\n address indexed receiver,\\n address indexed executor,\\n Origin origin,\\n bytes32 guid,\\n uint256 gas,\\n uint256 value,\\n bytes message,\\n bytes extraData,\\n bytes reason\\n );\\n\\n event LzTokenSet(address token);\\n\\n event DelegateSet(address sender, address delegate);\\n\\n function quote(MessagingParams calldata _params, address _sender) external view returns (MessagingFee memory);\\n\\n function send(\\n MessagingParams calldata _params,\\n address _refundAddress\\n ) external payable returns (MessagingReceipt memory);\\n\\n function verify(Origin calldata _origin, address _receiver, bytes32 _payloadHash) external;\\n\\n function verifiable(Origin calldata _origin, address _receiver) external view returns (bool);\\n\\n function initializable(Origin calldata _origin, address _receiver) external view returns (bool);\\n\\n function lzReceive(\\n Origin calldata _origin,\\n address _receiver,\\n bytes32 _guid,\\n bytes calldata _message,\\n bytes calldata _extraData\\n ) external payable;\\n\\n // oapp can burn messages partially by calling this function with its own business logic if messages are verified in order\\n function clear(address _oapp, Origin calldata _origin, bytes32 _guid, bytes calldata _message) external;\\n\\n function setLzToken(address _lzToken) external;\\n\\n function lzToken() external view returns (address);\\n\\n function nativeToken() external view returns (address);\\n\\n function setDelegate(address _delegate) external;\\n}\\n\",\"keccak256\":\"0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\nimport { Origin } from \\\"./ILayerZeroEndpointV2.sol\\\";\\n\\ninterface ILayerZeroReceiver {\\n function allowInitializePath(Origin calldata _origin) external view returns (bool);\\n\\n function nextNonce(uint32 _eid, bytes32 _sender) external view returns (uint64);\\n\\n function lzReceive(\\n Origin calldata _origin,\\n bytes32 _guid,\\n bytes calldata _message,\\n address _executor,\\n bytes calldata _extraData\\n ) external payable;\\n}\\n\",\"keccak256\":\"0x9641abba8d53b08bb517d1b74801dd15ea7b84d77a6719085bd96c8ea94e3ca0\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\nimport { IERC165 } from \\\"@openzeppelin/contracts/utils/introspection/IERC165.sol\\\";\\n\\nimport { SetConfigParam } from \\\"./IMessageLibManager.sol\\\";\\n\\nenum MessageLibType {\\n Send,\\n Receive,\\n SendAndReceive\\n}\\n\\ninterface IMessageLib is IERC165 {\\n function setConfig(address _oapp, SetConfigParam[] calldata _config) external;\\n\\n function getConfig(uint32 _eid, address _oapp, uint32 _configType) external view returns (bytes memory config);\\n\\n function isSupportedEid(uint32 _eid) external view returns (bool);\\n\\n // message libs of same major version are compatible\\n function version() external view returns (uint64 major, uint8 minor, uint8 endpointVersion);\\n\\n function messageLibType() external view returns (MessageLibType);\\n}\\n\",\"keccak256\":\"0x5cf5f24751b4e3ea1c9c5ded07cedfdfd62566b6daaffcc0144733859c9dba0c\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\nstruct SetConfigParam {\\n uint32 eid;\\n uint32 configType;\\n bytes config;\\n}\\n\\ninterface IMessageLibManager {\\n struct Timeout {\\n address lib;\\n uint256 expiry;\\n }\\n\\n event LibraryRegistered(address newLib);\\n event DefaultSendLibrarySet(uint32 eid, address newLib);\\n event DefaultReceiveLibrarySet(uint32 eid, address newLib);\\n event DefaultReceiveLibraryTimeoutSet(uint32 eid, address oldLib, uint256 expiry);\\n event SendLibrarySet(address sender, uint32 eid, address newLib);\\n event ReceiveLibrarySet(address receiver, uint32 eid, address newLib);\\n event ReceiveLibraryTimeoutSet(address receiver, uint32 eid, address oldLib, uint256 timeout);\\n\\n function registerLibrary(address _lib) external;\\n\\n function isRegisteredLibrary(address _lib) external view returns (bool);\\n\\n function getRegisteredLibraries() external view returns (address[] memory);\\n\\n function setDefaultSendLibrary(uint32 _eid, address _newLib) external;\\n\\n function defaultSendLibrary(uint32 _eid) external view returns (address);\\n\\n function setDefaultReceiveLibrary(uint32 _eid, address _newLib, uint256 _gracePeriod) external;\\n\\n function defaultReceiveLibrary(uint32 _eid) external view returns (address);\\n\\n function setDefaultReceiveLibraryTimeout(uint32 _eid, address _lib, uint256 _expiry) external;\\n\\n function defaultReceiveLibraryTimeout(uint32 _eid) external view returns (address lib, uint256 expiry);\\n\\n function isSupportedEid(uint32 _eid) external view returns (bool);\\n\\n function isValidReceiveLibrary(address _receiver, uint32 _eid, address _lib) external view returns (bool);\\n\\n /// ------------------- OApp interfaces -------------------\\n function setSendLibrary(address _oapp, uint32 _eid, address _newLib) external;\\n\\n function getSendLibrary(address _sender, uint32 _eid) external view returns (address lib);\\n\\n function isDefaultSendLibrary(address _sender, uint32 _eid) external view returns (bool);\\n\\n function setReceiveLibrary(address _oapp, uint32 _eid, address _newLib, uint256 _gracePeriod) external;\\n\\n function getReceiveLibrary(address _receiver, uint32 _eid) external view returns (address lib, bool isDefault);\\n\\n function setReceiveLibraryTimeout(address _oapp, uint32 _eid, address _lib, uint256 _expiry) external;\\n\\n function receiveLibraryTimeout(address _receiver, uint32 _eid) external view returns (address lib, uint256 expiry);\\n\\n function setConfig(address _oapp, address _lib, SetConfigParam[] calldata _params) external;\\n\\n function getConfig(\\n address _oapp,\\n address _lib,\\n uint32 _eid,\\n uint32 _configType\\n ) external view returns (bytes memory config);\\n}\\n\",\"keccak256\":\"0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\ninterface IMessagingChannel {\\n event InboundNonceSkipped(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce);\\n event PacketNilified(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce, bytes32 payloadHash);\\n event PacketBurnt(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce, bytes32 payloadHash);\\n\\n function eid() external view returns (uint32);\\n\\n // this is an emergency function if a message cannot be verified for some reasons\\n // required to provide _nextNonce to avoid race condition\\n function skip(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce) external;\\n\\n function nilify(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce, bytes32 _payloadHash) external;\\n\\n function burn(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce, bytes32 _payloadHash) external;\\n\\n function nextGuid(address _sender, uint32 _dstEid, bytes32 _receiver) external view returns (bytes32);\\n\\n function inboundNonce(address _receiver, uint32 _srcEid, bytes32 _sender) external view returns (uint64);\\n\\n function outboundNonce(address _sender, uint32 _dstEid, bytes32 _receiver) external view returns (uint64);\\n\\n function inboundPayloadHash(\\n address _receiver,\\n uint32 _srcEid,\\n bytes32 _sender,\\n uint64 _nonce\\n ) external view returns (bytes32);\\n\\n function lazyInboundNonce(address _receiver, uint32 _srcEid, bytes32 _sender) external view returns (uint64);\\n}\\n\",\"keccak256\":\"0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\ninterface IMessagingComposer {\\n event ComposeSent(address from, address to, bytes32 guid, uint16 index, bytes message);\\n event ComposeDelivered(address from, address to, bytes32 guid, uint16 index);\\n event LzComposeAlert(\\n address indexed from,\\n address indexed to,\\n address indexed executor,\\n bytes32 guid,\\n uint16 index,\\n uint256 gas,\\n uint256 value,\\n bytes message,\\n bytes extraData,\\n bytes reason\\n );\\n\\n function composeQueue(\\n address _from,\\n address _to,\\n bytes32 _guid,\\n uint16 _index\\n ) external view returns (bytes32 messageHash);\\n\\n function sendCompose(address _to, bytes32 _guid, uint16 _index, bytes calldata _message) external;\\n\\n function lzCompose(\\n address _from,\\n address _to,\\n bytes32 _guid,\\n uint16 _index,\\n bytes calldata _message,\\n bytes calldata _extraData\\n ) external payable;\\n}\\n\",\"keccak256\":\"0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\ninterface IMessagingContext {\\n function isSendingMessage() external view returns (bool);\\n\\n function getSendContext() external view returns (uint32 dstEid, address sender);\\n}\\n\",\"keccak256\":\"0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.8.0;\\n\\nimport { MessagingFee } from \\\"./ILayerZeroEndpointV2.sol\\\";\\nimport { IMessageLib } from \\\"./IMessageLib.sol\\\";\\n\\nstruct Packet {\\n uint64 nonce;\\n uint32 srcEid;\\n address sender;\\n uint32 dstEid;\\n bytes32 receiver;\\n bytes32 guid;\\n bytes message;\\n}\\n\\ninterface ISendLib is IMessageLib {\\n function send(\\n Packet calldata _packet,\\n bytes calldata _options,\\n bool _payInLzToken\\n ) external returns (MessagingFee memory, bytes memory encodedPacket);\\n\\n function quote(\\n Packet calldata _packet,\\n bytes calldata _options,\\n bool _payInLzToken\\n ) external view returns (MessagingFee memory);\\n\\n function setTreasury(address _treasury) external;\\n\\n function withdrawFee(address _to, uint256 _amount) external;\\n\\n function withdrawLzTokenFee(address _lzToken, address _to, uint256 _amount) external;\\n}\\n\",\"keccak256\":\"0xf1c07bc61e7b1dce195ed12d50f87980fbf2d63cac1326fd28287f55fe0ba625\",\"license\":\"MIT\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol\":{\"content\":\"// SPDX-License-Identifier: LZBL-1.2\\n\\npragma solidity ^0.8.20;\\n\\nlibrary AddressCast {\\n error AddressCast_InvalidSizeForAddress();\\n error AddressCast_InvalidAddress();\\n\\n function toBytes32(bytes calldata _addressBytes) internal pure returns (bytes32 result) {\\n if (_addressBytes.length > 32) revert AddressCast_InvalidAddress();\\n result = bytes32(_addressBytes);\\n unchecked {\\n uint256 offset = 32 - _addressBytes.length;\\n result = result >> (offset * 8);\\n }\\n }\\n\\n function toBytes32(address _address) internal pure returns (bytes32 result) {\\n result = bytes32(uint256(uint160(_address)));\\n }\\n\\n function toBytes(bytes32 _addressBytes32, uint256 _size) internal pure returns (bytes memory result) {\\n if (_size == 0 || _size > 32) revert AddressCast_InvalidSizeForAddress();\\n result = new bytes(_size);\\n unchecked {\\n uint256 offset = 256 - _size * 8;\\n assembly {\\n mstore(add(result, 32), shl(offset, _addressBytes32))\\n }\\n }\\n }\\n\\n function toAddress(bytes32 _addressBytes32) internal pure returns (address result) {\\n result = address(uint160(uint256(_addressBytes32)));\\n }\\n\\n function toAddress(bytes calldata _addressBytes) internal pure returns (address result) {\\n if (_addressBytes.length != 20) revert AddressCast_InvalidAddress();\\n result = address(bytes20(_addressBytes));\\n }\\n}\\n\",\"keccak256\":\"0x2ebbcaaab3554edcd41b581f1a72ac1806afbfb8047d0d47ff098f9af30d6deb\",\"license\":\"LZBL-1.2\"},\"@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol\":{\"content\":\"// SPDX-License-Identifier: LZBL-1.2\\n\\npragma solidity ^0.8.20;\\n\\nimport { Packet } from \\\"../../interfaces/ISendLib.sol\\\";\\nimport { AddressCast } from \\\"../../libs/AddressCast.sol\\\";\\n\\nlibrary PacketV1Codec {\\n using AddressCast for address;\\n using AddressCast for bytes32;\\n\\n uint8 internal constant PACKET_VERSION = 1;\\n\\n // header (version + nonce + path)\\n // version\\n uint256 private constant PACKET_VERSION_OFFSET = 0;\\n // nonce\\n uint256 private constant NONCE_OFFSET = 1;\\n // path\\n uint256 private constant SRC_EID_OFFSET = 9;\\n uint256 private constant SENDER_OFFSET = 13;\\n uint256 private constant DST_EID_OFFSET = 45;\\n uint256 private constant RECEIVER_OFFSET = 49;\\n // payload (guid + message)\\n uint256 private constant GUID_OFFSET = 81; // keccak256(nonce + path)\\n uint256 private constant MESSAGE_OFFSET = 113;\\n\\n function encode(Packet memory _packet) internal pure returns (bytes memory encodedPacket) {\\n encodedPacket = abi.encodePacked(\\n PACKET_VERSION,\\n _packet.nonce,\\n _packet.srcEid,\\n _packet.sender.toBytes32(),\\n _packet.dstEid,\\n _packet.receiver,\\n _packet.guid,\\n _packet.message\\n );\\n }\\n\\n function encodePacketHeader(Packet memory _packet) internal pure returns (bytes memory) {\\n return\\n abi.encodePacked(\\n PACKET_VERSION,\\n _packet.nonce,\\n _packet.srcEid,\\n _packet.sender.toBytes32(),\\n _packet.dstEid,\\n _packet.receiver\\n );\\n }\\n\\n function encodePayload(Packet memory _packet) internal pure returns (bytes memory) {\\n return abi.encodePacked(_packet.guid, _packet.message);\\n }\\n\\n function header(bytes calldata _packet) internal pure returns (bytes calldata) {\\n return _packet[0:GUID_OFFSET];\\n }\\n\\n function version(bytes calldata _packet) internal pure returns (uint8) {\\n return uint8(bytes1(_packet[PACKET_VERSION_OFFSET:NONCE_OFFSET]));\\n }\\n\\n function nonce(bytes calldata _packet) internal pure returns (uint64) {\\n return uint64(bytes8(_packet[NONCE_OFFSET:SRC_EID_OFFSET]));\\n }\\n\\n function srcEid(bytes calldata _packet) internal pure returns (uint32) {\\n return uint32(bytes4(_packet[SRC_EID_OFFSET:SENDER_OFFSET]));\\n }\\n\\n function sender(bytes calldata _packet) internal pure returns (bytes32) {\\n return bytes32(_packet[SENDER_OFFSET:DST_EID_OFFSET]);\\n }\\n\\n function senderAddressB20(bytes calldata _packet) internal pure returns (address) {\\n return sender(_packet).toAddress();\\n }\\n\\n function dstEid(bytes calldata _packet) internal pure returns (uint32) {\\n return uint32(bytes4(_packet[DST_EID_OFFSET:RECEIVER_OFFSET]));\\n }\\n\\n function receiver(bytes calldata _packet) internal pure returns (bytes32) {\\n return bytes32(_packet[RECEIVER_OFFSET:GUID_OFFSET]);\\n }\\n\\n function receiverB20(bytes calldata _packet) internal pure returns (address) {\\n return receiver(_packet).toAddress();\\n }\\n\\n function guid(bytes calldata _packet) internal pure returns (bytes32) {\\n return bytes32(_packet[GUID_OFFSET:MESSAGE_OFFSET]);\\n }\\n\\n function message(bytes calldata _packet) internal pure returns (bytes calldata) {\\n return bytes(_packet[MESSAGE_OFFSET:]);\\n }\\n\\n function payload(bytes calldata _packet) internal pure returns (bytes calldata) {\\n return bytes(_packet[GUID_OFFSET:]);\\n }\\n\\n function payloadHash(bytes calldata _packet) internal pure returns (bytes32) {\\n return keccak256(payload(_packet));\\n }\\n}\\n\",\"keccak256\":\"0xc84cf1bf785977fe1fbe7566eef902c2db68d0e163813ebe6c34921754802680\",\"license\":\"LZBL-1.2\"},\"@layerzerolabs/oapp-evm/contracts/oapp/OApp.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\n// @dev Import the 'MessagingFee' and 'MessagingReceipt' so it's exposed to OApp implementers\\n// solhint-disable-next-line no-unused-import\\nimport { OAppSender, MessagingFee, MessagingReceipt } from \\\"./OAppSender.sol\\\";\\n// @dev Import the 'Origin' so it's exposed to OApp implementers\\n// solhint-disable-next-line no-unused-import\\nimport { OAppReceiver, Origin } from \\\"./OAppReceiver.sol\\\";\\nimport { OAppCore } from \\\"./OAppCore.sol\\\";\\n\\n/**\\n * @title OApp\\n * @dev Abstract contract serving as the base for OApp implementation, combining OAppSender and OAppReceiver functionality.\\n */\\nabstract contract OApp is OAppSender, OAppReceiver {\\n /**\\n * @dev Constructor to initialize the OApp with the provided endpoint and owner.\\n * @param _endpoint The address of the LOCAL LayerZero endpoint.\\n * @param _delegate The delegate capable of making OApp configurations inside of the endpoint.\\n */\\n constructor(address _endpoint, address _delegate) OAppCore(_endpoint, _delegate) {}\\n\\n /**\\n * @notice Retrieves the OApp version information.\\n * @return senderVersion The version of the OAppSender.sol implementation.\\n * @return receiverVersion The version of the OAppReceiver.sol implementation.\\n */\\n function oAppVersion()\\n public\\n pure\\n virtual\\n override(OAppSender, OAppReceiver)\\n returns (uint64 senderVersion, uint64 receiverVersion)\\n {\\n return (SENDER_VERSION, RECEIVER_VERSION);\\n }\\n}\\n\",\"keccak256\":\"0xac362c4c291fad2f1511a968424b2e78a5ad502d1c867bd31da04be742aca8c5\",\"license\":\"MIT\"},\"@layerzerolabs/oapp-evm/contracts/oapp/OAppCore.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\nimport { IOAppCore, ILayerZeroEndpointV2 } from \\\"./interfaces/IOAppCore.sol\\\";\\n\\n/**\\n * @title OAppCore\\n * @dev Abstract contract implementing the IOAppCore interface with basic OApp configurations.\\n */\\nabstract contract OAppCore is IOAppCore, Ownable {\\n // The LayerZero endpoint associated with the given OApp\\n ILayerZeroEndpointV2 public immutable endpoint;\\n\\n // Mapping to store peers associated with corresponding endpoints\\n mapping(uint32 eid => bytes32 peer) public peers;\\n\\n /**\\n * @dev Constructor to initialize the OAppCore with the provided endpoint and delegate.\\n * @param _endpoint The address of the LOCAL Layer Zero endpoint.\\n * @param _delegate The delegate capable of making OApp configurations inside of the endpoint.\\n *\\n * @dev The delegate typically should be set as the owner of the contract.\\n */\\n constructor(address _endpoint, address _delegate) {\\n endpoint = ILayerZeroEndpointV2(_endpoint);\\n\\n if (_delegate == address(0)) revert InvalidDelegate();\\n endpoint.setDelegate(_delegate);\\n }\\n\\n /**\\n * @notice Sets the peer address (OApp instance) for a corresponding endpoint.\\n * @param _eid The endpoint ID.\\n * @param _peer The address of the peer to be associated with the corresponding endpoint.\\n *\\n * @dev Only the owner/admin of the OApp can call this function.\\n * @dev Indicates that the peer is trusted to send LayerZero messages to this OApp.\\n * @dev Set this to bytes32(0) to remove the peer address.\\n * @dev Peer is a bytes32 to accommodate non-evm chains.\\n */\\n function setPeer(uint32 _eid, bytes32 _peer) public virtual onlyOwner {\\n _setPeer(_eid, _peer);\\n }\\n\\n /**\\n * @notice Sets the peer address (OApp instance) for a corresponding endpoint.\\n * @param _eid The endpoint ID.\\n * @param _peer The address of the peer to be associated with the corresponding endpoint.\\n *\\n * @dev Indicates that the peer is trusted to send LayerZero messages to this OApp.\\n * @dev Set this to bytes32(0) to remove the peer address.\\n * @dev Peer is a bytes32 to accommodate non-evm chains.\\n */\\n function _setPeer(uint32 _eid, bytes32 _peer) internal virtual {\\n peers[_eid] = _peer;\\n emit PeerSet(_eid, _peer);\\n }\\n\\n /**\\n * @notice Internal function to get the peer address associated with a specific endpoint; reverts if NOT set.\\n * ie. the peer is set to bytes32(0).\\n * @param _eid The endpoint ID.\\n * @return peer The address of the peer associated with the specified endpoint.\\n */\\n function _getPeerOrRevert(uint32 _eid) internal view virtual returns (bytes32) {\\n bytes32 peer = peers[_eid];\\n if (peer == bytes32(0)) revert NoPeer(_eid);\\n return peer;\\n }\\n\\n /**\\n * @notice Sets the delegate address for the OApp.\\n * @param _delegate The address of the delegate to be set.\\n *\\n * @dev Only the owner/admin of the OApp can call this function.\\n * @dev Provides the ability for a delegate to set configs, on behalf of the OApp, directly on the Endpoint contract.\\n */\\n function setDelegate(address _delegate) public onlyOwner {\\n endpoint.setDelegate(_delegate);\\n }\\n}\\n\",\"keccak256\":\"0x13a9c2d1d2c1f086b8624f2e84c4a4702212daae36f701d92bb915b535cbe4cc\",\"license\":\"MIT\"},\"@layerzerolabs/oapp-evm/contracts/oapp/OAppReceiver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\nimport { IOAppReceiver, Origin } from \\\"./interfaces/IOAppReceiver.sol\\\";\\nimport { OAppCore } from \\\"./OAppCore.sol\\\";\\n\\n/**\\n * @title OAppReceiver\\n * @dev Abstract contract implementing the ILayerZeroReceiver interface and extending OAppCore for OApp receivers.\\n */\\nabstract contract OAppReceiver is IOAppReceiver, OAppCore {\\n // Custom error message for when the caller is not the registered endpoint/\\n error OnlyEndpoint(address addr);\\n\\n // @dev The version of the OAppReceiver implementation.\\n // @dev Version is bumped when changes are made to this contract.\\n uint64 internal constant RECEIVER_VERSION = 2;\\n\\n /**\\n * @notice Retrieves the OApp version information.\\n * @return senderVersion The version of the OAppSender.sol contract.\\n * @return receiverVersion The version of the OAppReceiver.sol contract.\\n *\\n * @dev Providing 0 as the default for OAppSender version. Indicates that the OAppSender is not implemented.\\n * ie. this is a RECEIVE only OApp.\\n * @dev If the OApp uses both OAppSender and OAppReceiver, then this needs to be override returning the correct versions.\\n */\\n function oAppVersion() public view virtual returns (uint64 senderVersion, uint64 receiverVersion) {\\n return (0, RECEIVER_VERSION);\\n }\\n\\n /**\\n * @notice Indicates whether an address is an approved composeMsg sender to the Endpoint.\\n * @dev _origin The origin information containing the source endpoint and sender address.\\n * - srcEid: The source chain endpoint ID.\\n * - sender: The sender address on the src chain.\\n * - nonce: The nonce of the message.\\n * @dev _message The lzReceive payload.\\n * @param _sender The sender address.\\n * @return isSender Is a valid sender.\\n *\\n * @dev Applications can optionally choose to implement separate composeMsg senders that are NOT the bridging layer.\\n * @dev The default sender IS the OAppReceiver implementer.\\n */\\n function isComposeMsgSender(\\n Origin calldata /*_origin*/,\\n bytes calldata /*_message*/,\\n address _sender\\n ) public view virtual returns (bool) {\\n return _sender == address(this);\\n }\\n\\n /**\\n * @notice Checks if the path initialization is allowed based on the provided origin.\\n * @param origin The origin information containing the source endpoint and sender address.\\n * @return Whether the path has been initialized.\\n *\\n * @dev This indicates to the endpoint that the OApp has enabled msgs for this particular path to be received.\\n * @dev This defaults to assuming if a peer has been set, its initialized.\\n * Can be overridden by the OApp if there is other logic to determine this.\\n */\\n function allowInitializePath(Origin calldata origin) public view virtual returns (bool) {\\n return peers[origin.srcEid] == origin.sender;\\n }\\n\\n /**\\n * @notice Retrieves the next nonce for a given source endpoint and sender address.\\n * @dev _srcEid The source endpoint ID.\\n * @dev _sender The sender address.\\n * @return nonce The next nonce.\\n *\\n * @dev The path nonce starts from 1. If 0 is returned it means that there is NO nonce ordered enforcement.\\n * @dev Is required by the off-chain executor to determine the OApp expects msg execution is ordered.\\n * @dev This is also enforced by the OApp.\\n * @dev By default this is NOT enabled. ie. nextNonce is hardcoded to return 0.\\n */\\n function nextNonce(uint32 /*_srcEid*/, bytes32 /*_sender*/) public view virtual returns (uint64 nonce) {\\n return 0;\\n }\\n\\n /**\\n * @dev Entry point for receiving messages or packets from the endpoint.\\n * @param _origin The origin information containing the source endpoint and sender address.\\n * - srcEid: The source chain endpoint ID.\\n * - sender: The sender address on the src chain.\\n * - nonce: The nonce of the message.\\n * @param _guid The unique identifier for the received LayerZero message.\\n * @param _message The payload of the received message.\\n * @param _executor The address of the executor for the received message.\\n * @param _extraData Additional arbitrary data provided by the corresponding executor.\\n *\\n * @dev Entry point for receiving msg/packet from the LayerZero endpoint.\\n */\\n function lzReceive(\\n Origin calldata _origin,\\n bytes32 _guid,\\n bytes calldata _message,\\n address _executor,\\n bytes calldata _extraData\\n ) public payable virtual {\\n // Ensures that only the endpoint can attempt to lzReceive() messages to this OApp.\\n if (address(endpoint) != msg.sender) revert OnlyEndpoint(msg.sender);\\n\\n // Ensure that the sender matches the expected peer for the source endpoint.\\n if (_getPeerOrRevert(_origin.srcEid) != _origin.sender) revert OnlyPeer(_origin.srcEid, _origin.sender);\\n\\n // Call the internal OApp implementation of lzReceive.\\n _lzReceive(_origin, _guid, _message, _executor, _extraData);\\n }\\n\\n /**\\n * @dev Internal function to implement lzReceive logic without needing to copy the basic parameter validation.\\n */\\n function _lzReceive(\\n Origin calldata _origin,\\n bytes32 _guid,\\n bytes calldata _message,\\n address _executor,\\n bytes calldata _extraData\\n ) internal virtual;\\n}\\n\",\"keccak256\":\"0x0174e9f1ec4cefe4b5adc26c392269c699b9ff75965364e5b7264426a462c70b\",\"license\":\"MIT\"},\"@layerzerolabs/oapp-evm/contracts/oapp/OAppSender.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\nimport { SafeERC20, IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\nimport { MessagingParams, MessagingFee, MessagingReceipt } from \\\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\\\";\\nimport { OAppCore } from \\\"./OAppCore.sol\\\";\\n\\n/**\\n * @title OAppSender\\n * @dev Abstract contract implementing the OAppSender functionality for sending messages to a LayerZero endpoint.\\n */\\nabstract contract OAppSender is OAppCore {\\n using SafeERC20 for IERC20;\\n\\n // Custom error messages\\n error NotEnoughNative(uint256 msgValue);\\n error LzTokenUnavailable();\\n\\n // @dev The version of the OAppSender implementation.\\n // @dev Version is bumped when changes are made to this contract.\\n uint64 internal constant SENDER_VERSION = 1;\\n\\n /**\\n * @notice Retrieves the OApp version information.\\n * @return senderVersion The version of the OAppSender.sol contract.\\n * @return receiverVersion The version of the OAppReceiver.sol contract.\\n *\\n * @dev Providing 0 as the default for OAppReceiver version. Indicates that the OAppReceiver is not implemented.\\n * ie. this is a SEND only OApp.\\n * @dev If the OApp uses both OAppSender and OAppReceiver, then this needs to be override returning the correct versions\\n */\\n function oAppVersion() public view virtual returns (uint64 senderVersion, uint64 receiverVersion) {\\n return (SENDER_VERSION, 0);\\n }\\n\\n /**\\n * @dev Internal function to interact with the LayerZero EndpointV2.quote() for fee calculation.\\n * @param _dstEid The destination endpoint ID.\\n * @param _message The message payload.\\n * @param _options Additional options for the message.\\n * @param _payInLzToken Flag indicating whether to pay the fee in LZ tokens.\\n * @return fee The calculated MessagingFee for the message.\\n * - nativeFee: The native fee for the message.\\n * - lzTokenFee: The LZ token fee for the message.\\n */\\n function _quote(\\n uint32 _dstEid,\\n bytes memory _message,\\n bytes memory _options,\\n bool _payInLzToken\\n ) internal view virtual returns (MessagingFee memory fee) {\\n return\\n endpoint.quote(\\n MessagingParams(_dstEid, _getPeerOrRevert(_dstEid), _message, _options, _payInLzToken),\\n address(this)\\n );\\n }\\n\\n /**\\n * @dev Internal function to interact with the LayerZero EndpointV2.send() for sending a message.\\n * @param _dstEid The destination endpoint ID.\\n * @param _message The message payload.\\n * @param _options Additional options for the message.\\n * @param _fee The calculated LayerZero fee for the message.\\n * - nativeFee: The native fee.\\n * - lzTokenFee: The lzToken fee.\\n * @param _refundAddress The address to receive any excess fee values sent to the endpoint.\\n * @return receipt The receipt for the sent message.\\n * - guid: The unique identifier for the sent message.\\n * - nonce: The nonce of the sent message.\\n * - fee: The LayerZero fee incurred for the message.\\n */\\n function _lzSend(\\n uint32 _dstEid,\\n bytes memory _message,\\n bytes memory _options,\\n MessagingFee memory _fee,\\n address _refundAddress\\n ) internal virtual returns (MessagingReceipt memory receipt) {\\n // @dev Push corresponding fees to the endpoint, any excess is sent back to the _refundAddress from the endpoint.\\n uint256 messageValue = _payNative(_fee.nativeFee);\\n if (_fee.lzTokenFee > 0) _payLzToken(_fee.lzTokenFee);\\n\\n return\\n // solhint-disable-next-line check-send-result\\n endpoint.send{ value: messageValue }(\\n MessagingParams(_dstEid, _getPeerOrRevert(_dstEid), _message, _options, _fee.lzTokenFee > 0),\\n _refundAddress\\n );\\n }\\n\\n /**\\n * @dev Internal function to pay the native fee associated with the message.\\n * @param _nativeFee The native fee to be paid.\\n * @return nativeFee The amount of native currency paid.\\n *\\n * @dev If the OApp needs to initiate MULTIPLE LayerZero messages in a single transaction,\\n * this will need to be overridden because msg.value would contain multiple lzFees.\\n * @dev Should be overridden in the event the LayerZero endpoint requires a different native currency.\\n * @dev Some EVMs use an ERC20 as a method for paying transactions/gasFees.\\n * @dev The endpoint is EITHER/OR, ie. it will NOT support both types of native payment at a time.\\n */\\n function _payNative(uint256 _nativeFee) internal virtual returns (uint256 nativeFee) {\\n if (msg.value != _nativeFee) revert NotEnoughNative(msg.value);\\n return _nativeFee;\\n }\\n\\n /**\\n * @dev Internal function to pay the LZ token fee associated with the message.\\n * @param _lzTokenFee The LZ token fee to be paid.\\n *\\n * @dev If the caller is trying to pay in the specified lzToken, then the lzTokenFee is passed to the endpoint.\\n * @dev Any excess sent, is passed back to the specified _refundAddress in the _lzSend().\\n */\\n function _payLzToken(uint256 _lzTokenFee) internal virtual {\\n // @dev Cannot cache the token because it is not immutable in the endpoint.\\n address lzToken = endpoint.lzToken();\\n if (lzToken == address(0)) revert LzTokenUnavailable();\\n\\n // Pay LZ token fee by sending tokens to the endpoint.\\n IERC20(lzToken).safeTransferFrom(msg.sender, address(endpoint), _lzTokenFee);\\n }\\n}\\n\",\"keccak256\":\"0x518cf4adca601923ed4baa6619846a253ea32b8d8775f8bc1faa3dfac7f67c20\",\"license\":\"MIT\"},\"@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppCore.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\nimport { ILayerZeroEndpointV2 } from \\\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\\\";\\n\\n/**\\n * @title IOAppCore\\n */\\ninterface IOAppCore {\\n // Custom error messages\\n error OnlyPeer(uint32 eid, bytes32 sender);\\n error NoPeer(uint32 eid);\\n error InvalidEndpointCall();\\n error InvalidDelegate();\\n\\n // Event emitted when a peer (OApp) is set for a corresponding endpoint\\n event PeerSet(uint32 eid, bytes32 peer);\\n\\n /**\\n * @notice Retrieves the OApp version information.\\n * @return senderVersion The version of the OAppSender.sol contract.\\n * @return receiverVersion The version of the OAppReceiver.sol contract.\\n */\\n function oAppVersion() external view returns (uint64 senderVersion, uint64 receiverVersion);\\n\\n /**\\n * @notice Retrieves the LayerZero endpoint associated with the OApp.\\n * @return iEndpoint The LayerZero endpoint as an interface.\\n */\\n function endpoint() external view returns (ILayerZeroEndpointV2 iEndpoint);\\n\\n /**\\n * @notice Retrieves the peer (OApp) associated with a corresponding endpoint.\\n * @param _eid The endpoint ID.\\n * @return peer The peer address (OApp instance) associated with the corresponding endpoint.\\n */\\n function peers(uint32 _eid) external view returns (bytes32 peer);\\n\\n /**\\n * @notice Sets the peer address (OApp instance) for a corresponding endpoint.\\n * @param _eid The endpoint ID.\\n * @param _peer The address of the peer to be associated with the corresponding endpoint.\\n */\\n function setPeer(uint32 _eid, bytes32 _peer) external;\\n\\n /**\\n * @notice Sets the delegate address for the OApp Core.\\n * @param _delegate The address of the delegate to be set.\\n */\\n function setDelegate(address _delegate) external;\\n}\\n\",\"keccak256\":\"0x40e49f2de74506e1da5dcaed53a39853f691647f4ceb0fccc8f49a68d3f47c58\",\"license\":\"MIT\"},\"@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppMsgInspector.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @title IOAppMsgInspector\\n * @dev Interface for the OApp Message Inspector, allowing examination of message and options contents.\\n */\\ninterface IOAppMsgInspector {\\n // Custom error message for inspection failure\\n error InspectionFailed(bytes message, bytes options);\\n\\n /**\\n * @notice Allows the inspector to examine LayerZero message contents and optionally throw a revert if invalid.\\n * @param _message The message payload to be inspected.\\n * @param _options Additional options or parameters for inspection.\\n * @return valid A boolean indicating whether the inspection passed (true) or failed (false).\\n *\\n * @dev Optionally done as a revert, OR use the boolean provided to handle the failure.\\n */\\n function inspect(bytes calldata _message, bytes calldata _options) external view returns (bool valid);\\n}\\n\",\"keccak256\":\"0x339654e699043c400cad92de209aa23855ce10211c31cf4114042cc5224d3b7c\",\"license\":\"MIT\"},\"@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppOptionsType3.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Struct representing enforced option parameters.\\n */\\nstruct EnforcedOptionParam {\\n uint32 eid; // Endpoint ID\\n uint16 msgType; // Message Type\\n bytes options; // Additional options\\n}\\n\\n/**\\n * @title IOAppOptionsType3\\n * @dev Interface for the OApp with Type 3 Options, allowing the setting and combining of enforced options.\\n */\\ninterface IOAppOptionsType3 {\\n // Custom error message for invalid options\\n error InvalidOptions(bytes options);\\n\\n // Event emitted when enforced options are set\\n event EnforcedOptionSet(EnforcedOptionParam[] _enforcedOptions);\\n\\n /**\\n * @notice Sets enforced options for specific endpoint and message type combinations.\\n * @param _enforcedOptions An array of EnforcedOptionParam structures specifying enforced options.\\n */\\n function setEnforcedOptions(EnforcedOptionParam[] calldata _enforcedOptions) external;\\n\\n /**\\n * @notice Combines options for a given endpoint and message type.\\n * @param _eid The endpoint ID.\\n * @param _msgType The OApp message type.\\n * @param _extraOptions Additional options passed by the caller.\\n * @return options The combination of caller specified options AND enforced options.\\n */\\n function combineOptions(\\n uint32 _eid,\\n uint16 _msgType,\\n bytes calldata _extraOptions\\n ) external view returns (bytes memory options);\\n}\\n\",\"keccak256\":\"0x9fc08a51e9d7c9c710c4eb26f84fe77228305ad7da63fa486ff24ebf2f3bc461\",\"license\":\"MIT\"},\"@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppReceiver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.20;\\n\\nimport { ILayerZeroReceiver, Origin } from \\\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol\\\";\\n\\ninterface IOAppReceiver is ILayerZeroReceiver {\\n /**\\n * @notice Indicates whether an address is an approved composeMsg sender to the Endpoint.\\n * @param _origin The origin information containing the source endpoint and sender address.\\n * - srcEid: The source chain endpoint ID.\\n * - sender: The sender address on the src chain.\\n * - nonce: The nonce of the message.\\n * @param _message The lzReceive payload.\\n * @param _sender The sender address.\\n * @return isSender Is a valid sender.\\n *\\n * @dev Applications can optionally choose to implement a separate composeMsg sender that is NOT the bridging layer.\\n * @dev The default sender IS the OAppReceiver implementer.\\n */\\n function isComposeMsgSender(\\n Origin calldata _origin,\\n bytes calldata _message,\\n address _sender\\n ) external view returns (bool isSender);\\n}\\n\",\"keccak256\":\"0xd26135185e19b3732746d4a9e2923e896f28dec8664bab161faea2ee26fcdc3d\",\"license\":\"MIT\"},\"@layerzerolabs/oapp-evm/contracts/oapp/libs/OAppOptionsType3.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\nimport { IOAppOptionsType3, EnforcedOptionParam } from \\\"../interfaces/IOAppOptionsType3.sol\\\";\\n\\n/**\\n * @title OAppOptionsType3\\n * @dev Abstract contract implementing the IOAppOptionsType3 interface with type 3 options.\\n */\\nabstract contract OAppOptionsType3 is IOAppOptionsType3, Ownable {\\n uint16 internal constant OPTION_TYPE_3 = 3;\\n\\n // @dev The \\\"msgType\\\" should be defined in the child contract.\\n mapping(uint32 eid => mapping(uint16 msgType => bytes enforcedOption)) public enforcedOptions;\\n\\n /**\\n * @dev Sets the enforced options for specific endpoint and message type combinations.\\n * @param _enforcedOptions An array of EnforcedOptionParam structures specifying enforced options.\\n *\\n * @dev Only the owner/admin of the OApp can call this function.\\n * @dev Provides a way for the OApp to enforce things like paying for PreCrime, AND/OR minimum dst lzReceive gas amounts etc.\\n * @dev These enforced options can vary as the potential options/execution on the remote may differ as per the msgType.\\n * eg. Amount of lzReceive() gas necessary to deliver a lzCompose() message adds overhead you dont want to pay\\n * if you are only making a standard LayerZero message ie. lzReceive() WITHOUT sendCompose().\\n */\\n function setEnforcedOptions(EnforcedOptionParam[] calldata _enforcedOptions) public virtual onlyOwner {\\n _setEnforcedOptions(_enforcedOptions);\\n }\\n\\n /**\\n * @dev Sets the enforced options for specific endpoint and message type combinations.\\n * @param _enforcedOptions An array of EnforcedOptionParam structures specifying enforced options.\\n *\\n * @dev Provides a way for the OApp to enforce things like paying for PreCrime, AND/OR minimum dst lzReceive gas amounts etc.\\n * @dev These enforced options can vary as the potential options/execution on the remote may differ as per the msgType.\\n * eg. Amount of lzReceive() gas necessary to deliver a lzCompose() message adds overhead you dont want to pay\\n * if you are only making a standard LayerZero message ie. lzReceive() WITHOUT sendCompose().\\n */\\n function _setEnforcedOptions(EnforcedOptionParam[] memory _enforcedOptions) internal virtual {\\n for (uint256 i = 0; i < _enforcedOptions.length; i++) {\\n // @dev Enforced options are only available for optionType 3, as type 1 and 2 dont support combining.\\n _assertOptionsType3(_enforcedOptions[i].options);\\n enforcedOptions[_enforcedOptions[i].eid][_enforcedOptions[i].msgType] = _enforcedOptions[i].options;\\n }\\n\\n emit EnforcedOptionSet(_enforcedOptions);\\n }\\n\\n /**\\n * @notice Combines options for a given endpoint and message type.\\n * @param _eid The endpoint ID.\\n * @param _msgType The OAPP message type.\\n * @param _extraOptions Additional options passed by the caller.\\n * @return options The combination of caller specified options AND enforced options.\\n *\\n * @dev If there is an enforced lzReceive option:\\n * - {gasLimit: 200k, msg.value: 1 ether} AND a caller supplies a lzReceive option: {gasLimit: 100k, msg.value: 0.5 ether}\\n * - The resulting options will be {gasLimit: 300k, msg.value: 1.5 ether} when the message is executed on the remote lzReceive() function.\\n * @dev This presence of duplicated options is handled off-chain in the verifier/executor.\\n */\\n function combineOptions(\\n uint32 _eid,\\n uint16 _msgType,\\n bytes calldata _extraOptions\\n ) public view virtual returns (bytes memory) {\\n bytes memory enforced = enforcedOptions[_eid][_msgType];\\n\\n // No enforced options, pass whatever the caller supplied, even if it's empty or legacy type 1/2 options.\\n if (enforced.length == 0) return _extraOptions;\\n\\n // No caller options, return enforced\\n if (_extraOptions.length == 0) return enforced;\\n\\n // @dev If caller provided _extraOptions, must be type 3 as its the ONLY type that can be combined.\\n if (_extraOptions.length >= 2) {\\n _assertOptionsType3(_extraOptions);\\n // @dev Remove the first 2 bytes containing the type from the _extraOptions and combine with enforced.\\n return bytes.concat(enforced, _extraOptions[2:]);\\n }\\n\\n // No valid set of options was found.\\n revert InvalidOptions(_extraOptions);\\n }\\n\\n /**\\n * @dev Internal function to assert that options are of type 3.\\n * @param _options The options to be checked.\\n */\\n function _assertOptionsType3(bytes memory _options) internal pure virtual {\\n uint16 optionsType;\\n assembly {\\n optionsType := mload(add(_options, 2))\\n }\\n if (optionsType != OPTION_TYPE_3) revert InvalidOptions(_options);\\n }\\n}\\n\",\"keccak256\":\"0x5275636cd47e660a2fdf6c7fe9d41ff3cc866b785cc8a9d88c1b8ca983509f01\",\"license\":\"MIT\"},\"@layerzerolabs/oapp-evm/contracts/precrime/OAppPreCrimeSimulator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\nimport { IPreCrime } from \\\"./interfaces/IPreCrime.sol\\\";\\nimport { IOAppPreCrimeSimulator, InboundPacket, Origin } from \\\"./interfaces/IOAppPreCrimeSimulator.sol\\\";\\n\\n/**\\n * @title OAppPreCrimeSimulator\\n * @dev Abstract contract serving as the base for preCrime simulation functionality in an OApp.\\n */\\nabstract contract OAppPreCrimeSimulator is IOAppPreCrimeSimulator, Ownable {\\n // The address of the preCrime implementation.\\n address public preCrime;\\n\\n /**\\n * @dev Retrieves the address of the OApp contract.\\n * @return The address of the OApp contract.\\n *\\n * @dev The simulator contract is the base contract for the OApp by default.\\n * @dev If the simulator is a separate contract, override this function.\\n */\\n function oApp() external view virtual returns (address) {\\n return address(this);\\n }\\n\\n /**\\n * @dev Sets the preCrime contract address.\\n * @param _preCrime The address of the preCrime contract.\\n */\\n function setPreCrime(address _preCrime) public virtual onlyOwner {\\n preCrime = _preCrime;\\n emit PreCrimeSet(_preCrime);\\n }\\n\\n /**\\n * @dev Interface for pre-crime simulations. Always reverts at the end with the simulation results.\\n * @param _packets An array of InboundPacket objects representing received packets to be delivered.\\n *\\n * @dev WARNING: MUST revert at the end with the simulation results.\\n * @dev Gives the preCrime implementation the ability to mock sending packets to the lzReceive function,\\n * WITHOUT actually executing them.\\n */\\n function lzReceiveAndRevert(InboundPacket[] calldata _packets) public payable virtual {\\n for (uint256 i = 0; i < _packets.length; i++) {\\n InboundPacket calldata packet = _packets[i];\\n\\n // Ignore packets that are not from trusted peers.\\n if (!isPeer(packet.origin.srcEid, packet.origin.sender)) continue;\\n\\n // @dev Because a verifier is calling this function, it doesnt have access to executor params:\\n // - address _executor\\n // - bytes calldata _extraData\\n // preCrime will NOT work for OApps that rely on these two parameters inside of their _lzReceive().\\n // They are instead stubbed to default values, address(0) and bytes(\\\"\\\")\\n // @dev Calling this.lzReceiveSimulate removes ability for assembly return 0 callstack exit,\\n // which would cause the revert to be ignored.\\n this.lzReceiveSimulate{ value: packet.value }(\\n packet.origin,\\n packet.guid,\\n packet.message,\\n packet.executor,\\n packet.extraData\\n );\\n }\\n\\n // @dev Revert with the simulation results. msg.sender must implement IPreCrime.buildSimulationResult().\\n revert SimulationResult(IPreCrime(msg.sender).buildSimulationResult());\\n }\\n\\n /**\\n * @dev Is effectively an internal function because msg.sender must be address(this).\\n * Allows resetting the call stack for 'internal' calls.\\n * @param _origin The origin information containing the source endpoint and sender address.\\n * - srcEid: The source chain endpoint ID.\\n * - sender: The sender address on the src chain.\\n * - nonce: The nonce of the message.\\n * @param _guid The unique identifier of the packet.\\n * @param _message The message payload of the packet.\\n * @param _executor The executor address for the packet.\\n * @param _extraData Additional data for the packet.\\n */\\n function lzReceiveSimulate(\\n Origin calldata _origin,\\n bytes32 _guid,\\n bytes calldata _message,\\n address _executor,\\n bytes calldata _extraData\\n ) external payable virtual {\\n // @dev Ensure ONLY can be called 'internally'.\\n if (msg.sender != address(this)) revert OnlySelf();\\n _lzReceiveSimulate(_origin, _guid, _message, _executor, _extraData);\\n }\\n\\n /**\\n * @dev Internal function to handle the OAppPreCrimeSimulator simulated receive.\\n * @param _origin The origin information.\\n * - srcEid: The source chain endpoint ID.\\n * - sender: The sender address from the src chain.\\n * - nonce: The nonce of the LayerZero message.\\n * @param _guid The GUID of the LayerZero message.\\n * @param _message The LayerZero message.\\n * @param _executor The address of the off-chain executor.\\n * @param _extraData Arbitrary data passed by the msg executor.\\n *\\n * @dev Enables the preCrime simulator to mock sending lzReceive() messages,\\n * routes the msg down from the OAppPreCrimeSimulator, and back up to the OAppReceiver.\\n */\\n function _lzReceiveSimulate(\\n Origin calldata _origin,\\n bytes32 _guid,\\n bytes calldata _message,\\n address _executor,\\n bytes calldata _extraData\\n ) internal virtual;\\n\\n /**\\n * @dev checks if the specified peer is considered 'trusted' by the OApp.\\n * @param _eid The endpoint Id to check.\\n * @param _peer The peer to check.\\n * @return Whether the peer passed is considered 'trusted' by the OApp.\\n */\\n function isPeer(uint32 _eid, bytes32 _peer) public view virtual returns (bool);\\n}\\n\",\"keccak256\":\"0x205a0abfd8b3c9af2740769f251381b84999b8e9347f3cd50de3ef8290a17750\",\"license\":\"MIT\"},\"@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IOAppPreCrimeSimulator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\n// @dev Import the Origin so it's exposed to OAppPreCrimeSimulator implementers.\\n// solhint-disable-next-line no-unused-import\\nimport { InboundPacket, Origin } from \\\"../libs/Packet.sol\\\";\\n\\n/**\\n * @title IOAppPreCrimeSimulator Interface\\n * @dev Interface for the preCrime simulation functionality in an OApp.\\n */\\ninterface IOAppPreCrimeSimulator {\\n // @dev simulation result used in PreCrime implementation\\n error SimulationResult(bytes result);\\n error OnlySelf();\\n\\n /**\\n * @dev Emitted when the preCrime contract address is set.\\n * @param preCrimeAddress The address of the preCrime contract.\\n */\\n event PreCrimeSet(address preCrimeAddress);\\n\\n /**\\n * @dev Retrieves the address of the preCrime contract implementation.\\n * @return The address of the preCrime contract.\\n */\\n function preCrime() external view returns (address);\\n\\n /**\\n * @dev Retrieves the address of the OApp contract.\\n * @return The address of the OApp contract.\\n */\\n function oApp() external view returns (address);\\n\\n /**\\n * @dev Sets the preCrime contract address.\\n * @param _preCrime The address of the preCrime contract.\\n */\\n function setPreCrime(address _preCrime) external;\\n\\n /**\\n * @dev Mocks receiving a packet, then reverts with a series of data to infer the state/result.\\n * @param _packets An array of LayerZero InboundPacket objects representing received packets.\\n */\\n function lzReceiveAndRevert(InboundPacket[] calldata _packets) external payable;\\n\\n /**\\n * @dev checks if the specified peer is considered 'trusted' by the OApp.\\n * @param _eid The endpoint Id to check.\\n * @param _peer The peer to check.\\n * @return Whether the peer passed is considered 'trusted' by the OApp.\\n */\\n function isPeer(uint32 _eid, bytes32 _peer) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x5d24db150949ea8e6437178e65a942e8c8b7f332e5daf32750f56b23b35b5bb2\",\"license\":\"MIT\"},\"@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IPreCrime.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\nstruct PreCrimePeer {\\n uint32 eid;\\n bytes32 preCrime;\\n bytes32 oApp;\\n}\\n\\n// TODO not done yet\\ninterface IPreCrime {\\n error OnlyOffChain();\\n\\n // for simulate()\\n error PacketOversize(uint256 max, uint256 actual);\\n error PacketUnsorted();\\n error SimulationFailed(bytes reason);\\n\\n // for preCrime()\\n error SimulationResultNotFound(uint32 eid);\\n error InvalidSimulationResult(uint32 eid, bytes reason);\\n error CrimeFound(bytes crime);\\n\\n function getConfig(bytes[] calldata _packets, uint256[] calldata _packetMsgValues) external returns (bytes memory);\\n\\n function simulate(\\n bytes[] calldata _packets,\\n uint256[] calldata _packetMsgValues\\n ) external payable returns (bytes memory);\\n\\n function buildSimulationResult() external view returns (bytes memory);\\n\\n function preCrime(\\n bytes[] calldata _packets,\\n uint256[] calldata _packetMsgValues,\\n bytes[] calldata _simulations\\n ) external;\\n\\n function version() external view returns (uint64 major, uint8 minor);\\n}\\n\",\"keccak256\":\"0xc8d869f27ef8ceb2e13fdf6a70682fd4dee3f90c4924eb8e125bc1e66cb6af84\",\"license\":\"MIT\"},\"@layerzerolabs/oapp-evm/contracts/precrime/libs/Packet.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\nimport { Origin } from \\\"@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\\\";\\nimport { PacketV1Codec } from \\\"@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol\\\";\\n\\n/**\\n * @title InboundPacket\\n * @dev Structure representing an inbound packet received by the contract.\\n */\\nstruct InboundPacket {\\n Origin origin; // Origin information of the packet.\\n uint32 dstEid; // Destination endpointId of the packet.\\n address receiver; // Receiver address for the packet.\\n bytes32 guid; // Unique identifier of the packet.\\n uint256 value; // msg.value of the packet.\\n address executor; // Executor address for the packet.\\n bytes message; // Message payload of the packet.\\n bytes extraData; // Additional arbitrary data for the packet.\\n}\\n\\n/**\\n * @title PacketDecoder\\n * @dev Library for decoding LayerZero packets.\\n */\\nlibrary PacketDecoder {\\n using PacketV1Codec for bytes;\\n\\n /**\\n * @dev Decode an inbound packet from the given packet data.\\n * @param _packet The packet data to decode.\\n * @return packet An InboundPacket struct representing the decoded packet.\\n */\\n function decode(bytes calldata _packet) internal pure returns (InboundPacket memory packet) {\\n packet.origin = Origin(_packet.srcEid(), _packet.sender(), _packet.nonce());\\n packet.dstEid = _packet.dstEid();\\n packet.receiver = _packet.receiverB20();\\n packet.guid = _packet.guid();\\n packet.message = _packet.message();\\n }\\n\\n /**\\n * @dev Decode multiple inbound packets from the given packet data and associated message values.\\n * @param _packets An array of packet data to decode.\\n * @param _packetMsgValues An array of associated message values for each packet.\\n * @return packets An array of InboundPacket structs representing the decoded packets.\\n */\\n function decode(\\n bytes[] calldata _packets,\\n uint256[] memory _packetMsgValues\\n ) internal pure returns (InboundPacket[] memory packets) {\\n packets = new InboundPacket[](_packets.length);\\n for (uint256 i = 0; i < _packets.length; i++) {\\n bytes calldata packet = _packets[i];\\n packets[i] = PacketDecoder.decode(packet);\\n // @dev Allows the verifier to specify the msg.value that gets passed in lzReceive.\\n packets[i].value = _packetMsgValues[i];\\n }\\n }\\n}\\n\",\"keccak256\":\"0xcb2fb1c5b2eb3731de78b479b9c2ab3bba326fe0b0b3a008590f18e881e457a6\",\"license\":\"MIT\"},\"@layerzerolabs/oft-evm/contracts/OFT.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\nimport { ERC20 } from \\\"@openzeppelin/contracts/token/ERC20/ERC20.sol\\\";\\nimport { IOFT, OFTCore } from \\\"./OFTCore.sol\\\";\\n\\n/**\\n * @title OFT Contract\\n * @dev OFT is an ERC-20 token that extends the functionality of the OFTCore contract.\\n */\\nabstract contract OFT is OFTCore, ERC20 {\\n /**\\n * @dev Constructor for the OFT contract.\\n * @param _name The name of the OFT.\\n * @param _symbol The symbol of the OFT.\\n * @param _lzEndpoint The LayerZero endpoint address.\\n * @param _delegate The delegate capable of making OApp configurations inside of the endpoint.\\n */\\n constructor(\\n string memory _name,\\n string memory _symbol,\\n address _lzEndpoint,\\n address _delegate\\n ) ERC20(_name, _symbol) OFTCore(decimals(), _lzEndpoint, _delegate) {}\\n\\n /**\\n * @dev Retrieves the address of the underlying ERC20 implementation.\\n * @return The address of the OFT token.\\n *\\n * @dev In the case of OFT, address(this) and erc20 are the same contract.\\n */\\n function token() public view returns (address) {\\n return address(this);\\n }\\n\\n /**\\n * @notice Indicates whether the OFT contract requires approval of the 'token()' to send.\\n * @return requiresApproval Needs approval of the underlying token implementation.\\n *\\n * @dev In the case of OFT where the contract IS the token, approval is NOT required.\\n */\\n function approvalRequired() external pure virtual returns (bool) {\\n return false;\\n }\\n\\n /**\\n * @dev Burns tokens from the sender's specified balance.\\n * @param _from The address to debit the tokens from.\\n * @param _amountLD The amount of tokens to send in local decimals.\\n * @param _minAmountLD The minimum amount to send in local decimals.\\n * @param _dstEid The destination chain ID.\\n * @return amountSentLD The amount sent in local decimals.\\n * @return amountReceivedLD The amount received in local decimals on the remote.\\n */\\n function _debit(\\n address _from,\\n uint256 _amountLD,\\n uint256 _minAmountLD,\\n uint32 _dstEid\\n ) internal virtual override returns (uint256 amountSentLD, uint256 amountReceivedLD) {\\n (amountSentLD, amountReceivedLD) = _debitView(_amountLD, _minAmountLD, _dstEid);\\n\\n // @dev In NON-default OFT, amountSentLD could be 100, with a 10% fee, the amountReceivedLD amount is 90,\\n // therefore amountSentLD CAN differ from amountReceivedLD.\\n\\n // @dev Default OFT burns on src.\\n _burn(_from, amountSentLD);\\n }\\n\\n /**\\n * @dev Credits tokens to the specified address.\\n * @param _to The address to credit the tokens to.\\n * @param _amountLD The amount of tokens to credit in local decimals.\\n * @dev _srcEid The source chain ID.\\n * @return amountReceivedLD The amount of tokens ACTUALLY received in local decimals.\\n */\\n function _credit(\\n address _to,\\n uint256 _amountLD,\\n uint32 /*_srcEid*/\\n ) internal virtual override returns (uint256 amountReceivedLD) {\\n if (_to == address(0x0)) _to = address(0xdead); // _mint(...) does not support address(0x0)\\n // @dev Default OFT mints on dst.\\n _mint(_to, _amountLD);\\n // @dev In the case of NON-default OFT, the _amountLD MIGHT not be == amountReceivedLD.\\n return _amountLD;\\n }\\n}\\n\",\"keccak256\":\"0xdc3582e4a20e02a79050c17058a1f1f42a4335d1a70be06c0a52a3fb05d4c89a\",\"license\":\"MIT\"},\"@layerzerolabs/oft-evm/contracts/OFTCore.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\nimport { OApp, Origin } from \\\"@layerzerolabs/oapp-evm/contracts/oapp/OApp.sol\\\";\\nimport { OAppOptionsType3 } from \\\"@layerzerolabs/oapp-evm/contracts/oapp/libs/OAppOptionsType3.sol\\\";\\nimport { IOAppMsgInspector } from \\\"@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppMsgInspector.sol\\\";\\n\\nimport { OAppPreCrimeSimulator } from \\\"@layerzerolabs/oapp-evm/contracts/precrime/OAppPreCrimeSimulator.sol\\\";\\n\\nimport { IOFT, SendParam, OFTLimit, OFTReceipt, OFTFeeDetail, MessagingReceipt, MessagingFee } from \\\"./interfaces/IOFT.sol\\\";\\nimport { OFTMsgCodec } from \\\"./libs/OFTMsgCodec.sol\\\";\\nimport { OFTComposeMsgCodec } from \\\"./libs/OFTComposeMsgCodec.sol\\\";\\n\\n/**\\n * @title OFTCore\\n * @dev Abstract contract for the OftChain (OFT) token.\\n */\\nabstract contract OFTCore is IOFT, OApp, OAppPreCrimeSimulator, OAppOptionsType3 {\\n using OFTMsgCodec for bytes;\\n using OFTMsgCodec for bytes32;\\n\\n // @notice Provides a conversion rate when swapping between denominations of SD and LD\\n // - shareDecimals == SD == shared Decimals\\n // - localDecimals == LD == local decimals\\n // @dev Considers that tokens have different decimal amounts on various chains.\\n // @dev eg.\\n // For a token\\n // - locally with 4 decimals --> 1.2345 => uint(12345)\\n // - remotely with 2 decimals --> 1.23 => uint(123)\\n // - The conversion rate would be 10 ** (4 - 2) = 100\\n // @dev If you want to send 1.2345 -> (uint 12345), you CANNOT represent that value on the remote,\\n // you can only display 1.23 -> uint(123).\\n // @dev To preserve the dust that would otherwise be lost on that conversion,\\n // we need to unify a denomination that can be represented on ALL chains inside of the OFT mesh\\n uint256 public immutable decimalConversionRate;\\n\\n // @notice Msg types that are used to identify the various OFT operations.\\n // @dev This can be extended in child contracts for non-default oft operations\\n // @dev These values are used in things like combineOptions() in OAppOptionsType3.sol.\\n uint16 public constant SEND = 1;\\n uint16 public constant SEND_AND_CALL = 2;\\n\\n // Address of an optional contract to inspect both 'message' and 'options'\\n address public msgInspector;\\n event MsgInspectorSet(address inspector);\\n\\n /**\\n * @dev Constructor.\\n * @param _localDecimals The decimals of the token on the local chain (this chain).\\n * @param _endpoint The address of the LayerZero endpoint.\\n * @param _delegate The delegate capable of making OApp configurations inside of the endpoint.\\n */\\n constructor(uint8 _localDecimals, address _endpoint, address _delegate) OApp(_endpoint, _delegate) {\\n if (_localDecimals < sharedDecimals()) revert InvalidLocalDecimals();\\n decimalConversionRate = 10 ** (_localDecimals - sharedDecimals());\\n }\\n\\n /**\\n * @notice Retrieves interfaceID and the version of the OFT.\\n * @return interfaceId The interface ID.\\n * @return version The version.\\n *\\n * @dev interfaceId: This specific interface ID is '0x02e49c2c'.\\n * @dev version: Indicates a cross-chain compatible msg encoding with other OFTs.\\n * @dev If a new feature is added to the OFT cross-chain msg encoding, the version will be incremented.\\n * ie. localOFT version(x,1) CAN send messages to remoteOFT version(x,1)\\n */\\n function oftVersion() external pure virtual returns (bytes4 interfaceId, uint64 version) {\\n return (type(IOFT).interfaceId, 1);\\n }\\n\\n /**\\n * @dev Retrieves the shared decimals of the OFT.\\n * @return The shared decimals of the OFT.\\n *\\n * @dev Sets an implicit cap on the amount of tokens, over uint64.max() will need some sort of outbound cap / totalSupply cap\\n * Lowest common decimal denominator between chains.\\n * Defaults to 6 decimal places to provide up to 18,446,744,073,709.551615 units (max uint64).\\n * For tokens exceeding this totalSupply(), they will need to override the sharedDecimals function with something smaller.\\n * ie. 4 sharedDecimals would be 1,844,674,407,370,955.1615\\n */\\n function sharedDecimals() public view virtual returns (uint8) {\\n return 6;\\n }\\n\\n /**\\n * @dev Sets the message inspector address for the OFT.\\n * @param _msgInspector The address of the message inspector.\\n *\\n * @dev This is an optional contract that can be used to inspect both 'message' and 'options'.\\n * @dev Set it to address(0) to disable it, or set it to a contract address to enable it.\\n */\\n function setMsgInspector(address _msgInspector) public virtual onlyOwner {\\n msgInspector = _msgInspector;\\n emit MsgInspectorSet(_msgInspector);\\n }\\n\\n /**\\n * @notice Provides the fee breakdown and settings data for an OFT. Unused in the default implementation.\\n * @param _sendParam The parameters for the send operation.\\n * @return oftLimit The OFT limit information.\\n * @return oftFeeDetails The details of OFT fees.\\n * @return oftReceipt The OFT receipt information.\\n */\\n function quoteOFT(\\n SendParam calldata _sendParam\\n )\\n external\\n view\\n virtual\\n returns (OFTLimit memory oftLimit, OFTFeeDetail[] memory oftFeeDetails, OFTReceipt memory oftReceipt)\\n {\\n uint256 minAmountLD = 0; // Unused in the default implementation.\\n uint256 maxAmountLD = type(uint64).max; // Unused in the default implementation.\\n oftLimit = OFTLimit(minAmountLD, maxAmountLD);\\n\\n // Unused in the default implementation; reserved for future complex fee details.\\n oftFeeDetails = new OFTFeeDetail[](0);\\n\\n // @dev This is the same as the send() operation, but without the actual send.\\n // - amountSentLD is the amount in local decimals that would be sent from the sender.\\n // - amountReceivedLD is the amount in local decimals that will be credited to the recipient on the remote OFT instance.\\n // @dev The amountSentLD MIGHT not equal the amount the user actually receives. HOWEVER, the default does.\\n (uint256 amountSentLD, uint256 amountReceivedLD) = _debitView(\\n _sendParam.amountLD,\\n _sendParam.minAmountLD,\\n _sendParam.dstEid\\n );\\n oftReceipt = OFTReceipt(amountSentLD, amountReceivedLD);\\n }\\n\\n /**\\n * @notice Provides a quote for the send() operation.\\n * @param _sendParam The parameters for the send() operation.\\n * @param _payInLzToken Flag indicating whether the caller is paying in the LZ token.\\n * @return msgFee The calculated LayerZero messaging fee from the send() operation.\\n *\\n * @dev MessagingFee: LayerZero msg fee\\n * - nativeFee: The native fee.\\n * - lzTokenFee: The lzToken fee.\\n */\\n function quoteSend(\\n SendParam calldata _sendParam,\\n bool _payInLzToken\\n ) external view virtual returns (MessagingFee memory msgFee) {\\n // @dev mock the amount to receive, this is the same operation used in the send().\\n // The quote is as similar as possible to the actual send() operation.\\n (, uint256 amountReceivedLD) = _debitView(_sendParam.amountLD, _sendParam.minAmountLD, _sendParam.dstEid);\\n\\n // @dev Builds the options and OFT message to quote in the endpoint.\\n (bytes memory message, bytes memory options) = _buildMsgAndOptions(_sendParam, amountReceivedLD);\\n\\n // @dev Calculates the LayerZero fee for the send() operation.\\n return _quote(_sendParam.dstEid, message, options, _payInLzToken);\\n }\\n\\n /**\\n * @dev Executes the send operation.\\n * @param _sendParam The parameters for the send operation.\\n * @param _fee The calculated fee for the send() operation.\\n * - nativeFee: The native fee.\\n * - lzTokenFee: The lzToken fee.\\n * @param _refundAddress The address to receive any excess funds.\\n * @return msgReceipt The receipt for the send operation.\\n * @return oftReceipt The OFT receipt information.\\n *\\n * @dev MessagingReceipt: LayerZero msg receipt\\n * - guid: The unique identifier for the sent message.\\n * - nonce: The nonce of the sent message.\\n * - fee: The LayerZero fee incurred for the message.\\n */\\n function send(\\n SendParam calldata _sendParam,\\n MessagingFee calldata _fee,\\n address _refundAddress\\n ) external payable virtual returns (MessagingReceipt memory msgReceipt, OFTReceipt memory oftReceipt) {\\n return _send(_sendParam, _fee, _refundAddress);\\n }\\n\\n /**\\n * @dev Internal function to execute the send operation.\\n * @param _sendParam The parameters for the send operation.\\n * @param _fee The calculated fee for the send() operation.\\n * - nativeFee: The native fee.\\n * - lzTokenFee: The lzToken fee.\\n * @param _refundAddress The address to receive any excess funds.\\n * @return msgReceipt The receipt for the send operation.\\n * @return oftReceipt The OFT receipt information.\\n *\\n * @dev MessagingReceipt: LayerZero msg receipt\\n * - guid: The unique identifier for the sent message.\\n * - nonce: The nonce of the sent message.\\n * - fee: The LayerZero fee incurred for the message.\\n */\\n function _send(\\n SendParam calldata _sendParam,\\n MessagingFee calldata _fee,\\n address _refundAddress\\n ) internal virtual returns (MessagingReceipt memory msgReceipt, OFTReceipt memory oftReceipt) {\\n // @dev Applies the token transfers regarding this send() operation.\\n // - amountSentLD is the amount in local decimals that was ACTUALLY sent/debited from the sender.\\n // - amountReceivedLD is the amount in local decimals that will be received/credited to the recipient on the remote OFT instance.\\n (uint256 amountSentLD, uint256 amountReceivedLD) = _debit(\\n msg.sender,\\n _sendParam.amountLD,\\n _sendParam.minAmountLD,\\n _sendParam.dstEid\\n );\\n\\n // @dev Builds the options and OFT message to quote in the endpoint.\\n (bytes memory message, bytes memory options) = _buildMsgAndOptions(_sendParam, amountReceivedLD);\\n\\n // @dev Sends the message to the LayerZero endpoint and returns the LayerZero msg receipt.\\n msgReceipt = _lzSend(_sendParam.dstEid, message, options, _fee, _refundAddress);\\n // @dev Formulate the OFT receipt.\\n oftReceipt = OFTReceipt(amountSentLD, amountReceivedLD);\\n\\n emit OFTSent(msgReceipt.guid, _sendParam.dstEid, msg.sender, amountSentLD, amountReceivedLD);\\n }\\n\\n /**\\n * @dev Internal function to build the message and options.\\n * @param _sendParam The parameters for the send() operation.\\n * @param _amountLD The amount in local decimals.\\n * @return message The encoded message.\\n * @return options The encoded options.\\n */\\n function _buildMsgAndOptions(\\n SendParam calldata _sendParam,\\n uint256 _amountLD\\n ) internal view virtual returns (bytes memory message, bytes memory options) {\\n bool hasCompose;\\n // @dev This generated message has the msg.sender encoded into the payload so the remote knows who the caller is.\\n (message, hasCompose) = OFTMsgCodec.encode(\\n _sendParam.to,\\n _toSD(_amountLD),\\n // @dev Must be include a non empty bytes if you want to compose, EVEN if you dont need it on the remote.\\n // EVEN if you dont require an arbitrary payload to be sent... eg. '0x01'\\n _sendParam.composeMsg\\n );\\n // @dev Change the msg type depending if its composed or not.\\n uint16 msgType = hasCompose ? SEND_AND_CALL : SEND;\\n // @dev Combine the callers _extraOptions with the enforced options via the OAppOptionsType3.\\n options = combineOptions(_sendParam.dstEid, msgType, _sendParam.extraOptions);\\n\\n // @dev Optionally inspect the message and options depending if the OApp owner has set a msg inspector.\\n // @dev If it fails inspection, needs to revert in the implementation. ie. does not rely on return boolean\\n address inspector = msgInspector; // caches the msgInspector to avoid potential double storage read\\n if (inspector != address(0)) IOAppMsgInspector(inspector).inspect(message, options);\\n }\\n\\n /**\\n * @dev Internal function to handle the receive on the LayerZero endpoint.\\n * @param _origin The origin information.\\n * - srcEid: The source chain endpoint ID.\\n * - sender: The sender address from the src chain.\\n * - nonce: The nonce of the LayerZero message.\\n * @param _guid The unique identifier for the received LayerZero message.\\n * @param _message The encoded message.\\n * @dev _executor The address of the executor.\\n * @dev _extraData Additional data.\\n */\\n function _lzReceive(\\n Origin calldata _origin,\\n bytes32 _guid,\\n bytes calldata _message,\\n address /*_executor*/, // @dev unused in the default implementation.\\n bytes calldata /*_extraData*/ // @dev unused in the default implementation.\\n ) internal virtual override {\\n // @dev The src sending chain doesnt know the address length on this chain (potentially non-evm)\\n // Thus everything is bytes32() encoded in flight.\\n address toAddress = _message.sendTo().bytes32ToAddress();\\n // @dev Credit the amountLD to the recipient and return the ACTUAL amount the recipient received in local decimals\\n uint256 amountReceivedLD = _credit(toAddress, _toLD(_message.amountSD()), _origin.srcEid);\\n\\n if (_message.isComposed()) {\\n // @dev Proprietary composeMsg format for the OFT.\\n bytes memory composeMsg = OFTComposeMsgCodec.encode(\\n _origin.nonce,\\n _origin.srcEid,\\n amountReceivedLD,\\n _message.composeMsg()\\n );\\n\\n // @dev Stores the lzCompose payload that will be executed in a separate tx.\\n // Standardizes functionality for executing arbitrary contract invocation on some non-evm chains.\\n // @dev The off-chain executor will listen and process the msg based on the src-chain-callers compose options passed.\\n // @dev The index is used when a OApp needs to compose multiple msgs on lzReceive.\\n // For default OFT implementation there is only 1 compose msg per lzReceive, thus its always 0.\\n endpoint.sendCompose(toAddress, _guid, 0 /* the index of the composed message*/, composeMsg);\\n }\\n\\n emit OFTReceived(_guid, _origin.srcEid, toAddress, amountReceivedLD);\\n }\\n\\n /**\\n * @dev Internal function to handle the OAppPreCrimeSimulator simulated receive.\\n * @param _origin The origin information.\\n * - srcEid: The source chain endpoint ID.\\n * - sender: The sender address from the src chain.\\n * - nonce: The nonce of the LayerZero message.\\n * @param _guid The unique identifier for the received LayerZero message.\\n * @param _message The LayerZero message.\\n * @param _executor The address of the off-chain executor.\\n * @param _extraData Arbitrary data passed by the msg executor.\\n *\\n * @dev Enables the preCrime simulator to mock sending lzReceive() messages,\\n * routes the msg down from the OAppPreCrimeSimulator, and back up to the OAppReceiver.\\n */\\n function _lzReceiveSimulate(\\n Origin calldata _origin,\\n bytes32 _guid,\\n bytes calldata _message,\\n address _executor,\\n bytes calldata _extraData\\n ) internal virtual override {\\n _lzReceive(_origin, _guid, _message, _executor, _extraData);\\n }\\n\\n /**\\n * @dev Check if the peer is considered 'trusted' by the OApp.\\n * @param _eid The endpoint ID to check.\\n * @param _peer The peer to check.\\n * @return Whether the peer passed is considered 'trusted' by the OApp.\\n *\\n * @dev Enables OAppPreCrimeSimulator to check whether a potential Inbound Packet is from a trusted source.\\n */\\n function isPeer(uint32 _eid, bytes32 _peer) public view virtual override returns (bool) {\\n return peers[_eid] == _peer;\\n }\\n\\n /**\\n * @dev Internal function to remove dust from the given local decimal amount.\\n * @param _amountLD The amount in local decimals.\\n * @return amountLD The amount after removing dust.\\n *\\n * @dev Prevents the loss of dust when moving amounts between chains with different decimals.\\n * @dev eg. uint(123) with a conversion rate of 100 becomes uint(100).\\n */\\n function _removeDust(uint256 _amountLD) internal view virtual returns (uint256 amountLD) {\\n return (_amountLD / decimalConversionRate) * decimalConversionRate;\\n }\\n\\n /**\\n * @dev Internal function to convert an amount from shared decimals into local decimals.\\n * @param _amountSD The amount in shared decimals.\\n * @return amountLD The amount in local decimals.\\n */\\n function _toLD(uint64 _amountSD) internal view virtual returns (uint256 amountLD) {\\n return _amountSD * decimalConversionRate;\\n }\\n\\n /**\\n * @dev Internal function to convert an amount from local decimals into shared decimals.\\n * @param _amountLD The amount in local decimals.\\n * @return amountSD The amount in shared decimals.\\n */\\n function _toSD(uint256 _amountLD) internal view virtual returns (uint64 amountSD) {\\n return uint64(_amountLD / decimalConversionRate);\\n }\\n\\n /**\\n * @dev Internal function to mock the amount mutation from a OFT debit() operation.\\n * @param _amountLD The amount to send in local decimals.\\n * @param _minAmountLD The minimum amount to send in local decimals.\\n * @dev _dstEid The destination endpoint ID.\\n * @return amountSentLD The amount sent, in local decimals.\\n * @return amountReceivedLD The amount to be received on the remote chain, in local decimals.\\n *\\n * @dev This is where things like fees would be calculated and deducted from the amount to be received on the remote.\\n */\\n function _debitView(\\n uint256 _amountLD,\\n uint256 _minAmountLD,\\n uint32 /*_dstEid*/\\n ) internal view virtual returns (uint256 amountSentLD, uint256 amountReceivedLD) {\\n // @dev Remove the dust so nothing is lost on the conversion between chains with different decimals for the token.\\n amountSentLD = _removeDust(_amountLD);\\n // @dev The amount to send is the same as amount received in the default implementation.\\n amountReceivedLD = amountSentLD;\\n\\n // @dev Check for slippage.\\n if (amountReceivedLD < _minAmountLD) {\\n revert SlippageExceeded(amountReceivedLD, _minAmountLD);\\n }\\n }\\n\\n /**\\n * @dev Internal function to perform a debit operation.\\n * @param _from The address to debit.\\n * @param _amountLD The amount to send in local decimals.\\n * @param _minAmountLD The minimum amount to send in local decimals.\\n * @param _dstEid The destination endpoint ID.\\n * @return amountSentLD The amount sent in local decimals.\\n * @return amountReceivedLD The amount received in local decimals on the remote.\\n *\\n * @dev Defined here but are intended to be overriden depending on the OFT implementation.\\n * @dev Depending on OFT implementation the _amountLD could differ from the amountReceivedLD.\\n */\\n function _debit(\\n address _from,\\n uint256 _amountLD,\\n uint256 _minAmountLD,\\n uint32 _dstEid\\n ) internal virtual returns (uint256 amountSentLD, uint256 amountReceivedLD);\\n\\n /**\\n * @dev Internal function to perform a credit operation.\\n * @param _to The address to credit.\\n * @param _amountLD The amount to credit in local decimals.\\n * @param _srcEid The source endpoint ID.\\n * @return amountReceivedLD The amount ACTUALLY received in local decimals.\\n *\\n * @dev Defined here but are intended to be overriden depending on the OFT implementation.\\n * @dev Depending on OFT implementation the _amountLD could differ from the amountReceivedLD.\\n */\\n function _credit(\\n address _to,\\n uint256 _amountLD,\\n uint32 _srcEid\\n ) internal virtual returns (uint256 amountReceivedLD);\\n}\\n\",\"keccak256\":\"0x9ce49b83455df600b52538e42028c422a322643f7ffb4f2814c72c3b970ea7be\",\"license\":\"MIT\"},\"@layerzerolabs/oft-evm/contracts/interfaces/IOFT.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\nimport { MessagingReceipt, MessagingFee } from \\\"@layerzerolabs/oapp-evm/contracts/oapp/OAppSender.sol\\\";\\n\\n/**\\n * @dev Struct representing token parameters for the OFT send() operation.\\n */\\nstruct SendParam {\\n uint32 dstEid; // Destination endpoint ID.\\n bytes32 to; // Recipient address.\\n uint256 amountLD; // Amount to send in local decimals.\\n uint256 minAmountLD; // Minimum amount to send in local decimals.\\n bytes extraOptions; // Additional options supplied by the caller to be used in the LayerZero message.\\n bytes composeMsg; // The composed message for the send() operation.\\n bytes oftCmd; // The OFT command to be executed, unused in default OFT implementations.\\n}\\n\\n/**\\n * @dev Struct representing OFT limit information.\\n * @dev These amounts can change dynamically and are up the specific oft implementation.\\n */\\nstruct OFTLimit {\\n uint256 minAmountLD; // Minimum amount in local decimals that can be sent to the recipient.\\n uint256 maxAmountLD; // Maximum amount in local decimals that can be sent to the recipient.\\n}\\n\\n/**\\n * @dev Struct representing OFT receipt information.\\n */\\nstruct OFTReceipt {\\n uint256 amountSentLD; // Amount of tokens ACTUALLY debited from the sender in local decimals.\\n // @dev In non-default implementations, the amountReceivedLD COULD differ from this value.\\n uint256 amountReceivedLD; // Amount of tokens to be received on the remote side.\\n}\\n\\n/**\\n * @dev Struct representing OFT fee details.\\n * @dev Future proof mechanism to provide a standardized way to communicate fees to things like a UI.\\n */\\nstruct OFTFeeDetail {\\n int256 feeAmountLD; // Amount of the fee in local decimals.\\n string description; // Description of the fee.\\n}\\n\\n/**\\n * @title IOFT\\n * @dev Interface for the OftChain (OFT) token.\\n * @dev Does not inherit ERC20 to accommodate usage by OFTAdapter as well.\\n * @dev This specific interface ID is '0x02e49c2c'.\\n */\\ninterface IOFT {\\n // Custom error messages\\n error InvalidLocalDecimals();\\n error SlippageExceeded(uint256 amountLD, uint256 minAmountLD);\\n\\n // Events\\n event OFTSent(\\n bytes32 indexed guid, // GUID of the OFT message.\\n uint32 dstEid, // Destination Endpoint ID.\\n address indexed fromAddress, // Address of the sender on the src chain.\\n uint256 amountSentLD, // Amount of tokens sent in local decimals.\\n uint256 amountReceivedLD // Amount of tokens received in local decimals.\\n );\\n event OFTReceived(\\n bytes32 indexed guid, // GUID of the OFT message.\\n uint32 srcEid, // Source Endpoint ID.\\n address indexed toAddress, // Address of the recipient on the dst chain.\\n uint256 amountReceivedLD // Amount of tokens received in local decimals.\\n );\\n\\n /**\\n * @notice Retrieves interfaceID and the version of the OFT.\\n * @return interfaceId The interface ID.\\n * @return version The version.\\n *\\n * @dev interfaceId: This specific interface ID is '0x02e49c2c'.\\n * @dev version: Indicates a cross-chain compatible msg encoding with other OFTs.\\n * @dev If a new feature is added to the OFT cross-chain msg encoding, the version will be incremented.\\n * ie. localOFT version(x,1) CAN send messages to remoteOFT version(x,1)\\n */\\n function oftVersion() external view returns (bytes4 interfaceId, uint64 version);\\n\\n /**\\n * @notice Retrieves the address of the token associated with the OFT.\\n * @return token The address of the ERC20 token implementation.\\n */\\n function token() external view returns (address);\\n\\n /**\\n * @notice Indicates whether the OFT contract requires approval of the 'token()' to send.\\n * @return requiresApproval Needs approval of the underlying token implementation.\\n *\\n * @dev Allows things like wallet implementers to determine integration requirements,\\n * without understanding the underlying token implementation.\\n */\\n function approvalRequired() external view returns (bool);\\n\\n /**\\n * @notice Retrieves the shared decimals of the OFT.\\n * @return sharedDecimals The shared decimals of the OFT.\\n */\\n function sharedDecimals() external view returns (uint8);\\n\\n /**\\n * @notice Provides the fee breakdown and settings data for an OFT. Unused in the default implementation.\\n * @param _sendParam The parameters for the send operation.\\n * @return limit The OFT limit information.\\n * @return oftFeeDetails The details of OFT fees.\\n * @return receipt The OFT receipt information.\\n */\\n function quoteOFT(\\n SendParam calldata _sendParam\\n ) external view returns (OFTLimit memory, OFTFeeDetail[] memory oftFeeDetails, OFTReceipt memory);\\n\\n /**\\n * @notice Provides a quote for the send() operation.\\n * @param _sendParam The parameters for the send() operation.\\n * @param _payInLzToken Flag indicating whether the caller is paying in the LZ token.\\n * @return fee The calculated LayerZero messaging fee from the send() operation.\\n *\\n * @dev MessagingFee: LayerZero msg fee\\n * - nativeFee: The native fee.\\n * - lzTokenFee: The lzToken fee.\\n */\\n function quoteSend(SendParam calldata _sendParam, bool _payInLzToken) external view returns (MessagingFee memory);\\n\\n /**\\n * @notice Executes the send() operation.\\n * @param _sendParam The parameters for the send operation.\\n * @param _fee The fee information supplied by the caller.\\n * - nativeFee: The native fee.\\n * - lzTokenFee: The lzToken fee.\\n * @param _refundAddress The address to receive any excess funds from fees etc. on the src.\\n * @return receipt The LayerZero messaging receipt from the send() operation.\\n * @return oftReceipt The OFT receipt information.\\n *\\n * @dev MessagingReceipt: LayerZero msg receipt\\n * - guid: The unique identifier for the sent message.\\n * - nonce: The nonce of the sent message.\\n * - fee: The LayerZero fee incurred for the message.\\n */\\n function send(\\n SendParam calldata _sendParam,\\n MessagingFee calldata _fee,\\n address _refundAddress\\n ) external payable returns (MessagingReceipt memory, OFTReceipt memory);\\n}\\n\",\"keccak256\":\"0x7ba6bb62fba7ee83451cfb0e727ddeef0e96b4388bd4e9ff0fc6ce103e1101c8\",\"license\":\"MIT\"},\"@layerzerolabs/oft-evm/contracts/libs/OFTComposeMsgCodec.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\nlibrary OFTComposeMsgCodec {\\n // Offset constants for decoding composed messages\\n uint8 private constant NONCE_OFFSET = 8;\\n uint8 private constant SRC_EID_OFFSET = 12;\\n uint8 private constant AMOUNT_LD_OFFSET = 44;\\n uint8 private constant COMPOSE_FROM_OFFSET = 76;\\n\\n /**\\n * @dev Encodes a OFT composed message.\\n * @param _nonce The nonce value.\\n * @param _srcEid The source endpoint ID.\\n * @param _amountLD The amount in local decimals.\\n * @param _composeMsg The composed message.\\n * @return _msg The encoded Composed message.\\n */\\n function encode(\\n uint64 _nonce,\\n uint32 _srcEid,\\n uint256 _amountLD,\\n bytes memory _composeMsg // 0x[composeFrom][composeMsg]\\n ) internal pure returns (bytes memory _msg) {\\n _msg = abi.encodePacked(_nonce, _srcEid, _amountLD, _composeMsg);\\n }\\n\\n /**\\n * @dev Retrieves the nonce for the composed message.\\n * @param _msg The message.\\n * @return The nonce value.\\n */\\n function nonce(bytes calldata _msg) internal pure returns (uint64) {\\n return uint64(bytes8(_msg[:NONCE_OFFSET]));\\n }\\n\\n /**\\n * @dev Retrieves the source endpoint ID for the composed message.\\n * @param _msg The message.\\n * @return The source endpoint ID.\\n */\\n function srcEid(bytes calldata _msg) internal pure returns (uint32) {\\n return uint32(bytes4(_msg[NONCE_OFFSET:SRC_EID_OFFSET]));\\n }\\n\\n /**\\n * @dev Retrieves the amount in local decimals from the composed message.\\n * @param _msg The message.\\n * @return The amount in local decimals.\\n */\\n function amountLD(bytes calldata _msg) internal pure returns (uint256) {\\n return uint256(bytes32(_msg[SRC_EID_OFFSET:AMOUNT_LD_OFFSET]));\\n }\\n\\n /**\\n * @dev Retrieves the composeFrom value from the composed message.\\n * @param _msg The message.\\n * @return The composeFrom value.\\n */\\n function composeFrom(bytes calldata _msg) internal pure returns (bytes32) {\\n return bytes32(_msg[AMOUNT_LD_OFFSET:COMPOSE_FROM_OFFSET]);\\n }\\n\\n /**\\n * @dev Retrieves the composed message.\\n * @param _msg The message.\\n * @return The composed message.\\n */\\n function composeMsg(bytes calldata _msg) internal pure returns (bytes memory) {\\n return _msg[COMPOSE_FROM_OFFSET:];\\n }\\n\\n /**\\n * @dev Converts an address to bytes32.\\n * @param _addr The address to convert.\\n * @return The bytes32 representation of the address.\\n */\\n function addressToBytes32(address _addr) internal pure returns (bytes32) {\\n return bytes32(uint256(uint160(_addr)));\\n }\\n\\n /**\\n * @dev Converts bytes32 to an address.\\n * @param _b The bytes32 value to convert.\\n * @return The address representation of bytes32.\\n */\\n function bytes32ToAddress(bytes32 _b) internal pure returns (address) {\\n return address(uint160(uint256(_b)));\\n }\\n}\\n\",\"keccak256\":\"0xaae73d6eb8b9561c43f1802f3c416c00ccd35f172b711f9781ccdf1b25a40db5\",\"license\":\"MIT\"},\"@layerzerolabs/oft-evm/contracts/libs/OFTMsgCodec.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.20;\\n\\nlibrary OFTMsgCodec {\\n // Offset constants for encoding and decoding OFT messages\\n uint8 private constant SEND_TO_OFFSET = 32;\\n uint8 private constant SEND_AMOUNT_SD_OFFSET = 40;\\n\\n /**\\n * @dev Encodes an OFT LayerZero message.\\n * @param _sendTo The recipient address.\\n * @param _amountShared The amount in shared decimals.\\n * @param _composeMsg The composed message.\\n * @return _msg The encoded message.\\n * @return hasCompose A boolean indicating whether the message has a composed payload.\\n */\\n function encode(\\n bytes32 _sendTo,\\n uint64 _amountShared,\\n bytes memory _composeMsg\\n ) internal view returns (bytes memory _msg, bool hasCompose) {\\n hasCompose = _composeMsg.length > 0;\\n // @dev Remote chains will want to know the composed function caller ie. msg.sender on the src.\\n _msg = hasCompose\\n ? abi.encodePacked(_sendTo, _amountShared, addressToBytes32(msg.sender), _composeMsg)\\n : abi.encodePacked(_sendTo, _amountShared);\\n }\\n\\n /**\\n * @dev Checks if the OFT message is composed.\\n * @param _msg The OFT message.\\n * @return A boolean indicating whether the message is composed.\\n */\\n function isComposed(bytes calldata _msg) internal pure returns (bool) {\\n return _msg.length > SEND_AMOUNT_SD_OFFSET;\\n }\\n\\n /**\\n * @dev Retrieves the recipient address from the OFT message.\\n * @param _msg The OFT message.\\n * @return The recipient address.\\n */\\n function sendTo(bytes calldata _msg) internal pure returns (bytes32) {\\n return bytes32(_msg[:SEND_TO_OFFSET]);\\n }\\n\\n /**\\n * @dev Retrieves the amount in shared decimals from the OFT message.\\n * @param _msg The OFT message.\\n * @return The amount in shared decimals.\\n */\\n function amountSD(bytes calldata _msg) internal pure returns (uint64) {\\n return uint64(bytes8(_msg[SEND_TO_OFFSET:SEND_AMOUNT_SD_OFFSET]));\\n }\\n\\n /**\\n * @dev Retrieves the composed message from the OFT message.\\n * @param _msg The OFT message.\\n * @return The composed message.\\n */\\n function composeMsg(bytes calldata _msg) internal pure returns (bytes memory) {\\n return _msg[SEND_AMOUNT_SD_OFFSET:];\\n }\\n\\n /**\\n * @dev Converts an address to bytes32.\\n * @param _addr The address to convert.\\n * @return The bytes32 representation of the address.\\n */\\n function addressToBytes32(address _addr) internal pure returns (bytes32) {\\n return bytes32(uint256(uint160(_addr)));\\n }\\n\\n /**\\n * @dev Converts bytes32 to an address.\\n * @param _b The bytes32 value to convert.\\n * @return The address representation of bytes32.\\n */\\n function bytes32ToAddress(bytes32 _b) internal pure returns (address) {\\n return address(uint160(uint256(_b)));\\n }\\n}\\n\",\"keccak256\":\"0x5358948017669c03e157f871d8c38e988f9004dbd0801ad3119d2487f0d40b0b\",\"license\":\"MIT\"},\"@openzeppelin/contracts/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {Context} from \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * The initial owner is set to the address provided by the deployer. This can\\n * later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n /**\\n * @dev The caller account is not authorized to perform an operation.\\n */\\n error OwnableUnauthorizedAccount(address account);\\n\\n /**\\n * @dev The owner is not a valid owner account. (eg. `address(0)`)\\n */\\n error OwnableInvalidOwner(address owner);\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the address provided by the deployer as the initial owner.\\n */\\n constructor(address initialOwner) {\\n if (initialOwner == address(0)) {\\n revert OwnableInvalidOwner(address(0));\\n }\\n _transferOwnership(initialOwner);\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n _checkOwner();\\n _;\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if the sender is not the owner.\\n */\\n function _checkOwner() internal view virtual {\\n if (owner() != _msgSender()) {\\n revert OwnableUnauthorizedAccount(_msgSender());\\n }\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby disabling any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n if (newOwner == address(0)) {\\n revert OwnableInvalidOwner(address(0));\\n }\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n}\\n\",\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\"},\"@openzeppelin/contracts/interfaces/IERC1363.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (interfaces/IERC1363.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {IERC20} from \\\"./IERC20.sol\\\";\\nimport {IERC165} from \\\"./IERC165.sol\\\";\\n\\n/**\\n * @title IERC1363\\n * @dev Interface of the ERC-1363 standard as defined in the https://eips.ethereum.org/EIPS/eip-1363[ERC-1363].\\n *\\n * Defines an extension interface for ERC-20 tokens that supports executing code on a recipient contract\\n * after `transfer` or `transferFrom`, or code on a spender contract after `approve`, in a single transaction.\\n */\\ninterface IERC1363 is IERC20, IERC165 {\\n /*\\n * Note: the ERC-165 identifier for this interface is 0xb0202a11.\\n * 0xb0202a11 ===\\n * bytes4(keccak256('transferAndCall(address,uint256)')) ^\\n * bytes4(keccak256('transferAndCall(address,uint256,bytes)')) ^\\n * bytes4(keccak256('transferFromAndCall(address,address,uint256)')) ^\\n * bytes4(keccak256('transferFromAndCall(address,address,uint256,bytes)')) ^\\n * bytes4(keccak256('approveAndCall(address,uint256)')) ^\\n * bytes4(keccak256('approveAndCall(address,uint256,bytes)'))\\n */\\n\\n /**\\n * @dev Moves a `value` amount of tokens from the caller's account to `to`\\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\\n * @param to The address which you want to transfer to.\\n * @param value The amount of tokens to be transferred.\\n * @return A boolean value indicating whether the operation succeeded unless throwing.\\n */\\n function transferAndCall(address to, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from the caller's account to `to`\\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\\n * @param to The address which you want to transfer to.\\n * @param value The amount of tokens to be transferred.\\n * @param data Additional data with no specified format, sent in call to `to`.\\n * @return A boolean value indicating whether the operation succeeded unless throwing.\\n */\\n function transferAndCall(address to, uint256 value, bytes calldata data) external returns (bool);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism\\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\\n * @param from The address which you want to send tokens from.\\n * @param to The address which you want to transfer to.\\n * @param value The amount of tokens to be transferred.\\n * @return A boolean value indicating whether the operation succeeded unless throwing.\\n */\\n function transferFromAndCall(address from, address to, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism\\n * and then calls {IERC1363Receiver-onTransferReceived} on `to`.\\n * @param from The address which you want to send tokens from.\\n * @param to The address which you want to transfer to.\\n * @param value The amount of tokens to be transferred.\\n * @param data Additional data with no specified format, sent in call to `to`.\\n * @return A boolean value indicating whether the operation succeeded unless throwing.\\n */\\n function transferFromAndCall(address from, address to, uint256 value, bytes calldata data) external returns (bool);\\n\\n /**\\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\\n * caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`.\\n * @param spender The address which will spend the funds.\\n * @param value The amount of tokens to be spent.\\n * @return A boolean value indicating whether the operation succeeded unless throwing.\\n */\\n function approveAndCall(address spender, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\\n * caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`.\\n * @param spender The address which will spend the funds.\\n * @param value The amount of tokens to be spent.\\n * @param data Additional data with no specified format, sent in call to `spender`.\\n * @return A boolean value indicating whether the operation succeeded unless throwing.\\n */\\n function approveAndCall(address spender, uint256 value, bytes calldata data) external returns (bool);\\n}\\n\",\"keccak256\":\"0x9b6b3e7803bc5f2f8cd7ad57db8ac1def61a9930a5a3107df4882e028a9605d7\",\"license\":\"MIT\"},\"@openzeppelin/contracts/interfaces/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC165.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {IERC165} from \\\"../utils/introspection/IERC165.sol\\\";\\n\",\"keccak256\":\"0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724\",\"license\":\"MIT\"},\"@openzeppelin/contracts/interfaces/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC20.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {IERC20} from \\\"../token/ERC20/IERC20.sol\\\";\\n\",\"keccak256\":\"0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c\",\"license\":\"MIT\"},\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (interfaces/draft-IERC6093.sol)\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Standard ERC-20 Errors\\n * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-20 tokens.\\n */\\ninterface IERC20Errors {\\n /**\\n * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.\\n * @param sender Address whose tokens are being transferred.\\n * @param balance Current balance for the interacting account.\\n * @param needed Minimum amount required to perform a transfer.\\n */\\n error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed);\\n\\n /**\\n * @dev Indicates a failure with the token `sender`. Used in transfers.\\n * @param sender Address whose tokens are being transferred.\\n */\\n error ERC20InvalidSender(address sender);\\n\\n /**\\n * @dev Indicates a failure with the token `receiver`. Used in transfers.\\n * @param receiver Address to which tokens are being transferred.\\n */\\n error ERC20InvalidReceiver(address receiver);\\n\\n /**\\n * @dev Indicates a failure with the `spender`\\u2019s `allowance`. Used in transfers.\\n * @param spender Address that may be allowed to operate on tokens without being their owner.\\n * @param allowance Amount of tokens a `spender` is allowed to operate with.\\n * @param needed Minimum amount required to perform a transfer.\\n */\\n error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed);\\n\\n /**\\n * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\\n * @param approver Address initiating an approval operation.\\n */\\n error ERC20InvalidApprover(address approver);\\n\\n /**\\n * @dev Indicates a failure with the `spender` to be approved. Used in approvals.\\n * @param spender Address that may be allowed to operate on tokens without being their owner.\\n */\\n error ERC20InvalidSpender(address spender);\\n}\\n\\n/**\\n * @dev Standard ERC-721 Errors\\n * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-721 tokens.\\n */\\ninterface IERC721Errors {\\n /**\\n * @dev Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in ERC-20.\\n * Used in balance queries.\\n * @param owner Address of the current owner of a token.\\n */\\n error ERC721InvalidOwner(address owner);\\n\\n /**\\n * @dev Indicates a `tokenId` whose `owner` is the zero address.\\n * @param tokenId Identifier number of a token.\\n */\\n error ERC721NonexistentToken(uint256 tokenId);\\n\\n /**\\n * @dev Indicates an error related to the ownership over a particular token. Used in transfers.\\n * @param sender Address whose tokens are being transferred.\\n * @param tokenId Identifier number of a token.\\n * @param owner Address of the current owner of a token.\\n */\\n error ERC721IncorrectOwner(address sender, uint256 tokenId, address owner);\\n\\n /**\\n * @dev Indicates a failure with the token `sender`. Used in transfers.\\n * @param sender Address whose tokens are being transferred.\\n */\\n error ERC721InvalidSender(address sender);\\n\\n /**\\n * @dev Indicates a failure with the token `receiver`. Used in transfers.\\n * @param receiver Address to which tokens are being transferred.\\n */\\n error ERC721InvalidReceiver(address receiver);\\n\\n /**\\n * @dev Indicates a failure with the `operator`\\u2019s approval. Used in transfers.\\n * @param operator Address that may be allowed to operate on tokens without being their owner.\\n * @param tokenId Identifier number of a token.\\n */\\n error ERC721InsufficientApproval(address operator, uint256 tokenId);\\n\\n /**\\n * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\\n * @param approver Address initiating an approval operation.\\n */\\n error ERC721InvalidApprover(address approver);\\n\\n /**\\n * @dev Indicates a failure with the `operator` to be approved. Used in approvals.\\n * @param operator Address that may be allowed to operate on tokens without being their owner.\\n */\\n error ERC721InvalidOperator(address operator);\\n}\\n\\n/**\\n * @dev Standard ERC-1155 Errors\\n * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-1155 tokens.\\n */\\ninterface IERC1155Errors {\\n /**\\n * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.\\n * @param sender Address whose tokens are being transferred.\\n * @param balance Current balance for the interacting account.\\n * @param needed Minimum amount required to perform a transfer.\\n * @param tokenId Identifier number of a token.\\n */\\n error ERC1155InsufficientBalance(address sender, uint256 balance, uint256 needed, uint256 tokenId);\\n\\n /**\\n * @dev Indicates a failure with the token `sender`. Used in transfers.\\n * @param sender Address whose tokens are being transferred.\\n */\\n error ERC1155InvalidSender(address sender);\\n\\n /**\\n * @dev Indicates a failure with the token `receiver`. Used in transfers.\\n * @param receiver Address to which tokens are being transferred.\\n */\\n error ERC1155InvalidReceiver(address receiver);\\n\\n /**\\n * @dev Indicates a failure with the `operator`\\u2019s approval. Used in transfers.\\n * @param operator Address that may be allowed to operate on tokens without being their owner.\\n * @param owner Address of the current owner of a token.\\n */\\n error ERC1155MissingApprovalForAll(address operator, address owner);\\n\\n /**\\n * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\\n * @param approver Address initiating an approval operation.\\n */\\n error ERC1155InvalidApprover(address approver);\\n\\n /**\\n * @dev Indicates a failure with the `operator` to be approved. Used in approvals.\\n * @param operator Address that may be allowed to operate on tokens without being their owner.\\n */\\n error ERC1155InvalidOperator(address operator);\\n\\n /**\\n * @dev Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation.\\n * Used in batch transfers.\\n * @param idsLength Length of the array of token identifiers\\n * @param valuesLength Length of the array of token amounts\\n */\\n error ERC1155InvalidArrayLength(uint256 idsLength, uint256 valuesLength);\\n}\\n\",\"keccak256\":\"0x880da465c203cec76b10d72dbd87c80f387df4102274f23eea1f9c9b0918792b\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/ERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/ERC20.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {IERC20} from \\\"./IERC20.sol\\\";\\nimport {IERC20Metadata} from \\\"./extensions/IERC20Metadata.sol\\\";\\nimport {Context} from \\\"../../utils/Context.sol\\\";\\nimport {IERC20Errors} from \\\"../../interfaces/draft-IERC6093.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC20} interface.\\n *\\n * This implementation is agnostic to the way tokens are created. This means\\n * that a supply mechanism has to be added in a derived contract using {_mint}.\\n *\\n * TIP: For a detailed writeup see our guide\\n * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\\n * to implement supply mechanisms].\\n *\\n * The default value of {decimals} is 18. To change this, you should override\\n * this function so it returns a different value.\\n *\\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\\n * instead returning `false` on failure. This behavior is nonetheless\\n * conventional and does not conflict with the expectations of ERC-20\\n * applications.\\n */\\nabstract contract ERC20 is Context, IERC20, IERC20Metadata, IERC20Errors {\\n mapping(address account => uint256) private _balances;\\n\\n mapping(address account => mapping(address spender => uint256)) private _allowances;\\n\\n uint256 private _totalSupply;\\n\\n string private _name;\\n string private _symbol;\\n\\n /**\\n * @dev Sets the values for {name} and {symbol}.\\n *\\n * All two of these values are immutable: they can only be set once during\\n * construction.\\n */\\n constructor(string memory name_, string memory symbol_) {\\n _name = name_;\\n _symbol = symbol_;\\n }\\n\\n /**\\n * @dev Returns the name of the token.\\n */\\n function name() public view virtual returns (string memory) {\\n return _name;\\n }\\n\\n /**\\n * @dev Returns the symbol of the token, usually a shorter version of the\\n * name.\\n */\\n function symbol() public view virtual returns (string memory) {\\n return _symbol;\\n }\\n\\n /**\\n * @dev Returns the number of decimals used to get its user representation.\\n * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n * be displayed to a user as `5.05` (`505 / 10 ** 2`).\\n *\\n * Tokens usually opt for a value of 18, imitating the relationship between\\n * Ether and Wei. This is the default value returned by this function, unless\\n * it's overridden.\\n *\\n * NOTE: This information is only used for _display_ purposes: it in\\n * no way affects any of the arithmetic of the contract, including\\n * {IERC20-balanceOf} and {IERC20-transfer}.\\n */\\n function decimals() public view virtual returns (uint8) {\\n return 18;\\n }\\n\\n /**\\n * @dev See {IERC20-totalSupply}.\\n */\\n function totalSupply() public view virtual returns (uint256) {\\n return _totalSupply;\\n }\\n\\n /**\\n * @dev See {IERC20-balanceOf}.\\n */\\n function balanceOf(address account) public view virtual returns (uint256) {\\n return _balances[account];\\n }\\n\\n /**\\n * @dev See {IERC20-transfer}.\\n *\\n * Requirements:\\n *\\n * - `to` cannot be the zero address.\\n * - the caller must have a balance of at least `value`.\\n */\\n function transfer(address to, uint256 value) public virtual returns (bool) {\\n address owner = _msgSender();\\n _transfer(owner, to, value);\\n return true;\\n }\\n\\n /**\\n * @dev See {IERC20-allowance}.\\n */\\n function allowance(address owner, address spender) public view virtual returns (uint256) {\\n return _allowances[owner][spender];\\n }\\n\\n /**\\n * @dev See {IERC20-approve}.\\n *\\n * NOTE: If `value` is the maximum `uint256`, the allowance is not updated on\\n * `transferFrom`. This is semantically equivalent to an infinite approval.\\n *\\n * Requirements:\\n *\\n * - `spender` cannot be the zero address.\\n */\\n function approve(address spender, uint256 value) public virtual returns (bool) {\\n address owner = _msgSender();\\n _approve(owner, spender, value);\\n return true;\\n }\\n\\n /**\\n * @dev See {IERC20-transferFrom}.\\n *\\n * Skips emitting an {Approval} event indicating an allowance update. This is not\\n * required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve].\\n *\\n * NOTE: Does not update the allowance if the current allowance\\n * is the maximum `uint256`.\\n *\\n * Requirements:\\n *\\n * - `from` and `to` cannot be the zero address.\\n * - `from` must have a balance of at least `value`.\\n * - the caller must have allowance for ``from``'s tokens of at least\\n * `value`.\\n */\\n function transferFrom(address from, address to, uint256 value) public virtual returns (bool) {\\n address spender = _msgSender();\\n _spendAllowance(from, spender, value);\\n _transfer(from, to, value);\\n return true;\\n }\\n\\n /**\\n * @dev Moves a `value` amount of tokens from `from` to `to`.\\n *\\n * This internal function is equivalent to {transfer}, and can be used to\\n * e.g. implement automatic token fees, slashing mechanisms, etc.\\n *\\n * Emits a {Transfer} event.\\n *\\n * NOTE: This function is not virtual, {_update} should be overridden instead.\\n */\\n function _transfer(address from, address to, uint256 value) internal {\\n if (from == address(0)) {\\n revert ERC20InvalidSender(address(0));\\n }\\n if (to == address(0)) {\\n revert ERC20InvalidReceiver(address(0));\\n }\\n _update(from, to, value);\\n }\\n\\n /**\\n * @dev Transfers a `value` amount of tokens from `from` to `to`, or alternatively mints (or burns) if `from`\\n * (or `to`) is the zero address. All customizations to transfers, mints, and burns should be done by overriding\\n * this function.\\n *\\n * Emits a {Transfer} event.\\n */\\n function _update(address from, address to, uint256 value) internal virtual {\\n if (from == address(0)) {\\n // Overflow check required: The rest of the code assumes that totalSupply never overflows\\n _totalSupply += value;\\n } else {\\n uint256 fromBalance = _balances[from];\\n if (fromBalance < value) {\\n revert ERC20InsufficientBalance(from, fromBalance, value);\\n }\\n unchecked {\\n // Overflow not possible: value <= fromBalance <= totalSupply.\\n _balances[from] = fromBalance - value;\\n }\\n }\\n\\n if (to == address(0)) {\\n unchecked {\\n // Overflow not possible: value <= totalSupply or value <= fromBalance <= totalSupply.\\n _totalSupply -= value;\\n }\\n } else {\\n unchecked {\\n // Overflow not possible: balance + value is at most totalSupply, which we know fits into a uint256.\\n _balances[to] += value;\\n }\\n }\\n\\n emit Transfer(from, to, value);\\n }\\n\\n /**\\n * @dev Creates a `value` amount of tokens and assigns them to `account`, by transferring it from address(0).\\n * Relies on the `_update` mechanism\\n *\\n * Emits a {Transfer} event with `from` set to the zero address.\\n *\\n * NOTE: This function is not virtual, {_update} should be overridden instead.\\n */\\n function _mint(address account, uint256 value) internal {\\n if (account == address(0)) {\\n revert ERC20InvalidReceiver(address(0));\\n }\\n _update(address(0), account, value);\\n }\\n\\n /**\\n * @dev Destroys a `value` amount of tokens from `account`, lowering the total supply.\\n * Relies on the `_update` mechanism.\\n *\\n * Emits a {Transfer} event with `to` set to the zero address.\\n *\\n * NOTE: This function is not virtual, {_update} should be overridden instead\\n */\\n function _burn(address account, uint256 value) internal {\\n if (account == address(0)) {\\n revert ERC20InvalidSender(address(0));\\n }\\n _update(account, address(0), value);\\n }\\n\\n /**\\n * @dev Sets `value` as the allowance of `spender` over the `owner` s tokens.\\n *\\n * This internal function is equivalent to `approve`, and can be used to\\n * e.g. set automatic allowances for certain subsystems, etc.\\n *\\n * Emits an {Approval} event.\\n *\\n * Requirements:\\n *\\n * - `owner` cannot be the zero address.\\n * - `spender` cannot be the zero address.\\n *\\n * Overrides to this logic should be done to the variant with an additional `bool emitEvent` argument.\\n */\\n function _approve(address owner, address spender, uint256 value) internal {\\n _approve(owner, spender, value, true);\\n }\\n\\n /**\\n * @dev Variant of {_approve} with an optional flag to enable or disable the {Approval} event.\\n *\\n * By default (when calling {_approve}) the flag is set to true. On the other hand, approval changes made by\\n * `_spendAllowance` during the `transferFrom` operation set the flag to false. This saves gas by not emitting any\\n * `Approval` event during `transferFrom` operations.\\n *\\n * Anyone who wishes to continue emitting `Approval` events on the`transferFrom` operation can force the flag to\\n * true using the following override:\\n *\\n * ```solidity\\n * function _approve(address owner, address spender, uint256 value, bool) internal virtual override {\\n * super._approve(owner, spender, value, true);\\n * }\\n * ```\\n *\\n * Requirements are the same as {_approve}.\\n */\\n function _approve(address owner, address spender, uint256 value, bool emitEvent) internal virtual {\\n if (owner == address(0)) {\\n revert ERC20InvalidApprover(address(0));\\n }\\n if (spender == address(0)) {\\n revert ERC20InvalidSpender(address(0));\\n }\\n _allowances[owner][spender] = value;\\n if (emitEvent) {\\n emit Approval(owner, spender, value);\\n }\\n }\\n\\n /**\\n * @dev Updates `owner` s allowance for `spender` based on spent `value`.\\n *\\n * Does not update the allowance value in case of infinite allowance.\\n * Revert if not enough allowance is available.\\n *\\n * Does not emit an {Approval} event.\\n */\\n function _spendAllowance(address owner, address spender, uint256 value) internal virtual {\\n uint256 currentAllowance = allowance(owner, spender);\\n if (currentAllowance != type(uint256).max) {\\n if (currentAllowance < value) {\\n revert ERC20InsufficientAllowance(spender, currentAllowance, value);\\n }\\n unchecked {\\n _approve(owner, spender, currentAllowance - value, false);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0xbf61ab2ae1d575a17ea58fbb99ca232baddcc4e0eeea180e84cbc74b0c348b31\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Interface of the ERC-20 standard as defined in the ERC.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n /**\\n * @dev Returns the value of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the value of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from the caller's account to `to`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address to, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\\n * caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 value) external returns (bool);\\n\\n /**\\n * @dev Moves a `value` amount of tokens from `from` to `to` using the\\n * allowance mechanism. `value` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 value) external returns (bool);\\n}\\n\",\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/extensions/IERC20Metadata.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {IERC20} from \\\"../IERC20.sol\\\";\\n\\n/**\\n * @dev Interface for the optional metadata functions from the ERC-20 standard.\\n */\\ninterface IERC20Metadata is IERC20 {\\n /**\\n * @dev Returns the name of the token.\\n */\\n function name() external view returns (string memory);\\n\\n /**\\n * @dev Returns the symbol of the token.\\n */\\n function symbol() external view returns (string memory);\\n\\n /**\\n * @dev Returns the decimals places of the token.\\n */\\n function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0x70f2f713b13b7ce4610bcd0ac9fec0f3cc43693b043abcb8dc40a42a726eb330\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/utils/SafeERC20.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {IERC20} from \\\"../IERC20.sol\\\";\\nimport {IERC1363} from \\\"../../../interfaces/IERC1363.sol\\\";\\nimport {Address} from \\\"../../../utils/Address.sol\\\";\\n\\n/**\\n * @title SafeERC20\\n * @dev Wrappers around ERC-20 operations that throw on failure (when the token\\n * contract returns false). Tokens that return no value (and instead revert or\\n * throw on failure) are also supported, non-reverting calls are assumed to be\\n * successful.\\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\n */\\nlibrary SafeERC20 {\\n /**\\n * @dev An operation with an ERC-20 token failed.\\n */\\n error SafeERC20FailedOperation(address token);\\n\\n /**\\n * @dev Indicates a failed `decreaseAllowance` request.\\n */\\n error SafeERC20FailedDecreaseAllowance(address spender, uint256 currentAllowance, uint256 requestedDecrease);\\n\\n /**\\n * @dev Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value,\\n * non-reverting calls are assumed to be successful.\\n */\\n function safeTransfer(IERC20 token, address to, uint256 value) internal {\\n _callOptionalReturn(token, abi.encodeCall(token.transfer, (to, value)));\\n }\\n\\n /**\\n * @dev Transfer `value` amount of `token` from `from` to `to`, spending the approval given by `from` to the\\n * calling contract. If `token` returns no value, non-reverting calls are assumed to be successful.\\n */\\n function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\\n _callOptionalReturn(token, abi.encodeCall(token.transferFrom, (from, to, value)));\\n }\\n\\n /**\\n * @dev Increase the calling contract's allowance toward `spender` by `value`. If `token` returns no value,\\n * non-reverting calls are assumed to be successful.\\n *\\n * IMPORTANT: If the token implements ERC-7674 (ERC-20 with temporary allowance), and if the \\\"client\\\"\\n * smart contract uses ERC-7674 to set temporary allowances, then the \\\"client\\\" smart contract should avoid using\\n * this function. Performing a {safeIncreaseAllowance} or {safeDecreaseAllowance} operation on a token contract\\n * that has a non-zero temporary allowance (for that particular owner-spender) will result in unexpected behavior.\\n */\\n function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {\\n uint256 oldAllowance = token.allowance(address(this), spender);\\n forceApprove(token, spender, oldAllowance + value);\\n }\\n\\n /**\\n * @dev Decrease the calling contract's allowance toward `spender` by `requestedDecrease`. If `token` returns no\\n * value, non-reverting calls are assumed to be successful.\\n *\\n * IMPORTANT: If the token implements ERC-7674 (ERC-20 with temporary allowance), and if the \\\"client\\\"\\n * smart contract uses ERC-7674 to set temporary allowances, then the \\\"client\\\" smart contract should avoid using\\n * this function. Performing a {safeIncreaseAllowance} or {safeDecreaseAllowance} operation on a token contract\\n * that has a non-zero temporary allowance (for that particular owner-spender) will result in unexpected behavior.\\n */\\n function safeDecreaseAllowance(IERC20 token, address spender, uint256 requestedDecrease) internal {\\n unchecked {\\n uint256 currentAllowance = token.allowance(address(this), spender);\\n if (currentAllowance < requestedDecrease) {\\n revert SafeERC20FailedDecreaseAllowance(spender, currentAllowance, requestedDecrease);\\n }\\n forceApprove(token, spender, currentAllowance - requestedDecrease);\\n }\\n }\\n\\n /**\\n * @dev Set the calling contract's allowance toward `spender` to `value`. If `token` returns no value,\\n * non-reverting calls are assumed to be successful. Meant to be used with tokens that require the approval\\n * to be set to zero before setting it to a non-zero value, such as USDT.\\n *\\n * NOTE: If the token implements ERC-7674, this function will not modify any temporary allowance. This function\\n * only sets the \\\"standard\\\" allowance. Any temporary allowance will remain active, in addition to the value being\\n * set here.\\n */\\n function forceApprove(IERC20 token, address spender, uint256 value) internal {\\n bytes memory approvalCall = abi.encodeCall(token.approve, (spender, value));\\n\\n if (!_callOptionalReturnBool(token, approvalCall)) {\\n _callOptionalReturn(token, abi.encodeCall(token.approve, (spender, 0)));\\n _callOptionalReturn(token, approvalCall);\\n }\\n }\\n\\n /**\\n * @dev Performs an {ERC1363} transferAndCall, with a fallback to the simple {ERC20} transfer if the target has no\\n * code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\\n * targeting contracts.\\n *\\n * Reverts if the returned value is other than `true`.\\n */\\n function transferAndCallRelaxed(IERC1363 token, address to, uint256 value, bytes memory data) internal {\\n if (to.code.length == 0) {\\n safeTransfer(token, to, value);\\n } else if (!token.transferAndCall(to, value, data)) {\\n revert SafeERC20FailedOperation(address(token));\\n }\\n }\\n\\n /**\\n * @dev Performs an {ERC1363} transferFromAndCall, with a fallback to the simple {ERC20} transferFrom if the target\\n * has no code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\\n * targeting contracts.\\n *\\n * Reverts if the returned value is other than `true`.\\n */\\n function transferFromAndCallRelaxed(\\n IERC1363 token,\\n address from,\\n address to,\\n uint256 value,\\n bytes memory data\\n ) internal {\\n if (to.code.length == 0) {\\n safeTransferFrom(token, from, to, value);\\n } else if (!token.transferFromAndCall(from, to, value, data)) {\\n revert SafeERC20FailedOperation(address(token));\\n }\\n }\\n\\n /**\\n * @dev Performs an {ERC1363} approveAndCall, with a fallback to the simple {ERC20} approve if the target has no\\n * code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when\\n * targeting contracts.\\n *\\n * NOTE: When the recipient address (`to`) has no code (i.e. is an EOA), this function behaves as {forceApprove}.\\n * Opposedly, when the recipient address (`to`) has code, this function only attempts to call {ERC1363-approveAndCall}\\n * once without retrying, and relies on the returned value to be true.\\n *\\n * Reverts if the returned value is other than `true`.\\n */\\n function approveAndCallRelaxed(IERC1363 token, address to, uint256 value, bytes memory data) internal {\\n if (to.code.length == 0) {\\n forceApprove(token, to, value);\\n } else if (!token.approveAndCall(to, value, data)) {\\n revert SafeERC20FailedOperation(address(token));\\n }\\n }\\n\\n /**\\n * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n * on the return value: the return value is optional (but if data is returned, it must not be false).\\n * @param token The token targeted by the call.\\n * @param data The call data (encoded using abi.encode or one of its variants).\\n *\\n * This is a variant of {_callOptionalReturnBool} that reverts if call fails to meet the requirements.\\n */\\n function _callOptionalReturn(IERC20 token, bytes memory data) private {\\n uint256 returnSize;\\n uint256 returnValue;\\n assembly (\\\"memory-safe\\\") {\\n let success := call(gas(), token, 0, add(data, 0x20), mload(data), 0, 0x20)\\n // bubble errors\\n if iszero(success) {\\n let ptr := mload(0x40)\\n returndatacopy(ptr, 0, returndatasize())\\n revert(ptr, returndatasize())\\n }\\n returnSize := returndatasize()\\n returnValue := mload(0)\\n }\\n\\n if (returnSize == 0 ? address(token).code.length == 0 : returnValue != 1) {\\n revert SafeERC20FailedOperation(address(token));\\n }\\n }\\n\\n /**\\n * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n * on the return value: the return value is optional (but if data is returned, it must not be false).\\n * @param token The token targeted by the call.\\n * @param data The call data (encoded using abi.encode or one of its variants).\\n *\\n * This is a variant of {_callOptionalReturn} that silently catches all reverts and returns a bool instead.\\n */\\n function _callOptionalReturnBool(IERC20 token, bytes memory data) private returns (bool) {\\n bool success;\\n uint256 returnSize;\\n uint256 returnValue;\\n assembly (\\\"memory-safe\\\") {\\n success := call(gas(), token, 0, add(data, 0x20), mload(data), 0, 0x20)\\n returnSize := returndatasize()\\n returnValue := mload(0)\\n }\\n return success && (returnSize == 0 ? address(token).code.length > 0 : returnValue == 1);\\n }\\n}\\n\",\"keccak256\":\"0xca2ae13e0610f6a99238dd00b97bd786bc92732dae6d6b9d61f573ec51018310\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.20;\\n\\nimport {Errors} from \\\"./Errors.sol\\\";\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev There's no code at `target` (it is not a contract).\\n */\\n error AddressEmptyCode(address target);\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.8.20/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n if (address(this).balance < amount) {\\n revert Errors.InsufficientBalance(address(this).balance, amount);\\n }\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n if (!success) {\\n revert Errors.FailedCall();\\n }\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason or custom error, it is bubbled\\n * up by this function (like regular Solidity function calls). However, if\\n * the call reverted with no returned reason, this function reverts with a\\n * {Errors.FailedCall} error.\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n if (address(this).balance < value) {\\n revert Errors.InsufficientBalance(address(this).balance, value);\\n }\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResultFromTarget(target, success, returndata);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResultFromTarget(target, success, returndata);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResultFromTarget(target, success, returndata);\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call to smart-contract was successful, and reverts if the target\\n * was not a contract or bubbling up the revert reason (falling back to {Errors.FailedCall}) in case\\n * of an unsuccessful call.\\n */\\n function verifyCallResultFromTarget(\\n address target,\\n bool success,\\n bytes memory returndata\\n ) internal view returns (bytes memory) {\\n if (!success) {\\n _revert(returndata);\\n } else {\\n // only check if target is a contract if the call was successful and the return data is empty\\n // otherwise we already know that it was a contract\\n if (returndata.length == 0 && target.code.length == 0) {\\n revert AddressEmptyCode(target);\\n }\\n return returndata;\\n }\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call was successful, and reverts if it wasn't, either by bubbling the\\n * revert reason or with a default {Errors.FailedCall} error.\\n */\\n function verifyCallResult(bool success, bytes memory returndata) internal pure returns (bytes memory) {\\n if (!success) {\\n _revert(returndata);\\n } else {\\n return returndata;\\n }\\n }\\n\\n /**\\n * @dev Reverts with returndata if present. Otherwise reverts with {Errors.FailedCall}.\\n */\\n function _revert(bytes memory returndata) private pure {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n assembly (\\\"memory-safe\\\") {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert Errors.FailedCall();\\n }\\n }\\n}\\n\",\"keccak256\":\"0x9d8da059267bac779a2dbbb9a26c2acf00ca83085e105d62d5d4ef96054a47f5\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n\\n function _contextSuffixLength() internal view virtual returns (uint256) {\\n return 0;\\n }\\n}\\n\",\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Errors.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/Errors.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Collection of common custom errors used in multiple contracts\\n *\\n * IMPORTANT: Backwards compatibility is not guaranteed in future versions of the library.\\n * It is recommended to avoid relying on the error API for critical functionality.\\n *\\n * _Available since v5.1._\\n */\\nlibrary Errors {\\n /**\\n * @dev The ETH balance of the account is not enough to perform the operation.\\n */\\n error InsufficientBalance(uint256 balance, uint256 needed);\\n\\n /**\\n * @dev A call to an address target failed. The target may have reverted.\\n */\\n error FailedCall();\\n\\n /**\\n * @dev The deployment failed.\\n */\\n error FailedDeployment();\\n\\n /**\\n * @dev A necessary precompile is missing.\\n */\\n error MissingPrecompile(address);\\n}\\n\",\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/introspection/IERC165.sol)\\n\\npragma solidity ^0.8.20;\\n\\n/**\\n * @dev Interface of the ERC-165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[ERC].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\"},\"contracts/MyOFT.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.8.22;\\n\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\nimport { OFT } from \\\"@layerzerolabs/oft-evm/contracts/OFT.sol\\\";\\n\\ncontract MyOFT is OFT {\\n constructor(\\n string memory _name,\\n string memory _symbol,\\n address _lzEndpoint,\\n address _delegate\\n ) OFT(_name, _symbol, _lzEndpoint, _delegate) Ownable(_delegate) {}\\n}\\n\",\"keccak256\":\"0x903ef3775b76a5c87c69530c8c70b97b3474317b72dae1967b4cc3e00bbb3042\",\"license\":\"UNLICENSED\"},\"contracts/mocks/MyOFTMock.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.8.22;\\n\\nimport { MyOFT } from \\\"../MyOFT.sol\\\";\\n\\n// @dev WARNING: This is for testing purposes only\\ncontract MyOFTMock is MyOFT {\\n constructor(\\n string memory _name,\\n string memory _symbol,\\n address _lzEndpoint,\\n address _delegate\\n ) MyOFT(_name, _symbol, _lzEndpoint, _delegate) {}\\n\\n function mint(address _to, uint256 _amount) public {\\n _mint(_to, _amount);\\n }\\n}\\n\",\"keccak256\":\"0xa72bec6c7982566a2f1d7fb3c516d952d60d3afd0383432c225b60afa692dc5c\",\"license\":\"UNLICENSED\"}},\"version\":1}", - "storageLayout": { - "storage": [ - { - "astId": 3837, - "contract": "contracts/mocks/MyOFTMock.sol:MyOFTMock", - "label": "_owner", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 1390, - "contract": "contracts/mocks/MyOFTMock.sol:MyOFTMock", - "label": "peers", - "offset": 0, - "slot": "1", - "type": "t_mapping(t_uint32,t_bytes32)" - }, - { - "astId": 2166, - "contract": "contracts/mocks/MyOFTMock.sol:MyOFTMock", - "label": "preCrime", - "offset": 0, - "slot": "2", - "type": "t_address" - }, - { - "astId": 2006, - "contract": "contracts/mocks/MyOFTMock.sol:MyOFTMock", - "label": "enforcedOptions", - "offset": 0, - "slot": "3", - "type": "t_mapping(t_uint32,t_mapping(t_uint16,t_bytes_storage))" - }, - { - "astId": 2784, - "contract": "contracts/mocks/MyOFTMock.sol:MyOFTMock", - "label": "msgInspector", - "offset": 0, - "slot": "4", - "type": "t_address" - }, - { - "astId": 4226, - "contract": "contracts/mocks/MyOFTMock.sol:MyOFTMock", - "label": "_balances", - "offset": 0, - "slot": "5", - "type": "t_mapping(t_address,t_uint256)" - }, - { - "astId": 4232, - "contract": "contracts/mocks/MyOFTMock.sol:MyOFTMock", - "label": "_allowances", - "offset": 0, - "slot": "6", - "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))" - }, - { - "astId": 4234, - "contract": "contracts/mocks/MyOFTMock.sol:MyOFTMock", - "label": "_totalSupply", - "offset": 0, - "slot": "7", - "type": "t_uint256" - }, - { - "astId": 4236, - "contract": "contracts/mocks/MyOFTMock.sol:MyOFTMock", - "label": "_name", - "offset": 0, - "slot": "8", - "type": "t_string_storage" - }, - { - "astId": 4238, - "contract": "contracts/mocks/MyOFTMock.sol:MyOFTMock", - "label": "_symbol", - "offset": 0, - "slot": "9", - "type": "t_string_storage" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_bytes32": { - "encoding": "inplace", - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes_storage": { - "encoding": "bytes", - "label": "bytes", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_mapping(t_address,t_uint256))": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => mapping(address => uint256))", - "numberOfBytes": "32", - "value": "t_mapping(t_address,t_uint256)" - }, - "t_mapping(t_address,t_uint256)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => uint256)", - "numberOfBytes": "32", - "value": "t_uint256" - }, - "t_mapping(t_uint16,t_bytes_storage)": { - "encoding": "mapping", - "key": "t_uint16", - "label": "mapping(uint16 => bytes)", - "numberOfBytes": "32", - "value": "t_bytes_storage" - }, - "t_mapping(t_uint32,t_bytes32)": { - "encoding": "mapping", - "key": "t_uint32", - "label": "mapping(uint32 => bytes32)", - "numberOfBytes": "32", - "value": "t_bytes32" - }, - "t_mapping(t_uint32,t_mapping(t_uint16,t_bytes_storage))": { - "encoding": "mapping", - "key": "t_uint32", - "label": "mapping(uint32 => mapping(uint16 => bytes))", - "numberOfBytes": "32", - "value": "t_mapping(t_uint16,t_bytes_storage)" - }, - "t_string_storage": { - "encoding": "bytes", - "label": "string", - "numberOfBytes": "32" - }, - "t_uint16": { - "encoding": "inplace", - "label": "uint16", - "numberOfBytes": "2" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint32": { - "encoding": "inplace", - "label": "uint32", - "numberOfBytes": "4" - } - } - }, - "userdoc": { - "kind": "user", - "methods": { - "allowInitializePath((uint32,bytes32,uint64))": { - "notice": "Checks if the path initialization is allowed based on the provided origin." - }, - "approvalRequired()": { - "notice": "Indicates whether the OFT contract requires approval of the 'token()' to send." - }, - "combineOptions(uint32,uint16,bytes)": { - "notice": "Combines options for a given endpoint and message type." - }, - "endpoint()": { - "notice": "Retrieves the LayerZero endpoint associated with the OApp." - }, - "isComposeMsgSender((uint32,bytes32,uint64),bytes,address)": { - "notice": "Indicates whether an address is an approved composeMsg sender to the Endpoint." - }, - "nextNonce(uint32,bytes32)": { - "notice": "Retrieves the next nonce for a given source endpoint and sender address." - }, - "oAppVersion()": { - "notice": "Retrieves the OApp version information." - }, - "oftVersion()": { - "notice": "Retrieves interfaceID and the version of the OFT." - }, - "peers(uint32)": { - "notice": "Retrieves the peer (OApp) associated with a corresponding endpoint." - }, - "quoteOFT((uint32,bytes32,uint256,uint256,bytes,bytes,bytes))": { - "notice": "Provides the fee breakdown and settings data for an OFT. Unused in the default implementation." - }, - "quoteSend((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),bool)": { - "notice": "Provides a quote for the send() operation." - }, - "setDelegate(address)": { - "notice": "Sets the delegate address for the OApp." - }, - "setPeer(uint32,bytes32)": { - "notice": "Sets the peer address (OApp instance) for a corresponding endpoint." - } - }, - "version": 1 - } - } - } - } - } -} diff --git a/examples/oft-movement/artifacts/contracts/MyOFT.sol/MyOFT.json b/examples/oft-movement/artifacts/contracts/MyOFT.sol/MyOFT.json deleted file mode 100644 index f9b292c47..000000000 --- a/examples/oft-movement/artifacts/contracts/MyOFT.sol/MyOFT.json +++ /dev/null @@ -1,1611 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "MyOFT", - "sourceName": "contracts/MyOFT.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "string", - "name": "_name", - "type": "string" - }, - { - "internalType": "string", - "name": "_symbol", - "type": "string" - }, - { - "internalType": "address", - "name": "_lzEndpoint", - "type": "address" - }, - { - "internalType": "address", - "name": "_delegate", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "allowance", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "needed", - "type": "uint256" - } - ], - "name": "ERC20InsufficientAllowance", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "balance", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "needed", - "type": "uint256" - } - ], - "name": "ERC20InsufficientBalance", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "approver", - "type": "address" - } - ], - "name": "ERC20InvalidApprover", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "receiver", - "type": "address" - } - ], - "name": "ERC20InvalidReceiver", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "ERC20InvalidSender", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - } - ], - "name": "ERC20InvalidSpender", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidDelegate", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidEndpointCall", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidLocalDecimals", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "options", - "type": "bytes" - } - ], - "name": "InvalidOptions", - "type": "error" - }, - { - "inputs": [], - "name": "LzTokenUnavailable", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "eid", - "type": "uint32" - } - ], - "name": "NoPeer", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "msgValue", - "type": "uint256" - } - ], - "name": "NotEnoughNative", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "addr", - "type": "address" - } - ], - "name": "OnlyEndpoint", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "eid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - } - ], - "name": "OnlyPeer", - "type": "error" - }, - { - "inputs": [], - "name": "OnlySelf", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "OwnableInvalidOwner", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "OwnableUnauthorizedAccount", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - } - ], - "name": "SafeERC20FailedOperation", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "result", - "type": "bytes" - } - ], - "name": "SimulationResult", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "amountLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minAmountLD", - "type": "uint256" - } - ], - "name": "SlippageExceeded", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "eid", - "type": "uint32" - }, - { - "internalType": "uint16", - "name": "msgType", - "type": "uint16" - }, - { - "internalType": "bytes", - "name": "options", - "type": "bytes" - } - ], - "indexed": false, - "internalType": "struct EnforcedOptionParam[]", - "name": "_enforcedOptions", - "type": "tuple[]" - } - ], - "name": "EnforcedOptionSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "inspector", - "type": "address" - } - ], - "name": "MsgInspectorSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "guid", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "address", - "name": "toAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amountReceivedLD", - "type": "uint256" - } - ], - "name": "OFTReceived", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "guid", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "address", - "name": "fromAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amountSentLD", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amountReceivedLD", - "type": "uint256" - } - ], - "name": "OFTSent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "eid", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "peer", - "type": "bytes32" - } - ], - "name": "PeerSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "preCrimeAddress", - "type": "address" - } - ], - "name": "PreCrimeSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "inputs": [], - "name": "SEND", - "outputs": [ - { - "internalType": "uint16", - "name": "", - "type": "uint16" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "SEND_AND_CALL", - "outputs": [ - { - "internalType": "uint16", - "name": "", - "type": "uint16" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - } - ], - "internalType": "struct Origin", - "name": "origin", - "type": "tuple" - } - ], - "name": "allowInitializePath", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "spender", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "approvalRequired", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_eid", - "type": "uint32" - }, - { - "internalType": "uint16", - "name": "_msgType", - "type": "uint16" - }, - { - "internalType": "bytes", - "name": "_extraOptions", - "type": "bytes" - } - ], - "name": "combineOptions", - "outputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "decimalConversionRate", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "decimals", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "endpoint", - "outputs": [ - { - "internalType": "contract ILayerZeroEndpointV2", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "eid", - "type": "uint32" - }, - { - "internalType": "uint16", - "name": "msgType", - "type": "uint16" - } - ], - "name": "enforcedOptions", - "outputs": [ - { - "internalType": "bytes", - "name": "enforcedOption", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - } - ], - "internalType": "struct Origin", - "name": "", - "type": "tuple" - }, - { - "internalType": "bytes", - "name": "", - "type": "bytes" - }, - { - "internalType": "address", - "name": "_sender", - "type": "address" - } - ], - "name": "isComposeMsgSender", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_eid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_peer", - "type": "bytes32" - } - ], - "name": "isPeer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - } - ], - "internalType": "struct Origin", - "name": "_origin", - "type": "tuple" - }, - { - "internalType": "bytes32", - "name": "_guid", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "_message", - "type": "bytes" - }, - { - "internalType": "address", - "name": "_executor", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "lzReceive", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - } - ], - "internalType": "struct Origin", - "name": "origin", - "type": "tuple" - }, - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "guid", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "address", - "name": "executor", - "type": "address" - }, - { - "internalType": "bytes", - "name": "message", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "extraData", - "type": "bytes" - } - ], - "internalType": "struct InboundPacket[]", - "name": "_packets", - "type": "tuple[]" - } - ], - "name": "lzReceiveAndRevert", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - } - ], - "internalType": "struct Origin", - "name": "_origin", - "type": "tuple" - }, - { - "internalType": "bytes32", - "name": "_guid", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "_message", - "type": "bytes" - }, - { - "internalType": "address", - "name": "_executor", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "lzReceiveSimulate", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "msgInspector", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "nextNonce", - "outputs": [ - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "oApp", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "oAppVersion", - "outputs": [ - { - "internalType": "uint64", - "name": "senderVersion", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "receiverVersion", - "type": "uint64" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [], - "name": "oftVersion", - "outputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - }, - { - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "eid", - "type": "uint32" - } - ], - "name": "peers", - "outputs": [ - { - "internalType": "bytes32", - "name": "peer", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "preCrime", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "to", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amountLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minAmountLD", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "extraOptions", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "composeMsg", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "oftCmd", - "type": "bytes" - } - ], - "internalType": "struct SendParam", - "name": "_sendParam", - "type": "tuple" - } - ], - "name": "quoteOFT", - "outputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "minAmountLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxAmountLD", - "type": "uint256" - } - ], - "internalType": "struct OFTLimit", - "name": "oftLimit", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "int256", - "name": "feeAmountLD", - "type": "int256" - }, - { - "internalType": "string", - "name": "description", - "type": "string" - } - ], - "internalType": "struct OFTFeeDetail[]", - "name": "oftFeeDetails", - "type": "tuple[]" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "amountSentLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "amountReceivedLD", - "type": "uint256" - } - ], - "internalType": "struct OFTReceipt", - "name": "oftReceipt", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "to", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amountLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minAmountLD", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "extraOptions", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "composeMsg", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "oftCmd", - "type": "bytes" - } - ], - "internalType": "struct SendParam", - "name": "_sendParam", - "type": "tuple" - }, - { - "internalType": "bool", - "name": "_payInLzToken", - "type": "bool" - } - ], - "name": "quoteSend", - "outputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "nativeFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "lzTokenFee", - "type": "uint256" - } - ], - "internalType": "struct MessagingFee", - "name": "msgFee", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "to", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amountLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minAmountLD", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "extraOptions", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "composeMsg", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "oftCmd", - "type": "bytes" - } - ], - "internalType": "struct SendParam", - "name": "_sendParam", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "nativeFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "lzTokenFee", - "type": "uint256" - } - ], - "internalType": "struct MessagingFee", - "name": "_fee", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_refundAddress", - "type": "address" - } - ], - "name": "send", - "outputs": [ - { - "components": [ - { - "internalType": "bytes32", - "name": "guid", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "nativeFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "lzTokenFee", - "type": "uint256" - } - ], - "internalType": "struct MessagingFee", - "name": "fee", - "type": "tuple" - } - ], - "internalType": "struct MessagingReceipt", - "name": "msgReceipt", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "amountSentLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "amountReceivedLD", - "type": "uint256" - } - ], - "internalType": "struct OFTReceipt", - "name": "oftReceipt", - "type": "tuple" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_delegate", - "type": "address" - } - ], - "name": "setDelegate", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "eid", - "type": "uint32" - }, - { - "internalType": "uint16", - "name": "msgType", - "type": "uint16" - }, - { - "internalType": "bytes", - "name": "options", - "type": "bytes" - } - ], - "internalType": "struct EnforcedOptionParam[]", - "name": "_enforcedOptions", - "type": "tuple[]" - } - ], - "name": "setEnforcedOptions", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_msgInspector", - "type": "address" - } - ], - "name": "setMsgInspector", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_eid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_peer", - "type": "bytes32" - } - ], - "name": "setPeer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_preCrime", - "type": "address" - } - ], - "name": "setPreCrime", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "sharedDecimals", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "token", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "0x60c06040523480156200001157600080fd5b506040516200366a3803806200366a8339810160408190526200003491620002d2565b83838383838360128484818181818d6001600160a01b0381166200007257604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b6200007d8162000198565b506001600160a01b038083166080528116620000ac57604051632d618d8160e21b815260040160405180910390fd5b60805160405163ca5eb5e160e01b81526001600160a01b0383811660048301529091169063ca5eb5e190602401600060405180830381600087803b158015620000f457600080fd5b505af115801562000109573d6000803e3d6000fd5b505050505050505062000121620001e860201b60201c565b60ff168360ff16101562000148576040516301e9714b60e41b815260040160405180910390fd5b6200015560068462000377565b6200016290600a62000496565b60a052506008915062000178905083826200053f565b5060096200018782826200053f565b50505050505050505050506200060b565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600690565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200021557600080fd5b81516001600160401b0380821115620002325762000232620001ed565b604051601f8301601f19908116603f011681019082821181831017156200025d576200025d620001ed565b81604052838152602092508660208588010111156200027b57600080fd5b600091505b838210156200029f578582018301518183018401529082019062000280565b6000602085830101528094505050505092915050565b80516001600160a01b0381168114620002cd57600080fd5b919050565b60008060008060808587031215620002e957600080fd5b84516001600160401b03808211156200030157600080fd5b6200030f8883890162000203565b955060208701519150808211156200032657600080fd5b50620003358782880162000203565b9350506200034660408601620002b5565b91506200035660608601620002b5565b905092959194509250565b634e487b7160e01b600052601160045260246000fd5b60ff828116828216039081111562000393576200039362000361565b92915050565b600181815b80851115620003da578160001904821115620003be57620003be62000361565b80851615620003cc57918102915b93841c93908002906200039e565b509250929050565b600082620003f35750600162000393565b81620004025750600062000393565b81600181146200041b5760028114620004265762000446565b600191505062000393565b60ff8411156200043a576200043a62000361565b50506001821b62000393565b5060208310610133831016604e8410600b84101617156200046b575081810a62000393565b62000477838362000399565b80600019048211156200048e576200048e62000361565b029392505050565b6000620004a760ff841683620003e2565b9392505050565b600181811c90821680620004c357607f821691505b602082108103620004e457634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200053a576000816000526020600020601f850160051c81016020861015620005155750805b601f850160051c820191505b81811015620005365782815560010162000521565b5050505b505050565b81516001600160401b038111156200055b576200055b620001ed565b62000573816200056c8454620004ae565b84620004ea565b602080601f831160018114620005ab5760008415620005925750858301515b600019600386901b1c1916600185901b17855562000536565b600085815260208120601f198616915b82811015620005dc57888601518255948401946001909101908401620005bb565b5085821015620005fb5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a051612ff3620006776000396000818161061e015281816119e001528181611a550152611c590152600081816104dd0152818161098d01528181610fdd01528181611254015281816115be01528181611d5101528181611ec10152611f780152612ff36000f3fe6080604052600436106102515760003560e01c80637d25a05e11610139578063bb0b6a53116100b6578063d045a0dc1161007a578063d045a0dc14610755578063d424388514610768578063dd62ed3e14610788578063f2fde38b146107ce578063fc0c546a14610461578063ff7bd03d146107ee57600080fd5b8063bb0b6a53146106b4578063bc70b354146106e1578063bd815db014610701578063c7c7f5b314610714578063ca5eb5e11461073557600080fd5b8063963efcaa116100fd578063963efcaa1461060c5780639f68b96414610640578063a9059cbb14610654578063b731ea0a14610674578063b98bd0701461069457600080fd5b80637d25a05e1461056a57806382413eac146105a5578063857749b0146105c55780638da5cb5b146105d957806395d89b41146105f757600080fd5b806323b872dd116101d25780635535d461116101965780635535d461146104745780635a0dfe4d146104945780635e280f11146104cb5780636fc1b31e146104ff57806370a082311461051f578063715018a61461055557600080fd5b806323b872dd146103d2578063313ce567146103f25780633400288b146104145780633b6f743b1461043457806352ae28791461046157600080fd5b8063134d4f2511610219578063134d4f251461032d578063156a0d0f1461035557806317442b701461037c57806318160ddd1461039e5780631f5e1334146103bd57600080fd5b806306fdde0314610256578063095ea7b3146102815780630d35b415146102b1578063111ecdad146102e057806313137d6514610318575b600080fd5b34801561026257600080fd5b5061026b61080e565b60405161027891906120f0565b60405180910390f35b34801561028d57600080fd5b506102a161029c366004612118565b6108a0565b6040519015158152602001610278565b3480156102bd57600080fd5b506102d16102cc36600461215c565b6108ba565b60405161027893929190612190565b3480156102ec57600080fd5b50600454610300906001600160a01b031681565b6040516001600160a01b039091168152602001610278565b61032b610326366004612283565b61098b565b005b34801561033957600080fd5b50610342600281565b60405161ffff9091168152602001610278565b34801561036157600080fd5b506040805162b9270b60e21b81526001602082015201610278565b34801561038857600080fd5b5060408051600181526002602082015201610278565b3480156103aa57600080fd5b506007545b604051908152602001610278565b3480156103c957600080fd5b50610342600181565b3480156103de57600080fd5b506102a16103ed366004612322565b610a4b565b3480156103fe57600080fd5b5060125b60405160ff9091168152602001610278565b34801561042057600080fd5b5061032b61042f36600461237c565b610a71565b34801561044057600080fd5b5061045461044f3660046123a6565b610a87565b60405161027891906123f7565b34801561046d57600080fd5b5030610300565b34801561048057600080fd5b5061026b61048f366004612420565b610aee565b3480156104a057600080fd5b506102a16104af36600461237c565b63ffffffff919091166000908152600160205260409020541490565b3480156104d757600080fd5b506103007f000000000000000000000000000000000000000000000000000000000000000081565b34801561050b57600080fd5b5061032b61051a366004612453565b610b93565b34801561052b57600080fd5b506103af61053a366004612453565b6001600160a01b031660009081526005602052604090205490565b34801561056157600080fd5b5061032b610bf0565b34801561057657600080fd5b5061058d61058536600461237c565b600092915050565b6040516001600160401b039091168152602001610278565b3480156105b157600080fd5b506102a16105c0366004612470565b610c04565b3480156105d157600080fd5b506006610402565b3480156105e557600080fd5b506000546001600160a01b0316610300565b34801561060357600080fd5b5061026b610c19565b34801561061857600080fd5b506103af7f000000000000000000000000000000000000000000000000000000000000000081565b34801561064c57600080fd5b5060006102a1565b34801561066057600080fd5b506102a161066f366004612118565b610c28565b34801561068057600080fd5b50600254610300906001600160a01b031681565b3480156106a057600080fd5b5061032b6106af36600461251a565b610c36565b3480156106c057600080fd5b506103af6106cf36600461255b565b60016020526000908152604090205481565b3480156106ed57600080fd5b5061026b6106fc366004612576565b610c50565b61032b61070f36600461251a565b610df8565b6107276107223660046125d6565b610f82565b604051610278929190612643565b34801561074157600080fd5b5061032b610750366004612453565b610fb6565b61032b610763366004612283565b61103c565b34801561077457600080fd5b5061032b610783366004612453565b61106b565b34801561079457600080fd5b506103af6107a3366004612695565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b3480156107da57600080fd5b5061032b6107e9366004612453565b6110c1565b3480156107fa57600080fd5b506102a16108093660046126c3565b6110ff565b60606008805461081d906126df565b80601f0160208091040260200160405190810160405280929190818152602001828054610849906126df565b80156108965780601f1061086b57610100808354040283529160200191610896565b820191906000526020600020905b81548152906001019060200180831161087957829003601f168201915b5050505050905090565b6000336108ae818585611135565b60019150505b92915050565b604080518082019091526000808252602082015260606108ed604051806040016040528060008152602001600081525090565b60408051808201825260008082526001600160401b03602080840182905284518381529081019094529195509182610948565b6040805180820190915260008152606060208201528152602001906001900390816109205790505b50935060008061096d604089013560608a013561096860208c018c61255b565b611147565b60408051808201909152918252602082015296989597505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633146109db576040516391ac5e4f60e01b81523360048201526024015b60405180910390fd5b602087018035906109f5906109f0908a61255b565b611183565b14610a3357610a07602088018861255b565b60405163309afaf360e21b815263ffffffff9091166004820152602088013560248201526044016109d2565b610a42878787878787876111bf565b50505050505050565b600033610a59858285611326565b610a648585856113a4565b60019150505b9392505050565b610a79611403565b610a838282611430565b5050565b60408051808201909152600080825260208201526000610ab760408501356060860135610968602088018861255b565b915050600080610ac78684611485565b9092509050610ae4610adc602088018861255b565b8383886115a8565b9695505050505050565b600360209081526000928352604080842090915290825290208054610b12906126df565b80601f0160208091040260200160405190810160405280929190818152602001828054610b3e906126df565b8015610b8b5780601f10610b6057610100808354040283529160200191610b8b565b820191906000526020600020905b815481529060010190602001808311610b6e57829003601f168201915b505050505081565b610b9b611403565b600480546001600160a01b0319166001600160a01b0383169081179091556040519081527ff0be4f1e87349231d80c36b33f9e8639658eeaf474014dee15a3e6a4d4414197906020015b60405180910390a150565b610bf8611403565b610c026000611689565b565b6001600160a01b03811630145b949350505050565b60606009805461081d906126df565b6000336108ae8185856113a4565b610c3e611403565b610a83610c4b82846127ca565b6116d9565b63ffffffff8416600090815260036020908152604080832061ffff87168452909152812080546060929190610c84906126df565b80601f0160208091040260200160405190810160405280929190818152602001828054610cb0906126df565b8015610cfd5780601f10610cd257610100808354040283529160200191610cfd565b820191906000526020600020905b815481529060010190602001808311610ce057829003601f168201915b505050505090508051600003610d4d5783838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929450610c119350505050565b6000839003610d5d579050610c11565b60028310610ddb57610da484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506117e092505050565b80610db284600281886128df565b604051602001610dc493929190612909565b604051602081830303815290604052915050610c11565b8383604051639a6d49cd60e01b81526004016109d292919061295a565b60005b81811015610f015736838383818110610e1657610e1661296e565b9050602002810190610e289190612984565b9050610e5b610e3a602083018361255b565b602083013563ffffffff919091166000908152600160205260409020541490565b610e655750610ef9565b3063d045a0dc60c08301358360a0810135610e846101008301836129a5565b610e95610100890160e08a01612453565b610ea36101208a018a6129a5565b6040518963ffffffff1660e01b8152600401610ec59796959493929190612a00565b6000604051808303818588803b158015610ede57600080fd5b505af1158015610ef2573d6000803e3d6000fd5b5050505050505b600101610dfb565b50336001600160a01b0316638e9e70996040518163ffffffff1660e01b8152600401600060405180830381865afa158015610f40573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610f689190810190612a86565b604051638351eea760e01b81526004016109d291906120f0565b610f8a612059565b6040805180820190915260008082526020820152610fa985858561180c565b915091505b935093915050565b610fbe611403565b60405163ca5eb5e160e01b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063ca5eb5e190602401600060405180830381600087803b15801561102157600080fd5b505af1158015611035573d6000803e3d6000fd5b5050505050565b33301461105c5760405163029a949d60e31b815260040160405180910390fd5b610a4287878787878787610a33565b611073611403565b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527fd48d879cef83a1c0bdda516f27b13ddb1b3f8bbac1c9e1511bb2a659c242776090602001610be5565b6110c9611403565b6001600160a01b0381166110f357604051631e4fbdf760e01b8152600060048201526024016109d2565b6110fc81611689565b50565b6000602082018035906001908390611117908661255b565b63ffffffff1681526020810191909152604001600020541492915050565b6111428383836001611907565b505050565b600080611153856119dc565b915081905083811015610fae576040516371c4efed60e01b815260048101829052602481018590526044016109d2565b63ffffffff8116600090815260016020526040812054806108b45760405163f6ff4fb760e01b815263ffffffff841660048201526024016109d2565b60006111d16111ce8787611a13565b90565b905060006111fd826111eb6111e68a8a611a2b565b611a4e565b6111f860208d018d61255b565b611a83565b905060288611156112c457600061123a61121d60608c0160408d01612af3565b61122a60208d018d61255b565b846112358c8c611aab565b611af6565b604051633e5ac80960e11b81529091506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690637cb59012906112909086908d906000908790600401612b10565b600060405180830381600087803b1580156112aa57600080fd5b505af11580156112be573d6000803e3d6000fd5b50505050505b6001600160a01b038216887fefed6d3500546b29533b128a29e3a94d70788727f0507505ac12eaf2e578fd9c6112fd60208d018d61255b565b6040805163ffffffff9092168252602082018690520160405180910390a3505050505050505050565b6001600160a01b03838116600090815260066020908152604080832093861683529290522054600019811461139e578181101561138f57604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064016109d2565b61139e84848484036000611907565b50505050565b6001600160a01b0383166113ce57604051634b637e8f60e11b8152600060048201526024016109d2565b6001600160a01b0382166113f85760405163ec442f0560e01b8152600060048201526024016109d2565b611142838383611b28565b6000546001600160a01b03163314610c025760405163118cdaa760e01b81523360048201526024016109d2565b63ffffffff8216600081815260016020908152604091829020849055815192835282018390527f238399d427b947898edb290f5ff0f9109849b1c3ba196a42e35f00c50a54b98b910160405180910390a15050565b60608060006114e2856020013561149b86611c52565b6114a860a08901896129a5565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c7e92505050565b90935090506000816114f55760016114f8565b60025b905061151861150a602088018861255b565b826106fc60808a018a6129a5565b6004549093506001600160a01b0316801561159e5760405163043a78eb60e01b81526001600160a01b0382169063043a78eb9061155b9088908890600401612b41565b602060405180830381865afa158015611578573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061159c9190612b66565b505b5050509250929050565b60408051808201909152600080825260208201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ddc28c586040518060a001604052808863ffffffff16815260200161160b89611183565b8152602001878152602001868152602001851515815250306040518363ffffffff1660e01b8152600401611640929190612b83565b6040805180830381865afa15801561165c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116809190612c2c565b95945050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60005b81518110156117b05761170b8282815181106116fa576116fa61296e565b6020026020010151604001516117e0565b81818151811061171d5761171d61296e565b6020026020010151604001516003600084848151811061173f5761173f61296e565b60200260200101516000015163ffffffff1663ffffffff16815260200190815260200160002060008484815181106117795761177961296e565b60200260200101516020015161ffff1661ffff16815260200190815260200160002090816117a79190612c98565b506001016116dc565b507fbe4864a8e820971c0247f5992e2da559595f7bf076a21cb5928d443d2a13b67481604051610be59190612d57565b600281015161ffff8116600314610a835781604051639a6d49cd60e01b81526004016109d291906120f0565b611814612059565b604080518082019091526000808252602082015260008061184b33604089013560608a013561184660208c018c61255b565b611cf8565b9150915060008061185c8984611485565b909250905061188861187160208b018b61255b565b8383611882368d90038d018d612de2565b8b611d1e565b60408051808201909152858152602080820186905282519298509096503391907f85496b760a4b7f8d66384b9df21b381f5d1b1e79f229a47aaf4c232edc2fe59a906118d6908d018d61255b565b6040805163ffffffff909216825260208201899052810187905260600160405180910390a350505050935093915050565b6001600160a01b0384166119315760405163e602df0560e01b8152600060048201526024016109d2565b6001600160a01b03831661195b57604051634a1406b160e11b8152600060048201526024016109d2565b6001600160a01b038085166000908152600660209081526040808320938716835292905220829055801561139e57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516119ce91815260200190565b60405180910390a350505050565b60007f0000000000000000000000000000000000000000000000000000000000000000611a098184612e2a565b6108b49190612e4c565b6000611a2260208284866128df565b610a6a91612e63565b6000611a3b6028602084866128df565b611a4491612e81565b60c01c9392505050565b60006108b47f00000000000000000000000000000000000000000000000000000000000000006001600160401b038416612e4c565b60006001600160a01b038416611a995761dead93505b611aa38484611e29565b509092915050565b6060611aba82602881866128df565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929695505050505050565b606084848484604051602001611b0f9493929190612eb1565b6040516020818303038152906040529050949350505050565b6001600160a01b038316611b53578060076000828254611b489190612f00565b90915550611bc59050565b6001600160a01b03831660009081526005602052604090205481811015611ba65760405163391434e360e21b81526001600160a01b038516600482015260248101829052604481018390526064016109d2565b6001600160a01b03841660009081526005602052604090209082900390555b6001600160a01b038216611be157600780548290039055611c00565b6001600160a01b03821660009081526005602052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611c4591815260200190565b60405180910390a3505050565b60006108b47f000000000000000000000000000000000000000000000000000000000000000083612e2a565b8051606090151580611cc7578484604051602001611cb392919091825260c01b6001600160c01b031916602082015260280190565b604051602081830303815290604052611cee565b84843385604051602001611cde9493929190612f13565b6040516020818303038152906040525b9150935093915050565b600080611d06858585611147565b9092509050611d158683611e5f565b94509492505050565b611d26612059565b6000611d358460000151611e95565b602085015190915015611d4f57611d4f8460200151611ebd565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632637a450826040518060a001604052808b63ffffffff168152602001611d9f8c611183565b81526020018a815260200189815260200160008960200151111515815250866040518463ffffffff1660e01b8152600401611ddb929190612b83565b60806040518083038185885af1158015611df9573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611e1e9190612f56565b979650505050505050565b6001600160a01b038216611e535760405163ec442f0560e01b8152600060048201526024016109d2565b610a8360008383611b28565b6001600160a01b038216611e8957604051634b637e8f60e11b8152600060048201526024016109d2565b610a8382600083611b28565b6000813414611eb9576040516304fb820960e51b81523460048201526024016109d2565b5090565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e4fe1d946040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f419190612fa0565b90506001600160a01b038116611f6a576040516329b99a9560e11b815260040160405180910390fd5b6040805133602482018190527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0381811660448501526064808501889052855180860390910181526084909401909452602080840180516001600160e01b03166323b872dd60e01b1781528451610a8396881695899361139e93889360009283929091839182885af18061200b576040513d6000823e3d81fd5b50506000513d91508115612023578060011415612030565b6001600160a01b0384163b155b1561139e57604051635274afe760e01b81526001600160a01b03851660048201526024016109d2565b60405180606001604052806000801916815260200160006001600160401b0316815260200161209b604051806040016040528060008152602001600081525090565b905290565b60005b838110156120bb5781810151838201526020016120a3565b50506000910152565b600081518084526120dc8160208601602086016120a0565b601f01601f19169290920160200192915050565b602081526000610a6a60208301846120c4565b6001600160a01b03811681146110fc57600080fd5b6000806040838503121561212b57600080fd5b823561213681612103565b946020939093013593505050565b600060e0828403121561215657600080fd5b50919050565b60006020828403121561216e57600080fd5b81356001600160401b0381111561218457600080fd5b610c1184828501612144565b8351815260208085015190820152600060a08201604060a0604085015281865180845260c08601915060c08160051b8701019350602080890160005b8381101561220b5788870360bf190185528151805188528301518388018790526121f8878901826120c4565b97505093820193908201906001016121cc565b50508751606088015250505060208501516080850152509050610c11565b60006060828403121561215657600080fd5b60008083601f84011261224d57600080fd5b5081356001600160401b0381111561226457600080fd5b60208301915083602082850101111561227c57600080fd5b9250929050565b600080600080600080600060e0888a03121561229e57600080fd5b6122a88989612229565b96506060880135955060808801356001600160401b03808211156122cb57600080fd5b6122d78b838c0161223b565b909750955060a08a013591506122ec82612103565b90935060c0890135908082111561230257600080fd5b5061230f8a828b0161223b565b989b979a50959850939692959293505050565b60008060006060848603121561233757600080fd5b833561234281612103565b9250602084013561235281612103565b929592945050506040919091013590565b803563ffffffff8116811461237757600080fd5b919050565b6000806040838503121561238f57600080fd5b61213683612363565b80151581146110fc57600080fd5b600080604083850312156123b957600080fd5b82356001600160401b038111156123cf57600080fd5b6123db85828601612144565b92505060208301356123ec81612398565b809150509250929050565b8151815260208083015190820152604081016108b4565b803561ffff8116811461237757600080fd5b6000806040838503121561243357600080fd5b61243c83612363565b915061244a6020840161240e565b90509250929050565b60006020828403121561246557600080fd5b8135610a6a81612103565b60008060008060a0858703121561248657600080fd5b6124908686612229565b935060608501356001600160401b038111156124ab57600080fd5b6124b78782880161223b565b90945092505060808501356124cb81612103565b939692955090935050565b60008083601f8401126124e857600080fd5b5081356001600160401b038111156124ff57600080fd5b6020830191508360208260051b850101111561227c57600080fd5b6000806020838503121561252d57600080fd5b82356001600160401b0381111561254357600080fd5b61254f858286016124d6565b90969095509350505050565b60006020828403121561256d57600080fd5b610a6a82612363565b6000806000806060858703121561258c57600080fd5b61259585612363565b93506125a36020860161240e565b925060408501356001600160401b038111156125be57600080fd5b6125ca8782880161223b565b95989497509550505050565b600080600083850360808112156125ec57600080fd5b84356001600160401b0381111561260257600080fd5b61260e87828801612144565b9450506040601f198201121561262357600080fd5b50602084019150606084013561263881612103565b809150509250925092565b600060c082019050835182526001600160401b036020850151166020830152604084015161267e604084018280518252602090810151910152565b5082516080830152602083015160a0830152610a6a565b600080604083850312156126a857600080fd5b82356126b381612103565b915060208301356123ec81612103565b6000606082840312156126d557600080fd5b610a6a8383612229565b600181811c908216806126f357607f821691505b60208210810361215657634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b038111828210171561274b5761274b612713565b60405290565b604080519081016001600160401b038111828210171561274b5761274b612713565b604051601f8201601f191681016001600160401b038111828210171561279b5761279b612713565b604052919050565b60006001600160401b038211156127bc576127bc612713565b50601f01601f191660200190565b60006001600160401b03808411156127e4576127e4612713565b8360051b60206127f5818301612773565b86815291850191818101903684111561280d57600080fd5b865b848110156128d3578035868111156128275760008081fd5b8801606036829003121561283b5760008081fd5b612843612729565b61284c82612363565b815261285986830161240e565b86820152604080830135898111156128715760008081fd5b929092019136601f8401126128865760008081fd5b8235612899612894826127a3565b612773565b81815236898387010111156128ae5760008081fd5b818986018a83013760009181018901919091529082015284525091830191830161280f565b50979650505050505050565b600080858511156128ef57600080fd5b838611156128fc57600080fd5b5050820193919092039150565b6000845161291b8184602089016120a0565b8201838582376000930192835250909392505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b602081526000610c11602083018486612931565b634e487b7160e01b600052603260045260246000fd5b6000823561013e1983360301811261299b57600080fd5b9190910192915050565b6000808335601e198436030181126129bc57600080fd5b8301803591506001600160401b038211156129d657600080fd5b60200191503681900382131561227c57600080fd5b6001600160401b03811681146110fc57600080fd5b63ffffffff612a0e89612363565b1681526020880135602082015260006040890135612a2b816129eb565b6001600160401b03811660408401525087606083015260e06080830152612a5660e083018789612931565b6001600160a01b03861660a084015282810360c0840152612a78818587612931565b9a9950505050505050505050565b600060208284031215612a9857600080fd5b81516001600160401b03811115612aae57600080fd5b8201601f81018413612abf57600080fd5b8051612acd612894826127a3565b818152856020838501011115612ae257600080fd5b6116808260208301602086016120a0565b600060208284031215612b0557600080fd5b8135610a6a816129eb565b60018060a01b038516815283602082015261ffff83166040820152608060608201526000610ae460808301846120c4565b604081526000612b5460408301856120c4565b828103602084015261168081856120c4565b600060208284031215612b7857600080fd5b8151610a6a81612398565b6040815263ffffffff8351166040820152602083015160608201526000604084015160a06080840152612bb960e08401826120c4565b90506060850151603f198483030160a0850152612bd682826120c4565b60809690960151151560c08501525050506001600160a01b039190911660209091015290565b600060408284031215612c0e57600080fd5b612c16612751565b9050815181526020820151602082015292915050565b600060408284031215612c3e57600080fd5b610a6a8383612bfc565b601f821115611142576000816000526020600020601f850160051c81016020861015612c715750805b601f850160051c820191505b81811015612c9057828155600101612c7d565b505050505050565b81516001600160401b03811115612cb157612cb1612713565b612cc581612cbf84546126df565b84612c48565b602080601f831160018114612cfa5760008415612ce25750858301515b600019600386901b1c1916600185901b178555612c90565b600085815260208120601f198616915b82811015612d2957888601518255948401946001909101908401612d0a565b5085821015612d475787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b83811015612dd457888303603f190185528151805163ffffffff1684528781015161ffff16888501528601516060878501819052612dc0818601836120c4565b968901969450505090860190600101612d80565b509098975050505050505050565b600060408284031215612df457600080fd5b612dfc612751565b82358152602083013560208201528091505092915050565b634e487b7160e01b600052601160045260246000fd5b600082612e4757634e487b7160e01b600052601260045260246000fd5b500490565b80820281158282048414176108b4576108b4612e14565b803560208310156108b457600019602084900360031b1b1692915050565b6001600160c01b03198135818116916008851015612ea95780818660080360031b1b83161692505b505092915050565b6001600160401b0360c01b8560c01b16815263ffffffff60e01b8460e01b16600882015282600c82015260008251612ef081602c8501602087016120a0565b91909101602c0195945050505050565b808201808211156108b4576108b4612e14565b8481526001600160401b0360c01b8460c01b16602082015282602882015260008251612f468160488501602087016120a0565b9190910160480195945050505050565b600060808284031215612f6857600080fd5b612f70612729565b825181526020830151612f82816129eb565b6020820152612f948460408501612bfc565b60408201529392505050565b600060208284031215612fb257600080fd5b8151610a6a8161210356fea2646970667358221220a57d7f89465f52382b6c4fb535f012253eb27ee453204fb5020648385f95c20764736f6c63430008160033", - "deployedBytecode": "0x6080604052600436106102515760003560e01c80637d25a05e11610139578063bb0b6a53116100b6578063d045a0dc1161007a578063d045a0dc14610755578063d424388514610768578063dd62ed3e14610788578063f2fde38b146107ce578063fc0c546a14610461578063ff7bd03d146107ee57600080fd5b8063bb0b6a53146106b4578063bc70b354146106e1578063bd815db014610701578063c7c7f5b314610714578063ca5eb5e11461073557600080fd5b8063963efcaa116100fd578063963efcaa1461060c5780639f68b96414610640578063a9059cbb14610654578063b731ea0a14610674578063b98bd0701461069457600080fd5b80637d25a05e1461056a57806382413eac146105a5578063857749b0146105c55780638da5cb5b146105d957806395d89b41146105f757600080fd5b806323b872dd116101d25780635535d461116101965780635535d461146104745780635a0dfe4d146104945780635e280f11146104cb5780636fc1b31e146104ff57806370a082311461051f578063715018a61461055557600080fd5b806323b872dd146103d2578063313ce567146103f25780633400288b146104145780633b6f743b1461043457806352ae28791461046157600080fd5b8063134d4f2511610219578063134d4f251461032d578063156a0d0f1461035557806317442b701461037c57806318160ddd1461039e5780631f5e1334146103bd57600080fd5b806306fdde0314610256578063095ea7b3146102815780630d35b415146102b1578063111ecdad146102e057806313137d6514610318575b600080fd5b34801561026257600080fd5b5061026b61080e565b60405161027891906120f0565b60405180910390f35b34801561028d57600080fd5b506102a161029c366004612118565b6108a0565b6040519015158152602001610278565b3480156102bd57600080fd5b506102d16102cc36600461215c565b6108ba565b60405161027893929190612190565b3480156102ec57600080fd5b50600454610300906001600160a01b031681565b6040516001600160a01b039091168152602001610278565b61032b610326366004612283565b61098b565b005b34801561033957600080fd5b50610342600281565b60405161ffff9091168152602001610278565b34801561036157600080fd5b506040805162b9270b60e21b81526001602082015201610278565b34801561038857600080fd5b5060408051600181526002602082015201610278565b3480156103aa57600080fd5b506007545b604051908152602001610278565b3480156103c957600080fd5b50610342600181565b3480156103de57600080fd5b506102a16103ed366004612322565b610a4b565b3480156103fe57600080fd5b5060125b60405160ff9091168152602001610278565b34801561042057600080fd5b5061032b61042f36600461237c565b610a71565b34801561044057600080fd5b5061045461044f3660046123a6565b610a87565b60405161027891906123f7565b34801561046d57600080fd5b5030610300565b34801561048057600080fd5b5061026b61048f366004612420565b610aee565b3480156104a057600080fd5b506102a16104af36600461237c565b63ffffffff919091166000908152600160205260409020541490565b3480156104d757600080fd5b506103007f000000000000000000000000000000000000000000000000000000000000000081565b34801561050b57600080fd5b5061032b61051a366004612453565b610b93565b34801561052b57600080fd5b506103af61053a366004612453565b6001600160a01b031660009081526005602052604090205490565b34801561056157600080fd5b5061032b610bf0565b34801561057657600080fd5b5061058d61058536600461237c565b600092915050565b6040516001600160401b039091168152602001610278565b3480156105b157600080fd5b506102a16105c0366004612470565b610c04565b3480156105d157600080fd5b506006610402565b3480156105e557600080fd5b506000546001600160a01b0316610300565b34801561060357600080fd5b5061026b610c19565b34801561061857600080fd5b506103af7f000000000000000000000000000000000000000000000000000000000000000081565b34801561064c57600080fd5b5060006102a1565b34801561066057600080fd5b506102a161066f366004612118565b610c28565b34801561068057600080fd5b50600254610300906001600160a01b031681565b3480156106a057600080fd5b5061032b6106af36600461251a565b610c36565b3480156106c057600080fd5b506103af6106cf36600461255b565b60016020526000908152604090205481565b3480156106ed57600080fd5b5061026b6106fc366004612576565b610c50565b61032b61070f36600461251a565b610df8565b6107276107223660046125d6565b610f82565b604051610278929190612643565b34801561074157600080fd5b5061032b610750366004612453565b610fb6565b61032b610763366004612283565b61103c565b34801561077457600080fd5b5061032b610783366004612453565b61106b565b34801561079457600080fd5b506103af6107a3366004612695565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b3480156107da57600080fd5b5061032b6107e9366004612453565b6110c1565b3480156107fa57600080fd5b506102a16108093660046126c3565b6110ff565b60606008805461081d906126df565b80601f0160208091040260200160405190810160405280929190818152602001828054610849906126df565b80156108965780601f1061086b57610100808354040283529160200191610896565b820191906000526020600020905b81548152906001019060200180831161087957829003601f168201915b5050505050905090565b6000336108ae818585611135565b60019150505b92915050565b604080518082019091526000808252602082015260606108ed604051806040016040528060008152602001600081525090565b60408051808201825260008082526001600160401b03602080840182905284518381529081019094529195509182610948565b6040805180820190915260008152606060208201528152602001906001900390816109205790505b50935060008061096d604089013560608a013561096860208c018c61255b565b611147565b60408051808201909152918252602082015296989597505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633146109db576040516391ac5e4f60e01b81523360048201526024015b60405180910390fd5b602087018035906109f5906109f0908a61255b565b611183565b14610a3357610a07602088018861255b565b60405163309afaf360e21b815263ffffffff9091166004820152602088013560248201526044016109d2565b610a42878787878787876111bf565b50505050505050565b600033610a59858285611326565b610a648585856113a4565b60019150505b9392505050565b610a79611403565b610a838282611430565b5050565b60408051808201909152600080825260208201526000610ab760408501356060860135610968602088018861255b565b915050600080610ac78684611485565b9092509050610ae4610adc602088018861255b565b8383886115a8565b9695505050505050565b600360209081526000928352604080842090915290825290208054610b12906126df565b80601f0160208091040260200160405190810160405280929190818152602001828054610b3e906126df565b8015610b8b5780601f10610b6057610100808354040283529160200191610b8b565b820191906000526020600020905b815481529060010190602001808311610b6e57829003601f168201915b505050505081565b610b9b611403565b600480546001600160a01b0319166001600160a01b0383169081179091556040519081527ff0be4f1e87349231d80c36b33f9e8639658eeaf474014dee15a3e6a4d4414197906020015b60405180910390a150565b610bf8611403565b610c026000611689565b565b6001600160a01b03811630145b949350505050565b60606009805461081d906126df565b6000336108ae8185856113a4565b610c3e611403565b610a83610c4b82846127ca565b6116d9565b63ffffffff8416600090815260036020908152604080832061ffff87168452909152812080546060929190610c84906126df565b80601f0160208091040260200160405190810160405280929190818152602001828054610cb0906126df565b8015610cfd5780601f10610cd257610100808354040283529160200191610cfd565b820191906000526020600020905b815481529060010190602001808311610ce057829003601f168201915b505050505090508051600003610d4d5783838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929450610c119350505050565b6000839003610d5d579050610c11565b60028310610ddb57610da484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506117e092505050565b80610db284600281886128df565b604051602001610dc493929190612909565b604051602081830303815290604052915050610c11565b8383604051639a6d49cd60e01b81526004016109d292919061295a565b60005b81811015610f015736838383818110610e1657610e1661296e565b9050602002810190610e289190612984565b9050610e5b610e3a602083018361255b565b602083013563ffffffff919091166000908152600160205260409020541490565b610e655750610ef9565b3063d045a0dc60c08301358360a0810135610e846101008301836129a5565b610e95610100890160e08a01612453565b610ea36101208a018a6129a5565b6040518963ffffffff1660e01b8152600401610ec59796959493929190612a00565b6000604051808303818588803b158015610ede57600080fd5b505af1158015610ef2573d6000803e3d6000fd5b5050505050505b600101610dfb565b50336001600160a01b0316638e9e70996040518163ffffffff1660e01b8152600401600060405180830381865afa158015610f40573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610f689190810190612a86565b604051638351eea760e01b81526004016109d291906120f0565b610f8a612059565b6040805180820190915260008082526020820152610fa985858561180c565b915091505b935093915050565b610fbe611403565b60405163ca5eb5e160e01b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063ca5eb5e190602401600060405180830381600087803b15801561102157600080fd5b505af1158015611035573d6000803e3d6000fd5b5050505050565b33301461105c5760405163029a949d60e31b815260040160405180910390fd5b610a4287878787878787610a33565b611073611403565b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527fd48d879cef83a1c0bdda516f27b13ddb1b3f8bbac1c9e1511bb2a659c242776090602001610be5565b6110c9611403565b6001600160a01b0381166110f357604051631e4fbdf760e01b8152600060048201526024016109d2565b6110fc81611689565b50565b6000602082018035906001908390611117908661255b565b63ffffffff1681526020810191909152604001600020541492915050565b6111428383836001611907565b505050565b600080611153856119dc565b915081905083811015610fae576040516371c4efed60e01b815260048101829052602481018590526044016109d2565b63ffffffff8116600090815260016020526040812054806108b45760405163f6ff4fb760e01b815263ffffffff841660048201526024016109d2565b60006111d16111ce8787611a13565b90565b905060006111fd826111eb6111e68a8a611a2b565b611a4e565b6111f860208d018d61255b565b611a83565b905060288611156112c457600061123a61121d60608c0160408d01612af3565b61122a60208d018d61255b565b846112358c8c611aab565b611af6565b604051633e5ac80960e11b81529091506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690637cb59012906112909086908d906000908790600401612b10565b600060405180830381600087803b1580156112aa57600080fd5b505af11580156112be573d6000803e3d6000fd5b50505050505b6001600160a01b038216887fefed6d3500546b29533b128a29e3a94d70788727f0507505ac12eaf2e578fd9c6112fd60208d018d61255b565b6040805163ffffffff9092168252602082018690520160405180910390a3505050505050505050565b6001600160a01b03838116600090815260066020908152604080832093861683529290522054600019811461139e578181101561138f57604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064016109d2565b61139e84848484036000611907565b50505050565b6001600160a01b0383166113ce57604051634b637e8f60e11b8152600060048201526024016109d2565b6001600160a01b0382166113f85760405163ec442f0560e01b8152600060048201526024016109d2565b611142838383611b28565b6000546001600160a01b03163314610c025760405163118cdaa760e01b81523360048201526024016109d2565b63ffffffff8216600081815260016020908152604091829020849055815192835282018390527f238399d427b947898edb290f5ff0f9109849b1c3ba196a42e35f00c50a54b98b910160405180910390a15050565b60608060006114e2856020013561149b86611c52565b6114a860a08901896129a5565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c7e92505050565b90935090506000816114f55760016114f8565b60025b905061151861150a602088018861255b565b826106fc60808a018a6129a5565b6004549093506001600160a01b0316801561159e5760405163043a78eb60e01b81526001600160a01b0382169063043a78eb9061155b9088908890600401612b41565b602060405180830381865afa158015611578573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061159c9190612b66565b505b5050509250929050565b60408051808201909152600080825260208201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ddc28c586040518060a001604052808863ffffffff16815260200161160b89611183565b8152602001878152602001868152602001851515815250306040518363ffffffff1660e01b8152600401611640929190612b83565b6040805180830381865afa15801561165c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116809190612c2c565b95945050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60005b81518110156117b05761170b8282815181106116fa576116fa61296e565b6020026020010151604001516117e0565b81818151811061171d5761171d61296e565b6020026020010151604001516003600084848151811061173f5761173f61296e565b60200260200101516000015163ffffffff1663ffffffff16815260200190815260200160002060008484815181106117795761177961296e565b60200260200101516020015161ffff1661ffff16815260200190815260200160002090816117a79190612c98565b506001016116dc565b507fbe4864a8e820971c0247f5992e2da559595f7bf076a21cb5928d443d2a13b67481604051610be59190612d57565b600281015161ffff8116600314610a835781604051639a6d49cd60e01b81526004016109d291906120f0565b611814612059565b604080518082019091526000808252602082015260008061184b33604089013560608a013561184660208c018c61255b565b611cf8565b9150915060008061185c8984611485565b909250905061188861187160208b018b61255b565b8383611882368d90038d018d612de2565b8b611d1e565b60408051808201909152858152602080820186905282519298509096503391907f85496b760a4b7f8d66384b9df21b381f5d1b1e79f229a47aaf4c232edc2fe59a906118d6908d018d61255b565b6040805163ffffffff909216825260208201899052810187905260600160405180910390a350505050935093915050565b6001600160a01b0384166119315760405163e602df0560e01b8152600060048201526024016109d2565b6001600160a01b03831661195b57604051634a1406b160e11b8152600060048201526024016109d2565b6001600160a01b038085166000908152600660209081526040808320938716835292905220829055801561139e57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516119ce91815260200190565b60405180910390a350505050565b60007f0000000000000000000000000000000000000000000000000000000000000000611a098184612e2a565b6108b49190612e4c565b6000611a2260208284866128df565b610a6a91612e63565b6000611a3b6028602084866128df565b611a4491612e81565b60c01c9392505050565b60006108b47f00000000000000000000000000000000000000000000000000000000000000006001600160401b038416612e4c565b60006001600160a01b038416611a995761dead93505b611aa38484611e29565b509092915050565b6060611aba82602881866128df565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929695505050505050565b606084848484604051602001611b0f9493929190612eb1565b6040516020818303038152906040529050949350505050565b6001600160a01b038316611b53578060076000828254611b489190612f00565b90915550611bc59050565b6001600160a01b03831660009081526005602052604090205481811015611ba65760405163391434e360e21b81526001600160a01b038516600482015260248101829052604481018390526064016109d2565b6001600160a01b03841660009081526005602052604090209082900390555b6001600160a01b038216611be157600780548290039055611c00565b6001600160a01b03821660009081526005602052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611c4591815260200190565b60405180910390a3505050565b60006108b47f000000000000000000000000000000000000000000000000000000000000000083612e2a565b8051606090151580611cc7578484604051602001611cb392919091825260c01b6001600160c01b031916602082015260280190565b604051602081830303815290604052611cee565b84843385604051602001611cde9493929190612f13565b6040516020818303038152906040525b9150935093915050565b600080611d06858585611147565b9092509050611d158683611e5f565b94509492505050565b611d26612059565b6000611d358460000151611e95565b602085015190915015611d4f57611d4f8460200151611ebd565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632637a450826040518060a001604052808b63ffffffff168152602001611d9f8c611183565b81526020018a815260200189815260200160008960200151111515815250866040518463ffffffff1660e01b8152600401611ddb929190612b83565b60806040518083038185885af1158015611df9573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611e1e9190612f56565b979650505050505050565b6001600160a01b038216611e535760405163ec442f0560e01b8152600060048201526024016109d2565b610a8360008383611b28565b6001600160a01b038216611e8957604051634b637e8f60e11b8152600060048201526024016109d2565b610a8382600083611b28565b6000813414611eb9576040516304fb820960e51b81523460048201526024016109d2565b5090565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e4fe1d946040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f419190612fa0565b90506001600160a01b038116611f6a576040516329b99a9560e11b815260040160405180910390fd5b6040805133602482018190527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0381811660448501526064808501889052855180860390910181526084909401909452602080840180516001600160e01b03166323b872dd60e01b1781528451610a8396881695899361139e93889360009283929091839182885af18061200b576040513d6000823e3d81fd5b50506000513d91508115612023578060011415612030565b6001600160a01b0384163b155b1561139e57604051635274afe760e01b81526001600160a01b03851660048201526024016109d2565b60405180606001604052806000801916815260200160006001600160401b0316815260200161209b604051806040016040528060008152602001600081525090565b905290565b60005b838110156120bb5781810151838201526020016120a3565b50506000910152565b600081518084526120dc8160208601602086016120a0565b601f01601f19169290920160200192915050565b602081526000610a6a60208301846120c4565b6001600160a01b03811681146110fc57600080fd5b6000806040838503121561212b57600080fd5b823561213681612103565b946020939093013593505050565b600060e0828403121561215657600080fd5b50919050565b60006020828403121561216e57600080fd5b81356001600160401b0381111561218457600080fd5b610c1184828501612144565b8351815260208085015190820152600060a08201604060a0604085015281865180845260c08601915060c08160051b8701019350602080890160005b8381101561220b5788870360bf190185528151805188528301518388018790526121f8878901826120c4565b97505093820193908201906001016121cc565b50508751606088015250505060208501516080850152509050610c11565b60006060828403121561215657600080fd5b60008083601f84011261224d57600080fd5b5081356001600160401b0381111561226457600080fd5b60208301915083602082850101111561227c57600080fd5b9250929050565b600080600080600080600060e0888a03121561229e57600080fd5b6122a88989612229565b96506060880135955060808801356001600160401b03808211156122cb57600080fd5b6122d78b838c0161223b565b909750955060a08a013591506122ec82612103565b90935060c0890135908082111561230257600080fd5b5061230f8a828b0161223b565b989b979a50959850939692959293505050565b60008060006060848603121561233757600080fd5b833561234281612103565b9250602084013561235281612103565b929592945050506040919091013590565b803563ffffffff8116811461237757600080fd5b919050565b6000806040838503121561238f57600080fd5b61213683612363565b80151581146110fc57600080fd5b600080604083850312156123b957600080fd5b82356001600160401b038111156123cf57600080fd5b6123db85828601612144565b92505060208301356123ec81612398565b809150509250929050565b8151815260208083015190820152604081016108b4565b803561ffff8116811461237757600080fd5b6000806040838503121561243357600080fd5b61243c83612363565b915061244a6020840161240e565b90509250929050565b60006020828403121561246557600080fd5b8135610a6a81612103565b60008060008060a0858703121561248657600080fd5b6124908686612229565b935060608501356001600160401b038111156124ab57600080fd5b6124b78782880161223b565b90945092505060808501356124cb81612103565b939692955090935050565b60008083601f8401126124e857600080fd5b5081356001600160401b038111156124ff57600080fd5b6020830191508360208260051b850101111561227c57600080fd5b6000806020838503121561252d57600080fd5b82356001600160401b0381111561254357600080fd5b61254f858286016124d6565b90969095509350505050565b60006020828403121561256d57600080fd5b610a6a82612363565b6000806000806060858703121561258c57600080fd5b61259585612363565b93506125a36020860161240e565b925060408501356001600160401b038111156125be57600080fd5b6125ca8782880161223b565b95989497509550505050565b600080600083850360808112156125ec57600080fd5b84356001600160401b0381111561260257600080fd5b61260e87828801612144565b9450506040601f198201121561262357600080fd5b50602084019150606084013561263881612103565b809150509250925092565b600060c082019050835182526001600160401b036020850151166020830152604084015161267e604084018280518252602090810151910152565b5082516080830152602083015160a0830152610a6a565b600080604083850312156126a857600080fd5b82356126b381612103565b915060208301356123ec81612103565b6000606082840312156126d557600080fd5b610a6a8383612229565b600181811c908216806126f357607f821691505b60208210810361215657634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b038111828210171561274b5761274b612713565b60405290565b604080519081016001600160401b038111828210171561274b5761274b612713565b604051601f8201601f191681016001600160401b038111828210171561279b5761279b612713565b604052919050565b60006001600160401b038211156127bc576127bc612713565b50601f01601f191660200190565b60006001600160401b03808411156127e4576127e4612713565b8360051b60206127f5818301612773565b86815291850191818101903684111561280d57600080fd5b865b848110156128d3578035868111156128275760008081fd5b8801606036829003121561283b5760008081fd5b612843612729565b61284c82612363565b815261285986830161240e565b86820152604080830135898111156128715760008081fd5b929092019136601f8401126128865760008081fd5b8235612899612894826127a3565b612773565b81815236898387010111156128ae5760008081fd5b818986018a83013760009181018901919091529082015284525091830191830161280f565b50979650505050505050565b600080858511156128ef57600080fd5b838611156128fc57600080fd5b5050820193919092039150565b6000845161291b8184602089016120a0565b8201838582376000930192835250909392505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b602081526000610c11602083018486612931565b634e487b7160e01b600052603260045260246000fd5b6000823561013e1983360301811261299b57600080fd5b9190910192915050565b6000808335601e198436030181126129bc57600080fd5b8301803591506001600160401b038211156129d657600080fd5b60200191503681900382131561227c57600080fd5b6001600160401b03811681146110fc57600080fd5b63ffffffff612a0e89612363565b1681526020880135602082015260006040890135612a2b816129eb565b6001600160401b03811660408401525087606083015260e06080830152612a5660e083018789612931565b6001600160a01b03861660a084015282810360c0840152612a78818587612931565b9a9950505050505050505050565b600060208284031215612a9857600080fd5b81516001600160401b03811115612aae57600080fd5b8201601f81018413612abf57600080fd5b8051612acd612894826127a3565b818152856020838501011115612ae257600080fd5b6116808260208301602086016120a0565b600060208284031215612b0557600080fd5b8135610a6a816129eb565b60018060a01b038516815283602082015261ffff83166040820152608060608201526000610ae460808301846120c4565b604081526000612b5460408301856120c4565b828103602084015261168081856120c4565b600060208284031215612b7857600080fd5b8151610a6a81612398565b6040815263ffffffff8351166040820152602083015160608201526000604084015160a06080840152612bb960e08401826120c4565b90506060850151603f198483030160a0850152612bd682826120c4565b60809690960151151560c08501525050506001600160a01b039190911660209091015290565b600060408284031215612c0e57600080fd5b612c16612751565b9050815181526020820151602082015292915050565b600060408284031215612c3e57600080fd5b610a6a8383612bfc565b601f821115611142576000816000526020600020601f850160051c81016020861015612c715750805b601f850160051c820191505b81811015612c9057828155600101612c7d565b505050505050565b81516001600160401b03811115612cb157612cb1612713565b612cc581612cbf84546126df565b84612c48565b602080601f831160018114612cfa5760008415612ce25750858301515b600019600386901b1c1916600185901b178555612c90565b600085815260208120601f198616915b82811015612d2957888601518255948401946001909101908401612d0a565b5085821015612d475787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b83811015612dd457888303603f190185528151805163ffffffff1684528781015161ffff16888501528601516060878501819052612dc0818601836120c4565b968901969450505090860190600101612d80565b509098975050505050505050565b600060408284031215612df457600080fd5b612dfc612751565b82358152602083013560208201528091505092915050565b634e487b7160e01b600052601160045260246000fd5b600082612e4757634e487b7160e01b600052601260045260246000fd5b500490565b80820281158282048414176108b4576108b4612e14565b803560208310156108b457600019602084900360031b1b1692915050565b6001600160c01b03198135818116916008851015612ea95780818660080360031b1b83161692505b505092915050565b6001600160401b0360c01b8560c01b16815263ffffffff60e01b8460e01b16600882015282600c82015260008251612ef081602c8501602087016120a0565b91909101602c0195945050505050565b808201808211156108b4576108b4612e14565b8481526001600160401b0360c01b8460c01b16602082015282602882015260008251612f468160488501602087016120a0565b9190910160480195945050505050565b600060808284031215612f6857600080fd5b612f70612729565b825181526020830151612f82816129eb565b6020820152612f948460408501612bfc565b60408201529392505050565b600060208284031215612fb257600080fd5b8151610a6a8161210356fea2646970667358221220a57d7f89465f52382b6c4fb535f012253eb27ee453204fb5020648385f95c20764736f6c63430008160033", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/examples/oft-movement/artifacts/contracts/mocks/MyOFTMock.sol/MyOFTMock.json b/examples/oft-movement/artifacts/contracts/mocks/MyOFTMock.sol/MyOFTMock.json deleted file mode 100644 index c1475c029..000000000 --- a/examples/oft-movement/artifacts/contracts/mocks/MyOFTMock.sol/MyOFTMock.json +++ /dev/null @@ -1,1629 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "MyOFTMock", - "sourceName": "contracts/mocks/MyOFTMock.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "string", - "name": "_name", - "type": "string" - }, - { - "internalType": "string", - "name": "_symbol", - "type": "string" - }, - { - "internalType": "address", - "name": "_lzEndpoint", - "type": "address" - }, - { - "internalType": "address", - "name": "_delegate", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "allowance", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "needed", - "type": "uint256" - } - ], - "name": "ERC20InsufficientAllowance", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "balance", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "needed", - "type": "uint256" - } - ], - "name": "ERC20InsufficientBalance", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "approver", - "type": "address" - } - ], - "name": "ERC20InvalidApprover", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "receiver", - "type": "address" - } - ], - "name": "ERC20InvalidReceiver", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "ERC20InvalidSender", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - } - ], - "name": "ERC20InvalidSpender", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidDelegate", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidEndpointCall", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidLocalDecimals", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "options", - "type": "bytes" - } - ], - "name": "InvalidOptions", - "type": "error" - }, - { - "inputs": [], - "name": "LzTokenUnavailable", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "eid", - "type": "uint32" - } - ], - "name": "NoPeer", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "msgValue", - "type": "uint256" - } - ], - "name": "NotEnoughNative", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "addr", - "type": "address" - } - ], - "name": "OnlyEndpoint", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "eid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - } - ], - "name": "OnlyPeer", - "type": "error" - }, - { - "inputs": [], - "name": "OnlySelf", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "OwnableInvalidOwner", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "OwnableUnauthorizedAccount", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - } - ], - "name": "SafeERC20FailedOperation", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "result", - "type": "bytes" - } - ], - "name": "SimulationResult", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "amountLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minAmountLD", - "type": "uint256" - } - ], - "name": "SlippageExceeded", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "eid", - "type": "uint32" - }, - { - "internalType": "uint16", - "name": "msgType", - "type": "uint16" - }, - { - "internalType": "bytes", - "name": "options", - "type": "bytes" - } - ], - "indexed": false, - "internalType": "struct EnforcedOptionParam[]", - "name": "_enforcedOptions", - "type": "tuple[]" - } - ], - "name": "EnforcedOptionSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "inspector", - "type": "address" - } - ], - "name": "MsgInspectorSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "guid", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "address", - "name": "toAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amountReceivedLD", - "type": "uint256" - } - ], - "name": "OFTReceived", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "guid", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { - "indexed": true, - "internalType": "address", - "name": "fromAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amountSentLD", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amountReceivedLD", - "type": "uint256" - } - ], - "name": "OFTSent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint32", - "name": "eid", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "peer", - "type": "bytes32" - } - ], - "name": "PeerSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "preCrimeAddress", - "type": "address" - } - ], - "name": "PreCrimeSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "inputs": [], - "name": "SEND", - "outputs": [ - { - "internalType": "uint16", - "name": "", - "type": "uint16" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "SEND_AND_CALL", - "outputs": [ - { - "internalType": "uint16", - "name": "", - "type": "uint16" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - } - ], - "internalType": "struct Origin", - "name": "origin", - "type": "tuple" - } - ], - "name": "allowInitializePath", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "spender", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "approvalRequired", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_eid", - "type": "uint32" - }, - { - "internalType": "uint16", - "name": "_msgType", - "type": "uint16" - }, - { - "internalType": "bytes", - "name": "_extraOptions", - "type": "bytes" - } - ], - "name": "combineOptions", - "outputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "decimalConversionRate", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "decimals", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "endpoint", - "outputs": [ - { - "internalType": "contract ILayerZeroEndpointV2", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "eid", - "type": "uint32" - }, - { - "internalType": "uint16", - "name": "msgType", - "type": "uint16" - } - ], - "name": "enforcedOptions", - "outputs": [ - { - "internalType": "bytes", - "name": "enforcedOption", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - } - ], - "internalType": "struct Origin", - "name": "", - "type": "tuple" - }, - { - "internalType": "bytes", - "name": "", - "type": "bytes" - }, - { - "internalType": "address", - "name": "_sender", - "type": "address" - } - ], - "name": "isComposeMsgSender", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_eid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_peer", - "type": "bytes32" - } - ], - "name": "isPeer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - } - ], - "internalType": "struct Origin", - "name": "_origin", - "type": "tuple" - }, - { - "internalType": "bytes32", - "name": "_guid", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "_message", - "type": "bytes" - }, - { - "internalType": "address", - "name": "_executor", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "lzReceive", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - } - ], - "internalType": "struct Origin", - "name": "origin", - "type": "tuple" - }, - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "guid", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "address", - "name": "executor", - "type": "address" - }, - { - "internalType": "bytes", - "name": "message", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "extraData", - "type": "bytes" - } - ], - "internalType": "struct InboundPacket[]", - "name": "_packets", - "type": "tuple[]" - } - ], - "name": "lzReceiveAndRevert", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - } - ], - "internalType": "struct Origin", - "name": "_origin", - "type": "tuple" - }, - { - "internalType": "bytes32", - "name": "_guid", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "_message", - "type": "bytes" - }, - { - "internalType": "address", - "name": "_executor", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_extraData", - "type": "bytes" - } - ], - "name": "lzReceiveSimulate", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "mint", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "msgInspector", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "nextNonce", - "outputs": [ - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "oApp", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "oAppVersion", - "outputs": [ - { - "internalType": "uint64", - "name": "senderVersion", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "receiverVersion", - "type": "uint64" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [], - "name": "oftVersion", - "outputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - }, - { - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "eid", - "type": "uint32" - } - ], - "name": "peers", - "outputs": [ - { - "internalType": "bytes32", - "name": "peer", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "preCrime", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "to", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amountLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minAmountLD", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "extraOptions", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "composeMsg", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "oftCmd", - "type": "bytes" - } - ], - "internalType": "struct SendParam", - "name": "_sendParam", - "type": "tuple" - } - ], - "name": "quoteOFT", - "outputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "minAmountLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxAmountLD", - "type": "uint256" - } - ], - "internalType": "struct OFTLimit", - "name": "oftLimit", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "int256", - "name": "feeAmountLD", - "type": "int256" - }, - { - "internalType": "string", - "name": "description", - "type": "string" - } - ], - "internalType": "struct OFTFeeDetail[]", - "name": "oftFeeDetails", - "type": "tuple[]" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "amountSentLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "amountReceivedLD", - "type": "uint256" - } - ], - "internalType": "struct OFTReceipt", - "name": "oftReceipt", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "to", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amountLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minAmountLD", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "extraOptions", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "composeMsg", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "oftCmd", - "type": "bytes" - } - ], - "internalType": "struct SendParam", - "name": "_sendParam", - "type": "tuple" - }, - { - "internalType": "bool", - "name": "_payInLzToken", - "type": "bool" - } - ], - "name": "quoteSend", - "outputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "nativeFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "lzTokenFee", - "type": "uint256" - } - ], - "internalType": "struct MessagingFee", - "name": "msgFee", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "to", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "amountLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minAmountLD", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "extraOptions", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "composeMsg", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "oftCmd", - "type": "bytes" - } - ], - "internalType": "struct SendParam", - "name": "_sendParam", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "nativeFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "lzTokenFee", - "type": "uint256" - } - ], - "internalType": "struct MessagingFee", - "name": "_fee", - "type": "tuple" - }, - { - "internalType": "address", - "name": "_refundAddress", - "type": "address" - } - ], - "name": "send", - "outputs": [ - { - "components": [ - { - "internalType": "bytes32", - "name": "guid", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "nativeFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "lzTokenFee", - "type": "uint256" - } - ], - "internalType": "struct MessagingFee", - "name": "fee", - "type": "tuple" - } - ], - "internalType": "struct MessagingReceipt", - "name": "msgReceipt", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "amountSentLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "amountReceivedLD", - "type": "uint256" - } - ], - "internalType": "struct OFTReceipt", - "name": "oftReceipt", - "type": "tuple" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_delegate", - "type": "address" - } - ], - "name": "setDelegate", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint32", - "name": "eid", - "type": "uint32" - }, - { - "internalType": "uint16", - "name": "msgType", - "type": "uint16" - }, - { - "internalType": "bytes", - "name": "options", - "type": "bytes" - } - ], - "internalType": "struct EnforcedOptionParam[]", - "name": "_enforcedOptions", - "type": "tuple[]" - } - ], - "name": "setEnforcedOptions", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_msgInspector", - "type": "address" - } - ], - "name": "setMsgInspector", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_eid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "_peer", - "type": "bytes32" - } - ], - "name": "setPeer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_preCrime", - "type": "address" - } - ], - "name": "setPreCrime", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "sharedDecimals", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "token", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "0x60c06040523480156200001157600080fd5b50604051620036a7380380620036a78339810160408190526200003491620002da565b8383838383838383838360128484818181818d6001600160a01b0381166200007657604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b6200008181620001a0565b506001600160a01b038083166080528116620000b057604051632d618d8160e21b815260040160405180910390fd5b60805160405163ca5eb5e160e01b81526001600160a01b0383811660048301529091169063ca5eb5e190602401600060405180830381600087803b158015620000f857600080fd5b505af11580156200010d573d6000803e3d6000fd5b505050505050505062000125620001f060201b60201c565b60ff168360ff1610156200014c576040516301e9714b60e41b815260040160405180910390fd5b620001596006846200037f565b6200016690600a6200049e565b60a05250600891506200017c9050838262000547565b5060096200018b828262000547565b50505050505050505050505050505062000613565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600690565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200021d57600080fd5b81516001600160401b03808211156200023a576200023a620001f5565b604051601f8301601f19908116603f01168101908282118183101715620002655762000265620001f5565b81604052838152602092508660208588010111156200028357600080fd5b600091505b83821015620002a7578582018301518183018401529082019062000288565b6000602085830101528094505050505092915050565b80516001600160a01b0381168114620002d557600080fd5b919050565b60008060008060808587031215620002f157600080fd5b84516001600160401b03808211156200030957600080fd5b62000317888389016200020b565b955060208701519150808211156200032e57600080fd5b506200033d878288016200020b565b9350506200034e60408601620002bd565b91506200035e60608601620002bd565b905092959194509250565b634e487b7160e01b600052601160045260246000fd5b60ff82811682821603908111156200039b576200039b62000369565b92915050565b600181815b80851115620003e2578160001904821115620003c657620003c662000369565b80851615620003d457918102915b93841c9390800290620003a6565b509250929050565b600082620003fb575060016200039b565b816200040a575060006200039b565b81600181146200042357600281146200042e576200044e565b60019150506200039b565b60ff84111562000442576200044262000369565b50506001821b6200039b565b5060208310610133831016604e8410600b841016171562000473575081810a6200039b565b6200047f8383620003a1565b806000190482111562000496576200049662000369565b029392505050565b6000620004af60ff841683620003ea565b9392505050565b600181811c90821680620004cb57607f821691505b602082108103620004ec57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000542576000816000526020600020601f850160051c810160208610156200051d5750805b601f850160051c820191505b818110156200053e5782815560010162000529565b5050505b505050565b81516001600160401b03811115620005635762000563620001f5565b6200057b81620005748454620004b6565b84620004f2565b602080601f831160018114620005b357600084156200059a5750858301515b600019600386901b1c1916600185901b1785556200053e565b600085815260208120601f198616915b82811015620005e457888601518255948401946001909101908401620005c3565b5085821015620006035787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a0516130286200067f6000396000818161064901528181611a4b01528181611ac00152611cc4015260008181610508015281816109b80152818161101201528181611289015281816115f301528181611dbc01528181611ef60152611fad01526130286000f3fe60806040526004361061025c5760003560e01c8063715018a611610144578063bb0b6a53116100b6578063d045a0dc1161007a578063d045a0dc14610780578063d424388514610793578063dd62ed3e146107b3578063f2fde38b146107f9578063fc0c546a1461048c578063ff7bd03d1461081957600080fd5b8063bb0b6a53146106df578063bc70b3541461070c578063bd815db01461072c578063c7c7f5b31461073f578063ca5eb5e11461076057600080fd5b806395d89b411161010857806395d89b4114610622578063963efcaa146106375780639f68b9641461066b578063a9059cbb1461067f578063b731ea0a1461069f578063b98bd070146106bf57600080fd5b8063715018a6146105805780637d25a05e1461059557806382413eac146105d0578063857749b0146105f05780638da5cb5b1461060457600080fd5b806323b872dd116101dd57806352ae2879116101a157806352ae28791461048c5780635535d4611461049f5780635a0dfe4d146104bf5780635e280f11146104f65780636fc1b31e1461052a57806370a082311461054a57600080fd5b806323b872dd146103dd578063313ce567146103fd5780633400288b1461041f5780633b6f743b1461043f57806340c10f191461046c57600080fd5b8063134d4f2511610224578063134d4f2514610338578063156a0d0f1461036057806317442b701461038757806318160ddd146103a95780631f5e1334146103c857600080fd5b806306fdde0314610261578063095ea7b31461028c5780630d35b415146102bc578063111ecdad146102eb57806313137d6514610323575b600080fd5b34801561026d57600080fd5b50610276610839565b6040516102839190612125565b60405180910390f35b34801561029857600080fd5b506102ac6102a736600461214d565b6108cb565b6040519015158152602001610283565b3480156102c857600080fd5b506102dc6102d7366004612191565b6108e5565b604051610283939291906121c5565b3480156102f757600080fd5b5060045461030b906001600160a01b031681565b6040516001600160a01b039091168152602001610283565b6103366103313660046122b8565b6109b6565b005b34801561034457600080fd5b5061034d600281565b60405161ffff9091168152602001610283565b34801561036c57600080fd5b506040805162b9270b60e21b81526001602082015201610283565b34801561039357600080fd5b5060408051600181526002602082015201610283565b3480156103b557600080fd5b506007545b604051908152602001610283565b3480156103d457600080fd5b5061034d600181565b3480156103e957600080fd5b506102ac6103f8366004612357565b610a76565b34801561040957600080fd5b5060125b60405160ff9091168152602001610283565b34801561042b57600080fd5b5061033661043a3660046123b1565b610a9c565b34801561044b57600080fd5b5061045f61045a3660046123db565b610ab2565b604051610283919061242c565b34801561047857600080fd5b5061033661048736600461214d565b610b19565b34801561049857600080fd5b503061030b565b3480156104ab57600080fd5b506102766104ba366004612455565b610b23565b3480156104cb57600080fd5b506102ac6104da3660046123b1565b63ffffffff919091166000908152600160205260409020541490565b34801561050257600080fd5b5061030b7f000000000000000000000000000000000000000000000000000000000000000081565b34801561053657600080fd5b50610336610545366004612488565b610bc8565b34801561055657600080fd5b506103ba610565366004612488565b6001600160a01b031660009081526005602052604090205490565b34801561058c57600080fd5b50610336610c25565b3480156105a157600080fd5b506105b86105b03660046123b1565b600092915050565b6040516001600160401b039091168152602001610283565b3480156105dc57600080fd5b506102ac6105eb3660046124a5565b610c39565b3480156105fc57600080fd5b50600661040d565b34801561061057600080fd5b506000546001600160a01b031661030b565b34801561062e57600080fd5b50610276610c4e565b34801561064357600080fd5b506103ba7f000000000000000000000000000000000000000000000000000000000000000081565b34801561067757600080fd5b5060006102ac565b34801561068b57600080fd5b506102ac61069a36600461214d565b610c5d565b3480156106ab57600080fd5b5060025461030b906001600160a01b031681565b3480156106cb57600080fd5b506103366106da36600461254f565b610c6b565b3480156106eb57600080fd5b506103ba6106fa366004612590565b60016020526000908152604090205481565b34801561071857600080fd5b506102766107273660046125ab565b610c85565b61033661073a36600461254f565b610e2d565b61075261074d36600461260b565b610fb7565b604051610283929190612678565b34801561076c57600080fd5b5061033661077b366004612488565b610feb565b61033661078e3660046122b8565b611071565b34801561079f57600080fd5b506103366107ae366004612488565b6110a0565b3480156107bf57600080fd5b506103ba6107ce3660046126ca565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b34801561080557600080fd5b50610336610814366004612488565b6110f6565b34801561082557600080fd5b506102ac6108343660046126f8565b611134565b60606008805461084890612714565b80601f016020809104026020016040519081016040528092919081815260200182805461087490612714565b80156108c15780601f10610896576101008083540402835291602001916108c1565b820191906000526020600020905b8154815290600101906020018083116108a457829003601f168201915b5050505050905090565b6000336108d981858561116a565b60019150505b92915050565b60408051808201909152600080825260208201526060610918604051806040016040528060008152602001600081525090565b60408051808201825260008082526001600160401b03602080840182905284518381529081019094529195509182610973565b60408051808201909152600081526060602082015281526020019060019003908161094b5790505b509350600080610998604089013560608a013561099360208c018c612590565b61117c565b60408051808201909152918252602082015296989597505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163314610a06576040516391ac5e4f60e01b81523360048201526024015b60405180910390fd5b60208701803590610a2090610a1b908a612590565b6111b8565b14610a5e57610a326020880188612590565b60405163309afaf360e21b815263ffffffff9091166004820152602088013560248201526044016109fd565b610a6d878787878787876111f4565b50505050505050565b600033610a8485828561135b565b610a8f8585856113d9565b60019150505b9392505050565b610aa4611438565b610aae8282611465565b5050565b60408051808201909152600080825260208201526000610ae2604085013560608601356109936020880188612590565b915050600080610af286846114ba565b9092509050610b0f610b076020880188612590565b8383886115dd565b9695505050505050565b610aae82826116be565b600360209081526000928352604080842090915290825290208054610b4790612714565b80601f0160208091040260200160405190810160405280929190818152602001828054610b7390612714565b8015610bc05780601f10610b9557610100808354040283529160200191610bc0565b820191906000526020600020905b815481529060010190602001808311610ba357829003601f168201915b505050505081565b610bd0611438565b600480546001600160a01b0319166001600160a01b0383169081179091556040519081527ff0be4f1e87349231d80c36b33f9e8639658eeaf474014dee15a3e6a4d4414197906020015b60405180910390a150565b610c2d611438565b610c3760006116f4565b565b6001600160a01b03811630145b949350505050565b60606009805461084890612714565b6000336108d98185856113d9565b610c73611438565b610aae610c8082846127ff565b611744565b63ffffffff8416600090815260036020908152604080832061ffff87168452909152812080546060929190610cb990612714565b80601f0160208091040260200160405190810160405280929190818152602001828054610ce590612714565b8015610d325780601f10610d0757610100808354040283529160200191610d32565b820191906000526020600020905b815481529060010190602001808311610d1557829003601f168201915b505050505090508051600003610d825783838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929450610c469350505050565b6000839003610d92579050610c46565b60028310610e1057610dd984848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061184b92505050565b80610de78460028188612914565b604051602001610df99392919061293e565b604051602081830303815290604052915050610c46565b8383604051639a6d49cd60e01b81526004016109fd92919061298f565b60005b81811015610f365736838383818110610e4b57610e4b6129a3565b9050602002810190610e5d91906129b9565b9050610e90610e6f6020830183612590565b602083013563ffffffff919091166000908152600160205260409020541490565b610e9a5750610f2e565b3063d045a0dc60c08301358360a0810135610eb96101008301836129da565b610eca610100890160e08a01612488565b610ed86101208a018a6129da565b6040518963ffffffff1660e01b8152600401610efa9796959493929190612a35565b6000604051808303818588803b158015610f1357600080fd5b505af1158015610f27573d6000803e3d6000fd5b5050505050505b600101610e30565b50336001600160a01b0316638e9e70996040518163ffffffff1660e01b8152600401600060405180830381865afa158015610f75573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610f9d9190810190612abb565b604051638351eea760e01b81526004016109fd9190612125565b610fbf61208e565b6040805180820190915260008082526020820152610fde858585611877565b915091505b935093915050565b610ff3611438565b60405163ca5eb5e160e01b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063ca5eb5e190602401600060405180830381600087803b15801561105657600080fd5b505af115801561106a573d6000803e3d6000fd5b5050505050565b3330146110915760405163029a949d60e31b815260040160405180910390fd5b610a6d87878787878787610a5e565b6110a8611438565b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527fd48d879cef83a1c0bdda516f27b13ddb1b3f8bbac1c9e1511bb2a659c242776090602001610c1a565b6110fe611438565b6001600160a01b03811661112857604051631e4fbdf760e01b8152600060048201526024016109fd565b611131816116f4565b50565b600060208201803590600190839061114c9086612590565b63ffffffff1681526020810191909152604001600020541492915050565b6111778383836001611972565b505050565b60008061118885611a47565b915081905083811015610fe3576040516371c4efed60e01b815260048101829052602481018590526044016109fd565b63ffffffff8116600090815260016020526040812054806108df5760405163f6ff4fb760e01b815263ffffffff841660048201526024016109fd565b60006112066112038787611a7e565b90565b905060006112328261122061121b8a8a611a96565b611ab9565b61122d60208d018d612590565b611aee565b905060288611156112f957600061126f61125260608c0160408d01612b28565b61125f60208d018d612590565b8461126a8c8c611b16565b611b61565b604051633e5ac80960e11b81529091506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690637cb59012906112c59086908d906000908790600401612b45565b600060405180830381600087803b1580156112df57600080fd5b505af11580156112f3573d6000803e3d6000fd5b50505050505b6001600160a01b038216887fefed6d3500546b29533b128a29e3a94d70788727f0507505ac12eaf2e578fd9c61133260208d018d612590565b6040805163ffffffff9092168252602082018690520160405180910390a3505050505050505050565b6001600160a01b0383811660009081526006602090815260408083209386168352929052205460001981146113d357818110156113c457604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064016109fd565b6113d384848484036000611972565b50505050565b6001600160a01b03831661140357604051634b637e8f60e11b8152600060048201526024016109fd565b6001600160a01b03821661142d5760405163ec442f0560e01b8152600060048201526024016109fd565b611177838383611b93565b6000546001600160a01b03163314610c375760405163118cdaa760e01b81523360048201526024016109fd565b63ffffffff8216600081815260016020908152604091829020849055815192835282018390527f238399d427b947898edb290f5ff0f9109849b1c3ba196a42e35f00c50a54b98b910160405180910390a15050565b606080600061151785602001356114d086611cbd565b6114dd60a08901896129da565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611ce992505050565b909350905060008161152a57600161152d565b60025b905061154d61153f6020880188612590565b8261072760808a018a6129da565b6004549093506001600160a01b031680156115d35760405163043a78eb60e01b81526001600160a01b0382169063043a78eb906115909088908890600401612b76565b602060405180830381865afa1580156115ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115d19190612b9b565b505b5050509250929050565b60408051808201909152600080825260208201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ddc28c586040518060a001604052808863ffffffff168152602001611640896111b8565b8152602001878152602001868152602001851515815250306040518363ffffffff1660e01b8152600401611675929190612bb8565b6040805180830381865afa158015611691573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116b59190612c61565b95945050505050565b6001600160a01b0382166116e85760405163ec442f0560e01b8152600060048201526024016109fd565b610aae60008383611b93565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60005b815181101561181b57611776828281518110611765576117656129a3565b60200260200101516040015161184b565b818181518110611788576117886129a3565b602002602001015160400151600360008484815181106117aa576117aa6129a3565b60200260200101516000015163ffffffff1663ffffffff16815260200190815260200160002060008484815181106117e4576117e46129a3565b60200260200101516020015161ffff1661ffff16815260200190815260200160002090816118129190612ccd565b50600101611747565b507fbe4864a8e820971c0247f5992e2da559595f7bf076a21cb5928d443d2a13b67481604051610c1a9190612d8c565b600281015161ffff8116600314610aae5781604051639a6d49cd60e01b81526004016109fd9190612125565b61187f61208e565b60408051808201909152600080825260208201526000806118b633604089013560608a01356118b160208c018c612590565b611d63565b915091506000806118c789846114ba565b90925090506118f36118dc60208b018b612590565b83836118ed368d90038d018d612e17565b8b611d89565b60408051808201909152858152602080820186905282519298509096503391907f85496b760a4b7f8d66384b9df21b381f5d1b1e79f229a47aaf4c232edc2fe59a90611941908d018d612590565b6040805163ffffffff909216825260208201899052810187905260600160405180910390a350505050935093915050565b6001600160a01b03841661199c5760405163e602df0560e01b8152600060048201526024016109fd565b6001600160a01b0383166119c657604051634a1406b160e11b8152600060048201526024016109fd565b6001600160a01b03808516600090815260066020908152604080832093871683529290522082905580156113d357826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051611a3991815260200190565b60405180910390a350505050565b60007f0000000000000000000000000000000000000000000000000000000000000000611a748184612e5f565b6108df9190612e81565b6000611a8d6020828486612914565b610a9591612e98565b6000611aa6602860208486612914565b611aaf91612eb6565b60c01c9392505050565b60006108df7f00000000000000000000000000000000000000000000000000000000000000006001600160401b038416612e81565b60006001600160a01b038416611b045761dead93505b611b0e84846116be565b509092915050565b6060611b258260288186612914565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929695505050505050565b606084848484604051602001611b7a9493929190612ee6565b6040516020818303038152906040529050949350505050565b6001600160a01b038316611bbe578060076000828254611bb39190612f35565b90915550611c309050565b6001600160a01b03831660009081526005602052604090205481811015611c115760405163391434e360e21b81526001600160a01b038516600482015260248101829052604481018390526064016109fd565b6001600160a01b03841660009081526005602052604090209082900390555b6001600160a01b038216611c4c57600780548290039055611c6b565b6001600160a01b03821660009081526005602052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611cb091815260200190565b60405180910390a3505050565b60006108df7f000000000000000000000000000000000000000000000000000000000000000083612e5f565b8051606090151580611d32578484604051602001611d1e92919091825260c01b6001600160c01b031916602082015260280190565b604051602081830303815290604052611d59565b84843385604051602001611d499493929190612f48565b6040516020818303038152906040525b9150935093915050565b600080611d7185858561117c565b9092509050611d808683611e94565b94509492505050565b611d9161208e565b6000611da08460000151611eca565b602085015190915015611dba57611dba8460200151611ef2565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632637a450826040518060a001604052808b63ffffffff168152602001611e0a8c6111b8565b81526020018a815260200189815260200160008960200151111515815250866040518463ffffffff1660e01b8152600401611e46929190612bb8565b60806040518083038185885af1158015611e64573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611e899190612f8b565b979650505050505050565b6001600160a01b038216611ebe57604051634b637e8f60e11b8152600060048201526024016109fd565b610aae82600083611b93565b6000813414611eee576040516304fb820960e51b81523460048201526024016109fd565b5090565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e4fe1d946040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f769190612fd5565b90506001600160a01b038116611f9f576040516329b99a9560e11b815260040160405180910390fd5b6040805133602482018190527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0381811660448501526064808501889052855180860390910181526084909401909452602080840180516001600160e01b03166323b872dd60e01b1781528451610aae9688169589936113d393889360009283929091839182885af180612040576040513d6000823e3d81fd5b50506000513d91508115612058578060011415612065565b6001600160a01b0384163b155b156113d357604051635274afe760e01b81526001600160a01b03851660048201526024016109fd565b60405180606001604052806000801916815260200160006001600160401b031681526020016120d0604051806040016040528060008152602001600081525090565b905290565b60005b838110156120f05781810151838201526020016120d8565b50506000910152565b600081518084526121118160208601602086016120d5565b601f01601f19169290920160200192915050565b602081526000610a9560208301846120f9565b6001600160a01b038116811461113157600080fd5b6000806040838503121561216057600080fd5b823561216b81612138565b946020939093013593505050565b600060e0828403121561218b57600080fd5b50919050565b6000602082840312156121a357600080fd5b81356001600160401b038111156121b957600080fd5b610c4684828501612179565b8351815260208085015190820152600060a08201604060a0604085015281865180845260c08601915060c08160051b8701019350602080890160005b838110156122405788870360bf1901855281518051885283015183880187905261222d878901826120f9565b9750509382019390820190600101612201565b50508751606088015250505060208501516080850152509050610c46565b60006060828403121561218b57600080fd5b60008083601f84011261228257600080fd5b5081356001600160401b0381111561229957600080fd5b6020830191508360208285010111156122b157600080fd5b9250929050565b600080600080600080600060e0888a0312156122d357600080fd5b6122dd898961225e565b96506060880135955060808801356001600160401b038082111561230057600080fd5b61230c8b838c01612270565b909750955060a08a0135915061232182612138565b90935060c0890135908082111561233757600080fd5b506123448a828b01612270565b989b979a50959850939692959293505050565b60008060006060848603121561236c57600080fd5b833561237781612138565b9250602084013561238781612138565b929592945050506040919091013590565b803563ffffffff811681146123ac57600080fd5b919050565b600080604083850312156123c457600080fd5b61216b83612398565b801515811461113157600080fd5b600080604083850312156123ee57600080fd5b82356001600160401b0381111561240457600080fd5b61241085828601612179565b9250506020830135612421816123cd565b809150509250929050565b8151815260208083015190820152604081016108df565b803561ffff811681146123ac57600080fd5b6000806040838503121561246857600080fd5b61247183612398565b915061247f60208401612443565b90509250929050565b60006020828403121561249a57600080fd5b8135610a9581612138565b60008060008060a085870312156124bb57600080fd5b6124c5868661225e565b935060608501356001600160401b038111156124e057600080fd5b6124ec87828801612270565b909450925050608085013561250081612138565b939692955090935050565b60008083601f84011261251d57600080fd5b5081356001600160401b0381111561253457600080fd5b6020830191508360208260051b85010111156122b157600080fd5b6000806020838503121561256257600080fd5b82356001600160401b0381111561257857600080fd5b6125848582860161250b565b90969095509350505050565b6000602082840312156125a257600080fd5b610a9582612398565b600080600080606085870312156125c157600080fd5b6125ca85612398565b93506125d860208601612443565b925060408501356001600160401b038111156125f357600080fd5b6125ff87828801612270565b95989497509550505050565b6000806000838503608081121561262157600080fd5b84356001600160401b0381111561263757600080fd5b61264387828801612179565b9450506040601f198201121561265857600080fd5b50602084019150606084013561266d81612138565b809150509250925092565b600060c082019050835182526001600160401b03602085015116602083015260408401516126b3604084018280518252602090810151910152565b5082516080830152602083015160a0830152610a95565b600080604083850312156126dd57600080fd5b82356126e881612138565b9150602083013561242181612138565b60006060828403121561270a57600080fd5b610a95838361225e565b600181811c9082168061272857607f821691505b60208210810361218b57634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b038111828210171561278057612780612748565b60405290565b604080519081016001600160401b038111828210171561278057612780612748565b604051601f8201601f191681016001600160401b03811182821017156127d0576127d0612748565b604052919050565b60006001600160401b038211156127f1576127f1612748565b50601f01601f191660200190565b60006001600160401b038084111561281957612819612748565b8360051b602061282a8183016127a8565b86815291850191818101903684111561284257600080fd5b865b848110156129085780358681111561285c5760008081fd5b880160603682900312156128705760008081fd5b61287861275e565b61288182612398565b815261288e868301612443565b86820152604080830135898111156128a65760008081fd5b929092019136601f8401126128bb5760008081fd5b82356128ce6128c9826127d8565b6127a8565b81815236898387010111156128e35760008081fd5b818986018a830137600091810189019190915290820152845250918301918301612844565b50979650505050505050565b6000808585111561292457600080fd5b8386111561293157600080fd5b5050820193919092039150565b600084516129508184602089016120d5565b8201838582376000930192835250909392505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b602081526000610c46602083018486612966565b634e487b7160e01b600052603260045260246000fd5b6000823561013e198336030181126129d057600080fd5b9190910192915050565b6000808335601e198436030181126129f157600080fd5b8301803591506001600160401b03821115612a0b57600080fd5b6020019150368190038213156122b157600080fd5b6001600160401b038116811461113157600080fd5b63ffffffff612a4389612398565b1681526020880135602082015260006040890135612a6081612a20565b6001600160401b03811660408401525087606083015260e06080830152612a8b60e083018789612966565b6001600160a01b03861660a084015282810360c0840152612aad818587612966565b9a9950505050505050505050565b600060208284031215612acd57600080fd5b81516001600160401b03811115612ae357600080fd5b8201601f81018413612af457600080fd5b8051612b026128c9826127d8565b818152856020838501011115612b1757600080fd5b6116b58260208301602086016120d5565b600060208284031215612b3a57600080fd5b8135610a9581612a20565b60018060a01b038516815283602082015261ffff83166040820152608060608201526000610b0f60808301846120f9565b604081526000612b8960408301856120f9565b82810360208401526116b581856120f9565b600060208284031215612bad57600080fd5b8151610a95816123cd565b6040815263ffffffff8351166040820152602083015160608201526000604084015160a06080840152612bee60e08401826120f9565b90506060850151603f198483030160a0850152612c0b82826120f9565b60809690960151151560c08501525050506001600160a01b039190911660209091015290565b600060408284031215612c4357600080fd5b612c4b612786565b9050815181526020820151602082015292915050565b600060408284031215612c7357600080fd5b610a958383612c31565b601f821115611177576000816000526020600020601f850160051c81016020861015612ca65750805b601f850160051c820191505b81811015612cc557828155600101612cb2565b505050505050565b81516001600160401b03811115612ce657612ce6612748565b612cfa81612cf48454612714565b84612c7d565b602080601f831160018114612d2f5760008415612d175750858301515b600019600386901b1c1916600185901b178555612cc5565b600085815260208120601f198616915b82811015612d5e57888601518255948401946001909101908401612d3f565b5085821015612d7c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b83811015612e0957888303603f190185528151805163ffffffff1684528781015161ffff16888501528601516060878501819052612df5818601836120f9565b968901969450505090860190600101612db5565b509098975050505050505050565b600060408284031215612e2957600080fd5b612e31612786565b82358152602083013560208201528091505092915050565b634e487b7160e01b600052601160045260246000fd5b600082612e7c57634e487b7160e01b600052601260045260246000fd5b500490565b80820281158282048414176108df576108df612e49565b803560208310156108df57600019602084900360031b1b1692915050565b6001600160c01b03198135818116916008851015612ede5780818660080360031b1b83161692505b505092915050565b6001600160401b0360c01b8560c01b16815263ffffffff60e01b8460e01b16600882015282600c82015260008251612f2581602c8501602087016120d5565b91909101602c0195945050505050565b808201808211156108df576108df612e49565b8481526001600160401b0360c01b8460c01b16602082015282602882015260008251612f7b8160488501602087016120d5565b9190910160480195945050505050565b600060808284031215612f9d57600080fd5b612fa561275e565b825181526020830151612fb781612a20565b6020820152612fc98460408501612c31565b60408201529392505050565b600060208284031215612fe757600080fd5b8151610a958161213856fea2646970667358221220645fbf12560a7699955d058d106f0e740ad9cbc14ee055c7fe136365795a23de64736f6c63430008160033", - "deployedBytecode": "0x60806040526004361061025c5760003560e01c8063715018a611610144578063bb0b6a53116100b6578063d045a0dc1161007a578063d045a0dc14610780578063d424388514610793578063dd62ed3e146107b3578063f2fde38b146107f9578063fc0c546a1461048c578063ff7bd03d1461081957600080fd5b8063bb0b6a53146106df578063bc70b3541461070c578063bd815db01461072c578063c7c7f5b31461073f578063ca5eb5e11461076057600080fd5b806395d89b411161010857806395d89b4114610622578063963efcaa146106375780639f68b9641461066b578063a9059cbb1461067f578063b731ea0a1461069f578063b98bd070146106bf57600080fd5b8063715018a6146105805780637d25a05e1461059557806382413eac146105d0578063857749b0146105f05780638da5cb5b1461060457600080fd5b806323b872dd116101dd57806352ae2879116101a157806352ae28791461048c5780635535d4611461049f5780635a0dfe4d146104bf5780635e280f11146104f65780636fc1b31e1461052a57806370a082311461054a57600080fd5b806323b872dd146103dd578063313ce567146103fd5780633400288b1461041f5780633b6f743b1461043f57806340c10f191461046c57600080fd5b8063134d4f2511610224578063134d4f2514610338578063156a0d0f1461036057806317442b701461038757806318160ddd146103a95780631f5e1334146103c857600080fd5b806306fdde0314610261578063095ea7b31461028c5780630d35b415146102bc578063111ecdad146102eb57806313137d6514610323575b600080fd5b34801561026d57600080fd5b50610276610839565b6040516102839190612125565b60405180910390f35b34801561029857600080fd5b506102ac6102a736600461214d565b6108cb565b6040519015158152602001610283565b3480156102c857600080fd5b506102dc6102d7366004612191565b6108e5565b604051610283939291906121c5565b3480156102f757600080fd5b5060045461030b906001600160a01b031681565b6040516001600160a01b039091168152602001610283565b6103366103313660046122b8565b6109b6565b005b34801561034457600080fd5b5061034d600281565b60405161ffff9091168152602001610283565b34801561036c57600080fd5b506040805162b9270b60e21b81526001602082015201610283565b34801561039357600080fd5b5060408051600181526002602082015201610283565b3480156103b557600080fd5b506007545b604051908152602001610283565b3480156103d457600080fd5b5061034d600181565b3480156103e957600080fd5b506102ac6103f8366004612357565b610a76565b34801561040957600080fd5b5060125b60405160ff9091168152602001610283565b34801561042b57600080fd5b5061033661043a3660046123b1565b610a9c565b34801561044b57600080fd5b5061045f61045a3660046123db565b610ab2565b604051610283919061242c565b34801561047857600080fd5b5061033661048736600461214d565b610b19565b34801561049857600080fd5b503061030b565b3480156104ab57600080fd5b506102766104ba366004612455565b610b23565b3480156104cb57600080fd5b506102ac6104da3660046123b1565b63ffffffff919091166000908152600160205260409020541490565b34801561050257600080fd5b5061030b7f000000000000000000000000000000000000000000000000000000000000000081565b34801561053657600080fd5b50610336610545366004612488565b610bc8565b34801561055657600080fd5b506103ba610565366004612488565b6001600160a01b031660009081526005602052604090205490565b34801561058c57600080fd5b50610336610c25565b3480156105a157600080fd5b506105b86105b03660046123b1565b600092915050565b6040516001600160401b039091168152602001610283565b3480156105dc57600080fd5b506102ac6105eb3660046124a5565b610c39565b3480156105fc57600080fd5b50600661040d565b34801561061057600080fd5b506000546001600160a01b031661030b565b34801561062e57600080fd5b50610276610c4e565b34801561064357600080fd5b506103ba7f000000000000000000000000000000000000000000000000000000000000000081565b34801561067757600080fd5b5060006102ac565b34801561068b57600080fd5b506102ac61069a36600461214d565b610c5d565b3480156106ab57600080fd5b5060025461030b906001600160a01b031681565b3480156106cb57600080fd5b506103366106da36600461254f565b610c6b565b3480156106eb57600080fd5b506103ba6106fa366004612590565b60016020526000908152604090205481565b34801561071857600080fd5b506102766107273660046125ab565b610c85565b61033661073a36600461254f565b610e2d565b61075261074d36600461260b565b610fb7565b604051610283929190612678565b34801561076c57600080fd5b5061033661077b366004612488565b610feb565b61033661078e3660046122b8565b611071565b34801561079f57600080fd5b506103366107ae366004612488565b6110a0565b3480156107bf57600080fd5b506103ba6107ce3660046126ca565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b34801561080557600080fd5b50610336610814366004612488565b6110f6565b34801561082557600080fd5b506102ac6108343660046126f8565b611134565b60606008805461084890612714565b80601f016020809104026020016040519081016040528092919081815260200182805461087490612714565b80156108c15780601f10610896576101008083540402835291602001916108c1565b820191906000526020600020905b8154815290600101906020018083116108a457829003601f168201915b5050505050905090565b6000336108d981858561116a565b60019150505b92915050565b60408051808201909152600080825260208201526060610918604051806040016040528060008152602001600081525090565b60408051808201825260008082526001600160401b03602080840182905284518381529081019094529195509182610973565b60408051808201909152600081526060602082015281526020019060019003908161094b5790505b509350600080610998604089013560608a013561099360208c018c612590565b61117c565b60408051808201909152918252602082015296989597505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163314610a06576040516391ac5e4f60e01b81523360048201526024015b60405180910390fd5b60208701803590610a2090610a1b908a612590565b6111b8565b14610a5e57610a326020880188612590565b60405163309afaf360e21b815263ffffffff9091166004820152602088013560248201526044016109fd565b610a6d878787878787876111f4565b50505050505050565b600033610a8485828561135b565b610a8f8585856113d9565b60019150505b9392505050565b610aa4611438565b610aae8282611465565b5050565b60408051808201909152600080825260208201526000610ae2604085013560608601356109936020880188612590565b915050600080610af286846114ba565b9092509050610b0f610b076020880188612590565b8383886115dd565b9695505050505050565b610aae82826116be565b600360209081526000928352604080842090915290825290208054610b4790612714565b80601f0160208091040260200160405190810160405280929190818152602001828054610b7390612714565b8015610bc05780601f10610b9557610100808354040283529160200191610bc0565b820191906000526020600020905b815481529060010190602001808311610ba357829003601f168201915b505050505081565b610bd0611438565b600480546001600160a01b0319166001600160a01b0383169081179091556040519081527ff0be4f1e87349231d80c36b33f9e8639658eeaf474014dee15a3e6a4d4414197906020015b60405180910390a150565b610c2d611438565b610c3760006116f4565b565b6001600160a01b03811630145b949350505050565b60606009805461084890612714565b6000336108d98185856113d9565b610c73611438565b610aae610c8082846127ff565b611744565b63ffffffff8416600090815260036020908152604080832061ffff87168452909152812080546060929190610cb990612714565b80601f0160208091040260200160405190810160405280929190818152602001828054610ce590612714565b8015610d325780601f10610d0757610100808354040283529160200191610d32565b820191906000526020600020905b815481529060010190602001808311610d1557829003601f168201915b505050505090508051600003610d825783838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929450610c469350505050565b6000839003610d92579050610c46565b60028310610e1057610dd984848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061184b92505050565b80610de78460028188612914565b604051602001610df99392919061293e565b604051602081830303815290604052915050610c46565b8383604051639a6d49cd60e01b81526004016109fd92919061298f565b60005b81811015610f365736838383818110610e4b57610e4b6129a3565b9050602002810190610e5d91906129b9565b9050610e90610e6f6020830183612590565b602083013563ffffffff919091166000908152600160205260409020541490565b610e9a5750610f2e565b3063d045a0dc60c08301358360a0810135610eb96101008301836129da565b610eca610100890160e08a01612488565b610ed86101208a018a6129da565b6040518963ffffffff1660e01b8152600401610efa9796959493929190612a35565b6000604051808303818588803b158015610f1357600080fd5b505af1158015610f27573d6000803e3d6000fd5b5050505050505b600101610e30565b50336001600160a01b0316638e9e70996040518163ffffffff1660e01b8152600401600060405180830381865afa158015610f75573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610f9d9190810190612abb565b604051638351eea760e01b81526004016109fd9190612125565b610fbf61208e565b6040805180820190915260008082526020820152610fde858585611877565b915091505b935093915050565b610ff3611438565b60405163ca5eb5e160e01b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063ca5eb5e190602401600060405180830381600087803b15801561105657600080fd5b505af115801561106a573d6000803e3d6000fd5b5050505050565b3330146110915760405163029a949d60e31b815260040160405180910390fd5b610a6d87878787878787610a5e565b6110a8611438565b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527fd48d879cef83a1c0bdda516f27b13ddb1b3f8bbac1c9e1511bb2a659c242776090602001610c1a565b6110fe611438565b6001600160a01b03811661112857604051631e4fbdf760e01b8152600060048201526024016109fd565b611131816116f4565b50565b600060208201803590600190839061114c9086612590565b63ffffffff1681526020810191909152604001600020541492915050565b6111778383836001611972565b505050565b60008061118885611a47565b915081905083811015610fe3576040516371c4efed60e01b815260048101829052602481018590526044016109fd565b63ffffffff8116600090815260016020526040812054806108df5760405163f6ff4fb760e01b815263ffffffff841660048201526024016109fd565b60006112066112038787611a7e565b90565b905060006112328261122061121b8a8a611a96565b611ab9565b61122d60208d018d612590565b611aee565b905060288611156112f957600061126f61125260608c0160408d01612b28565b61125f60208d018d612590565b8461126a8c8c611b16565b611b61565b604051633e5ac80960e11b81529091506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690637cb59012906112c59086908d906000908790600401612b45565b600060405180830381600087803b1580156112df57600080fd5b505af11580156112f3573d6000803e3d6000fd5b50505050505b6001600160a01b038216887fefed6d3500546b29533b128a29e3a94d70788727f0507505ac12eaf2e578fd9c61133260208d018d612590565b6040805163ffffffff9092168252602082018690520160405180910390a3505050505050505050565b6001600160a01b0383811660009081526006602090815260408083209386168352929052205460001981146113d357818110156113c457604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064016109fd565b6113d384848484036000611972565b50505050565b6001600160a01b03831661140357604051634b637e8f60e11b8152600060048201526024016109fd565b6001600160a01b03821661142d5760405163ec442f0560e01b8152600060048201526024016109fd565b611177838383611b93565b6000546001600160a01b03163314610c375760405163118cdaa760e01b81523360048201526024016109fd565b63ffffffff8216600081815260016020908152604091829020849055815192835282018390527f238399d427b947898edb290f5ff0f9109849b1c3ba196a42e35f00c50a54b98b910160405180910390a15050565b606080600061151785602001356114d086611cbd565b6114dd60a08901896129da565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611ce992505050565b909350905060008161152a57600161152d565b60025b905061154d61153f6020880188612590565b8261072760808a018a6129da565b6004549093506001600160a01b031680156115d35760405163043a78eb60e01b81526001600160a01b0382169063043a78eb906115909088908890600401612b76565b602060405180830381865afa1580156115ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115d19190612b9b565b505b5050509250929050565b60408051808201909152600080825260208201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ddc28c586040518060a001604052808863ffffffff168152602001611640896111b8565b8152602001878152602001868152602001851515815250306040518363ffffffff1660e01b8152600401611675929190612bb8565b6040805180830381865afa158015611691573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116b59190612c61565b95945050505050565b6001600160a01b0382166116e85760405163ec442f0560e01b8152600060048201526024016109fd565b610aae60008383611b93565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60005b815181101561181b57611776828281518110611765576117656129a3565b60200260200101516040015161184b565b818181518110611788576117886129a3565b602002602001015160400151600360008484815181106117aa576117aa6129a3565b60200260200101516000015163ffffffff1663ffffffff16815260200190815260200160002060008484815181106117e4576117e46129a3565b60200260200101516020015161ffff1661ffff16815260200190815260200160002090816118129190612ccd565b50600101611747565b507fbe4864a8e820971c0247f5992e2da559595f7bf076a21cb5928d443d2a13b67481604051610c1a9190612d8c565b600281015161ffff8116600314610aae5781604051639a6d49cd60e01b81526004016109fd9190612125565b61187f61208e565b60408051808201909152600080825260208201526000806118b633604089013560608a01356118b160208c018c612590565b611d63565b915091506000806118c789846114ba565b90925090506118f36118dc60208b018b612590565b83836118ed368d90038d018d612e17565b8b611d89565b60408051808201909152858152602080820186905282519298509096503391907f85496b760a4b7f8d66384b9df21b381f5d1b1e79f229a47aaf4c232edc2fe59a90611941908d018d612590565b6040805163ffffffff909216825260208201899052810187905260600160405180910390a350505050935093915050565b6001600160a01b03841661199c5760405163e602df0560e01b8152600060048201526024016109fd565b6001600160a01b0383166119c657604051634a1406b160e11b8152600060048201526024016109fd565b6001600160a01b03808516600090815260066020908152604080832093871683529290522082905580156113d357826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051611a3991815260200190565b60405180910390a350505050565b60007f0000000000000000000000000000000000000000000000000000000000000000611a748184612e5f565b6108df9190612e81565b6000611a8d6020828486612914565b610a9591612e98565b6000611aa6602860208486612914565b611aaf91612eb6565b60c01c9392505050565b60006108df7f00000000000000000000000000000000000000000000000000000000000000006001600160401b038416612e81565b60006001600160a01b038416611b045761dead93505b611b0e84846116be565b509092915050565b6060611b258260288186612914565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929695505050505050565b606084848484604051602001611b7a9493929190612ee6565b6040516020818303038152906040529050949350505050565b6001600160a01b038316611bbe578060076000828254611bb39190612f35565b90915550611c309050565b6001600160a01b03831660009081526005602052604090205481811015611c115760405163391434e360e21b81526001600160a01b038516600482015260248101829052604481018390526064016109fd565b6001600160a01b03841660009081526005602052604090209082900390555b6001600160a01b038216611c4c57600780548290039055611c6b565b6001600160a01b03821660009081526005602052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611cb091815260200190565b60405180910390a3505050565b60006108df7f000000000000000000000000000000000000000000000000000000000000000083612e5f565b8051606090151580611d32578484604051602001611d1e92919091825260c01b6001600160c01b031916602082015260280190565b604051602081830303815290604052611d59565b84843385604051602001611d499493929190612f48565b6040516020818303038152906040525b9150935093915050565b600080611d7185858561117c565b9092509050611d808683611e94565b94509492505050565b611d9161208e565b6000611da08460000151611eca565b602085015190915015611dba57611dba8460200151611ef2565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632637a450826040518060a001604052808b63ffffffff168152602001611e0a8c6111b8565b81526020018a815260200189815260200160008960200151111515815250866040518463ffffffff1660e01b8152600401611e46929190612bb8565b60806040518083038185885af1158015611e64573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611e899190612f8b565b979650505050505050565b6001600160a01b038216611ebe57604051634b637e8f60e11b8152600060048201526024016109fd565b610aae82600083611b93565b6000813414611eee576040516304fb820960e51b81523460048201526024016109fd565b5090565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e4fe1d946040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f769190612fd5565b90506001600160a01b038116611f9f576040516329b99a9560e11b815260040160405180910390fd5b6040805133602482018190527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0381811660448501526064808501889052855180860390910181526084909401909452602080840180516001600160e01b03166323b872dd60e01b1781528451610aae9688169589936113d393889360009283929091839182885af180612040576040513d6000823e3d81fd5b50506000513d91508115612058578060011415612065565b6001600160a01b0384163b155b156113d357604051635274afe760e01b81526001600160a01b03851660048201526024016109fd565b60405180606001604052806000801916815260200160006001600160401b031681526020016120d0604051806040016040528060008152602001600081525090565b905290565b60005b838110156120f05781810151838201526020016120d8565b50506000910152565b600081518084526121118160208601602086016120d5565b601f01601f19169290920160200192915050565b602081526000610a9560208301846120f9565b6001600160a01b038116811461113157600080fd5b6000806040838503121561216057600080fd5b823561216b81612138565b946020939093013593505050565b600060e0828403121561218b57600080fd5b50919050565b6000602082840312156121a357600080fd5b81356001600160401b038111156121b957600080fd5b610c4684828501612179565b8351815260208085015190820152600060a08201604060a0604085015281865180845260c08601915060c08160051b8701019350602080890160005b838110156122405788870360bf1901855281518051885283015183880187905261222d878901826120f9565b9750509382019390820190600101612201565b50508751606088015250505060208501516080850152509050610c46565b60006060828403121561218b57600080fd5b60008083601f84011261228257600080fd5b5081356001600160401b0381111561229957600080fd5b6020830191508360208285010111156122b157600080fd5b9250929050565b600080600080600080600060e0888a0312156122d357600080fd5b6122dd898961225e565b96506060880135955060808801356001600160401b038082111561230057600080fd5b61230c8b838c01612270565b909750955060a08a0135915061232182612138565b90935060c0890135908082111561233757600080fd5b506123448a828b01612270565b989b979a50959850939692959293505050565b60008060006060848603121561236c57600080fd5b833561237781612138565b9250602084013561238781612138565b929592945050506040919091013590565b803563ffffffff811681146123ac57600080fd5b919050565b600080604083850312156123c457600080fd5b61216b83612398565b801515811461113157600080fd5b600080604083850312156123ee57600080fd5b82356001600160401b0381111561240457600080fd5b61241085828601612179565b9250506020830135612421816123cd565b809150509250929050565b8151815260208083015190820152604081016108df565b803561ffff811681146123ac57600080fd5b6000806040838503121561246857600080fd5b61247183612398565b915061247f60208401612443565b90509250929050565b60006020828403121561249a57600080fd5b8135610a9581612138565b60008060008060a085870312156124bb57600080fd5b6124c5868661225e565b935060608501356001600160401b038111156124e057600080fd5b6124ec87828801612270565b909450925050608085013561250081612138565b939692955090935050565b60008083601f84011261251d57600080fd5b5081356001600160401b0381111561253457600080fd5b6020830191508360208260051b85010111156122b157600080fd5b6000806020838503121561256257600080fd5b82356001600160401b0381111561257857600080fd5b6125848582860161250b565b90969095509350505050565b6000602082840312156125a257600080fd5b610a9582612398565b600080600080606085870312156125c157600080fd5b6125ca85612398565b93506125d860208601612443565b925060408501356001600160401b038111156125f357600080fd5b6125ff87828801612270565b95989497509550505050565b6000806000838503608081121561262157600080fd5b84356001600160401b0381111561263757600080fd5b61264387828801612179565b9450506040601f198201121561265857600080fd5b50602084019150606084013561266d81612138565b809150509250925092565b600060c082019050835182526001600160401b03602085015116602083015260408401516126b3604084018280518252602090810151910152565b5082516080830152602083015160a0830152610a95565b600080604083850312156126dd57600080fd5b82356126e881612138565b9150602083013561242181612138565b60006060828403121561270a57600080fd5b610a95838361225e565b600181811c9082168061272857607f821691505b60208210810361218b57634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b038111828210171561278057612780612748565b60405290565b604080519081016001600160401b038111828210171561278057612780612748565b604051601f8201601f191681016001600160401b03811182821017156127d0576127d0612748565b604052919050565b60006001600160401b038211156127f1576127f1612748565b50601f01601f191660200190565b60006001600160401b038084111561281957612819612748565b8360051b602061282a8183016127a8565b86815291850191818101903684111561284257600080fd5b865b848110156129085780358681111561285c5760008081fd5b880160603682900312156128705760008081fd5b61287861275e565b61288182612398565b815261288e868301612443565b86820152604080830135898111156128a65760008081fd5b929092019136601f8401126128bb5760008081fd5b82356128ce6128c9826127d8565b6127a8565b81815236898387010111156128e35760008081fd5b818986018a830137600091810189019190915290820152845250918301918301612844565b50979650505050505050565b6000808585111561292457600080fd5b8386111561293157600080fd5b5050820193919092039150565b600084516129508184602089016120d5565b8201838582376000930192835250909392505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b602081526000610c46602083018486612966565b634e487b7160e01b600052603260045260246000fd5b6000823561013e198336030181126129d057600080fd5b9190910192915050565b6000808335601e198436030181126129f157600080fd5b8301803591506001600160401b03821115612a0b57600080fd5b6020019150368190038213156122b157600080fd5b6001600160401b038116811461113157600080fd5b63ffffffff612a4389612398565b1681526020880135602082015260006040890135612a6081612a20565b6001600160401b03811660408401525087606083015260e06080830152612a8b60e083018789612966565b6001600160a01b03861660a084015282810360c0840152612aad818587612966565b9a9950505050505050505050565b600060208284031215612acd57600080fd5b81516001600160401b03811115612ae357600080fd5b8201601f81018413612af457600080fd5b8051612b026128c9826127d8565b818152856020838501011115612b1757600080fd5b6116b58260208301602086016120d5565b600060208284031215612b3a57600080fd5b8135610a9581612a20565b60018060a01b038516815283602082015261ffff83166040820152608060608201526000610b0f60808301846120f9565b604081526000612b8960408301856120f9565b82810360208401526116b581856120f9565b600060208284031215612bad57600080fd5b8151610a95816123cd565b6040815263ffffffff8351166040820152602083015160608201526000604084015160a06080840152612bee60e08401826120f9565b90506060850151603f198483030160a0850152612c0b82826120f9565b60809690960151151560c08501525050506001600160a01b039190911660209091015290565b600060408284031215612c4357600080fd5b612c4b612786565b9050815181526020820151602082015292915050565b600060408284031215612c7357600080fd5b610a958383612c31565b601f821115611177576000816000526020600020601f850160051c81016020861015612ca65750805b601f850160051c820191505b81811015612cc557828155600101612cb2565b505050505050565b81516001600160401b03811115612ce657612ce6612748565b612cfa81612cf48454612714565b84612c7d565b602080601f831160018114612d2f5760008415612d175750858301515b600019600386901b1c1916600185901b178555612cc5565b600085815260208120601f198616915b82811015612d5e57888601518255948401946001909101908401612d3f565b5085821015612d7c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b83811015612e0957888303603f190185528151805163ffffffff1684528781015161ffff16888501528601516060878501819052612df5818601836120f9565b968901969450505090860190600101612db5565b509098975050505050505050565b600060408284031215612e2957600080fd5b612e31612786565b82358152602083013560208201528091505092915050565b634e487b7160e01b600052601160045260246000fd5b600082612e7c57634e487b7160e01b600052601260045260246000fd5b500490565b80820281158282048414176108df576108df612e49565b803560208310156108df57600019602084900360031b1b1692915050565b6001600160c01b03198135818116916008851015612ede5780818660080360031b1b83161692505b505092915050565b6001600160401b0360c01b8560c01b16815263ffffffff60e01b8460e01b16600882015282600c82015260008251612f2581602c8501602087016120d5565b91909101602c0195945050505050565b808201808211156108df576108df612e49565b8481526001600160401b0360c01b8460c01b16602082015282602882015260008251612f7b8160488501602087016120d5565b9190910160480195945050505050565b600060808284031215612f9d57600080fd5b612fa561275e565b825181526020830151612fb781612a20565b6020820152612fc98460408501612c31565b60408201529392505050565b600060208284031215612fe757600080fd5b8151610a958161213856fea2646970667358221220645fbf12560a7699955d058d106f0e740ad9cbc14ee055c7fe136365795a23de64736f6c63430008160033", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/examples/oft-movement/build/oft/BuildInfo.yaml b/examples/oft-movement/build/oft/BuildInfo.yaml deleted file mode 100644 index 94632a7d1..000000000 --- a/examples/oft-movement/build/oft/BuildInfo.yaml +++ /dev/null @@ -1,129 +0,0 @@ ---- -compiled_package_info: - package_name: oft - address_alias_instantiation: - Extensions: "0000000000000000000000000000000000000000000000000000000000000001" - aptos_framework: "0000000000000000000000000000000000000000000000000000000000000001" - aptos_fungible_asset: 000000000000000000000000000000000000000000000000000000000000000a - aptos_std: "0000000000000000000000000000000000000000000000000000000000000001" - aptos_token: "0000000000000000000000000000000000000000000000000000000000000003" - blocked_msglib: 197b99f723c6ea412bc7adebb840d38113252296bc80612f6a92e3d56678b87e - core_resources: 000000000000000000000000000000000000000000000000000000000a550c18 - dvn: d6f420483a90c7db5ce2ec12e8acfc2bfb7b93829c9e6a3b0760bca330be64dd - dvn_fee_lib_0: f3e18cf48c09fdd1fe529e23861fb4d63fad70068c64dd4b8237daf3e136ed26 - dvn_fee_lib_router_0: 709b216b828fe42596d860d0126907b43f89564ae4bc81ec153b02fe492174a4 - dvn_fee_lib_router_1: 27c840aa072206a4e190042158c1ce4cf23b3f04fa22dcd5c092859ab1e54c48 - endpoint_v2: a53352d6eb261173560111b83eb898611a8e87f7dabada415159f749fbd185e4 - endpoint_v2_common: 07832affd0909f4ae3363efc372d7b86dd3be80ed5efe9cbb9b250ffb89a6e4b - executor_fee_lib_0: cd94220a2632ea96e2b05bd5056a8234a418cf647abfe92949a8f7623732dbce - executor_fee_lib_router_0: fa6f8d82188bfe34cb37e0aeba3bcf5a21610116d01c187d7779817a9441f3ad - executor_fee_lib_router_1: 00221a5f2158d7aa67c5939a57cce0ce0e3d5915ae4a575fa7ce50c76d115023 - layerzero_admin: de46aadc73f380cf51005afaf0a32c58d8e8d63c6dc36155935a3d0422e93c37 - layerzero_treasury_admin: de46aadc73f380cf51005afaf0a32c58d8e8d63c6dc36155935a3d0422e93c37 - msglib_types: 302b77de23fd4189623e587fe48b87ec807db57c410e0f0a1f140b99be80f6b1 - native_token_metadata_address: 000000000000000000000000000000000000000000000000000000000000000a - oft: 3d24005f22a2913a9e228547177a01a817fcd5bbaa5290b07fe4826f3f31be4a - oft_admin: 3d24005f22a2913a9e228547177a01a817fcd5bbaa5290b07fe4826f3f31be4a - oft_common: 1fa2c7365c88f7db4995f10ce5ffa93043e04f7ec797fb97c022d52d5ed870b9 - price_feed_module_0: 36536dc5f158e3701521614e4e2b2fff07fff15877f36123196bb37356afe404 - price_feed_router_0: c952a002c95ee5880a54e054764fbda13a2eda3b9698528629863921f6c2c74c - price_feed_router_1: 2dd6cca9b6220ed18ed5c1e611c8989efc0a0d2a441dd24074180509db6d9926 - router_node_0: 864554801ac1fd3611c1f9470c5d62fae447233933564667ff947c5b446237af - router_node_1: 169216d2983bfbee456d20e6a902d17cc2b09c2a936c1d2d43d057047dababab - simple_msglib: fa0ca06bf52334a3e9e040e807bbd532d90fc7651e594a42cdae919605a94d31 - std: "0000000000000000000000000000000000000000000000000000000000000001" - treasury: 6b3c61050170fd85a9ebe324688d092502bad3255856d61ecabec15c54b6ff90 - uln_302: be533727aebe97132ec0a606d99e0ce137dbdf06286eb07d9e0f7154df1f3f10 - vm: "0000000000000000000000000000000000000000000000000000000000000000" - vm_reserved: "0000000000000000000000000000000000000000000000000000000000000000" - worker_common: c3cd6ba2758a9acf604c9e5382a6f76ee71598b863b93efc7c4fe542a397a9db - worker_peripherals: de46aadc73f380cf51005afaf0a32c58d8e8d63c6dc36155935a3d0422e93c37 - source_digest: ADAADBEB37D7B65BE9B5A959A336F1857371B1E5C95BE58BA01A534EE413D601 - build_flags: - dev_mode: false - test_mode: false - override_std: ~ - generate_docs: false - generate_abis: false - generate_move_model: true - full_model_generation: false - install_dir: ~ - force_recompilation: false - additional_named_addresses: - blocked_msglib: 197b99f723c6ea412bc7adebb840d38113252296bc80612f6a92e3d56678b87e - dvn: d6f420483a90c7db5ce2ec12e8acfc2bfb7b93829c9e6a3b0760bca330be64dd - dvn_fee_lib_0: f3e18cf48c09fdd1fe529e23861fb4d63fad70068c64dd4b8237daf3e136ed26 - dvn_fee_lib_router_0: 709b216b828fe42596d860d0126907b43f89564ae4bc81ec153b02fe492174a4 - dvn_fee_lib_router_1: 27c840aa072206a4e190042158c1ce4cf23b3f04fa22dcd5c092859ab1e54c48 - endpoint_v2: a53352d6eb261173560111b83eb898611a8e87f7dabada415159f749fbd185e4 - endpoint_v2_common: 07832affd0909f4ae3363efc372d7b86dd3be80ed5efe9cbb9b250ffb89a6e4b - executor_fee_lib_0: cd94220a2632ea96e2b05bd5056a8234a418cf647abfe92949a8f7623732dbce - executor_fee_lib_router_0: fa6f8d82188bfe34cb37e0aeba3bcf5a21610116d01c187d7779817a9441f3ad - executor_fee_lib_router_1: 00221a5f2158d7aa67c5939a57cce0ce0e3d5915ae4a575fa7ce50c76d115023 - layerzero_admin: de46aadc73f380cf51005afaf0a32c58d8e8d63c6dc36155935a3d0422e93c37 - layerzero_treasury_admin: de46aadc73f380cf51005afaf0a32c58d8e8d63c6dc36155935a3d0422e93c37 - msglib_types: 302b77de23fd4189623e587fe48b87ec807db57c410e0f0a1f140b99be80f6b1 - oft: 3d24005f22a2913a9e228547177a01a817fcd5bbaa5290b07fe4826f3f31be4a - oft_admin: 3d24005f22a2913a9e228547177a01a817fcd5bbaa5290b07fe4826f3f31be4a - oft_common: 1fa2c7365c88f7db4995f10ce5ffa93043e04f7ec797fb97c022d52d5ed870b9 - price_feed_module_0: 36536dc5f158e3701521614e4e2b2fff07fff15877f36123196bb37356afe404 - price_feed_router_0: c952a002c95ee5880a54e054764fbda13a2eda3b9698528629863921f6c2c74c - price_feed_router_1: 2dd6cca9b6220ed18ed5c1e611c8989efc0a0d2a441dd24074180509db6d9926 - router_node_0: 864554801ac1fd3611c1f9470c5d62fae447233933564667ff947c5b446237af - router_node_1: 169216d2983bfbee456d20e6a902d17cc2b09c2a936c1d2d43d057047dababab - simple_msglib: fa0ca06bf52334a3e9e040e807bbd532d90fc7651e594a42cdae919605a94d31 - treasury: 6b3c61050170fd85a9ebe324688d092502bad3255856d61ecabec15c54b6ff90 - uln_302: be533727aebe97132ec0a606d99e0ce137dbdf06286eb07d9e0f7154df1f3f10 - worker_common: c3cd6ba2758a9acf604c9e5382a6f76ee71598b863b93efc7c4fe542a397a9db - worker_peripherals: de46aadc73f380cf51005afaf0a32c58d8e8d63c6dc36155935a3d0422e93c37 - architecture: ~ - fetch_deps_only: false - skip_fetch_latest_git_deps: false - compiler_config: - bytecode_version: 6 - known_attributes: - - bytecode_instruction - - deprecated - - event - - expected_failure - - "fmt::skip" - - legacy_entry_fun - - "lint::allow_unsafe_randomness" - - "lint::skip" - - native_interface - - randomness - - resource_group - - resource_group_member - - test - - test_only - - verify_only - - view - skip_attribute_checks: false - compiler_version: ~ - language_version: ~ - experiments: - - optimize=on -dependencies: - - AptosFramework - - AptosStdlib - - MoveStdlib - - blocked_msglib - - dvn_fee_lib_0 - - dvn_fee_lib_router_0 - - dvn_fee_lib_router_1 - - endpoint_v2 - - endpoint_v2_common - - executor_fee_lib_0 - - executor_fee_lib_router_0 - - executor_fee_lib_router_1 - - msglib_types - - oft_common - - price_feed_module_0 - - price_feed_router_0 - - price_feed_router_1 - - router_node_0 - - router_node_1 - - simple_msglib - - treasury - - uln_302 - - worker_common diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/account.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/account.mv deleted file mode 100644 index 8d0ba1994..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/account.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/aggregator.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/aggregator.mv deleted file mode 100644 index e6e96622e..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/aggregator.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/aggregator_factory.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/aggregator_factory.mv deleted file mode 100644 index c6fa652a7..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/aggregator_factory.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/aggregator_v2.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/aggregator_v2.mv deleted file mode 100644 index ffb7e84b6..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/aggregator_v2.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/aptos_account.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/aptos_account.mv deleted file mode 100644 index 8a008c3a0..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/aptos_account.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/aptos_coin.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/aptos_coin.mv deleted file mode 100644 index a5622b2ab..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/aptos_coin.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/aptos_governance.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/aptos_governance.mv deleted file mode 100644 index 99990854e..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/aptos_governance.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/block.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/block.mv deleted file mode 100644 index a4cf9f018..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/block.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/chain_id.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/chain_id.mv deleted file mode 100644 index c1c9d214c..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/chain_id.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/chain_status.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/chain_status.mv deleted file mode 100644 index ac8e45a10..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/chain_status.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/code.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/code.mv deleted file mode 100644 index 23b684834..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/code.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/coin.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/coin.mv deleted file mode 100644 index 63e5ba7b4..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/coin.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/config_buffer.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/config_buffer.mv deleted file mode 100644 index 2623d5a0e..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/config_buffer.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/consensus_config.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/consensus_config.mv deleted file mode 100644 index 967d2663b..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/consensus_config.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/create_signer.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/create_signer.mv deleted file mode 100644 index 0e486390d..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/create_signer.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/delegation_pool.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/delegation_pool.mv deleted file mode 100644 index ecbe819e7..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/delegation_pool.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/dispatchable_fungible_asset.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/dispatchable_fungible_asset.mv deleted file mode 100644 index 9335b184d..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/dispatchable_fungible_asset.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/dkg.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/dkg.mv deleted file mode 100644 index f4ddbbecb..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/dkg.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/event.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/event.mv deleted file mode 100644 index ca9df5ed8..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/event.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/execution_config.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/execution_config.mv deleted file mode 100644 index f338850c5..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/execution_config.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/function_info.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/function_info.mv deleted file mode 100644 index 41b3fef17..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/function_info.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/fungible_asset.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/fungible_asset.mv deleted file mode 100644 index fb9c5dc1b..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/fungible_asset.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/gas_schedule.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/gas_schedule.mv deleted file mode 100644 index 57e5ab297..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/gas_schedule.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/genesis.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/genesis.mv deleted file mode 100644 index 3c1e7f549..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/genesis.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/governance_proposal.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/governance_proposal.mv deleted file mode 100644 index f875f4891..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/governance_proposal.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/guid.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/guid.mv deleted file mode 100644 index cb8277858..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/guid.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/jwk_consensus_config.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/jwk_consensus_config.mv deleted file mode 100644 index d9ffa6bb5..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/jwk_consensus_config.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/jwks.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/jwks.mv deleted file mode 100644 index ccae49e59..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/jwks.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/keyless_account.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/keyless_account.mv deleted file mode 100644 index 460d109d3..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/keyless_account.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/managed_coin.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/managed_coin.mv deleted file mode 100644 index ee62af2f1..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/managed_coin.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/multisig_account.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/multisig_account.mv deleted file mode 100644 index 7fee6df05..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/multisig_account.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/object.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/object.mv deleted file mode 100644 index 32e79236e..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/object.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/object_code_deployment.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/object_code_deployment.mv deleted file mode 100644 index 367e0a835..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/object_code_deployment.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/optional_aggregator.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/optional_aggregator.mv deleted file mode 100644 index f4e61a08a..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/optional_aggregator.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/primary_fungible_store.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/primary_fungible_store.mv deleted file mode 100644 index f602682b3..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/primary_fungible_store.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/randomness.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/randomness.mv deleted file mode 100644 index 9e6db4271..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/randomness.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/randomness_api_v0_config.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/randomness_api_v0_config.mv deleted file mode 100644 index 1ff51ae75..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/randomness_api_v0_config.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/randomness_config.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/randomness_config.mv deleted file mode 100644 index fa222a57b..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/randomness_config.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/randomness_config_seqnum.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/randomness_config_seqnum.mv deleted file mode 100644 index a88da7d23..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/randomness_config_seqnum.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/reconfiguration.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/reconfiguration.mv deleted file mode 100644 index 67f64cbe3..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/reconfiguration.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/reconfiguration_state.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/reconfiguration_state.mv deleted file mode 100644 index 0817b53bb..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/reconfiguration_state.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/reconfiguration_with_dkg.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/reconfiguration_with_dkg.mv deleted file mode 100644 index 349bb150e..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/reconfiguration_with_dkg.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/resource_account.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/resource_account.mv deleted file mode 100644 index 349072440..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/resource_account.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/stake.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/stake.mv deleted file mode 100644 index cbdedf214..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/stake.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/staking_config.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/staking_config.mv deleted file mode 100644 index 9379a3bd9..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/staking_config.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/staking_contract.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/staking_contract.mv deleted file mode 100644 index 22ca7cf00..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/staking_contract.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/staking_proxy.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/staking_proxy.mv deleted file mode 100644 index 4b023ea6d..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/staking_proxy.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/state_storage.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/state_storage.mv deleted file mode 100644 index 1fd5adab2..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/state_storage.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/storage_gas.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/storage_gas.mv deleted file mode 100644 index 24961764f..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/storage_gas.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/system_addresses.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/system_addresses.mv deleted file mode 100644 index cb6f65540..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/system_addresses.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/timestamp.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/timestamp.mv deleted file mode 100644 index 8f1d50a3c..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/timestamp.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/transaction_context.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/transaction_context.mv deleted file mode 100644 index 7802ca953..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/transaction_context.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/transaction_fee.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/transaction_fee.mv deleted file mode 100644 index 4aa840704..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/transaction_fee.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/transaction_validation.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/transaction_validation.mv deleted file mode 100644 index bdbb1cce0..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/transaction_validation.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/util.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/util.mv deleted file mode 100644 index a39b8d91b..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/util.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/validator_consensus_info.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/validator_consensus_info.mv deleted file mode 100644 index 19231aa95..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/validator_consensus_info.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/version.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/version.mv deleted file mode 100644 index 3e0ca7de4..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/version.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/vesting.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/vesting.mv deleted file mode 100644 index b933b7f68..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/vesting.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/voting.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/voting.mv deleted file mode 100644 index c14926f04..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosFramework/voting.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosStdlib/any.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosStdlib/any.mv deleted file mode 100644 index 790ec873f..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosStdlib/any.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosStdlib/aptos_hash.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosStdlib/aptos_hash.mv deleted file mode 100644 index 2947f36cf..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosStdlib/aptos_hash.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosStdlib/big_vector.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosStdlib/big_vector.mv deleted file mode 100644 index 7288a6189..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosStdlib/big_vector.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosStdlib/bls12381.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosStdlib/bls12381.mv deleted file mode 100644 index 82cfe5766..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosStdlib/bls12381.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosStdlib/bls12381_algebra.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosStdlib/bls12381_algebra.mv deleted file mode 100644 index bb7d580bb..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosStdlib/bls12381_algebra.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosStdlib/bn254_algebra.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosStdlib/bn254_algebra.mv deleted file mode 100644 index 4c5e456d7..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosStdlib/bn254_algebra.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosStdlib/capability.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosStdlib/capability.mv deleted file mode 100644 index 60e919e97..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosStdlib/capability.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosStdlib/comparator.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosStdlib/comparator.mv deleted file mode 100644 index 151b4188e..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosStdlib/comparator.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosStdlib/copyable_any.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosStdlib/copyable_any.mv deleted file mode 100644 index 433f1ae5e..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosStdlib/copyable_any.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosStdlib/crypto_algebra.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosStdlib/crypto_algebra.mv deleted file mode 100644 index 477fbb609..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosStdlib/crypto_algebra.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosStdlib/debug.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosStdlib/debug.mv deleted file mode 100644 index 54fd205df..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosStdlib/debug.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosStdlib/ed25519.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosStdlib/ed25519.mv deleted file mode 100644 index 3686c4550..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosStdlib/ed25519.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosStdlib/fixed_point64.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosStdlib/fixed_point64.mv deleted file mode 100644 index cdf185b8f..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosStdlib/fixed_point64.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosStdlib/from_bcs.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosStdlib/from_bcs.mv deleted file mode 100644 index 92d6d1e7c..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosStdlib/from_bcs.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosStdlib/math128.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosStdlib/math128.mv deleted file mode 100644 index 7979abef7..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosStdlib/math128.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosStdlib/math64.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosStdlib/math64.mv deleted file mode 100644 index 08b84e3cc..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosStdlib/math64.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosStdlib/math_fixed.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosStdlib/math_fixed.mv deleted file mode 100644 index bb74af93e..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosStdlib/math_fixed.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosStdlib/math_fixed64.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosStdlib/math_fixed64.mv deleted file mode 100644 index 9cdb38324..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosStdlib/math_fixed64.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosStdlib/multi_ed25519.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosStdlib/multi_ed25519.mv deleted file mode 100644 index a76e717a9..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosStdlib/multi_ed25519.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosStdlib/pool_u64.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosStdlib/pool_u64.mv deleted file mode 100644 index 8763de5c6..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosStdlib/pool_u64.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosStdlib/pool_u64_unbound.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosStdlib/pool_u64_unbound.mv deleted file mode 100644 index 800876ae1..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosStdlib/pool_u64_unbound.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosStdlib/ristretto255.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosStdlib/ristretto255.mv deleted file mode 100644 index eceefd3d7..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosStdlib/ristretto255.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosStdlib/ristretto255_bulletproofs.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosStdlib/ristretto255_bulletproofs.mv deleted file mode 100644 index de94a752d..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosStdlib/ristretto255_bulletproofs.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosStdlib/ristretto255_elgamal.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosStdlib/ristretto255_elgamal.mv deleted file mode 100644 index 8de1f547a..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosStdlib/ristretto255_elgamal.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosStdlib/ristretto255_pedersen.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosStdlib/ristretto255_pedersen.mv deleted file mode 100644 index 6aa23a90e..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosStdlib/ristretto255_pedersen.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosStdlib/secp256k1.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosStdlib/secp256k1.mv deleted file mode 100644 index bf0d3b680..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosStdlib/secp256k1.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosStdlib/simple_map.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosStdlib/simple_map.mv deleted file mode 100644 index 4f729b6e3..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosStdlib/simple_map.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosStdlib/smart_table.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosStdlib/smart_table.mv deleted file mode 100644 index c84b66c71..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosStdlib/smart_table.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosStdlib/smart_vector.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosStdlib/smart_vector.mv deleted file mode 100644 index bc7a1f711..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosStdlib/smart_vector.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosStdlib/string_utils.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosStdlib/string_utils.mv deleted file mode 100644 index 2af920974..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosStdlib/string_utils.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosStdlib/table.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosStdlib/table.mv deleted file mode 100644 index 6a0d6749a..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosStdlib/table.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosStdlib/table_with_length.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosStdlib/table_with_length.mv deleted file mode 100644 index 868c75252..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosStdlib/table_with_length.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosStdlib/type_info.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosStdlib/type_info.mv deleted file mode 100644 index 7943d8e9a..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/AptosStdlib/type_info.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/MoveStdlib/acl.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/MoveStdlib/acl.mv deleted file mode 100644 index 2e88d6816..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/MoveStdlib/acl.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/MoveStdlib/bcs.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/MoveStdlib/bcs.mv deleted file mode 100644 index 462cd1491..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/MoveStdlib/bcs.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/MoveStdlib/bit_vector.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/MoveStdlib/bit_vector.mv deleted file mode 100644 index 9b40a5cc4..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/MoveStdlib/bit_vector.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/MoveStdlib/error.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/MoveStdlib/error.mv deleted file mode 100644 index 8a8c47a3d..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/MoveStdlib/error.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/MoveStdlib/features.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/MoveStdlib/features.mv deleted file mode 100644 index 31ceac75a..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/MoveStdlib/features.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/MoveStdlib/fixed_point32.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/MoveStdlib/fixed_point32.mv deleted file mode 100644 index 40e1638d3..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/MoveStdlib/fixed_point32.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/MoveStdlib/hash.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/MoveStdlib/hash.mv deleted file mode 100644 index 4ce035be4..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/MoveStdlib/hash.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/MoveStdlib/mem.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/MoveStdlib/mem.mv deleted file mode 100644 index 1f6ec16e7..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/MoveStdlib/mem.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/MoveStdlib/option.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/MoveStdlib/option.mv deleted file mode 100644 index 5430b7f1d..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/MoveStdlib/option.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/MoveStdlib/signer.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/MoveStdlib/signer.mv deleted file mode 100644 index 4e4ddb18d..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/MoveStdlib/signer.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/MoveStdlib/string.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/MoveStdlib/string.mv deleted file mode 100644 index cef687067..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/MoveStdlib/string.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/MoveStdlib/vector.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/MoveStdlib/vector.mv deleted file mode 100644 index 6f6f0fc98..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/MoveStdlib/vector.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/blocked_msglib/router_calls.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/blocked_msglib/router_calls.mv deleted file mode 100644 index 786d0c7e7..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/blocked_msglib/router_calls.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/dvn_fee_lib_0/dvn_fee_lib.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/dvn_fee_lib_0/dvn_fee_lib.mv deleted file mode 100644 index 0d53d3af6..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/dvn_fee_lib_0/dvn_fee_lib.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/dvn_fee_lib_router_0/dvn_fee_lib_router.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/dvn_fee_lib_router_0/dvn_fee_lib_router.mv deleted file mode 100644 index 8b08b4196..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/dvn_fee_lib_router_0/dvn_fee_lib_router.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/dvn_fee_lib_router_1/dvn_fee_lib_router.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/dvn_fee_lib_router_1/dvn_fee_lib_router.mv deleted file mode 100644 index a3340fb61..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/dvn_fee_lib_router_1/dvn_fee_lib_router.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/endpoint_v2/admin.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/endpoint_v2/admin.mv deleted file mode 100644 index fb7fad844..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/endpoint_v2/admin.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/endpoint_v2/channels.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/endpoint_v2/channels.mv deleted file mode 100644 index a9287bbe4..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/endpoint_v2/channels.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/endpoint_v2/endpoint.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/endpoint_v2/endpoint.mv deleted file mode 100644 index 104e04398..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/endpoint_v2/endpoint.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/endpoint_v2/messaging_composer.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/endpoint_v2/messaging_composer.mv deleted file mode 100644 index 42a01ad3a..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/endpoint_v2/messaging_composer.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/endpoint_v2/messaging_receipt.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/endpoint_v2/messaging_receipt.mv deleted file mode 100644 index 91bfc41b0..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/endpoint_v2/messaging_receipt.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/endpoint_v2/msglib_manager.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/endpoint_v2/msglib_manager.mv deleted file mode 100644 index 8fb850dba..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/endpoint_v2/msglib_manager.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/endpoint_v2/registration.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/endpoint_v2/registration.mv deleted file mode 100644 index 49ab8bc3e..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/endpoint_v2/registration.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/endpoint_v2/store.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/endpoint_v2/store.mv deleted file mode 100644 index f6040261d..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/endpoint_v2/store.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/endpoint_v2/timeout.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/endpoint_v2/timeout.mv deleted file mode 100644 index bbac6b94f..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/endpoint_v2/timeout.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/endpoint_v2_common/assert_no_duplicates.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/endpoint_v2_common/assert_no_duplicates.mv deleted file mode 100644 index 253c0cb2f..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/endpoint_v2_common/assert_no_duplicates.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/endpoint_v2_common/bytes32.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/endpoint_v2_common/bytes32.mv deleted file mode 100644 index 33a0e6788..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/endpoint_v2_common/bytes32.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/endpoint_v2_common/config_eid_tagged.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/endpoint_v2_common/config_eid_tagged.mv deleted file mode 100644 index 6a1b06fa9..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/endpoint_v2_common/config_eid_tagged.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/endpoint_v2_common/contract_identity.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/endpoint_v2_common/contract_identity.mv deleted file mode 100644 index 23f18faef..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/endpoint_v2_common/contract_identity.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/endpoint_v2_common/guid.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/endpoint_v2_common/guid.mv deleted file mode 100644 index a1b4cf2ce..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/endpoint_v2_common/guid.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/endpoint_v2_common/native_token.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/endpoint_v2_common/native_token.mv deleted file mode 100644 index 9f7075c89..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/endpoint_v2_common/native_token.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/endpoint_v2_common/native_token_fa.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/endpoint_v2_common/native_token_fa.mv deleted file mode 100644 index 4b77526f9..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/endpoint_v2_common/native_token_fa.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/endpoint_v2_common/packet_raw.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/endpoint_v2_common/packet_raw.mv deleted file mode 100644 index 3f1f984b3..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/endpoint_v2_common/packet_raw.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/endpoint_v2_common/packet_v1_codec.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/endpoint_v2_common/packet_v1_codec.mv deleted file mode 100644 index 666b74d46..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/endpoint_v2_common/packet_v1_codec.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/endpoint_v2_common/send_packet.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/endpoint_v2_common/send_packet.mv deleted file mode 100644 index 6642ffc9d..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/endpoint_v2_common/send_packet.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/endpoint_v2_common/serde.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/endpoint_v2_common/serde.mv deleted file mode 100644 index 7322232c0..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/endpoint_v2_common/serde.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/endpoint_v2_common/universal_config.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/endpoint_v2_common/universal_config.mv deleted file mode 100644 index 774fd2d04..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/endpoint_v2_common/universal_config.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/executor_fee_lib_0/executor_fee_lib.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/executor_fee_lib_0/executor_fee_lib.mv deleted file mode 100644 index 612dec151..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/executor_fee_lib_0/executor_fee_lib.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/executor_fee_lib_0/executor_option.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/executor_fee_lib_0/executor_option.mv deleted file mode 100644 index e9a39da0c..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/executor_fee_lib_0/executor_option.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/executor_fee_lib_router_0/executor_fee_lib_router.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/executor_fee_lib_router_0/executor_fee_lib_router.mv deleted file mode 100644 index c62dd0541..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/executor_fee_lib_router_0/executor_fee_lib_router.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/executor_fee_lib_router_1/executor_fee_lib_router.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/executor_fee_lib_router_1/executor_fee_lib_router.mv deleted file mode 100644 index 5caf22c99..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/executor_fee_lib_router_1/executor_fee_lib_router.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/msglib_types/configs_executor.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/msglib_types/configs_executor.mv deleted file mode 100644 index 7a10243f9..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/msglib_types/configs_executor.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/msglib_types/configs_uln.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/msglib_types/configs_uln.mv deleted file mode 100644 index 8e98afeda..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/msglib_types/configs_uln.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/msglib_types/dvn_verify_params.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/msglib_types/dvn_verify_params.mv deleted file mode 100644 index 40e29dda9..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/msglib_types/dvn_verify_params.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/msglib_types/worker_options.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/msglib_types/worker_options.mv deleted file mode 100644 index 897dcb70d..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/msglib_types/worker_options.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/oft_common/oft_compose_msg_codec.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/oft_common/oft_compose_msg_codec.mv deleted file mode 100644 index ed9d838ef..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/oft_common/oft_compose_msg_codec.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/oft_common/oft_fee_detail.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/oft_common/oft_fee_detail.mv deleted file mode 100644 index bc0cd3b5a..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/oft_common/oft_fee_detail.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/oft_common/oft_limit.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/oft_common/oft_limit.mv deleted file mode 100644 index 585aeceb8..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/oft_common/oft_limit.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/oft_common/oft_msg_codec.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/oft_common/oft_msg_codec.mv deleted file mode 100644 index a02e7cfbb..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/oft_common/oft_msg_codec.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/oft_common/oft_v1_msg_codec.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/oft_common/oft_v1_msg_codec.mv deleted file mode 100644 index 821033261..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/oft_common/oft_v1_msg_codec.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/price_feed_module_0/eid_model_pair.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/price_feed_module_0/eid_model_pair.mv deleted file mode 100644 index 3d049c9c5..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/price_feed_module_0/eid_model_pair.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/price_feed_module_0/feeds.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/price_feed_module_0/feeds.mv deleted file mode 100644 index 02047594a..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/price_feed_module_0/feeds.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/price_feed_module_0/price.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/price_feed_module_0/price.mv deleted file mode 100644 index 6e33b8a7d..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/price_feed_module_0/price.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/price_feed_router_0/router.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/price_feed_router_0/router.mv deleted file mode 100644 index a475f7419..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/price_feed_router_0/router.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/price_feed_router_1/router.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/price_feed_router_1/router.mv deleted file mode 100644 index d4f5f4338..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/price_feed_router_1/router.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/router_node_0/router_node.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/router_node_0/router_node.mv deleted file mode 100644 index 5d6087f79..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/router_node_0/router_node.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/router_node_1/router_node.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/router_node_1/router_node.mv deleted file mode 100644 index 6f2866c01..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/router_node_1/router_node.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/simple_msglib/msglib.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/simple_msglib/msglib.mv deleted file mode 100644 index d01b3b8a2..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/simple_msglib/msglib.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/simple_msglib/router_calls.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/simple_msglib/router_calls.mv deleted file mode 100644 index 6ea25e39b..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/simple_msglib/router_calls.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/treasury/treasury.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/treasury/treasury.mv deleted file mode 100644 index a135499af..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/treasury/treasury.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/uln_302/admin.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/uln_302/admin.mv deleted file mode 100644 index 31b15c5bd..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/uln_302/admin.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/uln_302/assert_valid_default_uln_config.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/uln_302/assert_valid_default_uln_config.mv deleted file mode 100644 index 3e24a3a83..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/uln_302/assert_valid_default_uln_config.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/uln_302/assert_valid_uln_config.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/uln_302/assert_valid_uln_config.mv deleted file mode 100644 index 0f78240ba..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/uln_302/assert_valid_uln_config.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/uln_302/configuration.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/uln_302/configuration.mv deleted file mode 100644 index e278cdcfb..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/uln_302/configuration.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/uln_302/for_each_dvn.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/uln_302/for_each_dvn.mv deleted file mode 100644 index 4e015d12c..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/uln_302/for_each_dvn.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/uln_302/msglib.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/uln_302/msglib.mv deleted file mode 100644 index f97eb18ac..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/uln_302/msglib.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/uln_302/router_calls.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/uln_302/router_calls.mv deleted file mode 100644 index 15720c925..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/uln_302/router_calls.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/uln_302/sending.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/uln_302/sending.mv deleted file mode 100644 index f54d3a8a1..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/uln_302/sending.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/uln_302/uln_302_store.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/uln_302/uln_302_store.mv deleted file mode 100644 index ce27c908c..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/uln_302/uln_302_store.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/uln_302/verification.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/uln_302/verification.mv deleted file mode 100644 index 829168fdf..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/uln_302/verification.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/worker_common/multisig.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/worker_common/multisig.mv deleted file mode 100644 index d6cf08aed..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/worker_common/multisig.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/worker_common/multisig_store.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/worker_common/multisig_store.mv deleted file mode 100644 index 6759fc49a..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/worker_common/multisig_store.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/worker_common/worker_config.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/worker_common/worker_config.mv deleted file mode 100644 index 946004fde..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/worker_common/worker_config.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/dependencies/worker_common/worker_config_store.mv b/examples/oft-movement/build/oft/bytecode_modules/dependencies/worker_common/worker_config_store.mv deleted file mode 100644 index a9f23a2d3..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/dependencies/worker_common/worker_config_store.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/oapp_compose.mv b/examples/oft-movement/build/oft/bytecode_modules/oapp_compose.mv deleted file mode 100644 index c3cdd7319..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/oapp_compose.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/oapp_core.mv b/examples/oft-movement/build/oft/bytecode_modules/oapp_core.mv deleted file mode 100644 index 1339521e6..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/oapp_core.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/oapp_receive.mv b/examples/oft-movement/build/oft/bytecode_modules/oapp_receive.mv deleted file mode 100644 index 1d0cadb13..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/oapp_receive.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/oapp_store.mv b/examples/oft-movement/build/oft/bytecode_modules/oapp_store.mv deleted file mode 100644 index 11817cd8d..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/oapp_store.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/oft.mv b/examples/oft-movement/build/oft/bytecode_modules/oft.mv deleted file mode 100644 index 22d1ec17e..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/oft.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/oft_core.mv b/examples/oft-movement/build/oft/bytecode_modules/oft_core.mv deleted file mode 100644 index bcaac5bd5..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/oft_core.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/oft_impl.mv b/examples/oft-movement/build/oft/bytecode_modules/oft_impl.mv deleted file mode 100644 index dde76dae1..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/oft_impl.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/oft_impl_config.mv b/examples/oft-movement/build/oft/bytecode_modules/oft_impl_config.mv deleted file mode 100644 index 8e605204f..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/oft_impl_config.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/bytecode_modules/oft_store.mv b/examples/oft-movement/build/oft/bytecode_modules/oft_store.mv deleted file mode 100644 index beb5cef84..000000000 Binary files a/examples/oft-movement/build/oft/bytecode_modules/oft_store.mv and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/account.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/account.mvsm deleted file mode 100644 index 036d122fc..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/account.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/aggregator.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/aggregator.mvsm deleted file mode 100644 index 516d11921..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/aggregator.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/aggregator_factory.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/aggregator_factory.mvsm deleted file mode 100644 index 03b791984..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/aggregator_factory.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/aggregator_v2.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/aggregator_v2.mvsm deleted file mode 100644 index a52e96007..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/aggregator_v2.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/aptos_account.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/aptos_account.mvsm deleted file mode 100644 index 3929a6416..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/aptos_account.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/aptos_coin.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/aptos_coin.mvsm deleted file mode 100644 index d1c85b42e..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/aptos_coin.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/aptos_governance.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/aptos_governance.mvsm deleted file mode 100644 index 1fa3a2522..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/aptos_governance.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/block.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/block.mvsm deleted file mode 100644 index 1b7ecc535..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/block.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/chain_id.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/chain_id.mvsm deleted file mode 100644 index 6e18fd8b3..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/chain_id.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/chain_status.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/chain_status.mvsm deleted file mode 100644 index c4cabbb0d..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/chain_status.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/code.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/code.mvsm deleted file mode 100644 index 6e91e530d..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/code.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/coin.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/coin.mvsm deleted file mode 100644 index 7f88bb80c..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/coin.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/config_buffer.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/config_buffer.mvsm deleted file mode 100644 index 57e8281c0..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/config_buffer.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/consensus_config.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/consensus_config.mvsm deleted file mode 100644 index c3e9f28f0..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/consensus_config.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/create_signer.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/create_signer.mvsm deleted file mode 100644 index 7a9916141..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/create_signer.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/delegation_pool.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/delegation_pool.mvsm deleted file mode 100644 index 010980143..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/delegation_pool.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/dispatchable_fungible_asset.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/dispatchable_fungible_asset.mvsm deleted file mode 100644 index 4b46b9efb..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/dispatchable_fungible_asset.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/dkg.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/dkg.mvsm deleted file mode 100644 index 35d691f2a..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/dkg.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/event.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/event.mvsm deleted file mode 100644 index 543e303d4..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/event.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/execution_config.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/execution_config.mvsm deleted file mode 100644 index bf6d97011..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/execution_config.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/function_info.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/function_info.mvsm deleted file mode 100644 index dc0abcfbe..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/function_info.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/fungible_asset.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/fungible_asset.mvsm deleted file mode 100644 index 4fdd0fa68..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/fungible_asset.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/gas_schedule.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/gas_schedule.mvsm deleted file mode 100644 index 5ff0059ba..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/gas_schedule.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/genesis.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/genesis.mvsm deleted file mode 100644 index 21d188aa7..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/genesis.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/governance_proposal.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/governance_proposal.mvsm deleted file mode 100644 index 46c8c88b0..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/governance_proposal.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/guid.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/guid.mvsm deleted file mode 100644 index 93abdeba5..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/guid.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/jwk_consensus_config.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/jwk_consensus_config.mvsm deleted file mode 100644 index d15ce4686..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/jwk_consensus_config.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/jwks.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/jwks.mvsm deleted file mode 100644 index d57ff844b..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/jwks.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/keyless_account.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/keyless_account.mvsm deleted file mode 100644 index 9be0702dc..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/keyless_account.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/managed_coin.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/managed_coin.mvsm deleted file mode 100644 index 6e70a69d8..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/managed_coin.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/multisig_account.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/multisig_account.mvsm deleted file mode 100644 index 93a7d3a6c..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/multisig_account.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/object.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/object.mvsm deleted file mode 100644 index 7b93493b1..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/object.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/object_code_deployment.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/object_code_deployment.mvsm deleted file mode 100644 index e0cf77983..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/object_code_deployment.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/optional_aggregator.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/optional_aggregator.mvsm deleted file mode 100644 index aaf5a9246..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/optional_aggregator.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/primary_fungible_store.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/primary_fungible_store.mvsm deleted file mode 100644 index 5e9f9dd15..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/primary_fungible_store.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/randomness.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/randomness.mvsm deleted file mode 100644 index 3ef16362b..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/randomness.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/randomness_api_v0_config.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/randomness_api_v0_config.mvsm deleted file mode 100644 index 45023555a..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/randomness_api_v0_config.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/randomness_config.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/randomness_config.mvsm deleted file mode 100644 index 41bb598f0..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/randomness_config.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/randomness_config_seqnum.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/randomness_config_seqnum.mvsm deleted file mode 100644 index f3c50fe2c..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/randomness_config_seqnum.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/reconfiguration.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/reconfiguration.mvsm deleted file mode 100644 index 11608a594..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/reconfiguration.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/reconfiguration_state.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/reconfiguration_state.mvsm deleted file mode 100644 index 58cbbe95e..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/reconfiguration_state.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/reconfiguration_with_dkg.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/reconfiguration_with_dkg.mvsm deleted file mode 100644 index 7919d776c..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/reconfiguration_with_dkg.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/resource_account.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/resource_account.mvsm deleted file mode 100644 index 48c1998fb..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/resource_account.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/stake.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/stake.mvsm deleted file mode 100644 index f431e5194..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/stake.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/staking_config.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/staking_config.mvsm deleted file mode 100644 index 1bf3767f7..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/staking_config.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/staking_contract.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/staking_contract.mvsm deleted file mode 100644 index a9ca924c1..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/staking_contract.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/staking_proxy.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/staking_proxy.mvsm deleted file mode 100644 index b3fc9a655..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/staking_proxy.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/state_storage.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/state_storage.mvsm deleted file mode 100644 index eacd77622..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/state_storage.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/storage_gas.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/storage_gas.mvsm deleted file mode 100644 index f26b3d04e..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/storage_gas.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/system_addresses.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/system_addresses.mvsm deleted file mode 100644 index 4acd7ac99..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/system_addresses.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/timestamp.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/timestamp.mvsm deleted file mode 100644 index b8fd3ab0d..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/timestamp.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/transaction_context.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/transaction_context.mvsm deleted file mode 100644 index b82db56a9..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/transaction_context.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/transaction_fee.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/transaction_fee.mvsm deleted file mode 100644 index 77cd850bc..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/transaction_fee.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/transaction_validation.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/transaction_validation.mvsm deleted file mode 100644 index 18adac08c..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/transaction_validation.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/util.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/util.mvsm deleted file mode 100644 index 92a16e7c3..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/util.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/validator_consensus_info.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/validator_consensus_info.mvsm deleted file mode 100644 index 4fc7c3d6d..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/validator_consensus_info.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/version.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/version.mvsm deleted file mode 100644 index a998f0b0d..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/version.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/vesting.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/vesting.mvsm deleted file mode 100644 index a3d631d78..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/vesting.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/voting.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/voting.mvsm deleted file mode 100644 index cb83a8773..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/AptosFramework/voting.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/AptosStdlib/any.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/AptosStdlib/any.mvsm deleted file mode 100644 index fa7d96efa..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/AptosStdlib/any.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/AptosStdlib/aptos_hash.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/AptosStdlib/aptos_hash.mvsm deleted file mode 100644 index cab6ffa19..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/AptosStdlib/aptos_hash.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/AptosStdlib/big_vector.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/AptosStdlib/big_vector.mvsm deleted file mode 100644 index f98246fc9..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/AptosStdlib/big_vector.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/AptosStdlib/bls12381.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/AptosStdlib/bls12381.mvsm deleted file mode 100644 index 8fb97d272..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/AptosStdlib/bls12381.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/AptosStdlib/bls12381_algebra.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/AptosStdlib/bls12381_algebra.mvsm deleted file mode 100644 index cae1a0cdf..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/AptosStdlib/bls12381_algebra.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/AptosStdlib/bn254_algebra.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/AptosStdlib/bn254_algebra.mvsm deleted file mode 100644 index e945e95c1..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/AptosStdlib/bn254_algebra.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/AptosStdlib/capability.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/AptosStdlib/capability.mvsm deleted file mode 100644 index c43bf7ef1..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/AptosStdlib/capability.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/AptosStdlib/comparator.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/AptosStdlib/comparator.mvsm deleted file mode 100644 index 71e1422a3..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/AptosStdlib/comparator.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/AptosStdlib/copyable_any.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/AptosStdlib/copyable_any.mvsm deleted file mode 100644 index e027c6a61..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/AptosStdlib/copyable_any.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/AptosStdlib/crypto_algebra.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/AptosStdlib/crypto_algebra.mvsm deleted file mode 100644 index 9f4ad8c16..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/AptosStdlib/crypto_algebra.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/AptosStdlib/debug.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/AptosStdlib/debug.mvsm deleted file mode 100644 index b13356a5b..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/AptosStdlib/debug.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/AptosStdlib/ed25519.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/AptosStdlib/ed25519.mvsm deleted file mode 100644 index 970ba54a3..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/AptosStdlib/ed25519.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/AptosStdlib/fixed_point64.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/AptosStdlib/fixed_point64.mvsm deleted file mode 100644 index 487f0c16a..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/AptosStdlib/fixed_point64.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/AptosStdlib/from_bcs.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/AptosStdlib/from_bcs.mvsm deleted file mode 100644 index 5a2b3128c..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/AptosStdlib/from_bcs.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/AptosStdlib/math128.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/AptosStdlib/math128.mvsm deleted file mode 100644 index fd0613224..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/AptosStdlib/math128.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/AptosStdlib/math64.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/AptosStdlib/math64.mvsm deleted file mode 100644 index 273f011ba..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/AptosStdlib/math64.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/AptosStdlib/math_fixed.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/AptosStdlib/math_fixed.mvsm deleted file mode 100644 index 74a4b2dc0..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/AptosStdlib/math_fixed.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/AptosStdlib/math_fixed64.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/AptosStdlib/math_fixed64.mvsm deleted file mode 100644 index 6f19ab37b..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/AptosStdlib/math_fixed64.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/AptosStdlib/multi_ed25519.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/AptosStdlib/multi_ed25519.mvsm deleted file mode 100644 index 3104a1e7a..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/AptosStdlib/multi_ed25519.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/AptosStdlib/pool_u64.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/AptosStdlib/pool_u64.mvsm deleted file mode 100644 index e4aa85fb2..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/AptosStdlib/pool_u64.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/AptosStdlib/pool_u64_unbound.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/AptosStdlib/pool_u64_unbound.mvsm deleted file mode 100644 index 2f8d4d90a..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/AptosStdlib/pool_u64_unbound.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/AptosStdlib/ristretto255.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/AptosStdlib/ristretto255.mvsm deleted file mode 100644 index 688b58eca..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/AptosStdlib/ristretto255.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/AptosStdlib/ristretto255_bulletproofs.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/AptosStdlib/ristretto255_bulletproofs.mvsm deleted file mode 100644 index 841e4c942..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/AptosStdlib/ristretto255_bulletproofs.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/AptosStdlib/ristretto255_elgamal.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/AptosStdlib/ristretto255_elgamal.mvsm deleted file mode 100644 index 35b22e18a..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/AptosStdlib/ristretto255_elgamal.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/AptosStdlib/ristretto255_pedersen.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/AptosStdlib/ristretto255_pedersen.mvsm deleted file mode 100644 index c23ffd76e..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/AptosStdlib/ristretto255_pedersen.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/AptosStdlib/secp256k1.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/AptosStdlib/secp256k1.mvsm deleted file mode 100644 index 154ca97cd..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/AptosStdlib/secp256k1.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/AptosStdlib/simple_map.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/AptosStdlib/simple_map.mvsm deleted file mode 100644 index 7e0bd7a97..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/AptosStdlib/simple_map.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/AptosStdlib/smart_table.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/AptosStdlib/smart_table.mvsm deleted file mode 100644 index 168d039a5..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/AptosStdlib/smart_table.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/AptosStdlib/smart_vector.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/AptosStdlib/smart_vector.mvsm deleted file mode 100644 index 88c0e6df5..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/AptosStdlib/smart_vector.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/AptosStdlib/string_utils.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/AptosStdlib/string_utils.mvsm deleted file mode 100644 index edccddf67..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/AptosStdlib/string_utils.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/AptosStdlib/table.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/AptosStdlib/table.mvsm deleted file mode 100644 index b4213c14d..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/AptosStdlib/table.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/AptosStdlib/table_with_length.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/AptosStdlib/table_with_length.mvsm deleted file mode 100644 index ddf87b3ee..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/AptosStdlib/table_with_length.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/AptosStdlib/type_info.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/AptosStdlib/type_info.mvsm deleted file mode 100644 index f38263772..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/AptosStdlib/type_info.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/MoveStdlib/acl.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/MoveStdlib/acl.mvsm deleted file mode 100644 index 92f891786..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/MoveStdlib/acl.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/MoveStdlib/bcs.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/MoveStdlib/bcs.mvsm deleted file mode 100644 index 1128c6d41..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/MoveStdlib/bcs.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/MoveStdlib/bit_vector.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/MoveStdlib/bit_vector.mvsm deleted file mode 100644 index 4b21c9799..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/MoveStdlib/bit_vector.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/MoveStdlib/error.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/MoveStdlib/error.mvsm deleted file mode 100644 index 308789b9c..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/MoveStdlib/error.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/MoveStdlib/features.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/MoveStdlib/features.mvsm deleted file mode 100644 index 636760313..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/MoveStdlib/features.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/MoveStdlib/fixed_point32.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/MoveStdlib/fixed_point32.mvsm deleted file mode 100644 index ad2c995d1..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/MoveStdlib/fixed_point32.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/MoveStdlib/hash.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/MoveStdlib/hash.mvsm deleted file mode 100644 index 9ce46ed07..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/MoveStdlib/hash.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/MoveStdlib/mem.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/MoveStdlib/mem.mvsm deleted file mode 100644 index 63f015207..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/MoveStdlib/mem.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/MoveStdlib/option.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/MoveStdlib/option.mvsm deleted file mode 100644 index 877ab0bbb..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/MoveStdlib/option.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/MoveStdlib/signer.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/MoveStdlib/signer.mvsm deleted file mode 100644 index 0fe30a029..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/MoveStdlib/signer.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/MoveStdlib/string.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/MoveStdlib/string.mvsm deleted file mode 100644 index 6c8831610..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/MoveStdlib/string.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/MoveStdlib/vector.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/MoveStdlib/vector.mvsm deleted file mode 100644 index a98ed0e08..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/MoveStdlib/vector.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/blocked_msglib/router_calls.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/blocked_msglib/router_calls.mvsm deleted file mode 100644 index 1928d99f5..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/blocked_msglib/router_calls.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/dvn_fee_lib_0/dvn_fee_lib.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/dvn_fee_lib_0/dvn_fee_lib.mvsm deleted file mode 100644 index ff4aec5a6..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/dvn_fee_lib_0/dvn_fee_lib.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/dvn_fee_lib_router_0/dvn_fee_lib_router.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/dvn_fee_lib_router_0/dvn_fee_lib_router.mvsm deleted file mode 100644 index 76cf8a349..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/dvn_fee_lib_router_0/dvn_fee_lib_router.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/dvn_fee_lib_router_1/dvn_fee_lib_router.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/dvn_fee_lib_router_1/dvn_fee_lib_router.mvsm deleted file mode 100644 index 57744a61c..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/dvn_fee_lib_router_1/dvn_fee_lib_router.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/endpoint_v2/admin.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/endpoint_v2/admin.mvsm deleted file mode 100644 index c9656f5e2..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/endpoint_v2/admin.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/endpoint_v2/channels.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/endpoint_v2/channels.mvsm deleted file mode 100644 index bb549225f..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/endpoint_v2/channels.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/endpoint_v2/endpoint.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/endpoint_v2/endpoint.mvsm deleted file mode 100644 index e6340721f..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/endpoint_v2/endpoint.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/endpoint_v2/messaging_composer.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/endpoint_v2/messaging_composer.mvsm deleted file mode 100644 index d65b4ef50..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/endpoint_v2/messaging_composer.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/endpoint_v2/messaging_receipt.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/endpoint_v2/messaging_receipt.mvsm deleted file mode 100644 index 83f3fc573..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/endpoint_v2/messaging_receipt.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/endpoint_v2/msglib_manager.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/endpoint_v2/msglib_manager.mvsm deleted file mode 100644 index 9bc3999e3..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/endpoint_v2/msglib_manager.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/endpoint_v2/registration.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/endpoint_v2/registration.mvsm deleted file mode 100644 index f4145c7a0..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/endpoint_v2/registration.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/endpoint_v2/store.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/endpoint_v2/store.mvsm deleted file mode 100644 index 22fb3f148..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/endpoint_v2/store.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/endpoint_v2/timeout.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/endpoint_v2/timeout.mvsm deleted file mode 100644 index 1deff522a..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/endpoint_v2/timeout.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/endpoint_v2_common/assert_no_duplicates.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/endpoint_v2_common/assert_no_duplicates.mvsm deleted file mode 100644 index 9ea6a6cc1..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/endpoint_v2_common/assert_no_duplicates.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/endpoint_v2_common/bytes32.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/endpoint_v2_common/bytes32.mvsm deleted file mode 100644 index acd2f8618..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/endpoint_v2_common/bytes32.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/endpoint_v2_common/config_eid_tagged.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/endpoint_v2_common/config_eid_tagged.mvsm deleted file mode 100644 index 123d25aa3..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/endpoint_v2_common/config_eid_tagged.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/endpoint_v2_common/contract_identity.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/endpoint_v2_common/contract_identity.mvsm deleted file mode 100644 index 20d4662e0..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/endpoint_v2_common/contract_identity.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/endpoint_v2_common/guid.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/endpoint_v2_common/guid.mvsm deleted file mode 100644 index 3a2664b8a..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/endpoint_v2_common/guid.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/endpoint_v2_common/native_token.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/endpoint_v2_common/native_token.mvsm deleted file mode 100644 index b1808883b..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/endpoint_v2_common/native_token.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/endpoint_v2_common/native_token_fa.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/endpoint_v2_common/native_token_fa.mvsm deleted file mode 100644 index b0f1f5051..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/endpoint_v2_common/native_token_fa.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/endpoint_v2_common/packet_raw.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/endpoint_v2_common/packet_raw.mvsm deleted file mode 100644 index 7360612f1..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/endpoint_v2_common/packet_raw.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/endpoint_v2_common/packet_v1_codec.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/endpoint_v2_common/packet_v1_codec.mvsm deleted file mode 100644 index 386479a70..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/endpoint_v2_common/packet_v1_codec.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/endpoint_v2_common/send_packet.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/endpoint_v2_common/send_packet.mvsm deleted file mode 100644 index 1850bae1e..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/endpoint_v2_common/send_packet.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/endpoint_v2_common/serde.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/endpoint_v2_common/serde.mvsm deleted file mode 100644 index a6da5d31b..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/endpoint_v2_common/serde.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/endpoint_v2_common/universal_config.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/endpoint_v2_common/universal_config.mvsm deleted file mode 100644 index 324c2d397..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/endpoint_v2_common/universal_config.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/executor_fee_lib_0/executor_fee_lib.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/executor_fee_lib_0/executor_fee_lib.mvsm deleted file mode 100644 index 5b3c0ba22..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/executor_fee_lib_0/executor_fee_lib.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/executor_fee_lib_0/executor_option.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/executor_fee_lib_0/executor_option.mvsm deleted file mode 100644 index 6725aa5c0..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/executor_fee_lib_0/executor_option.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/executor_fee_lib_router_0/executor_fee_lib_router.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/executor_fee_lib_router_0/executor_fee_lib_router.mvsm deleted file mode 100644 index e7b146f6f..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/executor_fee_lib_router_0/executor_fee_lib_router.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/executor_fee_lib_router_1/executor_fee_lib_router.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/executor_fee_lib_router_1/executor_fee_lib_router.mvsm deleted file mode 100644 index e785b1ab9..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/executor_fee_lib_router_1/executor_fee_lib_router.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/msglib_types/configs_executor.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/msglib_types/configs_executor.mvsm deleted file mode 100644 index 461af1cdd..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/msglib_types/configs_executor.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/msglib_types/configs_uln.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/msglib_types/configs_uln.mvsm deleted file mode 100644 index 5825e01da..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/msglib_types/configs_uln.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/msglib_types/dvn_verify_params.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/msglib_types/dvn_verify_params.mvsm deleted file mode 100644 index b7d3aea54..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/msglib_types/dvn_verify_params.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/msglib_types/worker_options.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/msglib_types/worker_options.mvsm deleted file mode 100644 index 3356c246e..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/msglib_types/worker_options.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/oft_common/oft_compose_msg_codec.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/oft_common/oft_compose_msg_codec.mvsm deleted file mode 100644 index 5cab6f4cd..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/oft_common/oft_compose_msg_codec.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/oft_common/oft_fee_detail.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/oft_common/oft_fee_detail.mvsm deleted file mode 100644 index bd70a4be1..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/oft_common/oft_fee_detail.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/oft_common/oft_limit.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/oft_common/oft_limit.mvsm deleted file mode 100644 index 66f9bc57e..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/oft_common/oft_limit.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/oft_common/oft_msg_codec.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/oft_common/oft_msg_codec.mvsm deleted file mode 100644 index 93c557dfa..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/oft_common/oft_msg_codec.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/oft_common/oft_v1_msg_codec.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/oft_common/oft_v1_msg_codec.mvsm deleted file mode 100644 index 95b27e2de..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/oft_common/oft_v1_msg_codec.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/price_feed_module_0/eid_model_pair.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/price_feed_module_0/eid_model_pair.mvsm deleted file mode 100644 index 2c4b4e6f2..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/price_feed_module_0/eid_model_pair.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/price_feed_module_0/feeds.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/price_feed_module_0/feeds.mvsm deleted file mode 100644 index 4e4e449cd..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/price_feed_module_0/feeds.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/price_feed_module_0/price.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/price_feed_module_0/price.mvsm deleted file mode 100644 index eae539720..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/price_feed_module_0/price.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/price_feed_router_0/router.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/price_feed_router_0/router.mvsm deleted file mode 100644 index c2d6d2a47..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/price_feed_router_0/router.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/price_feed_router_1/router.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/price_feed_router_1/router.mvsm deleted file mode 100644 index 4f309333b..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/price_feed_router_1/router.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/router_node_0/router_node.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/router_node_0/router_node.mvsm deleted file mode 100644 index 313252edd..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/router_node_0/router_node.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/router_node_1/router_node.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/router_node_1/router_node.mvsm deleted file mode 100644 index ec8527b45..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/router_node_1/router_node.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/simple_msglib/msglib.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/simple_msglib/msglib.mvsm deleted file mode 100644 index d9c41a0e3..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/simple_msglib/msglib.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/simple_msglib/router_calls.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/simple_msglib/router_calls.mvsm deleted file mode 100644 index f6cb75797..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/simple_msglib/router_calls.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/treasury/treasury.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/treasury/treasury.mvsm deleted file mode 100644 index b2f0fe89f..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/treasury/treasury.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/uln_302/admin.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/uln_302/admin.mvsm deleted file mode 100644 index 70e448e4a..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/uln_302/admin.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/uln_302/assert_valid_default_uln_config.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/uln_302/assert_valid_default_uln_config.mvsm deleted file mode 100644 index 6ac6e5da1..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/uln_302/assert_valid_default_uln_config.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/uln_302/assert_valid_uln_config.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/uln_302/assert_valid_uln_config.mvsm deleted file mode 100644 index 8a951c36c..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/uln_302/assert_valid_uln_config.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/uln_302/configuration.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/uln_302/configuration.mvsm deleted file mode 100644 index 97e614c54..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/uln_302/configuration.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/uln_302/for_each_dvn.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/uln_302/for_each_dvn.mvsm deleted file mode 100644 index 30facc071..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/uln_302/for_each_dvn.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/uln_302/msglib.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/uln_302/msglib.mvsm deleted file mode 100644 index e684a5d99..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/uln_302/msglib.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/uln_302/router_calls.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/uln_302/router_calls.mvsm deleted file mode 100644 index 8f6dd82ba..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/uln_302/router_calls.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/uln_302/sending.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/uln_302/sending.mvsm deleted file mode 100644 index 73b8f9a2a..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/uln_302/sending.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/uln_302/uln_302_store.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/uln_302/uln_302_store.mvsm deleted file mode 100644 index 9330d42c8..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/uln_302/uln_302_store.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/uln_302/verification.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/uln_302/verification.mvsm deleted file mode 100644 index 8e73e01ab..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/uln_302/verification.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/worker_common/multisig.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/worker_common/multisig.mvsm deleted file mode 100644 index f6e8543ed..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/worker_common/multisig.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/worker_common/multisig_store.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/worker_common/multisig_store.mvsm deleted file mode 100644 index 8c6b045be..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/worker_common/multisig_store.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/worker_common/worker_config.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/worker_common/worker_config.mvsm deleted file mode 100644 index 6eac7ca7c..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/worker_common/worker_config.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/dependencies/worker_common/worker_config_store.mvsm b/examples/oft-movement/build/oft/source_maps/dependencies/worker_common/worker_config_store.mvsm deleted file mode 100644 index d4dca62ab..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/dependencies/worker_common/worker_config_store.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/oapp_compose.mvsm b/examples/oft-movement/build/oft/source_maps/oapp_compose.mvsm deleted file mode 100644 index 365c73170..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/oapp_compose.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/oapp_core.mvsm b/examples/oft-movement/build/oft/source_maps/oapp_core.mvsm deleted file mode 100644 index 4981e19d5..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/oapp_core.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/oapp_receive.mvsm b/examples/oft-movement/build/oft/source_maps/oapp_receive.mvsm deleted file mode 100644 index 59899c2dc..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/oapp_receive.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/oapp_store.mvsm b/examples/oft-movement/build/oft/source_maps/oapp_store.mvsm deleted file mode 100644 index a52bd81a1..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/oapp_store.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/oft.mvsm b/examples/oft-movement/build/oft/source_maps/oft.mvsm deleted file mode 100644 index 5215f3a9d..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/oft.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/oft_core.mvsm b/examples/oft-movement/build/oft/source_maps/oft_core.mvsm deleted file mode 100644 index 6968280ef..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/oft_core.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/oft_impl.mvsm b/examples/oft-movement/build/oft/source_maps/oft_impl.mvsm deleted file mode 100644 index 5278a9a54..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/oft_impl.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/oft_impl_config.mvsm b/examples/oft-movement/build/oft/source_maps/oft_impl_config.mvsm deleted file mode 100644 index 40bf02c60..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/oft_impl_config.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/source_maps/oft_store.mvsm b/examples/oft-movement/build/oft/source_maps/oft_store.mvsm deleted file mode 100644 index 90e896fd6..000000000 Binary files a/examples/oft-movement/build/oft/source_maps/oft_store.mvsm and /dev/null differ diff --git a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/account.move b/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/account.move deleted file mode 100644 index 744ffa188..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/account.move +++ /dev/null @@ -1,1603 +0,0 @@ -module aptos_framework::account { - use std::bcs; - use std::error; - use std::hash; - use std::option::{Self, Option}; - use std::signer; - use std::vector; - use aptos_framework::chain_id; - use aptos_framework::create_signer::create_signer; - use aptos_framework::event::{Self, EventHandle}; - use aptos_framework::guid; - use aptos_framework::system_addresses; - use aptos_std::ed25519; - use aptos_std::from_bcs; - use aptos_std::multi_ed25519; - use aptos_std::table::{Self, Table}; - use aptos_std::type_info::{Self, TypeInfo}; - - friend aptos_framework::aptos_account; - friend aptos_framework::coin; - friend aptos_framework::genesis; - friend aptos_framework::multisig_account; - friend aptos_framework::resource_account; - friend aptos_framework::transaction_validation; - - #[event] - struct KeyRotation has drop, store { - account: address, - old_authentication_key: vector, - new_authentication_key: vector, - } - - /// Resource representing an account. - struct Account has key, store { - authentication_key: vector, - sequence_number: u64, - guid_creation_num: u64, - coin_register_events: EventHandle, - key_rotation_events: EventHandle, - rotation_capability_offer: CapabilityOffer, - signer_capability_offer: CapabilityOffer, - } - - struct KeyRotationEvent has drop, store { - old_authentication_key: vector, - new_authentication_key: vector, - } - - struct CoinRegisterEvent has drop, store { - type_info: TypeInfo, - } - - #[event] - struct CoinRegister has drop, store { - account: address, - type_info: TypeInfo, - } - - struct CapabilityOffer has store { for: Option
} - - struct RotationCapability has drop, store { account: address } - - struct SignerCapability has drop, store { account: address } - - /// It is easy to fetch the authentication key of an address by simply reading it from the `Account` struct at that address. - /// The table in this struct makes it possible to do a reverse lookup: it maps an authentication key, to the address of the account which has that authentication key set. - /// - /// This mapping is needed when recovering wallets for accounts whose authentication key has been rotated. - /// - /// For example, imagine a freshly-created wallet with address `a` and thus also with authentication key `a`, derived from a PK `pk_a` with corresponding SK `sk_a`. - /// It is easy to recover such a wallet given just the secret key `sk_a`, since the PK can be derived from the SK, the authentication key can then be derived from the PK, and the address equals the authentication key (since there was no key rotation). - /// - /// However, if such a wallet rotates its authentication key to `b` derived from a different PK `pk_b` with SK `sk_b`, how would account recovery work? - /// The recovered address would no longer be 'a'; it would be `b`, which is incorrect. - /// This struct solves this problem by mapping the new authentication key `b` to the original address `a` and thus helping the wallet software during recovery find the correct address. - struct OriginatingAddress has key { - address_map: Table, - } - - /// This structs stores the challenge message that should be signed during key rotation. First, this struct is - /// signed by the account owner's current public key, which proves possession of a capability to rotate the key. - /// Second, this struct is signed by the new public key that the account owner wants to rotate to, which proves - /// knowledge of this new public key's associated secret key. These two signatures cannot be replayed in another - /// context because they include the TXN's unique sequence number. - struct RotationProofChallenge has copy, drop { - sequence_number: u64, - // the sequence number of the account whose key is being rotated - originator: address, - // the address of the account whose key is being rotated - current_auth_key: address, - // the current authentication key of the account whose key is being rotated - new_public_key: vector, - // the new public key that the account owner wants to rotate to - } - - /// Deprecated struct - newest version is `RotationCapabilityOfferProofChallengeV2` - struct RotationCapabilityOfferProofChallenge has drop { - sequence_number: u64, - recipient_address: address, - } - - /// Deprecated struct - newest version is `SignerCapabilityOfferProofChallengeV2` - struct SignerCapabilityOfferProofChallenge has drop { - sequence_number: u64, - recipient_address: address, - } - - /// This struct stores the challenge message that should be signed by the source account, when the source account - /// is delegating its rotation capability to the `recipient_address`. - /// This V2 struct adds the `chain_id` and `source_address` to the challenge message, which prevents replaying the challenge message. - struct RotationCapabilityOfferProofChallengeV2 has drop { - chain_id: u8, - sequence_number: u64, - source_address: address, - recipient_address: address, - } - - struct SignerCapabilityOfferProofChallengeV2 has copy, drop { - sequence_number: u64, - source_address: address, - recipient_address: address, - } - - const MAX_U64: u128 = 18446744073709551615; - const ZERO_AUTH_KEY: vector = x"0000000000000000000000000000000000000000000000000000000000000000"; - - /// Scheme identifier for Ed25519 signatures used to derive authentication keys for Ed25519 public keys. - const ED25519_SCHEME: u8 = 0; - /// Scheme identifier for MultiEd25519 signatures used to derive authentication keys for MultiEd25519 public keys. - const MULTI_ED25519_SCHEME: u8 = 1; - /// Scheme identifier used when hashing an account's address together with a seed to derive the address (not the - /// authentication key) of a resource account. This is an abuse of the notion of a scheme identifier which, for now, - /// serves to domain separate hashes used to derive resource account addresses from hashes used to derive - /// authentication keys. Without such separation, an adversary could create (and get a signer for) a resource account - /// whose address matches an existing address of a MultiEd25519 wallet. - const DERIVE_RESOURCE_ACCOUNT_SCHEME: u8 = 255; - - /// Account already exists - const EACCOUNT_ALREADY_EXISTS: u64 = 1; - /// Account does not exist - const EACCOUNT_DOES_NOT_EXIST: u64 = 2; - /// Sequence number exceeds the maximum value for a u64 - const ESEQUENCE_NUMBER_TOO_BIG: u64 = 3; - /// The provided authentication key has an invalid length - const EMALFORMED_AUTHENTICATION_KEY: u64 = 4; - /// Cannot create account because address is reserved - const ECANNOT_RESERVED_ADDRESS: u64 = 5; - /// Transaction exceeded its allocated max gas - const EOUT_OF_GAS: u64 = 6; - /// Specified current public key is not correct - const EWRONG_CURRENT_PUBLIC_KEY: u64 = 7; - /// Specified proof of knowledge required to prove ownership of a public key is invalid - const EINVALID_PROOF_OF_KNOWLEDGE: u64 = 8; - /// The caller does not have a digital-signature-based capability to call this function - const ENO_CAPABILITY: u64 = 9; - /// The caller does not have a valid rotation capability offer from the other account - const EINVALID_ACCEPT_ROTATION_CAPABILITY: u64 = 10; - /// Address to create is not a valid reserved address for Aptos framework - const ENO_VALID_FRAMEWORK_RESERVED_ADDRESS: u64 = 11; - /// Specified scheme required to proceed with the smart contract operation - can only be ED25519_SCHEME(0) OR MULTI_ED25519_SCHEME(1) - const EINVALID_SCHEME: u64 = 12; - /// Abort the transaction if the expected originating address is different from the originating address on-chain - const EINVALID_ORIGINATING_ADDRESS: u64 = 13; - /// The signer capability offer doesn't exist at the given address - const ENO_SUCH_SIGNER_CAPABILITY: u64 = 14; - /// An attempt to create a resource account on a claimed account - const ERESOURCE_ACCCOUNT_EXISTS: u64 = 15; - /// An attempt to create a resource account on an account that has a committed transaction - const EACCOUNT_ALREADY_USED: u64 = 16; - /// Offerer address doesn't exist - const EOFFERER_ADDRESS_DOES_NOT_EXIST: u64 = 17; - /// The specified rotation capability offer does not exist at the specified offerer address - const ENO_SUCH_ROTATION_CAPABILITY_OFFER: u64 = 18; - // The signer capability is not offered to any address - const ENO_SIGNER_CAPABILITY_OFFERED: u64 = 19; - // This account has exceeded the allocated GUIDs it can create. It should be impossible to reach this number for real applications. - const EEXCEEDED_MAX_GUID_CREATION_NUM: u64 = 20; - /// The new authentication key already has an entry in the `OriginatingAddress` table - const ENEW_AUTH_KEY_ALREADY_MAPPED: u64 = 21; - /// The current authentication key and the new authentication key are the same - const ENEW_AUTH_KEY_SAME_AS_CURRENT: u64 = 22; - - /// Explicitly separate the GUID space between Object and Account to prevent accidental overlap. - const MAX_GUID_CREATION_NUM: u64 = 0x4000000000000; - - #[test_only] - /// Create signer for testing, independently of an Aptos-style `Account`. - public fun create_signer_for_test(addr: address): signer { create_signer(addr) } - - /// Only called during genesis to initialize system resources for this module. - public(friend) fun initialize(aptos_framework: &signer) { - system_addresses::assert_aptos_framework(aptos_framework); - move_to(aptos_framework, OriginatingAddress { - address_map: table::new(), - }); - } - - public fun create_account_if_does_not_exist(account_address: address) { - if (!exists(account_address)) { - create_account(account_address); - } - } - - /// Publishes a new `Account` resource under `new_address`. A signer representing `new_address` - /// is returned. This way, the caller of this function can publish additional resources under - /// `new_address`. - public(friend) fun create_account(new_address: address): signer { - // there cannot be an Account resource under new_addr already. - assert!(!exists(new_address), error::already_exists(EACCOUNT_ALREADY_EXISTS)); - - // NOTE: @core_resources gets created via a `create_account` call, so we do not include it below. - assert!( - new_address != @vm_reserved && new_address != @aptos_framework && new_address != @aptos_token, - error::invalid_argument(ECANNOT_RESERVED_ADDRESS) - ); - - create_account_unchecked(new_address) - } - - fun create_account_unchecked(new_address: address): signer { - let new_account = create_signer(new_address); - let authentication_key = bcs::to_bytes(&new_address); - assert!( - vector::length(&authentication_key) == 32, - error::invalid_argument(EMALFORMED_AUTHENTICATION_KEY) - ); - - let guid_creation_num = 0; - - let guid_for_coin = guid::create(new_address, &mut guid_creation_num); - let coin_register_events = event::new_event_handle(guid_for_coin); - - let guid_for_rotation = guid::create(new_address, &mut guid_creation_num); - let key_rotation_events = event::new_event_handle(guid_for_rotation); - - move_to( - &new_account, - Account { - authentication_key, - sequence_number: 0, - guid_creation_num, - coin_register_events, - key_rotation_events, - rotation_capability_offer: CapabilityOffer { for: option::none() }, - signer_capability_offer: CapabilityOffer { for: option::none() }, - } - ); - - new_account - } - - #[view] - public fun exists_at(addr: address): bool { - exists(addr) - } - - #[view] - public fun get_guid_next_creation_num(addr: address): u64 acquires Account { - borrow_global(addr).guid_creation_num - } - - #[view] - public fun get_sequence_number(addr: address): u64 acquires Account { - borrow_global(addr).sequence_number - } - - #[view] - public fun originating_address(auth_key: address): Option
acquires OriginatingAddress { - let address_map_ref = &borrow_global(@aptos_framework).address_map; - if (table::contains(address_map_ref, auth_key)) { - option::some(*table::borrow(address_map_ref, auth_key)) - } else { - option::none() - } - } - - public(friend) fun increment_sequence_number(addr: address) acquires Account { - let sequence_number = &mut borrow_global_mut(addr).sequence_number; - - assert!( - (*sequence_number as u128) < MAX_U64, - error::out_of_range(ESEQUENCE_NUMBER_TOO_BIG) - ); - - *sequence_number = *sequence_number + 1; - } - - #[view] - public fun get_authentication_key(addr: address): vector acquires Account { - borrow_global(addr).authentication_key - } - - /// This function is used to rotate a resource account's authentication key to `new_auth_key`. This is done in - /// many contexts: - /// 1. During normal key rotation via `rotate_authentication_key` or `rotate_authentication_key_call` - /// 2. During resource account initialization so that no private key can control the resource account - /// 3. During multisig_v2 account creation - public(friend) fun rotate_authentication_key_internal(account: &signer, new_auth_key: vector) acquires Account { - let addr = signer::address_of(account); - assert!(exists_at(addr), error::not_found(EACCOUNT_DOES_NOT_EXIST)); - assert!( - vector::length(&new_auth_key) == 32, - error::invalid_argument(EMALFORMED_AUTHENTICATION_KEY) - ); - let account_resource = borrow_global_mut(addr); - account_resource.authentication_key = new_auth_key; - } - - /// Private entry function for key rotation that allows the signer to update their authentication key. - /// Note that this does not update the `OriginatingAddress` table because the `new_auth_key` is not "verified": it - /// does not come with a proof-of-knowledge of the underlying SK. Nonetheless, we need this functionality due to - /// the introduction of non-standard key algorithms, such as passkeys, which cannot produce proofs-of-knowledge in - /// the format expected in `rotate_authentication_key`. - /// - /// If you'd like to followup with updating the `OriginatingAddress` table, you can call - /// `set_originating_address()`. - entry fun rotate_authentication_key_call(account: &signer, new_auth_key: vector) acquires Account { - rotate_authentication_key_internal(account, new_auth_key); - } - - /// Generic authentication key rotation function that allows the user to rotate their authentication key from any scheme to any scheme. - /// To authorize the rotation, we need two signatures: - /// - the first signature `cap_rotate_key` refers to the signature by the account owner's current key on a valid `RotationProofChallenge`, - /// demonstrating that the user intends to and has the capability to rotate the authentication key of this account; - /// - the second signature `cap_update_table` refers to the signature by the new key (that the account owner wants to rotate to) on a - /// valid `RotationProofChallenge`, demonstrating that the user owns the new private key, and has the authority to update the - /// `OriginatingAddress` map with the new address mapping ``. - /// To verify these two signatures, we need their corresponding public key and public key scheme: we use `from_scheme` and `from_public_key_bytes` - /// to verify `cap_rotate_key`, and `to_scheme` and `to_public_key_bytes` to verify `cap_update_table`. - /// A scheme of 0 refers to an Ed25519 key and a scheme of 1 refers to Multi-Ed25519 keys. - /// `originating address` refers to an account's original/first address. - /// - /// Here is an example attack if we don't ask for the second signature `cap_update_table`: - /// Alice has rotated her account `addr_a` to `new_addr_a`. As a result, the following entry is created, to help Alice when recovering her wallet: - /// `OriginatingAddress[new_addr_a]` -> `addr_a` - /// Alice has had a bad day: her laptop blew up and she needs to reset her account on a new one. - /// (Fortunately, she still has her secret key `new_sk_a` associated with her new address `new_addr_a`, so she can do this.) - /// - /// But Bob likes to mess with Alice. - /// Bob creates an account `addr_b` and maliciously rotates it to Alice's new address `new_addr_a`. Since we are no longer checking a PoK, - /// Bob can easily do this. - /// - /// Now, the table will be updated to make Alice's new address point to Bob's address: `OriginatingAddress[new_addr_a]` -> `addr_b`. - /// When Alice recovers her account, her wallet will display the attacker's address (Bob's) `addr_b` as her address. - /// Now Alice will give `addr_b` to everyone to pay her, but the money will go to Bob. - /// - /// Because we ask for a valid `cap_update_table`, this kind of attack is not possible. Bob would not have the secret key of Alice's address - /// to rotate his address to Alice's address in the first place. - public entry fun rotate_authentication_key( - account: &signer, - from_scheme: u8, - from_public_key_bytes: vector, - to_scheme: u8, - to_public_key_bytes: vector, - cap_rotate_key: vector, - cap_update_table: vector, - ) acquires Account, OriginatingAddress { - let addr = signer::address_of(account); - assert!(exists_at(addr), error::not_found(EACCOUNT_DOES_NOT_EXIST)); - let account_resource = borrow_global_mut(addr); - - // Verify the given `from_public_key_bytes` matches this account's current authentication key. - if (from_scheme == ED25519_SCHEME) { - let from_pk = ed25519::new_unvalidated_public_key_from_bytes(from_public_key_bytes); - let from_auth_key = ed25519::unvalidated_public_key_to_authentication_key(&from_pk); - assert!( - account_resource.authentication_key == from_auth_key, - error::unauthenticated(EWRONG_CURRENT_PUBLIC_KEY) - ); - } else if (from_scheme == MULTI_ED25519_SCHEME) { - let from_pk = multi_ed25519::new_unvalidated_public_key_from_bytes(from_public_key_bytes); - let from_auth_key = multi_ed25519::unvalidated_public_key_to_authentication_key(&from_pk); - assert!( - account_resource.authentication_key == from_auth_key, - error::unauthenticated(EWRONG_CURRENT_PUBLIC_KEY) - ); - } else { - abort error::invalid_argument(EINVALID_SCHEME) - }; - - // Construct a valid `RotationProofChallenge` that `cap_rotate_key` and `cap_update_table` will validate against. - let curr_auth_key_as_address = from_bcs::to_address(account_resource.authentication_key); - let challenge = RotationProofChallenge { - sequence_number: account_resource.sequence_number, - originator: addr, - current_auth_key: curr_auth_key_as_address, - new_public_key: to_public_key_bytes, - }; - - // Assert the challenges signed by the current and new keys are valid - assert_valid_rotation_proof_signature_and_get_auth_key( - from_scheme, - from_public_key_bytes, - cap_rotate_key, - &challenge - ); - let new_auth_key = assert_valid_rotation_proof_signature_and_get_auth_key( - to_scheme, - to_public_key_bytes, - cap_update_table, - &challenge - ); - - // Update the `OriginatingAddress` table. - update_auth_key_and_originating_address_table(addr, account_resource, new_auth_key); - } - - public entry fun rotate_authentication_key_with_rotation_capability( - delegate_signer: &signer, - rotation_cap_offerer_address: address, - new_scheme: u8, - new_public_key_bytes: vector, - cap_update_table: vector - ) acquires Account, OriginatingAddress { - assert!(exists_at(rotation_cap_offerer_address), error::not_found(EOFFERER_ADDRESS_DOES_NOT_EXIST)); - - // Check that there exists a rotation capability offer at the offerer's account resource for the delegate. - let delegate_address = signer::address_of(delegate_signer); - let offerer_account_resource = borrow_global(rotation_cap_offerer_address); - assert!( - option::contains(&offerer_account_resource.rotation_capability_offer.for, &delegate_address), - error::not_found(ENO_SUCH_ROTATION_CAPABILITY_OFFER) - ); - - let curr_auth_key = from_bcs::to_address(offerer_account_resource.authentication_key); - let challenge = RotationProofChallenge { - sequence_number: get_sequence_number(delegate_address), - originator: rotation_cap_offerer_address, - current_auth_key: curr_auth_key, - new_public_key: new_public_key_bytes, - }; - - // Verifies that the `RotationProofChallenge` from above is signed under the new public key that we are rotating to. l - let new_auth_key = assert_valid_rotation_proof_signature_and_get_auth_key( - new_scheme, - new_public_key_bytes, - cap_update_table, - &challenge - ); - - // Update the `OriginatingAddress` table, so we can find the originating address using the new address. - let offerer_account_resource = borrow_global_mut(rotation_cap_offerer_address); - update_auth_key_and_originating_address_table( - rotation_cap_offerer_address, - offerer_account_resource, - new_auth_key - ); - } - - /// Offers rotation capability on behalf of `account` to the account at address `recipient_address`. - /// An account can delegate its rotation capability to only one other address at one time. If the account - /// has an existing rotation capability offer, calling this function will update the rotation capability offer with - /// the new `recipient_address`. - /// Here, `rotation_capability_sig_bytes` signature indicates that this key rotation is authorized by the account owner, - /// and prevents the classic "time-of-check time-of-use" attack. - /// For example, users usually rely on what the wallet displays to them as the transaction's outcome. Consider a contract that with 50% probability - /// (based on the current timestamp in Move), rotates somebody's key. The wallet might be unlucky and get an outcome where nothing is rotated, - /// incorrectly telling the user nothing bad will happen. But when the transaction actually gets executed, the attacker gets lucky and - /// the execution path triggers the account key rotation. - /// We prevent such attacks by asking for this extra signature authorizing the key rotation. - /// - /// @param rotation_capability_sig_bytes is the signature by the account owner's key on `RotationCapabilityOfferProofChallengeV2`. - /// @param account_scheme is the scheme of the account (ed25519 or multi_ed25519). - /// @param account_public_key_bytes is the public key of the account owner. - /// @param recipient_address is the address of the recipient of the rotation capability - note that if there's an existing rotation capability - /// offer, calling this function will replace the previous `recipient_address` upon successful verification. - public entry fun offer_rotation_capability( - account: &signer, - rotation_capability_sig_bytes: vector, - account_scheme: u8, - account_public_key_bytes: vector, - recipient_address: address, - ) acquires Account { - let addr = signer::address_of(account); - assert!(exists_at(recipient_address), error::not_found(EACCOUNT_DOES_NOT_EXIST)); - - // proof that this account intends to delegate its rotation capability to another account - let account_resource = borrow_global_mut(addr); - let proof_challenge = RotationCapabilityOfferProofChallengeV2 { - chain_id: chain_id::get(), - sequence_number: account_resource.sequence_number, - source_address: addr, - recipient_address, - }; - - // verify the signature on `RotationCapabilityOfferProofChallengeV2` by the account owner - if (account_scheme == ED25519_SCHEME) { - let pubkey = ed25519::new_unvalidated_public_key_from_bytes(account_public_key_bytes); - let expected_auth_key = ed25519::unvalidated_public_key_to_authentication_key(&pubkey); - assert!( - account_resource.authentication_key == expected_auth_key, - error::invalid_argument(EWRONG_CURRENT_PUBLIC_KEY) - ); - - let rotation_capability_sig = ed25519::new_signature_from_bytes(rotation_capability_sig_bytes); - assert!( - ed25519::signature_verify_strict_t(&rotation_capability_sig, &pubkey, proof_challenge), - error::invalid_argument(EINVALID_PROOF_OF_KNOWLEDGE) - ); - } else if (account_scheme == MULTI_ED25519_SCHEME) { - let pubkey = multi_ed25519::new_unvalidated_public_key_from_bytes(account_public_key_bytes); - let expected_auth_key = multi_ed25519::unvalidated_public_key_to_authentication_key(&pubkey); - assert!( - account_resource.authentication_key == expected_auth_key, - error::invalid_argument(EWRONG_CURRENT_PUBLIC_KEY) - ); - - let rotation_capability_sig = multi_ed25519::new_signature_from_bytes(rotation_capability_sig_bytes); - assert!( - multi_ed25519::signature_verify_strict_t(&rotation_capability_sig, &pubkey, proof_challenge), - error::invalid_argument(EINVALID_PROOF_OF_KNOWLEDGE) - ); - } else { - abort error::invalid_argument(EINVALID_SCHEME) - }; - - // update the existing rotation capability offer or put in a new rotation capability offer for the current account - option::swap_or_fill(&mut account_resource.rotation_capability_offer.for, recipient_address); - } - - /// For the given account, add an entry to `OriginatingAddress` table mapping the account's - /// authentication key to the account's address. - /// - /// Can be used as a followup to `rotate_authentication_key_call()` to reconcile the - /// `OriginatingAddress` table, or to establish a mapping for a new account that has not yet had - /// its authentication key rotated. - /// - /// Aborts if there is already an entry in the `OriginatingAddress` table for the account's - /// authentication key. - /// - /// Kept as a private entry function to ensure that after an unproven rotation via - /// `rotate_authentication_key_call()`, the `OriginatingAddress` table is only updated under the - /// authority of the new authentication key. - entry fun set_originating_address(account: &signer) acquires Account, OriginatingAddress { - let account_addr = signer::address_of(account); - assert!(exists(account_addr), error::not_found(EACCOUNT_DOES_NOT_EXIST)); - let auth_key_as_address = - from_bcs::to_address(borrow_global(account_addr).authentication_key); - let address_map_ref_mut = - &mut borrow_global_mut(@aptos_framework).address_map; - if (table::contains(address_map_ref_mut, auth_key_as_address)) { - assert!( - *table::borrow(address_map_ref_mut, auth_key_as_address) == account_addr, - error::invalid_argument(ENEW_AUTH_KEY_ALREADY_MAPPED) - ); - } else { - table::add(address_map_ref_mut, auth_key_as_address, account_addr); - }; - } - - #[view] - /// Returns true if the account at `account_addr` has a rotation capability offer. - public fun is_rotation_capability_offered(account_addr: address): bool acquires Account { - let account_resource = borrow_global(account_addr); - option::is_some(&account_resource.rotation_capability_offer.for) - } - - #[view] - /// Returns the address of the account that has a rotation capability offer from the account at `account_addr`. - public fun get_rotation_capability_offer_for(account_addr: address): address acquires Account { - let account_resource = borrow_global(account_addr); - assert!( - option::is_some(&account_resource.rotation_capability_offer.for), - error::not_found(ENO_SIGNER_CAPABILITY_OFFERED), - ); - *option::borrow(&account_resource.rotation_capability_offer.for) - } - - /// Revoke the rotation capability offer given to `to_be_revoked_recipient_address` from `account` - public entry fun revoke_rotation_capability(account: &signer, to_be_revoked_address: address) acquires Account { - assert!(exists_at(to_be_revoked_address), error::not_found(EACCOUNT_DOES_NOT_EXIST)); - let addr = signer::address_of(account); - let account_resource = borrow_global(addr); - assert!( - option::contains(&account_resource.rotation_capability_offer.for, &to_be_revoked_address), - error::not_found(ENO_SUCH_ROTATION_CAPABILITY_OFFER) - ); - revoke_any_rotation_capability(account); - } - - /// Revoke any rotation capability offer in the specified account. - public entry fun revoke_any_rotation_capability(account: &signer) acquires Account { - let account_resource = borrow_global_mut(signer::address_of(account)); - option::extract(&mut account_resource.rotation_capability_offer.for); - } - - /// Offers signer capability on behalf of `account` to the account at address `recipient_address`. - /// An account can delegate its signer capability to only one other address at one time. - /// `signer_capability_key_bytes` is the `SignerCapabilityOfferProofChallengeV2` signed by the account owner's key - /// `account_scheme` is the scheme of the account (ed25519 or multi_ed25519). - /// `account_public_key_bytes` is the public key of the account owner. - /// `recipient_address` is the address of the recipient of the signer capability - note that if there's an existing - /// `recipient_address` in the account owner's `SignerCapabilityOffer`, this will replace the - /// previous `recipient_address` upon successful verification (the previous recipient will no longer have access - /// to the account owner's signer capability). - public entry fun offer_signer_capability( - account: &signer, - signer_capability_sig_bytes: vector, - account_scheme: u8, - account_public_key_bytes: vector, - recipient_address: address - ) acquires Account { - let source_address = signer::address_of(account); - assert!(exists_at(recipient_address), error::not_found(EACCOUNT_DOES_NOT_EXIST)); - - // Proof that this account intends to delegate its signer capability to another account. - let proof_challenge = SignerCapabilityOfferProofChallengeV2 { - sequence_number: get_sequence_number(source_address), - source_address, - recipient_address, - }; - verify_signed_message( - source_address, account_scheme, account_public_key_bytes, signer_capability_sig_bytes, proof_challenge); - - // Update the existing signer capability offer or put in a new signer capability offer for the recipient. - let account_resource = borrow_global_mut(source_address); - option::swap_or_fill(&mut account_resource.signer_capability_offer.for, recipient_address); - } - - #[view] - /// Returns true if the account at `account_addr` has a signer capability offer. - public fun is_signer_capability_offered(account_addr: address): bool acquires Account { - let account_resource = borrow_global(account_addr); - option::is_some(&account_resource.signer_capability_offer.for) - } - - #[view] - /// Returns the address of the account that has a signer capability offer from the account at `account_addr`. - public fun get_signer_capability_offer_for(account_addr: address): address acquires Account { - let account_resource = borrow_global(account_addr); - assert!( - option::is_some(&account_resource.signer_capability_offer.for), - error::not_found(ENO_SIGNER_CAPABILITY_OFFERED), - ); - *option::borrow(&account_resource.signer_capability_offer.for) - } - - /// Revoke the account owner's signer capability offer for `to_be_revoked_address` (i.e., the address that - /// has a signer capability offer from `account` but will be revoked in this function). - public entry fun revoke_signer_capability(account: &signer, to_be_revoked_address: address) acquires Account { - assert!(exists_at(to_be_revoked_address), error::not_found(EACCOUNT_DOES_NOT_EXIST)); - let addr = signer::address_of(account); - let account_resource = borrow_global(addr); - assert!( - option::contains(&account_resource.signer_capability_offer.for, &to_be_revoked_address), - error::not_found(ENO_SUCH_SIGNER_CAPABILITY) - ); - revoke_any_signer_capability(account); - } - - /// Revoke any signer capability offer in the specified account. - public entry fun revoke_any_signer_capability(account: &signer) acquires Account { - let account_resource = borrow_global_mut(signer::address_of(account)); - option::extract(&mut account_resource.signer_capability_offer.for); - } - - /// Return an authorized signer of the offerer, if there's an existing signer capability offer for `account` - /// at the offerer's address. - public fun create_authorized_signer(account: &signer, offerer_address: address): signer acquires Account { - assert!(exists_at(offerer_address), error::not_found(EOFFERER_ADDRESS_DOES_NOT_EXIST)); - - // Check if there's an existing signer capability offer from the offerer. - let account_resource = borrow_global(offerer_address); - let addr = signer::address_of(account); - assert!( - option::contains(&account_resource.signer_capability_offer.for, &addr), - error::not_found(ENO_SUCH_SIGNER_CAPABILITY) - ); - - create_signer(offerer_address) - } - - /////////////////////////////////////////////////////////////////////////// - /// Helper functions for authentication key rotation. - /////////////////////////////////////////////////////////////////////////// - fun assert_valid_rotation_proof_signature_and_get_auth_key( - scheme: u8, - public_key_bytes: vector, - signature: vector, - challenge: &RotationProofChallenge - ): vector { - if (scheme == ED25519_SCHEME) { - let pk = ed25519::new_unvalidated_public_key_from_bytes(public_key_bytes); - let sig = ed25519::new_signature_from_bytes(signature); - assert!( - ed25519::signature_verify_strict_t(&sig, &pk, *challenge), - std::error::invalid_argument(EINVALID_PROOF_OF_KNOWLEDGE) - ); - ed25519::unvalidated_public_key_to_authentication_key(&pk) - } else if (scheme == MULTI_ED25519_SCHEME) { - let pk = multi_ed25519::new_unvalidated_public_key_from_bytes(public_key_bytes); - let sig = multi_ed25519::new_signature_from_bytes(signature); - assert!( - multi_ed25519::signature_verify_strict_t(&sig, &pk, *challenge), - std::error::invalid_argument(EINVALID_PROOF_OF_KNOWLEDGE) - ); - multi_ed25519::unvalidated_public_key_to_authentication_key(&pk) - } else { - abort error::invalid_argument(EINVALID_SCHEME) - } - } - - /// Update the `OriginatingAddress` table, so that we can find the originating address using the latest address - /// in the event of key recovery. - fun update_auth_key_and_originating_address_table( - originating_addr: address, - account_resource: &mut Account, - new_auth_key_vector: vector, - ) acquires OriginatingAddress { - let address_map = &mut borrow_global_mut(@aptos_framework).address_map; - let curr_auth_key = from_bcs::to_address(account_resource.authentication_key); - let new_auth_key = from_bcs::to_address(new_auth_key_vector); - assert!( - new_auth_key != curr_auth_key, - error::invalid_argument(ENEW_AUTH_KEY_SAME_AS_CURRENT) - ); - - // Checks `OriginatingAddress[curr_auth_key]` is either unmapped, or mapped to `originating_address`. - // If it's mapped to the originating address, removes that mapping. - // Otherwise, abort if it's mapped to a different address. - if (table::contains(address_map, curr_auth_key)) { - // If account_a with address_a is rotating its keypair from keypair_a to keypair_b, we expect - // the address of the account to stay the same, while its keypair updates to keypair_b. - // Here, by asserting that we're calling from the account with the originating address, we enforce - // the standard of keeping the same address and updating the keypair at the contract level. - // Without this assertion, the dapps could also update the account's address to address_b (the address that - // is programmatically related to keypaier_b) and update the keypair to keypair_b. This causes problems - // for interoperability because different dapps can implement this in different ways. - // If the account with address b calls this function with two valid signatures, it will abort at this step, - // because address b is not the account's originating address. - assert!( - originating_addr == table::remove(address_map, curr_auth_key), - error::not_found(EINVALID_ORIGINATING_ADDRESS) - ); - }; - - // Set `OriginatingAddress[new_auth_key] = originating_address`. - assert!( - !table::contains(address_map, new_auth_key), - error::invalid_argument(ENEW_AUTH_KEY_ALREADY_MAPPED) - ); - table::add(address_map, new_auth_key, originating_addr); - - if (std::features::module_event_migration_enabled()) { - event::emit(KeyRotation { - account: originating_addr, - old_authentication_key: account_resource.authentication_key, - new_authentication_key: new_auth_key_vector, - }); - } else { - event::emit_event( - &mut account_resource.key_rotation_events, - KeyRotationEvent { - old_authentication_key: account_resource.authentication_key, - new_authentication_key: new_auth_key_vector, - } - ); - }; - - // Update the account resource's authentication key. - account_resource.authentication_key = new_auth_key_vector; - } - - /////////////////////////////////////////////////////////////////////////// - /// Basic account creation methods. - /////////////////////////////////////////////////////////////////////////// - - /// This is a helper function to compute resource addresses. Computation of the address - /// involves the use of a cryptographic hash operation and should be use thoughtfully. - public fun create_resource_address(source: &address, seed: vector): address { - let bytes = bcs::to_bytes(source); - vector::append(&mut bytes, seed); - vector::push_back(&mut bytes, DERIVE_RESOURCE_ACCOUNT_SCHEME); - from_bcs::to_address(hash::sha3_256(bytes)) - } - - /// A resource account is used to manage resources independent of an account managed by a user. - /// In Aptos a resource account is created based upon the sha3 256 of the source's address and additional seed data. - /// A resource account can only be created once, this is designated by setting the - /// `Account::signer_capability_offer::for` to the address of the resource account. While an entity may call - /// `create_account` to attempt to claim an account ahead of the creation of a resource account, if found Aptos will - /// transition ownership of the account over to the resource account. This is done by validating that the account has - /// yet to execute any transactions and that the `Account::signer_capability_offer::for` is none. The probability of a - /// collision where someone has legitimately produced a private key that maps to a resource account address is less - /// than `(1/2)^(256)`. - public fun create_resource_account(source: &signer, seed: vector): (signer, SignerCapability) acquires Account { - let resource_addr = create_resource_address(&signer::address_of(source), seed); - let resource = if (exists_at(resource_addr)) { - let account = borrow_global(resource_addr); - assert!( - option::is_none(&account.signer_capability_offer.for), - error::already_exists(ERESOURCE_ACCCOUNT_EXISTS), - ); - assert!( - account.sequence_number == 0, - error::invalid_state(EACCOUNT_ALREADY_USED), - ); - create_signer(resource_addr) - } else { - create_account_unchecked(resource_addr) - }; - - // By default, only the SignerCapability should have control over the resource account and not the auth key. - // If the source account wants direct control via auth key, they would need to explicitly rotate the auth key - // of the resource account using the SignerCapability. - rotate_authentication_key_internal(&resource, ZERO_AUTH_KEY); - - let account = borrow_global_mut(resource_addr); - account.signer_capability_offer.for = option::some(resource_addr); - let signer_cap = SignerCapability { account: resource_addr }; - (resource, signer_cap) - } - - /// create the account for system reserved addresses - public(friend) fun create_framework_reserved_account(addr: address): (signer, SignerCapability) { - assert!( - addr == @0x1 || - addr == @0x2 || - addr == @0x3 || - addr == @0x4 || - addr == @0x5 || - addr == @0x6 || - addr == @0x7 || - addr == @0x8 || - addr == @0x9 || - addr == @0xa, - error::permission_denied(ENO_VALID_FRAMEWORK_RESERVED_ADDRESS), - ); - let signer = create_account_unchecked(addr); - let signer_cap = SignerCapability { account: addr }; - (signer, signer_cap) - } - - /////////////////////////////////////////////////////////////////////////// - /// GUID management methods. - /////////////////////////////////////////////////////////////////////////// - - public fun create_guid(account_signer: &signer): guid::GUID acquires Account { - let addr = signer::address_of(account_signer); - let account = borrow_global_mut(addr); - let guid = guid::create(addr, &mut account.guid_creation_num); - assert!( - account.guid_creation_num < MAX_GUID_CREATION_NUM, - error::out_of_range(EEXCEEDED_MAX_GUID_CREATION_NUM), - ); - guid - } - - /////////////////////////////////////////////////////////////////////////// - /// GUID management methods. - /////////////////////////////////////////////////////////////////////////// - - public fun new_event_handle(account: &signer): EventHandle acquires Account { - event::new_event_handle(create_guid(account)) - } - - /////////////////////////////////////////////////////////////////////////// - /// Coin management methods. - /////////////////////////////////////////////////////////////////////////// - - public(friend) fun register_coin(account_addr: address) acquires Account { - let account = borrow_global_mut(account_addr); - if (std::features::module_event_migration_enabled()) { - event::emit( - CoinRegister { - account: account_addr, - type_info: type_info::type_of(), - }, - ); - } else { - event::emit_event( - &mut account.coin_register_events, - CoinRegisterEvent { - type_info: type_info::type_of(), - }, - ); - } - } - - /////////////////////////////////////////////////////////////////////////// - // Test-only create signerCapabilityOfferProofChallengeV2 and return it - /////////////////////////////////////////////////////////////////////////// - - #[test_only] - public fun get_signer_capability_offer_proof_challenge_v2( - source_address: address, - recipient_address: address, - ): SignerCapabilityOfferProofChallengeV2 acquires Account { - SignerCapabilityOfferProofChallengeV2 { - sequence_number: borrow_global_mut(source_address).sequence_number, - source_address, - recipient_address, - } - } - - /////////////////////////////////////////////////////////////////////////// - /// Capability based functions for efficient use. - /////////////////////////////////////////////////////////////////////////// - - public fun create_signer_with_capability(capability: &SignerCapability): signer { - let addr = &capability.account; - create_signer(*addr) - } - - public fun get_signer_capability_address(capability: &SignerCapability): address { - capability.account - } - - public fun verify_signed_message( - account: address, - account_scheme: u8, - account_public_key: vector, - signed_message_bytes: vector, - message: T, - ) acquires Account { - let account_resource = borrow_global(account); - // Verify that the `SignerCapabilityOfferProofChallengeV2` has the right information and is signed by the account owner's key - if (account_scheme == ED25519_SCHEME) { - let pubkey = ed25519::new_unvalidated_public_key_from_bytes(account_public_key); - let expected_auth_key = ed25519::unvalidated_public_key_to_authentication_key(&pubkey); - assert!( - account_resource.authentication_key == expected_auth_key, - error::invalid_argument(EWRONG_CURRENT_PUBLIC_KEY), - ); - - let signer_capability_sig = ed25519::new_signature_from_bytes(signed_message_bytes); - assert!( - ed25519::signature_verify_strict_t(&signer_capability_sig, &pubkey, message), - error::invalid_argument(EINVALID_PROOF_OF_KNOWLEDGE), - ); - } else if (account_scheme == MULTI_ED25519_SCHEME) { - let pubkey = multi_ed25519::new_unvalidated_public_key_from_bytes(account_public_key); - let expected_auth_key = multi_ed25519::unvalidated_public_key_to_authentication_key(&pubkey); - assert!( - account_resource.authentication_key == expected_auth_key, - error::invalid_argument(EWRONG_CURRENT_PUBLIC_KEY), - ); - - let signer_capability_sig = multi_ed25519::new_signature_from_bytes(signed_message_bytes); - assert!( - multi_ed25519::signature_verify_strict_t(&signer_capability_sig, &pubkey, message), - error::invalid_argument(EINVALID_PROOF_OF_KNOWLEDGE), - ); - } else { - abort error::invalid_argument(EINVALID_SCHEME) - }; - } - - #[test_only] - public fun create_account_for_test(new_address: address): signer { - // Make this easier by just allowing the account to be created again in a test - if (!exists_at(new_address)) { - create_account_unchecked(new_address) - } else { - create_signer_for_test(new_address) - } - } - - #[test] - /// Assert correct signer creation. - fun test_create_signer_for_test() { - assert!(signer::address_of(&create_signer_for_test(@aptos_framework)) == @0x1, 0); - assert!(signer::address_of(&create_signer_for_test(@0x123)) == @0x123, 0); - } - - #[test(user = @0x1)] - public entry fun test_create_resource_account(user: signer) acquires Account { - let (resource_account, resource_account_cap) = create_resource_account(&user, x"01"); - let resource_addr = signer::address_of(&resource_account); - assert!(resource_addr != signer::address_of(&user), 0); - assert!(resource_addr == get_signer_capability_address(&resource_account_cap), 1); - } - - #[test] - #[expected_failure(abort_code = 0x10007, location = Self)] - public entry fun test_cannot_control_resource_account_via_auth_key() acquires Account { - let alice_pk = x"4141414141414141414141414141414141414141414141414141414141414145"; - let alice = create_account_from_ed25519_public_key(alice_pk); - let alice_auth = get_authentication_key(signer::address_of(&alice)); // must look like a valid public key - - let (eve_sk, eve_pk) = ed25519::generate_keys(); - let eve_pk_bytes = ed25519::validated_public_key_to_bytes(&eve_pk); - let eve = create_account_from_ed25519_public_key(eve_pk_bytes); - let recipient_address = signer::address_of(&eve); - - let seed = eve_pk_bytes; // multisig public key - vector::push_back(&mut seed, 1); // multisig threshold - vector::push_back(&mut seed, 1); // signature scheme id - let (resource, _) = create_resource_account(&alice, seed); - - let resource_addr = signer::address_of(&resource); - let proof_challenge = SignerCapabilityOfferProofChallengeV2 { - sequence_number: borrow_global_mut(resource_addr).sequence_number, - source_address: resource_addr, - recipient_address, - }; - - let eve_sig = ed25519::sign_struct(&eve_sk, copy proof_challenge); - - // Construct a malicious 1-out-of-2 multisig PK over Alice's authentication key and Eve's Ed25519 PK. - let account_public_key_bytes = alice_auth; - vector::append(&mut account_public_key_bytes, eve_pk_bytes); - vector::push_back(&mut account_public_key_bytes, 1); // Multisig verification threshold. - let fake_pk = multi_ed25519::new_unvalidated_public_key_from_bytes(account_public_key_bytes); - - // Construct a multisig for `proof_challenge` as if it is signed by the signers behind `fake_pk`, - // Eve being the only participant. - let signer_capability_sig_bytes = x""; - vector::append(&mut signer_capability_sig_bytes, ed25519::signature_to_bytes(&eve_sig)); - vector::append(&mut signer_capability_sig_bytes, x"40000000"); // Signers bitmap. - let fake_sig = multi_ed25519::new_signature_from_bytes(signer_capability_sig_bytes); - - assert!( - multi_ed25519::signature_verify_strict_t(&fake_sig, &fake_pk, proof_challenge), - error::invalid_state(EINVALID_PROOF_OF_KNOWLEDGE) - ); - offer_signer_capability( - &resource, - signer_capability_sig_bytes, - MULTI_ED25519_SCHEME, - account_public_key_bytes, - recipient_address - ); - } - - #[test_only] - struct DummyResource has key {} - - #[test(user = @0x1)] - public entry fun test_module_capability(user: signer) acquires Account, DummyResource { - let (resource_account, signer_cap) = create_resource_account(&user, x"01"); - assert!(signer::address_of(&resource_account) != signer::address_of(&user), 0); - - let resource_account_from_cap = create_signer_with_capability(&signer_cap); - assert!(&resource_account == &resource_account_from_cap, 1); - - move_to(&resource_account_from_cap, DummyResource {}); - borrow_global(signer::address_of(&resource_account)); - } - - #[test(user = @0x1)] - public entry fun test_resource_account_and_create_account(user: signer) acquires Account { - let resource_addr = create_resource_address(&@0x1, x"01"); - create_account_unchecked(resource_addr); - - create_resource_account(&user, x"01"); - } - - #[test(user = @0x1)] - #[expected_failure(abort_code = 0x8000f, location = Self)] - public entry fun test_duplice_create_resource_account(user: signer) acquires Account { - create_resource_account(&user, x"01"); - create_resource_account(&user, x"01"); - } - - /////////////////////////////////////////////////////////////////////////// - // Test-only sequence number mocking for extant Account resource - /////////////////////////////////////////////////////////////////////////// - - #[test_only] - /// Increment sequence number of account at address `addr` - public fun increment_sequence_number_for_test( - addr: address, - ) acquires Account { - let acct = borrow_global_mut(addr); - acct.sequence_number = acct.sequence_number + 1; - } - - #[test_only] - /// Update address `addr` to have `s` as its sequence number - public fun set_sequence_number( - addr: address, - s: u64 - ) acquires Account { - borrow_global_mut(addr).sequence_number = s; - } - - #[test_only] - public fun create_test_signer_cap(account: address): SignerCapability { - SignerCapability { account } - } - - #[test_only] - public fun set_signer_capability_offer(offerer: address, receiver: address) acquires Account { - let account_resource = borrow_global_mut(offerer); - option::swap_or_fill(&mut account_resource.signer_capability_offer.for, receiver); - } - - #[test_only] - public fun set_rotation_capability_offer(offerer: address, receiver: address) acquires Account { - let account_resource = borrow_global_mut(offerer); - option::swap_or_fill(&mut account_resource.rotation_capability_offer.for, receiver); - } - - #[test] - /// Verify test-only sequence number mocking - public entry fun mock_sequence_numbers() - acquires Account { - let addr: address = @0x1234; // Define test address - create_account(addr); // Initialize account resource - // Assert sequence number intializes to 0 - assert!(borrow_global(addr).sequence_number == 0, 0); - increment_sequence_number_for_test(addr); // Increment sequence number - // Assert correct mock value post-increment - assert!(borrow_global(addr).sequence_number == 1, 1); - set_sequence_number(addr, 10); // Set mock sequence number - // Assert correct mock value post-modification - assert!(borrow_global(addr).sequence_number == 10, 2); - } - - /////////////////////////////////////////////////////////////////////////// - // Test account helpers - /////////////////////////////////////////////////////////////////////////// - - #[test(alice = @0xa11ce)] - #[expected_failure(abort_code = 65537, location = aptos_framework::ed25519)] - public entry fun test_empty_public_key(alice: signer) acquires Account, OriginatingAddress { - create_account(signer::address_of(&alice)); - let pk = vector::empty(); - let sig = x"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; - rotate_authentication_key(&alice, ED25519_SCHEME, pk, ED25519_SCHEME, pk, sig, sig); - } - - #[test(alice = @0xa11ce)] - #[expected_failure(abort_code = 262151, location = Self)] - public entry fun test_empty_signature(alice: signer) acquires Account, OriginatingAddress { - create_account(signer::address_of(&alice)); - let test_signature = vector::empty(); - let pk = x"0000000000000000000000000000000000000000000000000000000000000000"; - rotate_authentication_key(&alice, ED25519_SCHEME, pk, ED25519_SCHEME, pk, test_signature, test_signature); - } - - #[test_only] - public fun create_account_from_ed25519_public_key(pk_bytes: vector): signer { - let pk = ed25519::new_unvalidated_public_key_from_bytes(pk_bytes); - let curr_auth_key = ed25519::unvalidated_public_key_to_authentication_key(&pk); - let alice_address = from_bcs::to_address(curr_auth_key); - let alice = create_account_unchecked(alice_address); - alice - } - - // - // Tests for offering & revoking signer capabilities - // - - #[test(bob = @0x345)] - #[expected_failure(abort_code = 65544, location = Self)] - public entry fun test_invalid_offer_signer_capability(bob: signer) acquires Account { - let (_alice_sk, alice_pk) = ed25519::generate_keys(); - let alice_pk_bytes = ed25519::validated_public_key_to_bytes(&alice_pk); - let alice = create_account_from_ed25519_public_key(alice_pk_bytes); - let alice_addr = signer::address_of(&alice); - - let bob_addr = signer::address_of(&bob); - create_account(bob_addr); - - let challenge = SignerCapabilityOfferProofChallengeV2 { - sequence_number: borrow_global(alice_addr).sequence_number, - source_address: alice_addr, - recipient_address: bob_addr, - }; - - let sig = ed25519::sign_struct(&_alice_sk, challenge); - - // Maul the signature and make sure the call would fail - let invalid_signature = ed25519::signature_to_bytes(&sig); - let first_sig_byte = vector::borrow_mut(&mut invalid_signature, 0); - *first_sig_byte = *first_sig_byte ^ 1; - - offer_signer_capability(&alice, invalid_signature, 0, alice_pk_bytes, bob_addr); - } - - #[test(bob = @0x345)] - public entry fun test_valid_check_signer_capability_and_create_authorized_signer(bob: signer) acquires Account { - let (alice_sk, alice_pk) = ed25519::generate_keys(); - let alice_pk_bytes = ed25519::validated_public_key_to_bytes(&alice_pk); - let alice = create_account_from_ed25519_public_key(alice_pk_bytes); - let alice_addr = signer::address_of(&alice); - - let bob_addr = signer::address_of(&bob); - create_account(bob_addr); - - let challenge = SignerCapabilityOfferProofChallengeV2 { - sequence_number: borrow_global(alice_addr).sequence_number, - source_address: alice_addr, - recipient_address: bob_addr, - }; - - let alice_signer_capability_offer_sig = ed25519::sign_struct(&alice_sk, challenge); - - offer_signer_capability( - &alice, - ed25519::signature_to_bytes(&alice_signer_capability_offer_sig), - 0, - alice_pk_bytes, - bob_addr - ); - - assert!(option::contains(&borrow_global(alice_addr).signer_capability_offer.for, &bob_addr), 0); - - let signer = create_authorized_signer(&bob, alice_addr); - assert!(signer::address_of(&signer) == signer::address_of(&alice), 0); - } - - #[test(bob = @0x345)] - public entry fun test_get_signer_cap_and_is_signer_cap(bob: signer) acquires Account { - let (alice_sk, alice_pk) = ed25519::generate_keys(); - let alice_pk_bytes = ed25519::validated_public_key_to_bytes(&alice_pk); - let alice = create_account_from_ed25519_public_key(alice_pk_bytes); - let alice_addr = signer::address_of(&alice); - - let bob_addr = signer::address_of(&bob); - create_account(bob_addr); - - let challenge = SignerCapabilityOfferProofChallengeV2 { - sequence_number: borrow_global(alice_addr).sequence_number, - source_address: alice_addr, - recipient_address: bob_addr, - }; - - let alice_signer_capability_offer_sig = ed25519::sign_struct(&alice_sk, challenge); - - offer_signer_capability( - &alice, - ed25519::signature_to_bytes(&alice_signer_capability_offer_sig), - 0, - alice_pk_bytes, - bob_addr - ); - - assert!(is_signer_capability_offered(alice_addr), 0); - assert!(get_signer_capability_offer_for(alice_addr) == bob_addr, 0); - } - - - #[test(bob = @0x345, charlie = @0x567)] - #[expected_failure(abort_code = 393230, location = Self)] - public entry fun test_invalid_check_signer_capability_and_create_authorized_signer( - bob: signer, - charlie: signer - ) acquires Account { - let (alice_sk, alice_pk) = ed25519::generate_keys(); - let alice_pk_bytes = ed25519::validated_public_key_to_bytes(&alice_pk); - let alice = create_account_from_ed25519_public_key(alice_pk_bytes); - let alice_addr = signer::address_of(&alice); - - let bob_addr = signer::address_of(&bob); - create_account(bob_addr); - - let challenge = SignerCapabilityOfferProofChallengeV2 { - sequence_number: borrow_global(alice_addr).sequence_number, - source_address: alice_addr, - recipient_address: bob_addr, - }; - - let alice_signer_capability_offer_sig = ed25519::sign_struct(&alice_sk, challenge); - - offer_signer_capability( - &alice, - ed25519::signature_to_bytes(&alice_signer_capability_offer_sig), - 0, - alice_pk_bytes, - bob_addr - ); - - let alice_account_resource = borrow_global_mut(alice_addr); - assert!(option::contains(&alice_account_resource.signer_capability_offer.for, &bob_addr), 0); - - create_authorized_signer(&charlie, alice_addr); - } - - #[test(bob = @0x345)] - public entry fun test_valid_revoke_signer_capability(bob: signer) acquires Account { - let (alice_sk, alice_pk) = ed25519::generate_keys(); - let alice_pk_bytes = ed25519::validated_public_key_to_bytes(&alice_pk); - let alice = create_account_from_ed25519_public_key(alice_pk_bytes); - let alice_addr = signer::address_of(&alice); - - let bob_addr = signer::address_of(&bob); - create_account(bob_addr); - - let challenge = SignerCapabilityOfferProofChallengeV2 { - sequence_number: borrow_global(alice_addr).sequence_number, - source_address: alice_addr, - recipient_address: bob_addr, - }; - - let alice_signer_capability_offer_sig = ed25519::sign_struct(&alice_sk, challenge); - - offer_signer_capability( - &alice, - ed25519::signature_to_bytes(&alice_signer_capability_offer_sig), - 0, - alice_pk_bytes, - bob_addr - ); - revoke_signer_capability(&alice, bob_addr); - } - - #[test(bob = @0x345, charlie = @0x567)] - #[expected_failure(abort_code = 393230, location = Self)] - public entry fun test_invalid_revoke_signer_capability(bob: signer, charlie: signer) acquires Account { - let (alice_sk, alice_pk) = ed25519::generate_keys(); - let alice_pk_bytes = ed25519::validated_public_key_to_bytes(&alice_pk); - let alice = create_account_from_ed25519_public_key(alice_pk_bytes); - let alice_addr = signer::address_of(&alice); - let alice_account_resource = borrow_global(alice_addr); - - let bob_addr = signer::address_of(&bob); - create_account(bob_addr); - - let charlie_addr = signer::address_of(&charlie); - create_account(charlie_addr); - - let challenge = SignerCapabilityOfferProofChallengeV2 { - sequence_number: alice_account_resource.sequence_number, - source_address: alice_addr, - recipient_address: bob_addr, - }; - let alice_signer_capability_offer_sig = ed25519::sign_struct(&alice_sk, challenge); - offer_signer_capability( - &alice, - ed25519::signature_to_bytes(&alice_signer_capability_offer_sig), - 0, - alice_pk_bytes, - bob_addr - ); - revoke_signer_capability(&alice, charlie_addr); - } - - // - // Tests for offering rotation capabilities - // - #[test(bob = @0x345, framework = @aptos_framework)] - public entry fun test_valid_offer_rotation_capability(bob: signer, framework: signer) acquires Account { - chain_id::initialize_for_test(&framework, 4); - let (alice_sk, alice_pk) = ed25519::generate_keys(); - let alice_pk_bytes = ed25519::validated_public_key_to_bytes(&alice_pk); - let alice = create_account_from_ed25519_public_key(alice_pk_bytes); - let alice_addr = signer::address_of(&alice); - - let bob_addr = signer::address_of(&bob); - create_account(bob_addr); - - let challenge = RotationCapabilityOfferProofChallengeV2 { - chain_id: chain_id::get(), - sequence_number: get_sequence_number(alice_addr), - source_address: alice_addr, - recipient_address: bob_addr, - }; - - let alice_rotation_capability_offer_sig = ed25519::sign_struct(&alice_sk, challenge); - - offer_rotation_capability( - &alice, - ed25519::signature_to_bytes(&alice_rotation_capability_offer_sig), - 0, - alice_pk_bytes, - bob_addr - ); - - let alice_resource = borrow_global_mut(signer::address_of(&alice)); - assert!(option::contains(&alice_resource.rotation_capability_offer.for, &bob_addr), 0); - } - - #[test(bob = @0x345, framework = @aptos_framework)] - #[expected_failure(abort_code = 65544, location = Self)] - public entry fun test_invalid_offer_rotation_capability(bob: signer, framework: signer) acquires Account { - chain_id::initialize_for_test(&framework, 4); - let (alice_sk, alice_pk) = ed25519::generate_keys(); - let alice_pk_bytes = ed25519::validated_public_key_to_bytes(&alice_pk); - let alice = create_account_from_ed25519_public_key(alice_pk_bytes); - let alice_addr = signer::address_of(&alice); - - let bob_addr = signer::address_of(&bob); - create_account(bob_addr); - - let challenge = RotationCapabilityOfferProofChallengeV2 { - chain_id: chain_id::get(), - // Intentionally make the signature invalid. - sequence_number: 2, - source_address: alice_addr, - recipient_address: bob_addr, - }; - - let alice_rotation_capability_offer_sig = ed25519::sign_struct(&alice_sk, challenge); - - offer_rotation_capability( - &alice, - ed25519::signature_to_bytes(&alice_rotation_capability_offer_sig), - 0, - alice_pk_bytes, - signer::address_of(&bob) - ); - } - - #[test(bob = @0x345, framework = @aptos_framework)] - public entry fun test_valid_revoke_rotation_capability(bob: signer, framework: signer) acquires Account { - chain_id::initialize_for_test(&framework, 4); - let (alice_sk, alice_pk) = ed25519::generate_keys(); - let alice_pk_bytes = ed25519::validated_public_key_to_bytes(&alice_pk); - let alice = create_account_from_ed25519_public_key(alice_pk_bytes); - let alice_addr = signer::address_of(&alice); - - let bob_addr = signer::address_of(&bob); - create_account(bob_addr); - - let challenge = RotationCapabilityOfferProofChallengeV2 { - chain_id: chain_id::get(), - sequence_number: get_sequence_number(alice_addr), - source_address: alice_addr, - recipient_address: bob_addr, - }; - - let alice_rotation_capability_offer_sig = ed25519::sign_struct(&alice_sk, challenge); - - offer_rotation_capability( - &alice, - ed25519::signature_to_bytes(&alice_rotation_capability_offer_sig), - 0, - alice_pk_bytes, - signer::address_of(&bob) - ); - revoke_rotation_capability(&alice, signer::address_of(&bob)); - } - - #[test(bob = @0x345, charlie = @0x567, framework = @aptos_framework)] - #[expected_failure(abort_code = 393234, location = Self)] - public entry fun test_invalid_revoke_rotation_capability( - bob: signer, - charlie: signer, - framework: signer - ) acquires Account { - chain_id::initialize_for_test(&framework, 4); - let (alice_sk, alice_pk) = ed25519::generate_keys(); - let alice_pk_bytes = ed25519::validated_public_key_to_bytes(&alice_pk); - let alice = create_account_from_ed25519_public_key(alice_pk_bytes); - let alice_addr = signer::address_of(&alice); - - let bob_addr = signer::address_of(&bob); - create_account(bob_addr); - create_account(signer::address_of(&charlie)); - - let challenge = RotationCapabilityOfferProofChallengeV2 { - chain_id: chain_id::get(), - sequence_number: get_sequence_number(alice_addr), - source_address: alice_addr, - recipient_address: bob_addr, - }; - - let alice_rotation_capability_offer_sig = ed25519::sign_struct(&alice_sk, challenge); - - offer_rotation_capability( - &alice, - ed25519::signature_to_bytes(&alice_rotation_capability_offer_sig), - 0, - alice_pk_bytes, - signer::address_of(&bob) - ); - revoke_rotation_capability(&alice, signer::address_of(&charlie)); - } - - // - // Tests for key rotation - // - - #[test(account = @aptos_framework)] - public entry fun test_valid_rotate_authentication_key_multi_ed25519_to_multi_ed25519( - account: signer - ) acquires Account, OriginatingAddress { - initialize(&account); - let (curr_sk, curr_pk) = multi_ed25519::generate_keys(2, 3); - let curr_pk_unvalidated = multi_ed25519::public_key_to_unvalidated(&curr_pk); - let curr_auth_key = multi_ed25519::unvalidated_public_key_to_authentication_key(&curr_pk_unvalidated); - let alice_addr = from_bcs::to_address(curr_auth_key); - let alice = create_account_unchecked(alice_addr); - - let (new_sk, new_pk) = multi_ed25519::generate_keys(4, 5); - let new_pk_unvalidated = multi_ed25519::public_key_to_unvalidated(&new_pk); - let new_auth_key = multi_ed25519::unvalidated_public_key_to_authentication_key(&new_pk_unvalidated); - let new_address = from_bcs::to_address(new_auth_key); - - let challenge = RotationProofChallenge { - sequence_number: borrow_global(alice_addr).sequence_number, - originator: alice_addr, - current_auth_key: alice_addr, - new_public_key: multi_ed25519::unvalidated_public_key_to_bytes(&new_pk_unvalidated), - }; - - let from_sig = multi_ed25519::sign_struct(&curr_sk, challenge); - let to_sig = multi_ed25519::sign_struct(&new_sk, challenge); - - rotate_authentication_key( - &alice, - MULTI_ED25519_SCHEME, - multi_ed25519::unvalidated_public_key_to_bytes(&curr_pk_unvalidated), - MULTI_ED25519_SCHEME, - multi_ed25519::unvalidated_public_key_to_bytes(&new_pk_unvalidated), - multi_ed25519::signature_to_bytes(&from_sig), - multi_ed25519::signature_to_bytes(&to_sig), - ); - let address_map = &mut borrow_global_mut(@aptos_framework).address_map; - let expected_originating_address = table::borrow(address_map, new_address); - assert!(*expected_originating_address == alice_addr, 0); - assert!(borrow_global(alice_addr).authentication_key == new_auth_key, 0); - } - - #[test(account = @aptos_framework)] - public entry fun test_valid_rotate_authentication_key_multi_ed25519_to_ed25519( - account: signer - ) acquires Account, OriginatingAddress { - initialize(&account); - - let (curr_sk, curr_pk) = multi_ed25519::generate_keys(2, 3); - let curr_pk_unvalidated = multi_ed25519::public_key_to_unvalidated(&curr_pk); - let curr_auth_key = multi_ed25519::unvalidated_public_key_to_authentication_key(&curr_pk_unvalidated); - let alice_addr = from_bcs::to_address(curr_auth_key); - let alice = create_account_unchecked(alice_addr); - - let account_resource = borrow_global_mut(alice_addr); - - let (new_sk, new_pk) = ed25519::generate_keys(); - let new_pk_unvalidated = ed25519::public_key_to_unvalidated(&new_pk); - let new_auth_key = ed25519::unvalidated_public_key_to_authentication_key(&new_pk_unvalidated); - let new_addr = from_bcs::to_address(new_auth_key); - - let challenge = RotationProofChallenge { - sequence_number: account_resource.sequence_number, - originator: alice_addr, - current_auth_key: alice_addr, - new_public_key: ed25519::unvalidated_public_key_to_bytes(&new_pk_unvalidated), - }; - - let from_sig = multi_ed25519::sign_struct(&curr_sk, challenge); - let to_sig = ed25519::sign_struct(&new_sk, challenge); - - rotate_authentication_key( - &alice, - MULTI_ED25519_SCHEME, - multi_ed25519::unvalidated_public_key_to_bytes(&curr_pk_unvalidated), - ED25519_SCHEME, - ed25519::unvalidated_public_key_to_bytes(&new_pk_unvalidated), - multi_ed25519::signature_to_bytes(&from_sig), - ed25519::signature_to_bytes(&to_sig), - ); - - let address_map = &mut borrow_global_mut(@aptos_framework).address_map; - let expected_originating_address = table::borrow(address_map, new_addr); - assert!(*expected_originating_address == alice_addr, 0); - assert!(borrow_global(alice_addr).authentication_key == new_auth_key, 0); - } - - - #[test(account = @aptos_framework)] - public entry fun test_simple_rotation(account: &signer) acquires Account { - initialize(account); - - let alice_addr = @0x1234; - let alice = create_account_unchecked(alice_addr); - - let (_new_sk, new_pk) = ed25519::generate_keys(); - let new_pk_unvalidated = ed25519::public_key_to_unvalidated(&new_pk); - let new_auth_key = ed25519::unvalidated_public_key_to_authentication_key(&new_pk_unvalidated); - let _new_addr = from_bcs::to_address(new_auth_key); - - rotate_authentication_key_call(&alice, new_auth_key); - assert!(borrow_global(alice_addr).authentication_key == new_auth_key, 0); - } - - - #[test(account = @aptos_framework)] - #[expected_failure(abort_code = 0x20014, location = Self)] - public entry fun test_max_guid(account: &signer) acquires Account { - let addr = signer::address_of(account); - create_account_unchecked(addr); - let account_state = borrow_global_mut(addr); - account_state.guid_creation_num = MAX_GUID_CREATION_NUM - 1; - create_guid(account); - } - - #[test_only] - struct FakeCoin {} - - #[test_only] - struct SadFakeCoin {} - - #[test(account = @0x1234)] - fun test_events(account: &signer) acquires Account { - let addr = signer::address_of(account); - create_account_unchecked(addr); - register_coin(addr); - - let event = CoinRegister { account: addr, type_info: type_info::type_of() }; - - let events = event::emitted_events(); - assert!(vector::length(&events) == 1, 0); - assert!(vector::borrow(&events, 0) == &event, 1); - assert!(event::was_event_emitted(&event), 2); - - let event = CoinRegister { account: addr, type_info: type_info::type_of() }; - assert!(!event::was_event_emitted(&event), 3); - } -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/aggregator.move b/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/aggregator.move deleted file mode 100644 index 9a0baaff1..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/aggregator.move +++ /dev/null @@ -1,48 +0,0 @@ -/// This module provides an interface for aggregators. Aggregators are similar to -/// unsigned integers and support addition and subtraction (aborting on underflow -/// or on overflowing a custom upper limit). The difference from integers is that -/// aggregators allow to perform both additions and subtractions in parallel across -/// multiple transactions, enabling parallel execution. For example, if the first -/// transaction is doing `add(X, 1)` for aggregator resource `X`, and the second -/// is doing `sub(X,3)`, they can be executed in parallel avoiding a read-modify-write -/// dependency. -/// However, reading the aggregator value (i.e. calling `read(X)`) is an expensive -/// operation and should be avoided as much as possible because it reduces the -/// parallelism. Moreover, **aggregators can only be created by Aptos Framework (0x1) -/// at the moment.** -module aptos_framework::aggregator { - - /// The value of aggregator overflows. Raised by native code. - const EAGGREGATOR_OVERFLOW: u64 = 1; - - /// The value of aggregator underflows (goes below zero). Raised by native code. - const EAGGREGATOR_UNDERFLOW: u64 = 2; - - /// Aggregator feature is not supported. Raised by native code. - const ENOT_SUPPORTED: u64 = 3; - - /// Represents an integer which supports parallel additions and subtractions - /// across multiple transactions. See the module description for more details. - struct Aggregator has store { - handle: address, - key: address, - limit: u128, - } - - /// Returns `limit` exceeding which aggregator overflows. - public fun limit(aggregator: &Aggregator): u128 { - aggregator.limit - } - - /// Adds `value` to aggregator. Aborts on overflowing the limit. - public native fun add(aggregator: &mut Aggregator, value: u128); - - /// Subtracts `value` from aggregator. Aborts on going below zero. - public native fun sub(aggregator: &mut Aggregator, value: u128); - - /// Returns a value stored in this aggregator. - public native fun read(aggregator: &Aggregator): u128; - - /// Destroys an aggregator and removes it from its `AggregatorFactory`. - public native fun destroy(aggregator: Aggregator); -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/aggregator_factory.move b/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/aggregator_factory.move deleted file mode 100644 index c7192e646..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/aggregator_factory.move +++ /dev/null @@ -1,83 +0,0 @@ -/// This module provides foundations to create aggregators. Currently only -/// Aptos Framework (0x1) can create them, so this module helps to wrap -/// the constructor of `Aggregator` struct so that only a system account -/// can initialize one. In the future, this might change and aggregators -/// can be enabled for the public. -module aptos_framework::aggregator_factory { - use std::error; - - use aptos_framework::system_addresses; - use aptos_framework::aggregator::Aggregator; - use aptos_std::table::{Self, Table}; - - friend aptos_framework::genesis; - friend aptos_framework::optional_aggregator; - - /// Aggregator factory is not published yet. - const EAGGREGATOR_FACTORY_NOT_FOUND: u64 = 1; - - /// Aggregator V1 only supports limit == MAX_U128. - const EAGG_V1_LIMIT_DEPRECATED: u64 = 2; - - const MAX_U128: u128 = 340282366920938463463374607431768211455; - - /// Creates new aggregators. Used to control the numbers of aggregators in the - /// system and who can create them. At the moment, only Aptos Framework (0x1) - /// account can. - struct AggregatorFactory has key { - phantom_table: Table, - } - - /// Creates a new factory for aggregators. Can only be called during genesis. - public(friend) fun initialize_aggregator_factory(aptos_framework: &signer) { - system_addresses::assert_aptos_framework(aptos_framework); - let aggregator_factory = AggregatorFactory { - phantom_table: table::new() - }; - move_to(aptos_framework, aggregator_factory); - } - - /// Creates a new aggregator instance which overflows on exceeding a `limit`. - public(friend) fun create_aggregator_internal(): Aggregator acquires AggregatorFactory { - assert!( - exists(@aptos_framework), - error::not_found(EAGGREGATOR_FACTORY_NOT_FOUND) - ); - - let aggregator_factory = borrow_global_mut(@aptos_framework); - new_aggregator(aggregator_factory, MAX_U128) - } - - #[deprecated] - /// This is currently a function closed for public. This can be updated in the future by on-chain governance - /// to allow any signer to call. - public fun create_aggregator(account: &signer, limit: u128): Aggregator acquires AggregatorFactory { - // deprecated. Currently used only in aptos-move/e2e-move-tests/src/tests/aggregator.data/pack/sources/aggregator_test.move - - // Only Aptos Framework (0x1) account can call this for now. - system_addresses::assert_aptos_framework(account); - assert!( - limit == MAX_U128, - error::invalid_argument(EAGG_V1_LIMIT_DEPRECATED) - ); - create_aggregator_internal() - } - - /// Returns a new aggregator. - native fun new_aggregator(aggregator_factory: &mut AggregatorFactory, limit: u128): Aggregator; - - #[test_only] - public fun create_aggregator_for_test(): Aggregator acquires AggregatorFactory { - create_aggregator_internal() - } - - #[test_only] - public fun initialize_aggregator_factory_for_test(aptos_framework: &signer) { - initialize_aggregator_factory(aptos_framework); - } - - #[test_only] - public fun aggregator_factory_exists_for_testing(): bool { - exists(@aptos_framework) - } -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/aggregator_v2.move b/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/aggregator_v2.move deleted file mode 100644 index c72777051..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/aggregator_v2.move +++ /dev/null @@ -1,473 +0,0 @@ -/// This module provides an interface for aggregators (version 2). Aggregators are -/// similar to unsigned integers and support addition and subtraction (aborting on -/// underflow or on overflowing a custom upper limit). The difference from integers -/// is that aggregators allow to perform both additions and subtractions in parallel -/// across multiple transactions, enabling parallel execution. For example, if the -/// first transaction is doing `try_add(X, 1)` for aggregator `X`, and the second is -/// doing `try_sub(X,3)`, they can be executed in parallel avoiding a read-modify-write -/// dependency. -/// However, reading the aggregator value (i.e. calling `read(X)`) is a resource-intensive -/// operation that also reduced parallelism, and should be avoided as much as possible. -/// If you need to capture the value, without revealing it, use snapshot function instead, -/// which has no parallelism impact. -/// -/// From parallelism considerations, there are three different levels of effects: -/// * enable full parallelism (cannot create conflicts): -/// max_value, create_*, snapshot, derive_string_concat -/// * enable speculative parallelism (generally parallel via branch prediction) -/// try_add, add, try_sub, sub, is_at_least -/// * create read/write conflicts, as if you were using a regular field -/// read, read_snapshot, read_derived_string -module aptos_framework::aggregator_v2 { - use std::error; - use std::features; - use std::string::String; - - /// The value of aggregator overflows. Raised by uncoditional add() call - const EAGGREGATOR_OVERFLOW: u64 = 1; - - /// The value of aggregator underflows (goes below zero). Raised by uncoditional sub() call - const EAGGREGATOR_UNDERFLOW: u64 = 2; - - /// The generic type supplied to the aggregator snapshot is not supported. - const EUNSUPPORTED_AGGREGATOR_SNAPSHOT_TYPE: u64 = 5; - - /// The aggregator api v2 feature flag is not enabled. - const EAGGREGATOR_API_V2_NOT_ENABLED: u64 = 6; - - /// The generic type supplied to the aggregator is not supported. - const EUNSUPPORTED_AGGREGATOR_TYPE: u64 = 7; - - /// Arguments passed to concat exceed max limit of 1024 bytes (for prefix and suffix together). - const ECONCAT_STRING_LENGTH_TOO_LARGE: u64 = 8; - - /// The native aggregator function, that is in the move file, is not yet supported. - /// and any calls will raise this error. - const EAGGREGATOR_FUNCTION_NOT_YET_SUPPORTED: u64 = 9; - - /// Represents an integer which supports parallel additions and subtractions - /// across multiple transactions. See the module description for more details. - /// - /// Currently supported types for IntElement are u64 and u128. - struct Aggregator has store, drop { - value: IntElement, - max_value: IntElement, - } - - /// Represents a constant value, that was derived from an aggregator at given instant in time. - /// Unlike read() and storing the value directly, this enables parallel execution of transactions, - /// while storing snapshot of aggregator state elsewhere. - struct AggregatorSnapshot has store, drop { - value: IntElement, - } - - struct DerivedStringSnapshot has store, drop { - value: String, - padding: vector, - } - - /// Returns `max_value` exceeding which aggregator overflows. - public fun max_value(aggregator: &Aggregator): IntElement { - aggregator.max_value - } - - /// Creates new aggregator, with given 'max_value'. - /// - /// Currently supported types for IntElement are u64 and u128. - /// EAGGREGATOR_ELEMENT_TYPE_NOT_SUPPORTED raised if called with a different type. - public native fun create_aggregator(max_value: IntElement): Aggregator; - - public fun create_aggregator_with_value(start_value: IntElement, max_value: IntElement): Aggregator { - let aggregator = create_aggregator(max_value); - add(&mut aggregator, start_value); - aggregator - } - - /// Creates new aggregator, without any 'max_value' on top of the implicit bound restriction - /// due to the width of the type (i.e. MAX_U64 for u64, MAX_U128 for u128). - /// - /// Currently supported types for IntElement are u64 and u128. - /// EAGGREGATOR_ELEMENT_TYPE_NOT_SUPPORTED raised if called with a different type. - public native fun create_unbounded_aggregator(): Aggregator; - - public fun create_unbounded_aggregator_with_value(start_value: IntElement): Aggregator { - let aggregator = create_unbounded_aggregator(); - add(&mut aggregator, start_value); - aggregator - } - - /// Adds `value` to aggregator. - /// If addition would exceed the max_value, `false` is returned, and aggregator value is left unchanged. - /// - /// Parallelism info: This operation enables speculative parallelism. - public native fun try_add(aggregator: &mut Aggregator, value: IntElement): bool; - - /// Adds `value` to aggregator, unconditionally. - /// If addition would exceed the max_value, EAGGREGATOR_OVERFLOW exception will be thrown. - /// - /// Parallelism info: This operation enables speculative parallelism. - public fun add(aggregator: &mut Aggregator, value: IntElement) { - assert!(try_add(aggregator, value), error::out_of_range(EAGGREGATOR_OVERFLOW)); - } - - /// Subtracts `value` from aggregator. - /// If subtraction would result in a negative value, `false` is returned, and aggregator value is left unchanged. - /// - /// Parallelism info: This operation enables speculative parallelism. - public native fun try_sub(aggregator: &mut Aggregator, value: IntElement): bool; - - // Subtracts `value` to aggregator, unconditionally. - // If subtraction would result in a negative value, EAGGREGATOR_UNDERFLOW exception will be thrown. - /// - /// Parallelism info: This operation enables speculative parallelism. - public fun sub(aggregator: &mut Aggregator, value: IntElement) { - assert!(try_sub(aggregator, value), error::out_of_range(EAGGREGATOR_UNDERFLOW)); - } - - native fun is_at_least_impl(aggregator: &Aggregator, min_amount: IntElement): bool; - - /// Returns true if aggregator value is larger than or equal to the given `min_amount`, false otherwise. - /// - /// This operation is more efficient and much more parallelization friendly than calling `read(agg) > min_amount`. - /// Until traits are deployed, `is_at_most`/`is_equal` utility methods can be derived from this one (assuming +1 doesn't overflow): - /// - for `is_at_most(agg, max_amount)`, you can do `!is_at_least(max_amount + 1)` - /// - for `is_equal(agg, value)`, you can do `is_at_least(value) && !is_at_least(value + 1)` - /// - /// Parallelism info: This operation enables speculative parallelism. - public fun is_at_least(aggregator: &Aggregator, min_amount: IntElement): bool { - assert!(features::aggregator_v2_is_at_least_api_enabled(), EAGGREGATOR_API_V2_NOT_ENABLED); - is_at_least_impl(aggregator, min_amount) - } - - // TODO waiting for integer traits - // public fun is_at_most(aggregator: &Aggregator, max_amount: IntElement): bool { - // !is_at_least(max_amount + 1) - // } - - // TODO waiting for integer traits - // public fun is_equal(aggregator: &Aggregator, value: IntElement): bool { - // is_at_least(value) && !is_at_least(value + 1) - // } - - /// Returns a value stored in this aggregator. - /// Note: This operation is resource-intensive, and reduces parallelism. - /// If you need to capture the value, without revealing it, use snapshot function instead, - /// which has no parallelism impact. - /// If called in a transaction that also modifies the aggregator, or has other read/write conflicts, - /// it will sequentialize that transaction. (i.e. up to concurrency_level times slower) - /// If called in a separate transaction (i.e. after transaction that modifies aggregator), it might be - /// up to two times slower. - /// - /// Parallelism info: This operation *prevents* speculative parallelism. - public native fun read(aggregator: &Aggregator): IntElement; - - /// Returns a wrapper of a current value of an aggregator - /// Unlike read(), it is fast and avoids sequential dependencies. - /// - /// Parallelism info: This operation enables parallelism. - public native fun snapshot(aggregator: &Aggregator): AggregatorSnapshot; - - /// Creates a snapshot of a given value. - /// Useful for when object is sometimes created via snapshot() or string_concat(), and sometimes directly. - public native fun create_snapshot(value: IntElement): AggregatorSnapshot; - - /// Returns a value stored in this snapshot. - /// Note: This operation is resource-intensive, and reduces parallelism. - /// (Especially if called in a transaction that also modifies the aggregator, - /// or has other read/write conflicts) - /// - /// Parallelism info: This operation *prevents* speculative parallelism. - public native fun read_snapshot(snapshot: &AggregatorSnapshot): IntElement; - - /// Returns a value stored in this DerivedStringSnapshot. - /// Note: This operation is resource-intensive, and reduces parallelism. - /// (Especially if called in a transaction that also modifies the aggregator, - /// or has other read/write conflicts) - /// - /// Parallelism info: This operation *prevents* speculative parallelism. - public native fun read_derived_string(snapshot: &DerivedStringSnapshot): String; - - /// Creates a DerivedStringSnapshot of a given value. - /// Useful for when object is sometimes created via string_concat(), and sometimes directly. - public native fun create_derived_string(value: String): DerivedStringSnapshot; - - /// Concatenates `before`, `snapshot` and `after` into a single string. - /// snapshot passed needs to have integer type - currently supported types are u64 and u128. - /// Raises EUNSUPPORTED_AGGREGATOR_SNAPSHOT_TYPE if called with another type. - /// If length of prefix and suffix together exceeds 1024 bytes, ECONCAT_STRING_LENGTH_TOO_LARGE is raised. - /// - /// Parallelism info: This operation enables parallelism. - public native fun derive_string_concat(before: String, snapshot: &AggregatorSnapshot, after: String): DerivedStringSnapshot; - - // ===== DEPRECATE/NOT YET IMPLEMENTED ==== - - #[deprecated] - /// NOT YET IMPLEMENTED, always raises EAGGREGATOR_FUNCTION_NOT_YET_SUPPORTED. - public native fun copy_snapshot(snapshot: &AggregatorSnapshot): AggregatorSnapshot; - - #[deprecated] - /// DEPRECATED, use derive_string_concat() instead. always raises EAGGREGATOR_FUNCTION_NOT_YET_SUPPORTED. - public native fun string_concat(before: String, snapshot: &AggregatorSnapshot, after: String): AggregatorSnapshot; - - #[verify_only] - fun verify_aggregator_try_add_sub(): Aggregator { - let agg = create_aggregator(10); - spec { - assert spec_get_max_value(agg) == 10; - assert spec_get_value(agg) == 0; - }; - let x = try_add(&mut agg, 5); - spec { - assert x; - assert is_at_least(agg, 5); - }; - let y = try_sub(&mut agg, 6); - spec { - assert !y; - assert spec_get_value(agg) == 5; - assert spec_get_max_value(agg) == 10; - }; - let y = try_sub(&mut agg, 4); - spec { - assert y; - assert spec_get_value(agg) == 1; - assert spec_get_max_value(agg) == 10; - }; - let x = try_add(&mut agg, 11); - spec { - assert !x; - assert spec_get_value(agg) == 1; - assert spec_get_max_value(agg) == 10; - }; - let x = try_add(&mut agg, 9); - spec { - assert x; - assert spec_get_value(agg) == 10; - assert spec_get_max_value(agg) == 10; - }; - agg - } - - spec verify_aggregator_try_add_sub{ - ensures spec_get_max_value(result) == 10; - ensures spec_get_value(result) == 10; - ensures read(result) == 10; - } - - #[verify_only] - fun verify_aggregator_add_sub(sub_value: u64, add_value: u64) { - let agg = create_aggregator(10); - add(&mut agg, add_value); - spec { - assert spec_get_value(agg) == add_value; - }; - sub(&mut agg, sub_value); - spec { - assert spec_get_value(agg) == add_value - sub_value; - }; - } - - spec verify_aggregator_add_sub(sub_value: u64, add_value: u64) { - pragma aborts_if_is_strict; - aborts_if add_value > 10; - aborts_if sub_value > add_value; - } - - #[verify_only] - fun verify_correct_read() { - let snapshot = create_snapshot(42); - spec { - assert spec_read_snapshot(snapshot) == 42; - }; - let derived = create_derived_string(std::string::utf8(b"42")); - spec { - assert spec_read_derived_string(derived).bytes == b"42"; - }; - } - - #[verify_only] - fun verify_invalid_read(aggregator: &Aggregator): u8 { - read(aggregator) - } - spec verify_invalid_read { - aborts_if true; - } - - #[verify_only] - fun verify_invalid_is_least(aggregator: &Aggregator): bool { - is_at_least(aggregator, 0) - } - spec verify_invalid_is_least { - aborts_if true; - } - - #[verify_only] - fun verify_copy_not_yet_supported() { - let snapshot = create_snapshot(42); - copy_snapshot(&snapshot); - } - - spec verify_copy_not_yet_supported { - aborts_if true; - } - - #[verify_only] - fun verify_string_concat1() { - let snapshot = create_snapshot(42); - let derived = derive_string_concat(std::string::utf8(b"before"), &snapshot, std::string::utf8(b"after")); - spec { - assert spec_read_derived_string(derived).bytes == - concat(b"before", concat(spec_get_string_value(snapshot).bytes, b"after")); - }; - } - - #[verify_only] - fun verify_aggregator_generic(): (Aggregator, Aggregator){ - let x = create_unbounded_aggregator(); - let y = create_unbounded_aggregator(); - (x, y) - } - spec verify_aggregator_generic (): (Aggregator, Aggregator) { - use aptos_std::type_info; - aborts_if type_info::type_name().bytes != b"u64" && type_info::type_name().bytes != b"u128"; - aborts_if type_info::type_name().bytes != b"u64" && type_info::type_name().bytes != b"u128"; - } - - #[verify_only] - fun verify_aggregator_generic_add(aggregator: &mut Aggregator, value: IntElement) { - try_add(aggregator, value); - is_at_least_impl(aggregator, value); - // cannot specify aborts_if condition for generic `add` - // because comparison is not supported by IntElement - add(aggregator, value); - } - spec verify_aggregator_generic_add(aggregator: &mut Aggregator, value: IntElement) { - use aptos_std::type_info; - aborts_if type_info::type_name().bytes != b"u64" && type_info::type_name().bytes != b"u128"; - } - - #[verify_only] - fun verify_aggregator_generic_sub(aggregator: &mut Aggregator, value: IntElement) { - try_sub(aggregator, value); - // cannot specify aborts_if condition for generic `sub` - // because comparison is not supported by IntElement - sub(aggregator, value); - } - spec verify_aggregator_generic_sub(aggregator: &mut Aggregator, value: IntElement) { - use aptos_std::type_info; - aborts_if type_info::type_name().bytes != b"u64" && type_info::type_name().bytes != b"u128"; - } - - #[verify_only] - fun verify_aggregator_invalid_type1() { - create_unbounded_aggregator(); - } - spec verify_aggregator_invalid_type1 { - aborts_if true; - } - - #[verify_only] - fun verify_snapshot_invalid_type1() { - use std::option; - create_snapshot(option::some(42)); - } - spec verify_snapshot_invalid_type1 { - aborts_if true; - } - - #[verify_only] - fun verify_snapshot_invalid_type2() { - create_snapshot(vector[42]); - } - - spec verify_snapshot_invalid_type2 { - aborts_if true; - } - - #[verify_only] - fun verify_aggregator_valid_type() { - let _agg_1 = create_unbounded_aggregator(); - spec { - assert spec_get_max_value(_agg_1) == MAX_U64; - }; - let _agg_2 = create_unbounded_aggregator(); - spec { - assert spec_get_max_value(_agg_2) == MAX_U128; - }; - create_aggregator(5); - create_aggregator(5); - } - - spec verify_aggregator_valid_type { - aborts_if false; - } - - // ======================================== - - #[test] - fun test_aggregator() { - let agg = create_aggregator(10); - assert!(try_add(&mut agg, 5), 1); - assert!(try_add(&mut agg, 5), 2); - assert!(read(&agg) == 10, 3); - assert!(!try_add(&mut agg, 5), 4); - assert!(read(&agg) == 10, 5); - assert!(try_sub(&mut agg, 5), 6); - assert!(read(&agg) == 5, 7); - - let snap = snapshot(&agg); - assert!(try_add(&mut agg, 2), 8); - assert!(read(&agg) == 7, 9); - assert!(read_snapshot(&snap) == 5, 10); - } - - #[test] - fun test_correct_read() { - let snapshot = create_snapshot(42); - assert!(read_snapshot(&snapshot) == 42, 0); - - let derived = create_derived_string(std::string::utf8(b"42")); - assert!(read_derived_string(&derived) == std::string::utf8(b"42"), 0); - } - - #[test] - #[expected_failure(abort_code = 0x030009, location = Self)] - fun test_copy_not_yet_supported() { - let snapshot = create_snapshot(42); - copy_snapshot(&snapshot); - } - - #[test] - fun test_string_concat1() { - let snapshot = create_snapshot(42); - let derived = derive_string_concat(std::string::utf8(b"before"), &snapshot, std::string::utf8(b"after")); - assert!(read_derived_string(&derived) == std::string::utf8(b"before42after"), 0); - } - - #[test] - #[expected_failure(abort_code = 0x030007, location = Self)] - fun test_aggregator_invalid_type1() { - create_unbounded_aggregator(); - } - - #[test] - fun test_aggregator_valid_type() { - create_unbounded_aggregator(); - create_unbounded_aggregator(); - create_aggregator(5); - create_aggregator(5); - } - - #[test] - #[expected_failure(abort_code = 0x030005, location = Self)] - fun test_snpashot_invalid_type1() { - use std::option; - create_snapshot(option::some(42)); - } - - #[test] - #[expected_failure(abort_code = 0x030005, location = Self)] - fun test_snpashot_invalid_type2() { - create_snapshot(vector[42]); - } -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/aptos_account.move b/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/aptos_account.move deleted file mode 100644 index d18abf212..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/aptos_account.move +++ /dev/null @@ -1,480 +0,0 @@ -module aptos_framework::aptos_account { - use aptos_framework::account::{Self, new_event_handle}; - use aptos_framework::aptos_coin::AptosCoin; - use aptos_framework::coin::{Self, Coin}; - use aptos_framework::create_signer::create_signer; - use aptos_framework::event::{EventHandle, emit_event, emit}; - use aptos_framework::fungible_asset::{Self, Metadata, BurnRef, FungibleAsset}; - use aptos_framework::primary_fungible_store; - use aptos_framework::object; - - use std::error; - use std::features; - use std::signer; - use std::vector; - use aptos_framework::object::Object; - - friend aptos_framework::genesis; - friend aptos_framework::resource_account; - friend aptos_framework::transaction_fee; - friend aptos_framework::transaction_validation; - - /// Account does not exist. - const EACCOUNT_NOT_FOUND: u64 = 1; - /// Account is not registered to receive APT. - const EACCOUNT_NOT_REGISTERED_FOR_APT: u64 = 2; - /// Account opted out of receiving coins that they did not register to receive. - const EACCOUNT_DOES_NOT_ACCEPT_DIRECT_COIN_TRANSFERS: u64 = 3; - /// Account opted out of directly receiving NFT tokens. - const EACCOUNT_DOES_NOT_ACCEPT_DIRECT_TOKEN_TRANSFERS: u64 = 4; - /// The lengths of the recipients and amounts lists don't match. - const EMISMATCHING_RECIPIENTS_AND_AMOUNTS_LENGTH: u64 = 5; - - /// Configuration for whether an account can receive direct transfers of coins that they have not registered. - /// - /// By default, this is enabled. Users can opt-out by disabling at any time. - struct DirectTransferConfig has key { - allow_arbitrary_coin_transfers: bool, - update_coin_transfer_events: EventHandle, - } - - /// Event emitted when an account's direct coins transfer config is updated. - struct DirectCoinTransferConfigUpdatedEvent has drop, store { - new_allow_direct_transfers: bool, - } - - #[event] - struct DirectCoinTransferConfigUpdated has drop, store { - account: address, - new_allow_direct_transfers: bool, - } - - /////////////////////////////////////////////////////////////////////////// - /// Basic account creation methods. - /////////////////////////////////////////////////////////////////////////// - - public entry fun create_account(auth_key: address) { - let account_signer = account::create_account(auth_key); - register_apt(&account_signer); - } - - /// Batch version of APT transfer. - public entry fun batch_transfer(source: &signer, recipients: vector
, amounts: vector) { - let recipients_len = vector::length(&recipients); - assert!( - recipients_len == vector::length(&amounts), - error::invalid_argument(EMISMATCHING_RECIPIENTS_AND_AMOUNTS_LENGTH), - ); - - vector::enumerate_ref(&recipients, |i, to| { - let amount = *vector::borrow(&amounts, i); - transfer(source, *to, amount); - }); - } - - /// Convenient function to transfer APT to a recipient account that might not exist. - /// This would create the recipient account first, which also registers it to receive APT, before transferring. - public entry fun transfer(source: &signer, to: address, amount: u64) { - if (!account::exists_at(to)) { - create_account(to) - }; - - if (features::operations_default_to_fa_apt_store_enabled()) { - fungible_transfer_only(source, to, amount) - } else { - // Resource accounts can be created without registering them to receive APT. - // This conveniently does the registration if necessary. - if (!coin::is_account_registered(to)) { - coin::register(&create_signer(to)); - }; - coin::transfer(source, to, amount) - } - } - - /// Batch version of transfer_coins. - public entry fun batch_transfer_coins( - from: &signer, recipients: vector
, amounts: vector) acquires DirectTransferConfig { - let recipients_len = vector::length(&recipients); - assert!( - recipients_len == vector::length(&amounts), - error::invalid_argument(EMISMATCHING_RECIPIENTS_AND_AMOUNTS_LENGTH), - ); - - vector::enumerate_ref(&recipients, |i, to| { - let amount = *vector::borrow(&amounts, i); - transfer_coins(from, *to, amount); - }); - } - - /// Convenient function to transfer a custom CoinType to a recipient account that might not exist. - /// This would create the recipient account first and register it to receive the CoinType, before transferring. - public entry fun transfer_coins(from: &signer, to: address, amount: u64) acquires DirectTransferConfig { - deposit_coins(to, coin::withdraw(from, amount)); - } - - /// Convenient function to deposit a custom CoinType into a recipient account that might not exist. - /// This would create the recipient account first and register it to receive the CoinType, before transferring. - public fun deposit_coins(to: address, coins: Coin) acquires DirectTransferConfig { - if (!account::exists_at(to)) { - create_account(to); - spec { - assert coin::spec_is_account_registered(to); - assume aptos_std::type_info::type_of() == aptos_std::type_info::type_of() ==> - coin::spec_is_account_registered(to); - }; - }; - if (!coin::is_account_registered(to)) { - assert!( - can_receive_direct_coin_transfers(to), - error::permission_denied(EACCOUNT_DOES_NOT_ACCEPT_DIRECT_COIN_TRANSFERS), - ); - coin::register(&create_signer(to)); - }; - coin::deposit(to, coins) - } - - /// Batch version of transfer_fungible_assets. - public entry fun batch_transfer_fungible_assets( - from: &signer, - metadata: Object, - recipients: vector
, - amounts: vector - ) { - let recipients_len = vector::length(&recipients); - assert!( - recipients_len == vector::length(&amounts), - error::invalid_argument(EMISMATCHING_RECIPIENTS_AND_AMOUNTS_LENGTH), - ); - - vector::enumerate_ref(&recipients, |i, to| { - let amount = *vector::borrow(&amounts, i); - transfer_fungible_assets(from, metadata, *to, amount); - }); - } - - /// Convenient function to deposit fungible asset into a recipient account that might not exist. - /// This would create the recipient account first to receive the fungible assets. - public entry fun transfer_fungible_assets(from: &signer, metadata: Object, to: address, amount: u64) { - deposit_fungible_assets(to, primary_fungible_store::withdraw(from, metadata, amount)); - } - - /// Convenient function to deposit fungible asset into a recipient account that might not exist. - /// This would create the recipient account first to receive the fungible assets. - public fun deposit_fungible_assets(to: address, fa: FungibleAsset) { - if (!account::exists_at(to)) { - create_account(to); - }; - primary_fungible_store::deposit(to, fa) - } - - public fun assert_account_exists(addr: address) { - assert!(account::exists_at(addr), error::not_found(EACCOUNT_NOT_FOUND)); - } - - public fun assert_account_is_registered_for_apt(addr: address) { - assert_account_exists(addr); - assert!(coin::is_account_registered(addr), error::not_found(EACCOUNT_NOT_REGISTERED_FOR_APT)); - } - - /// Set whether `account` can receive direct transfers of coins that they have not explicitly registered to receive. - public entry fun set_allow_direct_coin_transfers(account: &signer, allow: bool) acquires DirectTransferConfig { - let addr = signer::address_of(account); - if (exists(addr)) { - let direct_transfer_config = borrow_global_mut(addr); - // Short-circuit to avoid emitting an event if direct transfer config is not changing. - if (direct_transfer_config.allow_arbitrary_coin_transfers == allow) { - return - }; - - direct_transfer_config.allow_arbitrary_coin_transfers = allow; - - if (std::features::module_event_migration_enabled()) { - emit(DirectCoinTransferConfigUpdated { account: addr, new_allow_direct_transfers: allow }); - } else { - emit_event( - &mut direct_transfer_config.update_coin_transfer_events, - DirectCoinTransferConfigUpdatedEvent { new_allow_direct_transfers: allow }); - }; - } else { - let direct_transfer_config = DirectTransferConfig { - allow_arbitrary_coin_transfers: allow, - update_coin_transfer_events: new_event_handle(account), - }; - if (std::features::module_event_migration_enabled()) { - emit(DirectCoinTransferConfigUpdated { account: addr, new_allow_direct_transfers: allow }); - } else { - emit_event( - &mut direct_transfer_config.update_coin_transfer_events, - DirectCoinTransferConfigUpdatedEvent { new_allow_direct_transfers: allow }); - }; - move_to(account, direct_transfer_config); - }; - } - - #[view] - /// Return true if `account` can receive direct transfers of coins that they have not explicitly registered to - /// receive. - /// - /// By default, this returns true if an account has not explicitly set whether the can receive direct transfers. - public fun can_receive_direct_coin_transfers(account: address): bool acquires DirectTransferConfig { - !exists(account) || - borrow_global(account).allow_arbitrary_coin_transfers - } - - public(friend) fun register_apt(account_signer: &signer) { - if (features::new_accounts_default_to_fa_apt_store_enabled()) { - ensure_primary_fungible_store_exists(signer::address_of(account_signer)); - } else { - coin::register(account_signer); - } - } - - /// APT Primary Fungible Store specific specialized functions, - /// Utilized internally once migration of APT to FungibleAsset is complete. - - /// Convenient function to transfer APT to a recipient account that might not exist. - /// This would create the recipient APT PFS first, which also registers it to receive APT, before transferring. - /// TODO: once migration is complete, rename to just "transfer_only" and make it an entry function (for cheapest way - /// to transfer APT) - if we want to allow APT PFS without account itself - public(friend) entry fun fungible_transfer_only( - source: &signer, to: address, amount: u64 - ) { - let sender_store = ensure_primary_fungible_store_exists(signer::address_of(source)); - let recipient_store = ensure_primary_fungible_store_exists(to); - - // use internal APIs, as they skip: - // - owner, frozen and dispatchable checks - // as APT cannot be frozen or have dispatch, and PFS cannot be transfered - // (PFS could potentially be burned. regular transfer would permanently unburn the store. - // Ignoring the check here has the equivalent of unburning, transfers, and then burning again) - fungible_asset::deposit_internal(recipient_store, fungible_asset::withdraw_internal(sender_store, amount)); - } - - /// Is balance from APT Primary FungibleStore at least the given amount - public(friend) fun is_fungible_balance_at_least(account: address, amount: u64): bool { - let store_addr = primary_fungible_store_address(account); - fungible_asset::is_address_balance_at_least(store_addr, amount) - } - - /// Burn from APT Primary FungibleStore - public(friend) fun burn_from_fungible_store( - ref: &BurnRef, - account: address, - amount: u64, - ) { - // Skip burning if amount is zero. This shouldn't error out as it's called as part of transaction fee burning. - if (amount != 0) { - let store_addr = primary_fungible_store_address(account); - fungible_asset::address_burn_from(ref, store_addr, amount); - }; - } - - /// Ensure that APT Primary FungibleStore exists (and create if it doesn't) - inline fun ensure_primary_fungible_store_exists(owner: address): address { - let store_addr = primary_fungible_store_address(owner); - if (fungible_asset::store_exists(store_addr)) { - store_addr - } else { - object::object_address(&primary_fungible_store::create_primary_store(owner, object::address_to_object(@aptos_fungible_asset))) - } - } - - /// Address of APT Primary Fungible Store - inline fun primary_fungible_store_address(account: address): address { - object::create_user_derived_object_address(account, @aptos_fungible_asset) - } - - // tests - - #[test_only] - use aptos_std::from_bcs; - #[test_only] - use std::string::utf8; - #[test_only] - use aptos_framework::account::create_account_for_test; - - #[test_only] - struct FakeCoin {} - - #[test(alice = @0xa11ce, core = @0x1)] - public fun test_transfer(alice: &signer, core: &signer) { - let bob = from_bcs::to_address(x"0000000000000000000000000000000000000000000000000000000000000b0b"); - let carol = from_bcs::to_address(x"00000000000000000000000000000000000000000000000000000000000ca501"); - - let (burn_cap, mint_cap) = aptos_framework::aptos_coin::initialize_for_test(core); - create_account(signer::address_of(alice)); - coin::deposit(signer::address_of(alice), coin::mint(10000, &mint_cap)); - transfer(alice, bob, 500); - assert!(coin::balance(bob) == 500, 0); - transfer(alice, carol, 500); - assert!(coin::balance(carol) == 500, 1); - transfer(alice, carol, 1500); - assert!(coin::balance(carol) == 2000, 2); - - coin::destroy_burn_cap(burn_cap); - coin::destroy_mint_cap(mint_cap); - } - - #[test(alice = @0xa11ce, core = @0x1)] - public fun test_transfer_to_resource_account(alice: &signer, core: &signer) { - let (resource_account, _) = account::create_resource_account(alice, vector[]); - let resource_acc_addr = signer::address_of(&resource_account); - let (burn_cap, mint_cap) = aptos_framework::aptos_coin::initialize_for_test(core); - assert!(!coin::is_account_registered(resource_acc_addr), 0); - - create_account(signer::address_of(alice)); - coin::deposit(signer::address_of(alice), coin::mint(10000, &mint_cap)); - transfer(alice, resource_acc_addr, 500); - assert!(coin::balance(resource_acc_addr) == 500, 1); - - coin::destroy_burn_cap(burn_cap); - coin::destroy_mint_cap(mint_cap); - } - - #[test(from = @0x123, core = @0x1, recipient_1 = @0x124, recipient_2 = @0x125)] - public fun test_batch_transfer(from: &signer, core: &signer, recipient_1: &signer, recipient_2: &signer) { - let (burn_cap, mint_cap) = aptos_framework::aptos_coin::initialize_for_test(core); - create_account(signer::address_of(from)); - let recipient_1_addr = signer::address_of(recipient_1); - let recipient_2_addr = signer::address_of(recipient_2); - create_account(recipient_1_addr); - create_account(recipient_2_addr); - coin::deposit(signer::address_of(from), coin::mint(10000, &mint_cap)); - batch_transfer( - from, - vector[recipient_1_addr, recipient_2_addr], - vector[100, 500], - ); - assert!(coin::balance(recipient_1_addr) == 100, 0); - assert!(coin::balance(recipient_2_addr) == 500, 1); - coin::destroy_burn_cap(burn_cap); - coin::destroy_mint_cap(mint_cap); - } - - #[test(from = @0x1, to = @0x12)] - public fun test_direct_coin_transfers(from: &signer, to: &signer) acquires DirectTransferConfig { - let (burn_cap, freeze_cap, mint_cap) = coin::initialize( - from, - utf8(b"FC"), - utf8(b"FC"), - 10, - true, - ); - create_account_for_test(signer::address_of(from)); - create_account_for_test(signer::address_of(to)); - deposit_coins(signer::address_of(from), coin::mint(1000, &mint_cap)); - // Recipient account did not explicit register for the coin. - let to_addr = signer::address_of(to); - transfer_coins(from, to_addr, 500); - assert!(coin::balance(to_addr) == 500, 0); - - coin::destroy_burn_cap(burn_cap); - coin::destroy_mint_cap(mint_cap); - coin::destroy_freeze_cap(freeze_cap); - } - - #[test(from = @0x1, recipient_1 = @0x124, recipient_2 = @0x125)] - public fun test_batch_transfer_coins( - from: &signer, recipient_1: &signer, recipient_2: &signer) acquires DirectTransferConfig { - let (burn_cap, freeze_cap, mint_cap) = coin::initialize( - from, - utf8(b"FC"), - utf8(b"FC"), - 10, - true, - ); - create_account_for_test(signer::address_of(from)); - let recipient_1_addr = signer::address_of(recipient_1); - let recipient_2_addr = signer::address_of(recipient_2); - create_account_for_test(recipient_1_addr); - create_account_for_test(recipient_2_addr); - deposit_coins(signer::address_of(from), coin::mint(1000, &mint_cap)); - batch_transfer_coins( - from, - vector[recipient_1_addr, recipient_2_addr], - vector[100, 500], - ); - assert!(coin::balance(recipient_1_addr) == 100, 0); - assert!(coin::balance(recipient_2_addr) == 500, 1); - - coin::destroy_burn_cap(burn_cap); - coin::destroy_mint_cap(mint_cap); - coin::destroy_freeze_cap(freeze_cap); - } - - #[test(user = @0x123)] - public fun test_set_allow_direct_coin_transfers(user: &signer) acquires DirectTransferConfig { - let addr = signer::address_of(user); - create_account_for_test(addr); - set_allow_direct_coin_transfers(user, true); - assert!(can_receive_direct_coin_transfers(addr), 0); - set_allow_direct_coin_transfers(user, false); - assert!(!can_receive_direct_coin_transfers(addr), 1); - set_allow_direct_coin_transfers(user, true); - assert!(can_receive_direct_coin_transfers(addr), 2); - } - - #[test(from = @0x1, to = @0x12)] - public fun test_direct_coin_transfers_with_explicit_direct_coin_transfer_config( - from: &signer, to: &signer) acquires DirectTransferConfig { - let (burn_cap, freeze_cap, mint_cap) = coin::initialize( - from, - utf8(b"FC"), - utf8(b"FC"), - 10, - true, - ); - create_account_for_test(signer::address_of(from)); - create_account_for_test(signer::address_of(to)); - set_allow_direct_coin_transfers(from, true); - deposit_coins(signer::address_of(from), coin::mint(1000, &mint_cap)); - // Recipient account did not explicit register for the coin. - let to_addr = signer::address_of(to); - transfer_coins(from, to_addr, 500); - assert!(coin::balance(to_addr) == 500, 0); - - coin::destroy_burn_cap(burn_cap); - coin::destroy_mint_cap(mint_cap); - coin::destroy_freeze_cap(freeze_cap); - } - - #[test(from = @0x1, to = @0x12)] - #[expected_failure(abort_code = 0x50003, location = Self)] - public fun test_direct_coin_transfers_fail_if_recipient_opted_out( - from: &signer, to: &signer) acquires DirectTransferConfig { - let (burn_cap, freeze_cap, mint_cap) = coin::initialize( - from, - utf8(b"FC"), - utf8(b"FC"), - 10, - true, - ); - create_account_for_test(signer::address_of(from)); - create_account_for_test(signer::address_of(to)); - set_allow_direct_coin_transfers(from, false); - deposit_coins(signer::address_of(from), coin::mint(1000, &mint_cap)); - // This should fail as the to account has explicitly opted out of receiving arbitrary coins. - transfer_coins(from, signer::address_of(to), 500); - - coin::destroy_burn_cap(burn_cap); - coin::destroy_mint_cap(mint_cap); - coin::destroy_freeze_cap(freeze_cap); - } - - #[test(user = @0xcafe)] - fun test_primary_fungible_store_address( - user: &signer, - ) { - use aptos_framework::fungible_asset::Metadata; - use aptos_framework::aptos_coin; - - aptos_coin::ensure_initialized_with_apt_fa_metadata_for_test(); - - let apt_metadata = object::address_to_object(@aptos_fungible_asset); - let user_addr = signer::address_of(user); - assert!(primary_fungible_store_address(user_addr) == primary_fungible_store::primary_store_address(user_addr, apt_metadata), 1); - - ensure_primary_fungible_store_exists(user_addr); - assert!(primary_fungible_store::primary_store_exists(user_addr, apt_metadata), 2); - } -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/aptos_coin.move b/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/aptos_coin.move deleted file mode 100644 index cff0f86f8..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/aptos_coin.move +++ /dev/null @@ -1,204 +0,0 @@ -/// This module defines a minimal and generic Coin and Balance. -/// modified from https://github.com/move-language/move/tree/main/language/documentation/tutorial -module aptos_framework::aptos_coin { - use std::error; - use std::signer; - use std::string; - use std::vector; - use std::option::{Self, Option}; - - use aptos_framework::coin::{Self, BurnCapability, MintCapability}; - use aptos_framework::system_addresses; - - friend aptos_framework::genesis; - - /// Account does not have mint capability - const ENO_CAPABILITIES: u64 = 1; - /// Mint capability has already been delegated to this specified address - const EALREADY_DELEGATED: u64 = 2; - /// Cannot find delegation of mint capability to this account - const EDELEGATION_NOT_FOUND: u64 = 3; - - struct AptosCoin has key {} - - struct MintCapStore has key { - mint_cap: MintCapability, - } - - /// Delegation token created by delegator and can be claimed by the delegatee as MintCapability. - struct DelegatedMintCapability has store { - to: address - } - - /// The container stores the current pending delegations. - struct Delegations has key { - inner: vector, - } - - /// Can only called during genesis to initialize the Aptos coin. - public(friend) fun initialize(aptos_framework: &signer): (BurnCapability, MintCapability) { - system_addresses::assert_aptos_framework(aptos_framework); - - let (burn_cap, freeze_cap, mint_cap) = coin::initialize_with_parallelizable_supply( - aptos_framework, - string::utf8(b"Aptos Coin"), - string::utf8(b"APT"), - 8, // decimals - true, // monitor_supply - ); - - // Aptos framework needs mint cap to mint coins to initial validators. This will be revoked once the validators - // have been initialized. - move_to(aptos_framework, MintCapStore { mint_cap }); - - coin::destroy_freeze_cap(freeze_cap); - (burn_cap, mint_cap) - } - - public fun has_mint_capability(account: &signer): bool { - exists(signer::address_of(account)) - } - - /// Only called during genesis to destroy the aptos framework account's mint capability once all initial validators - /// and accounts have been initialized during genesis. - public(friend) fun destroy_mint_cap(aptos_framework: &signer) acquires MintCapStore { - system_addresses::assert_aptos_framework(aptos_framework); - let MintCapStore { mint_cap } = move_from(@aptos_framework); - coin::destroy_mint_cap(mint_cap); - } - - /// Can only be called during genesis for tests to grant mint capability to aptos framework and core resources - /// accounts. - /// Expects account and APT store to be registered before calling. - public(friend) fun configure_accounts_for_test( - aptos_framework: &signer, - core_resources: &signer, - mint_cap: MintCapability, - ) { - system_addresses::assert_aptos_framework(aptos_framework); - - // Mint the core resource account AptosCoin for gas so it can execute system transactions. - let coins = coin::mint( - 18446744073709551615, - &mint_cap, - ); - coin::deposit(signer::address_of(core_resources), coins); - - move_to(core_resources, MintCapStore { mint_cap }); - move_to(core_resources, Delegations { inner: vector::empty() }); - } - - /// Only callable in tests and testnets where the core resources account exists. - /// Create new coins and deposit them into dst_addr's account. - public entry fun mint( - account: &signer, - dst_addr: address, - amount: u64, - ) acquires MintCapStore { - let account_addr = signer::address_of(account); - - assert!( - exists(account_addr), - error::not_found(ENO_CAPABILITIES), - ); - - let mint_cap = &borrow_global(account_addr).mint_cap; - let coins_minted = coin::mint(amount, mint_cap); - coin::deposit(dst_addr, coins_minted); - } - - /// Only callable in tests and testnets where the core resources account exists. - /// Create delegated token for the address so the account could claim MintCapability later. - public entry fun delegate_mint_capability(account: signer, to: address) acquires Delegations { - system_addresses::assert_core_resource(&account); - let delegations = &mut borrow_global_mut(@core_resources).inner; - vector::for_each_ref(delegations, |element| { - let element: &DelegatedMintCapability = element; - assert!(element.to != to, error::invalid_argument(EALREADY_DELEGATED)); - }); - vector::push_back(delegations, DelegatedMintCapability { to }); - } - - /// Only callable in tests and testnets where the core resources account exists. - /// Claim the delegated mint capability and destroy the delegated token. - public entry fun claim_mint_capability(account: &signer) acquires Delegations, MintCapStore { - let maybe_index = find_delegation(signer::address_of(account)); - assert!(option::is_some(&maybe_index), EDELEGATION_NOT_FOUND); - let idx = *option::borrow(&maybe_index); - let delegations = &mut borrow_global_mut(@core_resources).inner; - let DelegatedMintCapability { to: _ } = vector::swap_remove(delegations, idx); - - // Make a copy of mint cap and give it to the specified account. - let mint_cap = borrow_global(@core_resources).mint_cap; - move_to(account, MintCapStore { mint_cap }); - } - - fun find_delegation(addr: address): Option acquires Delegations { - let delegations = &borrow_global(@core_resources).inner; - let i = 0; - let len = vector::length(delegations); - let index = option::none(); - while (i < len) { - let element = vector::borrow(delegations, i); - if (element.to == addr) { - index = option::some(i); - break - }; - i = i + 1; - }; - index - } - - #[test_only] - use aptos_framework::account; - #[test_only] - use aptos_framework::aggregator_factory; - #[test_only] - use aptos_framework::fungible_asset::FungibleAsset; - - #[test_only] - public fun mint_apt_fa_for_test(amount: u64): FungibleAsset acquires MintCapStore { - ensure_initialized_with_apt_fa_metadata_for_test(); - coin::coin_to_fungible_asset( - coin::mint( - amount, - &borrow_global(@aptos_framework).mint_cap - ) - ) - } - - #[test_only] - public fun ensure_initialized_with_apt_fa_metadata_for_test() { - let aptos_framework = account::create_signer_for_test(@aptos_framework); - if (!exists(@aptos_framework)) { - if (!aggregator_factory::aggregator_factory_exists_for_testing()) { - aggregator_factory::initialize_aggregator_factory_for_test(&aptos_framework); - }; - let (burn_cap, mint_cap) = initialize(&aptos_framework); - coin::destroy_burn_cap(burn_cap); - coin::destroy_mint_cap(mint_cap); - }; - coin::create_coin_conversion_map(&aptos_framework); - coin::create_pairing(&aptos_framework); - } - - #[test_only] - public fun initialize_for_test(aptos_framework: &signer): (BurnCapability, MintCapability) { - aggregator_factory::initialize_aggregator_factory_for_test(aptos_framework); - let (burn_cap, mint_cap) = initialize(aptos_framework); - coin::create_coin_conversion_map(aptos_framework); - coin::create_pairing(aptos_framework); - (burn_cap, mint_cap) - } - - // This is particularly useful if the aggregator_factory is already initialized via another call path. - #[test_only] - public fun initialize_for_test_without_aggregator_factory( - aptos_framework: &signer - ): (BurnCapability, MintCapability) { - let (burn_cap, mint_cap) = initialize(aptos_framework); - coin::create_coin_conversion_map(aptos_framework); - coin::create_pairing(aptos_framework); - (burn_cap, mint_cap) - } -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/aptos_governance.move b/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/aptos_governance.move deleted file mode 100644 index f44ba1b32..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/aptos_governance.move +++ /dev/null @@ -1,1390 +0,0 @@ -/// -/// AptosGovernance represents the on-chain governance of the Aptos network. Voting power is calculated based on the -/// current epoch's voting power of the proposer or voter's backing stake pool. In addition, for it to count, -/// the stake pool's lockup needs to be at least as long as the proposal's duration. -/// -/// It provides the following flow: -/// 1. Proposers can create a proposal by calling AptosGovernance::create_proposal. The proposer's backing stake pool -/// needs to have the minimum proposer stake required. Off-chain components can subscribe to CreateProposalEvent to -/// track proposal creation and proposal ids. -/// 2. Voters can vote on a proposal. Their voting power is derived from the backing stake pool. A stake pool can vote -/// on a proposal multiple times as long as the total voting power of these votes doesn't exceed its total voting power. -module aptos_framework::aptos_governance { - use std::error; - use std::option; - use std::signer; - use std::string::{Self, String, utf8}; - use std::vector; - use std::features; - - use aptos_std::math64::min; - use aptos_std::simple_map::{Self, SimpleMap}; - use aptos_std::smart_table::{Self, SmartTable}; - use aptos_std::table::{Self, Table}; - - use aptos_framework::account::{Self, SignerCapability, create_signer_with_capability}; - use aptos_framework::coin; - use aptos_framework::event::{Self, EventHandle}; - use aptos_framework::governance_proposal::{Self, GovernanceProposal}; - use aptos_framework::stake; - use aptos_framework::staking_config; - use aptos_framework::system_addresses; - use aptos_framework::aptos_coin::{Self, AptosCoin}; - use aptos_framework::consensus_config; - use aptos_framework::randomness_config; - use aptos_framework::reconfiguration_with_dkg; - use aptos_framework::timestamp; - use aptos_framework::voting; - - /// The specified stake pool does not have sufficient stake to create a proposal - const EINSUFFICIENT_PROPOSER_STAKE: u64 = 1; - /// This account is not the designated voter of the specified stake pool - const ENOT_DELEGATED_VOTER: u64 = 2; - /// The specified stake pool does not have long enough remaining lockup to create a proposal or vote - const EINSUFFICIENT_STAKE_LOCKUP: u64 = 3; - /// The specified stake pool has already been used to vote on the same proposal - const EALREADY_VOTED: u64 = 4; - /// The specified stake pool must be part of the validator set - const ENO_VOTING_POWER: u64 = 5; - /// Proposal is not ready to be resolved. Waiting on time or votes - const EPROPOSAL_NOT_RESOLVABLE_YET: u64 = 6; - /// The proposal has not been resolved yet - const EPROPOSAL_NOT_RESOLVED_YET: u64 = 8; - /// Metadata location cannot be longer than 256 chars - const EMETADATA_LOCATION_TOO_LONG: u64 = 9; - /// Metadata hash cannot be longer than 256 chars - const EMETADATA_HASH_TOO_LONG: u64 = 10; - /// Account is not authorized to call this function. - const EUNAUTHORIZED: u64 = 11; - /// The stake pool is using voting power more than it has. - const EVOTING_POWER_OVERFLOW: u64 = 12; - /// Partial voting feature hasn't been properly initialized. - const EPARTIAL_VOTING_NOT_INITIALIZED: u64 = 13; - /// The proposal in the argument is not a partial voting proposal. - const ENOT_PARTIAL_VOTING_PROPOSAL: u64 = 14; - - /// This matches the same enum const in voting. We have to duplicate it as Move doesn't have support for enums yet. - const PROPOSAL_STATE_SUCCEEDED: u64 = 1; - - const MAX_U64: u64 = 18446744073709551615; - - /// Proposal metadata attribute keys. - const METADATA_LOCATION_KEY: vector = b"metadata_location"; - const METADATA_HASH_KEY: vector = b"metadata_hash"; - - /// Store the SignerCapabilities of accounts under the on-chain governance's control. - struct GovernanceResponsbility has key { - signer_caps: SimpleMap, - } - - /// Configurations of the AptosGovernance, set during Genesis and can be updated by the same process offered - /// by this AptosGovernance module. - struct GovernanceConfig has key { - min_voting_threshold: u128, - required_proposer_stake: u64, - voting_duration_secs: u64, - } - - struct RecordKey has copy, drop, store { - stake_pool: address, - proposal_id: u64, - } - - /// Records to track the proposals each stake pool has been used to vote on. - struct VotingRecords has key { - votes: Table - } - - /// Records to track the voting power usage of each stake pool on each proposal. - struct VotingRecordsV2 has key { - votes: SmartTable - } - - /// Used to track which execution script hashes have been approved by governance. - /// This is required to bypass cases where the execution scripts exceed the size limit imposed by mempool. - struct ApprovedExecutionHashes has key { - hashes: SimpleMap>, - } - - /// Events generated by interactions with the AptosGovernance module. - struct GovernanceEvents has key { - create_proposal_events: EventHandle, - update_config_events: EventHandle, - vote_events: EventHandle, - } - - /// Event emitted when a proposal is created. - struct CreateProposalEvent has drop, store { - proposer: address, - stake_pool: address, - proposal_id: u64, - execution_hash: vector, - proposal_metadata: SimpleMap>, - } - - /// Event emitted when there's a vote on a proposa; - struct VoteEvent has drop, store { - proposal_id: u64, - voter: address, - stake_pool: address, - num_votes: u64, - should_pass: bool, - } - - /// Event emitted when the governance configs are updated. - struct UpdateConfigEvent has drop, store { - min_voting_threshold: u128, - required_proposer_stake: u64, - voting_duration_secs: u64, - } - - #[event] - /// Event emitted when a proposal is created. - struct CreateProposal has drop, store { - proposer: address, - stake_pool: address, - proposal_id: u64, - execution_hash: vector, - proposal_metadata: SimpleMap>, - } - - #[event] - /// Event emitted when there's a vote on a proposa; - struct Vote has drop, store { - proposal_id: u64, - voter: address, - stake_pool: address, - num_votes: u64, - should_pass: bool, - } - - #[event] - /// Event emitted when the governance configs are updated. - struct UpdateConfig has drop, store { - min_voting_threshold: u128, - required_proposer_stake: u64, - voting_duration_secs: u64, - } - - /// Can be called during genesis or by the governance itself. - /// Stores the signer capability for a given address. - public fun store_signer_cap( - aptos_framework: &signer, - signer_address: address, - signer_cap: SignerCapability, - ) acquires GovernanceResponsbility { - system_addresses::assert_aptos_framework(aptos_framework); - system_addresses::assert_framework_reserved(signer_address); - - if (!exists(@aptos_framework)) { - move_to( - aptos_framework, - GovernanceResponsbility { signer_caps: simple_map::create() } - ); - }; - - let signer_caps = &mut borrow_global_mut(@aptos_framework).signer_caps; - simple_map::add(signer_caps, signer_address, signer_cap); - } - - /// Initializes the state for Aptos Governance. Can only be called during Genesis with a signer - /// for the aptos_framework (0x1) account. - /// This function is private because it's called directly from the vm. - fun initialize( - aptos_framework: &signer, - min_voting_threshold: u128, - required_proposer_stake: u64, - voting_duration_secs: u64, - ) { - system_addresses::assert_aptos_framework(aptos_framework); - - voting::register(aptos_framework); - move_to(aptos_framework, GovernanceConfig { - voting_duration_secs, - min_voting_threshold, - required_proposer_stake, - }); - move_to(aptos_framework, GovernanceEvents { - create_proposal_events: account::new_event_handle(aptos_framework), - update_config_events: account::new_event_handle(aptos_framework), - vote_events: account::new_event_handle(aptos_framework), - }); - move_to(aptos_framework, VotingRecords { - votes: table::new(), - }); - move_to(aptos_framework, ApprovedExecutionHashes { - hashes: simple_map::create>(), - }) - } - - /// Update the governance configurations. This can only be called as part of resolving a proposal in this same - /// AptosGovernance. - public fun update_governance_config( - aptos_framework: &signer, - min_voting_threshold: u128, - required_proposer_stake: u64, - voting_duration_secs: u64, - ) acquires GovernanceConfig, GovernanceEvents { - system_addresses::assert_aptos_framework(aptos_framework); - - let governance_config = borrow_global_mut(@aptos_framework); - governance_config.voting_duration_secs = voting_duration_secs; - governance_config.min_voting_threshold = min_voting_threshold; - governance_config.required_proposer_stake = required_proposer_stake; - - if (std::features::module_event_migration_enabled()) { - event::emit( - UpdateConfig { - min_voting_threshold, - required_proposer_stake, - voting_duration_secs - }, - ) - } else { - let events = borrow_global_mut(@aptos_framework); - event::emit_event( - &mut events.update_config_events, - UpdateConfigEvent { - min_voting_threshold, - required_proposer_stake, - voting_duration_secs - }, - ); - }; - } - - /// Initializes the state for Aptos Governance partial voting. Can only be called through Aptos governance - /// proposals with a signer for the aptos_framework (0x1) account. - public fun initialize_partial_voting( - aptos_framework: &signer, - ) { - system_addresses::assert_aptos_framework(aptos_framework); - - move_to(aptos_framework, VotingRecordsV2 { - votes: smart_table::new(), - }); - } - - #[view] - public fun get_voting_duration_secs(): u64 acquires GovernanceConfig { - borrow_global(@aptos_framework).voting_duration_secs - } - - #[view] - public fun get_min_voting_threshold(): u128 acquires GovernanceConfig { - borrow_global(@aptos_framework).min_voting_threshold - } - - #[view] - public fun get_required_proposer_stake(): u64 acquires GovernanceConfig { - borrow_global(@aptos_framework).required_proposer_stake - } - - #[view] - /// Return true if a stake pool has already voted on a proposal before partial governance voting is enabled. - public fun has_entirely_voted(stake_pool: address, proposal_id: u64): bool acquires VotingRecords { - let record_key = RecordKey { - stake_pool, - proposal_id, - }; - // If a stake pool has already voted on a proposal before partial governance voting is enabled, - // there is a record in VotingRecords. - let voting_records = borrow_global(@aptos_framework); - table::contains(&voting_records.votes, record_key) - } - - #[view] - /// Return remaining voting power of a stake pool on a proposal. - /// Note: a stake pool's voting power on a proposal could increase over time(e.g. rewards/new stake). - public fun get_remaining_voting_power( - stake_pool: address, - proposal_id: u64 - ): u64 acquires VotingRecords, VotingRecordsV2 { - assert_voting_initialization(); - - let proposal_expiration = voting::get_proposal_expiration_secs( - @aptos_framework, - proposal_id - ); - let lockup_until = stake::get_lockup_secs(stake_pool); - // The voter's stake needs to be locked up at least as long as the proposal's expiration. - // Also no one can vote on a expired proposal. - if (proposal_expiration > lockup_until || timestamp::now_seconds() > proposal_expiration) { - return 0 - }; - - // If a stake pool has already voted on a proposal before partial governance voting is enabled, the stake pool - // cannot vote on the proposal even after partial governance voting is enabled. - if (has_entirely_voted(stake_pool, proposal_id)) { - return 0 - }; - let record_key = RecordKey { - stake_pool, - proposal_id, - }; - let used_voting_power = 0u64; - if (features::partial_governance_voting_enabled()) { - let voting_records_v2 = borrow_global(@aptos_framework); - used_voting_power = *smart_table::borrow_with_default(&voting_records_v2.votes, record_key, &0); - }; - get_voting_power(stake_pool) - used_voting_power - } - - /// Create a single-step proposal with the backing `stake_pool`. - /// @param execution_hash Required. This is the hash of the resolution script. When the proposal is resolved, - /// only the exact script with matching hash can be successfully executed. - public entry fun create_proposal( - proposer: &signer, - stake_pool: address, - execution_hash: vector, - metadata_location: vector, - metadata_hash: vector, - ) acquires GovernanceConfig, GovernanceEvents { - create_proposal_v2(proposer, stake_pool, execution_hash, metadata_location, metadata_hash, false); - } - - /// Create a single-step or multi-step proposal with the backing `stake_pool`. - /// @param execution_hash Required. This is the hash of the resolution script. When the proposal is resolved, - /// only the exact script with matching hash can be successfully executed. - public entry fun create_proposal_v2( - proposer: &signer, - stake_pool: address, - execution_hash: vector, - metadata_location: vector, - metadata_hash: vector, - is_multi_step_proposal: bool, - ) acquires GovernanceConfig, GovernanceEvents { - create_proposal_v2_impl( - proposer, - stake_pool, - execution_hash, - metadata_location, - metadata_hash, - is_multi_step_proposal - ); - } - - /// Create a single-step or multi-step proposal with the backing `stake_pool`. - /// @param execution_hash Required. This is the hash of the resolution script. When the proposal is resolved, - /// only the exact script with matching hash can be successfully executed. - /// Return proposal_id when a proposal is successfully created. - public fun create_proposal_v2_impl( - proposer: &signer, - stake_pool: address, - execution_hash: vector, - metadata_location: vector, - metadata_hash: vector, - is_multi_step_proposal: bool, - ): u64 acquires GovernanceConfig, GovernanceEvents { - let proposer_address = signer::address_of(proposer); - assert!( - stake::get_delegated_voter(stake_pool) == proposer_address, - error::invalid_argument(ENOT_DELEGATED_VOTER) - ); - - // The proposer's stake needs to be at least the required bond amount. - let governance_config = borrow_global(@aptos_framework); - let stake_balance = get_voting_power(stake_pool); - assert!( - stake_balance >= governance_config.required_proposer_stake, - error::invalid_argument(EINSUFFICIENT_PROPOSER_STAKE), - ); - - // The proposer's stake needs to be locked up at least as long as the proposal's voting period. - let current_time = timestamp::now_seconds(); - let proposal_expiration = current_time + governance_config.voting_duration_secs; - assert!( - stake::get_lockup_secs(stake_pool) >= proposal_expiration, - error::invalid_argument(EINSUFFICIENT_STAKE_LOCKUP), - ); - - // Create and validate proposal metadata. - let proposal_metadata = create_proposal_metadata(metadata_location, metadata_hash); - - // We want to allow early resolution of proposals if more than 50% of the total supply of the network coins - // has voted. This doesn't take into subsequent inflation/deflation (rewards are issued every epoch and gas fees - // are burnt after every transaction), but inflation/delation is very unlikely to have a major impact on total - // supply during the voting period. - let total_voting_token_supply = coin::supply(); - let early_resolution_vote_threshold = option::none(); - if (option::is_some(&total_voting_token_supply)) { - let total_supply = *option::borrow(&total_voting_token_supply); - // 50% + 1 to avoid rounding errors. - early_resolution_vote_threshold = option::some(total_supply / 2 + 1); - }; - - let proposal_id = voting::create_proposal_v2( - proposer_address, - @aptos_framework, - governance_proposal::create_proposal(), - execution_hash, - governance_config.min_voting_threshold, - proposal_expiration, - early_resolution_vote_threshold, - proposal_metadata, - is_multi_step_proposal, - ); - - if (std::features::module_event_migration_enabled()) { - event::emit( - CreateProposal { - proposal_id, - proposer: proposer_address, - stake_pool, - execution_hash, - proposal_metadata, - }, - ); - } else { - let events = borrow_global_mut(@aptos_framework); - event::emit_event( - &mut events.create_proposal_events, - CreateProposalEvent { - proposal_id, - proposer: proposer_address, - stake_pool, - execution_hash, - proposal_metadata, - }, - ); - }; - proposal_id - } - - /// Vote on proposal with proposal_id and all voting power from multiple stake_pools. - public entry fun batch_vote( - voter: &signer, - stake_pools: vector
, - proposal_id: u64, - should_pass: bool, - ) acquires ApprovedExecutionHashes, VotingRecords, VotingRecordsV2, GovernanceEvents { - vector::for_each(stake_pools, |stake_pool| { - vote_internal(voter, stake_pool, proposal_id, MAX_U64, should_pass); - }); - } - - /// Batch vote on proposal with proposal_id and specified voting power from multiple stake_pools. - public entry fun batch_partial_vote( - voter: &signer, - stake_pools: vector
, - proposal_id: u64, - voting_power: u64, - should_pass: bool, - ) acquires ApprovedExecutionHashes, VotingRecords, VotingRecordsV2, GovernanceEvents { - vector::for_each(stake_pools, |stake_pool| { - vote_internal(voter, stake_pool, proposal_id, voting_power, should_pass); - }); - } - - /// Vote on proposal with `proposal_id` and all voting power from `stake_pool`. - public entry fun vote( - voter: &signer, - stake_pool: address, - proposal_id: u64, - should_pass: bool, - ) acquires ApprovedExecutionHashes, VotingRecords, VotingRecordsV2, GovernanceEvents { - vote_internal(voter, stake_pool, proposal_id, MAX_U64, should_pass); - } - - /// Vote on proposal with `proposal_id` and specified voting power from `stake_pool`. - public entry fun partial_vote( - voter: &signer, - stake_pool: address, - proposal_id: u64, - voting_power: u64, - should_pass: bool, - ) acquires ApprovedExecutionHashes, VotingRecords, VotingRecordsV2, GovernanceEvents { - vote_internal(voter, stake_pool, proposal_id, voting_power, should_pass); - } - - /// Vote on proposal with `proposal_id` and specified voting_power from `stake_pool`. - /// If voting_power is more than all the left voting power of `stake_pool`, use all the left voting power. - /// If a stake pool has already voted on a proposal before partial governance voting is enabled, the stake pool - /// cannot vote on the proposal even after partial governance voting is enabled. - fun vote_internal( - voter: &signer, - stake_pool: address, - proposal_id: u64, - voting_power: u64, - should_pass: bool, - ) acquires ApprovedExecutionHashes, VotingRecords, VotingRecordsV2, GovernanceEvents { - let voter_address = signer::address_of(voter); - assert!(stake::get_delegated_voter(stake_pool) == voter_address, error::invalid_argument(ENOT_DELEGATED_VOTER)); - - // The voter's stake needs to be locked up at least as long as the proposal's expiration. - let proposal_expiration = voting::get_proposal_expiration_secs( - @aptos_framework, - proposal_id - ); - assert!( - stake::get_lockup_secs(stake_pool) >= proposal_expiration, - error::invalid_argument(EINSUFFICIENT_STAKE_LOCKUP), - ); - - // If a stake pool has already voted on a proposal before partial governance voting is enabled, - // `get_remaining_voting_power` returns 0. - let staking_pool_voting_power = get_remaining_voting_power(stake_pool, proposal_id); - voting_power = min(voting_power, staking_pool_voting_power); - - // Short-circuit if the voter has no voting power. - assert!(voting_power > 0, error::invalid_argument(ENO_VOTING_POWER)); - - voting::vote( - &governance_proposal::create_empty_proposal(), - @aptos_framework, - proposal_id, - voting_power, - should_pass, - ); - - let record_key = RecordKey { - stake_pool, - proposal_id, - }; - if (features::partial_governance_voting_enabled()) { - let voting_records_v2 = borrow_global_mut(@aptos_framework); - let used_voting_power = smart_table::borrow_mut_with_default(&mut voting_records_v2.votes, record_key, 0); - // This calculation should never overflow because the used voting cannot exceed the total voting power of this stake pool. - *used_voting_power = *used_voting_power + voting_power; - } else { - let voting_records = borrow_global_mut(@aptos_framework); - assert!( - !table::contains(&voting_records.votes, record_key), - error::invalid_argument(EALREADY_VOTED)); - table::add(&mut voting_records.votes, record_key, true); - }; - - if (std::features::module_event_migration_enabled()) { - event::emit( - Vote { - proposal_id, - voter: voter_address, - stake_pool, - num_votes: voting_power, - should_pass, - }, - ); - } else { - let events = borrow_global_mut(@aptos_framework); - event::emit_event( - &mut events.vote_events, - VoteEvent { - proposal_id, - voter: voter_address, - stake_pool, - num_votes: voting_power, - should_pass, - }, - ); - }; - - let proposal_state = voting::get_proposal_state(@aptos_framework, proposal_id); - if (proposal_state == PROPOSAL_STATE_SUCCEEDED) { - add_approved_script_hash(proposal_id); - } - } - - public entry fun add_approved_script_hash_script(proposal_id: u64) acquires ApprovedExecutionHashes { - add_approved_script_hash(proposal_id) - } - - /// Add the execution script hash of a successful governance proposal to the approved list. - /// This is needed to bypass the mempool transaction size limit for approved governance proposal transactions that - /// are too large (e.g. module upgrades). - public fun add_approved_script_hash(proposal_id: u64) acquires ApprovedExecutionHashes { - let approved_hashes = borrow_global_mut(@aptos_framework); - - // Ensure the proposal can be resolved. - let proposal_state = voting::get_proposal_state(@aptos_framework, proposal_id); - assert!(proposal_state == PROPOSAL_STATE_SUCCEEDED, error::invalid_argument(EPROPOSAL_NOT_RESOLVABLE_YET)); - - let execution_hash = voting::get_execution_hash(@aptos_framework, proposal_id); - - // If this is a multi-step proposal, the proposal id will already exist in the ApprovedExecutionHashes map. - // We will update execution hash in ApprovedExecutionHashes to be the next_execution_hash. - if (simple_map::contains_key(&approved_hashes.hashes, &proposal_id)) { - let current_execution_hash = simple_map::borrow_mut(&mut approved_hashes.hashes, &proposal_id); - *current_execution_hash = execution_hash; - } else { - simple_map::add(&mut approved_hashes.hashes, proposal_id, execution_hash); - } - } - - /// Resolve a successful single-step proposal. This would fail if the proposal is not successful (not enough votes or more no - /// than yes). - public fun resolve( - proposal_id: u64, - signer_address: address - ): signer acquires ApprovedExecutionHashes, GovernanceResponsbility { - voting::resolve(@aptos_framework, proposal_id); - remove_approved_hash(proposal_id); - get_signer(signer_address) - } - - /// Resolve a successful multi-step proposal. This would fail if the proposal is not successful. - public fun resolve_multi_step_proposal( - proposal_id: u64, - signer_address: address, - next_execution_hash: vector - ): signer acquires GovernanceResponsbility, ApprovedExecutionHashes { - voting::resolve_proposal_v2(@aptos_framework, proposal_id, next_execution_hash); - // If the current step is the last step of this multi-step proposal, - // we will remove the execution hash from the ApprovedExecutionHashes map. - if (vector::length(&next_execution_hash) == 0) { - remove_approved_hash(proposal_id); - } else { - // If the current step is not the last step of this proposal, - // we replace the current execution hash with the next execution hash - // in the ApprovedExecutionHashes map. - add_approved_script_hash(proposal_id) - }; - get_signer(signer_address) - } - - /// Remove an approved proposal's execution script hash. - public fun remove_approved_hash(proposal_id: u64) acquires ApprovedExecutionHashes { - assert!( - voting::is_resolved(@aptos_framework, proposal_id), - error::invalid_argument(EPROPOSAL_NOT_RESOLVED_YET), - ); - - let approved_hashes = &mut borrow_global_mut(@aptos_framework).hashes; - if (simple_map::contains_key(approved_hashes, &proposal_id)) { - simple_map::remove(approved_hashes, &proposal_id); - }; - } - - /// Manually reconfigure. Called at the end of a governance txn that alters on-chain configs. - /// - /// WARNING: this function always ensures a reconfiguration starts, but when the reconfiguration finishes depends. - /// - If feature `RECONFIGURE_WITH_DKG` is disabled, it finishes immediately. - /// - At the end of the calling transaction, we will be in a new epoch. - /// - If feature `RECONFIGURE_WITH_DKG` is enabled, it starts DKG, and the new epoch will start in a block prologue after DKG finishes. - /// - /// This behavior affects when an update of an on-chain config (e.g. `ConsensusConfig`, `Features`) takes effect, - /// since such updates are applied whenever we enter an new epoch. - public entry fun reconfigure(aptos_framework: &signer) { - system_addresses::assert_aptos_framework(aptos_framework); - if (consensus_config::validator_txn_enabled() && randomness_config::enabled()) { - reconfiguration_with_dkg::try_start(); - } else { - reconfiguration_with_dkg::finish(aptos_framework); - } - } - - /// Change epoch immediately. - /// If `RECONFIGURE_WITH_DKG` is enabled and we are in the middle of a DKG, - /// stop waiting for DKG and enter the new epoch without randomness. - /// - /// WARNING: currently only used by tests. In most cases you should use `reconfigure()` instead. - /// TODO: migrate these tests to be aware of async reconfiguration. - public entry fun force_end_epoch(aptos_framework: &signer) { - system_addresses::assert_aptos_framework(aptos_framework); - reconfiguration_with_dkg::finish(aptos_framework); - } - - /// `force_end_epoch()` equivalent but only called in testnet, - /// where the core resources account exists and has been granted power to mint Aptos coins. - public entry fun force_end_epoch_test_only(aptos_framework: &signer) acquires GovernanceResponsbility { - let core_signer = get_signer_testnet_only(aptos_framework, @0x1); - system_addresses::assert_aptos_framework(&core_signer); - reconfiguration_with_dkg::finish(&core_signer); - } - - /// Update feature flags and also trigger reconfiguration. - public fun toggle_features(aptos_framework: &signer, enable: vector, disable: vector) { - system_addresses::assert_aptos_framework(aptos_framework); - features::change_feature_flags_for_next_epoch(aptos_framework, enable, disable); - reconfigure(aptos_framework); - } - - /// Only called in testnet where the core resources account exists and has been granted power to mint Aptos coins. - public fun get_signer_testnet_only( - core_resources: &signer, signer_address: address): signer acquires GovernanceResponsbility { - system_addresses::assert_core_resource(core_resources); - // Core resources account only has mint capability in tests/testnets. - assert!(aptos_coin::has_mint_capability(core_resources), error::unauthenticated(EUNAUTHORIZED)); - get_signer(signer_address) - } - - #[view] - /// Return the voting power a stake pool has with respect to governance proposals. - public fun get_voting_power(pool_address: address): u64 { - let allow_validator_set_change = staking_config::get_allow_validator_set_change(&staking_config::get()); - if (allow_validator_set_change) { - let (active, _, pending_active, pending_inactive) = stake::get_stake(pool_address); - // We calculate the voting power as total non-inactive stakes of the pool. Even if the validator is not in the - // active validator set, as long as they have a lockup (separately checked in create_proposal and voting), their - // stake would still count in their voting power for governance proposals. - active + pending_active + pending_inactive - } else { - stake::get_current_epoch_voting_power(pool_address) - } - } - - /// Return a signer for making changes to 0x1 as part of on-chain governance proposal process. - fun get_signer(signer_address: address): signer acquires GovernanceResponsbility { - let governance_responsibility = borrow_global(@aptos_framework); - let signer_cap = simple_map::borrow(&governance_responsibility.signer_caps, &signer_address); - create_signer_with_capability(signer_cap) - } - - fun create_proposal_metadata( - metadata_location: vector, - metadata_hash: vector - ): SimpleMap> { - assert!(string::length(&utf8(metadata_location)) <= 256, error::invalid_argument(EMETADATA_LOCATION_TOO_LONG)); - assert!(string::length(&utf8(metadata_hash)) <= 256, error::invalid_argument(EMETADATA_HASH_TOO_LONG)); - - let metadata = simple_map::create>(); - simple_map::add(&mut metadata, utf8(METADATA_LOCATION_KEY), metadata_location); - simple_map::add(&mut metadata, utf8(METADATA_HASH_KEY), metadata_hash); - metadata - } - - fun assert_voting_initialization() { - if (features::partial_governance_voting_enabled()) { - assert!(exists(@aptos_framework), error::invalid_state(EPARTIAL_VOTING_NOT_INITIALIZED)); - }; - } - - #[test_only] - public entry fun create_proposal_for_test( - proposer: &signer, - multi_step: bool, - ) acquires GovernanceConfig, GovernanceEvents { - let execution_hash = vector::empty(); - vector::push_back(&mut execution_hash, 1); - if (multi_step) { - create_proposal_v2( - proposer, - signer::address_of(proposer), - execution_hash, - b"", - b"", - true, - ); - } else { - create_proposal( - proposer, - signer::address_of(proposer), - execution_hash, - b"", - b"", - ); - }; - } - - #[test_only] - public fun resolve_proposal_for_test( - proposal_id: u64, - signer_address: address, - multi_step: bool, - finish_multi_step_execution: bool - ): signer acquires ApprovedExecutionHashes, GovernanceResponsbility { - if (multi_step) { - let execution_hash = vector::empty(); - vector::push_back(&mut execution_hash, 1); - - if (finish_multi_step_execution) { - resolve_multi_step_proposal(proposal_id, signer_address, vector::empty()) - } else { - resolve_multi_step_proposal(proposal_id, signer_address, execution_hash) - } - } else { - resolve(proposal_id, signer_address) - } - } - - #[test_only] - /// Force reconfigure. To be called at the end of a proposal that alters on-chain configs. - public fun toggle_features_for_test(enable: vector, disable: vector) { - toggle_features(&account::create_signer_for_test(@0x1), enable, disable); - } - - #[test_only] - public entry fun test_voting_generic( - aptos_framework: signer, - proposer: signer, - yes_voter: signer, - no_voter: signer, - multi_step: bool, - use_generic_resolve_function: bool, - ) acquires ApprovedExecutionHashes, GovernanceConfig, GovernanceResponsbility, VotingRecords, VotingRecordsV2, GovernanceEvents { - setup_voting(&aptos_framework, &proposer, &yes_voter, &no_voter); - - let execution_hash = vector::empty(); - vector::push_back(&mut execution_hash, 1); - - create_proposal_for_test(&proposer, multi_step); - - vote(&yes_voter, signer::address_of(&yes_voter), 0, true); - vote(&no_voter, signer::address_of(&no_voter), 0, false); - - test_resolving_proposal_generic(aptos_framework, use_generic_resolve_function, execution_hash); - } - - #[test_only] - public entry fun test_resolving_proposal_generic( - aptos_framework: signer, - use_generic_resolve_function: bool, - execution_hash: vector, - ) acquires ApprovedExecutionHashes, GovernanceResponsbility { - // Once expiration time has passed, the proposal should be considered resolve now as there are more yes votes - // than no. - timestamp::update_global_time_for_test(100001000000); - let proposal_state = voting::get_proposal_state(signer::address_of(&aptos_framework), 0); - assert!(proposal_state == PROPOSAL_STATE_SUCCEEDED, proposal_state); - - // Add approved script hash. - add_approved_script_hash(0); - let approved_hashes = borrow_global(@aptos_framework).hashes; - assert!(*simple_map::borrow(&approved_hashes, &0) == execution_hash, 0); - - // Resolve the proposal. - let account = resolve_proposal_for_test(0, @aptos_framework, use_generic_resolve_function, true); - assert!(signer::address_of(&account) == @aptos_framework, 1); - assert!(voting::is_resolved(@aptos_framework, 0), 2); - let approved_hashes = borrow_global(@aptos_framework).hashes; - assert!(!simple_map::contains_key(&approved_hashes, &0), 3); - } - - #[test(aptos_framework = @aptos_framework, proposer = @0x123, yes_voter = @0x234, no_voter = @345)] - public entry fun test_voting( - aptos_framework: signer, - proposer: signer, - yes_voter: signer, - no_voter: signer, - ) acquires ApprovedExecutionHashes, GovernanceConfig, GovernanceResponsbility, VotingRecords, VotingRecordsV2, GovernanceEvents { - test_voting_generic(aptos_framework, proposer, yes_voter, no_voter, false, false); - } - - #[test(aptos_framework = @aptos_framework, proposer = @0x123, yes_voter = @0x234, no_voter = @345)] - public entry fun test_voting_multi_step( - aptos_framework: signer, - proposer: signer, - yes_voter: signer, - no_voter: signer, - ) acquires ApprovedExecutionHashes, GovernanceConfig, GovernanceResponsbility, VotingRecords, VotingRecordsV2, GovernanceEvents { - test_voting_generic(aptos_framework, proposer, yes_voter, no_voter, true, true); - } - - #[test(aptos_framework = @aptos_framework, proposer = @0x123, yes_voter = @0x234, no_voter = @345)] - #[expected_failure(abort_code = 0x5000a, location = aptos_framework::voting)] - public entry fun test_voting_multi_step_cannot_use_single_step_resolve( - aptos_framework: signer, - proposer: signer, - yes_voter: signer, - no_voter: signer, - ) acquires ApprovedExecutionHashes, GovernanceConfig, GovernanceResponsbility, VotingRecords, VotingRecordsV2, GovernanceEvents { - test_voting_generic(aptos_framework, proposer, yes_voter, no_voter, true, false); - } - - #[test(aptos_framework = @aptos_framework, proposer = @0x123, yes_voter = @0x234, no_voter = @345)] - public entry fun test_voting_single_step_can_use_generic_resolve_function( - aptos_framework: signer, - proposer: signer, - yes_voter: signer, - no_voter: signer, - ) acquires ApprovedExecutionHashes, GovernanceConfig, GovernanceResponsbility, VotingRecords, VotingRecordsV2, GovernanceEvents { - test_voting_generic(aptos_framework, proposer, yes_voter, no_voter, false, true); - } - - #[test_only] - public entry fun test_can_remove_approved_hash_if_executed_directly_via_voting_generic( - aptos_framework: signer, - proposer: signer, - yes_voter: signer, - no_voter: signer, - multi_step: bool, - ) acquires ApprovedExecutionHashes, GovernanceConfig, GovernanceResponsbility, VotingRecords, VotingRecordsV2, GovernanceEvents { - setup_voting(&aptos_framework, &proposer, &yes_voter, &no_voter); - - create_proposal_for_test(&proposer, multi_step); - vote(&yes_voter, signer::address_of(&yes_voter), 0, true); - vote(&no_voter, signer::address_of(&no_voter), 0, false); - - // Add approved script hash. - timestamp::update_global_time_for_test(100001000000); - add_approved_script_hash(0); - - // Resolve the proposal. - if (multi_step) { - let execution_hash = vector::empty(); - let next_execution_hash = vector::empty(); - vector::push_back(&mut execution_hash, 1); - voting::resolve_proposal_v2(@aptos_framework, 0, next_execution_hash); - assert!(voting::is_resolved(@aptos_framework, 0), 0); - if (vector::length(&next_execution_hash) == 0) { - remove_approved_hash(0); - } else { - add_approved_script_hash(0) - }; - } else { - voting::resolve(@aptos_framework, 0); - assert!(voting::is_resolved(@aptos_framework, 0), 0); - remove_approved_hash(0); - }; - let approved_hashes = borrow_global(@aptos_framework).hashes; - assert!(!simple_map::contains_key(&approved_hashes, &0), 1); - } - - #[test(aptos_framework = @aptos_framework, proposer = @0x123, yes_voter = @0x234, no_voter = @345)] - public entry fun test_can_remove_approved_hash_if_executed_directly_via_voting( - aptos_framework: signer, - proposer: signer, - yes_voter: signer, - no_voter: signer, - ) acquires ApprovedExecutionHashes, GovernanceConfig, GovernanceResponsbility, VotingRecords, VotingRecordsV2, GovernanceEvents { - test_can_remove_approved_hash_if_executed_directly_via_voting_generic( - aptos_framework, - proposer, - yes_voter, - no_voter, - false - ); - } - - #[test(aptos_framework = @aptos_framework, proposer = @0x123, yes_voter = @0x234, no_voter = @345)] - public entry fun test_can_remove_approved_hash_if_executed_directly_via_voting_multi_step( - aptos_framework: signer, - proposer: signer, - yes_voter: signer, - no_voter: signer, - ) acquires ApprovedExecutionHashes, GovernanceConfig, GovernanceResponsbility, VotingRecords, VotingRecordsV2, GovernanceEvents { - test_can_remove_approved_hash_if_executed_directly_via_voting_generic( - aptos_framework, - proposer, - yes_voter, - no_voter, - true - ); - } - - #[test(aptos_framework = @aptos_framework, proposer = @0x123, voter_1 = @0x234, voter_2 = @345)] - #[expected_failure(abort_code = 0x10004, location = aptos_framework::voting)] - public entry fun test_cannot_double_vote( - aptos_framework: signer, - proposer: signer, - voter_1: signer, - voter_2: signer, - ) acquires ApprovedExecutionHashes, GovernanceConfig, GovernanceResponsbility, VotingRecords, VotingRecordsV2, GovernanceEvents { - setup_voting(&aptos_framework, &proposer, &voter_1, &voter_2); - - create_proposal( - &proposer, - signer::address_of(&proposer), - b"", - b"", - b"", - ); - - // Double voting should throw an error. - vote(&voter_1, signer::address_of(&voter_1), 0, true); - vote(&voter_1, signer::address_of(&voter_1), 0, true); - } - - #[test(aptos_framework = @aptos_framework, proposer = @0x123, voter_1 = @0x234, voter_2 = @345)] - #[expected_failure(abort_code = 0x10004, location = aptos_framework::voting)] - public entry fun test_cannot_double_vote_with_different_voter_addresses( - aptos_framework: signer, - proposer: signer, - voter_1: signer, - voter_2: signer, - ) acquires ApprovedExecutionHashes, GovernanceConfig, GovernanceResponsbility, VotingRecords, VotingRecordsV2, GovernanceEvents { - setup_voting(&aptos_framework, &proposer, &voter_1, &voter_2); - - create_proposal( - &proposer, - signer::address_of(&proposer), - b"", - b"", - b"", - ); - - // Double voting should throw an error for 2 different voters if they still use the same stake pool. - vote(&voter_1, signer::address_of(&voter_1), 0, true); - stake::set_delegated_voter(&voter_1, signer::address_of(&voter_2)); - vote(&voter_2, signer::address_of(&voter_1), 0, true); - } - - #[test(aptos_framework = @aptos_framework, proposer = @0x123, voter_1 = @0x234, voter_2 = @345)] - public entry fun test_stake_pool_can_vote_on_partial_voting_proposal_many_times( - aptos_framework: signer, - proposer: signer, - voter_1: signer, - voter_2: signer, - ) acquires ApprovedExecutionHashes, GovernanceConfig, GovernanceResponsbility, VotingRecords, VotingRecordsV2, GovernanceEvents { - setup_partial_voting(&aptos_framework, &proposer, &voter_1, &voter_2); - let execution_hash = vector::empty(); - vector::push_back(&mut execution_hash, 1); - let proposer_addr = signer::address_of(&proposer); - let voter_1_addr = signer::address_of(&voter_1); - let voter_2_addr = signer::address_of(&voter_2); - - create_proposal_for_test(&proposer, true); - - partial_vote(&voter_1, voter_1_addr, 0, 5, true); - partial_vote(&voter_1, voter_1_addr, 0, 3, true); - partial_vote(&voter_1, voter_1_addr, 0, 2, true); - - assert!(get_remaining_voting_power(proposer_addr, 0) == 100, 0); - assert!(get_remaining_voting_power(voter_1_addr, 0) == 10, 1); - assert!(get_remaining_voting_power(voter_2_addr, 0) == 10, 2); - - test_resolving_proposal_generic(aptos_framework, true, execution_hash); - } - - #[test(aptos_framework = @aptos_framework, proposer = @0x123, voter_1 = @0x234, voter_2 = @345)] - #[expected_failure(abort_code = 0x3, location = Self)] - public entry fun test_stake_pool_can_vote_with_partial_voting_power( - aptos_framework: signer, - proposer: signer, - voter_1: signer, - voter_2: signer, - ) acquires ApprovedExecutionHashes, GovernanceConfig, GovernanceResponsbility, VotingRecords, VotingRecordsV2, GovernanceEvents { - setup_partial_voting(&aptos_framework, &proposer, &voter_1, &voter_2); - let execution_hash = vector::empty(); - vector::push_back(&mut execution_hash, 1); - let proposer_addr = signer::address_of(&proposer); - let voter_1_addr = signer::address_of(&voter_1); - let voter_2_addr = signer::address_of(&voter_2); - - create_proposal_for_test(&proposer, true); - - partial_vote(&voter_1, voter_1_addr, 0, 9, true); - - assert!(get_remaining_voting_power(proposer_addr, 0) == 100, 0); - assert!(get_remaining_voting_power(voter_1_addr, 0) == 11, 1); - assert!(get_remaining_voting_power(voter_2_addr, 0) == 10, 2); - - // No enough Yes. The proposal cannot be resolved. - test_resolving_proposal_generic(aptos_framework, true, execution_hash); - } - - #[test(aptos_framework = @aptos_framework, proposer = @0x123, voter_1 = @0x234, voter_2 = @345)] - public entry fun test_batch_vote( - aptos_framework: signer, - proposer: signer, - voter_1: signer, - voter_2: signer, - ) acquires ApprovedExecutionHashes, GovernanceConfig, GovernanceResponsbility, VotingRecords, VotingRecordsV2, GovernanceEvents { - features::change_feature_flags_for_testing(&aptos_framework, vector[features::get_coin_to_fungible_asset_migration_feature()], vector[]); - setup_partial_voting(&aptos_framework, &proposer, &voter_1, &voter_2); - let execution_hash = vector::empty(); - vector::push_back(&mut execution_hash, 1); - let voter_1_addr = signer::address_of(&voter_1); - let voter_2_addr = signer::address_of(&voter_2); - stake::set_delegated_voter(&voter_2, voter_1_addr); - create_proposal_for_test(&proposer, true); - batch_vote(&voter_1, vector[voter_1_addr, voter_2_addr], 0, true); - test_resolving_proposal_generic(aptos_framework, true, execution_hash); - } - - #[test(aptos_framework = @aptos_framework, proposer = @0x123, voter_1 = @0x234, voter_2 = @345)] - public entry fun test_batch_partial_vote( - aptos_framework: signer, - proposer: signer, - voter_1: signer, - voter_2: signer, - ) acquires ApprovedExecutionHashes, GovernanceConfig, GovernanceResponsbility, VotingRecords, VotingRecordsV2, GovernanceEvents { - features::change_feature_flags_for_testing(&aptos_framework, vector[features::get_coin_to_fungible_asset_migration_feature()], vector[]); - setup_partial_voting(&aptos_framework, &proposer, &voter_1, &voter_2); - let execution_hash = vector::empty(); - vector::push_back(&mut execution_hash, 1); - let voter_1_addr = signer::address_of(&voter_1); - let voter_2_addr = signer::address_of(&voter_2); - stake::set_delegated_voter(&voter_2, voter_1_addr); - create_proposal_for_test(&proposer, true); - batch_partial_vote(&voter_1, vector[voter_1_addr, voter_2_addr], 0, 9, true); - test_resolving_proposal_generic(aptos_framework, true, execution_hash); - } - - #[test(aptos_framework = @aptos_framework, proposer = @0x123, voter_1 = @0x234, voter_2 = @345)] - public entry fun test_stake_pool_can_vote_only_with_its_own_voting_power( - aptos_framework: signer, - proposer: signer, - voter_1: signer, - voter_2: signer, - ) acquires ApprovedExecutionHashes, GovernanceConfig, GovernanceResponsbility, VotingRecords, VotingRecordsV2, GovernanceEvents { - setup_partial_voting(&aptos_framework, &proposer, &voter_1, &voter_2); - let execution_hash = vector::empty(); - vector::push_back(&mut execution_hash, 1); - let proposer_addr = signer::address_of(&proposer); - let voter_1_addr = signer::address_of(&voter_1); - let voter_2_addr = signer::address_of(&voter_2); - - create_proposal_for_test(&proposer, true); - - partial_vote(&voter_1, voter_1_addr, 0, 9, true); - // The total voting power of voter_1 is 20. It can only vote with 20 voting power even we pass 30 as the argument. - partial_vote(&voter_1, voter_1_addr, 0, 30, true); - - assert!(get_remaining_voting_power(proposer_addr, 0) == 100, 0); - assert!(get_remaining_voting_power(voter_1_addr, 0) == 0, 1); - assert!(get_remaining_voting_power(voter_2_addr, 0) == 10, 2); - - test_resolving_proposal_generic(aptos_framework, true, execution_hash); - } - - #[test(aptos_framework = @aptos_framework, proposer = @0x123, voter_1 = @0x234, voter_2 = @345)] - public entry fun test_stake_pool_can_vote_before_and_after_partial_governance_voting_enabled( - aptos_framework: signer, - proposer: signer, - voter_1: signer, - voter_2: signer, - ) acquires ApprovedExecutionHashes, GovernanceConfig, GovernanceResponsbility, VotingRecords, VotingRecordsV2, GovernanceEvents { - setup_voting(&aptos_framework, &proposer, &voter_1, &voter_2); - let execution_hash = vector::empty(); - vector::push_back(&mut execution_hash, 1); - let proposer_addr = signer::address_of(&proposer); - let voter_1_addr = signer::address_of(&voter_1); - let voter_2_addr = signer::address_of(&voter_2); - - create_proposal_for_test(&proposer, true); - vote(&voter_1, voter_1_addr, 0, true); - assert!(get_remaining_voting_power(proposer_addr, 0) == 100, 0); - assert!(get_remaining_voting_power(voter_1_addr, 0) == 0, 1); - assert!(get_remaining_voting_power(voter_2_addr, 0) == 10, 2); - - initialize_partial_voting(&aptos_framework); - features::change_feature_flags_for_testing(&aptos_framework, vector[features::get_partial_governance_voting()], vector[]); - - coin::register(&voter_1); - coin::register(&voter_2); - stake::add_stake(&voter_1, 20); - stake::add_stake(&voter_2, 5); - - // voter1 has already voted before partial governance voting is enalbed. So it cannot vote even after adding stake. - // voter2's voting poewr increase after adding stake. - assert!(get_remaining_voting_power(proposer_addr, 0) == 100, 0); - assert!(get_remaining_voting_power(voter_1_addr, 0) == 0, 1); - assert!(get_remaining_voting_power(voter_2_addr, 0) == 15, 2); - - test_resolving_proposal_generic(aptos_framework, true, execution_hash); - } - - #[test(aptos_framework = @aptos_framework, proposer = @0x123, voter_1 = @0x234, voter_2 = @345)] - public entry fun test_no_remaining_voting_power_about_proposal_expiration_time( - aptos_framework: signer, - proposer: signer, - voter_1: signer, - voter_2: signer, - ) acquires GovernanceConfig, GovernanceResponsbility, VotingRecords, VotingRecordsV2, GovernanceEvents { - setup_voting_with_initialized_stake(&aptos_framework, &proposer, &voter_1, &voter_2); - let execution_hash = vector::empty(); - vector::push_back(&mut execution_hash, 1); - let proposer_addr = signer::address_of(&proposer); - let voter_1_addr = signer::address_of(&voter_1); - let voter_2_addr = signer::address_of(&voter_2); - - create_proposal_for_test(&proposer, true); - assert!(get_remaining_voting_power(proposer_addr, 0) == 100, 0); - assert!(get_remaining_voting_power(voter_1_addr, 0) == 0, 1); - assert!(get_remaining_voting_power(voter_2_addr, 0) == 0, 2); - - // 500 seconds later, lockup period of voter_1 and voter_2 is reset. - timestamp::fast_forward_seconds(440); - stake::end_epoch(); - assert!(get_remaining_voting_power(proposer_addr, 0) == 100, 0); - assert!(get_remaining_voting_power(voter_1_addr, 0) == 20, 1); - assert!(get_remaining_voting_power(voter_2_addr, 0) == 10, 2); - - // 501 seconds later, the proposal expires. - timestamp::fast_forward_seconds(441); - stake::end_epoch(); - assert!(get_remaining_voting_power(proposer_addr, 0) == 0, 0); - assert!(get_remaining_voting_power(voter_1_addr, 0) == 0, 1); - assert!(get_remaining_voting_power(voter_2_addr, 0) == 0, 2); - } - - #[test_only] - public fun setup_voting( - aptos_framework: &signer, - proposer: &signer, - yes_voter: &signer, - no_voter: &signer, - ) acquires GovernanceResponsbility { - use std::vector; - use aptos_framework::account; - use aptos_framework::coin; - use aptos_framework::aptos_coin::{Self, AptosCoin}; - - timestamp::set_time_has_started_for_testing(aptos_framework); - account::create_account_for_test(signer::address_of(aptos_framework)); - account::create_account_for_test(signer::address_of(proposer)); - account::create_account_for_test(signer::address_of(yes_voter)); - account::create_account_for_test(signer::address_of(no_voter)); - - // Initialize the governance. - staking_config::initialize_for_test(aptos_framework, 0, 1000, 2000, true, 0, 1, 100); - initialize(aptos_framework, 10, 100, 1000); - store_signer_cap( - aptos_framework, - @aptos_framework, - account::create_test_signer_cap(@aptos_framework), - ); - - // Initialize the stake pools for proposer and voters. - let active_validators = vector::empty
(); - vector::push_back(&mut active_validators, signer::address_of(proposer)); - vector::push_back(&mut active_validators, signer::address_of(yes_voter)); - vector::push_back(&mut active_validators, signer::address_of(no_voter)); - let (_sk_1, pk_1, _pop_1) = stake::generate_identity(); - let (_sk_2, pk_2, _pop_2) = stake::generate_identity(); - let (_sk_3, pk_3, _pop_3) = stake::generate_identity(); - let pks = vector[pk_1, pk_2, pk_3]; - stake::create_validator_set(aptos_framework, active_validators, pks); - - let (burn_cap, mint_cap) = aptos_coin::initialize_for_test(aptos_framework); - // Spread stake among active and pending_inactive because both need to be accounted for when computing voting - // power. - coin::register(proposer); - coin::deposit(signer::address_of(proposer), coin::mint(100, &mint_cap)); - coin::register(yes_voter); - coin::deposit(signer::address_of(yes_voter), coin::mint(20, &mint_cap)); - coin::register(no_voter); - coin::deposit(signer::address_of(no_voter), coin::mint(10, &mint_cap)); - stake::create_stake_pool(proposer, coin::mint(50, &mint_cap), coin::mint(50, &mint_cap), 10000); - stake::create_stake_pool(yes_voter, coin::mint(10, &mint_cap), coin::mint(10, &mint_cap), 10000); - stake::create_stake_pool(no_voter, coin::mint(5, &mint_cap), coin::mint(5, &mint_cap), 10000); - coin::destroy_mint_cap(mint_cap); - coin::destroy_burn_cap(burn_cap); - } - - #[test_only] - public fun setup_voting_with_initialized_stake( - aptos_framework: &signer, - proposer: &signer, - yes_voter: &signer, - no_voter: &signer, - ) acquires GovernanceResponsbility { - use aptos_framework::account; - use aptos_framework::coin; - use aptos_framework::aptos_coin::AptosCoin; - - timestamp::set_time_has_started_for_testing(aptos_framework); - account::create_account_for_test(signer::address_of(aptos_framework)); - account::create_account_for_test(signer::address_of(proposer)); - account::create_account_for_test(signer::address_of(yes_voter)); - account::create_account_for_test(signer::address_of(no_voter)); - - // Initialize the governance. - stake::initialize_for_test_custom(aptos_framework, 0, 1000, 2000, true, 0, 1, 1000); - initialize(aptos_framework, 10, 100, 1000); - store_signer_cap( - aptos_framework, - @aptos_framework, - account::create_test_signer_cap(@aptos_framework), - ); - - // Initialize the stake pools for proposer and voters. - // Spread stake among active and pending_inactive because both need to be accounted for when computing voting - // power. - coin::register(proposer); - coin::deposit(signer::address_of(proposer), stake::mint_coins(100)); - coin::register(yes_voter); - coin::deposit(signer::address_of(yes_voter), stake::mint_coins(20)); - coin::register(no_voter); - coin::deposit(signer::address_of(no_voter), stake::mint_coins(10)); - - let (_sk_1, pk_1, pop_1) = stake::generate_identity(); - let (_sk_2, pk_2, pop_2) = stake::generate_identity(); - let (_sk_3, pk_3, pop_3) = stake::generate_identity(); - stake::initialize_test_validator(&pk_2, &pop_2, yes_voter, 20, true, false); - stake::initialize_test_validator(&pk_3, &pop_3, no_voter, 10, true, false); - stake::end_epoch(); - timestamp::fast_forward_seconds(1440); - stake::initialize_test_validator(&pk_1, &pop_1, proposer, 100, true, false); - stake::end_epoch(); - } - - #[test_only] - public fun setup_partial_voting( - aptos_framework: &signer, - proposer: &signer, - voter_1: &signer, - voter_2: &signer, - ) acquires GovernanceResponsbility { - initialize_partial_voting(aptos_framework); - features::change_feature_flags_for_testing(aptos_framework, vector[features::get_partial_governance_voting()], vector[]); - setup_voting(aptos_framework, proposer, voter_1, voter_2); - } - - #[test(aptos_framework = @aptos_framework)] - public entry fun test_update_governance_config( - aptos_framework: signer, - ) acquires GovernanceConfig, GovernanceEvents { - account::create_account_for_test(signer::address_of(&aptos_framework)); - initialize(&aptos_framework, 1, 2, 3); - update_governance_config(&aptos_framework, 10, 20, 30); - - let config = borrow_global(@aptos_framework); - assert!(config.min_voting_threshold == 10, 0); - assert!(config.required_proposer_stake == 20, 1); - assert!(config.voting_duration_secs == 30, 3); - } - - #[test(account = @0x123)] - #[expected_failure(abort_code = 0x50003, location = aptos_framework::system_addresses)] - public entry fun test_update_governance_config_unauthorized_should_fail( - account: signer) acquires GovernanceConfig, GovernanceEvents { - initialize(&account, 1, 2, 3); - update_governance_config(&account, 10, 20, 30); - } - - #[test(aptos_framework = @aptos_framework, proposer = @0x123, yes_voter = @0x234, no_voter = @345)] - public entry fun test_replace_execution_hash( - aptos_framework: signer, - proposer: signer, - yes_voter: signer, - no_voter: signer, - ) acquires GovernanceResponsbility, GovernanceConfig, ApprovedExecutionHashes, VotingRecords, VotingRecordsV2, GovernanceEvents { - setup_voting(&aptos_framework, &proposer, &yes_voter, &no_voter); - - create_proposal_for_test(&proposer, true); - vote(&yes_voter, signer::address_of(&yes_voter), 0, true); - vote(&no_voter, signer::address_of(&no_voter), 0, false); - - // Add approved script hash. - timestamp::update_global_time_for_test(100001000000); - add_approved_script_hash(0); - - // Resolve the proposal. - let execution_hash = vector::empty(); - let next_execution_hash = vector::empty(); - vector::push_back(&mut execution_hash, 1); - vector::push_back(&mut next_execution_hash, 10); - - voting::resolve_proposal_v2(@aptos_framework, 0, next_execution_hash); - - if (vector::length(&next_execution_hash) == 0) { - remove_approved_hash(0); - } else { - add_approved_script_hash(0) - }; - - let approved_hashes = borrow_global(@aptos_framework).hashes; - assert!(*simple_map::borrow(&approved_hashes, &0) == vector[10u8, ], 1); - } - - #[test_only] - public fun initialize_for_test( - aptos_framework: &signer, - min_voting_threshold: u128, - required_proposer_stake: u64, - voting_duration_secs: u64, - ) { - initialize(aptos_framework, min_voting_threshold, required_proposer_stake, voting_duration_secs); - } - - #[verify_only] - public fun initialize_for_verification( - aptos_framework: &signer, - min_voting_threshold: u128, - required_proposer_stake: u64, - voting_duration_secs: u64, - ) { - initialize(aptos_framework, min_voting_threshold, required_proposer_stake, voting_duration_secs); - } -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/block.move b/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/block.move deleted file mode 100644 index 3dc18b064..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/block.move +++ /dev/null @@ -1,349 +0,0 @@ -/// This module defines a struct storing the metadata of the block and new block events. -module aptos_framework::block { - use std::error; - use std::vector; - use std::option; - use aptos_std::table_with_length::{Self, TableWithLength}; - use std::option::Option; - use aptos_framework::randomness; - - use aptos_framework::account; - use aptos_framework::event::{Self, EventHandle}; - use aptos_framework::reconfiguration; - use aptos_framework::reconfiguration_with_dkg; - use aptos_framework::stake; - use aptos_framework::state_storage; - use aptos_framework::system_addresses; - use aptos_framework::timestamp; - - friend aptos_framework::genesis; - - const MAX_U64: u64 = 18446744073709551615; - - /// Should be in-sync with BlockResource rust struct in new_block.rs - struct BlockResource has key { - /// Height of the current block - height: u64, - /// Time period between epochs. - epoch_interval: u64, - /// Handle where events with the time of new blocks are emitted - new_block_events: EventHandle, - update_epoch_interval_events: EventHandle, - } - - /// Store new block events as a move resource, internally using a circular buffer. - struct CommitHistory has key { - max_capacity: u32, - next_idx: u32, - table: TableWithLength, - } - - /// Should be in-sync with NewBlockEvent rust struct in new_block.rs - struct NewBlockEvent has copy, drop, store { - hash: address, - epoch: u64, - round: u64, - height: u64, - previous_block_votes_bitvec: vector, - proposer: address, - failed_proposer_indices: vector, - /// On-chain time during the block at the given height - time_microseconds: u64, - } - - /// Event emitted when a proposal is created. - struct UpdateEpochIntervalEvent has drop, store { - old_epoch_interval: u64, - new_epoch_interval: u64, - } - - #[event] - /// Should be in-sync with NewBlockEvent rust struct in new_block.rs - struct NewBlock has drop, store { - hash: address, - epoch: u64, - round: u64, - height: u64, - previous_block_votes_bitvec: vector, - proposer: address, - failed_proposer_indices: vector, - /// On-chain time during the block at the given height - time_microseconds: u64, - } - - #[event] - /// Event emitted when a proposal is created. - struct UpdateEpochInterval has drop, store { - old_epoch_interval: u64, - new_epoch_interval: u64, - } - - /// The number of new block events does not equal the current block height. - const ENUM_NEW_BLOCK_EVENTS_DOES_NOT_MATCH_BLOCK_HEIGHT: u64 = 1; - /// An invalid proposer was provided. Expected the proposer to be the VM or an active validator. - const EINVALID_PROPOSER: u64 = 2; - /// Epoch interval cannot be 0. - const EZERO_EPOCH_INTERVAL: u64 = 3; - /// The maximum capacity of the commit history cannot be 0. - const EZERO_MAX_CAPACITY: u64 = 3; - - /// This can only be called during Genesis. - public(friend) fun initialize(aptos_framework: &signer, epoch_interval_microsecs: u64) { - system_addresses::assert_aptos_framework(aptos_framework); - assert!(epoch_interval_microsecs > 0, error::invalid_argument(EZERO_EPOCH_INTERVAL)); - - move_to(aptos_framework, CommitHistory { - max_capacity: 2000, - next_idx: 0, - table: table_with_length::new(), - }); - - move_to( - aptos_framework, - BlockResource { - height: 0, - epoch_interval: epoch_interval_microsecs, - new_block_events: account::new_event_handle(aptos_framework), - update_epoch_interval_events: account::new_event_handle(aptos_framework), - } - ); - } - - /// Initialize the commit history resource if it's not in genesis. - public fun initialize_commit_history(fx: &signer, max_capacity: u32) { - assert!(max_capacity > 0, error::invalid_argument(EZERO_MAX_CAPACITY)); - move_to(fx, CommitHistory { - max_capacity, - next_idx: 0, - table: table_with_length::new(), - }); - } - - /// Update the epoch interval. - /// Can only be called as part of the Aptos governance proposal process established by the AptosGovernance module. - public fun update_epoch_interval_microsecs( - aptos_framework: &signer, - new_epoch_interval: u64, - ) acquires BlockResource { - system_addresses::assert_aptos_framework(aptos_framework); - assert!(new_epoch_interval > 0, error::invalid_argument(EZERO_EPOCH_INTERVAL)); - - let block_resource = borrow_global_mut(@aptos_framework); - let old_epoch_interval = block_resource.epoch_interval; - block_resource.epoch_interval = new_epoch_interval; - - if (std::features::module_event_migration_enabled()) { - event::emit( - UpdateEpochInterval { old_epoch_interval, new_epoch_interval }, - ); - } else { - event::emit_event( - &mut block_resource.update_epoch_interval_events, - UpdateEpochIntervalEvent { old_epoch_interval, new_epoch_interval }, - ); - }; - } - - #[view] - /// Return epoch interval in seconds. - public fun get_epoch_interval_secs(): u64 acquires BlockResource { - borrow_global(@aptos_framework).epoch_interval / 1000000 - } - - - fun block_prologue_common( - vm: &signer, - hash: address, - epoch: u64, - round: u64, - proposer: address, - failed_proposer_indices: vector, - previous_block_votes_bitvec: vector, - timestamp: u64 - ): u64 acquires BlockResource, CommitHistory { - // Operational constraint: can only be invoked by the VM. - system_addresses::assert_vm(vm); - - // Blocks can only be produced by a valid proposer or by the VM itself for Nil blocks (no user txs). - assert!( - proposer == @vm_reserved || stake::is_current_epoch_validator(proposer), - error::permission_denied(EINVALID_PROPOSER), - ); - - let proposer_index = option::none(); - if (proposer != @vm_reserved) { - proposer_index = option::some(stake::get_validator_index(proposer)); - }; - - let block_metadata_ref = borrow_global_mut(@aptos_framework); - block_metadata_ref.height = event::counter(&block_metadata_ref.new_block_events); - - let new_block_event = NewBlockEvent { - hash, - epoch, - round, - height: block_metadata_ref.height, - previous_block_votes_bitvec, - proposer, - failed_proposer_indices, - time_microseconds: timestamp, - }; - emit_new_block_event(vm, &mut block_metadata_ref.new_block_events, new_block_event); - - // Performance scores have to be updated before the epoch transition as the transaction that triggers the - // transition is the last block in the previous epoch. - stake::update_performance_statistics(proposer_index, failed_proposer_indices); - state_storage::on_new_block(reconfiguration::current_epoch()); - - block_metadata_ref.epoch_interval - } - - /// Set the metadata for the current block. - /// The runtime always runs this before executing the transactions in a block. - fun block_prologue( - vm: signer, - hash: address, - epoch: u64, - round: u64, - proposer: address, - failed_proposer_indices: vector, - previous_block_votes_bitvec: vector, - timestamp: u64 - ) acquires BlockResource, CommitHistory { - let epoch_interval = block_prologue_common(&vm, hash, epoch, round, proposer, failed_proposer_indices, previous_block_votes_bitvec, timestamp); - randomness::on_new_block(&vm, epoch, round, option::none()); - if (timestamp - reconfiguration::last_reconfiguration_time() >= epoch_interval) { - reconfiguration::reconfigure(); - }; - } - - /// `block_prologue()` but trigger reconfiguration with DKG after epoch timed out. - fun block_prologue_ext( - vm: signer, - hash: address, - epoch: u64, - round: u64, - proposer: address, - failed_proposer_indices: vector, - previous_block_votes_bitvec: vector, - timestamp: u64, - randomness_seed: Option>, - ) acquires BlockResource, CommitHistory { - let epoch_interval = block_prologue_common( - &vm, - hash, - epoch, - round, - proposer, - failed_proposer_indices, - previous_block_votes_bitvec, - timestamp - ); - randomness::on_new_block(&vm, epoch, round, randomness_seed); - - if (timestamp - reconfiguration::last_reconfiguration_time() >= epoch_interval) { - reconfiguration_with_dkg::try_start(); - }; - } - - #[view] - /// Get the current block height - public fun get_current_block_height(): u64 acquires BlockResource { - borrow_global(@aptos_framework).height - } - - /// Emit the event and update height and global timestamp - fun emit_new_block_event( - vm: &signer, - event_handle: &mut EventHandle, - new_block_event: NewBlockEvent, - ) acquires CommitHistory { - if (exists(@aptos_framework)) { - let commit_history_ref = borrow_global_mut(@aptos_framework); - let idx = commit_history_ref.next_idx; - if (table_with_length::contains(&commit_history_ref.table, idx)) { - table_with_length::remove(&mut commit_history_ref.table, idx); - }; - table_with_length::add(&mut commit_history_ref.table, idx, copy new_block_event); - spec { - assume idx + 1 <= MAX_U32; - }; - commit_history_ref.next_idx = (idx + 1) % commit_history_ref.max_capacity; - }; - timestamp::update_global_time(vm, new_block_event.proposer, new_block_event.time_microseconds); - assert!( - event::counter(event_handle) == new_block_event.height, - error::invalid_argument(ENUM_NEW_BLOCK_EVENTS_DOES_NOT_MATCH_BLOCK_HEIGHT), - ); - event::emit_event(event_handle, new_block_event); - } - - /// Emit a `NewBlockEvent` event. This function will be invoked by genesis directly to generate the very first - /// reconfiguration event. - fun emit_genesis_block_event(vm: signer) acquires BlockResource, CommitHistory { - let block_metadata_ref = borrow_global_mut(@aptos_framework); - let genesis_id = @0x0; - emit_new_block_event( - &vm, - &mut block_metadata_ref.new_block_events, - NewBlockEvent { - hash: genesis_id, - epoch: 0, - round: 0, - height: 0, - previous_block_votes_bitvec: vector::empty(), - proposer: @vm_reserved, - failed_proposer_indices: vector::empty(), - time_microseconds: 0, - }, - ); - } - - /// Emit a `NewBlockEvent` event. This function will be invoked by write set script directly to generate the - /// new block event for WriteSetPayload. - public fun emit_writeset_block_event(vm_signer: &signer, fake_block_hash: address) acquires BlockResource, CommitHistory { - system_addresses::assert_vm(vm_signer); - let block_metadata_ref = borrow_global_mut(@aptos_framework); - block_metadata_ref.height = event::counter(&block_metadata_ref.new_block_events); - - emit_new_block_event( - vm_signer, - &mut block_metadata_ref.new_block_events, - NewBlockEvent { - hash: fake_block_hash, - epoch: reconfiguration::current_epoch(), - round: MAX_U64, - height: block_metadata_ref.height, - previous_block_votes_bitvec: vector::empty(), - proposer: @vm_reserved, - failed_proposer_indices: vector::empty(), - time_microseconds: timestamp::now_microseconds(), - }, - ); - } - - #[test_only] - public fun initialize_for_test(account: &signer, epoch_interval_microsecs: u64) { - initialize(account, epoch_interval_microsecs); - } - - #[test(aptos_framework = @aptos_framework)] - public entry fun test_update_epoch_interval(aptos_framework: signer) acquires BlockResource { - account::create_account_for_test(@aptos_framework); - initialize(&aptos_framework, 1); - assert!(borrow_global(@aptos_framework).epoch_interval == 1, 0); - update_epoch_interval_microsecs(&aptos_framework, 2); - assert!(borrow_global(@aptos_framework).epoch_interval == 2, 1); - } - - #[test(aptos_framework = @aptos_framework, account = @0x123)] - #[expected_failure(abort_code = 0x50003, location = aptos_framework::system_addresses)] - public entry fun test_update_epoch_interval_unauthorized_should_fail( - aptos_framework: signer, - account: signer, - ) acquires BlockResource { - account::create_account_for_test(@aptos_framework); - initialize(&aptos_framework, 1); - update_epoch_interval_microsecs(&account, 2); - } -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/chain_id.move b/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/chain_id.move deleted file mode 100644 index c71109744..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/chain_id.move +++ /dev/null @@ -1,41 +0,0 @@ -/// The chain id distinguishes between different chains (e.g., testnet and the main network). -/// One important role is to prevent transactions intended for one chain from being executed on another. -/// This code provides a container for storing a chain id and functions to initialize and get it. -module aptos_framework::chain_id { - use aptos_framework::system_addresses; - - friend aptos_framework::genesis; - - struct ChainId has key { - id: u8 - } - - /// Only called during genesis. - /// Publish the chain ID `id` of this instance under the SystemAddresses address - public(friend) fun initialize(aptos_framework: &signer, id: u8) { - system_addresses::assert_aptos_framework(aptos_framework); - move_to(aptos_framework, ChainId { id }) - } - - #[view] - /// Return the chain ID of this instance. - public fun get(): u8 acquires ChainId { - borrow_global(@aptos_framework).id - } - - #[test_only] - use std::signer; - - #[test_only] - public fun initialize_for_test(aptos_framework: &signer, id: u8) { - if (!exists(signer::address_of(aptos_framework))) { - initialize(aptos_framework, id); - } - } - - #[test(aptos_framework = @0x1)] - fun test_get(aptos_framework: &signer) acquires ChainId { - initialize_for_test(aptos_framework, 1u8); - assert!(get() == 1u8, 1); - } -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/chain_status.move b/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/chain_status.move deleted file mode 100644 index 32c2ea069..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/chain_status.move +++ /dev/null @@ -1,48 +0,0 @@ -/// This module code to assert that it is running in genesis (`Self::assert_genesis`) or after -/// genesis (`Self::assert_operating`). These are essentially distinct states of the system. Specifically, -/// if `Self::assert_operating` succeeds, assumptions about invariants over the global state can be made -/// which reflect that the system has been successfully initialized. -module aptos_framework::chain_status { - use aptos_framework::system_addresses; - use std::error; - - friend aptos_framework::genesis; - - /// Marker to publish at the end of genesis. - struct GenesisEndMarker has key {} - - /// The blockchain is not in the operating status. - const ENOT_OPERATING: u64 = 1; - /// The blockchain is not in the genesis status. - const ENOT_GENESIS: u64 = 2; - - /// Marks that genesis has finished. - public(friend) fun set_genesis_end(aptos_framework: &signer) { - system_addresses::assert_aptos_framework(aptos_framework); - move_to(aptos_framework, GenesisEndMarker {}); - } - - #[view] - /// Helper function to determine if Aptos is in genesis state. - public fun is_genesis(): bool { - !exists(@aptos_framework) - } - - #[view] - /// Helper function to determine if Aptos is operating. This is - /// the same as `!is_genesis()` and is provided for convenience. - /// Testing `is_operating()` is more frequent than `is_genesis()`. - public fun is_operating(): bool { - exists(@aptos_framework) - } - - /// Helper function to assert operating (not genesis) state. - public fun assert_operating() { - assert!(is_operating(), error::invalid_state(ENOT_OPERATING)); - } - - /// Helper function to assert genesis state. - public fun assert_genesis() { - assert!(is_genesis(), error::invalid_state(ENOT_OPERATING)); - } -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/code.move b/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/code.move deleted file mode 100644 index ef884c969..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/code.move +++ /dev/null @@ -1,367 +0,0 @@ -/// This module supports functionality related to code management. -module aptos_framework::code { - use std::string::String; - use std::error; - use std::signer; - use std::vector; - use std::features; - - use aptos_framework::util; - use aptos_framework::system_addresses; - use aptos_std::copyable_any::Any; - use std::option::Option; - use std::string; - use aptos_framework::event; - use aptos_framework::object::{Self, Object}; - - // ---------------------------------------------------------------------- - // Code Publishing - - /// The package registry at the given address. - struct PackageRegistry has key, store, drop { - /// Packages installed at this address. - packages: vector, - } - - /// Metadata for a package. All byte blobs are represented as base64-of-gzipped-bytes - struct PackageMetadata has copy, drop, store { - /// Name of this package. - name: String, - /// The upgrade policy of this package. - upgrade_policy: UpgradePolicy, - /// The numbers of times this module has been upgraded. Also serves as the on-chain version. - /// This field will be automatically assigned on successful upgrade. - upgrade_number: u64, - /// The source digest of the sources in the package. This is constructed by first building the - /// sha256 of each individual source, than sorting them alphabetically, and sha256 them again. - source_digest: String, - /// The package manifest, in the Move.toml format. Gzipped text. - manifest: vector, - /// The list of modules installed by this package. - modules: vector, - /// Holds PackageDeps. - deps: vector, - /// For future extension - extension: Option - } - - /// A dependency to a package published at address - struct PackageDep has store, drop, copy { - account: address, - package_name: String - } - - /// Metadata about a module in a package. - struct ModuleMetadata has copy, drop, store { - /// Name of the module. - name: String, - /// Source text, gzipped String. Empty if not provided. - source: vector, - /// Source map, in compressed BCS. Empty if not provided. - source_map: vector, - /// For future extensions. - extension: Option, - } - - /// Describes an upgrade policy - struct UpgradePolicy has store, copy, drop { - policy: u8 - } - - #[event] - /// Event emitted when code is published to an address. - struct PublishPackage has drop, store { - code_address: address, - is_upgrade: bool, - } - - /// Package contains duplicate module names with existing modules publised in other packages on this address - const EMODULE_NAME_CLASH: u64 = 0x1; - - /// Cannot upgrade an immutable package - const EUPGRADE_IMMUTABLE: u64 = 0x2; - - /// Cannot downgrade a package's upgradability policy - const EUPGRADE_WEAKER_POLICY: u64 = 0x3; - - /// Cannot delete a module that was published in the same package - const EMODULE_MISSING: u64 = 0x4; - - /// Dependency could not be resolved to any published package. - const EPACKAGE_DEP_MISSING: u64 = 0x5; - - /// A dependency cannot have a weaker upgrade policy. - const EDEP_WEAKER_POLICY: u64 = 0x6; - - /// A dependency to an `arbitrary` package must be on the same address. - const EDEP_ARBITRARY_NOT_SAME_ADDRESS: u64 = 0x7; - - /// Creating a package with incompatible upgrade policy is disabled. - const EINCOMPATIBLE_POLICY_DISABLED: u64 = 0x8; - - /// Not the owner of the package registry. - const ENOT_PACKAGE_OWNER: u64 = 0x9; - - /// `code_object` does not exist. - const ECODE_OBJECT_DOES_NOT_EXIST: u64 = 0xA; - - /// Whether unconditional code upgrade with no compatibility check is allowed. This - /// publication mode should only be used for modules which aren't shared with user others. - /// The developer is responsible for not breaking memory layout of any resources he already - /// stored on chain. - public fun upgrade_policy_arbitrary(): UpgradePolicy { - UpgradePolicy { policy: 0 } - } - - /// Whether a compatibility check should be performed for upgrades. The check only passes if - /// a new module has (a) the same public functions (b) for existing resources, no layout change. - public fun upgrade_policy_compat(): UpgradePolicy { - UpgradePolicy { policy: 1 } - } - - /// Whether the modules in the package are immutable and cannot be upgraded. - public fun upgrade_policy_immutable(): UpgradePolicy { - UpgradePolicy { policy: 2 } - } - - /// Whether the upgrade policy can be changed. In general, the policy can be only - /// strengthened but not weakened. - public fun can_change_upgrade_policy_to(from: UpgradePolicy, to: UpgradePolicy): bool { - from.policy <= to.policy - } - - /// Initialize package metadata for Genesis. - fun initialize(aptos_framework: &signer, package_owner: &signer, metadata: PackageMetadata) - acquires PackageRegistry { - system_addresses::assert_aptos_framework(aptos_framework); - let addr = signer::address_of(package_owner); - if (!exists(addr)) { - move_to(package_owner, PackageRegistry { packages: vector[metadata] }) - } else { - vector::push_back(&mut borrow_global_mut(addr).packages, metadata) - } - } - - /// Publishes a package at the given signer's address. The caller must provide package metadata describing the - /// package. - public fun publish_package(owner: &signer, pack: PackageMetadata, code: vector>) acquires PackageRegistry { - // Disallow incompatible upgrade mode. Governance can decide later if this should be reconsidered. - assert!( - pack.upgrade_policy.policy > upgrade_policy_arbitrary().policy, - error::invalid_argument(EINCOMPATIBLE_POLICY_DISABLED), - ); - - let addr = signer::address_of(owner); - if (!exists(addr)) { - move_to(owner, PackageRegistry { packages: vector::empty() }) - }; - - // Checks for valid dependencies to other packages - let allowed_deps = check_dependencies(addr, &pack); - - // Check package against conflicts - // To avoid prover compiler error on spec - // the package need to be an immutable variable - let module_names = get_module_names(&pack); - let package_immutable = &borrow_global(addr).packages; - let len = vector::length(package_immutable); - let index = len; - let upgrade_number = 0; - vector::enumerate_ref(package_immutable - , |i, old| { - let old: &PackageMetadata = old; - if (old.name == pack.name) { - upgrade_number = old.upgrade_number + 1; - check_upgradability(old, &pack, &module_names); - index = i; - } else { - check_coexistence(old, &module_names) - }; - }); - - // Assign the upgrade counter. - pack.upgrade_number = upgrade_number; - - let packages = &mut borrow_global_mut(addr).packages; - // Update registry - let policy = pack.upgrade_policy; - if (index < len) { - *vector::borrow_mut(packages, index) = pack - } else { - vector::push_back(packages, pack) - }; - - event::emit(PublishPackage { - code_address: addr, - is_upgrade: upgrade_number > 0 - }); - - // Request publish - if (features::code_dependency_check_enabled()) - request_publish_with_allowed_deps(addr, module_names, allowed_deps, code, policy.policy) - else - // The new `request_publish_with_allowed_deps` has not yet rolled out, so call downwards - // compatible code. - request_publish(addr, module_names, code, policy.policy) - } - - public fun freeze_code_object(publisher: &signer, code_object: Object) acquires PackageRegistry { - let code_object_addr = object::object_address(&code_object); - assert!(exists(code_object_addr), error::not_found(ECODE_OBJECT_DOES_NOT_EXIST)); - assert!( - object::is_owner(code_object, signer::address_of(publisher)), - error::permission_denied(ENOT_PACKAGE_OWNER) - ); - - let registry = borrow_global_mut(code_object_addr); - vector::for_each_mut(&mut registry.packages, |pack| { - let package: &mut PackageMetadata = pack; - package.upgrade_policy = upgrade_policy_immutable(); - }); - - // We unfortunately have to make a copy of each package to avoid borrow checker issues as check_dependencies - // needs to borrow PackageRegistry from the dependency packages. - // This would increase the amount of gas used, but this is a rare operation and it's rare to have many packages - // in a single code object. - vector::for_each(registry.packages, |pack| { - check_dependencies(code_object_addr, &pack); - }); - } - - /// Same as `publish_package` but as an entry function which can be called as a transaction. Because - /// of current restrictions for txn parameters, the metadata needs to be passed in serialized form. - public entry fun publish_package_txn(owner: &signer, metadata_serialized: vector, code: vector>) - acquires PackageRegistry { - publish_package(owner, util::from_bytes(metadata_serialized), code) - } - - // Helpers - // ------- - - /// Checks whether the given package is upgradable, and returns true if a compatibility check is needed. - fun check_upgradability( - old_pack: &PackageMetadata, new_pack: &PackageMetadata, new_modules: &vector) { - assert!(old_pack.upgrade_policy.policy < upgrade_policy_immutable().policy, - error::invalid_argument(EUPGRADE_IMMUTABLE)); - assert!(can_change_upgrade_policy_to(old_pack.upgrade_policy, new_pack.upgrade_policy), - error::invalid_argument(EUPGRADE_WEAKER_POLICY)); - let old_modules = get_module_names(old_pack); - - vector::for_each_ref(&old_modules, |old_module| { - assert!( - vector::contains(new_modules, old_module), - EMODULE_MISSING - ); - }); - } - - /// Checks whether a new package with given names can co-exist with old package. - fun check_coexistence(old_pack: &PackageMetadata, new_modules: &vector) { - // The modules introduced by each package must not overlap with `names`. - vector::for_each_ref(&old_pack.modules, |old_mod| { - let old_mod: &ModuleMetadata = old_mod; - let j = 0; - while (j < vector::length(new_modules)) { - let name = vector::borrow(new_modules, j); - assert!(&old_mod.name != name, error::already_exists(EMODULE_NAME_CLASH)); - j = j + 1; - }; - }); - } - - /// Check that the upgrade policies of all packages are equal or higher quality than this package. Also - /// compute the list of module dependencies which are allowed by the package metadata. The later - /// is passed on to the native layer to verify that bytecode dependencies are actually what is pretended here. - fun check_dependencies(publish_address: address, pack: &PackageMetadata): vector - acquires PackageRegistry { - let allowed_module_deps = vector::empty(); - let deps = &pack.deps; - vector::for_each_ref(deps, |dep| { - let dep: &PackageDep = dep; - assert!(exists(dep.account), error::not_found(EPACKAGE_DEP_MISSING)); - if (is_policy_exempted_address(dep.account)) { - // Allow all modules from this address, by using "" as a wildcard in the AllowedDep - let account: address = dep.account; - let module_name = string::utf8(b""); - vector::push_back(&mut allowed_module_deps, AllowedDep { account, module_name }); - } else { - let registry = borrow_global(dep.account); - let found = vector::any(®istry.packages, |dep_pack| { - let dep_pack: &PackageMetadata = dep_pack; - if (dep_pack.name == dep.package_name) { - // Check policy - assert!( - dep_pack.upgrade_policy.policy >= pack.upgrade_policy.policy, - error::invalid_argument(EDEP_WEAKER_POLICY) - ); - if (dep_pack.upgrade_policy == upgrade_policy_arbitrary()) { - assert!( - dep.account == publish_address, - error::invalid_argument(EDEP_ARBITRARY_NOT_SAME_ADDRESS) - ) - }; - // Add allowed deps - let account = dep.account; - let k = 0; - let r = vector::length(&dep_pack.modules); - while (k < r) { - let module_name = vector::borrow(&dep_pack.modules, k).name; - vector::push_back(&mut allowed_module_deps, AllowedDep { account, module_name }); - k = k + 1; - }; - true - } else { - false - } - }); - assert!(found, error::not_found(EPACKAGE_DEP_MISSING)); - }; - }); - allowed_module_deps - } - - /// Core addresses which are exempted from the check that their policy matches the referring package. Without - /// this exemption, it would not be possible to define an immutable package based on the core system, which - /// requires to be upgradable for maintenance and evolution, and is configured to be `compatible`. - fun is_policy_exempted_address(addr: address): bool { - addr == @1 || addr == @2 || addr == @3 || addr == @4 || addr == @5 || - addr == @6 || addr == @7 || addr == @8 || addr == @9 || addr == @10 - } - - /// Get the names of the modules in a package. - fun get_module_names(pack: &PackageMetadata): vector { - let module_names = vector::empty(); - vector::for_each_ref(&pack.modules, |pack_module| { - let pack_module: &ModuleMetadata = pack_module; - vector::push_back(&mut module_names, pack_module.name); - }); - module_names - } - - /// Native function to initiate module loading - native fun request_publish( - owner: address, - expected_modules: vector, - bundle: vector>, - policy: u8 - ); - - /// A helper type for request_publish_with_allowed_deps - struct AllowedDep has drop { - /// Address of the module. - account: address, - /// Name of the module. If this is the empty string, then this serves as a wildcard for - /// all modules from this address. This is used for speeding up dependency checking for packages from - /// well-known framework addresses, where we can assume that there are no malicious packages. - module_name: String - } - - /// Native function to initiate module loading, including a list of allowed dependencies. - native fun request_publish_with_allowed_deps( - owner: address, - expected_modules: vector, - allowed_deps: vector, - bundle: vector>, - policy: u8 - ); -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/coin.move b/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/coin.move deleted file mode 100644 index 3887fe31c..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/coin.move +++ /dev/null @@ -1,2033 +0,0 @@ -/// This module provides the foundation for typesafe Coins. -module aptos_framework::coin { - use std::error; - use std::features; - use std::option::{Self, Option}; - use std::signer; - use std::string::{Self, String}; - use aptos_std::table::{Self, Table}; - - use aptos_framework::account; - use aptos_framework::aggregator_factory; - use aptos_framework::aggregator::Aggregator; - use aptos_framework::event::{Self, EventHandle}; - use aptos_framework::guid; - use aptos_framework::optional_aggregator::{Self, OptionalAggregator}; - use aptos_framework::system_addresses; - - use aptos_framework::fungible_asset::{Self, FungibleAsset, Metadata, MintRef, TransferRef, BurnRef}; - use aptos_framework::object::{Self, Object, object_address}; - use aptos_framework::primary_fungible_store; - use aptos_std::type_info::{Self, TypeInfo, type_name}; - use aptos_framework::create_signer; - - friend aptos_framework::aptos_coin; - friend aptos_framework::genesis; - friend aptos_framework::transaction_fee; - - // - // Errors. - // - - /// Address of account which is used to initialize a coin `CoinType` doesn't match the deployer of module - const ECOIN_INFO_ADDRESS_MISMATCH: u64 = 1; - - /// `CoinType` is already initialized as a coin - const ECOIN_INFO_ALREADY_PUBLISHED: u64 = 2; - - /// `CoinType` hasn't been initialized as a coin - const ECOIN_INFO_NOT_PUBLISHED: u64 = 3; - - /// Deprecated. Account already has `CoinStore` registered for `CoinType` - const ECOIN_STORE_ALREADY_PUBLISHED: u64 = 4; - - /// Account hasn't registered `CoinStore` for `CoinType` - const ECOIN_STORE_NOT_PUBLISHED: u64 = 5; - - /// Not enough coins to complete transaction - const EINSUFFICIENT_BALANCE: u64 = 6; - - /// Cannot destroy non-zero coins - const EDESTRUCTION_OF_NONZERO_TOKEN: u64 = 7; - - /// CoinStore is frozen. Coins cannot be deposited or withdrawn - const EFROZEN: u64 = 10; - - /// Cannot upgrade the total supply of coins to different implementation. - const ECOIN_SUPPLY_UPGRADE_NOT_SUPPORTED: u64 = 11; - - /// Name of the coin is too long - const ECOIN_NAME_TOO_LONG: u64 = 12; - - /// Symbol of the coin is too long - const ECOIN_SYMBOL_TOO_LONG: u64 = 13; - - /// The value of aggregatable coin used for transaction fees redistribution does not fit in u64. - const EAGGREGATABLE_COIN_VALUE_TOO_LARGE: u64 = 14; - - /// Error regarding paired coin type of the fungible asset metadata. - const EPAIRED_COIN: u64 = 15; - - /// Error regarding paired fungible asset metadata of a coin type. - const EPAIRED_FUNGIBLE_ASSET: u64 = 16; - - /// The coin type from the map does not match the calling function type argument. - const ECOIN_TYPE_MISMATCH: u64 = 17; - - /// The feature of migration from coin to fungible asset is not enabled. - const ECOIN_TO_FUNGIBLE_ASSET_FEATURE_NOT_ENABLED: u64 = 18; - - /// PairedFungibleAssetRefs resource does not exist. - const EPAIRED_FUNGIBLE_ASSET_REFS_NOT_FOUND: u64 = 19; - - /// The MintRefReceipt does not match the MintRef to be returned. - const EMINT_REF_RECEIPT_MISMATCH: u64 = 20; - - /// The MintRef does not exist. - const EMINT_REF_NOT_FOUND: u64 = 21; - - /// The TransferRefReceipt does not match the TransferRef to be returned. - const ETRANSFER_REF_RECEIPT_MISMATCH: u64 = 22; - - /// The TransferRef does not exist. - const ETRANSFER_REF_NOT_FOUND: u64 = 23; - - /// The BurnRefReceipt does not match the BurnRef to be returned. - const EBURN_REF_RECEIPT_MISMATCH: u64 = 24; - - /// The BurnRef does not exist. - const EBURN_REF_NOT_FOUND: u64 = 25; - - /// The migration process from coin to fungible asset is not enabled yet. - const EMIGRATION_FRAMEWORK_NOT_ENABLED: u64 = 26; - - /// The coin converison map is not created yet. - const ECOIN_CONVERSION_MAP_NOT_FOUND: u64 = 27; - - /// APT pairing is not eanbled yet. - const EAPT_PAIRING_IS_NOT_ENABLED: u64 = 28; - - // - // Constants - // - - const MAX_COIN_NAME_LENGTH: u64 = 32; - const MAX_COIN_SYMBOL_LENGTH: u64 = 10; - - /// Core data structures - - /// Main structure representing a coin/token in an account's custody. - struct Coin has store { - /// Amount of coin this address has. - value: u64, - } - - #[deprecated] - /// DEPRECATED - struct AggregatableCoin has store { - /// Amount of aggregatable coin this address has. - value: Aggregator, - } - - /// Maximum possible aggregatable coin value. - const MAX_U64: u128 = 18446744073709551615; - - /// A holder of a specific coin types and associated event handles. - /// These are kept in a single resource to ensure locality of data. - struct CoinStore has key { - coin: Coin, - frozen: bool, - deposit_events: EventHandle, - withdraw_events: EventHandle, - } - - #[deprecated] - /// Configuration that controls the behavior of total coin supply. If the field - /// is set, coin creators are allowed to upgrade to parallelizable implementations. - struct SupplyConfig has key { - allow_upgrades: bool, - } - - /// Information about a specific coin type. Stored on the creator of the coin's account. - struct CoinInfo has key { - name: String, - /// Symbol of the coin, usually a shorter version of the name. - /// For example, Singapore Dollar is SGD. - symbol: String, - /// Number of decimals used to get its user representation. - /// For example, if `decimals` equals `2`, a balance of `505` coins should - /// be displayed to a user as `5.05` (`505 / 10 ** 2`). - decimals: u8, - /// Amount of this coin type in existence. - supply: Option, - } - - - #[event] - /// Module event emitted when some amount of a coin is deposited into an account. - struct CoinDeposit has drop, store { - coin_type: String, - account: address, - amount: u64, - } - - #[event] - /// Module event emitted when some amount of a coin is withdrawn from an account. - struct CoinWithdraw has drop, store { - coin_type: String, - account: address, - amount: u64, - } - - // DEPRECATED, NEVER USED - #[deprecated] - #[event] - struct Deposit has drop, store { - account: address, - amount: u64, - } - - // DEPRECATED, NEVER USED - #[deprecated] - #[event] - struct Withdraw has drop, store { - account: address, - amount: u64, - } - - /// Event emitted when some amount of a coin is deposited into an account. - struct DepositEvent has drop, store { - amount: u64, - } - - /// Event emitted when some amount of a coin is withdrawn from an account. - struct WithdrawEvent has drop, store { - amount: u64, - } - - - #[event] - /// Module event emitted when the event handles related to coin store is deleted. - struct CoinEventHandleDeletion has drop, store { - event_handle_creation_address: address, - deleted_deposit_event_handle_creation_number: u64, - deleted_withdraw_event_handle_creation_number: u64, - } - - #[event] - /// Module event emitted when a new pair of coin and fungible asset is created. - struct PairCreation has drop, store { - coin_type: TypeInfo, - fungible_asset_metadata_address: address, - } - - /// Capability required to mint coins. - struct MintCapability has copy, store {} - - /// Capability required to freeze a coin store. - struct FreezeCapability has copy, store {} - - /// Capability required to burn coins. - struct BurnCapability has copy, store {} - - /// The mapping between coin and fungible asset. - struct CoinConversionMap has key { - coin_to_fungible_asset_map: Table>, - } - - #[resource_group_member(group = aptos_framework::object::ObjectGroup)] - /// The paired coin type info stored in fungible asset metadata object. - struct PairedCoinType has key { - type: TypeInfo, - } - - #[resource_group_member(group = aptos_framework::object::ObjectGroup)] - /// The refs of the paired fungible asset. - struct PairedFungibleAssetRefs has key { - mint_ref_opt: Option, - transfer_ref_opt: Option, - burn_ref_opt: Option, - } - - /// The hot potato receipt for flash borrowing MintRef. - struct MintRefReceipt { - metadata: Object, - } - - /// The hot potato receipt for flash borrowing TransferRef. - struct TransferRefReceipt { - metadata: Object, - } - - /// The hot potato receipt for flash borrowing BurnRef. - struct BurnRefReceipt { - metadata: Object, - } - - #[view] - /// Get the paired fungible asset metadata object of a coin type. If not exist, return option::none(). - public fun paired_metadata(): Option> acquires CoinConversionMap { - if (exists(@aptos_framework) && features::coin_to_fungible_asset_migration_feature_enabled( - )) { - let map = &borrow_global(@aptos_framework).coin_to_fungible_asset_map; - let type = type_info::type_of(); - if (table::contains(map, type)) { - return option::some(*table::borrow(map, type)) - } - }; - option::none() - } - - public entry fun create_coin_conversion_map(aptos_framework: &signer) { - system_addresses::assert_aptos_framework(aptos_framework); - if (!exists(@aptos_framework)) { - move_to(aptos_framework, CoinConversionMap { - coin_to_fungible_asset_map: table::new(), - }) - }; - } - - /// Create APT pairing by passing `AptosCoin`. - public entry fun create_pairing( - aptos_framework: &signer - ) acquires CoinConversionMap, CoinInfo { - system_addresses::assert_aptos_framework(aptos_framework); - create_and_return_paired_metadata_if_not_exist(true); - } - - inline fun is_apt(): bool { - type_info::type_name() == string::utf8(b"0x1::aptos_coin::AptosCoin") - } - - inline fun create_and_return_paired_metadata_if_not_exist(allow_apt_creation: bool): Object { - assert!( - features::coin_to_fungible_asset_migration_feature_enabled(), - error::invalid_state(EMIGRATION_FRAMEWORK_NOT_ENABLED) - ); - assert!(exists(@aptos_framework), error::not_found(ECOIN_CONVERSION_MAP_NOT_FOUND)); - let map = borrow_global_mut(@aptos_framework); - let type = type_info::type_of(); - if (!table::contains(&map.coin_to_fungible_asset_map, type)) { - let is_apt = is_apt(); - assert!(!is_apt || allow_apt_creation, error::invalid_state(EAPT_PAIRING_IS_NOT_ENABLED)); - let metadata_object_cref = - if (is_apt) { - object::create_sticky_object_at_address(@aptos_framework, @aptos_fungible_asset) - } else { - object::create_named_object( - &create_signer::create_signer(@aptos_fungible_asset), - *string::bytes(&type_info::type_name()) - ) - }; - primary_fungible_store::create_primary_store_enabled_fungible_asset( - &metadata_object_cref, - option::none(), - name(), - symbol(), - decimals(), - string::utf8(b""), - string::utf8(b""), - ); - - let metadata_object_signer = &object::generate_signer(&metadata_object_cref); - let type = type_info::type_of(); - move_to(metadata_object_signer, PairedCoinType { type }); - let metadata_obj = object::object_from_constructor_ref(&metadata_object_cref); - - table::add(&mut map.coin_to_fungible_asset_map, type, metadata_obj); - event::emit(PairCreation { - coin_type: type, - fungible_asset_metadata_address: object_address(&metadata_obj) - }); - - // Generates all three refs - let mint_ref = fungible_asset::generate_mint_ref(&metadata_object_cref); - let transfer_ref = fungible_asset::generate_transfer_ref(&metadata_object_cref); - let burn_ref = fungible_asset::generate_burn_ref(&metadata_object_cref); - move_to(metadata_object_signer, - PairedFungibleAssetRefs { - mint_ref_opt: option::some(mint_ref), - transfer_ref_opt: option::some(transfer_ref), - burn_ref_opt: option::some(burn_ref), - } - ); - }; - *table::borrow(&map.coin_to_fungible_asset_map, type) - } - - /// Get the paired fungible asset metadata object of a coin type, create if not exist. - public(friend) fun ensure_paired_metadata(): Object acquires CoinConversionMap, CoinInfo { - create_and_return_paired_metadata_if_not_exist(false) - } - - #[view] - /// Get the paired coin type of a fungible asset metadata object. - public fun paired_coin(metadata: Object): Option acquires PairedCoinType { - let metadata_addr = object::object_address(&metadata); - if (exists(metadata_addr)) { - option::some(borrow_global(metadata_addr).type) - } else { - option::none() - } - } - - /// Conversion from coin to fungible asset - public fun coin_to_fungible_asset( - coin: Coin - ): FungibleAsset acquires CoinConversionMap, CoinInfo { - let metadata = ensure_paired_metadata(); - let amount = burn_internal(coin); - fungible_asset::mint_internal(metadata, amount) - } - - /// Conversion from fungible asset to coin. Not public to push the migration to FA. - fun fungible_asset_to_coin( - fungible_asset: FungibleAsset - ): Coin acquires CoinInfo, PairedCoinType { - let metadata_addr = object::object_address(&fungible_asset::metadata_from_asset(&fungible_asset)); - assert!( - object::object_exists(metadata_addr), - error::not_found(EPAIRED_COIN) - ); - let coin_type_info = borrow_global(metadata_addr).type; - assert!(coin_type_info == type_info::type_of(), error::invalid_argument(ECOIN_TYPE_MISMATCH)); - let amount = fungible_asset::burn_internal(fungible_asset); - mint_internal(amount) - } - - inline fun assert_paired_metadata_exists(): Object { - let metadata_opt = paired_metadata(); - assert!(option::is_some(&metadata_opt), error::not_found(EPAIRED_FUNGIBLE_ASSET)); - option::destroy_some(metadata_opt) - } - - #[view] - /// Check whether `MintRef` has not been taken. - public fun paired_mint_ref_exists(): bool acquires CoinConversionMap, PairedFungibleAssetRefs { - let metadata = assert_paired_metadata_exists(); - let metadata_addr = object_address(&metadata); - assert!(exists(metadata_addr), error::internal(EPAIRED_FUNGIBLE_ASSET_REFS_NOT_FOUND)); - option::is_some(&borrow_global(metadata_addr).mint_ref_opt) - } - - /// Get the `MintRef` of paired fungible asset of a coin type from `MintCapability`. - public fun get_paired_mint_ref( - _: &MintCapability - ): (MintRef, MintRefReceipt) acquires CoinConversionMap, PairedFungibleAssetRefs { - let metadata = assert_paired_metadata_exists(); - let metadata_addr = object_address(&metadata); - assert!(exists(metadata_addr), error::internal(EPAIRED_FUNGIBLE_ASSET_REFS_NOT_FOUND)); - let mint_ref_opt = &mut borrow_global_mut(metadata_addr).mint_ref_opt; - assert!(option::is_some(mint_ref_opt), error::not_found(EMINT_REF_NOT_FOUND)); - (option::extract(mint_ref_opt), MintRefReceipt { metadata }) - } - - /// Return the `MintRef` with the hot potato receipt. - public fun return_paired_mint_ref(mint_ref: MintRef, receipt: MintRefReceipt) acquires PairedFungibleAssetRefs { - let MintRefReceipt { metadata } = receipt; - assert!( - fungible_asset::mint_ref_metadata(&mint_ref) == metadata, - error::invalid_argument(EMINT_REF_RECEIPT_MISMATCH) - ); - let metadata_addr = object_address(&metadata); - let mint_ref_opt = &mut borrow_global_mut(metadata_addr).mint_ref_opt; - option::fill(mint_ref_opt, mint_ref); - } - - #[view] - /// Check whether `TransferRef` still exists. - public fun paired_transfer_ref_exists(): bool acquires CoinConversionMap, PairedFungibleAssetRefs { - let metadata = assert_paired_metadata_exists(); - let metadata_addr = object_address(&metadata); - assert!(exists(metadata_addr), error::internal(EPAIRED_FUNGIBLE_ASSET_REFS_NOT_FOUND)); - option::is_some(&borrow_global(metadata_addr).transfer_ref_opt) - } - - /// Get the TransferRef of paired fungible asset of a coin type from `FreezeCapability`. - public fun get_paired_transfer_ref( - _: &FreezeCapability - ): (TransferRef, TransferRefReceipt) acquires CoinConversionMap, PairedFungibleAssetRefs { - let metadata = assert_paired_metadata_exists(); - let metadata_addr = object_address(&metadata); - assert!(exists(metadata_addr), error::internal(EPAIRED_FUNGIBLE_ASSET_REFS_NOT_FOUND)); - let transfer_ref_opt = &mut borrow_global_mut(metadata_addr).transfer_ref_opt; - assert!(option::is_some(transfer_ref_opt), error::not_found(ETRANSFER_REF_NOT_FOUND)); - (option::extract(transfer_ref_opt), TransferRefReceipt { metadata }) - } - - /// Return the `TransferRef` with the hot potato receipt. - public fun return_paired_transfer_ref( - transfer_ref: TransferRef, - receipt: TransferRefReceipt - ) acquires PairedFungibleAssetRefs { - let TransferRefReceipt { metadata } = receipt; - assert!( - fungible_asset::transfer_ref_metadata(&transfer_ref) == metadata, - error::invalid_argument(ETRANSFER_REF_RECEIPT_MISMATCH) - ); - let metadata_addr = object_address(&metadata); - let transfer_ref_opt = &mut borrow_global_mut(metadata_addr).transfer_ref_opt; - option::fill(transfer_ref_opt, transfer_ref); - } - - #[view] - /// Check whether `BurnRef` has not been taken. - public fun paired_burn_ref_exists(): bool acquires CoinConversionMap, PairedFungibleAssetRefs { - let metadata = assert_paired_metadata_exists(); - let metadata_addr = object_address(&metadata); - assert!(exists(metadata_addr), error::internal(EPAIRED_FUNGIBLE_ASSET_REFS_NOT_FOUND)); - option::is_some(&borrow_global(metadata_addr).burn_ref_opt) - } - - /// Get the `BurnRef` of paired fungible asset of a coin type from `BurnCapability`. - public fun get_paired_burn_ref( - _: &BurnCapability - ): (BurnRef, BurnRefReceipt) acquires CoinConversionMap, PairedFungibleAssetRefs { - let metadata = assert_paired_metadata_exists(); - let metadata_addr = object_address(&metadata); - assert!(exists(metadata_addr), error::internal(EPAIRED_FUNGIBLE_ASSET_REFS_NOT_FOUND)); - let burn_ref_opt = &mut borrow_global_mut(metadata_addr).burn_ref_opt; - assert!(option::is_some(burn_ref_opt), error::not_found(EBURN_REF_NOT_FOUND)); - (option::extract(burn_ref_opt), BurnRefReceipt { metadata }) - } - - // Permanently convert to BurnRef, and take it from the pairing. - // (i.e. future calls to borrow/convert BurnRef will fail) - public fun convert_and_take_paired_burn_ref( - burn_cap: BurnCapability - ): BurnRef acquires CoinConversionMap, PairedFungibleAssetRefs { - destroy_burn_cap(burn_cap); - let metadata = assert_paired_metadata_exists(); - let metadata_addr = object_address(&metadata); - assert!(exists(metadata_addr), error::internal(EPAIRED_FUNGIBLE_ASSET_REFS_NOT_FOUND)); - let burn_ref_opt = &mut borrow_global_mut(metadata_addr).burn_ref_opt; - assert!(option::is_some(burn_ref_opt), error::not_found(EBURN_REF_NOT_FOUND)); - option::extract(burn_ref_opt) - } - - /// Return the `BurnRef` with the hot potato receipt. - public fun return_paired_burn_ref( - burn_ref: BurnRef, - receipt: BurnRefReceipt - ) acquires PairedFungibleAssetRefs { - let BurnRefReceipt { metadata } = receipt; - assert!( - fungible_asset::burn_ref_metadata(&burn_ref) == metadata, - error::invalid_argument(EBURN_REF_RECEIPT_MISMATCH) - ); - let metadata_addr = object_address(&metadata); - let burn_ref_opt = &mut borrow_global_mut(metadata_addr).burn_ref_opt; - option::fill(burn_ref_opt, burn_ref); - } - - inline fun borrow_paired_burn_ref( - _: &BurnCapability - ): &BurnRef acquires CoinConversionMap, PairedFungibleAssetRefs { - let metadata = assert_paired_metadata_exists(); - let metadata_addr = object_address(&metadata); - assert!(exists(metadata_addr), error::internal(EPAIRED_FUNGIBLE_ASSET_REFS_NOT_FOUND)); - let burn_ref_opt = &borrow_global(metadata_addr).burn_ref_opt; - assert!(option::is_some(burn_ref_opt), error::not_found(EBURN_REF_NOT_FOUND)); - option::borrow(burn_ref_opt) - } - - // - // Total supply config - // - - /// This should be called by on-chain governance to update the config and allow - /// or disallow upgradability of total supply. - public fun allow_supply_upgrades(_aptos_framework: &signer, _allowed: bool) { - abort error::invalid_state(ECOIN_SUPPLY_UPGRADE_NOT_SUPPORTED) - } - - inline fun calculate_amount_to_withdraw( - account_addr: address, - amount: u64 - ): (u64, u64) { - let coin_balance = coin_balance(account_addr); - if (coin_balance >= amount) { - (amount, 0) - } else { - let metadata = paired_metadata(); - if (option::is_some(&metadata) && primary_fungible_store::primary_store_exists( - account_addr, - option::destroy_some(metadata) - )) - (coin_balance, amount - coin_balance) - else - abort error::invalid_argument(EINSUFFICIENT_BALANCE) - } - } - - fun maybe_convert_to_fungible_store(account: address) acquires CoinStore, CoinConversionMap, CoinInfo { - if (!features::coin_to_fungible_asset_migration_feature_enabled()) { - abort error::unavailable(ECOIN_TO_FUNGIBLE_ASSET_FEATURE_NOT_ENABLED) - }; - assert!(is_coin_initialized(), error::invalid_argument(ECOIN_INFO_NOT_PUBLISHED)); - - let metadata = ensure_paired_metadata(); - let store = primary_fungible_store::ensure_primary_store_exists(account, metadata); - if (exists>(account)) { - let CoinStore { coin, frozen, deposit_events, withdraw_events } = move_from>( - account - ); - event::emit( - CoinEventHandleDeletion { - event_handle_creation_address: guid::creator_address( - event::guid(&deposit_events) - ), - deleted_deposit_event_handle_creation_number: guid::creation_num(event::guid(&deposit_events)), - deleted_withdraw_event_handle_creation_number: guid::creation_num(event::guid(&withdraw_events)) - } - ); - if (coin.value == 0) { - destroy_zero(coin); - } else { - if (std::features::module_event_migration_enabled()) { - event::emit(CoinWithdraw { coin_type: type_name(), account, amount: coin.value }); - } else { - event::emit_event( - &mut withdraw_events, - WithdrawEvent { amount: coin.value }, - ); - }; - fungible_asset::deposit_internal(object_address(&store), coin_to_fungible_asset(coin)); - }; - event::destroy_handle(deposit_events); - event::destroy_handle(withdraw_events); - // Note: - // It is possible the primary fungible store may already exist before this function call. - // In this case, if the account owns a frozen CoinStore and an unfrozen primary fungible store, this - // function would convert and deposit the rest coin into the primary store and freeze it to make the - // `frozen` semantic as consistent as possible. - if (frozen != fungible_asset::is_frozen(store)) { - fungible_asset::set_frozen_flag_internal(store, frozen); - } - }; - } - - /// Voluntarily migrate to fungible store for `CoinType` if not yet. - public entry fun migrate_to_fungible_store( - account: &signer - ) acquires CoinStore, CoinConversionMap, CoinInfo { - maybe_convert_to_fungible_store(signer::address_of(account)); - } - - /// Migrate to fungible store for `CoinType` if not yet. - public entry fun migrate_coin_store_to_fungible_store( - accounts: vector
- ) acquires CoinStore, CoinConversionMap, CoinInfo { - if (features::new_accounts_default_to_fa_apt_store_enabled()) { - std::vector::for_each(accounts, |account| { - maybe_convert_to_fungible_store(account); - }); - } - } - - // - // Getter functions - // - - /// A helper function that returns the address of CoinType. - fun coin_address(): address { - let type_info = type_info::type_of(); - type_info::account_address(&type_info) - } - - #[view] - /// Returns the balance of `owner` for provided `CoinType` and its paired FA if exists. - public fun balance(owner: address): u64 acquires CoinConversionMap, CoinStore { - let paired_metadata = paired_metadata(); - coin_balance(owner) + if (option::is_some(&paired_metadata)) { - primary_fungible_store::balance( - owner, - option::extract(&mut paired_metadata) - ) - } else { 0 } - } - - #[view] - /// Returns whether the balance of `owner` for provided `CoinType` and its paired FA is >= `amount`. - public fun is_balance_at_least(owner: address, amount: u64): bool acquires CoinConversionMap, CoinStore { - let coin_balance = coin_balance(owner); - if (coin_balance >= amount) { - return true - }; - - let paired_metadata = paired_metadata(); - let left_amount = amount - coin_balance; - if (option::is_some(&paired_metadata)) { - primary_fungible_store::is_balance_at_least( - owner, - option::extract(&mut paired_metadata), - left_amount - ) - } else { false } - } - - inline fun coin_balance(owner: address): u64 { - if (exists>(owner)) { - borrow_global>(owner).coin.value - } else { - 0 - } - } - - #[view] - /// Returns `true` if the type `CoinType` is an initialized coin. - public fun is_coin_initialized(): bool { - exists>(coin_address()) - } - - #[view] - /// Returns `true` is account_addr has frozen the CoinStore or if it's not registered at all - public fun is_coin_store_frozen( - account_addr: address - ): bool acquires CoinStore, CoinConversionMap { - if (!is_account_registered(account_addr)) { - return true - }; - - let coin_store = borrow_global>(account_addr); - coin_store.frozen - } - - #[view] - /// Returns `true` if `account_addr` is registered to receive `CoinType`. - public fun is_account_registered(account_addr: address): bool acquires CoinConversionMap { - assert!(is_coin_initialized(), error::invalid_argument(ECOIN_INFO_NOT_PUBLISHED)); - if (exists>(account_addr)) { - true - } else { - let paired_metadata_opt = paired_metadata(); - (option::is_some( - &paired_metadata_opt - ) && can_receive_paired_fungible_asset(account_addr, option::destroy_some(paired_metadata_opt))) - } - } - - #[view] - /// Returns the name of the coin. - public fun name(): string::String acquires CoinInfo { - borrow_global>(coin_address()).name - } - - #[view] - /// Returns the symbol of the coin, usually a shorter version of the name. - public fun symbol(): string::String acquires CoinInfo { - borrow_global>(coin_address()).symbol - } - - #[view] - /// Returns the number of decimals used to get its user representation. - /// For example, if `decimals` equals `2`, a balance of `505` coins should - /// be displayed to a user as `5.05` (`505 / 10 ** 2`). - public fun decimals(): u8 acquires CoinInfo { - borrow_global>(coin_address()).decimals - } - - #[view] - /// Returns the amount of coin in existence. - public fun supply(): Option acquires CoinInfo, CoinConversionMap { - let coin_supply = coin_supply(); - let metadata = paired_metadata(); - if (option::is_some(&metadata)) { - let fungible_asset_supply = fungible_asset::supply(option::extract(&mut metadata)); - if (option::is_some(&coin_supply)) { - let supply = option::borrow_mut(&mut coin_supply); - *supply = *supply + option::destroy_some(fungible_asset_supply); - }; - }; - coin_supply - } - - #[view] - /// Returns the amount of coin in existence. - public fun coin_supply(): Option acquires CoinInfo { - let maybe_supply = &borrow_global>(coin_address()).supply; - if (option::is_some(maybe_supply)) { - // We do track supply, in this case read from optional aggregator. - let supply = option::borrow(maybe_supply); - let value = optional_aggregator::read(supply); - option::some(value) - } else { - option::none() - } - } - // - // Public functions - // - - /// Burn `coin` with capability. - /// The capability `_cap` should be passed as a reference to `BurnCapability`. - public fun burn(coin: Coin, _cap: &BurnCapability) acquires CoinInfo { - burn_internal(coin); - } - - /// Burn `coin` from the specified `account` with capability. - /// The capability `burn_cap` should be passed as a reference to `BurnCapability`. - /// This function shouldn't fail as it's called as part of transaction fee burning. - /// - /// Note: This bypasses CoinStore::frozen -- coins within a frozen CoinStore can be burned. - public fun burn_from( - account_addr: address, - amount: u64, - burn_cap: &BurnCapability, - ) acquires CoinInfo, CoinStore, CoinConversionMap, PairedFungibleAssetRefs { - // Skip burning if amount is zero. This shouldn't error out as it's called as part of transaction fee burning. - if (amount == 0) { - return - }; - - let (coin_amount_to_burn, fa_amount_to_burn) = calculate_amount_to_withdraw( - account_addr, - amount - ); - if (coin_amount_to_burn > 0) { - let coin_store = borrow_global_mut>(account_addr); - let coin_to_burn = extract(&mut coin_store.coin, coin_amount_to_burn); - burn(coin_to_burn, burn_cap); - }; - if (fa_amount_to_burn > 0) { - fungible_asset::burn_from( - borrow_paired_burn_ref(burn_cap), - primary_fungible_store::primary_store(account_addr, option::destroy_some(paired_metadata())), - fa_amount_to_burn - ); - }; - } - - /// Deposit the coin balance into the recipient's account and emit an event. - public fun deposit( - account_addr: address, - coin: Coin - ) acquires CoinStore, CoinConversionMap, CoinInfo { - if (exists>(account_addr)) { - let coin_store = borrow_global_mut>(account_addr); - assert!( - !coin_store.frozen, - error::permission_denied(EFROZEN), - ); - if (std::features::module_event_migration_enabled()) { - event::emit( - CoinDeposit { coin_type: type_name(), account: account_addr, amount: coin.value } - ); - } else { - event::emit_event( - &mut coin_store.deposit_events, - DepositEvent { amount: coin.value }, - ); - }; - merge(&mut coin_store.coin, coin); - } else { - let metadata = paired_metadata(); - if (option::is_some(&metadata) && can_receive_paired_fungible_asset( - account_addr, - option::destroy_some(metadata) - )) { - primary_fungible_store::deposit(account_addr, coin_to_fungible_asset(coin)); - } else { - abort error::not_found(ECOIN_STORE_NOT_PUBLISHED) - }; - } - } - - inline fun can_receive_paired_fungible_asset( - account_address: address, - metadata: Object - ): bool { - (features::new_accounts_default_to_fa_apt_store_enabled() && object::object_address(&metadata) == @0xa) || { - let primary_store_address = primary_fungible_store::primary_store_address( - account_address, - metadata - ); - fungible_asset::store_exists(primary_store_address) - } - } - - /// Deposit the coin balance into the recipient's account without checking if the account is frozen. - /// This is for internal use only and doesn't emit an DepositEvent. - public(friend) fun force_deposit( - account_addr: address, - coin: Coin - ) acquires CoinStore, CoinConversionMap, CoinInfo { - if (exists>(account_addr)) { - let coin_store = borrow_global_mut>(account_addr); - merge(&mut coin_store.coin, coin); - } else { - let metadata = paired_metadata(); - if (option::is_some(&metadata) && can_receive_paired_fungible_asset( - account_addr, - option::destroy_some(metadata) - )) { - let fa = coin_to_fungible_asset(coin); - let metadata = fungible_asset::asset_metadata(&fa); - let store = primary_fungible_store::ensure_primary_store_exists(account_addr, metadata); - fungible_asset::deposit_internal(object::object_address(&store), fa); - } else { - abort error::not_found(ECOIN_STORE_NOT_PUBLISHED) - } - } - } - - /// Destroys a zero-value coin. Calls will fail if the `value` in the passed-in `token` is non-zero - /// so it is impossible to "burn" any non-zero amount of `Coin` without having - /// a `BurnCapability` for the specific `CoinType`. - public fun destroy_zero(zero_coin: Coin) { - spec { - update supply = supply - zero_coin.value; - }; - let Coin { value } = zero_coin; - assert!(value == 0, error::invalid_argument(EDESTRUCTION_OF_NONZERO_TOKEN)) - } - - /// Extracts `amount` from the passed-in `coin`, where the original token is modified in place. - public fun extract(coin: &mut Coin, amount: u64): Coin { - assert!(coin.value >= amount, error::invalid_argument(EINSUFFICIENT_BALANCE)); - spec { - update supply = supply - amount; - }; - coin.value = coin.value - amount; - spec { - update supply = supply + amount; - }; - Coin { value: amount } - } - - /// Extracts the entire amount from the passed-in `coin`, where the original token is modified in place. - public fun extract_all(coin: &mut Coin): Coin { - let total_value = coin.value; - spec { - update supply = supply - coin.value; - }; - coin.value = 0; - spec { - update supply = supply + total_value; - }; - Coin { value: total_value } - } - - #[legacy_entry_fun] - /// Freeze a CoinStore to prevent transfers - public entry fun freeze_coin_store( - account_addr: address, - _freeze_cap: &FreezeCapability, - ) acquires CoinStore { - let coin_store = borrow_global_mut>(account_addr); - coin_store.frozen = true; - } - - #[legacy_entry_fun] - /// Unfreeze a CoinStore to allow transfers - public entry fun unfreeze_coin_store( - account_addr: address, - _freeze_cap: &FreezeCapability, - ) acquires CoinStore { - let coin_store = borrow_global_mut>(account_addr); - coin_store.frozen = false; - } - - /// Upgrade total supply to use a parallelizable implementation if it is - /// available. - public entry fun upgrade_supply(_account: &signer) { - abort error::invalid_state(ECOIN_SUPPLY_UPGRADE_NOT_SUPPORTED) - } - - /// Creates a new Coin with given `CoinType` and returns minting/freezing/burning capabilities. - /// The given signer also becomes the account hosting the information about the coin - /// (name, supply, etc.). Supply is initialized as non-parallelizable integer. - public fun initialize( - account: &signer, - name: string::String, - symbol: string::String, - decimals: u8, - monitor_supply: bool, - ): (BurnCapability, FreezeCapability, MintCapability) { - initialize_internal(account, name, symbol, decimals, monitor_supply, false) - } - - /// Same as `initialize` but supply can be initialized to parallelizable aggregator. - public(friend) fun initialize_with_parallelizable_supply( - account: &signer, - name: string::String, - symbol: string::String, - decimals: u8, - monitor_supply: bool, - ): (BurnCapability, FreezeCapability, MintCapability) { - system_addresses::assert_aptos_framework(account); - initialize_internal(account, name, symbol, decimals, monitor_supply, true) - } - - fun initialize_internal( - account: &signer, - name: string::String, - symbol: string::String, - decimals: u8, - monitor_supply: bool, - parallelizable: bool, - ): (BurnCapability, FreezeCapability, MintCapability) { - let account_addr = signer::address_of(account); - - assert!( - coin_address() == account_addr, - error::invalid_argument(ECOIN_INFO_ADDRESS_MISMATCH), - ); - - assert!( - !exists>(account_addr), - error::already_exists(ECOIN_INFO_ALREADY_PUBLISHED), - ); - - assert!(string::length(&name) <= MAX_COIN_NAME_LENGTH, error::invalid_argument(ECOIN_NAME_TOO_LONG)); - assert!(string::length(&symbol) <= MAX_COIN_SYMBOL_LENGTH, error::invalid_argument(ECOIN_SYMBOL_TOO_LONG)); - - let coin_info = CoinInfo { - name, - symbol, - decimals, - supply: if (monitor_supply) { - option::some( - optional_aggregator::new(parallelizable) - ) - } else { option::none() }, - }; - move_to(account, coin_info); - - (BurnCapability {}, FreezeCapability {}, MintCapability {}) - } - - /// "Merges" the two given coins. The coin passed in as `dst_coin` will have a value equal - /// to the sum of the two tokens (`dst_coin` and `source_coin`). - public fun merge(dst_coin: &mut Coin, source_coin: Coin) { - spec { - assume dst_coin.value + source_coin.value <= MAX_U64; - }; - spec { - update supply = supply - source_coin.value; - }; - let Coin { value } = source_coin; - spec { - update supply = supply + value; - }; - dst_coin.value = dst_coin.value + value; - } - - /// Mint new `Coin` with capability. - /// The capability `_cap` should be passed as reference to `MintCapability`. - /// Returns minted `Coin`. - public fun mint( - amount: u64, - _cap: &MintCapability, - ): Coin acquires CoinInfo { - mint_internal(amount) - } - - public fun register(account: &signer) acquires CoinConversionMap { - let account_addr = signer::address_of(account); - // Short-circuit and do nothing if account is already registered for CoinType. - if (is_account_registered(account_addr)) { - return - }; - - account::register_coin(account_addr); - let coin_store = CoinStore { - coin: Coin { value: 0 }, - frozen: false, - deposit_events: account::new_event_handle(account), - withdraw_events: account::new_event_handle(account), - }; - move_to(account, coin_store); - } - - /// Transfers `amount` of coins `CoinType` from `from` to `to`. - public entry fun transfer( - from: &signer, - to: address, - amount: u64, - ) acquires CoinStore, CoinConversionMap, CoinInfo, PairedCoinType { - let coin = withdraw(from, amount); - deposit(to, coin); - } - - /// Returns the `value` passed in `coin`. - public fun value(coin: &Coin): u64 { - coin.value - } - - /// Withdraw specified `amount` of coin `CoinType` from the signing account. - public fun withdraw( - account: &signer, - amount: u64, - ): Coin acquires CoinStore, CoinConversionMap, CoinInfo, PairedCoinType { - let account_addr = signer::address_of(account); - - let (coin_amount_to_withdraw, fa_amount_to_withdraw) = calculate_amount_to_withdraw( - account_addr, - amount - ); - let withdrawn_coin = if (coin_amount_to_withdraw > 0) { - let coin_store = borrow_global_mut>(account_addr); - assert!( - !coin_store.frozen, - error::permission_denied(EFROZEN), - ); - if (std::features::module_event_migration_enabled()) { - event::emit( - CoinWithdraw { - coin_type: type_name(), account: account_addr, amount: coin_amount_to_withdraw - } - ); - } else { - event::emit_event( - &mut coin_store.withdraw_events, - WithdrawEvent { amount: coin_amount_to_withdraw }, - ); - }; - extract(&mut coin_store.coin, coin_amount_to_withdraw) - } else { - zero() - }; - if (fa_amount_to_withdraw > 0) { - let fa = primary_fungible_store::withdraw( - account, - option::destroy_some(paired_metadata()), - fa_amount_to_withdraw - ); - merge(&mut withdrawn_coin, fungible_asset_to_coin(fa)); - }; - withdrawn_coin - } - - /// Create a new `Coin` with a value of `0`. - public fun zero(): Coin { - spec { - update supply = supply + 0; - }; - Coin { - value: 0 - } - } - - /// Destroy a freeze capability. Freeze capability is dangerous and therefore should be destroyed if not used. - public fun destroy_freeze_cap(freeze_cap: FreezeCapability) { - let FreezeCapability {} = freeze_cap; - } - - /// Destroy a mint capability. - public fun destroy_mint_cap(mint_cap: MintCapability) { - let MintCapability {} = mint_cap; - } - - /// Destroy a burn capability. - public fun destroy_burn_cap(burn_cap: BurnCapability) { - let BurnCapability {} = burn_cap; - } - - fun mint_internal(amount: u64): Coin acquires CoinInfo { - if (amount == 0) { - return Coin { - value: 0 - } - }; - - let maybe_supply = &mut borrow_global_mut>(coin_address()).supply; - if (option::is_some(maybe_supply)) { - let supply = option::borrow_mut(maybe_supply); - spec { - use aptos_framework::optional_aggregator; - use aptos_framework::aggregator; - assume optional_aggregator::is_parallelizable(supply) ==> (aggregator::spec_aggregator_get_val( - option::borrow(supply.aggregator) - ) - + amount <= aggregator::spec_get_limit(option::borrow(supply.aggregator))); - assume !optional_aggregator::is_parallelizable(supply) ==> - (option::borrow(supply.integer).value + amount <= option::borrow(supply.integer).limit); - }; - optional_aggregator::add(supply, (amount as u128)); - }; - spec { - update supply = supply + amount; - }; - Coin { value: amount } - } - - fun burn_internal(coin: Coin): u64 acquires CoinInfo { - spec { - update supply = supply - coin.value; - }; - let Coin { value: amount } = coin; - if (amount != 0) { - let maybe_supply = &mut borrow_global_mut>(coin_address()).supply; - if (option::is_some(maybe_supply)) { - let supply = option::borrow_mut(maybe_supply); - optional_aggregator::sub(supply, (amount as u128)); - }; - }; - amount - } - - #[test_only] - use aptos_framework::aggregator; - - #[test_only] - struct FakeMoney {} - - #[test_only] - struct FakeMoneyCapabilities has key { - burn_cap: BurnCapability, - freeze_cap: FreezeCapability, - mint_cap: MintCapability, - } - - #[test_only] - struct FakeMoneyRefs has key { - mint_ref: MintRef, - transfer_ref: TransferRef, - burn_ref: BurnRef, - } - - #[test_only] - fun create_coin_store(account: &signer) { - assert!(is_coin_initialized(), error::invalid_argument(ECOIN_INFO_NOT_PUBLISHED)); - if (!exists>(signer::address_of(account))) { - let coin_store = CoinStore { - coin: Coin { value: 0 }, - frozen: false, - deposit_events: account::new_event_handle(account), - withdraw_events: account::new_event_handle(account), - }; - move_to(account, coin_store); - } - } - - #[test_only] - fun coin_store_exists(account: address): bool { - exists>(account) - } - - #[test_only] - fun initialize_fake_money( - account: &signer, - decimals: u8, - monitor_supply: bool, - ): (BurnCapability, FreezeCapability, MintCapability) { - aggregator_factory::initialize_aggregator_factory_for_test(account); - initialize( - account, - string::utf8(b"Fake money"), - string::utf8(b"FMD"), - decimals, - monitor_supply - ) - } - - #[test_only] - public fun initialize_and_register_fake_money( - account: &signer, - decimals: u8, - monitor_supply: bool, - ): (BurnCapability, FreezeCapability, MintCapability) { - let (burn_cap, freeze_cap, mint_cap) = initialize_fake_money( - account, - decimals, - monitor_supply - ); - create_coin_store(account); - create_coin_conversion_map(account); - (burn_cap, freeze_cap, mint_cap) - } - - #[test_only] - public entry fun create_fake_money( - source: &signer, - destination: &signer, - amount: u64 - ) acquires CoinInfo, CoinStore, CoinConversionMap { - let (burn_cap, freeze_cap, mint_cap) = initialize_and_register_fake_money(source, 18, true); - - create_coin_store(destination); - let coins_minted = mint(amount, &mint_cap); - deposit(signer::address_of(source), coins_minted); - move_to(source, FakeMoneyCapabilities { - burn_cap, - freeze_cap, - mint_cap, - }); - } - - #[test(source = @0x1, destination = @0x2)] - public entry fun end_to_end( - source: signer, - destination: signer, - ) acquires CoinInfo, CoinStore, CoinConversionMap, PairedCoinType { - let source_addr = signer::address_of(&source); - account::create_account_for_test(source_addr); - let destination_addr = signer::address_of(&destination); - account::create_account_for_test(destination_addr); - - let name = string::utf8(b"Fake money"); - let symbol = string::utf8(b"FMD"); - - let (burn_cap, freeze_cap, mint_cap) = initialize_and_register_fake_money( - &source, - 18, - true - ); - register(&source); - register(&destination); - assert!(*option::borrow(&supply()) == 0, 0); - - assert!(name() == name, 1); - assert!(symbol() == symbol, 2); - assert!(decimals() == 18, 3); - - let coins_minted = mint(100, &mint_cap); - deposit(source_addr, coins_minted); - maybe_convert_to_fungible_store(source_addr); - assert!(!coin_store_exists(source_addr), 0); - assert!(coin_store_exists(destination_addr), 0); - - transfer(&source, destination_addr, 50); - maybe_convert_to_fungible_store(destination_addr); - assert!(!coin_store_exists(destination_addr), 0); - - assert!(balance(source_addr) == 50, 4); - assert!(balance(destination_addr) == 50, 5); - assert!(*option::borrow(&supply()) == 100, 6); - - let coin = withdraw(&source, 10); - assert!(value(&coin) == 10, 7); - burn(coin, &burn_cap); - assert!(*option::borrow(&supply()) == 90, 8); - - move_to(&source, FakeMoneyCapabilities { - burn_cap, - freeze_cap, - mint_cap, - }); - } - - #[test(source = @0x1, destination = @0x2)] - public entry fun end_to_end_no_supply( - source: signer, - destination: signer, - ) acquires CoinInfo, CoinStore, CoinConversionMap, PairedCoinType { - let source_addr = signer::address_of(&source); - account::create_account_for_test(source_addr); - let destination_addr = signer::address_of(&destination); - account::create_account_for_test(destination_addr); - - let (burn_cap, freeze_cap, mint_cap) = initialize_and_register_fake_money(&source, 1, false); - - register(&destination); - assert!(option::is_none(&supply()), 0); - - let coins_minted = mint(100, &mint_cap); - deposit(source_addr, coins_minted); - transfer(&source, destination_addr, 50); - - assert!(balance(source_addr) == 50, 1); - assert!(balance(destination_addr) == 50, 2); - assert!(option::is_none(&supply()), 3); - - let coin = withdraw(&source, 10); - burn(coin, &burn_cap); - assert!(option::is_none(&supply()), 4); - - move_to(&source, FakeMoneyCapabilities { - burn_cap, - freeze_cap, - mint_cap, - }); - } - - #[test(source = @0x2, framework = @aptos_framework)] - #[expected_failure(abort_code = 0x10001, location = Self)] - public fun fail_initialize(source: signer, framework: signer) { - aggregator_factory::initialize_aggregator_factory_for_test(&framework); - let (burn_cap, freeze_cap, mint_cap) = initialize( - &source, - string::utf8(b"Fake money"), - string::utf8(b"FMD"), - 1, - true, - ); - - move_to(&source, FakeMoneyCapabilities { - burn_cap, - freeze_cap, - mint_cap, - }); - } - - #[test(source = @0x1, destination = @0x2)] - public entry fun transfer_to_migrated_destination( - source: signer, - destination: signer, - ) acquires CoinInfo, CoinStore, CoinConversionMap, PairedCoinType { - let source_addr = signer::address_of(&source); - account::create_account_for_test(source_addr); - let destination_addr = signer::address_of(&destination); - account::create_account_for_test(destination_addr); - - let (burn_cap, freeze_cap, mint_cap) = initialize_and_register_fake_money(&source, 1, true); - assert!(*option::borrow(&supply()) == 0, 0); - - let coins_minted = mint(100, &mint_cap); - deposit(source_addr, coins_minted); - maybe_convert_to_fungible_store(source_addr); - assert!(!coin_store_exists(source_addr), 0); - maybe_convert_to_fungible_store(destination_addr); - transfer(&source, destination_addr, 50); - assert!(balance(destination_addr) == 50, 2); - assert!(!coin_store_exists(destination_addr), 0); - - move_to(&source, FakeMoneyCapabilities { - burn_cap, - freeze_cap, - mint_cap, - }); - } - - #[test(source = @0x1)] - public entry fun test_burn_from_with_capability( - source: signer, - ) acquires CoinInfo, CoinStore, CoinConversionMap, PairedFungibleAssetRefs { - let source_addr = signer::address_of(&source); - account::create_account_for_test(source_addr); - let (burn_cap, freeze_cap, mint_cap) = initialize_and_register_fake_money(&source, 1, true); - - let coins_minted = mint(100, &mint_cap); - deposit(source_addr, coins_minted); - let fa_minted = coin_to_fungible_asset(mint(200, &mint_cap)); - primary_fungible_store::deposit(source_addr, fa_minted); - - // Burn coin only with both stores - burn_from(source_addr, 50, &burn_cap); - assert!(balance(source_addr) == 250, 0); - assert!(coin_balance(source_addr) == 50, 0); - - // Burn coin and fa with both stores - burn_from(source_addr, 100, &burn_cap); - assert!(balance(source_addr) == 150, 0); - assert!(primary_fungible_store::balance(source_addr, ensure_paired_metadata()) == 150, 0); - - // Burn fa only with both stores - burn_from(source_addr, 100, &burn_cap); - assert!(balance(source_addr) == 50, 0); - assert!(primary_fungible_store::balance(source_addr, ensure_paired_metadata()) == 50, 0); - - // Burn fa only with only fungible store - let coins_minted = mint(50, &mint_cap); - deposit(source_addr, coins_minted); - maybe_convert_to_fungible_store(source_addr); - assert!(!coin_store_exists(source_addr), 0); - assert!(balance(source_addr) == 100, 0); - assert!(*option::borrow(&supply()) == 100, 1); - - burn_from(source_addr, 10, &burn_cap); - assert!(balance(source_addr) == 90, 2); - assert!(*option::borrow(&supply()) == 90, 3); - - move_to(&source, FakeMoneyCapabilities { - burn_cap, - freeze_cap, - mint_cap, - }); - } - - #[test(source = @0x1)] - #[expected_failure(abort_code = 0x10007, location = Self)] - public fun test_destroy_non_zero( - source: signer, - ) acquires CoinInfo { - account::create_account_for_test(signer::address_of(&source)); - let (burn_cap, freeze_cap, mint_cap) = initialize_and_register_fake_money(&source, 1, true); - let coins_minted = mint(100, &mint_cap); - destroy_zero(coins_minted); - - move_to(&source, FakeMoneyCapabilities { - burn_cap, - freeze_cap, - mint_cap, - }); - } - - #[test(source = @0x1)] - public entry fun test_extract( - source: signer, - ) acquires CoinInfo, CoinStore, CoinConversionMap { - let source_addr = signer::address_of(&source); - account::create_account_for_test(source_addr); - let (burn_cap, freeze_cap, mint_cap) = initialize_and_register_fake_money(&source, 1, true); - - let coins_minted = mint(100, &mint_cap); - - let extracted = extract(&mut coins_minted, 25); - assert!(value(&coins_minted) == 75, 0); - assert!(value(&extracted) == 25, 1); - - deposit(source_addr, coins_minted); - deposit(source_addr, extracted); - - assert!(balance(source_addr) == 100, 2); - - move_to(&source, FakeMoneyCapabilities { - burn_cap, - freeze_cap, - mint_cap, - }); - } - - #[test(source = @0x1)] - public fun test_is_coin_initialized(source: signer) { - assert!(!is_coin_initialized(), 0); - - let (burn_cap, freeze_cap, mint_cap) = initialize_fake_money(&source, 1, true); - assert!(is_coin_initialized(), 1); - - move_to(&source, FakeMoneyCapabilities { - burn_cap, - freeze_cap, - mint_cap, - }); - } - - #[test(account = @0x1)] - public fun test_is_coin_store_frozen(account: signer) acquires CoinStore, CoinConversionMap, CoinInfo { - let account_addr = signer::address_of(&account); - account::create_account_for_test(account_addr); - let (burn_cap, freeze_cap, mint_cap) = initialize_and_register_fake_money(&account, 18, true); - assert!(coin_store_exists(account_addr), 1); - assert!(!is_coin_store_frozen(account_addr), 1); - maybe_convert_to_fungible_store(account_addr); - assert!(!coin_store_exists(account_addr), 1); - - move_to(&account, FakeMoneyCapabilities { - burn_cap, - freeze_cap, - mint_cap, - }); - } - - #[test] - fun test_zero() { - let zero = zero(); - assert!(value(&zero) == 0, 1); - destroy_zero(zero); - } - - #[test(account = @0x1)] - public entry fun burn_frozen( - account: signer - ) acquires CoinInfo, CoinStore, CoinConversionMap, PairedFungibleAssetRefs { - let account_addr = signer::address_of(&account); - account::create_account_for_test(account_addr); - let (burn_cap, freeze_cap, mint_cap) = initialize_and_register_fake_money(&account, 18, true); - - let coins_minted = mint(100, &mint_cap); - deposit(account_addr, coins_minted); - - freeze_coin_store(account_addr, &freeze_cap); - burn_from(account_addr, 90, &burn_cap); - maybe_convert_to_fungible_store(account_addr); - assert!(primary_fungible_store::is_frozen(account_addr, ensure_paired_metadata()), 1); - assert!(primary_fungible_store::balance(account_addr, ensure_paired_metadata()) == 10, 1); - - move_to(&account, FakeMoneyCapabilities { - burn_cap, - freeze_cap, - mint_cap, - }); - } - - #[test(account = @0x1)] - #[expected_failure(abort_code = 0x50003, location = aptos_framework::fungible_asset)] - public entry fun withdraw_frozen(account: signer) acquires CoinInfo, CoinStore, CoinConversionMap, PairedCoinType { - let account_addr = signer::address_of(&account); - account::create_account_for_test(account_addr); - let (burn_cap, freeze_cap, mint_cap) = initialize_and_register_fake_money(&account, 18, true); - let coins_minted = mint(100, &mint_cap); - deposit(account_addr, coins_minted); - - freeze_coin_store(account_addr, &freeze_cap); - maybe_convert_to_fungible_store(account_addr); - let coin = withdraw(&account, 90); - burn(coin, &burn_cap); - - move_to(&account, FakeMoneyCapabilities { - burn_cap, - freeze_cap, - mint_cap, - }); - } - - #[test(account = @0x1)] - #[expected_failure(abort_code = 0x5000A, location = Self)] - public entry fun deposit_frozen(account: signer) acquires CoinInfo, CoinStore, CoinConversionMap { - let account_addr = signer::address_of(&account); - account::create_account_for_test(account_addr); - let (burn_cap, freeze_cap, mint_cap) = initialize_and_register_fake_money(&account, 18, true); - - let coins_minted = mint(100, &mint_cap); - freeze_coin_store(account_addr, &freeze_cap); - deposit(account_addr, coins_minted); - - move_to(&account, FakeMoneyCapabilities { - burn_cap, - freeze_cap, - mint_cap, - }); - } - - #[test(account = @0x1)] - public entry fun deposit_withdraw_unfrozen( - account: signer - ) acquires CoinInfo, CoinStore, CoinConversionMap, PairedCoinType { - let account_addr = signer::address_of(&account); - account::create_account_for_test(account_addr); - let (burn_cap, freeze_cap, mint_cap) = initialize_and_register_fake_money(&account, 18, true); - - let coins_minted = mint(100, &mint_cap); - freeze_coin_store(account_addr, &freeze_cap); - unfreeze_coin_store(account_addr, &freeze_cap); - deposit(account_addr, coins_minted); - - freeze_coin_store(account_addr, &freeze_cap); - unfreeze_coin_store(account_addr, &freeze_cap); - let coin = withdraw(&account, 10); - burn(coin, &burn_cap); - - move_to(&account, FakeMoneyCapabilities { - burn_cap, - freeze_cap, - mint_cap, - }); - } - - #[test_only] - fun initialize_with_aggregator(account: &signer) { - let (burn_cap, freeze_cap, mint_cap) = initialize_with_parallelizable_supply( - account, - string::utf8(b"Fake money"), - string::utf8(b"FMD"), - 1, - true - ); - move_to(account, FakeMoneyCapabilities { - burn_cap, - freeze_cap, - mint_cap, - }); - } - - #[test_only] - fun initialize_with_integer(account: &signer) { - let (burn_cap, freeze_cap, mint_cap) = initialize( - account, - string::utf8(b"Fake money"), - string::utf8(b"FMD"), - 1, - true - ); - move_to(account, FakeMoneyCapabilities { - burn_cap, - freeze_cap, - mint_cap, - }); - } - - - #[test(framework = @aptos_framework, other = @0x123)] - #[expected_failure(abort_code = 0x50003, location = aptos_framework::system_addresses)] - fun test_supply_initialize_fails(framework: signer, other: signer) { - aggregator_factory::initialize_aggregator_factory_for_test(&framework); - initialize_with_aggregator(&other); - } - - #[test(other = @0x123)] - #[expected_failure(abort_code = 0x10003, location = Self)] - fun test_create_coin_store_with_non_coin_type(other: signer) acquires CoinConversionMap { - register(&other); - } - - #[test(other = @0x123)] - #[expected_failure(abort_code = 0x10003, location = Self)] - fun test_migration_coin_store_with_non_coin_type(other: signer) acquires CoinConversionMap, CoinStore, CoinInfo { - migrate_to_fungible_store(&other); - } - - #[test(framework = @aptos_framework)] - fun test_supply_initialize(framework: signer) acquires CoinInfo { - aggregator_factory::initialize_aggregator_factory_for_test(&framework); - initialize_with_aggregator(&framework); - - let maybe_supply = &mut borrow_global_mut>(coin_address()).supply; - let supply = option::borrow_mut(maybe_supply); - - // Supply should be parallelizable. - assert!(optional_aggregator::is_parallelizable(supply), 0); - - optional_aggregator::add(supply, 100); - optional_aggregator::sub(supply, 50); - optional_aggregator::add(supply, 950); - assert!(optional_aggregator::read(supply) == 1000, 0); - } - - #[test_only] - /// Maximum possible coin supply. - const MAX_U128: u128 = 340282366920938463463374607431768211455; - - #[test(framework = @aptos_framework)] - #[expected_failure(abort_code = 0x20001, location = aptos_framework::aggregator)] - fun test_supply_overflow(framework: signer) acquires CoinInfo { - aggregator_factory::initialize_aggregator_factory_for_test(&framework); - initialize_with_aggregator(&framework); - - let maybe_supply = &mut borrow_global_mut>(coin_address()).supply; - let supply = option::borrow_mut(maybe_supply); - - optional_aggregator::add(supply, MAX_U128); - optional_aggregator::add(supply, 1); - optional_aggregator::sub(supply, 1); - } - - #[test_only] - fun destroy_aggregatable_coin_for_test(aggregatable_coin: AggregatableCoin) { - let AggregatableCoin { value } = aggregatable_coin; - aggregator::destroy(value); - } - - #[test_only] - fun deposit_to_coin_store(account_addr: address, coin: Coin) acquires CoinStore { - assert!( - coin_store_exists(account_addr), - error::not_found(ECOIN_STORE_NOT_PUBLISHED), - ); - - let coin_store = borrow_global_mut>(account_addr); - assert!( - !coin_store.frozen, - error::permission_denied(EFROZEN), - ); - - event::emit_event( - &mut coin_store.deposit_events, - DepositEvent { amount: coin.value }, - ); - - merge(&mut coin_store.coin, coin); - } - - #[test(account = @aptos_framework)] - fun test_conversion_basic( - account: &signer - ) acquires CoinConversionMap, CoinInfo, CoinStore, PairedCoinType, PairedFungibleAssetRefs { - let account_addr = signer::address_of(account); - account::create_account_for_test(account_addr); - let (burn_cap, freeze_cap, mint_cap) = initialize_and_register_fake_money(account, 1, true); - - assert!(fungible_asset::name(ensure_paired_metadata()) == name(), 0); - assert!(fungible_asset::symbol(ensure_paired_metadata()) == symbol(), 0); - assert!(fungible_asset::decimals(ensure_paired_metadata()) == decimals(), 0); - - let minted_coin = mint(100, &mint_cap); - let converted_fa = coin_to_fungible_asset(minted_coin); - - // check and get refs - assert!(paired_mint_ref_exists(), 0); - assert!(paired_transfer_ref_exists(), 0); - assert!(paired_burn_ref_exists(), 0); - let (mint_ref, mint_ref_receipt) = get_paired_mint_ref(&mint_cap); - let (transfer_ref, transfer_ref_receipt) = get_paired_transfer_ref(&freeze_cap); - let (burn_ref, burn_ref_receipt) = get_paired_burn_ref(&burn_cap); - assert!(!paired_mint_ref_exists(), 0); - assert!(!paired_transfer_ref_exists(), 0); - assert!(!paired_burn_ref_exists(), 0); - - let minted_fa = fungible_asset::mint(&mint_ref, 100); - assert!(&converted_fa == &minted_fa, 0); - - let coin = fungible_asset_to_coin(converted_fa); - assert!(value(&coin) == 100, 0); - - deposit_to_coin_store(account_addr, coin); - assert!(coin_store_exists(account_addr), 0); - primary_fungible_store::deposit(account_addr, minted_fa); - assert!(balance(account_addr) == 200, 0); - - let withdrawn_coin = withdraw(account, 1); - maybe_convert_to_fungible_store(account_addr); - assert!(!coin_store_exists(account_addr), 0); - assert!(balance(account_addr) == 199, 0); - assert!(primary_fungible_store::balance(account_addr, ensure_paired_metadata()) == 199, 0); - - let fa = coin_to_fungible_asset(withdrawn_coin); - fungible_asset::burn(&burn_ref, fa); - - // Return and check the refs - return_paired_mint_ref(mint_ref, mint_ref_receipt); - return_paired_transfer_ref(transfer_ref, transfer_ref_receipt); - return_paired_burn_ref(burn_ref, burn_ref_receipt); - assert!(paired_mint_ref_exists(), 0); - assert!(paired_transfer_ref_exists(), 0); - assert!(paired_burn_ref_exists(), 0); - - move_to(account, FakeMoneyCapabilities { - burn_cap, - freeze_cap, - mint_cap, - }); - } - - #[test(account = @aptos_framework, aaron = @0xcafe)] - fun test_balance_with_both_stores( - account: &signer, - aaron: &signer - ) acquires CoinConversionMap, CoinInfo, CoinStore { - let account_addr = signer::address_of(account); - let aaron_addr = signer::address_of(aaron); - account::create_account_for_test(account_addr); - account::create_account_for_test(aaron_addr); - let (burn_cap, freeze_cap, mint_cap) = initialize_and_register_fake_money(account, 1, true); - create_coin_store(aaron); - let coin = mint(100, &mint_cap); - let fa = coin_to_fungible_asset(mint(100, &mint_cap)); - primary_fungible_store::deposit(aaron_addr, fa); - deposit_to_coin_store(aaron_addr, coin); - assert!(coin_balance(aaron_addr) == 100, 0); - assert!(balance(aaron_addr) == 200, 0); - maybe_convert_to_fungible_store(aaron_addr); - assert!(balance(aaron_addr) == 200, 0); - assert!(coin_balance(aaron_addr) == 0, 0); - - move_to(account, FakeMoneyCapabilities { - burn_cap, - freeze_cap, - mint_cap, - }); - } - - #[test(account = @aptos_framework)] - fun test_deposit( - account: &signer, - ) acquires CoinConversionMap, CoinInfo, CoinStore { - let account_addr = signer::address_of(account); - account::create_account_for_test(account_addr); - let (burn_cap, freeze_cap, mint_cap) = initialize_and_register_fake_money(account, 1, true); - let coin = mint(100, &mint_cap); - deposit(account_addr, coin); - assert!(coin_store_exists(account_addr), 0); - assert!(primary_fungible_store::balance(account_addr, ensure_paired_metadata()) == 0, 0); - assert!(balance(account_addr) == 100, 0); - - maybe_convert_to_fungible_store(account_addr); - let coin = mint(100, &mint_cap); - deposit(account_addr, coin); - assert!(!coin_store_exists(account_addr), 0); - assert!(balance(account_addr) == 200, 0); - assert!(primary_fungible_store::balance(account_addr, ensure_paired_metadata()) == 200, 0); - - move_to(account, FakeMoneyCapabilities { - burn_cap, - freeze_cap, - mint_cap, - }); - } - - #[test(account = @aptos_framework)] - fun test_withdraw( - account: &signer, - ) acquires CoinConversionMap, CoinInfo, CoinStore, PairedCoinType { - let account_addr = signer::address_of(account); - account::create_account_for_test(account_addr); - let (burn_cap, freeze_cap, mint_cap) = initialize_and_register_fake_money(account, 1, true); - let coin = mint(200, &mint_cap); - deposit_to_coin_store(account_addr, coin); - assert!(coin_balance(account_addr) == 200, 0); - assert!(balance(account_addr) == 200, 0); - - // Withdraw from coin store only. - let coin = withdraw(account, 100); - assert!(coin_balance(account_addr) == 100, 0); - assert!(balance(account_addr) == 100, 0); - - let fa = coin_to_fungible_asset(coin); - primary_fungible_store::deposit(account_addr, fa); - assert!(coin_store_exists(account_addr), 0); - assert!(primary_fungible_store::balance(account_addr, ensure_paired_metadata()) == 100, 0); - assert!(balance(account_addr) == 200, 0); - - // Withdraw from both coin store and fungible store. - let coin = withdraw(account, 150); - assert!(coin_balance(account_addr) == 0, 0); - assert!(primary_fungible_store::balance(account_addr, ensure_paired_metadata()) == 50, 0); - - deposit_to_coin_store(account_addr, coin); - maybe_convert_to_fungible_store(account_addr); - assert!(!coin_store_exists(account_addr), 0); - assert!(balance(account_addr) == 200, 0); - assert!(primary_fungible_store::balance(account_addr, ensure_paired_metadata()) == 200, 0); - - // Withdraw from fungible store only. - let coin = withdraw(account, 150); - assert!(balance(account_addr) == 50, 0); - burn(coin, &burn_cap); - - move_to(account, FakeMoneyCapabilities { - burn_cap, - freeze_cap, - mint_cap, - }); - } - - #[test(account = @aptos_framework)] - fun test_supply( - account: &signer, - ) acquires CoinConversionMap, CoinInfo, PairedCoinType, PairedFungibleAssetRefs { - account::create_account_for_test(signer::address_of(account)); - let (burn_cap, freeze_cap, mint_cap) = initialize_and_register_fake_money(account, 1, true); - let coin = mint(100, &mint_cap); - ensure_paired_metadata(); - let (mint_ref, mint_ref_receipt) = get_paired_mint_ref(&mint_cap); - let (burn_ref, burn_ref_receipt) = get_paired_burn_ref(&burn_cap); - let fungible_asset = fungible_asset::mint(&mint_ref, 50); - assert!(option::is_none(&fungible_asset::maximum(ensure_paired_metadata())), 0); - assert!(supply() == option::some(150), 0); - assert!(coin_supply() == option::some(100), 0); - assert!(fungible_asset::supply(ensure_paired_metadata()) == option::some(50), 0); - let fa_from_coin = coin_to_fungible_asset(coin); - assert!(supply() == option::some(150), 0); - assert!(coin_supply() == option::some(0), 0); - assert!(fungible_asset::supply(ensure_paired_metadata()) == option::some(150), 0); - - let coin_from_fa = fungible_asset_to_coin(fungible_asset); - assert!(supply() == option::some(150), 0); - assert!(coin_supply() == option::some(50), 0); - assert!(fungible_asset::supply(ensure_paired_metadata()) == option::some(100), 0); - burn(coin_from_fa, &burn_cap); - fungible_asset::burn(&burn_ref, fa_from_coin); - assert!(supply() == option::some(0), 0); - return_paired_mint_ref(mint_ref, mint_ref_receipt); - return_paired_burn_ref(burn_ref, burn_ref_receipt); - move_to(account, FakeMoneyCapabilities { - burn_cap, - freeze_cap, - mint_cap, - }); - } - - #[test(account = @aptos_framework, aaron = @0xaa10, bob = @0xb0b)] - fun test_force_deposit( - account: &signer, - aaron: &signer, - bob: &signer - ) acquires CoinConversionMap, CoinInfo, CoinStore { - let account_addr = signer::address_of(account); - let aaron_addr = signer::address_of(aaron); - let bob_addr = signer::address_of(bob); - account::create_account_for_test(account_addr); - account::create_account_for_test(aaron_addr); - account::create_account_for_test(bob_addr); - let (burn_cap, freeze_cap, mint_cap) = initialize_and_register_fake_money(account, 1, true); - maybe_convert_to_fungible_store(aaron_addr); - maybe_convert_to_fungible_store(bob_addr); - deposit(aaron_addr, mint(1, &mint_cap)); - - force_deposit(account_addr, mint(100, &mint_cap)); - force_deposit(aaron_addr, mint(50, &mint_cap)); - assert!( - primary_fungible_store::balance(aaron_addr, option::extract(&mut paired_metadata())) == 51, - 0 - ); - assert!(coin_balance(account_addr) == 100, 0); - force_deposit(bob_addr, mint(1, &mint_cap)); - move_to(account, FakeMoneyCapabilities { - burn_cap, - freeze_cap, - mint_cap, - }); - } - - #[test(account = @aptos_framework, aaron = @0xaa10, bob = @0xb0b)] - fun test_is_account_registered( - account: &signer, - aaron: &signer, - bob: &signer, - ) acquires CoinConversionMap, CoinInfo, CoinStore { - let account_addr = signer::address_of(account); - let aaron_addr = signer::address_of(aaron); - let bob_addr = signer::address_of(bob); - account::create_account_for_test(account_addr); - account::create_account_for_test(aaron_addr); - account::create_account_for_test(bob_addr); - let feature = features::get_new_accounts_default_to_fa_apt_store_feature(); - features::change_feature_flags_for_testing(account, vector[], vector[feature]); - let (burn_cap, freeze_cap, mint_cap) = initialize_and_register_fake_money(account, 1, true); - - assert!(coin_store_exists(account_addr), 0); - assert!(is_account_registered(account_addr), 0); - - assert!(!coin_store_exists(aaron_addr), 0); - assert!(!is_account_registered(aaron_addr), 0); - - register(bob); - assert!(coin_store_exists(bob_addr), 0); - maybe_convert_to_fungible_store(bob_addr); - assert!(!coin_store_exists(bob_addr), 0); - register(bob); - assert!(!coin_store_exists(bob_addr), 0); - - maybe_convert_to_fungible_store(aaron_addr); - let coin = mint(100, &mint_cap); - deposit(aaron_addr, coin); - - assert!(!coin_store_exists(aaron_addr), 0); - assert!(is_account_registered(aaron_addr), 0); - - maybe_convert_to_fungible_store(account_addr); - assert!(!coin_store_exists(account_addr), 0); - assert!(is_account_registered(account_addr), 0); - - primary_fungible_store::deposit(bob_addr, coin_to_fungible_asset(mint(100, &mint_cap))); - assert!(!coin_store_exists(bob_addr), 0); - - move_to(account, FakeMoneyCapabilities { - burn_cap, - freeze_cap, - mint_cap, - }); - } - - #[test(account = @aptos_framework)] - fun test_migration_with_existing_primary_fungible_store( - account: &signer, - ) acquires CoinConversionMap, CoinInfo, CoinStore, PairedCoinType { - account::create_account_for_test(signer::address_of(account)); - let account_addr = signer::address_of(account); - let (burn_cap, freeze_cap, mint_cap) = initialize_and_register_fake_money(account, 1, true); - - let coin = mint(100, &mint_cap); - primary_fungible_store::deposit(account_addr, coin_to_fungible_asset(coin)); - assert!(coin_balance(account_addr) == 0, 0); - assert!(balance(account_addr) == 100, 0); - let coin = withdraw(account, 50); - assert!(can_receive_paired_fungible_asset(account_addr, ensure_paired_metadata()), 0); - maybe_convert_to_fungible_store(account_addr); - deposit(account_addr, coin); - assert!(coin_balance(account_addr) == 0, 0); - assert!(balance(account_addr) == 100, 0); - - move_to(account, FakeMoneyCapabilities { - burn_cap, - freeze_cap, - mint_cap, - }); - } - - #[deprecated] - #[resource_group_member(group = aptos_framework::object::ObjectGroup)] - /// The flag the existence of which indicates the primary fungible store is created by the migration from CoinStore. - struct MigrationFlag has key {} -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/config_buffer.move b/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/config_buffer.move deleted file mode 100644 index bbcba8426..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/config_buffer.move +++ /dev/null @@ -1,101 +0,0 @@ -/// This wrapper helps store an on-chain config for the next epoch. -/// -/// Once reconfigure with DKG is introduced, every on-chain config `C` should do the following. -/// - Support async update when DKG is enabled. This is typically done by 3 steps below. -/// - Implement `C::set_for_next_epoch()` using `upsert()` function in this module. -/// - Implement `C::on_new_epoch()` using `extract()` function in this module. -/// - Update `0x1::reconfiguration_with_dkg::finish()` to call `C::on_new_epoch()`. -/// - Support sychronous update when DKG is disabled. -/// This is typically done by implementing `C::set()` to update the config resource directly. -/// -/// NOTE: on-chain config `0x1::state::ValidatorSet` implemented its own buffer. -module aptos_framework::config_buffer { - use std::string::String; - use aptos_std::any; - use aptos_std::any::Any; - use aptos_std::simple_map; - use aptos_std::simple_map::SimpleMap; - use aptos_std::type_info; - use aptos_framework::system_addresses; - - friend aptos_framework::consensus_config; - friend aptos_framework::execution_config; - friend aptos_framework::gas_schedule; - friend aptos_framework::jwks; - friend aptos_framework::jwk_consensus_config; - friend aptos_framework::keyless_account; - friend aptos_framework::randomness_api_v0_config; - friend aptos_framework::randomness_config; - friend aptos_framework::randomness_config_seqnum; - friend aptos_framework::version; - - /// Config buffer operations failed with permission denied. - const ESTD_SIGNER_NEEDED: u64 = 1; - - struct PendingConfigs has key { - configs: SimpleMap, - } - - public fun initialize(aptos_framework: &signer) { - system_addresses::assert_aptos_framework(aptos_framework); - if (!exists(@aptos_framework)) { - move_to(aptos_framework, PendingConfigs { - configs: simple_map::new(), - }) - } - } - - /// Check whether there is a pending config payload for `T`. - public fun does_exist(): bool acquires PendingConfigs { - if (exists(@aptos_framework)) { - let config = borrow_global(@aptos_framework); - simple_map::contains_key(&config.configs, &type_info::type_name()) - } else { - false - } - } - - /// Upsert an on-chain config to the buffer for the next epoch. - /// - /// Typically used in `X::set_for_next_epoch()` where X is an on-chain config. - public(friend) fun upsert(config: T) acquires PendingConfigs { - let configs = borrow_global_mut(@aptos_framework); - let key = type_info::type_name(); - let value = any::pack(config); - simple_map::upsert(&mut configs.configs, key, value); - } - - /// Take the buffered config `T` out (buffer cleared). Abort if the buffer is empty. - /// Should only be used at the end of a reconfiguration. - /// - /// Typically used in `X::on_new_epoch()` where X is an on-chaon config. - public fun extract(): T acquires PendingConfigs { - let configs = borrow_global_mut(@aptos_framework); - let key = type_info::type_name(); - let (_, value_packed) = simple_map::remove(&mut configs.configs, &key); - any::unpack(value_packed) - } - - #[test_only] - struct DummyConfig has drop, store { - data: u64, - } - - #[test(fx = @std)] - fun test_config_buffer_basic(fx: &signer) acquires PendingConfigs { - initialize(fx); - // Initially nothing in the buffer. - assert!(!does_exist(), 1); - - // Insert should work. - upsert(DummyConfig { data: 888 }); - assert!(does_exist(), 1); - - // Update and extract should work. - upsert(DummyConfig { data: 999 }); - assert!(does_exist(), 1); - let config = extract(); - assert!(config == DummyConfig { data: 999 }, 1); - assert!(!does_exist(), 1); - } -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/consensus_config.move b/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/consensus_config.move deleted file mode 100644 index e81049477..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/consensus_config.move +++ /dev/null @@ -1,77 +0,0 @@ -/// Maintains the consensus config for the blockchain. The config is stored in a -/// Reconfiguration, and may be updated by root. -module aptos_framework::consensus_config { - use std::error; - use std::vector; - use aptos_framework::chain_status; - use aptos_framework::config_buffer; - - use aptos_framework::reconfiguration; - use aptos_framework::system_addresses; - - friend aptos_framework::genesis; - friend aptos_framework::reconfiguration_with_dkg; - - struct ConsensusConfig has drop, key, store { - config: vector, - } - - /// The provided on chain config bytes are empty or invalid - const EINVALID_CONFIG: u64 = 1; - - /// Publishes the ConsensusConfig config. - public(friend) fun initialize(aptos_framework: &signer, config: vector) { - system_addresses::assert_aptos_framework(aptos_framework); - assert!(vector::length(&config) > 0, error::invalid_argument(EINVALID_CONFIG)); - move_to(aptos_framework, ConsensusConfig { config }); - } - - /// Deprecated by `set_for_next_epoch()`. - /// - /// WARNING: calling this while randomness is enabled will trigger a new epoch without randomness! - /// - /// TODO: update all the tests that reference this function, then disable this function. - public fun set(account: &signer, config: vector) acquires ConsensusConfig { - system_addresses::assert_aptos_framework(account); - chain_status::assert_genesis(); - assert!(vector::length(&config) > 0, error::invalid_argument(EINVALID_CONFIG)); - - let config_ref = &mut borrow_global_mut(@aptos_framework).config; - *config_ref = config; - - // Need to trigger reconfiguration so validator nodes can sync on the updated configs. - reconfiguration::reconfigure(); - } - - /// This can be called by on-chain governance to update on-chain consensus configs for the next epoch. - /// Example usage: - /// ``` - /// aptos_framework::consensus_config::set_for_next_epoch(&framework_signer, some_config_bytes); - /// aptos_framework::aptos_governance::reconfigure(&framework_signer); - /// ``` - public fun set_for_next_epoch(account: &signer, config: vector) { - system_addresses::assert_aptos_framework(account); - assert!(vector::length(&config) > 0, error::invalid_argument(EINVALID_CONFIG)); - std::config_buffer::upsert(ConsensusConfig {config}); - } - - /// Only used in reconfigurations to apply the pending `ConsensusConfig`, if there is any. - public(friend) fun on_new_epoch(framework: &signer) acquires ConsensusConfig { - system_addresses::assert_aptos_framework(framework); - if (config_buffer::does_exist()) { - let new_config = config_buffer::extract(); - if (exists(@aptos_framework)) { - *borrow_global_mut(@aptos_framework) = new_config; - } else { - move_to(framework, new_config); - }; - } - } - - public fun validator_txn_enabled(): bool acquires ConsensusConfig { - let config_bytes = borrow_global(@aptos_framework).config; - validator_txn_enabled_internal(config_bytes) - } - - native fun validator_txn_enabled_internal(config_bytes: vector): bool; -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/create_signer.move b/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/create_signer.move deleted file mode 100644 index 3da0c50c9..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/create_signer.move +++ /dev/null @@ -1,21 +0,0 @@ -/// Provides a common place for exporting `create_signer` across the Aptos Framework. -/// -/// To use create_signer, add the module below, such that: -/// `friend aptos_framework::friend_wants_create_signer` -/// where `friend_wants_create_signer` is the module that needs `create_signer`. -/// -/// Note, that this is only available within the Aptos Framework. -/// -/// This exists to make auditing straight forward and to limit the need to depend -/// on account to have access to this. -module aptos_framework::create_signer { - friend aptos_framework::account; - friend aptos_framework::aptos_account; - friend aptos_framework::coin; - friend aptos_framework::fungible_asset; - friend aptos_framework::genesis; - friend aptos_framework::multisig_account; - friend aptos_framework::object; - - public(friend) native fun create_signer(addr: address): signer; -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/delegation_pool.move b/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/delegation_pool.move deleted file mode 100644 index 1db2438ed..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/delegation_pool.move +++ /dev/null @@ -1,5568 +0,0 @@ -/** -Allow multiple delegators to participate in the same stake pool in order to collect the minimum -stake required to join the validator set. Delegators are rewarded out of the validator rewards -proportionally to their stake and provided the same stake-management API as the stake pool owner. - -The main accounting logic in the delegation pool contract handles the following: -1. Tracks how much stake each delegator owns, privately deposited as well as earned. -Accounting individual delegator stakes is achieved through the shares-based pool defined at -aptos_std::pool_u64, hence delegators own shares rather than absolute stakes into the delegation pool. -2. Tracks rewards earned by the stake pool, implicitly by the delegation one, in the meantime -and distribute them accordingly. -3. Tracks lockup cycles on the stake pool in order to separate inactive stake (not earning rewards) -from pending_inactive stake (earning rewards) and allow its delegators to withdraw the former. -4. Tracks how much commission fee has to be paid to the operator out of incoming rewards before -distributing them to the internal pool_u64 pools. - -In order to distinguish between stakes in different states and route rewards accordingly, -separate pool_u64 pools are used for individual stake states: -1. one of active + pending_active stake -2. one of inactive stake FOR each past observed lockup cycle (OLC) on the stake pool -3. one of pending_inactive stake scheduled during this ongoing OLC - -As stake-state transitions and rewards are computed only at the stake pool level, the delegation pool -gets outdated. To mitigate this, at any interaction with the delegation pool, a process of synchronization -to the underlying stake pool is executed before the requested operation itself. - -At synchronization: - - stake deviations between the two pools are actually the rewards produced in the meantime. - - the commission fee is extracted from the rewards, the remaining stake is distributed to the internal -pool_u64 pools and then the commission stake used to buy shares for operator. - - if detecting that the lockup expired on the stake pool, the delegation pool will isolate its -pending_inactive stake (now inactive) and create a new pool_u64 to host future pending_inactive stake -scheduled this newly started lockup. -Detecting a lockup expiration on the stake pool resumes to detecting new inactive stake. - -Accounting main invariants: - - each stake-management operation (add/unlock/reactivate/withdraw) and operator change triggers -the synchronization process before executing its own function. - - each OLC maps to one or more real lockups on the stake pool, but not the opposite. Actually, only a real -lockup with 'activity' (which inactivated some unlocking stake) triggers the creation of a new OLC. - - unlocking and/or unlocked stake originating from different real lockups are never mixed together into -the same pool_u64. This invalidates the accounting of which rewards belong to whom. - - no delegator can have unlocking and/or unlocked stake (pending withdrawals) in different OLCs. This ensures -delegators do not have to keep track of the OLCs when they unlocked. When creating a new pending withdrawal, -the existing one is executed (withdrawn) if is already inactive. - - add_stake fees are always refunded, but only after the epoch when they have been charged ends. - - withdrawing pending_inactive stake (when validator had gone inactive before its lockup expired) -does not inactivate any stake additional to the requested one to ensure OLC would not advance indefinitely. - - the pending withdrawal exists at an OLC iff delegator owns some shares within the shares pool of that OLC. - -Example flow: -
    -
  1. A node operator creates a delegation pool by calling -initialize_delegation_pool and sets -its commission fee to 0% (for simplicity). A stake pool is created with no initial stake and owned by -a resource account controlled by the delegation pool.
  2. -
  3. Delegator A adds 100 stake which is converted to 100 shares into the active pool_u64
  4. -
  5. Operator joins the validator set as the stake pool has now the minimum stake
  6. -
  7. The stake pool earned rewards and now has 200 active stake. A's active shares are worth 200 coins as -the commission fee is 0%.
  8. -
  9. -
      -
    1. A requests unlock for 100 stake
    2. -
    3. Synchronization detects 200 - 100 active rewards which are entirely (0% commission) added to the active pool.
    4. -
    5. 100 coins = (100 * 100) / 200 = 50 shares are redeemed from the active pool and exchanged for 100 shares -into the pending_inactive one on A's behalf
    6. -
    -
  10. Delegator B adds 200 stake which is converted to (200 * 50) / 100 = 100 shares into the active pool
  11. -
  12. The stake pool earned rewards and now has 600 active and 200 pending_inactive stake.
  13. -
  14. -
      -
    1. A requests reactivate_stake for 100 stake
    2. -
    3. - Synchronization detects 600 - 300 active and 200 - 100 pending_inactive rewards which are both entirely - distributed to their corresponding pools -
    4. -
    5. - 100 coins = (100 * 100) / 200 = 50 shares are redeemed from the pending_inactive pool and exchanged for - (100 * 150) / 600 = 25 shares into the active one on A's behalf -
    6. -
    -
  15. The lockup expires on the stake pool, inactivating the entire pending_inactive stake
  16. -
  17. -
      -
    1. B requests unlock for 100 stake
    2. -
    3. - Synchronization detects no active or pending_inactive rewards, but 0 -> 100 inactive stake on the stake pool, - so it advances the observed lockup cycle and creates a pool_u64 for the new lockup, hence allowing previous - pending_inactive shares to be redeemed
    4. -
    5. - 100 coins = (100 * 175) / 700 = 25 shares are redeemed from the active pool and exchanged for 100 shares - into the new pending_inactive one on B's behalf -
    6. -
    -
  18. The stake pool earned rewards and now has some pending_inactive rewards.
  19. -
  20. -
      -
    1. A requests withdraw for its entire inactive stake
    2. -
    3. - Synchronization detects no new inactive stake, but some pending_inactive rewards which are distributed - to the (2nd) pending_inactive pool -
    4. -
    5. - A's 50 shares = (50 * 100) / 50 = 100 coins are redeemed from the (1st) inactive pool and 100 stake is - transferred to A -
    6. -
    -
- */ -module aptos_framework::delegation_pool { - use std::error; - use std::features; - use std::signer; - use std::vector; - - use aptos_std::math64; - use aptos_std::pool_u64_unbound::{Self as pool_u64, total_coins}; - use aptos_std::table::{Self, Table}; - use aptos_std::smart_table::{Self, SmartTable}; - - use aptos_framework::account; - use aptos_framework::aptos_account; - use aptos_framework::aptos_coin::AptosCoin; - use aptos_framework::aptos_governance; - use aptos_framework::coin; - use aptos_framework::event::{Self, EventHandle, emit}; - use aptos_framework::stake; - use aptos_framework::stake::get_operator; - use aptos_framework::staking_config; - use aptos_framework::timestamp; - - const MODULE_SALT: vector = b"aptos_framework::delegation_pool"; - - /// Delegation pool owner capability does not exist at the provided account. - const EOWNER_CAP_NOT_FOUND: u64 = 1; - - /// Account is already owning a delegation pool. - const EOWNER_CAP_ALREADY_EXISTS: u64 = 2; - - /// Delegation pool does not exist at the provided pool address. - const EDELEGATION_POOL_DOES_NOT_EXIST: u64 = 3; - - /// There is a pending withdrawal to be executed before `unlock`ing any new stake. - const EPENDING_WITHDRAWAL_EXISTS: u64 = 4; - - /// Commission percentage has to be between 0 and `MAX_FEE` - 100%. - const EINVALID_COMMISSION_PERCENTAGE: u64 = 5; - - /// There is not enough `active` stake on the stake pool to `unlock`. - const ENOT_ENOUGH_ACTIVE_STAKE_TO_UNLOCK: u64 = 6; - - /// Slashing (if implemented) should not be applied to already `inactive` stake. - /// Not only it invalidates the accounting of past observed lockup cycles (OLC), - /// but is also unfair to delegators whose stake has been inactive before validator started misbehaving. - /// Additionally, the inactive stake does not count on the voting power of validator. - const ESLASHED_INACTIVE_STAKE_ON_PAST_OLC: u64 = 7; - - /// Delegator's active balance cannot be less than `MIN_COINS_ON_SHARES_POOL`. - const EDELEGATOR_ACTIVE_BALANCE_TOO_LOW: u64 = 8; - - /// Delegator's pending_inactive balance cannot be less than `MIN_COINS_ON_SHARES_POOL`. - const EDELEGATOR_PENDING_INACTIVE_BALANCE_TOO_LOW: u64 = 9; - - /// Creating delegation pools is not enabled yet. - const EDELEGATION_POOLS_DISABLED: u64 = 10; - - /// Cannot request to withdraw zero stake. - const EWITHDRAW_ZERO_STAKE: u64 = 11; - - /// Function is deprecated. - const EDEPRECATED_FUNCTION: u64 = 12; - - /// The function is disabled or hasn't been enabled. - const EDISABLED_FUNCTION: u64 = 13; - - /// Partial governance voting hasn't been enabled on this delegation pool. - const EPARTIAL_GOVERNANCE_VOTING_NOT_ENABLED: u64 = 14; - - /// The voter does not have sufficient stake to create a proposal. - const EINSUFFICIENT_PROPOSER_STAKE: u64 = 15; - - /// The voter does not have any voting power on this proposal. - const ENO_VOTING_POWER: u64 = 16; - - /// The stake pool has already voted on the proposal before enabling partial governance voting on this delegation pool. - const EALREADY_VOTED_BEFORE_ENABLE_PARTIAL_VOTING: u64 = 17; - - /// The account is not the operator of the stake pool. - const ENOT_OPERATOR: u64 = 18; - - /// Changing beneficiaries for operators is not supported. - const EOPERATOR_BENEFICIARY_CHANGE_NOT_SUPPORTED: u64 = 19; - - /// Commission percentage increase is too large. - const ETOO_LARGE_COMMISSION_INCREASE: u64 = 20; - - /// Commission percentage change is too late in this lockup period, and should be done at least a quarter (1/4) of the lockup duration before the lockup cycle ends. - const ETOO_LATE_COMMISSION_CHANGE: u64 = 21; - - /// Changing operator commission rate in delegation pool is not supported. - const ECOMMISSION_RATE_CHANGE_NOT_SUPPORTED: u64 = 22; - - /// Delegators allowlisting is not supported. - const EDELEGATORS_ALLOWLISTING_NOT_SUPPORTED: u64 = 23; - - /// Delegators allowlisting should be enabled to perform this operation. - const EDELEGATORS_ALLOWLISTING_NOT_ENABLED: u64 = 24; - - /// Cannot add/reactivate stake unless being allowlisted by the pool owner. - const EDELEGATOR_NOT_ALLOWLISTED: u64 = 25; - - /// Cannot evict an allowlisted delegator, should remove them from the allowlist first. - const ECANNOT_EVICT_ALLOWLISTED_DELEGATOR: u64 = 26; - - /// Cannot unlock the accumulated active stake of NULL_SHAREHOLDER(0x0). - const ECANNOT_UNLOCK_NULL_SHAREHOLDER: u64 = 27; - - const MAX_U64: u64 = 18446744073709551615; - - /// Maximum operator percentage fee(of double digit precision): 22.85% is represented as 2285 - const MAX_FEE: u64 = 10000; - - const VALIDATOR_STATUS_INACTIVE: u64 = 4; - - /// Special shareholder temporarily owning the `add_stake` fees charged during this epoch. - /// On each `add_stake` operation any resulted fee is used to buy active shares for this shareholder. - /// First synchronization after this epoch ends will distribute accumulated fees to the rest of the pool as refunds. - const NULL_SHAREHOLDER: address = @0x0; - - /// Minimum coins to exist on a shares pool at all times. - /// Enforced per delegator for both active and pending_inactive pools. - /// This constraint ensures the share price cannot overly increase and lead to - /// substantial losses when buying shares (can lose at most 1 share which may - /// be worth a lot if current share price is high). - /// This constraint is not enforced on inactive pools as they only allow redeems - /// (can lose at most 1 coin regardless of current share price). - const MIN_COINS_ON_SHARES_POOL: u64 = 1000000000; - - /// Scaling factor of shares pools used within the delegation pool - const SHARES_SCALING_FACTOR: u64 = 10000000000000000; - - /// Maximum commission percentage increase per lockup cycle. 10% is represented as 1000. - const MAX_COMMISSION_INCREASE: u64 = 1000; - - /// Capability that represents ownership over privileged operations on the underlying stake pool. - struct DelegationPoolOwnership has key, store { - /// equal to address of the resource account owning the stake pool - pool_address: address, - } - - struct ObservedLockupCycle has copy, drop, store { - index: u64, - } - - struct DelegationPool has key { - // Shares pool of `active` + `pending_active` stake - active_shares: pool_u64::Pool, - // Index of current observed lockup cycle on the delegation pool since its creation - observed_lockup_cycle: ObservedLockupCycle, - // Shares pools of `inactive` stake on each ended OLC and `pending_inactive` stake on the current one. - // Tracks shares of delegators who requested withdrawals in each OLC - inactive_shares: Table, - // Mapping from delegator address to the OLC of its pending withdrawal if having one - pending_withdrawals: Table, - // Signer capability of the resource account owning the stake pool - stake_pool_signer_cap: account::SignerCapability, - // Total (inactive) coins on the shares pools over all ended OLCs - total_coins_inactive: u64, - // Commission fee paid to the node operator out of pool rewards - operator_commission_percentage: u64, - - // The events emitted by stake-management operations on the delegation pool - add_stake_events: EventHandle, - reactivate_stake_events: EventHandle, - unlock_stake_events: EventHandle, - withdraw_stake_events: EventHandle, - distribute_commission_events: EventHandle, - } - - struct VotingRecordKey has copy, drop, store { - voter: address, - proposal_id: u64, - } - - /// Track delegated voter of each delegator. - struct VoteDelegation has copy, drop, store { - // The account who can vote on behalf of this delegator. - voter: address, - // The account that will become the voter in the next lockup period. Changing voter address needs 1 lockup - // period to take effects. - pending_voter: address, - // Tracks the last known lockup cycle end when the voter was updated. This will be used to determine when - // the new voter becomes effective. - // If != last_locked_until_secs, it means that a lockup period has passed. - // This is slightly different from ObservedLockupCycle because ObservedLockupCycle cannot detect if a lockup - // period is passed when there is no unlocking during the lockup period. - last_locked_until_secs: u64, - } - - /// Track total voting power of each voter. - struct DelegatedVotes has copy, drop, store { - // The total number of active shares delegated to this voter by all delegators. - active_shares: u128, - // The total number of pending inactive shares delegated to this voter by all delegators - pending_inactive_shares: u128, - // Total active shares delegated to this voter in the next lockup cycle. - // `active_shares_next_lockup` might be different `active_shares` when some delegators change their voter. - active_shares_next_lockup: u128, - // Tracks the last known lockup cycle end when the voter was updated. This will be used to determine when - // the new voter becomes effective. - // If != last_locked_until_secs, it means that a lockup period has passed. - // This is slightly different from ObservedLockupCycle because ObservedLockupCycle cannot detect if a lockup - // period is passed when there is no unlocking during the lockup period. - last_locked_until_secs: u64, - } - - /// Track governance information of a delegation(e.g. voter delegation/voting power calculation). - /// This struct should be stored in the delegation pool resource account. - struct GovernanceRecords has key { - // `votes` tracks voting power usage of each voter on each proposal. - votes: SmartTable, - // `votes_per_proposal` tracks voting power usage of this stake pool on each proposal. Key is proposal_id. - votes_per_proposal: SmartTable, - vote_delegation: SmartTable, - delegated_votes: SmartTable, - vote_events: EventHandle, - create_proposal_events: EventHandle, - // Note: a DelegateVotingPowerEvent event only means that the delegator tries to change its voter. The change - // won't take effect until the next lockup period. - delegate_voting_power_events: EventHandle, - } - - struct BeneficiaryForOperator has key { - beneficiary_for_operator: address, - } - - struct NextCommissionPercentage has key { - commission_percentage_next_lockup_cycle: u64, - effective_after_secs: u64, - } - - /// Tracks a delegation pool's allowlist of delegators. - /// If allowlisting is enabled, existing delegators are not implicitly allowlisted and they can be individually - /// evicted later by the pool owner. - struct DelegationPoolAllowlisting has key { - allowlist: SmartTable, - } - - #[event] - struct AddStake has drop, store { - pool_address: address, - delegator_address: address, - amount_added: u64, - add_stake_fee: u64, - } - - struct AddStakeEvent has drop, store { - pool_address: address, - delegator_address: address, - amount_added: u64, - add_stake_fee: u64, - } - - #[event] - struct ReactivateStake has drop, store { - pool_address: address, - delegator_address: address, - amount_reactivated: u64, - } - - struct ReactivateStakeEvent has drop, store { - pool_address: address, - delegator_address: address, - amount_reactivated: u64, - } - - #[event] - struct UnlockStake has drop, store { - pool_address: address, - delegator_address: address, - amount_unlocked: u64, - } - - struct UnlockStakeEvent has drop, store { - pool_address: address, - delegator_address: address, - amount_unlocked: u64, - } - - #[event] - struct WithdrawStake has drop, store { - pool_address: address, - delegator_address: address, - amount_withdrawn: u64, - } - - struct WithdrawStakeEvent has drop, store { - pool_address: address, - delegator_address: address, - amount_withdrawn: u64, - } - - #[event] - struct DistributeCommissionEvent has drop, store { - pool_address: address, - operator: address, - commission_active: u64, - commission_pending_inactive: u64, - } - - #[event] - struct DistributeCommission has drop, store { - pool_address: address, - operator: address, - beneficiary: address, - commission_active: u64, - commission_pending_inactive: u64, - } - - #[event] - struct Vote has drop, store { - voter: address, - proposal_id: u64, - delegation_pool: address, - num_votes: u64, - should_pass: bool, - } - - struct VoteEvent has drop, store { - voter: address, - proposal_id: u64, - delegation_pool: address, - num_votes: u64, - should_pass: bool, - } - - #[event] - struct CreateProposal has drop, store { - proposal_id: u64, - voter: address, - delegation_pool: address, - } - - struct CreateProposalEvent has drop, store { - proposal_id: u64, - voter: address, - delegation_pool: address, - } - - #[event] - struct DelegateVotingPower has drop, store { - pool_address: address, - delegator: address, - voter: address, - } - - struct DelegateVotingPowerEvent has drop, store { - pool_address: address, - delegator: address, - voter: address, - } - - #[event] - struct SetBeneficiaryForOperator has drop, store { - operator: address, - old_beneficiary: address, - new_beneficiary: address, - } - - #[event] - struct CommissionPercentageChange has drop, store { - pool_address: address, - owner: address, - commission_percentage_next_lockup_cycle: u64, - } - - #[event] - struct EnableDelegatorsAllowlisting has drop, store { - pool_address: address, - } - - #[event] - struct DisableDelegatorsAllowlisting has drop, store { - pool_address: address, - } - - #[event] - struct AllowlistDelegator has drop, store { - pool_address: address, - delegator_address: address, - } - - #[event] - struct RemoveDelegatorFromAllowlist has drop, store { - pool_address: address, - delegator_address: address, - } - - #[event] - struct EvictDelegator has drop, store { - pool_address: address, - delegator_address: address, - } - - #[view] - /// Return whether supplied address `addr` is owner of a delegation pool. - public fun owner_cap_exists(addr: address): bool { - exists(addr) - } - - #[view] - /// Return address of the delegation pool owned by `owner` or fail if there is none. - public fun get_owned_pool_address(owner: address): address acquires DelegationPoolOwnership { - assert_owner_cap_exists(owner); - borrow_global(owner).pool_address - } - - #[view] - /// Return whether a delegation pool exists at supplied address `addr`. - public fun delegation_pool_exists(addr: address): bool { - exists(addr) - } - - #[view] - /// Return whether a delegation pool has already enabled partial governance voting. - public fun partial_governance_voting_enabled(pool_address: address): bool { - exists(pool_address) && stake::get_delegated_voter(pool_address) == pool_address - } - - #[view] - /// Return the index of current observed lockup cycle on delegation pool `pool_address`. - public fun observed_lockup_cycle(pool_address: address): u64 acquires DelegationPool { - assert_delegation_pool_exists(pool_address); - borrow_global(pool_address).observed_lockup_cycle.index - } - - #[view] - /// Return whether the commission percentage for the next lockup cycle is effective. - public fun is_next_commission_percentage_effective(pool_address: address): bool acquires NextCommissionPercentage { - exists(pool_address) && - timestamp::now_seconds() >= borrow_global(pool_address).effective_after_secs - } - - #[view] - /// Return the operator commission percentage set on the delegation pool `pool_address`. - public fun operator_commission_percentage( - pool_address: address - ): u64 acquires DelegationPool, NextCommissionPercentage { - assert_delegation_pool_exists(pool_address); - if (is_next_commission_percentage_effective(pool_address)) { - operator_commission_percentage_next_lockup_cycle(pool_address) - } else { - borrow_global(pool_address).operator_commission_percentage - } - } - - #[view] - /// Return the operator commission percentage for the next lockup cycle. - public fun operator_commission_percentage_next_lockup_cycle( - pool_address: address - ): u64 acquires DelegationPool, NextCommissionPercentage { - assert_delegation_pool_exists(pool_address); - if (exists(pool_address)) { - borrow_global(pool_address).commission_percentage_next_lockup_cycle - } else { - borrow_global(pool_address).operator_commission_percentage - } - } - - #[view] - /// Return the number of delegators owning active stake within `pool_address`. - public fun shareholders_count_active_pool(pool_address: address): u64 acquires DelegationPool { - assert_delegation_pool_exists(pool_address); - pool_u64::shareholders_count(&borrow_global(pool_address).active_shares) - } - - #[view] - /// Return the stake amounts on `pool_address` in the different states: - /// (`active`,`inactive`,`pending_active`,`pending_inactive`) - public fun get_delegation_pool_stake(pool_address: address): (u64, u64, u64, u64) { - assert_delegation_pool_exists(pool_address); - stake::get_stake(pool_address) - } - - #[view] - /// Return whether the given delegator has any withdrawable stake. If they recently requested to unlock - /// some stake and the stake pool's lockup cycle has not ended, their coins are not withdrawable yet. - public fun get_pending_withdrawal( - pool_address: address, - delegator_address: address - ): (bool, u64) acquires DelegationPool { - assert_delegation_pool_exists(pool_address); - let pool = borrow_global(pool_address); - let ( - lockup_cycle_ended, - _, - pending_inactive, - _, - commission_pending_inactive - ) = calculate_stake_pool_drift(pool); - - let (withdrawal_exists, withdrawal_olc) = pending_withdrawal_exists(pool, delegator_address); - if (!withdrawal_exists) { - // if no pending withdrawal, there is neither inactive nor pending_inactive stake - (false, 0) - } else { - // delegator has either inactive or pending_inactive stake due to automatic withdrawals - let inactive_shares = table::borrow(&pool.inactive_shares, withdrawal_olc); - if (withdrawal_olc.index < pool.observed_lockup_cycle.index) { - // if withdrawal's lockup cycle ended on delegation pool then it is inactive - (true, pool_u64::balance(inactive_shares, delegator_address)) - } else { - pending_inactive = pool_u64::shares_to_amount_with_total_coins( - inactive_shares, - pool_u64::shares(inactive_shares, delegator_address), - // exclude operator pending_inactive rewards not converted to shares yet - pending_inactive - commission_pending_inactive - ); - // if withdrawal's lockup cycle ended ONLY on stake pool then it is also inactive - (lockup_cycle_ended, pending_inactive) - } - } - } - - #[view] - /// Return total stake owned by `delegator_address` within delegation pool `pool_address` - /// in each of its individual states: (`active`,`inactive`,`pending_inactive`) - public fun get_stake( - pool_address: address, - delegator_address: address - ): (u64, u64, u64) acquires DelegationPool, BeneficiaryForOperator { - assert_delegation_pool_exists(pool_address); - let pool = borrow_global(pool_address); - let ( - lockup_cycle_ended, - active, - _, - commission_active, - commission_pending_inactive - ) = calculate_stake_pool_drift(pool); - - let total_active_shares = pool_u64::total_shares(&pool.active_shares); - let delegator_active_shares = pool_u64::shares(&pool.active_shares, delegator_address); - - let (_, _, pending_active, _) = stake::get_stake(pool_address); - if (pending_active == 0) { - // zero `pending_active` stake indicates that either there are no `add_stake` fees or - // previous epoch has ended and should identify shares owning these fees as released - total_active_shares = total_active_shares - pool_u64::shares(&pool.active_shares, NULL_SHAREHOLDER); - if (delegator_address == NULL_SHAREHOLDER) { - delegator_active_shares = 0 - } - }; - active = pool_u64::shares_to_amount_with_total_stats( - &pool.active_shares, - delegator_active_shares, - // exclude operator active rewards not converted to shares yet - active - commission_active, - total_active_shares - ); - - // get state and stake (0 if there is none) of the pending withdrawal - let (withdrawal_inactive, withdrawal_stake) = get_pending_withdrawal(pool_address, delegator_address); - // report non-active stakes accordingly to the state of the pending withdrawal - let (inactive, pending_inactive) = if (withdrawal_inactive) (withdrawal_stake, 0) else (0, withdrawal_stake); - - // should also include commission rewards in case of the operator account - // operator rewards are actually used to buy shares which is introducing - // some imprecision (received stake would be slightly less) - // but adding rewards onto the existing stake is still a good approximation - if (delegator_address == beneficiary_for_operator(get_operator(pool_address))) { - active = active + commission_active; - // in-flight pending_inactive commission can coexist with already inactive withdrawal - if (lockup_cycle_ended) { - inactive = inactive + commission_pending_inactive - } else { - pending_inactive = pending_inactive + commission_pending_inactive - } - }; - - (active, inactive, pending_inactive) - } - - #[view] - /// Return refundable stake to be extracted from added `amount` at `add_stake` operation on pool `pool_address`. - /// If the validator produces rewards this epoch, added stake goes directly to `pending_active` and - /// does not earn rewards. However, all shares within a pool appreciate uniformly and when this epoch ends: - /// - either added shares are still `pending_active` and steal from rewards of existing `active` stake - /// - or have moved to `pending_inactive` and get full rewards (they displaced `active` stake at `unlock`) - /// To mitigate this, some of the added stake is extracted and fed back into the pool as placeholder - /// for the rewards the remaining stake would have earned if active: - /// extracted-fee = (amount - extracted-fee) * reward-rate% * (100% - operator-commission%) - public fun get_add_stake_fee( - pool_address: address, - amount: u64 - ): u64 acquires DelegationPool, NextCommissionPercentage { - if (stake::is_current_epoch_validator(pool_address)) { - let (rewards_rate, rewards_rate_denominator) = staking_config::get_reward_rate(&staking_config::get()); - if (rewards_rate_denominator > 0) { - assert_delegation_pool_exists(pool_address); - - rewards_rate = rewards_rate * (MAX_FEE - operator_commission_percentage(pool_address)); - rewards_rate_denominator = rewards_rate_denominator * MAX_FEE; - ((((amount as u128) * (rewards_rate as u128)) / ((rewards_rate as u128) + (rewards_rate_denominator as u128))) as u64) - } else { 0 } - } else { 0 } - } - - #[view] - /// Return whether `pending_inactive` stake can be directly withdrawn from - /// the delegation pool, implicitly its stake pool, in the special case - /// the validator had gone inactive before its lockup expired. - public fun can_withdraw_pending_inactive(pool_address: address): bool { - stake::get_validator_state(pool_address) == VALIDATOR_STATUS_INACTIVE && - timestamp::now_seconds() >= stake::get_lockup_secs(pool_address) - } - - #[view] - /// Return the total voting power of a delegator in a delegation pool. This function syncs DelegationPool to the - /// latest state. - public fun calculate_and_update_voter_total_voting_power( - pool_address: address, - voter: address - ): u64 acquires DelegationPool, GovernanceRecords, BeneficiaryForOperator, NextCommissionPercentage { - assert_partial_governance_voting_enabled(pool_address); - // Delegation pool need to be synced to explain rewards(which could change the coin amount) and - // commission(which could cause share transfer). - synchronize_delegation_pool(pool_address); - let pool = borrow_global(pool_address); - let governance_records = borrow_global_mut(pool_address); - let latest_delegated_votes = update_and_borrow_mut_delegated_votes(pool, governance_records, voter); - calculate_total_voting_power(pool, latest_delegated_votes) - } - - #[view] - /// Return the remaining voting power of a delegator in a delegation pool on a proposal. This function syncs DelegationPool to the - /// latest state. - public fun calculate_and_update_remaining_voting_power( - pool_address: address, - voter_address: address, - proposal_id: u64 - ): u64 acquires DelegationPool, GovernanceRecords, BeneficiaryForOperator, NextCommissionPercentage { - assert_partial_governance_voting_enabled(pool_address); - // If the whole stake pool has no voting power(e.g. it has already voted before partial - // governance voting flag is enabled), the delegator also has no voting power. - if (aptos_governance::get_remaining_voting_power(pool_address, proposal_id) == 0) { - return 0 - }; - - let total_voting_power = calculate_and_update_voter_total_voting_power(pool_address, voter_address); - let governance_records = borrow_global(pool_address); - total_voting_power - get_used_voting_power(governance_records, voter_address, proposal_id) - } - - #[view] - /// Return the latest delegated voter of a delegator in a delegation pool. This function syncs DelegationPool to the - /// latest state. - public fun calculate_and_update_delegator_voter( - pool_address: address, - delegator_address: address - ): address acquires DelegationPool, GovernanceRecords { - assert_partial_governance_voting_enabled(pool_address); - calculate_and_update_delegator_voter_internal( - borrow_global(pool_address), - borrow_global_mut(pool_address), - delegator_address - ) - } - - #[view] - /// Return the current state of a voting delegation of a delegator in a delegation pool. - public fun calculate_and_update_voting_delegation( - pool_address: address, - delegator_address: address - ): (address, address, u64) acquires DelegationPool, GovernanceRecords { - assert_partial_governance_voting_enabled(pool_address); - let vote_delegation = update_and_borrow_mut_delegator_vote_delegation( - borrow_global(pool_address), - borrow_global_mut(pool_address), - delegator_address - ); - - (vote_delegation.voter, vote_delegation.pending_voter, vote_delegation.last_locked_until_secs) - } - - #[view] - /// Return the address of the stake pool to be created with the provided owner, and seed. - public fun get_expected_stake_pool_address(owner: address, delegation_pool_creation_seed: vector - ): address { - let seed = create_resource_account_seed(delegation_pool_creation_seed); - account::create_resource_address(&owner, seed) - } - - #[view] - /// Return the minimum remaining time in seconds for commission change, which is one fourth of the lockup duration. - public fun min_remaining_secs_for_commission_change(): u64 { - let config = staking_config::get(); - staking_config::get_recurring_lockup_duration(&config) / 4 - } - - #[view] - /// Return whether allowlisting is enabled for the provided delegation pool. - public fun allowlisting_enabled(pool_address: address): bool { - assert_delegation_pool_exists(pool_address); - exists(pool_address) - } - - #[view] - /// Return whether the provided delegator is allowlisted. - /// A delegator is allowlisted if: - /// - allowlisting is disabled on the pool - /// - delegator is part of the allowlist - public fun delegator_allowlisted( - pool_address: address, - delegator_address: address, - ): bool acquires DelegationPoolAllowlisting { - if (!allowlisting_enabled(pool_address)) { return true }; - smart_table::contains(freeze(borrow_mut_delegators_allowlist(pool_address)), delegator_address) - } - - #[view] - /// Return allowlist or revert if allowlisting is not enabled for the provided delegation pool. - public fun get_delegators_allowlist( - pool_address: address, - ): vector
acquires DelegationPoolAllowlisting { - assert_allowlisting_enabled(pool_address); - - let allowlist = vector[]; - smart_table::for_each_ref(freeze(borrow_mut_delegators_allowlist(pool_address)), |delegator, _v| { - vector::push_back(&mut allowlist, *delegator); - }); - allowlist - } - - /// Initialize a delegation pool of custom fixed `operator_commission_percentage`. - /// A resource account is created from `owner` signer and its supplied `delegation_pool_creation_seed` - /// to host the delegation pool resource and own the underlying stake pool. - /// Ownership over setting the operator/voter is granted to `owner` who has both roles initially. - public entry fun initialize_delegation_pool( - owner: &signer, - operator_commission_percentage: u64, - delegation_pool_creation_seed: vector, - ) acquires DelegationPool, GovernanceRecords, BeneficiaryForOperator, NextCommissionPercentage { - assert!(features::delegation_pools_enabled(), error::invalid_state(EDELEGATION_POOLS_DISABLED)); - let owner_address = signer::address_of(owner); - assert!(!owner_cap_exists(owner_address), error::already_exists(EOWNER_CAP_ALREADY_EXISTS)); - assert!(operator_commission_percentage <= MAX_FEE, error::invalid_argument(EINVALID_COMMISSION_PERCENTAGE)); - - // generate a seed to be used to create the resource account hosting the delegation pool - let seed = create_resource_account_seed(delegation_pool_creation_seed); - - let (stake_pool_signer, stake_pool_signer_cap) = account::create_resource_account(owner, seed); - coin::register(&stake_pool_signer); - - // stake_pool_signer will be owner of the stake pool and have its `stake::OwnerCapability` - let pool_address = signer::address_of(&stake_pool_signer); - stake::initialize_stake_owner(&stake_pool_signer, 0, owner_address, owner_address); - - let inactive_shares = table::new(); - table::add( - &mut inactive_shares, - olc_with_index(0), - pool_u64::create_with_scaling_factor(SHARES_SCALING_FACTOR) - ); - - move_to(&stake_pool_signer, DelegationPool { - active_shares: pool_u64::create_with_scaling_factor(SHARES_SCALING_FACTOR), - observed_lockup_cycle: olc_with_index(0), - inactive_shares, - pending_withdrawals: table::new(), - stake_pool_signer_cap, - total_coins_inactive: 0, - operator_commission_percentage, - add_stake_events: account::new_event_handle(&stake_pool_signer), - reactivate_stake_events: account::new_event_handle(&stake_pool_signer), - unlock_stake_events: account::new_event_handle(&stake_pool_signer), - withdraw_stake_events: account::new_event_handle(&stake_pool_signer), - distribute_commission_events: account::new_event_handle(&stake_pool_signer), - }); - - // save delegation pool ownership and resource account address (inner stake pool address) on `owner` - move_to(owner, DelegationPoolOwnership { pool_address }); - - // All delegation pool enable partial governance voting by default once the feature flag is enabled. - if (features::partial_governance_voting_enabled( - ) && features::delegation_pool_partial_governance_voting_enabled()) { - enable_partial_governance_voting(pool_address); - } - } - - #[view] - /// Return the beneficiary address of the operator. - public fun beneficiary_for_operator(operator: address): address acquires BeneficiaryForOperator { - if (exists(operator)) { - return borrow_global(operator).beneficiary_for_operator - } else { - operator - } - } - - /// Enable partial governance voting on a stake pool. The voter of this stake pool will be managed by this module. - /// The existing voter will be replaced. The function is permissionless. - public entry fun enable_partial_governance_voting( - pool_address: address, - ) acquires DelegationPool, GovernanceRecords, BeneficiaryForOperator, NextCommissionPercentage { - assert!(features::partial_governance_voting_enabled(), error::invalid_state(EDISABLED_FUNCTION)); - assert!( - features::delegation_pool_partial_governance_voting_enabled(), - error::invalid_state(EDISABLED_FUNCTION) - ); - assert_delegation_pool_exists(pool_address); - // synchronize delegation and stake pools before any user operation. - synchronize_delegation_pool(pool_address); - - let delegation_pool = borrow_global(pool_address); - let stake_pool_signer = retrieve_stake_pool_owner(delegation_pool); - // delegated_voter is managed by the stake pool itself, which signer capability is managed by DelegationPool. - // So voting power of this stake pool can only be used through this module. - stake::set_delegated_voter(&stake_pool_signer, signer::address_of(&stake_pool_signer)); - - move_to(&stake_pool_signer, GovernanceRecords { - votes: smart_table::new(), - votes_per_proposal: smart_table::new(), - vote_delegation: smart_table::new(), - delegated_votes: smart_table::new(), - vote_events: account::new_event_handle(&stake_pool_signer), - create_proposal_events: account::new_event_handle(&stake_pool_signer), - delegate_voting_power_events: account::new_event_handle(&stake_pool_signer), - }); - } - - /// Vote on a proposal with a voter's voting power. To successfully vote, the following conditions must be met: - /// 1. The voting period of the proposal hasn't ended. - /// 2. The delegation pool's lockup period ends after the voting period of the proposal. - /// 3. The voter still has spare voting power on this proposal. - /// 4. The delegation pool never votes on the proposal before enabling partial governance voting. - public entry fun vote( - voter: &signer, - pool_address: address, - proposal_id: u64, - voting_power: u64, - should_pass: bool - ) acquires DelegationPool, GovernanceRecords, BeneficiaryForOperator, NextCommissionPercentage { - assert_partial_governance_voting_enabled(pool_address); - // synchronize delegation and stake pools before any user operation. - synchronize_delegation_pool(pool_address); - - let voter_address = signer::address_of(voter); - let remaining_voting_power = calculate_and_update_remaining_voting_power( - pool_address, - voter_address, - proposal_id - ); - if (voting_power > remaining_voting_power) { - voting_power = remaining_voting_power; - }; - assert!(voting_power > 0, error::invalid_argument(ENO_VOTING_POWER)); - - let governance_records = borrow_global_mut(pool_address); - // Check a edge case during the transient period of enabling partial governance voting. - assert_and_update_proposal_used_voting_power(governance_records, pool_address, proposal_id, voting_power); - let used_voting_power = borrow_mut_used_voting_power(governance_records, voter_address, proposal_id); - *used_voting_power = *used_voting_power + voting_power; - - let pool_signer = retrieve_stake_pool_owner(borrow_global(pool_address)); - aptos_governance::partial_vote(&pool_signer, pool_address, proposal_id, voting_power, should_pass); - - if (features::module_event_migration_enabled()) { - event::emit( - Vote { - voter: voter_address, - proposal_id, - delegation_pool: pool_address, - num_votes: voting_power, - should_pass, - } - ); - } else { - event::emit_event( - &mut governance_records.vote_events, - VoteEvent { - voter: voter_address, - proposal_id, - delegation_pool: pool_address, - num_votes: voting_power, - should_pass, - } - ); - }; - } - - /// A voter could create a governance proposal by this function. To successfully create a proposal, the voter's - /// voting power in THIS delegation pool must be not less than the minimum required voting power specified in - /// `aptos_governance.move`. - public entry fun create_proposal( - voter: &signer, - pool_address: address, - execution_hash: vector, - metadata_location: vector, - metadata_hash: vector, - is_multi_step_proposal: bool, - ) acquires DelegationPool, GovernanceRecords, BeneficiaryForOperator, NextCommissionPercentage { - assert_partial_governance_voting_enabled(pool_address); - - // synchronize delegation and stake pools before any user operation - synchronize_delegation_pool(pool_address); - - let voter_addr = signer::address_of(voter); - let pool = borrow_global(pool_address); - let governance_records = borrow_global_mut(pool_address); - let total_voting_power = calculate_and_update_delegated_votes(pool, governance_records, voter_addr); - assert!( - total_voting_power >= aptos_governance::get_required_proposer_stake(), - error::invalid_argument(EINSUFFICIENT_PROPOSER_STAKE)); - let pool_signer = retrieve_stake_pool_owner(borrow_global(pool_address)); - let proposal_id = aptos_governance::create_proposal_v2_impl( - &pool_signer, - pool_address, - execution_hash, - metadata_location, - metadata_hash, - is_multi_step_proposal, - ); - - let governance_records = borrow_global_mut(pool_address); - - if (features::module_event_migration_enabled()) { - event::emit( - CreateProposal { - proposal_id, - voter: voter_addr, - delegation_pool: pool_address, - } - ); - } else { - event::emit_event( - &mut governance_records.create_proposal_events, - CreateProposalEvent { - proposal_id, - voter: voter_addr, - delegation_pool: pool_address, - } - ); - }; - } - - fun assert_owner_cap_exists(owner: address) { - assert!(owner_cap_exists(owner), error::not_found(EOWNER_CAP_NOT_FOUND)); - } - - fun assert_delegation_pool_exists(pool_address: address) { - assert!(delegation_pool_exists(pool_address), error::invalid_argument(EDELEGATION_POOL_DOES_NOT_EXIST)); - } - - fun assert_min_active_balance(pool: &DelegationPool, delegator_address: address) { - let balance = pool_u64::balance(&pool.active_shares, delegator_address); - assert!(balance >= MIN_COINS_ON_SHARES_POOL, error::invalid_argument(EDELEGATOR_ACTIVE_BALANCE_TOO_LOW)); - } - - fun assert_min_pending_inactive_balance(pool: &DelegationPool, delegator_address: address) { - let balance = pool_u64::balance(pending_inactive_shares_pool(pool), delegator_address); - assert!( - balance >= MIN_COINS_ON_SHARES_POOL, - error::invalid_argument(EDELEGATOR_PENDING_INACTIVE_BALANCE_TOO_LOW) - ); - } - - fun assert_partial_governance_voting_enabled(pool_address: address) { - assert_delegation_pool_exists(pool_address); - assert!( - partial_governance_voting_enabled(pool_address), - error::invalid_state(EPARTIAL_GOVERNANCE_VOTING_NOT_ENABLED) - ); - } - - fun assert_allowlisting_enabled(pool_address: address) { - assert!(allowlisting_enabled(pool_address), error::invalid_state(EDELEGATORS_ALLOWLISTING_NOT_ENABLED)); - } - - fun assert_delegator_allowlisted( - pool_address: address, - delegator_address: address, - ) acquires DelegationPoolAllowlisting { - assert!( - delegator_allowlisted(pool_address, delegator_address), - error::permission_denied(EDELEGATOR_NOT_ALLOWLISTED) - ); - } - - fun coins_to_redeem_to_ensure_min_stake( - src_shares_pool: &pool_u64::Pool, - shareholder: address, - amount: u64, - ): u64 { - // find how many coins would be redeemed if supplying `amount` - let redeemed_coins = pool_u64::shares_to_amount( - src_shares_pool, - amount_to_shares_to_redeem(src_shares_pool, shareholder, amount) - ); - // if balance drops under threshold then redeem it entirely - let src_balance = pool_u64::balance(src_shares_pool, shareholder); - if (src_balance - redeemed_coins < MIN_COINS_ON_SHARES_POOL) { - amount = src_balance; - }; - amount - } - - fun coins_to_transfer_to_ensure_min_stake( - src_shares_pool: &pool_u64::Pool, - dst_shares_pool: &pool_u64::Pool, - shareholder: address, - amount: u64, - ): u64 { - // find how many coins would be redeemed from source if supplying `amount` - let redeemed_coins = pool_u64::shares_to_amount( - src_shares_pool, - amount_to_shares_to_redeem(src_shares_pool, shareholder, amount) - ); - // if balance on destination would be less than threshold then redeem difference to threshold - let dst_balance = pool_u64::balance(dst_shares_pool, shareholder); - if (dst_balance + redeemed_coins < MIN_COINS_ON_SHARES_POOL) { - // `redeemed_coins` >= `amount` - 1 as redeem can lose at most 1 coin - amount = MIN_COINS_ON_SHARES_POOL - dst_balance + 1; - }; - // check if new `amount` drops balance on source under threshold and adjust - coins_to_redeem_to_ensure_min_stake(src_shares_pool, shareholder, amount) - } - - /// Retrieves the shared resource account owning the stake pool in order - /// to forward a stake-management operation to this underlying pool. - fun retrieve_stake_pool_owner(pool: &DelegationPool): signer { - account::create_signer_with_capability(&pool.stake_pool_signer_cap) - } - - /// Get the address of delegation pool reference `pool`. - fun get_pool_address(pool: &DelegationPool): address { - account::get_signer_capability_address(&pool.stake_pool_signer_cap) - } - - /// Get the active share amount of the delegator. - fun get_delegator_active_shares(pool: &DelegationPool, delegator: address): u128 { - pool_u64::shares(&pool.active_shares, delegator) - } - - /// Get the pending inactive share amount of the delegator. - fun get_delegator_pending_inactive_shares(pool: &DelegationPool, delegator: address): u128 { - pool_u64::shares(pending_inactive_shares_pool(pool), delegator) - } - - /// Get the used voting power of a voter on a proposal. - fun get_used_voting_power(governance_records: &GovernanceRecords, voter: address, proposal_id: u64): u64 { - let votes = &governance_records.votes; - let key = VotingRecordKey { - voter, - proposal_id, - }; - *smart_table::borrow_with_default(votes, key, &0) - } - - /// Create the seed to derive the resource account address. - fun create_resource_account_seed( - delegation_pool_creation_seed: vector, - ): vector { - let seed = vector::empty(); - // include module salt (before any subseeds) to avoid conflicts with other modules creating resource accounts - vector::append(&mut seed, MODULE_SALT); - // include an additional salt in case the same resource account has already been created - vector::append(&mut seed, delegation_pool_creation_seed); - seed - } - - /// Borrow the mutable used voting power of a voter on a proposal. - inline fun borrow_mut_used_voting_power( - governance_records: &mut GovernanceRecords, - voter: address, - proposal_id: u64 - ): &mut u64 { - let votes = &mut governance_records.votes; - let key = VotingRecordKey { - proposal_id, - voter, - }; - smart_table::borrow_mut_with_default(votes, key, 0) - } - - /// Update VoteDelegation of a delegator to up-to-date then borrow_mut it. - fun update_and_borrow_mut_delegator_vote_delegation( - pool: &DelegationPool, - governance_records: &mut GovernanceRecords, - delegator: address - ): &mut VoteDelegation { - let pool_address = get_pool_address(pool); - let locked_until_secs = stake::get_lockup_secs(pool_address); - - let vote_delegation_table = &mut governance_records.vote_delegation; - // By default, a delegator's delegated voter is itself. - // TODO: recycle storage when VoteDelegation equals to default value. - if (!smart_table::contains(vote_delegation_table, delegator)) { - return smart_table::borrow_mut_with_default(vote_delegation_table, delegator, VoteDelegation { - voter: delegator, - last_locked_until_secs: locked_until_secs, - pending_voter: delegator, - }) - }; - - let vote_delegation = smart_table::borrow_mut(vote_delegation_table, delegator); - // A lockup period has passed since last time `vote_delegation` was updated. Pending voter takes effect. - if (vote_delegation.last_locked_until_secs < locked_until_secs) { - vote_delegation.voter = vote_delegation.pending_voter; - vote_delegation.last_locked_until_secs = locked_until_secs; - }; - vote_delegation - } - - /// Update DelegatedVotes of a voter to up-to-date then borrow_mut it. - fun update_and_borrow_mut_delegated_votes( - pool: &DelegationPool, - governance_records: &mut GovernanceRecords, - voter: address - ): &mut DelegatedVotes { - let pool_address = get_pool_address(pool); - let locked_until_secs = stake::get_lockup_secs(pool_address); - - let delegated_votes_per_voter = &mut governance_records.delegated_votes; - // By default, a delegator's voter is itself. - // TODO: recycle storage when DelegatedVotes equals to default value. - if (!smart_table::contains(delegated_votes_per_voter, voter)) { - let active_shares = get_delegator_active_shares(pool, voter); - let inactive_shares = get_delegator_pending_inactive_shares(pool, voter); - return smart_table::borrow_mut_with_default(delegated_votes_per_voter, voter, DelegatedVotes { - active_shares, - pending_inactive_shares: inactive_shares, - active_shares_next_lockup: active_shares, - last_locked_until_secs: locked_until_secs, - }) - }; - - let delegated_votes = smart_table::borrow_mut(delegated_votes_per_voter, voter); - // A lockup period has passed since last time `delegated_votes` was updated. Pending voter takes effect. - if (delegated_votes.last_locked_until_secs < locked_until_secs) { - delegated_votes.active_shares = delegated_votes.active_shares_next_lockup; - delegated_votes.pending_inactive_shares = 0; - delegated_votes.last_locked_until_secs = locked_until_secs; - }; - delegated_votes - } - - fun olc_with_index(index: u64): ObservedLockupCycle { - ObservedLockupCycle { index } - } - - /// Given the amounts of shares in `active_shares` pool and `inactive_shares` pool, calculate the total voting - /// power, which equals to the sum of the coin amounts. - fun calculate_total_voting_power(delegation_pool: &DelegationPool, latest_delegated_votes: &DelegatedVotes): u64 { - let active_amount = pool_u64::shares_to_amount( - &delegation_pool.active_shares, - latest_delegated_votes.active_shares); - let pending_inactive_amount = pool_u64::shares_to_amount( - pending_inactive_shares_pool(delegation_pool), - latest_delegated_votes.pending_inactive_shares); - active_amount + pending_inactive_amount - } - - /// Update VoteDelegation of a delegator to up-to-date then return the latest voter. - fun calculate_and_update_delegator_voter_internal( - pool: &DelegationPool, - governance_records: &mut GovernanceRecords, - delegator: address - ): address { - let vote_delegation = update_and_borrow_mut_delegator_vote_delegation(pool, governance_records, delegator); - vote_delegation.voter - } - - /// Update DelegatedVotes of a voter to up-to-date then return the total voting power of this voter. - fun calculate_and_update_delegated_votes( - pool: &DelegationPool, - governance_records: &mut GovernanceRecords, - voter: address - ): u64 { - let delegated_votes = update_and_borrow_mut_delegated_votes(pool, governance_records, voter); - calculate_total_voting_power(pool, delegated_votes) - } - - inline fun borrow_mut_delegators_allowlist( - pool_address: address - ): &mut SmartTable acquires DelegationPoolAllowlisting { - &mut borrow_global_mut(pool_address).allowlist - } - - /// Allows an owner to change the operator of the underlying stake pool. - public entry fun set_operator( - owner: &signer, - new_operator: address - ) acquires DelegationPoolOwnership, DelegationPool, GovernanceRecords, BeneficiaryForOperator, NextCommissionPercentage { - let pool_address = get_owned_pool_address(signer::address_of(owner)); - // synchronize delegation and stake pools before any user operation - // ensure the old operator is paid its uncommitted commission rewards - synchronize_delegation_pool(pool_address); - stake::set_operator(&retrieve_stake_pool_owner(borrow_global(pool_address)), new_operator); - } - - /// Allows an operator to change its beneficiary. Any existing unpaid commission rewards will be paid to the new - /// beneficiary. To ensure payment to the current beneficiary, one should first call `synchronize_delegation_pool` - /// before switching the beneficiary. An operator can set one beneficiary for delegation pools, not a separate - /// one for each pool. - public entry fun set_beneficiary_for_operator( - operator: &signer, - new_beneficiary: address - ) acquires BeneficiaryForOperator { - assert!(features::operator_beneficiary_change_enabled(), std::error::invalid_state( - EOPERATOR_BENEFICIARY_CHANGE_NOT_SUPPORTED - )); - // The beneficiay address of an operator is stored under the operator's address. - // So, the operator does not need to be validated with respect to a staking pool. - let operator_addr = signer::address_of(operator); - let old_beneficiary = beneficiary_for_operator(operator_addr); - if (exists(operator_addr)) { - borrow_global_mut(operator_addr).beneficiary_for_operator = new_beneficiary; - } else { - move_to(operator, BeneficiaryForOperator { beneficiary_for_operator: new_beneficiary }); - }; - - emit(SetBeneficiaryForOperator { - operator: operator_addr, - old_beneficiary, - new_beneficiary, - }); - } - - /// Allows an owner to update the commission percentage for the operator of the underlying stake pool. - public entry fun update_commission_percentage( - owner: &signer, - new_commission_percentage: u64 - ) acquires DelegationPoolOwnership, DelegationPool, GovernanceRecords, BeneficiaryForOperator, NextCommissionPercentage { - assert!(features::commission_change_delegation_pool_enabled(), error::invalid_state( - ECOMMISSION_RATE_CHANGE_NOT_SUPPORTED - )); - assert!(new_commission_percentage <= MAX_FEE, error::invalid_argument(EINVALID_COMMISSION_PERCENTAGE)); - let owner_address = signer::address_of(owner); - let pool_address = get_owned_pool_address(owner_address); - assert!( - operator_commission_percentage(pool_address) + MAX_COMMISSION_INCREASE >= new_commission_percentage, - error::invalid_argument(ETOO_LARGE_COMMISSION_INCREASE) - ); - assert!( - stake::get_remaining_lockup_secs(pool_address) >= min_remaining_secs_for_commission_change(), - error::invalid_state(ETOO_LATE_COMMISSION_CHANGE) - ); - - // synchronize delegation and stake pools before any user operation. this ensures: - // (1) the operator is paid its uncommitted commission rewards with the old commission percentage, and - // (2) any pending commission percentage change is applied before the new commission percentage is set. - synchronize_delegation_pool(pool_address); - - if (exists(pool_address)) { - let commission_percentage = borrow_global_mut(pool_address); - commission_percentage.commission_percentage_next_lockup_cycle = new_commission_percentage; - commission_percentage.effective_after_secs = stake::get_lockup_secs(pool_address); - } else { - let delegation_pool = borrow_global(pool_address); - let pool_signer = account::create_signer_with_capability(&delegation_pool.stake_pool_signer_cap); - move_to(&pool_signer, NextCommissionPercentage { - commission_percentage_next_lockup_cycle: new_commission_percentage, - effective_after_secs: stake::get_lockup_secs(pool_address), - }); - }; - - event::emit(CommissionPercentageChange { - pool_address, - owner: owner_address, - commission_percentage_next_lockup_cycle: new_commission_percentage, - }); - } - - /// Allows an owner to change the delegated voter of the underlying stake pool. - public entry fun set_delegated_voter( - owner: &signer, - new_voter: address - ) acquires DelegationPoolOwnership, DelegationPool, GovernanceRecords, BeneficiaryForOperator, NextCommissionPercentage { - // No one can change delegated_voter once the partial governance voting feature is enabled. - assert!( - !features::delegation_pool_partial_governance_voting_enabled(), - error::invalid_state(EDEPRECATED_FUNCTION) - ); - let pool_address = get_owned_pool_address(signer::address_of(owner)); - // synchronize delegation and stake pools before any user operation - synchronize_delegation_pool(pool_address); - stake::set_delegated_voter(&retrieve_stake_pool_owner(borrow_global(pool_address)), new_voter); - } - - /// Allows a delegator to delegate its voting power to a voter. If this delegator already has a delegated voter, - /// this change won't take effects until the next lockup period. - public entry fun delegate_voting_power( - delegator: &signer, - pool_address: address, - new_voter: address - ) acquires DelegationPool, GovernanceRecords, BeneficiaryForOperator, NextCommissionPercentage { - assert_partial_governance_voting_enabled(pool_address); - - // synchronize delegation and stake pools before any user operation - synchronize_delegation_pool(pool_address); - - let delegator_address = signer::address_of(delegator); - let delegation_pool = borrow_global(pool_address); - let governance_records = borrow_global_mut(pool_address); - let delegator_vote_delegation = update_and_borrow_mut_delegator_vote_delegation( - delegation_pool, - governance_records, - delegator_address - ); - let pending_voter: address = delegator_vote_delegation.pending_voter; - - // No need to update if the voter doesn't really change. - if (pending_voter != new_voter) { - delegator_vote_delegation.pending_voter = new_voter; - let active_shares = get_delegator_active_shares(delegation_pool, delegator_address); - // of -= - // of += - let pending_delegated_votes = update_and_borrow_mut_delegated_votes( - delegation_pool, - governance_records, - pending_voter - ); - pending_delegated_votes.active_shares_next_lockup = - pending_delegated_votes.active_shares_next_lockup - active_shares; - - let new_delegated_votes = update_and_borrow_mut_delegated_votes( - delegation_pool, - governance_records, - new_voter - ); - new_delegated_votes.active_shares_next_lockup = - new_delegated_votes.active_shares_next_lockup + active_shares; - }; - - if (features::module_event_migration_enabled()) { - event::emit(DelegateVotingPower { - pool_address, - delegator: delegator_address, - voter: new_voter, - }) - } else { - event::emit_event(&mut governance_records.delegate_voting_power_events, DelegateVotingPowerEvent { - pool_address, - delegator: delegator_address, - voter: new_voter, - }); - }; - } - - /// Enable delegators allowlisting as the pool owner. - public entry fun enable_delegators_allowlisting( - owner: &signer, - ) acquires DelegationPoolOwnership, DelegationPool { - assert!( - features::delegation_pool_allowlisting_enabled(), - error::invalid_state(EDELEGATORS_ALLOWLISTING_NOT_SUPPORTED) - ); - - let pool_address = get_owned_pool_address(signer::address_of(owner)); - if (allowlisting_enabled(pool_address)) { return }; - - let pool_signer = retrieve_stake_pool_owner(borrow_global(pool_address)); - move_to(&pool_signer, DelegationPoolAllowlisting { allowlist: smart_table::new() }); - - event::emit(EnableDelegatorsAllowlisting { pool_address }); - } - - /// Disable delegators allowlisting as the pool owner. The existing allowlist will be emptied. - public entry fun disable_delegators_allowlisting( - owner: &signer, - ) acquires DelegationPoolOwnership, DelegationPoolAllowlisting { - let pool_address = get_owned_pool_address(signer::address_of(owner)); - assert_allowlisting_enabled(pool_address); - - let DelegationPoolAllowlisting { allowlist } = move_from(pool_address); - // if the allowlist becomes too large, the owner can always remove some delegators - smart_table::destroy(allowlist); - - event::emit(DisableDelegatorsAllowlisting { pool_address }); - } - - /// Allowlist a delegator as the pool owner. - public entry fun allowlist_delegator( - owner: &signer, - delegator_address: address, - ) acquires DelegationPoolOwnership, DelegationPoolAllowlisting { - let pool_address = get_owned_pool_address(signer::address_of(owner)); - assert_allowlisting_enabled(pool_address); - - if (delegator_allowlisted(pool_address, delegator_address)) { return }; - - smart_table::add(borrow_mut_delegators_allowlist(pool_address), delegator_address, true); - - event::emit(AllowlistDelegator { pool_address, delegator_address }); - } - - /// Remove a delegator from the allowlist as the pool owner, but do not unlock their stake. - public entry fun remove_delegator_from_allowlist( - owner: &signer, - delegator_address: address, - ) acquires DelegationPoolOwnership, DelegationPoolAllowlisting { - let pool_address = get_owned_pool_address(signer::address_of(owner)); - assert_allowlisting_enabled(pool_address); - - if (!delegator_allowlisted(pool_address, delegator_address)) { return }; - - smart_table::remove(borrow_mut_delegators_allowlist(pool_address), delegator_address); - - event::emit(RemoveDelegatorFromAllowlist { pool_address, delegator_address }); - } - - /// Evict a delegator that is not allowlisted by unlocking their entire stake. - public entry fun evict_delegator( - owner: &signer, - delegator_address: address, - ) acquires DelegationPoolOwnership, DelegationPool, GovernanceRecords, BeneficiaryForOperator, NextCommissionPercentage, DelegationPoolAllowlisting { - let pool_address = get_owned_pool_address(signer::address_of(owner)); - assert_allowlisting_enabled(pool_address); - assert!( - !delegator_allowlisted(pool_address, delegator_address), - error::invalid_state(ECANNOT_EVICT_ALLOWLISTED_DELEGATOR) - ); - - // synchronize pool in order to query latest balance of delegator - synchronize_delegation_pool(pool_address); - - let pool = borrow_global(pool_address); - if (get_delegator_active_shares(pool, delegator_address) == 0) { return }; - - unlock_internal(delegator_address, pool_address, pool_u64::balance(&pool.active_shares, delegator_address)); - - event::emit(EvictDelegator { pool_address, delegator_address }); - } - - /// Add `amount` of coins to the delegation pool `pool_address`. - public entry fun add_stake( - delegator: &signer, - pool_address: address, - amount: u64 - ) acquires DelegationPool, GovernanceRecords, BeneficiaryForOperator, NextCommissionPercentage, DelegationPoolAllowlisting { - // short-circuit if amount to add is 0 so no event is emitted - if (amount == 0) { return }; - - let delegator_address = signer::address_of(delegator); - assert_delegator_allowlisted(pool_address, delegator_address); - - // synchronize delegation and stake pools before any user operation - synchronize_delegation_pool(pool_address); - - // fee to be charged for adding `amount` stake on this delegation pool at this epoch - let add_stake_fee = get_add_stake_fee(pool_address, amount); - - let pool = borrow_global_mut(pool_address); - - // stake the entire amount to the stake pool - aptos_account::transfer(delegator, pool_address, amount); - stake::add_stake(&retrieve_stake_pool_owner(pool), amount); - - // but buy shares for delegator just for the remaining amount after fee - buy_in_active_shares(pool, delegator_address, amount - add_stake_fee); - assert_min_active_balance(pool, delegator_address); - - // grant temporary ownership over `add_stake` fees to a separate shareholder in order to: - // - not mistake them for rewards to pay the operator from - // - distribute them together with the `active` rewards when this epoch ends - // in order to appreciate all shares on the active pool atomically - buy_in_active_shares(pool, NULL_SHAREHOLDER, add_stake_fee); - - if (features::module_event_migration_enabled()) { - event::emit( - AddStake { - pool_address, - delegator_address, - amount_added: amount, - add_stake_fee, - }, - ); - } else { - event::emit_event( - &mut pool.add_stake_events, - AddStakeEvent { - pool_address, - delegator_address, - amount_added: amount, - add_stake_fee, - }, - ); - }; - } - - /// Unlock `amount` from the active + pending_active stake of `delegator` or - /// at most how much active stake there is on the stake pool. - public entry fun unlock( - delegator: &signer, - pool_address: address, - amount: u64 - ) acquires DelegationPool, GovernanceRecords, BeneficiaryForOperator, NextCommissionPercentage { - // short-circuit if amount to unlock is 0 so no event is emitted - if (amount == 0) { return }; - - // synchronize delegation and stake pools before any user operation - synchronize_delegation_pool(pool_address); - - let delegator_address = signer::address_of(delegator); - unlock_internal(delegator_address, pool_address, amount); - } - - fun unlock_internal( - delegator_address: address, - pool_address: address, - amount: u64 - ) acquires DelegationPool, GovernanceRecords { - assert!(delegator_address != NULL_SHAREHOLDER, error::invalid_argument(ECANNOT_UNLOCK_NULL_SHAREHOLDER)); - - // fail unlock of more stake than `active` on the stake pool - let (active, _, _, _) = stake::get_stake(pool_address); - assert!(amount <= active, error::invalid_argument(ENOT_ENOUGH_ACTIVE_STAKE_TO_UNLOCK)); - - let pool = borrow_global_mut(pool_address); - amount = coins_to_transfer_to_ensure_min_stake( - &pool.active_shares, - pending_inactive_shares_pool(pool), - delegator_address, - amount, - ); - amount = redeem_active_shares(pool, delegator_address, amount); - - stake::unlock(&retrieve_stake_pool_owner(pool), amount); - - buy_in_pending_inactive_shares(pool, delegator_address, amount); - assert_min_pending_inactive_balance(pool, delegator_address); - - if (features::module_event_migration_enabled()) { - event::emit( - UnlockStake { - pool_address, - delegator_address, - amount_unlocked: amount, - }, - ); - } else { - event::emit_event( - &mut pool.unlock_stake_events, - UnlockStakeEvent { - pool_address, - delegator_address, - amount_unlocked: amount, - }, - ); - }; - } - - /// Move `amount` of coins from pending_inactive to active. - public entry fun reactivate_stake( - delegator: &signer, - pool_address: address, - amount: u64 - ) acquires DelegationPool, GovernanceRecords, BeneficiaryForOperator, NextCommissionPercentage, DelegationPoolAllowlisting { - // short-circuit if amount to reactivate is 0 so no event is emitted - if (amount == 0) { return }; - - let delegator_address = signer::address_of(delegator); - assert_delegator_allowlisted(pool_address, delegator_address); - - // synchronize delegation and stake pools before any user operation - synchronize_delegation_pool(pool_address); - - let pool = borrow_global_mut(pool_address); - amount = coins_to_transfer_to_ensure_min_stake( - pending_inactive_shares_pool(pool), - &pool.active_shares, - delegator_address, - amount, - ); - let observed_lockup_cycle = pool.observed_lockup_cycle; - amount = redeem_inactive_shares(pool, delegator_address, amount, observed_lockup_cycle); - - stake::reactivate_stake(&retrieve_stake_pool_owner(pool), amount); - - buy_in_active_shares(pool, delegator_address, amount); - assert_min_active_balance(pool, delegator_address); - - if (features::module_event_migration_enabled()) { - event::emit( - ReactivateStake { - pool_address, - delegator_address, - amount_reactivated: amount, - }, - ); - } else { - event::emit_event( - &mut pool.reactivate_stake_events, - ReactivateStakeEvent { - pool_address, - delegator_address, - amount_reactivated: amount, - }, - ); - }; - } - - /// Withdraw `amount` of owned inactive stake from the delegation pool at `pool_address`. - public entry fun withdraw( - delegator: &signer, - pool_address: address, - amount: u64 - ) acquires DelegationPool, GovernanceRecords, BeneficiaryForOperator, NextCommissionPercentage { - assert!(amount > 0, error::invalid_argument(EWITHDRAW_ZERO_STAKE)); - // synchronize delegation and stake pools before any user operation - synchronize_delegation_pool(pool_address); - withdraw_internal(borrow_global_mut(pool_address), signer::address_of(delegator), amount); - } - - fun withdraw_internal( - pool: &mut DelegationPool, - delegator_address: address, - amount: u64 - ) acquires GovernanceRecords { - // TODO: recycle storage when a delegator fully exits the delegation pool. - // short-circuit if amount to withdraw is 0 so no event is emitted - if (amount == 0) { return }; - - let pool_address = get_pool_address(pool); - let (withdrawal_exists, withdrawal_olc) = pending_withdrawal_exists(pool, delegator_address); - // exit if no withdrawal or (it is pending and cannot withdraw pending_inactive stake from stake pool) - if (!( - withdrawal_exists && - (withdrawal_olc.index < pool.observed_lockup_cycle.index || can_withdraw_pending_inactive(pool_address)) - )) { return }; - - if (withdrawal_olc.index == pool.observed_lockup_cycle.index) { - amount = coins_to_redeem_to_ensure_min_stake( - pending_inactive_shares_pool(pool), - delegator_address, - amount, - ) - }; - amount = redeem_inactive_shares(pool, delegator_address, amount, withdrawal_olc); - - let stake_pool_owner = &retrieve_stake_pool_owner(pool); - // stake pool will inactivate entire pending_inactive stake at `stake::withdraw` to make it withdrawable - // however, bypassing the inactivation of excess stake (inactivated but not withdrawn) ensures - // the OLC is not advanced indefinitely on `unlock`-`withdraw` paired calls - if (can_withdraw_pending_inactive(pool_address)) { - // get excess stake before being entirely inactivated - let (_, _, _, pending_inactive) = stake::get_stake(pool_address); - if (withdrawal_olc.index == pool.observed_lockup_cycle.index) { - // `amount` less excess if withdrawing pending_inactive stake - pending_inactive = pending_inactive - amount - }; - // escape excess stake from inactivation - stake::reactivate_stake(stake_pool_owner, pending_inactive); - stake::withdraw(stake_pool_owner, amount); - // restore excess stake to the pending_inactive state - stake::unlock(stake_pool_owner, pending_inactive); - } else { - // no excess stake if `stake::withdraw` does not inactivate at all - stake::withdraw(stake_pool_owner, amount); - }; - aptos_account::transfer(stake_pool_owner, delegator_address, amount); - - // commit withdrawal of possibly inactive stake to the `total_coins_inactive` - // known by the delegation pool in order to not mistake it for slashing at next synchronization - let (_, inactive, _, _) = stake::get_stake(pool_address); - pool.total_coins_inactive = inactive; - - if (features::module_event_migration_enabled()) { - event::emit( - WithdrawStake { - pool_address, - delegator_address, - amount_withdrawn: amount, - }, - ); - } else { - event::emit_event( - &mut pool.withdraw_stake_events, - WithdrawStakeEvent { - pool_address, - delegator_address, - amount_withdrawn: amount, - }, - ); - }; - } - - /// Return the unique observed lockup cycle where delegator `delegator_address` may have - /// unlocking (or already unlocked) stake to be withdrawn from delegation pool `pool`. - /// A bool is returned to signal if a pending withdrawal exists at all. - fun pending_withdrawal_exists(pool: &DelegationPool, delegator_address: address): (bool, ObservedLockupCycle) { - if (table::contains(&pool.pending_withdrawals, delegator_address)) { - (true, *table::borrow(&pool.pending_withdrawals, delegator_address)) - } else { - (false, olc_with_index(0)) - } - } - - /// Return a mutable reference to the shares pool of `pending_inactive` stake on the - /// delegation pool, always the last item in `inactive_shares`. - fun pending_inactive_shares_pool_mut(pool: &mut DelegationPool): &mut pool_u64::Pool { - let observed_lockup_cycle = pool.observed_lockup_cycle; - table::borrow_mut(&mut pool.inactive_shares, observed_lockup_cycle) - } - - fun pending_inactive_shares_pool(pool: &DelegationPool): &pool_u64::Pool { - table::borrow(&pool.inactive_shares, pool.observed_lockup_cycle) - } - - /// Execute the pending withdrawal of `delegator_address` on delegation pool `pool` - /// if existing and already inactive to allow the creation of a new one. - /// `pending_inactive` stake would be left untouched even if withdrawable and should - /// be explicitly withdrawn by delegator - fun execute_pending_withdrawal(pool: &mut DelegationPool, delegator_address: address) acquires GovernanceRecords { - let (withdrawal_exists, withdrawal_olc) = pending_withdrawal_exists(pool, delegator_address); - if (withdrawal_exists && withdrawal_olc.index < pool.observed_lockup_cycle.index) { - withdraw_internal(pool, delegator_address, MAX_U64); - } - } - - /// Buy shares into the active pool on behalf of delegator `shareholder` who - /// deposited `coins_amount`. This function doesn't make any coin transfer. - fun buy_in_active_shares( - pool: &mut DelegationPool, - shareholder: address, - coins_amount: u64, - ): u128 acquires GovernanceRecords { - let new_shares = pool_u64::amount_to_shares(&pool.active_shares, coins_amount); - // No need to buy 0 shares. - if (new_shares == 0) { return 0 }; - - // Always update governance records before any change to the shares pool. - let pool_address = get_pool_address(pool); - if (partial_governance_voting_enabled(pool_address)) { - update_governance_records_for_buy_in_active_shares(pool, pool_address, new_shares, shareholder); - }; - - pool_u64::buy_in(&mut pool.active_shares, shareholder, coins_amount); - new_shares - } - - /// Buy shares into the pending_inactive pool on behalf of delegator `shareholder` who - /// redeemed `coins_amount` from the active pool to schedule it for unlocking. - /// If delegator's pending withdrawal exists and has been inactivated, execute it firstly - /// to ensure there is always only one withdrawal request. - fun buy_in_pending_inactive_shares( - pool: &mut DelegationPool, - shareholder: address, - coins_amount: u64, - ): u128 acquires GovernanceRecords { - let new_shares = pool_u64::amount_to_shares(pending_inactive_shares_pool(pool), coins_amount); - // never create a new pending withdrawal unless delegator owns some pending_inactive shares - if (new_shares == 0) { return 0 }; - - // Always update governance records before any change to the shares pool. - let pool_address = get_pool_address(pool); - if (partial_governance_voting_enabled(pool_address)) { - update_governance_records_for_buy_in_pending_inactive_shares(pool, pool_address, new_shares, shareholder); - }; - - // cannot buy inactive shares, only pending_inactive at current lockup cycle - pool_u64::buy_in(pending_inactive_shares_pool_mut(pool), shareholder, coins_amount); - - // execute the pending withdrawal if exists and is inactive before creating a new one - execute_pending_withdrawal(pool, shareholder); - - // save observed lockup cycle for the new pending withdrawal - let observed_lockup_cycle = pool.observed_lockup_cycle; - assert!(*table::borrow_mut_with_default( - &mut pool.pending_withdrawals, - shareholder, - observed_lockup_cycle - ) == observed_lockup_cycle, - error::invalid_state(EPENDING_WITHDRAWAL_EXISTS) - ); - - new_shares - } - - /// Convert `coins_amount` of coins to be redeemed from shares pool `shares_pool` - /// to the exact number of shares to redeem in order to achieve this. - fun amount_to_shares_to_redeem( - shares_pool: &pool_u64::Pool, - shareholder: address, - coins_amount: u64, - ): u128 { - if (coins_amount >= pool_u64::balance(shares_pool, shareholder)) { - // cap result at total shares of shareholder to pass `EINSUFFICIENT_SHARES` on subsequent redeem - pool_u64::shares(shares_pool, shareholder) - } else { - pool_u64::amount_to_shares(shares_pool, coins_amount) - } - } - - /// Redeem shares from the active pool on behalf of delegator `shareholder` who - /// wants to unlock `coins_amount` of its active stake. - /// Extracted coins will be used to buy shares into the pending_inactive pool and - /// be available for withdrawal when current OLC ends. - fun redeem_active_shares( - pool: &mut DelegationPool, - shareholder: address, - coins_amount: u64, - ): u64 acquires GovernanceRecords { - let shares_to_redeem = amount_to_shares_to_redeem(&pool.active_shares, shareholder, coins_amount); - // silently exit if not a shareholder otherwise redeem would fail with `ESHAREHOLDER_NOT_FOUND` - if (shares_to_redeem == 0) return 0; - - // Always update governance records before any change to the shares pool. - let pool_address = get_pool_address(pool); - if (partial_governance_voting_enabled(pool_address)) { - update_governanace_records_for_redeem_active_shares(pool, pool_address, shares_to_redeem, shareholder); - }; - - pool_u64::redeem_shares(&mut pool.active_shares, shareholder, shares_to_redeem) - } - - /// Redeem shares from the inactive pool at `lockup_cycle` < current OLC on behalf of - /// delegator `shareholder` who wants to withdraw `coins_amount` of its unlocked stake. - /// Redeem shares from the pending_inactive pool at `lockup_cycle` == current OLC on behalf of - /// delegator `shareholder` who wants to reactivate `coins_amount` of its unlocking stake. - /// For latter case, extracted coins will be used to buy shares into the active pool and - /// escape inactivation when current lockup ends. - fun redeem_inactive_shares( - pool: &mut DelegationPool, - shareholder: address, - coins_amount: u64, - lockup_cycle: ObservedLockupCycle, - ): u64 acquires GovernanceRecords { - let shares_to_redeem = amount_to_shares_to_redeem( - table::borrow(&pool.inactive_shares, lockup_cycle), - shareholder, - coins_amount); - // silently exit if not a shareholder otherwise redeem would fail with `ESHAREHOLDER_NOT_FOUND` - if (shares_to_redeem == 0) return 0; - - // Always update governance records before any change to the shares pool. - let pool_address = get_pool_address(pool); - // Only redeem shares from the pending_inactive pool at `lockup_cycle` == current OLC. - if (partial_governance_voting_enabled(pool_address) && lockup_cycle.index == pool.observed_lockup_cycle.index) { - update_governanace_records_for_redeem_pending_inactive_shares( - pool, - pool_address, - shares_to_redeem, - shareholder - ); - }; - - let inactive_shares = table::borrow_mut(&mut pool.inactive_shares, lockup_cycle); - // 1. reaching here means delegator owns inactive/pending_inactive shares at OLC `lockup_cycle` - let redeemed_coins = pool_u64::redeem_shares(inactive_shares, shareholder, shares_to_redeem); - - // if entirely reactivated pending_inactive stake or withdrawn inactive one, - // re-enable unlocking for delegator by deleting this pending withdrawal - if (pool_u64::shares(inactive_shares, shareholder) == 0) { - // 2. a delegator owns inactive/pending_inactive shares only at the OLC of its pending withdrawal - // 1 & 2: the pending withdrawal itself has been emptied of shares and can be safely deleted - table::remove(&mut pool.pending_withdrawals, shareholder); - }; - // destroy inactive shares pool of past OLC if all its stake has been withdrawn - if (lockup_cycle.index < pool.observed_lockup_cycle.index && total_coins(inactive_shares) == 0) { - pool_u64::destroy_empty(table::remove(&mut pool.inactive_shares, lockup_cycle)); - }; - - redeemed_coins - } - - /// Calculate stake deviations between the delegation and stake pools in order to - /// capture the rewards earned in the meantime, resulted operator commission and - /// whether the lockup expired on the stake pool. - fun calculate_stake_pool_drift(pool: &DelegationPool): (bool, u64, u64, u64, u64) { - let (active, inactive, pending_active, pending_inactive) = stake::get_stake(get_pool_address(pool)); - assert!( - inactive >= pool.total_coins_inactive, - error::invalid_state(ESLASHED_INACTIVE_STAKE_ON_PAST_OLC) - ); - // determine whether a new lockup cycle has been ended on the stake pool and - // inactivated SOME `pending_inactive` stake which should stop earning rewards now, - // thus requiring separation of the `pending_inactive` stake on current observed lockup - // and the future one on the newly started lockup - let lockup_cycle_ended = inactive > pool.total_coins_inactive; - - // actual coins on stake pool belonging to the active shares pool - active = active + pending_active; - // actual coins on stake pool belonging to the shares pool hosting `pending_inactive` stake - // at current observed lockup cycle, either pending: `pending_inactive` or already inactivated: - if (lockup_cycle_ended) { - // `inactive` on stake pool = any previous `inactive` stake + - // any previous `pending_inactive` stake and its rewards (both inactivated) - pending_inactive = inactive - pool.total_coins_inactive - }; - - // on stake-management operations, total coins on the internal shares pools and individual - // stakes on the stake pool are updated simultaneously, thus the only stakes becoming - // unsynced are rewards and slashes routed exclusively to/out the stake pool - - // operator `active` rewards not persisted yet to the active shares pool - let pool_active = total_coins(&pool.active_shares); - let commission_active = if (active > pool_active) { - math64::mul_div(active - pool_active, pool.operator_commission_percentage, MAX_FEE) - } else { - // handle any slashing applied to `active` stake - 0 - }; - // operator `pending_inactive` rewards not persisted yet to the pending_inactive shares pool - let pool_pending_inactive = total_coins(pending_inactive_shares_pool(pool)); - let commission_pending_inactive = if (pending_inactive > pool_pending_inactive) { - math64::mul_div( - pending_inactive - pool_pending_inactive, - pool.operator_commission_percentage, - MAX_FEE - ) - } else { - // handle any slashing applied to `pending_inactive` stake - 0 - }; - - (lockup_cycle_ended, active, pending_inactive, commission_active, commission_pending_inactive) - } - - /// Synchronize delegation and stake pools: distribute yet-undetected rewards to the corresponding internal - /// shares pools, assign commission to operator and eventually prepare delegation pool for a new lockup cycle. - public entry fun synchronize_delegation_pool( - pool_address: address - ) acquires DelegationPool, GovernanceRecords, BeneficiaryForOperator, NextCommissionPercentage { - assert_delegation_pool_exists(pool_address); - let pool = borrow_global_mut(pool_address); - let ( - lockup_cycle_ended, - active, - pending_inactive, - commission_active, - commission_pending_inactive - ) = calculate_stake_pool_drift(pool); - - // zero `pending_active` stake indicates that either there are no `add_stake` fees or - // previous epoch has ended and should release the shares owning the existing fees - let (_, _, pending_active, _) = stake::get_stake(pool_address); - if (pending_active == 0) { - // renounce ownership over the `add_stake` fees by redeeming all shares of - // the special shareholder, implicitly their equivalent coins, out of the active shares pool - redeem_active_shares(pool, NULL_SHAREHOLDER, MAX_U64); - }; - - // distribute rewards remaining after commission, to delegators (to already existing shares) - // before buying shares for the operator for its entire commission fee - // otherwise, operator's new shares would additionally appreciate from rewards it does not own - - // update total coins accumulated by `active` + `pending_active` shares - // redeemed `add_stake` fees are restored and distributed to the rest of the pool as rewards - pool_u64::update_total_coins(&mut pool.active_shares, active - commission_active); - // update total coins accumulated by `pending_inactive` shares at current observed lockup cycle - pool_u64::update_total_coins( - pending_inactive_shares_pool_mut(pool), - pending_inactive - commission_pending_inactive - ); - - // reward operator its commission out of uncommitted active rewards (`add_stake` fees already excluded) - buy_in_active_shares(pool, beneficiary_for_operator(stake::get_operator(pool_address)), commission_active); - // reward operator its commission out of uncommitted pending_inactive rewards - buy_in_pending_inactive_shares( - pool, - beneficiary_for_operator(stake::get_operator(pool_address)), - commission_pending_inactive - ); - - event::emit_event( - &mut pool.distribute_commission_events, - DistributeCommissionEvent { - pool_address, - operator: stake::get_operator(pool_address), - commission_active, - commission_pending_inactive, - }, - ); - - if (features::operator_beneficiary_change_enabled()) { - emit(DistributeCommission { - pool_address, - operator: stake::get_operator(pool_address), - beneficiary: beneficiary_for_operator(stake::get_operator(pool_address)), - commission_active, - commission_pending_inactive, - }) - }; - - // advance lockup cycle on delegation pool if already ended on stake pool (AND stake explicitly inactivated) - if (lockup_cycle_ended) { - // capture inactive coins over all ended lockup cycles (including this ending one) - let (_, inactive, _, _) = stake::get_stake(pool_address); - pool.total_coins_inactive = inactive; - - // advance lockup cycle on the delegation pool - pool.observed_lockup_cycle.index = pool.observed_lockup_cycle.index + 1; - // start new lockup cycle with a fresh shares pool for `pending_inactive` stake - table::add( - &mut pool.inactive_shares, - pool.observed_lockup_cycle, - pool_u64::create_with_scaling_factor(SHARES_SCALING_FACTOR) - ); - }; - - if (is_next_commission_percentage_effective(pool_address)) { - pool.operator_commission_percentage = borrow_global( - pool_address - ).commission_percentage_next_lockup_cycle; - } - } - - inline fun assert_and_update_proposal_used_voting_power( - governance_records: &mut GovernanceRecords, pool_address: address, proposal_id: u64, voting_power: u64 - ) { - let stake_pool_remaining_voting_power = aptos_governance::get_remaining_voting_power(pool_address, proposal_id); - let stake_pool_used_voting_power = aptos_governance::get_voting_power( - pool_address - ) - stake_pool_remaining_voting_power; - let proposal_used_voting_power = smart_table::borrow_mut_with_default( - &mut governance_records.votes_per_proposal, - proposal_id, - 0 - ); - // A edge case: Before enabling partial governance voting on a delegation pool, the delegation pool has - // a voter which can vote with all voting power of this delegation pool. If the voter votes on a proposal after - // partial governance voting flag is enabled, the delegation pool doesn't have enough voting power on this - // proposal for all the delegators. To be fair, no one can vote on this proposal through this delegation pool. - // To detect this case, check if the stake pool had used voting power not through delegation_pool module. - assert!( - stake_pool_used_voting_power == *proposal_used_voting_power, - error::invalid_argument(EALREADY_VOTED_BEFORE_ENABLE_PARTIAL_VOTING) - ); - *proposal_used_voting_power = *proposal_used_voting_power + voting_power; - } - - fun update_governance_records_for_buy_in_active_shares( - pool: &DelegationPool, pool_address: address, new_shares: u128, shareholder: address - ) acquires GovernanceRecords { - // of += ----> - // of += - // of += - let governance_records = borrow_global_mut(pool_address); - let vote_delegation = update_and_borrow_mut_delegator_vote_delegation(pool, governance_records, shareholder); - let current_voter = vote_delegation.voter; - let pending_voter = vote_delegation.pending_voter; - let current_delegated_votes = - update_and_borrow_mut_delegated_votes(pool, governance_records, current_voter); - current_delegated_votes.active_shares = current_delegated_votes.active_shares + new_shares; - if (pending_voter == current_voter) { - current_delegated_votes.active_shares_next_lockup = - current_delegated_votes.active_shares_next_lockup + new_shares; - } else { - let pending_delegated_votes = - update_and_borrow_mut_delegated_votes(pool, governance_records, pending_voter); - pending_delegated_votes.active_shares_next_lockup = - pending_delegated_votes.active_shares_next_lockup + new_shares; - }; - } - - fun update_governance_records_for_buy_in_pending_inactive_shares( - pool: &DelegationPool, pool_address: address, new_shares: u128, shareholder: address - ) acquires GovernanceRecords { - // of += ----> - // of += - // no impact on of - let governance_records = borrow_global_mut(pool_address); - let current_voter = calculate_and_update_delegator_voter_internal(pool, governance_records, shareholder); - let current_delegated_votes = update_and_borrow_mut_delegated_votes(pool, governance_records, current_voter); - current_delegated_votes.pending_inactive_shares = current_delegated_votes.pending_inactive_shares + new_shares; - } - - fun update_governanace_records_for_redeem_active_shares( - pool: &DelegationPool, pool_address: address, shares_to_redeem: u128, shareholder: address - ) acquires GovernanceRecords { - // of -= ----> - // of -= - // of -= - let governance_records = borrow_global_mut(pool_address); - let vote_delegation = update_and_borrow_mut_delegator_vote_delegation( - pool, - governance_records, - shareholder - ); - let current_voter = vote_delegation.voter; - let pending_voter = vote_delegation.pending_voter; - let current_delegated_votes = update_and_borrow_mut_delegated_votes(pool, governance_records, current_voter); - current_delegated_votes.active_shares = current_delegated_votes.active_shares - shares_to_redeem; - if (current_voter == pending_voter) { - current_delegated_votes.active_shares_next_lockup = - current_delegated_votes.active_shares_next_lockup - shares_to_redeem; - } else { - let pending_delegated_votes = - update_and_borrow_mut_delegated_votes(pool, governance_records, pending_voter); - pending_delegated_votes.active_shares_next_lockup = - pending_delegated_votes.active_shares_next_lockup - shares_to_redeem; - }; - } - - fun update_governanace_records_for_redeem_pending_inactive_shares( - pool: &DelegationPool, pool_address: address, shares_to_redeem: u128, shareholder: address - ) acquires GovernanceRecords { - // of -= ----> - // of -= - // no impact on of - let governance_records = borrow_global_mut(pool_address); - let current_voter = calculate_and_update_delegator_voter_internal(pool, governance_records, shareholder); - let current_delegated_votes = update_and_borrow_mut_delegated_votes(pool, governance_records, current_voter); - current_delegated_votes.pending_inactive_shares = current_delegated_votes.pending_inactive_shares - shares_to_redeem; - } - - #[deprecated] - /// Deprecated, prefer math64::mul_div - public fun multiply_then_divide(x: u64, y: u64, z: u64): u64 { - math64::mul_div(x, y, z) - } - - #[test_only] - use aptos_framework::reconfiguration; - #[test_only] - use aptos_std::fixed_point64; - #[test_only] - use aptos_framework::stake::fast_forward_to_unlock; - #[test_only] - use aptos_framework::timestamp::fast_forward_seconds; - - #[test_only] - const CONSENSUS_KEY_1: vector = x"8a54b92288d4ba5073d3a52e80cc00ae9fbbc1cc5b433b46089b7804c38a76f00fc64746c7685ee628fc2d0b929c2294"; - #[test_only] - const CONSENSUS_POP_1: vector = x"a9d6c1f1270f2d1454c89a83a4099f813a56dc7db55591d46aa4e6ccae7898b234029ba7052f18755e6fa5e6b73e235f14efc4e2eb402ca2b8f56bad69f965fc11b7b25eb1c95a06f83ddfd023eac4559b6582696cfea97b227f4ce5bdfdfed0"; - - #[test_only] - const EPOCH_DURATION: u64 = 60; - #[test_only] - const LOCKUP_CYCLE_SECONDS: u64 = 2592000; - - #[test_only] - const ONE_APT: u64 = 100000000; - - #[test_only] - const VALIDATOR_STATUS_PENDING_ACTIVE: u64 = 1; - #[test_only] - const VALIDATOR_STATUS_ACTIVE: u64 = 2; - #[test_only] - const VALIDATOR_STATUS_PENDING_INACTIVE: u64 = 3; - - #[test_only] - const DELEGATION_POOLS: u64 = 11; - - #[test_only] - const MODULE_EVENT: u64 = 26; - - #[test_only] - const OPERATOR_BENEFICIARY_CHANGE: u64 = 39; - - #[test_only] - const COMMISSION_CHANGE_DELEGATION_POOL: u64 = 42; - - #[test_only] - public fun end_aptos_epoch() { - stake::end_epoch(); // additionally forwards EPOCH_DURATION seconds - reconfiguration::reconfigure_for_test_custom(); - } - - #[test_only] - public fun initialize_for_test(aptos_framework: &signer) { - initialize_for_test_custom( - aptos_framework, - 100 * ONE_APT, - 10000000 * ONE_APT, - LOCKUP_CYCLE_SECONDS, - true, - 1, - 100, - 1000000 - ); - } - - #[test_only] - public fun initialize_for_test_no_reward(aptos_framework: &signer) { - initialize_for_test_custom( - aptos_framework, - 100 * ONE_APT, - 10000000 * ONE_APT, - LOCKUP_CYCLE_SECONDS, - true, - 0, - 100, - 1000000 - ); - } - - #[test_only] - public fun initialize_for_test_custom( - aptos_framework: &signer, - minimum_stake: u64, - maximum_stake: u64, - recurring_lockup_secs: u64, - allow_validator_set_change: bool, - rewards_rate_numerator: u64, - rewards_rate_denominator: u64, - voting_power_increase_limit: u64, - ) { - account::create_account_for_test(signer::address_of(aptos_framework)); - stake::initialize_for_test_custom( - aptos_framework, - minimum_stake, - maximum_stake, - recurring_lockup_secs, - allow_validator_set_change, - rewards_rate_numerator, - rewards_rate_denominator, - voting_power_increase_limit, - ); - reconfiguration::initialize_for_test(aptos_framework); - features::change_feature_flags_for_testing( - aptos_framework, - vector[DELEGATION_POOLS, MODULE_EVENT, OPERATOR_BENEFICIARY_CHANGE, COMMISSION_CHANGE_DELEGATION_POOL], - vector[] - ); - } - - #[test_only] - public fun initialize_test_validator( - validator: &signer, - amount: u64, - should_join_validator_set: bool, - should_end_epoch: bool, - ) acquires DelegationPoolOwnership, DelegationPool, GovernanceRecords, BeneficiaryForOperator, NextCommissionPercentage, DelegationPoolAllowlisting { - initialize_test_validator_custom(validator, amount, should_join_validator_set, should_end_epoch, 0); - } - - #[test_only] - public fun initialize_test_validator_custom( - validator: &signer, - amount: u64, - should_join_validator_set: bool, - should_end_epoch: bool, - commission_percentage: u64, - ) acquires DelegationPoolOwnership, DelegationPool, GovernanceRecords, BeneficiaryForOperator, NextCommissionPercentage, DelegationPoolAllowlisting { - let validator_address = signer::address_of(validator); - if (!account::exists_at(validator_address)) { - account::create_account_for_test(validator_address); - }; - - initialize_delegation_pool(validator, commission_percentage, vector::empty()); - let pool_address = get_owned_pool_address(validator_address); - - stake::rotate_consensus_key(validator, pool_address, CONSENSUS_KEY_1, CONSENSUS_POP_1); - - if (amount > 0) { - stake::mint(validator, amount); - add_stake(validator, pool_address, amount); - }; - - if (should_join_validator_set) { - stake::join_validator_set(validator, pool_address); - }; - - if (should_end_epoch) { - end_aptos_epoch(); - }; - } - - #[test_only] - fun unlock_with_min_stake_disabled( - delegator: &signer, - pool_address: address, - amount: u64 - ) acquires DelegationPool, GovernanceRecords, BeneficiaryForOperator, NextCommissionPercentage { - synchronize_delegation_pool(pool_address); - - let pool = borrow_global_mut(pool_address); - let delegator_address = signer::address_of(delegator); - - amount = redeem_active_shares(pool, delegator_address, amount); - stake::unlock(&retrieve_stake_pool_owner(pool), amount); - buy_in_pending_inactive_shares(pool, delegator_address, amount); - } - - #[test_only] - public fun enable_delegation_pool_allowlisting_feature(aptos_framework: &signer) { - features::change_feature_flags_for_testing( - aptos_framework, - vector[features::get_delegation_pool_allowlisting_feature()], - vector[] - ); - } - - #[test(aptos_framework = @aptos_framework, validator = @0x123)] - #[expected_failure(abort_code = 0x3000A, location = Self)] - public entry fun test_delegation_pools_disabled( - aptos_framework: &signer, - validator: &signer, - ) acquires DelegationPool, GovernanceRecords, BeneficiaryForOperator, NextCommissionPercentage { - initialize_for_test(aptos_framework); - features::change_feature_flags_for_testing(aptos_framework, vector[], vector[DELEGATION_POOLS]); - - initialize_delegation_pool(validator, 0, vector::empty()); - } - - #[test(aptos_framework = @aptos_framework, validator = @0x123)] - public entry fun test_set_operator_and_delegated_voter( - aptos_framework: &signer, - validator: &signer, - ) acquires DelegationPoolOwnership, DelegationPool, GovernanceRecords, BeneficiaryForOperator, NextCommissionPercentage { - initialize_for_test(aptos_framework); - - let validator_address = signer::address_of(validator); - initialize_delegation_pool(validator, 0, vector::empty()); - let pool_address = get_owned_pool_address(validator_address); - - assert!(stake::get_operator(pool_address) == @0x123, 1); - assert!(stake::get_delegated_voter(pool_address) == @0x123, 1); - - set_operator(validator, @0x111); - assert!(stake::get_operator(pool_address) == @0x111, 2); - - set_delegated_voter(validator, @0x112); - assert!(stake::get_delegated_voter(pool_address) == @0x112, 2); - } - - #[test(aptos_framework = @aptos_framework, validator = @0x123)] - #[expected_failure(abort_code = 0x60001, location = Self)] - public entry fun test_cannot_set_operator( - aptos_framework: &signer, - validator: &signer, - ) acquires DelegationPoolOwnership, DelegationPool, GovernanceRecords, BeneficiaryForOperator, NextCommissionPercentage { - initialize_for_test(aptos_framework); - // account does not own any delegation pool - set_operator(validator, @0x111); - } - - #[test(aptos_framework = @aptos_framework, validator = @0x123)] - #[expected_failure(abort_code = 0x60001, location = Self)] - public entry fun test_cannot_set_delegated_voter( - aptos_framework: &signer, - validator: &signer, - ) acquires DelegationPoolOwnership, DelegationPool, GovernanceRecords, BeneficiaryForOperator, NextCommissionPercentage { - initialize_for_test(aptos_framework); - // account does not own any delegation pool - set_delegated_voter(validator, @0x112); - } - - #[test(aptos_framework = @aptos_framework, validator = @0x123)] - #[expected_failure(abort_code = 0x80002, location = Self)] - public entry fun test_already_owns_delegation_pool( - aptos_framework: &signer, - validator: &signer, - ) acquires DelegationPool, GovernanceRecords, BeneficiaryForOperator, NextCommissionPercentage { - initialize_for_test(aptos_framework); - initialize_delegation_pool(validator, 0, x"00"); - initialize_delegation_pool(validator, 0, x"01"); - } - - #[test(aptos_framework = @aptos_framework, validator = @0x123)] - #[expected_failure(abort_code = 0x1000B, location = Self)] - public entry fun test_cannot_withdraw_zero_stake( - aptos_framework: &signer, - validator: &signer, - ) acquires DelegationPoolOwnership, DelegationPool, GovernanceRecords, BeneficiaryForOperator, NextCommissionPercentage { - initialize_for_test(aptos_framework); - initialize_delegation_pool(validator, 0, x"00"); - withdraw(validator, get_owned_pool_address(signer::address_of(validator)), 0); - } - - #[test(aptos_framework = @aptos_framework, validator = @0x123)] - public entry fun test_initialize_delegation_pool( - aptos_framework: &signer, - validator: &signer, - ) acquires DelegationPoolOwnership, DelegationPool, GovernanceRecords, BeneficiaryForOperator, NextCommissionPercentage { - initialize_for_test(aptos_framework); - - let validator_address = signer::address_of(validator); - initialize_delegation_pool(validator, 1234, vector::empty()); - - assert_owner_cap_exists(validator_address); - let pool_address = get_owned_pool_address(validator_address); - assert_delegation_pool_exists(pool_address); - - assert!(stake::stake_pool_exists(pool_address), 0); - assert!(stake::get_operator(pool_address) == validator_address, 0); - assert!(stake::get_delegated_voter(pool_address) == validator_address, 0); - - assert!(observed_lockup_cycle(pool_address) == 0, 0); - assert!(total_coins_inactive(pool_address) == 0, 0); - assert!(operator_commission_percentage(pool_address) == 1234, 0); - assert_inactive_shares_pool(pool_address, 0, true, 0); - stake::assert_stake_pool(pool_address, 0, 0, 0, 0); - } - - #[test(aptos_framework = @aptos_framework, validator = @0x123, delegator1 = @0x010, delegator2 = @0x020)] - public entry fun test_add_stake_fee( - aptos_framework: &signer, - validator: &signer, - delegator1: &signer, - delegator2: &signer, - ) acquires DelegationPoolOwnership, DelegationPool, GovernanceRecords, BeneficiaryForOperator, NextCommissionPercentage, DelegationPoolAllowlisting { - initialize_for_test_custom( - aptos_framework, - 100 * ONE_APT, - 10000000 * ONE_APT, - LOCKUP_CYCLE_SECONDS, - true, - 1, - 100, - 1000000 - ); - - let validator_address = signer::address_of(validator); - account::create_account_for_test(validator_address); - - // create delegation pool with 37.35% operator commission - initialize_delegation_pool(validator, 3735, vector::empty()); - let pool_address = get_owned_pool_address(validator_address); - - stake::rotate_consensus_key(validator, pool_address, CONSENSUS_KEY_1, CONSENSUS_POP_1); - - // zero `add_stake` fee as validator is not producing rewards this epoch - assert!(get_add_stake_fee(pool_address, 1000000 * ONE_APT) == 0, 0); - - // add 1M APT, join the validator set and activate this stake - stake::mint(validator, 1000000 * ONE_APT); - add_stake(validator, pool_address, 1000000 * ONE_APT); - - stake::join_validator_set(validator, pool_address); - end_aptos_epoch(); - - let delegator1_address = signer::address_of(delegator1); - account::create_account_for_test(delegator1_address); - - let delegator2_address = signer::address_of(delegator2); - account::create_account_for_test(delegator2_address); - - // `add_stake` fee for 100000 coins: 100000 * 0.006265 / (1 + 0.006265) - assert!(get_add_stake_fee(pool_address, 100000 * ONE_APT) == 62259941466, 0); - - // add pending_active stake from multiple delegators - stake::mint(delegator1, 100000 * ONE_APT); - add_stake(delegator1, pool_address, 100000 * ONE_APT); - stake::mint(delegator2, 10000 * ONE_APT); - add_stake(delegator2, pool_address, 10000 * ONE_APT); - - end_aptos_epoch(); - // delegators should own the same amount as initially deposited - assert_delegation(delegator1_address, pool_address, 10000000000000, 0, 0); - assert_delegation(delegator2_address, pool_address, 1000000000000, 0, 0); - - // add more stake from delegator 1 - stake::mint(delegator1, 10000 * ONE_APT); - let (delegator1_active, _, _) = get_stake(pool_address, delegator1_address); - add_stake(delegator1, pool_address, 10000 * ONE_APT); - - let fee = get_add_stake_fee(pool_address, 10000 * ONE_APT); - assert_delegation(delegator1_address, pool_address, delegator1_active + 10000 * ONE_APT - fee, 0, 0); - - // delegator 2 should not benefit in any way from this new stake - assert_delegation(delegator2_address, pool_address, 1000000000000, 0, 0); - - // add more stake from delegator 2 - stake::mint(delegator2, 100000 * ONE_APT); - add_stake(delegator2, pool_address, 100000 * ONE_APT); - - end_aptos_epoch(); - // delegators should own the same amount as initially deposited + any rewards produced - // 10000000000000 * 1% * (100 - 37.35)% - assert_delegation(delegator1_address, pool_address, 11062650000001, 0, 0); - // 1000000000000 * 1% * (100 - 37.35)% - assert_delegation(delegator2_address, pool_address, 11006265000001, 0, 0); - - // in-flight operator commission rewards do not automatically restake/compound - synchronize_delegation_pool(pool_address); - - // stakes should remain the same - `Self::get_stake` correctly calculates them - assert_delegation(delegator1_address, pool_address, 11062650000001, 0, 0); - assert_delegation(delegator2_address, pool_address, 11006265000001, 0, 0); - - end_aptos_epoch(); - // delegators should own previous stake * 1.006265 - assert_delegation(delegator1_address, pool_address, 11131957502251, 0, 0); - assert_delegation(delegator2_address, pool_address, 11075219250226, 0, 0); - - // add more stake from delegator 1 - stake::mint(delegator1, 20000 * ONE_APT); - (delegator1_active, _, _) = get_stake(pool_address, delegator1_address); - add_stake(delegator1, pool_address, 20000 * ONE_APT); - - fee = get_add_stake_fee(pool_address, 20000 * ONE_APT); - assert_delegation(delegator1_address, pool_address, delegator1_active + 20000 * ONE_APT - fee, 0, 0); - - // delegator 1 unlocks his entire newly added stake - unlock(delegator1, pool_address, 20000 * ONE_APT - fee); - end_aptos_epoch(); - // delegator 1 should own previous 11131957502250 active * 1.006265 and 20000 coins pending_inactive - assert_delegation(delegator1_address, pool_address, 11201699216002, 0, 2000000000000); - - // stakes should remain the same - `Self::get_stake` correctly calculates them - synchronize_delegation_pool(pool_address); - assert_delegation(delegator1_address, pool_address, 11201699216002, 0, 2000000000000); - - let reward_period_start_time_in_sec = timestamp::now_seconds(); - // Enable rewards rate decrease. Initially rewards rate is still 1% every epoch. Rewards rate halves every year. - let one_year_in_secs: u64 = 31536000; - staking_config::initialize_rewards( - aptos_framework, - fixed_point64::create_from_rational(2, 100), - fixed_point64::create_from_rational(6, 1000), - one_year_in_secs, - reward_period_start_time_in_sec, - fixed_point64::create_from_rational(50, 100), - ); - features::change_feature_flags_for_testing( - aptos_framework, - vector[features::get_periodical_reward_rate_decrease_feature()], - vector[] - ); - - // add more stake from delegator 1 - stake::mint(delegator1, 20000 * ONE_APT); - let delegator1_pending_inactive: u64; - (delegator1_active, _, delegator1_pending_inactive) = get_stake(pool_address, delegator1_address); - fee = get_add_stake_fee(pool_address, 20000 * ONE_APT); - add_stake(delegator1, pool_address, 20000 * ONE_APT); - - assert_delegation( - delegator1_address, - pool_address, - delegator1_active + 20000 * ONE_APT - fee, - 0, - delegator1_pending_inactive - ); - - // delegator 1 unlocks his entire newly added stake - unlock(delegator1, pool_address, 20000 * ONE_APT - fee); - end_aptos_epoch(); - // delegator 1 should own previous 11201699216002 active * ~1.01253 and 20000 * ~1.01253 + 20000 coins pending_inactive - assert_delegation(delegator1_address, pool_address, 11342056366822, 0, 4025059974939); - - // stakes should remain the same - `Self::get_stake` correctly calculates them - synchronize_delegation_pool(pool_address); - assert_delegation(delegator1_address, pool_address, 11342056366822, 0, 4025059974939); - - fast_forward_seconds(one_year_in_secs); - } - - #[test(aptos_framework = @aptos_framework, validator = @0x123, delegator = @0x010)] - public entry fun test_never_create_pending_withdrawal_if_no_shares_bought( - aptos_framework: &signer, - validator: &signer, - delegator: &signer, - ) acquires DelegationPoolOwnership, DelegationPool, GovernanceRecords, BeneficiaryForOperator, NextCommissionPercentage, DelegationPoolAllowlisting { - initialize_for_test(aptos_framework); - initialize_test_validator(validator, 1000 * ONE_APT, true, false); - - let validator_address = signer::address_of(validator); - let pool_address = get_owned_pool_address(validator_address); - - let delegator_address = signer::address_of(delegator); - account::create_account_for_test(delegator_address); - - // add stake without fees as validator is not active yet - stake::mint(delegator, 10 * ONE_APT); - add_stake(delegator, pool_address, 10 * ONE_APT); - end_aptos_epoch(); - - unlock(validator, pool_address, 100 * ONE_APT); - - stake::assert_stake_pool(pool_address, 91000000000, 0, 0, 10000000000); - end_aptos_epoch(); - stake::assert_stake_pool(pool_address, 91910000000, 0, 0, 10100000000); - - unlock_with_min_stake_disabled(delegator, pool_address, 1); - // request 1 coins * 910 / 919.1 = 0.99 shares to redeem * 1.01 price -> 0 coins out - // 1 coins lost at redeem due to 0.99 shares being burned - assert_delegation(delegator_address, pool_address, 1009999999, 0, 0); - assert_pending_withdrawal(delegator_address, pool_address, false, 0, false, 0); - - unlock_with_min_stake_disabled(delegator, pool_address, 2); - // request 2 coins * 909.99 / 919.1 = 1.98 shares to redeem * 1.01 price -> 1 coins out - // with 1 coins buy 1 * 100 / 101 = 0.99 shares in pending_inactive pool * 1.01 -> 0 coins in - // 1 coins lost at redeem due to 1.98 - 1.01 shares being burned + 1 coins extracted - synchronize_delegation_pool(pool_address); - assert_delegation(delegator_address, pool_address, 1009999997, 0, 0); - // the pending withdrawal has been created as > 0 pending_inactive shares have been bought - assert_pending_withdrawal(delegator_address, pool_address, true, 0, false, 0); - - // successfully delete the pending withdrawal (redeem all owned shares even worth 0 coins) - reactivate_stake(delegator, pool_address, 1); - assert_delegation(delegator_address, pool_address, 1009999997, 0, 0); - assert_pending_withdrawal(delegator_address, pool_address, false, 0, false, 0); - - // unlock min coins to own some pending_inactive balance (have to disable min-balance checks) - unlock_with_min_stake_disabled(delegator, pool_address, 3); - // request 3 coins * 909.99 / 919.09 = 2.97 shares to redeem * 1.01 price -> 2 coins out - // with 2 coins buy 2 * 100 / 101 = 1.98 shares in pending_inactive pool * 1.01 -> 1 coins in - // 1 coins lost at redeem due to 2.97 - 2 * 1.01 shares being burned + 2 coins extracted - synchronize_delegation_pool(pool_address); - assert_delegation(delegator_address, pool_address, 1009999994, 0, 1); - // the pending withdrawal has been created as > 0 pending_inactive shares have been bought - assert_pending_withdrawal(delegator_address, pool_address, true, 0, false, 1); - - reactivate_stake(delegator, pool_address, 1); - // redeem 1 coins >= delegator balance -> all shares are redeemed and pending withdrawal is deleted - assert_delegation(delegator_address, pool_address, 1009999995, 0, 0); - // the pending withdrawal has been deleted as delegator has 0 pending_inactive shares now - assert_pending_withdrawal(delegator_address, pool_address, false, 0, false, 0); - } - - #[test(aptos_framework = @aptos_framework, validator = @0x123)] - #[expected_failure(abort_code = 0x10008, location = Self)] - public entry fun test_add_stake_min_amount( - aptos_framework: &signer, - validator: &signer, - ) acquires DelegationPoolOwnership, DelegationPool, GovernanceRecords, BeneficiaryForOperator, NextCommissionPercentage, DelegationPoolAllowlisting { - initialize_for_test(aptos_framework); - initialize_test_validator(validator, MIN_COINS_ON_SHARES_POOL - 1, false, false); - } - - #[test(aptos_framework = @aptos_framework, validator = @0x123)] - public entry fun test_add_stake_single( - aptos_framework: &signer, - validator: &signer, - ) acquires DelegationPoolOwnership, DelegationPool, GovernanceRecords, BeneficiaryForOperator, NextCommissionPercentage, DelegationPoolAllowlisting { - initialize_for_test(aptos_framework); - initialize_test_validator(validator, 1000 * ONE_APT, false, false); - - let validator_address = signer::address_of(validator); - let pool_address = get_owned_pool_address(validator_address); - - // validator is inactive => added stake is `active` by default - stake::assert_stake_pool(pool_address, 1000 * ONE_APT, 0, 0, 0); - assert_delegation(validator_address, pool_address, 1000 * ONE_APT, 0, 0); - - // zero `add_stake` fee as validator is not producing rewards this epoch - assert!(get_add_stake_fee(pool_address, 250 * ONE_APT) == 0, 0); - - // check `add_stake` increases `active` stakes of delegator and stake pool - stake::mint(validator, 300 * ONE_APT); - let balance = coin::balance(validator_address); - add_stake(validator, pool_address, 250 * ONE_APT); - - // check added stake have been transferred out of delegator account - assert!(coin::balance(validator_address) == balance - 250 * ONE_APT, 0); - // zero `add_stake` fee charged from added stake - assert_delegation(validator_address, pool_address, 1250 * ONE_APT, 0, 0); - // zero `add_stake` fee transferred to null shareholder - assert_delegation(NULL_SHAREHOLDER, pool_address, 0, 0, 0); - // added stake is automatically `active` on inactive validator - stake::assert_stake_pool(pool_address, 1250 * ONE_APT, 0, 0, 0); - - // activate validator - stake::join_validator_set(validator, pool_address); - end_aptos_epoch(); - - // add 250 coins being pending_active until next epoch - stake::mint(validator, 250 * ONE_APT); - add_stake(validator, pool_address, 250 * ONE_APT); - - let fee1 = get_add_stake_fee(pool_address, 250 * ONE_APT); - assert_delegation(validator_address, pool_address, 1500 * ONE_APT - fee1, 0, 0); - // check `add_stake` fee has been transferred to the null shareholder - assert_delegation(NULL_SHAREHOLDER, pool_address, fee1, 0, 0); - stake::assert_stake_pool(pool_address, 1250 * ONE_APT, 0, 250 * ONE_APT, 0); - - // add 100 additional coins being pending_active until next epoch - stake::mint(validator, 100 * ONE_APT); - add_stake(validator, pool_address, 100 * ONE_APT); - - let fee2 = get_add_stake_fee(pool_address, 100 * ONE_APT); - assert_delegation(validator_address, pool_address, 1600 * ONE_APT - fee1 - fee2, 0, 0); - // check `add_stake` fee has been transferred to the null shareholder - assert_delegation(NULL_SHAREHOLDER, pool_address, fee1 + fee2, 0, 0); - stake::assert_stake_pool(pool_address, 1250 * ONE_APT, 0, 350 * ONE_APT, 0); - - end_aptos_epoch(); - // delegator got its `add_stake` fees back + 1250 * 1% * (100% - 0%) active rewards - assert_delegation(validator_address, pool_address, 161250000000, 0, 0); - stake::assert_stake_pool(pool_address, 161250000000, 0, 0, 0); - - // check that shares of null shareholder have been released - assert_delegation(NULL_SHAREHOLDER, pool_address, 0, 0, 0); - synchronize_delegation_pool(pool_address); - assert!(pool_u64::shares(&borrow_global(pool_address).active_shares, NULL_SHAREHOLDER) == 0, 0); - assert_delegation(NULL_SHAREHOLDER, pool_address, 0, 0, 0); - - // add 200 coins being pending_active until next epoch - stake::mint(validator, 200 * ONE_APT); - add_stake(validator, pool_address, 200 * ONE_APT); - - fee1 = get_add_stake_fee(pool_address, 200 * ONE_APT); - assert_delegation(validator_address, pool_address, 181250000000 - fee1, 0, 0); - // check `add_stake` fee has been transferred to the null shareholder - assert_delegation(NULL_SHAREHOLDER, pool_address, fee1 - 1, 0, 0); - stake::assert_stake_pool(pool_address, 161250000000, 0, 20000000000, 0); - - end_aptos_epoch(); - // delegator got its `add_stake` fee back + 161250000000 * 1% active rewards - assert_delegation(validator_address, pool_address, 182862500000, 0, 0); - stake::assert_stake_pool(pool_address, 182862500000, 0, 0, 0); - - // check that shares of null shareholder have been released - assert_delegation(NULL_SHAREHOLDER, pool_address, 0, 0, 0); - synchronize_delegation_pool(pool_address); - assert!(pool_u64::shares(&borrow_global(pool_address).active_shares, NULL_SHAREHOLDER) == 0, 0); - assert_delegation(NULL_SHAREHOLDER, pool_address, 0, 0, 0); - } - - #[test(aptos_framework = @aptos_framework, validator = @0x123, delegator = @0x010)] - public entry fun test_add_stake_many( - aptos_framework: &signer, - validator: &signer, - delegator: &signer, - ) acquires DelegationPoolOwnership, DelegationPool, GovernanceRecords, BeneficiaryForOperator, NextCommissionPercentage, DelegationPoolAllowlisting { - initialize_for_test(aptos_framework); - initialize_test_validator(validator, 1000 * ONE_APT, true, true); - - let validator_address = signer::address_of(validator); - let pool_address = get_owned_pool_address(validator_address); - - let delegator_address = signer::address_of(delegator); - account::create_account_for_test(delegator_address); - - stake::assert_stake_pool(pool_address, 1000 * ONE_APT, 0, 0, 0); - assert_delegation(validator_address, pool_address, 1000 * ONE_APT, 0, 0); - - // add 250 coins from second account - stake::mint(delegator, 250 * ONE_APT); - add_stake(delegator, pool_address, 250 * ONE_APT); - - let fee1 = get_add_stake_fee(pool_address, 250 * ONE_APT); - assert_delegation(delegator_address, pool_address, 250 * ONE_APT - fee1, 0, 0); - assert_delegation(validator_address, pool_address, 1000 * ONE_APT, 0, 0); - stake::assert_stake_pool(pool_address, 1000 * ONE_APT, 0, 250 * ONE_APT, 0); - - end_aptos_epoch(); - // 1000 * 1.01 active stake + 250 pending_active stake - stake::assert_stake_pool(pool_address, 1260 * ONE_APT, 0, 0, 0); - // delegator got its `add_stake` fee back - assert_delegation(delegator_address, pool_address, 250 * ONE_APT, 0, 0); - // actual active rewards have been distributed to their earner(s) - assert_delegation(validator_address, pool_address, 100999999999, 0, 0); - - // add another 250 coins from first account - stake::mint(validator, 250 * ONE_APT); - add_stake(validator, pool_address, 250 * ONE_APT); - - fee1 = get_add_stake_fee(pool_address, 250 * ONE_APT); - assert_delegation(validator_address, pool_address, 125999999999 - fee1, 0, 0); - assert_delegation(delegator_address, pool_address, 250 * ONE_APT, 0, 0); - stake::assert_stake_pool(pool_address, 1260 * ONE_APT, 0, 250 * ONE_APT, 0); - - // add another 100 coins from second account - stake::mint(delegator, 100 * ONE_APT); - add_stake(delegator, pool_address, 100 * ONE_APT); - - let fee2 = get_add_stake_fee(pool_address, 100 * ONE_APT); - assert_delegation(delegator_address, pool_address, 350 * ONE_APT - fee2, 0, 0); - assert_delegation(validator_address, pool_address, 125999999999 - fee1, 0, 0); - stake::assert_stake_pool(pool_address, 1260 * ONE_APT, 0, 350 * ONE_APT, 0); - - end_aptos_epoch(); - // both delegators got their `add_stake` fees back - // 250 * 1.01 active stake + 100 pending_active stake - assert_delegation(delegator_address, pool_address, 35250000001, 0, 0); - // 1010 * 1.01 active stake + 250 pending_active stake - assert_delegation(validator_address, pool_address, 127009999998, 0, 0); - stake::assert_stake_pool(pool_address, 162260000000, 0, 0, 0); - } - - #[test(aptos_framework = @aptos_framework, validator = @0x123, delegator = @0x010)] - public entry fun test_unlock_single( - aptos_framework: &signer, - validator: &signer, - delegator: &signer, - ) acquires DelegationPoolOwnership, DelegationPool, GovernanceRecords, BeneficiaryForOperator, NextCommissionPercentage, DelegationPoolAllowlisting { - initialize_for_test(aptos_framework); - initialize_test_validator(validator, 100 * ONE_APT, true, true); - - let validator_address = signer::address_of(validator); - let pool_address = get_owned_pool_address(validator_address); - - let delegator_address = signer::address_of(delegator); - account::create_account_for_test(delegator_address); - - // add 200 coins pending_active until next epoch - stake::mint(validator, 200 * ONE_APT); - add_stake(validator, pool_address, 200 * ONE_APT); - - let fee = get_add_stake_fee(pool_address, 200 * ONE_APT); - assert_delegation(validator_address, pool_address, 300 * ONE_APT - fee, 0, 0); - stake::assert_stake_pool(pool_address, 100 * ONE_APT, 0, 200 * ONE_APT, 0); - - // cannot unlock pending_active stake (only 100/300 stake can be displaced) - unlock(validator, pool_address, 100 * ONE_APT); - assert_delegation(validator_address, pool_address, 200 * ONE_APT - fee, 0, 100 * ONE_APT); - assert_pending_withdrawal(validator_address, pool_address, true, 0, false, 100 * ONE_APT); - stake::assert_stake_pool(pool_address, 0, 0, 200 * ONE_APT, 100 * ONE_APT); - assert_inactive_shares_pool(pool_address, 0, true, 100 * ONE_APT); - - // reactivate entire pending_inactive stake progressively - reactivate_stake(validator, pool_address, 50 * ONE_APT); - - assert_delegation(validator_address, pool_address, 250 * ONE_APT - fee, 0, 50 * ONE_APT); - assert_pending_withdrawal(validator_address, pool_address, true, 0, false, 50 * ONE_APT); - stake::assert_stake_pool(pool_address, 50 * ONE_APT, 0, 200 * ONE_APT, 50 * ONE_APT); - - reactivate_stake(validator, pool_address, 50 * ONE_APT); - - assert_delegation(validator_address, pool_address, 300 * ONE_APT - fee, 0, 0); - assert_pending_withdrawal(validator_address, pool_address, false, 0, false, 0); - stake::assert_stake_pool(pool_address, 100 * ONE_APT, 0, 200 * ONE_APT, 0); - // pending_inactive shares pool has not been deleted (as can still `unlock` this OLC) - assert_inactive_shares_pool(pool_address, 0, true, 0); - - end_aptos_epoch(); - // 10000000000 * 1.01 active stake + 20000000000 pending_active stake - assert_delegation(validator_address, pool_address, 301 * ONE_APT, 0, 0); - stake::assert_stake_pool(pool_address, 301 * ONE_APT, 0, 0, 0); - - // can unlock more than at previous epoch as the pending_active stake became active - unlock(validator, pool_address, 150 * ONE_APT); - assert_delegation(validator_address, pool_address, 15100000001, 0, 14999999999); - stake::assert_stake_pool(pool_address, 15100000001, 0, 0, 14999999999); - assert_pending_withdrawal(validator_address, pool_address, true, 0, false, 14999999999); - - assert!(stake::get_remaining_lockup_secs(pool_address) == LOCKUP_CYCLE_SECONDS - EPOCH_DURATION, 0); - end_aptos_epoch(); // additionally forwards EPOCH_DURATION seconds - - // pending_inactive stake should have not been inactivated - // 15100000001 * 1.01 active stake + 14999999999 pending_inactive * 1.01 stake - assert_delegation(validator_address, pool_address, 15251000001, 0, 15149999998); - assert_pending_withdrawal(validator_address, pool_address, true, 0, false, 15149999998); - stake::assert_stake_pool(pool_address, 15251000001, 0, 0, 15149999998); - - timestamp::fast_forward_seconds(LOCKUP_CYCLE_SECONDS - 3 * EPOCH_DURATION); - end_aptos_epoch(); // additionally forwards EPOCH_DURATION seconds and expires lockup cycle - - // 15251000001 * 1.01 active stake + 15149999998 * 1.01 pending_inactive(now inactive) stake - assert_delegation(validator_address, pool_address, 15403510001, 15301499997, 0); - assert_pending_withdrawal(validator_address, pool_address, true, 0, true, 15301499997); - stake::assert_stake_pool(pool_address, 15403510001, 15301499997, 0, 0); - - // add 50 coins from another account - stake::mint(delegator, 50 * ONE_APT); - add_stake(delegator, pool_address, 50 * ONE_APT); - - // observed lockup cycle should have advanced at `add_stake`(on synchronization) - assert!(observed_lockup_cycle(pool_address) == 1, 0); - - fee = get_add_stake_fee(pool_address, 50 * ONE_APT); - assert_delegation(delegator_address, pool_address, 4999999999 - fee, 0, 0); - assert_delegation(validator_address, pool_address, 15403510001, 15301499997, 0); - stake::assert_stake_pool(pool_address, 15403510001, 15301499997, 50 * ONE_APT, 0); - - // cannot withdraw stake unlocked by others - withdraw(delegator, pool_address, 50 * ONE_APT); - assert!(coin::balance(delegator_address) == 0, 0); - - // withdraw own unlocked stake - withdraw(validator, pool_address, 15301499997); - assert!(coin::balance(validator_address) == 15301499997, 0); - assert_delegation(validator_address, pool_address, 15403510001, 0, 0); - // pending withdrawal has been executed and deleted - assert_pending_withdrawal(validator_address, pool_address, false, 0, false, 0); - // inactive shares pool on OLC 0 has been deleted because its stake has been withdrawn - assert_inactive_shares_pool(pool_address, 0, false, 0); - - // new pending withdrawal can be created on lockup cycle 1 - unlock(validator, pool_address, 5403510001); - assert_delegation(validator_address, pool_address, 10000000000, 0, 5403510000); - assert_pending_withdrawal(validator_address, pool_address, true, 1, false, 5403510000); - - // end lockup cycle 1 - timestamp::fast_forward_seconds(LOCKUP_CYCLE_SECONDS); - end_aptos_epoch(); - - // 10000000000 * 1.01 active stake + 5403510000 * 1.01 pending_inactive(now inactive) stake - assert_delegation(validator_address, pool_address, 10100000000, 5457545100, 0); - assert_pending_withdrawal(validator_address, pool_address, true, 1, true, 5457545100); - - // unlock when the pending withdrawal exists and gets automatically executed - let balance = coin::balance(validator_address); - unlock(validator, pool_address, 10100000000); - assert!(coin::balance(validator_address) == balance + 5457545100, 0); - assert_delegation(validator_address, pool_address, 0, 0, 10100000000); - // this is the new pending withdrawal replacing the executed one - assert_pending_withdrawal(validator_address, pool_address, true, 2, false, 10100000000); - - // create dummy validator to ensure the existing validator can leave the set - initialize_test_validator(delegator, 100 * ONE_APT, true, true); - // inactivate validator - stake::leave_validator_set(validator, pool_address); - end_aptos_epoch(); - - // expire lockup cycle on the stake pool - timestamp::fast_forward_seconds(LOCKUP_CYCLE_SECONDS); - let observed_lockup_cycle = observed_lockup_cycle(pool_address); - end_aptos_epoch(); - - // observed lockup cycle should be unchanged as no stake has been inactivated - synchronize_delegation_pool(pool_address); - assert!(observed_lockup_cycle(pool_address) == observed_lockup_cycle, 0); - - // stake is pending_inactive as it has not been inactivated - stake::assert_stake_pool(pool_address, 5100500001, 0, 0, 10303010000); - // 10100000000 * 1.01 * 1.01 pending_inactive stake - assert_delegation(validator_address, pool_address, 0, 0, 10303010000); - // the pending withdrawal should be reported as still pending - assert_pending_withdrawal(validator_address, pool_address, true, 2, false, 10303010000); - - // validator is inactive and lockup expired => pending_inactive stake is withdrawable - balance = coin::balance(validator_address); - withdraw(validator, pool_address, 10303010000); - - assert!(coin::balance(validator_address) == balance + 10303010000, 0); - assert_delegation(validator_address, pool_address, 0, 0, 0); - assert_pending_withdrawal(validator_address, pool_address, false, 0, false, 0); - stake::assert_stake_pool(pool_address, 5100500001, 0, 0, 0); - // pending_inactive shares pool has not been deleted (as can still `unlock` this OLC) - assert_inactive_shares_pool(pool_address, observed_lockup_cycle(pool_address), true, 0); - - stake::mint(validator, 30 * ONE_APT); - add_stake(validator, pool_address, 30 * ONE_APT); - unlock(validator, pool_address, 10 * ONE_APT); - - assert_delegation(validator_address, pool_address, 1999999999, 0, 1000000000); - // the pending withdrawal should be reported as still pending - assert_pending_withdrawal(validator_address, pool_address, true, 2, false, 1000000000); - - balance = coin::balance(validator_address); - // pending_inactive balance would be under threshold => redeem entire balance - withdraw(validator, pool_address, 1); - // pending_inactive balance has been withdrawn and the pending withdrawal executed - assert_delegation(validator_address, pool_address, 1999999999, 0, 0); - assert_pending_withdrawal(validator_address, pool_address, false, 0, false, 0); - assert!(coin::balance(validator_address) == balance + 1000000000, 0); - } - - #[test(aptos_framework = @aptos_framework, validator = @0x123, delegator1 = @0x010, delegator2 = @0x020)] - public entry fun test_total_coins_inactive( - aptos_framework: &signer, - validator: &signer, - delegator1: &signer, - delegator2: &signer, - ) acquires DelegationPoolOwnership, DelegationPool, GovernanceRecords, BeneficiaryForOperator, NextCommissionPercentage, DelegationPoolAllowlisting { - initialize_for_test(aptos_framework); - initialize_test_validator(validator, 200 * ONE_APT, true, true); - - let validator_address = signer::address_of(validator); - let pool_address = get_owned_pool_address(validator_address); - - let delegator1_address = signer::address_of(delegator1); - account::create_account_for_test(delegator1_address); - - let delegator2_address = signer::address_of(delegator2); - account::create_account_for_test(delegator2_address); - - stake::mint(delegator1, 100 * ONE_APT); - stake::mint(delegator2, 200 * ONE_APT); - add_stake(delegator1, pool_address, 100 * ONE_APT); - add_stake(delegator2, pool_address, 200 * ONE_APT); - end_aptos_epoch(); - - assert_delegation(delegator1_address, pool_address, 100 * ONE_APT, 0, 0); - assert_delegation(delegator2_address, pool_address, 200 * ONE_APT, 0, 0); - - // unlock some stake from delegator 1 - unlock(delegator1, pool_address, 50 * ONE_APT); - assert_delegation(delegator1_address, pool_address, 5000000000, 0, 4999999999); - - // move to lockup cycle 1 - timestamp::fast_forward_seconds(LOCKUP_CYCLE_SECONDS); - end_aptos_epoch(); - - // delegator 1 pending_inactive stake has been inactivated - assert_delegation(delegator1_address, pool_address, 5050000000, 5049999998, 0); - assert_delegation(delegator2_address, pool_address, 202 * ONE_APT, 0, 0); - - synchronize_delegation_pool(pool_address); - assert!(total_coins_inactive(pool_address) == 5049999998, 0); - - // unlock some stake from delegator 2 - unlock(delegator2, pool_address, 50 * ONE_APT); - assert_delegation(delegator2_address, pool_address, 15200000001, 0, 4999999999); - - // withdraw some of inactive stake of delegator 1 - withdraw(delegator1, pool_address, 2049999998); - assert_delegation(delegator1_address, pool_address, 5050000000, 3000000001, 0); - assert!(total_coins_inactive(pool_address) == 3000000001, 0); - - // move to lockup cycle 2 - let (_, inactive, _, pending_inactive) = stake::get_stake(pool_address); - timestamp::fast_forward_seconds(LOCKUP_CYCLE_SECONDS); - end_aptos_epoch(); - - // delegator 2 pending_inactive stake has been inactivated - assert_delegation(delegator1_address, pool_address, 5100500000, 3000000001, 0); - assert_delegation(delegator2_address, pool_address, 15352000001, 5049999998, 0); - - // total_coins_inactive remains unchanged in the absence of user operations - assert!(total_coins_inactive(pool_address) == inactive, 0); - synchronize_delegation_pool(pool_address); - // total_coins_inactive == previous inactive stake + previous pending_inactive stake and its rewards - assert!(total_coins_inactive(pool_address) == inactive + pending_inactive + pending_inactive / 100, 0); - - // withdraw some of inactive stake of delegator 2 - let total_coins_inactive = total_coins_inactive(pool_address); - withdraw(delegator2, pool_address, 3049999998); - assert!(total_coins_inactive(pool_address) == total_coins_inactive - 3049999997, 0); - - // unlock some stake from delegator `validator` - unlock(validator, pool_address, 50 * ONE_APT); - - // create dummy validator to ensure the existing validator can leave the set - initialize_test_validator(delegator1, 100 * ONE_APT, true, true); - // inactivate validator - stake::leave_validator_set(validator, pool_address); - end_aptos_epoch(); - - // move to lockup cycle 3 - (_, inactive, _, pending_inactive) = stake::get_stake(pool_address); - timestamp::fast_forward_seconds(LOCKUP_CYCLE_SECONDS); - end_aptos_epoch(); - - // pending_inactive stake has not been inactivated as validator is inactive - let (_, inactive_now, _, pending_inactive_now) = stake::get_stake(pool_address); - assert!(inactive_now == inactive, inactive_now); - assert!(pending_inactive_now == pending_inactive, pending_inactive_now); - - // total_coins_inactive remains unchanged in the absence of a new OLC - synchronize_delegation_pool(pool_address); - assert!(total_coins_inactive(pool_address) == inactive, 0); - - // withdraw entire pending_inactive stake - withdraw(validator, pool_address, MAX_U64); - assert!(total_coins_inactive(pool_address) == inactive, 0); - (_, _, _, pending_inactive) = stake::get_stake(pool_address); - assert!(pending_inactive == 0, pending_inactive); - - // withdraw entire inactive stake - withdraw(delegator1, pool_address, MAX_U64); - withdraw(delegator2, pool_address, MAX_U64); - assert!(total_coins_inactive(pool_address) == 0, 0); - (_, inactive, _, _) = stake::get_stake(pool_address); - assert!(inactive == 0, inactive); - } - - #[test(aptos_framework = @aptos_framework, validator = @0x123)] - public entry fun test_reactivate_stake_single( - aptos_framework: &signer, - validator: &signer, - ) acquires DelegationPoolOwnership, DelegationPool, GovernanceRecords, BeneficiaryForOperator, NextCommissionPercentage, DelegationPoolAllowlisting { - initialize_for_test(aptos_framework); - initialize_test_validator(validator, 200 * ONE_APT, true, true); - - let validator_address = signer::address_of(validator); - let pool_address = get_owned_pool_address(validator_address); - - // unlock some stake from the active one - unlock(validator, pool_address, 100 * ONE_APT); - assert_delegation(validator_address, pool_address, 100 * ONE_APT, 0, 100 * ONE_APT); - stake::assert_stake_pool(pool_address, 100 * ONE_APT, 0, 0, 100 * ONE_APT); - assert_pending_withdrawal(validator_address, pool_address, true, 0, false, 100 * ONE_APT); - - // add some stake to pending_active state - stake::mint(validator, 150 * ONE_APT); - add_stake(validator, pool_address, 150 * ONE_APT); - - let fee = get_add_stake_fee(pool_address, 150 * ONE_APT); - assert_delegation(validator_address, pool_address, 250 * ONE_APT - fee, 0, 100 * ONE_APT); - stake::assert_stake_pool(pool_address, 100 * ONE_APT, 0, 150 * ONE_APT, 100 * ONE_APT); - - // can reactivate only pending_inactive stake - reactivate_stake(validator, pool_address, 150 * ONE_APT); - - assert_delegation(validator_address, pool_address, 350 * ONE_APT - fee, 0, 0); - stake::assert_stake_pool(pool_address, 200 * ONE_APT, 0, 150 * ONE_APT, 0); - assert_pending_withdrawal(validator_address, pool_address, false, 0, false, 0); - - end_aptos_epoch(); - // 20000000000 active stake * 1.01 + 15000000000 pending_active stake - assert_delegation(validator_address, pool_address, 35200000000, 0, 0); - - // unlock stake added at previous epoch (expect some imprecision when moving shares) - unlock(validator, pool_address, 150 * ONE_APT); - assert_delegation(validator_address, pool_address, 20200000001, 0, 14999999999); - stake::assert_stake_pool(pool_address, 20200000001, 0, 0, 14999999999); - - // inactivate pending_inactive stake - timestamp::fast_forward_seconds(LOCKUP_CYCLE_SECONDS); - end_aptos_epoch(); - - // 20200000001 active stake * 1.01 + 14999999999 pending_inactive stake * 1.01 - assert_delegation(validator_address, pool_address, 20402000001, 15149999998, 0); - assert_pending_withdrawal(validator_address, pool_address, true, 0, true, 15149999998); - - // cannot reactivate inactive stake - reactivate_stake(validator, pool_address, 15149999998); - assert_delegation(validator_address, pool_address, 20402000001, 15149999998, 0); - - // unlock stake in the new lockup cycle (the pending withdrawal is executed) - unlock(validator, pool_address, 100 * ONE_APT); - assert!(coin::balance(validator_address) == 15149999998, 0); - assert_delegation(validator_address, pool_address, 10402000002, 0, 9999999999); - assert_pending_withdrawal(validator_address, pool_address, true, 1, false, 9999999999); - - // reactivate the new pending withdrawal almost entirely - reactivate_stake(validator, pool_address, 8999999999); - assert_pending_withdrawal(validator_address, pool_address, true, 1, false, 1000000000); - // reactivate remaining stake of the new pending withdrawal - reactivate_stake(validator, pool_address, 1000000000); - assert_pending_withdrawal(validator_address, pool_address, false, 0, false, 0); - } - - #[test(aptos_framework = @aptos_framework, validator = @0x123, delegator = @0x010)] - public entry fun test_withdraw_many( - aptos_framework: &signer, - validator: &signer, - delegator: &signer, - ) acquires DelegationPoolOwnership, DelegationPool, GovernanceRecords, BeneficiaryForOperator, NextCommissionPercentage, DelegationPoolAllowlisting { - initialize_for_test(aptos_framework); - initialize_test_validator(validator, 1000 * ONE_APT, true, true); - - let validator_address = signer::address_of(validator); - let pool_address = get_owned_pool_address(validator_address); - - let delegator_address = signer::address_of(delegator); - account::create_account_for_test(delegator_address); - - stake::mint(delegator, 200 * ONE_APT); - add_stake(delegator, pool_address, 200 * ONE_APT); - - unlock(validator, pool_address, 100 * ONE_APT); - assert_pending_withdrawal(validator_address, pool_address, true, 0, false, 100 * ONE_APT); - - timestamp::fast_forward_seconds(LOCKUP_CYCLE_SECONDS); - end_aptos_epoch(); - - assert_delegation(delegator_address, pool_address, 200 * ONE_APT, 0, 0); - assert_delegation(validator_address, pool_address, 90899999999, 10100000000, 0); - assert_pending_withdrawal(validator_address, pool_address, true, 0, true, 10100000000); - assert_inactive_shares_pool(pool_address, 0, true, 100 * ONE_APT); - - // check cannot withdraw inactive stake unlocked by others - withdraw(delegator, pool_address, MAX_U64); - assert_delegation(delegator_address, pool_address, 200 * ONE_APT, 0, 0); - assert_delegation(validator_address, pool_address, 90899999999, 10100000000, 0); - - unlock(delegator, pool_address, 100 * ONE_APT); - assert_delegation(delegator_address, pool_address, 10000000000, 0, 9999999999); - assert_delegation(validator_address, pool_address, 90900000000, 10100000000, 0); - assert_pending_withdrawal(delegator_address, pool_address, true, 1, false, 9999999999); - - // check cannot withdraw inactive stake unlocked by others even if owning pending_inactive - withdraw(delegator, pool_address, MAX_U64); - assert_delegation(delegator_address, pool_address, 10000000000, 0, 9999999999); - assert_delegation(validator_address, pool_address, 90900000000, 10100000000, 0); - - // withdraw entire owned inactive stake - let balance = coin::balance(validator_address); - withdraw(validator, pool_address, MAX_U64); - assert!(coin::balance(validator_address) == balance + 10100000000, 0); - assert_pending_withdrawal(validator_address, pool_address, false, 0, false, 0); - assert_inactive_shares_pool(pool_address, 0, false, 0); - - timestamp::fast_forward_seconds(LOCKUP_CYCLE_SECONDS); - end_aptos_epoch(); - - assert_delegation(delegator_address, pool_address, 10100000000, 10099999998, 0); - assert_pending_withdrawal(delegator_address, pool_address, true, 1, true, 10099999998); - assert_inactive_shares_pool(pool_address, 1, true, 9999999999); - - // use too small of an unlock amount to actually transfer shares to the pending_inactive pool - // check that no leftovers have been produced on the stake or delegation pools - stake::assert_stake_pool(pool_address, 101909000001, 10099999998, 0, 0); - unlock_with_min_stake_disabled(delegator, pool_address, 1); - stake::assert_stake_pool(pool_address, 101909000001, 10099999998, 0, 0); - assert_delegation(delegator_address, pool_address, 10100000000, 10099999998, 0); - assert_pending_withdrawal(delegator_address, pool_address, true, 1, true, 10099999998); - - // implicitly execute the pending withdrawal by unlocking min stake to buy 1 share - unlock_with_min_stake_disabled(delegator, pool_address, 2); - stake::assert_stake_pool(pool_address, 101909000000, 0, 0, 1); - assert_delegation(delegator_address, pool_address, 10099999998, 0, 1); - // old pending withdrawal has been replaced - assert_pending_withdrawal(delegator_address, pool_address, true, 2, false, 1); - assert_inactive_shares_pool(pool_address, 1, false, 0); - assert_inactive_shares_pool(pool_address, 2, true, 1); - } - - #[test(aptos_framework = @aptos_framework, validator = @0x123, delegator = @0x010)] - public entry fun test_inactivate_no_excess_stake( - aptos_framework: &signer, - validator: &signer, - delegator: &signer, - ) acquires DelegationPoolOwnership, DelegationPool, GovernanceRecords, BeneficiaryForOperator, NextCommissionPercentage, DelegationPoolAllowlisting { - initialize_for_test(aptos_framework); - initialize_test_validator(validator, 1200 * ONE_APT, true, true); - - let validator_address = signer::address_of(validator); - let pool_address = get_owned_pool_address(validator_address); - - let delegator_address = signer::address_of(delegator); - account::create_account_for_test(delegator_address); - - stake::mint(delegator, 200 * ONE_APT); - add_stake(delegator, pool_address, 200 * ONE_APT); - - // create inactive and pending_inactive stakes on the stake pool - unlock(validator, pool_address, 200 * ONE_APT); - - timestamp::fast_forward_seconds(LOCKUP_CYCLE_SECONDS); - end_aptos_epoch(); - - unlock(delegator, pool_address, 100 * ONE_APT); - - // check no excess pending_inactive is inactivated in the special case - // the validator had gone inactive before its lockup expired - - let observed_lockup_cycle = observed_lockup_cycle(pool_address); - - // create dummy validator to ensure the existing validator can leave the set - initialize_test_validator(delegator, 100 * ONE_APT, true, true); - // inactivate validator - stake::leave_validator_set(validator, pool_address); - end_aptos_epoch(); - assert!(stake::get_validator_state(pool_address) == VALIDATOR_STATUS_INACTIVE, 0); - - // expire lockup afterwards - timestamp::fast_forward_seconds(LOCKUP_CYCLE_SECONDS); - end_aptos_epoch(); - - synchronize_delegation_pool(pool_address); - // no new inactive stake detected => OLC does not advance - assert!(observed_lockup_cycle(pool_address) == observed_lockup_cycle, 0); - - // pending_inactive stake has not been inactivated - stake::assert_stake_pool(pool_address, 113231100001, 20200000000, 0, 10200999997); - assert_delegation(delegator_address, pool_address, 10201000000, 0, 10200999997); - assert_delegation(validator_address, pool_address, 103030100000, 20200000000, 0); - - // withdraw some inactive stake (remaining pending_inactive is not inactivated) - withdraw(validator, pool_address, 200000000); - stake::assert_stake_pool(pool_address, 113231100001, 20000000001, 0, 10200999997); - assert_delegation(delegator_address, pool_address, 10201000000, 0, 10200999997); - assert_delegation(validator_address, pool_address, 103030100000, 20000000001, 0); - - // withdraw some pending_inactive stake (remaining pending_inactive is not inactivated) - withdraw(delegator, pool_address, 200999997); - stake::assert_stake_pool(pool_address, 113231100001, 20000000001, 0, 10000000001); - assert_delegation(delegator_address, pool_address, 10201000000, 0, 10000000001); - assert_delegation(validator_address, pool_address, 103030100000, 20000000001, 0); - - // no new inactive stake detected => OLC does not advance - assert!(observed_lockup_cycle(pool_address) == observed_lockup_cycle, 0); - - unlock(delegator, pool_address, 10201000000); - withdraw(delegator, pool_address, 10201000000); - assert!(observed_lockup_cycle(pool_address) == observed_lockup_cycle, 0); - - assert_delegation(delegator_address, pool_address, 0, 0, 10000000002); - assert_delegation(validator_address, pool_address, 103030100001, 20000000001, 0); - assert_pending_withdrawal(validator_address, pool_address, true, 0, true, 20000000001); - assert_pending_withdrawal(delegator_address, pool_address, true, 1, false, 10000000002); - stake::assert_stake_pool(pool_address, 103030100001, 20000000001, 0, 10000000002); - - // reactivate validator - stake::join_validator_set(validator, pool_address); - assert!(stake::get_validator_state(pool_address) == VALIDATOR_STATUS_PENDING_ACTIVE, 0); - end_aptos_epoch(); - - assert!(stake::get_validator_state(pool_address) == VALIDATOR_STATUS_ACTIVE, 0); - // no rewards have been produced yet and no stake inactivated as lockup has been refreshed - stake::assert_stake_pool(pool_address, 103030100001, 20000000001, 0, 10000000002); - - synchronize_delegation_pool(pool_address); - assert_pending_withdrawal(validator_address, pool_address, true, 0, true, 20000000001); - assert_pending_withdrawal(delegator_address, pool_address, true, 1, false, 10000000002); - assert!(observed_lockup_cycle(pool_address) == observed_lockup_cycle, 0); - - // cannot withdraw pending_inactive stake anymore - withdraw(delegator, pool_address, 10000000002); - assert_pending_withdrawal(delegator_address, pool_address, true, 1, false, 10000000002); - - // earning rewards is resumed from this epoch on - end_aptos_epoch(); - stake::assert_stake_pool(pool_address, 104060401001, 20000000001, 0, 10100000002); - - // new pending_inactive stake earns rewards but so does the old one - unlock(validator, pool_address, 104060401001); - assert_pending_withdrawal(validator_address, pool_address, true, 1, false, 104060401000); - assert_pending_withdrawal(delegator_address, pool_address, true, 1, false, 10100000002); - end_aptos_epoch(); - assert_pending_withdrawal(validator_address, pool_address, true, 1, false, 105101005010); - assert_pending_withdrawal(delegator_address, pool_address, true, 1, false, 10201000002); - } - - #[test(aptos_framework = @aptos_framework, validator = @0x123)] - public entry fun test_active_stake_rewards( - aptos_framework: &signer, - validator: &signer, - ) acquires DelegationPoolOwnership, DelegationPool, GovernanceRecords, BeneficiaryForOperator, NextCommissionPercentage, DelegationPoolAllowlisting { - initialize_for_test(aptos_framework); - initialize_test_validator(validator, 1000 * ONE_APT, true, true); - - let validator_address = signer::address_of(validator); - let pool_address = get_owned_pool_address(validator_address); - - end_aptos_epoch(); - // 100000000000 active stake * 1.01 - assert_delegation(validator_address, pool_address, 1010 * ONE_APT, 0, 0); - - // add stake in pending_active state - stake::mint(validator, 200 * ONE_APT); - add_stake(validator, pool_address, 200 * ONE_APT); - - let fee = get_add_stake_fee(pool_address, 200 * ONE_APT); - assert_delegation(validator_address, pool_address, 1210 * ONE_APT - fee, 0, 0); - - end_aptos_epoch(); - // 101000000000 active stake * 1.01 + 20000000000 pending_active stake with no rewards - assert_delegation(validator_address, pool_address, 122010000000, 0, 0); - - end_aptos_epoch(); - // 122010000000 active stake * 1.01 - assert_delegation(validator_address, pool_address, 123230100000, 0, 0); - - // 123230100000 active stake * 1.01 - end_aptos_epoch(); - // 124462401000 active stake * 1.01 - end_aptos_epoch(); - // 125707025010 active stake * 1.01 - end_aptos_epoch(); - // 126964095260 active stake * 1.01 - end_aptos_epoch(); - // 128233736212 active stake * 1.01 - end_aptos_epoch(); - assert_delegation(validator_address, pool_address, 129516073574, 0, 0); - - // unlock 200 coins from delegator `validator` - unlock(validator, pool_address, 200 * ONE_APT); - assert_delegation(validator_address, pool_address, 109516073575, 0, 19999999999); - - // end this lockup cycle - timestamp::fast_forward_seconds(LOCKUP_CYCLE_SECONDS); - end_aptos_epoch(); - // 109516073575 active stake * 1.01 + 19999999999 pending_inactive stake * 1.01 - assert_delegation(validator_address, pool_address, 110611234310, 20199999998, 0); - - end_aptos_epoch(); - // 110611234310 active stake * 1.01 + 20199999998 inactive stake - assert_delegation(validator_address, pool_address, 111717346653, 20199999998, 0); - - // add stake in pending_active state - stake::mint(validator, 1000 * ONE_APT); - add_stake(validator, pool_address, 1000 * ONE_APT); - - fee = get_add_stake_fee(pool_address, 1000 * ONE_APT); - assert_delegation(validator_address, pool_address, 211717346653 - fee, 20199999998, 0); - - end_aptos_epoch(); - // 111717346653 active stake * 1.01 + 100000000000 pending_active stake + 20199999998 inactive stake - assert_delegation(validator_address, pool_address, 212834520119, 20199999998, 0); - - end_aptos_epoch(); - // 212834520119 active stake * 1.01 + 20199999998 inactive stake - assert_delegation(validator_address, pool_address, 214962865320, 20199999998, 0); - } - - #[test(aptos_framework = @aptos_framework, validator = @0x123, delegator = @0x010)] - public entry fun test_active_stake_rewards_multiple( - aptos_framework: &signer, - validator: &signer, - delegator: &signer, - ) acquires DelegationPoolOwnership, DelegationPool, GovernanceRecords, BeneficiaryForOperator, NextCommissionPercentage, DelegationPoolAllowlisting { - initialize_for_test(aptos_framework); - initialize_test_validator(validator, 200 * ONE_APT, true, true); - - let validator_address = signer::address_of(validator); - let pool_address = get_owned_pool_address(validator_address); - - let delegator_address = signer::address_of(delegator); - account::create_account_for_test(delegator_address); - - // add stake in pending_active state - stake::mint(delegator, 300 * ONE_APT); - add_stake(delegator, pool_address, 300 * ONE_APT); - - let fee = get_add_stake_fee(pool_address, 300 * ONE_APT); - assert_delegation(delegator_address, pool_address, 300 * ONE_APT - fee, 0, 0); - assert_delegation(validator_address, pool_address, 200 * ONE_APT, 0, 0); - stake::assert_stake_pool(pool_address, 200 * ONE_APT, 0, 300 * ONE_APT, 0); - - end_aptos_epoch(); - // `delegator` got its `add_stake` fee back and `validator` its active stake rewards - assert_delegation(delegator_address, pool_address, 300 * ONE_APT, 0, 0); - assert_delegation(validator_address, pool_address, 20199999999, 0, 0); - stake::assert_stake_pool(pool_address, 502 * ONE_APT, 0, 0, 0); - - // delegators earn their own rewards from now on - end_aptos_epoch(); - assert_delegation(delegator_address, pool_address, 303 * ONE_APT, 0, 0); - assert_delegation(validator_address, pool_address, 20401999999, 0, 0); - stake::assert_stake_pool(pool_address, 50702000000, 0, 0, 0); - - end_aptos_epoch(); - assert_delegation(delegator_address, pool_address, 30603000000, 0, 0); - assert_delegation(validator_address, pool_address, 20606019999, 0, 0); - stake::assert_stake_pool(pool_address, 51209020000, 0, 0, 0); - - end_aptos_epoch(); - assert_delegation(delegator_address, pool_address, 30909030000, 0, 0); - assert_delegation(validator_address, pool_address, 20812080199, 0, 0); - stake::assert_stake_pool(pool_address, 51721110200, 0, 0, 0); - - // add more stake in pending_active state than currently active - stake::mint(delegator, 1000 * ONE_APT); - add_stake(delegator, pool_address, 1000 * ONE_APT); - - fee = get_add_stake_fee(pool_address, 1000 * ONE_APT); - assert_delegation(delegator_address, pool_address, 130909030000 - fee, 0, 0); - assert_delegation(validator_address, pool_address, 20812080199, 0, 0); - - end_aptos_epoch(); - // `delegator` got its `add_stake` fee back and `validator` its active stake rewards - assert_delegation(delegator_address, pool_address, 131218120300, 0, 0); - assert_delegation(validator_address, pool_address, 21020201001, 0, 0); - stake::assert_stake_pool(pool_address, 152238321302, 0, 0, 0); - } - - #[test(aptos_framework = @aptos_framework, validator = @0x123)] - public entry fun test_pending_inactive_stake_rewards( - aptos_framework: &signer, - validator: &signer, - ) acquires DelegationPoolOwnership, DelegationPool, GovernanceRecords, BeneficiaryForOperator, NextCommissionPercentage, DelegationPoolAllowlisting { - initialize_for_test(aptos_framework); - initialize_test_validator(validator, 1000 * ONE_APT, true, true); - - let validator_address = signer::address_of(validator); - let pool_address = get_owned_pool_address(validator_address); - - end_aptos_epoch(); - assert_delegation(validator_address, pool_address, 1010 * ONE_APT, 0, 0); - - // unlock 200 coins from delegator `validator` - unlock(validator, pool_address, 200 * ONE_APT); - assert_delegation(validator_address, pool_address, 81000000001, 0, 19999999999); - - end_aptos_epoch(); // 81000000001 active stake * 1.01 + 19999999999 pending_inactive stake * 1.01 - end_aptos_epoch(); // 81810000001 active stake * 1.01 + 20199999998 pending_inactive stake * 1.01 - - timestamp::fast_forward_seconds(LOCKUP_CYCLE_SECONDS); - end_aptos_epoch(); // 82628100001 active stake * 1.01 + 20401999997 pending_inactive stake * 1.01 - end_aptos_epoch(); // 83454381001 active stake * 1.01 + 20606019996 pending_inactive stake(now inactive) - assert_delegation(validator_address, pool_address, 84288924811, 20606019996, 0); - - // unlock 200 coins from delegator `validator` which implicitly executes its pending withdrawal - unlock(validator, pool_address, 200 * ONE_APT); - assert!(coin::balance(validator_address) == 20606019996, 0); - assert_delegation(validator_address, pool_address, 64288924812, 0, 19999999999); - - // lockup cycle is not ended, pending_inactive stake is still earning - end_aptos_epoch(); // 64288924812 active stake * 1.01 + 19999999999 pending_inactive stake * 1.01 - end_aptos_epoch(); // 64931814060 active stake * 1.01 + 20199999998 pending_inactive stake * 1.01 - end_aptos_epoch(); // 65581132200 active stake * 1.01 + 20401999997 pending_inactive stake * 1.01 - end_aptos_epoch(); // 66236943522 active stake * 1.01 + 20606019996 pending_inactive stake * 1.01 - assert_delegation(validator_address, pool_address, 66899312957, 0, 20812080195); - - timestamp::fast_forward_seconds(LOCKUP_CYCLE_SECONDS); - end_aptos_epoch(); // 66899312957 active stake * 1.01 + 20812080195 pending_inactive stake * 1.01 - end_aptos_epoch(); // 67568306086 active stake * 1.01 + 21020200996 pending_inactive stake(now inactive) - end_aptos_epoch(); // 68243989147 active stake * 1.01 + 21020200996 inactive stake - assert_delegation(validator_address, pool_address, 68926429037, 21020200996, 0); - } - - #[test(aptos_framework = @aptos_framework, validator = @0x123, delegator1 = @0x010, delegator2 = @0x020)] - public entry fun test_out_of_order_redeem( - aptos_framework: &signer, - validator: &signer, - delegator1: &signer, - delegator2: &signer, - ) acquires DelegationPoolOwnership, DelegationPool, GovernanceRecords, BeneficiaryForOperator, NextCommissionPercentage, DelegationPoolAllowlisting { - initialize_for_test(aptos_framework); - initialize_test_validator(validator, 1000 * ONE_APT, true, true); - - let validator_address = signer::address_of(validator); - let pool_address = get_owned_pool_address(validator_address); - - let delegator1_address = signer::address_of(delegator1); - account::create_account_for_test(delegator1_address); - - let delegator2_address = signer::address_of(delegator2); - account::create_account_for_test(delegator2_address); - - stake::mint(delegator1, 300 * ONE_APT); - add_stake(delegator1, pool_address, 300 * ONE_APT); - - stake::mint(delegator2, 300 * ONE_APT); - add_stake(delegator2, pool_address, 300 * ONE_APT); - - end_aptos_epoch(); - - // create the pending withdrawal of delegator 1 in lockup cycle 0 - unlock(delegator1, pool_address, 150 * ONE_APT); - assert_pending_withdrawal(delegator1_address, pool_address, true, 0, false, 14999999999); - - // move to lockup cycle 1 - timestamp::fast_forward_seconds(LOCKUP_CYCLE_SECONDS); - end_aptos_epoch(); - - // create the pending withdrawal of delegator 2 in lockup cycle 1 - unlock(delegator2, pool_address, 150 * ONE_APT); - assert_pending_withdrawal(delegator2_address, pool_address, true, 1, false, 14999999999); - // 14999999999 pending_inactive stake * 1.01 - assert_pending_withdrawal(delegator1_address, pool_address, true, 0, true, 15149999998); - - // move to lockup cycle 2 - timestamp::fast_forward_seconds(LOCKUP_CYCLE_SECONDS); - end_aptos_epoch(); - - assert_pending_withdrawal(delegator2_address, pool_address, true, 1, true, 15149999998); - assert_pending_withdrawal(delegator1_address, pool_address, true, 0, true, 15149999998); - - // both delegators who unlocked at different lockup cycles should be able to withdraw their stakes - withdraw(delegator1, pool_address, 15149999998); - withdraw(delegator2, pool_address, 5149999998); - - assert_pending_withdrawal(delegator2_address, pool_address, true, 1, true, 10000000001); - assert_pending_withdrawal(delegator1_address, pool_address, false, 0, false, 0); - assert!(coin::balance(delegator1_address) == 15149999998, 0); - assert!(coin::balance(delegator2_address) == 5149999997, 0); - - // recreate the pending withdrawal of delegator 1 in lockup cycle 2 - unlock(delegator1, pool_address, 100 * ONE_APT); - - // move to lockup cycle 3 - timestamp::fast_forward_seconds(LOCKUP_CYCLE_SECONDS); - end_aptos_epoch(); - - assert_pending_withdrawal(delegator2_address, pool_address, true, 1, true, 10000000001); - // 9999999999 pending_inactive stake * 1.01 - assert_pending_withdrawal(delegator1_address, pool_address, true, 2, true, 10099999998); - - // withdraw inactive stake of delegator 2 left from lockup cycle 1 in cycle 3 - withdraw(delegator2, pool_address, 10000000001); - assert!(coin::balance(delegator2_address) == 15149999998, 0); - assert_pending_withdrawal(delegator2_address, pool_address, false, 0, false, 0); - - // withdraw inactive stake of delegator 1 left from previous lockup cycle - withdraw(delegator1, pool_address, 10099999998); - assert!(coin::balance(delegator1_address) == 15149999998 + 10099999998, 0); - assert_pending_withdrawal(delegator1_address, pool_address, false, 0, false, 0); - } - - #[test(aptos_framework = @aptos_framework, validator = @0x123, delegator1 = @0x010, delegator2 = @0x020)] - public entry fun test_operator_fee( - aptos_framework: &signer, - validator: &signer, - delegator1: &signer, - delegator2: &signer, - ) acquires DelegationPoolOwnership, DelegationPool, GovernanceRecords, BeneficiaryForOperator, NextCommissionPercentage, DelegationPoolAllowlisting { - initialize_for_test(aptos_framework); - - let validator_address = signer::address_of(validator); - account::create_account_for_test(validator_address); - - // create delegation pool of commission fee 12.65% - initialize_delegation_pool(validator, 1265, vector::empty()); - let pool_address = get_owned_pool_address(validator_address); - assert!(stake::get_operator(pool_address) == validator_address, 0); - - let delegator1_address = signer::address_of(delegator1); - account::create_account_for_test(delegator1_address); - - let delegator2_address = signer::address_of(delegator2); - account::create_account_for_test(delegator2_address); - - stake::mint(delegator1, 100 * ONE_APT); - add_stake(delegator1, pool_address, 100 * ONE_APT); - - stake::mint(delegator2, 200 * ONE_APT); - add_stake(delegator2, pool_address, 200 * ONE_APT); - - // validator is inactive and added stake is instantly `active` - stake::assert_stake_pool(pool_address, 300 * ONE_APT, 0, 0, 0); - - // validator does not produce rewards yet - end_aptos_epoch(); - stake::assert_stake_pool(pool_address, 300 * ONE_APT, 0, 0, 0); - - // therefore, there are no operator commission rewards yet - assert_delegation(validator_address, pool_address, 0, 0, 0); - - // activate validator - stake::rotate_consensus_key(validator, pool_address, CONSENSUS_KEY_1, CONSENSUS_POP_1); - stake::join_validator_set(validator, pool_address); - end_aptos_epoch(); - - // produce active rewards - end_aptos_epoch(); - stake::assert_stake_pool(pool_address, 30300000000, 0, 0, 0); - - // 300000000 active rewards * 0.1265 - assert_delegation(validator_address, pool_address, 37950000, 0, 0); - // 10000000000 active stake * (1 + 1% reward-rate * 0.8735) - assert_delegation(delegator1_address, pool_address, 10087350000, 0, 0); - // 20000000000 active stake * 1.008735 - assert_delegation(delegator2_address, pool_address, 20174700000, 0, 0); - - end_aptos_epoch(); - stake::assert_stake_pool(pool_address, 30603000000, 0, 0, 0); - - // 603000000 active rewards * 0.1265 instead of - // 303000000 active rewards * 0.1265 + 37950000 active stake * 1.008735 - // because operator commission rewards are not automatically restaked compared to already owned stake - assert_delegation(validator_address, pool_address, 76279500, 0, 0); - // 10087350000 active stake * 1.008735 + some of the rewards of previous commission if restaked - assert_delegation(delegator1_address, pool_address, 10175573500, 0, 0); - // 20174700000 active stake * 1.008735 + some of the rewards of previous commission if restaked - assert_delegation(delegator2_address, pool_address, 20351147000, 0, 0); - - // restake operator commission rewards - synchronize_delegation_pool(pool_address); - - end_aptos_epoch(); - stake::assert_stake_pool(pool_address, 30909030000, 0, 0, 0); - - // 306030000 active rewards * 0.1265 + 76279500 active stake * 1.008735 - assert_delegation(validator_address, pool_address, 115658596, 0, 0); - // 10175573500 active stake * 1.008735 - assert_delegation(delegator1_address, pool_address, 10264457134, 0, 0); - // 20351147000 active stake * 1.008735 - assert_delegation(delegator2_address, pool_address, 20528914269, 0, 0); - - // check operator is rewarded by pending_inactive stake too - unlock(delegator2, pool_address, 100 * ONE_APT); - stake::assert_stake_pool(pool_address, 20909030001, 0, 0, 9999999999); - - end_aptos_epoch(); - stake::assert_stake_pool(pool_address, 21118120301, 0, 0, 10099999998); - - assert_pending_withdrawal(validator_address, pool_address, false, 0, false, 0); - // distribute operator pending_inactive commission rewards - synchronize_delegation_pool(pool_address); - // 99999999 pending_inactive rewards * 0.1265 - assert_pending_withdrawal(validator_address, pool_address, true, 0, false, 12649998); - - // 209090300 active rewards * 0.1265 + 115658596 active stake * 1.008735 - // 99999999 pending_inactive rewards * 0.1265 - assert_delegation(validator_address, pool_address, 143118796, 0, 12649998); - // 10264457134 active stake * 1.008735 - assert_delegation(delegator1_address, pool_address, 10354117168, 0, 0); - // 10528914270 active stake * 1.008735 - // 9999999999 pending_inactive stake * 1.008735 - assert_delegation(delegator2_address, pool_address, 10620884336, 0, 10087349999); - - timestamp::fast_forward_seconds(LOCKUP_CYCLE_SECONDS); - end_aptos_epoch(); - stake::assert_stake_pool(pool_address, 21329301504, 10200999997, 0, 0); - - // operator pending_inactive rewards on previous epoch have been inactivated - // 211181203 active rewards * 0.1265 + 143118796 active stake * 1.008735 - // 100999999 pending_inactive rewards * 0.1265 + 12649998 pending_inactive stake * 1.008735 - assert_delegation(validator_address, pool_address, 171083360, 25536995, 0); - // distribute operator pending_inactive commission rewards - synchronize_delegation_pool(pool_address); - assert_pending_withdrawal(validator_address, pool_address, true, 0, true, 25536995); - - // check operator is not rewarded by `add_stake` fees - stake::mint(delegator1, 100 * ONE_APT); - assert!(get_add_stake_fee(pool_address, 100 * ONE_APT) > 0, 0); - add_stake(delegator1, pool_address, 100 * ONE_APT); - - end_aptos_epoch(); - stake::assert_stake_pool(pool_address, 31542594519, 10200999997, 0, 0); - - // 213293015 active rewards * 0.1265 + 171083360 active stake * 1.008735 - assert_delegation(validator_address, pool_address, 199559340, 25536995, 0); - - // unlock some more stake to produce pending_inactive commission - // 10620884336 active stake * (1.008735 ^ 2 epochs) - // 10087349999 pending_inactive stake * 1.008735 - assert_delegation(delegator2_address, pool_address, 10807241561, 10175463001, 0); - unlock(delegator2, pool_address, 100 * ONE_APT); - // 10807241561 - 100 APT < `MIN_COINS_ON_SHARES_POOL` thus active stake is entirely unlocked - assert_delegation(delegator2_address, pool_address, 0, 0, 10807241561); - end_aptos_epoch(); - - // in-flight pending_inactive commission can coexist with previous inactive commission - assert_delegation(validator_address, pool_address, 227532711, 25536996, 13671160); - assert_pending_withdrawal(validator_address, pool_address, true, 0, true, 25536996); - - // distribute in-flight pending_inactive commission, implicitly executing the inactive withdrawal of operator - coin::register(validator); - synchronize_delegation_pool(pool_address); - assert!(coin::balance(validator_address) == 25536996, 0); - - // in-flight commission has been synced, implicitly used to buy shares for operator - // expect operator stake to be slightly less than previously reported by `Self::get_stake` - assert_delegation(validator_address, pool_address, 227532711, 0, 13671159); - assert_pending_withdrawal(validator_address, pool_address, true, 1, false, 13671159); - } - - #[test(aptos_framework = @aptos_framework, old_operator = @0x123, delegator = @0x010, new_operator = @0x020)] - public entry fun test_change_operator( - aptos_framework: &signer, - old_operator: &signer, - delegator: &signer, - new_operator: &signer, - ) acquires DelegationPoolOwnership, DelegationPool, GovernanceRecords, BeneficiaryForOperator, NextCommissionPercentage, DelegationPoolAllowlisting { - initialize_for_test(aptos_framework); - - let old_operator_address = signer::address_of(old_operator); - account::create_account_for_test(old_operator_address); - - let new_operator_address = signer::address_of(new_operator); - account::create_account_for_test(new_operator_address); - - // create delegation pool of commission fee 12.65% - initialize_delegation_pool(old_operator, 1265, vector::empty()); - let pool_address = get_owned_pool_address(old_operator_address); - assert!(stake::get_operator(pool_address) == old_operator_address, 0); - - let delegator_address = signer::address_of(delegator); - account::create_account_for_test(delegator_address); - - stake::mint(delegator, 200 * ONE_APT); - add_stake(delegator, pool_address, 200 * ONE_APT); - unlock(delegator, pool_address, 100 * ONE_APT); - - // activate validator - stake::rotate_consensus_key(old_operator, pool_address, CONSENSUS_KEY_1, CONSENSUS_POP_1); - stake::join_validator_set(old_operator, pool_address); - end_aptos_epoch(); - - // produce active and pending_inactive rewards - end_aptos_epoch(); - stake::assert_stake_pool(pool_address, 10100000000, 0, 0, 10100000000); - assert_delegation(old_operator_address, pool_address, 12650000, 0, 12650000); - end_aptos_epoch(); - stake::assert_stake_pool(pool_address, 10201000000, 0, 0, 10201000000); - assert_delegation(old_operator_address, pool_address, 25426500, 0, 25426500); - - // change operator - set_operator(old_operator, new_operator_address); - - end_aptos_epoch(); - stake::assert_stake_pool(pool_address, 10303010000, 0, 0, 10303010000); - // 25426500 active stake * 1.008735 and 25426500 pending_inactive stake * 1.008735 - assert_delegation(old_operator_address, pool_address, 25648600, 0, 25648600); - // 102010000 active rewards * 0.1265 and 102010000 pending_inactive rewards * 0.1265 - assert_delegation(new_operator_address, pool_address, 12904265, 0, 12904265); - - // restake `new_operator` commission rewards - synchronize_delegation_pool(pool_address); - - end_aptos_epoch(); - stake::assert_stake_pool(pool_address, 10406040100, 0, 0, 10406040100); - // 25648600 active stake * 1.008735 and 25648600 pending_inactive stake * 1.008735 - assert_delegation(old_operator_address, pool_address, 25872641, 0, 25872641); - // 103030100 active rewards * 0.1265 and 12904265 active stake * 1.008735 - // 103030100 pending_inactive rewards * 0.1265 and 12904265 pending_inactive stake * 1.008735 - assert_delegation(new_operator_address, pool_address, 26050290, 0, 26050290); - } - - #[test( - aptos_framework = @aptos_framework, - operator1 = @0x123, - delegator = @0x010, - beneficiary = @0x020, - operator2 = @0x030 - )] - public entry fun test_set_beneficiary_for_operator( - aptos_framework: &signer, - operator1: &signer, - delegator: &signer, - beneficiary: &signer, - operator2: &signer, - ) acquires DelegationPoolOwnership, DelegationPool, GovernanceRecords, BeneficiaryForOperator, NextCommissionPercentage, DelegationPoolAllowlisting { - initialize_for_test(aptos_framework); - - let operator1_address = signer::address_of(operator1); - aptos_account::create_account(operator1_address); - - let operator2_address = signer::address_of(operator2); - aptos_account::create_account(operator2_address); - - let beneficiary_address = signer::address_of(beneficiary); - aptos_account::create_account(beneficiary_address); - - // create delegation pool of commission fee 12.65% - initialize_delegation_pool(operator1, 1265, vector::empty()); - let pool_address = get_owned_pool_address(operator1_address); - assert!(stake::get_operator(pool_address) == operator1_address, 0); - assert!(beneficiary_for_operator(operator1_address) == operator1_address, 0); - - let delegator_address = signer::address_of(delegator); - account::create_account_for_test(delegator_address); - - stake::mint(delegator, 2000000 * ONE_APT); - add_stake(delegator, pool_address, 2000000 * ONE_APT); - unlock(delegator, pool_address, 1000000 * ONE_APT); - - // activate validator - stake::rotate_consensus_key(operator1, pool_address, CONSENSUS_KEY_1, CONSENSUS_POP_1); - stake::join_validator_set(operator1, pool_address); - end_aptos_epoch(); - - // produce active and pending_inactive rewards - end_aptos_epoch(); - stake::assert_stake_pool(pool_address, 101000000000000, 0, 0, 101000000000000); - assert_delegation(operator1_address, pool_address, 126500000000, 0, 126500000000); - end_aptos_epoch(); - stake::assert_stake_pool(pool_address, 102010000000000, 0, 0, 102010000000000); - assert_delegation(operator1_address, pool_address, 254265000000, 0, 254265000000); - timestamp::fast_forward_seconds(LOCKUP_CYCLE_SECONDS); - end_aptos_epoch(); - - withdraw(operator1, pool_address, ONE_APT); - assert!(coin::balance(operator1_address) == ONE_APT - 1, 0); - - set_beneficiary_for_operator(operator1, beneficiary_address); - assert!(beneficiary_for_operator(operator1_address) == beneficiary_address, 0); - end_aptos_epoch(); - - unlock(beneficiary, pool_address, ONE_APT); - timestamp::fast_forward_seconds(LOCKUP_CYCLE_SECONDS); - end_aptos_epoch(); - - withdraw(beneficiary, pool_address, ONE_APT); - assert!(coin::balance(beneficiary_address) == ONE_APT - 1, 0); - assert!(coin::balance(operator1_address) == ONE_APT - 1, 0); - - // switch operator to operator2. The rewards should go to operator2 not to the beneficiay of operator1. - set_operator(operator1, operator2_address); - end_aptos_epoch(); - unlock(operator2, pool_address, ONE_APT); - timestamp::fast_forward_seconds(LOCKUP_CYCLE_SECONDS); - end_aptos_epoch(); - - withdraw(operator2, pool_address, ONE_APT); - assert!(coin::balance(beneficiary_address) == ONE_APT - 1, 0); - assert!(coin::balance(operator2_address) == ONE_APT - 1, 0); - } - - #[test(aptos_framework = @aptos_framework, operator = @0x123, delegator = @0x010)] - public entry fun test_update_commission_percentage( - aptos_framework: &signer, - operator: &signer, - delegator: &signer, - ) acquires DelegationPoolOwnership, DelegationPool, GovernanceRecords, BeneficiaryForOperator, NextCommissionPercentage, DelegationPoolAllowlisting { - initialize_for_test(aptos_framework); - - let operator_address = signer::address_of(operator); - account::create_account_for_test(operator_address); - - // create delegation pool of commission fee 12.65% - initialize_delegation_pool(operator, 1265, vector::empty()); - let pool_address = get_owned_pool_address(operator_address); - assert!(stake::get_operator(pool_address) == operator_address, 0); - - let delegator_address = signer::address_of(delegator); - account::create_account_for_test(delegator_address); - - stake::mint(delegator, 200 * ONE_APT); - add_stake(delegator, pool_address, 200 * ONE_APT); - unlock(delegator, pool_address, 100 * ONE_APT); - - // activate validator - stake::rotate_consensus_key(operator, pool_address, CONSENSUS_KEY_1, CONSENSUS_POP_1); - stake::join_validator_set(operator, pool_address); - end_aptos_epoch(); - - // produce active and pending_inactive rewards - end_aptos_epoch(); - stake::assert_stake_pool(pool_address, 10100000000, 0, 0, 10100000000); - assert_delegation(operator_address, pool_address, 12650000, 0, 12650000); - end_aptos_epoch(); - stake::assert_stake_pool(pool_address, 10201000000, 0, 0, 10201000000); - assert_delegation(operator_address, pool_address, 25426500, 0, 25426500); - - // change the commission percentage - update_commission_percentage(operator, 2265); - // the new commission percentage does not take effect until the next lockup cycle. - assert!(operator_commission_percentage(pool_address) == 1265, 0); - - // end the lockup cycle - fast_forward_to_unlock(pool_address); - - // Test that the `get_add_stake_fee` correctly uses the new commission percentage, and returns the correct - // fee amount 76756290 in the following case, not 86593604 (calculated with the old commission rate). - assert!(get_add_stake_fee(pool_address, 100 * ONE_APT) == 76756290, 0); - - synchronize_delegation_pool(pool_address); - // the commission percentage is updated to the new one. - assert!(operator_commission_percentage(pool_address) == 2265, 0); - - end_aptos_epoch(); - stake::assert_stake_pool(pool_address, 10406040100, 10303010000, 0, 0); - assert_delegation(operator_address, pool_address, 62187388, 38552865, 0); - - end_aptos_epoch(); - stake::assert_stake_pool(pool_address, 10510100501, 10303010000, 0, 0); - assert_delegation(operator_address, pool_address, 86058258, 38552865, 0); - } - - #[test(aptos_framework = @aptos_framework, operator = @0x123, delegator = @0x010)] - #[expected_failure(abort_code = 196629, location = Self)] - public entry fun test_last_minute_commission_rate_change_failed( - aptos_framework: &signer, - operator: &signer, - delegator: &signer, - ) acquires DelegationPoolOwnership, DelegationPool, GovernanceRecords, BeneficiaryForOperator, NextCommissionPercentage, DelegationPoolAllowlisting { - initialize_for_test(aptos_framework); - - let operator_address = signer::address_of(operator); - account::create_account_for_test(operator_address); - - // create delegation pool of commission fee 12.65% - initialize_delegation_pool(operator, 1265, vector::empty()); - let pool_address = get_owned_pool_address(operator_address); - assert!(stake::get_operator(pool_address) == operator_address, 0); - - let delegator_address = signer::address_of(delegator); - account::create_account_for_test(delegator_address); - - stake::mint(delegator, 200 * ONE_APT); - add_stake(delegator, pool_address, 200 * ONE_APT); - unlock(delegator, pool_address, 100 * ONE_APT); - - // activate validator - stake::rotate_consensus_key(operator, pool_address, CONSENSUS_KEY_1, CONSENSUS_POP_1); - stake::join_validator_set(operator, pool_address); - end_aptos_epoch(); - - // 30 days are remaining in the lockup period. - update_commission_percentage(operator, 2215); - timestamp::fast_forward_seconds(7 * 24 * 60 * 60); - end_aptos_epoch(); - - // 23 days are remaining in the lockup period. - update_commission_percentage(operator, 2225); - timestamp::fast_forward_seconds(7 * 24 * 60 * 60); - end_aptos_epoch(); - - // 16 days are remaining in the lockup period. - update_commission_percentage(operator, 2235); - timestamp::fast_forward_seconds(7 * 24 * 60 * 60); - end_aptos_epoch(); - - // 9 days are remaining in the lockup period. - update_commission_percentage(operator, 2245); - timestamp::fast_forward_seconds(7 * 24 * 60 * 60); - end_aptos_epoch(); - - // 2 days are remaining in the lockup period. So, the following line is expected to fail. - update_commission_percentage(operator, 2255); - } - - #[test(aptos_framework = @aptos_framework, validator = @0x123, delegator1 = @0x010, delegator2 = @0x020)] - public entry fun test_min_stake_is_preserved( - aptos_framework: &signer, - validator: &signer, - delegator1: &signer, - delegator2: &signer, - ) acquires DelegationPoolOwnership, DelegationPool, GovernanceRecords, BeneficiaryForOperator, NextCommissionPercentage, DelegationPoolAllowlisting { - initialize_for_test(aptos_framework); - initialize_test_validator(validator, 100 * ONE_APT, true, false); - - let validator_address = signer::address_of(validator); - let pool_address = get_owned_pool_address(validator_address); - - let delegator1_address = signer::address_of(delegator1); - account::create_account_for_test(delegator1_address); - - let delegator2_address = signer::address_of(delegator2); - account::create_account_for_test(delegator2_address); - - // add stake without fees as validator is not active yet - stake::mint(delegator1, 50 * ONE_APT); - add_stake(delegator1, pool_address, 50 * ONE_APT); - stake::mint(delegator2, 16 * ONE_APT); - add_stake(delegator2, pool_address, 16 * ONE_APT); - - // validator becomes active and share price is 1 - end_aptos_epoch(); - - assert_delegation(delegator1_address, pool_address, 5000000000, 0, 0); - // pending_inactive balance would be under threshold => move MIN_COINS_ON_SHARES_POOL coins - unlock(delegator1, pool_address, MIN_COINS_ON_SHARES_POOL - 1); - assert_delegation(delegator1_address, pool_address, 3999999999, 0, 1000000001); - - // pending_inactive balance is over threshold - reactivate_stake(delegator1, pool_address, 1); - assert_delegation(delegator1_address, pool_address, 4000000000, 0, 1000000000); - - // pending_inactive balance would be under threshold => move entire balance - reactivate_stake(delegator1, pool_address, 1); - assert_delegation(delegator1_address, pool_address, 5000000000, 0, 0); - - // active balance would be under threshold => move entire balance - unlock(delegator1, pool_address, 5000000000 - (MIN_COINS_ON_SHARES_POOL - 1)); - assert_delegation(delegator1_address, pool_address, 0, 0, 5000000000); - - // active balance would be under threshold => move MIN_COINS_ON_SHARES_POOL coins - reactivate_stake(delegator1, pool_address, 1); - assert_delegation(delegator1_address, pool_address, 1000000001, 0, 3999999999); - - // active balance is over threshold - unlock(delegator1, pool_address, 1); - assert_delegation(delegator1_address, pool_address, 1000000000, 0, 4000000000); - - // pending_inactive balance would be under threshold => move entire balance - reactivate_stake(delegator1, pool_address, 4000000000 - (MIN_COINS_ON_SHARES_POOL - 1)); - assert_delegation(delegator1_address, pool_address, 5000000000, 0, 0); - - // active + pending_inactive balance < 2 * MIN_COINS_ON_SHARES_POOL - // stake can live on only one of the shares pools - assert_delegation(delegator2_address, pool_address, 16 * ONE_APT, 0, 0); - unlock(delegator2, pool_address, 1); - assert_delegation(delegator2_address, pool_address, 0, 0, 16 * ONE_APT); - reactivate_stake(delegator2, pool_address, 1); - assert_delegation(delegator2_address, pool_address, 16 * ONE_APT, 0, 0); - - unlock(delegator2, pool_address, ONE_APT); - assert_delegation(delegator2_address, pool_address, 0, 0, 16 * ONE_APT); - reactivate_stake(delegator2, pool_address, 2 * ONE_APT); - assert_delegation(delegator2_address, pool_address, 16 * ONE_APT, 0, 0); - - // share price becomes 1.01 on both pools - unlock(delegator1, pool_address, 1); - assert_delegation(delegator1_address, pool_address, 3999999999, 0, 1000000001); - end_aptos_epoch(); - assert_delegation(delegator1_address, pool_address, 4039999998, 0, 1010000001); - - // pending_inactive balance is over threshold - reactivate_stake(delegator1, pool_address, 10000001); - assert_delegation(delegator1_address, pool_address, 4049999998, 0, 1000000001); - - // 1 coin < 1.01 so no shares are redeemed - reactivate_stake(delegator1, pool_address, 1); - assert_delegation(delegator1_address, pool_address, 4049999998, 0, 1000000001); - - // pending_inactive balance is over threshold - // requesting 2 coins actually redeems 1 coin from pending_inactive pool - reactivate_stake(delegator1, pool_address, 2); - assert_delegation(delegator1_address, pool_address, 4049999999, 0, 1000000000); - - // 1 coin < 1.01 so no shares are redeemed - reactivate_stake(delegator1, pool_address, 1); - assert_delegation(delegator1_address, pool_address, 4049999999, 0, 1000000000); - - // pending_inactive balance would be under threshold => move entire balance - reactivate_stake(delegator1, pool_address, 2); - assert_delegation(delegator1_address, pool_address, 5049999999, 0, 0); - - // pending_inactive balance would be under threshold => move MIN_COINS_ON_SHARES_POOL coins - unlock(delegator1, pool_address, MIN_COINS_ON_SHARES_POOL - 1); - assert_delegation(delegator1_address, pool_address, 4049999998, 0, 1000000000); - - // pending_inactive balance would be under threshold => move entire balance - reactivate_stake(delegator1, pool_address, 1); - assert_delegation(delegator1_address, pool_address, 5049999998, 0, 0); - } - - #[test(aptos_framework = @aptos_framework, validator = @0x123, delegator1 = @0x010)] - #[expected_failure(abort_code = 0x1000f, location = Self)] - public entry fun test_create_proposal_abort_if_inefficient_stake( - aptos_framework: &signer, - validator: &signer, - delegator1: &signer, - // delegator2: &signer, - ) acquires DelegationPoolOwnership, DelegationPool, GovernanceRecords, BeneficiaryForOperator, NextCommissionPercentage, DelegationPoolAllowlisting { - initialize_for_test(aptos_framework); - aptos_governance::initialize_for_test( - aptos_framework, - (10 * ONE_APT as u128), - 100 * ONE_APT, - 1000, - ); - aptos_governance::initialize_partial_voting(aptos_framework); - features::change_feature_flags_for_testing( - aptos_framework, - vector[features::get_partial_governance_voting(), features::get_delegation_pool_partial_governance_voting( - )], - vector[]); - initialize_test_validator(validator, 100 * ONE_APT, true, false); - - let validator_address = signer::address_of(validator); - let pool_address = get_owned_pool_address(validator_address); - // Delegation pool is created after partial governance voting feature flag is enabled. So this delegation - // pool is created with partial governance voting enabled. - assert!(stake::get_delegated_voter(pool_address) == pool_address, 1); - assert!(partial_governance_voting_enabled(pool_address), 2); - - let delegator1_address = signer::address_of(delegator1); - account::create_account_for_test(delegator1_address); - stake::mint(delegator1, 100 * ONE_APT); - add_stake(delegator1, pool_address, 10 * ONE_APT); - end_aptos_epoch(); - - let execution_hash = vector::empty(); - vector::push_back(&mut execution_hash, 1); - create_proposal( - delegator1, - pool_address, - execution_hash, - b"", - b"", - true, - ); - } - - #[test(aptos_framework = @aptos_framework, validator = @0x123, delegator1 = @0x010)] - public entry fun test_create_proposal_with_sufficient_stake( - aptos_framework: &signer, - validator: &signer, - delegator1: &signer, - ) acquires DelegationPoolOwnership, DelegationPool, GovernanceRecords, BeneficiaryForOperator, NextCommissionPercentage, DelegationPoolAllowlisting { - initialize_for_test(aptos_framework); - aptos_governance::initialize_for_test( - aptos_framework, - (10 * ONE_APT as u128), - 100 * ONE_APT, - 1000, - ); - aptos_governance::initialize_partial_voting(aptos_framework); - features::change_feature_flags_for_testing( - aptos_framework, - vector[features::get_partial_governance_voting(), features::get_delegation_pool_partial_governance_voting( - )], - vector[]); - initialize_test_validator(validator, 100 * ONE_APT, true, false); - - let validator_address = signer::address_of(validator); - let pool_address = get_owned_pool_address(validator_address); - // Delegation pool is created after partial governance voting feature flag is enabled. So this delegation - // pool is created with partial governance voting enabled. - assert!(stake::get_delegated_voter(pool_address) == pool_address, 1); - assert!(partial_governance_voting_enabled(pool_address), 2); - - let delegator1_address = signer::address_of(delegator1); - account::create_account_for_test(delegator1_address); - stake::mint(delegator1, 100 * ONE_APT); - add_stake(delegator1, pool_address, 100 * ONE_APT); - end_aptos_epoch(); - - let execution_hash = vector::empty(); - vector::push_back(&mut execution_hash, 1); - create_proposal( - delegator1, - pool_address, - execution_hash, - b"", - b"", - true, - ); - } - - #[test( - aptos_framework = @aptos_framework, - validator = @0x123, - delegator1 = @0x010, - delegator2 = @0x020, - voter1 = @0x030, - voter2 = @0x040 - )] - public entry fun test_voting_power_change( - aptos_framework: &signer, - validator: &signer, - delegator1: &signer, - delegator2: &signer, - voter1: &signer, - voter2: &signer, - ) acquires DelegationPoolOwnership, DelegationPool, GovernanceRecords, BeneficiaryForOperator, NextCommissionPercentage, DelegationPoolAllowlisting { - initialize_for_test_no_reward(aptos_framework); - aptos_governance::initialize_for_test( - aptos_framework, - (10 * ONE_APT as u128), - 100 * ONE_APT, - 1000, - ); - aptos_governance::initialize_partial_voting(aptos_framework); - features::change_feature_flags_for_testing( - aptos_framework, - vector[features::get_partial_governance_voting(), features::get_delegation_pool_partial_governance_voting( - )], - vector[] - ); - - initialize_test_validator(validator, 100 * ONE_APT, true, false); - - let validator_address = signer::address_of(validator); - let pool_address = get_owned_pool_address(validator_address); - // Delegation pool is created after partial governance voting feature flag is enabled. So this delegation - // pool is created with partial governance voting enabled. - assert!(stake::get_delegated_voter(pool_address) == pool_address, 1); - assert!(partial_governance_voting_enabled(pool_address), 1); - - let delegator1_address = signer::address_of(delegator1); - account::create_account_for_test(delegator1_address); - let delegator2_address = signer::address_of(delegator2); - account::create_account_for_test(delegator2_address); - let voter1_address = signer::address_of(voter1); - account::create_account_for_test(voter1_address); - let voter2_address = signer::address_of(voter2); - account::create_account_for_test(voter2_address); - - stake::mint(delegator1, 110 * ONE_APT); - add_stake(delegator1, pool_address, 10 * ONE_APT); - stake::mint(delegator2, 110 * ONE_APT); - add_stake(delegator2, pool_address, 90 * ONE_APT); - // By default, the voter of a delegator is itself. - assert!(calculate_and_update_voter_total_voting_power(pool_address, voter1_address) == 0, 1); - assert!(calculate_and_update_voter_total_voting_power(pool_address, voter2_address) == 0, 1); - assert!(calculate_and_update_voter_total_voting_power(pool_address, delegator1_address) == 10 * ONE_APT, 1); - assert!(calculate_and_update_voter_total_voting_power(pool_address, delegator2_address) == 90 * ONE_APT, 1); - - end_aptos_epoch(); - // Reward rate is 0. No reward so no voting power change. - assert!(calculate_and_update_voter_total_voting_power(pool_address, voter1_address) == 0, 1); - assert!(calculate_and_update_voter_total_voting_power(pool_address, voter2_address) == 0, 1); - assert!(calculate_and_update_voter_total_voting_power(pool_address, delegator1_address) == 10 * ONE_APT, 1); - assert!(calculate_and_update_voter_total_voting_power(pool_address, delegator2_address) == 90 * ONE_APT, 1); - - // Delegator1 delegates its voting power to voter1 but it takes 1 lockup cycle to take effects. So no voting power - // change now. - delegate_voting_power(delegator1, pool_address, voter1_address); - assert!(calculate_and_update_voter_total_voting_power(pool_address, voter1_address) == 0, 1); - assert!(calculate_and_update_voter_total_voting_power(pool_address, voter2_address) == 0, 1); - assert!(calculate_and_update_voter_total_voting_power(pool_address, delegator1_address) == 10 * ONE_APT, 1); - assert!(calculate_and_update_voter_total_voting_power(pool_address, delegator2_address) == 90 * ONE_APT, 1); - - // 1 epoch passed but the lockup cycle hasn't ended. No voting power change. - end_aptos_epoch(); - assert!(calculate_and_update_voter_total_voting_power(pool_address, voter1_address) == 0, 1); - assert!(calculate_and_update_voter_total_voting_power(pool_address, voter2_address) == 0, 1); - assert!(calculate_and_update_voter_total_voting_power(pool_address, delegator1_address) == 10 * ONE_APT, 1); - assert!(calculate_and_update_voter_total_voting_power(pool_address, delegator2_address) == 90 * ONE_APT, 1); - - // One cycle passed. The voter change takes effects. - timestamp::fast_forward_seconds(LOCKUP_CYCLE_SECONDS); - end_aptos_epoch(); - assert!(calculate_and_update_voter_total_voting_power(pool_address, voter1_address) == 10 * ONE_APT, 1); - assert!(calculate_and_update_voter_total_voting_power(pool_address, voter2_address) == 0, 1); - assert!(calculate_and_update_voter_total_voting_power(pool_address, delegator1_address) == 0, 1); - assert!(calculate_and_update_voter_total_voting_power(pool_address, delegator2_address) == 90 * ONE_APT, 1); - - // Delegator2 delegates its voting power to voter1 but it takes 1 lockup cycle to take effects. So no voting power - // change now. - delegate_voting_power(delegator2, pool_address, voter1_address); - assert!(calculate_and_update_voter_total_voting_power(pool_address, voter1_address) == 10 * ONE_APT, 1); - assert!(calculate_and_update_voter_total_voting_power(pool_address, voter2_address) == 0, 1); - assert!(calculate_and_update_voter_total_voting_power(pool_address, delegator1_address) == 0, 1); - assert!(calculate_and_update_voter_total_voting_power(pool_address, delegator2_address) == 90 * ONE_APT, 1); - - // One cycle passed. The voter change takes effects. - timestamp::fast_forward_seconds(LOCKUP_CYCLE_SECONDS); - end_aptos_epoch(); - assert!(calculate_and_update_delegator_voter(pool_address, delegator2_address) == voter1_address, 1); - assert!(calculate_and_update_voter_total_voting_power(pool_address, voter1_address) == 100 * ONE_APT, 1); - assert!(calculate_and_update_voter_total_voting_power(pool_address, voter2_address) == 0, 1); - assert!(calculate_and_update_voter_total_voting_power(pool_address, delegator1_address) == 0, 1); - assert!(calculate_and_update_voter_total_voting_power(pool_address, delegator2_address) == 0, 1); - - // delegator1 changes to voter2 then change back. delegator2 changes to voter1. - // No voting power change in this lockup cycle. - delegate_voting_power(delegator1, pool_address, voter2_address); - delegate_voting_power(delegator2, pool_address, voter2_address); - delegate_voting_power(delegator1, pool_address, voter1_address); - assert!(calculate_and_update_voter_total_voting_power(pool_address, voter1_address) == 100 * ONE_APT, 1); - assert!(calculate_and_update_voter_total_voting_power(pool_address, voter2_address) == 0, 1); - assert!(calculate_and_update_voter_total_voting_power(pool_address, delegator1_address) == 0, 1); - assert!(calculate_and_update_voter_total_voting_power(pool_address, delegator2_address) == 0, 1); - - // One cycle passed. The voter change takes effects. - timestamp::fast_forward_seconds(LOCKUP_CYCLE_SECONDS); - end_aptos_epoch(); - assert!(calculate_and_update_delegator_voter(pool_address, delegator1_address) == voter1_address, 1); - assert!(calculate_and_update_delegator_voter(pool_address, delegator2_address) == voter2_address, 1); - assert!(calculate_and_update_voter_total_voting_power(pool_address, voter1_address) == 10 * ONE_APT, 1); - assert!(calculate_and_update_voter_total_voting_power(pool_address, voter2_address) == 90 * ONE_APT, 1); - assert!(calculate_and_update_voter_total_voting_power(pool_address, delegator1_address) == 0, 1); - assert!(calculate_and_update_voter_total_voting_power(pool_address, delegator2_address) == 0, 1); - - // delegator1 adds stake to the pool. Voting power changes immediately. - add_stake(delegator1, pool_address, 90 * ONE_APT); - assert!(calculate_and_update_voter_total_voting_power(pool_address, voter1_address) == 100 * ONE_APT, 1); - assert!(calculate_and_update_voter_total_voting_power(pool_address, voter2_address) == 90 * ONE_APT, 1); - assert!(calculate_and_update_voter_total_voting_power(pool_address, delegator1_address) == 0, 1); - assert!(calculate_and_update_voter_total_voting_power(pool_address, delegator2_address) == 0, 1); - - // delegator1 unlocks stake and changes its voter. No voting power change until next lockup cycle. - unlock(delegator1, pool_address, 90 * ONE_APT); - delegate_voting_power(delegator1, pool_address, voter2_address); - assert!(calculate_and_update_voter_total_voting_power(pool_address, voter1_address) == 100 * ONE_APT, 1); - assert!(calculate_and_update_voter_total_voting_power(pool_address, voter2_address) == 90 * ONE_APT, 1); - assert!(calculate_and_update_voter_total_voting_power(pool_address, delegator1_address) == 0, 1); - assert!(calculate_and_update_voter_total_voting_power(pool_address, delegator2_address) == 0, 1); - - // One cycle passed. The voter change takes effects. - timestamp::fast_forward_seconds(LOCKUP_CYCLE_SECONDS); - end_aptos_epoch(); - // Withdrawl inactive shares will not change voting power. - withdraw(delegator1, pool_address, 45 * ONE_APT); - assert!(calculate_and_update_voter_total_voting_power(pool_address, voter1_address) == 0, 1); - assert!(calculate_and_update_voter_total_voting_power(pool_address, voter2_address) == 100 * ONE_APT, 1); - assert!(calculate_and_update_voter_total_voting_power(pool_address, delegator1_address) == 0, 1); - assert!(calculate_and_update_voter_total_voting_power(pool_address, delegator2_address) == 0, 1); - - // voter2 adds stake for itself. Voting power changes immediately. - stake::mint(voter2, 110 * ONE_APT); - add_stake(voter2, pool_address, 10 * ONE_APT); - assert!(calculate_and_update_voter_total_voting_power(pool_address, voter1_address) == 0, 1); - assert!(calculate_and_update_voter_total_voting_power(pool_address, voter2_address) == 110 * ONE_APT, 1); - assert!(calculate_and_update_voter_total_voting_power(pool_address, delegator1_address) == 0, 1); - assert!(calculate_and_update_voter_total_voting_power(pool_address, delegator2_address) == 0, 1); - } - - #[test(aptos_framework = @aptos_framework, validator = @0x123, delegator1 = @0x010, voter1 = @0x030)] - public entry fun test_voting_power_change_for_existing_delegation_pool( - aptos_framework: &signer, - validator: &signer, - delegator1: &signer, - voter1: &signer, - ) acquires DelegationPoolOwnership, DelegationPool, GovernanceRecords, BeneficiaryForOperator, NextCommissionPercentage, DelegationPoolAllowlisting { - initialize_for_test_no_reward(aptos_framework); - aptos_governance::initialize_for_test( - aptos_framework, - (10 * ONE_APT as u128), - 100 * ONE_APT, - 1000, - ); - aptos_governance::initialize_partial_voting(aptos_framework); - - initialize_test_validator(validator, 100 * ONE_APT, true, false); - - let validator_address = signer::address_of(validator); - let pool_address = get_owned_pool_address(validator_address); - // Delegation pool is created before partial governance voting feature flag is enabled. So this delegation - // pool's voter is its owner. - assert!(stake::get_delegated_voter(pool_address) == validator_address, 1); - assert!(!partial_governance_voting_enabled(pool_address), 1); - - let delegator1_address = signer::address_of(delegator1); - account::create_account_for_test(delegator1_address); - let voter1_address = signer::address_of(voter1); - account::create_account_for_test(voter1_address); - - stake::mint(delegator1, 110 * ONE_APT); - add_stake(delegator1, pool_address, 10 * ONE_APT); - - // Enable partial governance voting feature flag. - features::change_feature_flags_for_testing( - aptos_framework, - vector[features::get_partial_governance_voting(), features::get_delegation_pool_partial_governance_voting( - )], - vector[] - ); - // Voter doens't change until enabling partial governance voting on this delegation pool. - assert!(stake::get_delegated_voter(pool_address) == validator_address, 1); - // Enable partial governance voting on this delegation pool. - enable_partial_governance_voting(pool_address); - assert!(stake::get_delegated_voter(pool_address) == pool_address, 1); - assert!(partial_governance_voting_enabled(pool_address), 1); - - // By default, the voter of a delegator is itself. - assert!(calculate_and_update_voter_total_voting_power(pool_address, voter1_address) == 0, 1); - assert!(calculate_and_update_voter_total_voting_power(pool_address, delegator1_address) == 10 * ONE_APT, 1); - - // Delegator1 delegates its voting power to voter1. - // It takes 1 cycle to take effect. No immediate change. - delegate_voting_power(delegator1, pool_address, voter1_address); - assert!(calculate_and_update_voter_total_voting_power(pool_address, voter1_address) == 0, 1); - assert!(calculate_and_update_voter_total_voting_power(pool_address, delegator1_address) == 10 * ONE_APT, 1); - - // One cycle passed. The voter change takes effects. - timestamp::fast_forward_seconds(LOCKUP_CYCLE_SECONDS); - end_aptos_epoch(); - assert!(calculate_and_update_voter_total_voting_power(pool_address, voter1_address) == 10 * ONE_APT, 1); - assert!(calculate_and_update_voter_total_voting_power(pool_address, delegator1_address) == 0, 1); - } - - #[test( - aptos_framework = @aptos_framework, - validator = @0x123, - delegator1 = @0x010, - delegator2 = @0x020, - voter1 = @0x030, - voter2 = @0x040 - )] - public entry fun test_voting_power_change_for_rewards( - aptos_framework: &signer, - validator: &signer, - delegator1: &signer, - delegator2: &signer, - voter1: &signer, - voter2: &signer, - ) acquires DelegationPoolOwnership, DelegationPool, GovernanceRecords, BeneficiaryForOperator, NextCommissionPercentage, DelegationPoolAllowlisting { - initialize_for_test_custom( - aptos_framework, - 100 * ONE_APT, - 10000 * ONE_APT, - LOCKUP_CYCLE_SECONDS, - true, - 100, - 100, - 1000000 - ); - aptos_governance::initialize_for_test( - aptos_framework, - (10 * ONE_APT as u128), - 100 * ONE_APT, - 1000, - ); - aptos_governance::initialize_partial_voting(aptos_framework); - features::change_feature_flags_for_testing( - aptos_framework, - vector[features::get_partial_governance_voting(), features::get_delegation_pool_partial_governance_voting( - )], - vector[] - ); - - // 50% commission rate - initialize_test_validator_custom(validator, 100 * ONE_APT, true, false, 5000); - - let validator_address = signer::address_of(validator); - let pool_address = get_owned_pool_address(validator_address); - // Delegation pool is created after partial governance voting feature flag is enabled. So this delegation - // pool is created with partial governance voting enabled. - assert!(stake::get_delegated_voter(pool_address) == pool_address, 1); - assert!(partial_governance_voting_enabled(pool_address), 1); - - let delegator1_address = signer::address_of(delegator1); - account::create_account_for_test(delegator1_address); - let delegator2_address = signer::address_of(delegator2); - account::create_account_for_test(delegator2_address); - let voter1_address = signer::address_of(voter1); - account::create_account_for_test(voter1_address); - let voter2_address = signer::address_of(voter2); - account::create_account_for_test(voter2_address); - - stake::mint(delegator1, 110 * ONE_APT); - add_stake(delegator1, pool_address, 10 * ONE_APT); - stake::mint(delegator2, 110 * ONE_APT); - add_stake(delegator2, pool_address, 90 * ONE_APT); - // By default, the voter of a delegator is itself. - assert!(calculate_and_update_voter_total_voting_power(pool_address, validator_address) == 100 * ONE_APT, 1); - assert!(calculate_and_update_voter_total_voting_power(pool_address, voter1_address) == 0, 1); - assert!(calculate_and_update_voter_total_voting_power(pool_address, voter2_address) == 0, 1); - assert!(calculate_and_update_voter_total_voting_power(pool_address, delegator1_address) == 10 * ONE_APT, 1); - assert!(calculate_and_update_voter_total_voting_power(pool_address, delegator2_address) == 90 * ONE_APT, 1); - - // One epoch is passed. Delegators earn no reward because their stake was inactive. - end_aptos_epoch(); - assert!(calculate_and_update_voter_total_voting_power(pool_address, validator_address) == 100 * ONE_APT, 1); - assert!(calculate_and_update_voter_total_voting_power(pool_address, voter1_address) == 0, 1); - assert!(calculate_and_update_voter_total_voting_power(pool_address, voter2_address) == 0, 1); - assert!(calculate_and_update_voter_total_voting_power(pool_address, delegator1_address) == 10 * ONE_APT, 1); - assert!(calculate_and_update_voter_total_voting_power(pool_address, delegator2_address) == 90 * ONE_APT, 1); - - // 2 epoches are passed. Delegators earn reward and voting power increases. Operator earns reward and - // commission. Because there is no operation during these 2 epoches. Operator's commission is not compounded. - end_aptos_epoch(); - end_aptos_epoch(); - assert!(calculate_and_update_voter_total_voting_power(pool_address, validator_address) == 550 * ONE_APT, 1); - assert!(calculate_and_update_voter_total_voting_power(pool_address, delegator1_address) == 25 * ONE_APT, 1); - assert!(calculate_and_update_voter_total_voting_power(pool_address, delegator2_address) == 225 * ONE_APT, 1); - - // Another epoch is passed. Voting power chage due to reward is correct even if delegator1 and delegator2 change its voter. - delegate_voting_power(delegator1, pool_address, voter1_address); - delegate_voting_power(delegator2, pool_address, voter1_address); - timestamp::fast_forward_seconds(LOCKUP_CYCLE_SECONDS); - end_aptos_epoch(); - assert!(calculate_and_update_voter_total_voting_power(pool_address, validator_address) == 122499999999, 1); - assert!(calculate_and_update_voter_total_voting_power(pool_address, voter1_address) == 375 * ONE_APT, 1); - assert!(calculate_and_update_voter_total_voting_power(pool_address, voter2_address) == 0, 1); - assert!(calculate_and_update_voter_total_voting_power(pool_address, delegator1_address) == 0, 1); - assert!(calculate_and_update_voter_total_voting_power(pool_address, delegator2_address) == 0, 1); - } - - #[test( - aptos_framework = @aptos_framework, - validator = @0x123, - delegator1 = @0x010, - delegator2 = @0x020, - voter1 = @0x030, - voter2 = @0x040 - )] - public entry fun test_voting_power_change_already_voted_before_partial( - aptos_framework: &signer, - validator: &signer, - delegator1: &signer, - delegator2: &signer, - voter1: &signer, - voter2: &signer, - ) acquires DelegationPoolOwnership, DelegationPool, GovernanceRecords, BeneficiaryForOperator, NextCommissionPercentage, DelegationPoolAllowlisting { - // partial voing hasn't been enabled yet. A proposal has been created by the validator. - let proposal1_id = setup_vote(aptos_framework, validator, false); - - let validator_address = signer::address_of(validator); - let pool_address = get_owned_pool_address(validator_address); - - let delegator1_address = signer::address_of(delegator1); - account::create_account_for_test(delegator1_address); - let delegator2_address = signer::address_of(delegator2); - account::create_account_for_test(delegator2_address); - let voter1_address = signer::address_of(voter1); - account::create_account_for_test(voter1_address); - let voter2_address = signer::address_of(voter2); - account::create_account_for_test(voter2_address); - - stake::mint(delegator1, 110 * ONE_APT); - add_stake(delegator1, pool_address, 10 * ONE_APT); - stake::mint(delegator2, 110 * ONE_APT); - add_stake(delegator2, pool_address, 90 * ONE_APT); - - // Create 2 proposals and vote for proposal1. - let execution_hash = vector::empty(); - vector::push_back(&mut execution_hash, 1); - let proposal2_id = aptos_governance::create_proposal_v2_impl( - validator, - pool_address, - execution_hash, - b"", - b"", - true, - ); - aptos_governance::vote(validator, pool_address, proposal1_id, true); - - // Enable partial governance voting feature flag. - features::change_feature_flags_for_testing( - aptos_framework, - vector[features::get_partial_governance_voting(), features::get_delegation_pool_partial_governance_voting( - )], - vector[] - ); - // Voter doens't change until enabling partial governance voting on this delegation pool. - assert!(stake::get_delegated_voter(pool_address) == validator_address, 1); - // Enable partial governance voting on this delegation pool. - enable_partial_governance_voting(pool_address); - assert!(stake::get_delegated_voter(pool_address) == pool_address, 1); - assert!(partial_governance_voting_enabled(pool_address), 1); - - assert!(calculate_and_update_voter_total_voting_power(pool_address, validator_address) == 100 * ONE_APT, 1); - assert!(calculate_and_update_voter_total_voting_power(pool_address, delegator1_address) == 10 * ONE_APT, 1); - assert!(calculate_and_update_voter_total_voting_power(pool_address, delegator2_address) == 90 * ONE_APT, 1); - // No one can vote for proposal1 because it's already voted before enabling partial governance voting. - assert!(calculate_and_update_remaining_voting_power(pool_address, validator_address, proposal1_id) == 0, 1); - assert!(calculate_and_update_remaining_voting_power(pool_address, delegator1_address, proposal1_id) == 0, 1); - assert!(calculate_and_update_remaining_voting_power(pool_address, delegator2_address, proposal1_id) == 0, 1); - assert!( - calculate_and_update_remaining_voting_power(pool_address, validator_address, proposal2_id) == 100 * ONE_APT, - 1 - ); - assert!( - calculate_and_update_remaining_voting_power(pool_address, delegator1_address, proposal2_id) == 10 * ONE_APT, - 1 - ); - assert!( - calculate_and_update_remaining_voting_power(pool_address, delegator2_address, proposal2_id) == 90 * ONE_APT, - 1 - ); - - // Delegator1 tries to use 50 APT to vote on proposal2, but it only has 10 APT. So only 10 APT voting power is used. - vote(delegator1, pool_address, proposal2_id, 50 * ONE_APT, true); - assert!(calculate_and_update_remaining_voting_power(pool_address, delegator1_address, proposal2_id) == 0, 1); - - add_stake(delegator1, pool_address, 60 * ONE_APT); - assert!(calculate_and_update_voter_total_voting_power(pool_address, delegator1_address) == 70 * ONE_APT, 1); - vote(delegator1, pool_address, proposal2_id, 25 * ONE_APT, true); - assert!( - calculate_and_update_remaining_voting_power(pool_address, delegator1_address, proposal2_id) == 35 * ONE_APT, - 1 - ); - vote(delegator1, pool_address, proposal2_id, 30 * ONE_APT, false); - assert!( - calculate_and_update_remaining_voting_power(pool_address, delegator1_address, proposal2_id) == 5 * ONE_APT, - 1 - ); - } - - #[test(aptos_framework = @aptos_framework, validator = @0x123, delegator1 = @0x010, voter1 = @0x030)] - #[expected_failure(abort_code = 0x10010, location = Self)] - public entry fun test_vote_should_failed_if_already_voted_before_enable_partial_voting_flag( - aptos_framework: &signer, - validator: &signer, - delegator1: &signer, - voter1: &signer, - ) acquires DelegationPoolOwnership, DelegationPool, GovernanceRecords, BeneficiaryForOperator, NextCommissionPercentage, DelegationPoolAllowlisting { - // partial voing hasn't been enabled yet. A proposal has been created by the validator. - let proposal1_id = setup_vote(aptos_framework, validator, false); - - let validator_address = signer::address_of(validator); - let pool_address = get_owned_pool_address(validator_address); - let delegator1_address = signer::address_of(delegator1); - account::create_account_for_test(delegator1_address); - let voter1_address = signer::address_of(voter1); - account::create_account_for_test(voter1_address); - - stake::mint(delegator1, 110 * ONE_APT); - add_stake(delegator1, pool_address, 10 * ONE_APT); - end_aptos_epoch(); - - aptos_governance::vote(validator, pool_address, proposal1_id, true); - - // Enable partial governance voting feature flag. - features::change_feature_flags_for_testing( - aptos_framework, - vector[features::get_partial_governance_voting(), features::get_delegation_pool_partial_governance_voting( - )], - vector[] - ); - // Enable partial governance voting on this delegation pool. - enable_partial_governance_voting(pool_address); - - vote(delegator1, pool_address, proposal1_id, 10 * ONE_APT, true); - } - - #[test(aptos_framework = @aptos_framework, validator = @0x123, delegator1 = @0x010, voter1 = @0x030)] - #[expected_failure(abort_code = 0x10011, location = Self)] - public entry fun test_vote_should_failed_if_already_voted_before_enable_partial_voting_on_pool( - aptos_framework: &signer, - validator: &signer, - delegator1: &signer, - voter1: &signer, - ) acquires DelegationPoolOwnership, DelegationPool, GovernanceRecords, BeneficiaryForOperator, NextCommissionPercentage, DelegationPoolAllowlisting { - // partial voing hasn't been enabled yet. A proposal has been created by the validator. - let proposal1_id = setup_vote(aptos_framework, validator, false); - - let validator_address = signer::address_of(validator); - let pool_address = get_owned_pool_address(validator_address); - let delegator1_address = signer::address_of(delegator1); - account::create_account_for_test(delegator1_address); - let voter1_address = signer::address_of(voter1); - account::create_account_for_test(voter1_address); - - stake::mint(delegator1, 110 * ONE_APT); - add_stake(delegator1, pool_address, 10 * ONE_APT); - end_aptos_epoch(); - - // Enable partial governance voting feature flag. - features::change_feature_flags_for_testing( - aptos_framework, - vector[features::get_partial_governance_voting(), features::get_delegation_pool_partial_governance_voting( - )], - vector[] - ); - - // The operator voter votes on the proposal after partial governace voting flag is enabled but before partial voting is enabled on the pool. - aptos_governance::vote(validator, pool_address, proposal1_id, true); - - // Enable partial governance voting on this delegation pool. - enable_partial_governance_voting(pool_address); - - add_stake(delegator1, pool_address, 10 * ONE_APT); - vote(delegator1, pool_address, proposal1_id, 10 * ONE_APT, true); - } - - #[test(aptos_framework = @aptos_framework, validator = @0x123, delegator1 = @0x010)] - #[expected_failure(abort_code = 0x10010, location = Self)] - public entry fun test_vote_should_failed_if_no_stake( - aptos_framework: &signer, - validator: &signer, - delegator1: &signer, - ) acquires DelegationPoolOwnership, DelegationPool, GovernanceRecords, BeneficiaryForOperator, NextCommissionPercentage, DelegationPoolAllowlisting { - // partial voing hasn't been enabled yet. A proposal has been created by the validator. - let proposal1_id = setup_vote(aptos_framework, validator, true); - - let validator_address = signer::address_of(validator); - let pool_address = get_owned_pool_address(validator_address); - let delegator1_address = signer::address_of(delegator1); - account::create_account_for_test(delegator1_address); - - // Delegator1 has no stake. Abort. - vote(delegator1, pool_address, proposal1_id, 10 * ONE_APT, true); - } - - #[test(aptos_framework = @aptos_framework, validator = @0x123, delegator1 = @0x010, voter1 = @0x030)] - public entry fun test_delegate_voting_power_should_pass_even_if_no_stake( - aptos_framework: &signer, - validator: &signer, - delegator1: &signer, - voter1: &signer, - ) acquires DelegationPoolOwnership, DelegationPool, GovernanceRecords, BeneficiaryForOperator, NextCommissionPercentage, DelegationPoolAllowlisting { - // partial voing hasn't been enabled yet. A proposal has been created by the validator. - setup_vote(aptos_framework, validator, true); - - let validator_address = signer::address_of(validator); - let pool_address = get_owned_pool_address(validator_address); - let delegator1_address = signer::address_of(delegator1); - account::create_account_for_test(delegator1_address); - - // Delegator1 has no stake. Abort. - delegate_voting_power(delegator1, pool_address, signer::address_of(voter1)); - } - - #[test( - aptos_framework = @aptos_framework, - validator = @0x123, - delegator = @0x010, - voter1 = @0x020, - voter2 = @0x030 - )] - public entry fun test_delegate_voting_power_applies_next_lockup( - aptos_framework: &signer, - validator: &signer, - delegator: &signer, - voter1: &signer, - voter2: &signer, - ) acquires DelegationPoolOwnership, DelegationPool, GovernanceRecords, BeneficiaryForOperator, NextCommissionPercentage, DelegationPoolAllowlisting { - initialize_for_test(aptos_framework); - aptos_governance::initialize_partial_voting(aptos_framework); - features::change_feature_flags_for_testing( - aptos_framework, - vector[ - features::get_partial_governance_voting(), - features::get_delegation_pool_partial_governance_voting() - ], - vector[] - ); - - initialize_test_validator(validator, 100 * ONE_APT, true, true); - let validator_address = signer::address_of(validator); - let pool_address = get_owned_pool_address(validator_address); - - let delegator_address = signer::address_of(delegator); - account::create_account_for_test(delegator_address); - let voter1_address = signer::address_of(voter1); - let voter2_address = signer::address_of(voter2); - - stake::mint(delegator, 100 * ONE_APT); - add_stake(delegator, pool_address, 20 * ONE_APT); - - let first_lockup_end = stake::get_lockup_secs(pool_address); - // default voter is the delegator - let (voter, pending_voter, last_locked_until_secs) = calculate_and_update_voting_delegation( - pool_address, - delegator_address - ); - assert!(voter == delegator_address, 0); - assert!(pending_voter == delegator_address, 0); - assert!(last_locked_until_secs == first_lockup_end, 0); - - // delegate to voter 1 which takes effect next lockup - delegate_voting_power(delegator, pool_address, voter1_address); - (voter, pending_voter, last_locked_until_secs) = calculate_and_update_voting_delegation( - pool_address, - delegator_address - ); - assert!(voter == delegator_address, 0); - assert!(pending_voter == voter1_address, 0); - assert!(last_locked_until_secs == first_lockup_end, 0); - assert!( - calculate_and_update_voter_total_voting_power( - pool_address, - delegator_address - ) == 20 * ONE_APT - get_add_stake_fee(pool_address, 20 * ONE_APT), - 0 - ); - - // end this lockup cycle - fast_forward_to_unlock(pool_address); - let second_lockup_end = stake::get_lockup_secs(pool_address); - assert!(second_lockup_end > first_lockup_end, 0); - - (voter, pending_voter, last_locked_until_secs) = calculate_and_update_voting_delegation( - pool_address, - delegator_address - ); - // voter 1 becomes current voter and owns all voting power of delegator - assert!(voter == voter1_address, 0); - assert!(pending_voter == voter1_address, 0); - assert!(last_locked_until_secs == second_lockup_end, 0); - assert!( - calculate_and_update_voter_total_voting_power(pool_address, voter1_address) == 20 * ONE_APT, - 0 - ); - - // delegate to voter 2, current voter should still be voter 1 - delegate_voting_power(delegator, pool_address, voter2_address); - (voter, pending_voter, last_locked_until_secs) = calculate_and_update_voting_delegation( - pool_address, - delegator_address - ); - assert!(voter == voter1_address, 0); - assert!(pending_voter == voter2_address, 0); - assert!(last_locked_until_secs == second_lockup_end, 0); - assert!( - calculate_and_update_voter_total_voting_power(pool_address, voter1_address) == 20 * ONE_APT, - 0 - ); - - // stake added by delegator counts as voting power for the current voter - add_stake(delegator, pool_address, 30 * ONE_APT); - assert!( - calculate_and_update_voter_total_voting_power( - pool_address, - voter1_address - ) == 20 * ONE_APT + 30 * ONE_APT - get_add_stake_fee(pool_address, 30 * ONE_APT), - 0 - ); - - // refunded `add_stake` fee is counted as voting power too - end_aptos_epoch(); - assert!( - calculate_and_update_voter_total_voting_power(pool_address, voter1_address) == 5020000000, - 0 - ); - - // delegator can unlock their entire stake (all voting shares are owned by voter 1) - unlock(delegator, pool_address, 5020000000); - assert!( - calculate_and_update_voter_total_voting_power(pool_address, voter1_address) == 5020000000, - 0 - ); - - // delegator can reactivate their entire stake (all voting shares are owned by voter 1) - reactivate_stake(delegator, pool_address, 5020000000); - assert!( - calculate_and_update_voter_total_voting_power(pool_address, voter1_address) == 5019999999, - 0 - ); - - // end this lockup cycle - fast_forward_to_unlock(pool_address); - let third_lockup_end = stake::get_lockup_secs(pool_address); - assert!(third_lockup_end > second_lockup_end, 0); - - // voter 2 becomes current voter and owns all voting power of delegator - (voter, pending_voter, last_locked_until_secs) = calculate_and_update_voting_delegation( - pool_address, - delegator_address - ); - assert!(voter == voter2_address, 0); - assert!(pending_voter == voter2_address, 0); - assert!(last_locked_until_secs == third_lockup_end, 0); - assert!( - calculate_and_update_voter_total_voting_power(pool_address, voter2_address) == 5070199999, - 0 - ); - } - - #[test( - aptos_framework = @aptos_framework, - validator = @0x123, - validator_min_consensus = @0x234, - delegator = @0x010, - voter1 = @0x020, - voter2 = @0x030 - )] - public entry fun test_delegate_voting_power_from_inactive_validator( - aptos_framework: &signer, - validator: &signer, - validator_min_consensus: &signer, - delegator: &signer, - voter1: &signer, - voter2: &signer, - ) acquires DelegationPoolOwnership, DelegationPool, GovernanceRecords, BeneficiaryForOperator, NextCommissionPercentage, DelegationPoolAllowlisting { - initialize_for_test(aptos_framework); - aptos_governance::initialize_partial_voting(aptos_framework); - features::change_feature_flags_for_testing( - aptos_framework, - vector[ - features::get_partial_governance_voting(), - features::get_delegation_pool_partial_governance_voting() - ], - vector[] - ); - - // activate more validators in order to inactivate one later - initialize_test_validator(validator, 100 * ONE_APT, true, false); - initialize_test_validator(validator_min_consensus, 100 * ONE_APT, true, true); - - let validator_address = signer::address_of(validator); - let pool_address = get_owned_pool_address(validator_address); - - let delegator_address = signer::address_of(delegator); - account::create_account_for_test(delegator_address); - let voter1_address = signer::address_of(voter1); - let voter2_address = signer::address_of(voter2); - - let first_lockup_end = stake::get_lockup_secs(pool_address); - let (voter, pending_voter, last_locked_until_secs) = calculate_and_update_voting_delegation( - pool_address, - delegator_address - ); - assert!(voter == delegator_address, 0); - assert!(pending_voter == delegator_address, 0); - assert!(last_locked_until_secs == first_lockup_end, 0); - - delegate_voting_power(delegator, pool_address, voter1_address); - (voter, pending_voter, last_locked_until_secs) = calculate_and_update_voting_delegation( - pool_address, - delegator_address - ); - assert!(voter == delegator_address, 0); - assert!(pending_voter == voter1_address, 0); - assert!(last_locked_until_secs == first_lockup_end, 0); - - // end this lockup cycle - fast_forward_to_unlock(pool_address); - let second_lockup_end = stake::get_lockup_secs(pool_address); - assert!(second_lockup_end > first_lockup_end, 0); - - // voter 1 becomes current voter - (voter, pending_voter, last_locked_until_secs) = calculate_and_update_voting_delegation( - pool_address, - delegator_address - ); - assert!(voter == voter1_address, 0); - assert!(pending_voter == voter1_address, 0); - assert!(last_locked_until_secs == second_lockup_end, 0); - - // delegate to voter 2 which should apply next lockup - delegate_voting_power(delegator, pool_address, voter2_address); - (voter, pending_voter, last_locked_until_secs) = calculate_and_update_voting_delegation( - pool_address, - delegator_address - ); - assert!(voter == voter1_address, 0); - assert!(pending_voter == voter2_address, 0); - assert!(last_locked_until_secs == second_lockup_end, 0); - - // lockup cycle won't be refreshed on the pool anymore - stake::leave_validator_set(validator, pool_address); - end_aptos_epoch(); - assert!(stake::get_validator_state(pool_address) == VALIDATOR_STATUS_INACTIVE, 0); - - // lockup cycle passes, but validator has no lockup refresh because it is inactive - fast_forward_to_unlock(pool_address); - assert!(second_lockup_end == stake::get_lockup_secs(pool_address), 0); - assert!(second_lockup_end <= reconfiguration::last_reconfiguration_time(), 0); - - // pending voter 2 is not applied - (voter, pending_voter, last_locked_until_secs) = calculate_and_update_voting_delegation( - pool_address, - delegator_address - ); - assert!(voter == voter1_address, 0); - assert!(pending_voter == voter2_address, 0); - assert!(last_locked_until_secs == second_lockup_end, 0); - - // reactivate validator - stake::join_validator_set(validator, pool_address); - end_aptos_epoch(); - assert!(stake::get_validator_state(pool_address) == VALIDATOR_STATUS_ACTIVE, 0); - - // lockup cycle of pool has been refreshed again - let third_lockup_end = stake::get_lockup_secs(pool_address); - assert!(third_lockup_end > second_lockup_end, 0); - - // voter 2 finally becomes current voter - (voter, pending_voter, last_locked_until_secs) = calculate_and_update_voting_delegation( - pool_address, - delegator_address - ); - assert!(voter == voter2_address, 0); - assert!(pending_voter == voter2_address, 0); - assert!(last_locked_until_secs == third_lockup_end, 0); - } - - #[test(staker = @0xe256f4f4e2986cada739e339895cf5585082ff247464cab8ec56eea726bd2263)] - public entry fun test_get_expected_stake_pool_address(staker: address) { - let pool_address = get_expected_stake_pool_address(staker, vector[0x42, 0x42]); - assert!(pool_address == @0xe9fc2fbb82b7e1cb7af3daef8c7a24e66780f9122d15e4f1d486ee7c7c36c48d, 0); - } - - #[test(aptos_framework = @aptos_framework, validator = @0x123)] - #[expected_failure(abort_code = 0x30017, location = Self)] - public entry fun test_delegators_allowlisting_not_supported( - aptos_framework: &signer, - validator: &signer, - ) acquires DelegationPoolOwnership, DelegationPool, GovernanceRecords, BeneficiaryForOperator, NextCommissionPercentage, DelegationPoolAllowlisting { - initialize_for_test(aptos_framework); - initialize_test_validator(validator, 100 * ONE_APT, true, true); - features::change_feature_flags_for_testing( - aptos_framework, - vector[], - vector[features::get_delegation_pool_allowlisting_feature()], - ); - - enable_delegators_allowlisting(validator); - } - - #[test(aptos_framework = @aptos_framework, validator = @0x123)] - #[expected_failure(abort_code = 0x30018, location = Self)] - public entry fun test_cannot_disable_allowlisting_if_already_off( - aptos_framework: &signer, - validator: &signer, - ) acquires DelegationPoolOwnership, DelegationPool, GovernanceRecords, BeneficiaryForOperator, NextCommissionPercentage, DelegationPoolAllowlisting { - initialize_for_test(aptos_framework); - initialize_test_validator(validator, 100 * ONE_APT, true, true); - - let pool_address = get_owned_pool_address(signer::address_of(validator)); - assert!(!allowlisting_enabled(pool_address), 0); - - disable_delegators_allowlisting(validator); - } - - #[test(aptos_framework = @aptos_framework, validator = @0x123, delegator_1 = @0x010)] - #[expected_failure(abort_code = 0x30018, location = Self)] - public entry fun test_cannot_allowlist_delegator_if_allowlisting_disabled( - aptos_framework: &signer, - validator: &signer, - delegator_1: &signer, - ) acquires DelegationPoolOwnership, DelegationPool, GovernanceRecords, BeneficiaryForOperator, NextCommissionPercentage, DelegationPoolAllowlisting { - initialize_for_test(aptos_framework); - initialize_test_validator(validator, 100 * ONE_APT, true, true); - - let pool_address = get_owned_pool_address(signer::address_of(validator)); - assert!(!allowlisting_enabled(pool_address), 0); - - allowlist_delegator(validator, signer::address_of(delegator_1)); - } - - #[test(aptos_framework = @aptos_framework, validator = @0x123, delegator_1 = @0x010)] - #[expected_failure(abort_code = 0x30018, location = Self)] - public entry fun test_cannot_remove_delegator_from_allowlist_if_allowlisting_disabled( - aptos_framework: &signer, - validator: &signer, - delegator_1: &signer, - ) acquires DelegationPoolOwnership, DelegationPool, GovernanceRecords, BeneficiaryForOperator, NextCommissionPercentage, DelegationPoolAllowlisting { - initialize_for_test(aptos_framework); - initialize_test_validator(validator, 100 * ONE_APT, true, true); - - let pool_address = get_owned_pool_address(signer::address_of(validator)); - assert!(!allowlisting_enabled(pool_address), 0); - - remove_delegator_from_allowlist(validator, signer::address_of(delegator_1)); - } - - #[test(aptos_framework = @aptos_framework, validator = @0x123, delegator_1 = @0x010)] - #[expected_failure(abort_code = 0x30018, location = Self)] - public entry fun test_cannot_evict_delegator_if_allowlisting_disabled( - aptos_framework: &signer, - validator: &signer, - delegator_1: &signer, - ) acquires DelegationPoolOwnership, DelegationPool, GovernanceRecords, BeneficiaryForOperator, NextCommissionPercentage, DelegationPoolAllowlisting { - initialize_for_test(aptos_framework); - initialize_test_validator(validator, 100 * ONE_APT, true, true); - - let pool_address = get_owned_pool_address(signer::address_of(validator)); - assert!(!allowlisting_enabled(pool_address), 0); - - evict_delegator(validator, signer::address_of(delegator_1)); - } - - #[test(aptos_framework = @aptos_framework, validator = @0x123, delegator_1 = @0x010, delegator_2 = @0x020)] - public entry fun test_allowlist_operations_only_e2e( - aptos_framework: &signer, - validator: &signer, - delegator_1: &signer, - delegator_2: &signer, - ) acquires DelegationPoolOwnership, DelegationPool, GovernanceRecords, BeneficiaryForOperator, NextCommissionPercentage, DelegationPoolAllowlisting { - initialize_for_test(aptos_framework); - initialize_test_validator(validator, 100 * ONE_APT, true, true); - enable_delegation_pool_allowlisting_feature(aptos_framework); - - let validator_address = signer::address_of(validator); - let pool_address = get_owned_pool_address(validator_address); - let delegator_1_address = signer::address_of(delegator_1); - let delegator_2_address = signer::address_of(delegator_2); - - // any address is allowlisted if allowlist is not created - assert!(!allowlisting_enabled(pool_address), 0); - assert!(delegator_allowlisted(pool_address, delegator_1_address), 0); - assert!(delegator_allowlisted(pool_address, delegator_2_address), 0); - - // no address is allowlisted when allowlist is empty - enable_delegators_allowlisting(validator); - assert!(!delegator_allowlisted(pool_address, delegator_1_address), 0); - assert!(!delegator_allowlisted(pool_address, delegator_2_address), 0); - let allowlist = &get_delegators_allowlist(pool_address); - assert!(vector::length(allowlist) == 0, 0); - - allowlist_delegator(validator, delegator_1_address); - assert!(delegator_allowlisted(pool_address, delegator_1_address), 0); - assert!(!delegator_allowlisted(pool_address, delegator_2_address), 0); - allowlist = &get_delegators_allowlist(pool_address); - assert!(vector::length(allowlist) == 1 && vector::contains(allowlist, &delegator_1_address), 0); - - allowlist_delegator(validator, delegator_2_address); - assert!(delegator_allowlisted(pool_address, delegator_1_address), 0); - assert!(delegator_allowlisted(pool_address, delegator_2_address), 0); - allowlist = &get_delegators_allowlist(pool_address); - assert!(vector::length(allowlist) == 2 && - vector::contains(allowlist, &delegator_1_address) && - vector::contains(allowlist, &delegator_2_address), - 0 - ); - - remove_delegator_from_allowlist(validator, delegator_2_address); - assert!(delegator_allowlisted(pool_address, delegator_1_address), 0); - assert!(!delegator_allowlisted(pool_address, delegator_2_address), 0); - allowlist = &get_delegators_allowlist(pool_address); - assert!(vector::length(allowlist) == 1 && vector::contains(allowlist, &delegator_1_address), 0); - - // destroy the allowlist constructed so far - disable_delegators_allowlisting(validator); - assert!(!allowlisting_enabled(pool_address), 0); - assert!(delegator_allowlisted(pool_address, delegator_1_address), 0); - assert!(delegator_allowlisted(pool_address, delegator_2_address), 0); - - enable_delegators_allowlisting(validator); - assert!(!delegator_allowlisted(pool_address, delegator_1_address), 0); - assert!(!delegator_allowlisted(pool_address, delegator_2_address), 0); - - allowlist_delegator(validator, delegator_2_address); - assert!(!delegator_allowlisted(pool_address, delegator_1_address), 0); - assert!(delegator_allowlisted(pool_address, delegator_2_address), 0); - allowlist = &get_delegators_allowlist(pool_address); - assert!(vector::length(allowlist) == 1 && vector::contains(allowlist, &delegator_2_address), 0); - - // allowlist does not ever have duplicates - allowlist_delegator(validator, delegator_2_address); - allowlist = &get_delegators_allowlist(pool_address); - assert!(vector::length(allowlist) == 1 && vector::contains(allowlist, &delegator_2_address), 0); - - // no override of existing allowlist when enabling allowlisting again - enable_delegators_allowlisting(validator); - allowlist = &get_delegators_allowlist(pool_address); - assert!(vector::length(allowlist) == 1 && vector::contains(allowlist, &delegator_2_address), 0); - - // nothing changes when trying to remove an inexistent delegator - remove_delegator_from_allowlist(validator, delegator_1_address); - allowlist = &get_delegators_allowlist(pool_address); - assert!(vector::length(allowlist) == 1 && vector::contains(allowlist, &delegator_2_address), 0); - } - - #[test(aptos_framework = @aptos_framework, validator = @0x123, delegator_1 = @0x010)] - #[expected_failure(abort_code = 0x3001a, location = Self)] - public entry fun test_cannot_evict_explicitly_allowlisted_delegator( - aptos_framework: &signer, - validator: &signer, - delegator_1: &signer, - ) acquires DelegationPoolOwnership, DelegationPool, GovernanceRecords, BeneficiaryForOperator, NextCommissionPercentage, DelegationPoolAllowlisting { - initialize_for_test(aptos_framework); - initialize_test_validator(validator, 100 * ONE_APT, true, true); - enable_delegation_pool_allowlisting_feature(aptos_framework); - - let validator_address = signer::address_of(validator); - let pool_address = get_owned_pool_address(validator_address); - - enable_delegators_allowlisting(validator); - assert!(allowlisting_enabled(pool_address), 0); - - let delegator_1_address = signer::address_of(delegator_1); - allowlist_delegator(validator, delegator_1_address); - - assert!(delegator_allowlisted(pool_address, delegator_1_address), 0); - evict_delegator(validator, delegator_1_address); - } - - #[test(aptos_framework = @aptos_framework, validator = @0x123, delegator_1 = @0x010)] - #[expected_failure(abort_code = 0x1001b, location = Self)] - public entry fun test_cannot_evict_null_address( - aptos_framework: &signer, - validator: &signer, - delegator_1: &signer, - ) acquires DelegationPoolOwnership, DelegationPool, GovernanceRecords, BeneficiaryForOperator, NextCommissionPercentage, DelegationPoolAllowlisting { - initialize_for_test(aptos_framework); - initialize_test_validator(validator, 100 * ONE_APT, true, true); - enable_delegation_pool_allowlisting_feature(aptos_framework); - - let validator_address = signer::address_of(validator); - let pool_address = get_owned_pool_address(validator_address); - - let delegator_1_address = signer::address_of(delegator_1); - account::create_account_for_test(delegator_1_address); - - // add some active shares to NULL_SHAREHOLDER from `add_stake` fee - stake::mint(delegator_1, 50 * ONE_APT); - add_stake(delegator_1, pool_address, 50 * ONE_APT); - assert!(get_delegator_active_shares(borrow_global(pool_address), NULL_SHAREHOLDER) != 0, 0); - - enable_delegators_allowlisting(validator); - evict_delegator(validator, NULL_SHAREHOLDER); - } - - #[test(aptos_framework = @aptos_framework, validator = @0x123, delegator_1 = @0x010)] - #[expected_failure(abort_code = 0x50019, location = Self)] - public entry fun test_cannot_add_stake_if_not_allowlisted( - aptos_framework: &signer, - validator: &signer, - delegator_1: &signer, - ) acquires DelegationPoolOwnership, DelegationPool, GovernanceRecords, BeneficiaryForOperator, NextCommissionPercentage, DelegationPoolAllowlisting { - initialize_for_test(aptos_framework); - initialize_test_validator(validator, 100 * ONE_APT, true, true); - enable_delegation_pool_allowlisting_feature(aptos_framework); - - let validator_address = signer::address_of(validator); - let pool_address = get_owned_pool_address(validator_address); - - let delegator_1_address = signer::address_of(delegator_1); - account::create_account_for_test(delegator_1_address); - - // allowlisting not enabled yet - assert!(!allowlisting_enabled(pool_address), 0); - assert!(delegator_allowlisted(pool_address, delegator_1_address), 0); - - stake::mint(delegator_1, 30 * ONE_APT); - add_stake(delegator_1, pool_address, 20 * ONE_APT); - - end_aptos_epoch(); - assert_delegation(delegator_1_address, pool_address, 20 * ONE_APT, 0, 0); - - // allowlist is created but has no address added - enable_delegators_allowlisting(validator); - assert!(allowlisting_enabled(pool_address), 0); - assert!(!delegator_allowlisted(pool_address, delegator_1_address), 0); - - add_stake(delegator_1, pool_address, 10 * ONE_APT); - } - - #[test(aptos_framework = @aptos_framework, validator = @0x123, delegator_1 = @0x010)] - #[expected_failure(abort_code = 0x50019, location = Self)] - public entry fun test_cannot_reactivate_stake_if_not_allowlisted( - aptos_framework: &signer, - validator: &signer, - delegator_1: &signer, - ) acquires DelegationPoolOwnership, DelegationPool, GovernanceRecords, BeneficiaryForOperator, NextCommissionPercentage, DelegationPoolAllowlisting { - initialize_for_test(aptos_framework); - initialize_test_validator(validator, 100 * ONE_APT, true, true); - enable_delegation_pool_allowlisting_feature(aptos_framework); - - let validator_address = signer::address_of(validator); - let pool_address = get_owned_pool_address(validator_address); - - let delegator_1_address = signer::address_of(delegator_1); - account::create_account_for_test(delegator_1_address); - - // allowlist is created but has no address added - enable_delegators_allowlisting(validator); - // allowlist delegator - allowlist_delegator(validator, delegator_1_address); - assert!(delegator_allowlisted(pool_address, delegator_1_address), 0); - - // delegator is allowed to add stake - stake::mint(delegator_1, 50 * ONE_APT); - add_stake(delegator_1, pool_address, 50 * ONE_APT); - - // restore `add_stake` fee back to delegator - end_aptos_epoch(); - assert_delegation(delegator_1_address, pool_address, 50 * ONE_APT, 0, 0); - - // some of the stake is unlocked by the delegator - unlock(delegator_1, pool_address, 30 * ONE_APT); - assert_delegation(delegator_1_address, pool_address, 20 * ONE_APT, 0, 2999999999); - - // remove delegator from allowlist - remove_delegator_from_allowlist(validator, delegator_1_address); - assert!(!delegator_allowlisted(pool_address, delegator_1_address), 0); - - // remaining stake is unlocked by the pool owner by evicting the delegator - evict_delegator(validator, delegator_1_address); - assert_delegation(delegator_1_address, pool_address, 0, 0, 4999999999); - - // delegator cannot reactivate stake - reactivate_stake(delegator_1, pool_address, 50 * ONE_APT); - assert_delegation(delegator_1_address, pool_address, 0, 0, 4999999999); - } - - #[test(aptos_framework = @aptos_framework, validator = @0x123, delegator_1 = @0x010, delegator_2 = @0x020)] - public entry fun test_delegation_pool_allowlisting_e2e( - aptos_framework: &signer, - validator: &signer, - delegator_1: &signer, - delegator_2: &signer, - ) acquires DelegationPoolOwnership, DelegationPool, GovernanceRecords, BeneficiaryForOperator, NextCommissionPercentage, DelegationPoolAllowlisting { - initialize_for_test(aptos_framework); - initialize_test_validator(validator, 100 * ONE_APT, true, true); - enable_delegation_pool_allowlisting_feature(aptos_framework); - - let validator_address = signer::address_of(validator); - let pool_address = get_owned_pool_address(validator_address); - - let delegator_1_address = signer::address_of(delegator_1); - account::create_account_for_test(delegator_1_address); - let delegator_2_address = signer::address_of(delegator_2); - account::create_account_for_test(delegator_2_address); - - // add stake while allowlisting is disabled - assert!(!allowlisting_enabled(pool_address), 0); - stake::mint(delegator_1, 100 * ONE_APT); - stake::mint(delegator_2, 100 * ONE_APT); - add_stake(delegator_1, pool_address, 50 * ONE_APT); - add_stake(delegator_2, pool_address, 30 * ONE_APT); - - end_aptos_epoch(); - assert_delegation(delegator_1_address, pool_address, 50 * ONE_APT, 0, 0); - assert_delegation(delegator_2_address, pool_address, 30 * ONE_APT, 0, 0); - - // create allowlist - enable_delegators_allowlisting(validator); - assert!(allowlisting_enabled(pool_address), 0); - assert!(!delegator_allowlisted(pool_address, delegator_1_address), 0); - assert!(!delegator_allowlisted(pool_address, delegator_2_address), 0); - - allowlist_delegator(validator, delegator_1_address); - assert!(delegator_allowlisted(pool_address, delegator_1_address), 0); - assert!(!delegator_allowlisted(pool_address, delegator_2_address), 0); - - // evict delegator 2 which unlocks their entire active stake - evict_delegator(validator, delegator_2_address); - assert_delegation(delegator_2_address, pool_address, 0, 0, 30 * ONE_APT); - - end_aptos_epoch(); - // 5000000000 * 1.01 active - assert_delegation(delegator_1_address, pool_address, 5050000000, 0, 0); - // 3000000000 * 1.01 pending-inactive - assert_delegation(delegator_2_address, pool_address, 0, 0, 3030000000); - - // can add stake when allowlisted - add_stake(delegator_1, pool_address, 10 * ONE_APT); - end_aptos_epoch(); - // 5050000000 * 1.01 + 1000000000 active - assert_delegation(delegator_1_address, pool_address, 6100500000, 0, 0); - // 3030000000 * 1.01 pending-inactive - assert_delegation(delegator_2_address, pool_address, 0, 0, 3060300000); - - end_aptos_epoch(); - // 6100500000 * 1.01 active - assert_delegation(delegator_1_address, pool_address, 6161505000, 0, 0); - // 3060300000 * 1.01 pending-inactive - assert_delegation(delegator_2_address, pool_address, 0, 0, 3090903000); - - remove_delegator_from_allowlist(validator, delegator_1_address); - assert!(!delegator_allowlisted(pool_address, delegator_1_address), 0); - - // check that in-flight active rewards are evicted too, which validates that `synchronize_delegation_pool` was called - let active = pool_u64::balance( - &borrow_global(pool_address).active_shares, - delegator_1_address - ) + get_add_stake_fee(pool_address, 10 * ONE_APT); - // 5050000000 + 1000000000 active at last `synchronize_delegation_pool` - assert!(active == 6050000000, active); - - evict_delegator(validator, delegator_1_address); - assert_delegation(delegator_1_address, pool_address, 0, 0, 6161504999); - let pending_inactive = pool_u64::balance( - pending_inactive_shares_pool(borrow_global(pool_address)), - delegator_1_address - ); - assert!(pending_inactive == 6161504999, pending_inactive); - - // allowlist delegator 1 back and check that they can add stake - allowlist_delegator(validator, delegator_1_address); - add_stake(delegator_1, pool_address, 20 * ONE_APT); - end_aptos_epoch(); - // 2000000000 active and 6161505000 * 1.01 pending-inactive - assert_delegation(delegator_1_address, pool_address, 20 * ONE_APT, 0, 6223120049); - - // can reactivate stake when allowlisted - reactivate_stake(delegator_1, pool_address, 5223120050); - assert_delegation(delegator_1_address, pool_address, 20 * ONE_APT + 5223120049, 0, 10 * ONE_APT); - - // evict delegator 1 after they reactivated - remove_delegator_from_allowlist(validator, delegator_1_address); - evict_delegator(validator, delegator_1_address); - // 2000000000 + 5223120050 + 1000000000 pending-inactive - assert_delegation(delegator_1_address, pool_address, 0, 0, 8223120049); - - end_aptos_epoch(); - // (2000000000 + 5223120050 + 1000000000) * 1.01 pending-inactive - assert_delegation(delegator_1_address, pool_address, 0, 0, 8305351249); - } - - #[test_only] - public fun assert_delegation( - delegator_address: address, - pool_address: address, - active_stake: u64, - inactive_stake: u64, - pending_inactive_stake: u64, - ) acquires DelegationPool, BeneficiaryForOperator { - let (actual_active, actual_inactive, actual_pending_inactive) = get_stake(pool_address, delegator_address); - assert!(actual_active == active_stake, actual_active); - assert!(actual_inactive == inactive_stake, actual_inactive); - assert!(actual_pending_inactive == pending_inactive_stake, actual_pending_inactive); - } - - #[test_only] - public fun assert_pending_withdrawal( - delegator_address: address, - pool_address: address, - exists: bool, - olc: u64, - inactive: bool, - stake: u64, - ) acquires DelegationPool { - assert_delegation_pool_exists(pool_address); - let pool = borrow_global(pool_address); - let (withdrawal_exists, withdrawal_olc) = pending_withdrawal_exists(pool, delegator_address); - assert!(withdrawal_exists == exists, 0); - assert!(withdrawal_olc.index == olc, withdrawal_olc.index); - let (withdrawal_inactive, withdrawal_stake) = get_pending_withdrawal(pool_address, delegator_address); - assert!(withdrawal_inactive == inactive, 0); - assert!(withdrawal_stake == stake, withdrawal_stake); - } - - #[test_only] - public fun assert_inactive_shares_pool( - pool_address: address, - olc: u64, - exists: bool, - stake: u64, - ) acquires DelegationPool { - assert_delegation_pool_exists(pool_address); - let pool = borrow_global(pool_address); - assert!(table::contains(&pool.inactive_shares, olc_with_index(olc)) == exists, 0); - if (exists) { - let actual_stake = total_coins(table::borrow(&pool.inactive_shares, olc_with_index(olc))); - assert!(actual_stake == stake, actual_stake); - } else { - assert!(0 == stake, 0); - } - } - - #[test_only] - public fun setup_vote( - aptos_framework: &signer, - validator: &signer, - enable_partial_voting: bool, - ): u64 acquires DelegationPoolOwnership, DelegationPool, GovernanceRecords, BeneficiaryForOperator, NextCommissionPercentage, DelegationPoolAllowlisting { - initialize_for_test_no_reward(aptos_framework); - aptos_governance::initialize_for_test( - aptos_framework, - (10 * ONE_APT as u128), - 100 * ONE_APT, - 1000, - ); - aptos_governance::initialize_partial_voting(aptos_framework); - - initialize_test_validator(validator, 100 * ONE_APT, true, false); - - let validator_address = signer::address_of(validator); - let pool_address = get_owned_pool_address(validator_address); - // Delegation pool is created before partial governance voting feature flag is enabled. So this delegation - // pool's voter is its owner. - assert!(stake::get_delegated_voter(pool_address) == validator_address, 1); - assert!(!partial_governance_voting_enabled(pool_address), 1); - end_aptos_epoch(); - - // Create 1 proposals and vote for proposal1. - let execution_hash = vector::empty(); - vector::push_back(&mut execution_hash, 1); - let proposal_id = aptos_governance::create_proposal_v2_impl( - validator, - pool_address, - execution_hash, - b"", - b"", - true, - ); - if (enable_partial_voting) { - features::change_feature_flags_for_testing( - aptos_framework, - vector[features::get_partial_governance_voting( - ), features::get_delegation_pool_partial_governance_voting()], - vector[]); - enable_partial_governance_voting(pool_address); - }; - proposal_id - } - - #[test_only] - public fun total_coins_inactive(pool_address: address): u64 acquires DelegationPool { - borrow_global(pool_address).total_coins_inactive - } -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/dispatchable_fungible_asset.move b/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/dispatchable_fungible_asset.move deleted file mode 100644 index 5a70aff95..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/dispatchable_fungible_asset.move +++ /dev/null @@ -1,228 +0,0 @@ -/// This defines the fungible asset module that can issue fungible asset of any `Metadata` object. The -/// metadata object can be any object that equipped with `Metadata` resource. -/// -/// The dispatchable_fungible_asset wraps the existing fungible_asset module and adds the ability for token issuer -/// to customize the logic for withdraw and deposit operations. For example: -/// -/// - Deflation token: a fixed percentage of token will be destructed upon transfer. -/// - Transfer allowlist: token can only be transfered to addresses in the allow list. -/// - Predicated transfer: transfer can only happen when some certain predicate has been met. -/// - Loyalty token: a fixed loyalty will be paid to a designated address when a fungible asset transfer happens -/// -/// The api listed here intended to be an in-place replacement for defi applications that uses fungible_asset api directly -/// and is safe for non-dispatchable (aka vanilla) fungible assets as well. -/// -/// See AIP-73 for further discussion -/// -module aptos_framework::dispatchable_fungible_asset { - use aptos_framework::fungible_asset::{Self, FungibleAsset, TransferRef}; - use aptos_framework::function_info::{Self, FunctionInfo}; - use aptos_framework::object::{Self, ConstructorRef, Object}; - - use std::error; - use std::features; - use std::option::{Self, Option}; - - /// TransferRefStore doesn't exist on the fungible asset type. - const ESTORE_NOT_FOUND: u64 = 1; - /// Recipient is not getting the guaranteed value; - const EAMOUNT_MISMATCH: u64 = 2; - /// Feature is not activated yet on the network. - const ENOT_ACTIVATED: u64 = 3; - /// Dispatch target is not loaded. - const ENOT_LOADED: u64 = 4; - - #[resource_group_member(group = aptos_framework::object::ObjectGroup)] - struct TransferRefStore has key { - transfer_ref: TransferRef - } - - public fun register_dispatch_functions( - constructor_ref: &ConstructorRef, - withdraw_function: Option, - deposit_function: Option, - derived_balance_function: Option, - ) { - fungible_asset::register_dispatch_functions( - constructor_ref, - withdraw_function, - deposit_function, - derived_balance_function, - ); - let store_obj = &object::generate_signer(constructor_ref); - move_to( - store_obj, - TransferRefStore { - transfer_ref: fungible_asset::generate_transfer_ref(constructor_ref), - } - ); - } - - public fun register_derive_supply_dispatch_function( - constructor_ref: &ConstructorRef, - dispatch_function: Option - ) { - fungible_asset::register_derive_supply_dispatch_function( - constructor_ref, - dispatch_function - ); - } - - /// Withdraw `amount` of the fungible asset from `store` by the owner. - /// - /// The semantics of deposit will be governed by the function specified in DispatchFunctionStore. - public fun withdraw( - owner: &signer, - store: Object, - amount: u64, - ): FungibleAsset acquires TransferRefStore { - fungible_asset::withdraw_sanity_check(owner, store, false); - let func_opt = fungible_asset::withdraw_dispatch_function(store); - if (option::is_some(&func_opt)) { - assert!( - features::dispatchable_fungible_asset_enabled(), - error::aborted(ENOT_ACTIVATED) - ); - let start_balance = fungible_asset::balance(store); - let func = option::borrow(&func_opt); - function_info::load_module_from_function(func); - let fa = dispatchable_withdraw( - store, - amount, - borrow_transfer_ref(store), - func, - ); - let end_balance = fungible_asset::balance(store); - assert!(amount <= start_balance - end_balance, error::aborted(EAMOUNT_MISMATCH)); - fa - } else { - fungible_asset::withdraw_internal(object::object_address(&store), amount) - } - } - - /// Deposit `amount` of the fungible asset to `store`. - /// - /// The semantics of deposit will be governed by the function specified in DispatchFunctionStore. - public fun deposit(store: Object, fa: FungibleAsset) acquires TransferRefStore { - fungible_asset::deposit_sanity_check(store, false); - let func_opt = fungible_asset::deposit_dispatch_function(store); - if (option::is_some(&func_opt)) { - assert!( - features::dispatchable_fungible_asset_enabled(), - error::aborted(ENOT_ACTIVATED) - ); - let func = option::borrow(&func_opt); - function_info::load_module_from_function(func); - dispatchable_deposit( - store, - fa, - borrow_transfer_ref(store), - func - ) - } else { - fungible_asset::deposit_internal(object::object_address(&store), fa) - } - } - - /// Transfer an `amount` of fungible asset from `from_store`, which should be owned by `sender`, to `receiver`. - /// Note: it does not move the underlying object. - public entry fun transfer( - sender: &signer, - from: Object, - to: Object, - amount: u64, - ) acquires TransferRefStore { - let fa = withdraw(sender, from, amount); - deposit(to, fa); - } - - /// Transfer an `amount` of fungible asset from `from_store`, which should be owned by `sender`, to `receiver`. - /// The recipient is guranteed to receive asset greater than the expected amount. - /// Note: it does not move the underlying object. - public entry fun transfer_assert_minimum_deposit( - sender: &signer, - from: Object, - to: Object, - amount: u64, - expected: u64 - ) acquires TransferRefStore { - let start = fungible_asset::balance(to); - let fa = withdraw(sender, from, amount); - deposit(to, fa); - let end = fungible_asset::balance(to); - assert!(end - start >= expected, error::aborted(EAMOUNT_MISMATCH)); - } - - #[view] - /// Get the derived value of store using the overloaded hook. - /// - /// The semantics of value will be governed by the function specified in DispatchFunctionStore. - public fun derived_balance(store: Object): u64 { - let func_opt = fungible_asset::derived_balance_dispatch_function(store); - if (option::is_some(&func_opt)) { - assert!( - features::dispatchable_fungible_asset_enabled(), - error::aborted(ENOT_ACTIVATED) - ); - let func = option::borrow(&func_opt); - function_info::load_module_from_function(func); - dispatchable_derived_balance(store, func) - } else { - fungible_asset::balance(store) - } - } - - #[view] - /// Get the derived supply of the fungible asset using the overloaded hook. - /// - /// The semantics of supply will be governed by the function specified in DeriveSupplyDispatch. - public fun derived_supply(metadata: Object): Option { - let func_opt = fungible_asset::derived_supply_dispatch_function(metadata); - if (option::is_some(&func_opt)) { - assert!( - features::dispatchable_fungible_asset_enabled(), - error::aborted(ENOT_ACTIVATED) - ); - let func = option::borrow(&func_opt); - function_info::load_module_from_function(func); - dispatchable_derived_supply(metadata, func) - } else { - fungible_asset::supply(metadata) - } - } - - inline fun borrow_transfer_ref(metadata: Object): &TransferRef acquires TransferRefStore { - let metadata_addr = object::object_address( - &fungible_asset::store_metadata(metadata) - ); - assert!( - exists(metadata_addr), - error::not_found(ESTORE_NOT_FOUND) - ); - &borrow_global(metadata_addr).transfer_ref - } - - native fun dispatchable_withdraw( - store: Object, - amount: u64, - transfer_ref: &TransferRef, - function: &FunctionInfo, - ): FungibleAsset; - - native fun dispatchable_deposit( - store: Object, - fa: FungibleAsset, - transfer_ref: &TransferRef, - function: &FunctionInfo, - ); - - native fun dispatchable_derived_balance( - store: Object, - function: &FunctionInfo, - ): u64; - - native fun dispatchable_derived_supply( - store: Object, - function: &FunctionInfo, - ): Option; -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/dkg.move b/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/dkg.move deleted file mode 100644 index 8e55ccb2a..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/dkg.move +++ /dev/null @@ -1,121 +0,0 @@ -/// DKG on-chain states and helper functions. -module aptos_framework::dkg { - use std::error; - use std::option; - use std::option::Option; - use aptos_framework::event::emit; - use aptos_framework::randomness_config::RandomnessConfig; - use aptos_framework::system_addresses; - use aptos_framework::timestamp; - use aptos_framework::validator_consensus_info::ValidatorConsensusInfo; - friend aptos_framework::block; - friend aptos_framework::reconfiguration_with_dkg; - - const EDKG_IN_PROGRESS: u64 = 1; - const EDKG_NOT_IN_PROGRESS: u64 = 2; - - /// This can be considered as the public input of DKG. - struct DKGSessionMetadata has copy, drop, store { - dealer_epoch: u64, - randomness_config: RandomnessConfig, - dealer_validator_set: vector, - target_validator_set: vector, - } - - #[event] - struct DKGStartEvent has drop, store { - session_metadata: DKGSessionMetadata, - start_time_us: u64, - } - - /// The input and output of a DKG session. - /// The validator set of epoch `x` works together for an DKG output for the target validator set of epoch `x+1`. - struct DKGSessionState has copy, store, drop { - metadata: DKGSessionMetadata, - start_time_us: u64, - transcript: vector, - } - - /// The completed and in-progress DKG sessions. - struct DKGState has key { - last_completed: Option, - in_progress: Option, - } - - /// Called in genesis to initialize on-chain states. - public fun initialize(aptos_framework: &signer) { - system_addresses::assert_aptos_framework(aptos_framework); - if (!exists(@aptos_framework)) { - move_to( - aptos_framework, - DKGState { - last_completed: std::option::none(), - in_progress: std::option::none(), - } - ); - } - } - - /// Mark on-chain DKG state as in-progress. Notify validators to start DKG. - /// Abort if a DKG is already in progress. - public(friend) fun start( - dealer_epoch: u64, - randomness_config: RandomnessConfig, - dealer_validator_set: vector, - target_validator_set: vector, - ) acquires DKGState { - let dkg_state = borrow_global_mut(@aptos_framework); - let new_session_metadata = DKGSessionMetadata { - dealer_epoch, - randomness_config, - dealer_validator_set, - target_validator_set, - }; - let start_time_us = timestamp::now_microseconds(); - dkg_state.in_progress = std::option::some(DKGSessionState { - metadata: new_session_metadata, - start_time_us, - transcript: vector[], - }); - - emit(DKGStartEvent { - start_time_us, - session_metadata: new_session_metadata, - }); - } - - /// Put a transcript into the currently incomplete DKG session, then mark it completed. - /// - /// Abort if DKG is not in progress. - public(friend) fun finish(transcript: vector) acquires DKGState { - let dkg_state = borrow_global_mut(@aptos_framework); - assert!(option::is_some(&dkg_state.in_progress), error::invalid_state(EDKG_NOT_IN_PROGRESS)); - let session = option::extract(&mut dkg_state.in_progress); - session.transcript = transcript; - dkg_state.last_completed = option::some(session); - dkg_state.in_progress = option::none(); - } - - /// Delete the currently incomplete session, if it exists. - public fun try_clear_incomplete_session(fx: &signer) acquires DKGState { - system_addresses::assert_aptos_framework(fx); - if (exists(@aptos_framework)) { - let dkg_state = borrow_global_mut(@aptos_framework); - dkg_state.in_progress = option::none(); - } - } - - /// Return the incomplete DKG session state, if it exists. - public fun incomplete_session(): Option acquires DKGState { - if (exists(@aptos_framework)) { - borrow_global(@aptos_framework).in_progress - } else { - option::none() - } - } - - /// Return the dealer epoch of a `DKGSessionState`. - public fun session_dealer_epoch(session: &DKGSessionState): u64 { - session.metadata.dealer_epoch - } -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/event.move b/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/event.move deleted file mode 100644 index 542808163..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/event.move +++ /dev/null @@ -1,92 +0,0 @@ -/// The Event module defines an `EventHandleGenerator` that is used to create -/// `EventHandle`s with unique GUIDs. It contains a counter for the number -/// of `EventHandle`s it generates. An `EventHandle` is used to count the number of -/// events emitted to a handle and emit events to the event store. -module aptos_framework::event { - use std::bcs; - - use aptos_framework::guid::GUID; - - friend aptos_framework::account; - friend aptos_framework::object; - - /// Emit a module event with payload `msg`. - public fun emit(msg: T) { - write_module_event_to_store(msg); - } - - /// Log `msg` with the event stream identified by `T` - native fun write_module_event_to_store(msg: T); - - #[test_only] - public native fun emitted_events(): vector; - - #[test_only] - public fun was_event_emitted(msg: &T): bool { - use std::vector; - vector::contains(&emitted_events(), msg) - } - - #[deprecated] - /// A handle for an event such that: - /// 1. Other modules can emit events to this handle. - /// 2. Storage can use this handle to prove the total number of events that happened in the past. - struct EventHandle has store { - /// Total number of events emitted to this event stream. - counter: u64, - /// A globally unique ID for this event stream. - guid: GUID, - } - - #[deprecated] - /// Use EventHandleGenerator to generate a unique event handle for `sig` - public(friend) fun new_event_handle(guid: GUID): EventHandle { - EventHandle { - counter: 0, - guid, - } - } - - #[deprecated] - /// Emit an event with payload `msg` by using `handle_ref`'s key and counter. - public fun emit_event(handle_ref: &mut EventHandle, msg: T) { - write_to_event_store(bcs::to_bytes(&handle_ref.guid), handle_ref.counter, msg); - spec { - assume handle_ref.counter + 1 <= MAX_U64; - }; - handle_ref.counter = handle_ref.counter + 1; - } - - #[deprecated] - /// Return the GUID associated with this EventHandle - public fun guid(handle_ref: &EventHandle): &GUID { - &handle_ref.guid - } - - #[deprecated] - /// Return the current counter associated with this EventHandle - public fun counter(handle_ref: &EventHandle): u64 { - handle_ref.counter - } - - #[deprecated] - /// Log `msg` as the `count`th event associated with the event stream identified by `guid` - native fun write_to_event_store(guid: vector, count: u64, msg: T); - - #[deprecated] - /// Destroy a unique handle. - public fun destroy_handle(handle: EventHandle) { - EventHandle { counter: _, guid: _ } = handle; - } - - #[deprecated] - #[test_only] - public native fun emitted_events_by_handle(handle: &EventHandle): vector; - - #[deprecated] - #[test_only] - public fun was_event_emitted_by_handle(handle: &EventHandle, msg: &T): bool { - use std::vector; - vector::contains(&emitted_events_by_handle(handle), msg) - } -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/execution_config.move b/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/execution_config.move deleted file mode 100644 index 6322a6cfe..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/execution_config.move +++ /dev/null @@ -1,66 +0,0 @@ -/// Maintains the execution config for the blockchain. The config is stored in a -/// Reconfiguration, and may be updated by root. -module aptos_framework::execution_config { - use aptos_framework::config_buffer; - use std::error; - use std::vector; - use aptos_framework::chain_status; - - use aptos_framework::reconfiguration; - use aptos_framework::system_addresses; - friend aptos_framework::genesis; - friend aptos_framework::reconfiguration_with_dkg; - - struct ExecutionConfig has drop, key, store { - config: vector, - } - - /// The provided on chain config bytes are empty or invalid - const EINVALID_CONFIG: u64 = 1; - - /// Deprecated by `set_for_next_epoch()`. - /// - /// WARNING: calling this while randomness is enabled will trigger a new epoch without randomness! - /// - /// TODO: update all the tests that reference this function, then disable this function. - public fun set(account: &signer, config: vector) acquires ExecutionConfig { - system_addresses::assert_aptos_framework(account); - chain_status::assert_genesis(); - - assert!(vector::length(&config) > 0, error::invalid_argument(EINVALID_CONFIG)); - - if (exists(@aptos_framework)) { - let config_ref = &mut borrow_global_mut(@aptos_framework).config; - *config_ref = config; - } else { - move_to(account, ExecutionConfig { config }); - }; - // Need to trigger reconfiguration so validator nodes can sync on the updated configs. - reconfiguration::reconfigure(); - } - - /// This can be called by on-chain governance to update on-chain execution configs for the next epoch. - /// Example usage: - /// ``` - /// aptos_framework::execution_config::set_for_next_epoch(&framework_signer, some_config_bytes); - /// aptos_framework::aptos_governance::reconfigure(&framework_signer); - /// ``` - public fun set_for_next_epoch(account: &signer, config: vector) { - system_addresses::assert_aptos_framework(account); - assert!(vector::length(&config) > 0, error::invalid_argument(EINVALID_CONFIG)); - config_buffer::upsert(ExecutionConfig { config }); - } - - /// Only used in reconfigurations to apply the pending `ExecutionConfig`, if there is any. - public(friend) fun on_new_epoch(framework: &signer) acquires ExecutionConfig { - system_addresses::assert_aptos_framework(framework); - if (config_buffer::does_exist()) { - let config = config_buffer::extract(); - if (exists(@aptos_framework)) { - *borrow_global_mut(@aptos_framework) = config; - } else { - move_to(framework, config); - }; - } - } -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/function_info.move b/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/function_info.move deleted file mode 100644 index 112a1c33b..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/function_info.move +++ /dev/null @@ -1,100 +0,0 @@ -/// The `function_info` module defines the `FunctionInfo` type which simulates a function pointer. -module aptos_framework::function_info { - use std::error; - use std::features; - use std::signer; - use std::string::{Self, String}; - - friend aptos_framework::fungible_asset; - friend aptos_framework::dispatchable_fungible_asset; - - /// String is not a valid Move identifier - const EINVALID_IDENTIFIER: u64 = 1; - /// Function specified in the FunctionInfo doesn't exist on chain. - const EINVALID_FUNCTION: u64 = 2; - /// Feature hasn't been activated yet. - const ENOT_ACTIVATED: u64 = 3; - - /// A `String` holds a sequence of bytes which is guaranteed to be in utf8 format. - struct FunctionInfo has copy, drop, store { - module_address: address, - module_name: String, - function_name: String, - } - - /// Creates a new function info from names. - public fun new_function_info( - module_signer: &signer, - module_name: String, - function_name: String, - ): FunctionInfo { - new_function_info_from_address( - signer::address_of(module_signer), - module_name, - function_name, - ) - } - - public fun new_function_info_from_address( - module_address: address, - module_name: String, - function_name: String, - ): FunctionInfo { - assert!( - is_identifier(string::bytes(&module_name)), - EINVALID_IDENTIFIER - ); - assert!( - is_identifier(string::bytes(&function_name)), - EINVALID_IDENTIFIER - ); - FunctionInfo { - module_address, - module_name, - function_name, - } - } - - /// Check if the dispatch target function meets the type requirements of the disptach entry point. - /// - /// framework_function is the dispatch native function defined in the aptos_framework. - /// dispatch_target is the function passed in by the user. - /// - /// dispatch_target should have the same signature (same argument type, same generics constraint) except - /// that the framework_function will have a `&FunctionInfo` in the last argument that will instruct the VM which - /// function to jump to. - /// - /// dispatch_target also needs to be public so the type signature will remain unchanged. - public(friend) fun check_dispatch_type_compatibility( - framework_function: &FunctionInfo, - dispatch_target: &FunctionInfo, - ): bool { - assert!( - features::dispatchable_fungible_asset_enabled(), - error::aborted(ENOT_ACTIVATED) - ); - load_function_impl(dispatch_target); - check_dispatch_type_compatibility_impl(framework_function, dispatch_target) - } - - /// Load up a function into VM's loader and charge for its dependencies - /// - /// It is **critical** to make sure that this function is invoked before `check_dispatch_type_compatibility` - /// or performing any other dispatching logic to ensure: - /// 1. We properly charge gas for the function to dispatch. - /// 2. The function is loaded in the cache so that we can perform further type checking/dispatching logic. - /// - /// Calling `check_dispatch_type_compatibility_impl` or dispatch without loading up the module would yield an error - /// if such module isn't accessed previously in the transaction. - public(friend) fun load_module_from_function(f: &FunctionInfo) { - load_function_impl(f) - } - - native fun check_dispatch_type_compatibility_impl(lhs: &FunctionInfo, r: &FunctionInfo): bool; - native fun is_identifier(s: &vector): bool; - native fun load_function_impl(f: &FunctionInfo); - - // Test only dependencies so we can invoke those friend functions. - #[test_only] - friend aptos_framework::function_info_tests; -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/fungible_asset.move b/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/fungible_asset.move deleted file mode 100644 index 50a77348c..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/fungible_asset.move +++ /dev/null @@ -1,1673 +0,0 @@ -/// This defines the fungible asset module that can issue fungible asset of any `Metadata` object. The -/// metadata object can be any object that equipped with `Metadata` resource. -module aptos_framework::fungible_asset { - use aptos_framework::aggregator_v2::{Self, Aggregator}; - use aptos_framework::create_signer; - use aptos_framework::event; - use aptos_framework::function_info::{Self, FunctionInfo}; - use aptos_framework::object::{Self, Object, ConstructorRef, DeleteRef, ExtendRef}; - use std::string; - use std::features; - - use std::error; - use std::option::{Self, Option}; - use std::signer; - use std::string::String; - - friend aptos_framework::coin; - friend aptos_framework::primary_fungible_store; - friend aptos_framework::aptos_account; - - friend aptos_framework::dispatchable_fungible_asset; - - /// Amount cannot be zero. - const EAMOUNT_CANNOT_BE_ZERO: u64 = 1; - /// The transfer ref and the fungible asset do not match. - const ETRANSFER_REF_AND_FUNGIBLE_ASSET_MISMATCH: u64 = 2; - /// Store is disabled from sending and receiving this fungible asset. - const ESTORE_IS_FROZEN: u64 = 3; - /// Insufficient balance to withdraw or transfer. - const EINSUFFICIENT_BALANCE: u64 = 4; - /// The fungible asset's supply has exceeded maximum. - const EMAX_SUPPLY_EXCEEDED: u64 = 5; - /// Fungible asset do not match when merging. - const EFUNGIBLE_ASSET_MISMATCH: u64 = 6; - /// The mint ref and the store do not match. - const EMINT_REF_AND_STORE_MISMATCH: u64 = 7; - /// Account is not the store's owner. - const ENOT_STORE_OWNER: u64 = 8; - /// Transfer ref and store do not match. - const ETRANSFER_REF_AND_STORE_MISMATCH: u64 = 9; - /// Burn ref and store do not match. - const EBURN_REF_AND_STORE_MISMATCH: u64 = 10; - /// Fungible asset and store do not match. - const EFUNGIBLE_ASSET_AND_STORE_MISMATCH: u64 = 11; - /// Cannot destroy non-empty fungible assets. - const EAMOUNT_IS_NOT_ZERO: u64 = 12; - /// Burn ref and fungible asset do not match. - const EBURN_REF_AND_FUNGIBLE_ASSET_MISMATCH: u64 = 13; - /// Cannot destroy fungible stores with a non-zero balance. - const EBALANCE_IS_NOT_ZERO: u64 = 14; - /// Name of the fungible asset metadata is too long - const ENAME_TOO_LONG: u64 = 15; - /// Symbol of the fungible asset metadata is too long - const ESYMBOL_TOO_LONG: u64 = 16; - /// Decimals is over the maximum of 32 - const EDECIMALS_TOO_LARGE: u64 = 17; - /// Fungibility is only available for non-deletable objects. - const EOBJECT_IS_DELETABLE: u64 = 18; - /// URI for the icon of the fungible asset metadata is too long - const EURI_TOO_LONG: u64 = 19; - /// The fungible asset's supply will be negative which should be impossible. - const ESUPPLY_UNDERFLOW: u64 = 20; - /// Supply resource is not found for a metadata object. - const ESUPPLY_NOT_FOUND: u64 = 21; - /// Flag for Concurrent Supply not enabled - const ECONCURRENT_SUPPLY_NOT_ENABLED: u64 = 22; - /// Flag for the existence of fungible store. - const EFUNGIBLE_STORE_EXISTENCE: u64 = 23; - /// Account is not the owner of metadata object. - const ENOT_METADATA_OWNER: u64 = 24; - /// Provided withdraw function type doesn't meet the signature requirement. - const EWITHDRAW_FUNCTION_SIGNATURE_MISMATCH: u64 = 25; - /// Provided deposit function type doesn't meet the signature requirement. - const EDEPOSIT_FUNCTION_SIGNATURE_MISMATCH: u64 = 26; - /// Provided derived_balance function type doesn't meet the signature requirement. - const EDERIVED_BALANCE_FUNCTION_SIGNATURE_MISMATCH: u64 = 27; - /// Invalid withdraw/deposit on dispatchable token. The specified token has a dispatchable function hook. - /// Need to invoke dispatchable_fungible_asset::withdraw/deposit to perform transfer. - const EINVALID_DISPATCHABLE_OPERATIONS: u64 = 28; - /// Trying to re-register dispatch hook on a fungible asset. - const EALREADY_REGISTERED: u64 = 29; - /// Fungible metadata does not exist on this account. - const EFUNGIBLE_METADATA_EXISTENCE: u64 = 30; - /// Cannot register dispatch hook for APT. - const EAPT_NOT_DISPATCHABLE: u64 = 31; - /// Flag for Concurrent Supply not enabled - const ECONCURRENT_BALANCE_NOT_ENABLED: u64 = 32; - /// Provided derived_supply function type doesn't meet the signature requirement. - const EDERIVED_SUPPLY_FUNCTION_SIGNATURE_MISMATCH: u64 = 33; - - // - // Constants - // - - const MAX_NAME_LENGTH: u64 = 32; - const MAX_SYMBOL_LENGTH: u64 = 10; - const MAX_DECIMALS: u8 = 32; - const MAX_URI_LENGTH: u64 = 512; - - /// Maximum possible coin supply. - const MAX_U128: u128 = 340282366920938463463374607431768211455; - - #[resource_group_member(group = aptos_framework::object::ObjectGroup)] - struct Supply has key { - current: u128, - // option::none() means unlimited supply. - maximum: Option, - } - - #[resource_group_member(group = aptos_framework::object::ObjectGroup)] - struct ConcurrentSupply has key { - current: Aggregator, - } - - #[resource_group_member(group = aptos_framework::object::ObjectGroup)] - /// Metadata of a Fungible asset - struct Metadata has key, copy, drop { - /// Name of the fungible metadata, i.e., "USDT". - name: String, - /// Symbol of the fungible metadata, usually a shorter version of the name. - /// For example, Singapore Dollar is SGD. - symbol: String, - /// Number of decimals used for display purposes. - /// For example, if `decimals` equals `2`, a balance of `505` coins should - /// be displayed to a user as `5.05` (`505 / 10 ** 2`). - decimals: u8, - /// The Uniform Resource Identifier (uri) pointing to an image that can be used as the icon for this fungible - /// asset. - icon_uri: String, - /// The Uniform Resource Identifier (uri) pointing to the website for the fungible asset. - project_uri: String, - } - - #[resource_group_member(group = aptos_framework::object::ObjectGroup)] - /// Defines a `FungibleAsset`, such that all `FungibleStore`s stores are untransferable at - /// the object layer. - struct Untransferable has key {} - - #[resource_group_member(group = aptos_framework::object::ObjectGroup)] - /// The store object that holds fungible assets of a specific type associated with an account. - struct FungibleStore has key { - /// The address of the base metadata object. - metadata: Object, - /// The balance of the fungible metadata. - balance: u64, - /// If true, owner transfer is disabled that only `TransferRef` can move in/out from this store. - frozen: bool, - } - - #[resource_group_member(group = aptos_framework::object::ObjectGroup)] - struct DispatchFunctionStore has key { - withdraw_function: Option, - deposit_function: Option, - derived_balance_function: Option, - } - - #[resource_group_member(group = aptos_framework::object::ObjectGroup)] - struct DeriveSupply has key { - dispatch_function: Option - } - - #[resource_group_member(group = aptos_framework::object::ObjectGroup)] - /// The store object that holds concurrent fungible asset balance. - struct ConcurrentFungibleBalance has key { - /// The balance of the fungible metadata. - balance: Aggregator, - } - - /// FungibleAsset can be passed into function for type safety and to guarantee a specific amount. - /// FungibleAsset is ephemeral and cannot be stored directly. It must be deposited back into a store. - struct FungibleAsset { - metadata: Object, - amount: u64, - } - - /// MintRef can be used to mint the fungible asset into an account's store. - struct MintRef has drop, store { - metadata: Object - } - - /// TransferRef can be used to allow or disallow the owner of fungible assets from transferring the asset - /// and allow the holder of TransferRef to transfer fungible assets from any account. - struct TransferRef has drop, store { - metadata: Object - } - - /// BurnRef can be used to burn fungible assets from a given holder account. - struct BurnRef has drop, store { - metadata: Object - } - - /// MutateMetadataRef can be used to directly modify the fungible asset's Metadata. - struct MutateMetadataRef has drop, store { - metadata: Object - } - - #[event] - /// Emitted when fungible assets are deposited into a store. - struct Deposit has drop, store { - store: address, - amount: u64, - } - - #[event] - /// Emitted when fungible assets are withdrawn from a store. - struct Withdraw has drop, store { - store: address, - amount: u64, - } - - #[event] - /// Emitted when a store's frozen status is updated. - struct Frozen has drop, store { - store: address, - frozen: bool, - } - - inline fun default_to_concurrent_fungible_supply(): bool { - features::concurrent_fungible_assets_enabled() - } - - inline fun allow_upgrade_to_concurrent_fungible_balance(): bool { - features::concurrent_fungible_balance_enabled() - } - - inline fun default_to_concurrent_fungible_balance(): bool { - features::default_to_concurrent_fungible_balance_enabled() - } - - /// Make an existing object fungible by adding the Metadata resource. - /// This returns the capabilities to mint, burn, and transfer. - /// maximum_supply defines the behavior of maximum supply when monitoring: - /// - option::none(): Monitoring unlimited supply - /// (width of the field - MAX_U128 is the implicit maximum supply) - /// if option::some(MAX_U128) is used, it is treated as unlimited supply. - /// - option::some(max): Monitoring fixed supply with `max` as the maximum supply. - public fun add_fungibility( - constructor_ref: &ConstructorRef, - maximum_supply: Option, - name: String, - symbol: String, - decimals: u8, - icon_uri: String, - project_uri: String, - ): Object { - assert!(!object::can_generate_delete_ref(constructor_ref), error::invalid_argument(EOBJECT_IS_DELETABLE)); - let metadata_object_signer = &object::generate_signer(constructor_ref); - assert!(string::length(&name) <= MAX_NAME_LENGTH, error::out_of_range(ENAME_TOO_LONG)); - assert!(string::length(&symbol) <= MAX_SYMBOL_LENGTH, error::out_of_range(ESYMBOL_TOO_LONG)); - assert!(decimals <= MAX_DECIMALS, error::out_of_range(EDECIMALS_TOO_LARGE)); - assert!(string::length(&icon_uri) <= MAX_URI_LENGTH, error::out_of_range(EURI_TOO_LONG)); - assert!(string::length(&project_uri) <= MAX_URI_LENGTH, error::out_of_range(EURI_TOO_LONG)); - move_to(metadata_object_signer, - Metadata { - name, - symbol, - decimals, - icon_uri, - project_uri, - } - ); - - if (default_to_concurrent_fungible_supply()) { - let unlimited = option::is_none(&maximum_supply); - move_to(metadata_object_signer, ConcurrentSupply { - current: if (unlimited) { - aggregator_v2::create_unbounded_aggregator() - } else { - aggregator_v2::create_aggregator(option::extract(&mut maximum_supply)) - }, - }); - } else { - move_to(metadata_object_signer, Supply { - current: 0, - maximum: maximum_supply - }); - }; - - object::object_from_constructor_ref(constructor_ref) - } - - /// Set that only untransferable stores can be created for this fungible asset. - public fun set_untransferable(constructor_ref: &ConstructorRef) { - let metadata_addr = object::address_from_constructor_ref(constructor_ref); - assert!(exists(metadata_addr), error::not_found(EFUNGIBLE_METADATA_EXISTENCE)); - let metadata_signer = &object::generate_signer(constructor_ref); - move_to(metadata_signer, Untransferable {}); - } - - - #[view] - /// Returns true if the FA is untransferable. - public fun is_untransferable(metadata: Object): bool { - exists(object::object_address(&metadata)) - } - - /// Create a fungible asset store whose transfer rule would be overloaded by the provided function. - public(friend) fun register_dispatch_functions( - constructor_ref: &ConstructorRef, - withdraw_function: Option, - deposit_function: Option, - derived_balance_function: Option, - ) { - // Verify that caller type matches callee type so wrongly typed function cannot be registered. - option::for_each_ref(&withdraw_function, |withdraw_function| { - let dispatcher_withdraw_function_info = function_info::new_function_info_from_address( - @aptos_framework, - string::utf8(b"dispatchable_fungible_asset"), - string::utf8(b"dispatchable_withdraw"), - ); - - assert!( - function_info::check_dispatch_type_compatibility( - &dispatcher_withdraw_function_info, - withdraw_function - ), - error::invalid_argument( - EWITHDRAW_FUNCTION_SIGNATURE_MISMATCH - ) - ); - }); - - option::for_each_ref(&deposit_function, |deposit_function| { - let dispatcher_deposit_function_info = function_info::new_function_info_from_address( - @aptos_framework, - string::utf8(b"dispatchable_fungible_asset"), - string::utf8(b"dispatchable_deposit"), - ); - // Verify that caller type matches callee type so wrongly typed function cannot be registered. - assert!( - function_info::check_dispatch_type_compatibility( - &dispatcher_deposit_function_info, - deposit_function - ), - error::invalid_argument( - EDEPOSIT_FUNCTION_SIGNATURE_MISMATCH - ) - ); - }); - - option::for_each_ref(&derived_balance_function, |balance_function| { - let dispatcher_derived_balance_function_info = function_info::new_function_info_from_address( - @aptos_framework, - string::utf8(b"dispatchable_fungible_asset"), - string::utf8(b"dispatchable_derived_balance"), - ); - // Verify that caller type matches callee type so wrongly typed function cannot be registered. - assert!( - function_info::check_dispatch_type_compatibility( - &dispatcher_derived_balance_function_info, - balance_function - ), - error::invalid_argument( - EDERIVED_BALANCE_FUNCTION_SIGNATURE_MISMATCH - ) - ); - }); - register_dispatch_function_sanity_check(constructor_ref); - assert!( - !exists( - object::address_from_constructor_ref(constructor_ref) - ), - error::already_exists(EALREADY_REGISTERED) - ); - - let store_obj = &object::generate_signer(constructor_ref); - - // Store the overload function hook. - move_to( - store_obj, - DispatchFunctionStore { - withdraw_function, - deposit_function, - derived_balance_function, - } - ); - } - - /// Define the derived supply dispatch with the provided function. - public(friend) fun register_derive_supply_dispatch_function( - constructor_ref: &ConstructorRef, - dispatch_function: Option - ) { - // Verify that caller type matches callee type so wrongly typed function cannot be registered. - option::for_each_ref(&dispatch_function, |supply_function| { - let function_info = function_info::new_function_info_from_address( - @aptos_framework, - string::utf8(b"dispatchable_fungible_asset"), - string::utf8(b"dispatchable_derived_supply"), - ); - // Verify that caller type matches callee type so wrongly typed function cannot be registered. - assert!( - function_info::check_dispatch_type_compatibility( - &function_info, - supply_function - ), - error::invalid_argument( - EDERIVED_SUPPLY_FUNCTION_SIGNATURE_MISMATCH - ) - ); - }); - register_dispatch_function_sanity_check(constructor_ref); - assert!( - !exists( - object::address_from_constructor_ref(constructor_ref) - ), - error::already_exists(EALREADY_REGISTERED) - ); - - - let store_obj = &object::generate_signer(constructor_ref); - - // Store the overload function hook. - move_to( - store_obj, - DeriveSupply { - dispatch_function - } - ); - } - - /// Check the requirements for registering a dispatchable function. - inline fun register_dispatch_function_sanity_check( - constructor_ref: &ConstructorRef, - ) { - // Cannot register hook for APT. - assert!( - object::address_from_constructor_ref(constructor_ref) != @aptos_fungible_asset, - error::permission_denied(EAPT_NOT_DISPATCHABLE) - ); - assert!( - !object::can_generate_delete_ref(constructor_ref), - error::invalid_argument(EOBJECT_IS_DELETABLE) - ); - assert!( - exists( - object::address_from_constructor_ref(constructor_ref) - ), - error::not_found(EFUNGIBLE_METADATA_EXISTENCE), - ); - } - - /// Creates a mint ref that can be used to mint fungible assets from the given fungible object's constructor ref. - /// This can only be called at object creation time as constructor_ref is only available then. - public fun generate_mint_ref(constructor_ref: &ConstructorRef): MintRef { - let metadata = object::object_from_constructor_ref(constructor_ref); - MintRef { metadata } - } - - /// Creates a burn ref that can be used to burn fungible assets from the given fungible object's constructor ref. - /// This can only be called at object creation time as constructor_ref is only available then. - public fun generate_burn_ref(constructor_ref: &ConstructorRef): BurnRef { - let metadata = object::object_from_constructor_ref(constructor_ref); - BurnRef { metadata } - } - - /// Creates a transfer ref that can be used to freeze/unfreeze/transfer fungible assets from the given fungible - /// object's constructor ref. - /// This can only be called at object creation time as constructor_ref is only available then. - public fun generate_transfer_ref(constructor_ref: &ConstructorRef): TransferRef { - let metadata = object::object_from_constructor_ref(constructor_ref); - TransferRef { metadata } - } - - /// Creates a mutate metadata ref that can be used to change the metadata information of fungible assets from the - /// given fungible object's constructor ref. - /// This can only be called at object creation time as constructor_ref is only available then. - public fun generate_mutate_metadata_ref(constructor_ref: &ConstructorRef): MutateMetadataRef { - let metadata = object::object_from_constructor_ref(constructor_ref); - MutateMetadataRef { metadata } - } - - #[view] - /// Get the current supply from the `metadata` object. - public fun supply(metadata: Object): Option acquires Supply, ConcurrentSupply { - let metadata_address = object::object_address(&metadata); - if (exists(metadata_address)) { - let supply = borrow_global(metadata_address); - option::some(aggregator_v2::read(&supply.current)) - } else if (exists(metadata_address)) { - let supply = borrow_global(metadata_address); - option::some(supply.current) - } else { - option::none() - } - } - - #[view] - /// Get the maximum supply from the `metadata` object. - /// If supply is unlimited (or set explicitly to MAX_U128), none is returned - public fun maximum(metadata: Object): Option acquires Supply, ConcurrentSupply { - let metadata_address = object::object_address(&metadata); - if (exists(metadata_address)) { - let supply = borrow_global(metadata_address); - let max_value = aggregator_v2::max_value(&supply.current); - if (max_value == MAX_U128) { - option::none() - } else { - option::some(max_value) - } - } else if (exists(metadata_address)) { - let supply = borrow_global(metadata_address); - supply.maximum - } else { - option::none() - } - } - - #[view] - /// Get the name of the fungible asset from the `metadata` object. - public fun name(metadata: Object): String acquires Metadata { - borrow_fungible_metadata(&metadata).name - } - - #[view] - /// Get the symbol of the fungible asset from the `metadata` object. - public fun symbol(metadata: Object): String acquires Metadata { - borrow_fungible_metadata(&metadata).symbol - } - - #[view] - /// Get the decimals from the `metadata` object. - public fun decimals(metadata: Object): u8 acquires Metadata { - borrow_fungible_metadata(&metadata).decimals - } - - #[view] - /// Get the icon uri from the `metadata` object. - public fun icon_uri(metadata: Object): String acquires Metadata { - borrow_fungible_metadata(&metadata).icon_uri - } - - #[view] - /// Get the project uri from the `metadata` object. - public fun project_uri(metadata: Object): String acquires Metadata { - borrow_fungible_metadata(&metadata).project_uri - } - - #[view] - /// Get the metadata struct from the `metadata` object. - public fun metadata(metadata: Object): Metadata acquires Metadata { - *borrow_fungible_metadata(&metadata) - } - - #[view] - /// Return whether the provided address has a store initialized. - public fun store_exists(store: address): bool { - store_exists_inline(store) - } - - /// Return whether the provided address has a store initialized. - inline fun store_exists_inline(store: address): bool { - exists(store) - } - - /// Return whether the provided address has a concurrent fungible balance initialized, - /// at the fungible store address. - inline fun concurrent_fungible_balance_exists_inline(store: address): bool { - exists(store) - } - - /// Return the underlying metadata object - public fun metadata_from_asset(fa: &FungibleAsset): Object { - fa.metadata - } - - #[view] - /// Return the underlying metadata object. - public fun store_metadata(store: Object): Object acquires FungibleStore { - borrow_store_resource(&store).metadata - } - - /// Return the `amount` of a given fungible asset. - public fun amount(fa: &FungibleAsset): u64 { - fa.amount - } - - #[view] - /// Get the balance of a given store. - public fun balance(store: Object): u64 acquires FungibleStore, ConcurrentFungibleBalance { - let store_addr = object::object_address(&store); - if (store_exists_inline(store_addr)) { - let store_balance = borrow_store_resource(&store).balance; - if (store_balance == 0 && concurrent_fungible_balance_exists_inline(store_addr)) { - let balance_resource = borrow_global(store_addr); - aggregator_v2::read(&balance_resource.balance) - } else { - store_balance - } - } else { - 0 - } - } - - #[view] - /// Check whether the balance of a given store is >= `amount`. - public fun is_balance_at_least(store: Object, amount: u64): bool acquires FungibleStore, ConcurrentFungibleBalance { - let store_addr = object::object_address(&store); - is_address_balance_at_least(store_addr, amount) - } - - /// Check whether the balance of a given store is >= `amount`. - public(friend) fun is_address_balance_at_least(store_addr: address, amount: u64): bool acquires FungibleStore, ConcurrentFungibleBalance { - if (store_exists_inline(store_addr)) { - let store_balance = borrow_global(store_addr).balance; - if (store_balance == 0 && concurrent_fungible_balance_exists_inline(store_addr)) { - let balance_resource = borrow_global(store_addr); - aggregator_v2::is_at_least(&balance_resource.balance, amount) - } else { - store_balance >= amount - } - } else { - amount == 0 - } - } - - #[view] - /// Return whether a store is frozen. - /// - /// If the store has not been created, we default to returning false so deposits can be sent to it. - public fun is_frozen(store: Object): bool acquires FungibleStore { - let store_addr = object::object_address(&store); - store_exists_inline(store_addr) && borrow_global(store_addr).frozen - } - - #[view] - /// Return whether a fungible asset type is dispatchable. - public fun is_store_dispatchable(store: Object): bool acquires FungibleStore { - let fa_store = borrow_store_resource(&store); - let metadata_addr = object::object_address(&fa_store.metadata); - exists(metadata_addr) - } - - public fun deposit_dispatch_function(store: Object): Option acquires FungibleStore, DispatchFunctionStore { - let fa_store = borrow_store_resource(&store); - let metadata_addr = object::object_address(&fa_store.metadata); - if(exists(metadata_addr)) { - borrow_global(metadata_addr).deposit_function - } else { - option::none() - } - } - - fun has_deposit_dispatch_function(metadata: Object): bool acquires DispatchFunctionStore { - let metadata_addr = object::object_address(&metadata); - // Short circuit on APT for better perf - if(metadata_addr != @aptos_fungible_asset && exists(metadata_addr)) { - option::is_some(&borrow_global(metadata_addr).deposit_function) - } else { - false - } - } - - public fun withdraw_dispatch_function(store: Object): Option acquires FungibleStore, DispatchFunctionStore { - let fa_store = borrow_store_resource(&store); - let metadata_addr = object::object_address(&fa_store.metadata); - if(exists(metadata_addr)) { - borrow_global(metadata_addr).withdraw_function - } else { - option::none() - } - } - - fun has_withdraw_dispatch_function(metadata: Object): bool acquires DispatchFunctionStore { - let metadata_addr = object::object_address(&metadata); - // Short circuit on APT for better perf - if (metadata_addr != @aptos_fungible_asset && exists(metadata_addr)) { - option::is_some(&borrow_global(metadata_addr).withdraw_function) - } else { - false - } - } - - public(friend) fun derived_balance_dispatch_function(store: Object): Option acquires FungibleStore, DispatchFunctionStore { - let fa_store = borrow_store_resource(&store); - let metadata_addr = object::object_address(&fa_store.metadata); - if (exists(metadata_addr)) { - borrow_global(metadata_addr).derived_balance_function - } else { - option::none() - } - } - - public(friend) fun derived_supply_dispatch_function(metadata: Object): Option acquires DeriveSupply { - let metadata_addr = object::object_address(&metadata); - if (exists(metadata_addr)) { - borrow_global(metadata_addr).dispatch_function - } else { - option::none() - } - } - - public fun asset_metadata(fa: &FungibleAsset): Object { - fa.metadata - } - - /// Get the underlying metadata object from the `MintRef`. - public fun mint_ref_metadata(ref: &MintRef): Object { - ref.metadata - } - - /// Get the underlying metadata object from the `TransferRef`. - public fun transfer_ref_metadata(ref: &TransferRef): Object { - ref.metadata - } - - /// Get the underlying metadata object from the `BurnRef`. - public fun burn_ref_metadata(ref: &BurnRef): Object { - ref.metadata - } - - /// Get the underlying metadata object from the `MutateMetadataRef`. - public fun object_from_metadata_ref(ref: &MutateMetadataRef): Object { - ref.metadata - } - - /// Transfer an `amount` of fungible asset from `from_store`, which should be owned by `sender`, to `receiver`. - /// Note: it does not move the underlying object. - public entry fun transfer( - sender: &signer, - from: Object, - to: Object, - amount: u64, - ) acquires FungibleStore, DispatchFunctionStore, ConcurrentFungibleBalance { - let fa = withdraw(sender, from, amount); - deposit(to, fa); - } - - /// Allow an object to hold a store for fungible assets. - /// Applications can use this to create multiple stores for isolating fungible assets for different purposes. - public fun create_store( - constructor_ref: &ConstructorRef, - metadata: Object, - ): Object { - let store_obj = &object::generate_signer(constructor_ref); - move_to(store_obj, FungibleStore { - metadata: object::convert(metadata), - balance: 0, - frozen: false, - }); - - if (is_untransferable(metadata)) { - object::set_untransferable(constructor_ref); - }; - - if (default_to_concurrent_fungible_balance()) { - move_to(store_obj, ConcurrentFungibleBalance { - balance: aggregator_v2::create_unbounded_aggregator(), - }); - }; - - object::object_from_constructor_ref(constructor_ref) - } - - /// Used to delete a store. Requires the store to be completely empty prior to removing it - public fun remove_store(delete_ref: &DeleteRef) acquires FungibleStore, FungibleAssetEvents, ConcurrentFungibleBalance { - let store = &object::object_from_delete_ref(delete_ref); - let addr = object::object_address(store); - let FungibleStore { metadata: _, balance, frozen: _ } - = move_from(addr); - assert!(balance == 0, error::permission_denied(EBALANCE_IS_NOT_ZERO)); - - if (concurrent_fungible_balance_exists_inline(addr)) { - let ConcurrentFungibleBalance { balance } = move_from(addr); - assert!(aggregator_v2::read(&balance) == 0, error::permission_denied(EBALANCE_IS_NOT_ZERO)); - }; - - // Cleanup deprecated event handles if exist. - if (exists(addr)) { - let FungibleAssetEvents { - deposit_events, - withdraw_events, - frozen_events, - } = move_from(addr); - event::destroy_handle(deposit_events); - event::destroy_handle(withdraw_events); - event::destroy_handle(frozen_events); - }; - } - - /// Withdraw `amount` of the fungible asset from `store` by the owner. - public fun withdraw( - owner: &signer, - store: Object, - amount: u64, - ): FungibleAsset acquires FungibleStore, DispatchFunctionStore, ConcurrentFungibleBalance { - withdraw_sanity_check(owner, store, true); - withdraw_internal(object::object_address(&store), amount) - } - - /// Check the permission for withdraw operation. - public(friend) fun withdraw_sanity_check( - owner: &signer, - store: Object, - abort_on_dispatch: bool, - ) acquires FungibleStore, DispatchFunctionStore { - assert!(object::owns(store, signer::address_of(owner)), error::permission_denied(ENOT_STORE_OWNER)); - let fa_store = borrow_store_resource(&store); - assert!( - !abort_on_dispatch || !has_withdraw_dispatch_function(fa_store.metadata), - error::invalid_argument(EINVALID_DISPATCHABLE_OPERATIONS) - ); - assert!(!fa_store.frozen, error::permission_denied(ESTORE_IS_FROZEN)); - } - - /// Deposit `amount` of the fungible asset to `store`. - public fun deposit_sanity_check( - store: Object, - abort_on_dispatch: bool - ) acquires FungibleStore, DispatchFunctionStore { - let fa_store = borrow_store_resource(&store); - assert!( - !abort_on_dispatch || !has_deposit_dispatch_function(fa_store.metadata), - error::invalid_argument(EINVALID_DISPATCHABLE_OPERATIONS) - ); - assert!(!fa_store.frozen, error::permission_denied(ESTORE_IS_FROZEN)); - } - - /// Deposit `amount` of the fungible asset to `store`. - public fun deposit(store: Object, fa: FungibleAsset) acquires FungibleStore, DispatchFunctionStore, ConcurrentFungibleBalance { - deposit_sanity_check(store, true); - deposit_internal(object::object_address(&store), fa); - } - - /// Mint the specified `amount` of the fungible asset. - public fun mint(ref: &MintRef, amount: u64): FungibleAsset acquires Supply, ConcurrentSupply { - let metadata = ref.metadata; - mint_internal(metadata, amount) - } - - /// CAN ONLY BE CALLED BY coin.move for migration. - public(friend) fun mint_internal( - metadata: Object, - amount: u64 - ): FungibleAsset acquires Supply, ConcurrentSupply { - increase_supply(&metadata, amount); - FungibleAsset { - metadata, - amount - } - } - - /// Mint the specified `amount` of the fungible asset to a destination store. - public fun mint_to(ref: &MintRef, store: Object, amount: u64) - acquires FungibleStore, Supply, ConcurrentSupply, DispatchFunctionStore, ConcurrentFungibleBalance { - deposit_sanity_check(store, false); - deposit_internal(object::object_address(&store), mint(ref, amount)); - } - - /// Enable/disable a store's ability to do direct transfers of the fungible asset. - public fun set_frozen_flag( - ref: &TransferRef, - store: Object, - frozen: bool, - ) acquires FungibleStore { - assert!( - ref.metadata == store_metadata(store), - error::invalid_argument(ETRANSFER_REF_AND_STORE_MISMATCH), - ); - set_frozen_flag_internal(store, frozen) - } - - public(friend) fun set_frozen_flag_internal( - store: Object, - frozen: bool - ) acquires FungibleStore { - let store_addr = object::object_address(&store); - borrow_global_mut(store_addr).frozen = frozen; - - event::emit(Frozen { store: store_addr, frozen }); - } - - /// Burns a fungible asset - public fun burn(ref: &BurnRef, fa: FungibleAsset) acquires Supply, ConcurrentSupply { - assert!( - ref.metadata == metadata_from_asset(&fa), - error::invalid_argument(EBURN_REF_AND_FUNGIBLE_ASSET_MISMATCH) - ); - burn_internal(fa); - } - - /// CAN ONLY BE CALLED BY coin.move for migration. - public(friend) fun burn_internal( - fa: FungibleAsset - ): u64 acquires Supply, ConcurrentSupply { - let FungibleAsset { - metadata, - amount - } = fa; - decrease_supply(&metadata, amount); - amount - } - - /// Burn the `amount` of the fungible asset from the given store. - public fun burn_from( - ref: &BurnRef, - store: Object, - amount: u64 - ) acquires FungibleStore, Supply, ConcurrentSupply, ConcurrentFungibleBalance { - // ref metadata match is checked in burn() call - burn(ref, withdraw_internal(object::object_address(&store), amount)); - } - - public(friend) fun address_burn_from( - ref: &BurnRef, - store_addr: address, - amount: u64 - ) acquires FungibleStore, Supply, ConcurrentSupply, ConcurrentFungibleBalance { - // ref metadata match is checked in burn() call - burn(ref, withdraw_internal(store_addr, amount)); - } - - /// Withdraw `amount` of the fungible asset from the `store` ignoring `frozen`. - public fun withdraw_with_ref( - ref: &TransferRef, - store: Object, - amount: u64 - ): FungibleAsset acquires FungibleStore, ConcurrentFungibleBalance { - assert!( - ref.metadata == store_metadata(store), - error::invalid_argument(ETRANSFER_REF_AND_STORE_MISMATCH), - ); - withdraw_internal(object::object_address(&store), amount) - } - - /// Deposit the fungible asset into the `store` ignoring `frozen`. - public fun deposit_with_ref( - ref: &TransferRef, - store: Object, - fa: FungibleAsset - ) acquires FungibleStore, ConcurrentFungibleBalance { - assert!( - ref.metadata == fa.metadata, - error::invalid_argument(ETRANSFER_REF_AND_FUNGIBLE_ASSET_MISMATCH) - ); - deposit_internal(object::object_address(&store), fa); - } - - /// Transfer `amount` of the fungible asset with `TransferRef` even it is frozen. - public fun transfer_with_ref( - transfer_ref: &TransferRef, - from: Object, - to: Object, - amount: u64, - ) acquires FungibleStore, ConcurrentFungibleBalance { - let fa = withdraw_with_ref(transfer_ref, from, amount); - deposit_with_ref(transfer_ref, to, fa); - } - - /// Mutate specified fields of the fungible asset's `Metadata`. - public fun mutate_metadata( - metadata_ref: &MutateMetadataRef, - name: Option, - symbol: Option, - decimals: Option, - icon_uri: Option, - project_uri: Option, - ) acquires Metadata { - let metadata_address = object::object_address(&metadata_ref.metadata); - let mutable_metadata = borrow_global_mut(metadata_address); - - if (option::is_some(&name)){ - let name = option::extract(&mut name); - assert!(string::length(&name) <= MAX_NAME_LENGTH, error::out_of_range(ENAME_TOO_LONG)); - mutable_metadata.name = name; - }; - if (option::is_some(&symbol)){ - let symbol = option::extract(&mut symbol); - assert!(string::length(&symbol) <= MAX_SYMBOL_LENGTH, error::out_of_range(ESYMBOL_TOO_LONG)); - mutable_metadata.symbol = symbol; - }; - if (option::is_some(&decimals)){ - let decimals = option::extract(&mut decimals); - assert!(decimals <= MAX_DECIMALS, error::out_of_range(EDECIMALS_TOO_LARGE)); - mutable_metadata.decimals = decimals; - }; - if (option::is_some(&icon_uri)){ - let icon_uri = option::extract(&mut icon_uri); - assert!(string::length(&icon_uri) <= MAX_URI_LENGTH, error::out_of_range(EURI_TOO_LONG)); - mutable_metadata.icon_uri = icon_uri; - }; - if (option::is_some(&project_uri)){ - let project_uri = option::extract(&mut project_uri); - assert!(string::length(&project_uri) <= MAX_URI_LENGTH, error::out_of_range(EURI_TOO_LONG)); - mutable_metadata.project_uri = project_uri; - }; - } - - /// Create a fungible asset with zero amount. - /// This can be useful when starting a series of computations where the initial value is 0. - public fun zero(metadata: Object): FungibleAsset { - FungibleAsset { - metadata: object::convert(metadata), - amount: 0, - } - } - - /// Extract a given amount from the given fungible asset and return a new one. - public fun extract(fungible_asset: &mut FungibleAsset, amount: u64): FungibleAsset { - assert!(fungible_asset.amount >= amount, error::invalid_argument(EINSUFFICIENT_BALANCE)); - fungible_asset.amount = fungible_asset.amount - amount; - FungibleAsset { - metadata: fungible_asset.metadata, - amount, - } - } - - /// "Merges" the two given fungible assets. The fungible asset passed in as `dst_fungible_asset` will have a value - /// equal to the sum of the two (`dst_fungible_asset` and `src_fungible_asset`). - public fun merge(dst_fungible_asset: &mut FungibleAsset, src_fungible_asset: FungibleAsset) { - let FungibleAsset { metadata, amount } = src_fungible_asset; - assert!(metadata == dst_fungible_asset.metadata, error::invalid_argument(EFUNGIBLE_ASSET_MISMATCH)); - dst_fungible_asset.amount = dst_fungible_asset.amount + amount; - } - - /// Destroy an empty fungible asset. - public fun destroy_zero(fungible_asset: FungibleAsset) { - let FungibleAsset { amount, metadata: _ } = fungible_asset; - assert!(amount == 0, error::invalid_argument(EAMOUNT_IS_NOT_ZERO)); - } - - public(friend) fun deposit_internal(store_addr: address, fa: FungibleAsset) acquires FungibleStore, ConcurrentFungibleBalance { - let FungibleAsset { metadata, amount } = fa; - assert!(exists(store_addr), error::not_found(EFUNGIBLE_STORE_EXISTENCE)); - let store = borrow_global_mut(store_addr); - assert!(metadata == store.metadata, error::invalid_argument(EFUNGIBLE_ASSET_AND_STORE_MISMATCH)); - - if (amount == 0) return; - - if (store.balance == 0 && concurrent_fungible_balance_exists_inline(store_addr)) { - let balance_resource = borrow_global_mut(store_addr); - aggregator_v2::add(&mut balance_resource.balance, amount); - } else { - store.balance = store.balance + amount; - }; - - event::emit(Deposit { store: store_addr, amount }); - } - - /// Extract `amount` of the fungible asset from `store`. - public(friend) fun withdraw_internal( - store_addr: address, - amount: u64, - ): FungibleAsset acquires FungibleStore, ConcurrentFungibleBalance { - assert!(exists(store_addr), error::not_found(EFUNGIBLE_STORE_EXISTENCE)); - - let store = borrow_global_mut(store_addr); - let metadata = store.metadata; - if (amount != 0) { - if (store.balance == 0 && concurrent_fungible_balance_exists_inline(store_addr)) { - let balance_resource = borrow_global_mut(store_addr); - assert!( - aggregator_v2::try_sub(&mut balance_resource.balance, amount), - error::invalid_argument(EINSUFFICIENT_BALANCE) - ); - } else { - assert!(store.balance >= amount, error::invalid_argument(EINSUFFICIENT_BALANCE)); - store.balance = store.balance - amount; - }; - - event::emit(Withdraw { store: store_addr, amount }); - }; - FungibleAsset { metadata, amount } - } - - /// Increase the supply of a fungible asset by minting. - fun increase_supply(metadata: &Object, amount: u64) acquires Supply, ConcurrentSupply { - if (amount == 0) { - return - }; - let metadata_address = object::object_address(metadata); - - if (exists(metadata_address)) { - let supply = borrow_global_mut(metadata_address); - assert!( - aggregator_v2::try_add(&mut supply.current, (amount as u128)), - error::out_of_range(EMAX_SUPPLY_EXCEEDED) - ); - } else if (exists(metadata_address)) { - let supply = borrow_global_mut(metadata_address); - if (option::is_some(&supply.maximum)) { - let max = *option::borrow_mut(&mut supply.maximum); - assert!( - max - supply.current >= (amount as u128), - error::out_of_range(EMAX_SUPPLY_EXCEEDED) - ) - }; - supply.current = supply.current + (amount as u128); - } else { - abort error::not_found(ESUPPLY_NOT_FOUND) - } - } - - /// Decrease the supply of a fungible asset by burning. - fun decrease_supply(metadata: &Object, amount: u64) acquires Supply, ConcurrentSupply { - if (amount == 0) { - return - }; - let metadata_address = object::object_address(metadata); - - if (exists(metadata_address)) { - let supply = borrow_global_mut(metadata_address); - - assert!( - aggregator_v2::try_sub(&mut supply.current, (amount as u128)), - error::out_of_range(ESUPPLY_UNDERFLOW) - ); - } else if (exists(metadata_address)) { - assert!(exists(metadata_address), error::not_found(ESUPPLY_NOT_FOUND)); - let supply = borrow_global_mut(metadata_address); - assert!( - supply.current >= (amount as u128), - error::invalid_state(ESUPPLY_UNDERFLOW) - ); - supply.current = supply.current - (amount as u128); - } else { - assert!(false, error::not_found(ESUPPLY_NOT_FOUND)); - } - } - - inline fun borrow_fungible_metadata( - metadata: &Object - ): &Metadata acquires Metadata { - let addr = object::object_address(metadata); - borrow_global(addr) - } - - inline fun borrow_fungible_metadata_mut( - metadata: &Object - ): &mut Metadata acquires Metadata { - let addr = object::object_address(metadata); - borrow_global_mut(addr) - } - - inline fun borrow_store_resource(store: &Object): &FungibleStore acquires FungibleStore { - let store_addr = object::object_address(store); - assert!(exists(store_addr), error::not_found(EFUNGIBLE_STORE_EXISTENCE)); - borrow_global(store_addr) - } - - public fun upgrade_to_concurrent( - ref: &ExtendRef, - ) acquires Supply { - let metadata_object_address = object::address_from_extend_ref(ref); - let metadata_object_signer = object::generate_signer_for_extending(ref); - assert!( - features::concurrent_fungible_assets_enabled(), - error::invalid_argument(ECONCURRENT_SUPPLY_NOT_ENABLED) - ); - assert!(exists(metadata_object_address), error::not_found(ESUPPLY_NOT_FOUND)); - let Supply { - current, - maximum, - } = move_from(metadata_object_address); - - let unlimited = option::is_none(&maximum); - let supply = ConcurrentSupply { - current: if (unlimited) { - aggregator_v2::create_unbounded_aggregator_with_value(current) - } - else { - aggregator_v2::create_aggregator_with_value(current, option::extract(&mut maximum)) - }, - }; - move_to(&metadata_object_signer, supply); - } - - public entry fun upgrade_store_to_concurrent( - owner: &signer, - store: Object, - ) acquires FungibleStore { - assert!(object::owns(store, signer::address_of(owner)), error::permission_denied(ENOT_STORE_OWNER)); - assert!(!is_frozen(store), error::invalid_argument(ESTORE_IS_FROZEN)); - assert!(allow_upgrade_to_concurrent_fungible_balance(), error::invalid_argument(ECONCURRENT_BALANCE_NOT_ENABLED)); - ensure_store_upgraded_to_concurrent_internal(object::object_address(&store)); - } - - /// Ensure a known `FungibleStore` has `ConcurrentFungibleBalance`. - fun ensure_store_upgraded_to_concurrent_internal( - fungible_store_address: address, - ) acquires FungibleStore { - if (exists(fungible_store_address)) { - return - }; - let store = borrow_global_mut(fungible_store_address); - let balance = aggregator_v2::create_unbounded_aggregator_with_value(store.balance); - store.balance = 0; - let object_signer = create_signer::create_signer(fungible_store_address); - move_to(&object_signer, ConcurrentFungibleBalance { balance }); - } - - #[test_only] - use aptos_framework::account; - - #[test_only] - #[resource_group_member(group = aptos_framework::object::ObjectGroup)] - - struct TestToken has key {} - - #[test_only] - public fun create_test_token(creator: &signer): (ConstructorRef, Object) { - account::create_account_for_test(signer::address_of(creator)); - let creator_ref = object::create_named_object(creator, b"TEST"); - let object_signer = object::generate_signer(&creator_ref); - move_to(&object_signer, TestToken {}); - - let token = object::object_from_constructor_ref(&creator_ref); - (creator_ref, token) - } - - #[test_only] - public fun init_test_metadata(constructor_ref: &ConstructorRef): (MintRef, TransferRef, BurnRef, MutateMetadataRef) { - add_fungibility( - constructor_ref, - option::some(100) /* max supply */, - string::utf8(b"TEST"), - string::utf8(b"@@"), - 0, - string::utf8(b"http://www.example.com/favicon.ico"), - string::utf8(b"http://www.example.com"), - ); - let mint_ref = generate_mint_ref(constructor_ref); - let burn_ref = generate_burn_ref(constructor_ref); - let transfer_ref = generate_transfer_ref(constructor_ref); - let mutate_metadata_ref= generate_mutate_metadata_ref(constructor_ref); - (mint_ref, transfer_ref, burn_ref, mutate_metadata_ref) - } - - #[test_only] - public fun create_fungible_asset( - creator: &signer - ): (MintRef, TransferRef, BurnRef, MutateMetadataRef, Object) { - let (creator_ref, token_object) = create_test_token(creator); - let (mint, transfer, burn, mutate_metadata) = init_test_metadata(&creator_ref); - (mint, transfer, burn, mutate_metadata, object::convert(token_object)) - } - - #[test_only] - public fun create_test_store(owner: &signer, metadata: Object): Object { - let owner_addr = signer::address_of(owner); - if (!account::exists_at(owner_addr)) { - account::create_account_for_test(owner_addr); - }; - create_store(&object::create_object_from_account(owner), metadata) - } - - #[test(creator = @0xcafe)] - fun test_metadata_basic_flow(creator: &signer) acquires Metadata, Supply, ConcurrentSupply { - let (creator_ref, metadata) = create_test_token(creator); - init_test_metadata(&creator_ref); - assert!(supply(metadata) == option::some(0), 1); - assert!(maximum(metadata) == option::some(100), 2); - assert!(name(metadata) == string::utf8(b"TEST"), 3); - assert!(symbol(metadata) == string::utf8(b"@@"), 4); - assert!(decimals(metadata) == 0, 5); - assert!(icon_uri(metadata) == string::utf8(b"http://www.example.com/favicon.ico"), 6); - assert!(project_uri(metadata) == string::utf8(b"http://www.example.com"), 7); - - assert!(metadata(metadata) == Metadata { - name: string::utf8(b"TEST"), - symbol: string::utf8(b"@@"), - decimals: 0, - icon_uri: string::utf8(b"http://www.example.com/favicon.ico"), - project_uri: string::utf8(b"http://www.example.com"), - }, 8); - - increase_supply(&metadata, 50); - assert!(supply(metadata) == option::some(50), 9); - decrease_supply(&metadata, 30); - assert!(supply(metadata) == option::some(20), 10); - } - - #[test(creator = @0xcafe)] - #[expected_failure(abort_code = 0x20005, location = Self)] - fun test_supply_overflow(creator: &signer) acquires Supply, ConcurrentSupply { - let (creator_ref, metadata) = create_test_token(creator); - init_test_metadata(&creator_ref); - increase_supply(&metadata, 101); - } - - #[test(creator = @0xcafe)] - fun test_create_and_remove_store(creator: &signer) acquires FungibleStore, FungibleAssetEvents, ConcurrentFungibleBalance { - let (_, _, _, _, metadata) = create_fungible_asset(creator); - let creator_ref = object::create_object_from_account(creator); - create_store(&creator_ref, metadata); - let delete_ref = object::generate_delete_ref(&creator_ref); - remove_store(&delete_ref); - } - - #[test(creator = @0xcafe, aaron = @0xface)] - fun test_e2e_basic_flow( - creator: &signer, - aaron: &signer, - ) acquires FungibleStore, Supply, ConcurrentSupply, DispatchFunctionStore, ConcurrentFungibleBalance, Metadata { - let (mint_ref, transfer_ref, burn_ref, mutate_metadata_ref, test_token) = create_fungible_asset(creator); - let metadata = mint_ref.metadata; - let creator_store = create_test_store(creator, metadata); - let aaron_store = create_test_store(aaron, metadata); - - assert!(supply(test_token) == option::some(0), 1); - // Mint - let fa = mint(&mint_ref, 100); - assert!(supply(test_token) == option::some(100), 2); - // Deposit - deposit(creator_store, fa); - // Withdraw - let fa = withdraw(creator, creator_store, 80); - assert!(supply(test_token) == option::some(100), 3); - deposit(aaron_store, fa); - // Burn - burn_from(&burn_ref, aaron_store, 30); - assert!(supply(test_token) == option::some(70), 4); - // Transfer - transfer(creator, creator_store, aaron_store, 10); - assert!(balance(creator_store) == 10, 5); - assert!(balance(aaron_store) == 60, 6); - - set_frozen_flag(&transfer_ref, aaron_store, true); - assert!(is_frozen(aaron_store), 7); - // Mutate Metadata - mutate_metadata( - &mutate_metadata_ref, - option::some(string::utf8(b"mutated_name")), - option::some(string::utf8(b"m_symbol")), - option::none(), - option::none(), - option::none() - ); - assert!(name(metadata) == string::utf8(b"mutated_name"), 8); - assert!(symbol(metadata) == string::utf8(b"m_symbol"), 9); - assert!(decimals(metadata) == 0, 10); - assert!(icon_uri(metadata) == string::utf8(b"http://www.example.com/favicon.ico"), 11); - assert!(project_uri(metadata) == string::utf8(b"http://www.example.com"), 12); - } - - #[test(creator = @0xcafe)] - #[expected_failure(abort_code = 0x50003, location = Self)] - fun test_frozen( - creator: &signer - ) acquires FungibleStore, Supply, ConcurrentSupply, DispatchFunctionStore, ConcurrentFungibleBalance { - let (mint_ref, transfer_ref, _burn_ref, _mutate_metadata_ref, _) = create_fungible_asset(creator); - - let creator_store = create_test_store(creator, mint_ref.metadata); - let fa = mint(&mint_ref, 100); - set_frozen_flag(&transfer_ref, creator_store, true); - deposit(creator_store, fa); - } - - #[test(creator = @0xcafe)] - #[expected_failure(abort_code = 0x50003, location = Self)] - fun test_mint_to_frozen( - creator: &signer - ) acquires FungibleStore, ConcurrentFungibleBalance, Supply, ConcurrentSupply, DispatchFunctionStore { - let (mint_ref, transfer_ref, _burn_ref, _mutate_metadata_ref, _) = create_fungible_asset(creator); - - let creator_store = create_test_store(creator, mint_ref.metadata); - set_frozen_flag(&transfer_ref, creator_store, true); - mint_to(&mint_ref, creator_store, 100); - } - - #[test(creator = @0xcafe)] - #[expected_failure(abort_code = 0x50003, location = aptos_framework::object)] - fun test_untransferable( - creator: &signer - ) { - let (creator_ref, _) = create_test_token(creator); - let (mint_ref, _, _, _) = init_test_metadata(&creator_ref); - set_untransferable(&creator_ref); - - let creator_store = create_test_store(creator, mint_ref.metadata); - object::transfer(creator, creator_store, @0x456); - } - - #[test(creator = @0xcafe, aaron = @0xface)] - fun test_transfer_with_ref( - creator: &signer, - aaron: &signer, - ) acquires FungibleStore, Supply, ConcurrentSupply, ConcurrentFungibleBalance { - let (mint_ref, transfer_ref, _burn_ref, _mutate_metadata_ref, _) = create_fungible_asset(creator); - let metadata = mint_ref.metadata; - let creator_store = create_test_store(creator, metadata); - let aaron_store = create_test_store(aaron, metadata); - - let fa = mint(&mint_ref, 100); - set_frozen_flag(&transfer_ref, creator_store, true); - set_frozen_flag(&transfer_ref, aaron_store, true); - deposit_with_ref(&transfer_ref, creator_store, fa); - transfer_with_ref(&transfer_ref, creator_store, aaron_store, 80); - assert!(balance(creator_store) == 20, 1); - assert!(balance(aaron_store) == 80, 2); - assert!(!!is_frozen(creator_store), 3); - assert!(!!is_frozen(aaron_store), 4); - } - - #[test(creator = @0xcafe)] - fun test_mutate_metadata( - creator: &signer - ) acquires Metadata { - let (mint_ref, _transfer_ref, _burn_ref, mutate_metadata_ref, _) = create_fungible_asset(creator); - let metadata = mint_ref.metadata; - - mutate_metadata( - &mutate_metadata_ref, - option::some(string::utf8(b"mutated_name")), - option::some(string::utf8(b"m_symbol")), - option::some(10), - option::some(string::utf8(b"http://www.mutated-example.com/favicon.ico")), - option::some(string::utf8(b"http://www.mutated-example.com")) - ); - assert!(name(metadata) == string::utf8(b"mutated_name"), 1); - assert!(symbol(metadata) == string::utf8(b"m_symbol"), 2); - assert!(decimals(metadata) == 10, 3); - assert!(icon_uri(metadata) == string::utf8(b"http://www.mutated-example.com/favicon.ico"), 4); - assert!(project_uri(metadata) == string::utf8(b"http://www.mutated-example.com"), 5); - } - - #[test(creator = @0xcafe)] - fun test_partial_mutate_metadata( - creator: &signer - ) acquires Metadata { - let (mint_ref, _transfer_ref, _burn_ref, mutate_metadata_ref, _) = create_fungible_asset(creator); - let metadata = mint_ref.metadata; - - mutate_metadata( - &mutate_metadata_ref, - option::some(string::utf8(b"mutated_name")), - option::some(string::utf8(b"m_symbol")), - option::none(), - option::none(), - option::none() - ); - assert!(name(metadata) == string::utf8(b"mutated_name"), 8); - assert!(symbol(metadata) == string::utf8(b"m_symbol"), 9); - assert!(decimals(metadata) == 0, 10); - assert!(icon_uri(metadata) == string::utf8(b"http://www.example.com/favicon.ico"), 11); - assert!(project_uri(metadata) == string::utf8(b"http://www.example.com"), 12); - } - - #[test(creator = @0xcafe)] - #[expected_failure(abort_code = 0x2000f, location = Self)] - fun test_mutate_metadata_name_over_maximum_length( - creator: &signer - ) acquires Metadata { - let (_mint_ref, _transfer_ref, _burn_ref, mutate_metadata_ref, _) = create_fungible_asset(creator); - - mutate_metadata( - &mutate_metadata_ref, - option::some(string::utf8(b"mutated_name_will_be_too_long_for_the_maximum_length_check")), - option::none(), - option::none(), - option::none(), - option::none() - ); - } - - #[test(creator = @0xcafe)] - #[expected_failure(abort_code = 0x20010, location = Self)] - fun test_mutate_metadata_symbol_over_maximum_length( - creator: &signer - ) acquires Metadata { - let (_mint_ref, _transfer_ref, _burn_ref, mutate_metadata_ref, _) = create_fungible_asset(creator); - - mutate_metadata( - &mutate_metadata_ref, - option::none(), - option::some(string::utf8(b"mutated_symbol_will_be_too_long_for_the_maximum_length_check")), - option::none(), - option::none(), - option::none() - ); - } - - #[test(creator = @0xcafe)] - #[expected_failure(abort_code = 0x20011, location = Self)] - fun test_mutate_metadata_decimals_over_maximum_amount( - creator: &signer - ) acquires Metadata { - let (_mint_ref, _transfer_ref, _burn_ref, mutate_metadata_ref, _) = create_fungible_asset(creator); - - mutate_metadata( - &mutate_metadata_ref, - option::none(), - option::none(), - option::some(50), - option::none(), - option::none() - ); - } - - #[test_only] - fun create_exceedingly_long_uri(): vector { - use std::vector; - - let too_long_of_uri = b"mutated_uri_will_be_too_long_for_the_maximum_length_check.com/"; - for (i in 0..50) { - vector::append(&mut too_long_of_uri, b"too_long_of_uri"); - }; - - too_long_of_uri - } - - #[test(creator = @0xcafe)] - #[expected_failure(abort_code = 0x20013, location = Self)] - fun test_mutate_metadata_icon_uri_over_maximum_length( - creator: &signer - ) acquires Metadata { - let (_mint_ref, _transfer_ref, _burn_ref, mutate_metadata_ref, _) = create_fungible_asset(creator); - let too_long_of_uri = create_exceedingly_long_uri(); - mutate_metadata( - &mutate_metadata_ref, - option::none(), - option::none(), - option::none(), - option::some(string::utf8(too_long_of_uri)), - option::none() - ); - } - - #[test(creator = @0xcafe)] - #[expected_failure(abort_code = 0x20013, location = Self)] - fun test_mutate_metadata_project_uri_over_maximum_length( - creator: &signer - ) acquires Metadata { - let (_mint_ref, _transfer_ref, _burn_ref, mutate_metadata_ref, _) = create_fungible_asset(creator); - let too_long_of_uri = create_exceedingly_long_uri(); - mutate_metadata( - &mutate_metadata_ref, - option::none(), - option::none(), - option::none(), - option::none(), - option::some(string::utf8(too_long_of_uri)) - ); - } - - #[test(creator = @0xcafe)] - fun test_merge_and_exact(creator: &signer) acquires Supply, ConcurrentSupply { - let (mint_ref, _transfer_ref, burn_ref, _mutate_metadata_ref, _) = create_fungible_asset(creator); - let fa = mint(&mint_ref, 100); - let cash = extract(&mut fa, 80); - assert!(fa.amount == 20, 1); - assert!(cash.amount == 80, 2); - let more_cash = extract(&mut fa, 20); - destroy_zero(fa); - merge(&mut cash, more_cash); - assert!(cash.amount == 100, 3); - burn(&burn_ref, cash); - } - - #[test(creator = @0xcafe)] - #[expected_failure(abort_code = 0x10012, location = Self)] - fun test_add_fungibility_to_deletable_object(creator: &signer) { - account::create_account_for_test(signer::address_of(creator)); - let creator_ref = &object::create_object_from_account(creator); - init_test_metadata(creator_ref); - } - - #[test(creator = @0xcafe, aaron = @0xface)] - #[expected_failure(abort_code = 0x10006, location = Self)] - fun test_fungible_asset_mismatch_when_merge(creator: &signer, aaron: &signer) { - let (_, _, _, _, metadata1) = create_fungible_asset(creator); - let (_, _, _, _, metadata2) = create_fungible_asset(aaron); - let base = FungibleAsset { - metadata: metadata1, - amount: 1, - }; - let addon = FungibleAsset { - metadata: metadata2, - amount: 1 - }; - merge(&mut base, addon); - let FungibleAsset { - metadata: _, - amount: _ - } = base; - } - - #[test(fx = @aptos_framework, creator = @0xcafe)] - fun test_fungible_asset_upgrade(fx: &signer, creator: &signer) acquires Supply, ConcurrentSupply, FungibleStore, ConcurrentFungibleBalance { - let supply_feature = features::get_concurrent_fungible_assets_feature(); - let balance_feature = features::get_concurrent_fungible_balance_feature(); - let default_balance_feature = features::get_default_to_concurrent_fungible_balance_feature(); - - features::change_feature_flags_for_testing(fx, vector[], vector[supply_feature, balance_feature, default_balance_feature]); - - let (creator_ref, token_object) = create_test_token(creator); - let (mint_ref, transfer_ref, _burn, _mutate_metadata_ref) = init_test_metadata(&creator_ref); - let test_token = object::convert(token_object); - assert!(exists(object::object_address(&test_token)), 1); - assert!(!exists(object::object_address(&test_token)), 2); - let creator_store = create_test_store(creator, test_token); - assert!(exists(object::object_address(&creator_store)), 3); - assert!(!exists(object::object_address(&creator_store)), 4); - - let fa = mint(&mint_ref, 30); - assert!(supply(test_token) == option::some(30), 5); - - deposit_with_ref(&transfer_ref, creator_store, fa); - assert!(exists(object::object_address(&creator_store)), 13); - assert!(borrow_store_resource(&creator_store).balance == 30, 14); - assert!(!exists(object::object_address(&creator_store)), 15); - - features::change_feature_flags_for_testing(fx, vector[supply_feature, balance_feature], vector[default_balance_feature]); - - let extend_ref = object::generate_extend_ref(&creator_ref); - // manual conversion of supply - upgrade_to_concurrent(&extend_ref); - assert!(!exists(object::object_address(&test_token)), 6); - assert!(exists(object::object_address(&test_token)), 7); - - // assert conversion of balance - upgrade_store_to_concurrent(creator, creator_store); - let fb = withdraw_with_ref(&transfer_ref, creator_store, 20); - // both store and new balance need to exist. Old balance should be 0. - assert!(exists(object::object_address(&creator_store)), 9); - assert!(borrow_store_resource(&creator_store).balance == 0, 10); - assert!(exists(object::object_address(&creator_store)), 11); - assert!(aggregator_v2::read(&borrow_global(object::object_address(&creator_store)).balance) == 10, 12); - - deposit_with_ref(&transfer_ref, creator_store, fb); - } - - #[test(fx = @aptos_framework, creator = @0xcafe)] - fun test_fungible_asset_default_concurrent(fx: &signer, creator: &signer) acquires Supply, ConcurrentSupply, FungibleStore, ConcurrentFungibleBalance { - let supply_feature = features::get_concurrent_fungible_assets_feature(); - let balance_feature = features::get_concurrent_fungible_balance_feature(); - let default_balance_feature = features::get_default_to_concurrent_fungible_balance_feature(); - - features::change_feature_flags_for_testing(fx, vector[supply_feature, balance_feature, default_balance_feature], vector[]); - - let (creator_ref, token_object) = create_test_token(creator); - let (mint_ref, transfer_ref, _burn, _mutate_metadata_ref) = init_test_metadata(&creator_ref); - let test_token = object::convert(token_object); - assert!(!exists(object::object_address(&test_token)), 1); - assert!(exists(object::object_address(&test_token)), 2); - let creator_store = create_test_store(creator, test_token); - assert!(exists(object::object_address(&creator_store)), 3); - assert!(exists(object::object_address(&creator_store)), 4); - - let fa = mint(&mint_ref, 30); - assert!(supply(test_token) == option::some(30), 5); - - deposit_with_ref(&transfer_ref, creator_store, fa); - - assert!(exists(object::object_address(&creator_store)), 9); - assert!(borrow_store_resource(&creator_store).balance == 0, 10); - assert!(exists(object::object_address(&creator_store)), 11); - assert!(aggregator_v2::read(&borrow_global(object::object_address(&creator_store)).balance) == 30, 12); - } - - #[deprecated] - #[resource_group_member(group = aptos_framework::object::ObjectGroup)] - struct FungibleAssetEvents has key { - deposit_events: event::EventHandle, - withdraw_events: event::EventHandle, - frozen_events: event::EventHandle, - } - - #[deprecated] - struct DepositEvent has drop, store { - amount: u64, - } - - #[deprecated] - struct WithdrawEvent has drop, store { - amount: u64, - } - - #[deprecated] - struct FrozenEvent has drop, store { - frozen: bool, - } -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/gas_schedule.move b/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/gas_schedule.move deleted file mode 100644 index 9156c1ae2..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/gas_schedule.move +++ /dev/null @@ -1,176 +0,0 @@ -/// This module defines structs and methods to initialize the gas schedule, which dictates how much -/// it costs to execute Move on the network. -module aptos_framework::gas_schedule { - use std::bcs; - use std::error; - use std::string::String; - use std::vector; - use aptos_std::aptos_hash; - use aptos_framework::chain_status; - use aptos_framework::config_buffer; - - use aptos_framework::reconfiguration; - use aptos_framework::system_addresses; - use aptos_framework::util::from_bytes; - use aptos_framework::storage_gas::StorageGasConfig; - use aptos_framework::storage_gas; - #[test_only] - use std::bcs::to_bytes; - - friend aptos_framework::genesis; - friend aptos_framework::reconfiguration_with_dkg; - - /// The provided gas schedule bytes are empty or invalid - const EINVALID_GAS_SCHEDULE: u64 = 1; - const EINVALID_GAS_FEATURE_VERSION: u64 = 2; - const EINVALID_GAS_SCHEDULE_HASH: u64 = 3; - - struct GasEntry has store, copy, drop { - key: String, - val: u64, - } - - struct GasSchedule has key, copy, drop { - entries: vector - } - - struct GasScheduleV2 has key, copy, drop, store { - feature_version: u64, - entries: vector, - } - - /// Only called during genesis. - public(friend) fun initialize(aptos_framework: &signer, gas_schedule_blob: vector) { - system_addresses::assert_aptos_framework(aptos_framework); - assert!(!vector::is_empty(&gas_schedule_blob), error::invalid_argument(EINVALID_GAS_SCHEDULE)); - - // TODO(Gas): check if gas schedule is consistent - let gas_schedule: GasScheduleV2 = from_bytes(gas_schedule_blob); - move_to(aptos_framework, gas_schedule); - } - - /// Deprecated by `set_for_next_epoch()`. - /// - /// WARNING: calling this while randomness is enabled will trigger a new epoch without randomness! - /// - /// TODO: update all the tests that reference this function, then disable this function. - public fun set_gas_schedule(aptos_framework: &signer, gas_schedule_blob: vector) acquires GasSchedule, GasScheduleV2 { - system_addresses::assert_aptos_framework(aptos_framework); - assert!(!vector::is_empty(&gas_schedule_blob), error::invalid_argument(EINVALID_GAS_SCHEDULE)); - chain_status::assert_genesis(); - - if (exists(@aptos_framework)) { - let gas_schedule = borrow_global_mut(@aptos_framework); - let new_gas_schedule: GasScheduleV2 = from_bytes(gas_schedule_blob); - assert!(new_gas_schedule.feature_version >= gas_schedule.feature_version, - error::invalid_argument(EINVALID_GAS_FEATURE_VERSION)); - // TODO(Gas): check if gas schedule is consistent - *gas_schedule = new_gas_schedule; - } - else { - if (exists(@aptos_framework)) { - _ = move_from(@aptos_framework); - }; - let new_gas_schedule: GasScheduleV2 = from_bytes(gas_schedule_blob); - // TODO(Gas): check if gas schedule is consistent - move_to(aptos_framework, new_gas_schedule); - }; - - // Need to trigger reconfiguration so validator nodes can sync on the updated gas schedule. - reconfiguration::reconfigure(); - } - - /// Set the gas schedule for the next epoch, typically called by on-chain governance. - /// Abort if the version of the given schedule is lower than the current version. - /// - /// Example usage: - /// ``` - /// aptos_framework::gas_schedule::set_for_next_epoch(&framework_signer, some_gas_schedule_blob); - /// aptos_framework::aptos_governance::reconfigure(&framework_signer); - /// ``` - public fun set_for_next_epoch(aptos_framework: &signer, gas_schedule_blob: vector) acquires GasScheduleV2 { - system_addresses::assert_aptos_framework(aptos_framework); - assert!(!vector::is_empty(&gas_schedule_blob), error::invalid_argument(EINVALID_GAS_SCHEDULE)); - let new_gas_schedule: GasScheduleV2 = from_bytes(gas_schedule_blob); - if (exists(@aptos_framework)) { - let cur_gas_schedule = borrow_global(@aptos_framework); - assert!( - new_gas_schedule.feature_version >= cur_gas_schedule.feature_version, - error::invalid_argument(EINVALID_GAS_FEATURE_VERSION) - ); - }; - config_buffer::upsert(new_gas_schedule); - } - - /// Set the gas schedule for the next epoch, typically called by on-chain governance. - /// Abort if the version of the given schedule is lower than the current version. - /// Require a hash of the old gas schedule to be provided and will abort if the hashes mismatch. - public fun set_for_next_epoch_check_hash( - aptos_framework: &signer, - old_gas_schedule_hash: vector, - new_gas_schedule_blob: vector - ) acquires GasScheduleV2 { - system_addresses::assert_aptos_framework(aptos_framework); - assert!(!vector::is_empty(&new_gas_schedule_blob), error::invalid_argument(EINVALID_GAS_SCHEDULE)); - - let new_gas_schedule: GasScheduleV2 = from_bytes(new_gas_schedule_blob); - if (exists(@aptos_framework)) { - let cur_gas_schedule = borrow_global(@aptos_framework); - assert!( - new_gas_schedule.feature_version >= cur_gas_schedule.feature_version, - error::invalid_argument(EINVALID_GAS_FEATURE_VERSION) - ); - let cur_gas_schedule_bytes = bcs::to_bytes(cur_gas_schedule); - let cur_gas_schedule_hash = aptos_hash::sha3_512(cur_gas_schedule_bytes); - assert!( - cur_gas_schedule_hash == old_gas_schedule_hash, - error::invalid_argument(EINVALID_GAS_SCHEDULE_HASH) - ); - }; - - config_buffer::upsert(new_gas_schedule); - } - - /// Only used in reconfigurations to apply the pending `GasScheduleV2`, if there is any. - public(friend) fun on_new_epoch(framework: &signer) acquires GasScheduleV2 { - system_addresses::assert_aptos_framework(framework); - if (config_buffer::does_exist()) { - let new_gas_schedule = config_buffer::extract(); - if (exists(@aptos_framework)) { - *borrow_global_mut(@aptos_framework) = new_gas_schedule; - } else { - move_to(framework, new_gas_schedule); - } - } - } - - public fun set_storage_gas_config(aptos_framework: &signer, config: StorageGasConfig) { - storage_gas::set_config(aptos_framework, config); - // Need to trigger reconfiguration so the VM is guaranteed to load the new gas fee starting from the next - // transaction. - reconfiguration::reconfigure(); - } - - public fun set_storage_gas_config_for_next_epoch(aptos_framework: &signer, config: StorageGasConfig) { - storage_gas::set_config(aptos_framework, config); - } - - #[test(fx = @0x1)] - #[expected_failure(abort_code=0x010002, location = Self)] - fun set_for_next_epoch_should_abort_if_gas_version_is_too_old(fx: signer) acquires GasScheduleV2 { - // Setup. - let old_gas_schedule = GasScheduleV2 { - feature_version: 1000, - entries: vector[], - }; - move_to(&fx, old_gas_schedule); - - // Setting an older version should not work. - let new_gas_schedule = GasScheduleV2 { - feature_version: 999, - entries: vector[], - }; - let new_bytes = to_bytes(&new_gas_schedule); - set_for_next_epoch(&fx, new_bytes); - } -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/genesis.move b/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/genesis.move deleted file mode 100644 index 207bcf74b..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/genesis.move +++ /dev/null @@ -1,549 +0,0 @@ -module aptos_framework::genesis { - use std::error; - use std::fixed_point32; - use std::vector; - - use aptos_std::simple_map; - - use aptos_framework::account; - use aptos_framework::aggregator_factory; - use aptos_framework::aptos_account; - use aptos_framework::aptos_coin::{Self, AptosCoin}; - use aptos_framework::aptos_governance; - use aptos_framework::block; - use aptos_framework::chain_id; - use aptos_framework::chain_status; - use aptos_framework::coin; - use aptos_framework::consensus_config; - use aptos_framework::execution_config; - use aptos_framework::create_signer::create_signer; - use aptos_framework::gas_schedule; - use aptos_framework::reconfiguration; - use aptos_framework::stake; - use aptos_framework::staking_contract; - use aptos_framework::staking_config; - use aptos_framework::state_storage; - use aptos_framework::storage_gas; - use aptos_framework::timestamp; - use aptos_framework::transaction_fee; - use aptos_framework::transaction_validation; - use aptos_framework::version; - use aptos_framework::vesting; - - const EDUPLICATE_ACCOUNT: u64 = 1; - const EACCOUNT_DOES_NOT_EXIST: u64 = 2; - - struct AccountMap has drop { - account_address: address, - balance: u64, - } - - struct EmployeeAccountMap has copy, drop { - accounts: vector
, - validator: ValidatorConfigurationWithCommission, - vesting_schedule_numerator: vector, - vesting_schedule_denominator: u64, - beneficiary_resetter: address, - } - - struct ValidatorConfiguration has copy, drop { - owner_address: address, - operator_address: address, - voter_address: address, - stake_amount: u64, - consensus_pubkey: vector, - proof_of_possession: vector, - network_addresses: vector, - full_node_network_addresses: vector, - } - - struct ValidatorConfigurationWithCommission has copy, drop { - validator_config: ValidatorConfiguration, - commission_percentage: u64, - join_during_genesis: bool, - } - - /// Genesis step 1: Initialize aptos framework account and core modules on chain. - fun initialize( - gas_schedule: vector, - chain_id: u8, - initial_version: u64, - consensus_config: vector, - execution_config: vector, - epoch_interval_microsecs: u64, - minimum_stake: u64, - maximum_stake: u64, - recurring_lockup_duration_secs: u64, - allow_validator_set_change: bool, - rewards_rate: u64, - rewards_rate_denominator: u64, - voting_power_increase_limit: u64, - ) { - // Initialize the aptos framework account. This is the account where system resources and modules will be - // deployed to. This will be entirely managed by on-chain governance and no entities have the key or privileges - // to use this account. - let (aptos_framework_account, aptos_framework_signer_cap) = account::create_framework_reserved_account(@aptos_framework); - // Initialize account configs on aptos framework account. - account::initialize(&aptos_framework_account); - - transaction_validation::initialize( - &aptos_framework_account, - b"script_prologue", - b"module_prologue", - b"multi_agent_script_prologue", - b"epilogue", - ); - - // Give the decentralized on-chain governance control over the core framework account. - aptos_governance::store_signer_cap(&aptos_framework_account, @aptos_framework, aptos_framework_signer_cap); - - // put reserved framework reserved accounts under aptos governance - let framework_reserved_addresses = vector
[@0x2, @0x3, @0x4, @0x5, @0x6, @0x7, @0x8, @0x9, @0xa]; - while (!vector::is_empty(&framework_reserved_addresses)) { - let address = vector::pop_back
(&mut framework_reserved_addresses); - let (_, framework_signer_cap) = account::create_framework_reserved_account(address); - aptos_governance::store_signer_cap(&aptos_framework_account, address, framework_signer_cap); - }; - - consensus_config::initialize(&aptos_framework_account, consensus_config); - execution_config::set(&aptos_framework_account, execution_config); - version::initialize(&aptos_framework_account, initial_version); - stake::initialize(&aptos_framework_account); - staking_config::initialize( - &aptos_framework_account, - minimum_stake, - maximum_stake, - recurring_lockup_duration_secs, - allow_validator_set_change, - rewards_rate, - rewards_rate_denominator, - voting_power_increase_limit, - ); - storage_gas::initialize(&aptos_framework_account); - gas_schedule::initialize(&aptos_framework_account, gas_schedule); - - // Ensure we can create aggregators for supply, but not enable it for common use just yet. - aggregator_factory::initialize_aggregator_factory(&aptos_framework_account); - - chain_id::initialize(&aptos_framework_account, chain_id); - reconfiguration::initialize(&aptos_framework_account); - block::initialize(&aptos_framework_account, epoch_interval_microsecs); - state_storage::initialize(&aptos_framework_account); - timestamp::set_time_has_started(&aptos_framework_account); - } - - /// Genesis step 2: Initialize Aptos coin. - fun initialize_aptos_coin(aptos_framework: &signer) { - let (burn_cap, mint_cap) = aptos_coin::initialize(aptos_framework); - - coin::create_coin_conversion_map(aptos_framework); - coin::create_pairing(aptos_framework); - - // Give stake module MintCapability so it can mint rewards. - stake::store_aptos_coin_mint_cap(aptos_framework, mint_cap); - // Give transaction_fee module BurnCapability so it can burn gas. - transaction_fee::store_aptos_coin_burn_cap(aptos_framework, burn_cap); - // Give transaction_fee module MintCapability so it can mint refunds. - transaction_fee::store_aptos_coin_mint_cap(aptos_framework, mint_cap); - } - - /// Only called for testnets and e2e tests. - fun initialize_core_resources_and_aptos_coin( - aptos_framework: &signer, - core_resources_auth_key: vector, - ) { - let (burn_cap, mint_cap) = aptos_coin::initialize(aptos_framework); - - coin::create_coin_conversion_map(aptos_framework); - coin::create_pairing(aptos_framework); - - // Give stake module MintCapability so it can mint rewards. - stake::store_aptos_coin_mint_cap(aptos_framework, mint_cap); - // Give transaction_fee module BurnCapability so it can burn gas. - transaction_fee::store_aptos_coin_burn_cap(aptos_framework, burn_cap); - // Give transaction_fee module MintCapability so it can mint refunds. - transaction_fee::store_aptos_coin_mint_cap(aptos_framework, mint_cap); - - let core_resources = account::create_account(@core_resources); - account::rotate_authentication_key_internal(&core_resources, core_resources_auth_key); - aptos_account::register_apt(&core_resources); // registers APT store - aptos_coin::configure_accounts_for_test(aptos_framework, &core_resources, mint_cap); - } - - fun create_accounts(aptos_framework: &signer, accounts: vector) { - let unique_accounts = vector::empty(); - vector::for_each_ref(&accounts, |account_map| { - let account_map: &AccountMap = account_map; - assert!( - !vector::contains(&unique_accounts, &account_map.account_address), - error::already_exists(EDUPLICATE_ACCOUNT), - ); - vector::push_back(&mut unique_accounts, account_map.account_address); - - create_account( - aptos_framework, - account_map.account_address, - account_map.balance, - ); - }); - } - - /// This creates an funds an account if it doesn't exist. - /// If it exists, it just returns the signer. - fun create_account(aptos_framework: &signer, account_address: address, balance: u64): signer { - if (account::exists_at(account_address)) { - create_signer(account_address) - } else { - let account = account::create_account(account_address); - coin::register(&account); - aptos_coin::mint(aptos_framework, account_address, balance); - account - } - } - - fun create_employee_validators( - employee_vesting_start: u64, - employee_vesting_period_duration: u64, - employees: vector, - ) { - let unique_accounts = vector::empty(); - - vector::for_each_ref(&employees, |employee_group| { - let j = 0; - let employee_group: &EmployeeAccountMap = employee_group; - let num_employees_in_group = vector::length(&employee_group.accounts); - - let buy_ins = simple_map::create(); - - while (j < num_employees_in_group) { - let account = vector::borrow(&employee_group.accounts, j); - assert!( - !vector::contains(&unique_accounts, account), - error::already_exists(EDUPLICATE_ACCOUNT), - ); - vector::push_back(&mut unique_accounts, *account); - - let employee = create_signer(*account); - let total = coin::balance(*account); - let coins = coin::withdraw(&employee, total); - simple_map::add(&mut buy_ins, *account, coins); - - j = j + 1; - }; - - let j = 0; - let num_vesting_events = vector::length(&employee_group.vesting_schedule_numerator); - let schedule = vector::empty(); - - while (j < num_vesting_events) { - let numerator = vector::borrow(&employee_group.vesting_schedule_numerator, j); - let event = fixed_point32::create_from_rational(*numerator, employee_group.vesting_schedule_denominator); - vector::push_back(&mut schedule, event); - - j = j + 1; - }; - - let vesting_schedule = vesting::create_vesting_schedule( - schedule, - employee_vesting_start, - employee_vesting_period_duration, - ); - - let admin = employee_group.validator.validator_config.owner_address; - let admin_signer = &create_signer(admin); - let contract_address = vesting::create_vesting_contract( - admin_signer, - &employee_group.accounts, - buy_ins, - vesting_schedule, - admin, - employee_group.validator.validator_config.operator_address, - employee_group.validator.validator_config.voter_address, - employee_group.validator.commission_percentage, - x"", - ); - let pool_address = vesting::stake_pool_address(contract_address); - - if (employee_group.beneficiary_resetter != @0x0) { - vesting::set_beneficiary_resetter(admin_signer, contract_address, employee_group.beneficiary_resetter); - }; - - let validator = &employee_group.validator.validator_config; - assert!( - account::exists_at(validator.owner_address), - error::not_found(EACCOUNT_DOES_NOT_EXIST), - ); - assert!( - account::exists_at(validator.operator_address), - error::not_found(EACCOUNT_DOES_NOT_EXIST), - ); - assert!( - account::exists_at(validator.voter_address), - error::not_found(EACCOUNT_DOES_NOT_EXIST), - ); - if (employee_group.validator.join_during_genesis) { - initialize_validator(pool_address, validator); - }; - }); - } - - fun create_initialize_validators_with_commission( - aptos_framework: &signer, - use_staking_contract: bool, - validators: vector, - ) { - vector::for_each_ref(&validators, |validator| { - let validator: &ValidatorConfigurationWithCommission = validator; - create_initialize_validator(aptos_framework, validator, use_staking_contract); - }); - - // Destroy the aptos framework account's ability to mint coins now that we're done with setting up the initial - // validators. - aptos_coin::destroy_mint_cap(aptos_framework); - - stake::on_new_epoch(); - } - - /// Sets up the initial validator set for the network. - /// The validator "owner" accounts, and their authentication - /// Addresses (and keys) are encoded in the `owners` - /// Each validator signs consensus messages with the private key corresponding to the Ed25519 - /// public key in `consensus_pubkeys`. - /// Finally, each validator must specify the network address - /// (see types/src/network_address/mod.rs) for itself and its full nodes. - /// - /// Network address fields are a vector per account, where each entry is a vector of addresses - /// encoded in a single BCS byte array. - fun create_initialize_validators(aptos_framework: &signer, validators: vector) { - let validators_with_commission = vector::empty(); - vector::for_each_reverse(validators, |validator| { - let validator_with_commission = ValidatorConfigurationWithCommission { - validator_config: validator, - commission_percentage: 0, - join_during_genesis: true, - }; - vector::push_back(&mut validators_with_commission, validator_with_commission); - }); - - create_initialize_validators_with_commission(aptos_framework, false, validators_with_commission); - } - - fun create_initialize_validator( - aptos_framework: &signer, - commission_config: &ValidatorConfigurationWithCommission, - use_staking_contract: bool, - ) { - let validator = &commission_config.validator_config; - - let owner = &create_account(aptos_framework, validator.owner_address, validator.stake_amount); - create_account(aptos_framework, validator.operator_address, 0); - create_account(aptos_framework, validator.voter_address, 0); - - // Initialize the stake pool and join the validator set. - let pool_address = if (use_staking_contract) { - staking_contract::create_staking_contract( - owner, - validator.operator_address, - validator.voter_address, - validator.stake_amount, - commission_config.commission_percentage, - x"", - ); - staking_contract::stake_pool_address(validator.owner_address, validator.operator_address) - } else { - stake::initialize_stake_owner( - owner, - validator.stake_amount, - validator.operator_address, - validator.voter_address, - ); - validator.owner_address - }; - - if (commission_config.join_during_genesis) { - initialize_validator(pool_address, validator); - }; - } - - fun initialize_validator(pool_address: address, validator: &ValidatorConfiguration) { - let operator = &create_signer(validator.operator_address); - - stake::rotate_consensus_key( - operator, - pool_address, - validator.consensus_pubkey, - validator.proof_of_possession, - ); - stake::update_network_and_fullnode_addresses( - operator, - pool_address, - validator.network_addresses, - validator.full_node_network_addresses, - ); - stake::join_validator_set_internal(operator, pool_address); - } - - /// The last step of genesis. - fun set_genesis_end(aptos_framework: &signer) { - chain_status::set_genesis_end(aptos_framework); - } - - #[verify_only] - use std::features; - - #[verify_only] - fun initialize_for_verification( - gas_schedule: vector, - chain_id: u8, - initial_version: u64, - consensus_config: vector, - execution_config: vector, - epoch_interval_microsecs: u64, - minimum_stake: u64, - maximum_stake: u64, - recurring_lockup_duration_secs: u64, - allow_validator_set_change: bool, - rewards_rate: u64, - rewards_rate_denominator: u64, - voting_power_increase_limit: u64, - aptos_framework: &signer, - min_voting_threshold: u128, - required_proposer_stake: u64, - voting_duration_secs: u64, - accounts: vector, - employee_vesting_start: u64, - employee_vesting_period_duration: u64, - employees: vector, - validators: vector - ) { - initialize( - gas_schedule, - chain_id, - initial_version, - consensus_config, - execution_config, - epoch_interval_microsecs, - minimum_stake, - maximum_stake, - recurring_lockup_duration_secs, - allow_validator_set_change, - rewards_rate, - rewards_rate_denominator, - voting_power_increase_limit - ); - features::change_feature_flags_for_verification(aptos_framework, vector[1, 2], vector[]); - initialize_aptos_coin(aptos_framework); - aptos_governance::initialize_for_verification( - aptos_framework, - min_voting_threshold, - required_proposer_stake, - voting_duration_secs - ); - create_accounts(aptos_framework, accounts); - create_employee_validators(employee_vesting_start, employee_vesting_period_duration, employees); - create_initialize_validators_with_commission(aptos_framework, true, validators); - set_genesis_end(aptos_framework); - } - - #[test_only] - public fun setup() { - initialize( - x"000000000000000000", // empty gas schedule - 4u8, // TESTING chain ID - 0, - x"12", - x"13", - 1, - 0, - 1, - 1, - true, - 1, - 1, - 30, - ) - } - - #[test] - fun test_setup() { - setup(); - assert!(account::exists_at(@aptos_framework), 1); - assert!(account::exists_at(@0x2), 1); - assert!(account::exists_at(@0x3), 1); - assert!(account::exists_at(@0x4), 1); - assert!(account::exists_at(@0x5), 1); - assert!(account::exists_at(@0x6), 1); - assert!(account::exists_at(@0x7), 1); - assert!(account::exists_at(@0x8), 1); - assert!(account::exists_at(@0x9), 1); - assert!(account::exists_at(@0xa), 1); - } - - #[test(aptos_framework = @0x1)] - fun test_create_account(aptos_framework: &signer) { - setup(); - initialize_aptos_coin(aptos_framework); - - let addr = @0x121341; // 01 -> 0a are taken - let test_signer_before = create_account(aptos_framework, addr, 15); - let test_signer_after = create_account(aptos_framework, addr, 500); - assert!(test_signer_before == test_signer_after, 0); - assert!(coin::balance(addr) == 15, 1); - } - - #[test(aptos_framework = @0x1)] - fun test_create_accounts(aptos_framework: &signer) { - setup(); - initialize_aptos_coin(aptos_framework); - - // 01 -> 0a are taken - let addr0 = @0x121341; - let addr1 = @0x121345; - - let accounts = vector[ - AccountMap { - account_address: addr0, - balance: 12345, - }, - AccountMap { - account_address: addr1, - balance: 67890, - }, - ]; - - create_accounts(aptos_framework, accounts); - assert!(coin::balance(addr0) == 12345, 0); - assert!(coin::balance(addr1) == 67890, 1); - - create_account(aptos_framework, addr0, 23456); - assert!(coin::balance(addr0) == 12345, 2); - } - - #[test(aptos_framework = @0x1, root = @0xabcd)] - fun test_create_root_account(aptos_framework: &signer) { - use aptos_framework::aggregator_factory; - use aptos_framework::object; - use aptos_framework::primary_fungible_store; - use aptos_framework::fungible_asset::Metadata; - use std::features; - - let feature = features::get_new_accounts_default_to_fa_apt_store_feature(); - features::change_feature_flags_for_testing(aptos_framework, vector[feature], vector[]); - - aggregator_factory::initialize_aggregator_factory_for_test(aptos_framework); - - let (burn_cap, mint_cap) = aptos_coin::initialize(aptos_framework); - aptos_coin::ensure_initialized_with_apt_fa_metadata_for_test(); - - let core_resources = account::create_account(@core_resources); - aptos_account::register_apt(&core_resources); // registers APT store - - let apt_metadata = object::address_to_object(@aptos_fungible_asset); - assert!(primary_fungible_store::primary_store_exists(@core_resources, apt_metadata), 2); - - aptos_coin::configure_accounts_for_test(aptos_framework, &core_resources, mint_cap); - - coin::destroy_burn_cap(burn_cap); - coin::destroy_mint_cap(mint_cap); - } -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/governance_proposal.move b/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/governance_proposal.move deleted file mode 100644 index bae6c7d73..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/governance_proposal.move +++ /dev/null @@ -1,23 +0,0 @@ -/// Define the GovernanceProposal that will be used as part of on-chain governance by AptosGovernance. -/// -/// This is separate from the AptosGovernance module to avoid circular dependency between AptosGovernance and Stake. -module aptos_framework::governance_proposal { - friend aptos_framework::aptos_governance; - - struct GovernanceProposal has store, drop {} - - /// Create and return a GovernanceProposal resource. Can only be called by AptosGovernance - public(friend) fun create_proposal(): GovernanceProposal { - GovernanceProposal {} - } - - /// Useful for AptosGovernance to create an empty proposal as proof. - public(friend) fun create_empty_proposal(): GovernanceProposal { - create_proposal() - } - - #[test_only] - public fun create_test_proposal(): GovernanceProposal { - create_empty_proposal() - } -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/guid.move b/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/guid.move deleted file mode 100644 index e6334bbad..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/guid.move +++ /dev/null @@ -1,68 +0,0 @@ -/// A module for generating globally unique identifiers -module aptos_framework::guid { - friend aptos_framework::account; - friend aptos_framework::object; - - /// A globally unique identifier derived from the sender's address and a counter - struct GUID has drop, store { - id: ID - } - - /// A non-privileged identifier that can be freely created by anyone. Useful for looking up GUID's. - struct ID has copy, drop, store { - /// If creation_num is `i`, this is the `i+1`th GUID created by `addr` - creation_num: u64, - /// Address that created the GUID - addr: address - } - - /// GUID generator must be published ahead of first usage of `create_with_capability` function. - const EGUID_GENERATOR_NOT_PUBLISHED: u64 = 0; - - /// Create and return a new GUID from a trusted module. - public(friend) fun create(addr: address, creation_num_ref: &mut u64): GUID { - let creation_num = *creation_num_ref; - *creation_num_ref = creation_num + 1; - GUID { - id: ID { - creation_num, - addr, - } - } - } - - /// Create a non-privileged id from `addr` and `creation_num` - public fun create_id(addr: address, creation_num: u64): ID { - ID { creation_num, addr } - } - - /// Get the non-privileged ID associated with a GUID - public fun id(guid: &GUID): ID { - guid.id - } - - /// Return the account address that created the GUID - public fun creator_address(guid: &GUID): address { - guid.id.addr - } - - /// Return the account address that created the guid::ID - public fun id_creator_address(id: &ID): address { - id.addr - } - - /// Return the creation number associated with the GUID - public fun creation_num(guid: &GUID): u64 { - guid.id.creation_num - } - - /// Return the creation number associated with the guid::ID - public fun id_creation_num(id: &ID): u64 { - id.creation_num - } - - /// Return true if the GUID's ID is `id` - public fun eq_id(guid: &GUID, id: &ID): bool { - &guid.id == id - } -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/jwk_consensus_config.move b/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/jwk_consensus_config.move deleted file mode 100644 index bba0276e7..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/jwk_consensus_config.move +++ /dev/null @@ -1,148 +0,0 @@ -/// Structs and functions related to JWK consensus configurations. -module aptos_framework::jwk_consensus_config { - use std::error; - use std::option; - use std::string::String; - use std::vector; - use aptos_std::copyable_any; - use aptos_std::copyable_any::Any; - use aptos_std::simple_map; - use aptos_framework::config_buffer; - use aptos_framework::system_addresses; - #[test_only] - use std::string; - #[test_only] - use std::string::utf8; - - friend aptos_framework::reconfiguration_with_dkg; - - /// `ConfigV1` creation failed with duplicated providers given. - const EDUPLICATE_PROVIDERS: u64 = 1; - - /// The configuration of the JWK consensus feature. - struct JWKConsensusConfig has drop, key, store { - /// A config variant packed as an `Any`. - /// Currently the variant type is one of the following. - /// - `ConfigOff` - /// - `ConfigV1` - variant: Any, - } - - /// A JWK consensus config variant indicating JWK consensus should not run. - struct ConfigOff has copy, drop, store {} - - struct OIDCProvider has copy, drop, store { - name: String, - config_url: String, - } - - /// A JWK consensus config variant indicating JWK consensus should run to watch a given list of OIDC providers. - struct ConfigV1 has copy, drop, store { - oidc_providers: vector, - } - - /// Initialize the configuration. Used in genesis or governance. - public fun initialize(framework: &signer, config: JWKConsensusConfig) { - system_addresses::assert_aptos_framework(framework); - if (!exists(@aptos_framework)) { - move_to(framework, config); - } - } - - /// This can be called by on-chain governance to update JWK consensus configs for the next epoch. - /// Example usage: - /// ``` - /// use aptos_framework::jwk_consensus_config; - /// use aptos_framework::aptos_governance; - /// // ... - /// let config = jwk_consensus_config::new_v1(vector[]); - /// jwk_consensus_config::set_for_next_epoch(&framework_signer, config); - /// aptos_governance::reconfigure(&framework_signer); - /// ``` - public fun set_for_next_epoch(framework: &signer, config: JWKConsensusConfig) { - system_addresses::assert_aptos_framework(framework); - config_buffer::upsert(config); - } - - /// Only used in reconfigurations to apply the pending `JWKConsensusConfig`, if there is any. - public(friend) fun on_new_epoch(framework: &signer) acquires JWKConsensusConfig { - system_addresses::assert_aptos_framework(framework); - if (config_buffer::does_exist()) { - let new_config = config_buffer::extract(); - if (exists(@aptos_framework)) { - *borrow_global_mut(@aptos_framework) = new_config; - } else { - move_to(framework, new_config); - }; - } - } - - /// Construct a `JWKConsensusConfig` of variant `ConfigOff`. - public fun new_off(): JWKConsensusConfig { - JWKConsensusConfig { - variant: copyable_any::pack( ConfigOff {} ) - } - } - - /// Construct a `JWKConsensusConfig` of variant `ConfigV1`. - /// - /// Abort if the given provider list contains duplicated provider names. - public fun new_v1(oidc_providers: vector): JWKConsensusConfig { - let name_set = simple_map::new(); - vector::for_each_ref(&oidc_providers, |provider| { - let provider: &OIDCProvider = provider; - let (_, old_value) = simple_map::upsert(&mut name_set, provider.name, 0); - if (option::is_some(&old_value)) { - abort(error::invalid_argument(EDUPLICATE_PROVIDERS)) - } - }); - JWKConsensusConfig { - variant: copyable_any::pack( ConfigV1 { oidc_providers } ) - } - } - - /// Construct an `OIDCProvider` object. - public fun new_oidc_provider(name: String, config_url: String): OIDCProvider { - OIDCProvider { name, config_url } - } - - #[test_only] - fun enabled(): bool acquires JWKConsensusConfig { - let variant= borrow_global(@aptos_framework).variant; - let variant_type_name = *string::bytes(copyable_any::type_name(&variant)); - variant_type_name != b"0x1::jwk_consensus_config::ConfigOff" - } - - #[test_only] - fun initialize_for_testing(framework: &signer) { - config_buffer::initialize(framework); - initialize(framework, new_off()); - } - - #[test(framework = @0x1)] - fun init_buffer_apply(framework: signer) acquires JWKConsensusConfig { - initialize_for_testing(&framework); - let config = new_v1(vector[ - new_oidc_provider(utf8(b"Bob"), utf8(b"https://bob.dev")), - new_oidc_provider(utf8(b"Alice"), utf8(b"https://alice.io")), - ]); - set_for_next_epoch(&framework, config); - on_new_epoch(&framework); - assert!(enabled(), 1); - - set_for_next_epoch(&framework, new_off()); - on_new_epoch(&framework); - assert!(!enabled(), 2) - } - - #[test] - #[expected_failure(abort_code = 0x010001, location = Self)] - fun name_uniqueness_in_config_v1() { - new_v1(vector[ - new_oidc_provider(utf8(b"Alice"), utf8(b"https://alice.info")), - new_oidc_provider(utf8(b"Bob"), utf8(b"https://bob.dev")), - new_oidc_provider(utf8(b"Alice"), utf8(b"https://alice.io")), - ]); - - } -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/jwks.move b/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/jwks.move deleted file mode 100644 index 5c9b75147..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/jwks.move +++ /dev/null @@ -1,889 +0,0 @@ -/// JWK functions and structs. -/// -/// Note: An important design constraint for this module is that the JWK consensus Rust code is unable to -/// spawn a VM and make a Move function call. Instead, the JWK consensus Rust code will have to directly -/// write some of the resources in this file. As a result, the structs in this file are declared so as to -/// have a simple layout which is easily accessible in Rust. -module aptos_framework::jwks { - use std::bcs; - use std::error; - use std::option; - use std::option::Option; - use std::signer; - use std::string; - use std::string::{String, utf8}; - use std::vector; - use aptos_std::comparator::{compare_u8_vector, is_greater_than, is_equal}; - use aptos_std::copyable_any; - use aptos_std::copyable_any::Any; - use aptos_framework::chain_status; - use aptos_framework::config_buffer; - use aptos_framework::event::emit; - use aptos_framework::reconfiguration; - use aptos_framework::system_addresses; - #[test_only] - use aptos_framework::account::create_account_for_test; - - friend aptos_framework::genesis; - friend aptos_framework::reconfiguration_with_dkg; - - /// We limit the size of a `PatchedJWKs` resource installed by a dapp owner for federated keyless accounts. - /// Note: If too large, validators waste work reading it for invalid TXN signatures. - const MAX_FEDERATED_JWKS_SIZE_BYTES: u64 = 2 * 1024; // 2 KiB - - const EUNEXPECTED_EPOCH: u64 = 1; - const EUNEXPECTED_VERSION: u64 = 2; - const EUNKNOWN_PATCH_VARIANT: u64 = 3; - const EUNKNOWN_JWK_VARIANT: u64 = 4; - const EISSUER_NOT_FOUND: u64 = 5; - const EJWK_ID_NOT_FOUND: u64 = 6; - const EINSTALL_FEDERATED_JWKS_AT_APTOS_FRAMEWORK: u64 = 7; - const EFEDERATED_JWKS_TOO_LARGE: u64 = 8; - const EINVALID_FEDERATED_JWK_SET: u64 = 9; - - const ENATIVE_MISSING_RESOURCE_VALIDATOR_SET: u64 = 0x0101; - const ENATIVE_MISSING_RESOURCE_OBSERVED_JWKS: u64 = 0x0102; - const ENATIVE_INCORRECT_VERSION: u64 = 0x0103; - const ENATIVE_MULTISIG_VERIFICATION_FAILED: u64 = 0x0104; - const ENATIVE_NOT_ENOUGH_VOTING_POWER: u64 = 0x0105; - - /// An OIDC provider. - struct OIDCProvider has copy, drop, store { - /// The utf-8 encoded issuer string. E.g., b"https://www.facebook.com". - name: vector, - - /// The ut8-8 encoded OpenID configuration URL of the provider. - /// E.g., b"https://www.facebook.com/.well-known/openid-configuration/". - config_url: vector, - } - - /// A list of OIDC providers whose JWKs should be watched by validators. Maintained by governance proposals. - struct SupportedOIDCProviders has copy, drop, key, store { - providers: vector, - } - - /// An JWK variant that represents the JWKs which were observed but not yet supported by Aptos. - /// Observing `UnsupportedJWK`s means the providers adopted a new key type/format, and the system should be updated. - struct UnsupportedJWK has copy, drop, store { - id: vector, - payload: vector, - } - - /// A JWK variant where `kty` is `RSA`. - struct RSA_JWK has copy, drop, store { - kid: String, - kty: String, - alg: String, - e: String, - n: String, - } - - /// A JSON web key. - struct JWK has copy, drop, store { - /// A `JWK` variant packed as an `Any`. - /// Currently the variant type is one of the following. - /// - `RSA_JWK` - /// - `UnsupportedJWK` - variant: Any, - } - - /// A provider and its `JWK`s. - struct ProviderJWKs has copy, drop, store { - /// The utf-8 encoding of the issuer string (e.g., "https://www.facebook.com"). - issuer: vector, - - /// A version number is needed by JWK consensus to dedup the updates. - /// e.g, when on chain version = 5, multiple nodes can propose an update with version = 6. - /// Bumped every time the JWKs for the current issuer is updated. - /// The Rust authenticator only uses the latest version. - version: u64, - - /// Vector of `JWK`'s sorted by their unique ID (from `get_jwk_id`) in dictionary order. - jwks: vector, - } - - /// Multiple `ProviderJWKs` objects, indexed by issuer and key ID. - struct AllProvidersJWKs has copy, drop, store { - /// Vector of `ProviderJWKs` sorted by `ProviderJWKs::issuer` in dictionary order. - entries: vector, - } - - /// The `AllProvidersJWKs` that validators observed and agreed on. - struct ObservedJWKs has copy, drop, key, store { - jwks: AllProvidersJWKs, - } - - #[event] - /// When `ObservedJWKs` is updated, this event is sent to resync the JWK consensus state in all validators. - struct ObservedJWKsUpdated has drop, store { - epoch: u64, - jwks: AllProvidersJWKs, - } - - /// A small edit or patch that is applied to a `AllProvidersJWKs` to obtain `PatchedJWKs`. - struct Patch has copy, drop, store { - /// A `Patch` variant packed as an `Any`. - /// Currently the variant type is one of the following. - /// - `PatchRemoveAll` - /// - `PatchRemoveIssuer` - /// - `PatchRemoveJWK` - /// - `PatchUpsertJWK` - variant: Any, - } - - /// A `Patch` variant to remove all JWKs. - struct PatchRemoveAll has copy, drop, store {} - - /// A `Patch` variant to remove an issuer and all its JWKs. - struct PatchRemoveIssuer has copy, drop, store { - issuer: vector, - } - - /// A `Patch` variant to remove a specific JWK of an issuer. - struct PatchRemoveJWK has copy, drop, store { - issuer: vector, - jwk_id: vector, - } - - /// A `Patch` variant to upsert a JWK for an issuer. - struct PatchUpsertJWK has copy, drop, store { - issuer: vector, - jwk: JWK, - } - - /// A sequence of `Patch` objects that are applied *one by one* to the `ObservedJWKs`. - /// - /// Maintained by governance proposals. - struct Patches has key { - patches: vector, - } - - /// The result of applying the `Patches` to the `ObservedJWKs`. - /// This is what applications should consume. - struct PatchedJWKs has drop, key { - jwks: AllProvidersJWKs, - } - - /// JWKs for federated keyless accounts are stored in this resource. - struct FederatedJWKs has drop, key { - jwks: AllProvidersJWKs, - } - - // - // Structs end. - // Functions begin. - // - - /// Called by a federated keyless dapp owner to install the JWKs for the federated OIDC provider (e.g., Auth0, AWS - /// Cognito, etc). For type-safety, we explicitly use a `struct FederatedJWKs { jwks: AllProviderJWKs }` instead of - /// reusing `PatchedJWKs { jwks: AllProviderJWKs }`, which is a JWK-consensus-specific struct. - public fun patch_federated_jwks(jwk_owner: &signer, patches: vector) acquires FederatedJWKs { - // Prevents accidental calls in 0x1::jwks that install federated JWKs at the Aptos framework address. - assert!(!system_addresses::is_aptos_framework_address(signer::address_of(jwk_owner)), - error::invalid_argument(EINSTALL_FEDERATED_JWKS_AT_APTOS_FRAMEWORK) - ); - - let jwk_addr = signer::address_of(jwk_owner); - if (!exists(jwk_addr)) { - move_to(jwk_owner, FederatedJWKs { jwks: AllProvidersJWKs { entries: vector[] } }); - }; - - let fed_jwks = borrow_global_mut(jwk_addr); - vector::for_each_ref(&patches, |obj|{ - let patch: &Patch = obj; - apply_patch(&mut fed_jwks.jwks, *patch); - }); - - // TODO: Can we check the size more efficiently instead of serializing it via BCS? - let num_bytes = vector::length(&bcs::to_bytes(fed_jwks)); - assert!(num_bytes < MAX_FEDERATED_JWKS_SIZE_BYTES, error::invalid_argument(EFEDERATED_JWKS_TOO_LARGE)); - } - - /// This can be called to install or update a set of JWKs for a federated OIDC provider. This function should - /// be invoked to intially install a set of JWKs or to update a set of JWKs when a keypair is rotated. - /// - /// The `iss` parameter is the value of the `iss` claim on the JWTs that are to be verified by the JWK set. - /// `kid_vec`, `alg_vec`, `e_vec`, `n_vec` are String vectors of the JWK attributes `kid`, `alg`, `e` and `n` respectively. - /// See https://datatracker.ietf.org/doc/html/rfc7517#section-4 for more details about the JWK attributes aforementioned. - /// - /// For the example JWK set snapshot below containing 2 keys for Google found at https://www.googleapis.com/oauth2/v3/certs - - /// ```json - /// { - /// "keys": [ - /// { - /// "alg": "RS256", - /// "use": "sig", - /// "kty": "RSA", - /// "n": "wNHgGSG5B5xOEQNFPW2p_6ZxZbfPoAU5VceBUuNwQWLop0ohW0vpoZLU1tAsq_S9s5iwy27rJw4EZAOGBR9oTRq1Y6Li5pDVJfmzyRNtmWCWndR-bPqhs_dkJU7MbGwcvfLsN9FSHESFrS9sfGtUX-lZfLoGux23TKdYV9EE-H-NDASxrVFUk2GWc3rL6UEMWrMnOqV9-tghybDU3fcRdNTDuXUr9qDYmhmNegYjYu4REGjqeSyIG1tuQxYpOBH-tohtcfGY-oRTS09kgsSS9Q5BRM4qqCkGP28WhlSf4ui0-norS0gKMMI1P_ZAGEsLn9p2TlYMpewvIuhjJs1thw", - /// "kid": "d7b939771a7800c413f90051012d975981916d71", - /// "e": "AQAB" - /// }, - /// { - /// "kty": "RSA", - /// "kid": "b2620d5e7f132b52afe8875cdf3776c064249d04", - /// "alg": "RS256", - /// "n": "pi22xDdK2fz5gclIbDIGghLDYiRO56eW2GUcboeVlhbAuhuT5mlEYIevkxdPOg5n6qICePZiQSxkwcYMIZyLkZhSJ2d2M6Szx2gDtnAmee6o_tWdroKu0DjqwG8pZU693oLaIjLku3IK20lTs6-2TeH-pUYMjEqiFMhn-hb7wnvH_FuPTjgz9i0rEdw_Hf3Wk6CMypaUHi31y6twrMWq1jEbdQNl50EwH-RQmQ9bs3Wm9V9t-2-_Jzg3AT0Ny4zEDU7WXgN2DevM8_FVje4IgztNy29XUkeUctHsr-431_Iu23JIy6U4Kxn36X3RlVUKEkOMpkDD3kd81JPW4Ger_w", - /// "e": "AQAB", - /// "use": "sig" - /// } - /// ] - /// } - /// ``` - /// - /// We can call update_federated_jwk_set for Google's `iss` - "https://accounts.google.com" and for each vector - /// argument `kid_vec`, `alg_vec`, `e_vec`, `n_vec`, we set in index 0 the corresponding attribute in the first JWK and we set in index 1 the - /// the corresponding attribute in the second JWK as shown below. - /// - /// ```move - /// use std::string::utf8; - /// aptos_framework::jwks::update_federated_jwk_set( - /// jwk_owner, - /// b"https://accounts.google.com", - /// vector[utf8(b"d7b939771a7800c413f90051012d975981916d71"), utf8(b"b2620d5e7f132b52afe8875cdf3776c064249d04")], - /// vector[utf8(b"RS256"), utf8(b"RS256")], - /// vector[utf8(b"AQAB"), utf8(b"AQAB")], - /// vector[ - /// utf8(b"wNHgGSG5B5xOEQNFPW2p_6ZxZbfPoAU5VceBUuNwQWLop0ohW0vpoZLU1tAsq_S9s5iwy27rJw4EZAOGBR9oTRq1Y6Li5pDVJfmzyRNtmWCWndR-bPqhs_dkJU7MbGwcvfLsN9FSHESFrS9sfGtUX-lZfLoGux23TKdYV9EE-H-NDASxrVFUk2GWc3rL6UEMWrMnOqV9-tghybDU3fcRdNTDuXUr9qDYmhmNegYjYu4REGjqeSyIG1tuQxYpOBH-tohtcfGY-oRTS09kgsSS9Q5BRM4qqCkGP28WhlSf4ui0-norS0gKMMI1P_ZAGEsLn9p2TlYMpewvIuhjJs1thw"), - /// utf8(b"pi22xDdK2fz5gclIbDIGghLDYiRO56eW2GUcboeVlhbAuhuT5mlEYIevkxdPOg5n6qICePZiQSxkwcYMIZyLkZhSJ2d2M6Szx2gDtnAmee6o_tWdroKu0DjqwG8pZU693oLaIjLku3IK20lTs6-2TeH-pUYMjEqiFMhn-hb7wnvH_FuPTjgz9i0rEdw_Hf3Wk6CMypaUHi31y6twrMWq1jEbdQNl50EwH-RQmQ9bs3Wm9V9t-2-_Jzg3AT0Ny4zEDU7WXgN2DevM8_FVje4IgztNy29XUkeUctHsr-431_Iu23JIy6U4Kxn36X3RlVUKEkOMpkDD3kd81JPW4Ger_w") - /// ] - /// ) - /// ``` - /// - /// See AIP-96 for more details about federated keyless - https://github.com/aptos-foundation/AIPs/blob/main/aips/aip-96.md - /// - /// NOTE: Currently only RSA keys are supported. - public entry fun update_federated_jwk_set(jwk_owner: &signer, iss: vector, kid_vec: vector, alg_vec: vector, e_vec: vector, n_vec: vector) acquires FederatedJWKs { - assert!(!vector::is_empty(&kid_vec), error::invalid_argument(EINVALID_FEDERATED_JWK_SET)); - let num_jwk = vector::length(&kid_vec); - assert!(vector::length(&alg_vec) == num_jwk , error::invalid_argument(EINVALID_FEDERATED_JWK_SET)); - assert!(vector::length(&e_vec) == num_jwk, error::invalid_argument(EINVALID_FEDERATED_JWK_SET)); - assert!(vector::length(&n_vec) == num_jwk, error::invalid_argument(EINVALID_FEDERATED_JWK_SET)); - - let remove_all_patch = new_patch_remove_all(); - let patches = vector[remove_all_patch]; - while (!vector::is_empty(&kid_vec)) { - let kid = vector::pop_back(&mut kid_vec); - let alg = vector::pop_back(&mut alg_vec); - let e = vector::pop_back(&mut e_vec); - let n = vector::pop_back(&mut n_vec); - let jwk = new_rsa_jwk(kid, alg, e, n); - let patch = new_patch_upsert_jwk(iss, jwk); - vector::push_back(&mut patches, patch) - }; - patch_federated_jwks(jwk_owner, patches); - } - - /// Get a JWK by issuer and key ID from the `PatchedJWKs`. - /// Abort if such a JWK does not exist. - /// More convenient to call from Rust, since it does not wrap the JWK in an `Option`. - public fun get_patched_jwk(issuer: vector, jwk_id: vector): JWK acquires PatchedJWKs { - option::extract(&mut try_get_patched_jwk(issuer, jwk_id)) - } - - /// Get a JWK by issuer and key ID from the `PatchedJWKs`, if it exists. - /// More convenient to call from Move, since it does not abort. - public fun try_get_patched_jwk(issuer: vector, jwk_id: vector): Option acquires PatchedJWKs { - let jwks = &borrow_global(@aptos_framework).jwks; - try_get_jwk_by_issuer(jwks, issuer, jwk_id) - } - - /// Deprecated by `upsert_oidc_provider_for_next_epoch()`. - /// - /// TODO: update all the tests that reference this function, then disable this function. - public fun upsert_oidc_provider(fx: &signer, name: vector, config_url: vector): Option> acquires SupportedOIDCProviders { - system_addresses::assert_aptos_framework(fx); - chain_status::assert_genesis(); - - let provider_set = borrow_global_mut(@aptos_framework); - - let old_config_url= remove_oidc_provider_internal(provider_set, name); - vector::push_back(&mut provider_set.providers, OIDCProvider { name, config_url }); - old_config_url - } - - /// Used in on-chain governances to update the supported OIDC providers, effective starting next epoch. - /// Example usage: - /// ``` - /// aptos_framework::jwks::upsert_oidc_provider_for_next_epoch( - /// &framework_signer, - /// b"https://accounts.google.com", - /// b"https://accounts.google.com/.well-known/openid-configuration" - /// ); - /// aptos_framework::aptos_governance::reconfigure(&framework_signer); - /// ``` - public fun upsert_oidc_provider_for_next_epoch(fx: &signer, name: vector, config_url: vector): Option> acquires SupportedOIDCProviders { - system_addresses::assert_aptos_framework(fx); - - let provider_set = if (config_buffer::does_exist()) { - config_buffer::extract() - } else { - *borrow_global(@aptos_framework) - }; - - let old_config_url = remove_oidc_provider_internal(&mut provider_set, name); - vector::push_back(&mut provider_set.providers, OIDCProvider { name, config_url }); - config_buffer::upsert(provider_set); - old_config_url - } - - /// Deprecated by `remove_oidc_provider_for_next_epoch()`. - /// - /// TODO: update all the tests that reference this function, then disable this function. - public fun remove_oidc_provider(fx: &signer, name: vector): Option> acquires SupportedOIDCProviders { - system_addresses::assert_aptos_framework(fx); - chain_status::assert_genesis(); - - let provider_set = borrow_global_mut(@aptos_framework); - remove_oidc_provider_internal(provider_set, name) - } - - /// Used in on-chain governances to update the supported OIDC providers, effective starting next epoch. - /// Example usage: - /// ``` - /// aptos_framework::jwks::remove_oidc_provider_for_next_epoch( - /// &framework_signer, - /// b"https://accounts.google.com", - /// ); - /// aptos_framework::aptos_governance::reconfigure(&framework_signer); - /// ``` - public fun remove_oidc_provider_for_next_epoch(fx: &signer, name: vector): Option> acquires SupportedOIDCProviders { - system_addresses::assert_aptos_framework(fx); - - let provider_set = if (config_buffer::does_exist()) { - config_buffer::extract() - } else { - *borrow_global(@aptos_framework) - }; - let ret = remove_oidc_provider_internal(&mut provider_set, name); - config_buffer::upsert(provider_set); - ret - } - - /// Only used in reconfigurations to apply the pending `SupportedOIDCProviders`, if there is any. - public(friend) fun on_new_epoch(framework: &signer) acquires SupportedOIDCProviders { - system_addresses::assert_aptos_framework(framework); - if (config_buffer::does_exist()) { - let new_config = config_buffer::extract(); - if (exists(@aptos_framework)) { - *borrow_global_mut(@aptos_framework) = new_config; - } else { - move_to(framework, new_config); - } - } - } - - /// Set the `Patches`. Only called in governance proposals. - public fun set_patches(fx: &signer, patches: vector) acquires Patches, PatchedJWKs, ObservedJWKs { - system_addresses::assert_aptos_framework(fx); - borrow_global_mut(@aptos_framework).patches = patches; - regenerate_patched_jwks(); - } - - /// Create a `Patch` that removes all entries. - public fun new_patch_remove_all(): Patch { - Patch { - variant: copyable_any::pack(PatchRemoveAll {}), - } - } - - /// Create a `Patch` that removes the entry of a given issuer, if exists. - public fun new_patch_remove_issuer(issuer: vector): Patch { - Patch { - variant: copyable_any::pack(PatchRemoveIssuer { issuer }), - } - } - - /// Create a `Patch` that removes the entry of a given issuer, if exists. - public fun new_patch_remove_jwk(issuer: vector, jwk_id: vector): Patch { - Patch { - variant: copyable_any::pack(PatchRemoveJWK { issuer, jwk_id }) - } - } - - /// Create a `Patch` that upserts a JWK into an issuer's JWK set. - public fun new_patch_upsert_jwk(issuer: vector, jwk: JWK): Patch { - Patch { - variant: copyable_any::pack(PatchUpsertJWK { issuer, jwk }) - } - } - - /// Create a `JWK` of variant `RSA_JWK`. - public fun new_rsa_jwk(kid: String, alg: String, e: String, n: String): JWK { - JWK { - variant: copyable_any::pack(RSA_JWK { - kid, - kty: utf8(b"RSA"), - e, - n, - alg, - }), - } - } - - /// Create a `JWK` of variant `UnsupportedJWK`. - public fun new_unsupported_jwk(id: vector, payload: vector): JWK { - JWK { - variant: copyable_any::pack(UnsupportedJWK { id, payload }) - } - } - - /// Initialize some JWK resources. Should only be invoked by genesis. - public fun initialize(fx: &signer) { - system_addresses::assert_aptos_framework(fx); - move_to(fx, SupportedOIDCProviders { providers: vector[] }); - move_to(fx, ObservedJWKs { jwks: AllProvidersJWKs { entries: vector[] } }); - move_to(fx, Patches { patches: vector[] }); - move_to(fx, PatchedJWKs { jwks: AllProvidersJWKs { entries: vector[] } }); - } - - /// Helper function that removes an OIDC provider from the `SupportedOIDCProviders`. - /// Returns the old config URL of the provider, if any, as an `Option`. - fun remove_oidc_provider_internal(provider_set: &mut SupportedOIDCProviders, name: vector): Option> { - let (name_exists, idx) = vector::find(&provider_set.providers, |obj| { - let provider: &OIDCProvider = obj; - provider.name == name - }); - - if (name_exists) { - let old_provider = vector::swap_remove(&mut provider_set.providers, idx); - option::some(old_provider.config_url) - } else { - option::none() - } - } - - /// Only used by validators to publish their observed JWK update. - /// - /// NOTE: It is assumed verification has been done to ensure each update is quorum-certified, - /// and its `version` equals to the on-chain version + 1. - public fun upsert_into_observed_jwks(fx: &signer, provider_jwks_vec: vector) acquires ObservedJWKs, PatchedJWKs, Patches { - system_addresses::assert_aptos_framework(fx); - let observed_jwks = borrow_global_mut(@aptos_framework); - vector::for_each(provider_jwks_vec, |obj| { - let provider_jwks: ProviderJWKs = obj; - upsert_provider_jwks(&mut observed_jwks.jwks, provider_jwks); - }); - - let epoch = reconfiguration::current_epoch(); - emit(ObservedJWKsUpdated { epoch, jwks: observed_jwks.jwks }); - regenerate_patched_jwks(); - } - - /// Only used by governance to delete an issuer from `ObservedJWKs`, if it exists. - /// - /// Return the potentially existing `ProviderJWKs` of the given issuer. - public fun remove_issuer_from_observed_jwks(fx: &signer, issuer: vector): Option acquires ObservedJWKs, PatchedJWKs, Patches { - system_addresses::assert_aptos_framework(fx); - let observed_jwks = borrow_global_mut(@aptos_framework); - let old_value = remove_issuer(&mut observed_jwks.jwks, issuer); - - let epoch = reconfiguration::current_epoch(); - emit(ObservedJWKsUpdated { epoch, jwks: observed_jwks.jwks }); - regenerate_patched_jwks(); - - old_value - } - - /// Regenerate `PatchedJWKs` from `ObservedJWKs` and `Patches` and save the result. - fun regenerate_patched_jwks() acquires PatchedJWKs, Patches, ObservedJWKs { - let jwks = borrow_global(@aptos_framework).jwks; - let patches = borrow_global(@aptos_framework); - vector::for_each_ref(&patches.patches, |obj|{ - let patch: &Patch = obj; - apply_patch(&mut jwks, *patch); - }); - *borrow_global_mut(@aptos_framework) = PatchedJWKs { jwks }; - } - - /// Get a JWK by issuer and key ID from an `AllProvidersJWKs`, if it exists. - fun try_get_jwk_by_issuer(jwks: &AllProvidersJWKs, issuer: vector, jwk_id: vector): Option { - let (issuer_found, index) = vector::find(&jwks.entries, |obj| { - let provider_jwks: &ProviderJWKs = obj; - issuer == provider_jwks.issuer - }); - - if (issuer_found) { - try_get_jwk_by_id(vector::borrow(&jwks.entries, index), jwk_id) - } else { - option::none() - } - } - - /// Get a JWK by key ID from a `ProviderJWKs`, if it exists. - fun try_get_jwk_by_id(provider_jwks: &ProviderJWKs, jwk_id: vector): Option { - let (jwk_id_found, index) = vector::find(&provider_jwks.jwks, |obj|{ - let jwk: &JWK = obj; - jwk_id == get_jwk_id(jwk) - }); - - if (jwk_id_found) { - option::some(*vector::borrow(&provider_jwks.jwks, index)) - } else { - option::none() - } - } - - /// Get the ID of a JWK. - fun get_jwk_id(jwk: &JWK): vector { - let variant_type_name = *string::bytes(copyable_any::type_name(&jwk.variant)); - if (variant_type_name == b"0x1::jwks::RSA_JWK") { - let rsa = copyable_any::unpack(jwk.variant); - *string::bytes(&rsa.kid) - } else if (variant_type_name == b"0x1::jwks::UnsupportedJWK") { - let unsupported = copyable_any::unpack(jwk.variant); - unsupported.id - } else { - abort(error::invalid_argument(EUNKNOWN_JWK_VARIANT)) - } - } - - /// Upsert a `ProviderJWKs` into an `AllProvidersJWKs`. If this upsert replaced an existing entry, return it. - /// Maintains the sorted-by-issuer invariant in `AllProvidersJWKs`. - fun upsert_provider_jwks(jwks: &mut AllProvidersJWKs, provider_jwks: ProviderJWKs): Option { - // NOTE: Using a linear-time search here because we do not expect too many providers. - let found = false; - let index = 0; - let num_entries = vector::length(&jwks.entries); - while (index < num_entries) { - let cur_entry = vector::borrow(&jwks.entries, index); - let comparison = compare_u8_vector(provider_jwks.issuer, cur_entry.issuer); - if (is_greater_than(&comparison)) { - index = index + 1; - } else { - found = is_equal(&comparison); - break - } - }; - - // Now if `found == true`, `index` points to the JWK we want to update/remove; otherwise, `index` points to - // where we want to insert. - let ret = if (found) { - let entry = vector::borrow_mut(&mut jwks.entries, index); - let old_entry = option::some(*entry); - *entry = provider_jwks; - old_entry - } else { - vector::insert(&mut jwks.entries, index, provider_jwks); - option::none() - }; - - ret - } - - /// Remove the entry of an issuer from a `AllProvidersJWKs` and return the entry, if exists. - /// Maintains the sorted-by-issuer invariant in `AllProvidersJWKs`. - fun remove_issuer(jwks: &mut AllProvidersJWKs, issuer: vector): Option { - let (found, index) = vector::find(&jwks.entries, |obj| { - let provider_jwk_set: &ProviderJWKs = obj; - provider_jwk_set.issuer == issuer - }); - - let ret = if (found) { - option::some(vector::remove(&mut jwks.entries, index)) - } else { - option::none() - }; - - ret - } - - /// Upsert a `JWK` into a `ProviderJWKs`. If this upsert replaced an existing entry, return it. - fun upsert_jwk(set: &mut ProviderJWKs, jwk: JWK): Option { - let found = false; - let index = 0; - let num_entries = vector::length(&set.jwks); - while (index < num_entries) { - let cur_entry = vector::borrow(&set.jwks, index); - let comparison = compare_u8_vector(get_jwk_id(&jwk), get_jwk_id(cur_entry)); - if (is_greater_than(&comparison)) { - index = index + 1; - } else { - found = is_equal(&comparison); - break - } - }; - - // Now if `found == true`, `index` points to the JWK we want to update/remove; otherwise, `index` points to - // where we want to insert. - let ret = if (found) { - let entry = vector::borrow_mut(&mut set.jwks, index); - let old_entry = option::some(*entry); - *entry = jwk; - old_entry - } else { - vector::insert(&mut set.jwks, index, jwk); - option::none() - }; - - ret - } - - /// Remove the entry of a key ID from a `ProviderJWKs` and return the entry, if exists. - fun remove_jwk(jwks: &mut ProviderJWKs, jwk_id: vector): Option { - let (found, index) = vector::find(&jwks.jwks, |obj| { - let jwk: &JWK = obj; - jwk_id == get_jwk_id(jwk) - }); - - let ret = if (found) { - option::some(vector::remove(&mut jwks.jwks, index)) - } else { - option::none() - }; - - ret - } - - /// Modify an `AllProvidersJWKs` object with a `Patch`. - /// Maintains the sorted-by-issuer invariant in `AllProvidersJWKs`. - fun apply_patch(jwks: &mut AllProvidersJWKs, patch: Patch) { - let variant_type_name = *string::bytes(copyable_any::type_name(&patch.variant)); - if (variant_type_name == b"0x1::jwks::PatchRemoveAll") { - jwks.entries = vector[]; - } else if (variant_type_name == b"0x1::jwks::PatchRemoveIssuer") { - let cmd = copyable_any::unpack(patch.variant); - remove_issuer(jwks, cmd.issuer); - } else if (variant_type_name == b"0x1::jwks::PatchRemoveJWK") { - let cmd = copyable_any::unpack(patch.variant); - // TODO: This is inefficient: we remove the issuer, modify its JWKs & and reinsert the updated issuer. Why - // not just update it in place? - let existing_jwk_set = remove_issuer(jwks, cmd.issuer); - if (option::is_some(&existing_jwk_set)) { - let jwk_set = option::extract(&mut existing_jwk_set); - remove_jwk(&mut jwk_set, cmd.jwk_id); - upsert_provider_jwks(jwks, jwk_set); - }; - } else if (variant_type_name == b"0x1::jwks::PatchUpsertJWK") { - let cmd = copyable_any::unpack(patch.variant); - // TODO: This is inefficient: we remove the issuer, modify its JWKs & and reinsert the updated issuer. Why - // not just update it in place? - let existing_jwk_set = remove_issuer(jwks, cmd.issuer); - let jwk_set = if (option::is_some(&existing_jwk_set)) { - option::extract(&mut existing_jwk_set) - } else { - ProviderJWKs { - version: 0, - issuer: cmd.issuer, - jwks: vector[], - } - }; - upsert_jwk(&mut jwk_set, cmd.jwk); - upsert_provider_jwks(jwks, jwk_set); - } else { - abort(std::error::invalid_argument(EUNKNOWN_PATCH_VARIANT)) - } - } - - // - // Functions end. - // Tests begin. - // - - #[test_only] - fun initialize_for_test(aptos_framework: &signer) { - create_account_for_test(@aptos_framework); - reconfiguration::initialize_for_test(aptos_framework); - initialize(aptos_framework); - } - - #[test(fx = @aptos_framework)] - fun test_observed_jwks_operations(fx: &signer) acquires ObservedJWKs, PatchedJWKs, Patches { - initialize_for_test(fx); - let jwk_0 = new_unsupported_jwk(b"key_id_0", b"key_payload_0"); - let jwk_1 = new_unsupported_jwk(b"key_id_1", b"key_payload_1"); - let jwk_2 = new_unsupported_jwk(b"key_id_2", b"key_payload_2"); - let jwk_3 = new_unsupported_jwk(b"key_id_3", b"key_payload_3"); - let jwk_4 = new_unsupported_jwk(b"key_id_4", b"key_payload_4"); - let expected = AllProvidersJWKs { entries: vector[] }; - assert!(expected == borrow_global(@aptos_framework).jwks, 1); - - let alice_jwks_v1 = ProviderJWKs { - issuer: b"alice", - version: 1, - jwks: vector[jwk_0, jwk_1], - }; - let bob_jwks_v1 = ProviderJWKs{ - issuer: b"bob", - version: 1, - jwks: vector[jwk_2, jwk_3], - }; - upsert_into_observed_jwks(fx, vector[bob_jwks_v1]); - upsert_into_observed_jwks(fx, vector[alice_jwks_v1]); - let expected = AllProvidersJWKs { entries: vector[ - alice_jwks_v1, - bob_jwks_v1, - ] }; - assert!(expected == borrow_global(@aptos_framework).jwks, 2); - - let alice_jwks_v2 = ProviderJWKs { - issuer: b"alice", - version: 2, - jwks: vector[jwk_1, jwk_4], - }; - upsert_into_observed_jwks(fx, vector[alice_jwks_v2]); - let expected = AllProvidersJWKs { entries: vector[ - alice_jwks_v2, - bob_jwks_v1, - ] }; - assert!(expected == borrow_global(@aptos_framework).jwks, 3); - - remove_issuer_from_observed_jwks(fx, b"alice"); - let expected = AllProvidersJWKs { entries: vector[bob_jwks_v1] }; - assert!(expected == borrow_global(@aptos_framework).jwks, 4); - } - - #[test] - fun test_apply_patch() { - let jwks = AllProvidersJWKs { - entries: vector[ - ProviderJWKs { - issuer: b"alice", - version: 111, - jwks: vector[ - new_rsa_jwk( - utf8(b"e4adfb436b9e197e2e1106af2c842284e4986aff"), // kid - utf8(b"RS256"), // alg - utf8(b"AQAB"), // e - utf8(b"psply8S991RswM0JQJwv51fooFFvZUtYdL8avyKObshyzj7oJuJD8vkf5DKJJF1XOGi6Wv2D-U4b3htgrVXeOjAvaKTYtrQVUG_Txwjebdm2EvBJ4R6UaOULjavcSkb8VzW4l4AmP_yWoidkHq8n6vfHt9alDAONILi7jPDzRC7NvnHQ_x0hkRVh_OAmOJCpkgb0gx9-U8zSBSmowQmvw15AZ1I0buYZSSugY7jwNS2U716oujAiqtRkC7kg4gPouW_SxMleeo8PyRsHpYCfBME66m-P8Zr9Fh1Qgmqg4cWdy_6wUuNc1cbVY_7w1BpHZtZCNeQ56AHUgUFmo2LAQQ"), // n - ), - new_unsupported_jwk(b"key_id_0", b"key_content_0"), - ], - }, - ProviderJWKs { - issuer: b"bob", - version: 222, - jwks: vector[ - new_unsupported_jwk(b"key_id_1", b"key_content_1"), - new_unsupported_jwk(b"key_id_2", b"key_content_2"), - ], - }, - ], - }; - - let patch = new_patch_remove_issuer(b"alice"); - apply_patch(&mut jwks, patch); - assert!(jwks == AllProvidersJWKs { - entries: vector[ - ProviderJWKs { - issuer: b"bob", - version: 222, - jwks: vector[ - new_unsupported_jwk(b"key_id_1", b"key_content_1"), - new_unsupported_jwk(b"key_id_2", b"key_content_2"), - ], - }, - ], - }, 1); - - let patch = new_patch_remove_jwk(b"bob", b"key_id_1"); - apply_patch(&mut jwks, patch); - assert!(jwks == AllProvidersJWKs { - entries: vector[ - ProviderJWKs { - issuer: b"bob", - version: 222, - jwks: vector[ - new_unsupported_jwk(b"key_id_2", b"key_content_2"), - ], - }, - ], - }, 1); - - let patch = new_patch_upsert_jwk(b"carl", new_rsa_jwk( - utf8(b"0ad1fec78504f447bae65bcf5afaedb65eec9e81"), // kid - utf8(b"RS256"), // alg - utf8(b"AQAB"), // e - utf8(b"sm72oBH-R2Rqt4hkjp66tz5qCtq42TMnVgZg2Pdm_zs7_-EoFyNs9sD1MKsZAFaBPXBHDiWywyaHhLgwETLN9hlJIZPzGCEtV3mXJFSYG-8L6t3kyKi9X1lUTZzbmNpE0tf-eMW-3gs3VQSBJQOcQnuiANxbSXwS3PFmi173C_5fDSuC1RoYGT6X3JqLc3DWUmBGucuQjPaUF0w6LMqEIy0W_WYbW7HImwANT6dT52T72md0JWZuAKsRRnRr_bvaUX8_e3K8Pb1K_t3dD6WSLvtmEfUnGQgLynVl3aV5sRYC0Hy_IkRgoxl2fd8AaZT1X_rdPexYpx152Pl_CHJ79Q"), // n - )); - apply_patch(&mut jwks, patch); - let edit = new_patch_upsert_jwk(b"bob", new_unsupported_jwk(b"key_id_2", b"key_content_2b")); - apply_patch(&mut jwks, edit); - let edit = new_patch_upsert_jwk(b"alice", new_unsupported_jwk(b"key_id_3", b"key_content_3")); - apply_patch(&mut jwks, edit); - let edit = new_patch_upsert_jwk(b"alice", new_unsupported_jwk(b"key_id_0", b"key_content_0b")); - apply_patch(&mut jwks, edit); - assert!(jwks == AllProvidersJWKs { - entries: vector[ - ProviderJWKs { - issuer: b"alice", - version: 0, - jwks: vector[ - new_unsupported_jwk(b"key_id_0", b"key_content_0b"), - new_unsupported_jwk(b"key_id_3", b"key_content_3"), - ], - }, - ProviderJWKs { - issuer: b"bob", - version: 222, - jwks: vector[ - new_unsupported_jwk(b"key_id_2", b"key_content_2b"), - ], - }, - ProviderJWKs { - issuer: b"carl", - version: 0, - jwks: vector[ - new_rsa_jwk( - utf8(b"0ad1fec78504f447bae65bcf5afaedb65eec9e81"), // kid - utf8(b"RS256"), // alg - utf8(b"AQAB"), // e - utf8(b"sm72oBH-R2Rqt4hkjp66tz5qCtq42TMnVgZg2Pdm_zs7_-EoFyNs9sD1MKsZAFaBPXBHDiWywyaHhLgwETLN9hlJIZPzGCEtV3mXJFSYG-8L6t3kyKi9X1lUTZzbmNpE0tf-eMW-3gs3VQSBJQOcQnuiANxbSXwS3PFmi173C_5fDSuC1RoYGT6X3JqLc3DWUmBGucuQjPaUF0w6LMqEIy0W_WYbW7HImwANT6dT52T72md0JWZuAKsRRnRr_bvaUX8_e3K8Pb1K_t3dD6WSLvtmEfUnGQgLynVl3aV5sRYC0Hy_IkRgoxl2fd8AaZT1X_rdPexYpx152Pl_CHJ79Q"), // n - ) - ], - }, - ], - }, 1); - - let patch = new_patch_remove_all(); - apply_patch(&mut jwks, patch); - assert!(jwks == AllProvidersJWKs { entries: vector[] }, 1); - } - - #[test(aptos_framework = @aptos_framework)] - fun test_patched_jwks(aptos_framework: signer) acquires ObservedJWKs, PatchedJWKs, Patches { - initialize_for_test(&aptos_framework); - let jwk_0 = new_unsupported_jwk(b"key_id_0", b"key_payload_0"); - let jwk_1 = new_unsupported_jwk(b"key_id_1", b"key_payload_1"); - let jwk_2 = new_unsupported_jwk(b"key_id_2", b"key_payload_2"); - let jwk_3 = new_unsupported_jwk(b"key_id_3", b"key_payload_3"); - let jwk_3b = new_unsupported_jwk(b"key_id_3", b"key_payload_3b"); - - // Fake observation from validators. - upsert_into_observed_jwks(&aptos_framework, vector [ - ProviderJWKs { - issuer: b"alice", - version: 111, - jwks: vector[jwk_0, jwk_1], - }, - ProviderJWKs{ - issuer: b"bob", - version: 222, - jwks: vector[jwk_2, jwk_3], - }, - ]); - assert!(jwk_3 == get_patched_jwk(b"bob", b"key_id_3"), 1); - assert!(option::some(jwk_3) == try_get_patched_jwk(b"bob", b"key_id_3"), 1); - - // Ignore all Bob's keys. - set_patches(&aptos_framework, vector[ - new_patch_remove_issuer(b"bob"), - ]); - assert!(option::none() == try_get_patched_jwk(b"bob", b"key_id_3"), 1); - - // Update one of Bob's key.. - set_patches(&aptos_framework, vector[ - new_patch_upsert_jwk(b"bob", jwk_3b), - ]); - assert!(jwk_3b == get_patched_jwk(b"bob", b"key_id_3"), 1); - assert!(option::some(jwk_3b) == try_get_patched_jwk(b"bob", b"key_id_3"), 1); - - // Wipe everything, then add some keys back. - set_patches(&aptos_framework, vector[ - new_patch_remove_all(), - new_patch_upsert_jwk(b"alice", jwk_1), - new_patch_upsert_jwk(b"bob", jwk_3), - ]); - assert!(jwk_3 == get_patched_jwk(b"bob", b"key_id_3"), 1); - assert!(option::some(jwk_3) == try_get_patched_jwk(b"bob", b"key_id_3"), 1); - } -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/keyless_account.move b/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/keyless_account.move deleted file mode 100644 index 269c209b2..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/keyless_account.move +++ /dev/null @@ -1,312 +0,0 @@ -/// This module is responsible for configuring keyless blockchain accounts which were introduced in -/// [AIP-61](https://github.com/aptos-foundation/AIPs/blob/main/aips/aip-61.md). -module aptos_framework::keyless_account { - use std::bn254_algebra; - use std::config_buffer; - use std::option; - use std::option::Option; - use std::signer; - use std::string::String; - use std::vector; - use aptos_std::crypto_algebra; - use aptos_std::ed25519; - use aptos_framework::chain_status; - use aptos_framework::system_addresses; - - // The `aptos_framework::reconfiguration_with_dkg` module needs to be able to call `on_new_epoch`. - friend aptos_framework::reconfiguration_with_dkg; - - /// The training wheels PK needs to be 32 bytes long. - const E_TRAINING_WHEELS_PK_WRONG_SIZE : u64 = 1; - - /// A serialized BN254 G1 point is invalid. - const E_INVALID_BN254_G1_SERIALIZATION: u64 = 2; - - /// A serialized BN254 G2 point is invalid. - const E_INVALID_BN254_G2_SERIALIZATION: u64 = 3; - - #[resource_group(scope = global)] - struct Group {} - - #[resource_group_member(group = aptos_framework::keyless_account::Group)] - /// The 288-byte Groth16 verification key (VK) for the ZK relation that implements keyless accounts - struct Groth16VerificationKey has key, store, drop { - /// 32-byte serialization of `alpha * G`, where `G` is the generator of `G1`. - alpha_g1: vector, - /// 64-byte serialization of `alpha * H`, where `H` is the generator of `G2`. - beta_g2: vector, - /// 64-byte serialization of `gamma * H`, where `H` is the generator of `G2`. - gamma_g2: vector, - /// 64-byte serialization of `delta * H`, where `H` is the generator of `G2`. - delta_g2: vector, - /// `\forall i \in {0, ..., \ell}, 64-byte serialization of gamma^{-1} * (beta * a_i + alpha * b_i + c_i) * H`, where - /// `H` is the generator of `G1` and `\ell` is 1 for the ZK relation. - gamma_abc_g1: vector>, - } - - #[resource_group_member(group = aptos_framework::keyless_account::Group)] - struct Configuration has key, store, drop, copy { - /// An override `aud` for the identity of a recovery service, which will help users recover their keyless accounts - /// associated with dapps or wallets that have disappeared. - /// IMPORTANT: This recovery service **cannot** on its own take over user accounts; a user must first sign in - /// via OAuth in the recovery service in order to allow it to rotate any of that user's keyless accounts. - override_aud_vals: vector, - /// No transaction can have more than this many keyless signatures. - max_signatures_per_txn: u16, - /// How far in the future from the JWT issued at time the EPK expiry can be set. - max_exp_horizon_secs: u64, - /// The training wheels PK, if training wheels are on - training_wheels_pubkey: Option>, - /// The max length of an ephemeral public key supported in our circuit (93 bytes) - max_commited_epk_bytes: u16, - /// The max length of the value of the JWT's `iss` field supported in our circuit (e.g., `"https://accounts.google.com"`) - max_iss_val_bytes: u16, - /// The max length of the JWT field name and value (e.g., `"max_age":"18"`) supported in our circuit - max_extra_field_bytes: u16, - /// The max length of the base64url-encoded JWT header in bytes supported in our circuit - max_jwt_header_b64_bytes: u32, - } - - #[test_only] - public fun initialize_for_test(fx: &signer, vk: Groth16VerificationKey, constants: Configuration) { - system_addresses::assert_aptos_framework(fx); - - move_to(fx, vk); - move_to(fx, constants); - } - - public fun new_groth16_verification_key(alpha_g1: vector, - beta_g2: vector, - gamma_g2: vector, - delta_g2: vector, - gamma_abc_g1: vector> - ): Groth16VerificationKey { - Groth16VerificationKey { - alpha_g1, - beta_g2, - gamma_g2, - delta_g2, - gamma_abc_g1, - } - } - - public fun new_configuration( - override_aud_val: vector, - max_signatures_per_txn: u16, - max_exp_horizon_secs: u64, - training_wheels_pubkey: Option>, - max_commited_epk_bytes: u16, - max_iss_val_bytes: u16, - max_extra_field_bytes: u16, - max_jwt_header_b64_bytes: u32 - ): Configuration { - Configuration { - override_aud_vals: override_aud_val, - max_signatures_per_txn, - max_exp_horizon_secs, - training_wheels_pubkey, - max_commited_epk_bytes, - max_iss_val_bytes, - max_extra_field_bytes, - max_jwt_header_b64_bytes, - } - } - - /// Pre-validate the VK to actively-prevent incorrect VKs from being set on-chain. - fun validate_groth16_vk(vk: &Groth16VerificationKey) { - // Could be leveraged to speed up the VM deserialization of the VK by 2x, since it can assume the points are valid. - assert!(option::is_some(&crypto_algebra::deserialize(&vk.alpha_g1)), E_INVALID_BN254_G1_SERIALIZATION); - assert!(option::is_some(&crypto_algebra::deserialize(&vk.beta_g2)), E_INVALID_BN254_G2_SERIALIZATION); - assert!(option::is_some(&crypto_algebra::deserialize(&vk.gamma_g2)), E_INVALID_BN254_G2_SERIALIZATION); - assert!(option::is_some(&crypto_algebra::deserialize(&vk.delta_g2)), E_INVALID_BN254_G2_SERIALIZATION); - for (i in 0..vector::length(&vk.gamma_abc_g1)) { - assert!(option::is_some(&crypto_algebra::deserialize(vector::borrow(&vk.gamma_abc_g1, i))), E_INVALID_BN254_G1_SERIALIZATION); - }; - } - - /// Sets the Groth16 verification key, only callable during genesis. To call during governance proposals, use - /// `set_groth16_verification_key_for_next_epoch`. - /// - /// WARNING: See `set_groth16_verification_key_for_next_epoch` for caveats. - public fun update_groth16_verification_key(fx: &signer, vk: Groth16VerificationKey) { - system_addresses::assert_aptos_framework(fx); - chain_status::assert_genesis(); - // There should not be a previous resource set here. - move_to(fx, vk); - } - - /// Sets the keyless configuration, only callable during genesis. To call during governance proposals, use - /// `set_configuration_for_next_epoch`. - /// - /// WARNING: See `set_configuration_for_next_epoch` for caveats. - public fun update_configuration(fx: &signer, config: Configuration) { - system_addresses::assert_aptos_framework(fx); - chain_status::assert_genesis(); - // There should not be a previous resource set here. - move_to(fx, config); - } - - #[deprecated] - public fun update_training_wheels(fx: &signer, pk: Option>) acquires Configuration { - system_addresses::assert_aptos_framework(fx); - chain_status::assert_genesis(); - - if (option::is_some(&pk)) { - assert!(vector::length(option::borrow(&pk)) == 32, E_TRAINING_WHEELS_PK_WRONG_SIZE) - }; - - let config = borrow_global_mut(signer::address_of(fx)); - config.training_wheels_pubkey = pk; - } - - #[deprecated] - public fun update_max_exp_horizon(fx: &signer, max_exp_horizon_secs: u64) acquires Configuration { - system_addresses::assert_aptos_framework(fx); - chain_status::assert_genesis(); - - let config = borrow_global_mut(signer::address_of(fx)); - config.max_exp_horizon_secs = max_exp_horizon_secs; - } - - #[deprecated] - public fun remove_all_override_auds(fx: &signer) acquires Configuration { - system_addresses::assert_aptos_framework(fx); - chain_status::assert_genesis(); - - let config = borrow_global_mut(signer::address_of(fx)); - config.override_aud_vals = vector[]; - } - - #[deprecated] - public fun add_override_aud(fx: &signer, aud: String) acquires Configuration { - system_addresses::assert_aptos_framework(fx); - chain_status::assert_genesis(); - - let config = borrow_global_mut(signer::address_of(fx)); - vector::push_back(&mut config.override_aud_vals, aud); - } - - /// Queues up a change to the Groth16 verification key. The change will only be effective after reconfiguration. - /// Only callable via governance proposal. - /// - /// WARNING: To mitigate against DoS attacks, a VK change should be done together with a training wheels PK change, - /// so that old ZKPs for the old VK cannot be replayed as potentially-valid ZKPs. - /// - /// WARNING: If a malicious key is set, this would lead to stolen funds. - public fun set_groth16_verification_key_for_next_epoch(fx: &signer, vk: Groth16VerificationKey) { - system_addresses::assert_aptos_framework(fx); - config_buffer::upsert(vk); - } - - - /// Queues up a change to the keyless configuration. The change will only be effective after reconfiguration. Only - /// callable via governance proposal. - /// - /// WARNING: A malicious `Configuration` could lead to DoS attacks, create liveness issues, or enable a malicious - /// recovery service provider to phish users' accounts. - public fun set_configuration_for_next_epoch(fx: &signer, config: Configuration) { - system_addresses::assert_aptos_framework(fx); - config_buffer::upsert(config); - } - - /// Convenience method to queue up a change to the training wheels PK. The change will only be effective after - /// reconfiguration. Only callable via governance proposal. - /// - /// WARNING: If a malicious key is set, this *could* lead to stolen funds. - public fun update_training_wheels_for_next_epoch(fx: &signer, pk: Option>) acquires Configuration { - system_addresses::assert_aptos_framework(fx); - - // If a PK is being set, validate it first. - if (option::is_some(&pk)) { - let bytes = *option::borrow(&pk); - let vpk = ed25519::new_validated_public_key_from_bytes(bytes); - assert!(option::is_some(&vpk), E_TRAINING_WHEELS_PK_WRONG_SIZE) - }; - - let config = if (config_buffer::does_exist()) { - config_buffer::extract() - } else { - *borrow_global(signer::address_of(fx)) - }; - - config.training_wheels_pubkey = pk; - - set_configuration_for_next_epoch(fx, config); - } - - /// Convenience method to queues up a change to the max expiration horizon. The change will only be effective after - /// reconfiguration. Only callable via governance proposal. - public fun update_max_exp_horizon_for_next_epoch(fx: &signer, max_exp_horizon_secs: u64) acquires Configuration { - system_addresses::assert_aptos_framework(fx); - - let config = if (config_buffer::does_exist()) { - config_buffer::extract() - } else { - *borrow_global(signer::address_of(fx)) - }; - - config.max_exp_horizon_secs = max_exp_horizon_secs; - - set_configuration_for_next_epoch(fx, config); - } - - /// Convenience method to queue up clearing the set of override `aud`'s. The change will only be effective after - /// reconfiguration. Only callable via governance proposal. - /// - /// WARNING: When no override `aud` is set, recovery of keyless accounts associated with applications that disappeared - /// is no longer possible. - public fun remove_all_override_auds_for_next_epoch(fx: &signer) acquires Configuration { - system_addresses::assert_aptos_framework(fx); - - let config = if (config_buffer::does_exist()) { - config_buffer::extract() - } else { - *borrow_global(signer::address_of(fx)) - }; - - config.override_aud_vals = vector[]; - - set_configuration_for_next_epoch(fx, config); - } - - /// Convenience method to queue up an append to to the set of override `aud`'s. The change will only be effective - /// after reconfiguration. Only callable via governance proposal. - /// - /// WARNING: If a malicious override `aud` is set, this *could* lead to stolen funds. - public fun add_override_aud_for_next_epoch(fx: &signer, aud: String) acquires Configuration { - system_addresses::assert_aptos_framework(fx); - - let config = if (config_buffer::does_exist()) { - config_buffer::extract() - } else { - *borrow_global(signer::address_of(fx)) - }; - - vector::push_back(&mut config.override_aud_vals, aud); - - set_configuration_for_next_epoch(fx, config); - } - - /// Only used in reconfigurations to apply the queued up configuration changes, if there are any. - public(friend) fun on_new_epoch(fx: &signer) acquires Groth16VerificationKey, Configuration { - system_addresses::assert_aptos_framework(fx); - - if (config_buffer::does_exist()) { - let vk = config_buffer::extract(); - if (exists(@aptos_framework)) { - *borrow_global_mut(@aptos_framework) = vk; - } else { - move_to(fx, vk); - } - }; - - if (config_buffer::does_exist()) { - let config = config_buffer::extract(); - if (exists(@aptos_framework)) { - *borrow_global_mut(@aptos_framework) = config; - } else { - move_to(fx, config); - } - }; - } -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/managed_coin.move b/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/managed_coin.move deleted file mode 100644 index a5da4b24a..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/managed_coin.move +++ /dev/null @@ -1,267 +0,0 @@ -/// ManagedCoin is built to make a simple walkthrough of the Coins module. -/// It contains scripts you will need to initialize, mint, burn, transfer coins. -/// By utilizing this current module, a developer can create his own coin and care less about mint and burn capabilities, -module aptos_framework::managed_coin { - use std::string; - use std::error; - use std::signer; - - use aptos_framework::coin::{Self, BurnCapability, FreezeCapability, MintCapability, destroy_burn_cap, - destroy_freeze_cap, destroy_mint_cap - }; - - // - // Errors - // - - /// Account has no capabilities (burn/mint). - const ENO_CAPABILITIES: u64 = 1; - - // - // Data structures - // - - /// Capabilities resource storing mint and burn capabilities. - /// The resource is stored on the account that initialized coin `CoinType`. - struct Capabilities has key { - burn_cap: BurnCapability, - freeze_cap: FreezeCapability, - mint_cap: MintCapability, - } - - // - // Public functions - // - - /// Withdraw an `amount` of coin `CoinType` from `account` and burn it. - public entry fun burn( - account: &signer, - amount: u64, - ) acquires Capabilities { - let account_addr = signer::address_of(account); - - assert!( - exists>(account_addr), - error::not_found(ENO_CAPABILITIES), - ); - - let capabilities = borrow_global>(account_addr); - - let to_burn = coin::withdraw(account, amount); - coin::burn(to_burn, &capabilities.burn_cap); - } - - /// Initialize new coin `CoinType` in Aptos Blockchain. - /// Mint and Burn Capabilities will be stored under `account` in `Capabilities` resource. - public entry fun initialize( - account: &signer, - name: vector, - symbol: vector, - decimals: u8, - monitor_supply: bool, - ) { - let (burn_cap, freeze_cap, mint_cap) = coin::initialize( - account, - string::utf8(name), - string::utf8(symbol), - decimals, - monitor_supply, - ); - - move_to(account, Capabilities { - burn_cap, - freeze_cap, - mint_cap, - }); - } - - /// Create new coins `CoinType` and deposit them into dst_addr's account. - public entry fun mint( - account: &signer, - dst_addr: address, - amount: u64, - ) acquires Capabilities { - let account_addr = signer::address_of(account); - - assert!( - exists>(account_addr), - error::not_found(ENO_CAPABILITIES), - ); - - let capabilities = borrow_global>(account_addr); - let coins_minted = coin::mint(amount, &capabilities.mint_cap); - coin::deposit(dst_addr, coins_minted); - } - - /// Creating a resource that stores balance of `CoinType` on user's account, withdraw and deposit event handlers. - /// Required if user wants to start accepting deposits of `CoinType` in his account. - public entry fun register(account: &signer) { - coin::register(account); - } - - /// Destroys capabilities from the account, so that the user no longer has access to mint or burn. - public entry fun destroy_caps(account: &signer) acquires Capabilities { - let (burn_cap, freeze_cap, mint_cap) = remove_caps(account); - destroy_burn_cap(burn_cap); - destroy_freeze_cap(freeze_cap); - destroy_mint_cap(mint_cap); - } - - /// Removes capabilities from the account to be stored or destroyed elsewhere - public fun remove_caps( - account: &signer - ): (BurnCapability, FreezeCapability, MintCapability) acquires Capabilities { - let account_addr = signer::address_of(account); - assert!( - exists>(account_addr), - error::not_found(ENO_CAPABILITIES), - ); - - let Capabilities { - burn_cap, - freeze_cap, - mint_cap, - } = move_from>(account_addr); - (burn_cap, freeze_cap, mint_cap) - } - - // - // Tests - // - - #[test_only] - use std::option; - - #[test_only] - use aptos_framework::aggregator_factory; - - #[test_only] - struct FakeMoney {} - - #[test(source = @0xa11ce, destination = @0xb0b, mod_account = @0x1)] - public entry fun test_end_to_end( - source: signer, - destination: signer, - mod_account: signer - ) acquires Capabilities { - let source_addr = signer::address_of(&source); - let destination_addr = signer::address_of(&destination); - aptos_framework::account::create_account_for_test(source_addr); - aptos_framework::account::create_account_for_test(destination_addr); - aptos_framework::account::create_account_for_test(signer::address_of(&mod_account)); - aggregator_factory::initialize_aggregator_factory_for_test(&mod_account); - - initialize( - &mod_account, - b"Fake Money", - b"FMD", - 10, - true - ); - assert!(coin::is_coin_initialized(), 0); - - coin::register(&mod_account); - register(&source); - register(&destination); - - mint(&mod_account, source_addr, 50); - mint(&mod_account, destination_addr, 10); - assert!(coin::balance(source_addr) == 50, 1); - assert!(coin::balance(destination_addr) == 10, 2); - - let supply = coin::supply(); - assert!(option::is_some(&supply), 1); - assert!(option::extract(&mut supply) == 60, 2); - - coin::transfer(&source, destination_addr, 10); - assert!(coin::balance(source_addr) == 40, 3); - assert!(coin::balance(destination_addr) == 20, 4); - - coin::transfer(&source, signer::address_of(&mod_account), 40); - burn(&mod_account, 40); - - assert!(coin::balance(source_addr) == 0, 1); - - let new_supply = coin::supply(); - assert!(option::extract(&mut new_supply) == 20, 2); - - // Destroy mint capabilities - destroy_caps(&mod_account); - assert!(!exists>(signer::address_of(&mod_account)), 3); - } - - #[test(source = @0xa11ce, destination = @0xb0b, mod_account = @0x1)] - public entry fun test_end_to_end_caps_removal( - source: signer, - destination: signer, - mod_account: signer - ) acquires Capabilities { - let source_addr = signer::address_of(&source); - let destination_addr = signer::address_of(&destination); - aptos_framework::account::create_account_for_test(source_addr); - aptos_framework::account::create_account_for_test(destination_addr); - aptos_framework::account::create_account_for_test(signer::address_of(&mod_account)); - aggregator_factory::initialize_aggregator_factory_for_test(&mod_account); - - initialize( - &mod_account, - b"Fake Money", - b"FMD", - 10, - true - ); - assert!(coin::is_coin_initialized(), 0); - - // Remove capabilities - let (burn_cap, freeze_cap, mint_cap) = remove_caps(&mod_account); - assert!(!exists>(signer::address_of(&mod_account)), 3); - coin::destroy_mint_cap(mint_cap); - coin::destroy_freeze_cap(freeze_cap); - coin::destroy_burn_cap(burn_cap); - } - - #[test(source = @0xa11ce, destination = @0xb0b, mod_account = @0x1)] - #[expected_failure(abort_code = 0x60001, location = Self)] - public entry fun fail_mint( - source: signer, - destination: signer, - mod_account: signer, - ) acquires Capabilities { - let source_addr = signer::address_of(&source); - - aptos_framework::account::create_account_for_test(source_addr); - aptos_framework::account::create_account_for_test(signer::address_of(&destination)); - aptos_framework::account::create_account_for_test(signer::address_of(&mod_account)); - aggregator_factory::initialize_aggregator_factory_for_test(&mod_account); - - initialize(&mod_account, b"Fake money", b"FMD", 1, true); - coin::register(&mod_account); - register(&source); - register(&destination); - - mint(&destination, source_addr, 100); - } - - #[test(source = @0xa11ce, destination = @0xb0b, mod_account = @0x1)] - #[expected_failure(abort_code = 0x60001, location = Self)] - public entry fun fail_burn( - source: signer, - destination: signer, - mod_account: signer, - ) acquires Capabilities { - let source_addr = signer::address_of(&source); - - aptos_framework::account::create_account_for_test(source_addr); - aptos_framework::account::create_account_for_test(signer::address_of(&destination)); - aptos_framework::account::create_account_for_test(signer::address_of(&mod_account)); - aggregator_factory::initialize_aggregator_factory_for_test(&mod_account); - - initialize(&mod_account, b"Fake money", b"FMD", 1, true); - coin::register(&mod_account); - register(&source); - register(&destination); - - mint(&mod_account, source_addr, 100); - burn(&destination, 10); - } -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/multisig_account.move b/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/multisig_account.move deleted file mode 100644 index 8e40a8666..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/multisig_account.move +++ /dev/null @@ -1,2594 +0,0 @@ -/// Enhanced multisig account standard on Aptos. This is different from the native multisig scheme support enforced via -/// the account's auth key. -/// -/// This module allows creating a flexible and powerful multisig account with seamless support for updating owners -/// without changing the auth key. Users can choose to store transaction payloads waiting for owner signatures on chain -/// or off chain (primary consideration is decentralization/transparency vs gas cost). -/// -/// The multisig account is a resource account underneath. By default, it has no auth key and can only be controlled via -/// the special multisig transaction flow. However, owners can create a transaction to change the auth key to match a -/// private key off chain if so desired. -/// -/// Transactions need to be executed in order of creation, similar to transactions for a normal Aptos account (enforced -/// with account nonce). -/// -/// The flow is like below: -/// 1. Owners can create a new multisig account by calling create (signer is default single owner) or with -/// create_with_owners where multiple initial owner addresses can be specified. This is different (and easier) from -/// the native multisig scheme where the owners' public keys have to be specified. Here, only addresses are needed. -/// 2. Owners can be added/removed any time by calling add_owners or remove_owners. The transactions to do still need -/// to follow the k-of-n scheme specified for the multisig account. -/// 3. To create a new transaction, an owner can call create_transaction with the transaction payload. This will store -/// the full transaction payload on chain, which adds decentralization (censorship is not possible as the data is -/// available on chain) and makes it easier to fetch all transactions waiting for execution. If saving gas is desired, -/// an owner can alternatively call create_transaction_with_hash where only the payload hash is stored. Later execution -/// will be verified using the hash. Only owners can create transactions and a transaction id (incremeting id) will be -/// assigned. -/// 4. To approve or reject a transaction, other owners can call approve() or reject() with the transaction id. -/// 5. If there are enough approvals, any owner can execute the transaction using the special MultisigTransaction type -/// with the transaction id if the full payload is already stored on chain or with the transaction payload if only a -/// hash is stored. Transaction execution will first check with this module that the transaction payload has gotten -/// enough signatures. If so, it will be executed as the multisig account. The owner who executes will pay for gas. -/// 6. If there are enough rejections, any owner can finalize the rejection by calling execute_rejected_transaction(). -/// -/// Note that this multisig account model is not designed to use with a large number of owners. The more owners there -/// are, the more expensive voting on transactions will become. If a large number of owners is designed, such as in a -/// flat governance structure, clients are encouraged to write their own modules on top of this multisig account module -/// and implement the governance voting logic on top. -module aptos_framework::multisig_account { - use aptos_framework::account::{Self, SignerCapability, new_event_handle, create_resource_address}; - use aptos_framework::aptos_coin::AptosCoin; - use aptos_framework::chain_id; - use aptos_framework::create_signer::create_signer; - use aptos_framework::coin; - use aptos_framework::event::{EventHandle, emit_event, emit}; - use aptos_framework::timestamp::now_seconds; - use aptos_std::simple_map::{Self, SimpleMap}; - use aptos_std::table::{Self, Table}; - use std::bcs::to_bytes; - use std::error; - use std::hash::sha3_256; - use std::option::{Self, Option}; - use std::signer::address_of; - use std::string::String; - use std::vector; - - /// The salt used to create a resource account during multisig account creation. - /// This is used to avoid conflicts with other modules that also create resource accounts with the same owner - /// account. - const DOMAIN_SEPARATOR: vector = b"aptos_framework::multisig_account"; - - // Any error codes > 2000 can be thrown as part of transaction prologue. - /// Owner list cannot contain the same address more than once. - const EDUPLICATE_OWNER: u64 = 1; - /// Specified account is not a multisig account. - const EACCOUNT_NOT_MULTISIG: u64 = 2002; - /// Account executing this operation is not an owner of the multisig account. - const ENOT_OWNER: u64 = 2003; - /// Transaction payload cannot be empty. - const EPAYLOAD_CANNOT_BE_EMPTY: u64 = 4; - /// Multisig account must have at least one owner. - const ENOT_ENOUGH_OWNERS: u64 = 5; - /// Transaction with specified id cannot be found. - const ETRANSACTION_NOT_FOUND: u64 = 2006; - /// Provided target function does not match the hash stored in the on-chain transaction. - const EPAYLOAD_DOES_NOT_MATCH_HASH: u64 = 2008; - /// Transaction has not received enough approvals to be executed. - const ENOT_ENOUGH_APPROVALS: u64 = 2009; - /// Provided target function does not match the payload stored in the on-chain transaction. - const EPAYLOAD_DOES_NOT_MATCH: u64 = 2010; - /// Transaction has not received enough rejections to be officially rejected. - const ENOT_ENOUGH_REJECTIONS: u64 = 10; - /// Number of signatures required must be more than zero and at most the total number of owners. - const EINVALID_SIGNATURES_REQUIRED: u64 = 11; - /// Payload hash must be exactly 32 bytes (sha3-256). - const EINVALID_PAYLOAD_HASH: u64 = 12; - /// The multisig account itself cannot be an owner. - const EOWNER_CANNOT_BE_MULTISIG_ACCOUNT_ITSELF: u64 = 13; - /// Multisig accounts has not been enabled on this current network yet. - const EMULTISIG_ACCOUNTS_NOT_ENABLED_YET: u64 = 14; - /// The number of metadata keys and values don't match. - const ENUMBER_OF_METADATA_KEYS_AND_VALUES_DONT_MATCH: u64 = 15; - /// The specified metadata contains duplicate attributes (keys). - const EDUPLICATE_METADATA_KEY: u64 = 16; - /// The sequence number provided is invalid. It must be between [1, next pending transaction - 1]. - const EINVALID_SEQUENCE_NUMBER: u64 = 17; - /// Provided owners to remove and new owners overlap. - const EOWNERS_TO_REMOVE_NEW_OWNERS_OVERLAP: u64 = 18; - /// The number of pending transactions has exceeded the maximum allowed. - const EMAX_PENDING_TRANSACTIONS_EXCEEDED: u64 = 19; - /// The multisig v2 enhancement feature is not enabled. - const EMULTISIG_V2_ENHANCEMENT_NOT_ENABLED: u64 = 20; - - - const ZERO_AUTH_KEY: vector = x"0000000000000000000000000000000000000000000000000000000000000000"; - - const MAX_PENDING_TRANSACTIONS: u64 = 20; - - /// Represents a multisig account's configurations and transactions. - /// This will be stored in the multisig account (created as a resource account separate from any owner accounts). - struct MultisigAccount has key { - // The list of all owner addresses. - owners: vector
, - // The number of signatures required to pass a transaction (k in k-of-n). - num_signatures_required: u64, - // Map from transaction id (incrementing id) to transactions to execute for this multisig account. - // Already executed transactions are deleted to save on storage but can always be accessed via events. - transactions: Table, - // The sequence number assigned to the last executed or rejected transaction. Used to enforce in-order - // executions of proposals, similar to sequence number for a normal (single-user) account. - last_executed_sequence_number: u64, - // The sequence number to assign to the next transaction. This is not always last_executed_sequence_number + 1 - // as there can be multiple pending transactions. The number of pending transactions should be equal to - // next_sequence_number - (last_executed_sequence_number + 1). - next_sequence_number: u64, - // The signer capability controlling the multisig (resource) account. This can be exchanged for the signer. - // Currently not used as the MultisigTransaction can validate and create a signer directly in the VM but - // this can be useful to have for on-chain composability in the future. - signer_cap: Option, - // The multisig account's metadata such as name, description, etc. This can be updated through the multisig - // transaction flow (i.e. self-update). - // Note: Attributes can be arbitrarily set by the multisig account and thus will only be used for off-chain - // display purposes only. They don't change any on-chain semantics of the multisig account. - metadata: SimpleMap>, - - // Events. - add_owners_events: EventHandle, - remove_owners_events: EventHandle, - update_signature_required_events: EventHandle, - create_transaction_events: EventHandle, - vote_events: EventHandle, - execute_rejected_transaction_events: EventHandle, - execute_transaction_events: EventHandle, - transaction_execution_failed_events: EventHandle, - metadata_updated_events: EventHandle, - } - - /// A transaction to be executed in a multisig account. - /// This must contain either the full transaction payload or its hash (stored as bytes). - struct MultisigTransaction has copy, drop, store { - payload: Option>, - payload_hash: Option>, - // Mapping from owner adress to vote (yes for approve, no for reject). Uses a simple map to deduplicate. - votes: SimpleMap, - // The owner who created this transaction. - creator: address, - // The timestamp in seconds when the transaction was created. - creation_time_secs: u64, - } - - /// Contains information about execution failure. - struct ExecutionError has copy, drop, store { - // The module where the error occurs. - abort_location: String, - // There are 3 error types, stored as strings: - // 1. VMError. Indicates an error from the VM, e.g. out of gas, invalid auth key, etc. - // 2. MoveAbort. Indicates an abort, e.g. assertion failure, from inside the executed Move code. - // 3. MoveExecutionFailure. Indicates an error from Move code where the VM could not continue. For example, - // arithmetic failures. - error_type: String, - // The detailed error code explaining which error occurred. - error_code: u64, - } - - /// Used only for verifying multisig account creation on top of existing accounts. - struct MultisigAccountCreationMessage has copy, drop { - // Chain id is included to prevent cross-chain replay. - chain_id: u8, - // Account address is included to prevent cross-account replay (when multiple accounts share the same auth key). - account_address: address, - // Sequence number is not needed for replay protection as the multisig account can only be created once. - // But it's included to ensure timely execution of account creation. - sequence_number: u64, - // The list of owners for the multisig account. - owners: vector
, - // The number of signatures required (signature threshold). - num_signatures_required: u64, - } - - /// Used only for verifying multisig account creation on top of existing accounts and rotating the auth key to 0x0. - struct MultisigAccountCreationWithAuthKeyRevocationMessage has copy, drop { - // Chain id is included to prevent cross-chain replay. - chain_id: u8, - // Account address is included to prevent cross-account replay (when multiple accounts share the same auth key). - account_address: address, - // Sequence number is not needed for replay protection as the multisig account can only be created once. - // But it's included to ensure timely execution of account creation. - sequence_number: u64, - // The list of owners for the multisig account. - owners: vector
, - // The number of signatures required (signature threshold). - num_signatures_required: u64, - } - - /// Event emitted when new owners are added to the multisig account. - struct AddOwnersEvent has drop, store { - owners_added: vector
, - } - - #[event] - struct AddOwners has drop, store { - multisig_account: address, - owners_added: vector
, - } - - /// Event emitted when new owners are removed from the multisig account. - struct RemoveOwnersEvent has drop, store { - owners_removed: vector
, - } - - #[event] - struct RemoveOwners has drop, store { - multisig_account: address, - owners_removed: vector
, - } - - /// Event emitted when the number of signatures required is updated. - struct UpdateSignaturesRequiredEvent has drop, store { - old_num_signatures_required: u64, - new_num_signatures_required: u64, - } - - #[event] - struct UpdateSignaturesRequired has drop, store { - multisig_account: address, - old_num_signatures_required: u64, - new_num_signatures_required: u64, - } - - /// Event emitted when a transaction is created. - struct CreateTransactionEvent has drop, store { - creator: address, - sequence_number: u64, - transaction: MultisigTransaction, - } - - #[event] - struct CreateTransaction has drop, store { - multisig_account: address, - creator: address, - sequence_number: u64, - transaction: MultisigTransaction, - } - - /// Event emitted when an owner approves or rejects a transaction. - struct VoteEvent has drop, store { - owner: address, - sequence_number: u64, - approved: bool, - } - - #[event] - struct Vote has drop, store { - multisig_account: address, - owner: address, - sequence_number: u64, - approved: bool, - } - - /// Event emitted when a transaction is officially rejected because the number of rejections has reached the - /// number of signatures required. - struct ExecuteRejectedTransactionEvent has drop, store { - sequence_number: u64, - num_rejections: u64, - executor: address, - } - - #[event] - struct ExecuteRejectedTransaction has drop, store { - multisig_account: address, - sequence_number: u64, - num_rejections: u64, - executor: address, - } - - /// Event emitted when a transaction is executed. - struct TransactionExecutionSucceededEvent has drop, store { - executor: address, - sequence_number: u64, - transaction_payload: vector, - num_approvals: u64, - } - - #[event] - struct TransactionExecutionSucceeded has drop, store { - multisig_account: address, - executor: address, - sequence_number: u64, - transaction_payload: vector, - num_approvals: u64, - } - - /// Event emitted when a transaction's execution failed. - struct TransactionExecutionFailedEvent has drop, store { - executor: address, - sequence_number: u64, - transaction_payload: vector, - num_approvals: u64, - execution_error: ExecutionError, - } - - #[event] - struct TransactionExecutionFailed has drop, store { - multisig_account: address, - executor: address, - sequence_number: u64, - transaction_payload: vector, - num_approvals: u64, - execution_error: ExecutionError, - } - - /// Event emitted when a transaction's metadata is updated. - struct MetadataUpdatedEvent has drop, store { - old_metadata: SimpleMap>, - new_metadata: SimpleMap>, - } - - #[event] - struct MetadataUpdated has drop, store { - multisig_account: address, - old_metadata: SimpleMap>, - new_metadata: SimpleMap>, - } - - ////////////////////////// View functions /////////////////////////////// - - #[view] - /// Return the multisig account's metadata. - public fun metadata(multisig_account: address): SimpleMap> acquires MultisigAccount { - borrow_global(multisig_account).metadata - } - - #[view] - /// Return the number of signatures required to execute or execute-reject a transaction in the provided - /// multisig account. - public fun num_signatures_required(multisig_account: address): u64 acquires MultisigAccount { - borrow_global(multisig_account).num_signatures_required - } - - #[view] - /// Return a vector of all of the provided multisig account's owners. - public fun owners(multisig_account: address): vector
acquires MultisigAccount { - borrow_global(multisig_account).owners - } - - #[view] - /// Return true if the provided owner is an owner of the provided multisig account. - public fun is_owner(owner: address, multisig_account: address): bool acquires MultisigAccount { - vector::contains(&borrow_global(multisig_account).owners, &owner) - } - - #[view] - /// Return the transaction with the given transaction id. - public fun get_transaction( - multisig_account: address, - sequence_number: u64, - ): MultisigTransaction acquires MultisigAccount { - let multisig_account_resource = borrow_global(multisig_account); - assert!( - sequence_number > 0 && sequence_number < multisig_account_resource.next_sequence_number, - error::invalid_argument(EINVALID_SEQUENCE_NUMBER), - ); - *table::borrow(&multisig_account_resource.transactions, sequence_number) - } - - #[view] - /// Return all pending transactions. - public fun get_pending_transactions( - multisig_account: address - ): vector acquires MultisigAccount { - let pending_transactions: vector = vector[]; - let multisig_account = borrow_global(multisig_account); - let i = multisig_account.last_executed_sequence_number + 1; - let next_sequence_number = multisig_account.next_sequence_number; - while (i < next_sequence_number) { - vector::push_back(&mut pending_transactions, *table::borrow(&multisig_account.transactions, i)); - i = i + 1; - }; - pending_transactions - } - - #[view] - /// Return the payload for the next transaction in the queue. - public fun get_next_transaction_payload( - multisig_account: address, provided_payload: vector): vector acquires MultisigAccount { - let multisig_account_resource = borrow_global(multisig_account); - let sequence_number = multisig_account_resource.last_executed_sequence_number + 1; - let transaction = table::borrow(&multisig_account_resource.transactions, sequence_number); - - if (option::is_some(&transaction.payload)) { - *option::borrow(&transaction.payload) - } else { - provided_payload - } - } - - #[view] - /// Return true if the transaction with given transaction id can be executed now. - public fun can_be_executed(multisig_account: address, sequence_number: u64): bool acquires MultisigAccount { - assert_valid_sequence_number(multisig_account, sequence_number); - let (num_approvals, _) = num_approvals_and_rejections(multisig_account, sequence_number); - sequence_number == last_resolved_sequence_number(multisig_account) + 1 && - num_approvals >= num_signatures_required(multisig_account) - } - - #[view] - /// Return true if the owner can execute the transaction with given transaction id now. - public fun can_execute(owner: address, multisig_account: address, sequence_number: u64): bool acquires MultisigAccount { - assert_valid_sequence_number(multisig_account, sequence_number); - let (num_approvals, _) = num_approvals_and_rejections(multisig_account, sequence_number); - if (!has_voted_for_approval(multisig_account, sequence_number, owner)) { - num_approvals = num_approvals + 1; - }; - is_owner(owner, multisig_account) && - sequence_number == last_resolved_sequence_number(multisig_account) + 1 && - num_approvals >= num_signatures_required(multisig_account) - } - - #[view] - /// Return true if the transaction with given transaction id can be officially rejected. - public fun can_be_rejected(multisig_account: address, sequence_number: u64): bool acquires MultisigAccount { - assert_valid_sequence_number(multisig_account, sequence_number); - let (_, num_rejections) = num_approvals_and_rejections(multisig_account, sequence_number); - sequence_number == last_resolved_sequence_number(multisig_account) + 1 && - num_rejections >= num_signatures_required(multisig_account) - } - - #[view] - /// Return true if the owner can execute the "rejected" transaction with given transaction id now. - public fun can_reject(owner: address, multisig_account: address, sequence_number: u64): bool acquires MultisigAccount { - assert_valid_sequence_number(multisig_account, sequence_number); - let (_, num_rejections) = num_approvals_and_rejections(multisig_account, sequence_number); - if (!has_voted_for_rejection(multisig_account, sequence_number, owner)) { - num_rejections = num_rejections + 1; - }; - is_owner(owner, multisig_account) && - sequence_number == last_resolved_sequence_number(multisig_account) + 1 && - num_rejections >= num_signatures_required(multisig_account) - } - - #[view] - /// Return the predicted address for the next multisig account if created from the given creator address. - public fun get_next_multisig_account_address(creator: address): address { - let owner_nonce = account::get_sequence_number(creator); - create_resource_address(&creator, create_multisig_account_seed(to_bytes(&owner_nonce))) - } - - #[view] - /// Return the id of the last transaction that was executed (successful or failed) or removed. - public fun last_resolved_sequence_number(multisig_account: address): u64 acquires MultisigAccount { - let multisig_account_resource = borrow_global(multisig_account); - multisig_account_resource.last_executed_sequence_number - } - - #[view] - /// Return the id of the next transaction created. - public fun next_sequence_number(multisig_account: address): u64 acquires MultisigAccount { - let multisig_account_resource = borrow_global(multisig_account); - multisig_account_resource.next_sequence_number - } - - #[view] - /// Return a bool tuple indicating whether an owner has voted and if so, whether they voted yes or no. - public fun vote( - multisig_account: address, sequence_number: u64, owner: address): (bool, bool) acquires MultisigAccount { - let multisig_account_resource = borrow_global(multisig_account); - assert!( - sequence_number > 0 && sequence_number < multisig_account_resource.next_sequence_number, - error::invalid_argument(EINVALID_SEQUENCE_NUMBER), - ); - let transaction = table::borrow(&multisig_account_resource.transactions, sequence_number); - let votes = &transaction.votes; - let voted = simple_map::contains_key(votes, &owner); - let vote = voted && *simple_map::borrow(votes, &owner); - (voted, vote) - } - - #[view] - public fun available_transaction_queue_capacity(multisig_account: address): u64 acquires MultisigAccount { - let multisig_account_resource = borrow_global(multisig_account); - let num_pending_transactions = multisig_account_resource.next_sequence_number - multisig_account_resource.last_executed_sequence_number - 1; - if (num_pending_transactions > MAX_PENDING_TRANSACTIONS) { - 0 - } else { - MAX_PENDING_TRANSACTIONS - num_pending_transactions - } - } - - ////////////////////////// Multisig account creation functions /////////////////////////////// - - /// Private entry function that creates a new multisig account on top of an existing account. - /// - /// This offers a migration path for an existing account with any type of auth key. - /// - /// Note that this does not revoke auth key-based control over the account. Owners should separately rotate the auth - /// key after they are fully migrated to the new multisig account. Alternatively, they can call - /// create_with_existing_account_and_revoke_auth_key_call instead. - entry fun create_with_existing_account_call( - multisig_account: &signer, - owners: vector
, - num_signatures_required: u64, - metadata_keys: vector, - metadata_values: vector>, - ) acquires MultisigAccount { - create_with_owners_internal( - multisig_account, - owners, - num_signatures_required, - option::none(), - metadata_keys, - metadata_values, - ); - } - - /// Creates a new multisig account on top of an existing account. - /// - /// This offers a migration path for an existing account with a multi-ed25519 auth key (native multisig account). - /// In order to ensure a malicious module cannot obtain backdoor control over an existing account, a signed message - /// with a valid signature from the account's auth key is required. - /// - /// Note that this does not revoke auth key-based control over the account. Owners should separately rotate the auth - /// key after they are fully migrated to the new multisig account. Alternatively, they can call - /// create_with_existing_account_and_revoke_auth_key instead. - public entry fun create_with_existing_account( - multisig_address: address, - owners: vector
, - num_signatures_required: u64, - account_scheme: u8, - account_public_key: vector, - create_multisig_account_signed_message: vector, - metadata_keys: vector, - metadata_values: vector>, - ) acquires MultisigAccount { - // Verify that the `MultisigAccountCreationMessage` has the right information and is signed by the account - // owner's key. - let proof_challenge = MultisigAccountCreationMessage { - chain_id: chain_id::get(), - account_address: multisig_address, - sequence_number: account::get_sequence_number(multisig_address), - owners, - num_signatures_required, - }; - account::verify_signed_message( - multisig_address, - account_scheme, - account_public_key, - create_multisig_account_signed_message, - proof_challenge, - ); - - // We create the signer for the multisig account here since this is required to add the MultisigAccount resource - // This should be safe and authorized because we have verified the signed message from the existing account - // that authorizes creating a multisig account with the specified owners and signature threshold. - let multisig_account = &create_signer(multisig_address); - create_with_owners_internal( - multisig_account, - owners, - num_signatures_required, - option::none(), - metadata_keys, - metadata_values, - ); - } - - /// Private entry function that creates a new multisig account on top of an existing account and immediately rotate - /// the origin auth key to 0x0. - /// - /// Note: If the original account is a resource account, this does not revoke all control over it as if any - /// SignerCapability of the resource account still exists, it can still be used to generate the signer for the - /// account. - entry fun create_with_existing_account_and_revoke_auth_key_call( - multisig_account: &signer, - owners: vector
, - num_signatures_required: u64, - metadata_keys: vector, - metadata_values:vector>, - ) acquires MultisigAccount { - create_with_owners_internal( - multisig_account, - owners, - num_signatures_required, - option::none(), - metadata_keys, - metadata_values, - ); - - // Rotate the account's auth key to 0x0, which effectively revokes control via auth key. - let multisig_address = address_of(multisig_account); - account::rotate_authentication_key_internal(multisig_account, ZERO_AUTH_KEY); - // This also needs to revoke any signer capability or rotation capability that exists for the account to - // completely remove all access to the account. - if (account::is_signer_capability_offered(multisig_address)) { - account::revoke_any_signer_capability(multisig_account); - }; - if (account::is_rotation_capability_offered(multisig_address)) { - account::revoke_any_rotation_capability(multisig_account); - }; - } - - /// Creates a new multisig account on top of an existing account and immediately rotate the origin auth key to 0x0. - /// - /// Note: If the original account is a resource account, this does not revoke all control over it as if any - /// SignerCapability of the resource account still exists, it can still be used to generate the signer for the - /// account. - public entry fun create_with_existing_account_and_revoke_auth_key( - multisig_address: address, - owners: vector
, - num_signatures_required: u64, - account_scheme: u8, - account_public_key: vector, - create_multisig_account_signed_message: vector, - metadata_keys: vector, - metadata_values: vector>, - ) acquires MultisigAccount { - // Verify that the `MultisigAccountCreationMessage` has the right information and is signed by the account - // owner's key. - let proof_challenge = MultisigAccountCreationWithAuthKeyRevocationMessage { - chain_id: chain_id::get(), - account_address: multisig_address, - sequence_number: account::get_sequence_number(multisig_address), - owners, - num_signatures_required, - }; - account::verify_signed_message( - multisig_address, - account_scheme, - account_public_key, - create_multisig_account_signed_message, - proof_challenge, - ); - - // We create the signer for the multisig account here since this is required to add the MultisigAccount resource - // This should be safe and authorized because we have verified the signed message from the existing account - // that authorizes creating a multisig account with the specified owners and signature threshold. - let multisig_account = &create_signer(multisig_address); - create_with_owners_internal( - multisig_account, - owners, - num_signatures_required, - option::none(), - metadata_keys, - metadata_values, - ); - - // Rotate the account's auth key to 0x0, which effectively revokes control via auth key. - let multisig_address = address_of(multisig_account); - account::rotate_authentication_key_internal(multisig_account, ZERO_AUTH_KEY); - // This also needs to revoke any signer capability or rotation capability that exists for the account to - // completely remove all access to the account. - if (account::is_signer_capability_offered(multisig_address)) { - account::revoke_any_signer_capability(multisig_account); - }; - if (account::is_rotation_capability_offered(multisig_address)) { - account::revoke_any_rotation_capability(multisig_account); - }; - } - - /// Creates a new multisig account and add the signer as a single owner. - public entry fun create( - owner: &signer, - num_signatures_required: u64, - metadata_keys: vector, - metadata_values: vector>, - ) acquires MultisigAccount { - create_with_owners(owner, vector[], num_signatures_required, metadata_keys, metadata_values); - } - - /// Creates a new multisig account with the specified additional owner list and signatures required. - /// - /// @param additional_owners The owner account who calls this function cannot be in the additional_owners and there - /// cannot be any duplicate owners in the list. - /// @param num_signatures_required The number of signatures required to execute a transaction. Must be at least 1 and - /// at most the total number of owners. - public entry fun create_with_owners( - owner: &signer, - additional_owners: vector
, - num_signatures_required: u64, - metadata_keys: vector, - metadata_values: vector>, - ) acquires MultisigAccount { - let (multisig_account, multisig_signer_cap) = create_multisig_account(owner); - vector::push_back(&mut additional_owners, address_of(owner)); - create_with_owners_internal( - &multisig_account, - additional_owners, - num_signatures_required, - option::some(multisig_signer_cap), - metadata_keys, - metadata_values, - ); - } - - /// Like `create_with_owners`, but removes the calling account after creation. - /// - /// This is for creating a vanity multisig account from a bootstrapping account that should not - /// be an owner after the vanity multisig address has been secured. - public entry fun create_with_owners_then_remove_bootstrapper( - bootstrapper: &signer, - owners: vector
, - num_signatures_required: u64, - metadata_keys: vector, - metadata_values: vector>, - ) acquires MultisigAccount { - let bootstrapper_address = address_of(bootstrapper); - create_with_owners( - bootstrapper, - owners, - num_signatures_required, - metadata_keys, - metadata_values - ); - update_owner_schema( - get_next_multisig_account_address(bootstrapper_address), - vector[], - vector[bootstrapper_address], - option::none() - ); - } - - fun create_with_owners_internal( - multisig_account: &signer, - owners: vector
, - num_signatures_required: u64, - multisig_account_signer_cap: Option, - metadata_keys: vector, - metadata_values: vector>, - ) acquires MultisigAccount { - assert!(features::multisig_accounts_enabled(), error::unavailable(EMULTISIG_ACCOUNTS_NOT_ENABLED_YET)); - assert!( - num_signatures_required > 0 && num_signatures_required <= vector::length(&owners), - error::invalid_argument(EINVALID_SIGNATURES_REQUIRED), - ); - - let multisig_address = address_of(multisig_account); - validate_owners(&owners, multisig_address); - move_to(multisig_account, MultisigAccount { - owners, - num_signatures_required, - transactions: table::new(), - metadata: simple_map::create>(), - // First transaction will start at id 1 instead of 0. - last_executed_sequence_number: 0, - next_sequence_number: 1, - signer_cap: multisig_account_signer_cap, - add_owners_events: new_event_handle(multisig_account), - remove_owners_events: new_event_handle(multisig_account), - update_signature_required_events: new_event_handle(multisig_account), - create_transaction_events: new_event_handle(multisig_account), - vote_events: new_event_handle(multisig_account), - execute_rejected_transaction_events: new_event_handle(multisig_account), - execute_transaction_events: new_event_handle(multisig_account), - transaction_execution_failed_events: new_event_handle(multisig_account), - metadata_updated_events: new_event_handle(multisig_account), - }); - - update_metadata_internal(multisig_account, metadata_keys, metadata_values, false); - } - - ////////////////////////// Self-updates /////////////////////////////// - - /// Similar to add_owners, but only allow adding one owner. - entry fun add_owner(multisig_account: &signer, new_owner: address) acquires MultisigAccount { - add_owners(multisig_account, vector[new_owner]); - } - - /// Add new owners to the multisig account. This can only be invoked by the multisig account itself, through the - /// proposal flow. - /// - /// Note that this function is not public so it can only be invoked directly instead of via a module or script. This - /// ensures that a multisig transaction cannot lead to another module obtaining the multisig signer and using it to - /// maliciously alter the owners list. - entry fun add_owners( - multisig_account: &signer, new_owners: vector
) acquires MultisigAccount { - update_owner_schema( - address_of(multisig_account), - new_owners, - vector[], - option::none() - ); - } - - /// Add owners then update number of signatures required, in a single operation. - entry fun add_owners_and_update_signatures_required( - multisig_account: &signer, - new_owners: vector
, - new_num_signatures_required: u64 - ) acquires MultisigAccount { - update_owner_schema( - address_of(multisig_account), - new_owners, - vector[], - option::some(new_num_signatures_required) - ); - } - - /// Similar to remove_owners, but only allow removing one owner. - entry fun remove_owner( - multisig_account: &signer, owner_to_remove: address) acquires MultisigAccount { - remove_owners(multisig_account, vector[owner_to_remove]); - } - - /// Remove owners from the multisig account. This can only be invoked by the multisig account itself, through the - /// proposal flow. - /// - /// This function skips any owners who are not in the multisig account's list of owners. - /// Note that this function is not public so it can only be invoked directly instead of via a module or script. This - /// ensures that a multisig transaction cannot lead to another module obtaining the multisig signer and using it to - /// maliciously alter the owners list. - entry fun remove_owners( - multisig_account: &signer, owners_to_remove: vector
) acquires MultisigAccount { - update_owner_schema( - address_of(multisig_account), - vector[], - owners_to_remove, - option::none() - ); - } - - /// Swap an owner in for an old one, without changing required signatures. - entry fun swap_owner( - multisig_account: &signer, - to_swap_in: address, - to_swap_out: address - ) acquires MultisigAccount { - update_owner_schema( - address_of(multisig_account), - vector[to_swap_in], - vector[to_swap_out], - option::none() - ); - } - - /// Swap owners in and out, without changing required signatures. - entry fun swap_owners( - multisig_account: &signer, - to_swap_in: vector
, - to_swap_out: vector
- ) acquires MultisigAccount { - update_owner_schema( - address_of(multisig_account), - to_swap_in, - to_swap_out, - option::none() - ); - } - - /// Swap owners in and out, updating number of required signatures. - entry fun swap_owners_and_update_signatures_required( - multisig_account: &signer, - new_owners: vector
, - owners_to_remove: vector
, - new_num_signatures_required: u64 - ) acquires MultisigAccount { - update_owner_schema( - address_of(multisig_account), - new_owners, - owners_to_remove, - option::some(new_num_signatures_required) - ); - } - - /// Update the number of signatures required to execute transaction in the specified multisig account. - /// - /// This can only be invoked by the multisig account itself, through the proposal flow. - /// Note that this function is not public so it can only be invoked directly instead of via a module or script. This - /// ensures that a multisig transaction cannot lead to another module obtaining the multisig signer and using it to - /// maliciously alter the number of signatures required. - entry fun update_signatures_required( - multisig_account: &signer, new_num_signatures_required: u64) acquires MultisigAccount { - update_owner_schema( - address_of(multisig_account), - vector[], - vector[], - option::some(new_num_signatures_required) - ); - } - - /// Allow the multisig account to update its own metadata. Note that this overrides the entire existing metadata. - /// If any attributes are not specified in the metadata, they will be removed! - /// - /// This can only be invoked by the multisig account itself, through the proposal flow. - /// Note that this function is not public so it can only be invoked directly instead of via a module or script. This - /// ensures that a multisig transaction cannot lead to another module obtaining the multisig signer and using it to - /// maliciously alter the number of signatures required. - entry fun update_metadata( - multisig_account: &signer, keys: vector, values: vector>) acquires MultisigAccount { - update_metadata_internal(multisig_account, keys, values, true); - } - - fun update_metadata_internal( - multisig_account: &signer, - keys: vector, - values: vector>, - emit_event: bool, - ) acquires MultisigAccount { - let num_attributes = vector::length(&keys); - assert!( - num_attributes == vector::length(&values), - error::invalid_argument(ENUMBER_OF_METADATA_KEYS_AND_VALUES_DONT_MATCH), - ); - - let multisig_address = address_of(multisig_account); - assert_multisig_account_exists(multisig_address); - let multisig_account_resource = borrow_global_mut(multisig_address); - let old_metadata = multisig_account_resource.metadata; - multisig_account_resource.metadata = simple_map::create>(); - let metadata = &mut multisig_account_resource.metadata; - let i = 0; - while (i < num_attributes) { - let key = *vector::borrow(&keys, i); - let value = *vector::borrow(&values, i); - assert!( - !simple_map::contains_key(metadata, &key), - error::invalid_argument(EDUPLICATE_METADATA_KEY), - ); - - simple_map::add(metadata, key, value); - i = i + 1; - }; - - if (emit_event) { - if (std::features::module_event_migration_enabled()) { - emit( - MetadataUpdated { - multisig_account: multisig_address, - old_metadata, - new_metadata: multisig_account_resource.metadata, - } - ) - } else { - emit_event( - &mut multisig_account_resource.metadata_updated_events, - MetadataUpdatedEvent { - old_metadata, - new_metadata: multisig_account_resource.metadata, - } - ); - }; - }; - } - - ////////////////////////// Multisig transaction flow /////////////////////////////// - - /// Create a multisig transaction, which will have one approval initially (from the creator). - public entry fun create_transaction( - owner: &signer, - multisig_account: address, - payload: vector, - ) acquires MultisigAccount { - assert!(vector::length(&payload) > 0, error::invalid_argument(EPAYLOAD_CANNOT_BE_EMPTY)); - - assert_multisig_account_exists(multisig_account); - assert_is_owner(owner, multisig_account); - - let creator = address_of(owner); - let transaction = MultisigTransaction { - payload: option::some(payload), - payload_hash: option::none>(), - votes: simple_map::create(), - creator, - creation_time_secs: now_seconds(), - }; - add_transaction(creator, multisig_account, transaction); - } - - /// Create a multisig transaction with a transaction hash instead of the full payload. - /// This means the payload will be stored off chain for gas saving. Later, during execution, the executor will need - /// to provide the full payload, which will be validated against the hash stored on-chain. - public entry fun create_transaction_with_hash( - owner: &signer, - multisig_account: address, - payload_hash: vector, - ) acquires MultisigAccount { - // Payload hash is a sha3-256 hash, so it must be exactly 32 bytes. - assert!(vector::length(&payload_hash) == 32, error::invalid_argument(EINVALID_PAYLOAD_HASH)); - - assert_multisig_account_exists(multisig_account); - assert_is_owner(owner, multisig_account); - - let creator = address_of(owner); - let transaction = MultisigTransaction { - payload: option::none>(), - payload_hash: option::some(payload_hash), - votes: simple_map::create(), - creator, - creation_time_secs: now_seconds(), - }; - add_transaction(creator, multisig_account, transaction); - } - - /// Approve a multisig transaction. - public entry fun approve_transaction( - owner: &signer, multisig_account: address, sequence_number: u64) acquires MultisigAccount { - vote_transanction(owner, multisig_account, sequence_number, true); - } - - /// Reject a multisig transaction. - public entry fun reject_transaction( - owner: &signer, multisig_account: address, sequence_number: u64) acquires MultisigAccount { - vote_transanction(owner, multisig_account, sequence_number, false); - } - - /// Generic function that can be used to either approve or reject a multisig transaction - /// Retained for backward compatibility: the function with the typographical error in its name - /// will continue to be an accessible entry point. - public entry fun vote_transanction( - owner: &signer, multisig_account: address, sequence_number: u64, approved: bool) acquires MultisigAccount { - assert_multisig_account_exists(multisig_account); - let multisig_account_resource = borrow_global_mut(multisig_account); - assert_is_owner_internal(owner, multisig_account_resource); - - assert!( - table::contains(&multisig_account_resource.transactions, sequence_number), - error::not_found(ETRANSACTION_NOT_FOUND), - ); - let transaction = table::borrow_mut(&mut multisig_account_resource.transactions, sequence_number); - let votes = &mut transaction.votes; - let owner_addr = address_of(owner); - - if (simple_map::contains_key(votes, &owner_addr)) { - *simple_map::borrow_mut(votes, &owner_addr) = approved; - } else { - simple_map::add(votes, owner_addr, approved); - }; - - if (std::features::module_event_migration_enabled()) { - emit( - Vote { - multisig_account, - owner: owner_addr, - sequence_number, - approved, - } - ); - } else { - emit_event( - &mut multisig_account_resource.vote_events, - VoteEvent { - owner: owner_addr, - sequence_number, - approved, - } - ); - }; - } - - /// Generic function that can be used to either approve or reject a multisig transaction - public entry fun vote_transaction( - owner: &signer, multisig_account: address, sequence_number: u64, approved: bool) acquires MultisigAccount { - assert!(features::multisig_v2_enhancement_feature_enabled(), error::invalid_state(EMULTISIG_V2_ENHANCEMENT_NOT_ENABLED)); - vote_transanction(owner, multisig_account, sequence_number, approved); - } - - /// Generic function that can be used to either approve or reject a batch of transactions within a specified range. - public entry fun vote_transactions( - owner: &signer, multisig_account: address, starting_sequence_number: u64, final_sequence_number: u64, approved: bool) acquires MultisigAccount { - assert!(features::multisig_v2_enhancement_feature_enabled(), error::invalid_state(EMULTISIG_V2_ENHANCEMENT_NOT_ENABLED)); - let sequence_number = starting_sequence_number; - while(sequence_number <= final_sequence_number) { - vote_transanction(owner, multisig_account, sequence_number, approved); - sequence_number = sequence_number + 1; - } - } - - /// Remove the next transaction if it has sufficient owner rejections. - public entry fun execute_rejected_transaction( - owner: &signer, - multisig_account: address, - ) acquires MultisigAccount { - assert_multisig_account_exists(multisig_account); - assert_is_owner(owner, multisig_account); - - let sequence_number = last_resolved_sequence_number(multisig_account) + 1; - let owner_addr = address_of(owner); - if (features::multisig_v2_enhancement_feature_enabled()) { - // Implicitly vote for rejection if the owner has not voted for rejection yet. - if (!has_voted_for_rejection(multisig_account, sequence_number, owner_addr)) { - reject_transaction(owner, multisig_account, sequence_number); - } - }; - - let multisig_account_resource = borrow_global_mut(multisig_account); - let (_, num_rejections) = remove_executed_transaction(multisig_account_resource); - assert!( - num_rejections >= multisig_account_resource.num_signatures_required, - error::invalid_state(ENOT_ENOUGH_REJECTIONS), - ); - - if (std::features::module_event_migration_enabled()) { - emit( - ExecuteRejectedTransaction { - multisig_account, - sequence_number, - num_rejections, - executor: address_of(owner), - } - ); - } else { - emit_event( - &mut multisig_account_resource.execute_rejected_transaction_events, - ExecuteRejectedTransactionEvent { - sequence_number, - num_rejections, - executor: owner_addr, - } - ); - }; - } - - /// Remove the next transactions until the final_sequence_number if they have sufficient owner rejections. - public entry fun execute_rejected_transactions( - owner: &signer, - multisig_account: address, - final_sequence_number: u64, - ) acquires MultisigAccount { - assert!(features::multisig_v2_enhancement_feature_enabled(), error::invalid_state(EMULTISIG_V2_ENHANCEMENT_NOT_ENABLED)); - assert!(last_resolved_sequence_number(multisig_account) < final_sequence_number, error::invalid_argument(EINVALID_SEQUENCE_NUMBER)); - assert!(final_sequence_number < next_sequence_number(multisig_account), error::invalid_argument(EINVALID_SEQUENCE_NUMBER)); - while(last_resolved_sequence_number(multisig_account) < final_sequence_number) { - execute_rejected_transaction(owner, multisig_account); - } - } - - ////////////////////////// To be called by VM only /////////////////////////////// - - /// Called by the VM as part of transaction prologue, which is invoked during mempool transaction validation and as - /// the first step of transaction execution. - /// - /// Transaction payload is optional if it's already stored on chain for the transaction. - fun validate_multisig_transaction( - owner: &signer, multisig_account: address, payload: vector) acquires MultisigAccount { - assert_multisig_account_exists(multisig_account); - assert_is_owner(owner, multisig_account); - let sequence_number = last_resolved_sequence_number(multisig_account) + 1; - assert_transaction_exists(multisig_account, sequence_number); - - if (features::multisig_v2_enhancement_feature_enabled()) { - assert!( - can_execute(address_of(owner), multisig_account, sequence_number), - error::invalid_argument(ENOT_ENOUGH_APPROVALS), - ); - } - else { - assert!( - can_be_executed(multisig_account, sequence_number), - error::invalid_argument(ENOT_ENOUGH_APPROVALS), - ); - }; - - // If the transaction payload is not stored on chain, verify that the provided payload matches the hashes stored - // on chain. - let multisig_account_resource = borrow_global(multisig_account); - let transaction = table::borrow(&multisig_account_resource.transactions, sequence_number); - if (option::is_some(&transaction.payload_hash)) { - let payload_hash = option::borrow(&transaction.payload_hash); - assert!( - sha3_256(payload) == *payload_hash, - error::invalid_argument(EPAYLOAD_DOES_NOT_MATCH_HASH), - ); - }; - - // If the transaction payload is stored on chain and there is a provided payload, - // verify that the provided payload matches the stored payload. - if (features::abort_if_multisig_payload_mismatch_enabled() - && option::is_some(&transaction.payload) - && !vector::is_empty(&payload) - ) { - let stored_payload = option::borrow(&transaction.payload); - assert!( - payload == *stored_payload, - error::invalid_argument(EPAYLOAD_DOES_NOT_MATCH), - ); - } - } - - /// Post-execution cleanup for a successful multisig transaction execution. - /// This function is private so no other code can call this beside the VM itself as part of MultisigTransaction. - fun successful_transaction_execution_cleanup( - executor: address, - multisig_account: address, - transaction_payload: vector, - ) acquires MultisigAccount { - let num_approvals = transaction_execution_cleanup_common(executor, multisig_account); - let multisig_account_resource = borrow_global_mut(multisig_account); - if (std::features::module_event_migration_enabled()) { - emit( - TransactionExecutionSucceeded { - multisig_account, - sequence_number: multisig_account_resource.last_executed_sequence_number, - transaction_payload, - num_approvals, - executor, - } - ); - } else { - emit_event( - &mut multisig_account_resource.execute_transaction_events, - TransactionExecutionSucceededEvent { - sequence_number: multisig_account_resource.last_executed_sequence_number, - transaction_payload, - num_approvals, - executor, - } - ); - }; - } - - /// Post-execution cleanup for a failed multisig transaction execution. - /// This function is private so no other code can call this beside the VM itself as part of MultisigTransaction. - fun failed_transaction_execution_cleanup( - executor: address, - multisig_account: address, - transaction_payload: vector, - execution_error: ExecutionError, - ) acquires MultisigAccount { - let num_approvals = transaction_execution_cleanup_common(executor, multisig_account); - let multisig_account_resource = borrow_global_mut(multisig_account); - if (std::features::module_event_migration_enabled()) { - emit( - TransactionExecutionFailed { - multisig_account, - executor, - sequence_number: multisig_account_resource.last_executed_sequence_number, - transaction_payload, - num_approvals, - execution_error, - } - ); - } else { - emit_event( - &mut multisig_account_resource.transaction_execution_failed_events, - TransactionExecutionFailedEvent { - executor, - sequence_number: multisig_account_resource.last_executed_sequence_number, - transaction_payload, - num_approvals, - execution_error, - } - ); - }; - } - - ////////////////////////// Private functions /////////////////////////////// - - inline fun transaction_execution_cleanup_common(executor: address, multisig_account: address): u64 acquires MultisigAccount { - let sequence_number = last_resolved_sequence_number(multisig_account) + 1; - let implicit_approval = !has_voted_for_approval(multisig_account, sequence_number, executor); - - let multisig_account_resource = borrow_global_mut(multisig_account); - let (num_approvals, _) = remove_executed_transaction(multisig_account_resource); - - if (features::multisig_v2_enhancement_feature_enabled() && implicit_approval) { - if (std::features::module_event_migration_enabled()) { - emit( - Vote { - multisig_account, - owner: executor, - sequence_number, - approved: true, - } - ); - } else { - emit_event( - &mut multisig_account_resource.vote_events, - VoteEvent { - owner: executor, - sequence_number, - approved: true, - } - ); - }; - num_approvals = num_approvals + 1; - }; - - num_approvals - } - - // Remove the next transaction in the queue as it's been executed and return the number of approvals it had. - fun remove_executed_transaction(multisig_account_resource: &mut MultisigAccount): (u64, u64) { - let sequence_number = multisig_account_resource.last_executed_sequence_number + 1; - let transaction = table::remove(&mut multisig_account_resource.transactions, sequence_number); - multisig_account_resource.last_executed_sequence_number = sequence_number; - num_approvals_and_rejections_internal(&multisig_account_resource.owners, &transaction) - } - - inline fun add_transaction( - creator: address, - multisig_account: address, - transaction: MultisigTransaction - ) { - if (features::multisig_v2_enhancement_feature_enabled()) { - assert!( - available_transaction_queue_capacity(multisig_account) > 0, - error::invalid_state(EMAX_PENDING_TRANSACTIONS_EXCEEDED) - ); - }; - - let multisig_account_resource = borrow_global_mut(multisig_account); - - // The transaction creator also automatically votes for the transaction. - simple_map::add(&mut transaction.votes, creator, true); - - let sequence_number = multisig_account_resource.next_sequence_number; - multisig_account_resource.next_sequence_number = sequence_number + 1; - table::add(&mut multisig_account_resource.transactions, sequence_number, transaction); - if (std::features::module_event_migration_enabled()) { - emit( - CreateTransaction { multisig_account: multisig_account, creator, sequence_number, transaction } - ); - } else { - emit_event( - &mut multisig_account_resource.create_transaction_events, - CreateTransactionEvent { creator, sequence_number, transaction }, - ); - }; - } - - fun create_multisig_account(owner: &signer): (signer, SignerCapability) { - let owner_nonce = account::get_sequence_number(address_of(owner)); - let (multisig_signer, multisig_signer_cap) = - account::create_resource_account(owner, create_multisig_account_seed(to_bytes(&owner_nonce))); - // Register the account to receive APT as this is not done by default as part of the resource account creation - // flow. - if (!coin::is_account_registered(address_of(&multisig_signer))) { - coin::register(&multisig_signer); - }; - - (multisig_signer, multisig_signer_cap) - } - - fun create_multisig_account_seed(seed: vector): vector { - // Generate a seed that will be used to create the resource account that hosts the multisig account. - let multisig_account_seed = vector::empty(); - vector::append(&mut multisig_account_seed, DOMAIN_SEPARATOR); - vector::append(&mut multisig_account_seed, seed); - - multisig_account_seed - } - - fun validate_owners(owners: &vector
, multisig_account: address) { - let distinct_owners: vector
= vector[]; - vector::for_each_ref(owners, |owner| { - let owner = *owner; - assert!(owner != multisig_account, error::invalid_argument(EOWNER_CANNOT_BE_MULTISIG_ACCOUNT_ITSELF)); - let (found, _) = vector::index_of(&distinct_owners, &owner); - assert!(!found, error::invalid_argument(EDUPLICATE_OWNER)); - vector::push_back(&mut distinct_owners, owner); - }); - } - - inline fun assert_is_owner_internal(owner: &signer, multisig_account: &MultisigAccount) { - assert!( - vector::contains(&multisig_account.owners, &address_of(owner)), - error::permission_denied(ENOT_OWNER), - ); - } - - inline fun assert_is_owner(owner: &signer, multisig_account: address) acquires MultisigAccount { - let multisig_account_resource = borrow_global(multisig_account); - assert_is_owner_internal(owner, multisig_account_resource); - } - - inline fun num_approvals_and_rejections_internal(owners: &vector
, transaction: &MultisigTransaction): (u64, u64) { - let num_approvals = 0; - let num_rejections = 0; - - let votes = &transaction.votes; - vector::for_each_ref(owners, |owner| { - if (simple_map::contains_key(votes, owner)) { - if (*simple_map::borrow(votes, owner)) { - num_approvals = num_approvals + 1; - } else { - num_rejections = num_rejections + 1; - }; - } - }); - - (num_approvals, num_rejections) - } - - inline fun num_approvals_and_rejections(multisig_account: address, sequence_number: u64): (u64, u64) acquires MultisigAccount { - let multisig_account_resource = borrow_global(multisig_account); - let transaction = table::borrow(&multisig_account_resource.transactions, sequence_number); - num_approvals_and_rejections_internal(&multisig_account_resource.owners, transaction) - } - - inline fun has_voted_for_approval(multisig_account: address, sequence_number: u64, owner: address): bool acquires MultisigAccount { - let (voted, vote) = vote(multisig_account, sequence_number, owner); - voted && vote - } - - inline fun has_voted_for_rejection(multisig_account: address, sequence_number: u64, owner: address): bool acquires MultisigAccount { - let (voted, vote) = vote(multisig_account, sequence_number, owner); - voted && !vote - } - - inline fun assert_multisig_account_exists(multisig_account: address) { - assert!(exists(multisig_account), error::invalid_state(EACCOUNT_NOT_MULTISIG)); - } - - inline fun assert_valid_sequence_number(multisig_account: address, sequence_number: u64) acquires MultisigAccount { - let multisig_account_resource = borrow_global(multisig_account); - assert!( - sequence_number > 0 && sequence_number < multisig_account_resource.next_sequence_number, - error::invalid_argument(EINVALID_SEQUENCE_NUMBER), - ); - } - - inline fun assert_transaction_exists(multisig_account: address, sequence_number: u64) acquires MultisigAccount { - let multisig_account_resource = borrow_global(multisig_account); - assert!( - table::contains(&multisig_account_resource.transactions, sequence_number), - error::not_found(ETRANSACTION_NOT_FOUND), - ); - } - - /// Add new owners, remove owners to remove, update signatures required. - fun update_owner_schema( - multisig_address: address, - new_owners: vector
, - owners_to_remove: vector
, - optional_new_num_signatures_required: Option, - ) acquires MultisigAccount { - assert_multisig_account_exists(multisig_address); - let multisig_account_ref_mut = - borrow_global_mut(multisig_address); - // Verify no overlap between new owners and owners to remove. - vector::for_each_ref(&new_owners, |new_owner_ref| { - assert!( - !vector::contains(&owners_to_remove, new_owner_ref), - error::invalid_argument(EOWNERS_TO_REMOVE_NEW_OWNERS_OVERLAP) - ) - }); - // If new owners provided, try to add them and emit an event. - if (vector::length(&new_owners) > 0) { - vector::append(&mut multisig_account_ref_mut.owners, new_owners); - validate_owners( - &multisig_account_ref_mut.owners, - multisig_address - ); - if (std::features::module_event_migration_enabled()) { - emit(AddOwners { multisig_account: multisig_address, owners_added: new_owners }); - } else { - emit_event( - &mut multisig_account_ref_mut.add_owners_events, - AddOwnersEvent { owners_added: new_owners } - ); - }; - }; - // If owners to remove provided, try to remove them. - if (vector::length(&owners_to_remove) > 0) { - let owners_ref_mut = &mut multisig_account_ref_mut.owners; - let owners_removed = vector[]; - vector::for_each_ref(&owners_to_remove, |owner_to_remove_ref| { - let (found, index) = - vector::index_of(owners_ref_mut, owner_to_remove_ref); - if (found) { - vector::push_back( - &mut owners_removed, - vector::swap_remove(owners_ref_mut, index) - ); - } - }); - // Only emit event if owner(s) actually removed. - if (vector::length(&owners_removed) > 0) { - if (std::features::module_event_migration_enabled()) { - emit( - RemoveOwners { multisig_account: multisig_address, owners_removed } - ); - } else { - emit_event( - &mut multisig_account_ref_mut.remove_owners_events, - RemoveOwnersEvent { owners_removed } - ); - }; - } - }; - // If new signature count provided, try to update count. - if (option::is_some(&optional_new_num_signatures_required)) { - let new_num_signatures_required = - option::extract(&mut optional_new_num_signatures_required); - assert!( - new_num_signatures_required > 0, - error::invalid_argument(EINVALID_SIGNATURES_REQUIRED) - ); - let old_num_signatures_required = - multisig_account_ref_mut.num_signatures_required; - // Only apply update and emit event if a change indicated. - if (new_num_signatures_required != old_num_signatures_required) { - multisig_account_ref_mut.num_signatures_required = - new_num_signatures_required; - if (std::features::module_event_migration_enabled()) { - emit( - UpdateSignaturesRequired { - multisig_account: multisig_address, - old_num_signatures_required, - new_num_signatures_required, - } - ); - } else { - emit_event( - &mut multisig_account_ref_mut.update_signature_required_events, - UpdateSignaturesRequiredEvent { - old_num_signatures_required, - new_num_signatures_required, - } - ); - } - } - }; - // Verify number of owners. - let num_owners = vector::length(&multisig_account_ref_mut.owners); - assert!( - num_owners >= multisig_account_ref_mut.num_signatures_required, - error::invalid_state(ENOT_ENOUGH_OWNERS) - ); - } - - ////////////////////////// Tests /////////////////////////////// - - #[test_only] - use aptos_framework::aptos_account::create_account; - #[test_only] - use aptos_framework::timestamp; - #[test_only] - use aptos_std::from_bcs; - #[test_only] - use aptos_std::multi_ed25519; - #[test_only] - use std::string::utf8; - use std::features; - #[test_only] - use aptos_framework::aptos_coin; - #[test_only] - use aptos_framework::coin::{destroy_mint_cap, destroy_burn_cap}; - - #[test_only] - const PAYLOAD: vector = vector[1, 2, 3]; - #[test_only] - const ERROR_TYPE: vector = b"MoveAbort"; - #[test_only] - const ABORT_LOCATION: vector = b"abort_location"; - #[test_only] - const ERROR_CODE: u64 = 10; - - #[test_only] - fun execution_error(): ExecutionError { - ExecutionError { - abort_location: utf8(ABORT_LOCATION), - error_type: utf8(ERROR_TYPE), - error_code: ERROR_CODE, - } - } - - #[test_only] - fun setup() { - let framework_signer = &create_signer(@0x1); - features::change_feature_flags_for_testing( - framework_signer, vector[features::get_multisig_accounts_feature(), features::get_multisig_v2_enhancement_feature(), features::get_abort_if_multisig_payload_mismatch_feature()], vector[]); - timestamp::set_time_has_started_for_testing(framework_signer); - chain_id::initialize_for_test(framework_signer, 1); - let (burn, mint) = aptos_coin::initialize_for_test(framework_signer); - destroy_mint_cap(mint); - destroy_burn_cap(burn); - } - - #[test_only] - fun setup_disabled() { - let framework_signer = &create_signer(@0x1); - features::change_feature_flags_for_testing( - framework_signer, vector[], vector[features::get_multisig_accounts_feature()]); - timestamp::set_time_has_started_for_testing(framework_signer); - chain_id::initialize_for_test(framework_signer, 1); - let (burn, mint) = aptos_coin::initialize_for_test(framework_signer); - destroy_mint_cap(mint); - destroy_burn_cap(burn); - } - - #[test(owner_1 = @0x123, owner_2 = @0x124, owner_3 = @0x125)] - public entry fun test_end_to_end( - owner_1: &signer, owner_2: &signer, owner_3: &signer) acquires MultisigAccount { - setup(); - let owner_1_addr = address_of(owner_1); - let owner_2_addr = address_of(owner_2); - let owner_3_addr = address_of(owner_3); - create_account(owner_1_addr); - let multisig_account = get_next_multisig_account_address(owner_1_addr); - create_with_owners(owner_1, vector[owner_2_addr, owner_3_addr], 2, vector[], vector[]); - - // Create three transactions. - create_transaction(owner_1, multisig_account, PAYLOAD); - create_transaction(owner_2, multisig_account, PAYLOAD); - create_transaction_with_hash(owner_3, multisig_account, sha3_256(PAYLOAD)); - assert!(get_pending_transactions(multisig_account) == vector[ - get_transaction(multisig_account, 1), - get_transaction(multisig_account, 2), - get_transaction(multisig_account, 3), - ], 0); - - // Owner 3 doesn't need to explicitly approve as they created the transaction. - approve_transaction(owner_1, multisig_account, 3); - // Third transaction has 2 approvals but cannot be executed out-of-order. - assert!(!can_be_executed(multisig_account, 3), 0); - - // Owner 1 doesn't need to explicitly approve as they created the transaction. - approve_transaction(owner_2, multisig_account, 1); - // First transaction has 2 approvals so it can be executed. - assert!(can_be_executed(multisig_account, 1), 1); - // First transaction was executed successfully. - successful_transaction_execution_cleanup(owner_2_addr, multisig_account, vector[]); - assert!(get_pending_transactions(multisig_account) == vector[ - get_transaction(multisig_account, 2), - get_transaction(multisig_account, 3), - ], 0); - - reject_transaction(owner_1, multisig_account, 2); - reject_transaction(owner_3, multisig_account, 2); - // Second transaction has 1 approval (owner 3) and 2 rejections (owners 1 & 2) and thus can be removed. - assert!(can_be_rejected(multisig_account, 2), 2); - execute_rejected_transaction(owner_1, multisig_account); - assert!(get_pending_transactions(multisig_account) == vector[ - get_transaction(multisig_account, 3), - ], 0); - - // Third transaction can be executed now but execution fails. - failed_transaction_execution_cleanup(owner_3_addr, multisig_account, PAYLOAD, execution_error()); - assert!(get_pending_transactions(multisig_account) == vector[], 0); - } - - #[test(owner_1 = @0x123, owner_2 = @0x124, owner_3 = @0x125)] - public entry fun test_end_to_end_with_implicit_votes( - owner_1: &signer, owner_2: &signer, owner_3: &signer) acquires MultisigAccount { - setup(); - let owner_1_addr = address_of(owner_1); - let owner_2_addr = address_of(owner_2); - let owner_3_addr = address_of(owner_3); - create_account(owner_1_addr); - let multisig_account = get_next_multisig_account_address(owner_1_addr); - create_with_owners(owner_1, vector[owner_2_addr, owner_3_addr], 2, vector[], vector[]); - - // Create three transactions. - create_transaction(owner_1, multisig_account, PAYLOAD); - create_transaction(owner_2, multisig_account, PAYLOAD); - assert!(get_pending_transactions(multisig_account) == vector[ - get_transaction(multisig_account, 1), - get_transaction(multisig_account, 2), - ], 0); - - reject_transaction(owner_2, multisig_account, 1); - // Owner 2 can execute the transaction, implicitly voting to approve it, - // which overrides their previous vote for rejection. - assert!(can_execute(owner_2_addr, multisig_account, 1), 1); - // First transaction was executed successfully. - successful_transaction_execution_cleanup(owner_2_addr, multisig_account,vector[]); - assert!(get_pending_transactions(multisig_account) == vector[ - get_transaction(multisig_account, 2), - ], 0); - - reject_transaction(owner_1, multisig_account, 2); - // Owner 3 can execute-reject the transaction, implicitly voting to reject it. - assert!(can_reject(owner_3_addr, multisig_account, 2), 2); - execute_rejected_transaction(owner_3, multisig_account); - assert!(get_pending_transactions(multisig_account) == vector[], 0); - } - - #[test(owner = @0x123)] - public entry fun test_create_with_single_owner(owner: &signer) acquires MultisigAccount { - setup(); - let owner_addr = address_of(owner); - create_account(owner_addr); - create(owner, 1, vector[], vector[]); - let multisig_account = get_next_multisig_account_address(owner_addr); - assert_multisig_account_exists(multisig_account); - assert!(owners(multisig_account) == vector[owner_addr], 0); - } - - #[test(owner_1 = @0x123, owner_2 = @0x124, owner_3 = @0x125)] - public entry fun test_create_with_as_many_sigs_required_as_num_owners( - owner_1: &signer, owner_2: &signer, owner_3: &signer) acquires MultisigAccount { - setup(); - let owner_1_addr = address_of(owner_1); - create_account(owner_1_addr); - create_with_owners(owner_1, vector[address_of(owner_2), address_of(owner_3)], 3, vector[], vector[]); - let multisig_account = get_next_multisig_account_address(owner_1_addr); - assert_multisig_account_exists(multisig_account); - } - - #[test(owner = @0x123)] - #[expected_failure(abort_code = 0x1000B, location = Self)] - public entry fun test_create_with_zero_signatures_required_should_fail( - owner: &signer) acquires MultisigAccount { - setup(); - create_account(address_of(owner)); - create(owner, 0, vector[], vector[]); - } - - #[test(owner = @0x123)] - #[expected_failure(abort_code = 0x1000B, location = Self)] - public entry fun test_create_with_too_many_signatures_required_should_fail( - owner: &signer) acquires MultisigAccount { - setup(); - create_account(address_of(owner)); - create(owner, 2, vector[], vector[]); - } - - #[test(owner_1 = @0x123, owner_2 = @0x124, owner_3 = @0x125)] - #[expected_failure(abort_code = 0x10001, location = Self)] - public entry fun test_create_with_duplicate_owners_should_fail( - owner_1: &signer, owner_2: &signer, owner_3: &signer) acquires MultisigAccount { - setup(); - create_account(address_of(owner_1)); - create_with_owners( - owner_1, - vector[ - // Duplicate owner 2 addresses. - address_of(owner_2), - address_of(owner_3), - address_of(owner_2), - ], - 2, - vector[], - vector[]); - } - - #[test(owner = @0x123)] - #[expected_failure(abort_code = 0xD000E, location = Self)] - public entry fun test_create_with_without_feature_flag_enabled_should_fail( - owner: &signer) acquires MultisigAccount { - setup_disabled(); - create_account(address_of(owner)); - create(owner, 2, vector[], vector[]); - } - - #[test(owner_1 = @0x123, owner_2 = @0x124, owner_3 = @0x125)] - #[expected_failure(abort_code = 0x10001, location = Self)] - public entry fun test_create_with_creator_in_additional_owners_list_should_fail( - owner_1: &signer, owner_2: &signer, owner_3: &signer) acquires MultisigAccount { - setup(); - create_account(address_of(owner_1)); - create_with_owners(owner_1, vector[ - // Duplicate owner 1 addresses. - address_of(owner_1), - address_of(owner_2), - address_of(owner_3), - ], 2, - vector[], - vector[], - ); - } - - #[test] - public entry fun test_create_multisig_account_on_top_of_existing_with_signer() - acquires MultisigAccount { - setup(); - - let multisig_address = @0xabc; - create_account(multisig_address); - - let expected_owners = vector[@0x123, @0x124, @0x125]; - create_with_existing_account_call( - &create_signer(multisig_address), - expected_owners, - 2, - vector[], - vector[], - ); - assert_multisig_account_exists(multisig_address); - assert!(owners(multisig_address) == expected_owners, 0); - } - - #[test] - public entry fun test_create_multisig_account_on_top_of_existing_multi_ed25519_account() - acquires MultisigAccount { - setup(); - let (curr_sk, curr_pk) = multi_ed25519::generate_keys(2, 3); - let pk_unvalidated = multi_ed25519::public_key_to_unvalidated(&curr_pk); - let auth_key = multi_ed25519::unvalidated_public_key_to_authentication_key(&pk_unvalidated); - let multisig_address = from_bcs::to_address(auth_key); - create_account(multisig_address); - - let expected_owners = vector[@0x123, @0x124, @0x125]; - let proof = MultisigAccountCreationMessage { - chain_id: chain_id::get(), - account_address: multisig_address, - sequence_number: account::get_sequence_number(multisig_address), - owners: expected_owners, - num_signatures_required: 2, - }; - let signed_proof = multi_ed25519::sign_struct(&curr_sk, proof); - create_with_existing_account( - multisig_address, - expected_owners, - 2, - 1, // MULTI_ED25519_SCHEME - multi_ed25519::unvalidated_public_key_to_bytes(&pk_unvalidated), - multi_ed25519::signature_to_bytes(&signed_proof), - vector[], - vector[], - ); - assert_multisig_account_exists(multisig_address); - assert!(owners(multisig_address) == expected_owners, 0); - } - - #[test] - public entry fun test_create_multisig_account_on_top_of_existing_and_revoke_auth_key_with_signer() - acquires MultisigAccount { - setup(); - - let multisig_address = @0xabc; - create_account(multisig_address); - - // Create both a signer capability and rotation capability offers - account::set_rotation_capability_offer(multisig_address, @0x123); - account::set_signer_capability_offer(multisig_address, @0x123); - - let expected_owners = vector[@0x123, @0x124, @0x125]; - create_with_existing_account_and_revoke_auth_key_call( - &create_signer(multisig_address), - expected_owners, - 2, - vector[], - vector[], - ); - assert_multisig_account_exists(multisig_address); - assert!(owners(multisig_address) == expected_owners, 0); - assert!(account::get_authentication_key(multisig_address) == ZERO_AUTH_KEY, 1); - // Verify that all capability offers have been wiped. - assert!(!account::is_rotation_capability_offered(multisig_address), 2); - assert!(!account::is_signer_capability_offered(multisig_address), 3); - } - - #[test] - public entry fun test_create_multisig_account_on_top_of_existing_multi_ed25519_account_and_revoke_auth_key() - acquires MultisigAccount { - setup(); - let (curr_sk, curr_pk) = multi_ed25519::generate_keys(2, 3); - let pk_unvalidated = multi_ed25519::public_key_to_unvalidated(&curr_pk); - let auth_key = multi_ed25519::unvalidated_public_key_to_authentication_key(&pk_unvalidated); - let multisig_address = from_bcs::to_address(auth_key); - create_account(multisig_address); - - // Create both a signer capability and rotation capability offers - account::set_rotation_capability_offer(multisig_address, @0x123); - account::set_signer_capability_offer(multisig_address, @0x123); - - let expected_owners = vector[@0x123, @0x124, @0x125]; - let proof = MultisigAccountCreationWithAuthKeyRevocationMessage { - chain_id: chain_id::get(), - account_address: multisig_address, - sequence_number: account::get_sequence_number(multisig_address), - owners: expected_owners, - num_signatures_required: 2, - }; - let signed_proof = multi_ed25519::sign_struct(&curr_sk, proof); - create_with_existing_account_and_revoke_auth_key( - multisig_address, - expected_owners, - 2, - 1, // MULTI_ED25519_SCHEME - multi_ed25519::unvalidated_public_key_to_bytes(&pk_unvalidated), - multi_ed25519::signature_to_bytes(&signed_proof), - vector[], - vector[], - ); - assert_multisig_account_exists(multisig_address); - assert!(owners(multisig_address) == expected_owners, 0); - assert!(account::get_authentication_key(multisig_address) == ZERO_AUTH_KEY, 1); - // Verify that all capability offers have been wiped. - assert!(!account::is_rotation_capability_offered(multisig_address), 2); - assert!(!account::is_signer_capability_offered(multisig_address), 3); - } - - #[test(owner_1 = @0x123, owner_2 = @0x124, owner_3 = @0x125)] - public entry fun test_update_signatures_required( - owner_1: &signer, owner_2: &signer, owner_3: &signer) acquires MultisigAccount { - setup(); - let owner_1_addr = address_of(owner_1); - create_account(owner_1_addr); - create_with_owners(owner_1, vector[address_of(owner_2), address_of(owner_3)], 1, vector[], vector[]); - let multisig_account = get_next_multisig_account_address(owner_1_addr); - assert!(num_signatures_required(multisig_account) == 1, 0); - update_signatures_required(&create_signer(multisig_account), 2); - assert!(num_signatures_required(multisig_account) == 2, 1); - // As many signatures required as number of owners (3). - update_signatures_required(&create_signer(multisig_account), 3); - assert!(num_signatures_required(multisig_account) == 3, 2); - } - - #[test(owner = @0x123)] - public entry fun test_update_metadata(owner: &signer) acquires MultisigAccount { - setup(); - let owner_addr = address_of(owner); - create_account(owner_addr); - create(owner, 1, vector[], vector[]); - let multisig_account = get_next_multisig_account_address(owner_addr); - update_metadata( - &create_signer(multisig_account), - vector[utf8(b"key1"), utf8(b"key2")], - vector[vector[1], vector[2]], - ); - let updated_metadata = metadata(multisig_account); - assert!(simple_map::length(&updated_metadata) == 2, 0); - assert!(simple_map::borrow(&updated_metadata, &utf8(b"key1")) == &vector[1], 0); - assert!(simple_map::borrow(&updated_metadata, &utf8(b"key2")) == &vector[2], 0); - } - - #[test(owner = @0x123)] - #[expected_failure(abort_code = 0x1000B, location = Self)] - public entry fun test_update_with_zero_signatures_required_should_fail( - owner: & signer) acquires MultisigAccount { - setup(); - create_account(address_of(owner)); - create(owner, 1, vector[], vector[]); - let multisig_account = get_next_multisig_account_address(address_of(owner)); - update_signatures_required(&create_signer(multisig_account), 0); - } - - #[test(owner = @0x123)] - #[expected_failure(abort_code = 0x30005, location = Self)] - public entry fun test_update_with_too_many_signatures_required_should_fail( - owner: &signer) acquires MultisigAccount { - setup(); - create_account(address_of(owner)); - create(owner, 1, vector[], vector[]); - let multisig_account = get_next_multisig_account_address(address_of(owner)); - update_signatures_required(&create_signer(multisig_account), 2); - } - - #[test(owner_1 = @0x123, owner_2 = @0x124, owner_3 = @0x125)] - public entry fun test_add_owners( - owner_1: &signer, owner_2: &signer, owner_3: &signer) acquires MultisigAccount { - setup(); - create_account(address_of(owner_1)); - create(owner_1, 1, vector[], vector[]); - let owner_1_addr = address_of(owner_1); - let owner_2_addr = address_of(owner_2); - let owner_3_addr = address_of(owner_3); - let multisig_account = get_next_multisig_account_address(owner_1_addr); - let multisig_signer = &create_signer(multisig_account); - assert!(owners(multisig_account) == vector[owner_1_addr], 0); - // Adding an empty vector of new owners should be no-op. - add_owners(multisig_signer, vector[]); - assert!(owners(multisig_account) == vector[owner_1_addr], 1); - add_owners(multisig_signer, vector[owner_2_addr, owner_3_addr]); - assert!(owners(multisig_account) == vector[owner_1_addr, owner_2_addr, owner_3_addr], 2); - } - - #[test(owner_1 = @0x123, owner_2 = @0x124, owner_3 = @0x125)] - public entry fun test_remove_owners( - owner_1: &signer, owner_2: &signer, owner_3: &signer) acquires MultisigAccount { - setup(); - let owner_1_addr = address_of(owner_1); - let owner_2_addr = address_of(owner_2); - let owner_3_addr = address_of(owner_3); - create_account(owner_1_addr); - create_with_owners(owner_1, vector[owner_2_addr, owner_3_addr], 1, vector[], vector[]); - let multisig_account = get_next_multisig_account_address(owner_1_addr); - let multisig_signer = &create_signer(multisig_account); - assert!(owners(multisig_account) == vector[owner_2_addr, owner_3_addr, owner_1_addr], 0); - // Removing an empty vector of owners should be no-op. - remove_owners(multisig_signer, vector[]); - assert!(owners(multisig_account) == vector[owner_2_addr, owner_3_addr, owner_1_addr], 1); - remove_owners(multisig_signer, vector[owner_2_addr]); - assert!(owners(multisig_account) == vector[owner_1_addr, owner_3_addr], 2); - // Removing owners that don't exist should be no-op. - remove_owners(multisig_signer, vector[@0x130]); - assert!(owners(multisig_account) == vector[owner_1_addr, owner_3_addr], 3); - // Removing with duplicate owners should still work. - remove_owners(multisig_signer, vector[owner_3_addr, owner_3_addr, owner_3_addr]); - assert!(owners(multisig_account) == vector[owner_1_addr], 4); - } - - #[test(owner_1 = @0x123, owner_2 = @0x124, owner_3 = @0x125)] - #[expected_failure(abort_code = 0x30005, location = Self)] - public entry fun test_remove_all_owners_should_fail( - owner_1: &signer, owner_2: &signer, owner_3: &signer) acquires MultisigAccount { - setup(); - let owner_1_addr = address_of(owner_1); - let owner_2_addr = address_of(owner_2); - let owner_3_addr = address_of(owner_3); - create_account(owner_1_addr); - create_with_owners(owner_1, vector[owner_2_addr, owner_3_addr], 1, vector[], vector[]); - let multisig_account = get_next_multisig_account_address(owner_1_addr); - assert!(owners(multisig_account) == vector[owner_2_addr, owner_3_addr, owner_1_addr], 0); - let multisig_signer = &create_signer(multisig_account); - remove_owners(multisig_signer, vector[owner_1_addr, owner_2_addr, owner_3_addr]); - } - - #[test(owner_1 = @0x123, owner_2 = @0x124, owner_3 = @0x125)] - #[expected_failure(abort_code = 0x30005, location = Self)] - public entry fun test_remove_owners_with_fewer_remaining_than_signature_threshold_should_fail( - owner_1: &signer, owner_2: &signer, owner_3: &signer) acquires MultisigAccount { - setup(); - let owner_1_addr = address_of(owner_1); - let owner_2_addr = address_of(owner_2); - let owner_3_addr = address_of(owner_3); - create_account(owner_1_addr); - create_with_owners(owner_1, vector[owner_2_addr, owner_3_addr], 2, vector[], vector[]); - let multisig_account = get_next_multisig_account_address(owner_1_addr); - let multisig_signer = &create_signer(multisig_account); - // Remove 2 owners so there's one left, which is less than the signature threshold of 2. - remove_owners(multisig_signer, vector[owner_2_addr, owner_3_addr]); - } - - #[test(owner_1 = @0x123, owner_2 = @0x124, owner_3 = @0x125)] - public entry fun test_create_transaction( - owner_1: &signer, owner_2: &signer, owner_3: &signer) acquires MultisigAccount { - setup(); - let owner_1_addr = address_of(owner_1); - let owner_2_addr = address_of(owner_2); - let owner_3_addr = address_of(owner_3); - create_account(owner_1_addr); - let multisig_account = get_next_multisig_account_address(owner_1_addr); - create_with_owners(owner_1, vector[owner_2_addr, owner_3_addr], 2, vector[], vector[]); - - create_transaction(owner_1, multisig_account, PAYLOAD); - let transaction = get_transaction(multisig_account, 1); - assert!(transaction.creator == owner_1_addr, 0); - assert!(option::is_some(&transaction.payload), 1); - assert!(option::is_none(&transaction.payload_hash), 2); - let payload = option::extract(&mut transaction.payload); - assert!(payload == PAYLOAD, 4); - // Automatic yes vote from creator. - assert!(simple_map::length(&transaction.votes) == 1, 5); - assert!(*simple_map::borrow(&transaction.votes, &owner_1_addr), 5); - } - - #[test(owner = @0x123)] - #[expected_failure(abort_code = 0x10004, location = Self)] - public entry fun test_create_transaction_with_empty_payload_should_fail( - owner: &signer) acquires MultisigAccount { - setup(); - create_account(address_of(owner)); - create(owner, 1, vector[], vector[]); - let multisig_account = get_next_multisig_account_address(address_of(owner)); - create_transaction(owner, multisig_account, vector[]); - } - - #[test(owner = @0x123, non_owner = @0x124)] - #[expected_failure(abort_code = 0x507D3, location = Self)] - public entry fun test_create_transaction_with_non_owner_should_fail( - owner: &signer, non_owner: &signer) acquires MultisigAccount { - setup(); - create_account(address_of(owner)); - create(owner, 1, vector[], vector[]); - let multisig_account = get_next_multisig_account_address(address_of(owner)); - create_transaction(non_owner, multisig_account, PAYLOAD); - } - - #[test(owner = @0x123)] - public entry fun test_create_transaction_with_hashes( - owner: &signer) acquires MultisigAccount { - setup(); - create_account(address_of(owner)); - create(owner, 1, vector[], vector[]); - let multisig_account = get_next_multisig_account_address(address_of(owner)); - create_transaction_with_hash(owner, multisig_account, sha3_256(PAYLOAD)); - } - - #[test(owner = @0x123)] - #[expected_failure(abort_code = 0x1000C, location = Self)] - public entry fun test_create_transaction_with_empty_hash_should_fail( - owner: &signer) acquires MultisigAccount { - setup(); - create_account(address_of(owner)); - create(owner, 1, vector[], vector[]); - let multisig_account = get_next_multisig_account_address(address_of(owner)); - create_transaction_with_hash(owner, multisig_account, vector[]); - } - - #[test(owner = @0x123, non_owner = @0x124)] - #[expected_failure(abort_code = 0x507D3, location = Self)] - public entry fun test_create_transaction_with_hashes_and_non_owner_should_fail( - owner: &signer, non_owner: &signer) acquires MultisigAccount { - setup(); - create_account(address_of(owner)); - create(owner, 1, vector[], vector[]); - let multisig_account = get_next_multisig_account_address(address_of(owner)); - create_transaction_with_hash(non_owner, multisig_account, sha3_256(PAYLOAD)); - } - - #[test(owner_1 = @0x123, owner_2 = @0x124, owner_3 = @0x125)] - public entry fun test_approve_transaction( - owner_1: &signer, owner_2: &signer, owner_3: &signer) acquires MultisigAccount { - setup(); - let owner_1_addr = address_of(owner_1); - let owner_2_addr = address_of(owner_2); - let owner_3_addr = address_of(owner_3); - create_account(owner_1_addr); - let multisig_account = get_next_multisig_account_address(owner_1_addr); - create_with_owners(owner_1, vector[owner_2_addr, owner_3_addr], 2, vector[], vector[]); - - create_transaction(owner_1, multisig_account, PAYLOAD); - approve_transaction(owner_2, multisig_account, 1); - approve_transaction(owner_3, multisig_account, 1); - let transaction = get_transaction(multisig_account, 1); - assert!(simple_map::length(&transaction.votes) == 3, 0); - assert!(*simple_map::borrow(&transaction.votes, &owner_1_addr), 1); - assert!(*simple_map::borrow(&transaction.votes, &owner_2_addr), 2); - assert!(*simple_map::borrow(&transaction.votes, &owner_3_addr), 3); - } - - #[test(owner_1 = @0x123, owner_2 = @0x124, owner_3 = @0x125)] - public entry fun test_validate_transaction_should_not_consider_removed_owners( - owner_1: &signer, owner_2: &signer, owner_3: & signer) acquires MultisigAccount { - setup(); - let owner_1_addr = address_of(owner_1); - let owner_2_addr = address_of(owner_2); - let owner_3_addr = address_of(owner_3); - create_account(owner_1_addr); - let multisig_account = get_next_multisig_account_address(owner_1_addr); - create_with_owners(owner_1, vector[owner_2_addr, owner_3_addr], 2, vector[], vector[]); - - // Owner 1 and 2 approved but then owner 1 got removed. - create_transaction(owner_1, multisig_account, PAYLOAD); - approve_transaction(owner_2, multisig_account, 1); - // Before owner 1 is removed, the transaction technically has sufficient approvals. - assert!(can_be_executed(multisig_account, 1), 0); - let multisig_signer = &create_signer(multisig_account); - remove_owners(multisig_signer, vector[owner_1_addr]); - // Now that owner 1 is removed, their approval should be invalidated and the transaction no longer - // has enough approvals to be executed. - assert!(!can_be_executed(multisig_account, 1), 1); - } - - #[test(owner = @0x123)] - #[expected_failure(abort_code = 0x607D6, location = Self)] - public entry fun test_approve_transaction_with_invalid_sequence_number_should_fail( - owner: &signer) acquires MultisigAccount { - setup(); - create_account(address_of(owner)); - let multisig_account = get_next_multisig_account_address(address_of(owner)); - create(owner, 1, vector[], vector[]); - // Transaction is created with id 1. - create_transaction(owner, multisig_account, PAYLOAD); - approve_transaction(owner, multisig_account, 2); - } - - #[test(owner = @0x123, non_owner = @0x124)] - #[expected_failure(abort_code = 0x507D3, location = Self)] - public entry fun test_approve_transaction_with_non_owner_should_fail( - owner: &signer, non_owner: &signer) acquires MultisigAccount { - setup(); - create_account(address_of(owner)); - let multisig_account = get_next_multisig_account_address(address_of(owner)); - create(owner, 1, vector[], vector[]); - // Transaction is created with id 1. - create_transaction(owner, multisig_account, PAYLOAD); - approve_transaction(non_owner, multisig_account, 1); - } - - #[test(owner = @0x123)] - public entry fun test_approval_transaction_after_rejecting( - owner: &signer) acquires MultisigAccount { - setup(); - let owner_addr = address_of(owner); - create_account(owner_addr); - let multisig_account = get_next_multisig_account_address(owner_addr); - create(owner, 1, vector[], vector[]); - - create_transaction(owner, multisig_account, PAYLOAD); - reject_transaction(owner, multisig_account, 1); - approve_transaction(owner, multisig_account, 1); - let transaction = get_transaction(multisig_account, 1); - assert!(*simple_map::borrow(&transaction.votes, &owner_addr), 1); - } - - #[test(owner_1 = @0x123, owner_2 = @0x124, owner_3 = @0x125)] - public entry fun test_reject_transaction( - owner_1: &signer, owner_2: &signer, owner_3: &signer) acquires MultisigAccount { - setup(); - let owner_1_addr = address_of(owner_1); - let owner_2_addr = address_of(owner_2); - let owner_3_addr = address_of(owner_3); - create_account(owner_1_addr); - let multisig_account = get_next_multisig_account_address(owner_1_addr); - create_with_owners(owner_1, vector[owner_2_addr, owner_3_addr], 2, vector[], vector[]); - - create_transaction(owner_1, multisig_account, PAYLOAD); - reject_transaction(owner_1, multisig_account, 1); - reject_transaction(owner_2, multisig_account, 1); - reject_transaction(owner_3, multisig_account, 1); - let transaction = get_transaction(multisig_account, 1); - assert!(simple_map::length(&transaction.votes) == 3, 0); - assert!(!*simple_map::borrow(&transaction.votes, &owner_1_addr), 1); - assert!(!*simple_map::borrow(&transaction.votes, &owner_2_addr), 2); - assert!(!*simple_map::borrow(&transaction.votes, &owner_3_addr), 3); - } - - #[test(owner = @0x123)] - public entry fun test_reject_transaction_after_approving( - owner: &signer) acquires MultisigAccount { - setup(); - let owner_addr = address_of(owner); - create_account(owner_addr); - let multisig_account = get_next_multisig_account_address(owner_addr); - create(owner, 1, vector[], vector[]); - - create_transaction(owner, multisig_account, PAYLOAD); - reject_transaction(owner, multisig_account, 1); - let transaction = get_transaction(multisig_account, 1); - assert!(!*simple_map::borrow(&transaction.votes, &owner_addr), 1); - } - - #[test(owner = @0x123)] - #[expected_failure(abort_code = 0x607D6, location = Self)] - public entry fun test_reject_transaction_with_invalid_sequence_number_should_fail( - owner: &signer) acquires MultisigAccount { - setup(); - create_account(address_of(owner)); - let multisig_account = get_next_multisig_account_address(address_of(owner)); - create(owner, 1, vector[], vector[]); - // Transaction is created with id 1. - create_transaction(owner, multisig_account, PAYLOAD); - reject_transaction(owner, multisig_account, 2); - } - - #[test(owner = @0x123, non_owner = @0x124)] - #[expected_failure(abort_code = 0x507D3, location = Self)] - public entry fun test_reject_transaction_with_non_owner_should_fail( - owner: &signer, non_owner: &signer) acquires MultisigAccount { - setup(); - create_account(address_of(owner)); - let multisig_account = get_next_multisig_account_address(address_of(owner)); - create(owner, 1, vector[], vector[]); - reject_transaction(non_owner, multisig_account, 1); - } - - #[test(owner_1 = @0x123, owner_2 = @0x124, owner_3 = @0x125)] - public entry fun test_execute_transaction_successful( - owner_1: &signer, owner_2: &signer, owner_3: &signer) acquires MultisigAccount { - setup(); - let owner_1_addr = address_of(owner_1); - let owner_2_addr = address_of(owner_2); - let owner_3_addr = address_of(owner_3); - create_account(owner_1_addr); - let multisig_account = get_next_multisig_account_address(owner_1_addr); - create_with_owners(owner_1, vector[owner_2_addr, owner_3_addr], 2, vector[], vector[]); - - create_transaction(owner_1, multisig_account, PAYLOAD); - // Owner 1 doesn't need to explicitly approve as they created the transaction. - approve_transaction(owner_2, multisig_account, 1); - assert!(can_be_executed(multisig_account, 1), 1); - assert!(table::contains(&borrow_global(multisig_account).transactions, 1), 0); - successful_transaction_execution_cleanup(owner_3_addr, multisig_account, vector[]); - } - - #[test(owner_1 = @0x123, owner_2 = @0x124, owner_3 = @0x125)] - public entry fun test_execute_transaction_failed( - owner_1: &signer, owner_2: &signer, owner_3: &signer) acquires MultisigAccount { - setup(); - let owner_1_addr = address_of(owner_1); - let owner_2_addr = address_of(owner_2); - let owner_3_addr = address_of(owner_3); - create_account(owner_1_addr); - let multisig_account = get_next_multisig_account_address(owner_1_addr); - create_with_owners(owner_1, vector[owner_2_addr, owner_3_addr], 2, vector[], vector[]); - - create_transaction(owner_1, multisig_account, PAYLOAD); - // Owner 1 doesn't need to explicitly approve as they created the transaction. - approve_transaction(owner_2, multisig_account, 1); - assert!(can_be_executed(multisig_account, 1), 1); - assert!(table::contains(&borrow_global(multisig_account).transactions, 1), 0); - failed_transaction_execution_cleanup(owner_3_addr, multisig_account, vector[], execution_error()); - } - - #[test(owner_1 = @0x123, owner_2 = @0x124, owner_3 = @0x125)] - public entry fun test_execute_transaction_with_full_payload( - owner_1: &signer, owner_2: &signer, owner_3: &signer) acquires MultisigAccount { - setup(); - let owner_1_addr = address_of(owner_1); - let owner_2_addr = address_of(owner_2); - let owner_3_addr = address_of(owner_3); - create_account(owner_1_addr); - let multisig_account = get_next_multisig_account_address(owner_1_addr); - create_with_owners(owner_1, vector[owner_2_addr, owner_3_addr], 2, vector[], vector[]); - - create_transaction_with_hash(owner_3, multisig_account, sha3_256(PAYLOAD)); - // Owner 3 doesn't need to explicitly approve as they created the transaction. - approve_transaction(owner_1, multisig_account, 1); - assert!(can_be_executed(multisig_account, 1), 1); - assert!(table::contains(&borrow_global(multisig_account).transactions, 1), 0); - successful_transaction_execution_cleanup(owner_3_addr, multisig_account, PAYLOAD); - } - - #[test(owner_1 = @0x123, owner_2 = @0x124, owner_3 = @0x125)] - public entry fun test_execute_rejected_transaction( - owner_1: &signer, owner_2: &signer, owner_3: &signer) acquires MultisigAccount { - setup(); - let owner_1_addr = address_of(owner_1); - let owner_2_addr = address_of(owner_2); - let owner_3_addr = address_of(owner_3); - create_account(owner_1_addr); - let multisig_account = get_next_multisig_account_address(owner_1_addr); - create_with_owners(owner_1, vector[owner_2_addr, owner_3_addr], 2, vector[], vector[]); - - create_transaction(owner_1, multisig_account, PAYLOAD); - reject_transaction(owner_2, multisig_account, 1); - reject_transaction(owner_3, multisig_account, 1); - assert!(can_be_rejected(multisig_account, 1), 1); - assert!(table::contains(&borrow_global(multisig_account).transactions, 1), 0); - execute_rejected_transaction(owner_3, multisig_account); - } - - #[test(owner = @0x123, non_owner = @0x124)] - #[expected_failure(abort_code = 0x507D3, location = Self)] - public entry fun test_execute_rejected_transaction_with_non_owner_should_fail( - owner: &signer, non_owner: &signer) acquires MultisigAccount { - setup(); - create_account(address_of(owner)); - let multisig_account = get_next_multisig_account_address(address_of(owner)); - create(owner, 1, vector[], vector[]); - - create_transaction(owner, multisig_account, PAYLOAD); - reject_transaction(owner, multisig_account, 1); - execute_rejected_transaction(non_owner, multisig_account); - } - - #[test(owner_1 = @0x123, owner_2 = @0x124, owner_3 = @0x125)] - #[expected_failure(abort_code = 0x3000A, location = Self)] - public entry fun test_execute_rejected_transaction_without_sufficient_rejections_should_fail( - owner_1: &signer, owner_2: &signer, owner_3: &signer) acquires MultisigAccount { - setup(); - let owner_1_addr = address_of(owner_1); - let owner_2_addr = address_of(owner_2); - let owner_3_addr = address_of(owner_3); - create_account(owner_1_addr); - let multisig_account = get_next_multisig_account_address(owner_1_addr); - create_with_owners(owner_1, vector[owner_2_addr, owner_3_addr], 2, vector[], vector[]); - - create_transaction(owner_1, multisig_account, PAYLOAD); - approve_transaction(owner_2, multisig_account, 1); - execute_rejected_transaction(owner_3, multisig_account); - } - - #[test( - owner_1 = @0x123, - owner_2 = @0x124, - owner_3 = @0x125 - )] - #[expected_failure(abort_code = 0x10012, location = Self)] - fun test_update_owner_schema_overlap_should_fail( - owner_1: &signer, - owner_2: &signer, - owner_3: &signer - ) acquires MultisigAccount { - setup(); - let owner_1_addr = address_of(owner_1); - let owner_2_addr = address_of(owner_2); - let owner_3_addr = address_of(owner_3); - create_account(owner_1_addr); - let multisig_address = get_next_multisig_account_address(owner_1_addr); - create_with_owners( - owner_1, - vector[owner_2_addr, owner_3_addr], - 2, - vector[], - vector[] - ); - update_owner_schema( - multisig_address, - vector[owner_1_addr], - vector[owner_1_addr], - option::none() - ); - } - - #[test(owner_1 = @0x123, owner_2 = @0x124, owner_3 = @0x125)] - #[expected_failure(abort_code = 196627, location = Self)] - fun test_max_pending_transaction_limit_should_fail( - owner_1: &signer, - owner_2: &signer, - owner_3: &signer - ) acquires MultisigAccount { - setup(); - let owner_1_addr = address_of(owner_1); - let owner_2_addr = address_of(owner_2); - let owner_3_addr = address_of(owner_3); - create_account(owner_1_addr); - let multisig_address = get_next_multisig_account_address(owner_1_addr); - create_with_owners( - owner_1, - vector[owner_2_addr, owner_3_addr], - 2, - vector[], - vector[] - ); - - let remaining_iterations = MAX_PENDING_TRANSACTIONS + 1; - while (remaining_iterations > 0) { - create_transaction(owner_1, multisig_address, PAYLOAD); - remaining_iterations = remaining_iterations - 1; - } - } - - #[test_only] - fun create_transaction_with_eviction( - owner: &signer, - multisig_account: address, - payload: vector, - ) acquires MultisigAccount { - while(available_transaction_queue_capacity(multisig_account) == 0) { - execute_rejected_transaction(owner, multisig_account) - }; - create_transaction(owner, multisig_account, payload); - } - - #[test_only] - fun vote_all_transactions( - owner: &signer, multisig_account: address, approved: bool) acquires MultisigAccount { - let starting_sequence_number = last_resolved_sequence_number(multisig_account) + 1; - let final_sequence_number = next_sequence_number(multisig_account) - 1; - vote_transactions(owner, multisig_account, starting_sequence_number, final_sequence_number, approved); - } - - #[test(owner_1 = @0x123, owner_2 = @0x124, owner_3 = @0x125)] - fun test_dos_mitigation_end_to_end( - owner_1: &signer, - owner_2: &signer, - owner_3: &signer - ) acquires MultisigAccount { - setup(); - let owner_1_addr = address_of(owner_1); - let owner_2_addr = address_of(owner_2); - let owner_3_addr = address_of(owner_3); - create_account(owner_1_addr); - let multisig_address = get_next_multisig_account_address(owner_1_addr); - create_with_owners( - owner_1, - vector[owner_2_addr, owner_3_addr], - 2, - vector[], - vector[] - ); - - // owner_3 is compromised and creates a bunch of bogus transactions. - let remaining_iterations = MAX_PENDING_TRANSACTIONS; - while (remaining_iterations > 0) { - create_transaction(owner_3, multisig_address, PAYLOAD); - remaining_iterations = remaining_iterations - 1; - }; - - // No one can create a transaction anymore because the transaction queue is full. - assert!(available_transaction_queue_capacity(multisig_address) == 0, 0); - - // owner_1 and owner_2 vote "no" on all transactions. - vote_all_transactions(owner_1, multisig_address, false); - vote_all_transactions(owner_2, multisig_address, false); - - // owner_1 evicts a transaction and creates a transaction to remove the compromised owner. - // Note that `PAYLOAD` is a placeholder and is not actually executed in this unit test. - create_transaction_with_eviction(owner_1, multisig_address, PAYLOAD); - - // owner_2 approves the eviction transaction. - approve_transaction(owner_2, multisig_address, 11); - - // owner_1 flushes the transaction queue except for the eviction transaction. - execute_rejected_transactions(owner_1, multisig_address, 10); - - // execute the eviction transaction to remove the compromised owner. - assert!(can_be_executed(multisig_address, 11), 0); - } - - #[test(owner = @0x123, non_owner = @0x234)] - #[expected_failure(abort_code = 329683, location = Self)] - public entry fun test_create_transaction_should_fail_if_not_owner( - owner: &signer, - non_owner: &signer - ) acquires MultisigAccount { - setup(); - create_account(address_of(owner)); - let multisig_account = get_next_multisig_account_address(address_of(owner)); - create(owner, 1, vector[], vector[]); - // Transaction is created with id 1. - create_transaction(non_owner, multisig_account, PAYLOAD); - } - - #[test(owner = @0x123, non_owner = @0x234)] - #[expected_failure(abort_code = 329683, location = Self)] - public entry fun test_create_transaction_with_hash_should_fail_if_not_owner( - owner: &signer, - non_owner: &signer - ) acquires MultisigAccount { - setup(); - create_account(address_of(owner)); - let multisig_account = get_next_multisig_account_address(address_of(owner)); - create(owner, 1, vector[], vector[]); - // Transaction is created with id 1. - create_transaction_with_hash(non_owner, multisig_account, sha3_256(PAYLOAD)); - } - - #[test(owner = @0x123, non_owner = @0x234)] - #[expected_failure(abort_code = 329683, location = Self)] - public entry fun test_reject_transaction_should_fail_if_not_owner( - owner: &signer, - non_owner: &signer - ) acquires MultisigAccount { - setup(); - create_account(address_of(owner)); - let multisig_account = get_next_multisig_account_address(address_of(owner)); - create(owner, 1, vector[], vector[]); - // Transaction is created with id 1. - create_transaction(owner, multisig_account, PAYLOAD); - reject_transaction(non_owner, multisig_account, 1); - } - - - #[test(owner = @0x123, non_owner = @0x234)] - #[expected_failure(abort_code = 329683, location = Self)] - public entry fun test_approve_transaction_should_fail_if_not_owner( - owner: &signer, - non_owner: &signer - ) acquires MultisigAccount { - setup(); - create_account(address_of(owner)); - let multisig_account = get_next_multisig_account_address(address_of(owner)); - create(owner, 1, vector[], vector[]); - // Transaction is created with id 1. - create_transaction(owner, multisig_account, PAYLOAD); - approve_transaction(non_owner, multisig_account, 1); - } - - #[test(owner = @0x123, non_owner = @0x234)] - #[expected_failure(abort_code = 329683, location = Self)] - public entry fun test_vote_transaction_should_fail_if_not_owner( - owner: &signer, - non_owner: &signer - ) acquires MultisigAccount { - setup(); - create_account(address_of(owner)); - let multisig_account = get_next_multisig_account_address(address_of(owner)); - create(owner, 1, vector[], vector[]); - // Transaction is created with id 1. - create_transaction(owner, multisig_account, PAYLOAD); - vote_transaction(non_owner, multisig_account, 1, true); - } - - #[test(owner = @0x123, non_owner = @0x234)] - #[expected_failure(abort_code = 329683, location = Self)] - public entry fun test_vote_transactions_should_fail_if_not_owner( - owner: &signer, - non_owner: &signer - ) acquires MultisigAccount { - setup(); - create_account(address_of(owner)); - let multisig_account = get_next_multisig_account_address(address_of(owner)); - create(owner, 1, vector[], vector[]); - // Transaction is created with id 1. - create_transaction(owner, multisig_account, PAYLOAD); - vote_transactions(non_owner, multisig_account, 1, 1, true); - } - - #[test(owner = @0x123, non_owner = @0x234)] - #[expected_failure(abort_code = 329683, location = Self)] - public entry fun test_execute_rejected_transaction_should_fail_if_not_owner( - owner: &signer, - non_owner: &signer - ) acquires MultisigAccount { - setup(); - create_account(address_of(owner)); - let multisig_account = get_next_multisig_account_address(address_of(owner)); - create(owner, 1, vector[], vector[]); - // Transaction is created with id 1. - create_transaction(owner, multisig_account, PAYLOAD); - reject_transaction(owner, multisig_account, 1); - execute_rejected_transaction(non_owner, multisig_account); - } - - - #[test(owner = @0x123, non_owner = @0x234)] - #[expected_failure(abort_code = 329683, location = Self)] - public entry fun test_execute_rejected_transactions_should_fail_if_not_owner( - owner: &signer, - non_owner: &signer - ) acquires MultisigAccount { - setup(); - create_account(address_of(owner)); - let multisig_account = get_next_multisig_account_address(address_of(owner)); - create(owner, 1, vector[], vector[]); - // Transaction is created with id 1. - create_transaction(owner, multisig_account, PAYLOAD); - reject_transaction(owner, multisig_account, 1); - execute_rejected_transactions(non_owner, multisig_account, 1); - } -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/object.move b/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/object.move deleted file mode 100644 index abca67bb2..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/object.move +++ /dev/null @@ -1,1095 +0,0 @@ -/// This defines the Move object model with the following properties: -/// - Simplified storage interface that supports a heterogeneous collection of resources to be -/// stored together. This enables data types to share a common core data layer (e.g., tokens), -/// while having richer extensions (e.g., concert ticket, sword). -/// - Globally accessible data and ownership model that enables creators and developers to dictate -/// the application and lifetime of data. -/// - Extensible programming model that supports individualization of user applications that -/// leverage the core framework including tokens. -/// - Support emitting events directly, thus improving discoverability of events associated with -/// objects. -/// - Considerate of the underlying system by leveraging resource groups for gas efficiency, -/// avoiding costly deserialization and serialization costs, and supporting deletability. -/// -/// TODO: -/// * There is no means to borrow an object or a reference to an object. We are exploring how to -/// make it so that a reference to a global object can be returned from a function. -module aptos_framework::object { - use std::bcs; - use std::error; - use std::hash; - use std::signer; - use std::vector; - - use aptos_std::from_bcs; - - use aptos_framework::account; - use aptos_framework::transaction_context; - use aptos_framework::create_signer::create_signer; - use aptos_framework::event; - use aptos_framework::guid; - - friend aptos_framework::coin; - friend aptos_framework::primary_fungible_store; - - /// An object already exists at this address - const EOBJECT_EXISTS: u64 = 1; - /// An object does not exist at this address - const EOBJECT_DOES_NOT_EXIST: u64 = 2; - /// The object does not have ungated transfers enabled - const ENO_UNGATED_TRANSFERS: u64 = 3; - /// The caller does not have ownership permissions - const ENOT_OBJECT_OWNER: u64 = 4; - /// The object does not allow for deletion - const ECANNOT_DELETE: u64 = 5; - /// Exceeds maximum nesting for an object transfer. - const EMAXIMUM_NESTING: u64 = 6; - /// The resource is not stored at the specified address. - const ERESOURCE_DOES_NOT_EXIST: u64 = 7; - /// Cannot reclaim objects that weren't burnt. - const EOBJECT_NOT_BURNT: u64 = 8; - /// Object is untransferable any operations that might result in a transfer are disallowed. - const EOBJECT_NOT_TRANSFERRABLE: u64 = 9; - /// Objects cannot be burnt - const EBURN_NOT_ALLOWED: u64 = 10; - - /// Explicitly separate the GUID space between Object and Account to prevent accidental overlap. - const INIT_GUID_CREATION_NUM: u64 = 0x4000000000000; - - /// Maximum nesting from one object to another. That is objects can technically have infinte - /// nesting, but any checks such as transfer will only be evaluated this deep. - const MAXIMUM_OBJECT_NESTING: u8 = 8; - - /// generate_unique_address uses this for domain separation within its native implementation - const DERIVE_AUID_ADDRESS_SCHEME: u8 = 0xFB; - - /// Scheme identifier used to generate an object's address `obj_addr` as derived from another object. - /// The object's address is generated as: - /// ``` - /// obj_addr = sha3_256(account addr | derived from object's address | 0xFC) - /// ``` - /// - /// This 0xFC constant serves as a domain separation tag to prevent existing authentication key and resource account - /// derivation to produce an object address. - const OBJECT_DERIVED_SCHEME: u8 = 0xFC; - - /// Scheme identifier used to generate an object's address `obj_addr` via a fresh GUID generated by the creator at - /// `source_addr`. The object's address is generated as: - /// ``` - /// obj_addr = sha3_256(guid | 0xFD) - /// ``` - /// where `guid = account::create_guid(create_signer(source_addr))` - /// - /// This 0xFD constant serves as a domain separation tag to prevent existing authentication key and resource account - /// derivation to produce an object address. - const OBJECT_FROM_GUID_ADDRESS_SCHEME: u8 = 0xFD; - - /// Scheme identifier used to generate an object's address `obj_addr` from the creator's `source_addr` and a `seed` as: - /// obj_addr = sha3_256(source_addr | seed | 0xFE). - /// - /// This 0xFE constant serves as a domain separation tag to prevent existing authentication key and resource account - /// derivation to produce an object address. - const OBJECT_FROM_SEED_ADDRESS_SCHEME: u8 = 0xFE; - - /// Address where unwanted objects can be forcefully transferred to. - const BURN_ADDRESS: address = @0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff; - - #[resource_group_member(group = aptos_framework::object::ObjectGroup)] - /// The core of the object model that defines ownership, transferability, and events. - struct ObjectCore has key { - /// Used by guid to guarantee globally unique objects and create event streams - guid_creation_num: u64, - /// The address (object or account) that owns this object - owner: address, - /// Object transferring is a common operation, this allows for disabling and enabling - /// transfers bypassing the use of a TransferRef. - allow_ungated_transfer: bool, - /// Emitted events upon transferring of ownership. - transfer_events: event::EventHandle, - } - - #[resource_group_member(group = aptos_framework::object::ObjectGroup)] - /// This is added to objects that are burnt (ownership transferred to BURN_ADDRESS). - struct TombStone has key { - /// Track the previous owner before the object is burnt so they can reclaim later if so desired. - original_owner: address, - } - - #[resource_group_member(group = aptos_framework::object::ObjectGroup)] - /// The existence of this renders all `TransferRef`s irrelevant. The object cannot be moved. - struct Untransferable has key {} - - #[resource_group(scope = global)] - /// A shared resource group for storing object resources together in storage. - struct ObjectGroup {} - - /// A pointer to an object -- these can only provide guarantees based upon the underlying data - /// type, that is the validity of T existing at an address is something that cannot be verified - /// by any other module than the module that defined T. Similarly, the module that defines T - /// can remove it from storage at any point in time. - struct Object has copy, drop, store { - inner: address, - } - - /// This is a one time ability given to the creator to configure the object as necessary - struct ConstructorRef has drop { - self: address, - /// True if the object can be deleted. Named objects are not deletable. - can_delete: bool, - } - - /// Used to remove an object from storage. - struct DeleteRef has drop, store { - self: address, - } - - /// Used to create events or move additional resources into object storage. - struct ExtendRef has drop, store { - self: address, - } - - /// Used to create LinearTransferRef, hence ownership transfer. - struct TransferRef has drop, store { - self: address, - } - - /// Used to perform transfers. This locks transferring ability to a single time use bound to - /// the current owner. - struct LinearTransferRef has drop { - self: address, - owner: address, - } - - /// Used to create derived objects from a given objects. - struct DeriveRef has drop, store { - self: address, - } - - /// Emitted whenever the object's owner field is changed. - struct TransferEvent has drop, store { - object: address, - from: address, - to: address, - } - - #[event] - /// Emitted whenever the object's owner field is changed. - struct Transfer has drop, store { - object: address, - from: address, - to: address, - } - - #[view] - public fun is_untransferable(object: Object): bool { - exists(object.inner) - } - - #[view] - public fun is_burnt(object: Object): bool { - exists(object.inner) - } - - /// Produces an ObjectId from the given address. This is not verified. - public fun address_to_object(object: address): Object { - assert!(exists(object), error::not_found(EOBJECT_DOES_NOT_EXIST)); - assert!(exists_at(object), error::not_found(ERESOURCE_DOES_NOT_EXIST)); - Object { inner: object } - } - - /// Returns true if there exists an object or the remnants of an object. - public fun is_object(object: address): bool { - exists(object) - } - - /// Returns true if there exists an object with resource T. - public fun object_exists(object: address): bool { - exists(object) && exists_at(object) - } - - /// Derives an object address from source material: sha3_256([creator address | seed | 0xFE]). - public fun create_object_address(source: &address, seed: vector): address { - let bytes = bcs::to_bytes(source); - vector::append(&mut bytes, seed); - vector::push_back(&mut bytes, OBJECT_FROM_SEED_ADDRESS_SCHEME); - from_bcs::to_address(hash::sha3_256(bytes)) - } - - native fun create_user_derived_object_address_impl(source: address, derive_from: address): address; - - /// Derives an object address from the source address and an object: sha3_256([source | object addr | 0xFC]). - public fun create_user_derived_object_address(source: address, derive_from: address): address { - if (std::features::object_native_derived_address_enabled()) { - create_user_derived_object_address_impl(source, derive_from) - } else { - let bytes = bcs::to_bytes(&source); - vector::append(&mut bytes, bcs::to_bytes(&derive_from)); - vector::push_back(&mut bytes, OBJECT_DERIVED_SCHEME); - from_bcs::to_address(hash::sha3_256(bytes)) - } - } - - /// Derives an object from an Account GUID. - public fun create_guid_object_address(source: address, creation_num: u64): address { - let id = guid::create_id(source, creation_num); - let bytes = bcs::to_bytes(&id); - vector::push_back(&mut bytes, OBJECT_FROM_GUID_ADDRESS_SCHEME); - from_bcs::to_address(hash::sha3_256(bytes)) - } - - native fun exists_at(object: address): bool; - - /// Returns the address of within an ObjectId. - public fun object_address(object: &Object): address { - object.inner - } - - /// Convert Object to Object. - public fun convert(object: Object): Object { - address_to_object(object.inner) - } - - /// Create a new named object and return the ConstructorRef. Named objects can be queried globally - /// by knowing the user generated seed used to create them. Named objects cannot be deleted. - public fun create_named_object(creator: &signer, seed: vector): ConstructorRef { - let creator_address = signer::address_of(creator); - let obj_addr = create_object_address(&creator_address, seed); - create_object_internal(creator_address, obj_addr, false) - } - - /// Create a new object whose address is derived based on the creator account address and another object. - /// Derivde objects, similar to named objects, cannot be deleted. - public(friend) fun create_user_derived_object(creator_address: address, derive_ref: &DeriveRef): ConstructorRef { - let obj_addr = create_user_derived_object_address(creator_address, derive_ref.self); - create_object_internal(creator_address, obj_addr, false) - } - - /// Create a new object by generating a random unique address based on transaction hash. - /// The unique address is computed sha3_256([transaction hash | auid counter | 0xFB]). - /// The created object is deletable as we can guarantee the same unique address can - /// never be regenerated with future txs. - public fun create_object(owner_address: address): ConstructorRef { - let unique_address = transaction_context::generate_auid_address(); - create_object_internal(owner_address, unique_address, true) - } - - /// Same as `create_object` except the object to be created will be undeletable. - public fun create_sticky_object(owner_address: address): ConstructorRef { - let unique_address = transaction_context::generate_auid_address(); - create_object_internal(owner_address, unique_address, false) - } - - /// Create a sticky object at a specific address. Only used by aptos_framework::coin. - public(friend) fun create_sticky_object_at_address( - owner_address: address, - object_address: address, - ): ConstructorRef { - create_object_internal(owner_address, object_address, false) - } - - #[deprecated] - /// Use `create_object` instead. - /// Create a new object from a GUID generated by an account. - /// As the GUID creation internally increments a counter, two transactions that executes - /// `create_object_from_account` function for the same creator run sequentially. - /// Therefore, using `create_object` method for creating objects is preferrable as it - /// doesn't have the same bottlenecks. - public fun create_object_from_account(creator: &signer): ConstructorRef { - let guid = account::create_guid(creator); - create_object_from_guid(signer::address_of(creator), guid) - } - - #[deprecated] - /// Use `create_object` instead. - /// Create a new object from a GUID generated by an object. - /// As the GUID creation internally increments a counter, two transactions that executes - /// `create_object_from_object` function for the same creator run sequentially. - /// Therefore, using `create_object` method for creating objects is preferrable as it - /// doesn't have the same bottlenecks. - public fun create_object_from_object(creator: &signer): ConstructorRef acquires ObjectCore { - let guid = create_guid(creator); - create_object_from_guid(signer::address_of(creator), guid) - } - - fun create_object_from_guid(creator_address: address, guid: guid::GUID): ConstructorRef { - let bytes = bcs::to_bytes(&guid); - vector::push_back(&mut bytes, OBJECT_FROM_GUID_ADDRESS_SCHEME); - let obj_addr = from_bcs::to_address(hash::sha3_256(bytes)); - create_object_internal(creator_address, obj_addr, true) - } - - fun create_object_internal( - creator_address: address, - object: address, - can_delete: bool, - ): ConstructorRef { - assert!(!exists(object), error::already_exists(EOBJECT_EXISTS)); - - let object_signer = create_signer(object); - let guid_creation_num = INIT_GUID_CREATION_NUM; - let transfer_events_guid = guid::create(object, &mut guid_creation_num); - - move_to( - &object_signer, - ObjectCore { - guid_creation_num, - owner: creator_address, - allow_ungated_transfer: true, - transfer_events: event::new_event_handle(transfer_events_guid), - }, - ); - ConstructorRef { self: object, can_delete } - } - - // Creation helpers - - /// Generates the DeleteRef, which can be used to remove ObjectCore from global storage. - public fun generate_delete_ref(ref: &ConstructorRef): DeleteRef { - assert!(ref.can_delete, error::permission_denied(ECANNOT_DELETE)); - DeleteRef { self: ref.self } - } - - /// Generates the ExtendRef, which can be used to add new events and resources to the object. - public fun generate_extend_ref(ref: &ConstructorRef): ExtendRef { - ExtendRef { self: ref.self } - } - - /// Generates the TransferRef, which can be used to manage object transfers. - public fun generate_transfer_ref(ref: &ConstructorRef): TransferRef { - assert!(!exists(ref.self), error::permission_denied(EOBJECT_NOT_TRANSFERRABLE)); - TransferRef { self: ref.self } - } - - /// Generates the DeriveRef, which can be used to create determnistic derived objects from the current object. - public fun generate_derive_ref(ref: &ConstructorRef): DeriveRef { - DeriveRef { self: ref.self } - } - - /// Create a signer for the ConstructorRef - public fun generate_signer(ref: &ConstructorRef): signer { - create_signer(ref.self) - } - - /// Returns the address associated with the constructor - public fun address_from_constructor_ref(ref: &ConstructorRef): address { - ref.self - } - - /// Returns an Object from within a ConstructorRef - public fun object_from_constructor_ref(ref: &ConstructorRef): Object { - address_to_object(ref.self) - } - - /// Returns whether or not the ConstructorRef can be used to create DeleteRef - public fun can_generate_delete_ref(ref: &ConstructorRef): bool { - ref.can_delete - } - - // Signer required functions - - /// Create a guid for the object, typically used for events - public fun create_guid(object: &signer): guid::GUID acquires ObjectCore { - let addr = signer::address_of(object); - let object_data = borrow_global_mut(addr); - guid::create(addr, &mut object_data.guid_creation_num) - } - - /// Generate a new event handle. - public fun new_event_handle( - object: &signer, - ): event::EventHandle acquires ObjectCore { - event::new_event_handle(create_guid(object)) - } - - // Deletion helpers - - /// Returns the address associated with the constructor - public fun address_from_delete_ref(ref: &DeleteRef): address { - ref.self - } - - /// Returns an Object from within a DeleteRef. - public fun object_from_delete_ref(ref: &DeleteRef): Object { - address_to_object(ref.self) - } - - /// Removes from the specified Object from global storage. - public fun delete(ref: DeleteRef) acquires Untransferable, ObjectCore { - let object_core = move_from(ref.self); - let ObjectCore { - guid_creation_num: _, - owner: _, - allow_ungated_transfer: _, - transfer_events, - } = object_core; - - if (exists(ref.self)) { - let Untransferable {} = move_from(ref.self); - }; - - event::destroy_handle(transfer_events); - } - - // Extension helpers - - /// Create a signer for the ExtendRef - public fun generate_signer_for_extending(ref: &ExtendRef): signer { - create_signer(ref.self) - } - - /// Returns an address from within a ExtendRef. - public fun address_from_extend_ref(ref: &ExtendRef): address { - ref.self - } - - // Transfer functionality - - /// Disable direct transfer, transfers can only be triggered via a TransferRef - public fun disable_ungated_transfer(ref: &TransferRef) acquires ObjectCore { - let object = borrow_global_mut(ref.self); - object.allow_ungated_transfer = false; - } - - /// Prevent moving of the object - public fun set_untransferable(ref: &ConstructorRef) acquires ObjectCore { - let object = borrow_global_mut(ref.self); - object.allow_ungated_transfer = false; - let object_signer = generate_signer(ref); - move_to(&object_signer, Untransferable {}); - } - - /// Enable direct transfer. - public fun enable_ungated_transfer(ref: &TransferRef) acquires ObjectCore { - assert!(!exists(ref.self), error::permission_denied(EOBJECT_NOT_TRANSFERRABLE)); - let object = borrow_global_mut(ref.self); - object.allow_ungated_transfer = true; - } - - /// Create a LinearTransferRef for a one-time transfer. This requires that the owner at the - /// time of generation is the owner at the time of transferring. - public fun generate_linear_transfer_ref(ref: &TransferRef): LinearTransferRef acquires ObjectCore { - assert!(!exists(ref.self), error::permission_denied(EOBJECT_NOT_TRANSFERRABLE)); - let owner = owner(Object { inner: ref.self }); - LinearTransferRef { - self: ref.self, - owner, - } - } - - /// Transfer to the destination address using a LinearTransferRef. - public fun transfer_with_ref(ref: LinearTransferRef, to: address) acquires ObjectCore, TombStone { - assert!(!exists(ref.self), error::permission_denied(EOBJECT_NOT_TRANSFERRABLE)); - - // Undo soft burn if present as we don't want the original owner to be able to reclaim by calling unburn later. - if (exists(ref.self)) { - let TombStone { original_owner: _ } = move_from(ref.self); - }; - - let object = borrow_global_mut(ref.self); - assert!( - object.owner == ref.owner, - error::permission_denied(ENOT_OBJECT_OWNER), - ); - if (std::features::module_event_migration_enabled()) { - event::emit( - Transfer { - object: ref.self, - from: object.owner, - to, - }, - ); - } else { - event::emit_event( - &mut object.transfer_events, - TransferEvent { - object: ref.self, - from: object.owner, - to, - }, - ); - }; - object.owner = to; - } - - /// Entry function that can be used to transfer, if allow_ungated_transfer is set true. - public entry fun transfer_call( - owner: &signer, - object: address, - to: address, - ) acquires ObjectCore { - transfer_raw(owner, object, to) - } - - /// Transfers ownership of the object (and all associated resources) at the specified address - /// for Object to the "to" address. - public entry fun transfer( - owner: &signer, - object: Object, - to: address, - ) acquires ObjectCore { - transfer_raw(owner, object.inner, to) - } - - /// Attempts to transfer using addresses only. Transfers the given object if - /// allow_ungated_transfer is set true. Note, that this allows the owner of a nested object to - /// transfer that object, so long as allow_ungated_transfer is enabled at each stage in the - /// hierarchy. - public fun transfer_raw( - owner: &signer, - object: address, - to: address, - ) acquires ObjectCore { - let owner_address = signer::address_of(owner); - verify_ungated_and_descendant(owner_address, object); - transfer_raw_inner(object, to); - } - - inline fun transfer_raw_inner(object: address, to: address) acquires ObjectCore { - let object_core = borrow_global_mut(object); - if (object_core.owner != to) { - if (std::features::module_event_migration_enabled()) { - event::emit( - Transfer { - object, - from: object_core.owner, - to, - }, - ); - } else { - event::emit_event( - &mut object_core.transfer_events, - TransferEvent { - object, - from: object_core.owner, - to, - }, - ); - }; - object_core.owner = to; - }; - } - - /// Transfer the given object to another object. See `transfer` for more information. - public entry fun transfer_to_object( - owner: &signer, - object: Object, - to: Object, - ) acquires ObjectCore { - transfer(owner, object, to.inner) - } - - /// This checks that the destination address is eventually owned by the owner and that each - /// object between the two allows for ungated transfers. Note, this is limited to a depth of 8 - /// objects may have cyclic dependencies. - fun verify_ungated_and_descendant(owner: address, destination: address) acquires ObjectCore { - let current_address = destination; - assert!( - exists(current_address), - error::not_found(EOBJECT_DOES_NOT_EXIST), - ); - - let object = borrow_global(current_address); - assert!( - object.allow_ungated_transfer, - error::permission_denied(ENO_UNGATED_TRANSFERS), - ); - - let current_address = object.owner; - let count = 0; - while (owner != current_address) { - count = count + 1; - assert!(count < MAXIMUM_OBJECT_NESTING, error::out_of_range(EMAXIMUM_NESTING)); - // At this point, the first object exists and so the more likely case is that the - // object's owner is not an object. So we return a more sensible error. - assert!( - exists(current_address), - error::permission_denied(ENOT_OBJECT_OWNER), - ); - let object = borrow_global(current_address); - assert!( - object.allow_ungated_transfer, - error::permission_denied(ENO_UNGATED_TRANSFERS), - ); - current_address = object.owner; - }; - } - - #[deprecated] - /// Previously allowed to burn objects, has now been disabled. Objects can still be unburnt. - /// - /// Please use the test only [`object::burn_object`] for testing with previously burned objects. - public entry fun burn(_owner: &signer, _object: Object) { - abort error::permission_denied(EBURN_NOT_ALLOWED) - } - - /// Allow origin owners to reclaim any objects they previous burnt. - public entry fun unburn( - original_owner: &signer, - object: Object, - ) acquires TombStone, ObjectCore { - let object_addr = object.inner; - assert!(exists(object_addr), error::invalid_argument(EOBJECT_NOT_BURNT)); - - let TombStone { original_owner: original_owner_addr } = move_from(object_addr); - assert!(original_owner_addr == signer::address_of(original_owner), error::permission_denied(ENOT_OBJECT_OWNER)); - transfer_raw_inner(object_addr, original_owner_addr); - } - - /// Accessors - /// Return true if ungated transfer is allowed. - public fun ungated_transfer_allowed(object: Object): bool acquires ObjectCore { - assert!( - exists(object.inner), - error::not_found(EOBJECT_DOES_NOT_EXIST), - ); - borrow_global(object.inner).allow_ungated_transfer - } - - /// Return the current owner. - public fun owner(object: Object): address acquires ObjectCore { - assert!( - exists(object.inner), - error::not_found(EOBJECT_DOES_NOT_EXIST), - ); - borrow_global(object.inner).owner - } - - /// Return true if the provided address is the current owner. - public fun is_owner(object: Object, owner: address): bool acquires ObjectCore { - owner(object) == owner - } - - /// Return true if the provided address has indirect or direct ownership of the provided object. - public fun owns(object: Object, owner: address): bool acquires ObjectCore { - let current_address = object_address(&object); - if (current_address == owner) { - return true - }; - - assert!( - exists(current_address), - error::not_found(EOBJECT_DOES_NOT_EXIST), - ); - - let object = borrow_global(current_address); - let current_address = object.owner; - - let count = 0; - while (owner != current_address) { - count = count + 1; - assert!(count < MAXIMUM_OBJECT_NESTING, error::out_of_range(EMAXIMUM_NESTING)); - if (!exists(current_address)) { - return false - }; - - let object = borrow_global(current_address); - current_address = object.owner; - }; - true - } - - /// Returns the root owner of an object. As objects support nested ownership, it can be useful - /// to determine the identity of the starting point of ownership. - public fun root_owner(object: Object): address acquires ObjectCore { - let obj_owner = owner(object); - while (is_object(obj_owner)) { - obj_owner = owner(address_to_object(obj_owner)); - }; - obj_owner - } - - #[test_only] - use std::option::{Self, Option}; - - #[test_only] - const EHERO_DOES_NOT_EXIST: u64 = 0x100; - #[test_only] - const EWEAPON_DOES_NOT_EXIST: u64 = 0x101; - - #[test_only] - /// For testing the previous behavior of `object::burn()` - /// - /// Forcefully transfer an unwanted object to BURN_ADDRESS, ignoring whether ungated_transfer is allowed. - /// This only works for objects directly owned and for simplicity does not apply to indirectly owned objects. - /// Original owners can reclaim burnt objects any time in the future by calling unburn. - public fun burn_object(owner: &signer, object: Object) acquires ObjectCore { - let original_owner = signer::address_of(owner); - assert!(is_owner(object, original_owner), error::permission_denied(ENOT_OBJECT_OWNER)); - let object_addr = object.inner; - move_to(&create_signer(object_addr), TombStone { original_owner }); - transfer_raw_inner(object_addr, BURN_ADDRESS); - } - - #[test_only] - struct HeroEquipEvent has drop, store { - weapon_id: Option>, - } - - #[test_only] - #[resource_group_member(group = aptos_framework::object::ObjectGroup)] - struct Hero has key { - equip_events: event::EventHandle, - weapon: Option>, - } - - #[test_only] - #[resource_group_member(group = aptos_framework::object::ObjectGroup)] - struct Weapon has key {} - - #[test_only] - public fun create_hero(creator: &signer): (ConstructorRef, Object) acquires ObjectCore { - let hero_constructor_ref = create_named_object(creator, b"hero"); - let hero_signer = generate_signer(&hero_constructor_ref); - let guid_for_equip_events = create_guid(&hero_signer); - move_to( - &hero_signer, - Hero { - weapon: option::none(), - equip_events: event::new_event_handle(guid_for_equip_events), - }, - ); - - let hero = object_from_constructor_ref(&hero_constructor_ref); - (hero_constructor_ref, hero) - } - - #[test_only] - public fun create_weapon(creator: &signer): (ConstructorRef, Object) { - let weapon_constructor_ref = create_named_object(creator, b"weapon"); - let weapon_signer = generate_signer(&weapon_constructor_ref); - move_to(&weapon_signer, Weapon {}); - let weapon = object_from_constructor_ref(&weapon_constructor_ref); - (weapon_constructor_ref, weapon) - } - - #[test_only] - public fun hero_equip( - owner: &signer, - hero: Object, - weapon: Object, - ) acquires Hero, ObjectCore { - transfer_to_object(owner, weapon, hero); - let hero_obj = borrow_global_mut(object_address(&hero)); - option::fill(&mut hero_obj.weapon, weapon); - event::emit_event( - &mut hero_obj.equip_events, - HeroEquipEvent { weapon_id: option::some(weapon) }, - ); - } - - #[test_only] - public fun hero_unequip( - owner: &signer, - hero: Object, - weapon: Object, - ) acquires Hero, ObjectCore { - transfer(owner, weapon, signer::address_of(owner)); - let hero = borrow_global_mut(object_address(&hero)); - option::extract(&mut hero.weapon); - event::emit_event( - &mut hero.equip_events, - HeroEquipEvent { weapon_id: option::none() }, - ); - } - - #[test(creator = @0x123)] - fun test_object(creator: &signer) acquires Hero, ObjectCore { - let (_, hero) = create_hero(creator); - let (_, weapon) = create_weapon(creator); - - assert!(owns(weapon, @0x123), 0); - hero_equip(creator, hero, weapon); - assert!(owns(weapon, @0x123), 1); - hero_unequip(creator, hero, weapon); - assert!(root_owner(hero) == @0x123, 2); - assert!(root_owner(weapon) == @0x123, 3); - } - - #[test(creator = @0x123)] - fun test_linear_transfer(creator: &signer) acquires ObjectCore, TombStone { - let (hero_constructor, hero) = create_hero(creator); - assert!(root_owner(hero) == @0x123, 0); - - let transfer_ref = generate_transfer_ref(&hero_constructor); - let linear_transfer_ref = generate_linear_transfer_ref(&transfer_ref); - transfer_with_ref(linear_transfer_ref, @0x456); - assert!(owner(hero) == @0x456, 1); - assert!(owns(hero, @0x456), 2); - assert!(root_owner(hero) == @0x456, 3); - } - - #[test(creator = @0x123)] - #[expected_failure(abort_code = 0x50004, location = Self)] - fun test_bad_linear_transfer(creator: &signer) acquires ObjectCore, TombStone { - let (hero_constructor, hero) = create_hero(creator); - let transfer_ref = generate_transfer_ref(&hero_constructor); - let linear_transfer_ref_good = generate_linear_transfer_ref(&transfer_ref); - // This will contain the address of the creator - let linear_transfer_ref_bad = generate_linear_transfer_ref(&transfer_ref); - transfer_with_ref(linear_transfer_ref_good, @0x456); - assert!(owner(hero) == @0x456, 0); - transfer_with_ref(linear_transfer_ref_bad, @0x789); - } - - #[test(creator = @0x123)] - #[expected_failure(abort_code = 0x10008, location = Self)] - fun test_cannot_unburn_after_transfer_with_ref(creator: &signer) acquires ObjectCore, TombStone { - let (hero_constructor, hero) = create_hero(creator); - burn_object(creator, hero); - let transfer_ref = generate_transfer_ref(&hero_constructor); - transfer_with_ref(generate_linear_transfer_ref(&transfer_ref), @0x456); - unburn(creator, hero); - } - - #[test(fx = @std)] - fun test_correct_auid() { - let auid1 = aptos_framework::transaction_context::generate_auid_address(); - let bytes = aptos_framework::transaction_context::get_transaction_hash(); - std::vector::push_back(&mut bytes, 1); - std::vector::push_back(&mut bytes, 0); - std::vector::push_back(&mut bytes, 0); - std::vector::push_back(&mut bytes, 0); - std::vector::push_back(&mut bytes, 0); - std::vector::push_back(&mut bytes, 0); - std::vector::push_back(&mut bytes, 0); - std::vector::push_back(&mut bytes, 0); - std::vector::push_back(&mut bytes, DERIVE_AUID_ADDRESS_SCHEME); - let auid2 = aptos_framework::from_bcs::to_address(std::hash::sha3_256(bytes)); - assert!(auid1 == auid2, 0); - } - - #[test(fx = @std)] - fun test_correct_derived_object_address(fx: signer) { - use std::features; - use aptos_framework::object; - let feature = features::get_object_native_derived_address_feature(); - - let source = @0x12345; - let derive_from = @0x7890; - - features::change_feature_flags_for_testing(&fx, vector[], vector[feature]); - let in_move = object::create_user_derived_object_address(source, derive_from); - - features::change_feature_flags_for_testing(&fx, vector[feature], vector[]); - let in_native = object::create_user_derived_object_address(source, derive_from); - - assert!(in_move == in_native, 0); - - let bytes = bcs::to_bytes(&source); - vector::append(&mut bytes, bcs::to_bytes(&derive_from)); - vector::push_back(&mut bytes, OBJECT_DERIVED_SCHEME); - let directly = from_bcs::to_address(hash::sha3_256(bytes)); - - assert!(directly == in_native, 0); - } - - #[test(creator = @0x123)] - fun test_burn_and_unburn(creator: &signer) acquires ObjectCore, TombStone { - let (hero_constructor, hero) = create_hero(creator); - // Freeze the object. - let transfer_ref = generate_transfer_ref(&hero_constructor); - disable_ungated_transfer(&transfer_ref); - - // Owner should be able to burn, despite ungated transfer disallowed. - burn_object(creator, hero); - assert!(owner(hero) == BURN_ADDRESS, 0); - assert!(!ungated_transfer_allowed(hero), 0); - - // Owner should be able to reclaim. - unburn(creator, hero); - assert!(owner(hero) == signer::address_of(creator), 0); - // Object still frozen. - assert!(!ungated_transfer_allowed(hero), 0); - } - - #[test(creator = @0x123)] - #[expected_failure(abort_code = 0x50004, location = Self)] - fun test_burn_indirectly_owned_should_fail(creator: &signer) acquires ObjectCore { - let (_, hero) = create_hero(creator); - let (_, weapon) = create_weapon(creator); - transfer_to_object(creator, weapon, hero); - - // Owner should be not be able to burn weapon directly. - assert!(owner(weapon) == object_address(&hero), 0); - assert!(owns(weapon, signer::address_of(creator)), 0); - burn_object(creator, weapon); - } - - #[test(creator = @0x123)] - #[expected_failure(abort_code = 0x10008, location = Self)] - fun test_unburn_object_not_burnt_should_fail(creator: &signer) acquires ObjectCore, TombStone { - let (_, hero) = create_hero(creator); - unburn(creator, hero); - } - - #[test(creator = @0x123)] - #[expected_failure(abort_code = 0x5000A, location = Self)] - fun test_burn_should_fail(creator: &signer) acquires ObjectCore { - let (_, hero) = create_hero(creator); - burn(creator, hero); - } - - #[test_only] - fun create_simple_object(creator: &signer, seed: vector): Object { - object_from_constructor_ref(&create_named_object(creator, seed)) - } - - #[test(creator = @0x123)] - #[expected_failure(abort_code = 131078, location = Self)] - fun test_exceeding_maximum_object_nesting_owns_should_fail(creator: &signer) acquires ObjectCore { - let obj1 = create_simple_object(creator, b"1"); - let obj2 = create_simple_object(creator, b"2"); - let obj3 = create_simple_object(creator, b"3"); - let obj4 = create_simple_object(creator, b"4"); - let obj5 = create_simple_object(creator, b"5"); - let obj6 = create_simple_object(creator, b"6"); - let obj7 = create_simple_object(creator, b"7"); - let obj8 = create_simple_object(creator, b"8"); - let obj9 = create_simple_object(creator, b"9"); - - transfer(creator, obj1, object_address(&obj2)); - transfer(creator, obj2, object_address(&obj3)); - transfer(creator, obj3, object_address(&obj4)); - transfer(creator, obj4, object_address(&obj5)); - transfer(creator, obj5, object_address(&obj6)); - transfer(creator, obj6, object_address(&obj7)); - transfer(creator, obj7, object_address(&obj8)); - transfer(creator, obj8, object_address(&obj9)); - - assert!(owns(obj9, signer::address_of(creator)), 1); - assert!(owns(obj8, signer::address_of(creator)), 1); - assert!(owns(obj7, signer::address_of(creator)), 1); - assert!(owns(obj6, signer::address_of(creator)), 1); - assert!(owns(obj5, signer::address_of(creator)), 1); - assert!(owns(obj4, signer::address_of(creator)), 1); - assert!(owns(obj3, signer::address_of(creator)), 1); - assert!(owns(obj2, signer::address_of(creator)), 1); - - // Calling `owns` should fail as the nesting is too deep. - assert!(owns(obj1, signer::address_of(creator)), 1); - } - - #[test(creator = @0x123)] - #[expected_failure(abort_code = 131078, location = Self)] - fun test_exceeding_maximum_object_nesting_transfer_should_fail(creator: &signer) acquires ObjectCore { - let obj1 = create_simple_object(creator, b"1"); - let obj2 = create_simple_object(creator, b"2"); - let obj3 = create_simple_object(creator, b"3"); - let obj4 = create_simple_object(creator, b"4"); - let obj5 = create_simple_object(creator, b"5"); - let obj6 = create_simple_object(creator, b"6"); - let obj7 = create_simple_object(creator, b"7"); - let obj8 = create_simple_object(creator, b"8"); - let obj9 = create_simple_object(creator, b"9"); - - transfer(creator, obj1, object_address(&obj2)); - transfer(creator, obj2, object_address(&obj3)); - transfer(creator, obj3, object_address(&obj4)); - transfer(creator, obj4, object_address(&obj5)); - transfer(creator, obj5, object_address(&obj6)); - transfer(creator, obj6, object_address(&obj7)); - transfer(creator, obj7, object_address(&obj8)); - transfer(creator, obj8, object_address(&obj9)); - - // This should fail as the nesting is too deep. - transfer(creator, obj1, @0x1); - } - - #[test(creator = @0x123)] - #[expected_failure(abort_code = 131078, location = Self)] - fun test_cyclic_ownership_transfer_should_fail(creator: &signer) acquires ObjectCore { - let obj1 = create_simple_object(creator, b"1"); - // This creates a cycle (self-loop) in ownership. - transfer(creator, obj1, object_address(&obj1)); - // This should fails as the ownership is cyclic. - transfer(creator, obj1, object_address(&obj1)); - } - - #[test(creator = @0x123)] - #[expected_failure(abort_code = 131078, location = Self)] - fun test_cyclic_ownership_owns_should_fail(creator: &signer) acquires ObjectCore { - let obj1 = create_simple_object(creator, b"1"); - // This creates a cycle (self-loop) in ownership. - transfer(creator, obj1, object_address(&obj1)); - // This should fails as the ownership is cyclic. - let _ = owns(obj1, signer::address_of(creator)); - } - - #[test(creator = @0x123)] - #[expected_failure(abort_code = 327683, location = Self)] - fun test_untransferable_direct_ownership_transfer(creator: &signer) acquires ObjectCore { - let (hero_constructor_ref, hero) = create_hero(creator); - set_untransferable(&hero_constructor_ref); - transfer(creator, hero, @0x456); - } - - #[test(creator = @0x123)] - #[expected_failure(abort_code = 327689, location = Self)] - fun test_untransferable_direct_ownership_gen_transfer_ref(creator: &signer) acquires ObjectCore { - let (hero_constructor_ref, _) = create_hero(creator); - set_untransferable(&hero_constructor_ref); - generate_transfer_ref(&hero_constructor_ref); - } - - #[test(creator = @0x123)] - #[expected_failure(abort_code = 327689, location = Self)] - fun test_untransferable_direct_ownership_gen_linear_transfer_ref(creator: &signer) acquires ObjectCore { - let (hero_constructor_ref, _) = create_hero(creator); - let transfer_ref = generate_transfer_ref(&hero_constructor_ref); - set_untransferable(&hero_constructor_ref); - generate_linear_transfer_ref(&transfer_ref); - } - - #[test(creator = @0x123)] - #[expected_failure(abort_code = 327689, location = Self)] - fun test_untransferable_direct_ownership_with_linear_transfer_ref(creator: &signer) acquires ObjectCore, TombStone { - let (hero_constructor_ref, _) = create_hero(creator); - let transfer_ref = generate_transfer_ref(&hero_constructor_ref); - let linear_transfer_ref = generate_linear_transfer_ref(&transfer_ref); - set_untransferable(&hero_constructor_ref); - transfer_with_ref(linear_transfer_ref, @0x456); - } - - #[test(creator = @0x123)] - #[expected_failure(abort_code = 327683, location = Self)] - fun test_untransferable_indirect_ownership_transfer(creator: &signer) acquires ObjectCore { - let (_, hero) = create_hero(creator); - let (weapon_constructor_ref, weapon) = create_weapon(creator); - transfer_to_object(creator, weapon, hero); - set_untransferable(&weapon_constructor_ref); - transfer(creator, weapon, @0x456); - } - - #[test(creator = @0x123)] - #[expected_failure(abort_code = 327689, location = Self)] - fun test_untransferable_indirect_ownership_gen_transfer_ref(creator: &signer) acquires ObjectCore { - let (_, hero) = create_hero(creator); - let (weapon_constructor_ref, weapon) = create_weapon(creator); - transfer_to_object(creator, weapon, hero); - set_untransferable(&weapon_constructor_ref); - generate_transfer_ref(&weapon_constructor_ref); - } - - #[test(creator = @0x123)] - #[expected_failure(abort_code = 327689, location = Self)] - fun test_untransferable_indirect_ownership_gen_linear_transfer_ref(creator: &signer) acquires ObjectCore { - let (_, hero) = create_hero(creator); - let (weapon_constructor_ref, weapon) = create_weapon(creator); - transfer_to_object(creator, weapon, hero); - let transfer_ref = generate_transfer_ref(&weapon_constructor_ref); - set_untransferable(&weapon_constructor_ref); - generate_linear_transfer_ref(&transfer_ref); - } - - #[test(creator = @0x123)] - #[expected_failure(abort_code = 327689, location = Self)] - fun test_untransferable_indirect_ownership_with_linear_transfer_ref(creator: &signer) acquires ObjectCore, TombStone { - let (_, hero) = create_hero(creator); - let (weapon_constructor_ref, weapon) = create_weapon(creator); - transfer_to_object(creator, weapon, hero); - let transfer_ref = generate_transfer_ref(&weapon_constructor_ref); - let linear_transfer_ref = generate_linear_transfer_ref(&transfer_ref); - set_untransferable(&weapon_constructor_ref); - transfer_with_ref(linear_transfer_ref, @0x456); - } -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/object_code_deployment.move b/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/object_code_deployment.move deleted file mode 100644 index ef9e7d37f..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/object_code_deployment.move +++ /dev/null @@ -1,147 +0,0 @@ -/// This module allows users to deploy, upgrade and freeze modules deployed to objects on-chain. -/// This enables users to deploy modules to an object with a unique address each time they are published. -/// This modules provides an alternative method to publish code on-chain, where code is deployed to objects rather than accounts. -/// This is encouraged as it abstracts the necessary resources needed for deploying modules, -/// along with the required authorization to upgrade and freeze modules. -/// -/// The functionalities of this module are as follows. -/// -/// Publishing modules flow: -/// 1. Create a new object with the address derived from the publisher address and the object seed. -/// 2. Publish the module passed in the function via `metadata_serialized` and `code` to the newly created object. -/// 3. Emits 'Publish' event with the address of the newly created object. -/// 4. Create a `ManagingRefs` which stores the extend ref of the newly created object. -/// Note: This is needed to upgrade the code as the signer must be generated to upgrade the existing code in an object. -/// -/// Upgrading modules flow: -/// 1. Assert the `code_object` passed in the function is owned by the `publisher`. -/// 2. Assert the `code_object` passed in the function exists in global storage. -/// 2. Retrieve the `ExtendRef` from the `code_object` and generate the signer from this. -/// 3. Upgrade the module with the `metadata_serialized` and `code` passed in the function. -/// 4. Emits 'Upgrade' event with the address of the object with the upgraded code. -/// Note: If the modules were deployed as immutable when calling `publish`, the upgrade will fail. -/// -/// Freezing modules flow: -/// 1. Assert the `code_object` passed in the function exists in global storage. -/// 2. Assert the `code_object` passed in the function is owned by the `publisher`. -/// 3. Mark all the modules in the `code_object` as immutable. -/// 4. Emits 'Freeze' event with the address of the object with the frozen code. -/// Note: There is no unfreeze function as this gives no benefit if the user can freeze/unfreeze modules at will. -/// Once modules are marked as immutable, they cannot be made mutable again. -module aptos_framework::object_code_deployment { - use std::bcs; - use std::error; - use std::features; - use std::signer; - use std::vector; - use aptos_framework::account; - use aptos_framework::code; - use aptos_framework::code::PackageRegistry; - use aptos_framework::event; - use aptos_framework::object; - use aptos_framework::object::{ExtendRef, Object}; - - /// Object code deployment feature not supported. - const EOBJECT_CODE_DEPLOYMENT_NOT_SUPPORTED: u64 = 1; - /// Not the owner of the `code_object` - const ENOT_CODE_OBJECT_OWNER: u64 = 2; - /// `code_object` does not exist. - const ECODE_OBJECT_DOES_NOT_EXIST: u64 = 3; - - const OBJECT_CODE_DEPLOYMENT_DOMAIN_SEPARATOR: vector = b"aptos_framework::object_code_deployment"; - - #[resource_group_member(group = aptos_framework::object::ObjectGroup)] - /// Internal struct, attached to the object, that holds Refs we need to manage the code deployment (i.e. upgrades). - struct ManagingRefs has key { - /// We need to keep the extend ref to be able to generate the signer to upgrade existing code. - extend_ref: ExtendRef, - } - - #[event] - /// Event emitted when code is published to an object. - struct Publish has drop, store { - object_address: address, - } - - #[event] - /// Event emitted when code in an existing object is upgraded. - struct Upgrade has drop, store { - object_address: address, - } - - #[event] - /// Event emitted when code in an existing object is made immutable. - struct Freeze has drop, store { - object_address: address, - } - - /// Creates a new object with a unique address derived from the publisher address and the object seed. - /// Publishes the code passed in the function to the newly created object. - /// The caller must provide package metadata describing the package via `metadata_serialized` and - /// the code to be published via `code`. This contains a vector of modules to be deployed on-chain. - public entry fun publish( - publisher: &signer, - metadata_serialized: vector, - code: vector>, - ) { - assert!( - features::is_object_code_deployment_enabled(), - error::unavailable(EOBJECT_CODE_DEPLOYMENT_NOT_SUPPORTED), - ); - - let publisher_address = signer::address_of(publisher); - let object_seed = object_seed(publisher_address); - let constructor_ref = &object::create_named_object(publisher, object_seed); - let code_signer = &object::generate_signer(constructor_ref); - code::publish_package_txn(code_signer, metadata_serialized, code); - - event::emit(Publish { object_address: signer::address_of(code_signer), }); - - move_to(code_signer, ManagingRefs { - extend_ref: object::generate_extend_ref(constructor_ref), - }); - } - - inline fun object_seed(publisher: address): vector { - let sequence_number = account::get_sequence_number(publisher) + 1; - let seeds = vector[]; - vector::append(&mut seeds, bcs::to_bytes(&OBJECT_CODE_DEPLOYMENT_DOMAIN_SEPARATOR)); - vector::append(&mut seeds, bcs::to_bytes(&sequence_number)); - seeds - } - - /// Upgrades the existing modules at the `code_object` address with the new modules passed in `code`, - /// along with the metadata `metadata_serialized`. - /// Note: If the modules were deployed as immutable when calling `publish`, the upgrade will fail. - /// Requires the publisher to be the owner of the `code_object`. - public entry fun upgrade( - publisher: &signer, - metadata_serialized: vector, - code: vector>, - code_object: Object, - ) acquires ManagingRefs { - let publisher_address = signer::address_of(publisher); - assert!( - object::is_owner(code_object, publisher_address), - error::permission_denied(ENOT_CODE_OBJECT_OWNER), - ); - - let code_object_address = object::object_address(&code_object); - assert!(exists(code_object_address), error::not_found(ECODE_OBJECT_DOES_NOT_EXIST)); - - let extend_ref = &borrow_global(code_object_address).extend_ref; - let code_signer = &object::generate_signer_for_extending(extend_ref); - code::publish_package_txn(code_signer, metadata_serialized, code); - - event::emit(Upgrade { object_address: signer::address_of(code_signer), }); - } - - /// Make an existing upgradable package immutable. Once this is called, the package cannot be made upgradable again. - /// Each `code_object` should only have one package, as one package is deployed per object in this module. - /// Requires the `publisher` to be the owner of the `code_object`. - public entry fun freeze_code_object(publisher: &signer, code_object: Object) { - code::freeze_code_object(publisher, code_object); - - event::emit(Freeze { object_address: object::object_address(&code_object), }); - } -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/optional_aggregator.move b/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/optional_aggregator.move deleted file mode 100644 index a5d979486..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/optional_aggregator.move +++ /dev/null @@ -1,286 +0,0 @@ -/// This module provides an interface to aggregate integers either via -/// aggregator (parallelizable) or via normal integers. -module aptos_framework::optional_aggregator { - use std::error; - use std::option::{Self, Option}; - - use aptos_framework::aggregator_factory; - use aptos_framework::aggregator::{Self, Aggregator}; - - friend aptos_framework::coin; - friend aptos_framework::fungible_asset; - - /// The value of aggregator underflows (goes below zero). Raised by native code. - const EAGGREGATOR_OVERFLOW: u64 = 1; - - /// Aggregator feature is not supported. Raised by native code. - const EAGGREGATOR_UNDERFLOW: u64 = 2; - - /// OptionalAggregator (Agg V1) switch not supported any more. - const ESWITCH_DEPRECATED: u64 = 3; - - const MAX_U128: u128 = 340282366920938463463374607431768211455; - - /// Wrapper around integer with a custom overflow limit. Supports add, subtract and read just like `Aggregator`. - struct Integer has store { - value: u128, - limit: u128, - } - - /// Creates a new integer which overflows on exceeding a `limit`. - fun new_integer(limit: u128): Integer { - Integer { - value: 0, - limit, - } - } - - /// Adds `value` to integer. Aborts on overflowing the limit. - fun add_integer(integer: &mut Integer, value: u128) { - assert!( - value <= (integer.limit - integer.value), - error::out_of_range(EAGGREGATOR_OVERFLOW) - ); - integer.value = integer.value + value; - } - - /// Subtracts `value` from integer. Aborts on going below zero. - fun sub_integer(integer: &mut Integer, value: u128) { - assert!(value <= integer.value, error::out_of_range(EAGGREGATOR_UNDERFLOW)); - integer.value = integer.value - value; - } - - /// Returns an overflow limit of integer. - fun limit(integer: &Integer): u128 { - integer.limit - } - - /// Returns a value stored in this integer. - fun read_integer(integer: &Integer): u128 { - integer.value - } - - /// Destroys an integer. - fun destroy_integer(integer: Integer) { - let Integer { value: _, limit: _ } = integer; - } - - /// Contains either an aggregator or a normal integer, both overflowing on limit. - struct OptionalAggregator has store { - // Parallelizable. - aggregator: Option, - // Non-parallelizable. - integer: Option, - } - - /// Creates a new optional aggregator. - public(friend) fun new(parallelizable: bool): OptionalAggregator { - if (parallelizable) { - OptionalAggregator { - aggregator: option::some(aggregator_factory::create_aggregator_internal()), - integer: option::none(), - } - } else { - OptionalAggregator { - aggregator: option::none(), - integer: option::some(new_integer(MAX_U128)), - } - } - } - - /// Switches between parallelizable and non-parallelizable implementations. - public fun switch(_optional_aggregator: &mut OptionalAggregator) { - abort error::invalid_state(ESWITCH_DEPRECATED) - } - - /// Destroys optional aggregator. - public fun destroy(optional_aggregator: OptionalAggregator) { - if (is_parallelizable(&optional_aggregator)) { - destroy_optional_aggregator(optional_aggregator); - } else { - destroy_optional_integer(optional_aggregator); - } - } - - /// Destroys parallelizable optional aggregator and returns its limit. - fun destroy_optional_aggregator(optional_aggregator: OptionalAggregator): u128 { - let OptionalAggregator { aggregator, integer } = optional_aggregator; - let limit = aggregator::limit(option::borrow(&aggregator)); - aggregator::destroy(option::destroy_some(aggregator)); - option::destroy_none(integer); - limit - } - - /// Destroys non-parallelizable optional aggregator and returns its limit. - fun destroy_optional_integer(optional_aggregator: OptionalAggregator): u128 { - let OptionalAggregator { aggregator, integer } = optional_aggregator; - let limit = limit(option::borrow(&integer)); - destroy_integer(option::destroy_some(integer)); - option::destroy_none(aggregator); - limit - } - - /// Adds `value` to optional aggregator, aborting on exceeding the `limit`. - public fun add(optional_aggregator: &mut OptionalAggregator, value: u128) { - if (option::is_some(&optional_aggregator.aggregator)) { - let aggregator = option::borrow_mut(&mut optional_aggregator.aggregator); - aggregator::add(aggregator, value); - } else { - let integer = option::borrow_mut(&mut optional_aggregator.integer); - add_integer(integer, value); - } - } - - /// Subtracts `value` from optional aggregator, aborting on going below zero. - public fun sub(optional_aggregator: &mut OptionalAggregator, value: u128) { - if (option::is_some(&optional_aggregator.aggregator)) { - let aggregator = option::borrow_mut(&mut optional_aggregator.aggregator); - aggregator::sub(aggregator, value); - } else { - let integer = option::borrow_mut(&mut optional_aggregator.integer); - sub_integer(integer, value); - } - } - - /// Returns the value stored in optional aggregator. - public fun read(optional_aggregator: &OptionalAggregator): u128 { - if (option::is_some(&optional_aggregator.aggregator)) { - let aggregator = option::borrow(&optional_aggregator.aggregator); - aggregator::read(aggregator) - } else { - let integer = option::borrow(&optional_aggregator.integer); - read_integer(integer) - } - } - - /// Returns true if optional aggregator uses parallelizable implementation. - public fun is_parallelizable(optional_aggregator: &OptionalAggregator): bool { - option::is_some(&optional_aggregator.aggregator) - } - - #[test(account = @aptos_framework)] - #[expected_failure(abort_code = 0x030003, location = Self)] - fun optional_aggregator_swith_fail_test(account: signer) { - aggregator_factory::initialize_aggregator_factory(&account); - let aggregator = new(true); - switch(&mut aggregator); - destroy(aggregator); - } - - #[test(account = @aptos_framework)] - fun optional_aggregator_test_integer(account: signer) { - aggregator_factory::initialize_aggregator_factory(&account); - - let aggregator = new(false); - assert!(!is_parallelizable(&aggregator), 0); - - add(&mut aggregator, 12); - add(&mut aggregator, 3); - assert!(read(&aggregator) == 15, 0); - - sub(&mut aggregator, 10); - assert!(read(&aggregator) == 5, 0); - - add(&mut aggregator, 12); - add(&mut aggregator, 3); - assert!(read(&aggregator) == 20, 0); - - sub(&mut aggregator, 10); - assert!(read(&aggregator) == 10, 0); - - destroy(aggregator); - } - - #[test(account = @aptos_framework)] - fun optional_aggregator_test_aggregator(account: signer) { - aggregator_factory::initialize_aggregator_factory(&account); - let aggregator = new(true); - assert!(is_parallelizable(&aggregator), 0); - - add(&mut aggregator, 12); - add(&mut aggregator, 3); - assert!(read(&aggregator) == 15, 0); - - sub(&mut aggregator, 10); - assert!(read(&aggregator) == 5, 0); - - add(&mut aggregator, 12); - add(&mut aggregator, 3); - assert!(read(&aggregator) == 20, 0); - - sub(&mut aggregator, 10); - assert!(read(&aggregator) == 10, 0); - - destroy(aggregator); - } - - #[test(account = @aptos_framework)] - fun optional_aggregator_destroy_test(account: signer) { - aggregator_factory::initialize_aggregator_factory(&account); - - let aggregator = new(false); - destroy(aggregator); - - let aggregator = new(true); - destroy(aggregator); - - let aggregator = new(false); - assert!(destroy_optional_integer(aggregator) == MAX_U128, 0); - - let aggregator = new(true); - assert!(destroy_optional_aggregator(aggregator) == MAX_U128, 0); - } - - #[test(account = @aptos_framework)] - #[expected_failure(abort_code = 0x020001, location = Self)] - fun non_parallelizable_aggregator_overflow_test(account: signer) { - aggregator_factory::initialize_aggregator_factory(&account); - let aggregator = new(false); - add(&mut aggregator, MAX_U128 - 15); - - // Overflow! - add(&mut aggregator, 16); - - destroy(aggregator); - } - - #[test(account = @aptos_framework)] - #[expected_failure(abort_code = 0x020002, location = Self)] - fun non_parallelizable_aggregator_underflow_test(account: signer) { - aggregator_factory::initialize_aggregator_factory(&account); - let aggregator = new(false); - - // Underflow! - sub(&mut aggregator, 100); - add(&mut aggregator, 100); - - destroy(aggregator); - } - - #[test(account = @aptos_framework)] - #[expected_failure(abort_code = 0x020001, location = aptos_framework::aggregator)] - fun parallelizable_aggregator_overflow_test(account: signer) { - aggregator_factory::initialize_aggregator_factory(&account); - let aggregator = new(true); - add(&mut aggregator, MAX_U128 - 15); - - // Overflow! - add(&mut aggregator, 16); - - destroy(aggregator); - } - - #[test(account = @aptos_framework)] - #[expected_failure(abort_code = 0x020002, location = aptos_framework::aggregator)] - fun parallelizable_aggregator_underflow_test(account: signer) { - aggregator_factory::initialize_aggregator_factory(&account); - let aggregator = new(true); - - // Underflow! - add(&mut aggregator, 99); - sub(&mut aggregator, 100); - add(&mut aggregator, 100); - - destroy(aggregator); - } -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/primary_fungible_store.move b/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/primary_fungible_store.move deleted file mode 100644 index 9e39b97fa..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/primary_fungible_store.move +++ /dev/null @@ -1,405 +0,0 @@ -/// This module provides a way for creators of fungible assets to enable support for creating primary (deterministic) -/// stores for their users. This is useful for assets that are meant to be used as a currency, as it allows users to -/// easily create a store for their account and deposit/withdraw/transfer fungible assets to/from it. -/// -/// The transfer flow works as below: -/// 1. The sender calls `transfer` on the fungible asset metadata object to transfer `amount` of fungible asset to -/// `recipient`. -/// 2. The fungible asset metadata object calls `ensure_primary_store_exists` to ensure that both the sender's and the -/// recipient's primary stores exist. If either doesn't, it will be created. -/// 3. The fungible asset metadata object calls `withdraw` on the sender's primary store to withdraw `amount` of -/// fungible asset from it. This emits a withdraw event. -/// 4. The fungible asset metadata object calls `deposit` on the recipient's primary store to deposit `amount` of -/// fungible asset to it. This emits an deposit event. -module aptos_framework::primary_fungible_store { - use aptos_framework::dispatchable_fungible_asset; - use aptos_framework::fungible_asset::{Self, FungibleAsset, FungibleStore, Metadata, MintRef, TransferRef, BurnRef}; - use aptos_framework::object::{Self, Object, ConstructorRef, DeriveRef}; - - use std::option::Option; - use std::signer; - use std::string::String; - - #[resource_group_member(group = aptos_framework::object::ObjectGroup)] - /// A resource that holds the derive ref for the fungible asset metadata object. This is used to create primary - /// stores for users with deterministic addresses so that users can easily deposit/withdraw/transfer fungible - /// assets. - struct DeriveRefPod has key { - metadata_derive_ref: DeriveRef, - } - - /// Create a fungible asset with primary store support. When users transfer fungible assets to each other, their - /// primary stores will be created automatically if they don't exist. Primary stores have deterministic addresses - /// so that users can easily deposit/withdraw/transfer fungible assets. - public fun create_primary_store_enabled_fungible_asset( - constructor_ref: &ConstructorRef, - maximum_supply: Option, - name: String, - symbol: String, - decimals: u8, - icon_uri: String, - project_uri: String, - ) { - fungible_asset::add_fungibility( - constructor_ref, - maximum_supply, - name, - symbol, - decimals, - icon_uri, - project_uri, - ); - let metadata_obj = &object::generate_signer(constructor_ref); - move_to(metadata_obj, DeriveRefPod { - metadata_derive_ref: object::generate_derive_ref(constructor_ref), - }); - } - - /// Ensure that the primary store object for the given address exists. If it doesn't, create it. - public fun ensure_primary_store_exists( - owner: address, - metadata: Object, - ): Object acquires DeriveRefPod { - let store_addr = primary_store_address(owner, metadata); - if (fungible_asset::store_exists(store_addr)) { - object::address_to_object(store_addr) - } else { - create_primary_store(owner, metadata) - } - } - - /// Create a primary store object to hold fungible asset for the given address. - public fun create_primary_store( - owner_addr: address, - metadata: Object, - ): Object acquires DeriveRefPod { - let metadata_addr = object::object_address(&metadata); - object::address_to_object(metadata_addr); - let derive_ref = &borrow_global(metadata_addr).metadata_derive_ref; - let constructor_ref = &object::create_user_derived_object(owner_addr, derive_ref); - // Disable ungated transfer as deterministic stores shouldn't be transferrable. - let transfer_ref = &object::generate_transfer_ref(constructor_ref); - object::disable_ungated_transfer(transfer_ref); - - fungible_asset::create_store(constructor_ref, metadata) - } - - #[view] - /// Get the address of the primary store for the given account. - public fun primary_store_address(owner: address, metadata: Object): address { - let metadata_addr = object::object_address(&metadata); - object::create_user_derived_object_address(owner, metadata_addr) - } - - #[view] - /// Get the primary store object for the given account. - public fun primary_store(owner: address, metadata: Object): Object { - let store = primary_store_address(owner, metadata); - object::address_to_object(store) - } - - #[view] - /// Return whether the given account's primary store exists. - public fun primary_store_exists(account: address, metadata: Object): bool { - fungible_asset::store_exists(primary_store_address(account, metadata)) - } - - /// Get the address of the primary store for the given account. - /// Use instead of the corresponding view functions for dispatchable hooks to avoid circular dependencies of modules. - public inline fun primary_store_address_inlined(owner: address, metadata: Object): address { - let metadata_addr = object::object_address(&metadata); - object::create_user_derived_object_address(owner, metadata_addr) - } - - /// Get the primary store object for the given account. - /// Use instead of the corresponding view functions for dispatchable hooks to avoid circular dependencies of modules. - public inline fun primary_store_inlined(owner: address, metadata: Object): Object { - let store = primary_store_address_inlined(owner, metadata); - object::address_to_object(store) - } - - /// Return whether the given account's primary store exists. - /// Use instead of the corresponding view functions for dispatchable hooks to avoid circular dependencies of modules. - public inline fun primary_store_exists_inlined(account: address, metadata: Object): bool { - fungible_asset::store_exists(primary_store_address_inlined(account, metadata)) - } - - #[view] - /// Get the balance of `account`'s primary store. - public fun balance(account: address, metadata: Object): u64 { - if (primary_store_exists(account, metadata)) { - fungible_asset::balance(primary_store(account, metadata)) - } else { - 0 - } - } - - #[view] - public fun is_balance_at_least(account: address, metadata: Object, amount: u64): bool { - if (primary_store_exists(account, metadata)) { - fungible_asset::is_balance_at_least(primary_store(account, metadata), amount) - } else { - amount == 0 - } - } - - #[view] - /// Return whether the given account's primary store is frozen. - public fun is_frozen(account: address, metadata: Object): bool { - if (primary_store_exists(account, metadata)) { - fungible_asset::is_frozen(primary_store(account, metadata)) - } else { - false - } - } - - /// Withdraw `amount` of fungible asset from the given account's primary store. - public fun withdraw(owner: &signer, metadata: Object, amount: u64): FungibleAsset acquires DeriveRefPod { - let store = ensure_primary_store_exists(signer::address_of(owner), metadata); - // Check if the store object has been burnt or not. If so, unburn it first. - may_be_unburn(owner, store); - dispatchable_fungible_asset::withdraw(owner, store, amount) - } - - /// Deposit fungible asset `fa` to the given account's primary store. - public fun deposit(owner: address, fa: FungibleAsset) acquires DeriveRefPod { - let metadata = fungible_asset::asset_metadata(&fa); - let store = ensure_primary_store_exists(owner, metadata); - dispatchable_fungible_asset::deposit(store, fa); - } - - /// Deposit fungible asset `fa` to the given account's primary store. - public(friend) fun force_deposit(owner: address, fa: FungibleAsset) acquires DeriveRefPod { - let metadata = fungible_asset::asset_metadata(&fa); - let store = ensure_primary_store_exists(owner, metadata); - fungible_asset::deposit_internal(object::object_address(&store), fa); - } - - /// Transfer `amount` of fungible asset from sender's primary store to receiver's primary store. - public entry fun transfer( - sender: &signer, - metadata: Object, - recipient: address, - amount: u64, - ) acquires DeriveRefPod { - let sender_store = ensure_primary_store_exists(signer::address_of(sender), metadata); - // Check if the sender store object has been burnt or not. If so, unburn it first. - may_be_unburn(sender, sender_store); - let recipient_store = ensure_primary_store_exists(recipient, metadata); - dispatchable_fungible_asset::transfer(sender, sender_store, recipient_store, amount); - } - - /// Transfer `amount` of fungible asset from sender's primary store to receiver's primary store. - /// Use the minimum deposit assertion api to make sure receipient will receive a minimum amount of fund. - public entry fun transfer_assert_minimum_deposit( - sender: &signer, - metadata: Object, - recipient: address, - amount: u64, - expected: u64, - ) acquires DeriveRefPod { - let sender_store = ensure_primary_store_exists(signer::address_of(sender), metadata); - // Check if the sender store object has been burnt or not. If so, unburn it first. - may_be_unburn(sender, sender_store); - let recipient_store = ensure_primary_store_exists(recipient, metadata); - dispatchable_fungible_asset::transfer_assert_minimum_deposit( - sender, - sender_store, - recipient_store, - amount, - expected - ); - } - - /// Mint to the primary store of `owner`. - public fun mint(mint_ref: &MintRef, owner: address, amount: u64) acquires DeriveRefPod { - let primary_store = ensure_primary_store_exists(owner, fungible_asset::mint_ref_metadata(mint_ref)); - fungible_asset::mint_to(mint_ref, primary_store, amount); - } - - /// Burn from the primary store of `owner`. - public fun burn(burn_ref: &BurnRef, owner: address, amount: u64) { - let primary_store = primary_store(owner, fungible_asset::burn_ref_metadata(burn_ref)); - fungible_asset::burn_from(burn_ref, primary_store, amount); - } - - /// Freeze/Unfreeze the primary store of `owner`. - public fun set_frozen_flag(transfer_ref: &TransferRef, owner: address, frozen: bool) acquires DeriveRefPod { - let primary_store = ensure_primary_store_exists(owner, fungible_asset::transfer_ref_metadata(transfer_ref)); - fungible_asset::set_frozen_flag(transfer_ref, primary_store, frozen); - } - - /// Withdraw from the primary store of `owner` ignoring frozen flag. - public fun withdraw_with_ref(transfer_ref: &TransferRef, owner: address, amount: u64): FungibleAsset { - let from_primary_store = primary_store(owner, fungible_asset::transfer_ref_metadata(transfer_ref)); - fungible_asset::withdraw_with_ref(transfer_ref, from_primary_store, amount) - } - - /// Deposit from the primary store of `owner` ignoring frozen flag. - public fun deposit_with_ref(transfer_ref: &TransferRef, owner: address, fa: FungibleAsset) acquires DeriveRefPod { - let from_primary_store = ensure_primary_store_exists( - owner, - fungible_asset::transfer_ref_metadata(transfer_ref) - ); - fungible_asset::deposit_with_ref(transfer_ref, from_primary_store, fa); - } - - /// Transfer `amount` of FA from the primary store of `from` to that of `to` ignoring frozen flag. - public fun transfer_with_ref( - transfer_ref: &TransferRef, - from: address, - to: address, - amount: u64 - ) acquires DeriveRefPod { - let from_primary_store = primary_store(from, fungible_asset::transfer_ref_metadata(transfer_ref)); - let to_primary_store = ensure_primary_store_exists(to, fungible_asset::transfer_ref_metadata(transfer_ref)); - fungible_asset::transfer_with_ref(transfer_ref, from_primary_store, to_primary_store, amount); - } - - fun may_be_unburn(owner: &signer, store: Object) { - if (object::is_burnt(store)) { - object::unburn(owner, store); - }; - } - - #[test_only] - use aptos_framework::fungible_asset::{ - create_test_token, - generate_mint_ref, - generate_burn_ref, - generate_transfer_ref - }; - #[test_only] - use std::string; - #[test_only] - use std::option; - - #[test_only] - public fun init_test_metadata_with_primary_store_enabled( - constructor_ref: &ConstructorRef - ): (MintRef, TransferRef, BurnRef) { - create_primary_store_enabled_fungible_asset( - constructor_ref, - option::some(100), // max supply - string::utf8(b"TEST COIN"), - string::utf8(b"@T"), - 0, - string::utf8(b"http://example.com/icon"), - string::utf8(b"http://example.com"), - ); - let mint_ref = generate_mint_ref(constructor_ref); - let burn_ref = generate_burn_ref(constructor_ref); - let transfer_ref = generate_transfer_ref(constructor_ref); - (mint_ref, transfer_ref, burn_ref) - } - - #[test(creator = @0xcafe, aaron = @0xface)] - fun test_default_behavior(creator: &signer, aaron: &signer) acquires DeriveRefPod { - let (creator_ref, metadata) = create_test_token(creator); - init_test_metadata_with_primary_store_enabled(&creator_ref); - let creator_address = signer::address_of(creator); - let aaron_address = signer::address_of(aaron); - assert!(!primary_store_exists(creator_address, metadata), 1); - assert!(!primary_store_exists(aaron_address, metadata), 2); - assert!(balance(creator_address, metadata) == 0, 3); - assert!(balance(aaron_address, metadata) == 0, 4); - assert!(!is_frozen(creator_address, metadata), 5); - assert!(!is_frozen(aaron_address, metadata), 6); - ensure_primary_store_exists(creator_address, metadata); - ensure_primary_store_exists(aaron_address, metadata); - assert!(primary_store_exists(creator_address, metadata), 7); - assert!(primary_store_exists(aaron_address, metadata), 8); - } - - #[test(creator = @0xcafe, aaron = @0xface)] - fun test_basic_flow( - creator: &signer, - aaron: &signer, - ) acquires DeriveRefPod { - let (creator_ref, metadata) = create_test_token(creator); - let (mint_ref, transfer_ref, burn_ref) = init_test_metadata_with_primary_store_enabled(&creator_ref); - let creator_address = signer::address_of(creator); - let aaron_address = signer::address_of(aaron); - assert!(balance(creator_address, metadata) == 0, 1); - assert!(balance(aaron_address, metadata) == 0, 2); - mint(&mint_ref, creator_address, 100); - transfer(creator, metadata, aaron_address, 80); - let fa = withdraw(aaron, metadata, 10); - deposit(creator_address, fa); - assert!(balance(creator_address, metadata) == 30, 3); - assert!(balance(aaron_address, metadata) == 70, 4); - set_frozen_flag(&transfer_ref, aaron_address, true); - assert!(is_frozen(aaron_address, metadata), 5); - let fa = withdraw_with_ref(&transfer_ref, aaron_address, 30); - deposit_with_ref(&transfer_ref, aaron_address, fa); - transfer_with_ref(&transfer_ref, aaron_address, creator_address, 20); - set_frozen_flag(&transfer_ref, aaron_address, false); - assert!(!is_frozen(aaron_address, metadata), 6); - burn(&burn_ref, aaron_address, 50); - assert!(balance(aaron_address, metadata) == 0, 7); - } - - #[test(creator = @0xcafe, aaron = @0xface)] - fun test_basic_flow_with_min_balance( - creator: &signer, - aaron: &signer, - ) acquires DeriveRefPod { - let (creator_ref, metadata) = create_test_token(creator); - let (mint_ref, _transfer_ref, _) = init_test_metadata_with_primary_store_enabled(&creator_ref); - let creator_address = signer::address_of(creator); - let aaron_address = signer::address_of(aaron); - assert!(balance(creator_address, metadata) == 0, 1); - assert!(balance(aaron_address, metadata) == 0, 2); - mint(&mint_ref, creator_address, 100); - transfer_assert_minimum_deposit(creator, metadata, aaron_address, 80, 80); - let fa = withdraw(aaron, metadata, 10); - deposit(creator_address, fa); - assert!(balance(creator_address, metadata) == 30, 3); - assert!(balance(aaron_address, metadata) == 70, 4); - } - - #[test(user_1 = @0xcafe, user_2 = @0xface)] - fun test_transfer_to_burnt_store( - user_1: &signer, - user_2: &signer, - ) acquires DeriveRefPod { - let (creator_ref, metadata) = create_test_token(user_1); - let (mint_ref, _, _) = init_test_metadata_with_primary_store_enabled(&creator_ref); - let user_1_address = signer::address_of(user_1); - let user_2_address = signer::address_of(user_2); - mint(&mint_ref, user_1_address, 100); - transfer(user_1, metadata, user_2_address, 80); - - // User 2 burns their primary store but should still be able to transfer afterward. - let user_2_primary_store = primary_store(user_2_address, metadata); - object::burn_object(user_2, user_2_primary_store); - assert!(object::is_burnt(user_2_primary_store), 0); - // Balance still works - assert!(balance(user_2_address, metadata) == 80, 0); - // Deposit still works - transfer(user_1, metadata, user_2_address, 20); - transfer(user_2, metadata, user_1_address, 90); - assert!(balance(user_2_address, metadata) == 10, 0); - } - - #[test(user_1 = @0xcafe, user_2 = @0xface)] - fun test_withdraw_from_burnt_store( - user_1: &signer, - user_2: &signer, - ) acquires DeriveRefPod { - let (creator_ref, metadata) = create_test_token(user_1); - let (mint_ref, _, _) = init_test_metadata_with_primary_store_enabled(&creator_ref); - let user_1_address = signer::address_of(user_1); - let user_2_address = signer::address_of(user_2); - mint(&mint_ref, user_1_address, 100); - transfer(user_1, metadata, user_2_address, 80); - - // User 2 burns their primary store but should still be able to withdraw afterward. - let user_2_primary_store = primary_store(user_2_address, metadata); - object::burn_object(user_2, user_2_primary_store); - assert!(object::is_burnt(user_2_primary_store), 0); - let coins = withdraw(user_2, metadata, 70); - assert!(balance(user_2_address, metadata) == 10, 0); - deposit(user_2_address, coins); - } -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/randomness.move b/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/randomness.move deleted file mode 100644 index cde8328e6..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/randomness.move +++ /dev/null @@ -1,574 +0,0 @@ -/// This module provides access to *instant* secure randomness generated by the Aptos validators, as documented in -/// [AIP-41](https://github.com/aptos-foundation/AIPs/blob/main/aips/aip-41.md). -/// -/// Secure randomness means (1) the randomness cannot be predicted ahead of time by validators, developers or users -/// and (2) the randomness cannot be biased in any way by validators, developers or users. -/// -/// Security holds under the same proof-of-stake assumption that secures the Aptos network. -module aptos_framework::randomness { - use std::hash; - use std::option; - use std::option::Option; - use std::vector; - use aptos_framework::event; - use aptos_framework::system_addresses; - use aptos_framework::transaction_context; - #[test_only] - use aptos_std::debug; - #[test_only] - use aptos_std::table_with_length; - - friend aptos_framework::block; - - const DST: vector = b"APTOS_RANDOMNESS"; - - /// Randomness APIs calls must originate from a private entry function with - /// `#[randomness]` annotation. Otherwise, malicious users can bias randomness result. - const E_API_USE_IS_BIASIBLE: u64 = 1; - - const MAX_U256: u256 = 115792089237316195423570985008687907853269984665640564039457584007913129639935; - - /// 32-byte randomness seed unique to every block. - /// This resource is updated in every block prologue. - struct PerBlockRandomness has drop, key { - epoch: u64, - round: u64, - seed: Option>, - } - - #[event] - /// Event emitted every time a public randomness API in this module is called. - struct RandomnessGeneratedEvent has store, drop { - } - - /// Called in genesis.move. - /// Must be called in tests to initialize the `PerBlockRandomness` resource. - public fun initialize(framework: &signer) { - system_addresses::assert_aptos_framework(framework); - if (!exists(@aptos_framework)) { - move_to(framework, PerBlockRandomness { - epoch: 0, - round: 0, - seed: option::none(), - }); - } - } - - #[test_only] - public fun initialize_for_testing(framework: &signer) acquires PerBlockRandomness { - initialize(framework); - set_seed(x"0000000000000000000000000000000000000000000000000000000000000000"); - } - - /// Invoked in block prologues to update the block-level randomness seed. - public(friend) fun on_new_block(vm: &signer, epoch: u64, round: u64, seed_for_new_block: Option>) acquires PerBlockRandomness { - system_addresses::assert_vm(vm); - if (exists(@aptos_framework)) { - let randomness = borrow_global_mut(@aptos_framework); - randomness.epoch = epoch; - randomness.round = round; - randomness.seed = seed_for_new_block; - } - } - - /// Generate the next 32 random bytes. Repeated calls will yield different results (assuming the collision-resistance - /// of the hash function). - fun next_32_bytes(): vector acquires PerBlockRandomness { - assert!(is_unbiasable(), E_API_USE_IS_BIASIBLE); - - let input = DST; - let randomness = borrow_global(@aptos_framework); - let seed = *option::borrow(&randomness.seed); - - vector::append(&mut input, seed); - vector::append(&mut input, transaction_context::get_transaction_hash()); - vector::append(&mut input, fetch_and_increment_txn_counter()); - hash::sha3_256(input) - } - - /// Generates a sequence of bytes uniformly at random - public fun bytes(n: u64): vector acquires PerBlockRandomness { - let v = vector[]; - let c = 0; - while (c < n) { - let blob = next_32_bytes(); - vector::reverse_append(&mut v, blob); - - c = c + 32; - }; - - if (c > n) { - vector::trim(&mut v, n); - }; - - event::emit(RandomnessGeneratedEvent {}); - - v - } - - /// Generates an u8 uniformly at random. - public fun u8_integer(): u8 acquires PerBlockRandomness { - let raw = next_32_bytes(); - let ret: u8 = vector::pop_back(&mut raw); - - event::emit(RandomnessGeneratedEvent {}); - - ret - } - - /// Generates an u16 uniformly at random. - public fun u16_integer(): u16 acquires PerBlockRandomness { - let raw = next_32_bytes(); - let i = 0; - let ret: u16 = 0; - while (i < 2) { - ret = ret * 256 + (vector::pop_back(&mut raw) as u16); - i = i + 1; - }; - - event::emit(RandomnessGeneratedEvent {}); - - ret - } - - /// Generates an u32 uniformly at random. - public fun u32_integer(): u32 acquires PerBlockRandomness { - let raw = next_32_bytes(); - let i = 0; - let ret: u32 = 0; - while (i < 4) { - ret = ret * 256 + (vector::pop_back(&mut raw) as u32); - i = i + 1; - }; - - event::emit(RandomnessGeneratedEvent {}); - - ret - } - - /// Generates an u64 uniformly at random. - public fun u64_integer(): u64 acquires PerBlockRandomness { - let raw = next_32_bytes(); - let i = 0; - let ret: u64 = 0; - while (i < 8) { - ret = ret * 256 + (vector::pop_back(&mut raw) as u64); - i = i + 1; - }; - - event::emit(RandomnessGeneratedEvent {}); - - ret - } - - /// Generates an u128 uniformly at random. - public fun u128_integer(): u128 acquires PerBlockRandomness { - let raw = next_32_bytes(); - let i = 0; - let ret: u128 = 0; - while (i < 16) { - ret = ret * 256 + (vector::pop_back(&mut raw) as u128); - i = i + 1; - }; - - event::emit(RandomnessGeneratedEvent {}); - - ret - } - - /// Generates a u256 uniformly at random. - public fun u256_integer(): u256 acquires PerBlockRandomness { - event::emit(RandomnessGeneratedEvent {}); - u256_integer_internal() - } - - /// Generates a u256 uniformly at random. - fun u256_integer_internal(): u256 acquires PerBlockRandomness { - let raw = next_32_bytes(); - let i = 0; - let ret: u256 = 0; - while (i < 32) { - ret = ret * 256 + (vector::pop_back(&mut raw) as u256); - i = i + 1; - }; - ret - } - - /// Generates a number $n \in [min_incl, max_excl)$ uniformly at random. - /// - /// NOTE: The uniformity is not perfect, but it can be proved that the bias is negligible. - /// If you need perfect uniformity, consider implement your own via rejection sampling. - public fun u8_range(min_incl: u8, max_excl: u8): u8 acquires PerBlockRandomness { - let range = ((max_excl - min_incl) as u256); - let sample = ((u256_integer_internal() % range) as u8); - - event::emit(RandomnessGeneratedEvent {}); - - min_incl + sample - } - - /// Generates a number $n \in [min_incl, max_excl)$ uniformly at random. - /// - /// NOTE: The uniformity is not perfect, but it can be proved that the bias is negligible. - /// If you need perfect uniformity, consider implement your own via rejection sampling. - public fun u16_range(min_incl: u16, max_excl: u16): u16 acquires PerBlockRandomness { - let range = ((max_excl - min_incl) as u256); - let sample = ((u256_integer_internal() % range) as u16); - - event::emit(RandomnessGeneratedEvent {}); - - min_incl + sample - } - - /// Generates a number $n \in [min_incl, max_excl)$ uniformly at random. - /// - /// NOTE: The uniformity is not perfect, but it can be proved that the bias is negligible. - /// If you need perfect uniformity, consider implement your own via rejection sampling. - public fun u32_range(min_incl: u32, max_excl: u32): u32 acquires PerBlockRandomness { - let range = ((max_excl - min_incl) as u256); - let sample = ((u256_integer_internal() % range) as u32); - - event::emit(RandomnessGeneratedEvent {}); - - min_incl + sample - } - - /// Generates a number $n \in [min_incl, max_excl)$ uniformly at random. - /// - /// NOTE: The uniformity is not perfect, but it can be proved that the bias is negligible. - /// If you need perfect uniformity, consider implement your own via rejection sampling. - public fun u64_range(min_incl: u64, max_excl: u64): u64 acquires PerBlockRandomness { - event::emit(RandomnessGeneratedEvent {}); - - u64_range_internal(min_incl, max_excl) - } - - public fun u64_range_internal(min_incl: u64, max_excl: u64): u64 acquires PerBlockRandomness { - let range = ((max_excl - min_incl) as u256); - let sample = ((u256_integer_internal() % range) as u64); - - min_incl + sample - } - - /// Generates a number $n \in [min_incl, max_excl)$ uniformly at random. - /// - /// NOTE: The uniformity is not perfect, but it can be proved that the bias is negligible. - /// If you need perfect uniformity, consider implement your own via rejection sampling. - public fun u128_range(min_incl: u128, max_excl: u128): u128 acquires PerBlockRandomness { - let range = ((max_excl - min_incl) as u256); - let sample = ((u256_integer_internal() % range) as u128); - - event::emit(RandomnessGeneratedEvent {}); - - min_incl + sample - } - - /// Generates a number $n \in [min_incl, max_excl)$ uniformly at random. - /// - /// NOTE: The uniformity is not perfect, but it can be proved that the bias is negligible. - /// If you need perfect uniformity, consider implement your own with `u256_integer()` + rejection sampling. - public fun u256_range(min_incl: u256, max_excl: u256): u256 acquires PerBlockRandomness { - let range = max_excl - min_incl; - let r0 = u256_integer_internal(); - let r1 = u256_integer_internal(); - - // Will compute sample := (r0 + r1*2^256) % range. - - let sample = r1 % range; - let i = 0; - while ({ - spec { - invariant sample >= 0 && sample < max_excl - min_incl; - }; - i < 256 - }) { - sample = safe_add_mod(sample, sample, range); - i = i + 1; - }; - - let sample = safe_add_mod(sample, r0 % range, range); - spec { - assert sample >= 0 && sample < max_excl - min_incl; - }; - - event::emit(RandomnessGeneratedEvent {}); - - min_incl + sample - } - - /// Generate a permutation of `[0, 1, ..., n-1]` uniformly at random. - /// If n is 0, returns the empty vector. - public fun permutation(n: u64): vector acquires PerBlockRandomness { - event::emit(RandomnessGeneratedEvent {}); - - let values = vector[]; - - if(n == 0) { - return vector[] - }; - - // Initialize into [0, 1, ..., n-1]. - let i = 0; - while ({ - spec { - invariant i <= n; - invariant len(values) == i; - }; - i < n - }) { - std::vector::push_back(&mut values, i); - i = i + 1; - }; - spec { - assert len(values) == n; - }; - - // Shuffle. - let tail = n - 1; - while ({ - spec { - invariant tail >= 0 && tail < len(values); - }; - tail > 0 - }) { - let pop_position = u64_range_internal(0, tail + 1); - spec { - assert pop_position < len(values); - }; - std::vector::swap(&mut values, pop_position, tail); - tail = tail - 1; - }; - - values - } - - #[test_only] - public fun set_seed(seed: vector) acquires PerBlockRandomness { - assert!(vector::length(&seed) == 32, 0); - let randomness = borrow_global_mut(@aptos_framework); - randomness.seed = option::some(seed); - } - - /// Compute `(a + b) % m`, assuming `m >= 1, 0 <= a < m, 0<= b < m`. - fun safe_add_mod(a: u256, b: u256, m: u256): u256 { - let a_clone = a; - let neg_b = m - b; - let a_less = a < neg_b; - take_first(if (a_less) { a + b } else { a_clone - neg_b }, if (!a_less) { a_clone - neg_b } else { a + b }) - } - - fun take_first(x: u256, _y: u256 ): u256 { x } - - #[verify_only] - fun safe_add_mod_for_verification(a: u256, b: u256, m: u256): u256 { - let neg_b = m - b; - if (a < neg_b) { - a + b - } else { - a - neg_b - } - } - - /// Fetches and increments a transaction-specific 32-byte randomness-related counter. - /// Aborts with `E_API_USE_SUSCEPTIBLE_TO_TEST_AND_ABORT` if randomness is not unbiasable. - native fun fetch_and_increment_txn_counter(): vector; - - /// Called in each randomness generation function to ensure certain safety invariants, namely: - /// 1. The transaction that led to the call of this function had a private (or friend) entry - /// function as its payload. - /// 2. The entry function had `#[randomness]` annotation. - native fun is_unbiasable(): bool; - - #[test] - fun test_safe_add_mod() { - assert!(2 == safe_add_mod(3, 4, 5), 1); - assert!(2 == safe_add_mod(4, 3, 5), 1); - assert!(7 == safe_add_mod(3, 4, 9), 1); - assert!(7 == safe_add_mod(4, 3, 9), 1); - assert!(0xfffffffffffffffffffffffffffffffffffffffffffffffe == safe_add_mod(0xfffffffffffffffffffffffffffffffffffffffffffffffd, 0x000000000000000000000000000000000000000000000001, 0xffffffffffffffffffffffffffffffffffffffffffffffff), 1); - assert!(0xfffffffffffffffffffffffffffffffffffffffffffffffe == safe_add_mod(0x000000000000000000000000000000000000000000000001, 0xfffffffffffffffffffffffffffffffffffffffffffffffd, 0xffffffffffffffffffffffffffffffffffffffffffffffff), 1); - assert!(0x000000000000000000000000000000000000000000000000 == safe_add_mod(0xfffffffffffffffffffffffffffffffffffffffffffffffd, 0x000000000000000000000000000000000000000000000002, 0xffffffffffffffffffffffffffffffffffffffffffffffff), 1); - assert!(0x000000000000000000000000000000000000000000000000 == safe_add_mod(0x000000000000000000000000000000000000000000000002, 0xfffffffffffffffffffffffffffffffffffffffffffffffd, 0xffffffffffffffffffffffffffffffffffffffffffffffff), 1); - assert!(0x000000000000000000000000000000000000000000000001 == safe_add_mod(0xfffffffffffffffffffffffffffffffffffffffffffffffd, 0x000000000000000000000000000000000000000000000003, 0xffffffffffffffffffffffffffffffffffffffffffffffff), 1); - assert!(0x000000000000000000000000000000000000000000000001 == safe_add_mod(0x000000000000000000000000000000000000000000000003, 0xfffffffffffffffffffffffffffffffffffffffffffffffd, 0xffffffffffffffffffffffffffffffffffffffffffffffff), 1); - assert!(0xfffffffffffffffffffffffffffffffffffffffffffffffd == safe_add_mod(0xfffffffffffffffffffffffffffffffffffffffffffffffe, 0xfffffffffffffffffffffffffffffffffffffffffffffffe, 0xffffffffffffffffffffffffffffffffffffffffffffffff), 1); - } - - #[test(fx = @aptos_framework)] - fun randomness_smoke_test(fx: signer) acquires PerBlockRandomness { - initialize(&fx); - set_seed(x"0000000000000000000000000000000000000000000000000000000000000000"); - // Test cases should always have no bias for any randomness call. - assert!(is_unbiasable(), 0); - let num = u64_integer(); - debug::print(&num); - } - - #[test_only] - fun assert_event_count_equals(count: u64) { - let events = event::emitted_events(); - assert!(vector::length(&events) == count, 0); - } - - #[test(fx = @aptos_framework)] - fun test_emit_events(fx: signer) acquires PerBlockRandomness { - initialize_for_testing(&fx); - - let c = 0; - assert_event_count_equals(c); - - let _ = bytes(1); - c = c + 1; - assert_event_count_equals(c); - - let _ = u8_integer(); - c = c + 1; - assert_event_count_equals(c); - - let _ = u16_integer(); - c = c + 1; - assert_event_count_equals(c); - - let _ = u32_integer(); - c = c + 1; - assert_event_count_equals(c); - - let _ = u64_integer(); - c = c + 1; - assert_event_count_equals(c); - - let _ = u128_integer(); - c = c + 1; - assert_event_count_equals(c); - - let _ = u256_integer(); - c = c + 1; - assert_event_count_equals(c); - - let _ = u8_range(0, 255); - c = c + 1; - assert_event_count_equals(c); - - let _ = u16_range(0, 255); - c = c + 1; - assert_event_count_equals(c); - - let _ = u32_range(0, 255); - c = c + 1; - assert_event_count_equals(c); - - let _ = u64_range(0, 255); - c = c + 1; - assert_event_count_equals(c); - - let _ = u128_range(0, 255); - c = c + 1; - assert_event_count_equals(c); - - let _ = u256_range(0, 255); - c = c + 1; - assert_event_count_equals(c); - - let _ = permutation(6); - c = c + 1; - assert_event_count_equals(c); - } - - #[test(fx = @aptos_framework)] - fun test_bytes(fx: signer) acquires PerBlockRandomness { - initialize_for_testing(&fx); - - let v = bytes(0); - assert!(vector::length(&v) == 0, 0); - - let v = bytes(1); - assert!(vector::length(&v) == 1, 0); - let v = bytes(2); - assert!(vector::length(&v) == 2, 0); - let v = bytes(3); - assert!(vector::length(&v) == 3, 0); - let v = bytes(4); - assert!(vector::length(&v) == 4, 0); - let v = bytes(30); - assert!(vector::length(&v) == 30, 0); - let v = bytes(31); - assert!(vector::length(&v) == 31, 0); - let v = bytes(32); - assert!(vector::length(&v) == 32, 0); - - let v = bytes(33); - assert!(vector::length(&v) == 33, 0); - let v = bytes(50); - assert!(vector::length(&v) == 50, 0); - let v = bytes(63); - assert!(vector::length(&v) == 63, 0); - let v = bytes(64); - assert!(vector::length(&v) == 64, 0); - } - - #[test_only] - fun is_permutation(v: &vector): bool { - let present = vector[]; - - // Mark all elements from 0 to n-1 as not present - let n = vector::length(v); - for (i in 0..n) { - vector::push_back(&mut present, false); - }; - - for (i in 0..n) { - let e = vector::borrow(v, i); - let bit = vector::borrow_mut(&mut present, *e); - *bit = true; - }; - - for (i in 0..n) { - let bit = vector::borrow(&present, i); - if(*bit == false) { - return false - }; - }; - - true - } - - #[test(fx = @aptos_framework)] - fun test_permutation(fx: signer) acquires PerBlockRandomness { - initialize_for_testing(&fx); - - let v = permutation(0); - assert!(vector::length(&v) == 0, 0); - - test_permutation_internal(1); - test_permutation_internal(2); - test_permutation_internal(3); - test_permutation_internal(4); - } - - #[test_only] - /// WARNING: Do not call this with a large `size`, since execution time will be \Omega(size!), where ! is the factorial - /// operator. - fun test_permutation_internal(size: u64) acquires PerBlockRandomness { - let num_permutations = 1; - let c = 1; - for (i in 0..size) { - num_permutations = num_permutations * c; - c = c + 1; - }; - - let permutations = table_with_length::new, bool>(); - - // This loop will not exit until all permutations are created - while(table_with_length::length(&permutations) < num_permutations) { - let v = permutation(size); - assert!(vector::length(&v) == size, 0); - assert!(is_permutation(&v), 0); - - if(table_with_length::contains(&permutations, v) == false) { - table_with_length::add(&mut permutations, v, true); - } - }; - - table_with_length::drop_unchecked(permutations); - } -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/randomness_api_v0_config.move b/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/randomness_api_v0_config.move deleted file mode 100644 index 28466211d..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/randomness_api_v0_config.move +++ /dev/null @@ -1,57 +0,0 @@ -module aptos_framework::randomness_api_v0_config { - use std::option::Option; - use aptos_framework::chain_status; - use aptos_framework::config_buffer; - use aptos_framework::system_addresses; - friend aptos_framework::reconfiguration_with_dkg; - - struct RequiredGasDeposit has key, drop, store { - gas_amount: Option, - } - - /// If this flag is set, `max_gas` specified inside `#[randomness()]` will be used as the required deposit. - struct AllowCustomMaxGasFlag has key, drop, store { - value: bool, - } - - /// Only used in genesis. - fun initialize(framework: &signer, required_amount: RequiredGasDeposit, allow_custom_max_gas_flag: AllowCustomMaxGasFlag) { - system_addresses::assert_aptos_framework(framework); - chain_status::assert_genesis(); - move_to(framework, required_amount); - move_to(framework, allow_custom_max_gas_flag); - } - - /// This can be called by on-chain governance to update `RequiredGasDeposit` for the next epoch. - public fun set_for_next_epoch(framework: &signer, gas_amount: Option) { - system_addresses::assert_aptos_framework(framework); - config_buffer::upsert(RequiredGasDeposit { gas_amount }); - } - - /// This can be called by on-chain governance to update `AllowCustomMaxGasFlag` for the next epoch. - public fun set_allow_max_gas_flag_for_next_epoch(framework: &signer, value: bool) { - system_addresses::assert_aptos_framework(framework); - config_buffer::upsert(AllowCustomMaxGasFlag { value } ); - } - - /// Only used in reconfigurations to apply the pending `RequiredGasDeposit`, if there is any. - public fun on_new_epoch(framework: &signer) acquires RequiredGasDeposit, AllowCustomMaxGasFlag { - system_addresses::assert_aptos_framework(framework); - if (config_buffer::does_exist()) { - let new_config = config_buffer::extract(); - if (exists(@aptos_framework)) { - *borrow_global_mut(@aptos_framework) = new_config; - } else { - move_to(framework, new_config); - } - }; - if (config_buffer::does_exist()) { - let new_config = config_buffer::extract(); - if (exists(@aptos_framework)) { - *borrow_global_mut(@aptos_framework) = new_config; - } else { - move_to(framework, new_config); - } - } - } -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/randomness_config.move b/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/randomness_config.move deleted file mode 100644 index 24916393e..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/randomness_config.move +++ /dev/null @@ -1,153 +0,0 @@ -/// Structs and functions for on-chain randomness configurations. -module aptos_framework::randomness_config { - use std::string; - use aptos_std::copyable_any; - use aptos_std::copyable_any::Any; - use aptos_std::fixed_point64::FixedPoint64; - use aptos_framework::config_buffer; - use aptos_framework::system_addresses; - - friend aptos_framework::reconfiguration_with_dkg; - - const EINVALID_CONFIG_VARIANT: u64 = 1; - - /// The configuration of the on-chain randomness feature. - struct RandomnessConfig has copy, drop, key, store { - /// A config variant packed as an `Any`. - /// Currently the variant type is one of the following. - /// - `ConfigOff` - /// - `ConfigV1` - variant: Any, - } - - /// A randomness config variant indicating the feature is disabled. - struct ConfigOff has copy, drop, store {} - - /// A randomness config variant indicating the feature is enabled. - struct ConfigV1 has copy, drop, store { - /// Any validator subset should not be able to reconstruct randomness if `subset_power / total_power <= secrecy_threshold`, - secrecy_threshold: FixedPoint64, - /// Any validator subset should be able to reconstruct randomness if `subset_power / total_power > reconstruction_threshold`. - reconstruction_threshold: FixedPoint64, - } - - /// A randomness config variant indicating the feature is enabled with fast path. - struct ConfigV2 has copy, drop, store { - /// Any validator subset should not be able to reconstruct randomness if `subset_power / total_power <= secrecy_threshold`, - secrecy_threshold: FixedPoint64, - /// Any validator subset should be able to reconstruct randomness if `subset_power / total_power > reconstruction_threshold`. - reconstruction_threshold: FixedPoint64, - /// Any validator subset should not be able to reconstruct randomness via the fast path if `subset_power / total_power <= fast_path_secrecy_threshold`, - fast_path_secrecy_threshold: FixedPoint64, - } - - /// Initialize the configuration. Used in genesis or governance. - public fun initialize(framework: &signer, config: RandomnessConfig) { - system_addresses::assert_aptos_framework(framework); - if (!exists(@aptos_framework)) { - move_to(framework, config) - } - } - - /// This can be called by on-chain governance to update on-chain consensus configs for the next epoch. - public fun set_for_next_epoch(framework: &signer, new_config: RandomnessConfig) { - system_addresses::assert_aptos_framework(framework); - config_buffer::upsert(new_config); - } - - /// Only used in reconfigurations to apply the pending `RandomnessConfig`, if there is any. - public(friend) fun on_new_epoch(framework: &signer) acquires RandomnessConfig { - system_addresses::assert_aptos_framework(framework); - if (config_buffer::does_exist()) { - let new_config = config_buffer::extract(); - if (exists(@aptos_framework)) { - *borrow_global_mut(@aptos_framework) = new_config; - } else { - move_to(framework, new_config); - } - } - } - - /// Check whether on-chain randomness main logic (e.g., `DKGManager`, `RandManager`, `BlockMetadataExt`) is enabled. - /// - /// NOTE: this returning true does not mean randomness will run. - /// The feature works if and only if `consensus_config::validator_txn_enabled() && randomness_config::enabled()`. - public fun enabled(): bool acquires RandomnessConfig { - if (exists(@aptos_framework)) { - let config = borrow_global(@aptos_framework); - let variant_type_name = *string::bytes(copyable_any::type_name(&config.variant)); - variant_type_name != b"0x1::randomness_config::ConfigOff" - } else { - false - } - } - - /// Create a `ConfigOff` variant. - public fun new_off(): RandomnessConfig { - RandomnessConfig { - variant: copyable_any::pack( ConfigOff {} ) - } - } - - /// Create a `ConfigV1` variant. - public fun new_v1(secrecy_threshold: FixedPoint64, reconstruction_threshold: FixedPoint64): RandomnessConfig { - RandomnessConfig { - variant: copyable_any::pack( ConfigV1 { - secrecy_threshold, - reconstruction_threshold - } ) - } - } - - /// Create a `ConfigV2` variant. - public fun new_v2( - secrecy_threshold: FixedPoint64, - reconstruction_threshold: FixedPoint64, - fast_path_secrecy_threshold: FixedPoint64, - ): RandomnessConfig { - RandomnessConfig { - variant: copyable_any::pack( ConfigV2 { - secrecy_threshold, - reconstruction_threshold, - fast_path_secrecy_threshold, - } ) - } - } - - /// Get the currently effective randomness configuration object. - public fun current(): RandomnessConfig acquires RandomnessConfig { - if (exists(@aptos_framework)) { - *borrow_global(@aptos_framework) - } else { - new_off() - } - } - - #[test_only] - use aptos_std::fixed_point64; - - #[test_only] - fun initialize_for_testing(framework: &signer) { - config_buffer::initialize(framework); - initialize(framework, new_off()); - } - - #[test(framework = @0x1)] - fun init_buffer_apply(framework: signer) acquires RandomnessConfig { - initialize_for_testing(&framework); - - // Enabling. - let config = new_v1( - fixed_point64::create_from_rational(1, 2), - fixed_point64::create_from_rational(2, 3) - ); - set_for_next_epoch(&framework, config); - on_new_epoch(&framework); - assert!(enabled(), 1); - - // Disabling. - set_for_next_epoch(&framework, new_off()); - on_new_epoch(&framework); - assert!(!enabled(), 2); - } -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/randomness_config_seqnum.move b/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/randomness_config_seqnum.move deleted file mode 100644 index 174b7fdda..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/randomness_config_seqnum.move +++ /dev/null @@ -1,49 +0,0 @@ -/// Randomness stall recovery utils. -/// -/// When randomness generation is stuck due to a bug, the chain is also stuck. Below is the recovery procedure. -/// 1. Ensure more than 2/3 stakes are stuck at the same version. -/// 1. Every validator restarts with `randomness_override_seq_num` set to `X+1` in the node config file, -/// where `X` is the current `RandomnessConfigSeqNum` on chain. -/// 1. The chain should then be unblocked. -/// 1. Once the bug is fixed and the binary + framework have been patched, -/// a governance proposal is needed to set `RandomnessConfigSeqNum` to be `X+2`. -module aptos_framework::randomness_config_seqnum { - use aptos_framework::config_buffer; - use aptos_framework::system_addresses; - - friend aptos_framework::reconfiguration_with_dkg; - - /// If this seqnum is smaller than a validator local override, the on-chain `RandomnessConfig` will be ignored. - /// Useful in a chain recovery from randomness stall. - struct RandomnessConfigSeqNum has drop, key, store { - seq_num: u64, - } - - /// Update `RandomnessConfigSeqNum`. - /// Used when re-enable randomness after an emergency randomness disable via local override. - public fun set_for_next_epoch(framework: &signer, seq_num: u64) { - system_addresses::assert_aptos_framework(framework); - config_buffer::upsert(RandomnessConfigSeqNum { seq_num }); - } - - /// Initialize the configuration. Used in genesis or governance. - public fun initialize(framework: &signer) { - system_addresses::assert_aptos_framework(framework); - if (!exists(@aptos_framework)) { - move_to(framework, RandomnessConfigSeqNum { seq_num: 0 }) - } - } - - /// Only used in reconfigurations to apply the pending `RandomnessConfig`, if there is any. - public(friend) fun on_new_epoch(framework: &signer) acquires RandomnessConfigSeqNum { - system_addresses::assert_aptos_framework(framework); - if (config_buffer::does_exist()) { - let new_config = config_buffer::extract(); - if (exists(@aptos_framework)) { - *borrow_global_mut(@aptos_framework) = new_config; - } else { - move_to(framework, new_config); - } - } - } -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/reconfiguration.move b/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/reconfiguration.move deleted file mode 100644 index 6bf02a1d1..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/reconfiguration.move +++ /dev/null @@ -1,222 +0,0 @@ -/// Publishes configuration information for validators, and issues reconfiguration events -/// to synchronize configuration changes for the validators. -module aptos_framework::reconfiguration { - use std::error; - use std::features; - use std::signer; - - use aptos_framework::account; - use aptos_framework::event; - use aptos_framework::stake; - use aptos_framework::system_addresses; - use aptos_framework::timestamp; - use aptos_framework::chain_status; - use aptos_framework::reconfiguration_state; - use aptos_framework::storage_gas; - - friend aptos_framework::aptos_governance; - friend aptos_framework::block; - friend aptos_framework::consensus_config; - friend aptos_framework::execution_config; - friend aptos_framework::gas_schedule; - friend aptos_framework::genesis; - friend aptos_framework::version; - friend aptos_framework::reconfiguration_with_dkg; - - #[event] - /// Event that signals consensus to start a new epoch, - /// with new configuration information. This is also called a - /// "reconfiguration event" - struct NewEpochEvent has drop, store { - epoch: u64, - } - - #[event] - /// Event that signals consensus to start a new epoch, - /// with new configuration information. This is also called a - /// "reconfiguration event" - struct NewEpoch has drop, store { - epoch: u64, - } - - /// Holds information about state of reconfiguration - struct Configuration has key { - /// Epoch number - epoch: u64, - /// Time of last reconfiguration. Only changes on reconfiguration events. - last_reconfiguration_time: u64, - /// Event handle for reconfiguration events - events: event::EventHandle, - } - - /// Reconfiguration will be disabled if this resource is published under the - /// aptos_framework system address - struct DisableReconfiguration has key {} - - /// The `Configuration` resource is in an invalid state - const ECONFIGURATION: u64 = 1; - /// A `Reconfiguration` resource is in an invalid state - const ECONFIG: u64 = 2; - /// A `ModifyConfigCapability` is in a different state than was expected - const EMODIFY_CAPABILITY: u64 = 3; - /// An invalid block time was encountered. - const EINVALID_BLOCK_TIME: u64 = 4; - /// An invalid block time was encountered. - const EINVALID_GUID_FOR_EVENT: u64 = 5; - - /// Only called during genesis. - /// Publishes `Configuration` resource. Can only be invoked by aptos framework account, and only a single time in Genesis. - public(friend) fun initialize(aptos_framework: &signer) { - system_addresses::assert_aptos_framework(aptos_framework); - - // assert it matches `new_epoch_event_key()`, otherwise the event can't be recognized - assert!(account::get_guid_next_creation_num(signer::address_of(aptos_framework)) == 2, error::invalid_state(EINVALID_GUID_FOR_EVENT)); - move_to( - aptos_framework, - Configuration { - epoch: 0, - last_reconfiguration_time: 0, - events: account::new_event_handle(aptos_framework), - } - ); - } - - /// Private function to temporarily halt reconfiguration. - /// This function should only be used for offline WriteSet generation purpose and should never be invoked on chain. - fun disable_reconfiguration(aptos_framework: &signer) { - system_addresses::assert_aptos_framework(aptos_framework); - assert!(reconfiguration_enabled(), error::invalid_state(ECONFIGURATION)); - move_to(aptos_framework, DisableReconfiguration {}) - } - - /// Private function to resume reconfiguration. - /// This function should only be used for offline WriteSet generation purpose and should never be invoked on chain. - fun enable_reconfiguration(aptos_framework: &signer) acquires DisableReconfiguration { - system_addresses::assert_aptos_framework(aptos_framework); - - assert!(!reconfiguration_enabled(), error::invalid_state(ECONFIGURATION)); - DisableReconfiguration {} = move_from(signer::address_of(aptos_framework)); - } - - fun reconfiguration_enabled(): bool { - !exists(@aptos_framework) - } - - /// Signal validators to start using new configuration. Must be called from friend config modules. - public(friend) fun reconfigure() acquires Configuration { - // Do not do anything if genesis has not finished. - if (chain_status::is_genesis() || timestamp::now_microseconds() == 0 || !reconfiguration_enabled()) { - return - }; - - let config_ref = borrow_global_mut(@aptos_framework); - let current_time = timestamp::now_microseconds(); - - // Do not do anything if a reconfiguration event is already emitted within this transaction. - // - // This is OK because: - // - The time changes in every non-empty block - // - A block automatically ends after a transaction that emits a reconfiguration event, which is guaranteed by - // VM spec that all transactions comming after a reconfiguration transaction will be returned as Retry - // status. - // - Each transaction must emit at most one reconfiguration event - // - // Thus, this check ensures that a transaction that does multiple "reconfiguration required" actions emits only - // one reconfiguration event. - // - if (current_time == config_ref.last_reconfiguration_time) { - return - }; - - reconfiguration_state::on_reconfig_start(); - - // Call stake to compute the new validator set and distribute rewards and transaction fees. - stake::on_new_epoch(); - storage_gas::on_reconfig(); - - assert!(current_time > config_ref.last_reconfiguration_time, error::invalid_state(EINVALID_BLOCK_TIME)); - config_ref.last_reconfiguration_time = current_time; - spec { - assume config_ref.epoch + 1 <= MAX_U64; - }; - config_ref.epoch = config_ref.epoch + 1; - - if (std::features::module_event_migration_enabled()) { - event::emit( - NewEpoch { - epoch: config_ref.epoch, - }, - ); - }; - event::emit_event( - &mut config_ref.events, - NewEpochEvent { - epoch: config_ref.epoch, - }, - ); - - reconfiguration_state::on_reconfig_finish(); - } - - public fun last_reconfiguration_time(): u64 acquires Configuration { - borrow_global(@aptos_framework).last_reconfiguration_time - } - - public fun current_epoch(): u64 acquires Configuration { - borrow_global(@aptos_framework).epoch - } - - /// Emit a `NewEpochEvent` event. This function will be invoked by genesis directly to generate the very first - /// reconfiguration event. - fun emit_genesis_reconfiguration_event() acquires Configuration { - let config_ref = borrow_global_mut(@aptos_framework); - assert!(config_ref.epoch == 0 && config_ref.last_reconfiguration_time == 0, error::invalid_state(ECONFIGURATION)); - config_ref.epoch = 1; - - if (std::features::module_event_migration_enabled()) { - event::emit( - NewEpoch { - epoch: config_ref.epoch, - }, - ); - }; - event::emit_event( - &mut config_ref.events, - NewEpochEvent { - epoch: config_ref.epoch, - }, - ); - } - - // For tests, skips the guid validation. - #[test_only] - public fun initialize_for_test(account: &signer) { - system_addresses::assert_aptos_framework(account); - move_to( - account, - Configuration { - epoch: 0, - last_reconfiguration_time: 0, - events: account::new_event_handle(account), - } - ); - } - - #[test_only] - public fun reconfigure_for_test() acquires Configuration { - reconfigure(); - } - - // This is used together with stake::end_epoch() for testing with last_reconfiguration_time - // It must be called each time an epoch changes - #[test_only] - public fun reconfigure_for_test_custom() acquires Configuration { - let config_ref = borrow_global_mut(@aptos_framework); - let current_time = timestamp::now_microseconds(); - if (current_time == config_ref.last_reconfiguration_time) { - return - }; - config_ref.last_reconfiguration_time = current_time; - config_ref.epoch = config_ref.epoch + 1; - } -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/reconfiguration_state.move b/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/reconfiguration_state.move deleted file mode 100644 index 4818dd2a1..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/reconfiguration_state.move +++ /dev/null @@ -1,132 +0,0 @@ -/// Reconfiguration meta-state resources and util functions. -/// -/// WARNING: `reconfiguration_state::initialize()` is required before `RECONFIGURE_WITH_DKG` can be enabled. -module aptos_framework::reconfiguration_state { - use std::error; - use std::string; - use aptos_std::copyable_any; - use aptos_std::copyable_any::Any; - use aptos_framework::system_addresses; - use aptos_framework::timestamp; - - friend aptos_framework::reconfiguration; - friend aptos_framework::reconfiguration_with_dkg; - friend aptos_framework::stake; - - const ERECONFIG_NOT_IN_PROGRESS: u64 = 1; - - /// Reconfiguration drivers update this resources to notify other modules of some reconfiguration state. - struct State has key { - /// The state variant packed as an `Any`. - /// Currently the variant type is one of the following. - /// - `ReconfigStateInactive` - /// - `ReconfigStateActive` - variant: Any, - } - - /// A state variant indicating no reconfiguration is in progress. - struct StateInactive has copy, drop, store {} - - /// A state variant indicating a reconfiguration is in progress. - struct StateActive has copy, drop, store { - start_time_secs: u64, - } - - public fun is_initialized(): bool { - exists(@aptos_framework) - } - - public fun initialize(fx: &signer) { - system_addresses::assert_aptos_framework(fx); - if (!exists(@aptos_framework)) { - move_to(fx, State { - variant: copyable_any::pack(StateInactive {}) - }) - } - } - - public fun initialize_for_testing(fx: &signer) { - initialize(fx) - } - - /// Return whether the reconfiguration state is marked "in progress". - public(friend) fun is_in_progress(): bool acquires State { - if (!exists(@aptos_framework)) { - return false - }; - - let state = borrow_global(@aptos_framework); - let variant_type_name = *string::bytes(copyable_any::type_name(&state.variant)); - variant_type_name == b"0x1::reconfiguration_state::StateActive" - } - - /// Called at the beginning of a reconfiguration (either immediate or async) - /// to mark the reconfiguration state "in progress" if it is currently "stopped". - /// - /// Also record the current time as the reconfiguration start time. (Some module, e.g., `stake.move`, needs this info). - public(friend) fun on_reconfig_start() acquires State { - if (exists(@aptos_framework)) { - let state = borrow_global_mut(@aptos_framework); - let variant_type_name = *string::bytes(copyable_any::type_name(&state.variant)); - if (variant_type_name == b"0x1::reconfiguration_state::StateInactive") { - state.variant = copyable_any::pack(StateActive { - start_time_secs: timestamp::now_seconds() - }); - } - }; - } - - /// Get the unix time when the currently in-progress reconfiguration started. - /// Abort if the reconfiguration state is not "in progress". - public(friend) fun start_time_secs(): u64 acquires State { - let state = borrow_global(@aptos_framework); - let variant_type_name = *string::bytes(copyable_any::type_name(&state.variant)); - if (variant_type_name == b"0x1::reconfiguration_state::StateActive") { - let active = copyable_any::unpack(state.variant); - active.start_time_secs - } else { - abort(error::invalid_state(ERECONFIG_NOT_IN_PROGRESS)) - } - } - - /// Called at the end of every reconfiguration to mark the state as "stopped". - /// Abort if the current state is not "in progress". - public(friend) fun on_reconfig_finish() acquires State { - if (exists(@aptos_framework)) { - let state = borrow_global_mut(@aptos_framework); - let variant_type_name = *string::bytes(copyable_any::type_name(&state.variant)); - if (variant_type_name == b"0x1::reconfiguration_state::StateActive") { - state.variant = copyable_any::pack(StateInactive {}); - } else { - abort(error::invalid_state(ERECONFIG_NOT_IN_PROGRESS)) - } - } - } - - #[test(fx = @aptos_framework)] - fun basic(fx: &signer) acquires State { - // Setip. - timestamp::set_time_has_started_for_testing(fx); - initialize(fx); - - // Initially no reconfig is in progress. - assert!(!is_in_progress(), 1); - - // "try_start" should work. - timestamp::fast_forward_seconds(123); - on_reconfig_start(); - assert!(is_in_progress(), 1); - assert!(123 == start_time_secs(), 1); - - // Redundant `try_start` should be no-op. - timestamp::fast_forward_seconds(1); - on_reconfig_start(); - assert!(is_in_progress(), 1); - assert!(123 == start_time_secs(), 1); - - // A `finish` call should work when the state is marked "in progess". - timestamp::fast_forward_seconds(10); - on_reconfig_finish(); - assert!(!is_in_progress(), 1); - } -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/reconfiguration_with_dkg.move b/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/reconfiguration_with_dkg.move deleted file mode 100644 index 1357c4edb..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/reconfiguration_with_dkg.move +++ /dev/null @@ -1,69 +0,0 @@ -/// Reconfiguration with DKG helper functions. -module aptos_framework::reconfiguration_with_dkg { - use std::features; - use std::option; - use aptos_framework::consensus_config; - use aptos_framework::dkg; - use aptos_framework::execution_config; - use aptos_framework::gas_schedule; - use aptos_framework::jwk_consensus_config; - use aptos_framework::jwks; - use aptos_framework::keyless_account; - use aptos_framework::randomness_api_v0_config; - use aptos_framework::randomness_config; - use aptos_framework::randomness_config_seqnum; - use aptos_framework::reconfiguration; - use aptos_framework::reconfiguration_state; - use aptos_framework::stake; - use aptos_framework::system_addresses; - friend aptos_framework::block; - friend aptos_framework::aptos_governance; - - /// Trigger a reconfiguration with DKG. - /// Do nothing if one is already in progress. - public(friend) fun try_start() { - let incomplete_dkg_session = dkg::incomplete_session(); - if (option::is_some(&incomplete_dkg_session)) { - let session = option::borrow(&incomplete_dkg_session); - if (dkg::session_dealer_epoch(session) == reconfiguration::current_epoch()) { - return - } - }; - reconfiguration_state::on_reconfig_start(); - let cur_epoch = reconfiguration::current_epoch(); - dkg::start( - cur_epoch, - randomness_config::current(), - stake::cur_validator_consensus_infos(), - stake::next_validator_consensus_infos(), - ); - } - - /// Clear incomplete DKG session, if it exists. - /// Apply buffered on-chain configs (except for ValidatorSet, which is done inside `reconfiguration::reconfigure()`). - /// Re-enable validator set changes. - /// Run the default reconfiguration to enter the new epoch. - public(friend) fun finish(framework: &signer) { - system_addresses::assert_aptos_framework(framework); - dkg::try_clear_incomplete_session(framework); - consensus_config::on_new_epoch(framework); - execution_config::on_new_epoch(framework); - gas_schedule::on_new_epoch(framework); - std::version::on_new_epoch(framework); - features::on_new_epoch(framework); - jwk_consensus_config::on_new_epoch(framework); - jwks::on_new_epoch(framework); - keyless_account::on_new_epoch(framework); - randomness_config_seqnum::on_new_epoch(framework); - randomness_config::on_new_epoch(framework); - randomness_api_v0_config::on_new_epoch(framework); - reconfiguration::reconfigure(); - } - - /// Complete the current reconfiguration with DKG. - /// Abort if no DKG is in progress. - fun finish_with_dkg_result(account: &signer, dkg_result: vector) { - dkg::finish(dkg_result); - finish(account); - } -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/resource_account.move b/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/resource_account.move deleted file mode 100644 index 26ee8123e..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/resource_account.move +++ /dev/null @@ -1,267 +0,0 @@ -/// A resource account is used to manage resources independent of an account managed by a user. -/// This contains several utilities to make using resource accounts more effective. -/// -/// ## Resource Accounts to manage liquidity pools -/// -/// A dev wishing to use resource accounts for a liquidity pool, would likely do the following: -/// -/// 1. Create a new account using `resource_account::create_resource_account`. This creates the -/// account, stores the `signer_cap` within a `resource_account::Container`, and rotates the key to -/// the current account's authentication key or a provided authentication key. -/// 2. Define the liquidity pool module's address to be the same as the resource account. -/// 3. Construct a package-publishing transaction for the resource account using the -/// authentication key used in step 1. -/// 4. In the liquidity pool module's `init_module` function, call `retrieve_resource_account_cap` -/// which will retrieve the `signer_cap` and rotate the resource account's authentication key to -/// `0x0`, effectively locking it off. -/// 5. When adding a new coin, the liquidity pool will load the capability and hence the `signer` to -/// register and store new `LiquidityCoin` resources. -/// -/// Code snippets to help: -/// -/// ``` -/// fun init_module(resource_account: &signer) { -/// let dev_address = @DEV_ADDR; -/// let signer_cap = retrieve_resource_account_cap(resource_account, dev_address); -/// let lp = LiquidityPoolInfo { signer_cap: signer_cap, ... }; -/// move_to(resource_account, lp); -/// } -/// ``` -/// -/// Later on during a coin registration: -/// ``` -/// public fun add_coin(lp: &LP, x: Coin, y: Coin) { -/// if(!exists(LP::Address(lp), LiquidityCoin)) { -/// let mint, burn = Coin::initialize>(...); -/// move_to(&create_signer_with_capability(&lp.cap), LiquidityCoin{ mint, burn }); -/// } -/// ... -/// } -/// ``` -/// ## Resource accounts to manage an account for module publishing (i.e., contract account) -/// -/// A dev wishes to have an account dedicated to managing a contract. The contract itself does not -/// require signer post initialization. The dev could do the following: -/// 1. Create a new account using `resource_account::create_resource_account_and_publish_package`. -/// This creates the account and publishes the package for that account. -/// 2. At a later point in time, the account creator can move the signer capability to the module. -/// -/// ``` -/// struct MyModuleResource has key { -/// ... -/// resource_signer_cap: Option, -/// } -/// -/// public fun provide_signer_capability(resource_signer_cap: SignerCapability) { -/// let account_addr = account::get_signer_capability_address(resource_signer_cap); -/// let resource_addr = type_info::account_address(&type_info::type_of()); -/// assert!(account_addr == resource_addr, EADDRESS_MISMATCH); -/// let module = borrow_global_mut(account_addr); -/// module.resource_signer_cap = option::some(resource_signer_cap); -/// } -/// ``` -module aptos_framework::resource_account { - use std::error; - use std::signer; - use std::vector; - use aptos_framework::account; - use aptos_framework::aptos_coin::AptosCoin; - use aptos_framework::coin; - use aptos_std::simple_map::{Self, SimpleMap}; - - /// Container resource not found in account - const ECONTAINER_NOT_PUBLISHED: u64 = 1; - /// The resource account was not created by the specified source account - const EUNAUTHORIZED_NOT_OWNER: u64 = 2; - - const ZERO_AUTH_KEY: vector = x"0000000000000000000000000000000000000000000000000000000000000000"; - - struct Container has key { - store: SimpleMap, - } - - /// Creates a new resource account and rotates the authentication key to either - /// the optional auth key if it is non-empty (though auth keys are 32-bytes) - /// or the source accounts current auth key. - public entry fun create_resource_account( - origin: &signer, - seed: vector, - optional_auth_key: vector, - ) acquires Container { - let (resource, resource_signer_cap) = account::create_resource_account(origin, seed); - rotate_account_authentication_key_and_store_capability( - origin, - resource, - resource_signer_cap, - optional_auth_key, - ); - } - - /// Creates a new resource account, transfer the amount of coins from the origin to the resource - /// account, and rotates the authentication key to either the optional auth key if it is - /// non-empty (though auth keys are 32-bytes) or the source accounts current auth key. Note, - /// this function adds additional resource ownership to the resource account and should only be - /// used for resource accounts that need access to `Coin`. - public entry fun create_resource_account_and_fund( - origin: &signer, - seed: vector, - optional_auth_key: vector, - fund_amount: u64, - ) acquires Container { - let (resource, resource_signer_cap) = account::create_resource_account(origin, seed); - coin::register(&resource); - coin::transfer(origin, signer::address_of(&resource), fund_amount); - rotate_account_authentication_key_and_store_capability( - origin, - resource, - resource_signer_cap, - optional_auth_key, - ); - } - - /// Creates a new resource account, publishes the package under this account transaction under - /// this account and leaves the signer cap readily available for pickup. - public entry fun create_resource_account_and_publish_package( - origin: &signer, - seed: vector, - metadata_serialized: vector, - code: vector>, - ) acquires Container { - let (resource, resource_signer_cap) = account::create_resource_account(origin, seed); - aptos_framework::code::publish_package_txn(&resource, metadata_serialized, code); - rotate_account_authentication_key_and_store_capability( - origin, - resource, - resource_signer_cap, - ZERO_AUTH_KEY, - ); - } - - fun rotate_account_authentication_key_and_store_capability( - origin: &signer, - resource: signer, - resource_signer_cap: account::SignerCapability, - optional_auth_key: vector, - ) acquires Container { - let origin_addr = signer::address_of(origin); - if (!exists(origin_addr)) { - move_to(origin, Container { store: simple_map::create() }) - }; - - let container = borrow_global_mut(origin_addr); - let resource_addr = signer::address_of(&resource); - simple_map::add(&mut container.store, resource_addr, resource_signer_cap); - - let auth_key = if (vector::is_empty(&optional_auth_key)) { - account::get_authentication_key(origin_addr) - } else { - optional_auth_key - }; - account::rotate_authentication_key_internal(&resource, auth_key); - } - - /// When called by the resource account, it will retrieve the capability associated with that - /// account and rotate the account's auth key to 0x0 making the account inaccessible without - /// the SignerCapability. - public fun retrieve_resource_account_cap( - resource: &signer, - source_addr: address, - ): account::SignerCapability acquires Container { - assert!(exists(source_addr), error::not_found(ECONTAINER_NOT_PUBLISHED)); - - let resource_addr = signer::address_of(resource); - let (resource_signer_cap, empty_container) = { - let container = borrow_global_mut(source_addr); - assert!( - simple_map::contains_key(&container.store, &resource_addr), - error::invalid_argument(EUNAUTHORIZED_NOT_OWNER) - ); - let (_resource_addr, signer_cap) = simple_map::remove(&mut container.store, &resource_addr); - (signer_cap, simple_map::length(&container.store) == 0) - }; - - if (empty_container) { - let container = move_from(source_addr); - let Container { store } = container; - simple_map::destroy_empty(store); - }; - - account::rotate_authentication_key_internal(resource, ZERO_AUTH_KEY); - resource_signer_cap - } - - #[test(user = @0x1111)] - public entry fun test_create_account_and_retrieve_cap(user: signer) acquires Container { - let user_addr = signer::address_of(&user); - account::create_account(user_addr); - - let seed = x"01"; - - create_resource_account(&user, copy seed, vector::empty()); - let container = borrow_global(user_addr); - - let resource_addr = aptos_framework::account::create_resource_address(&user_addr, seed); - let resource_cap = simple_map::borrow(&container.store, &resource_addr); - - let resource = account::create_signer_with_capability(resource_cap); - let _resource_cap = retrieve_resource_account_cap(&resource, user_addr); - } - - #[test(user = @0x1111)] - #[expected_failure(abort_code = 0x10002, location = aptos_std::simple_map)] - public entry fun test_create_account_and_retrieve_cap_resource_address_does_not_exist( - user: signer - ) acquires Container { - let user_addr = signer::address_of(&user); - account::create_account(user_addr); - - let seed = x"01"; - let seed2 = x"02"; - - create_resource_account(&user, seed2, vector::empty()); - let container = borrow_global(user_addr); - - let resource_addr = account::create_resource_address(&user_addr, seed); - let resource_cap = simple_map::borrow(&container.store, &resource_addr); - - let resource = account::create_signer_with_capability(resource_cap); - let _resource_cap = retrieve_resource_account_cap(&resource, user_addr); - } - - #[test(framework = @0x1, user = @0x1234)] - public entry fun with_coin(framework: signer, user: signer) acquires Container { - let user_addr = signer::address_of(&user); - let (burn, mint) = aptos_framework::aptos_coin::initialize_for_test(&framework); - aptos_framework::aptos_account::create_account(copy user_addr); - - let coin = coin::mint(100, &mint); - coin::deposit(copy user_addr, coin); - - let seed = x"01"; - create_resource_account_and_fund(&user, copy seed, vector::empty(), 10); - - let resource_addr = aptos_framework::account::create_resource_address(&user_addr, seed); - coin::transfer(&user, resource_addr, 10); - - coin::destroy_burn_cap(burn); - coin::destroy_mint_cap(mint); - } - - #[test(framework = @0x1, user = @0x2345)] - #[expected_failure(abort_code = 0x60005, location = aptos_framework::coin)] - public entry fun without_coin(framework: signer, user: signer) acquires Container { - let user_addr = signer::address_of(&user); - let (burn, mint) = aptos_framework::aptos_coin::initialize_for_test(&framework); - aptos_framework::aptos_account::create_account(user_addr); - - let seed = x"01"; - create_resource_account(&user, copy seed, vector::empty()); - - let resource_addr = aptos_framework::account::create_resource_address(&user_addr, seed); - let coin = coin::mint(100, &mint); - coin::deposit(resource_addr, coin); - - coin::destroy_burn_cap(burn); - coin::destroy_mint_cap(mint); - } -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/stake.move b/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/stake.move deleted file mode 100644 index 9dd84dee9..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/stake.move +++ /dev/null @@ -1,3185 +0,0 @@ -/// -/// Validator lifecycle: -/// 1. Prepare a validator node set up and call stake::initialize_validator -/// 2. Once ready to deposit stake (or have funds assigned by a staking service in exchange for ownership capability), -/// call stake::add_stake (or *_with_cap versions if called from the staking service) -/// 3. Call stake::join_validator_set (or _with_cap version) to join the active validator set. Changes are effective in -/// the next epoch. -/// 4. Validate and gain rewards. The stake will automatically be locked up for a fixed duration (set by governance) and -/// automatically renewed at expiration. -/// 5. At any point, if the validator operator wants to update the consensus key or network/fullnode addresses, they can -/// call stake::rotate_consensus_key and stake::update_network_and_fullnode_addresses. Similar to changes to stake, the -/// changes to consensus key/network/fullnode addresses are only effective in the next epoch. -/// 6. Validator can request to unlock their stake at any time. However, their stake will only become withdrawable when -/// their current lockup expires. This can be at most as long as the fixed lockup duration. -/// 7. After exiting, the validator can either explicitly leave the validator set by calling stake::leave_validator_set -/// or if their stake drops below the min required, they would get removed at the end of the epoch. -/// 8. Validator can always rejoin the validator set by going through steps 2-3 again. -/// 9. An owner can always switch operators by calling stake::set_operator. -/// 10. An owner can always switch designated voter by calling stake::set_designated_voter. -module aptos_framework::stake { - use std::error; - use std::features; - use std::option::{Self, Option}; - use std::signer; - use std::vector; - use aptos_std::bls12381; - use aptos_std::math64::min; - use aptos_std::table::Table; - use aptos_framework::aptos_coin::AptosCoin; - use aptos_framework::account; - use aptos_framework::coin::{Self, Coin, MintCapability}; - use aptos_framework::event::{Self, EventHandle}; - use aptos_framework::timestamp; - use aptos_framework::system_addresses; - use aptos_framework::staking_config::{Self, StakingConfig, StakingRewardsConfig}; - use aptos_framework::chain_status; - - friend aptos_framework::block; - friend aptos_framework::genesis; - friend aptos_framework::reconfiguration; - friend aptos_framework::reconfiguration_with_dkg; - friend aptos_framework::transaction_fee; - - /// Validator Config not published. - const EVALIDATOR_CONFIG: u64 = 1; - /// Not enough stake to join validator set. - const ESTAKE_TOO_LOW: u64 = 2; - /// Too much stake to join validator set. - const ESTAKE_TOO_HIGH: u64 = 3; - /// Account is already a validator or pending validator. - const EALREADY_ACTIVE_VALIDATOR: u64 = 4; - /// Account is not a validator. - const ENOT_VALIDATOR: u64 = 5; - /// Can't remove last validator. - const ELAST_VALIDATOR: u64 = 6; - /// Total stake exceeds maximum allowed. - const ESTAKE_EXCEEDS_MAX: u64 = 7; - /// Account is already registered as a validator candidate. - const EALREADY_REGISTERED: u64 = 8; - /// Account does not have the right operator capability. - const ENOT_OPERATOR: u64 = 9; - /// Validators cannot join or leave post genesis on this test network. - const ENO_POST_GENESIS_VALIDATOR_SET_CHANGE_ALLOWED: u64 = 10; - /// Invalid consensus public key - const EINVALID_PUBLIC_KEY: u64 = 11; - /// Validator set exceeds the limit - const EVALIDATOR_SET_TOO_LARGE: u64 = 12; - /// Voting power increase has exceeded the limit for this current epoch. - const EVOTING_POWER_INCREASE_EXCEEDS_LIMIT: u64 = 13; - /// Stake pool does not exist at the provided pool address. - const ESTAKE_POOL_DOES_NOT_EXIST: u64 = 14; - /// Owner capability does not exist at the provided account. - const EOWNER_CAP_NOT_FOUND: u64 = 15; - /// An account cannot own more than one owner capability. - const EOWNER_CAP_ALREADY_EXISTS: u64 = 16; - /// Validator is not defined in the ACL of entities allowed to be validators - const EINELIGIBLE_VALIDATOR: u64 = 17; - /// Cannot update stake pool's lockup to earlier than current lockup. - const EINVALID_LOCKUP: u64 = 18; - /// Table to store collected transaction fees for each validator already exists. - const EFEES_TABLE_ALREADY_EXISTS: u64 = 19; - /// Validator set change temporarily disabled because of in-progress reconfiguration. Please retry after 1 minute. - const ERECONFIGURATION_IN_PROGRESS: u64 = 20; - - /// Validator status enum. We can switch to proper enum later once Move supports it. - const VALIDATOR_STATUS_PENDING_ACTIVE: u64 = 1; - const VALIDATOR_STATUS_ACTIVE: u64 = 2; - const VALIDATOR_STATUS_PENDING_INACTIVE: u64 = 3; - const VALIDATOR_STATUS_INACTIVE: u64 = 4; - - /// Limit the maximum size to u16::max, it's the current limit of the bitvec - /// https://github.com/aptos-labs/aptos-core/blob/main/crates/aptos-bitvec/src/lib.rs#L20 - const MAX_VALIDATOR_SET_SIZE: u64 = 65536; - - /// Limit the maximum value of `rewards_rate` in order to avoid any arithmetic overflow. - const MAX_REWARDS_RATE: u64 = 1000000; - - const MAX_U64: u128 = 18446744073709551615; - - /// Capability that represents ownership and can be used to control the validator and the associated stake pool. - /// Having this be separate from the signer for the account that the validator resources are hosted at allows - /// modules to have control over a validator. - struct OwnerCapability has key, store { - pool_address: address, - } - - /// Each validator has a separate StakePool resource and can provide a stake. - /// Changes in stake for an active validator: - /// 1. If a validator calls add_stake, the newly added stake is moved to pending_active. - /// 2. If validator calls unlock, their stake is moved to pending_inactive. - /// 2. When the next epoch starts, any pending_inactive stake is moved to inactive and can be withdrawn. - /// Any pending_active stake is moved to active and adds to the validator's voting power. - /// - /// Changes in stake for an inactive validator: - /// 1. If a validator calls add_stake, the newly added stake is moved directly to active. - /// 2. If validator calls unlock, their stake is moved directly to inactive. - /// 3. When the next epoch starts, the validator can be activated if their active stake is more than the minimum. - struct StakePool has key { - // active stake - active: Coin, - // inactive stake, can be withdrawn - inactive: Coin, - // pending activation for next epoch - pending_active: Coin, - // pending deactivation for next epoch - pending_inactive: Coin, - locked_until_secs: u64, - // Track the current operator of the validator node. - // This allows the operator to be different from the original account and allow for separation of - // the validator operations and ownership. - // Only the account holding OwnerCapability of the staking pool can update this. - operator_address: address, - - // Track the current vote delegator of the staking pool. - // Only the account holding OwnerCapability of the staking pool can update this. - delegated_voter: address, - - // The events emitted for the entire StakePool's lifecycle. - initialize_validator_events: EventHandle, - set_operator_events: EventHandle, - add_stake_events: EventHandle, - reactivate_stake_events: EventHandle, - rotate_consensus_key_events: EventHandle, - update_network_and_fullnode_addresses_events: EventHandle, - increase_lockup_events: EventHandle, - join_validator_set_events: EventHandle, - distribute_rewards_events: EventHandle, - unlock_stake_events: EventHandle, - withdraw_stake_events: EventHandle, - leave_validator_set_events: EventHandle, - } - - /// Validator info stored in validator address. - struct ValidatorConfig has key, copy, store, drop { - consensus_pubkey: vector, - network_addresses: vector, - // to make it compatible with previous definition, remove later - fullnode_addresses: vector, - // Index in the active set if the validator corresponding to this stake pool is active. - validator_index: u64, - } - - /// Consensus information per validator, stored in ValidatorSet. - struct ValidatorInfo has copy, store, drop { - addr: address, - voting_power: u64, - config: ValidatorConfig, - } - - /// Full ValidatorSet, stored in @aptos_framework. - /// 1. join_validator_set adds to pending_active queue. - /// 2. leave_valdiator_set moves from active to pending_inactive queue. - /// 3. on_new_epoch processes two pending queues and refresh ValidatorInfo from the owner's address. - struct ValidatorSet has copy, key, drop, store { - consensus_scheme: u8, - // Active validators for the current epoch. - active_validators: vector, - // Pending validators to leave in next epoch (still active). - pending_inactive: vector, - // Pending validators to join in next epoch. - pending_active: vector, - // Current total voting power. - total_voting_power: u128, - // Total voting power waiting to join in the next epoch. - total_joining_power: u128, - } - - /// AptosCoin capabilities, set during genesis and stored in @CoreResource account. - /// This allows the Stake module to mint rewards to stakers. - struct AptosCoinCapabilities has key { - mint_cap: MintCapability, - } - - struct IndividualValidatorPerformance has store, drop { - successful_proposals: u64, - failed_proposals: u64, - } - - struct ValidatorPerformance has key { - validators: vector, - } - - struct RegisterValidatorCandidateEvent has drop, store { - pool_address: address, - } - - #[event] - struct RegisterValidatorCandidate has drop, store { - pool_address: address, - } - - struct SetOperatorEvent has drop, store { - pool_address: address, - old_operator: address, - new_operator: address, - } - - #[event] - struct SetOperator has drop, store { - pool_address: address, - old_operator: address, - new_operator: address, - } - - struct AddStakeEvent has drop, store { - pool_address: address, - amount_added: u64, - } - - #[event] - struct AddStake has drop, store { - pool_address: address, - amount_added: u64, - } - - struct ReactivateStakeEvent has drop, store { - pool_address: address, - amount: u64, - } - - #[event] - struct ReactivateStake has drop, store { - pool_address: address, - amount: u64, - } - - struct RotateConsensusKeyEvent has drop, store { - pool_address: address, - old_consensus_pubkey: vector, - new_consensus_pubkey: vector, - } - - #[event] - struct RotateConsensusKey has drop, store { - pool_address: address, - old_consensus_pubkey: vector, - new_consensus_pubkey: vector, - } - - struct UpdateNetworkAndFullnodeAddressesEvent has drop, store { - pool_address: address, - old_network_addresses: vector, - new_network_addresses: vector, - old_fullnode_addresses: vector, - new_fullnode_addresses: vector, - } - - #[event] - struct UpdateNetworkAndFullnodeAddresses has drop, store { - pool_address: address, - old_network_addresses: vector, - new_network_addresses: vector, - old_fullnode_addresses: vector, - new_fullnode_addresses: vector, - } - - struct IncreaseLockupEvent has drop, store { - pool_address: address, - old_locked_until_secs: u64, - new_locked_until_secs: u64, - } - - #[event] - struct IncreaseLockup has drop, store { - pool_address: address, - old_locked_until_secs: u64, - new_locked_until_secs: u64, - } - - struct JoinValidatorSetEvent has drop, store { - pool_address: address, - } - - #[event] - struct JoinValidatorSet has drop, store { - pool_address: address, - } - - struct DistributeRewardsEvent has drop, store { - pool_address: address, - rewards_amount: u64, - } - - #[event] - struct DistributeRewards has drop, store { - pool_address: address, - rewards_amount: u64, - } - - struct UnlockStakeEvent has drop, store { - pool_address: address, - amount_unlocked: u64, - } - - #[event] - struct UnlockStake has drop, store { - pool_address: address, - amount_unlocked: u64, - } - - struct WithdrawStakeEvent has drop, store { - pool_address: address, - amount_withdrawn: u64, - } - - #[event] - struct WithdrawStake has drop, store { - pool_address: address, - amount_withdrawn: u64, - } - - struct LeaveValidatorSetEvent has drop, store { - pool_address: address, - } - - #[event] - struct LeaveValidatorSet has drop, store { - pool_address: address, - } - - #[deprecated] - /// DEPRECATED - struct ValidatorFees has key { - fees_table: Table>, - } - - #[view] - /// Return the lockup expiration of the stake pool at `pool_address`. - /// This will throw an error if there's no stake pool at `pool_address`. - public fun get_lockup_secs(pool_address: address): u64 acquires StakePool { - assert_stake_pool_exists(pool_address); - borrow_global(pool_address).locked_until_secs - } - - #[view] - /// Return the remaining lockup of the stake pool at `pool_address`. - /// This will throw an error if there's no stake pool at `pool_address`. - public fun get_remaining_lockup_secs(pool_address: address): u64 acquires StakePool { - assert_stake_pool_exists(pool_address); - let lockup_time = borrow_global(pool_address).locked_until_secs; - if (lockup_time <= timestamp::now_seconds()) { - 0 - } else { - lockup_time - timestamp::now_seconds() - } - } - - #[view] - /// Return the different stake amounts for `pool_address` (whether the validator is active or not). - /// The returned amounts are for (active, inactive, pending_active, pending_inactive) stake respectively. - public fun get_stake(pool_address: address): (u64, u64, u64, u64) acquires StakePool { - assert_stake_pool_exists(pool_address); - let stake_pool = borrow_global(pool_address); - ( - coin::value(&stake_pool.active), - coin::value(&stake_pool.inactive), - coin::value(&stake_pool.pending_active), - coin::value(&stake_pool.pending_inactive), - ) - } - - #[view] - /// Returns the validator's state. - public fun get_validator_state(pool_address: address): u64 acquires ValidatorSet { - let validator_set = borrow_global(@aptos_framework); - if (option::is_some(&find_validator(&validator_set.pending_active, pool_address))) { - VALIDATOR_STATUS_PENDING_ACTIVE - } else if (option::is_some(&find_validator(&validator_set.active_validators, pool_address))) { - VALIDATOR_STATUS_ACTIVE - } else if (option::is_some(&find_validator(&validator_set.pending_inactive, pool_address))) { - VALIDATOR_STATUS_PENDING_INACTIVE - } else { - VALIDATOR_STATUS_INACTIVE - } - } - - #[view] - /// Return the voting power of the validator in the current epoch. - /// This is the same as the validator's total active and pending_inactive stake. - public fun get_current_epoch_voting_power(pool_address: address): u64 acquires StakePool, ValidatorSet { - assert_stake_pool_exists(pool_address); - let validator_state = get_validator_state(pool_address); - // Both active and pending inactive validators can still vote in the current epoch. - if (validator_state == VALIDATOR_STATUS_ACTIVE || validator_state == VALIDATOR_STATUS_PENDING_INACTIVE) { - let active_stake = coin::value(&borrow_global(pool_address).active); - let pending_inactive_stake = coin::value(&borrow_global(pool_address).pending_inactive); - active_stake + pending_inactive_stake - } else { - 0 - } - } - - #[view] - /// Return the delegated voter of the validator at `pool_address`. - public fun get_delegated_voter(pool_address: address): address acquires StakePool { - assert_stake_pool_exists(pool_address); - borrow_global(pool_address).delegated_voter - } - - #[view] - /// Return the operator of the validator at `pool_address`. - public fun get_operator(pool_address: address): address acquires StakePool { - assert_stake_pool_exists(pool_address); - borrow_global(pool_address).operator_address - } - - /// Return the pool address in `owner_cap`. - public fun get_owned_pool_address(owner_cap: &OwnerCapability): address { - owner_cap.pool_address - } - - #[view] - /// Return the validator index for `pool_address`. - public fun get_validator_index(pool_address: address): u64 acquires ValidatorConfig { - assert_stake_pool_exists(pool_address); - borrow_global(pool_address).validator_index - } - - #[view] - /// Return the number of successful and failed proposals for the proposal at the given validator index. - public fun get_current_epoch_proposal_counts(validator_index: u64): (u64, u64) acquires ValidatorPerformance { - let validator_performances = &borrow_global(@aptos_framework).validators; - let validator_performance = vector::borrow(validator_performances, validator_index); - (validator_performance.successful_proposals, validator_performance.failed_proposals) - } - - #[view] - /// Return the validator's config. - public fun get_validator_config( - pool_address: address - ): (vector, vector, vector) acquires ValidatorConfig { - assert_stake_pool_exists(pool_address); - let validator_config = borrow_global(pool_address); - (validator_config.consensus_pubkey, validator_config.network_addresses, validator_config.fullnode_addresses) - } - - #[view] - public fun stake_pool_exists(addr: address): bool { - exists(addr) - } - - /// Initialize validator set to the core resource account. - public(friend) fun initialize(aptos_framework: &signer) { - system_addresses::assert_aptos_framework(aptos_framework); - - move_to(aptos_framework, ValidatorSet { - consensus_scheme: 0, - active_validators: vector::empty(), - pending_active: vector::empty(), - pending_inactive: vector::empty(), - total_voting_power: 0, - total_joining_power: 0, - }); - - move_to(aptos_framework, ValidatorPerformance { - validators: vector::empty(), - }); - } - - /// This is only called during Genesis, which is where MintCapability can be created. - /// Beyond genesis, no one can create AptosCoin mint/burn capabilities. - public(friend) fun store_aptos_coin_mint_cap(aptos_framework: &signer, mint_cap: MintCapability) { - system_addresses::assert_aptos_framework(aptos_framework); - move_to(aptos_framework, AptosCoinCapabilities { mint_cap }) - } - - /// Allow on chain governance to remove validators from the validator set. - public fun remove_validators( - aptos_framework: &signer, - validators: &vector
, - ) acquires ValidatorSet { - assert_reconfig_not_in_progress(); - system_addresses::assert_aptos_framework(aptos_framework); - let validator_set = borrow_global_mut(@aptos_framework); - let active_validators = &mut validator_set.active_validators; - let pending_inactive = &mut validator_set.pending_inactive; - spec { - update ghost_active_num = len(active_validators); - update ghost_pending_inactive_num = len(pending_inactive); - }; - let len_validators = vector::length(validators); - let i = 0; - // Remove each validator from the validator set. - while ({ - spec { - invariant i <= len_validators; - invariant spec_validators_are_initialized(active_validators); - invariant spec_validator_indices_are_valid(active_validators); - invariant spec_validators_are_initialized(pending_inactive); - invariant spec_validator_indices_are_valid(pending_inactive); - invariant ghost_active_num + ghost_pending_inactive_num == len(active_validators) + len(pending_inactive); - }; - i < len_validators - }) { - let validator = *vector::borrow(validators, i); - let validator_index = find_validator(active_validators, validator); - if (option::is_some(&validator_index)) { - let validator_info = vector::swap_remove(active_validators, *option::borrow(&validator_index)); - vector::push_back(pending_inactive, validator_info); - spec { - update ghost_active_num = ghost_active_num - 1; - update ghost_pending_inactive_num = ghost_pending_inactive_num + 1; - }; - }; - i = i + 1; - }; - } - - /// Initialize the validator account and give ownership to the signing account - /// except it leaves the ValidatorConfig to be set by another entity. - /// Note: this triggers setting the operator and owner, set it to the account's address - /// to set later. - public entry fun initialize_stake_owner( - owner: &signer, - initial_stake_amount: u64, - operator: address, - voter: address, - ) acquires AllowedValidators, OwnerCapability, StakePool, ValidatorSet { - initialize_owner(owner); - move_to(owner, ValidatorConfig { - consensus_pubkey: vector::empty(), - network_addresses: vector::empty(), - fullnode_addresses: vector::empty(), - validator_index: 0, - }); - - if (initial_stake_amount > 0) { - add_stake(owner, initial_stake_amount); - }; - - let account_address = signer::address_of(owner); - if (account_address != operator) { - set_operator(owner, operator) - }; - if (account_address != voter) { - set_delegated_voter(owner, voter) - }; - } - - /// Initialize the validator account and give ownership to the signing account. - public entry fun initialize_validator( - account: &signer, - consensus_pubkey: vector, - proof_of_possession: vector, - network_addresses: vector, - fullnode_addresses: vector, - ) acquires AllowedValidators { - // Checks the public key has a valid proof-of-possession to prevent rogue-key attacks. - let pubkey_from_pop = &bls12381::public_key_from_bytes_with_pop( - consensus_pubkey, - &proof_of_possession_from_bytes(proof_of_possession) - ); - assert!(option::is_some(pubkey_from_pop), error::invalid_argument(EINVALID_PUBLIC_KEY)); - - initialize_owner(account); - move_to(account, ValidatorConfig { - consensus_pubkey, - network_addresses, - fullnode_addresses, - validator_index: 0, - }); - } - - fun initialize_owner(owner: &signer) acquires AllowedValidators { - let owner_address = signer::address_of(owner); - assert!(is_allowed(owner_address), error::not_found(EINELIGIBLE_VALIDATOR)); - assert!(!stake_pool_exists(owner_address), error::already_exists(EALREADY_REGISTERED)); - - move_to(owner, StakePool { - active: coin::zero(), - pending_active: coin::zero(), - pending_inactive: coin::zero(), - inactive: coin::zero(), - locked_until_secs: 0, - operator_address: owner_address, - delegated_voter: owner_address, - // Events. - initialize_validator_events: account::new_event_handle(owner), - set_operator_events: account::new_event_handle(owner), - add_stake_events: account::new_event_handle(owner), - reactivate_stake_events: account::new_event_handle(owner), - rotate_consensus_key_events: account::new_event_handle(owner), - update_network_and_fullnode_addresses_events: account::new_event_handle( - owner - ), - increase_lockup_events: account::new_event_handle(owner), - join_validator_set_events: account::new_event_handle(owner), - distribute_rewards_events: account::new_event_handle(owner), - unlock_stake_events: account::new_event_handle(owner), - withdraw_stake_events: account::new_event_handle(owner), - leave_validator_set_events: account::new_event_handle(owner), - }); - - move_to(owner, OwnerCapability { pool_address: owner_address }); - } - - /// Extract and return owner capability from the signing account. - public fun extract_owner_cap(owner: &signer): OwnerCapability acquires OwnerCapability { - let owner_address = signer::address_of(owner); - assert_owner_cap_exists(owner_address); - move_from(owner_address) - } - - /// Deposit `owner_cap` into `account`. This requires `account` to not already have ownership of another - /// staking pool. - public fun deposit_owner_cap(owner: &signer, owner_cap: OwnerCapability) { - assert!(!exists(signer::address_of(owner)), error::not_found(EOWNER_CAP_ALREADY_EXISTS)); - move_to(owner, owner_cap); - } - - /// Destroy `owner_cap`. - public fun destroy_owner_cap(owner_cap: OwnerCapability) { - let OwnerCapability { pool_address: _ } = owner_cap; - } - - /// Allows an owner to change the operator of the stake pool. - public entry fun set_operator(owner: &signer, new_operator: address) acquires OwnerCapability, StakePool { - let owner_address = signer::address_of(owner); - assert_owner_cap_exists(owner_address); - let ownership_cap = borrow_global(owner_address); - set_operator_with_cap(ownership_cap, new_operator); - } - - /// Allows an account with ownership capability to change the operator of the stake pool. - public fun set_operator_with_cap(owner_cap: &OwnerCapability, new_operator: address) acquires StakePool { - let pool_address = owner_cap.pool_address; - assert_stake_pool_exists(pool_address); - let stake_pool = borrow_global_mut(pool_address); - let old_operator = stake_pool.operator_address; - stake_pool.operator_address = new_operator; - - if (std::features::module_event_migration_enabled()) { - event::emit( - SetOperator { - pool_address, - old_operator, - new_operator, - }, - ); - } else { - event::emit_event( - &mut stake_pool.set_operator_events, - SetOperatorEvent { - pool_address, - old_operator, - new_operator, - }, - ); - }; - } - - /// Allows an owner to change the delegated voter of the stake pool. - public entry fun set_delegated_voter(owner: &signer, new_voter: address) acquires OwnerCapability, StakePool { - let owner_address = signer::address_of(owner); - assert_owner_cap_exists(owner_address); - let ownership_cap = borrow_global(owner_address); - set_delegated_voter_with_cap(ownership_cap, new_voter); - } - - /// Allows an owner to change the delegated voter of the stake pool. - public fun set_delegated_voter_with_cap(owner_cap: &OwnerCapability, new_voter: address) acquires StakePool { - let pool_address = owner_cap.pool_address; - assert_stake_pool_exists(pool_address); - let stake_pool = borrow_global_mut(pool_address); - stake_pool.delegated_voter = new_voter; - } - - /// Add `amount` of coins from the `account` owning the StakePool. - public entry fun add_stake(owner: &signer, amount: u64) acquires OwnerCapability, StakePool, ValidatorSet { - let owner_address = signer::address_of(owner); - assert_owner_cap_exists(owner_address); - let ownership_cap = borrow_global(owner_address); - add_stake_with_cap(ownership_cap, coin::withdraw(owner, amount)); - } - - /// Add `coins` into `pool_address`. this requires the corresponding `owner_cap` to be passed in. - public fun add_stake_with_cap(owner_cap: &OwnerCapability, coins: Coin) acquires StakePool, ValidatorSet { - assert_reconfig_not_in_progress(); - let pool_address = owner_cap.pool_address; - assert_stake_pool_exists(pool_address); - - let amount = coin::value(&coins); - if (amount == 0) { - coin::destroy_zero(coins); - return - }; - - // Only track and validate voting power increase for active and pending_active validator. - // Pending_inactive validator will be removed from the validator set in the next epoch. - // Inactive validator's total stake will be tracked when they join the validator set. - let validator_set = borrow_global(@aptos_framework); - // Search directly rather using get_validator_state to save on unnecessary loops. - if (option::is_some(&find_validator(&validator_set.active_validators, pool_address)) || - option::is_some(&find_validator(&validator_set.pending_active, pool_address))) { - update_voting_power_increase(amount); - }; - - // Add to pending_active if it's a current validator because the stake is not counted until the next epoch. - // Otherwise, the delegation can be added to active directly as the validator is also activated in the epoch. - let stake_pool = borrow_global_mut(pool_address); - if (is_current_epoch_validator(pool_address)) { - coin::merge(&mut stake_pool.pending_active, coins); - } else { - coin::merge(&mut stake_pool.active, coins); - }; - - let (_, maximum_stake) = staking_config::get_required_stake(&staking_config::get()); - let voting_power = get_next_epoch_voting_power(stake_pool); - assert!(voting_power <= maximum_stake, error::invalid_argument(ESTAKE_EXCEEDS_MAX)); - - if (std::features::module_event_migration_enabled()) { - event::emit( - AddStake { - pool_address, - amount_added: amount, - }, - ); - } else { - event::emit_event( - &mut stake_pool.add_stake_events, - AddStakeEvent { - pool_address, - amount_added: amount, - }, - ); - }; - } - - /// Move `amount` of coins from pending_inactive to active. - public entry fun reactivate_stake(owner: &signer, amount: u64) acquires OwnerCapability, StakePool { - assert_reconfig_not_in_progress(); - let owner_address = signer::address_of(owner); - assert_owner_cap_exists(owner_address); - let ownership_cap = borrow_global(owner_address); - reactivate_stake_with_cap(ownership_cap, amount); - } - - public fun reactivate_stake_with_cap(owner_cap: &OwnerCapability, amount: u64) acquires StakePool { - assert_reconfig_not_in_progress(); - let pool_address = owner_cap.pool_address; - assert_stake_pool_exists(pool_address); - - // Cap the amount to reactivate by the amount in pending_inactive. - let stake_pool = borrow_global_mut(pool_address); - let total_pending_inactive = coin::value(&stake_pool.pending_inactive); - amount = min(amount, total_pending_inactive); - - // Since this does not count as a voting power change (pending inactive still counts as voting power in the - // current epoch), stake can be immediately moved from pending inactive to active. - // We also don't need to check voting power increase as there's none. - let reactivated_coins = coin::extract(&mut stake_pool.pending_inactive, amount); - coin::merge(&mut stake_pool.active, reactivated_coins); - - if (std::features::module_event_migration_enabled()) { - event::emit( - ReactivateStake { - pool_address, - amount, - }, - ); - } else { - event::emit_event( - &mut stake_pool.reactivate_stake_events, - ReactivateStakeEvent { - pool_address, - amount, - }, - ); - }; - } - - /// Rotate the consensus key of the validator, it'll take effect in next epoch. - public entry fun rotate_consensus_key( - operator: &signer, - pool_address: address, - new_consensus_pubkey: vector, - proof_of_possession: vector, - ) acquires StakePool, ValidatorConfig { - assert_reconfig_not_in_progress(); - assert_stake_pool_exists(pool_address); - - let stake_pool = borrow_global_mut(pool_address); - assert!(signer::address_of(operator) == stake_pool.operator_address, error::unauthenticated(ENOT_OPERATOR)); - - assert!(exists(pool_address), error::not_found(EVALIDATOR_CONFIG)); - let validator_info = borrow_global_mut(pool_address); - let old_consensus_pubkey = validator_info.consensus_pubkey; - // Checks the public key has a valid proof-of-possession to prevent rogue-key attacks. - let pubkey_from_pop = &bls12381::public_key_from_bytes_with_pop( - new_consensus_pubkey, - &proof_of_possession_from_bytes(proof_of_possession) - ); - assert!(option::is_some(pubkey_from_pop), error::invalid_argument(EINVALID_PUBLIC_KEY)); - validator_info.consensus_pubkey = new_consensus_pubkey; - - if (std::features::module_event_migration_enabled()) { - event::emit( - RotateConsensusKey { - pool_address, - old_consensus_pubkey, - new_consensus_pubkey, - }, - ); - } else { - event::emit_event( - &mut stake_pool.rotate_consensus_key_events, - RotateConsensusKeyEvent { - pool_address, - old_consensus_pubkey, - new_consensus_pubkey, - }, - ); - }; - } - - /// Update the network and full node addresses of the validator. This only takes effect in the next epoch. - public entry fun update_network_and_fullnode_addresses( - operator: &signer, - pool_address: address, - new_network_addresses: vector, - new_fullnode_addresses: vector, - ) acquires StakePool, ValidatorConfig { - assert_reconfig_not_in_progress(); - assert_stake_pool_exists(pool_address); - let stake_pool = borrow_global_mut(pool_address); - assert!(signer::address_of(operator) == stake_pool.operator_address, error::unauthenticated(ENOT_OPERATOR)); - assert!(exists(pool_address), error::not_found(EVALIDATOR_CONFIG)); - let validator_info = borrow_global_mut(pool_address); - let old_network_addresses = validator_info.network_addresses; - validator_info.network_addresses = new_network_addresses; - let old_fullnode_addresses = validator_info.fullnode_addresses; - validator_info.fullnode_addresses = new_fullnode_addresses; - - if (std::features::module_event_migration_enabled()) { - event::emit( - UpdateNetworkAndFullnodeAddresses { - pool_address, - old_network_addresses, - new_network_addresses, - old_fullnode_addresses, - new_fullnode_addresses, - }, - ); - } else { - event::emit_event( - &mut stake_pool.update_network_and_fullnode_addresses_events, - UpdateNetworkAndFullnodeAddressesEvent { - pool_address, - old_network_addresses, - new_network_addresses, - old_fullnode_addresses, - new_fullnode_addresses, - }, - ); - }; - } - - /// Similar to increase_lockup_with_cap but will use ownership capability from the signing account. - public entry fun increase_lockup(owner: &signer) acquires OwnerCapability, StakePool { - let owner_address = signer::address_of(owner); - assert_owner_cap_exists(owner_address); - let ownership_cap = borrow_global(owner_address); - increase_lockup_with_cap(ownership_cap); - } - - /// Unlock from active delegation, it's moved to pending_inactive if locked_until_secs < current_time or - /// directly inactive if it's not from an active validator. - public fun increase_lockup_with_cap(owner_cap: &OwnerCapability) acquires StakePool { - let pool_address = owner_cap.pool_address; - assert_stake_pool_exists(pool_address); - let config = staking_config::get(); - - let stake_pool = borrow_global_mut(pool_address); - let old_locked_until_secs = stake_pool.locked_until_secs; - let new_locked_until_secs = timestamp::now_seconds() + staking_config::get_recurring_lockup_duration(&config); - assert!(old_locked_until_secs < new_locked_until_secs, error::invalid_argument(EINVALID_LOCKUP)); - stake_pool.locked_until_secs = new_locked_until_secs; - - if (std::features::module_event_migration_enabled()) { - event::emit( - IncreaseLockup { - pool_address, - old_locked_until_secs, - new_locked_until_secs, - }, - ); - } else { - event::emit_event( - &mut stake_pool.increase_lockup_events, - IncreaseLockupEvent { - pool_address, - old_locked_until_secs, - new_locked_until_secs, - }, - ); - } - } - - /// This can only called by the operator of the validator/staking pool. - public entry fun join_validator_set( - operator: &signer, - pool_address: address - ) acquires StakePool, ValidatorConfig, ValidatorSet { - assert!( - staking_config::get_allow_validator_set_change(&staking_config::get()), - error::invalid_argument(ENO_POST_GENESIS_VALIDATOR_SET_CHANGE_ALLOWED), - ); - - join_validator_set_internal(operator, pool_address); - } - - /// Request to have `pool_address` join the validator set. Can only be called after calling `initialize_validator`. - /// If the validator has the required stake (more than minimum and less than maximum allowed), they will be - /// added to the pending_active queue. All validators in this queue will be added to the active set when the next - /// epoch starts (eligibility will be rechecked). - /// - /// This internal version can only be called by the Genesis module during Genesis. - public(friend) fun join_validator_set_internal( - operator: &signer, - pool_address: address - ) acquires StakePool, ValidatorConfig, ValidatorSet { - assert_reconfig_not_in_progress(); - assert_stake_pool_exists(pool_address); - let stake_pool = borrow_global_mut(pool_address); - assert!(signer::address_of(operator) == stake_pool.operator_address, error::unauthenticated(ENOT_OPERATOR)); - assert!( - get_validator_state(pool_address) == VALIDATOR_STATUS_INACTIVE, - error::invalid_state(EALREADY_ACTIVE_VALIDATOR), - ); - - let config = staking_config::get(); - let (minimum_stake, maximum_stake) = staking_config::get_required_stake(&config); - let voting_power = get_next_epoch_voting_power(stake_pool); - assert!(voting_power >= minimum_stake, error::invalid_argument(ESTAKE_TOO_LOW)); - assert!(voting_power <= maximum_stake, error::invalid_argument(ESTAKE_TOO_HIGH)); - - // Track and validate voting power increase. - update_voting_power_increase(voting_power); - - // Add validator to pending_active, to be activated in the next epoch. - let validator_config = borrow_global(pool_address); - assert!(!vector::is_empty(&validator_config.consensus_pubkey), error::invalid_argument(EINVALID_PUBLIC_KEY)); - - // Validate the current validator set size has not exceeded the limit. - let validator_set = borrow_global_mut(@aptos_framework); - vector::push_back( - &mut validator_set.pending_active, - generate_validator_info(pool_address, stake_pool, *validator_config) - ); - let validator_set_size = vector::length(&validator_set.active_validators) + vector::length( - &validator_set.pending_active - ); - assert!(validator_set_size <= MAX_VALIDATOR_SET_SIZE, error::invalid_argument(EVALIDATOR_SET_TOO_LARGE)); - - if (std::features::module_event_migration_enabled()) { - event::emit(JoinValidatorSet { pool_address }); - } else { - event::emit_event( - &mut stake_pool.join_validator_set_events, - JoinValidatorSetEvent { pool_address }, - ); - } - } - - /// Similar to unlock_with_cap but will use ownership capability from the signing account. - public entry fun unlock(owner: &signer, amount: u64) acquires OwnerCapability, StakePool { - assert_reconfig_not_in_progress(); - let owner_address = signer::address_of(owner); - assert_owner_cap_exists(owner_address); - let ownership_cap = borrow_global(owner_address); - unlock_with_cap(amount, ownership_cap); - } - - /// Unlock `amount` from the active stake. Only possible if the lockup has expired. - public fun unlock_with_cap(amount: u64, owner_cap: &OwnerCapability) acquires StakePool { - assert_reconfig_not_in_progress(); - // Short-circuit if amount to unlock is 0 so we don't emit events. - if (amount == 0) { - return - }; - - // Unlocked coins are moved to pending_inactive. When the current lockup cycle expires, they will be moved into - // inactive in the earliest possible epoch transition. - let pool_address = owner_cap.pool_address; - assert_stake_pool_exists(pool_address); - let stake_pool = borrow_global_mut(pool_address); - // Cap amount to unlock by maximum active stake. - let amount = min(amount, coin::value(&stake_pool.active)); - let unlocked_stake = coin::extract(&mut stake_pool.active, amount); - coin::merge(&mut stake_pool.pending_inactive, unlocked_stake); - - if (std::features::module_event_migration_enabled()) { - event::emit( - UnlockStake { - pool_address, - amount_unlocked: amount, - }, - ); - } else { - event::emit_event( - &mut stake_pool.unlock_stake_events, - UnlockStakeEvent { - pool_address, - amount_unlocked: amount, - }, - ); - }; - } - - /// Withdraw from `account`'s inactive stake. - public entry fun withdraw( - owner: &signer, - withdraw_amount: u64 - ) acquires OwnerCapability, StakePool, ValidatorSet { - let owner_address = signer::address_of(owner); - assert_owner_cap_exists(owner_address); - let ownership_cap = borrow_global(owner_address); - let coins = withdraw_with_cap(ownership_cap, withdraw_amount); - coin::deposit(owner_address, coins); - } - - /// Withdraw from `pool_address`'s inactive stake with the corresponding `owner_cap`. - public fun withdraw_with_cap( - owner_cap: &OwnerCapability, - withdraw_amount: u64 - ): Coin acquires StakePool, ValidatorSet { - assert_reconfig_not_in_progress(); - let pool_address = owner_cap.pool_address; - assert_stake_pool_exists(pool_address); - let stake_pool = borrow_global_mut(pool_address); - // There's an edge case where a validator unlocks their stake and leaves the validator set before - // the stake is fully unlocked (the current lockup cycle has not expired yet). - // This can leave their stake stuck in pending_inactive even after the current lockup cycle expires. - if (get_validator_state(pool_address) == VALIDATOR_STATUS_INACTIVE && - timestamp::now_seconds() >= stake_pool.locked_until_secs) { - let pending_inactive_stake = coin::extract_all(&mut stake_pool.pending_inactive); - coin::merge(&mut stake_pool.inactive, pending_inactive_stake); - }; - - // Cap withdraw amount by total inactive coins. - withdraw_amount = min(withdraw_amount, coin::value(&stake_pool.inactive)); - if (withdraw_amount == 0) return coin::zero(); - - if (std::features::module_event_migration_enabled()) { - event::emit( - WithdrawStake { - pool_address, - amount_withdrawn: withdraw_amount, - }, - ); - } else { - event::emit_event( - &mut stake_pool.withdraw_stake_events, - WithdrawStakeEvent { - pool_address, - amount_withdrawn: withdraw_amount, - }, - ); - }; - - coin::extract(&mut stake_pool.inactive, withdraw_amount) - } - - /// Request to have `pool_address` leave the validator set. The validator is only actually removed from the set when - /// the next epoch starts. - /// The last validator in the set cannot leave. This is an edge case that should never happen as long as the network - /// is still operational. - /// - /// Can only be called by the operator of the validator/staking pool. - public entry fun leave_validator_set( - operator: &signer, - pool_address: address - ) acquires StakePool, ValidatorSet { - assert_reconfig_not_in_progress(); - let config = staking_config::get(); - assert!( - staking_config::get_allow_validator_set_change(&config), - error::invalid_argument(ENO_POST_GENESIS_VALIDATOR_SET_CHANGE_ALLOWED), - ); - - assert_stake_pool_exists(pool_address); - let stake_pool = borrow_global_mut(pool_address); - // Account has to be the operator. - assert!(signer::address_of(operator) == stake_pool.operator_address, error::unauthenticated(ENOT_OPERATOR)); - - let validator_set = borrow_global_mut(@aptos_framework); - // If the validator is still pending_active, directly kick the validator out. - let maybe_pending_active_index = find_validator(&validator_set.pending_active, pool_address); - if (option::is_some(&maybe_pending_active_index)) { - vector::swap_remove( - &mut validator_set.pending_active, option::extract(&mut maybe_pending_active_index)); - - // Decrease the voting power increase as the pending validator's voting power was added when they requested - // to join. Now that they changed their mind, their voting power should not affect the joining limit of this - // epoch. - let validator_stake = (get_next_epoch_voting_power(stake_pool) as u128); - // total_joining_power should be larger than validator_stake but just in case there has been a small - // rounding error somewhere that can lead to an underflow, we still want to allow this transaction to - // succeed. - if (validator_set.total_joining_power > validator_stake) { - validator_set.total_joining_power = validator_set.total_joining_power - validator_stake; - } else { - validator_set.total_joining_power = 0; - }; - } else { - // Validate that the validator is already part of the validator set. - let maybe_active_index = find_validator(&validator_set.active_validators, pool_address); - assert!(option::is_some(&maybe_active_index), error::invalid_state(ENOT_VALIDATOR)); - let validator_info = vector::swap_remove( - &mut validator_set.active_validators, option::extract(&mut maybe_active_index)); - assert!(vector::length(&validator_set.active_validators) > 0, error::invalid_state(ELAST_VALIDATOR)); - vector::push_back(&mut validator_set.pending_inactive, validator_info); - - if (std::features::module_event_migration_enabled()) { - event::emit(LeaveValidatorSet { pool_address }); - } else { - event::emit_event( - &mut stake_pool.leave_validator_set_events, - LeaveValidatorSetEvent { - pool_address, - }, - ); - }; - }; - } - - /// Returns true if the current validator can still vote in the current epoch. - /// This includes validators that requested to leave but are still in the pending_inactive queue and will be removed - /// when the epoch starts. - public fun is_current_epoch_validator(pool_address: address): bool acquires ValidatorSet { - assert_stake_pool_exists(pool_address); - let validator_state = get_validator_state(pool_address); - validator_state == VALIDATOR_STATUS_ACTIVE || validator_state == VALIDATOR_STATUS_PENDING_INACTIVE - } - - /// Update the validator performance (proposal statistics). This is only called by block::prologue(). - /// This function cannot abort. - public(friend) fun update_performance_statistics( - proposer_index: Option, - failed_proposer_indices: vector - ) acquires ValidatorPerformance { - // Validator set cannot change until the end of the epoch, so the validator index in arguments should - // match with those of the validators in ValidatorPerformance resource. - let validator_perf = borrow_global_mut(@aptos_framework); - let validator_len = vector::length(&validator_perf.validators); - - spec { - update ghost_valid_perf = validator_perf; - update ghost_proposer_idx = proposer_index; - }; - // proposer_index is an option because it can be missing (for NilBlocks) - if (option::is_some(&proposer_index)) { - let cur_proposer_index = option::extract(&mut proposer_index); - // Here, and in all other vector::borrow, skip any validator indices that are out of bounds, - // this ensures that this function doesn't abort if there are out of bounds errors. - if (cur_proposer_index < validator_len) { - let validator = vector::borrow_mut(&mut validator_perf.validators, cur_proposer_index); - spec { - assume validator.successful_proposals + 1 <= MAX_U64; - }; - validator.successful_proposals = validator.successful_proposals + 1; - }; - }; - - let f = 0; - let f_len = vector::length(&failed_proposer_indices); - while ({ - spec { - invariant len(validator_perf.validators) == validator_len; - invariant (option::spec_is_some(ghost_proposer_idx) && option::spec_borrow( - ghost_proposer_idx - ) < validator_len) ==> - (validator_perf.validators[option::spec_borrow(ghost_proposer_idx)].successful_proposals == - ghost_valid_perf.validators[option::spec_borrow(ghost_proposer_idx)].successful_proposals + 1); - }; - f < f_len - }) { - let validator_index = *vector::borrow(&failed_proposer_indices, f); - if (validator_index < validator_len) { - let validator = vector::borrow_mut(&mut validator_perf.validators, validator_index); - spec { - assume validator.failed_proposals + 1 <= MAX_U64; - }; - validator.failed_proposals = validator.failed_proposals + 1; - }; - f = f + 1; - }; - } - - /// Triggered during a reconfiguration. This function shouldn't abort. - /// - /// 1. Distribute transaction fees and rewards to stake pools of active and pending inactive validators (requested - /// to leave but not yet removed). - /// 2. Officially move pending active stake to active and move pending inactive stake to inactive. - /// The staking pool's voting power in this new epoch will be updated to the total active stake. - /// 3. Add pending active validators to the active set if they satisfy requirements so they can vote and remove - /// pending inactive validators so they no longer can vote. - /// 4. The validator's voting power in the validator set is updated to be the corresponding staking pool's voting - /// power. - public(friend) fun on_new_epoch( - ) acquires StakePool, AptosCoinCapabilities, ValidatorConfig, ValidatorPerformance, ValidatorSet { - let validator_set = borrow_global_mut(@aptos_framework); - let config = staking_config::get(); - let validator_perf = borrow_global_mut(@aptos_framework); - - // Process pending stake and distribute transaction fees and rewards for each currently active validator. - vector::for_each_ref(&validator_set.active_validators, |validator| { - let validator: &ValidatorInfo = validator; - update_stake_pool(validator_perf, validator.addr, &config); - }); - - // Process pending stake and distribute transaction fees and rewards for each currently pending_inactive validator - // (requested to leave but not removed yet). - vector::for_each_ref(&validator_set.pending_inactive, |validator| { - let validator: &ValidatorInfo = validator; - update_stake_pool(validator_perf, validator.addr, &config); - }); - - // Activate currently pending_active validators. - append(&mut validator_set.active_validators, &mut validator_set.pending_active); - - // Officially deactivate all pending_inactive validators. They will now no longer receive rewards. - validator_set.pending_inactive = vector::empty(); - - // Update active validator set so that network address/public key change takes effect. - // Moreover, recalculate the total voting power, and deactivate the validator whose - // voting power is less than the minimum required stake. - let next_epoch_validators = vector::empty(); - let (minimum_stake, _) = staking_config::get_required_stake(&config); - let vlen = vector::length(&validator_set.active_validators); - let total_voting_power = 0; - let i = 0; - while ({ - spec { - invariant spec_validators_are_initialized(next_epoch_validators); - invariant i <= vlen; - }; - i < vlen - }) { - let old_validator_info = vector::borrow_mut(&mut validator_set.active_validators, i); - let pool_address = old_validator_info.addr; - let validator_config = borrow_global(pool_address); - let stake_pool = borrow_global(pool_address); - let new_validator_info = generate_validator_info(pool_address, stake_pool, *validator_config); - - // A validator needs at least the min stake required to join the validator set. - if (new_validator_info.voting_power >= minimum_stake) { - spec { - assume total_voting_power + new_validator_info.voting_power <= MAX_U128; - }; - total_voting_power = total_voting_power + (new_validator_info.voting_power as u128); - vector::push_back(&mut next_epoch_validators, new_validator_info); - }; - i = i + 1; - }; - - validator_set.active_validators = next_epoch_validators; - validator_set.total_voting_power = total_voting_power; - validator_set.total_joining_power = 0; - - // Update validator indices, reset performance scores, and renew lockups. - validator_perf.validators = vector::empty(); - let recurring_lockup_duration_secs = staking_config::get_recurring_lockup_duration(&config); - let vlen = vector::length(&validator_set.active_validators); - let validator_index = 0; - while ({ - spec { - invariant spec_validators_are_initialized(validator_set.active_validators); - invariant len(validator_set.pending_active) == 0; - invariant len(validator_set.pending_inactive) == 0; - invariant 0 <= validator_index && validator_index <= vlen; - invariant vlen == len(validator_set.active_validators); - invariant forall i in 0..validator_index: - global(validator_set.active_validators[i].addr).validator_index < validator_index; - invariant forall i in 0..validator_index: - validator_set.active_validators[i].config.validator_index < validator_index; - invariant len(validator_perf.validators) == validator_index; - }; - validator_index < vlen - }) { - let validator_info = vector::borrow_mut(&mut validator_set.active_validators, validator_index); - validator_info.config.validator_index = validator_index; - let validator_config = borrow_global_mut(validator_info.addr); - validator_config.validator_index = validator_index; - - vector::push_back(&mut validator_perf.validators, IndividualValidatorPerformance { - successful_proposals: 0, - failed_proposals: 0, - }); - - // Automatically renew a validator's lockup for validators that will still be in the validator set in the - // next epoch. - let stake_pool = borrow_global_mut(validator_info.addr); - let now_secs = timestamp::now_seconds(); - let reconfig_start_secs = if (chain_status::is_operating()) { - get_reconfig_start_time_secs() - } else { - now_secs - }; - if (stake_pool.locked_until_secs <= reconfig_start_secs) { - spec { - assume now_secs + recurring_lockup_duration_secs <= MAX_U64; - }; - stake_pool.locked_until_secs = now_secs + recurring_lockup_duration_secs; - }; - - validator_index = validator_index + 1; - }; - - if (features::periodical_reward_rate_decrease_enabled()) { - // Update rewards rate after reward distribution. - staking_config::calculate_and_save_latest_epoch_rewards_rate(); - }; - } - - /// Return the `ValidatorConsensusInfo` of each current validator, sorted by current validator index. - public fun cur_validator_consensus_infos(): vector acquires ValidatorSet { - let validator_set = borrow_global(@aptos_framework); - validator_consensus_infos_from_validator_set(validator_set) - } - - - public fun next_validator_consensus_infos(): vector acquires ValidatorSet, ValidatorPerformance, StakePool, ValidatorConfig { - // Init. - let cur_validator_set = borrow_global(@aptos_framework); - let staking_config = staking_config::get(); - let validator_perf = borrow_global(@aptos_framework); - let (minimum_stake, _) = staking_config::get_required_stake(&staking_config); - let (rewards_rate, rewards_rate_denominator) = staking_config::get_reward_rate(&staking_config); - - // Compute new validator set. - let new_active_validators = vector[]; - let num_new_actives = 0; - let candidate_idx = 0; - let new_total_power = 0; - let num_cur_actives = vector::length(&cur_validator_set.active_validators); - let num_cur_pending_actives = vector::length(&cur_validator_set.pending_active); - spec { - assume num_cur_actives + num_cur_pending_actives <= MAX_U64; - }; - let num_candidates = num_cur_actives + num_cur_pending_actives; - while ({ - spec { - invariant candidate_idx <= num_candidates; - invariant spec_validators_are_initialized(new_active_validators); - invariant len(new_active_validators) == num_new_actives; - invariant forall i in 0..len(new_active_validators): - new_active_validators[i].config.validator_index == i; - invariant num_new_actives <= candidate_idx; - invariant spec_validators_are_initialized(new_active_validators); - }; - candidate_idx < num_candidates - }) { - let candidate_in_current_validator_set = candidate_idx < num_cur_actives; - let candidate = if (candidate_idx < num_cur_actives) { - vector::borrow(&cur_validator_set.active_validators, candidate_idx) - } else { - vector::borrow(&cur_validator_set.pending_active, candidate_idx - num_cur_actives) - }; - let stake_pool = borrow_global(candidate.addr); - let cur_active = coin::value(&stake_pool.active); - let cur_pending_active = coin::value(&stake_pool.pending_active); - let cur_pending_inactive = coin::value(&stake_pool.pending_inactive); - - let cur_reward = if (candidate_in_current_validator_set && cur_active > 0) { - spec { - assert candidate.config.validator_index < len(validator_perf.validators); - }; - let cur_perf = vector::borrow(&validator_perf.validators, candidate.config.validator_index); - spec { - assume cur_perf.successful_proposals + cur_perf.failed_proposals <= MAX_U64; - }; - calculate_rewards_amount(cur_active, cur_perf.successful_proposals, cur_perf.successful_proposals + cur_perf.failed_proposals, rewards_rate, rewards_rate_denominator) - } else { - 0 - }; - - let lockup_expired = get_reconfig_start_time_secs() >= stake_pool.locked_until_secs; - spec { - assume cur_active + cur_pending_active + cur_reward <= MAX_U64; - assume cur_active + cur_pending_inactive + cur_pending_active + cur_reward <= MAX_U64; - }; - let new_voting_power = - cur_active - + if (lockup_expired) { 0 } else { cur_pending_inactive } - + cur_pending_active - + cur_reward; - - if (new_voting_power >= minimum_stake) { - let config = *borrow_global(candidate.addr); - config.validator_index = num_new_actives; - let new_validator_info = ValidatorInfo { - addr: candidate.addr, - voting_power: new_voting_power, - config, - }; - - // Update ValidatorSet. - spec { - assume new_total_power + new_voting_power <= MAX_U128; - }; - new_total_power = new_total_power + (new_voting_power as u128); - vector::push_back(&mut new_active_validators, new_validator_info); - num_new_actives = num_new_actives + 1; - - }; - candidate_idx = candidate_idx + 1; - }; - - let new_validator_set = ValidatorSet { - consensus_scheme: cur_validator_set.consensus_scheme, - active_validators: new_active_validators, - pending_inactive: vector[], - pending_active: vector[], - total_voting_power: new_total_power, - total_joining_power: 0, - }; - - validator_consensus_infos_from_validator_set(&new_validator_set) - } - - fun validator_consensus_infos_from_validator_set(validator_set: &ValidatorSet): vector { - let validator_consensus_infos = vector[]; - - let num_active = vector::length(&validator_set.active_validators); - let num_pending_inactive = vector::length(&validator_set.pending_inactive); - spec { - assume num_active + num_pending_inactive <= MAX_U64; - }; - let total = num_active + num_pending_inactive; - - // Pre-fill the return value with dummy values. - let idx = 0; - while ({ - spec { - invariant idx <= len(validator_set.active_validators) + len(validator_set.pending_inactive); - invariant len(validator_consensus_infos) == idx; - invariant len(validator_consensus_infos) <= len(validator_set.active_validators) + len(validator_set.pending_inactive); - }; - idx < total - }) { - vector::push_back(&mut validator_consensus_infos, validator_consensus_info::default()); - idx = idx + 1; - }; - spec { - assert len(validator_consensus_infos) == len(validator_set.active_validators) + len(validator_set.pending_inactive); - assert spec_validator_indices_are_valid_config(validator_set.active_validators, - len(validator_set.active_validators) + len(validator_set.pending_inactive)); - }; - - vector::for_each_ref(&validator_set.active_validators, |obj| { - let vi: &ValidatorInfo = obj; - spec { - assume len(validator_consensus_infos) == len(validator_set.active_validators) + len(validator_set.pending_inactive); - assert vi.config.validator_index < len(validator_consensus_infos); - }; - let vci = vector::borrow_mut(&mut validator_consensus_infos, vi.config.validator_index); - *vci = validator_consensus_info::new( - vi.addr, - vi.config.consensus_pubkey, - vi.voting_power - ); - spec { - assert len(validator_consensus_infos) == len(validator_set.active_validators) + len(validator_set.pending_inactive); - }; - }); - - vector::for_each_ref(&validator_set.pending_inactive, |obj| { - let vi: &ValidatorInfo = obj; - spec { - assume len(validator_consensus_infos) == len(validator_set.active_validators) + len(validator_set.pending_inactive); - assert vi.config.validator_index < len(validator_consensus_infos); - }; - let vci = vector::borrow_mut(&mut validator_consensus_infos, vi.config.validator_index); - *vci = validator_consensus_info::new( - vi.addr, - vi.config.consensus_pubkey, - vi.voting_power - ); - spec { - assert len(validator_consensus_infos) == len(validator_set.active_validators) + len(validator_set.pending_inactive); - }; - }); - - validator_consensus_infos - } - - fun addresses_from_validator_infos(infos: &vector): vector
{ - vector::map_ref(infos, |obj| { - let info: &ValidatorInfo = obj; - info.addr - }) - } - - /// Calculate the stake amount of a stake pool for the next epoch. - /// Update individual validator's stake pool if `commit == true`. - /// - /// 1. distribute transaction fees to active/pending_inactive delegations - /// 2. distribute rewards to active/pending_inactive delegations - /// 3. process pending_active, pending_inactive correspondingly - /// This function shouldn't abort. - fun update_stake_pool( - validator_perf: &ValidatorPerformance, - pool_address: address, - staking_config: &StakingConfig, - ) acquires StakePool, AptosCoinCapabilities, ValidatorConfig { - let stake_pool = borrow_global_mut(pool_address); - let validator_config = borrow_global(pool_address); - let cur_validator_perf = vector::borrow(&validator_perf.validators, validator_config.validator_index); - let num_successful_proposals = cur_validator_perf.successful_proposals; - spec { - // The following addition should not overflow because `num_total_proposals` cannot be larger than 86400, - // the maximum number of proposals in a day (1 proposal per second). - assume cur_validator_perf.successful_proposals + cur_validator_perf.failed_proposals <= MAX_U64; - }; - let num_total_proposals = cur_validator_perf.successful_proposals + cur_validator_perf.failed_proposals; - let (rewards_rate, rewards_rate_denominator) = staking_config::get_reward_rate(staking_config); - let rewards_active = distribute_rewards( - &mut stake_pool.active, - num_successful_proposals, - num_total_proposals, - rewards_rate, - rewards_rate_denominator - ); - let rewards_pending_inactive = distribute_rewards( - &mut stake_pool.pending_inactive, - num_successful_proposals, - num_total_proposals, - rewards_rate, - rewards_rate_denominator - ); - spec { - assume rewards_active + rewards_pending_inactive <= MAX_U64; - }; - let rewards_amount = rewards_active + rewards_pending_inactive; - // Pending active stake can now be active. - coin::merge(&mut stake_pool.active, coin::extract_all(&mut stake_pool.pending_active)); - - // Pending inactive stake is only fully unlocked and moved into inactive if the current lockup cycle has expired - let current_lockup_expiration = stake_pool.locked_until_secs; - if (get_reconfig_start_time_secs() >= current_lockup_expiration) { - coin::merge( - &mut stake_pool.inactive, - coin::extract_all(&mut stake_pool.pending_inactive), - ); - }; - - if (std::features::module_event_migration_enabled()) { - event::emit(DistributeRewards { pool_address, rewards_amount }); - } else { - event::emit_event( - &mut stake_pool.distribute_rewards_events, - DistributeRewardsEvent { - pool_address, - rewards_amount, - }, - ); - }; - } - - /// Assuming we are in a middle of a reconfiguration (no matter it is immediate or async), get its start time. - fun get_reconfig_start_time_secs(): u64 { - if (reconfiguration_state::is_initialized()) { - reconfiguration_state::start_time_secs() - } else { - timestamp::now_seconds() - } - } - - /// Calculate the rewards amount. - fun calculate_rewards_amount( - stake_amount: u64, - num_successful_proposals: u64, - num_total_proposals: u64, - rewards_rate: u64, - rewards_rate_denominator: u64, - ): u64 { - spec { - // The following condition must hold because - // (1) num_successful_proposals <= num_total_proposals, and - // (2) `num_total_proposals` cannot be larger than 86400, the maximum number of proposals - // in a day (1 proposal per second), and `num_total_proposals` is reset to 0 every epoch. - assume num_successful_proposals * MAX_REWARDS_RATE <= MAX_U64; - }; - // The rewards amount is equal to (stake amount * rewards rate * performance multiplier). - // We do multiplication in u128 before division to avoid the overflow and minimize the rounding error. - let rewards_numerator = (stake_amount as u128) * (rewards_rate as u128) * (num_successful_proposals as u128); - let rewards_denominator = (rewards_rate_denominator as u128) * (num_total_proposals as u128); - if (rewards_denominator > 0) { - ((rewards_numerator / rewards_denominator) as u64) - } else { - 0 - } - } - - /// Mint rewards corresponding to current epoch's `stake` and `num_successful_votes`. - fun distribute_rewards( - stake: &mut Coin, - num_successful_proposals: u64, - num_total_proposals: u64, - rewards_rate: u64, - rewards_rate_denominator: u64, - ): u64 acquires AptosCoinCapabilities { - let stake_amount = coin::value(stake); - let rewards_amount = if (stake_amount > 0) { - calculate_rewards_amount( - stake_amount, - num_successful_proposals, - num_total_proposals, - rewards_rate, - rewards_rate_denominator - ) - } else { - 0 - }; - if (rewards_amount > 0) { - let mint_cap = &borrow_global(@aptos_framework).mint_cap; - let rewards = coin::mint(rewards_amount, mint_cap); - coin::merge(stake, rewards); - }; - rewards_amount - } - - fun append(v1: &mut vector, v2: &mut vector) { - while (!vector::is_empty(v2)) { - vector::push_back(v1, vector::pop_back(v2)); - } - } - - fun find_validator(v: &vector, addr: address): Option { - let i = 0; - let len = vector::length(v); - while ({ - spec { - invariant !(exists j in 0..i: v[j].addr == addr); - }; - i < len - }) { - if (vector::borrow(v, i).addr == addr) { - return option::some(i) - }; - i = i + 1; - }; - option::none() - } - - fun generate_validator_info(addr: address, stake_pool: &StakePool, config: ValidatorConfig): ValidatorInfo { - let voting_power = get_next_epoch_voting_power(stake_pool); - ValidatorInfo { - addr, - voting_power, - config, - } - } - - /// Returns validator's next epoch voting power, including pending_active, active, and pending_inactive stake. - fun get_next_epoch_voting_power(stake_pool: &StakePool): u64 { - let value_pending_active = coin::value(&stake_pool.pending_active); - let value_active = coin::value(&stake_pool.active); - let value_pending_inactive = coin::value(&stake_pool.pending_inactive); - spec { - assume value_pending_active + value_active + value_pending_inactive <= MAX_U64; - }; - value_pending_active + value_active + value_pending_inactive - } - - fun update_voting_power_increase(increase_amount: u64) acquires ValidatorSet { - let validator_set = borrow_global_mut(@aptos_framework); - let voting_power_increase_limit = - (staking_config::get_voting_power_increase_limit(&staking_config::get()) as u128); - validator_set.total_joining_power = validator_set.total_joining_power + (increase_amount as u128); - - // Only validator voting power increase if the current validator set's voting power > 0. - if (validator_set.total_voting_power > 0) { - assert!( - validator_set.total_joining_power <= validator_set.total_voting_power * voting_power_increase_limit / 100, - error::invalid_argument(EVOTING_POWER_INCREASE_EXCEEDS_LIMIT), - ); - } - } - - fun assert_stake_pool_exists(pool_address: address) { - assert!(stake_pool_exists(pool_address), error::invalid_argument(ESTAKE_POOL_DOES_NOT_EXIST)); - } - - /// This provides an ACL for Testnet purposes. In testnet, everyone is a whale, a whale can be a validator. - /// This allows a testnet to bring additional entities into the validator set without compromising the - /// security of the testnet. This will NOT be enabled in Mainnet. - struct AllowedValidators has key { - accounts: vector
, - } - - public fun configure_allowed_validators( - aptos_framework: &signer, - accounts: vector
- ) acquires AllowedValidators { - let aptos_framework_address = signer::address_of(aptos_framework); - system_addresses::assert_aptos_framework(aptos_framework); - if (!exists(aptos_framework_address)) { - move_to(aptos_framework, AllowedValidators { accounts }); - } else { - let allowed = borrow_global_mut(aptos_framework_address); - allowed.accounts = accounts; - } - } - - fun is_allowed(account: address): bool acquires AllowedValidators { - if (!exists(@aptos_framework)) { - true - } else { - let allowed = borrow_global(@aptos_framework); - vector::contains(&allowed.accounts, &account) - } - } - - fun assert_owner_cap_exists(owner: address) { - assert!(exists(owner), error::not_found(EOWNER_CAP_NOT_FOUND)); - } - - fun assert_reconfig_not_in_progress() { - assert!(!reconfiguration_state::is_in_progress(), error::invalid_state(ERECONFIGURATION_IN_PROGRESS)); - } - - #[test_only] - use aptos_framework::aptos_coin; - use aptos_std::bls12381::proof_of_possession_from_bytes; - use aptos_framework::reconfiguration_state; - use aptos_framework::validator_consensus_info; - use aptos_framework::validator_consensus_info::ValidatorConsensusInfo; - #[test_only] - use aptos_std::fixed_point64; - - #[test_only] - const EPOCH_DURATION: u64 = 60; - - #[test_only] - const LOCKUP_CYCLE_SECONDS: u64 = 3600; - - #[test_only] - public fun initialize_for_test(aptos_framework: &signer) { - reconfiguration_state::initialize(aptos_framework); - initialize_for_test_custom(aptos_framework, 100, 10000, LOCKUP_CYCLE_SECONDS, true, 1, 100, 1000000); - } - - #[test_only] - public fun join_validator_set_for_test( - pk: &bls12381::PublicKey, - pop: &bls12381::ProofOfPossession, - operator: &signer, - pool_address: address, - should_end_epoch: bool, - ) acquires AptosCoinCapabilities, StakePool, ValidatorConfig, ValidatorPerformance, ValidatorSet { - let pk_bytes = bls12381::public_key_to_bytes(pk); - let pop_bytes = bls12381::proof_of_possession_to_bytes(pop); - rotate_consensus_key(operator, pool_address, pk_bytes, pop_bytes); - join_validator_set(operator, pool_address); - if (should_end_epoch) { - end_epoch(); - } - } - - #[test_only] - public fun fast_forward_to_unlock(pool_address: address) - acquires AptosCoinCapabilities, StakePool, ValidatorConfig, ValidatorPerformance, ValidatorSet { - let expiration_time = get_lockup_secs(pool_address); - timestamp::update_global_time_for_test_secs(expiration_time); - end_epoch(); - } - - // Convenient function for setting up all required stake initializations. - #[test_only] - public fun initialize_for_test_custom( - aptos_framework: &signer, - minimum_stake: u64, - maximum_stake: u64, - recurring_lockup_secs: u64, - allow_validator_set_change: bool, - rewards_rate_numerator: u64, - rewards_rate_denominator: u64, - voting_power_increase_limit: u64, - ) { - timestamp::set_time_has_started_for_testing(aptos_framework); - reconfiguration_state::initialize(aptos_framework); - if (!exists(@aptos_framework)) { - initialize(aptos_framework); - }; - staking_config::initialize_for_test( - aptos_framework, - minimum_stake, - maximum_stake, - recurring_lockup_secs, - allow_validator_set_change, - rewards_rate_numerator, - rewards_rate_denominator, - voting_power_increase_limit, - ); - - if (!exists(@aptos_framework)) { - let (burn_cap, mint_cap) = aptos_coin::initialize_for_test(aptos_framework); - store_aptos_coin_mint_cap(aptos_framework, mint_cap); - coin::destroy_burn_cap(burn_cap); - }; - } - - // This function assumes the stake module already the capability to mint aptos coins. - #[test_only] - public fun mint_coins(amount: u64): Coin acquires AptosCoinCapabilities { - let mint_cap = &borrow_global(@aptos_framework).mint_cap; - coin::mint(amount, mint_cap) - } - - #[test_only] - public fun mint(account: &signer, amount: u64) acquires AptosCoinCapabilities { - coin::register(account); - coin::deposit(signer::address_of(account), mint_coins(amount)); - } - - #[test_only] - public fun mint_and_add_stake( - account: &signer, amount: u64) acquires AptosCoinCapabilities, OwnerCapability, StakePool, ValidatorSet { - mint(account, amount); - add_stake(account, amount); - } - - #[test_only] - public fun initialize_test_validator( - public_key: &bls12381::PublicKey, - proof_of_possession: &bls12381::ProofOfPossession, - validator: &signer, - amount: u64, - should_join_validator_set: bool, - should_end_epoch: bool, - ) acquires AllowedValidators, AptosCoinCapabilities, OwnerCapability, StakePool, ValidatorConfig, ValidatorPerformance, ValidatorSet { - let validator_address = signer::address_of(validator); - if (!account::exists_at(signer::address_of(validator))) { - account::create_account_for_test(validator_address); - }; - - let pk_bytes = bls12381::public_key_to_bytes(public_key); - let pop_bytes = bls12381::proof_of_possession_to_bytes(proof_of_possession); - initialize_validator(validator, pk_bytes, pop_bytes, vector::empty(), vector::empty()); - - if (amount > 0) { - mint_and_add_stake(validator, amount); - }; - - if (should_join_validator_set) { - join_validator_set(validator, validator_address); - }; - if (should_end_epoch) { - end_epoch(); - }; - } - - #[test_only] - public fun create_validator_set( - aptos_framework: &signer, - active_validator_addresses: vector
, - public_keys: vector, - ) { - let active_validators = vector::empty(); - let i = 0; - while (i < vector::length(&active_validator_addresses)) { - let validator_address = vector::borrow(&active_validator_addresses, i); - let pk = vector::borrow(&public_keys, i); - vector::push_back(&mut active_validators, ValidatorInfo { - addr: *validator_address, - voting_power: 0, - config: ValidatorConfig { - consensus_pubkey: bls12381::public_key_to_bytes(pk), - network_addresses: b"", - fullnode_addresses: b"", - validator_index: 0, - } - }); - i = i + 1; - }; - - move_to(aptos_framework, ValidatorSet { - consensus_scheme: 0, - // active validators for the current epoch - active_validators, - // pending validators to leave in next epoch (still active) - pending_inactive: vector::empty(), - // pending validators to join in next epoch - pending_active: vector::empty(), - total_voting_power: 0, - total_joining_power: 0, - }); - } - - #[test_only] - public fun create_stake_pool( - account: &signer, - active: Coin, - pending_inactive: Coin, - locked_until_secs: u64, - ) acquires AllowedValidators, OwnerCapability, StakePool, ValidatorSet { - let account_address = signer::address_of(account); - initialize_stake_owner(account, 0, account_address, account_address); - let stake_pool = borrow_global_mut(account_address); - coin::merge(&mut stake_pool.active, active); - coin::merge(&mut stake_pool.pending_inactive, pending_inactive); - stake_pool.locked_until_secs = locked_until_secs; - } - - // Allows unit tests to set custom validator performances. - #[test_only] - public fun update_validator_performances_for_test( - proposer_index: Option, - failed_proposer_indices: vector, - ) acquires ValidatorPerformance { - update_performance_statistics(proposer_index, failed_proposer_indices); - } - - #[test_only] - public fun generate_identity(): (bls12381::SecretKey, bls12381::PublicKey, bls12381::ProofOfPossession) { - let (sk, pkpop) = bls12381::generate_keys(); - let pop = bls12381::generate_proof_of_possession(&sk); - let unvalidated_pk = bls12381::public_key_with_pop_to_normal(&pkpop); - (sk, unvalidated_pk, pop) - } - - #[test(aptos_framework = @aptos_framework, validator = @0x123)] - #[expected_failure(abort_code = 0x10007, location = Self)] - public entry fun test_inactive_validator_can_add_stake_if_exceeding_max_allowed( - aptos_framework: &signer, - validator: &signer, - ) acquires AllowedValidators, AptosCoinCapabilities, OwnerCapability, StakePool, ValidatorConfig, ValidatorPerformance, ValidatorSet { - initialize_for_test(aptos_framework); - let (_sk, pk, pop) = generate_identity(); - initialize_test_validator(&pk, &pop, validator, 100, false, false); - - // Add more stake to exceed max. This should fail. - mint_and_add_stake(validator, 9901); - } - - #[test(aptos_framework = @0x1, validator_1 = @0x123, validator_2 = @0x234)] - #[expected_failure(abort_code = 0x10007, location = Self)] - public entry fun test_pending_active_validator_cannot_add_stake_if_exceeding_max_allowed( - aptos_framework: &signer, - validator_1: &signer, - validator_2: &signer, - ) acquires AllowedValidators, AptosCoinCapabilities, OwnerCapability, StakePool, ValidatorConfig, ValidatorPerformance, ValidatorSet { - initialize_for_test_custom(aptos_framework, 50, 10000, LOCKUP_CYCLE_SECONDS, true, 1, 10, 100000); - // Have one validator join the set to ensure the validator set is not empty when main validator joins. - let (_sk_1, pk_1, pop_1) = generate_identity(); - initialize_test_validator(&pk_1, &pop_1, validator_1, 100, true, true); - - // Validator 2 joins validator set but epoch has not ended so validator is in pending_active state. - let (_sk_2, pk_2, pop_2) = generate_identity(); - initialize_test_validator(&pk_2, &pop_2, validator_2, 100, true, false); - - // Add more stake to exceed max. This should fail. - mint_and_add_stake(validator_2, 9901); - } - - #[test(aptos_framework = @aptos_framework, validator = @0x123)] - #[expected_failure(abort_code = 0x10007, location = Self)] - public entry fun test_active_validator_cannot_add_stake_if_exceeding_max_allowed( - aptos_framework: &signer, - validator: &signer, - ) acquires AllowedValidators, AptosCoinCapabilities, OwnerCapability, StakePool, ValidatorConfig, ValidatorPerformance, ValidatorSet { - initialize_for_test(aptos_framework); - // Validator joins validator set and waits for epoch end so it's in the validator set. - let (_sk, pk, pop) = generate_identity(); - initialize_test_validator(&pk, &pop, validator, 100, true, true); - - // Add more stake to exceed max. This should fail. - mint_and_add_stake(validator, 9901); - } - - #[test(aptos_framework = @aptos_framework, validator = @0x123)] - #[expected_failure(abort_code = 0x10007, location = Self)] - public entry fun test_active_validator_with_pending_inactive_stake_cannot_add_stake_if_exceeding_max_allowed( - aptos_framework: &signer, - validator: &signer, - ) acquires AllowedValidators, AptosCoinCapabilities, OwnerCapability, StakePool, ValidatorConfig, ValidatorPerformance, ValidatorSet { - initialize_for_test(aptos_framework); - // Validator joins validator set and waits for epoch end so it's in the validator set. - let (_sk, pk, pop) = generate_identity(); - initialize_test_validator(&pk, &pop, validator, 100, true, true); - - // Request to unlock 50 coins, which go to pending_inactive. Validator has 50 remaining in active. - unlock(validator, 50); - assert_validator_state(signer::address_of(validator), 50, 0, 0, 50, 0); - - // Add 9901 more. Total stake is 50 (active) + 50 (pending_inactive) + 9901 > 10000 so still exceeding max. - mint_and_add_stake(validator, 9901); - } - - #[test(aptos_framework = @aptos_framework, validator_1 = @0x123, validator_2 = @0x234)] - #[expected_failure(abort_code = 0x10007, location = Self)] - public entry fun test_pending_inactive_cannot_add_stake_if_exceeding_max_allowed( - aptos_framework: &signer, - validator_1: &signer, - validator_2: &signer, - ) acquires AllowedValidators, AptosCoinCapabilities, OwnerCapability, StakePool, ValidatorConfig, ValidatorPerformance, ValidatorSet { - initialize_for_test(aptos_framework); - let (_sk_1, pk_1, pop_1) = generate_identity(); - let (_sk_2, pk_2, pop_2) = generate_identity(); - initialize_test_validator(&pk_1, &pop_1, validator_1, 100, true, false); - initialize_test_validator(&pk_2, &pop_2, validator_2, 100, true, true); - - // Leave validator set so validator is in pending_inactive state. - leave_validator_set(validator_1, signer::address_of(validator_1)); - - // Add 9901 more. Total stake is 50 (active) + 50 (pending_inactive) + 9901 > 10000 so still exceeding max. - mint_and_add_stake(validator_1, 9901); - } - - #[test(aptos_framework = @aptos_framework, validator = @0x123)] - public entry fun test_end_to_end( - aptos_framework: &signer, - validator: &signer, - ) acquires AllowedValidators, OwnerCapability, StakePool, AptosCoinCapabilities, ValidatorConfig, ValidatorPerformance, ValidatorSet { - initialize_for_test(aptos_framework); - let (_sk, pk, pop) = generate_identity(); - initialize_test_validator(&pk, &pop, validator, 100, true, true); - - // Validator has a lockup now that they've joined the validator set. - let validator_address = signer::address_of(validator); - assert!(get_remaining_lockup_secs(validator_address) == LOCKUP_CYCLE_SECONDS, 1); - - // Validator adds more stake while already being active. - // The added stake should go to pending_active to wait for activation when next epoch starts. - mint(validator, 900); - add_stake(validator, 100); - assert!(coin::balance(validator_address) == 800, 2); - assert_validator_state(validator_address, 100, 0, 100, 0, 0); - - // Pending_active stake is activated in the new epoch. - // Rewards of 1 coin are also distributed for the existing active stake of 100 coins. - end_epoch(); - assert!(get_validator_state(validator_address) == VALIDATOR_STATUS_ACTIVE, 3); - assert_validator_state(validator_address, 201, 0, 0, 0, 0); - - // Request unlock of 100 coins. These 100 coins are moved to pending_inactive and will be unlocked when the - // current lockup expires. - unlock(validator, 100); - assert_validator_state(validator_address, 101, 0, 0, 100, 0); - - // Enough time has passed so the current lockup cycle should have ended. - // The first epoch after the lockup cycle ended should automatically move unlocked (pending_inactive) stake - // to inactive. - timestamp::fast_forward_seconds(LOCKUP_CYCLE_SECONDS); - end_epoch(); - // Rewards were also minted to pending_inactive, which got all moved to inactive. - assert_validator_state(validator_address, 102, 101, 0, 0, 0); - // Lockup is renewed and validator is still active. - assert!(get_validator_state(validator_address) == VALIDATOR_STATUS_ACTIVE, 4); - assert!(get_remaining_lockup_secs(validator_address) == LOCKUP_CYCLE_SECONDS, 5); - - // Validator withdraws from inactive stake multiple times. - withdraw(validator, 50); - assert!(coin::balance(validator_address) == 850, 6); - assert_validator_state(validator_address, 102, 51, 0, 0, 0); - withdraw(validator, 51); - assert!(coin::balance(validator_address) == 901, 7); - assert_validator_state(validator_address, 102, 0, 0, 0, 0); - - // Enough time has passed again and the validator's lockup is renewed once more. Validator is still active. - timestamp::fast_forward_seconds(LOCKUP_CYCLE_SECONDS); - end_epoch(); - assert!(get_validator_state(validator_address) == VALIDATOR_STATUS_ACTIVE, 8); - assert!(get_remaining_lockup_secs(validator_address) == LOCKUP_CYCLE_SECONDS, 9); - } - - #[test(aptos_framework = @aptos_framework, validator = @0x123)] - public entry fun test_inactive_validator_with_existing_lockup_join_validator_set( - aptos_framework: &signer, - validator: &signer, - ) acquires AllowedValidators, OwnerCapability, StakePool, AptosCoinCapabilities, ValidatorConfig, ValidatorPerformance, ValidatorSet { - initialize_for_test(aptos_framework); - let (_sk, pk, pop) = generate_identity(); - initialize_test_validator(&pk, &pop, validator, 100, false, false); - - // Validator sets lockup before even joining the set and lets half of lockup pass by. - increase_lockup(validator); - timestamp::fast_forward_seconds(LOCKUP_CYCLE_SECONDS / 2); - let validator_address = signer::address_of(validator); - assert!(get_remaining_lockup_secs(validator_address) == LOCKUP_CYCLE_SECONDS / 2, 1); - - // Join the validator set with an existing lockup - join_validator_set(validator, validator_address); - - // Validator is added to the set but lockup time shouldn't have changed. - end_epoch(); - assert!(get_validator_state(validator_address) == VALIDATOR_STATUS_ACTIVE, 2); - assert!(get_remaining_lockup_secs(validator_address) == LOCKUP_CYCLE_SECONDS / 2 - EPOCH_DURATION, 3); - assert_validator_state(validator_address, 100, 0, 0, 0, 0); - } - - #[test(aptos_framework = @aptos_framework, validator = @0x123)] - #[expected_failure(abort_code = 0x10012, location = Self)] - public entry fun test_cannot_reduce_lockup( - aptos_framework: &signer, - validator: &signer, - ) acquires AllowedValidators, OwnerCapability, StakePool, AptosCoinCapabilities, ValidatorConfig, ValidatorPerformance, ValidatorSet { - initialize_for_test(aptos_framework); - let (_sk, pk, pop) = generate_identity(); - initialize_test_validator(&pk, &pop, validator, 100, false, false); - - // Increase lockup. - increase_lockup(validator); - // Reduce recurring lockup to 0. - staking_config::update_recurring_lockup_duration_secs(aptos_framework, 1); - // INcrease lockup should now fail because the new lockup < old lockup. - increase_lockup(validator); - } - - #[test(aptos_framework = @aptos_framework, validator_1 = @0x123, validator_2 = @0x234)] - #[expected_failure(abort_code = 0x1000D, location = Self)] - public entry fun test_inactive_validator_cannot_join_if_exceed_increase_limit( - aptos_framework: &signer, - validator_1: &signer, - validator_2: &signer, - ) acquires AllowedValidators, OwnerCapability, StakePool, AptosCoinCapabilities, ValidatorConfig, ValidatorPerformance, ValidatorSet { - // Only 50% voting power increase is allowed in each epoch. - initialize_for_test_custom(aptos_framework, 50, 10000, LOCKUP_CYCLE_SECONDS, true, 1, 10, 50); - let (_sk_1, pk_1, pop_1) = generate_identity(); - let (_sk_2, pk_2, pop_2) = generate_identity(); - initialize_test_validator(&pk_1, &pop_1, validator_1, 100, false, false); - initialize_test_validator(&pk_2, &pop_2, validator_2, 100, false, false); - - // Validator 1 needs to be in the set so validator 2's added stake counts against the limit. - join_validator_set(validator_1, signer::address_of(validator_1)); - end_epoch(); - - // Validator 2 joins the validator set but their stake would lead to exceeding the voting power increase limit. - // Therefore, this should fail. - join_validator_set(validator_2, signer::address_of(validator_2)); - } - - #[test(aptos_framework = @aptos_framework, validator_1 = @0x123, validator_2 = @0x234)] - public entry fun test_pending_active_validator_can_add_more_stake( - aptos_framework: &signer, - validator_1: &signer, - validator_2: &signer, - ) acquires AllowedValidators, OwnerCapability, StakePool, AptosCoinCapabilities, ValidatorConfig, ValidatorPerformance, ValidatorSet { - initialize_for_test_custom(aptos_framework, 50, 10000, LOCKUP_CYCLE_SECONDS, true, 1, 10, 10000); - // Need 1 validator to be in the active validator set so joining limit works. - let (_sk_1, pk_1, pop_1) = generate_identity(); - let (_sk_2, pk_2, pop_2) = generate_identity(); - initialize_test_validator(&pk_1, &pop_1, validator_1, 100, false, true); - initialize_test_validator(&pk_2, &pop_2, validator_2, 100, false, false); - - // Add more stake while still pending_active. - let validator_2_address = signer::address_of(validator_2); - join_validator_set(validator_2, validator_2_address); - assert!(get_validator_state(validator_2_address) == VALIDATOR_STATUS_PENDING_ACTIVE, 0); - mint_and_add_stake(validator_2, 100); - assert_validator_state(validator_2_address, 200, 0, 0, 0, 0); - } - - #[test(aptos_framework = @aptos_framework, validator_1 = @0x123, validator_2 = @0x234)] - #[expected_failure(abort_code = 0x1000D, location = Self)] - public entry fun test_pending_active_validator_cannot_add_more_stake_than_limit( - aptos_framework: &signer, - validator_1: &signer, - validator_2: &signer, - ) acquires AllowedValidators, OwnerCapability, StakePool, AptosCoinCapabilities, ValidatorConfig, ValidatorPerformance, ValidatorSet { - // 100% voting power increase is allowed in each epoch. - initialize_for_test_custom(aptos_framework, 50, 10000, LOCKUP_CYCLE_SECONDS, true, 1, 10, 100); - // Need 1 validator to be in the active validator set so joining limit works. - let (_sk_1, pk_1, pop_1) = generate_identity(); - initialize_test_validator(&pk_1, &pop_1, validator_1, 100, true, true); - - // Validator 2 joins the validator set but epoch has not ended so they're still pending_active. - // Current voting power increase is already 100%. This is not failing yet. - let (_sk_2, pk_2, pop_2) = generate_identity(); - initialize_test_validator(&pk_2, &pop_2, validator_2, 100, true, false); - - // Add more stake, which now exceeds the 100% limit. This should fail. - mint_and_add_stake(validator_2, 1); - } - - #[test(aptos_framework = @aptos_framework, validator = @0x123)] - public entry fun test_pending_active_validator_leaves_validator_set( - aptos_framework: &signer, - validator: &signer, - ) acquires AllowedValidators, OwnerCapability, StakePool, AptosCoinCapabilities, ValidatorConfig, ValidatorPerformance, ValidatorSet { - initialize_for_test(aptos_framework); - // Validator joins but epoch hasn't ended, so the validator is still pending_active. - let (_sk, pk, pop) = generate_identity(); - initialize_test_validator(&pk, &pop, validator, 100, true, false); - let validator_address = signer::address_of(validator); - assert!(get_validator_state(validator_address) == VALIDATOR_STATUS_PENDING_ACTIVE, 0); - - // Check that voting power increase is tracked. - assert!(borrow_global(@aptos_framework).total_joining_power == 100, 0); - - // Leave the validator set immediately. - leave_validator_set(validator, validator_address); - assert!(get_validator_state(validator_address) == VALIDATOR_STATUS_INACTIVE, 1); - - // Check that voting power increase has been decreased when the pending active validator leaves. - assert!(borrow_global(@aptos_framework).total_joining_power == 0, 1); - } - - #[test(aptos_framework = @aptos_framework, validator = @0x123)] - #[expected_failure(abort_code = 0x1000D, location = Self)] - public entry fun test_active_validator_cannot_add_more_stake_than_limit_in_multiple_epochs( - aptos_framework: &signer, - validator: &signer, - ) acquires AllowedValidators, OwnerCapability, StakePool, AptosCoinCapabilities, ValidatorConfig, ValidatorPerformance, ValidatorSet { - // Only 50% voting power increase is allowed in each epoch. - initialize_for_test_custom(aptos_framework, 50, 10000, LOCKUP_CYCLE_SECONDS, true, 1, 10, 50); - // Add initial stake and join the validator set. - let (_sk, pk, pop) = generate_identity(); - initialize_test_validator(&pk, &pop, validator, 100, true, true); - - let validator_address = signer::address_of(validator); - assert_validator_state(validator_address, 100, 0, 0, 0, 0); - end_epoch(); - assert_validator_state(validator_address, 110, 0, 0, 0, 0); - end_epoch(); - assert_validator_state(validator_address, 121, 0, 0, 0, 0); - // Add more than 50% limit. The following line should fail. - mint_and_add_stake(validator, 99); - } - - #[test(aptos_framework = @aptos_framework, validator = @0x123)] - #[expected_failure(abort_code = 0x1000D, location = Self)] - public entry fun test_active_validator_cannot_add_more_stake_than_limit( - aptos_framework: &signer, - validator: &signer, - ) acquires AllowedValidators, OwnerCapability, StakePool, AptosCoinCapabilities, ValidatorConfig, ValidatorPerformance, ValidatorSet { - // Only 50% voting power increase is allowed in each epoch. - initialize_for_test_custom(aptos_framework, 50, 10000, LOCKUP_CYCLE_SECONDS, true, 1, 10, 50); - let (_sk, pk, pop) = generate_identity(); - initialize_test_validator(&pk, &pop, validator, 100, true, true); - - // Add more than 50% limit. This should fail. - mint_and_add_stake(validator, 51); - } - - #[test(aptos_framework = @aptos_framework, validator = @0x123)] - public entry fun test_active_validator_unlock_partial_stake( - aptos_framework: &signer, - validator: &signer, - ) acquires AllowedValidators, OwnerCapability, StakePool, AptosCoinCapabilities, ValidatorConfig, ValidatorPerformance, ValidatorSet { - // Reward rate = 10%. - initialize_for_test_custom(aptos_framework, 50, 10000, LOCKUP_CYCLE_SECONDS, true, 1, 10, 100); - let (_sk, pk, pop) = generate_identity(); - initialize_test_validator(&pk, &pop, validator, 100, true, true); - - // Unlock half of the coins. - let validator_address = signer::address_of(validator); - assert!(get_remaining_lockup_secs(validator_address) == LOCKUP_CYCLE_SECONDS, 1); - unlock(validator, 50); - assert_validator_state(validator_address, 50, 0, 0, 50, 0); - - // Enough time has passed so the current lockup cycle should have ended. - // 50 coins should have unlocked while the remaining 51 (50 + rewards) should stay locked for another cycle. - timestamp::fast_forward_seconds(LOCKUP_CYCLE_SECONDS); - end_epoch(); - assert!(get_validator_state(validator_address) == VALIDATOR_STATUS_ACTIVE, 2); - // Validator received rewards in both active and pending inactive. - assert_validator_state(validator_address, 55, 55, 0, 0, 0); - assert!(get_remaining_lockup_secs(validator_address) == LOCKUP_CYCLE_SECONDS, 3); - } - - #[test(aptos_framework = @aptos_framework, validator = @0x123)] - public entry fun test_active_validator_can_withdraw_all_stake_and_rewards_at_once( - aptos_framework: &signer, - validator: &signer, - ) acquires AllowedValidators, OwnerCapability, StakePool, AptosCoinCapabilities, ValidatorConfig, ValidatorPerformance, ValidatorSet { - initialize_for_test(aptos_framework); - let (_sk, pk, pop) = generate_identity(); - initialize_test_validator(&pk, &pop, validator, 100, true, true); - let validator_address = signer::address_of(validator); - assert!(get_remaining_lockup_secs(validator_address) == LOCKUP_CYCLE_SECONDS, 0); - - // One more epoch passes to generate rewards. - end_epoch(); - assert!(get_validator_state(validator_address) == VALIDATOR_STATUS_ACTIVE, 1); - assert_validator_state(validator_address, 101, 0, 0, 0, 0); - - // Unlock all coins while still having a lockup. - assert!(get_remaining_lockup_secs(validator_address) == LOCKUP_CYCLE_SECONDS - EPOCH_DURATION, 2); - unlock(validator, 101); - assert_validator_state(validator_address, 0, 0, 0, 101, 0); - - // One more epoch passes while the current lockup cycle (3600 secs) has not ended. - timestamp::fast_forward_seconds(1000); - end_epoch(); - // Validator should not be removed from the validator set since their 100 coins in pending_inactive state should - // still count toward voting power. - assert!(get_validator_state(validator_address) == VALIDATOR_STATUS_ACTIVE, 3); - assert_validator_state(validator_address, 0, 0, 0, 102, 0); - - // Enough time has passed so the current lockup cycle should have ended. Funds are now fully unlocked. - timestamp::fast_forward_seconds(LOCKUP_CYCLE_SECONDS); - end_epoch(); - assert_validator_state(validator_address, 0, 103, 0, 0, 0); - // Validator ahs been kicked out of the validator set as their stake is 0 now. - assert!(get_validator_state(validator_address) == VALIDATOR_STATUS_INACTIVE, 4); - } - - #[test(aptos_framework = @aptos_framework, validator = @0x123)] - public entry fun test_active_validator_unlocking_more_than_available_stake_should_cap( - aptos_framework: &signer, - validator: &signer, - ) acquires AllowedValidators, OwnerCapability, StakePool, AptosCoinCapabilities, ValidatorConfig, ValidatorPerformance, ValidatorSet { - initialize_for_test(aptos_framework); - let (_sk, pk, pop) = generate_identity(); - initialize_test_validator(&pk, &pop, validator, 100, false, false); - - // Validator unlocks more stake than they have active. This should limit the unlock to 100. - unlock(validator, 200); - assert_validator_state(signer::address_of(validator), 0, 0, 0, 100, 0); - } - - #[test(aptos_framework = @aptos_framework, validator = @0x123)] - public entry fun test_active_validator_withdraw_should_cap_by_inactive_stake( - aptos_framework: &signer, - validator: &signer, - ) acquires AllowedValidators, OwnerCapability, StakePool, AptosCoinCapabilities, ValidatorConfig, ValidatorPerformance, ValidatorSet { - initialize_for_test(aptos_framework); - // Initial balance = 900 (idle) + 100 (staked) = 1000. - let (_sk, pk, pop) = generate_identity(); - initialize_test_validator(&pk, &pop, validator, 100, true, true); - mint(validator, 900); - - // Validator unlocks stake. - unlock(validator, 100); - // Enough time has passed so the stake is fully unlocked. - timestamp::fast_forward_seconds(LOCKUP_CYCLE_SECONDS); - end_epoch(); - - // Validator can only withdraw a max of 100 unlocked coins even if they request to withdraw more than 100. - withdraw(validator, 200); - let validator_address = signer::address_of(validator); - // Receive back all coins with an extra 1 for rewards. - assert!(coin::balance(validator_address) == 1001, 2); - assert_validator_state(validator_address, 0, 0, 0, 0, 0); - } - - #[test(aptos_framework = @aptos_framework, validator = @0x123)] - public entry fun test_active_validator_can_reactivate_pending_inactive_stake( - aptos_framework: &signer, - validator: &signer, - ) acquires AllowedValidators, OwnerCapability, StakePool, AptosCoinCapabilities, ValidatorConfig, ValidatorPerformance, ValidatorSet { - initialize_for_test(aptos_framework); - let (_sk, pk, pop) = generate_identity(); - initialize_test_validator(&pk, &pop, validator, 100, true, true); - - // Validator unlocks stake, which gets moved into pending_inactive. - unlock(validator, 50); - let validator_address = signer::address_of(validator); - assert_validator_state(validator_address, 50, 0, 0, 50, 0); - - // Validator can reactivate pending_inactive stake. - reactivate_stake(validator, 50); - assert_validator_state(validator_address, 100, 0, 0, 0, 0); - } - - #[test(aptos_framework = @aptos_framework, validator = @0x123)] - public entry fun test_active_validator_reactivate_more_than_available_pending_inactive_stake_should_cap( - aptos_framework: &signer, - validator: &signer, - ) acquires AllowedValidators, OwnerCapability, StakePool, AptosCoinCapabilities, ValidatorConfig, ValidatorPerformance, ValidatorSet { - initialize_for_test(aptos_framework); - let (_sk, pk, pop) = generate_identity(); - initialize_test_validator(&pk, &pop, validator, 100, true, true); - - // Validator tries to reactivate more than available pending_inactive stake, which should limit to 50. - unlock(validator, 50); - let validator_address = signer::address_of(validator); - assert_validator_state(validator_address, 50, 0, 0, 50, 0); - reactivate_stake(validator, 51); - assert_validator_state(validator_address, 100, 0, 0, 0, 0); - } - - #[test(aptos_framework = @aptos_framework, validator = @0x123)] - public entry fun test_active_validator_having_insufficient_remaining_stake_after_withdrawal_gets_kicked( - aptos_framework: &signer, - validator: &signer, - ) acquires AllowedValidators, OwnerCapability, StakePool, AptosCoinCapabilities, ValidatorConfig, ValidatorPerformance, ValidatorSet { - initialize_for_test(aptos_framework); - let (_sk, pk, pop) = generate_identity(); - initialize_test_validator(&pk, &pop, validator, 100, true, true); - - // Unlock enough coins that the remaining is not enough to meet the min required. - let validator_address = signer::address_of(validator); - assert!(get_remaining_lockup_secs(validator_address) == LOCKUP_CYCLE_SECONDS, 1); - unlock(validator, 50); - assert_validator_state(validator_address, 50, 0, 0, 50, 0); - - // Enough time has passed so the current lockup cycle should have ended. - // 50 coins should have unlocked while the remaining 51 (50 + rewards) is not enough so the validator is kicked - // from the validator set. - assert!(get_validator_state(validator_address) == VALIDATOR_STATUS_ACTIVE, 2); - timestamp::fast_forward_seconds(LOCKUP_CYCLE_SECONDS); - end_epoch(); - assert!(get_validator_state(validator_address) == VALIDATOR_STATUS_INACTIVE, 2); - assert_validator_state(validator_address, 50, 50, 0, 0, 0); - // Lockup is no longer renewed since the validator is no longer a part of the validator set. - assert!(get_remaining_lockup_secs(validator_address) == 0, 3); - } - - #[test(aptos_framework = @aptos_framework, validator = @0x123, validator_2 = @0x234)] - public entry fun test_active_validator_leaves_staking_but_still_has_a_lockup( - aptos_framework: &signer, - validator: &signer, - validator_2: &signer, - ) acquires AllowedValidators, OwnerCapability, StakePool, AptosCoinCapabilities, ValidatorConfig, ValidatorPerformance, ValidatorSet { - initialize_for_test(aptos_framework); - let (_sk_1, pk_1, pop_1) = generate_identity(); - let (_sk_2, pk_2, pop_2) = generate_identity(); - initialize_test_validator(&pk_1, &pop_1, validator, 100, true, false); - // We need a second validator here just so the first validator can leave. - initialize_test_validator(&pk_2, &pop_2, validator_2, 100, true, true); - - // Leave the validator set while still having a lockup. - let validator_address = signer::address_of(validator); - assert!(get_remaining_lockup_secs(validator_address) == LOCKUP_CYCLE_SECONDS, 0); - leave_validator_set(validator, validator_address); - // Validator is in pending_inactive state but is technically still part of the validator set. - assert!(get_validator_state(validator_address) == VALIDATOR_STATUS_PENDING_INACTIVE, 2); - assert_validator_state(validator_address, 100, 0, 0, 0, 1); - end_epoch(); - - // Epoch has ended so validator is no longer part of the validator set. - assert!(get_validator_state(validator_address) == VALIDATOR_STATUS_INACTIVE, 3); - // However, their stake, including rewards, should still subject to the existing lockup. - assert_validator_state(validator_address, 101, 0, 0, 0, 1); - assert!(get_remaining_lockup_secs(validator_address) == LOCKUP_CYCLE_SECONDS - EPOCH_DURATION, 4); - - // If they try to unlock, their stake is moved to pending_inactive and would only be withdrawable after the - // lockup has expired. - unlock(validator, 50); - assert_validator_state(validator_address, 51, 0, 0, 50, 1); - // A couple of epochs passed but lockup has not expired so the validator's stake remains the same. - end_epoch(); - end_epoch(); - end_epoch(); - assert_validator_state(validator_address, 51, 0, 0, 50, 1); - // Fast forward enough so the lockup expires. Now the validator can just call withdraw directly to withdraw - // pending_inactive stakes. - timestamp::fast_forward_seconds(LOCKUP_CYCLE_SECONDS); - withdraw(validator, 50); - assert_validator_state(validator_address, 51, 0, 0, 0, 1); - } - - #[test(aptos_framework = @aptos_framework, validator = @0x123, validator_2 = @0x234)] - public entry fun test_active_validator_leaves_staking_and_rejoins_with_expired_lockup_should_be_renewed( - aptos_framework: &signer, - validator: &signer, - validator_2: &signer, - ) acquires AllowedValidators, OwnerCapability, StakePool, AptosCoinCapabilities, ValidatorConfig, ValidatorPerformance, ValidatorSet { - initialize_for_test(aptos_framework); - let (_sk_1, pk_1, pop_1) = generate_identity(); - let (_sk_2, pk_2, pop_2) = generate_identity(); - initialize_test_validator(&pk_1, &pop_1, validator, 100, true, false); - // We need a second validator here just so the first validator can leave. - initialize_test_validator(&pk_2, &pop_2, validator_2, 100, true, true); - - // Leave the validator set while still having a lockup. - let validator_address = signer::address_of(validator); - assert!(get_remaining_lockup_secs(validator_address) == LOCKUP_CYCLE_SECONDS, 0); - leave_validator_set(validator, validator_address); - end_epoch(); - - // Fast forward enough so the lockup expires. - timestamp::fast_forward_seconds(LOCKUP_CYCLE_SECONDS); - assert!(get_remaining_lockup_secs(validator_address) == 0, 1); - - // Validator rejoins the validator set. Once the current epoch ends, their lockup should be automatically - // renewed. - join_validator_set(validator, validator_address); - end_epoch(); - assert!(get_validator_state(validator_address) == VALIDATOR_STATUS_ACTIVE, 2); - assert!(get_remaining_lockup_secs(validator_address) == LOCKUP_CYCLE_SECONDS, 2); - } - - #[test(aptos_framework = @aptos_framework, validator_1 = @0x123, validator_2 = @0x234)] - public entry fun test_pending_inactive_validator_does_not_count_in_increase_limit( - aptos_framework: &signer, - validator_1: &signer, - validator_2: &signer, - ) acquires AllowedValidators, OwnerCapability, StakePool, AptosCoinCapabilities, ValidatorConfig, ValidatorPerformance, ValidatorSet { - // Only 50% voting power increase is allowed in each epoch. - initialize_for_test_custom(aptos_framework, 50, 10000, LOCKUP_CYCLE_SECONDS, true, 1, 10, 50); - let (_sk_1, pk_1, pop_1) = generate_identity(); - let (_sk_2, pk_2, pop_2) = generate_identity(); - initialize_test_validator(&pk_1, &pop_1, validator_1, 100, true, false); - // We need a second validator here just so the first validator can leave. - initialize_test_validator(&pk_2, &pop_2, validator_2, 100, true, true); - - // Validator 1 leaves the validator set. Epoch has not ended so they're still pending_inactive. - leave_validator_set(validator_1, signer::address_of(validator_1)); - // Validator 1 adds more stake. This should not succeed as it should not count as a voting power increase. - mint_and_add_stake(validator_1, 51); - } - - #[test(aptos_framework = @0x1, validator_1 = @0x123, validator_2 = @0x234, validator_3 = @0x345)] - public entry fun test_multiple_validators_join_and_leave( - aptos_framework: &signer, - validator_1: &signer, - validator_2: &signer, - validator_3: &signer - ) acquires AllowedValidators, OwnerCapability, StakePool, AptosCoinCapabilities, ValidatorConfig, ValidatorPerformance, ValidatorSet { - let validator_1_address = signer::address_of(validator_1); - let validator_2_address = signer::address_of(validator_2); - let validator_3_address = signer::address_of(validator_3); - - initialize_for_test_custom(aptos_framework, 100, 10000, LOCKUP_CYCLE_SECONDS, true, 1, 100, 100); - let (_sk_1, pk_1, pop_1) = generate_identity(); - let pk_1_bytes = bls12381::public_key_to_bytes(&pk_1); - let (_sk_2, pk_2, pop_2) = generate_identity(); - let (_sk_3, pk_3, pop_3) = generate_identity(); - initialize_test_validator(&pk_1, &pop_1, validator_1, 100, false, false); - initialize_test_validator(&pk_2, &pop_2, validator_2, 100, false, false); - initialize_test_validator(&pk_3, &pop_3, validator_3, 100, false, false); - - // Validator 1 and 2 join the validator set. - join_validator_set(validator_2, validator_2_address); - join_validator_set(validator_1, validator_1_address); - end_epoch(); - assert!(get_validator_state(validator_1_address) == VALIDATOR_STATUS_ACTIVE, 0); - assert!(get_validator_state(validator_2_address) == VALIDATOR_STATUS_ACTIVE, 1); - - // Validator indices is the reverse order of the joining order. - assert_validator_state(validator_1_address, 100, 0, 0, 0, 0); - assert_validator_state(validator_2_address, 100, 0, 0, 0, 1); - let validator_set = borrow_global(@aptos_framework); - let validator_config_1 = vector::borrow(&validator_set.active_validators, 0); - assert!(validator_config_1.addr == validator_1_address, 2); - assert!(validator_config_1.config.validator_index == 0, 3); - let validator_config_2 = vector::borrow(&validator_set.active_validators, 1); - assert!(validator_config_2.addr == validator_2_address, 4); - assert!(validator_config_2.config.validator_index == 1, 5); - - // Validator 1 rotates consensus key. Validator 2 leaves. Validator 3 joins. - let (_sk_1b, pk_1b, pop_1b) = generate_identity(); - let pk_1b_bytes = bls12381::public_key_to_bytes(&pk_1b); - let pop_1b_bytes = bls12381::proof_of_possession_to_bytes(&pop_1b); - rotate_consensus_key(validator_1, validator_1_address, pk_1b_bytes, pop_1b_bytes); - leave_validator_set(validator_2, validator_2_address); - join_validator_set(validator_3, validator_3_address); - // Validator 2 is not effectively removed until next epoch. - assert!(get_validator_state(validator_2_address) == VALIDATOR_STATUS_PENDING_INACTIVE, 6); - assert!( - vector::borrow( - &borrow_global(@aptos_framework).pending_inactive, - 0 - ).addr == validator_2_address, - 0 - ); - // Validator 3 is not effectively added until next epoch. - assert!(get_validator_state(validator_3_address) == VALIDATOR_STATUS_PENDING_ACTIVE, 7); - assert!( - vector::borrow( - &borrow_global(@aptos_framework).pending_active, - 0 - ).addr == validator_3_address, - 0 - ); - assert!( - vector::borrow( - &borrow_global(@aptos_framework).active_validators, - 0 - ).config.consensus_pubkey == pk_1_bytes, - 0 - ); - - // Changes applied after new epoch - end_epoch(); - assert!(get_validator_state(validator_1_address) == VALIDATOR_STATUS_ACTIVE, 8); - assert_validator_state(validator_1_address, 101, 0, 0, 0, 0); - assert!(get_validator_state(validator_2_address) == VALIDATOR_STATUS_INACTIVE, 9); - // The validator index of validator 2 stays the same but this doesn't matter as the next time they rejoin the - // validator set, their index will get set correctly. - assert_validator_state(validator_2_address, 101, 0, 0, 0, 1); - assert!(get_validator_state(validator_3_address) == VALIDATOR_STATUS_ACTIVE, 10); - assert_validator_state(validator_3_address, 100, 0, 0, 0, 1); - assert!( - vector::borrow( - &borrow_global(@aptos_framework).active_validators, - 0 - ).config.consensus_pubkey == pk_1b_bytes, - 0 - ); - - // Validators without enough stake will be removed. - unlock(validator_1, 50); - timestamp::fast_forward_seconds(LOCKUP_CYCLE_SECONDS); - end_epoch(); - assert!(get_validator_state(validator_1_address) == VALIDATOR_STATUS_INACTIVE, 11); - } - - #[test(aptos_framework = @aptos_framework, validator = @0x123)] - public entry fun test_delegated_staking_with_owner_cap( - aptos_framework: &signer, - validator: &signer, - ) acquires AllowedValidators, OwnerCapability, StakePool, AptosCoinCapabilities, ValidatorConfig, ValidatorPerformance, ValidatorSet { - initialize_for_test_custom(aptos_framework, 100, 10000, LOCKUP_CYCLE_SECONDS, true, 1, 100, 100); - let (_sk, pk, pop) = generate_identity(); - initialize_test_validator(&pk, &pop, validator, 0, false, false); - let owner_cap = extract_owner_cap(validator); - - // Add stake when the validator is not yet activated. - add_stake_with_cap(&owner_cap, mint_coins(100)); - let pool_address = signer::address_of(validator); - assert_validator_state(pool_address, 100, 0, 0, 0, 0); - - // Join the validator set with enough stake. - join_validator_set(validator, pool_address); - end_epoch(); - assert!(get_validator_state(pool_address) == VALIDATOR_STATUS_ACTIVE, 0); - - // Unlock the entire stake. - unlock_with_cap(100, &owner_cap); - assert_validator_state(pool_address, 0, 0, 0, 100, 0); - timestamp::fast_forward_seconds(LOCKUP_CYCLE_SECONDS); - end_epoch(); - - // Withdraw stake + rewards. - assert_validator_state(pool_address, 0, 101, 0, 0, 0); - let coins = withdraw_with_cap(&owner_cap, 101); - assert!(coin::value(&coins) == 101, 1); - assert_validator_state(pool_address, 0, 0, 0, 0, 0); - - // Operator can separately rotate consensus key. - let (_sk_new, pk_new, pop_new) = generate_identity(); - let pk_new_bytes = bls12381::public_key_to_bytes(&pk_new); - let pop_new_bytes = bls12381::proof_of_possession_to_bytes(&pop_new); - rotate_consensus_key(validator, pool_address, pk_new_bytes, pop_new_bytes); - let validator_config = borrow_global(pool_address); - assert!(validator_config.consensus_pubkey == pk_new_bytes, 2); - - // Operator can update network and fullnode addresses. - update_network_and_fullnode_addresses(validator, pool_address, b"1", b"2"); - let validator_config = borrow_global(pool_address); - assert!(validator_config.network_addresses == b"1", 3); - assert!(validator_config.fullnode_addresses == b"2", 4); - - // Cleanups. - coin::register(validator); - coin::deposit(pool_address, coins); - deposit_owner_cap(validator, owner_cap); - } - - #[test(aptos_framework = @aptos_framework, validator = @0x123)] - #[expected_failure(abort_code = 0x1000A, location = Self)] - public entry fun test_validator_cannot_join_post_genesis( - aptos_framework: &signer, - validator: &signer, - ) acquires AllowedValidators, AptosCoinCapabilities, OwnerCapability, StakePool, ValidatorConfig, ValidatorPerformance, ValidatorSet { - initialize_for_test_custom(aptos_framework, 100, 10000, LOCKUP_CYCLE_SECONDS, false, 1, 100, 100); - - // Joining the validator set should fail as post genesis validator set change is not allowed. - let (_sk, pk, pop) = generate_identity(); - initialize_test_validator(&pk, &pop, validator, 100, true, true); - } - - #[test(aptos_framework = @aptos_framework, validator = @0x123)] - #[expected_failure(abort_code = 0x1000E, location = Self)] - public entry fun test_invalid_pool_address( - aptos_framework: &signer, - validator: &signer, - ) acquires AllowedValidators, AptosCoinCapabilities, OwnerCapability, StakePool, ValidatorConfig, ValidatorPerformance, ValidatorSet { - initialize_for_test(aptos_framework); - let (_sk, pk, pop) = generate_identity(); - initialize_test_validator(&pk, &pop, validator, 100, true, true); - join_validator_set(validator, @0x234); - } - - #[test(aptos_framework = @aptos_framework, validator = @0x123)] - #[expected_failure(abort_code = 0x1000A, location = Self)] - public entry fun test_validator_cannot_leave_post_genesis( - aptos_framework: &signer, - validator: &signer, - ) acquires AllowedValidators, OwnerCapability, StakePool, AptosCoinCapabilities, ValidatorConfig, ValidatorPerformance, ValidatorSet { - initialize_for_test_custom(aptos_framework, 100, 10000, LOCKUP_CYCLE_SECONDS, false, 1, 100, 100); - let (_sk, pk, pop) = generate_identity(); - initialize_test_validator(&pk, &pop, validator, 100, false, false); - - // Bypass the check to join. This is the same function called during Genesis. - let validator_address = signer::address_of(validator); - join_validator_set_internal(validator, validator_address); - end_epoch(); - - // Leaving the validator set should fail as post genesis validator set change is not allowed. - leave_validator_set(validator, validator_address); - } - - #[test( - aptos_framework = @aptos_framework, - validator_1 = @aptos_framework, - validator_2 = @0x2, - validator_3 = @0x3, - validator_4 = @0x4, - validator_5 = @0x5 - )] - fun test_validator_consensus_infos_from_validator_set( - aptos_framework: &signer, - validator_1: &signer, - validator_2: &signer, - validator_3: &signer, - validator_4: &signer, - validator_5: &signer, - ) acquires AllowedValidators, AptosCoinCapabilities, OwnerCapability, StakePool, ValidatorConfig, ValidatorPerformance, ValidatorSet { - let v1_addr = signer::address_of(validator_1); - let v2_addr = signer::address_of(validator_2); - let v3_addr = signer::address_of(validator_3); - let v4_addr = signer::address_of(validator_4); - let v5_addr = signer::address_of(validator_5); - - initialize_for_test(aptos_framework); - - let (_sk_1, pk_1, pop_1) = generate_identity(); - let (_sk_2, pk_2, pop_2) = generate_identity(); - let (_sk_3, pk_3, pop_3) = generate_identity(); - let (_sk_4, pk_4, pop_4) = generate_identity(); - let (_sk_5, pk_5, pop_5) = generate_identity(); - let pk_1_bytes = bls12381::public_key_to_bytes(&pk_1); - let pk_3_bytes = bls12381::public_key_to_bytes(&pk_3); - let pk_5_bytes = bls12381::public_key_to_bytes(&pk_5); - - initialize_test_validator(&pk_1, &pop_1, validator_1, 101, false, false); - initialize_test_validator(&pk_2, &pop_2, validator_2, 102, false, false); - initialize_test_validator(&pk_3, &pop_3, validator_3, 103, false, false); - initialize_test_validator(&pk_4, &pop_4, validator_4, 104, false, false); - initialize_test_validator(&pk_5, &pop_5, validator_5, 105, false, false); - - join_validator_set(validator_3, v3_addr); - join_validator_set(validator_1, v1_addr); - join_validator_set(validator_5, v5_addr); - end_epoch(); - let vci_vec_0 = validator_consensus_infos_from_validator_set(borrow_global(@aptos_framework)); - let vci_addrs = vector::map_ref(&vci_vec_0, |obj|{ - let vci: &ValidatorConsensusInfo = obj; - validator_consensus_info::get_addr(vci) - }); - let vci_pks = vector::map_ref(&vci_vec_0, |obj|{ - let vci: &ValidatorConsensusInfo = obj; - validator_consensus_info::get_pk_bytes(vci) - }); - let vci_voting_powers = vector::map_ref(&vci_vec_0, |obj|{ - let vci: &ValidatorConsensusInfo = obj; - validator_consensus_info::get_voting_power(vci) - }); - assert!(vector[@0x5, @aptos_framework, @0x3] == vci_addrs, 1); - assert!(vector[pk_5_bytes, pk_1_bytes, pk_3_bytes] == vci_pks, 2); - assert!(vector[105, 101, 103] == vci_voting_powers, 3); - leave_validator_set(validator_3, v3_addr); - let vci_vec_1 = validator_consensus_infos_from_validator_set(borrow_global(@aptos_framework)); - assert!(vci_vec_0 == vci_vec_1, 11); - join_validator_set(validator_2, v2_addr); - let vci_vec_2 = validator_consensus_infos_from_validator_set(borrow_global(@aptos_framework)); - assert!(vci_vec_0 == vci_vec_2, 12); - leave_validator_set(validator_1, v1_addr); - let vci_vec_3 = validator_consensus_infos_from_validator_set(borrow_global(@aptos_framework)); - assert!(vci_vec_0 == vci_vec_3, 13); - join_validator_set(validator_4, v4_addr); - let vci_vec_4 = validator_consensus_infos_from_validator_set(borrow_global(@aptos_framework)); - assert!(vci_vec_0 == vci_vec_4, 14); - } - - #[test( - aptos_framework = @aptos_framework, - validator_1 = @aptos_framework, - validator_2 = @0x2, - validator_3 = @0x3, - validator_4 = @0x4, - validator_5 = @0x5 - )] - public entry fun test_staking_validator_index( - aptos_framework: &signer, - validator_1: &signer, - validator_2: &signer, - validator_3: &signer, - validator_4: &signer, - validator_5: &signer, - ) acquires AllowedValidators, OwnerCapability, StakePool, AptosCoinCapabilities, ValidatorConfig, ValidatorPerformance, ValidatorSet { - let v1_addr = signer::address_of(validator_1); - let v2_addr = signer::address_of(validator_2); - let v3_addr = signer::address_of(validator_3); - let v4_addr = signer::address_of(validator_4); - let v5_addr = signer::address_of(validator_5); - - initialize_for_test(aptos_framework); - - let (_sk_1, pk_1, pop_1) = generate_identity(); - let (_sk_2, pk_2, pop_2) = generate_identity(); - let (_sk_3, pk_3, pop_3) = generate_identity(); - let (_sk_4, pk_4, pop_4) = generate_identity(); - let (_sk_5, pk_5, pop_5) = generate_identity(); - - initialize_test_validator(&pk_1, &pop_1, validator_1, 100, false, false); - initialize_test_validator(&pk_2, &pop_2, validator_2, 100, false, false); - initialize_test_validator(&pk_3, &pop_3, validator_3, 100, false, false); - initialize_test_validator(&pk_4, &pop_4, validator_4, 100, false, false); - initialize_test_validator(&pk_5, &pop_5, validator_5, 100, false, false); - - join_validator_set(validator_3, v3_addr); - end_epoch(); - assert!(get_validator_index(v3_addr) == 0, 0); - - join_validator_set(validator_4, v4_addr); - end_epoch(); - assert!(get_validator_index(v3_addr) == 0, 1); - assert!(get_validator_index(v4_addr) == 1, 2); - - join_validator_set(validator_1, v1_addr); - join_validator_set(validator_2, v2_addr); - // pending_inactive is appended in reverse order - end_epoch(); - assert!(get_validator_index(v3_addr) == 0, 6); - assert!(get_validator_index(v4_addr) == 1, 7); - assert!(get_validator_index(v2_addr) == 2, 8); - assert!(get_validator_index(v1_addr) == 3, 9); - - join_validator_set(validator_5, v5_addr); - end_epoch(); - assert!(get_validator_index(v3_addr) == 0, 10); - assert!(get_validator_index(v4_addr) == 1, 11); - assert!(get_validator_index(v2_addr) == 2, 12); - assert!(get_validator_index(v1_addr) == 3, 13); - assert!(get_validator_index(v5_addr) == 4, 14); - - // after swap remove, it's 3,4,2,5 - leave_validator_set(validator_1, v1_addr); - // after swap remove, it's 5,4,2 - leave_validator_set(validator_3, v3_addr); - end_epoch(); - - assert!(get_validator_index(v5_addr) == 0, 15); - assert!(get_validator_index(v4_addr) == 1, 16); - assert!(get_validator_index(v2_addr) == 2, 17); - } - - #[test(aptos_framework = @aptos_framework, validator_1 = @0x123, validator_2 = @0x234)] - public entry fun test_validator_rewards_are_performance_based( - aptos_framework: &signer, - validator_1: &signer, - validator_2: &signer, - ) acquires AllowedValidators, OwnerCapability, StakePool, AptosCoinCapabilities, ValidatorConfig, ValidatorPerformance, ValidatorSet { - initialize_for_test(aptos_framework); - - let validator_1_address = signer::address_of(validator_1); - let validator_2_address = signer::address_of(validator_2); - - // Both validators join the set. - let (_sk_1, pk_1, pop_1) = generate_identity(); - let (_sk_2, pk_2, pop_2) = generate_identity(); - initialize_test_validator(&pk_1, &pop_1, validator_1, 100, true, false); - initialize_test_validator(&pk_2, &pop_2, validator_2, 100, true, true); - - // Validator 2 failed proposal. - let failed_proposer_indices = vector::empty(); - let validator_1_index = borrow_global(validator_1_address).validator_index; - let validator_2_index = borrow_global(validator_2_address).validator_index; - vector::push_back(&mut failed_proposer_indices, validator_2_index); - let proposer_indices = option::some(validator_1_index); - update_performance_statistics(proposer_indices, failed_proposer_indices); - end_epoch(); - - // Validator 2 received no rewards. Validator 1 didn't fail proposals, so it still receives rewards. - assert_validator_state(validator_1_address, 101, 0, 0, 0, 1); - assert_validator_state(validator_2_address, 100, 0, 0, 0, 0); - - // Validator 2 decides to leave. Both validators failed proposals. - unlock(validator_2, 100); - leave_validator_set(validator_2, validator_2_address); - let failed_proposer_indices = vector::empty(); - let validator_1_index = borrow_global(validator_1_address).validator_index; - let validator_2_index = borrow_global(validator_2_address).validator_index; - vector::push_back(&mut failed_proposer_indices, validator_1_index); - vector::push_back(&mut failed_proposer_indices, validator_2_index); - update_performance_statistics(option::none(), failed_proposer_indices); - // Fast forward so validator 2's stake is fully unlocked. - timestamp::fast_forward_seconds(LOCKUP_CYCLE_SECONDS); - end_epoch(); - - // Validator 1 and 2 received no additional rewards due to failed proposals - assert_validator_state(validator_1_address, 101, 0, 0, 0, 0); - assert_validator_state(validator_2_address, 0, 100, 0, 0, 0); - } - - #[test(aptos_framework = @aptos_framework, validator_1 = @0x123, validator_2 = @0x234)] - public entry fun test_validator_rewards_rate_decrease_over_time( - aptos_framework: &signer, - validator_1: &signer, - validator_2: &signer, - ) acquires AllowedValidators, OwnerCapability, StakePool, AptosCoinCapabilities, ValidatorConfig, ValidatorPerformance, ValidatorSet { - initialize_for_test(aptos_framework); - - let genesis_time_in_secs = timestamp::now_seconds(); - - let validator_1_address = signer::address_of(validator_1); - let validator_2_address = signer::address_of(validator_2); - - // Both validators join the set. - let (_sk_1, pk_1, pop_1) = generate_identity(); - let (_sk_2, pk_2, pop_2) = generate_identity(); - initialize_test_validator(&pk_1, &pop_1, validator_1, 1000, true, false); - initialize_test_validator(&pk_2, &pop_2, validator_2, 10000, true, true); - - // One epoch passed. Validator 1 and validator 2 should receive rewards at rewards rate = 1% every epoch. - end_epoch(); - assert_validator_state(validator_1_address, 1010, 0, 0, 0, 1); - assert_validator_state(validator_2_address, 10100, 0, 0, 0, 0); - - // Enable rewards rate decrease. Initially rewards rate is still 1% every epoch. Rewards rate halves every year. - let one_year_in_secs: u64 = 31536000; - staking_config::initialize_rewards( - aptos_framework, - fixed_point64::create_from_rational(1, 100), - fixed_point64::create_from_rational(3, 1000), - one_year_in_secs, - genesis_time_in_secs, - fixed_point64::create_from_rational(50, 100), - ); - features::change_feature_flags_for_testing(aptos_framework, vector[features::get_periodical_reward_rate_decrease_feature()], vector[]); - - // For some reason, this epoch is very long. It has been 1 year since genesis when the epoch ends. - timestamp::fast_forward_seconds(one_year_in_secs - EPOCH_DURATION * 3); - end_epoch(); - // Validator 1 and validator 2 should still receive rewards at rewards rate = 1% every epoch. Rewards rate has halved after this epoch. - assert_validator_state(validator_1_address, 1020, 0, 0, 0, 1); - assert_validator_state(validator_2_address, 10200, 0, 0, 0, 0); - - // For some reason, this epoch is also very long. One year passed. - timestamp::fast_forward_seconds(one_year_in_secs - EPOCH_DURATION); - end_epoch(); - // Validator 1 and validator 2 should still receive rewards at rewards rate = 0.5% every epoch. Rewards rate has halved after this epoch. - assert_validator_state(validator_1_address, 1025, 0, 0, 0, 1); - assert_validator_state(validator_2_address, 10250, 0, 0, 0, 0); - - end_epoch(); - // Rewards rate has halved but cannot become lower than min_rewards_rate. - // Validator 1 and validator 2 should receive rewards at rewards rate = 0.3% every epoch. - assert_validator_state(validator_1_address, 1028, 0, 0, 0, 1); - assert_validator_state(validator_2_address, 10280, 0, 0, 0, 0); - } - - #[test(aptos_framework = @aptos_framework, validator = @0x123)] - public entry fun test_update_performance_statistics_should_not_fail_due_to_out_of_bounds( - aptos_framework: &signer, - validator: &signer, - ) acquires AllowedValidators, OwnerCapability, StakePool, AptosCoinCapabilities, ValidatorConfig, ValidatorPerformance, ValidatorSet { - initialize_for_test(aptos_framework); - - let validator_address = signer::address_of(validator); - let (_sk, pk, pop) = generate_identity(); - initialize_test_validator(&pk, &pop, validator, 100, true, true); - - let valid_validator_index = borrow_global(validator_address).validator_index; - let out_of_bounds_index = valid_validator_index + 100; - - // Invalid validator index in the failed proposers vector should not lead to abort. - let failed_proposer_indices = vector::empty(); - vector::push_back(&mut failed_proposer_indices, valid_validator_index); - vector::push_back(&mut failed_proposer_indices, out_of_bounds_index); - update_performance_statistics(option::none(), failed_proposer_indices); - end_epoch(); - - // Validator received no rewards due to failing to propose. - assert_validator_state(validator_address, 100, 0, 0, 0, 0); - - // Invalid validator index in the proposer should not lead to abort. - let proposer_index_optional = option::some(out_of_bounds_index); - update_performance_statistics(proposer_index_optional, vector::empty()); - end_epoch(); - } - - #[test(aptos_framework = @aptos_framework, validator = @0x123)] - #[expected_failure(abort_code = 0x1000B, location = Self)] - public entry fun test_invalid_config( - aptos_framework: &signer, - validator: &signer, - ) acquires AllowedValidators, AptosCoinCapabilities, OwnerCapability, StakePool, ValidatorConfig, ValidatorSet { - initialize_for_test_custom(aptos_framework, 50, 10000, LOCKUP_CYCLE_SECONDS, true, 1, 100, 100); - - // Call initialize_stake_owner, which only initializes the stake pool but not validator config. - let validator_address = signer::address_of(validator); - account::create_account_for_test(validator_address); - initialize_stake_owner(validator, 0, validator_address, validator_address); - mint_and_add_stake(validator, 100); - - // Join the validator set with enough stake. This should fail because the validator didn't initialize validator - // config. - join_validator_set(validator, validator_address); - } - - #[test(aptos_framework = @aptos_framework, validator = @0x123)] - public entry fun test_valid_config( - aptos_framework: &signer, - validator: &signer, - ) acquires AllowedValidators, AptosCoinCapabilities, OwnerCapability, StakePool, ValidatorConfig, ValidatorSet { - initialize_for_test_custom(aptos_framework, 50, 10000, LOCKUP_CYCLE_SECONDS, true, 1, 100, 100); - - // Call initialize_stake_owner, which only initializes the stake pool but not validator config. - let validator_address = signer::address_of(validator); - account::create_account_for_test(validator_address); - initialize_stake_owner(validator, 0, validator_address, validator_address); - mint_and_add_stake(validator, 100); - - // Initialize validator config. - let validator_address = signer::address_of(validator); - let (_sk_new, pk_new, pop_new) = generate_identity(); - let pk_new_bytes = bls12381::public_key_to_bytes(&pk_new); - let pop_new_bytes = bls12381::proof_of_possession_to_bytes(&pop_new); - rotate_consensus_key(validator, validator_address, pk_new_bytes, pop_new_bytes); - - // Join the validator set with enough stake. This now wouldn't fail since the validator config already exists. - join_validator_set(validator, validator_address); - } - - #[test] - public entry fun test_rewards_calculation() { - let stake_amount = 2000; - let num_successful_proposals = 199; - let num_total_proposals = 200; - let rewards_rate = 700; - let rewards_rate_denominator = 777; - let rewards_amount = calculate_rewards_amount( - stake_amount, - num_successful_proposals, - num_total_proposals, - rewards_rate, - rewards_rate_denominator - ); - // Consider `amount_imprecise` and `amount_precise` defined as follows: - // amount_imprecise = (stake_amount * rewards_rate / rewards_rate_denominator) * num_successful_proposals / num_total_proposals - // amount_precise = stake_amount * rewards_rate * num_successful_proposals / (rewards_rate_denominator * num_total_proposals) - // Although they are equivalent in the real arithmetic, they are not in the integer arithmetic due to a rounding error. - // With the test parameters above, `amount_imprecise` is equal to 1791 because of an unbounded rounding error - // while `amount_precise` is equal to 1792. We expect the output of `calculate_rewards_amount` to be 1792. - assert!(rewards_amount == 1792, 0); - - let stake_amount = 100000000000000000; - let num_successful_proposals = 9999; - let num_total_proposals = 10000; - let rewards_rate = 3141592; - let rewards_rate_denominator = 10000000; - // This should not abort due to an arithmetic overflow. - let rewards_amount = calculate_rewards_amount( - stake_amount, - num_successful_proposals, - num_total_proposals, - rewards_rate, - rewards_rate_denominator - ); - assert!(rewards_amount == 31412778408000000, 0); - } - - #[test_only] - public fun set_validator_perf_at_least_one_block() acquires ValidatorPerformance { - let validator_perf = borrow_global_mut(@aptos_framework); - vector::for_each_mut(&mut validator_perf.validators, |validator|{ - let validator: &mut IndividualValidatorPerformance = validator; - if (validator.successful_proposals + validator.failed_proposals < 1) { - validator.successful_proposals = 1; - }; - }); - } - - #[test(aptos_framework = @0x1, validator_1 = @0x123, validator_2 = @0x234)] - public entry fun test_removing_validator_from_active_set( - aptos_framework: &signer, - validator_1: &signer, - validator_2: &signer, - ) acquires AllowedValidators, OwnerCapability, StakePool, AptosCoinCapabilities, ValidatorConfig, ValidatorPerformance, ValidatorSet { - initialize_for_test(aptos_framework); - let (_sk_1, pk_1, pop_1) = generate_identity(); - let (_sk_2, pk_2, pop_2) = generate_identity(); - initialize_test_validator(&pk_1, &pop_1, validator_1, 100, true, false); - initialize_test_validator(&pk_2, &pop_2, validator_2, 100, true, true); - assert!(vector::length(&borrow_global(@aptos_framework).active_validators) == 2, 0); - - // Remove validator 1 from the active validator set. Only validator 2 remains. - let validator_to_remove = signer::address_of(validator_1); - remove_validators(aptos_framework, &vector[validator_to_remove]); - assert!(vector::length(&borrow_global(@aptos_framework).active_validators) == 1, 0); - assert!(get_validator_state(validator_to_remove) == VALIDATOR_STATUS_PENDING_INACTIVE, 1); - } - - #[test_only] - public fun end_epoch( - ) acquires StakePool, AptosCoinCapabilities, ValidatorConfig, ValidatorPerformance, ValidatorSet { - // Set the number of blocks to 1, to give out rewards to non-failing validators. - set_validator_perf_at_least_one_block(); - timestamp::fast_forward_seconds(EPOCH_DURATION); - reconfiguration_state::on_reconfig_start(); - on_new_epoch(); - reconfiguration_state::on_reconfig_finish(); - } - - #[test_only] - public fun assert_stake_pool( - pool_address: address, - active_stake: u64, - inactive_stake: u64, - pending_active_stake: u64, - pending_inactive_stake: u64, - ) acquires StakePool { - let stake_pool = borrow_global(pool_address); - let actual_active_stake = coin::value(&stake_pool.active); - assert!(actual_active_stake == active_stake, actual_active_stake); - let actual_inactive_stake = coin::value(&stake_pool.inactive); - assert!(actual_inactive_stake == inactive_stake, actual_inactive_stake); - let actual_pending_active_stake = coin::value(&stake_pool.pending_active); - assert!(actual_pending_active_stake == pending_active_stake, actual_pending_active_stake); - let actual_pending_inactive_stake = coin::value(&stake_pool.pending_inactive); - assert!(actual_pending_inactive_stake == pending_inactive_stake, actual_pending_inactive_stake); - } - - #[test_only] - public fun assert_validator_state( - pool_address: address, - active_stake: u64, - inactive_stake: u64, - pending_active_stake: u64, - pending_inactive_stake: u64, - validator_index: u64, - ) acquires StakePool, ValidatorConfig { - assert_stake_pool(pool_address, active_stake, inactive_stake, pending_active_stake, pending_inactive_stake); - let validator_config = borrow_global(pool_address); - assert!(validator_config.validator_index == validator_index, validator_config.validator_index); - } - - #[test(aptos_framework = @0x1, validator = @0x123)] - public entry fun test_allowed_validators( - aptos_framework: &signer, - validator: &signer, - ) acquires AllowedValidators, OwnerCapability, StakePool, ValidatorSet { - let addr = signer::address_of(validator); - let (burn, mint) = aptos_coin::initialize_for_test(aptos_framework); - configure_allowed_validators(aptos_framework, vector[addr]); - - account::create_account_for_test(addr); - coin::register(validator); - initialize_stake_owner(validator, 0, addr, addr); - coin::destroy_burn_cap(burn); - coin::destroy_mint_cap(mint); - } - - #[test(aptos_framework = @0x1, validator = @0x123)] - #[expected_failure(abort_code = 0x60011, location = Self)] - public entry fun test_not_allowed_validators( - aptos_framework: &signer, - validator: &signer, - ) acquires AllowedValidators, OwnerCapability, StakePool, ValidatorSet { - configure_allowed_validators(aptos_framework, vector[]); - let (burn, mint) = aptos_coin::initialize_for_test(aptos_framework); - - let addr = signer::address_of(validator); - account::create_account_for_test(addr); - coin::register(validator); - initialize_stake_owner(validator, 0, addr, addr); - coin::destroy_burn_cap(burn); - coin::destroy_mint_cap(mint); - } - - #[test_only] - public fun with_rewards(amount: u64): u64 { - let (numerator, denominator) = staking_config::get_reward_rate(&staking_config::get()); - amount + amount * numerator / denominator - } -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/staking_config.move b/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/staking_config.move deleted file mode 100644 index aff41b494..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/staking_config.move +++ /dev/null @@ -1,686 +0,0 @@ -/// Provides the configuration for staking and rewards -module aptos_framework::staking_config { - use std::error; - use std::features; - - use aptos_framework::system_addresses; - use aptos_framework::timestamp; - - use aptos_std::fixed_point64::{Self, FixedPoint64, less_or_equal}; - use aptos_std::math_fixed64; - - friend aptos_framework::genesis; - friend aptos_framework::stake; - - /// Stake lockup duration cannot be zero. - const EZERO_LOCKUP_DURATION: u64 = 1; - /// Reward rate denominator cannot be zero. - const EZERO_REWARDS_RATE_DENOMINATOR: u64 = 2; - /// Specified stake range is invalid. Max must be greater than min. - const EINVALID_STAKE_RANGE: u64 = 3; - /// The voting power increase limit percentage must be within (0, 50]. - const EINVALID_VOTING_POWER_INCREASE_LIMIT: u64 = 4; - /// Specified rewards rate is invalid, which must be within [0, MAX_REWARDS_RATE]. - const EINVALID_REWARDS_RATE: u64 = 5; - /// Specified min rewards rate is invalid, which must be within [0, rewards_rate]. - const EINVALID_MIN_REWARDS_RATE: u64 = 6; - /// Specified start time of last rewards rate period is invalid, which must be not late than the current timestamp. - const EINVALID_LAST_REWARDS_RATE_PERIOD_START: u64 = 7; - /// Specified rewards rate decrease rate is invalid, which must be not greater than BPS_DENOMINATOR. - const EINVALID_REWARDS_RATE_DECREASE_RATE: u64 = 8; - /// Specified rewards rate period is invalid. It must be larger than 0 and cannot be changed if configured. - const EINVALID_REWARDS_RATE_PERIOD: u64 = 9; - /// The function has been deprecated. - const EDEPRECATED_FUNCTION: u64 = 10; - /// The function is disabled or hasn't been enabled. - const EDISABLED_FUNCTION: u64 = 11; - - /// Limit the maximum value of `rewards_rate` in order to avoid any arithmetic overflow. - const MAX_REWARDS_RATE: u64 = 1000000; - /// Denominator of number in basis points. 1 bps(basis points) = 0.01%. - const BPS_DENOMINATOR: u64 = 10000; - /// 1 year => 365 * 24 * 60 * 60 - const ONE_YEAR_IN_SECS: u64 = 31536000; - - const MAX_U64: u128 = 18446744073709551615; - - - /// Validator set configurations that will be stored with the @aptos_framework account. - struct StakingConfig has copy, drop, key { - // A validator needs to stake at least this amount to be able to join the validator set. - // If after joining the validator set and at the start of any epoch, a validator's stake drops below this amount - // they will be removed from the set. - minimum_stake: u64, - // A validator can only stake at most this amount. Any larger stake will be rejected. - // If after joining the validator set and at the start of any epoch, a validator's stake exceeds this amount, - // their voting power and rewards would only be issued for the max stake amount. - maximum_stake: u64, - recurring_lockup_duration_secs: u64, - // Whether validators are allow to join/leave post genesis. - allow_validator_set_change: bool, - // DEPRECATING: staking reward configurations will be in StakingRewardsConfig once REWARD_RATE_DECREASE flag is enabled. - // The maximum rewards given out every epoch. This will be divided by the rewards rate denominator. - // For example, 0.001% (0.00001) can be represented as 10 / 1000000. - rewards_rate: u64, - // DEPRECATING: staking reward configurations will be in StakingRewardsConfig once REWARD_RATE_DECREASE flag is enabled. - rewards_rate_denominator: u64, - // Only this % of current total voting power is allowed to join the validator set in each epoch. - // This is necessary to prevent a massive amount of new stake from joining that can potentially take down the - // network if corresponding validators are not ready to participate in consensus in time. - // This value is within (0, 50%), not inclusive. - voting_power_increase_limit: u64, - } - - /// Staking reward configurations that will be stored with the @aptos_framework account. - struct StakingRewardsConfig has copy, drop, key { - // The target rewards rate given out every epoch. This will be divided by the rewards rate denominator. - // For example, 0.001% (0.00001) can be represented as 10 / 1000000. - rewards_rate: FixedPoint64, - // The minimum threshold for rewards_rate. rewards_rate won't be lower than this. - // This will be divided by the rewards rate denominator. - min_rewards_rate: FixedPoint64, - // Reward rate decreases every rewards_rate_period_in_secs seconds. - // Currently it can only equal to 1 year. Keep this field as a plceholder so we can change the reward period - // without adding new struct. - rewards_rate_period_in_secs: u64, - // Timestamp of start of last rewards period. - last_rewards_rate_period_start_in_secs: u64, - // Rate of reward rate decrease in BPS. 1 bps(basis points) = 0.01%. - rewards_rate_decrease_rate: FixedPoint64, - } - - /// Only called during genesis. - public(friend) fun initialize( - aptos_framework: &signer, - minimum_stake: u64, - maximum_stake: u64, - recurring_lockup_duration_secs: u64, - allow_validator_set_change: bool, - rewards_rate: u64, - rewards_rate_denominator: u64, - voting_power_increase_limit: u64, - ) { - system_addresses::assert_aptos_framework(aptos_framework); - - // This can fail genesis but is necessary so that any misconfigurations can be corrected before genesis succeeds - validate_required_stake(minimum_stake, maximum_stake); - - assert!(recurring_lockup_duration_secs > 0, error::invalid_argument(EZERO_LOCKUP_DURATION)); - assert!( - rewards_rate_denominator > 0, - error::invalid_argument(EZERO_REWARDS_RATE_DENOMINATOR), - ); - assert!( - voting_power_increase_limit > 0 && voting_power_increase_limit <= 50, - error::invalid_argument(EINVALID_VOTING_POWER_INCREASE_LIMIT), - ); - - // `rewards_rate` which is the numerator is limited to be `<= MAX_REWARDS_RATE` in order to avoid the arithmetic - // overflow in the rewards calculation. `rewards_rate_denominator` can be adjusted to get the desired rewards - // rate (i.e., rewards_rate / rewards_rate_denominator). - assert!(rewards_rate <= MAX_REWARDS_RATE, error::invalid_argument(EINVALID_REWARDS_RATE)); - - // We assert that (rewards_rate / rewards_rate_denominator <= 1). - assert!(rewards_rate <= rewards_rate_denominator, error::invalid_argument(EINVALID_REWARDS_RATE)); - - move_to(aptos_framework, StakingConfig { - minimum_stake, - maximum_stake, - recurring_lockup_duration_secs, - allow_validator_set_change, - rewards_rate, - rewards_rate_denominator, - voting_power_increase_limit, - }); - } - - #[view] - /// Return the reward rate of this epoch as a tuple (numerator, denominator). - public fun reward_rate(): (u64, u64) acquires StakingRewardsConfig, StakingConfig { - get_reward_rate(borrow_global(@aptos_framework)) - } - - /// Initialize rewards configurations. - /// Can only be called as part of the Aptos governance proposal process established by the AptosGovernance module. - public fun initialize_rewards( - aptos_framework: &signer, - rewards_rate: FixedPoint64, - min_rewards_rate: FixedPoint64, - rewards_rate_period_in_secs: u64, - last_rewards_rate_period_start_in_secs: u64, - rewards_rate_decrease_rate: FixedPoint64, - ) { - system_addresses::assert_aptos_framework(aptos_framework); - - validate_rewards_config( - rewards_rate, - min_rewards_rate, - rewards_rate_period_in_secs, - rewards_rate_decrease_rate, - ); - assert!( - timestamp::now_seconds() >= last_rewards_rate_period_start_in_secs, - error::invalid_argument(EINVALID_LAST_REWARDS_RATE_PERIOD_START) - ); - - move_to(aptos_framework, StakingRewardsConfig { - rewards_rate, - min_rewards_rate, - rewards_rate_period_in_secs, - last_rewards_rate_period_start_in_secs, - rewards_rate_decrease_rate, - }); - } - - public fun get(): StakingConfig acquires StakingConfig { - *borrow_global(@aptos_framework) - } - - /// Return whether validator set changes are allowed - public fun get_allow_validator_set_change(config: &StakingConfig): bool { - config.allow_validator_set_change - } - - /// Return the required min/max stake. - public fun get_required_stake(config: &StakingConfig): (u64, u64) { - (config.minimum_stake, config.maximum_stake) - } - - /// Return the recurring lockup duration that every validator is automatically renewed for (unless they unlock and - /// withdraw all funds). - public fun get_recurring_lockup_duration(config: &StakingConfig): u64 { - config.recurring_lockup_duration_secs - } - - /// Return the reward rate of this epoch. - public fun get_reward_rate(config: &StakingConfig): (u64, u64) acquires StakingRewardsConfig { - if (features::periodical_reward_rate_decrease_enabled()) { - let epoch_rewards_rate = borrow_global(@aptos_framework).rewards_rate; - if (fixed_point64::is_zero(epoch_rewards_rate)) { - (0u64, 1u64) - } else { - // Maximize denominator for higher precision. - // Restriction: nominator <= MAX_REWARDS_RATE && denominator <= MAX_U64 - let denominator = fixed_point64::divide_u128((MAX_REWARDS_RATE as u128), epoch_rewards_rate); - if (denominator > MAX_U64) { - denominator = MAX_U64 - }; - let nominator = (fixed_point64::multiply_u128(denominator, epoch_rewards_rate) as u64); - (nominator, (denominator as u64)) - } - } else { - (config.rewards_rate, config.rewards_rate_denominator) - } - } - - /// Return the joining limit %. - public fun get_voting_power_increase_limit(config: &StakingConfig): u64 { - config.voting_power_increase_limit - } - - /// Calculate and save the latest rewards rate. - public(friend) fun calculate_and_save_latest_epoch_rewards_rate(): FixedPoint64 acquires StakingRewardsConfig { - assert!(features::periodical_reward_rate_decrease_enabled(), error::invalid_state(EDISABLED_FUNCTION)); - let staking_rewards_config = calculate_and_save_latest_rewards_config(); - staking_rewards_config.rewards_rate - } - - /// Calculate and return the up-to-date StakingRewardsConfig. - fun calculate_and_save_latest_rewards_config(): StakingRewardsConfig acquires StakingRewardsConfig { - let staking_rewards_config = borrow_global_mut(@aptos_framework); - let current_time_in_secs = timestamp::now_seconds(); - assert!( - current_time_in_secs >= staking_rewards_config.last_rewards_rate_period_start_in_secs, - error::invalid_argument(EINVALID_LAST_REWARDS_RATE_PERIOD_START) - ); - if (current_time_in_secs - staking_rewards_config.last_rewards_rate_period_start_in_secs < staking_rewards_config.rewards_rate_period_in_secs) { - return *staking_rewards_config - }; - // Rewards rate decrease rate cannot be greater than 100%. Otherwise rewards rate will be negative. - assert!( - fixed_point64::ceil(staking_rewards_config.rewards_rate_decrease_rate) <= 1, - error::invalid_argument(EINVALID_REWARDS_RATE_DECREASE_RATE) - ); - let new_rate = math_fixed64::mul_div( - staking_rewards_config.rewards_rate, - fixed_point64::sub( - fixed_point64::create_from_u128(1), - staking_rewards_config.rewards_rate_decrease_rate, - ), - fixed_point64::create_from_u128(1), - ); - new_rate = fixed_point64::max(new_rate, staking_rewards_config.min_rewards_rate); - - staking_rewards_config.rewards_rate = new_rate; - staking_rewards_config.last_rewards_rate_period_start_in_secs = - staking_rewards_config.last_rewards_rate_period_start_in_secs + - staking_rewards_config.rewards_rate_period_in_secs; - return *staking_rewards_config - } - - /// Update the min and max stake amounts. - /// Can only be called as part of the Aptos governance proposal process established by the AptosGovernance module. - public fun update_required_stake( - aptos_framework: &signer, - minimum_stake: u64, - maximum_stake: u64, - ) acquires StakingConfig { - system_addresses::assert_aptos_framework(aptos_framework); - validate_required_stake(minimum_stake, maximum_stake); - - let staking_config = borrow_global_mut(@aptos_framework); - staking_config.minimum_stake = minimum_stake; - staking_config.maximum_stake = maximum_stake; - } - - /// Update the recurring lockup duration. - /// Can only be called as part of the Aptos governance proposal process established by the AptosGovernance module. - public fun update_recurring_lockup_duration_secs( - aptos_framework: &signer, - new_recurring_lockup_duration_secs: u64, - ) acquires StakingConfig { - assert!(new_recurring_lockup_duration_secs > 0, error::invalid_argument(EZERO_LOCKUP_DURATION)); - system_addresses::assert_aptos_framework(aptos_framework); - - let staking_config = borrow_global_mut(@aptos_framework); - staking_config.recurring_lockup_duration_secs = new_recurring_lockup_duration_secs; - } - - /// DEPRECATING - /// Update the rewards rate. - /// Can only be called as part of the Aptos governance proposal process established by the AptosGovernance module. - public fun update_rewards_rate( - aptos_framework: &signer, - new_rewards_rate: u64, - new_rewards_rate_denominator: u64, - ) acquires StakingConfig { - assert!(!features::periodical_reward_rate_decrease_enabled(), error::invalid_state(EDEPRECATED_FUNCTION)); - system_addresses::assert_aptos_framework(aptos_framework); - assert!( - new_rewards_rate_denominator > 0, - error::invalid_argument(EZERO_REWARDS_RATE_DENOMINATOR), - ); - // `rewards_rate` which is the numerator is limited to be `<= MAX_REWARDS_RATE` in order to avoid the arithmetic - // overflow in the rewards calculation. `rewards_rate_denominator` can be adjusted to get the desired rewards - // rate (i.e., rewards_rate / rewards_rate_denominator). - assert!(new_rewards_rate <= MAX_REWARDS_RATE, error::invalid_argument(EINVALID_REWARDS_RATE)); - - // We assert that (rewards_rate / rewards_rate_denominator <= 1). - assert!(new_rewards_rate <= new_rewards_rate_denominator, error::invalid_argument(EINVALID_REWARDS_RATE)); - - let staking_config = borrow_global_mut(@aptos_framework); - staking_config.rewards_rate = new_rewards_rate; - staking_config.rewards_rate_denominator = new_rewards_rate_denominator; - } - - public fun update_rewards_config( - aptos_framework: &signer, - rewards_rate: FixedPoint64, - min_rewards_rate: FixedPoint64, - rewards_rate_period_in_secs: u64, - rewards_rate_decrease_rate: FixedPoint64, - ) acquires StakingRewardsConfig { - system_addresses::assert_aptos_framework(aptos_framework); - - validate_rewards_config( - rewards_rate, - min_rewards_rate, - rewards_rate_period_in_secs, - rewards_rate_decrease_rate, - ); - - let staking_rewards_config = borrow_global_mut(@aptos_framework); - // Currently rewards_rate_period_in_secs is not allowed to be changed because this could bring complicated - // logics. At the moment the argument is just a placeholder for future use. - assert!( - rewards_rate_period_in_secs == staking_rewards_config.rewards_rate_period_in_secs, - error::invalid_argument(EINVALID_REWARDS_RATE_PERIOD), - ); - staking_rewards_config.rewards_rate = rewards_rate; - staking_rewards_config.min_rewards_rate = min_rewards_rate; - staking_rewards_config.rewards_rate_period_in_secs = rewards_rate_period_in_secs; - staking_rewards_config.rewards_rate_decrease_rate = rewards_rate_decrease_rate; - } - - /// Update the joining limit %. - /// Can only be called as part of the Aptos governance proposal process established by the AptosGovernance module. - public fun update_voting_power_increase_limit( - aptos_framework: &signer, - new_voting_power_increase_limit: u64, - ) acquires StakingConfig { - system_addresses::assert_aptos_framework(aptos_framework); - assert!( - new_voting_power_increase_limit > 0 && new_voting_power_increase_limit <= 50, - error::invalid_argument(EINVALID_VOTING_POWER_INCREASE_LIMIT), - ); - - let staking_config = borrow_global_mut(@aptos_framework); - staking_config.voting_power_increase_limit = new_voting_power_increase_limit; - } - - fun validate_required_stake(minimum_stake: u64, maximum_stake: u64) { - assert!(minimum_stake <= maximum_stake && maximum_stake > 0, error::invalid_argument(EINVALID_STAKE_RANGE)); - } - - fun validate_rewards_config( - rewards_rate: FixedPoint64, - min_rewards_rate: FixedPoint64, - rewards_rate_period_in_secs: u64, - rewards_rate_decrease_rate: FixedPoint64, - ) { - // Bound rewards rate to avoid arithmetic overflow. - assert!( - less_or_equal(rewards_rate, fixed_point64::create_from_u128((1u128))), - error::invalid_argument(EINVALID_REWARDS_RATE) - ); - assert!( - less_or_equal(min_rewards_rate, rewards_rate), - error::invalid_argument(EINVALID_MIN_REWARDS_RATE) - ); - // Rewards rate decrease rate cannot be greater than 100%. Otherwise rewards rate will be negative. - assert!( - fixed_point64::ceil(rewards_rate_decrease_rate) <= 1, - error::invalid_argument(EINVALID_REWARDS_RATE_DECREASE_RATE) - ); - // This field, rewards_rate_period_in_secs must be greater than 0. - // TODO: rewards_rate_period_in_secs should be longer than the epoch duration but reading epoch duration causes a circular dependency. - assert!( - rewards_rate_period_in_secs > 0, - error::invalid_argument(EINVALID_REWARDS_RATE_PERIOD), - ); - } - - #[test_only] - use aptos_std::fixed_point64::{equal, create_from_rational}; - - #[test(aptos_framework = @aptos_framework)] - public entry fun test_change_staking_configs(aptos_framework: signer) acquires StakingConfig { - initialize(&aptos_framework, 0, 1, 1, false, 1, 1, 1); - - update_required_stake(&aptos_framework, 100, 1000); - update_recurring_lockup_duration_secs(&aptos_framework, 10000); - update_rewards_rate(&aptos_framework, 10, 100); - update_voting_power_increase_limit(&aptos_framework, 10); - - let config = borrow_global(@aptos_framework); - assert!(config.minimum_stake == 100, 0); - assert!(config.maximum_stake == 1000, 1); - assert!(config.recurring_lockup_duration_secs == 10000, 3); - assert!(config.rewards_rate == 10, 4); - assert!(config.rewards_rate_denominator == 100, 4); - assert!(config.voting_power_increase_limit == 10, 5); - } - - #[test(aptos_framework = @aptos_framework)] - public entry fun test_staking_rewards_rate_decrease_over_time(aptos_framework: signer) acquires StakingRewardsConfig { - let start_time_in_secs: u64 = 100001000000; - initialize_rewards_for_test( - &aptos_framework, - create_from_rational(1, 100), - create_from_rational(3, 1000), - ONE_YEAR_IN_SECS, - start_time_in_secs, - create_from_rational(50, 100) - ); - - let epoch_reward_rate = calculate_and_save_latest_epoch_rewards_rate(); - assert!(equal(epoch_reward_rate, create_from_rational(1, 100)), 0); - // Rewards rate should not change until the current reward rate period ends. - timestamp::fast_forward_seconds(ONE_YEAR_IN_SECS / 2); - epoch_reward_rate = calculate_and_save_latest_epoch_rewards_rate(); - assert!(equal(epoch_reward_rate, create_from_rational(1, 100)), 1); - - // Rewards rate decreases to 1 / 100 * 5000 / 10000 = 5 / 1000. - timestamp::fast_forward_seconds(ONE_YEAR_IN_SECS / 2); - epoch_reward_rate = calculate_and_save_latest_epoch_rewards_rate(); - assert!(equal(epoch_reward_rate, create_from_rational(5, 1000)), 2); - - // Rewards rate decreases to 5 / 1000 * 5000 / 10000 = 2.5 / 1000. - // But rewards_rate cannot be lower than min_rewards_rate = 3 / 1000. - timestamp::fast_forward_seconds(ONE_YEAR_IN_SECS); - epoch_reward_rate = calculate_and_save_latest_epoch_rewards_rate(); - assert!(equal(epoch_reward_rate, create_from_rational(3, 1000)), 3); - - // Test when rewards_rate_decrease_rate is very small - update_rewards_config( - &aptos_framework, - epoch_reward_rate, - create_from_rational(0, 1000), - ONE_YEAR_IN_SECS, - create_from_rational(15, 1000), - ); - // Rewards rate decreases to 3 / 1000 * 985 / 1000 = 2955 / 1000000. - timestamp::fast_forward_seconds(ONE_YEAR_IN_SECS); - epoch_reward_rate = calculate_and_save_latest_epoch_rewards_rate(); - assert!( - fixed_point64::almost_equal( - epoch_reward_rate, - create_from_rational(2955, 1000000), - create_from_rational(1, 100000000) - ), - 4); - } - - #[test(aptos_framework = @aptos_framework)] - public entry fun test_change_staking_rewards_configs(aptos_framework: signer) acquires StakingRewardsConfig { - let start_time_in_secs: u64 = 100001000000; - initialize_rewards_for_test( - &aptos_framework, - create_from_rational(1, 100), - create_from_rational(3, 1000), - ONE_YEAR_IN_SECS, - start_time_in_secs, - create_from_rational(50, 100), - ); - - update_rewards_config( - &aptos_framework, - create_from_rational(2, 100), - create_from_rational(6, 1000), - ONE_YEAR_IN_SECS, - create_from_rational(25, 100), - ); - - let config = borrow_global(@aptos_framework); - assert!(equal(config.rewards_rate, create_from_rational(2, 100)), 0); - assert!(equal(config.min_rewards_rate, create_from_rational(6, 1000)), 1); - assert!(config.rewards_rate_period_in_secs == ONE_YEAR_IN_SECS, 4); - assert!(config.last_rewards_rate_period_start_in_secs == start_time_in_secs, 4); - assert!(equal(config.rewards_rate_decrease_rate, create_from_rational(25, 100)), 5); - } - - #[test(account = @0x123)] - #[expected_failure(abort_code = 0x50003, location = aptos_framework::system_addresses)] - public entry fun test_update_required_stake_unauthorized_should_fail(account: signer) acquires StakingConfig { - update_required_stake(&account, 1, 2); - } - - #[test(account = @0x123)] - #[expected_failure(abort_code = 0x50003, location = aptos_framework::system_addresses)] - public entry fun test_update_required_lockup_unauthorized_should_fail(account: signer) acquires StakingConfig { - update_recurring_lockup_duration_secs(&account, 1); - } - - #[test(account = @0x123)] - #[expected_failure(abort_code = 0x50003, location = aptos_framework::system_addresses)] - public entry fun test_update_rewards_unauthorized_should_fail(account: signer) acquires StakingConfig { - update_rewards_rate(&account, 1, 10); - } - - #[test(account = @0x123)] - #[expected_failure(abort_code = 0x50003, location = aptos_framework::system_addresses)] - public entry fun test_update_voting_power_increase_limit_unauthorized_should_fail(account: signer) acquires StakingConfig { - update_voting_power_increase_limit(&account, 10); - } - - #[test(account = @0x123, aptos_framework = @aptos_framework)] - #[expected_failure(abort_code = 0x50003, location = aptos_framework::system_addresses)] - public entry fun test_update_rewards_config_unauthorized_should_fail(account: signer, aptos_framework: signer) acquires StakingRewardsConfig { - features::change_feature_flags_for_testing(&aptos_framework, vector[features::get_periodical_reward_rate_decrease_feature()], vector[]); - update_rewards_config( - &account, - create_from_rational(1, 100), - create_from_rational(1, 100), - ONE_YEAR_IN_SECS, - create_from_rational(1, 100), - ); - } - - #[test(aptos_framework = @aptos_framework)] - #[expected_failure(abort_code = 0x10003, location = Self)] - public entry fun test_update_required_stake_invalid_range_should_fail(aptos_framework: signer) acquires StakingConfig { - update_required_stake(&aptos_framework, 10, 5); - } - - #[test(aptos_framework = @aptos_framework)] - #[expected_failure(abort_code = 0x10003, location = Self)] - public entry fun test_update_required_stake_zero_max_stake_should_fail(aptos_framework: signer) acquires StakingConfig { - update_required_stake(&aptos_framework, 0, 0); - } - - #[test(aptos_framework = @aptos_framework)] - #[expected_failure(abort_code = 0x10001, location = Self)] - public entry fun test_update_required_lockup_to_zero_should_fail(aptos_framework: signer) acquires StakingConfig { - update_recurring_lockup_duration_secs(&aptos_framework, 0); - } - - #[test(aptos_framework = @aptos_framework)] - #[expected_failure(abort_code = 0x10002, location = Self)] - public entry fun test_update_rewards_invalid_denominator_should_fail(aptos_framework: signer) acquires StakingConfig { - update_rewards_rate(&aptos_framework, 1, 0); - } - - #[test(aptos_framework = @aptos_framework)] - #[expected_failure(abort_code = 0x10005, location = Self)] - public entry fun test_update_rewards_config_rewards_rate_greater_than_1_should_fail(aptos_framework: signer) acquires StakingRewardsConfig { - let start_time_in_secs: u64 = 100001000000; - initialize_rewards_for_test( - &aptos_framework, - create_from_rational(15981, 1000000000), - create_from_rational(7991, 1000000000), - ONE_YEAR_IN_SECS, - start_time_in_secs, - create_from_rational(15, 1000), - ); - update_rewards_config( - &aptos_framework, - create_from_rational(101, 100), - create_from_rational(1, 100), - ONE_YEAR_IN_SECS, - create_from_rational(1, 100), - ); - } - - #[test(aptos_framework = @aptos_framework)] - #[expected_failure(abort_code = 0x10008, location = Self)] - public entry fun test_update_rewards_config_invalid_rewards_rate_decrease_rate_should_fail(aptos_framework: signer) acquires StakingRewardsConfig { - let start_time_in_secs: u64 = 100001000000; - initialize_rewards_for_test( - &aptos_framework, - create_from_rational(15981, 1000000000), - create_from_rational(7991, 1000000000), - ONE_YEAR_IN_SECS, - start_time_in_secs, - create_from_rational(15, 1000), - ); - update_rewards_config( - &aptos_framework, - create_from_rational(1, 100), - create_from_rational(1, 100), - ONE_YEAR_IN_SECS, - create_from_rational(101, 100), - ); - } - - #[test(aptos_framework = @aptos_framework)] - #[expected_failure(abort_code = 0x10009, location = Self)] - public entry fun test_update_rewards_config_cannot_change_rewards_rate_period(aptos_framework: signer) acquires StakingRewardsConfig { - let start_time_in_secs: u64 = 100001000000; - initialize_rewards_for_test( - &aptos_framework, - create_from_rational(15981, 1000000000), - create_from_rational(7991, 1000000000), - ONE_YEAR_IN_SECS, - start_time_in_secs, - create_from_rational(15, 1000), - ); - update_rewards_config( - &aptos_framework, - create_from_rational(15981, 1000000000), - create_from_rational(7991, 1000000000), - ONE_YEAR_IN_SECS - 1, - create_from_rational(15, 1000), - ); - } - - #[test(aptos_framework = @aptos_framework)] - #[expected_failure(abort_code = 0x3000B, location = Self)] - public entry fun test_feature_flag_disabled_get_epoch_rewards_rate_should_fail(aptos_framework: signer) acquires StakingRewardsConfig { - features::change_feature_flags_for_testing(&aptos_framework, vector[], vector[features::get_periodical_reward_rate_decrease_feature()]); - calculate_and_save_latest_epoch_rewards_rate(); - } - - #[test(aptos_framework = @aptos_framework)] - #[expected_failure(abort_code = 0x10004, location = Self)] - public entry fun test_update_voting_power_increase_limit_to_zero_should_fail( - aptos_framework: signer - ) acquires StakingConfig { - update_voting_power_increase_limit(&aptos_framework, 0); - } - - #[test(aptos_framework = @aptos_framework)] - #[expected_failure(abort_code = 0x10004, location = aptos_framework::staking_config)] - public entry fun test_update_voting_power_increase_limit_to_more_than_upper_bound_should_fail( - aptos_framework: signer - ) acquires StakingConfig { - update_voting_power_increase_limit(&aptos_framework, 51); - } - - // For tests to bypass all validations. - #[test_only] - public fun initialize_for_test( - aptos_framework: &signer, - minimum_stake: u64, - maximum_stake: u64, - recurring_lockup_duration_secs: u64, - allow_validator_set_change: bool, - rewards_rate: u64, - rewards_rate_denominator: u64, - voting_power_increase_limit: u64, - ) { - if (!exists(@aptos_framework)) { - move_to(aptos_framework, StakingConfig { - minimum_stake, - maximum_stake, - recurring_lockup_duration_secs, - allow_validator_set_change, - rewards_rate, - rewards_rate_denominator, - voting_power_increase_limit, - }); - }; - } - - // For tests to bypass all validations. - #[test_only] - public fun initialize_rewards_for_test( - aptos_framework: &signer, - rewards_rate: FixedPoint64, - min_rewards_rate: FixedPoint64, - rewards_rate_period_in_micros: u64, - last_rewards_rate_period_start_in_secs: u64, - rewards_rate_decrease_rate: FixedPoint64, - ) { - features::change_feature_flags_for_testing(aptos_framework, vector[features::get_periodical_reward_rate_decrease_feature()], vector[]); - timestamp::set_time_has_started_for_testing(aptos_framework); - timestamp::update_global_time_for_test_secs(last_rewards_rate_period_start_in_secs); - initialize_rewards( - aptos_framework, - rewards_rate, - min_rewards_rate, - rewards_rate_period_in_micros, - last_rewards_rate_period_start_in_secs, - rewards_rate_decrease_rate, - ); - } -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/staking_contract.move b/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/staking_contract.move deleted file mode 100644 index 2e6232d79..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/staking_contract.move +++ /dev/null @@ -1,1627 +0,0 @@ -/// Allow stakers and operators to enter a staking contract with reward sharing. -/// The main accounting logic in a staking contract consists of 2 parts: -/// 1. Tracks how much commission needs to be paid out to the operator. This is tracked with an increasing principal -/// amount that's updated every time the operator requests commission, the staker withdraws funds, or the staker -/// switches operators. -/// 2. Distributions of funds to operators (commissions) and stakers (stake withdrawals) use the shares model provided -/// by the pool_u64 to track shares that increase in price as the stake pool accumulates rewards. -/// -/// Example flow: -/// 1. A staker creates a staking contract with an operator by calling create_staking_contract() with 100 coins of -/// initial stake and commission = 10%. This means the operator will receive 10% of any accumulated rewards. A new stake -/// pool will be created and hosted in a separate account that's controlled by the staking contract. -/// 2. The operator sets up a validator node and, once ready, joins the validator set by calling stake::join_validator_set -/// 3. After some time, the stake pool gains rewards and now has 150 coins. -/// 4. Operator can now call request_commission. 10% of (150 - 100) = 5 coins will be unlocked from the stake pool. The -/// staker's principal is now updated from 100 to 145 (150 coins - 5 coins of commission). The pending distribution pool -/// has 5 coins total and the operator owns all 5 shares of it. -/// 5. Some more time has passed. The pool now has 50 more coins in rewards and a total balance of 195. The operator -/// calls request_commission again. Since the previous 5 coins have now become withdrawable, it'll be deposited into the -/// operator's account first. Their new commission will be 10% of (195 coins - 145 principal) = 5 coins. Principal is -/// updated to be 190 (195 - 5). Pending distribution pool has 5 coins and operator owns all 5 shares. -/// 6. Staker calls unlock_stake to unlock 50 coins of stake, which gets added to the pending distribution pool. Based -/// on shares math, staker will be owning 50 shares and operator still owns 5 shares of the 55-coin pending distribution -/// pool. -/// 7. Some time passes and the 55 coins become fully withdrawable from the stake pool. Due to accumulated rewards, the -/// 55 coins become 70 coins. Calling distribute() distributes 6 coins to the operator and 64 coins to the validator. -module aptos_framework::staking_contract { - use std::bcs; - use std::error; - use std::features; - use std::signer; - use std::vector; - - use aptos_std::pool_u64::{Self, Pool}; - use aptos_std::simple_map::{Self, SimpleMap}; - - use aptos_framework::account::{Self, SignerCapability}; - use aptos_framework::aptos_account; - use aptos_framework::aptos_coin::AptosCoin; - use aptos_framework::coin::{Self, Coin}; - use aptos_framework::event::{EventHandle, emit, emit_event}; - use aptos_framework::stake::{Self, OwnerCapability}; - use aptos_framework::staking_config; - - const SALT: vector = b"aptos_framework::staking_contract"; - - /// Store amount must be at least the min stake required for a stake pool to join the validator set. - const EINSUFFICIENT_STAKE_AMOUNT: u64 = 1; - /// Commission percentage has to be between 0 and 100. - const EINVALID_COMMISSION_PERCENTAGE: u64 = 2; - /// Staker has no staking contracts. - const ENO_STAKING_CONTRACT_FOUND_FOR_STAKER: u64 = 3; - /// No staking contract between the staker and operator found. - const ENO_STAKING_CONTRACT_FOUND_FOR_OPERATOR: u64 = 4; - /// Staking contracts can't be merged. - const ECANT_MERGE_STAKING_CONTRACTS: u64 = 5; - /// The staking contract already exists and cannot be re-created. - const ESTAKING_CONTRACT_ALREADY_EXISTS: u64 = 6; - /// Not enough active stake to withdraw. Some stake might still pending and will be active in the next epoch. - const EINSUFFICIENT_ACTIVE_STAKE_TO_WITHDRAW: u64 = 7; - /// Caller must be either the staker, operator, or beneficiary. - const ENOT_STAKER_OR_OPERATOR_OR_BENEFICIARY: u64 = 8; - /// Changing beneficiaries for operators is not supported. - const EOPERATOR_BENEFICIARY_CHANGE_NOT_SUPPORTED: u64 = 9; - - /// Maximum number of distributions a stake pool can support. - const MAXIMUM_PENDING_DISTRIBUTIONS: u64 = 20; - - #[resource_group(scope = module_)] - struct StakingGroupContainer {} - - struct StakingContract has store { - // Recorded principal after the last commission distribution. - // This is only used to calculate the commission the operator should be receiving. - principal: u64, - pool_address: address, - // The stake pool's owner capability. This can be used to control funds in the stake pool. - owner_cap: OwnerCapability, - commission_percentage: u64, - // Current distributions, including operator commission withdrawals and staker's partial withdrawals. - distribution_pool: Pool, - // Just in case we need the SignerCap for stake pool account in the future. - signer_cap: SignerCapability, - } - - struct Store has key { - staking_contracts: SimpleMap, - - // Events. - create_staking_contract_events: EventHandle, - update_voter_events: EventHandle, - reset_lockup_events: EventHandle, - add_stake_events: EventHandle, - request_commission_events: EventHandle, - unlock_stake_events: EventHandle, - switch_operator_events: EventHandle, - add_distribution_events: EventHandle, - distribute_events: EventHandle, - } - - struct BeneficiaryForOperator has key { - beneficiary_for_operator: address, - } - - struct UpdateCommissionEvent has drop, store { - staker: address, - operator: address, - old_commission_percentage: u64, - new_commission_percentage: u64, - } - - #[event] - struct UpdateCommission has drop, store { - staker: address, - operator: address, - old_commission_percentage: u64, - new_commission_percentage: u64, - } - - #[resource_group_member(group = aptos_framework::staking_contract::StakingGroupContainer)] - struct StakingGroupUpdateCommissionEvent has key { - update_commission_events: EventHandle, - } - - #[event] - struct CreateStakingContract has drop, store { - operator: address, - voter: address, - pool_address: address, - principal: u64, - commission_percentage: u64, - } - - #[event] - struct UpdateVoter has drop, store { - operator: address, - pool_address: address, - old_voter: address, - new_voter: address, - } - - #[event] - struct ResetLockup has drop, store { - operator: address, - pool_address: address, - } - - #[event] - struct AddStake has drop, store { - operator: address, - pool_address: address, - amount: u64 - } - - #[event] - struct RequestCommission has drop, store { - operator: address, - pool_address: address, - accumulated_rewards: u64, - commission_amount: u64, - } - - #[event] - struct UnlockStake has drop, store { - operator: address, - pool_address: address, - amount: u64, - commission_paid: u64, - } - - #[event] - struct SwitchOperator has drop, store { - old_operator: address, - new_operator: address, - pool_address: address, - } - - #[event] - struct AddDistribution has drop, store { - operator: address, - pool_address: address, - amount: u64, - } - - #[event] - struct Distribute has drop, store { - operator: address, - pool_address: address, - recipient: address, - amount: u64, - } - - #[event] - struct SetBeneficiaryForOperator has drop, store { - operator: address, - old_beneficiary: address, - new_beneficiary: address, - } - - struct CreateStakingContractEvent has drop, store { - operator: address, - voter: address, - pool_address: address, - principal: u64, - commission_percentage: u64, - } - - struct UpdateVoterEvent has drop, store { - operator: address, - pool_address: address, - old_voter: address, - new_voter: address, - } - - struct ResetLockupEvent has drop, store { - operator: address, - pool_address: address, - } - - struct AddStakeEvent has drop, store { - operator: address, - pool_address: address, - amount: u64 - } - - struct RequestCommissionEvent has drop, store { - operator: address, - pool_address: address, - accumulated_rewards: u64, - commission_amount: u64, - } - - struct UnlockStakeEvent has drop, store { - operator: address, - pool_address: address, - amount: u64, - commission_paid: u64, - } - - struct SwitchOperatorEvent has drop, store { - old_operator: address, - new_operator: address, - pool_address: address, - } - - struct AddDistributionEvent has drop, store { - operator: address, - pool_address: address, - amount: u64, - } - - struct DistributeEvent has drop, store { - operator: address, - pool_address: address, - recipient: address, - amount: u64, - } - - #[view] - /// Return the address of the underlying stake pool for the staking contract between the provided staker and - /// operator. - /// - /// This errors out the staking contract with the provided staker and operator doesn't exist. - public fun stake_pool_address(staker: address, operator: address): address acquires Store { - assert_staking_contract_exists(staker, operator); - let staking_contracts = &borrow_global(staker).staking_contracts; - simple_map::borrow(staking_contracts, &operator).pool_address - } - - #[view] - /// Return the last recorded principal (the amount that 100% belongs to the staker with commission already paid for) - /// for staking contract between the provided staker and operator. - /// - /// This errors out the staking contract with the provided staker and operator doesn't exist. - public fun last_recorded_principal(staker: address, operator: address): u64 acquires Store { - assert_staking_contract_exists(staker, operator); - let staking_contracts = &borrow_global(staker).staking_contracts; - simple_map::borrow(staking_contracts, &operator).principal - } - - #[view] - /// Return percentage of accumulated rewards that will be paid to the operator as commission for staking contract - /// between the provided staker and operator. - /// - /// This errors out the staking contract with the provided staker and operator doesn't exist. - public fun commission_percentage(staker: address, operator: address): u64 acquires Store { - assert_staking_contract_exists(staker, operator); - let staking_contracts = &borrow_global(staker).staking_contracts; - simple_map::borrow(staking_contracts, &operator).commission_percentage - } - - #[view] - /// Return a tuple of three numbers: - /// 1. The total active stake in the underlying stake pool - /// 2. The total accumulated rewards that haven't had commission paid out - /// 3. The commission amount owned from those accumulated rewards. - /// - /// This errors out the staking contract with the provided staker and operator doesn't exist. - public fun staking_contract_amounts(staker: address, operator: address): (u64, u64, u64) acquires Store { - assert_staking_contract_exists(staker, operator); - let staking_contracts = &borrow_global(staker).staking_contracts; - let staking_contract = simple_map::borrow(staking_contracts, &operator); - get_staking_contract_amounts_internal(staking_contract) - } - - #[view] - /// Return the number of pending distributions (e.g. commission, withdrawals from stakers). - /// - /// This errors out the staking contract with the provided staker and operator doesn't exist. - public fun pending_distribution_counts(staker: address, operator: address): u64 acquires Store { - assert_staking_contract_exists(staker, operator); - let staking_contracts = &borrow_global(staker).staking_contracts; - pool_u64::shareholders_count(&simple_map::borrow(staking_contracts, &operator).distribution_pool) - } - - #[view] - /// Return true if the staking contract between the provided staker and operator exists. - public fun staking_contract_exists(staker: address, operator: address): bool acquires Store { - if (!exists(staker)) { - return false - }; - - let store = borrow_global(staker); - simple_map::contains_key(&store.staking_contracts, &operator) - } - - #[view] - /// Return the beneficiary address of the operator. - public fun beneficiary_for_operator(operator: address): address acquires BeneficiaryForOperator { - if (exists(operator)) { - return borrow_global(operator).beneficiary_for_operator - } else { - operator - } - } - - #[view] - /// Return the address of the stake pool to be created with the provided staker, operator and seed. - public fun get_expected_stake_pool_address( - staker: address, - operator: address, - contract_creation_seed: vector, - ): address { - let seed = create_resource_account_seed(staker, operator, contract_creation_seed); - account::create_resource_address(&staker, seed) - } - - /// Staker can call this function to create a simple staking contract with a specified operator. - public entry fun create_staking_contract( - staker: &signer, - operator: address, - voter: address, - amount: u64, - commission_percentage: u64, - // Optional seed used when creating the staking contract account. - contract_creation_seed: vector, - ) acquires Store { - let staked_coins = coin::withdraw(staker, amount); - create_staking_contract_with_coins( - staker, operator, voter, staked_coins, commission_percentage, contract_creation_seed); - } - - /// Staker can call this function to create a simple staking contract with a specified operator. - public fun create_staking_contract_with_coins( - staker: &signer, - operator: address, - voter: address, - coins: Coin, - commission_percentage: u64, - // Optional seed used when creating the staking contract account. - contract_creation_seed: vector, - ): address acquires Store { - assert!( - commission_percentage >= 0 && commission_percentage <= 100, - error::invalid_argument(EINVALID_COMMISSION_PERCENTAGE), - ); - // The amount should be at least the min_stake_required, so the stake pool will be eligible to join the - // validator set. - let (min_stake_required, _) = staking_config::get_required_stake(&staking_config::get()); - let principal = coin::value(&coins); - assert!(principal >= min_stake_required, error::invalid_argument(EINSUFFICIENT_STAKE_AMOUNT)); - - // Initialize Store resource if this is the first time the staker has delegated to anyone. - let staker_address = signer::address_of(staker); - if (!exists(staker_address)) { - move_to(staker, new_staking_contracts_holder(staker)); - }; - - // Cannot create the staking contract if it already exists. - let store = borrow_global_mut(staker_address); - let staking_contracts = &mut store.staking_contracts; - assert!( - !simple_map::contains_key(staking_contracts, &operator), - error::already_exists(ESTAKING_CONTRACT_ALREADY_EXISTS) - ); - - // Initialize the stake pool in a new resource account. This allows the same staker to contract with multiple - // different operators. - let (stake_pool_signer, stake_pool_signer_cap, owner_cap) = - create_stake_pool(staker, operator, voter, contract_creation_seed); - - // Add the stake to the stake pool. - stake::add_stake_with_cap(&owner_cap, coins); - - // Create the contract record. - let pool_address = signer::address_of(&stake_pool_signer); - simple_map::add(staking_contracts, operator, StakingContract { - principal, - pool_address, - owner_cap, - commission_percentage, - // Make sure we don't have too many pending recipients in the distribution pool. - // Otherwise, a griefing attack is possible where the staker can keep switching operators and create too - // many pending distributions. This can lead to out-of-gas failure whenever distribute() is called. - distribution_pool: pool_u64::create(MAXIMUM_PENDING_DISTRIBUTIONS), - signer_cap: stake_pool_signer_cap, - }); - - if (std::features::module_event_migration_enabled()) { - emit(CreateStakingContract { operator, voter, pool_address, principal, commission_percentage }); - } else { - emit_event( - &mut store.create_staking_contract_events, - CreateStakingContractEvent { operator, voter, pool_address, principal, commission_percentage }, - ); - }; - pool_address - } - - /// Add more stake to an existing staking contract. - public entry fun add_stake(staker: &signer, operator: address, amount: u64) acquires Store { - let staker_address = signer::address_of(staker); - assert_staking_contract_exists(staker_address, operator); - - let store = borrow_global_mut(staker_address); - let staking_contract = simple_map::borrow_mut(&mut store.staking_contracts, &operator); - - // Add the stake to the stake pool. - let staked_coins = coin::withdraw(staker, amount); - stake::add_stake_with_cap(&staking_contract.owner_cap, staked_coins); - - staking_contract.principal = staking_contract.principal + amount; - let pool_address = staking_contract.pool_address; - if (std::features::module_event_migration_enabled()) { - emit(AddStake { operator, pool_address, amount }); - } else { - emit_event( - &mut store.add_stake_events, - AddStakeEvent { operator, pool_address, amount }, - ); - }; - } - - /// Convenient function to allow the staker to update the voter address in a staking contract they made. - public entry fun update_voter(staker: &signer, operator: address, new_voter: address) acquires Store { - let staker_address = signer::address_of(staker); - assert_staking_contract_exists(staker_address, operator); - - let store = borrow_global_mut(staker_address); - let staking_contract = simple_map::borrow_mut(&mut store.staking_contracts, &operator); - let pool_address = staking_contract.pool_address; - let old_voter = stake::get_delegated_voter(pool_address); - stake::set_delegated_voter_with_cap(&staking_contract.owner_cap, new_voter); - - if (std::features::module_event_migration_enabled()) { - emit(UpdateVoter { operator, pool_address, old_voter, new_voter }); - } else { - emit_event( - &mut store.update_voter_events, - UpdateVoterEvent { operator, pool_address, old_voter, new_voter }, - ); - }; - } - - /// Convenient function to allow the staker to reset their stake pool's lockup period to start now. - public entry fun reset_lockup(staker: &signer, operator: address) acquires Store { - let staker_address = signer::address_of(staker); - assert_staking_contract_exists(staker_address, operator); - - let store = borrow_global_mut(staker_address); - let staking_contract = simple_map::borrow_mut(&mut store.staking_contracts, &operator); - let pool_address = staking_contract.pool_address; - stake::increase_lockup_with_cap(&staking_contract.owner_cap); - - if (std::features::module_event_migration_enabled()) { - emit(ResetLockup { operator, pool_address }); - } else { - emit_event(&mut store.reset_lockup_events, ResetLockupEvent { operator, pool_address }); - }; - } - - /// Convenience function to allow a staker to update the commission percentage paid to the operator. - /// TODO: fix the typo in function name. commision -> commission - public entry fun update_commision( - staker: &signer, - operator: address, - new_commission_percentage: u64 - ) acquires Store, BeneficiaryForOperator, StakingGroupUpdateCommissionEvent { - assert!( - new_commission_percentage >= 0 && new_commission_percentage <= 100, - error::invalid_argument(EINVALID_COMMISSION_PERCENTAGE), - ); - - let staker_address = signer::address_of(staker); - assert!(exists(staker_address), error::not_found(ENO_STAKING_CONTRACT_FOUND_FOR_STAKER)); - - let store = borrow_global_mut(staker_address); - let staking_contract = simple_map::borrow_mut(&mut store.staking_contracts, &operator); - distribute_internal(staker_address, operator, staking_contract, &mut store.distribute_events); - request_commission_internal( - operator, - staking_contract, - &mut store.add_distribution_events, - &mut store.request_commission_events, - ); - let old_commission_percentage = staking_contract.commission_percentage; - staking_contract.commission_percentage = new_commission_percentage; - if (!exists(staker_address)) { - move_to( - staker, - StakingGroupUpdateCommissionEvent { - update_commission_events: account::new_event_handle( - staker - ) - } - ) - }; - if (std::features::module_event_migration_enabled()) { - emit( - UpdateCommission { staker: staker_address, operator, old_commission_percentage, new_commission_percentage } - ); - } else { - emit_event( - &mut borrow_global_mut(staker_address).update_commission_events, - UpdateCommissionEvent { staker: staker_address, operator, old_commission_percentage, new_commission_percentage } - ); - }; - } - - /// Unlock commission amount from the stake pool. Operator needs to wait for the amount to become withdrawable - /// at the end of the stake pool's lockup period before they can actually can withdraw_commission. - /// - /// Only staker, operator or beneficiary can call this. - public entry fun request_commission( - account: &signer, - staker: address, - operator: address - ) acquires Store, BeneficiaryForOperator { - let account_addr = signer::address_of(account); - assert!( - account_addr == staker || account_addr == operator || account_addr == beneficiary_for_operator(operator), - error::unauthenticated(ENOT_STAKER_OR_OPERATOR_OR_BENEFICIARY) - ); - assert_staking_contract_exists(staker, operator); - - let store = borrow_global_mut(staker); - let staking_contract = simple_map::borrow_mut(&mut store.staking_contracts, &operator); - // Short-circuit if zero commission. - if (staking_contract.commission_percentage == 0) { - return - }; - - // Force distribution of any already inactive stake. - distribute_internal(staker, operator, staking_contract, &mut store.distribute_events); - - request_commission_internal( - operator, - staking_contract, - &mut store.add_distribution_events, - &mut store.request_commission_events, - ); - } - - fun request_commission_internal( - operator: address, - staking_contract: &mut StakingContract, - add_distribution_events: &mut EventHandle, - request_commission_events: &mut EventHandle, - ): u64 { - // Unlock just the commission portion from the stake pool. - let (total_active_stake, accumulated_rewards, commission_amount) = - get_staking_contract_amounts_internal(staking_contract); - staking_contract.principal = total_active_stake - commission_amount; - - // Short-circuit if there's no commission to pay. - if (commission_amount == 0) { - return 0 - }; - - // Add a distribution for the operator. - add_distribution(operator, staking_contract, operator, commission_amount, add_distribution_events); - - // Request to unlock the commission from the stake pool. - // This won't become fully unlocked until the stake pool's lockup expires. - stake::unlock_with_cap(commission_amount, &staking_contract.owner_cap); - - let pool_address = staking_contract.pool_address; - if (std::features::module_event_migration_enabled()) { - emit(RequestCommission { operator, pool_address, accumulated_rewards, commission_amount }); - } else { - emit_event( - request_commission_events, - RequestCommissionEvent { operator, pool_address, accumulated_rewards, commission_amount }, - ); - }; - - commission_amount - } - - /// Staker can call this to request withdrawal of part or all of their staking_contract. - /// This also triggers paying commission to the operator for accounting simplicity. - public entry fun unlock_stake( - staker: &signer, - operator: address, - amount: u64 - ) acquires Store, BeneficiaryForOperator { - // Short-circuit if amount is 0. - if (amount == 0) return; - - let staker_address = signer::address_of(staker); - assert_staking_contract_exists(staker_address, operator); - - let store = borrow_global_mut(staker_address); - let staking_contract = simple_map::borrow_mut(&mut store.staking_contracts, &operator); - - // Force distribution of any already inactive stake. - distribute_internal(staker_address, operator, staking_contract, &mut store.distribute_events); - - // For simplicity, we request commission to be paid out first. This avoids having to ensure to staker doesn't - // withdraw into the commission portion. - let commission_paid = request_commission_internal( - operator, - staking_contract, - &mut store.add_distribution_events, - &mut store.request_commission_events, - ); - - // If there's less active stake remaining than the amount requested (potentially due to commission), - // only withdraw up to the active amount. - let (active, _, _, _) = stake::get_stake(staking_contract.pool_address); - if (active < amount) { - amount = active; - }; - staking_contract.principal = staking_contract.principal - amount; - - // Record a distribution for the staker. - add_distribution(operator, staking_contract, staker_address, amount, &mut store.add_distribution_events); - - // Request to unlock the distribution amount from the stake pool. - // This won't become fully unlocked until the stake pool's lockup expires. - stake::unlock_with_cap(amount, &staking_contract.owner_cap); - - let pool_address = staking_contract.pool_address; - if (std::features::module_event_migration_enabled()) { - emit(UnlockStake { pool_address, operator, amount, commission_paid }); - } else { - emit_event( - &mut store.unlock_stake_events, - UnlockStakeEvent { pool_address, operator, amount, commission_paid }, - ); - }; - } - - /// Unlock all accumulated rewards since the last recorded principals. - public entry fun unlock_rewards(staker: &signer, operator: address) acquires Store, BeneficiaryForOperator { - let staker_address = signer::address_of(staker); - assert_staking_contract_exists(staker_address, operator); - - // Calculate how much rewards belongs to the staker after commission is paid. - let (_, accumulated_rewards, unpaid_commission) = staking_contract_amounts(staker_address, operator); - let staker_rewards = accumulated_rewards - unpaid_commission; - unlock_stake(staker, operator, staker_rewards); - } - - /// Allows staker to switch operator without going through the lenghthy process to unstake, without resetting commission. - public entry fun switch_operator_with_same_commission( - staker: &signer, - old_operator: address, - new_operator: address, - ) acquires Store, BeneficiaryForOperator { - let staker_address = signer::address_of(staker); - assert_staking_contract_exists(staker_address, old_operator); - - let commission_percentage = commission_percentage(staker_address, old_operator); - switch_operator(staker, old_operator, new_operator, commission_percentage); - } - - /// Allows staker to switch operator without going through the lenghthy process to unstake. - public entry fun switch_operator( - staker: &signer, - old_operator: address, - new_operator: address, - new_commission_percentage: u64, - ) acquires Store, BeneficiaryForOperator { - let staker_address = signer::address_of(staker); - assert_staking_contract_exists(staker_address, old_operator); - - // Merging two existing staking contracts is too complex as we'd need to merge two separate stake pools. - let store = borrow_global_mut(staker_address); - let staking_contracts = &mut store.staking_contracts; - assert!( - !simple_map::contains_key(staking_contracts, &new_operator), - error::invalid_state(ECANT_MERGE_STAKING_CONTRACTS), - ); - - let (_, staking_contract) = simple_map::remove(staking_contracts, &old_operator); - // Force distribution of any already inactive stake. - distribute_internal(staker_address, old_operator, &mut staking_contract, &mut store.distribute_events); - - // For simplicity, we request commission to be paid out first. This avoids having to ensure to staker doesn't - // withdraw into the commission portion. - request_commission_internal( - old_operator, - &mut staking_contract, - &mut store.add_distribution_events, - &mut store.request_commission_events, - ); - - // Update the staking contract's commission rate and stake pool's operator. - stake::set_operator_with_cap(&staking_contract.owner_cap, new_operator); - staking_contract.commission_percentage = new_commission_percentage; - - let pool_address = staking_contract.pool_address; - simple_map::add(staking_contracts, new_operator, staking_contract); - if (std::features::module_event_migration_enabled()) { - emit(SwitchOperator { pool_address, old_operator, new_operator }); - } else { - emit_event( - &mut store.switch_operator_events, - SwitchOperatorEvent { pool_address, old_operator, new_operator } - ); - }; - } - - /// Allows an operator to change its beneficiary. Any existing unpaid commission rewards will be paid to the new - /// beneficiary. To ensures payment to the current beneficiary, one should first call `distribute` before switching - /// the beneficiary. An operator can set one beneficiary for staking contract pools, not a separate one for each pool. - public entry fun set_beneficiary_for_operator( - operator: &signer, - new_beneficiary: address - ) acquires BeneficiaryForOperator { - assert!(features::operator_beneficiary_change_enabled(), std::error::invalid_state( - EOPERATOR_BENEFICIARY_CHANGE_NOT_SUPPORTED - )); - // The beneficiay address of an operator is stored under the operator's address. - // So, the operator does not need to be validated with respect to a staking pool. - let operator_addr = signer::address_of(operator); - let old_beneficiary = beneficiary_for_operator(operator_addr); - if (exists(operator_addr)) { - borrow_global_mut(operator_addr).beneficiary_for_operator = new_beneficiary; - } else { - move_to(operator, BeneficiaryForOperator { beneficiary_for_operator: new_beneficiary }); - }; - - emit(SetBeneficiaryForOperator { - operator: operator_addr, - old_beneficiary, - new_beneficiary, - }); - } - - /// Allow anyone to distribute already unlocked funds. This does not affect reward compounding and therefore does - /// not need to be restricted to just the staker or operator. - public entry fun distribute(staker: address, operator: address) acquires Store, BeneficiaryForOperator { - assert_staking_contract_exists(staker, operator); - let store = borrow_global_mut(staker); - let staking_contract = simple_map::borrow_mut(&mut store.staking_contracts, &operator); - distribute_internal(staker, operator, staking_contract, &mut store.distribute_events); - } - - /// Distribute all unlocked (inactive) funds according to distribution shares. - fun distribute_internal( - staker: address, - operator: address, - staking_contract: &mut StakingContract, - distribute_events: &mut EventHandle, - ) acquires BeneficiaryForOperator { - let pool_address = staking_contract.pool_address; - let (_, inactive, _, pending_inactive) = stake::get_stake(pool_address); - let total_potential_withdrawable = inactive + pending_inactive; - let coins = stake::withdraw_with_cap(&staking_contract.owner_cap, total_potential_withdrawable); - let distribution_amount = coin::value(&coins); - if (distribution_amount == 0) { - coin::destroy_zero(coins); - return - }; - - let distribution_pool = &mut staking_contract.distribution_pool; - update_distribution_pool( - distribution_pool, distribution_amount, operator, staking_contract.commission_percentage); - - // Buy all recipients out of the distribution pool. - while (pool_u64::shareholders_count(distribution_pool) > 0) { - let recipients = pool_u64::shareholders(distribution_pool); - let recipient = *vector::borrow(&recipients, 0); - let current_shares = pool_u64::shares(distribution_pool, recipient); - let amount_to_distribute = pool_u64::redeem_shares(distribution_pool, recipient, current_shares); - // If the recipient is the operator, send the commission to the beneficiary instead. - if (recipient == operator) { - recipient = beneficiary_for_operator(operator); - }; - aptos_account::deposit_coins(recipient, coin::extract(&mut coins, amount_to_distribute)); - - if (std::features::module_event_migration_enabled()) { - emit(Distribute { operator, pool_address, recipient, amount: amount_to_distribute }); - } else { - emit_event( - distribute_events, - DistributeEvent { operator, pool_address, recipient, amount: amount_to_distribute } - ); - }; - }; - - // In case there's any dust left, send them all to the staker. - if (coin::value(&coins) > 0) { - aptos_account::deposit_coins(staker, coins); - pool_u64::update_total_coins(distribution_pool, 0); - } else { - coin::destroy_zero(coins); - } - } - - /// Assert that a staking_contract exists for the staker/operator pair. - fun assert_staking_contract_exists(staker: address, operator: address) acquires Store { - assert!(exists(staker), error::not_found(ENO_STAKING_CONTRACT_FOUND_FOR_STAKER)); - let staking_contracts = &borrow_global(staker).staking_contracts; - assert!( - simple_map::contains_key(staking_contracts, &operator), - error::not_found(ENO_STAKING_CONTRACT_FOUND_FOR_OPERATOR), - ); - } - - /// Add a new distribution for `recipient` and `amount` to the staking contract's distributions list. - fun add_distribution( - operator: address, - staking_contract: &mut StakingContract, - recipient: address, - coins_amount: u64, - add_distribution_events: &mut EventHandle - ) { - let distribution_pool = &mut staking_contract.distribution_pool; - let (_, _, _, total_distribution_amount) = stake::get_stake(staking_contract.pool_address); - update_distribution_pool( - distribution_pool, total_distribution_amount, operator, staking_contract.commission_percentage); - - pool_u64::buy_in(distribution_pool, recipient, coins_amount); - let pool_address = staking_contract.pool_address; - if (std::features::module_event_migration_enabled()) { - emit(AddDistribution { operator, pool_address, amount: coins_amount }); - } else { - emit_event( - add_distribution_events, - AddDistributionEvent { operator, pool_address, amount: coins_amount } - ); - }; - } - - /// Calculate accumulated rewards and commissions since last update. - fun get_staking_contract_amounts_internal(staking_contract: &StakingContract): (u64, u64, u64) { - // Pending_inactive is not included in the calculation because pending_inactive can only come from: - // 1. Outgoing commissions. This means commission has already been extracted. - // 2. Stake withdrawals from stakers. This also means commission has already been extracted as - // request_commission_internal is called in unlock_stake - let (active, _, pending_active, _) = stake::get_stake(staking_contract.pool_address); - let total_active_stake = active + pending_active; - let accumulated_rewards = total_active_stake - staking_contract.principal; - let commission_amount = accumulated_rewards * staking_contract.commission_percentage / 100; - - (total_active_stake, accumulated_rewards, commission_amount) - } - - fun create_stake_pool( - staker: &signer, - operator: address, - voter: address, - contract_creation_seed: vector, - ): (signer, SignerCapability, OwnerCapability) { - // Generate a seed that will be used to create the resource account that hosts the staking contract. - let seed = create_resource_account_seed( - signer::address_of(staker), operator, contract_creation_seed); - - let (stake_pool_signer, stake_pool_signer_cap) = account::create_resource_account(staker, seed); - stake::initialize_stake_owner(&stake_pool_signer, 0, operator, voter); - - // Extract owner_cap from the StakePool, so we have control over it in the staking_contracts flow. - // This is stored as part of the staking_contract. Thus, the staker would not have direct control over it without - // going through well-defined functions in this module. - let owner_cap = stake::extract_owner_cap(&stake_pool_signer); - - (stake_pool_signer, stake_pool_signer_cap, owner_cap) - } - - fun update_distribution_pool( - distribution_pool: &mut Pool, - updated_total_coins: u64, - operator: address, - commission_percentage: u64, - ) { - // Short-circuit and do nothing if the pool's total value has not changed. - if (pool_u64::total_coins(distribution_pool) == updated_total_coins) { - return - }; - - // Charge all stakeholders (except for the operator themselves) commission on any rewards earnt relatively to the - // previous value of the distribution pool. - let shareholders = &pool_u64::shareholders(distribution_pool); - vector::for_each_ref(shareholders, |shareholder| { - let shareholder: address = *shareholder; - if (shareholder != operator) { - let shares = pool_u64::shares(distribution_pool, shareholder); - let previous_worth = pool_u64::balance(distribution_pool, shareholder); - let current_worth = pool_u64::shares_to_amount_with_total_coins( - distribution_pool, shares, updated_total_coins); - let unpaid_commission = (current_worth - previous_worth) * commission_percentage / 100; - // Transfer shares from current shareholder to the operator as payment. - // The value of the shares should use the updated pool's total value. - let shares_to_transfer = pool_u64::amount_to_shares_with_total_coins( - distribution_pool, unpaid_commission, updated_total_coins); - pool_u64::transfer_shares(distribution_pool, shareholder, operator, shares_to_transfer); - }; - }); - - pool_u64::update_total_coins(distribution_pool, updated_total_coins); - } - - /// Create the seed to derive the resource account address. - fun create_resource_account_seed( - staker: address, - operator: address, - contract_creation_seed: vector, - ): vector { - let seed = bcs::to_bytes(&staker); - vector::append(&mut seed, bcs::to_bytes(&operator)); - // Include a salt to avoid conflicts with any other modules out there that might also generate - // deterministic resource accounts for the same staker + operator addresses. - vector::append(&mut seed, SALT); - // Add an extra salt given by the staker in case an account with the same address has already been created. - vector::append(&mut seed, contract_creation_seed); - seed - } - - /// Create a new staking_contracts resource. - fun new_staking_contracts_holder(staker: &signer): Store { - Store { - staking_contracts: simple_map::create(), - // Events. - create_staking_contract_events: account::new_event_handle(staker), - update_voter_events: account::new_event_handle(staker), - reset_lockup_events: account::new_event_handle(staker), - add_stake_events: account::new_event_handle(staker), - request_commission_events: account::new_event_handle(staker), - unlock_stake_events: account::new_event_handle(staker), - switch_operator_events: account::new_event_handle(staker), - add_distribution_events: account::new_event_handle(staker), - distribute_events: account::new_event_handle(staker), - } - } - - #[test_only] - const VALIDATOR_STATUS_ACTIVE: u64 = 2; - #[test_only] - const VALIDATOR_STATUS_INACTIVE: u64 = 4; - - #[test_only] - use aptos_framework::stake::with_rewards; - - #[test_only] - const INITIAL_BALANCE: u64 = 100000000000000; // 1M APT coins with 8 decimals. - - #[test_only] - const MAXIMUM_STAKE: u64 = 100000000000000000; // 1B APT coins with 8 decimals. - - #[test_only] - const MODULE_EVENT: u64 = 26; - - #[test_only] - const OPERATOR_BENEFICIARY_CHANGE: u64 = 39; - - #[test_only] - public fun setup(aptos_framework: &signer, staker: &signer, operator: &signer, initial_balance: u64) { - // Reward rate of 0.1% per epoch. - stake::initialize_for_test_custom( - aptos_framework, - INITIAL_BALANCE, - MAXIMUM_STAKE, - 3600, - true, - 10, - 10000, - 1000000 - ); - - let staker_address = signer::address_of(staker); - if (!account::exists_at(staker_address)) { - account::create_account_for_test(staker_address); - }; - let operator_address = signer::address_of(operator); - if (!account::exists_at(operator_address)) { - account::create_account_for_test(operator_address); - }; - stake::mint(staker, initial_balance); - stake::mint(operator, initial_balance); - } - - #[test_only] - public fun setup_staking_contract( - aptos_framework: &signer, - staker: &signer, - operator: &signer, - amount: u64, - commission: u64, - ) acquires Store { - setup(aptos_framework, staker, operator, amount); - let operator_address = signer::address_of(operator); - - // Voter is initially set to operator but then updated to be staker. - create_staking_contract(staker, operator_address, operator_address, amount, commission, vector::empty()); - std::features::change_feature_flags_for_testing(aptos_framework, vector[MODULE_EVENT, OPERATOR_BENEFICIARY_CHANGE], vector[]); - } - - #[test(aptos_framework = @0x1, staker = @0x123, operator = @0x234)] - public entry fun test_end_to_end( - aptos_framework: &signer, - staker: &signer, - operator: &signer - ) acquires Store, BeneficiaryForOperator { - setup_staking_contract(aptos_framework, staker, operator, INITIAL_BALANCE, 10); - let staker_address = signer::address_of(staker); - let operator_address = signer::address_of(operator); - assert_staking_contract_exists(staker_address, operator_address); - assert_staking_contract(staker_address, operator_address, INITIAL_BALANCE, 10); - - // Verify that the stake pool has been set up properly. - let pool_address = stake_pool_address(staker_address, operator_address); - stake::assert_stake_pool(pool_address, INITIAL_BALANCE, 0, 0, 0); - assert!(last_recorded_principal(staker_address, operator_address) == INITIAL_BALANCE, 0); - - // Operator joins the validator set. - let (_sk, pk, pop) = stake::generate_identity(); - stake::join_validator_set_for_test(&pk, &pop, operator, pool_address, true); - assert!(stake::get_validator_state(pool_address) == VALIDATOR_STATUS_ACTIVE, 1); - - // Fast forward to generate rewards. - stake::end_epoch(); - let new_balance = with_rewards(INITIAL_BALANCE); - stake::assert_stake_pool(pool_address, new_balance, 0, 0, 0); - - // Operator claims 10% of rewards so far as commissions. - let expected_commission_1 = (new_balance - last_recorded_principal(staker_address, operator_address)) / 10; - new_balance = new_balance - expected_commission_1; - request_commission(operator, staker_address, operator_address); - stake::assert_stake_pool(pool_address, new_balance, 0, 0, expected_commission_1); - assert!(last_recorded_principal(staker_address, operator_address) == new_balance, 0); - assert_distribution(staker_address, operator_address, operator_address, expected_commission_1); - stake::fast_forward_to_unlock(pool_address); - - // Both original stake and operator commissions have received rewards. - expected_commission_1 = with_rewards(expected_commission_1); - new_balance = with_rewards(new_balance); - stake::assert_stake_pool(pool_address, new_balance, expected_commission_1, 0, 0); - distribute(staker_address, operator_address); - let operator_balance = coin::balance(operator_address); - let expected_operator_balance = INITIAL_BALANCE + expected_commission_1; - assert!(operator_balance == expected_operator_balance, operator_balance); - stake::assert_stake_pool(pool_address, new_balance, 0, 0, 0); - assert_no_pending_distributions(staker_address, operator_address); - - // Staker adds more stake. - stake::mint(staker, INITIAL_BALANCE); - let previous_principal = last_recorded_principal(staker_address, operator_address); - add_stake(staker, operator_address, INITIAL_BALANCE); - stake::assert_stake_pool(pool_address, new_balance, 0, INITIAL_BALANCE, 0); - assert!(last_recorded_principal(staker_address, operator_address) == previous_principal + INITIAL_BALANCE, 0); - - // The newly added stake didn't receive any rewards because it was only added in the new epoch. - stake::end_epoch(); - new_balance = with_rewards(new_balance) + INITIAL_BALANCE; - - // Second round of commission request/withdrawal. - let expected_commission_2 = (new_balance - last_recorded_principal(staker_address, operator_address)) / 10; - new_balance = new_balance - expected_commission_2; - request_commission(operator, staker_address, operator_address); - assert_distribution(staker_address, operator_address, operator_address, expected_commission_2); - assert!(last_recorded_principal(staker_address, operator_address) == new_balance, 0); - stake::fast_forward_to_unlock(pool_address); - expected_commission_2 = with_rewards(expected_commission_2); - distribute(staker_address, operator_address); - operator_balance = coin::balance(operator_address); - expected_operator_balance = expected_operator_balance + expected_commission_2; - assert!(operator_balance == expected_operator_balance, operator_balance); - assert_no_pending_distributions(staker_address, operator_address); - new_balance = with_rewards(new_balance); - - // New rounds of rewards. - stake::fast_forward_to_unlock(pool_address); - new_balance = with_rewards(new_balance); - - // Staker withdraws all stake, which should also request commission distribution. - let unpaid_commission = (new_balance - last_recorded_principal(staker_address, operator_address)) / 10; - unlock_stake(staker, operator_address, new_balance); - stake::assert_stake_pool(pool_address, 0, 0, 0, new_balance); - assert_distribution(staker_address, operator_address, operator_address, unpaid_commission); - let withdrawn_amount = new_balance - unpaid_commission; - assert_distribution(staker_address, operator_address, staker_address, withdrawn_amount); - assert!(last_recorded_principal(staker_address, operator_address) == 0, 0); - - // End epoch. The stake pool should get kicked out of the validator set as it has 0 remaining active stake. - stake::fast_forward_to_unlock(pool_address); - // Operator should still earn 10% commission on the rewards on top of the staker's withdrawn_amount. - let commission_on_withdrawn_amount = (with_rewards(withdrawn_amount) - withdrawn_amount) / 10; - unpaid_commission = with_rewards(unpaid_commission) + commission_on_withdrawn_amount; - withdrawn_amount = with_rewards(withdrawn_amount) - commission_on_withdrawn_amount; - stake::assert_stake_pool(pool_address, 0, with_rewards(new_balance), 0, 0); - assert!(stake::get_validator_state(pool_address) == VALIDATOR_STATUS_INACTIVE, 0); - - // Distribute and verify balances. - distribute(staker_address, operator_address); - assert_no_pending_distributions(staker_address, operator_address); - operator_balance = coin::balance(operator_address); - assert!(operator_balance == expected_operator_balance + unpaid_commission, operator_balance); - let staker_balance = coin::balance(staker_address); - // Staker receives the extra dust due to rounding error. - assert!(staker_balance == withdrawn_amount + 1, staker_balance); - assert_no_pending_distributions(staker_address, operator_address); - } - - #[test(aptos_framework = @0x1, staker = @0x123, operator = @0x234)] - public entry fun test_operator_cannot_request_same_commission_multiple_times( - aptos_framework: &signer, staker: &signer, operator: &signer) acquires Store, BeneficiaryForOperator { - setup_staking_contract(aptos_framework, staker, operator, INITIAL_BALANCE, 10); - let staker_address = signer::address_of(staker); - let operator_address = signer::address_of(operator); - let pool_address = stake_pool_address(staker_address, operator_address); - - // Operator joins the validator set. - let (_sk, pk, pop) = stake::generate_identity(); - stake::join_validator_set_for_test(&pk, &pop, operator, pool_address, true); - assert!(stake::get_validator_state(pool_address) == VALIDATOR_STATUS_ACTIVE, 1); - - // Fast forward to generate rewards. - stake::end_epoch(); - let new_balance = with_rewards(INITIAL_BALANCE); - stake::assert_stake_pool(pool_address, new_balance, 0, 0, 0); - - // Operator tries to request commission multiple times. But their distribution shouldn't change. - let expected_commission = (new_balance - last_recorded_principal(staker_address, operator_address)) / 10; - request_commission(operator, staker_address, operator_address); - assert_distribution(staker_address, operator_address, operator_address, expected_commission); - request_commission(operator, staker_address, operator_address); - assert_distribution(staker_address, operator_address, operator_address, expected_commission); - request_commission(operator, staker_address, operator_address); - assert_distribution(staker_address, operator_address, operator_address, expected_commission); - } - - #[test(aptos_framework = @0x1, staker = @0x123, operator = @0x234)] - public entry fun test_unlock_rewards( - aptos_framework: &signer, staker: &signer, operator: &signer) acquires Store, BeneficiaryForOperator { - setup_staking_contract(aptos_framework, staker, operator, INITIAL_BALANCE, 10); - let staker_address = signer::address_of(staker); - let operator_address = signer::address_of(operator); - let pool_address = stake_pool_address(staker_address, operator_address); - - // Operator joins the validator set. - let (_sk, pk, pop) = stake::generate_identity(); - stake::join_validator_set_for_test(&pk, &pop, operator, pool_address, true); - assert!(stake::get_validator_state(pool_address) == VALIDATOR_STATUS_ACTIVE, 1); - - // Fast forward to generate rewards. - stake::end_epoch(); - let new_balance = with_rewards(INITIAL_BALANCE); - stake::assert_stake_pool(pool_address, new_balance, 0, 0, 0); - - // Staker withdraws all accumulated rewards, which should pay commission first. - unlock_rewards(staker, operator_address); - let accumulated_rewards = new_balance - INITIAL_BALANCE; - let expected_commission = accumulated_rewards / 10; - let staker_rewards = accumulated_rewards - expected_commission; - assert_distribution(staker_address, operator_address, staker_address, staker_rewards); - assert_distribution(staker_address, operator_address, operator_address, expected_commission); - } - - #[test(aptos_framework = @0x1, staker = @0x123, operator = @0x234)] - #[expected_failure(abort_code = 0x80006, location = Self)] - public entry fun test_staker_cannot_create_same_staking_contract_multiple_times( - aptos_framework: &signer, - staker: &signer, - operator: &signer, - ) acquires Store { - setup_staking_contract(aptos_framework, staker, operator, INITIAL_BALANCE, 10); - let operator_address = signer::address_of(operator); - stake::mint(staker, INITIAL_BALANCE); - create_staking_contract(staker, operator_address, operator_address, INITIAL_BALANCE, 10, vector::empty()); - } - - #[test(aptos_framework = @0x1, staker = @0x123, operator = @0x234)] - #[expected_failure(abort_code = 0x10002, location = Self)] - public entry fun test_staker_cannot_create_staking_contract_with_invalid_commission( - aptos_framework: &signer, - staker: &signer, - operator: &signer, - ) acquires Store { - setup_staking_contract(aptos_framework, staker, operator, INITIAL_BALANCE, 101); - } - - #[test(aptos_framework = @0x1, staker = @0x123, operator = @0x234)] - #[expected_failure(abort_code = 0x10001, location = Self)] - public entry fun test_staker_cannot_create_staking_contract_with_less_than_min_stake_required( - aptos_framework: &signer, - staker: &signer, - operator: &signer, - ) acquires Store { - setup_staking_contract(aptos_framework, staker, operator, 50, 100); - } - - #[test(aptos_framework = @0x1, staker = @0x123, operator = @0x234)] - public entry fun test_update_voter( - aptos_framework: &signer, - staker: &signer, - operator: &signer, - ) acquires Store { - setup_staking_contract(aptos_framework, staker, operator, INITIAL_BALANCE, 10); - let staker_address = signer::address_of(staker); - let operator_address = signer::address_of(operator); - - // Voter is initially set to operator but then updated to be staker. - let pool_address = stake_pool_address(staker_address, operator_address); - assert!(stake::get_delegated_voter(pool_address) == operator_address, 0); - update_voter(staker, operator_address, staker_address); - assert!(stake::get_delegated_voter(pool_address) == staker_address, 1); - } - - #[test(aptos_framework = @0x1, staker = @0x123, operator = @0x234)] - public entry fun test_reset_lockup( - aptos_framework: &signer, - staker: &signer, - operator: &signer, - ) acquires Store { - setup_staking_contract(aptos_framework, staker, operator, INITIAL_BALANCE, 10); - let staker_address = signer::address_of(staker); - let operator_address = signer::address_of(operator); - let pool_address = stake_pool_address(staker_address, operator_address); - - let origin_lockup_expiration = stake::get_lockup_secs(pool_address); - reset_lockup(staker, operator_address); - assert!(origin_lockup_expiration < stake::get_lockup_secs(pool_address), 0); - } - - #[test(aptos_framework = @0x1, staker = @0x123, operator_1 = @0x234, operator_2 = @0x345)] - public entry fun test_staker_can_switch_operator( - aptos_framework: &signer, - staker: &signer, - operator_1: &signer, - operator_2: &signer, - ) acquires Store, BeneficiaryForOperator { - setup_staking_contract(aptos_framework, staker, operator_1, INITIAL_BALANCE, 10); - account::create_account_for_test(signer::address_of(operator_2)); - stake::mint(operator_2, INITIAL_BALANCE); - let staker_address = signer::address_of(staker); - let operator_1_address = signer::address_of(operator_1); - let operator_2_address = signer::address_of(operator_2); - - // Join validator set and earn some rewards. - let pool_address = stake_pool_address(staker_address, operator_1_address); - let (_sk, pk, pop) = stake::generate_identity(); - stake::join_validator_set_for_test(&pk, &pop, operator_1, pool_address, true); - stake::end_epoch(); - assert!(stake::get_validator_state(pool_address) == VALIDATOR_STATUS_ACTIVE, 0); - - // Switch operators. - switch_operator(staker, operator_1_address, operator_2_address, 20); - // The staking_contract is now associated with operator 2 but there should be a pending distribution of unpaid - // commission to operator 1. - let new_balance = with_rewards(INITIAL_BALANCE); - let commission_for_operator_1 = (new_balance - INITIAL_BALANCE) / 10; - assert_distribution(staker_address, operator_2_address, operator_1_address, commission_for_operator_1); - // Unpaid commission should be unlocked from the stake pool. - new_balance = new_balance - commission_for_operator_1; - stake::assert_stake_pool(pool_address, new_balance, 0, 0, commission_for_operator_1); - assert!(last_recorded_principal(staker_address, operator_2_address) == new_balance, 0); - - // The stake pool's validator should not have left the validator set. - assert!(stake_pool_address(staker_address, operator_2_address) == pool_address, 1); - assert!(stake::get_validator_state(pool_address) == VALIDATOR_STATUS_ACTIVE, 2); - - // End epoch to get more rewards. - stake::fast_forward_to_unlock(pool_address); - new_balance = with_rewards(new_balance); - // Rewards on the commission being paid to operator_1 should still be charged commission that will go to - // operator_2; - let commission_on_operator_1_distribution = - (with_rewards(commission_for_operator_1) - commission_for_operator_1) / 5; - commission_for_operator_1 = with_rewards(commission_for_operator_1) - commission_on_operator_1_distribution; - - // Verify that when commissions are withdrawn, previous pending distribution to operator 1 also happens. - // Then new commission of 20% is paid to operator 2. - let commission_for_operator_2 = - (new_balance - last_recorded_principal(staker_address, operator_2_address)) / 5; - new_balance = new_balance - commission_for_operator_2; - request_commission(operator_2, staker_address, operator_2_address); - assert_distribution(staker_address, operator_2_address, operator_2_address, commission_for_operator_2); - let operator_1_balance = coin::balance(operator_1_address); - assert!(operator_1_balance == INITIAL_BALANCE + commission_for_operator_1, operator_1_balance); - stake::assert_stake_pool(pool_address, new_balance, 0, 0, commission_for_operator_2); - assert!(last_recorded_principal(staker_address, operator_2_address) == new_balance, 0); - stake::fast_forward_to_unlock(pool_address); - - // Operator 2's commission is distributed. - distribute(staker_address, operator_2_address); - let operator_2_balance = coin::balance(operator_2_address); - new_balance = with_rewards(new_balance); - commission_for_operator_2 = with_rewards(commission_for_operator_2); - assert!( - operator_2_balance == INITIAL_BALANCE + commission_for_operator_2 + commission_on_operator_1_distribution, - operator_2_balance, - ); - stake::assert_stake_pool( - pool_address, - new_balance, - 0, - 0, - 0, - ); - } - - #[test(aptos_framework = @0x1, staker = @0x123, operator_1 = @0x234, operator_2 = @0x345)] - public entry fun test_staker_can_switch_operator_with_same_commission( - aptos_framework: &signer, - staker: &signer, - operator_1: &signer, - operator_2: &signer, - ) acquires Store, BeneficiaryForOperator { - setup_staking_contract(aptos_framework, staker, operator_1, INITIAL_BALANCE, 10); - let staker_address = signer::address_of(staker); - let operator_1_address = signer::address_of(operator_1); - let operator_2_address = signer::address_of(operator_2); - - // Switch operators. - switch_operator_with_same_commission(staker, operator_1_address, operator_2_address); - // The staking_contract should now be associated with operator 2 but with same commission rate. - assert!(staking_contract_exists(staker_address, operator_2_address), 0); - assert!(!staking_contract_exists(staker_address, operator_1_address), 1); - assert!(commission_percentage(staker_address, operator_2_address) == 10, 2); - } - - #[test(aptos_framework = @0x1, staker = @0x123, operator1 = @0x234, beneficiary = @0x345, operator2 = @0x456)] - public entry fun test_operator_can_set_beneficiary( - aptos_framework: &signer, - staker: &signer, - operator1: &signer, - beneficiary: &signer, - operator2: &signer, - ) acquires Store, BeneficiaryForOperator { - setup_staking_contract(aptos_framework, staker, operator1, INITIAL_BALANCE, 10); - let staker_address = signer::address_of(staker); - let operator1_address = signer::address_of(operator1); - let operator2_address = signer::address_of(operator2); - let beneficiary_address = signer::address_of(beneficiary); - - // account::create_account_for_test(beneficiary_address); - aptos_framework::aptos_account::create_account(beneficiary_address); - assert_staking_contract_exists(staker_address, operator1_address); - assert_staking_contract(staker_address, operator1_address, INITIAL_BALANCE, 10); - - // Verify that the stake pool has been set up properly. - let pool_address = stake_pool_address(staker_address, operator1_address); - stake::assert_stake_pool(pool_address, INITIAL_BALANCE, 0, 0, 0); - assert!(last_recorded_principal(staker_address, operator1_address) == INITIAL_BALANCE, 0); - assert!(stake::get_operator(pool_address) == operator1_address, 0); - assert!(beneficiary_for_operator(operator1_address) == operator1_address, 0); - - // Operator joins the validator set. - let (_sk, pk, pop) = stake::generate_identity(); - stake::join_validator_set_for_test(&pk, &pop, operator1, pool_address, true); - assert!(stake::get_validator_state(pool_address) == VALIDATOR_STATUS_ACTIVE, 1); - - // Set beneficiary. - set_beneficiary_for_operator(operator1, beneficiary_address); - assert!(beneficiary_for_operator(operator1_address) == beneficiary_address, 0); - - // Fast forward to generate rewards. - stake::end_epoch(); - let new_balance = with_rewards(INITIAL_BALANCE); - stake::assert_stake_pool(pool_address, new_balance, 0, 0, 0); - - // Operator claims 10% of rewards so far as commissions. - let expected_commission_1 = (new_balance - last_recorded_principal(staker_address, operator1_address)) / 10; - new_balance = new_balance - expected_commission_1; - request_commission(operator1, staker_address, operator1_address); - stake::assert_stake_pool(pool_address, new_balance, 0, 0, expected_commission_1); - assert!(last_recorded_principal(staker_address, operator1_address) == new_balance, 0); - assert_distribution(staker_address, operator1_address, operator1_address, expected_commission_1); - stake::fast_forward_to_unlock(pool_address); - - // Both original stake and operator commissions have received rewards. - expected_commission_1 = with_rewards(expected_commission_1); - new_balance = with_rewards(new_balance); - stake::assert_stake_pool(pool_address, new_balance, expected_commission_1, 0, 0); - distribute(staker_address, operator1_address); - let operator_balance = coin::balance(operator1_address); - let beneficiary_balance = coin::balance(beneficiary_address); - let expected_operator_balance = INITIAL_BALANCE; - let expected_beneficiary_balance = expected_commission_1; - assert!(operator_balance == expected_operator_balance, operator_balance); - assert!(beneficiary_balance == expected_beneficiary_balance, beneficiary_balance); - stake::assert_stake_pool(pool_address, new_balance, 0, 0, 0); - assert_no_pending_distributions(staker_address, operator1_address); - - // switch operator to operator2. The rewards should go to operator2 not to the beneficiay of operator1. - let old_beneficiay_balance = beneficiary_balance; - switch_operator(staker, operator1_address, operator2_address, 10); - - stake::end_epoch(); - let (_, accumulated_rewards, _) = staking_contract_amounts(staker_address, operator2_address); - - let expected_commission = accumulated_rewards / 10; - - // Request commission. - request_commission(operator2, staker_address, operator2_address); - // Unlocks the commission. - stake::fast_forward_to_unlock(pool_address); - expected_commission = with_rewards(expected_commission); - - // Distribute the commission to the operator. - distribute(staker_address, operator2_address); - - // Assert that the rewards go to operator2, and the balance of the operator1's beneficiay remains the same. - assert!(coin::balance(operator2_address) >= expected_commission, 1); - assert!(coin::balance(beneficiary_address) == old_beneficiay_balance, 1); - } - - #[test(aptos_framework = @0x1, staker = @0x123, operator = @0x234)] - public entry fun test_staker_can_withdraw_partial_stake( - aptos_framework: &signer, staker: &signer, operator: &signer) acquires Store, BeneficiaryForOperator { - let initial_balance = INITIAL_BALANCE * 2; - setup_staking_contract(aptos_framework, staker, operator, initial_balance, 10); - let staker_address = signer::address_of(staker); - let operator_address = signer::address_of(operator); - let pool_address = stake_pool_address(staker_address, operator_address); - - // Operator joins the validator set so rewards are generated. - let (_sk, pk, pop) = stake::generate_identity(); - stake::join_validator_set_for_test(&pk, &pop, operator, pool_address, true); - assert!(stake::get_validator_state(pool_address) == VALIDATOR_STATUS_ACTIVE, 1); - - // Fast forward to generate rewards. - stake::end_epoch(); - let new_balance = with_rewards(initial_balance); - stake::assert_stake_pool(pool_address, new_balance, 0, 0, 0); - - // Staker withdraws 1/4 of the stake, which should also request commission distribution. - let withdrawn_stake = new_balance / 4; - let unpaid_commission = (new_balance - initial_balance) / 10; - let new_balance = new_balance - withdrawn_stake - unpaid_commission; - unlock_stake(staker, operator_address, withdrawn_stake); - stake::assert_stake_pool(pool_address, new_balance, 0, 0, withdrawn_stake + unpaid_commission); - assert_distribution(staker_address, operator_address, operator_address, unpaid_commission); - assert_distribution(staker_address, operator_address, staker_address, withdrawn_stake); - assert!(last_recorded_principal(staker_address, operator_address) == new_balance, 0); - - // The validator is still in the active set as its remaining stake is still above min required. - stake::fast_forward_to_unlock(pool_address); - new_balance = with_rewards(new_balance); - unpaid_commission = with_rewards(unpaid_commission); - // Commission should still be charged on the rewards on top of withdrawn_stake. - // So the operator should receive 10% of the rewards on top of withdrawn_stake. - let commission_on_withdrawn_stake = (with_rewards(withdrawn_stake) - withdrawn_stake) / 10; - unpaid_commission = unpaid_commission + commission_on_withdrawn_stake; - withdrawn_stake = with_rewards(withdrawn_stake) - commission_on_withdrawn_stake; - stake::assert_stake_pool(pool_address, new_balance, withdrawn_stake + unpaid_commission, 0, 0); - assert!(stake::get_validator_state(pool_address) == VALIDATOR_STATUS_ACTIVE, 0); - - // Distribute and verify balances. - distribute(staker_address, operator_address); - assert_no_pending_distributions(staker_address, operator_address); - let operator_balance = coin::balance(operator_address); - assert!(operator_balance == initial_balance + unpaid_commission, operator_balance); - let staker_balance = coin::balance(staker_address); - assert!(staker_balance == withdrawn_stake, staker_balance); - } - - #[test(aptos_framework = @0x1, staker = @0x123, operator = @0x234)] - public entry fun test_staker_can_withdraw_partial_stake_if_operator_never_joined_validator_set( - aptos_framework: &signer, staker: &signer, operator: &signer) acquires Store, BeneficiaryForOperator { - let initial_balance = INITIAL_BALANCE * 2; - setup_staking_contract(aptos_framework, staker, operator, initial_balance, 10); - let staker_address = signer::address_of(staker); - let operator_address = signer::address_of(operator); - let pool_address = stake_pool_address(staker_address, operator_address); - - // Epoch ended, but since validator never joined the set, no rewards were minted. - stake::end_epoch(); - stake::assert_stake_pool(pool_address, initial_balance, 0, 0, 0); - - // Staker withdraws 1/4 of the stake, which doesn't create any commission distribution as there's no rewards. - let withdrawn_stake = initial_balance / 4; - let new_balance = initial_balance - withdrawn_stake; - unlock_stake(staker, operator_address, withdrawn_stake); - stake::assert_stake_pool(pool_address, new_balance, 0, 0, withdrawn_stake); - assert_distribution(staker_address, operator_address, operator_address, 0); - assert_distribution(staker_address, operator_address, staker_address, withdrawn_stake); - assert!(last_recorded_principal(staker_address, operator_address) == new_balance, 0); - - // Distribute and verify balances. - distribute(staker_address, operator_address); - assert_no_pending_distributions(staker_address, operator_address); - // Operator's balance shouldn't change as there are no rewards. - let operator_balance = coin::balance(operator_address); - assert!(operator_balance == initial_balance, operator_balance); - // Staker receives back the withdrawn amount (no rewards). - let staker_balance = coin::balance(staker_address); - assert!(staker_balance == withdrawn_stake, staker_balance); - } - - #[test(aptos_framework = @0x1, staker = @0x123, operator = @0x234)] - public entry fun test_multiple_distributions_added_before_distribute( - aptos_framework: &signer, staker: &signer, operator: &signer) acquires Store, BeneficiaryForOperator { - let initial_balance = INITIAL_BALANCE * 2; - setup_staking_contract(aptos_framework, staker, operator, initial_balance, 10); - let staker_address = signer::address_of(staker); - let operator_address = signer::address_of(operator); - let pool_address = stake_pool_address(staker_address, operator_address); - - // Operator joins the validator set so rewards are generated. - let (_sk, pk, pop) = stake::generate_identity(); - stake::join_validator_set_for_test(&pk, &pop, operator, pool_address, true); - assert!(stake::get_validator_state(pool_address) == VALIDATOR_STATUS_ACTIVE, 1); - - // Fast forward to generate rewards. - stake::end_epoch(); - let new_balance = with_rewards(initial_balance); - stake::assert_stake_pool(pool_address, new_balance, 0, 0, 0); - - // Staker withdraws 1/4 of the stake, which should also request commission distribution. - let withdrawn_stake = new_balance / 4; - let unpaid_commission = (new_balance - initial_balance) / 10; - let new_balance = new_balance - withdrawn_stake - unpaid_commission; - unlock_stake(staker, operator_address, withdrawn_stake); - stake::assert_stake_pool(pool_address, new_balance, 0, 0, withdrawn_stake + unpaid_commission); - assert_distribution(staker_address, operator_address, operator_address, unpaid_commission); - assert_distribution(staker_address, operator_address, staker_address, withdrawn_stake); - assert!(last_recorded_principal(staker_address, operator_address) == new_balance, 0); - - // End epoch to generate some rewards. Staker withdraws another 1/4 of the stake. - // Commission should be charged on the rewards earned on the previous 1/4 stake withdrawal. - stake::end_epoch(); - let commission_on_withdrawn_stake = (with_rewards(withdrawn_stake) - withdrawn_stake) / 10; - let commission_on_new_balance = (with_rewards(new_balance) - new_balance) / 10; - unpaid_commission = with_rewards(unpaid_commission) + commission_on_withdrawn_stake + commission_on_new_balance; - new_balance = with_rewards(new_balance) - commission_on_new_balance; - let new_withdrawn_stake = new_balance / 4; - unlock_stake(staker, operator_address, new_withdrawn_stake); - new_balance = new_balance - new_withdrawn_stake; - withdrawn_stake = with_rewards(withdrawn_stake) - commission_on_withdrawn_stake + new_withdrawn_stake; - stake::assert_stake_pool(pool_address, new_balance, 0, 0, withdrawn_stake + unpaid_commission); - // There's some small rounding error here. - assert_distribution(staker_address, operator_address, operator_address, unpaid_commission - 1); - assert_distribution(staker_address, operator_address, staker_address, withdrawn_stake); - assert!(last_recorded_principal(staker_address, operator_address) == new_balance, 0); - } - - #[test(aptos_framework = @0x1, staker = @0x123, operator = @0x234)] - public entry fun test_update_commission( - aptos_framework: &signer, - staker: &signer, - operator: &signer - ) acquires Store, BeneficiaryForOperator, StakingGroupUpdateCommissionEvent { - let initial_balance = INITIAL_BALANCE * 2; - setup_staking_contract(aptos_framework, staker, operator, initial_balance, 10); - let staker_address = signer::address_of(staker); - let operator_address = signer::address_of(operator); - let pool_address = stake_pool_address(staker_address, operator_address); - - // Operator joins the validator set so rewards are generated. - let (_sk, pk, pop) = stake::generate_identity(); - stake::join_validator_set_for_test(&pk, &pop, operator, pool_address, true); - assert!(stake::get_validator_state(pool_address) == VALIDATOR_STATUS_ACTIVE, 1); - - // Fast forward to generate rewards. - stake::end_epoch(); - let balance_1epoch = with_rewards(initial_balance); - let unpaid_commission = (balance_1epoch - initial_balance) / 10; - stake::assert_stake_pool(pool_address, balance_1epoch, 0, 0, 0); - - update_commision(staker, operator_address, 5); - stake::end_epoch(); - let balance_2epoch = with_rewards(balance_1epoch - unpaid_commission); - stake::assert_stake_pool(pool_address, balance_2epoch, 0, 0, with_rewards(unpaid_commission)); - } - - #[test( - staker = @0xe256f4f4e2986cada739e339895cf5585082ff247464cab8ec56eea726bd2263, - operator = @0x9f0a211d218b082987408f1e393afe1ba0c202c6d280f081399788d3360c7f09 - )] - public entry fun test_get_expected_stake_pool_address(staker: address, operator: address) { - let pool_address = get_expected_stake_pool_address(staker, operator, vector[0x42, 0x42]); - assert!(pool_address == @0x9d9648031ada367c26f7878eb0b0406ae6a969b1a43090269e5cdfabe1b48f0f, 0); - } - - #[test_only] - public fun assert_staking_contract( - staker: address, operator: address, principal: u64, commission_percentage: u64) acquires Store { - let staking_contract = simple_map::borrow(&borrow_global(staker).staking_contracts, &operator); - assert!(staking_contract.principal == principal, staking_contract.principal); - assert!( - staking_contract.commission_percentage == commission_percentage, - staking_contract.commission_percentage - ); - } - - #[test_only] - public fun assert_no_pending_distributions(staker: address, operator: address) acquires Store { - let staking_contract = simple_map::borrow(&borrow_global(staker).staking_contracts, &operator); - let distribution_pool = &staking_contract.distribution_pool; - let shareholders_count = pool_u64::shareholders_count(distribution_pool); - assert!(shareholders_count == 0, shareholders_count); - let total_coins_remaining = pool_u64::total_coins(distribution_pool); - assert!(total_coins_remaining == 0, total_coins_remaining); - } - - #[test_only] - public fun assert_distribution( - staker: address, operator: address, recipient: address, coins_amount: u64) acquires Store { - let staking_contract = simple_map::borrow(&borrow_global(staker).staking_contracts, &operator); - let distribution_balance = pool_u64::balance(&staking_contract.distribution_pool, recipient); - assert!(distribution_balance == coins_amount, distribution_balance); - } -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/staking_proxy.move b/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/staking_proxy.move deleted file mode 100644 index 26d1aa333..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/staking_proxy.move +++ /dev/null @@ -1,228 +0,0 @@ -module aptos_framework::staking_proxy { - use std::signer; - use std::vector; - - use aptos_framework::stake; - use aptos_framework::staking_contract; - use aptos_framework::vesting; - - public entry fun set_operator(owner: &signer, old_operator: address, new_operator: address) { - set_vesting_contract_operator(owner, old_operator, new_operator); - set_staking_contract_operator(owner, old_operator, new_operator); - set_stake_pool_operator(owner, new_operator); - } - - public entry fun set_voter(owner: &signer, operator: address, new_voter: address) { - set_vesting_contract_voter(owner, operator, new_voter); - set_staking_contract_voter(owner, operator, new_voter); - set_stake_pool_voter(owner, new_voter); - } - - public entry fun set_vesting_contract_operator(owner: &signer, old_operator: address, new_operator: address) { - let owner_address = signer::address_of(owner); - let vesting_contracts = &vesting::vesting_contracts(owner_address); - vector::for_each_ref(vesting_contracts, |vesting_contract| { - let vesting_contract = *vesting_contract; - if (vesting::operator(vesting_contract) == old_operator) { - let current_commission_percentage = vesting::operator_commission_percentage(vesting_contract); - vesting::update_operator(owner, vesting_contract, new_operator, current_commission_percentage); - }; - }); - } - - public entry fun set_staking_contract_operator(owner: &signer, old_operator: address, new_operator: address) { - let owner_address = signer::address_of(owner); - if (staking_contract::staking_contract_exists(owner_address, old_operator)) { - let current_commission_percentage = staking_contract::commission_percentage(owner_address, old_operator); - staking_contract::switch_operator(owner, old_operator, new_operator, current_commission_percentage); - }; - } - - public entry fun set_stake_pool_operator(owner: &signer, new_operator: address) { - let owner_address = signer::address_of(owner); - if (stake::stake_pool_exists(owner_address)) { - stake::set_operator(owner, new_operator); - }; - } - - public entry fun set_vesting_contract_voter(owner: &signer, operator: address, new_voter: address) { - let owner_address = signer::address_of(owner); - let vesting_contracts = &vesting::vesting_contracts(owner_address); - vector::for_each_ref(vesting_contracts, |vesting_contract| { - let vesting_contract = *vesting_contract; - if (vesting::operator(vesting_contract) == operator) { - vesting::update_voter(owner, vesting_contract, new_voter); - }; - }); - } - - public entry fun set_staking_contract_voter(owner: &signer, operator: address, new_voter: address) { - let owner_address = signer::address_of(owner); - if (staking_contract::staking_contract_exists(owner_address, operator)) { - staking_contract::update_voter(owner, operator, new_voter); - }; - } - - public entry fun set_stake_pool_voter(owner: &signer, new_voter: address) { - if (stake::stake_pool_exists(signer::address_of(owner))) { - stake::set_delegated_voter(owner, new_voter); - }; - } - - #[test_only] - const INITIAL_BALANCE: u64 = 100000000000000; // 1M APT coins with 8 decimals. - - #[test( - aptos_framework = @0x1, - owner = @0x123, - operator_1 = @0x234, - operator_2 = @0x345, - new_operator = @0x567, - )] - public entry fun test_set_operator( - aptos_framework: &signer, - owner: &signer, - operator_1: &signer, - operator_2: &signer, - new_operator: &signer, - ) { - let owner_address = signer::address_of(owner); - let operator_1_address = signer::address_of(operator_1); - let operator_2_address = signer::address_of(operator_2); - let new_operator_address = signer::address_of(new_operator); - vesting::setup( - aptos_framework, &vector[owner_address, operator_1_address, operator_2_address, new_operator_address]); - staking_contract::setup_staking_contract(aptos_framework, owner, operator_1, INITIAL_BALANCE, 0); - staking_contract::setup_staking_contract(aptos_framework, owner, operator_2, INITIAL_BALANCE, 0); - - let vesting_contract_1 = vesting::setup_vesting_contract(owner, &vector[@11], &vector[INITIAL_BALANCE], owner_address, 0); - vesting::update_operator(owner, vesting_contract_1, operator_1_address, 0); - let vesting_contract_2 = vesting::setup_vesting_contract(owner, &vector[@12], &vector[INITIAL_BALANCE], owner_address, 0); - vesting::update_operator(owner, vesting_contract_2, operator_2_address, 0); - - let (_sk, pk, pop) = stake::generate_identity(); - stake::initialize_test_validator(&pk, &pop, owner, INITIAL_BALANCE, false, false); - stake::set_operator(owner, operator_1_address); - - set_operator(owner, operator_1_address, new_operator_address); - // Stake pool's operator has been switched from operator 1 to new operator. - assert!(stake::get_operator(owner_address) == new_operator_address, 0); - // Staking contract has been switched from operator 1 to new operator. - // Staking contract with operator_2 should stay unchanged. - assert!(staking_contract::staking_contract_exists(owner_address, new_operator_address), 1); - assert!(!staking_contract::staking_contract_exists(owner_address, operator_1_address), 2); - assert!(staking_contract::staking_contract_exists(owner_address, operator_2_address), 3); - // Vesting contract 1 has been switched from operator 1 to new operator while vesting contract 2 stays unchanged - assert!(vesting::operator(vesting_contract_1) == new_operator_address, 4); - assert!(vesting::operator(vesting_contract_2) == operator_2_address, 5); - } - - #[test( - aptos_framework = @0x1, - owner = @0x123, - operator_1 = @0x234, - operator_2 = @0x345, - new_operator = @0x567, - )] - public entry fun test_set_operator_nothing_to_change( - aptos_framework: &signer, - owner: &signer, - operator_1: &signer, - operator_2: &signer, - new_operator: &signer, - ) { - let owner_address = signer::address_of(owner); - let operator_1_address = signer::address_of(operator_1); - let operator_2_address = signer::address_of(operator_2); - let new_operator_address = signer::address_of(new_operator); - vesting::setup( - aptos_framework, &vector[owner_address, operator_1_address, operator_2_address, new_operator_address]); - staking_contract::setup_staking_contract(aptos_framework, owner, operator_2, INITIAL_BALANCE, 0); - - let vesting_contract_2 = vesting::setup_vesting_contract(owner, &vector[@12], &vector[INITIAL_BALANCE], owner_address, 0); - vesting::update_operator(owner, vesting_contract_2, operator_2_address, 0); - - set_operator(owner, operator_1_address, new_operator_address); - // No staking or vesting contracts changed. - assert!(!staking_contract::staking_contract_exists(owner_address, new_operator_address), 0); - assert!(staking_contract::staking_contract_exists(owner_address, operator_2_address), 1); - assert!(vesting::operator(vesting_contract_2) == operator_2_address, 2); - } - - #[test( - aptos_framework = @0x1, - owner = @0x123, - operator_1 = @0x234, - operator_2 = @0x345, - new_voter = @0x567, - )] - public entry fun test_set_voter( - aptos_framework: &signer, - owner: &signer, - operator_1: &signer, - operator_2: &signer, - new_voter: &signer, - ) { - let owner_address = signer::address_of(owner); - let operator_1_address = signer::address_of(operator_1); - let operator_2_address = signer::address_of(operator_2); - let new_voter_address = signer::address_of(new_voter); - vesting::setup( - aptos_framework, &vector[owner_address, operator_1_address, operator_2_address, new_voter_address]); - staking_contract::setup_staking_contract(aptos_framework, owner, operator_1, INITIAL_BALANCE, 0); - staking_contract::setup_staking_contract(aptos_framework, owner, operator_2, INITIAL_BALANCE, 0); - - let vesting_contract_1 = vesting::setup_vesting_contract(owner, &vector[@11], &vector[INITIAL_BALANCE], owner_address, 0); - vesting::update_operator(owner, vesting_contract_1, operator_1_address, 0); - let vesting_contract_2 = vesting::setup_vesting_contract(owner, &vector[@12], &vector[INITIAL_BALANCE], owner_address, 0); - vesting::update_operator(owner, vesting_contract_2, operator_2_address, 0); - - let (_sk, pk, pop) = stake::generate_identity(); - stake::initialize_test_validator(&pk, &pop, owner, INITIAL_BALANCE, false, false); - - set_voter(owner, operator_1_address, new_voter_address); - // Stake pool's voter has been updated. - assert!(stake::get_delegated_voter(owner_address) == new_voter_address, 0); - // Staking contract with operator 1's voter has been updated. - // Staking contract with operator_2 should stay unchanged. - let stake_pool_address_1 = staking_contract::stake_pool_address(owner_address, operator_1_address); - let stake_pool_address_2 = staking_contract::stake_pool_address(owner_address, operator_2_address); - assert!(stake::get_delegated_voter(stake_pool_address_1) == new_voter_address, 1); - assert!(stake::get_delegated_voter(stake_pool_address_2) == operator_2_address, 2); - // Vesting contract 1's voter has been updated while vesting contract 2's stays unchanged. - assert!(vesting::voter(vesting_contract_1) == new_voter_address, 3); - assert!(vesting::voter(vesting_contract_2) == owner_address, 4); - } - - #[test( - aptos_framework = @0x1, - owner = @0x123, - operator_1 = @0x234, - operator_2 = @0x345, - new_voter = @0x567, - )] - public entry fun test_set_voter_nothing_to_change( - aptos_framework: &signer, - owner: &signer, - operator_1: &signer, - operator_2: &signer, - new_voter: &signer, - ) { - let owner_address = signer::address_of(owner); - let operator_1_address = signer::address_of(operator_1); - let operator_2_address = signer::address_of(operator_2); - let new_voter_address = signer::address_of(new_voter); - vesting::setup( - aptos_framework, &vector[owner_address, operator_1_address, operator_2_address, new_voter_address]); - staking_contract::setup_staking_contract(aptos_framework, owner, operator_2, INITIAL_BALANCE, 0); - - let vesting_contract_2 = vesting::setup_vesting_contract(owner, &vector[@12], &vector[INITIAL_BALANCE], owner_address, 0); - vesting::update_operator(owner, vesting_contract_2, operator_2_address, 0); - - set_operator(owner, operator_1_address, new_voter_address); - // No staking or vesting contracts changed. - let stake_pool_address = staking_contract::stake_pool_address(owner_address, operator_2_address); - assert!(stake::get_delegated_voter(stake_pool_address) == operator_2_address, 0); - assert!(vesting::voter(vesting_contract_2) == owner_address, 1); - } -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/state_storage.move b/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/state_storage.move deleted file mode 100644 index af9d74961..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/state_storage.move +++ /dev/null @@ -1,90 +0,0 @@ -module aptos_framework::state_storage { - - use aptos_framework::system_addresses; - use std::error; - - friend aptos_framework::block; - friend aptos_framework::genesis; - friend aptos_framework::storage_gas; - - const ESTATE_STORAGE_USAGE: u64 = 0; - - struct Usage has copy, drop, store { - items: u64, - bytes: u64, - } - - /// This is updated at the beginning of each epoch, reflecting the storage - /// usage after the last txn of the previous epoch is committed. - struct StateStorageUsage has key, store { - epoch: u64, - usage: Usage, - } - - public(friend) fun initialize(aptos_framework: &signer) { - system_addresses::assert_aptos_framework(aptos_framework); - assert!( - !exists(@aptos_framework), - error::already_exists(ESTATE_STORAGE_USAGE) - ); - move_to(aptos_framework, StateStorageUsage { - epoch: 0, - usage: Usage { - items: 0, - bytes: 0, - } - }); - } - - public(friend) fun on_new_block(epoch: u64) acquires StateStorageUsage { - assert!( - exists(@aptos_framework), - error::not_found(ESTATE_STORAGE_USAGE) - ); - let usage = borrow_global_mut(@aptos_framework); - if (epoch != usage.epoch) { - usage.epoch = epoch; - usage.usage = get_state_storage_usage_only_at_epoch_beginning(); - } - } - - public(friend) fun current_items_and_bytes(): (u64, u64) acquires StateStorageUsage { - assert!( - exists(@aptos_framework), - error::not_found(ESTATE_STORAGE_USAGE) - ); - let usage = borrow_global(@aptos_framework); - (usage.usage.items, usage.usage.bytes) - } - - /// Warning: the result returned is based on the base state view held by the - /// VM for the entire block or chunk of transactions, it's only deterministic - /// if called from the first transaction of the block because the execution layer - /// guarantees a fresh state view then. - native fun get_state_storage_usage_only_at_epoch_beginning(): Usage; - - #[test_only] - public fun set_for_test(epoch: u64, items: u64, bytes: u64) acquires StateStorageUsage { - assert!( - exists(@aptos_framework), - error::not_found(ESTATE_STORAGE_USAGE) - ); - let usage = borrow_global_mut(@aptos_framework); - usage.epoch = epoch; - usage.usage = Usage { - items, - bytes - }; - } - - // ======================== deprecated ============================ - friend aptos_framework::reconfiguration; - - struct GasParameter has key, store { - usage: Usage, - } - - public(friend) fun on_reconfig() { - abort 0 - } -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/storage_gas.move b/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/storage_gas.move deleted file mode 100644 index 991b61925..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/storage_gas.move +++ /dev/null @@ -1,622 +0,0 @@ -/// Gas parameters for global storage. -/// -/// # General overview sections -/// -/// [Definitions](#definitions) -/// -/// * [Utilization dimensions](#utilization-dimensions) -/// * [Utilization ratios](#utilization-ratios) -/// * [Gas curve lookup](#gas-curve-lookup) -/// * [Item-wise operations](#item-wise-operations) -/// * [Byte-wise operations](#byte-wise-operations) -/// -/// [Function dependencies](#function-dependencies) -/// -/// * [Initialization](#initialization) -/// * [Reconfiguration](#reconfiguration) -/// * [Setting configurations](#setting-configurations) -/// -/// # Definitions -/// -/// ## Utilization dimensions -/// -/// Global storage gas fluctuates each epoch based on total utilization, -/// which is defined across two dimensions: -/// -/// 1. The number of "items" in global storage. -/// 2. The number of bytes in global storage. -/// -/// "Items" include: -/// -/// 1. Resources having the `key` attribute, which have been moved into -/// global storage via a `move_to()` operation. -/// 2. Table entries. -/// -/// ## Utilization ratios -/// -/// `initialize()` sets an arbitrary "target" utilization for both -/// item-wise and byte-wise storage, then each epoch, gas parameters are -/// reconfigured based on the "utilization ratio" for each of the two -/// utilization dimensions. The utilization ratio for a given dimension, -/// either item-wise or byte-wise, is taken as the quotient of actual -/// utilization and target utilization. For example, given a 500 GB -/// target and 250 GB actual utilization, the byte-wise utilization -/// ratio is 50%. -/// -/// See `base_8192_exponential_curve()` for mathematical definitions. -/// -/// ## Gas curve lookup -/// -/// The utilization ratio in a given epoch is used as a lookup value in -/// a Eulerian approximation to an exponential curve, known as a -/// `GasCurve`, which is defined in `base_8192_exponential_curve()`, -/// based on a minimum gas charge and a maximum gas charge. -/// -/// The minimum gas charge and maximum gas charge at the endpoints of -/// the curve are set in `initialize()`, and correspond to the following -/// operations defined in `StorageGas`: -/// -/// 1. Per-item read -/// 2. Per-item create -/// 3. Per-item write -/// 4. Per-byte read -/// 5. Per-byte create -/// 6. Per-byte write -/// -/// For example, if the byte-wise utilization ratio is 50%, then -/// per-byte reads will charge the minimum per-byte gas cost, plus -/// 1.09% of the difference between the maximum and the minimum cost. -/// See `base_8192_exponential_curve()` for a supporting calculation. -/// -/// ## Item-wise operations -/// -/// 1. Per-item read gas is assessed whenever an item is read from -/// global storage via `borrow_global()` or via a table entry read -/// operation. -/// 2. Per-item create gas is assessed whenever an item is created in -/// global storage via `move_to()` or via a table entry creation -/// operation. -/// 3. Per-item write gas is assessed whenever an item is overwritten in -/// global storage via `borrow_global_mut` or via a table entry -/// mutation operation. -/// -/// ## Byte-wise operations -/// -/// Byte-wise operations are assessed in a manner similar to per-item -/// operations, but account for the number of bytes affected by the -/// given operation. Notably, this number denotes the total number of -/// bytes in an *entire item*. -/// -/// For example, if an operation mutates a `u8` field in a resource that -/// has 5 other `u128` fields, the per-byte gas write cost will account -/// for $(5 * 128) / 8 + 1 = 81$ bytes. Vectors are similarly treated -/// as fields. -/// -/// # Function dependencies -/// -/// The below dependency chart uses `mermaid.js` syntax, which can be -/// automatically rendered into a diagram (depending on the browser) -/// when viewing the documentation file generated from source code. If -/// a browser renders the diagrams with coloring that makes it difficult -/// to read, try a different browser. -/// -/// ## Initialization -/// -/// ```mermaid -/// -/// flowchart LR -/// -/// initialize --> base_8192_exponential_curve -/// base_8192_exponential_curve --> new_gas_curve -/// base_8192_exponential_curve --> new_point -/// new_gas_curve --> validate_points -/// -/// ``` -/// -/// ## Reconfiguration -/// -/// ```mermaid -/// -/// flowchart LR -/// -/// calculate_gas --> Interpolate %% capitalized -/// calculate_read_gas --> calculate_gas -/// calculate_create_gas --> calculate_gas -/// calculate_write_gas --> calculate_gas -/// on_reconfig --> calculate_read_gas -/// on_reconfig --> calculate_create_gas -/// on_reconfig --> calculate_write_gas -/// reconfiguration::reconfigure --> on_reconfig -/// -/// ``` -/// -/// Here, the function `interpolate()` is spelled `Interpolate` because -/// `interpolate` is a reserved word in `mermaid.js`. -/// -/// ## Setting configurations -/// -/// ```mermaid -/// -/// flowchart LR -/// -/// gas_schedule::set_storage_gas_config --> set_config -/// -/// ``` -/// -/// # Complete docgen index -/// -/// The below index is automatically generated from source code: -module aptos_framework::storage_gas { - - use aptos_framework::system_addresses; - use std::error; - use aptos_framework::state_storage; - use std::vector; - - friend aptos_framework::gas_schedule; - friend aptos_framework::genesis; - friend aptos_framework::reconfiguration; - - const ESTORAGE_GAS_CONFIG: u64 = 0; - const ESTORAGE_GAS: u64 = 1; - const EINVALID_GAS_RANGE: u64 = 2; - const EZERO_TARGET_USAGE: u64 = 3; - const ETARGET_USAGE_TOO_BIG: u64 = 4; - const EINVALID_MONOTONICALLY_NON_DECREASING_CURVE: u64 = 5; - const EINVALID_POINT_RANGE: u64 = 6; - - const BASIS_POINT_DENOMINATION: u64 = 10000; - - const MAX_U64: u64 = 18446744073709551615; - - /// Storage parameters, reconfigured each epoch. - /// - /// Parameters are updated during reconfiguration via - /// `on_reconfig()`, based on storage utilization at the beginning - /// of the epoch in which the reconfiguration transaction is - /// executed. The gas schedule derived from these parameters will - /// then be used to calculate gas for the entirety of the - /// following epoch, such that the data is one epoch older than - /// ideal. Notably, however, per this approach, the virtual machine - /// does not need to reload gas parameters after the - /// first transaction of an epoch. - struct StorageGas has key { - /// Cost to read an item from global storage. - per_item_read: u64, - /// Cost to create an item in global storage. - per_item_create: u64, - /// Cost to overwrite an item in global storage. - per_item_write: u64, - /// Cost to read a byte from global storage. - per_byte_read: u64, - /// Cost to create a byte in global storage. - per_byte_create: u64, - /// Cost to overwrite a byte in global storage. - per_byte_write: u64, - } - - /// A point in a Eulerian curve approximation, with each coordinate - /// given in basis points: - /// - /// | Field value | Percentage | - /// |-------------|------------| - /// | `1` | 00.01 % | - /// | `10` | 00.10 % | - /// | `100` | 01.00 % | - /// | `1000` | 10.00 % | - struct Point has copy, drop, store { - /// x-coordinate basis points, corresponding to utilization - /// ratio in `base_8192_exponential_curve()`. - x: u64, - /// y-coordinate basis points, corresponding to utilization - /// multiplier in `base_8192_exponential_curve()`. - y: u64 - } - - /// A gas configuration for either per-item or per-byte costs. - /// - /// Contains a target usage amount, as well as a Eulerian - /// approximation of an exponential curve for reads, creations, and - /// overwrites. See `StorageGasConfig`. - struct UsageGasConfig has copy, drop, store { - target_usage: u64, - read_curve: GasCurve, - create_curve: GasCurve, - write_curve: GasCurve, - } - - /// Eulerian approximation of an exponential curve. - /// - /// Assumes the following endpoints: - /// - /// * $(x_0, y_0) = (0, 0)$ - /// * $(x_f, y_f) = (10000, 10000)$ - /// - /// Intermediate points must satisfy: - /// - /// 1. $x_i > x_{i - 1}$ ( $x$ is strictly increasing). - /// 2. $0 \leq x_i \leq 10000$ ( $x$ is between 0 and 10000). - /// 3. $y_i \geq y_{i - 1}$ ( $y$ is non-decreasing). - /// 4. $0 \leq y_i \leq 10000$ ( $y$ is between 0 and 10000). - /// - /// Lookup between two successive points is calculated via linear - /// interpolation, e.g., as if there were a straight line between - /// them. - /// - /// See `base_8192_exponential_curve()`. - struct GasCurve has copy, drop, store { - min_gas: u64, - max_gas: u64, - points: vector, - } - - /// Default exponential curve having base 8192. - /// - /// # Function definition - /// - /// Gas price as a function of utilization ratio is defined as: - /// - /// $$g(u_r) = g_{min} + \frac{(b^{u_r} - 1)}{b - 1} \Delta_g$$ - /// - /// $$g(u_r) = g_{min} + u_m \Delta_g$$ - /// - /// | Variable | Description | - /// |-------------------------------------|------------------------| - /// | $g_{min}$ | `min_gas` | - /// | $g_{max}$ | `max_gas` | - /// | $\Delta_{g} = g_{max} - g_{min}$ | Gas delta | - /// | $u$ | Utilization | - /// | $u_t$ | Target utilization | - /// | $u_r = u / u_t$ | Utilization ratio | - /// | $u_m = \frac{(b^{u_r} - 1)}{b - 1}$ | Utilization multiplier | - /// | $b = 8192$ | Exponent base | - /// - /// # Example - /// - /// Hence for a utilization ratio of 50% ( $u_r = 0.5$ ): - /// - /// $$g(0.5) = g_{min} + \frac{8192^{0.5} - 1}{8192 - 1} \Delta_g$$ - /// - /// $$g(0.5) \approx g_{min} + 0.0109 \Delta_g$$ - /// - /// Which means that the price above `min_gas` is approximately - /// 1.09% of the difference between `max_gas` and `min_gas`. - /// - /// # Utilization multipliers - /// - /// | $u_r$ | $u_m$ (approximate) | - /// |-------|---------------------| - /// | 10% | 0.02% | - /// | 20% | 0.06% | - /// | 30% | 0.17% | - /// | 40% | 0.44% | - /// | 50% | 1.09% | - /// | 60% | 2.71% | - /// | 70% | 6.69% | - /// | 80% | 16.48% | - /// | 90% | 40.61% | - /// | 95% | 63.72% | - /// | 99% | 91.38% | - public fun base_8192_exponential_curve(min_gas: u64, max_gas: u64): GasCurve { - new_gas_curve(min_gas, max_gas, - vector[ - new_point(1000, 2), - new_point(2000, 6), - new_point(3000, 17), - new_point(4000, 44), - new_point(5000, 109), - new_point(6000, 271), - new_point(7000, 669), - new_point(8000, 1648), - new_point(9000, 4061), - new_point(9500, 6372), - new_point(9900, 9138), - ] - ) - } - - /// Gas configurations for per-item and per-byte prices. - struct StorageGasConfig has copy, drop, key { - /// Per-item gas configuration. - item_config: UsageGasConfig, - /// Per-byte gas configuration. - byte_config: UsageGasConfig, - } - - public fun new_point(x: u64, y: u64): Point { - assert!( - x <= BASIS_POINT_DENOMINATION && y <= BASIS_POINT_DENOMINATION, - error::invalid_argument(EINVALID_POINT_RANGE) - ); - Point { x, y } - } - - public fun new_gas_curve(min_gas: u64, max_gas: u64, points: vector): GasCurve { - assert!(max_gas >= min_gas, error::invalid_argument(EINVALID_GAS_RANGE)); - assert!(max_gas <= MAX_U64 / BASIS_POINT_DENOMINATION, error::invalid_argument(EINVALID_GAS_RANGE)); - validate_points(&points); - GasCurve { - min_gas, - max_gas, - points - } - } - - public fun new_usage_gas_config(target_usage: u64, read_curve: GasCurve, create_curve: GasCurve, write_curve: GasCurve): UsageGasConfig { - assert!(target_usage > 0, error::invalid_argument(EZERO_TARGET_USAGE)); - assert!(target_usage <= MAX_U64 / BASIS_POINT_DENOMINATION, error::invalid_argument(ETARGET_USAGE_TOO_BIG)); - UsageGasConfig { - target_usage, - read_curve, - create_curve, - write_curve, - } - } - - public fun new_storage_gas_config(item_config: UsageGasConfig, byte_config: UsageGasConfig): StorageGasConfig { - StorageGasConfig { - item_config, - byte_config - } - } - - public(friend) fun set_config(aptos_framework: &signer, config: StorageGasConfig) acquires StorageGasConfig { - system_addresses::assert_aptos_framework(aptos_framework); - *borrow_global_mut(@aptos_framework) = config; - } - - /// Initialize per-item and per-byte gas prices. - /// - /// Target utilization is set to 2 billion items and 1 TB. - /// - /// `GasCurve` endpoints are initialized as follows: - /// - /// | Data style | Operation | Minimum gas | Maximum gas | - /// |------------|-----------|-------------|-------------| - /// | Per item | Read | 300K | 300K * 100 | - /// | Per item | Create | 300k | 300k * 100 | - /// | Per item | Write | 300K | 300K * 100 | - /// | Per byte | Read | 300 | 300 * 100 | - /// | Per byte | Create | 5K | 5K * 100 | - /// | Per byte | Write | 5K | 5K * 100 | - /// - /// `StorageGas` values are additionally initialized, but per - /// `on_reconfig()`, they will be reconfigured for each subsequent - /// epoch after initialization. - /// - /// See `base_8192_exponential_curve()` fore more information on - /// target utilization. - public fun initialize(aptos_framework: &signer) { - system_addresses::assert_aptos_framework(aptos_framework); - assert!( - !exists(@aptos_framework), - error::already_exists(ESTORAGE_GAS_CONFIG) - ); - - let k: u64 = 1000; - let m: u64 = 1000 * 1000; - - let item_config = UsageGasConfig { - target_usage: 2 * k * m, // 2 billion - read_curve: base_8192_exponential_curve(300 * k, 300 * k * 100), - create_curve: base_8192_exponential_curve(300 * k, 300 * k * 100), - write_curve: base_8192_exponential_curve(300 * k, 300 * k * 100), - }; - let byte_config = UsageGasConfig { - target_usage: 1 * m * m, // 1TB - read_curve: base_8192_exponential_curve(300, 300 * 100), - create_curve: base_8192_exponential_curve(5 * k, 5 * k * 100), - write_curve: base_8192_exponential_curve(5 * k, 5 * k * 100), - }; - move_to(aptos_framework, StorageGasConfig { - item_config, - byte_config, - }); - - assert!( - !exists(@aptos_framework), - error::already_exists(ESTORAGE_GAS) - ); - move_to(aptos_framework, StorageGas { - per_item_read: 300 * k, - per_item_create: 5 * m, - per_item_write: 300 * k, - per_byte_read: 300, - per_byte_create: 5 * k, - per_byte_write: 5 * k, - }); - } - - fun validate_points(points: &vector) { - let len = vector::length(points); - spec { - assume len < MAX_U64; - }; - let i = 0; - while ({ - spec { - invariant forall j in 0..i: { - let cur = if (j == 0) { Point { x: 0, y: 0 } } else { points[j - 1] }; - let next = if (j == len) { Point { x: BASIS_POINT_DENOMINATION, y: BASIS_POINT_DENOMINATION } } else { points[j] }; - cur.x < next.x && cur.y <= next.y - }; - }; - i <= len - }) { - let cur = if (i == 0) { &Point { x: 0, y: 0 } } else { vector::borrow(points, i - 1) }; - let next = if (i == len) { &Point { x: BASIS_POINT_DENOMINATION, y: BASIS_POINT_DENOMINATION } } else { vector::borrow(points, i) }; - assert!(cur.x < next.x && cur.y <= next.y, error::invalid_argument(EINVALID_MONOTONICALLY_NON_DECREASING_CURVE)); - i = i + 1; - } - } - - fun calculate_gas(max_usage: u64, current_usage: u64, curve: &GasCurve): u64 { - let capped_current_usage = if (current_usage > max_usage) max_usage else current_usage; - let points = &curve.points; - let num_points = vector::length(points); - let current_usage_bps = capped_current_usage * BASIS_POINT_DENOMINATION / max_usage; - - // Check the corner case that current_usage_bps drops before the first point. - let (left, right) = if (num_points == 0) { - (&Point { x: 0, y: 0 }, &Point { x: BASIS_POINT_DENOMINATION, y: BASIS_POINT_DENOMINATION }) - } else if (current_usage_bps < vector::borrow(points, 0).x) { - (&Point { x: 0, y: 0 }, vector::borrow(points, 0)) - } else if (vector::borrow(points, num_points - 1).x <= current_usage_bps) { - (vector::borrow(points, num_points - 1), &Point { x: BASIS_POINT_DENOMINATION, y: BASIS_POINT_DENOMINATION }) - } else { - let (i, j) = (0, num_points - 2); - while ({ - spec { - invariant i <= j; - invariant j < num_points - 1; - invariant points[i].x <= current_usage_bps; - invariant current_usage_bps < points[j + 1].x; - }; - i < j - }) { - let mid = j - (j - i) / 2; - if (current_usage_bps < vector::borrow(points, mid).x) { - spec { - // j is strictly decreasing. - assert mid - 1 < j; - }; - j = mid - 1; - } else { - spec { - // i is strictly increasing. - assert i < mid; - }; - i = mid; - }; - }; - (vector::borrow(points, i), vector::borrow(points, i + 1)) - }; - let y_interpolated = interpolate(left.x, right.x, left.y, right.y, current_usage_bps); - interpolate(0, BASIS_POINT_DENOMINATION, curve.min_gas, curve.max_gas, y_interpolated) - } - - // Interpolates y for x on the line between (x0, y0) and (x1, y1). - fun interpolate(x0: u64, x1: u64, y0: u64, y1: u64, x: u64): u64 { - y0 + (x - x0) * (y1 - y0) / (x1 - x0) - } - - fun calculate_read_gas(config: &UsageGasConfig, usage: u64): u64 { - calculate_gas(config.target_usage, usage, &config.read_curve) - } - - fun calculate_create_gas(config: &UsageGasConfig, usage: u64): u64 { - calculate_gas(config.target_usage, usage, &config.create_curve) - } - - fun calculate_write_gas(config: &UsageGasConfig, usage: u64): u64 { - calculate_gas(config.target_usage, usage, &config.write_curve) - } - - public(friend) fun on_reconfig() acquires StorageGas, StorageGasConfig { - assert!( - exists(@aptos_framework), - error::not_found(ESTORAGE_GAS_CONFIG) - ); - assert!( - exists(@aptos_framework), - error::not_found(ESTORAGE_GAS) - ); - let (items, bytes) = state_storage::current_items_and_bytes(); - let gas_config = borrow_global(@aptos_framework); - let gas = borrow_global_mut(@aptos_framework); - gas.per_item_read = calculate_read_gas(&gas_config.item_config, items); - gas.per_item_create = calculate_create_gas(&gas_config.item_config, items); - gas.per_item_write = calculate_write_gas(&gas_config.item_config, items); - gas.per_byte_read = calculate_read_gas(&gas_config.byte_config, bytes); - gas.per_byte_create = calculate_create_gas(&gas_config.byte_config, bytes); - gas.per_byte_write = calculate_write_gas(&gas_config.byte_config, bytes); - } - - // TODO: reactivate this test after fixing assertions - //#[test(framework = @aptos_framework)] - #[test_only] - fun test_initialize_and_reconfig(framework: signer) acquires StorageGas, StorageGasConfig { - state_storage::initialize(&framework); - initialize(&framework); - on_reconfig(); - let gas_parameter = borrow_global(@aptos_framework); - assert!(gas_parameter.per_item_read == 10, 0); - assert!(gas_parameter.per_item_create == 10, 0); - assert!(gas_parameter.per_item_write == 10, 0); - assert!(gas_parameter.per_byte_read == 1, 0); - assert!(gas_parameter.per_byte_create == 1, 0); - assert!(gas_parameter.per_byte_write == 1, 0); - } - - #[test] - fun test_curve() { - let constant_curve = new_gas_curve(5, 5, vector[]); - let linear_curve = new_gas_curve(1, 1000, vector[]); - let standard_curve = base_8192_exponential_curve(1, 1000); - let target = BASIS_POINT_DENOMINATION / 2; - while (target < 2 * BASIS_POINT_DENOMINATION) { - let i = 0; - let old_standard_curve_gas = 1; - while (i <= target + 7) { - assert!(calculate_gas(target, i, &constant_curve) == 5, 0); - assert!(calculate_gas(target, i, &linear_curve) == (if (i < target) { 1 + 999 * (i * BASIS_POINT_DENOMINATION / target) / BASIS_POINT_DENOMINATION } else { 1000 }), 0); - let new_standard_curve_gas = calculate_gas(target, i, &standard_curve); - assert!(new_standard_curve_gas >= old_standard_curve_gas, 0); - old_standard_curve_gas = new_standard_curve_gas; - i = i + 3; - }; - assert!(old_standard_curve_gas == 1000, 0); - target = target + BASIS_POINT_DENOMINATION; - } - } - - #[test(framework = @aptos_framework)] - fun test_set_storage_gas_config(framework: signer) acquires StorageGas, StorageGasConfig { - state_storage::initialize(&framework); - initialize(&framework); - let item_curve = new_gas_curve(1000, 2000, - vector[new_point(3000, 0), new_point(5000, 5000), new_point(8000, 5000)] - ); - let byte_curve = new_gas_curve(0, 1000, vector::singleton(new_point(5000, 3000))); - let item_usage_config = new_usage_gas_config(100, copy item_curve, copy item_curve, copy item_curve); - let byte_usage_config = new_usage_gas_config(2000, copy byte_curve, copy byte_curve, copy byte_curve); - let storage_gas_config = new_storage_gas_config(item_usage_config, byte_usage_config); - set_config(&framework, storage_gas_config); - { - state_storage::set_for_test(0, 20, 100); - on_reconfig(); - let gas_parameter = borrow_global(@aptos_framework); - assert!(gas_parameter.per_item_read == 1000, 0); - assert!(gas_parameter.per_byte_read == 30, 0); - }; - { - state_storage::set_for_test(0, 40, 800); - on_reconfig(); - let gas_parameter = borrow_global(@aptos_framework); - assert!(gas_parameter.per_item_create == 1250, 0); - assert!(gas_parameter.per_byte_create == 240, 0); - }; - { - state_storage::set_for_test(0, 60, 1200); - on_reconfig(); - let gas_parameter = borrow_global(@aptos_framework); - assert!(gas_parameter.per_item_write == 1500, 0); - assert!(gas_parameter.per_byte_write == 440, 0); - }; - { - state_storage::set_for_test(0, 90, 1800); - on_reconfig(); - let gas_parameter = borrow_global(@aptos_framework); - assert!(gas_parameter.per_item_create == 1750, 0); - assert!(gas_parameter.per_byte_create == 860, 0); - }; - { - // usage overflow case - state_storage::set_for_test(0, 110, 2200); - on_reconfig(); - let gas_parameter = borrow_global(@aptos_framework); - assert!(gas_parameter.per_item_read == 2000, 0); - assert!(gas_parameter.per_byte_read == 1000, 0); - }; - } -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/system_addresses.move b/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/system_addresses.move deleted file mode 100644 index 49b82099a..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/system_addresses.move +++ /dev/null @@ -1,82 +0,0 @@ -module aptos_framework::system_addresses { - use std::error; - use std::signer; - - /// The address/account did not correspond to the core resource address - const ENOT_CORE_RESOURCE_ADDRESS: u64 = 1; - /// The operation can only be performed by the VM - const EVM: u64 = 2; - /// The address/account did not correspond to the core framework address - const ENOT_APTOS_FRAMEWORK_ADDRESS: u64 = 3; - /// The address is not framework reserved address - const ENOT_FRAMEWORK_RESERVED_ADDRESS: u64 = 4; - - public fun assert_core_resource(account: &signer) { - assert_core_resource_address(signer::address_of(account)) - } - - public fun assert_core_resource_address(addr: address) { - assert!(is_core_resource_address(addr), error::permission_denied(ENOT_CORE_RESOURCE_ADDRESS)) - } - - public fun is_core_resource_address(addr: address): bool { - addr == @core_resources - } - - public fun assert_aptos_framework(account: &signer) { - assert!( - is_aptos_framework_address(signer::address_of(account)), - error::permission_denied(ENOT_APTOS_FRAMEWORK_ADDRESS), - ) - } - - public fun assert_framework_reserved_address(account: &signer) { - assert_framework_reserved(signer::address_of(account)); - } - - public fun assert_framework_reserved(addr: address) { - assert!( - is_framework_reserved_address(addr), - error::permission_denied(ENOT_FRAMEWORK_RESERVED_ADDRESS), - ) - } - - /// Return true if `addr` is 0x0 or under the on chain governance's control. - public fun is_framework_reserved_address(addr: address): bool { - is_aptos_framework_address(addr) || - addr == @0x2 || - addr == @0x3 || - addr == @0x4 || - addr == @0x5 || - addr == @0x6 || - addr == @0x7 || - addr == @0x8 || - addr == @0x9 || - addr == @0xa - } - - /// Return true if `addr` is 0x1. - public fun is_aptos_framework_address(addr: address): bool { - addr == @aptos_framework - } - - /// Assert that the signer has the VM reserved address. - public fun assert_vm(account: &signer) { - assert!(is_vm(account), error::permission_denied(EVM)) - } - - /// Return true if `addr` is a reserved address for the VM to call system modules. - public fun is_vm(account: &signer): bool { - is_vm_address(signer::address_of(account)) - } - - /// Return true if `addr` is a reserved address for the VM to call system modules. - public fun is_vm_address(addr: address): bool { - addr == @vm_reserved - } - - /// Return true if `addr` is either the VM address or an Aptos Framework address. - public fun is_reserved_address(addr: address): bool { - is_aptos_framework_address(addr) || is_vm_address(addr) - } -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/timestamp.move b/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/timestamp.move deleted file mode 100644 index 646ff1a97..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/timestamp.move +++ /dev/null @@ -1,88 +0,0 @@ -/// This module keeps a global wall clock that stores the current Unix time in microseconds. -/// It interacts with the other modules in the following ways: -/// * genesis: to initialize the timestamp -/// * block: to reach consensus on the global wall clock time -module aptos_framework::timestamp { - use aptos_framework::system_addresses; - use std::error; - - friend aptos_framework::genesis; - - /// A singleton resource holding the current Unix time in microseconds - struct CurrentTimeMicroseconds has key { - microseconds: u64, - } - - /// Conversion factor between seconds and microseconds - const MICRO_CONVERSION_FACTOR: u64 = 1000000; - - /// The blockchain is not in an operating state yet - const ENOT_OPERATING: u64 = 1; - /// An invalid timestamp was provided - const EINVALID_TIMESTAMP: u64 = 2; - - /// Marks that time has started. This can only be called from genesis and with the aptos framework account. - public(friend) fun set_time_has_started(aptos_framework: &signer) { - system_addresses::assert_aptos_framework(aptos_framework); - let timer = CurrentTimeMicroseconds { microseconds: 0 }; - move_to(aptos_framework, timer); - } - - /// Updates the wall clock time by consensus. Requires VM privilege and will be invoked during block prologue. - public fun update_global_time( - account: &signer, - proposer: address, - timestamp: u64 - ) acquires CurrentTimeMicroseconds { - // Can only be invoked by AptosVM signer. - system_addresses::assert_vm(account); - - let global_timer = borrow_global_mut(@aptos_framework); - let now = global_timer.microseconds; - if (proposer == @vm_reserved) { - // NIL block with null address as proposer. Timestamp must be equal. - assert!(now == timestamp, error::invalid_argument(EINVALID_TIMESTAMP)); - } else { - // Normal block. Time must advance - assert!(now < timestamp, error::invalid_argument(EINVALID_TIMESTAMP)); - global_timer.microseconds = timestamp; - }; - } - - #[test_only] - public fun set_time_has_started_for_testing(account: &signer) { - if (!exists(@aptos_framework)) { - set_time_has_started(account); - }; - } - - #[view] - /// Gets the current time in microseconds. - public fun now_microseconds(): u64 acquires CurrentTimeMicroseconds { - borrow_global(@aptos_framework).microseconds - } - - #[view] - /// Gets the current time in seconds. - public fun now_seconds(): u64 acquires CurrentTimeMicroseconds { - now_microseconds() / MICRO_CONVERSION_FACTOR - } - - #[test_only] - public fun update_global_time_for_test(timestamp_microsecs: u64) acquires CurrentTimeMicroseconds { - let global_timer = borrow_global_mut(@aptos_framework); - let now = global_timer.microseconds; - assert!(now < timestamp_microsecs, error::invalid_argument(EINVALID_TIMESTAMP)); - global_timer.microseconds = timestamp_microsecs; - } - - #[test_only] - public fun update_global_time_for_test_secs(timestamp_seconds: u64) acquires CurrentTimeMicroseconds { - update_global_time_for_test(timestamp_seconds * MICRO_CONVERSION_FACTOR); - } - - #[test_only] - public fun fast_forward_seconds(timestamp_seconds: u64) acquires CurrentTimeMicroseconds { - update_global_time_for_test_secs(now_seconds() + timestamp_seconds); - } -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/transaction_context.move b/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/transaction_context.move deleted file mode 100644 index c3bad2537..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/transaction_context.move +++ /dev/null @@ -1,262 +0,0 @@ -module aptos_framework::transaction_context { - use std::error; - use std::features; - use std::option::Option; - use std::string::String; - - /// Transaction context is only available in the user transaction prologue, execution, or epilogue phases. - const ETRANSACTION_CONTEXT_NOT_AVAILABLE: u64 = 1; - - /// The transaction context extension feature is not enabled. - const ETRANSACTION_CONTEXT_EXTENSION_NOT_ENABLED: u64 = 2; - - /// A wrapper denoting aptos unique identifer (AUID) - /// for storing an address - struct AUID has drop, store { - unique_address: address - } - - /// Represents the entry function payload. - struct EntryFunctionPayload has copy, drop { - account_address: address, - module_name: String, - function_name: String, - ty_args_names: vector, - args: vector>, - } - - /// Represents the multisig payload. - struct MultisigPayload has copy, drop { - multisig_address: address, - entry_function_payload: Option, - } - - /// Returns the transaction hash of the current transaction. - native fun get_txn_hash(): vector; - - /// Returns the transaction hash of the current transaction. - /// Internally calls the private function `get_txn_hash`. - /// This function is created for to feature gate the `get_txn_hash` function. - public fun get_transaction_hash(): vector { - get_txn_hash() - } - - /// Returns a universally unique identifier (of type address) generated - /// by hashing the transaction hash of this transaction and a sequence number - /// specific to this transaction. This function can be called any - /// number of times inside a single transaction. Each such call increments - /// the sequence number and generates a new unique address. - /// Uses Scheme in types/src/transaction/authenticator.rs for domain separation - /// from other ways of generating unique addresses. - native fun generate_unique_address(): address; - - /// Returns a aptos unique identifier. Internally calls - /// the private function `generate_unique_address`. This function is - /// created for to feature gate the `generate_unique_address` function. - public fun generate_auid_address(): address { - generate_unique_address() - } - - /// Returns the script hash of the current entry function. - public native fun get_script_hash(): vector; - - /// This method runs `generate_unique_address` native function and returns - /// the generated unique address wrapped in the AUID class. - public fun generate_auid(): AUID { - return AUID { - unique_address: generate_unique_address() - } - } - - /// Returns the unique address wrapped in the given AUID struct. - public fun auid_address(auid: &AUID): address { - auid.unique_address - } - - /// Returns the sender's address for the current transaction. - /// This function aborts if called outside of the transaction prologue, execution, or epilogue phases. - public fun sender(): address { - assert!(features::transaction_context_extension_enabled(), error::invalid_state(ETRANSACTION_CONTEXT_EXTENSION_NOT_ENABLED)); - sender_internal() - } - native fun sender_internal(): address; - - /// Returns the list of the secondary signers for the current transaction. - /// If the current transaction has no secondary signers, this function returns an empty vector. - /// This function aborts if called outside of the transaction prologue, execution, or epilogue phases. - public fun secondary_signers(): vector
{ - assert!(features::transaction_context_extension_enabled(), error::invalid_state(ETRANSACTION_CONTEXT_EXTENSION_NOT_ENABLED)); - secondary_signers_internal() - } - native fun secondary_signers_internal(): vector
; - - /// Returns the gas payer address for the current transaction. - /// It is either the sender's address if no separate gas fee payer is specified for the current transaction, - /// or the address of the separate gas fee payer if one is specified. - /// This function aborts if called outside of the transaction prologue, execution, or epilogue phases. - public fun gas_payer(): address { - assert!(features::transaction_context_extension_enabled(), error::invalid_state(ETRANSACTION_CONTEXT_EXTENSION_NOT_ENABLED)); - gas_payer_internal() - } - native fun gas_payer_internal(): address; - - /// Returns the max gas amount in units which is specified for the current transaction. - /// This function aborts if called outside of the transaction prologue, execution, or epilogue phases. - public fun max_gas_amount(): u64 { - assert!(features::transaction_context_extension_enabled(), error::invalid_state(ETRANSACTION_CONTEXT_EXTENSION_NOT_ENABLED)); - max_gas_amount_internal() - } - native fun max_gas_amount_internal(): u64; - - /// Returns the gas unit price in Octas which is specified for the current transaction. - /// This function aborts if called outside of the transaction prologue, execution, or epilogue phases. - public fun gas_unit_price(): u64 { - assert!(features::transaction_context_extension_enabled(), error::invalid_state(ETRANSACTION_CONTEXT_EXTENSION_NOT_ENABLED)); - gas_unit_price_internal() - } - native fun gas_unit_price_internal(): u64; - - /// Returns the chain ID specified for the current transaction. - /// This function aborts if called outside of the transaction prologue, execution, or epilogue phases. - public fun chain_id(): u8 { - assert!(features::transaction_context_extension_enabled(), error::invalid_state(ETRANSACTION_CONTEXT_EXTENSION_NOT_ENABLED)); - chain_id_internal() - } - native fun chain_id_internal(): u8; - - /// Returns the entry function payload if the current transaction has such a payload. Otherwise, return `None`. - /// This function aborts if called outside of the transaction prologue, execution, or epilogue phases. - public fun entry_function_payload(): Option { - assert!(features::transaction_context_extension_enabled(), error::invalid_state(ETRANSACTION_CONTEXT_EXTENSION_NOT_ENABLED)); - entry_function_payload_internal() - } - native fun entry_function_payload_internal(): Option; - - /// Returns the account address of the entry function payload. - public fun account_address(payload: &EntryFunctionPayload): address { - assert!(features::transaction_context_extension_enabled(), error::invalid_state(ETRANSACTION_CONTEXT_EXTENSION_NOT_ENABLED)); - payload.account_address - } - - /// Returns the module name of the entry function payload. - public fun module_name(payload: &EntryFunctionPayload): String { - assert!(features::transaction_context_extension_enabled(), error::invalid_state(ETRANSACTION_CONTEXT_EXTENSION_NOT_ENABLED)); - payload.module_name - } - - /// Returns the function name of the entry function payload. - public fun function_name(payload: &EntryFunctionPayload): String { - assert!(features::transaction_context_extension_enabled(), error::invalid_state(ETRANSACTION_CONTEXT_EXTENSION_NOT_ENABLED)); - payload.function_name - } - - /// Returns the type arguments names of the entry function payload. - public fun type_arg_names(payload: &EntryFunctionPayload): vector { - assert!(features::transaction_context_extension_enabled(), error::invalid_state(ETRANSACTION_CONTEXT_EXTENSION_NOT_ENABLED)); - payload.ty_args_names - } - - /// Returns the arguments of the entry function payload. - public fun args(payload: &EntryFunctionPayload): vector> { - assert!(features::transaction_context_extension_enabled(), error::invalid_state(ETRANSACTION_CONTEXT_EXTENSION_NOT_ENABLED)); - payload.args - } - - /// Returns the multisig payload if the current transaction has such a payload. Otherwise, return `None`. - /// This function aborts if called outside of the transaction prologue, execution, or epilogue phases. - public fun multisig_payload(): Option { - assert!(features::transaction_context_extension_enabled(), error::invalid_state(ETRANSACTION_CONTEXT_EXTENSION_NOT_ENABLED)); - multisig_payload_internal() - } - native fun multisig_payload_internal(): Option; - - /// Returns the multisig account address of the multisig payload. - public fun multisig_address(payload: &MultisigPayload): address { - assert!(features::transaction_context_extension_enabled(), error::invalid_state(ETRANSACTION_CONTEXT_EXTENSION_NOT_ENABLED)); - payload.multisig_address - } - - /// Returns the inner entry function payload of the multisig payload. - public fun inner_entry_function_payload(payload: &MultisigPayload): Option { - assert!(features::transaction_context_extension_enabled(), error::invalid_state(ETRANSACTION_CONTEXT_EXTENSION_NOT_ENABLED)); - payload.entry_function_payload - } - - #[test()] - fun test_auid_uniquess() { - use std::vector; - - let auids: vector
= vector
[]; - let i: u64 = 0; - let count: u64 = 50; - while (i < count) { - i = i + 1; - vector::push_back(&mut auids, generate_auid_address()); - }; - i = 0; - while (i < count - 1) { - let j: u64 = i + 1; - while (j < count) { - assert!(*vector::borrow(&auids, i) != *vector::borrow(&auids, j), 0); - j = j + 1; - }; - i = i + 1; - }; - } - - #[test] - #[expected_failure(abort_code=196609, location = Self)] - fun test_call_sender() { - // expected to fail with the error code of `invalid_state(E_TRANSACTION_CONTEXT_NOT_AVAILABLE)` - let _sender = sender(); - } - - #[test] - #[expected_failure(abort_code=196609, location = Self)] - fun test_call_secondary_signers() { - // expected to fail with the error code of `invalid_state(E_TRANSACTION_CONTEXT_NOT_AVAILABLE)` - let _secondary_signers = secondary_signers(); - } - - #[test] - #[expected_failure(abort_code=196609, location = Self)] - fun test_call_gas_payer() { - // expected to fail with the error code of `invalid_state(E_TRANSACTION_CONTEXT_NOT_AVAILABLE)` - let _gas_payer = gas_payer(); - } - - #[test] - #[expected_failure(abort_code=196609, location = Self)] - fun test_call_max_gas_amount() { - // expected to fail with the error code of `invalid_state(E_TRANSACTION_CONTEXT_NOT_AVAILABLE)` - let _max_gas_amount = max_gas_amount(); - } - - #[test] - #[expected_failure(abort_code=196609, location = Self)] - fun test_call_gas_unit_price() { - // expected to fail with the error code of `invalid_state(E_TRANSACTION_CONTEXT_NOT_AVAILABLE)` - let _gas_unit_price = gas_unit_price(); - } - - #[test] - #[expected_failure(abort_code=196609, location = Self)] - fun test_call_chain_id() { - // expected to fail with the error code of `invalid_state(E_TRANSACTION_CONTEXT_NOT_AVAILABLE)` - let _chain_id = chain_id(); - } - - #[test] - #[expected_failure(abort_code=196609, location = Self)] - fun test_call_entry_function_payload() { - // expected to fail with the error code of `invalid_state(E_TRANSACTION_CONTEXT_NOT_AVAILABLE)` - let _entry_fun = entry_function_payload(); - } - - #[test] - #[expected_failure(abort_code=196609, location = Self)] - fun test_call_multisig_payload() { - // expected to fail with the error code of `invalid_state(E_TRANSACTION_CONTEXT_NOT_AVAILABLE)` - let _multisig = multisig_payload(); - } -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/transaction_fee.move b/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/transaction_fee.move deleted file mode 100644 index 48b1ed99d..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/transaction_fee.move +++ /dev/null @@ -1,170 +0,0 @@ -/// This module provides an interface to burn or collect and redistribute transaction fees. -module aptos_framework::transaction_fee { - use aptos_framework::coin::{Self, AggregatableCoin, BurnCapability, MintCapability}; - use aptos_framework::aptos_account; - use aptos_framework::aptos_coin::AptosCoin; - use aptos_framework::fungible_asset::BurnRef; - use aptos_framework::system_addresses; - use std::error; - use std::features; - use std::option::{Self, Option}; - use std::signer; - use aptos_framework::event; - - friend aptos_framework::block; - friend aptos_framework::genesis; - friend aptos_framework::reconfiguration; - friend aptos_framework::transaction_validation; - - /// Gas fees are already being collected and the struct holding - /// information about collected amounts is already published. - const EALREADY_COLLECTING_FEES: u64 = 1; - - /// The burn percentage is out of range [0, 100]. - const EINVALID_BURN_PERCENTAGE: u64 = 3; - - /// No longer supported. - const ENO_LONGER_SUPPORTED: u64 = 4; - - const EFA_GAS_CHARGING_NOT_ENABLED: u64 = 5; - - /// Stores burn capability to burn the gas fees. - struct AptosCoinCapabilities has key { - burn_cap: BurnCapability, - } - - /// Stores burn capability to burn the gas fees. - struct AptosFABurnCapabilities has key { - burn_ref: BurnRef, - } - - /// Stores mint capability to mint the refunds. - struct AptosCoinMintCapability has key { - mint_cap: MintCapability, - } - - #[event] - /// Breakdown of fee charge and refund for a transaction. - /// The structure is: - /// - /// - Net charge or refund (not in the statement) - /// - total charge: total_charge_gas_units, matches `gas_used` in the on-chain `TransactionInfo`. - /// This is the sum of the sub-items below. Notice that there's potential precision loss when - /// the conversion between internal and external gas units and between native token and gas - /// units, so it's possible that the numbers don't add up exactly. -- This number is the final - /// charge, while the break down is merely informational. - /// - gas charge for execution (CPU time): `execution_gas_units` - /// - gas charge for IO (storage random access): `io_gas_units` - /// - storage fee charge (storage space): `storage_fee_octas`, to be included in - /// `total_charge_gas_unit`, this number is converted to gas units according to the user - /// specified `gas_unit_price` on the transaction. - /// - storage deletion refund: `storage_fee_refund_octas`, this is not included in `gas_used` or - /// `total_charge_gas_units`, the net charge / refund is calculated by - /// `total_charge_gas_units` * `gas_unit_price` - `storage_fee_refund_octas`. - /// - /// This is meant to emitted as a module event. - struct FeeStatement has drop, store { - /// Total gas charge. - total_charge_gas_units: u64, - /// Execution gas charge. - execution_gas_units: u64, - /// IO gas charge. - io_gas_units: u64, - /// Storage fee charge. - storage_fee_octas: u64, - /// Storage fee refund. - storage_fee_refund_octas: u64, - } - - /// Burn transaction fees in epilogue. - public(friend) fun burn_fee(account: address, fee: u64) acquires AptosFABurnCapabilities, AptosCoinCapabilities { - if (exists(@aptos_framework)) { - let burn_ref = &borrow_global(@aptos_framework).burn_ref; - aptos_account::burn_from_fungible_store(burn_ref, account, fee); - } else { - let burn_cap = &borrow_global(@aptos_framework).burn_cap; - if (features::operations_default_to_fa_apt_store_enabled()) { - let (burn_ref, burn_receipt) = coin::get_paired_burn_ref(burn_cap); - aptos_account::burn_from_fungible_store(&burn_ref, account, fee); - coin::return_paired_burn_ref(burn_ref, burn_receipt); - } else { - coin::burn_from( - account, - fee, - burn_cap, - ); - }; - }; - } - - /// Mint refund in epilogue. - public(friend) fun mint_and_refund(account: address, refund: u64) acquires AptosCoinMintCapability { - let mint_cap = &borrow_global(@aptos_framework).mint_cap; - let refund_coin = coin::mint(refund, mint_cap); - coin::force_deposit(account, refund_coin); - } - - /// Only called during genesis. - public(friend) fun store_aptos_coin_burn_cap(aptos_framework: &signer, burn_cap: BurnCapability) { - system_addresses::assert_aptos_framework(aptos_framework); - - if (features::operations_default_to_fa_apt_store_enabled()) { - let burn_ref = coin::convert_and_take_paired_burn_ref(burn_cap); - move_to(aptos_framework, AptosFABurnCapabilities { burn_ref }); - } else { - move_to(aptos_framework, AptosCoinCapabilities { burn_cap }) - } - } - - public entry fun convert_to_aptos_fa_burn_ref(aptos_framework: &signer) acquires AptosCoinCapabilities { - assert!(features::operations_default_to_fa_apt_store_enabled(), EFA_GAS_CHARGING_NOT_ENABLED); - system_addresses::assert_aptos_framework(aptos_framework); - let AptosCoinCapabilities { - burn_cap, - } = move_from(signer::address_of(aptos_framework)); - let burn_ref = coin::convert_and_take_paired_burn_ref(burn_cap); - move_to(aptos_framework, AptosFABurnCapabilities { burn_ref }); - } - - /// Only called during genesis. - public(friend) fun store_aptos_coin_mint_cap(aptos_framework: &signer, mint_cap: MintCapability) { - system_addresses::assert_aptos_framework(aptos_framework); - move_to(aptos_framework, AptosCoinMintCapability { mint_cap }) - } - - // Called by the VM after epilogue. - fun emit_fee_statement(fee_statement: FeeStatement) { - event::emit(fee_statement) - } - - // DEPRECATED section: - - #[deprecated] - /// DEPRECATED: Stores information about the block proposer and the amount of fees - /// collected when executing the block. - struct CollectedFeesPerBlock has key { - amount: AggregatableCoin, - proposer: Option
, - burn_percentage: u8, - } - - #[deprecated] - /// DEPRECATED - public fun initialize_fee_collection_and_distribution(_aptos_framework: &signer, _burn_percentage: u8) { - abort error::not_implemented(ENO_LONGER_SUPPORTED) - } - - #[deprecated] - /// DEPRECATED - public fun upgrade_burn_percentage( - _aptos_framework: &signer, - _new_burn_percentage: u8 - ) { - abort error::not_implemented(ENO_LONGER_SUPPORTED) - } - - #[deprecated] - public fun initialize_storage_refund(_: &signer) { - abort error::not_implemented(ENO_LONGER_SUPPORTED) - } -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/transaction_validation.move b/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/transaction_validation.move deleted file mode 100644 index f9821da0b..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/transaction_validation.move +++ /dev/null @@ -1,486 +0,0 @@ -module aptos_framework::transaction_validation { - use std::bcs; - use std::error; - use std::features; - use std::signer; - use std::vector; - - use aptos_framework::account; - use aptos_framework::aptos_account; - use aptos_framework::aptos_coin::AptosCoin; - use aptos_framework::chain_id; - use aptos_framework::coin; - use aptos_framework::system_addresses; - use aptos_framework::timestamp; - use aptos_framework::transaction_fee; - - friend aptos_framework::genesis; - - /// This holds information that will be picked up by the VM to call the - /// correct chain-specific prologue and epilogue functions - struct TransactionValidation has key { - module_addr: address, - module_name: vector, - script_prologue_name: vector, - // module_prologue_name is deprecated and not used. - module_prologue_name: vector, - multi_agent_prologue_name: vector, - user_epilogue_name: vector, - } - - /// MSB is used to indicate a gas payer tx - const MAX_U64: u128 = 18446744073709551615; - - /// Transaction exceeded its allocated max gas - const EOUT_OF_GAS: u64 = 6; - - /// Prologue errors. These are separated out from the other errors in this - /// module since they are mapped separately to major VM statuses, and are - /// important to the semantics of the system. - const PROLOGUE_EINVALID_ACCOUNT_AUTH_KEY: u64 = 1001; - const PROLOGUE_ESEQUENCE_NUMBER_TOO_OLD: u64 = 1002; - const PROLOGUE_ESEQUENCE_NUMBER_TOO_NEW: u64 = 1003; - const PROLOGUE_EACCOUNT_DOES_NOT_EXIST: u64 = 1004; - const PROLOGUE_ECANT_PAY_GAS_DEPOSIT: u64 = 1005; - const PROLOGUE_ETRANSACTION_EXPIRED: u64 = 1006; - const PROLOGUE_EBAD_CHAIN_ID: u64 = 1007; - const PROLOGUE_ESEQUENCE_NUMBER_TOO_BIG: u64 = 1008; - const PROLOGUE_ESECONDARY_KEYS_ADDRESSES_COUNT_MISMATCH: u64 = 1009; - const PROLOGUE_EFEE_PAYER_NOT_ENABLED: u64 = 1010; - - /// Only called during genesis to initialize system resources for this module. - public(friend) fun initialize( - aptos_framework: &signer, - script_prologue_name: vector, - // module_prologue_name is deprecated and not used. - module_prologue_name: vector, - multi_agent_prologue_name: vector, - user_epilogue_name: vector, - ) { - system_addresses::assert_aptos_framework(aptos_framework); - - move_to(aptos_framework, TransactionValidation { - module_addr: @aptos_framework, - module_name: b"transaction_validation", - script_prologue_name, - // module_prologue_name is deprecated and not used. - module_prologue_name, - multi_agent_prologue_name, - user_epilogue_name, - }); - } - - fun prologue_common( - sender: signer, - gas_payer: address, - txn_sequence_number: u64, - txn_authentication_key: vector, - txn_gas_price: u64, - txn_max_gas_units: u64, - txn_expiration_time: u64, - chain_id: u8, - is_simulation: bool, - ) { - assert!( - timestamp::now_seconds() < txn_expiration_time, - error::invalid_argument(PROLOGUE_ETRANSACTION_EXPIRED), - ); - assert!(chain_id::get() == chain_id, error::invalid_argument(PROLOGUE_EBAD_CHAIN_ID)); - - let transaction_sender = signer::address_of(&sender); - - if ( - transaction_sender == gas_payer - || account::exists_at(transaction_sender) - || !features::sponsored_automatic_account_creation_enabled() - || txn_sequence_number > 0 - ) { - assert!(account::exists_at(transaction_sender), error::invalid_argument(PROLOGUE_EACCOUNT_DOES_NOT_EXIST)); - if (!features::transaction_simulation_enhancement_enabled() || - !skip_auth_key_check(is_simulation, &txn_authentication_key)) { - assert!( - txn_authentication_key == account::get_authentication_key(transaction_sender), - error::invalid_argument(PROLOGUE_EINVALID_ACCOUNT_AUTH_KEY), - ) - }; - - let account_sequence_number = account::get_sequence_number(transaction_sender); - assert!( - txn_sequence_number < (1u64 << 63), - error::out_of_range(PROLOGUE_ESEQUENCE_NUMBER_TOO_BIG) - ); - - assert!( - txn_sequence_number >= account_sequence_number, - error::invalid_argument(PROLOGUE_ESEQUENCE_NUMBER_TOO_OLD) - ); - - assert!( - txn_sequence_number == account_sequence_number, - error::invalid_argument(PROLOGUE_ESEQUENCE_NUMBER_TOO_NEW) - ); - } else { - // In this case, the transaction is sponsored and the account does not exist, so ensure - // the default values match. - assert!( - txn_sequence_number == 0, - error::invalid_argument(PROLOGUE_ESEQUENCE_NUMBER_TOO_NEW) - ); - - if (!features::transaction_simulation_enhancement_enabled() || - !skip_auth_key_check(is_simulation, &txn_authentication_key)) { - assert!( - txn_authentication_key == bcs::to_bytes(&transaction_sender), - error::invalid_argument(PROLOGUE_EINVALID_ACCOUNT_AUTH_KEY), - ); - } - }; - - let max_transaction_fee = txn_gas_price * txn_max_gas_units; - - if (!features::transaction_simulation_enhancement_enabled() || !skip_gas_payment(is_simulation, gas_payer)) { - if (features::operations_default_to_fa_apt_store_enabled()) { - assert!( - aptos_account::is_fungible_balance_at_least(gas_payer, max_transaction_fee), - error::invalid_argument(PROLOGUE_ECANT_PAY_GAS_DEPOSIT) - ); - } else { - assert!( - coin::is_balance_at_least(gas_payer, max_transaction_fee), - error::invalid_argument(PROLOGUE_ECANT_PAY_GAS_DEPOSIT) - ); - } - } - } - - fun script_prologue( - sender: signer, - txn_sequence_number: u64, - txn_public_key: vector, - txn_gas_price: u64, - txn_max_gas_units: u64, - txn_expiration_time: u64, - chain_id: u8, - _script_hash: vector, - ) { - let gas_payer = signer::address_of(&sender); - // prologue_common with is_simulation set to false behaves identically to the original script_prologue function. - prologue_common( - sender, - gas_payer, - txn_sequence_number, - txn_public_key, - txn_gas_price, - txn_max_gas_units, - txn_expiration_time, - chain_id, - false, - ) - } - - // This function extends the script_prologue by adding a parameter to indicate simulation mode. - // Once the transaction_simulation_enhancement feature is enabled, the Aptos VM will invoke this function instead. - // Eventually, this function will be consolidated with the original function once the feature is fully enabled. - fun script_prologue_extended( - sender: signer, - txn_sequence_number: u64, - txn_public_key: vector, - txn_gas_price: u64, - txn_max_gas_units: u64, - txn_expiration_time: u64, - chain_id: u8, - _script_hash: vector, - is_simulation: bool, - ) { - let gas_payer = signer::address_of(&sender); - prologue_common( - sender, - gas_payer, - txn_sequence_number, - txn_public_key, - txn_gas_price, - txn_max_gas_units, - txn_expiration_time, - chain_id, - is_simulation, - ) - } - - fun multi_agent_script_prologue( - sender: signer, - txn_sequence_number: u64, - txn_sender_public_key: vector, - secondary_signer_addresses: vector
, - secondary_signer_public_key_hashes: vector>, - txn_gas_price: u64, - txn_max_gas_units: u64, - txn_expiration_time: u64, - chain_id: u8, - ) { - let sender_addr = signer::address_of(&sender); - // prologue_common and multi_agent_common_prologue with is_simulation set to false behaves identically to the - // original multi_agent_script_prologue function. - prologue_common( - sender, - sender_addr, - txn_sequence_number, - txn_sender_public_key, - txn_gas_price, - txn_max_gas_units, - txn_expiration_time, - chain_id, - false, - ); - multi_agent_common_prologue(secondary_signer_addresses, secondary_signer_public_key_hashes, false); - } - - // This function extends the multi_agent_script_prologue by adding a parameter to indicate simulation mode. - // Once the transaction_simulation_enhancement feature is enabled, the Aptos VM will invoke this function instead. - // Eventually, this function will be consolidated with the original function once the feature is fully enabled. - fun multi_agent_script_prologue_extended( - sender: signer, - txn_sequence_number: u64, - txn_sender_public_key: vector, - secondary_signer_addresses: vector
, - secondary_signer_public_key_hashes: vector>, - txn_gas_price: u64, - txn_max_gas_units: u64, - txn_expiration_time: u64, - chain_id: u8, - is_simulation: bool, - ) { - let sender_addr = signer::address_of(&sender); - prologue_common( - sender, - sender_addr, - txn_sequence_number, - txn_sender_public_key, - txn_gas_price, - txn_max_gas_units, - txn_expiration_time, - chain_id, - is_simulation, - ); - multi_agent_common_prologue(secondary_signer_addresses, secondary_signer_public_key_hashes, is_simulation); - } - - fun multi_agent_common_prologue( - secondary_signer_addresses: vector
, - secondary_signer_public_key_hashes: vector>, - is_simulation: bool, - ) { - let num_secondary_signers = vector::length(&secondary_signer_addresses); - assert!( - vector::length(&secondary_signer_public_key_hashes) == num_secondary_signers, - error::invalid_argument(PROLOGUE_ESECONDARY_KEYS_ADDRESSES_COUNT_MISMATCH), - ); - - let i = 0; - while ({ - spec { - invariant i <= num_secondary_signers; - invariant forall j in 0..i: - account::exists_at(secondary_signer_addresses[j]); - invariant forall j in 0..i: - secondary_signer_public_key_hashes[j] == account::get_authentication_key(secondary_signer_addresses[j]) || - (features::spec_simulation_enhancement_enabled() && is_simulation && vector::is_empty(secondary_signer_public_key_hashes[j])); - }; - (i < num_secondary_signers) - }) { - let secondary_address = *vector::borrow(&secondary_signer_addresses, i); - assert!(account::exists_at(secondary_address), error::invalid_argument(PROLOGUE_EACCOUNT_DOES_NOT_EXIST)); - - let signer_public_key_hash = *vector::borrow(&secondary_signer_public_key_hashes, i); - if (!features::transaction_simulation_enhancement_enabled() || - !skip_auth_key_check(is_simulation, &signer_public_key_hash)) { - assert!( - signer_public_key_hash == account::get_authentication_key(secondary_address), - error::invalid_argument(PROLOGUE_EINVALID_ACCOUNT_AUTH_KEY), - ) - }; - i = i + 1; - } - } - - fun fee_payer_script_prologue( - sender: signer, - txn_sequence_number: u64, - txn_sender_public_key: vector, - secondary_signer_addresses: vector
, - secondary_signer_public_key_hashes: vector>, - fee_payer_address: address, - fee_payer_public_key_hash: vector, - txn_gas_price: u64, - txn_max_gas_units: u64, - txn_expiration_time: u64, - chain_id: u8, - ) { - assert!(features::fee_payer_enabled(), error::invalid_state(PROLOGUE_EFEE_PAYER_NOT_ENABLED)); - // prologue_common and multi_agent_common_prologue with is_simulation set to false behaves identically to the - // original fee_payer_script_prologue function. - prologue_common( - sender, - fee_payer_address, - txn_sequence_number, - txn_sender_public_key, - txn_gas_price, - txn_max_gas_units, - txn_expiration_time, - chain_id, - false, - ); - multi_agent_common_prologue(secondary_signer_addresses, secondary_signer_public_key_hashes, false); - assert!( - fee_payer_public_key_hash == account::get_authentication_key(fee_payer_address), - error::invalid_argument(PROLOGUE_EINVALID_ACCOUNT_AUTH_KEY), - ); - } - - // This function extends the fee_payer_script_prologue by adding a parameter to indicate simulation mode. - // Once the transaction_simulation_enhancement feature is enabled, the Aptos VM will invoke this function instead. - // Eventually, this function will be consolidated with the original function once the feature is fully enabled. - fun fee_payer_script_prologue_extended( - sender: signer, - txn_sequence_number: u64, - txn_sender_public_key: vector, - secondary_signer_addresses: vector
, - secondary_signer_public_key_hashes: vector>, - fee_payer_address: address, - fee_payer_public_key_hash: vector, - txn_gas_price: u64, - txn_max_gas_units: u64, - txn_expiration_time: u64, - chain_id: u8, - is_simulation: bool, - ) { - assert!(features::fee_payer_enabled(), error::invalid_state(PROLOGUE_EFEE_PAYER_NOT_ENABLED)); - prologue_common( - sender, - fee_payer_address, - txn_sequence_number, - txn_sender_public_key, - txn_gas_price, - txn_max_gas_units, - txn_expiration_time, - chain_id, - is_simulation, - ); - multi_agent_common_prologue(secondary_signer_addresses, secondary_signer_public_key_hashes, is_simulation); - if (!features::transaction_simulation_enhancement_enabled() || - !skip_auth_key_check(is_simulation, &fee_payer_public_key_hash)) { - assert!( - fee_payer_public_key_hash == account::get_authentication_key(fee_payer_address), - error::invalid_argument(PROLOGUE_EINVALID_ACCOUNT_AUTH_KEY), - ) - } - } - - /// Epilogue function is run after a transaction is successfully executed. - /// Called by the Adapter - fun epilogue( - account: signer, - storage_fee_refunded: u64, - txn_gas_price: u64, - txn_max_gas_units: u64, - gas_units_remaining: u64, - ) { - let addr = signer::address_of(&account); - epilogue_gas_payer(account, addr, storage_fee_refunded, txn_gas_price, txn_max_gas_units, gas_units_remaining); - } - - // This function extends the epilogue by adding a parameter to indicate simulation mode. - // Once the transaction_simulation_enhancement feature is enabled, the Aptos VM will invoke this function instead. - // Eventually, this function will be consolidated with the original function once the feature is fully enabled. - fun epilogue_extended( - account: signer, - storage_fee_refunded: u64, - txn_gas_price: u64, - txn_max_gas_units: u64, - gas_units_remaining: u64, - is_simulation: bool, - ) { - let addr = signer::address_of(&account); - epilogue_gas_payer_extended(account, addr, storage_fee_refunded, txn_gas_price, txn_max_gas_units, gas_units_remaining, is_simulation); - } - - /// Epilogue function with explicit gas payer specified, is run after a transaction is successfully executed. - /// Called by the Adapter - fun epilogue_gas_payer( - account: signer, - gas_payer: address, - storage_fee_refunded: u64, - txn_gas_price: u64, - txn_max_gas_units: u64, - gas_units_remaining: u64, - ) { - // epilogue_gas_payer_extended with is_simulation set to false behaves identically to the original - // epilogue_gas_payer function. - epilogue_gas_payer_extended( - account, - gas_payer, - storage_fee_refunded, - txn_gas_price, - txn_max_gas_units, - gas_units_remaining, - false, - ); - } - - // This function extends the epilogue_gas_payer by adding a parameter to indicate simulation mode. - // Once the transaction_simulation_enhancement feature is enabled, the Aptos VM will invoke this function instead. - // Eventually, this function will be consolidated with the original function once the feature is fully enabled. - fun epilogue_gas_payer_extended( - account: signer, - gas_payer: address, - storage_fee_refunded: u64, - txn_gas_price: u64, - txn_max_gas_units: u64, - gas_units_remaining: u64, - is_simulation: bool, - ) { - assert!(txn_max_gas_units >= gas_units_remaining, error::invalid_argument(EOUT_OF_GAS)); - let gas_used = txn_max_gas_units - gas_units_remaining; - - assert!( - (txn_gas_price as u128) * (gas_used as u128) <= MAX_U64, - error::out_of_range(EOUT_OF_GAS) - ); - let transaction_fee_amount = txn_gas_price * gas_used; - - // it's important to maintain the error code consistent with vm - // to do failed transaction cleanup. - if (!features::transaction_simulation_enhancement_enabled() || !skip_gas_payment(is_simulation, gas_payer)) { - if (features::operations_default_to_fa_apt_store_enabled()) { - assert!( - aptos_account::is_fungible_balance_at_least(gas_payer, transaction_fee_amount), - error::out_of_range(PROLOGUE_ECANT_PAY_GAS_DEPOSIT), - ); - } else { - assert!( - coin::is_balance_at_least(gas_payer, transaction_fee_amount), - error::out_of_range(PROLOGUE_ECANT_PAY_GAS_DEPOSIT), - ); - }; - - if (transaction_fee_amount > storage_fee_refunded) { - let burn_amount = transaction_fee_amount - storage_fee_refunded; - transaction_fee::burn_fee(gas_payer, burn_amount); - } else if (transaction_fee_amount < storage_fee_refunded) { - let mint_amount = storage_fee_refunded - transaction_fee_amount; - transaction_fee::mint_and_refund(gas_payer, mint_amount) - }; - }; - - // Increment sequence number - let addr = signer::address_of(&account); - account::increment_sequence_number(addr); - } - - inline fun skip_auth_key_check(is_simulation: bool, auth_key: &vector): bool { - is_simulation && vector::is_empty(auth_key) - } - - inline fun skip_gas_payment(is_simulation: bool, gas_payer: address): bool { - is_simulation && gas_payer == @0x0 - } -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/util.move b/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/util.move deleted file mode 100644 index 332afa299..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/util.move +++ /dev/null @@ -1,16 +0,0 @@ -/// Utility functions used by the framework modules. -module aptos_framework::util { - friend aptos_framework::code; - friend aptos_framework::gas_schedule; - - /// Native function to deserialize a type T. - /// - /// Note that this function does not put any constraint on `T`. If code uses this function to - /// deserialized a linear value, its their responsibility that the data they deserialize is - /// owned. - public(friend) native fun from_bytes(bytes: vector): T; - - public fun address_from_bytes(bytes: vector): address { - from_bytes(bytes) - } -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/validator_consensus_info.move b/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/validator_consensus_info.move deleted file mode 100644 index 3a2abdd0b..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/validator_consensus_info.move +++ /dev/null @@ -1,42 +0,0 @@ -/// Common type: `ValidatorConsensusInfo`. -module aptos_framework::validator_consensus_info { - /// Information about a validator that participates consensus. - struct ValidatorConsensusInfo has copy, drop, store { - addr: address, - pk_bytes: vector, - voting_power: u64, - } - - /// Create a default `ValidatorConsensusInfo` object. Value may be invalid. Only for place holding prupose. - public fun default(): ValidatorConsensusInfo { - ValidatorConsensusInfo { - addr: @vm, - pk_bytes: vector[], - voting_power: 0, - } - } - - /// Create a `ValidatorConsensusInfo` object. - public fun new(addr: address, pk_bytes: vector, voting_power: u64): ValidatorConsensusInfo { - ValidatorConsensusInfo { - addr, - pk_bytes, - voting_power, - } - } - - /// Get `ValidatorConsensusInfo.addr`. - public fun get_addr(vci: &ValidatorConsensusInfo): address { - vci.addr - } - - /// Get `ValidatorConsensusInfo.pk_bytes`. - public fun get_pk_bytes(vci: &ValidatorConsensusInfo): vector { - vci.pk_bytes - } - - /// Get `ValidatorConsensusInfo.voting_power`. - public fun get_voting_power(vci: &ValidatorConsensusInfo): u64 { - vci.voting_power - } -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/version.move b/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/version.move deleted file mode 100644 index fa90eb44e..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/version.move +++ /dev/null @@ -1,115 +0,0 @@ -/// Maintains the version number for the blockchain. -module aptos_framework::version { - use std::error; - use std::signer; - use aptos_framework::chain_status; - use aptos_framework::config_buffer; - - use aptos_framework::reconfiguration; - use aptos_framework::system_addresses; - - friend aptos_framework::genesis; - friend aptos_framework::reconfiguration_with_dkg; - - struct Version has drop, key, store { - major: u64, - } - - struct SetVersionCapability has key {} - - /// Specified major version number must be greater than current version number. - const EINVALID_MAJOR_VERSION_NUMBER: u64 = 1; - /// Account is not authorized to make this change. - const ENOT_AUTHORIZED: u64 = 2; - - /// Only called during genesis. - /// Publishes the Version config. - public(friend) fun initialize(aptos_framework: &signer, initial_version: u64) { - system_addresses::assert_aptos_framework(aptos_framework); - - move_to(aptos_framework, Version { major: initial_version }); - // Give aptos framework account capability to call set version. This allows on chain governance to do it through - // control of the aptos framework account. - move_to(aptos_framework, SetVersionCapability {}); - } - - /// Deprecated by `set_for_next_epoch()`. - /// - /// WARNING: calling this while randomness is enabled will trigger a new epoch without randomness! - /// - /// TODO: update all the tests that reference this function, then disable this function. - public entry fun set_version(account: &signer, major: u64) acquires Version { - assert!(exists(signer::address_of(account)), error::permission_denied(ENOT_AUTHORIZED)); - chain_status::assert_genesis(); - - let old_major = borrow_global(@aptos_framework).major; - assert!(old_major < major, error::invalid_argument(EINVALID_MAJOR_VERSION_NUMBER)); - - let config = borrow_global_mut(@aptos_framework); - config.major = major; - - // Need to trigger reconfiguration so validator nodes can sync on the updated version. - reconfiguration::reconfigure(); - } - - /// Used in on-chain governances to update the major version for the next epoch. - /// Example usage: - /// - `aptos_framework::version::set_for_next_epoch(&framework_signer, new_version);` - /// - `aptos_framework::aptos_governance::reconfigure(&framework_signer);` - public entry fun set_for_next_epoch(account: &signer, major: u64) acquires Version { - assert!(exists(signer::address_of(account)), error::permission_denied(ENOT_AUTHORIZED)); - let old_major = borrow_global(@aptos_framework).major; - assert!(old_major < major, error::invalid_argument(EINVALID_MAJOR_VERSION_NUMBER)); - config_buffer::upsert(Version {major}); - } - - /// Only used in reconfigurations to apply the pending `Version`, if there is any. - public(friend) fun on_new_epoch(framework: &signer) acquires Version { - system_addresses::assert_aptos_framework(framework); - if (config_buffer::does_exist()) { - let new_value = config_buffer::extract(); - if (exists(@aptos_framework)) { - *borrow_global_mut(@aptos_framework) = new_value; - } else { - move_to(framework, new_value); - } - } - } - - /// Only called in tests and testnets. This allows the core resources account, which only exists in tests/testnets, - /// to update the version. - fun initialize_for_test(core_resources: &signer) { - system_addresses::assert_core_resource(core_resources); - move_to(core_resources, SetVersionCapability {}); - } - - #[test(aptos_framework = @aptos_framework)] - public entry fun test_set_version(aptos_framework: signer) acquires Version { - initialize(&aptos_framework, 1); - assert!(borrow_global(@aptos_framework).major == 1, 0); - set_version(&aptos_framework, 2); - assert!(borrow_global(@aptos_framework).major == 2, 1); - } - - #[test(aptos_framework = @aptos_framework, core_resources = @core_resources)] - public entry fun test_set_version_core_resources( - aptos_framework: signer, - core_resources: signer, - ) acquires Version { - initialize(&aptos_framework, 1); - assert!(borrow_global(@aptos_framework).major == 1, 0); - initialize_for_test(&core_resources); - set_version(&core_resources, 2); - assert!(borrow_global(@aptos_framework).major == 2, 1); - } - - #[test(aptos_framework = @aptos_framework, random_account = @0x123)] - #[expected_failure(abort_code = 327682, location = Self)] - public entry fun test_set_version_unauthorized_should_fail( - aptos_framework: signer, - random_account: signer, - ) acquires Version { - initialize(&aptos_framework, 1); - set_version(&random_account, 2); - } -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/vesting.move b/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/vesting.move deleted file mode 100644 index 8c3ac239a..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/vesting.move +++ /dev/null @@ -1,2192 +0,0 @@ -/// -/// Simple vesting contract that allows specifying how much APT coins should be vesting in each fixed-size period. The -/// vesting contract also comes with staking and allows shareholders to withdraw rewards anytime. -/// -/// Vesting schedule is represented as a vector of distributions. For example, a vesting schedule of -/// [3/48, 3/48, 1/48] means that after the vesting starts: -/// 1. The first and second periods will vest 3/48 of the total original grant. -/// 2. The third period will vest 1/48. -/// 3. All subsequent periods will also vest 1/48 (last distribution in the schedule) until the original grant runs out. -/// -/// Shareholder flow: -/// 1. Admin calls create_vesting_contract with a schedule of [3/48, 3/48, 1/48] with a vesting cliff of 1 year and -/// vesting period of 1 month. -/// 2. After a month, a shareholder calls unlock_rewards to request rewards. They can also call vest() which would also -/// unlocks rewards but since the 1 year cliff has not passed (vesting has not started), vest() would not release any of -/// the original grant. -/// 3. After the unlocked rewards become fully withdrawable (as it's subject to staking lockup), shareholders can call -/// distribute() to send all withdrawable funds to all shareholders based on the original grant's shares structure. -/// 4. After 1 year and 1 month, the vesting schedule now starts. Shareholders call vest() to unlock vested coins. vest() -/// checks the schedule and unlocks 3/48 of the original grant in addition to any accumulated rewards since last -/// unlock_rewards(). Once the unlocked coins become withdrawable, shareholders can call distribute(). -/// 5. Assuming the shareholders forgot to call vest() for 2 months, when they call vest() again, they will unlock vested -/// tokens for the next period since last vest. This would be for the first month they missed. They can call vest() a -/// second time to unlock for the second month they missed. -/// -/// Admin flow: -/// 1. After creating the vesting contract, admin cannot change the vesting schedule. -/// 2. Admin can call update_voter, update_operator, or reset_lockup at any time to update the underlying staking -/// contract. -/// 3. Admin can also call update_beneficiary for any shareholder. This would send all distributions (rewards, vested -/// coins) of that shareholder to the beneficiary account. By defalt, if a beneficiary is not set, the distributions are -/// send directly to the shareholder account. -/// 4. Admin can call terminate_vesting_contract to terminate the vesting. This would first finish any distribution but -/// will prevent any further rewards or vesting distributions from being created. Once the locked up stake becomes -/// withdrawable, admin can call admin_withdraw to withdraw all funds to the vesting contract's withdrawal address. -module aptos_framework::vesting { - use std::bcs; - use std::error; - use std::fixed_point32::{Self, FixedPoint32}; - use std::signer; - use std::string::{utf8, String}; - use std::vector; - - use aptos_std::pool_u64::{Self, Pool}; - use aptos_std::simple_map::{Self, SimpleMap}; - - use aptos_framework::account::{Self, SignerCapability, new_event_handle}; - use aptos_framework::aptos_account::{Self, assert_account_is_registered_for_apt}; - use aptos_framework::aptos_coin::AptosCoin; - use aptos_framework::coin::{Self, Coin}; - use aptos_framework::event::{EventHandle, emit, emit_event}; - use aptos_framework::stake; - use aptos_framework::staking_contract; - use aptos_framework::system_addresses; - use aptos_framework::timestamp; - - friend aptos_framework::genesis; - - const VESTING_POOL_SALT: vector = b"aptos_framework::vesting"; - - /// Withdrawal address is invalid. - const EINVALID_WITHDRAWAL_ADDRESS: u64 = 1; - /// Vesting schedule cannot be empty. - const EEMPTY_VESTING_SCHEDULE: u64 = 2; - /// Vesting period cannot be 0. - const EZERO_VESTING_SCHEDULE_PERIOD: u64 = 3; - /// Shareholders list cannot be empty. - const ENO_SHAREHOLDERS: u64 = 4; - /// The length of shareholders and shares lists don't match. - const ESHARES_LENGTH_MISMATCH: u64 = 5; - /// Vesting cannot start before or at the current block timestamp. Has to be in the future. - const EVESTING_START_TOO_SOON: u64 = 6; - /// The signer is not the admin of the vesting contract. - const ENOT_ADMIN: u64 = 7; - /// Vesting contract needs to be in active state. - const EVESTING_CONTRACT_NOT_ACTIVE: u64 = 8; - /// Admin can only withdraw from an inactive (paused or terminated) vesting contract. - const EVESTING_CONTRACT_STILL_ACTIVE: u64 = 9; - /// No vesting contract found at provided address. - const EVESTING_CONTRACT_NOT_FOUND: u64 = 10; - /// Cannot terminate the vesting contract with pending active stake. Need to wait until next epoch. - const EPENDING_STAKE_FOUND: u64 = 11; - /// Grant amount cannot be 0. - const EZERO_GRANT: u64 = 12; - /// Vesting account has no other management roles beside admin. - const EVESTING_ACCOUNT_HAS_NO_ROLES: u64 = 13; - /// The vesting account has no such management role. - const EROLE_NOT_FOUND: u64 = 14; - /// Account is not admin or does not have the required role to take this action. - const EPERMISSION_DENIED: u64 = 15; - /// Zero items were provided to a *_many function. - const EVEC_EMPTY_FOR_MANY_FUNCTION: u64 = 16; - - /// Maximum number of shareholders a vesting pool can support. - const MAXIMUM_SHAREHOLDERS: u64 = 30; - - /// Vesting contract states. - /// Vesting contract is active and distributions can be made. - const VESTING_POOL_ACTIVE: u64 = 1; - /// Vesting contract has been terminated and all funds have been released back to the withdrawal address. - const VESTING_POOL_TERMINATED: u64 = 2; - - /// Roles that can manage certain aspects of the vesting account beyond the main admin. - const ROLE_BENEFICIARY_RESETTER: vector = b"ROLE_BENEFICIARY_RESETTER"; - - struct VestingSchedule has copy, drop, store { - // The vesting schedule as a list of fractions that vest for each period. The last number is repeated until the - // vesting amount runs out. - // For example [1/24, 1/24, 1/48] with a period of 1 month means that after vesting starts, the first two months - // will vest 1/24 of the original total amount. From the third month only, 1/48 will vest until the vesting fund - // runs out. - // u32/u32 should be sufficient to support vesting schedule fractions. - schedule: vector, - // When the vesting should start. - start_timestamp_secs: u64, - // In seconds. How long each vesting period is. For example 1 month. - period_duration: u64, - // Last vesting period, 1-indexed. For example if 2 months have passed, the last vesting period, if distribution - // was requested, would be 2. Default value is 0 which means there have been no vesting periods yet. - last_vested_period: u64, - } - - struct StakingInfo has store { - // Where the vesting's stake pool is located at. Included for convenience. - pool_address: address, - // The currently assigned operator. - operator: address, - // The currently assigned voter. - voter: address, - // Commission paid to the operator of the stake pool. - commission_percentage: u64, - } - - struct VestingContract has key { - state: u64, - admin: address, - grant_pool: Pool, - beneficiaries: SimpleMap, - vesting_schedule: VestingSchedule, - // Withdrawal address where all funds would be released back to if the admin ends the vesting for a specific - // account or terminates the entire vesting contract. - withdrawal_address: address, - staking: StakingInfo, - // Remaining amount in the grant. For calculating accumulated rewards. - remaining_grant: u64, - // Used to control staking. - signer_cap: SignerCapability, - - // Events. - update_operator_events: EventHandle, - update_voter_events: EventHandle, - reset_lockup_events: EventHandle, - set_beneficiary_events: EventHandle, - unlock_rewards_events: EventHandle, - vest_events: EventHandle, - distribute_events: EventHandle, - terminate_events: EventHandle, - admin_withdraw_events: EventHandle, - } - - struct VestingAccountManagement has key { - roles: SimpleMap, - } - - struct AdminStore has key { - vesting_contracts: vector
, - // Used to create resource accounts for new vesting contracts so there's no address collision. - nonce: u64, - - create_events: EventHandle, - } - - #[event] - struct CreateVestingContract has drop, store { - operator: address, - voter: address, - grant_amount: u64, - withdrawal_address: address, - vesting_contract_address: address, - staking_pool_address: address, - commission_percentage: u64, - } - - #[event] - struct UpdateOperator has drop, store { - admin: address, - vesting_contract_address: address, - staking_pool_address: address, - old_operator: address, - new_operator: address, - commission_percentage: u64, - } - - #[event] - struct UpdateVoter has drop, store { - admin: address, - vesting_contract_address: address, - staking_pool_address: address, - old_voter: address, - new_voter: address, - } - - #[event] - struct ResetLockup has drop, store { - admin: address, - vesting_contract_address: address, - staking_pool_address: address, - new_lockup_expiration_secs: u64, - } - - #[event] - struct SetBeneficiary has drop, store { - admin: address, - vesting_contract_address: address, - shareholder: address, - old_beneficiary: address, - new_beneficiary: address, - } - - #[event] - struct UnlockRewards has drop, store { - admin: address, - vesting_contract_address: address, - staking_pool_address: address, - amount: u64, - } - - #[event] - struct Vest has drop, store { - admin: address, - vesting_contract_address: address, - staking_pool_address: address, - period_vested: u64, - amount: u64, - } - - #[event] - struct Distribute has drop, store { - admin: address, - vesting_contract_address: address, - amount: u64, - } - - #[event] - struct Terminate has drop, store { - admin: address, - vesting_contract_address: address, - } - - #[event] - struct AdminWithdraw has drop, store { - admin: address, - vesting_contract_address: address, - amount: u64, - } - - struct CreateVestingContractEvent has drop, store { - operator: address, - voter: address, - grant_amount: u64, - withdrawal_address: address, - vesting_contract_address: address, - staking_pool_address: address, - commission_percentage: u64, - } - - struct UpdateOperatorEvent has drop, store { - admin: address, - vesting_contract_address: address, - staking_pool_address: address, - old_operator: address, - new_operator: address, - commission_percentage: u64, - } - - struct UpdateVoterEvent has drop, store { - admin: address, - vesting_contract_address: address, - staking_pool_address: address, - old_voter: address, - new_voter: address, - } - - struct ResetLockupEvent has drop, store { - admin: address, - vesting_contract_address: address, - staking_pool_address: address, - new_lockup_expiration_secs: u64, - } - - struct SetBeneficiaryEvent has drop, store { - admin: address, - vesting_contract_address: address, - shareholder: address, - old_beneficiary: address, - new_beneficiary: address, - } - - struct UnlockRewardsEvent has drop, store { - admin: address, - vesting_contract_address: address, - staking_pool_address: address, - amount: u64, - } - - struct VestEvent has drop, store { - admin: address, - vesting_contract_address: address, - staking_pool_address: address, - period_vested: u64, - amount: u64, - } - - struct DistributeEvent has drop, store { - admin: address, - vesting_contract_address: address, - amount: u64, - } - - struct TerminateEvent has drop, store { - admin: address, - vesting_contract_address: address, - } - - struct AdminWithdrawEvent has drop, store { - admin: address, - vesting_contract_address: address, - amount: u64, - } - - #[view] - /// Return the address of the underlying stake pool (separate resource account) of the vesting contract. - /// - /// This errors out if the vesting contract with the provided address doesn't exist. - public fun stake_pool_address(vesting_contract_address: address): address acquires VestingContract { - assert_vesting_contract_exists(vesting_contract_address); - borrow_global(vesting_contract_address).staking.pool_address - } - - #[view] - /// Return the vesting start timestamp (in seconds) of the vesting contract. - /// Vesting will start at this time, and once a full period has passed, the first vest will become unlocked. - /// - /// This errors out if the vesting contract with the provided address doesn't exist. - public fun vesting_start_secs(vesting_contract_address: address): u64 acquires VestingContract { - assert_vesting_contract_exists(vesting_contract_address); - borrow_global(vesting_contract_address).vesting_schedule.start_timestamp_secs - } - - #[view] - /// Return the duration of one vesting period (in seconds). - /// Each vest is released after one full period has started, starting from the specified start_timestamp_secs. - /// - /// This errors out if the vesting contract with the provided address doesn't exist. - public fun period_duration_secs(vesting_contract_address: address): u64 acquires VestingContract { - assert_vesting_contract_exists(vesting_contract_address); - borrow_global(vesting_contract_address).vesting_schedule.period_duration - } - - #[view] - /// Return the remaining grant, consisting of unvested coins that have not been distributed to shareholders. - /// Prior to start_timestamp_secs, the remaining grant will always be equal to the original grant. - /// Once vesting has started, and vested tokens are distributed, the remaining grant will decrease over time, - /// according to the vesting schedule. - /// - /// This errors out if the vesting contract with the provided address doesn't exist. - public fun remaining_grant(vesting_contract_address: address): u64 acquires VestingContract { - assert_vesting_contract_exists(vesting_contract_address); - borrow_global(vesting_contract_address).remaining_grant - } - - #[view] - /// Return the beneficiary account of the specified shareholder in a vesting contract. - /// This is the same as the shareholder address by default and only different if it's been explicitly set. - /// - /// This errors out if the vesting contract with the provided address doesn't exist. - public fun beneficiary(vesting_contract_address: address, shareholder: address): address acquires VestingContract { - assert_vesting_contract_exists(vesting_contract_address); - get_beneficiary(borrow_global(vesting_contract_address), shareholder) - } - - #[view] - /// Return the percentage of accumulated rewards that is paid to the operator as commission. - /// - /// This errors out if the vesting contract with the provided address doesn't exist. - public fun operator_commission_percentage(vesting_contract_address: address): u64 acquires VestingContract { - assert_vesting_contract_exists(vesting_contract_address); - borrow_global(vesting_contract_address).staking.commission_percentage - } - - #[view] - /// Return all the vesting contracts a given address is an admin of. - public fun vesting_contracts(admin: address): vector
acquires AdminStore { - if (!exists(admin)) { - vector::empty
() - } else { - borrow_global(admin).vesting_contracts - } - } - - #[view] - /// Return the operator who runs the validator for the vesting contract. - /// - /// This errors out if the vesting contract with the provided address doesn't exist. - public fun operator(vesting_contract_address: address): address acquires VestingContract { - assert_vesting_contract_exists(vesting_contract_address); - borrow_global(vesting_contract_address).staking.operator - } - - #[view] - /// Return the voter who will be voting on on-chain governance proposals on behalf of the vesting contract's stake - /// pool. - /// - /// This errors out if the vesting contract with the provided address doesn't exist. - public fun voter(vesting_contract_address: address): address acquires VestingContract { - assert_vesting_contract_exists(vesting_contract_address); - borrow_global(vesting_contract_address).staking.voter - } - - #[view] - /// Return the vesting contract's vesting schedule. The core schedule is represented as a list of u64-based - /// fractions, where the rightmmost 32 bits can be divided by 2^32 to get the fraction, and anything else is the - /// whole number. - /// - /// For example 3/48, or 0.0625, will be represented as 268435456. The fractional portion would be - /// 268435456 / 2^32 = 0.0625. Since there are fewer than 32 bits, the whole number portion is effectively 0. - /// So 268435456 = 0.0625. - /// - /// This errors out if the vesting contract with the provided address doesn't exist. - public fun vesting_schedule(vesting_contract_address: address): VestingSchedule acquires VestingContract { - assert_vesting_contract_exists(vesting_contract_address); - borrow_global(vesting_contract_address).vesting_schedule - } - - #[view] - /// Return the total accumulated rewards that have not been distributed to shareholders of the vesting contract. - /// This excludes any unpaid commission that the operator has not collected. - /// - /// This errors out if the vesting contract with the provided address doesn't exist. - public fun total_accumulated_rewards(vesting_contract_address: address): u64 acquires VestingContract { - assert_active_vesting_contract(vesting_contract_address); - - let vesting_contract = borrow_global(vesting_contract_address); - let (total_active_stake, _, commission_amount) = - staking_contract::staking_contract_amounts(vesting_contract_address, vesting_contract.staking.operator); - total_active_stake - vesting_contract.remaining_grant - commission_amount - } - - #[view] - /// Return the accumulated rewards that have not been distributed to the provided shareholder. Caller can also pass - /// the beneficiary address instead of shareholder address. - /// - /// This errors out if the vesting contract with the provided address doesn't exist. - public fun accumulated_rewards( - vesting_contract_address: address, shareholder_or_beneficiary: address): u64 acquires VestingContract { - assert_active_vesting_contract(vesting_contract_address); - - let total_accumulated_rewards = total_accumulated_rewards(vesting_contract_address); - let shareholder = shareholder(vesting_contract_address, shareholder_or_beneficiary); - let vesting_contract = borrow_global(vesting_contract_address); - let shares = pool_u64::shares(&vesting_contract.grant_pool, shareholder); - pool_u64::shares_to_amount_with_total_coins(&vesting_contract.grant_pool, shares, total_accumulated_rewards) - } - - #[view] - /// Return the list of all shareholders in the vesting contract. - public fun shareholders(vesting_contract_address: address): vector
acquires VestingContract { - assert_active_vesting_contract(vesting_contract_address); - - let vesting_contract = borrow_global(vesting_contract_address); - pool_u64::shareholders(&vesting_contract.grant_pool) - } - - #[view] - /// Return the shareholder address given the beneficiary address in a given vesting contract. If there are multiple - /// shareholders with the same beneficiary address, only the first shareholder is returned. If the given beneficiary - /// address is actually a shareholder address, just return the address back. - /// - /// This returns 0x0 if no shareholder is found for the given beneficiary / the address is not a shareholder itself. - public fun shareholder( - vesting_contract_address: address, - shareholder_or_beneficiary: address - ): address acquires VestingContract { - assert_active_vesting_contract(vesting_contract_address); - - let shareholders = &shareholders(vesting_contract_address); - if (vector::contains(shareholders, &shareholder_or_beneficiary)) { - return shareholder_or_beneficiary - }; - let vesting_contract = borrow_global(vesting_contract_address); - let result = @0x0; - vector::any(shareholders, |shareholder| { - if (shareholder_or_beneficiary == get_beneficiary(vesting_contract, *shareholder)) { - result = *shareholder; - true - } else { - false - } - }); - - result - } - - /// Create a vesting schedule with the given schedule of distributions, a vesting start time and period duration. - public fun create_vesting_schedule( - schedule: vector, - start_timestamp_secs: u64, - period_duration: u64, - ): VestingSchedule { - assert!(vector::length(&schedule) > 0, error::invalid_argument(EEMPTY_VESTING_SCHEDULE)); - assert!(period_duration > 0, error::invalid_argument(EZERO_VESTING_SCHEDULE_PERIOD)); - assert!( - start_timestamp_secs >= timestamp::now_seconds(), - error::invalid_argument(EVESTING_START_TOO_SOON), - ); - - VestingSchedule { - schedule, - start_timestamp_secs, - period_duration, - last_vested_period: 0, - } - } - - /// Create a vesting contract with a given configurations. - public fun create_vesting_contract( - admin: &signer, - shareholders: &vector
, - buy_ins: SimpleMap>, - vesting_schedule: VestingSchedule, - withdrawal_address: address, - operator: address, - voter: address, - commission_percentage: u64, - // Optional seed used when creating the staking contract account. - contract_creation_seed: vector, - ): address acquires AdminStore { - assert!( - !system_addresses::is_reserved_address(withdrawal_address), - error::invalid_argument(EINVALID_WITHDRAWAL_ADDRESS), - ); - assert_account_is_registered_for_apt(withdrawal_address); - assert!(vector::length(shareholders) > 0, error::invalid_argument(ENO_SHAREHOLDERS)); - assert!( - simple_map::length(&buy_ins) == vector::length(shareholders), - error::invalid_argument(ESHARES_LENGTH_MISMATCH), - ); - - // Create a coins pool to track shareholders and shares of the grant. - let grant = coin::zero(); - let grant_amount = 0; - let grant_pool = pool_u64::create(MAXIMUM_SHAREHOLDERS); - vector::for_each_ref(shareholders, |shareholder| { - let shareholder: address = *shareholder; - let (_, buy_in) = simple_map::remove(&mut buy_ins, &shareholder); - let buy_in_amount = coin::value(&buy_in); - coin::merge(&mut grant, buy_in); - pool_u64::buy_in( - &mut grant_pool, - shareholder, - buy_in_amount, - ); - grant_amount = grant_amount + buy_in_amount; - }); - assert!(grant_amount > 0, error::invalid_argument(EZERO_GRANT)); - - // If this is the first time this admin account has created a vesting contract, initialize the admin store. - let admin_address = signer::address_of(admin); - if (!exists(admin_address)) { - move_to(admin, AdminStore { - vesting_contracts: vector::empty
(), - nonce: 0, - create_events: new_event_handle(admin), - }); - }; - - // Initialize the vesting contract in a new resource account. This allows the same admin to create multiple - // pools. - let (contract_signer, contract_signer_cap) = create_vesting_contract_account(admin, contract_creation_seed); - let pool_address = staking_contract::create_staking_contract_with_coins( - &contract_signer, operator, voter, grant, commission_percentage, contract_creation_seed); - - // Add the newly created vesting contract's address to the admin store. - let contract_address = signer::address_of(&contract_signer); - let admin_store = borrow_global_mut(admin_address); - vector::push_back(&mut admin_store.vesting_contracts, contract_address); - if (std::features::module_event_migration_enabled()) { - emit( - CreateVestingContract { - operator, - voter, - withdrawal_address, - grant_amount, - vesting_contract_address: contract_address, - staking_pool_address: pool_address, - commission_percentage, - }, - ); - } else { - emit_event( - &mut admin_store.create_events, - CreateVestingContractEvent { - operator, - voter, - withdrawal_address, - grant_amount, - vesting_contract_address: contract_address, - staking_pool_address: pool_address, - commission_percentage, - }, - ); - }; - - move_to(&contract_signer, VestingContract { - state: VESTING_POOL_ACTIVE, - admin: admin_address, - grant_pool, - beneficiaries: simple_map::create(), - vesting_schedule, - withdrawal_address, - staking: StakingInfo { pool_address, operator, voter, commission_percentage }, - remaining_grant: grant_amount, - signer_cap: contract_signer_cap, - update_operator_events: new_event_handle(&contract_signer), - update_voter_events: new_event_handle(&contract_signer), - reset_lockup_events: new_event_handle(&contract_signer), - set_beneficiary_events: new_event_handle(&contract_signer), - unlock_rewards_events: new_event_handle(&contract_signer), - vest_events: new_event_handle(&contract_signer), - distribute_events: new_event_handle(&contract_signer), - terminate_events: new_event_handle(&contract_signer), - admin_withdraw_events: new_event_handle(&contract_signer), - }); - - simple_map::destroy_empty(buy_ins); - contract_address - } - - /// Unlock any accumulated rewards. - public entry fun unlock_rewards(contract_address: address) acquires VestingContract { - let accumulated_rewards = total_accumulated_rewards(contract_address); - let vesting_contract = borrow_global(contract_address); - unlock_stake(vesting_contract, accumulated_rewards); - } - - /// Call `unlock_rewards` for many vesting contracts. - public entry fun unlock_rewards_many(contract_addresses: vector
) acquires VestingContract { - let len = vector::length(&contract_addresses); - - assert!(len != 0, error::invalid_argument(EVEC_EMPTY_FOR_MANY_FUNCTION)); - - vector::for_each_ref(&contract_addresses, |contract_address| { - let contract_address: address = *contract_address; - unlock_rewards(contract_address); - }); - } - - /// Unlock any vested portion of the grant. - public entry fun vest(contract_address: address) acquires VestingContract { - // Unlock all rewards first, if any. - unlock_rewards(contract_address); - - // Unlock the vested amount. This amount will become withdrawable when the underlying stake pool's lockup - // expires. - let vesting_contract = borrow_global_mut(contract_address); - // Short-circuit if vesting hasn't started yet. - if (vesting_contract.vesting_schedule.start_timestamp_secs > timestamp::now_seconds()) { - return - }; - - // Check if the next vested period has already passed. If not, short-circuit since there's nothing to vest. - let vesting_schedule = &mut vesting_contract.vesting_schedule; - let last_vested_period = vesting_schedule.last_vested_period; - let next_period_to_vest = last_vested_period + 1; - let last_completed_period = - (timestamp::now_seconds() - vesting_schedule.start_timestamp_secs) / vesting_schedule.period_duration; - if (last_completed_period < next_period_to_vest) { - return - }; - - // Calculate how much has vested, excluding rewards. - // Index is 0-based while period is 1-based so we need to subtract 1. - let schedule = &vesting_schedule.schedule; - let schedule_index = next_period_to_vest - 1; - let vesting_fraction = if (schedule_index < vector::length(schedule)) { - *vector::borrow(schedule, schedule_index) - } else { - // Last vesting schedule fraction will repeat until the grant runs out. - *vector::borrow(schedule, vector::length(schedule) - 1) - }; - let total_grant = pool_u64::total_coins(&vesting_contract.grant_pool); - let vested_amount = fixed_point32::multiply_u64(total_grant, vesting_fraction); - // Cap vested amount by the remaining grant amount so we don't try to distribute more than what's remaining. - vested_amount = min(vested_amount, vesting_contract.remaining_grant); - vesting_contract.remaining_grant = vesting_contract.remaining_grant - vested_amount; - vesting_schedule.last_vested_period = next_period_to_vest; - unlock_stake(vesting_contract, vested_amount); - - if (std::features::module_event_migration_enabled()) { - emit( - Vest { - admin: vesting_contract.admin, - vesting_contract_address: contract_address, - staking_pool_address: vesting_contract.staking.pool_address, - period_vested: next_period_to_vest, - amount: vested_amount, - }, - ); - } else { - emit_event( - &mut vesting_contract.vest_events, - VestEvent { - admin: vesting_contract.admin, - vesting_contract_address: contract_address, - staking_pool_address: vesting_contract.staking.pool_address, - period_vested: next_period_to_vest, - amount: vested_amount, - }, - ); - }; - } - - /// Call `vest` for many vesting contracts. - public entry fun vest_many(contract_addresses: vector
) acquires VestingContract { - let len = vector::length(&contract_addresses); - - assert!(len != 0, error::invalid_argument(EVEC_EMPTY_FOR_MANY_FUNCTION)); - - vector::for_each_ref(&contract_addresses, |contract_address| { - let contract_address = *contract_address; - vest(contract_address); - }); - } - - /// Distribute any withdrawable stake from the stake pool. - public entry fun distribute(contract_address: address) acquires VestingContract { - assert_active_vesting_contract(contract_address); - - let vesting_contract = borrow_global_mut(contract_address); - let coins = withdraw_stake(vesting_contract, contract_address); - let total_distribution_amount = coin::value(&coins); - if (total_distribution_amount == 0) { - coin::destroy_zero(coins); - return - }; - - // Distribute coins to all shareholders in the vesting contract. - let grant_pool = &vesting_contract.grant_pool; - let shareholders = &pool_u64::shareholders(grant_pool); - vector::for_each_ref(shareholders, |shareholder| { - let shareholder = *shareholder; - let shares = pool_u64::shares(grant_pool, shareholder); - let amount = pool_u64::shares_to_amount_with_total_coins(grant_pool, shares, total_distribution_amount); - let share_of_coins = coin::extract(&mut coins, amount); - let recipient_address = get_beneficiary(vesting_contract, shareholder); - aptos_account::deposit_coins(recipient_address, share_of_coins); - }); - - // Send any remaining "dust" (leftover due to rounding error) to the withdrawal address. - if (coin::value(&coins) > 0) { - aptos_account::deposit_coins(vesting_contract.withdrawal_address, coins); - } else { - coin::destroy_zero(coins); - }; - - if (std::features::module_event_migration_enabled()) { - emit( - Distribute { - admin: vesting_contract.admin, - vesting_contract_address: contract_address, - amount: total_distribution_amount, - }, - ); - } else { - emit_event( - &mut vesting_contract.distribute_events, - DistributeEvent { - admin: vesting_contract.admin, - vesting_contract_address: contract_address, - amount: total_distribution_amount, - }, - ); - }; - } - - /// Call `distribute` for many vesting contracts. - public entry fun distribute_many(contract_addresses: vector
) acquires VestingContract { - let len = vector::length(&contract_addresses); - - assert!(len != 0, error::invalid_argument(EVEC_EMPTY_FOR_MANY_FUNCTION)); - - vector::for_each_ref(&contract_addresses, |contract_address| { - let contract_address = *contract_address; - distribute(contract_address); - }); - } - - /// Terminate the vesting contract and send all funds back to the withdrawal address. - public entry fun terminate_vesting_contract(admin: &signer, contract_address: address) acquires VestingContract { - assert_active_vesting_contract(contract_address); - - // Distribute all withdrawable coins, which should have been from previous rewards withdrawal or vest. - distribute(contract_address); - - let vesting_contract = borrow_global_mut(contract_address); - verify_admin(admin, vesting_contract); - let (active_stake, _, pending_active_stake, _) = stake::get_stake(vesting_contract.staking.pool_address); - assert!(pending_active_stake == 0, error::invalid_state(EPENDING_STAKE_FOUND)); - - // Unlock all remaining active stake. - vesting_contract.state = VESTING_POOL_TERMINATED; - vesting_contract.remaining_grant = 0; - unlock_stake(vesting_contract, active_stake); - - if (std::features::module_event_migration_enabled()) { - emit( - Terminate { - admin: vesting_contract.admin, - vesting_contract_address: contract_address, - }, - ); - } else { - emit_event( - &mut vesting_contract.terminate_events, - TerminateEvent { - admin: vesting_contract.admin, - vesting_contract_address: contract_address, - }, - ); - }; - } - - /// Withdraw all funds to the preset vesting contract's withdrawal address. This can only be called if the contract - /// has already been terminated. - public entry fun admin_withdraw(admin: &signer, contract_address: address) acquires VestingContract { - let vesting_contract = borrow_global(contract_address); - assert!( - vesting_contract.state == VESTING_POOL_TERMINATED, - error::invalid_state(EVESTING_CONTRACT_STILL_ACTIVE) - ); - - let vesting_contract = borrow_global_mut(contract_address); - verify_admin(admin, vesting_contract); - let coins = withdraw_stake(vesting_contract, contract_address); - let amount = coin::value(&coins); - if (amount == 0) { - coin::destroy_zero(coins); - return - }; - aptos_account::deposit_coins(vesting_contract.withdrawal_address, coins); - - if (std::features::module_event_migration_enabled()) { - emit( - AdminWithdraw { - admin: vesting_contract.admin, - vesting_contract_address: contract_address, - amount, - }, - ); - } else { - emit_event( - &mut vesting_contract.admin_withdraw_events, - AdminWithdrawEvent { - admin: vesting_contract.admin, - vesting_contract_address: contract_address, - amount, - }, - ); - }; - } - - public entry fun update_operator( - admin: &signer, - contract_address: address, - new_operator: address, - commission_percentage: u64, - ) acquires VestingContract { - let vesting_contract = borrow_global_mut(contract_address); - verify_admin(admin, vesting_contract); - let contract_signer = &get_vesting_account_signer_internal(vesting_contract); - let old_operator = vesting_contract.staking.operator; - staking_contract::switch_operator(contract_signer, old_operator, new_operator, commission_percentage); - vesting_contract.staking.operator = new_operator; - vesting_contract.staking.commission_percentage = commission_percentage; - - if (std::features::module_event_migration_enabled()) { - emit( - UpdateOperator { - admin: vesting_contract.admin, - vesting_contract_address: contract_address, - staking_pool_address: vesting_contract.staking.pool_address, - old_operator, - new_operator, - commission_percentage, - }, - ); - } else { - emit_event( - &mut vesting_contract.update_operator_events, - UpdateOperatorEvent { - admin: vesting_contract.admin, - vesting_contract_address: contract_address, - staking_pool_address: vesting_contract.staking.pool_address, - old_operator, - new_operator, - commission_percentage, - }, - ); - }; - } - - public entry fun update_operator_with_same_commission( - admin: &signer, - contract_address: address, - new_operator: address, - ) acquires VestingContract { - let commission_percentage = operator_commission_percentage(contract_address); - update_operator(admin, contract_address, new_operator, commission_percentage); - } - - public entry fun update_commission_percentage( - admin: &signer, - contract_address: address, - new_commission_percentage: u64, - ) acquires VestingContract { - let operator = operator(contract_address); - let vesting_contract = borrow_global_mut(contract_address); - verify_admin(admin, vesting_contract); - let contract_signer = &get_vesting_account_signer_internal(vesting_contract); - staking_contract::update_commision(contract_signer, operator, new_commission_percentage); - vesting_contract.staking.commission_percentage = new_commission_percentage; - // This function does not emit an event. Instead, `staking_contract::update_commission_percentage` - // emits the event for this commission percentage update. - } - - public entry fun update_voter( - admin: &signer, - contract_address: address, - new_voter: address, - ) acquires VestingContract { - let vesting_contract = borrow_global_mut(contract_address); - verify_admin(admin, vesting_contract); - let contract_signer = &get_vesting_account_signer_internal(vesting_contract); - let old_voter = vesting_contract.staking.voter; - staking_contract::update_voter(contract_signer, vesting_contract.staking.operator, new_voter); - vesting_contract.staking.voter = new_voter; - - if (std::features::module_event_migration_enabled()) { - emit( - UpdateVoter { - admin: vesting_contract.admin, - vesting_contract_address: contract_address, - staking_pool_address: vesting_contract.staking.pool_address, - old_voter, - new_voter, - }, - ); - } else { - emit_event( - &mut vesting_contract.update_voter_events, - UpdateVoterEvent { - admin: vesting_contract.admin, - vesting_contract_address: contract_address, - staking_pool_address: vesting_contract.staking.pool_address, - old_voter, - new_voter, - }, - ); - } - } - - public entry fun reset_lockup( - admin: &signer, - contract_address: address, - ) acquires VestingContract { - let vesting_contract = borrow_global_mut(contract_address); - verify_admin(admin, vesting_contract); - let contract_signer = &get_vesting_account_signer_internal(vesting_contract); - staking_contract::reset_lockup(contract_signer, vesting_contract.staking.operator); - - if (std::features::module_event_migration_enabled()) { - emit( - ResetLockup { - admin: vesting_contract.admin, - vesting_contract_address: contract_address, - staking_pool_address: vesting_contract.staking.pool_address, - new_lockup_expiration_secs: stake::get_lockup_secs(vesting_contract.staking.pool_address), - }, - ); - } else { - emit_event( - &mut vesting_contract.reset_lockup_events, - ResetLockupEvent { - admin: vesting_contract.admin, - vesting_contract_address: contract_address, - staking_pool_address: vesting_contract.staking.pool_address, - new_lockup_expiration_secs: stake::get_lockup_secs(vesting_contract.staking.pool_address), - }, - ); - }; - } - - public entry fun set_beneficiary( - admin: &signer, - contract_address: address, - shareholder: address, - new_beneficiary: address, - ) acquires VestingContract { - // Verify that the beneficiary account is set up to receive APT. This is a requirement so distribute() wouldn't - // fail and block all other accounts from receiving APT if one beneficiary is not registered. - assert_account_is_registered_for_apt(new_beneficiary); - - let vesting_contract = borrow_global_mut(contract_address); - verify_admin(admin, vesting_contract); - - let old_beneficiary = get_beneficiary(vesting_contract, shareholder); - let beneficiaries = &mut vesting_contract.beneficiaries; - if (simple_map::contains_key(beneficiaries, &shareholder)) { - let beneficiary = simple_map::borrow_mut(beneficiaries, &shareholder); - *beneficiary = new_beneficiary; - } else { - simple_map::add(beneficiaries, shareholder, new_beneficiary); - }; - - if (std::features::module_event_migration_enabled()) { - emit( - SetBeneficiary { - admin: vesting_contract.admin, - vesting_contract_address: contract_address, - shareholder, - old_beneficiary, - new_beneficiary, - }, - ); - } else { - emit_event( - &mut vesting_contract.set_beneficiary_events, - SetBeneficiaryEvent { - admin: vesting_contract.admin, - vesting_contract_address: contract_address, - shareholder, - old_beneficiary, - new_beneficiary, - }, - ); - }; - } - - /// Remove the beneficiary for the given shareholder. All distributions will sent directly to the shareholder - /// account. - public entry fun reset_beneficiary( - account: &signer, - contract_address: address, - shareholder: address, - ) acquires VestingAccountManagement, VestingContract { - let vesting_contract = borrow_global_mut(contract_address); - let addr = signer::address_of(account); - assert!( - addr == vesting_contract.admin || - addr == get_role_holder(contract_address, utf8(ROLE_BENEFICIARY_RESETTER)), - error::permission_denied(EPERMISSION_DENIED), - ); - - let beneficiaries = &mut vesting_contract.beneficiaries; - if (simple_map::contains_key(beneficiaries, &shareholder)) { - simple_map::remove(beneficiaries, &shareholder); - }; - } - - public entry fun set_management_role( - admin: &signer, - contract_address: address, - role: String, - role_holder: address, - ) acquires VestingAccountManagement, VestingContract { - let vesting_contract = borrow_global(contract_address); - verify_admin(admin, vesting_contract); - - if (!exists(contract_address)) { - let contract_signer = &get_vesting_account_signer_internal(vesting_contract); - move_to(contract_signer, VestingAccountManagement { - roles: simple_map::create(), - }) - }; - let roles = &mut borrow_global_mut(contract_address).roles; - if (simple_map::contains_key(roles, &role)) { - *simple_map::borrow_mut(roles, &role) = role_holder; - } else { - simple_map::add(roles, role, role_holder); - }; - } - - public entry fun set_beneficiary_resetter( - admin: &signer, - contract_address: address, - beneficiary_resetter: address, - ) acquires VestingAccountManagement, VestingContract { - set_management_role(admin, contract_address, utf8(ROLE_BENEFICIARY_RESETTER), beneficiary_resetter); - } - - /// Set the beneficiary for the operator. - public entry fun set_beneficiary_for_operator( - operator: &signer, - new_beneficiary: address, - ) { - staking_contract::set_beneficiary_for_operator(operator, new_beneficiary); - } - - public fun get_role_holder(contract_address: address, role: String): address acquires VestingAccountManagement { - assert!(exists(contract_address), error::not_found(EVESTING_ACCOUNT_HAS_NO_ROLES)); - let roles = &borrow_global(contract_address).roles; - assert!(simple_map::contains_key(roles, &role), error::not_found(EROLE_NOT_FOUND)); - *simple_map::borrow(roles, &role) - } - - /// For emergency use in case the admin needs emergency control of vesting contract account. - /// This doesn't give the admin total power as the admin would still need to follow the rules set by - /// staking_contract and stake modules. - public fun get_vesting_account_signer(admin: &signer, contract_address: address): signer acquires VestingContract { - let vesting_contract = borrow_global(contract_address); - verify_admin(admin, vesting_contract); - get_vesting_account_signer_internal(vesting_contract) - } - - fun get_vesting_account_signer_internal(vesting_contract: &VestingContract): signer { - account::create_signer_with_capability(&vesting_contract.signer_cap) - } - - /// Create a salt for generating the resource accounts that will be holding the VestingContract. - /// This address should be deterministic for the same admin and vesting contract creation nonce. - fun create_vesting_contract_account( - admin: &signer, - contract_creation_seed: vector, - ): (signer, SignerCapability) acquires AdminStore { - let admin_store = borrow_global_mut(signer::address_of(admin)); - let seed = bcs::to_bytes(&signer::address_of(admin)); - vector::append(&mut seed, bcs::to_bytes(&admin_store.nonce)); - admin_store.nonce = admin_store.nonce + 1; - - // Include a salt to avoid conflicts with any other modules out there that might also generate - // deterministic resource accounts for the same admin address + nonce. - vector::append(&mut seed, VESTING_POOL_SALT); - vector::append(&mut seed, contract_creation_seed); - - let (account_signer, signer_cap) = account::create_resource_account(admin, seed); - // Register the vesting contract account to receive APT as it'll be sent to it when claiming unlocked stake from - // the underlying staking contract. - coin::register(&account_signer); - - (account_signer, signer_cap) - } - - fun verify_admin(admin: &signer, vesting_contract: &VestingContract) { - assert!(signer::address_of(admin) == vesting_contract.admin, error::unauthenticated(ENOT_ADMIN)); - } - - fun assert_vesting_contract_exists(contract_address: address) { - assert!(exists(contract_address), error::not_found(EVESTING_CONTRACT_NOT_FOUND)); - } - - fun assert_active_vesting_contract(contract_address: address) acquires VestingContract { - assert_vesting_contract_exists(contract_address); - let vesting_contract = borrow_global(contract_address); - assert!(vesting_contract.state == VESTING_POOL_ACTIVE, error::invalid_state(EVESTING_CONTRACT_NOT_ACTIVE)); - } - - fun unlock_stake(vesting_contract: &VestingContract, amount: u64) { - let contract_signer = &get_vesting_account_signer_internal(vesting_contract); - staking_contract::unlock_stake(contract_signer, vesting_contract.staking.operator, amount); - } - - fun withdraw_stake(vesting_contract: &VestingContract, contract_address: address): Coin { - // Claim any withdrawable distribution from the staking contract. The withdrawn coins will be sent directly to - // the vesting contract's account. - staking_contract::distribute(contract_address, vesting_contract.staking.operator); - let withdrawn_coins = coin::balance(contract_address); - let contract_signer = &get_vesting_account_signer_internal(vesting_contract); - coin::withdraw(contract_signer, withdrawn_coins) - } - - fun get_beneficiary(contract: &VestingContract, shareholder: address): address { - if (simple_map::contains_key(&contract.beneficiaries, &shareholder)) { - *simple_map::borrow(&contract.beneficiaries, &shareholder) - } else { - shareholder - } - } - - #[test_only] - use aptos_framework::stake::with_rewards; - - #[test_only] - use aptos_framework::account::create_account_for_test; - use aptos_std::math64::min; - - #[test_only] - const MIN_STAKE: u64 = 100000000000000; // 1M APT coins with 8 decimals. - - #[test_only] - const GRANT_AMOUNT: u64 = 20000000000000000; // 200M APT coins with 8 decimals. - - #[test_only] - const VESTING_SCHEDULE_CLIFF: u64 = 31536000; // 1 year - - #[test_only] - const VESTING_PERIOD: u64 = 2592000; // 30 days - - #[test_only] - const VALIDATOR_STATUS_PENDING_ACTIVE: u64 = 1; - #[test_only] - const VALIDATOR_STATUS_ACTIVE: u64 = 2; - #[test_only] - const VALIDATOR_STATUS_INACTIVE: u64 = 4; - - #[test_only] - const MODULE_EVENT: u64 = 26; - - #[test_only] - const OPERATOR_BENEFICIARY_CHANGE: u64 = 39; - - #[test_only] - public fun setup(aptos_framework: &signer, accounts: &vector
) { - use aptos_framework::aptos_account::create_account; - - stake::initialize_for_test_custom( - aptos_framework, - MIN_STAKE, - GRANT_AMOUNT * 10, - 3600, - true, - 10, - 10000, - 1000000 - ); - - vector::for_each_ref(accounts, |addr| { - let addr: address = *addr; - if (!account::exists_at(addr)) { - create_account(addr); - }; - }); - - std::features::change_feature_flags_for_testing(aptos_framework, vector[MODULE_EVENT, OPERATOR_BENEFICIARY_CHANGE], vector[]); - } - - #[test_only] - public fun setup_vesting_contract( - admin: &signer, - shareholders: &vector
, - shares: &vector, - withdrawal_address: address, - commission_percentage: u64, - ): address acquires AdminStore { - setup_vesting_contract_with_schedule( - admin, - shareholders, - shares, - withdrawal_address, - commission_percentage, - &vector[3, 2, 1], - 48, - ) - } - - #[test_only] - public fun setup_vesting_contract_with_schedule( - admin: &signer, - shareholders: &vector
, - shares: &vector, - withdrawal_address: address, - commission_percentage: u64, - vesting_numerators: &vector, - vesting_denominator: u64, - ): address acquires AdminStore { - let schedule = vector::empty(); - vector::for_each_ref(vesting_numerators, |num| { - vector::push_back(&mut schedule, fixed_point32::create_from_rational(*num, vesting_denominator)); - }); - let vesting_schedule = create_vesting_schedule( - schedule, - timestamp::now_seconds() + VESTING_SCHEDULE_CLIFF, - VESTING_PERIOD, - ); - - let admin_address = signer::address_of(admin); - let buy_ins = simple_map::create>(); - vector::enumerate_ref(shares, |i, share| { - let shareholder = *vector::borrow(shareholders, i); - simple_map::add(&mut buy_ins, shareholder, stake::mint_coins(*share)); - }); - - create_vesting_contract( - admin, - shareholders, - buy_ins, - vesting_schedule, - withdrawal_address, - admin_address, - admin_address, - commission_percentage, - vector[], - ) - } - - #[test(aptos_framework = @0x1, admin = @0x123, shareholder_1 = @0x234, shareholder_2 = @0x345, withdrawal = @111)] - public entry fun test_end_to_end( - aptos_framework: &signer, - admin: &signer, - shareholder_1: &signer, - shareholder_2: &signer, - withdrawal: &signer, - ) acquires AdminStore, VestingContract { - let admin_address = signer::address_of(admin); - let withdrawal_address = signer::address_of(withdrawal); - let shareholder_1_address = signer::address_of(shareholder_1); - let shareholder_2_address = signer::address_of(shareholder_2); - let shareholders = &vector[shareholder_1_address, shareholder_2_address]; - let shareholder_1_share = GRANT_AMOUNT / 4; - let shareholder_2_share = GRANT_AMOUNT * 3 / 4; - let shares = &vector[shareholder_1_share, shareholder_2_share]; - - // Create the vesting contract. - setup( - aptos_framework, &vector[admin_address, withdrawal_address, shareholder_1_address, shareholder_2_address]); - let contract_address = setup_vesting_contract(admin, shareholders, shares, withdrawal_address, 0); - assert!(vector::length(&borrow_global(admin_address).vesting_contracts) == 1, 0); - let stake_pool_address = stake_pool_address(contract_address); - stake::assert_stake_pool(stake_pool_address, GRANT_AMOUNT, 0, 0, 0); - - // The stake pool is still in pending active stake, so unlock_rewards and vest shouldn't do anything. - let (_sk, pk, pop) = stake::generate_identity(); - stake::join_validator_set_for_test(&pk, &pop, admin, stake_pool_address, false); - assert!(stake::get_validator_state(stake_pool_address) == VALIDATOR_STATUS_PENDING_ACTIVE, 1); - unlock_rewards(contract_address); - vest(contract_address); - stake::assert_stake_pool(stake_pool_address, GRANT_AMOUNT, 0, 0, 0); - - // Wait for the validator to join the validator set. No rewards are earnt yet so unlock_rewards and vest should - // still do nothing. - stake::end_epoch(); - assert!(stake::get_validator_state(stake_pool_address) == VALIDATOR_STATUS_ACTIVE, 2); - unlock_rewards(contract_address); - vest(contract_address); - stake::assert_stake_pool(stake_pool_address, GRANT_AMOUNT, 0, 0, 0); - - // Stake pool earns some rewards. unlock_rewards should unlock the right amount. - stake::end_epoch(); - let rewards = get_accumulated_rewards(contract_address); - unlock_rewards(contract_address); - stake::assert_stake_pool(stake_pool_address, GRANT_AMOUNT, 0, 0, rewards); - assert!(remaining_grant(contract_address) == GRANT_AMOUNT, 0); - - // Stake pool earns more rewards. vest should unlock the rewards but no vested tokens as vesting hasn't started. - stake::end_epoch(); - rewards = with_rewards(rewards); // Pending inactive stake still earns rewards. - rewards = rewards + get_accumulated_rewards(contract_address); - vest(contract_address); - stake::assert_stake_pool(stake_pool_address, GRANT_AMOUNT, 0, 0, rewards); - assert!(remaining_grant(contract_address) == GRANT_AMOUNT, 0); - - // Fast forward to stake lockup expiration so rewards are fully unlocked. - // In the mean time, rewards still earn rewards. - // Calling distribute() should send rewards to the shareholders. - stake::fast_forward_to_unlock(stake_pool_address); - rewards = with_rewards(rewards); - distribute(contract_address); - let shareholder_1_bal = coin::balance(shareholder_1_address); - let shareholder_2_bal = coin::balance(shareholder_2_address); - // Distribution goes by the shares of the vesting contract. - assert!(shareholder_1_bal == rewards / 4, shareholder_1_bal); - assert!(shareholder_2_bal == rewards * 3 / 4, shareholder_2_bal); - - // Fast forward time to the vesting start. - timestamp::update_global_time_for_test_secs(vesting_start_secs(contract_address)); - // Calling vest only unlocks rewards but not any vested token as the first vesting period hasn't passed yet. - rewards = get_accumulated_rewards(contract_address); - vest(contract_address); - stake::assert_stake_pool(stake_pool_address, GRANT_AMOUNT, 0, 0, rewards); - assert!(remaining_grant(contract_address) == GRANT_AMOUNT, 0); - - // Fast forward to the end of the first period. vest() should now unlock 3/48 of the tokens. - timestamp::fast_forward_seconds(VESTING_PERIOD); - vest(contract_address); - let vested_amount = fraction(GRANT_AMOUNT, 3, 48); - let remaining_grant = GRANT_AMOUNT - vested_amount; - let pending_distribution = rewards + vested_amount; - assert!(remaining_grant(contract_address) == remaining_grant, remaining_grant(contract_address)); - stake::assert_stake_pool(stake_pool_address, remaining_grant, 0, 0, pending_distribution); - - // Fast forward to the end of the fourth period. We can call vest() 3 times to vest the last 3 periods. - timestamp::fast_forward_seconds(VESTING_PERIOD * 3); - vest(contract_address); - vested_amount = fraction(GRANT_AMOUNT, 2, 48); - remaining_grant = remaining_grant - vested_amount; - pending_distribution = pending_distribution + vested_amount; - stake::assert_stake_pool(stake_pool_address, remaining_grant, 0, 0, pending_distribution); - vest(contract_address); - vested_amount = fraction(GRANT_AMOUNT, 1, 48); - remaining_grant = remaining_grant - vested_amount; - pending_distribution = pending_distribution + vested_amount; - stake::assert_stake_pool(stake_pool_address, remaining_grant, 0, 0, pending_distribution); - // The last vesting fraction (1/48) is repeated beyond the first 3 periods. - vest(contract_address); - remaining_grant = remaining_grant - vested_amount; - pending_distribution = pending_distribution + vested_amount; - stake::assert_stake_pool(stake_pool_address, remaining_grant, 0, 0, pending_distribution); - assert!(remaining_grant(contract_address) == remaining_grant, 0); - - stake::end_epoch(); - let total_active = with_rewards(remaining_grant); - pending_distribution = with_rewards(pending_distribution); - distribute(contract_address); - stake::assert_stake_pool(stake_pool_address, total_active, 0, 0, 0); - assert!(coin::balance(shareholder_1_address) == shareholder_1_bal + pending_distribution / 4, 0); - assert!(coin::balance(shareholder_2_address) == shareholder_2_bal + pending_distribution * 3 / 4, 1); - // Withdrawal address receives the left-over dust of 1 coin due to rounding error. - assert!(coin::balance(withdrawal_address) == 1, 0); - - // Admin terminates the vesting contract. - terminate_vesting_contract(admin, contract_address); - stake::assert_stake_pool(stake_pool_address, 0, 0, 0, total_active); - assert!(remaining_grant(contract_address) == 0, 0); - stake::fast_forward_to_unlock(stake_pool_address); - let withdrawn_amount = with_rewards(total_active); - stake::assert_stake_pool(stake_pool_address, 0, withdrawn_amount, 0, 0); - let previous_bal = coin::balance(withdrawal_address); - admin_withdraw(admin, contract_address); - assert!(coin::balance(withdrawal_address) == previous_bal + withdrawn_amount, 0); - } - - #[test(aptos_framework = @0x1, admin = @0x123)] - #[expected_failure(abort_code = 0x1000C, location = Self)] - public entry fun test_create_vesting_contract_with_zero_grant_should_fail( - aptos_framework: &signer, - admin: &signer, - ) acquires AdminStore { - let admin_address = signer::address_of(admin); - setup(aptos_framework, &vector[admin_address]); - setup_vesting_contract(admin, &vector[@1], &vector[0], admin_address, 0); - } - - #[test(aptos_framework = @0x1, admin = @0x123)] - #[expected_failure(abort_code = 0x10004, location = Self)] - public entry fun test_create_vesting_contract_with_no_shareholders_should_fail( - aptos_framework: &signer, - admin: &signer, - ) acquires AdminStore { - let admin_address = signer::address_of(admin); - setup(aptos_framework, &vector[admin_address]); - setup_vesting_contract(admin, &vector[], &vector[], admin_address, 0); - } - - #[test(aptos_framework = @0x1, admin = @0x123)] - #[expected_failure(abort_code = 0x10005, location = Self)] - public entry fun test_create_vesting_contract_with_mistmaching_shareholders_should_fail( - aptos_framework: &signer, - admin: &signer, - ) acquires AdminStore { - let admin_address = signer::address_of(admin); - setup(aptos_framework, &vector[admin_address]); - setup_vesting_contract(admin, &vector[@1, @2], &vector[1], admin_address, 0); - } - - #[test(aptos_framework = @0x1, admin = @0x123)] - #[expected_failure(abort_code = 0x60001, location = aptos_framework::aptos_account)] - public entry fun test_create_vesting_contract_with_invalid_withdrawal_address_should_fail( - aptos_framework: &signer, - admin: &signer, - ) acquires AdminStore { - let admin_address = signer::address_of(admin); - setup(aptos_framework, &vector[admin_address]); - setup_vesting_contract(admin, &vector[@1, @2], &vector[1], @5, 0); - } - - #[test(aptos_framework = @0x1, admin = @0x123)] - #[expected_failure(abort_code = 0x60001, location = aptos_framework::aptos_account)] - public entry fun test_create_vesting_contract_with_missing_withdrawal_account_should_fail( - aptos_framework: &signer, - admin: &signer, - ) acquires AdminStore { - let admin_address = signer::address_of(admin); - setup(aptos_framework, &vector[admin_address]); - setup_vesting_contract(admin, &vector[@1, @2], &vector[1], @11, 0); - } - - #[test(aptos_framework = @0x1, admin = @0x123)] - #[expected_failure(abort_code = 0x60002, location = aptos_framework::aptos_account)] - public entry fun test_create_vesting_contract_with_unregistered_withdrawal_account_should_fail( - aptos_framework: &signer, - admin: &signer, - ) acquires AdminStore { - let admin_address = signer::address_of(admin); - setup(aptos_framework, &vector[admin_address]); - create_account_for_test(@11); - setup_vesting_contract(admin, &vector[@1, @2], &vector[1], @11, 0); - } - - #[test(aptos_framework = @0x1)] - #[expected_failure(abort_code = 0x10002, location = Self)] - public entry fun test_create_empty_vesting_schedule_should_fail(aptos_framework: &signer) { - setup(aptos_framework, &vector[]); - create_vesting_schedule(vector[], 1, 1); - } - - #[test(aptos_framework = @0x1)] - #[expected_failure(abort_code = 0x10003, location = Self)] - public entry fun test_create_vesting_schedule_with_zero_period_duration_should_fail(aptos_framework: &signer) { - setup(aptos_framework, &vector[]); - create_vesting_schedule(vector[fixed_point32::create_from_rational(1, 1)], 1, 0); - } - - #[test(aptos_framework = @0x1, admin = @0x123)] - #[expected_failure(abort_code = 0x10006, location = Self)] - public entry fun test_create_vesting_schedule_with_invalid_vesting_start_should_fail(aptos_framework: &signer) { - setup(aptos_framework, &vector[]); - timestamp::update_global_time_for_test_secs(1000); - create_vesting_schedule( - vector[fixed_point32::create_from_rational(1, 1)], - 900, - 1); - } - - #[test(aptos_framework = @0x1, admin = @0x123, shareholder = @0x234)] - public entry fun test_vest_twice_should_not_double_count( - aptos_framework: &signer, - admin: &signer, - shareholder: &signer, - ) acquires AdminStore, VestingContract { - let admin_address = signer::address_of(admin); - let shareholder_address = signer::address_of(shareholder); - setup(aptos_framework, &vector[admin_address, shareholder_address]); - let contract_address = setup_vesting_contract( - admin, &vector[shareholder_address], &vector[GRANT_AMOUNT], admin_address, 0); - - // Operator needs to join the validator set for the stake pool to earn rewards. - let stake_pool_address = stake_pool_address(contract_address); - let (_sk, pk, pop) = stake::generate_identity(); - stake::join_validator_set_for_test(&pk, &pop, admin, stake_pool_address, true); - - // Fast forward to the end of the first period. vest() should now unlock 3/48 of the tokens. - timestamp::update_global_time_for_test_secs(vesting_start_secs(contract_address) + VESTING_PERIOD); - vest(contract_address); - let vested_amount = fraction(GRANT_AMOUNT, 3, 48); - let remaining_grant = GRANT_AMOUNT - vested_amount; - stake::assert_stake_pool(stake_pool_address, remaining_grant, 0, 0, vested_amount); - assert!(remaining_grant(contract_address) == remaining_grant, 0); - - // Calling vest() a second time shouldn't change anything. - vest(contract_address); - stake::assert_stake_pool(stake_pool_address, remaining_grant, 0, 0, vested_amount); - assert!(remaining_grant(contract_address) == remaining_grant, 0); - } - - #[test(aptos_framework = @0x1, admin = @0x123, shareholder = @0x234)] - public entry fun test_unlock_rewards_twice_should_not_double_count( - aptos_framework: &signer, - admin: &signer, - shareholder: &signer, - ) acquires AdminStore, VestingContract { - let admin_address = signer::address_of(admin); - let shareholder_address = signer::address_of(shareholder); - setup(aptos_framework, &vector[admin_address, shareholder_address]); - let contract_address = setup_vesting_contract( - admin, &vector[shareholder_address], &vector[GRANT_AMOUNT], admin_address, 0); - - // Operator needs to join the validator set for the stake pool to earn rewards. - let stake_pool_address = stake_pool_address(contract_address); - let (_sk, pk, pop) = stake::generate_identity(); - stake::join_validator_set_for_test(&pk, &pop, admin, stake_pool_address, true); - - // Stake pool earns some rewards. unlock_rewards should unlock the right amount. - stake::end_epoch(); - let rewards = get_accumulated_rewards(contract_address); - unlock_rewards(contract_address); - stake::assert_stake_pool(stake_pool_address, GRANT_AMOUNT, 0, 0, rewards); - assert!(remaining_grant(contract_address) == GRANT_AMOUNT, 0); - - // Calling unlock_rewards a second time shouldn't change anything as no new rewards has accumulated. - unlock_rewards(contract_address); - stake::assert_stake_pool(stake_pool_address, GRANT_AMOUNT, 0, 0, rewards); - } - - #[test(aptos_framework = @0x1, admin = @0x123, shareholder = @0x234, operator = @0x345)] - public entry fun test_unlock_rewards_should_pay_commission_first( - aptos_framework: &signer, - admin: &signer, - shareholder: &signer, - operator: &signer, - ) acquires AdminStore, VestingContract { - let admin_address = signer::address_of(admin); - let operator_address = signer::address_of(operator); - let shareholder_address = signer::address_of(shareholder); - setup(aptos_framework, &vector[admin_address, shareholder_address, operator_address]); - let contract_address = setup_vesting_contract( - admin, &vector[shareholder_address], &vector[GRANT_AMOUNT], admin_address, 0); - assert!(operator_commission_percentage(contract_address) == 0, 0); - - // 10% commission will be paid to the operator. - update_operator(admin, contract_address, operator_address, 10); - assert!(operator_commission_percentage(contract_address) == 10, 0); - - // Operator needs to join the validator set for the stake pool to earn rewards. - let stake_pool_address = stake_pool_address(contract_address); - let (_sk, pk, pop) = stake::generate_identity(); - stake::join_validator_set_for_test(&pk, &pop, operator, stake_pool_address, true); - - // Stake pool earns some rewards. unlock_rewards should unlock the right amount. - stake::end_epoch(); - let accumulated_rewards = get_accumulated_rewards(contract_address); - let commission = accumulated_rewards / 10; // 10%. - let staker_rewards = accumulated_rewards - commission; - unlock_rewards(contract_address); - stake::assert_stake_pool(stake_pool_address, GRANT_AMOUNT, 0, 0, accumulated_rewards); - assert!(remaining_grant(contract_address) == GRANT_AMOUNT, 0); - - // Distribution should pay commission to operator first and remaining amount to shareholders. - stake::fast_forward_to_unlock(stake_pool_address); - stake::assert_stake_pool( - stake_pool_address, - with_rewards(GRANT_AMOUNT), - with_rewards(accumulated_rewards), - 0, - 0 - ); - // Operator also earns more commission from the rewards earnt on the withdrawn rewards. - let commission_on_staker_rewards = (with_rewards(staker_rewards) - staker_rewards) / 10; - staker_rewards = with_rewards(staker_rewards) - commission_on_staker_rewards; - commission = with_rewards(commission) + commission_on_staker_rewards; - distribute(contract_address); - // Rounding error leads to a dust amount of 1 transferred to the staker. - assert!(coin::balance(shareholder_address) == staker_rewards + 1, 0); - assert!(coin::balance(operator_address) == commission - 1, 1); - } - - #[test(aptos_framework = @0x1, admin = @0x123, shareholder = @0x234, operator = @0x345)] - public entry fun test_request_commission_should_not_lock_rewards_for_shareholders( - aptos_framework: &signer, - admin: &signer, - shareholder: &signer, - operator: &signer, - ) acquires AdminStore, VestingContract { - let admin_address = signer::address_of(admin); - let operator_address = signer::address_of(operator); - let shareholder_address = signer::address_of(shareholder); - setup(aptos_framework, &vector[admin_address, shareholder_address, operator_address]); - let contract_address = setup_vesting_contract( - admin, &vector[shareholder_address], &vector[GRANT_AMOUNT], admin_address, 0); - assert!(operator_commission_percentage(contract_address) == 0, 0); - - // 10% commission will be paid to the operator. - update_operator(admin, contract_address, operator_address, 10); - assert!(operator_commission_percentage(contract_address) == 10, 0); - - // Operator needs to join the validator set for the stake pool to earn rewards. - let stake_pool_address = stake_pool_address(contract_address); - let (_sk, pk, pop) = stake::generate_identity(); - stake::join_validator_set_for_test(&pk, &pop, operator, stake_pool_address, true); - - // Stake pool earns some rewards. - stake::end_epoch(); - - // Operator requests commission directly with staking_contract first. - let accumulated_rewards = get_accumulated_rewards(contract_address); - let commission = accumulated_rewards / 10; // 10%. - let staker_rewards = accumulated_rewards - commission; - staking_contract::request_commission(operator, contract_address, operator_address); - - // Unlock vesting rewards. This should still pay out the accumulated rewards to shareholders. - unlock_rewards(contract_address); - stake::assert_stake_pool(stake_pool_address, GRANT_AMOUNT, 0, 0, accumulated_rewards); - assert!(remaining_grant(contract_address) == GRANT_AMOUNT, 0); - - // Distribution should pay commission to operator first and remaining amount to shareholders. - stake::fast_forward_to_unlock(stake_pool_address); - stake::assert_stake_pool( - stake_pool_address, - with_rewards(GRANT_AMOUNT), - with_rewards(accumulated_rewards), - 0, - 0 - ); - // Operator also earns more commission from the rewards earnt on the withdrawn rewards. - let commission_on_staker_rewards = (with_rewards(staker_rewards) - staker_rewards) / 10; - staker_rewards = with_rewards(staker_rewards) - commission_on_staker_rewards; - commission = with_rewards(commission) + commission_on_staker_rewards; - distribute(contract_address); - // Rounding error leads to a dust amount of 1 transferred to the staker. - assert!(coin::balance(shareholder_address) == staker_rewards + 1, 0); - assert!(coin::balance(operator_address) == commission - 1, 1); - } - - #[test(aptos_framework = @0x1, admin = @0x123, operator = @0x345)] - public entry fun test_update_operator_with_same_commission( - aptos_framework: &signer, - admin: &signer, - operator: &signer, - ) acquires AdminStore, VestingContract { - let admin_address = signer::address_of(admin); - let operator_address = signer::address_of(operator); - setup(aptos_framework, &vector[admin_address, @11, operator_address]); - let contract_address = setup_vesting_contract( - admin, &vector[@11], &vector[GRANT_AMOUNT], admin_address, 10); - - update_operator_with_same_commission(admin, contract_address, operator_address); - assert!(operator_commission_percentage(contract_address) == 10, 0); - } - - #[test(aptos_framework = @0x1, admin = @0x123, shareholder = @0x234, operator = @0x345)] - public entry fun test_commission_percentage_change( - aptos_framework: &signer, - admin: &signer, - shareholder: &signer, - operator: &signer, - ) acquires AdminStore, VestingContract { - let admin_address = signer::address_of(admin); - let operator_address = signer::address_of(operator); - let shareholder_address = signer::address_of(shareholder); - setup(aptos_framework, &vector[admin_address, shareholder_address, operator_address]); - let contract_address = setup_vesting_contract( - admin, &vector[shareholder_address], &vector[GRANT_AMOUNT], admin_address, 0); - assert!(operator_commission_percentage(contract_address) == 0, 0); - let stake_pool_address = stake_pool_address(contract_address); - - // 10% commission will be paid to the operator. - update_operator(admin, contract_address, operator_address, 10); - - // Operator needs to join the validator set for the stake pool to earn rewards. - let (_sk, pk, pop) = stake::generate_identity(); - stake::join_validator_set_for_test(&pk, &pop, operator, stake_pool_address, true); - stake::assert_stake_pool(stake_pool_address, GRANT_AMOUNT, 0, 0, 0); - assert!(get_accumulated_rewards(contract_address) == 0, 0); - assert!(remaining_grant(contract_address) == GRANT_AMOUNT, 0); - - // Stake pool earns some rewards. - stake::end_epoch(); - let (_, accumulated_rewards, _) = staking_contract::staking_contract_amounts( - contract_address, - operator_address - ); - - // Update commission percentage to 20%. This also immediately requests commission. - update_commission_percentage(admin, contract_address, 20); - // Assert that the operator is still the same, and the commission percentage is updated to 20%. - assert!(operator(contract_address) == operator_address, 0); - assert!(operator_commission_percentage(contract_address) == 20, 0); - - // Commission is calculated using the previous commission percentage which is 10%. - let expected_commission = accumulated_rewards / 10; - - // Stake pool earns some more rewards. - stake::end_epoch(); - let (_, accumulated_rewards, _) = staking_contract::staking_contract_amounts( - contract_address, - operator_address - ); - - // Request commission again. - staking_contract::request_commission(operator, contract_address, operator_address); - // The commission is calculated using the current commission percentage which is 20%. - expected_commission = with_rewards(expected_commission) + (accumulated_rewards / 5); - - // Unlocks the commission. - stake::fast_forward_to_unlock(stake_pool_address); - expected_commission = with_rewards(expected_commission); - - // Distribute the commission to the operator. - distribute(contract_address); - - // Assert that the operator receives the expected commission. - assert!(coin::balance(operator_address) == expected_commission, 1); - } - - #[test( - aptos_framework = @0x1, - admin = @0x123, - shareholder = @0x234, - operator1 = @0x345, - beneficiary = @0x456, - operator2 = @0x567 - )] - public entry fun test_set_beneficiary_for_operator( - aptos_framework: &signer, - admin: &signer, - shareholder: &signer, - operator1: &signer, - beneficiary: &signer, - operator2: &signer, - ) acquires AdminStore, VestingContract { - let admin_address = signer::address_of(admin); - let operator_address1 = signer::address_of(operator1); - let operator_address2 = signer::address_of(operator2); - let shareholder_address = signer::address_of(shareholder); - let beneficiary_address = signer::address_of(beneficiary); - setup(aptos_framework, &vector[admin_address, shareholder_address, operator_address1, beneficiary_address]); - let contract_address = setup_vesting_contract( - admin, &vector[shareholder_address], &vector[GRANT_AMOUNT], admin_address, 0); - assert!(operator_commission_percentage(contract_address) == 0, 0); - let stake_pool_address = stake_pool_address(contract_address); - // 10% commission will be paid to the operator. - update_operator(admin, contract_address, operator_address1, 10); - assert!(staking_contract::beneficiary_for_operator(operator_address1) == operator_address1, 0); - set_beneficiary_for_operator(operator1, beneficiary_address); - assert!(staking_contract::beneficiary_for_operator(operator_address1) == beneficiary_address, 0); - - // Operator needs to join the validator set for the stake pool to earn rewards. - let (_sk, pk, pop) = stake::generate_identity(); - stake::join_validator_set_for_test(&pk, &pop, operator1, stake_pool_address, true); - stake::assert_stake_pool(stake_pool_address, GRANT_AMOUNT, 0, 0, 0); - assert!(get_accumulated_rewards(contract_address) == 0, 0); - assert!(remaining_grant(contract_address) == GRANT_AMOUNT, 0); - - // Stake pool earns some rewards. - stake::end_epoch(); - let (_, accumulated_rewards, _) = staking_contract::staking_contract_amounts(contract_address, - operator_address1 - ); - // Commission is calculated using the previous commission percentage which is 10%. - let expected_commission = accumulated_rewards / 10; - - // Request commission. - staking_contract::request_commission(operator1, contract_address, operator_address1); - // Unlocks the commission. - stake::fast_forward_to_unlock(stake_pool_address); - expected_commission = with_rewards(expected_commission); - - // Distribute the commission to the operator. - distribute(contract_address); - - // Assert that the beneficiary receives the expected commission. - assert!(coin::balance(operator_address1) == 0, 1); - assert!(coin::balance(beneficiary_address) == expected_commission, 1); - let old_beneficiay_balance = coin::balance(beneficiary_address); - - // switch operator to operator2. The rewards should go to operator2 not to the beneficiay of operator1. - update_operator(admin, contract_address, operator_address2, 10); - - stake::end_epoch(); - let (_, accumulated_rewards, _) = staking_contract::staking_contract_amounts(contract_address, - operator_address2 - ); - - let expected_commission = accumulated_rewards / 10; - - // Request commission. - staking_contract::request_commission(operator2, contract_address, operator_address2); - // Unlocks the commission. - stake::fast_forward_to_unlock(stake_pool_address); - expected_commission = with_rewards(expected_commission); - - // Distribute the commission to the operator. - distribute(contract_address); - - // Assert that the rewards go to operator2, and the balance of the operator1's beneficiay remains the same. - assert!(coin::balance(operator_address2) >= expected_commission, 1); - assert!(coin::balance(beneficiary_address) == old_beneficiay_balance, 1); - } - - #[test(aptos_framework = @0x1, admin = @0x123, shareholder = @0x234)] - #[expected_failure(abort_code = 0x30008, location = Self)] - public entry fun test_cannot_unlock_rewards_after_contract_is_terminated( - aptos_framework: &signer, - admin: &signer, - shareholder: &signer, - ) acquires AdminStore, VestingContract { - let admin_address = signer::address_of(admin); - let shareholder_address = signer::address_of(shareholder); - setup(aptos_framework, &vector[admin_address, shareholder_address]); - let contract_address = setup_vesting_contract( - admin, &vector[shareholder_address], &vector[GRANT_AMOUNT], admin_address, 0); - - // Immediately terminate. Calling unlock_rewards should now fail. - terminate_vesting_contract(admin, contract_address); - unlock_rewards(contract_address); - } - - #[test(aptos_framework = @0x1, admin = @0x123, shareholder = @0x234)] - public entry fun test_vesting_contract_with_zero_vestings( - aptos_framework: &signer, - admin: &signer, - shareholder: &signer, - ) acquires AdminStore, VestingContract { - let admin_address = signer::address_of(admin); - let shareholder_address = signer::address_of(shareholder); - setup(aptos_framework, &vector[admin_address, shareholder_address]); - let contract_address = setup_vesting_contract_with_schedule( - admin, - &vector[shareholder_address], - &vector[GRANT_AMOUNT], - admin_address, - 0, - &vector[0, 3, 0, 2], - 48, - ); - let stake_pool_address = stake_pool_address(contract_address); - - // First vest() should unlock 0 according to schedule. - timestamp::update_global_time_for_test_secs(vesting_start_secs(contract_address) + VESTING_PERIOD); - vest(contract_address); - stake::assert_stake_pool(stake_pool_address, GRANT_AMOUNT, 0, 0, 0); - assert!(remaining_grant(contract_address) == GRANT_AMOUNT, 0); - - // Next period should vest 3/48. - timestamp::fast_forward_seconds(VESTING_PERIOD); - vest(contract_address); - let vested_amount = fraction(GRANT_AMOUNT, 3, 48); - let remaining_grant = GRANT_AMOUNT - vested_amount; - stake::assert_stake_pool(stake_pool_address, remaining_grant, 0, 0, vested_amount); - assert!(remaining_grant(contract_address) == remaining_grant, 0); - - timestamp::fast_forward_seconds(VESTING_PERIOD); - // Distribute the previous vested amount. - distribute(contract_address); - // Next period should vest 0 again. - vest(contract_address); - stake::assert_stake_pool(stake_pool_address, remaining_grant, 0, 0, 0); - assert!(remaining_grant(contract_address) == remaining_grant, 0); - - // Next period should vest 2/48. - timestamp::fast_forward_seconds(VESTING_PERIOD); - vest(contract_address); - let vested_amount = fraction(GRANT_AMOUNT, 2, 48); - remaining_grant = remaining_grant - vested_amount; - stake::assert_stake_pool(stake_pool_address, remaining_grant, 0, 0, vested_amount); - assert!(remaining_grant(contract_address) == remaining_grant, 0); - } - - #[test(aptos_framework = @0x1, admin = @0x123, shareholder = @0x234)] - public entry fun test_last_vest_should_distribute_remaining_amount( - aptos_framework: &signer, - admin: &signer, - shareholder: &signer, - ) acquires AdminStore, VestingContract { - let admin_address = signer::address_of(admin); - let shareholder_address = signer::address_of(shareholder); - setup(aptos_framework, &vector[admin_address, shareholder_address]); - let contract_address = setup_vesting_contract_with_schedule( - admin, - &vector[shareholder_address], - &vector[GRANT_AMOUNT], - admin_address, - 0, - // First vest = 3/4 but last vest should only be for the remaining 1/4. - &vector[3], - 4, - ); - let stake_pool_address = stake_pool_address(contract_address); - - // First vest is 3/48 - timestamp::update_global_time_for_test_secs(vesting_start_secs(contract_address) + VESTING_PERIOD); - vest(contract_address); - let vested_amount = fraction(GRANT_AMOUNT, 3, 4); - let remaining_grant = GRANT_AMOUNT - vested_amount; - stake::assert_stake_pool(stake_pool_address, remaining_grant, 0, 0, vested_amount); - assert!(remaining_grant(contract_address) == remaining_grant, 0); - - timestamp::fast_forward_seconds(VESTING_PERIOD); - // Distribute the previous vested amount. - distribute(contract_address); - // Last vest should be the remaining amount (1/4). - vest(contract_address); - let vested_amount = remaining_grant; - remaining_grant = 0; - stake::assert_stake_pool(stake_pool_address, remaining_grant, 0, 0, vested_amount); - assert!(remaining_grant(contract_address) == remaining_grant, 0); - } - - #[test(aptos_framework = @0x1, admin = @0x123, shareholder = @0x234)] - #[expected_failure(abort_code = 0x30008, location = Self)] - public entry fun test_cannot_vest_after_contract_is_terminated( - aptos_framework: &signer, - admin: &signer, - shareholder: &signer, - ) acquires AdminStore, VestingContract { - let admin_address = signer::address_of(admin); - let shareholder_address = signer::address_of(shareholder); - setup(aptos_framework, &vector[admin_address, shareholder_address]); - let contract_address = setup_vesting_contract( - admin, &vector[shareholder_address], &vector[GRANT_AMOUNT], admin_address, 0); - - // Immediately terminate. Calling vest should now fail. - terminate_vesting_contract(admin, contract_address); - vest(contract_address); - } - - #[test(aptos_framework = @0x1, admin = @0x123, shareholder = @0x234)] - #[expected_failure(abort_code = 0x30008, location = Self)] - public entry fun test_cannot_terminate_twice( - aptos_framework: &signer, - admin: &signer, - shareholder: &signer, - ) acquires AdminStore, VestingContract { - let admin_address = signer::address_of(admin); - let shareholder_address = signer::address_of(shareholder); - setup(aptos_framework, &vector[admin_address, shareholder_address]); - let contract_address = setup_vesting_contract( - admin, &vector[shareholder_address], &vector[GRANT_AMOUNT], admin_address, 0); - - // Call terminate_vesting_contract twice should fail. - terminate_vesting_contract(admin, contract_address); - terminate_vesting_contract(admin, contract_address); - } - - #[test(aptos_framework = @0x1, admin = @0x123, shareholder = @0x234)] - #[expected_failure(abort_code = 0x30009, location = Self)] - public entry fun test_cannot_call_admin_withdraw_if_contract_is_not_terminated( - aptos_framework: &signer, - admin: &signer, - shareholder: &signer, - ) acquires AdminStore, VestingContract { - let admin_address = signer::address_of(admin); - let shareholder_address = signer::address_of(shareholder); - setup(aptos_framework, &vector[admin_address, shareholder_address]); - let contract_address = setup_vesting_contract( - admin, &vector[shareholder_address], &vector[GRANT_AMOUNT], admin_address, 0); - - // Calling admin_withdraw should fail as contract has not been terminated. - admin_withdraw(admin, contract_address); - } - - #[test(aptos_framework = @0x1, admin = @0x123)] - #[expected_failure(abort_code = 0x60001, location = aptos_framework::aptos_account)] - public entry fun test_set_beneficiary_with_missing_account_should_fail( - aptos_framework: &signer, - admin: &signer, - ) acquires AdminStore, VestingContract { - let admin_address = signer::address_of(admin); - setup(aptos_framework, &vector[admin_address]); - let contract_address = setup_vesting_contract( - admin, &vector[@1, @2], &vector[GRANT_AMOUNT, GRANT_AMOUNT], admin_address, 0); - set_beneficiary(admin, contract_address, @1, @11); - } - - #[test(aptos_framework = @0x1, admin = @0x123)] - #[expected_failure(abort_code = 0x60002, location = aptos_framework::aptos_account)] - public entry fun test_set_beneficiary_with_unregistered_account_should_fail( - aptos_framework: &signer, - admin: &signer, - ) acquires AdminStore, VestingContract { - let admin_address = signer::address_of(admin); - setup(aptos_framework, &vector[admin_address]); - let contract_address = setup_vesting_contract( - admin, &vector[@1, @2], &vector[GRANT_AMOUNT, GRANT_AMOUNT], admin_address, 0); - create_account_for_test(@11); - set_beneficiary(admin, contract_address, @1, @11); - } - - #[test(aptos_framework = @0x1, admin = @0x123)] - public entry fun test_set_beneficiary_should_send_distribution( - aptos_framework: &signer, - admin: &signer, - ) acquires AdminStore, VestingContract { - let admin_address = signer::address_of(admin); - setup(aptos_framework, &vector[admin_address, @11]); - let contract_address = setup_vesting_contract( - admin, &vector[@1], &vector[GRANT_AMOUNT], admin_address, 0); - set_beneficiary(admin, contract_address, @1, @11); - assert!(beneficiary(contract_address, @1) == @11, 0); - - // Fast forward to the end of the first period. vest() should now unlock 3/48 of the tokens. - timestamp::update_global_time_for_test_secs(vesting_start_secs(contract_address) + VESTING_PERIOD); - vest(contract_address); - - // Distribution should go to the beneficiary account. - stake::end_epoch(); - // No rewards as validator never joined the validator set. - let vested_amount = fraction(GRANT_AMOUNT, 3, 48); - distribute(contract_address); - let balance = coin::balance(@11); - assert!(balance == vested_amount, balance); - } - - #[test(aptos_framework = @0x1, admin = @0x123)] - public entry fun test_set_management_role( - aptos_framework: &signer, - admin: &signer, - ) acquires AdminStore, VestingAccountManagement, VestingContract { - let admin_address = signer::address_of(admin); - setup(aptos_framework, &vector[admin_address]); - let contract_address = setup_vesting_contract( - admin, &vector[@11], &vector[GRANT_AMOUNT], admin_address, 0); - let role = utf8(b"RANDOM"); - set_management_role(admin, contract_address, role, @12); - assert!(get_role_holder(contract_address, role) == @12, 0); - set_management_role(admin, contract_address, role, @13); - assert!(get_role_holder(contract_address, role) == @13, 0); - } - - #[test(aptos_framework = @0x1, admin = @0x123)] - public entry fun test_reset_beneficiary( - aptos_framework: &signer, - admin: &signer, - ) acquires AdminStore, VestingAccountManagement, VestingContract { - let admin_address = signer::address_of(admin); - setup(aptos_framework, &vector[admin_address, @11, @12]); - let contract_address = setup_vesting_contract( - admin, &vector[@11], &vector[GRANT_AMOUNT], admin_address, 0); - set_beneficiary(admin, contract_address, @11, @12); - assert!(beneficiary(contract_address, @11) == @12, 0); - - // Fast forward to the end of the first period. vest() should now unlock 3/48 of the tokens. - timestamp::update_global_time_for_test_secs(vesting_start_secs(contract_address) + VESTING_PERIOD); - vest(contract_address); - - // Reset the beneficiary. - reset_beneficiary(admin, contract_address, @11); - - // Distribution should go to the original account. - stake::end_epoch(); - // No rewards as validator never joined the validator set. - let vested_amount = fraction(GRANT_AMOUNT, 3, 48); - distribute(contract_address); - assert!(coin::balance(@11) == vested_amount, 0); - assert!(coin::balance(@12) == 0, 1); - } - - #[test(aptos_framework = @0x1, admin = @0x123, resetter = @0x234)] - public entry fun test_reset_beneficiary_with_resetter_role( - aptos_framework: &signer, - admin: &signer, - resetter: &signer, - ) acquires AdminStore, VestingAccountManagement, VestingContract { - let admin_address = signer::address_of(admin); - setup(aptos_framework, &vector[admin_address, @11, @12]); - let contract_address = setup_vesting_contract( - admin, &vector[@11], &vector[GRANT_AMOUNT], admin_address, 0); - set_beneficiary(admin, contract_address, @11, @12); - assert!(beneficiary(contract_address, @11) == @12, 0); - - // Reset the beneficiary with the resetter role. - let resetter_address = signer::address_of(resetter); - set_beneficiary_resetter(admin, contract_address, resetter_address); - assert!(simple_map::length(&borrow_global(contract_address).roles) == 1, 0); - reset_beneficiary(resetter, contract_address, @11); - assert!(beneficiary(contract_address, @11) == @11, 0); - } - - #[test(aptos_framework = @0x1, admin = @0x123, resetter = @0x234, random = @0x345)] - #[expected_failure(abort_code = 0x5000F, location = Self)] - public entry fun test_reset_beneficiary_with_unauthorized( - aptos_framework: &signer, - admin: &signer, - resetter: &signer, - random: &signer, - ) acquires AdminStore, VestingAccountManagement, VestingContract { - let admin_address = signer::address_of(admin); - setup(aptos_framework, &vector[admin_address, @11]); - let contract_address = setup_vesting_contract( - admin, &vector[@11], &vector[GRANT_AMOUNT], admin_address, 0); - - // Reset the beneficiary with a random account. This should failed. - set_beneficiary_resetter(admin, contract_address, signer::address_of(resetter)); - reset_beneficiary(random, contract_address, @11); - } - - #[test(aptos_framework = @0x1, admin = @0x123, resetter = @0x234, random = @0x345)] - public entry fun test_shareholder( - aptos_framework: &signer, - admin: &signer, - ) acquires AdminStore, VestingContract { - let admin_address = signer::address_of(admin); - setup(aptos_framework, &vector[admin_address, @11, @12]); - let contract_address = setup_vesting_contract( - admin, &vector[@11], &vector[GRANT_AMOUNT], admin_address, 0); - - // Confirm that the lookup returns the same address when a shareholder is - // passed for which there is no beneficiary. - assert!(shareholder(contract_address, @11) == @11, 0); - - // Set a beneficiary for @11. - set_beneficiary(admin, contract_address, @11, @12); - assert!(beneficiary(contract_address, @11) == @12, 0); - - // Confirm that lookup from beneficiary to shareholder works when a beneficiary - // is set. - assert!(shareholder(contract_address, @12) == @11, 0); - - // Confirm that it returns 0x0 when the address is not in the map. - assert!(shareholder(contract_address, @33) == @0x0, 0); - } - - #[test_only] - fun get_accumulated_rewards(contract_address: address): u64 acquires VestingContract { - let vesting_contract = borrow_global(contract_address); - let (active_stake, _, _, _) = stake::get_stake(vesting_contract.staking.pool_address); - active_stake - vesting_contract.remaining_grant - } - - #[test_only] - fun fraction(total: u64, numerator: u64, denominator: u64): u64 { - fixed_point32::multiply_u64(total, fixed_point32::create_from_rational(numerator, denominator)) - } -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/voting.move b/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/voting.move deleted file mode 100644 index 8312ac17b..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/AptosFramework/voting.move +++ /dev/null @@ -1,1282 +0,0 @@ -/// -/// This is the general Voting module that can be used as part of a DAO Governance. Voting is designed to be used by -/// standalone governance modules, who has full control over the voting flow and is responsible for voting power -/// calculation and including proper capabilities when creating the proposal so resolution can go through. -/// On-chain governance of the Aptos network also uses Voting. -/// -/// The voting flow: -/// 1. The Voting module can be deployed at a known address (e.g. 0x1 for Aptos on-chain governance) -/// 2. The governance module, e.g. AptosGovernance, can be deployed later and define a GovernanceProposal resource type -/// that can also contain other information such as Capability resource for authorization. -/// 3. The governance module's owner can then register the ProposalType with Voting. This also hosts the proposal list -/// (forum) on the calling account. -/// 4. A proposer, through the governance module, can call Voting::create_proposal to create a proposal. create_proposal -/// cannot be called directly not through the governance module. A script hash of the resolution script that can later -/// be called to execute the proposal is required. -/// 5. A voter, through the governance module, can call Voting::vote on a proposal. vote requires passing a &ProposalType -/// and thus only the governance module that registers ProposalType can call vote. -/// 6. Once the proposal's expiration time has passed and more than the defined threshold has voted yes on the proposal, -/// anyone can call resolve which returns the content of the proposal (of type ProposalType) that can be used to execute. -/// 7. Only the resolution script with the same script hash specified in the proposal can call Voting::resolve as part of -/// the resolution process. -module aptos_framework::voting { - use std::bcs::to_bytes; - use std::error; - use std::option::{Self, Option}; - use std::signer; - use std::string::{String, utf8}; - use std::vector; - - use aptos_std::from_bcs::to_u64; - use aptos_std::simple_map::{Self, SimpleMap}; - use aptos_std::table::{Self, Table}; - use aptos_std::type_info::{Self, TypeInfo}; - - use aptos_framework::account; - use aptos_framework::event::{Self, EventHandle}; - use aptos_framework::timestamp; - use aptos_framework::transaction_context; - use aptos_std::from_bcs; - - /// Current script's execution hash does not match the specified proposal's - const EPROPOSAL_EXECUTION_HASH_NOT_MATCHING: u64 = 1; - /// Proposal cannot be resolved. Either voting duration has not passed, not enough votes, or fewer yes than no votes - const EPROPOSAL_CANNOT_BE_RESOLVED: u64 = 2; - /// Proposal cannot be resolved more than once - const EPROPOSAL_ALREADY_RESOLVED: u64 = 3; - /// Proposal cannot contain an empty execution script hash - const EPROPOSAL_EMPTY_EXECUTION_HASH: u64 = 4; - /// Proposal's voting period has already ended. - const EPROPOSAL_VOTING_ALREADY_ENDED: u64 = 5; - /// Voting forum has already been registered. - const EVOTING_FORUM_ALREADY_REGISTERED: u64 = 6; - /// Minimum vote threshold cannot be higher than early resolution threshold. - const EINVALID_MIN_VOTE_THRESHOLD: u64 = 7; - /// Resolution of a proposal cannot happen atomically in the same transaction as the last vote. - const ERESOLUTION_CANNOT_BE_ATOMIC: u64 = 8; - /// Cannot vote if the specified multi-step proposal is in execution. - const EMULTI_STEP_PROPOSAL_IN_EXECUTION: u64 = 9; - /// If a proposal is multi-step, we need to use `resolve_proposal_v2()` to resolve it. - /// If we use `resolve()` to resolve a multi-step proposal, it will fail with EMULTI_STEP_PROPOSAL_CANNOT_USE_SINGLE_STEP_RESOLVE_FUNCTION. - const EMULTI_STEP_PROPOSAL_CANNOT_USE_SINGLE_STEP_RESOLVE_FUNCTION: u64 = 10; - /// If we call `resolve_proposal_v2()` to resolve a single-step proposal, the `next_execution_hash` parameter should be an empty vector. - const ESINGLE_STEP_PROPOSAL_CANNOT_HAVE_NEXT_EXECUTION_HASH: u64 = 11; - /// Cannot call `is_multi_step_proposal_in_execution()` on single-step proposals. - const EPROPOSAL_IS_SINGLE_STEP: u64 = 12; - - /// ProposalStateEnum representing proposal state. - const PROPOSAL_STATE_PENDING: u64 = 0; - const PROPOSAL_STATE_SUCCEEDED: u64 = 1; - /// Proposal has failed because either the min vote threshold is not met or majority voted no. - const PROPOSAL_STATE_FAILED: u64 = 3; - - /// Key used to track the resolvable time in the proposal's metadata. - const RESOLVABLE_TIME_METADATA_KEY: vector = b"RESOLVABLE_TIME_METADATA_KEY"; - /// Key used to track if the proposal is multi-step - const IS_MULTI_STEP_PROPOSAL_KEY: vector = b"IS_MULTI_STEP_PROPOSAL_KEY"; - /// Key used to track if the multi-step proposal is in execution / resolving in progress. - const IS_MULTI_STEP_PROPOSAL_IN_EXECUTION_KEY: vector = b"IS_MULTI_STEP_PROPOSAL_IN_EXECUTION"; - - /// Extra metadata (e.g. description, code url) can be part of the ProposalType struct. - struct Proposal has store { - /// Required. The address of the proposer. - proposer: address, - - /// Required. Should contain enough information to execute later, for example the required capability. - /// This is stored as an option so we can return it to governance when the proposal is resolved. - execution_content: Option, - - /// Optional. Value is serialized value of an attribute. - /// Currently, we have three attributes that are used by the voting flow. - /// 1. RESOLVABLE_TIME_METADATA_KEY: this is uesed to record the resolvable time to ensure that resolution has to be done non-atomically. - /// 2. IS_MULTI_STEP_PROPOSAL_KEY: this is used to track if a proposal is single-step or multi-step. - /// 3. IS_MULTI_STEP_PROPOSAL_IN_EXECUTION_KEY: this attribute only applies to multi-step proposals. A single-step proposal will not have - /// this field in its metadata map. The value is used to indicate if a multi-step proposal is in execution. If yes, we will disable further - /// voting for this multi-step proposal. - metadata: SimpleMap>, - - /// Timestamp when the proposal was created. - creation_time_secs: u64, - - /// Required. The hash for the execution script module. Only the same exact script module can resolve this - /// proposal. - execution_hash: vector, - - /// A proposal is only resolved if expiration has passed and the number of votes is above threshold. - min_vote_threshold: u128, - expiration_secs: u64, - - /// Optional. Early resolution threshold. If specified, the proposal can be resolved early if the total - /// number of yes or no votes passes this threshold. - /// For example, this can be set to 50% of the total supply of the voting token, so if > 50% vote yes or no, - /// the proposal can be resolved before expiration. - early_resolution_vote_threshold: Option, - - /// Number of votes for each outcome. - /// u128 since the voting power is already u64 and can add up to more than u64 can hold. - yes_votes: u128, - no_votes: u128, - - /// Whether the proposal has been resolved. - is_resolved: bool, - /// Resolution timestamp if the proposal has been resolved. 0 otherwise. - resolution_time_secs: u64, - } - - struct VotingForum has key { - /// Use Table for execution optimization instead of Vector for gas cost since Vector is read entirely into memory - /// during execution while only relevant Table entries are. - proposals: Table>, - events: VotingEvents, - /// Unique identifier for a proposal. This allows for 2 * 10**19 proposals. - next_proposal_id: u64, - } - - struct VotingEvents has store { - create_proposal_events: EventHandle, - register_forum_events: EventHandle, - resolve_proposal_events: EventHandle, - vote_events: EventHandle, - } - - #[event] - struct CreateProposal has drop, store { - proposal_id: u64, - early_resolution_vote_threshold: Option, - execution_hash: vector, - expiration_secs: u64, - metadata: SimpleMap>, - min_vote_threshold: u128, - } - - #[event] - struct RegisterForum has drop, store { - hosting_account: address, - proposal_type_info: TypeInfo, - } - - #[event] - struct Vote has drop, store { - proposal_id: u64, - num_votes: u64, - } - - #[event] - struct ResolveProposal has drop, store { - proposal_id: u64, - yes_votes: u128, - no_votes: u128, - resolved_early: bool - } - - struct CreateProposalEvent has drop, store { - proposal_id: u64, - early_resolution_vote_threshold: Option, - execution_hash: vector, - expiration_secs: u64, - metadata: SimpleMap>, - min_vote_threshold: u128, - } - - struct RegisterForumEvent has drop, store { - hosting_account: address, - proposal_type_info: TypeInfo, - } - - struct VoteEvent has drop, store { - proposal_id: u64, - num_votes: u64, - } - - public fun register(account: &signer) { - let addr = signer::address_of(account); - assert!(!exists>(addr), error::already_exists(EVOTING_FORUM_ALREADY_REGISTERED)); - - let voting_forum = VotingForum { - next_proposal_id: 0, - proposals: table::new>(), - events: VotingEvents { - create_proposal_events: account::new_event_handle(account), - register_forum_events: account::new_event_handle(account), - resolve_proposal_events: account::new_event_handle(account), - vote_events: account::new_event_handle(account), - } - }; - - if (std::features::module_event_migration_enabled()) { - event::emit( - RegisterForum { - hosting_account: addr, - proposal_type_info: type_info::type_of(), - }, - ); - } else { - event::emit_event( - &mut voting_forum.events.register_forum_events, - RegisterForumEvent { - hosting_account: addr, - proposal_type_info: type_info::type_of(), - }, - ); - }; - - move_to(account, voting_forum); - } - - /// Create a single-step proposal with the given parameters - /// - /// @param voting_forum_address The forum's address where the proposal will be stored. - /// @param execution_content The execution content that will be given back at resolution time. This can contain - /// data such as a capability resource used to scope the execution. - /// @param execution_hash The hash for the execution script module. Only the same exact script module can resolve - /// this proposal. - /// @param min_vote_threshold The minimum number of votes needed to consider this proposal successful. - /// @param expiration_secs The time in seconds at which the proposal expires and can potentially be resolved. - /// @param early_resolution_vote_threshold The vote threshold for early resolution of this proposal. - /// @param metadata A simple_map that stores information about this proposal. - /// @return The proposal id. - public fun create_proposal( - proposer: address, - voting_forum_address: address, - execution_content: ProposalType, - execution_hash: vector, - min_vote_threshold: u128, - expiration_secs: u64, - early_resolution_vote_threshold: Option, - metadata: SimpleMap>, - ): u64 acquires VotingForum { - create_proposal_v2( - proposer, - voting_forum_address, - execution_content, - execution_hash, - min_vote_threshold, - expiration_secs, - early_resolution_vote_threshold, - metadata, - false - ) - } - - /// Create a single-step or a multi-step proposal with the given parameters - /// - /// @param voting_forum_address The forum's address where the proposal will be stored. - /// @param execution_content The execution content that will be given back at resolution time. This can contain - /// data such as a capability resource used to scope the execution. - /// @param execution_hash The sha-256 hash for the execution script module. Only the same exact script module can - /// resolve this proposal. - /// @param min_vote_threshold The minimum number of votes needed to consider this proposal successful. - /// @param expiration_secs The time in seconds at which the proposal expires and can potentially be resolved. - /// @param early_resolution_vote_threshold The vote threshold for early resolution of this proposal. - /// @param metadata A simple_map that stores information about this proposal. - /// @param is_multi_step_proposal A bool value that indicates if the proposal is single-step or multi-step. - /// @return The proposal id. - public fun create_proposal_v2( - proposer: address, - voting_forum_address: address, - execution_content: ProposalType, - execution_hash: vector, - min_vote_threshold: u128, - expiration_secs: u64, - early_resolution_vote_threshold: Option, - metadata: SimpleMap>, - is_multi_step_proposal: bool, - ): u64 acquires VotingForum { - if (option::is_some(&early_resolution_vote_threshold)) { - assert!( - min_vote_threshold <= *option::borrow(&early_resolution_vote_threshold), - error::invalid_argument(EINVALID_MIN_VOTE_THRESHOLD), - ); - }; - // Make sure the execution script's hash is not empty. - assert!(vector::length(&execution_hash) > 0, error::invalid_argument(EPROPOSAL_EMPTY_EXECUTION_HASH)); - - let voting_forum = borrow_global_mut>(voting_forum_address); - let proposal_id = voting_forum.next_proposal_id; - voting_forum.next_proposal_id = voting_forum.next_proposal_id + 1; - - // Add a flag to indicate if this proposal is single-step or multi-step. - simple_map::add(&mut metadata, utf8(IS_MULTI_STEP_PROPOSAL_KEY), to_bytes(&is_multi_step_proposal)); - - let is_multi_step_in_execution_key = utf8(IS_MULTI_STEP_PROPOSAL_IN_EXECUTION_KEY); - if (is_multi_step_proposal) { - // If the given proposal is a multi-step proposal, we will add a flag to indicate if this multi-step proposal is in execution. - // This value is by default false. We turn this value to true when we start executing the multi-step proposal. This value - // will be used to disable further voting after we started executing the multi-step proposal. - simple_map::add(&mut metadata, is_multi_step_in_execution_key, to_bytes(&false)); - // If the proposal is a single-step proposal, we check if the metadata passed by the client has the IS_MULTI_STEP_PROPOSAL_IN_EXECUTION_KEY key. - // If they have the key, we will remove it, because a single-step proposal that doesn't need this key. - } else if (simple_map::contains_key(&metadata, &is_multi_step_in_execution_key)) { - simple_map::remove(&mut metadata, &is_multi_step_in_execution_key); - }; - - table::add(&mut voting_forum.proposals, proposal_id, Proposal { - proposer, - creation_time_secs: timestamp::now_seconds(), - execution_content: option::some(execution_content), - execution_hash, - metadata, - min_vote_threshold, - expiration_secs, - early_resolution_vote_threshold, - yes_votes: 0, - no_votes: 0, - is_resolved: false, - resolution_time_secs: 0, - }); - - if (std::features::module_event_migration_enabled()) { - event::emit( - CreateProposal { - proposal_id, - early_resolution_vote_threshold, - execution_hash, - expiration_secs, - metadata, - min_vote_threshold, - }, - ); - } else { - event::emit_event( - &mut voting_forum.events.create_proposal_events, - CreateProposalEvent { - proposal_id, - early_resolution_vote_threshold, - execution_hash, - expiration_secs, - metadata, - min_vote_threshold, - }, - ); - }; - proposal_id - } - - /// Vote on the given proposal. - /// - /// @param _proof Required so only the governance module that defines ProposalType can initiate voting. - /// This guarantees that voting eligibility and voting power are controlled by the right governance. - /// @param voting_forum_address The address of the forum where the proposals are stored. - /// @param proposal_id The proposal id. - /// @param num_votes Number of votes. Voting power should be calculated by governance. - /// @param should_pass Whether the votes are for yes or no. - public fun vote( - _proof: &ProposalType, - voting_forum_address: address, - proposal_id: u64, - num_votes: u64, - should_pass: bool, - ) acquires VotingForum { - let voting_forum = borrow_global_mut>(voting_forum_address); - let proposal = table::borrow_mut(&mut voting_forum.proposals, proposal_id); - // Voting might still be possible after the proposal has enough yes votes to be resolved early. This would only - // lead to possible proposal resolution failure if the resolve early threshold is not definitive (e.g. < 50% + 1 - // of the total voting token's supply). In this case, more voting might actually still be desirable. - // Governance mechanisms built on this voting module can apply additional rules on when voting is closed as - // appropriate. - assert!(!is_voting_period_over(proposal), error::invalid_state(EPROPOSAL_VOTING_ALREADY_ENDED)); - assert!(!proposal.is_resolved, error::invalid_state(EPROPOSAL_ALREADY_RESOLVED)); - // Assert this proposal is single-step, or if the proposal is multi-step, it is not in execution yet. - assert!(!simple_map::contains_key(&proposal.metadata, &utf8(IS_MULTI_STEP_PROPOSAL_IN_EXECUTION_KEY)) - || *simple_map::borrow(&proposal.metadata, &utf8(IS_MULTI_STEP_PROPOSAL_IN_EXECUTION_KEY)) == to_bytes( - &false - ), - error::invalid_state(EMULTI_STEP_PROPOSAL_IN_EXECUTION)); - - if (should_pass) { - proposal.yes_votes = proposal.yes_votes + (num_votes as u128); - } else { - proposal.no_votes = proposal.no_votes + (num_votes as u128); - }; - - // Record the resolvable time to ensure that resolution has to be done non-atomically. - let timestamp_secs_bytes = to_bytes(×tamp::now_seconds()); - let key = utf8(RESOLVABLE_TIME_METADATA_KEY); - if (simple_map::contains_key(&proposal.metadata, &key)) { - *simple_map::borrow_mut(&mut proposal.metadata, &key) = timestamp_secs_bytes; - } else { - simple_map::add(&mut proposal.metadata, key, timestamp_secs_bytes); - }; - - if (std::features::module_event_migration_enabled()) { - event::emit(Vote { proposal_id, num_votes }); - } else { - event::emit_event( - &mut voting_forum.events.vote_events, - VoteEvent { proposal_id, num_votes }, - ); - }; - } - - /// Common checks on if a proposal is resolvable, regardless if the proposal is single-step or multi-step. - fun is_proposal_resolvable( - voting_forum_address: address, - proposal_id: u64, - ) acquires VotingForum { - let proposal_state = get_proposal_state(voting_forum_address, proposal_id); - assert!(proposal_state == PROPOSAL_STATE_SUCCEEDED, error::invalid_state(EPROPOSAL_CANNOT_BE_RESOLVED)); - - let voting_forum = borrow_global_mut>(voting_forum_address); - let proposal = table::borrow_mut(&mut voting_forum.proposals, proposal_id); - assert!(!proposal.is_resolved, error::invalid_state(EPROPOSAL_ALREADY_RESOLVED)); - - // We need to make sure that the resolution is happening in - // a separate transaction from the last vote to guard against any potential flashloan attacks. - let resolvable_time = to_u64(*simple_map::borrow(&proposal.metadata, &utf8(RESOLVABLE_TIME_METADATA_KEY))); - assert!(timestamp::now_seconds() > resolvable_time, error::invalid_state(ERESOLUTION_CANNOT_BE_ATOMIC)); - - assert!( - transaction_context::get_script_hash() == proposal.execution_hash, - error::invalid_argument(EPROPOSAL_EXECUTION_HASH_NOT_MATCHING), - ); - } - - /// Resolve a single-step proposal with given id. Can only be done if there are at least as many votes as min required and - /// there are more yes votes than no. If either of these conditions is not met, this will revert. - /// - /// @param voting_forum_address The address of the forum where the proposals are stored. - /// @param proposal_id The proposal id. - public fun resolve( - voting_forum_address: address, - proposal_id: u64, - ): ProposalType acquires VotingForum { - is_proposal_resolvable(voting_forum_address, proposal_id); - - let voting_forum = borrow_global_mut>(voting_forum_address); - let proposal = table::borrow_mut(&mut voting_forum.proposals, proposal_id); - - // Assert that the specified proposal is not a multi-step proposal. - let multi_step_key = utf8(IS_MULTI_STEP_PROPOSAL_KEY); - let has_multi_step_key = simple_map::contains_key(&proposal.metadata, &multi_step_key); - if (has_multi_step_key) { - let is_multi_step_proposal = from_bcs::to_bool(*simple_map::borrow(&proposal.metadata, &multi_step_key)); - assert!( - !is_multi_step_proposal, - error::permission_denied(EMULTI_STEP_PROPOSAL_CANNOT_USE_SINGLE_STEP_RESOLVE_FUNCTION) - ); - }; - - let resolved_early = can_be_resolved_early(proposal); - proposal.is_resolved = true; - proposal.resolution_time_secs = timestamp::now_seconds(); - - if (std::features::module_event_migration_enabled()) { - event::emit( - ResolveProposal { - proposal_id, - yes_votes: proposal.yes_votes, - no_votes: proposal.no_votes, - resolved_early, - }, - ); - } else { - event::emit_event( - &mut voting_forum.events.resolve_proposal_events, - ResolveProposal { - proposal_id, - yes_votes: proposal.yes_votes, - no_votes: proposal.no_votes, - resolved_early, - }, - ); - }; - - option::extract(&mut proposal.execution_content) - } - - /// Resolve a single-step or a multi-step proposal with the given id. - /// Can only be done if there are at least as many votes as min required and - /// there are more yes votes than no. If either of these conditions is not met, this will revert. - /// - /// - /// @param voting_forum_address The address of the forum where the proposals are stored. - /// @param proposal_id The proposal id. - /// @param next_execution_hash The next execution hash if the given proposal is multi-step. - public fun resolve_proposal_v2( - voting_forum_address: address, - proposal_id: u64, - next_execution_hash: vector, - ) acquires VotingForum { - is_proposal_resolvable(voting_forum_address, proposal_id); - - let voting_forum = borrow_global_mut>(voting_forum_address); - let proposal = table::borrow_mut(&mut voting_forum.proposals, proposal_id); - - // Update the IS_MULTI_STEP_PROPOSAL_IN_EXECUTION_KEY key to indicate that the multi-step proposal is in execution. - let multi_step_in_execution_key = utf8(IS_MULTI_STEP_PROPOSAL_IN_EXECUTION_KEY); - if (simple_map::contains_key(&proposal.metadata, &multi_step_in_execution_key)) { - let is_multi_step_proposal_in_execution_value = simple_map::borrow_mut( - &mut proposal.metadata, - &multi_step_in_execution_key - ); - *is_multi_step_proposal_in_execution_value = to_bytes(&true); - }; - - let multi_step_key = utf8(IS_MULTI_STEP_PROPOSAL_KEY); - let is_multi_step = simple_map::contains_key(&proposal.metadata, &multi_step_key) && from_bcs::to_bool( - *simple_map::borrow(&proposal.metadata, &multi_step_key) - ); - let next_execution_hash_is_empty = vector::length(&next_execution_hash) == 0; - - // Assert that if this proposal is single-step, the `next_execution_hash` parameter is empty. - assert!( - is_multi_step || next_execution_hash_is_empty, - error::invalid_argument(ESINGLE_STEP_PROPOSAL_CANNOT_HAVE_NEXT_EXECUTION_HASH) - ); - - // If the `next_execution_hash` parameter is empty, it means that either - // - this proposal is a single-step proposal, or - // - this proposal is multi-step and we're currently resolving the last step in the multi-step proposal. - // We can mark that this proposal is resolved. - if (next_execution_hash_is_empty) { - proposal.is_resolved = true; - proposal.resolution_time_secs = timestamp::now_seconds(); - - // Set the `IS_MULTI_STEP_PROPOSAL_IN_EXECUTION_KEY` value to false upon successful resolution of the last step of a multi-step proposal. - if (is_multi_step) { - let is_multi_step_proposal_in_execution_value = simple_map::borrow_mut( - &mut proposal.metadata, - &multi_step_in_execution_key - ); - *is_multi_step_proposal_in_execution_value = to_bytes(&false); - }; - } else { - // If the current step is not the last step, - // update the proposal's execution hash on-chain to the execution hash of the next step. - proposal.execution_hash = next_execution_hash; - }; - - // For single-step proposals, we emit one `ResolveProposal` event per proposal. - // For multi-step proposals, we emit one `ResolveProposal` event per step in the multi-step proposal. This means - // that we emit multiple `ResolveProposal` events for the same multi-step proposal. - let resolved_early = can_be_resolved_early(proposal); - if (std::features::module_event_migration_enabled()) { - event::emit( - ResolveProposal { - proposal_id, - yes_votes: proposal.yes_votes, - no_votes: proposal.no_votes, - resolved_early, - }, - ); - } else { - event::emit_event( - &mut voting_forum.events.resolve_proposal_events, - ResolveProposal { - proposal_id, - yes_votes: proposal.yes_votes, - no_votes: proposal.no_votes, - resolved_early, - }, - ); - }; - } - - #[view] - /// Return the next unassigned proposal id - public fun next_proposal_id(voting_forum_address: address, ): u64 acquires VotingForum { - let voting_forum = borrow_global>(voting_forum_address); - voting_forum.next_proposal_id - } - - #[view] - public fun get_proposer( - voting_forum_address: address, - proposal_id: u64 - ): address acquires VotingForum { - let proposal = get_proposal(voting_forum_address, proposal_id); - proposal.proposer - } - - #[view] - public fun is_voting_closed( - voting_forum_address: address, - proposal_id: u64 - ): bool acquires VotingForum { - let proposal = get_proposal(voting_forum_address, proposal_id); - can_be_resolved_early(proposal) || is_voting_period_over(proposal) - } - - /// Return true if the proposal has reached early resolution threshold (if specified). - public fun can_be_resolved_early(proposal: &Proposal): bool { - if (option::is_some(&proposal.early_resolution_vote_threshold)) { - let early_resolution_threshold = *option::borrow(&proposal.early_resolution_vote_threshold); - if (proposal.yes_votes >= early_resolution_threshold || proposal.no_votes >= early_resolution_threshold) { - return true - }; - }; - false - } - - #[view] - public fun get_proposal_metadata( - voting_forum_address: address, - proposal_id: u64, - ): SimpleMap> acquires VotingForum { - let proposal = get_proposal(voting_forum_address, proposal_id); - proposal.metadata - } - - #[view] - public fun get_proposal_metadata_value( - voting_forum_address: address, - proposal_id: u64, - metadata_key: String, - ): vector acquires VotingForum { - let proposal = get_proposal(voting_forum_address, proposal_id); - *simple_map::borrow(&proposal.metadata, &metadata_key) - } - - #[view] - /// Return the state of the proposal with given id. - /// - /// @param voting_forum_address The address of the forum where the proposals are stored. - /// @param proposal_id The proposal id. - /// @return Proposal state as an enum value. - public fun get_proposal_state( - voting_forum_address: address, - proposal_id: u64, - ): u64 acquires VotingForum { - if (is_voting_closed(voting_forum_address, proposal_id)) { - let proposal = get_proposal(voting_forum_address, proposal_id); - let yes_votes = proposal.yes_votes; - let no_votes = proposal.no_votes; - - if (yes_votes > no_votes && yes_votes + no_votes >= proposal.min_vote_threshold) { - PROPOSAL_STATE_SUCCEEDED - } else { - PROPOSAL_STATE_FAILED - } - } else { - PROPOSAL_STATE_PENDING - } - } - - #[view] - /// Return the proposal's creation time. - public fun get_proposal_creation_secs( - voting_forum_address: address, - proposal_id: u64, - ): u64 acquires VotingForum { - let proposal = get_proposal(voting_forum_address, proposal_id); - proposal.creation_time_secs - } - - #[view] - /// Return the proposal's expiration time. - public fun get_proposal_expiration_secs( - voting_forum_address: address, - proposal_id: u64, - ): u64 acquires VotingForum { - let proposal = get_proposal(voting_forum_address, proposal_id); - proposal.expiration_secs - } - - #[view] - /// Return the proposal's execution hash. - public fun get_execution_hash( - voting_forum_address: address, - proposal_id: u64, - ): vector acquires VotingForum { - let proposal = get_proposal(voting_forum_address, proposal_id); - proposal.execution_hash - } - - #[view] - /// Return the proposal's minimum vote threshold - public fun get_min_vote_threshold( - voting_forum_address: address, - proposal_id: u64, - ): u128 acquires VotingForum { - let proposal = get_proposal(voting_forum_address, proposal_id); - proposal.min_vote_threshold - } - - #[view] - /// Return the proposal's early resolution minimum vote threshold (optionally set) - public fun get_early_resolution_vote_threshold( - voting_forum_address: address, - proposal_id: u64, - ): Option acquires VotingForum { - let proposal = get_proposal(voting_forum_address, proposal_id); - proposal.early_resolution_vote_threshold - } - - #[view] - /// Return the proposal's current vote count (yes_votes, no_votes) - public fun get_votes( - voting_forum_address: address, - proposal_id: u64, - ): (u128, u128) acquires VotingForum { - let proposal = get_proposal(voting_forum_address, proposal_id); - (proposal.yes_votes, proposal.no_votes) - } - - #[view] - /// Return true if the governance proposal has already been resolved. - public fun is_resolved( - voting_forum_address: address, - proposal_id: u64, - ): bool acquires VotingForum { - let proposal = get_proposal(voting_forum_address, proposal_id); - proposal.is_resolved - } - - #[view] - public fun get_resolution_time_secs( - voting_forum_address: address, - proposal_id: u64, - ): u64 acquires VotingForum { - let proposal = get_proposal(voting_forum_address, proposal_id); - proposal.resolution_time_secs - } - - #[view] - /// Return true if the multi-step governance proposal is in execution. - public fun is_multi_step_proposal_in_execution( - voting_forum_address: address, - proposal_id: u64, - ): bool acquires VotingForum { - let voting_forum = borrow_global>(voting_forum_address); - let proposal = table::borrow(&voting_forum.proposals, proposal_id); - let is_multi_step_in_execution_key = utf8(IS_MULTI_STEP_PROPOSAL_IN_EXECUTION_KEY); - assert!( - simple_map::contains_key(&proposal.metadata, &is_multi_step_in_execution_key), - error::invalid_argument(EPROPOSAL_IS_SINGLE_STEP) - ); - from_bcs::to_bool(*simple_map::borrow(&proposal.metadata, &is_multi_step_in_execution_key)) - } - - /// Return true if the voting period of the given proposal has already ended. - fun is_voting_period_over(proposal: &Proposal): bool { - timestamp::now_seconds() > proposal.expiration_secs - } - - inline fun get_proposal( - voting_forum_address: address, - proposal_id: u64, - ): &Proposal acquires VotingForum { - let voting_forum = borrow_global>(voting_forum_address); - table::borrow(&voting_forum.proposals, proposal_id) - } - - #[test_only] - struct TestProposal has store {} - - #[test_only] - const VOTING_DURATION_SECS: u64 = 100000; - - #[test_only] - public fun create_test_proposal_generic( - governance: &signer, - early_resolution_threshold: Option, - use_generic_create_proposal_function: bool, - ): u64 acquires VotingForum { - // Register voting forum and create a proposal. - register(governance); - let governance_address = signer::address_of(governance); - let proposal = TestProposal {}; - - // This works because our Move unit test extensions mock out the execution hash to be [1]. - let execution_hash = vector::empty(); - vector::push_back(&mut execution_hash, 1); - let metadata = simple_map::create>(); - - if (use_generic_create_proposal_function) { - create_proposal_v2( - governance_address, - governance_address, - proposal, - execution_hash, - 10, - timestamp::now_seconds() + VOTING_DURATION_SECS, - early_resolution_threshold, - metadata, - use_generic_create_proposal_function - ) - } else { - create_proposal( - governance_address, - governance_address, - proposal, - execution_hash, - 10, - timestamp::now_seconds() + VOTING_DURATION_SECS, - early_resolution_threshold, - metadata, - ) - } - } - - #[test_only] - public fun resolve_proposal_for_test( - voting_forum_address: address, - proposal_id: u64, - is_multi_step: bool, - finish_multi_step_execution: bool - ) acquires VotingForum { - if (is_multi_step) { - let execution_hash = vector::empty(); - vector::push_back(&mut execution_hash, 1); - resolve_proposal_v2(voting_forum_address, proposal_id, execution_hash); - - if (finish_multi_step_execution) { - resolve_proposal_v2(voting_forum_address, proposal_id, vector::empty()); - }; - } else { - let proposal = resolve(voting_forum_address, proposal_id); - let TestProposal {} = proposal; - }; - } - - #[test_only] - public fun create_test_proposal( - governance: &signer, - early_resolution_threshold: Option, - ): u64 acquires VotingForum { - create_test_proposal_generic(governance, early_resolution_threshold, false) - } - - #[test_only] - public fun create_proposal_with_empty_execution_hash_should_fail_generic( - governance: &signer, - is_multi_step: bool - ) acquires VotingForum { - account::create_account_for_test(@aptos_framework); - let governance_address = signer::address_of(governance); - account::create_account_for_test(governance_address); - register(governance); - let proposal = TestProposal {}; - - // This should fail because execution hash is empty. - if (is_multi_step) { - create_proposal_v2( - governance_address, - governance_address, - proposal, - b"", - 10, - 100000, - option::none(), - simple_map::create>(), - is_multi_step - ); - } else { - create_proposal( - governance_address, - governance_address, - proposal, - b"", - 10, - 100000, - option::none(), - simple_map::create>(), - ); - }; - } - - #[test(governance = @0x123)] - #[expected_failure(abort_code = 0x10004, location = Self)] - public fun create_proposal_with_empty_execution_hash_should_fail(governance: &signer) acquires VotingForum { - create_proposal_with_empty_execution_hash_should_fail_generic(governance, false); - } - - #[test(governance = @0x123)] - #[expected_failure(abort_code = 0x10004, location = Self)] - public fun create_proposal_with_empty_execution_hash_should_fail_multi_step( - governance: &signer - ) acquires VotingForum { - create_proposal_with_empty_execution_hash_should_fail_generic(governance, true); - } - - #[test_only] - public entry fun test_voting_passed_generic( - aptos_framework: &signer, - governance: &signer, - use_create_multi_step: bool, - use_resolve_multi_step: bool - ) acquires VotingForum { - account::create_account_for_test(@aptos_framework); - timestamp::set_time_has_started_for_testing(aptos_framework); - - // Register voting forum and create a proposal. - let governance_address = signer::address_of(governance); - account::create_account_for_test(governance_address); - let proposal_id = create_test_proposal_generic(governance, option::none(), use_create_multi_step); - assert!(get_proposal_state(governance_address, proposal_id) == PROPOSAL_STATE_PENDING, 0); - - // Vote. - let proof = TestProposal {}; - vote(&proof, governance_address, proposal_id, 10, true); - let TestProposal {} = proof; - - // Resolve. - timestamp::fast_forward_seconds(VOTING_DURATION_SECS + 1); - assert!(get_proposal_state(governance_address, proposal_id) == PROPOSAL_STATE_SUCCEEDED, 1); - - // This if statement is specifically for the test `test_voting_passed_single_step_can_use_generic_function()`. - // It's testing when we have a single-step proposal that was created by the single-step `create_proposal()`, - // we should be able to successfully resolve it using the generic `resolve_proposal_v2` function. - if (!use_create_multi_step && use_resolve_multi_step) { - resolve_proposal_v2(governance_address, proposal_id, vector::empty()); - } else { - resolve_proposal_for_test(governance_address, proposal_id, use_resolve_multi_step, true); - }; - let voting_forum = borrow_global>(governance_address); - assert!(table::borrow(&voting_forum.proposals, proposal_id).is_resolved, 2); - } - - #[test(aptos_framework = @aptos_framework, governance = @0x123)] - public entry fun test_voting_passed(aptos_framework: &signer, governance: &signer) acquires VotingForum { - test_voting_passed_generic(aptos_framework, governance, false, false); - } - - #[test(aptos_framework = @aptos_framework, governance = @0x123)] - public entry fun test_voting_passed_multi_step(aptos_framework: &signer, governance: &signer) acquires VotingForum { - test_voting_passed_generic(aptos_framework, governance, true, true); - } - - #[test(aptos_framework = @aptos_framework, governance = @0x123)] - #[expected_failure(abort_code = 0x5000a, location = Self)] - public entry fun test_voting_passed_multi_step_cannot_use_single_step_resolve_function( - aptos_framework: &signer, - governance: &signer - ) acquires VotingForum { - test_voting_passed_generic(aptos_framework, governance, true, false); - } - - #[test(aptos_framework = @aptos_framework, governance = @0x123)] - public entry fun test_voting_passed_single_step_can_use_generic_function( - aptos_framework: &signer, - governance: &signer - ) acquires VotingForum { - test_voting_passed_generic(aptos_framework, governance, false, true); - } - - #[test_only] - public entry fun test_cannot_resolve_twice_generic( - aptos_framework: &signer, - governance: &signer, - is_multi_step: bool - ) acquires VotingForum { - account::create_account_for_test(@aptos_framework); - timestamp::set_time_has_started_for_testing(aptos_framework); - - // Register voting forum and create a proposal. - let governance_address = signer::address_of(governance); - account::create_account_for_test(governance_address); - let proposal_id = create_test_proposal_generic(governance, option::none(), is_multi_step); - assert!(get_proposal_state(governance_address, proposal_id) == PROPOSAL_STATE_PENDING, 0); - - // Vote. - let proof = TestProposal {}; - vote(&proof, governance_address, proposal_id, 10, true); - let TestProposal {} = proof; - - // Resolve. - timestamp::fast_forward_seconds(VOTING_DURATION_SECS + 1); - assert!(get_proposal_state(governance_address, proposal_id) == PROPOSAL_STATE_SUCCEEDED, 1); - resolve_proposal_for_test(governance_address, proposal_id, is_multi_step, true); - resolve_proposal_for_test(governance_address, proposal_id, is_multi_step, true); - } - - #[test(aptos_framework = @aptos_framework, governance = @0x123)] - #[expected_failure(abort_code = 0x30003, location = Self)] - public entry fun test_cannot_resolve_twice(aptos_framework: &signer, governance: &signer) acquires VotingForum { - test_cannot_resolve_twice_generic(aptos_framework, governance, false); - } - - #[test(aptos_framework = @aptos_framework, governance = @0x123)] - #[expected_failure(abort_code = 0x30003, location = Self)] - public entry fun test_cannot_resolve_twice_multi_step( - aptos_framework: &signer, - governance: &signer - ) acquires VotingForum { - test_cannot_resolve_twice_generic(aptos_framework, governance, true); - } - - #[test_only] - public entry fun test_voting_passed_early_generic( - aptos_framework: &signer, - governance: &signer, - is_multi_step: bool - ) acquires VotingForum { - account::create_account_for_test(@aptos_framework); - timestamp::set_time_has_started_for_testing(aptos_framework); - - // Register voting forum and create a proposal. - let governance_address = signer::address_of(governance); - account::create_account_for_test(governance_address); - let proposal_id = create_test_proposal_generic(governance, option::some(100), is_multi_step); - assert!(get_proposal_state(governance_address, proposal_id) == PROPOSAL_STATE_PENDING, 0); - - // Assert that IS_MULTI_STEP_PROPOSAL_IN_EXECUTION_KEY has value `false` in proposal.metadata. - if (is_multi_step) { - assert!(!is_multi_step_proposal_in_execution(governance_address, 0), 1); - }; - - // Vote. - let proof = TestProposal {}; - vote(&proof, governance_address, proposal_id, 100, true); - vote(&proof, governance_address, proposal_id, 10, false); - let TestProposal {} = proof; - - // Resolve early. Need to increase timestamp as resolution cannot happen in the same tx. - timestamp::fast_forward_seconds(1); - assert!(get_proposal_state(governance_address, proposal_id) == PROPOSAL_STATE_SUCCEEDED, 2); - - if (is_multi_step) { - // Assert that IS_MULTI_STEP_PROPOSAL_IN_EXECUTION_KEY still has value `false` in proposal.metadata before execution. - assert!(!is_multi_step_proposal_in_execution(governance_address, 0), 3); - resolve_proposal_for_test(governance_address, proposal_id, is_multi_step, false); - - // Assert that the multi-step proposal is in execution but not resolved yet. - assert!(is_multi_step_proposal_in_execution(governance_address, 0), 4); - let voting_forum = borrow_global_mut>(governance_address); - let proposal = table::borrow_mut(&mut voting_forum.proposals, proposal_id); - assert!(!proposal.is_resolved, 5); - }; - - resolve_proposal_for_test(governance_address, proposal_id, is_multi_step, true); - let voting_forum = borrow_global_mut>(governance_address); - assert!(table::borrow(&voting_forum.proposals, proposal_id).is_resolved, 6); - - // Assert that the IS_MULTI_STEP_PROPOSAL_IN_EXECUTION_KEY value is set back to `false` upon successful resolution of this multi-step proposal. - if (is_multi_step) { - assert!(!is_multi_step_proposal_in_execution(governance_address, 0), 7); - }; - } - - #[test(aptos_framework = @aptos_framework, governance = @0x123)] - public entry fun test_voting_passed_early(aptos_framework: &signer, governance: &signer) acquires VotingForum { - test_voting_passed_early_generic(aptos_framework, governance, false); - } - - #[test(aptos_framework = @aptos_framework, governance = @0x123)] - public entry fun test_voting_passed_early_multi_step( - aptos_framework: &signer, - governance: &signer - ) acquires VotingForum { - test_voting_passed_early_generic(aptos_framework, governance, true); - } - - #[test_only] - public entry fun test_voting_passed_early_in_same_tx_should_fail_generic( - aptos_framework: &signer, - governance: &signer, - is_multi_step: bool - ) acquires VotingForum { - account::create_account_for_test(@aptos_framework); - timestamp::set_time_has_started_for_testing(aptos_framework); - let governance_address = signer::address_of(governance); - account::create_account_for_test(governance_address); - let proposal_id = create_test_proposal_generic(governance, option::some(100), is_multi_step); - let proof = TestProposal {}; - vote(&proof, governance_address, proposal_id, 40, true); - vote(&proof, governance_address, proposal_id, 60, true); - let TestProposal {} = proof; - - // Resolving early should fail since timestamp hasn't changed since the last vote. - resolve_proposal_for_test(governance_address, proposal_id, is_multi_step, true); - } - - #[test(aptos_framework = @aptos_framework, governance = @0x123)] - #[expected_failure(abort_code = 0x30008, location = Self)] - public entry fun test_voting_passed_early_in_same_tx_should_fail( - aptos_framework: &signer, - governance: &signer - ) acquires VotingForum { - test_voting_passed_early_in_same_tx_should_fail_generic(aptos_framework, governance, false); - } - - #[test(aptos_framework = @aptos_framework, governance = @0x123)] - #[expected_failure(abort_code = 0x30008, location = Self)] - public entry fun test_voting_passed_early_in_same_tx_should_fail_multi_step( - aptos_framework: &signer, - governance: &signer - ) acquires VotingForum { - test_voting_passed_early_in_same_tx_should_fail_generic(aptos_framework, governance, true); - } - - #[test_only] - public entry fun test_voting_failed_generic( - aptos_framework: &signer, - governance: &signer, - is_multi_step: bool - ) acquires VotingForum { - account::create_account_for_test(@aptos_framework); - timestamp::set_time_has_started_for_testing(aptos_framework); - - // Register voting forum and create a proposal. - let governance_address = signer::address_of(governance); - account::create_account_for_test(governance_address); - let proposal_id = create_test_proposal_generic(governance, option::none(), is_multi_step); - - // Vote. - let proof = TestProposal {}; - vote(&proof, governance_address, proposal_id, 10, true); - vote(&proof, governance_address, proposal_id, 100, false); - let TestProposal {} = proof; - - // Resolve. - timestamp::fast_forward_seconds(VOTING_DURATION_SECS + 1); - assert!(get_proposal_state(governance_address, proposal_id) == PROPOSAL_STATE_FAILED, 1); - resolve_proposal_for_test(governance_address, proposal_id, is_multi_step, true); - } - - #[test(aptos_framework = @aptos_framework, governance = @0x123)] - #[expected_failure(abort_code = 0x30002, location = Self)] - public entry fun test_voting_failed(aptos_framework: &signer, governance: &signer) acquires VotingForum { - test_voting_failed_generic(aptos_framework, governance, false); - } - - #[test(aptos_framework = @aptos_framework, governance = @0x123)] - #[expected_failure(abort_code = 0x30002, location = Self)] - public entry fun test_voting_failed_multi_step(aptos_framework: &signer, governance: &signer) acquires VotingForum { - test_voting_failed_generic(aptos_framework, governance, true); - } - - #[test(aptos_framework = @aptos_framework, governance = @0x123)] - #[expected_failure(abort_code = 0x30005, location = Self)] - public entry fun test_cannot_vote_after_voting_period_is_over( - aptos_framework: signer, - governance: signer - ) acquires VotingForum { - account::create_account_for_test(@aptos_framework); - timestamp::set_time_has_started_for_testing(&aptos_framework); - let governance_address = signer::address_of(&governance); - account::create_account_for_test(governance_address); - let proposal_id = create_test_proposal(&governance, option::none()); - // Voting period is over. Voting should now fail. - timestamp::fast_forward_seconds(VOTING_DURATION_SECS + 1); - let proof = TestProposal {}; - vote(&proof, governance_address, proposal_id, 10, true); - let TestProposal {} = proof; - } - - #[test(aptos_framework = @aptos_framework, governance = @0x123)] - #[expected_failure(abort_code = 0x30009, location = Self)] - public entry fun test_cannot_vote_after_multi_step_proposal_starts_executing( - aptos_framework: signer, - governance: signer - ) acquires VotingForum { - account::create_account_for_test(@aptos_framework); - timestamp::set_time_has_started_for_testing(&aptos_framework); - - // Register voting forum and create a proposal. - let governance_address = signer::address_of(&governance); - account::create_account_for_test(governance_address); - let proposal_id = create_test_proposal_generic(&governance, option::some(100), true); - assert!(get_proposal_state(governance_address, proposal_id) == PROPOSAL_STATE_PENDING, 0); - - // Vote. - let proof = TestProposal {}; - vote(&proof, governance_address, proposal_id, 100, true); - - // Resolve early. - timestamp::fast_forward_seconds(1); - assert!(get_proposal_state(governance_address, proposal_id) == PROPOSAL_STATE_SUCCEEDED, 1); - resolve_proposal_for_test(governance_address, proposal_id, true, false); - vote(&proof, governance_address, proposal_id, 100, false); - let TestProposal {} = proof; - } - - #[test_only] - public entry fun test_voting_failed_early_generic( - aptos_framework: &signer, - governance: &signer, - is_multi_step: bool - ) acquires VotingForum { - account::create_account_for_test(@aptos_framework); - timestamp::set_time_has_started_for_testing(aptos_framework); - - // Register voting forum and create a proposal. - let governance_address = signer::address_of(governance); - account::create_account_for_test(governance_address); - let proposal_id = create_test_proposal_generic(governance, option::some(100), is_multi_step); - - // Vote. - let proof = TestProposal {}; - vote(&proof, governance_address, proposal_id, 100, true); - vote(&proof, governance_address, proposal_id, 100, false); - let TestProposal {} = proof; - - // Resolve. - timestamp::fast_forward_seconds(VOTING_DURATION_SECS + 1); - assert!(get_proposal_state(governance_address, proposal_id) == PROPOSAL_STATE_FAILED, 1); - resolve_proposal_for_test(governance_address, proposal_id, is_multi_step, true); - } - - #[test(aptos_framework = @aptos_framework, governance = @0x123)] - #[expected_failure(abort_code = 0x30002, location = Self)] - public entry fun test_voting_failed_early(aptos_framework: &signer, governance: &signer) acquires VotingForum { - test_voting_failed_early_generic(aptos_framework, governance, true); - } - - #[test(aptos_framework = @aptos_framework, governance = @0x123)] - #[expected_failure(abort_code = 0x30002, location = Self)] - public entry fun test_voting_failed_early_multi_step( - aptos_framework: &signer, - governance: &signer - ) acquires VotingForum { - test_voting_failed_early_generic(aptos_framework, governance, false); - } - - #[test_only] - public entry fun test_cannot_set_min_threshold_higher_than_early_resolution_generic( - aptos_framework: &signer, - governance: &signer, - is_multi_step: bool, - ) acquires VotingForum { - account::create_account_for_test(@aptos_framework); - timestamp::set_time_has_started_for_testing(aptos_framework); - account::create_account_for_test(signer::address_of(governance)); - // This should fail. - create_test_proposal_generic(governance, option::some(5), is_multi_step); - } - - #[test(aptos_framework = @aptos_framework, governance = @0x123)] - #[expected_failure(abort_code = 0x10007, location = Self)] - public entry fun test_cannot_set_min_threshold_higher_than_early_resolution( - aptos_framework: &signer, - governance: &signer, - ) acquires VotingForum { - test_cannot_set_min_threshold_higher_than_early_resolution_generic(aptos_framework, governance, false); - } - - #[test(aptos_framework = @aptos_framework, governance = @0x123)] - #[expected_failure(abort_code = 0x10007, location = Self)] - public entry fun test_cannot_set_min_threshold_higher_than_early_resolution_multi_step( - aptos_framework: &signer, - governance: &signer, - ) acquires VotingForum { - test_cannot_set_min_threshold_higher_than_early_resolution_generic(aptos_framework, governance, true); - } - - #[test(aptos_framework = @aptos_framework, governance = @0x123)] - public entry fun test_replace_execution_hash(aptos_framework: &signer, governance: &signer) acquires VotingForum { - account::create_account_for_test(@aptos_framework); - timestamp::set_time_has_started_for_testing(aptos_framework); - - // Register voting forum and create a proposal. - let governance_address = signer::address_of(governance); - account::create_account_for_test(governance_address); - let proposal_id = create_test_proposal_generic(governance, option::none(), true); - assert!(get_proposal_state(governance_address, proposal_id) == PROPOSAL_STATE_PENDING, 0); - - // Vote. - let proof = TestProposal {}; - vote(&proof, governance_address, proposal_id, 10, true); - let TestProposal {} = proof; - - // Resolve. - timestamp::fast_forward_seconds(VOTING_DURATION_SECS + 1); - assert!(get_proposal_state(governance_address, proposal_id) == PROPOSAL_STATE_SUCCEEDED, 1); - - resolve_proposal_v2(governance_address, proposal_id, vector[10u8]); - let voting_forum = borrow_global>(governance_address); - let proposal = table::borrow(&voting_forum.proposals, 0); - assert!(proposal.execution_hash == vector[10u8], 2); - assert!(!table::borrow(&voting_forum.proposals, proposal_id).is_resolved, 3); - } -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/AptosStdlib/any.move b/examples/oft-movement/build/oft/sources/dependencies/AptosStdlib/any.move deleted file mode 100644 index 480ff2460..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/AptosStdlib/any.move +++ /dev/null @@ -1,57 +0,0 @@ -module aptos_std::any { - use aptos_std::type_info; - use aptos_std::from_bcs::from_bytes; - use std::bcs::to_bytes; - use std::error; - use std::string::String; - - friend aptos_std::copyable_any; - - /// The type provided for `unpack` is not the same as was given for `pack`. - const ETYPE_MISMATCH: u64 = 1; - - /// A type which can represent a value of any type. This allows for representation of 'unknown' future - /// values. For example, to define a resource such that it can be later be extended without breaking - /// changes one can do - /// - /// ```move - /// struct Resource { - /// field: Type, - /// ... - /// extension: Option - /// } - /// ``` - struct Any has drop, store { - type_name: String, - data: vector - } - - /// Pack a value into the `Any` representation. Because Any can be stored and dropped, this is - /// also required from `T`. - public fun pack(x: T): Any { - Any { - type_name: type_info::type_name(), - data: to_bytes(&x) - } - } - - /// Unpack a value from the `Any` representation. This aborts if the value has not the expected type `T`. - public fun unpack(self: Any): T { - assert!(type_info::type_name() == self.type_name, error::invalid_argument(ETYPE_MISMATCH)); - from_bytes(self.data) - } - - /// Returns the type name of this Any - public fun type_name(self: &Any): &String { - &self.type_name - } - - #[test_only] - struct S has store, drop { x: u64 } - - #[test] - fun test_any() { - assert!(unpack(pack(22)) == 22, 1); - assert!(unpack(pack(S { x: 22 })) == S { x: 22 }, 2); - } -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/AptosStdlib/aptos_hash.move b/examples/oft-movement/build/oft/sources/dependencies/AptosStdlib/aptos_hash.move deleted file mode 100644 index 532fa736e..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/AptosStdlib/aptos_hash.move +++ /dev/null @@ -1,253 +0,0 @@ -/// Cryptographic hashes: -/// - Keccak-256: see https://keccak.team/keccak.html -/// -/// In addition, SHA2-256 and SHA3-256 are available in `std::hash`. Note that SHA3-256 is a variant of Keccak: it is -/// NOT the same as Keccak-256. -/// -/// Non-cryptograhic hashes: -/// - SipHash: an add-rotate-xor (ARX) based family of pseudorandom functions created by Jean-Philippe Aumasson and Daniel J. Bernstein in 2012 -module aptos_std::aptos_hash { - use std::bcs; - use std::features; - - // - // Constants - // - - /// A newly-added native function is not yet enabled. - const E_NATIVE_FUN_NOT_AVAILABLE: u64 = 1; - - // - // Functions - // - - /// Returns the (non-cryptographic) SipHash of `bytes`. See https://en.wikipedia.org/wiki/SipHash - native public fun sip_hash(bytes: vector): u64; - - /// Returns the (non-cryptographic) SipHash of the BCS serialization of `v`. See https://en.wikipedia.org/wiki/SipHash - public fun sip_hash_from_value(v: &MoveValue): u64 { - let bytes = bcs::to_bytes(v); - - sip_hash(bytes) - } - - /// Returns the Keccak-256 hash of `bytes`. - native public fun keccak256(bytes: vector): vector; - - /// Returns the SHA2-512 hash of `bytes`. - public fun sha2_512(bytes: vector): vector { - if(!features::sha_512_and_ripemd_160_enabled()) { - abort(std::error::invalid_state(E_NATIVE_FUN_NOT_AVAILABLE)) - }; - - sha2_512_internal(bytes) - } - - /// Returns the SHA3-512 hash of `bytes`. - public fun sha3_512(bytes: vector): vector { - if(!features::sha_512_and_ripemd_160_enabled()) { - abort(std::error::invalid_state(E_NATIVE_FUN_NOT_AVAILABLE)) - }; - - sha3_512_internal(bytes) - } - - - /// Returns the RIPEMD-160 hash of `bytes`. - /// - /// WARNING: Only 80-bit security is provided by this function. This means an adversary who can compute roughly 2^80 - /// hashes will, with high probability, find a collision x_1 != x_2 such that RIPEMD-160(x_1) = RIPEMD-160(x_2). - public fun ripemd160(bytes: vector): vector { - if(!features::sha_512_and_ripemd_160_enabled()) { - abort(std::error::invalid_state(E_NATIVE_FUN_NOT_AVAILABLE)) - }; - - ripemd160_internal(bytes) - } - - /// Returns the BLAKE2B-256 hash of `bytes`. - public fun blake2b_256(bytes: vector): vector { - if(!features::blake2b_256_enabled()) { - abort(std::error::invalid_state(E_NATIVE_FUN_NOT_AVAILABLE)) - }; - - blake2b_256_internal(bytes) - } - - // - // Private native functions - // - - /// Returns the SHA2-512 hash of `bytes`. - native fun sha2_512_internal(bytes: vector): vector; - - - /// Returns the SHA3-512 hash of `bytes`. - native fun sha3_512_internal(bytes: vector): vector; - - /// Returns the RIPEMD-160 hash of `bytes`. - /// - /// WARNING: Only 80-bit security is provided by this function. This means an adversary who can compute roughly 2^80 - /// hashes will, with high probability, find a collision x_1 != x_2 such that RIPEMD-160(x_1) = RIPEMD-160(x_2). - native fun ripemd160_internal(bytes: vector): vector; - - /// Returns the BLAKE2B-256 hash of `bytes`. - native fun blake2b_256_internal(bytes: vector): vector; - - // - // Testing - // - - #[test] - fun keccak256_test() { - let inputs = vector[ - b"testing", - b"", - ]; - - let outputs = vector[ - x"5f16f4c7f149ac4f9510d9cf8cf384038ad348b3bcdc01915f95de12df9d1b02", - x"c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", - ]; - - let i = 0; - while (i < std::vector::length(&inputs)) { - let input = *std::vector::borrow(&inputs, i); - let hash_expected = *std::vector::borrow(&outputs, i); - let hash = keccak256(input); - - assert!(hash_expected == hash, 1); - - i = i + 1; - }; - } - - #[test(fx = @aptos_std)] - fun sha2_512_test(fx: signer) { - // We need to enable the feature in order for the native call to be allowed. - features::change_feature_flags_for_testing(&fx, vector[features::get_sha_512_and_ripemd_160_feature()], vector[]); - - let inputs = vector[ - b"testing", - b"", - ]; - - // From https://emn178.github.io/online-tools/sha512.html - let outputs = vector[ - x"521b9ccefbcd14d179e7a1bb877752870a6d620938b28a66a107eac6e6805b9d0989f45b5730508041aa5e710847d439ea74cd312c9355f1f2dae08d40e41d50", - x"cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e", - ]; - - let i = 0; - while (i < std::vector::length(&inputs)) { - let input = *std::vector::borrow(&inputs, i); - let hash_expected = *std::vector::borrow(&outputs, i); - let hash = sha2_512(input); - - assert!(hash_expected == hash, 1); - - i = i + 1; - }; - } - - #[test(fx = @aptos_std)] - fun sha3_512_test(fx: signer) { - // We need to enable the feature in order for the native call to be allowed. - features::change_feature_flags_for_testing(&fx, vector[features::get_sha_512_and_ripemd_160_feature()], vector[]); - let inputs = vector[ - b"testing", - b"", - ]; - - // From https://emn178.github.io/online-tools/sha3_512.html - let outputs = vector[ - x"881c7d6ba98678bcd96e253086c4048c3ea15306d0d13ff48341c6285ee71102a47b6f16e20e4d65c0c3d677be689dfda6d326695609cbadfafa1800e9eb7fc1", - x"a69f73cca23a9ac5c8b567dc185a756e97c982164fe25859e0d1dcc1475c80a615b2123af1f5f94c11e3e9402c3ac558f500199d95b6d3e301758586281dcd26", - ]; - - let i = 0; - while (i < std::vector::length(&inputs)) { - let input = *std::vector::borrow(&inputs, i); - let hash_expected = *std::vector::borrow(&outputs, i); - let hash = sha3_512(input); - - assert!(hash_expected == hash, 1); - - i = i + 1; - }; - } - - #[test(fx = @aptos_std)] - fun ripemd160_test(fx: signer) { - // We need to enable the feature in order for the native call to be allowed. - features::change_feature_flags_for_testing(&fx, vector[features::get_sha_512_and_ripemd_160_feature()], vector[]); - let inputs = vector[ - b"testing", - b"", - ]; - - // From https://www.browserling.com/tools/ripemd160-hash - let outputs = vector[ - x"b89ba156b40bed29a5965684b7d244c49a3a769b", - x"9c1185a5c5e9fc54612808977ee8f548b2258d31", - ]; - - let i = 0; - while (i < std::vector::length(&inputs)) { - let input = *std::vector::borrow(&inputs, i); - let hash_expected = *std::vector::borrow(&outputs, i); - let hash = ripemd160(input); - - assert!(hash_expected == hash, 1); - - i = i + 1; - }; - } - - #[test(fx = @aptos_std)] - #[expected_failure(abort_code = 196609, location = Self)] - fun blake2b_256_aborts(fx: signer) { - // We disable the feature to make sure the `blake2b_256` call aborts - features::change_feature_flags_for_testing(&fx, vector[], vector[features::get_blake2b_256_feature()]); - - blake2b_256(b"This will abort"); - } - - #[test(fx = @aptos_std)] - fun blake2b_256_test(fx: signer) { - // We need to enable the feature in order for the native call to be allowed. - features::change_feature_flags_for_testing(&fx, vector[features::get_blake2b_256_feature()], vector[]); - let inputs = vector[ - b"", - b"testing", - b"testing again", // empty message doesn't yield an output on the online generator - ]; - - // From https://www.toolkitbay.com/tkb/tool/BLAKE2b_256 - // - // For computing the hash of an empty string, we use the following Python3 script: - // ``` - // #!/usr/bin/python3 - // - // import hashlib - // - // print(hashlib.blake2b(b'', digest_size=32).hexdigest()); - // ``` - let outputs = vector[ - x"0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a8", - x"99397ff32ae348b8b6536d5c213f343d7e9fdeaa10e8a23a9f90ab21a1658565", - x"1deab5a4eb7481453ca9b29e1f7c4be8ba44de4faeeafdf173b310cbaecfc84c", - ]; - - let i = 0; - while (i < std::vector::length(&inputs)) { - let input = *std::vector::borrow(&inputs, i); - let hash_expected = *std::vector::borrow(&outputs, i); - let hash = blake2b_256(input); - - assert!(hash_expected == hash, 1); - - i = i + 1; - }; - } -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/AptosStdlib/big_vector.move b/examples/oft-movement/build/oft/sources/dependencies/AptosStdlib/big_vector.move deleted file mode 100644 index ce381e9e0..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/AptosStdlib/big_vector.move +++ /dev/null @@ -1,469 +0,0 @@ -module aptos_std::big_vector { - use std::error; - use std::vector; - use aptos_std::table_with_length::{Self, TableWithLength}; - friend aptos_std::smart_vector; - - /// Vector index is out of bounds - const EINDEX_OUT_OF_BOUNDS: u64 = 1; - /// Cannot destroy a non-empty vector - const EVECTOR_NOT_EMPTY: u64 = 2; - /// Cannot pop back from an empty vector - const EVECTOR_EMPTY: u64 = 3; - /// bucket_size cannot be 0 - const EZERO_BUCKET_SIZE: u64 = 4; - - /// A scalable vector implementation based on tables where elements are grouped into buckets. - /// Each bucket has a capacity of `bucket_size` elements. - struct BigVector has store { - buckets: TableWithLength>, - end_index: u64, - bucket_size: u64 - } - - /// Regular Vector API - - /// Create an empty vector. - public(friend) fun empty(bucket_size: u64): BigVector { - assert!(bucket_size > 0, error::invalid_argument(EZERO_BUCKET_SIZE)); - BigVector { - buckets: table_with_length::new(), - end_index: 0, - bucket_size, - } - } - - /// Create a vector of length 1 containing the passed in element. - public(friend) fun singleton(element: T, bucket_size: u64): BigVector { - let v = empty(bucket_size); - push_back(&mut v, element); - v - } - - /// Destroy the vector `self`. - /// Aborts if `self` is not empty. - public fun destroy_empty(self: BigVector) { - assert!(is_empty(&self), error::invalid_argument(EVECTOR_NOT_EMPTY)); - let BigVector { buckets, end_index: _, bucket_size: _ } = self; - table_with_length::destroy_empty(buckets); - } - - /// Destroy the vector `self` if T has `drop` - public fun destroy(self: BigVector) { - let BigVector { buckets, end_index, bucket_size: _ } = self; - let i = 0; - while (end_index > 0) { - let num_elements = vector::length(&table_with_length::remove(&mut buckets, i)); - end_index = end_index - num_elements; - i = i + 1; - }; - table_with_length::destroy_empty(buckets); - } - - /// Acquire an immutable reference to the `i`th element of the vector `self`. - /// Aborts if `i` is out of bounds. - public fun borrow(self: &BigVector, i: u64): &T { - assert!(i < length(self), error::invalid_argument(EINDEX_OUT_OF_BOUNDS)); - vector::borrow(table_with_length::borrow(&self.buckets, i / self.bucket_size), i % self.bucket_size) - } - - /// Return a mutable reference to the `i`th element in the vector `self`. - /// Aborts if `i` is out of bounds. - public fun borrow_mut(self: &mut BigVector, i: u64): &mut T { - assert!(i < length(self), error::invalid_argument(EINDEX_OUT_OF_BOUNDS)); - vector::borrow_mut(table_with_length::borrow_mut(&mut self.buckets, i / self.bucket_size), i % self.bucket_size) - } - - /// Empty and destroy the other vector, and push each of the elements in the other vector onto the self vector in the - /// same order as they occurred in other. - /// Disclaimer: This function is costly. Use it at your own discretion. - public fun append(self: &mut BigVector, other: BigVector) { - let other_len = length(&other); - let half_other_len = other_len / 2; - let i = 0; - while (i < half_other_len) { - push_back(self, swap_remove(&mut other, i)); - i = i + 1; - }; - while (i < other_len) { - push_back(self, pop_back(&mut other)); - i = i + 1; - }; - destroy_empty(other); - } - - /// Add element `val` to the end of the vector `self`. It grows the buckets when the current buckets are full. - /// This operation will cost more gas when it adds new bucket. - public fun push_back(self: &mut BigVector, val: T) { - let num_buckets = table_with_length::length(&self.buckets); - if (self.end_index == num_buckets * self.bucket_size) { - table_with_length::add(&mut self.buckets, num_buckets, vector::empty()); - vector::push_back(table_with_length::borrow_mut(&mut self.buckets, num_buckets), val); - } else { - vector::push_back(table_with_length::borrow_mut(&mut self.buckets, num_buckets - 1), val); - }; - self.end_index = self.end_index + 1; - } - - /// Pop an element from the end of vector `self`. It doesn't shrink the buckets even if they're empty. - /// Call `shrink_to_fit` explicity to deallocate empty buckets. - /// Aborts if `self` is empty. - public fun pop_back(self: &mut BigVector): T { - assert!(!is_empty(self), error::invalid_state(EVECTOR_EMPTY)); - let num_buckets = table_with_length::length(&self.buckets); - let last_bucket = table_with_length::borrow_mut(&mut self.buckets, num_buckets - 1); - let val = vector::pop_back(last_bucket); - // Shrink the table if the last vector is empty. - if (vector::is_empty(last_bucket)) { - move last_bucket; - vector::destroy_empty(table_with_length::remove(&mut self.buckets, num_buckets - 1)); - }; - self.end_index = self.end_index - 1; - val - } - - /// Remove the element at index i in the vector v and return the owned value that was previously stored at i in self. - /// All elements occurring at indices greater than i will be shifted down by 1. Will abort if i is out of bounds. - /// Disclaimer: This function is costly. Use it at your own discretion. - public fun remove(self: &mut BigVector, i: u64): T { - let len = length(self); - assert!(i < len, error::invalid_argument(EINDEX_OUT_OF_BOUNDS)); - let num_buckets = table_with_length::length(&self.buckets); - let cur_bucket_index = i / self.bucket_size + 1; - let cur_bucket = table_with_length::borrow_mut(&mut self.buckets, cur_bucket_index - 1); - let res = vector::remove(cur_bucket, i % self.bucket_size); - self.end_index = self.end_index - 1; - move cur_bucket; - while ({ - spec { - invariant cur_bucket_index <= num_buckets; - invariant table_with_length::spec_len(self.buckets) == num_buckets; - }; - (cur_bucket_index < num_buckets) - }) { - // remove one element from the start of current vector - let cur_bucket = table_with_length::borrow_mut(&mut self.buckets, cur_bucket_index); - let t = vector::remove(cur_bucket, 0); - move cur_bucket; - // and put it at the end of the last one - let prev_bucket = table_with_length::borrow_mut(&mut self.buckets, cur_bucket_index - 1); - vector::push_back(prev_bucket, t); - cur_bucket_index = cur_bucket_index + 1; - }; - spec { - assert cur_bucket_index == num_buckets; - }; - - // Shrink the table if the last vector is empty. - let last_bucket = table_with_length::borrow_mut(&mut self.buckets, num_buckets - 1); - if (vector::is_empty(last_bucket)) { - move last_bucket; - vector::destroy_empty(table_with_length::remove(&mut self.buckets, num_buckets - 1)); - }; - - res - } - - /// Swap the `i`th element of the vector `self` with the last element and then pop the vector. - /// This is O(1), but does not preserve ordering of elements in the vector. - /// Aborts if `i` is out of bounds. - public fun swap_remove(self: &mut BigVector, i: u64): T { - assert!(i < length(self), error::invalid_argument(EINDEX_OUT_OF_BOUNDS)); - let last_val = pop_back(self); - // if the requested value is the last one, return it - if (self.end_index == i) { - return last_val - }; - // because the lack of mem::swap, here we swap remove the requested value from the bucket - // and append the last_val to the bucket then swap the last bucket val back - let bucket = table_with_length::borrow_mut(&mut self.buckets, i / self.bucket_size); - let bucket_len = vector::length(bucket); - let val = vector::swap_remove(bucket, i % self.bucket_size); - vector::push_back(bucket, last_val); - vector::swap(bucket, i % self.bucket_size, bucket_len - 1); - val - } - - /// Swap the elements at the i'th and j'th indices in the vector self. Will abort if either of i or j are out of bounds - /// for self. - public fun swap(self: &mut BigVector, i: u64, j: u64) { - assert!(i < length(self) && j < length(self), error::invalid_argument(EINDEX_OUT_OF_BOUNDS)); - let i_bucket_index = i / self.bucket_size; - let j_bucket_index = j / self.bucket_size; - let i_vector_index = i % self.bucket_size; - let j_vector_index = j % self.bucket_size; - if (i_bucket_index == j_bucket_index) { - vector::swap(table_with_length::borrow_mut(&mut self.buckets, i_bucket_index), i_vector_index, j_vector_index); - return - }; - // If i and j are in different buckets, take the buckets out first for easy mutation. - let bucket_i = table_with_length::remove(&mut self.buckets, i_bucket_index); - let bucket_j = table_with_length::remove(&mut self.buckets, j_bucket_index); - // Get the elements from buckets by calling `swap_remove`. - let element_i = vector::swap_remove(&mut bucket_i, i_vector_index); - let element_j = vector::swap_remove(&mut bucket_j, j_vector_index); - // Swap the elements and push back to the other bucket. - vector::push_back(&mut bucket_i, element_j); - vector::push_back(&mut bucket_j, element_i); - let last_index_in_bucket_i = vector::length(&bucket_i) - 1; - let last_index_in_bucket_j = vector::length(&bucket_j) - 1; - // Re-position the swapped elements to the right index. - vector::swap(&mut bucket_i, i_vector_index, last_index_in_bucket_i); - vector::swap(&mut bucket_j, j_vector_index, last_index_in_bucket_j); - // Add back the buckets. - table_with_length::add(&mut self.buckets, i_bucket_index, bucket_i); - table_with_length::add(&mut self.buckets, j_bucket_index, bucket_j); - } - - /// Reverse the order of the elements in the vector self in-place. - /// Disclaimer: This function is costly. Use it at your own discretion. - public fun reverse(self: &mut BigVector) { - let new_buckets = vector[]; - let push_bucket = vector[]; - let num_buckets = table_with_length::length(&self.buckets); - let num_buckets_left = num_buckets; - - while (num_buckets_left > 0) { - let pop_bucket = table_with_length::remove(&mut self.buckets, num_buckets_left - 1); - vector::for_each_reverse(pop_bucket, |val| { - vector::push_back(&mut push_bucket, val); - if (vector::length(&push_bucket) == self.bucket_size) { - vector::push_back(&mut new_buckets, push_bucket); - push_bucket = vector[]; - }; - }); - num_buckets_left = num_buckets_left - 1; - }; - - if (vector::length(&push_bucket) > 0) { - vector::push_back(&mut new_buckets, push_bucket); - } else { - vector::destroy_empty(push_bucket); - }; - - vector::reverse(&mut new_buckets); - let i = 0; - assert!(table_with_length::length(&self.buckets) == 0, 0); - while (i < num_buckets) { - table_with_length::add(&mut self.buckets, i, vector::pop_back(&mut new_buckets)); - i = i + 1; - }; - vector::destroy_empty(new_buckets); - } - - /// Return the index of the first occurrence of an element in self that is equal to e. Returns (true, index) if such an - /// element was found, and (false, 0) otherwise. - /// Disclaimer: This function is costly. Use it at your own discretion. - public fun index_of(self: &BigVector, val: &T): (bool, u64) { - let num_buckets = table_with_length::length(&self.buckets); - let bucket_index = 0; - while (bucket_index < num_buckets) { - let cur = table_with_length::borrow(&self.buckets, bucket_index); - let (found, i) = vector::index_of(cur, val); - if (found) { - return (true, bucket_index * self.bucket_size + i) - }; - bucket_index = bucket_index + 1; - }; - (false, 0) - } - - /// Return if an element equal to e exists in the vector self. - /// Disclaimer: This function is costly. Use it at your own discretion. - public fun contains(self: &BigVector, val: &T): bool { - if (is_empty(self)) return false; - let (exist, _) = index_of(self, val); - exist - } - - /// Convert a big vector to a native vector, which is supposed to be called mostly by view functions to get an - /// atomic view of the whole vector. - /// Disclaimer: This function may be costly as the big vector may be huge in size. Use it at your own discretion. - public fun to_vector(self: &BigVector): vector { - let res = vector[]; - let num_buckets = table_with_length::length(&self.buckets); - let i = 0; - while (i < num_buckets) { - vector::append(&mut res, *table_with_length::borrow(&self.buckets, i)); - i = i + 1; - }; - res - } - - /// Return the length of the vector. - public fun length(self: &BigVector): u64 { - self.end_index - } - - /// Return `true` if the vector `v` has no elements and `false` otherwise. - public fun is_empty(self: &BigVector): bool { - length(self) == 0 - } - - #[test] - fun big_vector_test() { - let v = empty(5); - let i = 0; - while (i < 100) { - push_back(&mut v, i); - i = i + 1; - }; - let j = 0; - while (j < 100) { - let val = borrow(&v, j); - assert!(*val == j, 0); - j = j + 1; - }; - while (i > 0) { - i = i - 1; - let (exist, index) = index_of(&v, &i); - let j = pop_back(&mut v); - assert!(exist, 0); - assert!(index == i, 0); - assert!(j == i, 0); - }; - while (i < 100) { - push_back(&mut v, i); - i = i + 1; - }; - let last_index = length(&v) - 1; - assert!(swap_remove(&mut v, last_index) == 99, 0); - assert!(swap_remove(&mut v, 0) == 0, 0); - while (length(&v) > 0) { - // the vector is always [N, 1, 2, ... N-1] with repetitive swap_remove(&mut v, 0) - let expected = length(&v); - let val = swap_remove(&mut v, 0); - assert!(val == expected, 0); - }; - destroy_empty(v); - } - - #[test] - fun big_vector_append_edge_case_test() { - let v1 = empty(5); - let v2 = singleton(1u64, 7); - let v3 = empty(6); - let v4 = empty(8); - append(&mut v3, v4); - assert!(length(&v3) == 0, 0); - append(&mut v2, v3); - assert!(length(&v2) == 1, 0); - append(&mut v1, v2); - assert!(length(&v1) == 1, 0); - destroy(v1); - } - - #[test] - fun big_vector_append_test() { - let v1 = empty(5); - let v2 = empty(7); - let i = 0; - while (i < 7) { - push_back(&mut v1, i); - i = i + 1; - }; - while (i < 25) { - push_back(&mut v2, i); - i = i + 1; - }; - append(&mut v1, v2); - assert!(length(&v1) == 25, 0); - i = 0; - while (i < 25) { - assert!(*borrow(&v1, i) == i, 0); - i = i + 1; - }; - destroy(v1); - } - - #[test] - fun big_vector_to_vector_test() { - let v1 = empty(7); - let i = 0; - while (i < 100) { - push_back(&mut v1, i); - i = i + 1; - }; - let v2 = to_vector(&v1); - let j = 0; - while (j < 100) { - assert!(*vector::borrow(&v2, j) == j, 0); - j = j + 1; - }; - destroy(v1); - } - - #[test] - fun big_vector_remove_and_reverse_test() { - let v = empty(11); - let i = 0; - while (i < 101) { - push_back(&mut v, i); - i = i + 1; - }; - remove(&mut v, 100); - remove(&mut v, 90); - remove(&mut v, 80); - remove(&mut v, 70); - remove(&mut v, 60); - remove(&mut v, 50); - remove(&mut v, 40); - remove(&mut v, 30); - remove(&mut v, 20); - remove(&mut v, 10); - remove(&mut v, 0); - assert!(length(&v) == 90, 0); - - let index = 0; - i = 0; - while (i < 101) { - if (i % 10 != 0) { - assert!(*borrow(&v, index) == i, 0); - index = index + 1; - }; - i = i + 1; - }; - destroy(v); - } - - #[test] - fun big_vector_swap_test() { - let v = empty(11); - let i = 0; - while (i < 101) { - push_back(&mut v, i); - i = i + 1; - }; - i = 0; - while (i < 51) { - swap(&mut v, i, 100 - i); - i = i + 1; - }; - i = 0; - while (i < 101) { - assert!(*borrow(&v, i) == 100 - i, 0); - i = i + 1; - }; - destroy(v); - } - - #[test] - fun big_vector_index_of_test() { - let v = empty(11); - let i = 0; - while (i < 100) { - push_back(&mut v, i); - let (found, idx) = index_of(&mut v, &i); - assert!(found && idx == i, 0); - i = i + 1; - }; - destroy(v); - } - - #[test] - fun big_vector_empty_contains() { - let v = empty(10); - assert!(!contains(&v, &(1 as u64)), 0); - destroy_empty(v); - } -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/AptosStdlib/bls12381.move b/examples/oft-movement/build/oft/sources/dependencies/AptosStdlib/bls12381.move deleted file mode 100644 index de7d05ad8..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/AptosStdlib/bls12381.move +++ /dev/null @@ -1,985 +0,0 @@ -/// Contains functions for: -/// -/// The minimum-pubkey-size variant of [Boneh-Lynn-Shacham (BLS) signatures](https://en.wikipedia.org/wiki/BLS_digital_signature), -/// where public keys are BLS12-381 elliptic-curve points in $\mathbb{G}_1$ and signatures are in $\mathbb{G}_2$, -/// as per the [IETF BLS draft standard](https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-bls-signature#section-2.1). - -module aptos_std::bls12381 { - use std::option::{Self, Option}; - #[test_only] - use std::error::invalid_argument; - - /// The signature size, in bytes - const SIGNATURE_SIZE: u64 = 96; - - /// The public key size, in bytes - const PUBLIC_KEY_NUM_BYTES: u64 = 48; - - /// The caller was supposed to input one or more public keys. - const EZERO_PUBKEYS: u64 = 1; - - /// One of the given inputs has the wrong size.s - const EWRONG_SIZE: u64 = 2; - - /// The number of signers does not match the number of messages to be signed. - const E_NUM_SIGNERS_MUST_EQ_NUM_MESSAGES: u64 = 3; - - // TODO: Performance would increase if structs in this module are implemented natively via handles (similar to Table and - // RistrettoPoint). This will avoid unnecessary (de)serialization. We would need to allow storage of these structs too. - - #[test_only] - struct SecretKey has copy, drop { - bytes: vector, - } - - /// A *validated* public key that: - /// (1) is a point in the prime-order subgroup of the BLS12-381 elliptic curve, and - /// (2) is not the identity point - /// - /// This struct can be used to verify a normal (non-aggregated) signature. - /// - /// This struct can be combined with a ProofOfPossession struct in order to create a PublicKeyWithPop struct, which - /// can be used to verify a multisignature. - struct PublicKey has copy, drop, store { - bytes: vector - } - - /// A proof-of-possession (PoP). - /// Given such a struct and a PublicKey struct, one can construct a PublicKeyWithPoP (see below). - struct ProofOfPossession has copy, drop, store { - bytes: vector - } - - /// A *validated* public key that had a successfully-verified proof-of-possession (PoP). - /// - /// A vector of these structs can be either: - /// (1) used to verify an aggregate signature - /// (2) aggregated with other PublicKeyWithPoP structs into an AggrPublicKeysWithPoP, which in turn can be used - /// to verify a multisignature - struct PublicKeyWithPoP has copy, drop, store { - bytes: vector - } - - /// An aggregation of public keys with verified PoPs, which can be used to verify multisignatures. - struct AggrPublicKeysWithPoP has copy, drop, store { - bytes: vector - } - - /// A BLS signature. This can be either a: - /// (1) normal (non-aggregated) signature - /// (2) signature share (for a multisignature or aggregate signature) - struct Signature has copy, drop, store { - bytes: vector - } - - /// An aggregation of BLS signatures. This can be either a: - /// (4) aggregated signature (i.e., an aggregation of signatures s_i, each on a message m_i) - /// (3) multisignature (i.e., an aggregation of signatures s_i, each on the same message m) - /// - /// We distinguish between a Signature type and a AggrOrMultiSignature type to prevent developers from interchangeably - /// calling `verify_multisignature` and `verify_signature_share` to verify both multisignatures and signature shares, - /// which could create problems down the line. - struct AggrOrMultiSignature has copy, drop, store { - bytes: vector - } - - /// Creates a new public key from a sequence of bytes. - public fun public_key_from_bytes(bytes: vector): Option { - if (validate_pubkey_internal(bytes)) { - option::some(PublicKey { - bytes - }) - } else { - option::none() - } - } - - /// Serializes a public key into 48 bytes. - public fun public_key_to_bytes(pk: &PublicKey): vector { - pk.bytes - } - - /// Creates a new proof-of-possession (PoP) which can be later used to create a PublicKeyWithPoP struct, - public fun proof_of_possession_from_bytes(bytes: vector): ProofOfPossession { - ProofOfPossession { - bytes - } - } - - /// Serializes the signature into 96 bytes. - public fun proof_of_possession_to_bytes(pop: &ProofOfPossession): vector { - pop.bytes - } - - /// Creates a PoP'd public key from a normal public key and a corresponding proof-of-possession. - public fun public_key_from_bytes_with_pop(pk_bytes: vector, pop: &ProofOfPossession): Option { - if (verify_proof_of_possession_internal(pk_bytes, pop.bytes)) { - option::some(PublicKeyWithPoP { - bytes: pk_bytes - }) - } else { - option::none() - } - } - - /// Creates a normal public key from a PoP'd public key. - public fun public_key_with_pop_to_normal(pkpop: &PublicKeyWithPoP): PublicKey { - PublicKey { - bytes: pkpop.bytes - } - } - - /// Serializes a PoP'd public key into 48 bytes. - public fun public_key_with_pop_to_bytes(pk: &PublicKeyWithPoP): vector { - pk.bytes - } - - /// Creates a new signature from a sequence of bytes. Does not check the signature for prime-order subgroup - /// membership since that is done implicitly during verification. - public fun signature_from_bytes(bytes: vector): Signature { - Signature { - bytes - } - } - - /// Serializes the signature into 96 bytes. - public fun signature_to_bytes(sig: &Signature): vector { - sig.bytes - } - - /// Checks that the group element that defines a signature is in the prime-order subgroup. - /// This check is implicitly performed when verifying any signature via this module, but we expose this functionality - /// in case it might be useful for applications to easily dismiss invalid signatures early on. - public fun signature_subgroup_check(signature: &Signature): bool { - signature_subgroup_check_internal(signature.bytes) - } - - /// Given a vector of public keys with verified PoPs, combines them into an *aggregated* public key which can be used - /// to verify multisignatures using `verify_multisignature` and aggregate signatures using `verify_aggregate_signature`. - /// Aborts if no public keys are given as input. - public fun aggregate_pubkeys(public_keys: vector): AggrPublicKeysWithPoP { - let (bytes, success) = aggregate_pubkeys_internal(public_keys); - assert!(success, std::error::invalid_argument(EZERO_PUBKEYS)); - - AggrPublicKeysWithPoP { - bytes - } - } - - /// Serializes an aggregate public key into 48 bytes. - public fun aggregate_pubkey_to_bytes(apk: &AggrPublicKeysWithPoP): vector { - apk.bytes - } - - /// Aggregates the input signatures into an aggregate-or-multi-signature structure, which can be later verified via - /// `verify_aggregate_signature` or `verify_multisignature`. Returns `None` if zero signatures are given as input - /// or if some of the signatures are not valid group elements. - public fun aggregate_signatures(signatures: vector): Option { - let (bytes, success) = aggregate_signatures_internal(signatures); - if (success) { - option::some( - AggrOrMultiSignature { - bytes - } - ) - } else { - option::none() - } - } - - /// Serializes an aggregate-or-multi-signature into 96 bytes. - public fun aggr_or_multi_signature_to_bytes(sig: &AggrOrMultiSignature): vector { - sig.bytes - } - - /// Deserializes an aggregate-or-multi-signature from 96 bytes. - public fun aggr_or_multi_signature_from_bytes(bytes: vector): AggrOrMultiSignature { - assert!(std::vector::length(&bytes) == SIGNATURE_SIZE, std::error::invalid_argument(EWRONG_SIZE)); - - AggrOrMultiSignature { - bytes - } - } - - - /// Checks that the group element that defines an aggregate-or-multi-signature is in the prime-order subgroup. - public fun aggr_or_multi_signature_subgroup_check(signature: &AggrOrMultiSignature): bool { - signature_subgroup_check_internal(signature.bytes) - } - - /// Verifies an aggregate signature, an aggregation of many signatures `s_i`, each on a different message `m_i`. - public fun verify_aggregate_signature( - aggr_sig: &AggrOrMultiSignature, - public_keys: vector, - messages: vector>, - ): bool { - verify_aggregate_signature_internal(aggr_sig.bytes, public_keys, messages) - } - - /// Verifies a multisignature: an aggregation of many signatures, each on the same message `m`. - public fun verify_multisignature( - multisig: &AggrOrMultiSignature, - aggr_public_key: &AggrPublicKeysWithPoP, - message: vector - ): bool { - verify_multisignature_internal(multisig.bytes, aggr_public_key.bytes, message) - } - - /// Verifies a normal, non-aggregated signature. - public fun verify_normal_signature( - signature: &Signature, - public_key: &PublicKey, - message: vector - ): bool { - verify_normal_signature_internal(signature.bytes, public_key.bytes, message) - } - - /// Verifies a signature share in the multisignature share or an aggregate signature share. - public fun verify_signature_share( - signature_share: &Signature, - public_key: &PublicKeyWithPoP, - message: vector - ): bool { - verify_signature_share_internal(signature_share.bytes, public_key.bytes, message) - } - - #[test_only] - /// Generates a BLS key-pair: a secret key with its corresponding public key. - public fun generate_keys(): (SecretKey, PublicKeyWithPoP) { - let (sk_bytes, pk_bytes) = generate_keys_internal(); - let sk = SecretKey { - bytes: sk_bytes - }; - let pkpop = PublicKeyWithPoP { - bytes: pk_bytes - }; - (sk, pkpop) - } - - #[test_only] - /// Generates a BLS signature for a message with a signing key. - public fun sign_arbitrary_bytes(signing_key: &SecretKey, message: vector): Signature { - Signature { - bytes: sign_internal(signing_key.bytes, message) - } - } - - #[test_only] - /// Generates a multi-signature for a message with multiple signing keys. - public fun multi_sign_arbitrary_bytes(signing_keys: &vector, message: vector): AggrOrMultiSignature { - let n = std::vector::length(signing_keys); - let sigs = vector[]; - let i: u64 = 0; - while (i < n) { - let sig = sign_arbitrary_bytes(std::vector::borrow(signing_keys, i), message); - std::vector::push_back(&mut sigs, sig); - i = i + 1; - }; - let multisig = aggregate_signatures(sigs); - option::extract(&mut multisig) - } - - #[test_only] - /// Generates an aggregated signature over all messages in messages, where signing_keys[i] signs messages[i]. - public fun aggr_sign_arbitrary_bytes(signing_keys: &vector, messages: &vector>): AggrOrMultiSignature { - let signing_key_count = std::vector::length(signing_keys); - let message_count = std::vector::length(messages); - assert!(signing_key_count == message_count, invalid_argument(E_NUM_SIGNERS_MUST_EQ_NUM_MESSAGES)); - let sigs = vector[]; - let i: u64 = 0; - while (i < signing_key_count) { - let sig = sign_arbitrary_bytes(std::vector::borrow(signing_keys, i), *std::vector::borrow(messages, i)); - std::vector::push_back(&mut sigs, sig); - i = i + 1; - }; - let aggr_sig = aggregate_signatures(sigs); - option::extract(&mut aggr_sig) - } - - #[test_only] - /// Returns a mauled copy of a byte array. - public fun maul_bytes(bytes: &vector): vector { - let new_bytes = *bytes; - let first_byte = std::vector::borrow_mut(&mut new_bytes, 0); - *first_byte = *first_byte ^ 0xff; - new_bytes - } - - #[test_only] - /// Returns a mauled copy of a normal signature. - public fun maul_signature(sig: &Signature): Signature { - Signature { - bytes: maul_bytes(&signature_to_bytes(sig)) - } - } - - #[test_only] - /// Returns a mauled copy of an aggregated signature or a multi-signature. - public fun maul_aggr_or_multi_signature(sig: &AggrOrMultiSignature): AggrOrMultiSignature { - AggrOrMultiSignature { - bytes: maul_bytes(&aggr_or_multi_signature_to_bytes(sig)) - } - } - - #[test_only] - /// Returns a mauled copy of a normal public key. - public fun maul_public_key(pk: &PublicKey): PublicKey { - PublicKey { - bytes: maul_bytes(&public_key_to_bytes(pk)) - } - } - - #[test_only] - /// Returns a mauled copy of a PoP'd public key. - public fun maul_public_key_with_pop(pk: &PublicKeyWithPoP): PublicKeyWithPoP { - PublicKeyWithPoP { - bytes: maul_bytes(&public_key_with_pop_to_bytes(pk)) - } - } - - #[test_only] - /// Returns a mauled copy of an aggregated public key. - public fun maul_aggregated_public_key(pk: &AggrPublicKeysWithPoP): AggrPublicKeysWithPoP { - AggrPublicKeysWithPoP { - bytes: maul_bytes(&aggregate_pubkey_to_bytes(pk)) - } - } - - #[test_only] - /// Returns a mauled copy of a proof-of-possession. - public fun maul_proof_of_possession(pop: &ProofOfPossession): ProofOfPossession { - ProofOfPossession { - bytes: maul_bytes(&proof_of_possession_to_bytes(pop)) - } - } - - - #[test_only] - /// Generates a proof-of-possession (PoP) for the public key associated with the secret key `sk`. - public fun generate_proof_of_possession(sk: &SecretKey): ProofOfPossession { - ProofOfPossession { - bytes: generate_proof_of_possession_internal(sk.bytes) - } - } - - // - // Native functions - // - - /// CRYPTOGRAPHY WARNING: This function assumes that the caller verified all public keys have a valid - /// proof-of-possesion (PoP) using `verify_proof_of_possession`. - /// - /// Given a vector of serialized public keys, combines them into an aggregated public key, returning `(bytes, true)`, - /// where `bytes` store the serialized public key. - /// Aborts if no public keys are given as input. - native fun aggregate_pubkeys_internal(public_keys: vector): (vector, bool); - - - /// CRYPTOGRAPHY WARNING: This function can be safely called without verifying that the input signatures are elements - /// of the prime-order subgroup of the BLS12-381 curve. - /// - /// Given a vector of serialized signatures, combines them into an aggregate signature, returning `(bytes, true)`, - /// where `bytes` store the serialized signature. - /// Does not check the input signatures nor the final aggregated signatures for prime-order subgroup membership. - /// Returns `(_, false)` if no signatures are given as input. - /// Does not abort. - native fun aggregate_signatures_internal(signatures: vector): (vector, bool); - - /// Return `true` if the bytes in `public_key` are a valid BLS12-381 public key: - /// (1) it is NOT the identity point, and - /// (2) it is a BLS12-381 elliptic curve point, and - /// (3) it is a prime-order point - /// Return `false` otherwise. - /// Does not abort. - native fun validate_pubkey_internal(public_key: vector): bool; - - /// Return `true` if the elliptic curve point serialized in `signature`: - /// (1) is NOT the identity point, and - /// (2) is a BLS12-381 elliptic curve point, and - /// (3) is a prime-order point - /// Return `false` otherwise. - /// Does not abort. - native fun signature_subgroup_check_internal(signature: vector): bool; - - /// CRYPTOGRAPHY WARNING: First, this function assumes all public keys have a valid proof-of-possesion (PoP). - /// This prevents both small-subgroup attacks and rogue-key attacks. Second, this function can be safely called - /// without verifying that the aggregate signature is in the prime-order subgroup of the BLS12-381 curve. - /// - /// Returns `true` if the aggregate signature `aggsig` on `messages` under `public_keys` verifies (where `messages[i]` - /// should be signed by `public_keys[i]`). - /// - /// Returns `false` if either: - /// - no public keys or messages are given as input, - /// - number of messages does not equal number of public keys - /// - `aggsig` (1) is the identity point, or (2) is NOT a BLS12-381 elliptic curve point, or (3) is NOT a - /// prime-order point - /// Does not abort. - native fun verify_aggregate_signature_internal( - aggsig: vector, - public_keys: vector, - messages: vector>, - ): bool; - - /// CRYPTOGRAPHY WARNING: This function assumes verified proofs-of-possesion (PoP) for the public keys used in - /// computing the aggregate public key. This prevents small-subgroup attacks and rogue-key attacks. - /// - /// Return `true` if the BLS `multisignature` on `message` verifies against the BLS aggregate public key `agg_public_key`. - /// Returns `false` otherwise. - /// Does not abort. - native fun verify_multisignature_internal( - multisignature: vector, - agg_public_key: vector, - message: vector - ): bool; - - /// CRYPTOGRAPHY WARNING: This function WILL check that the public key is a prime-order point, in order to prevent - /// library users from misusing the library by forgetting to validate public keys before giving them as arguments to - /// this function. - /// - /// Returns `true` if the `signature` on `message` verifies under `public key`. - /// Returns `false` otherwise. - /// Does not abort. - native fun verify_normal_signature_internal( - signature: vector, - public_key: vector, - message: vector - ): bool; - - /// Return `true` if the bytes in `public_key` are a valid bls12381 public key (as per `validate_pubkey`) - /// *and* this public key has a valid proof-of-possesion (PoP). - /// Return `false` otherwise. - /// Does not abort. - native fun verify_proof_of_possession_internal( - public_key: vector, - proof_of_possesion: vector - ): bool; - - /// CRYPTOGRAPHY WARNING: Assumes the public key has a valid proof-of-possesion (PoP). This prevents rogue-key - /// attacks later on during signature aggregation. - /// - /// Returns `true` if the `signature_share` on `message` verifies under `public key`. - /// Returns `false` otherwise, similar to `verify_multisignature`. - /// Does not abort. - native fun verify_signature_share_internal( - signature_share: vector, - public_key: vector, - message: vector - ): bool; - - #[test_only] - native fun generate_keys_internal(): (vector, vector); - - #[test_only] - native fun sign_internal(sk: vector, msg: vector): vector; - - #[test_only] - native fun generate_proof_of_possession_internal(sk: vector): vector; - - // - // Constants and helpers for tests - // - - /// Random signature generated by running `cargo test -- bls12381_sample_signature --nocapture --include-ignored` in `crates/aptos-crypto`. - /// The message signed is "Hello Aptos!" and the associated SK is 07416693b6b32c84abe45578728e2379f525729e5b94762435a31e65ecc728da. - const RANDOM_SIGNATURE: vector = x"a01a65854f987d3434149b7f08f70730e30b241984e8712bc2aca885d632aafced4c3f661209debb6b1c8601326623cc16ca2f6c9edc53b7b88b7435fb6b05ddece418d2c34dc6aca2f5a11a79e67774582c14084a01dcb7820e4cb4bad0ea8d"; - - /// Random signature generated by running `cargo test -- bls12381_sample_signature --nocapture --include-ignored` in `crates/aptos-crypto`. - /// The associated SK is 07416693b6b32c84abe45578728e2379f525729e5b94762435a31e65ecc728da. - const RANDOM_PK: vector = x"8a53e7ae5270e3e765cd8a4032c2e77c6f7e87a44ebb85bf28a4d7865565698f975346714262f9e47c6f3e0d5d951660"; - - // - // Tests - // - - #[test_only] - fun get_random_aggsig(): AggrOrMultiSignature { - assert!(signature_subgroup_check_internal(RANDOM_SIGNATURE), 1); - - AggrOrMultiSignature { bytes: RANDOM_SIGNATURE } - } - - #[test_only] - fun get_random_pk_with_pop(): PublicKeyWithPoP { - assert!(validate_pubkey_internal(RANDOM_PK), 1); - - PublicKeyWithPoP { - bytes: RANDOM_PK - } - } - - #[test] - fun test_pubkey_validation() { - // test low order points (in group for PK) - assert!(option::is_none(&public_key_from_bytes(x"ae3cd9403b69c20a0d455fd860e977fe6ee7140a7f091f26c860f2caccd3e0a7a7365798ac10df776675b3a67db8faa0")), 1); - assert!(option::is_none(&public_key_from_bytes(x"928d4862a40439a67fd76a9c7560e2ff159e770dcf688ff7b2dd165792541c88ee76c82eb77dd6e9e72c89cbf1a56a68")), 1); - assert!(option::is_some(&public_key_from_bytes(x"b3e4921277221e01ed71284be5e3045292b26c7f465a6fcdba53ee47edd39ec5160da3b229a73c75671024dcb36de091")), 1); - } - - #[test] - #[expected_failure(abort_code = 65537, location = Self)] - fun test_empty_pubkey_aggregation() { - // First, make sure if no inputs are given, the function returns None - // assert!(aggregate_pop_verified_pubkeys(vector::empty()) == option::none(), 1); - aggregate_pubkeys(std::vector::empty()); - } - - #[test] - fun test_pubkey_aggregation() { - // Second, try some test-cases generated by running the following command in `crates/aptos-crypto`: - // $ cargo test -- sample_aggregate_pk_and_multisig --nocapture --include-ignored - let pks = vector[ - PublicKeyWithPoP { bytes: x"92e201a806af246f805f460fbdc6fc90dd16a18d6accc236e85d3578671d6f6690dde22134d19596c58ce9d63252410a" }, - PublicKeyWithPoP { bytes: x"ab9df801c6f96ade1c0490c938c87d5bcc2e52ccb8768e1b5d14197c5e8bfa562783b96711b702dda411a1a9f08ebbfa" }, - PublicKeyWithPoP { bytes: x"b698c932cf7097d99c17bd6e9c9dc4eeba84278c621700a8f80ec726b1daa11e3ab55fc045b4dbadefbeef05c4182494" }, - PublicKeyWithPoP { bytes: x"934706a8b876d47a996d427e1526ce52c952d5ec0858d49cd262efb785b62b1972d06270b0a7adda1addc98433ad1843" }, - PublicKeyWithPoP { bytes: x"a4cd352daad3a0651c1998dfbaa7a748e08d248a54347544bfedd51a197e016bb6008e9b8e45a744e1a030cc3b27d2da" }, - ]; - - // agg_pks[i] = \sum_{j <= i} pk[j] - let agg_pks = vector[ - AggrPublicKeysWithPoP { bytes: x"92e201a806af246f805f460fbdc6fc90dd16a18d6accc236e85d3578671d6f6690dde22134d19596c58ce9d63252410a" }, - AggrPublicKeysWithPoP { bytes: x"b79ad47abb441d7eda9b220a626df2e4e4910738c5f777947f0213398ecafae044ec0c20d552d1348347e9abfcf3eca1" }, - AggrPublicKeysWithPoP { bytes: x"b5f5eb6153ab5388a1a76343d714e4a2dcf224c5d0722d1e8e90c6bcead05c573fffe986460bd4000645a655bf52bc60" }, - AggrPublicKeysWithPoP { bytes: x"b922006ec14c183572a8864c31dc6632dccffa9f9c86411796f8b1b5a93a2457762c8e2f5ef0a2303506c4bca9a4e0bf" }, - AggrPublicKeysWithPoP { bytes: x"b53df1cfee2168f59e5792e710bf22928dc0553e6531dae5c7656c0a66fc12cb82fbb04863938c953dc901a5a79cc0f3" }, - ]; - - let i = 0; - let accum_pk = std::vector::empty(); - while (i < std::vector::length(&pks)) { - std::vector::push_back(&mut accum_pk, *std::vector::borrow(&pks, i)); - - let apk = aggregate_pubkeys(accum_pk); - - // Make sure PKs were aggregated correctly - assert!(apk == *std::vector::borrow(&agg_pks, i), 1); - assert!(validate_pubkey_internal(apk.bytes), 1); - - i = i + 1; - }; - } - - #[test] - fun test_pubkey_validation_against_invalid_keys() { - let (_sk, pk) = generate_keys(); - let pk_bytes = public_key_with_pop_to_bytes(&pk); - assert!(option::is_some(&public_key_from_bytes(pk_bytes)), 1); - assert!(option::is_none(&public_key_from_bytes(maul_bytes(&pk_bytes))), 1); - } - - #[test] - fun test_signature_aggregation() { - // First, test empty aggregation - assert!(option::is_none(&mut aggregate_signatures(vector[])), 1); - - // Second, try some test-cases generated by running the following command in `crates/aptos-crypto`: - // $ cargo test -- sample_aggregate_sigs --nocapture --include-ignored - - // Signatures of each signer i - let sigs = vector[ - signature_from_bytes(x"a55ac2d64b4c1d141b15d876d3e54ad1eea07ee488e8287cce7cdf3eec551458ab5795ab196f8c112590346f7bc7c97e0053cd5be0f9bd74b93a87cd44458e98d125d6d5c6950ea5e62666beb34422ead79121f8cb0815dae41a986688d03eaf"), - signature_from_bytes(x"90a639a44491191c46379a843266c293de3a46197714ead2ad3886233dd5c2b608b6437fa32fbf9d218b20f1cbfa7970182663beb9c148e2e9412b148e16abf283ffa51b8a536c0e55d61b2e5c849edc49f636c0ef07cb99f125cbcf602e22bb"), - signature_from_bytes(x"9527d81aa15863ef3a3bf96bea6d58157d5063a93a6d0eb9d8b4f4bbda3b31142ec4586cb519da2cd7600941283d1bad061b5439703fd584295b44037a969876962ae1897dcc7cadf909d06faae213c4fef8e015dfb33ec109af02ab0c3f6833"), - signature_from_bytes(x"a54d264f5cab9654b1744232c4650c42b29adf2b19bd00bbdaf4a4d792ee4dfd40a1fe1b067f298bcfd8ae4fdc8250660a2848bd4a80d96585afccec5c6cfa617033dd7913c9acfdf98a72467e8a5155d4cad589a72d6665be7cb410aebc0068"), - signature_from_bytes(x"8d22876bdf73e6ad36ed98546018f6258cd47e45904b87c071e774a6ef4b07cac323258cb920b2fe2b07cca1f2b24bcb0a3194ec76f32edb92391ed2c39e1ada8919f8ea755c5e39873d33ff3a8f4fba21b1261c1ddb9d1688c2b40b77e355d1"), - ]; - - // multisigs[i] is a signature on "Hello, Aptoverse!" from signers 1 through i (inclusive) - let multisigs = vector[ - AggrOrMultiSignature { bytes: x"a55ac2d64b4c1d141b15d876d3e54ad1eea07ee488e8287cce7cdf3eec551458ab5795ab196f8c112590346f7bc7c97e0053cd5be0f9bd74b93a87cd44458e98d125d6d5c6950ea5e62666beb34422ead79121f8cb0815dae41a986688d03eaf" }, - AggrOrMultiSignature { bytes: x"8f1949a06b95c3cb62898d861f889350c0d2cb740da513bfa195aa0ab8fa006ea2efe004a7bbbd9bb363637a279aed20132efd0846f520e7ee0e8ed847a1c6969bb986ad2239bcc9af561b6c2aa6d3016e1c722146471f1e28313de189fe7ebc" }, - AggrOrMultiSignature { bytes: x"ab5ad42bb8f350f8a6b4ae897946a05dbe8f2b22db4f6c37eff6ff737aebd6c5d75bd1abdfc99345ac8ec38b9a449700026f98647752e1c99f69bb132340f063b8a989728e0a3d82a753740bf63e5d8f51e413ebd9a36f6acbe1407a00c4b3e7" }, - AggrOrMultiSignature { bytes: x"ae307a0d055d3ba55ad6ec7094adef27ed821bdcf735fb509ab2c20b80952732394bc67ea1fd8c26ea963540df7448f8102509f7b8c694e4d75f30a43c455f251b6b3fd8b580b9228ffeeb9039834927aacefccd3069bef4b847180d036971cf" }, - AggrOrMultiSignature { bytes: x"8284e4e3983f29cb45020c3e2d89066df2eae533a01cb6ca2c4d466b5e02dd22467f59640aa120db2b9cc49e931415c3097e3d54ff977fd9067b5bc6cfa1c885d9d8821aef20c028999a1d97e783ae049d8fa3d0bbac36ce4ca8e10e551d3461" }, - ]; - - let i = 0; - let accum_sigs = std::vector::empty(); - while (i < std::vector::length(&sigs)) { - std::vector::push_back(&mut accum_sigs, *std::vector::borrow(&sigs, i)); - - let multisig = option::extract(&mut aggregate_signatures(accum_sigs)); - - // Make sure sigs were aggregated correctly - assert!(multisig == *std::vector::borrow(&multisigs, i), 1); - assert!(signature_subgroup_check_internal(multisig.bytes), 1); - - i = i + 1; - }; - } - - #[test] - fun test_empty_signature_aggregation() { - assert!(option::is_none(&mut aggregate_signatures(vector[])), 1); - } - - #[test] - fun test_verify_multisig() { - // Second, try some test-cases generated by running the following command in `crates/aptos-crypto`: - // $ cargo test -- sample_aggregate_pk_and_multisig --nocapture --include-ignored - let pks = vector[ - PublicKeyWithPoP { bytes: x"92e201a806af246f805f460fbdc6fc90dd16a18d6accc236e85d3578671d6f6690dde22134d19596c58ce9d63252410a" }, - PublicKeyWithPoP { bytes: x"ab9df801c6f96ade1c0490c938c87d5bcc2e52ccb8768e1b5d14197c5e8bfa562783b96711b702dda411a1a9f08ebbfa" }, - PublicKeyWithPoP { bytes: x"b698c932cf7097d99c17bd6e9c9dc4eeba84278c621700a8f80ec726b1daa11e3ab55fc045b4dbadefbeef05c4182494" }, - PublicKeyWithPoP { bytes: x"934706a8b876d47a996d427e1526ce52c952d5ec0858d49cd262efb785b62b1972d06270b0a7adda1addc98433ad1843" }, - PublicKeyWithPoP { bytes: x"a4cd352daad3a0651c1998dfbaa7a748e08d248a54347544bfedd51a197e016bb6008e9b8e45a744e1a030cc3b27d2da" }, - ]; - - // agg_pks[i] = \sum_{j <= i} pk[j] - let agg_pks = vector[ - AggrPublicKeysWithPoP { bytes: x"92e201a806af246f805f460fbdc6fc90dd16a18d6accc236e85d3578671d6f6690dde22134d19596c58ce9d63252410a" }, - AggrPublicKeysWithPoP { bytes: x"b79ad47abb441d7eda9b220a626df2e4e4910738c5f777947f0213398ecafae044ec0c20d552d1348347e9abfcf3eca1" }, - AggrPublicKeysWithPoP { bytes: x"b5f5eb6153ab5388a1a76343d714e4a2dcf224c5d0722d1e8e90c6bcead05c573fffe986460bd4000645a655bf52bc60" }, - AggrPublicKeysWithPoP { bytes: x"b922006ec14c183572a8864c31dc6632dccffa9f9c86411796f8b1b5a93a2457762c8e2f5ef0a2303506c4bca9a4e0bf" }, - AggrPublicKeysWithPoP { bytes: x"b53df1cfee2168f59e5792e710bf22928dc0553e6531dae5c7656c0a66fc12cb82fbb04863938c953dc901a5a79cc0f3" }, - ]; - - // multisigs[i] is a signature on "Hello, Aptoverse!" under agg_pks[i] - let multisigs = vector[ - AggrOrMultiSignature { bytes: x"ade45c67bff09ae57e0575feb0be870f2d351ce078e8033d847615099366da1299c69497027b77badb226ff1708543cd062597030c3f1553e0aef6c17e7af5dd0de63c1e4f1f9da68c966ea6c1dcade2cdc646bd5e8bcd4773931021ec5be3fd" }, - AggrOrMultiSignature { bytes: x"964af3d83436f6a9a382f34590c0c14e4454dc1de536af205319ce1ed417b87a2374863d5df7b7d5ed900cf91dffa7a105d3f308831d698c0d74fb2259d4813434fb86425db0ded664ae8f85d02ec1d31734910317d4155cbf69017735900d4d" }, - AggrOrMultiSignature { bytes: x"b523a31813e771e55aa0fc99a48db716ecc1085f9899ccadb64e759ecb481a2fb1cdcc0b266f036695f941361de773081729311f6a1bca9d47393f5359c8c87dc34a91f5dae335590aacbff974076ad1f910dd81750553a72ccbcad3c8cc0f07" }, - AggrOrMultiSignature { bytes: x"a945f61699df58617d37530a85e67bd1181349678b89293951ed29d1fb7588b5c12ebb7917dfc9d674f3f4fde4d062740b85a5f4927f5a4f0091e46e1ac6e41bbd650a74dd49e91445339d741e3b10bdeb9bc8bba46833e0011ff91fa5c77bd2" }, - AggrOrMultiSignature { bytes: x"b627b2cfd8ae59dcf5e58cc6c230ae369985fd096e1bc3be38da5deafcbed7d939f07cccc75383539940c56c6b6453db193f563f5b6e4fe54915afd9e1baea40a297fa7eda74abbdcd4cc5c667d6db3b9bd265782f7693798894400f2beb4637" }, - ]; - - let i = 0; - let accum_pk = std::vector::empty(); - while (i < std::vector::length(&pks)) { - std::vector::push_back(&mut accum_pk, *std::vector::borrow(&pks, i)); - - let apk = aggregate_pubkeys(accum_pk); - - assert!(apk == *std::vector::borrow(&agg_pks, i), 1); - - assert!(verify_multisignature(std::vector::borrow(&multisigs, i), &apk, b"Hello, Aptoverse!"), 1); - - i = i + 1; - }; - } - - #[test] - fun test_verify_multisignature_randomized() { - let signer_count = 1; - let max_signer_count = 5; - let msg = b"hello world"; - while (signer_count <= max_signer_count) { - // Generate key pairs. - let signing_keys = vector[]; - let public_keys = vector[]; - let i = 0; - while (i < signer_count) { - let (sk, pk) = generate_keys(); - std::vector::push_back(&mut signing_keys, sk); - std::vector::push_back(&mut public_keys, pk); - i = i + 1; - }; - - // Generate multi-signature. - let aggr_pk = aggregate_pubkeys(public_keys); - let multisig = multi_sign_arbitrary_bytes(&signing_keys, msg); - - // Test signature verification. - assert!(verify_multisignature(&multisig, &aggr_pk, msg), 1); - assert!(!verify_multisignature(&maul_aggr_or_multi_signature(&multisig), &aggr_pk, msg), 1); - assert!(!verify_multisignature(&multisig, &maul_aggregated_public_key(&aggr_pk), msg), 1); - assert!(!verify_multisignature(&multisig, &aggr_pk, maul_bytes(&msg)), 1); - - // Also test signature aggregation. - let signatures = vector[]; - let i = 0; - while (i < signer_count) { - let sk = std::vector::borrow(&signing_keys, i); - let sig = sign_arbitrary_bytes(sk, msg); - std::vector::push_back(&mut signatures, sig); - i = i + 1; - }; - let aggregated_signature = option::extract(&mut aggregate_signatures(signatures)); - assert!(aggr_or_multi_signature_subgroup_check(&aggregated_signature), 1); - assert!(aggr_or_multi_signature_to_bytes(&aggregated_signature) == aggr_or_multi_signature_to_bytes(&multisig), 1); - - signer_count = signer_count + 1; - } - } - - #[test] - fun test_verify_aggsig() { - assert!(aggr_or_multi_signature_to_bytes(&aggr_or_multi_signature_from_bytes(RANDOM_SIGNATURE)) == RANDOM_SIGNATURE, 1); - - // First, make sure verification returns None when no inputs are given or |pks| != |msgs| - assert!(verify_aggregate_signature(&get_random_aggsig(), vector[], vector[]) == false, 1); - - assert!(verify_aggregate_signature( - &get_random_aggsig(), - vector[ get_random_pk_with_pop() ], - vector[]) == false, 1); - - assert!(verify_aggregate_signature( - &get_random_aggsig(), - vector[], - vector[ x"ab" ]) == false, 1); - - assert!(verify_aggregate_signature( - &get_random_aggsig(), - vector[ get_random_pk_with_pop() ], - vector[ - x"cd", x"ef" - ]) == false, 1); - - assert!(verify_aggregate_signature( - &get_random_aggsig(), - vector[ - get_random_pk_with_pop(), - get_random_pk_with_pop(), - get_random_pk_with_pop(), - ], - vector[ - x"cd", x"ef" - ]) == false, 1); - - // Second, try some test-cases generated by running the following command in `crates/aptos-crypto`: - // $ cargo test -- bls12381_sample_aggregate_pk_and_aggsig --nocapture --ignored - - // The signed messages are "Hello, Aptos !", where \in {1, ..., 5} - let msgs = vector[ - x"48656c6c6f2c204170746f73203121", - x"48656c6c6f2c204170746f73203221", - x"48656c6c6f2c204170746f73203321", - x"48656c6c6f2c204170746f73203421", - x"48656c6c6f2c204170746f73203521", - ]; - - // Public key of signer i - let pks = vector[ - PublicKeyWithPoP { bytes: x"b93d6aabb2b83e52f4b8bda43c24ea920bbced87a03ffc80f8f70c814a8b3f5d69fbb4e579ca76ee008d61365747dbc6" }, - PublicKeyWithPoP { bytes: x"b45648ceae3a983bcb816a96db599b5aef3b688c5753fa20ce36ac7a4f2c9ed792ab20af6604e85e42dab746398bb82c" }, - PublicKeyWithPoP { bytes: x"b3e4921277221e01ed71284be5e3045292b26c7f465a6fcdba53ee47edd39ec5160da3b229a73c75671024dcb36de091" }, - PublicKeyWithPoP { bytes: x"8463b8671c9775a7dbd98bf76d3deba90b5a90535fc87dc8c13506bb5c7bbd99be4d257e60c548140e1e30b107ff5822" }, - PublicKeyWithPoP { bytes: x"a79e3d0e9d04587a3b27d05efe5717da05fd93485dc47978c866dc70a01695c2efd247d1dd843a011a4b6b24079d7384" }, - ]; - - // aggsigs[i] = \sum_{j <= i} sigs[j], where sigs[j] is a signature on msgs[j] under pks[j] - let aggsigs = vector[ - AggrOrMultiSignature { bytes: x"a2bc8bdebe6215ba74b5b53c5ed2aa0c68221a4adf868989ccdcfb62bb0eecc6537def9ee686a7960169c5917d25e5220177ed1c5e95ecfd68c09694062e76efcb00759beac874e4f9a715fd144210883bf9bb272f156b0a1fa15d0e9460f01f" }, - AggrOrMultiSignature { bytes: x"a523aa3c3f1f1074d968ffecf017c7b93ae5243006bf0abd2e45c036ddbec99302984b650ebe5ba306cda4071d281ba50a99ef0e66c3957fab94163296f9d673fc58a36de4276f82bfb1d9180b591df93b5c2804d40dd68cf0f72cd92f86442e" }, - AggrOrMultiSignature { bytes: x"abed10f464de74769121fc09715e59a3ac96a5054a43a9d43cc890a2d4d332614c74c7fb4cceef6d25f85c65dee337330f062f89f23fec9ecf7ce3193fbba2c886630d753be6a4513a4634428904b767af2f230c5cadbcb53a451dd9c7d977f6" }, - AggrOrMultiSignature { bytes: x"8362871631ba822742a31209fa4abce6dc94b741ac4725995459da2951324b51efbbf6bc3ab4681e547ebfbadd80e0360dc078c04188198f0acea26c12645ace9107a4a23cf8db46abc7a402637f16a0477c72569fc9966fe804ef4dc0e5e758" }, - AggrOrMultiSignature { bytes: x"a44d967935fbe63a763ce2dd2b16981f967ecd31e20d3266eef5517530cdc233c8a18273b6d9fd7f61dd39178826e3f115df4e7b304f2de17373a95ea0c9a14293dcfd6f0ef416e06fa23f6a3c850d638e4d8f97ab4562ef55d49a96a50baa13" }, - ]; - - let i = 0; - let msg_subset = std::vector::empty>(); - let pk_subset = std::vector::empty(); - while (i < std::vector::length(&pks)) { - let aggsig = *std::vector::borrow(&aggsigs, i); - - std::vector::push_back(&mut pk_subset, *std::vector::borrow(&pks, i)); - std::vector::push_back(&mut msg_subset, *std::vector::borrow(&msgs, i)); - - assert!(verify_aggregate_signature(&aggsig, pk_subset, msg_subset), 1); - - i = i + 1; - }; - } - - #[test] - fun test_verify_aggregated_signature_randomized() { - let signer_count = 1; - let max_signer_count = 5; - while (signer_count <= max_signer_count) { - // Generate key pairs and messages. - let signing_keys = vector[]; - let public_keys = vector[]; - let messages: vector> = vector[]; - let i = 0; - while (i < signer_count) { - let (sk, pk) = generate_keys(); - std::vector::push_back(&mut signing_keys, sk); - std::vector::push_back(&mut public_keys, pk); - let msg: vector = vector[104, 101, 108, 108, 111, 32, 97, 112, 116, 111, 115, 32, 117, 115, 101, 114, 32, 48+(i as u8)]; //"hello aptos user {i}" - std::vector::push_back(&mut messages, msg); - i = i + 1; - }; - - // Maul messages and public keys. - let mauled_public_keys = vector[maul_public_key_with_pop(std::vector::borrow(&public_keys, 0))]; - let mauled_messages = vector[maul_bytes(std::vector::borrow(&messages, 0))]; - let i = 1; - while (i < signer_count) { - let pk = std::vector::borrow(&public_keys, i); - let msg = std::vector::borrow(&messages, i); - std::vector::push_back(&mut mauled_public_keys, *pk); - std::vector::push_back(&mut mauled_messages, *msg); - i = i + 1; - }; - - // Generate aggregated signature. - let aggrsig = aggr_sign_arbitrary_bytes(&signing_keys, &messages); - - // Test signature verification. - assert!(verify_aggregate_signature(&aggrsig, public_keys, messages), 1); - assert!(!verify_aggregate_signature(&maul_aggr_or_multi_signature(&aggrsig), public_keys, messages), 1); - assert!(!verify_aggregate_signature(&aggrsig, mauled_public_keys, messages), 1); - assert!(!verify_aggregate_signature(&aggrsig, public_keys, mauled_messages), 1); - - // Also test signature aggregation. - let signatures = vector[]; - let i = 0; - while (i < signer_count) { - let sk = std::vector::borrow(&signing_keys, i); - let msg = std::vector::borrow(&messages, i); - let sig = sign_arbitrary_bytes(sk, *msg); - std::vector::push_back(&mut signatures, sig); - i = i + 1; - }; - let aggrsig_another = option::extract(&mut aggregate_signatures(signatures)); - assert!(aggr_or_multi_signature_to_bytes(&aggrsig_another) == aggr_or_multi_signature_to_bytes(&aggrsig), 1); - - signer_count = signer_count + 1; - } - } - - #[test] - /// Tests verification of a random BLS signature created using sk = x"" - fun test_verify_normal_and_verify_sigshare() { - // Test case generated by running `cargo test -- bls12381_sample_signature --nocapture --include-ignored` in - // `crates/aptos-crypto` - // ============================================================================================================= - // SK: 077c8a56f26259215a4a245373ab6ddf328ac6e00e5ea38d8700efa361bdc58d - - let message = b"Hello Aptos!"; - - // First, test signatures that verify - let ok = verify_normal_signature( - &signature_from_bytes(x"b01ce4632e94d8c611736e96aa2ad8e0528a02f927a81a92db8047b002a8c71dc2d6bfb94729d0973790c10b6ece446817e4b7543afd7ca9a17c75de301ae835d66231c26a003f11ae26802b98d90869a9e73788c38739f7ac9d52659e1f7cf7"), - &option::extract(&mut public_key_from_bytes(x"94209a296b739577cb076d3bfb1ca8ee936f29b69b7dae436118c4dd1cc26fd43dcd16249476a006b8b949bf022a7858")), - message, - ); - assert!(ok == true, 1); - - let pk = option::extract(&mut public_key_from_bytes(x"94209a296b739577cb076d3bfb1ca8ee936f29b69b7dae436118c4dd1cc26fd43dcd16249476a006b8b949bf022a7858")); - let pk_with_pop = PublicKeyWithPoP { bytes: pk.bytes }; - - let ok = verify_signature_share( - &signature_from_bytes(x"b01ce4632e94d8c611736e96aa2ad8e0528a02f927a81a92db8047b002a8c71dc2d6bfb94729d0973790c10b6ece446817e4b7543afd7ca9a17c75de301ae835d66231c26a003f11ae26802b98d90869a9e73788c38739f7ac9d52659e1f7cf7"), - &pk_with_pop, - message, - ); - assert!(ok == true, 1); - - // Second, test signatures that do NOT verify - let sigs = vector[ - Signature { bytes: x"a01ce4632e94d8c611736e96aa2ad8e0528a02f927a81a92db8047b002a8c71dc2d6bfb94729d0973790c10b6ece446817e4b7543afd7ca9a17c75de301ae835d66231c26a003f11ae26802b98d90869a9e73788c38739f7ac9d52659e1f7cf7" }, - Signature { bytes: x"b01ce4632e94d8c611736e96aa2ad8e0528a02f927a81a92db8047b002a8c71dc2d6bfb94729d0973790c10b6ece446817e4b7543afd7ca9a17c75de301ae835d66231c26a003f11ae26802b98d90869a9e73788c38739f7ac9d52659e1f7cf7" }, - Signature { bytes: x"b01ce4632e94d8c611736e96aa2ad8e0528a02f927a81a92db8047b002a8c71dc2d6bfb94729d0973790c10b6ece446817e4b7543afd7ca9a17c75de301ae835d66231c26a003f11ae26802b98d90869a9e73788c38739f7ac9d52659e1f7cf7" }, - ]; - let pks = vector[ - x"94209a296b739577cb076d3bfb1ca8ee936f29b69b7dae436118c4dd1cc26fd43dcd16249476a006b8b949bf022a7858", - x"ae4851bb9e7782027437ed0e2c026dd63b77a972ddf4bd9f72bcc218e327986568317e3aa9f679c697a2cb7cebf992f3", - x"82ed7bb5528303a2e306775040a7309e0bd597b70d9949d8c6198a01a7be0b00079320ebfeaf7bbd5bfe86809940d252", - ]; - let messages = vector[ - b"Hello Aptos!", - b"Hello Aptos!", - b"Bello Aptos!", - ]; - - let i = 0; - while (i < std::vector::length(&pks)) { - let sig = std::vector::borrow(&sigs, i); - let pk = *std::vector::borrow(&pks, i); - let msg = *std::vector::borrow(&messages, i); - - let pk = option::extract(&mut public_key_from_bytes(pk)); - - let notok = verify_normal_signature( - sig, - &pk, - msg, - ); - assert!(notok == false, 1); - - let notok = verify_signature_share( - sig, - &PublicKeyWithPoP { bytes: pk.bytes }, - msg, - ); - assert!(notok == false, 1); - - i = i + 1; - } - } - - #[test] - fun test_verify_normal_signature_or_signature_share_randomized() { - let (sk, pkpop) = generate_keys(); - let pk = public_key_with_pop_to_normal(&pkpop); - - let msg = b"hello world"; - let sig = sign_arbitrary_bytes(&sk, msg); - assert!(verify_normal_signature(&sig, &pk, msg), 1); - assert!(!verify_normal_signature(&maul_signature(&sig), &pk, msg), 1); - assert!(!verify_normal_signature(&sig, &maul_public_key(&pk), msg), 1); - assert!(!verify_normal_signature(&sig, &pk, maul_bytes(&msg)), 1); - - assert!(verify_signature_share(&sig, &pkpop, msg), 1); - assert!(!verify_signature_share(&maul_signature(&sig), &pkpop, msg), 1); - assert!(!verify_signature_share(&sig, &maul_public_key_with_pop(&pkpop), msg), 1); - assert!(!verify_signature_share(&sig, &pkpop, maul_bytes(&msg)), 1); - } - - #[test] - /// Tests verification of random BLS proofs-of-possession (PoPs) - fun test_verify_pop() { - // Test case generated by running `cargo test -- sample_pop --nocapture --include-ignored` in `crates/aptos-crypto` - // ============================================================================================================= - - let pks = vector[ - x"808864c91ae7a9998b3f5ee71f447840864e56d79838e4785ff5126c51480198df3d972e1e0348c6da80d396983e42d7", - x"8843843c76d167c02842a214c21277bad0bfd83da467cb5cf2d3ee67b2dcc7221b9fafa6d430400164012580e0c34d27", - x"a23b524d4308d46e43ee8cbbf57f3e1c20c47061ad9c3f915212334ea6532451dd5c01d3d3ada6bea10fe180b2c3b450", - x"a2aaa3eae1df3fc36365491afa1da5181acbb03801afd1430f04bb3b3eb18036f8b756b3508e4caee04beff50d455d1c", - x"84985b7e983dbdaddfca1f0b7dad9660bb39fff660e329acec15f69ac48c75dfa5d2df9f0dc320e4e7b7658166e0ac1c", - ]; - - let pops = vector[ - proof_of_possession_from_bytes(x"ab42afff92510034bf1232a37a0d31bc8abfc17e7ead9170d2d100f6cf6c75ccdcfedbd31699a112b4464a06fd636f3f190595863677d660b4c5d922268ace421f9e86e3a054946ee34ce29e1f88c1a10f27587cf5ec528d65ba7c0dc4863364"), - proof_of_possession_from_bytes(x"a6da5f2bc17df70ce664cff3e3a3e09d17162e47e652032b9fedc0c772fd5a533583242cba12095602e422e579c5284b1735009332dbdd23430bbcf61cc506ae37e41ff9a1fc78f0bc0d99b6bc7bf74c8f567dfb59079a035842bdc5fa3a0464"), - proof_of_possession_from_bytes(x"b8eef236595e2eab34d3c1abdab65971f5cfa1988c731ef62bd63c9a9ad3dfc9259f4f183bfffbc8375a38ba62e1c41a11173209705996ce889859bcbb3ddd7faa3c4ea3d8778f30a9ff814fdcfea1fb163d745c54dfb4dcc5a8cee092ee0070"), - proof_of_possession_from_bytes(x"a03a12fab68ad59d85c15dd1528560eff2c89250070ad0654ba260fda4334da179811d2ecdaca57693f80e9ce977d62011e3b1ee7bb4f7e0eb9b349468dd758f10fc35d54e0d0b8536ca713a77a301944392a5c192b6adf2a79ae2b38912dc98"), - proof_of_possession_from_bytes(x"8899b294f3c066e6dfb59bc0843265a1ccd6afc8f0f38a074d45ded8799c39d25ee0376cd6d6153b0d4d2ff8655e578b140254f1287b9e9df4e2aecc5b049d8556a4ab07f574df68e46348fd78e5298b7913377cf5bb3cf4796bfc755902bfdd"), - ]; - - assert!(std::vector::length(&pks) == std::vector::length(&pops), 1); - - let i = 0; - while (i < std::vector::length(&pks)) { - let opt_pk = public_key_from_bytes_with_pop(*std::vector::borrow(&pks, i), std::vector::borrow(&pops, i)); - assert!(option::is_some(&opt_pk), 1); - - i = i + 1; - }; - - // assert first PK's PoP does not verify against modifed PK' = 0xa0 | PK[1:] - let opt_pk = public_key_from_bytes_with_pop( - x"a08864c91ae7a9998b3f5ee71f447840864e56d79838e4785ff5126c51480198df3d972e1e0348c6da80d396983e42d7", - &proof_of_possession_from_bytes(x"ab42afff92510034bf1232a37a0d31bc8abfc17e7ead9170d2d100f6cf6c75ccdcfedbd31699a112b4464a06fd636f3f190595863677d660b4c5d922268ace421f9e86e3a054946ee34ce29e1f88c1a10f27587cf5ec528d65ba7c0dc4863364")); - assert!(option::is_none(&opt_pk), 1); - - // assert first PK's PoP does not verify if modifed as pop' = 0xb0 | pop[1:] - let opt_pk = public_key_from_bytes_with_pop( - x"808864c91ae7a9998b3f5ee71f447840864e56d79838e4785ff5126c51480198df3d972e1e0348c6da80d396983e42d7", - &proof_of_possession_from_bytes(x"bb42afff92510034bf1232a37a0d31bc8abfc17e7ead9170d2d100f6cf6c75ccdcfedbd31699a112b4464a06fd636f3f190595863677d660b4c5d922268ace421f9e86e3a054946ee34ce29e1f88c1a10f27587cf5ec528d65ba7c0dc4863364")); - assert!(option::is_none(&opt_pk), 1); - } - - #[test] - fun test_verify_pop_randomized() { - let (sk, pk) = generate_keys(); - let pk_bytes = public_key_with_pop_to_bytes(&pk); - let pop = generate_proof_of_possession(&sk); - assert!(option::is_some(&public_key_from_bytes_with_pop(pk_bytes, &pop)), 1); - assert!(option::is_none(&public_key_from_bytes_with_pop(pk_bytes, &maul_proof_of_possession(&pop))), 1); - assert!(option::is_none(&public_key_from_bytes_with_pop(maul_bytes(&pk_bytes), &pop)), 1); - } -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/AptosStdlib/bls12381_algebra.move b/examples/oft-movement/build/oft/sources/dependencies/AptosStdlib/bls12381_algebra.move deleted file mode 100644 index 5fb99beb9..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/AptosStdlib/bls12381_algebra.move +++ /dev/null @@ -1,802 +0,0 @@ -/// This module defines marker types, constants and test cases for working with BLS12-381 curves -/// using the generic API defined in `algebra.move`. -/// See https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-pairing-friendly-curves-11#name-bls-curves-for-the-128-bit- -/// for the full specification of BLS12-381 curves. -/// -/// Currently-supported BLS12-381 structures include `Fq12`, `Fr`, `G1`, `G2` and `Gt`, -/// along with their widely-used serialization formats, -/// the pairing between `G1`, `G2` and `Gt`, -/// and the hash-to-curve operations for `G1` and `G2` defined in https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-hash-to-curve-16. -/// -/// Other unimplemented BLS12-381 structures and serialization formats are also listed here, -/// as they help define some of the currently supported structures. -/// Their implementation may also be added in the future. -/// -/// `Fq`: the finite field $F_q$ used in BLS12-381 curves with a prime order $q$ equal to -/// 0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaaab. -/// -/// `FormatFqLsb`: a serialization format for `Fq` elements, -/// where an element is represented by a byte array `b[]` of size 48 with the least significant byte (LSB) coming first. -/// -/// `FormatFqMsb`: a serialization format for `Fq` elements, -/// where an element is represented by a byte array `b[]` of size 48 with the most significant byte (MSB) coming first. -/// -/// `Fq2`: the finite field $F_{q^2}$ used in BLS12-381 curves, -/// which is an extension field of `Fq`, constructed as $F_{q^2}=F_q[u]/(u^2+1)$. -/// -/// `FormatFq2LscLsb`: a serialization format for `Fq2` elements, -/// where an element in the form $(c_0+c_1\cdot u)$ is represented by a byte array `b[]` of size 96, -/// which is a concatenation of its coefficients serialized, with the least significant coefficient (LSC) coming first: -/// - `b[0..48]` is $c_0$ serialized using `FormatFqLsb`. -/// - `b[48..96]` is $c_1$ serialized using `FormatFqLsb`. -/// -/// `FormatFq2MscMsb`: a serialization format for `Fq2` elements, -/// where an element in the form $(c_0+c_1\cdot u)$ is represented by a byte array `b[]` of size 96, -/// which is a concatenation of its coefficients serialized, with the most significant coefficient (MSC) coming first: -/// - `b[0..48]` is $c_1$ serialized using `FormatFqLsb`. -/// - `b[48..96]` is $c_0$ serialized using `FormatFqLsb`. -/// -/// `Fq6`: the finite field $F_{q^6}$ used in BLS12-381 curves, -/// which is an extension field of `Fq2`, constructed as $F_{q^6}=F_{q^2}[v]/(v^3-u-1)$. -/// -/// `FormatFq6LscLsb`: a serialization scheme for `Fq6` elements, -/// where an element in the form $(c_0+c_1\cdot v+c_2\cdot v^2)$ is represented by a byte array `b[]` of size 288, -/// which is a concatenation of its coefficients serialized, with the least significant coefficient (LSC) coming first: -/// - `b[0..96]` is $c_0$ serialized using `FormatFq2LscLsb`. -/// - `b[96..192]` is $c_1$ serialized using `FormatFq2LscLsb`. -/// - `b[192..288]` is $c_2$ serialized using `FormatFq2LscLsb`. -/// -/// `G1Full`: a group constructed by the points on the BLS12-381 curve $E(F_q): y^2=x^3+4$ and the point at infinity, -/// under the elliptic curve point addition. -/// It contains the prime-order subgroup $G_1$ used in pairing. -/// -/// `G2Full`: a group constructed by the points on a curve $E'(F_{q^2}): y^2=x^3+4(u+1)$ and the point at infinity, -/// under the elliptic curve point addition. -/// It contains the prime-order subgroup $G_2$ used in pairing. -module aptos_std::bls12381_algebra { - // - // Marker types + serialization formats begin. - // - - /// The finite field $F_{q^12}$ used in BLS12-381 curves, - /// which is an extension field of `Fq6` (defined in the module documentation), constructed as $F_{q^12}=F_{q^6}[w]/(w^2-v)$. - struct Fq12 {} - - /// A serialization scheme for `Fq12` elements, - /// where an element $(c_0+c_1\cdot w)$ is represented by a byte array `b[]` of size 576, - /// which is a concatenation of its coefficients serialized, with the least significant coefficient (LSC) coming first. - /// - `b[0..288]` is $c_0$ serialized using `FormatFq6LscLsb` (defined in the module documentation). - /// - `b[288..576]` is $c_1$ serialized using `FormatFq6LscLsb`. - /// - /// NOTE: other implementation(s) using this format: ark-bls12-381-0.4.0. - struct FormatFq12LscLsb {} - - /// The group $G_1$ in BLS12-381-based pairing $G_1 \times G_2 \rightarrow G_t$. - /// It is a subgroup of `G1Full` (defined in the module documentation) with a prime order $r$ - /// equal to 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000001. - /// (so `Fr` is the associated scalar field). - struct G1 {} - - /// A serialization scheme for `G1` elements derived from - /// https://www.ietf.org/archive/id/draft-irtf-cfrg-pairing-friendly-curves-11.html#name-zcash-serialization-format-. - /// - /// Below is the serialization procedure that takes a `G1` element `p` and outputs a byte array of size 96. - /// 1. Let `(x,y)` be the coordinates of `p` if `p` is on the curve, or `(0,0)` otherwise. - /// 1. Serialize `x` and `y` into `b_x[]` and `b_y[]` respectively using `FormatFqMsb` (defined in the module documentation). - /// 1. Concatenate `b_x[]` and `b_y[]` into `b[]`. - /// 1. If `p` is the point at infinity, set the infinity bit: `b[0]: = b[0] | 0x40`. - /// 1. Return `b[]`. - /// - /// Below is the deserialization procedure that takes a byte array `b[]` and outputs either a `G1` element or none. - /// 1. If the size of `b[]` is not 96, return none. - /// 1. Compute the compression flag as `b[0] & 0x80 != 0`. - /// 1. If the compression flag is true, return none. - /// 1. Compute the infinity flag as `b[0] & 0x40 != 0`. - /// 1. If the infinity flag is set, return the point at infinity. - /// 1. Deserialize `[b[0] & 0x1f, b[1], ..., b[47]]` to `x` using `FormatFqMsb`. If `x` is none, return none. - /// 1. Deserialize `[b[48], ..., b[95]]` to `y` using `FormatFqMsb`. If `y` is none, return none. - /// 1. Check if `(x,y)` is on curve `E`. If not, return none. - /// 1. Check if `(x,y)` is in the subgroup of order `r`. If not, return none. - /// 1. Return `(x,y)`. - /// - /// NOTE: other implementation(s) using this format: ark-bls12-381-0.4.0. - struct FormatG1Uncompr {} - - /// A serialization scheme for `G1` elements derived from - /// https://www.ietf.org/archive/id/draft-irtf-cfrg-pairing-friendly-curves-11.html#name-zcash-serialization-format-. - /// - /// Below is the serialization procedure that takes a `G1` element `p` and outputs a byte array of size 48. - /// 1. Let `(x,y)` be the coordinates of `p` if `p` is on the curve, or `(0,0)` otherwise. - /// 1. Serialize `x` into `b[]` using `FormatFqMsb` (defined in the module documentation). - /// 1. Set the compression bit: `b[0] := b[0] | 0x80`. - /// 1. If `p` is the point at infinity, set the infinity bit: `b[0]: = b[0] | 0x40`. - /// 1. If `y > -y`, set the lexicographical flag: `b[0] := b[0] | 0x20`. - /// 1. Return `b[]`. - /// - /// Below is the deserialization procedure that takes a byte array `b[]` and outputs either a `G1` element or none. - /// 1. If the size of `b[]` is not 48, return none. - /// 1. Compute the compression flag as `b[0] & 0x80 != 0`. - /// 1. If the compression flag is false, return none. - /// 1. Compute the infinity flag as `b[0] & 0x40 != 0`. - /// 1. If the infinity flag is set, return the point at infinity. - /// 1. Compute the lexicographical flag as `b[0] & 0x20 != 0`. - /// 1. Deserialize `[b[0] & 0x1f, b[1], ..., b[47]]` to `x` using `FormatFqMsb`. If `x` is none, return none. - /// 1. Solve the curve equation with `x` for `y`. If no such `y` exists, return none. - /// 1. Let `y'` be `max(y,-y)` if the lexicographical flag is set, or `min(y,-y)` otherwise. - /// 1. Check if `(x,y')` is in the subgroup of order `r`. If not, return none. - /// 1. Return `(x,y')`. - /// - /// NOTE: other implementation(s) using this format: ark-bls12-381-0.4.0. - struct FormatG1Compr {} - - /// The group $G_2$ in BLS12-381-based pairing $G_1 \times G_2 \rightarrow G_t$. - /// It is a subgroup of `G2Full` (defined in the module documentation) with a prime order $r$ equal to - /// 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000001. - /// (so `Fr` is the scalar field). - struct G2 {} - - /// A serialization scheme for `G2` elements derived from - /// https://www.ietf.org/archive/id/draft-irtf-cfrg-pairing-friendly-curves-11.html#name-zcash-serialization-format-. - /// - /// Below is the serialization procedure that takes a `G2` element `p` and outputs a byte array of size 192. - /// 1. Let `(x,y)` be the coordinates of `p` if `p` is on the curve, or `(0,0)` otherwise. - /// 1. Serialize `x` and `y` into `b_x[]` and `b_y[]` respectively using `FormatFq2MscMsb` (defined in the module documentation). - /// 1. Concatenate `b_x[]` and `b_y[]` into `b[]`. - /// 1. If `p` is the point at infinity, set the infinity bit in `b[]`: `b[0]: = b[0] | 0x40`. - /// 1. Return `b[]`. - /// - /// Below is the deserialization procedure that takes a byte array `b[]` and outputs either a `G2` element or none. - /// 1. If the size of `b[]` is not 192, return none. - /// 1. Compute the compression flag as `b[0] & 0x80 != 0`. - /// 1. If the compression flag is true, return none. - /// 1. Compute the infinity flag as `b[0] & 0x40 != 0`. - /// 1. If the infinity flag is set, return the point at infinity. - /// 1. Deserialize `[b[0] & 0x1f, ..., b[95]]` to `x` using `FormatFq2MscMsb`. If `x` is none, return none. - /// 1. Deserialize `[b[96], ..., b[191]]` to `y` using `FormatFq2MscMsb`. If `y` is none, return none. - /// 1. Check if `(x,y)` is on the curve `E'`. If not, return none. - /// 1. Check if `(x,y)` is in the subgroup of order `r`. If not, return none. - /// 1. Return `(x,y)`. - /// - /// NOTE: other implementation(s) using this format: ark-bls12-381-0.4.0. - struct FormatG2Uncompr {} - - /// A serialization scheme for `G2` elements derived from - /// https://www.ietf.org/archive/id/draft-irtf-cfrg-pairing-friendly-curves-11.html#name-zcash-serialization-format-. - /// - /// Below is the serialization procedure that takes a `G2` element `p` and outputs a byte array of size 96. - /// 1. Let `(x,y)` be the coordinates of `p` if `p` is on the curve, or `(0,0)` otherwise. - /// 1. Serialize `x` into `b[]` using `FormatFq2MscMsb` (defined in the module documentation). - /// 1. Set the compression bit: `b[0] := b[0] | 0x80`. - /// 1. If `p` is the point at infinity, set the infinity bit: `b[0]: = b[0] | 0x40`. - /// 1. If `y > -y`, set the lexicographical flag: `b[0] := b[0] | 0x20`. - /// 1. Return `b[]`. - /// - /// Below is the deserialization procedure that takes a byte array `b[]` and outputs either a `G2` element or none. - /// 1. If the size of `b[]` is not 96, return none. - /// 1. Compute the compression flag as `b[0] & 0x80 != 0`. - /// 1. If the compression flag is false, return none. - /// 1. Compute the infinity flag as `b[0] & 0x40 != 0`. - /// 1. If the infinity flag is set, return the point at infinity. - /// 1. Compute the lexicographical flag as `b[0] & 0x20 != 0`. - /// 1. Deserialize `[b[0] & 0x1f, b[1], ..., b[95]]` to `x` using `FormatFq2MscMsb`. If `x` is none, return none. - /// 1. Solve the curve equation with `x` for `y`. If no such `y` exists, return none. - /// 1. Let `y'` be `max(y,-y)` if the lexicographical flag is set, or `min(y,-y)` otherwise. - /// 1. Check if `(x,y')` is in the subgroup of order `r`. If not, return none. - /// 1. Return `(x,y')`. - /// - /// NOTE: other implementation(s) using this format: ark-bls12-381-0.4.0. - struct FormatG2Compr {} - - /// The group $G_t$ in BLS12-381-based pairing $G_1 \times G_2 \rightarrow G_t$. - /// It is a multiplicative subgroup of `Fq12`, - /// with a prime order $r$ equal to 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000001. - /// (so `Fr` is the scalar field). - /// The identity of `Gt` is 1. - struct Gt {} - - /// A serialization scheme for `Gt` elements. - /// - /// To serialize, it treats a `Gt` element `p` as an `Fq12` element and serialize it using `FormatFq12LscLsb`. - /// - /// To deserialize, it uses `FormatFq12LscLsb` to try deserializing to an `Fq12` element then test the membership in `Gt`. - /// - /// NOTE: other implementation(s) using this format: ark-bls12-381-0.4.0. - struct FormatGt {} - - /// The finite field $F_r$ that can be used as the scalar fields - /// associated with the groups $G_1$, $G_2$, $G_t$ in BLS12-381-based pairing. - struct Fr {} - - /// A serialization format for `Fr` elements, - /// where an element is represented by a byte array `b[]` of size 32 with the least significant byte (LSB) coming first. - /// - /// NOTE: other implementation(s) using this format: ark-bls12-381-0.4.0, blst-0.3.7. - struct FormatFrLsb {} - - /// A serialization scheme for `Fr` elements, - /// where an element is represented by a byte array `b[]` of size 32 with the most significant byte (MSB) coming first. - /// - /// NOTE: other implementation(s) using this format: ark-bls12-381-0.4.0, blst-0.3.7. - struct FormatFrMsb {} - - // - // (Marker types + serialization formats end here.) - // Hash-to-structure suites begin. - // - - /// The hash-to-curve suite `BLS12381G1_XMD:SHA-256_SSWU_RO_` that hashes a byte array into `G1` elements. - /// - /// Full specification is defined in https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-hash-to-curve-16#name-bls12-381-g1. - struct HashG1XmdSha256SswuRo {} - - /// The hash-to-curve suite `BLS12381G2_XMD:SHA-256_SSWU_RO_` that hashes a byte array into `G2` elements. - /// - /// Full specification is defined in https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-hash-to-curve-16#name-bls12-381-g2. - struct HashG2XmdSha256SswuRo {} - - // - // (Hash-to-structure suites end here.) - // Tests begin. - // - - #[test_only] - const FQ12_VAL_0_SERIALIZED: vector = x"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; - #[test_only] - const FQ12_VAL_1_SERIALIZED: vector = x"010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; - #[test_only] - const FQ12_VAL_7_SERIALIZED: vector = x"070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; - #[test_only] - const FQ12_VAL_7_NEG_SERIALIZED: vector = x"a4aafffffffffeb9ffff53b1feffab1e24f6b0f6a0d23067bf1285f3844b7764d7ac4b43b6a71b4b9ae67f39ea11011a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; - #[test_only] - const Q12_SERIALIZED: vector = x"1175f55da544c7625f8ccb1360e2b1d3ca40747811c8f5ed04440afe232b476c0215676aec05f2a44ac2da6b6d1b7cff075e7b2a587e0aab601a8d3db4f0d29906e5e4d0d78119f396d5a59f0f8d1ca8bca62540be6ab9c12d0ca00de1f311f106278d000e55a393c9766a74e0d08a298450f60d7e666575e3354bf14b8731f4e721c0c180a5ed55c2f8f51f815baecbf96b5fc717eb58ac161a27d1d5f2bdc1a079609b9d6449165b2466b32a01eac7992a1ea0cac2f223cde1d56f9bbccc67afe44621daf858df3fc0eb837818f3e42ab3e131ce4e492efa63c108e6ef91c29ed63b3045baebcb0ab8d203c7f558beaffccba31b12aca7f54b58d0c28340e4fdb3c7c94fe9c4fef9d640ff2fcff02f1748416cbed0981fbff49f0e39eaf8a30273e67ed851944d33d6a593ef5ddcd62da84568822a6045b633bf6a513b3cfe8f9de13e76f8dcbd915980dec205eab6a5c0c72dcebd9afff1d25509ddbf33f8e24131fbd74cda93336514340cf8036b66b09ed9e6a6ac37e22fb3ac407e321beae8cd9fe74c8aaeb4edaa9a7272848fc623f6fe835a2e647379f547fc5ec6371318a85bfa60009cb20ccbb8a467492988a87633c14c0324ba0d0c3e1798ed29c8494cea35023746da05e35d184b4a301d5b2238d665495c6318b5af8653758008952d06cb9e62487b196d64383c73c06d6e1cccdf9b3ce8f95679e7050d949004a55f4ccf95b2552880ae36d1f7e09504d2338316d87d14a064511a295d768113e301bdf9d4383a8be32192d3f2f3b2de14181c73839a7cb4af5301"; - - #[test_only] - fun rand_vector(num: u64): vector> { - let elements = vector[]; - while (num > 0) { - std::vector::push_back(&mut elements, rand_insecure()); - num = num - 1; - }; - elements - } - - #[test(fx = @std)] - fun test_fq12(fx: signer) { - enable_cryptography_algebra_natives(&fx); - - // Constants. - assert!(Q12_SERIALIZED == order(), 1); - - // Serialization/deserialization. - let val_0 = zero(); - let val_1 = one(); - assert!(FQ12_VAL_0_SERIALIZED == serialize(&val_0), 1); - assert!(FQ12_VAL_1_SERIALIZED == serialize(&val_1), 1); - let val_7 = from_u64(7); - let val_7_another = std::option::extract(&mut deserialize(&FQ12_VAL_7_SERIALIZED)); - assert!(eq(&val_7, &val_7_another), 1); - assert!(FQ12_VAL_7_SERIALIZED == serialize(&val_7), 1); - assert!(std::option::is_none(&deserialize(&x"ffff")), 1); - - // Negation. - let val_minus_7 = neg(&val_7); - assert!(FQ12_VAL_7_NEG_SERIALIZED == serialize(&val_minus_7), 1); - - // Addition. - let val_9 = from_u64(9); - let val_2 = from_u64(2); - assert!(eq(&val_2, &add(&val_minus_7, &val_9)), 1); - - // Subtraction. - assert!(eq(&val_9, &sub(&val_2, &val_minus_7)), 1); - - // Multiplication. - let val_63 = from_u64(63); - assert!(eq(&val_63, &mul(&val_7, &val_9)), 1); - - // division. - let val_0 = from_u64(0); - assert!(eq(&val_7, &std::option::extract(&mut div(&val_63, &val_9))), 1); - assert!(std::option::is_none(&div(&val_63, &val_0)), 1); - - // Inversion. - assert!(eq(&val_minus_7, &neg(&val_7)), 1); - assert!(std::option::is_none(&inv(&val_0)), 1); - - // Squaring. - let val_x = rand_insecure(); - assert!(eq(&mul(&val_x, &val_x), &sqr(&val_x)), 1); - - // Downcasting. - assert!(eq(&zero(), &std::option::extract(&mut downcast(&val_1))), 1); - } - - #[test_only] - const R_SERIALIZED: vector = x"01000000fffffffffe5bfeff02a4bd5305d8a10908d83933487d9d2953a7ed73"; - #[test_only] - const G1_INF_SERIALIZED_COMP: vector = x"c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; - #[test_only] - const G1_INF_SERIALIZED_UNCOMP: vector = x"400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; - #[test_only] - const G1_GENERATOR_SERIALIZED_COMP: vector = x"97f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb"; - #[test_only] - const G1_GENERATOR_SERIALIZED_UNCOMP: vector = x"17f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb08b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1"; - #[test_only] - const G1_GENERATOR_MUL_BY_7_SERIALIZED_COMP: vector = x"b928f3beb93519eecf0145da903b40a4c97dca00b21f12ac0df3be9116ef2ef27b2ae6bcd4c5bc2d54ef5a70627efcb7"; - #[test_only] - const G1_GENERATOR_MUL_BY_7_SERIALIZED_UNCOMP: vector = x"1928f3beb93519eecf0145da903b40a4c97dca00b21f12ac0df3be9116ef2ef27b2ae6bcd4c5bc2d54ef5a70627efcb7108dadbaa4b636445639d5ae3089b3c43a8a1d47818edd1839d7383959a41c10fdc66849cfa1b08c5a11ec7e28981a1c"; - #[test_only] - const G1_GENERATOR_MUL_BY_7_NEG_SERIALIZED_COMP: vector = x"9928f3beb93519eecf0145da903b40a4c97dca00b21f12ac0df3be9116ef2ef27b2ae6bcd4c5bc2d54ef5a70627efcb7"; - #[test_only] - const G1_GENERATOR_MUL_BY_7_NEG_SERIALIZED_UNCOMP: vector = x"1928f3beb93519eecf0145da903b40a4c97dca00b21f12ac0df3be9116ef2ef27b2ae6bcd4c5bc2d54ef5a70627efcb70973642f94c9b055f4e1d20812c1f91329ed2e3d71f635a72d599a679d0cda1320e597b4e1b24f735fed1381d767908f"; - - #[test(fx = @std)] - fun test_g1affine(fx: signer) { - enable_cryptography_algebra_natives(&fx); - - // Constants. - assert!(R_SERIALIZED == order(), 1); - let point_at_infinity = zero(); - let generator = one(); - - // Serialization/deserialization. - assert!(G1_GENERATOR_SERIALIZED_UNCOMP == serialize(&generator), 1); - assert!(G1_GENERATOR_SERIALIZED_COMP == serialize(&generator), 1); - let generator_from_comp = std::option::extract(&mut deserialize(&G1_GENERATOR_SERIALIZED_COMP - )); - let generator_from_uncomp = std::option::extract(&mut deserialize(&G1_GENERATOR_SERIALIZED_UNCOMP - )); - assert!(eq(&generator, &generator_from_comp), 1); - assert!(eq(&generator, &generator_from_uncomp), 1); - - // Deserialization should fail if given a byte array of correct size but the value is not a member. - assert!(std::option::is_none(&deserialize(&x"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff")), 1); - - // Deserialization should fail if given a byte array of wrong size. - assert!(std::option::is_none(&deserialize(&x"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff")), 1); - - assert!( - G1_INF_SERIALIZED_UNCOMP == serialize(&point_at_infinity), 1); - assert!(G1_INF_SERIALIZED_COMP == serialize(&point_at_infinity), 1); - let inf_from_uncomp = std::option::extract(&mut deserialize(&G1_INF_SERIALIZED_UNCOMP - )); - let inf_from_comp = std::option::extract(&mut deserialize(&G1_INF_SERIALIZED_COMP - )); - assert!(eq(&point_at_infinity, &inf_from_comp), 1); - assert!(eq(&point_at_infinity, &inf_from_uncomp), 1); - - let point_7g_from_uncomp = std::option::extract(&mut deserialize(&G1_GENERATOR_MUL_BY_7_SERIALIZED_UNCOMP - )); - let point_7g_from_comp = std::option::extract(&mut deserialize(&G1_GENERATOR_MUL_BY_7_SERIALIZED_COMP - )); - assert!(eq(&point_7g_from_comp, &point_7g_from_uncomp), 1); - - // Deserialization should fail if given a point on the curve but off its prime-order subgroup, e.g., `(0,2)`. - assert!(std::option::is_none(&deserialize(&x"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002")), 1); - assert!(std::option::is_none(&deserialize(&x"800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000")), 1); - - // Deserialization should fail if given a valid point in (Fq,Fq) but not on the curve. - assert!(std::option::is_none(&deserialize(&x"8959e137e0719bf872abb08411010f437a8955bd42f5ba20fca64361af58ce188b1adb96ef229698bb7860b79e24ba12000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000")), 1); - - // Deserialization should fail if given an invalid point (x not in Fq). - assert!(std::option::is_none(&deserialize(&x"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa76e9853b35f5c9b2002d9e5833fd8f9ab4cd3934a4722a06f6055bfca720c91629811e2ecae7f0cf301b6d07898a90f")), 1); - assert!(std::option::is_none(&deserialize(&x"9fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff")), 1); - - // Deserialization should fail if given a byte array of wrong size. - assert!(std::option::is_none(&deserialize(&x"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ab")), 1); - assert!(std::option::is_none(&deserialize(&x"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ab")), 1); - - // Scalar multiplication. - let scalar_7 = from_u64(7); - let point_7g_calc = scalar_mul(&generator, &scalar_7); - assert!(eq(&point_7g_calc, &point_7g_from_comp), 1); - assert!(G1_GENERATOR_MUL_BY_7_SERIALIZED_UNCOMP == serialize(&point_7g_calc), 1); - assert!(G1_GENERATOR_MUL_BY_7_SERIALIZED_COMP == serialize( &point_7g_calc), 1); - - // Multi-scalar multiplication. - let num_entries = 1; - while (num_entries < 10) { - let scalars = rand_vector(num_entries); - let elements = rand_vector(num_entries); - - let expected = zero(); - let i = 0; - while (i < num_entries) { - let element = std::vector::borrow(&elements, i); - let scalar = std::vector::borrow(&scalars, i); - expected = add(&expected, &scalar_mul(element, scalar)); - i = i + 1; - }; - - let actual = multi_scalar_mul(&elements, &scalars); - assert!(eq(&expected, &actual), 1); - - num_entries = num_entries + 1; - }; - - // Doubling. - let scalar_2 = from_u64(2); - let point_2g = scalar_mul(&generator, &scalar_2); - let point_double_g = double(&generator); - assert!(eq(&point_2g, &point_double_g), 1); - - // Negation. - let point_minus_7g_calc = neg(&point_7g_calc); - assert!(G1_GENERATOR_MUL_BY_7_NEG_SERIALIZED_COMP == serialize(&point_minus_7g_calc), 1); - assert!(G1_GENERATOR_MUL_BY_7_NEG_SERIALIZED_UNCOMP == serialize(&point_minus_7g_calc), 1); - - // Addition. - let scalar_9 = from_u64(9); - let point_9g = scalar_mul(&generator, &scalar_9); - let point_2g = scalar_mul(&generator, &scalar_2); - let point_2g_calc = add(&point_minus_7g_calc, &point_9g); - assert!(eq(&point_2g, &point_2g_calc), 1); - - // Subtraction. - assert!(eq(&point_9g, &sub(&point_2g, &point_minus_7g_calc)), 1); - - // Hash-to-group using suite `BLS12381G1_XMD:SHA-256_SSWU_RO_`. - // Test vectors source: https://www.ietf.org/archive/id/draft-irtf-cfrg-hash-to-curve-16.html#name-bls12381g1_xmdsha-256_sswu_ - let actual = hash_to(&b"QUUX-V01-CS02-with-BLS12381G1_XMD:SHA-256_SSWU_RO_", &b""); - let expected = std::option::extract(&mut deserialize(&x"052926add2207b76ca4fa57a8734416c8dc95e24501772c814278700eed6d1e4e8cf62d9c09db0fac349612b759e79a108ba738453bfed09cb546dbb0783dbb3a5f1f566ed67bb6be0e8c67e2e81a4cc68ee29813bb7994998f3eae0c9c6a265")); - assert!(eq(&expected, &actual), 1); - let actual = hash_to(&b"QUUX-V01-CS02-with-BLS12381G1_XMD:SHA-256_SSWU_RO_", &b"abcdef0123456789"); - let expected = std::option::extract(&mut deserialize(&x"11e0b079dea29a68f0383ee94fed1b940995272407e3bb916bbf268c263ddd57a6a27200a784cbc248e84f357ce82d9803a87ae2caf14e8ee52e51fa2ed8eefe80f02457004ba4d486d6aa1f517c0889501dc7413753f9599b099ebcbbd2d709")); - assert!(eq(&expected, &actual), 1); - } - - #[test_only] - const G2_INF_SERIALIZED_UNCOMP: vector = x"400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; - #[test_only] - const G2_INF_SERIALIZED_COMP: vector = x"c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; - #[test_only] - const G2_GENERATOR_SERIALIZED_UNCOMP: vector = x"13e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb80606c4a02ea734cc32acd2b02bc28b99cb3e287e85a763af267492ab572e99ab3f370d275cec1da1aaa9075ff05f79be0ce5d527727d6e118cc9cdc6da2e351aadfd9baa8cbdd3a76d429a695160d12c923ac9cc3baca289e193548608b82801"; - #[test_only] - const G2_GENERATOR_SERIALIZED_COMP: vector = x"93e02b6052719f607dacd3a088274f65596bd0d09920b61ab5da61bbdc7f5049334cf11213945d57e5ac7d055d042b7e024aa2b2f08f0a91260805272dc51051c6e47ad4fa403b02b4510b647ae3d1770bac0326a805bbefd48056c8c121bdb8"; - #[test_only] - const G2_GENERATOR_MUL_BY_7_SERIALIZED_UNCOMP: vector = x"0d0273f6bf31ed37c3b8d68083ec3d8e20b5f2cc170fa24b9b5be35b34ed013f9a921f1cad1644d4bdb14674247234c8049cd1dbb2d2c3581e54c088135fef36505a6823d61b859437bfc79b617030dc8b40e32bad1fa85b9c0f368af6d38d3c05ecf93654b7a1885695aaeeb7caf41b0239dc45e1022be55d37111af2aecef87799638bec572de86a7437898efa702008b7ae4dbf802c17a6648842922c9467e460a71c88d393ee7af356da123a2f3619e80c3bdcc8e2b1da52f8cd9913ccdd"; - #[test_only] - const G2_GENERATOR_MUL_BY_7_SERIALIZED_COMP: vector = x"8d0273f6bf31ed37c3b8d68083ec3d8e20b5f2cc170fa24b9b5be35b34ed013f9a921f1cad1644d4bdb14674247234c8049cd1dbb2d2c3581e54c088135fef36505a6823d61b859437bfc79b617030dc8b40e32bad1fa85b9c0f368af6d38d3c"; - #[test_only] - const G2_GENERATOR_MUL_BY_7_NEG_SERIALIZED_UNCOMP: vector = x"0d0273f6bf31ed37c3b8d68083ec3d8e20b5f2cc170fa24b9b5be35b34ed013f9a921f1cad1644d4bdb14674247234c8049cd1dbb2d2c3581e54c088135fef36505a6823d61b859437bfc79b617030dc8b40e32bad1fa85b9c0f368af6d38d3c141418b3e4c84511f485fcc78b80b8bc623d6f3f1282e6da09f9c1860402272ba7129c72c4fcd2174f8ac87671053a8b1149639c79ffba82a4b71f73b11f186f8016a4686ab17ed0ec3d7bc6e476c6ee04c3f3c2d48b1d4ddfac073266ebddce"; - #[test_only] - const G2_GENERATOR_MUL_BY_7_NEG_SERIALIZED_COMP: vector = x"ad0273f6bf31ed37c3b8d68083ec3d8e20b5f2cc170fa24b9b5be35b34ed013f9a921f1cad1644d4bdb14674247234c8049cd1dbb2d2c3581e54c088135fef36505a6823d61b859437bfc79b617030dc8b40e32bad1fa85b9c0f368af6d38d3c"; - - #[test(fx = @std)] - fun test_g2affine(fx: signer) { - enable_cryptography_algebra_natives(&fx); - - // Special constants. - assert!(R_SERIALIZED == order(), 1); - let point_at_infinity = zero(); - let generator = one(); - - // Serialization/deserialization. - assert!(G2_GENERATOR_SERIALIZED_COMP == serialize(&generator), 1); - assert!(G2_GENERATOR_SERIALIZED_UNCOMP == serialize(&generator), 1); - let generator_from_uncomp = std::option::extract(&mut deserialize(&G2_GENERATOR_SERIALIZED_UNCOMP - )); - let generator_from_comp = std::option::extract(&mut deserialize(&G2_GENERATOR_SERIALIZED_COMP - )); - assert!(eq(&generator, &generator_from_comp), 1); - assert!(eq(&generator, &generator_from_uncomp), 1); - assert!(G2_INF_SERIALIZED_UNCOMP == serialize(&point_at_infinity), 1); - assert!(G2_INF_SERIALIZED_COMP == serialize(&point_at_infinity), 1); - let inf_from_uncomp = std::option::extract(&mut deserialize(&G2_INF_SERIALIZED_UNCOMP)); - let inf_from_comp = std::option::extract(&mut deserialize(&G2_INF_SERIALIZED_COMP)); - assert!(eq(&point_at_infinity, &inf_from_comp), 1); - assert!(eq(&point_at_infinity, &inf_from_uncomp), 1); - let point_7g_from_uncomp = std::option::extract(&mut deserialize(&G2_GENERATOR_MUL_BY_7_SERIALIZED_UNCOMP - )); - let point_7g_from_comp = std::option::extract(&mut deserialize(&G2_GENERATOR_MUL_BY_7_SERIALIZED_COMP - )); - assert!(eq(&point_7g_from_comp, &point_7g_from_uncomp), 1); - - // Deserialization should fail if given a point on the curve but not in the prime-order subgroup. - assert!(std::option::is_none(&deserialize(&x"f037d4ccd5ee751eba1c1fd4c7edbb76d2b04c3a1f3f554827cf37c3acbc2dbb7cdb320a2727c2462d6c55ca1f637707b96eeebc622c1dbe7c56c34f93887c8751b42bd04f29253a82251c192ef27ece373993b663f4360505299c5bd18c890ddd862a6308796bf47e2265073c1f7d81afd69f9497fc1403e2e97a866129b43b672295229c21116d4a99f3e5c2ae720a31f181dbed8a93e15f909c20cf69d11a8879adbbe6890740def19814e6d4ed23fb0dcbd79291655caf48b466ac9cae04")), 1); - assert!(std::option::is_none(&deserialize(&x"f037d4ccd5ee751eba1c1fd4c7edbb76d2b04c3a1f3f554827cf37c3acbc2dbb7cdb320a2727c2462d6c55ca1f637707b96eeebc622c1dbe7c56c34f93887c8751b42bd04f29253a82251c192ef27ece373993b663f4360505299c5bd18c890d")), 1); - - // Deserialization should fail if given a valid point in (Fq2,Fq2) but not on the curve. - assert!(std::option::is_none(&deserialize(&x"f037d4ccd5ee751eba1c1fd4c7edbb76d2b04c3a1f3f554827cf37c3acbc2dbb7cdb320a2727c2462d6c55ca1f637707b96eeebc622c1dbe7c56c34f93887c8751b42bd04f29253a82251c192ef27ece373993b663f4360505299c5bd18c890d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000")), 1); - - // Deserialization should fail if given an invalid point (x not in Fq2). - assert!(std::option::is_none(&deserialize(&x"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdd862a6308796bf47e2265073c1f7d81afd69f9497fc1403e2e97a866129b43b672295229c21116d4a99f3e5c2ae720a31f181dbed8a93e15f909c20cf69d11a8879adbbe6890740def19814e6d4ed23fb0dcbd79291655caf48b466ac9cae04")), 1); - assert!(std::option::is_none(&deserialize(&x"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff")), 1); - - // Deserialization should fail if given a byte array of wrong size. - assert!(std::option::is_none(&deserialize(&x"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ab")), 1); - assert!(std::option::is_none(&deserialize(&x"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ab")), 1); - - // Scalar multiplication. - let scalar_7 = from_u64(7); - let point_7g_calc = scalar_mul(&generator, &scalar_7); - assert!(eq(&point_7g_calc, &point_7g_from_comp), 1); - assert!(G2_GENERATOR_MUL_BY_7_SERIALIZED_UNCOMP == serialize(&point_7g_calc), 1); - assert!(G2_GENERATOR_MUL_BY_7_SERIALIZED_COMP == serialize(&point_7g_calc), 1); - - // Multi-scalar multiplication. - let num_entries = 1; - while (num_entries < 10) { - let scalars = rand_vector(num_entries); - let elements = rand_vector(num_entries); - - let expected = zero(); - let i = 0; - while (i < num_entries) { - let element = std::vector::borrow(&elements, i); - let scalar = std::vector::borrow(&scalars, i); - expected = add(&expected, &scalar_mul(element, scalar)); - i = i + 1; - }; - - let actual = multi_scalar_mul(&elements, &scalars); - assert!(eq(&expected, &actual), 1); - - num_entries = num_entries + 1; - }; - - // Doubling. - let scalar_2 = from_u64(2); - let point_2g = scalar_mul(&generator, &scalar_2); - let point_double_g = double(&generator); - assert!(eq(&point_2g, &point_double_g), 1); - - // Negation. - let point_minus_7g_calc = neg(&point_7g_calc); - assert!(G2_GENERATOR_MUL_BY_7_NEG_SERIALIZED_COMP == serialize(&point_minus_7g_calc), 1); - assert!(G2_GENERATOR_MUL_BY_7_NEG_SERIALIZED_UNCOMP == serialize(&point_minus_7g_calc), 1); - - // Addition. - let scalar_9 = from_u64(9); - let point_9g = scalar_mul(&generator, &scalar_9); - let point_2g = scalar_mul(&generator, &scalar_2); - let point_2g_calc = add(&point_minus_7g_calc, &point_9g); - assert!(eq(&point_2g, &point_2g_calc), 1); - - // Subtraction. - assert!(eq(&point_9g, &sub(&point_2g, &point_minus_7g_calc)), 1); - - // Hash-to-group using suite `BLS12381G2_XMD:SHA-256_SSWU_RO_`. - // Test vectors source: https://www.ietf.org/archive/id/draft-irtf-cfrg-hash-to-curve-16.html#name-bls12381g2_xmdsha-256_sswu_ - let actual = hash_to(&b"QUUX-V01-CS02-with-BLS12381G2_XMD:SHA-256_SSWU_RO_", &b""); - let expected = std::option::extract(&mut deserialize(&x"05cb8437535e20ecffaef7752baddf98034139c38452458baeefab379ba13dff5bf5dd71b72418717047f5b0f37da03d0141ebfbdca40eb85b87142e130ab689c673cf60f1a3e98d69335266f30d9b8d4ac44c1038e9dcdd5393faf5c41fb78a12424ac32561493f3fe3c260708a12b7c620e7be00099a974e259ddc7d1f6395c3c811cdd19f1e8dbf3e9ecfdcbab8d60503921d7f6a12805e72940b963c0cf3471c7b2a524950ca195d11062ee75ec076daf2d4bc358c4b190c0c98064fdd92")); - assert!(eq(&expected, &actual), 1); - let actual = hash_to(&b"QUUX-V01-CS02-with-BLS12381G2_XMD:SHA-256_SSWU_RO_", &b"abcdef0123456789"); - let expected = std::option::extract(&mut deserialize(&x"190d119345b94fbd15497bcba94ecf7db2cbfd1e1fe7da034d26cbba169fb3968288b3fafb265f9ebd380512a71c3f2c121982811d2491fde9ba7ed31ef9ca474f0e1501297f68c298e9f4c0028add35aea8bb83d53c08cfc007c1e005723cd00bb5e7572275c567462d91807de765611490205a941a5a6af3b1691bfe596c31225d3aabdf15faff860cb4ef17c7c3be05571a0f8d3c08d094576981f4a3b8eda0a8e771fcdcc8ecceaf1356a6acf17574518acb506e435b639353c2e14827c8")); - assert!(eq(&expected, &actual), 1); - } - - #[test_only] - const FQ12_ONE_SERIALIZED: vector = x"010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; - #[test_only] - const GT_GENERATOR_SERIALIZED: vector = x"b68917caaa0543a808c53908f694d1b6e7b38de90ce9d83d505ca1ef1b442d2727d7d06831d8b2a7920afc71d8eb50120f17a0ea982a88591d9f43503e94a8f1abaf2e4589f65aafb7923c484540a868883432a5c60e75860b11e5465b1c9a08873ec29e844c1c888cb396933057ffdd541b03a5220eda16b2b3a6728ea678034ce39c6839f20397202d7c5c44bb68134f93193cec215031b17399577a1de5ff1f5b0666bdd8907c61a7651e4e79e0372951505a07fa73c25788db6eb8023519a5aa97b51f1cad1d43d8aabbff4dc319c79a58cafc035218747c2f75daf8f2fb7c00c44da85b129113173d4722f5b201b6b4454062e9ea8ba78c5ca3cadaf7238b47bace5ce561804ae16b8f4b63da4645b8457a93793cbd64a7254f150781019de87ee42682940f3e70a88683d512bb2c3fb7b2434da5dedbb2d0b3fb8487c84da0d5c315bdd69c46fb05d23763f2191aabd5d5c2e12a10b8f002ff681bfd1b2ee0bf619d80d2a795eb22f2aa7b85d5ffb671a70c94809f0dafc5b73ea2fb0657bae23373b4931bc9fa321e8848ef78894e987bff150d7d671aee30b3931ac8c50e0b3b0868effc38bf48cd24b4b811a2995ac2a09122bed9fd9fa0c510a87b10290836ad06c8203397b56a78e9a0c61c77e56ccb4f1bc3d3fcaea7550f3503efe30f2d24f00891cb45620605fcfaa4292687b3a7db7c1c0554a93579e889a121fd8f72649b2402996a084d2381c5043166673b3849e4fd1e7ee4af24aa8ed443f56dfd6b68ffde4435a92cd7a4ac3bc77e1ad0cb728606cf08bf6386e5410f"; - #[test_only] - const GT_GENERATOR_MUL_BY_7_SERIALIZED: vector = x"2041ea7b66c19680e2c0bb23245a71918753220b31f88a925aa9b1e192e7c188a0b365cb994b3ec5e809206117c6411242b940b10caa37ce734496b3b7c63578a0e3c076f9b31a7ca13a716262e0e4cda4ac994efb9e19893cbfe4d464b9210d099d808a08b3c4c3846e7529984899478639c4e6c46152ef49a04af9c8e6ff442d286c4613a3dac6a4bee4b40e1f6b030f2871dabe4223b250c3181ecd3bc6819004745aeb6bac567407f2b9c7d1978c45ee6712ae46930bc00638383f6696158bad488cbe7663d681c96c035481dbcf78e7a7fbaec3799163aa6914cef3365156bdc3e533a7c883d5974e3462ac6f19e3f9ce26800ae248a45c5f0dd3a48a185969224e6cd6af9a048241bdcac9800d94aeee970e08488fb961e36a769b6c185d185b4605dc9808517196bba9d00a3e37bca466c19187486db104ee03962d39fe473e276355618e44c965f05082bb027a7baa4bcc6d8c0775c1e8a481e77df36ddad91e75a982302937f543a11fe71922dcd4f46fe8f951f91cde412b359507f2b3b6df0374bfe55c9a126ad31ce254e67d64194d32d7955ec791c9555ea5a917fc47aba319e909de82da946eb36e12aff936708402228295db2712f2fc807c95092a86afd71220699df13e2d2fdf2857976cb1e605f72f1b2edabadba3ff05501221fe81333c13917c85d725ce92791e115eb0289a5d0b3330901bb8b0ed146abeb81381b7331f1c508fb14e057b05d8b0190a9e74a3d046dcd24e7ab747049945b3d8a120c4f6d88e67661b55573aa9b361367488a1ef7dffd967d64a1518"; - #[test_only] - const GT_GENERATOR_MUL_BY_7_NEG_SERIALIZED: vector = x"2041ea7b66c19680e2c0bb23245a71918753220b31f88a925aa9b1e192e7c188a0b365cb994b3ec5e809206117c6411242b940b10caa37ce734496b3b7c63578a0e3c076f9b31a7ca13a716262e0e4cda4ac994efb9e19893cbfe4d464b9210d099d808a08b3c4c3846e7529984899478639c4e6c46152ef49a04af9c8e6ff442d286c4613a3dac6a4bee4b40e1f6b030f2871dabe4223b250c3181ecd3bc6819004745aeb6bac567407f2b9c7d1978c45ee6712ae46930bc00638383f6696158bad488cbe7663d681c96c035481dbcf78e7a7fbaec3799163aa6914cef3365156bdc3e533a7c883d5974e3462ac6f19e3f9ce26800ae248a45c5f0dd3a48a185969224e6cd6af9a048241bdcac9800d94aeee970e08488fb961e36a769b6c184e92a4b9fa2366b1ae8ebdf5542fa1e0ec390c90df40a91e5261800581b5492bd9640d1c5352babc551d1a49998f4517312f55b4339272b28a3e6b0c7d182e2bb61bd7d72b29ae3696db8fafe32b904ab5d0764e46bf21f9a0c9a1f7bedc6b12b9f64820fc8b3fd4a26541472be3c9c93d784cdd53a059d1604bf3292fedd1babfb00398128e3241bc63a5a47b5e9207fcb0c88f7bfddc376a242c9f0c032ba28eec8670f1fa1d47567593b4571c983b8015df91cfa1241b7fb8a57e0e6e01145b98de017eccc2a66e83ced9d83119a505e552467838d35b8ce2f4d7cc9a894f6dee922f35f0e72b7e96f0879b0c8614d3f9e5f5618b5be9b82381628448641a8bb0fd1dffb16c70e6831d8d69f61f2a2ef9e90c421f7a5b1ce7a5d113c7eb01"; - - #[test(fx = @std)] - fun test_gt(fx: signer) { - enable_cryptography_algebra_natives(&fx); - - // Special constants. - assert!(R_SERIALIZED == order(), 1); - let identity = zero(); - let generator = one(); - - // Serialization/deserialization. - assert!(GT_GENERATOR_SERIALIZED == serialize(&generator), 1); - let generator_from_deser = std::option::extract(&mut deserialize(>_GENERATOR_SERIALIZED)); - assert!(eq(&generator, &generator_from_deser), 1); - assert!(FQ12_ONE_SERIALIZED == serialize(&identity), 1); - let identity_from_deser = std::option::extract(&mut deserialize(&FQ12_ONE_SERIALIZED)); - assert!(eq(&identity, &identity_from_deser), 1); - let element_7g_from_deser = std::option::extract(&mut deserialize(>_GENERATOR_MUL_BY_7_SERIALIZED - )); - assert!(std::option::is_none(&deserialize(&x"ffff")), 1); - - // Deserialization should fail if given an element in Fq12 but not in the prime-order subgroup. - assert!(std::option::is_none(&deserialize(&x"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000")), 1); - - // Deserialization should fail if given a byte array of wrong size. - assert!(std::option::is_none(&deserialize(&x"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ab")), 1); - - // Element scalar multiplication. - let scalar_7 = from_u64(7); - let element_7g_calc = scalar_mul(&generator, &scalar_7); - assert!(eq(&element_7g_calc, &element_7g_from_deser), 1); - assert!(GT_GENERATOR_MUL_BY_7_SERIALIZED == serialize(&element_7g_calc), 1); - - // Element negation. - let element_minus_7g_calc = neg(&element_7g_calc); - assert!(GT_GENERATOR_MUL_BY_7_NEG_SERIALIZED == serialize(&element_minus_7g_calc), 1); - - // Element addition. - let scalar_9 = from_u64(9); - let element_9g = scalar_mul(&generator, &scalar_9); - let scalar_2 = from_u64(2); - let element_2g = scalar_mul(&generator, &scalar_2); - let element_2g_calc = add(&element_minus_7g_calc, &element_9g); - assert!(eq(&element_2g, &element_2g_calc), 1); - - // Subtraction. - assert!(eq(&element_9g, &sub(&element_2g, &element_minus_7g_calc)), 1); - - // Upcasting to Fq12. - assert!(eq(&one(), &upcast(&identity)), 1); - } - - #[test_only] - use aptos_std::crypto_algebra::{zero, one, from_u64, eq, deserialize, serialize, neg, add, sub, mul, div, inv, rand_insecure, sqr, order, scalar_mul, multi_scalar_mul, double, hash_to, upcast, enable_cryptography_algebra_natives, pairing, multi_pairing, downcast, Element}; - - #[test_only] - const FR_VAL_0_SERIALIZED_LSB: vector = x"0000000000000000000000000000000000000000000000000000000000000000"; - #[test_only] - const FR_VAL_1_SERIALIZED_LSB: vector = x"0100000000000000000000000000000000000000000000000000000000000000"; - #[test_only] - const FR_VAL_7_SERIALIZED_LSB: vector = x"0700000000000000000000000000000000000000000000000000000000000000"; - #[test_only] - const FR_VAL_7_SERIALIZED_MSB: vector = x"0000000000000000000000000000000000000000000000000000000000000007"; - #[test_only] - const FR_VAL_7_NEG_SERIALIZED_LSB: vector = x"fafffffffefffffffe5bfeff02a4bd5305d8a10908d83933487d9d2953a7ed73"; - - #[test(fx = @std)] - fun test_fr(fx: signer) { - enable_cryptography_algebra_natives(&fx); - - // Constants. - assert!(R_SERIALIZED == order(), 1); - - // Serialization/deserialization. - let val_0 = zero(); - let val_1 = one(); - assert!(FR_VAL_0_SERIALIZED_LSB == serialize(&val_0), 1); - assert!(FR_VAL_1_SERIALIZED_LSB == serialize(&val_1), 1); - let val_7 = from_u64(7); - let val_7_2nd = std::option::extract(&mut deserialize(&FR_VAL_7_SERIALIZED_LSB)); - let val_7_3rd = std::option::extract(&mut deserialize(&FR_VAL_7_SERIALIZED_MSB)); - assert!(eq(&val_7, &val_7_2nd), 1); - assert!(eq(&val_7, &val_7_3rd), 1); - assert!(FR_VAL_7_SERIALIZED_LSB == serialize(&val_7), 1); - assert!(FR_VAL_7_SERIALIZED_MSB == serialize(&val_7), 1); - - // Deserialization should fail if given a byte array of right size but the value is not a member. - assert!(std::option::is_none(&deserialize(&x"01000000fffffffffe5bfeff02a4bd5305d8a10908d83933487d9d2953a7ed73")), 1); - assert!(std::option::is_none(&deserialize(&x"73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000001")), 1); - - // Deserialization should fail if given a byte array of wrong size. - assert!(std::option::is_none(&deserialize(&x"01000000fffffffffe5bfeff02a4bd5305d8a10908d83933487d9d2953a7ed7300")), 1); - assert!(std::option::is_none(&deserialize(&x"0073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000001")), 1); - assert!(std::option::is_none(&deserialize(&x"ffff")), 1); - assert!(std::option::is_none(&deserialize(&x"ffff")), 1); - - // Negation. - let val_minus_7 = neg(&val_7); - assert!(FR_VAL_7_NEG_SERIALIZED_LSB == serialize(&val_minus_7), 1); - - // Addition. - let val_9 = from_u64(9); - let val_2 = from_u64(2); - assert!(eq(&val_2, &add(&val_minus_7, &val_9)), 1); - - // Subtraction. - assert!(eq(&val_9, &sub(&val_2, &val_minus_7)), 1); - - // Multiplication. - let val_63 = from_u64(63); - assert!(eq(&val_63, &mul(&val_7, &val_9)), 1); - - // division. - let val_0 = from_u64(0); - assert!(eq(&val_7, &std::option::extract(&mut div(&val_63, &val_9))), 1); - assert!(std::option::is_none(&div(&val_63, &val_0)), 1); - - // Inversion. - assert!(eq(&val_minus_7, &neg(&val_7)), 1); - assert!(std::option::is_none(&inv(&val_0)), 1); - - // Squaring. - let val_x = rand_insecure(); - assert!(eq(&mul(&val_x, &val_x), &sqr(&val_x)), 1); - } - - #[test(fx = @std)] - fun test_pairing(fx: signer) { - enable_cryptography_algebra_natives(&fx); - - // pairing(a*P,b*Q) == (a*b)*pairing(P,Q) - let element_p = rand_insecure(); - let element_q = rand_insecure(); - let a = rand_insecure(); - let b = rand_insecure(); - let gt_element = pairing(&scalar_mul(&element_p, &a), &scalar_mul(&element_q, &b)); - let gt_element_another = scalar_mul(&pairing(&element_p, &element_q), &mul(&a, &b)); - assert!(eq(>_element, >_element_another), 1); - } - - #[test(fx = @std)] - fun test_multi_pairing(fx: signer) { - enable_cryptography_algebra_natives(&fx); - - // Will compute e(a0*P0,b0*Q0)+e(a1*P1,b1*Q1)+e(a2*P2,b2*Q2). - let a0 = rand_insecure(); - let a1 = rand_insecure(); - let a2 = rand_insecure(); - let element_p0 = rand_insecure(); - let element_p1 = rand_insecure(); - let element_p2 = rand_insecure(); - let p0_a0 = scalar_mul(&element_p0, &a0); - let p1_a1 = scalar_mul(&element_p1, &a1); - let p2_a2 = scalar_mul(&element_p2, &a2); - let b0 = rand_insecure(); - let b1 = rand_insecure(); - let b2 = rand_insecure(); - let element_q0 = rand_insecure(); - let element_q1 = rand_insecure(); - let element_q2 = rand_insecure(); - let q0_b0 = scalar_mul(&element_q0, &b0); - let q1_b1 = scalar_mul(&element_q1, &b1); - let q2_b2 = scalar_mul(&element_q2, &b2); - - // Naive method. - let n0 = pairing(&p0_a0, &q0_b0); - let n1 = pairing(&p1_a1, &q1_b1); - let n2 = pairing(&p2_a2, &q2_b2); - let n = zero(); - n = add(&n, &n0); - n = add(&n, &n1); - n = add(&n, &n2); - - // Efficient API. - let m = multi_pairing(&vector[p0_a0, p1_a1, p2_a2], &vector[q0_b0, q1_b1, q2_b2]); - assert!(eq(&n, &m), 1); - } - - #[test(fx = @std)] - #[expected_failure(abort_code = 0x010002, location = aptos_std::crypto_algebra)] - fun test_multi_pairing_should_abort_when_sizes_mismatch(fx: signer) { - enable_cryptography_algebra_natives(&fx); - let g1_elements = vector[rand_insecure()]; - let g2_elements = vector[rand_insecure(), rand_insecure()]; - multi_pairing(&g1_elements, &g2_elements); - } - - #[test(fx = @std)] - #[expected_failure(abort_code = 0x010002, location = aptos_std::crypto_algebra)] - fun test_multi_scalar_mul_should_abort_when_sizes_mismatch(fx: signer) { - enable_cryptography_algebra_natives(&fx); - let elements = vector[rand_insecure()]; - let scalars = vector[rand_insecure(), rand_insecure()]; - multi_scalar_mul(&elements, &scalars); - } - - #[test_only] - /// The maximum number of `G1` elements that can be created in a transaction, - /// calculated by the current memory limit (1MB) and the in-mem G1 representation size (144 bytes per element). - const G1_NUM_MAX: u64 = 1048576 / 144; - - #[test(fx = @std)] - fun test_memory_limit(fx: signer) { - enable_cryptography_algebra_natives(&fx); - let remaining = G1_NUM_MAX; - while (remaining > 0) { - zero(); - remaining = remaining - 1; - } - } - - #[test(fx = @std)] - #[expected_failure(abort_code = 0x090003, location = std::crypto_algebra)] - fun test_memory_limit_exceeded_with_g1(fx: signer) { - enable_cryptography_algebra_natives(&fx); - let remaining = G1_NUM_MAX + 1; - while (remaining > 0) { - zero(); - remaining = remaining - 1; - } - } - - // - // (Tests end here.) - // -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/AptosStdlib/bn254_algebra.move b/examples/oft-movement/build/oft/sources/dependencies/AptosStdlib/bn254_algebra.move deleted file mode 100644 index a5cff4df7..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/AptosStdlib/bn254_algebra.move +++ /dev/null @@ -1,855 +0,0 @@ -/// This module defines marker types, constants and test cases for working with BN254 curves using the generic API defined in `algebra.move`. -/// BN254 was sampled as part of the [\[BCTV14\]](https://eprint.iacr.org/2013/879.pdf) paper . -/// The name denotes that it is a Barreto-Naehrig curve of embedding degree 12, defined over a 254-bit (prime) field. -/// The scalar field is highly 2-adic which supports subgroups of roots of unity of size <= 2^28. -/// (as (21888242871839275222246405745257275088548364400416034343698204186575808495617 - 1) mod 2^28 = 0) -/// -/// This curve is also implemented in [libff](https://github.com/scipr-lab/libff/tree/master/libff/algebra/curves/alt_bn128) under the name `bn128`. -/// It is the same as the `bn254` curve used in Ethereum (eg: [go-ethereum](https://github.com/ethereum/go-ethereum/tree/master/crypto/bn254/cloudflare)). -/// -/// #CAUTION -/// **This curve does not satisfy the 128-bit security level anymore.** -/// -/// Its current security is estimated at 128-bits (see "Updating Key Size Estimations for Pairings"; by Barbulescu, Razvan and Duquesne, Sylvain; in Journal of Cryptology; 2019; https://doi.org/10.1007/s00145-018-9280-5) -/// -/// -/// Curve information: -/// * Base field: q = -/// 21888242871839275222246405745257275088696311157297823662689037894645226208583 -/// * Scalar field: r = -/// 21888242871839275222246405745257275088548364400416034343698204186575808495617 -/// * valuation(q - 1, 2) = 1 -/// * valuation(r - 1, 2) = 28 -/// * G1 curve equation: y^2 = x^3 + 3 -/// * G2 curve equation: y^2 = x^3 + B, where -/// * B = 3/(u+9) where Fq2 is represented as Fq\[u\]/(u^2+1) = -/// Fq2(19485874751759354771024239261021720505790618469301721065564631296452457478373, -/// 266929791119991161246907387137283842545076965332900288569378510910307636690) -/// -/// -/// Currently-supported BN254 structures include `Fq12`, `Fr`, `Fq`, `Fq2`, `G1`, `G2` and `Gt`, -/// along with their widely-used serialization formats, -/// the pairing between `G1`, `G2` and `Gt`. -/// -/// Other unimplemented BN254 structures and serialization formats are also listed here, -/// as they help define some of the currently supported structures. -/// Their implementation may also be added in the future. -/// -/// `Fq2`: The finite field $F_{q^2}$ that can be used as the base field of $G_2$ -/// which is an extension field of `Fq`, constructed as $F_{q^2}=F_{q}[u]/(u^2+1)$. -/// -/// `FormatFq2LscLsb`: A serialization scheme for `Fq2` elements, -/// where an element $(c_0+c_1\cdot u)$ is represented by a byte array `b[]` of size N=64, -/// which is a concatenation of its coefficients serialized, with the least significant coefficient (LSC) coming first. -/// - `b[0..32]` is $c_0$ serialized using `FormatFqLscLsb`. -/// - `b[32..64]` is $c_1$ serialized using `FormatFqLscLsb`. -/// -/// `Fq6`: the finite field $F_{q^6}$ used in BN254 curves, -/// which is an extension field of `Fq2`, constructed as $F_{q^6}=F_{q^2}[v]/(v^3-u-9)$. -/// -/// `FormatFq6LscLsb`: a serialization scheme for `Fq6` elements, -/// where an element in the form $(c_0+c_1\cdot v+c_2\cdot v^2)$ is represented by a byte array `b[]` of size 192, -/// which is a concatenation of its coefficients serialized, with the least significant coefficient (LSC) coming first: -/// - `b[0..64]` is $c_0$ serialized using `FormatFq2LscLsb`. -/// - `b[64..128]` is $c_1$ serialized using `FormatFq2LscLsb`. -/// - `b[128..192]` is $c_2$ serialized using `FormatFq2LscLsb`. -/// -/// `G1Full`: a group constructed by the points on the BN254 curve $E(F_q): y^2=x^3+3$ and the point at infinity, -/// under the elliptic curve point addition. -/// It contains the prime-order subgroup $G_1$ used in pairing. -/// -/// `G2Full`: a group constructed by the points on a curve $E'(F_{q^2}): y^2=x^3+3/(u+9)$ and the point at infinity, -/// under the elliptic curve point addition. -/// It contains the prime-order subgroup $G_2$ used in pairing. -module std::bn254_algebra { - // - // Marker types + serialization formats begin. - // - - /// The finite field $F_r$ that can be used as the scalar fields - /// associated with the groups $G_1$, $G_2$, $G_t$ in BN254-based pairing. - struct Fr {} - - /// A serialization format for `Fr` elements, - /// where an element is represented by a byte array `b[]` of size 32 with the least significant byte (LSB) coming first. - /// - /// NOTE: other implementation(s) using this format: ark-bn254-0.4.0. - struct FormatFrLsb {} - - /// A serialization scheme for `Fr` elements, - /// where an element is represented by a byte array `b[]` of size 32 with the most significant byte (MSB) coming first. - /// - /// NOTE: other implementation(s) using this format: ark-bn254-0.4.0. - struct FormatFrMsb {} - - /// The finite field $F_q$ that can be used as the base field of $G_1$ - struct Fq {} - - /// A serialization format for `Fq` elements, - /// where an element is represented by a byte array `b[]` of size 32 with the least significant byte (LSB) coming first. - /// - /// NOTE: other implementation(s) using this format: ark-bn254-0.4.0. - struct FormatFqLsb {} - - /// A serialization scheme for `Fq` elements, - /// where an element is represented by a byte array `b[]` of size 32 with the most significant byte (MSB) coming first. - /// - /// NOTE: other implementation(s) using this format: ark-bn254-0.4.0. - struct FormatFqMsb {} - - /// The finite field $F_{q^12}$ used in BN254 curves, - /// which is an extension field of `Fq6` (defined in the module documentation), constructed as $F_{q^12}=F_{q^6}[w]/(w^2-v)$. - /// The field can downcast to `Gt` if it's an element of the multiplicative subgroup `Gt` of `Fq12` - /// with a prime order $r$ = 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000001. - struct Fq12 {} - /// A serialization scheme for `Fq12` elements, - /// where an element $(c_0+c_1\cdot w)$ is represented by a byte array `b[]` of size 384, - /// which is a concatenation of its coefficients serialized, with the least significant coefficient (LSC) coming first. - /// - `b[0..192]` is $c_0$ serialized using `FormatFq6LscLsb` (defined in the module documentation). - /// - `b[192..384]` is $c_1$ serialized using `FormatFq6LscLsb`. - /// - /// NOTE: other implementation(s) using this format: ark-bn254-0.4.0. - struct FormatFq12LscLsb {} - - /// The group $G_1$ in BN254-based pairing $G_1 \times G_2 \rightarrow G_t$. - /// It is a subgroup of `G1Full` (defined in the module documentation) with a prime order $r$ - /// equal to 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000001. - /// (so `Fr` is the associated scalar field). - struct G1 {} - - /// A serialization scheme for `G1` elements derived from arkworks.rs. - /// - /// Below is the serialization procedure that takes a `G1` element `p` and outputs a byte array of size N=64. - /// 1. Let `(x,y)` be the coordinates of `p` if `p` is on the curve, or `(0,0)` otherwise. - /// 1. Serialize `x` and `y` into `b_x[]` and `b_y[]` respectively using `FormatFqLsb` (defined in the module documentation). - /// 1. Concatenate `b_x[]` and `b_y[]` into `b[]`. - /// 1. If `p` is the point at infinity, set the infinity bit: `b[N-1]: = b[N-1] | 0b0100_0000`. - /// 1. If `y > -y`, set the lexicographical bit: `b[N-1]: = b[N-1] | 0b1000_0000`. - /// 1. Return `b[]`. - /// - /// Below is the deserialization procedure that takes a byte array `b[]` and outputs either a `G1` element or none. - /// 1. If the size of `b[]` is not N, return none. - /// 1. Compute the infinity flag as `b[N-1] & 0b0100_0000 != 0`. - /// 1. If the infinity flag is set, return the point at infinity. - /// 1. Deserialize `[b[0], b[1], ..., b[N/2-1]]` to `x` using `FormatFqLsb`. If `x` is none, return none. - /// 1. Deserialize `[b[N/2], ..., b[N] & 0b0011_1111]` to `y` using `FormatFqLsb`. If `y` is none, return none. - /// 1. Check if `(x,y)` is on curve `E`. If not, return none. - /// 1. Check if `(x,y)` is in the subgroup of order `r`. If not, return none. - /// 1. Return `(x,y)`. - /// - /// NOTE: other implementation(s) using this format: ark-bn254-0.4.0. - struct FormatG1Uncompr {} - - /// A serialization scheme for `G1` elements derived from arkworks.rs - /// - /// Below is the serialization procedure that takes a `G1` element `p` and outputs a byte array of size N=32. - /// 1. Let `(x,y)` be the coordinates of `p` if `p` is on the curve, or `(0,0)` otherwise. - /// 1. Serialize `x` into `b[]` using `FormatFqLsb` (defined in the module documentation). - /// 1. If `p` is the point at infinity, set the infinity bit: `b[N-1]: = b[N-1] | 0b0100_0000`. - /// 1. If `y > -y`, set the lexicographical flag: `b[N-1] := b[N-1] | 0x1000_0000`. - /// 1. Return `b[]`. - /// - /// Below is the deserialization procedure that takes a byte array `b[]` and outputs either a `G1` element or none. - /// 1. If the size of `b[]` is not N, return none. - /// 1. Compute the infinity flag as `b[N-1] & 0b0100_0000 != 0`. - /// 1. If the infinity flag is set, return the point at infinity. - /// 1. Compute the lexicographical flag as `b[N-1] & 0b1000_0000 != 0`. - /// 1. Deserialize `[b[0], b[1], ..., b[N/2-1] & 0b0011_1111]` to `x` using `FormatFqLsb`. If `x` is none, return none. - /// 1. Solve the curve equation with `x` for `y`. If no such `y` exists, return none. - /// 1. Let `y'` be `max(y,-y)` if the lexicographical flag is set, or `min(y,-y)` otherwise. - /// 1. Check if `(x,y')` is in the subgroup of order `r`. If not, return none. - /// 1. Return `(x,y')`. - /// - /// NOTE: other implementation(s) using this format: ark-bn254-0.4.0. - struct FormatG1Compr {} - - /// The group $G_2$ in BN254-based pairing $G_1 \times G_2 \rightarrow G_t$. - /// It is a subgroup of `G2Full` (defined in the module documentation) with a prime order $r$ equal to - /// 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000001. - /// (so `Fr` is the scalar field). - struct G2 {} - - /// A serialization scheme for `G2` elements derived from arkworks.rs. - /// - /// Below is the serialization procedure that takes a `G2` element `p` and outputs a byte array of size N=128. - /// 1. Let `(x,y)` be the coordinates of `p` if `p` is on the curve, or `(0,0)` otherwise. - /// 1. Serialize `x` and `y` into `b_x[]` and `b_y[]` respectively using `FormatFq2LscLsb` (defined in the module documentation). - /// 1. Concatenate `b_x[]` and `b_y[]` into `b[]`. - /// 1. If `p` is the point at infinity, set the infinity bit: `b[N-1]: = b[N-1] | 0b0100_0000`. - /// 1. If `y > -y`, set the lexicographical bit: `b[N-1]: = b[N-1] | 0b1000_0000`. - /// 1. Return `b[]`. - /// - /// Below is the deserialization procedure that takes a byte array `b[]` and outputs either a `G1` element or none. - /// 1. If the size of `b[]` is not N, return none. - /// 1. Compute the infinity flag as `b[N-1] & 0b0100_0000 != 0`. - /// 1. If the infinity flag is set, return the point at infinity. - /// 1. Deserialize `[b[0], b[1], ..., b[N/2-1]]` to `x` using `FormatFq2LscLsb`. If `x` is none, return none. - /// 1. Deserialize `[b[N/2], ..., b[N] & 0b0011_1111]` to `y` using `FormatFq2LscLsb`. If `y` is none, return none. - /// 1. Check if `(x,y)` is on curve `E`. If not, return none. - /// 1. Check if `(x,y)` is in the subgroup of order `r`. If not, return none. - /// 1. Return `(x,y)`. - /// - /// NOTE: other implementation(s) using this format: ark-bn254-0.4.0. - struct FormatG2Uncompr {} - - /// A serialization scheme for `G1` elements derived from arkworks.rs - /// - /// Below is the serialization procedure that takes a `G1` element `p` and outputs a byte array of size N=64. - /// 1. Let `(x,y)` be the coordinates of `p` if `p` is on the curve, or `(0,0)` otherwise. - /// 1. Serialize `x` into `b[]` using `FormatFq2LscLsb` (defined in the module documentation). - /// 1. If `p` is the point at infinity, set the infinity bit: `b[N-1]: = b[N-1] | 0b0100_0000`. - /// 1. If `y > -y`, set the lexicographical flag: `b[N-1] := b[N-1] | 0x1000_0000`. - /// 1. Return `b[]`. - /// - /// Below is the deserialization procedure that takes a byte array `b[]` and outputs either a `G1` element or none. - /// 1. If the size of `b[]` is not N, return none. - /// 1. Compute the infinity flag as `b[N-1] & 0b0100_0000 != 0`. - /// 1. If the infinity flag is set, return the point at infinity. - /// 1. Compute the lexicographical flag as `b[N-1] & 0b1000_0000 != 0`. - /// 1. Deserialize `[b[0], b[1], ..., b[N/2-1] & 0b0011_1111]` to `x` using `FormatFq2LscLsb`. If `x` is none, return none. - /// 1. Solve the curve equation with `x` for `y`. If no such `y` exists, return none. - /// 1. Let `y'` be `max(y,-y)` if the lexicographical flag is set, or `min(y,-y)` otherwise. - /// 1. Check if `(x,y')` is in the subgroup of order `r`. If not, return none. - /// 1. Return `(x,y')`. - /// - /// NOTE: other implementation(s) using this format: ark-bn254-0.4.0. - struct FormatG2Compr {} - - /// The group $G_t$ in BN254-based pairing $G_1 \times G_2 \rightarrow G_t$. - /// It is a multiplicative subgroup of `Fq12`, so it can upcast to `Fq12`. - /// with a prime order $r$ equal to 0x73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000001. - /// (so `Fr` is the scalar field). - /// The identity of `Gt` is 1. - struct Gt {} - - /// A serialization scheme for `Gt` elements. - /// - /// To serialize, it treats a `Gt` element `p` as an `Fq12` element and serialize it using `FormatFq12LscLsb`. - /// - /// To deserialize, it uses `FormatFq12LscLsb` to try deserializing to an `Fq12` element then test the membership in `Gt`. - /// - /// NOTE: other implementation(s) using this format: ark-bn254-0.4.0. - struct FormatGt {} - - // Tests begin. - - #[test_only] - fun rand_vector(num: u64): vector> { - let elements = vector[]; - while (num > 0) { - std::vector::push_back(&mut elements, rand_insecure()); - num = num - 1; - }; - elements - } - - - #[test_only] - const FQ12_VAL_0_SERIALIZED: vector = x"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; - #[test_only] - const FQ12_VAL_1_SERIALIZED: vector = x"010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; - #[test_only] - const FQ12_VAL_7_SERIALIZED: vector = x"070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; - #[test_only] - const FQ12_VAL_7_NEG_SERIALIZED: vector = x"40fd7cd8168c203c8dca7168916a81975d588181b64550b829a031e1724e643000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; - #[test_only] - const Q12_SERIALIZED: vector = x"21f186cad2e2d4c1dbaf8a066b0ebf41f734e3f859b1c523a6c1f4d457413fdbe3cd44add090135d3ae519acc30ee3bdb6bfac6573b767e975b18a77d53cdcddebf3672c74da9d1409d51b2b2db7ff000d59e3aa7cf09220159f925c86b65459ca6558c4eaa703bf45d85030ff85cc6a879c7e2c4034f7045faf20e4d3dcfffac5eb6634c3e7b939b69b2be70bdf6b9a4680297839b4e3a48cd746bd4d0ea82749ffb7e71bd9b3fb10aa684d71e6adab1250b1d8604d91b51c76c256a50b60ddba2f52b6cc853ac926c6ea86d09d400b2f2330e5c8e92e38905ba50a50c9e11cd979c284bf1327ccdc051a6da1a4a7eac5cec16757a27a1a2311bedd108a9b21ac0814269e7523a5dd3a1f5f4767ffe504a6cb3994fb0ec98d5cd5da00b9cb1188a85f2aa871ecb8a0f9d64141f1ccd2699c138e0ef9ac4d8d6a692b29db0f38b60eb08426ab46109fbab9a5221bb44dd338aafebcc4e6c10dd933597f3ff44ba41d04e82871447f3a759cfa9397c22c0c77f13618dfb65adc8aacf008"; - - - #[test(fx = @std)] - fun test_fq12(fx: signer) { - enable_cryptography_algebra_natives(&fx); - - // Constants. - assert!(Q12_SERIALIZED == order(), 1); - - // Serialization/deserialization. - let val_0 = zero(); - let val_1 = one(); - assert!(FQ12_VAL_0_SERIALIZED == serialize(&val_0), 1); - assert!(FQ12_VAL_1_SERIALIZED == serialize(&val_1), 1); - let val_7 = from_u64(7); - let val_7_another = std::option::extract(&mut deserialize(&FQ12_VAL_7_SERIALIZED)); - assert!(eq(&val_7, &val_7_another), 1); - assert!(FQ12_VAL_7_SERIALIZED == serialize(&val_7), 1); - assert!(std::option::is_none(&deserialize(&x"ffff")), 1); - - // Negation. - let val_minus_7 = neg(&val_7); - assert!(FQ12_VAL_7_NEG_SERIALIZED == serialize(&val_minus_7), 1); - - // Addition. - let val_9 = from_u64(9); - let val_2 = from_u64(2); - assert!(eq(&val_2, &add(&val_minus_7, &val_9)), 1); - - // Subtraction. - assert!(eq(&val_9, &sub(&val_2, &val_minus_7)), 1); - - // Multiplication. - let val_63 = from_u64(63); - assert!(eq(&val_63, &mul(&val_7, &val_9)), 1); - - // division. - let val_0 = from_u64(0); - assert!(eq(&val_7, &std::option::extract(&mut div(&val_63, &val_9))), 1); - assert!(std::option::is_none(&div(&val_63, &val_0)), 1); - - // Inversion. - assert!(eq(&val_minus_7, &neg(&val_7)), 1); - assert!(std::option::is_none(&inv(&val_0)), 1); - - // Squaring. - let val_x = rand_insecure(); - assert!(eq(&mul(&val_x, &val_x), &sqr(&val_x)), 1); - - // Downcasting. - assert!(eq(&zero(), &std::option::extract(&mut downcast(&val_1))), 1); - // upcasting - assert!(eq(&val_1, &upcast(&zero())), 1); - } - - #[test_only] - const R_SERIALIZED: vector = x"010000f093f5e1439170b97948e833285d588181b64550b829a031e1724e6430"; - #[test_only] - const G1_INF_SERIALIZED_COMP: vector = x"0000000000000000000000000000000000000000000000000000000000000040"; - #[test_only] - const G1_INF_SERIALIZED_UNCOMP: vector = x"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040"; - #[test_only] - const G1_GENERATOR_SERIALIZED_COMP: vector = x"0100000000000000000000000000000000000000000000000000000000000000"; - #[test_only] - const G1_GENERATOR_SERIALIZED_UNCOMP: vector = x"01000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000"; - #[test_only] - const G1_GENERATOR_MUL_BY_7_SERIALIZED_COMP: vector = x"78e0ffab866b3a9876bd01b8ecc66fcb86936277f425539a758dbbd32e2b0717"; - #[test_only] - const G1_GENERATOR_MUL_BY_7_SERIALIZED_UNCOMP: vector = x"78e0ffab866b3a9876bd01b8ecc66fcb86936277f425539a758dbbd32e2b07179eafd4607f9f80771bf4185df03bfead7a3719fa4bb57b0152dd30d16cda8a16"; - #[test_only] - const G1_GENERATOR_MUL_BY_7_NEG_SERIALIZED_COMP: vector = x"78e0ffab866b3a9876bd01b8ecc66fcb86936277f425539a758dbbd32e2b0797"; - #[test_only] - const G1_GENERATOR_MUL_BY_7_NEG_SERIALIZED_UNCOMP: vector = x"78e0ffab866b3a9876bd01b8ecc66fcb86936277f425539a758dbbd32e2b0717a94da87797ec9fc471d6580ba12e83e9e22068876a90d4b6d7c200100674d999"; - - #[test(fx = @std)] - fun test_g1affine(fx: signer) { - enable_cryptography_algebra_natives(&fx); - - // Constants. - assert!(R_SERIALIZED == order(), 1); - let point_at_infinity = zero(); - let generator = one(); - - // Serialization/deserialization. - assert!(G1_GENERATOR_SERIALIZED_UNCOMP == serialize(&generator), 1); - assert!(G1_GENERATOR_SERIALIZED_COMP == serialize(&generator), 1); - let generator_from_comp = std::option::extract(&mut deserialize(&G1_GENERATOR_SERIALIZED_COMP)); - let generator_from_uncomp = std::option::extract(&mut deserialize(&G1_GENERATOR_SERIALIZED_UNCOMP)); - assert!(eq(&generator, &generator_from_comp), 1); - assert!(eq(&generator, &generator_from_uncomp), 1); - - // Deserialization should fail if given a byte array of correct size but the value is not a member. - assert!(std::option::is_none(&deserialize(&x"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff")), 1); - - // Deserialization should fail if given a byte array of wrong size. - assert!(std::option::is_none(&deserialize(&x"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff")), 1); - - assert!( - G1_INF_SERIALIZED_UNCOMP == serialize(&point_at_infinity), 1); - assert!(G1_INF_SERIALIZED_COMP == serialize(&point_at_infinity), 1); - let inf_from_uncomp = std::option::extract(&mut deserialize(&G1_INF_SERIALIZED_UNCOMP - )); - let inf_from_comp = std::option::extract(&mut deserialize(&G1_INF_SERIALIZED_COMP - )); - assert!(eq(&point_at_infinity, &inf_from_comp), 1); - assert!(eq(&point_at_infinity, &inf_from_uncomp), 1); - - let point_7g_from_uncomp = std::option::extract(&mut deserialize(&G1_GENERATOR_MUL_BY_7_SERIALIZED_UNCOMP - )); - let point_7g_from_comp = std::option::extract(&mut deserialize(&G1_GENERATOR_MUL_BY_7_SERIALIZED_COMP - )); - assert!(eq(&point_7g_from_comp, &point_7g_from_uncomp), 1); - - // Deserialization should fail if given a point on the curve but off its prime-order subgroup, e.g., `(0,2)`. - assert!(std::option::is_none(&deserialize(&x"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002")), 1); - assert!(std::option::is_none(&deserialize(&x"800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000")), 1); - - // Deserialization should fail if given a valid point in (Fq,Fq) but not on the curve. - assert!(std::option::is_none(&deserialize(&x"8959e137e0719bf872abb08411010f437a8955bd42f5ba20fca64361af58ce188b1adb96ef229698bb7860b79e24ba12000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000")), 1); - - // Deserialization should fail if given an invalid point (x not in Fq). - assert!(std::option::is_none(&deserialize(&x"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa76e9853b35f5c9b2002d9e5833fd8f9ab4cd3934a4722a06f6055bfca720c91629811e2ecae7f0cf301b6d07898a90f")), 1); - assert!(std::option::is_none(&deserialize(&x"9fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff")), 1); - - // Deserialization should fail if given a byte array of wrong size. - assert!(std::option::is_none(&deserialize(&x"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ab")), 1); - assert!(std::option::is_none(&deserialize(&x"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ab")), 1); - - // Scalar multiplication. - let scalar_7 = from_u64(7); - let point_7g_calc = scalar_mul(&generator, &scalar_7); - assert!(eq(&point_7g_calc, &point_7g_from_comp), 1); - assert!(G1_GENERATOR_MUL_BY_7_SERIALIZED_UNCOMP == serialize(&point_7g_calc), 1); - assert!(G1_GENERATOR_MUL_BY_7_SERIALIZED_COMP == serialize( &point_7g_calc), 1); - - // Multi-scalar multiplication. - let num_entries = 1; - while (num_entries < 10) { - let scalars = rand_vector(num_entries); - let elements = rand_vector(num_entries); - - let expected = zero(); - let i = 0; - while (i < num_entries) { - let element = std::vector::borrow(&elements, i); - let scalar = std::vector::borrow(&scalars, i); - expected = add(&expected, &scalar_mul(element, scalar)); - i = i + 1; - }; - - let actual = multi_scalar_mul(&elements, &scalars); - assert!(eq(&expected, &actual), 1); - - num_entries = num_entries + 1; - }; - - // Doubling. - let scalar_2 = from_u64(2); - let point_2g = scalar_mul(&generator, &scalar_2); - let point_double_g = double(&generator); - assert!(eq(&point_2g, &point_double_g), 1); - - // Negation. - let point_minus_7g_calc = neg(&point_7g_calc); - assert!(G1_GENERATOR_MUL_BY_7_NEG_SERIALIZED_COMP == serialize(&point_minus_7g_calc), 1); - assert!(G1_GENERATOR_MUL_BY_7_NEG_SERIALIZED_UNCOMP == serialize(&point_minus_7g_calc), 1); - - // Addition. - let scalar_9 = from_u64(9); - let point_9g = scalar_mul(&generator, &scalar_9); - let point_2g = scalar_mul(&generator, &scalar_2); - let point_2g_calc = add(&point_minus_7g_calc, &point_9g); - assert!(eq(&point_2g, &point_2g_calc), 1); - - // Subtraction. - assert!(eq(&point_9g, &sub(&point_2g, &point_minus_7g_calc)), 1); - } - - #[test_only] - const G2_INF_SERIALIZED_COMP: vector = x"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040"; - #[test_only] - const G2_INF_SERIALIZED_UNCOMP: vector = x"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040"; - #[test_only] - const G2_GENERATOR_SERIALIZED_COMP: vector = x"edf692d95cbdde46ddda5ef7d422436779445c5e66006a42761e1f12efde0018c212f3aeb785e49712e7a9353349aaf1255dfb31b7bf60723a480d9293938e19"; - #[test_only] - const G2_GENERATOR_SERIALIZED_UNCOMP: vector = x"edf692d95cbdde46ddda5ef7d422436779445c5e66006a42761e1f12efde0018c212f3aeb785e49712e7a9353349aaf1255dfb31b7bf60723a480d9293938e19aa7dfa6601cce64c7bd3430c69e7d1e38f40cb8d8071ab4aeb6d8cdba55ec8125b9722d1dcdaac55f38eb37033314bbc95330c69ad999eec75f05f58d0890609"; - #[test_only] - const G2_GENERATOR_MUL_BY_7_SERIALIZED_UNCOMP: vector = x"08b328aa2a1490c3892ae375ba53a257162f1cde012e70edf8fc27435ddc4b2255243646bade3e596dee466e51d40fbe631e55841e085d6ae2bd9a5a01ba03293f23144105e8212ed8df28ca0e8031d47b7a7de372b3ccee1750262af5ff921dd8e03503be1eedbaadf7e6c4a1be3670d14a46da5fafee7adbdeb2a6cdb7c803"; - #[test_only] - const G2_GENERATOR_MUL_BY_7_SERIALIZED_COMP: vector = x"08b328aa2a1490c3892ae375ba53a257162f1cde012e70edf8fc27435ddc4b2255243646bade3e596dee466e51d40fbe631e55841e085d6ae2bd9a5a01ba0329"; - #[test_only] - const G2_GENERATOR_MUL_BY_7_NEG_SERIALIZED_UNCOMP: vector = x"08b328aa2a1490c3892ae375ba53a257162f1cde012e70edf8fc27435ddc4b2255243646bade3e596dee466e51d40fbe631e55841e085d6ae2bd9a5a01ba032908da689711a4fe0db5ea489e82ea4fc3e1dd039e439283c911500bb77d4ed1126f1c47d5586d3381dfd28aa3efab4a278c0d3ba75696613d4ec17e3aa5969bac"; - #[test_only] - const G2_GENERATOR_MUL_BY_7_NEG_SERIALIZED_COMP: vector = x"08b328aa2a1490c3892ae375ba53a257162f1cde012e70edf8fc27435ddc4b2255243646bade3e596dee466e51d40fbe631e55841e085d6ae2bd9a5a01ba03a9"; - - #[test(fx = @std)] - fun test_g2affine(fx: signer) { - enable_cryptography_algebra_natives(&fx); - - // Special constants. - assert!(R_SERIALIZED == order(), 1); - let point_at_infinity = zero(); - let generator = one(); - - // Serialization/deserialization. - assert!(G2_GENERATOR_SERIALIZED_COMP == serialize(&generator), 1); - assert!(G2_GENERATOR_SERIALIZED_UNCOMP == serialize(&generator), 1); - let generator_from_uncomp = std::option::extract(&mut deserialize(&G2_GENERATOR_SERIALIZED_UNCOMP - )); - let generator_from_comp = std::option::extract(&mut deserialize(&G2_GENERATOR_SERIALIZED_COMP - )); - assert!(eq(&generator, &generator_from_comp), 1); - assert!(eq(&generator, &generator_from_uncomp), 1); - assert!(G2_INF_SERIALIZED_UNCOMP == serialize(&point_at_infinity), 1); - assert!(G2_INF_SERIALIZED_COMP == serialize(&point_at_infinity), 1); - let inf_from_uncomp = std::option::extract(&mut deserialize(&G2_INF_SERIALIZED_UNCOMP)); - let inf_from_comp = std::option::extract(&mut deserialize(&G2_INF_SERIALIZED_COMP)); - assert!(eq(&point_at_infinity, &inf_from_comp), 1); - assert!(eq(&point_at_infinity, &inf_from_uncomp), 1); - let point_7g_from_uncomp = std::option::extract(&mut deserialize(&G2_GENERATOR_MUL_BY_7_SERIALIZED_UNCOMP - )); - let point_7g_from_comp = std::option::extract(&mut deserialize(&G2_GENERATOR_MUL_BY_7_SERIALIZED_COMP - )); - assert!(eq(&point_7g_from_comp, &point_7g_from_uncomp), 1); - - // Deserialization should fail if given a point on the curve but not in the prime-order subgroup. - assert!(std::option::is_none(&deserialize(&x"f037d4ccd5ee751eba1c1fd4c7edbb76d2b04c3a1f3f554827cf37c3acbc2dbb7cdb320a2727c2462d6c55ca1f637707b96eeebc622c1dbe7c56c34f93887c8751b42bd04f29253a82251c192ef27ece373993b663f4360505299c5bd18c890ddd862a6308796bf47e2265073c1f7d81afd69f9497fc1403e2e97a866129b43b672295229c21116d4a99f3e5c2ae720a31f181dbed8a93e15f909c20cf69d11a8879adbbe6890740def19814e6d4ed23fb0dcbd79291655caf48b466ac9cae04")), 1); - assert!(std::option::is_none(&deserialize(&x"f037d4ccd5ee751eba1c1fd4c7edbb76d2b04c3a1f3f554827cf37c3acbc2dbb7cdb320a2727c2462d6c55ca1f637707b96eeebc622c1dbe7c56c34f93887c8751b42bd04f29253a82251c192ef27ece373993b663f4360505299c5bd18c890d")), 1); - - // Deserialization should fail if given a valid point in (Fq2,Fq2) but not on the curve. - assert!(std::option::is_none(&deserialize(&x"f037d4ccd5ee751eba1c1fd4c7edbb76d2b04c3a1f3f554827cf37c3acbc2dbb7cdb320a2727c2462d6c55ca1f637707b96eeebc622c1dbe7c56c34f93887c8751b42bd04f29253a82251c192ef27ece373993b663f4360505299c5bd18c890d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000")), 1); - - // Deserialization should fail if given an invalid point (x not in Fq2). - assert!(std::option::is_none(&deserialize(&x"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdd862a6308796bf47e2265073c1f7d81afd69f9497fc1403e2e97a866129b43b672295229c21116d4a99f3e5c2ae720a31f181dbed8a93e15f909c20cf69d11a8879adbbe6890740def19814e6d4ed23fb0dcbd79291655caf48b466ac9cae04")), 1); - assert!(std::option::is_none(&deserialize(&x"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff")), 1); - - // Deserialization should fail if given a byte array of wrong size. - assert!(std::option::is_none(&deserialize(&x"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ab")), 1); - assert!(std::option::is_none(&deserialize(&x"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ab")), 1); - - // Scalar multiplication. - let scalar_7 = from_u64(7); - let point_7g_calc = scalar_mul(&generator, &scalar_7); - assert!(eq(&point_7g_calc, &point_7g_from_comp), 1); - assert!(G2_GENERATOR_MUL_BY_7_SERIALIZED_UNCOMP == serialize(&point_7g_calc), 1); - assert!(G2_GENERATOR_MUL_BY_7_SERIALIZED_COMP == serialize(&point_7g_calc), 1); - - // Multi-scalar multiplication. - let num_entries = 1; - while (num_entries < 10) { - let scalars = rand_vector(num_entries); - let elements = rand_vector(num_entries); - - let expected = zero(); - let i = 0; - while (i < num_entries) { - let element = std::vector::borrow(&elements, i); - let scalar = std::vector::borrow(&scalars, i); - expected = add(&expected, &scalar_mul(element, scalar)); - i = i + 1; - }; - - let actual = multi_scalar_mul(&elements, &scalars); - assert!(eq(&expected, &actual), 1); - - num_entries = num_entries + 1; - }; - - // Doubling. - let scalar_2 = from_u64(2); - let point_2g = scalar_mul(&generator, &scalar_2); - let point_double_g = double(&generator); - assert!(eq(&point_2g, &point_double_g), 1); - - // Negation. - let point_minus_7g_calc = neg(&point_7g_calc); - assert!(G2_GENERATOR_MUL_BY_7_NEG_SERIALIZED_COMP == serialize(&point_minus_7g_calc), 1); - assert!(G2_GENERATOR_MUL_BY_7_NEG_SERIALIZED_UNCOMP == serialize(&point_minus_7g_calc), 1); - - // Addition. - let scalar_9 = from_u64(9); - let point_9g = scalar_mul(&generator, &scalar_9); - let point_2g = scalar_mul(&generator, &scalar_2); - let point_2g_calc = add(&point_minus_7g_calc, &point_9g); - assert!(eq(&point_2g, &point_2g_calc), 1); - - // Subtraction. - assert!(eq(&point_9g, &sub(&point_2g, &point_minus_7g_calc)), 1); - } - - #[test_only] - const FQ12_ONE_SERIALIZED: vector = x"010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; - #[test_only] - const GT_GENERATOR_SERIALIZED: vector = x"950e879d73631f5eb5788589eb5f7ef8d63e0a28de1ba00dfe4ca9ed3f252b264a8afb8eb4349db466ed1809ea4d7c39bdab7938821f1b0a00a295c72c2de002e01dbdfd0254134efcb1ec877395d25f937719b344adb1a58d129be2d6f2a9132b16a16e8ab030b130e69c69bd20b4c45986e6744a98314b5c1a0f50faa90b04dbaf9ef8aeeee3f50be31c210b598f4752f073987f9d35be8f6770d83f2ffc0af0d18dd9d2dbcdf943825acc12a7a9ddca45e629d962c6bd64908c3930a5541cfe2924dcc5580d5cef7a4bfdec90a91b59926f850d4a7923c01a5a5dbf0f5c094a2b9fb9d415820fa6b40c59bb9eade9c953407b0fc11da350a9d872cad6d3142974ca385854afdf5f583c04231adc5957c8914b6b20dc89660ed7c3bbe7c01d972be2d53ecdb27a1bcc16ac610db95aa7d237c8ff55a898cb88645a0e32530b23d7ebf5dafdd79b0f9c2ac4ba07ce18d3d16cf36e47916c4cae5d08d3afa813972c769e8514533e380c9443b3e1ee5c96fa3a0a73f301b626454721527bf900"; - #[test_only] - const GT_GENERATOR_MUL_BY_7_SERIALIZED: vector = x"533a587534641b568125fb273eac723c789a347eba9fcfd58d93742b3a0b782fd61bbf6202e04b8a33b6c60150fc62a071cb9ac9749a79031fd0dbb6dd8a1f2bcf1eb450bdf58fd3d124b2e0aaf878d11e96af3051631145a4bf0530b5d19d08bfe2d515530b9059525b2826587f7bf1f146bfd0e91e84411c7722abb7a8c418b20b1660b41e6949beff93b2b36303e74804df3335ab5bd85bfd7959d6fd3101d0bf6f681eb809c9a6c3544db7f81444e5c4fbdd0a31e920616ae08a2ab5f51ebf064c4906c7b29521e8fda3d704830a9a6ef5d455a85ae09216f55fd0e74d0aaf83ad81ba50218f08024910184c9ddab42a28f51912c779556c41c61aba2d075cfc020b61a18a9366c9f71658f00b44369bd86929725cf867a0b8fda694a7134a2790ebf19cbea1f972eedfd51787683f98d80895f630ff0bd513edebd5a217c00e231869178bd41cf47a7c0125379a3926353e5310a578066dfbb974424802b942a8b4f6338d7f9d8b9c4031dc46163a59c58ff503eca69b642398b5a1212b"; - #[test_only] - const GT_GENERATOR_MUL_BY_7_NEG_SERIALIZED: vector = x"533a587534641b568125fb273eac723c789a347eba9fcfd58d93742b3a0b782fd61bbf6202e04b8a33b6c60150fc62a071cb9ac9749a79031fd0dbb6dd8a1f2bcf1eb450bdf58fd3d124b2e0aaf878d11e96af3051631145a4bf0530b5d19d08bfe2d515530b9059525b2826587f7bf1f146bfd0e91e84411c7722abb7a8c418b20b1660b41e6949beff93b2b36303e74804df3335ab5bd85bfd7959d6fd3101d0bf6f681eb809c9a6c3544db7f81444e5c4fbdd0a31e920616ae08a2ab5f51e88f6308f10c56da66be273c4b965fe8cc3e98bac609df5d796893c81a26616269879cf565c3bffac84c82858791ee4bca82d598c9c33893ed433f01a58943629eb007acdb5ea95a826017a51397a755327bda8178dd3f3bfc1ff78e3cbb9bc1cfdd5ecec24ef619a93578388bb52fa2e1ec0a878214f1fb91dcb1df48678c11887ee59c0ad74956770d6f6eb8f454afd23324c436335ab3f23333627fe0b1c2e8ebad423205893bcef3ed527608e3a8123ffbbf1c04164118e3b0e49bdac4205"; - - - #[test(fx = @std)] - fun test_gt(fx: signer) { - enable_cryptography_algebra_natives(&fx); - - // Special constants. - assert!(R_SERIALIZED == order(), 1); - let identity = zero(); - let generator = one(); - - // Serialization/deserialization. - assert!(GT_GENERATOR_SERIALIZED == serialize(&generator), 1); - let generator_from_deser = std::option::extract(&mut deserialize(>_GENERATOR_SERIALIZED)); - assert!(eq(&generator, &generator_from_deser), 1); - assert!(FQ12_ONE_SERIALIZED == serialize(&identity), 1); - let identity_from_deser = std::option::extract(&mut deserialize(&FQ12_ONE_SERIALIZED)); - assert!(eq(&identity, &identity_from_deser), 1); - let element_7g_from_deser = std::option::extract(&mut deserialize(>_GENERATOR_MUL_BY_7_SERIALIZED - )); - assert!(std::option::is_none(&deserialize(&x"ffff")), 1); - - // Deserialization should fail if given an element in Fq12 but not in the prime-order subgroup. - assert!(std::option::is_none(&deserialize(&x"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000")), 1); - - // Deserialization should fail if given a byte array of wrong size. - assert!(std::option::is_none(&deserialize(&x"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ab")), 1); - - // Element scalar multiplication. - let scalar_7 = from_u64(7); - let element_7g_calc = scalar_mul(&generator, &scalar_7); - assert!(eq(&element_7g_calc, &element_7g_from_deser), 1); - assert!(GT_GENERATOR_MUL_BY_7_SERIALIZED == serialize(&element_7g_calc), 1); - - // Element negation. - let element_minus_7g_calc = neg(&element_7g_calc); - assert!(GT_GENERATOR_MUL_BY_7_NEG_SERIALIZED == serialize(&element_minus_7g_calc), 1); - - // Element addition. - let scalar_9 = from_u64(9); - let element_9g = scalar_mul(&generator, &scalar_9); - let scalar_2 = from_u64(2); - let element_2g = scalar_mul(&generator, &scalar_2); - let element_2g_calc = add(&element_minus_7g_calc, &element_9g); - assert!(eq(&element_2g, &element_2g_calc), 1); - - // Subtraction. - assert!(eq(&element_9g, &sub(&element_2g, &element_minus_7g_calc)), 1); - - // Upcasting to Fq12. - assert!(eq(&one(), &upcast(&identity)), 1); - } - - #[test_only] - use aptos_std::crypto_algebra::{zero, one, from_u64, eq, deserialize, serialize, neg, add, sub, mul, div, inv, rand_insecure, sqr, order, scalar_mul, multi_scalar_mul, double, upcast, enable_cryptography_algebra_natives, pairing, multi_pairing, downcast, Element}; - - #[test_only] - const FR_VAL_0_SERIALIZED_LSB: vector = x"0000000000000000000000000000000000000000000000000000000000000000"; - #[test_only] - const FR_VAL_1_SERIALIZED_LSB: vector = x"0100000000000000000000000000000000000000000000000000000000000000"; - #[test_only] - const FR_VAL_7_SERIALIZED_LSB: vector = x"0700000000000000000000000000000000000000000000000000000000000000"; - #[test_only] - const FR_VAL_7_SERIALIZED_MSB: vector = x"0000000000000000000000000000000000000000000000000000000000000007"; - #[test_only] - const FR_VAL_7_NEG_SERIALIZED_LSB: vector = x"faffffef93f5e1439170b97948e833285d588181b64550b829a031e1724e6430"; - - #[test(fx = @std)] - fun test_fr(fx: signer) { - enable_cryptography_algebra_natives(&fx); - - // Constants. - assert!(R_SERIALIZED == order(), 1); - - // Serialization/deserialization. - let val_0 = zero(); - let val_1 = one(); - assert!(FR_VAL_0_SERIALIZED_LSB == serialize(&val_0), 1); - assert!(FR_VAL_1_SERIALIZED_LSB == serialize(&val_1), 1); - let val_7 = from_u64(7); - let val_7_2nd = std::option::extract(&mut deserialize(&FR_VAL_7_SERIALIZED_LSB)); - let val_7_3rd = std::option::extract(&mut deserialize(&FR_VAL_7_SERIALIZED_MSB)); - assert!(eq(&val_7, &val_7_2nd), 1); - assert!(eq(&val_7, &val_7_3rd), 1); - assert!(FR_VAL_7_SERIALIZED_LSB == serialize(&val_7), 1); - assert!(FR_VAL_7_SERIALIZED_MSB == serialize(&val_7), 1); - - // Deserialization should fail if given a byte array of right size but the value is not a member. - assert!(std::option::is_none(&deserialize(&x"01000000fffffffffe5bfeff02a4bd5305d8a10908d83933487d9d2953a7ed73")), 1); - assert!(std::option::is_none(&deserialize(&x"73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000001")), 1); - - // Deserialization should fail if given a byte array of wrong size. - assert!(std::option::is_none(&deserialize(&x"01000000fffffffffe5bfeff02a4bd5305d8a10908d83933487d9d2953a7ed7300")), 1); - assert!(std::option::is_none(&deserialize(&x"0073eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000001")), 1); - assert!(std::option::is_none(&deserialize(&x"ffff")), 1); - assert!(std::option::is_none(&deserialize(&x"ffff")), 1); - - // Negation. - let val_minus_7 = neg(&val_7); - assert!(FR_VAL_7_NEG_SERIALIZED_LSB == serialize(&val_minus_7), 1); - - // Addition. - let val_9 = from_u64(9); - let val_2 = from_u64(2); - assert!(eq(&val_2, &add(&val_minus_7, &val_9)), 1); - - // Subtraction. - assert!(eq(&val_9, &sub(&val_2, &val_minus_7)), 1); - - // Multiplication. - let val_63 = from_u64(63); - assert!(eq(&val_63, &mul(&val_7, &val_9)), 1); - - // division. - let val_0 = from_u64(0); - assert!(eq(&val_7, &std::option::extract(&mut div(&val_63, &val_9))), 1); - assert!(std::option::is_none(&div(&val_63, &val_0)), 1); - - // Inversion. - assert!(eq(&val_minus_7, &neg(&val_7)), 1); - assert!(std::option::is_none(&inv(&val_0)), 1); - - // Squaring. - let val_x = rand_insecure(); - assert!(eq(&mul(&val_x, &val_x), &sqr(&val_x)), 1); - } - - #[test_only] - const Q_SERIALIZED: vector = x"47fd7cd8168c203c8dca7168916a81975d588181b64550b829a031e1724e6430"; - #[test_only] - const FQ_VAL_0_SERIALIZED_LSB: vector = x"0000000000000000000000000000000000000000000000000000000000000000"; - #[test_only] - const FQ_VAL_1_SERIALIZED_LSB: vector = x"0100000000000000000000000000000000000000000000000000000000000000"; - #[test_only] - const FQ_VAL_7_SERIALIZED_LSB: vector = x"0700000000000000000000000000000000000000000000000000000000000000"; - #[test_only] - const FQ_VAL_7_SERIALIZED_MSB: vector = x"0000000000000000000000000000000000000000000000000000000000000007"; - #[test_only] - const FQ_VAL_7_NEG_SERIALIZED_LSB: vector = x"40fd7cd8168c203c8dca7168916a81975d588181b64550b829a031e1724e6430"; - - #[test(fx = @std)] - fun test_fq(fx: signer) { - enable_cryptography_algebra_natives(&fx); - - // Constants. - assert!(Q_SERIALIZED == order(), 1); - - // Serialization/deserialization. - let val_0 = zero(); - let val_1 = one(); - assert!(FQ_VAL_0_SERIALIZED_LSB == serialize(&val_0), 1); - assert!(FQ_VAL_1_SERIALIZED_LSB == serialize(&val_1), 1); - let val_7 = from_u64(7); - let val_7_2nd = std::option::extract(&mut deserialize(&FQ_VAL_7_SERIALIZED_LSB)); - let val_7_3rd = std::option::extract(&mut deserialize(&FQ_VAL_7_SERIALIZED_MSB)); - assert!(eq(&val_7, &val_7_2nd), 1); - assert!(eq(&val_7, &val_7_3rd), 1); - assert!(FQ_VAL_7_SERIALIZED_LSB == serialize(&val_7), 1); - assert!(FQ_VAL_7_SERIALIZED_MSB == serialize(&val_7), 1); - - // Deserialization should fail if given a byte array of right size but the value is not a member. - assert!(std::option::is_none(&deserialize(&x"47fd7cd8168c203c8dca7168916a81975d588181b64550b829a031e1724e6430")), 1); - assert!(std::option::is_none(&deserialize(&x"30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47")), 1); - - // Deserialization should fail if given a byte array of wrong size. - assert!(std::option::is_none(&deserialize(&x"46fd7cd8168c203c8dca7168916a81975d588181b64550b829a031e1724e643000")), 1); - assert!(std::option::is_none(&deserialize(&x"30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4600")), 1); - assert!(std::option::is_none(&deserialize(&x"ffff")), 1); - assert!(std::option::is_none(&deserialize(&x"ffff")), 1); - - // Negation. - let val_minus_7 = neg(&val_7); - assert!(FQ_VAL_7_NEG_SERIALIZED_LSB == serialize(&val_minus_7), 1); - - // Addition. - let val_9 = from_u64(9); - let val_2 = from_u64(2); - assert!(eq(&val_2, &add(&val_minus_7, &val_9)), 1); - - // Subtraction. - assert!(eq(&val_9, &sub(&val_2, &val_minus_7)), 1); - - // Multiplication. - let val_63 = from_u64(63); - assert!(eq(&val_63, &mul(&val_7, &val_9)), 1); - - // division. - let val_0 = from_u64(0); - assert!(eq(&val_7, &std::option::extract(&mut div(&val_63, &val_9))), 1); - assert!(std::option::is_none(&div(&val_63, &val_0)), 1); - - // Inversion. - assert!(eq(&val_minus_7, &neg(&val_7)), 1); - assert!(std::option::is_none(&inv(&val_0)), 1); - - // Squaring. - let val_x = rand_insecure(); - assert!(eq(&mul(&val_x, &val_x), &sqr(&val_x)), 1); - } - - #[test(fx = @std)] - fun test_pairing(fx: signer) { - enable_cryptography_algebra_natives(&fx); - - // pairing(a*P,b*Q) == (a*b)*pairing(P,Q) - let element_p = rand_insecure(); - let element_q = rand_insecure(); - let a = rand_insecure(); - let b = rand_insecure(); - let gt_element = pairing(&scalar_mul(&element_p, &a), &scalar_mul(&element_q, &b)); - let gt_element_another = scalar_mul(&pairing(&element_p, &element_q), &mul(&a, &b)); - assert!(eq(>_element, >_element_another), 1); - } - - #[test(fx = @std)] - fun test_multi_pairing(fx: signer) { - enable_cryptography_algebra_natives(&fx); - - // Will compute e(a0*P0,b0*Q0)+e(a1*P1,b1*Q1)+e(a2*P2,b2*Q2). - let a0 = rand_insecure(); - let a1 = rand_insecure(); - let a2 = rand_insecure(); - let element_p0 = rand_insecure(); - let element_p1 = rand_insecure(); - let element_p2 = rand_insecure(); - let p0_a0 = scalar_mul(&element_p0, &a0); - let p1_a1 = scalar_mul(&element_p1, &a1); - let p2_a2 = scalar_mul(&element_p2, &a2); - let b0 = rand_insecure(); - let b1 = rand_insecure(); - let b2 = rand_insecure(); - let element_q0 = rand_insecure(); - let element_q1 = rand_insecure(); - let element_q2 = rand_insecure(); - let q0_b0 = scalar_mul(&element_q0, &b0); - let q1_b1 = scalar_mul(&element_q1, &b1); - let q2_b2 = scalar_mul(&element_q2, &b2); - - // Naive method. - let n0 = pairing(&p0_a0, &q0_b0); - let n1 = pairing(&p1_a1, &q1_b1); - let n2 = pairing(&p2_a2, &q2_b2); - let n = zero(); - n = add(&n, &n0); - n = add(&n, &n1); - n = add(&n, &n2); - - // Efficient API. - let m = multi_pairing(&vector[p0_a0, p1_a1, p2_a2], &vector[q0_b0, q1_b1, q2_b2]); - assert!(eq(&n, &m), 1); - } - - #[test(fx = @std)] - #[expected_failure(abort_code = 0x010002, location = aptos_std::crypto_algebra)] - fun test_multi_pairing_should_abort_when_sizes_mismatch(fx: signer) { - enable_cryptography_algebra_natives(&fx); - let g1_elements = vector[rand_insecure()]; - let g2_elements = vector[rand_insecure(), rand_insecure()]; - multi_pairing(&g1_elements, &g2_elements); - } - - #[test(fx = @std)] - #[expected_failure(abort_code = 0x010002, location = aptos_std::crypto_algebra)] - fun test_multi_scalar_mul_should_abort_when_sizes_mismatch(fx: signer) { - enable_cryptography_algebra_natives(&fx); - let elements = vector[rand_insecure()]; - let scalars = vector[rand_insecure(), rand_insecure()]; - multi_scalar_mul(&elements, &scalars); - } - - #[test_only] - /// The maximum number of `G1` elements that can be created in a transaction, - /// calculated by the current memory limit (1MB) and the in-mem G1 representation size (96 bytes per element). - const G1_NUM_MAX: u64 = 1048576 / 96; - - #[test(fx = @std)] - fun test_memory_limit(fx: signer) { - enable_cryptography_algebra_natives(&fx); - let remaining = G1_NUM_MAX; - while (remaining > 0) { - zero(); - remaining = remaining - 1; - } - } - - #[test(fx = @std)] - #[expected_failure(abort_code = 0x090003, location = std::crypto_algebra)] - fun test_memory_limit_exceeded_with_g1(fx: signer) { - enable_cryptography_algebra_natives(&fx); - let remaining = G1_NUM_MAX + 1; - while (remaining > 0) { - zero(); - remaining = remaining - 1; - } - } - - // - // (Tests end here.) - // - -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/AptosStdlib/capability.move b/examples/oft-movement/build/oft/sources/dependencies/AptosStdlib/capability.move deleted file mode 100644 index f68c7b014..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/AptosStdlib/capability.move +++ /dev/null @@ -1,193 +0,0 @@ -/// A module which defines the basic concept of -/// [*capabilities*](https://en.wikipedia.org/wiki/Capability-based_security) for managing access control. -/// -/// EXPERIMENTAL -/// -/// # Overview -/// -/// A capability is a unforgeable token which testifies that a signer has authorized a certain operation. -/// The token is valid during the transaction where it is obtained. Since the type `capability::Cap` has -/// no ability to be stored in global memory, capabilities cannot leak out of a transaction. For every function -/// called within a transaction which has a capability as a parameter, it is guaranteed that the capability -/// has been obtained via a proper signer-based authorization step previously in the transaction's execution. -/// -/// ## Usage -/// -/// Initializing and acquiring capabilities is usually encapsulated in a module with a type -/// tag which can only be constructed by this module. -/// -/// ``` -/// module Pkg::Feature { -/// use std::capability::Cap; -/// -/// /// A type tag used in Cap. Only this module can create an instance, -/// /// and there is no public function other than Self::acquire which returns a value of this type. -/// /// This way, this module has full control how Cap is given out. -/// struct Feature has drop {} -/// -/// /// Initializes this module. -/// public fun initialize(s: &signer) { -/// // Create capability. This happens once at module initialization time. -/// // One needs to provide a witness for being the owner of Feature -/// // in the 2nd parameter. -/// <> -/// capability::create(s, &Feature{}); -/// } -/// -/// /// Acquires the capability to work with this feature. -/// public fun acquire(s: &signer): Cap { -/// <> -/// capability::acquire(s, &Feature{}); -/// } -/// -/// /// Does something related to the feature. The caller must pass a Cap. -/// public fun do_something(_cap: Cap) { ... } -/// } -/// ``` -/// -/// ## Delegation -/// -/// Capabilities come with the optional feature of *delegation*. Via `Self::delegate`, an owner of a capability -/// can designate another signer to be also capable of acquiring the capability. Like the original creator, -/// the delegate needs to present his signer to obtain the capability in his transactions. Delegation can -/// be revoked via `Self::revoke`, removing this access right from the delegate. -/// -/// While the basic authorization mechanism for delegates is the same as with core capabilities, the -/// target of delegation might be subject of restrictions which need to be specified and verified. This can -/// be done via global invariants in the specification language. For example, in order to prevent delegation -/// all together for a capability, one can use the following invariant: -/// -/// ``` -/// invariant forall a: address where capability::spec_has_cap(a): -/// len(capability::spec_delegates(a)) == 0; -/// ``` -/// -/// Similarly, the following invariant would enforce that delegates, if existent, must satisfy a certain -/// predicate: -/// -/// ``` -/// invariant forall a: address where capability::spec_has_cap(a): -/// forall d in capability::spec_delegates(a): -/// is_valid_delegate_for_feature(d); -/// ``` -/// -module aptos_std::capability { - use std::error; - use std::signer; - use std::vector; - - /// Capability resource already exists on the specified account - const ECAPABILITY_ALREADY_EXISTS: u64 = 1; - /// Capability resource not found - const ECAPABILITY_NOT_FOUND: u64 = 2; - /// Account does not have delegated permissions - const EDELEGATE: u64 = 3; - - /// The token representing an acquired capability. Cannot be stored in memory, but copied and dropped freely. - struct Cap has copy, drop { - root: address - } - - /// A linear version of a capability token. This can be used if an acquired capability should be enforced - /// to be used only once for an authorization. - struct LinearCap has drop { - root: address - } - - /// An internal data structure for representing a configured capability. - struct CapState has key { - delegates: vector
- } - - /// An internal data structure for representing a configured delegated capability. - struct CapDelegateState has key { - root: address - } - - /// Creates a new capability class, owned by the passed signer. A caller must pass a witness that - /// they own the `Feature` type parameter. - public fun create(owner: &signer, _feature_witness: &Feature) { - let addr = signer::address_of(owner); - assert!(!exists>(addr), error::already_exists(ECAPABILITY_ALREADY_EXISTS)); - move_to>(owner, CapState { delegates: vector::empty() }); - } - - /// Acquires a capability token. Only the owner of the capability class, or an authorized delegate, - /// can succeed with this operation. A caller must pass a witness that they own the `Feature` type - /// parameter. - public fun acquire(requester: &signer, _feature_witness: &Feature): Cap - acquires CapState, CapDelegateState { - Cap { root: validate_acquire(requester) } - } - - /// Acquires a linear capability token. It is up to the module which owns `Feature` to decide - /// whether to expose a linear or non-linear capability. - public fun acquire_linear(requester: &signer, _feature_witness: &Feature): LinearCap - acquires CapState, CapDelegateState { - LinearCap { root: validate_acquire(requester) } - } - - /// Helper to validate an acquire. Returns the root address of the capability. - fun validate_acquire(requester: &signer): address - acquires CapState, CapDelegateState { - let addr = signer::address_of(requester); - if (exists>(addr)) { - let root_addr = borrow_global>(addr).root; - // double check that requester is actually registered as a delegate - assert!(exists>(root_addr), error::invalid_state(EDELEGATE)); - assert!(vector::contains(&borrow_global>(root_addr).delegates, &addr), - error::invalid_state(EDELEGATE)); - root_addr - } else { - assert!(exists>(addr), error::not_found(ECAPABILITY_NOT_FOUND)); - addr - } - } - - /// Returns the root address associated with the given capability token. Only the owner - /// of the feature can do this. - public fun root_addr(self: Cap, _feature_witness: &Feature): address { - self.root - } - - /// Returns the root address associated with the given linear capability token. - public fun linear_root_addr(self: LinearCap, _feature_witness: &Feature): address { - self.root - } - - /// Registers a delegation relation. If the relation already exists, this function does - /// nothing. - // TODO: explore whether this should be idempotent like now or abort - public fun delegate(self: Cap, _feature_witness: &Feature, to: &signer) - acquires CapState { - let addr = signer::address_of(to); - if (exists>(addr)) return; - move_to(to, CapDelegateState { root: self.root }); - add_element(&mut borrow_global_mut>(self.root).delegates, addr); - } - - /// Revokes a delegation relation. If no relation exists, this function does nothing. - // TODO: explore whether this should be idempotent like now or abort - public fun revoke(self: Cap, _feature_witness: &Feature, from: address) - acquires CapState, CapDelegateState - { - if (!exists>(from)) return; - let CapDelegateState { root: _root } = move_from>(from); - remove_element(&mut borrow_global_mut>(self.root).delegates, &from); - } - - /// Helper to remove an element from a vector. - fun remove_element(v: &mut vector, x: &E) { - let (found, index) = vector::index_of(v, x); - if (found) { - vector::remove(v, index); - } - } - - /// Helper to add an element to a vector. - fun add_element(v: &mut vector, x: E) { - if (!vector::contains(v, &x)) { - vector::push_back(v, x) - } - } -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/AptosStdlib/comparator.move b/examples/oft-movement/build/oft/sources/dependencies/AptosStdlib/comparator.move deleted file mode 100644 index 2a1a97961..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/AptosStdlib/comparator.move +++ /dev/null @@ -1,173 +0,0 @@ -/// Provides a framework for comparing two elements -module aptos_std::comparator { - use std::bcs; - use std::vector; - - const EQUAL: u8 = 0; - const SMALLER: u8 = 1; - const GREATER: u8 = 2; - - struct Result has drop { - inner: u8, - } - - public fun is_equal(self: &Result): bool { - self.inner == EQUAL - } - - public fun is_smaller_than(self: &Result): bool { - self.inner == SMALLER - } - - public fun is_greater_than(self: &Result): bool { - self.inner == GREATER - } - - // Performs a comparison of two types after BCS serialization. - // BCS uses little endian encoding for all integer types, - // so comparison between primitive integer types will not behave as expected. - // For example, 1(0x1) will be larger than 256(0x100) after BCS serialization. - public fun compare(left: &T, right: &T): Result { - let left_bytes = bcs::to_bytes(left); - let right_bytes = bcs::to_bytes(right); - - compare_u8_vector(left_bytes, right_bytes) - } - - // Performs a comparison of two vectors or byte vectors - public fun compare_u8_vector(left: vector, right: vector): Result { - let left_length = vector::length(&left); - let right_length = vector::length(&right); - - let idx = 0; - - while (idx < left_length && idx < right_length) { - let left_byte = *vector::borrow(&left, idx); - let right_byte = *vector::borrow(&right, idx); - - if (left_byte < right_byte) { - return Result { inner: SMALLER } - } else if (left_byte > right_byte) { - return Result { inner: GREATER } - }; - idx = idx + 1; - }; - - if (left_length < right_length) { - Result { inner: SMALLER } - } else if (left_length > right_length) { - Result { inner: GREATER } - } else { - Result { inner: EQUAL } - } - } - - #[test] - public fun test_strings() { - use std::string; - - let value0 = string::utf8(b"alpha"); - let value1 = string::utf8(b"beta"); - let value2 = string::utf8(b"betaa"); - - assert!(is_equal(&compare(&value0, &value0)), 0); - assert!(is_equal(&compare(&value1, &value1)), 1); - assert!(is_equal(&compare(&value2, &value2)), 2); - - assert!(is_greater_than(&compare(&value0, &value1)), 3); - assert!(is_smaller_than(&compare(&value1, &value0)), 4); - - assert!(is_smaller_than(&compare(&value0, &value2)), 5); - assert!(is_greater_than(&compare(&value2, &value0)), 6); - - assert!(is_smaller_than(&compare(&value1, &value2)), 7); - assert!(is_greater_than(&compare(&value2, &value1)), 8); - } - - #[test] - #[expected_failure] - public fun test_integer() { - // 1(0x1) will be larger than 256(0x100) after BCS serialization. - let value0: u128 = 1; - let value1: u128 = 256; - - assert!(is_equal(&compare(&value0, &value0)), 0); - assert!(is_equal(&compare(&value1, &value1)), 1); - - assert!(is_smaller_than(&compare(&value0, &value1)), 2); - assert!(is_greater_than(&compare(&value1, &value0)), 3); - } - - #[test] - public fun test_u128() { - let value0: u128 = 5; - let value1: u128 = 152; - let value2: u128 = 511; // 0x1ff - - assert!(is_equal(&compare(&value0, &value0)), 0); - assert!(is_equal(&compare(&value1, &value1)), 1); - assert!(is_equal(&compare(&value2, &value2)), 2); - - assert!(is_smaller_than(&compare(&value0, &value1)), 2); - assert!(is_greater_than(&compare(&value1, &value0)), 3); - - assert!(is_smaller_than(&compare(&value0, &value2)), 3); - assert!(is_greater_than(&compare(&value2, &value0)), 4); - - assert!(is_smaller_than(&compare(&value1, &value2)), 5); - assert!(is_greater_than(&compare(&value2, &value1)), 6); - } - - #[test_only] - struct Complex has drop { - value0: vector, - value1: u8, - value2: u64, - } - - #[test] - public fun test_complex() { - let value0_0 = vector::empty(); - vector::push_back(&mut value0_0, 10); - vector::push_back(&mut value0_0, 9); - vector::push_back(&mut value0_0, 5); - - let value0_1 = vector::empty(); - vector::push_back(&mut value0_1, 10); - vector::push_back(&mut value0_1, 9); - vector::push_back(&mut value0_1, 5); - vector::push_back(&mut value0_1, 1); - - let base = Complex { - value0: value0_0, - value1: 13, - value2: 41, - }; - - let other_0 = Complex { - value0: value0_1, - value1: 13, - value2: 41, - }; - - let other_1 = Complex { - value0: copy value0_0, - value1: 14, - value2: 41, - }; - - let other_2 = Complex { - value0: value0_0, - value1: 13, - value2: 42, - }; - - assert!(is_equal(&compare(&base, &base)), 0); - assert!(is_smaller_than(&compare(&base, &other_0)), 1); - assert!(is_greater_than(&compare(&other_0, &base)), 2); - assert!(is_smaller_than(&compare(&base, &other_1)), 3); - assert!(is_greater_than(&compare(&other_1, &base)), 4); - assert!(is_smaller_than(&compare(&base, &other_2)), 5); - assert!(is_greater_than(&compare(&other_2, &base)), 6); - } -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/AptosStdlib/copyable_any.move b/examples/oft-movement/build/oft/sources/dependencies/AptosStdlib/copyable_any.move deleted file mode 100644 index cecb0a028..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/AptosStdlib/copyable_any.move +++ /dev/null @@ -1,45 +0,0 @@ -module aptos_std::copyable_any { - use aptos_std::type_info; - use aptos_std::from_bcs::from_bytes; - use std::bcs; - use std::error; - use std::string::String; - - /// The type provided for `unpack` is not the same as was given for `pack`. - const ETYPE_MISMATCH: u64 = 0; - - /// The same as `any::Any` but with the copy ability. - struct Any has drop, store, copy { - type_name: String, - data: vector - } - - /// Pack a value into the `Any` representation. Because Any can be stored, dropped, and copied this is - /// also required from `T`. - public fun pack(x: T): Any { - Any { - type_name: type_info::type_name(), - data: bcs::to_bytes(&x) - } - } - - /// Unpack a value from the `Any` representation. This aborts if the value has not the expected type `T`. - public fun unpack(self: Any): T { - assert!(type_info::type_name() == self.type_name, error::invalid_argument(ETYPE_MISMATCH)); - from_bytes(self.data) - } - - /// Returns the type name of this Any - public fun type_name(self: &Any): &String { - &self.type_name - } - - #[test_only] - struct S has store, drop, copy { x: u64 } - - #[test] - fun test_any() { - assert!(unpack(pack(22)) == 22, 1); - assert!(unpack(pack(S { x: 22 })) == S { x: 22 }, 2); - } -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/AptosStdlib/crypto_algebra.move b/examples/oft-movement/build/oft/sources/dependencies/AptosStdlib/crypto_algebra.move deleted file mode 100644 index b31f028f8..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/AptosStdlib/crypto_algebra.move +++ /dev/null @@ -1,351 +0,0 @@ -/// This module provides generic structs/functions for operations of algebraic structures (e.g. fields and groups), -/// which can be used to build generic cryptographic schemes atop. -/// E.g., a Groth16 ZK proof verifier can be built to work over any pairing supported in this module. -/// -/// In general, every structure implements basic operations like (de)serialization, equality check, random sampling. -/// -/// A group may also implement the following operations. (Additive group notation is assumed.) -/// - `order()` for getting the group order. -/// - `zero()` for getting the group identity. -/// - `one()` for getting the group generator (if exists). -/// - `neg()` for group element inversion. -/// - `add()` for group operation (i.e., a group addition). -/// - `sub()` for group element subtraction. -/// - `double()` for efficient doubling. -/// - `scalar_mul()` for group scalar multiplication. -/// - `multi_scalar_mul()` for efficient group multi-scalar multiplication. -/// - `hash_to()` for hash-to-group. -/// -/// A field may also implement the following operations. -/// - `zero()` for getting the field additive identity. -/// - `one()` for getting the field multiplicative identity. -/// - `add()` for field addition. -/// - `sub()` for field subtraction. -/// - `mul()` for field multiplication. -/// - `div()` for field division. -/// - `neg()` for field negation. -/// - `inv()` for field inversion. -/// - `sqr()` for efficient field element squaring. -/// - `from_u64()` for quick conversion from u64 to field element. -/// -/// For 3 groups that admit a bilinear map, `pairing()` and `multi_pairing()` may be implemented. -/// -/// For a subset/superset relationship between 2 structures, `upcast()` and `downcast()` may be implemented. -/// E.g., in BLS12-381 pairing, since `Gt` is a subset of `Fq12`, -/// `upcast()` and `downcast()` will be supported. -/// -/// See `*_algebra.move` for currently implemented algebraic structures. -module aptos_std::crypto_algebra { - use std::option::{Option, some, none}; - use std::features; - - const E_NOT_IMPLEMENTED: u64 = 1; - const E_NON_EQUAL_LENGTHS: u64 = 2; - const E_TOO_MUCH_MEMORY_USED: u64 = 3; - - /// This struct represents an element of a structure `S`. - struct Element has copy, drop { - handle: u64 - } - - // - // Public functions begin. - // - - /// Check if `x == y` for elements `x` and `y` of a structure `S`. - public fun eq(x: &Element, y: &Element): bool { - abort_unless_cryptography_algebra_natives_enabled(); - eq_internal(x.handle, y.handle) - } - - /// Convert a u64 to an element of a structure `S`. - public fun from_u64(value: u64): Element { - abort_unless_cryptography_algebra_natives_enabled(); - Element { - handle: from_u64_internal(value) - } - } - - /// Return the additive identity of field `S`, or the identity of group `S`. - public fun zero(): Element { - abort_unless_cryptography_algebra_natives_enabled(); - Element { - handle: zero_internal() - } - } - - /// Return the multiplicative identity of field `S`, or a fixed generator of group `S`. - public fun one(): Element { - abort_unless_cryptography_algebra_natives_enabled(); - Element { - handle: one_internal() - } - } - - /// Compute `-x` for an element `x` of a structure `S`. - public fun neg(x: &Element): Element { - abort_unless_cryptography_algebra_natives_enabled(); - Element { - handle: neg_internal(x.handle) - } - } - - /// Compute `x + y` for elements `x` and `y` of structure `S`. - public fun add(x: &Element, y: &Element): Element { - abort_unless_cryptography_algebra_natives_enabled(); - Element { - handle: add_internal(x.handle, y.handle) - } - } - - /// Compute `x - y` for elements `x` and `y` of a structure `S`. - public fun sub(x: &Element, y: &Element): Element { - abort_unless_cryptography_algebra_natives_enabled(); - Element { - handle: sub_internal(x.handle, y.handle) - } - } - - /// Compute `x * y` for elements `x` and `y` of a structure `S`. - public fun mul(x: &Element, y: &Element): Element { - abort_unless_cryptography_algebra_natives_enabled(); - Element { - handle: mul_internal(x.handle, y.handle) - } - } - - /// Try computing `x / y` for elements `x` and `y` of a structure `S`. - /// Return none if `y` does not have a multiplicative inverse in the structure `S` - /// (e.g., when `S` is a field, and `y` is zero). - public fun div(x: &Element, y: &Element): Option> { - abort_unless_cryptography_algebra_natives_enabled(); - let (succ, handle) = div_internal(x.handle, y.handle); - if (succ) { - some(Element { handle }) - } else { - none() - } - } - - /// Compute `x^2` for an element `x` of a structure `S`. Faster and cheaper than `mul(x, x)`. - public fun sqr(x: &Element): Element { - abort_unless_cryptography_algebra_natives_enabled(); - Element { - handle: sqr_internal(x.handle) - } - } - - /// Try computing `x^(-1)` for an element `x` of a structure `S`. - /// Return none if `x` does not have a multiplicative inverse in the structure `S` - /// (e.g., when `S` is a field, and `x` is zero). - public fun inv(x: &Element): Option> { - abort_unless_cryptography_algebra_natives_enabled(); - let (succeeded, handle) = inv_internal(x.handle); - if (succeeded) { - let scalar = Element { handle }; - some(scalar) - } else { - none() - } - } - - /// Compute `2*P` for an element `P` of a structure `S`. Faster and cheaper than `add(P, P)`. - public fun double(element_p: &Element): Element { - abort_unless_cryptography_algebra_natives_enabled(); - Element { - handle: double_internal(element_p.handle) - } - } - - /// Compute `k[0]*P[0]+...+k[n-1]*P[n-1]`, where - /// `P[]` are `n` elements of group `G` represented by parameter `elements`, and - /// `k[]` are `n` elements of the scalarfield `S` of group `G` represented by parameter `scalars`. - /// - /// Abort with code `std::error::invalid_argument(E_NON_EQUAL_LENGTHS)` if the sizes of `elements` and `scalars` do not match. - public fun multi_scalar_mul(elements: &vector>, scalars: &vector>): Element { - let element_handles = handles_from_elements(elements); - let scalar_handles = handles_from_elements(scalars); - Element { - handle: multi_scalar_mul_internal(element_handles, scalar_handles) - } - } - - /// Compute `k*P`, where `P` is an element of a group `G` and `k` is an element of the scalar field `S` associated to the group `G`. - public fun scalar_mul(element_p: &Element, scalar_k: &Element): Element { - abort_unless_cryptography_algebra_natives_enabled(); - Element { - handle: scalar_mul_internal(element_p.handle, scalar_k.handle) - } - } - - /// Efficiently compute `e(P[0],Q[0])+...+e(P[n-1],Q[n-1])`, - /// where `e: (G1,G2) -> (Gt)` is the pairing function from groups `(G1,G2)` to group `Gt`, - /// `P[]` are `n` elements of group `G1` represented by parameter `g1_elements`, and - /// `Q[]` are `n` elements of group `G2` represented by parameter `g2_elements`. - /// - /// Abort with code `std::error::invalid_argument(E_NON_EQUAL_LENGTHS)` if the sizes of `g1_elements` and `g2_elements` do not match. - /// - /// NOTE: we are viewing the target group `Gt` of the pairing as an additive group, - /// rather than a multiplicative one (which is typically the case). - public fun multi_pairing(g1_elements: &vector>, g2_elements: &vector>): Element { - abort_unless_cryptography_algebra_natives_enabled(); - let g1_handles = handles_from_elements(g1_elements); - let g2_handles = handles_from_elements(g2_elements); - Element { - handle: multi_pairing_internal(g1_handles, g2_handles) - } - } - - /// Compute the pairing function (a.k.a., bilinear map) on a `G1` element and a `G2` element. - /// Return an element in the target group `Gt`. - public fun pairing(element_1: &Element, element_2: &Element): Element { - abort_unless_cryptography_algebra_natives_enabled(); - Element { - handle: pairing_internal(element_1.handle, element_2.handle) - } - } - - /// Try deserializing a byte array to an element of an algebraic structure `S` using a given serialization format `F`. - /// Return none if the deserialization failed. - public fun deserialize(bytes: &vector): Option> { - abort_unless_cryptography_algebra_natives_enabled(); - let (succeeded, handle) = deserialize_internal(bytes); - if (succeeded) { - some(Element { handle }) - } else { - none() - } - } - - /// Serialize an element of an algebraic structure `S` to a byte array using a given serialization format `F`. - public fun serialize(element: &Element): vector { - abort_unless_cryptography_algebra_natives_enabled(); - serialize_internal(element.handle) - } - - /// Get the order of structure `S`, a big integer little-endian encoded as a byte array. - public fun order(): vector { - abort_unless_cryptography_algebra_natives_enabled(); - order_internal() - } - - /// Cast an element of a structure `S` to a parent structure `L`. - public fun upcast(element: &Element): Element { - abort_unless_cryptography_algebra_natives_enabled(); - Element { - handle: upcast_internal(element.handle) - } - } - - /// Try casting an element `x` of a structure `L` to a sub-structure `S`. - /// Return none if `x` is not a member of `S`. - /// - /// NOTE: Membership check in `S` is performed inside, which can be expensive, depending on the structures `L` and `S`. - public fun downcast(element_x: &Element): Option> { - abort_unless_cryptography_algebra_natives_enabled(); - let (succ, new_handle) = downcast_internal(element_x.handle); - if (succ) { - some(Element { handle: new_handle }) - } else { - none() - } - } - - /// Hash an arbitrary-length byte array `msg` into structure `S` with a domain separation tag `dst` - /// using the given hash-to-structure suite `H`. - /// - /// NOTE: some hashing methods do not accept a `dst` and will abort if a non-empty one is provided. - public fun hash_to(dst: &vector, msg: &vector): Element { - abort_unless_cryptography_algebra_natives_enabled(); - Element { - handle: hash_to_internal(dst, msg) - } - } - - #[test_only] - /// Generate a random element of an algebraic structure `S`. - public fun rand_insecure(): Element { - abort_unless_cryptography_algebra_natives_enabled(); - Element { - handle: rand_insecure_internal() - } - } - - // - // (Public functions end here.) - // Private functions begin. - // - - fun abort_unless_cryptography_algebra_natives_enabled() { - if (features::cryptography_algebra_enabled()) return; - abort(std::error::not_implemented(0)) - } - - #[test_only] - public fun enable_cryptography_algebra_natives(fx: &signer) { - std::features::change_feature_flags_for_testing(fx, vector[std::features::get_cryptography_algebra_natives_feature()], vector[]); - } - - fun handles_from_elements(elements: &vector>): vector { - let num_elements = std::vector::length(elements); - let element_handles = std::vector::empty(); - let i = 0; - while ({ - spec { - invariant len(element_handles) == i; - invariant forall k in 0..i: element_handles[k] == elements[k].handle; - }; - i < num_elements - }) { - std::vector::push_back(&mut element_handles, std::vector::borrow(elements, i).handle); - i = i + 1; - }; - element_handles - } - - // - // (Private functions end here.) - // Native functions begin. - // - - native fun add_internal(handle_1: u64, handle_2: u64): u64; - native fun deserialize_internal(bytes: &vector): (bool, u64); - native fun div_internal(handle_1: u64, handle_2: u64): (bool, u64); - native fun double_internal(element_handle: u64): u64; - native fun downcast_internal(handle: u64): (bool, u64); - native fun from_u64_internal(value: u64): u64; - native fun eq_internal(handle_1: u64, handle_2: u64): bool; - native fun hash_to_internal(dst: &vector, bytes: &vector): u64; - native fun inv_internal(handle: u64): (bool, u64); - #[test_only] - native fun rand_insecure_internal(): u64; - native fun mul_internal(handle_1: u64, handle_2: u64): u64; - native fun multi_pairing_internal(g1_handles: vector, g2_handles: vector): u64; - native fun multi_scalar_mul_internal(element_handles: vector, scalar_handles: vector): u64; - native fun neg_internal(handle: u64): u64; - native fun one_internal(): u64; - native fun order_internal(): vector; - native fun pairing_internal(g1_handle: u64, g2_handle: u64): u64; - native fun scalar_mul_internal(element_handle: u64, scalar_handle: u64): u64; - native fun serialize_internal(handle: u64): vector; - native fun sqr_internal(handle: u64): u64; - native fun sub_internal(handle_1: u64, handle_2: u64): u64; - native fun upcast_internal(handle: u64): u64; - native fun zero_internal(): u64; - - // - // (Native functions end here.) - // Tests begin. - // - - #[test_only] - struct MysteriousGroup {} - - #[test(fx = @std)] - #[expected_failure(abort_code = 0x0c0001, location = Self)] - fun test_generic_operation_should_abort_with_unsupported_structures(fx: signer) { - enable_cryptography_algebra_natives(&fx); - let _ = order(); - } - // Tests end. -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/AptosStdlib/debug.move b/examples/oft-movement/build/oft/sources/dependencies/AptosStdlib/debug.move deleted file mode 100644 index 21b707c7a..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/AptosStdlib/debug.move +++ /dev/null @@ -1,278 +0,0 @@ -/// Module providing debug functionality. -module aptos_std::debug { - use std::string::String; - - public fun print(x: &T) { - native_print(format(x)); - } - - public fun print_stack_trace() { - native_print(native_stack_trace()); - } - - inline fun format(x: &T): String { - aptos_std::string_utils::debug_string(x) - } - - native fun native_print(x: String); - native fun native_stack_trace(): String; - - #[test_only] - use std::vector; - - #[test_only] - struct Foo has drop {} - #[test_only] - struct Bar has drop { x: u128, y: Foo, z: bool } - #[test_only] - struct Box has drop { x: T } - - #[test_only] - struct GenericStruct has drop { - val: u64, - } - - #[test_only] - struct TestInner has drop { - val: u128, - vec: vector, - msgs: vector> - } - - #[test_only] - struct TestStruct has drop { - addr: address, - number: u8, - bytes: vector, - name: String, - vec: vector, - } - - #[test_only] - fun assert_equal(x: &T, expected: vector) { - if (std::string::bytes(&format(x)) != &expected) { - print(&format(x)); - print(&std::string::utf8(expected)); - assert!(false, 1); - }; - } - - #[test_only] - fun assert_string_equal(x: vector, expected: vector) { - assert!(std::string::bytes(&format(&std::string::utf8(x))) == &expected, 1); - } - - #[test] - public fun test() { - let x = 42; - assert_equal(&x, b"42"); - - let v = vector::empty(); - vector::push_back(&mut v, 100); - vector::push_back(&mut v, 200); - vector::push_back(&mut v, 300); - assert_equal(&v, b"[ 100, 200, 300 ]"); - - let foo = Foo {}; - assert_equal(&foo, b"0x1::debug::Foo {\n dummy_field: false\n}"); - - let bar = Bar { x: 404, y: Foo {}, z: true }; - assert_equal(&bar, b"0x1::debug::Bar {\n x: 404,\n y: 0x1::debug::Foo {\n dummy_field: false\n },\n z: true\n}"); - - let box = Box { x: Foo {} }; - assert_equal(&box, b"0x1::debug::Box<0x1::debug::Foo> {\n x: 0x1::debug::Foo {\n dummy_field: false\n }\n}"); - } - - #[test] - fun test_print_string() { - let str_bytes = b"Hello, sane Move debugging!"; - - assert_equal(&str_bytes, b"0x48656c6c6f2c2073616e65204d6f766520646562756767696e6721"); - - let str = std::string::utf8(str_bytes); - assert_equal(&str, b"\"Hello, sane Move debugging!\""); - } - - #[test] - fun test_print_quoted_string() { - let str_bytes = b"Can you say \"Hel\\lo\"?"; - - let str = std::string::utf8(str_bytes); - assert_equal(&str, b"\"Can you say \\\"Hel\\\\lo\\\"?\""); - } - - - #[test_only] - use std::features; - #[test(s = @0x123)] - fun test_print_primitive_types(s: signer) { - let u8 = 255u8; - assert_equal(&u8, b"255"); - - let u16 = 65535u16; - assert_equal(&u16, b"65535"); - - let u32 = 4294967295u32; - assert_equal(&u32, b"4294967295"); - - let u64 = 18446744073709551615u64; - assert_equal(&u64, b"18446744073709551615"); - - let u128 = 340282366920938463463374607431768211455u128; - assert_equal(&u128, b"340282366920938463463374607431768211455"); - - let u256 = 115792089237316195423570985008687907853269984665640564039457584007913129639935u256; - assert_equal(&u256, b"115792089237316195423570985008687907853269984665640564039457584007913129639935"); - - let bool = false; - assert_equal(&bool, b"false"); - - let bool = true; - assert_equal(&bool, b"true"); - - let a = @0x1234c0ffee; - assert_equal(&a, b"@0x1234c0ffee"); - - if (features::signer_native_format_fix_enabled()) { - let signer = s; - assert_equal(&signer, b"signer(@0x123)"); - } - } - - const MSG_1 : vector = b"abcdef"; - const MSG_2 : vector = b"123456"; - - #[test] - fun test_print_struct() { - let obj = TestInner { - val: 100, - vec: vector[200u128, 400u128], - msgs: vector[MSG_1, MSG_2], - }; - - assert_equal(&obj, b"0x1::debug::TestInner {\n val: 100,\n vec: [ 200, 400 ],\n msgs: [\n 0x616263646566,\n 0x313233343536\n ]\n}"); - - let obj = TestInner { - val: 10, - vec: vector[], - msgs: vector[], - }; - - assert_equal(&obj, b"0x1::debug::TestInner {\n val: 10,\n vec: [],\n msgs: []\n}"); - } - - #[test(s1 = @0x123, s2 = @0x456)] - fun test_print_vectors(s1: signer, s2: signer) { - let v_u8 = x"ffabcdef"; - assert_equal(&v_u8, b"0xffabcdef"); - - let v_u16 = vector[16u16, 17u16, 18u16, 19u16]; - assert_equal(&v_u16, b"[ 16, 17, 18, 19 ]"); - - let v_u32 = vector[32u32, 33u32, 34u32, 35u32]; - assert_equal(&v_u32, b"[ 32, 33, 34, 35 ]"); - - let v_u64 = vector[64u64, 65u64, 66u64, 67u64]; - assert_equal(&v_u64, b"[ 64, 65, 66, 67 ]"); - - let v_u128 = vector[128u128, 129u128, 130u128, 131u128]; - assert_equal(&v_u128, b"[ 128, 129, 130, 131 ]"); - - let v_u256 = vector[256u256, 257u256, 258u256, 259u256]; - assert_equal(&v_u256, b"[ 256, 257, 258, 259 ]"); - - let v_bool = vector[true, false]; - assert_equal(&v_bool, b"[ true, false ]"); - - let v_addr = vector[@0x1234, @0x5678, @0xabcdef]; - assert_equal(&v_addr, b"[ @0x1234, @0x5678, @0xabcdef ]"); - - if (features::signer_native_format_fix_enabled()) { - let v_signer = vector[s1, s2]; - assert_equal(&v_signer, b"[ signer(@0x123), signer(@0x456) ]"); - }; - - let v = vector[ - TestInner { - val: 4u128, - vec: vector[127u128, 128u128], - msgs: vector[x"00ff", x"abcd"], - }, - TestInner { - val: 8u128 , - vec: vector[128u128, 129u128], - msgs: vector[x"0000"], - } - ]; - assert_equal(&v, b"[\n 0x1::debug::TestInner {\n val: 4,\n vec: [ 127, 128 ],\n msgs: [\n 0x00ff,\n 0xabcd\n ]\n },\n 0x1::debug::TestInner {\n val: 8,\n vec: [ 128, 129 ],\n msgs: [\n 0x0000\n ]\n }\n]"); - } - - #[test(s1 = @0x123, s2 = @0x456)] - fun test_print_vector_of_vectors(s1: signer, s2: signer) { - let v_u8 = vector[x"ffab", x"cdef"]; - assert_equal(&v_u8, b"[\n 0xffab,\n 0xcdef\n]"); - - let v_u16 = vector[vector[16u16, 17u16], vector[18u16, 19u16]]; - assert_equal(&v_u16, b"[\n [ 16, 17 ],\n [ 18, 19 ]\n]"); - - let v_u32 = vector[vector[32u32, 33u32], vector[34u32, 35u32]]; - assert_equal(&v_u32, b"[\n [ 32, 33 ],\n [ 34, 35 ]\n]"); - - let v_u64 = vector[vector[64u64, 65u64], vector[66u64, 67u64]]; - assert_equal(&v_u64, b"[\n [ 64, 65 ],\n [ 66, 67 ]\n]"); - - let v_u128 = vector[vector[128u128, 129u128], vector[130u128, 131u128]]; - assert_equal(&v_u128, b"[\n [ 128, 129 ],\n [ 130, 131 ]\n]"); - - let v_u256 = vector[vector[256u256, 257u256], vector[258u256, 259u256]]; - assert_equal(&v_u256, b"[\n [ 256, 257 ],\n [ 258, 259 ]\n]"); - - let v_bool = vector[vector[true, false], vector[false, true]]; - assert_equal(&v_bool, b"[\n [ true, false ],\n [ false, true ]\n]"); - - let v_addr = vector[vector[@0x1234, @0x5678], vector[@0xabcdef, @0x9999]]; - assert_equal(&v_addr, b"[\n [ @0x1234, @0x5678 ],\n [ @0xabcdef, @0x9999 ]\n]"); - - if (features::signer_native_format_fix_enabled()) { - let v_signer = vector[vector[s1], vector[s2]]; - assert_equal(&v_signer, b"[\n [ signer(@0x123) ],\n [ signer(@0x456) ]\n]"); - }; - - let v = vector[ - vector[ - TestInner { val: 4u128, vec: vector[127u128, 128u128], msgs: vector[] }, - TestInner { val: 8u128 , vec: vector[128u128, 129u128], msgs: vector[] } - ], - vector[ - TestInner { val: 4u128, vec: vector[127u128, 128u128], msgs: vector[] }, - TestInner { val: 8u128 , vec: vector[128u128, 129u128], msgs: vector[] } - ] - ]; - assert_equal(&v, b"[\n [\n 0x1::debug::TestInner {\n val: 4,\n vec: [ 127, 128 ],\n msgs: []\n },\n 0x1::debug::TestInner {\n val: 8,\n vec: [ 128, 129 ],\n msgs: []\n }\n ],\n [\n 0x1::debug::TestInner {\n val: 4,\n vec: [ 127, 128 ],\n msgs: []\n },\n 0x1::debug::TestInner {\n val: 8,\n vec: [ 128, 129 ],\n msgs: []\n }\n ]\n]"); - } - - #[test] - fun test_print_nested_struct() { - let obj = TestStruct { - addr: @0x1, - number: 255u8, - bytes: x"c0ffee", - name: std::string::utf8(b"He\"llo"), - vec: vector[ - TestInner { val: 1, vec: vector[130u128, 131u128], msgs: vector[] }, - TestInner { val: 2, vec: vector[132u128, 133u128], msgs: vector[] } - ], - }; - - assert_equal(&obj, b"0x1::debug::TestStruct {\n addr: @0x1,\n number: 255,\n bytes: 0xc0ffee,\n name: \"He\\\"llo\",\n vec: [\n 0x1::debug::TestInner {\n val: 1,\n vec: [ 130, 131 ],\n msgs: []\n },\n 0x1::debug::TestInner {\n val: 2,\n vec: [ 132, 133 ],\n msgs: []\n }\n ]\n}"); - } - - #[test] - fun test_print_generic_struct() { - let obj = GenericStruct { - val: 60u64, - }; - - assert_equal(&obj, b"0x1::debug::GenericStruct<0x1::debug::Foo> {\n val: 60\n}"); - } -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/AptosStdlib/ed25519.move b/examples/oft-movement/build/oft/sources/dependencies/AptosStdlib/ed25519.move deleted file mode 100644 index 0f8d9c812..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/AptosStdlib/ed25519.move +++ /dev/null @@ -1,262 +0,0 @@ -/// Contains functions for: -/// -/// 1. [Ed25519](https://en.wikipedia.org/wiki/EdDSA#Ed25519) digital signatures: i.e., EdDSA signatures over Edwards25519 curves with co-factor 8 -/// -module aptos_std::ed25519 { - use std::bcs; - use aptos_std::type_info::{Self, TypeInfo}; - use std::option::{Self, Option}; - - // - // Error codes - // - - /// Wrong number of bytes were given as input when deserializing an Ed25519 public key. - const E_WRONG_PUBKEY_SIZE: u64 = 1; - - /// Wrong number of bytes were given as input when deserializing an Ed25519 signature. - const E_WRONG_SIGNATURE_SIZE: u64 = 2; - - // - // Constants - // - - /// The identifier of the Ed25519 signature scheme, which is used when deriving Aptos authentication keys by hashing - /// it together with an Ed25519 public key. - const SIGNATURE_SCHEME_ID: u8 = 0; - - /// The size of a serialized public key, in bytes. - const PUBLIC_KEY_NUM_BYTES: u64 = 32; - - /// The size of a serialized signature, in bytes. - const SIGNATURE_NUM_BYTES: u64 = 64; - - // - // Structs - // - - #[test_only] - /// This struct holds an Ed25519 secret key that can be used to generate Ed25519 signatures during testing. - struct SecretKey has drop { - bytes: vector - } - - /// A BCS-serializable message, which one can verify signatures on via `signature_verify_strict_t` - struct SignedMessage has drop { - type_info: TypeInfo, - inner: MessageType, - } - - /// An *unvalidated* Ed25519 public key: not necessarily an elliptic curve point, just a sequence of 32 bytes - struct UnvalidatedPublicKey has copy, drop, store { - bytes: vector - } - - /// A *validated* Ed25519 public key: not necessarily a prime-order point, could be mixed-order, but will never be - /// a small-order point. - /// - /// For now, this struct is not used in any verification functions, but it might be in the future. - struct ValidatedPublicKey has copy, drop, store { - bytes: vector - } - - /// A purported Ed25519 signature that can be verified via `signature_verify_strict` or `signature_verify_strict_t`. - struct Signature has copy, drop, store { - bytes: vector - } - - // - // Functions - // - - /// Parses the input 32 bytes as an *unvalidated* Ed25519 public key. - public fun new_unvalidated_public_key_from_bytes(bytes: vector): UnvalidatedPublicKey { - assert!(std::vector::length(&bytes) == PUBLIC_KEY_NUM_BYTES, std::error::invalid_argument(E_WRONG_PUBKEY_SIZE)); - UnvalidatedPublicKey { bytes } - } - - /// Parses the input 32 bytes as a *validated* Ed25519 public key. - public fun new_validated_public_key_from_bytes(bytes: vector): Option { - if (public_key_validate_internal(bytes)) { - option::some(ValidatedPublicKey { - bytes - }) - } else { - option::none() - } - } - - /// Parses the input 64 bytes as a purported Ed25519 signature. - public fun new_signature_from_bytes(bytes: vector): Signature { - assert!(std::vector::length(&bytes) == SIGNATURE_NUM_BYTES, std::error::invalid_argument(E_WRONG_SIGNATURE_SIZE)); - Signature { bytes } - } - - /// Converts a ValidatedPublicKey to an UnvalidatedPublicKey, which can be used in the strict verification APIs. - public fun public_key_to_unvalidated(pk: &ValidatedPublicKey): UnvalidatedPublicKey { - UnvalidatedPublicKey { - bytes: pk.bytes - } - } - - /// Moves a ValidatedPublicKey into an UnvalidatedPublicKey, which can be used in the strict verification APIs. - public fun public_key_into_unvalidated(pk: ValidatedPublicKey): UnvalidatedPublicKey { - UnvalidatedPublicKey { - bytes: pk.bytes - } - } - - /// Serializes an UnvalidatedPublicKey struct to 32-bytes. - public fun unvalidated_public_key_to_bytes(pk: &UnvalidatedPublicKey): vector { - pk.bytes - } - - /// Serializes an ValidatedPublicKey struct to 32-bytes. - public fun validated_public_key_to_bytes(pk: &ValidatedPublicKey): vector { - pk.bytes - } - - /// Serializes a Signature struct to 64-bytes. - public fun signature_to_bytes(sig: &Signature): vector { - sig.bytes - } - - /// Takes in an *unvalidated* public key and attempts to validate it. - /// Returns `Some(ValidatedPublicKey)` if successful and `None` otherwise. - public fun public_key_validate(pk: &UnvalidatedPublicKey): Option { - new_validated_public_key_from_bytes(pk.bytes) - } - - /// Verifies a purported Ed25519 `signature` under an *unvalidated* `public_key` on the specified `message`. - /// This call will validate the public key by checking it is NOT in the small subgroup. - public fun signature_verify_strict( - signature: &Signature, - public_key: &UnvalidatedPublicKey, - message: vector - ): bool { - signature_verify_strict_internal(signature.bytes, public_key.bytes, message) - } - - /// This function is used to verify a signature on any BCS-serializable type T. For now, it is used to verify the - /// proof of private key ownership when rotating authentication keys. - public fun signature_verify_strict_t(signature: &Signature, public_key: &UnvalidatedPublicKey, data: T): bool { - let encoded = SignedMessage { - type_info: type_info::type_of(), - inner: data, - }; - - signature_verify_strict_internal(signature.bytes, public_key.bytes, bcs::to_bytes(&encoded)) - } - - /// Helper method to construct a SignedMessage struct. - public fun new_signed_message(data: T): SignedMessage { - SignedMessage { - type_info: type_info::type_of(), - inner: data, - } - } - - /// Derives the Aptos-specific authentication key of the given Ed25519 public key. - public fun unvalidated_public_key_to_authentication_key(pk: &UnvalidatedPublicKey): vector { - public_key_bytes_to_authentication_key(pk.bytes) - } - - /// Derives the Aptos-specific authentication key of the given Ed25519 public key. - public fun validated_public_key_to_authentication_key(pk: &ValidatedPublicKey): vector { - public_key_bytes_to_authentication_key(pk.bytes) - } - - /// Derives the Aptos-specific authentication key of the given Ed25519 public key. - fun public_key_bytes_to_authentication_key(pk_bytes: vector): vector { - std::vector::push_back(&mut pk_bytes, SIGNATURE_SCHEME_ID); - std::hash::sha3_256(pk_bytes) - } - - #[test_only] - /// Generates an Ed25519 key pair. - public fun generate_keys(): (SecretKey, ValidatedPublicKey) { - let (sk_bytes, pk_bytes) = generate_keys_internal(); - let sk = SecretKey { - bytes: sk_bytes - }; - let pk = ValidatedPublicKey { - bytes: pk_bytes - }; - (sk,pk) - } - - #[test_only] - /// Generates an Ed25519 signature for a given byte array using a given signing key. - public fun sign_arbitrary_bytes(sk: &SecretKey, msg: vector): Signature { - Signature { - bytes: sign_internal(sk.bytes, msg) - } - } - - #[test_only] - /// Generates an Ed25519 signature for given structured data using a given signing key. - public fun sign_struct(sk: &SecretKey, data: T): Signature { - let encoded = new_signed_message(data); - Signature { - bytes: sign_internal(sk.bytes, bcs::to_bytes(&encoded)) - } - } - - // - // Native functions - // - - /// Return `true` if the bytes in `public_key` can be parsed as a valid Ed25519 public key: i.e., it passes - /// points-on-curve and not-in-small-subgroup checks. - /// Returns `false` otherwise. - native fun public_key_validate_internal(bytes: vector): bool; - - /// Return true if the Ed25519 `signature` on `message` verifies against the Ed25519 `public_key`. - /// Returns `false` if either: - /// - `signature` or `public key` are of wrong sizes - /// - `public_key` does not pass points-on-curve or not-in-small-subgroup checks, - /// - `signature` does not pass points-on-curve or not-in-small-subgroup checks, - /// - the signature on `message` does not verify. - native fun signature_verify_strict_internal( - signature: vector, - public_key: vector, - message: vector - ): bool; - - #[test_only] - /// Generates an Ed25519 key pair. - native fun generate_keys_internal(): (vector, vector); - - #[test_only] - /// Generates an Ed25519 signature for a given byte array using a given signing key. - native fun sign_internal(sk: vector, msg: vector): vector; - - // - // Tests - // - - #[test_only] - struct TestMessage has copy, drop { - title: vector, - content: vector, - } - - #[test] - fun test_gen_sign_verify_combo() { - let (sk, vpk) = generate_keys(); - let pk = public_key_into_unvalidated(vpk); - - let msg1: vector = x"0123456789abcdef"; - let sig1 = sign_arbitrary_bytes(&sk, msg1); - assert!(signature_verify_strict(&sig1, &pk, msg1), std::error::invalid_state(1)); - - let msg2 = TestMessage { - title: b"Some Title", - content: b"That is it.", - }; - let sig2 = sign_struct(&sk, copy msg2); - assert!(signature_verify_strict_t(&sig2, &pk, copy msg2), std::error::invalid_state(2)); - } - - -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/AptosStdlib/fixed_point64.move b/examples/oft-movement/build/oft/sources/dependencies/AptosStdlib/fixed_point64.move deleted file mode 100644 index a5bb552c2..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/AptosStdlib/fixed_point64.move +++ /dev/null @@ -1,447 +0,0 @@ -/// Defines a fixed-point numeric type with a 64-bit integer part and -/// a 64-bit fractional part. - -module aptos_std::fixed_point64 { - - /// Define a fixed-point numeric type with 64 fractional bits. - /// This is just a u128 integer but it is wrapped in a struct to - /// make a unique type. This is a binary representation, so decimal - /// values may not be exactly representable, but it provides more - /// than 9 decimal digits of precision both before and after the - /// decimal point (18 digits total). For comparison, double precision - /// floating-point has less than 16 decimal digits of precision, so - /// be careful about using floating-point to convert these values to - /// decimal. - struct FixedPoint64 has copy, drop, store { value: u128 } - - const MAX_U128: u256 = 340282366920938463463374607431768211455; - - /// The denominator provided was zero - const EDENOMINATOR: u64 = 0x10001; - /// The quotient value would be too large to be held in a `u128` - const EDIVISION: u64 = 0x20002; - /// The multiplied value would be too large to be held in a `u128` - const EMULTIPLICATION: u64 = 0x20003; - /// A division by zero was encountered - const EDIVISION_BY_ZERO: u64 = 0x10004; - /// The computed ratio when converting to a `FixedPoint64` would be unrepresentable - const ERATIO_OUT_OF_RANGE: u64 = 0x20005; - /// Abort code on calculation result is negative. - const ENEGATIVE_RESULT: u64 = 0x10006; - - /// Returns self - y. self must be not less than y. - public fun sub(self: FixedPoint64, y: FixedPoint64): FixedPoint64 { - let x_raw = get_raw_value(self); - let y_raw = get_raw_value(y); - assert!(x_raw >= y_raw, ENEGATIVE_RESULT); - create_from_raw_value(x_raw - y_raw) - } - spec sub { - pragma opaque; - aborts_if self.value < y.value with ENEGATIVE_RESULT; - ensures result.value == self.value - y.value; - } - - /// Returns self + y. The result cannot be greater than MAX_U128. - public fun add(self: FixedPoint64, y: FixedPoint64): FixedPoint64 { - let x_raw = get_raw_value(self); - let y_raw = get_raw_value(y); - let result = (x_raw as u256) + (y_raw as u256); - assert!(result <= MAX_U128, ERATIO_OUT_OF_RANGE); - create_from_raw_value((result as u128)) - } - spec add { - pragma opaque; - aborts_if (self.value as u256) + (y.value as u256) > MAX_U128 with ERATIO_OUT_OF_RANGE; - ensures result.value == self.value + y.value; - } - - /// Multiply a u128 integer by a fixed-point number, truncating any - /// fractional part of the product. This will abort if the product - /// overflows. - public fun multiply_u128(val: u128, multiplier: FixedPoint64): u128 { - // The product of two 128 bit values has 256 bits, so perform the - // multiplication with u256 types and keep the full 256 bit product - // to avoid losing accuracy. - let unscaled_product = (val as u256) * (multiplier.value as u256); - // The unscaled product has 64 fractional bits (from the multiplier) - // so rescale it by shifting away the low bits. - let product = unscaled_product >> 64; - // Check whether the value is too large. - assert!(product <= MAX_U128, EMULTIPLICATION); - (product as u128) - } - spec multiply_u128 { - pragma opaque; - include MultiplyAbortsIf; - ensures result == spec_multiply_u128(val, multiplier); - } - spec schema MultiplyAbortsIf { - val: num; - multiplier: FixedPoint64; - aborts_if spec_multiply_u128(val, multiplier) > MAX_U128 with EMULTIPLICATION; - } - spec fun spec_multiply_u128(val: num, multiplier: FixedPoint64): num { - (val * multiplier.value) >> 64 - } - - /// Divide a u128 integer by a fixed-point number, truncating any - /// fractional part of the quotient. This will abort if the divisor - /// is zero or if the quotient overflows. - public fun divide_u128(val: u128, divisor: FixedPoint64): u128 { - // Check for division by zero. - assert!(divisor.value != 0, EDIVISION_BY_ZERO); - // First convert to 256 bits and then shift left to - // add 64 fractional zero bits to the dividend. - let scaled_value = (val as u256) << 64; - let quotient = scaled_value / (divisor.value as u256); - // Check whether the value is too large. - assert!(quotient <= MAX_U128, EDIVISION); - // the value may be too large, which will cause the cast to fail - // with an arithmetic error. - (quotient as u128) - } - spec divide_u128 { - pragma opaque; - include DivideAbortsIf; - ensures result == spec_divide_u128(val, divisor); - } - spec schema DivideAbortsIf { - val: num; - divisor: FixedPoint64; - aborts_if divisor.value == 0 with EDIVISION_BY_ZERO; - aborts_if spec_divide_u128(val, divisor) > MAX_U128 with EDIVISION; - } - spec fun spec_divide_u128(val: num, divisor: FixedPoint64): num { - (val << 64) / divisor.value - } - - /// Create a fixed-point value from a rational number specified by its - /// numerator and denominator. Calling this function should be preferred - /// for using `Self::create_from_raw_value` which is also available. - /// This will abort if the denominator is zero. It will also - /// abort if the numerator is nonzero and the ratio is not in the range - /// 2^-64 .. 2^64-1. When specifying decimal fractions, be careful about - /// rounding errors: if you round to display N digits after the decimal - /// point, you can use a denominator of 10^N to avoid numbers where the - /// very small imprecision in the binary representation could change the - /// rounding, e.g., 0.0125 will round down to 0.012 instead of up to 0.013. - public fun create_from_rational(numerator: u128, denominator: u128): FixedPoint64 { - // If the denominator is zero, this will abort. - // Scale the numerator to have 64 fractional bits, so that the quotient will have 64 - // fractional bits. - let scaled_numerator = (numerator as u256) << 64; - assert!(denominator != 0, EDENOMINATOR); - let quotient = scaled_numerator / (denominator as u256); - assert!(quotient != 0 || numerator == 0, ERATIO_OUT_OF_RANGE); - // Return the quotient as a fixed-point number. We first need to check whether the cast - // can succeed. - assert!(quotient <= MAX_U128, ERATIO_OUT_OF_RANGE); - FixedPoint64 { value: (quotient as u128) } - } - spec create_from_rational { - pragma opaque; - pragma verify_duration_estimate = 1000; // TODO: set because of timeout (property proved). - include CreateFromRationalAbortsIf; - ensures result == spec_create_from_rational(numerator, denominator); - } - spec schema CreateFromRationalAbortsIf { - numerator: u128; - denominator: u128; - let scaled_numerator = (numerator as u256)<< 64; - let scaled_denominator = (denominator as u256); - let quotient = scaled_numerator / scaled_denominator; - aborts_if scaled_denominator == 0 with EDENOMINATOR; - aborts_if quotient == 0 && scaled_numerator != 0 with ERATIO_OUT_OF_RANGE; - aborts_if quotient > MAX_U128 with ERATIO_OUT_OF_RANGE; - } - spec fun spec_create_from_rational(numerator: num, denominator: num): FixedPoint64 { - FixedPoint64{value: (numerator << 128) / (denominator << 64)} - } - - /// Create a fixedpoint value from a raw value. - public fun create_from_raw_value(value: u128): FixedPoint64 { - FixedPoint64 { value } - } - spec create_from_raw_value { - pragma opaque; - aborts_if false; - ensures result.value == value; - } - - /// Accessor for the raw u128 value. Other less common operations, such as - /// adding or subtracting FixedPoint64 values, can be done using the raw - /// values directly. - public fun get_raw_value(self: FixedPoint64): u128 { - self.value - } - - /// Returns true if the ratio is zero. - public fun is_zero(self: FixedPoint64): bool { - self.value == 0 - } - - /// Returns the smaller of the two FixedPoint64 numbers. - public fun min(num1: FixedPoint64, num2: FixedPoint64): FixedPoint64 { - if (num1.value < num2.value) { - num1 - } else { - num2 - } - } - spec min { - pragma opaque; - aborts_if false; - ensures result == spec_min(num1, num2); - } - spec fun spec_min(num1: FixedPoint64, num2: FixedPoint64): FixedPoint64 { - if (num1.value < num2.value) { - num1 - } else { - num2 - } - } - - /// Returns the larger of the two FixedPoint64 numbers. - public fun max(num1: FixedPoint64, num2: FixedPoint64): FixedPoint64 { - if (num1.value > num2.value) { - num1 - } else { - num2 - } - } - spec max { - pragma opaque; - aborts_if false; - ensures result == spec_max(num1, num2); - } - spec fun spec_max(num1: FixedPoint64, num2: FixedPoint64): FixedPoint64 { - if (num1.value > num2.value) { - num1 - } else { - num2 - } - } - - /// Returns true if self <= num2 - public fun less_or_equal(self: FixedPoint64, num2: FixedPoint64): bool { - self.value <= num2.value - } - spec less_or_equal { - pragma opaque; - aborts_if false; - ensures result == spec_less_or_equal(self, num2); - } - spec fun spec_less_or_equal(self: FixedPoint64, num2: FixedPoint64): bool { - self.value <= num2.value - } - - /// Returns true if self < num2 - public fun less(self: FixedPoint64, num2: FixedPoint64): bool { - self.value < num2.value - } - spec less { - pragma opaque; - aborts_if false; - ensures result == spec_less(self, num2); - } - spec fun spec_less(self: FixedPoint64, num2: FixedPoint64): bool { - self.value < num2.value - } - - /// Returns true if self >= num2 - public fun greater_or_equal(self: FixedPoint64, num2: FixedPoint64): bool { - self.value >= num2.value - } - spec greater_or_equal { - pragma opaque; - aborts_if false; - ensures result == spec_greater_or_equal(self, num2); - } - spec fun spec_greater_or_equal(self: FixedPoint64, num2: FixedPoint64): bool { - self.value >= num2.value - } - - /// Returns true if self > num2 - public fun greater(self: FixedPoint64, num2: FixedPoint64): bool { - self.value > num2.value - } - spec greater { - pragma opaque; - aborts_if false; - ensures result == spec_greater(self, num2); - } - spec fun spec_greater(self: FixedPoint64, num2: FixedPoint64): bool { - self.value > num2.value - } - - /// Returns true if self = num2 - public fun equal(self: FixedPoint64, num2: FixedPoint64): bool { - self.value == num2.value - } - spec equal { - pragma opaque; - aborts_if false; - ensures result == spec_equal(self, num2); - } - spec fun spec_equal(self: FixedPoint64, num2: FixedPoint64): bool { - self.value == num2.value - } - - /// Returns true if self almost equals to num2, which means abs(num1-num2) <= precision - public fun almost_equal(self: FixedPoint64, num2: FixedPoint64, precision: FixedPoint64): bool { - if (self.value > num2.value) { - (self.value - num2.value <= precision.value) - } else { - (num2.value - self.value <= precision.value) - } - } - spec almost_equal { - pragma opaque; - aborts_if false; - ensures result == spec_almost_equal(self, num2, precision); - } - spec fun spec_almost_equal(self: FixedPoint64, num2: FixedPoint64, precision: FixedPoint64): bool { - if (self.value > num2.value) { - (self.value - num2.value <= precision.value) - } else { - (num2.value - self.value <= precision.value) - } - } - /// Create a fixedpoint value from a u128 value. - public fun create_from_u128(val: u128): FixedPoint64 { - let value = (val as u256) << 64; - assert!(value <= MAX_U128, ERATIO_OUT_OF_RANGE); - FixedPoint64 {value: (value as u128)} - } - spec create_from_u128 { - pragma opaque; - include CreateFromU64AbortsIf; - ensures result == spec_create_from_u128(val); - } - spec schema CreateFromU64AbortsIf { - val: num; - let scaled_value = (val as u256) << 64; - aborts_if scaled_value > MAX_U128; - } - spec fun spec_create_from_u128(val: num): FixedPoint64 { - FixedPoint64 {value: val << 64} - } - - /// Returns the largest integer less than or equal to a given number. - public fun floor(self: FixedPoint64): u128 { - self.value >> 64 - } - spec floor { - pragma opaque; - aborts_if false; - ensures result == spec_floor(self); - } - spec fun spec_floor(self: FixedPoint64): u128 { - let fractional = self.value % (1 << 64); - if (fractional == 0) { - self.value >> 64 - } else { - (self.value - fractional) >> 64 - } - } - - /// Rounds up the given FixedPoint64 to the next largest integer. - public fun ceil(self: FixedPoint64): u128 { - let floored_num = floor(self) << 64; - if (self.value == floored_num) { - return floored_num >> 64 - }; - let val = ((floored_num as u256) + (1 << 64)); - (val >> 64 as u128) - } - spec ceil { - // TODO: set because of timeout (property proved). - pragma verify_duration_estimate = 1000; - pragma opaque; - aborts_if false; - ensures result == spec_ceil(self); - } - spec fun spec_ceil(self: FixedPoint64): u128 { - let fractional = self.value % (1 << 64); - let one = 1 << 64; - if (fractional == 0) { - self.value >> 64 - } else { - (self.value - fractional + one) >> 64 - } - } - - /// Returns the value of a FixedPoint64 to the nearest integer. - public fun round(self: FixedPoint64): u128 { - let floored_num = floor(self) << 64; - let boundary = floored_num + ((1 << 64) / 2); - if (self.value < boundary) { - floored_num >> 64 - } else { - ceil(self) - } - } - spec round { - pragma opaque; - aborts_if false; - ensures result == spec_round(self); - } - spec fun spec_round(self: FixedPoint64): u128 { - let fractional = self.value % (1 << 64); - let boundary = (1 << 64) / 2; - let one = 1 << 64; - if (fractional < boundary) { - (self.value - fractional) >> 64 - } else { - (self.value - fractional + one) >> 64 - } - } - - // **************** SPECIFICATIONS **************** - - spec module {} // switch documentation context to module level - - spec module { - pragma aborts_if_is_strict; - } - - #[test] - public entry fun test_sub() { - let x = create_from_rational(9, 7); - let y = create_from_rational(1, 3); - let result = sub(x, y); - // 9/7 - 1/3 = 20/21 - let expected_result = create_from_rational(20, 21); - assert_approx_the_same((get_raw_value(result) as u256), (get_raw_value(expected_result) as u256), 16); - } - - #[test] - #[expected_failure(abort_code = 0x10006, location = Self)] - public entry fun test_sub_should_abort() { - let x = create_from_rational(1, 3); - let y = create_from_rational(9, 7); - let _ = sub(x, y); - } - - #[test_only] - /// For functions that approximate a value it's useful to test a value is close - /// to the most correct value up to last digit - fun assert_approx_the_same(x: u256, y: u256, precission: u128) { - if (x < y) { - let tmp = x; - x = y; - y = tmp; - }; - let mult = 1u256; - let n = 10u256; - while (precission > 0) { - if (precission % 2 == 1) { - mult = mult * n; - }; - precission = precission / 2; - n = n * n; - }; - assert!((x - y) * mult < x, 0); - } -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/AptosStdlib/from_bcs.move b/examples/oft-movement/build/oft/sources/dependencies/AptosStdlib/from_bcs.move deleted file mode 100644 index 3eb6e2177..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/AptosStdlib/from_bcs.move +++ /dev/null @@ -1,91 +0,0 @@ -/// This module provides a number of functions to convert _primitive_ types from their representation in `std::bcs` -/// to values. This is the opposite of `bcs::to_bytes`. Note that it is not safe to define a generic public `from_bytes` -/// function because this can violate implicit struct invariants, therefore only primitive types are offered. If -/// a general conversion back-and-force is needed, consider the `aptos_std::Any` type which preserves invariants. -/// -/// Example: -/// ``` -/// use std::bcs; -/// use aptos_std::from_bcs; -/// -/// assert!(from_bcs::to_address(bcs::to_bytes(&@0xabcdef)) == @0xabcdef, 0); -/// ``` -module aptos_std::from_bcs { - use std::string::{Self, String}; - - /// UTF8 check failed in conversion from bytes to string - const EINVALID_UTF8: u64 = 0x1; - - public fun to_bool(v: vector): bool { - from_bytes(v) - } - - public fun to_u8(v: vector): u8 { - from_bytes(v) - } - - public fun to_u16(v: vector): u16 { - from_bytes(v) - } - - public fun to_u32(v: vector): u32 { - from_bytes(v) - } - - public fun to_u64(v: vector): u64 { - from_bytes(v) - } - - public fun to_u128(v: vector): u128 { - from_bytes(v) - } - - public fun to_u256(v: vector): u256 { - from_bytes(v) - } - - public fun to_address(v: vector): address { - from_bytes
(v) - } - - public fun to_bytes(v: vector): vector { - from_bytes>(v) - } - - public fun to_string(v: vector): String { - // To make this safe, we need to evaluate the utf8 invariant. - let s = from_bytes(v); - assert!(string::internal_check_utf8(string::bytes(&s)), EINVALID_UTF8); - s - } - - /// Package private native function to deserialize a type T. - /// - /// Note that this function does not put any constraint on `T`. If code uses this function to - /// deserialize a linear value, its their responsibility that the data they deserialize is - /// owned. - public(friend) native fun from_bytes(bytes: vector): T; - friend aptos_std::any; - friend aptos_std::copyable_any; - - - #[test_only] - use std::bcs; - - #[test] - fun test_address() { - let addr = @0x01; - let addr_vec = x"0000000000000000000000000000000000000000000000000000000000000001"; - let addr_out = to_address(addr_vec); - let addr_vec_out = bcs::to_bytes(&addr_out); - assert!(addr == addr_out, 0); - assert!(addr_vec == addr_vec_out, 1); - } - - #[test] - #[expected_failure(abort_code = 0x10001, location = Self)] - fun test_address_fail() { - let bad_vec = b"01"; - to_address(bad_vec); - } -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/AptosStdlib/math128.move b/examples/oft-movement/build/oft/sources/dependencies/AptosStdlib/math128.move deleted file mode 100644 index df239dbca..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/AptosStdlib/math128.move +++ /dev/null @@ -1,381 +0,0 @@ -/// Standard math utilities missing in the Move Language. -module aptos_std::math128 { - - use std::fixed_point32::FixedPoint32; - use std::fixed_point32; - use aptos_std::fixed_point64::FixedPoint64; - use aptos_std::fixed_point64; - - /// Cannot log2 the value 0 - const EINVALID_ARG_FLOOR_LOG2: u64 = 1; - - /// Return the largest of two numbers. - public fun max(a: u128, b: u128): u128 { - if (a >= b) a else b - } - - /// Return the smallest of two numbers. - public fun min(a: u128, b: u128): u128 { - if (a < b) a else b - } - - /// Return the average of two. - public fun average(a: u128, b: u128): u128 { - if (a < b) { - a + (b - a) / 2 - } else { - b + (a - b) / 2 - } - } - - /// Return greatest common divisor of `a` & `b`, via the Euclidean algorithm. - public inline fun gcd(a: u128, b: u128): u128 { - let (large, small) = if (a > b) (a, b) else (b, a); - while (small != 0) { - let tmp = small; - small = large % small; - large = tmp; - }; - large - } - - /// Return least common multiple of `a` & `b` - public inline fun lcm(a: u128, b: u128): u128 { - if (a == 0 || b == 0) { - 0 - } else { - a / gcd(a, b) * b - } - } - - /// Returns a * b / c going through u256 to prevent intermediate overflow - public inline fun mul_div(a: u128, b: u128, c: u128): u128 { - // Inline functions cannot take constants, as then every module using it needs the constant - assert!(c != 0, std::error::invalid_argument(4)); - (((a as u256) * (b as u256) / (c as u256)) as u128) - } - - /// Return x clamped to the interval [lower, upper]. - public fun clamp(x: u128, lower: u128, upper: u128): u128 { - min(upper, max(lower, x)) - } - - /// Return the value of n raised to power e - public fun pow(n: u128, e: u128): u128 { - if (e == 0) { - 1 - } else { - let p = 1; - while (e > 1) { - if (e % 2 == 1) { - p = p * n; - }; - e = e / 2; - n = n * n; - }; - p * n - } - } - - /// Returns floor(log2(x)) - public fun floor_log2(x: u128): u8 { - let res = 0; - assert!(x != 0, std::error::invalid_argument(EINVALID_ARG_FLOOR_LOG2)); - // Effectively the position of the most significant set bit - let n = 64; - while (n > 0) { - if (x >= (1 << n)) { - x = x >> n; - res = res + n; - }; - n = n >> 1; - }; - res - } - - // Returns log2(x) - public fun log2(x: u128): FixedPoint32 { - let integer_part = floor_log2(x); - // Normalize x to [1, 2) in fixed point 32. - if (x >= 1 << 32) { - x = x >> (integer_part - 32); - } else { - x = x << (32 - integer_part); - }; - let frac = 0; - let delta = 1 << 31; - while (delta != 0) { - // log x = 1/2 log x^2 - // x in [1, 2) - x = (x * x) >> 32; - // x is now in [1, 4) - // if x in [2, 4) then log x = 1 + log (x / 2) - if (x >= (2 << 32)) { frac = frac + delta; x = x >> 1; }; - delta = delta >> 1; - }; - fixed_point32::create_from_raw_value (((integer_part as u64) << 32) + frac) - } - - // Return log2(x) as FixedPoint64 - public fun log2_64(x: u128): FixedPoint64 { - let integer_part = floor_log2(x); - // Normalize x to [1, 2) in fixed point 63. To ensure x is smaller then 1<<64 - if (x >= 1 << 63) { - x = x >> (integer_part - 63); - } else { - x = x << (63 - integer_part); - }; - let frac = 0; - let delta = 1 << 63; - while (delta != 0) { - // log x = 1/2 log x^2 - // x in [1, 2) - x = (x * x) >> 63; - // x is now in [1, 4) - // if x in [2, 4) then log x = 1 + log (x / 2) - if (x >= (2 << 63)) { frac = frac + delta; x = x >> 1; }; - delta = delta >> 1; - }; - fixed_point64::create_from_raw_value (((integer_part as u128) << 64) + frac) - } - - /// Returns square root of x, precisely floor(sqrt(x)) - public fun sqrt(x: u128): u128 { - if (x == 0) return 0; - // Note the plus 1 in the expression. Let n = floor_lg2(x) we have x in [2^n, 2^{n+1}) and thus the answer in - // the half-open interval [2^(n/2), 2^{(n+1)/2}). For even n we can write this as [2^(n/2), sqrt(2) 2^{n/2}) - // for odd n [2^((n+1)/2)/sqrt(2), 2^((n+1)/2). For even n the left end point is integer for odd the right - // end point is integer. If we choose as our first approximation the integer end point we have as maximum - // relative error either (sqrt(2) - 1) or (1 - 1/sqrt(2)) both are smaller then 1/2. - let res = 1 << ((floor_log2(x) + 1) >> 1); - // We use standard newton-rhapson iteration to improve the initial approximation. - // The error term evolves as delta_i+1 = delta_i^2 / 2 (quadratic convergence). - // It turns out that after 5 iterations the delta is smaller than 2^-64 and thus below the treshold. - res = (res + x / res) >> 1; - res = (res + x / res) >> 1; - res = (res + x / res) >> 1; - res = (res + x / res) >> 1; - res = (res + x / res) >> 1; - min(res, x / res) - } - - public inline fun ceil_div(x: u128, y: u128): u128 { - // ceil_div(x, y) = floor((x + y - 1) / y) = floor((x - 1) / y) + 1 - // (x + y - 1) could spuriously overflow. so we use the later version - if (x == 0) { - // Inline functions cannot take constants, as then every module using it needs the constant - assert!(y != 0, std::error::invalid_argument(4)); - 0 - } - else (x - 1) / y + 1 - } - - #[test] - public entry fun test_ceil_div() { - assert!(ceil_div(9, 3) == 3, 0); - assert!(ceil_div(10, 3) == 4, 0); - assert!(ceil_div(11, 3) == 4, 0); - assert!(ceil_div(12, 3) == 4, 0); - assert!(ceil_div(13, 3) == 5, 0); - - // No overflow - assert!(ceil_div((((1u256<<128) - 9) as u128), 11) == 30934760629176223951215873402888019223, 0); - } - - #[test] - fun test_gcd() { - assert!(gcd(20, 8) == 4, 0); - assert!(gcd(8, 20) == 4, 0); - assert!(gcd(1, 100) == 1, 0); - assert!(gcd(100, 1) == 1, 0); - assert!(gcd(210, 45) == 15, 0); - assert!(gcd(45, 210) == 15, 0); - assert!(gcd(0, 0) == 0, 0); - assert!(gcd(1, 0) == 1, 0); - assert!(gcd(50, 0) == 50, 0); - assert!(gcd(0, 1) == 1, 0); - assert!(gcd(0, 50) == 50, 0); - assert!(gcd(54, 24) == 6, 0); - assert!(gcd(24, 54) == 6, 0); - assert!(gcd(10, 10) == 10, 0); - assert!(gcd(1071, 462) == 21, 0); - assert!(gcd(462, 1071) == 21, 0); - } - - #[test] - fun test_lcm() { - assert!(lcm(0, 0) == 0, 0); - assert!(lcm(0, 1) == 0, 0); - assert!(lcm(1, 0) == 0, 0); - assert!(lcm(1, 1) == 1, 0); - assert!(lcm(1024, 144) == 9216, 0); - assert!(lcm(2, 17) == 34, 0); - assert!(lcm(17, 2) == 34, 0); - assert!(lcm(24, 54) == 216, 0); - assert!(lcm(115, 9) == 1035, 0); - assert!(lcm(101, 14) == 1414, 0); - assert!(lcm(110, 5) == 110, 0); - assert!(lcm(100, 8) == 200, 0); - assert!(lcm(32, 6) == 96, 0); - assert!(lcm(110, 13) == 1430, 0); - assert!(lcm(117, 13) == 117, 0); - assert!(lcm(100, 125) == 500, 0); - assert!(lcm(101, 3) == 303, 0); - assert!(lcm(115, 16) == 1840, 0); - } - - #[test] - public entry fun test_max() { - let result = max(3u128, 6u128); - assert!(result == 6, 0); - - let result = max(15u128, 12u128); - assert!(result == 15, 1); - } - - #[test] - public entry fun test_min() { - let result = min(3u128, 6u128); - assert!(result == 3, 0); - - let result = min(15u128, 12u128); - assert!(result == 12, 1); - } - - #[test] - public entry fun test_average() { - let result = average(3u128, 6u128); - assert!(result == 4, 0); - - let result = average(15u128, 12u128); - assert!(result == 13, 0); - } - - #[test] - public entry fun test_pow() { - let result = pow(10u128, 18u128); - assert!(result == 1000000000000000000, 0); - - let result = pow(10u128, 1u128); - assert!(result == 10, 0); - - let result = pow(10u128, 0u128); - assert!(result == 1, 0); - } - - #[test] - public entry fun test_mul_div() { - let tmp: u128 = 1<<127; - assert!(mul_div(tmp,tmp,tmp) == tmp, 0); - - assert!(mul_div(tmp,5,5) == tmp, 0); - // Note that ordering other way is imprecise. - assert!((tmp / 5) * 5 != tmp, 0); - } - - #[test] - #[expected_failure(abort_code = 0x10004, location = aptos_std::math128)] - public entry fun test_mul_div_by_zero() { - mul_div(1, 1, 0); - } - - #[test] - public entry fun test_floor_log2() { - let idx: u8 = 0; - while (idx < 128) { - assert!(floor_log2(1<> 32; - let taylor3 = (taylor2 * taylor1) >> 32; - let expected = expected - ((taylor1 + taylor2 / 2 + taylor3 / 3) << 32) / 2977044472; - // verify it matches to 8 significant digits - assert_approx_the_same((fixed_point32::get_raw_value(res) as u128), expected, 8); - idx = idx + 1; - }; - } - - #[test] - public entry fun test_log2_64() { - let idx: u8 = 0; - while (idx < 128) { - let res = log2_64(1<> 64; - let taylor3 = (taylor2 * taylor1) >> 64; - let taylor4 = (taylor3 * taylor1) >> 64; - let expected = expected - ((taylor1 + taylor2 / 2 + taylor3 / 3 + taylor4 / 4) << 64) / 12786308645202655660; - // verify it matches to 8 significant digits - assert_approx_the_same(fixed_point64::get_raw_value(res), (expected as u128), 14); - idx = idx + 1; - }; - } - - #[test] - public entry fun test_sqrt() { - let result = sqrt(0); - assert!(result == 0, 0); - - let result = sqrt(1); - assert!(result == 1, 0); - - let result = sqrt(256); - assert!(result == 16, 0); - - let result = sqrt(1<<126); - assert!(result == 1<<63, 0); - - let result = sqrt((((1u256 << 128) - 1) as u128)); - assert!(result == (1u128 << 64) - 1, 0); - - let result = sqrt((1u128 << 127)); - assert!(result == 13043817825332782212, 0); - - let result = sqrt((1u128 << 127) - 1); - assert!(result == 13043817825332782212, 0); - } - - #[test_only] - /// For functions that approximate a value it's useful to test a value is close - /// to the most correct value up to last digit - fun assert_approx_the_same(x: u128, y: u128, precission: u128) { - if (x < y) { - let tmp = x; - x = y; - y = tmp; - }; - let mult = pow(10, precission); - assert!((x - y) * mult < x, 0); - } -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/AptosStdlib/math64.move b/examples/oft-movement/build/oft/sources/dependencies/AptosStdlib/math64.move deleted file mode 100644 index 88cd90a68..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/AptosStdlib/math64.move +++ /dev/null @@ -1,336 +0,0 @@ -/// Standard math utilities missing in the Move Language. -module aptos_std::math64 { - - use std::fixed_point32::FixedPoint32; - use std::fixed_point32; - - /// Cannot log2 the value 0 - const EINVALID_ARG_FLOOR_LOG2: u64 = 1; - - /// Return the largest of two numbers. - public fun max(a: u64, b: u64): u64 { - if (a >= b) a else b - } - - /// Return the smallest of two numbers. - public fun min(a: u64, b: u64): u64 { - if (a < b) a else b - } - - /// Return the average of two. - public fun average(a: u64, b: u64): u64 { - if (a < b) { - a + (b - a) / 2 - } else { - b + (a - b) / 2 - } - } - - /// Return greatest common divisor of `a` & `b`, via the Euclidean algorithm. - public inline fun gcd(a: u64, b: u64): u64 { - let (large, small) = if (a > b) (a, b) else (b, a); - while (small != 0) { - let tmp = small; - small = large % small; - large = tmp; - }; - large - } - - /// Returns least common multiple of `a` & `b`. - public inline fun lcm(a: u64, b: u64): u64 { - if (a == 0 || b == 0) { - 0 - } else { - a / gcd(a, b) * b - } - } - - /// Returns a * b / c going through u128 to prevent intermediate overflow - public inline fun mul_div(a: u64, b: u64, c: u64): u64 { - // Inline functions cannot take constants, as then every module using it needs the constant - assert!(c != 0, std::error::invalid_argument(4)); - (((a as u128) * (b as u128) / (c as u128)) as u64) - } - - /// Return x clamped to the interval [lower, upper]. - public fun clamp(x: u64, lower: u64, upper: u64): u64 { - min(upper, max(lower, x)) - } - - /// Return the value of n raised to power e - public fun pow(n: u64, e: u64): u64 { - if (e == 0) { - 1 - } else { - let p = 1; - while (e > 1) { - if (e % 2 == 1) { - p = p * n; - }; - e = e / 2; - n = n * n; - }; - p * n - } - } - - /// Returns floor(lg2(x)) - public fun floor_log2(x: u64): u8 { - let res = 0; - assert!(x != 0, std::error::invalid_argument(EINVALID_ARG_FLOOR_LOG2)); - // Effectively the position of the most significant set bit - let n = 32; - while (n > 0) { - if (x >= (1 << n)) { - x = x >> n; - res = res + n; - }; - n = n >> 1; - }; - res - } - - // Returns log2(x) - public fun log2(x: u64): FixedPoint32 { - let integer_part = floor_log2(x); - // Normalize x to [1, 2) in fixed point 32. - let y = (if (x >= 1 << 32) { - x >> (integer_part - 32) - } else { - x << (32 - integer_part) - } as u128); - let frac = 0; - let delta = 1 << 31; - while (delta != 0) { - // log x = 1/2 log x^2 - // x in [1, 2) - y = (y * y) >> 32; - // x is now in [1, 4) - // if x in [2, 4) then log x = 1 + log (x / 2) - if (y >= (2 << 32)) { frac = frac + delta; y = y >> 1; }; - delta = delta >> 1; - }; - fixed_point32::create_from_raw_value (((integer_part as u64) << 32) + frac) - } - - /// Returns square root of x, precisely floor(sqrt(x)) - public fun sqrt(x: u64): u64 { - if (x == 0) return 0; - // Note the plus 1 in the expression. Let n = floor_lg2(x) we have x in [2^n, 2^(n+1)> and thus the answer in - // the half-open interval [2^(n/2), 2^((n+1)/2)>. For even n we can write this as [2^(n/2), sqrt(2) 2^(n/2)> - // for odd n [2^((n+1)/2)/sqrt(2), 2^((n+1)/2>. For even n the left end point is integer for odd the right - // end point is integer. If we choose as our first approximation the integer end point we have as maximum - // relative error either (sqrt(2) - 1) or (1 - 1/sqrt(2)) both are smaller then 1/2. - let res = 1 << ((floor_log2(x) + 1) >> 1); - // We use standard newton-rhapson iteration to improve the initial approximation. - // The error term evolves as delta_i+1 = delta_i^2 / 2 (quadratic convergence). - // It turns out that after 4 iterations the delta is smaller than 2^-32 and thus below the treshold. - res = (res + x / res) >> 1; - res = (res + x / res) >> 1; - res = (res + x / res) >> 1; - res = (res + x / res) >> 1; - min(res, x / res) - } - - public inline fun ceil_div(x: u64, y: u64): u64 { - // ceil_div(x, y) = floor((x + y - 1) / y) = floor((x - 1) / y) + 1 - // (x + y - 1) could spuriously overflow. so we use the later version - if (x == 0) { - // Inline functions cannot take constants, as then every module using it needs the constant - assert!(y != 0, std::error::invalid_argument(4)); - 0 - } - else (x - 1) / y + 1 - } - - #[test] - public entry fun test_ceil_div() { - assert!(ceil_div(9, 3) == 3, 0); - assert!(ceil_div(10, 3) == 4, 0); - assert!(ceil_div(11, 3) == 4, 0); - assert!(ceil_div(12, 3) == 4, 0); - assert!(ceil_div(13, 3) == 5, 0); - - // No overflow - assert!(ceil_div((((1u128<<64) - 9) as u64), 11) == 1676976733973595601, 0); - } - - #[test] - fun test_gcd() { - assert!(gcd(20, 8) == 4, 0); - assert!(gcd(8, 20) == 4, 0); - assert!(gcd(1, 100) == 1, 0); - assert!(gcd(100, 1) == 1, 0); - assert!(gcd(210, 45) == 15, 0); - assert!(gcd(45, 210) == 15, 0); - assert!(gcd(0, 0) == 0, 0); - assert!(gcd(1, 0) == 1, 0); - assert!(gcd(50, 0) == 50, 0); - assert!(gcd(0, 1) == 1, 0); - assert!(gcd(0, 50) == 50, 0); - assert!(gcd(54, 24) == 6, 0); - assert!(gcd(24, 54) == 6, 0); - assert!(gcd(10, 10) == 10, 0); - assert!(gcd(1071, 462) == 21, 0); - assert!(gcd(462, 1071) == 21, 0); - } - - #[test] - fun test_lcm() { - assert!(lcm(0, 0) == 0, 0); - assert!(lcm(0, 1) == 0, 0); - assert!(lcm(1, 0) == 0, 0); - assert!(lcm(1, 1) == 1, 0); - assert!(lcm(1024, 144) == 9216, 0); - assert!(lcm(2, 17) == 34, 0); - assert!(lcm(17, 2) == 34, 0); - assert!(lcm(24, 54) == 216, 0); - assert!(lcm(115, 9) == 1035, 0); - assert!(lcm(101, 14) == 1414, 0); - assert!(lcm(110, 5) == 110, 0); - assert!(lcm(100, 8) == 200, 0); - assert!(lcm(32, 6) == 96, 0); - assert!(lcm(110, 13) == 1430, 0); - assert!(lcm(117, 13) == 117, 0); - assert!(lcm(100, 125) == 500, 0); - assert!(lcm(101, 3) == 303, 0); - assert!(lcm(115, 16) == 1840, 0); - } - - #[test] - public entry fun test_max_64() { - let result = max(3u64, 6u64); - assert!(result == 6, 0); - - let result = max(15u64, 12u64); - assert!(result == 15, 1); - } - - #[test] - public entry fun test_min() { - let result = min(3u64, 6u64); - assert!(result == 3, 0); - - let result = min(15u64, 12u64); - assert!(result == 12, 1); - } - - #[test] - public entry fun test_average() { - let result = average(3u64, 6u64); - assert!(result == 4, 0); - - let result = average(15u64, 12u64); - assert!(result == 13, 0); - } - - #[test] - public entry fun test_average_does_not_overflow() { - let result = average(18446744073709551615, 18446744073709551615); - assert!(result == 18446744073709551615, 0); - } - - #[test] - public entry fun test_pow() { - let result = pow(10u64, 18u64); - assert!(result == 1000000000000000000, 0); - - let result = pow(10u64, 1u64); - assert!(result == 10, 0); - - let result = pow(10u64, 0u64); - assert!(result == 1, 0); - } - - #[test] - public entry fun test_mul_div() { - let tmp: u64 = 1<<63; - assert!(mul_div(tmp,tmp,tmp) == tmp, 0); - - assert!(mul_div(tmp,5,5) == tmp, 0); - // Note that ordering other way is imprecise. - assert!((tmp / 5) * 5 != tmp, 0); - } - - #[test] - #[expected_failure(abort_code = 0x10004, location = aptos_std::math64)] - public entry fun test_mul_div_by_zero() { - mul_div(1, 1, 0); - } - - #[test] - public entry fun test_floor_lg2() { - let idx: u8 = 0; - while (idx < 64) { - assert!(floor_log2(1<> 32; - let taylor3 = (taylor2 * taylor1) >> 32; - let expected = expected - ((taylor1 + taylor2 / 2 + taylor3 / 3) << 32) / 2977044472; - // verify it matches to 8 significant digits - assert_approx_the_same((fixed_point32::get_raw_value(res) as u128), expected, 8); - idx = idx + 1; - }; - } - - #[test] - public entry fun test_sqrt() { - let result = sqrt(0); - assert!(result == 0, 0); - - let result = sqrt(1); - assert!(result == 1, 0); - - let result = sqrt(256); - assert!(result == 16, 0); - - let result = sqrt(1<<62); - assert!(result == 1<<31, 0); - - let result = sqrt((((1u128 << 64) - 1) as u64)); - assert!(result == (1u64 << 32) - 1, 0); - - let result = sqrt((1u64 << 63)); - assert!(result == 3037000499, 0); - - let result = sqrt((1u64 << 63) - 1); - assert!(result == 3037000499, 0); - } - - #[test_only] - /// For functions that approximate a value it's useful to test a value is close - /// to the most correct value up to last digit - fun assert_approx_the_same(x: u128, y: u128, precission: u64) { - if (x < y) { - let tmp = x; - x = y; - y = tmp; - }; - let mult = (pow(10, precission) as u128); - assert!((x - y) * mult < x, 0); - } -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/AptosStdlib/math_fixed.move b/examples/oft-movement/build/oft/sources/dependencies/AptosStdlib/math_fixed.move deleted file mode 100644 index a2a854d0c..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/AptosStdlib/math_fixed.move +++ /dev/null @@ -1,139 +0,0 @@ -/// Standard math utilities missing in the Move Language. -module aptos_std::math_fixed { - use std::fixed_point32; - use std::fixed_point32::FixedPoint32; - use aptos_std::math128; - use aptos_std::math64; - - /// Abort code on overflow - const EOVERFLOW_EXP: u64 = 1; - - /// Natural log 2 in 32 bit fixed point - const LN2: u128 = 2977044472; // ln(2) in fixed 32 representation - const LN2_X_32: u64 = 32 * 2977044472; // 32 * ln(2) in fixed 32 representation - - /// Square root of fixed point number - public fun sqrt(x: FixedPoint32): FixedPoint32 { - let y = (fixed_point32::get_raw_value(x) as u128); - fixed_point32::create_from_raw_value((math128::sqrt(y << 32) as u64)) - } - - /// Exponent function with a precission of 9 digits. - public fun exp(x: FixedPoint32): FixedPoint32 { - let raw_value = (fixed_point32::get_raw_value(x) as u128); - fixed_point32::create_from_raw_value((exp_raw(raw_value) as u64)) - } - - /// Because log2 is negative for values < 1 we instead return log2(x) + 32 which - /// is positive for all values of x. - public fun log2_plus_32(x: FixedPoint32): FixedPoint32 { - let raw_value = (fixed_point32::get_raw_value(x) as u128); - math128::log2(raw_value) - } - - public fun ln_plus_32ln2(x: FixedPoint32): FixedPoint32 { - let raw_value = (fixed_point32::get_raw_value(x) as u128); - let x = (fixed_point32::get_raw_value(math128::log2(raw_value)) as u128); - fixed_point32::create_from_raw_value((x * LN2 >> 32 as u64)) - } - - /// Integer power of a fixed point number - public fun pow(x: FixedPoint32, n: u64): FixedPoint32 { - let raw_value = (fixed_point32::get_raw_value(x) as u128); - fixed_point32::create_from_raw_value((pow_raw(raw_value, (n as u128)) as u64)) - } - - /// Specialized function for x * y / z that omits intermediate shifting - public fun mul_div(x: FixedPoint32, y: FixedPoint32, z: FixedPoint32): FixedPoint32 { - let a = fixed_point32::get_raw_value(x); - let b = fixed_point32::get_raw_value(y); - let c = fixed_point32::get_raw_value(z); - fixed_point32::create_from_raw_value (math64::mul_div(a, b, c)) - } - - // Calculate e^x where x and the result are fixed point numbers - fun exp_raw(x: u128): u128 { - // exp(x / 2^32) = 2^(x / (2^32 * ln(2))) = 2^(floor(x / (2^32 * ln(2))) + frac(x / (2^32 * ln(2)))) - let shift_long = x / LN2; - assert!(shift_long <= 31, std::error::invalid_state(EOVERFLOW_EXP)); - let shift = (shift_long as u8); - let remainder = x % LN2; - // At this point we want to calculate 2^(remainder / ln2) << shift - // ln2 = 595528 * 4999 which means - let bigfactor = 595528; - let exponent = remainder / bigfactor; - let x = remainder % bigfactor; - // 2^(remainder / ln2) = (2^(1/4999))^exponent * exp(x / 2^32) - let roottwo = 4295562865; // fixed point representation of 2^(1/4999) - // This has an error of 5000 / 4 10^9 roughly 6 digits of precission - let power = pow_raw(roottwo, exponent); - let eps_correction = 1241009291; - power = power + ((power * eps_correction * exponent) >> 64); - // x is fixed point number smaller than 595528/2^32 < 0.00014 so we need only 2 tayler steps - // to get the 6 digits of precission - let taylor1 = (power * x) >> (32 - shift); - let taylor2 = (taylor1 * x) >> 32; - let taylor3 = (taylor2 * x) >> 32; - (power << shift) + taylor1 + taylor2 / 2 + taylor3 / 6 - } - - // Calculate x to the power of n, where x and the result are fixed point numbers. - fun pow_raw(x: u128, n: u128): u128 { - let res: u256 = 1 << 64; - x = x << 32; - while (n != 0) { - if (n & 1 != 0) { - res = (res * (x as u256)) >> 64; - }; - n = n >> 1; - x = ((((x as u256) * (x as u256)) >> 64) as u128); - }; - ((res >> 32) as u128) - } - - #[test] - public entry fun test_sqrt() { - // Sqrt is based on math128::sqrt and thus most of the testing is done there. - let fixed_base = 1 << 32; - let result = sqrt(fixed_point32::create_from_u64(1)); - assert!(fixed_point32::get_raw_value(result) == fixed_base, 0); - - let result = sqrt(fixed_point32::create_from_u64(2)); - assert_approx_the_same((fixed_point32::get_raw_value(result) as u128), 6074001000, 9); - } - - #[test] - public entry fun test_exp() { - let fixed_base = 1 << 32; - let result = exp_raw(0); - assert!(result == fixed_base, 0); - - let result = exp_raw(fixed_base); - let e = 11674931554; // e in 32 bit fixed point - assert_approx_the_same(result, e, 9); - - let result = exp_raw(10 * fixed_base); - let exp10 = 94602950235157; // e^10 in 32 bit fixed point - assert_approx_the_same(result, exp10, 9); - } - - #[test] - public entry fun test_pow() { - // We use the case of exp - let result = pow_raw(4295562865, 4999); - assert_approx_the_same(result, 1 << 33, 6); - } - - #[test_only] - /// For functions that approximate a value it's useful to test a value is close - /// to the most correct value up to last digit - fun assert_approx_the_same(x: u128, y: u128, precission: u128) { - if (x < y) { - let tmp = x; - x = y; - y = tmp; - }; - let mult = math128::pow(10, precission); - assert!((x - y) * mult < x, 0); - } -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/AptosStdlib/math_fixed64.move b/examples/oft-movement/build/oft/sources/dependencies/AptosStdlib/math_fixed64.move deleted file mode 100644 index 2369b6afe..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/AptosStdlib/math_fixed64.move +++ /dev/null @@ -1,142 +0,0 @@ -/// Standard math utilities missing in the Move Language. - -module aptos_std::math_fixed64 { - use aptos_std::fixed_point64; - use aptos_std::fixed_point64::FixedPoint64; - use aptos_std::math128; - - /// Abort code on overflow - const EOVERFLOW_EXP: u64 = 1; - - /// Natural log 2 in 32 bit fixed point - const LN2: u256 = 12786308645202655660; // ln(2) in fixed 64 representation - - /// Square root of fixed point number - public fun sqrt(x: FixedPoint64): FixedPoint64 { - let y = fixed_point64::get_raw_value(x); - let z = (math128::sqrt(y) << 32 as u256); - z = (z + ((y as u256) << 64) / z) >> 1; - fixed_point64::create_from_raw_value((z as u128)) - } - - /// Exponent function with a precission of 9 digits. - public fun exp(x: FixedPoint64): FixedPoint64 { - let raw_value = (fixed_point64::get_raw_value(x) as u256); - fixed_point64::create_from_raw_value((exp_raw(raw_value) as u128)) - } - - /// Because log2 is negative for values < 1 we instead return log2(x) + 64 which - /// is positive for all values of x. - public fun log2_plus_64(x: FixedPoint64): FixedPoint64 { - let raw_value = (fixed_point64::get_raw_value(x) as u128); - math128::log2_64(raw_value) - } - - public fun ln_plus_32ln2(x: FixedPoint64): FixedPoint64 { - let raw_value = fixed_point64::get_raw_value(x); - let x = (fixed_point64::get_raw_value(math128::log2_64(raw_value)) as u256); - fixed_point64::create_from_raw_value(((x * LN2) >> 64 as u128)) - } - - /// Integer power of a fixed point number - public fun pow(x: FixedPoint64, n: u64): FixedPoint64 { - let raw_value = (fixed_point64::get_raw_value(x) as u256); - fixed_point64::create_from_raw_value((pow_raw(raw_value, (n as u128)) as u128)) - } - - /// Specialized function for x * y / z that omits intermediate shifting - public fun mul_div(x: FixedPoint64, y: FixedPoint64, z: FixedPoint64): FixedPoint64 { - let a = fixed_point64::get_raw_value(x); - let b = fixed_point64::get_raw_value(y); - let c = fixed_point64::get_raw_value(z); - fixed_point64::create_from_raw_value (math128::mul_div(a, b, c)) - } - - // Calculate e^x where x and the result are fixed point numbers - fun exp_raw(x: u256): u256 { - // exp(x / 2^64) = 2^(x / (2^64 * ln(2))) = 2^(floor(x / (2^64 * ln(2))) + frac(x / (2^64 * ln(2)))) - let shift_long = x / LN2; - assert!(shift_long <= 63, std::error::invalid_state(EOVERFLOW_EXP)); - let shift = (shift_long as u8); - let remainder = x % LN2; - // At this point we want to calculate 2^(remainder / ln2) << shift - // ln2 = 580 * 22045359733108027 - let bigfactor = 22045359733108027; - let exponent = remainder / bigfactor; - let x = remainder % bigfactor; - // 2^(remainder / ln2) = (2^(1/580))^exponent * exp(x / 2^64) - let roottwo = 18468802611690918839; // fixed point representation of 2^(1/580) - // 2^(1/580) = roottwo(1 - eps), so the number we seek is roottwo^exponent (1 - eps * exponent) - let power = pow_raw(roottwo, (exponent as u128)); - let eps_correction = 219071715585908898; - power = power - ((power * eps_correction * exponent) >> 128); - // x is fixed point number smaller than bigfactor/2^64 < 0.0011 so we need only 5 tayler steps - // to get the 15 digits of precission - let taylor1 = (power * x) >> (64 - shift); - let taylor2 = (taylor1 * x) >> 64; - let taylor3 = (taylor2 * x) >> 64; - let taylor4 = (taylor3 * x) >> 64; - let taylor5 = (taylor4 * x) >> 64; - let taylor6 = (taylor5 * x) >> 64; - (power << shift) + taylor1 + taylor2 / 2 + taylor3 / 6 + taylor4 / 24 + taylor5 / 120 + taylor6 / 720 - } - - // Calculate x to the power of n, where x and the result are fixed point numbers. - fun pow_raw(x: u256, n: u128): u256 { - let res: u256 = 1 << 64; - while (n != 0) { - if (n & 1 != 0) { - res = (res * x) >> 64; - }; - n = n >> 1; - x = (x * x) >> 64; - }; - res - } - - #[test] - public entry fun test_sqrt() { - // Sqrt is based on math128::sqrt and thus most of the testing is done there. - let fixed_base = 1 << 64; - let result = sqrt(fixed_point64::create_from_u128(1)); - assert!(fixed_point64::get_raw_value(result) == fixed_base, 0); - - let result = sqrt(fixed_point64::create_from_u128(2)); - assert_approx_the_same((fixed_point64::get_raw_value(result) as u256), 26087635650665564424, 16); - } - - #[test] - public entry fun test_exp() { - let fixed_base = 1 << 64; - let result = exp_raw(0); - assert!(result == fixed_base, 0); - - let result = exp_raw(fixed_base); - let e = 50143449209799256682; // e in 32 bit fixed point - assert_approx_the_same(result, e, 16); - - let result = exp_raw(10 * fixed_base); - let exp10 = 406316577365116946489258; // e^10 in 32 bit fixed point - assert_approx_the_same(result, exp10, 16); - } - - #[test] - public entry fun test_pow() { - // We use the case of exp - let result = pow_raw(18468802611690918839, 580); - assert_approx_the_same(result, 1 << 65, 16); - } - - #[test_only] - /// For functions that approximate a value it's useful to test a value is close - /// to the most correct value up to last digit - fun assert_approx_the_same(x: u256, y: u256, precission: u128) { - if (x < y) { - let tmp = x; - x = y; - y = tmp; - }; - let mult = (math128::pow(10, precission) as u256); - assert!((x - y) * mult < x, 0); - } -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/AptosStdlib/multi_ed25519.move b/examples/oft-movement/build/oft/sources/dependencies/AptosStdlib/multi_ed25519.move deleted file mode 100644 index f1f97bc63..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/AptosStdlib/multi_ed25519.move +++ /dev/null @@ -1,482 +0,0 @@ -/// Exports MultiEd25519 multi-signatures in Move. -/// This module has the exact same interface as the Ed25519 module. - -module aptos_std::multi_ed25519 { - use std::bcs; - use std::error; - use std::features; - use std::option::{Self, Option}; - use std::vector; - use aptos_std::ed25519; - - // - // Error codes - // - - /// Wrong number of bytes were given as input when deserializing an Ed25519 public key. - const E_WRONG_PUBKEY_SIZE: u64 = 1; - - /// Wrong number of bytes were given as input when deserializing an Ed25519 signature. - const E_WRONG_SIGNATURE_SIZE: u64 = 2; - - /// The threshold must be in the range `[1, n]`, where n is the total number of signers. - const E_INVALID_THRESHOLD_OR_NUMBER_OF_SIGNERS: u64 = 3; - - /// The native functions have not been rolled out yet. - const E_NATIVE_FUN_NOT_AVAILABLE: u64 = 4; - - // - // Constants - // - - /// The identifier of the MultiEd25519 signature scheme, which is used when deriving Aptos authentication keys by hashing - /// it together with an MultiEd25519 public key. - const SIGNATURE_SCHEME_ID: u8 = 1; - - /// The size of an individual Ed25519 public key, in bytes. - /// (A MultiEd25519 public key consists of several of these, plus the threshold.) - const INDIVIDUAL_PUBLIC_KEY_NUM_BYTES: u64 = 32; - - /// The size of an individual Ed25519 signature, in bytes. - /// (A MultiEd25519 signature consists of several of these, plus the signer bitmap.) - const INDIVIDUAL_SIGNATURE_NUM_BYTES: u64 = 64; - - /// When serializing a MultiEd25519 public key, the threshold k will be encoded using this many bytes. - const THRESHOLD_SIZE_BYTES: u64 = 1; - - /// When serializing a MultiEd25519 signature, the bitmap that indicates the signers will be encoded using this many - /// bytes. - const BITMAP_NUM_OF_BYTES: u64 = 4; - - /// Max number of ed25519 public keys allowed in multi-ed25519 keys - const MAX_NUMBER_OF_PUBLIC_KEYS: u64 = 32; - - // - // Structs - // - #[test_only] - struct SecretKey has drop { - bytes: vector, - } - - /// An *unvalidated*, k out of n MultiEd25519 public key. The `bytes` field contains (1) several chunks of - /// `ed25519::PUBLIC_KEY_NUM_BYTES` bytes, each encoding a Ed25519 PK, and (2) a single byte encoding the threshold k. - /// *Unvalidated* means there is no guarantee that the underlying PKs are valid elliptic curve points of non-small - /// order. - struct UnvalidatedPublicKey has copy, drop, store { - bytes: vector - } - - /// A *validated* k out of n MultiEd25519 public key. *Validated* means that all the underlying PKs will be - /// elliptic curve points that are NOT of small-order. It does not necessarily mean they will be prime-order points. - /// This struct encodes the public key exactly as `UnvalidatedPublicKey`. - /// - /// For now, this struct is not used in any verification functions, but it might be in the future. - struct ValidatedPublicKey has copy, drop, store { - bytes: vector - } - - /// A purported MultiEd25519 multi-signature that can be verified via `signature_verify_strict` or - /// `signature_verify_strict_t`. The `bytes` field contains (1) several chunks of `ed25519::SIGNATURE_NUM_BYTES` - /// bytes, each encoding a Ed25519 signature, and (2) a `BITMAP_NUM_OF_BYTES`-byte bitmap encoding the signer - /// identities. - struct Signature has copy, drop, store { - bytes: vector - } - - // - // Functions - // - - #[test_only] - public fun generate_keys(threshold: u8, n: u8): (SecretKey, ValidatedPublicKey) { - assert!(1 <= threshold && threshold <= n, error::invalid_argument(E_INVALID_THRESHOLD_OR_NUMBER_OF_SIGNERS)); - let (sk_bytes, pk_bytes) = generate_keys_internal(threshold, n); - let sk = SecretKey { - bytes: sk_bytes - }; - let pk = ValidatedPublicKey { - bytes: pk_bytes - }; - (sk, pk) - } - - #[test_only] - public fun sign_arbitrary_bytes(sk: &SecretKey, msg: vector) : Signature { - Signature { - bytes: sign_internal(sk.bytes, msg) - } - } - - #[test_only] - public fun sign_struct(sk: &SecretKey, data: T) : Signature { - let encoded = ed25519::new_signed_message(data); - Signature { - bytes: sign_internal(sk.bytes, bcs::to_bytes(&encoded)), - } - } - - /// Parses the input 32 bytes as an *unvalidated* MultiEd25519 public key. - /// - /// NOTE: This function could have also checked that the # of sub-PKs is > 0, but it did not. However, since such - /// invalid PKs are rejected during signature verification (see `bugfix_unvalidated_pk_from_zero_subpks`) they - /// will not cause problems. - /// - /// We could fix this API by adding a new one that checks the # of sub-PKs is > 0, but it is likely not a good idea - /// to reproduce the PK validation logic in Move. We should not have done so in the first place. Instead, we will - /// leave it as is and continue assuming `UnvalidatedPublicKey` objects could be invalid PKs that will safely be - /// rejected during signature verification. - public fun new_unvalidated_public_key_from_bytes(bytes: vector): UnvalidatedPublicKey { - let len = vector::length(&bytes); - let num_sub_pks = len / INDIVIDUAL_PUBLIC_KEY_NUM_BYTES; - - assert!(num_sub_pks <= MAX_NUMBER_OF_PUBLIC_KEYS, error::invalid_argument(E_WRONG_PUBKEY_SIZE)); - assert!(len % INDIVIDUAL_PUBLIC_KEY_NUM_BYTES == THRESHOLD_SIZE_BYTES, error::invalid_argument(E_WRONG_PUBKEY_SIZE)); - UnvalidatedPublicKey { bytes } - } - - /// DEPRECATED: Use `new_validated_public_key_from_bytes_v2` instead. See `public_key_validate_internal` comments. - /// - /// (Incorrectly) parses the input bytes as a *validated* MultiEd25519 public key. - public fun new_validated_public_key_from_bytes(bytes: vector): Option { - // Note that `public_key_validate_internal` will check that `vector::length(&bytes) / INDIVIDUAL_PUBLIC_KEY_NUM_BYTES <= MAX_NUMBER_OF_PUBLIC_KEYS`. - if (vector::length(&bytes) % INDIVIDUAL_PUBLIC_KEY_NUM_BYTES == THRESHOLD_SIZE_BYTES && - public_key_validate_internal(bytes)) { - option::some(ValidatedPublicKey { - bytes - }) - } else { - option::none() - } - } - - /// Parses the input bytes as a *validated* MultiEd25519 public key (see `public_key_validate_internal_v2`). - public fun new_validated_public_key_from_bytes_v2(bytes: vector): Option { - if (!features::multi_ed25519_pk_validate_v2_enabled()) { - abort(error::invalid_state(E_NATIVE_FUN_NOT_AVAILABLE)) - }; - - if (public_key_validate_v2_internal(bytes)) { - option::some(ValidatedPublicKey { - bytes - }) - } else { - option::none() - } - } - - /// Parses the input bytes as a purported MultiEd25519 multi-signature. - public fun new_signature_from_bytes(bytes: vector): Signature { - assert!(vector::length(&bytes) % INDIVIDUAL_SIGNATURE_NUM_BYTES == BITMAP_NUM_OF_BYTES, error::invalid_argument(E_WRONG_SIGNATURE_SIZE)); - Signature { bytes } - } - - /// Converts a ValidatedPublicKey to an UnvalidatedPublicKey, which can be used in the strict verification APIs. - public fun public_key_to_unvalidated(pk: &ValidatedPublicKey): UnvalidatedPublicKey { - UnvalidatedPublicKey { - bytes: pk.bytes - } - } - - /// Moves a ValidatedPublicKey into an UnvalidatedPublicKey, which can be used in the strict verification APIs. - public fun public_key_into_unvalidated(pk: ValidatedPublicKey): UnvalidatedPublicKey { - UnvalidatedPublicKey { - bytes: pk.bytes - } - } - - /// Serializes an UnvalidatedPublicKey struct to 32-bytes. - public fun unvalidated_public_key_to_bytes(pk: &UnvalidatedPublicKey): vector { - pk.bytes - } - - /// Serializes a ValidatedPublicKey struct to 32-bytes. - public fun validated_public_key_to_bytes(pk: &ValidatedPublicKey): vector { - pk.bytes - } - - /// Serializes a Signature struct to 64-bytes. - public fun signature_to_bytes(sig: &Signature): vector { - sig.bytes - } - - /// DEPRECATED: Use `public_key_validate_v2` instead. See `public_key_validate_internal` comments. - /// - /// Takes in an *unvalidated* public key and attempts to validate it. - /// Returns `Some(ValidatedPublicKey)` if successful and `None` otherwise. - public fun public_key_validate(pk: &UnvalidatedPublicKey): Option { - new_validated_public_key_from_bytes(pk.bytes) - } - - /// Takes in an *unvalidated* public key and attempts to validate it. - /// Returns `Some(ValidatedPublicKey)` if successful and `None` otherwise. - public fun public_key_validate_v2(pk: &UnvalidatedPublicKey): Option { - new_validated_public_key_from_bytes_v2(pk.bytes) - } - - /// Verifies a purported MultiEd25519 `multisignature` under an *unvalidated* `public_key` on the specified `message`. - /// This call will validate the public key by checking it is NOT in the small subgroup. - public fun signature_verify_strict( - multisignature: &Signature, - public_key: &UnvalidatedPublicKey, - message: vector - ): bool { - signature_verify_strict_internal(multisignature.bytes, public_key.bytes, message) - } - - /// This function is used to verify a multi-signature on any BCS-serializable type T. For now, it is used to verify the - /// proof of private key ownership when rotating authentication keys. - public fun signature_verify_strict_t(multisignature: &Signature, public_key: &UnvalidatedPublicKey, data: T): bool { - let encoded = ed25519::new_signed_message(data); - - signature_verify_strict_internal(multisignature.bytes, public_key.bytes, bcs::to_bytes(&encoded)) - } - - /// Derives the Aptos-specific authentication key of the given Ed25519 public key. - public fun unvalidated_public_key_to_authentication_key(pk: &UnvalidatedPublicKey): vector { - public_key_bytes_to_authentication_key(pk.bytes) - } - - /// Returns the number n of sub-PKs in an unvalidated t-out-of-n MultiEd25519 PK. - /// If this `UnvalidatedPublicKey` would pass validation in `public_key_validate`, then the returned # of sub-PKs - /// can be relied upon as correct. - /// - /// We provide this API as a cheaper alternative to calling `public_key_validate` and then `validated_public_key_num_sub_pks` - /// when the input `pk` is known to be valid. - public fun unvalidated_public_key_num_sub_pks(pk: &UnvalidatedPublicKey): u8 { - let len = vector::length(&pk.bytes); - - ((len / INDIVIDUAL_PUBLIC_KEY_NUM_BYTES) as u8) - } - - /// Returns the number t of sub-PKs in an unvalidated t-out-of-n MultiEd25519 PK (i.e., the threshold) or `None` - /// if `bytes` does not correctly encode such a PK. - public fun unvalidated_public_key_threshold(pk: &UnvalidatedPublicKey): Option { - check_and_get_threshold(pk.bytes) - } - - /// Derives the Aptos-specific authentication key of the given Ed25519 public key. - public fun validated_public_key_to_authentication_key(pk: &ValidatedPublicKey): vector { - public_key_bytes_to_authentication_key(pk.bytes) - } - - /// Returns the number n of sub-PKs in a validated t-out-of-n MultiEd25519 PK. - /// Since the format of this PK has been validated, the returned # of sub-PKs is guaranteed to be correct. - public fun validated_public_key_num_sub_pks(pk: &ValidatedPublicKey): u8 { - let len = vector::length(&pk.bytes); - - ((len / INDIVIDUAL_PUBLIC_KEY_NUM_BYTES) as u8) - } - - /// Returns the number t of sub-PKs in a validated t-out-of-n MultiEd25519 PK (i.e., the threshold). - public fun validated_public_key_threshold(pk: &ValidatedPublicKey): u8 { - let len = vector::length(&pk.bytes); - let threshold_byte = *vector::borrow(&pk.bytes, len - 1); - - threshold_byte - } - - /// Checks that the serialized format of a t-out-of-n MultiEd25519 PK correctly encodes 1 <= n <= 32 sub-PKs. - /// (All `ValidatedPublicKey` objects are guaranteed to pass this check.) - /// Returns the threshold t <= n of the PK. - public fun check_and_get_threshold(bytes: vector): Option { - let len = vector::length(&bytes); - if (len == 0) { - return option::none() - }; - - let threshold_num_of_bytes = len % INDIVIDUAL_PUBLIC_KEY_NUM_BYTES; - let num_of_keys = len / INDIVIDUAL_PUBLIC_KEY_NUM_BYTES; - let threshold_byte = *vector::borrow(&bytes, len - 1); - - if (num_of_keys == 0 || num_of_keys > MAX_NUMBER_OF_PUBLIC_KEYS || threshold_num_of_bytes != 1) { - return option::none() - } else if (threshold_byte == 0 || threshold_byte > (num_of_keys as u8)) { - return option::none() - } else { - return option::some(threshold_byte) - } - } - - /// Derives the Aptos-specific authentication key of the given Ed25519 public key. - fun public_key_bytes_to_authentication_key(pk_bytes: vector): vector { - vector::push_back(&mut pk_bytes, SIGNATURE_SCHEME_ID); - std::hash::sha3_256(pk_bytes) - } - - // - // Native functions - // - - /// DEPRECATED: Use `public_key_validate_internal_v2` instead. This function was NOT correctly implemented: - /// - /// 1. It does not check that the # of sub public keys is > 0, which leads to invalid `ValidatedPublicKey` objects - /// against which no signature will verify, since `signature_verify_strict_internal` will reject such invalid PKs. - /// This is not a security issue, but a correctness issue. See `bugfix_validated_pk_from_zero_subpks`. - /// 2. It charges too much gas: if the first sub-PK is invalid, it will charge for verifying all remaining sub-PKs. - /// - /// DEPRECATES: - /// - new_validated_public_key_from_bytes - /// - public_key_validate - /// - /// Return `true` if the bytes in `public_key` can be parsed as a valid MultiEd25519 public key: i.e., all underlying - /// PKs pass point-on-curve and not-in-small-subgroup checks. - /// Returns `false` otherwise. - native fun public_key_validate_internal(bytes: vector): bool; - - /// Return `true` if the bytes in `public_key` can be parsed as a valid MultiEd25519 public key: i.e., all underlying - /// sub-PKs pass point-on-curve and not-in-small-subgroup checks. - /// Returns `false` otherwise. - native fun public_key_validate_v2_internal(bytes: vector): bool; - - /// Return true if the MultiEd25519 `multisignature` on `message` verifies against the MultiEd25519 `public_key`. - /// Returns `false` if either: - /// - The PKs in `public_key` do not all pass points-on-curve or not-in-small-subgroup checks, - /// - The signatures in `multisignature` do not all pass points-on-curve or not-in-small-subgroup checks, - /// - the `multisignature` on `message` does not verify. - native fun signature_verify_strict_internal( - multisignature: vector, - public_key: vector, - message: vector - ): bool; - - #[test_only] - native fun generate_keys_internal(threshold: u8, n: u8): (vector,vector); - - #[test_only] - native fun sign_internal(sk: vector, message: vector): vector; - - // - // Tests - // - - #[test_only] - struct TestMessage has copy, drop { - foo: vector, - bar: u64, - } - - #[test_only] - public fun maul_first_signature(sig: &mut Signature) { - let first_sig_byte = vector::borrow_mut(&mut sig.bytes, 0); - *first_sig_byte = *first_sig_byte ^ 0xff; - } - - - #[test(fx = @std)] - fun bugfix_validated_pk_from_zero_subpks(fx: signer) { - features::change_feature_flags_for_testing(&fx, vector[ features::multi_ed25519_pk_validate_v2_feature()], vector[]); - let bytes = vector[1u8]; - assert!(vector::length(&bytes) == 1, 1); - - // Try deserializing a MultiEd25519 `ValidatedPublicKey` with 0 Ed25519 sub-PKs and 1 threshold byte. - // This would ideally NOT succeed, but it currently does. Regardless, such invalid PKs will be safely dismissed - // during signature verification. - let some = new_validated_public_key_from_bytes(bytes); - assert!(option::is_none(&check_and_get_threshold(bytes)), 1); // ground truth - assert!(option::is_some(&some), 2); // incorrect - - // In contrast, the v2 API will fail deserializing, as it should. - let none = new_validated_public_key_from_bytes_v2(bytes); - assert!(option::is_none(&none), 3); - } - - #[test(fx = @std)] - fun test_validated_pk_without_threshold_byte(fx: signer) { - features::change_feature_flags_for_testing(&fx, vector[ features::multi_ed25519_pk_validate_v2_feature()], vector[]); - - let (_, subpk) = ed25519::generate_keys(); - let bytes = ed25519::validated_public_key_to_bytes(&subpk); - assert!(vector::length(&bytes) == INDIVIDUAL_PUBLIC_KEY_NUM_BYTES, 1); - - // Try deserializing a MultiEd25519 `ValidatedPublicKey` with 1 Ed25519 sub-PKs but no threshold byte, which - // will not succeed, - let none = new_validated_public_key_from_bytes(bytes); - assert!(option::is_none(&check_and_get_threshold(bytes)), 1); // ground truth - assert!(option::is_none(&none), 2); // correct - - // Similarly, the v2 API will also fail deserializing. - let none = new_validated_public_key_from_bytes_v2(bytes); - assert!(option::is_none(&none), 3); // also correct - } - - #[test(fx = @std)] - fun test_validated_pk_from_small_order_subpk(fx: signer) { - features::change_feature_flags_for_testing(&fx, vector[ features::multi_ed25519_pk_validate_v2_feature()], vector[]); - let torsion_point_with_threshold_1 = vector[ - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, - ]; - - assert!(option::extract(&mut check_and_get_threshold(torsion_point_with_threshold_1)) == 1, 1); - - // Try deserializing a MultiEd25519 `ValidatedPublicKey` with 1 Ed25519 sub-PKs and 1 threshold byte, as it should, - // except the sub-PK is of small order. This should not succeed, - let none = new_validated_public_key_from_bytes(torsion_point_with_threshold_1); - assert!(option::is_none(&none), 2); - - // Similarly, the v2 API will also fail deserializing. - let none = new_validated_public_key_from_bytes_v2(torsion_point_with_threshold_1); - assert!(option::is_none(&none), 3); - } - - #[test] - fun test_gen_sign_verify() { - let thresholds = vector[1, 1, 2, 2, 3, 15,]; // the thresholds, implicitly encoded in the public keys - let party_counts = vector[1, 2, 2, 3, 10, 32,]; - let test_case_count = vector::length(&party_counts); - let test_case_idx = 0; - - while (test_case_idx < test_case_count) { - let threshold = *vector::borrow(&thresholds, test_case_idx); - let group_size = *vector::borrow(&party_counts, test_case_idx); - - let (sk, pk) = generate_keys(threshold, group_size); - assert!(validated_public_key_threshold(&pk) == threshold, 1); - assert!(validated_public_key_num_sub_pks(&pk) == group_size, 2); - assert!(public_key_validate_v2_internal(pk.bytes), 3); - - let upk = public_key_into_unvalidated(pk); - assert!(option::extract(&mut unvalidated_public_key_threshold(&upk)) == threshold, 4); - assert!(unvalidated_public_key_num_sub_pks(&upk) == group_size, 5); - - let msg1 = b"Hello Aptos!"; - let sig1 = sign_arbitrary_bytes(&sk, msg1); - assert!(signature_verify_strict(&sig1, &upk, msg1), 6); - - let obj2 = TestMessage { - foo: b"Hello Move!", - bar: 64, - }; - let sig2 = sign_struct(&sk, copy obj2); - assert!(signature_verify_strict_t(&sig2, &upk, copy obj2), 7); - - test_case_idx = test_case_idx + 1; - } - } - - #[test] - fun test_threshold_not_met_rejection() { - let (sk,pk) = generate_keys(4, 5); - assert!(validated_public_key_threshold(&pk) == 4, 1); - assert!(validated_public_key_num_sub_pks(&pk) == 5, 2); - assert!(public_key_validate_v2_internal(pk.bytes), 3); - - let upk = public_key_into_unvalidated(pk); - assert!(option::extract(&mut unvalidated_public_key_threshold(&upk)) == 4, 4); - assert!(unvalidated_public_key_num_sub_pks(&upk) == 5, 5); - - let msg1 = b"Hello Aptos!"; - let sig1 = sign_arbitrary_bytes(&sk, msg1); - maul_first_signature(&mut sig1); - assert!(!signature_verify_strict(&sig1, &upk, msg1), 6); - - let obj2 = TestMessage { - foo: b"Hello Move!", - bar: 64, - }; - let sig2 = sign_struct(&sk, copy obj2); - maul_first_signature(&mut sig2); - assert!(!signature_verify_strict_t(&sig2, &upk, copy obj2), 7); - } -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/AptosStdlib/pool_u64.move b/examples/oft-movement/build/oft/sources/dependencies/AptosStdlib/pool_u64.move deleted file mode 100644 index 7d049fdf3..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/AptosStdlib/pool_u64.move +++ /dev/null @@ -1,571 +0,0 @@ -/// -/// Simple module for tracking and calculating shares of a pool of coins. The shares are worth more as the total coins in -/// the pool increases. New shareholder can buy more shares or redeem their existing shares. -/// -/// Example flow: -/// 1. Pool start outs empty. -/// 2. Shareholder A buys in with 1000 coins. A will receive 1000 shares in the pool. Pool now has 1000 total coins and -/// 1000 total shares. -/// 3. Pool appreciates in value from rewards and now has 2000 coins. A's 1000 shares are now worth 2000 coins. -/// 4. Shareholder B now buys in with 1000 coins. Since before the buy in, each existing share is worth 2 coins, B will -/// receive 500 shares in exchange for 1000 coins. Pool now has 1500 shares and 3000 coins. -/// 5. Pool appreciates in value from rewards and now has 6000 coins. -/// 6. A redeems 500 shares. Each share is worth 6000 / 1500 = 4. A receives 2000 coins. Pool has 4000 coins and 1000 -/// shares left. -/// -module aptos_std::pool_u64 { - use aptos_std::simple_map::{Self, SimpleMap}; - use std::error; - use std::vector; - - /// Shareholder not present in pool. - const ESHAREHOLDER_NOT_FOUND: u64 = 1; - /// There are too many shareholders in the pool. - const ETOO_MANY_SHAREHOLDERS: u64 = 2; - /// Cannot destroy non-empty pool. - const EPOOL_IS_NOT_EMPTY: u64 = 3; - /// Cannot redeem more shares than the shareholder has in the pool. - const EINSUFFICIENT_SHARES: u64 = 4; - /// Shareholder cannot have more than u64.max shares. - const ESHAREHOLDER_SHARES_OVERFLOW: u64 = 5; - /// Pool's total coins cannot exceed u64.max. - const EPOOL_TOTAL_COINS_OVERFLOW: u64 = 6; - /// Pool's total shares cannot exceed u64.max. - const EPOOL_TOTAL_SHARES_OVERFLOW: u64 = 7; - - const MAX_U64: u64 = 18446744073709551615; - - struct Pool has store { - shareholders_limit: u64, - total_coins: u64, - total_shares: u64, - shares: SimpleMap, - shareholders: vector
, - // Default to 1. This can be used to minimize rounding errors when computing shares and coins amount. - // However, users need to make sure the coins amount don't overflow when multiplied by the scaling factor. - scaling_factor: u64, - } - - /// Create a new pool. - public fun new(shareholders_limit: u64): Pool { - // Default to a scaling factor of 1 (effectively no scaling). - create_with_scaling_factor(shareholders_limit, 1) - } - - #[deprecated] - /// Deprecated. Use `new` instead. - /// Create a new pool. - public fun create(shareholders_limit: u64): Pool { - new(shareholders_limit) - } - - /// Create a new pool with custom `scaling_factor`. - public fun create_with_scaling_factor(shareholders_limit: u64, scaling_factor: u64): Pool { - Pool { - shareholders_limit, - total_coins: 0, - total_shares: 0, - shares: simple_map::create(), - shareholders: vector::empty
(), - scaling_factor, - } - } - - /// Destroy an empty pool. This will fail if the pool has any balance of coins. - public fun destroy_empty(self: Pool) { - assert!(self.total_coins == 0, error::invalid_state(EPOOL_IS_NOT_EMPTY)); - let Pool { - shareholders_limit: _, - total_coins: _, - total_shares: _, - shares: _, - shareholders: _, - scaling_factor: _, - } = self; - } - - /// Return `self`'s total balance of coins. - public fun total_coins(self: &Pool): u64 { - self.total_coins - } - - /// Return the total number of shares across all shareholders in `self`. - public fun total_shares(self: &Pool): u64 { - self.total_shares - } - - /// Return true if `shareholder` is in `self`. - public fun contains(self: &Pool, shareholder: address): bool { - simple_map::contains_key(&self.shares, &shareholder) - } - - /// Return the number of shares of `stakeholder` in `self`. - public fun shares(self: &Pool, shareholder: address): u64 { - if (contains(self, shareholder)) { - *simple_map::borrow(&self.shares, &shareholder) - } else { - 0 - } - } - - /// Return the balance in coins of `shareholder` in `self`. - public fun balance(self: &Pool, shareholder: address): u64 { - let num_shares = shares(self, shareholder); - shares_to_amount(self, num_shares) - } - - /// Return the list of shareholders in `self`. - public fun shareholders(self: &Pool): vector
{ - self.shareholders - } - - /// Return the number of shareholders in `self`. - public fun shareholders_count(self: &Pool): u64 { - vector::length(&self.shareholders) - } - - /// Update `self`'s total balance of coins. - public fun update_total_coins(self: &mut Pool, new_total_coins: u64) { - self.total_coins = new_total_coins; - } - - /// Allow an existing or new shareholder to add their coins to the pool in exchange for new shares. - public fun buy_in(self: &mut Pool, shareholder: address, coins_amount: u64): u64 { - if (coins_amount == 0) return 0; - - let new_shares = amount_to_shares(self, coins_amount); - assert!(MAX_U64 - self.total_coins >= coins_amount, error::invalid_argument(EPOOL_TOTAL_COINS_OVERFLOW)); - assert!(MAX_U64 - self.total_shares >= new_shares, error::invalid_argument(EPOOL_TOTAL_COINS_OVERFLOW)); - - self.total_coins = self.total_coins + coins_amount; - self.total_shares = self.total_shares + new_shares; - add_shares(self, shareholder, new_shares); - new_shares - } - - /// Add the number of shares directly for `shareholder` in `self`. - /// This would dilute other shareholders if the pool's balance of coins didn't change. - fun add_shares(self: &mut Pool, shareholder: address, new_shares: u64): u64 { - if (contains(self, shareholder)) { - let existing_shares = simple_map::borrow_mut(&mut self.shares, &shareholder); - let current_shares = *existing_shares; - assert!(MAX_U64 - current_shares >= new_shares, error::invalid_argument(ESHAREHOLDER_SHARES_OVERFLOW)); - - *existing_shares = current_shares + new_shares; - *existing_shares - } else if (new_shares > 0) { - assert!( - vector::length(&self.shareholders) < self.shareholders_limit, - error::invalid_state(ETOO_MANY_SHAREHOLDERS), - ); - - vector::push_back(&mut self.shareholders, shareholder); - simple_map::add(&mut self.shares, shareholder, new_shares); - new_shares - } else { - new_shares - } - } - - /// Allow `shareholder` to redeem their shares in `self` for coins. - public fun redeem_shares(self: &mut Pool, shareholder: address, shares_to_redeem: u64): u64 { - assert!(contains(self, shareholder), error::invalid_argument(ESHAREHOLDER_NOT_FOUND)); - assert!(shares(self, shareholder) >= shares_to_redeem, error::invalid_argument(EINSUFFICIENT_SHARES)); - - if (shares_to_redeem == 0) return 0; - - let redeemed_coins = shares_to_amount(self, shares_to_redeem); - self.total_coins = self.total_coins - redeemed_coins; - self.total_shares = self.total_shares - shares_to_redeem; - deduct_shares(self, shareholder, shares_to_redeem); - - redeemed_coins - } - - /// Transfer shares from `shareholder_1` to `shareholder_2`. - public fun transfer_shares( - self: &mut Pool, - shareholder_1: address, - shareholder_2: address, - shares_to_transfer: u64, - ) { - assert!(contains(self, shareholder_1), error::invalid_argument(ESHAREHOLDER_NOT_FOUND)); - assert!(shares(self, shareholder_1) >= shares_to_transfer, error::invalid_argument(EINSUFFICIENT_SHARES)); - if (shares_to_transfer == 0) return; - - deduct_shares(self, shareholder_1, shares_to_transfer); - add_shares(self, shareholder_2, shares_to_transfer); - } - - /// Directly deduct `shareholder`'s number of shares in `self` and return the number of remaining shares. - fun deduct_shares(self: &mut Pool, shareholder: address, num_shares: u64): u64 { - assert!(contains(self, shareholder), error::invalid_argument(ESHAREHOLDER_NOT_FOUND)); - assert!(shares(self, shareholder) >= num_shares, error::invalid_argument(EINSUFFICIENT_SHARES)); - - let existing_shares = simple_map::borrow_mut(&mut self.shares, &shareholder); - *existing_shares = *existing_shares - num_shares; - - // Remove the shareholder completely if they have no shares left. - let remaining_shares = *existing_shares; - if (remaining_shares == 0) { - let (_, shareholder_index) = vector::index_of(&self.shareholders, &shareholder); - vector::remove(&mut self.shareholders, shareholder_index); - simple_map::remove(&mut self.shares, &shareholder); - }; - - remaining_shares - } - - /// Return the number of new shares `coins_amount` can buy in `self`. - /// `amount` needs to big enough to avoid rounding number. - public fun amount_to_shares(self: &Pool, coins_amount: u64): u64 { - amount_to_shares_with_total_coins(self, coins_amount, self.total_coins) - } - - /// Return the number of new shares `coins_amount` can buy in `self` with a custom total coins number. - /// `amount` needs to big enough to avoid rounding number. - public fun amount_to_shares_with_total_coins(self: &Pool, coins_amount: u64, total_coins: u64): u64 { - // No shares yet so amount is worth the same number of shares. - if (self.total_coins == 0 || self.total_shares == 0) { - // Multiply by scaling factor to minimize rounding errors during internal calculations for buy ins/redeems. - // This can overflow but scaling factor is expected to be chosen carefully so this would not overflow. - coins_amount * self.scaling_factor - } else { - // Shares price = total_coins / total existing shares. - // New number of shares = new_amount / shares_price = new_amount * existing_shares / total_amount. - // We rearrange the calc and do multiplication first to avoid rounding errors. - multiply_then_divide(self, coins_amount, self.total_shares, total_coins) - } - } - - /// Return the number of coins `shares` are worth in `self`. - /// `shares` needs to big enough to avoid rounding number. - public fun shares_to_amount(self: &Pool, shares: u64): u64 { - shares_to_amount_with_total_coins(self, shares, self.total_coins) - } - - /// Return the number of coins `shares` are worth in `self` with a custom total coins number. - /// `shares` needs to big enough to avoid rounding number. - public fun shares_to_amount_with_total_coins(self: &Pool, shares: u64, total_coins: u64): u64 { - // No shares or coins yet so shares are worthless. - if (self.total_coins == 0 || self.total_shares == 0) { - 0 - } else { - // Shares price = total_coins / total existing shares. - // Shares worth = shares * shares price = shares * total_coins / total existing shares. - // We rearrange the calc and do multiplication first to avoid rounding errors. - multiply_then_divide(self, shares, total_coins, self.total_shares) - } - } - - public fun multiply_then_divide(self: &Pool, x: u64, y: u64, z: u64): u64 { - let result = (to_u128(x) * to_u128(y)) / to_u128(z); - (result as u64) - } - - fun to_u128(num: u64): u128 { - (num as u128) - } - - #[test_only] - public fun destroy_pool(self: Pool) { - let Pool { - shareholders_limit: _, - total_coins: _, - total_shares: _, - shares: _, - shareholders: _, - scaling_factor: _, - } = self; - } - - #[test] - public entry fun test_buy_in_and_redeem() { - let pool = new(5); - - // Shareholders 1 and 2 buy in first. - buy_in(&mut pool, @1, 1000); - buy_in(&mut pool, @2, 2000); - assert!(shareholders_count(&pool) == 2, 0); - assert!(total_coins(&pool) == 3000, 1); - assert!(total_shares(&pool) == 3000, 2); - assert!(shares(&pool, @1) == 1000, 3); - assert!(shares(&pool, @2) == 2000, 4); - assert!(balance(&pool, @1) == 1000, 5); - assert!(balance(&pool, @2) == 2000, 6); - - // Pool increases in value. - update_total_coins(&mut pool, 5000); - assert!(shares(&pool, @1) == 1000, 7); - assert!(shares(&pool, @2) == 2000, 8); - let expected_balance_1 = 1000 * 5000 / 3000; - assert!(balance(&pool, @1) == expected_balance_1, 9); - let expected_balance_2 = 2000 * 5000 / 3000; - assert!(balance(&pool, @2) == expected_balance_2, 10); - - // Shareholder 3 buys in into the 5000-coin pool with 1000 coins. There are 3000 existing shares. - let expected_shares = 1000 * 3000 / 5000; - buy_in(&mut pool, @3, 1000); - assert!(shares(&pool, @3) == expected_shares, 11); - assert!(balance(&pool, @3) == 1000, 12); - - // Pool increases more in value. - update_total_coins(&mut pool, 8000); - - // Shareholders 1 and 2 redeem. - let all_shares = 3000 + expected_shares; - assert!(total_shares(&pool) == all_shares, 13); - let expected_value_per_500_shares = 500 * 8000 / all_shares; - assert!(redeem_shares(&mut pool, @1, 500) == expected_value_per_500_shares, 14); - assert!(redeem_shares(&mut pool, @1, 500) == expected_value_per_500_shares, 15); - assert!(redeem_shares(&mut pool, @2, 2000) == expected_value_per_500_shares * 4, 16); - - // Due to a very small rounding error of 1, shareholder 3 actually has 1 more coin. - let shareholder_3_balance = expected_value_per_500_shares * 6 / 5 + 1; - assert!(balance(&pool, @3) == shareholder_3_balance, 17); - assert!(total_coins(&pool) == shareholder_3_balance, 18); - assert!(shareholders_count(&pool) == 1, 19); - let num_shares_3 = shares(&pool, @3); - assert!(redeem_shares(&mut pool, @3, num_shares_3) == shareholder_3_balance, 20); - - // Nothing left. - assert!(shareholders_count(&pool) == 0, 21); - destroy_empty(pool); - } - - #[test] - #[expected_failure(abort_code = 196611, location = Self)] - public entry fun test_destroy_empty_should_fail_if_not_empty() { - let pool = new(1); - update_total_coins(&mut pool, 100); - destroy_empty(pool); - } - - #[test] - public entry fun test_buy_in_and_redeem_large_numbers() { - let pool = new(2); - let half_max_u64 = MAX_U64 / 2; - let shares_1 = buy_in(&mut pool, @1, half_max_u64); - assert!(shares_1 == half_max_u64, 0); - let shares_2 = buy_in(&mut pool, @2, half_max_u64 + 1); - assert!(shares_2 == half_max_u64 + 1, 1); - assert!(total_shares(&pool) == MAX_U64, 2); - assert!(total_coins(&pool) == MAX_U64, 3); - assert!(redeem_shares(&mut pool, @1, shares_1) == half_max_u64, 4); - assert!(redeem_shares(&mut pool, @2, shares_2) == half_max_u64 + 1, 5); - destroy_empty(pool); - } - - #[test] - public entry fun test_buy_in_and_redeem_large_numbers_with_scaling_factor() { - let scaling_factor = 100; - let pool = create_with_scaling_factor(2, scaling_factor); - let coins_amount = MAX_U64 / 100; - let shares = buy_in(&mut pool, @1, coins_amount); - assert!(total_shares(&pool) == coins_amount * scaling_factor, 0); - assert!(total_coins(&pool) == coins_amount, 1); - assert!(redeem_shares(&mut pool, @1, shares) == coins_amount, 2); - destroy_empty(pool); - } - - #[test] - public entry fun test_buy_in_zero_amount() { - let pool = new(2); - buy_in(&mut pool, @1, 100); - assert!(buy_in(&mut pool, @2, 0) == 0, 0); - assert!(total_shares(&pool) == shares(&pool, @1), 1); - assert!(shareholders_count(&pool) == 1, 2); - destroy_pool(pool); - } - - #[test] - public entry fun test_buy_in_with_small_coins_amount() { - let pool = new(2); - // Shareholder 1 buys in with 1e17 coins. - buy_in(&mut pool, @1, 100000000000000000); - // Shareholder 2 buys in with a very small amount. - assert!(buy_in(&mut pool, @2, 1) == 1, 0); - // Pool's total coins increases by 20%. Shareholder 2 shouldn't see any actual balance increase as it gets - // rounded down. - let total_coins = total_coins(&pool); - update_total_coins(&mut pool, total_coins * 6 / 5); - // Minus 1 due to rounding error. - assert!(balance(&pool, @1) == 100000000000000000 * 6 / 5 - 1, 1); - assert!(balance(&pool, @2) == 1, 2); - destroy_pool(pool); - } - - #[test] - public entry fun test_add_zero_shares_should_not_add_shareholder() { - let pool = new(1); - update_total_coins(&mut pool, 1000); - assert!(add_shares(&mut pool, @1, 0) == 0, 0); - assert!(shareholders_count(&pool) == 0, 1); - destroy_pool(pool); - } - - #[test] - public entry fun test_add_zero_shares_returns_existing_number_of_shares() { - let pool = new(1); - update_total_coins(&mut pool, 1000); - add_shares(&mut pool, @1, 1); - assert!(shares(&pool, @1) == add_shares(&mut pool, @1, 0), 0); - destroy_pool(pool); - } - - #[test] - public entry fun test_add_shares_existing_shareholder() { - let pool = new(1); - update_total_coins(&mut pool, 1000); - add_shares(&mut pool, @1, 1); - add_shares(&mut pool, @1, 2); - assert!(shares(&mut pool, @1) == 3, 0); - destroy_pool(pool); - } - - #[test] - public entry fun test_add_shares_new_shareholder() { - let pool = new(2); - update_total_coins(&mut pool, 1000); - add_shares(&mut pool, @1, 1); - add_shares(&mut pool, @2, 2); - assert!(shares(&mut pool, @1) == 1, 0); - assert!(shares(&mut pool, @2) == 2, 1); - destroy_pool(pool); - } - - #[test] - #[expected_failure(abort_code = 196610, location = Self)] - public entry fun test_add_shares_should_enforce_shareholder_limit() { - let pool = new(2); - add_shares(&mut pool, @1, 1); - add_shares(&mut pool, @2, 2); - add_shares(&mut pool, @3, 2); - destroy_pool(pool); - } - - #[test] - public entry fun test_add_shares_should_work_after_reducing_shareholders_below_limit() { - let pool = new(3); - add_shares(&mut pool, @1, 1); - add_shares(&mut pool, @2, 2); - deduct_shares(&mut pool, @2, 2); - add_shares(&mut pool, @3, 3); - assert!(shares(&pool, @3) == 3, 0); - destroy_pool(pool); - } - - #[test] - #[expected_failure(abort_code = 65537, location = Self)] - public entry fun test_redeem_shares_non_existent_shareholder() { - let pool = new(1); - add_shares(&mut pool, @1, 1); - redeem_shares(&mut pool, @2, 1); - destroy_pool(pool); - } - - #[test] - #[expected_failure(abort_code = 65540, location = Self)] - public entry fun test_redeem_shares_insufficient_shares() { - let pool = new(1); - add_shares(&mut pool, @1, 1); - redeem_shares(&mut pool, @1, 2); - destroy_pool(pool); - } - - #[test] - public entry fun test_redeem_small_number_of_shares() { - let pool = new(2); - // 1e17 shares and coins. - buy_in(&mut pool, @1, 100000000000000000); - buy_in(&mut pool, @2, 100000000000000000); - assert!(redeem_shares(&mut pool, @1, 1) == 1, 0); - destroy_pool(pool); - } - - #[test] - public entry fun test_redeem_zero_shares() { - let pool = new(2); - buy_in(&mut pool, @1, 1); - assert!(redeem_shares(&mut pool, @1, 0) == 0, 0); - assert!(shares(&pool, @1) == 1, 1); - assert!(total_coins(&pool) == 1, 2); - assert!(total_shares(&pool) == 1, 3); - destroy_pool(pool); - } - - #[test] - #[expected_failure(abort_code = 65537, location = Self)] - public entry fun test_deduct_shares_non_existent_shareholder() { - let pool = new(1); - add_shares(&mut pool, @1, 1); - deduct_shares(&mut pool, @2, 1); - destroy_pool(pool); - } - - #[test] - #[expected_failure(abort_code = 65540, location = Self)] - public entry fun test_deduct_shares_insufficient_shares() { - let pool = new(1); - add_shares(&mut pool, @1, 1); - deduct_shares(&mut pool, @1, 2); - destroy_pool(pool); - } - - #[test] - public entry fun test_deduct_shares_remove_shareholder_with_no_shares() { - let pool = new(2); - add_shares(&mut pool, @1, 1); - add_shares(&mut pool, @2, 2); - assert!(shareholders_count(&pool) == 2, 0); - deduct_shares(&mut pool, @1, 1); - assert!(shareholders_count(&pool) == 1, 1); - destroy_pool(pool); - } - - #[test] - public entry fun test_transfer_shares() { - let pool = new(2); - add_shares(&mut pool, @1, 2); - add_shares(&mut pool, @2, 2); - assert!(shareholders_count(&pool) == 2, 0); - transfer_shares(&mut pool, @1, @2, 1); - assert!(shares(&pool, @1) == 1, 0); - assert!(shares(&pool, @2) == 3, 0); - destroy_pool(pool); - } - - #[test] - public entry fun test_amount_to_shares_empty_pool() { - let pool = new(1); - // No total shares and total coins. - assert!(amount_to_shares(&pool, 1000) == 1000, 0); - - // No total shares but some total coins. - update_total_coins(&mut pool, 1000); - assert!(amount_to_shares(&pool, 1000) == 1000, 1); - - // No total coins but some total shares. - update_total_coins(&mut pool, 0); - add_shares(&mut pool, @1, 100); - assert!(amount_to_shares(&pool, 1000) == 1000, 2); - destroy_pool(pool); - } - - #[test] - public entry fun test_shares_to_amount_empty_pool() { - let pool = new(1); - // No total shares and total coins. - assert!(shares_to_amount(&pool, 1000) == 0, 0); - - // No total shares but some total coins. - update_total_coins(&mut pool, 1000); - assert!(shares_to_amount(&pool, 1000) == 0, 1); - - // No total coins but some total shares. - update_total_coins(&mut pool, 0); - add_shares(&mut pool, @1, 100); - assert!(shares_to_amount(&pool, 1000) == 0, 2); - destroy_pool(pool); - } -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/AptosStdlib/pool_u64_unbound.move b/examples/oft-movement/build/oft/sources/dependencies/AptosStdlib/pool_u64_unbound.move deleted file mode 100644 index d2b182731..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/AptosStdlib/pool_u64_unbound.move +++ /dev/null @@ -1,270 +0,0 @@ -/// -/// Simple module for tracking and calculating shares of a pool of coins. The shares are worth more as the total coins in -/// the pool increases. New shareholder can buy more shares or redeem their existing shares. -/// -/// Example flow: -/// 1. Pool start outs empty. -/// 2. Shareholder A buys in with 1000 coins. A will receive 1000 shares in the pool. Pool now has 1000 total coins and -/// 1000 total shares. -/// 3. Pool appreciates in value from rewards and now has 2000 coins. A's 1000 shares are now worth 2000 coins. -/// 4. Shareholder B now buys in with 1000 coins. Since before the buy in, each existing share is worth 2 coins, B will -/// receive 500 shares in exchange for 1000 coins. Pool now has 1500 shares and 3000 coins. -/// 5. Pool appreciates in value from rewards and now has 6000 coins. -/// 6. A redeems 500 shares. Each share is worth 6000 / 1500 = 4. A receives 2000 coins. Pool has 4000 coins and 1000 -/// shares left. -/// -module aptos_std::pool_u64_unbound { - use aptos_std::table_with_length::{Self as table, TableWithLength as Table}; - use std::error; - - /// Shareholder not present in pool. - const ESHAREHOLDER_NOT_FOUND: u64 = 1; - /// There are too many shareholders in the pool. - const ETOO_MANY_SHAREHOLDERS: u64 = 2; - /// Cannot destroy non-empty pool. - const EPOOL_IS_NOT_EMPTY: u64 = 3; - /// Cannot redeem more shares than the shareholder has in the pool. - const EINSUFFICIENT_SHARES: u64 = 4; - /// Shareholder cannot have more than u64.max shares. - const ESHAREHOLDER_SHARES_OVERFLOW: u64 = 5; - /// Pool's total coins cannot exceed u64.max. - const EPOOL_TOTAL_COINS_OVERFLOW: u64 = 6; - /// Pool's total shares cannot exceed u64.max. - const EPOOL_TOTAL_SHARES_OVERFLOW: u64 = 7; - - const MAX_U64: u64 = 18446744073709551615; - - const MAX_U128: u128 = 340282366920938463463374607431768211455; - - struct Pool has store { - total_coins: u64, - total_shares: u128, - shares: Table, - // Default to 1. This can be used to minimize rounding errors when computing shares and coins amount. - // However, users need to make sure the coins amount don't overflow when multiplied by the scaling factor. - scaling_factor: u64, - } - - /// Create a new pool. - public fun new(): Pool { - // Default to a scaling factor of 1 (effectively no scaling). - create_with_scaling_factor(1) - } - - #[deprecated] - /// Deprecated. Use `new` instead. - /// Create a new pool. - public fun create(): Pool { - new() - } - - /// Create a new pool with custom `scaling_factor`. - public fun create_with_scaling_factor(scaling_factor: u64): Pool { - Pool { - total_coins: 0, - total_shares: 0, - shares: table::new(), - scaling_factor, - } - } - - /// Destroy an empty pool. This will fail if the pool has any balance of coins. - public fun destroy_empty(self: Pool) { - assert!(self.total_coins == 0, error::invalid_state(EPOOL_IS_NOT_EMPTY)); - let Pool { - total_coins: _, - total_shares: _, - shares, - scaling_factor: _, - } = self; - table::destroy_empty(shares); - } - - /// Return `self`'s total balance of coins. - public fun total_coins(self: &Pool): u64 { - self.total_coins - } - - /// Return the total number of shares across all shareholders in `self`. - public fun total_shares(self: &Pool): u128 { - self.total_shares - } - - /// Return true if `shareholder` is in `self`. - public fun contains(self: &Pool, shareholder: address): bool { - table::contains(&self.shares, shareholder) - } - - /// Return the number of shares of `stakeholder` in `self`. - public fun shares(self: &Pool, shareholder: address): u128 { - if (contains(self, shareholder)) { - *table::borrow(&self.shares, shareholder) - } else { - 0 - } - } - - /// Return the balance in coins of `shareholder` in `self`. - public fun balance(self: &Pool, shareholder: address): u64 { - let num_shares = shares(self, shareholder); - shares_to_amount(self, num_shares) - } - - /// Return the number of shareholders in `self`. - public fun shareholders_count(self: &Pool): u64 { - table::length(&self.shares) - } - - /// Update `self`'s total balance of coins. - public fun update_total_coins(self: &mut Pool, new_total_coins: u64) { - self.total_coins = new_total_coins; - } - - /// Allow an existing or new shareholder to add their coins to the pool in exchange for new shares. - public fun buy_in(self: &mut Pool, shareholder: address, coins_amount: u64): u128 { - if (coins_amount == 0) return 0; - - let new_shares = amount_to_shares(self, coins_amount); - assert!(MAX_U64 - self.total_coins >= coins_amount, error::invalid_argument(EPOOL_TOTAL_COINS_OVERFLOW)); - assert!(MAX_U128 - self.total_shares >= new_shares, error::invalid_argument(EPOOL_TOTAL_SHARES_OVERFLOW)); - - self.total_coins = self.total_coins + coins_amount; - self.total_shares = self.total_shares + new_shares; - add_shares(self, shareholder, new_shares); - new_shares - } - - /// Add the number of shares directly for `shareholder` in `self`. - /// This would dilute other shareholders if the pool's balance of coins didn't change. - fun add_shares(self: &mut Pool, shareholder: address, new_shares: u128): u128 { - if (contains(self, shareholder)) { - let existing_shares = table::borrow_mut(&mut self.shares, shareholder); - let current_shares = *existing_shares; - assert!(MAX_U128 - current_shares >= new_shares, error::invalid_argument(ESHAREHOLDER_SHARES_OVERFLOW)); - - *existing_shares = current_shares + new_shares; - *existing_shares - } else if (new_shares > 0) { - table::add(&mut self.shares, shareholder, new_shares); - new_shares - } else { - new_shares - } - } - - /// Allow `shareholder` to redeem their shares in `self` for coins. - public fun redeem_shares(self: &mut Pool, shareholder: address, shares_to_redeem: u128): u64 { - assert!(contains(self, shareholder), error::invalid_argument(ESHAREHOLDER_NOT_FOUND)); - assert!(shares(self, shareholder) >= shares_to_redeem, error::invalid_argument(EINSUFFICIENT_SHARES)); - - if (shares_to_redeem == 0) return 0; - - let redeemed_coins = shares_to_amount(self, shares_to_redeem); - self.total_coins = self.total_coins - redeemed_coins; - self.total_shares = self.total_shares - shares_to_redeem; - deduct_shares(self, shareholder, shares_to_redeem); - - redeemed_coins - } - - /// Transfer shares from `shareholder_1` to `shareholder_2`. - public fun transfer_shares( - self: &mut Pool, - shareholder_1: address, - shareholder_2: address, - shares_to_transfer: u128, - ) { - assert!(contains(self, shareholder_1), error::invalid_argument(ESHAREHOLDER_NOT_FOUND)); - assert!(shares(self, shareholder_1) >= shares_to_transfer, error::invalid_argument(EINSUFFICIENT_SHARES)); - if (shares_to_transfer == 0) return; - - deduct_shares(self, shareholder_1, shares_to_transfer); - add_shares(self, shareholder_2, shares_to_transfer); - } - - /// Directly deduct `shareholder`'s number of shares in `self` and return the number of remaining shares. - fun deduct_shares(self: &mut Pool, shareholder: address, num_shares: u128): u128 { - assert!(contains(self, shareholder), error::invalid_argument(ESHAREHOLDER_NOT_FOUND)); - assert!(shares(self, shareholder) >= num_shares, error::invalid_argument(EINSUFFICIENT_SHARES)); - - let existing_shares = table::borrow_mut(&mut self.shares, shareholder); - *existing_shares = *existing_shares - num_shares; - - // Remove the shareholder completely if they have no shares left. - let remaining_shares = *existing_shares; - if (remaining_shares == 0) { - table::remove(&mut self.shares, shareholder); - }; - - remaining_shares - } - - /// Return the number of new shares `coins_amount` can buy in `self`. - /// `amount` needs to big enough to avoid rounding number. - public fun amount_to_shares(self: &Pool, coins_amount: u64): u128 { - amount_to_shares_with_total_coins(self, coins_amount, self.total_coins) - } - - /// Return the number of new shares `coins_amount` can buy in `self` with a custom total coins number. - /// `amount` needs to big enough to avoid rounding number. - public fun amount_to_shares_with_total_coins(self: &Pool, coins_amount: u64, total_coins: u64): u128 { - // No shares yet so amount is worth the same number of shares. - if (self.total_coins == 0 || self.total_shares == 0) { - // Multiply by scaling factor to minimize rounding errors during internal calculations for buy ins/redeems. - // This can overflow but scaling factor is expected to be chosen carefully so this would not overflow. - to_u128(coins_amount) * to_u128(self.scaling_factor) - } else { - // Shares price = total_coins / total existing shares. - // New number of shares = new_amount / shares_price = new_amount * existing_shares / total_amount. - // We rearrange the calc and do multiplication first to avoid rounding errors. - multiply_then_divide(self, to_u128(coins_amount), self.total_shares, to_u128(total_coins)) - } - } - - /// Return the number of coins `shares` are worth in `self`. - /// `shares` needs to big enough to avoid rounding number. - public fun shares_to_amount(self: &Pool, shares: u128): u64 { - shares_to_amount_with_total_coins(self, shares, self.total_coins) - } - - /// Return the number of coins `shares` are worth in `self` with a custom total coins number. - /// `shares` needs to big enough to avoid rounding number. - public fun shares_to_amount_with_total_coins(self: &Pool, shares: u128, total_coins: u64): u64 { - // No shares or coins yet so shares are worthless. - if (self.total_coins == 0 || self.total_shares == 0) { - 0 - } else { - // Shares price = total_coins / total existing shares. - // Shares worth = shares * shares price = shares * total_coins / total existing shares. - // We rearrange the calc and do multiplication first to avoid rounding errors. - (multiply_then_divide(self, shares, to_u128(total_coins), self.total_shares) as u64) - } - } - - /// Return the number of coins `shares` are worth in `pool` with custom total coins and shares numbers. - public fun shares_to_amount_with_total_stats( - self: &Pool, - shares: u128, - total_coins: u64, - total_shares: u128, - ): u64 { - if (self.total_coins == 0 || total_shares == 0) { - 0 - } else { - (multiply_then_divide(self, shares, to_u128(total_coins), total_shares) as u64) - } - } - - public fun multiply_then_divide(self: &Pool, x: u128, y: u128, z: u128): u128 { - let result = (to_u256(x) * to_u256(y)) / to_u256(z); - (result as u128) - } - - fun to_u128(num: u64): u128 { - (num as u128) - } - - fun to_u256(num: u128): u256 { - (num as u256) - } -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/AptosStdlib/ristretto255.move b/examples/oft-movement/build/oft/sources/dependencies/AptosStdlib/ristretto255.move deleted file mode 100644 index 79905c578..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/AptosStdlib/ristretto255.move +++ /dev/null @@ -1,1310 +0,0 @@ -/// This module contains functions for Ristretto255 curve arithmetic, assuming addition as the group operation. -/// -/// The order of the Ristretto255 elliptic curve group is $\ell = 2^252 + 27742317777372353535851937790883648493$, same -/// as the order of the prime-order subgroup of Curve25519. -/// -/// This module provides two structs for encoding Ristretto elliptic curves to the developer: -/// -/// - First, a 32-byte-sized CompressedRistretto struct, which is used to persist points in storage. -/// -/// - Second, a larger, in-memory, RistrettoPoint struct, which is decompressable from a CompressedRistretto struct. This -/// larger struct can be used for fast arithmetic operations (additions, multiplications, etc.). The results can be saved -/// back into storage by compressing RistrettoPoint structs back to CompressedRistretto structs. -/// -/// This module also provides a Scalar struct for persisting scalars in storage and doing fast arithmetic on them. -/// -/// One invariant maintained by this module is that all CompressedRistretto structs store a canonically-encoded point, -/// which can always be decompressed into a valid point on the curve as a RistrettoPoint struct. Unfortunately, due to -/// limitations in our underlying curve25519-dalek elliptic curve library, this decompression will unnecessarily verify -/// the validity of the point and thus slightly decrease performance. -/// -/// Similarly, all Scalar structs store a canonically-encoded scalar, which can always be safely operated on using -/// arithmetic operations. -/// -/// In the future, we might support additional features: -/// -/// * For scalars: -/// - batch_invert() -/// -/// * For points: -/// - double() -/// + The challenge is that curve25519-dalek does NOT export double for Ristretto points (nor for Edwards) -/// -/// - double_and_compress_batch() -/// -/// - fixed-base, variable-time via optional_mixed_multiscalar_mul() in VartimePrecomputedMultiscalarMul -/// + This would require a storage-friendly RistrettoBasepointTable and an in-memory variant of it too -/// + Similar to the CompressedRistretto and RistrettoPoint structs in this module -/// + The challenge is that curve25519-dalek's RistrettoBasepointTable is not serializable - -module aptos_std::ristretto255 { - use std::features; - use std::option::Option; - - #[test_only] - use std::option; - - // - // Constants - // - - /// The order of the Ristretto255 group and its scalar field, in little-endian. - const ORDER_ELL: vector = x"edd3f55c1a631258d69cf7a2def9de1400000000000000000000000000000010"; - - /// `ORDER_ELL` - 1: i.e., the "largest", reduced scalar in the field - const L_MINUS_ONE: vector = x"ecd3f55c1a631258d69cf7a2def9de1400000000000000000000000000000010"; - - /// The maximum size in bytes of a canonically-encoded Scalar is 32 bytes. - const MAX_SCALAR_NUM_BYTES: u64 = 32u64; - - /// The maximum size in bits of a canonically-encoded Scalar is 256 bits. - const MAX_SCALAR_NUM_BITS: u64 = 256u64; - - /// The maximum size in bytes of a canonically-encoded Ristretto255 point is 32 bytes. - const MAX_POINT_NUM_BYTES: u64 = 32u64; - - /// The basepoint (generator) of the Ristretto255 group - const BASE_POINT: vector = x"e2f2ae0a6abc4e71a884a961c500515f58e30b6aa582dd8db6a65945e08d2d76"; - - /// The hash of the basepoint of the Ristretto255 group using SHA3_512 - const HASH_BASE_POINT: vector = x"8c9240b456a9e6dc65c377a1048d745f94a08cdb7f44cbcd7b46f34048871134"; - - // - // Reasons for error codes - // - - /// The number of scalars does not match the number of points. - const E_DIFFERENT_NUM_POINTS_AND_SCALARS: u64 = 1; - /// Expected more than zero points as input. - const E_ZERO_POINTS: u64 = 2; - /// Expected more than zero scalars as input. - const E_ZERO_SCALARS: u64 = 3; - /// Too many points have been created in the current transaction execution. - const E_TOO_MANY_POINTS_CREATED: u64 = 4; - /// The native function has not been deployed yet. - const E_NATIVE_FUN_NOT_AVAILABLE: u64 = 5; - - // - // Scalar and point structs - // - - /// This struct represents a scalar as a little-endian byte encoding of an integer in $\mathbb{Z}_\ell$, which is - /// stored in `data`. Here, \ell denotes the order of the scalar field (and the underlying elliptic curve group). - struct Scalar has copy, store, drop { - data: vector - } - - /// This struct represents a serialized point on the Ristretto255 curve, in 32 bytes. - /// This struct can be decompressed from storage into an in-memory RistrettoPoint, on which fast curve arithmetic - /// can be performed. - struct CompressedRistretto has copy, store, drop { - data: vector - } - - /// This struct represents an in-memory Ristretto255 point and supports fast curve arithmetic. - /// - /// An important invariant: There will never be two RistrettoPoint's constructed with the same handle. One can have - /// immutable references to the same RistrettoPoint, of course. - struct RistrettoPoint has drop { - handle: u64 - } - - // - // Functions for arithmetic on points - // - - /// Returns the identity point as a CompressedRistretto. - public fun point_identity_compressed(): CompressedRistretto { - CompressedRistretto { - data: x"0000000000000000000000000000000000000000000000000000000000000000" - } - } - - /// Returns the identity point as a CompressedRistretto. - public fun point_identity(): RistrettoPoint { - RistrettoPoint { - handle: point_identity_internal() - } - } - - /// Returns the basepoint (generator) of the Ristretto255 group as a compressed point - public fun basepoint_compressed(): CompressedRistretto { - CompressedRistretto { - data: BASE_POINT - } - } - - /// Returns the hash-to-point result of serializing the basepoint of the Ristretto255 group. - /// For use as the random value basepoint in Pedersen commitments - public fun hash_to_point_base(): RistrettoPoint { - let comp_res = CompressedRistretto { data: HASH_BASE_POINT }; - point_decompress(&comp_res) - } - - /// Returns the basepoint (generator) of the Ristretto255 group - public fun basepoint(): RistrettoPoint { - let (handle, _) = point_decompress_internal(BASE_POINT); - - RistrettoPoint { - handle - } - } - - /// Multiplies the basepoint (generator) of the Ristretto255 group by a scalar and returns the result. - /// This call is much faster than `point_mul(&basepoint(), &some_scalar)` because of precomputation tables. - public fun basepoint_mul(a: &Scalar): RistrettoPoint { - RistrettoPoint { - handle: basepoint_mul_internal(a.data) - } - } - - /// Creates a new CompressedRistretto point from a sequence of 32 bytes. If those bytes do not represent a valid - /// point, returns None. - public fun new_compressed_point_from_bytes(bytes: vector): Option { - if (point_is_canonical_internal(bytes)) { - std::option::some(CompressedRistretto { - data: bytes - }) - } else { - std::option::none() - } - } - - /// Creates a new RistrettoPoint from a sequence of 32 bytes. If those bytes do not represent a valid point, - /// returns None. - public fun new_point_from_bytes(bytes: vector): Option { - let (handle, is_canonical) = point_decompress_internal(bytes); - if (is_canonical) { - std::option::some(RistrettoPoint { handle }) - } else { - std::option::none() - } - } - - /// Given a compressed ristretto point `point`, returns the byte representation of that point - public fun compressed_point_to_bytes(point: CompressedRistretto): vector { - point.data - } - - /// DEPRECATED: Use the more clearly-named `new_point_from_sha2_512` - /// - /// Hashes the input to a uniformly-at-random RistrettoPoint via SHA512. - public fun new_point_from_sha512(sha2_512_input: vector): RistrettoPoint { - new_point_from_sha2_512(sha2_512_input) - } - - /// Hashes the input to a uniformly-at-random RistrettoPoint via SHA2-512. - public fun new_point_from_sha2_512(sha2_512_input: vector): RistrettoPoint { - RistrettoPoint { - handle: new_point_from_sha512_internal(sha2_512_input) - } - } - - /// Samples a uniformly-at-random RistrettoPoint given a sequence of 64 uniformly-at-random bytes. This function - /// can be used to build a collision-resistant hash function that maps 64-byte messages to RistrettoPoint's. - public fun new_point_from_64_uniform_bytes(bytes: vector): Option { - if (std::vector::length(&bytes) == 64) { - std::option::some(RistrettoPoint { - handle: new_point_from_64_uniform_bytes_internal(bytes) - }) - } else { - std::option::none() - } - } - - /// Decompresses a CompressedRistretto from storage into a RistrettoPoint which can be used for fast arithmetic. - public fun point_decompress(point: &CompressedRistretto): RistrettoPoint { - // NOTE: Our CompressedRistretto invariant assures us that every CompressedRistretto in storage is a valid - // RistrettoPoint - let (handle, _) = point_decompress_internal(point.data); - RistrettoPoint { handle } - } - - /// Clones a RistrettoPoint. - public fun point_clone(point: &RistrettoPoint): RistrettoPoint { - if(!features::bulletproofs_enabled()) { - abort(std::error::invalid_state(E_NATIVE_FUN_NOT_AVAILABLE)) - }; - - RistrettoPoint { - handle: point_clone_internal(point.handle) - } - } - - /// Compresses a RistrettoPoint to a CompressedRistretto which can be put in storage. - public fun point_compress(point: &RistrettoPoint): CompressedRistretto { - CompressedRistretto { - data: point_compress_internal(point) - } - } - - /// Returns the sequence of bytes representin this Ristretto point. - /// To convert a RistrettoPoint 'p' to bytes, first compress it via `c = point_compress(&p)`, and then call this - /// function on `c`. - public fun point_to_bytes(point: &CompressedRistretto): vector { - point.data - } - - /// Returns a * point. - public fun point_mul(point: &RistrettoPoint, a: &Scalar): RistrettoPoint { - RistrettoPoint { - handle: point_mul_internal(point, a.data, false) - } - } - - /// Sets a *= point and returns 'a'. - public fun point_mul_assign(point: &mut RistrettoPoint, a: &Scalar): &mut RistrettoPoint { - point_mul_internal(point, a.data, true); - point - } - - /// Returns (a * a_base + b * base_point), where base_point is the Ristretto basepoint encoded in `BASE_POINT`. - public fun basepoint_double_mul(a: &Scalar, a_base: &RistrettoPoint, b: &Scalar): RistrettoPoint { - RistrettoPoint { - handle: basepoint_double_mul_internal(a.data, a_base, b.data) - } - } - - /// Returns a + b - public fun point_add(a: &RistrettoPoint, b: &RistrettoPoint): RistrettoPoint { - RistrettoPoint { - handle: point_add_internal(a, b, false) - } - } - - /// Sets a += b and returns 'a'. - public fun point_add_assign(a: &mut RistrettoPoint, b: &RistrettoPoint): &mut RistrettoPoint { - point_add_internal(a, b, true); - a - } - - /// Returns a - b - public fun point_sub(a: &RistrettoPoint, b: &RistrettoPoint): RistrettoPoint { - RistrettoPoint { - handle: point_sub_internal(a, b, false) - } - } - - /// Sets a -= b and returns 'a'. - public fun point_sub_assign(a: &mut RistrettoPoint, b: &RistrettoPoint): &mut RistrettoPoint { - point_sub_internal(a, b, true); - a - } - - /// Returns -a - public fun point_neg(a: &RistrettoPoint): RistrettoPoint { - RistrettoPoint { - handle: point_neg_internal(a, false) - } - } - - /// Sets a = -a, and returns 'a'. - public fun point_neg_assign(a: &mut RistrettoPoint): &mut RistrettoPoint { - point_neg_internal(a, true); - a - } - - /// Returns true if the two RistrettoPoints are the same points on the elliptic curve. - native public fun point_equals(g: &RistrettoPoint, h: &RistrettoPoint): bool; - - /// Computes a double-scalar multiplication, returning a_1 p_1 + a_2 p_2 - /// This function is much faster than computing each a_i p_i using `point_mul` and adding up the results using `point_add`. - public fun double_scalar_mul(scalar1: &Scalar, point1: &RistrettoPoint, scalar2: &Scalar, point2: &RistrettoPoint): RistrettoPoint { - if(!features::bulletproofs_enabled()) { - abort(std::error::invalid_state(E_NATIVE_FUN_NOT_AVAILABLE)) - }; - - RistrettoPoint { - handle: double_scalar_mul_internal(point1.handle, point2.handle, scalar1.data, scalar2.data) - } - } - - /// Computes a multi-scalar multiplication, returning a_1 p_1 + a_2 p_2 + ... + a_n p_n. - /// This function is much faster than computing each a_i p_i using `point_mul` and adding up the results using `point_add`. - public fun multi_scalar_mul(points: &vector, scalars: &vector): RistrettoPoint { - assert!(!std::vector::is_empty(points), std::error::invalid_argument(E_ZERO_POINTS)); - assert!(!std::vector::is_empty(scalars), std::error::invalid_argument(E_ZERO_SCALARS)); - assert!(std::vector::length(points) == std::vector::length(scalars), std::error::invalid_argument(E_DIFFERENT_NUM_POINTS_AND_SCALARS)); - - RistrettoPoint { - handle: multi_scalar_mul_internal(points, scalars) - } - } - - // - // Functions for arithmetic on Scalars - // - - /// Given a sequence of 32 bytes, checks if they canonically-encode a Scalar and return it. - /// Otherwise, returns None. - public fun new_scalar_from_bytes(bytes: vector): Option { - if (scalar_is_canonical_internal(bytes)) { - std::option::some(Scalar { - data: bytes - }) - } else { - std::option::none() - } - } - - /// DEPRECATED: Use the more clearly-named `new_scalar_from_sha2_512` - /// - /// Hashes the input to a uniformly-at-random Scalar via SHA2-512 - public fun new_scalar_from_sha512(sha2_512_input: vector): Scalar { - new_scalar_from_sha2_512(sha2_512_input) - } - - /// Hashes the input to a uniformly-at-random Scalar via SHA2-512 - public fun new_scalar_from_sha2_512(sha2_512_input: vector): Scalar { - Scalar { - data: scalar_from_sha512_internal(sha2_512_input) - } - } - - /// Creates a Scalar from an u8. - public fun new_scalar_from_u8(byte: u8): Scalar { - let s = scalar_zero(); - let byte_zero = std::vector::borrow_mut(&mut s.data, 0); - *byte_zero = byte; - - s - } - - /// Creates a Scalar from an u32. - public fun new_scalar_from_u32(four_bytes: u32): Scalar { - Scalar { - data: scalar_from_u64_internal((four_bytes as u64)) - } - } - - /// Creates a Scalar from an u64. - public fun new_scalar_from_u64(eight_bytes: u64): Scalar { - Scalar { - data: scalar_from_u64_internal(eight_bytes) - } - } - - /// Creates a Scalar from an u128. - public fun new_scalar_from_u128(sixteen_bytes: u128): Scalar { - Scalar { - data: scalar_from_u128_internal(sixteen_bytes) - } - } - - /// Creates a Scalar from 32 bytes by reducing the little-endian-encoded number in those bytes modulo $\ell$. - public fun new_scalar_reduced_from_32_bytes(bytes: vector): Option { - if (std::vector::length(&bytes) == 32) { - std::option::some(Scalar { - data: scalar_reduced_from_32_bytes_internal(bytes) - }) - } else { - std::option::none() - } - } - - /// Samples a scalar uniformly-at-random given 64 uniform-at-random bytes as input by reducing the little-endian-encoded number - /// in those bytes modulo $\ell$. - public fun new_scalar_uniform_from_64_bytes(bytes: vector): Option { - if (std::vector::length(&bytes) == 64) { - std::option::some(Scalar { - data: scalar_uniform_from_64_bytes_internal(bytes) - }) - } else { - std::option::none() - } - } - - /// Returns 0 as a Scalar. - public fun scalar_zero(): Scalar { - Scalar { - data: x"0000000000000000000000000000000000000000000000000000000000000000" - } - } - - /// Returns true if the given Scalar equals 0. - public fun scalar_is_zero(s: &Scalar): bool { - s.data == x"0000000000000000000000000000000000000000000000000000000000000000" - } - - /// Returns 1 as a Scalar. - public fun scalar_one(): Scalar { - Scalar { - data: x"0100000000000000000000000000000000000000000000000000000000000000" - } - } - - /// Returns true if the given Scalar equals 1. - public fun scalar_is_one(s: &Scalar): bool { - s.data == x"0100000000000000000000000000000000000000000000000000000000000000" - } - - /// Returns true if the two scalars are equal. - public fun scalar_equals(lhs: &Scalar, rhs: &Scalar): bool { - lhs.data == rhs.data - } - - /// Returns the inverse s^{-1} mod \ell of a scalar s. - /// Returns None if s is zero. - public fun scalar_invert(s: &Scalar): Option { - if (scalar_is_zero(s)) { - std::option::none() - } else { - std::option::some(Scalar { - data: scalar_invert_internal(s.data) - }) - } - } - - /// Returns the product of the two scalars. - public fun scalar_mul(a: &Scalar, b: &Scalar): Scalar { - Scalar { - data: scalar_mul_internal(a.data, b.data) - } - } - - /// Computes the product of 'a' and 'b' and assigns the result to 'a'. - /// Returns 'a'. - public fun scalar_mul_assign(a: &mut Scalar, b: &Scalar): &mut Scalar { - a.data = scalar_mul(a, b).data; - a - } - - /// Returns the sum of the two scalars. - public fun scalar_add(a: &Scalar, b: &Scalar): Scalar { - Scalar { - data: scalar_add_internal(a.data, b.data) - } - } - - /// Computes the sum of 'a' and 'b' and assigns the result to 'a' - /// Returns 'a'. - public fun scalar_add_assign(a: &mut Scalar, b: &Scalar): &mut Scalar { - a.data = scalar_add(a, b).data; - a - } - - /// Returns the difference of the two scalars. - public fun scalar_sub(a: &Scalar, b: &Scalar): Scalar { - Scalar { - data: scalar_sub_internal(a.data, b.data) - } - } - - /// Subtracts 'b' from 'a' and assigns the result to 'a'. - /// Returns 'a'. - public fun scalar_sub_assign(a: &mut Scalar, b: &Scalar): &mut Scalar { - a.data = scalar_sub(a, b).data; - a - } - - /// Returns the negation of 'a': i.e., $(0 - a) \mod \ell$. - public fun scalar_neg(a: &Scalar): Scalar { - Scalar { - data: scalar_neg_internal(a.data) - } - } - - /// Replaces 'a' by its negation. - /// Returns 'a'. - public fun scalar_neg_assign(a: &mut Scalar): &mut Scalar { - a.data = scalar_neg(a).data; - a - } - - /// Returns the byte-representation of the scalar. - public fun scalar_to_bytes(s: &Scalar): vector { - s.data - } - - // - // Only used internally for implementing CompressedRistretto and RistrettoPoint - // - - // NOTE: This was supposed to be more clearly named with *_sha2_512_*. - native fun new_point_from_sha512_internal(sha2_512_input: vector): u64; - - native fun new_point_from_64_uniform_bytes_internal(bytes: vector): u64; - - native fun point_is_canonical_internal(bytes: vector): bool; - - native fun point_identity_internal(): u64; - - native fun point_decompress_internal(maybe_non_canonical_bytes: vector): (u64, bool); - - native fun point_clone_internal(point_handle: u64): u64; - native fun point_compress_internal(point: &RistrettoPoint): vector; - - native fun point_mul_internal(point: &RistrettoPoint, a: vector, in_place: bool): u64; - - native fun basepoint_mul_internal(a: vector): u64; - - native fun basepoint_double_mul_internal(a: vector, some_point: &RistrettoPoint, b: vector): u64; - - native fun point_add_internal(a: &RistrettoPoint, b: &RistrettoPoint, in_place: bool): u64; - - native fun point_sub_internal(a: &RistrettoPoint, b: &RistrettoPoint, in_place: bool): u64; - - native fun point_neg_internal(a: &RistrettoPoint, in_place: bool): u64; - - native fun double_scalar_mul_internal(point1: u64, point2: u64, scalar1: vector, scalar2: vector): u64; - - /// The generic arguments are needed to deal with some Move VM peculiarities which prevent us from borrowing the - /// points (or scalars) inside a &vector in Rust. - /// - /// WARNING: This function can only be called with P = RistrettoPoint and S = Scalar. - native fun multi_scalar_mul_internal(points: &vector

, scalars: &vector): u64; - - // - // Only used internally for implementing Scalar. - // - - native fun scalar_is_canonical_internal(s: vector): bool; - - native fun scalar_from_u64_internal(num: u64): vector; - - native fun scalar_from_u128_internal(num: u128): vector; - - native fun scalar_reduced_from_32_bytes_internal(bytes: vector): vector; - - native fun scalar_uniform_from_64_bytes_internal(bytes: vector): vector; - - native fun scalar_invert_internal(bytes: vector): vector; - - // NOTE: This was supposed to be more clearly named with *_sha2_512_*. - native fun scalar_from_sha512_internal(sha2_512_input: vector): vector; - - native fun scalar_mul_internal(a_bytes: vector, b_bytes: vector): vector; - - native fun scalar_add_internal(a_bytes: vector, b_bytes: vector): vector; - - native fun scalar_sub_internal(a_bytes: vector, b_bytes: vector): vector; - - native fun scalar_neg_internal(a_bytes: vector): vector; - - #[test_only] - native fun random_scalar_internal(): vector; - - // - // Test-only functions - // - - #[test_only] - public fun random_scalar(): Scalar { - Scalar { - data: random_scalar_internal() - } - } - - #[test_only] - public fun random_point(): RistrettoPoint { - let s = random_scalar(); - - basepoint_mul(&s) - } - - // - // Testing constants - // - - // The scalar 2 - #[test_only] - const TWO_SCALAR: vector = x"0200000000000000000000000000000000000000000000000000000000000000"; - - // Non-canonical scalar: the order \ell of the group + 1 - #[test_only] - const L_PLUS_ONE: vector = x"eed3f55c1a631258d69cf7a2def9de1400000000000000000000000000000010"; - - // Non-canonical scalar: the order \ell of the group + 2 - #[test_only] - const L_PLUS_TWO: vector = x"efd3f55c1a631258d69cf7a2def9de1400000000000000000000000000000010"; - - // Some random scalar denoted by X - #[test_only] - const X_SCALAR: vector = x"4e5ab4345d4708845913b4641bc27d5252a585101bcc4244d449f4a879d9f204"; - - // X^{-1} = 1/X = 6859937278830797291664592131120606308688036382723378951768035303146619657244 - // 0x1CDC17FCE0E9A5BBD9247E56BB016347BBBA31EDD5A9BB96D50BCD7A3F962A0F - #[test_only] - const X_INV_SCALAR: vector = x"1cdc17fce0e9a5bbd9247e56bb016347bbba31edd5a9bb96d50bcd7a3f962a0f"; - - // Some random scalar Y = 2592331292931086675770238855846338635550719849568364935475441891787804997264 - #[test_only] - const Y_SCALAR: vector = x"907633fe1c4b66a4a28d2dd7678386c353d0de5455d4fc9de8ef7ac31f35bb05"; - - // X * Y = 5690045403673944803228348699031245560686958845067437804563560795922180092780 - #[test_only] - const X_TIMES_Y_SCALAR: vector = x"6c3374a1894f62210aaa2fe186a6f92ce0aa75c2779581c295fc08179a73940c"; - - // X + 2^256 * X \mod \ell - #[test_only] - const REDUCED_X_PLUS_2_TO_256_TIMES_X_SCALAR: vector = x"d89ab38bd279024745639ed817ad3f64cc005b32db9939f91c521fc564a5c008"; - - // sage: l = 2^252 + 27742317777372353535851937790883648493 - // sage: big = 2^256 - 1 - // sage: repr((big % l).digits(256)) - #[test_only] - const REDUCED_2_256_MINUS_1_SCALAR: vector = x"1c95988d7431ecd670cf7d73f45befc6feffffffffffffffffffffffffffff0f"; - - #[test_only] - const NON_CANONICAL_ALL_ONES: vector = x"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"; - - #[test_only] - const A_SCALAR: vector = x"1a0e978a90f6622d3747023f8ad8264da758aa1b88e040d1589e7b7f2376ef09"; - - // Generated in curve25519-dalek via: - // ``` - // let mut hasher = sha2::Sha512::default(); - // hasher.update(b"bello!"); - // let s = Scalar::from_hash(hasher); - // println!("scalar: {:x?}", s.to_bytes()); - // ``` - #[test_only] - const B_SCALAR: vector = x"dbfd97afd38a06f0138d0527efb28ead5b7109b486465913bf3aa472a8ed4e0d"; - - #[test_only] - const A_TIMES_B_SCALAR: vector = x"2ab50e383d7c210f74d5387330735f18315112d10dfb98fcce1e2620c0c01402"; - - #[test_only] - const A_PLUS_B_SCALAR: vector = x"083839dd491e57c5743710c39a91d6e502cab3cf0e279ae417d91ff2cb633e07"; - - #[test_only] - /// A_SCALAR * BASE_POINT, computed by modifying a test in curve25519-dalek in src/edwards.rs to do: - /// ``` - /// let comp = RistrettoPoint(A_TIMES_BASEPOINT.decompress().unwrap()).compress(); - /// println!("hex: {:x?}", comp.to_bytes()); - /// ``` - const A_TIMES_BASE_POINT: vector = x"96d52d9262ee1e1aae79fbaee8c1d9068b0d01bf9a4579e618090c3d1088ae10"; - - #[test_only] - const A_POINT: vector = x"e87feda199d72b83de4f5b2d45d34805c57019c6c59c42cb70ee3d19aa996f75"; - #[test_only] - const B_POINT: vector = x"fa0b3624b081c62f364d0b2839dcc76d7c3ab0e27e31beb2b9ed766575f28e76"; - #[test_only] - const A_PLUS_B_POINT: vector = x"70cf3753475b9ff33e2f84413ed6b5052073bccc0a0a81789d3e5675dc258056"; - - // const NON_CANONICAL_LARGEST_ED25519_S: vector = x"f8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f"; - // const CANONICAL_LARGEST_ED25519_S_PLUS_ONE: vector = x"7e344775474a7f9723b63a8be92ae76dffffffffffffffffffffffffffffff0f"; - // const CANONICAL_LARGEST_ED25519_S_MINUS_ONE: vector = x"7c344775474a7f9723b63a8be92ae76dffffffffffffffffffffffffffffff0f"; - - // - // Tests - // - - #[test] - fun test_point_decompression() { - let compressed = new_compressed_point_from_bytes(A_POINT); - assert!(std::option::is_some(&compressed), 1); - - let point = new_point_from_bytes(A_POINT); - assert!(std::option::is_some(&point), 1); - - let point = std::option::extract(&mut point); - let compressed = std::option::extract(&mut compressed); - let same_point = point_decompress(&compressed); - - assert!(point_equals(&point, &same_point), 1); - } - - #[test] - fun test_point_equals() { - let g = basepoint(); - let same_g = std::option::extract(&mut new_point_from_bytes(BASE_POINT)); - let ag = std::option::extract(&mut new_point_from_bytes(A_TIMES_BASE_POINT)); - - assert!(point_equals(&g, &same_g), 1); - assert!(!point_equals(&g, &ag), 1); - } - - #[test] - fun test_point_mul() { - // fetch g - let g = basepoint(); - // fetch a - let a = std::option::extract(&mut new_scalar_from_bytes(A_SCALAR)); - // fetch expected a*g - let ag = std::option::extract(&mut new_point_from_bytes(A_TIMES_BASE_POINT)); - - // compute a*g - let p = point_mul(&g, &a); - - // sanity-check the handles - assert!(g.handle == 0, 1); - assert!(ag.handle == 1, 1); - assert!(p.handle == 2, 1); - - assert!(!point_equals(&g, &ag), 1); // make sure input g remains unmodifed - assert!(point_equals(&p, &ag), 1); // make sure output a*g is correct - } - - #[test] - fun test_point_mul_assign() { - let g = basepoint(); - assert!(g.handle == 0, 1); - - let a = std::option::extract(&mut new_scalar_from_bytes(A_SCALAR)); - - let ag = std::option::extract(&mut new_point_from_bytes(A_TIMES_BASE_POINT)); - assert!(ag.handle == 1, 1); - assert!(!point_equals(&g, &ag), 1); - - { - // NOTE: new_g is just a mutable reference to g - let upd_g = point_mul_assign(&mut g, &a); - - // in a mul_assign the returned &mut RistrettoPoint reference should have the same handle as 'g' - assert!(upd_g.handle == 0, 1); - - assert!(point_equals(upd_g, &ag), 1); - }; - - assert!(point_equals(&g, &ag), 1); - } - - #[test] - fun test_point_add() { - // fetch a - let a = std::option::extract(&mut new_point_from_bytes(A_POINT)); - - // fetch b - let b = std::option::extract(&mut new_point_from_bytes(B_POINT)); - - // fetch expected a + b - let a_plus_b = std::option::extract(&mut new_point_from_bytes(A_PLUS_B_POINT)); - - // compute a*g - let result = point_add(&a, &b); - - assert!(!point_equals(&a, &b), 1); - - // sanity-check the handles - assert!(a.handle == 0, 1); - assert!(b.handle == 1, 1); - assert!(a_plus_b.handle == 2, 1); - assert!(result.handle == 3, 1); - - assert!(!point_equals(&a, &result), 1); // make sure input a remains unmodifed - assert!(!point_equals(&b, &result), 1); // make sure input b remains unmodifed - assert!(point_equals(&a_plus_b, &result), 1); // make sure output a+b is correct - } - - #[test] - fun test_point_add_assign_0_0() { - test_point_add_assign_internal(0, 0); - } - - #[test] - fun test_point_add_assign_1_0() { - test_point_add_assign_internal(1, 0); - } - - #[test] - fun test_point_add_assign_0_1() { - test_point_add_assign_internal(0, 1); - } - - #[test] - fun test_point_add_assign_3_7() { - test_point_add_assign_internal(3, 7); - } - - #[test_only] - fun test_point_add_assign_internal(before_a_gap: u64, before_b_gap: u64) { - // create extra RistrettoPoints here, so as to generate different PointStore layouts inside the native Rust implementation - let c = before_a_gap; - while (c > 0) { - let _ignore = std::option::extract(&mut new_point_from_bytes(BASE_POINT)); - - c = c - 1; - }; - - // fetch a - let a = std::option::extract(&mut new_point_from_bytes(A_POINT)); - - // create extra RistrettoPoints here, so as to generate different PointStore layouts inside the native Rust implementation - let c = before_b_gap; - while (c > 0) { - let _ignore = std::option::extract(&mut new_point_from_bytes(BASE_POINT)); - - c = c - 1; - }; - // fetch b - let b = std::option::extract(&mut new_point_from_bytes(B_POINT)); - - let a_plus_b = std::option::extract(&mut new_point_from_bytes(A_PLUS_B_POINT)); - - // sanity-check the handles - assert!(a.handle == before_a_gap, 1); - assert!(b.handle == 1 + before_a_gap + before_b_gap, 1); - assert!(a_plus_b.handle == 2 + before_a_gap + before_b_gap, 1); - - assert!(!point_equals(&a, &b), 1); - assert!(!point_equals(&a, &a_plus_b), 1); - - { - // NOTE: new_h is just a mutable reference to g - let upd_a = point_add_assign(&mut a, &b); - - // in a add_assign the returned &mut RistrettoPoint reference should have the same handle as 'a' - assert!(upd_a.handle == before_a_gap, 1); - - assert!(point_equals(upd_a, &a_plus_b), 1); - }; - - assert!(point_equals(&a, &a_plus_b), 1); - } - - #[test] - fun test_point_sub() { - // fetch a - let a = std::option::extract(&mut new_point_from_bytes(A_POINT)); - - // fetch b - let b = std::option::extract(&mut new_point_from_bytes(B_POINT)); - - // fetch expected a + b - let a_plus_b = std::option::extract(&mut new_point_from_bytes(A_PLUS_B_POINT)); - - // compute a*g - let result = point_sub(&a_plus_b, &b); - - assert!(!point_equals(&a, &b), 1); - - // sanity-check the handles - assert!(a.handle == 0, 1); - assert!(b.handle == 1, 1); - assert!(a_plus_b.handle == 2, 1); - assert!(result.handle == 3, 1); - - assert!(!point_equals(&a_plus_b, &result), 1); // make sure input a_plus_b remains unmodifed - assert!(!point_equals(&b, &result), 1); // make sure input b remains unmodifed - assert!(point_equals(&a, &result), 1); // make sure output 'a+b-b' is correct - } - - #[test] - fun test_point_neg() { - let a = std::option::extract(&mut new_point_from_bytes(A_POINT)); - - let neg_a = point_neg(&a); - - assert!(a.handle != neg_a.handle, 1); - assert!(!point_equals(&a, &neg_a), 1); - assert!(!point_equals(&point_add(&point_identity(), &a), &neg_a), 1); - assert!(point_equals(&point_add(&a, &neg_a), &point_identity()), 1); - - let handle = a.handle; - let neg_a_ref = point_neg_assign(&mut a); - assert!(handle == neg_a_ref.handle, 1); - assert!(point_equals(neg_a_ref, &neg_a), 1); - } - - #[test] - fun test_basepoint_mul() { - let a = Scalar { data: A_SCALAR }; - let basepoint = basepoint(); - let expected = point_mul(&basepoint, &a); - assert!(point_equals(&expected, &basepoint_mul(&a)), 1); - } - - #[test(fx = @std)] - fun test_basepoint_double_mul(fx: signer) { - features::change_feature_flags_for_testing(&fx, vector[ features::get_bulletproofs_feature() ], vector[]); - - let expected = option::extract(&mut new_point_from_bytes(x"be5d615d8b8f996723cdc6e1895b8b6d312cc75d1ffb0259873b99396a38c05a")); - - let a = Scalar { data: A_SCALAR }; - let a_point = option::extract(&mut new_point_from_bytes(A_POINT)); - let b = Scalar { data: B_SCALAR }; - let actual = basepoint_double_mul(&a, &a_point, &b); - - assert!(point_equals(&expected, &actual), 1); - - let expected = double_scalar_mul(&a, &a_point, &b, &basepoint()); - assert!(point_equals(&expected, &actual), 1); - } - - #[test] - #[expected_failure] - fun test_multi_scalar_mul_aborts_empty_scalars() { - multi_scalar_mul(&vector[ basepoint() ], &vector[]); - } - - #[test] - #[expected_failure] - fun test_multi_scalar_mul_aborts_empty_points() { - multi_scalar_mul(&vector[ ], &vector[ Scalar { data: A_SCALAR } ]); - } - - #[test] - #[expected_failure] - fun test_multi_scalar_mul_aborts_empty_all() { - multi_scalar_mul(&vector[ ], &vector[ ]); - } - - #[test] - #[expected_failure] - fun test_multi_scalar_mul_aborts_different_sizes() { - multi_scalar_mul(&vector[ basepoint() ], &vector[ Scalar { data: A_SCALAR }, Scalar { data: B_SCALAR } ]); - } - - #[test] - fun test_multi_scalar_mul_single() { - // Test single exp - let points = vector[ - basepoint(), - ]; - - let scalars = vector[ - Scalar { data: A_SCALAR }, - ]; - - let result = multi_scalar_mul(&points, &scalars); - let expected = std::option::extract(&mut new_point_from_bytes(A_TIMES_BASE_POINT)); - - assert!(point_equals(&result, &expected), 1); - } - - #[test] - fun test_multi_scalar_mul_double() { - // Test double exp - let points = vector[ - basepoint(), - basepoint(), - ]; - - let scalars = vector[ - Scalar { data: A_SCALAR }, - Scalar { data: B_SCALAR }, - ]; - - let result = multi_scalar_mul(&points, &scalars); - let expected = basepoint_double_mul( - std::vector::borrow(&scalars, 0), - &basepoint(), - std::vector::borrow(&scalars, 1)); - - assert!(point_equals(&result, &expected), 1); - } - - #[test] - fun test_multi_scalar_mul_many() { - let scalars = vector[ - new_scalar_from_sha2_512(b"1"), - new_scalar_from_sha2_512(b"2"), - new_scalar_from_sha2_512(b"3"), - new_scalar_from_sha2_512(b"4"), - new_scalar_from_sha2_512(b"5"), - ]; - - let points = vector[ - new_point_from_sha2_512(b"1"), - new_point_from_sha2_512(b"2"), - new_point_from_sha2_512(b"3"), - new_point_from_sha2_512(b"4"), - new_point_from_sha2_512(b"5"), - ]; - - let expected = std::option::extract(&mut new_point_from_bytes(x"c4a98fbe6bd0f315a0c150858aec8508be397443093e955ef982e299c1318928")); - let result = multi_scalar_mul(&points, &scalars); - - assert!(point_equals(&expected, &result), 1); - } - - #[test] - fun test_new_point_from_sha2_512() { - let msg = b"To really appreciate architecture, you may even need to commit a murder"; - let expected = option::extract(&mut new_point_from_bytes(x"baaa91eb43e5e2f12ffc96347e14bc458fdb1772b2232b08977ee61ea9f84e31")); - - assert!(point_equals(&expected, &new_point_from_sha2_512(msg)), 1); - } - - #[test] - fun test_new_point_from_64_uniform_bytes() { - let bytes_64 = x"baaa91eb43e5e2f12ffc96347e14bc458fdb1772b2232b08977ee61ea9f84e31e87feda199d72b83de4f5b2d45d34805c57019c6c59c42cb70ee3d19aa996f75"; - let expected = option::extract(&mut new_point_from_bytes(x"4a8e429f906478654232d7ae180ad60854754944ac67f38e20d8fa79e4b7d71e")); - - let point = option::extract(&mut new_point_from_64_uniform_bytes(bytes_64)); - assert!(point_equals(&expected, &point), 1); - } - - #[test] - fun test_scalar_basic_viability() { - // Test conversion from u8 - let two = Scalar { data: TWO_SCALAR }; - assert!(scalar_equals(&new_scalar_from_u8(2u8), &two), 1); - - // Test conversion from u64 - assert!(scalar_equals(&new_scalar_from_u64(2u64), &two), 1); - - // Test conversion from u128 - assert!(scalar_equals(&new_scalar_from_u128(2u128), &two), 1); - - // Test (0 - 1) % order = order - 1 - assert!(scalar_equals(&scalar_sub(&scalar_zero(), &scalar_one()), &Scalar { data: L_MINUS_ONE }), 1); - } - - #[test] - /// Tests deserializing a Scalar from a sequence of canonical bytes - fun test_scalar_from_canonical_bytes() { - // Too few bytes - assert!(std::option::is_none(&new_scalar_from_bytes(x"00")), 1); - - // 32 zero bytes are canonical - assert!(std::option::is_some(&new_scalar_from_bytes(x"0000000000000000000000000000000000000000000000000000000000000000")), 1); - - // Non-canonical because unreduced - assert!(std::option::is_none(&new_scalar_from_bytes(x"1010101010101010101010101010101010101010101010101010101010101010")), 1); - - // Canonical because \ell - 1 - assert!(std::option::is_some(&new_scalar_from_bytes(L_MINUS_ONE)), 1); - - // Non-canonical because \ell - assert!(std::option::is_none(&new_scalar_from_bytes(ORDER_ELL)), 1); - - // Non-canonical because \ell+1 - assert!(std::option::is_none(&new_scalar_from_bytes(L_PLUS_ONE)), 1); - - // Non-canonical because \ell+2 - assert!(std::option::is_none(&new_scalar_from_bytes(L_PLUS_TWO)), 1); - - // Non-canonical because high bit is set - let non_canonical_highbit = vector[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128]; - let non_canonical_highbit_hex = x"0000000000000000000000000000000000000000000000000000000000000080"; - assert!(non_canonical_highbit == non_canonical_highbit_hex, 1); - assert!(std::option::is_none(&new_scalar_from_bytes(non_canonical_highbit)), 1); - } - - #[test] - fun test_scalar_zero() { - // 0 == 0 - assert!(scalar_is_zero(&scalar_zero()), 1); - assert!(scalar_is_zero(&new_scalar_from_u8(0u8)), 1); - - // 0 != 1 - assert!(scalar_is_zero(&scalar_one()) == false, 1); - - // Pick a random scalar by hashing from some "random" bytes - let s = new_scalar_from_sha2_512(x"deadbeef"); - - // Technically, there is a negligible probability (i.e., 1/2^\ell) that the hashed s is zero or one - assert!(scalar_is_zero(&s) == false, 1); - assert!(scalar_is_one(&s) == false, 1); - - // Multiply 0 with a random scalar and make sure you get zero - assert!(scalar_is_zero(&scalar_mul(&scalar_zero(), &s)), 1); - assert!(scalar_is_zero(&scalar_mul(&s, &scalar_zero())), 1); - } - - #[test] - fun test_scalar_one() { - // 1 == 1 - assert!(scalar_is_one(&scalar_one()), 1); - assert!(scalar_is_one(&new_scalar_from_u8(1u8)), 1); - - // 1 != 0 - assert!(scalar_is_one(&scalar_zero()) == false, 1); - - // Pick a random scalar by hashing from some "random" bytes - let s = new_scalar_from_sha2_512(x"deadbeef"); - let inv = scalar_invert(&s); - - // Technically, there is a negligible probability (i.e., 1/2^\ell) that s was zero and the call above returned None - assert!(std::option::is_some(&inv), 1); - - let inv = std::option::extract(&mut inv); - - // Multiply s with s^{-1} and make sure you get one - assert!(scalar_is_one(&scalar_mul(&s, &inv)), 1); - assert!(scalar_is_one(&scalar_mul(&inv, &s)), 1); - } - - #[test] - fun test_scalar_from_sha2_512() { - // Test a specific message hashes correctly to the field - let str: vector = vector[]; - std::vector::append(&mut str, b"To really appreciate architecture, you may even need to commit a murder."); - std::vector::append(&mut str, b"While the programs used for The Manhattan Transcripts are of the most extreme"); - std::vector::append(&mut str, b"nature, they also parallel the most common formula plot: the archetype of"); - std::vector::append(&mut str, b"murder. Other phantasms were occasionally used to underline the fact that"); - std::vector::append(&mut str, b"perhaps all architecture, rather than being about functional standards, is"); - std::vector::append(&mut str, b"about love and death."); - - let s = new_scalar_from_sha2_512(str); - - let expected: vector = vector[ - 21, 88, 208, 252, 63, 122, 210, 152, - 154, 38, 15, 23, 16, 167, 80, 150, - 192, 221, 77, 226, 62, 25, 224, 148, - 239, 48, 176, 10, 185, 69, 168, 11 - ]; - - assert!(s.data == expected, 1) - } - - #[test] - fun test_scalar_invert() { - // Cannot invert zero - assert!(std::option::is_none(&scalar_invert(&scalar_zero())), 1); - - // One's inverse is one - let one = scalar_invert(&scalar_one()); - assert!(std::option::is_some(&one), 1); - - let one = std::option::extract(&mut one); - assert!(scalar_is_one(&one), 1); - - // Test a random point X's inverse is correct - let x = Scalar { data: X_SCALAR }; - let xinv = scalar_invert(&x); - assert!(std::option::is_some(&xinv), 1); - - let xinv = std::option::extract(&mut xinv); - let xinv_expected = Scalar { data: X_INV_SCALAR }; - - assert!(scalar_equals(&xinv, &xinv_expected), 1) - } - - #[test] - fun test_scalar_neg() { - // -(-X) == X - let x = Scalar { data: X_SCALAR }; - - let x_neg = scalar_neg(&x); - let x_neg_neg = scalar_neg(&x_neg); - - assert!(scalar_equals(&x, &x_neg_neg), 1); - } - - #[test] - fun test_scalar_neg_assign() { - let x = Scalar { data: X_SCALAR }; - let x_copy = x; - - scalar_neg_assign(&mut x); - assert!(!scalar_equals(&x, &x_copy), 1); - scalar_neg_assign(&mut x); - assert!(scalar_equals(&x, &x_copy), 1); - - assert!(scalar_equals(scalar_neg_assign(scalar_neg_assign(&mut x)), &x_copy), 1); - } - - #[test] - fun test_scalar_mul() { - // X * 1 == X - let x = Scalar { data: X_SCALAR }; - assert!(scalar_equals(&x, &scalar_mul(&x, &scalar_one())), 1); - - // Test multiplication of two random scalars - let y = Scalar { data: Y_SCALAR }; - let x_times_y = Scalar { data: X_TIMES_Y_SCALAR }; - assert!(scalar_equals(&scalar_mul(&x, &y), &x_times_y), 1); - - // A * B - assert!(scalar_equals(&scalar_mul(&Scalar { data: A_SCALAR }, &Scalar { data: B_SCALAR }), &Scalar { data: A_TIMES_B_SCALAR }), 1); - } - - #[test] - fun test_scalar_mul_assign() { - let x = Scalar { data: X_SCALAR }; - let y = Scalar { data: Y_SCALAR }; - let x_times_y = Scalar { data: X_TIMES_Y_SCALAR }; - - scalar_mul_assign(&mut x, &y); - - assert!(scalar_equals(&x, &x_times_y), 1); - } - - #[test] - fun test_scalar_add() { - // Addition reduces: \ell-1 + 1 = \ell = 0 - let ell_minus_one = Scalar { data: L_MINUS_ONE }; - assert!(scalar_is_zero(&scalar_add(&ell_minus_one, &scalar_one())), 1); - - // 1 + 1 = 2 - let two = Scalar { data: TWO_SCALAR }; - assert!(scalar_equals(&scalar_add(&scalar_one(), &scalar_one()), &two), 1); - - // A + B - assert!(scalar_equals(&scalar_add(&Scalar { data: A_SCALAR }, &Scalar { data: B_SCALAR }), &Scalar { data: A_PLUS_B_SCALAR }), 1); - } - - #[test] - fun test_scalar_sub() { - // Subtraction reduces: 0 - 1 = \ell - 1 - let ell_minus_one = Scalar { data: L_MINUS_ONE }; - assert!(scalar_equals(&scalar_sub(&scalar_zero(), &scalar_one()), &ell_minus_one), 1); - - // 2 - 1 = 1 - let two = Scalar { data: TWO_SCALAR }; - assert!(scalar_is_one(&scalar_sub(&two, &scalar_one())), 1); - - // 1 - 2 = -1 = \ell - 1 - let ell_minus_one = Scalar { data: L_MINUS_ONE }; - assert!(scalar_equals(&scalar_sub(&scalar_one(), &two), &ell_minus_one), 1); - } - - #[test] - fun test_scalar_reduced_from_32_bytes() { - // \ell + 2 = 0 + 2 = 2 (modulo \ell) - let s = std::option::extract(&mut new_scalar_reduced_from_32_bytes(L_PLUS_TWO)); - let two = Scalar { data: TWO_SCALAR }; - assert!(scalar_equals(&s, &two), 1); - - // Reducing the all 1's bit vector yields $(2^256 - 1) \mod \ell$ - let biggest = std::option::extract(&mut new_scalar_reduced_from_32_bytes(NON_CANONICAL_ALL_ONES)); - assert!(scalar_equals(&biggest, &Scalar { data: REDUCED_2_256_MINUS_1_SCALAR }), 1); - } - - #[test] - fun test_scalar_from_64_uniform_bytes() { - // Test X + 2^256 * X reduces correctly - let x_plus_2_to_256_times_x: vector = vector[]; - - std::vector::append(&mut x_plus_2_to_256_times_x, X_SCALAR); - std::vector::append(&mut x_plus_2_to_256_times_x, X_SCALAR); - - let reduced = std::option::extract(&mut new_scalar_uniform_from_64_bytes(x_plus_2_to_256_times_x)); - let expected = Scalar { data: REDUCED_X_PLUS_2_TO_256_TIMES_X_SCALAR }; - assert!(scalar_equals(&reduced, &expected), 1) - } - - #[test] - fun test_scalar_to_bytes() { - // zero is canonical - assert!(scalar_is_canonical_internal(scalar_zero().data), 1); - - // ...but if we maul it and set the high bit to 1, it is non-canonical - let non_can = scalar_zero(); - let last_byte = std::vector::borrow_mut(&mut non_can.data, 31); - *last_byte = 128; - assert!(!scalar_is_canonical_internal(non_can.data), 1); - - // This test makes sure scalar_to_bytes does not return a mutable reference to a scalar's bits - let non_can = scalar_zero(); - let bytes = scalar_to_bytes(&scalar_zero()); - let last_byte = std::vector::borrow_mut(&mut bytes, 31); - *last_byte = 128; - assert!(scalar_is_canonical_internal(non_can.data), 1); - assert!(scalar_equals(&non_can, &scalar_zero()), 1); - } - - #[test] - fun test_num_points_within_limit() { - let limit = 10000; - let i = 0; - while (i < limit) { - point_identity(); - i = i + 1; - } - } - - #[test] - #[expected_failure(abort_code=0x090004, location=Self)] - fun test_num_points_limit_exceeded() { - let limit = 10001; - let i = 0; - while (i < limit) { - point_identity(); - i = i + 1; - } - } -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/AptosStdlib/ristretto255_bulletproofs.move b/examples/oft-movement/build/oft/sources/dependencies/AptosStdlib/ristretto255_bulletproofs.move deleted file mode 100644 index 731ceabc7..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/AptosStdlib/ristretto255_bulletproofs.move +++ /dev/null @@ -1,253 +0,0 @@ -/// This module implements a Bulletproof range proof verifier on the Ristretto255 curve. -/// -/// A Bulletproof-based zero-knowledge range proof is a proof that a Pedersen commitment -/// $c = v G + r H$ commits to an $n$-bit value $v$ (i.e., $v \in [0, 2^n)$). Currently, this module only supports -/// $n \in \{8, 16, 32, 64\}$ for the number of bits. -module aptos_std::ristretto255_bulletproofs { - use std::error; - use std::features; - use aptos_std::ristretto255_pedersen as pedersen; - use aptos_std::ristretto255::{Self, RistrettoPoint}; - - // - // Constants - // - - /// The maximum range supported by the Bulletproofs library is $[0, 2^{64})$. - const MAX_RANGE_BITS : u64 = 64; - - // - // Error codes - // - - /// There was an error deserializing the range proof. - const E_DESERIALIZE_RANGE_PROOF: u64 = 1; - - /// The committed value given to the prover is too large. - const E_VALUE_OUTSIDE_RANGE: u64 = 2; - - /// The range proof system only supports proving ranges of type $[0, 2^b)$ where $b \in \{8, 16, 32, 64\}$. - const E_RANGE_NOT_SUPPORTED: u64 = 3; - - /// The native functions have not been rolled out yet. - const E_NATIVE_FUN_NOT_AVAILABLE: u64 = 4; - - // - // Structs - // - - /// Represents a zero-knowledge range proof that a value committed inside a Pedersen commitment lies in - /// `[0, 2^{MAX_RANGE_BITS})`. - struct RangeProof has copy, drop, store { - bytes: vector - } - - // - // Public functions - // - - /// Returns the maximum # of bits that the range proof system can verify proofs for. - public fun get_max_range_bits(): u64 { - MAX_RANGE_BITS - } - - /// Deserializes a range proof from a sequence of bytes. The serialization format is the same as the format in - /// the zkcrypto's `bulletproofs` library (https://docs.rs/bulletproofs/4.0.0/bulletproofs/struct.RangeProof.html#method.from_bytes). - public fun range_proof_from_bytes(bytes: vector): RangeProof { - RangeProof { - bytes - } - } - - /// Returns the byte-representation of a range proof. - public fun range_proof_to_bytes(proof: &RangeProof): vector { - proof.bytes - } - - /// Verifies a zero-knowledge range proof that the value `v` committed in `com` (under the default Bulletproofs - /// commitment key; see `pedersen::new_commitment_for_bulletproof`) satisfies $v \in [0, 2^b)$. Only works - /// for $b \in \{8, 16, 32, 64\}$. Additionally, checks that the prover used `dst` as the domain-separation - /// tag (DST). - /// - /// WARNING: The DST check is VERY important for security as it prevents proofs computed for one application - /// (a.k.a., a _domain_) with `dst_1` from verifying in a different application with `dst_2 != dst_1`. - public fun verify_range_proof_pedersen(com: &pedersen::Commitment, proof: &RangeProof, num_bits: u64, dst: vector): bool { - assert!(features::bulletproofs_enabled(), error::invalid_state(E_NATIVE_FUN_NOT_AVAILABLE)); - - verify_range_proof_internal( - ristretto255::point_to_bytes(&pedersen::commitment_as_compressed_point(com)), - &ristretto255::basepoint(), &ristretto255::hash_to_point_base(), - proof.bytes, - num_bits, - dst - ) - } - - /// Verifies a zero-knowledge range proof that the value `v` committed in `com` (as v * val_base + r * rand_base, - /// for some randomness `r`) satisfies `v` in `[0, 2^num_bits)`. Only works for `num_bits` in `{8, 16, 32, 64}`. - public fun verify_range_proof( - com: &RistrettoPoint, - val_base: &RistrettoPoint, rand_base: &RistrettoPoint, - proof: &RangeProof, num_bits: u64, dst: vector): bool - { - assert!(features::bulletproofs_enabled(), error::invalid_state(E_NATIVE_FUN_NOT_AVAILABLE)); - - verify_range_proof_internal( - ristretto255::point_to_bytes(&ristretto255::point_compress(com)), - val_base, rand_base, - proof.bytes, num_bits, dst - ) - } - - #[test_only] - /// Computes a range proof for the Pedersen commitment to 'val' with randomness 'r', under the default Bulletproofs - /// commitment key; see `pedersen::new_commitment_for_bulletproof`. Returns the said commitment too. - /// Only works for `num_bits` in `{8, 16, 32, 64}`. - public fun prove_range_pedersen(val: &Scalar, r: &Scalar, num_bits: u64, dst: vector): (RangeProof, pedersen::Commitment) { - let (bytes, compressed_comm) = prove_range_internal(scalar_to_bytes(val), scalar_to_bytes(r), num_bits, dst, &ristretto255::basepoint(), &ristretto255::hash_to_point_base()); - let point = ristretto255::new_compressed_point_from_bytes(compressed_comm); - let point = &std::option::extract(&mut point); - - ( - RangeProof { bytes }, - pedersen::commitment_from_compressed(point) - ) - } - - // - // Native functions - // - - /// Aborts with `error::invalid_argument(E_DESERIALIZE_RANGE_PROOF)` if `proof` is not a valid serialization of a - /// range proof. - /// Aborts with `error::invalid_argument(E_RANGE_NOT_SUPPORTED)` if an unsupported `num_bits` is provided. - native fun verify_range_proof_internal( - com: vector, - val_base: &RistrettoPoint, - rand_base: &RistrettoPoint, - proof: vector, - num_bits: u64, - dst: vector): bool; - - #[test_only] - /// Returns a tuple consisting of (1) a range proof for 'val' committed with randomness 'r' under the default Bulletproofs - /// commitment key and (2) the commitment itself. - /// - /// Aborts with `error::invalid_argument(E_RANGE_NOT_SUPPORTED)` if an unsupported `num_bits` is provided. - /// Aborts with `error::invalid_argument(E_VALUE_OUTSIDE_RANGE)` if an `val_base` is not `num_bits` wide. - native fun prove_range_internal( - val: vector, - r: vector, - num_bits: u64, - dst: vector, - val_base: &RistrettoPoint, - rand_base: &RistrettoPoint): (vector, vector); - - // - // Testing - // - - #[test_only] - use aptos_std::ristretto255::{Scalar, scalar_to_bytes, point_equals}; - - #[test_only] - const A_DST: vector = b"AptosBulletproofs"; - #[test_only] - const A_VALUE: vector = x"870c2fa1b2e9ac45000000000000000000000000000000000000000000000000"; // i.e., 5020644638028926087u64 - #[test_only] - const A_BLINDER: vector = x"e7c7b42b75503bfc7b1932783786d227ebf88f79da752b68f6b865a9c179640c"; - // Pedersen commitment to A_VALUE with randomness A_BLINDER - #[test_only] - const A_COMM: vector = x"0a665260a4e42e575882c2cdcb3d0febd6cf168834f6de1e9e61e7b2e53dbf14"; - // Range proof for A_COMM using domain-separation tag in A_DST, and MAX_RANGE_BITS - #[test_only] - const A_RANGE_PROOF_PEDERSEN: vector = x"d8d422d3fb9511d1942b78e3ec1a8c82fe1c01a0a690c55a4761e7e825633a753cca816667d2cbb716fe04a9c199cad748c2d4e59de4ed04fedf5f04f4341a74ae75b63c1997fd65d5fb3a8c03ad8771abe2c0a4f65d19496c11d948d6809503eac4d996f2c6be4e64ebe2df31102c96f106695bdf489dc9290c93b4d4b5411fb6298d0c33afa57e2e1948c38ef567268a661e7b1c099272e29591e717930a06a2c6e0e2d56aedea3078fd59334634f1a4543069865409eba074278f191039083102a9a0621791a9be09212a847e22061e083d7a712b05bca7274b25e4cb1201c679c4957f0842d7661fa1d3f5456a651e89112628b456026f8ad3a7abeaba3fec8031ec8b0392c0aa6c96205f7b21b0c2d6b5d064bd5bd1a1d91c41625d910688fa0dca35ec0f0e31a45792f8d6a330be970a22e1e0773111a083de893c89419ee7de97295978de90bcdf873a2826746809e64f9143417dbed09fa1c124e673febfed65c137cc45fabda963c96b64645802d1440cba5e58717e539f55f3321ab0c0f60410fba70070c5db500fee874265a343a2a59773fd150bcae09321a5166062e176e2e76bef0e3dd1a9250bcb7f4c971c10f0b24eb2a94e009b72c1fc21ee4267881e27b4edba8bed627ddf37e0c53cd425bc279d0c50d154d136503e54882e9541820d6394bd52ca2b438fd8c517f186fec0649c4846c4e43ce845d80e503dee157ce55392188039a7efc78719107ab989db8d9363b9dfc1946f01a84dbca5e742ed5f30b07ac61cf17ce2cf2c6a49d799ed3968a63a3ccb90d9a0e50960d959f17f202dd5cf0f2c375a8a702e063d339e48c0227e7cf710157f63f13136d8c3076c672ea2c1028fc1825366a145a4311de6c2cc46d3144ae3d2bc5808819b9817be3fce1664ecb60f74733e75e97ca8e567d1b81bdd4c56c7a340ba00"; - - #[test(fx = @std)] - #[expected_failure(abort_code = 0x010003, location = Self)] - fun test_unsupported_ranges(fx: signer) { - features::change_feature_flags_for_testing(&fx, vector[ features::get_bulletproofs_feature() ], vector[]); - - let comm = ristretto255::new_point_from_bytes(A_COMM); - let comm = std::option::extract(&mut comm); - let comm = pedersen::commitment_from_point(comm); - - assert!(verify_range_proof_pedersen( - &comm, - &range_proof_from_bytes(A_RANGE_PROOF_PEDERSEN), 10, A_DST), 1); - } - - #[test(fx = @std)] - fun test_prover(fx: signer) { - features::change_feature_flags_for_testing(&fx, vector[ features::get_bulletproofs_feature() ], vector[]); - - let v = ristretto255::new_scalar_from_u64(59); - let r = ristretto255::new_scalar_from_bytes(A_BLINDER); - let r = std::option::extract(&mut r); - let num_bits = 8; - - let (proof, comm) = prove_range_pedersen(&v, &r, num_bits, A_DST); - - assert!(verify_range_proof_pedersen(&comm, &proof, 64, A_DST) == false, 1); - assert!(verify_range_proof_pedersen(&comm, &proof, 32, A_DST) == false, 1); - assert!(verify_range_proof_pedersen(&comm, &proof, 16, A_DST) == false, 1); - assert!(verify_range_proof_pedersen(&comm, &proof, num_bits, A_DST), 1); - } - - #[test(fx = @std)] - #[expected_failure(abort_code = 0x010001, location = Self)] - fun test_empty_range_proof(fx: signer) { - features::change_feature_flags_for_testing(&fx, vector[ features::get_bulletproofs_feature() ], vector[]); - - let proof = &range_proof_from_bytes(vector[ ]); - let num_bits = 64; - let com = pedersen::new_commitment_for_bulletproof( - &ristretto255::scalar_one(), - &ristretto255::new_scalar_from_sha2_512(b"hello random world") - ); - - // This will fail with error::invalid_argument(E_DESERIALIZE_RANGE_PROOF) - verify_range_proof_pedersen(&com, proof, num_bits, A_DST); - } - - #[test(fx = @std)] - fun test_valid_range_proof_verifies_against_comm(fx: signer) { - features::change_feature_flags_for_testing(&fx, vector[ features::get_bulletproofs_feature() ], vector[]); - - let value = ristretto255::new_scalar_from_bytes(A_VALUE); - let value = std::option::extract(&mut value); - - let blinder = ristretto255::new_scalar_from_bytes(A_BLINDER); - let blinder = std::option::extract(&mut blinder); - - let comm = pedersen::new_commitment_for_bulletproof(&value, &blinder); - - let expected_comm = std::option::extract(&mut ristretto255::new_point_from_bytes(A_COMM)); - assert!(point_equals(pedersen::commitment_as_point(&comm), &expected_comm), 1); - - assert!(verify_range_proof_pedersen( - &comm, - &range_proof_from_bytes(A_RANGE_PROOF_PEDERSEN), MAX_RANGE_BITS, A_DST), 1); - } - - #[test(fx = @std)] - fun test_invalid_range_proof_fails_verification(fx: signer) { - features::change_feature_flags_for_testing(&fx, vector[ features::get_bulletproofs_feature() ], vector[]); - - let comm = ristretto255::new_point_from_bytes(A_COMM); - let comm = std::option::extract(&mut comm); - let comm = pedersen::commitment_from_point(comm); - - // Take a valid proof... - let range_proof_invalid = A_RANGE_PROOF_PEDERSEN; - - // ...and modify a byte in the middle of the proof - let pos = std::vector::length(&range_proof_invalid) / 2; - let byte = std::vector::borrow_mut(&mut range_proof_invalid, pos); - *byte = *byte + 1; - - assert!(verify_range_proof_pedersen( - &comm, - &range_proof_from_bytes(range_proof_invalid), MAX_RANGE_BITS, A_DST) == false, 1); - } -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/AptosStdlib/ristretto255_elgamal.move b/examples/oft-movement/build/oft/sources/dependencies/AptosStdlib/ristretto255_elgamal.move deleted file mode 100644 index a6912e7b1..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/AptosStdlib/ristretto255_elgamal.move +++ /dev/null @@ -1,234 +0,0 @@ -/// This module implements an ElGamal encryption API, over the Ristretto255 curve, that can be used with the -/// Bulletproofs module. -/// -/// An ElGamal *ciphertext* is an encryption of a value `v` under a basepoint `G` and public key `Y = sk * G`, where `sk` -/// is the corresponding secret key, is `(v * G + r * Y, r * G)`, for a random scalar `r`. -/// -/// Note that we place the value `v` "in the exponent" of `G` so that ciphertexts are additively homomorphic: i.e., so -/// that `Enc_Y(v, r) + Enc_Y(v', r') = Enc_Y(v + v', r + r')` where `v, v'` are plaintext messages, `Y` is a public key and `r, r'` -/// are the randomness of the ciphertexts. - -module aptos_std::ristretto255_elgamal { - use aptos_std::ristretto255::{Self, RistrettoPoint, Scalar, CompressedRistretto, point_compress}; - use std::option::Option; - use std::vector; - - // - // Structs - // - - /// An ElGamal ciphertext. - struct Ciphertext has drop { - left: RistrettoPoint, // v * G + r * Y - right: RistrettoPoint, // r * G - } - - /// A compressed ElGamal ciphertext. - struct CompressedCiphertext has store, copy, drop { - left: CompressedRistretto, - right: CompressedRistretto, - } - - /// An ElGamal public key. - struct CompressedPubkey has store, copy, drop { - point: CompressedRistretto, - } - - // - // Public functions - // - - /// Creates a new public key from a serialized Ristretto255 point. - public fun new_pubkey_from_bytes(bytes: vector): Option { - let point = ristretto255::new_compressed_point_from_bytes(bytes); - if (std::option::is_some(&mut point)) { - let pk = CompressedPubkey { - point: std::option::extract(&mut point) - }; - std::option::some(pk) - } else { - std::option::none() - } - } - - /// Given an ElGamal public key `pubkey`, returns the byte representation of that public key. - public fun pubkey_to_bytes(pubkey: &CompressedPubkey): vector { - ristretto255::compressed_point_to_bytes(pubkey.point) - } - - /// Given a public key `pubkey`, returns the underlying `RistrettoPoint` representing that key. - public fun pubkey_to_point(pubkey: &CompressedPubkey): RistrettoPoint { - ristretto255::point_decompress(&pubkey.point) - } - - /// Given a public key, returns the underlying `CompressedRistretto` point representing that key. - public fun pubkey_to_compressed_point(pubkey: &CompressedPubkey): CompressedRistretto { - pubkey.point - } - - /// Creates a new ciphertext from two serialized Ristretto255 points: the first 32 bytes store `r * G` while the - /// next 32 bytes store `v * G + r * Y`, where `Y` is the public key. - public fun new_ciphertext_from_bytes(bytes: vector): Option { - if(vector::length(&bytes) != 64) { - return std::option::none() - }; - - let bytes_right = vector::trim(&mut bytes, 32); - - let left_point = ristretto255::new_point_from_bytes(bytes); - let right_point = ristretto255::new_point_from_bytes(bytes_right); - - if (std::option::is_some(&mut left_point) && std::option::is_some(&mut right_point)) { - std::option::some(Ciphertext { - left: std::option::extract(&mut left_point), - right: std::option::extract(&mut right_point) - }) - } else { - std::option::none() - } - } - - /// Creates a new ciphertext `(val * G + 0 * Y, 0 * G) = (val * G, 0 * G)` where `G` is the Ristretto255 basepoint - /// and the randomness is set to zero. - public fun new_ciphertext_no_randomness(val: &Scalar): Ciphertext { - Ciphertext { - left: ristretto255::basepoint_mul(val), - right: ristretto255::point_identity(), - } - } - - /// Moves a pair of Ristretto points into an ElGamal ciphertext. - public fun ciphertext_from_points(left: RistrettoPoint, right: RistrettoPoint): Ciphertext { - Ciphertext { - left, - right, - } - } - - /// Moves a pair of `CompressedRistretto` points into an ElGamal ciphertext. - public fun ciphertext_from_compressed_points(left: CompressedRistretto, right: CompressedRistretto): CompressedCiphertext { - CompressedCiphertext { - left, - right, - } - } - - /// Given a ciphertext `ct`, serializes that ciphertext into bytes. - public fun ciphertext_to_bytes(ct: &Ciphertext): vector { - let bytes_left = ristretto255::point_to_bytes(&ristretto255::point_compress(&ct.left)); - let bytes_right = ristretto255::point_to_bytes(&ristretto255::point_compress(&ct.right)); - let bytes = vector::empty(); - vector::append(&mut bytes, bytes_left); - vector::append(&mut bytes, bytes_right); - bytes - } - - /// Moves the ciphertext into a pair of `RistrettoPoint`'s. - public fun ciphertext_into_points(c: Ciphertext): (RistrettoPoint, RistrettoPoint) { - let Ciphertext { left, right } = c; - (left, right) - } - - /// Returns the pair of `RistrettoPoint`'s representing the ciphertext. - public fun ciphertext_as_points(c: &Ciphertext): (&RistrettoPoint, &RistrettoPoint) { - (&c.left, &c.right) - } - - /// Creates a new compressed ciphertext from a decompressed ciphertext. - public fun compress_ciphertext(ct: &Ciphertext): CompressedCiphertext { - CompressedCiphertext { - left: point_compress(&ct.left), - right: point_compress(&ct.right), - } - } - - /// Creates a new decompressed ciphertext from a compressed ciphertext. - public fun decompress_ciphertext(ct: &CompressedCiphertext): Ciphertext { - Ciphertext { - left: ristretto255::point_decompress(&ct.left), - right: ristretto255::point_decompress(&ct.right), - } - } - - /// Homomorphically combines two ciphertexts `lhs` and `rhs` as `lhs + rhs`. - /// Useful for re-randomizing the ciphertext or updating the committed value. - public fun ciphertext_add(lhs: &Ciphertext, rhs: &Ciphertext): Ciphertext { - Ciphertext { - left: ristretto255::point_add(&lhs.left, &rhs.left), - right: ristretto255::point_add(&lhs.right, &rhs.right), - } - } - - /// Like `ciphertext_add` but assigns `lhs = lhs + rhs`. - public fun ciphertext_add_assign(lhs: &mut Ciphertext, rhs: &Ciphertext) { - ristretto255::point_add_assign(&mut lhs.left, &rhs.left); - ristretto255::point_add_assign(&mut lhs.right, &rhs.right); - } - - /// Homomorphically combines two ciphertexts `lhs` and `rhs` as `lhs - rhs`. - /// Useful for re-randomizing the ciphertext or updating the committed value. - public fun ciphertext_sub(lhs: &Ciphertext, rhs: &Ciphertext): Ciphertext { - Ciphertext { - left: ristretto255::point_sub(&lhs.left, &rhs.left), - right: ristretto255::point_sub(&lhs.right, &rhs.right), - } - } - - /// Like `ciphertext_add` but assigns `lhs = lhs - rhs`. - public fun ciphertext_sub_assign(lhs: &mut Ciphertext, rhs: &Ciphertext) { - ristretto255::point_sub_assign(&mut lhs.left, &rhs.left); - ristretto255::point_sub_assign(&mut lhs.right, &rhs.right); - } - - /// Creates a copy of this ciphertext. - public fun ciphertext_clone(c: &Ciphertext): Ciphertext { - Ciphertext { - left: ristretto255::point_clone(&c.left), - right: ristretto255::point_clone(&c.right), - } - } - - /// Returns true if the two ciphertexts are identical: i.e., same value and same randomness. - public fun ciphertext_equals(lhs: &Ciphertext, rhs: &Ciphertext): bool { - ristretto255::point_equals(&lhs.left, &rhs.left) && - ristretto255::point_equals(&lhs.right, &rhs.right) - } - - /// Returns the `RistrettoPoint` in the ciphertext which contains the encrypted value in the exponent. - public fun get_value_component(ct: &Ciphertext): &RistrettoPoint { - &ct.left - } - - // - // Test-only functions - // - - #[test_only] - /// Given an ElGamal secret key `sk`, returns the corresponding ElGamal public key as `sk * G`. - public fun pubkey_from_secret_key(sk: &Scalar): CompressedPubkey { - let point = ristretto255::basepoint_mul(sk); - CompressedPubkey { - point: point_compress(&point) - } - } - - #[test_only] - /// Returns a ciphertext (v * point + r * pubkey, r * point) where `point` is *any* Ristretto255 point, - /// `pubkey` is the public key and `r` is the randomness. - public fun new_ciphertext(v: &Scalar, point: &RistrettoPoint, r: &Scalar, pubkey: &CompressedPubkey): Ciphertext { - Ciphertext { - left: ristretto255::double_scalar_mul(v, point, r, &pubkey_to_point(pubkey)), - right: ristretto255::point_mul(point, r), - } - } - - #[test_only] - /// Returns a ciphertext (v * basepoint + r * pubkey, r * basepoint) where `basepoint` is the Ristretto255 basepoint - /// `pubkey` is the public key and `r` is the randomness. - public fun new_ciphertext_with_basepoint(v: &Scalar, r: &Scalar, pubkey: &CompressedPubkey): Ciphertext { - Ciphertext { - left: ristretto255::basepoint_double_mul(r, &pubkey_to_point(pubkey), v), - right: ristretto255::basepoint_mul(r), - } - } -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/AptosStdlib/ristretto255_pedersen.move b/examples/oft-movement/build/oft/sources/dependencies/AptosStdlib/ristretto255_pedersen.move deleted file mode 100644 index 7a49a0404..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/AptosStdlib/ristretto255_pedersen.move +++ /dev/null @@ -1,158 +0,0 @@ -/// This module implements a Pedersen commitment API, over the Ristretto255 curve, that can be used with the -/// Bulletproofs module. -/// -/// A Pedersen commitment to a value `v` under _commitment key_ `(g, h)` is `v * g + r * h`, for a random scalar `r`. - -module aptos_std::ristretto255_pedersen { - use aptos_std::ristretto255::{Self, RistrettoPoint, Scalar, CompressedRistretto, point_compress}; - use std::option::Option; - - // - // Constants - // - - /// The default Pedersen randomness base `h` used in our underlying Bulletproofs library. - /// This is obtained by hashing the compressed Ristretto255 basepoint using SHA3-512 (not SHA2-512). - const BULLETPROOF_DEFAULT_PEDERSEN_RAND_BASE : vector = x"8c9240b456a9e6dc65c377a1048d745f94a08cdb7f44cbcd7b46f34048871134"; - - // - // Structs - // - - /// A Pedersen commitment to some value with some randomness. - struct Commitment has drop { - point: RistrettoPoint, - } - - // - // Public functions - // - - /// Creates a new public key from a serialized Ristretto255 point. - public fun new_commitment_from_bytes(bytes: vector): Option { - let point = ristretto255::new_point_from_bytes(bytes); - if (std::option::is_some(&mut point)) { - let comm = Commitment { - point: std::option::extract(&mut point) - }; - std::option::some(comm) - } else { - std::option::none() - } - } - - /// Returns a commitment as a serialized byte array - public fun commitment_to_bytes(comm: &Commitment): vector { - ristretto255::point_to_bytes(&ristretto255::point_compress(&comm.point)) - } - - /// Moves a Ristretto point into a Pedersen commitment. - public fun commitment_from_point(point: RistrettoPoint): Commitment { - Commitment { - point - } - } - - /// Deserializes a commitment from a compressed Ristretto point. - public fun commitment_from_compressed(point: &CompressedRistretto): Commitment { - Commitment { - point: ristretto255::point_decompress(point) - } - } - - /// Returns a commitment `v * val_base + r * rand_base` where `(val_base, rand_base)` is the commitment key. - public fun new_commitment(v: &Scalar, val_base: &RistrettoPoint, r: &Scalar, rand_base: &RistrettoPoint): Commitment { - Commitment { - point: ristretto255::double_scalar_mul(v, val_base, r, rand_base) - } - } - - /// Returns a commitment `v * G + r * rand_base` where `G` is the Ristretto255 basepoint. - public fun new_commitment_with_basepoint(v: &Scalar, r: &Scalar, rand_base: &RistrettoPoint): Commitment { - Commitment { - point: ristretto255::basepoint_double_mul(r, rand_base, v) - } - } - - /// Returns a commitment `v * G + r * H` where `G` is the Ristretto255 basepoint and `H` is the default randomness - /// base used in the Bulletproofs library (i.e., `BULLETPROOF_DEFAULT_PEDERSEN_RAND_BASE`). - public fun new_commitment_for_bulletproof(v: &Scalar, r: &Scalar): Commitment { - let rand_base = ristretto255::new_point_from_bytes(BULLETPROOF_DEFAULT_PEDERSEN_RAND_BASE); - let rand_base = std::option::extract(&mut rand_base); - - Commitment { - point: ristretto255::basepoint_double_mul(r, &rand_base, v) - } - } - - /// Homomorphically combines two commitments `lhs` and `rhs` as `lhs + rhs`. - /// Useful for re-randomizing the commitment or updating the committed value. - public fun commitment_add(lhs: &Commitment, rhs: &Commitment): Commitment { - Commitment { - point: ristretto255::point_add(&lhs.point, &rhs.point) - } - } - - /// Like `commitment_add` but assigns `lhs = lhs + rhs`. - public fun commitment_add_assign(lhs: &mut Commitment, rhs: &Commitment) { - ristretto255::point_add_assign(&mut lhs.point, &rhs.point); - } - - /// Homomorphically combines two commitments `lhs` and `rhs` as `lhs - rhs`. - /// Useful for re-randomizing the commitment or updating the committed value. - public fun commitment_sub(lhs: &Commitment, rhs: &Commitment): Commitment { - Commitment { - point: ristretto255::point_sub(&lhs.point, &rhs.point) - } - } - - /// Like `commitment_add` but assigns `lhs = lhs - rhs`. - public fun commitment_sub_assign(lhs: &mut Commitment, rhs: &Commitment) { - ristretto255::point_sub_assign(&mut lhs.point, &rhs.point); - } - - /// Creates a copy of this commitment. - public fun commitment_clone(c: &Commitment): Commitment { - Commitment { - point: ristretto255::point_clone(&c.point) - } - } - - /// Returns true if the two commitments are identical: i.e., same value and same randomness. - public fun commitment_equals(lhs: &Commitment, rhs: &Commitment): bool { - ristretto255::point_equals(&lhs.point, &rhs.point) - } - - /// Returns the underlying elliptic curve point representing the commitment as an in-memory `RistrettoPoint`. - public fun commitment_as_point(c: &Commitment): &RistrettoPoint { - &c.point - } - - /// Returns the Pedersen commitment as a `CompressedRistretto` point. - public fun commitment_as_compressed_point(c: &Commitment): CompressedRistretto { - point_compress(&c.point) - } - - /// Moves the Commitment into a CompressedRistretto point. - public fun commitment_into_point(c: Commitment): RistrettoPoint { - let Commitment { point } = c; - point - } - - /// Moves the Commitment into a `CompressedRistretto` point. - public fun commitment_into_compressed_point(c: Commitment): CompressedRistretto { - point_compress(&c.point) - } - - /// Returns the randomness base compatible with the Bulletproofs module. - /// - /// Recal that a Bulletproof range proof attests, in zero-knowledge, that a value `v` inside a Pedersen commitment - /// `v * g + r * h` is sufficiently "small" (e.g., is 32-bits wide). Here, `h` is referred to as the - /// "randomness base" of the commitment scheme. - /// - /// Bulletproof has a default choice for `g` and `h` and this function returns the default `h` as used in the - /// Bulletproofs Move module. - public fun randomness_base_for_bulletproof(): RistrettoPoint { - std::option::extract(&mut ristretto255::new_point_from_bytes(BULLETPROOF_DEFAULT_PEDERSEN_RAND_BASE)) - } -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/AptosStdlib/secp256k1.move b/examples/oft-movement/build/oft/sources/dependencies/AptosStdlib/secp256k1.move deleted file mode 100644 index 8acf9368e..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/AptosStdlib/secp256k1.move +++ /dev/null @@ -1,114 +0,0 @@ -/// This module implements ECDSA signatures based on the prime-order secp256k1 ellptic curve (i.e., cofactor is 1). - -module aptos_std::secp256k1 { - use std::option::Option; - - /// An error occurred while deserializing, for example due to wrong input size. - const E_DESERIALIZE: u64 = 1; // This code must be the same, if ever returned from the native Rust implementation. - - /// The size of a secp256k1-based ECDSA public key, in bytes. - const RAW_PUBLIC_KEY_NUM_BYTES: u64 = 64; - //const COMPRESSED_PUBLIC_KEY_SIZE: u64 = 33; - - /// The size of a secp256k1-based ECDSA signature, in bytes. - const SIGNATURE_NUM_BYTES: u64 = 64; - - /// A 64-byte ECDSA public key. - struct ECDSARawPublicKey has copy, drop, store { - bytes: vector - } - - /// A 64-byte ECDSA signature. - struct ECDSASignature has copy, drop, store { - bytes: vector - } - - /// Constructs an ECDSASignature struct from the given 64 bytes. - public fun ecdsa_signature_from_bytes(bytes: vector): ECDSASignature { - assert!(std::vector::length(&bytes) == SIGNATURE_NUM_BYTES, std::error::invalid_argument(E_DESERIALIZE)); - ECDSASignature { bytes } - } - - /// Constructs an ECDSARawPublicKey struct, given a 64-byte raw representation. - public fun ecdsa_raw_public_key_from_64_bytes(bytes: vector): ECDSARawPublicKey { - assert!(std::vector::length(&bytes) == RAW_PUBLIC_KEY_NUM_BYTES, std::error::invalid_argument(E_DESERIALIZE)); - ECDSARawPublicKey { bytes } - } - - /// Serializes an ECDSARawPublicKey struct to 64-bytes. - public fun ecdsa_raw_public_key_to_bytes(pk: &ECDSARawPublicKey): vector { - pk.bytes - } - - /// Serializes an ECDSASignature struct to 64-bytes. - public fun ecdsa_signature_to_bytes(sig: &ECDSASignature): vector { - sig.bytes - } - - /// Recovers the signer's raw (64-byte) public key from a secp256k1 ECDSA `signature` given the `recovery_id` and the signed - /// `message` (32 byte digest). - /// - /// Note that an invalid signature, or a signature from a different message, will result in the recovery of an - /// incorrect public key. This recovery algorithm can only be used to check validity of a signature if the signer's - /// public key (or its hash) is known beforehand. - public fun ecdsa_recover( - message: vector, - recovery_id: u8, - signature: &ECDSASignature, - ): Option { - let (pk, success) = ecdsa_recover_internal(message, recovery_id, signature.bytes); - if (success) { - std::option::some(ecdsa_raw_public_key_from_64_bytes(pk)) - } else { - std::option::none() - } - } - - // - // Native functions - // - - /// Returns `(public_key, true)` if `signature` verifies on `message` under the recovered `public_key` - /// and returns `([], false)` otherwise. - native fun ecdsa_recover_internal( - message: vector, - recovery_id: u8, - signature: vector - ): (vector, bool); - - // - // Tests - // - - #[test] - /// Test on a valid secp256k1 ECDSA signature created using sk = x"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" - fun test_ecdsa_recover() { - use std::hash; - - let pk = ecdsa_recover( - hash::sha2_256(b"test aptos secp256k1"), - 0, - &ECDSASignature { bytes: x"f7ad936da03f948c14c542020e3c5f4e02aaacd1f20427c11aa6e2fbf8776477646bba0e1a37f9e7c777c423a1d2849baafd7ff6a9930814a43c3f80d59db56f" }, - ); - assert!(std::option::is_some(&pk), 1); - assert!(std::option::extract(&mut pk).bytes == x"4646ae5047316b4230d0086c8acec687f00b1cd9d1dc634f6cb358ac0a9a8ffffe77b4dd0a4bfb95851f3b7355c781dd60f8418fc8a65d14907aff47c903a559", 1); - - // Flipped bits; Signature stays valid - let pk = ecdsa_recover( - hash::sha2_256(b"test aptos secp256k1"), - 0, - // NOTE: A '7' was flipped to an 'f' here - &ECDSASignature { bytes: x"f7ad936da03f948c14c542020e3c5f4e02aaacd1f20427c11aa6e2fbf8776477646bba0e1a37f9e7c7f7c423a1d2849baafd7ff6a9930814a43c3f80d59db56f" }, - ); - assert!(std::option::is_some(&pk), 1); - assert!(std::option::extract(&mut pk).bytes != x"4646ae5047316b4230d0086c8acec687f00b1cd9d1dc634f6cb358ac0a9a8ffffe77b4dd0a4bfb95851f3b7355c781dd60f8418fc8a65d14907aff47c903a559", 1); - - // Flipped bits; Signature becomes invalid - let pk = ecdsa_recover( - hash::sha2_256(b"test aptos secp256k1"), - 0, - &ECDSASignature { bytes: x"ffad936da03f948c14c542020e3c5f4e02aaacd1f20427c11aa6e2fbf8776477646bba0e1a37f9e7c7f7c423a1d2849baafd7ff6a9930814a43c3f80d59db56f" }, - ); - assert!(std::option::is_none(&pk), 1); - } -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/AptosStdlib/simple_map.move b/examples/oft-movement/build/oft/sources/dependencies/AptosStdlib/simple_map.move deleted file mode 100644 index d672065b1..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/AptosStdlib/simple_map.move +++ /dev/null @@ -1,319 +0,0 @@ -/// This module provides a solution for unsorted maps, that is it has the properties that -/// 1) Keys point to Values -/// 2) Each Key must be unique -/// 3) A Key can be found within O(N) time -/// 4) The keys are unsorted. -/// 5) Adds and removals take O(N) time -module aptos_std::simple_map { - use std::error; - use std::option; - use std::vector; - - /// Map key already exists - const EKEY_ALREADY_EXISTS: u64 = 1; - /// Map key is not found - const EKEY_NOT_FOUND: u64 = 2; - - struct SimpleMap has copy, drop, store { - data: vector>, - } - - struct Element has copy, drop, store { - key: Key, - value: Value, - } - - public fun length(self: &SimpleMap): u64 { - vector::length(&self.data) - } - - /// Create an empty SimpleMap. - public fun new(): SimpleMap { - SimpleMap { - data: vector::empty(), - } - } - - /// Create a SimpleMap from a vector of keys and values. The keys must be unique. - public fun new_from( - keys: vector, - values: vector, - ): SimpleMap { - let map = new(); - add_all(&mut map, keys, values); - map - } - - #[deprecated] - /// Create an empty SimpleMap. - /// This function is deprecated, use `new` instead. - public fun create(): SimpleMap { - new() - } - - public fun borrow( - self: &SimpleMap, - key: &Key, - ): &Value { - let maybe_idx = find(self, key); - assert!(option::is_some(&maybe_idx), error::invalid_argument(EKEY_NOT_FOUND)); - let idx = option::extract(&mut maybe_idx); - &vector::borrow(&self.data, idx).value - } - - public fun borrow_mut( - self: &mut SimpleMap, - key: &Key, - ): &mut Value { - let maybe_idx = find(self, key); - assert!(option::is_some(&maybe_idx), error::invalid_argument(EKEY_NOT_FOUND)); - let idx = option::extract(&mut maybe_idx); - &mut vector::borrow_mut(&mut self.data, idx).value - } - - public fun contains_key( - self: &SimpleMap, - key: &Key, - ): bool { - let maybe_idx = find(self, key); - option::is_some(&maybe_idx) - } - - public fun destroy_empty(self: SimpleMap) { - let SimpleMap { data } = self; - vector::destroy_empty(data); - } - - /// Add a key/value pair to the map. The key must not already exist. - public fun add( - self: &mut SimpleMap, - key: Key, - value: Value, - ) { - let maybe_idx = find(self, &key); - assert!(option::is_none(&maybe_idx), error::invalid_argument(EKEY_ALREADY_EXISTS)); - - vector::push_back(&mut self.data, Element { key, value }); - } - - /// Add multiple key/value pairs to the map. The keys must not already exist. - public fun add_all( - self: &mut SimpleMap, - keys: vector, - values: vector, - ) { - vector::zip(keys, values, |key, value| { - add(self, key, value); - }); - } - - /// Insert key/value pair or update an existing key to a new value - public fun upsert( - self: &mut SimpleMap, - key: Key, - value: Value - ): (std::option::Option, std::option::Option) { - let data = &mut self.data; - let len = vector::length(data); - let i = 0; - while (i < len) { - let element = vector::borrow(data, i); - if (&element.key == &key) { - vector::push_back(data, Element { key, value }); - vector::swap(data, i, len); - let Element { key, value } = vector::pop_back(data); - return (std::option::some(key), std::option::some(value)) - }; - i = i + 1; - }; - vector::push_back(&mut self.data, Element { key, value }); - (std::option::none(), std::option::none()) - } - - /// Return all keys in the map. This requires keys to be copyable. - public fun keys(self: &SimpleMap): vector { - vector::map_ref(&self.data, |e| { - let e: &Element = e; - e.key - }) - } - - /// Return all values in the map. This requires values to be copyable. - public fun values(self: &SimpleMap): vector { - vector::map_ref(&self.data, |e| { - let e: &Element = e; - e.value - }) - } - - /// Transform the map into two vectors with the keys and values respectively - /// Primarily used to destroy a map - public fun to_vec_pair( - self: SimpleMap): (vector, vector) { - let keys: vector = vector::empty(); - let values: vector = vector::empty(); - let SimpleMap { data } = self; - vector::for_each(data, |e| { - let Element { key, value } = e; - vector::push_back(&mut keys, key); - vector::push_back(&mut values, value); - }); - (keys, values) - } - - /// For maps that cannot be dropped this is a utility to destroy them - /// using lambdas to destroy the individual keys and values. - public inline fun destroy( - self: SimpleMap, - dk: |Key|, - dv: |Value| - ) { - let (keys, values) = to_vec_pair(self); - vector::destroy(keys, |_k| dk(_k)); - vector::destroy(values, |_v| dv(_v)); - } - - /// Remove a key/value pair from the map. The key must exist. - public fun remove( - self: &mut SimpleMap, - key: &Key, - ): (Key, Value) { - let maybe_idx = find(self, key); - assert!(option::is_some(&maybe_idx), error::invalid_argument(EKEY_NOT_FOUND)); - let placement = option::extract(&mut maybe_idx); - let Element { key, value } = vector::swap_remove(&mut self.data, placement); - (key, value) - } - - fun find( - self: &SimpleMap, - key: &Key, - ): option::Option { - let leng = vector::length(&self.data); - let i = 0; - while (i < leng) { - let element = vector::borrow(&self.data, i); - if (&element.key == key) { - return option::some(i) - }; - i = i + 1; - }; - option::none() - } - - #[test] - public fun test_add_remove_many() { - let map = create(); - - assert!(length(&map) == 0, 0); - assert!(!contains_key(&map, &3), 1); - add(&mut map, 3, 1); - assert!(length(&map) == 1, 2); - assert!(contains_key(&map, &3), 3); - assert!(borrow(&map, &3) == &1, 4); - *borrow_mut(&mut map, &3) = 2; - assert!(borrow(&map, &3) == &2, 5); - - assert!(!contains_key(&map, &2), 6); - add(&mut map, 2, 5); - assert!(length(&map) == 2, 7); - assert!(contains_key(&map, &2), 8); - assert!(borrow(&map, &2) == &5, 9); - *borrow_mut(&mut map, &2) = 9; - assert!(borrow(&map, &2) == &9, 10); - - remove(&mut map, &2); - assert!(length(&map) == 1, 11); - assert!(!contains_key(&map, &2), 12); - assert!(borrow(&map, &3) == &2, 13); - - remove(&mut map, &3); - assert!(length(&map) == 0, 14); - assert!(!contains_key(&map, &3), 15); - - destroy_empty(map); - } - - #[test] - public fun test_add_all() { - let map = create(); - - assert!(length(&map) == 0, 0); - add_all(&mut map, vector[1, 2, 3], vector[10, 20, 30]); - assert!(length(&map) == 3, 1); - assert!(borrow(&map, &1) == &10, 2); - assert!(borrow(&map, &2) == &20, 3); - assert!(borrow(&map, &3) == &30, 4); - - remove(&mut map, &1); - remove(&mut map, &2); - remove(&mut map, &3); - destroy_empty(map); - } - - #[test] - public fun test_keys() { - let map = create(); - assert!(keys(&map) == vector[], 0); - add(&mut map, 2, 1); - add(&mut map, 3, 1); - - assert!(keys(&map) == vector[2, 3], 0); - } - - #[test] - public fun test_values() { - let map = create(); - assert!(values(&map) == vector[], 0); - add(&mut map, 2, 1); - add(&mut map, 3, 2); - - assert!(values(&map) == vector[1, 2], 0); - } - - #[test] - #[expected_failure] - public fun test_add_twice() { - let map = create(); - add(&mut map, 3, 1); - add(&mut map, 3, 1); - - remove(&mut map, &3); - destroy_empty(map); - } - - #[test] - #[expected_failure] - public fun test_remove_twice() { - let map = create(); - add(&mut map, 3, 1); - remove(&mut map, &3); - remove(&mut map, &3); - - destroy_empty(map); - } - - #[test] - public fun test_upsert_test() { - let map = create(); - // test adding 3 elements using upsert - upsert(&mut map, 1, 1); - upsert(&mut map, 2, 2); - upsert(&mut map, 3, 3); - - assert!(length(&map) == 3, 0); - assert!(contains_key(&map, &1), 1); - assert!(contains_key(&map, &2), 2); - assert!(contains_key(&map, &3), 3); - assert!(borrow(&map, &1) == &1, 4); - assert!(borrow(&map, &2) == &2, 5); - assert!(borrow(&map, &3) == &3, 6); - - // change mapping 1->1 to 1->4 - upsert(&mut map, 1, 4); - - assert!(length(&map) == 3, 7); - assert!(contains_key(&map, &1), 8); - assert!(borrow(&map, &1) == &4, 9); - } -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/AptosStdlib/smart_table.move b/examples/oft-movement/build/oft/sources/dependencies/AptosStdlib/smart_table.move deleted file mode 100644 index c9c367127..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/AptosStdlib/smart_table.move +++ /dev/null @@ -1,769 +0,0 @@ -/// A smart table implementation based on linear hashing. (https://en.wikipedia.org/wiki/Linear_hashing) -/// Compare to Table, it uses less storage slots but has higher chance of collision, a trade-off between space and time. -/// Compare to other dynamic hashing implementation, linear hashing splits one bucket a time instead of doubling buckets -/// when expanding to avoid unexpected gas cost. -/// SmartTable uses faster hash function SipHash instead of cryptographically secure hash functions like sha3-256 since -/// it tolerates collisions. -module aptos_std::smart_table { - use std::error; - use std::vector; - use aptos_std::aptos_hash::sip_hash_from_value; - use aptos_std::table_with_length::{Self, TableWithLength}; - use aptos_std::type_info::size_of_val; - use aptos_std::math64::max; - use aptos_std::simple_map::SimpleMap; - use aptos_std::simple_map; - use std::option::{Self, Option}; - - /// Key not found in the smart table - const ENOT_FOUND: u64 = 1; - /// Smart table capacity must be larger than 0 - const EZERO_CAPACITY: u64 = 2; - /// Cannot destroy non-empty hashmap - const ENOT_EMPTY: u64 = 3; - /// Key already exists - const EALREADY_EXIST: u64 = 4; - /// Invalid load threshold percent to trigger split. - const EINVALID_LOAD_THRESHOLD_PERCENT: u64 = 5; - /// Invalid target bucket size. - const EINVALID_TARGET_BUCKET_SIZE: u64 = 6; - /// Invalid target bucket size. - const EEXCEED_MAX_BUCKET_SIZE: u64 = 7; - /// Invalid bucket index. - const EINVALID_BUCKET_INDEX: u64 = 8; - /// Invalid vector index within a bucket. - const EINVALID_VECTOR_INDEX: u64 = 9; - - /// SmartTable entry contains both the key and value. - struct Entry has copy, drop, store { - hash: u64, - key: K, - value: V, - } - - struct SmartTable has store { - buckets: TableWithLength>>, - num_buckets: u64, - // number of bits to represent num_buckets - level: u8, - // total number of items - size: u64, - // Split will be triggered when target load threshold in percentage is reached when adding a new entry. - split_load_threshold: u8, - // The target size of each bucket, which is NOT enforced so oversized buckets can exist. - target_bucket_size: u64, - } - - /// Create an empty SmartTable with default configurations. - public fun new(): SmartTable { - new_with_config(0, 0, 0) - } - - /// Create an empty SmartTable with customized configurations. - /// `num_initial_buckets`: The number of buckets on initialization. 0 means using default value. - /// `split_load_threshold`: The percent number which once reached, split will be triggered. 0 means using default - /// value. - /// `target_bucket_size`: The target number of entries per bucket, though not guaranteed. 0 means not set and will - /// dynamically assgined by the contract code. - public fun new_with_config( - num_initial_buckets: u64, - split_load_threshold: u8, - target_bucket_size: u64 - ): SmartTable { - assert!(split_load_threshold <= 100, error::invalid_argument(EINVALID_LOAD_THRESHOLD_PERCENT)); - let buckets = table_with_length::new(); - table_with_length::add(&mut buckets, 0, vector::empty()); - let table = SmartTable { - buckets, - num_buckets: 1, - level: 0, - size: 0, - // The default split load threshold is 75%. - split_load_threshold: if (split_load_threshold == 0) { 75 } else { split_load_threshold }, - target_bucket_size, - }; - // The default number of initial buckets is 2. - if (num_initial_buckets == 0) { - num_initial_buckets = 2; - }; - while (num_initial_buckets > 1) { - num_initial_buckets = num_initial_buckets - 1; - split_one_bucket(&mut table); - }; - table - } - - /// Destroy empty table. - /// Aborts if it's not empty. - public fun destroy_empty(self: SmartTable) { - assert!(self.size == 0, error::invalid_argument(ENOT_EMPTY)); - let i = 0; - while (i < self.num_buckets) { - vector::destroy_empty(table_with_length::remove(&mut self.buckets, i)); - i = i + 1; - }; - let SmartTable { buckets, num_buckets: _, level: _, size: _, split_load_threshold: _, target_bucket_size: _ } = self; - table_with_length::destroy_empty(buckets); - } - - /// Destroy a table completely when V has `drop`. - public fun destroy(self: SmartTable) { - clear(&mut self); - destroy_empty(self); - } - - /// Clear a table completely when T has `drop`. - public fun clear(self: &mut SmartTable) { - *table_with_length::borrow_mut(&mut self.buckets, 0) = vector::empty(); - let i = 1; - while (i < self.num_buckets) { - table_with_length::remove(&mut self.buckets, i); - i = i + 1; - }; - self.num_buckets = 1; - self.level = 0; - self.size = 0; - } - - /// Add (key, value) pair in the hash map, it may grow one bucket if current load factor exceeds the threshold. - /// Note it may not split the actual overflowed bucket. Instead, it was determined by `num_buckets` and `level`. - /// For standard linear hash algorithm, it is stored as a variable but `num_buckets` here could be leveraged. - /// Abort if `key` already exists. - /// Note: This method may occasionally cost much more gas when triggering bucket split. - public fun add(self: &mut SmartTable, key: K, value: V) { - let hash = sip_hash_from_value(&key); - let index = bucket_index(self.level, self.num_buckets, hash); - let bucket = table_with_length::borrow_mut(&mut self.buckets, index); - // We set a per-bucket limit here with a upper bound (10000) that nobody should normally reach. - assert!(vector::length(bucket) <= 10000, error::permission_denied(EEXCEED_MAX_BUCKET_SIZE)); - assert!(vector::all(bucket, | entry | { - let e: &Entry = entry; - &e.key != &key - }), error::invalid_argument(EALREADY_EXIST)); - let e = Entry { hash, key, value }; - if (self.target_bucket_size == 0) { - let estimated_entry_size = max(size_of_val(&e), 1); - self.target_bucket_size = max(1024 /* free_write_quota */ / estimated_entry_size, 1); - }; - vector::push_back(bucket, e); - self.size = self.size + 1; - - if (load_factor(self) >= (self.split_load_threshold as u64)) { - split_one_bucket(self); - } - } - - /// Add multiple key/value pairs to the smart table. The keys must not already exist. - public fun add_all(self: &mut SmartTable, keys: vector, values: vector) { - vector::zip(keys, values, |key, value| { add(self, key, value); }); - } - - inline fun unzip_entries(entries: &vector>): (vector, vector) { - let keys = vector[]; - let values = vector[]; - vector::for_each_ref(entries, |e|{ - let entry: &Entry = e; - vector::push_back(&mut keys, entry.key); - vector::push_back(&mut values, entry.value); - }); - (keys, values) - } - - /// Convert a smart table to a simple_map, which is supposed to be called mostly by view functions to get an atomic - /// view of the whole table. - /// Disclaimer: This function may be costly as the smart table may be huge in size. Use it at your own discretion. - public fun to_simple_map( - self: &SmartTable, - ): SimpleMap { - let i = 0; - let res = simple_map::new(); - while (i < self.num_buckets) { - let (keys, values) = unzip_entries(table_with_length::borrow(&self.buckets, i)); - simple_map::add_all(&mut res, keys, values); - i = i + 1; - }; - res - } - - /// Get all keys in a smart table. - /// - /// For a large enough smart table this function will fail due to execution gas limits, and - /// `keys_paginated` should be used instead. - public fun keys( - self: &SmartTable - ): vector { - let (keys, _, _) = keys_paginated(self, 0, 0, length(self)); - keys - } - - /// Get keys from a smart table, paginated. - /// - /// This function can be used to paginate all keys in a large smart table outside of runtime, - /// e.g. through chained view function calls. The maximum `num_keys_to_get` before hitting gas - /// limits depends on the data types in the smart table. - /// - /// When starting pagination, pass `starting_bucket_index` = `starting_vector_index` = 0. - /// - /// The function will then return a vector of keys, an optional bucket index, and an optional - /// vector index. The unpacked return indices can then be used as inputs to another pagination - /// call, which will return a vector of more keys. This process can be repeated until the - /// returned bucket index and vector index value options are both none, which means that - /// pagination is complete. For an example, see `test_keys()`. - public fun keys_paginated( - self: &SmartTable, - starting_bucket_index: u64, - starting_vector_index: u64, - num_keys_to_get: u64, - ): ( - vector, - Option, - Option, - ) { - let num_buckets = self.num_buckets; - let buckets_ref = &self.buckets; - assert!(starting_bucket_index < num_buckets, EINVALID_BUCKET_INDEX); - let bucket_ref = table_with_length::borrow(buckets_ref, starting_bucket_index); - let bucket_length = vector::length(bucket_ref); - assert!( - // In the general case, starting vector index should never be equal to bucket length - // because then iteration will attempt to borrow a vector element that is out of bounds. - // However starting vector index can be equal to bucket length in the special case of - // starting iteration at the beginning of an empty bucket since buckets are never - // destroyed, only emptied. - starting_vector_index < bucket_length || starting_vector_index == 0, - EINVALID_VECTOR_INDEX - ); - let keys = vector[]; - if (num_keys_to_get == 0) return - (keys, option::some(starting_bucket_index), option::some(starting_vector_index)); - for (bucket_index in starting_bucket_index..num_buckets) { - bucket_ref = table_with_length::borrow(buckets_ref, bucket_index); - bucket_length = vector::length(bucket_ref); - for (vector_index in starting_vector_index..bucket_length) { - vector::push_back(&mut keys, vector::borrow(bucket_ref, vector_index).key); - num_keys_to_get = num_keys_to_get - 1; - if (num_keys_to_get == 0) { - vector_index = vector_index + 1; - return if (vector_index == bucket_length) { - bucket_index = bucket_index + 1; - if (bucket_index < num_buckets) { - (keys, option::some(bucket_index), option::some(0)) - } else { - (keys, option::none(), option::none()) - } - } else { - (keys, option::some(bucket_index), option::some(vector_index)) - } - }; - }; - starting_vector_index = 0; // Start parsing the next bucket at vector index 0. - }; - (keys, option::none(), option::none()) - } - - /// Decide which is the next bucket to split and split it into two with the elements inside the bucket. - fun split_one_bucket(self: &mut SmartTable) { - let new_bucket_index = self.num_buckets; - // the next bucket to split is num_bucket without the most significant bit. - let to_split = new_bucket_index ^ (1 << self.level); - self.num_buckets = new_bucket_index + 1; - // if the whole level is splitted once, bump the level. - if (to_split + 1 == 1 << self.level) { - self.level = self.level + 1; - }; - let old_bucket = table_with_length::borrow_mut(&mut self.buckets, to_split); - // partition the bucket, [0..p) stays in old bucket, [p..len) goes to new bucket - let p = vector::partition(old_bucket, |e| { - let entry: &Entry = e; // Explicit type to satisfy compiler - bucket_index(self.level, self.num_buckets, entry.hash) != new_bucket_index - }); - let new_bucket = vector::trim_reverse(old_bucket, p); - table_with_length::add(&mut self.buckets, new_bucket_index, new_bucket); - } - - /// Return the expected bucket index to find the hash. - /// Basically, it use different base `1 << level` vs `1 << (level + 1)` in modulo operation based on the target - /// bucket index compared to the index of the next bucket to split. - fun bucket_index(level: u8, num_buckets: u64, hash: u64): u64 { - let index = hash % (1 << (level + 1)); - if (index < num_buckets) { - // in existing bucket - index - } else { - // in unsplitted bucket - index % (1 << level) - } - } - - /// Acquire an immutable reference to the value which `key` maps to. - /// Aborts if there is no entry for `key`. - public fun borrow(self: &SmartTable, key: K): &V { - let index = bucket_index(self.level, self.num_buckets, sip_hash_from_value(&key)); - let bucket = table_with_length::borrow(&self.buckets, index); - let i = 0; - let len = vector::length(bucket); - while (i < len) { - let entry = vector::borrow(bucket, i); - if (&entry.key == &key) { - return &entry.value - }; - i = i + 1; - }; - abort error::invalid_argument(ENOT_FOUND) - } - - /// Acquire an immutable reference to the value which `key` maps to. - /// Returns specified default value if there is no entry for `key`. - public fun borrow_with_default(self: &SmartTable, key: K, default: &V): &V { - if (!contains(self, copy key)) { - default - } else { - borrow(self, copy key) - } - } - - /// Acquire a mutable reference to the value which `key` maps to. - /// Aborts if there is no entry for `key`. - public fun borrow_mut(self: &mut SmartTable, key: K): &mut V { - let index = bucket_index(self.level, self.num_buckets, sip_hash_from_value(&key)); - let bucket = table_with_length::borrow_mut(&mut self.buckets, index); - let i = 0; - let len = vector::length(bucket); - while (i < len) { - let entry = vector::borrow_mut(bucket, i); - if (&entry.key == &key) { - return &mut entry.value - }; - i = i + 1; - }; - abort error::invalid_argument(ENOT_FOUND) - } - - /// Acquire a mutable reference to the value which `key` maps to. - /// Insert the pair (`key`, `default`) first if there is no entry for `key`. - public fun borrow_mut_with_default( - self: &mut SmartTable, - key: K, - default: V - ): &mut V { - if (!contains(self, copy key)) { - add(self, copy key, default) - }; - borrow_mut(self, key) - } - - /// Returns true iff `table` contains an entry for `key`. - public fun contains(self: &SmartTable, key: K): bool { - let hash = sip_hash_from_value(&key); - let index = bucket_index(self.level, self.num_buckets, hash); - let bucket = table_with_length::borrow(&self.buckets, index); - vector::any(bucket, | entry | { - let e: &Entry = entry; - e.hash == hash && &e.key == &key - }) - } - - /// Remove from `table` and return the value which `key` maps to. - /// Aborts if there is no entry for `key`. - public fun remove(self: &mut SmartTable, key: K): V { - let index = bucket_index(self.level, self.num_buckets, sip_hash_from_value(&key)); - let bucket = table_with_length::borrow_mut(&mut self.buckets, index); - let i = 0; - let len = vector::length(bucket); - while (i < len) { - let entry = vector::borrow(bucket, i); - if (&entry.key == &key) { - let Entry { hash: _, key: _, value } = vector::swap_remove(bucket, i); - self.size = self.size - 1; - return value - }; - i = i + 1; - }; - abort error::invalid_argument(ENOT_FOUND) - } - - /// Insert the pair (`key`, `value`) if there is no entry for `key`. - /// update the value of the entry for `key` to `value` otherwise - public fun upsert(self: &mut SmartTable, key: K, value: V) { - if (!contains(self, copy key)) { - add(self, copy key, value) - } else { - let ref = borrow_mut(self, key); - *ref = value; - }; - } - - /// Returns the length of the table, i.e. the number of entries. - public fun length(self: &SmartTable): u64 { - self.size - } - - /// Return the load factor of the hashtable. - public fun load_factor(self: &SmartTable): u64 { - self.size * 100 / self.num_buckets / self.target_bucket_size - } - - /// Update `split_load_threshold`. - public fun update_split_load_threshold(self: &mut SmartTable, split_load_threshold: u8) { - assert!( - split_load_threshold <= 100 && split_load_threshold > 0, - error::invalid_argument(EINVALID_LOAD_THRESHOLD_PERCENT) - ); - self.split_load_threshold = split_load_threshold; - } - - /// Update `target_bucket_size`. - public fun update_target_bucket_size(self: &mut SmartTable, target_bucket_size: u64) { - assert!(target_bucket_size > 0, error::invalid_argument(EINVALID_TARGET_BUCKET_SIZE)); - self.target_bucket_size = target_bucket_size; - } - - /// Apply the function to a reference of each key-value pair in the table. - public inline fun for_each_ref(self: &SmartTable, f: |&K, &V|) { - let i = 0; - while (i < aptos_std::smart_table::num_buckets(self)) { - vector::for_each_ref( - aptos_std::table_with_length::borrow(aptos_std::smart_table::borrow_buckets(self), i), - |elem| { - let (key, value) = aptos_std::smart_table::borrow_kv(elem); - f(key, value) - } - ); - i = i + 1; - } - } - - /// Apply the function to a mutable reference of each key-value pair in the table. - public inline fun for_each_mut(self: &mut SmartTable, f: |&K, &mut V|) { - let i = 0; - while (i < aptos_std::smart_table::num_buckets(self)) { - vector::for_each_mut( - table_with_length::borrow_mut(aptos_std::smart_table::borrow_buckets_mut(self), i), - |elem| { - let (key, value) = aptos_std::smart_table::borrow_kv_mut(elem); - f(key, value) - } - ); - i = i + 1; - }; - } - - /// Map the function over the references of key-value pairs in the table without modifying it. - public inline fun map_ref( - self: &SmartTable, - f: |&V1|V2 - ): SmartTable { - let new_table = new(); - for_each_ref(self, |key, value| add(&mut new_table, *key, f(value))); - new_table - } - - /// Return true if any key-value pair in the table satisfies the predicate. - public inline fun any( - self: &SmartTable, - p: |&K, &V|bool - ): bool { - let found = false; - let i = 0; - while (i < aptos_std::smart_table::num_buckets(self)) { - found = vector::any(table_with_length::borrow(aptos_std::smart_table::borrow_buckets(self), i), |elem| { - let (key, value) = aptos_std::smart_table::borrow_kv(elem); - p(key, value) - }); - if (found) break; - i = i + 1; - }; - found - } - - // Helper functions to circumvent the scope issue of inline functions. - public fun borrow_kv(self: &Entry): (&K, &V) { - (&self.key, &self.value) - } - - public fun borrow_kv_mut(self: &mut Entry): (&mut K, &mut V) { - (&mut self.key, &mut self.value) - } - - public fun num_buckets(self: &SmartTable): u64 { - self.num_buckets - } - - public fun borrow_buckets(self: &SmartTable): &TableWithLength>> { - &self.buckets - } - - public fun borrow_buckets_mut(self: &mut SmartTable): &mut TableWithLength>> { - &mut self.buckets - } - - - #[test] - fun smart_table_test() { - let table = new(); - let i = 0; - while (i < 200) { - add(&mut table, i, i); - i = i + 1; - }; - assert!(length(&table) == 200, 0); - i = 0; - while (i < 200) { - *borrow_mut(&mut table, i) = i * 2; - assert!(*borrow(&table, i) == i * 2, 0); - i = i + 1; - }; - i = 0; - assert!(table.num_buckets > 5, table.num_buckets); - while (i < 200) { - assert!(contains(&table, i), 0); - assert!(remove(&mut table, i) == i * 2, 0); - i = i + 1; - }; - destroy_empty(table); - } - - #[test] - fun smart_table_split_test() { - let table: SmartTable = new_with_config(1, 100, 1); - let i = 1; - let level = 0; - while (i <= 256) { - assert!(table.num_buckets == i, 0); - assert!(table.level == level, i); - add(&mut table, i, i); - i = i + 1; - if (i == 1 << (level + 1)) { - level = level + 1; - }; - }; - let i = 1; - while (i <= 256) { - assert!(*borrow(&table, i) == i, 0); - i = i + 1; - }; - assert!(table.num_buckets == 257, table.num_buckets); - assert!(load_factor(&table) == 99, 0); - assert!(length(&table) == 256, 0); - destroy(table); - } - - #[test] - fun smart_table_update_configs() { - let table = new(); - let i = 0; - while (i < 200) { - add(&mut table, i, i); - i = i + 1; - }; - assert!(length(&table) == 200, 0); - update_target_bucket_size(&mut table, 10); - update_split_load_threshold(&mut table, 50); - while (i < 400) { - add(&mut table, i, i); - i = i + 1; - }; - assert!(length(&table) == 400, 0); - i = 0; - while (i < 400) { - assert!(contains(&table, i), 0); - assert!(remove(&mut table, i) == i, 0); - i = i + 1; - }; - destroy_empty(table); - } - - #[test] - public fun smart_table_add_all_test() { - let table: SmartTable = new_with_config(1, 100, 2); - assert!(length(&table) == 0, 0); - add_all(&mut table, vector[1, 2, 3, 4, 5, 6, 7], vector[1, 2, 3, 4, 5, 6, 7]); - assert!(length(&table) == 7, 1); - let i = 1; - while (i < 8) { - assert!(*borrow(&table, i) == i, 0); - i = i + 1; - }; - i = i - 1; - while (i > 0) { - remove(&mut table, i); - i = i - 1; - }; - destroy_empty(table); - } - - #[test] - public fun smart_table_to_simple_map_test() { - let table = new(); - let i = 0; - while (i < 200) { - add(&mut table, i, i); - i = i + 1; - }; - let map = to_simple_map(&table); - assert!(simple_map::length(&map) == 200, 0); - destroy(table); - } - - #[test] - public fun smart_table_clear_test() { - let table = new(); - let i = 0u64; - while (i < 200) { - add(&mut table, i, i); - i = i + 1; - }; - clear(&mut table); - let i = 0; - while (i < 200) { - add(&mut table, i, i); - i = i + 1; - }; - assert!(table.size == 200, 0); - destroy(table); - } - - #[test] - fun test_keys() { - let i = 0; - let table = new(); - let expected_keys = vector[]; - let keys = keys(&table); - assert!(vector::is_empty(&keys), 0); - let starting_bucket_index = 0; - let starting_vector_index = 0; - let (keys, starting_bucket_index_r, starting_vector_index_r) = keys_paginated( - &table, - starting_bucket_index, - starting_vector_index, - 0 - ); - assert!(starting_bucket_index_r == option::some(starting_bucket_index), 0); - assert!(starting_vector_index_r == option::some(starting_vector_index), 0); - assert!(vector::is_empty(&keys), 0); - while (i < 100) { - add(&mut table, i, 0); - vector::push_back(&mut expected_keys, i); - i = i + 1; - }; - let keys = keys(&table); - assert!(vector::length(&keys) == vector::length(&expected_keys), 0); - vector::for_each_ref(&keys, |e_ref| { - assert!(vector::contains(&expected_keys, e_ref), 0); - }); - let keys = vector[]; - let starting_bucket_index = 0; - let starting_vector_index = 0; - let returned_keys = vector[]; - vector::length(&returned_keys); // To eliminate erroneous compiler "unused" warning - loop { - (returned_keys, starting_bucket_index_r, starting_vector_index_r) = keys_paginated( - &table, - starting_bucket_index, - starting_vector_index, - 15 - ); - vector::append(&mut keys, returned_keys); - if ( - starting_bucket_index_r == option::none() || - starting_vector_index_r == option::none() - ) break; - starting_bucket_index = option::destroy_some(starting_bucket_index_r); - starting_vector_index = option::destroy_some(starting_vector_index_r); - }; - assert!(vector::length(&keys) == vector::length(&expected_keys), 0); - vector::for_each_ref(&keys, |e_ref| { - assert!(vector::contains(&expected_keys, e_ref), 0); - }); - destroy(table); - table = new(); - add(&mut table, 1, 0); - add(&mut table, 2, 0); - (keys, starting_bucket_index_r, starting_vector_index_r) = keys_paginated(&table, 0, 0, 1); - (returned_keys, starting_bucket_index_r, starting_vector_index_r) = keys_paginated( - &table, - option::destroy_some(starting_bucket_index_r), - option::destroy_some(starting_vector_index_r), - 1, - ); - vector::append(&mut keys, returned_keys); - assert!(keys == vector[1, 2] || keys == vector[2, 1], 0); - assert!(starting_bucket_index_r == option::none(), 0); - assert!(starting_vector_index_r == option::none(), 0); - (keys, starting_bucket_index_r, starting_vector_index_r) = keys_paginated(&table, 0, 0, 0); - assert!(keys == vector[], 0); - assert!(starting_bucket_index_r == option::some(0), 0); - assert!(starting_vector_index_r == option::some(0), 0); - destroy(table); - } - - #[test] - fun test_keys_corner_cases() { - let table = new(); - let expected_keys = vector[]; - for (i in 0..100) { - add(&mut table, i, 0); - vector::push_back(&mut expected_keys, i); - }; - let (keys, starting_bucket_index_r, starting_vector_index_r) = - keys_paginated(&table, 0, 0, 5); // Both indices 0. - assert!(vector::length(&keys) == 5, 0); - vector::for_each_ref(&keys, |e_ref| { - assert!(vector::contains(&expected_keys, e_ref), 0); - }); - let starting_bucket_index = option::destroy_some(starting_bucket_index_r); - let starting_vector_index = option::destroy_some(starting_vector_index_r); - (keys, starting_bucket_index_r, starting_vector_index_r) = keys_paginated( - &table, - starting_bucket_index, - starting_vector_index, - 0, // Number of keys 0. - ); - assert!(keys == vector[], 0); - assert!(starting_bucket_index_r == option::some(starting_bucket_index), 0); - assert!(starting_vector_index_r == option::some(starting_vector_index), 0); - (keys, starting_bucket_index_r, starting_vector_index_r) = keys_paginated( - &table, - starting_bucket_index, - 0, // Vector index 0. - 50, - ); - assert!(vector::length(&keys) == 50, 0); - vector::for_each_ref(&keys, |e_ref| { - assert!(vector::contains(&expected_keys, e_ref), 0); - }); - let starting_bucket_index = option::destroy_some(starting_bucket_index_r); - assert!(starting_bucket_index > 0, 0); - assert!(option::is_some(&starting_vector_index_r), 0); - (keys, starting_bucket_index_r, starting_vector_index_r) = keys_paginated( - &table, - 0, // Bucket index 0. - 1, - 50, - ); - assert!(vector::length(&keys) == 50, 0); - vector::for_each_ref(&keys, |e_ref| { - assert!(vector::contains(&expected_keys, e_ref), 0); - }); - assert!(option::is_some(&starting_bucket_index_r), 0); - assert!(option::is_some(&starting_vector_index_r), 0); - destroy(table); - } - - #[test, expected_failure(abort_code = EINVALID_BUCKET_INDEX)] - fun test_keys_invalid_bucket_index() { - let table = new(); - add(&mut table, 1, 0); - let num_buckets = table.num_buckets; - keys_paginated(&table, num_buckets + 1, 0, 1); - destroy(table); - } - - #[test, expected_failure(abort_code = EINVALID_VECTOR_INDEX)] - fun test_keys_invalid_vector_index() { - let table = new(); - add(&mut table, 1, 0); - keys_paginated(&table, 0, 1, 1); - destroy(table); - } -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/AptosStdlib/smart_vector.move b/examples/oft-movement/build/oft/sources/dependencies/AptosStdlib/smart_vector.move deleted file mode 100644 index 5fa0d1397..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/AptosStdlib/smart_vector.move +++ /dev/null @@ -1,766 +0,0 @@ -module aptos_std::smart_vector { - use std::error; - use std::vector; - use aptos_std::big_vector::{Self, BigVector}; - use aptos_std::math64::max; - use aptos_std::type_info::size_of_val; - use std::option::{Self, Option}; - - /// Vector index is out of bounds - const EINDEX_OUT_OF_BOUNDS: u64 = 1; - /// Cannot destroy a non-empty vector - const EVECTOR_NOT_EMPTY: u64 = 2; - /// Cannot pop back from an empty vector - const EVECTOR_EMPTY: u64 = 3; - /// bucket_size cannot be 0 - const EZERO_BUCKET_SIZE: u64 = 4; - /// The length of the smart vectors are not equal. - const ESMART_VECTORS_LENGTH_MISMATCH: u64 = 0x20005; - - /// A Scalable vector implementation based on tables, Ts are grouped into buckets with `bucket_size`. - /// The option wrapping BigVector saves space in the metadata associated with BigVector when smart_vector is - /// so small that inline_vec vector can hold all the data. - struct SmartVector has store { - inline_vec: vector, - big_vec: Option>, - inline_capacity: Option, - bucket_size: Option, - } - - /// Regular Vector API - - /// Create an empty vector using default logic to estimate `inline_capacity` and `bucket_size`, which may be - /// inaccurate. - /// This is exactly the same as empty() but is more standardized as all other data structures have new(). - public fun new(): SmartVector { - empty() - } - - #[deprecated] - /// Create an empty vector using default logic to estimate `inline_capacity` and `bucket_size`, which may be - /// inaccurate. - public fun empty(): SmartVector { - SmartVector { - inline_vec: vector[], - big_vec: option::none(), - inline_capacity: option::none(), - bucket_size: option::none(), - } - } - - /// Create an empty vector with customized config. - /// When inline_capacity = 0, SmartVector degrades to a wrapper of BigVector. - public fun empty_with_config(inline_capacity: u64, bucket_size: u64): SmartVector { - assert!(bucket_size > 0, error::invalid_argument(EZERO_BUCKET_SIZE)); - SmartVector { - inline_vec: vector[], - big_vec: option::none(), - inline_capacity: option::some(inline_capacity), - bucket_size: option::some(bucket_size), - } - } - - /// Create a vector of length 1 containing the passed in T. - public fun singleton(element: T): SmartVector { - let v = empty(); - push_back(&mut v, element); - v - } - - /// Destroy the vector `self`. - /// Aborts if `self` is not empty. - public fun destroy_empty(self: SmartVector) { - assert!(is_empty(&self), error::invalid_argument(EVECTOR_NOT_EMPTY)); - let SmartVector { inline_vec, big_vec, inline_capacity: _, bucket_size: _ } = self; - vector::destroy_empty(inline_vec); - option::destroy_none(big_vec); - } - - /// Destroy a vector completely when T has `drop`. - public fun destroy(self: SmartVector) { - clear(&mut self); - destroy_empty(self); - } - - /// Clear a vector completely when T has `drop`. - public fun clear(self: &mut SmartVector) { - self.inline_vec = vector[]; - if (option::is_some(&self.big_vec)) { - big_vector::destroy(option::extract(&mut self.big_vec)); - } - } - - /// Acquire an immutable reference to the `i`th T of the vector `self`. - /// Aborts if `i` is out of bounds. - public fun borrow(self: &SmartVector, i: u64): &T { - assert!(i < length(self), error::invalid_argument(EINDEX_OUT_OF_BOUNDS)); - let inline_len = vector::length(&self.inline_vec); - if (i < inline_len) { - vector::borrow(&self.inline_vec, i) - } else { - big_vector::borrow(option::borrow(&self.big_vec), i - inline_len) - } - } - - /// Return a mutable reference to the `i`th T in the vector `self`. - /// Aborts if `i` is out of bounds. - public fun borrow_mut(self: &mut SmartVector, i: u64): &mut T { - assert!(i < length(self), error::invalid_argument(EINDEX_OUT_OF_BOUNDS)); - let inline_len = vector::length(&self.inline_vec); - if (i < inline_len) { - vector::borrow_mut(&mut self.inline_vec, i) - } else { - big_vector::borrow_mut(option::borrow_mut(&mut self.big_vec), i - inline_len) - } - } - - /// Empty and destroy the other vector, and push each of the Ts in the other vector onto the self vector in the - /// same order as they occurred in other. - /// Disclaimer: This function may be costly. Use it at your own discretion. - public fun append(self: &mut SmartVector, other: SmartVector) { - let other_len = length(&other); - let half_other_len = other_len / 2; - let i = 0; - while (i < half_other_len) { - push_back(self, swap_remove(&mut other, i)); - i = i + 1; - }; - while (i < other_len) { - push_back(self, pop_back(&mut other)); - i = i + 1; - }; - destroy_empty(other); - } - - /// Add multiple values to the vector at once. - public fun add_all(self: &mut SmartVector, vals: vector) { - vector::for_each(vals, |val| { push_back(self, val); }) - } - - /// Convert a smart vector to a native vector, which is supposed to be called mostly by view functions to get an - /// atomic view of the whole vector. - /// Disclaimer: This function may be costly as the smart vector may be huge in size. Use it at your own discretion. - public fun to_vector(self: &SmartVector): vector { - let res = self.inline_vec; - if (option::is_some(&self.big_vec)) { - let big_vec = option::borrow(&self.big_vec); - vector::append(&mut res, big_vector::to_vector(big_vec)); - }; - res - } - - /// Add T `val` to the end of the vector `self`. It grows the buckets when the current buckets are full. - /// This operation will cost more gas when it adds new bucket. - public fun push_back(self: &mut SmartVector, val: T) { - let len = length(self); - let inline_len = vector::length(&self.inline_vec); - if (len == inline_len) { - let bucket_size = if (option::is_some(&self.inline_capacity)) { - if (len < *option::borrow(&self.inline_capacity)) { - vector::push_back(&mut self.inline_vec, val); - return - }; - *option::borrow(&self.bucket_size) - } else { - let val_size = size_of_val(&val); - if (val_size * (inline_len + 1) < 150 /* magic number */) { - vector::push_back(&mut self.inline_vec, val); - return - }; - let estimated_avg_size = max((size_of_val(&self.inline_vec) + val_size) / (inline_len + 1), 1); - max(1024 /* free_write_quota */ / estimated_avg_size, 1) - }; - option::fill(&mut self.big_vec, big_vector::empty(bucket_size)); - }; - big_vector::push_back(option::borrow_mut(&mut self.big_vec), val); - } - - /// Pop an T from the end of vector `self`. It does shrink the buckets if they're empty. - /// Aborts if `self` is empty. - public fun pop_back(self: &mut SmartVector): T { - assert!(!is_empty(self), error::invalid_state(EVECTOR_EMPTY)); - let big_vec_wrapper = &mut self.big_vec; - if (option::is_some(big_vec_wrapper)) { - let big_vec = option::extract(big_vec_wrapper); - let val = big_vector::pop_back(&mut big_vec); - if (big_vector::is_empty(&big_vec)) { - big_vector::destroy_empty(big_vec) - } else { - option::fill(big_vec_wrapper, big_vec); - }; - val - } else { - vector::pop_back(&mut self.inline_vec) - } - } - - /// Remove the T at index i in the vector self and return the owned value that was previously stored at i in self. - /// All Ts occurring at indices greater than i will be shifted down by 1. Will abort if i is out of bounds. - /// Disclaimer: This function may be costly. Use it at your own discretion. - public fun remove(self: &mut SmartVector, i: u64): T { - let len = length(self); - assert!(i < len, error::invalid_argument(EINDEX_OUT_OF_BOUNDS)); - let inline_len = vector::length(&self.inline_vec); - if (i < inline_len) { - vector::remove(&mut self.inline_vec, i) - } else { - let big_vec_wrapper = &mut self.big_vec; - let big_vec = option::extract(big_vec_wrapper); - let val = big_vector::remove(&mut big_vec, i - inline_len); - if (big_vector::is_empty(&big_vec)) { - big_vector::destroy_empty(big_vec) - } else { - option::fill(big_vec_wrapper, big_vec); - }; - val - } - } - - /// Swap the `i`th T of the vector `self` with the last T and then pop the vector. - /// This is O(1), but does not preserve ordering of Ts in the vector. - /// Aborts if `i` is out of bounds. - public fun swap_remove(self: &mut SmartVector, i: u64): T { - let len = length(self); - assert!(i < len, error::invalid_argument(EINDEX_OUT_OF_BOUNDS)); - let inline_len = vector::length(&self.inline_vec); - let big_vec_wrapper = &mut self.big_vec; - let inline_vec = &mut self.inline_vec; - if (i >= inline_len) { - let big_vec = option::extract(big_vec_wrapper); - let val = big_vector::swap_remove(&mut big_vec, i - inline_len); - if (big_vector::is_empty(&big_vec)) { - big_vector::destroy_empty(big_vec) - } else { - option::fill(big_vec_wrapper, big_vec); - }; - val - } else { - if (inline_len < len) { - let big_vec = option::extract(big_vec_wrapper); - let last_from_big_vec = big_vector::pop_back(&mut big_vec); - if (big_vector::is_empty(&big_vec)) { - big_vector::destroy_empty(big_vec) - } else { - option::fill(big_vec_wrapper, big_vec); - }; - vector::push_back(inline_vec, last_from_big_vec); - }; - vector::swap_remove(inline_vec, i) - } - } - - /// Swap the Ts at the i'th and j'th indices in the vector v. Will abort if either of i or j are out of bounds - /// for self. - public fun swap(self: &mut SmartVector, i: u64, j: u64) { - if (i > j) { - return swap(self, j, i) - }; - let len = length(self); - assert!(j < len, error::invalid_argument(EINDEX_OUT_OF_BOUNDS)); - let inline_len = vector::length(&self.inline_vec); - if (i >= inline_len) { - big_vector::swap(option::borrow_mut(&mut self.big_vec), i - inline_len, j - inline_len); - } else if (j < inline_len) { - vector::swap(&mut self.inline_vec, i, j); - } else { - let big_vec = option::borrow_mut(&mut self.big_vec); - let inline_vec = &mut self.inline_vec; - let element_i = vector::swap_remove(inline_vec, i); - let element_j = big_vector::swap_remove(big_vec, j - inline_len); - vector::push_back(inline_vec, element_j); - vector::swap(inline_vec, i, inline_len - 1); - big_vector::push_back(big_vec, element_i); - big_vector::swap(big_vec, j - inline_len, len - inline_len - 1); - } - } - - /// Reverse the order of the Ts in the vector self in-place. - /// Disclaimer: This function may be costly. Use it at your own discretion. - public fun reverse(self: &mut SmartVector) { - let inline_len = vector::length(&self.inline_vec); - let i = 0; - let new_inline_vec = vector[]; - // Push the last `inline_len` Ts into a temp vector. - while (i < inline_len) { - vector::push_back(&mut new_inline_vec, pop_back(self)); - i = i + 1; - }; - vector::reverse(&mut new_inline_vec); - // Reverse the big_vector left if exists. - if (option::is_some(&self.big_vec)) { - big_vector::reverse(option::borrow_mut(&mut self.big_vec)); - }; - // Mem::swap the two vectors. - let temp_vec = vector[]; - while (!vector::is_empty(&mut self.inline_vec)) { - vector::push_back(&mut temp_vec, vector::pop_back(&mut self.inline_vec)); - }; - vector::reverse(&mut temp_vec); - while (!vector::is_empty(&mut new_inline_vec)) { - vector::push_back(&mut self.inline_vec, vector::pop_back(&mut new_inline_vec)); - }; - vector::destroy_empty(new_inline_vec); - // Push the rest Ts originally left in inline_vector back to the end of the smart vector. - while (!vector::is_empty(&mut temp_vec)) { - push_back(self, vector::pop_back(&mut temp_vec)); - }; - vector::destroy_empty(temp_vec); - } - - /// Return `(true, i)` if `val` is in the vector `self` at index `i`. - /// Otherwise, returns `(false, 0)`. - /// Disclaimer: This function may be costly. Use it at your own discretion. - public fun index_of(self: &SmartVector, val: &T): (bool, u64) { - let (found, i) = vector::index_of(&self.inline_vec, val); - if (found) { - (true, i) - } else if (option::is_some(&self.big_vec)) { - let (found, i) = big_vector::index_of(option::borrow(&self.big_vec), val); - (found, i + vector::length(&self.inline_vec)) - } else { - (false, 0) - } - } - - /// Return true if `val` is in the vector `self`. - /// Disclaimer: This function may be costly. Use it at your own discretion. - public fun contains(self: &SmartVector, val: &T): bool { - if (is_empty(self)) return false; - let (exist, _) = index_of(self, val); - exist - } - - /// Return the length of the vector. - public fun length(self: &SmartVector): u64 { - vector::length(&self.inline_vec) + if (option::is_none(&self.big_vec)) { - 0 - } else { - big_vector::length(option::borrow(&self.big_vec)) - } - } - - /// Return `true` if the vector `self` has no Ts and `false` otherwise. - public fun is_empty(self: &SmartVector): bool { - length(self) == 0 - } - - /// Apply the function to each T in the vector, consuming it. - public inline fun for_each(self: SmartVector, f: |T|) { - aptos_std::smart_vector::reverse(&mut self); // We need to reverse the vector to consume it efficiently - aptos_std::smart_vector::for_each_reverse(self, |e| f(e)); - } - - /// Apply the function to each T in the vector, consuming it. - public inline fun for_each_reverse(self: SmartVector, f: |T|) { - let len = aptos_std::smart_vector::length(&self); - while (len > 0) { - f(aptos_std::smart_vector::pop_back(&mut self)); - len = len - 1; - }; - aptos_std::smart_vector::destroy_empty(self) - } - - /// Apply the function to a reference of each T in the vector. - public inline fun for_each_ref(self: &SmartVector, f: |&T|) { - let i = 0; - let len = aptos_std::smart_vector::length(self); - while (i < len) { - f(aptos_std::smart_vector::borrow(self, i)); - i = i + 1 - } - } - - /// Apply the function to a mutable reference to each T in the vector. - public inline fun for_each_mut(self: &mut SmartVector, f: |&mut T|) { - let i = 0; - let len = aptos_std::smart_vector::length(self); - while (i < len) { - f(aptos_std::smart_vector::borrow_mut(self, i)); - i = i + 1 - } - } - - /// Apply the function to a reference of each T in the vector with its index. - public inline fun enumerate_ref(self: &SmartVector, f: |u64, &T|) { - let i = 0; - let len = aptos_std::smart_vector::length(self); - while (i < len) { - f(i, aptos_std::smart_vector::borrow(self, i)); - i = i + 1; - }; - } - - /// Apply the function to a mutable reference of each T in the vector with its index. - public inline fun enumerate_mut(self: &mut SmartVector, f: |u64, &mut T|) { - let i = 0; - let len = length(self); - while (i < len) { - f(i, borrow_mut(self, i)); - i = i + 1; - }; - } - - /// Fold the function over the Ts. For example, `fold(vector[1,2,3], 0, f)` will execute - /// `f(f(f(0, 1), 2), 3)` - public inline fun fold( - self: SmartVector, - init: Accumulator, - f: |Accumulator, T|Accumulator - ): Accumulator { - let accu = init; - aptos_std::smart_vector::for_each(self, |elem| accu = f(accu, elem)); - accu - } - - /// Fold right like fold above but working right to left. For example, `fold(vector[1,2,3], 0, f)` will execute - /// `f(1, f(2, f(3, 0)))` - public inline fun foldr( - self: SmartVector, - init: Accumulator, - f: |T, Accumulator|Accumulator - ): Accumulator { - let accu = init; - aptos_std::smart_vector::for_each_reverse(self, |elem| accu = f(elem, accu)); - accu - } - - /// Map the function over the references of the Ts of the vector, producing a new vector without modifying the - /// original vector. - public inline fun map_ref( - self: &SmartVector, - f: |&T1|T2 - ): SmartVector { - let result = aptos_std::smart_vector::new(); - aptos_std::smart_vector::for_each_ref(self, |elem| aptos_std::smart_vector::push_back(&mut result, f(elem))); - result - } - - /// Map the function over the Ts of the vector, producing a new vector. - public inline fun map( - self: SmartVector, - f: |T1|T2 - ): SmartVector { - let result = aptos_std::smart_vector::new(); - aptos_std::smart_vector::for_each(self, |elem| push_back(&mut result, f(elem))); - result - } - - /// Filter the vector using the boolean function, removing all Ts for which `p(e)` is not true. - public inline fun filter( - self: SmartVector, - p: |&T|bool - ): SmartVector { - let result = aptos_std::smart_vector::new(); - aptos_std::smart_vector::for_each(self, |elem| { - if (p(&elem)) aptos_std::smart_vector::push_back(&mut result, elem); - }); - result - } - - public inline fun zip(self: SmartVector, v2: SmartVector, f: |T1, T2|) { - // We need to reverse the vectors to consume it efficiently - aptos_std::smart_vector::reverse(&mut self); - aptos_std::smart_vector::reverse(&mut v2); - aptos_std::smart_vector::zip_reverse(self, v2, |e1, e2| f(e1, e2)); - } - - /// Apply the function to each pair of elements in the two given vectors in the reverse order, consuming them. - /// This errors out if the vectors are not of the same length. - public inline fun zip_reverse( - self: SmartVector, - v2: SmartVector, - f: |T1, T2|, - ) { - let len = aptos_std::smart_vector::length(&self); - // We can't use the constant ESMART_VECTORS_LENGTH_MISMATCH here as all calling code would then need to define it - // due to how inline functions work. - assert!(len == aptos_std::smart_vector::length(&v2), 0x20005); - while (len > 0) { - f(aptos_std::smart_vector::pop_back(&mut self), aptos_std::smart_vector::pop_back(&mut v2)); - len = len - 1; - }; - aptos_std::smart_vector::destroy_empty(self); - aptos_std::smart_vector::destroy_empty(v2); - } - - /// Apply the function to the references of each pair of elements in the two given vectors. - /// This errors out if the vectors are not of the same length. - public inline fun zip_ref( - self: &SmartVector, - v2: &SmartVector, - f: |&T1, &T2|, - ) { - let len = aptos_std::smart_vector::length(self); - // We can't use the constant ESMART_VECTORS_LENGTH_MISMATCH here as all calling code would then need to define it - // due to how inline functions work. - assert!(len == aptos_std::smart_vector::length(v2), 0x20005); - let i = 0; - while (i < len) { - f(aptos_std::smart_vector::borrow(self, i), aptos_std::smart_vector::borrow(v2, i)); - i = i + 1 - } - } - - /// Apply the function to mutable references to each pair of elements in the two given vectors. - /// This errors out if the vectors are not of the same length. - public inline fun zip_mut( - self: &mut SmartVector, - v2: &mut SmartVector, - f: |&mut T1, &mut T2|, - ) { - let i = 0; - let len = aptos_std::smart_vector::length(self); - // We can't use the constant ESMART_VECTORS_LENGTH_MISMATCH here as all calling code would then need to define it - // due to how inline functions work. - assert!(len == aptos_std::smart_vector::length(v2), 0x20005); - while (i < len) { - f(aptos_std::smart_vector::borrow_mut(self, i), aptos_std::smart_vector::borrow_mut(v2, i)); - i = i + 1 - } - } - - /// Map the function over the element pairs of the two vectors, producing a new vector. - public inline fun zip_map( - self: SmartVector, - v2: SmartVector, - f: |T1, T2|NewT - ): SmartVector { - // We can't use the constant ESMART_VECTORS_LENGTH_MISMATCH here as all calling code would then need to define it - // due to how inline functions work. - assert!(aptos_std::smart_vector::length(&self) == aptos_std::smart_vector::length(&v2), 0x20005); - - let result = aptos_std::smart_vector::new(); - aptos_std::smart_vector::zip(self, v2, |e1, e2| push_back(&mut result, f(e1, e2))); - result - } - - /// Map the function over the references of the element pairs of two vectors, producing a new vector from the return - /// values without modifying the original vectors. - public inline fun zip_map_ref( - self: &SmartVector, - v2: &SmartVector, - f: |&T1, &T2|NewT - ): SmartVector { - // We can't use the constant ESMART_VECTORS_LENGTH_MISMATCH here as all calling code would then need to define it - // due to how inline functions work. - assert!(aptos_std::smart_vector::length(self) == aptos_std::smart_vector::length(v2), 0x20005); - - let result = aptos_std::smart_vector::new(); - aptos_std::smart_vector::zip_ref(self, v2, |e1, e2| push_back(&mut result, f(e1, e2))); - result - } - - #[test] - fun smart_vector_test() { - let v = empty(); - let i = 0; - while (i < 100) { - push_back(&mut v, i); - i = i + 1; - }; - let j = 0; - while (j < 100) { - let val = borrow(&v, j); - assert!(*val == j, 0); - j = j + 1; - }; - while (i > 0) { - i = i - 1; - let (exist, index) = index_of(&v, &i); - let j = pop_back(&mut v); - assert!(exist, 0); - assert!(index == i, 0); - assert!(j == i, 0); - }; - while (i < 100) { - push_back(&mut v, i); - i = i + 1; - }; - let last_index = length(&v) - 1; - assert!(swap_remove(&mut v, last_index) == 99, 0); - assert!(swap_remove(&mut v, 0) == 0, 0); - while (length(&v) > 0) { - // the vector is always [N, 1, 2, ... N-1] with repetitive swap_remove(&mut v, 0) - let expected = length(&v); - let val = swap_remove(&mut v, 0); - assert!(val == expected, 0); - }; - destroy_empty(v); - } - - #[test] - fun smart_vector_append_edge_case_test() { - let v1 = empty(); - let v2 = singleton(1u64); - let v3 = empty(); - let v4 = empty(); - append(&mut v3, v4); - assert!(length(&v3) == 0, 0); - append(&mut v2, v3); - assert!(length(&v2) == 1, 0); - append(&mut v1, v2); - assert!(length(&v1) == 1, 0); - destroy(v1); - } - - #[test] - fun smart_vector_append_test() { - let v1 = empty(); - let v2 = empty(); - let i = 0; - while (i < 7) { - push_back(&mut v1, i); - i = i + 1; - }; - while (i < 25) { - push_back(&mut v2, i); - i = i + 1; - }; - append(&mut v1, v2); - assert!(length(&v1) == 25, 0); - i = 0; - while (i < 25) { - assert!(*borrow(&v1, i) == i, 0); - i = i + 1; - }; - destroy(v1); - } - - #[test] - fun smart_vector_remove_test() { - let v = empty(); - let i = 0u64; - while (i < 101) { - push_back(&mut v, i); - i = i + 1; - }; - let inline_len = vector::length(&v.inline_vec); - remove(&mut v, 100); - remove(&mut v, 90); - remove(&mut v, 80); - remove(&mut v, 70); - remove(&mut v, 60); - remove(&mut v, 50); - remove(&mut v, 40); - remove(&mut v, 30); - remove(&mut v, 20); - assert!(vector::length(&v.inline_vec) == inline_len, 0); - remove(&mut v, 10); - assert!(vector::length(&v.inline_vec) + 1 == inline_len, 0); - remove(&mut v, 0); - assert!(vector::length(&v.inline_vec) + 2 == inline_len, 0); - assert!(length(&v) == 90, 0); - - let index = 0; - i = 0; - while (i < 101) { - if (i % 10 != 0) { - assert!(*borrow(&v, index) == i, 0); - index = index + 1; - }; - i = i + 1; - }; - destroy(v); - } - - #[test] - fun smart_vector_reverse_test() { - let v = empty(); - let i = 0u64; - while (i < 10) { - push_back(&mut v, i); - i = i + 1; - }; - reverse(&mut v); - let k = 0; - while (k < 10) { - assert!(*vector::borrow(&v.inline_vec, k) == 9 - k, 0); - k = k + 1; - }; - while (i < 100) { - push_back(&mut v, i); - i = i + 1; - }; - while (!vector::is_empty(&v.inline_vec)) { - remove(&mut v, 0); - }; - reverse(&mut v); - i = 0; - let len = length(&v); - while (i + 1 < len) { - assert!( - *big_vector::borrow(option::borrow(&v.big_vec), i) == *big_vector::borrow( - option::borrow(&v.big_vec), - i + 1 - ) + 1, - 0 - ); - i = i + 1; - }; - destroy(v); - } - - #[test] - fun smart_vector_add_all_test() { - let v = empty_with_config(1, 2); - add_all(&mut v, vector[1, 2, 3, 4, 5, 6]); - assert!(length(&v) == 6, 0); - let i = 0; - while (i < 6) { - assert!(*borrow(&v, i) == i + 1, 0); - i = i + 1; - }; - destroy(v); - } - - #[test] - fun smart_vector_to_vector_test() { - let v1 = empty_with_config(7, 11); - let i = 0; - while (i < 100) { - push_back(&mut v1, i); - i = i + 1; - }; - let v2 = to_vector(&v1); - let j = 0; - while (j < 100) { - assert!(*vector::borrow(&v2, j) == j, 0); - j = j + 1; - }; - destroy(v1); - } - - #[test] - fun smart_vector_swap_test() { - let v = empty(); - let i = 0; - while (i < 101) { - push_back(&mut v, i); - i = i + 1; - }; - i = 0; - while (i < 51) { - swap(&mut v, i, 100 - i); - i = i + 1; - }; - i = 0; - while (i < 101) { - assert!(*borrow(&v, i) == 100 - i, 0); - i = i + 1; - }; - destroy(v); - } - - #[test] - fun smart_vector_index_of_test() { - let v = empty(); - let i = 0; - while (i < 100) { - push_back(&mut v, i); - let (found, idx) = index_of(&mut v, &i); - assert!(found && idx == i, 0); - i = i + 1; - }; - destroy(v); - } -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/AptosStdlib/string_utils.move b/examples/oft-movement/build/oft/sources/dependencies/AptosStdlib/string_utils.move deleted file mode 100644 index 10fbfd884..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/AptosStdlib/string_utils.move +++ /dev/null @@ -1,148 +0,0 @@ -/// A module for formatting move values as strings. -module aptos_std::string_utils { - use std::string::String; - - /// The number of values in the list does not match the number of "{}" in the format string. - const EARGS_MISMATCH: u64 = 1; - /// The format string is not valid. - const EINVALID_FORMAT: u64 = 2; - /// Formatting is not possible because the value contains delayed fields such as aggregators. - const EUNABLE_TO_FORMAT_DELAYED_FIELD: u64 = 3; - - /// Format a move value as a human readable string, - /// eg. `to_string(&1u64) == "1"`, `to_string(&false) == "false"`, `to_string(&@0x1) == "@0x1"`. - /// For vectors and structs the format is similar to rust, eg. - /// `to_string(&cons(1,2)) == "Cons { car: 1, cdr: 2 }"` and `to_string(&vector[1, 2, 3]) == "[ 1, 2, 3 ]"` - /// For vectors of u8 the output is hex encoded, eg. `to_string(&vector[1u8, 2u8, 3u8]) == "0x010203"` - /// For std::string::String the output is the string itself including quotes, eg. - /// `to_string(&std::string::utf8(b"My string")) == "\"My string\""` - public fun to_string(s: &T): String { - native_format(s, false, false, true, false) - } - - /// Format addresses as 64 zero-padded hexadecimals. - public fun to_string_with_canonical_addresses(s: &T): String { - native_format(s, false, true, true, false) - } - - /// Format emitting integers with types ie. 6u8 or 128u32. - public fun to_string_with_integer_types(s: &T): String { - native_format(s, false, true, true, false) - } - - /// Format vectors and structs with newlines and indentation. - public fun debug_string(s: &T): String { - native_format(s, true, false, false, false) - } - - /// Formatting with a rust-like format string, eg. `format2(&b"a = {}, b = {}", 1, 2) == "a = 1, b = 2"`. - public fun format1(fmt: &vector, a: T0): String { - native_format_list(fmt, &list1(a)) - } - public fun format2(fmt: &vector, a: T0, b: T1): String { - native_format_list(fmt, &list2(a, b)) - } - public fun format3(fmt: &vector, a: T0, b: T1, c: T2): String { - native_format_list(fmt, &list3(a, b, c)) - } - public fun format4(fmt: &vector, a: T0, b: T1, c: T2, d: T3): String { - native_format_list(fmt, &list4(a, b, c, d)) - } - - // Helper struct to allow passing a generic heterogeneous list of values to native_format_list. - struct Cons has copy, drop, store { - car: T, - cdr: N, - } - - struct NIL has copy, drop, store {} - - // Create a pair of values. - fun cons(car: T, cdr: N): Cons { Cons { car, cdr } } - - // Create a nil value. - fun nil(): NIL { NIL {} } - - // Create a list of values. - inline fun list1(a: T0): Cons { cons(a, nil()) } - inline fun list2(a: T0, b: T1): Cons> { cons(a, list1(b)) } - inline fun list3(a: T0, b: T1, c: T2): Cons>> { cons(a, list2(b, c)) } - inline fun list4(a: T0, b: T1, c: T2, d: T3): Cons>>> { cons(a, list3(b, c, d)) } - - // Native functions - native fun native_format(s: &T, type_tag: bool, canonicalize: bool, single_line: bool, include_int_types: bool): String; - native fun native_format_list(fmt: &vector, val: &T): String; - - #[test] - fun test_format() { - assert!(to_string(&1u64) == std::string::utf8(b"1"), 1); - assert!(to_string(&false) == std::string::utf8(b"false"), 2); - assert!(to_string(&1u256) == std::string::utf8(b"1"), 3); - assert!(to_string(&vector[1, 2, 3]) == std::string::utf8(b"[ 1, 2, 3 ]"), 4); - assert!(to_string(&cons(std::string::utf8(b"My string"),2)) == std::string::utf8(b"Cons { car: \"My string\", cdr: 2 }"), 5); - assert!(to_string(&std::option::none()) == std::string::utf8(b"None"), 6); - assert!(to_string(&std::option::some(1)) == std::string::utf8(b"Some(1)"), 7); - } - - #[test] - fun test_format_list() { - let s = format3(&b"a = {} b = {} c = {}", 1, 2, std::string::utf8(b"My string")); - assert!(s == std::string::utf8(b"a = 1 b = 2 c = \"My string\""), 1); - } - - #[test] - #[expected_failure(abort_code = EARGS_MISMATCH)] - fun test_format_list_to_many_vals() { - format4(&b"a = {} b = {} c = {}", 1, 2, 3, 4); - } - - #[test] - #[expected_failure(abort_code = EARGS_MISMATCH)] - fun test_format_list_not_enough_vals() { - format2(&b"a = {} b = {} c = {}", 1, 2); - } - - #[test] - #[expected_failure(abort_code = EARGS_MISMATCH)] - fun test_format_list_not_valid_nil() { - let l = cons(1, cons(2, cons(3, 4))); - native_format_list(&b"a = {} b = {} c = {}", &l); - } - - /// #[test_only] - struct FakeCons has copy, drop, store { - car: T, - cdr: N, - } - - #[test] - #[expected_failure(abort_code = EARGS_MISMATCH)] - fun test_format_list_not_valid_list() { - let l = cons(1, FakeCons { car: 2, cdr: cons(3, nil())}); - native_format_list(&b"a = {} b = {} c = {}", &l); - } - - #[test] - #[expected_failure(abort_code = EINVALID_FORMAT)] - fun test_format_unclosed_braces() { - format3(&b"a = {} b = {} c = {", 1, 2 ,3); - } - - #[test] - #[expected_failure(abort_code = EINVALID_FORMAT)] - fun test_format_unclosed_braces_2() { - format3(&b"a = {} b = { c = {}", 1, 2, 3); - } - - #[test] - #[expected_failure(abort_code = EINVALID_FORMAT)] - fun test_format_unopened_braces() { - format3(&b"a = } b = {} c = {}", 1, 2, 3); - } - - #[test] - fun test_format_escape_braces_works() { - let s = format3(&b"{{a = {} b = {} c = {}}}", 1, 2, 3); - assert!(s == std::string::utf8(b"{a = 1 b = 2 c = 3}"), 1); - } -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/AptosStdlib/table.move b/examples/oft-movement/build/oft/sources/dependencies/AptosStdlib/table.move deleted file mode 100644 index f96936f29..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/AptosStdlib/table.move +++ /dev/null @@ -1,152 +0,0 @@ -/// Type of large-scale storage tables. -/// source: https://github.com/move-language/move/blob/1b6b7513dcc1a5c866f178ca5c1e74beb2ce181e/language/extensions/move-table-extension/sources/Table.move#L1 -/// -/// It implements the Table type which supports individual table items to be represented by -/// separate global state items. The number of items and a unique handle are tracked on the table -/// struct itself, while the operations are implemented as native functions. No traversal is provided. - -module aptos_std::table { - friend aptos_std::table_with_length; - - /// Type of tables - struct Table has store { - handle: address, - } - - /// Create a new Table. - public fun new(): Table { - Table { - handle: new_table_handle(), - } - } - - /// Add a new entry to the table. Aborts if an entry for this - /// key already exists. The entry itself is not stored in the - /// table, and cannot be discovered from it. - public fun add(self: &mut Table, key: K, val: V) { - add_box>(self, key, Box { val }) - } - - /// Acquire an immutable reference to the value which `key` maps to. - /// Aborts if there is no entry for `key`. - public fun borrow(self: &Table, key: K): &V { - &borrow_box>(self, key).val - } - - /// Acquire an immutable reference to the value which `key` maps to. - /// Returns specified default value if there is no entry for `key`. - public fun borrow_with_default(self: &Table, key: K, default: &V): &V { - if (!contains(self, copy key)) { - default - } else { - borrow(self, copy key) - } - } - - /// Acquire a mutable reference to the value which `key` maps to. - /// Aborts if there is no entry for `key`. - public fun borrow_mut(self: &mut Table, key: K): &mut V { - &mut borrow_box_mut>(self, key).val - } - - /// Acquire a mutable reference to the value which `key` maps to. - /// Insert the pair (`key`, `default`) first if there is no entry for `key`. - public fun borrow_mut_with_default(self: &mut Table, key: K, default: V): &mut V { - if (!contains(self, copy key)) { - add(self, copy key, default) - }; - borrow_mut(self, key) - } - - /// Insert the pair (`key`, `value`) if there is no entry for `key`. - /// update the value of the entry for `key` to `value` otherwise - public fun upsert(self: &mut Table, key: K, value: V) { - if (!contains(self, copy key)) { - add(self, copy key, value) - } else { - let ref = borrow_mut(self, key); - *ref = value; - }; - } - - /// Remove from `self` and return the value which `key` maps to. - /// Aborts if there is no entry for `key`. - public fun remove(self: &mut Table, key: K): V { - let Box { val } = remove_box>(self, key); - val - } - - /// Returns true iff `self` contains an entry for `key`. - public fun contains(self: &Table, key: K): bool { - contains_box>(self, key) - } - - #[test_only] - /// Testing only: allows to drop a table even if it is not empty. - public fun drop_unchecked(self: Table) { - drop_unchecked_box>(self) - } - - public(friend) fun destroy(self: Table) { - destroy_empty_box>(&self); - drop_unchecked_box>(self) - } - - #[test_only] - struct TableHolder has key { - t: Table - } - - #[test(account = @0x1)] - fun test_upsert(account: signer) { - let t = new(); - let key: u64 = 111; - let error_code: u64 = 1; - assert!(!contains(&t, key), error_code); - upsert(&mut t, key, 12); - assert!(*borrow(&t, key) == 12, error_code); - upsert(&mut t, key, 23); - assert!(*borrow(&t, key) == 23, error_code); - - move_to(&account, TableHolder { t }); - } - - #[test(account = @0x1)] - fun test_borrow_with_default(account: signer) { - let t = new(); - let key: u64 = 100; - let error_code: u64 = 1; - assert!(!contains(&t, key), error_code); - assert!(*borrow_with_default(&t, key, &12) == 12, error_code); - add(&mut t, key, 1); - assert!(*borrow_with_default(&t, key, &12) == 1, error_code); - - move_to(&account, TableHolder{ t }); - } - - // ====================================================================================================== - // Internal API - - /// Wrapper for values. Required for making values appear as resources in the implementation. - struct Box has key, drop, store { - val: V - } - - // Primitives which take as an additional type parameter `Box`, so the implementation - // can use this to determine serialization layout. - native fun new_table_handle(): address; - - native fun add_box(table: &mut Table, key: K, val: Box); - - native fun borrow_box(table: &Table, key: K): &Box; - - native fun borrow_box_mut(table: &mut Table, key: K): &mut Box; - - native fun contains_box(table: &Table, key: K): bool; - - native fun remove_box(table: &mut Table, key: K): Box; - - native fun destroy_empty_box(table: &Table); - - native fun drop_unchecked_box(table: Table); -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/AptosStdlib/table_with_length.move b/examples/oft-movement/build/oft/sources/dependencies/AptosStdlib/table_with_length.move deleted file mode 100644 index e4ca2415b..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/AptosStdlib/table_with_length.move +++ /dev/null @@ -1,141 +0,0 @@ -/// Extends Table and provides functions such as length and the ability to be destroyed - -module aptos_std::table_with_length { - use std::error; - use aptos_std::table::{Self, Table}; - - // native code raises this with error::invalid_arguments() - const EALREADY_EXISTS: u64 = 100; - // native code raises this with error::invalid_arguments() - const ENOT_FOUND: u64 = 101; - const ENOT_EMPTY: u64 = 102; - - /// Type of tables - struct TableWithLength has store { - inner: Table, - length: u64, - } - - /// Create a new Table. - public fun new(): TableWithLength { - TableWithLength { - inner: table::new(), - length: 0, - } - } - - /// Destroy a table. The table must be empty to succeed. - public fun destroy_empty(self: TableWithLength) { - assert!(self.length == 0, error::invalid_state(ENOT_EMPTY)); - let TableWithLength { inner, length: _ } = self; - table::destroy(inner) - } - - /// Add a new entry to the table. Aborts if an entry for this - /// key already exists. The entry itself is not stored in the - /// table, and cannot be discovered from it. - public fun add(self: &mut TableWithLength, key: K, val: V) { - table::add(&mut self.inner, key, val); - self.length = self.length + 1; - } - - /// Acquire an immutable reference to the value which `key` maps to. - /// Aborts if there is no entry for `key`. - public fun borrow(self: &TableWithLength, key: K): &V { - table::borrow(&self.inner, key) - } - - /// Acquire a mutable reference to the value which `key` maps to. - /// Aborts if there is no entry for `key`. - public fun borrow_mut(self: &mut TableWithLength, key: K): &mut V { - table::borrow_mut(&mut self.inner, key) - } - - /// Returns the length of the table, i.e. the number of entries. - public fun length(self: &TableWithLength): u64 { - self.length - } - - /// Returns true if this table is empty. - public fun empty(self: &TableWithLength): bool { - self.length == 0 - } - - /// Acquire a mutable reference to the value which `key` maps to. - /// Insert the pair (`key`, `default`) first if there is no entry for `key`. - public fun borrow_mut_with_default(self: &mut TableWithLength, key: K, default: V): &mut V { - if (table::contains(&self.inner, key)) { - table::borrow_mut(&mut self.inner, key) - } else { - table::add(&mut self.inner, key, default); - self.length = self.length + 1; - table::borrow_mut(&mut self.inner, key) - } - } - - /// Insert the pair (`key`, `value`) if there is no entry for `key`. - /// update the value of the entry for `key` to `value` otherwise - public fun upsert(self: &mut TableWithLength, key: K, value: V) { - if (!table::contains(&self.inner, key)) { - add(self, copy key, value) - } else { - let ref = table::borrow_mut(&mut self.inner, key); - *ref = value; - }; - } - - /// Remove from `table` and return the value which `key` maps to. - /// Aborts if there is no entry for `key`. - public fun remove(self: &mut TableWithLength, key: K): V { - let val = table::remove(&mut self.inner, key); - self.length = self.length - 1; - val - } - - /// Returns true iff `table` contains an entry for `key`. - public fun contains(self: &TableWithLength, key: K): bool { - table::contains(&self.inner, key) - } - - #[test_only] - /// Drop table even if not empty, only when testing. - public fun drop_unchecked(self: TableWithLength) { - // Unpack table with length, dropping length count but not - // inner table. - let TableWithLength{inner, length: _} = self; - table::drop_unchecked(inner); // Drop inner table. - } - - #[test] - /// Verify test-only drop functionality. - fun test_drop_unchecked() { - let table = new(); // Declare new table. - add(&mut table, true, false); // Add table entry. - drop_unchecked(table); // Drop table. - } - - #[test] - fun test_upsert() { - let t = new(); - // Table should not have key 0 yet - assert!(!contains(&t, 0), 1); - // This should insert key 0, with value 10, and length should be 1 - upsert(&mut t, 0, 10); - // Ensure the value is correctly set to 10 - assert!(*borrow(&t, 0) == 10, 1); - // Ensure the length is correctly set - assert!(length(&t) == 1, 1); - // Lets upsert the value to something else, and verify it's correct - upsert(&mut t, 0, 23); - assert!(*borrow(&t, 0) == 23, 1); - // Since key 0 already existed, the length should not have changed - assert!(length(&t) == 1, 1); - // If we upsert a non-existing key, the length should increase - upsert(&mut t, 1, 7); - assert!(length(&t) == 2, 1); - - remove(&mut t, 0); - remove(&mut t, 1); - destroy_empty(t); - } -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/AptosStdlib/type_info.move b/examples/oft-movement/build/oft/sources/dependencies/AptosStdlib/type_info.move deleted file mode 100644 index b790472fa..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/AptosStdlib/type_info.move +++ /dev/null @@ -1,351 +0,0 @@ -module aptos_std::type_info { - use std::bcs; - use std::features; - use std::string::{Self, String}; - - // - // Error codes - // - - const E_NATIVE_FUN_NOT_AVAILABLE: u64 = 1; - - // - // Structs - // - - struct TypeInfo has copy, drop, store { - account_address: address, - module_name: vector, - struct_name: vector, - } - - // - // Public functions - // - - public fun account_address(self: &TypeInfo): address { - self.account_address - } - - public fun module_name(self: &TypeInfo): vector { - self.module_name - } - - public fun struct_name(self: &TypeInfo): vector { - self.struct_name - } - - /// Returns the current chain ID, mirroring what `aptos_framework::chain_id::get()` would return, except in `#[test]` - /// functions, where this will always return `4u8` as the chain ID, whereas `aptos_framework::chain_id::get()` will - /// return whichever ID was passed to `aptos_framework::chain_id::initialize_for_test()`. - public fun chain_id(): u8 { - if (!features::aptos_stdlib_chain_id_enabled()) { - abort(std::error::invalid_state(E_NATIVE_FUN_NOT_AVAILABLE)) - }; - - chain_id_internal() - } - - /// Return the `TypeInfo` struct containing for the type `T`. - public native fun type_of(): TypeInfo; - - /// Return the human readable string for the type, including the address, module name, and any type arguments. - /// Example: 0x1::coin::CoinStore<0x1::aptos_coin::AptosCoin> - /// Or: 0x1::table::Table<0x1::string::String, 0x1::string::String> - public native fun type_name(): String; - - native fun chain_id_internal(): u8; - - /// Return the BCS size, in bytes, of value at `val_ref`. - /// - /// See the [BCS spec](https://github.com/diem/bcs) - /// - /// See `test_size_of_val()` for an analysis of common types and - /// nesting patterns, as well as `test_size_of_val_vectors()` for an - /// analysis of vector size dynamism. - public fun size_of_val(val_ref: &T): u64 { - bcs::serialized_size(val_ref) - } - - #[test_only] - use aptos_std::table::Table; - - #[test_only] - use std::vector; - - #[test] - fun test_type_of() { - let type_info = type_of(); - assert!(account_address(&type_info) == @aptos_std, 0); - assert!(module_name(&type_info) == b"type_info", 1); - assert!(struct_name(&type_info) == b"TypeInfo", 2); - } - - #[test] - fun test_type_of_with_type_arg() { - let type_info = type_of>(); - assert!(account_address(&type_info) == @aptos_std, 0); - assert!(module_name(&type_info) == b"table", 1); - assert!(struct_name(&type_info) == b"Table<0x1::string::String, 0x1::string::String>", 2); - } - - #[test(fx = @std)] - fun test_chain_id(fx: signer) { - // We need to enable the feature in order for the native call to be allowed. - features::change_feature_flags_for_testing(&fx, vector[features::get_aptos_stdlib_chain_id_feature()], vector[]); - - // The testing environment chain ID is 4u8. - assert!(chain_id() == 4u8, 1); - } - - #[test] - fun test_type_name() { - - - assert!(type_name() == string::utf8(b"bool"), 0); - assert!(type_name() == string::utf8(b"u8"), 1); - assert!(type_name() == string::utf8(b"u64"), 2); - assert!(type_name() == string::utf8(b"u128"), 3); - assert!(type_name

() == string::utf8(b"address"), 4); - assert!(type_name() == string::utf8(b"signer"), 5); - - // vector - assert!(type_name>() == string::utf8(b"vector"), 6); - assert!(type_name>>() == string::utf8(b"vector>"), 7); - assert!(type_name>>() == string::utf8(b"vector>"), 8); - - - // struct - assert!(type_name() == string::utf8(b"0x1::type_info::TypeInfo"), 9); - assert!(type_name< - Table< - TypeInfo, - Table> - > - >() == string::utf8(b"0x1::table::Table<0x1::type_info::TypeInfo, 0x1::table::Table>>"), 10); - } - - #[verify_only] - fun verify_type_of() { - let type_info = type_of(); - let account_address = account_address(&type_info); - let module_name = module_name(&type_info); - let struct_name = struct_name(&type_info); - spec { - assert account_address == @aptos_std; - assert module_name == b"type_info"; - assert struct_name == b"TypeInfo"; - }; - } - - #[verify_only] - fun verify_type_of_generic() { - let type_info = type_of(); - let account_address = account_address(&type_info); - let module_name = module_name(&type_info); - let struct_name = struct_name(&type_info); - spec { - assert account_address == type_of().account_address; - assert module_name == type_of().module_name; - assert struct_name == type_of().struct_name; - }; - } - spec verify_type_of_generic { - aborts_if !spec_is_struct(); - } - - #[test_only] - struct CustomType has drop {} - - #[test_only] - struct SimpleStruct has copy, drop { - field: u8 - } - - #[test_only] - struct ComplexStruct has copy, drop { - field_1: bool, - field_2: u8, - field_3: u64, - field_4: u128, - field_5: SimpleStruct, - field_6: T - } - - #[test_only] - struct TwoBools has drop { - bool_1: bool, - bool_2: bool - } - - #[test_only] - use std::option; - - #[test(account = @0x0)] - /// Ensure valid returns across native types and nesting schemas. - fun test_size_of_val( - account: &signer - ) { - assert!(size_of_val(&false) == 1, 0); // Bool takes 1 byte. - assert!(size_of_val(&0) == 1, 0); // u8 takes 1 byte. - assert!(size_of_val(&0) == 8, 0); // u64 takes 8 bytes. - assert!(size_of_val(&0) == 16, 0); // u128 takes 16 bytes. - // Address is a u256. - assert!(size_of_val(&@0x0) == 32, 0); - assert!(size_of_val(account) == 32, 0); // Signer is an address. - // Assert custom type without fields has size 1. - assert!(size_of_val(&CustomType{}) == 1, 0); - // Declare a simple struct with a 1-byte field. - let simple_struct = SimpleStruct{field: 0}; - // Assert size is indicated as 1 byte. - assert!(size_of_val(&simple_struct) == 1, 0); - let complex_struct = ComplexStruct{ - field_1: false, - field_2: 0, - field_3: 0, - field_4: 0, - field_5: simple_struct, - field_6: 0 - }; // Declare a complex struct with another nested inside. - // Assert size is bytewise sum of components. - assert!(size_of_val(&complex_struct) == (1 + 1 + 8 + 16 + 1 + 16), 0); - // Declare a struct with two boolean values. - let two_bools = TwoBools{bool_1: false, bool_2: false}; - // Assert size is two bytes. - assert!(size_of_val(&two_bools) == 2, 0); - // Declare an empty vector of element type u64. - let empty_vector_u64 = vector::empty(); - // Declare an empty vector of element type u128. - let empty_vector_u128 = vector::empty(); - // Assert size is 1 byte regardless of underlying element type. - assert!(size_of_val(&empty_vector_u64) == 1, 0); - // Assert size is 1 byte regardless of underlying element type. - assert!(size_of_val(&empty_vector_u128) == 1, 0); - // Declare a bool in a vector. - let bool_vector = vector::singleton(false); - // Push back another bool. - vector::push_back(&mut bool_vector, false); - // Assert size is 3 bytes (1 per element, 1 for base vector). - assert!(size_of_val(&bool_vector) == 3, 0); - // Get a some option, which is implemented as a vector. - let u64_option = option::some(0); - // Assert size is 9 bytes (8 per element, 1 for base vector). - assert!(size_of_val(&u64_option) == 9, 0); - option::extract(&mut u64_option); // Remove the value inside. - // Assert size reduces to 1 byte. - assert!(size_of_val(&u64_option) == 1, 0); - } - - #[test] - /// Verify returns for base vector size at different lengths, with - /// different underlying fixed-size elements. - /// - /// For a vector of length n containing fixed-size elements, the - /// size of the vector is b + n * s bytes, where s is the size of an - /// element in bytes, and b is a "base size" in bytes that varies - /// with n. - /// - /// The base size is an artifact of vector BCS encoding, namely, - /// with b leading bytes that declare how many elements are in the - /// vector. Each such leading byte has a reserved control bit (e.g. - /// is this the last leading byte?), such that 7 bits per leading - /// byte remain for the actual element count. Hence for a single - /// leading byte, the maximum element count that can be described is - /// (2 ^ 7) - 1, and for b leading bytes, the maximum element count - /// that can be described is (2 ^ 7) ^ b - 1: - /// - /// * b = 1, n < 128 - /// * b = 2, 128 <= n < 16384 - /// * b = 3, 16384 <= n < 2097152 - /// * ... - /// * (2 ^ 7) ^ (b - 1) <= n < (2 ^ 7) ^ b - /// * ... - /// * b = 9, 72057594037927936 <= n < 9223372036854775808 - /// * b = 10, 9223372036854775808 <= n < 18446744073709551616 - /// - /// Note that the upper bound on n for b = 10 is 2 ^ 64, rather than - /// (2 ^ 7) ^ 10 - 1, because the former, lower figure is the - /// maximum number of elements that can be stored in a vector in the - /// first place, e.g. U64_MAX. - /// - /// In practice b > 2 is unlikely to be encountered. - fun test_size_of_val_vectors() { - // Declare vector base sizes. - let (base_size_1, base_size_2, base_size_3) = (1, 2, 3); - // A base size of 1 applies for 127 or less elements. - let n_elems_cutoff_1 = 127; // (2 ^ 7) ^ 1 - 1. - // A base size of 2 applies for 128 < n <= 16384 elements. - let n_elems_cutoff_2 = 16383; // (2 ^ 7) ^ 2 - 1. - let vector_u64 = vector::empty(); // Declare empty vector. - let null_element = 0; // Declare a null element. - // Get element size. - let element_size = size_of_val(&null_element); - // Vector size is 1 byte when length is 0. - assert!(size_of_val(&vector_u64) == base_size_1, 0); - let i = 0; // Declare loop counter. - while (i < n_elems_cutoff_1) { // Iterate until first cutoff: - // Add an element. - vector::push_back(&mut vector_u64, null_element); - i = i + 1; // Increment counter. - }; - // Vector base size is still 1 byte. - assert!(size_of_val(&vector_u64) - element_size * i == base_size_1, 0); - // Add another element, exceeding the cutoff. - vector::push_back(&mut vector_u64, null_element); - i = i + 1; // Increment counter. - // Vector base size is now 2 bytes. - assert!(size_of_val(&vector_u64) - element_size * i == base_size_2, 0); - while (i < n_elems_cutoff_2) { // Iterate until second cutoff: - // Add an element. - vector::push_back(&mut vector_u64, null_element); - i = i + 1; // Increment counter. - }; - // Vector base size is still 2 bytes. - assert!(size_of_val(&vector_u64) - element_size * i == base_size_2, 0); - // Add another element, exceeding the cutoff. - vector::push_back(&mut vector_u64, null_element); - i = i + 1; // Increment counter. - // Vector base size is now 3 bytes. - assert!(size_of_val(&vector_u64) - element_size * i == base_size_3, 0); - // Repeat for custom struct. - let vector_complex = vector::empty>(); - // Declare a null element. - let null_element = ComplexStruct{ - field_1: false, - field_2: 0, - field_3: 0, - field_4: 0, - field_5: SimpleStruct{field: 0}, - field_6: @0x0 - }; - element_size = size_of_val(&null_element); // Get element size. - // Vector size is 1 byte when length is 0. - assert!(size_of_val(&vector_complex) == base_size_1, 0); - i = 0; // Re-initialize loop counter. - while (i < n_elems_cutoff_1) { // Iterate until first cutoff: - // Add an element. - vector::push_back(&mut vector_complex, copy null_element); - i = i + 1; // Increment counter. - }; - assert!( // Vector base size is still 1 byte. - size_of_val(&vector_complex) - element_size * i == base_size_1, 0); - // Add another element, exceeding the cutoff. - vector::push_back(&mut vector_complex, null_element); - i = i + 1; // Increment counter. - assert!( // Vector base size is now 2 bytes. - size_of_val(&vector_complex) - element_size * i == base_size_2, 0); - while (i < n_elems_cutoff_2) { // Iterate until second cutoff: - // Add an element. - vector::push_back(&mut vector_complex, copy null_element); - i = i + 1; // Increment counter. - }; - assert!( // Vector base size is still 2 bytes. - size_of_val(&vector_complex) - element_size * i == base_size_2, 0); - // Add another element, exceeding the cutoff. - vector::push_back(&mut vector_complex, null_element); - i = i + 1; // Increment counter. - assert!( // Vector base size is now 3 bytes. - size_of_val(&vector_complex) - element_size * i == base_size_3, 0); - } - -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/MoveStdlib/acl.move b/examples/oft-movement/build/oft/sources/dependencies/MoveStdlib/acl.move deleted file mode 100644 index 6adb0e2a9..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/MoveStdlib/acl.move +++ /dev/null @@ -1,46 +0,0 @@ -/// Access control list (acl) module. An acl is a list of account addresses who -/// have the access permission to a certain object. -/// This module uses a `vector` to represent the list, but can be refactored to -/// use a "set" instead when it's available in the language in the future. - -module std::acl { - use std::vector; - use std::error; - - /// The ACL already contains the address. - const ECONTAIN: u64 = 0; - /// The ACL does not contain the address. - const ENOT_CONTAIN: u64 = 1; - - struct ACL has store, drop, copy { - list: vector
- } - - /// Return an empty ACL. - public fun empty(): ACL { - ACL{ list: vector::empty
() } - } - - /// Add the address to the ACL. - public fun add(self: &mut ACL, addr: address) { - assert!(!vector::contains(&mut self.list, &addr), error::invalid_argument(ECONTAIN)); - vector::push_back(&mut self.list, addr); - } - - /// Remove the address from the ACL. - public fun remove(self: &mut ACL, addr: address) { - let (found, index) = vector::index_of(&mut self.list, &addr); - assert!(found, error::invalid_argument(ENOT_CONTAIN)); - vector::remove(&mut self.list, index); - } - - /// Return true iff the ACL contains the address. - public fun contains(self: &ACL, addr: address): bool { - vector::contains(&self.list, &addr) - } - - /// assert! that the ACL has the address. - public fun assert_contains(self: &ACL, addr: address) { - assert!(contains(self, addr), error::invalid_argument(ENOT_CONTAIN)); - } -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/MoveStdlib/bcs.move b/examples/oft-movement/build/oft/sources/dependencies/MoveStdlib/bcs.move deleted file mode 100644 index 7721d6965..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/MoveStdlib/bcs.move +++ /dev/null @@ -1,46 +0,0 @@ -/// Utility for converting a Move value to its binary representation in BCS (Binary Canonical -/// Serialization). BCS is the binary encoding for Move resources and other non-module values -/// published on-chain. See https://github.com/aptos-labs/bcs#binary-canonical-serialization-bcs for more -/// details on BCS. -module std::bcs { - use std::option::Option; - - /// Returns the binary representation of `v` in BCS (Binary Canonical Serialization) format. - /// Aborts with `0x1c5` error code if serialization fails. - native public fun to_bytes(v: &MoveValue): vector; - - /// Returns the size of the binary representation of `v` in BCS (Binary Canonical Serialization) format. - /// Aborts with `0x1c5` error code if there is a failure when calculating serialized size. - native public fun serialized_size(v: &MoveValue): u64; - - // TODO - function `constant_serialized_size1 is `public(friend)` here for one release, - // and to be changed to `public` one release later. - #[test_only] - friend std::bcs_tests; - - /// If the type has known constant (always the same, independent of instance) serialized size - /// in BCS (Binary Canonical Serialization) format, returns it, otherwise returns None. - /// Aborts with `0x1c5` error code if there is a failure when calculating serialized size. - /// - /// Note: - /// For some types it might not be known they have constant size, and function might return None. - /// For example, signer appears to have constant size, but it's size might change. - /// If this function returned Some() for some type before - it is guaranteed to continue returning Some(). - /// On the other hand, if function has returned None for some type, - /// it might change in the future to return Some() instead, if size becomes "known". - native public(friend) fun constant_serialized_size(): Option; - - // ============================== - // Module Specification - spec module {} // switch to module documentation context - - spec module { - /// Native function which is defined in the prover's prelude. - native fun serialize(v: &MoveValue): vector; - } - - spec serialized_size(v: &MoveValue): u64 { - pragma opaque; - ensures result == len(serialize(v)); - } -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/MoveStdlib/bit_vector.move b/examples/oft-movement/build/oft/sources/dependencies/MoveStdlib/bit_vector.move deleted file mode 100644 index b00606196..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/MoveStdlib/bit_vector.move +++ /dev/null @@ -1,239 +0,0 @@ -module std::bit_vector { - use std::vector; - - /// The provided index is out of bounds - const EINDEX: u64 = 0x20000; - /// An invalid length of bitvector was given - const ELENGTH: u64 = 0x20001; - - const WORD_SIZE: u64 = 1; - /// The maximum allowed bitvector size - const MAX_SIZE: u64 = 1024; - - spec BitVector { - invariant length == len(bit_field); - } - - struct BitVector has copy, drop, store { - length: u64, - bit_field: vector, - } - - public fun new(length: u64): BitVector { - assert!(length > 0, ELENGTH); - assert!(length < MAX_SIZE, ELENGTH); - let counter = 0; - let bit_field = vector::empty(); - while ({spec { - invariant counter <= length; - invariant len(bit_field) == counter; - }; - (counter < length)}) { - vector::push_back(&mut bit_field, false); - counter = counter + 1; - }; - spec { - assert counter == length; - assert len(bit_field) == length; - }; - - BitVector { - length, - bit_field, - } - } - spec new { - include NewAbortsIf; - ensures result.length == length; - ensures len(result.bit_field) == length; - } - spec schema NewAbortsIf { - length: u64; - aborts_if length <= 0 with ELENGTH; - aborts_if length >= MAX_SIZE with ELENGTH; - } - - /// Set the bit at `bit_index` in the `self` regardless of its previous state. - public fun set(self: &mut BitVector, bit_index: u64) { - assert!(bit_index < vector::length(&self.bit_field), EINDEX); - let x = vector::borrow_mut(&mut self.bit_field, bit_index); - *x = true; - } - spec set { - include SetAbortsIf; - ensures self.bit_field[bit_index]; - } - spec schema SetAbortsIf { - self: BitVector; - bit_index: u64; - aborts_if bit_index >= length(self) with EINDEX; - } - - /// Unset the bit at `bit_index` in the `self` regardless of its previous state. - public fun unset(self: &mut BitVector, bit_index: u64) { - assert!(bit_index < vector::length(&self.bit_field), EINDEX); - let x = vector::borrow_mut(&mut self.bit_field, bit_index); - *x = false; - } - spec unset { - include UnsetAbortsIf; - ensures !self.bit_field[bit_index]; - } - spec schema UnsetAbortsIf { - self: BitVector; - bit_index: u64; - aborts_if bit_index >= length(self) with EINDEX; - } - - /// Shift the `self` left by `amount`. If `amount` is greater than the - /// bitvector's length the bitvector will be zeroed out. - public fun shift_left(self: &mut BitVector, amount: u64) { - if (amount >= self.length) { - vector::for_each_mut(&mut self.bit_field, |elem| { - *elem = false; - }); - } else { - let i = amount; - - while (i < self.length) { - if (is_index_set(self, i)) set(self, i - amount) - else unset(self, i - amount); - i = i + 1; - }; - - i = self.length - amount; - - while (i < self.length) { - unset(self, i); - i = i + 1; - }; - } - } - spec shift_left { - // TODO: set to false because data invariant cannot be proved with inline function. Will remove it once inline is supported - pragma verify = false; - } - - /// Return the value of the bit at `bit_index` in the `self`. `true` - /// represents "1" and `false` represents a 0 - public fun is_index_set(self: &BitVector, bit_index: u64): bool { - assert!(bit_index < vector::length(&self.bit_field), EINDEX); - *vector::borrow(&self.bit_field, bit_index) - } - spec is_index_set { - include IsIndexSetAbortsIf; - ensures result == self.bit_field[bit_index]; - } - spec schema IsIndexSetAbortsIf { - self: BitVector; - bit_index: u64; - aborts_if bit_index >= length(self) with EINDEX; - } - spec fun spec_is_index_set(self: BitVector, bit_index: u64): bool { - if (bit_index >= length(self)) { - false - } else { - self.bit_field[bit_index] - } - } - - /// Return the length (number of usable bits) of this bitvector - public fun length(self: &BitVector): u64 { - vector::length(&self.bit_field) - } - - /// Returns the length of the longest sequence of set bits starting at (and - /// including) `start_index` in the `bitvector`. If there is no such - /// sequence, then `0` is returned. - public fun longest_set_sequence_starting_at(self: &BitVector, start_index: u64): u64 { - assert!(start_index < self.length, EINDEX); - let index = start_index; - - // Find the greatest index in the vector such that all indices less than it are set. - while ({ - spec { - invariant index >= start_index; - invariant index == start_index || is_index_set(self, index - 1); - invariant index == start_index || index - 1 < vector::length(self.bit_field); - invariant forall j in start_index..index: is_index_set(self, j); - invariant forall j in start_index..index: j < vector::length(self.bit_field); - }; - index < self.length - }) { - if (!is_index_set(self, index)) break; - index = index + 1; - }; - - index - start_index - } - - spec longest_set_sequence_starting_at(self: &BitVector, start_index: u64): u64 { - aborts_if start_index >= self.length; - ensures forall i in start_index..result: is_index_set(self, i); - } - - #[test_only] - public fun word_size(): u64 { - WORD_SIZE - } - - #[verify_only] - public fun shift_left_for_verification_only(self: &mut BitVector, amount: u64) { - if (amount >= self.length) { - let len = vector::length(&self.bit_field); - let i = 0; - while ({ - spec { - invariant len == self.length; - invariant forall k in 0..i: !self.bit_field[k]; - invariant forall k in i..self.length: self.bit_field[k] == old(self).bit_field[k]; - }; - i < len - }) { - let elem = vector::borrow_mut(&mut self.bit_field, i); - *elem = false; - i = i + 1; - }; - } else { - let i = amount; - - while ({ - spec { - invariant i >= amount; - invariant self.length == old(self).length; - invariant forall j in amount..i: old(self).bit_field[j] == self.bit_field[j - amount]; - invariant forall j in (i-amount)..self.length : old(self).bit_field[j] == self.bit_field[j]; - invariant forall k in 0..i-amount: self.bit_field[k] == old(self).bit_field[k + amount]; - }; - i < self.length - }) { - if (is_index_set(self, i)) set(self, i - amount) - else unset(self, i - amount); - i = i + 1; - }; - - - i = self.length - amount; - - while ({ - spec { - invariant forall j in self.length - amount..i: !self.bit_field[j]; - invariant forall k in 0..self.length - amount: self.bit_field[k] == old(self).bit_field[k + amount]; - invariant i >= self.length - amount; - }; - i < self.length - }) { - unset(self, i); - i = i + 1; - } - } - } - spec shift_left_for_verification_only { - aborts_if false; - ensures amount >= self.length ==> (forall k in 0..self.length: !self.bit_field[k]); - ensures amount < self.length ==> - (forall i in self.length - amount..self.length: !self.bit_field[i]); - ensures amount < self.length ==> - (forall i in 0..self.length - amount: self.bit_field[i] == old(self).bit_field[i + amount]); - } -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/MoveStdlib/error.move b/examples/oft-movement/build/oft/sources/dependencies/MoveStdlib/error.move deleted file mode 100644 index 1facaf01d..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/MoveStdlib/error.move +++ /dev/null @@ -1,88 +0,0 @@ -/// This module defines a set of canonical error codes which are optional to use by applications for the -/// `abort` and `assert!` features. -/// -/// Canonical error codes use the 3 lowest bytes of the u64 abort code range (the upper 5 bytes are free for other use). -/// Of those, the highest byte represents the *error category* and the lower two bytes the *error reason*. -/// Given an error category `0x1` and a reason `0x3`, a canonical abort code looks as `0x10003`. -/// -/// A module can use a canonical code with a constant declaration of the following form: -/// -/// ``` -/// /// An invalid ASCII character was encountered when creating a string. -/// const EINVALID_CHARACTER: u64 = 0x010003; -/// ``` -/// -/// This code is both valid in the worlds with and without canonical errors. It can be used as a plain module local -/// error reason understand by the existing error map tooling, or as a canonical code. -/// -/// The actual canonical categories have been adopted from Google's canonical error codes, which in turn are derived -/// from Unix error codes [see here](https://cloud.google.com/apis/design/errors#handling_errors). Each code has an -/// associated HTTP error code which can be used in REST apis. The mapping from error code to http code is not 1:1; -/// error codes here are a bit richer than HTTP codes. -module std::error { - - /// Caller specified an invalid argument (http: 400) - const INVALID_ARGUMENT: u64 = 0x1; - - /// An input or result of a computation is out of range (http: 400) - const OUT_OF_RANGE: u64 = 0x2; - - /// The system is not in a state where the operation can be performed (http: 400) - const INVALID_STATE: u64 = 0x3; - - /// Request not authenticated due to missing, invalid, or expired auth token (http: 401) - const UNAUTHENTICATED: u64 = 0x4; - - /// client does not have sufficient permission (http: 403) - const PERMISSION_DENIED: u64 = 0x5; - - /// A specified resource is not found (http: 404) - const NOT_FOUND: u64 = 0x6; - - /// Concurrency conflict, such as read-modify-write conflict (http: 409) - const ABORTED: u64 = 0x7; - - /// The resource that a client tried to create already exists (http: 409) - const ALREADY_EXISTS: u64 = 0x8; - - /// Out of gas or other forms of quota (http: 429) - const RESOURCE_EXHAUSTED: u64 = 0x9; - - /// Request cancelled by the client (http: 499) - const CANCELLED: u64 = 0xA; - - /// Internal error (http: 500) - const INTERNAL: u64 = 0xB; - - /// Feature not implemented (http: 501) - const NOT_IMPLEMENTED: u64 = 0xC; - - /// The service is currently unavailable. Indicates that a retry could solve the issue (http: 503) - const UNAVAILABLE: u64 = 0xD; - - /// Construct a canonical error code from a category and a reason. - public fun canonical(category: u64, reason: u64): u64 { - (category << 16) + reason - } - spec canonical { - pragma opaque = true; - let shl_res = category << 16; - ensures [concrete] result == shl_res + reason; - aborts_if [abstract] false; - ensures [abstract] result == category; - } - - /// Functions to construct a canonical error code of the given category. - public fun invalid_argument(r: u64): u64 { canonical(INVALID_ARGUMENT, r) } - public fun out_of_range(r: u64): u64 { canonical(OUT_OF_RANGE, r) } - public fun invalid_state(r: u64): u64 { canonical(INVALID_STATE, r) } - public fun unauthenticated(r: u64): u64 { canonical(UNAUTHENTICATED, r) } - public fun permission_denied(r: u64): u64 { canonical(PERMISSION_DENIED, r) } - public fun not_found(r: u64): u64 { canonical(NOT_FOUND, r) } - public fun aborted(r: u64): u64 { canonical(ABORTED, r) } - public fun already_exists(r: u64): u64 { canonical(ALREADY_EXISTS, r) } - public fun resource_exhausted(r: u64): u64 { canonical(RESOURCE_EXHAUSTED, r) } - public fun internal(r: u64): u64 { canonical(INTERNAL, r) } - public fun not_implemented(r: u64): u64 { canonical(NOT_IMPLEMENTED, r) } - public fun unavailable(r: u64): u64 { canonical(UNAVAILABLE, r) } -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/MoveStdlib/features.move b/examples/oft-movement/build/oft/sources/dependencies/MoveStdlib/features.move deleted file mode 100644 index 2b3a5291c..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/MoveStdlib/features.move +++ /dev/null @@ -1,792 +0,0 @@ -/// Defines feature flags for Aptos. Those are used in Aptos specific implementations of features in -/// the Move stdlib, the Aptos stdlib, and the Aptos framework. -/// -/// ============================================================================================ -/// Feature Flag Definitions -/// -/// Each feature flag should come with documentation which justifies the need of the flag. -/// Introduction of a new feature flag requires approval of framework owners. Be frugal when -/// introducing new feature flags, as too many can make it hard to understand the code. -/// -/// Each feature flag should come with a specification of a lifetime: -/// -/// - a *transient* feature flag is only needed until a related code rollout has happened. This -/// is typically associated with the introduction of new native Move functions, and is only used -/// from Move code. The owner of this feature is obliged to remove it once this can be done. -/// -/// - a *permanent* feature flag is required to stay around forever. Typically, those flags guard -/// behavior in native code, and the behavior with or without the feature need to be preserved -/// for playback. -/// -/// Note that removing a feature flag still requires the function which tests for the feature -/// (like `code_dependency_check_enabled` below) to stay around for compatibility reasons, as it -/// is a public function. However, once the feature flag is disabled, those functions can constantly -/// return true. -module std::features { - use std::error; - use std::signer; - use std::vector; - - const EINVALID_FEATURE: u64 = 1; - const EAPI_DISABLED: u64 = 2; - /// Deployed to production, and disabling is deprecated. - const EFEATURE_CANNOT_BE_DISABLED: u64 = 3; - - // -------------------------------------------------------------------------------------------- - // Code Publishing - - /// Whether validation of package dependencies is enabled, and the related native function is - /// available. This is needed because of introduction of a new native function. - /// Lifetime: transient - const CODE_DEPENDENCY_CHECK: u64 = 1; - - public fun code_dependency_check_enabled(): bool acquires Features { - is_enabled(CODE_DEPENDENCY_CHECK) - } - - /// Whether during upgrade compatibility checking, friend functions should be treated similar like - /// private functions. - /// Lifetime: permanent - const TREAT_FRIEND_AS_PRIVATE: u64 = 2; - - public fun treat_friend_as_private(): bool acquires Features { - is_enabled(TREAT_FRIEND_AS_PRIVATE) - } - - /// Whether the new SHA2-512, SHA3-512 and RIPEMD-160 hash function natives are enabled. - /// This is needed because of the introduction of new native functions. - /// Lifetime: transient - const SHA_512_AND_RIPEMD_160_NATIVES: u64 = 3; - - public fun get_sha_512_and_ripemd_160_feature(): u64 { SHA_512_AND_RIPEMD_160_NATIVES } - - public fun sha_512_and_ripemd_160_enabled(): bool acquires Features { - is_enabled(SHA_512_AND_RIPEMD_160_NATIVES) - } - - /// Whether the new `aptos_stdlib::type_info::chain_id()` native for fetching the chain ID is enabled. - /// This is needed because of the introduction of a new native function. - /// Lifetime: transient - const APTOS_STD_CHAIN_ID_NATIVES: u64 = 4; - - public fun get_aptos_stdlib_chain_id_feature(): u64 { APTOS_STD_CHAIN_ID_NATIVES } - - public fun aptos_stdlib_chain_id_enabled(): bool acquires Features { - is_enabled(APTOS_STD_CHAIN_ID_NATIVES) - } - - /// Whether to allow the use of binary format version v6. - /// Lifetime: transient - const VM_BINARY_FORMAT_V6: u64 = 5; - - public fun get_vm_binary_format_v6(): u64 { VM_BINARY_FORMAT_V6 } - - public fun allow_vm_binary_format_v6(): bool acquires Features { - is_enabled(VM_BINARY_FORMAT_V6) - } - - #[deprecated] - /// Deprecated feature - /// Lifetime: transient - const COLLECT_AND_DISTRIBUTE_GAS_FEES: u64 = 6; - - #[deprecated] - /// Deprecated feature - public fun get_collect_and_distribute_gas_fees_feature(): u64 { COLLECT_AND_DISTRIBUTE_GAS_FEES } - - #[deprecated] - public fun collect_and_distribute_gas_fees(): bool { - false - } - - /// Whether the new `aptos_stdlib::multi_ed25519::public_key_validate_internal_v2()` native is enabled. - /// This is needed because of the introduction of a new native function. - /// Lifetime: transient - const MULTI_ED25519_PK_VALIDATE_V2_NATIVES: u64 = 7; - - public fun multi_ed25519_pk_validate_v2_feature(): u64 { MULTI_ED25519_PK_VALIDATE_V2_NATIVES } - - public fun multi_ed25519_pk_validate_v2_enabled(): bool acquires Features { - is_enabled(MULTI_ED25519_PK_VALIDATE_V2_NATIVES) - } - - /// Whether the new BLAKE2B-256 hash function native is enabled. - /// This is needed because of the introduction of new native function(s). - /// Lifetime: transient - const BLAKE2B_256_NATIVE: u64 = 8; - - public fun get_blake2b_256_feature(): u64 { BLAKE2B_256_NATIVE } - - public fun blake2b_256_enabled(): bool acquires Features { - is_enabled(BLAKE2B_256_NATIVE) - } - - /// Whether resource groups are enabled. - /// This is needed because of new attributes for structs and a change in storage representation. - const RESOURCE_GROUPS: u64 = 9; - - public fun get_resource_groups_feature(): u64 { RESOURCE_GROUPS } - - public fun resource_groups_enabled(): bool acquires Features { - is_enabled(RESOURCE_GROUPS) - } - - /// Whether multisig accounts (different from accounts with multi-ed25519 auth keys) are enabled. - const MULTISIG_ACCOUNTS: u64 = 10; - - public fun get_multisig_accounts_feature(): u64 { MULTISIG_ACCOUNTS } - - public fun multisig_accounts_enabled(): bool acquires Features { - is_enabled(MULTISIG_ACCOUNTS) - } - - /// Whether delegation pools are enabled. - /// Lifetime: transient - const DELEGATION_POOLS: u64 = 11; - - public fun get_delegation_pools_feature(): u64 { DELEGATION_POOLS } - - public fun delegation_pools_enabled(): bool acquires Features { - is_enabled(DELEGATION_POOLS) - } - - /// Whether generic algebra basic operation support in `crypto_algebra.move` are enabled. - /// - /// Lifetime: transient - const CRYPTOGRAPHY_ALGEBRA_NATIVES: u64 = 12; - - public fun get_cryptography_algebra_natives_feature(): u64 { CRYPTOGRAPHY_ALGEBRA_NATIVES } - - public fun cryptography_algebra_enabled(): bool acquires Features { - is_enabled(CRYPTOGRAPHY_ALGEBRA_NATIVES) - } - - /// Whether the generic algebra implementation for BLS12381 operations are enabled. - /// - /// Lifetime: transient - const BLS12_381_STRUCTURES: u64 = 13; - - public fun get_bls12_381_strutures_feature(): u64 { BLS12_381_STRUCTURES } - - public fun bls12_381_structures_enabled(): bool acquires Features { - is_enabled(BLS12_381_STRUCTURES) - } - - - /// Whether native_public_key_validate aborts when a public key of the wrong length is given - /// Lifetime: ephemeral - const ED25519_PUBKEY_VALIDATE_RETURN_FALSE_WRONG_LENGTH: u64 = 14; - - /// Whether struct constructors are enabled - /// - /// Lifetime: transient - const STRUCT_CONSTRUCTORS: u64 = 15; - - /// Whether reward rate decreases periodically. - /// Lifetime: transient - const PERIODICAL_REWARD_RATE_DECREASE: u64 = 16; - - public fun get_periodical_reward_rate_decrease_feature(): u64 { PERIODICAL_REWARD_RATE_DECREASE } - - public fun periodical_reward_rate_decrease_enabled(): bool acquires Features { - is_enabled(PERIODICAL_REWARD_RATE_DECREASE) - } - - /// Whether enable paritial governance voting on aptos_governance. - /// Lifetime: transient - const PARTIAL_GOVERNANCE_VOTING: u64 = 17; - - public fun get_partial_governance_voting(): u64 { PARTIAL_GOVERNANCE_VOTING } - - public fun partial_governance_voting_enabled(): bool acquires Features { - is_enabled(PARTIAL_GOVERNANCE_VOTING) - } - - /// Charge invariant violation error. - /// Lifetime: transient - const CHARGE_INVARIANT_VIOLATION: u64 = 20; - - /// Whether enable paritial governance voting on delegation_pool. - /// Lifetime: transient - const DELEGATION_POOL_PARTIAL_GOVERNANCE_VOTING: u64 = 21; - - public fun get_delegation_pool_partial_governance_voting(): u64 { DELEGATION_POOL_PARTIAL_GOVERNANCE_VOTING } - - public fun delegation_pool_partial_governance_voting_enabled(): bool acquires Features { - is_enabled(DELEGATION_POOL_PARTIAL_GOVERNANCE_VOTING) - } - - /// Whether alternate gas payer is supported - /// Lifetime: transient - const FEE_PAYER_ENABLED: u64 = 22; - - public fun fee_payer_enabled(): bool acquires Features { - is_enabled(FEE_PAYER_ENABLED) - } - - /// Whether enable MOVE functions to call create_auid method to create AUIDs. - /// Lifetime: transient - const APTOS_UNIQUE_IDENTIFIERS: u64 = 23; - - public fun get_auids(): u64 { - error::invalid_argument(EFEATURE_CANNOT_BE_DISABLED) - } - - public fun auids_enabled(): bool { - true - } - - /// Whether the Bulletproofs zero-knowledge range proof module is enabled, and the related native function is - /// available. This is needed because of the introduction of a new native function. - /// Lifetime: transient - const BULLETPROOFS_NATIVES: u64 = 24; - - public fun get_bulletproofs_feature(): u64 { BULLETPROOFS_NATIVES } - - public fun bulletproofs_enabled(): bool acquires Features { - is_enabled(BULLETPROOFS_NATIVES) - } - - /// Fix the native formatter for signer. - /// Lifetime: transient - const SIGNER_NATIVE_FORMAT_FIX: u64 = 25; - - public fun get_signer_native_format_fix_feature(): u64 { SIGNER_NATIVE_FORMAT_FIX } - - public fun signer_native_format_fix_enabled(): bool acquires Features { - is_enabled(SIGNER_NATIVE_FORMAT_FIX) - } - - /// Whether emit function in `event.move` are enabled for module events. - /// - /// Lifetime: transient - const MODULE_EVENT: u64 = 26; - - public fun get_module_event_feature(): u64 { MODULE_EVENT } - - public fun module_event_enabled(): bool acquires Features { - is_enabled(MODULE_EVENT) - } - - /// Whether the fix for a counting bug in the script path of the signature checker pass is enabled. - /// Lifetime: transient - const SIGNATURE_CHECKER_V2_SCRIPT_FIX: u64 = 29; - - public fun get_aggregator_v2_api_feature(): u64 { - abort error::invalid_argument(EFEATURE_CANNOT_BE_DISABLED) - } - - public fun aggregator_v2_api_enabled(): bool { - true - } - - #[deprecated] - public fun get_aggregator_snapshots_feature(): u64 { - abort error::invalid_argument(EINVALID_FEATURE) - } - - #[deprecated] - public fun aggregator_snapshots_enabled(): bool { - abort error::invalid_argument(EINVALID_FEATURE) - } - - const SAFER_RESOURCE_GROUPS: u64 = 31; - - const SAFER_METADATA: u64 = 32; - - const SINGLE_SENDER_AUTHENTICATOR: u64 = 33; - - /// Whether the automatic creation of accounts is enabled for sponsored transactions. - /// Lifetime: transient - const SPONSORED_AUTOMATIC_ACCOUNT_CREATION: u64 = 34; - - public fun get_sponsored_automatic_account_creation(): u64 { SPONSORED_AUTOMATIC_ACCOUNT_CREATION } - - public fun sponsored_automatic_account_creation_enabled(): bool acquires Features { - is_enabled(SPONSORED_AUTOMATIC_ACCOUNT_CREATION) - } - - const FEE_PAYER_ACCOUNT_OPTIONAL: u64 = 35; - - public fun get_concurrent_token_v2_feature(): u64 { - error::invalid_argument(EFEATURE_CANNOT_BE_DISABLED) - } - - public fun concurrent_token_v2_enabled(): bool { - true - } - - #[deprecated] - public fun get_concurrent_assets_feature(): u64 { - abort error::invalid_argument(EFEATURE_CANNOT_BE_DISABLED) - } - - #[deprecated] - public fun concurrent_assets_enabled(): bool { - abort error::invalid_argument(EFEATURE_CANNOT_BE_DISABLED) - } - - const LIMIT_MAX_IDENTIFIER_LENGTH: u64 = 38; - - /// Whether allow changing beneficiaries for operators. - /// Lifetime: transient - const OPERATOR_BENEFICIARY_CHANGE: u64 = 39; - - public fun get_operator_beneficiary_change_feature(): u64 { OPERATOR_BENEFICIARY_CHANGE } - - public fun operator_beneficiary_change_enabled(): bool acquires Features { - is_enabled(OPERATOR_BENEFICIARY_CHANGE) - } - - const VM_BINARY_FORMAT_V7: u64 = 40; - - const RESOURCE_GROUPS_SPLIT_IN_VM_CHANGE_SET: u64 = 41; - - /// Whether the operator commission rate change in delegation pool is enabled. - /// Lifetime: transient - const COMMISSION_CHANGE_DELEGATION_POOL: u64 = 42; - - public fun get_commission_change_delegation_pool_feature(): u64 { COMMISSION_CHANGE_DELEGATION_POOL } - - public fun commission_change_delegation_pool_enabled(): bool acquires Features { - is_enabled(COMMISSION_CHANGE_DELEGATION_POOL) - } - - /// Whether the generic algebra implementation for BN254 operations are enabled. - /// - /// Lifetime: transient - const BN254_STRUCTURES: u64 = 43; - - public fun get_bn254_strutures_feature(): u64 { BN254_STRUCTURES } - - public fun bn254_structures_enabled(): bool acquires Features { - is_enabled(BN254_STRUCTURES) - } - - /// Deprecated by `aptos_framework::randomness_config::RandomnessConfig`. - const RECONFIGURE_WITH_DKG: u64 = 45; - - public fun get_reconfigure_with_dkg_feature(): u64 { RECONFIGURE_WITH_DKG } - - public fun reconfigure_with_dkg_enabled(): bool acquires Features { - is_enabled(RECONFIGURE_WITH_DKG) - } - - /// Whether the OIDB feature is enabled, possibly with the ZK-less verification mode. - /// - /// Lifetime: transient - const KEYLESS_ACCOUNTS: u64 = 46; - - public fun get_keyless_accounts_feature(): u64 { KEYLESS_ACCOUNTS } - - public fun keyless_accounts_enabled(): bool acquires Features { - is_enabled(KEYLESS_ACCOUNTS) - } - - /// Whether the ZK-less mode of the keyless accounts feature is enabled. - /// - /// Lifetime: transient - const KEYLESS_BUT_ZKLESS_ACCOUNTS: u64 = 47; - - public fun get_keyless_but_zkless_accounts_feature(): u64 { KEYLESS_BUT_ZKLESS_ACCOUNTS } - - public fun keyless_but_zkless_accounts_feature_enabled(): bool acquires Features { - is_enabled(KEYLESS_BUT_ZKLESS_ACCOUNTS) - } - - /// Deprecated by `aptos_framework::jwk_consensus_config::JWKConsensusConfig`. - const JWK_CONSENSUS: u64 = 49; - - public fun get_jwk_consensus_feature(): u64 { JWK_CONSENSUS } - - public fun jwk_consensus_enabled(): bool acquires Features { - is_enabled(JWK_CONSENSUS) - } - - /// Whether enable Fungible Asset creation - /// to create higher throughput concurrent variants. - /// Lifetime: transient - const CONCURRENT_FUNGIBLE_ASSETS: u64 = 50; - - public fun get_concurrent_fungible_assets_feature(): u64 { CONCURRENT_FUNGIBLE_ASSETS } - - public fun concurrent_fungible_assets_enabled(): bool acquires Features { - is_enabled(CONCURRENT_FUNGIBLE_ASSETS) - } - - /// Whether deploying to objects is enabled. - const OBJECT_CODE_DEPLOYMENT: u64 = 52; - - public fun is_object_code_deployment_enabled(): bool acquires Features { - is_enabled(OBJECT_CODE_DEPLOYMENT) - } - - /// Whether checking the maximum object nesting is enabled. - const MAX_OBJECT_NESTING_CHECK: u64 = 53; - - public fun get_max_object_nesting_check_feature(): u64 { MAX_OBJECT_NESTING_CHECK } - - public fun max_object_nesting_check_enabled(): bool acquires Features { - is_enabled(MAX_OBJECT_NESTING_CHECK) - } - - /// Whether keyless accounts support passkey-based ephemeral signatures. - /// - /// Lifetime: transient - const KEYLESS_ACCOUNTS_WITH_PASSKEYS: u64 = 54; - - public fun get_keyless_accounts_with_passkeys_feature(): u64 { KEYLESS_ACCOUNTS_WITH_PASSKEYS } - - public fun keyless_accounts_with_passkeys_feature_enabled(): bool acquires Features { - is_enabled(KEYLESS_ACCOUNTS_WITH_PASSKEYS) - } - - /// Whether the Multisig V2 enhancement feature is enabled. - /// - /// Lifetime: transient - const MULTISIG_V2_ENHANCEMENT: u64 = 55; - - public fun get_multisig_v2_enhancement_feature(): u64 { MULTISIG_V2_ENHANCEMENT } - - public fun multisig_v2_enhancement_feature_enabled(): bool acquires Features { - is_enabled(MULTISIG_V2_ENHANCEMENT) - } - - /// Whether delegators allowlisting for delegation pools is supported. - /// Lifetime: transient - const DELEGATION_POOL_ALLOWLISTING: u64 = 56; - - public fun get_delegation_pool_allowlisting_feature(): u64 { DELEGATION_POOL_ALLOWLISTING } - - public fun delegation_pool_allowlisting_enabled(): bool acquires Features { - is_enabled(DELEGATION_POOL_ALLOWLISTING) - } - - /// Whether aptos_framwork enables the behavior of module event migration. - /// - /// Lifetime: transient - const MODULE_EVENT_MIGRATION: u64 = 57; - - public fun get_module_event_migration_feature(): u64 { MODULE_EVENT_MIGRATION } - - public fun module_event_migration_enabled(): bool acquires Features { - is_enabled(MODULE_EVENT_MIGRATION) - } - - /// Whether the transaction context extension is enabled. This feature allows the module - /// `transaction_context` to provide contextual information about the user transaction. - /// - /// Lifetime: transient - const TRANSACTION_CONTEXT_EXTENSION: u64 = 59; - - public fun get_transaction_context_extension_feature(): u64 { TRANSACTION_CONTEXT_EXTENSION } - - public fun transaction_context_extension_enabled(): bool acquires Features { - is_enabled(TRANSACTION_CONTEXT_EXTENSION) - } - - /// Whether migration from coin to fungible asset feature is enabled. - /// - /// Lifetime: transient - const COIN_TO_FUNGIBLE_ASSET_MIGRATION: u64 = 60; - - public fun get_coin_to_fungible_asset_migration_feature(): u64 { COIN_TO_FUNGIBLE_ASSET_MIGRATION } - - public fun coin_to_fungible_asset_migration_feature_enabled(): bool acquires Features { - is_enabled(COIN_TO_FUNGIBLE_ASSET_MIGRATION) - } - - const PRIMARY_APT_FUNGIBLE_STORE_AT_USER_ADDRESS: u64 = 61; - - #[deprecated] - public fun get_primary_apt_fungible_store_at_user_address_feature( - ): u64 { - abort error::invalid_argument(EINVALID_FEATURE) - } - - #[deprecated] - public fun primary_apt_fungible_store_at_user_address_enabled(): bool acquires Features { - is_enabled(PRIMARY_APT_FUNGIBLE_STORE_AT_USER_ADDRESS) - } - - const AGGREGATOR_V2_IS_AT_LEAST_API: u64 = 66; - - public fun aggregator_v2_is_at_least_api_enabled(): bool acquires Features { - is_enabled(AGGREGATOR_V2_IS_AT_LEAST_API) - } - - /// Whether we use more efficient native implementation of computing object derived address - const OBJECT_NATIVE_DERIVED_ADDRESS: u64 = 62; - - public fun get_object_native_derived_address_feature(): u64 { OBJECT_NATIVE_DERIVED_ADDRESS } - - public fun object_native_derived_address_enabled(): bool acquires Features { - is_enabled(OBJECT_NATIVE_DERIVED_ADDRESS) - } - - /// Whether the dispatchable fungible asset standard feature is enabled. - /// - /// Lifetime: transient - const DISPATCHABLE_FUNGIBLE_ASSET: u64 = 63; - - public fun get_dispatchable_fungible_asset_feature(): u64 { DISPATCHABLE_FUNGIBLE_ASSET } - - public fun dispatchable_fungible_asset_enabled(): bool acquires Features { - is_enabled(DISPATCHABLE_FUNGIBLE_ASSET) - } - - /// Lifetime: transient - const NEW_ACCOUNTS_DEFAULT_TO_FA_APT_STORE: u64 = 64; - - public fun get_new_accounts_default_to_fa_apt_store_feature(): u64 { NEW_ACCOUNTS_DEFAULT_TO_FA_APT_STORE } - - public fun new_accounts_default_to_fa_apt_store_enabled(): bool acquires Features { - is_enabled(NEW_ACCOUNTS_DEFAULT_TO_FA_APT_STORE) - } - - /// Lifetime: transient - const OPERATIONS_DEFAULT_TO_FA_APT_STORE: u64 = 65; - - public fun get_operations_default_to_fa_apt_store_feature(): u64 { OPERATIONS_DEFAULT_TO_FA_APT_STORE } - - public fun operations_default_to_fa_apt_store_enabled(): bool acquires Features { - is_enabled(OPERATIONS_DEFAULT_TO_FA_APT_STORE) - } - - /// Whether enable concurent Fungible Balance - /// to create higher throughput concurrent variants. - /// Lifetime: transient - const CONCURRENT_FUNGIBLE_BALANCE: u64 = 67; - - public fun get_concurrent_fungible_balance_feature(): u64 { CONCURRENT_FUNGIBLE_BALANCE } - - public fun concurrent_fungible_balance_enabled(): bool acquires Features { - is_enabled(CONCURRENT_FUNGIBLE_BALANCE) - } - - /// Whether to default new Fungible Store to the concurrent variant. - /// Lifetime: transient - const DEFAULT_TO_CONCURRENT_FUNGIBLE_BALANCE: u64 = 68; - - public fun get_default_to_concurrent_fungible_balance_feature(): u64 { DEFAULT_TO_CONCURRENT_FUNGIBLE_BALANCE } - - public fun default_to_concurrent_fungible_balance_enabled(): bool acquires Features { - is_enabled(DEFAULT_TO_CONCURRENT_FUNGIBLE_BALANCE) - } - - /// Whether the multisig v2 fix is enabled. Once enabled, the multisig transaction execution will explicitly - /// abort if the provided payload does not match the payload stored on-chain. - /// - /// Lifetime: transient - const ABORT_IF_MULTISIG_PAYLOAD_MISMATCH: u64 = 70; - - public fun get_abort_if_multisig_payload_mismatch_feature(): u64 { ABORT_IF_MULTISIG_PAYLOAD_MISMATCH } - - public fun abort_if_multisig_payload_mismatch_enabled(): bool acquires Features { - is_enabled(ABORT_IF_MULTISIG_PAYLOAD_MISMATCH) - } - - /// Whether the simulation enhancement is enabled. This enables the simulation without an authentication check, - /// the sponsored transaction simulation when the fee payer is set to 0x0, and the multisig transaction - /// simulation consistnet with the execution. - /// - /// Lifetime: transient - const TRANSACTION_SIMULATION_ENHANCEMENT: u64 = 78; - - public fun get_transaction_simulation_enhancement_feature(): u64 { TRANSACTION_SIMULATION_ENHANCEMENT } - - public fun transaction_simulation_enhancement_enabled(): bool acquires Features { - is_enabled(TRANSACTION_SIMULATION_ENHANCEMENT) - } - - const COLLECTION_OWNER: u64 = 79; - - public fun get_collection_owner_feature(): u64 { COLLECTION_OWNER } - - public fun is_collection_owner_enabled(): bool acquires Features { - is_enabled(COLLECTION_OWNER) - } - - const NATIVE_MEMORY_OPERATIONS: u64 = 80; - - public fun get_native_memory_operations_feature(): u64 { NATIVE_MEMORY_OPERATIONS } - - public fun is_native_memory_operations_enabled(): bool acquires Features { - is_enabled(NATIVE_MEMORY_OPERATIONS) - } - - // ============================================================================================ - // Feature Flag Implementation - - /// The provided signer has not a framework address. - const EFRAMEWORK_SIGNER_NEEDED: u64 = 1; - - /// The enabled features, represented by a bitset stored on chain. - struct Features has key { - features: vector, - } - - /// This resource holds the feature vec updates received in the current epoch. - /// On epoch change, the updates take effect and this buffer is cleared. - struct PendingFeatures has key { - features: vector, - } - - /// Deprecated to prevent validator set changes during DKG. - /// - /// Genesis/tests should use `change_feature_flags_internal()` for feature vec initialization. - /// - /// Governance proposals should use `change_feature_flags_for_next_epoch()` to enable/disable features. - public fun change_feature_flags(_framework: &signer, _enable: vector, _disable: vector) { - abort (error::invalid_state(EAPI_DISABLED)) - } - - /// Update feature flags directly. Only used in genesis/tests. - fun change_feature_flags_internal(framework: &signer, enable: vector, disable: vector) acquires Features { - assert!(signer::address_of(framework) == @std, error::permission_denied(EFRAMEWORK_SIGNER_NEEDED)); - if (!exists(@std)) { - move_to(framework, Features { features: vector[] }) - }; - let features = &mut borrow_global_mut(@std).features; - vector::for_each_ref(&enable, |feature| { - set(features, *feature, true); - }); - vector::for_each_ref(&disable, |feature| { - set(features, *feature, false); - }); - } - - /// Enable and disable features for the next epoch. - public fun change_feature_flags_for_next_epoch( - framework: &signer, - enable: vector, - disable: vector - ) acquires PendingFeatures, Features { - assert!(signer::address_of(framework) == @std, error::permission_denied(EFRAMEWORK_SIGNER_NEEDED)); - - // Figure out the baseline feature vec that the diff will be applied to. - let new_feature_vec = if (exists(@std)) { - // If there is a buffered feature vec, use it as the baseline. - let PendingFeatures { features } = move_from(@std); - features - } else if (exists(@std)) { - // Otherwise, use the currently effective feature flag vec as the baseline, if it exists. - borrow_global(@std).features - } else { - // Otherwise, use an empty feature vec. - vector[] - }; - - // Apply the diff and save it to the buffer. - apply_diff(&mut new_feature_vec, enable, disable); - move_to(framework, PendingFeatures { features: new_feature_vec }); - } - - /// Apply all the pending feature flag changes. Should only be used at the end of a reconfiguration with DKG. - /// - /// While the scope is public, it can only be usd in system transactions like `block_prologue` and governance proposals, - /// who have permission to set the flag that's checked in `extract()`. - public fun on_new_epoch(framework: &signer) acquires Features, PendingFeatures { - ensure_framework_signer(framework); - if (exists(@std)) { - let PendingFeatures { features } = move_from(@std); - if (exists(@std)) { - borrow_global_mut(@std).features = features; - } else { - move_to(framework, Features { features }) - } - } - } - - #[view] - /// Check whether the feature is enabled. - public fun is_enabled(feature: u64): bool acquires Features { - exists(@std) && - contains(&borrow_global(@std).features, feature) - } - - /// Helper to include or exclude a feature flag. - fun set(features: &mut vector, feature: u64, include: bool) { - let byte_index = feature / 8; - let bit_mask = 1 << ((feature % 8) as u8); - while (vector::length(features) <= byte_index) { - vector::push_back(features, 0) - }; - let entry = vector::borrow_mut(features, byte_index); - if (include) - *entry = *entry | bit_mask - else - *entry = *entry & (0xff ^ bit_mask) - } - - /// Helper to check whether a feature flag is enabled. - fun contains(features: &vector, feature: u64): bool { - let byte_index = feature / 8; - let bit_mask = 1 << ((feature % 8) as u8); - byte_index < vector::length(features) && (*vector::borrow(features, byte_index) & bit_mask) != 0 - } - - fun apply_diff(features: &mut vector, enable: vector, disable: vector) { - vector::for_each(enable, |feature| { - set(features, feature, true); - }); - vector::for_each(disable, |feature| { - set(features, feature, false); - }); - } - - fun ensure_framework_signer(account: &signer) { - let addr = signer::address_of(account); - assert!(addr == @std, error::permission_denied(EFRAMEWORK_SIGNER_NEEDED)); - } - - #[verify_only] - public fun change_feature_flags_for_verification( - framework: &signer, - enable: vector, - disable: vector - ) acquires Features { - change_feature_flags_internal(framework, enable, disable) - } - - #[test_only] - public fun change_feature_flags_for_testing( - framework: &signer, - enable: vector, - disable: vector - ) acquires Features { - change_feature_flags_internal(framework, enable, disable) - } - - #[test] - fun test_feature_sets() { - let features = vector[]; - set(&mut features, 1, true); - set(&mut features, 5, true); - set(&mut features, 17, true); - set(&mut features, 23, true); - assert!(contains(&features, 1), 0); - assert!(contains(&features, 5), 1); - assert!(contains(&features, 17), 2); - assert!(contains(&features, 23), 3); - set(&mut features, 5, false); - set(&mut features, 17, false); - assert!(contains(&features, 1), 0); - assert!(!contains(&features, 5), 1); - assert!(!contains(&features, 17), 2); - assert!(contains(&features, 23), 3); - } - - #[test(fx = @std)] - fun test_change_feature_txn(fx: signer) acquires Features { - change_feature_flags_for_testing(&fx, vector[1, 9, 23], vector[]); - assert!(is_enabled(1), 1); - assert!(is_enabled(9), 2); - assert!(is_enabled(23), 3); - change_feature_flags_for_testing(&fx, vector[17], vector[9]); - assert!(is_enabled(1), 1); - assert!(!is_enabled(9), 2); - assert!(is_enabled(17), 3); - assert!(is_enabled(23), 4); - } -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/MoveStdlib/fixed_point32.move b/examples/oft-movement/build/oft/sources/dependencies/MoveStdlib/fixed_point32.move deleted file mode 100644 index 82611cb4b..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/MoveStdlib/fixed_point32.move +++ /dev/null @@ -1,295 +0,0 @@ -/// Defines a fixed-point numeric type with a 32-bit integer part and -/// a 32-bit fractional part. - -module std::fixed_point32 { - - /// Define a fixed-point numeric type with 32 fractional bits. - /// This is just a u64 integer but it is wrapped in a struct to - /// make a unique type. This is a binary representation, so decimal - /// values may not be exactly representable, but it provides more - /// than 9 decimal digits of precision both before and after the - /// decimal point (18 digits total). For comparison, double precision - /// floating-point has less than 16 decimal digits of precision, so - /// be careful about using floating-point to convert these values to - /// decimal. - struct FixedPoint32 has copy, drop, store { value: u64 } - - const MAX_U64: u128 = 18446744073709551615; - - /// The denominator provided was zero - const EDENOMINATOR: u64 = 0x10001; - /// The quotient value would be too large to be held in a `u64` - const EDIVISION: u64 = 0x20002; - /// The multiplied value would be too large to be held in a `u64` - const EMULTIPLICATION: u64 = 0x20003; - /// A division by zero was encountered - const EDIVISION_BY_ZERO: u64 = 0x10004; - /// The computed ratio when converting to a `FixedPoint32` would be unrepresentable - const ERATIO_OUT_OF_RANGE: u64 = 0x20005; - - /// Multiply a u64 integer by a fixed-point number, truncating any - /// fractional part of the product. This will abort if the product - /// overflows. - public fun multiply_u64(val: u64, multiplier: FixedPoint32): u64 { - // The product of two 64 bit values has 128 bits, so perform the - // multiplication with u128 types and keep the full 128 bit product - // to avoid losing accuracy. - let unscaled_product = (val as u128) * (multiplier.value as u128); - // The unscaled product has 32 fractional bits (from the multiplier) - // so rescale it by shifting away the low bits. - let product = unscaled_product >> 32; - // Check whether the value is too large. - assert!(product <= MAX_U64, EMULTIPLICATION); - (product as u64) - } - spec multiply_u64 { - pragma opaque; - include MultiplyAbortsIf; - ensures result == spec_multiply_u64(val, multiplier); - } - spec schema MultiplyAbortsIf { - val: num; - multiplier: FixedPoint32; - aborts_if spec_multiply_u64(val, multiplier) > MAX_U64 with EMULTIPLICATION; - } - spec fun spec_multiply_u64(val: num, multiplier: FixedPoint32): num { - (val * multiplier.value) >> 32 - } - - /// Divide a u64 integer by a fixed-point number, truncating any - /// fractional part of the quotient. This will abort if the divisor - /// is zero or if the quotient overflows. - public fun divide_u64(val: u64, divisor: FixedPoint32): u64 { - // Check for division by zero. - assert!(divisor.value != 0, EDIVISION_BY_ZERO); - // First convert to 128 bits and then shift left to - // add 32 fractional zero bits to the dividend. - let scaled_value = (val as u128) << 32; - let quotient = scaled_value / (divisor.value as u128); - // Check whether the value is too large. - assert!(quotient <= MAX_U64, EDIVISION); - // the value may be too large, which will cause the cast to fail - // with an arithmetic error. - (quotient as u64) - } - spec divide_u64 { - pragma opaque; - include DivideAbortsIf; - ensures result == spec_divide_u64(val, divisor); - } - spec schema DivideAbortsIf { - val: num; - divisor: FixedPoint32; - aborts_if divisor.value == 0 with EDIVISION_BY_ZERO; - aborts_if spec_divide_u64(val, divisor) > MAX_U64 with EDIVISION; - } - spec fun spec_divide_u64(val: num, divisor: FixedPoint32): num { - (val << 32) / divisor.value - } - - /// Create a fixed-point value from a rational number specified by its - /// numerator and denominator. Calling this function should be preferred - /// for using `Self::create_from_raw_value` which is also available. - /// This will abort if the denominator is zero. It will also - /// abort if the numerator is nonzero and the ratio is not in the range - /// 2^-32 .. 2^32-1. When specifying decimal fractions, be careful about - /// rounding errors: if you round to display N digits after the decimal - /// point, you can use a denominator of 10^N to avoid numbers where the - /// very small imprecision in the binary representation could change the - /// rounding, e.g., 0.0125 will round down to 0.012 instead of up to 0.013. - public fun create_from_rational(numerator: u64, denominator: u64): FixedPoint32 { - // If the denominator is zero, this will abort. - // Scale the numerator to have 64 fractional bits and the denominator - // to have 32 fractional bits, so that the quotient will have 32 - // fractional bits. - let scaled_numerator = (numerator as u128) << 64; - let scaled_denominator = (denominator as u128) << 32; - assert!(scaled_denominator != 0, EDENOMINATOR); - let quotient = scaled_numerator / scaled_denominator; - assert!(quotient != 0 || numerator == 0, ERATIO_OUT_OF_RANGE); - // Return the quotient as a fixed-point number. We first need to check whether the cast - // can succeed. - assert!(quotient <= MAX_U64, ERATIO_OUT_OF_RANGE); - FixedPoint32 { value: (quotient as u64) } - } - spec create_from_rational { - pragma opaque; - include CreateFromRationalAbortsIf; - ensures result == spec_create_from_rational(numerator, denominator); - } - spec schema CreateFromRationalAbortsIf { - numerator: u64; - denominator: u64; - let scaled_numerator = (numerator as u128)<< 64; - let scaled_denominator = (denominator as u128) << 32; - let quotient = scaled_numerator / scaled_denominator; - aborts_if scaled_denominator == 0 with EDENOMINATOR; - aborts_if quotient == 0 && scaled_numerator != 0 with ERATIO_OUT_OF_RANGE; - aborts_if quotient > MAX_U64 with ERATIO_OUT_OF_RANGE; - } - spec fun spec_create_from_rational(numerator: num, denominator: num): FixedPoint32 { - FixedPoint32{value: (numerator << 64) / (denominator << 32)} - } - - /// Create a fixedpoint value from a raw value. - public fun create_from_raw_value(value: u64): FixedPoint32 { - FixedPoint32 { value } - } - spec create_from_raw_value { - pragma opaque; - aborts_if false; - ensures result.value == value; - } - - /// Accessor for the raw u64 value. Other less common operations, such as - /// adding or subtracting FixedPoint32 values, can be done using the raw - /// values directly. - public fun get_raw_value(self: FixedPoint32): u64 { - self.value - } - - /// Returns true if the ratio is zero. - public fun is_zero(self: FixedPoint32): bool { - self.value == 0 - } - - /// Returns the smaller of the two FixedPoint32 numbers. - public fun min(num1: FixedPoint32, num2: FixedPoint32): FixedPoint32 { - if (num1.value < num2.value) { - num1 - } else { - num2 - } - } - spec min { - pragma opaque; - aborts_if false; - ensures result == spec_min(num1, num2); - } - spec fun spec_min(num1: FixedPoint32, num2: FixedPoint32): FixedPoint32 { - if (num1.value < num2.value) { - num1 - } else { - num2 - } - } - - /// Returns the larger of the two FixedPoint32 numbers. - public fun max(num1: FixedPoint32, num2: FixedPoint32): FixedPoint32 { - if (num1.value > num2.value) { - num1 - } else { - num2 - } - } - spec max { - pragma opaque; - aborts_if false; - ensures result == spec_max(num1, num2); - } - spec fun spec_max(num1: FixedPoint32, num2: FixedPoint32): FixedPoint32 { - if (num1.value > num2.value) { - num1 - } else { - num2 - } - } - - /// Create a fixedpoint value from a u64 value. - public fun create_from_u64(val: u64): FixedPoint32 { - let value = (val as u128) << 32; - assert!(value <= MAX_U64, ERATIO_OUT_OF_RANGE); - FixedPoint32 {value: (value as u64)} - } - spec create_from_u64 { - pragma opaque; - include CreateFromU64AbortsIf; - ensures result == spec_create_from_u64(val); - } - spec schema CreateFromU64AbortsIf { - val: num; - let scaled_value = (val as u128) << 32; - aborts_if scaled_value > MAX_U64; - } - spec fun spec_create_from_u64(val: num): FixedPoint32 { - FixedPoint32 {value: val << 32} - } - - /// Returns the largest integer less than or equal to a given number. - public fun floor(self: FixedPoint32): u64 { - self.value >> 32 - } - spec floor { - pragma opaque; - aborts_if false; - ensures result == spec_floor(self); - } - spec fun spec_floor(self: FixedPoint32): u64 { - let fractional = self.value % (1 << 32); - if (fractional == 0) { - self.value >> 32 - } else { - (self.value - fractional) >> 32 - } - } - - /// Rounds up the given FixedPoint32 to the next largest integer. - public fun ceil(self: FixedPoint32): u64 { - let floored_num = floor(self) << 32; - if (self.value == floored_num) { - return floored_num >> 32 - }; - let val = ((floored_num as u128) + (1 << 32)); - (val >> 32 as u64) - } - spec ceil { - pragma verify_duration_estimate = 120; - pragma opaque; - aborts_if false; - ensures result == spec_ceil(self); - } - spec fun spec_ceil(self: FixedPoint32): u64 { - let fractional = self.value % (1 << 32); - let one = 1 << 32; - if (fractional == 0) { - self.value >> 32 - } else { - (self.value - fractional + one) >> 32 - } - } - - /// Returns the value of a FixedPoint32 to the nearest integer. - public fun round(self: FixedPoint32): u64 { - let floored_num = floor(self) << 32; - let boundary = floored_num + ((1 << 32) / 2); - if (self.value < boundary) { - floored_num >> 32 - } else { - ceil(self) - } - } - spec round { - pragma verify_duration_estimate = 120; - pragma opaque; - aborts_if false; - ensures result == spec_round(self); - } - spec fun spec_round(self: FixedPoint32): u64 { - let fractional = self.value % (1 << 32); - let boundary = (1 << 32) / 2; - let one = 1 << 32; - if (fractional < boundary) { - (self.value - fractional) >> 32 - } else { - (self.value - fractional + one) >> 32 - } - } - - // **************** SPECIFICATIONS **************** - - spec module {} // switch documentation context to module level - - spec module { - pragma aborts_if_is_strict; - } -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/MoveStdlib/hash.move b/examples/oft-movement/build/oft/sources/dependencies/MoveStdlib/hash.move deleted file mode 100644 index daadc4e81..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/MoveStdlib/hash.move +++ /dev/null @@ -1,8 +0,0 @@ -/// Module which defines SHA hashes for byte vectors. -/// -/// The functions in this module are natively declared both in the Move runtime -/// as in the Move prover's prelude. -module std::hash { - native public fun sha2_256(data: vector): vector; - native public fun sha3_256(data: vector): vector; -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/MoveStdlib/mem.move b/examples/oft-movement/build/oft/sources/dependencies/MoveStdlib/mem.move deleted file mode 100644 index cf2eae276..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/MoveStdlib/mem.move +++ /dev/null @@ -1,35 +0,0 @@ -/// Module with methods for safe memory manipulation. -module std::mem { - // TODO - functions here are `public(friend)` here for one release, - // and to be changed to `public` one release later. - // friend std::vector; - #[test_only] - friend std::mem_tests; - - /// Swap contents of two passed mutable references. - /// - /// Move prevents from having two mutable references to the same value, - /// so `left` and `right` references are always distinct. - public(friend) native fun swap(left: &mut T, right: &mut T); - - /// Replace the value reference points to with the given new value, - /// and return the value it had before. - public(friend) fun replace(ref: &mut T, new: T): T { - swap(ref, &mut new); - new - } - - spec swap(left: &mut T, right: &mut T) { - pragma opaque; - aborts_if false; - ensures right == old(left); - ensures left == old(right); - } - - spec replace(ref: &mut T, new: T): T { - pragma opaque; - aborts_if false; - ensures result == old(ref); - ensures ref == new; - } -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/MoveStdlib/option.move b/examples/oft-movement/build/oft/sources/dependencies/MoveStdlib/option.move deleted file mode 100644 index 50aefbe12..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/MoveStdlib/option.move +++ /dev/null @@ -1,356 +0,0 @@ -/// This module defines the Option type and its methods to represent and handle an optional value. -module std::option { - use std::vector; - - /// Abstraction of a value that may or may not be present. Implemented with a vector of size - /// zero or one because Move bytecode does not have ADTs. - struct Option has copy, drop, store { - vec: vector - } - spec Option { - /// The size of vector is always less than equal to 1 - /// because it's 0 for "none" or 1 for "some". - invariant len(vec) <= 1; - } - - /// The `Option` is in an invalid state for the operation attempted. - /// The `Option` is `Some` while it should be `None`. - const EOPTION_IS_SET: u64 = 0x40000; - /// The `Option` is in an invalid state for the operation attempted. - /// The `Option` is `None` while it should be `Some`. - const EOPTION_NOT_SET: u64 = 0x40001; - /// Cannot construct an option from a vector with 2 or more elements. - const EOPTION_VEC_TOO_LONG: u64 = 0x40002; - - /// Return an empty `Option` - public fun none(): Option { - Option { vec: vector::empty() } - } - spec none { - pragma opaque; - aborts_if false; - ensures result == spec_none(); - } - spec fun spec_none(): Option { - Option{ vec: vec() } - } - - /// Return an `Option` containing `e` - public fun some(e: Element): Option { - Option { vec: vector::singleton(e) } - } - spec some { - pragma opaque; - aborts_if false; - ensures result == spec_some(e); - } - spec fun spec_some(e: Element): Option { - Option{ vec: vec(e) } - } - - public fun from_vec(vec: vector): Option { - assert!(vector::length(&vec) <= 1, EOPTION_VEC_TOO_LONG); - Option { vec } - } - - spec from_vec { - aborts_if vector::length(vec) > 1; - } - - /// Return true if `self` does not hold a value - public fun is_none(self: &Option): bool { - vector::is_empty(&self.vec) - } - spec is_none { - pragma opaque; - aborts_if false; - ensures result == spec_is_none(self); - } - spec fun spec_is_none(self: Option): bool { - vector::is_empty(self.vec) - } - - /// Return true if `self` holds a value - public fun is_some(self: &Option): bool { - !vector::is_empty(&self.vec) - } - spec is_some { - pragma opaque; - aborts_if false; - ensures result == spec_is_some(self); - } - spec fun spec_is_some(self: Option): bool { - !vector::is_empty(self.vec) - } - - /// Return true if the value in `self` is equal to `e_ref` - /// Always returns `false` if `self` does not hold a value - public fun contains(self: &Option, e_ref: &Element): bool { - vector::contains(&self.vec, e_ref) - } - spec contains { - pragma opaque; - aborts_if false; - ensures result == spec_contains(self, e_ref); - } - spec fun spec_contains(self: Option, e: Element): bool { - is_some(self) && borrow(self) == e - } - - /// Return an immutable reference to the value inside `self` - /// Aborts if `self` does not hold a value - public fun borrow(self: &Option): &Element { - assert!(is_some(self), EOPTION_NOT_SET); - vector::borrow(&self.vec, 0) - } - spec borrow { - pragma opaque; - include AbortsIfNone; - ensures result == spec_borrow(self); - } - spec fun spec_borrow(self: Option): Element { - self.vec[0] - } - - /// Return a reference to the value inside `self` if it holds one - /// Return `default_ref` if `self` does not hold a value - public fun borrow_with_default(self: &Option, default_ref: &Element): &Element { - let vec_ref = &self.vec; - if (vector::is_empty(vec_ref)) default_ref - else vector::borrow(vec_ref, 0) - } - spec borrow_with_default { - pragma opaque; - aborts_if false; - ensures result == (if (spec_is_some(self)) spec_borrow(self) else default_ref); - } - - /// Return the value inside `self` if it holds one - /// Return `default` if `self` does not hold a value - public fun get_with_default( - self: &Option, - default: Element, - ): Element { - let vec_ref = &self.vec; - if (vector::is_empty(vec_ref)) default - else *vector::borrow(vec_ref, 0) - } - spec get_with_default { - pragma opaque; - aborts_if false; - ensures result == (if (spec_is_some(self)) spec_borrow(self) else default); - } - - /// Convert the none option `self` to a some option by adding `e`. - /// Aborts if `self` already holds a value - public fun fill(self: &mut Option, e: Element) { - let vec_ref = &mut self.vec; - if (vector::is_empty(vec_ref)) vector::push_back(vec_ref, e) - else abort EOPTION_IS_SET - } - spec fill { - pragma opaque; - aborts_if spec_is_some(self) with EOPTION_IS_SET; - ensures spec_is_some(self); - ensures spec_borrow(self) == e; - } - - /// Convert a `some` option to a `none` by removing and returning the value stored inside `self` - /// Aborts if `self` does not hold a value - public fun extract(self: &mut Option): Element { - assert!(is_some(self), EOPTION_NOT_SET); - vector::pop_back(&mut self.vec) - } - spec extract { - pragma opaque; - include AbortsIfNone; - ensures result == spec_borrow(old(self)); - ensures spec_is_none(self); - } - - /// Return a mutable reference to the value inside `self` - /// Aborts if `self` does not hold a value - public fun borrow_mut(self: &mut Option): &mut Element { - assert!(is_some(self), EOPTION_NOT_SET); - vector::borrow_mut(&mut self.vec, 0) - } - spec borrow_mut { - include AbortsIfNone; - ensures result == spec_borrow(self); - ensures self == old(self); - } - - /// Swap the old value inside `self` with `e` and return the old value - /// Aborts if `self` does not hold a value - public fun swap(self: &mut Option, e: Element): Element { - assert!(is_some(self), EOPTION_NOT_SET); - let vec_ref = &mut self.vec; - let old_value = vector::pop_back(vec_ref); - vector::push_back(vec_ref, e); - old_value - } - spec swap { - pragma opaque; - include AbortsIfNone; - ensures result == spec_borrow(old(self)); - ensures spec_is_some(self); - ensures spec_borrow(self) == e; - } - - /// Swap the old value inside `self` with `e` and return the old value; - /// or if there is no old value, fill it with `e`. - /// Different from swap(), swap_or_fill() allows for `self` not holding a value. - public fun swap_or_fill(self: &mut Option, e: Element): Option { - let vec_ref = &mut self.vec; - let old_value = if (vector::is_empty(vec_ref)) none() - else some(vector::pop_back(vec_ref)); - vector::push_back(vec_ref, e); - old_value - } - spec swap_or_fill { - pragma opaque; - aborts_if false; - ensures result == old(self); - ensures spec_borrow(self) == e; - } - - /// Destroys `self.` If `self` holds a value, return it. Returns `default` otherwise - public fun destroy_with_default(self: Option, default: Element): Element { - let Option { vec } = self; - if (vector::is_empty(&mut vec)) default - else vector::pop_back(&mut vec) - } - spec destroy_with_default { - pragma opaque; - aborts_if false; - ensures result == (if (spec_is_some(self)) spec_borrow(self) else default); - } - - /// Unpack `self` and return its contents - /// Aborts if `self` does not hold a value - public fun destroy_some(self: Option): Element { - assert!(is_some(&self), EOPTION_NOT_SET); - let Option { vec } = self; - let elem = vector::pop_back(&mut vec); - vector::destroy_empty(vec); - elem - } - spec destroy_some { - pragma opaque; - include AbortsIfNone; - ensures result == spec_borrow(self); - } - - /// Unpack `self` - /// Aborts if `self` holds a value - public fun destroy_none(self: Option) { - assert!(is_none(&self), EOPTION_IS_SET); - let Option { vec } = self; - vector::destroy_empty(vec) - } - spec destroy_none { - pragma opaque; - aborts_if spec_is_some(self) with EOPTION_IS_SET; - } - - /// Convert `self` into a vector of length 1 if it is `Some`, - /// and an empty vector otherwise - public fun to_vec(self: Option): vector { - let Option { vec } = self; - vec - } - spec to_vec { - pragma opaque; - aborts_if false; - ensures result == self.vec; - } - /// Apply the function to the optional element, consuming it. Does nothing if no value present. - public inline fun for_each(self: Option, f: |Element|) { - if (is_some(&self)) { - f(destroy_some(self)) - } else { - destroy_none(self) - } - } - - /// Apply the function to the optional element reference. Does nothing if no value present. - public inline fun for_each_ref(self: &Option, f: |&Element|) { - if (is_some(self)) { - f(borrow(self)) - } - } - - /// Apply the function to the optional element reference. Does nothing if no value present. - public inline fun for_each_mut(self: &mut Option, f: |&mut Element|) { - if (is_some(self)) { - f(borrow_mut(self)) - } - } - - /// Folds the function over the optional element. - public inline fun fold( - self: Option, - init: Accumulator, - f: |Accumulator,Element|Accumulator - ): Accumulator { - if (is_some(&self)) { - f(init, destroy_some(self)) - } else { - destroy_none(self); - init - } - } - - /// Maps the content of an option. - public inline fun map(self: Option, f: |Element|OtherElement): Option { - if (is_some(&self)) { - some(f(destroy_some(self))) - } else { - destroy_none(self); - none() - } - } - - /// Maps the content of an option without destroying the original option. - public inline fun map_ref( - self: &Option, f: |&Element|OtherElement): Option { - if (is_some(self)) { - some(f(borrow(self))) - } else { - none() - } - } - - /// Filters the content of an option - public inline fun filter(self: Option, f: |&Element|bool): Option { - if (is_some(&self) && f(borrow(&self))) { - self - } else { - none() - } - } - - /// Returns true if the option contains an element which satisfies predicate. - public inline fun any(self: &Option, p: |&Element|bool): bool { - is_some(self) && p(borrow(self)) - } - - /// Utility function to destroy an option that is not droppable. - public inline fun destroy(self: Option, d: |Element|) { - let vec = to_vec(self); - vector::destroy(vec, |e| d(e)); - } - - spec module {} // switch documentation context back to module level - - spec module { - pragma aborts_if_is_strict; - } - - /// # Helper Schema - - spec schema AbortsIfNone { - self: Option; - aborts_if spec_is_none(self) with EOPTION_NOT_SET; - } -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/MoveStdlib/signer.move b/examples/oft-movement/build/oft/sources/dependencies/MoveStdlib/signer.move deleted file mode 100644 index c2e3ab3f5..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/MoveStdlib/signer.move +++ /dev/null @@ -1,21 +0,0 @@ -module std::signer { - /// Borrows the address of the signer - /// Conceptually, you can think of the `signer` as being a struct wrapper around an - /// address - /// ``` - /// struct signer has drop { addr: address } - /// ``` - /// `borrow_address` borrows this inner field - native public fun borrow_address(s: &signer): &address; - - // Copies the address of the signer - public fun address_of(s: &signer): address { - *borrow_address(s) - } - - /// Return true only if `s` is a transaction signer. This is a spec function only available in spec. - spec native fun is_txn_signer(s: signer): bool; - - /// Return true only if `a` is a transaction signer address. This is a spec function only available in spec. - spec native fun is_txn_signer_addr(a: address): bool; -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/MoveStdlib/string.move b/examples/oft-movement/build/oft/sources/dependencies/MoveStdlib/string.move deleted file mode 100644 index 549aa2380..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/MoveStdlib/string.move +++ /dev/null @@ -1,93 +0,0 @@ -/// The `string` module defines the `String` type which represents UTF8 encoded strings. -module std::string { - use std::vector; - use std::option::{Self, Option}; - - /// An invalid UTF8 encoding. - const EINVALID_UTF8: u64 = 1; - - /// Index out of range. - const EINVALID_INDEX: u64 = 2; - - /// A `String` holds a sequence of bytes which is guaranteed to be in utf8 format. - struct String has copy, drop, store { - bytes: vector, - } - - /// Creates a new string from a sequence of bytes. Aborts if the bytes do not represent valid utf8. - public fun utf8(bytes: vector): String { - assert!(internal_check_utf8(&bytes), EINVALID_UTF8); - String{bytes} - } - - /// Tries to create a new string from a sequence of bytes. - public fun try_utf8(bytes: vector): Option { - if (internal_check_utf8(&bytes)) { - option::some(String{bytes}) - } else { - option::none() - } - } - - /// Returns a reference to the underlying byte vector. - public fun bytes(self: &String): &vector { - &self.bytes - } - - /// Checks whether this string is empty. - public fun is_empty(self: &String): bool { - vector::is_empty(&self.bytes) - } - - /// Returns the length of this string, in bytes. - public fun length(self: &String): u64 { - vector::length(&self.bytes) - } - - /// Appends a string. - public fun append(self: &mut String, r: String) { - vector::append(&mut self.bytes, r.bytes) - } - - /// Appends bytes which must be in valid utf8 format. - public fun append_utf8(self: &mut String, bytes: vector) { - append(self, utf8(bytes)) - } - - /// Insert the other string at the byte index in given string. The index must be at a valid utf8 char - /// boundary. - public fun insert(self: &mut String, at: u64, o: String) { - let bytes = &self.bytes; - assert!(at <= vector::length(bytes) && internal_is_char_boundary(bytes, at), EINVALID_INDEX); - let l = length(self); - let front = sub_string(self, 0, at); - let end = sub_string(self, at, l); - append(&mut front, o); - append(&mut front, end); - *self = front; - } - - /// Returns a sub-string using the given byte indices, where `i` is the first byte position and `j` is the start - /// of the first byte not included (or the length of the string). The indices must be at valid utf8 char boundaries, - /// guaranteeing that the result is valid utf8. - public fun sub_string(self: &String, i: u64, j: u64): String { - let bytes = &self.bytes; - let l = vector::length(bytes); - assert!( - j <= l && i <= j && internal_is_char_boundary(bytes, i) && internal_is_char_boundary(bytes, j), - EINVALID_INDEX - ); - String { bytes: internal_sub_string(bytes, i, j) } - } - - /// Computes the index of the first occurrence of a string. Returns `length(s)` if no occurrence found. - public fun index_of(self: &String, r: &String): u64 { - internal_index_of(&self.bytes, &r.bytes) - } - - // Native API - public native fun internal_check_utf8(v: &vector): bool; - native fun internal_is_char_boundary(v: &vector, i: u64): bool; - native fun internal_sub_string(v: &vector, i: u64, j: u64): vector; - native fun internal_index_of(v: &vector, r: &vector): u64; -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/MoveStdlib/vector.move b/examples/oft-movement/build/oft/sources/dependencies/MoveStdlib/vector.move deleted file mode 100644 index b7add1eb2..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/MoveStdlib/vector.move +++ /dev/null @@ -1,770 +0,0 @@ -/// A variable-sized container that can hold any type. Indexing is 0-based, and -/// vectors are growable. This module has many native functions. -/// Verification of modules that use this one uses model functions that are implemented -/// directly in Boogie. The specification language has built-in functions operations such -/// as `singleton_vector`. There are some helper functions defined here for specifications in other -/// modules as well. -/// -/// >Note: We did not verify most of the -/// Move functions here because many have loops, requiring loop invariants to prove, and -/// the return on investment didn't seem worth it for these simple functions. -module std::vector { - // use std::mem; - - /// The index into the vector is out of bounds - const EINDEX_OUT_OF_BOUNDS: u64 = 0x20000; - - /// The index into the vector is out of bounds - const EINVALID_RANGE: u64 = 0x20001; - - /// The length of the vectors are not equal. - const EVECTORS_LENGTH_MISMATCH: u64 = 0x20002; - - /// The step provided in `range` is invalid, must be greater than zero. - const EINVALID_STEP: u64 = 0x20003; - - /// The range in `slice` is invalid. - const EINVALID_SLICE_RANGE: u64 = 0x20004; - - /// Whether to utilize native vector::move_range - /// Vector module cannot call features module, due to cyclic dependency, - /// so this is a constant. - const USE_MOVE_RANGE: bool = true; - - #[bytecode_instruction] - /// Create an empty vector. - native public fun empty(): vector; - - #[bytecode_instruction] - /// Return the length of the vector. - native public fun length(self: &vector): u64; - - #[bytecode_instruction] - /// Acquire an immutable reference to the `i`th element of the vector `self`. - /// Aborts if `i` is out of bounds. - native public fun borrow(self: &vector, i: u64): ∈ - - #[bytecode_instruction] - /// Add element `e` to the end of the vector `self`. - native public fun push_back(self: &mut vector, e: Element); - - #[bytecode_instruction] - /// Return a mutable reference to the `i`th element in the vector `self`. - /// Aborts if `i` is out of bounds. - native public fun borrow_mut(self: &mut vector, i: u64): &mut Element; - - #[bytecode_instruction] - /// Pop an element from the end of vector `self`. - /// Aborts if `self` is empty. - native public fun pop_back(self: &mut vector): Element; - - #[bytecode_instruction] - /// Destroy the vector `self`. - /// Aborts if `self` is not empty. - native public fun destroy_empty(self: vector); - - #[bytecode_instruction] - /// Swaps the elements at the `i`th and `j`th indices in the vector `self`. - /// Aborts if `i` or `j` is out of bounds. - native public fun swap(self: &mut vector, i: u64, j: u64); - - // TODO - function `move_range` here is `public(friend)` for one release, - // and to be changed to `public` one release later. - #[test_only] - friend std::vector_tests; - - /// Moves range of elements `[removal_position, removal_position + length)` from vector `from`, - /// to vector `to`, inserting them starting at the `insert_position`. - /// In the `from` vector, elements after the selected range are moved left to fill the hole - /// (i.e. range is removed, while the order of the rest of the elements is kept) - /// In the `to` vector, elements after the `insert_position` are moved to the right to make - /// space for new elements (i.e. range is inserted, while the order of the rest of the - /// elements is kept). - /// Move prevents from having two mutable references to the same value, so `from` and `to` - /// vectors are always distinct. - native public(friend) fun move_range( - from: &mut vector, - removal_position: u64, - length: u64, - to: &mut vector, - insert_position: u64 - ); - - /// Return an vector of size one containing element `e`. - public fun singleton(e: Element): vector { - let v = empty(); - push_back(&mut v, e); - v - } - spec singleton { - aborts_if false; - ensures result == vec(e); - } - - /// Reverses the order of the elements in the vector `self` in place. - public fun reverse(self: &mut vector) { - let len = length(self); - reverse_slice(self, 0, len); - } - - spec reverse { - pragma intrinsic = true; - } - - /// Reverses the order of the elements [left, right) in the vector `self` in place. - public fun reverse_slice(self: &mut vector, left: u64, right: u64) { - assert!(left <= right, EINVALID_RANGE); - if (left == right) return; - right = right - 1; - while (left < right) { - swap(self, left, right); - left = left + 1; - right = right - 1; - } - } - spec reverse_slice { - pragma intrinsic = true; - } - - /// Pushes all of the elements of the `other` vector into the `self` vector. - public fun append(self: &mut vector, other: vector) { - if (USE_MOVE_RANGE) { - let self_length = length(self); - let other_length = length(&other); - move_range(&mut other, 0, other_length, self, self_length); - destroy_empty(other); - } else { - reverse(&mut other); - reverse_append(self, other); - } - } - spec append { - pragma intrinsic = true; - } - spec is_empty { - pragma intrinsic = true; - } - - /// Pushes all of the elements of the `other` vector into the `self` vector. - public fun reverse_append(self: &mut vector, other: vector) { - let len = length(&other); - while (len > 0) { - push_back(self, pop_back(&mut other)); - len = len - 1; - }; - destroy_empty(other); - } - spec reverse_append { - pragma intrinsic = true; - } - - /// Splits (trims) the collection into two at the given index. - /// Returns a newly allocated vector containing the elements in the range [new_len, len). - /// After the call, the original vector will be left containing the elements [0, new_len) - /// with its previous capacity unchanged. - /// In many languages this is also called `split_off`. - public fun trim(self: &mut vector, new_len: u64): vector { - let len = length(self); - assert!(new_len <= len, EINDEX_OUT_OF_BOUNDS); - - let other = empty(); - if (USE_MOVE_RANGE) { - move_range(self, new_len, len - new_len, &mut other, 0); - } else { - while (len > new_len) { - push_back(&mut other, pop_back(self)); - len = len - 1; - }; - reverse(&mut other); - }; - - other - } - spec trim { - pragma intrinsic = true; - } - - /// Trim a vector to a smaller size, returning the evicted elements in reverse order - public fun trim_reverse(self: &mut vector, new_len: u64): vector { - let len = length(self); - assert!(new_len <= len, EINDEX_OUT_OF_BOUNDS); - let result = empty(); - while (new_len < len) { - push_back(&mut result, pop_back(self)); - len = len - 1; - }; - result - } - spec trim_reverse { - pragma intrinsic = true; - } - - - /// Return `true` if the vector `self` has no elements and `false` otherwise. - public fun is_empty(self: &vector): bool { - length(self) == 0 - } - - /// Return true if `e` is in the vector `self`. - public fun contains(self: &vector, e: &Element): bool { - let i = 0; - let len = length(self); - while (i < len) { - if (borrow(self, i) == e) return true; - i = i + 1; - }; - false - } - spec contains { - pragma intrinsic = true; - } - - /// Return `(true, i)` if `e` is in the vector `self` at index `i`. - /// Otherwise, returns `(false, 0)`. - public fun index_of(self: &vector, e: &Element): (bool, u64) { - let i = 0; - let len = length(self); - while (i < len) { - if (borrow(self, i) == e) return (true, i); - i = i + 1; - }; - (false, 0) - } - spec index_of { - pragma intrinsic = true; - } - - /// Return `(true, i)` if there's an element that matches the predicate. If there are multiple elements that match - /// the predicate, only the index of the first one is returned. - /// Otherwise, returns `(false, 0)`. - public inline fun find(self: &vector, f: |&Element|bool): (bool, u64) { - let find = false; - let found_index = 0; - let i = 0; - let len = length(self); - while (i < len) { - // Cannot call return in an inline function so we need to resort to break here. - if (f(borrow(self, i))) { - find = true; - found_index = i; - break - }; - i = i + 1; - }; - (find, found_index) - } - - /// Insert a new element at position 0 <= i <= length, using O(length - i) time. - /// Aborts if out of bounds. - public fun insert(self: &mut vector, i: u64, e: Element) { - let len = length(self); - assert!(i <= len, EINDEX_OUT_OF_BOUNDS); - - if (USE_MOVE_RANGE) { - if (i + 2 >= len) { - // When we are close to the end, it is cheaper to not create - // a temporary vector, and swap directly - push_back(self, e); - while (i < len) { - swap(self, i, len); - i = i + 1; - }; - } else { - let other = singleton(e); - move_range(&mut other, 0, 1, self, i); - destroy_empty(other); - } - } else { - push_back(self, e); - while (i < len) { - swap(self, i, len); - i = i + 1; - }; - }; - } - spec insert { - pragma intrinsic = true; - } - - /// Remove the `i`th element of the vector `self`, shifting all subsequent elements. - /// This is O(n) and preserves ordering of elements in the vector. - /// Aborts if `i` is out of bounds. - public fun remove(self: &mut vector, i: u64): Element { - let len = length(self); - // i out of bounds; abort - if (i >= len) abort EINDEX_OUT_OF_BOUNDS; - - if (USE_MOVE_RANGE) { - // When we are close to the end, it is cheaper to not create - // a temporary vector, and swap directly - if (i + 3 >= len) { - len = len - 1; - while (i < len) swap(self, i, { i = i + 1; i }); - pop_back(self) - } else { - let other = empty(); - move_range(self, i, 1, &mut other, 0); - let result = pop_back(&mut other); - destroy_empty(other); - result - } - } else { - len = len - 1; - while (i < len) swap(self, i, { i = i + 1; i }); - pop_back(self) - } - } - spec remove { - pragma intrinsic = true; - } - - /// Remove the first occurrence of a given value in the vector `self` and return it in a vector, shifting all - /// subsequent elements. - /// This is O(n) and preserves ordering of elements in the vector. - /// This returns an empty vector if the value isn't present in the vector. - /// Note that this cannot return an option as option uses vector and there'd be a circular dependency between option - /// and vector. - public fun remove_value(self: &mut vector, val: &Element): vector { - // This doesn't cost a O(2N) run time as index_of scans from left to right and stops when the element is found, - // while remove would continue from the identified index to the end of the vector. - let (found, index) = index_of(self, val); - if (found) { - vector[remove(self, index)] - } else { - vector[] - } - } - spec remove_value { - pragma intrinsic = true; - } - - /// Swap the `i`th element of the vector `self` with the last element and then pop the vector. - /// This is O(1), but does not preserve ordering of elements in the vector. - /// Aborts if `i` is out of bounds. - public fun swap_remove(self: &mut vector, i: u64): Element { - assert!(!is_empty(self), EINDEX_OUT_OF_BOUNDS); - let last_idx = length(self) - 1; - swap(self, i, last_idx); - pop_back(self) - } - spec swap_remove { - pragma intrinsic = true; - } - - /// Replace the `i`th element of the vector `self` with the given value, and return - /// to the caller the value that was there before. - /// Aborts if `i` is out of bounds. - public fun replace(self: &mut vector, i: u64, val: Element): Element { - let last_idx = length(self); - assert!(i < last_idx, EINDEX_OUT_OF_BOUNDS); - // TODO: Enable after tests are fixed. - // if (USE_MOVE_RANGE) { - // mem::replace(borrow_mut(self, i), val) - // } else { - push_back(self, val); - swap(self, i, last_idx); - pop_back(self) - // } - } - - /// Apply the function to each element in the vector, consuming it. - public inline fun for_each(self: vector, f: |Element|) { - reverse(&mut self); // We need to reverse the vector to consume it efficiently - for_each_reverse(self, |e| f(e)); - } - - /// Apply the function to each element in the vector, consuming it. - public inline fun for_each_reverse(self: vector, f: |Element|) { - let len = length(&self); - while (len > 0) { - f(pop_back(&mut self)); - len = len - 1; - }; - destroy_empty(self) - } - - /// Apply the function to a reference of each element in the vector. - public inline fun for_each_ref(self: &vector, f: |&Element|) { - let i = 0; - let len = length(self); - while (i < len) { - f(borrow(self, i)); - i = i + 1 - } - } - - /// Apply the function to each pair of elements in the two given vectors, consuming them. - public inline fun zip(self: vector, v2: vector, f: |Element1, Element2|) { - // We need to reverse the vectors to consume it efficiently - reverse(&mut self); - reverse(&mut v2); - zip_reverse(self, v2, |e1, e2| f(e1, e2)); - } - - /// Apply the function to each pair of elements in the two given vectors in the reverse order, consuming them. - /// This errors out if the vectors are not of the same length. - public inline fun zip_reverse( - self: vector, - v2: vector, - f: |Element1, Element2|, - ) { - let len = length(&self); - // We can't use the constant EVECTORS_LENGTH_MISMATCH here as all calling code would then need to define it - // due to how inline functions work. - assert!(len == length(&v2), 0x20002); - while (len > 0) { - f(pop_back(&mut self), pop_back(&mut v2)); - len = len - 1; - }; - destroy_empty(self); - destroy_empty(v2); - } - - /// Apply the function to the references of each pair of elements in the two given vectors. - /// This errors out if the vectors are not of the same length. - public inline fun zip_ref( - self: &vector, - v2: &vector, - f: |&Element1, &Element2|, - ) { - let len = length(self); - // We can't use the constant EVECTORS_LENGTH_MISMATCH here as all calling code would then need to define it - // due to how inline functions work. - assert!(len == length(v2), 0x20002); - let i = 0; - while (i < len) { - f(borrow(self, i), borrow(v2, i)); - i = i + 1 - } - } - - /// Apply the function to a reference of each element in the vector with its index. - public inline fun enumerate_ref(self: &vector, f: |u64, &Element|) { - let i = 0; - let len = length(self); - while (i < len) { - f(i, borrow(self, i)); - i = i + 1; - }; - } - - /// Apply the function to a mutable reference to each element in the vector. - public inline fun for_each_mut(self: &mut vector, f: |&mut Element|) { - let i = 0; - let len = length(self); - while (i < len) { - f(borrow_mut(self, i)); - i = i + 1 - } - } - - /// Apply the function to mutable references to each pair of elements in the two given vectors. - /// This errors out if the vectors are not of the same length. - public inline fun zip_mut( - self: &mut vector, - v2: &mut vector, - f: |&mut Element1, &mut Element2|, - ) { - let i = 0; - let len = length(self); - // We can't use the constant EVECTORS_LENGTH_MISMATCH here as all calling code would then need to define it - // due to how inline functions work. - assert!(len == length(v2), 0x20002); - while (i < len) { - f(borrow_mut(self, i), borrow_mut(v2, i)); - i = i + 1 - } - } - - /// Apply the function to a mutable reference of each element in the vector with its index. - public inline fun enumerate_mut(self: &mut vector, f: |u64, &mut Element|) { - let i = 0; - let len = length(self); - while (i < len) { - f(i, borrow_mut(self, i)); - i = i + 1; - }; - } - - /// Fold the function over the elements. For example, `fold(vector[1,2,3], 0, f)` will execute - /// `f(f(f(0, 1), 2), 3)` - public inline fun fold( - self: vector, - init: Accumulator, - f: |Accumulator,Element|Accumulator - ): Accumulator { - let accu = init; - for_each(self, |elem| accu = f(accu, elem)); - accu - } - - /// Fold right like fold above but working right to left. For example, `fold(vector[1,2,3], 0, f)` will execute - /// `f(1, f(2, f(3, 0)))` - public inline fun foldr( - self: vector, - init: Accumulator, - f: |Element, Accumulator|Accumulator - ): Accumulator { - let accu = init; - for_each_reverse(self, |elem| accu = f(elem, accu)); - accu - } - - /// Map the function over the references of the elements of the vector, producing a new vector without modifying the - /// original vector. - public inline fun map_ref( - self: &vector, - f: |&Element|NewElement - ): vector { - let result = vector[]; - for_each_ref(self, |elem| push_back(&mut result, f(elem))); - result - } - - /// Map the function over the references of the element pairs of two vectors, producing a new vector from the return - /// values without modifying the original vectors. - public inline fun zip_map_ref( - self: &vector, - v2: &vector, - f: |&Element1, &Element2|NewElement - ): vector { - // We can't use the constant EVECTORS_LENGTH_MISMATCH here as all calling code would then need to define it - // due to how inline functions work. - assert!(length(self) == length(v2), 0x20002); - - let result = vector[]; - zip_ref(self, v2, |e1, e2| push_back(&mut result, f(e1, e2))); - result - } - - /// Map the function over the elements of the vector, producing a new vector. - public inline fun map( - self: vector, - f: |Element|NewElement - ): vector { - let result = vector[]; - for_each(self, |elem| push_back(&mut result, f(elem))); - result - } - - /// Map the function over the element pairs of the two vectors, producing a new vector. - public inline fun zip_map( - self: vector, - v2: vector, - f: |Element1, Element2|NewElement - ): vector { - // We can't use the constant EVECTORS_LENGTH_MISMATCH here as all calling code would then need to define it - // due to how inline functions work. - assert!(length(&self) == length(&v2), 0x20002); - - let result = vector[]; - zip(self, v2, |e1, e2| push_back(&mut result, f(e1, e2))); - result - } - - /// Filter the vector using the boolean function, removing all elements for which `p(e)` is not true. - public inline fun filter( - self: vector, - p: |&Element|bool - ): vector { - let result = vector[]; - for_each(self, |elem| { - if (p(&elem)) push_back(&mut result, elem); - }); - result - } - - /// Partition, sorts all elements for which pred is true to the front. - /// Preserves the relative order of the elements for which pred is true, - /// BUT NOT for the elements for which pred is false. - public inline fun partition( - self: &mut vector, - pred: |&Element|bool - ): u64 { - let i = 0; - let len = length(self); - while (i < len) { - if (!pred(borrow(self, i))) break; - i = i + 1; - }; - let p = i; - i = i + 1; - while (i < len) { - if (pred(borrow(self, i))) { - swap(self, p, i); - p = p + 1; - }; - i = i + 1; - }; - p - } - - /// rotate(&mut [1, 2, 3, 4, 5], 2) -> [3, 4, 5, 1, 2] in place, returns the split point - /// ie. 3 in the example above - public fun rotate( - self: &mut vector, - rot: u64 - ): u64 { - let len = length(self); - rotate_slice(self, 0, rot, len) - } - spec rotate { - pragma intrinsic = true; - } - - /// Same as above but on a sub-slice of an array [left, right) with left <= rot <= right - /// returns the - public fun rotate_slice( - self: &mut vector, - left: u64, - rot: u64, - right: u64 - ): u64 { - reverse_slice(self, left, rot); - reverse_slice(self, rot, right); - reverse_slice(self, left, right); - left + (right - rot) - } - spec rotate_slice { - pragma intrinsic = true; - } - - /// Partition the array based on a predicate p, this routine is stable and thus - /// preserves the relative order of the elements in the two partitions. - public inline fun stable_partition( - self: &mut vector, - p: |&Element|bool - ): u64 { - let len = length(self); - let t = empty(); - let f = empty(); - while (len > 0) { - let e = pop_back(self); - if (p(&e)) { - push_back(&mut t, e); - } else { - push_back(&mut f, e); - }; - len = len - 1; - }; - let pos = length(&t); - reverse_append(self, t); - reverse_append(self, f); - pos - } - - /// Return true if any element in the vector satisfies the predicate. - public inline fun any( - self: &vector, - p: |&Element|bool - ): bool { - let result = false; - let i = 0; - while (i < length(self)) { - result = p(borrow(self, i)); - if (result) { - break - }; - i = i + 1 - }; - result - } - - /// Return true if all elements in the vector satisfy the predicate. - public inline fun all( - self: &vector, - p: |&Element|bool - ): bool { - let result = true; - let i = 0; - while (i < length(self)) { - result = p(borrow(self, i)); - if (!result) { - break - }; - i = i + 1 - }; - result - } - - /// Destroy a vector, just a wrapper around for_each_reverse with a descriptive name - /// when used in the context of destroying a vector. - public inline fun destroy( - self: vector, - d: |Element| - ) { - for_each_reverse(self, |e| d(e)) - } - - public fun range(start: u64, end: u64): vector { - range_with_step(start, end, 1) - } - - public fun range_with_step(start: u64, end: u64, step: u64): vector { - assert!(step > 0, EINVALID_STEP); - - let vec = vector[]; - while (start < end) { - push_back(&mut vec, start); - start = start + step; - }; - vec - } - - public fun slice( - self: &vector, - start: u64, - end: u64 - ): vector { - assert!(start <= end && end <= length(self), EINVALID_SLICE_RANGE); - - let vec = vector[]; - while (start < end) { - push_back(&mut vec, *borrow(self, start)); - start = start + 1; - }; - vec - } - - // ================================================================= - // Module Specification - - spec module {} // Switch to module documentation context - - /// # Helper Functions - - spec module { - /// Check if `self` is equal to the result of adding `e` at the end of `v2` - fun eq_push_back(self: vector, v2: vector, e: Element): bool { - len(self) == len(v2) + 1 && - self[len(self)-1] == e && - self[0..len(self)-1] == v2[0..len(v2)] - } - - /// Check if `self` is equal to the result of concatenating `v1` and `v2` - fun eq_append(self: vector, v1: vector, v2: vector): bool { - len(self) == len(v1) + len(v2) && - self[0..len(v1)] == v1 && - self[len(v1)..len(self)] == v2 - } - - /// Check `self` is equal to the result of removing the first element of `v2` - fun eq_pop_front(self: vector, v2: vector): bool { - len(self) + 1 == len(v2) && - self == v2[1..len(v2)] - } - - /// Check that `v1` is equal to the result of removing the element at index `i` from `v2`. - fun eq_remove_elem_at_index(i: u64, v1: vector, v2: vector): bool { - len(v1) + 1 == len(v2) && - v1[0..i] == v2[0..i] && - v1[i..len(v1)] == v2[i + 1..len(v2)] - } - - /// Check if `self` contains `e`. - fun spec_contains(self: vector, e: Element): bool { - exists x in self: x == e - } - } - -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/blocked_msglib/router_calls.move b/examples/oft-movement/build/oft/sources/dependencies/blocked_msglib/router_calls.move deleted file mode 100644 index aaae26881..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/blocked_msglib/router_calls.move +++ /dev/null @@ -1,66 +0,0 @@ -module blocked_msglib::router_calls { - use std::any::Any; - use std::fungible_asset::FungibleAsset; - use std::option::Option; - - use endpoint_v2_common::bytes32::Bytes32; - use endpoint_v2_common::contract_identity::DynamicCallRef; - use endpoint_v2_common::packet_raw::RawPacket; - use endpoint_v2_common::send_packet::SendPacket; - - const ENOT_IMPLEMENTED: u64 = 1; - - public fun quote( - _packet: SendPacket, - _options: vector, - _pay_in_zro: bool, - ): (u64, u64) { - abort ENOT_IMPLEMENTED - } - - public fun send( - _call_ref: &DynamicCallRef, - _packet: SendPacket, - _options: vector, - _native_token: &mut FungibleAsset, - _zro_token: &mut Option, - ): (u64, u64, RawPacket) { - abort ENOT_IMPLEMENTED - } - - public fun commit_verification( - _call_ref: &DynamicCallRef, - _packet_header: RawPacket, - _payload_hash: Bytes32, - ): (address, u32, Bytes32, u64) { - abort ENOT_IMPLEMENTED - } - - public fun dvn_verify(_call_ref: &DynamicCallRef, _params: Any) { - abort ENOT_IMPLEMENTED - } - - public fun set_config(_call_ref: &DynamicCallRef, _oapp: address, _config_type: u32, _config: vector) { - abort ENOT_IMPLEMENTED - } - - #[view] - public fun get_config(_oapp: address, _eid: u32, _config_type: u32): vector { - abort ENOT_IMPLEMENTED - } - - #[view] - public fun version(): (u64 /*major*/, u8 /*minor*/, u8 /*endpoint_version*/) { - (0xffffffffffffffff, 0xff, 2) - } - - #[view] - public fun is_supported_send_eid(_eid: u32): bool { - true - } - - #[view] - public fun is_supported_receive_eid(_eid: u32): bool { - true - } -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/dvn_fee_lib_0/dvn_fee_lib.move b/examples/oft-movement/build/oft/sources/dependencies/dvn_fee_lib_0/dvn_fee_lib.move deleted file mode 100644 index f581488aa..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/dvn_fee_lib_0/dvn_fee_lib.move +++ /dev/null @@ -1,122 +0,0 @@ -module dvn_fee_lib_0::dvn_fee_lib { - use msglib_types::worker_options::DVN_WORKER_ID; - use price_feed_router_0::router as price_feed_router; - use worker_common::multisig; - use worker_common::worker_config; - - #[test_only] - friend dvn_fee_lib_0::dvn_fee_lib_tests; - - const EXECUTE_FIXED_BYTES: u64 = 68; - const SIGNATURE_RAW_BYTES: u64 = 65; - const VERIFY_BYTES: u64 = 320; - - #[view] - // Get the total fee, including premiums for a DVN worker to verify a message - public fun get_dvn_fee( - msglib: address, - worker: address, - dst_eid: u32, - sender: address, - _packet_header: vector, - _payload_hash: vector, - _confirmations: u64, - _options: vector, - ): (u64, address) { - worker_config::assert_fee_lib_supports_transaction(worker, DVN_WORKER_ID(), sender, msglib); - let calldata_size = get_calldata_size_for_fee(worker); - - let fee = get_dvn_fee_internal( - worker, - dst_eid, - // Price Feed Estimate Fee on Send - partially applying parameters available in scope - |price_feed, feed_address, total_gas| price_feed_router::estimate_fee_on_send( - price_feed, - feed_address, - dst_eid, - calldata_size, - total_gas, - ) - ); - - let deposit_address = worker_config::get_deposit_address(worker); - (fee, deposit_address) - } - - /// Get the total fee, including premiums for a DVN packet, while ensuring that this feelib is supported by the - /// worker, the sender is allowed, and the worker is unpaused - /// - /// @param worker_address: The address of the worker - /// @param dst_eid: The destination EID - /// @param estimate_fee_on_send: fee estimator (via price feed, with partially applied parameters) - /// |price_feed, feed_address, total_gas| (fee, price ratio, denominator, native token price in USD) - public(friend) inline fun get_dvn_fee_internal( - worker_address: address, - dst_eid: u32, - estimate_fee_on_send: |address, address, u128| (u128, u128, u128, u128), - ): u64 { - let (gas, multiplier_bps, floor_margin_usd) = worker_config::get_dvn_dst_config_values(worker_address, dst_eid); - assert!(gas != 0, err_EDVN_EID_NOT_SUPPORTED()); - - let (price_feed_module, feed_address) = worker_config::get_effective_price_feed(worker_address); - let (chain_fee, _, _, native_price_usd) = estimate_fee_on_send( - price_feed_module, - feed_address, - (gas as u128) - ); - - let default_multiplier_bps = worker_config::get_default_multiplier_bps(worker_address); - let native_decimals_rate = worker_config::get_native_decimals_rate(); - - (apply_premium( - chain_fee, - native_price_usd, - multiplier_bps, - floor_margin_usd, - default_multiplier_bps, - native_decimals_rate, - ) as u64) - } - - /// Apply the premium to the fee. It takes the higher of using the multiplier or the floor margin - public(friend) fun apply_premium( - chain_fee: u128, - native_price_usd: u128, // in native_decimals_rate - multiplier_bps: u16, - floor_margin_usd: u128, - default_multiplier_bps: u16, - native_decimals_rate: u128, - ): u128 { - let multiplier_bps = if (multiplier_bps == 0) default_multiplier_bps else multiplier_bps; - // multiplier bps is 1e5 e.g. 12000 is 120% - let fee_with_multiplier = chain_fee * (multiplier_bps as u128) / 10000; - - if (native_price_usd == 0 || floor_margin_usd == 0) { - return fee_with_multiplier - }; - - let fee_with_floor_margin = chain_fee + (floor_margin_usd * native_decimals_rate) / native_price_usd; - - if (fee_with_floor_margin > fee_with_multiplier) { fee_with_floor_margin } else { fee_with_multiplier } - } - - // =================================================== Internal =================================================== - - /// Get the calldata size for a fee; this scales with the number of quorum signatures required - public(friend) fun get_calldata_size_for_fee(worker_address: address): u64 { - let quorum = multisig::get_quorum(worker_address); - - let total_signature_bytes: u64 = quorum * SIGNATURE_RAW_BYTES; - if (total_signature_bytes % 32 != 0) { - total_signature_bytes = total_signature_bytes - (total_signature_bytes % 32) + 32; - }; - // Total includes 64 byte overhead - EXECUTE_FIXED_BYTES + VERIFY_BYTES + total_signature_bytes + 64 - } - - // ================================================== Error Codes ================================================= - - const EDVN_EID_NOT_SUPPORTED: u64 = 1; - - public(friend) fun err_EDVN_EID_NOT_SUPPORTED(): u64 { EDVN_EID_NOT_SUPPORTED } -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/dvn_fee_lib_router_0/dvn_fee_lib_router.move b/examples/oft-movement/build/oft/sources/dependencies/dvn_fee_lib_router_0/dvn_fee_lib_router.move deleted file mode 100644 index d244cd238..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/dvn_fee_lib_router_0/dvn_fee_lib_router.move +++ /dev/null @@ -1,40 +0,0 @@ -module dvn_fee_lib_router_0::dvn_fee_lib_router { - use dvn_fee_lib_router_1::dvn_fee_lib_router as dvn_fee_lib_router_next; - - public fun get_dvn_fee( - msglib: address, - dvn_fee_lib: address, - worker: address, - dst_eid: u32, - sender: address, - packet_header: vector, - payload_hash: vector, - confirmations: u64, - options: vector, - ): (u64, address) { - if (dvn_fee_lib == @dvn_fee_lib_0) { - dvn_fee_lib_0::dvn_fee_lib::get_dvn_fee( - msglib, - worker, - dst_eid, - sender, - packet_header, - payload_hash, - confirmations, - options, - ) - } else { - dvn_fee_lib_router_next::get_dvn_fee( - msglib, - dvn_fee_lib, - worker, - dst_eid, - sender, - packet_header, - payload_hash, - confirmations, - options, - ) - } - } -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/dvn_fee_lib_router_1/dvn_fee_lib_router.move b/examples/oft-movement/build/oft/sources/dependencies/dvn_fee_lib_router_1/dvn_fee_lib_router.move deleted file mode 100644 index ee94c6da7..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/dvn_fee_lib_router_1/dvn_fee_lib_router.move +++ /dev/null @@ -1,17 +0,0 @@ -module dvn_fee_lib_router_1::dvn_fee_lib_router { - const ENOT_IMPLEMENTED: u64 = 1; - - public fun get_dvn_fee( - _msglib: address, - _fee_lib: address, - _worker: address, - _dst_eid: u32, - _sender: address, - _packet_header: vector, - _payload_hash: vector, - _confirmations: u64, - _options: vector, - ): (u64, address) { - abort ENOT_IMPLEMENTED - } -} \ No newline at end of file diff --git a/examples/oft-movement/build/oft/sources/dependencies/endpoint_v2/admin.move b/examples/oft-movement/build/oft/sources/dependencies/endpoint_v2/admin.move deleted file mode 100644 index 89972ffe6..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/endpoint_v2/admin.move +++ /dev/null @@ -1,61 +0,0 @@ -/// This module isolates functions related to Endpoint administration -module endpoint_v2::admin { - use std::signer::address_of; - - use endpoint_v2::msglib_manager; - - /// Register new message library - /// A library must be registered to be called by this endpoint. Once registered, it cannot be unregistered. The - /// library must be connected to the router node before it can be registered - public entry fun register_library(account: &signer, lib: address) { - assert_admin(address_of(move account)); - msglib_manager::register_library(lib); - } - - /// Sets the default sending message library for the given destination EID - public entry fun set_default_send_library(account: &signer, dst_eid: u32, lib: address) { - assert_admin(address_of(move account)); - msglib_manager::set_default_send_library(dst_eid, lib); - } - - /// Set the default receive message library for the given source EID - public entry fun set_default_receive_library( - account: &signer, - src_eid: u32, - lib: address, - grace_period: u64, - ) { - assert_admin(address_of(move account)); - msglib_manager::set_default_receive_library(src_eid, lib, grace_period); - } - - /// Updates the default receive library timeout for the given source EID - /// The provided expiry is in a specific block number. The fallback library will be disabled once the block height - /// equals this block number - public entry fun set_default_receive_library_timeout( - account: &signer, - src_eid: u32, - fallback_lib: address, - expiry: u64, - ) { - assert_admin(address_of(move account)); - msglib_manager::set_default_receive_library_timeout(src_eid, fallback_lib, expiry); - } - - // ==================================================== Helpers =================================================== - - /// Internal function to assert that the caller is the endpoint admin - inline fun assert_admin(admin: address) { - assert!(admin == @layerzero_admin, EUNAUTHORIZED); - } - - #[test_only] - /// Test-only function to initialize the endpoint and EID - public fun initialize_endpoint_for_test() { - endpoint_v2::store::init_module_for_test(); - } - - // ================================================== Error Codes ================================================= - - const EUNAUTHORIZED: u64 = 1; -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/endpoint_v2/channels.move b/examples/oft-movement/build/oft/sources/dependencies/endpoint_v2/channels.move deleted file mode 100644 index e4687c0ab..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/endpoint_v2/channels.move +++ /dev/null @@ -1,604 +0,0 @@ -module endpoint_v2::channels { - use std::event::emit; - use std::fungible_asset::{Self, FungibleAsset, Metadata}; - use std::object::{address_to_object, Object}; - use std::option::{Self, Option}; - use std::string::String; - - use endpoint_v2::messaging_receipt::{Self, MessagingReceipt}; - use endpoint_v2::msglib_manager; - use endpoint_v2::store; - use endpoint_v2_common::bytes32::{Self, Bytes32, from_bytes32}; - use endpoint_v2_common::guid::compute_guid; - use endpoint_v2_common::packet_raw::{get_packet_bytes, RawPacket}; - use endpoint_v2_common::send_packet; - use endpoint_v2_common::send_packet::{new_send_packet, SendPacket}; - use endpoint_v2_common::universal_config; - use router_node_0::router_node as msglib_router; - - friend endpoint_v2::endpoint; - - #[test_only] - friend endpoint_v2::channels_tests; - - const NIL_PAYLOAD_HASH: vector = x"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"; - - // ==================================================== Helpers =================================================== - - inline fun is_native_token(native_metadata: Object): bool { - native_metadata == address_to_object(@native_token_metadata_address) - } - - // ==================================================== Sending =================================================== - - /// Generate the next GUID for the given destination EID - public(friend) fun next_guid(sender: address, dst_eid: u32, receiver: Bytes32): Bytes32 { - let next_nonce = store::outbound_nonce(sender, dst_eid, receiver) + 1; - compute_guid(next_nonce, universal_config::eid(), bytes32::from_address(sender), dst_eid, receiver) - } - - public(friend) fun outbound_nonce(sender: address, dst_eid: u32, receiver: Bytes32): u64 { - store::outbound_nonce(sender, dst_eid, receiver) - } - - /// Send a message to the given destination EID - public(friend) fun send( - sender: address, - dst_eid: u32, - receiver: Bytes32, - message: vector, - options: vector, - native_token: &mut FungibleAsset, - zro_token: &mut Option, - ): MessagingReceipt { - send_internal( - sender, - dst_eid, - receiver, - message, - options, - native_token, - zro_token, - // Message Library Router Send Function - |send_lib, send_packet| msglib_router::send( - send_lib, - &store::make_dynamic_call_ref(send_lib, b"send"), - send_packet, - options, - native_token, - zro_token, - ), - ) - } - - /// This send function receives the send message library call as a lambda function - /// - /// @param sender: The address of the sender - /// @param dst_eid: The destination EID - /// @param receiver: The receiver's address - /// @param message: The message to be sent - /// @param options: The options to be sent with the message - /// @param native_token: The native token to be sent with the message - /// @param zro_token: The optional ZRO token to be sent with the message - /// @param msglib_send: The lambda function that calls the send library - /// |send_lib, send_packet| (native_fee, zro_fee, encoded_packet): The lambda function that calls the send - /// library - public(friend) inline fun send_internal( - sender: address, - dst_eid: u32, - receiver: Bytes32, - message: vector, - options: vector, - native_token: &mut FungibleAsset, - zro_token: &mut Option, - msglib_send: |address, SendPacket| (u64, u64, RawPacket), - ): MessagingReceipt { - let (send_lib, _) = msglib_manager::get_effective_send_library(sender, dst_eid); - - // increment the outbound nonce and get the next nonce - let nonce = store::increment_outbound_nonce(sender, dst_eid, receiver); - - // check token metadatas - assert!(is_native_token(fungible_asset::asset_metadata(native_token)), err_EUNSUPPORTED_PAYMENT()); - if (option::is_some(zro_token)) { - assert!(universal_config::is_zro(option::borrow(zro_token)), err_EUNSUPPORTED_PAYMENT()); - }; - - let packet = new_send_packet( - nonce, - universal_config::eid(), - bytes32::from_address(sender), - dst_eid, - receiver, - message, - ); - let guid = send_packet::get_guid(&packet); - - let (native_fee, zro_fee, encoded_packet) = msglib_send(send_lib, packet); - emit_packet_sent_event(encoded_packet, options, send_lib); - - messaging_receipt::new_messaging_receipt( - guid, - nonce, - native_fee, - zro_fee, - ) - } - - /// This function provides the cost of sending a message in native and ZRO tokens (if pay_in_zro = true) without - /// sending the message - public(friend) fun quote( - sender: address, - dst_eid: u32, - receiver: Bytes32, - message: vector, - options: vector, - pay_in_zro: bool, - ): (u64, u64) { - quote_internal( - sender, - dst_eid, - receiver, - message, - // Message Library Router Quote Function - |send_lib, send_packet| msglib_router::quote( - send_lib, - send_packet, - options, - pay_in_zro, - ), - ) - } - - /// This is the internal portion of the quote function with the message library call provided as a lambda function - /// - /// @param sender: The address of the sender - /// @param dst_eid: The destination EID - /// @param receiver: The receiver's address - /// @param message: The message to be sent - /// @param msglib_quote: The lambda function that calls the send library's quote function - /// |send_lib, send_packet| (native_fee, zro_fee) - public(friend) inline fun quote_internal( - sender: address, - dst_eid: u32, - receiver: Bytes32, - message: vector, - msglib_quote: |address, SendPacket| (u64, u64) - ): (u64, u64) { - let nonce = store::outbound_nonce(sender, dst_eid, receiver) + 1; - let (send_lib, _) = msglib_manager::get_effective_send_library(sender, dst_eid); - let packet = new_send_packet( - nonce, - universal_config::eid(), - bytes32::from_address(sender), - dst_eid, - receiver, - message, - ); - msglib_quote(send_lib, packet) - } - - // =================================================== Receiving ================================================== - - /// Enable verification (committing) of messages from a given src_eid and sender to the receiver OApp - public(friend) fun register_receive_pathway(receiver: address, src_eid: u32, sender: Bytes32) { - store::register_receive_pathway(receiver, src_eid, sender); - emit(ReceivePathwayRegistered { receiver, src_eid, sender: from_bytes32(sender) }); - } - - /// Check if the receive pathway is registered - public(friend) fun receive_pathway_registered(receiver: address, src_eid: u32, sender: Bytes32): bool { - store::receive_pathway_registered(receiver, src_eid, sender) - } - - /// Sets the payload hash for the given nonce - public(friend) fun inbound(receiver: address, src_eid: u32, sender: Bytes32, nonce: u64, payload_hash: Bytes32) { - assert!(!bytes32::is_zero(&payload_hash), EEMPTY_PAYLOAD_HASH); - store::set_payload_hash(receiver, src_eid, sender, nonce, payload_hash); - } - - // Get the lazy inbound nonce for the given sender - public(friend) fun lazy_inbound_nonce(receiver: address, src_eid: u32, sender: Bytes32): u64 { - store::lazy_inbound_nonce(receiver, src_eid, sender) - } - - /// Returns the max index of the gapless sequence of verfied msg nonces starting at the lazy_inbound_nonce. This is - /// initially 0, and the first nonce is always 1 - public(friend) fun inbound_nonce(receiver: address, src_eid: u32, sender: Bytes32): u64 { - let i = store::lazy_inbound_nonce(receiver, src_eid, sender); - loop { - i = i + 1; - if (!store::has_payload_hash(receiver, src_eid, sender, i)) { - return i - 1 - } - } - } - - /// Skip the nonce. The nonce must be the next nonce in the sequence - public(friend) fun skip(receiver: address, src_eid: u32, sender: Bytes32, nonce_to_skip: u64) { - assert!(nonce_to_skip == inbound_nonce(receiver, src_eid, sender) + 1, EINVALID_NONCE); - store::set_lazy_inbound_nonce(receiver, src_eid, sender, nonce_to_skip); - emit(InboundNonceSkipped { src_eid, sender: from_bytes32(sender), receiver, nonce: nonce_to_skip }) - } - - /// Marks a packet as verified but disables execution until it is re-verified - public(friend) fun nilify(receiver: address, src_eid: u32, sender: Bytes32, nonce: u64, payload_hash: Bytes32) { - assert!( - nonce > store::lazy_inbound_nonce(receiver, src_eid, sender) || - store::has_payload_hash(receiver, src_eid, sender, nonce), - EINVALID_NONCE, - ); - - let inbound_payload_hash = store::get_payload_hash(receiver, src_eid, sender, nonce); - assert!(inbound_payload_hash == payload_hash, EPAYLOAD_HASH_DOES_NOT_MATCH); - - // Set the hash to 0xff*32 to indicate that the packet is nilified - store::set_payload_hash(receiver, src_eid, sender, nonce, bytes32::to_bytes32(NIL_PAYLOAD_HASH)); - emit( - PacketNilified { - src_eid, sender: from_bytes32(sender), receiver, nonce, payload_hash: from_bytes32(payload_hash), - } - ) - } - - /// Marks a nonce as unexecutable and unverifiable. The nonce can never be re-verified or executed. - /// Only packets less than or equal to the current lazy inbound nonce can be burnt. - public(friend) fun burn(receiver: address, src_eid: u32, sender: Bytes32, nonce: u64, payload_hash: Bytes32) { - assert!(nonce <= store::lazy_inbound_nonce(receiver, src_eid, sender), EINVALID_NONCE); - - // check that the hash provided matches the stored hash and clear - let inbound_payload_hash = store::remove_payload_hash(receiver, src_eid, sender, nonce); - assert!(inbound_payload_hash == payload_hash, EPAYLOAD_HASH_DOES_NOT_MATCH); - - emit( - PacketBurnt { - src_eid, sender: from_bytes32(sender), receiver, nonce, payload_hash: from_bytes32(payload_hash), - } - ) - } - - /// Clear the stored message and increment the lazy_inbound_nonce to the provided nonce - /// This is used in the receive pathway as the final step because it validates the hash as well - /// If a lot of messages are queued, the messages can be cleared with a smaller step size to prevent OOG - public(friend) fun clear_payload( - receiver: address, - src_eid: u32, - sender: Bytes32, - nonce: u64, - payload: vector, - ) { - let current_nonce = store::lazy_inbound_nonce(receiver, src_eid, sender); - - // Make sure that all hashes are present up to the clear-to point, clear them, and update the lazy nonce - if (nonce > current_nonce) { - current_nonce = current_nonce + 1; - while (current_nonce <= nonce) { - assert!(store::has_payload_hash(receiver, src_eid, sender, current_nonce), ENO_PAYLOAD_HASH); - current_nonce = current_nonce + 1 - }; - store::set_lazy_inbound_nonce(receiver, src_eid, sender, nonce); - }; - - // Check if the payload hash matches the provided payload - let actual_hash = bytes32::keccak256(payload); - assert!(store::has_payload_hash(receiver, src_eid, sender, nonce), ENO_PAYLOAD_HASH); - - // Clear and check the payload hash - let expected_hash = store::remove_payload_hash(receiver, src_eid, sender, nonce); - assert!(actual_hash == expected_hash, EPAYLOAD_HASH_DOES_NOT_MATCH); - - emit(PacketDelivered { src_eid, sender: from_bytes32(sender), nonce, receiver }); - } - - /// Checks if the payload hash exists for the given nonce - public(friend) fun has_payload_hash(receiver: address, src_eid: u32, sender: Bytes32, nonce: u64): bool { - store::has_payload_hash(receiver, src_eid, sender, nonce) - } - - /// Get the payload hash for a given nonce - public(friend) fun get_payload_hash(receiver: address, src_eid: u32, sender: Bytes32, nonce: u64): Bytes32 { - store::get_payload_hash(receiver, src_eid, sender, nonce) - } - - /// Check if a message is verifiable (committable) - public(friend) fun verifiable(receiver: address, src_eid: u32, sender: Bytes32, nonce: u64): bool { - if (!store::receive_pathway_registered(receiver, src_eid, sender)) { - return false - }; - let lazy_inbound_nonce = store::lazy_inbound_nonce(receiver, src_eid, sender); - nonce > lazy_inbound_nonce || has_payload_hash(receiver, src_eid, sender, nonce) - } - - /// Verify (commit) a message - public(friend) fun verify( - receive_lib: address, - packet_header: RawPacket, - payload_hash: Bytes32, - ) { - let call_ref = &store::make_dynamic_call_ref(receive_lib, b"commit_verification"); - let (receiver, src_eid, sender, nonce) = msglib_router::commit_verification( - receive_lib, - call_ref, - packet_header, - payload_hash, - ); - - verify_internal( - receive_lib, - payload_hash, - receiver, - src_eid, - sender, - nonce, - ); - } - - /// This function is the internal portion of verifying a message. This receives the decoded packet header - /// information (that verify() gets from the message library) as an input - /// - /// @param receive_lib: The address of the receive library - /// @param packet_header: The packet header - /// @param payload_hash: The hash of the payload - /// @params receiver: The address of the receiver - /// @params src_eid: The source EID - /// @params sender: The sender's address - /// @params nonce: The nonce of the message - public(friend) inline fun verify_internal( - receive_lib: address, - payload_hash: Bytes32, - receiver: address, - src_eid: u32, - sender: Bytes32, - nonce: u64, - ) { - // This is the same assertion as initializable() in EVM - store::assert_receive_pathway_registered( - receiver, - src_eid, - sender, - ); - assert!( - msglib_manager::is_valid_receive_library_for_oapp(receiver, src_eid, receive_lib), - err_EINVALID_MSGLIB() - ); - assert!(verifiable(receiver, src_eid, sender, nonce), err_ENOT_VERIFIABLE()); - - // insert the message into the messaging channel - inbound(receiver, src_eid, sender, nonce, payload_hash); - emit_packet_verified_event(src_eid, from_bytes32(sender), nonce, receiver, from_bytes32(payload_hash)); - } - - - /// Send an alert if lz_receive reverts - public(friend) fun lz_receive_alert( - receiver: address, - executor: address, - src_eid: u32, - sender: Bytes32, - nonce: u64, - guid: Bytes32, - gas: u64, - value: u64, - message: vector, - extra_data: vector, - reason: String, - ) { - emit(LzReceiveAlert { - receiver, - executor, - src_eid, - sender: from_bytes32(sender), - nonce, - guid: from_bytes32(guid), - gas, - value, - message, - extra_data, - reason, - }); - } - - // ==================================================== Events ==================================================== - - #[event] - struct ReceivePathwayRegistered has store, drop { - receiver: address, - src_eid: u32, - sender: vector, - } - - #[event] - struct PacketBurnt has store, drop { - src_eid: u32, - sender: vector, - receiver: address, - nonce: u64, - payload_hash: vector, - } - - #[event] - struct PacketNilified has store, drop { - src_eid: u32, - sender: vector, - receiver: address, - nonce: u64, - payload_hash: vector, - } - - #[event] - struct InboundNonceSkipped has store, drop { - src_eid: u32, - sender: vector, - receiver: address, - nonce: u64, - } - - #[event] - struct PacketDelivered has drop, store { - src_eid: u32, - sender: vector, - nonce: u64, - receiver: address, - } - - #[event] - struct PacketSent has drop, store { - encoded_packet: vector, - options: vector, - send_library: address, - } - - #[event] - struct PacketVerified has drop, store { - src_eid: u32, - sender: vector, - nonce: u64, - receiver: address, - payload_hash: vector, - } - - - #[event] - struct LzReceiveAlert has drop, store { - receiver: address, - executor: address, - src_eid: u32, - sender: vector, - nonce: u64, - guid: vector, - gas: u64, - value: u64, - message: vector, - extra_data: vector, - reason: String, - } - - // These 2 emit_ functions are needed so that inline functions can still emit when called from the test module - - public(friend) fun emit_packet_sent_event(encoded_packet: RawPacket, options: vector, send_library: address) { - emit(PacketSent { encoded_packet: get_packet_bytes(encoded_packet), options, send_library }); - } - - public(friend) fun emit_packet_verified_event( - src_eid: u32, - sender: vector, - nonce: u64, - receiver: address, - payload_hash: vector, - ) { - emit(PacketVerified { src_eid, sender, nonce, receiver, payload_hash }); - } - - #[test_only] - public fun receive_pathway_registered_event( - receiver: address, - src_eid: u32, - sender: vector, - ): ReceivePathwayRegistered { - ReceivePathwayRegistered { receiver, src_eid, sender } - } - - #[test_only] - public fun packet_burnt_event( - src_eid: u32, - sender: vector, - receiver: address, - nonce: u64, - payload_hash: vector, - ): PacketBurnt { - PacketBurnt { src_eid, sender, receiver, nonce, payload_hash } - } - - #[test_only] - public fun packet_nilified_event( - src_eid: u32, - sender: vector, - receiver: address, - nonce: u64, - payload_hash: vector, - ): PacketNilified { - PacketNilified { src_eid, sender, receiver, nonce, payload_hash } - } - - #[test_only] - public fun inbound_nonce_skipped_event( - src_eid: u32, - sender: vector, - receiver: address, - nonce: u64, - ): InboundNonceSkipped { - InboundNonceSkipped { src_eid, sender, receiver, nonce } - } - - #[test_only] - public fun packet_delivered_event( - src_eid: u32, - sender: vector, - nonce: u64, - receiver: address, - ): PacketDelivered { - PacketDelivered { src_eid, sender, nonce, receiver } - } - - #[test_only] - public fun packet_sent_event(encoded_packet: RawPacket, options: vector, send_library: address): PacketSent { - PacketSent { encoded_packet: get_packet_bytes(encoded_packet), options, send_library } - } - - #[test_only] - public fun packet_verified_event( - src_eid: u32, - sender: vector, - nonce: u64, - receiver: address, - payload_hash: vector, - ): PacketVerified { - PacketVerified { src_eid, sender, nonce, receiver, payload_hash } - } - - #[test_only] - public fun lz_receive_alert_event( - receiver: address, - executor: address, - src_eid: u32, - sender: vector, - nonce: u64, - guid: vector, - gas: u64, - value: u64, - message: vector, - extra_data: vector, - reason: String, - ): LzReceiveAlert { - LzReceiveAlert { - receiver, - executor, - src_eid, - sender, - nonce, - guid, - gas, - value, - message, - extra_data, - reason, - } - } - - // ================================================== Error Codes ================================================= - - const EEMPTY_PAYLOAD_HASH: u64 = 1; - const EINVALID_MSGLIB: u64 = 2; - const EINVALID_NONCE: u64 = 3; - const ENOT_VERIFIABLE: u64 = 4; - const ENO_PAYLOAD_HASH: u64 = 5; - const EPAYLOAD_HASH_DOES_NOT_MATCH: u64 = 6; - const EUNSUPPORTED_PAYMENT: u64 = 7; - - // These wrapper error functions are needed to support testing inline functions in a different testing module - public(friend) fun err_EUNSUPPORTED_PAYMENT(): u64 { EUNSUPPORTED_PAYMENT } - - public(friend) fun err_EINVALID_MSGLIB(): u64 { EINVALID_MSGLIB } - - public(friend) fun err_ENOT_VERIFIABLE(): u64 { ENOT_VERIFIABLE } -} \ No newline at end of file diff --git a/examples/oft-movement/build/oft/sources/dependencies/endpoint_v2/endpoint.move b/examples/oft-movement/build/oft/sources/dependencies/endpoint_v2/endpoint.move deleted file mode 100644 index de968828d..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/endpoint_v2/endpoint.move +++ /dev/null @@ -1,585 +0,0 @@ -/// Primary entrypoint for all OApps to interact with the LayerZero protocol -module endpoint_v2::endpoint { - use std::fungible_asset::FungibleAsset; - use std::option::Option; - use std::signer::address_of; - use std::string::String; - - use endpoint_v2::channels; - use endpoint_v2::messaging_composer; - use endpoint_v2::messaging_receipt::MessagingReceipt; - use endpoint_v2::msglib_manager; - use endpoint_v2::registration; - use endpoint_v2::store; - use endpoint_v2::timeout::Timeout; - use endpoint_v2_common::bytes32::{Self, Bytes32, from_bytes32}; - use endpoint_v2_common::contract_identity::{CallRef, get_call_ref_caller}; - use endpoint_v2_common::packet_raw; - use endpoint_v2_common::packet_v1_codec::compute_payload; - - #[test_only] - friend endpoint_v2::endpoint_tests; - - // ============================================== OApp Administration ============================================= - - struct EndpointOAppConfigTarget {} - - /// Initialize the OApp while registering the lz_receive module name - /// - /// The lz_receive module selection is permanent and cannot be changed - /// When delivering a message, the offchain entity will call `::::lz_receive()` - public fun register_oapp(oapp: &signer, lz_receive_module: String) { - let oapp_address = address_of(move oapp); - registration::register_oapp(oapp_address, lz_receive_module); - } - - /// Registers the Composer with the lz_compose function - /// - /// This function must be called before the Composer can start to receive composer messages - /// The lz_compose module selection is permanent and cannot be changed - public fun register_composer(composer: &signer, lz_compose_module: String) { - let composer_address = address_of(move composer); - registration::register_composer(composer_address, lz_compose_module); - } - - /// Register a Receive pathway for the given remote EID - /// - /// This function must be called before any message can be verified - /// After a message is verified, the lz_receive() function call is permissionless; therefore, this provides - /// important protection against the verification of messages from an EID, whose security configuration has not been - /// accepted by the OApp. - /// - /// Once a pathway is registered, receives can happen under either the default configuration or the configuration - /// provided by the OApp. - public fun register_receive_pathway(call_ref: &CallRef, src_eid: u32, sender: Bytes32) { - let oapp = get_oapp_caller(call_ref); - channels::register_receive_pathway(oapp, src_eid, sender) - } - - /// Set the send library for a given EID - /// - /// Setting to a @0x0 msglib address will unset the send library and cause the OApp to use the default instead - public fun set_send_library(call_ref: &CallRef, remote_eid: u32, msglib: address) { - let oapp = get_oapp_caller(call_ref); - msglib_manager::set_send_library(oapp, remote_eid, msglib); - } - - /// Set the receiving message library for the given remote EID - /// - /// Setting to a @0x0 msglib address will unset the receive library and cause the OApp to use the default instead - /// The `grace_period` is the maximum number of blocks that the OApp will continue to accept a message from the - /// prior receive library. - /// - /// A grace period cannot be set when switching to or from the unset / default setting. - /// - /// To emulate a grace period when switching from default, first set the receive library explicitly to the default - /// with no grace period, then set to the desired new library with a grace period. - /// To emulate a grace period when switching to default, first set the receive library explicitly to the default - /// library address with a grace period, then when the grace period expires, unset the receive library (set to @0x0) - /// without a grace period - public fun set_receive_library( - call_ref: &CallRef, - remote_eid: u32, - msglib: address, - grace_period: u64, - ) { - let oapp = get_oapp_caller(call_ref); - msglib_manager::set_receive_library(oapp, remote_eid, msglib, grace_period); - } - - /// Update the timeout settings for the receive library - /// - /// The `expiry` is the block number at which the OApp will no longer confirm message using the provided - /// fallback receive library. - /// - /// The timeout cannot be set to fall back to the default receive library (@0x0) or when the current receive library - /// is unset (uses the default). This will also revert if the expiry is not set to a future block number. - public fun set_receive_library_timeout( - call_ref: &CallRef, - remote_eid: u32, - msglib: address, - expiry: u64, - ) { - let oapp = get_oapp_caller(call_ref); - msglib_manager::set_receive_library_timeout(oapp, remote_eid, msglib, expiry); - } - - /// Set the serialized message Library configuration using the serialized format for a specific message library - public fun set_config( - call_ref: &CallRef, - msglib: address, - config_type: u32, - config: vector, - ) { - let oapp = get_oapp_caller(call_ref); - msglib_manager::set_config(oapp, msglib, config_type, config); - } - - // ==================================================== Sending =================================================== - - struct EndpointV2SendingTarget {} - - /// Gets a quote for a message given all the send parameters - /// - /// The response is the (Native fee, ZRO fee). If `pay_in_zro` is true, than whatever portion of the fee that - /// can be paid in ZRO wil be returned as the ZRO fee, and the remaining portion will be returned as the Native fee. - /// If `pay_in_zro` is false, the entire fee will be returned as the Native fee, and 0 will be returned as the ZRO - /// fee. - public fun quote( - sender: address, - dst_eid: u32, - receiver: Bytes32, - message: vector, - options: vector, - pay_in_zro: bool, - ): (u64, u64) { - channels::quote(sender, dst_eid, receiver, message, options, pay_in_zro) - } - - #[view] - /// View function to get a quote for a message given all the send parameters - public fun quote_view( - sender: address, - dst_eid: u32, - receiver: vector, - message: vector, - options: vector, - pay_in_zro: bool, - ): (u64, u64) { - channels::quote(sender, dst_eid, bytes32::to_bytes32(receiver), message, options, pay_in_zro) - } - - /// Send a message through the LayerZero protocol - /// - /// This will be passed to the Message Library to calculate the fee of the message and emit messages that trigger - /// offchain entities to deliver and verify the message. If `zro_token` is not option::none, whatever component of - /// the fee that can be paid in ZRO will be paid in ZRO. - /// If the amounts provided are insuffient, the transaction will revert - public fun send( - call_ref: &CallRef, - dst_eid: u32, - receiver: Bytes32, - message: vector, - options: vector, - native_token: &mut FungibleAsset, - zro_token: &mut Option, - ): MessagingReceipt { - let sender = get_oapp_caller(call_ref); - channels::send( - sender, - dst_eid, - receiver, - message, - options, - native_token, - zro_token, - ) - } - - // ============================================= Clearing "Hot Potato" ============================================ - - /// Non-droppable guid that requires a call to `clear()` or `clear_compose()` to delete - struct WrappedGuid { guid: Bytes32 } - - struct WrappedGuidAndIndex { guid: Bytes32, index: u16 } - - /// Wrap a guid (lz_receive), so that it can only be unwrapped (and disposed of) by the endpoint - public fun wrap_guid(guid: Bytes32): WrappedGuid { WrappedGuid { guid } } - - /// Wrap a guid and index (lz_compose), so that it can only be unwrapped (and disposed of) by the endpoint - public fun wrap_guid_and_index(guid: Bytes32, index: u16): WrappedGuidAndIndex { - WrappedGuidAndIndex { guid, index } - } - - /// Get the guid from a WrappedGuid without destorying the WrappedGuid - public fun get_guid_from_wrapped(wrapped: &WrappedGuid): Bytes32 { wrapped.guid } - - /// Get the guid and index from a WrappedGuidAndIndex without destorying the WrappedGuidAndIndex - public fun get_guid_and_index_from_wrapped(wrapped: &WrappedGuidAndIndex): (Bytes32, u16) { - (wrapped.guid, wrapped.index) - } - - /// Endpoint-only call to destroy a WrappedGuid and provide its value; only called by `clear()` - fun unwrap_guid(wrapped_guid: WrappedGuid): Bytes32 { - let WrappedGuid { guid } = wrapped_guid; - guid - } - - /// Endpoint-only call to destroy a WrappedGuidAndIndex and provide its values; only called by `clear_compose()` - fun unwrap_guid_and_index(wrapped_guid_and_index: WrappedGuidAndIndex): (Bytes32, u16) { - let WrappedGuidAndIndex { guid, index } = wrapped_guid_and_index; - (guid, index) - } - - // ==================================================== Receiving ================================================= - - struct EndpointV2ReceivingTarget {} - - /// Validate and Clear a message received through the LZ Receive protocol - /// - /// This should be called by the lz_receive function on the OApp. - /// In this "pull model", the off-chain entity will call the OApp's lz_receive function. The lz_receive function - /// must call `clear()` to validate and clear the message. If `clear()` is not called, lz_receive may receive - /// messages but will not be able to ensure the validity of the messages. - public fun clear( - call_ref: &CallRef, - src_eid: u32, - sender: Bytes32, - nonce: u64, - guid: WrappedGuid, - message: vector, - ) { - let oapp = get_oapp_caller(call_ref); - channels::clear_payload( - oapp, - src_eid, - sender, - nonce, - compute_payload(unwrap_guid(guid), message) - ); - } - - /// Function to alert that the lz_receive function has reverted - /// - /// This may be used to create a record that the offchain entity has made an unsuccessful attempt to deliver a - /// message. - public entry fun lz_receive_alert( - executor: &signer, - receiver: address, - src_eid: u32, - sender: vector, - nonce: u64, - guid: vector, - gas: u64, - value: u64, - message: vector, - extra_data: vector, - reason: String, - ) { - channels::lz_receive_alert( - receiver, - address_of(executor), - src_eid, - bytes32::to_bytes32(sender), - nonce, - bytes32::to_bytes32(guid), - gas, - value, - message, - extra_data, - reason, - ); - } - - /// This prevents verification of the next message in the sequence. An example use case is to skip - /// a message when precrime throws an alert. The nonce must be provided to avoid the possibility of skipping the - /// unintended nonce. - public fun skip( - call_ref: &CallRef, - src_eid: u32, - sender: Bytes32, - nonce: u64, - ) { - let oapp = get_oapp_caller(call_ref); - channels::skip(oapp, src_eid, sender, nonce); - } - - /// This prevents delivery and any possible reverification of an already verified message - public fun burn( - call_ref: &CallRef, - src_eid: u32, - sender: Bytes32, - nonce: u64, - payload_hash: Bytes32, - ) { - let oapp = get_oapp_caller(call_ref); - channels::burn(oapp, src_eid, sender, nonce, payload_hash); - } - - // This maintains a packet's status as verified but prevents delivery until the packet is verified again - public fun nilify( - call_ref: &CallRef, - src_eid: u32, - sender: Bytes32, - nonce: u64, - payload_hash: Bytes32, - ) { - let oapp = get_oapp_caller(call_ref); - channels::nilify(oapp, src_eid, sender, nonce, payload_hash); - } - - - // ==================================================== Compose =================================================== - - struct EndpointV2SendComposeTarget {} - - struct EndpointV2ComposerTarget {} - - /// Initiates a compose message - /// - /// This should be called by the lz_receive function on the OApp when it receives a message that indicates that - /// a compose is required. The composer will then call the target Composer's lz_compose with the message function to - /// complete the compose - public fun send_compose( - call_ref: &CallRef, - to: address, - index: u16, - guid: Bytes32, - message: vector, - ) { - let oapp = get_oapp_caller(call_ref); - messaging_composer::send_compose(oapp, to, index, guid, message); - } - - /// Internal function to get the address of the OApp caller, and assert that the caller is a registered OApp and - /// the endpoint is the intended recipient - public(friend) fun get_oapp_caller(call_ref: &CallRef): address { - let caller = get_call_ref_caller(call_ref); - assert!(registration::is_registered_oapp(caller), EUNREGISTERED); - caller - } - - // =================================================== Composer =================================================== - - /// Function to clear the compose message - /// This should be called from the Composer's lz_compose function. This will both check the validity of the message - /// and clear the message from the Composer's compose queue. If this is not called, the Composer will not be able to - /// ensure the validity of received messages - public fun clear_compose( - call_ref: &CallRef, - from: address, - guid_and_index: WrappedGuidAndIndex, - message: vector, - ) { - let composer = get_compose_caller(call_ref); - let (guid, index) = unwrap_guid_and_index(guid_and_index); - messaging_composer::clear_compose(from, composer, guid, index, message); - } - - /// Function to alert that the lz_compose function has reverted - /// - /// This may be used to create a record that the offchain composer has made an unsuccessful attempt to deliver a - /// compose message - public entry fun lz_compose_alert( - executor: &signer, - from: address, - to: address, - guid: vector, - index: u16, - gas: u64, - value: u64, - message: vector, - extra_data: vector, - reason: String, - ) { - messaging_composer::lz_compose_alert( - address_of(move executor), - from, - to, - bytes32::to_bytes32(guid), - index, - gas, - value, - message, - extra_data, - reason, - ); - } - - /// Internal function to get the address of the Composer caller, and assert that the caller is a registered Composer - /// and that the endpoint is the intended recipient - public(friend) fun get_compose_caller(call_ref: &CallRef): address { - let caller = get_call_ref_caller(call_ref); - assert!(registration::is_registered_composer(caller), EUNREGISTERED); - caller - } - - // ================================================= Verification ================================================= - - - /// This verifies a message by storing the payload hash on the receive channel - /// - /// Once a message has been verified, it can be permissionlessly delivered. This will revert if the message library - /// has not committed the verification. - public entry fun verify( - receive_lib: address, - packet_header: vector, - payload_hash: vector, - ) { - let packet_header = packet_raw::bytes_to_raw_packet(packet_header); - channels::verify(receive_lib, packet_header, bytes32::to_bytes32(payload_hash)); - } - - /// Confirms that a message has been verified by the message library, and is ready to be verified (confirmed) on the - /// endpoint. - /// - /// This can be called prior to calling `verify` to ensure that the message is ready to be verified. - /// This is also exposed as a view function below called `verifiable_view()` - public fun verifiable( - src_eid: u32, - sender: Bytes32, - nonce: u64, - receiver: address, - ): bool { - channels::verifiable(receiver, src_eid, sender, nonce) - } - - /// Confirms that a message has a payload hash (has been verified). - /// - /// This generally suggests that the message can be delievered, with the exeption of the case where the message has - /// been nilified - public fun has_payload_hash( - src_eid: u32, - sender: Bytes32, - nonce: u64, - receiver: address, - ): bool { - channels::has_payload_hash(receiver, src_eid, sender, nonce) - } - - /// Gets the payload hash for a given message - public fun payload_hash(receiver: address, src_eid: u32, sender: Bytes32, nonce: u64): Bytes32 { - channels::get_payload_hash(receiver, src_eid, sender, nonce) - } - - // ===================================================== View ===================================================== - - // Get the serialized message Library configuration using the serialized format for a specific message library - #[view] - public fun get_config(oapp: address, msglib: address, eid: u32, config_type: u32): vector { - msglib_manager::get_config(oapp, msglib, eid, config_type) - } - - #[view] - public fun get_quote( - sender: address, - dst_eid: u32, - receiver: vector, - message: vector, - options: vector, - pay_in_zro: bool, - ): (u64, u64) { - quote(sender, dst_eid, bytes32::to_bytes32(receiver), message, options, pay_in_zro) - } - - #[view] - public fun get_payload_hash(receiver: address, src_eid: u32, sender: vector, nonce: u64): vector { - from_bytes32(payload_hash(receiver, src_eid, bytes32::to_bytes32(sender), nonce)) - } - - #[view] - /// This is called by offchain entities to know what function to call on the OApp for lz_receive - public fun get_lz_receive_module(oapp: address): String { - registration::lz_receive_module(oapp) - } - - #[view] - /// This is called by offchain entities to know what function to call on the Composer for lz_compose - public fun get_lz_compose_module(composer: address): String { - registration::lz_compose_module(composer) - } - - #[view] - /// Gets the effective receive library for the given source EID, returns both the library and a flag indicating if - /// this is a fallback to the default (meaning the library is not configured for the oapp) - public fun get_effective_receive_library(oapp_address: address, src_eid: u32): (address, bool) { - msglib_manager::get_effective_receive_library(oapp_address, src_eid) - } - - #[view] - public fun get_effective_send_library(oapp_address: address, dst_eid: u32): (address, bool) { - msglib_manager::get_effective_send_library(oapp_address, dst_eid) - } - - #[view] - public fun get_outbound_nonce(sender: address, dst_eid: u32, receiver: vector): u64 { - channels::outbound_nonce(sender, dst_eid, bytes32::to_bytes32(receiver)) - } - - #[view] - public fun get_lazy_inbound_nonce(receiver: address, src_eid: u32, sender: vector): u64 { - channels::lazy_inbound_nonce(receiver, src_eid, bytes32::to_bytes32(sender)) - } - - #[view] - public fun get_inbound_nonce(receiver: address, src_eid: u32, sender: vector): u64 { - channels::inbound_nonce(receiver, src_eid, bytes32::to_bytes32(sender)) - } - - #[view] - public fun is_registered_msglib(msglib: address): bool { - msglib_manager::is_registered_library(msglib) - } - - #[view] - public fun is_valid_receive_library_for_oapp(oapp: address, src_eid: u32, msglib: address): bool { - msglib_manager::is_valid_receive_library_for_oapp(oapp, src_eid, msglib) - } - - #[view] - public fun has_payload_hash_view(src_eid: u32, sender: vector, nonce: u64, receiver: address): bool { - has_payload_hash(src_eid, bytes32::to_bytes32(sender), nonce, receiver) - } - - #[view] - /// Get the hash of the composed message with the given parameters with the following special case values: - /// NOT SENT: 0x00(*32) - /// SENT: hash value - /// RECEIVED / CLEARED: 0xff(*32) - public fun get_compose_message_hash(from: address, to: address, guid: vector, index: u16): vector { - from_bytes32( - messaging_composer::get_compose_message_hash(from, to, bytes32::to_bytes32(guid), index) - ) - } - - #[view] - public fun get_next_guid(oapp: address, dst_eid: u32, receiver: vector): vector { - from_bytes32(channels::next_guid(oapp, dst_eid, bytes32::to_bytes32(receiver))) - } - - #[view] - public fun initializable(src_eid: u32, sender: vector, receiver: address): bool { - channels::receive_pathway_registered(receiver, src_eid, bytes32::to_bytes32(sender)) - } - - #[view] - public fun verifiable_view( - src_eid: u32, - sender: vector, - nonce: u64, - receiver: address, - ): bool { - verifiable(src_eid, bytes32::to_bytes32(sender), nonce, receiver) - } - - #[view] - /// Get the default send library for the given destination EID - public fun get_default_send_lib(remote_eid: u32): address { - msglib_manager::get_default_send_library(remote_eid) - } - - #[view] - /// Get the default receive library for the given source EID - public fun get_default_receive_lib(remote_eid: u32): address { - msglib_manager::get_default_receive_library(remote_eid) - } - - #[view] - public fun get_registered_libraries(start_index: u64, max_entries: u64): vector
{ - msglib_manager::get_registered_libraries(start_index, max_entries) - } - - #[view] - public fun get_receive_library_timeout(oapp: address, remote_eid: u32): Timeout { - store::get_receive_library_timeout(oapp, remote_eid) - } - - #[view] - public fun get_default_receive_library_timeout(remote_eid: u32): Timeout { - store::get_default_receive_library_timeout(remote_eid) - } - - // ================================================== Error Codes ================================================= - - const EUNREGISTERED: u64 = 1; -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/endpoint_v2/messaging_composer.move b/examples/oft-movement/build/oft/sources/dependencies/endpoint_v2/messaging_composer.move deleted file mode 100644 index 826294fa5..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/endpoint_v2/messaging_composer.move +++ /dev/null @@ -1,140 +0,0 @@ -/// The messaging composer is responsible for managing composed messages -module endpoint_v2::messaging_composer { - use std::event::emit; - use std::string::String; - - use endpoint_v2::store; - use endpoint_v2_common::bytes32::{Self, Bytes32, from_bytes32}; - - friend endpoint_v2::endpoint; - - #[test_only] - friend endpoint_v2::messaging_composer_tests; - - // ================================================ Core Functions ================================================ - - /// Called by the OApp when receiving a message to trigger the sending of a composed message - /// This preps the message for delivery by lz_compose - public(friend) fun send_compose(oapp: address, to: address, index: u16, guid: Bytes32, message: vector) { - assert!(!store::has_compose_message_hash(oapp, to, guid, index), ECOMPOSE_ALREADY_SENT); - let message_hash = bytes32::keccak256(message); - store::set_compose_message_hash(oapp, to, guid, index, message_hash); - emit(ComposeSent { from: oapp, to, guid: from_bytes32(guid), index, message }); - } - - /// This clears the composed message from the store - /// This should be triggered by lz_compose on the OApp, and it confirms that the message was delivered - public(friend) fun clear_compose(from: address, to: address, guid: Bytes32, index: u16, message: vector) { - // Make sure the message hash matches the expected hash - assert!(store::has_compose_message_hash(from, to, guid, index), ECOMPOSE_NOT_FOUND); - let expected_hash = store::get_compose_message_hash(from, to, guid, index); - let actual_hash = bytes32::keccak256(message); - assert!(expected_hash == actual_hash, ECOMPOSE_ALREADY_CLEARED); - - // Set the message 0xff(*32) to prevent sending the message again - store::set_compose_message_hash(from, to, guid, index, bytes32::ff_bytes32()); - emit(ComposeDelivered { from, to, guid: from_bytes32(guid), index }); - } - - /// Get the hash of the composed message with the given parameters - /// NOT SENT: 0x00(*32) - /// SENT: hash value - /// RECEIVED / CLEARED: 0xff(*32) - public(friend) fun get_compose_message_hash(from: address, to: address, guid: Bytes32, index: u16): Bytes32 { - if (store::has_compose_message_hash(from, to, guid, index)) { - store::get_compose_message_hash(from, to, guid, index) - } else { - bytes32::zero_bytes32() - } - } - - /// Emit an event that indicates that the off-chain executor failed to deliver the compose message - public(friend) fun lz_compose_alert( - executor: address, - from: address, - to: address, - guid: Bytes32, - index: u16, - gas: u64, - value: u64, - message: vector, - extra_data: vector, - reason: String, - ) { - emit(LzComposeAlert { - from, to, executor, guid: from_bytes32(guid), index, gas, value, message, extra_data, reason, - }); - } - - // ==================================================== Events ==================================================== - - #[event] - struct ComposeSent has copy, drop, store { - from: address, - to: address, - guid: vector, - index: u16, - message: vector, - } - - #[event] - struct ComposeDelivered has copy, drop, store { - from: address, - to: address, - guid: vector, - index: u16, - } - - #[event] - struct LzComposeAlert has copy, drop, store { - from: address, - to: address, - executor: address, - guid: vector, - index: u16, - gas: u64, - value: u64, - message: vector, - extra_data: vector, - reason: String, - } - - #[test_only] - public fun compose_sent_event( - from: address, - to: address, - guid: vector, - index: u16, - message: vector, - ): ComposeSent { - ComposeSent { from, to, guid, index, message } - } - - #[test_only] - public fun compose_delivered_event(from: address, to: address, guid: vector, index: u16): ComposeDelivered { - ComposeDelivered { from, to, guid, index } - } - - #[test_only] - public fun lz_compose_alert_event( - from: address, - to: address, - executor: address, - guid: vector, - index: u16, - gas: u64, - value: u64, - message: vector, - extra_data: vector, - reason: String, - ): LzComposeAlert { - LzComposeAlert { from, to, executor, guid, index, gas, value, message, extra_data, reason } - } - - // ================================================== Error Codes ================================================= - - const ECOMPOSE_ALREADY_CLEARED: u64 = 1; - const ECOMPOSE_ALREADY_SENT: u64 = 2; - const ECOMPOSE_NOT_FOUND: u64 = 3; -} - diff --git a/examples/oft-movement/build/oft/sources/dependencies/endpoint_v2/messaging_receipt.move b/examples/oft-movement/build/oft/sources/dependencies/endpoint_v2/messaging_receipt.move deleted file mode 100644 index a99eb82de..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/endpoint_v2/messaging_receipt.move +++ /dev/null @@ -1,74 +0,0 @@ -/// Messaging Receipt is returned upon endpoint::send and provides proof of the message being sent and fees paid -module endpoint_v2::messaging_receipt { - use endpoint_v2_common::bytes32::Bytes32; - - friend endpoint_v2::channels; - - #[test_only] - friend endpoint_v2::messaging_receipt_tests; - - // For indirect dependency: `channels_tests` calls friend functions via inline functions in `endpoint_v2::channels` - #[test_only] - friend endpoint_v2::channels_tests; - - /// Messaging receipt is returned from endpoint::send and provides proof of the message being sent and fees paid - struct MessagingReceipt has store, drop { - guid: Bytes32, - nonce: u64, - native_fee: u64, - zro_fee: u64, - } - - /// Constructs a new messaging receipt - /// This is a friend-only function so that the Messaging Receipt cannot be forged by a 3rd party - public(friend) fun new_messaging_receipt( - guid: Bytes32, - nonce: u64, - native_fee: u64, - zro_fee: u64, - ): MessagingReceipt { - MessagingReceipt { guid, nonce, native_fee, zro_fee } - } - - #[test_only] - public fun new_messaging_receipt_for_test( - guid: Bytes32, - nonce: u64, - native_fee: u64, - zro_fee: u64, - ): MessagingReceipt { - MessagingReceipt { guid, nonce, native_fee, zro_fee } - } - - /// Get the guid of a MessagingReceipt in the format of a bytes array - public fun get_guid(self: &MessagingReceipt): Bytes32 { - self.guid - } - - /// Gets the nonce of a MessagingReceipt - public fun get_nonce(self: &MessagingReceipt): u64 { - self.nonce - } - - /// Gets the native fee of a MessagingReceipt - public fun get_native_fee(self: &MessagingReceipt): u64 { - self.native_fee - } - - /// Gets the zro fee of a MessagingReceipt - public fun get_zro_fee(self: &MessagingReceipt): u64 { - self.zro_fee - } - - /// Unpacks the fields of a MessagingReceipt - /// @return (guid, nonce, native_fee, zro_fee) - public fun unpack_messaging_receipt(receipt: MessagingReceipt): (Bytes32, u64, u64, u64) { - let MessagingReceipt { - guid, - nonce, - native_fee, - zro_fee, - } = receipt; - (guid, nonce, native_fee, zro_fee) - } -} \ No newline at end of file diff --git a/examples/oft-movement/build/oft/sources/dependencies/endpoint_v2/msglib_manager.move b/examples/oft-movement/build/oft/sources/dependencies/endpoint_v2/msglib_manager.move deleted file mode 100644 index 16cef4241..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/endpoint_v2/msglib_manager.move +++ /dev/null @@ -1,450 +0,0 @@ -/// The message library manager is responsible for managing the message libraries and providing default message library -/// selections for the endpoint. -/// The registration of a message library happens in several steps: -/// 1. The message library is deployed and made available through the message library router. -/// 2. The message library address is registered with the message library manager: this irrevocably enables the use of -/// the message library through this endpoint (but not on any pathways). -/// 3. A default message library is registered for each individual pathway: this irreversibly enables the use of the -/// message library for the given pathway. -/// -/// Once a message library's default is set, the OApp can override the default message library for any pathway through -/// the separate OApp configuration interface. -module endpoint_v2::msglib_manager { - use std::event::emit; - - use endpoint_v2::store; - use endpoint_v2::timeout; - use router_node_0::router_node; - - friend endpoint_v2::admin; - friend endpoint_v2::endpoint; - friend endpoint_v2::channels; - - #[test_only] - friend endpoint_v2::msglib_manager_tests; - #[test_only] - friend endpoint_v2::test_helpers; - #[test_only] - friend endpoint_v2::channels_tests; - - // ==================================================== Helpers =================================================== - - inline fun assert_library_registered(lib: address) { - assert!(store::is_registered_msglib(lib), EUNREGISTERED_MSGLIB); - } - - inline fun is_in_grace_period(src_eid: u32): bool { - store::has_default_receive_library_timeout(src_eid) && - timeout::is_active(&store::get_default_receive_library_timeout(src_eid)) - } - - inline fun get_default_receive_library_timeout_prior_lib(src_eid: u32): address { - timeout::get_library(&store::get_default_receive_library_timeout(src_eid)) - } - - // ================================================ Core Functions ================================================ - - /// Register a new message library - public(friend) fun register_library(lib: address) { - // Make sure it is available to be registered - assert_connected_to_router(lib); - // Make sure it is not already registered - assert!(!store::is_registered_msglib(lib), EALREADY_REGISTERED); - // Add the message library and emit - store::add_msglib(lib); - emit(LibraryRegistered { new_lib: lib }); - } - - /// Asserts that a library is connected to the router and not a placeholder. - inline fun assert_connected_to_router(lib: address) { - // The version call will fail if a message library is not in the router or if it is a placeholder. - router_node::version(lib); - } - - /// Gets a list of all message libraries that are registered - public(friend) fun get_registered_libraries(start_index: u64, max_entries: u64): vector
{ - store::registered_msglibs(start_index, max_entries) - } - - /// Checks if a particular library address is registered - public(friend) fun is_registered_library(lib: address): bool { - store::is_registered_msglib(lib) - } - - public(friend) fun set_config( - oapp: address, - lib: address, - config_type: u32, - config: vector, - ) { - assert_library_registered(lib); - let to_msglib_call_ref = &store::make_dynamic_call_ref(lib, b"set_config"); - router_node::set_config(lib, to_msglib_call_ref, oapp, config_type, config); - } - - public(friend) fun get_config( - oapp: address, - lib: address, - eid: u32, - config_type: u32, - ): vector { - assert_library_registered(lib); - router_node::get_config(lib, oapp, eid, config_type) - } - - // ============================================ Default Send Libraries ============================================ - - fun assert_msglib_supports_send_eid(lib: address, dst_eid: u32) { - assert!(router_node::is_supported_send_eid(lib, dst_eid), EUNSUPPORTED_DST_EID); - } - - /// Gets the default send library - public(friend) fun get_default_send_library(dst_eid: u32): address { - store::get_default_send_library(dst_eid) - } - - /// Set the default Endpoint default send library for a dest_eid. - /// If there is no default send library set, the dest_eid is deemed to be unsupported. - public(friend) fun set_default_send_library(dst_eid: u32, new_lib: address) { - assert_library_registered(new_lib); - assert_msglib_supports_send_eid(new_lib, dst_eid); - - if (store::has_default_send_library(dst_eid)) { - let old_lib = store::get_default_send_library(dst_eid); - assert!(old_lib != new_lib, EATTEMPTED_TO_SET_CURRENT_LIBRARY); - }; - - store::set_default_send_library(dst_eid, new_lib); - emit(DefaultSendLibrarySet { eid: dst_eid, new_lib }); - } - - // ============================================== Oapp Send Libraries ============================================= - - public(friend) fun set_send_library( - sender: address, - dst_eid: u32, - msglib: address, - ) { - if (msglib == @0x0) { - assert!(store::has_send_library(sender, dst_eid), EOAPP_SEND_LIB_NOT_SET); - store::unset_send_library(sender, dst_eid); - } else { - assert_library_registered(msglib); - assert_msglib_supports_send_eid(msglib, dst_eid); - - if (store::has_send_library(sender, dst_eid)) { - let old_lib = store::get_send_library(sender, dst_eid); - assert!(old_lib != msglib, EATTEMPTED_TO_SET_CURRENT_LIBRARY); - }; - store::set_send_library(sender, dst_eid, msglib); - }; - emit(SendLibrarySet { sender, eid: dst_eid, new_lib: msglib }); - } - - /// Gets the effective send library for the given destination EID, returns both the library and a flag indicating if - /// this is a fallback to the default (meaning the library is not configured for the oapp) - public(friend) fun get_effective_send_library(sender: address, dst_eid: u32): (address, bool) { - if (store::has_send_library(sender, dst_eid)) { - (store::get_send_library(sender, dst_eid), false) - } else { - (store::get_default_send_library(dst_eid), true) - } - } - - - // =========================================== Default Receive Libraries ========================================== - - fun assert_msglib_supports_receive_eid(lib: address, src_eid: u32) { - assert!(router_node::is_supported_receive_eid(lib, src_eid), EUNSUPPORTED_SRC_EID); - } - - /// Set the default receive library. - /// If the grace_period is non-zero, also set the grace message library and expiry - public(friend) fun set_default_receive_library(src_eid: u32, new_lib: address, grace_period: u64) { - assert_library_registered(new_lib); - assert_msglib_supports_receive_eid(new_lib, src_eid); - - if (store::has_default_receive_library(src_eid)) { - let old_lib = store::get_default_receive_library(src_eid); - assert!(old_lib != new_lib, EATTEMPTED_TO_SET_CURRENT_LIBRARY); - }; - - let old_lib = if (store::has_default_receive_library(src_eid)) { - store::get_default_receive_library(src_eid) - } else @0x0; - - // Set the grace period if it is greater than 0 - if (grace_period > 0) { - assert!(old_lib != @0x0, ENO_PRIOR_LIBRARY_FOR_FALLBACK); - let timeout = timeout::new_timeout_from_grace_period(grace_period, old_lib); - store::set_default_receive_library_timeout(src_eid, timeout); - - let expiry = timeout::get_expiry(&timeout); - emit(DefaultReceiveLibraryTimeoutSet { eid: src_eid, old_lib, expiry }); - } else { - if (store::has_default_receive_library_timeout(src_eid)) { - store::unset_default_receive_library_timeout(src_eid); - }; - emit(DefaultReceiveLibraryTimeoutSet { eid: src_eid, old_lib, expiry: 0 }); - }; - store::set_default_receive_library(src_eid, new_lib); - emit(DefaultReceiveLibrarySet { eid: src_eid, new_lib }); - } - - public(friend) fun set_default_receive_library_timeout( - src_eid: u32, - lib: address, - expiry: u64, - ) { - if (expiry == 0) { - store::unset_default_receive_library_timeout(src_eid); - emit(DefaultReceiveLibraryTimeoutSet { eid: src_eid, expiry: 0, old_lib: lib }); - } else { - assert_library_registered(lib); - assert_msglib_supports_receive_eid(lib, src_eid); - let timeout = timeout::new_timeout_from_expiry(expiry, lib); - assert!(timeout::is_active(&timeout), EEXPIRY_IS_IN_PAST); - store::set_default_receive_library_timeout(src_eid, timeout); - emit(DefaultReceiveLibraryTimeoutSet { eid: src_eid, expiry, old_lib: lib }); - }; - } - - /// Asserts that a given receive library is the default receive library for a given source EID. - /// This will also check the grace period (prior library) if active. - public(friend) fun matches_default_receive_library(src_eid: u32, actual_receive_lib: address): bool { - if (actual_receive_lib == store::get_default_receive_library(src_eid)) { return true }; - - // If no match, check the grace period - if (!is_in_grace_period(src_eid)) { return false }; - - get_default_receive_library_timeout_prior_lib(src_eid) == actual_receive_lib - } - - public(friend) fun get_default_receive_library(src_eid: u32): address { - store::get_default_receive_library(src_eid) - } - - - // ================================================= Receive Oapp ================================================= - - - public(friend) fun set_receive_library( - receiver: address, - src_eid: u32, - msglib: address, - grace_period: u64, - ) { - // If MsgLib is @0x0, unset the library - if (msglib == @0x0) { - // Setting a grace period is not supported when unsetting the library to match EVM spec - // This can still be achieved by explicitly setting the OApp to the default library with a grace period - // And then after the grace period, unsetting the library by setting it to @0x0 - assert!(grace_period == 0, ECANNOT_SET_GRACE_PERIOD_ON_RECEIVE_LIBRARY_UNSET); - - assert!(store::has_receive_library(receiver, src_eid), ERECEIVE_LIB_NOT_SET); - let old_lib = store::get_receive_library(receiver, src_eid); - store::unset_receive_library(receiver, src_eid); - emit(ReceiveLibrarySet { receiver, eid: src_eid, new_lib: @0x0 }); - if (store::has_receive_library_timeout(receiver, src_eid)) { - store::unset_grace_period_receive_library_config(receiver, src_eid); - }; - emit(ReceiveLibraryTimeoutSet { receiver, eid: src_eid, old_lib, timeout: 0 }); - return - }; - - // Check if the library is registered and supports the receive EID - assert_library_registered(msglib); - assert_msglib_supports_receive_eid(msglib, src_eid); - - // Make sure we are not setting the same library - if (store::has_receive_library(receiver, src_eid)) { - let old_lib = store::get_receive_library(receiver, src_eid); - assert!(old_lib != msglib, EATTEMPTED_TO_SET_CURRENT_LIBRARY); - }; - - let (old_lib, is_default) = get_effective_receive_library(receiver, src_eid); - - store::set_oapp_receive_library(receiver, src_eid, msglib); - emit(ReceiveLibrarySet { receiver, eid: src_eid, new_lib: msglib }); - - if (grace_period == 0) { - // If there is a timeout and grace_period is 0, remove the current timeout - if (store::has_receive_library_timeout(receiver, src_eid)) { - store::unset_grace_period_receive_library_config(receiver, src_eid); - }; - let non_default_old_lib = if (is_default) { @0x0 } else { old_lib }; - emit(ReceiveLibraryTimeoutSet { receiver, eid: src_eid, old_lib: non_default_old_lib, timeout: 0 }); - } else { - // Setting a grace period is not supported when setting the library from the default library - // This can still be achieved by explicitly setting the OApp to the default library, then setting it to the - // desired library with a default - assert!(!is_default, ETIMEOUT_SET_FOR_DEFAULT_RECEIVE_LIBRARY); - - let grace_period = timeout::new_timeout_from_grace_period(grace_period, old_lib); - store::set_receive_library_timeout(receiver, src_eid, grace_period); - let expiry = timeout::get_expiry(&grace_period); - emit(ReceiveLibraryTimeoutSet { receiver, eid: src_eid, old_lib, timeout: expiry }); - } - } - - - public(friend) fun set_receive_library_timeout( - receiver: address, - src_eid: u32, - lib: address, - expiry: u64, - ) { - if (expiry == 0) { - // Abort if there is no timeout to delete - assert!(store::has_receive_library_timeout(receiver, src_eid), ENO_TIMEOUT_TO_DELETE); - let timeout = store::get_receive_library_timeout(receiver, src_eid); - assert!(timeout::is_active(&timeout), ENO_TIMEOUT_TO_DELETE); - store::unset_grace_period_receive_library_config(receiver, src_eid); - emit(ReceiveLibraryTimeoutSet { receiver, eid: src_eid, old_lib: lib, timeout: 0 }); - } else { - assert!(store::has_receive_library(receiver, src_eid), ERECEIVE_LIB_NOT_SET); - assert_msglib_supports_receive_eid(lib, src_eid); - assert_library_registered(lib); - let timeout = timeout::new_timeout_from_expiry(expiry, lib); - assert!(timeout::is_active(&timeout), EEXPIRY_IS_IN_PAST); - store::set_receive_library_timeout(receiver, src_eid, timeout); - emit(ReceiveLibraryTimeoutSet { receiver, eid: src_eid, old_lib: lib, timeout: expiry }); - }; - } - - /// Gets the effective receive library for the given source EID, returns both the library and a flag indicating if - /// this is a fallback to the default (meaning the library is not configured) - public(friend) fun get_effective_receive_library(receiver: address, src_eid: u32): (address, bool) { - if (store::has_receive_library(receiver, src_eid)) { - (store::get_receive_library(receiver, src_eid), false) - } else { - (store::get_default_receive_library(src_eid), true) - } - } - - /// Check if the provided message library is valid for the given OApp and source EID. - public(friend) fun is_valid_receive_library_for_oapp(receiver: address, src_eid: u32, msglib: address): bool { - if (!is_registered_library(msglib)) { return false }; - - // 1. Check if it is the default library, if it is not already set - if (!store::has_receive_library(receiver, src_eid)) { - return matches_default_receive_library(src_eid, msglib) - }; - - // 2. Check if it is the configured library - if (store::get_receive_library(receiver, src_eid) == msglib) { return true }; - - // 3. If it is in the grace period, check the prior library - if (store::has_receive_library_timeout(receiver, src_eid)) { - let timeout = store::get_receive_library_timeout(receiver, src_eid); - let is_active = timeout::is_active(&timeout); - if (is_active && timeout::get_library(&timeout) == msglib) { return true }; - }; - - // 4. Otherwise, it is invalid - false - } - - // ==================================================== Events ==================================================== - - #[event] - struct LibraryRegistered has drop, copy, store { new_lib: address } - - #[event] - struct DefaultSendLibrarySet has drop, copy, store { eid: u32, new_lib: address } - - #[event] - struct DefaultReceiveLibrarySet has drop, copy, store { - eid: u32, - new_lib: address, - } - - #[event] - struct DefaultReceiveLibraryTimeoutSet has drop, copy, store { - eid: u32, - old_lib: address, - expiry: u64, - } - - #[event] - struct SendLibrarySet has drop, copy, store { - sender: address, - eid: u32, - new_lib: address, - } - - #[event] - struct ReceiveLibrarySet has drop, copy, store { - receiver: address, - eid: u32, - new_lib: address, - } - - #[event] - struct ReceiveLibraryTimeoutSet has drop, copy, store { - receiver: address, - eid: u32, - old_lib: address, - timeout: u64, - } - - #[test_only] - public fun library_registered_event(lib: address): LibraryRegistered { LibraryRegistered { new_lib: lib } } - - #[test_only] - public fun default_send_library_set_event( - eid: u32, - new_lib: address, - ): DefaultSendLibrarySet { DefaultSendLibrarySet { eid, new_lib } } - - #[test_only] - public fun default_receive_library_set_event( - eid: u32, - new_lib: address, - ): DefaultReceiveLibrarySet { DefaultReceiveLibrarySet { eid, new_lib } } - - #[test_only] - public fun default_receive_library_timeout_set_event( - eid: u32, - old_lib: address, - expiry: u64, - ): DefaultReceiveLibraryTimeoutSet { DefaultReceiveLibraryTimeoutSet { eid, old_lib, expiry } } - - #[test_only] - public fun send_library_set_event( - sender: address, - eid: u32, - new_lib: address, - ): SendLibrarySet { SendLibrarySet { sender, eid, new_lib } } - - #[test_only] - public fun receive_library_set_event( - receiver: address, - eid: u32, - new_lib: address, - ): ReceiveLibrarySet { ReceiveLibrarySet { receiver, eid, new_lib } } - - #[test_only] - public fun receive_library_timeout_set_event( - receiver: address, - eid: u32, - old_lib: address, - timeout: u64, - ): ReceiveLibraryTimeoutSet { ReceiveLibraryTimeoutSet { receiver, eid, old_lib, timeout } } - - // ================================================== Error Codes ================================================= - - const EALREADY_REGISTERED: u64 = 1; - const EATTEMPTED_TO_SET_CURRENT_LIBRARY: u64 = 2; - const ECANNOT_SET_GRACE_PERIOD_ON_RECEIVE_LIBRARY_UNSET: u64 = 3; - const EEXPIRY_IS_IN_PAST: u64 = 4; - const ENO_PRIOR_LIBRARY_FOR_FALLBACK: u64 = 5; - const ENO_TIMEOUT_TO_DELETE: u64 = 6; - const EOAPP_SEND_LIB_NOT_SET: u64 = 7; - const ERECEIVE_LIB_NOT_SET: u64 = 8; - const ETIMEOUT_SET_FOR_DEFAULT_RECEIVE_LIBRARY: u64 = 9; - const EUNREGISTERED_MSGLIB: u64 = 10; - const EUNSUPPORTED_DST_EID: u64 = 11; - const EUNSUPPORTED_SRC_EID: u64 = 12; -} - diff --git a/examples/oft-movement/build/oft/sources/dependencies/endpoint_v2/registration.move b/examples/oft-movement/build/oft/sources/dependencies/endpoint_v2/registration.move deleted file mode 100644 index 726ecf36c..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/endpoint_v2/registration.move +++ /dev/null @@ -1,85 +0,0 @@ -module endpoint_v2::registration { - use std::event::emit; - use std::string::{Self, String}; - - use endpoint_v2::store; - - friend endpoint_v2::endpoint; - - #[test_only] - friend endpoint_v2::registration_tests; - #[test_only] - friend endpoint_v2::channels_tests; - - /// Initialize the OApp with registering the lz_receive function - /// register_oapp() must also be called before the OApp can receive messages - public(friend) fun register_oapp(oapp: address, lz_receive_module: String) { - assert!(string::length(&lz_receive_module) <= 100, EEXCESSIVE_STRING_LENGTH); - assert!(!store::is_registered_oapp(oapp), EALREADY_REGISTERED); - store::register_oapp(oapp, lz_receive_module); - emit(OAppRegistered { - oapp, - lz_receive_module, - }); - } - - /// Registers the Composer with the lz_compose function - public(friend) fun register_composer(composer: address, lz_compose_module: String) { - assert!(string::length(&lz_compose_module) <= 100, EEXCESSIVE_STRING_LENGTH); - assert!(!store::is_registered_composer(composer), EALREADY_REGISTERED); - store::register_composer(composer, lz_compose_module); - emit(ComposerRegistered { - composer, - lz_compose_module, - }); - } - - /// Checks if the OApp is registered - public(friend) fun is_registered_oapp(oapp: address): bool { - store::is_registered_oapp(oapp) - } - - /// Checks if the Composer is registered - public(friend) fun is_registered_composer(composer: address): bool { - store::is_registered_composer(composer) - } - - /// Returns the lz_receive_module of the OApp - public(friend) fun lz_receive_module(oapp: address): String { - store::lz_receive_module(oapp) - } - - /// Returns the lz_compose_module of the Composer - public(friend) fun lz_compose_module(composer: address): String { - store::lz_compose_module(composer) - } - - // ==================================================== Events ==================================================== - - #[event] - struct OAppRegistered has drop, store { - oapp: address, - lz_receive_module: String, - } - - #[event] - struct ComposerRegistered has drop, store { - composer: address, - lz_compose_module: String, - } - - #[test_only] - public fun oapp_registered_event(oapp: address, lz_receive_module: String): OAppRegistered { - OAppRegistered { oapp, lz_receive_module } - } - - #[test_only] - public fun composer_registered_event(composer: address, lz_compose_module: String): ComposerRegistered { - ComposerRegistered { composer, lz_compose_module } - } - - // ================================================== Error Codes ================================================= - - const EALREADY_REGISTERED: u64 = 1; - const EEXCESSIVE_STRING_LENGTH: u64 = 2; -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/endpoint_v2/store.move b/examples/oft-movement/build/oft/sources/dependencies/endpoint_v2/store.move deleted file mode 100644 index dc239e236..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/endpoint_v2/store.move +++ /dev/null @@ -1,514 +0,0 @@ -module endpoint_v2::store { - use std::math64::min; - use std::string::{Self, String}; - use std::table::{Self, Table}; - use std::vector; - - use endpoint_v2::timeout::Timeout; - use endpoint_v2_common::bytes32::Bytes32; - use endpoint_v2_common::contract_identity::{Self, ContractSigner, DynamicCallRef}; - - friend endpoint_v2::endpoint; - friend endpoint_v2::channels; - friend endpoint_v2::messaging_composer; - friend endpoint_v2::msglib_manager; - friend endpoint_v2::registration; - - #[test_only] - friend endpoint_v2::admin; - #[test_only] - friend endpoint_v2::endpoint_tests; - #[test_only] - friend endpoint_v2::channels_tests; - #[test_only] - friend endpoint_v2::msglib_manager_tests; - #[test_only] - friend endpoint_v2::messaging_composer_tests; - #[test_only] - friend endpoint_v2::registration_tests; - - struct EndpointStore has key { - contract_signer: ContractSigner, - oapps: Table, - composers: Table, - msglibs: Table, - msglib_count: u64, - msglibs_registered: Table, - msglibs_default_send_libs: Table, - msglibs_default_receive_libs: Table, - msglibs_default_receive_lib_timeout_configs: Table, - } - - struct OAppStore has store { - lz_receive_module: String, - channels: Table, - msglibs_send_libs: Table, - msglibs_receive_libs: Table, - msglibs_receive_lib_timeout_configs: Table, - } - - struct ComposerStore has store { - lz_compose_module: String, - compose_message_hashes: Table, - } - - struct Channel has store { - outbound_nonce: u64, - inbound_pathway_registered: bool, - inbound_lazy_nonce: u64, - inbound_hashes: Table, - } - - struct ChannelKey has store, drop, copy { remote_eid: u32, remote_address: Bytes32 } - - struct ComposeKey has store, drop, copy { from: address, guid: Bytes32, index: u16 } - - fun init_module(account: &signer) { - move_to(account, EndpointStore { - contract_signer: contract_identity::create_contract_signer(account), - oapps: table::new(), - composers: table::new(), - msglibs: table::new(), - msglib_count: 0, - msglibs_registered: table::new(), - msglibs_default_send_libs: table::new(), - msglibs_default_receive_libs: table::new(), - msglibs_default_receive_lib_timeout_configs: table::new(), - }) - } - - #[test_only] - public fun init_module_for_test() { - let account = &std::account::create_signer_for_test(@endpoint_v2); - init_module(account); - } - - // ==================================================== General =================================================== - - public(friend) fun make_dynamic_call_ref( - target_contract: address, - authorization: vector, - ): DynamicCallRef acquires EndpointStore { - contract_identity::make_dynamic_call_ref(&store().contract_signer, target_contract, authorization) - } - - // OApp - Helpers - inline fun store(): &EndpointStore { borrow_global(@endpoint_v2) } - - inline fun store_mut(): &mut EndpointStore { borrow_global_mut(@endpoint_v2) } - - inline fun oapps(): &Table { &store().oapps } - - inline fun oapps_mut(): &mut Table { &mut store_mut().oapps } - - inline fun composers(): &Table { &store().composers } - - inline fun composers_mut(): &mut Table { &mut store_mut().composers } - - inline fun oapp_store(oapp: address): &OAppStore { - assert!(table::contains(oapps(), oapp), EUNREGISTERED_OAPP); - table::borrow(oapps(), oapp) - } - - inline fun oapp_store_mut(oapp: address): &mut OAppStore { - assert!(table::contains(oapps(), oapp), EUNREGISTERED_OAPP); - table::borrow_mut(oapps_mut(), oapp) - } - - inline fun composer_store(composer: address): &ComposerStore { - assert!(table::contains(composers(), composer), EUNREGISTERED_COMPOSER); - table::borrow(composers(), composer) - } - - inline fun composer_store_mut(composer: address): &mut ComposerStore { - assert!(table::contains(composers(), composer), EUNREGISTERED_COMPOSER); - table::borrow_mut(composers_mut(), composer) - } - - inline fun has_channel(oapp: address, remote_eid: u32, remote_address: Bytes32): bool { - table::contains(&oapp_store(oapp).channels, ChannelKey { remote_eid, remote_address }) - } - - inline fun create_channel(oapp: address, remote_eid: u32, remote_address: Bytes32) acquires EndpointStore { - table::add(&mut oapp_store_mut(oapp).channels, ChannelKey { remote_eid, remote_address }, Channel { - outbound_nonce: 0, - inbound_pathway_registered: false, - inbound_lazy_nonce: 0, - inbound_hashes: table::new(), - }); - } - - /// Get a reference to an OApp channel. The initialization of a channel should be implicit and transparent to the - /// user. - /// Therefore caller should generally check that the channel exists before calling this function; if it doesn't - /// exist, it should return the value that is consistent with the initial state of a channel - inline fun channel(oapp: address, remote_eid: u32, remote_address: Bytes32): &Channel { - let channel_key = ChannelKey { remote_eid, remote_address }; - table::borrow(&oapp_store(oapp).channels, channel_key) - } - - /// Get a mutable reference to an OApp channel. If the channel doesn't exist, create it - inline fun channel_mut(oapp: address, remote_eid: u32, remote_address: Bytes32): &mut Channel { - let channel_key = ChannelKey { remote_eid, remote_address }; - if (!table::contains(&oapp_store(oapp).channels, channel_key)) { - create_channel(oapp, remote_eid, remote_address); - }; - table::borrow_mut(&mut oapp_store_mut(oapp).channels, channel_key) - } - - // ================================================= OApp General ================================================= - - public(friend) fun register_oapp(oapp: address, lz_receive_module: String) acquires EndpointStore { - assert!(!string::is_empty(&lz_receive_module), EEMPTY_MODULE_NAME); - table::add(oapps_mut(), oapp, OAppStore { - channels: table::new(), - lz_receive_module, - msglibs_send_libs: table::new(), - msglibs_receive_libs: table::new(), - msglibs_receive_lib_timeout_configs: table::new(), - }); - } - - public(friend) fun is_registered_oapp(oapp: address): bool acquires EndpointStore { - table::contains(oapps(), oapp) - } - - public(friend) fun lz_receive_module(receiver: address): String acquires EndpointStore { - oapp_store(receiver).lz_receive_module - } - - // ================================================= OApp Outbound ================================================ - - public(friend) fun outbound_nonce(sender: address, dst_eid: u32, receiver: Bytes32): u64 acquires EndpointStore { - if (has_channel(sender, dst_eid, receiver)) { - channel(sender, dst_eid, receiver).outbound_nonce - } else { - 0 - } - } - - public(friend) fun increment_outbound_nonce( - sender: address, - dst_eid: u32, - receiver: Bytes32, - ): u64 acquires EndpointStore { - let outbound_nonce = &mut channel_mut(sender, dst_eid, receiver).outbound_nonce; - *outbound_nonce = *outbound_nonce + 1; - *outbound_nonce - } - - // OApp - Inbound - public(friend) fun receive_pathway_registered( - receiver: address, - src_eid: u32, - sender: Bytes32, - ): bool acquires EndpointStore { - if (is_registered_oapp(receiver) && has_channel(receiver, src_eid, sender)) { - channel(receiver, src_eid, sender).inbound_pathway_registered - } else { - false - } - } - - public(friend) fun register_receive_pathway( - receiver: address, - src_eid: u32, - sender: Bytes32, - ) acquires EndpointStore { - if (!has_channel(receiver, src_eid, sender)) { create_channel(receiver, src_eid, sender) }; - let channel = channel_mut(receiver, src_eid, sender); - channel.inbound_pathway_registered = true; - } - - public(friend) fun assert_receive_pathway_registered( - receiver: address, - src_eid: u32, - sender: Bytes32, - ) acquires EndpointStore { - assert!(receive_pathway_registered(receiver, src_eid, sender), EUNREGISTERED_PATHWAY); - } - - public(friend) fun lazy_inbound_nonce( - receiver: address, - src_eid: u32, - sender: Bytes32, - ): u64 acquires EndpointStore { - if (has_channel(receiver, src_eid, sender)) { - channel(receiver, src_eid, sender).inbound_lazy_nonce - } else { - 0 - } - } - - public(friend) fun set_lazy_inbound_nonce( - receiver: address, - src_eid: u32, - sender: Bytes32, - nonce: u64, - ) acquires EndpointStore { - channel_mut(receiver, src_eid, sender).inbound_lazy_nonce = nonce; - } - - public(friend) fun has_payload_hash( - receiver: address, - src_eid: u32, - sender: Bytes32, - nonce: u64, - ): bool acquires EndpointStore { - if (has_channel(receiver, src_eid, sender)) { - table::contains(&channel(receiver, src_eid, sender).inbound_hashes, nonce) - } else { - false - } - } - - public(friend) fun get_payload_hash( - receiver: address, - src_eid: u32, - sender: Bytes32, - nonce: u64, - ): Bytes32 acquires EndpointStore { - assert!(has_channel(receiver, src_eid, sender), EUNREGISTERED_PATHWAY); - let hashes = &channel(receiver, src_eid, sender).inbound_hashes; - assert!(table::contains(hashes, nonce), ENO_PAYLOAD_HASH); - *table::borrow(hashes, nonce) - } - - public(friend) fun set_payload_hash( - receiver: address, - src_eid: u32, - sender: Bytes32, - nonce: u64, - hash: Bytes32, - ) acquires EndpointStore { - let payload_hashes = &mut channel_mut(receiver, src_eid, sender).inbound_hashes; - table::upsert(payload_hashes, nonce, hash); - } - - public(friend) fun remove_payload_hash( - receiver: address, - src_eid: u32, - sender: Bytes32, - nonce: u64, - ): Bytes32 acquires EndpointStore { - let hashes = &mut channel_mut(receiver, src_eid, sender).inbound_hashes; - assert!(table::contains(hashes, nonce), ENO_PAYLOAD_HASH); - table::remove(hashes, nonce) - } - - // ==================================================== Compose =================================================== - - public(friend) fun register_composer(composer: address, lz_compose_module: String) acquires EndpointStore { - assert!(!string::is_empty(&lz_compose_module), EEMPTY_MODULE_NAME); - table::add(composers_mut(), composer, ComposerStore { - lz_compose_module, - compose_message_hashes: table::new(), - }); - } - - public(friend) fun is_registered_composer(composer: address): bool acquires EndpointStore { - table::contains(composers(), composer) - } - - public(friend) fun lz_compose_module(composer: address): String acquires EndpointStore { - composer_store(composer).lz_compose_module - } - - public(friend) fun has_compose_message_hash( - from: address, - to: address, - guid: Bytes32, - index: u16, - ): bool acquires EndpointStore { - let compose_key = ComposeKey { from, guid, index }; - table::contains(&composer_store(to).compose_message_hashes, compose_key) - } - - public(friend) fun get_compose_message_hash( - from: address, - to: address, - guid: Bytes32, - index: u16, - ): Bytes32 acquires EndpointStore { - let compose_key = ComposeKey { from, guid, index }; - *table::borrow(&composer_store(to).compose_message_hashes, compose_key) - } - - public(friend) fun set_compose_message_hash( - from: address, - to: address, - guid: Bytes32, - index: u16, - hash: Bytes32, - ) acquires EndpointStore { - let compose_key = ComposeKey { from, guid, index }; - table::upsert(&mut composer_store_mut(to).compose_message_hashes, compose_key, hash); - } - - // =============================================== Message Libraries ============================================== - - public(friend) fun registered_msglibs(start: u64, max_count: u64): vector
acquires EndpointStore { - let msglibs = &store().msglibs; - let end = min(start + max_count, store().msglib_count); - if (start >= end) { return vector[] }; - - let result = vector[]; - for (i in start..end) { - let lib = *table::borrow(msglibs, i); - vector::push_back(&mut result, lib); - }; - result - } - - public(friend) fun add_msglib(lib: address) acquires EndpointStore { - let count = store().msglib_count; - table::add(&mut store_mut().msglibs, count, lib); - store_mut().msglib_count = count + 1; - - table::add(&mut store_mut().msglibs_registered, lib, true); - } - - public(friend) fun is_registered_msglib(lib: address): bool acquires EndpointStore { - table::contains(&store().msglibs_registered, lib) - } - - public(friend) fun has_default_send_library(dst_eid: u32): bool acquires EndpointStore { - let default_send_libs = &store().msglibs_default_send_libs; - table::contains(default_send_libs, dst_eid) - } - - public(friend) fun get_default_send_library(dst_eid: u32): address acquires EndpointStore { - let default_send_libs = &store().msglibs_default_send_libs; - assert!(table::contains(default_send_libs, dst_eid), EUNSUPPORTED_DST_EID); - *table::borrow(default_send_libs, dst_eid) - } - - public(friend) fun set_default_send_library(dst_eid: u32, lib: address) acquires EndpointStore { - let default_send_libs = &mut store_mut().msglibs_default_send_libs; - table::upsert(default_send_libs, dst_eid, lib); - } - - public(friend) fun has_default_receive_library(src_eid: u32): bool acquires EndpointStore { - let default_receive_libs = &store().msglibs_default_receive_libs; - table::contains(default_receive_libs, src_eid) - } - - public(friend) fun get_default_receive_library(src_eid: u32): address acquires EndpointStore { - let default_receive_libs = &store().msglibs_default_receive_libs; - assert!(table::contains(default_receive_libs, src_eid), EUNSUPPORTED_SRC_EID); - *table::borrow(default_receive_libs, src_eid) - } - - public(friend) fun set_default_receive_library(src_eid: u32, lib: address) acquires EndpointStore { - let default_receive_libs = &mut store_mut().msglibs_default_receive_libs; - table::upsert(default_receive_libs, src_eid, lib); - } - - public(friend) fun has_default_receive_library_timeout(src_eid: u32): bool acquires EndpointStore { - let default_timeout_configs = &store().msglibs_default_receive_lib_timeout_configs; - table::contains(default_timeout_configs, src_eid) - } - - public(friend) fun get_default_receive_library_timeout( - src_eid: u32, - ): Timeout acquires EndpointStore { - let default_timeout_configs = &store().msglibs_default_receive_lib_timeout_configs; - *table::borrow(default_timeout_configs, src_eid) - } - - public(friend) fun set_default_receive_library_timeout( - src_eid: u32, - config: Timeout, - ) acquires EndpointStore { - let default_timeout_configs = &mut store_mut().msglibs_default_receive_lib_timeout_configs; - table::upsert(default_timeout_configs, src_eid, config); - } - - public(friend) fun unset_default_receive_library_timeout( - src_eid: u32, - ): Timeout acquires EndpointStore { - let default_timeout_configs = &mut store_mut().msglibs_default_receive_lib_timeout_configs; - table::remove(default_timeout_configs, src_eid) - } - - public(friend) fun has_send_library(sender: address, dst_eid: u32): bool acquires EndpointStore { - let send_libs = &oapp_store(sender).msglibs_send_libs; - table::contains(send_libs, dst_eid) - } - - public(friend) fun get_send_library(sender: address, dst_eid: u32): address acquires EndpointStore { - let send_libs = &oapp_store(sender).msglibs_send_libs; - *table::borrow(send_libs, dst_eid) - } - - public(friend) fun set_send_library(sender: address, dst_eid: u32, lib: address) acquires EndpointStore { - let send_libs = &mut oapp_store_mut(sender).msglibs_send_libs; - table::upsert(send_libs, dst_eid, lib); - } - - public(friend) fun unset_send_library(sender: address, dst_eid: u32): address acquires EndpointStore { - let send_libs = &mut oapp_store_mut(sender).msglibs_send_libs; - table::remove(send_libs, dst_eid) - } - - public(friend) fun has_receive_library(receiver: address, src_eid: u32): bool acquires EndpointStore { - let receive_libs = &oapp_store(receiver).msglibs_receive_libs; - table::contains(receive_libs, src_eid) - } - - public(friend) fun get_receive_library(receiver: address, src_eid: u32): address acquires EndpointStore { - let receive_libs = &oapp_store(receiver).msglibs_receive_libs; - *table::borrow(receive_libs, src_eid) - } - - public(friend) fun set_oapp_receive_library( - receiver: address, - src_eid: u32, - lib: address, - ) acquires EndpointStore { - let receive_libs = &mut oapp_store_mut(receiver).msglibs_receive_libs; - table::upsert(receive_libs, src_eid, lib); - } - - public(friend) fun unset_receive_library(receiver: address, src_eid: u32): address acquires EndpointStore { - let receive_libs = &mut oapp_store_mut(receiver).msglibs_receive_libs; - table::remove(receive_libs, src_eid) - } - - public(friend) fun has_receive_library_timeout(receiver: address, src_eid: u32): bool acquires EndpointStore { - let receive_lib_timeout_configs = &oapp_store(receiver).msglibs_receive_lib_timeout_configs; - table::contains(receive_lib_timeout_configs, src_eid) - } - - public(friend) fun get_receive_library_timeout(receiver: address, src_eid: u32): Timeout acquires EndpointStore { - let receive_lib_grace_period_config = &oapp_store(receiver).msglibs_receive_lib_timeout_configs; - *table::borrow(receive_lib_grace_period_config, src_eid) - } - - public(friend) fun set_receive_library_timeout( - receiver: address, - src_eid: u32, - config: Timeout, - ) acquires EndpointStore { - let receive_lib_timeout_configs = &mut oapp_store_mut(receiver).msglibs_receive_lib_timeout_configs; - table::upsert(receive_lib_timeout_configs, src_eid, config); - } - - public(friend) fun unset_grace_period_receive_library_config( - receiver: address, - src_eid: u32, - ): Timeout acquires EndpointStore { - let receive_lib_timeout_configs = &mut oapp_store_mut(receiver).msglibs_receive_lib_timeout_configs; - table::remove(receive_lib_timeout_configs, src_eid) - } - - // ================================================== Error Codes ================================================= - - const EEMPTY_MODULE_NAME: u64 = 1; - const ENO_PAYLOAD_HASH: u64 = 2; - const EUNREGISTERED_OAPP: u64 = 3; - const EUNREGISTERED_COMPOSER: u64 = 4; - const EUNREGISTERED_PATHWAY: u64 = 5; - const EUNSUPPORTED_DST_EID: u64 = 6; - const EUNSUPPORTED_SRC_EID: u64 = 7; -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/endpoint_v2/timeout.move b/examples/oft-movement/build/oft/sources/dependencies/endpoint_v2/timeout.move deleted file mode 100644 index c21263e04..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/endpoint_v2/timeout.move +++ /dev/null @@ -1,45 +0,0 @@ -/// The Timeout configuration is used when migrating the Receive message library, and it defines the window of blocks -/// that the prior library will be allowed to receive messages. When the grace period expires, messages from the prior -/// library will be rejected. -module endpoint_v2::timeout { - use std::block::get_current_block_height; - - friend endpoint_v2::msglib_manager; - - #[test_only] - friend endpoint_v2::msglib_manager_tests; - - struct Timeout has store, drop, copy { - // The block number at which the grace period expires - expiry: u64, - // The address of the fallback library - lib: address, - } - - /// Create a new timeout configuration - public(friend) fun new_timeout_from_grace_period(grace_period_in_blocks: u64, lib: address): Timeout { - let expiry = get_current_block_height() + grace_period_in_blocks; - Timeout { expiry, lib } - } - - /// Create a new timeout configuration using an expiry block number - public(friend) fun new_timeout_from_expiry(expiry: u64, lib: address): Timeout { - Timeout { expiry, lib } - } - - /// Check if the timeout is active - /// A timeout is active so long as the current block height is less than the expiry block number - public(friend) fun is_active(self: &Timeout): bool { - self.expiry > get_current_block_height() - } - - /// Get the address of the fallback library - public(friend) fun get_library(self: &Timeout): address { - self.lib - } - - /// Get the expiry block number - public(friend) fun get_expiry(self: &Timeout): u64 { - self.expiry - } -} \ No newline at end of file diff --git a/examples/oft-movement/build/oft/sources/dependencies/endpoint_v2_common/assert_no_duplicates.move b/examples/oft-movement/build/oft/sources/dependencies/endpoint_v2_common/assert_no_duplicates.move deleted file mode 100644 index 81be6e71a..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/endpoint_v2_common/assert_no_duplicates.move +++ /dev/null @@ -1,19 +0,0 @@ -module endpoint_v2_common::assert_no_duplicates { - use std::vector; - - /// Assert that there are no duplicate addresses in the given vector. - public fun assert_no_duplicates(items: &vector) { - for (i in 0..vector::length(items)) { - for (j in 0..i) { - if (vector::borrow(items, i) == vector::borrow(items, j)) { - abort EDUPLICATE_ITEM - } - } - } - } - - - // ================================================== Error Codes ================================================= - - const EDUPLICATE_ITEM: u64 = 1; -} \ No newline at end of file diff --git a/examples/oft-movement/build/oft/sources/dependencies/endpoint_v2_common/bytes32.move b/examples/oft-movement/build/oft/sources/dependencies/endpoint_v2_common/bytes32.move deleted file mode 100644 index fb3285522..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/endpoint_v2_common/bytes32.move +++ /dev/null @@ -1,62 +0,0 @@ -/// This is a wrapper for vector that enforces a length of 32 bytes -module endpoint_v2_common::bytes32 { - use std::bcs; - use std::from_bcs; - use std::vector; - - public inline fun ZEROS_32_BYTES(): vector { - x"0000000000000000000000000000000000000000000000000000000000000000" - } - - struct Bytes32 has store, drop, copy { - bytes: vector - } - - /// Returns a Bytes32 with all bytes set to zero - public fun zero_bytes32(): Bytes32 { - Bytes32 { bytes: ZEROS_32_BYTES() } - } - - /// Returns a Bytes32 with all bytes set to 0xff - public fun ff_bytes32(): Bytes32 { - Bytes32 { bytes: x"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" } - } - - /// Returns true if the given Bytes32 is all zeros - public fun is_zero(bytes32: &Bytes32): bool { - bytes32.bytes == ZEROS_32_BYTES() - } - - /// Converts a vector of bytes to a Bytes32 - /// The vector must be exactly 32 bytes long - public fun to_bytes32(bytes: vector): Bytes32 { - assert!(vector::length(&bytes) == 32, EINVALID_LENGTH); - Bytes32 { bytes } - } - - /// Converts a Bytes32 to a vector of bytes - public fun from_bytes32(bytes32: Bytes32): vector { - bytes32.bytes - } - - /// Converts an address to a Bytes32 - public fun from_address(addr: address): Bytes32 { - let bytes = bcs::to_bytes(&addr); - to_bytes32(bytes) - } - - /// Converts a Bytes32 to an address - public fun to_address(bytes32: Bytes32): address { - from_bcs::to_address(bytes32.bytes) - } - - /// Get the keccak256 hash of the given bytes - public fun keccak256(bytes: vector): Bytes32 { - let hash = std::aptos_hash::keccak256(bytes); - to_bytes32(hash) - } - - // ================================================== Error Codes ================================================= - - const EINVALID_LENGTH: u64 = 1; -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/endpoint_v2_common/config_eid_tagged.move b/examples/oft-movement/build/oft/sources/dependencies/endpoint_v2_common/config_eid_tagged.move deleted file mode 100644 index 4a81a40e2..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/endpoint_v2_common/config_eid_tagged.move +++ /dev/null @@ -1,33 +0,0 @@ -/// Provides a generic wrapper struct that can tag an EID value with configuration -module endpoint_v2_common::config_eid_tagged { - struct EidTagged has drop, copy, store { - eid: u32, - config: Config, - } - - /// Tag a configuration with an EID - public fun tag_with_eid(eid: u32, config: Config): EidTagged { - EidTagged { eid, config } - } - - /// Get the EID from the tagged configuration - public fun get_eid(c: &EidTagged): u32 { - c.eid - } - - /// Borrow the configuration from the tagged configuration - public fun borrow_config(c: &EidTagged): &Config { - &c.config - } - - /// Get the EID and configuration from the tagged configuration - public fun get_config(c: EidTagged): Config { - let EidTagged { eid: _, config } = c; - config - } - - public fun get_eid_and_config(c: EidTagged): (u32, Config) { - let EidTagged { eid, config } = c; - (eid, config) - } -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/endpoint_v2_common/contract_identity.move b/examples/oft-movement/build/oft/sources/dependencies/endpoint_v2_common/contract_identity.move deleted file mode 100644 index dbb0cdb92..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/endpoint_v2_common/contract_identity.move +++ /dev/null @@ -1,100 +0,0 @@ -/// This module defines structs for contracts to authenticate themselves and prove authorization for specific actions -/// -/// The *ContractSigner* is stored by the contract after producing it in init_module(). It can only be generated one -/// time per address to defend against impersonation attacks. It is copiable however, so that it can be explicitly -/// shared if required. -/// -/// This can be used to generate a *CallRef* which is passed to the callee. There is a generic CallRef struct, -/// in which the `Target` should be substituted with a struct defined in the callee module that represents the -/// authorization type granted by the caller. -/// -/// The *DynamicCallRef* is used to pass the target contract address and an authorization byte-vector to the callee. -/// This is useful when the target contract address is not known at compile time. Upon receiving a DynamicCallRef, -/// the callee should use the `get_dynamic_call_ref_caller` function to identify the caller and verify the authorization -/// matches the expected authorization for the call. -/// -/// The Target and the (address, authorization) pair are useful to mitigate the risk of a call ref being used to perform -/// an action that was not intended by the caller. -module endpoint_v2_common::contract_identity { - use std::signer::address_of; - - struct SignerCreated has key {} - - /// Struct to persist the contract identity - /// Access to the contract signer provides universal access to the contract's authority and should be protected - struct ContractSigner has store, copy { contract_address: address } - - /// A Static call reference that can be used to identify the caller and statically validate the authorization - struct CallRef has drop { contract_address: address } - - /// A Dynamic call reference that can be used to identify the caller and validate the intended target contract - /// and authorization - struct DynamicCallRef has drop { contract_address: address, target_contract: address, authorization: vector } - - /// Creates a ContractSigner for the contract to store and use for generating ContractCallRefs - /// Make a record of the creation to prevent future contract signer creation - public fun create_contract_signer(account: &signer): ContractSigner { - assert!(!exists(address_of(account)), ECONTRACT_SIGNER_ALREADY_EXISTS); - move_to(account, SignerCreated {}); - ContractSigner { contract_address: address_of(account) } - } - - /// Destroys the contract signer - once destroyed the contract signer cannot be recreated using - /// `create_contract_signer`; however, any copies of the contract signer will continue to exist - public fun irrecoverably_destroy_contract_signer(contract_signer: ContractSigner) { - let ContractSigner { contract_address: _ } = contract_signer; - } - - /// Make a static call ref from a ContractSigner - /// Generally the target does not have to be specified as it can be inferred from the function signature it is - /// used with - public fun make_call_ref(contract: &ContractSigner): CallRef { - CallRef { contract_address: contract.contract_address } - } - - /// Get the calling contract address from a static CallRef - public fun get_call_ref_caller(call_ref: &CallRef): address { - call_ref.contract_address - } - - /// This function is used to create a ContractCallRef from a ContractSigner - public fun make_dynamic_call_ref( - contract: &ContractSigner, - target_contract: address, - authorization: vector, - ): DynamicCallRef { - DynamicCallRef { contract_address: contract.contract_address, target_contract, authorization } - } - - /// This function is used to get the calling contract address, while asserting that the recipient is the correct - /// receiver contract - public fun get_dynamic_call_ref_caller( - call_ref: &DynamicCallRef, - receiver_to_assert: address, - authorization_to_assert: vector, - ): address { - assert!(call_ref.target_contract == receiver_to_assert, ETARGET_CONTRACT_MISMATCH); - assert!(call_ref.authorization == authorization_to_assert, EAUTHORIZATION_MISMATCH); - call_ref.contract_address - } - - #[test_only] - public fun make_call_ref_for_test(contract_address: address): CallRef { - CallRef { contract_address } - } - - #[test_only] - public fun make_dynamic_call_ref_for_test( - contract_address: address, - target_contract: address, - authorization: vector, - ): DynamicCallRef { - DynamicCallRef { contract_address, target_contract, authorization } - } - - // ================================================== Error Codes ================================================= - - const EAUTHORIZATION_MISMATCH: u64 = 1; - const ECONTRACT_SIGNER_ALREADY_EXISTS: u64 = 2; - const ETARGET_CONTRACT_MISMATCH: u64 = 2; -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/endpoint_v2_common/guid.move b/examples/oft-movement/build/oft/sources/dependencies/endpoint_v2_common/guid.move deleted file mode 100644 index bffca9a33..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/endpoint_v2_common/guid.move +++ /dev/null @@ -1,15 +0,0 @@ -/// This module provides the function to compute the GUID for a message -module endpoint_v2_common::guid { - use endpoint_v2_common::bytes32::{Self, Bytes32}; - use endpoint_v2_common::serde; - - public fun compute_guid(nonce: u64, src_eid: u32, sender: Bytes32, dst_eid: u32, receiver: Bytes32): Bytes32 { - let guid_bytes = vector[]; - serde::append_u64(&mut guid_bytes, nonce); - serde::append_u32(&mut guid_bytes, src_eid); - serde::append_bytes32(&mut guid_bytes, sender); - serde::append_u32(&mut guid_bytes, dst_eid); - serde::append_bytes32(&mut guid_bytes, receiver); - bytes32::keccak256(guid_bytes) - } -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/endpoint_v2_common/native_token.move b/examples/oft-movement/build/oft/sources/dependencies/endpoint_v2_common/native_token.move deleted file mode 100644 index ef81d8348..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/endpoint_v2_common/native_token.move +++ /dev/null @@ -1,17 +0,0 @@ -/// This module provides a function to withdraw gas token using Coin methods. -/// -/// This is necessary for chains that have a Coin representation of the gas token. The coin::withdraw function is aware -/// of both Coin and FungibleAsset(@0xa) balances unlike the fungible_asset::withdraw function which is only -/// aware of FungibleAsset(@0xa) balances. -/// -/// This module should be swapped with native_token_fa.move for chains that have a fully FungibleAsset-based gas token. -module endpoint_v2_common::native_token { - use std::aptos_coin::AptosCoin; - use std::coin; - use std::fungible_asset::FungibleAsset; - - public fun withdraw(account: &signer, amount: u64): FungibleAsset { - let coin = coin::withdraw(move account, amount); - coin::coin_to_fungible_asset(coin) - } -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/endpoint_v2_common/native_token_fa.move b/examples/oft-movement/build/oft/sources/dependencies/endpoint_v2_common/native_token_fa.move deleted file mode 100644 index c3625acf9..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/endpoint_v2_common/native_token_fa.move +++ /dev/null @@ -1,17 +0,0 @@ -/// This module provides a function to withdraw the gas token from an account's balance using FungibleAsset methods. -/// -/// On some chains, it is necessary to withdraw the gas token using coin-based functions and have the balance converted -/// to FungibleAsset. For those chains, this module should be used. -/// -/// For chains that have a fully FungibleAsset-based, this conversion is not necessary. In these cases, this module can -/// be used in place of the native_token.move module. -module endpoint_v2_common::native_token_fa { - use std::fungible_asset::{FungibleAsset, Metadata}; - use std::object; - use std::primary_fungible_store; - - public fun withdraw(account: &signer, amount: u64): FungibleAsset { - let metadata = object::address_to_object(@native_token_metadata_address); - primary_fungible_store::withdraw(move account, metadata, amount) - } -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/endpoint_v2_common/packet_raw.move b/examples/oft-movement/build/oft/sources/dependencies/endpoint_v2_common/packet_raw.move deleted file mode 100644 index 4f5c00bef..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/endpoint_v2_common/packet_raw.move +++ /dev/null @@ -1,36 +0,0 @@ -/// This module defines a semantic wrapper for raw packet (and packet header) bytes -/// This format is agnostic to the codec used in the Message Library, but it is valuable to provide clarity and type -/// safety for Packets and headers in the codebase -module endpoint_v2_common::packet_raw { - use std::vector; - - struct RawPacket has drop, copy, store { - packet: vector, - } - - /// Create a vector from a RawPacket - public fun bytes_to_raw_packet(packet_bytes: vector): RawPacket { - RawPacket { packet: packet_bytes } - } - - /// Borrow the packet bytes from a RawPacket - public fun borrow_packet_bytes(raw_packet: &RawPacket): &vector { - &raw_packet.packet - } - - /// Borrow the packet bytes mutably from a RawPacket - public fun borrow_packet_bytes_mut(raw_packet: &mut RawPacket): &mut vector { - &mut raw_packet.packet - } - - /// Move the packet bytes from a RawPacket - public fun get_packet_bytes(raw_packet: RawPacket): vector { - let RawPacket { packet } = raw_packet; - packet - } - - /// Get the packet length of a RawPacket - public fun length(raw_packet: &RawPacket): u64 { - vector::length(&raw_packet.packet) - } -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/endpoint_v2_common/packet_v1_codec.move b/examples/oft-movement/build/oft/sources/dependencies/endpoint_v2_common/packet_v1_codec.move deleted file mode 100644 index 24770adaa..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/endpoint_v2_common/packet_v1_codec.move +++ /dev/null @@ -1,179 +0,0 @@ -module endpoint_v2_common::packet_v1_codec { - use std::vector; - - use endpoint_v2_common::bytes32::{Self, Bytes32}; - use endpoint_v2_common::packet_raw::{Self, borrow_packet_bytes, bytes_to_raw_packet, RawPacket}; - use endpoint_v2_common::serde; - - const PACKET_VERSION: u8 = 1; - - // Header Offsets - const VERSION_OFFSET: u64 = 0; - const NONCE_OFFSET: u64 = 1; - const SRC_EID_OFFSET: u64 = 9; - const SENDER_OFFSET: u64 = 13; - const DST_EID_OFFSET: u64 = 45; - const RECEIVER_OFFSET: u64 = 49; - const HEADER_LENGTH: u64 = 81; - - // Message Offsets - const GUID_OFFSET: u64 = 81; - const MESSAGE_OFFSET: u64 = 113; - - /// Build a new packet with the given parameters - public fun new_packet_v1( - src_eid: u32, - sender: Bytes32, - dst_eid: u32, - receiver: Bytes32, - nonce: u64, - guid: Bytes32, - message: vector, - ): RawPacket { - let bytes = new_packet_v1_header_only_bytes(src_eid, sender, dst_eid, receiver, nonce); - serde::append_bytes32(&mut bytes, guid); - vector::append(&mut bytes, message); - bytes_to_raw_packet(bytes) - } - - /// Build a new packet (header only) with the given parameters - public fun new_packet_v1_header_only( - src_eid: u32, - sender: Bytes32, - dst_eid: u32, - receiver: Bytes32, - nonce: u64, - ): RawPacket { - bytes_to_raw_packet( - new_packet_v1_header_only_bytes(src_eid, sender, dst_eid, receiver, nonce) - ) - } - - /// Build a new packet (header only) with the given parameters and output byte form - public fun new_packet_v1_header_only_bytes( - src_eid: u32, - sender: Bytes32, - dst_eid: u32, - receiver: Bytes32, - nonce: u64, - ): vector { - let bytes = vector[]; - serde::append_u8(&mut bytes, PACKET_VERSION); - serde::append_u64(&mut bytes, nonce); - serde::append_u32(&mut bytes, src_eid); - serde::append_bytes32(&mut bytes, sender); - serde::append_u32(&mut bytes, dst_eid); - serde::append_bytes32(&mut bytes, receiver); - bytes - } - - /// Extract only the Packet header part from a RawPacket - public fun extract_header(raw_packet: &RawPacket): RawPacket { - if (packet_raw::length(raw_packet) > GUID_OFFSET) { - let packet_header_bytes = vector::slice(borrow_packet_bytes(raw_packet), 0, GUID_OFFSET); - bytes_to_raw_packet(packet_header_bytes) - } else { - *raw_packet - } - } - - /// Check that the packet is the expected version for this codec (version 1) - public fun is_valid_version(raw_packet: &RawPacket): bool { - get_version(raw_packet) == PACKET_VERSION - } - - /// Get the version of the packet - public fun get_version(raw_packet: &RawPacket): u8 { - let packet_bytes = packet_raw::borrow_packet_bytes(raw_packet); - serde::extract_u8(packet_bytes, &mut VERSION_OFFSET) - } - - /// Get the nonce of the packet - public fun get_nonce(raw_packet: &RawPacket): u64 { - let packet_bytes = packet_raw::borrow_packet_bytes(raw_packet); - serde::extract_u64(packet_bytes, &mut NONCE_OFFSET) - } - - /// Get the source EID of the packet - public fun get_src_eid(raw_packet: &RawPacket): u32 { - let packet_bytes = packet_raw::borrow_packet_bytes(raw_packet); - serde::extract_u32(packet_bytes, &mut SRC_EID_OFFSET) - } - - /// Get the sender of the packet - public fun get_sender(raw_packet: &RawPacket): Bytes32 { - let packet_bytes = packet_raw::borrow_packet_bytes(raw_packet); - serde::extract_bytes32(packet_bytes, &mut SENDER_OFFSET) - } - - /// Get the destination EID of the packet - public fun get_dst_eid(raw_packet: &RawPacket): u32 { - let packet_bytes = packet_raw::borrow_packet_bytes(raw_packet); - serde::extract_u32(packet_bytes, &mut DST_EID_OFFSET) - } - - /// Get the receiver of the packet - public fun get_receiver(raw_packet: &RawPacket): Bytes32 { - let packet_bytes = packet_raw::borrow_packet_bytes(raw_packet); - serde::extract_bytes32(packet_bytes, &mut RECEIVER_OFFSET) - } - - /// Get the GUID of the packet - public fun get_guid(raw_packet: &RawPacket): Bytes32 { - let packet_bytes = packet_raw::borrow_packet_bytes(raw_packet); - serde::extract_bytes32(packet_bytes, &mut GUID_OFFSET) - } - - /// Get the length of the message in the packet - public fun get_message_length(raw_packet: &RawPacket): u64 { - let packet_length = packet_raw::length(raw_packet); - packet_length - MESSAGE_OFFSET - } - - /// Get the message of the packet - public fun get_message(raw_packet: &RawPacket): vector { - let packet_bytes = packet_raw::borrow_packet_bytes(raw_packet); - serde::extract_bytes_until_end(packet_bytes, &mut MESSAGE_OFFSET) - } - - /// Get the payload of the packet - public fun get_payload_hash(packet: &RawPacket): Bytes32 { - let guid = get_guid(packet); - let message = get_message(packet); - compute_payload_hash(guid, message) - } - - /// Compute the payload of the packet - public fun compute_payload(guid: Bytes32, message: vector): vector { - let payload = vector[]; - vector::append(&mut payload, bytes32::from_bytes32(guid)); - vector::append(&mut payload, message); - payload - } - - /// Compute the payload hash of the packet - public fun compute_payload_hash(guid: Bytes32, message: vector): Bytes32 { - bytes32::keccak256(compute_payload(guid, message)) - } - - /// Assert that the packet is a valid packet for the local EID - public fun assert_receive_header(packet_header: &RawPacket, local_eid: u32) { - let packet_bytes = packet_raw::borrow_packet_bytes(packet_header); - assert!(vector::length(packet_bytes) == HEADER_LENGTH, EINVALID_PACKET_HEADER); - assert!(is_valid_version(packet_header), EINVALID_PACKET_VERSION); - assert!(get_dst_eid(packet_header) == local_eid, EINVALID_EID) - } - - public fun is_receive_header_valid(packet_header: &RawPacket, local_eid: u32): bool { - let packet_bytes = packet_raw::borrow_packet_bytes(packet_header); - vector::length(packet_bytes) == HEADER_LENGTH - && is_valid_version(packet_header) - && get_dst_eid(packet_header) == local_eid - } - - // ================================================== Error Codes ================================================= - - const EINVALID_EID: u64 = 1; - const EINVALID_PACKET_HEADER: u64 = 2; - const EINVALID_PACKET_VERSION: u64 = 3; -} \ No newline at end of file diff --git a/examples/oft-movement/build/oft/sources/dependencies/endpoint_v2_common/send_packet.move b/examples/oft-movement/build/oft/sources/dependencies/endpoint_v2_common/send_packet.move deleted file mode 100644 index 5756bc448..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/endpoint_v2_common/send_packet.move +++ /dev/null @@ -1,89 +0,0 @@ -/// This module defines the internal send packet structure. This is the packet structure that is used internally by the -/// endpoint_v2 to communicate with the message libraries. Unlike the packet_v1_codec, which is may be upgraded for -/// use with a future message library, the internal packet is a fixed structure and is unchangable even with future -/// message libraries -module endpoint_v2_common::send_packet { - use std::vector; - - use endpoint_v2_common::bytes32::Bytes32; - use endpoint_v2_common::guid; - - struct SendPacket has copy, drop, store { - nonce: u64, - src_eid: u32, - sender: Bytes32, - dst_eid: u32, - receiver: Bytes32, - guid: Bytes32, - message: vector, - } - - /// Create a new send packet - public fun new_send_packet( - nonce: u64, - src_eid: u32, - sender: Bytes32, - dst_eid: u32, - receiver: Bytes32, - message: vector, - ): SendPacket { - let guid = guid::compute_guid(nonce, src_eid, sender, dst_eid, receiver); - SendPacket { - nonce, - src_eid, - sender, - dst_eid, - receiver, - guid, - message, - } - } - - /// Unpack the send packet into its components - public fun unpack_send_packet( - packet: SendPacket, - ): (u64, u32, Bytes32, u32, Bytes32, Bytes32, vector) { - let SendPacket { - nonce, - src_eid, - sender, - dst_eid, - receiver, - guid, - message, - } = packet; - (nonce, src_eid, sender, dst_eid, receiver, guid, message) - } - - public fun get_nonce(packet: &SendPacket): u64 { - packet.nonce - } - - public fun get_src_eid(packet: &SendPacket): u32 { - packet.src_eid - } - - public fun get_sender(packet: &SendPacket): Bytes32 { - packet.sender - } - - public fun get_dst_eid(packet: &SendPacket): u32 { - packet.dst_eid - } - - public fun get_receiver(packet: &SendPacket): Bytes32 { - packet.receiver - } - - public fun get_guid(packet: &SendPacket): Bytes32 { - packet.guid - } - - public fun borrow_message(packet: &SendPacket): &vector { - &packet.message - } - - public fun get_message_length(packet: &SendPacket): u64 { - vector::length(&packet.message) - } -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/endpoint_v2_common/serde.move b/examples/oft-movement/build/oft/sources/dependencies/endpoint_v2_common/serde.move deleted file mode 100644 index 9aa73c4aa..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/endpoint_v2_common/serde.move +++ /dev/null @@ -1,200 +0,0 @@ -/// Serialization and deserialization utilities -module endpoint_v2_common::serde { - use std::bcs::to_bytes; - use std::from_bcs::to_address; - use std::vector; - - use endpoint_v2_common::bytes32::{Self, Bytes32}; - - /// Extract a uint from a vector of bytes starting at `position`, up to 8 bytes (u64). - /// Position will be incremented to the position after the end of the read - /// This decodes in big-endian format, with the most significant byte first - public fun extract_uint(input: &vector, position: &mut u64, bytes: u8): u64 { - let result: u64 = 0; - for (i in 0..bytes) { - let byte: u8 = *vector::borrow(input, *position); - result = result + ((byte as u64) << ((bytes - i - 1) * 8)); - *position = *position + 1; - }; - result - } - - /// Extract a u8 from a vector of bytes starting at `position` (position will be updated to the end of read) - public inline fun extract_u8(input: &vector, position: &mut u64): u8 { - (extract_uint(input, position, 1) as u8) - } - - /// Extract a u16 from a vector of bytes starting at `position` (position will be updated to the end of read) - public inline fun extract_u16(input: &vector, position: &mut u64): u16 { - (extract_uint(input, position, 2) as u16) - } - - /// Extract a u32 from a vector of bytes starting at `position` (position will be updated to the end of read) - public inline fun extract_u32(input: &vector, position: &mut u64): u32 { - (extract_uint(input, position, 4) as u32) - } - - /// Extract a u64 from a vector of bytes starting at `position` (position will be updated to the end of read) - public inline fun extract_u64(input: &vector, position: &mut u64): u64 { - extract_uint(input, position, 8) - } - - /// Extract a u128 from a vector of bytes starting at `position` (position will be updated to the end of read) - /// This function does not use extract_uint because it is more efficient to handle u128 as a special case - public fun extract_u128(input: &vector, position: &mut u64): u128 { - let result: u128 = 0; - for (i in 0..16) { - let byte: u8 = *vector::borrow(input, *position); - result = result + ((byte as u128) << ((16 - i - 1) * 8)); - *position = *position + 1; - }; - result - } - - /// Extract a u256 from a vector of bytes starting at `position` (position will be updated to the end of read) - /// This function does not use extract_uint because it is more efficient to handle u256 as a special case - public fun extract_u256(input: &vector, position: &mut u64): u256 { - let result: u256 = 0; - for (i in 0..32) { - let byte: u8 = *vector::borrow(input, *position); - result = result + ((byte as u256) << ((32 - i - 1) * 8)); - *position = *position + 1; - }; - result - } - - /// Extract a vector of bytes from a vector starting at `position` and ending at `position + len` - /// This will update the position to `position + len` - public fun extract_fixed_len_bytes(input: &vector, position: &mut u64, len: u64): vector { - let result = vector::slice(input, *position, *position + len); - *position = *position + len; - result - } - - /// Extract a vector of bytes from a vector starting at `position` and ending at the end of the vector - public fun extract_bytes_until_end(input: &vector, position: &mut u64): vector { - let len = vector::length(input); - let result = vector::slice(input, *position, len); - *position = len; - result - } - - /// Extract an address from a vector of bytes - public fun extract_address(input: &vector, position: &mut u64): address { - let bytes = vector::slice(input, *position, *position + 32); - *position = *position + 32; - to_address(bytes) - } - - /// Append a uint to a vector of bytes, up to 8 bytes (u64) - public fun append_uint(target: &mut vector, value: u64, bytes: u8) { - for (i in 0..bytes) { - let byte: u8 = (((value >> (8 * (bytes - i - 1))) & 0xFF) as u8); - vector::push_back(target, byte); - }; - } - - /// Append a u8 to a vector of bytes - public inline fun append_u8(target: &mut vector, value: u8) { append_uint(target, (value as u64), 1); } - - /// Append a u16 to a vector of bytes - public inline fun append_u16(target: &mut vector, value: u16) { append_uint(target, (value as u64), 2); } - - /// Append a u32 to a vector of bytes - public inline fun append_u32(target: &mut vector, value: u32) { append_uint(target, (value as u64), 4); } - - /// Append a u64 to a vector of bytes - public inline fun append_u64(target: &mut vector, value: u64) { append_uint(target, value, 8); } - - - /// Append a u128 to a vector of bytes - /// This function does not use append_uint because it is more efficient to handle u128 as a special case - public fun append_u128(target: &mut vector, value: u128) { - for (i in 0..16) { - let byte: u8 = (((value >> (8 * (16 - i - 1))) & 0xFF) as u8); - vector::push_back(target, byte); - } - } - - /// Append a u256 to a vector of bytes - /// This function does not use append_uint because it is more efficient to handle u256 as a special case - public fun append_u256(target: &mut vector, value: u256) { - for (i in 0..32) { - let byte: u8 = (((value >> (8 * (32 - i - 1))) & 0xFF) as u8); - vector::push_back(target, byte); - } - } - - /// Get the remaining length of the byte-vector starting at `position` - public fun get_remaining_length(input: &vector, position: u64): u64 { - vector::length(input) - position - } - - /// Pad the bytes provided with zeros to the left make it the target size - /// This will throw if the length of the provided vector surpasses the target size - public fun pad_zero_left(bytes: vector, target_size: u64): vector { - let bytes_size = vector::length(&bytes); - assert!(target_size >= bytes_size, EINVALID_LENGTH); - let output = vector[]; - let padding_needed = target_size - bytes_size; - for (i in 0..padding_needed) { - vector::push_back(&mut output, 0); - }; - vector::append(&mut output, bytes); - output - } - - /// Append a byte vector to the of a buffer - public inline fun append_bytes(buf: &mut vector, bytes: vector) { - vector::append(buf, bytes); - } - - /// Append an address to a vector of bytes - public fun append_address(buf: &mut vector, addr: address) { - let bytes = to_bytes(&addr); - vector::append(buf, bytes); - } - - /// Append a bytes32 to a vector of bytes - public fun append_bytes32(buf: &mut vector, bytes32: Bytes32) { - vector::append(buf, bytes32::from_bytes32(bytes32)); - } - - /// Extract a bytes32 from a vector of bytes - public fun extract_bytes32(input: &vector, position: &mut u64): Bytes32 { - let bytes = vector::slice(input, *position, *position + 32); - *position = *position + 32; - bytes32::to_bytes32(bytes) - } - - /// This function flattens a vector of byte-vectors into a single byte-vector - public inline fun flatten(input: vector>): vector { - let result = vector[]; - vector::for_each(input, |element| { - vector::append(&mut result, element); - }); - result - } - - /// This function creates a vector of `Element` by applying the function `f` to each element in the range [0, count) - public inline fun map_count(count: u64, f: |u64|Element): vector { - let vec = vector[]; - for (i in 0..count) { - vector::push_back(&mut vec, f(i)); - }; - vec - } - - /// This function create a bytes vector by applying the function `f` to a &mut buffer empty vector - /// this is useful for directly creating a bytes vector from an append_*() function in a single line - /// for example: let eighteen = bytes_of(|buf| append_u8(buf, 0x12)) - public inline fun bytes_of(f: |&mut vector|()): vector { - let buf = vector[]; - f(&mut buf); - buf - } - - // ================================================== Error Codes ================================================= - - const EINVALID_LENGTH: u64 = 1; -} \ No newline at end of file diff --git a/examples/oft-movement/build/oft/sources/dependencies/endpoint_v2_common/universal_config.move b/examples/oft-movement/build/oft/sources/dependencies/endpoint_v2_common/universal_config.move deleted file mode 100644 index 72039c7ce..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/endpoint_v2_common/universal_config.move +++ /dev/null @@ -1,166 +0,0 @@ -/// This module provides a groud truth for EID and ZRO Metadata address -module endpoint_v2_common::universal_config { - use std::event::emit; - use std::fungible_asset::{Self, FungibleAsset, Metadata}; - use std::object::{Self, Object}; - use std::option::{Self, Option}; - use std::signer::address_of; - - #[test_only] - use std::account::create_signer_for_test; - - #[test_only] - friend endpoint_v2_common::universal_config_tests; - - struct UniversalStore has key { - // The EID for this endpoint - eid: u32, - // The ZRO metadata if it has been set - zro_data: Option>, - // Whether the ZRO address is locked. Once locked the zro metadata cannot be changed - zro_locked: bool, - } - - /// Initialize the UniversalStore must be called by endpoint_v2_common - public entry fun initialize(admin: &signer, eid: u32) acquires UniversalStore { - assert_admin(address_of(move admin)); - assert!(universal_store().eid == 0, EALREADY_INITIALIZED); - universal_store_mut().eid = eid; - } - - fun init_module(account: &signer) { - move_to(account, UniversalStore { - eid: 0, - zro_data: option::none(), - zro_locked: false, - }); - } - - #[test_only] - public fun init_module_for_test(eid: u32) acquires UniversalStore { - init_module(&create_signer_for_test(@endpoint_v2_common)); - initialize(&create_signer_for_test(@layerzero_admin), eid); - } - - #[view] - /// Get the EID for the V2 Endpoint - public fun eid(): u32 acquires UniversalStore { - universal_store().eid - } - - /// Set the ZRO address - /// @param account: The layerzero admin account signer - /// @param zro_address: The address of the ZRO metadata (@0x0 to unset) - public entry fun set_zro_address(account: &signer, zro_address: address) acquires UniversalStore { - assert_admin(address_of(move account)); - assert!(!universal_store().zro_locked, EZRO_ADDRESS_LOCKED); - - if (zro_address == @0x0) { - // Unset the ZRO address - assert!(option::is_some(&universal_store().zro_data), ENO_CHANGE); - let zro_data_store = &mut universal_store_mut().zro_data; - *zro_data_store = option::none(); - } else { - // Set the ZRO address - assert!(object::object_exists(zro_address), EINVALID_ZRO_ADDRESS); - if (has_zro_metadata()) { - assert!(get_zro_address() != zro_address, ENO_CHANGE); - }; - let zro_metadata = object::address_to_object(zro_address); - let zro_data_store = &mut universal_store_mut().zro_data; - *zro_data_store = option::some(zro_metadata); - }; - - emit(ZroMetadataSet { zro_address }); - } - - /// Lock the ZRO address so it can no longer be set or unset - public entry fun lock_zro_address(account: &signer) acquires UniversalStore { - assert_admin(address_of(move account)); - - assert!(option::is_some(&universal_store().zro_data), EZRO_ADDRESS_NOT_SET); - let locked_store = &mut universal_store_mut().zro_locked; - *locked_store = true; - - emit(ZroMetadataLocked {}); - } - - #[view] - /// Check if ZRO address is set - public fun has_zro_metadata(): bool acquires UniversalStore { - option::is_some(&universal_store().zro_data) - } - - #[view] - /// Get the ZRO address - public fun get_zro_address(): address acquires UniversalStore { - object::object_address(&get_zro_metadata()) - } - - #[view] - /// Get the ZRO metadata - public fun get_zro_metadata(): Object acquires UniversalStore { - assert_zro_metadata_set(); - *option::borrow(&universal_store().zro_data) - } - - /// Assert that the ZRO metadata is set - public fun assert_zro_metadata_set() acquires UniversalStore { - assert!(has_zro_metadata(), EINVALID_ZRO_ADDRESS); - } - - /// Check if the given FungibleAsset is the ZRO asset - public fun is_zro(fa: &FungibleAsset): bool acquires UniversalStore { - if (!has_zro_metadata()) { return false }; - let metadata = fungible_asset::asset_metadata(fa); - metadata == get_zro_metadata() - } - - /// Check if the given Metadata is the ZRO metadata - public fun is_zro_metadata(metadata: Object): bool acquires UniversalStore { - if (!has_zro_metadata()) { return false }; - metadata == get_zro_metadata() - } - - // ==================================================== Helpers =================================================== - - inline fun assert_admin(admin: address) { - assert!(admin == @layerzero_admin, EUNAUTHORIZED); - } - - inline fun universal_store(): &UniversalStore { borrow_global(@endpoint_v2_common) } - - inline fun universal_store_mut(): &mut UniversalStore { borrow_global_mut(@endpoint_v2_common) } - - #[test_only] - public fun change_eid_for_test(eid: u32) acquires UniversalStore { universal_store_mut().eid = eid; } - - // ==================================================== Events ==================================================== - - #[event] - struct ZroMetadataSet has drop, store { - zro_address: address, - } - - #[event] - struct ZroMetadataLocked has drop, store {} - - #[test_only] - public fun zro_metadata_set(zro_address: address): ZroMetadataSet { - ZroMetadataSet { zro_address } - } - - #[test_only] - public fun zro_metadata_locked(): ZroMetadataLocked { - ZroMetadataLocked {} - } - - // ================================================== Error Codes ================================================= - - const EALREADY_INITIALIZED: u64 = 1; - const EUNAUTHORIZED: u64 = 2; - const EINVALID_ZRO_ADDRESS: u64 = 3; - const ENO_CHANGE: u64 = 4; - const EZRO_ADDRESS_NOT_SET: u64 = 5; - const EZRO_ADDRESS_LOCKED: u64 = 6; -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/executor_fee_lib_0/executor_fee_lib.move b/examples/oft-movement/build/oft/sources/dependencies/executor_fee_lib_0/executor_fee_lib.move deleted file mode 100644 index d5d985ee8..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/executor_fee_lib_0/executor_fee_lib.move +++ /dev/null @@ -1,199 +0,0 @@ -module executor_fee_lib_0::executor_fee_lib { - use std::vector; - - use executor_fee_lib_0::executor_option::{Self, ExecutorOptions}; - use msglib_types::worker_options::EXECUTOR_WORKER_ID; - use price_feed_router_0::router as price_feed_router; - use worker_common::worker_config; - - #[test_only] - friend executor_fee_lib_0::executor_fee_lib_tests; - - #[view] - /// Get the total executor fee, including premiums for an Executor worker to send a message - /// This checks that the Message Library is supported by the worker, the sender is allowed, the worker is - /// unpaused, and that the worker is an executor - public fun get_executor_fee( - msglib: address, - worker: address, - dst_eid: u32, - sender: address, - message_size: u64, - options: vector, - ): (u64, address) { - worker_config::assert_fee_lib_supports_transaction(worker, EXECUTOR_WORKER_ID(), sender, msglib); - - let executor_options = executor_option::extract_executor_options(&options, &mut 0); - let fee = get_executor_fee_internal( - worker, - dst_eid, - executor_options, - // Price Feed Estimate Fee on Send - partially applying parameters available in scope - |price_feed, feed_address, total_gas| price_feed_router::estimate_fee_on_send( - price_feed, - feed_address, - dst_eid, - message_size, - total_gas, - ) - ); - let deposit_address = worker_config::get_deposit_address(worker); - (fee, deposit_address) - } - - /// Get the total executor fee, using a provided price feed fee estimation function - /// - /// @param worker: The worker address - /// @param dst_eid: The destination EID - /// @param options: The executor options - /// @param estimate_fee_on_send: fee estimator - /// |price_feed, feed_address, total_remote_gas| -> (local_chain_fee, price_ratio, denominator, native_price_usd) - /// @return The total fee - public(friend) inline fun get_executor_fee_internal( - worker: address, - dst_eid: u32, - options: ExecutorOptions, - estimate_fee_on_send: |address, address, u128| (u128, u128, u128, u128) - ): u64 { - let ( - lz_receive_base_gas, multiplier_bps, floor_margin_usd, native_cap, lz_compose_base_gas, - ) = worker_config::get_executor_dst_config_values(worker, dst_eid); - assert!(lz_receive_base_gas != 0, err_EEXECUTOR_EID_NOT_SUPPORTED()); - - let (total_dst_amount, total_gas) = calculate_executor_dst_amount_and_total_gas( - is_v1_eid(dst_eid), - lz_receive_base_gas, - lz_compose_base_gas, - native_cap, - options, - ); - let (price_feed, feed_address) = worker_config::get_effective_price_feed(worker); - let (chain_fee, price_ratio, denominator, native_price_usd) = estimate_fee_on_send( - price_feed, feed_address, total_gas, - ); - - let default_multiplier_bps = worker_config::get_default_multiplier_bps(worker); - let multiplier_bps = if (multiplier_bps == 0) default_multiplier_bps else multiplier_bps; - let native_decimals_rate = worker_common::worker_config::get_native_decimals_rate(); - let fee = apply_premium_to_gas( - chain_fee, - multiplier_bps, - floor_margin_usd, - native_price_usd, - native_decimals_rate, - ); - fee = fee + convert_and_apply_premium_to_value( - total_dst_amount, - price_ratio, - denominator, - multiplier_bps, - ); - (fee as u64) - } - - // ================================================ Internal Functions ================================================ - - /// Apply the premium to the fee, this will take the higher of the multiplier applied to the fee or the floor margin - /// added to the fee - public(friend) fun apply_premium_to_gas( - fee: u128, - multiplier_bps: u16, - margin_usd: u128, - native_price_usd: u128, - native_decimals_rate: u128, - ): u128 { - let fee_with_multiplier = (fee * (multiplier_bps as u128)) / 10000; - if (native_price_usd == 0 || margin_usd == 0) { - return fee_with_multiplier - }; - let fee_with_margin = (margin_usd * native_decimals_rate) / native_price_usd + fee; - if (fee_with_margin > fee_with_multiplier) { fee_with_margin } else { fee_with_multiplier } - } - - /// Convert the destination value to the local chain native token and apply a multiplier to the value - public(friend) fun convert_and_apply_premium_to_value( - value: u128, - ratio: u128, - denominator: u128, - multiplier_bps: u16, - ): u128 { - if (value > 0) { (((value * ratio) / denominator) * (multiplier_bps as u128)) / 10000 } else 0 - } - - /// Check whether the EID is a V1 EID - public(friend) fun is_v1_eid(eid: u32): bool { eid < 30000 } - - /// Calculate the Destination Amount and Total Gas for the Executor - /// @return (destination amount, total gas) - public(friend) fun calculate_executor_dst_amount_and_total_gas( - is_v1_eid: bool, - lz_receive_base_gas: u64, - lz_compose_base_gas: u64, - native_cap: u128, - options: ExecutorOptions, - ): (u128, u128) { - let ( - lz_receive_options, - native_drop_options, - lz_compose_options, - ordered_execution_option, - ) = executor_option::unpack_options(options); - - // The total value to to be sent to the destination - let dst_amount: u128 = 0; - // The total gas to be used for the transaction - let lz_receive_gas: u128 = 0; - - // Loop through LZ Receive options - for (i in 0..vector::length(&lz_receive_options)) { - let option = *vector::borrow(&lz_receive_options, i); - let (gas, value) = executor_option::unpack_lz_receive_option(option); - - assert!(!is_v1_eid || value == 0, EEV1_DOES_NOT_SUPPORT_LZ_RECEIVE_WITH_VALUE); - dst_amount = dst_amount + value; - lz_receive_gas = lz_receive_gas + gas; - }; - assert!(lz_receive_gas > 0, EEXECUTOR_ZERO_LZRECEIVE_GAS_PROVIDED); - let total_gas = (lz_receive_base_gas as u128) + lz_receive_gas; - - // Loop through LZ Compose options - for (i in 0..vector::length(&lz_compose_options)) { - let option = *vector::borrow(&lz_compose_options, i); - let (_index, gas, value) = executor_option::unpack_lz_compose_option(option); - // Endpoint V1 doesnot support LZ Compose - assert!(!is_v1_eid, EEV1_DOES_NOT_SUPPORT_LZ_COMPOSE_WITH_VALUE); - assert!(gas > 0, EEXECUTOR_ZERO_LZCOMPOSE_GAS_PROVIDED); - dst_amount = dst_amount + value; - // The LZ Compose base gas is required for each LZ Compose, which is represented by the count of indexes. - // However, this calculation is simplified to match the EVM calculation, which does not deduplicate based on - // the Lz Compose index. Therefore, if there are multiple LZ Compose Options for a specific index, the - // Lz Compose base gas will also be duplicated by the number of options on that index - total_gas = total_gas + gas + (lz_compose_base_gas as u128); - }; - - // Loop through Native Drop options - for (i in 0..vector::length(&native_drop_options)) { - let option = *vector::borrow(&native_drop_options, i); - let (amount, _receiver) = executor_option::unpack_native_drop_option(option); - dst_amount = dst_amount + amount; - }; - assert!(dst_amount <= native_cap, EEXECUTOR_NATIVE_AMOUNT_EXCEEDS_CAP); - - // If ordered execution is enabled, increase the gas by 2% - if (ordered_execution_option) { - total_gas = (total_gas * 102) / 100; - }; - (dst_amount, total_gas) - } - - // ================================================== Error Codes ================================================= - - const EEV1_DOES_NOT_SUPPORT_LZ_COMPOSE_WITH_VALUE: u64 = 1; - const EEV1_DOES_NOT_SUPPORT_LZ_RECEIVE_WITH_VALUE: u64 = 2; - const EEXECUTOR_EID_NOT_SUPPORTED: u64 = 3; - const EEXECUTOR_NATIVE_AMOUNT_EXCEEDS_CAP: u64 = 4; - const EEXECUTOR_ZERO_LZCOMPOSE_GAS_PROVIDED: u64 = 5; - const EEXECUTOR_ZERO_LZRECEIVE_GAS_PROVIDED: u64 = 6; - - public(friend) fun err_EEXECUTOR_EID_NOT_SUPPORTED(): u64 { EEXECUTOR_EID_NOT_SUPPORTED } -} \ No newline at end of file diff --git a/examples/oft-movement/build/oft/sources/dependencies/executor_fee_lib_0/executor_option.move b/examples/oft-movement/build/oft/sources/dependencies/executor_fee_lib_0/executor_option.move deleted file mode 100644 index 60b34a519..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/executor_fee_lib_0/executor_option.move +++ /dev/null @@ -1,243 +0,0 @@ -module executor_fee_lib_0::executor_option { - use std::vector; - - use endpoint_v2_common::bytes32::Bytes32; - use endpoint_v2_common::serde; - use msglib_types::worker_options::EXECUTOR_WORKER_ID; - - const OPTION_TYPE_LZ_RECEIVE: u8 = 1; - const OPTION_TYPE_NATIVE_DROP: u8 = 2; - const OPTION_TYPE_LZ_COMPOSE: u8 = 3; - const OPTION_TYPE_ORDERED_EXECUTION: u8 = 4; - - - /// ExecutorOptions is used to specify the options for an executor - struct ExecutorOptions has drop, copy, store { - // The gas and value delivered via the LZ Receive operation - lz_receive_options: vector, - // The amount and receiver for the Native Drop operation - native_drop_options: vector, - // The gas and value for each LZ Compose operation - lz_compose_options: vector, - // Whether or not the execution will require ordered execution - ordered_execution_option: bool, - } - - /// The gas and value for the LZ Receive operation - struct LzReceiveOption has drop, copy, store { - gas: u128, - value: u128, - } - - /// The amount and receiver for the Native Drop operation - struct NativeDropOption has drop, copy, store { - amount: u128, - receiver: Bytes32, - } - - /// The gas, value, and index of a specific LZ Compose operation - struct LzComposeOption has drop, copy, store { - index: u16, - gas: u128, - value: u128, - } - - /// Unpacks ExecutorOptions into its components - public fun unpack_options( - options: ExecutorOptions, - ): (vector, vector, vector, bool) { - let ExecutorOptions { - lz_receive_options, - native_drop_options, - lz_compose_options, - ordered_execution_option, - } = options; - (lz_receive_options, native_drop_options, lz_compose_options, ordered_execution_option) - } - - /// Unpacks LzReceiveOption into its components - /// @return (gas, value) - public fun unpack_lz_receive_option(option: LzReceiveOption): (u128, u128) { - let LzReceiveOption { gas, value } = option; - (gas, value) - } - - /// Unpacks NativeDropOption into its components - /// @return (amount, receiver) - public fun unpack_native_drop_option(option: NativeDropOption): (u128, Bytes32) { - let NativeDropOption { amount, receiver } = option; - (amount, receiver) - } - - /// Unpacks LzComposeOption into its components - /// @return (compose index, gas, value) - public fun unpack_lz_compose_option(option: LzComposeOption): (u16, u128, u128) { - let LzComposeOption { index, gas, value } = option; - (index, gas, value) - } - - /// Creates a new ExecutorOptions from its components - public fun new_executor_options( - lz_receive_options: vector, - native_drop_options: vector, - lz_compose_options: vector, - ordered_execution_option: bool, - ): ExecutorOptions { - ExecutorOptions { lz_receive_options, native_drop_options, lz_compose_options, ordered_execution_option } - } - - /// Creates a new LzReceiveOption from its components - public fun new_lz_receive_option(gas: u128, value: u128): LzReceiveOption { - LzReceiveOption { gas, value } - } - - /// Creates a new NativeDropOption from its components - public fun new_native_drop_option(amount: u128, receiver: Bytes32): NativeDropOption { - NativeDropOption { amount, receiver } - } - - /// Creates a new LzComposeOption from its components - public fun new_lz_compose_option(index: u16, gas: u128, value: u128): LzComposeOption { - LzComposeOption { index, gas, value } - } - - /// Extracts an ExecutorOptions from a byte buffer - public fun extract_executor_options(buf: &vector, pos: &mut u64): ExecutorOptions { - let options = ExecutorOptions { - lz_receive_options: vector[], - native_drop_options: vector[], - lz_compose_options: vector[], - ordered_execution_option: false, - }; - let len = vector::length(buf); - while (*pos < len) { - let _worker_id = serde::extract_u8(buf, pos); - // The serialized option_size includes 1 byte for the option_type. Subtracting 1 byte is the number of bytes - // that should be read after reading the option type - let option_size = serde::extract_u16(buf, pos) - 1; - let option_type = serde::extract_u8(buf, pos); - - if (option_type == OPTION_TYPE_LZ_RECEIVE) { - // LZ Receive - let option = extract_lz_receive_option(buf, option_size, pos); - vector::push_back(&mut options.lz_receive_options, option) - } else if (option_type == OPTION_TYPE_NATIVE_DROP) { - // Native Drop - let option = extract_native_drop_option(buf, option_size, pos); - vector::push_back(&mut options.native_drop_options, option) - } else if (option_type == OPTION_TYPE_LZ_COMPOSE) { - // LZ Compose - let option = extract_lz_compose_option(buf, option_size, pos); - vector::push_back(&mut options.lz_compose_options, option) - } else if (option_type == OPTION_TYPE_ORDERED_EXECUTION) { - // Ordered Execution - assert!(option_size == 0, EINVALID_ORDERED_EXECUTION_OPTION_LENGTH); - options.ordered_execution_option = true; - // Nothing else to read - continue to next - } else { - abort EUNSUPPORTED_OPTION - } - }; - options - } - - /// Appends an ExecutorOptions to a byte buffer - public fun append_executor_options(buf: &mut vector, options: &ExecutorOptions) { - vector::for_each_ref(&options.lz_receive_options, |option| { - serde::append_u8(buf, EXECUTOR_WORKER_ID()); - append_lz_receive_option(buf, option) - }); - vector::for_each_ref(&options.native_drop_options, |option| { - serde::append_u8(buf, EXECUTOR_WORKER_ID()); - append_native_drop_option(buf, option) - }); - vector::for_each_ref(&options.lz_compose_options, |option| { - serde::append_u8(buf, EXECUTOR_WORKER_ID()); - append_lz_compose_option(buf, option) - }); - if (options.ordered_execution_option) { - serde::append_u8(buf, EXECUTOR_WORKER_ID()); - append_ordered_execution_option(buf); - } - } - - /// Extracts a LzReceiveOption from a buffer and updates position to the end of the read - fun extract_lz_receive_option(option: &vector, size: u16, pos: &mut u64): LzReceiveOption { - let gas = serde::extract_u128(option, pos); - let value = if (size == 32) { - serde::extract_u128(option, pos) - } else if (size == 16) { - 0 - } else { - abort EINVALID_LZ_RECEIVE_OPTION_LENGTH - }; - LzReceiveOption { gas, value } - } - - /// Serializes a LzReceiveOption to the end of a buffer - fun append_lz_receive_option(output: &mut vector, lz_receive_option: &LzReceiveOption) { - let size = if (lz_receive_option.value == 0) { 17 } else { 33 }; - serde::append_u16(output, size); - serde::append_u8(output, OPTION_TYPE_LZ_RECEIVE); - serde::append_u128(output, lz_receive_option.gas); - if (lz_receive_option.value != 0) { - serde::append_u128(output, lz_receive_option.value); - } - } - - /// Extracts a NativeDropOption from a buffer and updates position to the end of the read - fun extract_native_drop_option(option: &vector, size: u16, pos: &mut u64): NativeDropOption { - assert!(size == 48, EINVALID_NATIVE_DROP_OPTION_LENGTH); - let amount = serde::extract_u128(option, pos); - let receiver = serde::extract_bytes32(option, pos); - NativeDropOption { amount, receiver } - } - - /// Serializes a NativeDropOption to the end of a buffer - fun append_native_drop_option(output: &mut vector, native_drop_option: &NativeDropOption) { - serde::append_u16(output, 49); - serde::append_u8(output, OPTION_TYPE_NATIVE_DROP); - serde::append_u128(output, native_drop_option.amount); - serde::append_bytes32(output, native_drop_option.receiver); - } - - /// Extracts a LzComposeOption from a buffer - fun extract_lz_compose_option(option: &vector, size: u16, pos: &mut u64): LzComposeOption { - let index = serde::extract_u16(option, pos); - let gas = serde::extract_u128(option, pos); - let value = if (size == 34) { - serde::extract_u128(option, pos) - } else if (size == 18) { - 0 - } else { - abort EINVALID_LZ_COMPOSE_OPTION_LENGTH - }; - LzComposeOption { index, gas, value } - } - - /// Serializes a LzComposeOption to the end of a buffer - fun append_lz_compose_option(output: &mut vector, lz_compose_option: &LzComposeOption) { - let size = if (lz_compose_option.value == 0) { 19 } else { 35 }; - serde::append_u16(output, size); - serde::append_u8(output, OPTION_TYPE_LZ_COMPOSE); - serde::append_u16(output, lz_compose_option.index); - serde::append_u128(output, lz_compose_option.gas); - if (lz_compose_option.value != 0) { - serde::append_u128(output, lz_compose_option.value); - } - } - - /// Serializes an ordered execution option into a buffer - fun append_ordered_execution_option(output: &mut vector) { - serde::append_u16(output, 1); // size = 1 - serde::append_u8(output, OPTION_TYPE_ORDERED_EXECUTION); - } - - // ================================================== Error Codes ================================================= - - const EINVALID_LZ_COMPOSE_OPTION_LENGTH: u64 = 1; - const EINVALID_LZ_RECEIVE_OPTION_LENGTH: u64 = 2; - const EINVALID_NATIVE_DROP_OPTION_LENGTH: u64 = 3; - const EINVALID_ORDERED_EXECUTION_OPTION_LENGTH: u64 = 4; - const EUNSUPPORTED_OPTION: u64 = 5; -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/executor_fee_lib_router_0/executor_fee_lib_router.move b/examples/oft-movement/build/oft/sources/dependencies/executor_fee_lib_router_0/executor_fee_lib_router.move deleted file mode 100644 index d65d6d28f..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/executor_fee_lib_router_0/executor_fee_lib_router.move +++ /dev/null @@ -1,34 +0,0 @@ -module executor_fee_lib_router_0::executor_fee_lib_router { - use executor_fee_lib_router_1::executor_fee_lib_router as executor_fee_lib_router_next; - - public fun get_executor_fee( - msglib: address, - executor_fee_lib: address, - worker: address, - dst_eid: u32, - sender: address, - message_size: u64, - options: vector, - ): (u64, address) { - if (executor_fee_lib == @executor_fee_lib_0) { - executor_fee_lib_0::executor_fee_lib::get_executor_fee( - msglib, - worker, - dst_eid, - sender, - message_size, - options, - ) - } else { - executor_fee_lib_router_next::get_executor_fee( - msglib, - executor_fee_lib, - worker, - dst_eid, - sender, - message_size, - options, - ) - } - } -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/executor_fee_lib_router_1/executor_fee_lib_router.move b/examples/oft-movement/build/oft/sources/dependencies/executor_fee_lib_router_1/executor_fee_lib_router.move deleted file mode 100644 index f072dc4ff..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/executor_fee_lib_router_1/executor_fee_lib_router.move +++ /dev/null @@ -1,15 +0,0 @@ -module executor_fee_lib_router_1::executor_fee_lib_router { - const ENOT_IMPLEMENTED: u64 = 1; - - public fun get_executor_fee( - _msglib: address, - _fee_lib: address, - _worker: address, - _dst_eid: u32, - _sender: address, - _message_size: u64, - _options: vector, - ): (u64, address) { - abort ENOT_IMPLEMENTED - } -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/msglib_types/configs_executor.move b/examples/oft-movement/build/oft/sources/dependencies/msglib_types/configs_executor.move deleted file mode 100644 index 45e634425..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/msglib_types/configs_executor.move +++ /dev/null @@ -1,49 +0,0 @@ -/// This module contains the serialization and deserialization logic for handling Executor configurations -/// -/// The serialized format is as follows: -/// [max_message_size: u32] -/// [executor_address: bytes32] -module msglib_types::configs_executor { - use endpoint_v2_common::config_eid_tagged::{EidTagged, get_eid_and_config, tag_with_eid}; - use endpoint_v2_common::serde::{append_address, append_u32, extract_address, extract_u32}; - - struct ExecutorConfig has drop, copy, store { - max_message_size: u32, - executor_address: address, - } - - public fun new_executor_config(max_message_size: u32, executor_address: address): ExecutorConfig { - ExecutorConfig { max_message_size, executor_address } - } - - // =================================================== Accessors ================================================== - - public fun get_max_message_size(self: &ExecutorConfig): u32 { self.max_message_size } - - public fun get_executor_address(self: &ExecutorConfig): address { self.executor_address } - - // ======================================== Serialization / Deserialization ======================================= - - public fun append_executor_config_with_eid(bytes: &mut vector, tagged_config: EidTagged) { - let (eid, config) = get_eid_and_config(tagged_config); - append_u32(bytes, eid); - append_executor_config(bytes, config); - } - - public fun append_executor_config(bytes: &mut vector, config: ExecutorConfig) { - append_u32(bytes, config.max_message_size); - append_address(bytes, config.executor_address); - } - - public fun extract_executor_config_with_eid(bytes: &vector, position: &mut u64): EidTagged { - let eid = extract_u32(bytes, position); - let config = extract_executor_config(bytes, position); - tag_with_eid(eid, config) - } - - public fun extract_executor_config(bytes: &vector, position: &mut u64): ExecutorConfig { - let max_message_size = extract_u32(bytes, position); - let executor_address = extract_address(bytes, position); - ExecutorConfig { max_message_size, executor_address } - } -} \ No newline at end of file diff --git a/examples/oft-movement/build/oft/sources/dependencies/msglib_types/configs_uln.move b/examples/oft-movement/build/oft/sources/dependencies/msglib_types/configs_uln.move deleted file mode 100644 index 9cfd0b1ef..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/msglib_types/configs_uln.move +++ /dev/null @@ -1,140 +0,0 @@ -/// This module contains the serialization and deserialization logic for handling Send and Receive ULN configurations -module msglib_types::configs_uln { - use std::vector; - - use endpoint_v2_common::config_eid_tagged::{EidTagged, get_eid_and_config, tag_with_eid}; - use endpoint_v2_common::serde::{append_address, append_u32, append_u64, append_u8, extract_address, extract_u32, - extract_u64, extract_u8, map_count, - }; - - struct UlnConfig has drop, copy, store { - confirmations: u64, - optional_dvn_threshold: u8, - required_dvns: vector
, - optional_dvns: vector
, - use_default_for_confirmations: bool, - use_default_for_required_dvns: bool, - use_default_for_optional_dvns: bool, - } - - public fun new_uln_config( - confirmations: u64, - optional_dvn_threshold: u8, - required_dvns: vector
, - optional_dvns: vector
, - use_default_for_confirmations: bool, - use_default_for_required_dvns: bool, - use_default_for_optional_dvns: bool, - ): UlnConfig { - UlnConfig { - confirmations, - optional_dvn_threshold, - required_dvns, - optional_dvns, - use_default_for_confirmations, - use_default_for_required_dvns, - use_default_for_optional_dvns, - } - } - - // ================================================ Field Accessors =============================================== - - public fun unpack_uln_config(config: UlnConfig): (u64, u8, vector
, vector
, bool, bool, bool) { - let UlnConfig { - confirmations, - optional_dvn_threshold, - required_dvns, - optional_dvns, - use_default_for_confirmations, - use_default_for_required_dvns, - use_default_for_optional_dvns, - } = config; - ( - confirmations, optional_dvn_threshold, required_dvns, optional_dvns, use_default_for_confirmations, - use_default_for_required_dvns, use_default_for_optional_dvns, - ) - } - - public fun get_confirmations(self: &UlnConfig): u64 { self.confirmations } - - public fun get_required_dvn_count(self: &UlnConfig): u64 { vector::length(&self.required_dvns) } - - public fun get_optional_dvn_count(self: &UlnConfig): u64 { vector::length(&self.optional_dvns) } - - public fun get_optional_dvn_threshold(self: &UlnConfig): u8 { self.optional_dvn_threshold } - - public fun get_required_dvns(self: &UlnConfig): vector
{ self.required_dvns } - - public fun borrow_required_dvns(self: &UlnConfig): &vector
{ &self.required_dvns } - - public fun get_optional_dvns(self: &UlnConfig): vector
{ self.optional_dvns } - - public fun borrow_optional_dvns(self: &UlnConfig): &vector
{ &self.optional_dvns } - - public fun get_use_default_for_confirmations(self: &UlnConfig): bool { self.use_default_for_confirmations } - - public fun get_use_default_for_required_dvns(self: &UlnConfig): bool { self.use_default_for_required_dvns } - - public fun get_use_default_for_optional_dvns(self: &UlnConfig): bool { self.use_default_for_optional_dvns } - - - // ======================================== Serialization / Deserialization ======================================= - - public fun append_uln_config_with_eid(target: &mut vector, tagged_config: EidTagged) { - let (eid, config) = get_eid_and_config(tagged_config); - append_u32(target, eid); - append_uln_config(target, config); - } - - public fun append_uln_config(target: &mut vector, config: UlnConfig) { - append_u64(target, config.confirmations); - append_u8(target, config.optional_dvn_threshold); - append_u8(target, (vector::length(&config.required_dvns) as u8)); - vector::for_each(config.required_dvns, |address| append_address(target, address)); - append_u8(target, (vector::length(&config.optional_dvns) as u8)); - vector::for_each(config.optional_dvns, |address| append_address(target, address)); - append_u8(target, from_bool(config.use_default_for_confirmations)); - append_u8(target, from_bool(config.use_default_for_required_dvns)); - append_u8(target, from_bool(config.use_default_for_optional_dvns)); - } - - public fun extract_uln_config_with_eid(input: &vector, position: &mut u64): EidTagged { - let eid = extract_u32(input, position); - let config = extract_uln_config(input, position); - tag_with_eid(eid, config) - } - - public fun extract_uln_config(input: &vector, position: &mut u64): UlnConfig { - let confirmations = extract_u64(input, position); - let optional_dvn_threshold = extract_u8(input, position); - let required_dvns_count = extract_u8(input, position); - let required_dvns = map_count((required_dvns_count as u64), |_i| extract_address(input, position)); - let optional_dvns_count = extract_u8(input, position); - let optional_dvns = map_count((optional_dvns_count as u64), |_i| extract_address(input, position)); - let use_default_for_confirmations = to_bool(extract_u8(input, position)); - let use_default_for_required_dvns = to_bool(extract_u8(input, position)); - let use_default_for_optional_dvns = to_bool(extract_u8(input, position)); - - UlnConfig { - confirmations, - optional_dvn_threshold, - required_dvns, - optional_dvns, - use_default_for_confirmations, - use_default_for_required_dvns, - use_default_for_optional_dvns, - } - } - - fun to_bool(uint: u8): bool { - if (uint == 1) { true } else if (uint == 0) { false } else { abort EINVALID_BOOLEAN } - } - - fun from_bool(bool: bool): u8 { - if (bool) { 1 } else { 0 } - } - - // ================================================== Error Codes ================================================= - - const EINVALID_BOOLEAN: u64 = 1; -} \ No newline at end of file diff --git a/examples/oft-movement/build/oft/sources/dependencies/msglib_types/dvn_verify_params.move b/examples/oft-movement/build/oft/sources/dependencies/msglib_types/dvn_verify_params.move deleted file mode 100644 index 37e907c4e..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/msglib_types/dvn_verify_params.move +++ /dev/null @@ -1,29 +0,0 @@ -/// These DVN Verify Params are used to verify the DVN packet for ULN302. -/// The format of this may change in future Message Libraries, so is sent through the Message Library router as an -/// `Any` type to ensure the format can be upgraded for future Message Libraries. -module msglib_types::dvn_verify_params { - use std::any::{Self, Any}; - - use endpoint_v2_common::bytes32::Bytes32; - use endpoint_v2_common::packet_raw::RawPacket; - - struct DvnVerifyParams has drop, store { - packet_header: RawPacket, - payload_hash: Bytes32, - confirmations: u64, - } - - public fun pack_dvn_verify_params( - packet_header: RawPacket, - payload_hash: Bytes32, - confirmations: u64, - ): Any { - any::pack(DvnVerifyParams { packet_header, payload_hash, confirmations }) - } - - public fun unpack_dvn_verify_params(params: Any): (RawPacket, Bytes32, u64) { - let params = any::unpack(params); - let DvnVerifyParams { packet_header, payload_hash, confirmations } = params; - (packet_header, payload_hash, confirmations) - } -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/msglib_types/worker_options.move b/examples/oft-movement/build/oft/sources/dependencies/msglib_types/worker_options.move deleted file mode 100644 index 4dfebb5b5..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/msglib_types/worker_options.move +++ /dev/null @@ -1,226 +0,0 @@ -module msglib_types::worker_options { - use std::vector; - - use endpoint_v2_common::serde; - - public inline fun EXECUTOR_WORKER_ID(): u8 { 1 } - - public inline fun DVN_WORKER_ID(): u8 { 2 } - - const EXECUTOR_OPTION_TYPE_LZ_RECEIVE: u8 = 1; - const EXECUTOR_OPTION_TYPE_NATIVE_DROP: u8 = 2; - - /// Convenience structure to bind the DVN index and the serialized (concatted) options for that DVN index - struct IndexOptionsPair has copy, drop, store { - options: vector, - dvn_idx: u8, - } - - /// Unpacks the DVN index and the serialized (concatted) options for that DVN index - public fun unpack_index_option_pair(pair: IndexOptionsPair): (u8, vector) { - let IndexOptionsPair { options, dvn_idx } = pair; - (dvn_idx, options) - } - - /// Searches a vector of IndexOptionsPair and returns the concatinated options that matches the given DVN index - /// This returns an empty vector if no match is found - public fun get_matching_options(index_option_pairs: &vector, dvn_index: u8): vector { - for (i in 0..vector::length(index_option_pairs)) { - let pair = vector::borrow(index_option_pairs, i); - if (pair.dvn_idx == dvn_index) { - return pair.options - } - }; - vector[] - } - - // ============================================== Process DNV Options ============================================= - - /// Split Options into Executor and DVN Options - /// @return (executor_options, dvn_options) - public fun extract_and_split_options( - options: &vector, - ): (vector, vector) { - // Options must contain at least 2 bytes (the u16 "option type") to be considered valid - assert!(vector::length(options) >= 2, EINVALID_OPTIONS); - - let uln_options_type = serde::extract_u16(options, &mut 0); - - if (uln_options_type == 3) { - extract_type_3_options(options) - } else { - extract_legacy_options(uln_options_type, options) - } - } - - /// Extracts the current type 3 option format - /// Format: [worker_option][worker_option][worker_option]... - /// Worker Option Format: [worker_id: u8][option_size: u16][option: bytes(option_size)] - /// @return (executor_options, dvn_options) - public fun extract_type_3_options( - options: &vector, - ): (vector, vector) { - // start after the u16 option type - let position: u64 = 2; - - let executor_options = vector[]; - let dvn_options = vector[]; - - // serde extract methods will move the position cursor according to the size of the extracted value - let len = vector::length(options); - while (position < len) { - let internal_cursor = position; - let worker_id = serde::extract_u8(options, &mut internal_cursor); - let option_size = serde::extract_u16(options, &mut internal_cursor); - let total_option_size = (option_size as u64) + 3; // 1 byte for worker_id, 2 bytes for option_size - let option_bytes = serde::extract_fixed_len_bytes(options, &mut position, total_option_size); - if (worker_id == EXECUTOR_WORKER_ID()) { - vector::append(&mut executor_options, option_bytes); - } else if (worker_id == DVN_WORKER_ID()) { - vector::append(&mut dvn_options, option_bytes); - } else { - abort EINVALID_WORKER_ID - }; - }; - - (executor_options, dvn_options) - } - - /// This creates a stem for type 3 options after which a series of executor and/or DVN options can be appended - public fun new_empty_type_3_options(): vector { - x"0003" // type 3 - } - - #[test_only] - /// Test only function to append an executor option to a buffer. This is only for testing the general behavior - /// when the options don't matter. Please use the method provided by the executor fee lib to append fee-lib-specific - /// executor options when not testing - public fun append_generic_type_3_executor_option( - buf: &mut vector, - option: vector, - ) { - serde::append_u8(buf, EXECUTOR_WORKER_ID()); - serde::append_u16(buf, (vector::length(&option) as u16)); - serde::append_bytes(buf, option); - } - - // ============================================ Process Legacy Options ============================================ - - /// Extracts options in legacy formats - /// @return (executor_options, dvn_options) - public fun extract_legacy_options(option_type: u16, options: &vector): (vector, vector) { - // start after the u16 option type - let position: u64 = 2; // skip the option type - let total_options_size = vector::length(options); - let executor_options = vector[]; - - // type 1 and 2 lzReceive options use u256 but type 3 uses u128 - // casting operation is safe: will abort if too large - if (option_type == 1) { - assert!(total_options_size == 34, EINVALID_LEGACY_OPTIONS_TYPE_1); - let execution_gas = (serde::extract_u256(options, &mut position) as u128); - append_legacy_option_lz_receive(&mut executor_options, execution_gas); - } else if (option_type == 2) { - assert!(total_options_size > 66 && total_options_size <= 98, EINVALID_LEGACY_OPTIONS_TYPE_2); - let execution_gas = (serde::extract_u256(options, &mut position) as u128); - - // native_drop (amount + receiver) - let amount = (serde::extract_u256(options, &mut position) as u128); - // receiver addresses are not necessarily bytes32 - let receiver = serde::extract_bytes_until_end(options, &mut position); - receiver = serde::pad_zero_left(receiver, 32); - - append_legacy_option_lz_receive(&mut executor_options, execution_gas); - append_legacy_option_native_drop(&mut executor_options, amount, receiver); - } else { - abort EINVALID_OPTION_TYPE - }; - (executor_options, vector[]) - } - - fun append_legacy_option_lz_receive(buf: &mut vector, execution_gas: u128) { - serde::append_u8(buf, EXECUTOR_WORKER_ID()); - serde::append_u16(buf, 17); // 16 + 1, 16 for option_length, + 1 for option_type - serde::append_u8(buf, EXECUTOR_OPTION_TYPE_LZ_RECEIVE); - serde::append_u128(buf, execution_gas); - } - - fun append_legacy_option_native_drop(buf: &mut vector, amount: u128, receiver: vector) { - serde::append_u8(buf, EXECUTOR_WORKER_ID()); - serde::append_u16(buf, 49); // 48 + 1, 32 + 16 for option_length, + 1 for option_type - serde::append_u8(buf, EXECUTOR_OPTION_TYPE_NATIVE_DROP); - serde::append_u128(buf, amount); - serde::append_bytes(buf, receiver); - } - - // ====================================== Prepare DVN Options for Fee Library ===================================== - - /// Group DVN Options into IndexOptionsPairs, such that each element has a DVN index and a concatted vector of - /// serialized options - /// serialized options - /// Format: { dvn_idx: u8, options: [dvn_option][dvn_option][dvn_option]... - /// DVN Option format: [worker_id][option_size][dvn_idx][option_type][option] - public fun group_dvn_options_by_index(dvn_options_bytes: &vector): vector { - let index_option_pairs = vector[]; - let position: u64 = 0; - let len = vector::length(dvn_options_bytes); - while (position < len) { - let internal_cursor = position; - internal_cursor = internal_cursor + 1; // skip worker_id - let option_size = serde::extract_u16(dvn_options_bytes, &mut internal_cursor); - let dvn_idx = serde::extract_u8(dvn_options_bytes, &mut internal_cursor); - let total_option_size = (option_size as u64) + 3; // 1 byte for worker_id, 2 bytes for option_size - - let option = serde::extract_fixed_len_bytes(dvn_options_bytes, &mut position, total_option_size); - - assert!(option_size >= 2, EINVALID_OPTION_LENGTH); - assert!(dvn_idx != 255, EINVALID_DVN_IDX); - insert_dvn_option(&mut index_option_pairs, dvn_idx, option); - }; - - index_option_pairs - } - - /// Inserts a new DVN option into the vector of IndexOptionsPair, appending to the existing options of the DVN index - /// or creating a new entry if the DVN index does not exist - fun insert_dvn_option( - index_option_pairs: &mut vector, - dvn_idx: u8, - new_options: vector, - ) { - // If the dvn_idx already exists, append the new options to the existing options - let count = vector::length(index_option_pairs); - for (ii in 0..count) { - // Reverse the scan, to save gas when options are appended in ordered groups - let i = count - ii - 1; - let pair = vector::borrow(index_option_pairs, i); - if (pair.dvn_idx == dvn_idx) { - let existing_option = vector::borrow_mut(index_option_pairs, i); - vector::append(&mut existing_option.options, new_options); - return - } - }; - // Otherwise, create a new entry - vector::push_back(index_option_pairs, IndexOptionsPair { options: new_options, dvn_idx }); - } - - // This appends a dvn_option to the buffer - public fun append_dvn_option(buf: &mut vector, dvn_idx: u8, option_type: u8, option: vector) { - serde::append_u8(buf, DVN_WORKER_ID()); - let length = vector::length(&option) + 2; // 2 for option_type and dvn_idx - serde::append_u16(buf, (length as u16)); - serde::append_u8(buf, dvn_idx); - serde::append_u8(buf, option_type); - serde::append_bytes(buf, option); - } - - // ================================================== Error Codes ================================================= - - const EINVALID_DVN_IDX: u64 = 1; - const EINVALID_LEGACY_OPTIONS_TYPE_1: u64 = 2; - const EINVALID_LEGACY_OPTIONS_TYPE_2: u64 = 3; - const EINVALID_OPTIONS: u64 = 4; - const EINVALID_OPTION_LENGTH: u64 = 5; - const EINVALID_OPTION_TYPE: u64 = 6; - const EINVALID_WORKER_ID: u64 = 7; -} \ No newline at end of file diff --git a/examples/oft-movement/build/oft/sources/dependencies/oft_common/oft_compose_msg_codec.move b/examples/oft-movement/build/oft/sources/dependencies/oft_common/oft_compose_msg_codec.move deleted file mode 100644 index ea4df4001..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/oft_common/oft_compose_msg_codec.move +++ /dev/null @@ -1,63 +0,0 @@ -/// This module provides functions to encode and decode OFT compose messages -module oft_common::oft_compose_msg_codec { - use std::vector; - - use endpoint_v2_common::bytes32::Bytes32; - use endpoint_v2_common::serde; - - const NONCE_OFFSET: u64 = 0; - const SRC_EID_OFFSET: u64 = 8; - const AMOUNT_LD_OFFSET: u64 = 12; - const COMPOSE_FROM_OFFSET: u64 = 44; - const COMPOSE_MSG_OFFSET: u64 = 76; - - /// Encode a compose message into a byte vector - /// @param nonce: The nonce of the LayerZero message that contains the compose message - /// @param src_eid: The source endpoint ID of the compose message - /// @param amount_ld: The amount in local decimals of the compose message - /// @param compose_payload: The compose message to encode [compose_payload_from][compose_payload_message] - public fun encode( - nonce: u64, - src_eid: u32, - amount_ld: u64, - compose_payload: vector, - ): vector { - let encoded = vector[]; - serde::append_u64(&mut encoded, nonce); - serde::append_u32(&mut encoded, src_eid); - serde::append_u256(&mut encoded, (amount_ld as u256)); - serde::append_bytes(&mut encoded, compose_payload); - encoded - } - - /// Get the nonce from an encoded compose message - public fun nonce(encoded: &vector): u64 { - serde::extract_u64(encoded, &mut NONCE_OFFSET) - } - - /// Get the source endpoint ID from an encoded compose message - public fun src_eid(encoded: &vector): u32 { - serde::extract_u32(encoded, &mut SRC_EID_OFFSET) - } - - /// Get the amount in local decimals from an encoded compose message - public fun amount_ld(encoded: &vector): u64 { - (serde::extract_u256(encoded, &mut AMOUNT_LD_OFFSET) as u64) - } - - /// Get the compose from address from an encoded compose message - public fun compose_payload_from(encoded: &vector): Bytes32 { - assert!(vector::length(encoded) >= COMPOSE_MSG_OFFSET, ENO_COMPOSE_MSG); - serde::extract_bytes32(encoded, &mut COMPOSE_FROM_OFFSET) - } - - /// Get the compose payload from an encoded compose message - public fun compose_payload_message(encoded: &vector): vector { - assert!(vector::length(encoded) >= COMPOSE_MSG_OFFSET, ENO_COMPOSE_MSG); - serde::extract_bytes_until_end(encoded, &mut COMPOSE_MSG_OFFSET) - } - - // ================================================== Error Codes ================================================= - - const ENO_COMPOSE_MSG: u64 = 1; -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/oft_common/oft_fee_detail.move b/examples/oft-movement/build/oft/sources/dependencies/oft_common/oft_fee_detail.move deleted file mode 100644 index 98cfddd88..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/oft_common/oft_fee_detail.move +++ /dev/null @@ -1,31 +0,0 @@ -// This module provides functions to encode and decode OFT fee detail struct -module oft_common::oft_fee_detail { - use std::string::String; - - struct OftFeeDetail has store, copy, drop { - // Amount of the fee in local decimals - fee_amount_ld: u64, - // If true, the fee is a reward; this means the fee should be taken as negative - is_reward: bool, - // Description of the fee - description: String, - } - - /// Create a new OftFeeDetail - public fun new_oft_fee_detail(fee_amount_ld: u64, is_reward: bool, description: String): OftFeeDetail { - OftFeeDetail { fee_amount_ld, is_reward, description } - } - - /// Get the amount of the fee in local decimals (if is_reward is true, the fee should be taken as negative) - public fun fee_amount_ld(fd: &OftFeeDetail): (u64, bool) { (fd.fee_amount_ld, fd.is_reward) } - - /// Get the description of the fee - public fun description(fd: &OftFeeDetail): String { fd.description } - - /// Get all the fields of the OftFeeDetail - /// @return (fee_amount_ld, is_reward, description) - public fun unpack_oft_fee_detail(fd: OftFeeDetail): (u64, bool, String) { - let OftFeeDetail { fee_amount_ld, is_reward, description } = fd; - (fee_amount_ld, is_reward, description) - } -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/oft_common/oft_limit.move b/examples/oft-movement/build/oft/sources/dependencies/oft_common/oft_limit.move deleted file mode 100644 index 5455d070b..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/oft_common/oft_limit.move +++ /dev/null @@ -1,33 +0,0 @@ -/// This provides a struct that represents an OFT limit (min and max amount transferrable in local decimals) -module oft_common::oft_limit { - - const MAX_U64: u64 = 0xffffffffffffffff; - - struct OftLimit has store, copy, drop { - min_amount_ld: u64, - max_amount_ld: u64, - } - - /// Create a new OftLimit - public fun new_oft_limit(min_amount_ld: u64, max_amount_ld: u64): OftLimit { - OftLimit { min_amount_ld, max_amount_ld } - } - - /// Create a new unbounded OFT Limit - public fun new_unbounded_oft_limit(): OftLimit { - OftLimit { min_amount_ld: 0, max_amount_ld: MAX_U64 } - } - - /// Get the minimum amount in local decimals - public fun min_amount_ld(oft_limit: &OftLimit): u64 { oft_limit.min_amount_ld } - - /// Get the maximum amount in local decimals - public fun max_amount_ld(oft_limit: &OftLimit): u64 { oft_limit.max_amount_ld } - - /// Get all the fields of the OftLimit - /// @return (min_amount_ld, max_amount_ld) - public fun unpack_oft_limit(oft_limit: OftLimit): (u64, u64) { - let OftLimit { min_amount_ld, max_amount_ld } = oft_limit; - (min_amount_ld, max_amount_ld) - } -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/oft_common/oft_msg_codec.move b/examples/oft-movement/build/oft/sources/dependencies/oft_common/oft_msg_codec.move deleted file mode 100644 index a8f390553..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/oft_common/oft_msg_codec.move +++ /dev/null @@ -1,55 +0,0 @@ -/// This module provides the encoding and decoding of OFT messages -module oft_common::oft_msg_codec { - use std::vector; - - use endpoint_v2_common::bytes32::Bytes32; - use endpoint_v2_common::serde; - - const SEND_TO_OFFSET: u64 = 0; - const SEND_AMOUNT_OFFSET: u64 = 32; - const COMPOSE_MESSAGE_OFFSET: u64 = 40; - - /// Create a new OFT Message with this codec - /// @param send_to: The address to send the message to - /// @param amount_shared: The amount in shared decimals to send - /// @param sender: The address of the sender (used as the compose_from in the compose message if present) - /// @param compose_msg: The compose message to send - /// @return The encoded OFT Message - public fun encode(send_to: Bytes32, amount_shared: u64, sender: Bytes32, compose_payload: vector): vector { - let encoded = vector[]; - serde::append_bytes32(&mut encoded, send_to); - serde::append_u64(&mut encoded, amount_shared); - if (!vector::is_empty(&compose_payload)) { - serde::append_bytes32(&mut encoded, sender); - vector::append(&mut encoded, compose_payload); - }; - encoded - } - - /// Check whether an encoded OFT Message includes a compose - public fun has_compose(message: &vector): bool { - vector::length(message) > COMPOSE_MESSAGE_OFFSET - } - - /// Check the send to address in an encoded OFT Message - public fun send_to(message: &vector): Bytes32 { - serde::extract_bytes32(message, &mut SEND_TO_OFFSET) - } - - /// Check the amount in shared decimals in an encoded OFT Message - public fun amount_sd(message: &vector): u64 { - serde::extract_u64(message, &mut SEND_AMOUNT_OFFSET) - } - - /// Check the sender in an encoded OFT Message - /// Make sure to check if the message `has_compose()` before calling this function, which will fail without a clear - /// error message if it is not present - public fun sender(message: &vector): Bytes32 { - serde::extract_bytes32(message, &mut COMPOSE_MESSAGE_OFFSET) - } - - /// Read the compose payload, including the sender, from an encoded OFT Message - public fun compose_payload(message: &vector): vector { - vector::slice(message, COMPOSE_MESSAGE_OFFSET, vector::length(message)) - } -} \ No newline at end of file diff --git a/examples/oft-movement/build/oft/sources/dependencies/oft_common/oft_v1_msg_codec.move b/examples/oft-movement/build/oft/sources/dependencies/oft_common/oft_v1_msg_codec.move deleted file mode 100644 index 080fed0b0..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/oft_common/oft_v1_msg_codec.move +++ /dev/null @@ -1,97 +0,0 @@ -/// This module provides the encoding and decoding of legacy OFT v1 (OFT on LayerZero V1 Endpoint) messages -module oft_common::oft_v1_msg_codec { - use std::vector; - - use endpoint_v2_common::bytes32::{Bytes32, from_bytes32}; - use endpoint_v2_common::serde; - use endpoint_v2_common::serde::flatten; - - const TYPE_OFFSET: u64 = 0; - const SEND_TO_OFFSET: u64 = 1; - const SEND_AMOUNT_OFFSET: u64 = 33; - const COMPOSE_MESSAGE_OFFSET_SENDER: u64 = 41; - const COMPOSE_MESSAGE_OFFSET_COMPOSE_GAS: u64 = 73; - const COMPOSE_MESSAGE_CONTENT_OFFSET: u64 = 81; - - public inline fun PT_SEND(): u8 { 0 } - - public inline fun PT_SEND_AND_CALL(): u8 { 1 } - - /// Create a new OFT (Endpoint V1) Message with this codec - /// @param message_type: The type of message to send (0 = PT_SEND, 1 = PT_SEND_AND_CALL). Please note that these - /// enums do not align with the SEND / SEND_AND_CALL consts used in the OFT - /// @param send_to: The address to send the message to - /// @param amount_shared: The amount in shared decimals to send - /// @param sender: The address of the sender (used as the compose_from in the compose message if present) - /// @param compose_msg: The compose message to send - /// @return The encoded OFT Message - public fun encode( - message_type: u8, - send_to: Bytes32, - amount_shared: u64, - sender: Bytes32, - compose_gas: u64, - compose_payload: vector, - ): vector { - assert!(message_type == PT_SEND() || message_type == PT_SEND_AND_CALL(), EUNKNOWN_MESSAGE_TYPE); - let encoded = vector[]; - serde::append_u8(&mut encoded, message_type); - serde::append_bytes32(&mut encoded, send_to); - serde::append_u64(&mut encoded, amount_shared); - if (message_type == PT_SEND_AND_CALL()) { - serde::append_bytes32(&mut encoded, sender); - serde::append_u64(&mut encoded, compose_gas); - vector::append(&mut encoded, compose_payload); - }; - encoded - } - - /// Check the message type in an encoded OFT Message - public fun message_type(message: &vector): u8 { - serde::extract_u8(message, &mut TYPE_OFFSET) - } - - /// Check whether an encoded OFT Message includes a compose - public fun has_compose(message: &vector): bool { - vector::length(message) > COMPOSE_MESSAGE_OFFSET_SENDER - } - - /// Check the send to address in an encoded OFT Message - public fun send_to(message: &vector): Bytes32 { - serde::extract_bytes32(message, &mut SEND_TO_OFFSET) - } - - /// Check the amount in shared decimals in an encoded OFT Message - public fun amount_sd(message: &vector): u64 { - serde::extract_u64(message, &mut SEND_AMOUNT_OFFSET) - } - - /// Check the sender in an encoded OFT Message - /// This function should only be called after verifying that the message has a compose message - public fun sender(message: &vector): Bytes32 { - serde::extract_bytes32(message, &mut COMPOSE_MESSAGE_OFFSET_SENDER) - } - - /// Check the compose gas in an encoded OFT Message - /// This function should only be called after verifying that the message has a compose message - public fun compose_gas(message: &vector): u64 { - serde::extract_u64(message, &mut COMPOSE_MESSAGE_OFFSET_COMPOSE_GAS) - } - - public fun compose_message_content(message: &vector): vector { - serde::extract_bytes_until_end(message, &mut COMPOSE_MESSAGE_CONTENT_OFFSET) - } - - /// Return the compose "payload", including the sender, from an encoded OFT Message - /// This will return an empty string if the message does not have a compose message - public fun v2_compatible_compose_payload(message: &vector): vector { - flatten(vector[ - from_bytes32(sender(message)), - compose_message_content(message), - ]) - } - - // ================================================== Error Codes ================================================= - - const EUNKNOWN_MESSAGE_TYPE: u64 = 1; -} \ No newline at end of file diff --git a/examples/oft-movement/build/oft/sources/dependencies/price_feed_module_0/eid_model_pair.move b/examples/oft-movement/build/oft/sources/dependencies/price_feed_module_0/eid_model_pair.move deleted file mode 100644 index 8da951fe7..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/price_feed_module_0/eid_model_pair.move +++ /dev/null @@ -1,77 +0,0 @@ -module price_feed_module_0::eid_model_pair { - use std::vector; - - use endpoint_v2_common::serde::{append_u16, append_u32, extract_u16, extract_u32}; - - public inline fun DEFAULT_MODEL_TYPE(): u16 { 0 } - - public inline fun ARBITRUM_MODEL_TYPE(): u16 { 1 } - - public inline fun OPTIMISM_MODEL_TYPE(): u16 { 2 } - - /// A pair containing the destination EID and pricing model type (default, arbitrum, or optimism) - struct EidModelPair has store, copy, drop { - dst_eid: u32, - model_type: u16, - } - - // Constructor for EidModelPair - public fun new_eid_model_pair(dst_eid: u32, model_type: u16): EidModelPair { - EidModelPair { - dst_eid, - model_type, - } - } - - /// Get the destination EID from the EidModelPair - public fun get_dst_eid(pair: &EidModelPair): u32 { pair.dst_eid } - - /// Get the model type from the EidModelPair - public fun get_model_type(pair: &EidModelPair): u16 { pair.model_type } - - /// Check if the model type is valid - /// @dev The model type must be one of the following: default 0, arbitrum 1, or optimism 2 - public fun is_valid_model_type(model_type: u16): bool { - model_type == DEFAULT_MODEL_TYPE() || - model_type == ARBITRUM_MODEL_TYPE() || - model_type == OPTIMISM_MODEL_TYPE() - } - - /// Serialize EidModelPair to the end of a byte buffer - public fun append_eid_model_pair(buf: &mut vector, obj: &EidModelPair) { - append_u32(buf, obj.dst_eid); - append_u16(buf, obj.model_type); - } - - /// Serialize a list of EidModelPair - /// This is a series of EidModelPairs serialized one after the other - public fun serialize_eid_model_pair_list(objs: &vector): vector { - let buf = vector[]; - for (i in 0..vector::length(objs)) { - append_eid_model_pair(&mut buf, vector::borrow(objs, i)); - }; - buf - } - - /// Deserialize EidModelPair from a byte buffer at a given position - /// The position to be updated to the next position after the deserialized EidModelPair - public fun extract_eid_model_pair(buf: &vector, position: &mut u64): EidModelPair { - let dst_eid = extract_u32(buf, position); - let model_type = extract_u16(buf, position); - EidModelPair { - dst_eid, - model_type, - } - } - - /// Deserialize a list of EidModelPair - /// This accepts a series of EidModelPairs serialized one after the other - public fun deserialize_eid_model_pair_list(buf: &vector): vector { - let result = vector[]; - let position = 0; - while (position < vector::length(buf)) { - vector::push_back(&mut result, extract_eid_model_pair(buf, &mut position)); - }; - result - } -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/price_feed_module_0/feeds.move b/examples/oft-movement/build/oft/sources/dependencies/price_feed_module_0/feeds.move deleted file mode 100644 index aa245d4f1..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/price_feed_module_0/feeds.move +++ /dev/null @@ -1,394 +0,0 @@ -module price_feed_module_0::feeds { - use std::event::emit; - use std::signer::address_of; - use std::table::{Self, Table}; - use std::vector; - - use endpoint_v2_common::config_eid_tagged::{borrow_config, get_eid}; - use price_feed_module_0::eid_model_pair::{Self, ARBITRUM_MODEL_TYPE, DEFAULT_MODEL_TYPE, OPTIMISM_MODEL_TYPE}; - use price_feed_module_0::price::{Self, Price}; - - #[test_only] - friend price_feed_module_0::feeds_tests; - - /// The data for a single price feed on this price feed module - struct Feed has key { - // The denominator for the price ratio remote price * price ratio / denominator = local price - denominator: u128, - // The compression percent for arbitrum (base 100) - arbitrum_compression_percent: u64, - // The model to use (which corresponds to chain type) for each destination EID - model_type: Table, - // The price ratio, gas price, and gas per byte for each destination EID - prices: Table, - // The base gas price for an Arbitrum L2 transaction - arbitrum_gas_per_l2_tx: u128, - // The gas price for an Arbitrum L1 calldata byte - arbitrum_gas_per_l1_calldata_byte: u128, - // The price, with `denominator` precision, of the native token in USD - native_token_price_usd: u128, - // The set of approved feed updaters (presence indicates approved, the value is always `true`) - updaters: Table, - } - - // =============================================== Only Feed Admins =============================================== - - /// Initializes a new feed under the signer's account address - public entry fun initialize(account: &signer) { - move_to(account, Feed { - denominator: 100_000_000_000_000_000_000, // 1e20 - arbitrum_compression_percent: 47, - model_type: table::new(), - prices: table::new(), - arbitrum_gas_per_l2_tx: 0, - arbitrum_gas_per_l1_calldata_byte: 0, - native_token_price_usd: 0, - updaters: table::new(), - }); - } - - /// Gives a feed updater permission to write to the signer's feed - public entry fun enable_feed_updater(account: &signer, updater: address) acquires Feed { - let feed_address = address_of(move account); - table::upsert(feed_updaters_mut(feed_address), updater, true); - emit(FeedUpdaterSet { feed_address, updater, enabled: true }); - } - - /// Revokes a feed updater's permission to write to the signer's feed - public entry fun disable_feed_updater(account: &signer, updater: address) acquires Feed { - let feed_address = address_of(move account); - table::remove(feed_updaters_mut(feed_address), updater); - emit(FeedUpdaterSet { feed_address, updater, enabled: false }); - } - - /// Sets the denominator for the feed - public entry fun set_denominator(account: &signer, denominator: u128) acquires Feed { - assert!(denominator > 0, EINVALID_DENOMNIATOR); - let feed_address = address_of(move account); - feed_data_mut(feed_address).denominator = denominator; - } - - /// Sets the arbitrum compression percent (base 100) for the feed - public entry fun set_arbitrum_compression_percent(account: &signer, percent: u64) acquires Feed { - let feed_address = address_of(move account); - feed_data_mut(feed_address).arbitrum_compression_percent = percent; - } - - /// Sets the model type for multiple given destination EIDs - /// The params are a serialized list of EidTagged - public entry fun set_eid_models(account: &signer, params: vector) acquires Feed { - let feed_address = address_of(move account); - - let eid_to_model_list = eid_model_pair::deserialize_eid_model_pair_list(¶ms); - let model_type_mut = &mut feed_data_mut(feed_address).model_type; - for (i in 0..vector::length(&eid_to_model_list)) { - let eid_model = vector::borrow(&eid_to_model_list, i); - let dst_eid = eid_model_pair::get_dst_eid(eid_model); - let model_type = eid_model_pair::get_model_type(eid_model); - assert!(eid_model_pair::is_valid_model_type(model_type), EINVALID_MODEL_TYPE); - table::upsert(model_type_mut, dst_eid, model_type); - } - } - - #[view] - /// Gets the model type for a given destination EID - /// @dev the model type can be default (0), arbitrum (1), or optimism (2) - public fun get_model_type(feed_address: address, dst_eid: u32): u16 acquires Feed { - let feed = feed_data(feed_address); - *table::borrow_with_default(&feed.model_type, dst_eid, &DEFAULT_MODEL_TYPE()) - } - - // ============================================== Only Feed Updaters ============================================== - - /// Asserts that a feed updater is approved to write to a specific feed - fun assert_valid_fee_updater(updater: address, feed: address) acquires Feed { - assert!(is_price_updater(updater, feed), EUNAUTHORIZED_UPDATER); - } - - /// Sets the price (serialized EidTagged) for a given destination EID - public entry fun set_price(updater: &signer, feed: address, prices: vector) acquires Feed { - let updater = address_of(move updater); - assert_valid_fee_updater(updater, feed); - - let price_list = price::deserialize_eid_tagged_price_list(&prices); - let prices_mut = &mut feed_data_mut(feed).prices; - for (i in 0..vector::length(&price_list)) { - let eid_tagged_price = vector::borrow(&price_list, i); - let eid = get_eid(eid_tagged_price); - let price = *borrow_config(eid_tagged_price); - table::upsert(prices_mut, eid, price); - } - } - - /// Sets the arbitrum traits for the feed - public entry fun set_arbitrum_traits( - updater: &signer, - feed_address: address, - gas_per_l2_tx: u128, - gas_per_l1_calldata_byte: u128, - ) acquires Feed { - let updater = address_of(move updater); - assert_valid_fee_updater(updater, feed_address); - - let feed_data_mut = feed_data_mut(feed_address); - feed_data_mut.arbitrum_gas_per_l2_tx = gas_per_l2_tx; - feed_data_mut.arbitrum_gas_per_l1_calldata_byte = gas_per_l1_calldata_byte; - } - - /// Sets the native token price in USD for the feed denominated in `denominator` precision - public entry fun set_native_token_price_usd( - updater: &signer, - feed_address: address, - native_token_price_usd: u128, - ) acquires Feed { - let updater = address_of(move updater); - assert_valid_fee_updater(updater, feed_address); - - feed_data_mut(feed_address).native_token_price_usd = native_token_price_usd; - } - - // ===================================================== View ===================================================== - - #[view] - /// Gets the denominator used for price ratios for the feed - public fun get_price_ratio_denominator(feed_address: address): u128 acquires Feed { - feed_data(feed_address).denominator - } - - #[view] - /// Checks if a feed updater has the permission to write to a feed - public fun is_price_updater(updater: address, feed: address): bool acquires Feed { - table::contains(feed_updaters(feed), updater) - } - - #[view] - /// Gets the native token price in USD for the feed (denominated in `denominator` precision) - public fun get_native_token_price_usd(feed_address: address): u128 acquires Feed { - feed_data(feed_address).native_token_price_usd - } - - #[view] - /// Gets the arbitrum compression percent (base 100) for the feed - public fun get_arbitrum_compression_percent(feed_address: address): u64 acquires Feed { - feed_data(feed_address).arbitrum_compression_percent - } - - #[view] - /// Gets the arbitrum traits for the feed - /// @return (gas per L2 transaction, gas per L1 calldata byte) - public fun get_arbitrum_price_traits(feed_address: address): (u128, u128) acquires Feed { - let feed = feed_data(feed_address); - (feed.arbitrum_gas_per_l2_tx, feed.arbitrum_gas_per_l1_calldata_byte) - } - - #[view] - /// Gets the price data for a given destination EID - /// @return (price ratio, gas price in unit, gas price per byte) - public fun get_price(feed_address: address, _dst_eid: u32): (u128, u64, u32) acquires Feed { - let prices = &feed_data(feed_address).prices; - - assert!(table::contains(prices, _dst_eid), EEID_DOES_NOT_EXIST); - let eid_price = table::borrow(prices, _dst_eid); - (price::get_price_ratio(eid_price), price::get_gas_price_in_unit(eid_price), price::get_gas_per_byte(eid_price)) - } - - // ================================================ Fee Estimation ================================================ - - #[view] - /// Estimates the fee for a send transaction, considering the eid, gas, and call data size - /// This selects the appropriate model and prices inputs based on the destination EID - /// @return (fee, price ratio, denominator, native token price in USD) - public fun estimate_fee_on_send( - feed_address: address, - dst_eid: u32, - call_data_size: u64, - gas: u128, - ): (u128, u128, u128, u128) acquires Feed { - // v2 EIDs are the v1 EIDs + 30,000 - // We anticipate that each subsequent eid will be 30,000 more than the prior (but on the same chain) - let dst_eid_mod = dst_eid % 30_000; - - let feed = feed_data(feed_address); - let denominator = feed.denominator; - let native_token_price_usd = feed.native_token_price_usd; - - let type = table::borrow_with_default(&feed.model_type, dst_eid_mod, &DEFAULT_MODEL_TYPE()); - assert!(table::contains(&feed.prices, dst_eid_mod), EPRICE_FEED_NOT_CONFIGURED_FOR_EID); - let dst_pricing = table::borrow(&feed.prices, dst_eid_mod); - - let fee = if (dst_eid_mod == 110 || dst_eid_mod == 10143 || dst_eid_mod == 20143 || type == &ARBITRUM_MODEL_TYPE( - )) { - // Arbitrum Type - estimate_fee_with_arbitrum_model( - call_data_size, - gas, - dst_pricing, - feed.denominator, - feed.arbitrum_compression_percent, - feed.arbitrum_gas_per_l1_calldata_byte, - feed.arbitrum_gas_per_l2_tx, - ) - } else if (dst_eid_mod == 111 || dst_eid_mod == 10132 || dst_eid_mod == 20132 || type == &OPTIMISM_MODEL_TYPE( - )) { - // Optimism Type - let ethereum_id = get_l1_lookup_id_for_optimism_model(dst_eid_mod); - assert!(table::contains(&feed.prices, ethereum_id), EPRICE_FEED_NOT_CONFIGURED_FOR_EID_ETH_L1); - let ethereum_pricing = table::borrow(&feed.prices, ethereum_id); - estimate_fee_with_optimism_model( - call_data_size, - gas, - ethereum_pricing, - dst_pricing, - feed.denominator, - ) - } else { - // Default - estimate_fee_with_default_model(call_data_size, gas, dst_pricing, feed.denominator) - }; - - let price_ratio = price::get_price_ratio(dst_pricing); - (fee, price_ratio, denominator, native_token_price_usd) - } - - /// Estimates the fee for a send transaction using the default model - public(friend) fun estimate_fee_with_default_model( - call_data_size: u64, - gas: u128, - dst_pricing: &Price, - denominator: u128, - ): u128 { - let gas_per_byte = price::get_gas_per_byte_u128(dst_pricing); - let gas_price_in_unit = price::get_gas_price_in_unit_u128(dst_pricing); - let gas_for_call_data = (call_data_size as u128) * gas_per_byte; - let remote_fee = (gas_for_call_data + gas) * gas_price_in_unit; - - let fee = (remote_fee * price::get_price_ratio(dst_pricing)) / denominator; - fee - } - - /// Estimates the fee for a send transaction using the arbitrum model - public(friend) fun estimate_fee_with_arbitrum_model( - call_data_size: u64, - gas: u128, - dst_pricing: &Price, - denominator: u128, - arbitrum_compression_percent: u64, - arbitrum_gas_per_l1_call_data_byte: u128, - arbitrum_gas_per_l2_tx: u128, - ): u128 { - let arbitrum_gas_per_byte = price::get_gas_per_byte_u128(dst_pricing); - let gas_price_in_unit = price::get_gas_price_in_unit_u128(dst_pricing); - let price_ratio = price::get_price_ratio(dst_pricing); - - let gas_for_l1_call_data = ((call_data_size as u128) * (arbitrum_compression_percent as u128) / 100) - * arbitrum_gas_per_l1_call_data_byte; - let gas_for_l2_call_data = (call_data_size as u128) * arbitrum_gas_per_byte; - let gas_fee = (gas - + arbitrum_gas_per_l2_tx - + gas_for_l1_call_data + gas_for_l2_call_data) - * gas_price_in_unit; - - gas_fee * price_ratio / denominator - } - - /// Estimates the fee for a send transaction using the optimism model - public(friend) fun estimate_fee_with_optimism_model( - call_data_size: u64, - gas: u128, - ethereum_pricing: &Price, - optimism_pricing: &Price, - denominator: u128, - ): u128 { - // L1 Fee - let gas_per_byte_eth = price::get_gas_per_byte_u128(ethereum_pricing); - let gas_price_in_unit_eth = price::get_gas_price_in_unit_u128(ethereum_pricing); - let gas_for_l1_call_data = (call_data_size as u128) * gas_per_byte_eth + 3188; - let l1_fee = gas_for_l1_call_data * gas_price_in_unit_eth; - - // L2 Fee - let gas_per_byte_opt = price::get_gas_per_byte_u128(optimism_pricing); - let gas_price_in_unit_opt = price::get_gas_price_in_unit_u128(optimism_pricing); - let gas_for_l2_call_data = (call_data_size as u128) * gas_per_byte_opt; - let l2_fee = (gas_for_l2_call_data + gas) * gas_price_in_unit_opt; - - let gas_price_ratio_eth = price::get_price_ratio(ethereum_pricing); - let gas_price_ratio_opt = price::get_price_ratio(optimism_pricing); - let l1_fee_in_src_price = (l1_fee * gas_price_ratio_eth) / denominator; - let l2_fee_in_src_price = (l2_fee * gas_price_ratio_opt) / denominator; - - l1_fee_in_src_price + l2_fee_in_src_price - } - - /// Gets the L1 lookup ID for the optimism model - /// This is a hardcoded lookup for the L1 chain for the optimism model and it differs based on network - public(friend) fun get_l1_lookup_id_for_optimism_model(l2_eid: u32): u32 { - if (l2_eid < 10_000) { - 101 - } else if (l2_eid < 20_000) { - if (l2_eid == 10132) { - 10121 // ethereum-goerli - } else { - 10161 // ethereum-sepolia - } - } else { - 20121 // ethereum-goerli - } - } - - // ==================================================== Helpers =================================================== - - /// Asserts that a feed exists - inline fun assert_feed_exists(feed: address) { assert!(exists(feed), EFEED_DOES_NOT_EXIST); } - - /// Borrow the feed data for a single feed - inline fun feed_data(feed: address): &Feed { - assert_feed_exists(feed); - borrow_global(feed) - } - - /// Borrow the feed data for a single feed mutably - inline fun feed_data_mut(feed: address): &mut Feed { - assert_feed_exists(feed); - borrow_global_mut(feed) - } - - /// Borrow the updaters for a single feed - inline fun feed_updaters(feed: address): &Table { - assert_feed_exists(feed); - &feed_data(feed).updaters - } - - /// Borrow the updaters for a single feed mutably - inline fun feed_updaters_mut(feed: address): &mut Table { - assert_feed_exists(feed); - &mut feed_data_mut(feed).updaters - } - - // ==================================================== Events ==================================================== - - #[event] - struct FeedUpdaterSet has drop, store { - feed_address: address, - updater: address, - enabled: bool, - } - - #[test_only] - public fun feed_updater_set_event(feed_address: address, updater: address, enabled: bool): FeedUpdaterSet { - FeedUpdaterSet { - feed_address, - updater, - enabled, - } - } - - // ================================================== Error Codes ================================================= - - const EEID_DOES_NOT_EXIST: u64 = 1; - const EFEED_DOES_NOT_EXIST: u64 = 2; - const EINVALID_DENOMNIATOR: u64 = 3; - const EINVALID_MODEL_TYPE: u64 = 4; - const EPRICE_FEED_NOT_CONFIGURED_FOR_EID: u64 = 5; - const EPRICE_FEED_NOT_CONFIGURED_FOR_EID_ETH_L1: u64 = 6; - const EUNAUTHORIZED_UPDATER: u64 = 7; -} \ No newline at end of file diff --git a/examples/oft-movement/build/oft/sources/dependencies/price_feed_module_0/price.move b/examples/oft-movement/build/oft/sources/dependencies/price_feed_module_0/price.move deleted file mode 100644 index 76f2237d8..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/price_feed_module_0/price.move +++ /dev/null @@ -1,93 +0,0 @@ -module price_feed_module_0::price { - use std::vector; - - use endpoint_v2_common::config_eid_tagged::{borrow_config, EidTagged, get_eid, tag_with_eid}; - use endpoint_v2_common::serde; - - /// This struct carries the EID specific price and gas information required to calculate gas for a given chain and - /// convert gas, value, and fees to the current chain's native token. - /// The price_ratio is relative to a DENOMINATOR that is defined in the price feed module - struct Price has copy, drop, store { - price_ratio: u128, - gas_price_in_unit: u64, - gas_per_byte: u32, - } - - // Creates a new price struct - public fun new_price(price_ratio: u128, gas_price_in_unit: u64, gas_per_byte: u32): Price { - Price { - price_ratio, - gas_price_in_unit, - gas_per_byte, - } - } - - // Gets the price ratio - public fun get_price_ratio(price: &Price): u128 { price.price_ratio } - - // Gets the gas price in unit - public fun get_gas_price_in_unit(price: &Price): u64 { price.gas_price_in_unit } - - // Gets the gas price in unit as a u128 (for use in arithmetic) - public fun get_gas_price_in_unit_u128(price: &Price): u128 { (price.gas_price_in_unit as u128) } - - // Gets the gas price per byte in the native token - public fun get_gas_per_byte(price: &Price): u32 { price.gas_per_byte } - - /// Gets the gas price per byte in the native token as a u128 (for use in arithmetic) - public fun get_gas_per_byte_u128(price: &Price): u128 { (price.gas_per_byte as u128) } - - // Append Price to the end of a byte buffer - public fun append_price(buf: &mut vector, price: &Price) { - serde::append_u128(buf, price.price_ratio); - serde::append_u64(buf, price.gas_price_in_unit); - serde::append_u32(buf, price.gas_per_byte); - } - - /// Append an Eid-tagged Price to the end of a byte buffer - public fun append_eid_tagged_price(buf: &mut vector, price: &EidTagged) { - serde::append_u32(buf, get_eid(price)); - append_price(buf, borrow_config(price)); - } - - /// Serialize a list of Eid-tagged Prices into a byte vector - /// This will be a series of Eid-tagged Prices serialized one after the other - public fun serialize_eid_tagged_price_list(prices: &vector>): vector { - let buf = vector[]; - for (i in 0..vector::length(prices)) { - append_eid_tagged_price(&mut buf, vector::borrow(prices, i)); - }; - buf - } - - /// Extract a Price from a byte buffer at a given position - /// The position to be updated to the next position after the deserialized Price - public fun extract_price(buf: &vector, position: &mut u64): Price { - let price_ratio = serde::extract_u128(buf, position); - let gas_price_in_unit = serde::extract_u64(buf, position); - let gas_per_byte = serde::extract_u32(buf, position); - Price { - price_ratio, - gas_price_in_unit, - gas_per_byte, - } - } - - /// Extract an Eid-tagged Price from a byte buffer at a given position - /// The position to be updated to the next position after the deserialized Eid-tagged Price - public fun extract_eid_tagged_price(buf: &vector, position: &mut u64): EidTagged { - let eid = serde::extract_u32(buf, position); - tag_with_eid(eid, extract_price(buf, position)) - } - - /// Deserialize a list of Eid-tagged Prices from a byte buffer - /// This will extract a series of one-after-another Eid-tagged Prices from the buffer - public fun deserialize_eid_tagged_price_list(buf: &vector): vector> { - let result = vector>[]; - let position = 0; - while (position < vector::length(buf)) { - vector::push_back(&mut result, extract_eid_tagged_price(buf, &mut position)); - }; - result - } -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/price_feed_router_0/router.move b/examples/oft-movement/build/oft/sources/dependencies/price_feed_router_0/router.move deleted file mode 100644 index 386bfe96b..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/price_feed_router_0/router.move +++ /dev/null @@ -1,21 +0,0 @@ -module price_feed_router_0::router { - public fun estimate_fee_on_send( - price_feed: address, - feed_address: address, - dst_eid: u32, - call_data_size: u64, - gas: u128, - ): (u128, u128, u128, u128) { - if (price_feed == @price_feed_module_0) { - price_feed_module_0::feeds::estimate_fee_on_send(feed_address, dst_eid, call_data_size, gas) - } else { - price_feed_router_1::router::estimate_fee_on_send( - price_feed, - feed_address, - dst_eid, - call_data_size, - gas, - ) - } - } -} \ No newline at end of file diff --git a/examples/oft-movement/build/oft/sources/dependencies/price_feed_router_1/router.move b/examples/oft-movement/build/oft/sources/dependencies/price_feed_router_1/router.move deleted file mode 100644 index 59dca70b9..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/price_feed_router_1/router.move +++ /dev/null @@ -1,15 +0,0 @@ -module price_feed_router_1::router { - public fun estimate_fee_on_send( - _price_feed: address, - _feed_address: address, - _dst_eid: u32, - _call_data_size: u64, - _gas: u128, - ): (u128, u128, u128, u128) { - abort EUNKNOWN_PRICE_FEED - } - - // ================================================== Error Codes ================================================= - - const EUNKNOWN_PRICE_FEED: u64 = 1; -} \ No newline at end of file diff --git a/examples/oft-movement/build/oft/sources/dependencies/router_node_0/router_node.move b/examples/oft-movement/build/oft/sources/dependencies/router_node_0/router_node.move deleted file mode 100644 index 3b7d75856..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/router_node_0/router_node.move +++ /dev/null @@ -1,156 +0,0 @@ -/// This module provides the base branching mechanism for routing to the correct msglib implementation. -/// The design provides multiple msglib slots per router node. Each is checked against the msglib address until the -/// correct implementation is found. If no implementation is found, the request is forwarded to the next router node. -/// The final router node will always be a placeholder contract that will return an error stating that the desired -/// library was not found. -/// Any unused slot points to a upgradable placeholder contract, which makes appending new msglib implementations -/// possible while the router or any msglib contracts can remain permanently undisturbed. -module router_node_0::router_node { - use std::any::Any; - use std::fungible_asset::FungibleAsset; - use std::option::Option; - - use blocked_msglib::router_calls as blocked_msglib; - use endpoint_v2_common::bytes32::Bytes32; - use endpoint_v2_common::contract_identity::DynamicCallRef; - use endpoint_v2_common::packet_raw::RawPacket; - use endpoint_v2_common::send_packet::SendPacket; - use router_node_1::router_node as router_node_next; - use simple_msglib::router_calls as simple_msglib; - use uln_302::router_calls as uln_302; - - public fun quote( - msglib: address, - packet: SendPacket, - options: vector, - pay_in_zro: bool, - ): (u64, u64) { - if (msglib == @uln_302) { - uln_302::quote(packet, options, pay_in_zro) - } else if (msglib == @simple_msglib) { - simple_msglib::quote(packet, options, pay_in_zro) - } else if (msglib == @blocked_msglib) { - blocked_msglib::quote(packet, options, pay_in_zro) - } else { - router_node_next::quote(msglib, packet, options, pay_in_zro) - } - } - - public fun send( - msglib: address, - call_ref: &DynamicCallRef, - packet: SendPacket, - options: vector, - native_token: &mut FungibleAsset, - zro_token: &mut Option, - ): (u64, u64, RawPacket) { - if (msglib == @uln_302) { - uln_302::send(call_ref, packet, options, native_token, zro_token) - } else if (msglib == @simple_msglib) { - simple_msglib::send(call_ref, packet, options, native_token, zro_token) - } else if (msglib == @blocked_msglib) { - blocked_msglib::send(call_ref, packet, options, native_token, zro_token) - } else { - router_node_next::send(msglib, call_ref, packet, options, native_token, zro_token) - } - } - - public fun commit_verification( - msglib: address, - call_ref: &DynamicCallRef, - packet_header: RawPacket, - payload_hash: Bytes32, - ): (address, u32, Bytes32, u64) { - if (msglib == @uln_302) { - uln_302::commit_verification(call_ref, packet_header, payload_hash) - } else if (msglib == @simple_msglib) { - simple_msglib::commit_verification(call_ref, packet_header, payload_hash) - } else if (msglib == @blocked_msglib) { - blocked_msglib::commit_verification(call_ref, packet_header, payload_hash) - } else { - router_node_next::commit_verification(msglib, call_ref, packet_header, payload_hash) - } - } - - public fun dvn_verify(msglib: address, call_ref: &DynamicCallRef, params: Any) { - if (msglib == @uln_302) { - uln_302::dvn_verify(call_ref, params) - } else if (msglib == @simple_msglib) { - simple_msglib::dvn_verify(call_ref, params) - } else if (msglib == @blocked_msglib) { - blocked_msglib::dvn_verify(call_ref, params) - } else { - router_node_next::dvn_verify(msglib, call_ref, params) - } - } - - public fun set_config( - msglib: address, - call_ref: &DynamicCallRef, - oapp: address, - config_type: u32, - config: vector, - ) { - if (msglib == @uln_302) { - uln_302::set_config(call_ref, oapp, config_type, config) - } else if (msglib == @simple_msglib) { - simple_msglib::set_config(call_ref, oapp, config_type, config) - } else if (msglib == @blocked_msglib) { - blocked_msglib::set_config(call_ref, oapp, config_type, config) - } else { - router_node_next::set_config(msglib, call_ref, oapp, config_type, config) - } - } - - #[view] - public fun get_config(msglib: address, oapp: address, eid: u32, config_type: u32): vector { - if (msglib == @uln_302) { - uln_302::get_config(oapp, eid, config_type) - } else if (msglib == @simple_msglib) { - simple_msglib::get_config(oapp, eid, config_type) - } else if (msglib == @blocked_msglib) { - blocked_msglib::get_config(oapp, eid, config_type) - } else { - router_node_next::get_config(msglib, oapp, eid, config_type) - } - } - - #[view] - public fun version(msglib: address): (u64, u8, u8) { - if (msglib == @uln_302) { - uln_302::version() - } else if (msglib == @simple_msglib) { - simple_msglib::version() - } else if (msglib == @blocked_msglib) { - blocked_msglib::version() - } else { - router_node_next::version(msglib) - } - } - - #[view] - public fun is_supported_send_eid(msglib: address, eid: u32): bool { - if (msglib == @uln_302) { - uln_302::is_supported_send_eid(eid) - } else if (msglib == @simple_msglib) { - simple_msglib::is_supported_send_eid(eid) - } else if (msglib == @blocked_msglib) { - blocked_msglib::is_supported_send_eid(eid) - } else { - router_node_next::is_supported_send_eid(msglib, eid) - } - } - - #[view] - public fun is_supported_receive_eid(msglib: address, eid: u32): bool { - if (msglib == @uln_302) { - uln_302::is_supported_receive_eid(eid) - } else if (msglib == @simple_msglib) { - simple_msglib::is_supported_receive_eid(eid) - } else if (msglib == @blocked_msglib) { - blocked_msglib::is_supported_receive_eid(eid) - } else { - router_node_next::is_supported_receive_eid(msglib, eid) - } - } -} \ No newline at end of file diff --git a/examples/oft-movement/build/oft/sources/dependencies/router_node_1/router_node.move b/examples/oft-movement/build/oft/sources/dependencies/router_node_1/router_node.move deleted file mode 100644 index fb0499195..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/router_node_1/router_node.move +++ /dev/null @@ -1,86 +0,0 @@ -module router_node_1::router_node { - use std::any::Any; - use std::fungible_asset::FungibleAsset; - use std::option::Option; - - use endpoint_v2_common::bytes32::Bytes32; - use endpoint_v2_common::contract_identity::DynamicCallRef; - use endpoint_v2_common::packet_raw::RawPacket; - use endpoint_v2_common::send_packet::SendPacket; - - const ENOT_IMPLEMENTED: u64 = 1; - - public fun endpoint_request( - _msglib: address, - _call_ref: &DynamicCallRef, - _request: Any, - ): Any { - abort ENOT_IMPLEMENTED - } - - public fun quote( - _msglib: address, - _packet: SendPacket, - _options: vector, - _pay_in_zro: bool, - ): (u64, u64) { - abort ENOT_IMPLEMENTED - } - - public fun send( - _msglib: address, - _call_ref: &DynamicCallRef, - _packet: SendPacket, - _options: vector, - _native_token: &mut FungibleAsset, - _zro_token: &mut Option, - ): (u64, u64, RawPacket) { - abort ENOT_IMPLEMENTED - } - - public fun commit_verification( - _msglib: address, - _call_ref: &DynamicCallRef, - _packet_header: RawPacket, - _payload_hash: Bytes32, - ): (address, u32, Bytes32, u64) { - abort ENOT_IMPLEMENTED - } - - public fun dvn_verify( - _msglib: address, - _call_ref: &DynamicCallRef, - _params: Any, - ) { - abort ENOT_IMPLEMENTED - } - - public fun set_config( - _msglib: address, - _call_ref: &DynamicCallRef, - _oapp: address, - _config_type: u32, - _config: vector, - ) { - abort ENOT_IMPLEMENTED - } - - public fun get_config(_msglib: address, _oapp: address, _eid: u32, _config_type: u32): vector { - abort ENOT_IMPLEMENTED - } - - #[view] - public fun version(_msglib: address): (u64, u8, u8) { - abort ENOT_IMPLEMENTED - } - - #[view] - public fun is_supported_send_eid(_msglib: address, _eid: u32): bool { - abort ENOT_IMPLEMENTED - } - - #[view] - public fun is_supported_receive_eid(_msglib: address, _eid: u32): bool { - abort ENOT_IMPLEMENTED - } -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/simple_msglib/msglib.move b/examples/oft-movement/build/oft/sources/dependencies/simple_msglib/msglib.move deleted file mode 100644 index b99177803..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/simple_msglib/msglib.move +++ /dev/null @@ -1,39 +0,0 @@ -module simple_msglib::msglib { - const ADMIN: address = @layerzero_admin; - - // Simple message lib has globally fixed fees - struct SimpleMessageLibConfig has key { - native_fee: u64, - zro_fee: u64, - } - - fun init_module(account: &signer) { - move_to(move account, SimpleMessageLibConfig { native_fee: 0, zro_fee: 0 }); - } - - #[test_only] - public fun initialize_for_test() { - init_module(&std::account::create_signer_for_test(@simple_msglib)); - } - - public entry fun set_messaging_fee( - account: &signer, - native_fee: u64, - zro_fee: u64, - ) acquires SimpleMessageLibConfig { - assert!(std::signer::address_of(move account) == ADMIN, EUNAUTHORIZED); - let msglib_config = borrow_global_mut(@simple_msglib); - msglib_config.native_fee = native_fee; - msglib_config.zro_fee = zro_fee; - } - - #[view] - public fun get_messaging_fee(): (u64, u64) acquires SimpleMessageLibConfig { - let msglib_config = borrow_global(@simple_msglib); - (msglib_config.native_fee, msglib_config.zro_fee) - } - - // ================================================== Error Codes ================================================= - - const EUNAUTHORIZED: u64 = 1; -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/simple_msglib/router_calls.move b/examples/oft-movement/build/oft/sources/dependencies/simple_msglib/router_calls.move deleted file mode 100644 index bfdb69e9c..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/simple_msglib/router_calls.move +++ /dev/null @@ -1,106 +0,0 @@ -module simple_msglib::router_calls { - use std::any::Any; - use std::fungible_asset::FungibleAsset; - use std::option::{Self, Option}; - - use endpoint_v2_common::bytes32::{Self, Bytes32}; - use endpoint_v2_common::contract_identity::{DynamicCallRef, get_dynamic_call_ref_caller}; - use endpoint_v2_common::packet_raw::RawPacket; - use endpoint_v2_common::packet_v1_codec; - use endpoint_v2_common::send_packet::{Self, SendPacket}; - use endpoint_v2_common::universal_config; - use simple_msglib::msglib; - - public fun quote(_packet: SendPacket, _options: vector, pay_in_zro: bool): (u64, u64) { - let (native_fee, zro_fee) = msglib::get_messaging_fee(); - if (pay_in_zro) (0, zro_fee) else (native_fee, 0) - } - - public fun send( - call_ref: &DynamicCallRef, - packet: SendPacket, - _options: vector, - _native_token: &mut FungibleAsset, - zro_token: &mut Option, - ): (u64, u64, RawPacket) { - assert!(get_dynamic_call_ref_caller(call_ref, @simple_msglib, b"send") == @endpoint_v2, EINVALID_CALLER); - - let ( - nonce, - src_eid, - sender, - dst_eid, - receiver, - guid, - message, - ) = send_packet::unpack_send_packet(packet); - - let (native_fee, zro_fee) = msglib::get_messaging_fee(); - let packet = packet_v1_codec::new_packet_v1( - src_eid, - sender, - dst_eid, - receiver, - nonce, - guid, - message, - ); - if (option::is_some(zro_token)) (0, zro_fee, packet) else (native_fee, 0, packet) - } - - public fun commit_verification( - call_ref: &DynamicCallRef, - packet_header: RawPacket, - _payload_hash: Bytes32, - ): (address, u32, Bytes32, u64) { - assert!( - get_dynamic_call_ref_caller(call_ref, @simple_msglib, b"commit_verification") == @endpoint_v2, - EINVALID_CALLER, - ); - - // Assert header - packet_v1_codec::assert_receive_header(&packet_header, universal_config::eid()); - - // No check for verifiable in simple message lib - - // Decode the header - let receiver = bytes32::to_address(packet_v1_codec::get_receiver(&packet_header)); - let src_eid = packet_v1_codec::get_src_eid(&packet_header); - let sender = packet_v1_codec::get_sender(&packet_header); - let nonce = packet_v1_codec::get_nonce(&packet_header); - (receiver, src_eid, sender, nonce) - } - - public fun dvn_verify(_call_ref: &DynamicCallRef, _params: Any) { - abort ENOT_IMPLEMENTED - } - - public fun set_config(_call_ref: &DynamicCallRef, __oapp: address, _config_type: u32, _config: vector) { - abort ENOT_IMPLEMENTED - } - - #[view] - public fun get_config(_oapp: address, _eid: u32, _config_type: u32): vector { - abort ENOT_IMPLEMENTED - } - - #[view] - public fun version(): (u64 /*major*/, u8 /*minor*/, u8 /*endpoint_version*/) { - (0, 0, 2) - } - - #[view] - public fun is_supported_send_eid(_eid: u32): bool { - true - } - - #[view] - public fun is_supported_receive_eid(_eid: u32): bool { - true - } - - // ================================================== Error Codes ================================================= - - const EINVALID_CALLER: u64 = 1; - const ENOT_IMPLEMENTED: u64 = 2; -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/treasury/treasury.move b/examples/oft-movement/build/oft/sources/dependencies/treasury/treasury.move deleted file mode 100644 index 10ddc749d..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/treasury/treasury.move +++ /dev/null @@ -1,192 +0,0 @@ -module treasury::treasury { - use std::account; - use std::event::emit; - use std::fungible_asset::{Self, FungibleAsset}; - use std::object::object_address; - use std::primary_fungible_store; - use std::signer::address_of; - - use endpoint_v2_common::universal_config; - - #[test_only] - friend treasury::treasury_tests; - - const TREASURY_ADMIN: address = @layerzero_treasury_admin; - - // Treasury Fee cannot be set above 100% - const MAX_BPS: u64 = 10000; - - struct TreasuryConfig has key { - // The native treasury fee (in basis points of worker fee subtotal) - native_fee_bps: u64, - // The ZRO treasury fee (a fixed amount per message) - zro_fee: u64, - // Whether the treasury fee can be paid in ZRO - zro_enabled: bool, - // The address to which the treasury fee should be deposited - deposit_address: address, - } - - fun init_module(account: &signer) { - move_to(account, TreasuryConfig { - native_fee_bps: 0, - zro_fee: 0, - zro_enabled: false, - deposit_address: TREASURY_ADMIN, - }); - } - - #[test_only] - public fun init_module_for_test() { - let account = &std::account::create_signer_for_test(@treasury); - init_module(account); - } - - // ================================================== Admin Only ================================================== - - inline fun assert_admin(admin: address) { - assert!(admin == TREASURY_ADMIN, EUNAUTHORIZED); - } - - /// Updates the address to which the treasury fee is sent (must be a valid account) - public entry fun update_deposit_address(account: &signer, deposit_address: address) acquires TreasuryConfig { - assert!(account::exists_at(deposit_address), EINVALID_ACCOUNT_ADDRESS); - assert_admin(address_of(move account)); - config_mut().deposit_address = deposit_address; - emit(DepositAddressUpdated { new_deposit_address: deposit_address }); - } - - /// Enables receipt of ZRO - public entry fun set_zro_enabled(account: &signer, enabled: bool) acquires TreasuryConfig { - assert_admin(address_of(move account)); - config_mut().zro_enabled = enabled; - emit(ZroEnabledSet { enabled }); - } - - /// Sets the treasury fee in basis points of the worker fee subtotal - public entry fun set_native_bp(account: &signer, native_bps: u64) acquires TreasuryConfig { - assert_admin(address_of(move account)); - assert!(native_bps <= MAX_BPS, EINVALID_FEE); - config_mut().native_fee_bps = native_bps; - emit(NativeBpSet { native_bps }); - } - - /// Sets the treasury fee in ZRO (as a fixed amount) - public entry fun set_zro_fee(account: &signer, zro_fixed_fee: u64) acquires TreasuryConfig { - assert_admin(address_of(move account)); - config_mut().zro_fee = zro_fixed_fee; - emit(ZroFeeSet { zro_fee: zro_fixed_fee }); - } - - // =============================================== Public Functions =============================================== - - #[view] - /// Calculates the treasury fee based on the worker fee (excluding treasury) and whether the fee should be paid in - /// ZRO. If the fee should be paid in ZRO, the fee is returned in ZRO, otherwise the fee is returned is Native token - public fun get_fee(total_worker_fee: u64, pay_in_zro: bool): u64 acquires TreasuryConfig { - if (pay_in_zro) { - assert!(get_zro_enabled(), EPAY_IN_ZRO_NOT_ENABLED); - config().zro_fee - } else { - total_worker_fee * config().native_fee_bps / 10000 - } - } - - #[view] - public fun get_native_bp(): u64 acquires TreasuryConfig { config().native_fee_bps } - - #[view] - public fun get_zro_fee(): u64 acquires TreasuryConfig { config().zro_fee } - - #[view] - public fun get_zro_enabled(): bool acquires TreasuryConfig { config().zro_enabled } - - #[view] - public fun get_deposit_address(): address acquires TreasuryConfig { config().deposit_address } - - /// Pay the fee to the treasury. The fee is calculated based on the worker fee (excluding treasury), and whether - /// the FungibleAsset payment is in ZRO or Native token. The fee is extracted from the provided &mut FungibleAsset - public fun pay_fee( - total_worker_fee: u64, - payment: &mut FungibleAsset, - ): (u64) acquires TreasuryConfig { - let metadata = fungible_asset::asset_metadata(payment); - - if (object_address(&metadata) == @native_token_metadata_address) { - let fee = get_fee(total_worker_fee, false); - deposit_fungible_asset(fee, payment); - fee - } else if (config().zro_enabled && universal_config::is_zro_metadata(metadata)) { - let fee = get_fee(total_worker_fee, true); - deposit_fungible_asset(fee, payment); - fee - } else if (!config().zro_enabled) { - abort EPAY_IN_ZRO_NOT_ENABLED - } else { - abort EUNEXPECTED_TOKEN_TYPE - } - } - - /// Deposits the payment into the treasury - fun deposit_fungible_asset(charge: u64, payment: &mut FungibleAsset) acquires TreasuryConfig { - let deposit_address = config().deposit_address; - let deposit = fungible_asset::extract(payment, charge); - primary_fungible_store::deposit(deposit_address, deposit); - } - - // =============================================== Helper Functions =============================================== - - inline fun config(): &TreasuryConfig { borrow_global(@treasury) } - - inline fun config_mut(): &mut TreasuryConfig { borrow_global_mut(@treasury) } - - // ==================================================== Events ==================================================== - - #[event] - struct ZroEnabledSet has drop, store { - enabled: bool, - } - - #[event] - struct NativeBpSet has drop, store { - native_bps: u64, - } - - #[event] - struct ZroFeeSet has drop, store { - zro_fee: u64, - } - - #[event] - struct DepositAddressUpdated has drop, store { - new_deposit_address: address, - } - - #[test_only] - public fun zro_enabled_set_event(enabled: bool): ZroEnabledSet { - ZroEnabledSet { enabled } - } - - #[test_only] - public fun native_bp_set_event(native_bp: u64): NativeBpSet { - NativeBpSet { native_bps: native_bp } - } - - #[test_only] - public fun zro_fee_set_event(zro_fee: u64): ZroFeeSet { - ZroFeeSet { zro_fee } - } - - #[test_only] - public fun deposit_address_updated_event(new_deposit_address: address): DepositAddressUpdated { - DepositAddressUpdated { new_deposit_address } - } - - // ================================================== Error Codes ================================================= - - const EUNEXPECTED_TOKEN_TYPE: u64 = 1; - const EINVALID_ACCOUNT_ADDRESS: u64 = 2; - const EINVALID_FEE: u64 = 3; - const EPAY_IN_ZRO_NOT_ENABLED: u64 = 4; - const EUNAUTHORIZED: u64 = 5; -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/uln_302/admin.move b/examples/oft-movement/build/oft/sources/dependencies/uln_302/admin.move deleted file mode 100644 index bdd57df2a..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/uln_302/admin.move +++ /dev/null @@ -1,78 +0,0 @@ -/// Entrypoint for administrative functions for the ULN 302 module. The functions in this module can only be called by -/// ULN administrators -module uln_302::admin { - use std::signer::address_of; - - use msglib_types::configs_executor::new_executor_config; - use msglib_types::configs_uln::new_uln_config; - use uln_302::configuration; - - /// Sets the default send config for an EID - public entry fun set_default_uln_send_config( - account: &signer, - dst_eid: u32, - confirmations: u64, - optional_dvn_threshold: u8, - required_dvns: vector
, - optional_dvns: vector
, - ) { - assert_admin(address_of(move account)); - configuration::set_default_send_uln_config( - dst_eid, - new_uln_config( - confirmations, - optional_dvn_threshold, - required_dvns, - optional_dvns, - false, - false, - false, - ) - ) - } - - /// Sets the default receive config for an EID - public entry fun set_default_uln_receive_config( - account: &signer, - src_eid: u32, - confirmations: u64, - optional_dvn_threshold: u8, - required_dvns: vector
, - optional_dvns: vector
, - ) { - assert_admin(address_of(move account)); - configuration::set_default_receive_uln_config( - src_eid, - new_uln_config( - confirmations, - optional_dvn_threshold, - required_dvns, - optional_dvns, - false, - false, - false, - ) - ) - } - - /// Sets the default executor config for an EID - public entry fun set_default_executor_config( - account: &signer, - eid: u32, - max_message_size: u32, - executor_address: address, - ) { - assert_admin(address_of(move account)); - let config = new_executor_config(max_message_size, executor_address); - configuration::set_default_executor_config(eid, config) - } - - /// Internal function to assert that the caller is the admin - fun assert_admin(admin: address) { - assert!(admin == @layerzero_admin, ENOT_AUTHORIZED); - } - - // ================================================== Error Codes ================================================= - - const ENOT_AUTHORIZED: u64 = 1; -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/uln_302/assert_valid_default_uln_config.move b/examples/oft-movement/build/oft/sources/dependencies/uln_302/assert_valid_default_uln_config.move deleted file mode 100644 index 1f6fb5e0f..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/uln_302/assert_valid_default_uln_config.move +++ /dev/null @@ -1,39 +0,0 @@ -module uln_302::assert_valid_default_uln_config { - use endpoint_v2_common::assert_no_duplicates; - use msglib_types::configs_uln::{Self, get_optional_dvn_threshold, UlnConfig}; - - friend uln_302::configuration; - - #[test_only] - friend uln_302::assert_valid_default_uln_config_tests; - - const MAX_DVNS: u64 = 127; - - public(friend) fun assert_valid_default_uln_config(config: &UlnConfig) { - let use_default_for_required_dvns = configs_uln::get_use_default_for_required_dvns(config); - let use_default_for_optional_dvns = configs_uln::get_use_default_for_optional_dvns(config); - let use_default_for_confirmations = configs_uln::get_use_default_for_confirmations(config); - assert!(!use_default_for_required_dvns, EREQUESTING_USE_DEFAULT_REQUIRED_DVNS_FOR_DEFAULT_CONFIG); - assert!(!use_default_for_optional_dvns, EREQUESTING_USE_DEFAULT_OPTIONAL_DVNS_FOR_DEFAULT_CONFIG); - assert!(!use_default_for_confirmations, EREQUESTING_USE_DEFAULT_CONFIRMATIONS_FOR_DEFAULT_CONFIG); - let required_dvn_count = configs_uln::get_required_dvn_count(config); - let optional_dvn_count = configs_uln::get_optional_dvn_count(config); - let optional_dvn_threshold = get_optional_dvn_threshold(config); - assert!(required_dvn_count > 0 || optional_dvn_threshold > 0, ENO_EFFECTIVE_DVN_THRESHOLD); - assert!((optional_dvn_threshold as u64) <= optional_dvn_count, EOPTIONAL_DVN_THRESHOLD_EXCEEDS_COUNT); - assert!(required_dvn_count <= MAX_DVNS, ETOO_MANY_REQUIRED_DVNS); - assert!(optional_dvn_count <= MAX_DVNS, ETOO_MANY_OPTIONAL_DVNS); - assert_no_duplicates::assert_no_duplicates(&configs_uln::get_required_dvns(config)); - assert_no_duplicates::assert_no_duplicates(&configs_uln::get_optional_dvns(config)); - } - - // ================================================== Error Codes ================================================= - - const ENO_EFFECTIVE_DVN_THRESHOLD: u64 = 1; - const EOPTIONAL_DVN_THRESHOLD_EXCEEDS_COUNT: u64 = 2; - const EREQUESTING_USE_DEFAULT_CONFIRMATIONS_FOR_DEFAULT_CONFIG: u64 = 3; - const EREQUESTING_USE_DEFAULT_OPTIONAL_DVNS_FOR_DEFAULT_CONFIG: u64 = 4; - const EREQUESTING_USE_DEFAULT_REQUIRED_DVNS_FOR_DEFAULT_CONFIG: u64 = 5; - const ETOO_MANY_OPTIONAL_DVNS: u64 = 6; - const ETOO_MANY_REQUIRED_DVNS: u64 = 7; -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/uln_302/assert_valid_uln_config.move b/examples/oft-movement/build/oft/sources/dependencies/uln_302/assert_valid_uln_config.move deleted file mode 100644 index 567980e9d..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/uln_302/assert_valid_uln_config.move +++ /dev/null @@ -1,58 +0,0 @@ -module uln_302::assert_valid_uln_config { - use endpoint_v2_common::assert_no_duplicates; - use msglib_types::configs_uln::{Self, UlnConfig}; - - friend uln_302::configuration; - - #[test_only] - friend uln_302::assert_valid_oapp_uln_config_tests; - - const MAX_DVNS: u64 = 127; - - public(friend) fun assert_valid_uln_config(oapp_config: &UlnConfig, default_config: &UlnConfig) { - let use_default_for_required_dvns = configs_uln::get_use_default_for_required_dvns(oapp_config); - let use_default_for_optional_dvns = configs_uln::get_use_default_for_optional_dvns(oapp_config); - let use_default_for_confirmations = configs_uln::get_use_default_for_confirmations(oapp_config); - let required_dvn_count = configs_uln::get_required_dvn_count(oapp_config); - let optional_dvn_count = configs_uln::get_optional_dvn_count(oapp_config); - let optional_dvn_threshold = configs_uln::get_optional_dvn_threshold(oapp_config); - if (use_default_for_required_dvns) { - assert!(required_dvn_count == 0, ENONEMPTY_REQUIRED_DVNS_WITH_USE_DEFAULT); - }; - if (use_default_for_optional_dvns) { - assert!(optional_dvn_count == 0, ENONEMPTY_OPTIONAL_DVNS_WITH_USE_DEFAULT); - }; - if (use_default_for_confirmations) { - assert!(configs_uln::get_confirmations(oapp_config) == 0, - ENONZERO_CONFIRMATIONS_PROVIDED_FOR_DEFAULT_CONFIG, - ); - }; - - assert!(required_dvn_count <= MAX_DVNS, ETOO_MANY_REQUIRED_DVNS); - assert!(optional_dvn_count <= MAX_DVNS, ETOO_MANY_OPTIONAL_DVNS); - assert_no_duplicates::assert_no_duplicates(&configs_uln::get_required_dvns(oapp_config)); - assert_no_duplicates::assert_no_duplicates(&configs_uln::get_optional_dvns(oapp_config)); - - // Optional threshold should not be greater than count of optional dvns - assert!((optional_dvn_threshold as u64) <= optional_dvn_count, EOPTIONAL_DVN_THRESHOLD_EXCEEDS_COUNT); - - // make sure there is an effective DVN threshold (required + optional threshold) >= 1 - let effective_optional_threshold = if (!use_default_for_optional_dvns) optional_dvn_threshold else { - configs_uln::get_optional_dvn_threshold(default_config) - }; - let effective_required_count = if (!use_default_for_required_dvns) required_dvn_count else { - configs_uln::get_required_dvn_count(default_config) - }; - assert!(effective_optional_threshold > 0 || effective_required_count > 0, ENO_EFFECTIVE_DVN_THRESHOLD); - } - - // ================================================== Error Codes ================================================= - - const ENONEMPTY_OPTIONAL_DVNS_WITH_USE_DEFAULT: u64 = 1; - const ENONEMPTY_REQUIRED_DVNS_WITH_USE_DEFAULT: u64 = 2; - const ENONZERO_CONFIRMATIONS_PROVIDED_FOR_DEFAULT_CONFIG: u64 = 3; - const ENO_EFFECTIVE_DVN_THRESHOLD: u64 = 4; - const EOPTIONAL_DVN_THRESHOLD_EXCEEDS_COUNT: u64 = 5; - const ETOO_MANY_OPTIONAL_DVNS: u64 = 6; - const ETOO_MANY_REQUIRED_DVNS: u64 = 7; -} \ No newline at end of file diff --git a/examples/oft-movement/build/oft/sources/dependencies/uln_302/configuration.move b/examples/oft-movement/build/oft/sources/dependencies/uln_302/configuration.move deleted file mode 100644 index 28836a4b8..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/uln_302/configuration.move +++ /dev/null @@ -1,299 +0,0 @@ -/// This module handles the configuration of the ULN for both the send and receive sides -module uln_302::configuration { - use std::event::emit; - use std::option; - use std::vector; - - use endpoint_v2_common::config_eid_tagged; - use endpoint_v2_common::serde; - use msglib_types::configs_executor::{Self, ExecutorConfig, new_executor_config}; - use msglib_types::configs_uln::{Self, get_confirmations, get_optional_dvn_threshold, - get_optional_dvns, get_required_dvns, get_use_default_for_confirmations, - get_use_default_for_optional_dvns, get_use_default_for_required_dvns, new_uln_config, UlnConfig, - }; - use uln_302::assert_valid_default_uln_config::assert_valid_default_uln_config; - use uln_302::assert_valid_uln_config::assert_valid_uln_config; - use uln_302::uln_302_store; - - friend uln_302::sending; - friend uln_302::verification; - friend uln_302::msglib; - friend uln_302::admin; - friend uln_302::router_calls; - - #[test_only] - friend uln_302::verification_tests; - - #[test_only] - friend uln_302::configuration_tests; - - // This is needed for tests of inline functions in the sending module, which call friend functions in this module - #[test_only] - friend uln_302::sending_tests; - - // Configuration Types as used in this message library - public inline fun CONFIG_TYPE_EXECUTOR(): u32 { 1 } - - public inline fun CONFIG_TYPE_SEND_ULN(): u32 { 2 } - - public inline fun CONFIG_TYPE_RECV_ULN(): u32 { 3 } - - const ULN_SEND_SIDE: u8 = 0; - const ULN_RECEIVE_SIDE: u8 = 1; - - // ===================================================== OApp ===================================================== - - // Gets the serialized configuration for an OApp eid and config type - public(friend) fun get_config(oapp: address, eid: u32, config_type: u32): vector { - if (config_type == CONFIG_TYPE_SEND_ULN()) { - let config = get_send_uln_config(oapp, eid); - serde::bytes_of(|buf| configs_uln::append_uln_config(buf, config)) - } else if (config_type == CONFIG_TYPE_RECV_ULN()) { - let config = get_receive_uln_config(oapp, eid); - serde::bytes_of(|buf| configs_uln::append_uln_config(buf, config)) - } else if (config_type == CONFIG_TYPE_EXECUTOR()) { - let config = get_executor_config(oapp, eid); - serde::bytes_of(|buf| configs_executor::append_executor_config(buf, config)) - } else { - abort EUNKNOWN_CONFIG_TYPE - } - } - - public(friend) fun set_config(oapp: address, config_type: u32, config: vector) { - if (config_type == CONFIG_TYPE_SEND_ULN()) { - let tagged_config = configs_uln::extract_uln_config_with_eid(&config, &mut 0); - let (eid, uln_config) = config_eid_tagged::get_eid_and_config(tagged_config); - set_send_uln_config(oapp, eid, uln_config); - } else if (config_type == CONFIG_TYPE_RECV_ULN()) { - let tagged_config = configs_uln::extract_uln_config_with_eid(&config, &mut 0); - let (eid, uln_config) = config_eid_tagged::get_eid_and_config(tagged_config); - set_receive_uln_config(oapp, eid, uln_config); - } else if (config_type == CONFIG_TYPE_EXECUTOR()) { - let tagged_config = configs_executor::extract_executor_config_with_eid(&config, &mut 0); - let (eid, executor_config) = config_eid_tagged::get_eid_and_config(tagged_config); - set_executor_config(oapp, eid, executor_config); - } else { - abort EUNKNOWN_CONFIG_TYPE - } - } - - // ================================================= Receive Side ================================================= - - public(friend) fun supports_receive_eid(eid: u32): bool { - uln_302_store::has_default_receive_uln_config(eid) - } - - public(friend) fun set_default_receive_uln_config(eid: u32, config: UlnConfig) { - assert_valid_default_uln_config(&config); - uln_302_store::set_default_receive_uln_config(eid, config); - emit(DefaultUlnConfigSet { eid, config, send_or_receive: ULN_RECEIVE_SIDE }); - } - - public(friend) fun set_receive_uln_config(receiver: address, eid: u32, config: UlnConfig) { - let default = uln_302_store::get_default_receive_uln_config(eid); - assert!(option::is_some(&default), EEID_NOT_CONFIGURED); - assert_valid_uln_config(&config, option::borrow(&default)); - uln_302_store::set_receive_uln_config(receiver, eid, config); - emit(UlnConfigSet { oapp: receiver, eid, config, send_or_receive: ULN_RECEIVE_SIDE }); - } - - public(friend) fun get_receive_uln_config(receiver: address, eid: u32): UlnConfig { - let oapp_config = uln_302_store::get_receive_uln_config(receiver, eid); - let default_config = uln_302_store::get_default_receive_uln_config(eid); - - if (option::is_some(&oapp_config) && option::is_some(&default_config)) { - merge_uln_configs(option::borrow(&default_config), option::borrow(&oapp_config)) - } else if (option::is_some(&default_config)) { - option::extract(&mut default_config) - } else { - abort EEID_NOT_CONFIGURED - } - } - - // =================================================== Send Side ================================================== - - public(friend) fun supports_send_eid(eid: u32): bool { - uln_302_store::has_default_send_uln_config(eid) - } - - public(friend) fun set_default_send_uln_config(eid: u32, config: UlnConfig) { - assert_valid_default_uln_config(&config); - uln_302_store::set_default_send_uln_config(eid, config); - emit(DefaultUlnConfigSet { eid, config, send_or_receive: ULN_SEND_SIDE }); - } - - public(friend) fun set_send_uln_config(oapp: address, eid: u32, config: UlnConfig) { - let default = uln_302_store::get_default_send_uln_config(eid); - assert!(option::is_some(&default), EEID_NOT_CONFIGURED); - assert_valid_uln_config(&config, option::borrow(&default)); - uln_302_store::set_send_uln_config(oapp, eid, config); - emit(UlnConfigSet { oapp, eid, config, send_or_receive: ULN_SEND_SIDE }); - } - - public(friend) fun get_send_uln_config(sender: address, eid: u32): UlnConfig { - let oapp_config = uln_302_store::get_send_uln_config(sender, eid); - let default_config = uln_302_store::get_default_send_uln_config(eid); - - if (option::is_some(&oapp_config) && option::is_some(&default_config)) { - merge_uln_configs(option::borrow(&default_config), option::borrow(&oapp_config)) - } else if (option::is_some(&default_config)) { - option::extract(&mut default_config) - } else { - abort EEID_NOT_CONFIGURED - } - } - - // =================================================== Executor =================================================== - - public(friend) fun get_executor_config(sender: address, eid: u32): ExecutorConfig { - let oapp_config = uln_302_store::get_executor_config(sender, eid); - let default_config = uln_302_store::get_default_executor_config(eid); - - if (option::is_some(&oapp_config) && option::is_some(&default_config)) { - // get correct merged config if oapp and default are both set - merge_executor_configs(option::borrow(&default_config), option::borrow(&oapp_config)) - } else if (option::is_some(&default_config)) { - option::extract(&mut default_config) - } else { - abort EEID_NOT_CONFIGURED - } - } - - - public(friend) fun set_default_executor_config(eid: u32, config: ExecutorConfig) { - assert_valid_default_executor_config(&config); - uln_302_store::set_default_executor_config(eid, config); - emit(DefaultExecutorConfigSet { eid, config }); - } - - public(friend) fun set_executor_config(sender: address, eid: u32, config: ExecutorConfig) { - uln_302_store::set_executor_config(sender, eid, config); - emit(ExecutorConfigSet { oapp: sender, eid, config }); - } - - public(friend) fun merge_executor_configs( - default_config: &ExecutorConfig, - oapp_config: &ExecutorConfig, - ): ExecutorConfig { - let default_max_message_size = configs_executor::get_max_message_size(default_config); - let default_executor_address = configs_executor::get_executor_address(default_config); - let oapp_max_message_size = configs_executor::get_max_message_size(oapp_config); - let oapp_executor_address = configs_executor::get_executor_address(oapp_config); - - new_executor_config( - if (oapp_max_message_size > 0) { oapp_max_message_size } else { default_max_message_size }, - if (oapp_executor_address != @0x0) { oapp_executor_address } else { default_executor_address } - ) - } - - public(friend) fun assert_valid_default_executor_config(config: &ExecutorConfig) { - let max_message_size = configs_executor::get_max_message_size(config); - let executor_address = configs_executor::get_executor_address(config); - assert!(max_message_size > 0, EMAX_MESSAGE_SIZE_ZERO); - assert!(executor_address != @0x0, EEXECUTOR_ADDRESS_IS_ZERO); - } - - // =================================================== Internal =================================================== - - /// Merges parts of the oapp config with the default config, where specified - public(friend) fun merge_uln_configs(default_config: &UlnConfig, oapp_config: &UlnConfig): UlnConfig { - let default_for_confirmations = get_use_default_for_confirmations(oapp_config); - let default_for_required = get_use_default_for_required_dvns(oapp_config); - let default_for_optional = get_use_default_for_optional_dvns(oapp_config); - - // handle situations where there the configuration requests a fallback to default - let optional_dvn_threshold = if (!default_for_optional) { - get_optional_dvn_threshold(oapp_config) - } else { - get_optional_dvn_threshold(default_config) - }; - let optional_dvns = if (!default_for_optional) { - get_optional_dvns(oapp_config) - } else { - get_optional_dvns(default_config) - }; - let required_dvns = if (!default_for_required) { - get_required_dvns(oapp_config) - } else { - get_required_dvns(default_config) - }; - - // Check that there is at least one DVN configured. This is also checked on setting the configuration, but this - // could cease to be the case if the default configuration is changed after the OApp configuration is set. - assert!((optional_dvn_threshold as u64) + vector::length(&required_dvns) > 0, EINSUFFICIENT_DVNS_CONFIGURED); - - let confirmations = if (!default_for_confirmations) { - get_confirmations(oapp_config) - } else { - get_confirmations(default_config) - }; - - new_uln_config( - confirmations, - optional_dvn_threshold, - required_dvns, - optional_dvns, - default_for_confirmations, - default_for_required, - default_for_optional, - ) - } - - // ==================================================== Events ==================================================== - - #[event] - struct DefaultUlnConfigSet has store, drop { - eid: u32, - config: UlnConfig, - send_or_receive: u8 - } - - #[event] - struct DefaultExecutorConfigSet has store, drop { - eid: u32, - config: ExecutorConfig, - } - - #[event] - struct UlnConfigSet has store, drop { - oapp: address, - eid: u32, - config: UlnConfig, - send_or_receive: u8 - } - - #[event] - struct ExecutorConfigSet has store, drop { - oapp: address, - eid: u32, - config: ExecutorConfig, - } - - #[test_only] - public fun default_uln_config_set_event(eid: u32, config: UlnConfig, send_or_receive: u8): DefaultUlnConfigSet { - DefaultUlnConfigSet { eid, config, send_or_receive } - } - - #[test_only] - public fun default_executor_config_set_event(eid: u32, config: ExecutorConfig): DefaultExecutorConfigSet { - DefaultExecutorConfigSet { eid, config } - } - - #[test_only] - public fun uln_config_set_event(oapp: address, eid: u32, config: UlnConfig, send_or_receive: u8): UlnConfigSet { - UlnConfigSet { oapp, eid, config, send_or_receive } - } - - #[test_only] - public fun executor_config_set_event(oapp: address, eid: u32, config: ExecutorConfig): ExecutorConfigSet { - ExecutorConfigSet { oapp, eid, config } - } - - // ================================================== Error Codes ================================================= - - const EEID_NOT_CONFIGURED: u64 = 1; - const EEXECUTOR_ADDRESS_IS_ZERO: u64 = 2; - const EINSUFFICIENT_DVNS_CONFIGURED: u64 = 3; - const EMAX_MESSAGE_SIZE_ZERO: u64 = 4; - const EUNKNOWN_CONFIG_TYPE: u64 = 5; -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/uln_302/for_each_dvn.move b/examples/oft-movement/build/oft/sources/dependencies/uln_302/for_each_dvn.move deleted file mode 100644 index 0a4859ab1..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/uln_302/for_each_dvn.move +++ /dev/null @@ -1,30 +0,0 @@ -module uln_302::for_each_dvn { - use std::vector; - - friend uln_302::verification; - friend uln_302::sending; - - #[test_only] - friend uln_302::for_each_dvn_tests; - - /// Loop through each dvn and provide the dvn and the dvn index - /// If a required dvn is duplicated as an optional dvn, it will be called twice - public(friend) inline fun for_each_dvn( - required_dvns: &vector
, - optional_dvns: &vector
, - f: |address, u64|(), - ) { - let count_required = vector::length(required_dvns); - let count_optional = vector::length(optional_dvns); - - for (i in 0..(count_required + count_optional)) { - let dvn = if (i < count_required) { - vector::borrow(required_dvns, i) - } else { - vector::borrow(optional_dvns, i - count_required) - }; - - f(*dvn, i) - } - } -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/uln_302/msglib.move b/examples/oft-movement/build/oft/sources/dependencies/uln_302/msglib.move deleted file mode 100644 index 74303b719..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/uln_302/msglib.move +++ /dev/null @@ -1,121 +0,0 @@ -/// View functions for the ULN-302 module -module uln_302::msglib { - use std::option::Option; - use std::signer::address_of; - use std::event::emit; - - use endpoint_v2_common::bytes32; - use endpoint_v2_common::packet_raw::bytes_to_raw_packet; - use endpoint_v2_common::packet_v1_codec::{Self, is_receive_header_valid}; - use endpoint_v2_common::universal_config; - use msglib_types::configs_executor::ExecutorConfig; - use msglib_types::configs_uln::UlnConfig; - use uln_302::configuration; - use uln_302::uln_302_store; - use uln_302::verification; - - #[test_only] - /// Initializes the uln for testing - public fun initialize_for_test() { - uln_302_store::init_module_for_test(); - } - - #[view] - /// Checks that a packet is verifiable and has received verification of the required confirmations from the needed - /// set of DVNs - public fun verifiable( - packet_header_bytes: vector, - payload_hash: vector, - ): bool { - let packet_header = bytes_to_raw_packet(packet_header_bytes); - let src_eid = packet_v1_codec::get_src_eid(&packet_header); - let receiver = bytes32::to_address( - packet_v1_codec::get_receiver(&packet_header) - ); - - is_receive_header_valid(&packet_header, universal_config::eid()) && - verification::check_verifiable( - &configuration::get_receive_uln_config(receiver, src_eid), - bytes32::keccak256(packet_header_bytes), - bytes32::to_bytes32(payload_hash) - ) - } - - #[view] - /// Gets the treasury address - public fun get_treasury(): address { - @treasury - } - - #[view] - /// Gets the default send ULN config for an EID - /// - /// This will return option::none() if it is not set. - public fun get_default_uln_send_config(eid: u32): Option { - uln_302_store::get_default_send_uln_config(eid) - } - - #[view] - /// Gets the default receive ULN config for an EID - /// - /// This will return option::none() if it is not set. - public fun get_default_uln_receive_config(eid: u32): Option { - uln_302_store::get_default_receive_uln_config(eid) - } - - #[view] - /// Gets the default executor config for an EID - /// - /// This will return option::none() if it is not set. - public fun get_default_executor_config(eid: u32): Option { - uln_302_store::get_default_executor_config(eid) - } - - #[view] - public fun get_verification_confirmations( - header_hash: vector, - payload_hash: vector, - dvn_address: address, - ): u64 { - let header_hash_bytes = bytes32::to_bytes32(header_hash); - let payload_hash_bytes = bytes32::to_bytes32(payload_hash); - - if (uln_302_store::has_verification_confirmations(header_hash_bytes, payload_hash_bytes, dvn_address)) { - uln_302_store::get_verification_confirmations(header_hash_bytes, payload_hash_bytes, dvn_address) - } else 0 - } - - /// Setter for a worker to opt in (true) or out (false) of using the worker_common::worker_config module to store - /// their fee library configuration - public entry fun set_worker_config_for_fee_lib_routing_opt_in(worker: &signer, opt_in: bool) { - let worker_address = address_of(move worker); - // Emit an event only if there is a change - if (uln_302_store::get_worker_config_for_fee_lib_routing_opt_in(worker_address) != opt_in) { - emit(WorkerConfigForFeeLibRoutingOptIn { worker: worker_address, opt_in }) - }; - - uln_302_store::set_worker_config_for_fee_lib_routing_opt_in(worker_address, opt_in); - } - - #[view] - /// Gets the opt in/out status of a worker - public fun worker_config_for_fee_lib_routing_opt_in(worker: address): bool { - uln_302_store::get_worker_config_for_fee_lib_routing_opt_in(worker) - } - - // ==================================================== Events ==================================================== - - #[event] - struct WorkerConfigForFeeLibRoutingOptIn has drop, store { - worker: address, - opt_in: bool, - } - - #[test_only] - public fun worker_config_for_fee_lib_routing_opt_in_event( - worker: address, - opt_in: bool, - ): WorkerConfigForFeeLibRoutingOptIn { - WorkerConfigForFeeLibRoutingOptIn { worker, opt_in } - } -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/uln_302/router_calls.move b/examples/oft-movement/build/oft/sources/dependencies/uln_302/router_calls.move deleted file mode 100644 index d014c863b..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/uln_302/router_calls.move +++ /dev/null @@ -1,116 +0,0 @@ -/// Entrypoint for all calls that come from the Message Library Router -module uln_302::router_calls { - use std::any::Any; - use std::fungible_asset::FungibleAsset; - use std::option::Option; - - use endpoint_v2_common::bytes32::Bytes32; - use endpoint_v2_common::contract_identity::{ - DynamicCallRef, - get_dynamic_call_ref_caller, - }; - use endpoint_v2_common::packet_raw::RawPacket; - use endpoint_v2_common::send_packet::SendPacket; - use msglib_types::dvn_verify_params; - use uln_302::configuration; - use uln_302::sending; - use uln_302::verification; - - // ==================================================== Sending =================================================== - - /// Provides a quote for sending a packet - public fun quote( - packet: SendPacket, - options: vector, - pay_in_zro: bool, - ): (u64, u64) { - sending::quote(packet, options, pay_in_zro) - } - - /// Takes payment for sending a packet and triggers offchain entities to verify and deliver the packet - public fun send( - call_ref: &DynamicCallRef, - packet: SendPacket, - options: vector, - native_token: &mut FungibleAsset, - zro_token: &mut Option, - ): (u64, u64, RawPacket) { - assert_caller_is_endpoint_v2(call_ref, b"send"); - sending::send( - packet, - options, - native_token, - zro_token, - ) - } - - // =================================================== Receiving ================================================== - - /// Commits a verification for a packet and clears the memory of that packet - /// - /// Once a packet is committed, it cannot be recommitted without receiving all verifications again. This will abort - /// if the packet has not been verified by all required parties. This is to be called in conjunction with the - /// endpoint's `verify()`, which identifies the message as ready to be delivered by storing the message hash. - public fun commit_verification( - call_ref: &DynamicCallRef, - packet_header: RawPacket, - payload_hash: Bytes32, - ): (address, u32, Bytes32, u64) { - assert_caller_is_endpoint_v2(call_ref, b"commit_verification"); - verification::commit_verification(packet_header, payload_hash) - } - - // ===================================================== DVNs ===================================================== - - /// This is called by the DVN to verify a packet - /// - /// This expects an Any of type DvnVerifyParams, which contains the packet header, payload hash, and the number of - /// confirmations. This is stored and the verifications are checked as a group when `commit_verification` is called. - public fun dvn_verify(contract_id: &DynamicCallRef, params: Any) { - let worker = get_dynamic_call_ref_caller(contract_id, @uln_302, b"dvn_verify"); - let (packet_header, payload_hash, confirmations) = dvn_verify_params::unpack_dvn_verify_params(params); - verification::verify(worker, packet_header, payload_hash, confirmations) - } - - // ================================================= Configuration ================================================ - - /// Sets the ULN and Executor configurations for an OApp - public fun set_config(call_ref: &DynamicCallRef, oapp: address, config_type: u32, config: vector) { - assert_caller_is_endpoint_v2(call_ref, b"set_config"); - configuration::set_config(oapp, config_type, config) - } - - #[view] - /// Gets the ULN or Executor configuration for an eid on an OApp - public fun get_config(oapp: address, eid: u32, config_type: u32): vector { - configuration::get_config(oapp, eid, config_type) - } - - // ==================================================== Helper ==================================================== - - fun assert_caller_is_endpoint_v2(call_ref: &DynamicCallRef, authorization: vector) { - let caller = get_dynamic_call_ref_caller(call_ref, @uln_302, authorization); - assert!(caller == @endpoint_v2, EINVALID_CALLER); - } - - // ================================================ View Functions ================================================ - - #[view] - public fun version(): (u64 /*major*/, u8 /*minor*/, u8 /*endpoint_version*/) { - (3, 0, 2) - } - - #[view] - public fun is_supported_send_eid(eid: u32): bool { - configuration::supports_send_eid(eid) - } - - #[view] - public fun is_supported_receive_eid(eid: u32): bool { - configuration::supports_receive_eid(eid) - } - - // ================================================== Error Codes ================================================= - - const EINVALID_CALLER: u64 = 1; -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/uln_302/sending.move b/examples/oft-movement/build/oft/sources/dependencies/uln_302/sending.move deleted file mode 100644 index a460107fe..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/uln_302/sending.move +++ /dev/null @@ -1,506 +0,0 @@ -module uln_302::sending { - use std::event; - use std::fungible_asset::{Self, FungibleAsset}; - use std::option::{Self, Option}; - use std::primary_fungible_store; - use std::vector; - - use dvn_fee_lib_router_0::dvn_fee_lib_router::get_dvn_fee as fee_lib_router_get_dvn_fee; - use endpoint_v2_common::bytes32::{Self, Bytes32}; - use endpoint_v2_common::packet_raw::{Self, RawPacket}; - use endpoint_v2_common::packet_v1_codec; - use endpoint_v2_common::send_packet::{Self, SendPacket, unpack_send_packet}; - use executor_fee_lib_router_0::executor_fee_lib_router::get_executor_fee as fee_lib_router_get_executor_fee; - use msglib_types::configs_executor; - use msglib_types::configs_uln::{Self, unpack_uln_config}; - use msglib_types::worker_options::get_matching_options; - use treasury::treasury; - use uln_302::configuration; - use uln_302::for_each_dvn::for_each_dvn; - use uln_302::msglib::worker_config_for_fee_lib_routing_opt_in; - use worker_common::worker_config; - - friend uln_302::router_calls; - - #[test_only] - friend uln_302::sending_tests; - - // ==================================================== Sending =================================================== - - /// Makes payment to workers and triggers the packet send - public(friend) fun send( - packet: SendPacket, - options: vector, - native_token: &mut FungibleAsset, - zro_token: &mut Option, - ): (u64, u64, RawPacket) { - let dst_eid = send_packet::get_dst_eid(&packet); - let sender = bytes32::to_address(send_packet::get_sender(&packet)); - let message_length = send_packet::get_message_length(&packet); - send_internal( - packet, - options, - native_token, - zro_token, - // Get Executor Fee - |executor_address, executor_options| fee_lib_router_get_executor_fee( - @uln_302, - get_worker_fee_lib(executor_address), - executor_address, - dst_eid, - sender, - message_length, - executor_options, - ), - // Get DVN Fee - |dvn, confirmations, dvn_options, packet_header, payload_hash| fee_lib_router_get_dvn_fee( - @uln_302, - get_worker_fee_lib(dvn), - dvn, - dst_eid, - sender, - packet_raw::get_packet_bytes(packet_header), - bytes32::from_bytes32(payload_hash), - confirmations, - dvn_options, - ) - ) - } - - /// Internal function to send a packet. The fee library function calls are injected as parameters so that this - /// behavior can be mocked in tests - /// - /// @param packet: the packet details that will be sent - /// @param options: combined executor and DVN options for the packet - /// @param native_token: the native token fungible asset mutable ref to pay the workers - /// @param zro_token: optional ZRO token fungible asset mutable ref to pay the workers - /// @param get_executor_fee: function that gets the fee for the executor - /// |executor, executor_options| (fee, deposit_address) - /// @param get_dvn_fee: function that gets the fee for one DVN - /// |dvn, confirmations, dvn_option, packet_header, payload_hash| (fee, deposit_address) - public(friend) inline fun send_internal( - packet: SendPacket, - options: vector, - native_token: &mut FungibleAsset, - zro_token: &mut Option, - get_executor_fee: |address, vector| (u64, address), - get_dvn_fee: |address, u64, vector, RawPacket, Bytes32| (u64, address), - ): (u64 /*native*/, u64 /*zro*/, RawPacket /*encoded_packet*/) { - // Convert the Send Packet in the a Packet of the Codec V1 format - let (nonce, src_eid, sender, dst_eid, receiver, guid, message) = unpack_send_packet(packet); - let sender_address = bytes32::to_address(sender); - let raw_packet = packet_v1_codec::new_packet_v1( - src_eid, - sender, - dst_eid, - receiver, - nonce, - guid, - message, - ); - - // Calculate and Pay Worker Fees (DVNs and Executor) - let packet_header = packet_v1_codec::extract_header(&raw_packet); - let payload_hash = packet_v1_codec::get_payload_hash(&raw_packet); - let message_length = vector::length(&message); - let worker_native_fee = pay_workers( - sender_address, - dst_eid, - message_length, - options, - native_token, - // Get Executor Fee - |executor, executor_options| get_executor_fee(executor, executor_options), - // Get DVN Fee - Partially apply the parameters that are known in this scope - |dvn, confirmations, dvn_options| get_dvn_fee( - dvn, - confirmations, - dvn_options, - packet_header, - payload_hash, - ), - ); - - // Calculate and Pay Treasury Fee - let treasury_zro_fee = 0; - let treasury_native_fee = 0; - if (option::is_some(zro_token)) { - treasury_zro_fee = treasury::pay_fee(worker_native_fee, option::borrow_mut(zro_token)); - } else { - treasury_native_fee = treasury::pay_fee(worker_native_fee, native_token); - }; - - // Return the total Native and ZRO paid - let total_native_fee = worker_native_fee + treasury_native_fee; - (total_native_fee, treasury_zro_fee, raw_packet) - } - - // ==================================================== Quoting =================================================== - - // Quote the price of a send in native and ZRO tokens (if `pay_in_zro` is true) - public(friend) fun quote(packet: SendPacket, options: vector, pay_in_zro: bool): (u64, u64) { - let dst_eid = send_packet::get_dst_eid(&packet); - let sender = bytes32::to_address(send_packet::get_sender(&packet)); - let message_length = send_packet::get_message_length(&packet); - - quote_internal( - packet, - options, - pay_in_zro, - // Get Executor Fee - |executor_address, executor_options| fee_lib_router_get_executor_fee( - @uln_302, - get_worker_fee_lib(executor_address), - executor_address, - dst_eid, - sender, - message_length, - executor_options, - ), - // Get DVN Fee - |dvn, confirmations, dvn_options, packet_header, payload_hash| fee_lib_router_get_dvn_fee( - @uln_302, - get_worker_fee_lib(dvn), - dvn, - dst_eid, - sender, - packet_raw::get_packet_bytes(packet_header), - bytes32::from_bytes32(payload_hash), - confirmations, - dvn_options, - ) - ) - } - - /// Provides a quote for sending a packet - /// - /// @param packet: the packet to be sent - /// @param options: combined executor and DVN options for the packet - /// @param pay_in_zro: whether the fees should be paid in ZRO or native token - /// @param get_executor_fee: function that gets the fee for the executor - /// |executor, executor_option| (fee, deposit_address) - /// @param get_dvn_fee function: that gets the fee for one DVN - /// |dvn, confirmations, dvn_option, packet_header, payload_hash| (fee, deposit_address) - public(friend) inline fun quote_internal( - packet: SendPacket, - options: vector, - pay_in_zro: bool, - get_executor_fee: |address, vector| (u64, address), - get_dvn_fee: |address, u64, vector, RawPacket, Bytes32| (u64, address), - ): (u64, u64) { - let (nonce, src_eid, sender, dst_eid, receiver, guid, message) = unpack_send_packet(packet); - let sender_address = bytes32::to_address(sender); - - // Extract the packet header and payload hash - let packet_header = packet_v1_codec::new_packet_v1_header_only( - src_eid, - sender, - dst_eid, - receiver, - nonce, - ); - - // Get the Executor Configuration - let executor_config = uln_302::configuration::get_executor_config(sender_address, dst_eid); - let executor_address = configs_executor::get_executor_address(&executor_config); - let max_msg_size = configs_executor::get_max_message_size(&executor_config); - - // Split provided options into executor and DVN options - let (executor_options, all_dvn_options) = msglib_types::worker_options::extract_and_split_options(&options); - - // Assert message size is less than what is configured for the OApp - assert!(vector::length(&message) <= (max_msg_size as u64), err_EMESSAGE_SIZE_EXCEEDS_MAX()); - - // Get Executor Fee - let (executor_fee, _deposit_address) = get_executor_fee(executor_address, executor_options); - - // Get Fee for all DVNs - let payload_hash = packet_v1_codec::compute_payload_hash(guid, message); - let config = configuration::get_send_uln_config(sender_address, dst_eid); - let (confirmations, _, required_dvns, optional_dvns, _, _, _) = unpack_uln_config(config); - let (dvn_fee, _dvn_fees, _dvn_deposit_addresses) = get_all_dvn_fees( - &required_dvns, - &optional_dvns, - all_dvn_options, - // Get DVN Fee - Partially apply the parameters that are known in this scope - |dvn, dvn_options| get_dvn_fee( - dvn, - confirmations, - dvn_options, - packet_header, - payload_hash, - ), - ); - - let worker_native_fee = executor_fee + dvn_fee; - - // Calculate Treasury Fee - let treasury_fee = treasury::get_fee(worker_native_fee, pay_in_zro); - let treasury_zro_fee = if (pay_in_zro) { treasury_fee } else { 0 }; - let treasury_native_fee = if (!pay_in_zro) { treasury_fee } else { 0 }; - - // Return Native and ZRO Fees - let total_native_fee = worker_native_fee + treasury_native_fee; - (total_native_fee, treasury_zro_fee) - } - - // ==================================================== DVN Fees ================================================== - - /// Calculates the fees for all the DVNs - /// - /// @param required_dvns: list of required DVNs - /// @param optional_dvns: list of optional DVNs - /// @param validation_options: concatinated options for all DVNs - /// @param get_dvn_fee: function that gets the fee for one DVN - /// |dvn, dvn_option| (u64, address) - /// @return (total_fee, dvn_fees, dvn_deposit_addresses) - public(friend) inline fun get_all_dvn_fees( - required_dvns: &vector
, - optional_dvns: &vector
, - validation_options: vector, // options for all dvns, - get_dvn_fee: |address, vector| (u64, address), - ): (u64, vector, vector
) { - let index_option_pairs = msglib_types::worker_options::group_dvn_options_by_index(&validation_options); - - // Calculate the fee for each DVN and accumulate total DVN fee - let total_dvn_fee = 0; - let dvn_fees = vector[]; - let dvn_deposit_addresses = vector
[]; - - for_each_dvn(required_dvns, optional_dvns, |dvn, i| { - let options = get_matching_options(&index_option_pairs, (i as u8)); - let (fee, deposit_address) = get_dvn_fee(dvn, options); - vector::push_back(&mut dvn_fees, fee); - vector::push_back(&mut dvn_deposit_addresses, deposit_address); - total_dvn_fee = total_dvn_fee + fee; - }); - - (total_dvn_fee, dvn_fees, dvn_deposit_addresses) - } - - // ==================================================== Payment =================================================== - - /// Pay the workers for the message - /// - /// @param sender the address of the sender - /// @param dst_eid the destination endpoint id - /// @param message_length the length of the message - /// @param options the options for the workers - /// @param native_token the native token fungible asset to pay the workers - /// @param get_executor_fee function that gets the fee for the Executor - /// |executor, executor_option| (fee, deposit_address) - /// @param get_dvn_fee function that gets the fee for one DVN - /// |dvn, confirmations, dvn_options| (fee, deposit_address) - public(friend) inline fun pay_workers( - sender: address, - dst_eid: u32, - message_length: u64, - options: vector, - native_token: &mut FungibleAsset, - get_executor_fee: |address, vector| (u64, address), - get_dvn_fee: |address, u64, vector| (u64, address), - ): u64 /*native fee*/ { - // Split serialized options into separately concatenated executor options and dvn options - let (executor_options, dvn_options) = msglib_types::worker_options::extract_and_split_options(&options); - - // Pay Executor - let executor_native_fee = pay_executor_and_assert_size( - sender, - native_token, - dst_eid, - message_length, - executor_options, - // Get Executor Fee - |executor, options| get_executor_fee(executor, options), - ); - - // Pay Verifier - let verifier_native_fee = pay_verifier( - sender, - dst_eid, - native_token, - dvn_options, - // Get DVN Fee - |dvn, confirmations, options| get_dvn_fee(dvn, confirmations, options) - ); - - let total_native_fee = executor_native_fee + verifier_native_fee; - total_native_fee - } - - /// Pay the executor for the message and check the size against the configured maximum - /// - /// @param sender: the address of the sender - /// @param native_token: the native token fungible asset to pay the executor - /// @param dst_eid: the destination endpoint id - /// @param message_length: the length of the message - /// @param executor_options: the options for the executor - /// @param get_executor_fee: function that gets the fee for the Executor - /// |executor, executor_option| (fee, deposit_address) - /// @return the fee paid to the executor - inline fun pay_executor_and_assert_size( - sender: address, - native_token: &mut FungibleAsset, - dst_eid: u32, - message_length: u64, - executor_options: vector, - get_executor_fee: |address, vector| (u64, address), - ): u64 { - // Load config - let executor_config = configuration::get_executor_config(sender, dst_eid); - let max_msg_size = configs_executor::get_max_message_size(&executor_config); - let executor_address = configs_executor::get_executor_address(&executor_config); - - // Assert message size is less than what is configured for the OApp - assert!(message_length <= (max_msg_size as u64), err_EMESSAGE_SIZE_EXCEEDS_MAX()); - - // Extract and Deposit the Executor Fee - let (fee, deposit_address) = get_executor_fee(executor_address, executor_options); - let fee_fa = fungible_asset::extract(native_token, fee); - primary_fungible_store::deposit(deposit_address, fee_fa); - - // Emit a record of the fee paid to the executor - emit_executor_fee_paid(executor_address, deposit_address, fee); - - fee - } - - /// Pay the DVNs for verification - /// Emits a DvnFeePaidEvent to notify the DVNs that they have been paid - /// - /// @param sender: the address of the sender - /// @param dst_eid: the destination endpoint id - /// @param native_token: the native token fungible asset to pay the DVNs - /// @param dvn_options: the options for the DVNs - /// @param get_dvn_fee: function that gets the dvn fee for one DVN - /// |dvn, confirmations, dvn_option| (fee, deposit_address) - /// @return the total fee paid to all DVNs - inline fun pay_verifier( - sender: address, - dst_eid: u32, - native_token: &mut FungibleAsset, - dvn_options: vector, - get_dvn_fee: |address, u64, vector| (u64, address), - ): u64 /*native_fee*/ { - let config = configuration::get_send_uln_config(sender, dst_eid); - let required_dvns = configs_uln::get_required_dvns(&config); - let optional_dvns = configs_uln::get_optional_dvns(&config); - let confirmations = configs_uln::get_confirmations(&config); - - let (total_fee, dvn_fees, dvn_deposit_addresses) = get_all_dvn_fees( - &required_dvns, - &optional_dvns, - dvn_options, - // Get DVN Fee - Partially apply the parameters that are known in this scope - |dvn, options| get_dvn_fee( - dvn, - confirmations, - options, - ), - ); - - // Deposit the appropriate fee into each of the DVN deposit addresses - for_each_dvn(&required_dvns, &optional_dvns, |_dvn, i| { - let fee = vector::borrow(&dvn_fees, i); - let deposit_address = *vector::borrow(&dvn_deposit_addresses, i); - let fee_fa = fungible_asset::extract(native_token, *fee); - primary_fungible_store::deposit(deposit_address, fee_fa); - }); - - // Emit a record of the fees paid to the DVNs - emit_dvn_fee_paid(required_dvns, optional_dvns, dvn_fees, dvn_deposit_addresses); - - total_fee - } - - // ==================================================== Routing =================================================== - - /// Provides the feelib address for a worker - /// Defer to worker_common::worker_config if opting in to worker config. Otherwise, use the worker itself. - fun get_worker_fee_lib(worker: address): address { - if (worker_config_for_fee_lib_routing_opt_in(worker)) { - worker_config::get_worker_fee_lib(worker) - } else { - worker - } - } - - // ==================================================== Events ==================================================== - - #[event] - struct DvnFeePaid has store, copy, drop { - required_dvns: vector
, - optional_dvns: vector
, - dvn_deposit_addresses: vector
, - dvn_fees: vector, - } - - #[event] - struct ExecutorFeePaid has store, copy, drop { - executor_address: address, - executor_deposit_address: address, - executor_fee: u64, - } - - public(friend) fun emit_executor_fee_paid( - executor_address: address, - executor_deposit_address: address, - executor_fee: u64, - ) { - event::emit(ExecutorFeePaid { - executor_address, - executor_deposit_address, - executor_fee, - }); - } - - public(friend) fun emit_dvn_fee_paid( - required_dvns: vector
, - optional_dvns: vector
, - dvn_fees: vector, - dvn_deposit_addresses: vector
, - ) { - event::emit(DvnFeePaid { - required_dvns, - optional_dvns, - dvn_fees, - dvn_deposit_addresses, - }); - } - - #[test_only] - public fun dvn_fee_paid_event( - required_dvns: vector
, - optional_dvns: vector
, - dvn_fees: vector, - dvn_deposit_addresses: vector
, - ): DvnFeePaid { - DvnFeePaid { - required_dvns, - optional_dvns, - dvn_fees, - dvn_deposit_addresses, - } - } - - #[test_only] - public fun executor_fee_paid_event( - executor_address: address, - executor_deposit_address: address, - executor_fee: u64, - ): ExecutorFeePaid { - ExecutorFeePaid { - executor_address, - executor_deposit_address, - executor_fee, - } - } - - // ================================================== Error Codes ================================================= - - const EMESSAGE_SIZE_EXCEEDS_MAX: u64 = 1; - - public(friend) fun err_EMESSAGE_SIZE_EXCEEDS_MAX(): u64 { - EMESSAGE_SIZE_EXCEEDS_MAX - } -} \ No newline at end of file diff --git a/examples/oft-movement/build/oft/sources/dependencies/uln_302/uln_302_store.move b/examples/oft-movement/build/oft/sources/dependencies/uln_302/uln_302_store.move deleted file mode 100644 index 0a634dfff..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/uln_302/uln_302_store.move +++ /dev/null @@ -1,270 +0,0 @@ -module uln_302::uln_302_store { - use std::option::{Self, Option}; - use std::table::{Self, Table}; - - use endpoint_v2_common::bytes32::Bytes32; - use msglib_types::configs_executor::ExecutorConfig; - use msglib_types::configs_uln::UlnConfig; - - friend uln_302::configuration; - friend uln_302::verification; - friend uln_302::msglib; - - #[test_only] - friend uln_302::configuration_tests; - - #[test_only] - friend uln_302::verification_tests; - - #[test_only] - friend uln_302::sending_tests; - - struct Store has key { - default_configs: Table, - oapp_configs: Table, - confirmations: Table, - worker_config_opt_in_out: Table, - } - - struct OAppEid has store, drop, copy { - oapp: address, - eid: u32, - } - - struct DefaultConfig has store, drop, copy { - executor_config: Option, - receive_uln_config: Option, - send_uln_config: Option, - } - - struct OAppConfig has store, drop, copy { - executor_config: Option, - receive_uln_config: Option, - send_uln_config: Option, - } - - struct ConfirmationsKey has store, drop, copy { - header_hash: Bytes32, - payload_hash: Bytes32, - dvn_address: address, - } - - fun init_module(account: &signer) { - move_to(account, Store { - default_configs: table::new(), - oapp_configs: table::new(), - confirmations: table::new(), - worker_config_opt_in_out: table::new(), - }); - } - - // ============================================= General Configuration ============================================ - - // the following functions are used to facilitate working with a nested data structure in the store. The - // initialization of certain table fields does not have a mapping to an exposed initialization process and are - // strictly implementation details. - - #[test_only] - // Initializes the module for testing purposes - public(friend) fun init_module_for_test() { - let admin = &std::account::create_signer_for_test(@uln_302); - init_module(admin); - } - - /// Internal function that checks whether the default config table is initialized for a given EID - fun is_eid_default_config_table_initialized(eid: u32): bool acquires Store { - table::contains(&store().default_configs, eid) - } - - /// Internal function that checks whether the oapp config table is initialized for a given EID and OApp - fun is_eid_oapp_config_table_initialized(eid: u32, oapp: address): bool acquires Store { - table::contains(&store().oapp_configs, OAppEid { oapp, eid }) - } - - /// Internal function that initializes the default config table for a given EID if it is not already - fun ensure_eid_default_config_table_initialized(eid: u32) acquires Store { - if (!is_eid_default_config_table_initialized(eid)) { - table::add(&mut store_mut().default_configs, eid, DefaultConfig { - executor_config: option::none(), - receive_uln_config: option::none(), - send_uln_config: option::none(), - }); - } - } - - /// Internal function that initializes the oapp config table for a given EID and OApp if it is not already - fun ensure_oapp_config_table_initialized(eid: u32, oapp: address) acquires Store { - if (!is_eid_oapp_config_table_initialized(eid, oapp)) { - table::add(&mut store_mut().oapp_configs, OAppEid { eid, oapp }, OAppConfig { - executor_config: option::none(), - receive_uln_config: option::none(), - send_uln_config: option::none(), - }); - } - } - - // ================================================= Worker Config ================================================ - - - public(friend) fun set_worker_config_for_fee_lib_routing_opt_in(worker: address, opt_in_out: bool) acquires Store { - table::upsert(&mut store_mut().worker_config_opt_in_out, worker, opt_in_out) - } - - public(friend) fun get_worker_config_for_fee_lib_routing_opt_in(worker: address): bool acquires Store { - *table::borrow_with_default(&store().worker_config_opt_in_out, worker, &false) - } - - // ================================================ Send ULN Config =============================================== - - public(friend) fun has_default_send_uln_config(dst_eid: u32): bool acquires Store { - is_eid_default_config_table_initialized(dst_eid) && - option::is_some(&default_configs(dst_eid).send_uln_config) - } - - /// Gets the default send configuration for a given EID - public(friend) fun get_default_send_uln_config(dst_eid: u32): Option acquires Store { - if (!is_eid_default_config_table_initialized(dst_eid)) { return option::none() }; - default_configs(dst_eid).send_uln_config - } - - /// Sets the default send configuration for a given EID. This is a raw setter and should not be used directly - public(friend) fun set_default_send_uln_config(eid: u32, config: UlnConfig) acquires Store { - ensure_eid_default_config_table_initialized(eid); - default_configs_mut(eid).send_uln_config = option::some(config); - } - - /// Sets the send configuration for a given EID. This is a raw setter and should not be used directly - public(friend) fun set_send_uln_config(oapp_address: address, eid: u32, config: UlnConfig) acquires Store { - ensure_oapp_config_table_initialized(eid, oapp_address); - oapp_configs_mut(eid, oapp_address).send_uln_config = option::some(config); - } - - /// Gets the oapp send configuration for an EID if it is set. This is a raw getter and should not be used directly - public(friend) fun get_send_uln_config(sender: address, dst_eid: u32): Option acquires Store { - if (!is_eid_oapp_config_table_initialized(dst_eid, sender)) { return option::none() }; - oapp_configs(dst_eid, sender).send_uln_config - } - - // ============================================== Receive ULN Config ============================================== - - public(friend) fun has_default_receive_uln_config(eid: u32): bool acquires Store { - is_eid_default_config_table_initialized(eid) && - option::is_some(&default_configs(eid).receive_uln_config) - } - - /// Gets the default receive configuration for a given EID - public(friend) fun get_default_receive_uln_config(eid: u32): Option acquires Store { - if (!is_eid_default_config_table_initialized(eid)) { return option::none() }; - default_configs(eid).receive_uln_config - } - - /// Sets the default receive configuration for a given EID. This is a raw setter and should not be used directly - public(friend) fun set_default_receive_uln_config(eid: u32, config: UlnConfig) acquires Store { - ensure_eid_default_config_table_initialized(eid); - default_configs_mut(eid).receive_uln_config = option::some(config); - } - - /// Gets the oapp receive configuration for an EID if it is set. This is a raw getter and should not be used - /// directly - public(friend) fun get_receive_uln_config(oapp_address: address, eid: u32): Option acquires Store { - if (!is_eid_oapp_config_table_initialized(eid, oapp_address)) { return option::none() }; - oapp_configs(eid, oapp_address).receive_uln_config - } - - /// Sets the oapp receive configuration for an EID. This is a raw setter and should not be used directly - public(friend) fun set_receive_uln_config(oapp: address, eid: u32, config: UlnConfig) acquires Store { - ensure_oapp_config_table_initialized(eid, oapp); - oapp_configs_mut(eid, oapp).receive_uln_config = option::some(config); - } - - // ================================================ Executor Config =============================================== - - /// Gets the default executor configuration for a given EID - public(friend) fun get_default_executor_config(eid: u32): Option acquires Store { - if (!is_eid_default_config_table_initialized(eid)) { return option::none() }; - default_configs(eid).executor_config - } - - /// Sets the default executor configuration for a given EID. This is a raw setter and should not be used directly - public(friend) fun set_default_executor_config(eid: u32, config: ExecutorConfig) acquires Store { - ensure_eid_default_config_table_initialized(eid); - default_configs_mut(eid).executor_config = option::some(config); - } - - /// Gets the oapp executor configuration for an EID if it is set. This is a raw getter and should not be used - public(friend) fun get_executor_config(sender: address, eid: u32): Option acquires Store { - if (!is_eid_oapp_config_table_initialized(eid, sender)) { return option::none() }; - oapp_configs(eid, sender).executor_config - } - - /// Sets the oapp executor configuration for an EID. This is a raw setter and should not be used directly - public(friend) fun set_executor_config(sender: address, eid: u32, config: ExecutorConfig) acquires Store { - ensure_oapp_config_table_initialized(eid, sender); - oapp_configs_mut(eid, sender).executor_config = option::some(config); - } - - // ============================================== Receive Side State ============================================== - - /// Checks if a message has received confirmations from a given DVN - public(friend) fun has_verification_confirmations( - header_hash: Bytes32, payload_hash: Bytes32, dvn_address: address, - ): bool acquires Store { - table::contains(confirmations(), ConfirmationsKey { header_hash, payload_hash, dvn_address }) - } - - /// Gets the number of verification confirmations received for a message from a given DVN - public(friend) fun get_verification_confirmations( - header_hash: Bytes32, payload_hash: Bytes32, dvn_address: address, - ): u64 acquires Store { - *table::borrow(confirmations(), ConfirmationsKey { header_hash, payload_hash, dvn_address }) - } - - /// Sets the number of verification confirmations received for a message from a given DVN. This is a raw setter and - /// should not be used directly - public(friend) fun set_verification_confirmations( - header_hash: Bytes32, payload_hash: Bytes32, dvn_address: address, confirmations: u64, - ) acquires Store { - table::upsert( - confirmations_mut(), - ConfirmationsKey { header_hash, payload_hash, dvn_address }, - confirmations, - ) - } - - /// Removes the verification confirmations for a message from a given DVN. This is a raw setter and should not be - /// used directly - public(friend) fun remove_verification_confirmations( - header_hash: Bytes32, payload_hash: Bytes32, dvn_address: address, - ): u64 acquires Store { - table::remove(confirmations_mut(), ConfirmationsKey { header_hash, payload_hash, dvn_address }) - } - - // ==================================================== Helpers =================================================== - - inline fun store(): &Store { borrow_global(@uln_302) } - - inline fun store_mut(): &mut Store { borrow_global_mut(@uln_302) } - - inline fun default_configs(eid: u32): &DefaultConfig { table::borrow(&store().default_configs, eid) } - - inline fun default_configs_mut(eid: u32): &mut DefaultConfig { - table::borrow_mut(&mut store_mut().default_configs, eid) - } - - inline fun oapp_configs(eid: u32, oapp: address): &OAppConfig { - table::borrow(&store().oapp_configs, OAppEid { oapp, eid }) - } - - inline fun oapp_configs_mut(eid: u32, oapp: address): &mut OAppConfig { - table::borrow_mut(&mut store_mut().oapp_configs, OAppEid { oapp, eid }) - } - - inline fun confirmations(): &Table { &store().confirmations } - - inline fun confirmations_mut(): &mut Table { &mut store_mut().confirmations } - - // ================================================== Error Codes ================================================= - - const EALREADY_SET: u64 = 1; - const EINVALID_INPUT: u64 = 2; -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/uln_302/verification.move b/examples/oft-movement/build/oft/sources/dependencies/uln_302/verification.move deleted file mode 100644 index b815c94eb..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/uln_302/verification.move +++ /dev/null @@ -1,168 +0,0 @@ -module uln_302::verification { - use std::event::emit; - use std::vector; - - use endpoint_v2_common::bytes32::{Self, Bytes32, from_bytes32}; - use endpoint_v2_common::packet_raw::{get_packet_bytes, RawPacket}; - use endpoint_v2_common::packet_v1_codec::{Self, assert_receive_header}; - use endpoint_v2_common::universal_config; - use msglib_types::configs_uln::{Self, UlnConfig}; - use uln_302::configuration; - use uln_302::for_each_dvn::for_each_dvn; - use uln_302::uln_302_store; - - friend uln_302::msglib; - friend uln_302::router_calls; - - #[test_only] - friend uln_302::verification_tests; - - // ================================================= Verification ================================================= - - /// Initiated from the DVN to give their verification of a payload as well as the number of confirmations - public(friend) fun verify( - dvn_address: address, - packet_header: RawPacket, - payload_hash: Bytes32, - confirmations: u64, - ) { - let packet_header_bytes = get_packet_bytes(packet_header); - let header_hash = bytes32::keccak256(packet_header_bytes); - uln_302_store::set_verification_confirmations(header_hash, payload_hash, dvn_address, confirmations); - emit(PayloadVerified { - dvn: dvn_address, - header: packet_header_bytes, - confirmations, - proof_hash: from_bytes32(payload_hash), - }); - } - - /// This checks if a message is verifiable by a sufficient group of DVNs to meet the requirements - public(friend) fun check_verifiable(config: &UlnConfig, header_hash: Bytes32, payload_hash: Bytes32): bool { - let required_dvn_count = configs_uln::get_required_dvn_count(config); - let optional_dvn_count = configs_uln::get_optional_dvn_count(config); - let optional_dvn_threshold = configs_uln::get_optional_dvn_threshold(config); - let required_confirmations = configs_uln::get_confirmations(config); - - if (required_dvn_count > 0) { - let required_dvns = configs_uln::get_required_dvns(config); - for (i in 0..required_dvn_count) { - let dvn = vector::borrow(&required_dvns, i); - if (!is_verified(*dvn, header_hash, payload_hash, required_confirmations)) { - return false - }; - }; - if (optional_dvn_threshold == 0) { - return true - }; - }; - - let count_optional_dvns_verified = 0; - let optional_dvns = configs_uln::get_optional_dvns(config); - for (i in 0..optional_dvn_count) { - let dvn = vector::borrow(&optional_dvns, i); - if (is_verified(*dvn, header_hash, payload_hash, required_confirmations)) { - count_optional_dvns_verified = count_optional_dvns_verified + 1; - if (count_optional_dvns_verified >= optional_dvn_threshold) { - return true - }; - }; - }; - - return false - } - - /// This checks if a DVN has verified a message with at least the required number of confirmations - public(friend) fun is_verified( - dvn_address: address, - header_hash: Bytes32, - payload_hash: Bytes32, - required_confirmations: u64, - ): bool { - if (!uln_302_store::has_verification_confirmations(header_hash, payload_hash, dvn_address)) { return false }; - let confirmations = uln_302_store::get_verification_confirmations(header_hash, payload_hash, dvn_address); - confirmations >= required_confirmations - } - - - /// Commits the verification of a payload - /// This uses the contents of a serialized packet header to then assert the complete verification of a payload and - /// then clear the storage related to it - public(friend) fun commit_verification( - packet_header: RawPacket, - payload_hash: Bytes32, - ): (address, u32, Bytes32, u64) { - assert_receive_header(&packet_header, universal_config::eid()); - verify_and_reclaim_storage( - &get_receive_uln_config_from_packet_header(&packet_header), - bytes32::keccak256(get_packet_bytes(packet_header)), - payload_hash, - ); - - // decode the header - let receiver = bytes32::to_address(packet_v1_codec::get_receiver(&packet_header)); - let src_eid = packet_v1_codec::get_src_eid(&packet_header); - let sender = packet_v1_codec::get_sender(&packet_header); - let nonce = packet_v1_codec::get_nonce(&packet_header); - (receiver, src_eid, sender, nonce) - } - - public(friend) fun get_receive_uln_config_from_packet_header(packet_header: &RawPacket): UlnConfig { - let src_eid = packet_v1_codec::get_src_eid(packet_header); - let oapp_address = bytes32::to_address(packet_v1_codec::get_receiver(packet_header)); - configuration::get_receive_uln_config(oapp_address, src_eid) - } - - /// If the message is verifiable, this function will remove the confirmations from the store - /// It will abort if the message is not verifiable - public(friend) fun verify_and_reclaim_storage(config: &UlnConfig, header_hash: Bytes32, payload_hash: Bytes32) { - assert!(check_verifiable(config, header_hash, payload_hash), ENOT_VERIFIABLE); - - reclaim_storage( - &configs_uln::get_required_dvns(config), - &configs_uln::get_optional_dvns(config), - header_hash, - payload_hash, - ); - } - - - /// Loop through the DVN addresses and clear confirmations for the given header and payload hash - public(friend) fun reclaim_storage( - required_dvns: &vector
, - optional_dvns: &vector
, - header_hash: Bytes32, - payload_hash: Bytes32, - ) { - for_each_dvn(required_dvns, optional_dvns, |dvn, _idx| { - if (uln_302_store::has_verification_confirmations(header_hash, payload_hash, dvn)) { - uln_302_store::remove_verification_confirmations(header_hash, payload_hash, dvn); - }; - }); - } - - // ==================================================== Events ==================================================== - - #[event] - struct PayloadVerified has drop, copy, store { - dvn: address, - header: vector, - confirmations: u64, - proof_hash: vector, - } - - #[test_only] - public fun payload_verified_event( - dvn: address, - header: vector, - confirmations: u64, - proof_hash: vector, - ): PayloadVerified { - PayloadVerified { dvn, header, confirmations, proof_hash } - } - - // ================================================== Error Codes ================================================= - - const ENO_DVNS: u64 = 1; - const ENOT_VERIFIABLE: u64 = 2; -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/worker_common/multisig.move b/examples/oft-movement/build/oft/sources/dependencies/worker_common/multisig.move deleted file mode 100644 index bdebbeb34..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/worker_common/multisig.move +++ /dev/null @@ -1,147 +0,0 @@ -// This multisig module was developed for use with DVN workers. It is used to manage the quorum and signers for -// a worker and to verify that the required number of signatures are present and valid when a change is made. It -// keeps track of used hashes to prevent the same command being replayed (all hashes should be hashed with an expiration -// time, which allows two of the otherwise same command to be called at different times). -// The important place where the configuration is used beyond direct multisig activity is that the fee_lib_0 depends on -// the quorum number set here to compute the send fee for the DVN, which scale with the quorum of signers required. -module worker_common::multisig { - use std::event::emit; - use std::signer::address_of; - - use endpoint_v2_common::bytes32::{Bytes32, to_bytes32}; - use endpoint_v2_common::contract_identity::{ - CallRef, - get_call_ref_caller, - }; - use worker_common::multisig_store; - - struct WorkerMultisigTarget {} - - /// Initialize the worker signing / multisig store - /// The signers provided are the public keys of the signers that are allowed to sign for the worker - /// A quorum of signatures is required to sign for a transaction to succeed - public fun initialize_for_worker(account: &signer, quorum: u64, signers: vector>) { - multisig_store::initialize_for_worker(account); - let worker = address_of(move account); - multisig_store::set_multisig_signers(worker, signers); - emit(SetSigners { worker, multisig_signers: signers }); - multisig_store::set_quorum(worker, quorum); - emit(SetQuorum { worker, quorum }); - } - - #[test_only] - /// Initialize the worker signing / multisig store for testing purposes - public fun initialize_for_worker_test_only(worker: address, quorum: u64, signers: vector>) { - let account = &std::account::create_signer_for_test(worker); - initialize_for_worker(account, quorum, signers); - } - - /// Assert that all signatures are valid, it is not expired, and add the hash to the history or abort if it is - /// present. This will abort if the hash has already been used, expired, or the signatures are invalid - /// *Important*: The `hash` must be the result of a hash operation to be secure. The caller should ensure that the - /// expiry time provided is a component of the hash provided - public fun assert_all_and_add_to_history( - call_ref: &CallRef, - signatures: &vector, - expiration: u64, - hash: Bytes32, - ) { - let worker = get_call_ref_caller(call_ref); - multisig_store::assert_initialized(worker); - multisig_store::assert_all_and_add_to_history(worker, signatures, expiration, hash); - } - - /// Set the quorum required for a worker - public fun set_quorum(call_ref: &CallRef, quorum: u64) { - let worker = get_call_ref_caller(call_ref); - multisig_store::assert_initialized(worker); - multisig_store::set_quorum(worker, quorum); - emit(SetQuorum { worker, quorum }); - } - - /// Set the signers (public keys) for a worker - public fun set_signers(call_ref: &CallRef, multisig_signers: vector>) { - let worker = get_call_ref_caller(call_ref); - multisig_store::assert_initialized(worker); - multisig_store::set_multisig_signers(worker, multisig_signers); - emit(SetSigners { worker, multisig_signers }); - } - - /// Set a signer (public key) for a worker - /// `active` param refers to whether the signer should be added (true) or deleted (false) - public fun set_signer(call_ref: &CallRef, multisig_signer: vector, active: bool) { - let worker = get_call_ref_caller(call_ref); - multisig_store::assert_initialized(worker); - if (active) { - multisig_store::add_multisig_signer(worker, multisig_signer); - } else { - multisig_store::remove_multisig_signer(worker, multisig_signer); - }; - emit(UpdateSigner { worker, multisig_signer, active }); - } - - #[view] - /// Get the quorum required for a worker - public fun get_quorum(worker: address): u64 { - multisig_store::assert_initialized(worker); - multisig_store::get_quorum(worker) - } - - #[view] - /// Get the signers (public keys) for a worker - public fun get_signers(worker: address): vector> { - multisig_store::assert_initialized(worker); - multisig_store::get_multisig_signers(worker) - } - - #[view] - /// Check if a signer (public key) is a signer for a worker - public fun is_signer(worker: address, multisig_signer: vector): bool { - multisig_store::assert_initialized(worker); - multisig_store::is_multisig_signer(worker, multisig_signer) - } - - #[view] - /// Check if a specific hash has already been used to submit a transaction - public fun was_hash_used(worker: address, hash: vector): bool { - multisig_store::assert_initialized(worker); - multisig_store::was_hash_used(worker, to_bytes32(hash)) - } - - - // ==================================================== Events ==================================================== - - #[event] - /// Emitted when the quorum is set for a worker - struct SetQuorum has store, drop { worker: address, quorum: u64 } - - #[event] - /// Emitted when the signers are set for a worker - struct SetSigners has store, drop { worker: address, multisig_signers: vector> } - - #[event] - /// Emitted when a signer is added or removed for a worker - struct UpdateSigner has store, drop { - worker: address, - multisig_signer: vector, - active: bool, - } - - #[test_only] - /// Generates a SetQuorum event for testing - public fun set_quorum_event(worker: address, quorum: u64): SetQuorum { - SetQuorum { worker, quorum } - } - - #[test_only] - /// Generates a SetSigners event for testing - public fun set_signers_event(worker: address, multisig_signers: vector>): SetSigners { - SetSigners { worker, multisig_signers } - } - - #[test_only] - /// Generates an UpdateSigner event for testing - public fun update_signer_event(worker: address, multisig_signer: vector, active: bool): UpdateSigner { - UpdateSigner { worker, multisig_signer, active } - } -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/worker_common/multisig_store.move b/examples/oft-movement/build/oft/sources/dependencies/worker_common/multisig_store.move deleted file mode 100644 index 79e2e0fce..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/worker_common/multisig_store.move +++ /dev/null @@ -1,198 +0,0 @@ -module worker_common::multisig_store { - use std::option; - use std::signer::address_of; - use std::table::{Self, Table}; - use std::vector; - - use endpoint_v2_common::assert_no_duplicates::assert_no_duplicates; - use endpoint_v2_common::bytes32::{Bytes32, from_bytes32}; - - friend worker_common::multisig; - - #[test_only] - friend worker_common::signing_store_tests; - - const PUBKEY_SIZE: u64 = 64; - const SIGNATURE_SIZE: u64 = 65; // 64 bytes signature + 1 byte recovery id - - struct SigningStore has key { - quorum: u64, - signers: vector>, - used_hashes: Table, - } - - public(friend) fun initialize_for_worker(worker_account: &signer) { - let worker_address = address_of(worker_account); - assert!(!exists(worker_address), EWORKER_ALREADY_INITIALIZED); - move_to(move worker_account, SigningStore { - quorum: 0, - signers: vector[], - used_hashes: table::new(), - }); - } - - /// Mark the hash as used after asserting that the hash is not expired, signatures are verified, and the hash has - /// not been previously used - public(friend) fun assert_all_and_add_to_history( - worker: address, - signatures: &vector, - expiry: u64, - hash: Bytes32, - ) acquires SigningStore { - assert_not_expired(expiry); - assert_signatures_verified(worker, signatures, hash); - assert!(!was_hash_used(worker, hash), EHASH_ALREADY_USED); - add_hash_to_used(worker, hash); - } - - /// Asserts that multiple signatures match the provided pub keys at the provided quorum threshold - fun assert_signatures_verified( - worker: address, - signatures_joined: &vector, - hash: Bytes32, - ) acquires SigningStore { - let signatures = &split_signatures(signatures_joined); - let quorum = get_quorum(worker); - let signers = get_multisig_signers(worker); - assert_signatures_verified_internal(signatures, hash, &signers, quorum); - } - - /// Internal - asserts that multiple signatures match the provided pub keys at the provided quorum threshold - public(friend) fun assert_signatures_verified_internal( - signatures: &vector>, - hash: Bytes32, - multisig_signers: &vector>, - quorum: u64, - ) { - let signatures_count = vector::length(signatures); - assert!(signatures_count >= quorum, EDVN_LESS_THAN_QUORUM); - - let pub_keys_verified = &mut vector[]; - for (i in 0..signatures_count) { - let pubkey_bytes = get_pubkey(vector::borrow(signatures, i), hash); - assert!(vector::contains(multisig_signers, &pubkey_bytes), EDVN_INCORRECT_SIGNATURE); - assert!(!vector::contains(pub_keys_verified, &pubkey_bytes), EDVN_DUPLICATE_PK); - vector::push_back(pub_keys_verified, pubkey_bytes); - } - } - - /// Internal - gets the pubkey given a signature - public(friend) fun get_pubkey(signature_with_recovery: &vector, hash: Bytes32): vector { - let signature = vector::slice(signature_with_recovery, 0, 64); - let recovery_id = *vector::borrow(signature_with_recovery, 64); - - let ecdsa_signature = std::secp256k1::ecdsa_signature_from_bytes(signature); - let pubkey = std::secp256k1::ecdsa_recover( - from_bytes32(hash), - recovery_id, - &ecdsa_signature, - ); - assert!(std::option::is_some(&pubkey), EDVN_INCORRECT_SIGNATURE); - std::secp256k1::ecdsa_raw_public_key_to_bytes(option::borrow(&pubkey)) - } - - /// Internal - splits a vector of signatures into a vector of vectors of signatures - public(friend) fun split_signatures(signatures: &vector): vector> { - let bytes_length = vector::length(signatures); - assert!(bytes_length % SIGNATURE_SIZE == 0, EINVALID_SIGNATURE_LENGTH); - - let signatures_vector = vector[]; - let i = 0; - while (i < bytes_length) { - let signature = vector::slice(signatures, i, i + SIGNATURE_SIZE); - vector::push_back(&mut signatures_vector, signature); - i = i + SIGNATURE_SIZE; - }; - signatures_vector - } - - public(friend) fun assert_not_expired(expiration: u64) { - let current_time = std::timestamp::now_seconds(); - assert!(expiration > current_time, EEXPIRED_SIGNATURE); - } - - public(friend) fun set_quorum(worker: address, quorum: u64) acquires SigningStore { - let store = signing_store_mut(worker); - let signer_count = vector::length(&store.signers); - assert!(quorum > 0, EZERO_QUORUM); - assert!(quorum <= signer_count, ESIGNERS_LESS_THAN_QUORUM); - store.quorum = quorum; - } - - public(friend) fun get_quorum(worker: address): u64 acquires SigningStore { - signing_store(worker).quorum - } - - public(friend) fun set_multisig_signers( - worker: address, - multisig_signers: vector>, - ) acquires SigningStore { - assert_no_duplicates(&multisig_signers); - vector::for_each_ref(&multisig_signers, |signer| { - assert!(vector::length(signer) == PUBKEY_SIZE, EINVALID_SIGNER_LENGTH); - }); - let store = signing_store_mut(worker); - assert!(store.quorum <= vector::length(&multisig_signers), ESIGNERS_LESS_THAN_QUORUM); - store.signers = multisig_signers; - } - - public(friend) fun add_multisig_signer(worker: address, multisig_signer: vector) acquires SigningStore { - let multisig_signers = &mut signing_store_mut(worker).signers; - assert!(!vector::contains(multisig_signers, &multisig_signer), ESIGNER_ALREADY_EXISTS); - assert!(vector::length(&multisig_signer) == PUBKEY_SIZE, EINVALID_SIGNER_LENGTH); - vector::push_back(multisig_signers, multisig_signer); - } - - public(friend) fun remove_multisig_signer(worker: address, multisig_signer: vector) acquires SigningStore { - let (found, index) = vector::index_of(&signing_store(worker).signers, &multisig_signer); - assert!(found, ESIGNER_NOT_FOUND); - vector::swap_remove(&mut signing_store_mut(worker).signers, index); - let store = signing_store(worker); - assert!(vector::length(&store.signers) >= store.quorum, ESIGNERS_LESS_THAN_QUORUM); - } - - public(friend) fun is_multisig_signer(worker: address, multisig_signer: vector): bool acquires SigningStore { - let multisig_signers = &signing_store(worker).signers; - vector::contains(multisig_signers, &multisig_signer) - } - - public(friend) fun get_multisig_signers(worker: address): vector> acquires SigningStore { - signing_store(worker).signers - } - - public(friend) fun was_hash_used(worker: address, hash: Bytes32): bool acquires SigningStore { - let dvn_used_hashes = &signing_store(worker).used_hashes; - table::contains(dvn_used_hashes, hash) - } - - public(friend) fun add_hash_to_used(worker: address, hash: Bytes32) acquires SigningStore { - let dvn_used_hashes = &mut signing_store_mut(worker).used_hashes; - table::add(dvn_used_hashes, hash, true); - } - - public(friend) fun assert_initialized(worker: address) { - assert!(exists(worker), EWORKER_MULTISIG_NOT_REGISTERED); - } - - // ==================================================== Helpers =================================================== - - inline fun signing_store(worker: address): &SigningStore { borrow_global(worker) } - - inline fun signing_store_mut(worker: address): &mut SigningStore { borrow_global_mut(worker) } - - // ================================================== Error Codes ================================================= - - const EWORKER_ALREADY_INITIALIZED: u64 = 1; - const EDVN_INCORRECT_SIGNATURE: u64 = 2; - const EWORKER_MULTISIG_NOT_REGISTERED: u64 = 3; - const EDVN_DUPLICATE_PK: u64 = 4; - const EDVN_LESS_THAN_QUORUM: u64 = 5; - const EINVALID_SIGNATURE_LENGTH: u64 = 6; - const EEXPIRED_SIGNATURE: u64 = 7; - const EHASH_ALREADY_USED: u64 = 8; - const ESIGNERS_LESS_THAN_QUORUM: u64 = 9; - const ESIGNER_NOT_FOUND: u64 = 10; - const ESIGNER_ALREADY_EXISTS: u64 = 11; - const EINVALID_SIGNER_LENGTH: u64 = 12; - const EZERO_QUORUM: u64 = 13; -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/worker_common/worker_config.move b/examples/oft-movement/build/oft/sources/dependencies/worker_common/worker_config.move deleted file mode 100644 index e797e0d28..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/worker_common/worker_config.move +++ /dev/null @@ -1,753 +0,0 @@ -/// Worker Config is a shared module that provides configuration for workers -module worker_common::worker_config { - use std::account; - use std::event::emit; - use std::fungible_asset::{Self, Metadata}; - use std::math128::pow; - use std::object::address_to_object; - - use endpoint_v2_common::contract_identity::{ - CallRef, - get_call_ref_caller, - }; - use worker_common::worker_config_store; - - #[test_only] - use std::account::create_signer_for_test; - - #[test_only] - friend worker_common::worker_config_tests; - - // Worker Ids - public inline fun WORKER_ID_EXECUTOR(): u8 { 1 } - - public inline fun WORKER_ID_DVN(): u8 { 2 } - - // ================================================ Initialization ================================================ - - #[test_only] - /// Initialize the worker for testing purposes (does not require a signer, and accepts fewer params) - public fun initialize_for_worker_test_only( - worker: address, - worker_id: u8, - deposit_address: address, - role_admin: address, - admins: vector
, - supported_msglibs: vector
, - fee_lib: address, - ) { - let account = &create_signer_for_test(worker); - worker_config_store::initialize_store_for_worker( - account, - worker_id, - deposit_address, - role_admin, - admins, - supported_msglibs, - fee_lib, - ); - } - - /// Initialize the worker - this must be called an can be called most once - public fun initialize_for_worker( - account: &signer, - worker_id: u8, - deposit_address: address, - role_admin: address, - admins: vector
, - supported_msglibs: vector
, - fee_lib: address, - ) { - assert!(account::exists_at(deposit_address), ENOT_AN_ACCOUNT); - worker_config_store::initialize_store_for_worker( - account, - worker_id, - deposit_address, - role_admin, - admins, - supported_msglibs, - fee_lib, - ); - } - - #[view] - // Check whether the worker is initialized - public fun is_worker_initialized(worker: address): bool { - worker_config_store::is_worker_initialized(worker) - } - - /// Assert that the fee lib supports a transaction - /// This checks that the worker is initialized, unpaused, the sender is allowed, that the msglib is supported, and - /// that the worker id matches the expected worker id - public fun assert_fee_lib_supports_transaction(worker: address, worker_id: u8, sender: address, msglib: address) { - worker_config_store::assert_initialized(worker); - assert_worker_unpaused(worker); - assert_allowed(worker, sender); - assert_supported_msglib(worker, msglib); - assert!(worker_config_store::get_worker_id(worker) == worker_id, EUNEXPECTED_WORKER_ID); - } - - #[view] - /// Get the worker id for the given worker address - public fun get_worker_id_from_worker_address(worker: address): u8 { - worker_config_store::assert_initialized(worker); - worker_config_store::get_worker_id(worker) - } - - #[view] - /// Get the worker's price feed and feed address - public fun get_worker_price_feed_config(worker: address): (address, address) { - worker_config_store::assert_initialized(worker); - worker_config_store::get_price_feed(worker) - } - - // ==================================================== Admins ==================================================== - - struct WorkerAdminsTarget {} - - /// Set the admin status for the given address using the worker's CallRef - public fun set_worker_admin( - call_ref: &CallRef, - admin: address, - active: bool, - ) { - let worker = get_call_ref_caller(call_ref); - worker_config_store::assert_initialized(worker); - if (active) { - worker_config_store::add_admin(worker, admin); - } else { - worker_config_store::remove_admin(worker, admin); - }; - emit(SetWorkerAdmin { worker, admin, active }); - } - - #[view] - /// Check if the given address is an admin for the worker - public fun is_worker_admin(worker: address, admin: address): bool { - worker_config_store::assert_initialized(worker); - worker_config_store::is_admin(worker, admin) - } - - #[view] - /// Get a list of the worker's admins - public fun get_worker_admins(worker: address): vector
{ - worker_config_store::assert_initialized(worker); - worker_config_store::get_admins(worker) - } - - /// Assert that the given address is an admin for the worker - public fun assert_worker_admin(worker: address, admin: address) { - worker_config_store::assert_initialized(worker); - assert!(worker_config_store::is_admin(worker, admin), EUNAUTHORIZED); - } - - /// Set a role admin for the worker using the worker's CallRef - public fun set_worker_role_admin( - call_ref: &CallRef, - role_admin: address, - active: bool, - ) { - let worker = get_call_ref_caller(call_ref); - worker_config_store::assert_initialized(worker); - if (active) { - worker_config_store::add_role_admin(worker, role_admin); - } else { - worker_config_store::remove_role_admin(worker, role_admin); - }; - emit(SetWorkerRoleAdmin { worker, role_admin, active }); - } - - #[view] - /// Check if the given address is a role admin for the worker - public fun is_worker_role_admin(worker: address, role_admin: address): bool { - worker_config_store::assert_initialized(worker); - worker_config_store::is_role_admin(worker, role_admin) - } - - #[view] - /// Get a list of the role admins for the worker - public fun get_worker_role_admins(worker: address): vector
{ - worker_config_store::assert_initialized(worker); - worker_config_store::get_role_admins(worker) - } - - /// Assert that the given address is a role admin for the worker - public fun assert_worker_role_admin(worker: address, role_admin: address) { - worker_config_store::assert_initialized(worker); - assert!(worker_config_store::is_role_admin(worker, role_admin), EUNAUTHORIZED); - } - - // ==================================================== Pausing =================================================== - - struct WorkerPauseTarget {} - - /// Pauses the worker on the send side - will cause get_fee() functions to abort - public fun set_worker_pause( - call_ref: &CallRef, - paused: bool, - ) { - let worker = get_call_ref_caller(call_ref); - let previous_status = worker_config_store::is_paused(worker); - assert!(previous_status != paused, EPAUSE_STATUS_UNCHANGED); - worker_config_store::set_pause_status(worker, paused); - if (paused) { - emit(Paused { worker }); - } else { - emit(Unpaused { worker }); - } - } - - /// Assert that the worker is not paused - public fun assert_worker_unpaused(worker: address) { - assert!(!is_worker_paused(worker), EWORKER_PAUSED); - } - - #[view] - /// Check if the worker is paused - public fun is_worker_paused(worker: address): bool { - worker_config_store::assert_initialized(worker); - worker_config_store::is_paused(worker) - } - - - // =============================================== Message Libraries ============================================== - - struct WorkerMsgLibsTarget {} - - /// Set the supported message libraries for the worker - public fun set_supported_msglibs( - call_ref: &CallRef, - msglibs: vector
, - ) { - let worker = get_call_ref_caller(call_ref); - worker_config_store::set_supported_msglibs(worker, msglibs); - emit(SetSupportedMsglibs { worker, msglibs }); - } - - #[view] - /// Get the supported message libraries for the worker - public fun get_supported_msglibs(worker: address): vector
{ - worker_config_store::assert_initialized(worker); - worker_config_store::get_supported_msglibs(worker) - } - - /// Assert that the worker supports the given message library - public fun assert_supported_msglib(worker: address, msglib: address) { - assert!( - worker_config_store::is_supported_msglib(worker, msglib), - EWORKER_AUTH_UNSUPPORTED_MSGLIB, - ); - } - - // ================================================ Deposit Address =============================================== - - struct WorkerDepositAddressTarget {} - - /// Set the deposit address for the worker - public fun set_deposit_address(call_ref: &CallRef, deposit_address: address) { - let worker = get_call_ref_caller(call_ref); - assert!(account::exists_at(deposit_address), ENOT_AN_ACCOUNT); - worker_config_store::set_deposit_address(worker, deposit_address); - emit(SetDepositAddress { worker, deposit_address }); - } - - #[view] - /// Get the deposit address for the worker - public fun get_deposit_address(worker: address): address { - worker_config_store::assert_initialized(worker); - worker_config_store::get_deposit_address(worker) - } - - // ================================================== Price Feed ================================================== - - struct WorkerPriceFeedTarget {} - - /// Set the price feed module and price feed for the worker - public fun set_price_feed( - call_ref: &CallRef, - price_feed: address, - feed_address: address, - ) { - let worker = get_call_ref_caller(call_ref); - worker_config_store::set_price_feed(worker, price_feed, feed_address); - emit(SetPriceFeed { - worker, - price_feed, - feed_address, - }); - } - - #[view] - /// Get the effective price feed module and price feed for the worker, providing the delegated price feed details - /// if the worker has delegated the price feed; otherwise it provides what is directly configured for the worker - public fun get_effective_price_feed(worker: address): (address, address) { - worker_config_store::assert_initialized(worker); - if (worker_config_store::has_price_feed_delegate(worker)) { - let delegate = worker_config_store::get_price_feed_delegate(worker); - assert!(worker_config_store::has_price_feed(delegate), EWORKER_PRICE_FEED_DELEGATE_NOT_CONFIGURED); - worker_config_store::get_price_feed(delegate) - } else if (worker_config_store::has_price_feed(worker)) { - worker_config_store::get_price_feed(worker) - } else { - abort EWORKER_PRICE_FEED_NOT_CONFIGURED - } - } - - /// Sets a price feed delegate for the worker. This is another worker's address that has a price feed configured. - /// If the delegate is set to @0x0, the delegate is unset. When a worker has delegated to another worker, it will - /// use whatever is configured for the delegate worker when a fee is calculated - public fun set_price_feed_delegate(call_ref: &CallRef, delegate: address) { - let worker = get_call_ref_caller(call_ref); - if (delegate == @0x0) { - // Unset - assert!(worker_config_store::has_price_feed_delegate(worker), ENO_DELEGATE_TO_UNSET); - worker_config_store::unset_price_feed_delegate(worker); - } else { - // Set - worker_config_store::assert_initialized(delegate); - let (price_feed, feed_address) = worker_config_store::get_price_feed(delegate); - assert!(price_feed != @0x0, EDELEGATE_PRICE_FEED_NOT_CONFIGURED); - assert!(feed_address != @0x0, EDELEGATE_FEED_ADDRESS_NOT_CONFIGURED); - worker_config_store::set_price_feed_delegate(worker, delegate); - }; - emit(SetPriceFeedDelegate { worker, delegate }); - } - - #[view] - /// Get the price feed delegate for the worker - /// This will return @0x0 if the worker does not have a price feed delegate - public fun get_price_feed_delegate(worker: address): address { - worker_config_store::assert_initialized(worker); - if (!worker_config_store::has_price_feed_delegate(worker)) { - @0x0 - } else { - worker_config_store::get_price_feed_delegate(worker) - } - } - - #[view] - /// Get the count of other workers delegating to a worker for the price feed configuration - public fun get_count_price_feed_delegate_dependents(worker: address): u64 { - worker_config_store::get_count_price_feed_delegate_dependents(worker) - } - - // ============================================ Fee Libs Worker Config ============================================ - - struct WorkerFeeLibTarget {} - - /// Set the fee lib used for the worker - public fun set_worker_fee_lib(call_ref: &CallRef, fee_lib: address) { - let worker = get_call_ref_caller(call_ref); - worker_config_store::set_fee_lib(worker, fee_lib); - emit(WorkerFeeLibUpdated { worker, fee_lib }); - } - - #[view] - /// Get the fee lib for the worker - public fun get_worker_fee_lib(worker: address): address { - worker_config_store::assert_initialized(worker); - worker_config_store::get_fee_lib(worker) - } - - /// Set the default basis-points multiplier (for premium calculation) for the worker - public fun set_default_multiplier_bps(call_ref: &CallRef, default_multiplier_bps: u16) { - let worker = get_call_ref_caller(call_ref); - worker_config_store::assert_initialized(worker); - worker_config_store::set_default_multiplier_bps(worker, default_multiplier_bps); - emit(SetMultiplierBps { worker, default_multiplier_bps }); - } - - #[view] - /// Get the default basis-points multiplier for the worker - public fun get_default_multiplier_bps(worker: address): u16 { - worker_config_store::assert_initialized(worker); - worker_config_store::get_default_multiplier_bps(worker) - } - - /// Set the supported option types for the worker - public fun set_supported_option_types(call_ref: &CallRef, option_types: vector) { - let worker = get_call_ref_caller(call_ref); - worker_config_store::assert_initialized(worker); - worker_config_store::set_supported_option_types(worker, option_types); - emit(SetSupportedOptionTypes { worker, option_types }); - } - - #[view] - /// Get the supported option types for the worker - public fun get_supported_option_types(worker: address): vector { - worker_config_store::assert_initialized(worker); - worker_config_store::get_supported_option_types(worker) - } - - #[view] - /// Get the native decimals rate for the gas token on this chain - public fun get_native_decimals_rate(): u128 { - let decimals = fungible_asset::decimals(address_to_object(@native_token_metadata_address)); - pow(10, (decimals as u128)) - } - - // ================================================ Executor Config =============================================== - - struct WorkerExecutorTarget {} - - /// Set the executor destination config for the worker - /// @param call_ref The CallRef for the worker (should be addressed to @worker_common) - /// @param dst_eid The destination EID - /// @param lz_receive_base_gas The base gas for receiving a message - /// @param multiplier_bps The multiplier in basis points - /// @param floor_margin_usd The floor margin in USD - /// @param native_cap The native cap - /// @param lz_compose_base_gas The base gas for composing a message - public fun set_executor_dst_config( - call_ref: &CallRef, - dst_eid: u32, - lz_receive_base_gas: u64, - multiplier_bps: u16, - floor_margin_usd: u128, - native_cap: u128, - lz_compose_base_gas: u64, - ) { - let worker = get_call_ref_caller(call_ref); - worker_config_store::assert_initialized(worker); - worker_config_store::set_executor_dst_config( - worker, - dst_eid, - lz_receive_base_gas, - multiplier_bps, - floor_margin_usd, - native_cap, - lz_compose_base_gas, - ); - emit(SetExecutorDstConfig { - worker, - dst_eid, - lz_receive_base_gas, - multiplier_bps, - floor_margin_usd, - native_cap, - lz_compose_base_gas, - }); - } - - #[view] - /// Get the executor destination config for the worker - /// @return (lz_receive_base_gas, multiplier_bps, floor_margin_usd, native_cap, lz_compose_base_gas) - public fun get_executor_dst_config_values( - worker: address, - dst_eid: u32, - ): (u64, u16, u128, u128, u64) { - worker_config_store::assert_initialized(worker); - worker_config_store::get_executor_dst_config_values(worker, dst_eid) - } - - // ================================================== DVN Config ================================================== - - struct WorkerDvnTarget {} - - /// Set the DVN destination config for the worker - /// @param call_ref The CallRef for the worker (should be addressed to @worker_common) - /// @param dst_eid The destination EID - /// @param gas The gas - /// @param multiplier_bps The multiplier in basis points - /// @param floor_margin_usd The floor margin in USD - public fun set_dvn_dst_config( - call_ref: &CallRef, - dst_eid: u32, - gas: u64, - multiplier_bps: u16, - floor_margin_usd: u128, - ) { - let worker = get_call_ref_caller(call_ref); - worker_config_store::assert_initialized(worker); - worker_config_store::set_dvn_dst_config( - worker, - dst_eid, - gas, - multiplier_bps, - floor_margin_usd, - ); - emit(SetDvnDstConfig { - worker, - dst_eid, - gas, - multiplier_bps, - floor_margin_usd, - }); - } - - #[view] - /// Get the DVN destination config for the worker and destination EID - /// @return (gas, multiplier_bps, floor_margin_usd) - public fun get_dvn_dst_config_values( - worker: address, - dst_eid: u32, - ): (u64, u16, u128) { - worker_config_store::assert_initialized(worker); - worker_config_store::get_dvn_dst_config_values(worker, dst_eid) - } - - // ====================================================== ACL ===================================================== - - struct WorkerAclTarget {} - - /// Add or remove a sender from the worker allowlist - /// If the allowlist is empty, any sender, except those on the denylist, are allowed - /// Once there is at least one sender on the allowlist, only those on the allowlist are allowed, minus any that are - /// also on the denylist - public fun set_allowlist( - call_ref: &CallRef, - sender: address, - allowed: bool, - ) { - let worker = get_call_ref_caller(call_ref); - if (allowed) { - worker_config_store::add_to_allowlist(worker, sender); - } else { - worker_config_store::remove_from_allowlist(worker, sender); - }; - emit(SetAllowList { worker, sender, allowed }); - } - - /// Add or remove a sender from the worker denylist - /// Any sender on the denylist will not be allowed, regardless of whether they are also on the allowlist - public fun set_denylist(call_ref: &CallRef, sender: address, denied: bool) { - let worker = get_call_ref_caller(call_ref); - if (denied) { - worker_config_store::add_to_denylist(worker, sender); - } else { - worker_config_store::remove_from_denylist(worker, sender); - }; - emit(SetDenyList { worker, sender, denied }); - } - - #[view] - /// Check if a sender is allowed to use the worker based on the allowlist and denylist configuration - public fun is_allowed(worker: address, sender: address): bool { - if (worker_config_store::is_on_denylist(worker, sender)) { - false - } else if (worker_config_store::is_on_allowlist(worker, sender)) { - true - } else { - // if there is no allow list, an unlisted sender is allowed, otherwise they must be on the allow list - !worker_config_store::has_allowlist(worker) - } - } - - #[view] - /// Check if a sender is on the worker allowlist - public fun allowlist_contains(worker: address, sender: address): bool { - worker_config_store::is_on_allowlist(worker, sender) - } - - #[view] - /// Check if a sender is on the worker denylist - public fun denylist_contains(worker: address, sender: address): bool { - worker_config_store::is_on_denylist(worker, sender) - } - - /// Assert that the sender is allowed to use the worker - public fun assert_allowed(worker: address, sender: address) { - assert!(is_allowed(worker, sender), ESENDER_DENIED); - } - - // ==================================================== Events ==================================================== - - #[event] - /// Event emitted when the worker admin status is set - struct SetWorkerAdmin has store, drop { worker: address, admin: address, active: bool } - - #[event] - /// Event emitted when the worker role admin status is set - struct SetWorkerRoleAdmin has store, drop { worker: address, role_admin: address, active: bool } - - #[event] - /// Event emitted when the worker deposit address is set - struct SetDepositAddress has store, drop { worker: address, deposit_address: address } - - #[event] - /// Event emitted when the worker is paused - struct Paused has store, drop { worker: address } - - #[event] - /// Event emitted when the worker is unpaused - struct Unpaused has store, drop { worker: address } - - #[event] - /// Event emitted when the worker supported message libraries are set - struct SetSupportedMsglibs has store, drop { worker: address, msglibs: vector
} - - #[event] - /// Event emitted when the worker price feed is set - struct SetPriceFeed has store, drop { worker: address, price_feed: address, feed_address: address } - - #[event] - /// Event emitted when the worker price feed delegate is set - struct SetPriceFeedDelegate has store, drop { worker: address, delegate: address } - - #[event] - /// Event emitted when the worker default multiplier is set - struct SetMultiplierBps has store, drop { worker: address, default_multiplier_bps: u16 } - - #[event] - /// Event emitted when the worker supported option types are set - struct SetSupportedOptionTypes has store, drop { worker: address, option_types: vector } - - #[event] - /// Event emitted when the worker executor destination config is set - struct SetExecutorDstConfig has store, drop { - worker: address, - dst_eid: u32, - lz_receive_base_gas: u64, - multiplier_bps: u16, - floor_margin_usd: u128, - native_cap: u128, - lz_compose_base_gas: u64, - } - - #[event] - /// Event emitted when the worker DVN destination config is set - struct SetDvnDstConfig has store, drop { - worker: address, - dst_eid: u32, - gas: u64, - multiplier_bps: u16, - floor_margin_usd: u128, - } - - #[event] - /// Event emitted when worker adds/removes an oapp sender to allowlist - /// allowed = false means the sender is removed from the allowlist - struct SetAllowList has store, drop { worker: address, sender: address, allowed: bool } - - #[event] - /// Event emitted when the worker DVN destination config is set - /// denied = false means the sender is removed from the denylist - struct SetDenyList has store, drop { worker: address, sender: address, denied: bool } - - #[event] - /// Event emitted when the worker fee lib is set - struct WorkerFeeLibUpdated has store, drop { worker: address, fee_lib: address } - - // ============================================== Event Test Helpers ============================================== - - #[test_only] - /// Generate a SetWorkerAdmin event for testing - public fun set_worker_admin_event(worker: address, admin: address, active: bool): SetWorkerAdmin { - SetWorkerAdmin { worker, admin, active } - } - - #[test_only] - /// Generate a SetWorkerRoleAdmin event for testing - public fun set_worker_role_admin_event(worker: address, role_admin: address, active: bool): SetWorkerRoleAdmin { - SetWorkerRoleAdmin { worker, role_admin, active } - } - - #[test_only] - /// Generate a SetDepositAddress event for testing - public fun set_deposit_address_event(worker: address, deposit_address: address): SetDepositAddress { - SetDepositAddress { worker, deposit_address } - } - - #[test_only] - /// Generate a Paused event for testing - public fun paused_event(worker: address): Paused { - Paused { worker } - } - - #[test_only] - /// Generate a Unpaused event for testing - public fun unpaused_event(worker: address): Unpaused { - Unpaused { worker } - } - - #[test_only] - /// Generate a SetSupportedMsglibs event for testing - public fun set_supported_msglibs_event(worker: address, msglibs: vector
): SetSupportedMsglibs { - SetSupportedMsglibs { worker, msglibs } - } - - #[test_only] - /// Generate a SetPriceFeed event for testing - public fun set_price_feed_event(worker: address, price_feed: address, feed_address: address): SetPriceFeed { - SetPriceFeed { worker, price_feed, feed_address } - } - - #[test_only] - /// Generate a SetPriceFeedDelegate event for testing - public fun set_price_feed_delegate_event(worker: address, delegate: address): SetPriceFeedDelegate { - SetPriceFeedDelegate { worker, delegate } - } - - #[test_only] - /// Generate a SetMultiplierBps event for testing - public fun set_multiplier_bps_event(worker: address, default_multiplier_bps: u16): SetMultiplierBps { - SetMultiplierBps { worker, default_multiplier_bps } - } - - #[test_only] - /// Generate a SetSupportedOptionTypes event for testing - public fun set_supported_option_types_event(worker: address, option_types: vector): SetSupportedOptionTypes { - SetSupportedOptionTypes { worker, option_types } - } - - #[test_only] - /// Generate a SetExecutorDstConfig event for testing - public fun set_executor_dst_config_event( - worker: address, - dst_eid: u32, - lz_receive_base_gas: u64, - multiplier_bps: u16, - floor_margin_usd: u128, - native_cap: u128, - lz_compose_base_gas: u64, - ): SetExecutorDstConfig { - SetExecutorDstConfig { - worker, - dst_eid, - lz_receive_base_gas, - multiplier_bps, - floor_margin_usd, - native_cap, - lz_compose_base_gas, - } - } - - #[test_only] - /// Generate a SetDvnDstConfig event for testing - public fun set_dvn_dst_config_event( - worker: address, - dst_eid: u32, - gas: u64, - multiplier_bps: u16, - floor_margin_usd: u128, - ): SetDvnDstConfig { - SetDvnDstConfig { - worker, - dst_eid, - gas, - multiplier_bps, - floor_margin_usd, - } - } - - #[test_only] - /// Generate a WorkerFeeLibUpdated event for testing - public fun worker_fee_lib_updated_event(worker: address, fee_lib: address): WorkerFeeLibUpdated { - WorkerFeeLibUpdated { worker, fee_lib } - } - - // ================================================== Error Codes ================================================= - - const EDELEGATE_FEED_ADDRESS_NOT_CONFIGURED: u64 = 1; - const EDELEGATE_PRICE_FEED_NOT_CONFIGURED: u64 = 2; - const ENOT_AN_ACCOUNT: u64 = 3; - const ENO_DELEGATE_TO_UNSET: u64 = 4; - const EPAUSE_STATUS_UNCHANGED: u64 = 5; - const ESENDER_DENIED: u64 = 6; - const EUNAUTHORIZED: u64 = 7; - const EUNEXPECTED_WORKER_ID: u64 = 8; - const EWORKER_AUTH_UNSUPPORTED_MSGLIB: u64 = 9; - const EWORKER_PAUSED: u64 = 10; - const EWORKER_PRICE_FEED_DELEGATE_NOT_CONFIGURED: u64 = 11; - const EWORKER_PRICE_FEED_NOT_CONFIGURED: u64 = 12; -} diff --git a/examples/oft-movement/build/oft/sources/dependencies/worker_common/worker_config_store.move b/examples/oft-movement/build/oft/sources/dependencies/worker_common/worker_config_store.move deleted file mode 100644 index 99bbef7ea..000000000 --- a/examples/oft-movement/build/oft/sources/dependencies/worker_common/worker_config_store.move +++ /dev/null @@ -1,406 +0,0 @@ -module worker_common::worker_config_store { - use std::option::{Self, Option}; - use std::signer::address_of; - use std::table::{Self, Table}; - use std::vector; - - friend worker_common::worker_config; - - #[test_only] - friend worker_common::worker_config_store_tests; - - struct WorkerStore has key { - // The worker ID (either Executor: 1 or DVN: 2) - worker_id: u8, - // The feelib that should be used for this worker - fee_lib: address, - // The admins of this worker - admins: vector
, - // The role admins of this worker - role admins can add/remove admins and other role admins - role_admins: vector
, - // The supported message libraries for this worker - supported_msglibs: vector
, - // The allowlist of senders - if not empty, no senders not on allowlist will be allowed - allowlist: Table, - // The denylist of senders - senders on the denylist will not be allowed - denylist: Table, - // The number of items on the allowlist. This is needed to check whether the allowlist is empty - allowlist_count: u64, - // Whether the worker has been paused. If the worker is paused, any send transaction that involves this worker - // will fail - paused: bool, - // The optional price feed module and feed selection for this worker - price_feed_selection: Option, - // The optional price feed delegate selection for this worker - price_feed_delegate_selection: Option
, - // The number of workers delegating to this worker for price feed selection - count_price_feed_delegating_workers: u64, - // The deposit address for this worker: worker payments will be sent to this address - deposit_address: address, - // The default multiplier bps that will be used to calculate premiums for this worker - default_multiplier_bps: u16, - // The serialized supported option types for this worker - supported_option_types: vector, - // Per destination EID configuration (for executors only) - executor_dst_config: Table, - // Per destination EID configuration (for DVNs only) - dvn_dst_config: Table, - } - - struct PriceFeedSelection has drop, copy, store { - price_feed_module: address, - price_feed: address, - } - - struct ExecutorDstConfig has store, copy, drop { - lz_receive_base_gas: u64, - multiplier_bps: u16, - floor_margin_usd: u128, - native_cap: u128, - lz_compose_base_gas: u64, - } - - struct DvnDstConfig has store, copy, drop { - gas: u64, - multiplier_bps: u16, - floor_margin_usd: u128, - } - - public(friend) fun initialize_store_for_worker( - worker_account: &signer, - worker_id: u8, - deposit_address: address, - role_admin: address, - admins: vector
, - supported_msglibs: vector
, - fee_lib: address, - ) { - let worker_address = address_of(worker_account); - assert!(!exists(worker_address), EWORKER_ALREADY_INITIALIZED); - assert!(vector::length(&admins) > 0, ENO_ADMINS_PROVIDED); - move_to(move worker_account, WorkerStore { - worker_id, - fee_lib, - role_admins: vector[role_admin], - admins, - supported_msglibs, - allowlist: table::new(), - denylist: table::new(), - allowlist_count: 0, - paused: false, - price_feed_selection: option::none(), - price_feed_delegate_selection: option::none(), - count_price_feed_delegating_workers: 0, - deposit_address, - default_multiplier_bps: 0, - supported_option_types: vector[], - executor_dst_config: table::new(), - dvn_dst_config: table::new(), - }) - } - - public(friend) fun assert_initialized(worker: address) { - assert!(exists(worker), EWORKER_NOT_REGISTERED); - } - - public(friend) fun is_worker_initialized(worker: address): bool { - exists(worker) - } - - public(friend) fun get_worker_id(worker: address): u8 acquires WorkerStore { - worker_store(worker).worker_id - } - - // ================================================ Worker General ================================================ - - public(friend) fun set_supported_msglibs(worker: address, msglibs: vector
) acquires WorkerStore { - worker_store_mut(worker).supported_msglibs = msglibs; - } - - public(friend) fun get_supported_msglibs(worker: address): vector
acquires WorkerStore { - worker_store(worker).supported_msglibs - } - - public(friend) fun is_supported_msglib(worker: address, msglib: address): bool acquires WorkerStore { - vector::contains(&worker_store(worker).supported_msglibs, &msglib) - } - - public(friend) fun set_fee_lib(worker: address, fee_lib: address) acquires WorkerStore { - worker_store_mut(worker).fee_lib = fee_lib; - } - - public(friend) fun get_fee_lib(worker: address): address acquires WorkerStore { - worker_store(worker).fee_lib - } - - public(friend) fun set_pause_status(worker: address, paused: bool) acquires WorkerStore { - worker_store_mut(worker).paused = paused; - } - - public(friend) fun is_paused(worker: address): bool acquires WorkerStore { - worker_store(worker).paused - } - - public(friend) fun set_deposit_address(worker: address, deposit_address: address) acquires WorkerStore { - worker_store_mut(worker).deposit_address = deposit_address; - } - - public(friend) fun get_deposit_address(worker: address): address acquires WorkerStore { - worker_store(worker).deposit_address - } - - public(friend) fun set_default_multiplier_bps(worker: address, default_multiplier_bps: u16) acquires WorkerStore { - worker_store_mut(worker).default_multiplier_bps = default_multiplier_bps; - } - - public(friend) fun get_default_multiplier_bps(worker: address): u16 acquires WorkerStore { - worker_store(worker).default_multiplier_bps - } - - public(friend) fun set_supported_option_types(worker: address, option_types: vector) acquires WorkerStore { - worker_store_mut(worker).supported_option_types = option_types; - } - - public(friend) fun get_supported_option_types(worker: address): vector acquires WorkerStore { - worker_store(worker).supported_option_types - } - - // =================================================== Executor =================================================== - - public(friend) fun set_executor_dst_config( - worker: address, - dst_eid: u32, - lz_receive_base_gas: u64, - multiplier_bps: u16, - floor_margin_usd: u128, - native_cap: u128, - lz_compose_base_gas: u64, - ) acquires WorkerStore { - let executor_dst_config = &mut worker_store_mut(worker).executor_dst_config; - table::upsert(executor_dst_config, dst_eid, ExecutorDstConfig { - lz_receive_base_gas, - multiplier_bps, - floor_margin_usd, - native_cap, - lz_compose_base_gas, - }); - } - - public(friend) fun get_executor_dst_config_values( - worker: address, - dst_eid: u32, - ): (u64, u16, u128, u128, u64) acquires WorkerStore { - let config_store = &worker_store(worker).executor_dst_config; - assert!(table::contains(config_store, dst_eid), EEXECUTOR_DST_EID_NOT_CONFIGURED); - let executor_dst_config = table::borrow(config_store, dst_eid); - ( - executor_dst_config.lz_receive_base_gas, - executor_dst_config.multiplier_bps, - executor_dst_config.floor_margin_usd, - executor_dst_config.native_cap, - executor_dst_config.lz_compose_base_gas, - ) - } - - // ====================================================== DVN ===================================================== - - public(friend) fun set_dvn_dst_config( - worker: address, - dst_eid: u32, - gas: u64, - multiplier_bps: u16, - floor_margin_usd: u128, - ) acquires WorkerStore { - let dvn_dst_config = &mut worker_store_mut(worker).dvn_dst_config; - table::upsert(dvn_dst_config, dst_eid, DvnDstConfig { gas, multiplier_bps, floor_margin_usd }); - } - - public(friend) fun get_dvn_dst_config_values( - worker: address, - dst_eid: u32, - ): (u64, u16, u128) acquires WorkerStore { - let config_store = &worker_store(worker).dvn_dst_config; - assert!(table::contains(config_store, dst_eid), EDVN_DST_EID_NOT_CONFIGURED); - let dvn_dst_config = table::borrow(&worker_store(worker).dvn_dst_config, dst_eid); - (dvn_dst_config.gas, dvn_dst_config.multiplier_bps, dvn_dst_config.floor_margin_usd) - } - - // ================================================== Price Feed ================================================== - - public(friend) fun set_price_feed( - worker: address, - price_feed_module: address, - price_feed: address, - ) acquires WorkerStore { - worker_store_mut(worker).price_feed_selection = option::some(PriceFeedSelection { - price_feed_module, - price_feed, - }); - } - - public(friend) fun has_price_feed(worker: address): bool acquires WorkerStore { - option::is_some(&worker_store(worker).price_feed_selection) - } - - public(friend) fun get_price_feed(worker: address): (address, address) acquires WorkerStore { - let price_feed_selection = &worker_store(worker).price_feed_selection; - assert!(option::is_some(price_feed_selection), ENO_PRICE_FEED_CONFIGURED); - let selection = option::borrow(price_feed_selection); - (selection.price_feed_module, selection.price_feed) - } - - public(friend) fun set_price_feed_delegate(worker: address, delegate: address) acquires WorkerStore { - let price_feed_delegate_selection = &mut worker_store_mut(worker).price_feed_delegate_selection; - let prior_delegate = *price_feed_delegate_selection; - - assert!(option::is_none(&prior_delegate) || *option::borrow(&prior_delegate) != delegate, EUNCHANGED); - *price_feed_delegate_selection = option::some(delegate); - - // subtract from prior delegate's count if it exists - if (option::is_some(&prior_delegate)) { - let prior = *option::borrow(&prior_delegate); - let count_delegating = &mut worker_store_mut(prior).count_price_feed_delegating_workers; - *count_delegating = *count_delegating - 1; - }; - - // add to new delegate's count - let count_delegating = &mut worker_store_mut(delegate).count_price_feed_delegating_workers; - *count_delegating = *count_delegating + 1; - } - - public(friend) fun unset_price_feed_delegate(worker: address) acquires WorkerStore { - let price_feed_delegate_selection = &mut worker_store_mut(worker).price_feed_delegate_selection; - assert!(option::is_some(price_feed_delegate_selection), ENOT_DELEGATING); - - let prior_delegate = *option::borrow(price_feed_delegate_selection); - *price_feed_delegate_selection = option::none(); - - // subtract from prior delegate's count - let count_delegating = &mut worker_store_mut(prior_delegate).count_price_feed_delegating_workers; - *count_delegating = *count_delegating - 1; - } - - public(friend) fun has_price_feed_delegate(worker: address): bool acquires WorkerStore { - option::is_some(&worker_store(worker).price_feed_delegate_selection) - } - - public(friend) fun get_price_feed_delegate(worker: address): address acquires WorkerStore { - *option::borrow(&worker_store(worker).price_feed_delegate_selection) - } - - public(friend) fun get_count_price_feed_delegate_dependents(worker: address): u64 acquires WorkerStore { - worker_store(worker).count_price_feed_delegating_workers - } - - // ==================================================== Admins ==================================================== - - public(friend) fun add_role_admin(worker: address, role_admin: address) acquires WorkerStore { - let role_admins = &mut worker_store_mut(worker).role_admins; - assert!(!vector::contains(role_admins, &role_admin), EROLE_ADMIN_ALREADY_EXISTS); - vector::push_back(role_admins, role_admin); - } - - public(friend) fun remove_role_admin(worker: address, role_admin: address) acquires WorkerStore { - let (found, index) = vector::index_of(&worker_store(worker).role_admins, &role_admin); - assert!(found, EROLE_ADMIN_NOT_FOUND); - vector::swap_remove(&mut worker_store_mut(worker).role_admins, index); - } - - public(friend) fun get_role_admins(worker: address): vector
acquires WorkerStore { - worker_store(worker).role_admins - } - - public(friend) fun is_role_admin(worker: address, role_admin: address): bool acquires WorkerStore { - vector::contains(&worker_store(worker).role_admins, &role_admin) - } - - public(friend) fun add_admin(worker: address, admin: address) acquires WorkerStore { - let admins = &mut worker_store_mut(worker).admins; - assert!(!vector::contains(admins, &admin), EADMIN_ALREADY_EXISTS); - vector::push_back(admins, admin); - } - - public(friend) fun remove_admin(worker: address, admin: address) acquires WorkerStore { - let (found, index) = vector::index_of(&worker_store(worker).admins, &admin); - assert!(found, EADMIN_NOT_FOUND); - let admins = &mut worker_store_mut(worker).admins; - vector::swap_remove(admins, index); - assert!(vector::length(admins) > 0, EATTEMPING_TO_REMOVE_ONLY_ADMIN); - } - - public(friend) fun get_admins(worker: address): vector
acquires WorkerStore { - worker_store(worker).admins - } - - public(friend) fun is_admin(worker: address, admin: address): bool acquires WorkerStore { - vector::contains(&worker_store(worker).admins, &admin) - } - - // ====================================================== ACL ===================================================== - - public(friend) fun add_to_allowlist(worker: address, sender: address) acquires WorkerStore { - let allowlist = &mut worker_store_mut(worker).allowlist; - assert!(!table::contains(allowlist, sender), EWORKER_ALREADY_ON_ALLOWLIST); - table::add(allowlist, sender, true); - let count_allowed = &mut worker_store_mut(worker).allowlist_count; - *count_allowed = *count_allowed + 1; - } - - public(friend) fun remove_from_allowlist(worker: address, sender: address) acquires WorkerStore { - let allowlist = &mut worker_store_mut(worker).allowlist; - assert!(table::contains(allowlist, sender), EWORKER_NOT_ON_ALLOWLIST); - table::remove(allowlist, sender); - let count_allowed = &mut worker_store_mut(worker).allowlist_count; - *count_allowed = *count_allowed - 1; - } - - public(friend) fun add_to_denylist(worker: address, sender: address) acquires WorkerStore { - let denylist = &mut worker_store_mut(worker).denylist; - assert!(!table::contains(denylist, sender), EWORKER_ALREADY_ON_DENYLIST); - table::add(denylist, sender, true); - } - - public(friend) fun remove_from_denylist(worker: address, sender: address) acquires WorkerStore { - let denylist = &mut worker_store_mut(worker).denylist; - assert!(table::contains(denylist, sender), EWORKER_NOT_ON_DENYLIST); - table::remove(denylist, sender); - } - - public(friend) fun is_on_allowlist(worker: address, sender: address): bool acquires WorkerStore { - table::contains(&worker_store(worker).allowlist, sender) - } - - public(friend) fun is_on_denylist(worker: address, sender: address): bool acquires WorkerStore { - table::contains(&worker_store(worker).denylist, sender) - } - - public(friend) fun has_allowlist(worker: address): bool acquires WorkerStore { - worker_store(worker).allowlist_count > 0 - } - - // ==================================================== Helpers =================================================== - - inline fun worker_store(worker: address): &WorkerStore { borrow_global(worker) } - - inline fun worker_store_mut(worker: address): &mut WorkerStore { borrow_global_mut(worker) } - - // ==================================================Error Codes ================================================== - - const EADMIN_ALREADY_EXISTS: u64 = 1; - const EADMIN_NOT_FOUND: u64 = 2; - const EATTEMPING_TO_REMOVE_ONLY_ADMIN: u64 = 3; - const EDVN_DST_EID_NOT_CONFIGURED: u64 = 4; - const EEXECUTOR_DST_EID_NOT_CONFIGURED: u64 = 5; - const ENOT_DELEGATING: u64 = 6; - const ENO_ADMINS_PROVIDED: u64 = 7; - const ENO_PRICE_FEED_CONFIGURED: u64 = 8; - const EROLE_ADMIN_ALREADY_EXISTS: u64 = 9; - const EROLE_ADMIN_NOT_FOUND: u64 = 10; - const EUNCHANGED: u64 = 11; - const EWORKER_ALREADY_INITIALIZED: u64 = 12; - const EWORKER_ALREADY_ON_ALLOWLIST: u64 = 13; - const EWORKER_ALREADY_ON_DENYLIST: u64 = 14; - const EWORKER_NOT_ON_ALLOWLIST: u64 = 15; - const EWORKER_NOT_ON_DENYLIST: u64 = 16; - const EWORKER_NOT_REGISTERED: u64 = 17; -} diff --git a/examples/oft-movement/build/oft/sources/oapp_compose.move b/examples/oft-movement/build/oft/sources/oapp_compose.move deleted file mode 100644 index c93095f2a..000000000 --- a/examples/oft-movement/build/oft/sources/oapp_compose.move +++ /dev/null @@ -1,87 +0,0 @@ -module oft::oapp_compose { - use std::fungible_asset::{Self, FungibleAsset}; - use std::object::object_address; - use std::option::{Self, Option}; - use std::string::utf8; - use std::type_info::{module_name, type_of}; - - use endpoint_v2::endpoint::{Self, get_guid_and_index_from_wrapped, wrap_guid_and_index, WrappedGuidAndIndex}; - use endpoint_v2_common::bytes32::to_bytes32; - use oft::oapp_store; - use oft::oft::lz_compose_impl; - - /// LZ Compose function for self-execution - public entry fun lz_compose( - from: address, - guid: vector, - index: u16, - message: vector, - extra_data: vector, - ) { - let guid = to_bytes32(guid); - endpoint::clear_compose(&oapp_store::call_ref(), from, wrap_guid_and_index(guid, index), message); - - lz_compose_impl( - from, - guid, - index, - message, - extra_data, - option::none(), - ) - } - - /// LZ Compose function to be called by the Executor - /// This is able to be provided a compose value in the form of a FungibleAsset - /// For self-executing with a value, this should be called with a script - public fun lz_compose_with_value( - from: address, - guid_and_index: WrappedGuidAndIndex, - message: vector, - extra_data: vector, - value: Option, - ) { - // Make sure that the value provided is of the native token type - assert!(option::is_none(&value) || is_native_token(option::borrow(&value)), EINVALID_TOKEN); - - // Unwrap the guid and index from the wrapped guid and index, this wrapping - let (guid, index) = get_guid_and_index_from_wrapped(&guid_and_index); - - endpoint::clear_compose(&oapp_store::call_ref(), from, guid_and_index, message); - - lz_compose_impl( - from, - guid, - index, - message, - extra_data, - value, - ); - } - - // ==================================================== Helper ==================================================== - - /// Checks that a token is the native token - fun is_native_token(token: &FungibleAsset): bool { - object_address(&fungible_asset::asset_metadata(token)) == @native_token_metadata_address - } - - // ================================================ Initialization ================================================ - - fun init_module(account: &signer) { - let module_name = module_name(&type_of()); - endpoint::register_composer(account, utf8(module_name)); - } - - /// Struct to dynamically derive the module name to register on the endpoint - struct LzComposeModule {} - - #[test_only] - public fun init_module_for_test() { - init_module(&std::account::create_signer_for_test(oft::oapp_store::OAPP_ADDRESS())); - } - - // ================================================== Error Codes ================================================= - - const EINVALID_TOKEN: u64 = 1; -} diff --git a/examples/oft-movement/build/oft/sources/oapp_core.move b/examples/oft-movement/build/oft/sources/oapp_core.move deleted file mode 100644 index 6bd212100..000000000 --- a/examples/oft-movement/build/oft/sources/oapp_core.move +++ /dev/null @@ -1,434 +0,0 @@ -/// This OApp Core module provides the common functionality for OApps to interact with the LayerZero Endpoint V2 module. -/// It gives the ability to send messages, set configurations, manage peers and delegates, and enforce options. -/// -/// This should generally not need to be edited by OApp developers, except to update friend declarations to reflect -/// the modules that depend on the friend functions called in this module. -module oft::oapp_core { - use std::event::emit; - use std::fungible_asset::FungibleAsset; - use std::option::{Self, Option}; - use std::primary_fungible_store; - use std::signer::address_of; - use std::string::String; - use std::vector; - - use endpoint_v2::endpoint::{Self, wrap_guid}; - use endpoint_v2::messaging_receipt::MessagingReceipt; - use endpoint_v2_common::bytes32::{Bytes32, from_bytes32, to_bytes32, ZEROS_32_BYTES}; - use endpoint_v2_common::native_token; - use endpoint_v2_common::serde; - use endpoint_v2_common::universal_config::get_zro_metadata; - use oft::oapp_store::{Self, OAPP_ADDRESS}; - - friend oft::oft; - - #[test_only] - friend oft::oapp_core_tests; - #[test_only] - friend oft::oft_core_tests; - - // ==================================================== Send =================================================== - - /// This handles sending a message to a remote OApp on the configured peer - public(friend) fun lz_send( - dst_eid: u32, - message: vector, - options: vector, - native_fee: &mut FungibleAsset, - zro_fee: &mut Option, - ): MessagingReceipt { - assert!(!oapp_store::is_sending_paused(dst_eid), ESEND_PAUSED); - - endpoint::send( - &oapp_store::call_ref(), - dst_eid, - get_peer_bytes32(dst_eid), - message, - options, - native_fee, - zro_fee, - ) - } - - #[view] - /// This provides a LayerZero quote for sending a message - public fun lz_quote( - dst_eid: u32, - message: vector, - options: vector, - pay_in_zro: bool, - ): (u64, u64) { - endpoint::quote(OAPP_ADDRESS(), dst_eid, get_peer_bytes32(dst_eid), message, options, pay_in_zro) - } - - // ==================================================== Compose =================================================== - - public(friend) fun lz_send_compose( - to: address, - index: u16, - guid: Bytes32, - message: vector, - ) { - endpoint::send_compose(&oapp_store::call_ref(), to, index, guid, message); - } - - // ================================================ Delegated Calls =============================================== - - /// Asserts that the delegated call is "authorized," either as the OApp address or the assigned delegate - /// "authorized" indicates a wallet has permission to act on behalf of the OApp in respect to endpoint calls, - /// for example, "set_send_library()" or "skip()," but this does not extend to calls that are internal to (stored - /// on) the OApp like "set_peer()," which is are "admin only" permissions - fun assert_authorized(account: address) { - assert!(account == oapp_store::get_delegate(), EUNAUTHORIZED); - } - - /// Set the OApp configuration for a Message Library - public entry fun set_config( - account: &signer, - msglib: address, - config_type: u32, - config: vector, - ) { - assert_authorized(address_of(move account)); - endpoint::set_config(&oapp_store::call_ref(), msglib, config_type, config) - } - - /// Set the Send Library for an OApp - public entry fun set_send_library( - account: &signer, - remote_eid: u32, - msglib: address, - ) { - assert_authorized(address_of(move account)); - endpoint::set_send_library(&oapp_store::call_ref(), remote_eid, msglib) - } - - /// Set the Receive Library for an OApp - public entry fun set_receive_library( - account: &signer, - remote_eid: u32, - msglib: address, - grace_period: u64, - ) { - assert_authorized(address_of(move account)); - endpoint::set_receive_library(&oapp_store::call_ref(), remote_eid, msglib, grace_period) - } - - /// Update the Receive Library Expiry for an OApp - public entry fun set_receive_library_timeout( - account: &signer, - remote_eid: u32, - msglib: address, - expiry: u64, - ) { - assert_authorized(address_of(move account)); - endpoint::set_receive_library_timeout(&oapp_store::call_ref(), remote_eid, msglib, expiry) - } - - /// Register a Receive Pathway for an OApp - public entry fun register_receive_pathway( - account: &signer, - src_eid: u32, - src_oapp: vector, - ) { - assert_authorized(address_of(move account)); - endpoint::register_receive_pathway(&oapp_store::call_ref(), src_eid, to_bytes32(src_oapp)) - } - - /// Clear an OApp message - public entry fun clear( - account: &signer, - src_eid: u32, - sender: vector, - nonce: u64, - guid: vector, - message: vector, - ) { - assert_authorized(address_of(move account)); - endpoint::clear( - &oapp_store::call_ref(), - src_eid, - to_bytes32(sender), - nonce, - wrap_guid(to_bytes32(guid)), - message, - ) - } - - /// Skip an OApp message - public entry fun skip( - account: &signer, - src_eid: u32, - sender: vector, - nonce: u64, - ) { - assert_authorized(address_of(move account)); - endpoint::skip(&oapp_store::call_ref(), src_eid, to_bytes32(sender), nonce) - } - - /// Burn an OApp message - public entry fun burn( - account: &signer, - src_eid: u32, - sender: vector, - nonce: u64, - payload_hash: vector, - ) { - assert_authorized(address_of(move account)); - endpoint::burn(&oapp_store::call_ref(), src_eid, to_bytes32(sender), nonce, to_bytes32(payload_hash)) - } - - /// Nilify an OApp message - public entry fun nilify( - account: &signer, - src_eid: u32, - sender: vector, - nonce: u64, - payload_hash: vector, - ) { - assert_authorized(address_of(move account)); - endpoint::nilify(&oapp_store::call_ref(), src_eid, to_bytes32(sender), nonce, to_bytes32(payload_hash)) - } - - // =============================================== Enforced Options =============================================== - - #[view] - public fun get_enforced_options(eid: u32, msg_type: u16): vector { - oapp_store::get_enforced_options(eid, msg_type) - } - - public entry fun set_enforced_options( - account: &signer, - eid: u32, - msg_type: u16, - enforced_options: vector, - ) { - assert_admin(address_of(move account)); - assert_options_type_3(enforced_options); - oapp_store::set_enforced_options(eid, msg_type, enforced_options); - emit(EnforcedOptionSet { eid, msg_type, enforced_options }); - } - - #[view] - public fun combine_options(eid: u32, msg_type: u16, extra_options: vector): vector { - let enforced_options = oapp_store::get_enforced_options(eid, msg_type); - if (vector::is_empty(&enforced_options)) { return extra_options }; - if (vector::is_empty(&extra_options)) { return enforced_options }; - assert_options_type_3(extra_options); - vector::append(&mut enforced_options, serde::extract_bytes_until_end(&extra_options, &mut 2)); - enforced_options - } - - // ===================================================== Admin ==================================================== - - #[view] - /// Gets the admin address - public fun get_admin(): address { - oapp_store::get_admin() - } - - /// Change the admin of the OApp to another account - public entry fun transfer_admin(account: &signer, new_admin: address) { - let admin = address_of(move account); - assert_admin(admin); - assert!(std::account::exists_at(new_admin), EINVALID_ACCOUNT); - oapp_store::set_admin(new_admin); - emit(AdminTransferred { admin: new_admin }); - } - - /// Permanently renounce OApp admin rights. Once this is called the admin cannot be reinstated - public entry fun renounce_admin(account: &signer) { - let admin = address_of(move account); - assert_admin(admin); - oapp_store::set_admin(@0x0); - emit(AdminTransferred { admin: @0x0 }); - } - - /// Asserts that a user address is the OApp admin. This admin can make any configuration change that directly lives - /// on the OApp (like setting the peer), but it does not include permission to make configuration changes or act on - /// behalf of the OApp on the Endpoint, which requires "authorized" permission - public fun assert_admin(admin: address) { - assert!(admin == oapp_store::get_admin(), EUNAUTHORIZED); - } - - public fun we_asfeafeaseffukcthis(): u64 { - return 69 - } - - // ===================================================== Peers ==================================================== - - #[view] - public fun has_peer(eid: u32): bool { - oapp_store::has_peer(eid) - } - - #[view] - public fun get_peer(eid: u32): vector { - from_bytes32(get_peer_bytes32(eid)) - } - - public fun get_peer_bytes32(eid: u32): Bytes32 { - assert!(oapp_store::has_peer(eid), EUNCONFIGURED_PEER); - oapp_store::get_peer(eid) - } - - public entry fun set_peer(account: &signer, eid: u32, peer: vector) { - assert_admin(address_of(move account)); - // Automatically register the receive pathway when a peer is set - endpoint::register_receive_pathway(&oapp_store::call_ref(), eid, to_bytes32(peer)); - // Set the peer - let peer_bytes32 = to_bytes32(peer); - oapp_store::set_peer(eid, peer_bytes32); - emit(PeerSet { eid, peer }); - } - - public entry fun remove_peer(account: &signer, eid: u32) { - assert_admin(address_of(move account)); - assert!(oapp_store::has_peer(eid), EUNCONFIGURED_PEER); - oapp_store::remove_peer(eid); - emit(PeerSet { eid, peer: ZEROS_32_BYTES() }); - } - - // ==================================================== Pausing =================================================== - - #[view] - /// Check if sending is paused for a destination EID - public fun is_sending_paused(dst_eid: u32): bool { - oapp_store::is_sending_paused(dst_eid) - } - - /// Pause sending for a destination EID - /// This will prevent the OApp from sending messages to the EID until unpaused, but it will not affect receiving - public entry fun set_pause_sending(account: &signer, dst_eid: u32, paused: bool) { - assert_admin(address_of(move account)); - oapp_store::set_sending_paused(dst_eid, paused); - emit(PauseSendingSet { dst_eid, paused }); - } - - // =================================================== Delegates ================================================== - - #[view] - public fun has_delegate(): bool { - oapp_store::get_delegate() != @0x0 - } - - #[view] - public fun get_delegate(): address { - oapp_store::get_delegate() - } - - /// Set the delegate address for the OApp - set to @0x0 to remove the delegate - public entry fun set_delegate(account: &signer, delegate: address) { - assert_admin(address_of(move account)); - oapp_store::set_delegate(delegate); - emit(DelegateSet { delegate }); - } - - // ==================================================== General =================================================== - - #[view] - public fun get_lz_receive_module_name(): String { - endpoint::get_lz_receive_module(oft::oapp_store::OAPP_ADDRESS()) - } - - #[view] - public fun get_lz_compose_module_name(): String { - endpoint::get_lz_compose_module(oft::oapp_store::OAPP_ADDRESS()) - } - - // ===================================================== Utils ==================================================== - - /// Utility function to withdraw the specified native and zro fees from the provided account - public fun withdraw_lz_fees( - account: &signer, - native_fee: u64, - zro_fee: u64, - ): (FungibleAsset, Option) { - let native_fee_fa = native_token::withdraw(account, native_fee); - let zro_fee_fa = if (zro_fee > 0) { - option::some(primary_fungible_store::withdraw(account, get_zro_metadata(), zro_fee)) - } else option::none(); - (native_fee_fa, zro_fee_fa) - } - - /// Utility function to refund the specified fees to the provided account address - public fun refund_fees(account: address, native_fee_fa: FungibleAsset, zro_fee_fa: Option) { - primary_fungible_store::deposit(account, native_fee_fa); - option::destroy(zro_fee_fa, |zro_fee_fa| primary_fungible_store::deposit(account, zro_fee_fa)); - } - - // ==================================================== Helpers =================================================== - - /// Assert that an option is a type 3 option (begins with 0x0003) - public fun assert_options_type_3(options: vector) { - assert!(vector::length(&options) >= 2, EINVALID_OPTIONS); - let options_type = serde::extract_u16(&options, &mut 0); - assert!(options_type == 3, EINVALID_OPTIONS); - } - - // ==================================================== Events ==================================================== - - #[event] - struct AdminTransferred has drop, store { - admin: address, - } - - #[event] - struct PeerSet has drop, store { - eid: u32, - // Peer address - all zeros (0x00*32) if unset - peer: vector, - } - - #[event] - struct PauseSendingSet has drop, store { - dst_eid: u32, - paused: bool, - } - - #[event] - struct DelegateSet has drop, store { - delegate: address, - } - - #[event] - struct EnforcedOptionSet has drop, store { - eid: u32, - msg_type: u16, - enforced_options: vector, - } - - #[test_only] - public fun admin_transferred_event(admin: address): AdminTransferred { - AdminTransferred { admin } - } - - #[test_only] - public fun peer_set_event(eid: u32, peer: vector): PeerSet { - PeerSet { eid, peer } - } - - #[test_only] - public fun pause_sending_set(dst_eid: u32, paused: bool): PauseSendingSet { - PauseSendingSet { dst_eid, paused } - } - - #[test_only] - public fun delegate_set_event(delegate: address): DelegateSet { - DelegateSet { delegate } - } - - #[test_only] - public fun enforced_option_set_event(eid: u32, msg_type: u16, enforced_options: vector): EnforcedOptionSet { - EnforcedOptionSet { eid, msg_type, enforced_options } - } - - // ================================================== Error Codes ================================================= - - const EUNAUTHORIZED: u64 = 1; - const EUNCONFIGURED_PEER: u64 = 2; - const EUNEXPECTED_LZ_RECEIVE_VALUE: u64 = 3; - const EINVALID_OPTIONS: u64 = 4; - const EINVALID_ACCOUNT: u64 = 5; - const ESEND_PAUSED: u64 = 6; -} diff --git a/examples/oft-movement/build/oft/sources/oapp_receive.move b/examples/oft-movement/build/oft/sources/oapp_receive.move deleted file mode 100644 index fea4bcec6..000000000 --- a/examples/oft-movement/build/oft/sources/oapp_receive.move +++ /dev/null @@ -1,100 +0,0 @@ -/// This is an internal module that receives the lz_receive call from the Executor. This in turn calls the handler in -/// `oapp_receive_handler::lz_receive_impl` which is implemented by the OApp developer. -/// -/// This module should generally not be modified by the OApp developer. -module oft::oapp_receive { - use std::fungible_asset::{Self, FungibleAsset}; - use std::object::object_address; - use std::option::{Self, Option}; - use std::string::utf8; - use std::type_info::{module_name, type_of}; - - use endpoint_v2::endpoint::{Self, get_guid_from_wrapped, wrap_guid, WrappedGuid}; - use endpoint_v2_common::bytes32::to_bytes32; - use oft::oapp_core::get_peer_bytes32; - use oft::oapp_store; - use oft::oft::{lz_receive_impl, next_nonce_impl}; - - /// LZ Receive function for self-execution - public entry fun lz_receive( - src_eid: u32, - sender: vector, - nonce: u64, - guid: vector, - message: vector, - extra_data: vector, - ) { - lz_receive_with_value( - src_eid, - sender, - nonce, - wrap_guid(to_bytes32(guid)), - message, - extra_data, - option::none(), - ) - } - - /// LZ Receive function to be called by the Executor - /// This is able to be provided a receive value in the form of a FungibleAsset - /// For self-executing with a value, this should be called with a script - /// The WrappedGuid is used by the caller to - public fun lz_receive_with_value( - src_eid: u32, - sender: vector, - nonce: u64, - wrapped_guid: WrappedGuid, - message: vector, - extra_data: vector, - value: Option, - ) { - assert!(option::is_none(&value) || is_native_token(option::borrow(&value)), EINVALID_TOKEN); - let sender = to_bytes32(sender); - assert!(get_peer_bytes32(src_eid) == sender, ENOT_PEER); - - let guid = get_guid_from_wrapped(&wrapped_guid); - endpoint::clear(&oapp_store::call_ref(), src_eid, sender, nonce, wrapped_guid, message); - - lz_receive_impl( - src_eid, - sender, - nonce, - guid, - message, - extra_data, - value, - ); - } - - #[view] - /// Get the next nonce for the given pathway - public fun next_nonce(src_eid: u32, sender: vector): u64 { - next_nonce_impl(src_eid, to_bytes32(sender)) - } - - // ==================================================== Helper ==================================================== - - /// Check that a fungible asset is the native token - fun is_native_token(token: &FungibleAsset): bool { - object_address(&fungible_asset::asset_metadata(token)) == @native_token_metadata_address - } - - // ================================================ Initialization ================================================ - - fun init_module(account: &signer) { - let module_name = module_name(&type_of()); - endpoint::register_oapp(account, utf8(module_name)); - } - - struct LzReceiveModule {} - - #[test_only] - public fun init_module_for_test() { - init_module(&std::account::create_signer_for_test(oft::oapp_store::OAPP_ADDRESS())); - } - - // ================================================== Error Codes ================================================= - - const EINVALID_TOKEN: u64 = 1; - const ENOT_PEER: u64 = 2; -} diff --git a/examples/oft-movement/build/oft/sources/oapp_store.move b/examples/oft-movement/build/oft/sources/oapp_store.move deleted file mode 100644 index 47674aee1..000000000 --- a/examples/oft-movement/build/oft/sources/oapp_store.move +++ /dev/null @@ -1,123 +0,0 @@ -/// The Internal store module for the OApp Core and Receive modules. -/// -/// This module should generally not be modified by the OApp developer. -module oft::oapp_store { - use std::table::{Self, Table}; - - use endpoint_v2_common::bytes32::Bytes32; - use endpoint_v2_common::contract_identity::{Self, CallRef, ContractSigner, create_contract_signer, DynamicCallRef}; - - friend oft::oapp_core; - friend oft::oapp_receive; - friend oft::oapp_compose; - friend oft::oft; - - // ************************************************* CONFIGURATION ************************************************* - - /// The address of the OApp - public inline fun OAPP_ADDRESS(): address { @oft } - - // *********************************************** END CONFIGURATION *********************************************** - - struct OAppStore has key { - contract_signer: ContractSigner, - admin: address, - peers: Table, - sending_paused: Table, - delegate: address, - enforced_options: Table>, - } - - /// Enforced Options are stored by the OApp by EID and a OApp-specific "message type" (u16) - struct EnforcedOptionsKey has store, copy, drop { eid: u32, msg_type: u16 } - - // =================================================== Call Ref =================================================== - - public(friend) fun call_ref(): CallRef acquires OAppStore { - contract_identity::make_call_ref(&store().contract_signer) - } - - public(friend) fun dynamic_call_ref(target: address, auth: vector): DynamicCallRef acquires OAppStore { - contract_identity::make_dynamic_call_ref(&store().contract_signer, target, auth) - } - - // =============================================== Enforced Options =============================================== - - public(friend) fun get_enforced_options(eid: u32, msg_type: u16): vector acquires OAppStore { - *table::borrow_with_default(&store().enforced_options, EnforcedOptionsKey { eid, msg_type }, &b"") - } - - public(friend) fun set_enforced_options(eid: u32, msg_type: u16, option: vector) acquires OAppStore { - table::upsert(&mut store_mut().enforced_options, EnforcedOptionsKey { eid, msg_type }, option) - } - - // ===================================================== Admin ==================================================== - - public(friend) fun get_admin(): address acquires OAppStore { store().admin } - - public(friend) fun set_admin(admin: address) acquires OAppStore { - store_mut().admin = admin; - } - - // ===================================================== Peers ==================================================== - - public(friend) fun has_peer(eid: u32): bool acquires OAppStore { - table::contains(&store().peers, eid) - } - - public(friend) fun get_peer(eid: u32): Bytes32 acquires OAppStore { - *table::borrow(&store().peers, eid) - } - - public(friend) fun set_peer(eid: u32, peer: Bytes32) acquires OAppStore { - table::upsert(&mut store_mut().peers, eid, peer) - } - - public(friend) fun remove_peer(eid: u32) acquires OAppStore { - table::remove(&mut store_mut().peers, eid); - } - - // ===================================================== Pause ==================================================== - - /// Check if sending to a destination EID is paused - public(friend) fun is_sending_paused(dst_eid: u32): bool acquires OAppStore { - *table::borrow_with_default(&store().sending_paused, dst_eid, &false) - } - - /// Pause or unpause the sending to a destination EID - public(friend) fun set_sending_paused(dst_eid: u32, paused: bool) acquires OAppStore { - table::upsert(&mut store_mut().sending_paused, dst_eid, paused); - } - - // =================================================== Delegate =================================================== - - public(friend) fun get_delegate(): address acquires OAppStore { store().delegate } - - public(friend) fun set_delegate(delegate: address) acquires OAppStore { - store_mut().delegate = delegate; - } - - // ===================================================== Misc ===================================================== - - inline fun store(): &OAppStore { borrow_global(OAPP_ADDRESS()) } - - inline fun store_mut(): &mut OAppStore { borrow_global_mut(OAPP_ADDRESS()) } - - // ================================================ Initialization ================================================ - - fun init_module(account: &signer) { - move_to(account, OAppStore { - contract_signer: create_contract_signer(account), - admin: @oft_admin, - peers: table::new(), - sending_paused: table::new(), - delegate: @0x0, - enforced_options: table::new(), - }); - } - - #[test_only] - public fun init_module_for_test() { - init_module(&std::account::create_signer_for_test(OAPP_ADDRESS())); - } -} diff --git a/examples/oft-movement/build/oft/sources/oft.move b/examples/oft-movement/build/oft/sources/oft.move deleted file mode 100644 index b8c74e87e..000000000 --- a/examples/oft-movement/build/oft/sources/oft.move +++ /dev/null @@ -1,444 +0,0 @@ -/// This is the OFT interface that provides send, quote, and view functions for the OFT. -/// -/// The OFT developer should update the name of the implementation module in the configuration section of this module. -/// Other than that, this module generally does not need to be updated by the OFT developer. As much as possible, -/// customizations should be made in the OFT implementation module. -module oft::oft { - use std::coin::Coin; - use std::fungible_asset::{FungibleAsset, Metadata, metadata_from_asset}; - use std::object::{Object, object_address}; - use std::option::Option; - use std::primary_fungible_store; - use std::signer::address_of; - use std::option; - - use endpoint_v2::messaging_receipt::MessagingReceipt; - use endpoint_v2_common::bytes32::{Bytes32, to_bytes32}; - use endpoint_v2_common::contract_identity::{DynamicCallRef, get_dynamic_call_ref_caller}; - use oft::oapp_core::{Self, assert_admin, lz_quote, lz_send, lz_send_compose, refund_fees, withdraw_lz_fees}; - use oft::oapp_store::OAPP_ADDRESS; - use oft::oft_core; - use oft_common::oft_fee_detail::OftFeeDetail; - use oft_common::oft_limit::OftLimit; - - use oft::oft_impl::{ - balance as balance_internal, - build_options, - credit, - debit_coin, - debit_fungible_asset, - debit_view as debit_view_internal, - deposit_coin, - inspect_message, - metadata as metadata_internal, - oft_limit_and_fees, - PlaceholderCoin, - send_standards_supported as send_standards_supported_internal, - withdraw_coin, - }; - - friend oft::oapp_receive; - friend oft::oapp_compose; - - // ======================================== For FungibleAsset Enabled OFTs ======================================== - - /// This is called to send an amount in FungibleAsset to a recipient on another EID - public fun send( - call_ref: &DynamicCallRef, - dst_eid: u32, - to: Bytes32, - send_value: &mut FungibleAsset, - min_amount_ld: u64, - extra_options: vector, - compose_message: vector, - oft_cmd: vector, - native_fee: &mut FungibleAsset, - zro_fee: &mut Option, - ): (MessagingReceipt, OftReceipt) { - let sender = get_dynamic_call_ref_caller(call_ref, OAPP_ADDRESS(), b"send"); - send_internal( - sender, dst_eid, to, send_value, min_amount_ld, extra_options, compose_message, oft_cmd, native_fee, - zro_fee, - ) - } - - /// Send from an account to a recipient on another EID, deducting the fees and the amount to send from the sender's - /// account - public entry fun send_withdraw( - account: &signer, - dst_eid: u32, - to: vector, - amount_ld: u64, - min_amount_ld: u64, - extra_options: vector, - compose_message: vector, - oft_cmd: vector, - native_fee: u64, - zro_fee: u64, - ) { - // Withdraw the amount and fees from the account - let send_value = primary_fungible_store::withdraw(account, metadata(), amount_ld); - - - let (native_fee_fa, zro_fee_fa) = withdraw_lz_fees(account, native_fee, zro_fee); - - let sender = address_of(move account); - - send_internal( - sender, dst_eid, to_bytes32(to), &mut send_value, min_amount_ld, extra_options, compose_message, oft_cmd, - &mut native_fee_fa, &mut zro_fee_fa, - ); - - primary_fungible_store::deposit(sender, send_value); - primary_fungible_store::deposit(sender, native_fee_fa); - if (option::is_some(&zro_fee_fa)) { - primary_fungible_store::deposit(sender, option::extract(&mut zro_fee_fa)); - }; - option::destroy_none(zro_fee_fa); - - // // Return unused amounts and fees to the account - // refund_fees(sender, native_fee_fa, zro_fee_fa); - // primary_fungible_store::deposit(sender, send_value); - } - - fun send_internal( - sender: address, - dst_eid: u32, - to: Bytes32, - send_value: &mut FungibleAsset, - min_amount_ld: u64, - extra_options: vector, - compose_message: vector, - oft_cmd: vector, - native_fee: &mut FungibleAsset, - zro_fee: &mut Option, - ): (MessagingReceipt, OftReceipt) { - assert!(metadata_from_asset(send_value) == metadata(), EINVALID_METADATA); - let (messaging_receipt, amount_sent_ld, amount_received_ld) = oft_core::send( - sender, - dst_eid, - to, - compose_message, - |message, options| { - lz_send(dst_eid, message, options, native_fee, zro_fee) - }, - |_nothing| debit_fungible_asset(sender, send_value, min_amount_ld, dst_eid), - |amount_received_ld, message_type| build_options( - message_type, - dst_eid, - extra_options, - sender, - amount_received_ld, - to, - compose_message, - oft_cmd, - ), - |message, options| inspect_message(message, options, true), - ); - (messaging_receipt, OftReceipt { amount_sent_ld, amount_received_ld }) - } - - // ============================================= For Coin-enabled OFTs ============================================ - - /// This is called to send an amount in Coin to a recipient on another EID - public fun send_coin( - call_ref: &DynamicCallRef, - dst_eid: u32, - to: Bytes32, - send_value: &mut Coin, - min_amount_ld: u64, - extra_options: vector, - compose_message: vector, - oft_cmd: vector, - native_fee: &mut FungibleAsset, - zro_fee: &mut Option, - ): (MessagingReceipt, OftReceipt) { - let sender = get_dynamic_call_ref_caller(call_ref, OAPP_ADDRESS(), b"send_coin"); - send_coin_internal( - sender, dst_eid, to, send_value, min_amount_ld, extra_options, compose_message, oft_cmd, native_fee, - zro_fee, - ) - } - - /// Send from an amount to a recipient on another EID, deducting the fees and the amount from the sender's account - public entry fun send_withdraw_coin( - account: &signer, - dst_eid: u32, - to: vector, - amount_ld: u64, - min_amount_ld: u64, - extra_options: vector, - compose_message: vector, - oft_cmd: vector, - native_fee: u64, - zro_fee: u64, - ) { - // Withdraw the amount and fees from the account - let send_value = withdraw_coin(account, amount_ld); - let (native_fee_fa, zro_fee_fa) = withdraw_lz_fees(account, native_fee, zro_fee); - - let sender = address_of(move account); - - send_coin_internal( - sender, dst_eid, to_bytes32(to), &mut send_value, min_amount_ld, extra_options, compose_message, oft_cmd, - &mut native_fee_fa, &mut zro_fee_fa, - ); - - // Return unused amounts and fees back to the account - refund_fees(sender, native_fee_fa, zro_fee_fa); - deposit_coin(sender, send_value); - } - - /// This is called to send an amount in Coin to a recipient on another EID - fun send_coin_internal( - sender: address, - dst_eid: u32, - to: Bytes32, - send_value: &mut Coin, - min_amount_ld: u64, - extra_options: vector, - compose_message: vector, - oft_cmd: vector, - native_fee: &mut FungibleAsset, - zro_fee: &mut Option, - ): (MessagingReceipt, OftReceipt) { - let (messaging_receipt, amount_sent_ld, amount_received_ld) = oft_core::send( - sender, - dst_eid, - to, - compose_message, - |message, options| { - lz_send(dst_eid, message, options, native_fee, zro_fee) - }, - |_nothing| debit_coin(sender, send_value, min_amount_ld, dst_eid), - |amount_received_ld, message_type| build_options( - message_type, - dst_eid, - extra_options, - sender, - amount_received_ld, - to, - compose_message, - oft_cmd, - ), - |message, options| inspect_message(message, options, true), - ); - (messaging_receipt, OftReceipt { amount_sent_ld, amount_received_ld }) - } - - - // ===================================================== Quote ==================================================== - - #[view] - /// Quote the OFT for a particular send without sending - /// @return ( - /// oft_limit: The minimum and maximum limits that can be sent to the recipient - /// fees: The fees that will be applied to the amount sent - /// amount_sent_ld: The amount that would be debited from the sender in local decimals - /// amount_received_ld: The amount that would be received by the recipient in local decimals - /// ) - public fun quote_oft( - dst_eid: u32, - to: vector, - amount_ld: u64, - min_amount_ld: u64, - extra_options: vector, - compose_msg: vector, - oft_cmd: vector, - ): (OftLimit, vector, u64, u64) { - let (amount_sent_ld, amount_received_ld) = debit_view_internal(amount_ld, min_amount_ld, dst_eid); - - let (limit, fees) = oft_limit_and_fees( - dst_eid, - to, - amount_ld, - min_amount_ld, - extra_options, - compose_msg, - oft_cmd, - ); - (limit, fees, amount_sent_ld, amount_received_ld) - } - - #[view] - /// Quote the network fees for a particular send - /// @return (native_fee, zro_fee) - public fun quote_send( - user_sender: address, - dst_eid: u32, - to: vector, - amount_ld: u64, - min_amount_ld: u64, - extra_options: vector, - compose_message: vector, - oft_cmd: vector, - pay_in_zro: bool, - ): (u64, u64) { - oft_core::quote_send( - user_sender, - to, - compose_message, - |message, options| lz_quote(dst_eid, message, options, pay_in_zro), - |_nothing| debit_view_internal(amount_ld, min_amount_ld, dst_eid), - |amount_received_ld, message_type| build_options( - message_type, - dst_eid, - extra_options, - user_sender, - amount_received_ld, - to_bytes32(to), - compose_message, - oft_cmd, - ), - |message, options| inspect_message(message, options, false), - ) - } - - // ==================================================== Receive =================================================== - - public(friend) fun lz_receive_impl( - src_eid: u32, - _sender: Bytes32, - nonce: u64, - guid: Bytes32, - message: vector, - _extra_data: vector, - receive_value: Option, - ) { - oft_core::receive( - src_eid, - nonce, - guid, - message, - |to, index, message| lz_send_compose(to, index, guid, message), - |to, amount_ld| credit(to, amount_ld, src_eid, receive_value), - ); - } - - // ==================================================== Compose =================================================== - - public(friend) fun lz_compose_impl( - _from: address, - _guid: Bytes32, - _index: u16, - _message: vector, - _extra_data: vector, - _value: Option, - ) { - abort ECOMPOSE_NOT_IMPLEMENTED - } - - // =============================================== Ordered Execution ============================================== - - /// Provides the next nonce if executor options request ordered execution; returns 0 to indicate ordered execution - /// is disabled - public(friend) fun next_nonce_impl(_src_eid: u32, _sender: Bytes32): u64 { - 0 - } - - // ================================================== OFT Receipt ================================================= - - struct OftReceipt has drop, store { - amount_sent_ld: u64, - amount_received_ld: u64, - } - - public fun get_amount_sent_ld(receipt: &OftReceipt): u64 { receipt.amount_sent_ld } - - public fun get_amount_received_ld(receipt: &OftReceipt): u64 { receipt.amount_received_ld } - - public fun unpack_oft_receipt(receipt: &OftReceipt): (u64, u64) { - (receipt.amount_sent_ld, receipt.amount_received_ld) - } - - // ==================================================== V1 OFT ==================================================== - - /// Set the OFT on the specified EID as a V1 OFT - /// This will use the V1 Codec to communicate with the OFT - /// Composition is disabled on send for V1 mode - /// Composition is available on receive on V1 mode; however the compose message will be delivered to the compose - /// recipient will follow the pattern of v2 OFT compose messages (see oft_common::oft_compose_msg_codec) - public entry fun set_v1_compatibility_mode(admin: &signer, eid: u32, enabled: bool) { - assert_admin(address_of(admin)); - oft_core::set_v1_compatibility_mode(eid, enabled) - } - - // ===================================================== View ===================================================== - - #[view] - public fun balance(account: address): u64 { - balance_internal(account) - } - - #[view] - /// The version of the OFT - /// @return (interface_id, protocol_version) - public fun oft_version(): (u64, u64) { - (1, 1) - } - - #[view] - public fun send_standards_supported(): vector> { - send_standards_supported_internal() - } - - #[view] - /// The address of the OFT token - public fun token(): address { - object_address(&metadata_internal()) - } - - #[view] - /// The metadata object of the OFT - public fun metadata(): Object { - metadata_internal() - } - - #[view] - public fun debit_view(amount_ld: u64, min_amount_ld: u64, _dst_eid: u32): (u64, u64) { - debit_view_internal(amount_ld, min_amount_ld, _dst_eid) - } - - #[view] - public fun to_ld(amount_sd: u64): u64 { oft_core::to_ld(amount_sd) } - - #[view] - public fun to_sd(amount_ld: u64): u64 { oft_core::to_sd(amount_ld) } - - #[view] - public fun remove_dust(amount_ld: u64): u64 { oft_core::remove_dust(amount_ld) } - - #[view] - public fun shared_decimals(): u8 { oft_core::shared_decimals() } - - #[view] - public fun decimal_conversion_rate(): u64 { oft_core::decimal_conversion_rate() } - - #[view] - /// Encode an OFT message - /// @return (message, message_type) - public fun encode_oft_msg( - sender: address, - amount_ld: u64, - to: vector, - compose_msg: vector, - ): (vector, u16) { - oft_core::encode_oft_msg(sender, amount_ld, to_bytes32(to), compose_msg) - } - - #[view] - public fun get_peer(eid: u32): vector { - oapp_core::get_peer(eid) - } - - #[view] - /// Returns whether the peer OFT on an EID is a V1 OFT - public fun v1_compatibility_mode(eid: u32): bool { - oft_core::v1_compatibility_mode(eid) - } - - // ================================================== Error Codes ================================================= - - const ECOMPOSE_NOT_IMPLEMENTED: u64 = 1; - const EINVALID_METADATA: u64 = 2; -} diff --git a/examples/oft-movement/build/oft/sources/oft_core.move b/examples/oft-movement/build/oft/sources/oft_core.move deleted file mode 100644 index 187d54260..000000000 --- a/examples/oft-movement/build/oft/sources/oft_core.move +++ /dev/null @@ -1,358 +0,0 @@ -/// This provides core OFT functionality. -/// -/// This module should generally not be modified by the OFT developer except to correct the friend declarations to -/// match the modules that are actually used. -module oft::oft_core { - use std::event::emit; - use std::math64::pow; - use std::vector; - - use endpoint_v2::messaging_receipt::{get_guid, MessagingReceipt}; - use endpoint_v2_common::bytes32::{Self, Bytes32, from_bytes32, to_bytes32}; - use oft::oft_store; - use oft_common::oft_compose_msg_codec; - use oft_common::oft_msg_codec; - use oft_common::oft_v1_msg_codec::{Self, PT_SEND}; - - friend oft::oft; - friend oft::oft_impl_config; - friend oft::oapp_receive; - #[test_only] - friend oft::oft_core_tests; - #[test_only] - friend oft::oft_impl_config_tests; - - friend oft::oft_impl; - #[test_only] - friend oft::oft_fa_tests; - #[test_only] - friend oft::oapp_receive_using_oft_fa_tests; - - // ===================================================== OFT Core ================================================= - - /// Send a message to a destination endpoint using the provided send implementation and debit behavior. - /// - /// @param user_sender: The address of the user sending the message - /// @param dst_eid: The destination endpoint ID - /// @param to: The destination wallet address - /// @param compose_message: The compose message to be sent - /// @param send_impl: A function to send the message - /// |message, options| MessagingReceipt - /// @param debit: A function to debit the user account (unused field included to prevent IDE error) - /// |_unused_field| (sent_amount_ld, received_amount_ld) - /// @param build_options: A function to build the options for the message - /// |received_amount_ld, msg_type| options - /// @param inspect: A function to inspect the message and options before sending - /// |message, options| () - /// @return (messaging_receipt, amount_sent_ld, amount_received_ld) - public(friend) inline fun send( - user_sender: address, - dst_eid: u32, - to: Bytes32, - compose_payload: vector, - send_impl: |vector, vector| MessagingReceipt, - debit: |bool /*unused*/| (u64, u64), - build_options: |u64, u16| vector, - inspect: |&vector, &vector|, - ): (MessagingReceipt, u64, u64) { - let (amount_sent_ld, amount_received_ld) = debit(true /*unused*/); - - let msg_type = if (vector::length(&compose_payload) > 0) { SEND_AND_CALL() } else { SEND() }; - let options = build_options(amount_received_ld, msg_type); - - // Construct message and options - let (message, _) = if (!v1_compatibility_mode(dst_eid)) { - // Encode using OFT v2 codec - encode_oft_msg(user_sender, amount_received_ld, to, compose_payload) - } else { - // Encode using OFT v1 codec if the destination EID is set to use the v1 compatibility mode - assert!(vector::is_empty(&compose_payload), ECOMPOSE_SEND_TO_V1_OFT_FORBIDDEN_err()); - encode_v1_oft_msg(user_sender, amount_received_ld, to) - }; - - // Hook to inspect the message and options before sending - inspect(&message, &options); - - // Send by endpoint - let messaging_receipt = send_impl(message, options); - - emit_oft_sent( - from_bytes32(get_guid(&messaging_receipt)), - dst_eid, - user_sender, - amount_sent_ld, - amount_received_ld, - ); - - (messaging_receipt, amount_sent_ld, amount_received_ld) - } - - /// Handle a received packet - /// @param src_eid: The source endpoint ID - /// @param nonce: The nonce of the message - /// @param guid: The GUID of the message - /// @param message: The message received - /// @param send_compose: A function to send the compose message - /// |to_address, index, message| () - /// @param credit: A function to credit the user account - /// |to_address, amount_received_ld| credited_amount_ld - public(friend) inline fun receive( - src_eid: u32, - nonce: u64, - guid: Bytes32, - message: vector, - send_compose: |address, u16, vector| (), - credit: |address, u64| u64, - ) { - let v1_mode = v1_compatibility_mode(src_eid); - - // Decode the message using the OFT v2 codec unless the sender EID is set to use the v1 compatibility mode - let (to_address, message_amount_ld, has_compose) = if (!v1_mode) ( - // Decode using OFT v2 codec - bytes32::to_address(oft_msg_codec::send_to(&message)), - to_ld(oft_msg_codec::amount_sd(&message)), - oft_msg_codec::has_compose(&message), - ) else ( - // Decode using OFT v1 codec - bytes32::to_address(oft_v1_msg_codec::send_to(&message)), - to_ld(oft_v1_msg_codec::amount_sd(&message)), - oft_v1_msg_codec::has_compose(&message), - ); - let amount_received_ld = credit(to_address, message_amount_ld); - - // Send compose payload if present - if (has_compose) { - let compose_payload = if (!v1_mode) { - oft_msg_codec::compose_payload(&message) - } else { - // Convert the compose payload it to the format expected by v2 lz_compose receivers, so there is - // consistency on the behavior of OFT composers on this side of the ecosystem - oft_v1_msg_codec::v2_compatible_compose_payload(&message) - }; - let compose_message = oft_compose_msg_codec::encode( - nonce, - src_eid, - amount_received_ld, - compose_payload, - ); - // In the default implementation the compose index is always 0; send_compose accepts the index parameter - // for extensibility - send_compose(to_address, 0, compose_message); - }; - emit_oft_received(from_bytes32(guid), src_eid, to_address, amount_received_ld); - } - - /// Get a quote for the network fee for sending a message to a destination endpoint - /// @param user_sender: The address of the user sending the message - /// @param to: The destination wallet address - /// @param compose_message: The compose message to be included - /// @param quote_impl: A function to get a quote from the LayerZero endpoint - /// @param debit_view: A function that provides the debit amounts (unused param only included to prevent Move IDE error) - /// |_unused_field| (sent_amount_ld, received_amount_ld) - /// @param build_options: A function to build the options for the message - /// |received_amount_ld, msg_type| options - /// @param inspect: A function to inspect the message and options before quoting - /// |message, options| () - /// @return (native_fee, lz_fee) - public(friend) inline fun quote_send( - user_sender: address, - to: vector, - compose_message: vector, - quote_impl: |vector, vector| (u64, u64), - debit_view: |bool /*unused*/| (u64, u64), - build_options: |u64, u16| vector, - inspect: |&vector, &vector|, - ): (u64, u64) { - let (_, amount_received_ld) = debit_view(true /*unused*/); - let (message, msg_type) = encode_oft_msg(user_sender, amount_received_ld, to_bytes32(to), compose_message); - let options = build_options(amount_received_ld, msg_type); - - // Hook to inspect the message and options before sending - inspect(&message, &options); - - quote_impl(message, options) - } - - - // ===================================================== Utils ==================================================== - - /// This is a debit view implementation that can be used by the OFT to compute the amount to be sent and received - /// with no fees - public(friend) fun no_fee_debit_view(amount_ld: u64, min_amount_ld: u64): (u64, u64) { - let amount_sent_ld = remove_dust(amount_ld); - let amount_received_ld = amount_sent_ld; - assert!(amount_received_ld >= min_amount_ld, ESLIPPAGE_EXCEEDED); - (amount_sent_ld, amount_received_ld) - } - - /// Encode an OFT message - public(friend) fun encode_oft_msg( - sender: address, - amount_ld: u64, - to: Bytes32, - compose_payload: vector, - ): (vector, u16) { - let encoded_msg = oft_msg_codec::encode( - to, - to_sd(amount_ld), - bytes32::from_address(sender), - compose_payload, - ); - let msg_type = if (!vector::is_empty(&compose_payload)) { SEND_AND_CALL() } else { SEND() }; - - (encoded_msg, msg_type) - } - - /// Encode an OFT v1 message - /// Do not allow the compose message to be sent to a v1 OFT from v2 message because the behavior and semantics - /// of composition is substantially different - public(friend) fun encode_v1_oft_msg( - sender: address, - amount_ld: u64, - to: Bytes32, - ): (vector, u16) { - let encoded_msg = oft_v1_msg_codec::encode( - PT_SEND(), - to, - to_sd(amount_ld), - bytes32::from_address(sender), - 0, - b"", - ); - (encoded_msg, SEND()) - } - - public(friend) fun set_v1_compatibility_mode(eid: u32, enabled: bool) { - emit(OftV1CompatibilityModeSet { eid, enabled }); - oft_store::set_v1_compatibility_mode(eid, enabled); - } - - // =================================================== Viewable =================================================== - - /// Convert an amount from shared decimals to local decimals - public(friend) fun to_ld(amount_sd: u64): u64 { - amount_sd * oft_store::decimal_conversion_rate() - } - - /// Convert an amount from local decimals to shared decimals - public(friend) fun to_sd(amount_ld: u64): u64 { - amount_ld / oft_store::decimal_conversion_rate() - } - - /// Calculate an amount in local decimals minus the dust - public(friend) fun remove_dust(amount_ld: u64): u64 { - let decimal_conversion_rate = oft_store::decimal_conversion_rate(); - (amount_ld / decimal_conversion_rate) * decimal_conversion_rate - } - - /// Get the shared decimals for the OFT - public(friend) fun shared_decimals(): u8 { oft_store::shared_decimals() } - - /// Get the decimal conversion rate - /// This is the multiplier to convert a shared decimals to a local decimals representation - public(friend) fun decimal_conversion_rate(): u64 { oft_store::decimal_conversion_rate() } - - /// Check if the v1 compatibility mode is enabled for an EID - /// This must be public to ensure the inline function can access it - public fun v1_compatibility_mode(eid: u32): bool { oft_store::v1_compatibility_mode(eid) } - - // ===================================================== Store ==================================================== - - public(friend) fun initialize(local_decimals: u8, shared_decimals: u8) { - assert!(shared_decimals <= local_decimals, EINVALID_LOCAL_DECIMALS); - let decimal_conversion_rate = pow(10, ((local_decimals - shared_decimals) as u64)); - oft_store::initialize(shared_decimals, decimal_conversion_rate); - } - - // ==================================================== Events ==================================================== - - #[event] - struct OftReceived has store, drop { - guid: vector, - src_eid: u32, - to_address: address, - amount_received_ld: u64, - } - - #[event] - struct OftSent has store, drop { - // GUID of the OFT message - guid: vector, - // Destination Endpoint ID - dst_eid: u32, - // Address of the sender on the src chain - from_address: address, - // Amount of tokens sent in local decimals - amount_sent_ld: u64, - // Amount of tokens received in local decimals - amount_received_ld: u64 - } - - #[event] - struct OftV1CompatibilityModeSet has store, drop { - eid: u32, - enabled: bool, - } - - public(friend) fun emit_oft_received( - guid: vector, - src_eid: u32, - to_address: address, - amount_received_ld: u64, - ) { - emit(OftReceived { guid, src_eid, to_address, amount_received_ld }); - } - - public(friend) fun emit_oft_sent( - guid: vector, - dst_eid: u32, - from_address: address, - amount_sent_ld: u64, - amount_received_ld: u64, - ) { - emit(OftSent { guid, dst_eid, from_address, amount_sent_ld, amount_received_ld }); - } - - #[test_only] - public fun oft_received_event( - guid: vector, - src_eid: u32, - to_address: address, - amount_received_ld: u64, - ): OftReceived { - OftReceived { guid, src_eid, to_address, amount_received_ld } - } - - #[test_only] - public fun oft_sent_event( - guid: vector, - dst_eid: u32, - from_address: address, - amount_sent_ld: u64, - amount_received_ld: u64, - ): OftSent { - OftSent { guid, dst_eid, from_address, amount_sent_ld, amount_received_ld } - } - - #[test_only] - public fun oft_v1_compatibility_mode_set(eid: u32, enabled: bool): OftV1CompatibilityModeSet { - OftV1CompatibilityModeSet { eid, enabled } - } - - // =============================================== Shared Constants =============================================== - - // Message type for a message that does not contain a compose message - public inline fun SEND(): u16 { 1 } - - // Message type for a message that contains a compose message - public inline fun SEND_AND_CALL(): u16 { 2 } - - // ================================================== Error Codes ================================================= - - const ECOMPOSE_SEND_TO_V1_OFT_FORBIDDEN: u64 = 1; - const EINVALID_LOCAL_DECIMALS: u64 = 2; - const EUNAUTHORIZED: u64 = 3; - const ESLIPPAGE_EXCEEDED: u64 = 4; - - public fun ECOMPOSE_SEND_TO_V1_OFT_FORBIDDEN_err(): u64 { ECOMPOSE_SEND_TO_V1_OFT_FORBIDDEN } -} diff --git a/examples/oft-movement/build/oft/sources/oft_impl.move b/examples/oft-movement/build/oft/sources/oft_impl.move deleted file mode 100644 index d0710e02e..000000000 --- a/examples/oft-movement/build/oft/sources/oft_impl.move +++ /dev/null @@ -1,320 +0,0 @@ -/// This is an implementation of a Fungible-Asset-standard OFT. -/// -/// This creates a FungibleAsset upon initialization and mints and burns tokens on receive and send respectively. -/// This can be modified to accept mint, burn, and metadata references of an existing FungibleAsset upon initialization -/// rather than creating a new FungibleAsset -module oft::oft_impl { - use std::coin::Coin; - use std::fungible_asset::{Self, BurnRef, FungibleAsset, Metadata, MintRef, MutateMetadataRef, TransferRef}; - use std::object::{Self, Object}; - use std::object::{address_from_constructor_ref, address_to_object}; - use std::option::{Self, Option}; - use std::primary_fungible_store; - use std::signer::address_of; - use std::string::utf8; - - use endpoint_v2_common::bytes32::Bytes32; - use oft::oapp_core::{assert_admin, combine_options}; - use oft::oapp_store::OAPP_ADDRESS; - use oft::oft_core; - use oft::oft_impl_config::{ - Self, assert_not_blocklisted, debit_view_with_possible_fee, fee_details_with_possible_fee, - redirect_to_admin_if_blocklisted, release_rate_limit_capacity, try_consume_rate_limit_capacity, - }; - use oft_common::oft_fee_detail::OftFeeDetail; - use oft_common::oft_limit::{Self, OftLimit}; - - friend oft::oft; - friend oft::oapp_receive; - - #[test_only] - friend oft::oft_fa_tests; - - struct OftImpl has key { - metadata: Object, - mint_ref: MintRef, - burn_ref: BurnRef, - transfer_ref: TransferRef, - mutate_metadata_ref: MutateMetadataRef, - } - - // ================================================= OFT Handlers ================================================= - - /// The default *credit* behavior for a standard OFT is to mint the amount and transfer to the recipient - public(friend) fun credit( - to: address, - amount_ld: u64, - src_eid: u32, - lz_receive_value: Option, - ): u64 acquires OftImpl { - // Default implementation does not make special use of LZ Receive Value sent; just deposit to the OFT address - option::for_each(lz_receive_value, |fa| primary_fungible_store::deposit(@oft_admin, fa)); - - // Release rate limit capacity for the pathway (net inflow) - release_rate_limit_capacity(src_eid, amount_ld); - - // Mint the extracted amount to the recipient, or redirect to the admin if the recipient is blocklisted - primary_fungible_store::mint(&store().mint_ref, redirect_to_admin_if_blocklisted(to, amount_ld), amount_ld); - - amount_ld - } - - /// The default *debit* behavior for a standard OFT is to deduct the amount from the sender and burn the deducted - /// amount - /// @return (amount_sent_ld, amount_received_ld) - public(friend) fun debit_fungible_asset( - sender: address, - fa: &mut FungibleAsset, - min_amount_ld: u64, - dst_eid: u32, - ): (u64, u64) acquires OftImpl { - assert_not_blocklisted(sender); - try_consume_rate_limit_capacity(dst_eid, min_amount_ld); - - assert_metadata(fa); - - // Calculate the exact send amount - let amount_ld = fungible_asset::amount(fa); - let (amount_sent_ld, amount_received_ld) = debit_view(amount_ld, min_amount_ld, dst_eid); - - // Extract the exact send amount from the provided fungible asset - let extracted_fa = fungible_asset::extract(fa, amount_sent_ld); - - // Extract the fee and deposit it to the fee deposit address - let fee_ld = (amount_sent_ld - amount_received_ld); - if (fee_ld > 0) { - let fee_fa = fungible_asset::extract(&mut extracted_fa, fee_ld); - primary_fungible_store::deposit(fee_deposit_address(), fee_fa); - }; - - // Burn the extracted amount - fungible_asset::burn(&store().burn_ref, extracted_fa); - - (amount_sent_ld, amount_received_ld) - } - - // Unused in this implementation - public(friend) fun debit_coin( - _sender: address, - _coin: &mut Coin, - _min_amount_ld: u64, - _dst_eid: u32, - ): (u64, u64) { - abort ENOT_IMPLEMENTED - } - - /// The default *debit_view* behavior for a standard OFT is to remove dust and use remainder as both the sent and - /// received amounts, reflecting that no additional fees are removed - public(friend) fun debit_view(amount_ld: u64, min_amount_ld: u64, _dst_eid: u32): (u64, u64) { - debit_view_with_possible_fee(amount_ld, min_amount_ld) - } - - /// Change this to override the Executor and DVN options of the OFT transmission - public(friend) fun build_options( - message_type: u16, - dst_eid: u32, - extra_options: vector, - _user_sender: address, - _amount_received_ld: u64, - _to: Bytes32, - _compose_msg: vector, - _oft_cmd: vector, - ): vector { - combine_options(dst_eid, message_type, extra_options) - } - - /// Implement this function to inspect the message and options before quoting and sending - public(friend) fun inspect_message( - _message: &vector, - _options: &vector, - _is_sending: bool, - ) {} - - /// Change this to override the OFT limit and fees provided when quoting. The fees should reflect the difference - /// between the amount sent and the amount received returned from debit() and debit_view() - public(friend) fun oft_limit_and_fees( - dst_eid: u32, - _to: vector, - amount_ld: u64, - min_amount_ld: u64, - _extra_options: vector, - _compose_msg: vector, - _oft_cmd: vector, - ): (OftLimit, vector) { - (rate_limited_oft_limit(dst_eid), fee_details_with_possible_fee(amount_ld, min_amount_ld)) - } - - // =========================================== Coin Deposit / Withdrawal ========================================== - - public(friend) fun send_standards_supported(): vector> { - vector[b"fungible_asset"] - } - - /// Deposit coin function abstracted from `oft.move` for cross-chain flexibility - public(friend) fun deposit_coin(_account: address, _coin: Coin) { - abort ENOT_IMPLEMENTED - } - - - /// Unused in this implementation - public(friend) fun withdraw_coin(_account: &signer, _amount_ld: u64): Coin { - abort ENOT_IMPLEMENTED - } - - // =================================================== Metadata =================================================== - - public(friend) fun metadata(): Object acquires OftImpl { - store().metadata - } - - fun assert_metadata(fa: &FungibleAsset) acquires OftImpl { - let fa_metadata = fungible_asset::metadata_from_asset(fa); - assert!(fa_metadata == metadata(), EWRONG_FA_METADATA); - } - - public(friend) fun balance(account: address): u64 acquires OftImpl { - primary_fungible_store::balance(account, metadata()) - } - - /// Present for compatibility only - struct PlaceholderCoin {} - - // ================================================= Configuration ================================================ - - /// Set the fee (in BPS) for outbound OFT sends - public entry fun set_fee_bps(admin: &signer, fee_bps: u64) { - assert_admin(address_of(admin)); - oft_impl_config::set_fee_bps(fee_bps); - } - - #[view] - /// Get the fee (in BPS) for outbound OFT sends - public fun fee_bps(): u64 { oft_impl_config::fee_bps() } - - /// Set the fee deposit address for outbound OFT sends - public entry fun set_fee_deposit_address(admin: &signer, fee_deposit_address: address) { - assert_admin(address_of(admin)); - oft_impl_config::set_fee_deposit_address(fee_deposit_address); - } - - #[view] - /// Get the fee deposit address for outbound OFT sends - public fun fee_deposit_address(): address { oft_impl_config::get_fee_deposit_address() } - - /// Permantently disable the ability to blocklist addresses - public entry fun irrevocably_disable_blocklist(admin: &signer) { - assert_admin(address_of(admin)); - oft_impl_config::irrevocably_disable_blocklist(); - } - - /// Set the blocklist status of a wallet address - /// If a wallet is blocklisted - /// - OFT sends from the wallet will be blocked - /// - OFT receives to the wallet will be be diverted to the admin - /// - The wallet address's FungibleAsset store will be frozen (no sends / receives) - public entry fun set_blocklist(admin: &signer, wallet: address, block: bool) acquires OftImpl { - assert_admin(address_of(admin)); - oft_impl_config::set_blocklist(wallet, block); - - // Additionally freeze the FungibleAsset store if the wallet is blocked - primary_fungible_store::set_frozen_flag(&store().transfer_ref, wallet, block) - } - - #[view] - /// Get the blocklist status of a wallet address - public fun is_blocklisted(wallet: address): bool { oft_impl_config::is_blocklisted(wallet) } - - /// Set the rate limit configuration for a given endpoint ID - /// The rate limit is the maximum amount of OFT that can be sent to the endpoint within a given window - /// The rate limit capacity recovers linearly at a rate of limit / window_seconds - public entry fun set_rate_limit(admin: &signer, eid: u32, limit: u64, window_seconds: u64) { - assert_admin(address_of(admin)); - oft_impl_config::set_rate_limit(eid, limit, window_seconds); - } - - #[view] - /// Get the rate limit configuration for a given endpoint ID - /// @return (limit, window_seconds) - public fun rate_limit_config(eid: u32): (u64, u64) { oft_impl_config::rate_limit_config(eid) } - - #[view] - /// Get the amount of rate limit capacity currently consumed on this pathway - public fun rate_limit_in_flight(eid: u32): u64 { oft_impl_config::in_flight(eid) } - - #[view] - /// Get the rate limit capacity for a given endpoint ID - public fun rate_limit_capacity(eid: u32): u64 { oft_impl_config::rate_limit_capacity(eid) } - - /// Create an OftLimit that reflects the rate limit for a given endpoint ID - public fun rate_limited_oft_limit(eid: u32): OftLimit { - oft_limit::new_oft_limit(0, oft_impl_config::rate_limit_capacity(eid)) - } - - // ================================================ Initialization ================================================ - - public entry fun initialize( - account: &signer, - token_name: vector, - symbol: vector, - icon_uri: vector, - project_uri: vector, - shared_decimals: u8, - local_decimals: u8, - ) acquires OftImpl { - assert_admin(address_of(account)); - fungible_asset::mutate_metadata( - &store().mutate_metadata_ref, - option::some(utf8(token_name)), - option::some(utf8(symbol)), - option::some(local_decimals), - option::some(utf8(icon_uri)), - option::some(utf8(project_uri)), - ); - - oft_core::initialize(local_decimals, shared_decimals); - } - - fun init_module(account: &signer) { - let constructor_ref = &object::create_named_object(account, b"oft_fa"); - // Create a fungible asset with empty paramters that be set to the correct values on initialize() - primary_fungible_store::create_primary_store_enabled_fungible_asset( - constructor_ref, - option::none(), - utf8(b""), - utf8(b""), - 8, - utf8(b""), - utf8(b""), - ); - - move_to(move account, OftImpl { - metadata: address_to_object(address_from_constructor_ref(constructor_ref)), - mint_ref: fungible_asset::generate_mint_ref(constructor_ref), - burn_ref: fungible_asset::generate_burn_ref(constructor_ref), - transfer_ref: fungible_asset::generate_transfer_ref(constructor_ref), - mutate_metadata_ref: fungible_asset::generate_mutate_metadata_ref(constructor_ref), - }); - } - - #[test_only] - public fun init_module_for_test() { - init_module(&std::account::create_signer_for_test(OAPP_ADDRESS())); - } - - // =================================================== Helpers ==================================================== - - #[test_only] - public fun mint_tokens_for_test(amount_ld: u64): FungibleAsset acquires OftImpl { - fungible_asset::mint(&store().mint_ref, amount_ld) - } - - inline fun store(): &OftImpl { - borrow_global(OAPP_ADDRESS()) - } - - // ================================================== Error Codes ================================================= - - const ENOT_IMPLEMENTED: u64 = 1; - const EUNAUTHORIZED: u64 = 2; - const EWRONG_FA_METADATA: u64 = 3; -} \ No newline at end of file diff --git a/examples/oft-movement/build/oft/sources/oft_impl_config.move b/examples/oft-movement/build/oft/sources/oft_impl_config.move deleted file mode 100644 index 291c1fe12..000000000 --- a/examples/oft-movement/build/oft/sources/oft_impl_config.move +++ /dev/null @@ -1,432 +0,0 @@ -module oft::oft_impl_config { - use std::event::emit; - use std::math64::min; - use std::string::utf8; - use std::table::{Self, Table}; - use std::timestamp; - - use oft::oapp_core::get_admin; - use oft::oapp_store::OAPP_ADDRESS; - use oft::oft_core::{no_fee_debit_view, remove_dust}; - use oft_common::oft_fee_detail::{new_oft_fee_detail, OftFeeDetail}; - - #[test_only] - friend oft::oft_impl_config_tests; - - friend oft::oft_impl; - - struct Config has key { - fee_bps: u64, - fee_deposit_address: address, - blocklist_enabled: bool, - blocklist: Table, - rate_limit_by_eid: Table, - } - - const MAX_U64: u64 = 0xffffffffffffffff; - - // =============================================== Fee Configuration ============================================== - - // The maximum fee that can be set is 100% - const MAX_FEE_BPS: u64 = 10000; - - /// Set the fee deposit address - /// This is where OFT fees collected are deposited - public(friend) fun set_fee_deposit_address(fee_deposit_address: address) acquires Config { - // The fee deposit address must exist as an account to prevent revert for Coin deposits - assert!(std::account::exists_at(fee_deposit_address), EINVALID_DEPOSIT_ADDRESS); - store_mut().fee_deposit_address = fee_deposit_address; - emit(FeeDepositAddressSet { fee_deposit_address }); - } - - /// Get the fee deposit address - public(friend) fun get_fee_deposit_address(): address acquires Config { store().fee_deposit_address } - - /// Set the fee for the OFT - public(friend) fun set_fee_bps(fee_bps: u64) acquires Config { - assert!(fee_bps <= MAX_FEE_BPS, EINVALID_FEE); - store_mut().fee_bps = fee_bps; - emit(FeeSet { fee_bps }); - } - - /// Get the fee for the OFT - public(friend) fun fee_bps(): u64 acquires Config { store().fee_bps } - - /// Calculate the amount sent and received after applying the fee - /// If there is a zero fee, untransferable dust is to be left in user's wallet - /// If there is a non-zero fee, untransferable dust is to be consumed as a fee - /// This is consistent with EVM fee-enabled OFTs vs non-fee OFTs (we match fee = 0 with non-fee OFT behavior) - public(friend) fun debit_view_with_possible_fee( - amount_ld: u64, - min_amount_ld: u64, - ): (u64, u64) acquires Config { - let fee_bps = store().fee_bps; - if (fee_bps == 0) { - // If there is no fee, the amount sent and received is simply the amount provided minus dust, which is left - // in the wallet - no_fee_debit_view(amount_ld, min_amount_ld) - } else { - // The amount sent is the amount provided. The excess dust is consumed as a "fee" even if the dust could be - // left in the wallet in order to provide a more predictable experience for the user - let amount_sent_ld = amount_ld; - - // Calculate the preliminary fee based on the amount provided; this may increase when dust is added to it. - // The actual fee is the amount sent - amount received, which is fee + dust removed - let preliminary_fee = (amount_ld * fee_bps) / 10_000; - - // Compute the received amount first, which is the amount after fee and dust removal - let amount_received_ld = remove_dust(amount_ld - preliminary_fee); - - // Ensure the amount received is greater than the minimum amount - assert!(amount_received_ld >= min_amount_ld, ESLIPPAGE_EXCEEDED); - - (amount_sent_ld, amount_received_ld) - } - } - - /// Specify the fee details based the configured fee and the amount sent - public(friend) fun fee_details_with_possible_fee( - amount_ld: u64, - min_amount_ld: u64 - ): vector acquires Config { - let (amount_sent_ld, amount_received_ld) = debit_view_with_possible_fee(amount_ld, min_amount_ld); - let fee = amount_sent_ld - amount_received_ld; - if (fee != 0) { - vector[new_oft_fee_detail(fee, false, utf8(b"OFT Fee"))] - } else { - vector[] - } - } - - // ============================================ Blacklist Configuration =========================================== - - /// Permanently disable the ability to blocklist accounts - /// This will also restore any previously blocked accounts to unblocked status - /// This is a one-way operation, once this is called, the blocklist capability cannot be restored - public(friend) fun irrevocably_disable_blocklist() acquires Config { - assert!(store().blocklist_enabled, EBLOCKLIST_ALREADY_DISABLED); - store_mut().blocklist_enabled = false; - emit(BlocklistingDisabled {}) - } - - /// Check if the blocklisting capability is enabled - public(friend) fun can_blocklist(): bool acquires Config { - store().blocklist_enabled - } - - /// Add or remove an account from the blocklist - public(friend) fun set_blocklist(wallet: address, blocklist: bool) acquires Config { - assert!(store().blocklist_enabled, EBLOCKLIST_DISABLED); - assert!(is_blocklisted(wallet) != blocklist, ESETTING_UNCHANGED); - if (blocklist) { - table::upsert(&mut store_mut().blocklist, wallet, true) - } else { - table::remove(&mut store_mut().blocklist, wallet); - }; - emit(BlocklistSet { wallet, blocked: blocklist }); - } - - /// Check if an account is blocked - public(friend) fun is_blocklisted(wallet: address): bool acquires Config { - store().blocklist_enabled && *table::borrow_with_default(&store().blocklist, wallet, &false) - } - - /// Revert if an account is blocked - public(friend) fun assert_not_blocklisted(wallet: address) acquires Config { - assert!(!store().blocklist_enabled || !is_blocklisted(wallet), EADDRESS_BLOCKED); - } - - /// Provide the admin address and emit a BlockedAmountRedirected event if an account is blocked - /// This is to be used in conjunction with a deposit(to) call and provides the admin address instead of the - /// recipient address if recipient is blocklisted. This also emits a message to alert that blocklisted funds have - /// been received - public(friend) fun redirect_to_admin_if_blocklisted(recipient: address, amount_ld: u64): address acquires Config { - if (!store().blocklist_enabled || !is_blocklisted(recipient)) { - recipient - } else { - emit(BlockedAmountRedirected { - amount_ld, - blocked_address: recipient, - redirected_to: get_admin(), - }); - get_admin() - } - } - - // ======================================= Sending Rate Limit Configuration ======================================= - - struct RateLimit has store, drop, copy { - limit: u64, - window_seconds: u64, - in_flight_on_last_update: u64, - last_update: u64, - } - - /// Set the rate limit (local_decimals) and the window (seconds) at the current timestamp - /// The capacity of the rate limit increased by limit_ld/window_s until it reaches the limit and stays there - public(friend) fun set_rate_limit(dst_eid: u32, limit: u64, window_seconds: u64) acquires Config { - set_rate_limit_at_timestamp(dst_eid, limit, window_seconds, timestamp::now_seconds()); - } - - /// Set or update the rate limit for a given EID at a specified timestamp - public(friend) fun set_rate_limit_at_timestamp( - dst_eid: u32, - limit: u64, - window_seconds: u64, - timestamp: u64 - ) acquires Config { - assert!(window_seconds > 0, EINVALID_WINDOW); - - // If the rate limit is already set, checkpoint the in-flight amount before updating the rate limit. - if (has_rate_limit(dst_eid)) { - // Checkpoint the in-flight amount before updating the rate settings. If this is not saved, it could change - // the in-flight calculation amount retroactively - checkpoint_rate_limit_in_flight(dst_eid, timestamp); - - let rate_limit_store = table::borrow_mut(&mut store_mut().rate_limit_by_eid, dst_eid); - rate_limit_store.limit = limit; - rate_limit_store.window_seconds = window_seconds; - emit(RateLimitUpdated { dst_eid, limit, window_seconds }); - } else { - table::upsert(&mut store_mut().rate_limit_by_eid, dst_eid, RateLimit { - limit, - window_seconds, - in_flight_on_last_update: 0, - last_update: timestamp, - }); - emit(RateLimitSet { dst_eid, limit, window_seconds }); - }; - } - - /// Unset the rate limit for a given EID - public(friend) fun unset_rate_limit(eid: u32) acquires Config { - table::remove(&mut store_mut().rate_limit_by_eid, eid); - emit(RateLimitUnset { eid }); - } - - /// Check if a rate limit is set for a given EID - public(friend) fun has_rate_limit(eid: u32): bool acquires Config { - table::contains(&store().rate_limit_by_eid, eid) - } - - /// Get the rate limit and window (in seconds) for a given EID - public(friend) fun rate_limit_config(eid: u32): (u64, u64) acquires Config { - if (!has_rate_limit(eid)) { - (0, 0) - } else { - let rate_limit = *table::borrow(&store().rate_limit_by_eid, eid); - (rate_limit.limit, rate_limit.window_seconds) - } - } - - /// Get the in-flight amount for a given EID - public(friend) fun in_flight(eid: u32): u64 acquires Config { - in_flight_at_timestamp(eid, timestamp::now_seconds()) - } - - /// Get the in-flight amount for a given EID. The in-flight count is a linear decay of the in-flight amount at the - /// last update timestamp to the current timestamp. - public(friend) fun in_flight_at_timestamp(eid: u32, timestamp: u64): u64 acquires Config { - if (!has_rate_limit(eid)) { - 0 - } else { - let rate_limit = *table::borrow(&store().rate_limit_by_eid, eid); - if (timestamp > rate_limit.last_update) { - // If the timestamp is greater than the last update, calculate the decayed in-flight amount - let elapsed = min(timestamp - rate_limit.last_update, rate_limit.window_seconds); - let decay = (elapsed * rate_limit.limit) / rate_limit.window_seconds; - - // Ensure the decayed in-flight amount is not negative - if (decay < rate_limit.in_flight_on_last_update) { - rate_limit.in_flight_on_last_update - decay - } else { - 0 - } - } else { - // If not, return the unaltered in-flight amount at the last checkpoint - rate_limit.in_flight_on_last_update - } - } - } - - /// Checkpoint the in-flight amount for a given EID for the provided timestamp. - /// This should whenever there is a change in rate limit or before consuming rate limit capacity - public(friend) fun checkpoint_rate_limit_in_flight(eid: u32, timestamp: u64) acquires Config { - let inflight = in_flight_at_timestamp(eid, timestamp); - let rate_limit = table::borrow_mut(&mut store_mut().rate_limit_by_eid, eid); - rate_limit.in_flight_on_last_update = inflight; - rate_limit.last_update = timestamp; - } - - public(friend) fun rate_limit_capacity(eid: u32): u64 acquires Config { - rate_limit_capacity_at_timestamp(eid, timestamp::now_seconds()) - } - - /// Calculate the spare rate limit capacity for a given EID at the proviced timestamp - public(friend) fun rate_limit_capacity_at_timestamp(eid: u32, timestamp: u64): u64 acquires Config { - if (!has_rate_limit(eid)) { - return MAX_U64 - }; - let rate_limit = *table::borrow(&store().rate_limit_by_eid, eid); - rate_limit.limit - in_flight_at_timestamp(eid, timestamp) - } - - /// Consume rate limit capacity for a given EID or abort if the capacity is exceeded at a provided timestamp - public(friend) fun try_consume_rate_limit_capacity_at_timestamp( - eid: u32, - amount: u64, - timestamp: u64 - ) acquires Config { - checkpoint_rate_limit_in_flight(eid, timestamp); - let rate_limit = table::borrow_mut(&mut store_mut().rate_limit_by_eid, eid); - assert!(rate_limit.in_flight_on_last_update + amount <= rate_limit.limit, EEXCEEDED_RATE_LIMIT); - rate_limit.in_flight_on_last_update = rate_limit.in_flight_on_last_update + amount; - } - - /// Consume rate limit capacity for a given EID or abort if the capacity is exceeded - public(friend) fun try_consume_rate_limit_capacity(eid: u32, amount: u64) acquires Config { - if (!has_rate_limit(eid)) return; - - try_consume_rate_limit_capacity_at_timestamp(eid, amount, timestamp::now_seconds()); - } - - /// Release rate limit capacity for a given EID - /// This is used to when wanting to rate limit by net inflow - outflow - /// This will release the capacity back to the rate limit up to the limit itself - public(friend) fun release_rate_limit_capacity(eid: u32, amount: u64) acquires Config { - if (!has_rate_limit(eid)) return; - - let rate_limit = table::borrow_mut(&mut store_mut().rate_limit_by_eid, eid); - if (amount >= rate_limit.in_flight_on_last_update) { - rate_limit.in_flight_on_last_update = 0; - } else { - rate_limit.in_flight_on_last_update = rate_limit.in_flight_on_last_update - amount; - } - } - - // ==================================================== Helpers =================================================== - - inline fun store(): &Config { borrow_global(OAPP_ADDRESS()) } - - inline fun store_mut(): &mut Config { borrow_global_mut(OAPP_ADDRESS()) } - - // ==================================================== Events ==================================================== - - #[event] - struct FeeDepositAddressSet has drop, store { - fee_deposit_address: address, - } - - #[event] - struct FeeSet has drop, store { - fee_bps: u64, - } - - #[event] - struct BlocklistingDisabled has drop, store {} - - #[event] - struct BlocklistSet has drop, store { - wallet: address, - blocked: bool, - } - - #[event] - struct BlockedAmountRedirected has drop, store { - amount_ld: u64, - blocked_address: address, - redirected_to: address, - } - - #[event] - struct RateLimitSet has drop, store { - dst_eid: u32, - limit: u64, - window_seconds: u64, - } - - #[event] - struct RateLimitUpdated has drop, store { - dst_eid: u32, - limit: u64, - window_seconds: u64, - } - - #[event] - struct RateLimitUnset has drop, store { - eid: u32, - } - - #[test_only] - public fun fee_deposit_address_set_event(fee_deposit_address: address): FeeDepositAddressSet { - FeeDepositAddressSet { fee_deposit_address } - } - - #[test_only] - public fun fee_set_event(fee_bps: u64): FeeSet { - FeeSet { fee_bps } - } - - #[test_only] - public fun blocklisting_disabled_event(): BlocklistingDisabled { - BlocklistingDisabled {} - } - - #[test_only] - public fun blocklist_set_event(wallet: address, blocked: bool): BlocklistSet { - BlocklistSet { wallet, blocked } - } - - #[test_only] - public fun blocked_amount_redirected_event( - amount_ld: u64, - blocked_address: address, - redirected_to: address - ): BlockedAmountRedirected { - BlockedAmountRedirected { amount_ld, blocked_address, redirected_to } - } - - #[test_only] - public fun rate_limit_set_event(dst_eid: u32, limit: u64, window_seconds: u64): RateLimitSet { - RateLimitSet { dst_eid, limit, window_seconds } - } - - #[test_only] - public fun rate_limit_updated_event(dst_eid: u32, limit: u64, window_seconds: u64): RateLimitUpdated { - RateLimitUpdated { dst_eid, limit, window_seconds } - } - - #[test_only] - public fun rate_limit_unset_event(eid: u32): RateLimitUnset { - RateLimitUnset { eid } - } - - // ================================================ Initialization ================================================ - - fun init_module(account: &signer) { - move_to(move account, Config { - fee_bps: 0, - fee_deposit_address: @oft_admin, - blocklist_enabled: true, - blocklist: table::new(), - rate_limit_by_eid: table::new(), - }); - } - - #[test_only] - public fun init_module_for_test() { - init_module(&std::account::create_signer_for_test(OAPP_ADDRESS())); - } - - // ================================================== Error Codes ================================================= - - const EADDRESS_BLOCKED: u64 = 1; - const EBLOCKLIST_ALREADY_DISABLED: u64 = 2; - const EBLOCKLIST_DISABLED: u64 = 3; - const EEXCEEDED_RATE_LIMIT: u64 = 4; - const EINVALID_DEPOSIT_ADDRESS: u64 = 5; - const EINVALID_FEE: u64 = 6; - const EINVALID_WINDOW: u64 = 7; - const ESETTING_UNCHANGED: u64 = 8; - const ESLIPPAGE_EXCEEDED: u64 = 9; -} diff --git a/examples/oft-movement/build/oft/sources/oft_store.move b/examples/oft-movement/build/oft/sources/oft_store.move deleted file mode 100644 index b24509918..000000000 --- a/examples/oft-movement/build/oft/sources/oft_store.move +++ /dev/null @@ -1,81 +0,0 @@ -/// This module contains the general/internal store of the OFT OApp. -/// -/// This module should generally not be modified by the OFT/OApp developer. OFT specific data should be stored in the -/// implementation module. -module oft::oft_store { - use std::table::{Self, Table}; - - use oft::oapp_store::OAPP_ADDRESS; - - friend oft::oft_core; - - /// The OFT configuration that is general to all OFT implementations - struct OftStore has key { - shared_decimals: u8, - decimal_conversion_rate: u64, - v1_compatibility_mode: Table, - } - - /// Get the decimal conversion rate of the OFT, this is the multiplier to convert a shared decimals to a local - /// decimals representation - public(friend) fun decimal_conversion_rate(): u64 acquires OftStore { - store().decimal_conversion_rate - } - - /// Get the shared decimals of the OFT, this is the number of decimals that are preserved on wire transmission - public(friend) fun shared_decimals(): u8 acquires OftStore { - store().shared_decimals - } - - // ============================================= V1 OFT Compatibility ============================================= - - /// Set the v1 compatibility mode for an EID - public(friend) fun set_v1_compatibility_mode(eid: u32, enabled: bool) acquires OftStore { - assert!(enabled != v1_compatibility_mode(eid), ENO_CHANGE); - if (enabled) { - table::upsert(&mut store_mut().v1_compatibility_mode, eid, enabled); - } else { - table::remove(&mut store_mut().v1_compatibility_mode, eid); - }; - } - - /// Get the v1 compatibility mode for an EID - /// This is public on account for needing to be viewed from an inline function - public(friend) fun v1_compatibility_mode(eid: u32): bool acquires OftStore { - *table::borrow_with_default(&store().v1_compatibility_mode, eid, &false) - } - - // ==================================================== Helpers =================================================== - - inline fun store(): &OftStore { borrow_global(OAPP_ADDRESS()) } - - inline fun store_mut(): &mut OftStore { borrow_global_mut(OAPP_ADDRESS()) } - - // ================================================ Initialization ================================================ - - public(friend) fun initialize(shared_decimals: u8, decimal_conversion_rate: u64) acquires OftStore { - // Prevent re-initialization; the caller computes the decimal conversion rate, which cannot be 0 - assert!(store().decimal_conversion_rate == 0, EALREADY_INITIALIZED); - - store_mut().shared_decimals = shared_decimals; - store_mut().decimal_conversion_rate = decimal_conversion_rate; - } - - fun init_module(account: &signer) { - move_to(account, OftStore { - shared_decimals: 0, - decimal_conversion_rate: 0, - v1_compatibility_mode: table::new(), - }) - } - - #[test_only] - public fun init_module_for_test() { - init_module(&std::account::create_signer_for_test(OAPP_ADDRESS())); - } - - // ================================================== Error Codes ================================================= - - const EALREADY_INITIALIZED: u64 = 1; - const ENO_CHANGE: u64 = 2; -} diff --git a/examples/oft-movement/cache/foundry/solidity-files-cache.json b/examples/oft-movement/cache/foundry/solidity-files-cache.json deleted file mode 100644 index e7ef41611..000000000 --- a/examples/oft-movement/cache/foundry/solidity-files-cache.json +++ /dev/null @@ -1,7771 +0,0 @@ -{ - "_format": "", - "paths": { - "artifacts": "out", - "build_infos": "out/build-info", - "sources": "contracts", - "tests": "test/evm/foundry", - "scripts": "script", - "libraries": [ - "/workspaces/devtools-krak/packages/toolbox-foundry/lib", - "node_modules" - ] - }, - "files": { - "contracts/MyOFT.sol": { - "lastModificationDate": 1735584086055, - "contentHash": "52676528100f5143bc648cece466b14a", - "sourceName": "contracts/MyOFT.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [ - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol", - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OApp.sol", - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppCore.sol", - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppReceiver.sol", - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppSender.sol", - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppCore.sol", - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppMsgInspector.sol", - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppOptionsType3.sol", - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppReceiver.sol", - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/libs/OAppOptionsType3.sol", - "node_modules/@layerzerolabs/oapp-evm/contracts/precrime/OAppPreCrimeSimulator.sol", - "node_modules/@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IOAppPreCrimeSimulator.sol", - "node_modules/@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IPreCrime.sol", - "node_modules/@layerzerolabs/oapp-evm/contracts/precrime/libs/Packet.sol", - "node_modules/@layerzerolabs/oft-evm/contracts/OFT.sol", - "node_modules/@layerzerolabs/oft-evm/contracts/OFTCore.sol", - "node_modules/@layerzerolabs/oft-evm/contracts/interfaces/IOFT.sol", - "node_modules/@layerzerolabs/oft-evm/contracts/libs/OFTComposeMsgCodec.sol", - "node_modules/@layerzerolabs/oft-evm/contracts/libs/OFTMsgCodec.sol", - "node_modules/@openzeppelin/contracts/access/Ownable.sol", - "node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol", - "node_modules/@openzeppelin/contracts/interfaces/IERC165.sol", - "node_modules/@openzeppelin/contracts/interfaces/IERC20.sol", - "node_modules/@openzeppelin/contracts/interfaces/draft-IERC6093.sol", - "node_modules/@openzeppelin/contracts/token/ERC20/ERC20.sol", - "node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol", - "node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol", - "node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol", - "node_modules/@openzeppelin/contracts/utils/Address.sol", - "node_modules/@openzeppelin/contracts/utils/Context.sol", - "node_modules/@openzeppelin/contracts/utils/Errors.sol", - "node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol" - ], - "versionRequirement": "^0.8.22", - "artifacts": { - "MyOFT": { - "0.8.22": { - "path": "MyOFT.sol/MyOFT.json", - "build_id": "15c57b83a95fe5a422295bb3f4778716" - } - } - }, - "seenByCompiler": true - }, - "contracts/mocks/MyOFTMock.sol": { - "lastModificationDate": 1735584086055, - "contentHash": "5d08690bc835b7e8c9efcd5abf91056b", - "sourceName": "contracts/mocks/MyOFTMock.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [ - "contracts/MyOFT.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol", - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OApp.sol", - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppCore.sol", - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppReceiver.sol", - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppSender.sol", - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppCore.sol", - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppMsgInspector.sol", - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppOptionsType3.sol", - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppReceiver.sol", - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/libs/OAppOptionsType3.sol", - "node_modules/@layerzerolabs/oapp-evm/contracts/precrime/OAppPreCrimeSimulator.sol", - "node_modules/@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IOAppPreCrimeSimulator.sol", - "node_modules/@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IPreCrime.sol", - "node_modules/@layerzerolabs/oapp-evm/contracts/precrime/libs/Packet.sol", - "node_modules/@layerzerolabs/oft-evm/contracts/OFT.sol", - "node_modules/@layerzerolabs/oft-evm/contracts/OFTCore.sol", - "node_modules/@layerzerolabs/oft-evm/contracts/interfaces/IOFT.sol", - "node_modules/@layerzerolabs/oft-evm/contracts/libs/OFTComposeMsgCodec.sol", - "node_modules/@layerzerolabs/oft-evm/contracts/libs/OFTMsgCodec.sol", - "node_modules/@openzeppelin/contracts/access/Ownable.sol", - "node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol", - "node_modules/@openzeppelin/contracts/interfaces/IERC165.sol", - "node_modules/@openzeppelin/contracts/interfaces/IERC20.sol", - "node_modules/@openzeppelin/contracts/interfaces/draft-IERC6093.sol", - "node_modules/@openzeppelin/contracts/token/ERC20/ERC20.sol", - "node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol", - "node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol", - "node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol", - "node_modules/@openzeppelin/contracts/utils/Address.sol", - "node_modules/@openzeppelin/contracts/utils/Context.sol", - "node_modules/@openzeppelin/contracts/utils/Errors.sol", - "node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol" - ], - "versionRequirement": "^0.8.22", - "artifacts": { - "MyOFTMock": { - "0.8.22": { - "path": "MyOFTMock.sol/MyOFTMock.json", - "build_id": "15c57b83a95fe5a422295bb3f4778716" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/MessageLibBase.sol": { - "lastModificationDate": 1734587671044, - "contentHash": "0b85d555b2dac6680d32d9a06c865fdb", - "sourceName": "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/MessageLibBase.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [], - "versionRequirement": "^0.8.20", - "artifacts": { - "MessageLibBase": { - "0.8.22": { - "path": "MessageLibBase.sol/MessageLibBase.json", - "build_id": "8cf5046b276fd6c82474449fece4b596" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/ReceiveLibBaseE2.sol": { - "lastModificationDate": 1734587671044, - "contentHash": "fcd6771ac0e1bf4daa0afe7ea7a6147c", - "sourceName": "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/ReceiveLibBaseE2.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [ - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/MessageLibBase.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol", - "node_modules/@openzeppelin/contracts/utils/introspection/ERC165.sol", - "node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol" - ], - "versionRequirement": "^0.8.20", - "artifacts": { - "ReceiveLibBaseE2": { - "0.8.22": { - "path": "ReceiveLibBaseE2.sol/ReceiveLibBaseE2.json", - "build_id": "8cf5046b276fd6c82474449fece4b596" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/SendLibBase.sol": { - "lastModificationDate": 1734587671044, - "contentHash": "30e24e7ba40e38e1f6158f8b0cb58bbc", - "sourceName": "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/SendLibBase.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [ - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/MessageLibBase.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroExecutor.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroTreasury.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/libs/SafeCall.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Transfer.sol", - "node_modules/@openzeppelin/contracts/access/Ownable.sol", - "node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol", - "node_modules/@openzeppelin/contracts/interfaces/IERC165.sol", - "node_modules/@openzeppelin/contracts/interfaces/IERC20.sol", - "node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol", - "node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol", - "node_modules/@openzeppelin/contracts/utils/Address.sol", - "node_modules/@openzeppelin/contracts/utils/Context.sol", - "node_modules/@openzeppelin/contracts/utils/Errors.sol", - "node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol" - ], - "versionRequirement": "^0.8.20", - "artifacts": { - "SendLibBase": { - "0.8.22": { - "path": "SendLibBase.sol/SendLibBase.json", - "build_id": "8cf5046b276fd6c82474449fece4b596" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/SendLibBaseE2.sol": { - "lastModificationDate": 1734587671044, - "contentHash": "28156214103df87a44c6a17e0b6516f8", - "sourceName": "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/SendLibBaseE2.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [ - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/MessageLibBase.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/SendLibBase.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroExecutor.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroTreasury.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/libs/SafeCall.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Transfer.sol", - "node_modules/@openzeppelin/contracts/access/Ownable.sol", - "node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol", - "node_modules/@openzeppelin/contracts/interfaces/IERC165.sol", - "node_modules/@openzeppelin/contracts/interfaces/IERC20.sol", - "node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol", - "node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol", - "node_modules/@openzeppelin/contracts/utils/Address.sol", - "node_modules/@openzeppelin/contracts/utils/Context.sol", - "node_modules/@openzeppelin/contracts/utils/Errors.sol", - "node_modules/@openzeppelin/contracts/utils/introspection/ERC165.sol", - "node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol" - ], - "versionRequirement": "^0.8.20", - "artifacts": { - "SendLibBaseE2": { - "0.8.22": { - "path": "SendLibBaseE2.sol/SendLibBaseE2.json", - "build_id": "8cf5046b276fd6c82474449fece4b596" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IExecutor.sol": { - "lastModificationDate": 1734587671044, - "contentHash": "858de940d9da7bde1b49b548dde047b1", - "sourceName": "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IExecutor.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [ - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroExecutor.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroReadExecutor.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IWorker.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol" - ], - "versionRequirement": ">=0.8.0", - "artifacts": { - "IExecutor": { - "0.8.22": { - "path": "IExecutor.sol/IExecutor.json", - "build_id": "8cf5046b276fd6c82474449fece4b596" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IExecutorFeeLib.sol": { - "lastModificationDate": 1734587671044, - "contentHash": "99639689f646471c98f0e69da75cd98e", - "sourceName": "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IExecutorFeeLib.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [ - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IExecutor.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroExecutor.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroReadExecutor.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IWorker.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol" - ], - "versionRequirement": ">=0.8.0", - "artifacts": { - "IExecutorFeeLib": { - "0.8.22": { - "path": "IExecutorFeeLib.sol/IExecutorFeeLib.json", - "build_id": "8cf5046b276fd6c82474449fece4b596" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroExecutor.sol": { - "lastModificationDate": 1734587671044, - "contentHash": "d88dda6b54baa83df374c0c09d76303a", - "sourceName": "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroExecutor.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [], - "versionRequirement": ">=0.8.0", - "artifacts": { - "ILayerZeroExecutor": { - "0.8.22": { - "path": "ILayerZeroExecutor.sol/ILayerZeroExecutor.json", - "build_id": "8cf5046b276fd6c82474449fece4b596" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroPriceFeed.sol": { - "lastModificationDate": 1734587671044, - "contentHash": "27af5976b18aa1a57751e74fd29edb93", - "sourceName": "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroPriceFeed.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [], - "versionRequirement": ">=0.8.0", - "artifacts": { - "ILayerZeroPriceFeed": { - "0.8.22": { - "path": "ILayerZeroPriceFeed.sol/ILayerZeroPriceFeed.json", - "build_id": "8cf5046b276fd6c82474449fece4b596" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroReadExecutor.sol": { - "lastModificationDate": 1734587671044, - "contentHash": "8d8a3699cbb42b38efc7d42cb72df7d1", - "sourceName": "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroReadExecutor.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [], - "versionRequirement": ">=0.8.0", - "artifacts": { - "ILayerZeroReadExecutor": { - "0.8.22": { - "path": "ILayerZeroReadExecutor.sol/ILayerZeroReadExecutor.json", - "build_id": "8cf5046b276fd6c82474449fece4b596" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroTreasury.sol": { - "lastModificationDate": 1734587671044, - "contentHash": "ba0a95638eb5d1a06ec7d020b83e2989", - "sourceName": "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroTreasury.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [], - "versionRequirement": ">=0.8.0", - "artifacts": { - "ILayerZeroTreasury": { - "0.8.22": { - "path": "ILayerZeroTreasury.sol/ILayerZeroTreasury.json", - "build_id": "8cf5046b276fd6c82474449fece4b596" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IWorker.sol": { - "lastModificationDate": 1734587671045, - "contentHash": "dea42535acffea4d2bd1ec9681d88a1c", - "sourceName": "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IWorker.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [], - "versionRequirement": ">=0.8.0", - "artifacts": { - "IWorker": { - "0.8.22": { - "path": "IWorker.sol/IWorker.json", - "build_id": "8cf5046b276fd6c82474449fece4b596" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/libs/ExecutorOptions.sol": { - "lastModificationDate": 1734587671045, - "contentHash": "3f6e7baf384cd5e0749c85e482baab64", - "sourceName": "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/libs/ExecutorOptions.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [ - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/CalldataBytesLib.sol" - ], - "versionRequirement": "^0.8.20", - "artifacts": { - "ExecutorOptions": { - "0.8.22": { - "path": "ExecutorOptions.sol/ExecutorOptions.json", - "build_id": "8cf5046b276fd6c82474449fece4b596" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/libs/SafeCall.sol": { - "lastModificationDate": 1734587671045, - "contentHash": "6bcbea64901aae43d392623f058bc624", - "sourceName": "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/libs/SafeCall.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [], - "versionRequirement": "^0.8.20", - "artifacts": { - "SafeCall": { - "0.8.22": { - "path": "SafeCall.sol/SafeCall.json", - "build_id": "8cf5046b276fd6c82474449fece4b596" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/ReceiveUlnBase.sol": { - "lastModificationDate": 1734587671045, - "contentHash": "b3fc36971e46b0709bbdbd9dc341bd73", - "sourceName": "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/ReceiveUlnBase.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [ - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/UlnBase.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol", - "node_modules/@openzeppelin/contracts/access/Ownable.sol", - "node_modules/@openzeppelin/contracts/utils/Context.sol", - "node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol" - ], - "versionRequirement": "^0.8.20", - "artifacts": { - "ReceiveUlnBase": { - "0.8.22": { - "path": "ReceiveUlnBase.sol/ReceiveUlnBase.json", - "build_id": "8cf5046b276fd6c82474449fece4b596" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/SendUlnBase.sol": { - "lastModificationDate": 1734587671045, - "contentHash": "79610eb602a1f933a9d63008bfa16bbf", - "sourceName": "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/SendUlnBase.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [ - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/MessageLibBase.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/SendLibBase.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroExecutor.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroTreasury.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/libs/SafeCall.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/UlnBase.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/ILayerZeroDVN.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/DVNOptions.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/UlnOptions.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/CalldataBytesLib.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Transfer.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/BitMaps.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/ExecutorOptions.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol", - "node_modules/@openzeppelin/contracts/access/Ownable.sol", - "node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol", - "node_modules/@openzeppelin/contracts/interfaces/IERC165.sol", - "node_modules/@openzeppelin/contracts/interfaces/IERC20.sol", - "node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol", - "node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol", - "node_modules/@openzeppelin/contracts/utils/Address.sol", - "node_modules/@openzeppelin/contracts/utils/Context.sol", - "node_modules/@openzeppelin/contracts/utils/Errors.sol", - "node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol", - "node_modules/@openzeppelin/contracts/utils/math/SafeCast.sol", - "node_modules/solidity-bytes-utils/contracts/BytesLib.sol" - ], - "versionRequirement": "^0.8.20", - "artifacts": { - "SendUlnBase": { - "0.8.22": { - "path": "SendUlnBase.sol/SendUlnBase.json", - "build_id": "8cf5046b276fd6c82474449fece4b596" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/UlnBase.sol": { - "lastModificationDate": 1734587671045, - "contentHash": "d0bf2c381067a9c43c25b2b1e36e1a0e", - "sourceName": "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/UlnBase.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [ - "node_modules/@openzeppelin/contracts/access/Ownable.sol", - "node_modules/@openzeppelin/contracts/utils/Context.sol" - ], - "versionRequirement": "^0.8.20", - "artifacts": { - "UlnBase": { - "0.8.22": { - "path": "UlnBase.sol/UlnBase.json", - "build_id": "8cf5046b276fd6c82474449fece4b596" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IDVN.sol": { - "lastModificationDate": 1734587671047, - "contentHash": "65b0d0b3468b6d063592cc863452d977", - "sourceName": "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IDVN.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [ - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IWorker.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/ILayerZeroDVN.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/ILayerZeroReadDVN.sol" - ], - "versionRequirement": ">=0.8.0", - "artifacts": { - "IDVN": { - "0.8.22": { - "path": "IDVN.sol/IDVN.json", - "build_id": "8cf5046b276fd6c82474449fece4b596" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IDVNFeeLib.sol": { - "lastModificationDate": 1734587671047, - "contentHash": "dc8cc7fb359caf112256286c53278fa8", - "sourceName": "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IDVNFeeLib.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [ - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IWorker.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IDVN.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/ILayerZeroDVN.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/ILayerZeroReadDVN.sol" - ], - "versionRequirement": ">=0.8.0", - "artifacts": { - "IDVNFeeLib": { - "0.8.22": { - "path": "IDVNFeeLib.sol/IDVNFeeLib.json", - "build_id": "8cf5046b276fd6c82474449fece4b596" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/ILayerZeroDVN.sol": { - "lastModificationDate": 1734587671047, - "contentHash": "07d809b468afad318aa1bdd958a6909a", - "sourceName": "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/ILayerZeroDVN.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [], - "versionRequirement": ">=0.8.0", - "artifacts": { - "ILayerZeroDVN": { - "0.8.22": { - "path": "ILayerZeroDVN.sol/ILayerZeroDVN.json", - "build_id": "8cf5046b276fd6c82474449fece4b596" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/ILayerZeroReadDVN.sol": { - "lastModificationDate": 1734587671047, - "contentHash": "9c580377c4d65761ee7c745e091eebce", - "sourceName": "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/ILayerZeroReadDVN.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [], - "versionRequirement": ">=0.8.0", - "artifacts": { - "ILayerZeroReadDVN": { - "0.8.22": { - "path": "ILayerZeroReadDVN.sol/ILayerZeroReadDVN.json", - "build_id": "8cf5046b276fd6c82474449fece4b596" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IReceiveUlnE2.sol": { - "lastModificationDate": 1734587671047, - "contentHash": "cd1037d3b9fc4e036d621778391b80f6", - "sourceName": "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IReceiveUlnE2.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [], - "versionRequirement": ">=0.8.0", - "artifacts": { - "IReceiveUlnE2": { - "0.8.22": { - "path": "IReceiveUlnE2.sol/IReceiveUlnE2.json", - "build_id": "8cf5046b276fd6c82474449fece4b596" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/DVNOptions.sol": { - "lastModificationDate": 1734587671047, - "contentHash": "d2b1c66f564862f65b37230b44da37c0", - "sourceName": "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/DVNOptions.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [ - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/CalldataBytesLib.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/BitMaps.sol", - "node_modules/solidity-bytes-utils/contracts/BytesLib.sol" - ], - "versionRequirement": "^0.8.20", - "artifacts": { - "DVNOptions": { - "0.8.22": { - "path": "DVNOptions.sol/DVNOptions.json", - "build_id": "8cf5046b276fd6c82474449fece4b596" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/ReadCmdCodecV1.sol": { - "lastModificationDate": 1734587671047, - "contentHash": "d423f12abbb7ca043aeb62444ded5431", - "sourceName": "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/ReadCmdCodecV1.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [ - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/SupportedCmdTypes.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/BitMaps.sol" - ], - "versionRequirement": "^0.8.20", - "artifacts": { - "ReadCmdCodecV1": { - "0.8.22": { - "path": "ReadCmdCodecV1.sol/ReadCmdCodecV1.json", - "build_id": "8cf5046b276fd6c82474449fece4b596" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/SupportedCmdTypes.sol": { - "lastModificationDate": 1734587671047, - "contentHash": "59d5fc012288202ddf31d903eb995b8b", - "sourceName": "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/SupportedCmdTypes.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [ - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/BitMaps.sol" - ], - "versionRequirement": "^0.8.20", - "artifacts": { - "SupportedCmdTypesLib": { - "0.8.22": { - "path": "SupportedCmdTypes.sol/SupportedCmdTypesLib.json", - "build_id": "8cf5046b276fd6c82474449fece4b596" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/UlnOptions.sol": { - "lastModificationDate": 1734587671047, - "contentHash": "20cecbf89aebfddf23ef52f007923f1e", - "sourceName": "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/UlnOptions.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [ - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/DVNOptions.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/CalldataBytesLib.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/BitMaps.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/ExecutorOptions.sol", - "node_modules/@openzeppelin/contracts/utils/math/SafeCast.sol", - "node_modules/solidity-bytes-utils/contracts/BytesLib.sol" - ], - "versionRequirement": "^0.8.20", - "artifacts": { - "UlnOptions": { - "0.8.22": { - "path": "UlnOptions.sol/UlnOptions.json", - "build_id": "8cf5046b276fd6c82474449fece4b596" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/readlib/ReadLibBase.sol": { - "lastModificationDate": 1734587671047, - "contentHash": "b5778918cebe480dced00c80a2435a11", - "sourceName": "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/readlib/ReadLibBase.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [ - "node_modules/@openzeppelin/contracts/access/Ownable.sol", - "node_modules/@openzeppelin/contracts/utils/Context.sol" - ], - "versionRequirement": "^0.8.20", - "artifacts": { - "ReadLibBase": { - "0.8.22": { - "path": "ReadLibBase.sol/ReadLibBase.json", - "build_id": "8cf5046b276fd6c82474449fece4b596" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/uln301/interfaces/IUltraLightNode301.sol": { - "lastModificationDate": 1734587671048, - "contentHash": "b20983558d7c8d45f11da14677f23d6a", - "sourceName": "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/uln301/interfaces/IUltraLightNode301.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [], - "versionRequirement": ">=0.8.0", - "artifacts": { - "IUltraLightNode301": { - "0.8.22": { - "path": "IUltraLightNode301.sol/IUltraLightNode301.json", - "build_id": "8cf5046b276fd6c82474449fece4b596" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessageLibManager.sol": { - "lastModificationDate": 1734587671046, - "contentHash": "4f5f36e689708230ec967622c4ef3d03", - "sourceName": "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessageLibManager.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [ - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Errors.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/BlockedMessageLib.sol", - "node_modules/@openzeppelin/contracts/access/Ownable.sol", - "node_modules/@openzeppelin/contracts/utils/Context.sol", - "node_modules/@openzeppelin/contracts/utils/introspection/ERC165.sol", - "node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol" - ], - "versionRequirement": "^0.8.20", - "artifacts": { - "MessageLibManager": { - "0.8.22": { - "path": "MessageLibManager.sol/MessageLibManager.json", - "build_id": "8cf5046b276fd6c82474449fece4b596" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingChannel.sol": { - "lastModificationDate": 1734587671046, - "contentHash": "9acc959d357ae787217de4696d57169a", - "sourceName": "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingChannel.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [ - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Errors.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/GUID.sol" - ], - "versionRequirement": "^0.8.20", - "artifacts": { - "MessagingChannel": { - "0.8.22": { - "path": "MessagingChannel.sol/MessagingChannel.json", - "build_id": "8cf5046b276fd6c82474449fece4b596" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingComposer.sol": { - "lastModificationDate": 1734587671046, - "contentHash": "d0c63dabf34e7f59198338f436826cfd", - "sourceName": "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingComposer.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [ - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroComposer.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Errors.sol" - ], - "versionRequirement": "^0.8.20", - "artifacts": { - "MessagingComposer": { - "0.8.22": { - "path": "MessagingComposer.sol/MessagingComposer.json", - "build_id": "8cf5046b276fd6c82474449fece4b596" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingContext.sol": { - "lastModificationDate": 1734587671046, - "contentHash": "60c0bd581632272ab475f236282b70b0", - "sourceName": "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingContext.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [ - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Errors.sol" - ], - "versionRequirement": "^0.8.20", - "artifacts": { - "MessagingContext": { - "0.8.22": { - "path": "MessagingContext.sol/MessagingContext.json", - "build_id": "8cf5046b276fd6c82474449fece4b596" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroComposer.sol": { - "lastModificationDate": 1734587671046, - "contentHash": "a76caf341995ff795f5d0a19ffadf359", - "sourceName": "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroComposer.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [], - "versionRequirement": ">=0.8.0", - "artifacts": { - "ILayerZeroComposer": { - "0.8.22": { - "path": "ILayerZeroComposer.sol/ILayerZeroComposer.json", - "build_id": "8cf5046b276fd6c82474449fece4b596" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol": { - "lastModificationDate": 1734587671046, - "contentHash": "0790766778fa8995935c093d9cf03f84", - "sourceName": "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [ - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol" - ], - "versionRequirement": ">=0.8.0", - "artifacts": { - "ILayerZeroEndpointV2": { - "0.8.22": { - "path": "ILayerZeroEndpointV2.sol/ILayerZeroEndpointV2.json", - "build_id": "15c57b83a95fe5a422295bb3f4778716" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol": { - "lastModificationDate": 1734587671046, - "contentHash": "07bcbc5377578339628265a849de70f5", - "sourceName": "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [ - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol" - ], - "versionRequirement": ">=0.8.0", - "artifacts": { - "ILayerZeroReceiver": { - "0.8.22": { - "path": "ILayerZeroReceiver.sol/ILayerZeroReceiver.json", - "build_id": "15c57b83a95fe5a422295bb3f4778716" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol": { - "lastModificationDate": 1734587671046, - "contentHash": "fa5082ec9a32dc00ab9dd5f759f3a756", - "sourceName": "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [ - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol", - "node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol" - ], - "versionRequirement": ">=0.8.0", - "artifacts": { - "IMessageLib": { - "0.8.22": { - "path": "IMessageLib.sol/IMessageLib.json", - "build_id": "15c57b83a95fe5a422295bb3f4778716" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol": { - "lastModificationDate": 1734587671046, - "contentHash": "a56a887b2721a98cf82842503bbf0ef0", - "sourceName": "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [], - "versionRequirement": ">=0.8.0", - "artifacts": { - "IMessageLibManager": { - "0.8.22": { - "path": "IMessageLibManager.sol/IMessageLibManager.json", - "build_id": "15c57b83a95fe5a422295bb3f4778716" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol": { - "lastModificationDate": 1734587671046, - "contentHash": "bd92a8f1c9f815025e8e3e676fe40b0d", - "sourceName": "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [], - "versionRequirement": ">=0.8.0", - "artifacts": { - "IMessagingChannel": { - "0.8.22": { - "path": "IMessagingChannel.sol/IMessagingChannel.json", - "build_id": "15c57b83a95fe5a422295bb3f4778716" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol": { - "lastModificationDate": 1734587671046, - "contentHash": "bcc2df90697b23f02303892874f96324", - "sourceName": "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [], - "versionRequirement": ">=0.8.0", - "artifacts": { - "IMessagingComposer": { - "0.8.22": { - "path": "IMessagingComposer.sol/IMessagingComposer.json", - "build_id": "15c57b83a95fe5a422295bb3f4778716" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol": { - "lastModificationDate": 1734587671046, - "contentHash": "2b8bfa473f049af8c74dffbff0766abf", - "sourceName": "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [], - "versionRequirement": ">=0.8.0", - "artifacts": { - "IMessagingContext": { - "0.8.22": { - "path": "IMessagingContext.sol/IMessagingContext.json", - "build_id": "15c57b83a95fe5a422295bb3f4778716" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol": { - "lastModificationDate": 1734587671046, - "contentHash": "2ed59a174607c55048374a27816752aa", - "sourceName": "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [ - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol", - "node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol" - ], - "versionRequirement": ">=0.8.0", - "artifacts": { - "ISendLib": { - "0.8.22": { - "path": "ISendLib.sol/ISendLib.json", - "build_id": "15c57b83a95fe5a422295bb3f4778716" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol": { - "lastModificationDate": 1734587671046, - "contentHash": "4ede58e59ea7779e777942a5da252697", - "sourceName": "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [], - "versionRequirement": "^0.8.20", - "artifacts": { - "AddressCast": { - "0.8.22": { - "path": "AddressCast.sol/AddressCast.json", - "build_id": "15c57b83a95fe5a422295bb3f4778716" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/CalldataBytesLib.sol": { - "lastModificationDate": 1734587671046, - "contentHash": "673ca16094a43c577ed24243c20361aa", - "sourceName": "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/CalldataBytesLib.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [], - "versionRequirement": "^0.8.20", - "artifacts": { - "CalldataBytesLib": { - "0.8.22": { - "path": "CalldataBytesLib.sol/CalldataBytesLib.json", - "build_id": "8cf5046b276fd6c82474449fece4b596" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Errors.sol": { - "lastModificationDate": 1734587671046, - "contentHash": "5e30d65ecaa3b73c091bd32a32573cba", - "sourceName": "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Errors.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [], - "versionRequirement": "^0.8.20", - "artifacts": { - "Errors": { - "0.8.22": { - "path": "libs/Errors.sol/Errors.json", - "build_id": "8cf5046b276fd6c82474449fece4b596" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/GUID.sol": { - "lastModificationDate": 1734587671046, - "contentHash": "664c7211dae3441b1ab2ccccbd62eef4", - "sourceName": "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/GUID.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [ - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol" - ], - "versionRequirement": "^0.8.20", - "artifacts": { - "GUID": { - "0.8.22": { - "path": "GUID.sol/GUID.json", - "build_id": "8cf5046b276fd6c82474449fece4b596" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Transfer.sol": { - "lastModificationDate": 1734587671046, - "contentHash": "0762bff24288fb82803c259e336cfa6f", - "sourceName": "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Transfer.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [ - "node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol", - "node_modules/@openzeppelin/contracts/interfaces/IERC165.sol", - "node_modules/@openzeppelin/contracts/interfaces/IERC20.sol", - "node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol", - "node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol", - "node_modules/@openzeppelin/contracts/utils/Address.sol", - "node_modules/@openzeppelin/contracts/utils/Errors.sol", - "node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol" - ], - "versionRequirement": "^0.8.20", - "artifacts": { - "Transfer": { - "0.8.22": { - "path": "Transfer.sol/Transfer.json", - "build_id": "8cf5046b276fd6c82474449fece4b596" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/BlockedMessageLib.sol": { - "lastModificationDate": 1734587671046, - "contentHash": "22ae1b35c61bd0b7628db85c1b519702", - "sourceName": "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/BlockedMessageLib.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [ - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Errors.sol", - "node_modules/@openzeppelin/contracts/utils/introspection/ERC165.sol", - "node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol" - ], - "versionRequirement": "^0.8.20", - "artifacts": { - "BlockedMessageLib": { - "0.8.22": { - "path": "BlockedMessageLib.sol/BlockedMessageLib.json", - "build_id": "8cf5046b276fd6c82474449fece4b596" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/BitMaps.sol": { - "lastModificationDate": 1734587671046, - "contentHash": "b2d6a04de0dde1607086d9872aac790e", - "sourceName": "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/BitMaps.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [], - "versionRequirement": "^0.8.20", - "artifacts": { - "BitMaps": { - "0.8.22": { - "path": "BitMaps.sol/BitMaps.json", - "build_id": "8cf5046b276fd6c82474449fece4b596" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/ExecutorOptions.sol": { - "lastModificationDate": 1734587671046, - "contentHash": "d9e985d1c5d407ba110da010983bcfb6", - "sourceName": "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/ExecutorOptions.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [ - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/CalldataBytesLib.sol" - ], - "versionRequirement": "^0.8.20", - "artifacts": { - "ExecutorOptions": { - "0.8.22": { - "path": "libs/ExecutorOptions.sol/ExecutorOptions.json", - "build_id": "8cf5046b276fd6c82474449fece4b596" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol": { - "lastModificationDate": 1734587671046, - "contentHash": "fb446531f87e319bbe661e5d6845964f", - "sourceName": "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [ - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol", - "node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol" - ], - "versionRequirement": "^0.8.20", - "artifacts": { - "PacketV1Codec": { - "0.8.22": { - "path": "PacketV1Codec.sol/PacketV1Codec.json", - "build_id": "15c57b83a95fe5a422295bb3f4778716" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@layerzerolabs/lz-evm-v1-0.7/contracts/interfaces/ILayerZeroUltraLightNodeV2.sol": { - "lastModificationDate": 1734587671617, - "contentHash": "4e122d9c2f1e115ebed5643a0eebfba1", - "sourceName": "node_modules/@layerzerolabs/lz-evm-v1-0.7/contracts/interfaces/ILayerZeroUltraLightNodeV2.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [], - "versionRequirement": ">=0.7.0", - "artifacts": { - "ILayerZeroUltraLightNodeV2": { - "0.8.22": { - "path": "ILayerZeroUltraLightNodeV2.sol/ILayerZeroUltraLightNodeV2.json", - "build_id": "8cf5046b276fd6c82474449fece4b596" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OApp.sol": { - "lastModificationDate": 1734057540873, - "contentHash": "5fff81a48e0699606f1ee7387d4a31a2", - "sourceName": "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OApp.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [ - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol", - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppCore.sol", - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppReceiver.sol", - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppSender.sol", - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppCore.sol", - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppReceiver.sol", - "node_modules/@openzeppelin/contracts/access/Ownable.sol", - "node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol", - "node_modules/@openzeppelin/contracts/interfaces/IERC165.sol", - "node_modules/@openzeppelin/contracts/interfaces/IERC20.sol", - "node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol", - "node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol", - "node_modules/@openzeppelin/contracts/utils/Address.sol", - "node_modules/@openzeppelin/contracts/utils/Context.sol", - "node_modules/@openzeppelin/contracts/utils/Errors.sol", - "node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol" - ], - "versionRequirement": "^0.8.20", - "artifacts": { - "OApp": { - "0.8.22": { - "path": "OApp.sol/OApp.json", - "build_id": "15c57b83a95fe5a422295bb3f4778716" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppCore.sol": { - "lastModificationDate": 1734057540873, - "contentHash": "392cf9b920add3244966148ee8de682a", - "sourceName": "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppCore.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [ - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol", - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppCore.sol", - "node_modules/@openzeppelin/contracts/access/Ownable.sol", - "node_modules/@openzeppelin/contracts/utils/Context.sol" - ], - "versionRequirement": "^0.8.20", - "artifacts": { - "OAppCore": { - "0.8.22": { - "path": "OAppCore.sol/OAppCore.json", - "build_id": "15c57b83a95fe5a422295bb3f4778716" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppReceiver.sol": { - "lastModificationDate": 1734057540873, - "contentHash": "3621393509939962dd64af436aa5d131", - "sourceName": "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppReceiver.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [ - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol", - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppCore.sol", - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppCore.sol", - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppReceiver.sol", - "node_modules/@openzeppelin/contracts/access/Ownable.sol", - "node_modules/@openzeppelin/contracts/utils/Context.sol" - ], - "versionRequirement": "^0.8.20", - "artifacts": { - "OAppReceiver": { - "0.8.22": { - "path": "OAppReceiver.sol/OAppReceiver.json", - "build_id": "15c57b83a95fe5a422295bb3f4778716" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppSender.sol": { - "lastModificationDate": 1734057540873, - "contentHash": "8a54c076d80f5711e3511a0bbfcff1a1", - "sourceName": "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppSender.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [ - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol", - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppCore.sol", - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppCore.sol", - "node_modules/@openzeppelin/contracts/access/Ownable.sol", - "node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol", - "node_modules/@openzeppelin/contracts/interfaces/IERC165.sol", - "node_modules/@openzeppelin/contracts/interfaces/IERC20.sol", - "node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol", - "node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol", - "node_modules/@openzeppelin/contracts/utils/Address.sol", - "node_modules/@openzeppelin/contracts/utils/Context.sol", - "node_modules/@openzeppelin/contracts/utils/Errors.sol", - "node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol" - ], - "versionRequirement": "^0.8.20", - "artifacts": { - "OAppSender": { - "0.8.22": { - "path": "OAppSender.sol/OAppSender.json", - "build_id": "15c57b83a95fe5a422295bb3f4778716" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppComposer.sol": { - "lastModificationDate": 1734057540873, - "contentHash": "7480368993edb51cc1923e51d471908d", - "sourceName": "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppComposer.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [ - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroComposer.sol" - ], - "versionRequirement": "^0.8.20", - "artifacts": { - "IOAppComposer": { - "0.8.22": { - "path": "IOAppComposer.sol/IOAppComposer.json", - "build_id": "8cf5046b276fd6c82474449fece4b596" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppCore.sol": { - "lastModificationDate": 1734057540873, - "contentHash": "f88e6ddf8ff977739a7178f0d1a276b3", - "sourceName": "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppCore.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [ - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol" - ], - "versionRequirement": "^0.8.20", - "artifacts": { - "IOAppCore": { - "0.8.22": { - "path": "IOAppCore.sol/IOAppCore.json", - "build_id": "15c57b83a95fe5a422295bb3f4778716" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppMsgInspector.sol": { - "lastModificationDate": 1734057540873, - "contentHash": "863511afe66a3ac0c83b469e7ca6cfb4", - "sourceName": "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppMsgInspector.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [], - "versionRequirement": "^0.8.20", - "artifacts": { - "IOAppMsgInspector": { - "0.8.22": { - "path": "IOAppMsgInspector.sol/IOAppMsgInspector.json", - "build_id": "15c57b83a95fe5a422295bb3f4778716" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppOptionsType3.sol": { - "lastModificationDate": 1734057540873, - "contentHash": "3b509d38279da870d798ed7039cfaf62", - "sourceName": "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppOptionsType3.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [], - "versionRequirement": "^0.8.20", - "artifacts": { - "IOAppOptionsType3": { - "0.8.22": { - "path": "IOAppOptionsType3.sol/IOAppOptionsType3.json", - "build_id": "15c57b83a95fe5a422295bb3f4778716" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppReceiver.sol": { - "lastModificationDate": 1734057540873, - "contentHash": "8744fbd8f6967b21443fddfccede3f1e", - "sourceName": "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppReceiver.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [ - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol" - ], - "versionRequirement": "^0.8.20", - "artifacts": { - "IOAppReceiver": { - "0.8.22": { - "path": "IOAppReceiver.sol/IOAppReceiver.json", - "build_id": "15c57b83a95fe5a422295bb3f4778716" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/libs/OAppOptionsType3.sol": { - "lastModificationDate": 1734057540873, - "contentHash": "d7df5d5ca30b9eb573ed7d9b73dd8eda", - "sourceName": "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/libs/OAppOptionsType3.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [ - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppOptionsType3.sol", - "node_modules/@openzeppelin/contracts/access/Ownable.sol", - "node_modules/@openzeppelin/contracts/utils/Context.sol" - ], - "versionRequirement": "^0.8.20", - "artifacts": { - "OAppOptionsType3": { - "0.8.22": { - "path": "OAppOptionsType3.sol/OAppOptionsType3.json", - "build_id": "15c57b83a95fe5a422295bb3f4778716" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/libs/OptionsBuilder.sol": { - "lastModificationDate": 1734057540873, - "contentHash": "95cf6ed40e90cf1a748bcd76d6f5c849", - "sourceName": "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/libs/OptionsBuilder.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [ - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/libs/ExecutorOptions.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/DVNOptions.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/CalldataBytesLib.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/BitMaps.sol", - "node_modules/@openzeppelin/contracts/utils/math/SafeCast.sol", - "node_modules/solidity-bytes-utils/contracts/BytesLib.sol" - ], - "versionRequirement": "^0.8.20", - "artifacts": { - "OptionsBuilder": { - "0.8.22": { - "path": "OptionsBuilder.sol/OptionsBuilder.json", - "build_id": "8cf5046b276fd6c82474449fece4b596" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/precrime/OAppPreCrimeSimulator.sol": { - "lastModificationDate": 1734057540873, - "contentHash": "d803f2d59e6fcf81c071239983389479", - "sourceName": "node_modules/@layerzerolabs/oapp-evm/contracts/precrime/OAppPreCrimeSimulator.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [ - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol", - "node_modules/@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IOAppPreCrimeSimulator.sol", - "node_modules/@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IPreCrime.sol", - "node_modules/@layerzerolabs/oapp-evm/contracts/precrime/libs/Packet.sol", - "node_modules/@openzeppelin/contracts/access/Ownable.sol", - "node_modules/@openzeppelin/contracts/utils/Context.sol", - "node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol" - ], - "versionRequirement": "^0.8.20", - "artifacts": { - "OAppPreCrimeSimulator": { - "0.8.22": { - "path": "OAppPreCrimeSimulator.sol/OAppPreCrimeSimulator.json", - "build_id": "15c57b83a95fe5a422295bb3f4778716" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IOAppPreCrimeSimulator.sol": { - "lastModificationDate": 1734057540874, - "contentHash": "acca130251942a833f49ab69e01bcd42", - "sourceName": "node_modules/@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IOAppPreCrimeSimulator.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [ - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol", - "node_modules/@layerzerolabs/oapp-evm/contracts/precrime/libs/Packet.sol", - "node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol" - ], - "versionRequirement": "^0.8.20", - "artifacts": { - "IOAppPreCrimeSimulator": { - "0.8.22": { - "path": "IOAppPreCrimeSimulator.sol/IOAppPreCrimeSimulator.json", - "build_id": "15c57b83a95fe5a422295bb3f4778716" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IPreCrime.sol": { - "lastModificationDate": 1734057540874, - "contentHash": "636408a0c09893cda2e9d23ceec10459", - "sourceName": "node_modules/@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IPreCrime.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [], - "versionRequirement": "^0.8.20", - "artifacts": { - "IPreCrime": { - "0.8.22": { - "path": "IPreCrime.sol/IPreCrime.json", - "build_id": "15c57b83a95fe5a422295bb3f4778716" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/precrime/libs/Packet.sol": { - "lastModificationDate": 1734057540874, - "contentHash": "49f5ad0a97a1acc3e81873e69b0ef3ab", - "sourceName": "node_modules/@layerzerolabs/oapp-evm/contracts/precrime/libs/Packet.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [ - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol", - "node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol" - ], - "versionRequirement": "^0.8.20", - "artifacts": { - "PacketDecoder": { - "0.8.22": { - "path": "Packet.sol/PacketDecoder.json", - "build_id": "15c57b83a95fe5a422295bb3f4778716" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@layerzerolabs/oft-evm/contracts/OFT.sol": { - "lastModificationDate": 1734057540877, - "contentHash": "d3478162b3e0baf2d1efac39c19ca535", - "sourceName": "node_modules/@layerzerolabs/oft-evm/contracts/OFT.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [ - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol", - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OApp.sol", - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppCore.sol", - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppReceiver.sol", - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppSender.sol", - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppCore.sol", - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppMsgInspector.sol", - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppOptionsType3.sol", - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppReceiver.sol", - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/libs/OAppOptionsType3.sol", - "node_modules/@layerzerolabs/oapp-evm/contracts/precrime/OAppPreCrimeSimulator.sol", - "node_modules/@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IOAppPreCrimeSimulator.sol", - "node_modules/@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IPreCrime.sol", - "node_modules/@layerzerolabs/oapp-evm/contracts/precrime/libs/Packet.sol", - "node_modules/@layerzerolabs/oft-evm/contracts/OFTCore.sol", - "node_modules/@layerzerolabs/oft-evm/contracts/interfaces/IOFT.sol", - "node_modules/@layerzerolabs/oft-evm/contracts/libs/OFTComposeMsgCodec.sol", - "node_modules/@layerzerolabs/oft-evm/contracts/libs/OFTMsgCodec.sol", - "node_modules/@openzeppelin/contracts/access/Ownable.sol", - "node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol", - "node_modules/@openzeppelin/contracts/interfaces/IERC165.sol", - "node_modules/@openzeppelin/contracts/interfaces/IERC20.sol", - "node_modules/@openzeppelin/contracts/interfaces/draft-IERC6093.sol", - "node_modules/@openzeppelin/contracts/token/ERC20/ERC20.sol", - "node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol", - "node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol", - "node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol", - "node_modules/@openzeppelin/contracts/utils/Address.sol", - "node_modules/@openzeppelin/contracts/utils/Context.sol", - "node_modules/@openzeppelin/contracts/utils/Errors.sol", - "node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol" - ], - "versionRequirement": "^0.8.20", - "artifacts": { - "OFT": { - "0.8.22": { - "path": "OFT.sol/OFT.json", - "build_id": "15c57b83a95fe5a422295bb3f4778716" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@layerzerolabs/oft-evm/contracts/OFTCore.sol": { - "lastModificationDate": 1734057540877, - "contentHash": "4b180c26729550e04c0476e8ead14b04", - "sourceName": "node_modules/@layerzerolabs/oft-evm/contracts/OFTCore.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [ - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol", - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OApp.sol", - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppCore.sol", - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppReceiver.sol", - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppSender.sol", - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppCore.sol", - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppMsgInspector.sol", - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppOptionsType3.sol", - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppReceiver.sol", - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/libs/OAppOptionsType3.sol", - "node_modules/@layerzerolabs/oapp-evm/contracts/precrime/OAppPreCrimeSimulator.sol", - "node_modules/@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IOAppPreCrimeSimulator.sol", - "node_modules/@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IPreCrime.sol", - "node_modules/@layerzerolabs/oapp-evm/contracts/precrime/libs/Packet.sol", - "node_modules/@layerzerolabs/oft-evm/contracts/interfaces/IOFT.sol", - "node_modules/@layerzerolabs/oft-evm/contracts/libs/OFTComposeMsgCodec.sol", - "node_modules/@layerzerolabs/oft-evm/contracts/libs/OFTMsgCodec.sol", - "node_modules/@openzeppelin/contracts/access/Ownable.sol", - "node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol", - "node_modules/@openzeppelin/contracts/interfaces/IERC165.sol", - "node_modules/@openzeppelin/contracts/interfaces/IERC20.sol", - "node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol", - "node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol", - "node_modules/@openzeppelin/contracts/utils/Address.sol", - "node_modules/@openzeppelin/contracts/utils/Context.sol", - "node_modules/@openzeppelin/contracts/utils/Errors.sol", - "node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol" - ], - "versionRequirement": "^0.8.20", - "artifacts": { - "OFTCore": { - "0.8.22": { - "path": "OFTCore.sol/OFTCore.json", - "build_id": "15c57b83a95fe5a422295bb3f4778716" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@layerzerolabs/oft-evm/contracts/interfaces/IOFT.sol": { - "lastModificationDate": 1734057540877, - "contentHash": "35da653ffbbfbf5f8b04d87b67896722", - "sourceName": "node_modules/@layerzerolabs/oft-evm/contracts/interfaces/IOFT.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [ - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol", - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppCore.sol", - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppSender.sol", - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppCore.sol", - "node_modules/@openzeppelin/contracts/access/Ownable.sol", - "node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol", - "node_modules/@openzeppelin/contracts/interfaces/IERC165.sol", - "node_modules/@openzeppelin/contracts/interfaces/IERC20.sol", - "node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol", - "node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol", - "node_modules/@openzeppelin/contracts/utils/Address.sol", - "node_modules/@openzeppelin/contracts/utils/Context.sol", - "node_modules/@openzeppelin/contracts/utils/Errors.sol", - "node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol" - ], - "versionRequirement": "^0.8.20", - "artifacts": { - "IOFT": { - "0.8.22": { - "path": "IOFT.sol/IOFT.json", - "build_id": "15c57b83a95fe5a422295bb3f4778716" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@layerzerolabs/oft-evm/contracts/libs/OFTComposeMsgCodec.sol": { - "lastModificationDate": 1734057540877, - "contentHash": "f564a58fe800856f223a9dfc0f806d07", - "sourceName": "node_modules/@layerzerolabs/oft-evm/contracts/libs/OFTComposeMsgCodec.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [], - "versionRequirement": "^0.8.20", - "artifacts": { - "OFTComposeMsgCodec": { - "0.8.22": { - "path": "OFTComposeMsgCodec.sol/OFTComposeMsgCodec.json", - "build_id": "15c57b83a95fe5a422295bb3f4778716" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@layerzerolabs/oft-evm/contracts/libs/OFTMsgCodec.sol": { - "lastModificationDate": 1734057540877, - "contentHash": "721d3e26148a5d6794537302ed308863", - "sourceName": "node_modules/@layerzerolabs/oft-evm/contracts/libs/OFTMsgCodec.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [], - "versionRequirement": "^0.8.20", - "artifacts": { - "OFTMsgCodec": { - "0.8.22": { - "path": "OFTMsgCodec.sol/OFTMsgCodec.json", - "build_id": "15c57b83a95fe5a422295bb3f4778716" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/OptionsHelper.sol": { - "lastModificationDate": 1734057540884, - "contentHash": "350e0cc3f7bb78f8aa019d88d3097727", - "sourceName": "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/OptionsHelper.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [ - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/libs/ExecutorOptions.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/DVNOptions.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/UlnOptions.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/CalldataBytesLib.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/BitMaps.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/ExecutorOptions.sol", - "node_modules/@openzeppelin/contracts/utils/math/SafeCast.sol", - "node_modules/solidity-bytes-utils/contracts/BytesLib.sol" - ], - "versionRequirement": "^0.8.0", - "artifacts": { - "OptionsHelper": { - "0.8.22": { - "path": "OptionsHelper.sol/OptionsHelper.json", - "build_id": "8cf5046b276fd6c82474449fece4b596" - } - }, - "UlnOptionsMock": { - "0.8.22": { - "path": "OptionsHelper.sol/UlnOptionsMock.json", - "build_id": "8cf5046b276fd6c82474449fece4b596" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/TestHelperOz5.sol": { - "lastModificationDate": 1734057540884, - "contentHash": "33d2e7fb59ee0a5e42d731556a4e43f0", - "sourceName": "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/TestHelperOz5.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [ - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/MessageLibBase.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/ReceiveLibBaseE2.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/SendLibBase.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/SendLibBaseE2.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IExecutor.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IExecutorFeeLib.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroExecutor.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroPriceFeed.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroReadExecutor.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroTreasury.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IWorker.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/libs/ExecutorOptions.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/libs/SafeCall.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/ReceiveUlnBase.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/SendUlnBase.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/UlnBase.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IDVN.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IDVNFeeLib.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/ILayerZeroDVN.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/ILayerZeroReadDVN.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IReceiveUlnE2.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/DVNOptions.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/ReadCmdCodecV1.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/SupportedCmdTypes.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/UlnOptions.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/readlib/ReadLibBase.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/uln301/interfaces/IUltraLightNode301.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessageLibManager.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingChannel.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingComposer.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingContext.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroComposer.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/CalldataBytesLib.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Errors.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/GUID.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Transfer.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/BlockedMessageLib.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/BitMaps.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/ExecutorOptions.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol", - "node_modules/@layerzerolabs/lz-evm-v1-0.7/contracts/interfaces/ILayerZeroUltraLightNodeV2.sol", - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/OptionsHelper.sol", - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/TestHelperOz5.sol", - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/DVNFeeLibMock.sol", - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/DVNMock.sol", - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/EndpointV2AltMock.sol", - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/EndpointV2Mock.sol", - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ExecutorFeeLibMock.sol", - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ExecutorMock.sol", - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/MultiSigMock.sol", - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/PriceFeedMock.sol", - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ReadLib1002Mock.sol", - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ReceiveUln302Mock.sol", - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/SendUln302Mock.sol", - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/SimpleMessageLibMock.sol", - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/WorkerMock.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/test.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Base.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdAssertions.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdChains.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdCheats.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdError.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdInvariant.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdJson.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdMath.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdStorage.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdStyle.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdUtils.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Test.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Vm.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/console.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/console2.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/interfaces/IMulticall3.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/mocks/MockERC20.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/mocks/MockERC721.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/safeconsole.sol", - "node_modules/@openzeppelin/contracts/access/AccessControl.sol", - "node_modules/@openzeppelin/contracts/access/IAccessControl.sol", - "node_modules/@openzeppelin/contracts/access/Ownable.sol", - "node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol", - "node_modules/@openzeppelin/contracts/interfaces/IERC165.sol", - "node_modules/@openzeppelin/contracts/interfaces/IERC20.sol", - "node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol", - "node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol", - "node_modules/@openzeppelin/contracts/utils/Address.sol", - "node_modules/@openzeppelin/contracts/utils/Context.sol", - "node_modules/@openzeppelin/contracts/utils/Errors.sol", - "node_modules/@openzeppelin/contracts/utils/Panic.sol", - "node_modules/@openzeppelin/contracts/utils/Pausable.sol", - "node_modules/@openzeppelin/contracts/utils/ReentrancyGuard.sol", - "node_modules/@openzeppelin/contracts/utils/cryptography/ECDSA.sol", - "node_modules/@openzeppelin/contracts/utils/introspection/ERC165.sol", - "node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol", - "node_modules/@openzeppelin/contracts/utils/math/SafeCast.sol", - "node_modules/@openzeppelin/contracts/utils/structs/DoubleEndedQueue.sol", - "node_modules/solidity-bytes-utils/contracts/BytesLib.sol" - ], - "versionRequirement": "^0.8.18", - "artifacts": { - "IOAppSetPeer": { - "0.8.22": { - "path": "TestHelperOz5.sol/IOAppSetPeer.json", - "build_id": "8cf5046b276fd6c82474449fece4b596" - } - }, - "IOAppSetReadChannel": { - "0.8.22": { - "path": "TestHelperOz5.sol/IOAppSetReadChannel.json", - "build_id": "8cf5046b276fd6c82474449fece4b596" - } - }, - "TestHelperOz5": { - "0.8.22": { - "path": "TestHelperOz5.sol/TestHelperOz5.json", - "build_id": "8cf5046b276fd6c82474449fece4b596" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/DVNFeeLibMock.sol": { - "lastModificationDate": 1734057540884, - "contentHash": "170b0d08e1e4f8a33f3fbed0d535ba06", - "sourceName": "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/DVNFeeLibMock.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [ - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroPriceFeed.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IWorker.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IDVN.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IDVNFeeLib.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/ILayerZeroDVN.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/ILayerZeroReadDVN.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/DVNOptions.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/ReadCmdCodecV1.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/SupportedCmdTypes.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/CalldataBytesLib.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Transfer.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/BitMaps.sol", - "node_modules/@openzeppelin/contracts/access/Ownable.sol", - "node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol", - "node_modules/@openzeppelin/contracts/interfaces/IERC165.sol", - "node_modules/@openzeppelin/contracts/interfaces/IERC20.sol", - "node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol", - "node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol", - "node_modules/@openzeppelin/contracts/utils/Address.sol", - "node_modules/@openzeppelin/contracts/utils/Context.sol", - "node_modules/@openzeppelin/contracts/utils/Errors.sol", - "node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol", - "node_modules/solidity-bytes-utils/contracts/BytesLib.sol" - ], - "versionRequirement": "^0.8.20", - "artifacts": { - "DVNFeeLibMock": { - "0.8.22": { - "path": "DVNFeeLibMock.sol/DVNFeeLibMock.json", - "build_id": "8cf5046b276fd6c82474449fece4b596" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/DVNMock.sol": { - "lastModificationDate": 1734057540884, - "contentHash": "9b68b3acbd9ccb7d475d86d021eb5797", - "sourceName": "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/DVNMock.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [ - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/MessageLibBase.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/ReceiveLibBaseE2.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/SendLibBase.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/SendLibBaseE2.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IExecutor.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IExecutorFeeLib.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroExecutor.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroPriceFeed.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroReadExecutor.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroTreasury.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IWorker.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/libs/ExecutorOptions.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/libs/SafeCall.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/ReceiveUlnBase.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/SendUlnBase.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/UlnBase.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IDVN.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IDVNFeeLib.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/ILayerZeroDVN.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/ILayerZeroReadDVN.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IReceiveUlnE2.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/DVNOptions.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/ReadCmdCodecV1.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/SupportedCmdTypes.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/UlnOptions.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/readlib/ReadLibBase.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/uln301/interfaces/IUltraLightNode301.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessageLibManager.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingChannel.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingComposer.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingContext.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroComposer.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/CalldataBytesLib.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Errors.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/GUID.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Transfer.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/BlockedMessageLib.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/BitMaps.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/ExecutorOptions.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol", - "node_modules/@layerzerolabs/lz-evm-v1-0.7/contracts/interfaces/ILayerZeroUltraLightNodeV2.sol", - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/OptionsHelper.sol", - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/TestHelperOz5.sol", - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/DVNFeeLibMock.sol", - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/DVNMock.sol", - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/EndpointV2AltMock.sol", - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/EndpointV2Mock.sol", - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ExecutorFeeLibMock.sol", - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ExecutorMock.sol", - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/MultiSigMock.sol", - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/PriceFeedMock.sol", - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ReadLib1002Mock.sol", - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ReceiveUln302Mock.sol", - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/SendUln302Mock.sol", - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/SimpleMessageLibMock.sol", - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/WorkerMock.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/test.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Base.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdAssertions.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdChains.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdCheats.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdError.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdInvariant.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdJson.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdMath.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdStorage.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdStyle.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdUtils.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Test.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Vm.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/console.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/console2.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/interfaces/IMulticall3.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/mocks/MockERC20.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/mocks/MockERC721.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/safeconsole.sol", - "node_modules/@openzeppelin/contracts/access/AccessControl.sol", - "node_modules/@openzeppelin/contracts/access/IAccessControl.sol", - "node_modules/@openzeppelin/contracts/access/Ownable.sol", - "node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol", - "node_modules/@openzeppelin/contracts/interfaces/IERC165.sol", - "node_modules/@openzeppelin/contracts/interfaces/IERC20.sol", - "node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol", - "node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol", - "node_modules/@openzeppelin/contracts/utils/Address.sol", - "node_modules/@openzeppelin/contracts/utils/Context.sol", - "node_modules/@openzeppelin/contracts/utils/Errors.sol", - "node_modules/@openzeppelin/contracts/utils/Panic.sol", - "node_modules/@openzeppelin/contracts/utils/Pausable.sol", - "node_modules/@openzeppelin/contracts/utils/ReentrancyGuard.sol", - "node_modules/@openzeppelin/contracts/utils/cryptography/ECDSA.sol", - "node_modules/@openzeppelin/contracts/utils/introspection/ERC165.sol", - "node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol", - "node_modules/@openzeppelin/contracts/utils/math/SafeCast.sol", - "node_modules/@openzeppelin/contracts/utils/structs/DoubleEndedQueue.sol", - "node_modules/solidity-bytes-utils/contracts/BytesLib.sol" - ], - "versionRequirement": "^0.8.20", - "artifacts": { - "DVNMock": { - "0.8.22": { - "path": "DVNMock.sol/DVNMock.json", - "build_id": "8cf5046b276fd6c82474449fece4b596" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/EndpointV2AltMock.sol": { - "lastModificationDate": 1734057540884, - "contentHash": "2c88e49ae7f04965a5518484c826d7e0", - "sourceName": "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/EndpointV2AltMock.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [ - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessageLibManager.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingChannel.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingComposer.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingContext.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroComposer.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Errors.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/GUID.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Transfer.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/BlockedMessageLib.sol", - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/EndpointV2Mock.sol", - "node_modules/@openzeppelin/contracts/access/Ownable.sol", - "node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol", - "node_modules/@openzeppelin/contracts/interfaces/IERC165.sol", - "node_modules/@openzeppelin/contracts/interfaces/IERC20.sol", - "node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol", - "node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol", - "node_modules/@openzeppelin/contracts/utils/Address.sol", - "node_modules/@openzeppelin/contracts/utils/Context.sol", - "node_modules/@openzeppelin/contracts/utils/Errors.sol", - "node_modules/@openzeppelin/contracts/utils/introspection/ERC165.sol", - "node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol" - ], - "versionRequirement": "^0.8.20", - "artifacts": { - "EndpointV2AltMock": { - "0.8.22": { - "path": "EndpointV2AltMock.sol/EndpointV2AltMock.json", - "build_id": "8cf5046b276fd6c82474449fece4b596" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/EndpointV2Mock.sol": { - "lastModificationDate": 1734057540884, - "contentHash": "9e888df6c92d20b136da88dcf3abc364", - "sourceName": "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/EndpointV2Mock.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [ - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessageLibManager.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingChannel.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingComposer.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingContext.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroComposer.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Errors.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/GUID.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Transfer.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/BlockedMessageLib.sol", - "node_modules/@openzeppelin/contracts/access/Ownable.sol", - "node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol", - "node_modules/@openzeppelin/contracts/interfaces/IERC165.sol", - "node_modules/@openzeppelin/contracts/interfaces/IERC20.sol", - "node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol", - "node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol", - "node_modules/@openzeppelin/contracts/utils/Address.sol", - "node_modules/@openzeppelin/contracts/utils/Context.sol", - "node_modules/@openzeppelin/contracts/utils/Errors.sol", - "node_modules/@openzeppelin/contracts/utils/introspection/ERC165.sol", - "node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol" - ], - "versionRequirement": "^0.8.20", - "artifacts": { - "EndpointV2Mock": { - "0.8.22": { - "path": "EndpointV2Mock.sol/EndpointV2Mock.json", - "build_id": "8cf5046b276fd6c82474449fece4b596" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ExecutorFeeLibMock.sol": { - "lastModificationDate": 1734057540884, - "contentHash": "61754af5047d1c044fcc1b136266a1be", - "sourceName": "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ExecutorFeeLibMock.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [ - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IExecutor.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IExecutorFeeLib.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroExecutor.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroPriceFeed.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroReadExecutor.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IWorker.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/libs/ExecutorOptions.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/CalldataBytesLib.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Transfer.sol", - "node_modules/@openzeppelin/contracts/access/Ownable.sol", - "node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol", - "node_modules/@openzeppelin/contracts/interfaces/IERC165.sol", - "node_modules/@openzeppelin/contracts/interfaces/IERC20.sol", - "node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol", - "node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol", - "node_modules/@openzeppelin/contracts/utils/Address.sol", - "node_modules/@openzeppelin/contracts/utils/Context.sol", - "node_modules/@openzeppelin/contracts/utils/Errors.sol", - "node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol" - ], - "versionRequirement": "^0.8.22", - "artifacts": { - "ExecutorFeeLibMock": { - "0.8.22": { - "path": "ExecutorFeeLibMock.sol/ExecutorFeeLibMock.json", - "build_id": "8cf5046b276fd6c82474449fece4b596" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ExecutorMock.sol": { - "lastModificationDate": 1734057540884, - "contentHash": "eb71bbe24ae0f31125dd159e14f4fd16", - "sourceName": "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ExecutorMock.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [ - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IExecutor.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IExecutorFeeLib.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroExecutor.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroReadExecutor.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IWorker.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/uln301/interfaces/IUltraLightNode301.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Transfer.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol", - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/WorkerMock.sol", - "node_modules/@openzeppelin/contracts/access/AccessControl.sol", - "node_modules/@openzeppelin/contracts/access/IAccessControl.sol", - "node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol", - "node_modules/@openzeppelin/contracts/interfaces/IERC165.sol", - "node_modules/@openzeppelin/contracts/interfaces/IERC20.sol", - "node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol", - "node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol", - "node_modules/@openzeppelin/contracts/utils/Address.sol", - "node_modules/@openzeppelin/contracts/utils/Context.sol", - "node_modules/@openzeppelin/contracts/utils/Errors.sol", - "node_modules/@openzeppelin/contracts/utils/Pausable.sol", - "node_modules/@openzeppelin/contracts/utils/ReentrancyGuard.sol", - "node_modules/@openzeppelin/contracts/utils/introspection/ERC165.sol", - "node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol" - ], - "versionRequirement": "^0.8.0", - "artifacts": { - "ExecutorMock": { - "0.8.22": { - "path": "ExecutorMock.sol/ExecutorMock.json", - "build_id": "8cf5046b276fd6c82474449fece4b596" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/MultiSigMock.sol": { - "lastModificationDate": 1734057540884, - "contentHash": "0181b7721dc61261018511063f654665", - "sourceName": "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/MultiSigMock.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [ - "node_modules/@openzeppelin/contracts/utils/cryptography/ECDSA.sol" - ], - "versionRequirement": "^0.8.20", - "artifacts": { - "MultiSigMock": { - "0.8.22": { - "path": "MultiSigMock.sol/MultiSigMock.json", - "build_id": "8cf5046b276fd6c82474449fece4b596" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/PriceFeedMock.sol": { - "lastModificationDate": 1734057540885, - "contentHash": "f16c62ed5306aafc3374fc9fae460fd4", - "sourceName": "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/PriceFeedMock.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [ - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroPriceFeed.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Transfer.sol", - "node_modules/@openzeppelin/contracts/access/Ownable.sol", - "node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol", - "node_modules/@openzeppelin/contracts/interfaces/IERC165.sol", - "node_modules/@openzeppelin/contracts/interfaces/IERC20.sol", - "node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol", - "node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol", - "node_modules/@openzeppelin/contracts/utils/Address.sol", - "node_modules/@openzeppelin/contracts/utils/Context.sol", - "node_modules/@openzeppelin/contracts/utils/Errors.sol", - "node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol" - ], - "versionRequirement": "^0.8.20", - "artifacts": { - "PriceFeedMock": { - "0.8.22": { - "path": "PriceFeedMock.sol/PriceFeedMock.json", - "build_id": "8cf5046b276fd6c82474449fece4b596" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ReadLib1002Mock.sol": { - "lastModificationDate": 1734057540885, - "contentHash": "e9c420d7377df689ad35586f5f8ab08e", - "sourceName": "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ReadLib1002Mock.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [ - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/MessageLibBase.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/ReceiveLibBaseE2.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/SendLibBase.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/SendLibBaseE2.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IExecutor.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IExecutorFeeLib.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroExecutor.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroPriceFeed.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroReadExecutor.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroTreasury.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IWorker.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/libs/ExecutorOptions.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/libs/SafeCall.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/ReceiveUlnBase.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/SendUlnBase.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/UlnBase.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IDVN.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IDVNFeeLib.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/ILayerZeroDVN.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/ILayerZeroReadDVN.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IReceiveUlnE2.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/DVNOptions.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/ReadCmdCodecV1.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/SupportedCmdTypes.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/UlnOptions.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/readlib/ReadLibBase.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/uln301/interfaces/IUltraLightNode301.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessageLibManager.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingChannel.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingComposer.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingContext.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroComposer.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/CalldataBytesLib.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Errors.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/GUID.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Transfer.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/BlockedMessageLib.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/BitMaps.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/ExecutorOptions.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol", - "node_modules/@layerzerolabs/lz-evm-v1-0.7/contracts/interfaces/ILayerZeroUltraLightNodeV2.sol", - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/OptionsHelper.sol", - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/TestHelperOz5.sol", - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/DVNFeeLibMock.sol", - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/DVNMock.sol", - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/EndpointV2AltMock.sol", - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/EndpointV2Mock.sol", - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ExecutorFeeLibMock.sol", - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ExecutorMock.sol", - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/MultiSigMock.sol", - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/PriceFeedMock.sol", - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ReadLib1002Mock.sol", - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ReceiveUln302Mock.sol", - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/SendUln302Mock.sol", - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/SimpleMessageLibMock.sol", - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/WorkerMock.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/test.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Base.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdAssertions.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdChains.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdCheats.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdError.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdInvariant.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdJson.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdMath.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdStorage.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdStyle.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdUtils.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Test.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Vm.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/console.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/console2.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/interfaces/IMulticall3.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/mocks/MockERC20.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/mocks/MockERC721.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/safeconsole.sol", - "node_modules/@openzeppelin/contracts/access/AccessControl.sol", - "node_modules/@openzeppelin/contracts/access/IAccessControl.sol", - "node_modules/@openzeppelin/contracts/access/Ownable.sol", - "node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol", - "node_modules/@openzeppelin/contracts/interfaces/IERC165.sol", - "node_modules/@openzeppelin/contracts/interfaces/IERC20.sol", - "node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol", - "node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol", - "node_modules/@openzeppelin/contracts/utils/Address.sol", - "node_modules/@openzeppelin/contracts/utils/Context.sol", - "node_modules/@openzeppelin/contracts/utils/Errors.sol", - "node_modules/@openzeppelin/contracts/utils/Panic.sol", - "node_modules/@openzeppelin/contracts/utils/Pausable.sol", - "node_modules/@openzeppelin/contracts/utils/ReentrancyGuard.sol", - "node_modules/@openzeppelin/contracts/utils/cryptography/ECDSA.sol", - "node_modules/@openzeppelin/contracts/utils/introspection/ERC165.sol", - "node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol", - "node_modules/@openzeppelin/contracts/utils/math/SafeCast.sol", - "node_modules/@openzeppelin/contracts/utils/structs/DoubleEndedQueue.sol", - "node_modules/solidity-bytes-utils/contracts/BytesLib.sol" - ], - "versionRequirement": "^0.8.20", - "artifacts": { - "ReadLib1002Mock": { - "0.8.22": { - "path": "ReadLib1002Mock.sol/ReadLib1002Mock.json", - "build_id": "8cf5046b276fd6c82474449fece4b596" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ReceiveUln302Mock.sol": { - "lastModificationDate": 1734057540885, - "contentHash": "f842261a7840f7ca56d2624ba2c31b0a", - "sourceName": "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ReceiveUln302Mock.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [ - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/MessageLibBase.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/ReceiveLibBaseE2.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/ReceiveUlnBase.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/UlnBase.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IReceiveUlnE2.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol", - "node_modules/@openzeppelin/contracts/access/Ownable.sol", - "node_modules/@openzeppelin/contracts/utils/Context.sol", - "node_modules/@openzeppelin/contracts/utils/introspection/ERC165.sol", - "node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol" - ], - "versionRequirement": "^0.8.0", - "artifacts": { - "ReceiveUln302Mock": { - "0.8.22": { - "path": "ReceiveUln302Mock.sol/ReceiveUln302Mock.json", - "build_id": "8cf5046b276fd6c82474449fece4b596" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/SendUln302Mock.sol": { - "lastModificationDate": 1734057540885, - "contentHash": "2df252777e9c24558408d755458a8202", - "sourceName": "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/SendUln302Mock.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [ - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/MessageLibBase.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/ReceiveLibBaseE2.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/SendLibBase.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/SendLibBaseE2.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IExecutor.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IExecutorFeeLib.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroExecutor.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroPriceFeed.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroReadExecutor.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroTreasury.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IWorker.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/libs/ExecutorOptions.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/libs/SafeCall.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/ReceiveUlnBase.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/SendUlnBase.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/UlnBase.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IDVN.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IDVNFeeLib.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/ILayerZeroDVN.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/ILayerZeroReadDVN.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IReceiveUlnE2.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/DVNOptions.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/ReadCmdCodecV1.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/SupportedCmdTypes.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/UlnOptions.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/readlib/ReadLibBase.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/uln301/interfaces/IUltraLightNode301.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessageLibManager.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingChannel.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingComposer.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingContext.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroComposer.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/CalldataBytesLib.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Errors.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/GUID.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Transfer.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/BlockedMessageLib.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/BitMaps.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/ExecutorOptions.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol", - "node_modules/@layerzerolabs/lz-evm-v1-0.7/contracts/interfaces/ILayerZeroUltraLightNodeV2.sol", - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/OptionsHelper.sol", - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/TestHelperOz5.sol", - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/DVNFeeLibMock.sol", - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/DVNMock.sol", - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/EndpointV2AltMock.sol", - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/EndpointV2Mock.sol", - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ExecutorFeeLibMock.sol", - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ExecutorMock.sol", - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/MultiSigMock.sol", - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/PriceFeedMock.sol", - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ReadLib1002Mock.sol", - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ReceiveUln302Mock.sol", - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/SendUln302Mock.sol", - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/SimpleMessageLibMock.sol", - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/WorkerMock.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/test.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Base.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdAssertions.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdChains.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdCheats.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdError.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdInvariant.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdJson.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdMath.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdStorage.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdStyle.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdUtils.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Test.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Vm.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/console.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/console2.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/interfaces/IMulticall3.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/mocks/MockERC20.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/mocks/MockERC721.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/safeconsole.sol", - "node_modules/@openzeppelin/contracts/access/AccessControl.sol", - "node_modules/@openzeppelin/contracts/access/IAccessControl.sol", - "node_modules/@openzeppelin/contracts/access/Ownable.sol", - "node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol", - "node_modules/@openzeppelin/contracts/interfaces/IERC165.sol", - "node_modules/@openzeppelin/contracts/interfaces/IERC20.sol", - "node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol", - "node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol", - "node_modules/@openzeppelin/contracts/utils/Address.sol", - "node_modules/@openzeppelin/contracts/utils/Context.sol", - "node_modules/@openzeppelin/contracts/utils/Errors.sol", - "node_modules/@openzeppelin/contracts/utils/Panic.sol", - "node_modules/@openzeppelin/contracts/utils/Pausable.sol", - "node_modules/@openzeppelin/contracts/utils/ReentrancyGuard.sol", - "node_modules/@openzeppelin/contracts/utils/cryptography/ECDSA.sol", - "node_modules/@openzeppelin/contracts/utils/introspection/ERC165.sol", - "node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol", - "node_modules/@openzeppelin/contracts/utils/math/SafeCast.sol", - "node_modules/@openzeppelin/contracts/utils/structs/DoubleEndedQueue.sol", - "node_modules/solidity-bytes-utils/contracts/BytesLib.sol" - ], - "versionRequirement": "^0.8.22", - "artifacts": { - "SendUln302Mock": { - "0.8.22": { - "path": "SendUln302Mock.sol/SendUln302Mock.json", - "build_id": "8cf5046b276fd6c82474449fece4b596" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/SimpleMessageLibMock.sol": { - "lastModificationDate": 1734057540885, - "contentHash": "74a16623553fbb5bfabc0e2e50e21bd4", - "sourceName": "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/SimpleMessageLibMock.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [ - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/MessageLibBase.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/ReceiveLibBaseE2.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/SendLibBase.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/SendLibBaseE2.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IExecutor.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IExecutorFeeLib.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroExecutor.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroPriceFeed.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroReadExecutor.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroTreasury.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IWorker.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/libs/ExecutorOptions.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/libs/SafeCall.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/ReceiveUlnBase.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/SendUlnBase.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/UlnBase.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IDVN.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IDVNFeeLib.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/ILayerZeroDVN.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/ILayerZeroReadDVN.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IReceiveUlnE2.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/DVNOptions.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/ReadCmdCodecV1.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/SupportedCmdTypes.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/UlnOptions.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/readlib/ReadLibBase.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/uln301/interfaces/IUltraLightNode301.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessageLibManager.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingChannel.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingComposer.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingContext.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroComposer.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/CalldataBytesLib.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Errors.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/GUID.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Transfer.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/BlockedMessageLib.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/BitMaps.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/ExecutorOptions.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol", - "node_modules/@layerzerolabs/lz-evm-v1-0.7/contracts/interfaces/ILayerZeroUltraLightNodeV2.sol", - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/OptionsHelper.sol", - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/TestHelperOz5.sol", - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/DVNFeeLibMock.sol", - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/DVNMock.sol", - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/EndpointV2AltMock.sol", - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/EndpointV2Mock.sol", - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ExecutorFeeLibMock.sol", - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ExecutorMock.sol", - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/MultiSigMock.sol", - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/PriceFeedMock.sol", - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ReadLib1002Mock.sol", - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ReceiveUln302Mock.sol", - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/SendUln302Mock.sol", - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/SimpleMessageLibMock.sol", - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/WorkerMock.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/test.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Base.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdAssertions.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdChains.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdCheats.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdError.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdInvariant.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdJson.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdMath.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdStorage.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdStyle.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdUtils.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Test.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Vm.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/console.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/console2.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/interfaces/IMulticall3.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/mocks/MockERC20.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/mocks/MockERC721.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/safeconsole.sol", - "node_modules/@openzeppelin/contracts/access/AccessControl.sol", - "node_modules/@openzeppelin/contracts/access/IAccessControl.sol", - "node_modules/@openzeppelin/contracts/access/Ownable.sol", - "node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol", - "node_modules/@openzeppelin/contracts/interfaces/IERC165.sol", - "node_modules/@openzeppelin/contracts/interfaces/IERC20.sol", - "node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol", - "node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol", - "node_modules/@openzeppelin/contracts/utils/Address.sol", - "node_modules/@openzeppelin/contracts/utils/Context.sol", - "node_modules/@openzeppelin/contracts/utils/Errors.sol", - "node_modules/@openzeppelin/contracts/utils/Panic.sol", - "node_modules/@openzeppelin/contracts/utils/Pausable.sol", - "node_modules/@openzeppelin/contracts/utils/ReentrancyGuard.sol", - "node_modules/@openzeppelin/contracts/utils/cryptography/ECDSA.sol", - "node_modules/@openzeppelin/contracts/utils/introspection/ERC165.sol", - "node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol", - "node_modules/@openzeppelin/contracts/utils/math/SafeCast.sol", - "node_modules/@openzeppelin/contracts/utils/structs/DoubleEndedQueue.sol", - "node_modules/solidity-bytes-utils/contracts/BytesLib.sol" - ], - "versionRequirement": "^0.8.22", - "artifacts": { - "SimpleMessageLibMock": { - "0.8.22": { - "path": "SimpleMessageLibMock.sol/SimpleMessageLibMock.json", - "build_id": "8cf5046b276fd6c82474449fece4b596" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/WorkerMock.sol": { - "lastModificationDate": 1734057540885, - "contentHash": "4ab56830fc175a2c0a7300fcccd5735f", - "sourceName": "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/WorkerMock.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [ - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IWorker.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Transfer.sol", - "node_modules/@openzeppelin/contracts/access/AccessControl.sol", - "node_modules/@openzeppelin/contracts/access/IAccessControl.sol", - "node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol", - "node_modules/@openzeppelin/contracts/interfaces/IERC165.sol", - "node_modules/@openzeppelin/contracts/interfaces/IERC20.sol", - "node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol", - "node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol", - "node_modules/@openzeppelin/contracts/utils/Address.sol", - "node_modules/@openzeppelin/contracts/utils/Context.sol", - "node_modules/@openzeppelin/contracts/utils/Errors.sol", - "node_modules/@openzeppelin/contracts/utils/Pausable.sol", - "node_modules/@openzeppelin/contracts/utils/introspection/ERC165.sol", - "node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol" - ], - "versionRequirement": "^0.8.0", - "artifacts": { - "WorkerMock": { - "0.8.22": { - "path": "WorkerMock.sol/WorkerMock.json", - "build_id": "8cf5046b276fd6c82474449fece4b596" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/test.sol": { - "lastModificationDate": 1734089241945, - "contentHash": "9febff9d09f18af5306669dc276c4c43", - "sourceName": "node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/test.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [], - "versionRequirement": ">=0.5.0", - "artifacts": { - "DSTest": { - "0.8.22": { - "path": "test.sol/DSTest.json", - "build_id": "8cf5046b276fd6c82474449fece4b596" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Base.sol": { - "lastModificationDate": 1734089241945, - "contentHash": "ee13c050b1914464f1d3f90cde90204b", - "sourceName": "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Base.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [ - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdStorage.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Vm.sol" - ], - "versionRequirement": ">=0.6.2, <0.9.0", - "artifacts": { - "CommonBase": { - "0.8.22": { - "path": "Base.sol/CommonBase.json", - "build_id": "8cf5046b276fd6c82474449fece4b596" - } - }, - "ScriptBase": { - "0.8.22": { - "path": "Base.sol/ScriptBase.json", - "build_id": "8cf5046b276fd6c82474449fece4b596" - } - }, - "TestBase": { - "0.8.22": { - "path": "Base.sol/TestBase.json", - "build_id": "8cf5046b276fd6c82474449fece4b596" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdAssertions.sol": { - "lastModificationDate": 1734089241945, - "contentHash": "6cc2858240bcd443debbbf075490e325", - "sourceName": "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdAssertions.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [ - "node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/test.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdMath.sol" - ], - "versionRequirement": ">=0.6.2, <0.9.0", - "artifacts": { - "StdAssertions": { - "0.8.22": { - "path": "StdAssertions.sol/StdAssertions.json", - "build_id": "8cf5046b276fd6c82474449fece4b596" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdChains.sol": { - "lastModificationDate": 1734089241945, - "contentHash": "f7ec55b5333e3d0687535fa29695e9c6", - "sourceName": "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdChains.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [ - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Vm.sol" - ], - "versionRequirement": ">=0.6.2, <0.9.0", - "artifacts": { - "StdChains": { - "0.8.22": { - "path": "StdChains.sol/StdChains.json", - "build_id": "8cf5046b276fd6c82474449fece4b596" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdCheats.sol": { - "lastModificationDate": 1734089241945, - "contentHash": "7922ae0087a21ee3cdb97137be18c06c", - "sourceName": "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdCheats.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [ - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdStorage.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Vm.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/console2.sol" - ], - "versionRequirement": ">=0.6.2, <0.9.0", - "artifacts": { - "StdCheats": { - "0.8.22": { - "path": "StdCheats.sol/StdCheats.json", - "build_id": "8cf5046b276fd6c82474449fece4b596" - } - }, - "StdCheatsSafe": { - "0.8.22": { - "path": "StdCheats.sol/StdCheatsSafe.json", - "build_id": "8cf5046b276fd6c82474449fece4b596" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdError.sol": { - "lastModificationDate": 1734089241945, - "contentHash": "64c896e1276a291776e5ea5aecb3870a", - "sourceName": "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdError.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [], - "versionRequirement": ">=0.6.2, <0.9.0", - "artifacts": { - "stdError": { - "0.8.22": { - "path": "StdError.sol/stdError.json", - "build_id": "8cf5046b276fd6c82474449fece4b596" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdInvariant.sol": { - "lastModificationDate": 1734089241945, - "contentHash": "0a580d6fac69e9d4b6504f747f3c0c24", - "sourceName": "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdInvariant.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [], - "versionRequirement": ">=0.6.2, <0.9.0", - "artifacts": { - "StdInvariant": { - "0.8.22": { - "path": "StdInvariant.sol/StdInvariant.json", - "build_id": "8cf5046b276fd6c82474449fece4b596" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdJson.sol": { - "lastModificationDate": 1734089241946, - "contentHash": "a341308627b7eeab7589534daad58186", - "sourceName": "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdJson.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [ - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Vm.sol" - ], - "versionRequirement": ">=0.6.0, <0.9.0", - "artifacts": { - "stdJson": { - "0.8.22": { - "path": "StdJson.sol/stdJson.json", - "build_id": "8cf5046b276fd6c82474449fece4b596" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdMath.sol": { - "lastModificationDate": 1734089241946, - "contentHash": "9da8f453eba6bb98f3d75bc6822bfb29", - "sourceName": "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdMath.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [], - "versionRequirement": ">=0.6.2, <0.9.0", - "artifacts": { - "stdMath": { - "0.8.22": { - "path": "StdMath.sol/stdMath.json", - "build_id": "8cf5046b276fd6c82474449fece4b596" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdStorage.sol": { - "lastModificationDate": 1734089241946, - "contentHash": "abd6f3379e6e2a7979b18abc21aea0c1", - "sourceName": "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdStorage.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [ - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Vm.sol" - ], - "versionRequirement": ">=0.6.2, <0.9.0", - "artifacts": { - "stdStorage": { - "0.8.22": { - "path": "StdStorage.sol/stdStorage.json", - "build_id": "8cf5046b276fd6c82474449fece4b596" - } - }, - "stdStorageSafe": { - "0.8.22": { - "path": "StdStorage.sol/stdStorageSafe.json", - "build_id": "8cf5046b276fd6c82474449fece4b596" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdStyle.sol": { - "lastModificationDate": 1734089241946, - "contentHash": "6281165a12aa639705c691fccefd855e", - "sourceName": "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdStyle.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [ - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Vm.sol" - ], - "versionRequirement": ">=0.4.22, <0.9.0", - "artifacts": { - "StdStyle": { - "0.8.22": { - "path": "StdStyle.sol/StdStyle.json", - "build_id": "8cf5046b276fd6c82474449fece4b596" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdUtils.sol": { - "lastModificationDate": 1734089241946, - "contentHash": "2ace460f60242ec59c9310db966aee97", - "sourceName": "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdUtils.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [ - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Vm.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/interfaces/IMulticall3.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/mocks/MockERC20.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/mocks/MockERC721.sol" - ], - "versionRequirement": ">=0.6.2, <0.9.0", - "artifacts": { - "StdUtils": { - "0.8.22": { - "path": "StdUtils.sol/StdUtils.json", - "build_id": "8cf5046b276fd6c82474449fece4b596" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Test.sol": { - "lastModificationDate": 1734089241946, - "contentHash": "15866901137b5670eabf31362523bd28", - "sourceName": "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Test.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [ - "node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/test.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Base.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdAssertions.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdChains.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdCheats.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdError.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdInvariant.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdJson.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdMath.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdStorage.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdStyle.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdUtils.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Vm.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/console.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/console2.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/interfaces/IMulticall3.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/mocks/MockERC20.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/mocks/MockERC721.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/safeconsole.sol" - ], - "versionRequirement": ">=0.6.2, <0.9.0", - "artifacts": { - "Test": { - "0.8.22": { - "path": "Test.sol/Test.json", - "build_id": "8cf5046b276fd6c82474449fece4b596" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Vm.sol": { - "lastModificationDate": 1734089241946, - "contentHash": "c791ff15c3c9d600bd396c7ae4ee836c", - "sourceName": "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Vm.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [], - "versionRequirement": ">=0.6.2, <0.9.0", - "artifacts": { - "Vm": { - "0.8.22": { - "path": "Vm.sol/Vm.json", - "build_id": "8cf5046b276fd6c82474449fece4b596" - } - }, - "VmSafe": { - "0.8.22": { - "path": "Vm.sol/VmSafe.json", - "build_id": "8cf5046b276fd6c82474449fece4b596" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/console.sol": { - "lastModificationDate": 1734089241946, - "contentHash": "100b8a33b917da1147740d7ab8b0ded3", - "sourceName": "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/console.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [], - "versionRequirement": ">=0.4.22, <0.9.0", - "artifacts": { - "console": { - "0.8.22": { - "path": "console.sol/console.json", - "build_id": "8cf5046b276fd6c82474449fece4b596" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/console2.sol": { - "lastModificationDate": 1734089241946, - "contentHash": "491ca717c1915995e78cc361485a3067", - "sourceName": "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/console2.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [], - "versionRequirement": ">=0.4.22, <0.9.0", - "artifacts": { - "console2": { - "0.8.22": { - "path": "console2.sol/console2.json", - "build_id": "8cf5046b276fd6c82474449fece4b596" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/interfaces/IMulticall3.sol": { - "lastModificationDate": 1734089241946, - "contentHash": "7b131ca1ca32ef6378b7b9ad5488b901", - "sourceName": "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/interfaces/IMulticall3.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [], - "versionRequirement": ">=0.6.2, <0.9.0", - "artifacts": { - "IMulticall3": { - "0.8.22": { - "path": "IMulticall3.sol/IMulticall3.json", - "build_id": "8cf5046b276fd6c82474449fece4b596" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/mocks/MockERC20.sol": { - "lastModificationDate": 1734089241946, - "contentHash": "9ec848e74c56e40afdd01ac0c873dc3b", - "sourceName": "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/mocks/MockERC20.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [], - "versionRequirement": ">=0.6.2, <0.9.0", - "artifacts": { - "MockERC20": { - "0.8.22": { - "path": "MockERC20.sol/MockERC20.json", - "build_id": "8cf5046b276fd6c82474449fece4b596" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/mocks/MockERC721.sol": { - "lastModificationDate": 1734089241946, - "contentHash": "b6729ea581dcd9b4238eee9ca4d3bd89", - "sourceName": "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/mocks/MockERC721.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [], - "versionRequirement": ">=0.6.2, <0.9.0", - "artifacts": { - "IERC721TokenReceiver": { - "0.8.22": { - "path": "MockERC721.sol/IERC721TokenReceiver.json", - "build_id": "8cf5046b276fd6c82474449fece4b596" - } - }, - "MockERC721": { - "0.8.22": { - "path": "MockERC721.sol/MockERC721.json", - "build_id": "8cf5046b276fd6c82474449fece4b596" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/safeconsole.sol": { - "lastModificationDate": 1734089241947, - "contentHash": "ac3b1bf5a444db5db3656021830258a8", - "sourceName": "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/safeconsole.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [], - "versionRequirement": ">=0.6.2, <0.9.0", - "artifacts": { - "safeconsole": { - "0.8.22": { - "path": "safeconsole.sol/safeconsole.json", - "build_id": "8cf5046b276fd6c82474449fece4b596" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@openzeppelin/contracts/access/AccessControl.sol": { - "lastModificationDate": 1734587671719, - "contentHash": "4c80b7fdf559a9a348e832a57d072a0b", - "sourceName": "node_modules/@openzeppelin/contracts/access/AccessControl.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [ - "node_modules/@openzeppelin/contracts/access/IAccessControl.sol", - "node_modules/@openzeppelin/contracts/utils/Context.sol", - "node_modules/@openzeppelin/contracts/utils/introspection/ERC165.sol", - "node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol" - ], - "versionRequirement": "^0.8.20", - "artifacts": { - "AccessControl": { - "0.8.22": { - "path": "AccessControl.sol/AccessControl.json", - "build_id": "8cf5046b276fd6c82474449fece4b596" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@openzeppelin/contracts/access/IAccessControl.sol": { - "lastModificationDate": 1734587671840, - "contentHash": "6f7fac9fa0df6004375e18b7ff7edf4e", - "sourceName": "node_modules/@openzeppelin/contracts/access/IAccessControl.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [], - "versionRequirement": "^0.8.20", - "artifacts": { - "IAccessControl": { - "0.8.22": { - "path": "IAccessControl.sol/IAccessControl.json", - "build_id": "8cf5046b276fd6c82474449fece4b596" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@openzeppelin/contracts/access/Ownable.sol": { - "lastModificationDate": 1734587671894, - "contentHash": "d3c790edc9ccf808a17c5a6cd13614fd", - "sourceName": "node_modules/@openzeppelin/contracts/access/Ownable.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": ["node_modules/@openzeppelin/contracts/utils/Context.sol"], - "versionRequirement": "^0.8.20", - "artifacts": { - "Ownable": { - "0.8.22": { - "path": "Ownable.sol/Ownable.json", - "build_id": "15c57b83a95fe5a422295bb3f4778716" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol": { - "lastModificationDate": 1734587671854, - "contentHash": "6b7c5ee7a59c981072a804c99ab0fac9", - "sourceName": "node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [ - "node_modules/@openzeppelin/contracts/interfaces/IERC165.sol", - "node_modules/@openzeppelin/contracts/interfaces/IERC20.sol", - "node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol", - "node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol" - ], - "versionRequirement": "^0.8.20", - "artifacts": { - "IERC1363": { - "0.8.22": { - "path": "IERC1363.sol/IERC1363.json", - "build_id": "15c57b83a95fe5a422295bb3f4778716" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@openzeppelin/contracts/interfaces/IERC165.sol": { - "lastModificationDate": 1734587671858, - "contentHash": "f808b485ee0cdc6768ee8385ae5f9a2a", - "sourceName": "node_modules/@openzeppelin/contracts/interfaces/IERC165.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [ - "node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol" - ], - "versionRequirement": "^0.8.20", - "artifacts": {}, - "seenByCompiler": true - }, - "node_modules/@openzeppelin/contracts/interfaces/IERC20.sol": { - "lastModificationDate": 1734587671863, - "contentHash": "79af12d64eacc7d77b9ee2ac4b4d51ee", - "sourceName": "node_modules/@openzeppelin/contracts/interfaces/IERC20.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [ - "node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol" - ], - "versionRequirement": "^0.8.20", - "artifacts": {}, - "seenByCompiler": true - }, - "node_modules/@openzeppelin/contracts/interfaces/draft-IERC6093.sol": { - "lastModificationDate": 1734587671759, - "contentHash": "267d92fe4de67b1bdb3302c08f387dbf", - "sourceName": "node_modules/@openzeppelin/contracts/interfaces/draft-IERC6093.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [], - "versionRequirement": "^0.8.20", - "artifacts": { - "IERC1155Errors": { - "0.8.22": { - "path": "draft-IERC6093.sol/IERC1155Errors.json", - "build_id": "15c57b83a95fe5a422295bb3f4778716" - } - }, - "IERC20Errors": { - "0.8.22": { - "path": "draft-IERC6093.sol/IERC20Errors.json", - "build_id": "15c57b83a95fe5a422295bb3f4778716" - } - }, - "IERC721Errors": { - "0.8.22": { - "path": "draft-IERC6093.sol/IERC721Errors.json", - "build_id": "15c57b83a95fe5a422295bb3f4778716" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@openzeppelin/contracts/token/ERC20/ERC20.sol": { - "lastModificationDate": 1734587671787, - "contentHash": "38910c3dfa5e3778fac8888b1d714084", - "sourceName": "node_modules/@openzeppelin/contracts/token/ERC20/ERC20.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [ - "node_modules/@openzeppelin/contracts/interfaces/draft-IERC6093.sol", - "node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol", - "node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol", - "node_modules/@openzeppelin/contracts/utils/Context.sol" - ], - "versionRequirement": "^0.8.20", - "artifacts": { - "ERC20": { - "0.8.22": { - "path": "ERC20.sol/ERC20.json", - "build_id": "15c57b83a95fe5a422295bb3f4778716" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol": { - "lastModificationDate": 1734587671865, - "contentHash": "8f19f64d2adadf448840908bbaf431c8", - "sourceName": "node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [], - "versionRequirement": "^0.8.20", - "artifacts": { - "IERC20": { - "0.8.22": { - "path": "IERC20.sol/IERC20.json", - "build_id": "15c57b83a95fe5a422295bb3f4778716" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol": { - "lastModificationDate": 1734587671868, - "contentHash": "794db3115001aa372c79326fcfd44b1f", - "sourceName": "node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [ - "node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol" - ], - "versionRequirement": "^0.8.20", - "artifacts": { - "IERC20Metadata": { - "0.8.22": { - "path": "IERC20Metadata.sol/IERC20Metadata.json", - "build_id": "15c57b83a95fe5a422295bb3f4778716" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol": { - "lastModificationDate": 1734587671912, - "contentHash": "effe88dd27f56305c4513f7aa9970ec9", - "sourceName": "node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [ - "node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol", - "node_modules/@openzeppelin/contracts/interfaces/IERC165.sol", - "node_modules/@openzeppelin/contracts/interfaces/IERC20.sol", - "node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol", - "node_modules/@openzeppelin/contracts/utils/Address.sol", - "node_modules/@openzeppelin/contracts/utils/Errors.sol", - "node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol" - ], - "versionRequirement": "^0.8.20", - "artifacts": { - "SafeERC20": { - "0.8.22": { - "path": "SafeERC20.sol/SafeERC20.json", - "build_id": "15c57b83a95fe5a422295bb3f4778716" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@openzeppelin/contracts/utils/Address.sol": { - "lastModificationDate": 1734587671726, - "contentHash": "553fc9ae17d9c00fd1c301b760781e26", - "sourceName": "node_modules/@openzeppelin/contracts/utils/Address.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": ["node_modules/@openzeppelin/contracts/utils/Errors.sol"], - "versionRequirement": "^0.8.20", - "artifacts": { - "Address": { - "0.8.22": { - "path": "Address.sol/Address.json", - "build_id": "15c57b83a95fe5a422295bb3f4778716" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@openzeppelin/contracts/utils/Context.sol": { - "lastModificationDate": 1734587671741, - "contentHash": "67bfbc07588eb8683b3fd8f6f909563e", - "sourceName": "node_modules/@openzeppelin/contracts/utils/Context.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [], - "versionRequirement": "^0.8.20", - "artifacts": { - "Context": { - "0.8.22": { - "path": "Context.sol/Context.json", - "build_id": "15c57b83a95fe5a422295bb3f4778716" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@openzeppelin/contracts/utils/Errors.sol": { - "lastModificationDate": 1734587671820, - "contentHash": "6b5eac2b85500c3012977849cfd633d8", - "sourceName": "node_modules/@openzeppelin/contracts/utils/Errors.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [], - "versionRequirement": "^0.8.20", - "artifacts": { - "Errors": { - "0.8.22": { - "path": "Errors.sol/Errors.json", - "build_id": "15c57b83a95fe5a422295bb3f4778716" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@openzeppelin/contracts/utils/Panic.sol": { - "lastModificationDate": 1734587671901, - "contentHash": "2133dc13536b4a6a98131e431fac59e1", - "sourceName": "node_modules/@openzeppelin/contracts/utils/Panic.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [], - "versionRequirement": "^0.8.20", - "artifacts": { - "Panic": { - "0.8.22": { - "path": "Panic.sol/Panic.json", - "build_id": "8cf5046b276fd6c82474449fece4b596" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@openzeppelin/contracts/utils/Pausable.sol": { - "lastModificationDate": 1734587671901, - "contentHash": "24e52f6ef3868e6fca664a423140bee9", - "sourceName": "node_modules/@openzeppelin/contracts/utils/Pausable.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": ["node_modules/@openzeppelin/contracts/utils/Context.sol"], - "versionRequirement": "^0.8.20", - "artifacts": { - "Pausable": { - "0.8.22": { - "path": "Pausable.sol/Pausable.json", - "build_id": "8cf5046b276fd6c82474449fece4b596" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@openzeppelin/contracts/utils/ReentrancyGuard.sol": { - "lastModificationDate": 1734587671904, - "contentHash": "190613e556d509d9e9a0ea43dc5d891d", - "sourceName": "node_modules/@openzeppelin/contracts/utils/ReentrancyGuard.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [], - "versionRequirement": "^0.8.20", - "artifacts": { - "ReentrancyGuard": { - "0.8.22": { - "path": "ReentrancyGuard.sol/ReentrancyGuard.json", - "build_id": "8cf5046b276fd6c82474449fece4b596" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@openzeppelin/contracts/utils/cryptography/ECDSA.sol": { - "lastModificationDate": 1734587671762, - "contentHash": "81de029d56aa803972be03c5d277cb6c", - "sourceName": "node_modules/@openzeppelin/contracts/utils/cryptography/ECDSA.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [], - "versionRequirement": "^0.8.20", - "artifacts": { - "ECDSA": { - "0.8.22": { - "path": "ECDSA.sol/ECDSA.json", - "build_id": "8cf5046b276fd6c82474449fece4b596" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@openzeppelin/contracts/utils/introspection/ERC165.sol": { - "lastModificationDate": 1734587671781, - "contentHash": "7c03c1e37c3dc24eafb76dc2b8a5c3a6", - "sourceName": "node_modules/@openzeppelin/contracts/utils/introspection/ERC165.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [ - "node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol" - ], - "versionRequirement": "^0.8.20", - "artifacts": { - "ERC165": { - "0.8.22": { - "path": "ERC165.sol/ERC165.json", - "build_id": "8cf5046b276fd6c82474449fece4b596" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol": { - "lastModificationDate": 1734587671860, - "contentHash": "bf0119eb2a570f219729ff38b6cd1df8", - "sourceName": "node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [], - "versionRequirement": "^0.8.20", - "artifacts": { - "IERC165": { - "0.8.22": { - "path": "IERC165.sol/IERC165.json", - "build_id": "15c57b83a95fe5a422295bb3f4778716" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@openzeppelin/contracts/utils/math/SafeCast.sol": { - "lastModificationDate": 1734587671909, - "contentHash": "2adca1150f58fc6f3d1f0a0f22ee7cca", - "sourceName": "node_modules/@openzeppelin/contracts/utils/math/SafeCast.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [], - "versionRequirement": "^0.8.20", - "artifacts": { - "SafeCast": { - "0.8.22": { - "path": "SafeCast.sol/SafeCast.json", - "build_id": "8cf5046b276fd6c82474449fece4b596" - } - } - }, - "seenByCompiler": true - }, - "node_modules/@openzeppelin/contracts/utils/structs/DoubleEndedQueue.sol": { - "lastModificationDate": 1734587671744, - "contentHash": "cab08a09ef0cf9bb7a0f731c7e585b69", - "sourceName": "node_modules/@openzeppelin/contracts/utils/structs/DoubleEndedQueue.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": ["node_modules/@openzeppelin/contracts/utils/Panic.sol"], - "versionRequirement": "^0.8.20", - "artifacts": { - "DoubleEndedQueue": { - "0.8.22": { - "path": "DoubleEndedQueue.sol/DoubleEndedQueue.json", - "build_id": "8cf5046b276fd6c82474449fece4b596" - } - } - }, - "seenByCompiler": true - }, - "node_modules/solidity-bytes-utils/contracts/BytesLib.sol": { - "lastModificationDate": 1734587671001, - "contentHash": "f4aae4537e2686b91fcd881aeed71657", - "sourceName": "node_modules/solidity-bytes-utils/contracts/BytesLib.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [], - "versionRequirement": ">=0.8.0, <0.9.0", - "artifacts": { - "BytesLib": { - "0.8.22": { - "path": "BytesLib.sol/BytesLib.json", - "build_id": "8cf5046b276fd6c82474449fece4b596" - } - } - }, - "seenByCompiler": true - }, - "test/evm/foundry/MyOFT.t.sol": { - "lastModificationDate": 1735584105056, - "contentHash": "0b4a223b2c3cb475bb8f87cf65e9b7a9", - "sourceName": "test/evm/foundry/MyOFT.t.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [ - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/MessageLibBase.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/ReceiveLibBaseE2.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/SendLibBase.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/SendLibBaseE2.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IExecutor.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IExecutorFeeLib.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroExecutor.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroPriceFeed.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroReadExecutor.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroTreasury.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IWorker.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/libs/ExecutorOptions.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/libs/SafeCall.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/ReceiveUlnBase.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/SendUlnBase.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/UlnBase.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IDVN.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IDVNFeeLib.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/ILayerZeroDVN.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/ILayerZeroReadDVN.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IReceiveUlnE2.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/DVNOptions.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/ReadCmdCodecV1.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/SupportedCmdTypes.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/UlnOptions.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/readlib/ReadLibBase.sol", - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/uln301/interfaces/IUltraLightNode301.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessageLibManager.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingChannel.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingComposer.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingContext.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroComposer.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/CalldataBytesLib.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Errors.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/GUID.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Transfer.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/BlockedMessageLib.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/BitMaps.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/ExecutorOptions.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol", - "node_modules/@layerzerolabs/lz-evm-v1-0.7/contracts/interfaces/ILayerZeroUltraLightNodeV2.sol", - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OApp.sol", - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppCore.sol", - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppReceiver.sol", - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppSender.sol", - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppComposer.sol", - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppCore.sol", - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppMsgInspector.sol", - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppOptionsType3.sol", - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppReceiver.sol", - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/libs/OAppOptionsType3.sol", - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/libs/OptionsBuilder.sol", - "node_modules/@layerzerolabs/oapp-evm/contracts/precrime/OAppPreCrimeSimulator.sol", - "node_modules/@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IOAppPreCrimeSimulator.sol", - "node_modules/@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IPreCrime.sol", - "node_modules/@layerzerolabs/oapp-evm/contracts/precrime/libs/Packet.sol", - "node_modules/@layerzerolabs/oft-evm/contracts/OFT.sol", - "node_modules/@layerzerolabs/oft-evm/contracts/OFTCore.sol", - "node_modules/@layerzerolabs/oft-evm/contracts/interfaces/IOFT.sol", - "node_modules/@layerzerolabs/oft-evm/contracts/libs/OFTComposeMsgCodec.sol", - "node_modules/@layerzerolabs/oft-evm/contracts/libs/OFTMsgCodec.sol", - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/OptionsHelper.sol", - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/TestHelperOz5.sol", - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/DVNFeeLibMock.sol", - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/DVNMock.sol", - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/EndpointV2AltMock.sol", - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/EndpointV2Mock.sol", - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ExecutorFeeLibMock.sol", - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ExecutorMock.sol", - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/MultiSigMock.sol", - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/PriceFeedMock.sol", - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ReadLib1002Mock.sol", - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ReceiveUln302Mock.sol", - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/SendUln302Mock.sol", - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/SimpleMessageLibMock.sol", - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/WorkerMock.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/test.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Base.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdAssertions.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdChains.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdCheats.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdError.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdInvariant.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdJson.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdMath.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdStorage.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdStyle.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdUtils.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Test.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Vm.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/console.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/console2.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/interfaces/IMulticall3.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/mocks/MockERC20.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/mocks/MockERC721.sol", - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/safeconsole.sol", - "node_modules/@openzeppelin/contracts/access/AccessControl.sol", - "node_modules/@openzeppelin/contracts/access/IAccessControl.sol", - "node_modules/@openzeppelin/contracts/access/Ownable.sol", - "node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol", - "node_modules/@openzeppelin/contracts/interfaces/IERC165.sol", - "node_modules/@openzeppelin/contracts/interfaces/IERC20.sol", - "node_modules/@openzeppelin/contracts/interfaces/draft-IERC6093.sol", - "node_modules/@openzeppelin/contracts/token/ERC20/ERC20.sol", - "node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol", - "node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol", - "node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol", - "node_modules/@openzeppelin/contracts/utils/Address.sol", - "node_modules/@openzeppelin/contracts/utils/Context.sol", - "node_modules/@openzeppelin/contracts/utils/Errors.sol", - "node_modules/@openzeppelin/contracts/utils/Panic.sol", - "node_modules/@openzeppelin/contracts/utils/Pausable.sol", - "node_modules/@openzeppelin/contracts/utils/ReentrancyGuard.sol", - "node_modules/@openzeppelin/contracts/utils/cryptography/ECDSA.sol", - "node_modules/@openzeppelin/contracts/utils/introspection/ERC165.sol", - "node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol", - "node_modules/@openzeppelin/contracts/utils/math/SafeCast.sol", - "node_modules/@openzeppelin/contracts/utils/structs/DoubleEndedQueue.sol", - "node_modules/solidity-bytes-utils/contracts/BytesLib.sol", - "test/evm/mocks/ERC20Mock.sol", - "test/evm/mocks/OFTComposerMock.sol", - "test/evm/mocks/OFTMock.sol" - ], - "versionRequirement": "^0.8.20", - "artifacts": { - "MyOFTTest": { - "0.8.22": { - "path": "MyOFT.t.sol/MyOFTTest.json", - "build_id": "8cf5046b276fd6c82474449fece4b596" - } - } - }, - "seenByCompiler": true - }, - "test/evm/mocks/ERC20Mock.sol": { - "lastModificationDate": 1735584189562, - "contentHash": "96267ae4cdbfb539711ca1be0c8fc71d", - "sourceName": "test/evm/mocks/ERC20Mock.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [ - "node_modules/@openzeppelin/contracts/interfaces/draft-IERC6093.sol", - "node_modules/@openzeppelin/contracts/token/ERC20/ERC20.sol", - "node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol", - "node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol", - "node_modules/@openzeppelin/contracts/utils/Context.sol" - ], - "versionRequirement": "^0.8.20", - "artifacts": { - "ERC20Mock": { - "0.8.22": { - "path": "ERC20Mock.sol/ERC20Mock.json", - "build_id": "8cf5046b276fd6c82474449fece4b596" - } - } - }, - "seenByCompiler": true - }, - "test/evm/mocks/OFTComposerMock.sol": { - "lastModificationDate": 1735584189562, - "contentHash": "b27d1f97d8aa6033d26850c2b5ddcd3d", - "sourceName": "test/evm/mocks/OFTComposerMock.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [ - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroComposer.sol", - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppComposer.sol" - ], - "versionRequirement": "^0.8.0", - "artifacts": { - "OFTComposerMock": { - "0.8.22": { - "path": "OFTComposerMock.sol/OFTComposerMock.json", - "build_id": "8cf5046b276fd6c82474449fece4b596" - } - } - }, - "seenByCompiler": true - }, - "test/evm/mocks/OFTMock.sol": { - "lastModificationDate": 1735584189564, - "contentHash": "55ff49dbf3fbd4cc7a3191a55045785d", - "sourceName": "test/evm/mocks/OFTMock.sol", - "compilerSettings": { - "solc": { - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { - "useLiteralContent": false, - "bytecodeHash": "ipfs", - "appendCBOR": true - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ] - } - }, - "evmVersion": "paris", - "viaIR": false, - "libraries": {} - }, - "vyper": { - "evmVersion": "paris", - "outputSelection": { - "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode"] } - } - } - }, - "imports": [ - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol", - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol", - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OApp.sol", - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppCore.sol", - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppReceiver.sol", - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppSender.sol", - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppCore.sol", - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppMsgInspector.sol", - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppOptionsType3.sol", - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppReceiver.sol", - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/libs/OAppOptionsType3.sol", - "node_modules/@layerzerolabs/oapp-evm/contracts/precrime/OAppPreCrimeSimulator.sol", - "node_modules/@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IOAppPreCrimeSimulator.sol", - "node_modules/@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IPreCrime.sol", - "node_modules/@layerzerolabs/oapp-evm/contracts/precrime/libs/Packet.sol", - "node_modules/@layerzerolabs/oft-evm/contracts/OFT.sol", - "node_modules/@layerzerolabs/oft-evm/contracts/OFTCore.sol", - "node_modules/@layerzerolabs/oft-evm/contracts/interfaces/IOFT.sol", - "node_modules/@layerzerolabs/oft-evm/contracts/libs/OFTComposeMsgCodec.sol", - "node_modules/@layerzerolabs/oft-evm/contracts/libs/OFTMsgCodec.sol", - "node_modules/@openzeppelin/contracts/access/Ownable.sol", - "node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol", - "node_modules/@openzeppelin/contracts/interfaces/IERC165.sol", - "node_modules/@openzeppelin/contracts/interfaces/IERC20.sol", - "node_modules/@openzeppelin/contracts/interfaces/draft-IERC6093.sol", - "node_modules/@openzeppelin/contracts/token/ERC20/ERC20.sol", - "node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol", - "node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol", - "node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol", - "node_modules/@openzeppelin/contracts/utils/Address.sol", - "node_modules/@openzeppelin/contracts/utils/Context.sol", - "node_modules/@openzeppelin/contracts/utils/Errors.sol", - "node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol" - ], - "versionRequirement": "^0.8.0", - "artifacts": { - "OFTMock": { - "0.8.22": { - "path": "OFTMock.sol/OFTMock.json", - "build_id": "8cf5046b276fd6c82474449fece4b596" - } - } - }, - "seenByCompiler": true - } - }, - "builds": [ - "15c57b83a95fe5a422295bb3f4778716", - "8cf5046b276fd6c82474449fece4b596" - ] -} diff --git a/examples/oft-movement/cache/hardhat/solidity-files-cache.json b/examples/oft-movement/cache/hardhat/solidity-files-cache.json deleted file mode 100644 index 4b35c2541..000000000 --- a/examples/oft-movement/cache/hardhat/solidity-files-cache.json +++ /dev/null @@ -1,1728 +0,0 @@ -{ - "_format": "hh-sol-cache-2", - "files": { - "/workspaces/devtools-krak/examples/oft-aptos/contracts/MyOFT.sol": { - "lastModificationDate": 1734057540839, - "contentHash": "52676528100f5143bc648cece466b14a", - "sourceName": "contracts/MyOFT.sol", - "solcConfig": { - "version": "0.8.22", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "evmVersion": "paris", - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata", - "devdoc", - "userdoc", - "storageLayout", - "evm.gasEstimates" - ], - "": ["ast"] - } - }, - "metadata": { - "useLiteralContent": true - } - } - }, - "imports": [ - "@openzeppelin/contracts/access/Ownable.sol", - "@layerzerolabs/oft-evm/contracts/OFT.sol" - ], - "versionPragmas": ["^0.8.22"], - "artifacts": ["MyOFT"] - }, - "/workspaces/devtools-krak/node_modules/.pnpm/@openzeppelin+contracts@5.1.0/node_modules/@openzeppelin/contracts/access/Ownable.sol": { - "lastModificationDate": 1734057718507, - "contentHash": "d3c790edc9ccf808a17c5a6cd13614fd", - "sourceName": "@openzeppelin/contracts/access/Ownable.sol", - "solcConfig": { - "version": "0.8.22", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "evmVersion": "paris", - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata", - "devdoc", - "userdoc", - "storageLayout", - "evm.gasEstimates" - ], - "": ["ast"] - } - }, - "metadata": { - "useLiteralContent": true - } - } - }, - "imports": ["../utils/Context.sol"], - "versionPragmas": ["^0.8.20"], - "artifacts": ["Ownable"] - }, - "/workspaces/devtools-krak/packages/oft-evm/contracts/OFT.sol": { - "lastModificationDate": 1734057540877, - "contentHash": "d3478162b3e0baf2d1efac39c19ca535", - "sourceName": "@layerzerolabs/oft-evm/contracts/OFT.sol", - "solcConfig": { - "version": "0.8.22", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "evmVersion": "paris", - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata", - "devdoc", - "userdoc", - "storageLayout", - "evm.gasEstimates" - ], - "": ["ast"] - } - }, - "metadata": { - "useLiteralContent": true - } - } - }, - "imports": [ - "@openzeppelin/contracts/token/ERC20/ERC20.sol", - "./OFTCore.sol" - ], - "versionPragmas": ["^0.8.20"], - "artifacts": ["OFT"] - }, - "/workspaces/devtools-krak/node_modules/.pnpm/@openzeppelin+contracts@5.1.0/node_modules/@openzeppelin/contracts/utils/Context.sol": { - "lastModificationDate": 1734057718470, - "contentHash": "67bfbc07588eb8683b3fd8f6f909563e", - "sourceName": "@openzeppelin/contracts/utils/Context.sol", - "solcConfig": { - "version": "0.8.22", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "evmVersion": "paris", - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata", - "devdoc", - "userdoc", - "storageLayout", - "evm.gasEstimates" - ], - "": ["ast"] - } - }, - "metadata": { - "useLiteralContent": true - } - } - }, - "imports": [], - "versionPragmas": ["^0.8.20"], - "artifacts": ["Context"] - }, - "/workspaces/devtools-krak/packages/oft-evm/contracts/OFTCore.sol": { - "lastModificationDate": 1734057540877, - "contentHash": "4b180c26729550e04c0476e8ead14b04", - "sourceName": "@layerzerolabs/oft-evm/contracts/OFTCore.sol", - "solcConfig": { - "version": "0.8.22", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "evmVersion": "paris", - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata", - "devdoc", - "userdoc", - "storageLayout", - "evm.gasEstimates" - ], - "": ["ast"] - } - }, - "metadata": { - "useLiteralContent": true - } - } - }, - "imports": [ - "@layerzerolabs/oapp-evm/contracts/oapp/OApp.sol", - "@layerzerolabs/oapp-evm/contracts/oapp/libs/OAppOptionsType3.sol", - "@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppMsgInspector.sol", - "@layerzerolabs/oapp-evm/contracts/precrime/OAppPreCrimeSimulator.sol", - "./interfaces/IOFT.sol", - "./libs/OFTMsgCodec.sol", - "./libs/OFTComposeMsgCodec.sol" - ], - "versionPragmas": ["^0.8.20"], - "artifacts": ["OFTCore"] - }, - "/workspaces/devtools-krak/node_modules/.pnpm/@openzeppelin+contracts@5.1.0/node_modules/@openzeppelin/contracts/token/ERC20/ERC20.sol": { - "lastModificationDate": 1734057718480, - "contentHash": "38910c3dfa5e3778fac8888b1d714084", - "sourceName": "@openzeppelin/contracts/token/ERC20/ERC20.sol", - "solcConfig": { - "version": "0.8.22", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "evmVersion": "paris", - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata", - "devdoc", - "userdoc", - "storageLayout", - "evm.gasEstimates" - ], - "": ["ast"] - } - }, - "metadata": { - "useLiteralContent": true - } - } - }, - "imports": [ - "./IERC20.sol", - "./extensions/IERC20Metadata.sol", - "../../utils/Context.sol", - "../../interfaces/draft-IERC6093.sol" - ], - "versionPragmas": ["^0.8.20"], - "artifacts": ["ERC20"] - }, - "/workspaces/devtools-krak/packages/oapp-evm/contracts/oapp/OApp.sol": { - "lastModificationDate": 1734057540873, - "contentHash": "5fff81a48e0699606f1ee7387d4a31a2", - "sourceName": "@layerzerolabs/oapp-evm/contracts/oapp/OApp.sol", - "solcConfig": { - "version": "0.8.22", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "evmVersion": "paris", - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata", - "devdoc", - "userdoc", - "storageLayout", - "evm.gasEstimates" - ], - "": ["ast"] - } - }, - "metadata": { - "useLiteralContent": true - } - } - }, - "imports": ["./OAppSender.sol", "./OAppReceiver.sol", "./OAppCore.sol"], - "versionPragmas": ["^0.8.20"], - "artifacts": ["OApp"] - }, - "/workspaces/devtools-krak/packages/oft-evm/contracts/interfaces/IOFT.sol": { - "lastModificationDate": 1734057540877, - "contentHash": "35da653ffbbfbf5f8b04d87b67896722", - "sourceName": "@layerzerolabs/oft-evm/contracts/interfaces/IOFT.sol", - "solcConfig": { - "version": "0.8.22", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "evmVersion": "paris", - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata", - "devdoc", - "userdoc", - "storageLayout", - "evm.gasEstimates" - ], - "": ["ast"] - } - }, - "metadata": { - "useLiteralContent": true - } - } - }, - "imports": ["@layerzerolabs/oapp-evm/contracts/oapp/OAppSender.sol"], - "versionPragmas": ["^0.8.20"], - "artifacts": ["IOFT"] - }, - "/workspaces/devtools-krak/packages/oapp-evm/contracts/precrime/OAppPreCrimeSimulator.sol": { - "lastModificationDate": 1734057540873, - "contentHash": "d803f2d59e6fcf81c071239983389479", - "sourceName": "@layerzerolabs/oapp-evm/contracts/precrime/OAppPreCrimeSimulator.sol", - "solcConfig": { - "version": "0.8.22", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "evmVersion": "paris", - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata", - "devdoc", - "userdoc", - "storageLayout", - "evm.gasEstimates" - ], - "": ["ast"] - } - }, - "metadata": { - "useLiteralContent": true - } - } - }, - "imports": [ - "@openzeppelin/contracts/access/Ownable.sol", - "./interfaces/IPreCrime.sol", - "./interfaces/IOAppPreCrimeSimulator.sol" - ], - "versionPragmas": ["^0.8.20"], - "artifacts": ["OAppPreCrimeSimulator"] - }, - "/workspaces/devtools-krak/packages/oft-evm/contracts/libs/OFTMsgCodec.sol": { - "lastModificationDate": 1734057540877, - "contentHash": "721d3e26148a5d6794537302ed308863", - "sourceName": "@layerzerolabs/oft-evm/contracts/libs/OFTMsgCodec.sol", - "solcConfig": { - "version": "0.8.22", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "evmVersion": "paris", - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata", - "devdoc", - "userdoc", - "storageLayout", - "evm.gasEstimates" - ], - "": ["ast"] - } - }, - "metadata": { - "useLiteralContent": true - } - } - }, - "imports": [], - "versionPragmas": ["^0.8.20"], - "artifacts": ["OFTMsgCodec"] - }, - "/workspaces/devtools-krak/packages/oft-evm/contracts/libs/OFTComposeMsgCodec.sol": { - "lastModificationDate": 1734057540877, - "contentHash": "f564a58fe800856f223a9dfc0f806d07", - "sourceName": "@layerzerolabs/oft-evm/contracts/libs/OFTComposeMsgCodec.sol", - "solcConfig": { - "version": "0.8.22", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "evmVersion": "paris", - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata", - "devdoc", - "userdoc", - "storageLayout", - "evm.gasEstimates" - ], - "": ["ast"] - } - }, - "metadata": { - "useLiteralContent": true - } - } - }, - "imports": [], - "versionPragmas": ["^0.8.20"], - "artifacts": ["OFTComposeMsgCodec"] - }, - "/workspaces/devtools-krak/packages/oapp-evm/contracts/oapp/libs/OAppOptionsType3.sol": { - "lastModificationDate": 1734057540873, - "contentHash": "d7df5d5ca30b9eb573ed7d9b73dd8eda", - "sourceName": "@layerzerolabs/oapp-evm/contracts/oapp/libs/OAppOptionsType3.sol", - "solcConfig": { - "version": "0.8.22", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "evmVersion": "paris", - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata", - "devdoc", - "userdoc", - "storageLayout", - "evm.gasEstimates" - ], - "": ["ast"] - } - }, - "metadata": { - "useLiteralContent": true - } - } - }, - "imports": [ - "@openzeppelin/contracts/access/Ownable.sol", - "../interfaces/IOAppOptionsType3.sol" - ], - "versionPragmas": ["^0.8.20"], - "artifacts": ["OAppOptionsType3"] - }, - "/workspaces/devtools-krak/packages/oapp-evm/contracts/oapp/interfaces/IOAppMsgInspector.sol": { - "lastModificationDate": 1734057540873, - "contentHash": "863511afe66a3ac0c83b469e7ca6cfb4", - "sourceName": "@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppMsgInspector.sol", - "solcConfig": { - "version": "0.8.22", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "evmVersion": "paris", - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata", - "devdoc", - "userdoc", - "storageLayout", - "evm.gasEstimates" - ], - "": ["ast"] - } - }, - "metadata": { - "useLiteralContent": true - } - } - }, - "imports": [], - "versionPragmas": ["^0.8.20"], - "artifacts": ["IOAppMsgInspector"] - }, - "/workspaces/devtools-krak/packages/oapp-evm/contracts/oapp/OAppSender.sol": { - "lastModificationDate": 1734057540873, - "contentHash": "8a54c076d80f5711e3511a0bbfcff1a1", - "sourceName": "@layerzerolabs/oapp-evm/contracts/oapp/OAppSender.sol", - "solcConfig": { - "version": "0.8.22", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "evmVersion": "paris", - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata", - "devdoc", - "userdoc", - "storageLayout", - "evm.gasEstimates" - ], - "": ["ast"] - } - }, - "metadata": { - "useLiteralContent": true - } - } - }, - "imports": [ - "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol", - "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol", - "./OAppCore.sol" - ], - "versionPragmas": ["^0.8.20"], - "artifacts": ["OAppSender"] - }, - "/workspaces/devtools-krak/packages/oapp-evm/contracts/oapp/OAppReceiver.sol": { - "lastModificationDate": 1734057540873, - "contentHash": "3621393509939962dd64af436aa5d131", - "sourceName": "@layerzerolabs/oapp-evm/contracts/oapp/OAppReceiver.sol", - "solcConfig": { - "version": "0.8.22", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "evmVersion": "paris", - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata", - "devdoc", - "userdoc", - "storageLayout", - "evm.gasEstimates" - ], - "": ["ast"] - } - }, - "metadata": { - "useLiteralContent": true - } - } - }, - "imports": ["./interfaces/IOAppReceiver.sol", "./OAppCore.sol"], - "versionPragmas": ["^0.8.20"], - "artifacts": ["OAppReceiver"] - }, - "/workspaces/devtools-krak/packages/oapp-evm/contracts/oapp/OAppCore.sol": { - "lastModificationDate": 1734057540873, - "contentHash": "392cf9b920add3244966148ee8de682a", - "sourceName": "@layerzerolabs/oapp-evm/contracts/oapp/OAppCore.sol", - "solcConfig": { - "version": "0.8.22", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "evmVersion": "paris", - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata", - "devdoc", - "userdoc", - "storageLayout", - "evm.gasEstimates" - ], - "": ["ast"] - } - }, - "metadata": { - "useLiteralContent": true - } - } - }, - "imports": [ - "@openzeppelin/contracts/access/Ownable.sol", - "./interfaces/IOAppCore.sol" - ], - "versionPragmas": ["^0.8.20"], - "artifacts": ["OAppCore"] - }, - "/workspaces/devtools-krak/node_modules/.pnpm/@layerzerolabs+lz-evm-protocol-v2@3.0.12_@openzeppelin+contracts-upgradeable@5.1.0_@openzeppe_tsipvv7rfzpiqp567bubbioevu/node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol": { - "lastModificationDate": 1734057718043, - "contentHash": "0790766778fa8995935c093d9cf03f84", - "sourceName": "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol", - "solcConfig": { - "version": "0.8.22", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "evmVersion": "paris", - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata", - "devdoc", - "userdoc", - "storageLayout", - "evm.gasEstimates" - ], - "": ["ast"] - } - }, - "metadata": { - "useLiteralContent": true - } - } - }, - "imports": [ - "./IMessageLibManager.sol", - "./IMessagingComposer.sol", - "./IMessagingChannel.sol", - "./IMessagingContext.sol" - ], - "versionPragmas": [">=0.8.0"], - "artifacts": ["ILayerZeroEndpointV2"] - }, - "/workspaces/devtools-krak/node_modules/.pnpm/@openzeppelin+contracts@5.1.0/node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol": { - "lastModificationDate": 1734057718512, - "contentHash": "effe88dd27f56305c4513f7aa9970ec9", - "sourceName": "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol", - "solcConfig": { - "version": "0.8.22", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "evmVersion": "paris", - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata", - "devdoc", - "userdoc", - "storageLayout", - "evm.gasEstimates" - ], - "": ["ast"] - } - }, - "metadata": { - "useLiteralContent": true - } - } - }, - "imports": [ - "../IERC20.sol", - "../../../interfaces/IERC1363.sol", - "../../../utils/Address.sol" - ], - "versionPragmas": ["^0.8.20"], - "artifacts": ["SafeERC20"] - }, - "/workspaces/devtools-krak/packages/oapp-evm/contracts/oapp/interfaces/IOAppCore.sol": { - "lastModificationDate": 1734057540873, - "contentHash": "f88e6ddf8ff977739a7178f0d1a276b3", - "sourceName": "@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppCore.sol", - "solcConfig": { - "version": "0.8.22", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "evmVersion": "paris", - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata", - "devdoc", - "userdoc", - "storageLayout", - "evm.gasEstimates" - ], - "": ["ast"] - } - }, - "metadata": { - "useLiteralContent": true - } - } - }, - "imports": [ - "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol" - ], - "versionPragmas": ["^0.8.20"], - "artifacts": ["IOAppCore"] - }, - "/workspaces/devtools-krak/node_modules/.pnpm/@layerzerolabs+lz-evm-protocol-v2@3.0.12_@openzeppelin+contracts-upgradeable@5.1.0_@openzeppe_tsipvv7rfzpiqp567bubbioevu/node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol": { - "lastModificationDate": 1734057718043, - "contentHash": "bcc2df90697b23f02303892874f96324", - "sourceName": "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol", - "solcConfig": { - "version": "0.8.22", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "evmVersion": "paris", - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata", - "devdoc", - "userdoc", - "storageLayout", - "evm.gasEstimates" - ], - "": ["ast"] - } - }, - "metadata": { - "useLiteralContent": true - } - } - }, - "imports": [], - "versionPragmas": [">=0.8.0"], - "artifacts": ["IMessagingComposer"] - }, - "/workspaces/devtools-krak/node_modules/.pnpm/@layerzerolabs+lz-evm-protocol-v2@3.0.12_@openzeppelin+contracts-upgradeable@5.1.0_@openzeppe_tsipvv7rfzpiqp567bubbioevu/node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol": { - "lastModificationDate": 1734057718043, - "contentHash": "2b8bfa473f049af8c74dffbff0766abf", - "sourceName": "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol", - "solcConfig": { - "version": "0.8.22", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "evmVersion": "paris", - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata", - "devdoc", - "userdoc", - "storageLayout", - "evm.gasEstimates" - ], - "": ["ast"] - } - }, - "metadata": { - "useLiteralContent": true - } - } - }, - "imports": [], - "versionPragmas": [">=0.8.0"], - "artifacts": ["IMessagingContext"] - }, - "/workspaces/devtools-krak/node_modules/.pnpm/@layerzerolabs+lz-evm-protocol-v2@3.0.12_@openzeppelin+contracts-upgradeable@5.1.0_@openzeppe_tsipvv7rfzpiqp567bubbioevu/node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol": { - "lastModificationDate": 1734057718043, - "contentHash": "a56a887b2721a98cf82842503bbf0ef0", - "sourceName": "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol", - "solcConfig": { - "version": "0.8.22", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "evmVersion": "paris", - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata", - "devdoc", - "userdoc", - "storageLayout", - "evm.gasEstimates" - ], - "": ["ast"] - } - }, - "metadata": { - "useLiteralContent": true - } - } - }, - "imports": [], - "versionPragmas": [">=0.8.0"], - "artifacts": ["IMessageLibManager"] - }, - "/workspaces/devtools-krak/node_modules/.pnpm/@layerzerolabs+lz-evm-protocol-v2@3.0.12_@openzeppelin+contracts-upgradeable@5.1.0_@openzeppe_tsipvv7rfzpiqp567bubbioevu/node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol": { - "lastModificationDate": 1734057718043, - "contentHash": "bd92a8f1c9f815025e8e3e676fe40b0d", - "sourceName": "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol", - "solcConfig": { - "version": "0.8.22", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "evmVersion": "paris", - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata", - "devdoc", - "userdoc", - "storageLayout", - "evm.gasEstimates" - ], - "": ["ast"] - } - }, - "metadata": { - "useLiteralContent": true - } - } - }, - "imports": [], - "versionPragmas": [">=0.8.0"], - "artifacts": ["IMessagingChannel"] - }, - "/workspaces/devtools-krak/node_modules/.pnpm/@openzeppelin+contracts@5.1.0/node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol": { - "lastModificationDate": 1734057718499, - "contentHash": "8f19f64d2adadf448840908bbaf431c8", - "sourceName": "@openzeppelin/contracts/token/ERC20/IERC20.sol", - "solcConfig": { - "version": "0.8.22", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "evmVersion": "paris", - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata", - "devdoc", - "userdoc", - "storageLayout", - "evm.gasEstimates" - ], - "": ["ast"] - } - }, - "metadata": { - "useLiteralContent": true - } - } - }, - "imports": [], - "versionPragmas": ["^0.8.20"], - "artifacts": ["IERC20"] - }, - "/workspaces/devtools-krak/node_modules/.pnpm/@openzeppelin+contracts@5.1.0/node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol": { - "lastModificationDate": 1734057718496, - "contentHash": "6b7c5ee7a59c981072a804c99ab0fac9", - "sourceName": "@openzeppelin/contracts/interfaces/IERC1363.sol", - "solcConfig": { - "version": "0.8.22", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "evmVersion": "paris", - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata", - "devdoc", - "userdoc", - "storageLayout", - "evm.gasEstimates" - ], - "": ["ast"] - } - }, - "metadata": { - "useLiteralContent": true - } - } - }, - "imports": ["./IERC20.sol", "./IERC165.sol"], - "versionPragmas": ["^0.8.20"], - "artifacts": ["IERC1363"] - }, - "/workspaces/devtools-krak/node_modules/.pnpm/@openzeppelin+contracts@5.1.0/node_modules/@openzeppelin/contracts/utils/Address.sol": { - "lastModificationDate": 1734057718466, - "contentHash": "553fc9ae17d9c00fd1c301b760781e26", - "sourceName": "@openzeppelin/contracts/utils/Address.sol", - "solcConfig": { - "version": "0.8.22", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "evmVersion": "paris", - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata", - "devdoc", - "userdoc", - "storageLayout", - "evm.gasEstimates" - ], - "": ["ast"] - } - }, - "metadata": { - "useLiteralContent": true - } - } - }, - "imports": ["./Errors.sol"], - "versionPragmas": ["^0.8.20"], - "artifacts": ["Address"] - }, - "/workspaces/devtools-krak/node_modules/.pnpm/@openzeppelin+contracts@5.1.0/node_modules/@openzeppelin/contracts/interfaces/IERC165.sol": { - "lastModificationDate": 1734057718497, - "contentHash": "f808b485ee0cdc6768ee8385ae5f9a2a", - "sourceName": "@openzeppelin/contracts/interfaces/IERC165.sol", - "solcConfig": { - "version": "0.8.22", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "evmVersion": "paris", - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata", - "devdoc", - "userdoc", - "storageLayout", - "evm.gasEstimates" - ], - "": ["ast"] - } - }, - "metadata": { - "useLiteralContent": true - } - } - }, - "imports": ["../utils/introspection/IERC165.sol"], - "versionPragmas": ["^0.8.20"], - "artifacts": [] - }, - "/workspaces/devtools-krak/node_modules/.pnpm/@openzeppelin+contracts@5.1.0/node_modules/@openzeppelin/contracts/interfaces/IERC20.sol": { - "lastModificationDate": 1734057718499, - "contentHash": "79af12d64eacc7d77b9ee2ac4b4d51ee", - "sourceName": "@openzeppelin/contracts/interfaces/IERC20.sol", - "solcConfig": { - "version": "0.8.22", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "evmVersion": "paris", - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata", - "devdoc", - "userdoc", - "storageLayout", - "evm.gasEstimates" - ], - "": ["ast"] - } - }, - "metadata": { - "useLiteralContent": true - } - } - }, - "imports": ["../token/ERC20/IERC20.sol"], - "versionPragmas": ["^0.8.20"], - "artifacts": [] - }, - "/workspaces/devtools-krak/node_modules/.pnpm/@openzeppelin+contracts@5.1.0/node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol": { - "lastModificationDate": 1734057718498, - "contentHash": "bf0119eb2a570f219729ff38b6cd1df8", - "sourceName": "@openzeppelin/contracts/utils/introspection/IERC165.sol", - "solcConfig": { - "version": "0.8.22", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "evmVersion": "paris", - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata", - "devdoc", - "userdoc", - "storageLayout", - "evm.gasEstimates" - ], - "": ["ast"] - } - }, - "metadata": { - "useLiteralContent": true - } - } - }, - "imports": [], - "versionPragmas": ["^0.8.20"], - "artifacts": ["IERC165"] - }, - "/workspaces/devtools-krak/node_modules/.pnpm/@openzeppelin+contracts@5.1.0/node_modules/@openzeppelin/contracts/utils/Errors.sol": { - "lastModificationDate": 1734057718488, - "contentHash": "6b5eac2b85500c3012977849cfd633d8", - "sourceName": "@openzeppelin/contracts/utils/Errors.sol", - "solcConfig": { - "version": "0.8.22", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "evmVersion": "paris", - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata", - "devdoc", - "userdoc", - "storageLayout", - "evm.gasEstimates" - ], - "": ["ast"] - } - }, - "metadata": { - "useLiteralContent": true - } - } - }, - "imports": [], - "versionPragmas": ["^0.8.20"], - "artifacts": ["Errors"] - }, - "/workspaces/devtools-krak/packages/oapp-evm/contracts/oapp/interfaces/IOAppReceiver.sol": { - "lastModificationDate": 1734057540873, - "contentHash": "8744fbd8f6967b21443fddfccede3f1e", - "sourceName": "@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppReceiver.sol", - "solcConfig": { - "version": "0.8.22", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "evmVersion": "paris", - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata", - "devdoc", - "userdoc", - "storageLayout", - "evm.gasEstimates" - ], - "": ["ast"] - } - }, - "metadata": { - "useLiteralContent": true - } - } - }, - "imports": [ - "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol" - ], - "versionPragmas": ["^0.8.20"], - "artifacts": ["IOAppReceiver"] - }, - "/workspaces/devtools-krak/node_modules/.pnpm/@layerzerolabs+lz-evm-protocol-v2@3.0.12_@openzeppelin+contracts-upgradeable@5.1.0_@openzeppe_tsipvv7rfzpiqp567bubbioevu/node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol": { - "lastModificationDate": 1734057718043, - "contentHash": "07bcbc5377578339628265a849de70f5", - "sourceName": "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol", - "solcConfig": { - "version": "0.8.22", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "evmVersion": "paris", - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata", - "devdoc", - "userdoc", - "storageLayout", - "evm.gasEstimates" - ], - "": ["ast"] - } - }, - "metadata": { - "useLiteralContent": true - } - } - }, - "imports": ["./ILayerZeroEndpointV2.sol"], - "versionPragmas": [">=0.8.0"], - "artifacts": ["ILayerZeroReceiver"] - }, - "/workspaces/devtools-krak/packages/oapp-evm/contracts/precrime/interfaces/IOAppPreCrimeSimulator.sol": { - "lastModificationDate": 1734057540874, - "contentHash": "acca130251942a833f49ab69e01bcd42", - "sourceName": "@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IOAppPreCrimeSimulator.sol", - "solcConfig": { - "version": "0.8.22", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "evmVersion": "paris", - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata", - "devdoc", - "userdoc", - "storageLayout", - "evm.gasEstimates" - ], - "": ["ast"] - } - }, - "metadata": { - "useLiteralContent": true - } - } - }, - "imports": ["../libs/Packet.sol"], - "versionPragmas": ["^0.8.20"], - "artifacts": ["IOAppPreCrimeSimulator"] - }, - "/workspaces/devtools-krak/packages/oapp-evm/contracts/precrime/interfaces/IPreCrime.sol": { - "lastModificationDate": 1734057540874, - "contentHash": "636408a0c09893cda2e9d23ceec10459", - "sourceName": "@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IPreCrime.sol", - "solcConfig": { - "version": "0.8.22", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "evmVersion": "paris", - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata", - "devdoc", - "userdoc", - "storageLayout", - "evm.gasEstimates" - ], - "": ["ast"] - } - }, - "metadata": { - "useLiteralContent": true - } - } - }, - "imports": [], - "versionPragmas": ["^0.8.20"], - "artifacts": ["IPreCrime"] - }, - "/workspaces/devtools-krak/packages/oapp-evm/contracts/precrime/libs/Packet.sol": { - "lastModificationDate": 1734057540874, - "contentHash": "49f5ad0a97a1acc3e81873e69b0ef3ab", - "sourceName": "@layerzerolabs/oapp-evm/contracts/precrime/libs/Packet.sol", - "solcConfig": { - "version": "0.8.22", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "evmVersion": "paris", - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata", - "devdoc", - "userdoc", - "storageLayout", - "evm.gasEstimates" - ], - "": ["ast"] - } - }, - "metadata": { - "useLiteralContent": true - } - } - }, - "imports": [ - "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol", - "@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol" - ], - "versionPragmas": ["^0.8.20"], - "artifacts": ["PacketDecoder"] - }, - "/workspaces/devtools-krak/node_modules/.pnpm/@layerzerolabs+lz-evm-protocol-v2@3.0.12_@openzeppelin+contracts-upgradeable@5.1.0_@openzeppe_tsipvv7rfzpiqp567bubbioevu/node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol": { - "lastModificationDate": 1734057718048, - "contentHash": "fb446531f87e319bbe661e5d6845964f", - "sourceName": "@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol", - "solcConfig": { - "version": "0.8.22", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "evmVersion": "paris", - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata", - "devdoc", - "userdoc", - "storageLayout", - "evm.gasEstimates" - ], - "": ["ast"] - } - }, - "metadata": { - "useLiteralContent": true - } - } - }, - "imports": [ - "../../interfaces/ISendLib.sol", - "../../libs/AddressCast.sol" - ], - "versionPragmas": ["^0.8.20"], - "artifacts": ["PacketV1Codec"] - }, - "/workspaces/devtools-krak/node_modules/.pnpm/@layerzerolabs+lz-evm-protocol-v2@3.0.12_@openzeppelin+contracts-upgradeable@5.1.0_@openzeppe_tsipvv7rfzpiqp567bubbioevu/node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol": { - "lastModificationDate": 1734057718043, - "contentHash": "2ed59a174607c55048374a27816752aa", - "sourceName": "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol", - "solcConfig": { - "version": "0.8.22", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "evmVersion": "paris", - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata", - "devdoc", - "userdoc", - "storageLayout", - "evm.gasEstimates" - ], - "": ["ast"] - } - }, - "metadata": { - "useLiteralContent": true - } - } - }, - "imports": ["./ILayerZeroEndpointV2.sol", "./IMessageLib.sol"], - "versionPragmas": [">=0.8.0"], - "artifacts": ["ISendLib"] - }, - "/workspaces/devtools-krak/node_modules/.pnpm/@layerzerolabs+lz-evm-protocol-v2@3.0.12_@openzeppelin+contracts-upgradeable@5.1.0_@openzeppe_tsipvv7rfzpiqp567bubbioevu/node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol": { - "lastModificationDate": 1734057718043, - "contentHash": "4ede58e59ea7779e777942a5da252697", - "sourceName": "@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol", - "solcConfig": { - "version": "0.8.22", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "evmVersion": "paris", - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata", - "devdoc", - "userdoc", - "storageLayout", - "evm.gasEstimates" - ], - "": ["ast"] - } - }, - "metadata": { - "useLiteralContent": true - } - } - }, - "imports": [], - "versionPragmas": ["^0.8.20"], - "artifacts": ["AddressCast"] - }, - "/workspaces/devtools-krak/node_modules/.pnpm/@layerzerolabs+lz-evm-protocol-v2@3.0.12_@openzeppelin+contracts-upgradeable@5.1.0_@openzeppe_tsipvv7rfzpiqp567bubbioevu/node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol": { - "lastModificationDate": 1734057718043, - "contentHash": "fa5082ec9a32dc00ab9dd5f759f3a756", - "sourceName": "@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol", - "solcConfig": { - "version": "0.8.22", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "evmVersion": "paris", - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata", - "devdoc", - "userdoc", - "storageLayout", - "evm.gasEstimates" - ], - "": ["ast"] - } - }, - "metadata": { - "useLiteralContent": true - } - } - }, - "imports": [ - "@openzeppelin/contracts/utils/introspection/IERC165.sol", - "./IMessageLibManager.sol" - ], - "versionPragmas": [">=0.8.0"], - "artifacts": ["IMessageLib"] - }, - "/workspaces/devtools-krak/packages/oapp-evm/contracts/oapp/interfaces/IOAppOptionsType3.sol": { - "lastModificationDate": 1734057540873, - "contentHash": "3b509d38279da870d798ed7039cfaf62", - "sourceName": "@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppOptionsType3.sol", - "solcConfig": { - "version": "0.8.22", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "evmVersion": "paris", - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata", - "devdoc", - "userdoc", - "storageLayout", - "evm.gasEstimates" - ], - "": ["ast"] - } - }, - "metadata": { - "useLiteralContent": true - } - } - }, - "imports": [], - "versionPragmas": ["^0.8.20"], - "artifacts": ["IOAppOptionsType3"] - }, - "/workspaces/devtools-krak/node_modules/.pnpm/@openzeppelin+contracts@5.1.0/node_modules/@openzeppelin/contracts/interfaces/draft-IERC6093.sol": { - "lastModificationDate": 1734057718472, - "contentHash": "267d92fe4de67b1bdb3302c08f387dbf", - "sourceName": "@openzeppelin/contracts/interfaces/draft-IERC6093.sol", - "solcConfig": { - "version": "0.8.22", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "evmVersion": "paris", - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata", - "devdoc", - "userdoc", - "storageLayout", - "evm.gasEstimates" - ], - "": ["ast"] - } - }, - "metadata": { - "useLiteralContent": true - } - } - }, - "imports": [], - "versionPragmas": ["^0.8.20"], - "artifacts": ["IERC1155Errors", "IERC20Errors", "IERC721Errors"] - }, - "/workspaces/devtools-krak/node_modules/.pnpm/@openzeppelin+contracts@5.1.0/node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol": { - "lastModificationDate": 1734057718500, - "contentHash": "794db3115001aa372c79326fcfd44b1f", - "sourceName": "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol", - "solcConfig": { - "version": "0.8.22", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "evmVersion": "paris", - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata", - "devdoc", - "userdoc", - "storageLayout", - "evm.gasEstimates" - ], - "": ["ast"] - } - }, - "metadata": { - "useLiteralContent": true - } - } - }, - "imports": ["../IERC20.sol"], - "versionPragmas": ["^0.8.20"], - "artifacts": ["IERC20Metadata"] - }, - "/workspaces/devtools-krak/examples/oft-aptos/contracts/mocks/MyOFTMock.sol": { - "lastModificationDate": 1734057540839, - "contentHash": "5d08690bc835b7e8c9efcd5abf91056b", - "sourceName": "contracts/mocks/MyOFTMock.sol", - "solcConfig": { - "version": "0.8.22", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "evmVersion": "paris", - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata", - "devdoc", - "userdoc", - "storageLayout", - "evm.gasEstimates" - ], - "": ["ast"] - } - }, - "metadata": { - "useLiteralContent": true - } - } - }, - "imports": ["../MyOFT.sol"], - "versionPragmas": ["^0.8.22"], - "artifacts": ["MyOFTMock"] - }, - "/workspaces/devtools-krak/examples/oft-movement/contracts/MyOFT.sol": { - "lastModificationDate": 1735584086056, - "contentHash": "52676528100f5143bc648cece466b14a", - "sourceName": "contracts/MyOFT.sol", - "solcConfig": { - "version": "0.8.22", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "evmVersion": "paris", - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata", - "devdoc", - "userdoc", - "storageLayout", - "evm.gasEstimates" - ], - "": ["ast"] - } - }, - "metadata": { - "useLiteralContent": true - } - } - }, - "imports": [ - "@openzeppelin/contracts/access/Ownable.sol", - "@layerzerolabs/oft-evm/contracts/OFT.sol" - ], - "versionPragmas": ["^0.8.22"], - "artifacts": ["MyOFT"] - }, - "/workspaces/devtools-krak/examples/oft-movement/contracts/mocks/MyOFTMock.sol": { - "lastModificationDate": 1735584086057, - "contentHash": "5d08690bc835b7e8c9efcd5abf91056b", - "sourceName": "contracts/mocks/MyOFTMock.sol", - "solcConfig": { - "version": "0.8.22", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "evmVersion": "paris", - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata", - "devdoc", - "userdoc", - "storageLayout", - "evm.gasEstimates" - ], - "": ["ast"] - } - }, - "metadata": { - "useLiteralContent": true - } - } - }, - "imports": ["../MyOFT.sol"], - "versionPragmas": ["^0.8.22"], - "artifacts": ["MyOFTMock"] - } - } -} diff --git a/examples/oft-movement/out/AccessControl.sol/AccessControl.json b/examples/oft-movement/out/AccessControl.sol/AccessControl.json deleted file mode 100644 index 3c18bffc1..000000000 --- a/examples/oft-movement/out/AccessControl.sol/AccessControl.json +++ /dev/null @@ -1,430 +0,0 @@ -{ - "abi": [ - { - "type": "function", - "name": "DEFAULT_ADMIN_ROLE", - "inputs": [], - "outputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getRoleAdmin", - "inputs": [ - { "name": "role", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "grantRole", - "inputs": [ - { "name": "role", "type": "bytes32", "internalType": "bytes32" }, - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "hasRole", - "inputs": [ - { "name": "role", "type": "bytes32", "internalType": "bytes32" }, - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "renounceRole", - "inputs": [ - { "name": "role", "type": "bytes32", "internalType": "bytes32" }, - { - "name": "callerConfirmation", - "type": "address", - "internalType": "address" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "revokeRole", - "inputs": [ - { "name": "role", "type": "bytes32", "internalType": "bytes32" }, - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "supportsInterface", - "inputs": [ - { "name": "interfaceId", "type": "bytes4", "internalType": "bytes4" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "event", - "name": "RoleAdminChanged", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "indexed": true, - "internalType": "bytes32" - }, - { - "name": "previousAdminRole", - "type": "bytes32", - "indexed": true, - "internalType": "bytes32" - }, - { - "name": "newAdminRole", - "type": "bytes32", - "indexed": true, - "internalType": "bytes32" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "RoleGranted", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "indexed": true, - "internalType": "bytes32" - }, - { - "name": "account", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "sender", - "type": "address", - "indexed": true, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "RoleRevoked", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "indexed": true, - "internalType": "bytes32" - }, - { - "name": "account", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "sender", - "type": "address", - "indexed": true, - "internalType": "address" - } - ], - "anonymous": false - }, - { "type": "error", "name": "AccessControlBadConfirmation", "inputs": [] }, - { - "type": "error", - "name": "AccessControlUnauthorizedAccount", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" }, - { "name": "neededRole", "type": "bytes32", "internalType": "bytes32" } - ] - } - ], - "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "methodIdentifiers": { - "DEFAULT_ADMIN_ROLE()": "a217fddf", - "getRoleAdmin(bytes32)": "248a9ca3", - "grantRole(bytes32,address)": "2f2ff15d", - "hasRole(bytes32,address)": "91d14854", - "renounceRole(bytes32,address)": "36568abe", - "revokeRole(bytes32,address)": "d547741f", - "supportsInterface(bytes4)": "01ffc9a7" - }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AccessControlBadConfirmation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"neededRole\",\"type\":\"bytes32\"}],\"name\":\"AccessControlUnauthorizedAccount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"callerConfirmation\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Contract module that allows children to implement role-based access control mechanisms. This is a lightweight version that doesn't allow enumerating role members except through off-chain means by accessing the contract event logs. Some applications may benefit from on-chain enumerability, for those cases see {AccessControlEnumerable}. Roles are referred to by their `bytes32` identifier. These should be exposed in the external API and be unique. The best way to achieve this is by using `public constant` hash digests: ```solidity bytes32 public constant MY_ROLE = keccak256(\\\"MY_ROLE\\\"); ``` Roles can be used to represent a set of permissions. To restrict access to a function call, use {hasRole}: ```solidity function foo() public { require(hasRole(MY_ROLE, msg.sender)); ... } ``` Roles can be granted and revoked dynamically via the {grantRole} and {revokeRole} functions. Each role has an associated admin role, and only accounts that have a role's admin role can call {grantRole} and {revokeRole}. By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means that only accounts with this role will be able to grant or revoke other roles. More complex role relationships can be created by using {_setRoleAdmin}. WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to grant and revoke this role. Extra precautions should be taken to secure accounts that have been granted it. We recommend using {AccessControlDefaultAdminRules} to enforce additional security measures for this role.\",\"errors\":{\"AccessControlBadConfirmation()\":[{\"details\":\"The caller of a function is not the expected one. NOTE: Don't confuse with {AccessControlUnauthorizedAccount}.\"}],\"AccessControlUnauthorizedAccount(address,bytes32)\":[{\"details\":\"The `account` is missing a role.\"}]},\"events\":{\"RoleAdminChanged(bytes32,bytes32,bytes32)\":{\"details\":\"Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted signaling this.\"},\"RoleGranted(bytes32,address,address)\":{\"details\":\"Emitted when `account` is granted `role`. `sender` is the account that originated the contract call. This account bears the admin role (for the granted role). Expected in cases where the role was granted using the internal {AccessControl-_grantRole}.\"},\"RoleRevoked(bytes32,address,address)\":{\"details\":\"Emitted when `account` is revoked `role`. `sender` is the account that originated the contract call: - if using `revokeRole`, it is the admin role bearer - if using `renounceRole`, it is the role bearer (i.e. `account`)\"}},\"kind\":\"dev\",\"methods\":{\"getRoleAdmin(bytes32)\":{\"details\":\"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}.\"},\"grantRole(bytes32,address)\":{\"details\":\"Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event.\"},\"hasRole(bytes32,address)\":{\"details\":\"Returns `true` if `account` has been granted `role`.\"},\"renounceRole(bytes32,address)\":{\"details\":\"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `callerConfirmation`. May emit a {RoleRevoked} event.\"},\"revokeRole(bytes32,address)\":{\"details\":\"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event.\"},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@openzeppelin/contracts/access/AccessControl.sol\":\"AccessControl\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@openzeppelin/contracts/access/AccessControl.sol\":{\"keccak256\":\"0xa0e92d42942f4f57c5be50568dac11e9d00c93efcb458026e18d2d9b9b2e7308\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://46326c0bb1e296b67185e81c918e0b40501b8b6386165855df0a3f3c634b6a80\",\"dweb:/ipfs/QmTwyrDYtsxsk6pymJTK94PnEpzsmkpUxFuzEiakDopy4Z\"]},\"node_modules/@openzeppelin/contracts/access/IAccessControl.sol\":{\"keccak256\":\"0xc1c2a7f1563b77050dc6d507db9f4ada5d042c1f6a9ddbffdc49c77cdc0a1606\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fd54abb96a6156d9a761f6fdad1d3004bc48d2d4fce47f40a3f91a7ae83fc3a1\",\"dweb:/ipfs/QmUrFSGkTDJ7WaZ6qPVVe3Gn5uN2viPb7x7QQ35UX4DofX\"]},\"node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"node_modules/@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0xddce8e17e3d3f9ed818b4f4c4478a8262aab8b11ed322f1bf5ed705bb4bd97fa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8084aa71a4cc7d2980972412a88fe4f114869faea3fefa5436431644eb5c0287\",\"dweb:/ipfs/Qmbqfs5dRdPvHVKY8kTaeyc65NdqXRQwRK7h9s5UJEhD1p\"]},\"node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { - "inputs": [], - "type": "error", - "name": "AccessControlBadConfirmation" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" }, - { - "internalType": "bytes32", - "name": "neededRole", - "type": "bytes32" - } - ], - "type": "error", - "name": "AccessControlUnauthorizedAccount" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32", - "indexed": true - }, - { - "internalType": "bytes32", - "name": "previousAdminRole", - "type": "bytes32", - "indexed": true - }, - { - "internalType": "bytes32", - "name": "newAdminRole", - "type": "bytes32", - "indexed": true - } - ], - "type": "event", - "name": "RoleAdminChanged", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32", - "indexed": true - }, - { - "internalType": "address", - "name": "account", - "type": "address", - "indexed": true - }, - { - "internalType": "address", - "name": "sender", - "type": "address", - "indexed": true - } - ], - "type": "event", - "name": "RoleGranted", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32", - "indexed": true - }, - { - "internalType": "address", - "name": "account", - "type": "address", - "indexed": true - }, - { - "internalType": "address", - "name": "sender", - "type": "address", - "indexed": true - } - ], - "type": "event", - "name": "RoleRevoked", - "anonymous": false - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "DEFAULT_ADMIN_ROLE", - "outputs": [ - { "internalType": "bytes32", "name": "", "type": "bytes32" } - ] - }, - { - "inputs": [ - { "internalType": "bytes32", "name": "role", "type": "bytes32" } - ], - "stateMutability": "view", - "type": "function", - "name": "getRoleAdmin", - "outputs": [ - { "internalType": "bytes32", "name": "", "type": "bytes32" } - ] - }, - { - "inputs": [ - { "internalType": "bytes32", "name": "role", "type": "bytes32" }, - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "grantRole" - }, - { - "inputs": [ - { "internalType": "bytes32", "name": "role", "type": "bytes32" }, - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "hasRole", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "bytes32", "name": "role", "type": "bytes32" }, - { - "internalType": "address", - "name": "callerConfirmation", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "renounceRole" - }, - { - "inputs": [ - { "internalType": "bytes32", "name": "role", "type": "bytes32" }, - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "revokeRole" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "stateMutability": "view", - "type": "function", - "name": "supportsInterface", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - } - ], - "devdoc": { - "kind": "dev", - "methods": { - "getRoleAdmin(bytes32)": { - "details": "Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}." - }, - "grantRole(bytes32,address)": { - "details": "Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event." - }, - "hasRole(bytes32,address)": { - "details": "Returns `true` if `account` has been granted `role`." - }, - "renounceRole(bytes32,address)": { - "details": "Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `callerConfirmation`. May emit a {RoleRevoked} event." - }, - "revokeRole(bytes32,address)": { - "details": "Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event." - }, - "supportsInterface(bytes4)": { - "details": "See {IERC165-supportsInterface}." - } - }, - "version": 1 - }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@openzeppelin/contracts/access/AccessControl.sol": "AccessControl" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@openzeppelin/contracts/access/AccessControl.sol": { - "keccak256": "0xa0e92d42942f4f57c5be50568dac11e9d00c93efcb458026e18d2d9b9b2e7308", - "urls": [ - "bzz-raw://46326c0bb1e296b67185e81c918e0b40501b8b6386165855df0a3f3c634b6a80", - "dweb:/ipfs/QmTwyrDYtsxsk6pymJTK94PnEpzsmkpUxFuzEiakDopy4Z" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/access/IAccessControl.sol": { - "keccak256": "0xc1c2a7f1563b77050dc6d507db9f4ada5d042c1f6a9ddbffdc49c77cdc0a1606", - "urls": [ - "bzz-raw://fd54abb96a6156d9a761f6fdad1d3004bc48d2d4fce47f40a3f91a7ae83fc3a1", - "dweb:/ipfs/QmUrFSGkTDJ7WaZ6qPVVe3Gn5uN2viPb7x7QQ35UX4DofX" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Context.sol": { - "keccak256": "0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2", - "urls": [ - "bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12", - "dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/introspection/ERC165.sol": { - "keccak256": "0xddce8e17e3d3f9ed818b4f4c4478a8262aab8b11ed322f1bf5ed705bb4bd97fa", - "urls": [ - "bzz-raw://8084aa71a4cc7d2980972412a88fe4f114869faea3fefa5436431644eb5c0287", - "dweb:/ipfs/Qmbqfs5dRdPvHVKY8kTaeyc65NdqXRQwRK7h9s5UJEhD1p" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol": { - "keccak256": "0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8", - "urls": [ - "bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621", - "dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL" - ], - "license": "MIT" - } - }, - "version": 1 - }, - "id": 105 -} diff --git a/examples/oft-movement/out/Address.sol/Address.json b/examples/oft-movement/out/Address.sol/Address.json deleted file mode 100644 index 6e2dd121b..000000000 --- a/examples/oft-movement/out/Address.sol/Address.json +++ /dev/null @@ -1,78 +0,0 @@ -{ - "abi": [ - { - "type": "error", - "name": "AddressEmptyCode", - "inputs": [ - { "name": "target", "type": "address", "internalType": "address" } - ] - } - ], - "bytecode": { - "object": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220cabf5d96eb02087e4aca6d4153fad9c9b0af2b79287a9ef9835018341080f01d64736f6c63430008160033", - "sourceMap": "233:5799:39:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;233:5799:39;;;;;;;;;;;;;;;;;", - "linkReferences": {} - }, - "deployedBytecode": { - "object": "0x73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220cabf5d96eb02087e4aca6d4153fad9c9b0af2b79287a9ef9835018341080f01d64736f6c63430008160033", - "sourceMap": "233:5799:39:-:0;;;;;;;;", - "linkReferences": {} - }, - "methodIdentifiers": {}, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Collection of functions related to the address type\",\"errors\":{\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@openzeppelin/contracts/utils/Address.sol\":\"Address\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0x9d8da059267bac779a2dbbb9a26c2acf00ca83085e105d62d5d4ef96054a47f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c78e2aa4313323cecd1ef12a8d6265b96beee1a199923abf55d9a2a9e291ad23\",\"dweb:/ipfs/QmUTs2KStXucZezzFo3EYeqYu47utu56qrF7jj1Gue65vb\"]},\"node_modules/@openzeppelin/contracts/utils/Errors.sol\":{\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf\",\"dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { - "inputs": [ - { "internalType": "address", "name": "target", "type": "address" } - ], - "type": "error", - "name": "AddressEmptyCode" - } - ], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@openzeppelin/contracts/utils/Address.sol": "Address" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@openzeppelin/contracts/utils/Address.sol": { - "keccak256": "0x9d8da059267bac779a2dbbb9a26c2acf00ca83085e105d62d5d4ef96054a47f5", - "urls": [ - "bzz-raw://c78e2aa4313323cecd1ef12a8d6265b96beee1a199923abf55d9a2a9e291ad23", - "dweb:/ipfs/QmUTs2KStXucZezzFo3EYeqYu47utu56qrF7jj1Gue65vb" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Errors.sol": { - "keccak256": "0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123", - "urls": [ - "bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf", - "dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB" - ], - "license": "MIT" - } - }, - "version": 1 - }, - "id": 39 -} diff --git a/examples/oft-movement/out/AddressCast.sol/AddressCast.json b/examples/oft-movement/out/AddressCast.sol/AddressCast.json deleted file mode 100644 index f512fde43..000000000 --- a/examples/oft-movement/out/AddressCast.sol/AddressCast.json +++ /dev/null @@ -1,68 +0,0 @@ -{ - "abi": [ - { "type": "error", "name": "AddressCast_InvalidAddress", "inputs": [] }, - { - "type": "error", - "name": "AddressCast_InvalidSizeForAddress", - "inputs": [] - } - ], - "bytecode": { - "object": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220242a16a9a157a7e1852819b510bac6864224d1deaca6d594fb99ea8f36df8b8b64736f6c63430008160033", - "sourceMap": "64:1401:10:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;64:1401:10;;;;;;;;;;;;;;;;;", - "linkReferences": {} - }, - "deployedBytecode": { - "object": "0x73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220242a16a9a157a7e1852819b510bac6864224d1deaca6d594fb99ea8f36df8b8b64736f6c63430008160033", - "sourceMap": "64:1401:10:-:0;;;;;;;;", - "linkReferences": {} - }, - "methodIdentifiers": {}, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AddressCast_InvalidAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AddressCast_InvalidSizeForAddress\",\"type\":\"error\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol\":\"AddressCast\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol\":{\"keccak256\":\"0x2ebbcaaab3554edcd41b581f1a72ac1806afbfb8047d0d47ff098f9af30d6deb\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://2d4b2cf5c3b16dc76c6767f285b57c0af917972327b2be3f7cba5825402f5fc1\",\"dweb:/ipfs/QmQQWiHE2jKEDbjzGutSoZwtApSXYfLqZt5CxEpFj8xyvT\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { "inputs": [], "type": "error", "name": "AddressCast_InvalidAddress" }, - { - "inputs": [], - "type": "error", - "name": "AddressCast_InvalidSizeForAddress" - } - ], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol": "AddressCast" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol": { - "keccak256": "0x2ebbcaaab3554edcd41b581f1a72ac1806afbfb8047d0d47ff098f9af30d6deb", - "urls": [ - "bzz-raw://2d4b2cf5c3b16dc76c6767f285b57c0af917972327b2be3f7cba5825402f5fc1", - "dweb:/ipfs/QmQQWiHE2jKEDbjzGutSoZwtApSXYfLqZt5CxEpFj8xyvT" - ], - "license": "LZBL-1.2" - } - }, - "version": 1 - }, - "id": 10 -} diff --git a/examples/oft-movement/out/Base.sol/CommonBase.json b/examples/oft-movement/out/Base.sol/CommonBase.json deleted file mode 100644 index 0d867a6f5..000000000 --- a/examples/oft-movement/out/Base.sol/CommonBase.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "abi": [], - "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "methodIdentifiers": {}, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Base.sol\":\"CommonBase\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Base.sol\":{\"keccak256\":\"0x4ff1a785311017d1eedb1b4737956fa383067ad34eb439abfec1d989754dde1c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f553622969b9fdb930246704a4c10dfaee6b1a4468c142fa7eb9dc292a438224\",\"dweb:/ipfs/QmcxqHnqdQsMVtgsfH9VNLmZ3g7GhgNagfq7yvNCDcCHFK\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdStorage.sol\":{\"keccak256\":\"0x4298f3f4cedaedb07029820b1daad2c03af45379559392201f7bf3ec71105811\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6e062f36d8d1ae3c383ef8975757926eaa9c4de3a92b5f1fe2d12748bcd8db32\",\"dweb:/ipfs/QmcWkv3ia5Ew4DZNcudMNSTNXZ3W2QiXTZunRd44e9BT8z\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Vm.sol\":{\"keccak256\":\"0x87ba9f3edc254e529db9e3129c954391adcc7fc8574203767979d8d2f1e724b9\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://4d16c08d80d9f2869deb6350642cf5af624d21fce6b3b023abbcdedc62e195fe\",\"dweb:/ipfs/QmURpnnFECPKt3i7P7jQRZpr4ZBXjRGcZ9KzcbKzsgYR2W\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Base.sol": "CommonBase" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Base.sol": { - "keccak256": "0x4ff1a785311017d1eedb1b4737956fa383067ad34eb439abfec1d989754dde1c", - "urls": [ - "bzz-raw://f553622969b9fdb930246704a4c10dfaee6b1a4468c142fa7eb9dc292a438224", - "dweb:/ipfs/QmcxqHnqdQsMVtgsfH9VNLmZ3g7GhgNagfq7yvNCDcCHFK" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdStorage.sol": { - "keccak256": "0x4298f3f4cedaedb07029820b1daad2c03af45379559392201f7bf3ec71105811", - "urls": [ - "bzz-raw://6e062f36d8d1ae3c383ef8975757926eaa9c4de3a92b5f1fe2d12748bcd8db32", - "dweb:/ipfs/QmcWkv3ia5Ew4DZNcudMNSTNXZ3W2QiXTZunRd44e9BT8z" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Vm.sol": { - "keccak256": "0x87ba9f3edc254e529db9e3129c954391adcc7fc8574203767979d8d2f1e724b9", - "urls": [ - "bzz-raw://4d16c08d80d9f2869deb6350642cf5af624d21fce6b3b023abbcdedc62e195fe", - "dweb:/ipfs/QmURpnnFECPKt3i7P7jQRZpr4ZBXjRGcZ9KzcbKzsgYR2W" - ], - "license": "MIT OR Apache-2.0" - } - }, - "version": 1 - }, - "id": 86 -} diff --git a/examples/oft-movement/out/Base.sol/ScriptBase.json b/examples/oft-movement/out/Base.sol/ScriptBase.json deleted file mode 100644 index bdd001929..000000000 --- a/examples/oft-movement/out/Base.sol/ScriptBase.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "abi": [], - "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "methodIdentifiers": {}, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Base.sol\":\"ScriptBase\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Base.sol\":{\"keccak256\":\"0x4ff1a785311017d1eedb1b4737956fa383067ad34eb439abfec1d989754dde1c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f553622969b9fdb930246704a4c10dfaee6b1a4468c142fa7eb9dc292a438224\",\"dweb:/ipfs/QmcxqHnqdQsMVtgsfH9VNLmZ3g7GhgNagfq7yvNCDcCHFK\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdStorage.sol\":{\"keccak256\":\"0x4298f3f4cedaedb07029820b1daad2c03af45379559392201f7bf3ec71105811\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6e062f36d8d1ae3c383ef8975757926eaa9c4de3a92b5f1fe2d12748bcd8db32\",\"dweb:/ipfs/QmcWkv3ia5Ew4DZNcudMNSTNXZ3W2QiXTZunRd44e9BT8z\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Vm.sol\":{\"keccak256\":\"0x87ba9f3edc254e529db9e3129c954391adcc7fc8574203767979d8d2f1e724b9\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://4d16c08d80d9f2869deb6350642cf5af624d21fce6b3b023abbcdedc62e195fe\",\"dweb:/ipfs/QmURpnnFECPKt3i7P7jQRZpr4ZBXjRGcZ9KzcbKzsgYR2W\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Base.sol": "ScriptBase" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Base.sol": { - "keccak256": "0x4ff1a785311017d1eedb1b4737956fa383067ad34eb439abfec1d989754dde1c", - "urls": [ - "bzz-raw://f553622969b9fdb930246704a4c10dfaee6b1a4468c142fa7eb9dc292a438224", - "dweb:/ipfs/QmcxqHnqdQsMVtgsfH9VNLmZ3g7GhgNagfq7yvNCDcCHFK" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdStorage.sol": { - "keccak256": "0x4298f3f4cedaedb07029820b1daad2c03af45379559392201f7bf3ec71105811", - "urls": [ - "bzz-raw://6e062f36d8d1ae3c383ef8975757926eaa9c4de3a92b5f1fe2d12748bcd8db32", - "dweb:/ipfs/QmcWkv3ia5Ew4DZNcudMNSTNXZ3W2QiXTZunRd44e9BT8z" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Vm.sol": { - "keccak256": "0x87ba9f3edc254e529db9e3129c954391adcc7fc8574203767979d8d2f1e724b9", - "urls": [ - "bzz-raw://4d16c08d80d9f2869deb6350642cf5af624d21fce6b3b023abbcdedc62e195fe", - "dweb:/ipfs/QmURpnnFECPKt3i7P7jQRZpr4ZBXjRGcZ9KzcbKzsgYR2W" - ], - "license": "MIT OR Apache-2.0" - } - }, - "version": 1 - }, - "id": 86 -} diff --git a/examples/oft-movement/out/Base.sol/TestBase.json b/examples/oft-movement/out/Base.sol/TestBase.json deleted file mode 100644 index 7f911c7e8..000000000 --- a/examples/oft-movement/out/Base.sol/TestBase.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "abi": [], - "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "methodIdentifiers": {}, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Base.sol\":\"TestBase\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Base.sol\":{\"keccak256\":\"0x4ff1a785311017d1eedb1b4737956fa383067ad34eb439abfec1d989754dde1c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f553622969b9fdb930246704a4c10dfaee6b1a4468c142fa7eb9dc292a438224\",\"dweb:/ipfs/QmcxqHnqdQsMVtgsfH9VNLmZ3g7GhgNagfq7yvNCDcCHFK\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdStorage.sol\":{\"keccak256\":\"0x4298f3f4cedaedb07029820b1daad2c03af45379559392201f7bf3ec71105811\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6e062f36d8d1ae3c383ef8975757926eaa9c4de3a92b5f1fe2d12748bcd8db32\",\"dweb:/ipfs/QmcWkv3ia5Ew4DZNcudMNSTNXZ3W2QiXTZunRd44e9BT8z\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Vm.sol\":{\"keccak256\":\"0x87ba9f3edc254e529db9e3129c954391adcc7fc8574203767979d8d2f1e724b9\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://4d16c08d80d9f2869deb6350642cf5af624d21fce6b3b023abbcdedc62e195fe\",\"dweb:/ipfs/QmURpnnFECPKt3i7P7jQRZpr4ZBXjRGcZ9KzcbKzsgYR2W\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Base.sol": "TestBase" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Base.sol": { - "keccak256": "0x4ff1a785311017d1eedb1b4737956fa383067ad34eb439abfec1d989754dde1c", - "urls": [ - "bzz-raw://f553622969b9fdb930246704a4c10dfaee6b1a4468c142fa7eb9dc292a438224", - "dweb:/ipfs/QmcxqHnqdQsMVtgsfH9VNLmZ3g7GhgNagfq7yvNCDcCHFK" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdStorage.sol": { - "keccak256": "0x4298f3f4cedaedb07029820b1daad2c03af45379559392201f7bf3ec71105811", - "urls": [ - "bzz-raw://6e062f36d8d1ae3c383ef8975757926eaa9c4de3a92b5f1fe2d12748bcd8db32", - "dweb:/ipfs/QmcWkv3ia5Ew4DZNcudMNSTNXZ3W2QiXTZunRd44e9BT8z" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Vm.sol": { - "keccak256": "0x87ba9f3edc254e529db9e3129c954391adcc7fc8574203767979d8d2f1e724b9", - "urls": [ - "bzz-raw://4d16c08d80d9f2869deb6350642cf5af624d21fce6b3b023abbcdedc62e195fe", - "dweb:/ipfs/QmURpnnFECPKt3i7P7jQRZpr4ZBXjRGcZ9KzcbKzsgYR2W" - ], - "license": "MIT OR Apache-2.0" - } - }, - "version": 1 - }, - "id": 86 -} diff --git a/examples/oft-movement/out/BitMaps.sol/BitMaps.json b/examples/oft-movement/out/BitMaps.sol/BitMaps.json deleted file mode 100644 index 19010a855..000000000 --- a/examples/oft-movement/out/BitMaps.sol/BitMaps.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "abi": [], - "bytecode": { - "object": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220200a33f4ffb38f37649b4d4c74853421d57934c810a5d02f4c8d876697752bb764736f6c63430008160033", - "sourceMap": "244:506:46:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;244:506:46;;;;;;;;;;;;;;;;;", - "linkReferences": {} - }, - "deployedBytecode": { - "object": "0x73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220200a33f4ffb38f37649b4d4c74853421d57934c810a5d02f4c8d876697752bb764736f6c63430008160033", - "sourceMap": "244:506:46:-:0;;;;;;;;", - "linkReferences": {} - }, - "methodIdentifiers": {}, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/BitMaps.sol\":\"BitMaps\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/BitMaps.sol\":{\"keccak256\":\"0xaad3c72ef43480d2253fd48b394e8fb7286d009991d2bc4e61be58ce48ac5ee9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b8c02b14f954416ba2148b389c87da8378ac8dd16ba3d458cbbfba8b0fd8639f\",\"dweb:/ipfs/Qmd2EEQhYL2VmgJi1V4uiHM2WcYxF9iBtxSgcFkbS21rQD\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/BitMaps.sol": "BitMaps" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/BitMaps.sol": { - "keccak256": "0xaad3c72ef43480d2253fd48b394e8fb7286d009991d2bc4e61be58ce48ac5ee9", - "urls": [ - "bzz-raw://b8c02b14f954416ba2148b389c87da8378ac8dd16ba3d458cbbfba8b0fd8639f", - "dweb:/ipfs/Qmd2EEQhYL2VmgJi1V4uiHM2WcYxF9iBtxSgcFkbS21rQD" - ], - "license": "MIT" - } - }, - "version": 1 - }, - "id": 46 -} diff --git a/examples/oft-movement/out/BlockedMessageLib.sol/BlockedMessageLib.json b/examples/oft-movement/out/BlockedMessageLib.sol/BlockedMessageLib.json deleted file mode 100644 index 82e9fbdb8..000000000 --- a/examples/oft-movement/out/BlockedMessageLib.sol/BlockedMessageLib.json +++ /dev/null @@ -1,199 +0,0 @@ -{ - "abi": [ - { "type": "fallback", "stateMutability": "nonpayable" }, - { - "type": "function", - "name": "isSupportedEid", - "inputs": [{ "name": "", "type": "uint32", "internalType": "uint32" }], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "messageLibType", - "inputs": [], - "outputs": [ - { "name": "", "type": "uint8", "internalType": "enum MessageLibType" } - ], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "supportsInterface", - "inputs": [ - { "name": "interfaceId", "type": "bytes4", "internalType": "bytes4" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "version", - "inputs": [], - "outputs": [ - { "name": "major", "type": "uint64", "internalType": "uint64" }, - { "name": "minor", "type": "uint8", "internalType": "uint8" }, - { "name": "endpointVersion", "type": "uint8", "internalType": "uint8" } - ], - "stateMutability": "pure" - }, - { "type": "error", "name": "LZ_NotImplemented", "inputs": [] } - ], - "bytecode": { - "object": "0x608060405234801561001057600080fd5b506101c3806100206000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806301ffc9a7146100655780631881d94d1461008d57806354fd4d501461009c5780636750cd4c146100c3575b604051632657b6c360e01b815260040160405180910390fd5b61007861007336600461010e565b6100d7565b60405190151581526020015b60405180910390f35b6002604051610084919061013f565b6040805167ffffffffffffffff815260ff6020820152600291810191909152606001610084565b6100786100d1366004610167565b50600190565b60006001600160e01b031982166325fc096160e21b148061010857506301ffc9a760e01b6001600160e01b03198316145b92915050565b60006020828403121561012057600080fd5b81356001600160e01b03198116811461013857600080fd5b9392505050565b602081016003831061016157634e487b7160e01b600052602160045260246000fd5b91905290565b60006020828403121561017957600080fd5b813563ffffffff8116811461013857600080fdfea2646970667358221220b5a5c043a377444c26f6a8e7dd680ec55e20f7abeec109769ef20ff322bd379164736f6c63430008160033", - "sourceMap": "269:691:45:-:0;;;;;;;;;;;;;;;;;;;", - "linkReferences": {} - }, - "deployedBytecode": { - "object": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c806301ffc9a7146100655780631881d94d1461008d57806354fd4d501461009c5780636750cd4c146100c3575b604051632657b6c360e01b815260040160405180910390fd5b61007861007336600461010e565b6100d7565b60405190151581526020015b60405180910390f35b6002604051610084919061013f565b6040805167ffffffffffffffff815260ff6020820152600291810191909152606001610084565b6100786100d1366004610167565b50600190565b60006001600160e01b031982166325fc096160e21b148061010857506301ffc9a760e01b6001600160e01b03198316145b92915050565b60006020828403121561012057600080fd5b81356001600160e01b03198116811461013857600080fd5b9392505050565b602081016003831061016157634e487b7160e01b600052602160045260246000fd5b91905290565b60006020828403121561017957600080fd5b813563ffffffff8116811461013857600080fdfea2646970667358221220b5a5c043a377444c26f6a8e7dd680ec55e20f7abeec109769ef20ff322bd379164736f6c63430008160033", - "sourceMap": "269:691:45:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;925:26;;-1:-1:-1;;;925:26:45;;;;;;;;;;;312:191;;;;;;:::i;:::-;;:::i;:::-;;;470:14:132;;463:22;445:41;;433:2;418:18;312:191:45;;;;;;;;669:118;751:29;669:118;;;;;;:::i;509:154::-;;;;619:16;1041:50:132;;637:15:45;1122:2:132;1107:18;;1100:45;654:1:45;1161:18:132;;;1154:45;;;;1029:2;1014:18;509:154:45;849:356:132;793:89:45;;;;;;:::i;:::-;-1:-1:-1;871:4:45;;793:89;312:191;389:4;-1:-1:-1;;;;;;412:44:45;;-1:-1:-1;;;412:44:45;;:84;;-1:-1:-1;;;;;;;;;;862:40:123;;;460:36:45;405:91;312:191;-1:-1:-1;;312:191:45:o;14:286:132:-;72:6;125:2;113:9;104:7;100:23;96:32;93:52;;;141:1;138;131:12;93:52;167:23;;-1:-1:-1;;;;;;219:32:132;;209:43;;199:71;;266:1;263;256:12;199:71;289:5;14:286;-1:-1:-1;;;14:286:132:o;497:347::-;648:2;633:18;;681:1;670:13;;660:144;;726:10;721:3;717:20;714:1;707:31;761:4;758:1;751:15;789:4;786:1;779:15;660:144;813:25;;;497:347;:::o;1210:276::-;1268:6;1321:2;1309:9;1300:7;1296:23;1292:32;1289:52;;;1337:1;1334;1327:12;1289:52;1376:9;1363:23;1426:10;1419:5;1415:22;1408:5;1405:33;1395:61;;1452:1;1449;1442:12", - "linkReferences": {} - }, - "methodIdentifiers": { - "isSupportedEid(uint32)": "6750cd4c", - "messageLibType()": "1881d94d", - "supportsInterface(bytes4)": "01ffc9a7", - "version()": "54fd4d50" - }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"LZ_NotImplemented\",\"type\":\"error\"},{\"stateMutability\":\"nonpayable\",\"type\":\"fallback\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"name\":\"isSupportedEid\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"messageLibType\",\"outputs\":[{\"internalType\":\"enum MessageLibType\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"major\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"minor\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"endpointVersion\",\"type\":\"uint8\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/BlockedMessageLib.sol\":\"BlockedMessageLib\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol\":{\"keccak256\":\"0x5cf5f24751b4e3ea1c9c5ded07cedfdfd62566b6daaffcc0144733859c9dba0c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cae7e35007a714f007ea08045ef7c0cfa6c91fd2425b5028b2d49abad357a5f0\",\"dweb:/ipfs/QmcDBs5tsiyB35b8cwzWQWNnpkawb3uuHRaqE77Hxm2tve\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol\":{\"keccak256\":\"0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d8ff6a8a89297fa127f86b54e0db3eba1d6a6eeb4f6398d3c84d569665ac8f1b\",\"dweb:/ipfs/QmVSwhw6xFDrLRAX4RXaCM47yBaBtac4wf36DYEq6KCTvT\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Errors.sol\":{\"keccak256\":\"0x35bcd6ca99c4c8d9f7d8413d1b92fb4a4d4a420ce3bf64b0fb01e68e6bcf2fa7\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://0ac14f98563f9c610c936c93e71eff657efaba1e1d892be6a215aa5cb1f63a24\",\"dweb:/ipfs/QmVZZ8owwfDGLQTAzQJJqmYY4KsrChDagh5GBK7rChT5wb\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/BlockedMessageLib.sol\":{\"keccak256\":\"0xb2b55968b26294139742adee6c155897c8334f4c6bf72f1940456cc84e6fbab9\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://e758a1fdcea4039b19f1252e4e2958f4a0e05517eb3e151784431533446c225f\",\"dweb:/ipfs/QmRBG345abgyUeTnSpuxdK1WbK5pvwhSmvBEgW1mnoYqTq\"]},\"node_modules/@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0xddce8e17e3d3f9ed818b4f4c4478a8262aab8b11ed322f1bf5ed705bb4bd97fa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8084aa71a4cc7d2980972412a88fe4f114869faea3fefa5436431644eb5c0287\",\"dweb:/ipfs/Qmbqfs5dRdPvHVKY8kTaeyc65NdqXRQwRK7h9s5UJEhD1p\"]},\"node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { "inputs": [], "type": "error", "name": "LZ_NotImplemented" }, - { "inputs": [], "stateMutability": "nonpayable", "type": "fallback" }, - { - "inputs": [ - { "internalType": "uint32", "name": "", "type": "uint32" } - ], - "stateMutability": "pure", - "type": "function", - "name": "isSupportedEid", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [], - "stateMutability": "pure", - "type": "function", - "name": "messageLibType", - "outputs": [ - { - "internalType": "enum MessageLibType", - "name": "", - "type": "uint8" - } - ] - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "stateMutability": "view", - "type": "function", - "name": "supportsInterface", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [], - "stateMutability": "pure", - "type": "function", - "name": "version", - "outputs": [ - { "internalType": "uint64", "name": "major", "type": "uint64" }, - { "internalType": "uint8", "name": "minor", "type": "uint8" }, - { - "internalType": "uint8", - "name": "endpointVersion", - "type": "uint8" - } - ] - } - ], - "devdoc": { - "kind": "dev", - "methods": { - "supportsInterface(bytes4)": { - "details": "See {IERC165-supportsInterface}." - } - }, - "version": 1 - }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/BlockedMessageLib.sol": "BlockedMessageLib" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol": { - "keccak256": "0x5cf5f24751b4e3ea1c9c5ded07cedfdfd62566b6daaffcc0144733859c9dba0c", - "urls": [ - "bzz-raw://cae7e35007a714f007ea08045ef7c0cfa6c91fd2425b5028b2d49abad357a5f0", - "dweb:/ipfs/QmcDBs5tsiyB35b8cwzWQWNnpkawb3uuHRaqE77Hxm2tve" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol": { - "keccak256": "0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc", - "urls": [ - "bzz-raw://d8ff6a8a89297fa127f86b54e0db3eba1d6a6eeb4f6398d3c84d569665ac8f1b", - "dweb:/ipfs/QmVSwhw6xFDrLRAX4RXaCM47yBaBtac4wf36DYEq6KCTvT" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Errors.sol": { - "keccak256": "0x35bcd6ca99c4c8d9f7d8413d1b92fb4a4d4a420ce3bf64b0fb01e68e6bcf2fa7", - "urls": [ - "bzz-raw://0ac14f98563f9c610c936c93e71eff657efaba1e1d892be6a215aa5cb1f63a24", - "dweb:/ipfs/QmVZZ8owwfDGLQTAzQJJqmYY4KsrChDagh5GBK7rChT5wb" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/BlockedMessageLib.sol": { - "keccak256": "0xb2b55968b26294139742adee6c155897c8334f4c6bf72f1940456cc84e6fbab9", - "urls": [ - "bzz-raw://e758a1fdcea4039b19f1252e4e2958f4a0e05517eb3e151784431533446c225f", - "dweb:/ipfs/QmRBG345abgyUeTnSpuxdK1WbK5pvwhSmvBEgW1mnoYqTq" - ], - "license": "LZBL-1.2" - }, - "node_modules/@openzeppelin/contracts/utils/introspection/ERC165.sol": { - "keccak256": "0xddce8e17e3d3f9ed818b4f4c4478a8262aab8b11ed322f1bf5ed705bb4bd97fa", - "urls": [ - "bzz-raw://8084aa71a4cc7d2980972412a88fe4f114869faea3fefa5436431644eb5c0287", - "dweb:/ipfs/Qmbqfs5dRdPvHVKY8kTaeyc65NdqXRQwRK7h9s5UJEhD1p" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol": { - "keccak256": "0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8", - "urls": [ - "bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621", - "dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL" - ], - "license": "MIT" - } - }, - "version": 1 - }, - "id": 45 -} diff --git a/examples/oft-movement/out/BytesLib.sol/BytesLib.json b/examples/oft-movement/out/BytesLib.sol/BytesLib.json deleted file mode 100644 index 8b6160a25..000000000 --- a/examples/oft-movement/out/BytesLib.sol/BytesLib.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "abi": [], - "bytecode": { - "object": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212203c285c6628686c1b6ec85c21e7cb62ec623b0cc51ece82e23b31d7ebbe65c7e364736f6c63430008160033", - "sourceMap": "370:21307:127:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;370:21307:127;;;;;;;;;;;;;;;;;", - "linkReferences": {} - }, - "deployedBytecode": { - "object": "0x73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212203c285c6628686c1b6ec85c21e7cb62ec623b0cc51ece82e23b31d7ebbe65c7e364736f6c63430008160033", - "sourceMap": "370:21307:127:-:0;;;;;;;;", - "linkReferences": {} - }, - "methodIdentifiers": {}, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/solidity-bytes-utils/contracts/BytesLib.sol\":\"BytesLib\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/solidity-bytes-utils/contracts/BytesLib.sol\":{\"keccak256\":\"0xa5b10f04797d5a10a9ba07855108b6bd695940e6a3d128927b2f74a0d359868a\",\"license\":\"Unlicense\",\"urls\":[\"bzz-raw://a38d7680aacbb18dae659876b396b73bcc8f759672213f8a0efc4129e2648535\",\"dweb:/ipfs/QmfKFnwpTEGAnbRnZxMuv3mRCG9S9WMjFhFL23bftBT2Jq\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/solidity-bytes-utils/contracts/BytesLib.sol": "BytesLib" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/solidity-bytes-utils/contracts/BytesLib.sol": { - "keccak256": "0xa5b10f04797d5a10a9ba07855108b6bd695940e6a3d128927b2f74a0d359868a", - "urls": [ - "bzz-raw://a38d7680aacbb18dae659876b396b73bcc8f759672213f8a0efc4129e2648535", - "dweb:/ipfs/QmfKFnwpTEGAnbRnZxMuv3mRCG9S9WMjFhFL23bftBT2Jq" - ], - "license": "Unlicense" - } - }, - "version": 1 - }, - "id": 127 -} diff --git a/examples/oft-movement/out/CalldataBytesLib.sol/CalldataBytesLib.json b/examples/oft-movement/out/CalldataBytesLib.sol/CalldataBytesLib.json deleted file mode 100644 index 34a5e08d5..000000000 --- a/examples/oft-movement/out/CalldataBytesLib.sol/CalldataBytesLib.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "abi": [], - "bytecode": { - "object": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220e737df72b23d89ea6a396eaa95f7ac6c68e0da215fea1b42c4cb924ee0d714f164736f6c63430008160033", - "sourceMap": "64:1718:41:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;64:1718:41;;;;;;;;;;;;;;;;;", - "linkReferences": {} - }, - "deployedBytecode": { - "object": "0x73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220e737df72b23d89ea6a396eaa95f7ac6c68e0da215fea1b42c4cb924ee0d714f164736f6c63430008160033", - "sourceMap": "64:1718:41:-:0;;;;;;;;", - "linkReferences": {} - }, - "methodIdentifiers": {}, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/CalldataBytesLib.sol\":\"CalldataBytesLib\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/CalldataBytesLib.sol\":{\"keccak256\":\"0x5c0db161cef6603c3b256d4220f489419e7478ef775e52a80056654129c61875\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://a33245d0fdd3992bb56b31d1840108d36bb46c8d617b659ef1af8dd7ed86302d\",\"dweb:/ipfs/QmWyBqT7Tdrfn5zz9xYM3V1PBtfAZAVwwCrrKwwfi3wMQK\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/CalldataBytesLib.sol": "CalldataBytesLib" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/CalldataBytesLib.sol": { - "keccak256": "0x5c0db161cef6603c3b256d4220f489419e7478ef775e52a80056654129c61875", - "urls": [ - "bzz-raw://a33245d0fdd3992bb56b31d1840108d36bb46c8d617b659ef1af8dd7ed86302d", - "dweb:/ipfs/QmWyBqT7Tdrfn5zz9xYM3V1PBtfAZAVwwCrrKwwfi3wMQK" - ], - "license": "LZBL-1.2" - } - }, - "version": 1 - }, - "id": 41 -} diff --git a/examples/oft-movement/out/Context.sol/Context.json b/examples/oft-movement/out/Context.sol/Context.json deleted file mode 100644 index b50b67093..000000000 --- a/examples/oft-movement/out/Context.sol/Context.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "abi": [], - "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "methodIdentifiers": {}, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Provides information about the current execution context, including the sender of the transaction and its data. While these are generally available via msg.sender and msg.data, they should not be accessed in such a direct manner, since when dealing with meta-transactions the account sending and paying for execution may not be the actual sender (as far as an application is concerned). This contract is only required for intermediate, library-like contracts.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@openzeppelin/contracts/utils/Context.sol\":\"Context\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@openzeppelin/contracts/utils/Context.sol": "Context" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@openzeppelin/contracts/utils/Context.sol": { - "keccak256": "0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2", - "urls": [ - "bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12", - "dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF" - ], - "license": "MIT" - } - }, - "version": 1 - }, - "id": 40 -} diff --git a/examples/oft-movement/out/DVNFeeLibMock.sol/DVNFeeLibMock.json b/examples/oft-movement/out/DVNFeeLibMock.sol/DVNFeeLibMock.json deleted file mode 100644 index 5217bd294..000000000 --- a/examples/oft-movement/out/DVNFeeLibMock.sol/DVNFeeLibMock.json +++ /dev/null @@ -1,1278 +0,0 @@ -{ - "abi": [ - { - "type": "constructor", - "inputs": [ - { "name": "_localEidV2", "type": "uint32", "internalType": "uint32" }, - { - "name": "_nativeDecimalsRate", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "nonpayable" - }, - { "type": "receive", "stateMutability": "payable" }, - { - "type": "function", - "name": "dstBlockTimeConfigs", - "inputs": [ - { "name": "dstEid", "type": "uint32", "internalType": "uint32" } - ], - "outputs": [ - { "name": "avgBlockTime", "type": "uint32", "internalType": "uint32" }, - { "name": "blockNum", "type": "uint64", "internalType": "uint64" }, - { "name": "timestamp", "type": "uint64", "internalType": "uint64" }, - { - "name": "maxPastRetention", - "type": "uint32", - "internalType": "uint32" - }, - { - "name": "maxFutureRetention", - "type": "uint32", - "internalType": "uint32" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getCmdFees", - "inputs": [], - "outputs": [ - { "name": "", "type": "uint120", "internalType": "uint120" }, - { "name": "", "type": "uint120", "internalType": "uint120" }, - { "name": "", "type": "uint16", "internalType": "uint16" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getFee", - "inputs": [ - { - "name": "_params", - "type": "tuple", - "internalType": "struct IDVNFeeLib.FeeParams", - "components": [ - { - "name": "priceFeed", - "type": "address", - "internalType": "address" - }, - { "name": "dstEid", "type": "uint32", "internalType": "uint32" }, - { - "name": "confirmations", - "type": "uint64", - "internalType": "uint64" - }, - { "name": "sender", "type": "address", "internalType": "address" }, - { "name": "quorum", "type": "uint64", "internalType": "uint64" }, - { - "name": "defaultMultiplierBps", - "type": "uint16", - "internalType": "uint16" - } - ] - }, - { - "name": "_dstConfig", - "type": "tuple", - "internalType": "struct IDVN.DstConfig", - "components": [ - { "name": "gas", "type": "uint64", "internalType": "uint64" }, - { - "name": "multiplierBps", - "type": "uint16", - "internalType": "uint16" - }, - { - "name": "floorMarginUSD", - "type": "uint128", - "internalType": "uint128" - } - ] - }, - { "name": "_options", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getFee", - "inputs": [ - { - "name": "_params", - "type": "tuple", - "internalType": "struct IDVNFeeLib.FeeParamsForRead", - "components": [ - { - "name": "priceFeed", - "type": "address", - "internalType": "address" - }, - { "name": "sender", "type": "address", "internalType": "address" }, - { "name": "quorum", "type": "uint64", "internalType": "uint64" }, - { - "name": "defaultMultiplierBps", - "type": "uint16", - "internalType": "uint16" - } - ] - }, - { - "name": "_dstConfig", - "type": "tuple", - "internalType": "struct IDVN.DstConfig", - "components": [ - { "name": "gas", "type": "uint64", "internalType": "uint64" }, - { - "name": "multiplierBps", - "type": "uint16", - "internalType": "uint16" - }, - { - "name": "floorMarginUSD", - "type": "uint128", - "internalType": "uint128" - } - ] - }, - { "name": "_cmd", "type": "bytes", "internalType": "bytes" }, - { "name": "_options", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getFeeOnSend", - "inputs": [ - { - "name": "_params", - "type": "tuple", - "internalType": "struct IDVNFeeLib.FeeParamsForRead", - "components": [ - { - "name": "priceFeed", - "type": "address", - "internalType": "address" - }, - { "name": "sender", "type": "address", "internalType": "address" }, - { "name": "quorum", "type": "uint64", "internalType": "uint64" }, - { - "name": "defaultMultiplierBps", - "type": "uint16", - "internalType": "uint16" - } - ] - }, - { - "name": "_dstConfig", - "type": "tuple", - "internalType": "struct IDVN.DstConfig", - "components": [ - { "name": "gas", "type": "uint64", "internalType": "uint64" }, - { - "name": "multiplierBps", - "type": "uint16", - "internalType": "uint16" - }, - { - "name": "floorMarginUSD", - "type": "uint128", - "internalType": "uint128" - } - ] - }, - { "name": "_cmd", "type": "bytes", "internalType": "bytes" }, - { "name": "_options", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [ - { "name": "fee", "type": "uint256", "internalType": "uint256" } - ], - "stateMutability": "payable" - }, - { - "type": "function", - "name": "getFeeOnSend", - "inputs": [ - { - "name": "_params", - "type": "tuple", - "internalType": "struct IDVNFeeLib.FeeParams", - "components": [ - { - "name": "priceFeed", - "type": "address", - "internalType": "address" - }, - { "name": "dstEid", "type": "uint32", "internalType": "uint32" }, - { - "name": "confirmations", - "type": "uint64", - "internalType": "uint64" - }, - { "name": "sender", "type": "address", "internalType": "address" }, - { "name": "quorum", "type": "uint64", "internalType": "uint64" }, - { - "name": "defaultMultiplierBps", - "type": "uint16", - "internalType": "uint16" - } - ] - }, - { - "name": "_dstConfig", - "type": "tuple", - "internalType": "struct IDVN.DstConfig", - "components": [ - { "name": "gas", "type": "uint64", "internalType": "uint64" }, - { - "name": "multiplierBps", - "type": "uint16", - "internalType": "uint16" - }, - { - "name": "floorMarginUSD", - "type": "uint128", - "internalType": "uint128" - } - ] - }, - { "name": "_options", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], - "stateMutability": "payable" - }, - { - "type": "function", - "name": "getSupportedCmdTypes", - "inputs": [ - { "name": "_targetEid", "type": "uint32", "internalType": "uint32" } - ], - "outputs": [ - { "name": "", "type": "uint256", "internalType": "BitMap256" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "owner", - "inputs": [], - "outputs": [{ "name": "", "type": "address", "internalType": "address" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "renounceOwnership", - "inputs": [], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setCmdFees", - "inputs": [ - { - "name": "_evmCallRequestV1FeeUSD", - "type": "uint120", - "internalType": "uint120" - }, - { - "name": "_evmCallComputeV1ReduceFeeUSD", - "type": "uint120", - "internalType": "uint120" - }, - { - "name": "_evmCallComputeV1MapBps", - "type": "uint16", - "internalType": "uint16" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setDstBlockTimeConfigs", - "inputs": [ - { "name": "dstEids", "type": "uint32[]", "internalType": "uint32[]" }, - { - "name": "_blockConfigs", - "type": "tuple[]", - "internalType": "struct DVNFeeLibMock.BlockTimeConfig[]", - "components": [ - { - "name": "avgBlockTime", - "type": "uint32", - "internalType": "uint32" - }, - { "name": "blockNum", "type": "uint64", "internalType": "uint64" }, - { "name": "timestamp", "type": "uint64", "internalType": "uint64" }, - { - "name": "maxPastRetention", - "type": "uint32", - "internalType": "uint32" - }, - { - "name": "maxFutureRetention", - "type": "uint32", - "internalType": "uint32" - } - ] - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setSupportedCmdTypes", - "inputs": [ - { - "name": "_params", - "type": "tuple[]", - "internalType": "struct DVNFeeLibMock.SetSupportedCmdTypesParam[]", - "components": [ - { "name": "targetEid", "type": "uint32", "internalType": "uint32" }, - { "name": "types", "type": "uint256", "internalType": "BitMap256" } - ] - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "transferOwnership", - "inputs": [ - { "name": "newOwner", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "version", - "inputs": [], - "outputs": [ - { "name": "major", "type": "uint64", "internalType": "uint64" }, - { "name": "minor", "type": "uint8", "internalType": "uint8" } - ], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "withdrawToken", - "inputs": [ - { "name": "_token", "type": "address", "internalType": "address" }, - { "name": "_to", "type": "address", "internalType": "address" }, - { "name": "_amount", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "event", - "name": "OwnershipTransferred", - "inputs": [ - { - "name": "previousOwner", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "newOwner", - "type": "address", - "indexed": true, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "error", - "name": "DVN_EidNotSupported", - "inputs": [{ "name": "eid", "type": "uint32", "internalType": "uint32" }] - }, - { "type": "error", "name": "DVN_INVALID_INPUT_LENGTH", "inputs": [] }, - { - "type": "error", - "name": "DVN_InvalidDVNOptions", - "inputs": [ - { "name": "cursor", "type": "uint256", "internalType": "uint256" } - ] - }, - { - "type": "error", - "name": "DVN_TimestampOutOfRange", - "inputs": [ - { "name": "eid", "type": "uint32", "internalType": "uint32" }, - { "name": "timestamp", "type": "uint64", "internalType": "uint64" } - ] - }, - { - "type": "error", - "name": "DVN_UnsupportedOptionType", - "inputs": [ - { "name": "optionType", "type": "uint8", "internalType": "uint8" } - ] - }, - { "type": "error", "name": "InvalidCmd", "inputs": [] }, - { "type": "error", "name": "InvalidType", "inputs": [] }, - { "type": "error", "name": "InvalidVersion", "inputs": [] }, - { - "type": "error", - "name": "OwnableInvalidOwner", - "inputs": [ - { "name": "owner", "type": "address", "internalType": "address" } - ] - }, - { - "type": "error", - "name": "OwnableUnauthorizedAccount", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ] - }, - { - "type": "error", - "name": "SafeERC20FailedOperation", - "inputs": [ - { "name": "token", "type": "address", "internalType": "address" } - ] - }, - { - "type": "error", - "name": "Transfer_NativeFailed", - "inputs": [ - { "name": "_to", "type": "address", "internalType": "address" }, - { "name": "_value", "type": "uint256", "internalType": "uint256" } - ] - }, - { "type": "error", "name": "Transfer_ToAddressIsZero", "inputs": [] }, - { "type": "error", "name": "UnsupportedTargetEid", "inputs": [] } - ], - "bytecode": { - "object": "0x60c06040523480156200001157600080fd5b5060405162001eb638038062001eb68339810160408190526200003491620000cb565b33806200005b57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b62000066816200007b565b5063ffffffff90911660a05260805262000104565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008060408385031215620000df57600080fd5b825163ffffffff81168114620000f457600080fd5b6020939093015192949293505050565b60805160a051611d7e620001386000396000818161069001526106ff0152600081816107cd0152610ab80152611d7e6000f3fe6080604052600436106100ec5760003560e01c80638da5cb5b1161008a578063de0a93c311610059578063de0a93c3146102f7578063df2b057e1461033d578063f2fde38b14610350578063f5ff608f1461037057600080fd5b80638da5cb5b1461027c5780639ac23d28146102a4578063bbc5a33b146102c4578063d358b300146102d757600080fd5b806339f26dfc116100c657806339f26dfc1461020657806354fd4d5014610226578063715018a6146102475780637bfa20a91461025c57600080fd5b806301e33667146100f857806310b65f761461011a5780632565c2451461016057600080fd5b366100f357005b600080fd5b34801561010457600080fd5b506101186101133660046115c3565b610390565b005b34801561012657600080fd5b5061014d610135366004611611565b63ffffffff1660009081526001602052604090205490565b6040519081526020015b60405180910390f35b34801561016c57600080fd5b506101c761017b366004611611565b60036020526000908152604090205463ffffffff808216916001600160401b036401000000008204811692600160601b830490911691600160a01b8104821691600160c01b9091041685565b6040805163ffffffff96871681526001600160401b0395861660208201529390941693830193909352831660608201529116608082015260a001610157565b34801561021257600080fd5b5061011861022136600461165e565b6103a8565b34801561023257600080fd5b50604080516001808252602082015201610157565b34801561025357600080fd5b506101186103fa565b34801561026857600080fd5b5061014d610277366004611701565b61040e565b34801561028857600080fd5b506000546040516001600160a01b039091168152602001610157565b3480156102b057600080fd5b506101186102bf36600461176c565b61059b565b61014d6102d2366004611833565b610642565b3480156102e357600080fd5b5061014d6102f2366004611833565b61065d565b34801561030357600080fd5b50600254604080516001600160781b038084168252600160781b8404166020820152600160f01b90920461ffff1690820152606001610157565b61014d61034b366004611701565b610857565b34801561035c57600080fd5b5061011861036b3660046118ce565b61086e565b34801561037c57600080fd5b5061011861038b3660046118e9565b6108ac565b610398610929565b6103a3838383610956565b505050565b6103b0610929565b6002805461ffff909216600160f01b026001600160f01b036001600160781b03948516600160781b026001600160f01b031990941694909516939093179190911792909216179055565b610402610929565b61040c6000610979565b565b600061041d6020850185611972565b6001600160401b03166000036104645761043d6040860160208701611611565b60405163680489c560e11b815263ffffffff90911660048201526024015b60405180910390fd5b61046e83836109c9565b50600061049261048460a0880160808901611972565b6001600160401b0316610a3b565b90506000806104a460208901896118ce565b6001600160a01b03166388a4124c6104c260408b0160208c01611611565b856104d060208c018c611972565b6040516001600160e01b031960e086901b16815263ffffffff93909316600484015260248301919091526001600160401b03166044820152606401608060405180830381865afa158015610528573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061054c91906119a4565b93505050915061058f8288602001602081019061056991906119f9565b61057960c08c0160a08d016119f9565b61058960608c0160408d01611a14565b85610a49565b98975050505050505050565b6105a3610929565b8281146105c3576040516316a9d98760e31b815260040160405180910390fd5b60005b8381101561063b578282828181106105e0576105e0611a31565b905060a00201600360008787858181106105fc576105fc611a31565b90506020020160208101906106119190611611565b63ffffffff16815260208101919091526040016000206106318282611a54565b50506001016105c6565b5050505050565b600061065287878787878761065d565b979650505050505050565b600061066c6020870187611972565b6001600160401b03166000036106bd5760405163680489c560e11b815263ffffffff7f000000000000000000000000000000000000000000000000000000000000000016600482015260240161045b565b6106c783836109c9565b5060006106dd61048460608a0160408b01611972565b90506000806106ef60208b018b6118ce565b6001600160a01b03166388a4124c7f00000000000000000000000000000000000000000000000000000000000000008561072c60208e018e611972565b6040516001600160e01b031960e086901b16815263ffffffff93909316600484015260248301919091526001600160401b03166044820152606401608060405180830381865afa158015610784573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107a891906119a4565b93505050915060006107ba8989610b1d565b905060006001600160801b0383166107f27f000000000000000000000000000000000000000000000000000000000000000084611b65565b6107fc9190611b92565b905061084761080b8286611ba6565b61081b60408e0160208f016119f9565b8e606001602081019061082e91906119f9565b8e60400160208101906108419190611a14565b87610a49565b9c9b505050505050505050505050565b60006108658585858561040e565b95945050505050565b610876610929565b6001600160a01b0381166108a057604051631e4fbdf760e01b81526000600482015260240161045b565b6108a981610979565b50565b6108b4610929565b60005b818110156103a3578282828181106108d1576108d1611a31565b90506040020160200135600160000160008585858181106108f4576108f4611a31565b61090a9260206040909202019081019150611611565b63ffffffff1681526020810191909152604001600020556001016108b7565b6000546001600160a01b0316331461040c5760405163118cdaa760e01b815233600482015260240161045b565b6001600160a01b03831661096e576103a38282610bc7565b6103a3838383610c74565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000808215610a0c576000806109e0868685610caf565b604051637085244b60e01b815260ff85166004820152909650929450859350506024909101905061045b565b808314610a2f5760405163013adb8360e21b81526004810182905260240161045b565b60009150505b92915050565b6000610a3582610120610d09565b60008061ffff861615610a5c5785610a5e565b845b90506000612710610a7361ffff84168a611b65565b610a7d9190611b92565b90506001600160801b0384161580610a9c57506001600160801b038516155b15610aaa5791506108659050565b6000846001600160801b03167f0000000000000000000000000000000000000000000000000000000000000000876001600160801b0316610aeb9190611b65565b610af59190611b92565b610aff908a611ba6565b9050818111610b0e5781610b10565b805b9998505050505050505050565b600080610b2d8484610d6e610f31565b6002548151919250610b4e916001600160781b039091169061ffff16611bb9565b6001600160781b03169150806020015115610b965760025461271090610b7f90600160f01b900461ffff1684611b65565b610b899190611b92565b610b939083611ba6565b91505b806040015115610bc057600254610bbd90600160781b90046001600160781b031683611ba6565b91505b5092915050565b6001600160a01b038216610bee576040516306b7a93160e41b815260040160405180910390fd5b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114610c3b576040519150601f19603f3d011682016040523d82523d6000602084013e610c40565b606091505b50509050806103a357604051631196f20d60e21b81526001600160a01b03841660048201526024810183905260440161045b565b6001600160a01b038216610c9b576040516306b7a93160e41b815260040160405180910390fd5b6103a36001600160a01b0384168383611433565b600036816001840181610cc3888884611485565b6002830192909150610cdb90899089906003016114ac565b94506002820161ffff82168301610cf481838b8d611be4565b979b909a50969850505061ffff160193505050565b600080610d17604185611b65565b9050610d24602082611c0e565b15610d4c57610d34602082611c0e565b610d3e9082611c22565b610d49906020611ba6565b90505b80610d5984610104611ba6565b610d639190611ba6565b610bbd906020611ba6565b610d7a600185836114d1565b610d8760018560026114f9565b15610f2b5763ffffffff808516600090815260036020908152604091829020825160a081018452905480851682526001600160401b036401000000008204811693830193909352600160601b810490921692810192909252600160a01b810483166060830152600160c01b90049091166080820152828415610eab5781602001516001600160401b0316846001600160401b03161115610e6757815160208301516103e89163ffffffff1690610e3d9087611c35565b610e479190611c55565b610e519190611c78565b8260400151610e609190611c9e565b9050610eab565b6103e8826000015163ffffffff16858460200151610e859190611c35565b610e8f9190611c55565b610e999190611c78565b8260400151610ea89190611c35565b90505b42826060015163ffffffff1682610ec29190611c9e565b6001600160401b03161080610ef357506080820151610ee79063ffffffff1642611ba6565b816001600160401b0316115b15610f2857604051630c5a8d2360e01b815263ffffffff871660048201526001600160401b038216602482015260440161045b565b50505b50505050565b604080516060810182526000808252602082018190529181018290529080858186610f5d826002611ba6565b92610f6a93929190611be4565b610f7391611cbe565b60f01c9050610f83600283611ba6565b915061ffff8116600114610faa5760405163a9146eeb60e01b815260040160405180910390fd5b610fb5600283611ba6565b91506000868387610fc7826002611ba6565b92610fd493929190611be4565b610fdd91611cbe565b60f01c9050610fed600284611ba6565b92508061ffff16600003611014576040516387a7f37960e01b815260040160405180910390fd5b61ffff1683525060005b826000015161ffff168161ffff16101561121d57600086868481811061104657611046611a31565b919091013560f81c915061105d9050600184611ba6565b925060ff81166001146110835760405163a9146eeb60e01b815260040160405180910390fd5b61108e600284611ba6565b925060008784886110a0826002611ba6565b926110ad93929190611be4565b6110b691611cbe565b60f01c90506110c6600285611ba6565b935060001961ffff8216016111fa5760008885896110e5826002611ba6565b926110f293929190611be4565b6110fb91611cbe565b60f01c905061110b600286611ba6565b94508460008a828b61111e826004611ba6565b9261112b93929190611be4565b61113491611cec565b60e01c9050611144600483611ba6565b915060008b8b8481811061115a5761115a611a31565b600192013560f81c8214925061117291905084611ba6565b925060008c848d611184826008611ba6565b9261119193929190611be4565b61119a91611d1a565b60c01c90506111b083838360008f63ffffffff16565b508a92506111c591505061ffff831687611ba6565b11156111e4576040516387a7f37960e01b815260040160405180910390fd5b6111f261ffff821686611ba6565b945050611213565b60405163b968846160e01b815260040160405180910390fd5b505060010161101e565b508381101561140b57600085858381811061123a5761123a611a31565b919091013560f81c91506112519050600183611ba6565b915060ff81166001146112775760405163a9146eeb60e01b815260040160405180910390fd5b6000868387611287826002611ba6565b9261129493929190611be4565b61129d91611cbe565b60f01c90506112ad600284611ba6565b925061ffff81166001146112d45760405163b968846160e01b815260040160405180910390fd5b60008787858181106112e8576112e8611a31565b919091013560f81c91506112ff9050600185611ba6565b935060ff81166113155760016020860152611348565b60001960ff82160161132d5760016040860152611348565b60011960ff8216016111fa5760016020860181905260408601525b6000888589611358826004611ba6565b9261136593929190611be4565b61136e91611cec565b60e01c905061137e600486611ba6565b9450600089898781811061139457611394611a31565b600192013560f81c821492506113ac91905087611ba6565b955060008a878b6113be826008611ba6565b926113cb93929190611be4565b6113d491611d1a565b60c01c90506113e4600888611ba6565b96506113f783838360018d63ffffffff16565b611402601688611ba6565b96505050505050505b80841461142b576040516387a7f37960e01b815260040160405180910390fd5b509392505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526103a3908490611527565b60006002820161149781848688611be4565b6114a091611cbe565b60f01c95945050505050565b60008383838181106114c0576114c0611a31565b919091013560f81c95945050505050565b6114dc8383836114f9565b6103a3576040516350fae9eb60e01b815260040160405180910390fd5b63ffffffff808316600090815260208590526040812054909161151f9190849061159816565b949350505050565b600080602060008451602086016000885af18061154a576040513d6000823e3d81fd5b50506000513d9150811561156257806001141561156f565b6001600160a01b0384163b155b15610f2b57604051635274afe760e01b81526001600160a01b038516600482015260240161045b565b600160ff919091161b16151590565b80356001600160a01b03811681146115be57600080fd5b919050565b6000806000606084860312156115d857600080fd5b6115e1846115a7565b92506115ef602085016115a7565b9150604084013590509250925092565b63ffffffff811681146108a957600080fd5b60006020828403121561162357600080fd5b813561162e816115ff565b9392505050565b80356001600160781b03811681146115be57600080fd5b803561ffff811681146115be57600080fd5b60008060006060848603121561167357600080fd5b61167c84611635565b925061168a60208501611635565b91506116986040850161164c565b90509250925092565b6000606082840312156116b357600080fd5b50919050565b60008083601f8401126116cb57600080fd5b5081356001600160401b038111156116e257600080fd5b6020830191508360208285010111156116fa57600080fd5b9250929050565b60008060008084860361014081121561171957600080fd5b60c081121561172757600080fd5b508493506117388660c087016116a1565b92506101208501356001600160401b0381111561175457600080fd5b611760878288016116b9565b95989497509550505050565b6000806000806040858703121561178257600080fd5b84356001600160401b038082111561179957600080fd5b818701915087601f8301126117ad57600080fd5b8135818111156117bc57600080fd5b8860208260051b85010111156117d157600080fd5b6020928301965094509086013590808211156117ec57600080fd5b818701915087601f83011261180057600080fd5b81358181111561180f57600080fd5b88602060a08302850101111561182457600080fd5b95989497505060200194505050565b60008060008060008086880361012081121561184e57600080fd5b608081121561185c57600080fd5b5086955061186d88608089016116a1565b945060e08701356001600160401b038082111561188957600080fd5b6118958a838b016116b9565b90965094506101008901359150808211156118af57600080fd5b506118bc89828a016116b9565b979a9699509497509295939492505050565b6000602082840312156118e057600080fd5b61162e826115a7565b600080602083850312156118fc57600080fd5b82356001600160401b038082111561191357600080fd5b818501915085601f83011261192757600080fd5b81358181111561193657600080fd5b8660208260061b850101111561194b57600080fd5b60209290920196919550909350505050565b6001600160401b03811681146108a957600080fd5b60006020828403121561198457600080fd5b813561162e8161195d565b6001600160801b03811681146108a957600080fd5b600080600080608085870312156119ba57600080fd5b8451935060208501516119cc8161198f565b60408601519093506119dd8161198f565b60608601519092506119ee8161198f565b939692955090935050565b600060208284031215611a0b57600080fd5b61162e8261164c565b600060208284031215611a2657600080fd5b813561162e8161198f565b634e487b7160e01b600052603260045260246000fd5b60008135610a35816115ff565b8135611a5f816115ff565b63ffffffff8116905081548163ffffffff1982161783556020840135611a848161195d565b6bffffffffffffffff000000008160201b16905080836bffffffffffffffffffffffff198416171784556040850135611abc8161195d565b67ffffffffffffffff60601b606091821b166001600160a01b03199390931693909317808217831785559285013591611af4836115ff565b63ffffffff60a01b1993909316179190911760a09190911b63ffffffff60a01b16178155611b4b611b2760808401611a47565b82805463ffffffff60c01b191660c09290921b63ffffffff60c01b16919091179055565b5050565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610a3557610a35611b4f565b634e487b7160e01b600052601260045260246000fd5b600082611ba157611ba1611b7c565b500490565b80820180821115610a3557610a35611b4f565b6001600160781b03818116838216028082169190828114611bdc57611bdc611b4f565b505092915050565b60008085851115611bf457600080fd5b83861115611c0157600080fd5b5050820193919092039150565b600082611c1d57611c1d611b7c565b500690565b81810381811115610a3557610a35611b4f565b6001600160401b03828116828216039080821115610bc057610bc0611b4f565b6001600160401b03818116838216028082169190828114611bdc57611bdc611b4f565b60006001600160401b0380841680611c9257611c92611b7c565b92169190910492915050565b6001600160401b03818116838216019080821115610bc057610bc0611b4f565b6001600160f01b03198135818116916002851015611bdc5760029490940360031b84901b1690921692915050565b6001600160e01b03198135818116916004851015611bdc5760049490940360031b84901b1690921692915050565b6001600160c01b03198135818116916008851015611bdc5760089490940360031b84901b169092169291505056fea2646970667358221220d34b7cf3109d1a09d2ef9d6586b9648c558d96c099d9868a56aea4afa7c4f88e64736f6c63430008160033", - "sourceMap": "902:10996:72:-:0;;;3122:172;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3191:10;;1269:95:107;;1322:31;;-1:-1:-1;;;1322:31:107;;1350:1;1322:31;;;506:51:132;479:18;;1322:31:107;;;;;;;1269:95;1373:32;1392:12;1373:18;:32::i;:::-;-1:-1:-1;3213:24:72::1;::::0;;::::1;;::::0;3247:40:::1;::::0;902:10996;;2912:187:107;2985:16;3004:6;;-1:-1:-1;;;;;3020:17:107;;;-1:-1:-1;;;;;;3020:17:107;;;;;;3052:40;;3004:6;;;;;;;3052:40;;2985:16;3052:40;2975:124;2912:187;:::o;14:341:132:-;92:6;100;153:2;141:9;132:7;128:23;124:32;121:52;;;169:1;166;159:12;121:52;201:9;195:16;251:10;244:5;240:22;233:5;230:33;220:61;;277:1;274;267:12;220:61;345:2;330:18;;;;324:25;300:5;;324:25;;-1:-1:-1;;;14:341:132:o;360:203::-;902:10996:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;", - "linkReferences": {} - }, - "deployedBytecode": { - "object": "0x6080604052600436106100ec5760003560e01c80638da5cb5b1161008a578063de0a93c311610059578063de0a93c3146102f7578063df2b057e1461033d578063f2fde38b14610350578063f5ff608f1461037057600080fd5b80638da5cb5b1461027c5780639ac23d28146102a4578063bbc5a33b146102c4578063d358b300146102d757600080fd5b806339f26dfc116100c657806339f26dfc1461020657806354fd4d5014610226578063715018a6146102475780637bfa20a91461025c57600080fd5b806301e33667146100f857806310b65f761461011a5780632565c2451461016057600080fd5b366100f357005b600080fd5b34801561010457600080fd5b506101186101133660046115c3565b610390565b005b34801561012657600080fd5b5061014d610135366004611611565b63ffffffff1660009081526001602052604090205490565b6040519081526020015b60405180910390f35b34801561016c57600080fd5b506101c761017b366004611611565b60036020526000908152604090205463ffffffff808216916001600160401b036401000000008204811692600160601b830490911691600160a01b8104821691600160c01b9091041685565b6040805163ffffffff96871681526001600160401b0395861660208201529390941693830193909352831660608201529116608082015260a001610157565b34801561021257600080fd5b5061011861022136600461165e565b6103a8565b34801561023257600080fd5b50604080516001808252602082015201610157565b34801561025357600080fd5b506101186103fa565b34801561026857600080fd5b5061014d610277366004611701565b61040e565b34801561028857600080fd5b506000546040516001600160a01b039091168152602001610157565b3480156102b057600080fd5b506101186102bf36600461176c565b61059b565b61014d6102d2366004611833565b610642565b3480156102e357600080fd5b5061014d6102f2366004611833565b61065d565b34801561030357600080fd5b50600254604080516001600160781b038084168252600160781b8404166020820152600160f01b90920461ffff1690820152606001610157565b61014d61034b366004611701565b610857565b34801561035c57600080fd5b5061011861036b3660046118ce565b61086e565b34801561037c57600080fd5b5061011861038b3660046118e9565b6108ac565b610398610929565b6103a3838383610956565b505050565b6103b0610929565b6002805461ffff909216600160f01b026001600160f01b036001600160781b03948516600160781b026001600160f01b031990941694909516939093179190911792909216179055565b610402610929565b61040c6000610979565b565b600061041d6020850185611972565b6001600160401b03166000036104645761043d6040860160208701611611565b60405163680489c560e11b815263ffffffff90911660048201526024015b60405180910390fd5b61046e83836109c9565b50600061049261048460a0880160808901611972565b6001600160401b0316610a3b565b90506000806104a460208901896118ce565b6001600160a01b03166388a4124c6104c260408b0160208c01611611565b856104d060208c018c611972565b6040516001600160e01b031960e086901b16815263ffffffff93909316600484015260248301919091526001600160401b03166044820152606401608060405180830381865afa158015610528573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061054c91906119a4565b93505050915061058f8288602001602081019061056991906119f9565b61057960c08c0160a08d016119f9565b61058960608c0160408d01611a14565b85610a49565b98975050505050505050565b6105a3610929565b8281146105c3576040516316a9d98760e31b815260040160405180910390fd5b60005b8381101561063b578282828181106105e0576105e0611a31565b905060a00201600360008787858181106105fc576105fc611a31565b90506020020160208101906106119190611611565b63ffffffff16815260208101919091526040016000206106318282611a54565b50506001016105c6565b5050505050565b600061065287878787878761065d565b979650505050505050565b600061066c6020870187611972565b6001600160401b03166000036106bd5760405163680489c560e11b815263ffffffff7f000000000000000000000000000000000000000000000000000000000000000016600482015260240161045b565b6106c783836109c9565b5060006106dd61048460608a0160408b01611972565b90506000806106ef60208b018b6118ce565b6001600160a01b03166388a4124c7f00000000000000000000000000000000000000000000000000000000000000008561072c60208e018e611972565b6040516001600160e01b031960e086901b16815263ffffffff93909316600484015260248301919091526001600160401b03166044820152606401608060405180830381865afa158015610784573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107a891906119a4565b93505050915060006107ba8989610b1d565b905060006001600160801b0383166107f27f000000000000000000000000000000000000000000000000000000000000000084611b65565b6107fc9190611b92565b905061084761080b8286611ba6565b61081b60408e0160208f016119f9565b8e606001602081019061082e91906119f9565b8e60400160208101906108419190611a14565b87610a49565b9c9b505050505050505050505050565b60006108658585858561040e565b95945050505050565b610876610929565b6001600160a01b0381166108a057604051631e4fbdf760e01b81526000600482015260240161045b565b6108a981610979565b50565b6108b4610929565b60005b818110156103a3578282828181106108d1576108d1611a31565b90506040020160200135600160000160008585858181106108f4576108f4611a31565b61090a9260206040909202019081019150611611565b63ffffffff1681526020810191909152604001600020556001016108b7565b6000546001600160a01b0316331461040c5760405163118cdaa760e01b815233600482015260240161045b565b6001600160a01b03831661096e576103a38282610bc7565b6103a3838383610c74565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000808215610a0c576000806109e0868685610caf565b604051637085244b60e01b815260ff85166004820152909650929450859350506024909101905061045b565b808314610a2f5760405163013adb8360e21b81526004810182905260240161045b565b60009150505b92915050565b6000610a3582610120610d09565b60008061ffff861615610a5c5785610a5e565b845b90506000612710610a7361ffff84168a611b65565b610a7d9190611b92565b90506001600160801b0384161580610a9c57506001600160801b038516155b15610aaa5791506108659050565b6000846001600160801b03167f0000000000000000000000000000000000000000000000000000000000000000876001600160801b0316610aeb9190611b65565b610af59190611b92565b610aff908a611ba6565b9050818111610b0e5781610b10565b805b9998505050505050505050565b600080610b2d8484610d6e610f31565b6002548151919250610b4e916001600160781b039091169061ffff16611bb9565b6001600160781b03169150806020015115610b965760025461271090610b7f90600160f01b900461ffff1684611b65565b610b899190611b92565b610b939083611ba6565b91505b806040015115610bc057600254610bbd90600160781b90046001600160781b031683611ba6565b91505b5092915050565b6001600160a01b038216610bee576040516306b7a93160e41b815260040160405180910390fd5b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114610c3b576040519150601f19603f3d011682016040523d82523d6000602084013e610c40565b606091505b50509050806103a357604051631196f20d60e21b81526001600160a01b03841660048201526024810183905260440161045b565b6001600160a01b038216610c9b576040516306b7a93160e41b815260040160405180910390fd5b6103a36001600160a01b0384168383611433565b600036816001840181610cc3888884611485565b6002830192909150610cdb90899089906003016114ac565b94506002820161ffff82168301610cf481838b8d611be4565b979b909a50969850505061ffff160193505050565b600080610d17604185611b65565b9050610d24602082611c0e565b15610d4c57610d34602082611c0e565b610d3e9082611c22565b610d49906020611ba6565b90505b80610d5984610104611ba6565b610d639190611ba6565b610bbd906020611ba6565b610d7a600185836114d1565b610d8760018560026114f9565b15610f2b5763ffffffff808516600090815260036020908152604091829020825160a081018452905480851682526001600160401b036401000000008204811693830193909352600160601b810490921692810192909252600160a01b810483166060830152600160c01b90049091166080820152828415610eab5781602001516001600160401b0316846001600160401b03161115610e6757815160208301516103e89163ffffffff1690610e3d9087611c35565b610e479190611c55565b610e519190611c78565b8260400151610e609190611c9e565b9050610eab565b6103e8826000015163ffffffff16858460200151610e859190611c35565b610e8f9190611c55565b610e999190611c78565b8260400151610ea89190611c35565b90505b42826060015163ffffffff1682610ec29190611c9e565b6001600160401b03161080610ef357506080820151610ee79063ffffffff1642611ba6565b816001600160401b0316115b15610f2857604051630c5a8d2360e01b815263ffffffff871660048201526001600160401b038216602482015260440161045b565b50505b50505050565b604080516060810182526000808252602082018190529181018290529080858186610f5d826002611ba6565b92610f6a93929190611be4565b610f7391611cbe565b60f01c9050610f83600283611ba6565b915061ffff8116600114610faa5760405163a9146eeb60e01b815260040160405180910390fd5b610fb5600283611ba6565b91506000868387610fc7826002611ba6565b92610fd493929190611be4565b610fdd91611cbe565b60f01c9050610fed600284611ba6565b92508061ffff16600003611014576040516387a7f37960e01b815260040160405180910390fd5b61ffff1683525060005b826000015161ffff168161ffff16101561121d57600086868481811061104657611046611a31565b919091013560f81c915061105d9050600184611ba6565b925060ff81166001146110835760405163a9146eeb60e01b815260040160405180910390fd5b61108e600284611ba6565b925060008784886110a0826002611ba6565b926110ad93929190611be4565b6110b691611cbe565b60f01c90506110c6600285611ba6565b935060001961ffff8216016111fa5760008885896110e5826002611ba6565b926110f293929190611be4565b6110fb91611cbe565b60f01c905061110b600286611ba6565b94508460008a828b61111e826004611ba6565b9261112b93929190611be4565b61113491611cec565b60e01c9050611144600483611ba6565b915060008b8b8481811061115a5761115a611a31565b600192013560f81c8214925061117291905084611ba6565b925060008c848d611184826008611ba6565b9261119193929190611be4565b61119a91611d1a565b60c01c90506111b083838360008f63ffffffff16565b508a92506111c591505061ffff831687611ba6565b11156111e4576040516387a7f37960e01b815260040160405180910390fd5b6111f261ffff821686611ba6565b945050611213565b60405163b968846160e01b815260040160405180910390fd5b505060010161101e565b508381101561140b57600085858381811061123a5761123a611a31565b919091013560f81c91506112519050600183611ba6565b915060ff81166001146112775760405163a9146eeb60e01b815260040160405180910390fd5b6000868387611287826002611ba6565b9261129493929190611be4565b61129d91611cbe565b60f01c90506112ad600284611ba6565b925061ffff81166001146112d45760405163b968846160e01b815260040160405180910390fd5b60008787858181106112e8576112e8611a31565b919091013560f81c91506112ff9050600185611ba6565b935060ff81166113155760016020860152611348565b60001960ff82160161132d5760016040860152611348565b60011960ff8216016111fa5760016020860181905260408601525b6000888589611358826004611ba6565b9261136593929190611be4565b61136e91611cec565b60e01c905061137e600486611ba6565b9450600089898781811061139457611394611a31565b600192013560f81c821492506113ac91905087611ba6565b955060008a878b6113be826008611ba6565b926113cb93929190611be4565b6113d491611d1a565b60c01c90506113e4600888611ba6565b96506113f783838360018d63ffffffff16565b611402601688611ba6565b96505050505050505b80841461142b576040516387a7f37960e01b815260040160405180910390fd5b509392505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526103a3908490611527565b60006002820161149781848688611be4565b6114a091611cbe565b60f01c95945050505050565b60008383838181106114c0576114c0611a31565b919091013560f81c95945050505050565b6114dc8383836114f9565b6103a3576040516350fae9eb60e01b815260040160405180910390fd5b63ffffffff808316600090815260208590526040812054909161151f9190849061159816565b949350505050565b600080602060008451602086016000885af18061154a576040513d6000823e3d81fd5b50506000513d9150811561156257806001141561156f565b6001600160a01b0384163b155b15610f2b57604051635274afe760e01b81526001600160a01b038516600482015260240161045b565b600160ff919091161b16151590565b80356001600160a01b03811681146115be57600080fd5b919050565b6000806000606084860312156115d857600080fd5b6115e1846115a7565b92506115ef602085016115a7565b9150604084013590509250925092565b63ffffffff811681146108a957600080fd5b60006020828403121561162357600080fd5b813561162e816115ff565b9392505050565b80356001600160781b03811681146115be57600080fd5b803561ffff811681146115be57600080fd5b60008060006060848603121561167357600080fd5b61167c84611635565b925061168a60208501611635565b91506116986040850161164c565b90509250925092565b6000606082840312156116b357600080fd5b50919050565b60008083601f8401126116cb57600080fd5b5081356001600160401b038111156116e257600080fd5b6020830191508360208285010111156116fa57600080fd5b9250929050565b60008060008084860361014081121561171957600080fd5b60c081121561172757600080fd5b508493506117388660c087016116a1565b92506101208501356001600160401b0381111561175457600080fd5b611760878288016116b9565b95989497509550505050565b6000806000806040858703121561178257600080fd5b84356001600160401b038082111561179957600080fd5b818701915087601f8301126117ad57600080fd5b8135818111156117bc57600080fd5b8860208260051b85010111156117d157600080fd5b6020928301965094509086013590808211156117ec57600080fd5b818701915087601f83011261180057600080fd5b81358181111561180f57600080fd5b88602060a08302850101111561182457600080fd5b95989497505060200194505050565b60008060008060008086880361012081121561184e57600080fd5b608081121561185c57600080fd5b5086955061186d88608089016116a1565b945060e08701356001600160401b038082111561188957600080fd5b6118958a838b016116b9565b90965094506101008901359150808211156118af57600080fd5b506118bc89828a016116b9565b979a9699509497509295939492505050565b6000602082840312156118e057600080fd5b61162e826115a7565b600080602083850312156118fc57600080fd5b82356001600160401b038082111561191357600080fd5b818501915085601f83011261192757600080fd5b81358181111561193657600080fd5b8660208260061b850101111561194b57600080fd5b60209290920196919550909350505050565b6001600160401b03811681146108a957600080fd5b60006020828403121561198457600080fd5b813561162e8161195d565b6001600160801b03811681146108a957600080fd5b600080600080608085870312156119ba57600080fd5b8451935060208501516119cc8161198f565b60408601519093506119dd8161198f565b60608601519092506119ee8161198f565b939692955090935050565b600060208284031215611a0b57600080fd5b61162e8261164c565b600060208284031215611a2657600080fd5b813561162e8161198f565b634e487b7160e01b600052603260045260246000fd5b60008135610a35816115ff565b8135611a5f816115ff565b63ffffffff8116905081548163ffffffff1982161783556020840135611a848161195d565b6bffffffffffffffff000000008160201b16905080836bffffffffffffffffffffffff198416171784556040850135611abc8161195d565b67ffffffffffffffff60601b606091821b166001600160a01b03199390931693909317808217831785559285013591611af4836115ff565b63ffffffff60a01b1993909316179190911760a09190911b63ffffffff60a01b16178155611b4b611b2760808401611a47565b82805463ffffffff60c01b191660c09290921b63ffffffff60c01b16919091179055565b5050565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610a3557610a35611b4f565b634e487b7160e01b600052601260045260246000fd5b600082611ba157611ba1611b7c565b500490565b80820180821115610a3557610a35611b4f565b6001600160781b03818116838216028082169190828114611bdc57611bdc611b4f565b505092915050565b60008085851115611bf457600080fd5b83861115611c0157600080fd5b5050820193919092039150565b600082611c1d57611c1d611b7c565b500690565b81810381811115610a3557610a35611b4f565b6001600160401b03828116828216039080821115610bc057610bc0611b4f565b6001600160401b03818116838216028082169190828114611bdc57611bdc611b4f565b60006001600160401b0380841680611c9257611c92611b7c565b92169190910492915050565b6001600160401b03818116838216019080821115610bc057610bc0611b4f565b6001600160f01b03198135818116916002851015611bdc5760029490940360031b84901b1690921692915050565b6001600160e01b03198135818116916004851015611bdc5760049490940360031b84901b1690921692915050565b6001600160c01b03198135818116916008851015611bdc5760089490940360031b84901b169092169291505056fea2646970667358221220d34b7cf3109d1a09d2ef9d6586b9648c558d96c099d9868a56aea4afa7c4f88e64736f6c63430008160033", - "sourceMap": "902:10996:72:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4159:203;;;;;;;;;;-1:-1:-1;4159:203:72;;;;;:::i;:::-;;:::i;:::-;;3637:145;;;;;;;;;;-1:-1:-1;3637:145:72;;;;;:::i;:::-;3737:38;;3709:9;3737:38;;;:17;:38;;;;;;;3637:145;;;;1077:25:132;;;1065:2;1050:18;3637:145:72;;;;;;;;3047:68;;;;;;;;;;-1:-1:-1;3047:68:72;;;;;:::i;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3047:68:72;;;;;;-1:-1:-1;;;3047:68:72;;;;;;-1:-1:-1;;;3047:68:72;;;;;-1:-1:-1;;;3047:68:72;;;;;;;;;;1372:10:132;1409:15;;;1391:34;;-1:-1:-1;;;;;1498:15:132;;;1493:2;1478:18;;1471:43;1550:15;;;;1530:18;;;1523:43;;;;1602:15;;1597:2;1582:18;;1575:43;1655:15;;1649:3;1634:19;;1627:44;1349:3;1334:19;3047:68:72;1113:564:132;4368:366:72;;;;;;;;;;-1:-1:-1;4368:366:72;;;;;:::i;:::-;;:::i;11708:99::-;;;;;;;;;;-1:-1:-1;11708:99:72;;;11795:1;2542:50:132;;;2623:2;2608:18;;2601:45;2515:18;11708:99:72;2374:278:132;2293:101:107;;;;;;;;;;;;;:::i;5902:814:72:-;;;;;;;;;;-1:-1:-1;5902:814:72;;;;;:::i;:::-;;:::i;1638:85:107:-;;;;;;;;;;-1:-1:-1;1684:7:107;1710:6;1638:85;;-1:-1:-1;;;;;1710:6:107;;;4191:51:132;;4179:2;4164:18;1638:85:107;4045:203:132;3788:365:72;;;;;;;;;;-1:-1:-1;3788:365:72;;;;;:::i;:::-;;:::i;5410:282::-;;;;;;:::i;:::-;;:::i;6722:1028::-;;;;;;;;;;-1:-1:-1;6722:1028:72;;;;;:::i;:::-;;:::i;4740:173::-;;;;;;;;;;-1:-1:-1;4829:22:72;;4740:173;;;-1:-1:-1;;;;;4829:22:72;;;6660:34:132;;-1:-1:-1;;;4853:28:72;;;6725:2:132;6710:18;;6703:43;-1:-1:-1;;;4883:22:72;;;;;6762:18:132;;;6755:47;6597:2;6582:18;4740:173:72;6409:399:132;5167:237:72;;;;;;:::i;:::-;;:::i;2543:215:107:-;;;;;;;;;;-1:-1:-1;2543:215:107;;;;;:::i;:::-;;:::i;3383:248:72:-;;;;;;;;;;-1:-1:-1;3383:248:72;;;;;:::i;:::-;;:::i;4159:203::-;1531:13:107;:11;:13::i;:::-;4311:44:72::1;4334:6;4342:3;4347:7;4311:22;:44::i;:::-;4159:203:::0;;;:::o;4368:366::-;1531:13:107;:11;:13::i;:::-;4551:22:72::1;:48:::0;;4679::::1;::::0;;::::1;-1:-1:-1::0;;;4679:48:72::1;-1:-1:-1::0;;;;;;;;;;4609:60:72;;::::1;-1:-1:-1::0;;;4609:60:72::1;-1:-1:-1::0;;;;;;4609:60:72;;;4551:48;;;::::1;4609:60:::0;;;;;;;::::1;4679:48:::0;;;::::1;;::::0;;4368:366::o;2293:101:107:-;1531:13;:11;:13::i;:::-;2357:30:::1;2384:1;2357:18;:30::i;:::-;2293:101::o:0;5902:814:72:-;6058:7;6081:14;;;;:10;:14;:::i;:::-;-1:-1:-1;;;;;6081:19:72;6099:1;6081:19;6077:67;;6129:14;;;;;;;;:::i;:::-;6109:35;;-1:-1:-1;;;6109:35:72;;8228:10:132;8216:23;;;6109:35:72;;;8198:42:132;8171:18;;6109:35:72;;;;;;;;6077:67;6155:27;6173:8;;6155:17;:27::i;:::-;-1:-1:-1;6213:20:72;6236:32;6253:14;;;;;;;;:::i;:::-;-1:-1:-1;;;;;6236:32:72;:16;:32::i;:::-;6213:55;-1:-1:-1;6279:11:72;;6342:17;;;;:7;:17;:::i;:::-;-1:-1:-1;;;;;6322:55:72;;6391:14;;;;;;;;:::i;:::-;6419:12;6445:14;;;;:10;:14;:::i;:::-;6322:147;;-1:-1:-1;;;;;;6322:147:72;;;;;;;;8468:23:132;;;;6322:147:72;;;8450:42:132;8508:18;;;8501:34;;;;-1:-1:-1;;;;;8571:31:132;8551:18;;;8544:59;8423:18;;6322:147:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6278:191;;;;;;6498:211;6529:3;6550:10;:24;;;;;;;;;;:::i;:::-;6592:28;;;;;;;;:::i;:::-;6638:25;;;;;;;;:::i;:::-;6681:14;6498:13;:211::i;:::-;6479:230;5902:814;-1:-1:-1;;;;;;;;5902:814:72:o;3788:365::-;1531:13:107;:11;:13::i;:::-;3944:38:72;;::::1;3940:77;;3991:26;;-1:-1:-1::0;;;3991:26:72::1;;;;;;;;;;;3940:77;4032:9;4027:120;4047:18:::0;;::::1;4027:120;;;4120:13;;4134:1;4120:16;;;;;;;:::i;:::-;;;;;;4086:19;:31;4106:7;;4114:1;4106:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;4086:31;;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;4086:31:72;:50:::1;::::0;:31;:50:::1;:::i;:::-;-1:-1:-1::0;;4067:3:72::1;;4027:120;;;;3788:365:::0;;;;:::o;5410:282::-;5613:11;5642:43;5649:7;5658:10;5670:4;;5676:8;;5642:6;:43::i;:::-;5636:49;5410:282;-1:-1:-1;;;;;;;5410:282:72:o;6722:1028::-;6914:7;6937:14;;;;:10;:14;:::i;:::-;-1:-1:-1;;;;;6937:19:72;6955:1;6937:19;6933:63;;6965:31;;-1:-1:-1;;;6965:31:72;;8228:10:132;6985::72;8216:23:132;6965:31:72;;;8198:42:132;8171:18;;6965:31:72;8054:192:132;6933:63:72;7007:27;7025:8;;7007:17;:27::i;:::-;-1:-1:-1;7065:20:72;7088:36;7109:14;;;;;;;;:::i;7088:36::-;7065:59;-1:-1:-1;7135:11:72;;7198:17;;;;:7;:17;:::i;:::-;-1:-1:-1;;;;;7178:55:72;;7247:10;7271:12;7297:14;;;;:10;:14;:::i;:::-;7178:143;;-1:-1:-1;;;;;;7178:143:72;;;;;;;;8468:23:132;;;;7178:143:72;;;8450:42:132;8508:18;;;8501:34;;;;-1:-1:-1;;;;;8571:31:132;8551:18;;;8544:59;8423:18;;7178:143:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7134:187;;;;;;7376:17;7396:21;7412:4;;7396:15;:21::i;:::-;7376:41;-1:-1:-1;7427:14:72;-1:-1:-1;;;;;7444:49:72;;7445:30;7457:18;7376:41;7445:30;:::i;:::-;7444:49;;;;:::i;:::-;7427:66;-1:-1:-1;7523:220:72;7554:12;7427:66;7554:3;:12;:::i;:::-;7584:24;;;;;;;;:::i;:::-;7626:7;:28;;;;;;;;;;:::i;:::-;7672:10;:25;;;;;;;;;;:::i;:::-;7715:14;7523:13;:220::i;:::-;7504:239;6722:1028;-1:-1:-1;;;;;;;;;;;;6722:1028:72:o;5167:237::-;5334:7;5360:37;5367:7;5376:10;5388:8;;5360:6;:37::i;:::-;5353:44;5167:237;-1:-1:-1;;;;;5167:237:72:o;2543:215:107:-;1531:13;:11;:13::i;:::-;-1:-1:-1;;;;;2627:22:107;::::1;2623:91;;2672:31;::::0;-1:-1:-1;;;2672:31:107;;2700:1:::1;2672:31;::::0;::::1;4191:51:132::0;4164:18;;2672:31:107::1;4045:203:132::0;2623:91:107::1;2723:28;2742:8;2723:18;:28::i;:::-;2543:215:::0;:::o;3383:248:72:-;1531:13:107;:11;:13::i;:::-;3493:9:72::1;3488:137;3508:18:::0;;::::1;3488:137;;;3598:7;;3606:1;3598:10;;;;;;;:::i;:::-;;;;;;:16;;;3547:17;:26;;:48;3574:7;;3582:1;3574:10;;;;;;;:::i;:::-;:20;::::0;::::1;:10;::::0;;::::1;;:20:::0;;::::1;::::0;-1:-1:-1;3574:20:72::1;:::i;:::-;3547:48;;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;3547:48:72;:67;3528:3:::1;;3488:137;;1796:162:107::0;1684:7;1710:6;-1:-1:-1;;;;;1710:6:107;735:10:117;1855:23:107;1851:101;;1901:40;;-1:-1:-1;;;1901:40:107;;735:10:117;1901:40:107;;;4191:51:132;4164:18;;1901:40:107;4045:203:132;896:222:44;-1:-1:-1;;;;;987:22:44;;983:129;;1025:19;1032:3;1037:6;1025;:19::i;983:129::-;1075:26;1081:6;1089:3;1094:6;1075:5;:26::i;2912:187:107:-;2985:16;3004:6;;-1:-1:-1;;;;;3020:17:107;;;-1:-1:-1;;;;;;3020:17:107;;;;;;3052:40;;3004:6;;;;;;;3052:40;;2985:16;3052:40;2975:124;2912:187;:::o;9385:479:72:-;9460:7;;9510:24;;9503:220;;9551:16;;9592:30;:8;;9615:6;9592:22;:30::i;:::-;9675:37;;-1:-1:-1;;;9675:37:72;;12391:4:132;12379:17;;9675:37:72;;;12361:36:132;9550:72:72;;-1:-1:-1;9550:72:72;;-1:-1:-1;9550:72:72;;-1:-1:-1;;12334:18:132;;;;;-1:-1:-1;9675:37:72;12219:184:132;9503:220:72;9736:25;;;9732:78;;9770:40;;-1:-1:-1;;;9770:40:72;;;;;1077:25:132;;;1050:18;;9770:40:72;901:207:132;9732:78:72;9828:1;9821:8;;;9385:479;;;;;:::o;7824:164::-;7890:7;7916:65;7955:7;2364:3;7916:38;:65::i;8749:630::-;8933:7;;8975:9;;;;:30;;9001:4;8975:30;;;8987:11;8975:30;8952:53;-1:-1:-1;9016:25:72;9069:5;9045:20;;;;:4;:20;:::i;:::-;9044:30;;;;:::i;:::-;9016:58;-1:-1:-1;;;;;;9088:20:72;;;;:39;;-1:-1:-1;;;;;;9112:15:72;;;9088:39;9084:94;;;9150:17;-1:-1:-1;9143:24:72;;-1:-1:-1;9143:24:72;9084:94;9188:26;9260:15;-1:-1:-1;;;;;9224:51:72;9238:18;9225:10;-1:-1:-1;;;;;9225:31:72;;;;;:::i;:::-;9224:51;;;;:::i;:::-;9217:58;;:4;:58;:::i;:::-;9188:87;;9314:17;9293:18;:38;:79;;9355:17;9293:79;;;9334:18;9293:79;9286:86;8749:630;-1:-1:-1;;;;;;;;;8749:630:72:o;9870:459::-;9939:11;9962:29;9994:52;10016:4;;10022:23;9994:21;:52::i;:::-;10088:22;;10062:23;;9962:84;;-1:-1:-1;10062:48:72;;-1:-1:-1;;;;;10088:22:72;;;;10062:48;;;:::i;:::-;-1:-1:-1;;;;;10056:54:72;;;10124:3;:23;;;10120:102;;;10177:22;;1614:5;;10171:28;;-1:-1:-1;;;10177:22:72;;10170:41;10177:22;10171:3;:28;:::i;:::-;10170:41;;;;:::i;:::-;10163:48;;;;:::i;:::-;;;10120:102;10235:3;:26;;;10231:92;;;10284:28;;10277:35;;-1:-1:-1;;;10284:28:72;;-1:-1:-1;;;;;10284:28:72;10277:35;;:::i;:::-;;;10231:92;9952:377;9870:459;;;;:::o;438:252:44:-;-1:-1:-1;;;;;506:19:44;;502:58;;534:26;;-1:-1:-1;;;534:26:44;;;;;;;;;;;502:58;571:12;589:3;-1:-1:-1;;;;;589:8:44;606:6;589:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;570:48;;;633:7;628:55;;649:34;;-1:-1:-1;;;649:34:44;;-1:-1:-1;;;;;13087:32:132;;649:34:44;;;13069:51:132;13136:18;;;13129:34;;;13042:18;;649:34:44;12895:274:132;696:194:44;-1:-1:-1;;;;;779:19:44;;775:58;;807:26;;-1:-1:-1;;;807:26:44;;;;;;;;;;;775:58;843:40;-1:-1:-1;;;;;843:27:44;;871:3;876:6;843:27;:40::i;6549:769:21:-;6659:16;6677:21;6659:16;6799:1;6789:11;;6659:16;6861:22;:8;;6789:11;6861:14;:22::i;:::-;6907:1;6897:11;;;6847:36;;-1:-1:-1;6968:25:21;;:8;;;;6982:10;;6968:13;:25::i;:::-;6955:38;-1:-1:-1;7139:1:21;7130:10;;7206:13;;;;;7242:31;7206:13;7130:10;7242:8;;:31;:::i;:::-;6549:769;;7233:40;;-1:-1:-1;7233:40:21;;-1:-1:-1;;;7287:14:21;;;;-1:-1:-1;;;6549:769:21:o;8172:571:72:-;8303:7;;8352:29;1975:2;8352:7;:29;:::i;:::-;8322:59;-1:-1:-1;8395:24:72;8417:2;8322:59;8395:24;:::i;:::-;:29;8391:135;;8485:24;8507:2;8485:19;:24;:::i;:::-;8462:48;;:19;:48;:::i;:::-;:53;;8513:2;8462:53;:::i;:::-;8440:75;;8391:135;8712:19;8667:42;8698:11;1919:3;8667:42;:::i;:::-;:64;;;;:::i;:::-;:69;;8734:2;8667:69;:::i;10335:1367::-;10512:55;:17;10546:10;10558:8;10512:33;:55::i;:::-;10581:90;:17;10611:10;579:1:23;10581:29:72;:90::i;:::-;10577:1119;;;10721:31;;;;10687;10721;;;:19;:31;;;;;;;;;10687:65;;;;;;;;;;;;;;-1:-1:-1;;;;;10687:65:72;;;;;;;;;;;;-1:-1:-1;;;10687:65:72;;;;;;;;;;;;-1:-1:-1;;;10687:65:72;;;;;;;;-1:-1:-1;;;10687:65:72;;;;;;;;;10785:20;10819:600;;;;10938:8;:17;;;-1:-1:-1;;;;;10915:40:72;:20;-1:-1:-1;;;;;10915:40:72;;10911:494;;;11106:21;;11085:17;;;;11155:4;;11061:66;;;11062:40;;:20;:40;:::i;:::-;11061:66;;;;:::i;:::-;11060:99;;;;:::i;:::-;11015:8;:18;;;:144;;;;:::i;:::-;10979:180;;10911:494;;;11382:4;11333:8;:21;;;11288:66;;11309:20;11289:8;:17;;;:40;;;;:::i;:::-;11288:66;;;;:::i;:::-;11287:99;;;;:::i;:::-;11242:8;:18;;;:144;;;;:::i;:::-;11206:180;;10911:494;11493:15;11465:8;:25;;;11453:37;;:9;:37;;;;:::i;:::-;-1:-1:-1;;;;;11453:55:72;;:132;;;-1:-1:-1;11558:27:72;;;;11540:45;;;;:15;:45;:::i;:::-;11528:9;-1:-1:-1;;;;;11528:57:72;;11453:132;11432:254;;;11625:46;;-1:-1:-1;;;11625:46:72;;14799:10:132;14787:23;;11625:46:72;;;14769:42:132;-1:-1:-1;;;;;14847:31:132;;14827:18;;;14820:59;14742:18;;11625:46:72;14599:286:132;11432:254:72;10673:1023;;10577:1119;10335:1367;;;;:::o;852:4045:22:-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;1166:4:22;-1:-1:-1;1166:4:22;1178:10;-1:-1:-1;1187:1:22;1178:10;:::i;:::-;1166:23;;;;;;;:::i;:::-;1159:31;;;:::i;:::-;1152:39;;;-1:-1:-1;1205:11:22;1215:1;1205:11;;:::i;:::-;;-1:-1:-1;1234:25:22;;;216:1;1234:25;1230:54;;1268:16;;-1:-1:-1;;;1268:16:22;;;;;;;;;;;1230:54;1299:11;1309:1;1299:11;;:::i;:::-;;-1:-1:-1;1345:19:22;1381:4;1299:11;1381:4;1393:10;1299:11;1402:1;1393:10;:::i;:::-;1381:23;;;;;;;:::i;:::-;1374:31;;;:::i;:::-;1367:39;;;-1:-1:-1;1420:11:22;1430:1;1420:11;;:::i;:::-;;;1578:12;:17;;1594:1;1578:17;1574:42;;1604:12;;-1:-1:-1;;;1604:12:22;;;;;;;;;;;1574:42;1630:38;;;;-1:-1:-1;1630:23:22;1720:1522;1743:3;:23;;;1739:27;;:1;:27;;;1720:1522;;;1787:20;1816:4;;1821:6;1816:12;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;1843:11:22;;-1:-1:-1;1853:1:22;1843:11;;:::i;:::-;;-1:-1:-1;1872:33:22;;;265:1;1872:33;1868:62;;1914:16;;-1:-1:-1;;;1914:16:22;;;;;;;;;;;1868:62;1981:11;1991:1;1981:11;;:::i;:::-;;-1:-1:-1;2007:19:22;2043:4;1981:11;2043:4;2055:10;1981:11;2064:1;2055:10;:::i;:::-;2043:23;;;;;;;:::i;:::-;2036:31;;;:::i;:::-;2029:39;;;-1:-1:-1;2082:11:22;2092:1;2082:11;;:::i;:::-;;-1:-1:-1;;;2112:50:22;;;;2108:1124;;2182:18;2217:4;2222:6;2217:4;2229:10;2222:6;2238:1;2229:10;:::i;:::-;2217:23;;;;;;;:::i;:::-;2210:31;;;:::i;:::-;2203:39;;;-1:-1:-1;2260:11:22;2270:1;2260:11;;:::i;:::-;;-1:-1:-1;2260:11:22;2383:21;2468:4;2260:11;2468:4;2487:17;2260:11;2503:1;2487:17;:::i;:::-;2468:37;;;;;;;:::i;:::-;2461:45;;;:::i;:::-;2454:53;;;-1:-1:-1;2529:18:22;2546:1;2529:18;;:::i;:::-;;;2570:15;2594:4;;2599:13;2594:19;;;;;;;:::i;:::-;2618:1;2594:19;;;;;2588:31;;;-1:-1:-1;2641:18:22;;2618:1;-1:-1:-1;2641:18:22;;:::i;:::-;;-1:-1:-1;2682:26:22;2725:4;2641:18;2725:4;2744:17;2641:18;2760:1;2744:17;:::i;:::-;2725:37;;;;;;;:::i;:::-;2718:45;;;:::i;:::-;2711:53;;2682:82;;2787:236;2836:9;2871:10;2907:19;457:1:23;2787:23:22;:236;;:::i;:::-;-1:-1:-1;3087:4:22;;-1:-1:-1;3064:20:22;;-1:-1:-1;;3064:20:22;;;:6;:20;:::i;:::-;:34;3060:59;;;3107:12;;-1:-1:-1;;;3107:12:22;;;;;;;;;;;3060:59;3137:21;;;;;;:::i;:::-;;;2164:1009;2108:1124;;;3204:13;;-1:-1:-1;;;3204:13:22;;;;;;;;;;;2108:1124;-1:-1:-1;;1768:3:22;;1720:1522;;;-1:-1:-1;3299:20:22;;;3295:1540;;;3335:20;3364:4;;3369:6;3364:12;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;3391:11:22;;-1:-1:-1;3401:1:22;3391:11;;:::i;:::-;;-1:-1:-1;3420:33:22;;;383:1;3420:33;3416:62;;3462:16;;-1:-1:-1;;;3462:16:22;;;;;;;;;;;3416:62;3493:18;3528:4;3533:6;3528:4;3540:10;3533:6;3549:1;3540:10;:::i;:::-;3528:23;;;;;;;:::i;:::-;3521:31;;;:::i;:::-;3514:39;;;-1:-1:-1;3567:11:22;3577:1;3567:11;;:::i;:::-;;-1:-1:-1;3596:48:22;;;451:1;3596:48;3592:74;;3653:13;;-1:-1:-1;;;3653:13:22;;;;;;;;;;;3592:74;3681:20;3710:4;;3715:6;3710:12;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;3737:11:22;;-1:-1:-1;3747:1:22;3737:11;;:::i;:::-;;-1:-1:-1;3767:42:22;;;3763:467;;3855:4;3829:23;;;:30;3763:467;;;-1:-1:-1;;3884:45:22;;;;3880:350;;3978:4;3949:26;;;:33;3880:350;;;-1:-1:-1;;4007:48:22;;;;4003:227;;4101:4;4075:23;;;:30;;;4123:26;;;:33;4003:227;4244:16;4277:4;4282:6;4277:4;4289:10;4282:6;4298:1;4289:10;:::i;:::-;4277:23;;;;;;;:::i;:::-;4270:31;;;:::i;:::-;4263:39;;;-1:-1:-1;4316:11:22;4326:1;4316:11;;:::i;:::-;;;4342:15;4366:4;;4371:6;4366:12;;;;;;;:::i;:::-;4383:1;4366:12;;;;;4360:24;;;-1:-1:-1;4398:11:22;;4383:1;-1:-1:-1;4398:11:22;;:::i;:::-;;-1:-1:-1;4424:26:22;4467:4;4398:11;4467:4;4479:10;4398:11;4488:1;4479:10;:::i;:::-;4467:23;;;;;;;:::i;:::-;4460:31;;;:::i;:::-;4453:39;;;-1:-1:-1;4506:11:22;4516:1;4506:11;;:::i;:::-;;;4532:196;4573:9;4600:10;4628:19;519:1:23;4532:23:22;:196;;:::i;:::-;4812:12;4822:2;4812:12;;:::i;:::-;;;3321:1514;;;;;;3295:1540;4848:21;;;4844:46;;4878:12;;-1:-1:-1;;;4878:12:22;;;;;;;;;;;4844:46;1018:3879;852:4045;;;;;:::o;1271:160:115:-;1380:43;;;-1:-1:-1;;;;;13087:32:132;;1380:43:115;;;13069:51:132;13136:18;;;;13129:34;;;1380:43:115;;;;;;;;;;13042:18:132;;;;1380:43:115;;;;;;;;-1:-1:-1;;;;;1380:43:115;-1:-1:-1;;;1380:43:115;;;1353:71;;1373:5;;1353:19;:71::i;229:215:41:-;306:6;371:1;362:10;;407:18;362:10;:6;407;;:18;:::i;:::-;400:26;;;:::i;:::-;393:34;;;229:215;-1:-1:-1;;;;;229:215:41:o;95:128::-;171:5;201:6;;208;201:14;;;;;;;:::i;:::-;;;;;;;;;95:128;-1:-1:-1;;;;;95:128:41:o;737:194:23:-;856:37;868:5;875:10;887:5;856:11;:37::i;:::-;851:73;;902:22;;-1:-1:-1;;;902:22:23;;;;;;;;;;;937:176;1069:26;;;;1046:4;1069:26;;;;;;;;;;;1046:4;;1069:37;;:26;1100:5;;1069:30;:37;:::i;:::-;1062:44;937:176;-1:-1:-1;;;;937:176:23:o;7738:720:115:-;7818:18;7846:19;7984:4;7981:1;7974:4;7968:11;7961:4;7955;7951:15;7948:1;7941:5;7934;7929:60;8041:7;8031:176;;8085:4;8079:11;8130:16;8127:1;8122:3;8107:40;8176:16;8171:3;8164:29;8031:176;-1:-1:-1;;8284:1:115;8278:8;8234:16;;-1:-1:-1;8310:15:115;;:68;;8362:11;8377:1;8362:16;;8310:68;;;-1:-1:-1;;;;;8328:26:115;;;:31;8310:68;8306:146;;;8401:40;;-1:-1:-1;;;8401:40:115;;-1:-1:-1;;;;;4209:32:132;;8401:40:115;;;4191:51:132;4164:18;;8401:40:115;4045:203:132;337:168:46;435:1;:10;;;;;;462:31;:36;;;337:168::o;14:173:132:-;82:20;;-1:-1:-1;;;;;131:31:132;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:328::-;269:6;277;285;338:2;326:9;317:7;313:23;309:32;306:52;;;354:1;351;344:12;306:52;377:29;396:9;377:29;:::i;:::-;367:39;;425:38;459:2;448:9;444:18;425:38;:::i;:::-;415:48;;510:2;499:9;495:18;482:32;472:42;;192:328;;;;;:::o;525:121::-;610:10;603:5;599:22;592:5;589:33;579:61;;636:1;633;626:12;651:245;709:6;762:2;750:9;741:7;737:23;733:32;730:52;;;778:1;775;768:12;730:52;817:9;804:23;836:30;860:5;836:30;:::i;:::-;885:5;651:245;-1:-1:-1;;;651:245:132:o;1682:186::-;1750:20;;-1:-1:-1;;;;;1799:44:132;;1789:55;;1779:83;;1858:1;1855;1848:12;1873:159;1940:20;;2000:6;1989:18;;1979:29;;1969:57;;2022:1;2019;2012:12;2037:332;2113:6;2121;2129;2182:2;2170:9;2161:7;2157:23;2153:32;2150:52;;;2198:1;2195;2188:12;2150:52;2221:29;2240:9;2221:29;:::i;:::-;2211:39;;2269:38;2303:2;2292:9;2288:18;2269:38;:::i;:::-;2259:48;;2326:37;2359:2;2348:9;2344:18;2326:37;:::i;:::-;2316:47;;2037:332;;;;;:::o;2657:157::-;2719:5;2764:2;2755:6;2750:3;2746:16;2742:25;2739:45;;;2780:1;2777;2770:12;2739:45;-1:-1:-1;2802:6:132;2657:157;-1:-1:-1;2657:157:132:o;2819:347::-;2870:8;2880:6;2934:3;2927:4;2919:6;2915:17;2911:27;2901:55;;2952:1;2949;2942:12;2901:55;-1:-1:-1;2975:20:132;;-1:-1:-1;;;;;3007:30:132;;3004:50;;;3050:1;3047;3040:12;3004:50;3087:4;3079:6;3075:17;3063:29;;3139:3;3132:4;3123:6;3115;3111:19;3107:30;3104:39;3101:59;;;3156:1;3153;3146:12;3101:59;2819:347;;;;;:::o;3171:687::-;3317:6;3325;3333;3341;3385:9;3376:7;3372:23;3415:3;3411:2;3407:12;3404:32;;;3432:1;3429;3422:12;3404:32;3456:3;3452:2;3448:12;3445:32;;;3473:1;3470;3463:12;3445:32;;3496:9;3486:19;;3524:66;3582:7;3576:3;3565:9;3561:19;3524:66;:::i;:::-;3514:76;;3641:3;3630:9;3626:19;3613:33;-1:-1:-1;;;;;3661:6:132;3658:30;3655:50;;;3701:1;3698;3691:12;3655:50;3740:58;3790:7;3781:6;3770:9;3766:22;3740:58;:::i;:::-;3171:687;;;;-1:-1:-1;3817:8:132;-1:-1:-1;;;;3171:687:132:o;4253:1143::-;4410:6;4418;4426;4434;4487:2;4475:9;4466:7;4462:23;4458:32;4455:52;;;4503:1;4500;4493:12;4455:52;4543:9;4530:23;-1:-1:-1;;;;;4613:2:132;4605:6;4602:14;4599:34;;;4629:1;4626;4619:12;4599:34;4667:6;4656:9;4652:22;4642:32;;4712:7;4705:4;4701:2;4697:13;4693:27;4683:55;;4734:1;4731;4724:12;4683:55;4774:2;4761:16;4800:2;4792:6;4789:14;4786:34;;;4816:1;4813;4806:12;4786:34;4871:7;4864:4;4854:6;4851:1;4847:14;4843:2;4839:23;4835:34;4832:47;4829:67;;;4892:1;4889;4882:12;4829:67;4923:4;4915:13;;;;-1:-1:-1;4947:6:132;-1:-1:-1;4991:20:132;;;4978:34;;5024:16;;;5021:36;;;5053:1;5050;5043:12;5021:36;5091:8;5080:9;5076:24;5066:34;;5138:7;5131:4;5127:2;5123:13;5119:27;5109:55;;5160:1;5157;5150:12;5109:55;5202:2;5189:16;5230:2;5220:8;5217:16;5214:36;;;5246:1;5243;5236:12;5214:36;5306:7;5299:4;5291;5281:8;5277:19;5273:2;5269:28;5265:39;5262:52;5259:72;;;5327:1;5324;5317:12;5259:72;4253:1143;;;;-1:-1:-1;;5358:4:132;5350:13;;-1:-1:-1;;;4253:1143:132:o;5401:1003::-;5574:6;5582;5590;5598;5606;5614;5658:9;5649:7;5645:23;5688:3;5684:2;5680:12;5677:32;;;5705:1;5702;5695:12;5677:32;5729:3;5725:2;5721:12;5718:32;;;5746:1;5743;5736:12;5718:32;;5769:9;5759:19;;5797:66;5855:7;5849:3;5838:9;5834:19;5797:66;:::i;:::-;5787:76;;5914:3;5903:9;5899:19;5886:33;-1:-1:-1;;;;;5979:2:132;5971:6;5968:14;5965:34;;;5995:1;5992;5985:12;5965:34;6034:58;6084:7;6075:6;6064:9;6060:22;6034:58;:::i;:::-;6111:8;;-1:-1:-1;6008:84:132;-1:-1:-1;6199:3:132;6184:19;;6171:33;;-1:-1:-1;6216:16:132;;;6213:36;;;6245:1;6242;6235:12;6213:36;;6284:60;6336:7;6325:8;6314:9;6310:24;6284:60;:::i;:::-;5401:1003;;;;-1:-1:-1;5401:1003:132;;-1:-1:-1;5401:1003:132;;6363:8;;5401:1003;-1:-1:-1;;;5401:1003:132:o;6813:186::-;6872:6;6925:2;6913:9;6904:7;6900:23;6896:32;6893:52;;;6941:1;6938;6931:12;6893:52;6964:29;6983:9;6964:29;:::i;7004:661::-;7136:6;7144;7197:2;7185:9;7176:7;7172:23;7168:32;7165:52;;;7213:1;7210;7203:12;7165:52;7253:9;7240:23;-1:-1:-1;;;;;7323:2:132;7315:6;7312:14;7309:34;;;7339:1;7336;7329:12;7309:34;7377:6;7366:9;7362:22;7352:32;;7422:7;7415:4;7411:2;7407:13;7403:27;7393:55;;7444:1;7441;7434:12;7393:55;7484:2;7471:16;7510:2;7502:6;7499:14;7496:34;;;7526:1;7523;7516:12;7496:34;7579:7;7574:2;7564:6;7561:1;7557:14;7553:2;7549:23;7545:32;7542:45;7539:65;;;7600:1;7597;7590:12;7539:65;7631:2;7623:11;;;;;7653:6;;-1:-1:-1;7004:661:132;;-1:-1:-1;;;;7004:661:132:o;7670:129::-;-1:-1:-1;;;;;7748:5:132;7744:30;7737:5;7734:41;7724:69;;7789:1;7786;7779:12;7804:245;7862:6;7915:2;7903:9;7894:7;7890:23;7886:32;7883:52;;;7931:1;7928;7921:12;7883:52;7970:9;7957:23;7989:30;8013:5;7989:30;:::i;8614:146::-;-1:-1:-1;;;;;8693:5:132;8689:46;8682:5;8679:57;8669:85;;8750:1;8747;8740:12;8765:581;8862:6;8870;8878;8886;8939:3;8927:9;8918:7;8914:23;8910:33;8907:53;;;8956:1;8953;8946:12;8907:53;8985:9;8979:16;8969:26;;9038:2;9027:9;9023:18;9017:25;9051:31;9076:5;9051:31;:::i;:::-;9151:2;9136:18;;9130:25;9101:5;;-1:-1:-1;9164:33:132;9130:25;9164:33;:::i;:::-;9268:2;9253:18;;9247:25;9216:7;;-1:-1:-1;9281:33:132;9247:25;9281:33;:::i;:::-;8765:581;;;;-1:-1:-1;8765:581:132;;-1:-1:-1;;8765:581:132:o;9351:184::-;9409:6;9462:2;9450:9;9441:7;9437:23;9433:32;9430:52;;;9478:1;9475;9468:12;9430:52;9501:28;9519:9;9501:28;:::i;9540:247::-;9599:6;9652:2;9640:9;9631:7;9627:23;9623:32;9620:52;;;9668:1;9665;9658:12;9620:52;9707:9;9694:23;9726:31;9751:5;9726:31;:::i;9792:127::-;9853:10;9848:3;9844:20;9841:1;9834:31;9884:4;9881:1;9874:15;9908:4;9905:1;9898:15;9924:174;9968:11;10020:3;10007:17;10033:30;10057:5;10033:30;:::i;10322:1200::-;10505:5;10492:19;10520:32;10544:7;10520:32;:::i;:::-;10584:10;10575:7;10571:24;10561:34;;10620:4;10614:11;10676:2;10662:10;10658:15;10654:2;10650:24;10647:32;10641:4;10634:46;10728:2;10721:5;10717:14;10704:28;10741:32;10765:7;10741:32;:::i;:::-;10814:26;10804:7;10800:2;10796:16;10792:49;10782:59;;10916:2;10911;10881:26;10877:31;10873:2;10869:40;10866:48;10863:56;10857:4;10850:70;10968:2;10961:5;10957:14;10944:28;10981:32;11005:7;10981:32;:::i;:::-;-1:-1:-1;;;11058:2:132;11036:16;;;11032:50;-1:-1:-1;;;;;;11104:45:132;;;;11101:53;;;;11179:10;;;11176:18;;11163:32;;11101:53;11232:14;;11219:28;;11256:32;11219:28;11256:32;:::i;:::-;-1:-1:-1;;;;11327:34:132;;;;11320:42;11313:50;;;;11392:3;11369:17;;;;-1:-1:-1;;;11365:44:132;11310:100;11297:114;;11420:96;11472:43;11510:3;11499:15;;11472:43;:::i;:::-;11466:4;10195:11;;-1:-1:-1;;;;10231:34:132;10292:3;10271:15;;;;-1:-1:-1;;;10267:42:132;10228:82;;;;10215:96;;10103:214;11420:96;10322:1200;;:::o;11527:127::-;11588:10;11583:3;11579:20;11576:1;11569:31;11619:4;11616:1;11609:15;11643:4;11640:1;11633:15;11659:168;11732:9;;;11763;;11780:15;;;11774:22;;11760:37;11750:71;;11801:18;;:::i;11832:127::-;11893:10;11888:3;11884:20;11881:1;11874:31;11924:4;11921:1;11914:15;11948:4;11945:1;11938:15;11964:120;12004:1;12030;12020:35;;12035:18;;:::i;:::-;-1:-1:-1;12069:9:132;;11964:120::o;12089:125::-;12154:9;;;12175:10;;;12172:36;;;12188:18;;:::i;12408:272::-;-1:-1:-1;;;;;12544:10:132;;;12556;;;12540:27;12587:20;;;;12480:32;12626:24;;;12616:58;;12654:18;;:::i;:::-;12616:58;;12408:272;;;;:::o;13174:331::-;13279:9;13290;13332:8;13320:10;13317:24;13314:44;;;13354:1;13351;13344:12;13314:44;13383:6;13373:8;13370:20;13367:40;;;13403:1;13400;13393:12;13367:40;-1:-1:-1;;13429:23:132;;;13474:25;;;;;-1:-1:-1;13174:331:132:o;13510:112::-;13542:1;13568;13558:35;;13573:18;;:::i;:::-;-1:-1:-1;13607:9:132;;13510:112::o;13627:128::-;13694:9;;;13715:11;;;13712:37;;;13729:18;;:::i;13760:183::-;-1:-1:-1;;;;;13879:10:132;;;13867;;;13863:27;;13902:12;;;13899:38;;;13917:18;;:::i;13948:257::-;-1:-1:-1;;;;;14069:10:132;;;14081;;;14065:27;14112:20;;;;14019:18;14151:24;;;14141:58;;14179:18;;:::i;14210:199::-;14249:1;-1:-1:-1;;;;;14320:2:132;14317:1;14313:10;14342:3;14332:37;;14349:18;;:::i;:::-;14387:10;;14383:20;;;;;14210:199;-1:-1:-1;;14210:199:132:o;14414:180::-;-1:-1:-1;;;;;14519:10:132;;;14531;;;14515:27;;14554:11;;;14551:37;;;14568:18;;:::i;14890:318::-;-1:-1:-1;;;;;;15010:19:132;;15081:11;;;;15112:1;15104:10;;15101:101;;;15173:1;15169:11;;;;15166:1;15162:19;15158:28;;;15150:37;15146:46;;;;14890:318;-1:-1:-1;;14890:318:132:o;15213:323::-;-1:-1:-1;;;;;;15333:19:132;;15409:11;;;;15440:1;15432:10;;15429:101;;;15501:1;15497:11;;;;15494:1;15490:19;15486:28;;;15478:37;15474:46;;;;15213:323;-1:-1:-1;;15213:323:132:o;15541:331::-;-1:-1:-1;;;;;;15661:19:132;;15745:11;;;;15776:1;15768:10;;15765:101;;;15837:1;15833:11;;;;15830:1;15826:19;15822:28;;;15814:37;15810:46;;;;15541:331;-1:-1:-1;;15541:331:132:o", - "linkReferences": {}, - "immutableReferences": { - "16477": [ - { "start": 1997, "length": 32 }, - { "start": 2744, "length": 32 } - ], - "16479": [ - { "start": 1680, "length": 32 }, - { "start": 1791, "length": 32 } - ] - } - }, - "methodIdentifiers": { - "dstBlockTimeConfigs(uint32)": "2565c245", - "getCmdFees()": "de0a93c3", - "getFee((address,address,uint64,uint16),(uint64,uint16,uint128),bytes,bytes)": "d358b300", - "getFee((address,uint32,uint64,address,uint64,uint16),(uint64,uint16,uint128),bytes)": "7bfa20a9", - "getFeeOnSend((address,address,uint64,uint16),(uint64,uint16,uint128),bytes,bytes)": "bbc5a33b", - "getFeeOnSend((address,uint32,uint64,address,uint64,uint16),(uint64,uint16,uint128),bytes)": "df2b057e", - "getSupportedCmdTypes(uint32)": "10b65f76", - "owner()": "8da5cb5b", - "renounceOwnership()": "715018a6", - "setCmdFees(uint120,uint120,uint16)": "39f26dfc", - "setDstBlockTimeConfigs(uint32[],(uint32,uint64,uint64,uint32,uint32)[])": "9ac23d28", - "setSupportedCmdTypes((uint32,uint256)[])": "f5ff608f", - "transferOwnership(address)": "f2fde38b", - "version()": "54fd4d50", - "withdrawToken(address,address,uint256)": "01e33667" - }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_localEidV2\",\"type\":\"uint32\"},{\"internalType\":\"uint256\",\"name\":\"_nativeDecimalsRate\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"}],\"name\":\"DVN_EidNotSupported\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DVN_INVALID_INPUT_LENGTH\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"cursor\",\"type\":\"uint256\"}],\"name\":\"DVN_InvalidDVNOptions\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"}],\"name\":\"DVN_TimestampOutOfRange\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"optionType\",\"type\":\"uint8\"}],\"name\":\"DVN_UnsupportedOptionType\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidCmd\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidType\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidVersion\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"Transfer_NativeFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Transfer_ToAddressIsZero\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnsupportedTargetEid\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"}],\"name\":\"dstBlockTimeConfigs\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"avgBlockTime\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"blockNum\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"maxPastRetention\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxFutureRetention\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCmdFees\",\"outputs\":[{\"internalType\":\"uint120\",\"name\":\"\",\"type\":\"uint120\"},{\"internalType\":\"uint120\",\"name\":\"\",\"type\":\"uint120\"},{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"priceFeed\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"confirmations\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"quorum\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"defaultMultiplierBps\",\"type\":\"uint16\"}],\"internalType\":\"struct IDVNFeeLib.FeeParams\",\"name\":\"_params\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"gas\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"multiplierBps\",\"type\":\"uint16\"},{\"internalType\":\"uint128\",\"name\":\"floorMarginUSD\",\"type\":\"uint128\"}],\"internalType\":\"struct IDVN.DstConfig\",\"name\":\"_dstConfig\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"_options\",\"type\":\"bytes\"}],\"name\":\"getFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"priceFeed\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"quorum\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"defaultMultiplierBps\",\"type\":\"uint16\"}],\"internalType\":\"struct IDVNFeeLib.FeeParamsForRead\",\"name\":\"_params\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"gas\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"multiplierBps\",\"type\":\"uint16\"},{\"internalType\":\"uint128\",\"name\":\"floorMarginUSD\",\"type\":\"uint128\"}],\"internalType\":\"struct IDVN.DstConfig\",\"name\":\"_dstConfig\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"_cmd\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_options\",\"type\":\"bytes\"}],\"name\":\"getFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"priceFeed\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"quorum\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"defaultMultiplierBps\",\"type\":\"uint16\"}],\"internalType\":\"struct IDVNFeeLib.FeeParamsForRead\",\"name\":\"_params\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"gas\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"multiplierBps\",\"type\":\"uint16\"},{\"internalType\":\"uint128\",\"name\":\"floorMarginUSD\",\"type\":\"uint128\"}],\"internalType\":\"struct IDVN.DstConfig\",\"name\":\"_dstConfig\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"_cmd\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_options\",\"type\":\"bytes\"}],\"name\":\"getFeeOnSend\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"priceFeed\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"confirmations\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"quorum\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"defaultMultiplierBps\",\"type\":\"uint16\"}],\"internalType\":\"struct IDVNFeeLib.FeeParams\",\"name\":\"_params\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"gas\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"multiplierBps\",\"type\":\"uint16\"},{\"internalType\":\"uint128\",\"name\":\"floorMarginUSD\",\"type\":\"uint128\"}],\"internalType\":\"struct IDVN.DstConfig\",\"name\":\"_dstConfig\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"_options\",\"type\":\"bytes\"}],\"name\":\"getFeeOnSend\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_targetEid\",\"type\":\"uint32\"}],\"name\":\"getSupportedCmdTypes\",\"outputs\":[{\"internalType\":\"BitMap256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint120\",\"name\":\"_evmCallRequestV1FeeUSD\",\"type\":\"uint120\"},{\"internalType\":\"uint120\",\"name\":\"_evmCallComputeV1ReduceFeeUSD\",\"type\":\"uint120\"},{\"internalType\":\"uint16\",\"name\":\"_evmCallComputeV1MapBps\",\"type\":\"uint16\"}],\"name\":\"setCmdFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32[]\",\"name\":\"dstEids\",\"type\":\"uint32[]\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"avgBlockTime\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"blockNum\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"maxPastRetention\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxFutureRetention\",\"type\":\"uint32\"}],\"internalType\":\"struct DVNFeeLibMock.BlockTimeConfig[]\",\"name\":\"_blockConfigs\",\"type\":\"tuple[]\"}],\"name\":\"setDstBlockTimeConfigs\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"targetEid\",\"type\":\"uint32\"},{\"internalType\":\"BitMap256\",\"name\":\"types\",\"type\":\"uint256\"}],\"internalType\":\"struct DVNFeeLibMock.SetSupportedCmdTypesParam[]\",\"name\":\"_params\",\"type\":\"tuple[]\"}],\"name\":\"setSupportedCmdTypes\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"major\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"minor\",\"type\":\"uint8\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"withdrawToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"errors\":{\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}],\"SafeERC20FailedOperation(address)\":[{\"details\":\"An operation with an ERC-20 token failed.\"}]},\"kind\":\"dev\",\"methods\":{\"getFee((address,uint32,uint64,address,uint64,uint16),(uint64,uint16,uint128),bytes)\":{\"details\":\"get fee view function\",\"params\":{\"\":\"//_options options\",\"_dstConfig\":\"dst config\",\"_params\":\"fee params\"}},\"getFeeOnSend((address,uint32,uint64,address,uint64,uint16),(uint64,uint16,uint128),bytes)\":{\"details\":\"get fee function that can change state. e.g. paying priceFeed\",\"params\":{\"\":\"//_options options\",\"_dstConfig\":\"dst config\",\"_params\":\"fee params\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/DVNFeeLibMock.sol\":\"DVNFeeLibMock\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroPriceFeed.sol\":{\"keccak256\":\"0xb4df72798a64f5ea44775b526e0c417c3de0ffc661659d7b31d5b28567c6fbcc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://30ca5fd5e3227a7bffc51654ee3bfebdd591a131f86846ac42dea8a40c5cf1d8\",\"dweb:/ipfs/QmXNmQCF8TZAFpUxgPa1rgWt4ktsBV38A8Hax7TiYLgybW\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IWorker.sol\":{\"keccak256\":\"0xa6b61913767305227576cc6da5067de4208f09a4f58bfbfe32beafdfae9869b1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7fce83bfb831f383606aee7f5ff68a330c8526bb1036f9ba0813d3e4fa8d534\",\"dweb:/ipfs/QmR7zAqJkmCgBj6sguS8t2WthY5k6FwsakgH4UY11uqD4n\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IDVN.sol\":{\"keccak256\":\"0x6becdfab6c1fcaf98f402bee48495895e54825f9d6eef6e292dde0caed628284\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2273341033856737cd46704a1a769768feae696d0e7a912f5be9de8ffdd2180c\",\"dweb:/ipfs/QmY1xBAmMX9jND1HAb7tDyZNPgFReXMqs1vtmHbShKZFQY\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IDVNFeeLib.sol\":{\"keccak256\":\"0xed4a8e77148328132d8f4f2726c4aeec6b490cf03a1d5940bde0ab8d72954de9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7b07802ca32bf10f68e51da872fb358807446dc2242314374d226493a6e9e7dc\",\"dweb:/ipfs/QmfSwWPLgitDy2a9S3mCNBDk6kAcK9n186Dtvj7qg84i12\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/ILayerZeroDVN.sol\":{\"keccak256\":\"0x308e77078242fd5c5746ec29c12e618249134f9e4377c0028ab8f59c07a6014b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2f92cf397a8d26864ac92dfcd1b98e92a32c47f556a62c5e6dc1618734c1caa3\",\"dweb:/ipfs/QmXN3XJXEKq5djV6HeM6jrLycmJPFhMhecsYZ2TaRsQmhg\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/ILayerZeroReadDVN.sol\":{\"keccak256\":\"0x759a3ee7614c2de54b152b0278845f91ac9760d8c22045b2fee89e3e744402b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7a2dbf6bcf5bfab408f18c104b34c390e8bfabb0eeb1a10e3a9c0fb14c8c61d5\",\"dweb:/ipfs/QmWxmRbDBkbhGmNsRyXqQXB1QaWRS4qvh6a8achh8DQPKR\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/DVNOptions.sol\":{\"keccak256\":\"0x2beee03cdf59a9bc72e94d08b69cb2e908725f4ceabb48651494938100e21e35\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://d88e121a39e74309f3575417df2318e2d2ee8bc8314e68dbf78544a9c393b141\",\"dweb:/ipfs/QmRojBRAyENK21HnjevAWeoZZxtWkYZubB9Y78vCJPYeU6\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/ReadCmdCodecV1.sol\":{\"keccak256\":\"0x52fbab4a114ce9defb2ffd57c0a978eee438b2c232862f7e20475e0dcadd4eda\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://a4d5d4e186e3f2a916ea02c2d1d0761069ab1a5c0d6f74719bbf3501a7ccb899\",\"dweb:/ipfs/QmS2e12U9Fap2EK1CmSBTccL4PCKkHNdKJn2bXCqqKdbRn\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/SupportedCmdTypes.sol\":{\"keccak256\":\"0x6b2534522c163714e499041ecd06aaeb93857373cef82cf2752f162bb7c69f9a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bf6c3545c3b9505692dbfaa29b40cab5ed9dc9b65e5804b6f47b5a76596120e9\",\"dweb:/ipfs/QmNs98oRaMvpYhLCQ5yU256eYNEopFTrLRjjwm3gL4foQ3\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/CalldataBytesLib.sol\":{\"keccak256\":\"0x5c0db161cef6603c3b256d4220f489419e7478ef775e52a80056654129c61875\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://a33245d0fdd3992bb56b31d1840108d36bb46c8d617b659ef1af8dd7ed86302d\",\"dweb:/ipfs/QmWyBqT7Tdrfn5zz9xYM3V1PBtfAZAVwwCrrKwwfi3wMQK\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Transfer.sol\":{\"keccak256\":\"0x621d6dd5b8b7e827351459fff4ac87c16ba4656757592cf67de8b199aea4cf9a\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://345aa8c007ed8b96a74260d289545713f1d7180df270d67687e3a540a61fa5c0\",\"dweb:/ipfs/QmNWCvpqSuar6UGLDVshUc7shUv3pt1J5FTf9VyZZ13wXL\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/BitMaps.sol\":{\"keccak256\":\"0xaad3c72ef43480d2253fd48b394e8fb7286d009991d2bc4e61be58ce48ac5ee9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b8c02b14f954416ba2148b389c87da8378ac8dd16ba3d458cbbfba8b0fd8639f\",\"dweb:/ipfs/Qmd2EEQhYL2VmgJi1V4uiHM2WcYxF9iBtxSgcFkbS21rQD\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/DVNFeeLibMock.sol\":{\"keccak256\":\"0x4c2e212f73a1c2a2989af947eef715ebacb11a80d55e5fd18a89a905790971b1\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://30eb29a81414780828903f5320367e89020af5a4055b768e2be08d43605b1688\",\"dweb:/ipfs/QmeC5bVtmaY6tn6Z2XpVFXAkxVWQCQUzKbP2V9nPdv3vCr\"]},\"node_modules/@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol\":{\"keccak256\":\"0x9b6b3e7803bc5f2f8cd7ad57db8ac1def61a9930a5a3107df4882e028a9605d7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://da62d6be1f5c6edf577f0cb45666a8aa9c2086a4bac87d95d65f02e2f4c36a4b\",\"dweb:/ipfs/QmNkpvBpoCMvX8JwAFNSc5XxJ2q5BXJpL5L1txb4QkqVFF\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC165.sol\":{\"keccak256\":\"0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://11fea9f8bc98949ac6709f0c1699db7430d2948137aa94d5a9e95a91f61a710a\",\"dweb:/ipfs/QmQdfRXxQjwP6yn3DVo1GHPpriKNcFghSPi94Z1oKEFUNS\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC20.sol\":{\"keccak256\":\"0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a2608291cb038b388d80b79a06b6118a42f7894ff67b7da10ec0dbbf5b2973ba\",\"dweb:/ipfs/QmWohqcBLbcxmA4eGPhZDXe5RYMMEEpFq22nfkaUMvTfw1\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db\",\"dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0xca2ae13e0610f6a99238dd00b97bd786bc92732dae6d6b9d61f573ec51018310\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://75f8c71ce0c91c40dd5f249ace0b7d8270f8f1767231bcf71490f7157d6ba862\",\"dweb:/ipfs/QmYXgxeDyFHvz3JsXxLEYN6GNUR44ThHeFj5XkpkgMoG4w\"]},\"node_modules/@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0x9d8da059267bac779a2dbbb9a26c2acf00ca83085e105d62d5d4ef96054a47f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c78e2aa4313323cecd1ef12a8d6265b96beee1a199923abf55d9a2a9e291ad23\",\"dweb:/ipfs/QmUTs2KStXucZezzFo3EYeqYu47utu56qrF7jj1Gue65vb\"]},\"node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"node_modules/@openzeppelin/contracts/utils/Errors.sol\":{\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf\",\"dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB\"]},\"node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]},\"node_modules/solidity-bytes-utils/contracts/BytesLib.sol\":{\"keccak256\":\"0xa5b10f04797d5a10a9ba07855108b6bd695940e6a3d128927b2f74a0d359868a\",\"license\":\"Unlicense\",\"urls\":[\"bzz-raw://a38d7680aacbb18dae659876b396b73bcc8f759672213f8a0efc4129e2648535\",\"dweb:/ipfs/QmfKFnwpTEGAnbRnZxMuv3mRCG9S9WMjFhFL23bftBT2Jq\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { - "inputs": [ - { - "internalType": "uint32", - "name": "_localEidV2", - "type": "uint32" - }, - { - "internalType": "uint256", - "name": "_nativeDecimalsRate", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" } - ], - "type": "error", - "name": "DVN_EidNotSupported" - }, - { "inputs": [], "type": "error", "name": "DVN_INVALID_INPUT_LENGTH" }, - { - "inputs": [ - { "internalType": "uint256", "name": "cursor", "type": "uint256" } - ], - "type": "error", - "name": "DVN_InvalidDVNOptions" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" }, - { "internalType": "uint64", "name": "timestamp", "type": "uint64" } - ], - "type": "error", - "name": "DVN_TimestampOutOfRange" - }, - { - "inputs": [ - { "internalType": "uint8", "name": "optionType", "type": "uint8" } - ], - "type": "error", - "name": "DVN_UnsupportedOptionType" - }, - { "inputs": [], "type": "error", "name": "InvalidCmd" }, - { "inputs": [], "type": "error", "name": "InvalidType" }, - { "inputs": [], "type": "error", "name": "InvalidVersion" }, - { - "inputs": [ - { "internalType": "address", "name": "owner", "type": "address" } - ], - "type": "error", - "name": "OwnableInvalidOwner" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "type": "error", - "name": "OwnableUnauthorizedAccount" - }, - { - "inputs": [ - { "internalType": "address", "name": "token", "type": "address" } - ], - "type": "error", - "name": "SafeERC20FailedOperation" - }, - { - "inputs": [ - { "internalType": "address", "name": "_to", "type": "address" }, - { "internalType": "uint256", "name": "_value", "type": "uint256" } - ], - "type": "error", - "name": "Transfer_NativeFailed" - }, - { "inputs": [], "type": "error", "name": "Transfer_ToAddressIsZero" }, - { "inputs": [], "type": "error", "name": "UnsupportedTargetEid" }, - { - "inputs": [ - { - "internalType": "address", - "name": "previousOwner", - "type": "address", - "indexed": true - }, - { - "internalType": "address", - "name": "newOwner", - "type": "address", - "indexed": true - } - ], - "type": "event", - "name": "OwnershipTransferred", - "anonymous": false - }, - { - "inputs": [ - { "internalType": "uint32", "name": "dstEid", "type": "uint32" } - ], - "stateMutability": "view", - "type": "function", - "name": "dstBlockTimeConfigs", - "outputs": [ - { - "internalType": "uint32", - "name": "avgBlockTime", - "type": "uint32" - }, - { "internalType": "uint64", "name": "blockNum", "type": "uint64" }, - { "internalType": "uint64", "name": "timestamp", "type": "uint64" }, - { - "internalType": "uint32", - "name": "maxPastRetention", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "maxFutureRetention", - "type": "uint32" - } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "getCmdFees", - "outputs": [ - { "internalType": "uint120", "name": "", "type": "uint120" }, - { "internalType": "uint120", "name": "", "type": "uint120" }, - { "internalType": "uint16", "name": "", "type": "uint16" } - ] - }, - { - "inputs": [ - { - "internalType": "struct IDVNFeeLib.FeeParams", - "name": "_params", - "type": "tuple", - "components": [ - { - "internalType": "address", - "name": "priceFeed", - "type": "address" - }, - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { - "internalType": "uint64", - "name": "confirmations", - "type": "uint64" - }, - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint64", - "name": "quorum", - "type": "uint64" - }, - { - "internalType": "uint16", - "name": "defaultMultiplierBps", - "type": "uint16" - } - ] - }, - { - "internalType": "struct IDVN.DstConfig", - "name": "_dstConfig", - "type": "tuple", - "components": [ - { "internalType": "uint64", "name": "gas", "type": "uint64" }, - { - "internalType": "uint16", - "name": "multiplierBps", - "type": "uint16" - }, - { - "internalType": "uint128", - "name": "floorMarginUSD", - "type": "uint128" - } - ] - }, - { "internalType": "bytes", "name": "_options", "type": "bytes" } - ], - "stateMutability": "view", - "type": "function", - "name": "getFee", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ] - }, - { - "inputs": [ - { - "internalType": "struct IDVNFeeLib.FeeParamsForRead", - "name": "_params", - "type": "tuple", - "components": [ - { - "internalType": "address", - "name": "priceFeed", - "type": "address" - }, - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint64", - "name": "quorum", - "type": "uint64" - }, - { - "internalType": "uint16", - "name": "defaultMultiplierBps", - "type": "uint16" - } - ] - }, - { - "internalType": "struct IDVN.DstConfig", - "name": "_dstConfig", - "type": "tuple", - "components": [ - { "internalType": "uint64", "name": "gas", "type": "uint64" }, - { - "internalType": "uint16", - "name": "multiplierBps", - "type": "uint16" - }, - { - "internalType": "uint128", - "name": "floorMarginUSD", - "type": "uint128" - } - ] - }, - { "internalType": "bytes", "name": "_cmd", "type": "bytes" }, - { "internalType": "bytes", "name": "_options", "type": "bytes" } - ], - "stateMutability": "view", - "type": "function", - "name": "getFee", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ] - }, - { - "inputs": [ - { - "internalType": "struct IDVNFeeLib.FeeParamsForRead", - "name": "_params", - "type": "tuple", - "components": [ - { - "internalType": "address", - "name": "priceFeed", - "type": "address" - }, - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint64", - "name": "quorum", - "type": "uint64" - }, - { - "internalType": "uint16", - "name": "defaultMultiplierBps", - "type": "uint16" - } - ] - }, - { - "internalType": "struct IDVN.DstConfig", - "name": "_dstConfig", - "type": "tuple", - "components": [ - { "internalType": "uint64", "name": "gas", "type": "uint64" }, - { - "internalType": "uint16", - "name": "multiplierBps", - "type": "uint16" - }, - { - "internalType": "uint128", - "name": "floorMarginUSD", - "type": "uint128" - } - ] - }, - { "internalType": "bytes", "name": "_cmd", "type": "bytes" }, - { "internalType": "bytes", "name": "_options", "type": "bytes" } - ], - "stateMutability": "payable", - "type": "function", - "name": "getFeeOnSend", - "outputs": [ - { "internalType": "uint256", "name": "fee", "type": "uint256" } - ] - }, - { - "inputs": [ - { - "internalType": "struct IDVNFeeLib.FeeParams", - "name": "_params", - "type": "tuple", - "components": [ - { - "internalType": "address", - "name": "priceFeed", - "type": "address" - }, - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { - "internalType": "uint64", - "name": "confirmations", - "type": "uint64" - }, - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint64", - "name": "quorum", - "type": "uint64" - }, - { - "internalType": "uint16", - "name": "defaultMultiplierBps", - "type": "uint16" - } - ] - }, - { - "internalType": "struct IDVN.DstConfig", - "name": "_dstConfig", - "type": "tuple", - "components": [ - { "internalType": "uint64", "name": "gas", "type": "uint64" }, - { - "internalType": "uint16", - "name": "multiplierBps", - "type": "uint16" - }, - { - "internalType": "uint128", - "name": "floorMarginUSD", - "type": "uint128" - } - ] - }, - { "internalType": "bytes", "name": "_options", "type": "bytes" } - ], - "stateMutability": "payable", - "type": "function", - "name": "getFeeOnSend", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ] - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_targetEid", "type": "uint32" } - ], - "stateMutability": "view", - "type": "function", - "name": "getSupportedCmdTypes", - "outputs": [ - { "internalType": "BitMap256", "name": "", "type": "uint256" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "owner", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ] - }, - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "function", - "name": "renounceOwnership" - }, - { - "inputs": [ - { - "internalType": "uint120", - "name": "_evmCallRequestV1FeeUSD", - "type": "uint120" - }, - { - "internalType": "uint120", - "name": "_evmCallComputeV1ReduceFeeUSD", - "type": "uint120" - }, - { - "internalType": "uint16", - "name": "_evmCallComputeV1MapBps", - "type": "uint16" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setCmdFees" - }, - { - "inputs": [ - { - "internalType": "uint32[]", - "name": "dstEids", - "type": "uint32[]" - }, - { - "internalType": "struct DVNFeeLibMock.BlockTimeConfig[]", - "name": "_blockConfigs", - "type": "tuple[]", - "components": [ - { - "internalType": "uint32", - "name": "avgBlockTime", - "type": "uint32" - }, - { - "internalType": "uint64", - "name": "blockNum", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "timestamp", - "type": "uint64" - }, - { - "internalType": "uint32", - "name": "maxPastRetention", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "maxFutureRetention", - "type": "uint32" - } - ] - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setDstBlockTimeConfigs" - }, - { - "inputs": [ - { - "internalType": "struct DVNFeeLibMock.SetSupportedCmdTypesParam[]", - "name": "_params", - "type": "tuple[]", - "components": [ - { - "internalType": "uint32", - "name": "targetEid", - "type": "uint32" - }, - { - "internalType": "BitMap256", - "name": "types", - "type": "uint256" - } - ] - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setSupportedCmdTypes" - }, - { - "inputs": [ - { "internalType": "address", "name": "newOwner", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "transferOwnership" - }, - { - "inputs": [], - "stateMutability": "pure", - "type": "function", - "name": "version", - "outputs": [ - { "internalType": "uint64", "name": "major", "type": "uint64" }, - { "internalType": "uint8", "name": "minor", "type": "uint8" } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "_token", "type": "address" }, - { "internalType": "address", "name": "_to", "type": "address" }, - { "internalType": "uint256", "name": "_amount", "type": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "withdrawToken" - }, - { "inputs": [], "stateMutability": "payable", "type": "receive" } - ], - "devdoc": { - "kind": "dev", - "methods": { - "getFee((address,uint32,uint64,address,uint64,uint16),(uint64,uint16,uint128),bytes)": { - "details": "get fee view function", - "params": { - "": "//_options options", - "_dstConfig": "dst config", - "_params": "fee params" - } - }, - "getFeeOnSend((address,uint32,uint64,address,uint64,uint16),(uint64,uint16,uint128),bytes)": { - "details": "get fee function that can change state. e.g. paying priceFeed", - "params": { - "": "//_options options", - "_dstConfig": "dst config", - "_params": "fee params" - } - }, - "owner()": { "details": "Returns the address of the current owner." }, - "renounceOwnership()": { - "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner." - }, - "transferOwnership(address)": { - "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." - } - }, - "version": 1 - }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/DVNFeeLibMock.sol": "DVNFeeLibMock" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroPriceFeed.sol": { - "keccak256": "0xb4df72798a64f5ea44775b526e0c417c3de0ffc661659d7b31d5b28567c6fbcc", - "urls": [ - "bzz-raw://30ca5fd5e3227a7bffc51654ee3bfebdd591a131f86846ac42dea8a40c5cf1d8", - "dweb:/ipfs/QmXNmQCF8TZAFpUxgPa1rgWt4ktsBV38A8Hax7TiYLgybW" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IWorker.sol": { - "keccak256": "0xa6b61913767305227576cc6da5067de4208f09a4f58bfbfe32beafdfae9869b1", - "urls": [ - "bzz-raw://b7fce83bfb831f383606aee7f5ff68a330c8526bb1036f9ba0813d3e4fa8d534", - "dweb:/ipfs/QmR7zAqJkmCgBj6sguS8t2WthY5k6FwsakgH4UY11uqD4n" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IDVN.sol": { - "keccak256": "0x6becdfab6c1fcaf98f402bee48495895e54825f9d6eef6e292dde0caed628284", - "urls": [ - "bzz-raw://2273341033856737cd46704a1a769768feae696d0e7a912f5be9de8ffdd2180c", - "dweb:/ipfs/QmY1xBAmMX9jND1HAb7tDyZNPgFReXMqs1vtmHbShKZFQY" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IDVNFeeLib.sol": { - "keccak256": "0xed4a8e77148328132d8f4f2726c4aeec6b490cf03a1d5940bde0ab8d72954de9", - "urls": [ - "bzz-raw://7b07802ca32bf10f68e51da872fb358807446dc2242314374d226493a6e9e7dc", - "dweb:/ipfs/QmfSwWPLgitDy2a9S3mCNBDk6kAcK9n186Dtvj7qg84i12" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/ILayerZeroDVN.sol": { - "keccak256": "0x308e77078242fd5c5746ec29c12e618249134f9e4377c0028ab8f59c07a6014b", - "urls": [ - "bzz-raw://2f92cf397a8d26864ac92dfcd1b98e92a32c47f556a62c5e6dc1618734c1caa3", - "dweb:/ipfs/QmXN3XJXEKq5djV6HeM6jrLycmJPFhMhecsYZ2TaRsQmhg" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/ILayerZeroReadDVN.sol": { - "keccak256": "0x759a3ee7614c2de54b152b0278845f91ac9760d8c22045b2fee89e3e744402b8", - "urls": [ - "bzz-raw://7a2dbf6bcf5bfab408f18c104b34c390e8bfabb0eeb1a10e3a9c0fb14c8c61d5", - "dweb:/ipfs/QmWxmRbDBkbhGmNsRyXqQXB1QaWRS4qvh6a8achh8DQPKR" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/DVNOptions.sol": { - "keccak256": "0x2beee03cdf59a9bc72e94d08b69cb2e908725f4ceabb48651494938100e21e35", - "urls": [ - "bzz-raw://d88e121a39e74309f3575417df2318e2d2ee8bc8314e68dbf78544a9c393b141", - "dweb:/ipfs/QmRojBRAyENK21HnjevAWeoZZxtWkYZubB9Y78vCJPYeU6" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/ReadCmdCodecV1.sol": { - "keccak256": "0x52fbab4a114ce9defb2ffd57c0a978eee438b2c232862f7e20475e0dcadd4eda", - "urls": [ - "bzz-raw://a4d5d4e186e3f2a916ea02c2d1d0761069ab1a5c0d6f74719bbf3501a7ccb899", - "dweb:/ipfs/QmS2e12U9Fap2EK1CmSBTccL4PCKkHNdKJn2bXCqqKdbRn" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/SupportedCmdTypes.sol": { - "keccak256": "0x6b2534522c163714e499041ecd06aaeb93857373cef82cf2752f162bb7c69f9a", - "urls": [ - "bzz-raw://bf6c3545c3b9505692dbfaa29b40cab5ed9dc9b65e5804b6f47b5a76596120e9", - "dweb:/ipfs/QmNs98oRaMvpYhLCQ5yU256eYNEopFTrLRjjwm3gL4foQ3" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/CalldataBytesLib.sol": { - "keccak256": "0x5c0db161cef6603c3b256d4220f489419e7478ef775e52a80056654129c61875", - "urls": [ - "bzz-raw://a33245d0fdd3992bb56b31d1840108d36bb46c8d617b659ef1af8dd7ed86302d", - "dweb:/ipfs/QmWyBqT7Tdrfn5zz9xYM3V1PBtfAZAVwwCrrKwwfi3wMQK" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Transfer.sol": { - "keccak256": "0x621d6dd5b8b7e827351459fff4ac87c16ba4656757592cf67de8b199aea4cf9a", - "urls": [ - "bzz-raw://345aa8c007ed8b96a74260d289545713f1d7180df270d67687e3a540a61fa5c0", - "dweb:/ipfs/QmNWCvpqSuar6UGLDVshUc7shUv3pt1J5FTf9VyZZ13wXL" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/BitMaps.sol": { - "keccak256": "0xaad3c72ef43480d2253fd48b394e8fb7286d009991d2bc4e61be58ce48ac5ee9", - "urls": [ - "bzz-raw://b8c02b14f954416ba2148b389c87da8378ac8dd16ba3d458cbbfba8b0fd8639f", - "dweb:/ipfs/Qmd2EEQhYL2VmgJi1V4uiHM2WcYxF9iBtxSgcFkbS21rQD" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/DVNFeeLibMock.sol": { - "keccak256": "0x4c2e212f73a1c2a2989af947eef715ebacb11a80d55e5fd18a89a905790971b1", - "urls": [ - "bzz-raw://30eb29a81414780828903f5320367e89020af5a4055b768e2be08d43605b1688", - "dweb:/ipfs/QmeC5bVtmaY6tn6Z2XpVFXAkxVWQCQUzKbP2V9nPdv3vCr" - ], - "license": "LZBL-1.2" - }, - "node_modules/@openzeppelin/contracts/access/Ownable.sol": { - "keccak256": "0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb", - "urls": [ - "bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6", - "dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol": { - "keccak256": "0x9b6b3e7803bc5f2f8cd7ad57db8ac1def61a9930a5a3107df4882e028a9605d7", - "urls": [ - "bzz-raw://da62d6be1f5c6edf577f0cb45666a8aa9c2086a4bac87d95d65f02e2f4c36a4b", - "dweb:/ipfs/QmNkpvBpoCMvX8JwAFNSc5XxJ2q5BXJpL5L1txb4QkqVFF" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/interfaces/IERC165.sol": { - "keccak256": "0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724", - "urls": [ - "bzz-raw://11fea9f8bc98949ac6709f0c1699db7430d2948137aa94d5a9e95a91f61a710a", - "dweb:/ipfs/QmQdfRXxQjwP6yn3DVo1GHPpriKNcFghSPi94Z1oKEFUNS" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/interfaces/IERC20.sol": { - "keccak256": "0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c", - "urls": [ - "bzz-raw://a2608291cb038b388d80b79a06b6118a42f7894ff67b7da10ec0dbbf5b2973ba", - "dweb:/ipfs/QmWohqcBLbcxmA4eGPhZDXe5RYMMEEpFq22nfkaUMvTfw1" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol": { - "keccak256": "0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7", - "urls": [ - "bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db", - "dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol": { - "keccak256": "0xca2ae13e0610f6a99238dd00b97bd786bc92732dae6d6b9d61f573ec51018310", - "urls": [ - "bzz-raw://75f8c71ce0c91c40dd5f249ace0b7d8270f8f1767231bcf71490f7157d6ba862", - "dweb:/ipfs/QmYXgxeDyFHvz3JsXxLEYN6GNUR44ThHeFj5XkpkgMoG4w" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Address.sol": { - "keccak256": "0x9d8da059267bac779a2dbbb9a26c2acf00ca83085e105d62d5d4ef96054a47f5", - "urls": [ - "bzz-raw://c78e2aa4313323cecd1ef12a8d6265b96beee1a199923abf55d9a2a9e291ad23", - "dweb:/ipfs/QmUTs2KStXucZezzFo3EYeqYu47utu56qrF7jj1Gue65vb" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Context.sol": { - "keccak256": "0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2", - "urls": [ - "bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12", - "dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Errors.sol": { - "keccak256": "0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123", - "urls": [ - "bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf", - "dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol": { - "keccak256": "0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8", - "urls": [ - "bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621", - "dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL" - ], - "license": "MIT" - }, - "node_modules/solidity-bytes-utils/contracts/BytesLib.sol": { - "keccak256": "0xa5b10f04797d5a10a9ba07855108b6bd695940e6a3d128927b2f74a0d359868a", - "urls": [ - "bzz-raw://a38d7680aacbb18dae659876b396b73bcc8f759672213f8a0efc4129e2648535", - "dweb:/ipfs/QmfKFnwpTEGAnbRnZxMuv3mRCG9S9WMjFhFL23bftBT2Jq" - ], - "license": "Unlicense" - } - }, - "version": 1 - }, - "id": 72 -} diff --git a/examples/oft-movement/out/DVNMock.sol/DVNMock.json b/examples/oft-movement/out/DVNMock.sol/DVNMock.json deleted file mode 100644 index 71f49c0ac..000000000 --- a/examples/oft-movement/out/DVNMock.sol/DVNMock.json +++ /dev/null @@ -1,3088 +0,0 @@ -{ - "abi": [ - { - "type": "constructor", - "inputs": [ - { "name": "_localEidV2", "type": "uint32", "internalType": "uint32" }, - { "name": "_vid", "type": "uint32", "internalType": "uint32" }, - { - "name": "_messageLibs", - "type": "address[]", - "internalType": "address[]" - }, - { "name": "_priceFeed", "type": "address", "internalType": "address" }, - { - "name": "_signers", - "type": "address[]", - "internalType": "address[]" - }, - { "name": "_quorum", "type": "uint64", "internalType": "uint64" }, - { "name": "_admins", "type": "address[]", "internalType": "address[]" } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "DEFAULT_ADMIN_ROLE", - "inputs": [], - "outputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "allowlistSize", - "inputs": [], - "outputs": [{ "name": "", "type": "uint64", "internalType": "uint64" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "assignJob", - "inputs": [ - { - "name": "_param", - "type": "tuple", - "internalType": "struct ILayerZeroDVN.AssignJobParam", - "components": [ - { "name": "dstEid", "type": "uint32", "internalType": "uint32" }, - { - "name": "packetHeader", - "type": "bytes", - "internalType": "bytes" - }, - { - "name": "payloadHash", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "confirmations", - "type": "uint64", - "internalType": "uint64" - }, - { "name": "sender", "type": "address", "internalType": "address" } - ] - }, - { "name": "_options", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [ - { "name": "totalFee", "type": "uint256", "internalType": "uint256" } - ], - "stateMutability": "payable" - }, - { - "type": "function", - "name": "assignJob", - "inputs": [ - { "name": "_dstEid", "type": "uint16", "internalType": "uint16" }, - { "name": "", "type": "uint16", "internalType": "uint16" }, - { - "name": "_confirmations", - "type": "uint64", - "internalType": "uint64" - }, - { "name": "_sender", "type": "address", "internalType": "address" } - ], - "outputs": [ - { "name": "totalFee", "type": "uint256", "internalType": "uint256" } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "assignJob", - "inputs": [ - { "name": "_sender", "type": "address", "internalType": "address" }, - { "name": "", "type": "bytes", "internalType": "bytes" }, - { "name": "_cmd", "type": "bytes", "internalType": "bytes" }, - { "name": "_options", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [ - { "name": "fee", "type": "uint256", "internalType": "uint256" } - ], - "stateMutability": "payable" - }, - { - "type": "function", - "name": "defaultMultiplierBps", - "inputs": [], - "outputs": [{ "name": "", "type": "uint16", "internalType": "uint16" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "dstConfig", - "inputs": [ - { "name": "dstEid", "type": "uint32", "internalType": "uint32" } - ], - "outputs": [ - { "name": "gas", "type": "uint64", "internalType": "uint64" }, - { "name": "multiplierBps", "type": "uint16", "internalType": "uint16" }, - { - "name": "floorMarginUSD", - "type": "uint128", - "internalType": "uint128" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "execute", - "inputs": [ - { - "name": "_params", - "type": "tuple[]", - "internalType": "struct ExecuteParam[]", - "components": [ - { "name": "vid", "type": "uint32", "internalType": "uint32" }, - { "name": "target", "type": "address", "internalType": "address" }, - { "name": "callData", "type": "bytes", "internalType": "bytes" }, - { - "name": "expiration", - "type": "uint256", - "internalType": "uint256" - }, - { "name": "signatures", "type": "bytes", "internalType": "bytes" } - ] - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "getFee", - "inputs": [ - { "name": "_dstEid", "type": "uint32", "internalType": "uint32" }, - { - "name": "_confirmations", - "type": "uint64", - "internalType": "uint64" - }, - { "name": "_sender", "type": "address", "internalType": "address" }, - { "name": "_options", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [ - { "name": "fee", "type": "uint256", "internalType": "uint256" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getFee", - "inputs": [ - { "name": "_dstEid", "type": "uint16", "internalType": "uint16" }, - { "name": "", "type": "uint16", "internalType": "uint16" }, - { - "name": "_confirmations", - "type": "uint64", - "internalType": "uint64" - }, - { "name": "_sender", "type": "address", "internalType": "address" } - ], - "outputs": [ - { "name": "fee", "type": "uint256", "internalType": "uint256" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getFee", - "inputs": [ - { "name": "_sender", "type": "address", "internalType": "address" }, - { "name": "", "type": "bytes", "internalType": "bytes" }, - { "name": "_cmd", "type": "bytes", "internalType": "bytes" }, - { "name": "_options", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [ - { "name": "fee", "type": "uint256", "internalType": "uint256" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getRoleAdmin", - "inputs": [ - { "name": "role", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getSupportedOptionTypes", - "inputs": [ - { "name": "_eid", "type": "uint32", "internalType": "uint32" } - ], - "outputs": [{ "name": "", "type": "uint8[]", "internalType": "uint8[]" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "grantRole", - "inputs": [ - { "name": "_role", "type": "bytes32", "internalType": "bytes32" }, - { "name": "_account", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "hasAcl", - "inputs": [ - { "name": "_sender", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "hasRole", - "inputs": [ - { "name": "role", "type": "bytes32", "internalType": "bytes32" }, - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "hashCallData", - "inputs": [ - { "name": "_vid", "type": "uint32", "internalType": "uint32" }, - { "name": "_target", "type": "address", "internalType": "address" }, - { "name": "_callData", "type": "bytes", "internalType": "bytes" }, - { "name": "_expiration", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "localEidV2", - "inputs": [], - "outputs": [{ "name": "", "type": "uint32", "internalType": "uint32" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "paused", - "inputs": [], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "priceFeed", - "inputs": [], - "outputs": [{ "name": "", "type": "address", "internalType": "address" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "quorum", - "inputs": [], - "outputs": [{ "name": "", "type": "uint64", "internalType": "uint64" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "quorumChangeAdmin", - "inputs": [ - { - "name": "_param", - "type": "tuple", - "internalType": "struct ExecuteParam", - "components": [ - { "name": "vid", "type": "uint32", "internalType": "uint32" }, - { "name": "target", "type": "address", "internalType": "address" }, - { "name": "callData", "type": "bytes", "internalType": "bytes" }, - { - "name": "expiration", - "type": "uint256", - "internalType": "uint256" - }, - { "name": "signatures", "type": "bytes", "internalType": "bytes" } - ] - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "renounceRole", - "inputs": [ - { "name": "", "type": "bytes32", "internalType": "bytes32" }, - { "name": "", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "revokeRole", - "inputs": [ - { "name": "_role", "type": "bytes32", "internalType": "bytes32" }, - { "name": "_account", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setDefaultMultiplierBps", - "inputs": [ - { "name": "_multiplierBps", "type": "uint16", "internalType": "uint16" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setDstConfig", - "inputs": [ - { - "name": "_params", - "type": "tuple[]", - "internalType": "struct IDVN.DstConfigParam[]", - "components": [ - { "name": "dstEid", "type": "uint32", "internalType": "uint32" }, - { "name": "gas", "type": "uint64", "internalType": "uint64" }, - { - "name": "multiplierBps", - "type": "uint16", - "internalType": "uint16" - }, - { - "name": "floorMarginUSD", - "type": "uint128", - "internalType": "uint128" - } - ] - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setPaused", - "inputs": [{ "name": "_paused", "type": "bool", "internalType": "bool" }], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setPriceFeed", - "inputs": [ - { "name": "_priceFeed", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setQuorum", - "inputs": [ - { "name": "_quorum", "type": "uint64", "internalType": "uint64" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setSigner", - "inputs": [ - { "name": "_signer", "type": "address", "internalType": "address" }, - { "name": "_active", "type": "bool", "internalType": "bool" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setSupportedOptionTypes", - "inputs": [ - { "name": "_eid", "type": "uint32", "internalType": "uint32" }, - { "name": "_optionTypes", "type": "uint8[]", "internalType": "uint8[]" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setWorkerFeeLib", - "inputs": [ - { - "name": "_workerFeeLib", - "type": "address", - "internalType": "address" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "signerSize", - "inputs": [], - "outputs": [{ "name": "", "type": "uint64", "internalType": "uint64" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "signers", - "inputs": [ - { "name": "signer", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "active", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "supportsInterface", - "inputs": [ - { "name": "interfaceId", "type": "bytes4", "internalType": "bytes4" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "usedHashes", - "inputs": [ - { - "name": "executableHash", - "type": "bytes32", - "internalType": "bytes32" - } - ], - "outputs": [{ "name": "used", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "verifySignatures", - "inputs": [ - { "name": "_hash", "type": "bytes32", "internalType": "bytes32" }, - { "name": "_signatures", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [ - { "name": "", "type": "bool", "internalType": "bool" }, - { - "name": "", - "type": "uint8", - "internalType": "enum MultiSigMock.Errors" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "vid", - "inputs": [], - "outputs": [{ "name": "", "type": "uint32", "internalType": "uint32" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "withdrawFee", - "inputs": [ - { "name": "_lib", "type": "address", "internalType": "address" }, - { "name": "_to", "type": "address", "internalType": "address" }, - { "name": "_amount", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "withdrawFeeFromUlnV2", - "inputs": [ - { "name": "_lib", "type": "address", "internalType": "address" }, - { "name": "_to", "type": "address", "internalType": "address payable" }, - { "name": "_amount", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "withdrawToken", - "inputs": [ - { "name": "_token", "type": "address", "internalType": "address" }, - { "name": "_to", "type": "address", "internalType": "address" }, - { "name": "_amount", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "workerFeeLib", - "inputs": [], - "outputs": [{ "name": "", "type": "address", "internalType": "address" }], - "stateMutability": "view" - }, - { - "type": "event", - "name": "ExecuteFailed", - "inputs": [ - { - "name": "_index", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - }, - { - "name": "_data", - "type": "bytes", - "indexed": false, - "internalType": "bytes" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "HashAlreadyUsed", - "inputs": [ - { - "name": "param", - "type": "tuple", - "indexed": false, - "internalType": "struct ExecuteParam", - "components": [ - { "name": "vid", "type": "uint32", "internalType": "uint32" }, - { "name": "target", "type": "address", "internalType": "address" }, - { "name": "callData", "type": "bytes", "internalType": "bytes" }, - { - "name": "expiration", - "type": "uint256", - "internalType": "uint256" - }, - { "name": "signatures", "type": "bytes", "internalType": "bytes" } - ] - }, - { - "name": "_hash", - "type": "bytes32", - "indexed": false, - "internalType": "bytes32" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "Paused", - "inputs": [ - { - "name": "account", - "type": "address", - "indexed": false, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "RoleAdminChanged", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "indexed": true, - "internalType": "bytes32" - }, - { - "name": "previousAdminRole", - "type": "bytes32", - "indexed": true, - "internalType": "bytes32" - }, - { - "name": "newAdminRole", - "type": "bytes32", - "indexed": true, - "internalType": "bytes32" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "RoleGranted", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "indexed": true, - "internalType": "bytes32" - }, - { - "name": "account", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "sender", - "type": "address", - "indexed": true, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "RoleRevoked", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "indexed": true, - "internalType": "bytes32" - }, - { - "name": "account", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "sender", - "type": "address", - "indexed": true, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "SetDefaultMultiplierBps", - "inputs": [ - { - "name": "multiplierBps", - "type": "uint16", - "indexed": false, - "internalType": "uint16" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "SetDstConfig", - "inputs": [ - { - "name": "params", - "type": "tuple[]", - "indexed": false, - "internalType": "struct IDVN.DstConfigParam[]", - "components": [ - { "name": "dstEid", "type": "uint32", "internalType": "uint32" }, - { "name": "gas", "type": "uint64", "internalType": "uint64" }, - { - "name": "multiplierBps", - "type": "uint16", - "internalType": "uint16" - }, - { - "name": "floorMarginUSD", - "type": "uint128", - "internalType": "uint128" - } - ] - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "SetPriceFeed", - "inputs": [ - { - "name": "priceFeed", - "type": "address", - "indexed": false, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "SetSupportedOptionTypes", - "inputs": [ - { - "name": "dstEid", - "type": "uint32", - "indexed": false, - "internalType": "uint32" - }, - { - "name": "optionTypes", - "type": "uint8[]", - "indexed": false, - "internalType": "uint8[]" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "SetWorkerLib", - "inputs": [ - { - "name": "workerLib", - "type": "address", - "indexed": false, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "Unpaused", - "inputs": [ - { - "name": "account", - "type": "address", - "indexed": false, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "UpdateQuorum", - "inputs": [ - { - "name": "_quorum", - "type": "uint64", - "indexed": false, - "internalType": "uint64" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "UpdateSigner", - "inputs": [ - { - "name": "_signer", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "_active", - "type": "bool", - "indexed": false, - "internalType": "bool" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "VerifierFeePaid", - "inputs": [ - { - "name": "fee", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "VerifySignaturesFailed", - "inputs": [ - { - "name": "idx", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "Withdraw", - "inputs": [ - { - "name": "lib", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "to", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "amount", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { "type": "error", "name": "AccessControlBadConfirmation", "inputs": [] }, - { - "type": "error", - "name": "AccessControlUnauthorizedAccount", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" }, - { "name": "neededRole", "type": "bytes32", "internalType": "bytes32" } - ] - }, - { - "type": "error", - "name": "DVN_DuplicatedHash", - "inputs": [ - { - "name": "executableHash", - "type": "bytes32", - "internalType": "bytes32" - } - ] - }, - { "type": "error", "name": "DVN_InstructionExpired", "inputs": [] }, - { - "type": "error", - "name": "DVN_InvalidRole", - "inputs": [ - { "name": "role", "type": "bytes32", "internalType": "bytes32" } - ] - }, - { "type": "error", "name": "DVN_InvalidSignatures", "inputs": [] }, - { - "type": "error", - "name": "DVN_InvalidTarget", - "inputs": [ - { "name": "target", "type": "address", "internalType": "address" } - ] - }, - { - "type": "error", - "name": "DVN_InvalidVid", - "inputs": [{ "name": "vid", "type": "uint32", "internalType": "uint32" }] - }, - { "type": "error", "name": "DVN_OnlySelf", "inputs": [] }, - { "type": "error", "name": "EnforcedPause", "inputs": [] }, - { "type": "error", "name": "ExpectedPause", "inputs": [] }, - { "type": "error", "name": "MultiSig_OnlySigner", "inputs": [] }, - { "type": "error", "name": "MultiSig_QuorumIsZero", "inputs": [] }, - { - "type": "error", - "name": "MultiSig_SignersSizeIsLessThanQuorum", - "inputs": [ - { "name": "signersSize", "type": "uint64", "internalType": "uint64" }, - { "name": "quorum", "type": "uint64", "internalType": "uint64" } - ] - }, - { - "type": "error", - "name": "MultiSig_StateAlreadySet", - "inputs": [ - { "name": "signer", "type": "address", "internalType": "address" }, - { "name": "active", "type": "bool", "internalType": "bool" } - ] - }, - { "type": "error", "name": "MultiSig_UnorderedSigners", "inputs": [] }, - { - "type": "error", - "name": "SafeERC20FailedOperation", - "inputs": [ - { "name": "token", "type": "address", "internalType": "address" } - ] - }, - { - "type": "error", - "name": "Transfer_NativeFailed", - "inputs": [ - { "name": "_to", "type": "address", "internalType": "address" }, - { "name": "_value", "type": "uint256", "internalType": "uint256" } - ] - }, - { "type": "error", "name": "Transfer_ToAddressIsZero", "inputs": [] }, - { "type": "error", "name": "Worker_NotAllowed", "inputs": [] }, - { "type": "error", "name": "Worker_OnlyMessageLib", "inputs": [] }, - { "type": "error", "name": "Worker_RoleRenouncingDisabled", "inputs": [] } - ], - "bytecode": { - "object": "0x60c06040523480156200001157600080fd5b5060405162003bf738038062003bf78339810160408190526200003491620004de565b6001805460ff61ffff60e81b01191661017760ed1b179055600280546001600160a01b0319166001600160a01b03861617905582828686612ee060008660005b8551811015620000d657620000cc7f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de878381518110620000b857620000b8620005c2565b60200260200101516200028060201b60201c565b5060010162000074565b5060005b815181101562000128576200011e7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775838381518110620000b857620000b8620005c2565b50600101620000da565b505050505050806001600160401b03166000036200015957604051635f86e17760e01b815260040160405180910390fd5b806001600160401b0316825110156200019f5781516040516378e2c15760e11b81526001600160401b039182166004820152908216602482015260440160405180910390fd5b6000805b835181101562000231576000848281518110620001c457620001c4620005c2565b60200260200101519050826001600160a01b0316816001600160a01b03161162000201576040516305fa937f60e11b815260040160405180910390fd5b6001600160a01b0381166000908152600460205260409020805460ff1916600190811790915590925001620001a3565b50509051600580546001600160401b0393841668010000000000000000026001600160801b0319909116939092169290921717905550505063ffffffff92831660805250501660a05262000615565b60007f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca83148015620002d357506000838152602081815260408083206001600160a01b038616845290915290205460ff16155b15620003205760018054601590620002fb90600160a81b90046001600160401b0316620005d8565b91906101000a8154816001600160401b0302191690836001600160401b031602179055505b6200032c838362000338565b50600190505b92915050565b6000828152602081815260408083206001600160a01b038516845290915281205460ff16620003dd576000838152602081815260408083206001600160a01b03861684529091529020805460ff19166001179055620003943390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600162000332565b50600062000332565b805163ffffffff81168114620003fb57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b80516001600160a01b0381168114620003fb57600080fd5b600082601f8301126200044057600080fd5b815160206001600160401b03808311156200045f576200045f62000400565b8260051b604051601f19603f8301168101818110848211171562000487576200048762000400565b6040529384526020818701810194908101925087851115620004a857600080fd5b6020870191505b84821015620004d357620004c38262000416565b83529183019190830190620004af565b979650505050505050565b600080600080600080600060e0888a031215620004fa57600080fd5b6200050588620003e6565b96506200051560208901620003e6565b60408901519096506001600160401b03808211156200053357600080fd5b620005418b838c016200042e565b96506200055160608b0162000416565b955060808a01519150808211156200056857600080fd5b620005768b838c016200042e565b945060a08a0151915080821682146200058e57600080fd5b60c08a015191935080821115620005a457600080fd5b50620005b38a828b016200042e565b91505092959891949750929550565b634e487b7160e01b600052603260045260246000fd5b60006001600160401b038281166002600160401b031981016200060b57634e487b7160e01b600052601160045260246000fd5b6001019392505050565b60805160a0516135a0620006576000396000818161081d01528181611d5a0152611e8f01526000818161076d015281816112b00152611b9801526135a06000f3fe6080604052600436106102505760003560e01c806395d376d711610139578063cd88b903116100b6578063e395eb5c1161007a578063e395eb5c1461080b578063f010cb231461083f578063f3b4ebd01461085f578063f42ed2ed1461087f578063fd62e75014610892578063fdb9b0f1146108b257600080fd5b8063cd88b9031461073b578063cf34c7681461075b578063d2ae2104146107a4578063d547741f146107cb578063dafe0ccc146107eb57600080fd5b8063c358de0a116100fd578063c358de0a14610688578063c416aa51146106a8578063c5e193cd146106cd578063c7a823e0146106ed578063c7b2370b1461071b57600080fd5b806395d376d71461058b5780639e9449651461059e578063a217fddf14610623578063aef18bf714610638578063b143044b1461066857600080fd5b806330bb3aac116101d25780635c975abb116101965780635c975abb146104ab578063724e78da146104c3578063736c0d5b146104e3578063741bef1a146105135780638585c9451461054b57806391d148541461056b57600080fd5b806330bb3aac1461040b57806331cb61051461042b57806336568abe1461044b57806352d3b8711461046b5780635553fb8e1461048b57600080fd5b80631703a018116102195780631703a01814610321578063248a9ca31461036057806326e67a371461039e5780632de11376146103cb5780632f2ff15d146103eb57600080fd5b8062bf2e801461025557806301e336671461028f57806301ffc9a7146102b15780631095b6d7146102e157806316c38b3c14610301575b600080fd5b34801561026157600080fd5b5060015461027790600160e81b900461ffff1681565b60405161ffff90911681526020015b60405180910390f35b34801561029b57600080fd5b506102af6102aa366004612893565b6108d2565b005b3480156102bd57600080fd5b506102d16102cc3660046128d4565b6108fb565b6040519015158152602001610286565b3480156102ed57600080fd5b506102af6102fc366004612893565b610932565b34801561030d57600080fd5b506102af61031c366004612915565b610a34565b34801561032d57600080fd5b5060055461034890600160401b90046001600160401b031681565b6040516001600160401b039091168152602001610286565b34801561036c57600080fd5b5061039061037b366004612930565b60009081526020819052604090206001015490565b604051908152602001610286565b3480156103aa57600080fd5b506103be6103b936600461295d565b610a59565b6040516102869190612978565b3480156103d757600080fd5b506102d16103e63660046129bf565b610ae0565b3480156103f757600080fd5b506102af6104063660046129dc565b610b65565b34801561041757600080fd5b50610390610426366004612a6b565b610c3a565b34801561043757600080fd5b506102af610446366004612ae2565b610d52565b34801561045757600080fd5b506102af6104663660046129dc565b610d7c565b34801561047757600080fd5b506102af610486366004612b17565b610d95565b34801561049757600080fd5b506103906104a6366004612b9d565b610f0e565b3480156104b757600080fd5b5060015460ff166102d1565b3480156104cf57600080fd5b506102af6104de3660046129bf565b611026565b3480156104ef57600080fd5b506102d16104fe3660046129bf565b60046020526000908152604090205460ff1681565b34801561051f57600080fd5b50600254610533906001600160a01b031681565b6040516001600160a01b039091168152602001610286565b34801561055757600080fd5b506102af610566366004612bf3565b611094565b34801561057757600080fd5b506102d16105863660046129dc565b6110c0565b610390610599366004612c26565b6110e9565b3480156105aa57600080fd5b506105f26105b936600461295d565b6006602052600090815260409020546001600160401b03811690600160401b810461ffff1690600160501b90046001600160801b031683565b604080516001600160401b03909416845261ffff90921660208401526001600160801b031690820152606001610286565b34801561062f57600080fd5b50610390600081565b34801561064457600080fd5b506102d1610653366004612930565b60076020526000908152604090205460ff1681565b34801561067457600080fd5b506102af610683366004612cd2565b61125f565b34801561069457600080fd5b506102af6106a3366004612d13565b611514565b3480156106b457600080fd5b506001546105339061010090046001600160a01b031681565b3480156106d957600080fd5b506103906106e8366004612b9d565b61157c565b3480156106f957600080fd5b5061070d610708366004612d2e565b6116e9565b604051610286929190612d82565b34801561072757600080fd5b506102af6107363660046129bf565b6118c7565b34801561074757600080fd5b506102af610756366004612db6565b611935565b34801561076757600080fd5b5061078f7f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff9091168152602001610286565b3480156107b057600080fd5b5060015461034890600160a81b90046001600160401b031681565b3480156107d757600080fd5b506102af6107e63660046129dc565b611974565b3480156107f757600080fd5b506102af610806366004612893565b611a28565b34801561081757600080fd5b5061078f7f000000000000000000000000000000000000000000000000000000000000000081565b34801561084b57600080fd5b5061039061085a366004612dfb565b611add565b34801561086b57600080fd5b506102af61087a366004612e65565b611b19565b61039061088d366004612ea1565b611cc7565b34801561089e57600080fd5b50600554610348906001600160401b031681565b3480156108be57600080fd5b506103906108cd366004612ea1565b611e14565b60008051602061352b8339815191526108ea81611f45565b6108f5848484611f4f565b50505050565b60006001600160e01b03198216637965db0b60e01b148061092c57506301ffc9a760e01b6001600160e01b03198316145b92915050565b60008051602061352b83398151915261094a81611f45565b61096260008051602061350b833981519152856110c0565b61097f57604051635ee08b9760e01b815260040160405180910390fd5b604051637ecdf29160e11b81526001600160a01b0384811660048301526024820184905285169063fd9be52290604401600060405180830381600087803b1580156109c957600080fd5b505af11580156109dd573d6000803e3d6000fd5b5050604080516001600160a01b038089168252871660208201529081018590527f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb925060600190505b60405180910390a150505050565b6000610a3f81611f45565b8115610a5157610a4d611f77565b5050565b610a4d611fcb565b63ffffffff8116600090815260036020908152604091829020805483518184028101840190945280845260609392830182828015610ad457602002820191906000526020600020906000905b825461010083900a900460ff16815260206001928301818104948501949093039092029101808411610aa55790505b50505050509050919050565b6000610b0c7f4270fae16c6d150d00e80b689daca99e8073b1838ff2b6063a37be9d851283e4836110c0565b15610b1957506000919050565b600154600160a81b90046001600160401b03161580610b4b5750610b4b60008051602061354b833981519152836110c0565b15610b5857506001919050565b506000919050565b919050565b8160008051602061354b833981519152811480610ba157507f4270fae16c6d150d00e80b689daca99e8073b1838ff2b6063a37be9d851283e481145b80610bb9575060008051602061350b83398151915281145b15610be357303314610bde57604051637d5d391d60e11b815260040160405180910390fd5b610c30565b60008051602061352b8339815191528103610c0f57610bde60008051602061352b833981519152611f45565b604051634a7ee1b960e11b8152600481018290526024015b60405180910390fd5b6108f58383612004565b600083610c4681610ae0565b610c6357604051634ab5ebcd60e01b815260040160405180910390fd5b6040805160c0810182526002546001600160a01b03908116825263ffffffff8a1660208084018290526001600160401b03808c16858701528a84166060860152600554600160401b900416608085015260015461ffff600160e81b82041660a086015260009283526006909152908490209351637bfa20a960e01b8152929361010090910490911691637bfa20a991610d05918591908a908a90600401613004565b602060405180830381865afa158015610d22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d469190613034565b98975050505050505050565b303314610d7257604051637d5d391d60e11b815260040160405180910390fd5b610a4d8282612088565b60405163dec9f03160e01b815260040160405180910390fd5b60008051602061352b833981519152610dad81611f45565b60005b82811015610ecf5736848483818110610dcb57610dcb61304d565b90506080020190506040518060600160405280826020016020810190610df19190612bf3565b6001600160401b03168152602001610e0f6060840160408501612d13565b61ffff168152602001610e28608084016060850161307a565b6001600160801b0316905260066000610e44602085018561295d565b63ffffffff1681526020808201929092526040908101600020835181549385015194909201516001600160801b0316600160501b026fffffffffffffffffffffffffffffffff60501b1961ffff909516600160401b0269ffffffffffffffffffff199094166001600160401b0390931692909217929092179290921691909117905550600101610db0565b507f7dd21e42791b013d1929e86f0c59085e4fca24251f0f1aa81917b3b1611766e08383604051610f01929190613095565b60405180910390a1505050565b600081610f1a81610ae0565b610f3757604051634ab5ebcd60e01b815260040160405180910390fd5b6040805160c0810182526002546001600160a01b03908116825261ffff808a1660208085018290526001600160401b03808b16868801528985166060870152600554600160401b9004166080860152600154600160e81b810490931660a0860152600091825260068152858220865191820187529181529451637bfa20a960e01b8152939461010090920490921692637bfa20a992610fda92869260040161316f565b602060405180830381865afa158015610ff7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061101b9190613034565b979650505050505050565b60008051602061352b83398151915261103e81611f45565b600280546001600160a01b0319166001600160a01b0384169081179091556040519081527ff724a45d041687842411f2b977ef22ab8f43c8f1104f4592b42a00f9b34a643d906020015b60405180910390a15050565b3033146110b457604051637d5d391d60e11b815260040160405180910390fd5b6110bd816121e3565b50565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b600060008051602061350b83398151915261110381611f45565b61111360a08601608087016129bf565b61111c81610ae0565b61113957604051634ab5ebcd60e01b815260040160405180910390fd5b6040805160c081019091526002546001600160a01b03168152600090602080820190611167908a018a61295d565b63ffffffff16815260200161118260808a0160608b01612bf3565b6001600160401b031681526020016111a060a08a0160808b016129bf565b6001600160a01b039081168252600554600160401b90046001600160401b0316602080840191909152600154600160e81b810461ffff16604090940193909352929350610100909104169063df2b057e908390600690600090611205908d018d61295d565b63ffffffff1663ffffffff16815260200190815260200160002089896040518563ffffffff1660e01b81526004016112409493929190613004565b6020604051808303816000875af1158015610ff7573d6000803e3d6000fd5b60008051602061352b83398151915261127781611f45565b60005b828110156108f557368484838181106112955761129561304d565b90506020028101906112a791906131a8565b905063ffffffff7f0000000000000000000000000000000000000000000000000000000000000000166112dd602083018361295d565b63ffffffff16146112ee575061150c565b428160600135116112ff575061150c565b6000611338611311602084018461295d565b61132160408501602086016129bf565b61132e60408601866131c8565b8660600135611add565b9050600061134d8261070860808601866131c8565b50905080611390576040518481527fd6d90193101048cc1b6edcdc2348f5acf7a4a4a97d3e7b668b74cb7602ab3ebc9060200160405180910390a150505061150c565b60006113b06113a260408601866131c8565b6113ab9161320e565b6122b1565b9050801561142b5760008381526007602052604090205460ff1615611411577f9bb9bddbdf537a2104255307230b323d7982f4512ee8e5bd15df62ddca50ab978484604051611400929190613283565b60405180910390a15050505061150c565b6000838152600760205260409020805460ff191660011790555b60008061143e60408701602088016129bf565b6001600160a01b031661145460408801886131c8565b60405161146292919061331e565b6000604051808303816000865af19150503d806000811461149f576040519150601f19603f3d011682016040523d82523d6000602084013e6114a4565b606091505b5091509150816115055782156114cb576000858152600760205260409020805460ff191690555b7fdc8cdd96296241bbefda4a8e18ad2e0985a8da6495b34d409cfc4c886ee3b0cf87826040516114fc92919061332e565b60405180910390a15b5050505050505b60010161127a565b60008051602061352b83398151915261152c81611f45565b6001805461ffff60e81b1916600160e81b61ffff8516908102919091179091556040519081527f7af0ac740036ffb1c97b03697859d729e80a44ae5030543d64971c313565ab4d90602001611088565b600060008051602061350b83398151915261159681611f45565b826115a081610ae0565b6115bd57604051634ab5ebcd60e01b815260040160405180910390fd5b6040805160c0810182526002546001600160a01b03908116825261ffff808b1660208085018290526001600160401b03808c16868801528a85166060870152600554600160401b9004166080860152600154600160e81b810490931660a0860152600091825260068152858220865191820187529181529451636f9582bf60e11b815293946101009092049092169263df2b057e9261166092869260040161316f565b6020604051808303816000875af115801561167f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116a39190613034565b93507f87e46b0a6199bc734632187269a103c05714ee0adae5b28f30723955724f37ef846040516116d691815260200190565b60405180910390a1505050949350505050565b600554600090819061170c90600160401b90046001600160401b0316604161335d565b831461171e57506000905060016118bf565b6000611777866040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b90506000805b600554600160401b90046001600160401b03168110156118b35736600088886117a785604161335d565b906117b3866001613374565b6117be90604161335d565b926117cb93929190613387565b915091506000806118128785858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061230792505050565b509092509050600081600381111561182c5761182c612d6c565b14611845576000600198509850505050505050506118bf565b856001600160a01b0316826001600160a01b031611611872576000600298509850505050505050506118bf565b6001600160a01b03821660009081526004602052604090205460ff166118a6576000600398509850505050505050506118bf565b509350505060010161177d565b50600160009350935050505b935093915050565b60008051602061352b8339815191526118df81611f45565b60018054610100600160a81b0319166101006001600160a01b038516908102919091179091556040519081527f1399be28223800f8669b3ba5f8721d9fc16fc4e8d0bbf98378791c8c5a3015e090602001611088565b60008051602061352b83398151915261194d81611f45565b63ffffffff8416600090815260036020526040902061196d9084846127c0565b5050505050565b8160008051602061354b8339815191528114806119b057507f4270fae16c6d150d00e80b689daca99e8073b1838ff2b6063a37be9d851283e481145b806119c8575060008051602061350b83398151915281145b156119f2573033146119ed57604051637d5d391d60e11b815260040160405180910390fd5b611a1e565b60008051602061352b8339815191528103610c0f576119ed60008051602061352b833981519152611f45565b6108f58383612354565b60008051602061352b833981519152611a4081611f45565b611a5860008051602061350b833981519152856110c0565b611a7557604051635ee08b9760e01b815260040160405180910390fd5b6040516303d8c5ef60e11b81526001600160a01b038481166004830152602482018490528516906307b18bde90604401600060405180830381600087803b158015611abf57600080fd5b505af1158015611ad3573d6000803e3d6000fd5b5050505050505050565b60008585838686604051602001611af89594939291906133b1565b60405160208183030381529060405280519060200120905095945050505050565b42816060013511611b3d57604051630bbaf26360e01b815260040160405180910390fd5b30611b4e60408301602084016129bf565b6001600160a01b031614611b9157611b6c60408201602083016129bf565b604051631ce0bfcd60e01b81526001600160a01b039091166004820152602401610c27565b63ffffffff7f000000000000000000000000000000000000000000000000000000000000000016611bc5602083018361295d565b63ffffffff1614611bff57611bdd602082018261295d565b60405163134bf0e160e11b815263ffffffff9091166004820152602401610c27565b6000611c11611311602084018461295d565b90506000611c268261070860808601866131c8565b50905080611c4757604051630af656f760e11b815260040160405180910390fd5b60008281526007602052604090205460ff1615611c7a57604051634eb522d360e11b815260048101839052602401610c27565b60008281526007602052604090819020805460ff191660011790556108f59060008051602061352b83398151915290611cb5908601866131c8565b810190611cc291906129bf565b612004565b600060008051602061350b833981519152611ce181611f45565b88611ceb81610ae0565b611d0857604051634ab5ebcd60e01b815260040160405180910390fd5b604080516080810182526002546001600160a01b0390811682528c8116602080840191909152600554600160401b90046001600160401b031683850152600154600160e81b810461ffff1660608501527f000000000000000000000000000000000000000000000000000000000000000063ffffffff166000908152600690925290849020935163bbc5a33b60e01b815292936101009091049091169163bbc5a33b91611dc2918591908d908d908d908d906004016133f7565b6020604051808303816000875af1158015611de1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e059190613034565b9b9a5050505050505050505050565b600087611e2081610ae0565b611e3d57604051634ab5ebcd60e01b815260040160405180910390fd5b604080516080810182526002546001600160a01b0390811682528b8116602080840191909152600554600160401b90046001600160401b031683850152600154600160e81b810461ffff1660608501527f000000000000000000000000000000000000000000000000000000000000000063ffffffff166000908152600690925290849020935162d358b360e81b815292936101009091049091169163d358b30091611ef6918591908c908c908c908c906004016133f7565b602060405180830381865afa158015611f13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f379190613034565b9a9950505050505050505050565b6110bd81336123cc565b6001600160a01b038316611f6c57611f678282612405565b505050565b611f678383836124b2565b611f7f6124ed565b6001805460ff1916811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b6040516001600160a01b03909116815260200160405180910390a1565b611fd3612513565b6001805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33611fae565b600060008051602061354b8339815191528314801561202a575061202883836110c0565b155b15612074576001805460159061204f90600160a81b90046001600160401b031661347a565b91906101000a8154816001600160401b0302191690836001600160401b031602179055505b61207e8383612536565b5060019392505050565b6001600160a01b03821660009081526004602052604090205481151560ff9091161515036120dc576040516302c6469560e51b81526001600160a01b03831660048201528115156024820152604401610c27565b6001600160a01b0382166000908152600460205260408120805460ff1916831515179055816121225760055461211d906001906001600160401b03166134a0565b612139565b600554612139906001600160401b031660016134c7565b6005549091506001600160401b03600160401b9091048116908216811115612187576040516378e2c15760e11b81526001600160401b03808416600483015282166024820152604401610c27565b6005805467ffffffffffffffff19166001600160401b038416179055604080516001600160a01b038616815284151560208201527f863d338cad74814b108a06288ad5e0e80d56495e0332238b1d2cdcfa0ca8e5ce9101610a26565b806001600160401b031660000361220d57604051635f86e17760e01b815260040160405180910390fd5b6005546001600160401b03908116908216811015612251576040516378e2c15760e11b81526001600160401b03808316600483015283166024820152604401610c27565b600580546fffffffffffffffff00000000000000001916600160401b6001600160401b038516908102919091179091556040519081527fb600f3cf7f38a4b49bb0c75f722ef69f7e3e39ef3bb4aa8207fd86e724a2324990602001611088565b60006001600160e01b03198216630111a9b760e11b148015906122e557506001600160e01b0319821663ab750e7560e01b14155b801561092c57506001600160e01b0319821663704316e560e01b141592915050565b600080600083516041036123415760208401516040850151606086015160001a612333888285856125c8565b95509550955050505061234d565b50508151600091506002905b9250925092565b600060008051602061354b83398151915283148015612378575061237883836110c0565b156123c2576001805460159061239d90600160a81b90046001600160401b03166134e7565b91906101000a8154816001600160401b0302191690836001600160401b031602179055505b61207e8383612697565b6123d682826110c0565b610a4d5760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401610c27565b6001600160a01b03821661242c576040516306b7a93160e41b815260040160405180910390fd5b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612479576040519150601f19603f3d011682016040523d82523d6000602084013e61247e565b606091505b5050905080611f6757604051631196f20d60e21b81526001600160a01b038416600482015260248101839052604401610c27565b6001600160a01b0382166124d9576040516306b7a93160e41b815260040160405180910390fd5b611f676001600160a01b0384168383612702565b60015460ff16156125115760405163d93c066560e01b815260040160405180910390fd5b565b60015460ff1661251157604051638dfc202b60e01b815260040160405180910390fd5b600061254283836110c0565b6125c0576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556125783390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161092c565b50600061092c565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115612603575060009150600390508261268d565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015612657573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166126835750600092506001915082905061268d565b9250600091508190505b9450945094915050565b60006126a383836110c0565b156125c0576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161092c565b604080516001600160a01b03841660248201526044808201849052825180830390910181526064909101909152602080820180516001600160e01b031663a9059cbb60e01b1781528251611f67938793909260009283929183919082885af180612772576040513d6000823e3d81fd5b50506000513d9150811561278a578060011415612797565b6001600160a01b0384163b155b156108f557604051635274afe760e01b81526001600160a01b0385166004820152602401610c27565b82805482825590600052602060002090601f016020900481019282156128595791602002820160005b8382111561282a57833560ff1683826101000a81548160ff021916908360ff16021790555092602001926001016020816000010492830192600103026127e9565b80156128575782816101000a81549060ff021916905560010160208160000104928301926001030261282a565b505b50612865929150612869565b5090565b5b80821115612865576000815560010161286a565b6001600160a01b03811681146110bd57600080fd5b6000806000606084860312156128a857600080fd5b83356128b38161287e565b925060208401356128c38161287e565b929592945050506040919091013590565b6000602082840312156128e657600080fd5b81356001600160e01b0319811681146128fe57600080fd5b9392505050565b80358015158114610b6057600080fd5b60006020828403121561292757600080fd5b6128fe82612905565b60006020828403121561294257600080fd5b5035919050565b803563ffffffff81168114610b6057600080fd5b60006020828403121561296f57600080fd5b6128fe82612949565b6020808252825182820181905260009190848201906040850190845b818110156129b357835160ff1683529284019291840191600101612994565b50909695505050505050565b6000602082840312156129d157600080fd5b81356128fe8161287e565b600080604083850312156129ef57600080fd5b823591506020830135612a018161287e565b809150509250929050565b80356001600160401b0381168114610b6057600080fd5b60008083601f840112612a3557600080fd5b5081356001600160401b03811115612a4c57600080fd5b602083019150836020828501011115612a6457600080fd5b9250929050565b600080600080600060808688031215612a8357600080fd5b612a8c86612949565b9450612a9a60208701612a0c565b93506040860135612aaa8161287e565b925060608601356001600160401b03811115612ac557600080fd5b612ad188828901612a23565b969995985093965092949392505050565b60008060408385031215612af557600080fd5b8235612b008161287e565b9150612b0e60208401612905565b90509250929050565b60008060208385031215612b2a57600080fd5b82356001600160401b0380821115612b4157600080fd5b818501915085601f830112612b5557600080fd5b813581811115612b6457600080fd5b8660208260071b8501011115612b7957600080fd5b60209290920196919550909350505050565b803561ffff81168114610b6057600080fd5b60008060008060808587031215612bb357600080fd5b612bbc85612b8b565b9350612bca60208601612b8b565b9250612bd860408601612a0c565b91506060850135612be88161287e565b939692955090935050565b600060208284031215612c0557600080fd5b6128fe82612a0c565b600060a08284031215612c2057600080fd5b50919050565b600080600060408486031215612c3b57600080fd5b83356001600160401b0380821115612c5257600080fd5b612c5e87838801612c0e565b94506020860135915080821115612c7457600080fd5b50612c8186828701612a23565b9497909650939450505050565b60008083601f840112612ca057600080fd5b5081356001600160401b03811115612cb757600080fd5b6020830191508360208260051b8501011115612a6457600080fd5b60008060208385031215612ce557600080fd5b82356001600160401b03811115612cfb57600080fd5b612d0785828601612c8e565b90969095509350505050565b600060208284031215612d2557600080fd5b6128fe82612b8b565b600080600060408486031215612d4357600080fd5b8335925060208401356001600160401b03811115612d6057600080fd5b612c8186828701612a23565b634e487b7160e01b600052602160045260246000fd5b82151581526040810160048310612da957634e487b7160e01b600052602160045260246000fd5b8260208301529392505050565b600080600060408486031215612dcb57600080fd5b612dd484612949565b925060208401356001600160401b03811115612def57600080fd5b612c8186828701612c8e565b600080600080600060808688031215612e1357600080fd5b612e1c86612949565b94506020860135612e2c8161287e565b935060408601356001600160401b03811115612e4757600080fd5b612e5388828901612a23565b96999598509660600135949350505050565b600060208284031215612e7757600080fd5b81356001600160401b03811115612e8d57600080fd5b612e9984828501612c0e565b949350505050565b60008060008060008060006080888a031215612ebc57600080fd5b8735612ec78161287e565b965060208801356001600160401b0380821115612ee357600080fd5b612eef8b838c01612a23565b909850965060408a0135915080821115612f0857600080fd5b612f148b838c01612a23565b909650945060608a0135915080821115612f2d57600080fd5b50612f3a8a828b01612a23565b989b979a50959850939692959293505050565b60018060a01b0380825116835263ffffffff602083015116602084015260408201516001600160401b03808216604086015282606085015116606086015280608085015116608086015250505061ffff60a08201511660a08301525050565b546001600160401b0381168252604081811c61ffff16602084015260509190911c6001600160801b0316910152565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60006101406130138388612f4d565b61302060c0840187612fac565b8061012084015261101b8184018587612fdb565b60006020828403121561304657600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b80356001600160801b0381168114610b6057600080fd5b60006020828403121561308c57600080fd5b6128fe82613063565b6020808252818101839052600090604080840186845b8781101561311c5763ffffffff6130c183612949565b1683526001600160401b036130d7868401612a0c565b168584015261ffff6130ea858401612b8b565b168484015260606001600160801b03613104828501613063565b169084015260809283019291909101906001016130ab565b5090979650505050505050565b6000815180845260005b8181101561314f57602081850181015186830182015201613133565b506000602082860101526020601f19601f83011685010191505092915050565b600061014061317e8387612f4d565b61318b60c0840186612fac565b8061012084015261319e81840185613129565b9695505050505050565b60008235609e198336030181126131be57600080fd5b9190910192915050565b6000808335601e198436030181126131df57600080fd5b8301803591506001600160401b038211156131f957600080fd5b602001915036819003821315612a6457600080fd5b6001600160e01b031981358181169160048510156132365780818660040360031b1b83161692505b505092915050565b6000808335601e1984360301811261325557600080fd5b83016020810192503590506001600160401b0381111561327457600080fd5b803603821315612a6457600080fd5b6040815263ffffffff61329584612949565b166040820152600060208401356132ab8161287e565b6001600160a01b031660608301526132c6604085018561323e565b60a060808501526132db60e085018284612fdb565b915050606085013560a08401526132f5608086018661323e565b848303603f190160c086015261330c838284612fdb565b93505050508260208301529392505050565b8183823760009101908152919050565b828152604060208201526000612e996040830184613129565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761092c5761092c613347565b8082018082111561092c5761092c613347565b6000808585111561339757600080fd5b838611156133a457600080fd5b5050820193919092039150565b63ffffffff60e01b8660e01b1681526bffffffffffffffffffffffff198560601b1660048201528360188201528183603883013760009101603801908152949350505050565b600061012060018060a01b03808a511684528060208b0151166020850152506001600160401b0360408a015116604084015261ffff60608a01511660608401526134446080840189612fac565b8060e08401526134578184018789612fdb565b905082810361010084015261346d818587612fdb565b9998505050505050505050565b60006001600160401b0380831681810361349657613496613347565b6001019392505050565b6001600160401b038281168282160390808211156134c0576134c0613347565b5092915050565b6001600160401b038181168382160190808211156134c0576134c0613347565b60006001600160401b0382168061350057613500613347565b600019019291505056fe724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19dea49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177574845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bcaa264697066735822122024327161ffb7d62bcb3e3b78be45b9ccbc1a11373295fe0f97bd10b71bcadb8164736f6c63430008160033", - "sourceMap": "825:14535:73:-:0;;;2374:379;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1231:7:120;:15;;-1:-1:-1;;;;;;1699:44:84;-1:-1:-1;;;1699:44:84;;;1753:9;:22;;-1:-1:-1;;;;;;1753:22:84;-1:-1:-1;;;;;1753:22:84;;;;;2673:8:73;2683:7;2608:12;1753:22:84;2634:5:73;-1:-1:-1;2655:7:73;1945:9:84;1940:120;1964:12;:19;1960:1;:23;1940:120;;;2004:45;654:29;2033:12;2046:1;2033:15;;;;;;;;:::i;:::-;;;;;;;2004:10;;;:45;;:::i;:::-;-1:-1:-1;1985:3:84;;1940:120;;;;2075:9;2070:104;2094:7;:14;2090:1;:18;2070:104;;;2129:34;858:23;2152:7;2160:1;2152:10;;;;;;;;:::i;2129:34::-;-1:-1:-1;2110:3:84;;2070:104;;;;1504:676;;;;;972:7:78;-1:-1:-1;;;;;972:12:78;983:1;972:12;968:73;;1007:23;;-1:-1:-1;;;1007:23:78;;;;;;;;;;;968:73;1072:7;-1:-1:-1;;;;;1054:25:78;:8;:15;:25;1050:133;;;1146:15;;1102:70;;-1:-1:-1;;;1102:70:78;;-1:-1:-1;;;;;3044:15:132;;;1102:70:78;;;3026:34:132;3096:15;;;3076:18;;;3069:43;2962:18;;1102:70:78;;;;;;;1050:133;1192:18;1238:9;1233:274;1257:8;:15;1253:1;:19;1233:274;;;1293:14;1310:8;1319:1;1310:11;;;;;;;;:::i;:::-;;;;;;;1293:28;;1349:10;-1:-1:-1;;;;;1339:20:78;:6;-1:-1:-1;;;;;1339:20:78;;1335:93;;1386:27;;-1:-1:-1;;;1386:27:78;;;;;;;;;;;1335:93;-1:-1:-1;;;;;1441:15:78;;;;;;:7;:15;;;;;:22;;-1:-1:-1;;1441:22:78;1459:4;1441:22;;;;;;1449:6;;-1:-1:-1;1274:3:78;1233:274;;;-1:-1:-1;;1536:15:78;;1516:10;:36;;-1:-1:-1;;;;;1562:16:78;;;;;-1:-1:-1;;;;;;1562:16:78;;;1516:36;;;;1562:16;;;;;;;-1:-1:-1;;;2702:10:73::2;::::0;;::::2;;::::0;-1:-1:-1;;2722:24:73::2;;::::0;825:14535;;5627:259:84;5707:4;727:22;5727:5;:18;:47;;;;-1:-1:-1;2931:4:105;2954:12;;;;;;;;;;;-1:-1:-1;;;;;2954:29:105;;;;;;;;;;;;5749:25:84;5727:47;5723:93;;;5792:13;5790:15;;5792:13;;5790:15;;-1:-1:-1;;;5790:15:84;;-1:-1:-1;;;;;5790:15:84;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;5790:15:84;;;;;-1:-1:-1;;;;;5790:15:84;;;;;;5723:93;5825:33;5842:5;5849:8;5825:16;:33::i;:::-;;5875:4;5868:11;;5627:259;;;;;:::o;6179:316:105:-;6256:4;2954:12;;;;;;;;;;;-1:-1:-1;;;;;2954:29:105;;;;;;;;;;;;6272:217;;6315:6;:12;;;;;;;;;;;-1:-1:-1;;;;;6315:29:105;;;;;;;;;:36;;-1:-1:-1;;6315:36:105;6347:4;6315:36;;;6397:12;735:10:117;;656:96;6397:12:105;-1:-1:-1;;;;;6370:40:105;6388:7;-1:-1:-1;;;;;6370:40:105;6382:4;6370:40;;;;;;;;;;-1:-1:-1;6431:4:105;6424:11;;6272:217;-1:-1:-1;6473:5:105;6466:12;;14:167:132;92:13;;145:10;134:22;;124:33;;114:61;;171:1;168;161:12;114:61;14:167;;;:::o;186:127::-;247:10;242:3;238:20;235:1;228:31;278:4;275:1;268:15;302:4;299:1;292:15;318:177;397:13;;-1:-1:-1;;;;;439:31:132;;429:42;;419:70;;485:1;482;475:12;500:929;565:5;618:3;611:4;603:6;599:17;595:27;585:55;;636:1;633;626:12;585:55;659:13;;691:4;-1:-1:-1;;;;;744:10:132;;;741:36;;;757:18;;:::i;:::-;803:2;800:1;796:10;835:2;829:9;898:2;894:7;889:2;885;881:11;877:25;869:6;865:38;953:6;941:10;938:22;933:2;921:10;918:18;915:46;912:72;;;964:18;;:::i;:::-;1000:2;993:22;1050:18;;;1096:4;1128:15;;;1124:26;;;1084:17;;;;-1:-1:-1;1162:15:132;;;1159:35;;;1190:1;1187;1180:12;1159:35;1226:4;1218:6;1214:17;1203:28;;1240:159;1256:6;1251:3;1248:15;1240:159;;;1322:34;1352:3;1322:34;:::i;:::-;1310:47;;1377:12;;;;1273;;;;1240:159;;;1417:6;500:929;-1:-1:-1;;;;;;;500:929:132:o;1434:1248::-;1630:6;1638;1646;1654;1662;1670;1678;1731:3;1719:9;1710:7;1706:23;1702:33;1699:53;;;1748:1;1745;1738:12;1699:53;1771:39;1800:9;1771:39;:::i;:::-;1761:49;;1829:48;1873:2;1862:9;1858:18;1829:48;:::i;:::-;1921:2;1906:18;;1900:25;1819:58;;-1:-1:-1;;;;;;1974:14:132;;;1971:34;;;2001:1;1998;1991:12;1971:34;2024:72;2088:7;2079:6;2068:9;2064:22;2024:72;:::i;:::-;2014:82;;2115:49;2160:2;2149:9;2145:18;2115:49;:::i;:::-;2105:59;;2210:3;2199:9;2195:19;2189:26;2173:42;;2240:2;2230:8;2227:16;2224:36;;;2256:1;2253;2246:12;2224:36;2279:74;2345:7;2334:8;2323:9;2319:24;2279:74;:::i;:::-;2269:84;;2396:3;2385:9;2381:19;2375:26;2362:39;;2441:2;2434:5;2430:14;2423:5;2420:25;2410:53;;2459:1;2456;2449:12;2410:53;2533:3;2518:19;;2512:26;2482:5;;-1:-1:-1;2550:16:132;;;2547:36;;;2579:1;2576;2569:12;2547:36;;2602:74;2668:7;2657:8;2646:9;2642:24;2602:74;:::i;:::-;2592:84;;;1434:1248;;;;;;;;;;:::o;2687:127::-;2748:10;2743:3;2739:20;2736:1;2729:31;2779:4;2776:1;2769:15;2803:4;2800:1;2793:15;3123:306;3161:3;-1:-1:-1;;;;;3231:14:132;;;-1:-1:-1;;;;;;3257:15:132;;3254:138;;3314:10;3309:3;3305:20;3302:1;3295:31;3349:4;3346:1;3339:15;3377:4;3374:1;3367:15;3254:138;3421:1;3408:15;;3123:306;-1:-1:-1;;;3123:306:132:o;:::-;825:14535:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", - "linkReferences": {} - }, - "deployedBytecode": { - "object": "0x6080604052600436106102505760003560e01c806395d376d711610139578063cd88b903116100b6578063e395eb5c1161007a578063e395eb5c1461080b578063f010cb231461083f578063f3b4ebd01461085f578063f42ed2ed1461087f578063fd62e75014610892578063fdb9b0f1146108b257600080fd5b8063cd88b9031461073b578063cf34c7681461075b578063d2ae2104146107a4578063d547741f146107cb578063dafe0ccc146107eb57600080fd5b8063c358de0a116100fd578063c358de0a14610688578063c416aa51146106a8578063c5e193cd146106cd578063c7a823e0146106ed578063c7b2370b1461071b57600080fd5b806395d376d71461058b5780639e9449651461059e578063a217fddf14610623578063aef18bf714610638578063b143044b1461066857600080fd5b806330bb3aac116101d25780635c975abb116101965780635c975abb146104ab578063724e78da146104c3578063736c0d5b146104e3578063741bef1a146105135780638585c9451461054b57806391d148541461056b57600080fd5b806330bb3aac1461040b57806331cb61051461042b57806336568abe1461044b57806352d3b8711461046b5780635553fb8e1461048b57600080fd5b80631703a018116102195780631703a01814610321578063248a9ca31461036057806326e67a371461039e5780632de11376146103cb5780632f2ff15d146103eb57600080fd5b8062bf2e801461025557806301e336671461028f57806301ffc9a7146102b15780631095b6d7146102e157806316c38b3c14610301575b600080fd5b34801561026157600080fd5b5060015461027790600160e81b900461ffff1681565b60405161ffff90911681526020015b60405180910390f35b34801561029b57600080fd5b506102af6102aa366004612893565b6108d2565b005b3480156102bd57600080fd5b506102d16102cc3660046128d4565b6108fb565b6040519015158152602001610286565b3480156102ed57600080fd5b506102af6102fc366004612893565b610932565b34801561030d57600080fd5b506102af61031c366004612915565b610a34565b34801561032d57600080fd5b5060055461034890600160401b90046001600160401b031681565b6040516001600160401b039091168152602001610286565b34801561036c57600080fd5b5061039061037b366004612930565b60009081526020819052604090206001015490565b604051908152602001610286565b3480156103aa57600080fd5b506103be6103b936600461295d565b610a59565b6040516102869190612978565b3480156103d757600080fd5b506102d16103e63660046129bf565b610ae0565b3480156103f757600080fd5b506102af6104063660046129dc565b610b65565b34801561041757600080fd5b50610390610426366004612a6b565b610c3a565b34801561043757600080fd5b506102af610446366004612ae2565b610d52565b34801561045757600080fd5b506102af6104663660046129dc565b610d7c565b34801561047757600080fd5b506102af610486366004612b17565b610d95565b34801561049757600080fd5b506103906104a6366004612b9d565b610f0e565b3480156104b757600080fd5b5060015460ff166102d1565b3480156104cf57600080fd5b506102af6104de3660046129bf565b611026565b3480156104ef57600080fd5b506102d16104fe3660046129bf565b60046020526000908152604090205460ff1681565b34801561051f57600080fd5b50600254610533906001600160a01b031681565b6040516001600160a01b039091168152602001610286565b34801561055757600080fd5b506102af610566366004612bf3565b611094565b34801561057757600080fd5b506102d16105863660046129dc565b6110c0565b610390610599366004612c26565b6110e9565b3480156105aa57600080fd5b506105f26105b936600461295d565b6006602052600090815260409020546001600160401b03811690600160401b810461ffff1690600160501b90046001600160801b031683565b604080516001600160401b03909416845261ffff90921660208401526001600160801b031690820152606001610286565b34801561062f57600080fd5b50610390600081565b34801561064457600080fd5b506102d1610653366004612930565b60076020526000908152604090205460ff1681565b34801561067457600080fd5b506102af610683366004612cd2565b61125f565b34801561069457600080fd5b506102af6106a3366004612d13565b611514565b3480156106b457600080fd5b506001546105339061010090046001600160a01b031681565b3480156106d957600080fd5b506103906106e8366004612b9d565b61157c565b3480156106f957600080fd5b5061070d610708366004612d2e565b6116e9565b604051610286929190612d82565b34801561072757600080fd5b506102af6107363660046129bf565b6118c7565b34801561074757600080fd5b506102af610756366004612db6565b611935565b34801561076757600080fd5b5061078f7f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff9091168152602001610286565b3480156107b057600080fd5b5060015461034890600160a81b90046001600160401b031681565b3480156107d757600080fd5b506102af6107e63660046129dc565b611974565b3480156107f757600080fd5b506102af610806366004612893565b611a28565b34801561081757600080fd5b5061078f7f000000000000000000000000000000000000000000000000000000000000000081565b34801561084b57600080fd5b5061039061085a366004612dfb565b611add565b34801561086b57600080fd5b506102af61087a366004612e65565b611b19565b61039061088d366004612ea1565b611cc7565b34801561089e57600080fd5b50600554610348906001600160401b031681565b3480156108be57600080fd5b506103906108cd366004612ea1565b611e14565b60008051602061352b8339815191526108ea81611f45565b6108f5848484611f4f565b50505050565b60006001600160e01b03198216637965db0b60e01b148061092c57506301ffc9a760e01b6001600160e01b03198316145b92915050565b60008051602061352b83398151915261094a81611f45565b61096260008051602061350b833981519152856110c0565b61097f57604051635ee08b9760e01b815260040160405180910390fd5b604051637ecdf29160e11b81526001600160a01b0384811660048301526024820184905285169063fd9be52290604401600060405180830381600087803b1580156109c957600080fd5b505af11580156109dd573d6000803e3d6000fd5b5050604080516001600160a01b038089168252871660208201529081018590527f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb925060600190505b60405180910390a150505050565b6000610a3f81611f45565b8115610a5157610a4d611f77565b5050565b610a4d611fcb565b63ffffffff8116600090815260036020908152604091829020805483518184028101840190945280845260609392830182828015610ad457602002820191906000526020600020906000905b825461010083900a900460ff16815260206001928301818104948501949093039092029101808411610aa55790505b50505050509050919050565b6000610b0c7f4270fae16c6d150d00e80b689daca99e8073b1838ff2b6063a37be9d851283e4836110c0565b15610b1957506000919050565b600154600160a81b90046001600160401b03161580610b4b5750610b4b60008051602061354b833981519152836110c0565b15610b5857506001919050565b506000919050565b919050565b8160008051602061354b833981519152811480610ba157507f4270fae16c6d150d00e80b689daca99e8073b1838ff2b6063a37be9d851283e481145b80610bb9575060008051602061350b83398151915281145b15610be357303314610bde57604051637d5d391d60e11b815260040160405180910390fd5b610c30565b60008051602061352b8339815191528103610c0f57610bde60008051602061352b833981519152611f45565b604051634a7ee1b960e11b8152600481018290526024015b60405180910390fd5b6108f58383612004565b600083610c4681610ae0565b610c6357604051634ab5ebcd60e01b815260040160405180910390fd5b6040805160c0810182526002546001600160a01b03908116825263ffffffff8a1660208084018290526001600160401b03808c16858701528a84166060860152600554600160401b900416608085015260015461ffff600160e81b82041660a086015260009283526006909152908490209351637bfa20a960e01b8152929361010090910490911691637bfa20a991610d05918591908a908a90600401613004565b602060405180830381865afa158015610d22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d469190613034565b98975050505050505050565b303314610d7257604051637d5d391d60e11b815260040160405180910390fd5b610a4d8282612088565b60405163dec9f03160e01b815260040160405180910390fd5b60008051602061352b833981519152610dad81611f45565b60005b82811015610ecf5736848483818110610dcb57610dcb61304d565b90506080020190506040518060600160405280826020016020810190610df19190612bf3565b6001600160401b03168152602001610e0f6060840160408501612d13565b61ffff168152602001610e28608084016060850161307a565b6001600160801b0316905260066000610e44602085018561295d565b63ffffffff1681526020808201929092526040908101600020835181549385015194909201516001600160801b0316600160501b026fffffffffffffffffffffffffffffffff60501b1961ffff909516600160401b0269ffffffffffffffffffff199094166001600160401b0390931692909217929092179290921691909117905550600101610db0565b507f7dd21e42791b013d1929e86f0c59085e4fca24251f0f1aa81917b3b1611766e08383604051610f01929190613095565b60405180910390a1505050565b600081610f1a81610ae0565b610f3757604051634ab5ebcd60e01b815260040160405180910390fd5b6040805160c0810182526002546001600160a01b03908116825261ffff808a1660208085018290526001600160401b03808b16868801528985166060870152600554600160401b9004166080860152600154600160e81b810490931660a0860152600091825260068152858220865191820187529181529451637bfa20a960e01b8152939461010090920490921692637bfa20a992610fda92869260040161316f565b602060405180830381865afa158015610ff7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061101b9190613034565b979650505050505050565b60008051602061352b83398151915261103e81611f45565b600280546001600160a01b0319166001600160a01b0384169081179091556040519081527ff724a45d041687842411f2b977ef22ab8f43c8f1104f4592b42a00f9b34a643d906020015b60405180910390a15050565b3033146110b457604051637d5d391d60e11b815260040160405180910390fd5b6110bd816121e3565b50565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b600060008051602061350b83398151915261110381611f45565b61111360a08601608087016129bf565b61111c81610ae0565b61113957604051634ab5ebcd60e01b815260040160405180910390fd5b6040805160c081019091526002546001600160a01b03168152600090602080820190611167908a018a61295d565b63ffffffff16815260200161118260808a0160608b01612bf3565b6001600160401b031681526020016111a060a08a0160808b016129bf565b6001600160a01b039081168252600554600160401b90046001600160401b0316602080840191909152600154600160e81b810461ffff16604090940193909352929350610100909104169063df2b057e908390600690600090611205908d018d61295d565b63ffffffff1663ffffffff16815260200190815260200160002089896040518563ffffffff1660e01b81526004016112409493929190613004565b6020604051808303816000875af1158015610ff7573d6000803e3d6000fd5b60008051602061352b83398151915261127781611f45565b60005b828110156108f557368484838181106112955761129561304d565b90506020028101906112a791906131a8565b905063ffffffff7f0000000000000000000000000000000000000000000000000000000000000000166112dd602083018361295d565b63ffffffff16146112ee575061150c565b428160600135116112ff575061150c565b6000611338611311602084018461295d565b61132160408501602086016129bf565b61132e60408601866131c8565b8660600135611add565b9050600061134d8261070860808601866131c8565b50905080611390576040518481527fd6d90193101048cc1b6edcdc2348f5acf7a4a4a97d3e7b668b74cb7602ab3ebc9060200160405180910390a150505061150c565b60006113b06113a260408601866131c8565b6113ab9161320e565b6122b1565b9050801561142b5760008381526007602052604090205460ff1615611411577f9bb9bddbdf537a2104255307230b323d7982f4512ee8e5bd15df62ddca50ab978484604051611400929190613283565b60405180910390a15050505061150c565b6000838152600760205260409020805460ff191660011790555b60008061143e60408701602088016129bf565b6001600160a01b031661145460408801886131c8565b60405161146292919061331e565b6000604051808303816000865af19150503d806000811461149f576040519150601f19603f3d011682016040523d82523d6000602084013e6114a4565b606091505b5091509150816115055782156114cb576000858152600760205260409020805460ff191690555b7fdc8cdd96296241bbefda4a8e18ad2e0985a8da6495b34d409cfc4c886ee3b0cf87826040516114fc92919061332e565b60405180910390a15b5050505050505b60010161127a565b60008051602061352b83398151915261152c81611f45565b6001805461ffff60e81b1916600160e81b61ffff8516908102919091179091556040519081527f7af0ac740036ffb1c97b03697859d729e80a44ae5030543d64971c313565ab4d90602001611088565b600060008051602061350b83398151915261159681611f45565b826115a081610ae0565b6115bd57604051634ab5ebcd60e01b815260040160405180910390fd5b6040805160c0810182526002546001600160a01b03908116825261ffff808b1660208085018290526001600160401b03808c16868801528a85166060870152600554600160401b9004166080860152600154600160e81b810490931660a0860152600091825260068152858220865191820187529181529451636f9582bf60e11b815293946101009092049092169263df2b057e9261166092869260040161316f565b6020604051808303816000875af115801561167f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116a39190613034565b93507f87e46b0a6199bc734632187269a103c05714ee0adae5b28f30723955724f37ef846040516116d691815260200190565b60405180910390a1505050949350505050565b600554600090819061170c90600160401b90046001600160401b0316604161335d565b831461171e57506000905060016118bf565b6000611777866040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b90506000805b600554600160401b90046001600160401b03168110156118b35736600088886117a785604161335d565b906117b3866001613374565b6117be90604161335d565b926117cb93929190613387565b915091506000806118128785858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061230792505050565b509092509050600081600381111561182c5761182c612d6c565b14611845576000600198509850505050505050506118bf565b856001600160a01b0316826001600160a01b031611611872576000600298509850505050505050506118bf565b6001600160a01b03821660009081526004602052604090205460ff166118a6576000600398509850505050505050506118bf565b509350505060010161177d565b50600160009350935050505b935093915050565b60008051602061352b8339815191526118df81611f45565b60018054610100600160a81b0319166101006001600160a01b038516908102919091179091556040519081527f1399be28223800f8669b3ba5f8721d9fc16fc4e8d0bbf98378791c8c5a3015e090602001611088565b60008051602061352b83398151915261194d81611f45565b63ffffffff8416600090815260036020526040902061196d9084846127c0565b5050505050565b8160008051602061354b8339815191528114806119b057507f4270fae16c6d150d00e80b689daca99e8073b1838ff2b6063a37be9d851283e481145b806119c8575060008051602061350b83398151915281145b156119f2573033146119ed57604051637d5d391d60e11b815260040160405180910390fd5b611a1e565b60008051602061352b8339815191528103610c0f576119ed60008051602061352b833981519152611f45565b6108f58383612354565b60008051602061352b833981519152611a4081611f45565b611a5860008051602061350b833981519152856110c0565b611a7557604051635ee08b9760e01b815260040160405180910390fd5b6040516303d8c5ef60e11b81526001600160a01b038481166004830152602482018490528516906307b18bde90604401600060405180830381600087803b158015611abf57600080fd5b505af1158015611ad3573d6000803e3d6000fd5b5050505050505050565b60008585838686604051602001611af89594939291906133b1565b60405160208183030381529060405280519060200120905095945050505050565b42816060013511611b3d57604051630bbaf26360e01b815260040160405180910390fd5b30611b4e60408301602084016129bf565b6001600160a01b031614611b9157611b6c60408201602083016129bf565b604051631ce0bfcd60e01b81526001600160a01b039091166004820152602401610c27565b63ffffffff7f000000000000000000000000000000000000000000000000000000000000000016611bc5602083018361295d565b63ffffffff1614611bff57611bdd602082018261295d565b60405163134bf0e160e11b815263ffffffff9091166004820152602401610c27565b6000611c11611311602084018461295d565b90506000611c268261070860808601866131c8565b50905080611c4757604051630af656f760e11b815260040160405180910390fd5b60008281526007602052604090205460ff1615611c7a57604051634eb522d360e11b815260048101839052602401610c27565b60008281526007602052604090819020805460ff191660011790556108f59060008051602061352b83398151915290611cb5908601866131c8565b810190611cc291906129bf565b612004565b600060008051602061350b833981519152611ce181611f45565b88611ceb81610ae0565b611d0857604051634ab5ebcd60e01b815260040160405180910390fd5b604080516080810182526002546001600160a01b0390811682528c8116602080840191909152600554600160401b90046001600160401b031683850152600154600160e81b810461ffff1660608501527f000000000000000000000000000000000000000000000000000000000000000063ffffffff166000908152600690925290849020935163bbc5a33b60e01b815292936101009091049091169163bbc5a33b91611dc2918591908d908d908d908d906004016133f7565b6020604051808303816000875af1158015611de1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e059190613034565b9b9a5050505050505050505050565b600087611e2081610ae0565b611e3d57604051634ab5ebcd60e01b815260040160405180910390fd5b604080516080810182526002546001600160a01b0390811682528b8116602080840191909152600554600160401b90046001600160401b031683850152600154600160e81b810461ffff1660608501527f000000000000000000000000000000000000000000000000000000000000000063ffffffff166000908152600690925290849020935162d358b360e81b815292936101009091049091169163d358b30091611ef6918591908c908c908c908c906004016133f7565b602060405180830381865afa158015611f13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f379190613034565b9a9950505050505050505050565b6110bd81336123cc565b6001600160a01b038316611f6c57611f678282612405565b505050565b611f678383836124b2565b611f7f6124ed565b6001805460ff1916811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b6040516001600160a01b03909116815260200160405180910390a1565b611fd3612513565b6001805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33611fae565b600060008051602061354b8339815191528314801561202a575061202883836110c0565b155b15612074576001805460159061204f90600160a81b90046001600160401b031661347a565b91906101000a8154816001600160401b0302191690836001600160401b031602179055505b61207e8383612536565b5060019392505050565b6001600160a01b03821660009081526004602052604090205481151560ff9091161515036120dc576040516302c6469560e51b81526001600160a01b03831660048201528115156024820152604401610c27565b6001600160a01b0382166000908152600460205260408120805460ff1916831515179055816121225760055461211d906001906001600160401b03166134a0565b612139565b600554612139906001600160401b031660016134c7565b6005549091506001600160401b03600160401b9091048116908216811115612187576040516378e2c15760e11b81526001600160401b03808416600483015282166024820152604401610c27565b6005805467ffffffffffffffff19166001600160401b038416179055604080516001600160a01b038616815284151560208201527f863d338cad74814b108a06288ad5e0e80d56495e0332238b1d2cdcfa0ca8e5ce9101610a26565b806001600160401b031660000361220d57604051635f86e17760e01b815260040160405180910390fd5b6005546001600160401b03908116908216811015612251576040516378e2c15760e11b81526001600160401b03808316600483015283166024820152604401610c27565b600580546fffffffffffffffff00000000000000001916600160401b6001600160401b038516908102919091179091556040519081527fb600f3cf7f38a4b49bb0c75f722ef69f7e3e39ef3bb4aa8207fd86e724a2324990602001611088565b60006001600160e01b03198216630111a9b760e11b148015906122e557506001600160e01b0319821663ab750e7560e01b14155b801561092c57506001600160e01b0319821663704316e560e01b141592915050565b600080600083516041036123415760208401516040850151606086015160001a612333888285856125c8565b95509550955050505061234d565b50508151600091506002905b9250925092565b600060008051602061354b83398151915283148015612378575061237883836110c0565b156123c2576001805460159061239d90600160a81b90046001600160401b03166134e7565b91906101000a8154816001600160401b0302191690836001600160401b031602179055505b61207e8383612697565b6123d682826110c0565b610a4d5760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401610c27565b6001600160a01b03821661242c576040516306b7a93160e41b815260040160405180910390fd5b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612479576040519150601f19603f3d011682016040523d82523d6000602084013e61247e565b606091505b5050905080611f6757604051631196f20d60e21b81526001600160a01b038416600482015260248101839052604401610c27565b6001600160a01b0382166124d9576040516306b7a93160e41b815260040160405180910390fd5b611f676001600160a01b0384168383612702565b60015460ff16156125115760405163d93c066560e01b815260040160405180910390fd5b565b60015460ff1661251157604051638dfc202b60e01b815260040160405180910390fd5b600061254283836110c0565b6125c0576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556125783390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161092c565b50600061092c565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115612603575060009150600390508261268d565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015612657573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166126835750600092506001915082905061268d565b9250600091508190505b9450945094915050565b60006126a383836110c0565b156125c0576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161092c565b604080516001600160a01b03841660248201526044808201849052825180830390910181526064909101909152602080820180516001600160e01b031663a9059cbb60e01b1781528251611f67938793909260009283929183919082885af180612772576040513d6000823e3d81fd5b50506000513d9150811561278a578060011415612797565b6001600160a01b0384163b155b156108f557604051635274afe760e01b81526001600160a01b0385166004820152602401610c27565b82805482825590600052602060002090601f016020900481019282156128595791602002820160005b8382111561282a57833560ff1683826101000a81548160ff021916908360ff16021790555092602001926001016020816000010492830192600103026127e9565b80156128575782816101000a81549060ff021916905560010160208160000104928301926001030261282a565b505b50612865929150612869565b5090565b5b80821115612865576000815560010161286a565b6001600160a01b03811681146110bd57600080fd5b6000806000606084860312156128a857600080fd5b83356128b38161287e565b925060208401356128c38161287e565b929592945050506040919091013590565b6000602082840312156128e657600080fd5b81356001600160e01b0319811681146128fe57600080fd5b9392505050565b80358015158114610b6057600080fd5b60006020828403121561292757600080fd5b6128fe82612905565b60006020828403121561294257600080fd5b5035919050565b803563ffffffff81168114610b6057600080fd5b60006020828403121561296f57600080fd5b6128fe82612949565b6020808252825182820181905260009190848201906040850190845b818110156129b357835160ff1683529284019291840191600101612994565b50909695505050505050565b6000602082840312156129d157600080fd5b81356128fe8161287e565b600080604083850312156129ef57600080fd5b823591506020830135612a018161287e565b809150509250929050565b80356001600160401b0381168114610b6057600080fd5b60008083601f840112612a3557600080fd5b5081356001600160401b03811115612a4c57600080fd5b602083019150836020828501011115612a6457600080fd5b9250929050565b600080600080600060808688031215612a8357600080fd5b612a8c86612949565b9450612a9a60208701612a0c565b93506040860135612aaa8161287e565b925060608601356001600160401b03811115612ac557600080fd5b612ad188828901612a23565b969995985093965092949392505050565b60008060408385031215612af557600080fd5b8235612b008161287e565b9150612b0e60208401612905565b90509250929050565b60008060208385031215612b2a57600080fd5b82356001600160401b0380821115612b4157600080fd5b818501915085601f830112612b5557600080fd5b813581811115612b6457600080fd5b8660208260071b8501011115612b7957600080fd5b60209290920196919550909350505050565b803561ffff81168114610b6057600080fd5b60008060008060808587031215612bb357600080fd5b612bbc85612b8b565b9350612bca60208601612b8b565b9250612bd860408601612a0c565b91506060850135612be88161287e565b939692955090935050565b600060208284031215612c0557600080fd5b6128fe82612a0c565b600060a08284031215612c2057600080fd5b50919050565b600080600060408486031215612c3b57600080fd5b83356001600160401b0380821115612c5257600080fd5b612c5e87838801612c0e565b94506020860135915080821115612c7457600080fd5b50612c8186828701612a23565b9497909650939450505050565b60008083601f840112612ca057600080fd5b5081356001600160401b03811115612cb757600080fd5b6020830191508360208260051b8501011115612a6457600080fd5b60008060208385031215612ce557600080fd5b82356001600160401b03811115612cfb57600080fd5b612d0785828601612c8e565b90969095509350505050565b600060208284031215612d2557600080fd5b6128fe82612b8b565b600080600060408486031215612d4357600080fd5b8335925060208401356001600160401b03811115612d6057600080fd5b612c8186828701612a23565b634e487b7160e01b600052602160045260246000fd5b82151581526040810160048310612da957634e487b7160e01b600052602160045260246000fd5b8260208301529392505050565b600080600060408486031215612dcb57600080fd5b612dd484612949565b925060208401356001600160401b03811115612def57600080fd5b612c8186828701612c8e565b600080600080600060808688031215612e1357600080fd5b612e1c86612949565b94506020860135612e2c8161287e565b935060408601356001600160401b03811115612e4757600080fd5b612e5388828901612a23565b96999598509660600135949350505050565b600060208284031215612e7757600080fd5b81356001600160401b03811115612e8d57600080fd5b612e9984828501612c0e565b949350505050565b60008060008060008060006080888a031215612ebc57600080fd5b8735612ec78161287e565b965060208801356001600160401b0380821115612ee357600080fd5b612eef8b838c01612a23565b909850965060408a0135915080821115612f0857600080fd5b612f148b838c01612a23565b909650945060608a0135915080821115612f2d57600080fd5b50612f3a8a828b01612a23565b989b979a50959850939692959293505050565b60018060a01b0380825116835263ffffffff602083015116602084015260408201516001600160401b03808216604086015282606085015116606086015280608085015116608086015250505061ffff60a08201511660a08301525050565b546001600160401b0381168252604081811c61ffff16602084015260509190911c6001600160801b0316910152565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60006101406130138388612f4d565b61302060c0840187612fac565b8061012084015261101b8184018587612fdb565b60006020828403121561304657600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b80356001600160801b0381168114610b6057600080fd5b60006020828403121561308c57600080fd5b6128fe82613063565b6020808252818101839052600090604080840186845b8781101561311c5763ffffffff6130c183612949565b1683526001600160401b036130d7868401612a0c565b168584015261ffff6130ea858401612b8b565b168484015260606001600160801b03613104828501613063565b169084015260809283019291909101906001016130ab565b5090979650505050505050565b6000815180845260005b8181101561314f57602081850181015186830182015201613133565b506000602082860101526020601f19601f83011685010191505092915050565b600061014061317e8387612f4d565b61318b60c0840186612fac565b8061012084015261319e81840185613129565b9695505050505050565b60008235609e198336030181126131be57600080fd5b9190910192915050565b6000808335601e198436030181126131df57600080fd5b8301803591506001600160401b038211156131f957600080fd5b602001915036819003821315612a6457600080fd5b6001600160e01b031981358181169160048510156132365780818660040360031b1b83161692505b505092915050565b6000808335601e1984360301811261325557600080fd5b83016020810192503590506001600160401b0381111561327457600080fd5b803603821315612a6457600080fd5b6040815263ffffffff61329584612949565b166040820152600060208401356132ab8161287e565b6001600160a01b031660608301526132c6604085018561323e565b60a060808501526132db60e085018284612fdb565b915050606085013560a08401526132f5608086018661323e565b848303603f190160c086015261330c838284612fdb565b93505050508260208301529392505050565b8183823760009101908152919050565b828152604060208201526000612e996040830184613129565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761092c5761092c613347565b8082018082111561092c5761092c613347565b6000808585111561339757600080fd5b838611156133a457600080fd5b5050820193919092039150565b63ffffffff60e01b8660e01b1681526bffffffffffffffffffffffff198560601b1660048201528360188201528183603883013760009101603801908152949350505050565b600061012060018060a01b03808a511684528060208b0151166020850152506001600160401b0360408a015116604084015261ffff60608a01511660608401526134446080840189612fac565b8060e08401526134578184018789612fdb565b905082810361010084015261346d818587612fdb565b9998505050505050505050565b60006001600160401b0380831681810361349657613496613347565b6001019392505050565b6001600160401b038281168282160390808211156134c0576134c0613347565b5092915050565b6001600160401b038181168382160190808211156134c0576134c0613347565b60006001600160401b0382168061350057613500613347565b600019019291505056fe724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19dea49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177574845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bcaa264697066735822122024327161ffb7d62bcb3e3b78be45b9ccbc1a11373295fe0f97bd10b71bcadb8164736f6c63430008160033", - "sourceMap": "825:14535:73:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;955:34:84;;;;;;;;;;-1:-1:-1;955:34:84;;;;-1:-1:-1;;;955:34:84;;;;;;;;;188:6:132;176:19;;;158:38;;146:2;131:18;955:34:84;;;;;;;;4782:214;;;;;;;;;;-1:-1:-1;4782:214:84;;;;;:::i;:::-;;:::i;:::-;;2565:202:105;;;;;;;;;;-1:-1:-1;2565:202:105;;;;;:::i;:::-;;:::i;:::-;;;1260:14:132;;1253:22;1235:41;;1223:2;1208:18;2565:202:105;1095:187:132;4319:273:84;;;;;;;;;;-1:-1:-1;4319:273:84;;;;;:::i;:::-;;:::i;3186:174::-;;;;;;;;;;-1:-1:-1;3186:174:84;;;;;:::i;:::-;;:::i;390:20:78:-;;;;;;;;;;-1:-1:-1;390:20:78;;;;-1:-1:-1;;;390:20:78;;-1:-1:-1;;;;;390:20:78;;;;;;-1:-1:-1;;;;;1799:31:132;;;1781:50;;1769:2;1754:18;390:20:78;1637:200:132;3810:120:105;;;;;;;;;;-1:-1:-1;3810:120:105;;;;;:::i;:::-;3875:7;3901:12;;;;;;;;;;:22;;;;3810:120;;;;2173:25:132;;;2161:2;2146:18;3810:120:105;2027:177:132;5247:135:84;;;;;;;;;;-1:-1:-1;5247:135:84;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;2678:285::-;;;;;;;;;;-1:-1:-1;2678:285:84;;;;;:::i;:::-;;:::i;4545:135:73:-;;;;;;;;;;-1:-1:-1;4545:135:73;;;;;:::i;:::-;;:::i;11974:504::-;;;;;;;;;;-1:-1:-1;11974:504:73;;;;;:::i;:::-;;:::i;3953:113::-;;;;;;;;;;-1:-1:-1;3953:113:73;;;;;:::i;:::-;;:::i;6390:137:84:-;;;;;;;;;;-1:-1:-1;6390:137:84;;;;;:::i;:::-;;:::i;6240:354:73:-;;;;;;;;;;-1:-1:-1;6240:354:73;;;;;:::i;:::-;;:::i;12771:509::-;;;;;;;;;;-1:-1:-1;12771:509:73;;;;;:::i;:::-;;:::i;1850:84:120:-;;;;;;;;;;-1:-1:-1;1920:7:120;;;;1850:84;;3481:150:84;;;;;;;;;;-1:-1:-1;3481:150:84;;;;;:::i;:::-;;:::i;301:53:78:-;;;;;;;;;;-1:-1:-1;301:53:78;;;;;:::i;:::-;;;;;;;;;;;;;;;;995:24:84;;;;;;;;;;-1:-1:-1;995:24:84;;;;-1:-1:-1;;;;;995:24:84;;;;;;-1:-1:-1;;;;;6957:32:132;;;6939:51;;6927:2;6912:18;995:24:84;6793:203:132;4176:89:73;;;;;;;;;;-1:-1:-1;4176:89:73;;;;;:::i;:::-;;:::i;2854:136:105:-;;;;;;;;;;-1:-1:-1;2854:136:105;;;;;:::i;:::-;;:::i;9373:549:73:-;;;;;;:::i;:::-;;:::i;1100:52::-;;;;;;;;;;-1:-1:-1;1100:52:73;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;1100:52:73;;;-1:-1:-1;;;1100:52:73;;;;;-1:-1:-1;;;1100:52:73;;-1:-1:-1;;;;;1100:52:73;;;;;;;-1:-1:-1;;;;;8257:31:132;;;8239:50;;8337:6;8325:19;;;8320:2;8305:18;;8298:47;-1:-1:-1;;;;;8381:47:132;8361:18;;;8354:75;8227:2;8212:18;1100:52:73;8041:394:132;2187:49:105;;;;;;;;;;-1:-1:-1;2187:49:105;2232:4;2187:49;;1158:62:73;;;;;;;;;;-1:-1:-1;1158:62:73;;;;;:::i;:::-;;;;;;;;;;;;;;;;6892:1636;;;;;;;;;;-1:-1:-1;6892:1636:73;;;;;:::i;:::-;;:::i;3924:194:84:-;;;;;;;;;;-1:-1:-1;3924:194:84;;;;;:::i;:::-;;:::i;888:27::-;;;;;;;;;;-1:-1:-1;888:27:84;;;;;;;-1:-1:-1;;;;;888:27:84;;;10257:635:73;;;;;;;;;;-1:-1:-1;10257:635:73;;;;;:::i;:::-;;:::i;2495:1181:78:-;;;;;;;;;;-1:-1:-1;2495:1181:78;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;3689:165:84:-;;;;;;;;;;-1:-1:-1;3689:165:84;;;;;:::i;:::-;;:::i;5002:::-;;;;;;;;;;-1:-1:-1;5002:165:84;;;;;:::i;:::-;;:::i;991:27:73:-;;;;;;;;;;;;;;;;;;11265:10:132;11253:23;;;11235:42;;11223:2;11208:18;991:27:73;11091:192:132;922:27:84;;;;;;;;;;-1:-1:-1;922:27:84;;;;-1:-1:-1;;;922:27:84;;-1:-1:-1;;;;;922:27:84;;;4883:137:73;;;;;;;;;;-1:-1:-1;4883:137:73;;;;;:::i;:::-;;:::i;8769:292::-;;;;;;;;;;-1:-1:-1;8769:292:73;;;;;:::i;:::-;;:::i;1024:34::-;;;;;;;;;;;;;;;14131:257;;;;;;;;;;-1:-1:-1;14131:257:73;;;;;:::i;:::-;;:::i;5254:863::-;;;;;;;;;;-1:-1:-1;5254:863:73;;;;;:::i;:::-;;:::i;11086:539::-;;;;;;:::i;:::-;;:::i;360:24:78:-;;;;;;;;;;-1:-1:-1;360:24:78;;;;-1:-1:-1;;;;;360:24:78;;;13474:500:73;;;;;;;;;;-1:-1:-1;13474:500:73;;;;;:::i;:::-;;:::i;4782:214:84:-;-1:-1:-1;;;;;;;;;;;2464:16:105;2475:4;2464:10;:16::i;:::-;4945:44:84::1;4968:6;4976:3;4981:7;4945:22;:44::i;:::-;4782:214:::0;;;;:::o;2565:202:105:-;2650:4;-1:-1:-1;;;;;;2673:47:105;;-1:-1:-1;;;2673:47:105;;:87;;-1:-1:-1;;;;;;;;;;862:40:123;;;2724:36:105;2666:94;2565:202;-1:-1:-1;;2565:202:105:o;4319:273:84:-;-1:-1:-1;;;;;;;;;;;2464:16:105;2475:4;2464:10;:16::i;:::-;4429:31:84::1;-1:-1:-1::0;;;;;;;;;;;4455:4:84::1;4429:7;:31::i;:::-;4424:68;;4469:23;;-1:-1:-1::0;;;4469:23:84::1;;;;;;;;;;;4424:68;4502:40;::::0;-1:-1:-1;;;4502:40:84;;-1:-1:-1;;;;;14158:32:132;;;4502:40:84::1;::::0;::::1;14140:51:132::0;14207:18;;;14200:34;;;4502:26:84;::::1;::::0;::::1;::::0;14113:18:132;;4502:40:84::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;4557:28:84::1;::::0;;-1:-1:-1;;;;;14503:15:132;;;14485:34;;14555:15;;14550:2;14535:18;;14528:43;14587:18;;;14580:34;;;4557:28:84::1;::::0;-1:-1:-1;14435:2:132;14420:18;;-1:-1:-1;4557:28:84::1;;;;;;;;4319:273:::0;;;;:::o;3186:174::-;2232:4:105;2464:16;2232:4;2464:10;:16::i;:::-;3271:7:84::1;3267:87;;;3294:8;:6;:8::i;:::-;3186:174:::0;;:::o;3267:87::-:1;3333:10;:8;:10::i;5247:135::-:0;5349:26;;;;;;;:20;:26;;;;;;;;;5342:33;;;;;;;;;;;;;;;;;5316:14;;5342:33;;;5349:26;5342:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5247:135;;;:::o;2678:285::-;2732:4;2752:26;792:21;2770:7;2752;:26::i;:::-;2748:209;;;-1:-1:-1;2801:5:84;;2678:285;-1:-1:-1;2678:285:84:o;2748:209::-;2827:13;;-1:-1:-1;;;2827:13:84;;-1:-1:-1;;;;;2827:13:84;:18;;:49;;;2849:27;-1:-1:-1;;;;;;;;;;;2868:7:84;2849;:27::i;:::-;2823:134;;;-1:-1:-1;2899:4:84;;2678:285;-1:-1:-1;2678:285:84:o;2823:134::-;-1:-1:-1;2941:5:84;;2678:285;-1:-1:-1;2678:285:84:o;2823:134::-;2678:285;;;:::o;4545:135:73:-;4629:5;-1:-1:-1;;;;;;;;;;;3186:5:73;:18;:39;;;;792:21:84;3208:5:73;:17;3186:39;:68;;;;-1:-1:-1;;;;;;;;;;;3229:5:73;:25;3186:68;3182:382;;;3311:4;3320:10;3303:27;3299:87;;3357:14;;-1:-1:-1;;;3357:14:73;;;;;;;;;;;3299:87;3182:382;;;-1:-1:-1;;;;;;;;;;;3406:5:73;:19;3402:162;;3471:22;-1:-1:-1;;;;;;;;;;;3471:10:73;:22::i;3402:162::-;3531:22;;-1:-1:-1;;;3531:22:73;;;;;2173:25:132;;;2146:18;;3531:22:73;;;;;;;;3402:162;4646:27:::1;4657:5;4664:8;4646:10;:27::i;11974:504::-:0;12149:11;12131:7;2304:15:84;2311:7;2304:6;:15::i;:::-;2299:73;;2342:19;;-1:-1:-1;;;2342:19:84;;;;;;;;;;;2299:73;12209:177:73::1;::::0;;::::1;::::0;::::1;::::0;;12243:9:::1;::::0;-1:-1:-1;;;;;12243:9:73;;::::1;12209:177:::0;;::::1;::::0;::::1;;::::0;;::::1;::::0;;;-1:-1:-1;;;;;12209:177:73;;::::1;::::0;;;;;;::::1;::::0;;;;12336:6:::1;::::0;-1:-1:-1;;;12336:6:73;::::1;;12209:177:::0;;;;12243:9;12356:20;::::1;-1:-1:-1::0;;;12356:20:73;::::1;;12209:177:::0;;;;12172:34:::1;12442:18:::0;;;:9:::1;:18:::0;;;;;;;12402:69;;-1:-1:-1;;;12402:69:73;;12209:177;;12243:9:::1;12413:12:::0;;::::1;::::0;;::::1;::::0;12402:31:::1;::::0;:69:::1;::::0;12209:177;;12442:18;12462:8;;;;12402:69:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12396:75:::0;11974:504;-1:-1:-1;;;;;;;;11974:504:73:o;3953:113::-;3629:4;3638:10;3621:27;3617:79;;3671:14;;-1:-1:-1;;;3671:14:73;;;;;;;;;;;3617:79;4031:28:::1;4042:7;4051;4031:10;:28::i;6390:137:84:-:0;6489:31;;-1:-1:-1;;;6489:31:84;;;;;;;;;;;6240:354:73;-1:-1:-1;;;;;;;;;;;2464:16:105;2475:4;2464:10;:16::i;:::-;6342:9:73::1;6337:215;6357:18:::0;;::::1;6337:215;;;6396:29;6428:7;;6436:1;6428:10;;;;;;;:::i;:::-;;;;;;6396:42;;6478:63;;;;;;;;6488:5;:9;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;6478:63:73::1;::::0;;::::1;;6499:19;::::0;;;::::1;::::0;::::1;;:::i;:::-;6478:63;;::::0;;::::1;;6520:20;::::0;;;::::1;::::0;::::1;;:::i;:::-;-1:-1:-1::0;;;;;6478:63:73::1;::::0;;6452:9:::1;:23;6462:12;;::::0;::::1;:5:::0;:12:::1;:::i;:::-;6452:23;;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;-1:-1:-1;6452:23:73;:89;;;;;;::::1;::::0;;;;::::1;::::0;-1:-1:-1;;;;;6452:89:73::1;-1:-1:-1::0;;;6452:89:73::1;-1:-1:-1::0;;;;6452:89:73::1;::::0;;::::1;-1:-1:-1::0;;;6452:89:73::1;-1:-1:-1::0;;6452:89:73;;;-1:-1:-1;;;;;6452:89:73;;::::1;::::0;;;;;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;6452:89:73;6377:3:::1;6337:215;;;;6566:21;6579:7;;6566:21;;;;;;;:::i;:::-;;;;;;;;6240:354:::0;;;:::o;12771:509::-;12950:11;12932:7;2304:15:84;2311:7;2304:6;:15::i;:::-;2299:73;;2342:19;;-1:-1:-1;;;2342:19:84;;;;;;;;;;;2299:73;13010:177:73::1;::::0;;::::1;::::0;::::1;::::0;;13044:9:::1;::::0;-1:-1:-1;;;;;13044:9:73;;::::1;13010:177:::0;;::::1;::::0;;::::1;;::::0;;::::1;::::0;;;-1:-1:-1;;;;;13010:177:73;;::::1;::::0;;;;;;::::1;::::0;;;;13137:6:::1;::::0;-1:-1:-1;;;13137:6:73;::::1;;13010:177:::0;;;;13044:9;13157:20;-1:-1:-1;;;13157:20:73;::::1;::::0;;::::1;13010:177:::0;;;;12973:34:::1;13243:18:::0;;;:9:::1;:18:::0;;;;;13263:9;;;;::::1;::::0;;;;;13203:70;;-1:-1:-1;;;13203:70:73;;13010:177;;13044:9:::1;13214:12:::0;;::::1;::::0;;::::1;::::0;13203:31:::1;::::0;:70:::1;::::0;13010:177;;13203:70:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13197:76:::0;12771:509;-1:-1:-1;;;;;;;12771:509:73:o;3481:150:84:-;-1:-1:-1;;;;;;;;;;;2464:16:105;2475:4;2464:10;:16::i;:::-;3563:9:84::1;:22:::0;;-1:-1:-1;;;;;;3563:22:84::1;-1:-1:-1::0;;;;;3563:22:84;::::1;::::0;;::::1;::::0;;;3600:24:::1;::::0;6939:51:132;;;3600:24:84::1;::::0;6927:2:132;6912:18;3600:24:84::1;;;;;;;;3481:150:::0;;:::o;4176:89:73:-;3629:4;3638:10;3621:27;3617:79;;3671:14;;-1:-1:-1;;;3671:14:73;;;;;;;;;;;3617:79;4239:19:::1;4250:7;4239:10;:19::i;:::-;4176:89:::0;:::o;2854:136:105:-;2931:4;2954:12;;;;;;;;;;;-1:-1:-1;;;;;2954:29:105;;;;;;;;;;;;;;;2854:136::o;9373:549:73:-;9547:16;-1:-1:-1;;;;;;;;;;;2464:16:105;2475:4;2464:10;:16::i;:::-;9523:13:73::1;::::0;;;::::1;::::0;::::1;;:::i;:::-;2304:15:84;2311:7;2304:6;:15::i;:::-;2299:73;;2342:19;;-1:-1:-1::0;;;2342:19:84::1;;;;;;;;;;;2299:73;9615:195:73::2;::::0;;::::2;::::0;::::2;::::0;;;9649:9:::2;::::0;-1:-1:-1;;;;;9649:9:73::2;9615:195:::0;;9575:37:::2;::::0;9615:195:::2;::::0;;::::2;::::0;9672:13:::2;::::0;;::::2;:6:::0;:13:::2;:::i;:::-;9615:195;;::::0;;::::2;;9699:20;::::0;;;::::2;::::0;::::2;;:::i;:::-;-1:-1:-1::0;;;;;9615:195:73::2;::::0;;::::2;;9733:13;::::0;;;::::2;::::0;::::2;;:::i;:::-;-1:-1:-1::0;;;;;9615:195:73;;::::2;::::0;;9760:6:::2;::::0;-1:-1:-1;;;9760:6:73;::::2;-1:-1:-1::0;;;;;9760:6:73::2;9615:195;::::0;;::::2;::::0;;;;9780:20:::2;::::0;-1:-1:-1;;;9780:20:73;::::2;;;9615:195:::0;;;;;;;;9575:235;;-1:-1:-1;9760:6:73::2;9842:12:::0;;::::2;;::::0;9831:37:::2;::::0;9575:235;;9880:9:::2;::::0;-1:-1:-1;;9890:13:73::2;::::0;;::::2;::::0;::::2;:::i;:::-;9880:24;;;;;;;;;;;;;;;9906:8;;9831:84;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;6892:1636:::0;-1:-1:-1;;;;;;;;;;;2464:16:105;2475:4;2464:10;:16::i;:::-;6987:9:73::1;6982:1540;7002:18:::0;;::::1;6982:1540;;;7041:27;7071:7;;7079:1;7071:10;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;7041:40:::0;-1:-1:-1;7137:16:73::1;7150:3;7137:16;:9;;::::0;::::1;7041:40:::0;7137:9:::1;:::i;:::-;:16;;;7133:63;;7173:8;;;7133:63;7268:15;7248:5;:16;;;:35;7244:82;;7303:8;;;7244:82;7382:12;7397:71;7410:9;;::::0;::::1;:5:::0;:9:::1;:::i;:::-;7421:12;::::0;;;::::1;::::0;::::1;;:::i;:::-;7435:14;;::::0;::::1;:5:::0;:14:::1;:::i;:::-;7451:5;:16;;;7397:12;:71::i;:::-;7382:86:::0;-1:-1:-1;7519:14:73::1;7539:40;7382:86:::0;7562:16:::1;;::::0;::::1;:5:::0;:16:::1;:::i;7539:40::-;7518:61;;;7598:9;7593:105;;7632:25;::::0;2173::132;;;7632::73::1;::::0;2161:2:132;2146:18;7632:25:73::1;;;;;;;7675:8;;;;;7593:105;7748:20;7771:40;7795:14;;::::0;::::1;:5:::0;:14:::1;:::i;:::-;7788:22;::::0;::::1;:::i;:::-;7771:16;:40::i;:::-;7748:63;;7829:15;7825:286;;;7868:16;::::0;;;:10:::1;:16;::::0;;;;;::::1;;7864:233;;;7913:28;7929:5;7936:4;7913:28;;;;;;;:::i;:::-;;;;;;;;7963:8;;;;;;7864:233;8018:16;::::0;;;:10:::1;:16;::::0;;;;:23;;-1:-1:-1;;8018:23:73::1;8037:4;8018:23;::::0;;7864:233:::1;8126:12;::::0;8164::::1;::::0;;;::::1;::::0;::::1;;:::i;:::-;-1:-1:-1::0;;;;;8164:17:73::1;8182:14;;::::0;::::1;:5:::0;:14:::1;:::i;:::-;8164:33;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8125:72;;;;8216:7;8211:301;;8247:15;8243:162;;;8381:5;8362:16:::0;;;:10:::1;:16;::::0;;;;:24;;-1:-1:-1;;8362:24:73::1;::::0;;8243:162:::1;8472:25;8486:1;8489:7;8472:25;;;;;;;:::i;:::-;;;;;;;;8211:301;7027:1495;;;;;;6982:1540;7022:3;;6982:1540;;3924:194:84::0;-1:-1:-1;;;;;;;;;;;2464:16:105;2475:4;2464:10;:16::i;:::-;4020:20:84::1;:37:::0;;-1:-1:-1;;;;4020:37:84::1;-1:-1:-1::0;;;4020:37:84::1;::::0;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;4072:39:::1;::::0;158:38:132;;;4072:39:84::1;::::0;146:2:132;131:18;4072:39:84::1;14:188:132::0;10257:635:73;10463:16;-1:-1:-1;;;;;;;;;;;2464:16:105;2475:4;2464:10;:16::i;:::-;10445:7:73::1;2304:15:84;2311:7;2304:6;:15::i;:::-;2299:73;;2342:19;;-1:-1:-1::0;;;2342:19:84::1;;;;;;;;;;;2299:73;10528:177:73::2;::::0;;::::2;::::0;::::2;::::0;;10562:9:::2;::::0;-1:-1:-1;;;;;10562:9:73;;::::2;10528:177:::0;;::::2;::::0;;::::2;;::::0;;::::2;::::0;;;-1:-1:-1;;;;;10528:177:73;;::::2;::::0;;;;;;::::2;::::0;;;;10655:6:::2;::::0;-1:-1:-1;;;10655:6:73;::::2;;10528:177:::0;;;;10562:9;10675:20;-1:-1:-1;;;10675:20:73;::::2;::::0;;::::2;10528:177:::0;;;;10491:34:::2;10815:18:::0;;;:9:::2;:18:::0;;;;;10835:9;;;;::::2;::::0;;;;;10769:76;;-1:-1:-1;;;10769:76:73;;10528:177;;10562:9:::2;10780:12:::0;;::::2;::::0;;::::2;::::0;10769:37:::2;::::0;:76:::2;::::0;10528:177;;10769:76:::2;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10758:87;;10860:25;10876:8;10860:25;;;;2173::132::0;;2161:2;2146:18;;2027:177;10860:25:73::2;;;;;;;;10481:411;2490:1:105::1;10257:635:73::0;;;;;;;:::o;2495:1181:78:-;2643:6;;2585:4;;;;2635:20;;-1:-1:-1;;;2643:6:78;;-1:-1:-1;;;;;2643:6:78;2653:2;2635:20;:::i;:::-;2613:42;;2609:110;;-1:-1:-1;2679:5:78;;-1:-1:-1;2686:21:78;2671:37;;2609:110;2729:21;2753:31;2778:5;3797:66;;26780::132;3797::78;;;26768:79:132;26863:12;;;26856:28;;;3761:7:78;;26900:12:132;;3797:66:78;;;;;;;;;;;;3787:77;;;;;;3780:84;;3682:189;;;;2753:31;2729:55;;2795:18;2885:9;2880:751;2904:6;;-1:-1:-1;;;2904:6:78;;-1:-1:-1;;;;;2904:6:78;2900:10;;2880:751;;;2931:24;;2958:11;;2970:6;:1;2974:2;2970:6;:::i;:::-;2958:32;2978:5;:1;2982;2978:5;:::i;:::-;2977:12;;2987:2;2977:12;:::i;:::-;2958:32;;;;;;;:::i;:::-;2931:59;;;;3079:21;3102:24;3162:88;3196:13;3227:9;;3162:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3162:16:78;;-1:-1:-1;;;3162:88:78:i;:::-;-1:-1:-1;3078:172:78;;-1:-1:-1;3078:172:78;-1:-1:-1;3278:26:78;3269:5;:35;;;;;;;;:::i;:::-;;3265:78;;3314:5;3321:21;3306:37;;;;;;;;;;;;;3265:78;3378:10;-1:-1:-1;;;;;3361:27:78;:13;-1:-1:-1;;;;;3361:27:78;;3357:72;;3398:5;3405:23;3390:39;;;;;;;;;;;;;3357:72;-1:-1:-1;;;;;3480:22:78;;;;;;:7;:22;;;;;;;;3475:72;;3512:5;3519:27;3504:43;;;;;;;;;;;;;3475:72;-1:-1:-1;3607:13:78;-1:-1:-1;;;2912:3:78;;2880:751;;;;3648:4;3654:14;3640:29;;;;;;2495:1181;;;;;;;:::o;3689:165:84:-;-1:-1:-1;;;;;;;;;;;2464:16:105;2475:4;2464:10;:16::i;:::-;3777:12:84::1;:28:::0;;-1:-1:-1;;;;;;3777:28:84::1;;-1:-1:-1::0;;;;;3777:28:84;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;3820:27:::1;::::0;6939:51:132;;;3820:27:84::1;::::0;6927:2:132;6912:18;3820:27:84::1;6793:203:132::0;5002:165:84;-1:-1:-1;;;;;;;;;;;2464:16:105;2475:4;2464:10;:16::i;:::-;5119:26:84::1;::::0;::::1;;::::0;;;:20:::1;:26;::::0;;;;:41:::1;::::0;5148:12;;5119:41:::1;:::i;:::-;;5002:165:::0;;;;:::o;4883:137:73:-;4968:5;-1:-1:-1;;;;;;;;;;;3186:5:73;:18;:39;;;;792:21:84;3208:5:73;:17;3186:39;:68;;;;-1:-1:-1;;;;;;;;;;;3229:5:73;:25;3186:68;3182:382;;;3311:4;3320:10;3303:27;3299:87;;3357:14;;-1:-1:-1;;;3357:14:73;;;;;;;;;;;3299:87;3182:382;;;-1:-1:-1;;;;;;;;;;;3406:5:73;:19;3402:162;;3471:22;-1:-1:-1;;;;;;;;;;;3471:10:73;:22::i;3402:162::-;4985:28:::1;4997:5;5004:8;4985:11;:28::i;8769:292::-:0;-1:-1:-1;;;;;;;;;;;2464:16:105;2475:4;2464:10;:16::i;:::-;8896:31:73::1;-1:-1:-1::0;;;;;;;;;;;8922:4:73::1;8896:7;:31::i;:::-;8891:93;;8950:23;;-1:-1:-1::0;;;8950:23:73::1;;;;;;;;;;;8891:93;8993:61;::::0;-1:-1:-1;;;8993:61:73;;-1:-1:-1;;;;;14158:32:132;;;8993:61:73::1;::::0;::::1;14140:51:132::0;14207:18;;;14200:34;;;8993:47:73;::::1;::::0;::::1;::::0;14113:18:132;;8993:61:73::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;8769:292:::0;;;;:::o;14131:257::-;14289:7;14342:4;14348:7;14357:11;14370:9;;14325:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;14315:66;;;;;;14308:73;;14131:257;;;;;;;:::o;5254:863::-;5355:15;5334:6;:17;;;:36;5330:98;;5393:24;;-1:-1:-1;;;5393:24:73;;;;;;;;;;;5330:98;5466:4;5441:13;;;;;;;;:::i;:::-;-1:-1:-1;;;;;5441:30:73;;5437:100;;5512:13;;;;;;;;:::i;:::-;5494:32;;-1:-1:-1;;;5494:32:73;;-1:-1:-1;;;;;6957:32:132;;;5494::73;;;6939:51:132;6912:18;;5494:32:73;6793:203:132;5437:100:73;5550:17;5564:3;5550:17;:10;;;;:6;:10;:::i;:::-;:17;;;5546:81;;5605:10;;;;:6;:10;:::i;:::-;5590:26;;-1:-1:-1;;;5590:26:73;;11265:10:132;11253:23;;;5590:26:73;;;11235:42:132;11208:18;;5590:26:73;11091:192:132;5546:81:73;5675:12;5690:75;5703:10;;;;:6;:10;:::i;5690:75::-;5675:90;-1:-1:-1;5776:14:73;5796:41;5675:90;5819:17;;;;:6;:17;:::i;5796:41::-;5775:62;;;5852:9;5847:71;;5884:23;;-1:-1:-1;;;5884:23:73;;;;;;;;;;;5847:71;5931:16;;;;:10;:16;;;;;;;;5927:78;;;5970:24;;-1:-1:-1;;;5970:24:73;;;;;2173:25:132;;;2146:18;;5970:24:73;2027:177:132;5927:78:73;6015:16;;;;:10;:16;;;;;;;:23;;-1:-1:-1;;6015:23:73;6034:4;6015:23;;;6048:62;;-1:-1:-1;;;;;;;;;;;858:23:84;6082:15:73;;;;:6;:15;:::i;:::-;6071:38;;;;;;;:::i;:::-;6048:10;:62::i;11086:539::-;11310:11;-1:-1:-1;;;;;;;;;;;2464:16:105;2475:4;2464:10;:16::i;:::-;11292:7:73::1;2304:15:84;2311:7;2304:6;:15::i;:::-;2299:73;;2342:19;;-1:-1:-1::0;;;2342:19:84::1;;;;;;;;;;;2299:73;11380:135:73::2;::::0;;::::2;::::0;::::2;::::0;;11421:9:::2;::::0;-1:-1:-1;;;;;11421:9:73;;::::2;11380:135:::0;;;;::::2;;::::0;;::::2;::::0;;;;11465:6:::2;::::0;-1:-1:-1;;;11465:6:73;::::2;-1:-1:-1::0;;;;;11465:6:73::2;11380:135:::0;;;;11421:9;11485:20;-1:-1:-1;;;11485:20:73;::::2;;;11380:135:::0;;;;11590:10:::2;11580:21;;-1:-1:-1::0;11580:21:73;;;:9:::2;:21:::0;;;;;;;11531:87;;-1:-1:-1;;;11531:87:73;;11380:135;;11421:9:::2;11542:12:::0;;::::2;::::0;;::::2;::::0;11531:37:::2;::::0;:87:::2;::::0;11380:135;;11580:21;11603:4;;;;11609:8;;;;11531:87:::2;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11525:93:::0;11086:539;-1:-1:-1;;;;;;;;;;;11086:539:73:o;13474:500::-;13665:11;13647:7;2304:15:84;2311:7;2304:6;:15::i;:::-;2299:73;;2342:19;;-1:-1:-1;;;2342:19:84;;;;;;;;;;;2299:73;13735:135:73::1;::::0;;::::1;::::0;::::1;::::0;;13776:9:::1;::::0;-1:-1:-1;;;;;13776:9:73;;::::1;13735:135:::0;;;;::::1;;::::0;;::::1;::::0;;;;13820:6:::1;::::0;-1:-1:-1;;;13820:6:73;::::1;-1:-1:-1::0;;;;;13820:6:73::1;13735:135:::0;;;;13776:9;13840:20;-1:-1:-1;;;13840:20:73;::::1;;;13735:135:::0;;;;13939:10:::1;13929:21;;-1:-1:-1::0;13929:21:73;;;:9:::1;:21:::0;;;;;;;13886:81;;-1:-1:-1;;;13886:81:73;;13735:135;;13776:9:::1;13897:12:::0;;::::1;::::0;;::::1;::::0;13886:31:::1;::::0;:81:::1;::::0;13735:135;;13929:21;13952:4;;;;13958:8;;;;13886:81:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13880:87:::0;13474:500;-1:-1:-1;;;;;;;;;;13474:500:73:o;3199:103:105:-;3265:30;3276:4;735:10:117;3265::105;:30::i;896:222:44:-;-1:-1:-1;;;;;987:22:44;;983:129;;1025:19;1032:3;1037:6;1025;:19::i;:::-;896:222;;;:::o;983:129::-;1075:26;1081:6;1089:3;1094:6;1075:5;:26::i;2463:115:120:-;1474:19;:17;:19::i;:::-;2532:4:::1;2522:14:::0;;-1:-1:-1;;2522:14:120::1;::::0;::::1;::::0;;2551:20:::1;735:10:117::0;2558:12:120::1;2551:20;::::0;-1:-1:-1;;;;;6957:32:132;;;6939:51;;6927:2;6912:18;2551:20:120::1;;;;;;;2463:115::o:0;2710:117::-;1721:16;:14;:16::i;:::-;2768:7:::1;:15:::0;;-1:-1:-1;;2768:15:120::1;::::0;;2798:22:::1;735:10:117::0;2807:12:120::1;656:96:117::0;5627:259:84;5707:4;-1:-1:-1;;;;;;;;;;;5727:5:84;:18;:47;;;;;5750:24;5758:5;5765:8;5750:7;:24::i;:::-;5749:25;5727:47;5723:93;;;5792:13;5790:15;;5792:13;;5790:15;;-1:-1:-1;;;5790:15:84;;-1:-1:-1;;;;;5790:15:84;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;5790:15:84;;;;;-1:-1:-1;;;;;5790:15:84;;;;;;5723:93;5825:33;5842:5;5849:8;5825:16;:33::i;:::-;-1:-1:-1;5875:4:84;;5627:259;-1:-1:-1;;;5627:259:84:o;1591:529:78:-;-1:-1:-1;;;;;1665:16:78;;;;;;:7;:16;;;;;;:27;;;:16;;;;:27;;;1661:107;;1715:42;;-1:-1:-1;;;1715:42:78;;-1:-1:-1;;;;;25758:32:132;;1715:42:78;;;25740:51:132;25834:14;;25827:22;25807:18;;;25800:50;25713:18;;1715:42:78;25572:284:132;1661:107:78;-1:-1:-1;;;;;1777:16:78;;;;;;:7;:16;;;;;:26;;-1:-1:-1;;1777:26:78;;;;;;;;1834:41;;1861:10;;:14;;1874:1;;-1:-1:-1;;;;;1861:10:78;:14;:::i;:::-;1834:41;;;1844:10;;:14;;-1:-1:-1;;;;;1844:10:78;;:14;:::i;:::-;1902:6;;1813:62;;-1:-1:-1;;;;;;;;;1902:6:78;;;;;;1922:21;;;-1:-1:-1;1918:117:78;;;1966:58;;-1:-1:-1;;;1966:58:78;;-1:-1:-1;;;;;26459:15:132;;;1966:58:78;;;26441:34:132;26511:15;;26491:18;;;26484:43;26377:18;;1966:58:78;26234:299:132;1918:117:78;2044:10;:24;;-1:-1:-1;;2044:24:78;-1:-1:-1;;;;;2044:24:78;;;;;2083:30;;;-1:-1:-1;;;;;25758:32:132;;25740:51;;25834:14;;25827:22;25822:2;25807:18;;25800:50;2083:30:78;;25713:18:132;2083:30:78;25572:284:132;2126:363:78;2185:7;-1:-1:-1;;;;;2185:12:78;2196:1;2185:12;2181:73;;2220:23;;-1:-1:-1;;;2220:23:78;;;;;;;;;;;2181:73;2284:10;;-1:-1:-1;;;;;2284:10:78;;;;2308:21;;;;2304:117;;;2352:58;;-1:-1:-1;;;2352:58:78;;-1:-1:-1;;;;;26459:15:132;;;2352:58:78;;;26441:34:132;26511:15;;26491:18;;;26484:43;26377:18;;2352:58:78;26234:299:132;2304:117:78;2430:6;:16;;-1:-1:-1;;2430:16:78;-1:-1:-1;;;;;;;;2430:16:78;;;;;;;;;;;;2461:21;;1781:50:132;;;2461:21:78;;1769:2:132;1754:18;2461:21:78;1637:200:132;14866:492:73;14936:4;-1:-1:-1;;;;;;15026:45:73;;-1:-1:-1;;;15026:45:73;;;;:152;;-1:-1:-1;;;;;;;15135:43:73;;-1:-1:-1;;;15135:43:73;;15026:152;:278;;;;-1:-1:-1;;;;;;;15242:62:73;;-1:-1:-1;;;15242:62:73;;15007:297;14866:492;-1:-1:-1;;14866:492:73:o;2129:778:122:-;2232:17;2251:16;2269:14;2299:9;:16;2319:2;2299:22;2295:606;;2604:4;2589:20;;2583:27;2653:4;2638:20;;2632:27;2710:4;2695:20;;2689:27;2337:9;2681:36;2751:25;2762:4;2681:36;2583:27;2632;2751:10;:25::i;:::-;2744:32;;;;;;;;;;;2295:606;-1:-1:-1;;2872:16:122;;2823:1;;-1:-1:-1;2827:35:122;;2295:606;2129:778;;;;;:::o;6056:260:84:-;6137:4;-1:-1:-1;;;;;;;;;;;6157:5:84;:18;:46;;;;;6179:24;6187:5;6194:8;6179:7;:24::i;:::-;6153:92;;;6221:13;6219:15;;6221:13;;6219:15;;-1:-1:-1;;;6219:15:84;;-1:-1:-1;;;;;6219:15:84;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;6219:15:84;;;;;-1:-1:-1;;;;;6219:15:84;;;;;;6153:92;6254:34;6272:5;6279:8;6254:17;:34::i;3432:197:105:-;3520:22;3528:4;3534:7;3520;:22::i;:::-;3515:108;;3565:47;;-1:-1:-1;;;3565:47:105;;-1:-1:-1;;;;;14158:32:132;;3565:47:105;;;14140:51:132;14207:18;;;14200:34;;;14113:18;;3565:47:105;13966:274:132;438:252:44;-1:-1:-1;;;;;506:19:44;;502:58;;534:26;;-1:-1:-1;;;534:26:44;;;;;;;;;;;502:58;571:12;589:3;-1:-1:-1;;;;;589:8:44;606:6;589:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;570:48;;;633:7;628:55;;649:34;;-1:-1:-1;;;649:34:44;;-1:-1:-1;;;;;14158:32:132;;649:34:44;;;14140:51:132;14207:18;;;14200:34;;;14113:18;;649:34:44;13966:274:132;696:194:44;-1:-1:-1;;;;;779:19:44;;775:58;;807:26;;-1:-1:-1;;;807:26:44;;;;;;;;;;;775:58;843:40;-1:-1:-1;;;;;843:27:44;;871:3;876:6;843:27;:40::i;2002:128:120:-;1920:7;;;;2063:61;;;2098:15;;-1:-1:-1;;;2098:15:120;;;;;;;;;;;2063:61;2002:128::o;2202:126::-;1920:7;;;;2260:62;;2296:15;;-1:-1:-1;;;2296:15:120;;;;;;;;;;;6179:316:105;6256:4;6277:22;6285:4;6291:7;6277;:22::i;:::-;6272:217;;6315:6;:12;;;;;;;;;;;-1:-1:-1;;;;;6315:29:105;;;;;;;;;:36;;-1:-1:-1;;6315:36:105;6347:4;6315:36;;;6397:12;735:10:117;;656:96;6397:12:105;-1:-1:-1;;;;;6370:40:105;6388:7;-1:-1:-1;;;;;6370:40:105;6382:4;6370:40;;;;;;;;;;-1:-1:-1;6431:4:105;6424:11;;6272:217;-1:-1:-1;6473:5:105;6466:12;;5203:1551:122;5329:17;;;6283:66;6270:79;;6266:164;;;-1:-1:-1;6381:1:122;;-1:-1:-1;6385:30:122;;-1:-1:-1;6417:1:122;6365:54;;6266:164;6541:24;;;6524:14;6541:24;;;;;;;;;27837:25:132;;;27910:4;27898:17;;27878:18;;;27871:45;;;;27932:18;;;27925:34;;;27975:18;;;27968:34;;;6541:24:122;;27809:19:132;;6541:24:122;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6541:24:122;;-1:-1:-1;;6541:24:122;;;-1:-1:-1;;;;;;;6579:20:122;;6575:113;;-1:-1:-1;6631:1:122;;-1:-1:-1;6635:29:122;;-1:-1:-1;6631:1:122;;-1:-1:-1;6615:62:122;;6575:113;6706:6;-1:-1:-1;6714:20:122;;-1:-1:-1;6714:20:122;;-1:-1:-1;5203:1551:122;;;;;;;;;:::o;6730:317:105:-;6808:4;6828:22;6836:4;6842:7;6828;:22::i;:::-;6824:217;;;6898:5;6866:12;;;;;;;;;;;-1:-1:-1;;;;;6866:29:105;;;;;;;;;;:37;;-1:-1:-1;;6866:37:105;;;6922:40;735:10:117;;6866:12:105;;6922:40;;6898:5;6922:40;-1:-1:-1;6983:4:105;6976:11;;1271:160:115;1380:43;;;-1:-1:-1;;;;;14158:32:132;;1380:43:115;;;14140:51:132;14207:18;;;;14200:34;;;1380:43:115;;;;;;;;;;14113:18:132;;;;1380:43:115;;;;;;;;;-1:-1:-1;;;;;1380:43:115;-1:-1:-1;;;1380:43:115;;;7968:11;;1353:71;;1373:5;;1380:43;;-1:-1:-1;;;;1380:43:115;-1:-1:-1;;7968:11:115;-1:-1:-1;1373:5:115;7934;7929:60;8041:7;8031:176;;8085:4;8079:11;8130:16;8127:1;8122:3;8107:40;8176:16;8171:3;8164:29;8031:176;-1:-1:-1;;8284:1:115;8278:8;8234:16;;-1:-1:-1;8310:15:115;;:68;;8362:11;8377:1;8362:16;;8310:68;;;-1:-1:-1;;;;;8328:26:115;;;:31;8310:68;8306:146;;;8401:40;;-1:-1:-1;;;8401:40:115;;-1:-1:-1;;;;;6957:32:132;;8401:40:115;;;6939:51:132;6912:18;;8401:40:115;6793:203:132;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;207:131:132;-1:-1:-1;;;;;282:31:132;;272:42;;262:70;;328:1;325;318:12;343:456;420:6;428;436;489:2;477:9;468:7;464:23;460:32;457:52;;;505:1;502;495:12;457:52;544:9;531:23;563:31;588:5;563:31;:::i;:::-;613:5;-1:-1:-1;670:2:132;655:18;;642:32;683:33;642:32;683:33;:::i;:::-;343:456;;735:7;;-1:-1:-1;;;789:2:132;774:18;;;;761:32;;343:456::o;804:286::-;862:6;915:2;903:9;894:7;890:23;886:32;883:52;;;931:1;928;921:12;883:52;957:23;;-1:-1:-1;;;;;;1009:32:132;;999:43;;989:71;;1056:1;1053;1046:12;989:71;1079:5;804:286;-1:-1:-1;;;804:286:132:o;1287:160::-;1352:20;;1408:13;;1401:21;1391:32;;1381:60;;1437:1;1434;1427:12;1452:180;1508:6;1561:2;1549:9;1540:7;1536:23;1532:32;1529:52;;;1577:1;1574;1567:12;1529:52;1600:26;1616:9;1600:26;:::i;1842:180::-;1901:6;1954:2;1942:9;1933:7;1929:23;1925:32;1922:52;;;1970:1;1967;1960:12;1922:52;-1:-1:-1;1993:23:132;;1842:180;-1:-1:-1;1842:180:132:o;2209:163::-;2276:20;;2336:10;2325:22;;2315:33;;2305:61;;2362:1;2359;2352:12;2377:184;2435:6;2488:2;2476:9;2467:7;2463:23;2459:32;2456:52;;;2504:1;2501;2494:12;2456:52;2527:28;2545:9;2527:28;:::i;2566:639::-;2733:2;2785:21;;;2855:13;;2758:18;;;2877:22;;;2704:4;;2733:2;2956:15;;;;2930:2;2915:18;;;2704:4;2999:180;3013:6;3010:1;3007:13;2999:180;;;3078:13;;3093:4;3074:24;3062:37;;3154:15;;;;3119:12;;;;3035:1;3028:9;2999:180;;;-1:-1:-1;3196:3:132;;2566:639;-1:-1:-1;;;;;;2566:639:132:o;3210:247::-;3269:6;3322:2;3310:9;3301:7;3297:23;3293:32;3290:52;;;3338:1;3335;3328:12;3290:52;3377:9;3364:23;3396:31;3421:5;3396:31;:::i;3462:315::-;3530:6;3538;3591:2;3579:9;3570:7;3566:23;3562:32;3559:52;;;3607:1;3604;3597:12;3559:52;3643:9;3630:23;3620:33;;3703:2;3692:9;3688:18;3675:32;3716:31;3741:5;3716:31;:::i;:::-;3766:5;3756:15;;;3462:315;;;;;:::o;3782:171::-;3849:20;;-1:-1:-1;;;;;3898:30:132;;3888:41;;3878:69;;3943:1;3940;3933:12;3958:347;4009:8;4019:6;4073:3;4066:4;4058:6;4054:17;4050:27;4040:55;;4091:1;4088;4081:12;4040:55;-1:-1:-1;4114:20:132;;-1:-1:-1;;;;;4146:30:132;;4143:50;;;4189:1;4186;4179:12;4143:50;4226:4;4218:6;4214:17;4202:29;;4278:3;4271:4;4262:6;4254;4250:19;4246:30;4243:39;4240:59;;;4295:1;4292;4285:12;4240:59;3958:347;;;;;:::o;4310:689::-;4405:6;4413;4421;4429;4437;4490:3;4478:9;4469:7;4465:23;4461:33;4458:53;;;4507:1;4504;4497:12;4458:53;4530:28;4548:9;4530:28;:::i;:::-;4520:38;;4577:37;4610:2;4599:9;4595:18;4577:37;:::i;:::-;4567:47;;4664:2;4653:9;4649:18;4636:32;4677:31;4702:5;4677:31;:::i;:::-;4727:5;-1:-1:-1;4783:2:132;4768:18;;4755:32;-1:-1:-1;;;;;4799:30:132;;4796:50;;;4842:1;4839;4832:12;4796:50;4881:58;4931:7;4922:6;4911:9;4907:22;4881:58;:::i;:::-;4310:689;;;;-1:-1:-1;4310:689:132;;-1:-1:-1;4958:8:132;;4855:84;4310:689;-1:-1:-1;;;4310:689:132:o;5186:315::-;5251:6;5259;5312:2;5300:9;5291:7;5287:23;5283:32;5280:52;;;5328:1;5325;5318:12;5280:52;5367:9;5354:23;5386:31;5411:5;5386:31;:::i;:::-;5436:5;-1:-1:-1;5460:35:132;5491:2;5476:18;;5460:35;:::i;:::-;5450:45;;5186:315;;;;;:::o;5506:649::-;5626:6;5634;5687:2;5675:9;5666:7;5662:23;5658:32;5655:52;;;5703:1;5700;5693:12;5655:52;5743:9;5730:23;-1:-1:-1;;;;;5813:2:132;5805:6;5802:14;5799:34;;;5829:1;5826;5819:12;5799:34;5867:6;5856:9;5852:22;5842:32;;5912:7;5905:4;5901:2;5897:13;5893:27;5883:55;;5934:1;5931;5924:12;5883:55;5974:2;5961:16;6000:2;5992:6;5989:14;5986:34;;;6016:1;6013;6006:12;5986:34;6069:7;6064:2;6054:6;6051:1;6047:14;6043:2;6039:23;6035:32;6032:45;6029:65;;;6090:1;6087;6080:12;6029:65;6121:2;6113:11;;;;;6143:6;;-1:-1:-1;5506:649:132;;-1:-1:-1;;;;5506:649:132:o;6160:159::-;6227:20;;6287:6;6276:18;;6266:29;;6256:57;;6309:1;6306;6299:12;6324:464;6407:6;6415;6423;6431;6484:3;6472:9;6463:7;6459:23;6455:33;6452:53;;;6501:1;6498;6491:12;6452:53;6524:28;6542:9;6524:28;:::i;:::-;6514:38;;6571:37;6604:2;6593:9;6589:18;6571:37;:::i;:::-;6561:47;;6627:37;6660:2;6649:9;6645:18;6627:37;:::i;:::-;6617:47;;6714:2;6703:9;6699:18;6686:32;6727:31;6752:5;6727:31;:::i;:::-;6324:464;;;;-1:-1:-1;6324:464:132;;-1:-1:-1;;6324:464:132:o;7001:184::-;7059:6;7112:2;7100:9;7091:7;7087:23;7083:32;7080:52;;;7128:1;7125;7118:12;7080:52;7151:28;7169:9;7151:28;:::i;7190:163::-;7257:5;7302:3;7293:6;7288:3;7284:16;7280:26;7277:46;;;7319:1;7316;7309:12;7277:46;-1:-1:-1;7341:6:132;7190:163;-1:-1:-1;7190:163:132:o;7358:678::-;7471:6;7479;7487;7540:2;7528:9;7519:7;7515:23;7511:32;7508:52;;;7556:1;7553;7546:12;7508:52;7596:9;7583:23;-1:-1:-1;;;;;7666:2:132;7658:6;7655:14;7652:34;;;7682:1;7679;7672:12;7652:34;7705:74;7771:7;7762:6;7751:9;7747:22;7705:74;:::i;:::-;7695:84;;7832:2;7821:9;7817:18;7804:32;7788:48;;7861:2;7851:8;7848:16;7845:36;;;7877:1;7874;7867:12;7845:36;;7916:60;7968:7;7957:8;7946:9;7942:24;7916:60;:::i;:::-;7358:678;;7995:8;;-1:-1:-1;7890:86:132;;-1:-1:-1;;;;7358:678:132:o;8440:388::-;8524:8;8534:6;8588:3;8581:4;8573:6;8569:17;8565:27;8555:55;;8606:1;8603;8596:12;8555:55;-1:-1:-1;8629:20:132;;-1:-1:-1;;;;;8661:30:132;;8658:50;;;8704:1;8701;8694:12;8658:50;8741:4;8733:6;8729:17;8717:29;;8801:3;8794:4;8784:6;8781:1;8777:14;8769:6;8765:27;8761:38;8758:47;8755:67;;;8818:1;8815;8808:12;8833:491;8952:6;8960;9013:2;9001:9;8992:7;8988:23;8984:32;8981:52;;;9029:1;9026;9019:12;8981:52;9069:9;9056:23;-1:-1:-1;;;;;9094:6:132;9091:30;9088:50;;;9134:1;9131;9124:12;9088:50;9173:91;9256:7;9247:6;9236:9;9232:22;9173:91;:::i;:::-;9283:8;;9147:117;;-1:-1:-1;8833:491:132;-1:-1:-1;;;;8833:491:132:o;9329:184::-;9387:6;9440:2;9428:9;9419:7;9415:23;9411:32;9408:52;;;9456:1;9453;9446:12;9408:52;9479:28;9497:9;9479:28;:::i;9518:477::-;9597:6;9605;9613;9666:2;9654:9;9645:7;9641:23;9637:32;9634:52;;;9682:1;9679;9672:12;9634:52;9718:9;9705:23;9695:33;;9779:2;9768:9;9764:18;9751:32;-1:-1:-1;;;;;9798:6:132;9795:30;9792:50;;;9838:1;9835;9828:12;9792:50;9877:58;9927:7;9918:6;9907:9;9903:22;9877:58;:::i;10000:127::-;10061:10;10056:3;10052:20;10049:1;10042:31;10092:4;10089:1;10082:15;10116:4;10113:1;10106:15;10132:421;10335:14;;10328:22;10310:41;;10298:2;10283:18;;10381:1;10370:13;;10360:144;;10426:10;10421:3;10417:20;10414:1;10407:31;10461:4;10458:1;10451:15;10489:4;10486:1;10479:15;10360:144;10540:6;10535:2;10524:9;10520:18;10513:34;10132:421;;;;;:::o;10558:528::-;10650:6;10658;10666;10719:2;10707:9;10698:7;10694:23;10690:32;10687:52;;;10735:1;10732;10725:12;10687:52;10758:28;10776:9;10758:28;:::i;:::-;10748:38;;10837:2;10826:9;10822:18;10809:32;-1:-1:-1;;;;;10856:6:132;10853:30;10850:50;;;10896:1;10893;10886:12;10850:50;10935:91;11018:7;11009:6;10998:9;10994:22;10935:91;:::i;11757:685::-;11853:6;11861;11869;11877;11885;11938:3;11926:9;11917:7;11913:23;11909:33;11906:53;;;11955:1;11952;11945:12;11906:53;11978:28;11996:9;11978:28;:::i;:::-;11968:38;;12056:2;12045:9;12041:18;12028:32;12069:31;12094:5;12069:31;:::i;:::-;12119:5;-1:-1:-1;12175:2:132;12160:18;;12147:32;-1:-1:-1;;;;;12191:30:132;;12188:50;;;12234:1;12231;12224:12;12188:50;12273:58;12323:7;12314:6;12303:9;12299:22;12273:58;:::i;:::-;11757:685;;;;-1:-1:-1;12350:8:132;12432:2;12417:18;12404:32;;11757:685;-1:-1:-1;;;;11757:685:132:o;12447:369::-;12539:6;12592:2;12580:9;12571:7;12567:23;12563:32;12560:52;;;12608:1;12605;12598:12;12560:52;12648:9;12635:23;-1:-1:-1;;;;;12673:6:132;12670:30;12667:50;;;12713:1;12710;12703:12;12667:50;12736:74;12802:7;12793:6;12782:9;12778:22;12736:74;:::i;:::-;12726:84;12447:369;-1:-1:-1;;;;12447:369:132:o;12821:1140::-;12940:6;12948;12956;12964;12972;12980;12988;13041:3;13029:9;13020:7;13016:23;13012:33;13009:53;;;13058:1;13055;13048:12;13009:53;13097:9;13084:23;13116:31;13141:5;13116:31;:::i;:::-;13166:5;-1:-1:-1;13222:2:132;13207:18;;13194:32;-1:-1:-1;;;;;13275:14:132;;;13272:34;;;13302:1;13299;13292:12;13272:34;13341:58;13391:7;13382:6;13371:9;13367:22;13341:58;:::i;:::-;13418:8;;-1:-1:-1;13315:84:132;-1:-1:-1;13506:2:132;13491:18;;13478:32;;-1:-1:-1;13522:16:132;;;13519:36;;;13551:1;13548;13541:12;13519:36;13590:60;13642:7;13631:8;13620:9;13616:24;13590:60;:::i;:::-;13669:8;;-1:-1:-1;13564:86:132;-1:-1:-1;13757:2:132;13742:18;;13729:32;;-1:-1:-1;13773:16:132;;;13770:36;;;13802:1;13799;13792:12;13770:36;;13841:60;13893:7;13882:8;13871:9;13867:24;13841:60;:::i;:::-;12821:1140;;;;-1:-1:-1;12821:1140:132;;-1:-1:-1;12821:1140:132;;;;13815:86;;-1:-1:-1;;;12821:1140:132:o;14625:556::-;14715:1;14711;14706:3;14702:11;14698:19;14756:2;14748:5;14742:12;14738:21;14733:3;14726:34;14821:10;14813:4;14806:5;14802:16;14796:23;14792:40;14785:4;14780:3;14776:14;14769:64;14879:4;14872:5;14868:16;14862:23;-1:-1:-1;;;;;14972:2:132;14958:12;14954:21;14947:4;14942:3;14938:14;14931:45;15037:2;15029:4;15022:5;15018:16;15012:23;15008:32;15001:4;14996:3;14992:14;14985:56;15102:2;15094:4;15087:5;15083:16;15077:23;15073:32;15066:4;15061:3;15057:14;15050:56;;;;15167:6;15159:4;15152:5;15148:16;15142:23;15138:36;15131:4;15126:3;15122:14;15115:60;14625:556;;:::o;15186:316::-;15274:12;-1:-1:-1;;;;;15307:34:132;;15295:47;;15382:2;15378:18;;;15398:6;15374:31;15367:4;15358:14;;15351:55;15444:2;15440:18;;;;-1:-1:-1;;;;;15436:59:132;15422:12;;15415:81;15186:316::o;15507:266::-;15595:6;15590:3;15583:19;15647:6;15640:5;15633:4;15628:3;15624:14;15611:43;-1:-1:-1;15699:1:132;15674:16;;;15692:4;15670:27;;;15663:38;;;;15755:2;15734:15;;;-1:-1:-1;;15730:29:132;15721:39;;;15717:50;;15507:266::o;15778:565::-;16059:4;16088:3;16100:46;16136:9;16128:6;16100:46;:::i;:::-;16155:64;16214:3;16203:9;16199:19;16191:6;16155:64;:::i;:::-;16256:2;16250:3;16239:9;16235:19;16228:31;16276:61;16333:2;16322:9;16318:18;16310:6;16302;16276:61;:::i;16348:184::-;16418:6;16471:2;16459:9;16450:7;16446:23;16442:32;16439:52;;;16487:1;16484;16477:12;16439:52;-1:-1:-1;16510:16:132;;16348:184;-1:-1:-1;16348:184:132:o;16537:127::-;16598:10;16593:3;16589:20;16586:1;16579:31;16629:4;16626:1;16619:15;16653:4;16650:1;16643:15;16669:188;16737:20;;-1:-1:-1;;;;;16786:46:132;;16776:57;;16766:85;;16847:1;16844;16837:12;16862:186;16921:6;16974:2;16962:9;16953:7;16949:23;16945:32;16942:52;;;16990:1;16987;16980:12;16942:52;17013:29;17032:9;17013:29;:::i;17053:1054::-;17300:2;17352:21;;;17325:18;;;17408:22;;;17271:4;;17449:2;17467:18;;;17508:6;17271:4;17542:539;17556:6;17553:1;17550:13;17542:539;;;17648:10;17621:25;17639:6;17621:25;:::i;:::-;17617:42;17612:3;17605:55;-1:-1:-1;;;;;17698:34:132;17728:2;17720:6;17716:15;17698:34;:::i;:::-;17694:59;17689:2;17684:3;17680:12;17673:81;17828:6;17792:34;17822:2;17814:6;17810:15;17792:34;:::i;:::-;17788:47;17783:2;17778:3;17774:12;17767:69;17859:4;-1:-1:-1;;;;;17901:35:132;17932:2;17924:6;17920:15;17901:35;:::i;:::-;17897:76;17883:12;;;17876:98;17997:4;18021:12;;;;18056:15;;;;;17578:1;17571:9;17542:539;;;-1:-1:-1;18098:3:132;;17053:1054;-1:-1:-1;;;;;;;17053:1054:132:o;18112:422::-;18153:3;18191:5;18185:12;18218:6;18213:3;18206:19;18243:1;18253:162;18267:6;18264:1;18261:13;18253:162;;;18329:4;18385:13;;;18381:22;;18375:29;18357:11;;;18353:20;;18346:59;18282:12;18253:162;;;18257:3;18460:1;18453:4;18444:6;18439:3;18435:16;18431:27;18424:38;18523:4;18516:2;18512:7;18507:2;18499:6;18495:15;18491:29;18486:3;18482:39;18478:50;18471:57;;;18112:422;;;;:::o;18539:538::-;18810:4;18839:3;18851:46;18887:9;18879:6;18851:46;:::i;:::-;18906:64;18965:3;18954:9;18950:19;18942:6;18906:64;:::i;:::-;19007:2;19001:3;18990:9;18986:19;18979:31;19027:44;19067:2;19056:9;19052:18;19044:6;19027:44;:::i;:::-;19019:52;18539:538;-1:-1:-1;;;;;;18539:538:132:o;19082:331::-;19181:4;19239:11;19226:25;19333:3;19329:8;19318;19302:14;19298:29;19294:44;19274:18;19270:69;19260:97;;19353:1;19350;19343:12;19260:97;19374:33;;;;;19082:331;-1:-1:-1;;19082:331:132:o;19418:521::-;19495:4;19501:6;19561:11;19548:25;19655:2;19651:7;19640:8;19624:14;19620:29;19616:43;19596:18;19592:68;19582:96;;19674:1;19671;19664:12;19582:96;19701:33;;19753:20;;;-1:-1:-1;;;;;;19785:30:132;;19782:50;;;19828:1;19825;19818:12;19782:50;19861:4;19849:17;;-1:-1:-1;19892:14:132;19888:27;;;19878:38;;19875:58;;;19929:1;19926;19919:12;19944:323;-1:-1:-1;;;;;;20064:19:132;;20140:11;;;;20171:1;20163:10;;20160:101;;;20248:2;20242;20235:3;20232:1;20228:11;20225:1;20221:19;20217:28;20213:2;20209:37;20205:46;20196:55;;20160:101;;;19944:323;;;;:::o;20272:500::-;20330:5;20337:6;20397:3;20384:17;20483:2;20479:7;20468:8;20452:14;20448:29;20444:43;20424:18;20420:68;20410:96;;20502:1;20499;20492:12;20410:96;20530:33;;20634:4;20621:18;;;-1:-1:-1;20582:21:132;;-1:-1:-1;;;;;;20651:30:132;;20648:50;;;20694:1;20691;20684:12;20648:50;20741:6;20725:14;20721:27;20714:5;20710:39;20707:59;;;20762:1;20759;20752:12;20777:1079;20998:2;20987:9;20980:21;21068:10;21041:25;21059:6;21041:25;:::i;:::-;21037:42;21032:2;21021:9;21017:18;21010:70;20961:4;21127;21119:6;21115:17;21102:31;21142;21167:5;21142:31;:::i;:::-;-1:-1:-1;;;;;21209:31:132;21204:2;21189:18;;21182:59;21284:55;21335:2;21323:15;;21327:6;21284:55;:::i;:::-;21376:4;21370:3;21359:9;21355:19;21348:33;21404:74;21473:3;21462:9;21458:19;21444:12;21430;21404:74;:::i;:::-;21390:88;;;21541:2;21533:6;21529:15;21516:29;21509:4;21498:9;21494:20;21487:59;21593:56;21644:3;21636:6;21632:16;21624:6;21593:56;:::i;:::-;21690:22;;;-1:-1:-1;;21686:36:132;21680:3;21665:19;;21658:65;21740;21694:6;21782:14;21766;21740:65;:::i;:::-;21732:73;;;;;21843:6;21836:4;21825:9;21821:20;21814:36;20777:1079;;;;;:::o;21861:271::-;22044:6;22036;22031:3;22018:33;22000:3;22070:16;;22095:13;;;22070:16;21861:271;-1:-1:-1;21861:271:132:o;22137:288::-;22312:6;22301:9;22294:25;22355:2;22350;22339:9;22335:18;22328:30;22275:4;22375:44;22415:2;22404:9;22400:18;22392:6;22375:44;:::i;22430:127::-;22491:10;22486:3;22482:20;22479:1;22472:31;22522:4;22519:1;22512:15;22546:4;22543:1;22536:15;22562:168;22635:9;;;22666;;22683:15;;;22677:22;;22663:37;22653:71;;22704:18;;:::i;22735:125::-;22800:9;;;22821:10;;;22818:36;;;22834:18;;:::i;22865:331::-;22970:9;22981;23023:8;23011:10;23008:24;23005:44;;;23045:1;23042;23035:12;23005:44;23074:6;23064:8;23061:20;23058:40;;;23094:1;23091;23084:12;23058:40;-1:-1:-1;;23120:23:132;;;23165:25;;;;;-1:-1:-1;22865:331:132:o;23496:556::-;23778:10;23773:3;23769:20;23760:6;23755:3;23751:16;23747:43;23742:3;23735:56;23845:26;23841:31;23832:6;23828:2;23824:15;23820:53;23816:1;23811:3;23807:11;23800:74;23904:6;23899:2;23894:3;23890:12;23883:28;23955:6;23947;23942:2;23937:3;23933:12;23920:42;23717:3;23985:16;;24003:2;23981:25;24015:13;;;23981:25;23496:556;-1:-1:-1;;;;23496:556:132:o;24317:1036::-;24668:4;24697:3;24736:1;24732;24727:3;24723:11;24719:19;24784:2;24775:6;24769:13;24765:22;24754:9;24747:41;24856:2;24848:4;24840:6;24836:17;24830:24;24826:33;24819:4;24808:9;24804:20;24797:63;;-1:-1:-1;;;;;24920:4:132;24912:6;24908:17;24902:24;24898:49;24891:4;24880:9;24876:20;24869:79;25016:6;25008:4;25000:6;24996:17;24990:24;24986:37;24979:4;24968:9;24964:20;24957:67;25033:64;25092:3;25081:9;25077:19;25069:6;25033:64;:::i;:::-;25134:2;25128:3;25117:9;25113:19;25106:31;25160:61;25217:2;25206:9;25202:18;25194:6;25186;25160:61;:::i;:::-;25146:75;;25270:9;25262:6;25258:22;25252:3;25241:9;25237:19;25230:51;25298:49;25340:6;25332;25324;25298:49;:::i;:::-;25290:57;24317:1036;-1:-1:-1;;;;;;;;;24317:1036:132:o;25358:209::-;25396:3;-1:-1:-1;;;;;25477:2:132;25470:5;25466:14;25504:2;25495:7;25492:15;25489:41;;25510:18;;:::i;:::-;25559:1;25546:15;;25358:209;-1:-1:-1;;;25358:209:132:o;25861:183::-;-1:-1:-1;;;;;25980:10:132;;;25968;;;25964:27;;26003:12;;;26000:38;;;26018:18;;:::i;:::-;26000:38;25861:183;;;;:::o;26049:180::-;-1:-1:-1;;;;;26154:10:132;;;26166;;;26150:27;;26189:11;;;26186:37;;;26203:18;;:::i;26923:193::-;26961:3;-1:-1:-1;;;;;26998:5:132;26994:30;27043:7;27033:41;;27054:18;;:::i;:::-;-1:-1:-1;;27090:20:132;;26923:193;-1:-1:-1;;26923:193:132:o", - "linkReferences": {}, - "immutableReferences": { - "17240": [ - { "start": 1901, "length": 32 }, - { "start": 4784, "length": 32 }, - { "start": 7064, "length": 32 } - ], - "17242": [ - { "start": 2077, "length": 32 }, - { "start": 7514, "length": 32 }, - { "start": 7823, "length": 32 } - ] - } - }, - "methodIdentifiers": { - "DEFAULT_ADMIN_ROLE()": "a217fddf", - "allowlistSize()": "d2ae2104", - "assignJob((uint32,bytes,bytes32,uint64,address),bytes)": "95d376d7", - "assignJob(address,bytes,bytes,bytes)": "f42ed2ed", - "assignJob(uint16,uint16,uint64,address)": "c5e193cd", - "defaultMultiplierBps()": "00bf2e80", - "dstConfig(uint32)": "9e944965", - "execute((uint32,address,bytes,uint256,bytes)[])": "b143044b", - "getFee(address,bytes,bytes,bytes)": "fdb9b0f1", - "getFee(uint16,uint16,uint64,address)": "5553fb8e", - "getFee(uint32,uint64,address,bytes)": "30bb3aac", - "getRoleAdmin(bytes32)": "248a9ca3", - "getSupportedOptionTypes(uint32)": "26e67a37", - "grantRole(bytes32,address)": "2f2ff15d", - "hasAcl(address)": "2de11376", - "hasRole(bytes32,address)": "91d14854", - "hashCallData(uint32,address,bytes,uint256)": "f010cb23", - "localEidV2()": "e395eb5c", - "paused()": "5c975abb", - "priceFeed()": "741bef1a", - "quorum()": "1703a018", - "quorumChangeAdmin((uint32,address,bytes,uint256,bytes))": "f3b4ebd0", - "renounceRole(bytes32,address)": "36568abe", - "revokeRole(bytes32,address)": "d547741f", - "setDefaultMultiplierBps(uint16)": "c358de0a", - "setDstConfig((uint32,uint64,uint16,uint128)[])": "52d3b871", - "setPaused(bool)": "16c38b3c", - "setPriceFeed(address)": "724e78da", - "setQuorum(uint64)": "8585c945", - "setSigner(address,bool)": "31cb6105", - "setSupportedOptionTypes(uint32,uint8[])": "cd88b903", - "setWorkerFeeLib(address)": "c7b2370b", - "signerSize()": "fd62e750", - "signers(address)": "736c0d5b", - "supportsInterface(bytes4)": "01ffc9a7", - "usedHashes(bytes32)": "aef18bf7", - "verifySignatures(bytes32,bytes)": "c7a823e0", - "vid()": "cf34c768", - "withdrawFee(address,address,uint256)": "1095b6d7", - "withdrawFeeFromUlnV2(address,address,uint256)": "dafe0ccc", - "withdrawToken(address,address,uint256)": "01e33667", - "workerFeeLib()": "c416aa51" - }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_localEidV2\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"_vid\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"_messageLibs\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"_priceFeed\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"_signers\",\"type\":\"address[]\"},{\"internalType\":\"uint64\",\"name\":\"_quorum\",\"type\":\"uint64\"},{\"internalType\":\"address[]\",\"name\":\"_admins\",\"type\":\"address[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AccessControlBadConfirmation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"neededRole\",\"type\":\"bytes32\"}],\"name\":\"AccessControlUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"executableHash\",\"type\":\"bytes32\"}],\"name\":\"DVN_DuplicatedHash\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DVN_InstructionExpired\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"DVN_InvalidRole\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DVN_InvalidSignatures\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"DVN_InvalidTarget\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"vid\",\"type\":\"uint32\"}],\"name\":\"DVN_InvalidVid\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DVN_OnlySelf\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EnforcedPause\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExpectedPause\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MultiSig_OnlySigner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MultiSig_QuorumIsZero\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"signersSize\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"quorum\",\"type\":\"uint64\"}],\"name\":\"MultiSig_SignersSizeIsLessThanQuorum\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"active\",\"type\":\"bool\"}],\"name\":\"MultiSig_StateAlreadySet\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MultiSig_UnorderedSigners\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"Transfer_NativeFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Transfer_ToAddressIsZero\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Worker_NotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Worker_OnlyMessageLib\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Worker_RoleRenouncingDisabled\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"ExecuteFailed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"vid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"expiration\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"signatures\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"struct ExecuteParam\",\"name\":\"param\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_hash\",\"type\":\"bytes32\"}],\"name\":\"HashAlreadyUsed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"multiplierBps\",\"type\":\"uint16\"}],\"name\":\"SetDefaultMultiplierBps\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"gas\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"multiplierBps\",\"type\":\"uint16\"},{\"internalType\":\"uint128\",\"name\":\"floorMarginUSD\",\"type\":\"uint128\"}],\"indexed\":false,\"internalType\":\"struct IDVN.DstConfigParam[]\",\"name\":\"params\",\"type\":\"tuple[]\"}],\"name\":\"SetDstConfig\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"priceFeed\",\"type\":\"address\"}],\"name\":\"SetPriceFeed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint8[]\",\"name\":\"optionTypes\",\"type\":\"uint8[]\"}],\"name\":\"SetSupportedOptionTypes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"workerLib\",\"type\":\"address\"}],\"name\":\"SetWorkerLib\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"_quorum\",\"type\":\"uint64\"}],\"name\":\"UpdateQuorum\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_signer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"_active\",\"type\":\"bool\"}],\"name\":\"UpdateSigner\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"}],\"name\":\"VerifierFeePaid\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"idx\",\"type\":\"uint256\"}],\"name\":\"VerifySignaturesFailed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"lib\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Withdraw\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"allowlistSize\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"packetHeader\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"payloadHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"confirmations\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"internalType\":\"struct ILayerZeroDVN.AssignJobParam\",\"name\":\"_param\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"_options\",\"type\":\"bytes\"}],\"name\":\"assignJob\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"totalFee\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"_dstEid\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"},{\"internalType\":\"uint64\",\"name\":\"_confirmations\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"}],\"name\":\"assignJob\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"totalFee\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_cmd\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_options\",\"type\":\"bytes\"}],\"name\":\"assignJob\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"defaultMultiplierBps\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"}],\"name\":\"dstConfig\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"gas\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"multiplierBps\",\"type\":\"uint16\"},{\"internalType\":\"uint128\",\"name\":\"floorMarginUSD\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"vid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"expiration\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"signatures\",\"type\":\"bytes\"}],\"internalType\":\"struct ExecuteParam[]\",\"name\":\"_params\",\"type\":\"tuple[]\"}],\"name\":\"execute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_dstEid\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"_confirmations\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_options\",\"type\":\"bytes\"}],\"name\":\"getFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"_dstEid\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"},{\"internalType\":\"uint64\",\"name\":\"_confirmations\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"}],\"name\":\"getFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_cmd\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_options\",\"type\":\"bytes\"}],\"name\":\"getFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"}],\"name\":\"getSupportedOptionTypes\",\"outputs\":[{\"internalType\":\"uint8[]\",\"name\":\"\",\"type\":\"uint8[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"}],\"name\":\"hasAcl\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_vid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"_target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_callData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_expiration\",\"type\":\"uint256\"}],\"name\":\"hashCallData\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"localEidV2\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"priceFeed\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"quorum\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"vid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"expiration\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"signatures\",\"type\":\"bytes\"}],\"internalType\":\"struct ExecuteParam\",\"name\":\"_param\",\"type\":\"tuple\"}],\"name\":\"quorumChangeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"_multiplierBps\",\"type\":\"uint16\"}],\"name\":\"setDefaultMultiplierBps\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"gas\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"multiplierBps\",\"type\":\"uint16\"},{\"internalType\":\"uint128\",\"name\":\"floorMarginUSD\",\"type\":\"uint128\"}],\"internalType\":\"struct IDVN.DstConfigParam[]\",\"name\":\"_params\",\"type\":\"tuple[]\"}],\"name\":\"setDstConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_paused\",\"type\":\"bool\"}],\"name\":\"setPaused\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_priceFeed\",\"type\":\"address\"}],\"name\":\"setPriceFeed\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_quorum\",\"type\":\"uint64\"}],\"name\":\"setQuorum\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_signer\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"_active\",\"type\":\"bool\"}],\"name\":\"setSigner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"uint8[]\",\"name\":\"_optionTypes\",\"type\":\"uint8[]\"}],\"name\":\"setSupportedOptionTypes\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_workerFeeLib\",\"type\":\"address\"}],\"name\":\"setWorkerFeeLib\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"signerSize\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"}],\"name\":\"signers\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"active\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"executableHash\",\"type\":\"bytes32\"}],\"name\":\"usedHashes\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"used\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_signatures\",\"type\":\"bytes\"}],\"name\":\"verifySignatures\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"enum MultiSigMock.Errors\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vid\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_lib\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"withdrawFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_lib\",\"type\":\"address\"},{\"internalType\":\"address payable\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"withdrawFeeFromUlnV2\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"withdrawToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"workerFeeLib\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"AccessControlBadConfirmation()\":[{\"details\":\"The caller of a function is not the expected one. NOTE: Don't confuse with {AccessControlUnauthorizedAccount}.\"}],\"AccessControlUnauthorizedAccount(address,bytes32)\":[{\"details\":\"The `account` is missing a role.\"}],\"EnforcedPause()\":[{\"details\":\"The operation failed because the contract is paused.\"}],\"ExpectedPause()\":[{\"details\":\"The operation failed because the contract is not paused.\"}],\"SafeERC20FailedOperation(address)\":[{\"details\":\"An operation with an ERC-20 token failed.\"}]},\"events\":{\"Paused(address)\":{\"details\":\"Emitted when the pause is triggered by `account`.\"},\"RoleAdminChanged(bytes32,bytes32,bytes32)\":{\"details\":\"Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted signaling this.\"},\"RoleGranted(bytes32,address,address)\":{\"details\":\"Emitted when `account` is granted `role`. `sender` is the account that originated the contract call. This account bears the admin role (for the granted role). Expected in cases where the role was granted using the internal {AccessControl-_grantRole}.\"},\"RoleRevoked(bytes32,address,address)\":{\"details\":\"Emitted when `account` is revoked `role`. `sender` is the account that originated the contract call: - if using `revokeRole`, it is the admin role bearer - if using `renounceRole`, it is the role bearer (i.e. `account`)\"},\"Unpaused(address)\":{\"details\":\"Emitted when the pause is lifted by `account`.\"}},\"kind\":\"dev\",\"methods\":{\"assignJob((uint32,bytes,bytes32,uint64,address),bytes)\":{\"details\":\"for ULN301, ULN302 and more to assign jobdvn network can reject job from _sender by adding/removing them from allowlist/denylist\",\"params\":{\"_options\":\"dvn options\",\"_param\":\"assign job param\"}},\"assignJob(address,bytes,bytes,bytes)\":{\"details\":\"to support ReadLib\"},\"assignJob(uint16,uint16,uint64,address)\":{\"details\":\"to support ULNv2dvn network can reject job from _sender by adding/removing them from allowlist/denylist\",\"params\":{\"\":\"//_outboundProofType outbound proof type\",\"_confirmations\":\"block confirmations\",\"_dstEid\":\"destination EndpointId\",\"_sender\":\"message sender address\"}},\"constructor\":{\"details\":\"DVN doesn't have a roleAdmin (address(0x0))Supports all of ULNv2, ULN301, ULN302 and more\",\"params\":{\"_admins\":\"array of admin addresses that are granted the ADMIN_ROLE\",\"_localEidV2\":\"local endpoint-v2 eid\",\"_messageLibs\":\"array of message lib addresses that are granted the MESSAGE_LIB_ROLE\",\"_priceFeed\":\"price feed address\",\"_quorum\":\"quorum for multisig\",\"_signers\":\"array of signer addresses for multisig\",\"_vid\":\"unique identifier for this DVN instance\"}},\"execute((uint32,address,bytes,uint256,bytes)[])\":{\"details\":\"takes a list of instructions and executes them in orderif any of the instructions fail, it will emit an error event and continue to execute the rest of the instructions\",\"params\":{\"_params\":\"array of ExecuteParam, includes target, callData, expiration, signatures\"}},\"getFee(address,bytes,bytes,bytes)\":{\"details\":\"to support ReadLib\"},\"getFee(uint16,uint16,uint64,address)\":{\"details\":\"to support ULNv2getFee can revert if _sender doesn't pass ACL\",\"params\":{\"\":\"//_outboundProofType outbound proof type\",\"_confirmations\":\"block confirmations\",\"_dstEid\":\"destination EndpointId\",\"_sender\":\"message sender address\"}},\"getFee(uint32,uint64,address,bytes)\":{\"details\":\"getFee can revert if _sender doesn't pass ACL\",\"params\":{\"_confirmations\":\"block confirmations\",\"_dstEid\":\"destination EndpointId\",\"_options\":\"dvn options\",\"_sender\":\"message sender address\"},\"returns\":{\"fee\":\"fee in native amount\"}},\"getRoleAdmin(bytes32)\":{\"details\":\"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}.\"},\"grantRole(bytes32,address)\":{\"details\":\"overrides AccessControl to allow self/admin to grant role'function sig 0x2f2ff15d\",\"params\":{\"_account\":\"account to grant role to\",\"_role\":\"role to grant\"}},\"hasAcl(address)\":{\"details\":\"Access control list using allowlist and denylist1) if one address is in the denylist -> deny2) else if address in the allowlist OR allowlist is empty (allows everyone)-> allow3) else deny\",\"params\":{\"_sender\":\"address to check\"}},\"hasRole(bytes32,address)\":{\"details\":\"Returns `true` if `account` has been granted `role`.\"},\"hashCallData(uint32,address,bytes,uint256)\":{\"params\":{\"_callData\":\"call data\",\"_expiration\":\"expiration timestamp\",\"_target\":\"target address\"},\"returns\":{\"_0\":\"hash of above\"}},\"paused()\":{\"details\":\"Returns true if the contract is paused, and false otherwise.\"},\"quorumChangeAdmin((uint32,address,bytes,uint256,bytes))\":{\"details\":\"calldata in the case is abi.encode new admin address\"},\"renounceRole(bytes32,address)\":{\"details\":\"overrides AccessControl to disable renouncing of roles\"},\"revokeRole(bytes32,address)\":{\"details\":\"overrides AccessControl to allow self/admin to revoke rolefunction sig 0xd547741f\",\"params\":{\"_account\":\"account to revoke role from\",\"_role\":\"role to revoke\"}},\"setDefaultMultiplierBps(uint16)\":{\"params\":{\"_multiplierBps\":\"default multiplier for worker fee\"}},\"setDstConfig((uint32,uint64,uint16,uint128)[])\":{\"params\":{\"_params\":\"array of DstConfigParam\"}},\"setPaused(bool)\":{\"details\":\"flag to pause execution of workers (if used with whenNotPaused modifier)\",\"params\":{\"_paused\":\"true to pause, false to unpause\"}},\"setPriceFeed(address)\":{\"params\":{\"_priceFeed\":\"price feed address\"}},\"setQuorum(uint64)\":{\"details\":\"set quorum for multisigfunction sig 0x8585c945\",\"params\":{\"_quorum\":\"to set\"}},\"setSigner(address,bool)\":{\"details\":\"set signers for multisigfunction sig 0x31cb6105\",\"params\":{\"_active\":\"true to add, false to remove\",\"_signer\":\"signer address\"}},\"setWorkerFeeLib(address)\":{\"params\":{\"_workerFeeLib\":\"worker fee lib address\"}},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"},\"withdrawFee(address,address,uint256)\":{\"details\":\"supports withdrawing fee from ULN301, ULN302 and more\",\"params\":{\"_amount\":\"amount to withdraw\",\"_lib\":\"message lib address\",\"_to\":\"address to withdraw fee to\"}},\"withdrawFeeFromUlnV2(address,address,uint256)\":{\"details\":\"to support ULNv2the withdrawFee function for ULN30X is built in the Worker contract\",\"params\":{\"_amount\":\"amount to withdraw\",\"_lib\":\"message lib address\",\"_to\":\"address to withdraw to\"}},\"withdrawToken(address,address,uint256)\":{\"details\":\"supports withdrawing token from the contract\",\"params\":{\"_amount\":\"amount to withdraw\",\"_to\":\"address to withdraw token to\",\"_token\":\"token address\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"quorumChangeAdmin((uint32,address,bytes,uint256,bytes))\":{\"notice\":\"function for quorum to change admin without going through execute function\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/DVNMock.sol\":\"DVNMock\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/MessageLibBase.sol\":{\"keccak256\":\"0x14899a4398251439938d6ef8a15ea8c6acdddc98a7b0066d7e63676192dea0d1\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://3998d03de7025c2c601a4fdcaf9475d12a1ef661fcf1a685ece84fdde6498cf9\",\"dweb:/ipfs/QmReknRbiGAiPqq9toKyXKo6hUKXrQPJyyS6LnTGjiDKoY\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/ReceiveLibBaseE2.sol\":{\"keccak256\":\"0x2fdbd1b13751a264cd6e7fac518a2685b15c968806c03f1d18b177fc0526e9a9\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://600af48bb67939b5f4a3a00c76863ee290a55325ea8697f7cc4b46321ab26ef2\",\"dweb:/ipfs/QmdRigYaB6TXczjtVkvwpUEBwvvvDuymFoViMCB6xQPYUU\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/SendLibBase.sol\":{\"keccak256\":\"0x400eaa11c7d50b4c25b7625290ff00937b6875ad3986b353c37a4e62b5a834b1\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://1f51eb0785d3630815a9d63de1c1331fe966df4c3f2fb6750b8da7be9e9743a4\",\"dweb:/ipfs/QmaAEf1kjhhff3AUhRiPm6ikpk2YMMrpKc2ccYzNs7waBy\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/SendLibBaseE2.sol\":{\"keccak256\":\"0x90ada11d0a330732c56b989e59c8272b70f956a5d7be2cf209d6d51a51d35a9e\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://0abc7a6d07ec40a3a922256ad05bdd6eca10550d85bfd2e67147473617bb0497\",\"dweb:/ipfs/QmRDphmFhx1scRJXcusg6pUhVQvp941oCJwnHGAPdrNY4T\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IExecutor.sol\":{\"keccak256\":\"0x2fd26e454b060ede7afa15f8bbc67bd43f9181b6405ca411d36c8b538be016af\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cf2142e83214bb392f69ed14266718cfd803f849a7239ee9a1950ddf66553696\",\"dweb:/ipfs/QmSZ2mPMZqWBetMU8VESKtxy7UdSThUVmJmTFMHEyKLTGZ\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IExecutorFeeLib.sol\":{\"keccak256\":\"0x801d12eca6d6b232fb91d949cdb70a4c547c5e27e73555f2f1eb9e757c639bcc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b61bdffe26ff3902edab3efb0b5af3808ec9e28d72db95b77128502b9bc7638d\",\"dweb:/ipfs/Qmcyf3npDDEq28b9XqmXgSGyQegj2cxUZQ3UekSNf34g8M\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroExecutor.sol\":{\"keccak256\":\"0x3647af317ee126b1247a782abb30e59ec5ab21b4945f1d3b4370d1fa3c1bf347\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5b51cd5e7347ee869a06bd57a698f40e4a901ec7fdcb27f0ef485e4a0e1e9be4\",\"dweb:/ipfs/QmP2Nc73veRzLGdUahkjhQAiKR9ZWYiUtSGwoMB1sPXxUp\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroPriceFeed.sol\":{\"keccak256\":\"0xb4df72798a64f5ea44775b526e0c417c3de0ffc661659d7b31d5b28567c6fbcc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://30ca5fd5e3227a7bffc51654ee3bfebdd591a131f86846ac42dea8a40c5cf1d8\",\"dweb:/ipfs/QmXNmQCF8TZAFpUxgPa1rgWt4ktsBV38A8Hax7TiYLgybW\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroReadExecutor.sol\":{\"keccak256\":\"0x360936885f173f816ffb47e555d480928e74eb1ad54a76af0f4595ecba2d5657\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://16b5095e6439b1e416eb70571a1dd8f4f21a0d77b19c9e510ca289d99e5e09ab\",\"dweb:/ipfs/QmZ2mjQDQ35gJseyzmQhik4cBgN2ESADzofFNVFvgS64hv\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroTreasury.sol\":{\"keccak256\":\"0x2aab2a3cf50e20af56d9204b1367d52a47abba0b0c7c21f304d413de1ced6345\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f8b603b5e5e62c621715f8449280af240a4add8721c4ae8f5e8e491507f6e4c5\",\"dweb:/ipfs/QmUQ7Ti7CPmKnRbQFN9TLvVbeZhsi1xUjqZPTJ36dCZ6y8\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IWorker.sol\":{\"keccak256\":\"0xa6b61913767305227576cc6da5067de4208f09a4f58bfbfe32beafdfae9869b1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7fce83bfb831f383606aee7f5ff68a330c8526bb1036f9ba0813d3e4fa8d534\",\"dweb:/ipfs/QmR7zAqJkmCgBj6sguS8t2WthY5k6FwsakgH4UY11uqD4n\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/libs/ExecutorOptions.sol\":{\"keccak256\":\"0x441b723f2f597be2ec2bb361fcf3f11852c23534db1cfa7d2ffff7e61d228e3c\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://636817d20f90f75032e35376256cf5f4d2a047d6541b45f644d82a2e4dc8f1eb\",\"dweb:/ipfs/QmcEFRxCmmm9hKbqi7Powj6ATbw4JXXJW4rxfwMcxWsDnT\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/libs/SafeCall.sol\":{\"keccak256\":\"0xc3b7b7927472f7c1ca9703af310e9050c798afaccf399ad0f131e179b8582c8d\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://e5be13af32ff6b371985d405bc6fe8ac2faf5445bd88fda2dab4b869f66e3f89\",\"dweb:/ipfs/Qmd21k4H2tAHKrpiuHUbH87eNtHLLJzHj9ZCrMh8AKfDHh\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/ReceiveUlnBase.sol\":{\"keccak256\":\"0x36c93de122bbb74ae31e3eacf567c0a3bc649ed3ebb2766c76dfa93aebcace44\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://e83bcaa80e2715e68818dd53e4dc6ad8e665b8249d69a08cf2d2635b9757fb79\",\"dweb:/ipfs/QmSKh6NgaTrTSa48gDzGGqGNAcs5jVEHgZSzZzbuJSEsxo\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/SendUlnBase.sol\":{\"keccak256\":\"0x6d9962ffa476ac2efb78f1415bb2f650a30eedeef2b75fdab0aeafaf3e8da6a5\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://21f32c56b67d2e770444b809c1a85a96627194c605ad317d482dfc5b6ce7e8c2\",\"dweb:/ipfs/QmP5tzoMDzTdduEcSpYHgg6WCHLQGuc1djDMFUBycJPLCU\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/UlnBase.sol\":{\"keccak256\":\"0xfdb1d04f4996c0a9d35abfbfcf10d978da638885eb77d0a9dc35cea5993074e3\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://776d58d88d13b058f236cf18c32b4b9718a021513fc4e198287f4fe18ec5aba4\",\"dweb:/ipfs/QmdNX8jJu2aXJ8Dpbt2ohfhT8RKQLuvh58sW6SAXcUTcV9\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IDVN.sol\":{\"keccak256\":\"0x6becdfab6c1fcaf98f402bee48495895e54825f9d6eef6e292dde0caed628284\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2273341033856737cd46704a1a769768feae696d0e7a912f5be9de8ffdd2180c\",\"dweb:/ipfs/QmY1xBAmMX9jND1HAb7tDyZNPgFReXMqs1vtmHbShKZFQY\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IDVNFeeLib.sol\":{\"keccak256\":\"0xed4a8e77148328132d8f4f2726c4aeec6b490cf03a1d5940bde0ab8d72954de9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7b07802ca32bf10f68e51da872fb358807446dc2242314374d226493a6e9e7dc\",\"dweb:/ipfs/QmfSwWPLgitDy2a9S3mCNBDk6kAcK9n186Dtvj7qg84i12\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/ILayerZeroDVN.sol\":{\"keccak256\":\"0x308e77078242fd5c5746ec29c12e618249134f9e4377c0028ab8f59c07a6014b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2f92cf397a8d26864ac92dfcd1b98e92a32c47f556a62c5e6dc1618734c1caa3\",\"dweb:/ipfs/QmXN3XJXEKq5djV6HeM6jrLycmJPFhMhecsYZ2TaRsQmhg\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/ILayerZeroReadDVN.sol\":{\"keccak256\":\"0x759a3ee7614c2de54b152b0278845f91ac9760d8c22045b2fee89e3e744402b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7a2dbf6bcf5bfab408f18c104b34c390e8bfabb0eeb1a10e3a9c0fb14c8c61d5\",\"dweb:/ipfs/QmWxmRbDBkbhGmNsRyXqQXB1QaWRS4qvh6a8achh8DQPKR\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IReceiveUlnE2.sol\":{\"keccak256\":\"0xcdf7e690e5d5c0a3ec26a0d7b1a7fe49c7d16a3634721c3944f77d13ff5d4a91\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bd32a05dde1b83be1ce64fcfb9495d8b9bf0c5b3a5b521ac6c214e87e32f3cdc\",\"dweb:/ipfs/QmcDKTor8EQf3cbiWYmeFb9qzUM8JGPzGGN9qJnYjP1nN7\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/DVNOptions.sol\":{\"keccak256\":\"0x2beee03cdf59a9bc72e94d08b69cb2e908725f4ceabb48651494938100e21e35\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://d88e121a39e74309f3575417df2318e2d2ee8bc8314e68dbf78544a9c393b141\",\"dweb:/ipfs/QmRojBRAyENK21HnjevAWeoZZxtWkYZubB9Y78vCJPYeU6\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/ReadCmdCodecV1.sol\":{\"keccak256\":\"0x52fbab4a114ce9defb2ffd57c0a978eee438b2c232862f7e20475e0dcadd4eda\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://a4d5d4e186e3f2a916ea02c2d1d0761069ab1a5c0d6f74719bbf3501a7ccb899\",\"dweb:/ipfs/QmS2e12U9Fap2EK1CmSBTccL4PCKkHNdKJn2bXCqqKdbRn\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/SupportedCmdTypes.sol\":{\"keccak256\":\"0x6b2534522c163714e499041ecd06aaeb93857373cef82cf2752f162bb7c69f9a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bf6c3545c3b9505692dbfaa29b40cab5ed9dc9b65e5804b6f47b5a76596120e9\",\"dweb:/ipfs/QmNs98oRaMvpYhLCQ5yU256eYNEopFTrLRjjwm3gL4foQ3\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/UlnOptions.sol\":{\"keccak256\":\"0x5df07fef16b20767f7524c367d90f696c12e8ce0e4fde7aecc9d83fb2b6b0e27\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://0997203f57d736e56ebb3d736550f1c7ff7950c8df0574c7abe95e22f847b850\",\"dweb:/ipfs/QmZBjkH1vaPLyN3Jx9kGfVZKuTdfVWJfJVLSPok8SpjGbT\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/readlib/ReadLibBase.sol\":{\"keccak256\":\"0x7d312ba1e6288cb201b211f58b814eaaa0b5993721475fbc64321b0e7a2c74d3\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://dfc0dce9362eca0f03b51e0e808389c8bf51fda901e6ca58da169f165e4fc3c8\",\"dweb:/ipfs/QmSXAQ3veWf6gPXcgpX1XLZW9SyLQjBjCSdsFiQTttLNac\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/uln301/interfaces/IUltraLightNode301.sol\":{\"keccak256\":\"0x47f8ebeaa7d96a6f337a18c46e3c532da578c7cb0a13fb6e6f014286b991902f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d51f208b931be54e0ae1801c71c0756251d8c26f8d9b7911be1ad57b3d4a5691\",\"dweb:/ipfs/QmWqjst7jnYtSXQ9pakYHutDvENKLyqNg9nPfMxTH8p2Ed\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessageLibManager.sol\":{\"keccak256\":\"0x64330e51de72e8d38cfc0eb5527d36baada46df4bc14233d3a8ecaf98098d69a\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://49aa45e5a26fc62e7af569cf915be8344adc78dceb6871c4c14bc5d115e59241\",\"dweb:/ipfs/QmbTuW7kzPDYForDEPnaNQi6ZrmWqDxGVnHFiugnvTyq9K\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingChannel.sol\":{\"keccak256\":\"0x8ab8cb12c8beba699c1a7f22ffa812ac553f7038326d0c0d0af77253005cfe73\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://7c7cba4ae16d0ca46ee0a365a204f7257ceaa892224604bf7c8e65c44737e46c\",\"dweb:/ipfs/QmbQX5hJDKMwKdoo6QkdcusXQXH54SVCPe5hM1ycJZsg7y\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingComposer.sol\":{\"keccak256\":\"0x20d36578e810e75346daf064813b76a177087214cae77628b1f9d43798cb52d1\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://475b6f3f1ba5d981d0c5f90b9e892d4f9f539f3b12196639b95770b5be4dbf6a\",\"dweb:/ipfs/QmYyGrnR3vDt8Dqa2paQwTG9qrD6anAGFrDZmMra8KGC6s\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingContext.sol\":{\"keccak256\":\"0x9616f3bd0d7293c9723f2ddf86f9f7030fbd99213c9748557eec8f6d13b25420\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://205e713f5af46f52799e51774ac74dbeee4056de6ddba3c4d78a327536426c54\",\"dweb:/ipfs/QmZ2ZqDwxdjpJbh91qwMfRhhQu4AMEsjUcsTEsdRV4NAys\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroComposer.sol\":{\"keccak256\":\"0xfaca7205d4211ee9208a7e59171e2301731f3d2a20c49b4a839821871f5fdd49\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f254bc60ac26687b5320a43a556e30777b0745abf7cd64d5f4720d9b1d1f7fdf\",\"dweb:/ipfs/QmRSJEZVgxaC3L2DdE6s8P5qkYfM3V5JMeseeFJJqGR4xz\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\":{\"keccak256\":\"0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bacc29fd3866af71e59cb0bdc1cf82c882a4a7f4e2652fd413c9f12649762083\",\"dweb:/ipfs/QmZh2toLnrQDWaNYhS5K4NoW7Vxd2GdZx9KA77vKEDLAqs\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol\":{\"keccak256\":\"0x9641abba8d53b08bb517d1b74801dd15ea7b84d77a6719085bd96c8ea94e3ca0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://77415ae0820859e0faf3fabdce683cce9fa03ea026ae0f6fe081ef1c9205f933\",\"dweb:/ipfs/QmXd7APqoCunQ2jYy73AHvi5gsZofLpm3SzM6FPo7zRPfL\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol\":{\"keccak256\":\"0x5cf5f24751b4e3ea1c9c5ded07cedfdfd62566b6daaffcc0144733859c9dba0c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cae7e35007a714f007ea08045ef7c0cfa6c91fd2425b5028b2d49abad357a5f0\",\"dweb:/ipfs/QmcDBs5tsiyB35b8cwzWQWNnpkawb3uuHRaqE77Hxm2tve\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol\":{\"keccak256\":\"0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d8ff6a8a89297fa127f86b54e0db3eba1d6a6eeb4f6398d3c84d569665ac8f1b\",\"dweb:/ipfs/QmVSwhw6xFDrLRAX4RXaCM47yBaBtac4wf36DYEq6KCTvT\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol\":{\"keccak256\":\"0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7e1b245d58221d16d8b5e0f01ef3e289a24a7df1ace3b94239e4d5b954ad5927\",\"dweb:/ipfs/Qmappsgp7PCY9rSSNE9Cdn4BTRX591WfCSEgq2HxhA3z6S\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol\":{\"keccak256\":\"0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b18b23a1643fc6636c4ad9d9023e2e6ca2d3c2a4a046482d4655bff09950598d\",\"dweb:/ipfs/Qma6G5SqiovwrMPfgqTrRngK1HWW373Wkf9c6YP2NhXpPk\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol\":{\"keccak256\":\"0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5173fc9143bea314b159ca5a9adb5626659ef763bc598e27de5fa46efe3291a6\",\"dweb:/ipfs/QmSLFeMFPmVeGxT4sxRPW28ictjAS22M8rLeYRu9TXkA6D\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol\":{\"keccak256\":\"0xf1c07bc61e7b1dce195ed12d50f87980fbf2d63cac1326fd28287f55fe0ba625\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://060f10ff7afc33c1c2f2b4b5ba29231fd3c943146488084d0e4ab99fce991d97\",\"dweb:/ipfs/QmaSsefAqqEqtf8FgFUmDYMwTsAty3X1pqDb6SiFvry6B3\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol\":{\"keccak256\":\"0x2ebbcaaab3554edcd41b581f1a72ac1806afbfb8047d0d47ff098f9af30d6deb\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://2d4b2cf5c3b16dc76c6767f285b57c0af917972327b2be3f7cba5825402f5fc1\",\"dweb:/ipfs/QmQQWiHE2jKEDbjzGutSoZwtApSXYfLqZt5CxEpFj8xyvT\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/CalldataBytesLib.sol\":{\"keccak256\":\"0x5c0db161cef6603c3b256d4220f489419e7478ef775e52a80056654129c61875\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://a33245d0fdd3992bb56b31d1840108d36bb46c8d617b659ef1af8dd7ed86302d\",\"dweb:/ipfs/QmWyBqT7Tdrfn5zz9xYM3V1PBtfAZAVwwCrrKwwfi3wMQK\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Errors.sol\":{\"keccak256\":\"0x35bcd6ca99c4c8d9f7d8413d1b92fb4a4d4a420ce3bf64b0fb01e68e6bcf2fa7\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://0ac14f98563f9c610c936c93e71eff657efaba1e1d892be6a215aa5cb1f63a24\",\"dweb:/ipfs/QmVZZ8owwfDGLQTAzQJJqmYY4KsrChDagh5GBK7rChT5wb\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/GUID.sol\":{\"keccak256\":\"0x8a44524af7deb96593f6b5606e9973654a113e1687809f2e45d4a91ba89862d5\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://32dd0b5d1946e0cd5c7b728086aafac50a62c061115afb8b41254589c8a6732b\",\"dweb:/ipfs/QmR9QqtiAUPRLaRVv5wnth3NGPhdWB8rJmWYfz3o5Z1mWj\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Transfer.sol\":{\"keccak256\":\"0x621d6dd5b8b7e827351459fff4ac87c16ba4656757592cf67de8b199aea4cf9a\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://345aa8c007ed8b96a74260d289545713f1d7180df270d67687e3a540a61fa5c0\",\"dweb:/ipfs/QmNWCvpqSuar6UGLDVshUc7shUv3pt1J5FTf9VyZZ13wXL\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/BlockedMessageLib.sol\":{\"keccak256\":\"0xb2b55968b26294139742adee6c155897c8334f4c6bf72f1940456cc84e6fbab9\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://e758a1fdcea4039b19f1252e4e2958f4a0e05517eb3e151784431533446c225f\",\"dweb:/ipfs/QmRBG345abgyUeTnSpuxdK1WbK5pvwhSmvBEgW1mnoYqTq\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/BitMaps.sol\":{\"keccak256\":\"0xaad3c72ef43480d2253fd48b394e8fb7286d009991d2bc4e61be58ce48ac5ee9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b8c02b14f954416ba2148b389c87da8378ac8dd16ba3d458cbbfba8b0fd8639f\",\"dweb:/ipfs/Qmd2EEQhYL2VmgJi1V4uiHM2WcYxF9iBtxSgcFkbS21rQD\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/ExecutorOptions.sol\":{\"keccak256\":\"0x621c6090fc432f94a99f677a95d72b75f56db89ddc5fc870669777a313587c28\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://69086166f16d29e30c5eb9ca2f97afb27569afe619807d79736833a809a512d2\",\"dweb:/ipfs/QmcZqXjFuVdTrfbteKBF3GuEpjVFZ2YNZTa3J87dyLsqav\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol\":{\"keccak256\":\"0xc84cf1bf785977fe1fbe7566eef902c2db68d0e163813ebe6c34921754802680\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://de686666fc16fa432d4208d85cec87dc952faf3e481b683b9adf4b4610db4b09\",\"dweb:/ipfs/QmdmQeopzmxqRzi9DNB4EJDrYUXFfD7fUhnGhSni4QejUW\"]},\"node_modules/@layerzerolabs/lz-evm-v1-0.7/contracts/interfaces/ILayerZeroUltraLightNodeV2.sol\":{\"keccak256\":\"0xf1f36bbbc40d03b96affa151affb47da75a1b69dc79f4b311841a072d12fdd22\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://9f4f188c2998ecbda28a389ad8038da15c2260b1df6a8d135b3d96422e292fda\",\"dweb:/ipfs/QmeThR83tcaM4CmxQ2AamTafsgjcbGMfZtYcDHqw2CcwKa\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/OptionsHelper.sol\":{\"keccak256\":\"0x729ce2290d16a45a16ad936263803db6a6bebcfba5c063ebe0f0fd284ba828c0\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://7494875394fc968684761b22bb5fe05789f8d84ba07b2e0ab579ce0afe7aa973\",\"dweb:/ipfs/QmZNrexRXL3ef3UnES5e8JcdyMJ5HVftwGKQjGC5CwNg9Q\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/TestHelperOz5.sol\":{\"keccak256\":\"0xe60b21a345bb1c2e9ee2fb7301398d342da0acc3a730b442106a2ad9478f7a63\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://ee7e0a47ae666a16e33a51f946da4fe549e8f4c6ea1f1978850515172c44656f\",\"dweb:/ipfs/QmR2AZ9pYiwMCV4wPPVaGGPRJEjuBoFjJEesHtbAYhNoFq\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/DVNFeeLibMock.sol\":{\"keccak256\":\"0x4c2e212f73a1c2a2989af947eef715ebacb11a80d55e5fd18a89a905790971b1\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://30eb29a81414780828903f5320367e89020af5a4055b768e2be08d43605b1688\",\"dweb:/ipfs/QmeC5bVtmaY6tn6Z2XpVFXAkxVWQCQUzKbP2V9nPdv3vCr\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/DVNMock.sol\":{\"keccak256\":\"0xdafd7da964b6ac8637d543c30370739bb805f7e10b42043444689240b5c27b3f\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://154067632b4799f49c0b3a8c5304499f60b2c232ebd17c21912efdb72421bdab\",\"dweb:/ipfs/QmUEr6VsNt2odnrL3xFrLKwZTVLkLXi8BDzpPWeiCxC63T\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/EndpointV2AltMock.sol\":{\"keccak256\":\"0x026b2f530b336ee237f37dde6f617acefbbf74d933d2a80da4216882f78be1a9\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://097a9fdd5a321e6e8455a1db00f2abda6e810c31ce47d1bced9e574be262a28b\",\"dweb:/ipfs/Qme17zGk93k5BghCWFXqeqppVahH4dHuw7U76K4EcJxsY1\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/EndpointV2Mock.sol\":{\"keccak256\":\"0xe9096c53611537a121589b56b882fc4dd797d5cac60def708f794a15e3ca98ff\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://4092d5dd582b48a5f703e4361fc5fb66050b5fe3253891175275dc832bc8e045\",\"dweb:/ipfs/QmXSTJJNx4rn2ByCaE6vxiHnkm366ZU7dScYH1JsUbVZ1V\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ExecutorFeeLibMock.sol\":{\"keccak256\":\"0x4a47aaf41049710d5f05fcc66885cacc0dabc1864778b56ac75a59b61eef5a01\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://c9b8c26b38cb138c3225efbab8b1d2e0f43343798658a0f2ed9669c16e5a97ff\",\"dweb:/ipfs/QmV21G7Qwoi9gXYT8bKXDwnQDvjdZCAo2M9MqTKq4nQU9U\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ExecutorMock.sol\":{\"keccak256\":\"0xbcdc4500270cd5496f10760ffe9e0444d23e454dd0ae2555e0661acf22fce96f\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://b816999bcfef5586b5e80bba21584b821fd7f7b32c276492adee530ffa83bb73\",\"dweb:/ipfs/QmXLV8ieYdrTBERajBCVuMzknFyPHJjnw7MGkzULAdjdt8\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/MultiSigMock.sol\":{\"keccak256\":\"0xc7c90e073e52af1da6c07e3d3f7477b064a89e78935c16e9872457df503c6830\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://cef1ae2d517e152616aea7f8f5c15fa1fbabbec8896a9c30a9eed35fb56b4f2f\",\"dweb:/ipfs/QmeitPMQht2WfbR9ZLzwKWgThamdsJkobeaWo6ojTCoQG5\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/PriceFeedMock.sol\":{\"keccak256\":\"0xd8f419b25c648287b5b7f0923b069b2449c51e807c9153df39445f2f83e55f44\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://bb300a5bb62655073c7aa9cd2221e60e59ce904a0d73f7f5e06af7c9df3445ec\",\"dweb:/ipfs/QmcYb2qFevymfkWhTqGaNH5HwK9MMUixzAKJJAdNQHSCbw\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ReadLib1002Mock.sol\":{\"keccak256\":\"0x1403b7a91b185fd8211f00fa380a0b8918e92e663c403a1dafa30f1667091fdc\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://7494444260a981ae9a9e11cd8981fad35a6b45a9c09cf72c05aad88ee191e7f0\",\"dweb:/ipfs/QmaTyujm37PsCobQ36ootD5xVgKyBYqeUTdTJij9x3oaN6\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ReceiveUln302Mock.sol\":{\"keccak256\":\"0x8e60b01e9bc801167b374dc119b41832d546afd43c143a0cd15ab1941198e121\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://bb1512762417dda9cd81fd9b41f590fd05888358fda1c2ab7e79e0cfabf61ec4\",\"dweb:/ipfs/QmPAgBwdjLz29vE5L1Jth1Wvx6TTM1ig97amVtAyDFF61Q\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/SendUln302Mock.sol\":{\"keccak256\":\"0x0c5cb54ec6b18e77aa653f7d774ac9d010684dafc96794d1d02f12b6885cc348\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://24c5a8ba8d92c16ec3047229167528f57b38cbd64882140014126ca51ab14574\",\"dweb:/ipfs/QmXQsMDtZ3qNmjnr2LYgctBpPKxffuC6EeWHvFUtLBS5st\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/SimpleMessageLibMock.sol\":{\"keccak256\":\"0xe6c93840c612592686732dd516550816eb77d6cde92514220eacb72443dcb9b9\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://a6a00fb60b7ac66e746f0471c2262fc98febafeb8acad8785d38ce1ddc4cc991\",\"dweb:/ipfs/QmboboJskbXBbsyAGGRbW4JQCPJo9WiLFy7nwQxGVS9UhZ\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/WorkerMock.sol\":{\"keccak256\":\"0x6c5bc31c117033dd35fa7ab3b13b1647a4b449c5f5b4cbff41bce8a63529ab97\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://01aa1d3f3b8e2fd4b544312d96916b16b97e01ab740e2bae1137723b2f1a31b1\",\"dweb:/ipfs/QmVMemJ4MSgi6y9NxDdSeB6QbJRtCWojJNxzs3CRLT56EA\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/test.sol\":{\"keccak256\":\"0x8758531bbac3972efcf1fa46383dbe1d276406fe527bc7abb2f236486278e83b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://1f64264d61506847acf8761e84aff690cebe830958eac00bac7924d8be569240\",\"dweb:/ipfs/QmSekDJvJ82MZAmr63n7YvfLzQ7gS4NLSHPmHL3GN3rw8k\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Base.sol\":{\"keccak256\":\"0x4ff1a785311017d1eedb1b4737956fa383067ad34eb439abfec1d989754dde1c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f553622969b9fdb930246704a4c10dfaee6b1a4468c142fa7eb9dc292a438224\",\"dweb:/ipfs/QmcxqHnqdQsMVtgsfH9VNLmZ3g7GhgNagfq7yvNCDcCHFK\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdAssertions.sol\":{\"keccak256\":\"0x1a0dee4d8b2c81e9318e87dd85ef009467ebf7dba6575530d1fce94d34dbae60\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ddd790c86ddde1013d1f7a552a80168eacf2e9244077f96799180644ad523a5b\",\"dweb:/ipfs/QmYinBFt9uEVFXP9ytT9CDoNpzWieQVgLWRFRNiypMzJaL\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdChains.sol\":{\"keccak256\":\"0x598b85609125830885b8fb54a18f447d04f8dd799aca3de81baef35eb6b783c0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c9c128aae4f5668d8c8f71e9e6d9379d8451b8713d139cb66a02d23bc1c75f69\",\"dweb:/ipfs/QmVRihXHWi2yg9CcAhzKf63Y7m6gWz4P1giGMhXUHT3DFu\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdCheats.sol\":{\"keccak256\":\"0xb72f3519e0bf7d31df5d68557525f4fc55d861c3fb3b0f7793144ef7c94cbeb7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f3456d0f78e6f61203fa7871ba2df0d35925f10db3baee14be623ce2a35b84e2\",\"dweb:/ipfs/QmWE6QQSBvJifHMraisBTrf1x4WCwrDoTPLX8UKajTiApc\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdError.sol\":{\"keccak256\":\"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6\",\"dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdInvariant.sol\":{\"keccak256\":\"0x67299bfacd77fddfa2a67b8e2b901e0e333618a4975fb94850b07475e51f6de6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1b61121d310f4053ce344b345b4a9ccf43b059daf9097ec2647f594beaca896d\",\"dweb:/ipfs/QmZUCoTtXBM9zfAZVbj2dFPPnKaV1CSZzXE7zictyg3Gfz\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdJson.sol\":{\"keccak256\":\"0x8f914dbd016bd0e318fe2b8bd556fbc8256c7cddc24e3e4fcb9f3c1c1935592d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://19e704df493dde38323303b07d18cadfeb4dcadf1ddc2301add4aea9474fbb5e\",\"dweb:/ipfs/QmZasuGiLK8LHwWtvpqEBxUR6QFY6GdzLMTJ9q7CMf8PNZ\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdMath.sol\":{\"keccak256\":\"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92\",\"dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdStorage.sol\":{\"keccak256\":\"0x4298f3f4cedaedb07029820b1daad2c03af45379559392201f7bf3ec71105811\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6e062f36d8d1ae3c383ef8975757926eaa9c4de3a92b5f1fe2d12748bcd8db32\",\"dweb:/ipfs/QmcWkv3ia5Ew4DZNcudMNSTNXZ3W2QiXTZunRd44e9BT8z\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdStyle.sol\":{\"keccak256\":\"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8\",\"dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdUtils.sol\":{\"keccak256\":\"0x502b18a4becda6ecd91fa8b419d8034946bfa80e6cc7f6497f51f8565bfadae0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bf499ee483a1dfd02023d4ce78ed4029a49794ccd5b849aaab912faea0d2ba61\",\"dweb:/ipfs/QmP6hwNZW7sYbQK9fBzuZWxfLm6Swx2nKzvZ54qWNqQkzX\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Test.sol\":{\"keccak256\":\"0x39b1729d5868c8e94ab8af16751eb500a17fe3870dc627d2b7ddcd5df18d7ad0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1568c82aff125cc4b0fc168be9d67ac313f469a3c7405c5493caecaaaecfb765\",\"dweb:/ipfs/QmXByuZReJsdu1jDcxj1FcmpcUnzoBcqybn9kWgDAECWri\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Vm.sol\":{\"keccak256\":\"0x87ba9f3edc254e529db9e3129c954391adcc7fc8574203767979d8d2f1e724b9\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://4d16c08d80d9f2869deb6350642cf5af624d21fce6b3b023abbcdedc62e195fe\",\"dweb:/ipfs/QmURpnnFECPKt3i7P7jQRZpr4ZBXjRGcZ9KzcbKzsgYR2W\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/console.sol\":{\"keccak256\":\"0x91d5413c2434ca58fd278b6e1e79fd98d10c83931cc2596a6038eee4daeb34ba\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://91ccea707361e48b9b7a161fe81f496b9932bc471e9c4e4e1e9c283f2453cc70\",\"dweb:/ipfs/QmcB66sZhQ6Kz7MUHcLE78YXRUZxoZnnxZjN6yATsbB2ec\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/console2.sol\":{\"keccak256\":\"0x954646445d1014c3cd85c7918f5e7adeeca5ee44b68c00bafa237e597a4e35ea\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://516fa3be52da4763147175bfba4be0aa011fadbb0c1afb01f97265bd4cee7973\",\"dweb:/ipfs/QmdixAyMJefx7qePChgdxcBH5MxhmN7vsqPuPLx3CgrVmF\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/interfaces/IMulticall3.sol\":{\"keccak256\":\"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0\",\"dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/mocks/MockERC20.sol\":{\"keccak256\":\"0xd8703f49411737ecf8d411f8fa66b2bf0ef972ba28b7a4adf1748c63df1bf682\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7c10a6b8112f6fe3cdccb6240ecd382765216b1a82e9a86a0fec8f5e09eadd1\",\"dweb:/ipfs/QmdRvPCU4RkjMHsTu3Ric1ZEF1AWDNLp78unFC5aWP17xq\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/mocks/MockERC721.sol\":{\"keccak256\":\"0xa24468244abb66e663fb7eee6463cb518eb9a7c14e1071548ff564cca825bbca\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://145585a2194aa6e2d30edfe709ef2814e20b1b4540469aa6a8f50c841fcb9070\",\"dweb:/ipfs/QmZrwbvtpbtTxqbW5phUrwb3F1tBiPSQc6jZJAXBfsBsAh\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/safeconsole.sol\":{\"keccak256\":\"0xbaf41fdc6c54297e7cd8250e48b0f20eaac918e342a1028cef3f9a52ac086381\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a500ad81dea226f9910e6b50f99a9ff930105e393a692cbfb2185e4cdb4424ae\",\"dweb:/ipfs/QmVbUQpXNMmMWRiy4FvBNczzq46BMGfUoBikvSHNiCxVTq\"]},\"node_modules/@openzeppelin/contracts/access/AccessControl.sol\":{\"keccak256\":\"0xa0e92d42942f4f57c5be50568dac11e9d00c93efcb458026e18d2d9b9b2e7308\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://46326c0bb1e296b67185e81c918e0b40501b8b6386165855df0a3f3c634b6a80\",\"dweb:/ipfs/QmTwyrDYtsxsk6pymJTK94PnEpzsmkpUxFuzEiakDopy4Z\"]},\"node_modules/@openzeppelin/contracts/access/IAccessControl.sol\":{\"keccak256\":\"0xc1c2a7f1563b77050dc6d507db9f4ada5d042c1f6a9ddbffdc49c77cdc0a1606\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fd54abb96a6156d9a761f6fdad1d3004bc48d2d4fce47f40a3f91a7ae83fc3a1\",\"dweb:/ipfs/QmUrFSGkTDJ7WaZ6qPVVe3Gn5uN2viPb7x7QQ35UX4DofX\"]},\"node_modules/@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol\":{\"keccak256\":\"0x9b6b3e7803bc5f2f8cd7ad57db8ac1def61a9930a5a3107df4882e028a9605d7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://da62d6be1f5c6edf577f0cb45666a8aa9c2086a4bac87d95d65f02e2f4c36a4b\",\"dweb:/ipfs/QmNkpvBpoCMvX8JwAFNSc5XxJ2q5BXJpL5L1txb4QkqVFF\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC165.sol\":{\"keccak256\":\"0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://11fea9f8bc98949ac6709f0c1699db7430d2948137aa94d5a9e95a91f61a710a\",\"dweb:/ipfs/QmQdfRXxQjwP6yn3DVo1GHPpriKNcFghSPi94Z1oKEFUNS\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC20.sol\":{\"keccak256\":\"0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a2608291cb038b388d80b79a06b6118a42f7894ff67b7da10ec0dbbf5b2973ba\",\"dweb:/ipfs/QmWohqcBLbcxmA4eGPhZDXe5RYMMEEpFq22nfkaUMvTfw1\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db\",\"dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0xca2ae13e0610f6a99238dd00b97bd786bc92732dae6d6b9d61f573ec51018310\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://75f8c71ce0c91c40dd5f249ace0b7d8270f8f1767231bcf71490f7157d6ba862\",\"dweb:/ipfs/QmYXgxeDyFHvz3JsXxLEYN6GNUR44ThHeFj5XkpkgMoG4w\"]},\"node_modules/@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0x9d8da059267bac779a2dbbb9a26c2acf00ca83085e105d62d5d4ef96054a47f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c78e2aa4313323cecd1ef12a8d6265b96beee1a199923abf55d9a2a9e291ad23\",\"dweb:/ipfs/QmUTs2KStXucZezzFo3EYeqYu47utu56qrF7jj1Gue65vb\"]},\"node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"node_modules/@openzeppelin/contracts/utils/Errors.sol\":{\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf\",\"dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB\"]},\"node_modules/@openzeppelin/contracts/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]},\"node_modules/@openzeppelin/contracts/utils/Pausable.sol\":{\"keccak256\":\"0xb2e5f50762c27fb4b123e3619c3c02bdcba5e515309382e5bfb6f7d6486510bd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1a4b83328c98d518a2699c2cbe9e9b055e78aa57fa8639f1b88deb8b3750b5dc\",\"dweb:/ipfs/QmXdcYj5v7zQxXFPULShHkR5p4Wa2zYuupbHnFdV3cHYtc\"]},\"node_modules/@openzeppelin/contracts/utils/ReentrancyGuard.sol\":{\"keccak256\":\"0x11a5a79827df29e915a12740caf62fe21ebe27c08c9ae3e09abe9ee3ba3866d3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3cf0c69ab827e3251db9ee6a50647d62c90ba580a4d7bbff21f2bea39e7b2f4a\",\"dweb:/ipfs/QmZiKwtKU1SBX4RGfQtY7PZfiapbbu6SZ9vizGQD9UHjRA\"]},\"node_modules/@openzeppelin/contracts/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0x69f54c02b7d81d505910ec198c11ed4c6a728418a868b906b4a0cf29946fda84\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8e25e4bdb7ae1f21d23bfee996e22736fc0ab44cfabedac82a757b1edc5623b9\",\"dweb:/ipfs/QmQdWQvB6JCP9ZMbzi8EvQ1PTETqkcTWrbcVurS7DKpa5n\"]},\"node_modules/@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0xddce8e17e3d3f9ed818b4f4c4478a8262aab8b11ed322f1bf5ed705bb4bd97fa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8084aa71a4cc7d2980972412a88fe4f114869faea3fefa5436431644eb5c0287\",\"dweb:/ipfs/Qmbqfs5dRdPvHVKY8kTaeyc65NdqXRQwRK7h9s5UJEhD1p\"]},\"node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]},\"node_modules/@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]},\"node_modules/@openzeppelin/contracts/utils/structs/DoubleEndedQueue.sol\":{\"keccak256\":\"0x1e1d74658d7f4eab3d4f8fb0c6c5953bc5f629d9425e978d557dabff7b58b217\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://be0175d00008d452d3d553890f73a3d5d51dff4372f720336c8b98f26822fcdb\",\"dweb:/ipfs/QmUkE8g5xPExWoSAKwdi5ww1qJJVtEWtjSF93G2LMQkgD3\"]},\"node_modules/solidity-bytes-utils/contracts/BytesLib.sol\":{\"keccak256\":\"0xa5b10f04797d5a10a9ba07855108b6bd695940e6a3d128927b2f74a0d359868a\",\"license\":\"Unlicense\",\"urls\":[\"bzz-raw://a38d7680aacbb18dae659876b396b73bcc8f759672213f8a0efc4129e2648535\",\"dweb:/ipfs/QmfKFnwpTEGAnbRnZxMuv3mRCG9S9WMjFhFL23bftBT2Jq\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { - "inputs": [ - { - "internalType": "uint32", - "name": "_localEidV2", - "type": "uint32" - }, - { "internalType": "uint32", "name": "_vid", "type": "uint32" }, - { - "internalType": "address[]", - "name": "_messageLibs", - "type": "address[]" - }, - { - "internalType": "address", - "name": "_priceFeed", - "type": "address" - }, - { - "internalType": "address[]", - "name": "_signers", - "type": "address[]" - }, - { "internalType": "uint64", "name": "_quorum", "type": "uint64" }, - { - "internalType": "address[]", - "name": "_admins", - "type": "address[]" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "type": "error", - "name": "AccessControlBadConfirmation" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" }, - { - "internalType": "bytes32", - "name": "neededRole", - "type": "bytes32" - } - ], - "type": "error", - "name": "AccessControlUnauthorizedAccount" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "executableHash", - "type": "bytes32" - } - ], - "type": "error", - "name": "DVN_DuplicatedHash" - }, - { "inputs": [], "type": "error", "name": "DVN_InstructionExpired" }, - { - "inputs": [ - { "internalType": "bytes32", "name": "role", "type": "bytes32" } - ], - "type": "error", - "name": "DVN_InvalidRole" - }, - { "inputs": [], "type": "error", "name": "DVN_InvalidSignatures" }, - { - "inputs": [ - { "internalType": "address", "name": "target", "type": "address" } - ], - "type": "error", - "name": "DVN_InvalidTarget" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "vid", "type": "uint32" } - ], - "type": "error", - "name": "DVN_InvalidVid" - }, - { "inputs": [], "type": "error", "name": "DVN_OnlySelf" }, - { "inputs": [], "type": "error", "name": "EnforcedPause" }, - { "inputs": [], "type": "error", "name": "ExpectedPause" }, - { "inputs": [], "type": "error", "name": "MultiSig_OnlySigner" }, - { "inputs": [], "type": "error", "name": "MultiSig_QuorumIsZero" }, - { - "inputs": [ - { - "internalType": "uint64", - "name": "signersSize", - "type": "uint64" - }, - { "internalType": "uint64", "name": "quorum", "type": "uint64" } - ], - "type": "error", - "name": "MultiSig_SignersSizeIsLessThanQuorum" - }, - { - "inputs": [ - { "internalType": "address", "name": "signer", "type": "address" }, - { "internalType": "bool", "name": "active", "type": "bool" } - ], - "type": "error", - "name": "MultiSig_StateAlreadySet" - }, - { "inputs": [], "type": "error", "name": "MultiSig_UnorderedSigners" }, - { - "inputs": [ - { "internalType": "address", "name": "token", "type": "address" } - ], - "type": "error", - "name": "SafeERC20FailedOperation" - }, - { - "inputs": [ - { "internalType": "address", "name": "_to", "type": "address" }, - { "internalType": "uint256", "name": "_value", "type": "uint256" } - ], - "type": "error", - "name": "Transfer_NativeFailed" - }, - { "inputs": [], "type": "error", "name": "Transfer_ToAddressIsZero" }, - { "inputs": [], "type": "error", "name": "Worker_NotAllowed" }, - { "inputs": [], "type": "error", "name": "Worker_OnlyMessageLib" }, - { - "inputs": [], - "type": "error", - "name": "Worker_RoleRenouncingDisabled" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_index", - "type": "uint256", - "indexed": false - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes", - "indexed": false - } - ], - "type": "event", - "name": "ExecuteFailed", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "struct ExecuteParam", - "name": "param", - "type": "tuple", - "components": [ - { "internalType": "uint32", "name": "vid", "type": "uint32" }, - { - "internalType": "address", - "name": "target", - "type": "address" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "expiration", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "signatures", - "type": "bytes" - } - ], - "indexed": false - }, - { - "internalType": "bytes32", - "name": "_hash", - "type": "bytes32", - "indexed": false - } - ], - "type": "event", - "name": "HashAlreadyUsed", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address", - "indexed": false - } - ], - "type": "event", - "name": "Paused", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32", - "indexed": true - }, - { - "internalType": "bytes32", - "name": "previousAdminRole", - "type": "bytes32", - "indexed": true - }, - { - "internalType": "bytes32", - "name": "newAdminRole", - "type": "bytes32", - "indexed": true - } - ], - "type": "event", - "name": "RoleAdminChanged", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32", - "indexed": true - }, - { - "internalType": "address", - "name": "account", - "type": "address", - "indexed": true - }, - { - "internalType": "address", - "name": "sender", - "type": "address", - "indexed": true - } - ], - "type": "event", - "name": "RoleGranted", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32", - "indexed": true - }, - { - "internalType": "address", - "name": "account", - "type": "address", - "indexed": true - }, - { - "internalType": "address", - "name": "sender", - "type": "address", - "indexed": true - } - ], - "type": "event", - "name": "RoleRevoked", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "uint16", - "name": "multiplierBps", - "type": "uint16", - "indexed": false - } - ], - "type": "event", - "name": "SetDefaultMultiplierBps", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "struct IDVN.DstConfigParam[]", - "name": "params", - "type": "tuple[]", - "components": [ - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { "internalType": "uint64", "name": "gas", "type": "uint64" }, - { - "internalType": "uint16", - "name": "multiplierBps", - "type": "uint16" - }, - { - "internalType": "uint128", - "name": "floorMarginUSD", - "type": "uint128" - } - ], - "indexed": false - } - ], - "type": "event", - "name": "SetDstConfig", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "priceFeed", - "type": "address", - "indexed": false - } - ], - "type": "event", - "name": "SetPriceFeed", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32", - "indexed": false - }, - { - "internalType": "uint8[]", - "name": "optionTypes", - "type": "uint8[]", - "indexed": false - } - ], - "type": "event", - "name": "SetSupportedOptionTypes", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "workerLib", - "type": "address", - "indexed": false - } - ], - "type": "event", - "name": "SetWorkerLib", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address", - "indexed": false - } - ], - "type": "event", - "name": "Unpaused", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "uint64", - "name": "_quorum", - "type": "uint64", - "indexed": false - } - ], - "type": "event", - "name": "UpdateQuorum", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_signer", - "type": "address", - "indexed": false - }, - { - "internalType": "bool", - "name": "_active", - "type": "bool", - "indexed": false - } - ], - "type": "event", - "name": "UpdateSigner", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "fee", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "VerifierFeePaid", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "idx", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "VerifySignaturesFailed", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "lib", - "type": "address", - "indexed": false - }, - { - "internalType": "address", - "name": "to", - "type": "address", - "indexed": false - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "Withdraw", - "anonymous": false - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "DEFAULT_ADMIN_ROLE", - "outputs": [ - { "internalType": "bytes32", "name": "", "type": "bytes32" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "allowlistSize", - "outputs": [ - { "internalType": "uint64", "name": "", "type": "uint64" } - ] - }, - { - "inputs": [ - { - "internalType": "struct ILayerZeroDVN.AssignJobParam", - "name": "_param", - "type": "tuple", - "components": [ - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { - "internalType": "bytes", - "name": "packetHeader", - "type": "bytes" - }, - { - "internalType": "bytes32", - "name": "payloadHash", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "confirmations", - "type": "uint64" - }, - { - "internalType": "address", - "name": "sender", - "type": "address" - } - ] - }, - { "internalType": "bytes", "name": "_options", "type": "bytes" } - ], - "stateMutability": "payable", - "type": "function", - "name": "assignJob", - "outputs": [ - { "internalType": "uint256", "name": "totalFee", "type": "uint256" } - ] - }, - { - "inputs": [ - { "internalType": "uint16", "name": "_dstEid", "type": "uint16" }, - { "internalType": "uint16", "name": "", "type": "uint16" }, - { - "internalType": "uint64", - "name": "_confirmations", - "type": "uint64" - }, - { "internalType": "address", "name": "_sender", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "assignJob", - "outputs": [ - { "internalType": "uint256", "name": "totalFee", "type": "uint256" } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "_sender", "type": "address" }, - { "internalType": "bytes", "name": "", "type": "bytes" }, - { "internalType": "bytes", "name": "_cmd", "type": "bytes" }, - { "internalType": "bytes", "name": "_options", "type": "bytes" } - ], - "stateMutability": "payable", - "type": "function", - "name": "assignJob", - "outputs": [ - { "internalType": "uint256", "name": "fee", "type": "uint256" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "defaultMultiplierBps", - "outputs": [ - { "internalType": "uint16", "name": "", "type": "uint16" } - ] - }, - { - "inputs": [ - { "internalType": "uint32", "name": "dstEid", "type": "uint32" } - ], - "stateMutability": "view", - "type": "function", - "name": "dstConfig", - "outputs": [ - { "internalType": "uint64", "name": "gas", "type": "uint64" }, - { - "internalType": "uint16", - "name": "multiplierBps", - "type": "uint16" - }, - { - "internalType": "uint128", - "name": "floorMarginUSD", - "type": "uint128" - } - ] - }, - { - "inputs": [ - { - "internalType": "struct ExecuteParam[]", - "name": "_params", - "type": "tuple[]", - "components": [ - { "internalType": "uint32", "name": "vid", "type": "uint32" }, - { - "internalType": "address", - "name": "target", - "type": "address" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "expiration", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "signatures", - "type": "bytes" - } - ] - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "execute" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_dstEid", "type": "uint32" }, - { - "internalType": "uint64", - "name": "_confirmations", - "type": "uint64" - }, - { "internalType": "address", "name": "_sender", "type": "address" }, - { "internalType": "bytes", "name": "_options", "type": "bytes" } - ], - "stateMutability": "view", - "type": "function", - "name": "getFee", - "outputs": [ - { "internalType": "uint256", "name": "fee", "type": "uint256" } - ] - }, - { - "inputs": [ - { "internalType": "uint16", "name": "_dstEid", "type": "uint16" }, - { "internalType": "uint16", "name": "", "type": "uint16" }, - { - "internalType": "uint64", - "name": "_confirmations", - "type": "uint64" - }, - { "internalType": "address", "name": "_sender", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "getFee", - "outputs": [ - { "internalType": "uint256", "name": "fee", "type": "uint256" } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "_sender", "type": "address" }, - { "internalType": "bytes", "name": "", "type": "bytes" }, - { "internalType": "bytes", "name": "_cmd", "type": "bytes" }, - { "internalType": "bytes", "name": "_options", "type": "bytes" } - ], - "stateMutability": "view", - "type": "function", - "name": "getFee", - "outputs": [ - { "internalType": "uint256", "name": "fee", "type": "uint256" } - ] - }, - { - "inputs": [ - { "internalType": "bytes32", "name": "role", "type": "bytes32" } - ], - "stateMutability": "view", - "type": "function", - "name": "getRoleAdmin", - "outputs": [ - { "internalType": "bytes32", "name": "", "type": "bytes32" } - ] - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" } - ], - "stateMutability": "view", - "type": "function", - "name": "getSupportedOptionTypes", - "outputs": [ - { "internalType": "uint8[]", "name": "", "type": "uint8[]" } - ] - }, - { - "inputs": [ - { "internalType": "bytes32", "name": "_role", "type": "bytes32" }, - { "internalType": "address", "name": "_account", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "grantRole" - }, - { - "inputs": [ - { "internalType": "address", "name": "_sender", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "hasAcl", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "bytes32", "name": "role", "type": "bytes32" }, - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "hasRole", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_vid", "type": "uint32" }, - { "internalType": "address", "name": "_target", "type": "address" }, - { "internalType": "bytes", "name": "_callData", "type": "bytes" }, - { - "internalType": "uint256", - "name": "_expiration", - "type": "uint256" - } - ], - "stateMutability": "pure", - "type": "function", - "name": "hashCallData", - "outputs": [ - { "internalType": "bytes32", "name": "", "type": "bytes32" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "localEidV2", - "outputs": [ - { "internalType": "uint32", "name": "", "type": "uint32" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "paused", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "priceFeed", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "quorum", - "outputs": [ - { "internalType": "uint64", "name": "", "type": "uint64" } - ] - }, - { - "inputs": [ - { - "internalType": "struct ExecuteParam", - "name": "_param", - "type": "tuple", - "components": [ - { "internalType": "uint32", "name": "vid", "type": "uint32" }, - { - "internalType": "address", - "name": "target", - "type": "address" - }, - { - "internalType": "bytes", - "name": "callData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "expiration", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "signatures", - "type": "bytes" - } - ] - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "quorumChangeAdmin" - }, - { - "inputs": [ - { "internalType": "bytes32", "name": "", "type": "bytes32" }, - { "internalType": "address", "name": "", "type": "address" } - ], - "stateMutability": "pure", - "type": "function", - "name": "renounceRole" - }, - { - "inputs": [ - { "internalType": "bytes32", "name": "_role", "type": "bytes32" }, - { "internalType": "address", "name": "_account", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "revokeRole" - }, - { - "inputs": [ - { - "internalType": "uint16", - "name": "_multiplierBps", - "type": "uint16" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setDefaultMultiplierBps" - }, - { - "inputs": [ - { - "internalType": "struct IDVN.DstConfigParam[]", - "name": "_params", - "type": "tuple[]", - "components": [ - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { "internalType": "uint64", "name": "gas", "type": "uint64" }, - { - "internalType": "uint16", - "name": "multiplierBps", - "type": "uint16" - }, - { - "internalType": "uint128", - "name": "floorMarginUSD", - "type": "uint128" - } - ] - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setDstConfig" - }, - { - "inputs": [ - { "internalType": "bool", "name": "_paused", "type": "bool" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setPaused" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_priceFeed", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setPriceFeed" - }, - { - "inputs": [ - { "internalType": "uint64", "name": "_quorum", "type": "uint64" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setQuorum" - }, - { - "inputs": [ - { "internalType": "address", "name": "_signer", "type": "address" }, - { "internalType": "bool", "name": "_active", "type": "bool" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setSigner" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { - "internalType": "uint8[]", - "name": "_optionTypes", - "type": "uint8[]" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setSupportedOptionTypes" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_workerFeeLib", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setWorkerFeeLib" - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "signerSize", - "outputs": [ - { "internalType": "uint64", "name": "", "type": "uint64" } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "signer", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "signers", - "outputs": [ - { "internalType": "bool", "name": "active", "type": "bool" } - ] - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "stateMutability": "view", - "type": "function", - "name": "supportsInterface", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "executableHash", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function", - "name": "usedHashes", - "outputs": [ - { "internalType": "bool", "name": "used", "type": "bool" } - ] - }, - { - "inputs": [ - { "internalType": "bytes32", "name": "_hash", "type": "bytes32" }, - { "internalType": "bytes", "name": "_signatures", "type": "bytes" } - ], - "stateMutability": "view", - "type": "function", - "name": "verifySignatures", - "outputs": [ - { "internalType": "bool", "name": "", "type": "bool" }, - { - "internalType": "enum MultiSigMock.Errors", - "name": "", - "type": "uint8" - } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "vid", - "outputs": [ - { "internalType": "uint32", "name": "", "type": "uint32" } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "_lib", "type": "address" }, - { "internalType": "address", "name": "_to", "type": "address" }, - { "internalType": "uint256", "name": "_amount", "type": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "withdrawFee" - }, - { - "inputs": [ - { "internalType": "address", "name": "_lib", "type": "address" }, - { - "internalType": "address payable", - "name": "_to", - "type": "address" - }, - { "internalType": "uint256", "name": "_amount", "type": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "withdrawFeeFromUlnV2" - }, - { - "inputs": [ - { "internalType": "address", "name": "_token", "type": "address" }, - { "internalType": "address", "name": "_to", "type": "address" }, - { "internalType": "uint256", "name": "_amount", "type": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "withdrawToken" - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "workerFeeLib", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ] - } - ], - "devdoc": { - "kind": "dev", - "methods": { - "assignJob((uint32,bytes,bytes32,uint64,address),bytes)": { - "details": "for ULN301, ULN302 and more to assign jobdvn network can reject job from _sender by adding/removing them from allowlist/denylist", - "params": { - "_options": "dvn options", - "_param": "assign job param" - } - }, - "assignJob(address,bytes,bytes,bytes)": { - "details": "to support ReadLib" - }, - "assignJob(uint16,uint16,uint64,address)": { - "details": "to support ULNv2dvn network can reject job from _sender by adding/removing them from allowlist/denylist", - "params": { - "": "//_outboundProofType outbound proof type", - "_confirmations": "block confirmations", - "_dstEid": "destination EndpointId", - "_sender": "message sender address" - } - }, - "constructor": { - "details": "DVN doesn't have a roleAdmin (address(0x0))Supports all of ULNv2, ULN301, ULN302 and more", - "params": { - "_admins": "array of admin addresses that are granted the ADMIN_ROLE", - "_localEidV2": "local endpoint-v2 eid", - "_messageLibs": "array of message lib addresses that are granted the MESSAGE_LIB_ROLE", - "_priceFeed": "price feed address", - "_quorum": "quorum for multisig", - "_signers": "array of signer addresses for multisig", - "_vid": "unique identifier for this DVN instance" - } - }, - "execute((uint32,address,bytes,uint256,bytes)[])": { - "details": "takes a list of instructions and executes them in orderif any of the instructions fail, it will emit an error event and continue to execute the rest of the instructions", - "params": { - "_params": "array of ExecuteParam, includes target, callData, expiration, signatures" - } - }, - "getFee(address,bytes,bytes,bytes)": { - "details": "to support ReadLib" - }, - "getFee(uint16,uint16,uint64,address)": { - "details": "to support ULNv2getFee can revert if _sender doesn't pass ACL", - "params": { - "": "//_outboundProofType outbound proof type", - "_confirmations": "block confirmations", - "_dstEid": "destination EndpointId", - "_sender": "message sender address" - } - }, - "getFee(uint32,uint64,address,bytes)": { - "details": "getFee can revert if _sender doesn't pass ACL", - "params": { - "_confirmations": "block confirmations", - "_dstEid": "destination EndpointId", - "_options": "dvn options", - "_sender": "message sender address" - }, - "returns": { "fee": "fee in native amount" } - }, - "getRoleAdmin(bytes32)": { - "details": "Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}." - }, - "grantRole(bytes32,address)": { - "details": "overrides AccessControl to allow self/admin to grant role'function sig 0x2f2ff15d", - "params": { - "_account": "account to grant role to", - "_role": "role to grant" - } - }, - "hasAcl(address)": { - "details": "Access control list using allowlist and denylist1) if one address is in the denylist -> deny2) else if address in the allowlist OR allowlist is empty (allows everyone)-> allow3) else deny", - "params": { "_sender": "address to check" } - }, - "hasRole(bytes32,address)": { - "details": "Returns `true` if `account` has been granted `role`." - }, - "hashCallData(uint32,address,bytes,uint256)": { - "params": { - "_callData": "call data", - "_expiration": "expiration timestamp", - "_target": "target address" - }, - "returns": { "_0": "hash of above" } - }, - "paused()": { - "details": "Returns true if the contract is paused, and false otherwise." - }, - "quorumChangeAdmin((uint32,address,bytes,uint256,bytes))": { - "details": "calldata in the case is abi.encode new admin address" - }, - "renounceRole(bytes32,address)": { - "details": "overrides AccessControl to disable renouncing of roles" - }, - "revokeRole(bytes32,address)": { - "details": "overrides AccessControl to allow self/admin to revoke rolefunction sig 0xd547741f", - "params": { - "_account": "account to revoke role from", - "_role": "role to revoke" - } - }, - "setDefaultMultiplierBps(uint16)": { - "params": { "_multiplierBps": "default multiplier for worker fee" } - }, - "setDstConfig((uint32,uint64,uint16,uint128)[])": { - "params": { "_params": "array of DstConfigParam" } - }, - "setPaused(bool)": { - "details": "flag to pause execution of workers (if used with whenNotPaused modifier)", - "params": { "_paused": "true to pause, false to unpause" } - }, - "setPriceFeed(address)": { - "params": { "_priceFeed": "price feed address" } - }, - "setQuorum(uint64)": { - "details": "set quorum for multisigfunction sig 0x8585c945", - "params": { "_quorum": "to set" } - }, - "setSigner(address,bool)": { - "details": "set signers for multisigfunction sig 0x31cb6105", - "params": { - "_active": "true to add, false to remove", - "_signer": "signer address" - } - }, - "setWorkerFeeLib(address)": { - "params": { "_workerFeeLib": "worker fee lib address" } - }, - "supportsInterface(bytes4)": { - "details": "See {IERC165-supportsInterface}." - }, - "withdrawFee(address,address,uint256)": { - "details": "supports withdrawing fee from ULN301, ULN302 and more", - "params": { - "_amount": "amount to withdraw", - "_lib": "message lib address", - "_to": "address to withdraw fee to" - } - }, - "withdrawFeeFromUlnV2(address,address,uint256)": { - "details": "to support ULNv2the withdrawFee function for ULN30X is built in the Worker contract", - "params": { - "_amount": "amount to withdraw", - "_lib": "message lib address", - "_to": "address to withdraw to" - } - }, - "withdrawToken(address,address,uint256)": { - "details": "supports withdrawing token from the contract", - "params": { - "_amount": "amount to withdraw", - "_to": "address to withdraw token to", - "_token": "token address" - } - } - }, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": { - "quorumChangeAdmin((uint32,address,bytes,uint256,bytes))": { - "notice": "function for quorum to change admin without going through execute function" - } - }, - "version": 1 - } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/DVNMock.sol": "DVNMock" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/MessageLibBase.sol": { - "keccak256": "0x14899a4398251439938d6ef8a15ea8c6acdddc98a7b0066d7e63676192dea0d1", - "urls": [ - "bzz-raw://3998d03de7025c2c601a4fdcaf9475d12a1ef661fcf1a685ece84fdde6498cf9", - "dweb:/ipfs/QmReknRbiGAiPqq9toKyXKo6hUKXrQPJyyS6LnTGjiDKoY" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/ReceiveLibBaseE2.sol": { - "keccak256": "0x2fdbd1b13751a264cd6e7fac518a2685b15c968806c03f1d18b177fc0526e9a9", - "urls": [ - "bzz-raw://600af48bb67939b5f4a3a00c76863ee290a55325ea8697f7cc4b46321ab26ef2", - "dweb:/ipfs/QmdRigYaB6TXczjtVkvwpUEBwvvvDuymFoViMCB6xQPYUU" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/SendLibBase.sol": { - "keccak256": "0x400eaa11c7d50b4c25b7625290ff00937b6875ad3986b353c37a4e62b5a834b1", - "urls": [ - "bzz-raw://1f51eb0785d3630815a9d63de1c1331fe966df4c3f2fb6750b8da7be9e9743a4", - "dweb:/ipfs/QmaAEf1kjhhff3AUhRiPm6ikpk2YMMrpKc2ccYzNs7waBy" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/SendLibBaseE2.sol": { - "keccak256": "0x90ada11d0a330732c56b989e59c8272b70f956a5d7be2cf209d6d51a51d35a9e", - "urls": [ - "bzz-raw://0abc7a6d07ec40a3a922256ad05bdd6eca10550d85bfd2e67147473617bb0497", - "dweb:/ipfs/QmRDphmFhx1scRJXcusg6pUhVQvp941oCJwnHGAPdrNY4T" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IExecutor.sol": { - "keccak256": "0x2fd26e454b060ede7afa15f8bbc67bd43f9181b6405ca411d36c8b538be016af", - "urls": [ - "bzz-raw://cf2142e83214bb392f69ed14266718cfd803f849a7239ee9a1950ddf66553696", - "dweb:/ipfs/QmSZ2mPMZqWBetMU8VESKtxy7UdSThUVmJmTFMHEyKLTGZ" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IExecutorFeeLib.sol": { - "keccak256": "0x801d12eca6d6b232fb91d949cdb70a4c547c5e27e73555f2f1eb9e757c639bcc", - "urls": [ - "bzz-raw://b61bdffe26ff3902edab3efb0b5af3808ec9e28d72db95b77128502b9bc7638d", - "dweb:/ipfs/Qmcyf3npDDEq28b9XqmXgSGyQegj2cxUZQ3UekSNf34g8M" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroExecutor.sol": { - "keccak256": "0x3647af317ee126b1247a782abb30e59ec5ab21b4945f1d3b4370d1fa3c1bf347", - "urls": [ - "bzz-raw://5b51cd5e7347ee869a06bd57a698f40e4a901ec7fdcb27f0ef485e4a0e1e9be4", - "dweb:/ipfs/QmP2Nc73veRzLGdUahkjhQAiKR9ZWYiUtSGwoMB1sPXxUp" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroPriceFeed.sol": { - "keccak256": "0xb4df72798a64f5ea44775b526e0c417c3de0ffc661659d7b31d5b28567c6fbcc", - "urls": [ - "bzz-raw://30ca5fd5e3227a7bffc51654ee3bfebdd591a131f86846ac42dea8a40c5cf1d8", - "dweb:/ipfs/QmXNmQCF8TZAFpUxgPa1rgWt4ktsBV38A8Hax7TiYLgybW" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroReadExecutor.sol": { - "keccak256": "0x360936885f173f816ffb47e555d480928e74eb1ad54a76af0f4595ecba2d5657", - "urls": [ - "bzz-raw://16b5095e6439b1e416eb70571a1dd8f4f21a0d77b19c9e510ca289d99e5e09ab", - "dweb:/ipfs/QmZ2mjQDQ35gJseyzmQhik4cBgN2ESADzofFNVFvgS64hv" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroTreasury.sol": { - "keccak256": "0x2aab2a3cf50e20af56d9204b1367d52a47abba0b0c7c21f304d413de1ced6345", - "urls": [ - "bzz-raw://f8b603b5e5e62c621715f8449280af240a4add8721c4ae8f5e8e491507f6e4c5", - "dweb:/ipfs/QmUQ7Ti7CPmKnRbQFN9TLvVbeZhsi1xUjqZPTJ36dCZ6y8" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IWorker.sol": { - "keccak256": "0xa6b61913767305227576cc6da5067de4208f09a4f58bfbfe32beafdfae9869b1", - "urls": [ - "bzz-raw://b7fce83bfb831f383606aee7f5ff68a330c8526bb1036f9ba0813d3e4fa8d534", - "dweb:/ipfs/QmR7zAqJkmCgBj6sguS8t2WthY5k6FwsakgH4UY11uqD4n" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/libs/ExecutorOptions.sol": { - "keccak256": "0x441b723f2f597be2ec2bb361fcf3f11852c23534db1cfa7d2ffff7e61d228e3c", - "urls": [ - "bzz-raw://636817d20f90f75032e35376256cf5f4d2a047d6541b45f644d82a2e4dc8f1eb", - "dweb:/ipfs/QmcEFRxCmmm9hKbqi7Powj6ATbw4JXXJW4rxfwMcxWsDnT" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/libs/SafeCall.sol": { - "keccak256": "0xc3b7b7927472f7c1ca9703af310e9050c798afaccf399ad0f131e179b8582c8d", - "urls": [ - "bzz-raw://e5be13af32ff6b371985d405bc6fe8ac2faf5445bd88fda2dab4b869f66e3f89", - "dweb:/ipfs/Qmd21k4H2tAHKrpiuHUbH87eNtHLLJzHj9ZCrMh8AKfDHh" - ], - "license": "MIT OR Apache-2.0" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/ReceiveUlnBase.sol": { - "keccak256": "0x36c93de122bbb74ae31e3eacf567c0a3bc649ed3ebb2766c76dfa93aebcace44", - "urls": [ - "bzz-raw://e83bcaa80e2715e68818dd53e4dc6ad8e665b8249d69a08cf2d2635b9757fb79", - "dweb:/ipfs/QmSKh6NgaTrTSa48gDzGGqGNAcs5jVEHgZSzZzbuJSEsxo" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/SendUlnBase.sol": { - "keccak256": "0x6d9962ffa476ac2efb78f1415bb2f650a30eedeef2b75fdab0aeafaf3e8da6a5", - "urls": [ - "bzz-raw://21f32c56b67d2e770444b809c1a85a96627194c605ad317d482dfc5b6ce7e8c2", - "dweb:/ipfs/QmP5tzoMDzTdduEcSpYHgg6WCHLQGuc1djDMFUBycJPLCU" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/UlnBase.sol": { - "keccak256": "0xfdb1d04f4996c0a9d35abfbfcf10d978da638885eb77d0a9dc35cea5993074e3", - "urls": [ - "bzz-raw://776d58d88d13b058f236cf18c32b4b9718a021513fc4e198287f4fe18ec5aba4", - "dweb:/ipfs/QmdNX8jJu2aXJ8Dpbt2ohfhT8RKQLuvh58sW6SAXcUTcV9" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IDVN.sol": { - "keccak256": "0x6becdfab6c1fcaf98f402bee48495895e54825f9d6eef6e292dde0caed628284", - "urls": [ - "bzz-raw://2273341033856737cd46704a1a769768feae696d0e7a912f5be9de8ffdd2180c", - "dweb:/ipfs/QmY1xBAmMX9jND1HAb7tDyZNPgFReXMqs1vtmHbShKZFQY" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IDVNFeeLib.sol": { - "keccak256": "0xed4a8e77148328132d8f4f2726c4aeec6b490cf03a1d5940bde0ab8d72954de9", - "urls": [ - "bzz-raw://7b07802ca32bf10f68e51da872fb358807446dc2242314374d226493a6e9e7dc", - "dweb:/ipfs/QmfSwWPLgitDy2a9S3mCNBDk6kAcK9n186Dtvj7qg84i12" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/ILayerZeroDVN.sol": { - "keccak256": "0x308e77078242fd5c5746ec29c12e618249134f9e4377c0028ab8f59c07a6014b", - "urls": [ - "bzz-raw://2f92cf397a8d26864ac92dfcd1b98e92a32c47f556a62c5e6dc1618734c1caa3", - "dweb:/ipfs/QmXN3XJXEKq5djV6HeM6jrLycmJPFhMhecsYZ2TaRsQmhg" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/ILayerZeroReadDVN.sol": { - "keccak256": "0x759a3ee7614c2de54b152b0278845f91ac9760d8c22045b2fee89e3e744402b8", - "urls": [ - "bzz-raw://7a2dbf6bcf5bfab408f18c104b34c390e8bfabb0eeb1a10e3a9c0fb14c8c61d5", - "dweb:/ipfs/QmWxmRbDBkbhGmNsRyXqQXB1QaWRS4qvh6a8achh8DQPKR" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IReceiveUlnE2.sol": { - "keccak256": "0xcdf7e690e5d5c0a3ec26a0d7b1a7fe49c7d16a3634721c3944f77d13ff5d4a91", - "urls": [ - "bzz-raw://bd32a05dde1b83be1ce64fcfb9495d8b9bf0c5b3a5b521ac6c214e87e32f3cdc", - "dweb:/ipfs/QmcDKTor8EQf3cbiWYmeFb9qzUM8JGPzGGN9qJnYjP1nN7" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/DVNOptions.sol": { - "keccak256": "0x2beee03cdf59a9bc72e94d08b69cb2e908725f4ceabb48651494938100e21e35", - "urls": [ - "bzz-raw://d88e121a39e74309f3575417df2318e2d2ee8bc8314e68dbf78544a9c393b141", - "dweb:/ipfs/QmRojBRAyENK21HnjevAWeoZZxtWkYZubB9Y78vCJPYeU6" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/ReadCmdCodecV1.sol": { - "keccak256": "0x52fbab4a114ce9defb2ffd57c0a978eee438b2c232862f7e20475e0dcadd4eda", - "urls": [ - "bzz-raw://a4d5d4e186e3f2a916ea02c2d1d0761069ab1a5c0d6f74719bbf3501a7ccb899", - "dweb:/ipfs/QmS2e12U9Fap2EK1CmSBTccL4PCKkHNdKJn2bXCqqKdbRn" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/SupportedCmdTypes.sol": { - "keccak256": "0x6b2534522c163714e499041ecd06aaeb93857373cef82cf2752f162bb7c69f9a", - "urls": [ - "bzz-raw://bf6c3545c3b9505692dbfaa29b40cab5ed9dc9b65e5804b6f47b5a76596120e9", - "dweb:/ipfs/QmNs98oRaMvpYhLCQ5yU256eYNEopFTrLRjjwm3gL4foQ3" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/UlnOptions.sol": { - "keccak256": "0x5df07fef16b20767f7524c367d90f696c12e8ce0e4fde7aecc9d83fb2b6b0e27", - "urls": [ - "bzz-raw://0997203f57d736e56ebb3d736550f1c7ff7950c8df0574c7abe95e22f847b850", - "dweb:/ipfs/QmZBjkH1vaPLyN3Jx9kGfVZKuTdfVWJfJVLSPok8SpjGbT" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/readlib/ReadLibBase.sol": { - "keccak256": "0x7d312ba1e6288cb201b211f58b814eaaa0b5993721475fbc64321b0e7a2c74d3", - "urls": [ - "bzz-raw://dfc0dce9362eca0f03b51e0e808389c8bf51fda901e6ca58da169f165e4fc3c8", - "dweb:/ipfs/QmSXAQ3veWf6gPXcgpX1XLZW9SyLQjBjCSdsFiQTttLNac" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/uln301/interfaces/IUltraLightNode301.sol": { - "keccak256": "0x47f8ebeaa7d96a6f337a18c46e3c532da578c7cb0a13fb6e6f014286b991902f", - "urls": [ - "bzz-raw://d51f208b931be54e0ae1801c71c0756251d8c26f8d9b7911be1ad57b3d4a5691", - "dweb:/ipfs/QmWqjst7jnYtSXQ9pakYHutDvENKLyqNg9nPfMxTH8p2Ed" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessageLibManager.sol": { - "keccak256": "0x64330e51de72e8d38cfc0eb5527d36baada46df4bc14233d3a8ecaf98098d69a", - "urls": [ - "bzz-raw://49aa45e5a26fc62e7af569cf915be8344adc78dceb6871c4c14bc5d115e59241", - "dweb:/ipfs/QmbTuW7kzPDYForDEPnaNQi6ZrmWqDxGVnHFiugnvTyq9K" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingChannel.sol": { - "keccak256": "0x8ab8cb12c8beba699c1a7f22ffa812ac553f7038326d0c0d0af77253005cfe73", - "urls": [ - "bzz-raw://7c7cba4ae16d0ca46ee0a365a204f7257ceaa892224604bf7c8e65c44737e46c", - "dweb:/ipfs/QmbQX5hJDKMwKdoo6QkdcusXQXH54SVCPe5hM1ycJZsg7y" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingComposer.sol": { - "keccak256": "0x20d36578e810e75346daf064813b76a177087214cae77628b1f9d43798cb52d1", - "urls": [ - "bzz-raw://475b6f3f1ba5d981d0c5f90b9e892d4f9f539f3b12196639b95770b5be4dbf6a", - "dweb:/ipfs/QmYyGrnR3vDt8Dqa2paQwTG9qrD6anAGFrDZmMra8KGC6s" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingContext.sol": { - "keccak256": "0x9616f3bd0d7293c9723f2ddf86f9f7030fbd99213c9748557eec8f6d13b25420", - "urls": [ - "bzz-raw://205e713f5af46f52799e51774ac74dbeee4056de6ddba3c4d78a327536426c54", - "dweb:/ipfs/QmZ2ZqDwxdjpJbh91qwMfRhhQu4AMEsjUcsTEsdRV4NAys" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroComposer.sol": { - "keccak256": "0xfaca7205d4211ee9208a7e59171e2301731f3d2a20c49b4a839821871f5fdd49", - "urls": [ - "bzz-raw://f254bc60ac26687b5320a43a556e30777b0745abf7cd64d5f4720d9b1d1f7fdf", - "dweb:/ipfs/QmRSJEZVgxaC3L2DdE6s8P5qkYfM3V5JMeseeFJJqGR4xz" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol": { - "keccak256": "0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3", - "urls": [ - "bzz-raw://bacc29fd3866af71e59cb0bdc1cf82c882a4a7f4e2652fd413c9f12649762083", - "dweb:/ipfs/QmZh2toLnrQDWaNYhS5K4NoW7Vxd2GdZx9KA77vKEDLAqs" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol": { - "keccak256": "0x9641abba8d53b08bb517d1b74801dd15ea7b84d77a6719085bd96c8ea94e3ca0", - "urls": [ - "bzz-raw://77415ae0820859e0faf3fabdce683cce9fa03ea026ae0f6fe081ef1c9205f933", - "dweb:/ipfs/QmXd7APqoCunQ2jYy73AHvi5gsZofLpm3SzM6FPo7zRPfL" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol": { - "keccak256": "0x5cf5f24751b4e3ea1c9c5ded07cedfdfd62566b6daaffcc0144733859c9dba0c", - "urls": [ - "bzz-raw://cae7e35007a714f007ea08045ef7c0cfa6c91fd2425b5028b2d49abad357a5f0", - "dweb:/ipfs/QmcDBs5tsiyB35b8cwzWQWNnpkawb3uuHRaqE77Hxm2tve" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol": { - "keccak256": "0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc", - "urls": [ - "bzz-raw://d8ff6a8a89297fa127f86b54e0db3eba1d6a6eeb4f6398d3c84d569665ac8f1b", - "dweb:/ipfs/QmVSwhw6xFDrLRAX4RXaCM47yBaBtac4wf36DYEq6KCTvT" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol": { - "keccak256": "0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972", - "urls": [ - "bzz-raw://7e1b245d58221d16d8b5e0f01ef3e289a24a7df1ace3b94239e4d5b954ad5927", - "dweb:/ipfs/Qmappsgp7PCY9rSSNE9Cdn4BTRX591WfCSEgq2HxhA3z6S" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol": { - "keccak256": "0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901", - "urls": [ - "bzz-raw://b18b23a1643fc6636c4ad9d9023e2e6ca2d3c2a4a046482d4655bff09950598d", - "dweb:/ipfs/Qma6G5SqiovwrMPfgqTrRngK1HWW373Wkf9c6YP2NhXpPk" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol": { - "keccak256": "0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e", - "urls": [ - "bzz-raw://5173fc9143bea314b159ca5a9adb5626659ef763bc598e27de5fa46efe3291a6", - "dweb:/ipfs/QmSLFeMFPmVeGxT4sxRPW28ictjAS22M8rLeYRu9TXkA6D" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol": { - "keccak256": "0xf1c07bc61e7b1dce195ed12d50f87980fbf2d63cac1326fd28287f55fe0ba625", - "urls": [ - "bzz-raw://060f10ff7afc33c1c2f2b4b5ba29231fd3c943146488084d0e4ab99fce991d97", - "dweb:/ipfs/QmaSsefAqqEqtf8FgFUmDYMwTsAty3X1pqDb6SiFvry6B3" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol": { - "keccak256": "0x2ebbcaaab3554edcd41b581f1a72ac1806afbfb8047d0d47ff098f9af30d6deb", - "urls": [ - "bzz-raw://2d4b2cf5c3b16dc76c6767f285b57c0af917972327b2be3f7cba5825402f5fc1", - "dweb:/ipfs/QmQQWiHE2jKEDbjzGutSoZwtApSXYfLqZt5CxEpFj8xyvT" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/CalldataBytesLib.sol": { - "keccak256": "0x5c0db161cef6603c3b256d4220f489419e7478ef775e52a80056654129c61875", - "urls": [ - "bzz-raw://a33245d0fdd3992bb56b31d1840108d36bb46c8d617b659ef1af8dd7ed86302d", - "dweb:/ipfs/QmWyBqT7Tdrfn5zz9xYM3V1PBtfAZAVwwCrrKwwfi3wMQK" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Errors.sol": { - "keccak256": "0x35bcd6ca99c4c8d9f7d8413d1b92fb4a4d4a420ce3bf64b0fb01e68e6bcf2fa7", - "urls": [ - "bzz-raw://0ac14f98563f9c610c936c93e71eff657efaba1e1d892be6a215aa5cb1f63a24", - "dweb:/ipfs/QmVZZ8owwfDGLQTAzQJJqmYY4KsrChDagh5GBK7rChT5wb" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/GUID.sol": { - "keccak256": "0x8a44524af7deb96593f6b5606e9973654a113e1687809f2e45d4a91ba89862d5", - "urls": [ - "bzz-raw://32dd0b5d1946e0cd5c7b728086aafac50a62c061115afb8b41254589c8a6732b", - "dweb:/ipfs/QmR9QqtiAUPRLaRVv5wnth3NGPhdWB8rJmWYfz3o5Z1mWj" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Transfer.sol": { - "keccak256": "0x621d6dd5b8b7e827351459fff4ac87c16ba4656757592cf67de8b199aea4cf9a", - "urls": [ - "bzz-raw://345aa8c007ed8b96a74260d289545713f1d7180df270d67687e3a540a61fa5c0", - "dweb:/ipfs/QmNWCvpqSuar6UGLDVshUc7shUv3pt1J5FTf9VyZZ13wXL" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/BlockedMessageLib.sol": { - "keccak256": "0xb2b55968b26294139742adee6c155897c8334f4c6bf72f1940456cc84e6fbab9", - "urls": [ - "bzz-raw://e758a1fdcea4039b19f1252e4e2958f4a0e05517eb3e151784431533446c225f", - "dweb:/ipfs/QmRBG345abgyUeTnSpuxdK1WbK5pvwhSmvBEgW1mnoYqTq" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/BitMaps.sol": { - "keccak256": "0xaad3c72ef43480d2253fd48b394e8fb7286d009991d2bc4e61be58ce48ac5ee9", - "urls": [ - "bzz-raw://b8c02b14f954416ba2148b389c87da8378ac8dd16ba3d458cbbfba8b0fd8639f", - "dweb:/ipfs/Qmd2EEQhYL2VmgJi1V4uiHM2WcYxF9iBtxSgcFkbS21rQD" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/ExecutorOptions.sol": { - "keccak256": "0x621c6090fc432f94a99f677a95d72b75f56db89ddc5fc870669777a313587c28", - "urls": [ - "bzz-raw://69086166f16d29e30c5eb9ca2f97afb27569afe619807d79736833a809a512d2", - "dweb:/ipfs/QmcZqXjFuVdTrfbteKBF3GuEpjVFZ2YNZTa3J87dyLsqav" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol": { - "keccak256": "0xc84cf1bf785977fe1fbe7566eef902c2db68d0e163813ebe6c34921754802680", - "urls": [ - "bzz-raw://de686666fc16fa432d4208d85cec87dc952faf3e481b683b9adf4b4610db4b09", - "dweb:/ipfs/QmdmQeopzmxqRzi9DNB4EJDrYUXFfD7fUhnGhSni4QejUW" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-v1-0.7/contracts/interfaces/ILayerZeroUltraLightNodeV2.sol": { - "keccak256": "0xf1f36bbbc40d03b96affa151affb47da75a1b69dc79f4b311841a072d12fdd22", - "urls": [ - "bzz-raw://9f4f188c2998ecbda28a389ad8038da15c2260b1df6a8d135b3d96422e292fda", - "dweb:/ipfs/QmeThR83tcaM4CmxQ2AamTafsgjcbGMfZtYcDHqw2CcwKa" - ], - "license": "BUSL-1.1" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/OptionsHelper.sol": { - "keccak256": "0x729ce2290d16a45a16ad936263803db6a6bebcfba5c063ebe0f0fd284ba828c0", - "urls": [ - "bzz-raw://7494875394fc968684761b22bb5fe05789f8d84ba07b2e0ab579ce0afe7aa973", - "dweb:/ipfs/QmZNrexRXL3ef3UnES5e8JcdyMJ5HVftwGKQjGC5CwNg9Q" - ], - "license": "UNLICENSED" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/TestHelperOz5.sol": { - "keccak256": "0xe60b21a345bb1c2e9ee2fb7301398d342da0acc3a730b442106a2ad9478f7a63", - "urls": [ - "bzz-raw://ee7e0a47ae666a16e33a51f946da4fe549e8f4c6ea1f1978850515172c44656f", - "dweb:/ipfs/QmR2AZ9pYiwMCV4wPPVaGGPRJEjuBoFjJEesHtbAYhNoFq" - ], - "license": "UNLICENSED" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/DVNFeeLibMock.sol": { - "keccak256": "0x4c2e212f73a1c2a2989af947eef715ebacb11a80d55e5fd18a89a905790971b1", - "urls": [ - "bzz-raw://30eb29a81414780828903f5320367e89020af5a4055b768e2be08d43605b1688", - "dweb:/ipfs/QmeC5bVtmaY6tn6Z2XpVFXAkxVWQCQUzKbP2V9nPdv3vCr" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/DVNMock.sol": { - "keccak256": "0xdafd7da964b6ac8637d543c30370739bb805f7e10b42043444689240b5c27b3f", - "urls": [ - "bzz-raw://154067632b4799f49c0b3a8c5304499f60b2c232ebd17c21912efdb72421bdab", - "dweb:/ipfs/QmUEr6VsNt2odnrL3xFrLKwZTVLkLXi8BDzpPWeiCxC63T" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/EndpointV2AltMock.sol": { - "keccak256": "0x026b2f530b336ee237f37dde6f617acefbbf74d933d2a80da4216882f78be1a9", - "urls": [ - "bzz-raw://097a9fdd5a321e6e8455a1db00f2abda6e810c31ce47d1bced9e574be262a28b", - "dweb:/ipfs/Qme17zGk93k5BghCWFXqeqppVahH4dHuw7U76K4EcJxsY1" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/EndpointV2Mock.sol": { - "keccak256": "0xe9096c53611537a121589b56b882fc4dd797d5cac60def708f794a15e3ca98ff", - "urls": [ - "bzz-raw://4092d5dd582b48a5f703e4361fc5fb66050b5fe3253891175275dc832bc8e045", - "dweb:/ipfs/QmXSTJJNx4rn2ByCaE6vxiHnkm366ZU7dScYH1JsUbVZ1V" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ExecutorFeeLibMock.sol": { - "keccak256": "0x4a47aaf41049710d5f05fcc66885cacc0dabc1864778b56ac75a59b61eef5a01", - "urls": [ - "bzz-raw://c9b8c26b38cb138c3225efbab8b1d2e0f43343798658a0f2ed9669c16e5a97ff", - "dweb:/ipfs/QmV21G7Qwoi9gXYT8bKXDwnQDvjdZCAo2M9MqTKq4nQU9U" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ExecutorMock.sol": { - "keccak256": "0xbcdc4500270cd5496f10760ffe9e0444d23e454dd0ae2555e0661acf22fce96f", - "urls": [ - "bzz-raw://b816999bcfef5586b5e80bba21584b821fd7f7b32c276492adee530ffa83bb73", - "dweb:/ipfs/QmXLV8ieYdrTBERajBCVuMzknFyPHJjnw7MGkzULAdjdt8" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/MultiSigMock.sol": { - "keccak256": "0xc7c90e073e52af1da6c07e3d3f7477b064a89e78935c16e9872457df503c6830", - "urls": [ - "bzz-raw://cef1ae2d517e152616aea7f8f5c15fa1fbabbec8896a9c30a9eed35fb56b4f2f", - "dweb:/ipfs/QmeitPMQht2WfbR9ZLzwKWgThamdsJkobeaWo6ojTCoQG5" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/PriceFeedMock.sol": { - "keccak256": "0xd8f419b25c648287b5b7f0923b069b2449c51e807c9153df39445f2f83e55f44", - "urls": [ - "bzz-raw://bb300a5bb62655073c7aa9cd2221e60e59ce904a0d73f7f5e06af7c9df3445ec", - "dweb:/ipfs/QmcYb2qFevymfkWhTqGaNH5HwK9MMUixzAKJJAdNQHSCbw" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ReadLib1002Mock.sol": { - "keccak256": "0x1403b7a91b185fd8211f00fa380a0b8918e92e663c403a1dafa30f1667091fdc", - "urls": [ - "bzz-raw://7494444260a981ae9a9e11cd8981fad35a6b45a9c09cf72c05aad88ee191e7f0", - "dweb:/ipfs/QmaTyujm37PsCobQ36ootD5xVgKyBYqeUTdTJij9x3oaN6" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ReceiveUln302Mock.sol": { - "keccak256": "0x8e60b01e9bc801167b374dc119b41832d546afd43c143a0cd15ab1941198e121", - "urls": [ - "bzz-raw://bb1512762417dda9cd81fd9b41f590fd05888358fda1c2ab7e79e0cfabf61ec4", - "dweb:/ipfs/QmPAgBwdjLz29vE5L1Jth1Wvx6TTM1ig97amVtAyDFF61Q" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/SendUln302Mock.sol": { - "keccak256": "0x0c5cb54ec6b18e77aa653f7d774ac9d010684dafc96794d1d02f12b6885cc348", - "urls": [ - "bzz-raw://24c5a8ba8d92c16ec3047229167528f57b38cbd64882140014126ca51ab14574", - "dweb:/ipfs/QmXQsMDtZ3qNmjnr2LYgctBpPKxffuC6EeWHvFUtLBS5st" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/SimpleMessageLibMock.sol": { - "keccak256": "0xe6c93840c612592686732dd516550816eb77d6cde92514220eacb72443dcb9b9", - "urls": [ - "bzz-raw://a6a00fb60b7ac66e746f0471c2262fc98febafeb8acad8785d38ce1ddc4cc991", - "dweb:/ipfs/QmboboJskbXBbsyAGGRbW4JQCPJo9WiLFy7nwQxGVS9UhZ" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/WorkerMock.sol": { - "keccak256": "0x6c5bc31c117033dd35fa7ab3b13b1647a4b449c5f5b4cbff41bce8a63529ab97", - "urls": [ - "bzz-raw://01aa1d3f3b8e2fd4b544312d96916b16b97e01ab740e2bae1137723b2f1a31b1", - "dweb:/ipfs/QmVMemJ4MSgi6y9NxDdSeB6QbJRtCWojJNxzs3CRLT56EA" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/test.sol": { - "keccak256": "0x8758531bbac3972efcf1fa46383dbe1d276406fe527bc7abb2f236486278e83b", - "urls": [ - "bzz-raw://1f64264d61506847acf8761e84aff690cebe830958eac00bac7924d8be569240", - "dweb:/ipfs/QmSekDJvJ82MZAmr63n7YvfLzQ7gS4NLSHPmHL3GN3rw8k" - ], - "license": "GPL-3.0-or-later" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Base.sol": { - "keccak256": "0x4ff1a785311017d1eedb1b4737956fa383067ad34eb439abfec1d989754dde1c", - "urls": [ - "bzz-raw://f553622969b9fdb930246704a4c10dfaee6b1a4468c142fa7eb9dc292a438224", - "dweb:/ipfs/QmcxqHnqdQsMVtgsfH9VNLmZ3g7GhgNagfq7yvNCDcCHFK" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdAssertions.sol": { - "keccak256": "0x1a0dee4d8b2c81e9318e87dd85ef009467ebf7dba6575530d1fce94d34dbae60", - "urls": [ - "bzz-raw://ddd790c86ddde1013d1f7a552a80168eacf2e9244077f96799180644ad523a5b", - "dweb:/ipfs/QmYinBFt9uEVFXP9ytT9CDoNpzWieQVgLWRFRNiypMzJaL" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdChains.sol": { - "keccak256": "0x598b85609125830885b8fb54a18f447d04f8dd799aca3de81baef35eb6b783c0", - "urls": [ - "bzz-raw://c9c128aae4f5668d8c8f71e9e6d9379d8451b8713d139cb66a02d23bc1c75f69", - "dweb:/ipfs/QmVRihXHWi2yg9CcAhzKf63Y7m6gWz4P1giGMhXUHT3DFu" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdCheats.sol": { - "keccak256": "0xb72f3519e0bf7d31df5d68557525f4fc55d861c3fb3b0f7793144ef7c94cbeb7", - "urls": [ - "bzz-raw://f3456d0f78e6f61203fa7871ba2df0d35925f10db3baee14be623ce2a35b84e2", - "dweb:/ipfs/QmWE6QQSBvJifHMraisBTrf1x4WCwrDoTPLX8UKajTiApc" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdError.sol": { - "keccak256": "0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77", - "urls": [ - "bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6", - "dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdInvariant.sol": { - "keccak256": "0x67299bfacd77fddfa2a67b8e2b901e0e333618a4975fb94850b07475e51f6de6", - "urls": [ - "bzz-raw://1b61121d310f4053ce344b345b4a9ccf43b059daf9097ec2647f594beaca896d", - "dweb:/ipfs/QmZUCoTtXBM9zfAZVbj2dFPPnKaV1CSZzXE7zictyg3Gfz" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdJson.sol": { - "keccak256": "0x8f914dbd016bd0e318fe2b8bd556fbc8256c7cddc24e3e4fcb9f3c1c1935592d", - "urls": [ - "bzz-raw://19e704df493dde38323303b07d18cadfeb4dcadf1ddc2301add4aea9474fbb5e", - "dweb:/ipfs/QmZasuGiLK8LHwWtvpqEBxUR6QFY6GdzLMTJ9q7CMf8PNZ" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdMath.sol": { - "keccak256": "0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2", - "urls": [ - "bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92", - "dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdStorage.sol": { - "keccak256": "0x4298f3f4cedaedb07029820b1daad2c03af45379559392201f7bf3ec71105811", - "urls": [ - "bzz-raw://6e062f36d8d1ae3c383ef8975757926eaa9c4de3a92b5f1fe2d12748bcd8db32", - "dweb:/ipfs/QmcWkv3ia5Ew4DZNcudMNSTNXZ3W2QiXTZunRd44e9BT8z" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdStyle.sol": { - "keccak256": "0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d", - "urls": [ - "bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8", - "dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdUtils.sol": { - "keccak256": "0x502b18a4becda6ecd91fa8b419d8034946bfa80e6cc7f6497f51f8565bfadae0", - "urls": [ - "bzz-raw://bf499ee483a1dfd02023d4ce78ed4029a49794ccd5b849aaab912faea0d2ba61", - "dweb:/ipfs/QmP6hwNZW7sYbQK9fBzuZWxfLm6Swx2nKzvZ54qWNqQkzX" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Test.sol": { - "keccak256": "0x39b1729d5868c8e94ab8af16751eb500a17fe3870dc627d2b7ddcd5df18d7ad0", - "urls": [ - "bzz-raw://1568c82aff125cc4b0fc168be9d67ac313f469a3c7405c5493caecaaaecfb765", - "dweb:/ipfs/QmXByuZReJsdu1jDcxj1FcmpcUnzoBcqybn9kWgDAECWri" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Vm.sol": { - "keccak256": "0x87ba9f3edc254e529db9e3129c954391adcc7fc8574203767979d8d2f1e724b9", - "urls": [ - "bzz-raw://4d16c08d80d9f2869deb6350642cf5af624d21fce6b3b023abbcdedc62e195fe", - "dweb:/ipfs/QmURpnnFECPKt3i7P7jQRZpr4ZBXjRGcZ9KzcbKzsgYR2W" - ], - "license": "MIT OR Apache-2.0" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/console.sol": { - "keccak256": "0x91d5413c2434ca58fd278b6e1e79fd98d10c83931cc2596a6038eee4daeb34ba", - "urls": [ - "bzz-raw://91ccea707361e48b9b7a161fe81f496b9932bc471e9c4e4e1e9c283f2453cc70", - "dweb:/ipfs/QmcB66sZhQ6Kz7MUHcLE78YXRUZxoZnnxZjN6yATsbB2ec" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/console2.sol": { - "keccak256": "0x954646445d1014c3cd85c7918f5e7adeeca5ee44b68c00bafa237e597a4e35ea", - "urls": [ - "bzz-raw://516fa3be52da4763147175bfba4be0aa011fadbb0c1afb01f97265bd4cee7973", - "dweb:/ipfs/QmdixAyMJefx7qePChgdxcBH5MxhmN7vsqPuPLx3CgrVmF" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/interfaces/IMulticall3.sol": { - "keccak256": "0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a", - "urls": [ - "bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0", - "dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/mocks/MockERC20.sol": { - "keccak256": "0xd8703f49411737ecf8d411f8fa66b2bf0ef972ba28b7a4adf1748c63df1bf682", - "urls": [ - "bzz-raw://b7c10a6b8112f6fe3cdccb6240ecd382765216b1a82e9a86a0fec8f5e09eadd1", - "dweb:/ipfs/QmdRvPCU4RkjMHsTu3Ric1ZEF1AWDNLp78unFC5aWP17xq" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/mocks/MockERC721.sol": { - "keccak256": "0xa24468244abb66e663fb7eee6463cb518eb9a7c14e1071548ff564cca825bbca", - "urls": [ - "bzz-raw://145585a2194aa6e2d30edfe709ef2814e20b1b4540469aa6a8f50c841fcb9070", - "dweb:/ipfs/QmZrwbvtpbtTxqbW5phUrwb3F1tBiPSQc6jZJAXBfsBsAh" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/safeconsole.sol": { - "keccak256": "0xbaf41fdc6c54297e7cd8250e48b0f20eaac918e342a1028cef3f9a52ac086381", - "urls": [ - "bzz-raw://a500ad81dea226f9910e6b50f99a9ff930105e393a692cbfb2185e4cdb4424ae", - "dweb:/ipfs/QmVbUQpXNMmMWRiy4FvBNczzq46BMGfUoBikvSHNiCxVTq" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/access/AccessControl.sol": { - "keccak256": "0xa0e92d42942f4f57c5be50568dac11e9d00c93efcb458026e18d2d9b9b2e7308", - "urls": [ - "bzz-raw://46326c0bb1e296b67185e81c918e0b40501b8b6386165855df0a3f3c634b6a80", - "dweb:/ipfs/QmTwyrDYtsxsk6pymJTK94PnEpzsmkpUxFuzEiakDopy4Z" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/access/IAccessControl.sol": { - "keccak256": "0xc1c2a7f1563b77050dc6d507db9f4ada5d042c1f6a9ddbffdc49c77cdc0a1606", - "urls": [ - "bzz-raw://fd54abb96a6156d9a761f6fdad1d3004bc48d2d4fce47f40a3f91a7ae83fc3a1", - "dweb:/ipfs/QmUrFSGkTDJ7WaZ6qPVVe3Gn5uN2viPb7x7QQ35UX4DofX" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/access/Ownable.sol": { - "keccak256": "0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb", - "urls": [ - "bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6", - "dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol": { - "keccak256": "0x9b6b3e7803bc5f2f8cd7ad57db8ac1def61a9930a5a3107df4882e028a9605d7", - "urls": [ - "bzz-raw://da62d6be1f5c6edf577f0cb45666a8aa9c2086a4bac87d95d65f02e2f4c36a4b", - "dweb:/ipfs/QmNkpvBpoCMvX8JwAFNSc5XxJ2q5BXJpL5L1txb4QkqVFF" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/interfaces/IERC165.sol": { - "keccak256": "0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724", - "urls": [ - "bzz-raw://11fea9f8bc98949ac6709f0c1699db7430d2948137aa94d5a9e95a91f61a710a", - "dweb:/ipfs/QmQdfRXxQjwP6yn3DVo1GHPpriKNcFghSPi94Z1oKEFUNS" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/interfaces/IERC20.sol": { - "keccak256": "0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c", - "urls": [ - "bzz-raw://a2608291cb038b388d80b79a06b6118a42f7894ff67b7da10ec0dbbf5b2973ba", - "dweb:/ipfs/QmWohqcBLbcxmA4eGPhZDXe5RYMMEEpFq22nfkaUMvTfw1" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol": { - "keccak256": "0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7", - "urls": [ - "bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db", - "dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol": { - "keccak256": "0xca2ae13e0610f6a99238dd00b97bd786bc92732dae6d6b9d61f573ec51018310", - "urls": [ - "bzz-raw://75f8c71ce0c91c40dd5f249ace0b7d8270f8f1767231bcf71490f7157d6ba862", - "dweb:/ipfs/QmYXgxeDyFHvz3JsXxLEYN6GNUR44ThHeFj5XkpkgMoG4w" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Address.sol": { - "keccak256": "0x9d8da059267bac779a2dbbb9a26c2acf00ca83085e105d62d5d4ef96054a47f5", - "urls": [ - "bzz-raw://c78e2aa4313323cecd1ef12a8d6265b96beee1a199923abf55d9a2a9e291ad23", - "dweb:/ipfs/QmUTs2KStXucZezzFo3EYeqYu47utu56qrF7jj1Gue65vb" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Context.sol": { - "keccak256": "0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2", - "urls": [ - "bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12", - "dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Errors.sol": { - "keccak256": "0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123", - "urls": [ - "bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf", - "dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Panic.sol": { - "keccak256": "0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a", - "urls": [ - "bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a", - "dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Pausable.sol": { - "keccak256": "0xb2e5f50762c27fb4b123e3619c3c02bdcba5e515309382e5bfb6f7d6486510bd", - "urls": [ - "bzz-raw://1a4b83328c98d518a2699c2cbe9e9b055e78aa57fa8639f1b88deb8b3750b5dc", - "dweb:/ipfs/QmXdcYj5v7zQxXFPULShHkR5p4Wa2zYuupbHnFdV3cHYtc" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/ReentrancyGuard.sol": { - "keccak256": "0x11a5a79827df29e915a12740caf62fe21ebe27c08c9ae3e09abe9ee3ba3866d3", - "urls": [ - "bzz-raw://3cf0c69ab827e3251db9ee6a50647d62c90ba580a4d7bbff21f2bea39e7b2f4a", - "dweb:/ipfs/QmZiKwtKU1SBX4RGfQtY7PZfiapbbu6SZ9vizGQD9UHjRA" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/cryptography/ECDSA.sol": { - "keccak256": "0x69f54c02b7d81d505910ec198c11ed4c6a728418a868b906b4a0cf29946fda84", - "urls": [ - "bzz-raw://8e25e4bdb7ae1f21d23bfee996e22736fc0ab44cfabedac82a757b1edc5623b9", - "dweb:/ipfs/QmQdWQvB6JCP9ZMbzi8EvQ1PTETqkcTWrbcVurS7DKpa5n" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/introspection/ERC165.sol": { - "keccak256": "0xddce8e17e3d3f9ed818b4f4c4478a8262aab8b11ed322f1bf5ed705bb4bd97fa", - "urls": [ - "bzz-raw://8084aa71a4cc7d2980972412a88fe4f114869faea3fefa5436431644eb5c0287", - "dweb:/ipfs/Qmbqfs5dRdPvHVKY8kTaeyc65NdqXRQwRK7h9s5UJEhD1p" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol": { - "keccak256": "0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8", - "urls": [ - "bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621", - "dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/math/SafeCast.sol": { - "keccak256": "0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54", - "urls": [ - "bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8", - "dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/structs/DoubleEndedQueue.sol": { - "keccak256": "0x1e1d74658d7f4eab3d4f8fb0c6c5953bc5f629d9425e978d557dabff7b58b217", - "urls": [ - "bzz-raw://be0175d00008d452d3d553890f73a3d5d51dff4372f720336c8b98f26822fcdb", - "dweb:/ipfs/QmUkE8g5xPExWoSAKwdi5ww1qJJVtEWtjSF93G2LMQkgD3" - ], - "license": "MIT" - }, - "node_modules/solidity-bytes-utils/contracts/BytesLib.sol": { - "keccak256": "0xa5b10f04797d5a10a9ba07855108b6bd695940e6a3d128927b2f74a0d359868a", - "urls": [ - "bzz-raw://a38d7680aacbb18dae659876b396b73bcc8f759672213f8a0efc4129e2648535", - "dweb:/ipfs/QmfKFnwpTEGAnbRnZxMuv3mRCG9S9WMjFhFL23bftBT2Jq" - ], - "license": "Unlicense" - } - }, - "version": 1 - }, - "id": 73 -} diff --git a/examples/oft-movement/out/DVNOptions.sol/DVNOptions.json b/examples/oft-movement/out/DVNOptions.sol/DVNOptions.json deleted file mode 100644 index d7cb72449..000000000 --- a/examples/oft-movement/out/DVNOptions.sol/DVNOptions.json +++ /dev/null @@ -1,96 +0,0 @@ -{ - "abi": [ - { "type": "error", "name": "DVN_InvalidDVNIdx", "inputs": [] }, - { - "type": "error", - "name": "DVN_InvalidDVNOptions", - "inputs": [ - { "name": "cursor", "type": "uint256", "internalType": "uint256" } - ] - } - ], - "bytecode": { - "object": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122082dd4643382c68c6cc85f22ae540eb6379270e5bcdc492d5bb7a673a61813d2a64736f6c63430008160033", - "sourceMap": "345:6975:21:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;345:6975:21;;;;;;;;;;;;;;;;;", - "linkReferences": {} - }, - "deployedBytecode": { - "object": "0x73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122082dd4643382c68c6cc85f22ae540eb6379270e5bcdc492d5bb7a673a61813d2a64736f6c63430008160033", - "sourceMap": "345:6975:21:-:0;;;;;;;;", - "linkReferences": {} - }, - "methodIdentifiers": {}, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"DVN_InvalidDVNIdx\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"cursor\",\"type\":\"uint256\"}],\"name\":\"DVN_InvalidDVNOptions\",\"type\":\"error\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/DVNOptions.sol\":\"DVNOptions\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/DVNOptions.sol\":{\"keccak256\":\"0x2beee03cdf59a9bc72e94d08b69cb2e908725f4ceabb48651494938100e21e35\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://d88e121a39e74309f3575417df2318e2d2ee8bc8314e68dbf78544a9c393b141\",\"dweb:/ipfs/QmRojBRAyENK21HnjevAWeoZZxtWkYZubB9Y78vCJPYeU6\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/CalldataBytesLib.sol\":{\"keccak256\":\"0x5c0db161cef6603c3b256d4220f489419e7478ef775e52a80056654129c61875\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://a33245d0fdd3992bb56b31d1840108d36bb46c8d617b659ef1af8dd7ed86302d\",\"dweb:/ipfs/QmWyBqT7Tdrfn5zz9xYM3V1PBtfAZAVwwCrrKwwfi3wMQK\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/BitMaps.sol\":{\"keccak256\":\"0xaad3c72ef43480d2253fd48b394e8fb7286d009991d2bc4e61be58ce48ac5ee9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b8c02b14f954416ba2148b389c87da8378ac8dd16ba3d458cbbfba8b0fd8639f\",\"dweb:/ipfs/Qmd2EEQhYL2VmgJi1V4uiHM2WcYxF9iBtxSgcFkbS21rQD\"]},\"node_modules/solidity-bytes-utils/contracts/BytesLib.sol\":{\"keccak256\":\"0xa5b10f04797d5a10a9ba07855108b6bd695940e6a3d128927b2f74a0d359868a\",\"license\":\"Unlicense\",\"urls\":[\"bzz-raw://a38d7680aacbb18dae659876b396b73bcc8f759672213f8a0efc4129e2648535\",\"dweb:/ipfs/QmfKFnwpTEGAnbRnZxMuv3mRCG9S9WMjFhFL23bftBT2Jq\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { "inputs": [], "type": "error", "name": "DVN_InvalidDVNIdx" }, - { - "inputs": [ - { "internalType": "uint256", "name": "cursor", "type": "uint256" } - ], - "type": "error", - "name": "DVN_InvalidDVNOptions" - } - ], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/DVNOptions.sol": "DVNOptions" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/DVNOptions.sol": { - "keccak256": "0x2beee03cdf59a9bc72e94d08b69cb2e908725f4ceabb48651494938100e21e35", - "urls": [ - "bzz-raw://d88e121a39e74309f3575417df2318e2d2ee8bc8314e68dbf78544a9c393b141", - "dweb:/ipfs/QmRojBRAyENK21HnjevAWeoZZxtWkYZubB9Y78vCJPYeU6" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/CalldataBytesLib.sol": { - "keccak256": "0x5c0db161cef6603c3b256d4220f489419e7478ef775e52a80056654129c61875", - "urls": [ - "bzz-raw://a33245d0fdd3992bb56b31d1840108d36bb46c8d617b659ef1af8dd7ed86302d", - "dweb:/ipfs/QmWyBqT7Tdrfn5zz9xYM3V1PBtfAZAVwwCrrKwwfi3wMQK" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/BitMaps.sol": { - "keccak256": "0xaad3c72ef43480d2253fd48b394e8fb7286d009991d2bc4e61be58ce48ac5ee9", - "urls": [ - "bzz-raw://b8c02b14f954416ba2148b389c87da8378ac8dd16ba3d458cbbfba8b0fd8639f", - "dweb:/ipfs/Qmd2EEQhYL2VmgJi1V4uiHM2WcYxF9iBtxSgcFkbS21rQD" - ], - "license": "MIT" - }, - "node_modules/solidity-bytes-utils/contracts/BytesLib.sol": { - "keccak256": "0xa5b10f04797d5a10a9ba07855108b6bd695940e6a3d128927b2f74a0d359868a", - "urls": [ - "bzz-raw://a38d7680aacbb18dae659876b396b73bcc8f759672213f8a0efc4129e2648535", - "dweb:/ipfs/QmfKFnwpTEGAnbRnZxMuv3mRCG9S9WMjFhFL23bftBT2Jq" - ], - "license": "Unlicense" - } - }, - "version": 1 - }, - "id": 21 -} diff --git a/examples/oft-movement/out/DoubleEndedQueue.sol/DoubleEndedQueue.json b/examples/oft-movement/out/DoubleEndedQueue.sol/DoubleEndedQueue.json deleted file mode 100644 index 5230bd1fd..000000000 --- a/examples/oft-movement/out/DoubleEndedQueue.sol/DoubleEndedQueue.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "abi": [], - "bytecode": { - "object": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212205417b801eda9b87a2352ada366d64d59f3aab2990c4ca2817e2d836d3edaaaf964736f6c63430008160033", - "sourceMap": "819:4869:126:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;819:4869:126;;;;;;;;;;;;;;;;;", - "linkReferences": {} - }, - "deployedBytecode": { - "object": "0x73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212205417b801eda9b87a2352ada366d64d59f3aab2990c4ca2817e2d836d3edaaaf964736f6c63430008160033", - "sourceMap": "819:4869:126:-:0;;;;;;;;", - "linkReferences": {} - }, - "methodIdentifiers": {}, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"A sequence of items with the ability to efficiently push and pop items (i.e. insert and remove) on both ends of the sequence (called front and back). Among other access patterns, it can be used to implement efficient LIFO and FIFO queues. Storage use is optimized, and all operations are O(1) constant time. This includes {clear}, given that the existing queue contents are left in storage. The struct is called `Bytes32Deque`. Other types can be cast to and from `bytes32`. This data structure can only be used in storage, and not in memory. ```solidity DoubleEndedQueue.Bytes32Deque queue; ```\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@openzeppelin/contracts/utils/structs/DoubleEndedQueue.sol\":\"DoubleEndedQueue\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@openzeppelin/contracts/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]},\"node_modules/@openzeppelin/contracts/utils/structs/DoubleEndedQueue.sol\":{\"keccak256\":\"0x1e1d74658d7f4eab3d4f8fb0c6c5953bc5f629d9425e978d557dabff7b58b217\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://be0175d00008d452d3d553890f73a3d5d51dff4372f720336c8b98f26822fcdb\",\"dweb:/ipfs/QmUkE8g5xPExWoSAKwdi5ww1qJJVtEWtjSF93G2LMQkgD3\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@openzeppelin/contracts/utils/structs/DoubleEndedQueue.sol": "DoubleEndedQueue" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@openzeppelin/contracts/utils/Panic.sol": { - "keccak256": "0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a", - "urls": [ - "bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a", - "dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/structs/DoubleEndedQueue.sol": { - "keccak256": "0x1e1d74658d7f4eab3d4f8fb0c6c5953bc5f629d9425e978d557dabff7b58b217", - "urls": [ - "bzz-raw://be0175d00008d452d3d553890f73a3d5d51dff4372f720336c8b98f26822fcdb", - "dweb:/ipfs/QmUkE8g5xPExWoSAKwdi5ww1qJJVtEWtjSF93G2LMQkgD3" - ], - "license": "MIT" - } - }, - "version": 1 - }, - "id": 126 -} diff --git a/examples/oft-movement/out/ECDSA.sol/ECDSA.json b/examples/oft-movement/out/ECDSA.sol/ECDSA.json deleted file mode 100644 index 36ece27d9..000000000 --- a/examples/oft-movement/out/ECDSA.sol/ECDSA.json +++ /dev/null @@ -1,84 +0,0 @@ -{ - "abi": [ - { "type": "error", "name": "ECDSAInvalidSignature", "inputs": [] }, - { - "type": "error", - "name": "ECDSAInvalidSignatureLength", - "inputs": [ - { "name": "length", "type": "uint256", "internalType": "uint256" } - ] - }, - { - "type": "error", - "name": "ECDSAInvalidSignatureS", - "inputs": [{ "name": "s", "type": "bytes32", "internalType": "bytes32" }] - } - ], - "bytecode": { - "object": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220b3125415649d503a1631f73869b7c683589479e9c8aa6da3a94a3408164e47eb64736f6c63430008160033", - "sourceMap": "344:7470:122:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;344:7470:122;;;;;;;;;;;;;;;;;", - "linkReferences": {} - }, - "deployedBytecode": { - "object": "0x73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220b3125415649d503a1631f73869b7c683589479e9c8aa6da3a94a3408164e47eb64736f6c63430008160033", - "sourceMap": "344:7470:122:-:0;;;;;;;;", - "linkReferences": {} - }, - "methodIdentifiers": {}, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"ECDSAInvalidSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"ECDSAInvalidSignatureLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"ECDSAInvalidSignatureS\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Elliptic Curve Digital Signature Algorithm (ECDSA) operations. These functions can be used to verify that a message was signed by the holder of the private keys of a given address.\",\"errors\":{\"ECDSAInvalidSignature()\":[{\"details\":\"The signature derives the `address(0)`.\"}],\"ECDSAInvalidSignatureLength(uint256)\":[{\"details\":\"The signature has an invalid length.\"}],\"ECDSAInvalidSignatureS(bytes32)\":[{\"details\":\"The signature has an S value that is in the upper half order.\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@openzeppelin/contracts/utils/cryptography/ECDSA.sol\":\"ECDSA\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@openzeppelin/contracts/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0x69f54c02b7d81d505910ec198c11ed4c6a728418a868b906b4a0cf29946fda84\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8e25e4bdb7ae1f21d23bfee996e22736fc0ab44cfabedac82a757b1edc5623b9\",\"dweb:/ipfs/QmQdWQvB6JCP9ZMbzi8EvQ1PTETqkcTWrbcVurS7DKpa5n\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { "inputs": [], "type": "error", "name": "ECDSAInvalidSignature" }, - { - "inputs": [ - { "internalType": "uint256", "name": "length", "type": "uint256" } - ], - "type": "error", - "name": "ECDSAInvalidSignatureLength" - }, - { - "inputs": [ - { "internalType": "bytes32", "name": "s", "type": "bytes32" } - ], - "type": "error", - "name": "ECDSAInvalidSignatureS" - } - ], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@openzeppelin/contracts/utils/cryptography/ECDSA.sol": "ECDSA" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@openzeppelin/contracts/utils/cryptography/ECDSA.sol": { - "keccak256": "0x69f54c02b7d81d505910ec198c11ed4c6a728418a868b906b4a0cf29946fda84", - "urls": [ - "bzz-raw://8e25e4bdb7ae1f21d23bfee996e22736fc0ab44cfabedac82a757b1edc5623b9", - "dweb:/ipfs/QmQdWQvB6JCP9ZMbzi8EvQ1PTETqkcTWrbcVurS7DKpa5n" - ], - "license": "MIT" - } - }, - "version": 1 - }, - "id": 122 -} diff --git a/examples/oft-movement/out/ERC165.sol/ERC165.json b/examples/oft-movement/out/ERC165.sol/ERC165.json deleted file mode 100644 index a1ee2e378..000000000 --- a/examples/oft-movement/out/ERC165.sol/ERC165.json +++ /dev/null @@ -1,86 +0,0 @@ -{ - "abi": [ - { - "type": "function", - "name": "supportsInterface", - "inputs": [ - { "name": "interfaceId", "type": "bytes4", "internalType": "bytes4" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - } - ], - "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "methodIdentifiers": { "supportsInterface(bytes4)": "01ffc9a7" }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Implementation of the {IERC165} interface. Contracts that want to implement ERC-165 should inherit from this contract and override {supportsInterface} to check for the additional interface id that will be supported. For example: ```solidity function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); } ```\",\"kind\":\"dev\",\"methods\":{\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@openzeppelin/contracts/utils/introspection/ERC165.sol\":\"ERC165\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0xddce8e17e3d3f9ed818b4f4c4478a8262aab8b11ed322f1bf5ed705bb4bd97fa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8084aa71a4cc7d2980972412a88fe4f114869faea3fefa5436431644eb5c0287\",\"dweb:/ipfs/Qmbqfs5dRdPvHVKY8kTaeyc65NdqXRQwRK7h9s5UJEhD1p\"]},\"node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "stateMutability": "view", - "type": "function", - "name": "supportsInterface", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - } - ], - "devdoc": { - "kind": "dev", - "methods": { - "supportsInterface(bytes4)": { - "details": "See {IERC165-supportsInterface}." - } - }, - "version": 1 - }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@openzeppelin/contracts/utils/introspection/ERC165.sol": "ERC165" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@openzeppelin/contracts/utils/introspection/ERC165.sol": { - "keccak256": "0xddce8e17e3d3f9ed818b4f4c4478a8262aab8b11ed322f1bf5ed705bb4bd97fa", - "urls": [ - "bzz-raw://8084aa71a4cc7d2980972412a88fe4f114869faea3fefa5436431644eb5c0287", - "dweb:/ipfs/Qmbqfs5dRdPvHVKY8kTaeyc65NdqXRQwRK7h9s5UJEhD1p" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol": { - "keccak256": "0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8", - "urls": [ - "bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621", - "dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL" - ], - "license": "MIT" - } - }, - "version": 1 - }, - "id": 123 -} diff --git a/examples/oft-movement/out/ERC20.sol/ERC20.json b/examples/oft-movement/out/ERC20.sol/ERC20.json deleted file mode 100644 index 441451216..000000000 --- a/examples/oft-movement/out/ERC20.sol/ERC20.json +++ /dev/null @@ -1,481 +0,0 @@ -{ - "abi": [ - { - "type": "function", - "name": "allowance", - "inputs": [ - { "name": "owner", "type": "address", "internalType": "address" }, - { "name": "spender", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "approve", - "inputs": [ - { "name": "spender", "type": "address", "internalType": "address" }, - { "name": "value", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "balanceOf", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "decimals", - "inputs": [], - "outputs": [{ "name": "", "type": "uint8", "internalType": "uint8" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "name", - "inputs": [], - "outputs": [{ "name": "", "type": "string", "internalType": "string" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "symbol", - "inputs": [], - "outputs": [{ "name": "", "type": "string", "internalType": "string" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "totalSupply", - "inputs": [], - "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "transfer", - "inputs": [ - { "name": "to", "type": "address", "internalType": "address" }, - { "name": "value", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "transferFrom", - "inputs": [ - { "name": "from", "type": "address", "internalType": "address" }, - { "name": "to", "type": "address", "internalType": "address" }, - { "name": "value", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "nonpayable" - }, - { - "type": "event", - "name": "Approval", - "inputs": [ - { - "name": "owner", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "spender", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "value", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "Transfer", - "inputs": [ - { - "name": "from", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "to", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "value", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "error", - "name": "ERC20InsufficientAllowance", - "inputs": [ - { "name": "spender", "type": "address", "internalType": "address" }, - { "name": "allowance", "type": "uint256", "internalType": "uint256" }, - { "name": "needed", "type": "uint256", "internalType": "uint256" } - ] - }, - { - "type": "error", - "name": "ERC20InsufficientBalance", - "inputs": [ - { "name": "sender", "type": "address", "internalType": "address" }, - { "name": "balance", "type": "uint256", "internalType": "uint256" }, - { "name": "needed", "type": "uint256", "internalType": "uint256" } - ] - }, - { - "type": "error", - "name": "ERC20InvalidApprover", - "inputs": [ - { "name": "approver", "type": "address", "internalType": "address" } - ] - }, - { - "type": "error", - "name": "ERC20InvalidReceiver", - "inputs": [ - { "name": "receiver", "type": "address", "internalType": "address" } - ] - }, - { - "type": "error", - "name": "ERC20InvalidSender", - "inputs": [ - { "name": "sender", "type": "address", "internalType": "address" } - ] - }, - { - "type": "error", - "name": "ERC20InvalidSpender", - "inputs": [ - { "name": "spender", "type": "address", "internalType": "address" } - ] - } - ], - "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "methodIdentifiers": { - "allowance(address,address)": "dd62ed3e", - "approve(address,uint256)": "095ea7b3", - "balanceOf(address)": "70a08231", - "decimals()": "313ce567", - "name()": "06fdde03", - "symbol()": "95d89b41", - "totalSupply()": "18160ddd", - "transfer(address,uint256)": "a9059cbb", - "transferFrom(address,address,uint256)": "23b872dd" - }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"allowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSpender\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Implementation of the {IERC20} interface. This implementation is agnostic to the way tokens are created. This means that a supply mechanism has to be added in a derived contract using {_mint}. TIP: For a detailed writeup see our guide https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How to implement supply mechanisms]. The default value of {decimals} is 18. To change this, you should override this function so it returns a different value. We have followed general OpenZeppelin Contracts guidelines: functions revert instead returning `false` on failure. This behavior is nonetheless conventional and does not conflict with the expectations of ERC-20 applications.\",\"errors\":{\"ERC20InsufficientAllowance(address,uint256,uint256)\":[{\"details\":\"Indicates a failure with the `spender`\\u2019s `allowance`. Used in transfers.\",\"params\":{\"allowance\":\"Amount of tokens a `spender` is allowed to operate with.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC20InsufficientBalance(address,uint256,uint256)\":[{\"details\":\"Indicates an error related to the current `balance` of a `sender`. Used in transfers.\",\"params\":{\"balance\":\"Current balance for the interacting account.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC20InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC20InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidSpender(address)\":[{\"details\":\"Indicates a failure with the `spender` to be approved. Used in approvals.\",\"params\":{\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}]},\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"See {IERC20-allowance}.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. NOTE: If `value` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"See {IERC20-balanceOf}.\"},\"constructor\":{\"details\":\"Sets the values for {name} and {symbol}. All two of these values are immutable: they can only be set once during construction.\"},\"decimals()\":{\"details\":\"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the default value returned by this function, unless it's overridden. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"totalSupply()\":{\"details\":\"See {IERC20-totalSupply}.\"},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `value`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC20-transferFrom}. Skips emitting an {Approval} event indicating an allowance update. This is not required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve]. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `value`. - the caller must have allowance for ``from``'s tokens of at least `value`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@openzeppelin/contracts/token/ERC20/ERC20.sol\":\"ERC20\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x880da465c203cec76b10d72dbd87c80f387df4102274f23eea1f9c9b0918792b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://399594cd8bb0143bc9e55e0f1d071d0d8c850a394fb7a319d50edd55d9ed822b\",\"dweb:/ipfs/QmbPZzgtT6LEm9CMqWfagQFwETbV1ztpECBB1DtQHrKiRz\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0xbf61ab2ae1d575a17ea58fbb99ca232baddcc4e0eeea180e84cbc74b0c348b31\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4e0968705bad99747a8e5288aa008678c2be2f471f919dce3925a3cc4f1dee09\",\"dweb:/ipfs/QmbAFnCQfo4tw6ssfQSjhA5LzwHWNNryXN8bX7ty8jiqqn\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db\",\"dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x70f2f713b13b7ce4610bcd0ac9fec0f3cc43693b043abcb8dc40a42a726eb330\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c13d13304ac79a83ab1c30168967d19e2203342ebbd6a9bbce4db7550522dcbf\",\"dweb:/ipfs/QmeN5jKMN2vw5bhacr6tkg78afbTTZUeaacNHqjWt4Ew1r\"]},\"node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { - "inputs": [ - { "internalType": "address", "name": "spender", "type": "address" }, - { - "internalType": "uint256", - "name": "allowance", - "type": "uint256" - }, - { "internalType": "uint256", "name": "needed", "type": "uint256" } - ], - "type": "error", - "name": "ERC20InsufficientAllowance" - }, - { - "inputs": [ - { "internalType": "address", "name": "sender", "type": "address" }, - { "internalType": "uint256", "name": "balance", "type": "uint256" }, - { "internalType": "uint256", "name": "needed", "type": "uint256" } - ], - "type": "error", - "name": "ERC20InsufficientBalance" - }, - { - "inputs": [ - { "internalType": "address", "name": "approver", "type": "address" } - ], - "type": "error", - "name": "ERC20InvalidApprover" - }, - { - "inputs": [ - { "internalType": "address", "name": "receiver", "type": "address" } - ], - "type": "error", - "name": "ERC20InvalidReceiver" - }, - { - "inputs": [ - { "internalType": "address", "name": "sender", "type": "address" } - ], - "type": "error", - "name": "ERC20InvalidSender" - }, - { - "inputs": [ - { "internalType": "address", "name": "spender", "type": "address" } - ], - "type": "error", - "name": "ERC20InvalidSpender" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address", - "indexed": true - }, - { - "internalType": "address", - "name": "spender", - "type": "address", - "indexed": true - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "Approval", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address", - "indexed": true - }, - { - "internalType": "address", - "name": "to", - "type": "address", - "indexed": true - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "Transfer", - "anonymous": false - }, - { - "inputs": [ - { "internalType": "address", "name": "owner", "type": "address" }, - { "internalType": "address", "name": "spender", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "allowance", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "spender", "type": "address" }, - { "internalType": "uint256", "name": "value", "type": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "approve", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "balanceOf", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "decimals", - "outputs": [{ "internalType": "uint8", "name": "", "type": "uint8" }] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "name", - "outputs": [ - { "internalType": "string", "name": "", "type": "string" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "symbol", - "outputs": [ - { "internalType": "string", "name": "", "type": "string" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "totalSupply", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "to", "type": "address" }, - { "internalType": "uint256", "name": "value", "type": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "transfer", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "address", "name": "from", "type": "address" }, - { "internalType": "address", "name": "to", "type": "address" }, - { "internalType": "uint256", "name": "value", "type": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "transferFrom", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - } - ], - "devdoc": { - "kind": "dev", - "methods": { - "allowance(address,address)": { - "details": "See {IERC20-allowance}." - }, - "approve(address,uint256)": { - "details": "See {IERC20-approve}. NOTE: If `value` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address." - }, - "balanceOf(address)": { "details": "See {IERC20-balanceOf}." }, - "constructor": { - "details": "Sets the values for {name} and {symbol}. All two of these values are immutable: they can only be set once during construction." - }, - "decimals()": { - "details": "Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the default value returned by this function, unless it's overridden. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}." - }, - "name()": { "details": "Returns the name of the token." }, - "symbol()": { - "details": "Returns the symbol of the token, usually a shorter version of the name." - }, - "totalSupply()": { "details": "See {IERC20-totalSupply}." }, - "transfer(address,uint256)": { - "details": "See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `value`." - }, - "transferFrom(address,address,uint256)": { - "details": "See {IERC20-transferFrom}. Skips emitting an {Approval} event indicating an allowance update. This is not required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve]. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `value`. - the caller must have allowance for ``from``'s tokens of at least `value`." - } - }, - "version": 1 - }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@openzeppelin/contracts/token/ERC20/ERC20.sol": "ERC20" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@openzeppelin/contracts/interfaces/draft-IERC6093.sol": { - "keccak256": "0x880da465c203cec76b10d72dbd87c80f387df4102274f23eea1f9c9b0918792b", - "urls": [ - "bzz-raw://399594cd8bb0143bc9e55e0f1d071d0d8c850a394fb7a319d50edd55d9ed822b", - "dweb:/ipfs/QmbPZzgtT6LEm9CMqWfagQFwETbV1ztpECBB1DtQHrKiRz" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/token/ERC20/ERC20.sol": { - "keccak256": "0xbf61ab2ae1d575a17ea58fbb99ca232baddcc4e0eeea180e84cbc74b0c348b31", - "urls": [ - "bzz-raw://4e0968705bad99747a8e5288aa008678c2be2f471f919dce3925a3cc4f1dee09", - "dweb:/ipfs/QmbAFnCQfo4tw6ssfQSjhA5LzwHWNNryXN8bX7ty8jiqqn" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol": { - "keccak256": "0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7", - "urls": [ - "bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db", - "dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol": { - "keccak256": "0x70f2f713b13b7ce4610bcd0ac9fec0f3cc43693b043abcb8dc40a42a726eb330", - "urls": [ - "bzz-raw://c13d13304ac79a83ab1c30168967d19e2203342ebbd6a9bbce4db7550522dcbf", - "dweb:/ipfs/QmeN5jKMN2vw5bhacr6tkg78afbTTZUeaacNHqjWt4Ew1r" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Context.sol": { - "keccak256": "0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2", - "urls": [ - "bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12", - "dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF" - ], - "license": "MIT" - } - }, - "version": 1 - }, - "id": 35 -} diff --git a/examples/oft-movement/out/ERC20Mock.sol/ERC20Mock.json b/examples/oft-movement/out/ERC20Mock.sol/ERC20Mock.json deleted file mode 100644 index 6204976e1..000000000 --- a/examples/oft-movement/out/ERC20Mock.sol/ERC20Mock.json +++ /dev/null @@ -1,528 +0,0 @@ -{ - "abi": [ - { - "type": "constructor", - "inputs": [ - { "name": "_name", "type": "string", "internalType": "string" }, - { "name": "_symbol", "type": "string", "internalType": "string" } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "allowance", - "inputs": [ - { "name": "owner", "type": "address", "internalType": "address" }, - { "name": "spender", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "approve", - "inputs": [ - { "name": "spender", "type": "address", "internalType": "address" }, - { "name": "value", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "balanceOf", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "decimals", - "inputs": [], - "outputs": [{ "name": "", "type": "uint8", "internalType": "uint8" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "mint", - "inputs": [ - { "name": "_to", "type": "address", "internalType": "address" }, - { "name": "_amount", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "name", - "inputs": [], - "outputs": [{ "name": "", "type": "string", "internalType": "string" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "symbol", - "inputs": [], - "outputs": [{ "name": "", "type": "string", "internalType": "string" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "totalSupply", - "inputs": [], - "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "transfer", - "inputs": [ - { "name": "to", "type": "address", "internalType": "address" }, - { "name": "value", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "transferFrom", - "inputs": [ - { "name": "from", "type": "address", "internalType": "address" }, - { "name": "to", "type": "address", "internalType": "address" }, - { "name": "value", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "nonpayable" - }, - { - "type": "event", - "name": "Approval", - "inputs": [ - { - "name": "owner", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "spender", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "value", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "Transfer", - "inputs": [ - { - "name": "from", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "to", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "value", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "error", - "name": "ERC20InsufficientAllowance", - "inputs": [ - { "name": "spender", "type": "address", "internalType": "address" }, - { "name": "allowance", "type": "uint256", "internalType": "uint256" }, - { "name": "needed", "type": "uint256", "internalType": "uint256" } - ] - }, - { - "type": "error", - "name": "ERC20InsufficientBalance", - "inputs": [ - { "name": "sender", "type": "address", "internalType": "address" }, - { "name": "balance", "type": "uint256", "internalType": "uint256" }, - { "name": "needed", "type": "uint256", "internalType": "uint256" } - ] - }, - { - "type": "error", - "name": "ERC20InvalidApprover", - "inputs": [ - { "name": "approver", "type": "address", "internalType": "address" } - ] - }, - { - "type": "error", - "name": "ERC20InvalidReceiver", - "inputs": [ - { "name": "receiver", "type": "address", "internalType": "address" } - ] - }, - { - "type": "error", - "name": "ERC20InvalidSender", - "inputs": [ - { "name": "sender", "type": "address", "internalType": "address" } - ] - }, - { - "type": "error", - "name": "ERC20InvalidSpender", - "inputs": [ - { "name": "spender", "type": "address", "internalType": "address" } - ] - } - ], - "bytecode": { - "object": "0x60806040523480156200001157600080fd5b5060405162000a8238038062000a82833981016040819052620000349162000126565b8181600362000044838262000221565b50600462000053828262000221565b5050505050620002ed565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200008657600080fd5b81516001600160401b0380821115620000a357620000a36200005e565b604051601f8301601f19908116603f01168101908282118183101715620000ce57620000ce6200005e565b8160405283815260209250866020858801011115620000ec57600080fd5b600091505b83821015620001105785820183015181830184015290820190620000f1565b6000602085830101528094505050505092915050565b600080604083850312156200013a57600080fd5b82516001600160401b03808211156200015257600080fd5b620001608683870162000074565b935060208501519150808211156200017757600080fd5b50620001868582860162000074565b9150509250929050565b600181811c90821680620001a557607f821691505b602082108103620001c657634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200021c576000816000526020600020601f850160051c81016020861015620001f75750805b601f850160051c820191505b81811015620002185782815560010162000203565b5050505b505050565b81516001600160401b038111156200023d576200023d6200005e565b62000255816200024e845462000190565b84620001cc565b602080601f8311600181146200028d5760008415620002745750858301515b600019600386901b1c1916600185901b17855562000218565b600085815260208120601f198616915b82811015620002be578886015182559484019460019091019084016200029d565b5085821015620002dd5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b61078580620002fd6000396000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c806340c10f191161006657806340c10f191461011857806370a082311461012d57806395d89b4114610156578063a9059cbb1461015e578063dd62ed3e1461017157600080fd5b806306fdde03146100a3578063095ea7b3146100c157806318160ddd146100e457806323b872dd146100f6578063313ce56714610109575b600080fd5b6100ab6101aa565b6040516100b891906105ce565b60405180910390f35b6100d46100cf366004610639565b61023c565b60405190151581526020016100b8565b6002545b6040519081526020016100b8565b6100d4610104366004610663565b610256565b604051601281526020016100b8565b61012b610126366004610639565b61027a565b005b6100e861013b36600461069f565b6001600160a01b031660009081526020819052604090205490565b6100ab610288565b6100d461016c366004610639565b610297565b6100e861017f3660046106c1565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101b9906106f4565b80601f01602080910402602001604051908101604052809291908181526020018280546101e5906106f4565b80156102325780601f1061020757610100808354040283529160200191610232565b820191906000526020600020905b81548152906001019060200180831161021557829003601f168201915b5050505050905090565b60003361024a8185856102a5565b60019150505b92915050565b6000336102648582856102b7565b61026f85858561033a565b506001949350505050565b6102848282610399565b5050565b6060600480546101b9906106f4565b60003361024a81858561033a565b6102b283838360016103cf565b505050565b6001600160a01b038381166000908152600160209081526040808320938616835292905220546000198114610334578181101561032557604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064015b60405180910390fd5b610334848484840360006103cf565b50505050565b6001600160a01b03831661036457604051634b637e8f60e11b81526000600482015260240161031c565b6001600160a01b03821661038e5760405163ec442f0560e01b81526000600482015260240161031c565b6102b28383836104a4565b6001600160a01b0382166103c35760405163ec442f0560e01b81526000600482015260240161031c565b610284600083836104a4565b6001600160a01b0384166103f95760405163e602df0560e01b81526000600482015260240161031c565b6001600160a01b03831661042357604051634a1406b160e11b81526000600482015260240161031c565b6001600160a01b038085166000908152600160209081526040808320938716835292905220829055801561033457826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161049691815260200190565b60405180910390a350505050565b6001600160a01b0383166104cf5780600260008282546104c4919061072e565b909155506105419050565b6001600160a01b038316600090815260208190526040902054818110156105225760405163391434e360e21b81526001600160a01b0385166004820152602481018290526044810183905260640161031c565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b03821661055d5760028054829003905561057c565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516105c191815260200190565b60405180910390a3505050565b60006020808352835180602085015260005b818110156105fc578581018301518582016040015282016105e0565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b038116811461063457600080fd5b919050565b6000806040838503121561064c57600080fd5b6106558361061d565b946020939093013593505050565b60008060006060848603121561067857600080fd5b6106818461061d565b925061068f6020850161061d565b9150604084013590509250925092565b6000602082840312156106b157600080fd5b6106ba8261061d565b9392505050565b600080604083850312156106d457600080fd5b6106dd8361061d565b91506106eb6020840161061d565b90509250929050565b600181811c9082168061070857607f821691505b60208210810361072857634e487b7160e01b600052602260045260246000fd5b50919050565b8082018082111561025057634e487b7160e01b600052601160045260246000fdfea2646970667358221220e63869d881ddb2366a97bfa92c8feca6085d6cdb56d2fce17b8335de6d44d83f64736f6c63430008160033", - "sourceMap": "137:209:129:-:0;;;171:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;233:5;240:7;1667:5:112;:13;233:5:129;1667::112;:13;:::i;:::-;-1:-1:-1;1690:7:112;:17;1700:7;1690;:17;:::i;:::-;;1601:113;;171:80:129;;137:209;;14:127:132;75:10;70:3;66:20;63:1;56:31;106:4;103:1;96:15;130:4;127:1;120:15;146:844;200:5;253:3;246:4;238:6;234:17;230:27;220:55;;271:1;268;261:12;220:55;294:13;;-1:-1:-1;;;;;356:10:132;;;353:36;;;369:18;;:::i;:::-;444:2;438:9;412:2;498:13;;-1:-1:-1;;494:22:132;;;518:2;490:31;486:40;474:53;;;542:18;;;562:22;;;539:46;536:72;;;588:18;;:::i;:::-;628:10;624:2;617:22;663:2;655:6;648:18;685:4;675:14;;732:3;725:4;720:2;712:6;708:15;704:26;701:35;698:55;;;749:1;746;739:12;698:55;771:1;762:10;;781:133;795:2;792:1;789:9;781:133;;;883:14;;;879:23;;873:30;852:14;;;848:23;;841:63;806:10;;;;781:133;;;958:1;951:4;946:2;938:6;934:15;930:26;923:37;978:6;969:15;;;;;;146:844;;;;:::o;995:562::-;1094:6;1102;1155:2;1143:9;1134:7;1130:23;1126:32;1123:52;;;1171:1;1168;1161:12;1123:52;1198:16;;-1:-1:-1;;;;;1263:14:132;;;1260:34;;;1290:1;1287;1280:12;1260:34;1313:61;1366:7;1357:6;1346:9;1342:22;1313:61;:::i;:::-;1303:71;;1420:2;1409:9;1405:18;1399:25;1383:41;;1449:2;1439:8;1436:16;1433:36;;;1465:1;1462;1455:12;1433:36;;1488:63;1543:7;1532:8;1521:9;1517:24;1488:63;:::i;:::-;1478:73;;;995:562;;;;;:::o;1562:380::-;1641:1;1637:12;;;;1684;;;1705:61;;1759:4;1751:6;1747:17;1737:27;;1705:61;1812:2;1804:6;1801:14;1781:18;1778:38;1775:161;;1858:10;1853:3;1849:20;1846:1;1839:31;1893:4;1890:1;1883:15;1921:4;1918:1;1911:15;1775:161;;1562:380;;;:::o;2073:543::-;2175:2;2170:3;2167:11;2164:446;;;2211:1;2235:5;2232:1;2225:16;2279:4;2276:1;2266:18;2349:2;2337:10;2333:19;2330:1;2326:27;2320:4;2316:38;2385:4;2373:10;2370:20;2367:47;;;-1:-1:-1;2408:4:132;2367:47;2463:2;2458:3;2454:12;2451:1;2447:20;2441:4;2437:31;2427:41;;2518:82;2536:2;2529:5;2526:13;2518:82;;;2581:17;;;2562:1;2551:13;2518:82;;;2522:3;;;2164:446;2073:543;;;:::o;2792:1345::-;2912:10;;-1:-1:-1;;;;;2934:30:132;;2931:56;;;2967:18;;:::i;:::-;2996:97;3086:6;3046:38;3078:4;3072:11;3046:38;:::i;:::-;3040:4;2996:97;:::i;:::-;3148:4;;3205:2;3194:14;;3222:1;3217:663;;;;3924:1;3941:6;3938:89;;;-1:-1:-1;3993:19:132;;;3987:26;3938:89;-1:-1:-1;;2749:1:132;2745:11;;;2741:24;2737:29;2727:40;2773:1;2769:11;;;2724:57;4040:81;;3187:944;;3217:663;2020:1;2013:14;;;2057:4;2044:18;;-1:-1:-1;;3253:20:132;;;3371:236;3385:7;3382:1;3379:14;3371:236;;;3474:19;;;3468:26;3453:42;;3566:27;;;;3534:1;3522:14;;;;3401:19;;3371:236;;;3375:3;3635:6;3626:7;3623:19;3620:201;;;3696:19;;;3690:26;-1:-1:-1;;3779:1:132;3775:14;;;3791:3;3771:24;3767:37;3763:42;3748:58;3733:74;;3620:201;-1:-1:-1;;;;;3867:1:132;3851:14;;;3847:22;3834:36;;-1:-1:-1;2792:1345:132:o;:::-;137:209:129;;;;;;", - "linkReferences": {} - }, - "deployedBytecode": { - "object": "0x608060405234801561001057600080fd5b506004361061009e5760003560e01c806340c10f191161006657806340c10f191461011857806370a082311461012d57806395d89b4114610156578063a9059cbb1461015e578063dd62ed3e1461017157600080fd5b806306fdde03146100a3578063095ea7b3146100c157806318160ddd146100e457806323b872dd146100f6578063313ce56714610109575b600080fd5b6100ab6101aa565b6040516100b891906105ce565b60405180910390f35b6100d46100cf366004610639565b61023c565b60405190151581526020016100b8565b6002545b6040519081526020016100b8565b6100d4610104366004610663565b610256565b604051601281526020016100b8565b61012b610126366004610639565b61027a565b005b6100e861013b36600461069f565b6001600160a01b031660009081526020819052604090205490565b6100ab610288565b6100d461016c366004610639565b610297565b6100e861017f3660046106c1565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101b9906106f4565b80601f01602080910402602001604051908101604052809291908181526020018280546101e5906106f4565b80156102325780601f1061020757610100808354040283529160200191610232565b820191906000526020600020905b81548152906001019060200180831161021557829003601f168201915b5050505050905090565b60003361024a8185856102a5565b60019150505b92915050565b6000336102648582856102b7565b61026f85858561033a565b506001949350505050565b6102848282610399565b5050565b6060600480546101b9906106f4565b60003361024a81858561033a565b6102b283838360016103cf565b505050565b6001600160a01b038381166000908152600160209081526040808320938616835292905220546000198114610334578181101561032557604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064015b60405180910390fd5b610334848484840360006103cf565b50505050565b6001600160a01b03831661036457604051634b637e8f60e11b81526000600482015260240161031c565b6001600160a01b03821661038e5760405163ec442f0560e01b81526000600482015260240161031c565b6102b28383836104a4565b6001600160a01b0382166103c35760405163ec442f0560e01b81526000600482015260240161031c565b610284600083836104a4565b6001600160a01b0384166103f95760405163e602df0560e01b81526000600482015260240161031c565b6001600160a01b03831661042357604051634a1406b160e11b81526000600482015260240161031c565b6001600160a01b038085166000908152600160209081526040808320938716835292905220829055801561033457826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161049691815260200190565b60405180910390a350505050565b6001600160a01b0383166104cf5780600260008282546104c4919061072e565b909155506105419050565b6001600160a01b038316600090815260208190526040902054818110156105225760405163391434e360e21b81526001600160a01b0385166004820152602481018290526044810183905260640161031c565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b03821661055d5760028054829003905561057c565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516105c191815260200190565b60405180910390a3505050565b60006020808352835180602085015260005b818110156105fc578581018301518582016040015282016105e0565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b038116811461063457600080fd5b919050565b6000806040838503121561064c57600080fd5b6106558361061d565b946020939093013593505050565b60008060006060848603121561067857600080fd5b6106818461061d565b925061068f6020850161061d565b9150604084013590509250925092565b6000602082840312156106b157600080fd5b6106ba8261061d565b9392505050565b600080604083850312156106d457600080fd5b6106dd8361061d565b91506106eb6020840161061d565b90509250929050565b600181811c9082168061070857607f821691505b60208210810361072857634e487b7160e01b600052602260045260246000fd5b50919050565b8082018082111561025057634e487b7160e01b600052601160045260246000fdfea2646970667358221220e63869d881ddb2366a97bfa92c8feca6085d6cdb56d2fce17b8335de6d44d83f64736f6c63430008160033", - "sourceMap": "137:209:129:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1779:89:112;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3998:186;;;;;;:::i;:::-;;:::i;:::-;;;1169:14:132;;1162:22;1144:41;;1132:2;1117:18;3998:186:112;1004:187:132;2849:97:112;2927:12;;2849:97;;;1342:25:132;;;1330:2;1315:18;2849:97:112;1196:177:132;4776:244:112;;;;;;:::i;:::-;;:::i;2707:82::-;;;2780:2;1853:36:132;;1841:2;1826:18;2707:82:112;1711:184:132;257:87:129;;;;;;:::i;:::-;;:::i;:::-;;3004:116:112;;;;;;:::i;:::-;-1:-1:-1;;;;;3095:18:112;3069:7;3095:18;;;;;;;;;;;;3004:116;1981:93;;;:::i;3315:178::-;;;;;;:::i;:::-;;:::i;3551:140::-;;;;;;:::i;:::-;-1:-1:-1;;;;;3657:18:112;;;3631:7;3657:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;3551:140;1779:89;1824:13;1856:5;1849:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1779:89;:::o;3998:186::-;4071:4;735:10:117;4125:31:112;735:10:117;4141:7:112;4150:5;4125:8;:31::i;:::-;4173:4;4166:11;;;3998:186;;;;;:::o;4776:244::-;4863:4;735:10:117;4919:37:112;4935:4;735:10:117;4950:5:112;4919:15;:37::i;:::-;4966:26;4976:4;4982:2;4986:5;4966:9;:26::i;:::-;-1:-1:-1;5009:4:112;;4776:244;-1:-1:-1;;;;4776:244:112:o;257:87:129:-;318:19;324:3;329:7;318:5;:19::i;:::-;257:87;;:::o;1981:93:112:-;2028:13;2060:7;2053:14;;;;;:::i;3315:178::-;3384:4;735:10:117;3438:27:112;735:10:117;3455:2:112;3459:5;3438:9;:27::i;8726:128::-;8810:37;8819:5;8826:7;8835:5;8842:4;8810:8;:37::i;:::-;8726:128;;;:::o;10415:477::-;-1:-1:-1;;;;;3657:18:112;;;10514:24;3657:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;-1:-1:-1;;10580:37:112;;10576:310;;10656:5;10637:16;:24;10633:130;;;10688:60;;-1:-1:-1;;;10688:60:112;;-1:-1:-1;;;;;2961:32:132;;10688:60:112;;;2943:51:132;3010:18;;;3003:34;;;3053:18;;;3046:34;;;2916:18;;10688:60:112;;;;;;;;10633:130;10804:57;10813:5;10820:7;10848:5;10829:16;:24;10855:5;10804:8;:57::i;:::-;10504:388;10415:477;;;:::o;5393:300::-;-1:-1:-1;;;;;5476:18:112;;5472:86;;5517:30;;-1:-1:-1;;;5517:30:112;;5544:1;5517:30;;;3237:51:132;3210:18;;5517:30:112;3091:203:132;5472:86:112;-1:-1:-1;;;;;5571:16:112;;5567:86;;5610:32;;-1:-1:-1;;;5610:32:112;;5639:1;5610:32;;;3237:51:132;3210:18;;5610:32:112;3091:203:132;5567:86:112;5662:24;5670:4;5676:2;5680:5;5662:7;:24::i;7458:208::-;-1:-1:-1;;;;;7528:21:112;;7524:91;;7572:32;;-1:-1:-1;;;7572:32:112;;7601:1;7572:32;;;3237:51:132;3210:18;;7572:32:112;3091:203:132;7524:91:112;7624:35;7640:1;7644:7;7653:5;7624:7;:35::i;9701:432::-;-1:-1:-1;;;;;9813:19:112;;9809:89;;9855:32;;-1:-1:-1;;;9855:32:112;;9884:1;9855:32;;;3237:51:132;3210:18;;9855:32:112;3091:203:132;9809:89:112;-1:-1:-1;;;;;9911:21:112;;9907:90;;9955:31;;-1:-1:-1;;;9955:31:112;;9983:1;9955:31;;;3237:51:132;3210:18;;9955:31:112;3091:203:132;9907:90:112;-1:-1:-1;;;;;10006:18:112;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;:35;;;10051:76;;;;10101:7;-1:-1:-1;;;;;10085:31:112;10094:5;-1:-1:-1;;;;;10085:31:112;;10110:5;10085:31;;;;1342:25:132;;1330:2;1315:18;;1196:177;10085:31:112;;;;;;;;9701:432;;;;:::o;6008:1107::-;-1:-1:-1;;;;;6097:18:112;;6093:540;;6249:5;6233:12;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;6093:540:112;;-1:-1:-1;6093:540:112;;-1:-1:-1;;;;;6307:15:112;;6285:19;6307:15;;;;;;;;;;;6340:19;;;6336:115;;;6386:50;;-1:-1:-1;;;6386:50:112;;-1:-1:-1;;;;;2961:32:132;;6386:50:112;;;2943:51:132;3010:18;;;3003:34;;;3053:18;;;3046:34;;;2916:18;;6386:50:112;2741:345:132;6336:115:112;-1:-1:-1;;;;;6571:15:112;;:9;:15;;;;;;;;;;6589:19;;;;6571:37;;6093:540;-1:-1:-1;;;;;6647:16:112;;6643:425;;6810:12;:21;;;;;;;6643:425;;;-1:-1:-1;;;;;7021:13:112;;:9;:13;;;;;;;;;;:22;;;;;;6643:425;7098:2;-1:-1:-1;;;;;7083:25:112;7092:4;-1:-1:-1;;;;;7083:25:112;;7102:5;7083:25;;;;1342::132;;1330:2;1315:18;;1196:177;7083:25:112;;;;;;;;6008:1107;;;:::o;14:548:132:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:173::-;635:20;;-1:-1:-1;;;;;684:31:132;;674:42;;664:70;;730:1;727;720:12;664:70;567:173;;;:::o;745:254::-;813:6;821;874:2;862:9;853:7;849:23;845:32;842:52;;;890:1;887;880:12;842:52;913:29;932:9;913:29;:::i;:::-;903:39;989:2;974:18;;;;961:32;;-1:-1:-1;;;745:254:132:o;1378:328::-;1455:6;1463;1471;1524:2;1512:9;1503:7;1499:23;1495:32;1492:52;;;1540:1;1537;1530:12;1492:52;1563:29;1582:9;1563:29;:::i;:::-;1553:39;;1611:38;1645:2;1634:9;1630:18;1611:38;:::i;:::-;1601:48;;1696:2;1685:9;1681:18;1668:32;1658:42;;1378:328;;;;;:::o;1900:186::-;1959:6;2012:2;2000:9;1991:7;1987:23;1983:32;1980:52;;;2028:1;2025;2018:12;1980:52;2051:29;2070:9;2051:29;:::i;:::-;2041:39;1900:186;-1:-1:-1;;;1900:186:132:o;2091:260::-;2159:6;2167;2220:2;2208:9;2199:7;2195:23;2191:32;2188:52;;;2236:1;2233;2226:12;2188:52;2259:29;2278:9;2259:29;:::i;:::-;2249:39;;2307:38;2341:2;2330:9;2326:18;2307:38;:::i;:::-;2297:48;;2091:260;;;;;:::o;2356:380::-;2435:1;2431:12;;;;2478;;;2499:61;;2553:4;2545:6;2541:17;2531:27;;2499:61;2606:2;2598:6;2595:14;2575:18;2572:38;2569:161;;2652:10;2647:3;2643:20;2640:1;2633:31;2687:4;2684:1;2677:15;2715:4;2712:1;2705:15;2569:161;;2356:380;;;:::o;3299:222::-;3364:9;;;3385:10;;;3382:133;;;3437:10;3432:3;3428:20;3425:1;3418:31;3472:4;3469:1;3462:15;3500:4;3497:1;3490:15", - "linkReferences": {} - }, - "methodIdentifiers": { - "allowance(address,address)": "dd62ed3e", - "approve(address,uint256)": "095ea7b3", - "balanceOf(address)": "70a08231", - "decimals()": "313ce567", - "mint(address,uint256)": "40c10f19", - "name()": "06fdde03", - "symbol()": "95d89b41", - "totalSupply()": "18160ddd", - "transfer(address,uint256)": "a9059cbb", - "transferFrom(address,address,uint256)": "23b872dd" - }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"allowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSpender\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"ERC20InsufficientAllowance(address,uint256,uint256)\":[{\"details\":\"Indicates a failure with the `spender`\\u2019s `allowance`. Used in transfers.\",\"params\":{\"allowance\":\"Amount of tokens a `spender` is allowed to operate with.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC20InsufficientBalance(address,uint256,uint256)\":[{\"details\":\"Indicates an error related to the current `balance` of a `sender`. Used in transfers.\",\"params\":{\"balance\":\"Current balance for the interacting account.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC20InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC20InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidSpender(address)\":[{\"details\":\"Indicates a failure with the `spender` to be approved. Used in approvals.\",\"params\":{\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}]},\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"See {IERC20-allowance}.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. NOTE: If `value` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"See {IERC20-balanceOf}.\"},\"decimals()\":{\"details\":\"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the default value returned by this function, unless it's overridden. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"totalSupply()\":{\"details\":\"See {IERC20-totalSupply}.\"},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `value`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC20-transferFrom}. Skips emitting an {Approval} event indicating an allowance update. This is not required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve]. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `value`. - the caller must have allowance for ``from``'s tokens of at least `value`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"test/evm/mocks/ERC20Mock.sol\":\"ERC20Mock\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x880da465c203cec76b10d72dbd87c80f387df4102274f23eea1f9c9b0918792b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://399594cd8bb0143bc9e55e0f1d071d0d8c850a394fb7a319d50edd55d9ed822b\",\"dweb:/ipfs/QmbPZzgtT6LEm9CMqWfagQFwETbV1ztpECBB1DtQHrKiRz\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0xbf61ab2ae1d575a17ea58fbb99ca232baddcc4e0eeea180e84cbc74b0c348b31\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4e0968705bad99747a8e5288aa008678c2be2f471f919dce3925a3cc4f1dee09\",\"dweb:/ipfs/QmbAFnCQfo4tw6ssfQSjhA5LzwHWNNryXN8bX7ty8jiqqn\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db\",\"dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x70f2f713b13b7ce4610bcd0ac9fec0f3cc43693b043abcb8dc40a42a726eb330\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c13d13304ac79a83ab1c30168967d19e2203342ebbd6a9bbce4db7550522dcbf\",\"dweb:/ipfs/QmeN5jKMN2vw5bhacr6tkg78afbTTZUeaacNHqjWt4Ew1r\"]},\"node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"test/evm/mocks/ERC20Mock.sol\":{\"keccak256\":\"0x9134f00d206167b482f4bdad5b443b990c4ec04cc86c523373831750bd841a2e\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://06605d3fdabb46937c1a2098a4caa4a5e5da8c110f52c5f6a7b42060e33d4127\",\"dweb:/ipfs/QmZSbT8rU5HhcgLQm9VWingv7HCdq4KxsTcEmqoG25qcQE\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { - "inputs": [ - { "internalType": "string", "name": "_name", "type": "string" }, - { "internalType": "string", "name": "_symbol", "type": "string" } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [ - { "internalType": "address", "name": "spender", "type": "address" }, - { - "internalType": "uint256", - "name": "allowance", - "type": "uint256" - }, - { "internalType": "uint256", "name": "needed", "type": "uint256" } - ], - "type": "error", - "name": "ERC20InsufficientAllowance" - }, - { - "inputs": [ - { "internalType": "address", "name": "sender", "type": "address" }, - { "internalType": "uint256", "name": "balance", "type": "uint256" }, - { "internalType": "uint256", "name": "needed", "type": "uint256" } - ], - "type": "error", - "name": "ERC20InsufficientBalance" - }, - { - "inputs": [ - { "internalType": "address", "name": "approver", "type": "address" } - ], - "type": "error", - "name": "ERC20InvalidApprover" - }, - { - "inputs": [ - { "internalType": "address", "name": "receiver", "type": "address" } - ], - "type": "error", - "name": "ERC20InvalidReceiver" - }, - { - "inputs": [ - { "internalType": "address", "name": "sender", "type": "address" } - ], - "type": "error", - "name": "ERC20InvalidSender" - }, - { - "inputs": [ - { "internalType": "address", "name": "spender", "type": "address" } - ], - "type": "error", - "name": "ERC20InvalidSpender" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address", - "indexed": true - }, - { - "internalType": "address", - "name": "spender", - "type": "address", - "indexed": true - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "Approval", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address", - "indexed": true - }, - { - "internalType": "address", - "name": "to", - "type": "address", - "indexed": true - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "Transfer", - "anonymous": false - }, - { - "inputs": [ - { "internalType": "address", "name": "owner", "type": "address" }, - { "internalType": "address", "name": "spender", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "allowance", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "spender", "type": "address" }, - { "internalType": "uint256", "name": "value", "type": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "approve", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "balanceOf", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "decimals", - "outputs": [{ "internalType": "uint8", "name": "", "type": "uint8" }] - }, - { - "inputs": [ - { "internalType": "address", "name": "_to", "type": "address" }, - { "internalType": "uint256", "name": "_amount", "type": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "mint" - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "name", - "outputs": [ - { "internalType": "string", "name": "", "type": "string" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "symbol", - "outputs": [ - { "internalType": "string", "name": "", "type": "string" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "totalSupply", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "to", "type": "address" }, - { "internalType": "uint256", "name": "value", "type": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "transfer", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "address", "name": "from", "type": "address" }, - { "internalType": "address", "name": "to", "type": "address" }, - { "internalType": "uint256", "name": "value", "type": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "transferFrom", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - } - ], - "devdoc": { - "kind": "dev", - "methods": { - "allowance(address,address)": { - "details": "See {IERC20-allowance}." - }, - "approve(address,uint256)": { - "details": "See {IERC20-approve}. NOTE: If `value` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address." - }, - "balanceOf(address)": { "details": "See {IERC20-balanceOf}." }, - "decimals()": { - "details": "Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the default value returned by this function, unless it's overridden. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}." - }, - "name()": { "details": "Returns the name of the token." }, - "symbol()": { - "details": "Returns the symbol of the token, usually a shorter version of the name." - }, - "totalSupply()": { "details": "See {IERC20-totalSupply}." }, - "transfer(address,uint256)": { - "details": "See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `value`." - }, - "transferFrom(address,address,uint256)": { - "details": "See {IERC20-transferFrom}. Skips emitting an {Approval} event indicating an allowance update. This is not required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve]. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `value`. - the caller must have allowance for ``from``'s tokens of at least `value`." - } - }, - "version": 1 - }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { "test/evm/mocks/ERC20Mock.sol": "ERC20Mock" }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@openzeppelin/contracts/interfaces/draft-IERC6093.sol": { - "keccak256": "0x880da465c203cec76b10d72dbd87c80f387df4102274f23eea1f9c9b0918792b", - "urls": [ - "bzz-raw://399594cd8bb0143bc9e55e0f1d071d0d8c850a394fb7a319d50edd55d9ed822b", - "dweb:/ipfs/QmbPZzgtT6LEm9CMqWfagQFwETbV1ztpECBB1DtQHrKiRz" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/token/ERC20/ERC20.sol": { - "keccak256": "0xbf61ab2ae1d575a17ea58fbb99ca232baddcc4e0eeea180e84cbc74b0c348b31", - "urls": [ - "bzz-raw://4e0968705bad99747a8e5288aa008678c2be2f471f919dce3925a3cc4f1dee09", - "dweb:/ipfs/QmbAFnCQfo4tw6ssfQSjhA5LzwHWNNryXN8bX7ty8jiqqn" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol": { - "keccak256": "0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7", - "urls": [ - "bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db", - "dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol": { - "keccak256": "0x70f2f713b13b7ce4610bcd0ac9fec0f3cc43693b043abcb8dc40a42a726eb330", - "urls": [ - "bzz-raw://c13d13304ac79a83ab1c30168967d19e2203342ebbd6a9bbce4db7550522dcbf", - "dweb:/ipfs/QmeN5jKMN2vw5bhacr6tkg78afbTTZUeaacNHqjWt4Ew1r" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Context.sol": { - "keccak256": "0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2", - "urls": [ - "bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12", - "dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF" - ], - "license": "MIT" - }, - "test/evm/mocks/ERC20Mock.sol": { - "keccak256": "0x9134f00d206167b482f4bdad5b443b990c4ec04cc86c523373831750bd841a2e", - "urls": [ - "bzz-raw://06605d3fdabb46937c1a2098a4caa4a5e5da8c110f52c5f6a7b42060e33d4127", - "dweb:/ipfs/QmZSbT8rU5HhcgLQm9VWingv7HCdq4KxsTcEmqoG25qcQE" - ], - "license": "UNLICENSED" - } - }, - "version": 1 - }, - "id": 129 -} diff --git a/examples/oft-movement/out/EndpointV2AltMock.sol/EndpointV2AltMock.json b/examples/oft-movement/out/EndpointV2AltMock.sol/EndpointV2AltMock.json deleted file mode 100644 index 1f5d6458a..000000000 --- a/examples/oft-movement/out/EndpointV2AltMock.sol/EndpointV2AltMock.json +++ /dev/null @@ -1,3655 +0,0 @@ -{ - "abi": [ - { - "type": "constructor", - "inputs": [ - { "name": "_eid", "type": "uint32", "internalType": "uint32" }, - { "name": "_owner", "type": "address", "internalType": "address" }, - { "name": "_altToken", "type": "address", "internalType": "address" } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "EMPTY_PAYLOAD_HASH", - "inputs": [], - "outputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "NIL_PAYLOAD_HASH", - "inputs": [], - "outputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "blockedLibrary", - "inputs": [], - "outputs": [{ "name": "", "type": "address", "internalType": "address" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "burn", - "inputs": [ - { "name": "_oapp", "type": "address", "internalType": "address" }, - { "name": "_srcEid", "type": "uint32", "internalType": "uint32" }, - { "name": "_sender", "type": "bytes32", "internalType": "bytes32" }, - { "name": "_nonce", "type": "uint64", "internalType": "uint64" }, - { "name": "_payloadHash", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "clear", - "inputs": [ - { "name": "_oapp", "type": "address", "internalType": "address" }, - { - "name": "_origin", - "type": "tuple", - "internalType": "struct Origin", - "components": [ - { "name": "srcEid", "type": "uint32", "internalType": "uint32" }, - { "name": "sender", "type": "bytes32", "internalType": "bytes32" }, - { "name": "nonce", "type": "uint64", "internalType": "uint64" } - ] - }, - { "name": "_guid", "type": "bytes32", "internalType": "bytes32" }, - { "name": "_message", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "composeQueue", - "inputs": [ - { "name": "from", "type": "address", "internalType": "address" }, - { "name": "to", "type": "address", "internalType": "address" }, - { "name": "guid", "type": "bytes32", "internalType": "bytes32" }, - { "name": "index", "type": "uint16", "internalType": "uint16" } - ], - "outputs": [ - { "name": "messageHash", "type": "bytes32", "internalType": "bytes32" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "defaultReceiveLibrary", - "inputs": [ - { "name": "srcEid", "type": "uint32", "internalType": "uint32" } - ], - "outputs": [ - { "name": "lib", "type": "address", "internalType": "address" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "defaultReceiveLibraryTimeout", - "inputs": [ - { "name": "srcEid", "type": "uint32", "internalType": "uint32" } - ], - "outputs": [ - { "name": "lib", "type": "address", "internalType": "address" }, - { "name": "expiry", "type": "uint256", "internalType": "uint256" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "defaultSendLibrary", - "inputs": [ - { "name": "dstEid", "type": "uint32", "internalType": "uint32" } - ], - "outputs": [ - { "name": "lib", "type": "address", "internalType": "address" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "delegates", - "inputs": [ - { "name": "oapp", "type": "address", "internalType": "address" } - ], - "outputs": [ - { "name": "delegate", "type": "address", "internalType": "address" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "eid", - "inputs": [], - "outputs": [{ "name": "", "type": "uint32", "internalType": "uint32" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getConfig", - "inputs": [ - { "name": "_oapp", "type": "address", "internalType": "address" }, - { "name": "_lib", "type": "address", "internalType": "address" }, - { "name": "_eid", "type": "uint32", "internalType": "uint32" }, - { "name": "_configType", "type": "uint32", "internalType": "uint32" } - ], - "outputs": [ - { "name": "config", "type": "bytes", "internalType": "bytes" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getReceiveLibrary", - "inputs": [ - { "name": "_receiver", "type": "address", "internalType": "address" }, - { "name": "_srcEid", "type": "uint32", "internalType": "uint32" } - ], - "outputs": [ - { "name": "lib", "type": "address", "internalType": "address" }, - { "name": "isDefault", "type": "bool", "internalType": "bool" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getRegisteredLibraries", - "inputs": [], - "outputs": [ - { "name": "", "type": "address[]", "internalType": "address[]" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getSendContext", - "inputs": [], - "outputs": [ - { "name": "", "type": "uint32", "internalType": "uint32" }, - { "name": "", "type": "address", "internalType": "address" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getSendLibrary", - "inputs": [ - { "name": "_sender", "type": "address", "internalType": "address" }, - { "name": "_dstEid", "type": "uint32", "internalType": "uint32" } - ], - "outputs": [ - { "name": "lib", "type": "address", "internalType": "address" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "inboundNonce", - "inputs": [ - { "name": "_receiver", "type": "address", "internalType": "address" }, - { "name": "_srcEid", "type": "uint32", "internalType": "uint32" }, - { "name": "_sender", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [{ "name": "", "type": "uint64", "internalType": "uint64" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "inboundPayloadHash", - "inputs": [ - { "name": "receiver", "type": "address", "internalType": "address" }, - { "name": "srcEid", "type": "uint32", "internalType": "uint32" }, - { "name": "sender", "type": "bytes32", "internalType": "bytes32" }, - { "name": "inboundNonce", "type": "uint64", "internalType": "uint64" } - ], - "outputs": [ - { "name": "payloadHash", "type": "bytes32", "internalType": "bytes32" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "initializable", - "inputs": [ - { - "name": "_origin", - "type": "tuple", - "internalType": "struct Origin", - "components": [ - { "name": "srcEid", "type": "uint32", "internalType": "uint32" }, - { "name": "sender", "type": "bytes32", "internalType": "bytes32" }, - { "name": "nonce", "type": "uint64", "internalType": "uint64" } - ] - }, - { "name": "_receiver", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "isDefaultSendLibrary", - "inputs": [ - { "name": "_sender", "type": "address", "internalType": "address" }, - { "name": "_dstEid", "type": "uint32", "internalType": "uint32" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "isRegisteredLibrary", - "inputs": [ - { "name": "lib", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "isSendingMessage", - "inputs": [], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "isSupportedEid", - "inputs": [ - { "name": "_eid", "type": "uint32", "internalType": "uint32" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "isValidReceiveLibrary", - "inputs": [ - { "name": "_receiver", "type": "address", "internalType": "address" }, - { "name": "_srcEid", "type": "uint32", "internalType": "uint32" }, - { - "name": "_actualReceiveLib", - "type": "address", - "internalType": "address" - } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "lazyInboundNonce", - "inputs": [ - { "name": "receiver", "type": "address", "internalType": "address" }, - { "name": "srcEid", "type": "uint32", "internalType": "uint32" }, - { "name": "sender", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [ - { "name": "nonce", "type": "uint64", "internalType": "uint64" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "lzCompose", - "inputs": [ - { "name": "_from", "type": "address", "internalType": "address" }, - { "name": "_to", "type": "address", "internalType": "address" }, - { "name": "_guid", "type": "bytes32", "internalType": "bytes32" }, - { "name": "_index", "type": "uint16", "internalType": "uint16" }, - { "name": "_message", "type": "bytes", "internalType": "bytes" }, - { "name": "_extraData", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [], - "stateMutability": "payable" - }, - { - "type": "function", - "name": "lzComposeAlert", - "inputs": [ - { "name": "_from", "type": "address", "internalType": "address" }, - { "name": "_to", "type": "address", "internalType": "address" }, - { "name": "_guid", "type": "bytes32", "internalType": "bytes32" }, - { "name": "_index", "type": "uint16", "internalType": "uint16" }, - { "name": "_gas", "type": "uint256", "internalType": "uint256" }, - { "name": "_value", "type": "uint256", "internalType": "uint256" }, - { "name": "_message", "type": "bytes", "internalType": "bytes" }, - { "name": "_extraData", "type": "bytes", "internalType": "bytes" }, - { "name": "_reason", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "lzReceive", - "inputs": [ - { - "name": "_origin", - "type": "tuple", - "internalType": "struct Origin", - "components": [ - { "name": "srcEid", "type": "uint32", "internalType": "uint32" }, - { "name": "sender", "type": "bytes32", "internalType": "bytes32" }, - { "name": "nonce", "type": "uint64", "internalType": "uint64" } - ] - }, - { "name": "_receiver", "type": "address", "internalType": "address" }, - { "name": "_guid", "type": "bytes32", "internalType": "bytes32" }, - { "name": "_message", "type": "bytes", "internalType": "bytes" }, - { "name": "_extraData", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [], - "stateMutability": "payable" - }, - { - "type": "function", - "name": "lzReceiveAlert", - "inputs": [ - { - "name": "_origin", - "type": "tuple", - "internalType": "struct Origin", - "components": [ - { "name": "srcEid", "type": "uint32", "internalType": "uint32" }, - { "name": "sender", "type": "bytes32", "internalType": "bytes32" }, - { "name": "nonce", "type": "uint64", "internalType": "uint64" } - ] - }, - { "name": "_receiver", "type": "address", "internalType": "address" }, - { "name": "_guid", "type": "bytes32", "internalType": "bytes32" }, - { "name": "_gas", "type": "uint256", "internalType": "uint256" }, - { "name": "_value", "type": "uint256", "internalType": "uint256" }, - { "name": "_message", "type": "bytes", "internalType": "bytes" }, - { "name": "_extraData", "type": "bytes", "internalType": "bytes" }, - { "name": "_reason", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "lzToken", - "inputs": [], - "outputs": [{ "name": "", "type": "address", "internalType": "address" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "nativeToken", - "inputs": [], - "outputs": [{ "name": "", "type": "address", "internalType": "address" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "nextGuid", - "inputs": [ - { "name": "_sender", "type": "address", "internalType": "address" }, - { "name": "_dstEid", "type": "uint32", "internalType": "uint32" }, - { "name": "_receiver", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "nilify", - "inputs": [ - { "name": "_oapp", "type": "address", "internalType": "address" }, - { "name": "_srcEid", "type": "uint32", "internalType": "uint32" }, - { "name": "_sender", "type": "bytes32", "internalType": "bytes32" }, - { "name": "_nonce", "type": "uint64", "internalType": "uint64" }, - { "name": "_payloadHash", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "outboundNonce", - "inputs": [ - { "name": "sender", "type": "address", "internalType": "address" }, - { "name": "dstEid", "type": "uint32", "internalType": "uint32" }, - { "name": "receiver", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [ - { "name": "nonce", "type": "uint64", "internalType": "uint64" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "owner", - "inputs": [], - "outputs": [{ "name": "", "type": "address", "internalType": "address" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "quote", - "inputs": [ - { - "name": "_params", - "type": "tuple", - "internalType": "struct MessagingParams", - "components": [ - { "name": "dstEid", "type": "uint32", "internalType": "uint32" }, - { - "name": "receiver", - "type": "bytes32", - "internalType": "bytes32" - }, - { "name": "message", "type": "bytes", "internalType": "bytes" }, - { "name": "options", "type": "bytes", "internalType": "bytes" }, - { "name": "payInLzToken", "type": "bool", "internalType": "bool" } - ] - }, - { "name": "_sender", "type": "address", "internalType": "address" } - ], - "outputs": [ - { - "name": "", - "type": "tuple", - "internalType": "struct MessagingFee", - "components": [ - { - "name": "nativeFee", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "lzTokenFee", - "type": "uint256", - "internalType": "uint256" - } - ] - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "receiveLibraryTimeout", - "inputs": [ - { "name": "receiver", "type": "address", "internalType": "address" }, - { "name": "srcEid", "type": "uint32", "internalType": "uint32" } - ], - "outputs": [ - { "name": "lib", "type": "address", "internalType": "address" }, - { "name": "expiry", "type": "uint256", "internalType": "uint256" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "recoverToken", - "inputs": [ - { "name": "_token", "type": "address", "internalType": "address" }, - { "name": "_to", "type": "address", "internalType": "address" }, - { "name": "_amount", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "registerLibrary", - "inputs": [ - { "name": "_lib", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "renounceOwnership", - "inputs": [], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "send", - "inputs": [ - { - "name": "_params", - "type": "tuple", - "internalType": "struct MessagingParams", - "components": [ - { "name": "dstEid", "type": "uint32", "internalType": "uint32" }, - { - "name": "receiver", - "type": "bytes32", - "internalType": "bytes32" - }, - { "name": "message", "type": "bytes", "internalType": "bytes" }, - { "name": "options", "type": "bytes", "internalType": "bytes" }, - { "name": "payInLzToken", "type": "bool", "internalType": "bool" } - ] - }, - { - "name": "_refundAddress", - "type": "address", - "internalType": "address" - } - ], - "outputs": [ - { - "name": "", - "type": "tuple", - "internalType": "struct MessagingReceipt", - "components": [ - { "name": "guid", "type": "bytes32", "internalType": "bytes32" }, - { "name": "nonce", "type": "uint64", "internalType": "uint64" }, - { - "name": "fee", - "type": "tuple", - "internalType": "struct MessagingFee", - "components": [ - { - "name": "nativeFee", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "lzTokenFee", - "type": "uint256", - "internalType": "uint256" - } - ] - } - ] - } - ], - "stateMutability": "payable" - }, - { - "type": "function", - "name": "sendCompose", - "inputs": [ - { "name": "_to", "type": "address", "internalType": "address" }, - { "name": "_guid", "type": "bytes32", "internalType": "bytes32" }, - { "name": "_index", "type": "uint16", "internalType": "uint16" }, - { "name": "_message", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setConfig", - "inputs": [ - { "name": "_oapp", "type": "address", "internalType": "address" }, - { "name": "_lib", "type": "address", "internalType": "address" }, - { - "name": "_params", - "type": "tuple[]", - "internalType": "struct SetConfigParam[]", - "components": [ - { "name": "eid", "type": "uint32", "internalType": "uint32" }, - { - "name": "configType", - "type": "uint32", - "internalType": "uint32" - }, - { "name": "config", "type": "bytes", "internalType": "bytes" } - ] - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setDefaultReceiveLibrary", - "inputs": [ - { "name": "_eid", "type": "uint32", "internalType": "uint32" }, - { "name": "_newLib", "type": "address", "internalType": "address" }, - { "name": "_gracePeriod", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setDefaultReceiveLibraryTimeout", - "inputs": [ - { "name": "_eid", "type": "uint32", "internalType": "uint32" }, - { "name": "_lib", "type": "address", "internalType": "address" }, - { "name": "_expiry", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setDefaultSendLibrary", - "inputs": [ - { "name": "_eid", "type": "uint32", "internalType": "uint32" }, - { "name": "_newLib", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setDelegate", - "inputs": [ - { "name": "_delegate", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setLzToken", - "inputs": [ - { "name": "_lzToken", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setReceiveLibrary", - "inputs": [ - { "name": "_oapp", "type": "address", "internalType": "address" }, - { "name": "_eid", "type": "uint32", "internalType": "uint32" }, - { "name": "_newLib", "type": "address", "internalType": "address" }, - { "name": "_gracePeriod", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setReceiveLibraryTimeout", - "inputs": [ - { "name": "_oapp", "type": "address", "internalType": "address" }, - { "name": "_eid", "type": "uint32", "internalType": "uint32" }, - { "name": "_lib", "type": "address", "internalType": "address" }, - { "name": "_expiry", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setSendLibrary", - "inputs": [ - { "name": "_oapp", "type": "address", "internalType": "address" }, - { "name": "_eid", "type": "uint32", "internalType": "uint32" }, - { "name": "_newLib", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "skip", - "inputs": [ - { "name": "_oapp", "type": "address", "internalType": "address" }, - { "name": "_srcEid", "type": "uint32", "internalType": "uint32" }, - { "name": "_sender", "type": "bytes32", "internalType": "bytes32" }, - { "name": "_nonce", "type": "uint64", "internalType": "uint64" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "transferOwnership", - "inputs": [ - { "name": "newOwner", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "verifiable", - "inputs": [ - { - "name": "_origin", - "type": "tuple", - "internalType": "struct Origin", - "components": [ - { "name": "srcEid", "type": "uint32", "internalType": "uint32" }, - { "name": "sender", "type": "bytes32", "internalType": "bytes32" }, - { "name": "nonce", "type": "uint64", "internalType": "uint64" } - ] - }, - { "name": "_receiver", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "verify", - "inputs": [ - { - "name": "_origin", - "type": "tuple", - "internalType": "struct Origin", - "components": [ - { "name": "srcEid", "type": "uint32", "internalType": "uint32" }, - { "name": "sender", "type": "bytes32", "internalType": "bytes32" }, - { "name": "nonce", "type": "uint64", "internalType": "uint64" } - ] - }, - { "name": "_receiver", "type": "address", "internalType": "address" }, - { "name": "_payloadHash", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "event", - "name": "ComposeDelivered", - "inputs": [ - { - "name": "from", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "to", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "guid", - "type": "bytes32", - "indexed": false, - "internalType": "bytes32" - }, - { - "name": "index", - "type": "uint16", - "indexed": false, - "internalType": "uint16" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "ComposeSent", - "inputs": [ - { - "name": "from", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "to", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "guid", - "type": "bytes32", - "indexed": false, - "internalType": "bytes32" - }, - { - "name": "index", - "type": "uint16", - "indexed": false, - "internalType": "uint16" - }, - { - "name": "message", - "type": "bytes", - "indexed": false, - "internalType": "bytes" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "DefaultReceiveLibrarySet", - "inputs": [ - { - "name": "eid", - "type": "uint32", - "indexed": false, - "internalType": "uint32" - }, - { - "name": "newLib", - "type": "address", - "indexed": false, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "DefaultReceiveLibraryTimeoutSet", - "inputs": [ - { - "name": "eid", - "type": "uint32", - "indexed": false, - "internalType": "uint32" - }, - { - "name": "oldLib", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "expiry", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "DefaultSendLibrarySet", - "inputs": [ - { - "name": "eid", - "type": "uint32", - "indexed": false, - "internalType": "uint32" - }, - { - "name": "newLib", - "type": "address", - "indexed": false, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "DelegateSet", - "inputs": [ - { - "name": "sender", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "delegate", - "type": "address", - "indexed": false, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "InboundNonceSkipped", - "inputs": [ - { - "name": "srcEid", - "type": "uint32", - "indexed": false, - "internalType": "uint32" - }, - { - "name": "sender", - "type": "bytes32", - "indexed": false, - "internalType": "bytes32" - }, - { - "name": "receiver", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "nonce", - "type": "uint64", - "indexed": false, - "internalType": "uint64" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "LibraryRegistered", - "inputs": [ - { - "name": "newLib", - "type": "address", - "indexed": false, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "LzComposeAlert", - "inputs": [ - { - "name": "from", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "to", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "executor", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "guid", - "type": "bytes32", - "indexed": false, - "internalType": "bytes32" - }, - { - "name": "index", - "type": "uint16", - "indexed": false, - "internalType": "uint16" - }, - { - "name": "gas", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - }, - { - "name": "value", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - }, - { - "name": "message", - "type": "bytes", - "indexed": false, - "internalType": "bytes" - }, - { - "name": "extraData", - "type": "bytes", - "indexed": false, - "internalType": "bytes" - }, - { - "name": "reason", - "type": "bytes", - "indexed": false, - "internalType": "bytes" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "LzReceiveAlert", - "inputs": [ - { - "name": "receiver", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "executor", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "origin", - "type": "tuple", - "indexed": false, - "internalType": "struct Origin", - "components": [ - { "name": "srcEid", "type": "uint32", "internalType": "uint32" }, - { "name": "sender", "type": "bytes32", "internalType": "bytes32" }, - { "name": "nonce", "type": "uint64", "internalType": "uint64" } - ] - }, - { - "name": "guid", - "type": "bytes32", - "indexed": false, - "internalType": "bytes32" - }, - { - "name": "gas", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - }, - { - "name": "value", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - }, - { - "name": "message", - "type": "bytes", - "indexed": false, - "internalType": "bytes" - }, - { - "name": "extraData", - "type": "bytes", - "indexed": false, - "internalType": "bytes" - }, - { - "name": "reason", - "type": "bytes", - "indexed": false, - "internalType": "bytes" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "LzTokenSet", - "inputs": [ - { - "name": "token", - "type": "address", - "indexed": false, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "OwnershipTransferred", - "inputs": [ - { - "name": "previousOwner", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "newOwner", - "type": "address", - "indexed": true, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "PacketBurnt", - "inputs": [ - { - "name": "srcEid", - "type": "uint32", - "indexed": false, - "internalType": "uint32" - }, - { - "name": "sender", - "type": "bytes32", - "indexed": false, - "internalType": "bytes32" - }, - { - "name": "receiver", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "nonce", - "type": "uint64", - "indexed": false, - "internalType": "uint64" - }, - { - "name": "payloadHash", - "type": "bytes32", - "indexed": false, - "internalType": "bytes32" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "PacketDelivered", - "inputs": [ - { - "name": "origin", - "type": "tuple", - "indexed": false, - "internalType": "struct Origin", - "components": [ - { "name": "srcEid", "type": "uint32", "internalType": "uint32" }, - { "name": "sender", "type": "bytes32", "internalType": "bytes32" }, - { "name": "nonce", "type": "uint64", "internalType": "uint64" } - ] - }, - { - "name": "receiver", - "type": "address", - "indexed": false, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "PacketNilified", - "inputs": [ - { - "name": "srcEid", - "type": "uint32", - "indexed": false, - "internalType": "uint32" - }, - { - "name": "sender", - "type": "bytes32", - "indexed": false, - "internalType": "bytes32" - }, - { - "name": "receiver", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "nonce", - "type": "uint64", - "indexed": false, - "internalType": "uint64" - }, - { - "name": "payloadHash", - "type": "bytes32", - "indexed": false, - "internalType": "bytes32" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "PacketSent", - "inputs": [ - { - "name": "encodedPayload", - "type": "bytes", - "indexed": false, - "internalType": "bytes" - }, - { - "name": "options", - "type": "bytes", - "indexed": false, - "internalType": "bytes" - }, - { - "name": "sendLibrary", - "type": "address", - "indexed": false, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "PacketVerified", - "inputs": [ - { - "name": "origin", - "type": "tuple", - "indexed": false, - "internalType": "struct Origin", - "components": [ - { "name": "srcEid", "type": "uint32", "internalType": "uint32" }, - { "name": "sender", "type": "bytes32", "internalType": "bytes32" }, - { "name": "nonce", "type": "uint64", "internalType": "uint64" } - ] - }, - { - "name": "receiver", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "payloadHash", - "type": "bytes32", - "indexed": false, - "internalType": "bytes32" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "ReceiveLibrarySet", - "inputs": [ - { - "name": "receiver", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "eid", - "type": "uint32", - "indexed": false, - "internalType": "uint32" - }, - { - "name": "newLib", - "type": "address", - "indexed": false, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "ReceiveLibraryTimeoutSet", - "inputs": [ - { - "name": "receiver", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "eid", - "type": "uint32", - "indexed": false, - "internalType": "uint32" - }, - { - "name": "oldLib", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "timeout", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "SendLibrarySet", - "inputs": [ - { - "name": "sender", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "eid", - "type": "uint32", - "indexed": false, - "internalType": "uint32" - }, - { - "name": "newLib", - "type": "address", - "indexed": false, - "internalType": "address" - } - ], - "anonymous": false - }, - { "type": "error", "name": "LZ_AlreadyRegistered", "inputs": [] }, - { "type": "error", "name": "LZ_ComposeExists", "inputs": [] }, - { - "type": "error", - "name": "LZ_ComposeNotFound", - "inputs": [ - { "name": "expected", "type": "bytes32", "internalType": "bytes32" }, - { "name": "actual", "type": "bytes32", "internalType": "bytes32" } - ] - }, - { - "type": "error", - "name": "LZ_DefaultReceiveLibUnavailable", - "inputs": [] - }, - { "type": "error", "name": "LZ_DefaultSendLibUnavailable", "inputs": [] }, - { - "type": "error", - "name": "LZ_InsufficientFee", - "inputs": [ - { - "name": "requiredNative", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "suppliedNative", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "requiredLzToken", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "suppliedLzToken", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { "type": "error", "name": "LZ_InvalidArgument", "inputs": [] }, - { "type": "error", "name": "LZ_InvalidExpiry", "inputs": [] }, - { - "type": "error", - "name": "LZ_InvalidNonce", - "inputs": [ - { "name": "nonce", "type": "uint64", "internalType": "uint64" } - ] - }, - { "type": "error", "name": "LZ_InvalidPayloadHash", "inputs": [] }, - { "type": "error", "name": "LZ_InvalidReceiveLibrary", "inputs": [] }, - { "type": "error", "name": "LZ_LzTokenUnavailable", "inputs": [] }, - { "type": "error", "name": "LZ_OnlyAltToken", "inputs": [] }, - { "type": "error", "name": "LZ_OnlyNonDefaultLib", "inputs": [] }, - { "type": "error", "name": "LZ_OnlyReceiveLib", "inputs": [] }, - { "type": "error", "name": "LZ_OnlyRegisteredLib", "inputs": [] }, - { "type": "error", "name": "LZ_OnlyRegisteredOrDefaultLib", "inputs": [] }, - { "type": "error", "name": "LZ_OnlySendLib", "inputs": [] }, - { "type": "error", "name": "LZ_PathNotInitializable", "inputs": [] }, - { "type": "error", "name": "LZ_PathNotVerifiable", "inputs": [] }, - { - "type": "error", - "name": "LZ_PayloadHashNotFound", - "inputs": [ - { "name": "expected", "type": "bytes32", "internalType": "bytes32" }, - { "name": "actual", "type": "bytes32", "internalType": "bytes32" } - ] - }, - { "type": "error", "name": "LZ_SameValue", "inputs": [] }, - { "type": "error", "name": "LZ_SendReentrancy", "inputs": [] }, - { "type": "error", "name": "LZ_Unauthorized", "inputs": [] }, - { "type": "error", "name": "LZ_UnsupportedEid", "inputs": [] }, - { "type": "error", "name": "LZ_UnsupportedInterface", "inputs": [] }, - { "type": "error", "name": "LZ_ZeroLzTokenFee", "inputs": [] }, - { - "type": "error", - "name": "OwnableInvalidOwner", - "inputs": [ - { "name": "owner", "type": "address", "internalType": "address" } - ] - }, - { - "type": "error", - "name": "OwnableUnauthorizedAccount", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ] - }, - { - "type": "error", - "name": "SafeERC20FailedOperation", - "inputs": [ - { "name": "token", "type": "address", "internalType": "address" } - ] - }, - { - "type": "error", - "name": "Transfer_NativeFailed", - "inputs": [ - { "name": "_to", "type": "address", "internalType": "address" }, - { "name": "_value", "type": "uint256", "internalType": "uint256" } - ] - }, - { "type": "error", "name": "Transfer_ToAddressIsZero", "inputs": [] } - ], - "bytecode": { - "object": "0x60e06040526001600d553480156200001657600080fd5b5060405162005649380380620056498339810160408190526200003991620002fb565b828281816001600160a01b0381166200006d57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6200007881620000de565b5063ffffffff166080526040516200009090620002d0565b604051809103906000f080158015620000ad573d6000803e3d6000fd5b506001600160a01b031660a0819052620000c7906200012e565b50506001600160a01b031660c052506200037a9050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b620001386200029f565b6040516301ffc9a760e01b81526325fc096160e21b60048201526001600160a01b038216906301ffc9a790602401602060405180830381865afa15801562000184573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001aa91906200034f565b620001c85760405163eb64f35d60e01b815260040160405180910390fd5b6001600160a01b03811660009081526005602052604090205460ff1615620002035760405163457517f360e11b815260040160405180910390fd5b6001600160a01b0381166000818152600560209081526040808320805460ff191660019081179091556004805491820181559093527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b90920180546001600160a01b0319168417905590519182527f6b374d56679ca9463f27c85c6311e2bb7fde69bf201d3da39d53f10bd9d78af5910160405180910390a150565b6000546001600160a01b03163314620002ce5760405163118cdaa760e01b815233600482015260240162000064565b565b6101e3806200546683390190565b80516001600160a01b0381168114620002f657600080fd5b919050565b6000806000606084860312156200031157600080fd5b835163ffffffff811681146200032657600080fd5b92506200033660208501620002de565b91506200034660408501620002de565b90509250925092565b6000602082840312156200036257600080fd5b815180151581146200037357600080fd5b9392505050565b60805160a05160c051615084620003e260003960008181610b6a01528181612a7b015281816137ab015261395e01526000610781015260008181610531015281816127a901528181612fab015281816130120152818161358001526135e701526150846000f3fe6080604052600436106103505760003560e01c80639132e5c3116101c6578063c9fc7bcd116100f7578063ddc28c5811610095578063e8964e811161006f578063e8964e8114610bae578063ef667aa114610bce578063f2fde38b14610c19578063f64be4c714610c3957600080fd5b8063ddc28c5814610b2e578063e1758bd814610b5b578063e4fe1d9414610b8e57600080fd5b8063d4b4ec8f116100d1578063d4b4ec8f14610a72578063d70b890214610a92578063dc706a6214610ab2578063dc93c8a214610ae257600080fd5b8063c9fc7bcd146109f6578063ca5eb5e114610a3d578063cb5026b914610a5d57600080fd5b8063a7229fd911610164578063aafea3121161013e578063aafea31214610976578063b96a277f14610996578063c28e0eed146109b6578063c9a54a99146109d657600080fd5b8063a7229fd914610916578063a825d74714610936578063aafe5e071461095657600080fd5b80639c6d7340116101a05780639c6d73401461086f5780639d7f9775146108b6578063a0dd43fc146108d6578063a718531b146108f657600080fd5b80639132e5c31461081a57806391d20fa11461083c5780639535ff301461084f57600080fd5b80635b17bb70116102a05780636f50a8031161023e57806379624ca91161021857806379624ca9146107a35780637cb59012146107bc578063861e1ca5146107dc5780638da5cb5b146107fc57600080fd5b80636f50a80314610724578063715018a61461075a578063733180911461076f57600080fd5b80636a14d7151161027a5780636a14d715146106655780636bf73fa3146106855780636dbd9f90146106a55780636e83f5bb146106c557600080fd5b80635b17bb70146105b65780636750cd4c14610615578063697fe6b61461064557600080fd5b80632baf0be71161030d578063402f8468116102e7578063402f8468146104c057806340f80683146104ff578063416ecebf1461051f578063587cde1e1461056857600080fd5b80632baf0be7146104355780632e80fbf31461045957806335d330b01461047957600080fd5b80630c0c389e1461035557806314f651a91461036a578063183c834f146103a85780632637a450146103c85780632a56c1b0146103e85780632b3197b914610408575b600080fd5b610368610363366004613f4c565b610c6f565b005b34801561037657600080fd5b5061037f610d6d565b6040805163ffffffff90931683526001600160a01b039091166020830152015b60405180910390f35b3480156103b457600080fd5b506103686103c3366004613ffb565b610d9f565b6103db6103d6366004614046565b611046565b60405161039f9190614098565b3480156103f457600080fd5b506103686104033660046140da565b61116d565b34801561041457600080fd5b50610428610423366004614149565b61120d565b60405161039f91906141ed565b34801561044157600080fd5b5061044b60001981565b60405190815260200161039f565b34801561046557600080fd5b50610368610474366004614217565b6112d8565b34801561048557600080fd5b5061044b61049436600461427e565b600c60209081526000948552604080862082529385528385208152918452828420909152825290205481565b3480156104cc57600080fd5b506104e06104db3660046142c0565b611447565b604080516001600160a01b03909316835290151560208301520161039f565b34801561050b57600080fd5b5061036861051a366004614217565b6114c5565b34801561052b57600080fd5b506105537f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff909116815260200161039f565b34801561057457600080fd5b5061059e6105833660046142ea565b600f602052600090815260409020546001600160a01b031681565b6040516001600160a01b03909116815260200161039f565b3480156105c257600080fd5b506105fd6105d1366004614305565b60016020908152600093845260408085208252928452828420905282529020546001600160401b031681565b6040516001600160401b03909116815260200161039f565b34801561062157600080fd5b50610635610630366004614341565b61162b565b604051901515815260200161039f565b34801561065157600080fd5b5061036861066036600461435c565b61167b565b34801561067157600080fd5b50610368610680366004613ffb565b6116f0565b34801561069157600080fd5b506103686106a0366004614457565b611ace565b3480156106b157600080fd5b506103686106c036600461453a565b611b38565b3480156106d157600080fd5b506107056106e0366004614341565b600b60205260009081526040902080546001909101546001600160a01b039091169082565b604080516001600160a01b03909316835260208301919091520161039f565b34801561073057600080fd5b5061059e61073f366004614341565b600a602052600090815260409020546001600160a01b031681565b34801561076657600080fd5b50610368611bda565b34801561077b57600080fd5b5061059e7f000000000000000000000000000000000000000000000000000000000000000081565b3480156107af57600080fd5b50600d5460011415610635565b3480156107c857600080fd5b506103686107d73660046145ca565b611bee565b3480156107e857600080fd5b506106356107f736600461461b565b611cda565b34801561080857600080fd5b506000546001600160a01b031661059e565b34801561082657600080fd5b5061082f611d46565b60405161039f9190614646565b61036861084a366004614693565b611da8565b34801561085b57600080fd5b5061036861086a36600461473d565b611f38565b34801561087b57600080fd5b506105fd61088a366004614305565b60036020908152600093845260408085208252928452828420905282529020546001600160401b031681565b3480156108c257600080fd5b506106356108d136600461473d565b61219c565b3480156108e257600080fd5b506105fd6108f1366004614305565b612276565b34801561090257600080fd5b50610368610911366004614780565b6122d6565b34801561092257600080fd5b506103686109313660046147ac565b6125f6565b34801561094257600080fd5b506103686109513660046147ca565b61260e565b34801561096257600080fd5b5061044b610971366004614305565b612759565b34801561098257600080fd5b50610368610991366004614807565b6127d9565b3480156109a257600080fd5b5061059e6109b13660046142c0565b612a02565b3480156109c257600080fd5b506103686109d13660046142ea565b612a71565b3480156109e257600080fd5b506106356109f136600461461b565b612ad7565b348015610a0257600080fd5b5061044b610a11366004614823565b600260209081526000948552604080862082529385528385208152918452828420909152825290205481565b348015610a4957600080fd5b50610368610a583660046142ea565b612b3c565b348015610a6957600080fd5b5061044b600081565b348015610a7e57600080fd5b50610368610a8d366004614780565b612ba3565b348015610a9e57600080fd5b50610368610aad366004614823565b612de1565b348015610abe57600080fd5b50610635610acd3660046142ea565b60056020526000908152604090205460ff1681565b348015610aee57600080fd5b50610635610afd3660046142c0565b6001600160a01b03918216600090815260066020908152604080832063ffffffff9490941683529290522054161590565b348015610b3a57600080fd5b50610b4e610b49366004614046565b612ed0565b60405161039f9190614865565b348015610b6757600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061059e565b348015610b9a57600080fd5b50600e5461059e906001600160a01b031681565b348015610bba57600080fd5b50610368610bc93660046142ea565b61313c565b348015610bda57600080fd5b50610705610be93660046142c0565b6008602090815260009283526040808420909152908252902080546001909101546001600160a01b039091169082565b348015610c2557600080fd5b50610368610c343660046142ea565b6132a0565b348015610c4557600080fd5b5061059e610c54366004614341565b6009602052600090815260409020546001600160a01b031681565b610cbe86610c8060208a018a614341565b60208a0135610c9560608c0160408d0161487c565b898989604051602001610caa93929190614897565b6040516020818303038152906040526132db565b506040516313137d6560e01b81526001600160a01b038716906313137d65903490610cf9908b908a908a908a9033908b908b90600401614913565b6000604051808303818588803b158015610d1257600080fd5b505af1158015610d26573d6000803e3d6000fd5b50505050507f3cd5e48f9730b129dc7550f0fcea9c767b7be37837cd10e55eb35f734f4bca048787604051610d5c92919061496a565b60405180910390a150505050505050565b600080610d7d600d546001141590565b610d8957600080610d97565b610d97600d5460a081901c91565b915091509091565b6001600160a01b038216600090815260056020526040902054829060ff16610dda57604051631bc58ef360e11b815260040160405180910390fd5b826001600160a01b03811615610e7d576000816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e4e91906149a6565b6002811115610e5f57610e5f614990565b03610e7d576040516342756b1b60e11b815260040160405180910390fd5b83856001600160a01b03821615610f19576040516319d4335360e21b815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015610ed8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610efc91906149d5565b610f1957604051630e476aa960e21b815260040160405180910390fd5b610f2288613496565b6000610f2e8989611447565b9150508015610f5057604051633c075f7560e01b815260040160405180910390fd5b85600003610f98576001600160a01b038916600090815260086020908152604080832063ffffffff8c168452909152812080546001600160a01b031916815560010155610ffe565b438611610fb8576040516302efcf9160e11b815260040160405180910390fd5b6001600160a01b03898116600090815260086020908152604080832063ffffffff8d168452909152902080546001600160a01b0319169189169190911781556001018690555b7f4e0a5bbfa0c11a64effb1ada324b5437a17272e1aed9320398715ef71bb209288989898960405161103394939291906149f2565b60405180910390a1505050505050505050565b61104e613e95565b61105b6020840184614341565b336001600d541461107f5760405163ee120b0960e01b815260040160405180910390fd5b63ffffffff60a01b60a083811b919091166001600160a01b03831617600d556110ad90860160808701614a22565b80156110c25750600e546001600160a01b0316155b156110e057604051632d7b695560e11b815260040160405180910390fd5b6000806110ed33886134e7565b9150915060006110fb613793565b9050600061111761111260a08b0160808c01614a22565b613823565b9050611128846040015183836138bf565b600e5460408501516020015161114a916001600160a01b03169083868c61390d565b60408401515161115c9083858b61393a565b50506001600d555095945050505050565b61117685613496565b600083838360405160200161118d93929190614897565b60408051601f1981840301815291905290506111cb866111b06020880188614341565b60208801356111c560608a0160408b0161487c565b856132db565b507f3cd5e48f9730b129dc7550f0fcea9c767b7be37837cd10e55eb35f734f4bca0485876040516111fd92919061496a565b60405180910390a1505050505050565b6001600160a01b038316600090815260056020526040902054606090849060ff1661124b57604051631bc58ef360e11b815260040160405180910390fd5b604051639c33abf760e01b815263ffffffff80861660048301526001600160a01b0388811660248401529085166044830152861690639c33abf790606401600060405180830381865afa1580156112a6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526112ce9190810190614ad2565b9695505050505050565b6112e185613496565b6001600160a01b038516600090815260026020908152604080832063ffffffff88168452825280832086845282528083206001600160401b038616845290915290205481811461135357604051637182306f60e01b815260048101829052602481018390526044015b60405180910390fd5b6001600160a01b038616600090815260016020908152604080832063ffffffff8916845282528083208784529091529020546001600160401b039081169084161180159061139f575080155b156113c857604051630c09b63560e41b81526001600160401b038416600482015260240161134a565b6001600160a01b038616600090815260026020908152604080832063ffffffff89168452825280832087845282528083206001600160401b0387168452909152908190206000199055517faf0450c392c4f702515a457a362328c8aa21916048ca6d0419e248b30cb55292906111fd90879087908a9088908890614b06565b6001600160a01b03808316600090815260076020908152604080832063ffffffff8616845290915281205490911690816114be5763ffffffff83166000908152600a60205260409020546001600160a01b03169150816114ba57604051633c74268360e11b815260040160405180910390fd5b5060015b9250929050565b6114ce85613496565b6001600160a01b038516600090815260026020908152604080832063ffffffff88168452825280832086845282528083206001600160401b038616845290915290205481811461153b57604051637182306f60e01b8152600481018290526024810183905260440161134a565b80158061158557506001600160a01b038616600090815260016020908152604080832063ffffffff8916845282528083208784529091529020546001600160401b03908116908416115b156115ae57604051630c09b63560e41b81526001600160401b038416600482015260240161134a565b6001600160a01b038616600090815260026020908152604080832063ffffffff89168452825280832087845282528083206001600160401b038716845290915280822091909155517f7f68a37a6e69a0de35024a234558f9efe4b33b58657753d21eaaa82d51c3510e906111fd90879087908a9088908890614b06565b63ffffffff81166000908152600960205260408120546001600160a01b031615801590611675575063ffffffff82166000908152600a60205260409020546001600160a01b031615155b92915050565b336001600160a01b03168b6001600160a01b03168d6001600160a01b03167f8a0b1dce321c5c5fb42349bce46d18087c04140de520917661fb923e44a904b98d8d8d8d8d8d8d8d8d8d6040516116da9a99989796959493929190614b43565b60405180910390a4505050505050505050505050565b6001600160a01b038216600090815260056020526040902054829060ff1615801561172357506001600160a01b03811615155b156117415760405163a4ff2ec360e01b815260040160405180910390fd5b826001600160a01b038116156117e4576000816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611791573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117b591906149a6565b60028111156117c6576117c6614990565b036117e4576040516342756b1b60e11b815260040160405180910390fd5b83856001600160a01b03821615611880576040516319d4335360e21b815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa15801561183f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186391906149d5565b61188057604051630e476aa960e21b815260040160405180910390fd5b61188988613496565b6001600160a01b03808916600090815260076020908152604080832063ffffffff8c168452909152902054811690871681036118d85760405163d0ecb66b60e01b815260040160405180910390fd5b6001600160a01b03898116600081815260076020908152604080832063ffffffff8e168085529083529281902080546001600160a01b031916958d1695861790558051938452908301919091528101919091527fcd6f92f5ac6185a5acfa02c92090746cec64d777269cbcd0ed031e396657a1c29060600160405180910390a18515611a52576001600160a01b038116158061197b57506001600160a01b038716155b1561199957604051633c075f7560e01b815260040160405180910390fd5b60006040518060400160405280836001600160a01b0316815260200188436119c19190614bc2565b90526001600160a01b038b8116600090815260086020908152604080832063ffffffff8f168452825291829020845181546001600160a01b03191694169390931783558301516001909201829055519192507f4e0a5bbfa0c11a64effb1ada324b5437a17272e1aed9320398715ef71bb2092891611a44918d918d9187916149f2565b60405180910390a150611ac3565b6001600160a01b038916600090815260086020908152604080832063ffffffff8c16845290915280822080546001600160a01b0319168155600101829055517f4e0a5bbfa0c11a64effb1ada324b5437a17272e1aed9320398715ef71bb2092891611033918c918c918691906149f2565b505050505050505050565b336001600160a01b03168a6001600160a01b03167f7edfa10fe10193301ad8a8bea7e968c7bcabcc64981f368e3aeada40ce26ae2c8d8c8c8c8c8c8c8c8c8c604051611b239a99989796959493929190614bd5565b60405180910390a35050505050505050505050565b6001600160a01b038316600090815260056020526040902054839060ff16611b7357604051631bc58ef360e11b815260040160405180910390fd5b611b7c85613496565b604051631077eb9160e11b81526001600160a01b038516906320efd72290611bac90889087908790600401614c34565b600060405180830381600087803b158015611bc657600080fd5b505af1158015611ac3573d6000803e3d6000fd5b611be261398c565b611bec60006139b9565b565b336000908152600c602090815260408083206001600160a01b03891684528252808320878452825280832061ffff8716845290915290205415611c4457604051630542086560e21b815260040160405180910390fd5b8181604051611c54929190614d27565b60408051918290038220336000818152600c60209081528482206001600160a01b038c16835281528482208a8352815284822061ffff8a168352905292909220557f3d52ff888d033fd3dd1d8057da59e850c91d91a72c41dfa445b247dfedeb6dc191611ccb919088908890889088908890614d37565b60405180910390a15050505050565b6001600160a01b03811660009081526001602090815260408220611d3f91859185918590611d0a90850185614341565b63ffffffff168152602080820192909252604090810160009081208984013582529092529020546001600160401b0316613a09565b9392505050565b60606004805480602002602001604051908101604052809291908181526020018280548015611d9e57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611d80575b5050505050905090565b6001600160a01b038089166000908152600c60209081526040808320938b168352928152828220898352815282822061ffff891683529052818120549151611df39087908790614d27565b60405180910390209050808214611e27576040516335ca595f60e01b8152600481018390526024810182905260440161134a565b6001600160a01b03808b166000908152600c60209081526040808320938d168084529382528083208c8452825280832061ffff8c168452909152908190206001905551630685081360e51b815263d0a10260903490611e96908e908d908c908c9033908d908d90600401614d81565b6000604051808303818588803b158015611eaf57600080fd5b505af1158015611ec3573d6000803e3d6000fd5b50505050507e36c98efcf9e6641dfbc9051f66f405253e8e0c2ab4a24dccda15595b7378c88a8a8a8a604051611f2494939291906001600160a01b039485168152929093166020830152604082015261ffff91909116606082015260800190565b60405180910390a150505050505050505050565b6001600160a01b038116600090815260056020526040902054819060ff16158015611f6b57506001600160a01b03811615155b15611f895760405163a4ff2ec360e01b815260040160405180910390fd5b816001600160a01b0381161561202c576001816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611fd9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ffd91906149a6565b600281111561200e5761200e614990565b0361202c57604051633d00f6f160e11b815260040160405180910390fd5b82846001600160a01b038216156120c8576040516319d4335360e21b815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015612087573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120ab91906149d5565b6120c857604051630e476aa960e21b815260040160405180910390fd5b6120d187613496565b6001600160a01b03878116600090815260066020908152604080832063ffffffff8b16845290915290205481871691160361211f5760405163d0ecb66b60e01b815260040160405180910390fd5b6001600160a01b03878116600081815260066020908152604080832063ffffffff8c168085529083529281902080546001600160a01b031916958b1695861790558051938452908301919091528101919091527f4cff966ebee29a156dcb34cf72c1d06231fb1777f6bdf6e8089819232f002b1c90606001610d5c565b60008060006121ab8686611447565b91509150816001600160a01b0316846001600160a01b0316036121d357600192505050611d3f565b600081612208576001600160a01b038716600090815260086020908152604080832063ffffffff8a168452909152902061221e565b63ffffffff86166000908152600b602052604090205b6040805180820190915281546001600160a01b03908116808352600190930154602083015290925086161480156122585750438160200151115b156122695760019350505050611d3f565b5060009695505050505050565b6001600160a01b038316600090815260016020908152604080832063ffffffff8616845282528083208484529091528120546001600160401b03165b6122c185858584600101613a8d565b156122ce576001016122b2565b949350505050565b6122de61398c565b6001600160a01b038216600090815260056020526040902054829060ff1661231957604051631bc58ef360e11b815260040160405180910390fd5b826001600160a01b038116156123bc576000816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612369573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061238d91906149a6565b600281111561239e5761239e614990565b036123bc576040516342756b1b60e11b815260040160405180910390fd5b83856001600160a01b03821615612458576040516319d4335360e21b815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015612417573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061243b91906149d5565b61245857604051630e476aa960e21b815260040160405180910390fd5b63ffffffff87166000908152600a60205260409020546001600160a01b03908116908716810361249b5760405163d0ecb66b60e01b815260040160405180910390fd5b63ffffffff88166000818152600a602090815260409182902080546001600160a01b0319166001600160a01b038c169081179091558251938452908301527fc16891855cffb4a5ac51ac11864a3f3c96ba816cc45fe686c987ae36277de5ec910160405180910390a185156125895763ffffffff88166000908152600b6020526040902080546001600160a01b0319166001600160a01b0383161781556125428743614bc2565b600182018190556040517f55b28633cdb29709386f555dfc54418592ad475ce7a65a78ac5928af60ffb8f89161257b918c918691614dd4565b60405180910390a1506125ec565b63ffffffff88166000908152600b602052604080822080546001600160a01b0319168155600101829055517f55b28633cdb29709386f555dfc54418592ad475ce7a65a78ac5928af60ffb8f8916125e3918b918591614dd4565b60405180910390a15b5050505050505050565b6125fe61398c565b612609838383613ada565b505050565b6126258261261f6020860186614341565b3361219c565b612642576040516313e9bb2b60e21b815260040160405180910390fd5b6001600160a01b0382166000908152600160209081526040822090829061266b90870187614341565b63ffffffff168152602080820192909252604090810160009081208784013582529092529020546001600160401b031690506126a8848483613a09565b6126c55760405163751cb20f60e01b815260040160405180910390fd5b6126d0848483613afd565b6126ec5760405162bbf0e560e11b815260040160405180910390fd5b612718836126fd6020870187614341565b60208701356127126060890160408a0161487c565b86613bba565b7f0d87345f3d1c929caba93e1c3821b54ff3512e12b66aa3cfe54b6bcbc17e59b484848460405161274b93929190614dfb565b60405180910390a150505050565b6001600160a01b038316600090815260036020908152604080832063ffffffff86168452825280832084845290915281205481906127a1906001600160401b03166001614e23565b90506127d0817f0000000000000000000000000000000000000000000000000000000000000000878787613c20565b95945050505050565b6127e161398c565b6001600160a01b038116600090815260056020526040902054819060ff1661281c57604051631bc58ef360e11b815260040160405180910390fd5b816001600160a01b038116156128bf576001816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561286c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061289091906149a6565b60028111156128a1576128a1614990565b036128bf57604051633d00f6f160e11b815260040160405180910390fd5b82846001600160a01b0382161561295b576040516319d4335360e21b815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa15801561291a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061293e91906149d5565b61295b57604051630e476aa960e21b815260040160405180910390fd5b63ffffffff86166000908152600960205260409020546001600160a01b0380871691160361299c5760405163d0ecb66b60e01b815260040160405180910390fd5b63ffffffff861660008181526009602090815260409182902080546001600160a01b0319166001600160a01b038a169081179091558251938452908301527f16aa0f528038ab41019e95bae5b418a50ba8532c5800e3b7ea2f517d3fa625f591016111fd565b6001600160a01b03808316600090815260066020908152604080832063ffffffff861684529091529020541680611675575063ffffffff81166000908152600960205260409020546001600160a01b03168061167557604051636c1ccdb560e01b815260040160405180910390fd5b612a7961398c565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b031603612acb576040516310647d0b60e01b815260040160405180910390fd5b612ad481613c99565b50565b6001600160a01b03811660009081526001602090815260408220611d3f91859185918590612b0790850185614341565b63ffffffff168152602080820192909252604090810160009081208984013582529092529020546001600160401b0316613afd565b336000818152600f602090815260409182902080546001600160a01b0319166001600160a01b0386169081179091558251938452908301527f6ee10e9ed4d6ce9742703a498707862f4b00f1396a87195eb93267b3d798398191015b60405180910390a150565b6001600160a01b038216600090815260056020526040902054829060ff16612bde57604051631bc58ef360e11b815260040160405180910390fd5b826001600160a01b03811615612c81576000816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c5291906149a6565b6002811115612c6357612c63614990565b03612c81576040516342756b1b60e11b815260040160405180910390fd5b83856001600160a01b03821615612d1d576040516319d4335360e21b815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015612cdc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d0091906149d5565b612d1d57604051630e476aa960e21b815260040160405180910390fd5b612d2561398c565b84600003612d595763ffffffff87166000908152600b6020526040812080546001600160a01b031916815560010155612dae565b438511612d79576040516302efcf9160e11b815260040160405180910390fd5b63ffffffff87166000908152600b6020526040902080546001600160a01b0319166001600160a01b0388161781556001018590555b7f55b28633cdb29709386f555dfc54418592ad475ce7a65a78ac5928af60ffb8f8878787604051610d5c93929190614dd4565b612dea84613496565b612df5848484612276565b612e00906001614e23565b6001600160401b0316816001600160401b031614612e3c57604051630c09b63560e41b81526001600160401b038216600482015260240161134a565b6001600160a01b038416600081815260016020908152604080832063ffffffff8816808552908352818420878552835292819020805467ffffffffffffffff19166001600160401b038716908117909155815193845291830186905282019290925260608101919091527f28f40053783033ef755556a0c3315379141f51a33aed8334174ffbadd90bde489060800161274b565b6040805180820190915260008082526020820152612ef460a0840160808501614a22565b8015612f095750600e546001600160a01b0316155b15612f2757604051632d7b695560e11b815260040160405180910390fd5b6001600160a01b03821660009081526003602090815260408220908290612f5090870187614341565b63ffffffff16815260208082019290925260409081016000908120878401358252909252902054612f8b906001600160401b03166001614e23565b905060006040518060e00160405280836001600160401b031681526020017f000000000000000000000000000000000000000000000000000000000000000063ffffffff168152602001856001600160a01b03168152602001866000016020810190612ff79190614341565b63ffffffff1681526020018660200135815260200161304f847f0000000000000000000000000000000000000000000000000000000000000000888a60000160208101906130459190614341565b8b60200135613c20565b81526020016130616040880188614e43565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525092935091506130ae9050856109b16020890189614341565b90506001600160a01b03811663d80e9bd9836130cd60608a018a614e43565b6130dd60a08c0160808d01614a22565b6040518563ffffffff1660e01b81526004016130fc9493929190614e89565b6040805180830381865afa158015613118573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ce9190614f7d565b61314461398c565b6040516301ffc9a760e01b81526325fc096160e21b60048201526001600160a01b038216906301ffc9a790602401602060405180830381865afa15801561318f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131b391906149d5565b6131d05760405163eb64f35d60e01b815260040160405180910390fd5b6001600160a01b03811660009081526005602052604090205460ff161561320a5760405163457517f360e11b815260040160405180910390fd5b6001600160a01b0381166000818152600560209081526040808320805460ff191660019081179091556004805491820181559093527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b90920180546001600160a01b0319168417905590519182527f6b374d56679ca9463f27c85c6311e2bb7fde69bf201d3da39d53f10bd9d78af59101612b98565b6132a861398c565b6001600160a01b0381166132d257604051631e4fbdf760e01b81526000600482015260240161134a565b612ad4816139b9565b6001600160a01b038516600090815260016020908152604080832063ffffffff8816845282528083208684529091528120546001600160401b039081169084168110156133c957600181015b846001600160401b0316816001600160401b03161161337c5761334c88888884613a8d565b61337457604051630c09b63560e41b81526001600160401b038216600482015260240161134a565b600101613327565b506001600160a01b038716600090815260016020908152604080832063ffffffff8a16845282528083208884529091529020805467ffffffffffffffff19166001600160401b0386161790555b82516020808501919091206001600160a01b038916600090815260028352604080822063ffffffff8b168352845280822089835284528082206001600160401b0389168352909352919091205490925080831461344357604051637182306f60e01b8152600481018290526024810184905260440161134a565b50506001600160a01b03909516600090815260026020908152604080832063ffffffff90971683529581528582209482529384528481206001600160401b03909316815291909252918220919091555090565b336001600160a01b038216148015906134c957506001600160a01b038181166000908152600f6020526040902054163314155b15612ad45760405163c4c5259360e01b815260040160405180910390fd5b6134ef613e95565b600080613560856135036020870187614341565b6001600160a01b0391909116600090815260036020908152604080832063ffffffff949094168352928152828220818901358352905220805467ffffffffffffffff19811660016001600160401b03928316019182161790915590565b905060006040518060e00160405280836001600160401b031681526020017f000000000000000000000000000000000000000000000000000000000000000063ffffffff168152602001876001600160a01b031681526020018660000160208101906135cc9190614341565b63ffffffff1681526020018660200135815260200161361a847f00000000000000000000000000000000000000000000000000000000000000008a8a60000160208101906130459190614341565b815260200161362c6040880188614e43565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525092935091506136799050876109b16020890189614341565b90506000806001600160a01b038316634389e58f8561369b60608c018c614e43565b6136ab60a08e0160808f01614a22565b6040518563ffffffff1660e01b81526004016136ca9493929190614e89565b6000604051808303816000875af11580156136e9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526137119190810190614f99565b90925090507f1ab700d4ced0c005b164c0f789fd09fcbb0156d4c2041b8a3bfbcd961cd1567f8161374560608b018b614e43565b866040516137569493929190614fe7565b60405180910390a1506040805160608101825260a09094015184526001600160401b03909416602084015292820192909252925090509250929050565b6040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa1580156137fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061381e9190615027565b905090565b600081156138ba57600e546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015613873573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138979190615027565b9050806000036138ba57604051631775123760e01b815260040160405180910390fd5b919050565b82518210806138d15750808360200151115b156126095782516020840151604051634f3ec0d360e01b815260048101929092526024820184905260448201526064810182905260840161134a565b831561391e5761391e858386613cef565b82841015613933576139338582868603613cef565b5050505050565b341561395957604051634d18bd2960e11b815260040160405180910390fd5b6139867f00000000000000000000000000000000000000000000000000000000000000008585858561390d565b50505050565b6000546001600160a01b03163314611bec5760405163118cdaa760e01b815233600482015260240161134a565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600080826001600160401b031611806122ce5750604051600162842fc360e01b031981526001600160a01b0384169063ff7bd03d90613a4c908790600401615040565b602060405180830381865afa158015613a69573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122ce91906149d5565b6001600160a01b038416600090815260026020908152604080832063ffffffff87168452825280832085845282528083206001600160401b03851684529091529020541515949350505050565b6001600160a01b038316613af2576126098282613d2a565b612609838383613cef565b60006001600160401b038216613b19606086016040870161487c565b6001600160401b031611806122ce57506001600160a01b03831660009081526002602090815260408220908290613b5290880188614341565b63ffffffff1663ffffffff1681526020019081526020016000206000866020013581526020019081526020016000206000866040016020810190613b96919061487c565b6001600160401b031681526020810191909152604001600020541415949350505050565b80613bd8576040516304df7fdb60e11b815260040160405180910390fd5b6001600160a01b03909416600090815260026020908152604080832063ffffffff90961683529481528482209382529283528381206001600160401b03909216815291522055565b600085856001600160a01b03861660405160c09390931b6001600160c01b031916602084015260e091821b6001600160e01b03199081166028850152602c8401919091529085901b16604c8201526050810183905260700160405160208183030381529060405280519060200120905095945050505050565b613ca161398c565b600e80546001600160a01b0319166001600160a01b0383169081179091556040519081527fd476ec5ec1ac11cec3714d41e7ea49419471aceb9bd0dff1becfc3e363a6239690602001612b98565b6001600160a01b038216613d16576040516306b7a93160e41b815260040160405180910390fd5b6126096001600160a01b0384168383613dd7565b6001600160a01b038216613d51576040516306b7a93160e41b815260040160405180910390fd5b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114613d9e576040519150601f19603f3d011682016040523d82523d6000602084013e613da3565b606091505b505090508061260957604051631196f20d60e21b81526001600160a01b03841660048201526024810183905260440161134a565b604080516001600160a01b03841660248201526044808201849052825180830390910181526064909101909152602080820180516001600160e01b031663a9059cbb60e01b1781528251612609938793909260009283929183919082885af180613e47576040513d6000823e3d81fd5b50506000513d91508115613e5f578060011415613e6c565b6001600160a01b0384163b155b1561398657604051635274afe760e01b81526001600160a01b038516600482015260240161134a565b60405180606001604052806000801916815260200160006001600160401b03168152602001613ed7604051806040016040528060008152602001600081525090565b905290565b600060608284031215613eee57600080fd5b50919050565b80356001600160a01b03811681146138ba57600080fd5b60008083601f840112613f1d57600080fd5b5081356001600160401b03811115613f3457600080fd5b6020830191508360208285010111156114be57600080fd5b600080600080600080600060e0888a031215613f6757600080fd5b613f718989613edc565b9650613f7f60608901613ef4565b95506080880135945060a08801356001600160401b0380821115613fa257600080fd5b613fae8b838c01613f0b565b909650945060c08a0135915080821115613fc757600080fd5b50613fd48a828b01613f0b565b989b979a50959850939692959293505050565b803563ffffffff811681146138ba57600080fd5b6000806000806080858703121561401157600080fd5b61401a85613ef4565b935061402860208601613fe7565b925061403660408601613ef4565b9396929550929360600135925050565b6000806040838503121561405957600080fd5b82356001600160401b0381111561406f57600080fd5b830160a0818603121561408157600080fd5b915061408f60208401613ef4565b90509250929050565b6000608082019050825182526001600160401b03602084015116602083015260408301516140d3604084018280518252602090810151910152565b5092915050565b600080600080600060c086880312156140f257600080fd5b6140fb86613ef4565b945061410a8760208801613edc565b93506080860135925060a08601356001600160401b0381111561412c57600080fd5b61413888828901613f0b565b969995985093965092949392505050565b6000806000806080858703121561415f57600080fd5b61416885613ef4565b935061417660208601613ef4565b925061418460408601613fe7565b915061419260608601613fe7565b905092959194509250565b60005b838110156141b85781810151838201526020016141a0565b50506000910152565b600081518084526141d981602086016020860161419d565b601f01601f19169290920160200192915050565b602081526000611d3f60208301846141c1565b80356001600160401b03811681146138ba57600080fd5b600080600080600060a0868803121561422f57600080fd5b61423886613ef4565b945061424660208701613fe7565b93506040860135925061425b60608701614200565b949793965091946080013592915050565b803561ffff811681146138ba57600080fd5b6000806000806080858703121561429457600080fd5b61429d85613ef4565b93506142ab60208601613ef4565b9250604085013591506141926060860161426c565b600080604083850312156142d357600080fd5b6142dc83613ef4565b915061408f60208401613fe7565b6000602082840312156142fc57600080fd5b611d3f82613ef4565b60008060006060848603121561431a57600080fd5b61432384613ef4565b925061433160208501613fe7565b9150604084013590509250925092565b60006020828403121561435357600080fd5b611d3f82613fe7565b6000806000806000806000806000806000806101208d8f03121561437f57600080fd5b6143888d613ef4565b9b5061439660208e01613ef4565b9a5060408d013599506143ab60608e0161426c565b985060808d0135975060a08d013596506001600160401b0360c08e013511156143d357600080fd5b6143e38e60c08f01358f01613f0b565b90965094506001600160401b0360e08e0135111561440057600080fd5b6144108e60e08f01358f01613f0b565b90945092506001600160401b036101008e0135111561442e57600080fd5b61443f8e6101008f01358f01613f0b565b81935080925050509295989b509295989b509295989b565b60008060008060008060008060008060006101408c8e03121561447957600080fd5b6144838d8d613edc565b9a5061449160608d01613ef4565b995060808c0135985060a08c0135975060c08c013596506001600160401b038060e08e013511156144c157600080fd5b6144d18e60e08f01358f01613f0b565b90975095506101008d01358110156144e857600080fd5b6144f98e6101008f01358f01613f0b565b90955093506101208d013581101561451057600080fd5b506145228d6101208e01358e01613f0b565b81935080925050509295989b509295989b9093969950565b6000806000806060858703121561455057600080fd5b61455985613ef4565b935061456760208601613ef4565b925060408501356001600160401b038082111561458357600080fd5b818701915087601f83011261459757600080fd5b8135818111156145a657600080fd5b8860208260051b85010111156145bb57600080fd5b95989497505060200194505050565b6000806000806000608086880312156145e257600080fd5b6145eb86613ef4565b9450602086013593506146006040870161426c565b925060608601356001600160401b0381111561412c57600080fd5b6000806080838503121561462e57600080fd5b6146388484613edc565b915061408f60608401613ef4565b6020808252825182820181905260009190848201906040850190845b818110156146875783516001600160a01b031683529284019291840191600101614662565b50909695505050505050565b60008060008060008060008060c0898b0312156146af57600080fd5b6146b889613ef4565b97506146c660208a01613ef4565b9650604089013595506146db60608a0161426c565b945060808901356001600160401b03808211156146f757600080fd5b6147038c838d01613f0b565b909650945060a08b013591508082111561471c57600080fd5b506147298b828c01613f0b565b999c989b5096995094979396929594505050565b60008060006060848603121561475257600080fd5b61475b84613ef4565b925061476960208501613fe7565b915061477760408501613ef4565b90509250925092565b60008060006060848603121561479557600080fd5b61479e84613fe7565b925061433160208501613ef4565b6000806000606084860312156147c157600080fd5b61479e84613ef4565b600080600060a084860312156147df57600080fd5b6147e98585613edc565b92506147f760608501613ef4565b9150608084013590509250925092565b6000806040838503121561481a57600080fd5b61408183613fe7565b6000806000806080858703121561483957600080fd5b61484285613ef4565b935061485060208601613fe7565b92506040850135915061419260608601614200565b815181526020808301519082015260408101611675565b60006020828403121561488e57600080fd5b611d3f82614200565b838152818360208301376000910160200190815292915050565b63ffffffff6148bf82613fe7565b168252602081013560208301526001600160401b036148e060408301614200565b1660408301525050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b61491d81896148b1565b86606082015260e06080820152600061493a60e0830187896148ea565b6001600160a01b03861660a084015282810360c084015261495c8185876148ea565b9a9950505050505050505050565b6080810161497882856148b1565b6001600160a01b039290921660609190910152919050565b634e487b7160e01b600052602160045260246000fd5b6000602082840312156149b857600080fd5b815160038110611d3f57600080fd5b8015158114612ad457600080fd5b6000602082840312156149e757600080fd5b8151611d3f816149c7565b6001600160a01b03948516815263ffffffff93909316602084015292166040820152606081019190915260800190565b600060208284031215614a3457600080fd5b8135611d3f816149c7565b634e487b7160e01b600052604160045260246000fd5b600082601f830112614a6657600080fd5b81516001600160401b0380821115614a8057614a80614a3f565b604051601f8301601f19908116603f01168101908282118183101715614aa857614aa8614a3f565b81604052838152866020858801011115614ac157600080fd5b6112ce84602083016020890161419d565b600060208284031215614ae457600080fd5b81516001600160401b03811115614afa57600080fd5b6122ce84828501614a55565b63ffffffff95909516855260208501939093526001600160a01b039190911660408401526001600160401b03166060830152608082015260a00190565b8a815261ffff8a16602082015288604082015287606082015260e060808201526000614b7360e08301888a6148ea565b82810360a0840152614b868187896148ea565b905082810360c0840152614b9b8185876148ea565b9d9c50505050505050505050505050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561167557611675614bac565b6000610120614be4838e6148b1565b8b60608401528a60808401528960a08401528060c0840152614c09818401898b6148ea565b905082810360e0840152614c1e8187896148ea565b9050828103610100840152614b9b8185876148ea565b6001600160a01b03841681526040602080830182905282820184905260009190606090818501600587901b8601830188865b89811015614d1757888303605f190184528135368c9003605e19018112614c8c57600080fd5b8b0163ffffffff80614c9d83613fe7565b16855280614cac888401613fe7565b16878601525087810135601e19823603018112614cc857600080fd5b0185810190356001600160401b03811115614ce257600080fd5b803603821315614cf157600080fd5b8789860152614d0388860182846148ea565b958701959450505090840190600101614c66565b50909a9950505050505050505050565b8183823760009101908152919050565b6001600160a01b038781168252861660208201526040810185905261ffff8416606082015260a060808201819052600090614d7590830184866148ea565b98975050505050505050565b600060018060a01b03808a16835288602084015260a06040840152614daa60a08401888a6148ea565b81871660608501528381036080850152614dc58186886148ea565b9b9a5050505050505050505050565b63ffffffff9390931683526001600160a01b03919091166020830152604082015260600190565b60a08101614e0982866148b1565b6001600160a01b0393909316606082015260800152919050565b6001600160401b038181168382160190808211156140d3576140d3614bac565b6000808335601e19843603018112614e5a57600080fd5b8301803591506001600160401b03821115614e7457600080fd5b6020019150368190038213156114be57600080fd5b606080825285516001600160401b031682820152602086015163ffffffff16608083015260408601516001600160a01b031660a0830152850151600090614ed860c084018263ffffffff169052565b50608086015160e083015260a086015161010083015260c086015160e0610120840152614f096101408401826141c1565b90508281036020840152614f1e8186886148ea565b9150506127d0604083018415159052565b600060408284031215614f4157600080fd5b604051604081018181106001600160401b0382111715614f6357614f63614a3f565b604052825181526020928301519281019290925250919050565b600060408284031215614f8f57600080fd5b611d3f8383614f2f565b60008060608385031215614fac57600080fd5b614fb68484614f2f565b915060408301516001600160401b03811115614fd157600080fd5b614fdd85828601614a55565b9150509250929050565b606081526000614ffa60608301876141c1565b828103602084015261500d8186886148ea565b91505060018060a01b038316604083015295945050505050565b60006020828403121561503957600080fd5b5051919050565b6060810161167582846148b156fea264697066735822122090f702bc055b3c8606fe084619d87bdcfb9298de28d91daac921e84b5c1160f264736f6c63430008160033608060405234801561001057600080fd5b506101c3806100206000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806301ffc9a7146100655780631881d94d1461008d57806354fd4d501461009c5780636750cd4c146100c3575b604051632657b6c360e01b815260040160405180910390fd5b61007861007336600461010e565b6100d7565b60405190151581526020015b60405180910390f35b6002604051610084919061013f565b6040805167ffffffffffffffff815260ff6020820152600291810191909152606001610084565b6100786100d1366004610167565b50600190565b60006001600160e01b031982166325fc096160e21b148061010857506301ffc9a760e01b6001600160e01b03198316145b92915050565b60006020828403121561012057600080fd5b81356001600160e01b03198116811461013857600080fd5b9392505050565b602081016003831061016157634e487b7160e01b600052602160045260246000fd5b91905290565b60006020828403121561017957600080fd5b813563ffffffff8116811461013857600080fdfea2646970667358221220b5a5c043a377444c26f6a8e7dd680ec55e20f7abeec109769ef20ff322bd379164736f6c63430008160033", - "sourceMap": "279:1560:74:-:0;;;527:1:30;534:42;;562:129:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;637:4;643:6;637:4;643:6;-1:-1:-1;;;;;1273:26:107;;1269:95;;1322:31;;-1:-1:-1;;;1322:31:107;;1350:1;1322:31;;;797:51:132;770:18;;1322:31:107;;;;;;;;1269:95;1373:32;1392:12;1373:18;:32::i;:::-;-1:-1:-1;1064:10:28;;;;1634:23:27;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;1609:49:27;;;;;1668:31;;:15;:31::i;:::-;-1:-1:-1;;;;;;;661:23:74::1;;::::0;-1:-1:-1;279:1560:74;;-1:-1:-1;279:1560:74;2912:187:107;2985:16;3004:6;;-1:-1:-1;;;;;3020:17:107;;;-1:-1:-1;;;;;;3020:17:107;;;;;;3052:40;;3004:6;;;;;;;3052:40;;2985:16;3052:40;2975:124;2912:187;:::o;6264:511:27:-;1531:13:107;:11;:13::i;:::-;6376:62:27::1;::::0;-1:-1:-1;;;6376:62:27;;-1:-1:-1;;;6376:62:27::1;::::0;::::1;1003:52:132::0;-1:-1:-1;;;;;6376:31:27;::::1;::::0;::::1;::::0;976:18:132;;6376:62:27::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6371:108;;6447:32;;-1:-1:-1::0;;;6447:32:27::1;;;;;;;;;;;6371:108;-1:-1:-1::0;;;;;6534:25:27;::::1;;::::0;;;:19:::1;:25;::::0;;;;;::::1;;6530:67;;;6568:29;;-1:-1:-1::0;;;6568:29:27::1;;;;;;;;;;;6530:67;-1:-1:-1::0;;;;;6657:25:27;::::1;;::::0;;;:19:::1;:25;::::0;;;;;;;:32;;-1:-1:-1;;6657:32:27::1;6685:4;6657:32:::0;;::::1;::::0;;;6699:19:::1;:30:::0;;;;::::1;::::0;;;;;;;;::::1;::::0;;-1:-1:-1;;;;;;6699:30:27::1;::::0;::::1;::::0;;6745:23;;797:51:132;;;6745:23:27::1;::::0;770:18:132;6745:23:27::1;;;;;;;6264:511:::0;:::o;1796:162:107:-;1684:7;1710:6;-1:-1:-1;;;;;1710:6:107;735:10:117;1855:23:107;1851:101;;1901:40;;-1:-1:-1;;;1901:40:107;;735:10:117;1901:40:107;;;797:51:132;770:18;;1901:40:107;651:203:132;1851:101:107;1796:162::o;279:1560:74:-;;;;;;;;:::o;14:177:132:-;93:13;;-1:-1:-1;;;;;135:31:132;;125:42;;115:70;;181:1;178;171:12;115:70;14:177;;;:::o;196:450::-;283:6;291;299;352:2;340:9;331:7;327:23;323:32;320:52;;;368:1;365;358:12;320:52;400:9;394:16;450:10;443:5;439:22;432:5;429:33;419:61;;476:1;473;466:12;419:61;499:5;-1:-1:-1;523:49:132;568:2;553:18;;523:49;:::i;:::-;513:59;;591:49;636:2;625:9;621:18;591:49;:::i;:::-;581:59;;196:450;;;;;:::o;1066:277::-;1133:6;1186:2;1174:9;1165:7;1161:23;1157:32;1154:52;;;1202:1;1199;1192:12;1154:52;1234:9;1228:16;1287:5;1280:13;1273:21;1266:5;1263:32;1253:60;;1309:1;1306;1299:12;1253:60;1332:5;1066:277;-1:-1:-1;;;1066:277:132:o;:::-;279:1560:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", - "linkReferences": {} - }, - "deployedBytecode": { - "object": "0x6080604052600436106103505760003560e01c80639132e5c3116101c6578063c9fc7bcd116100f7578063ddc28c5811610095578063e8964e811161006f578063e8964e8114610bae578063ef667aa114610bce578063f2fde38b14610c19578063f64be4c714610c3957600080fd5b8063ddc28c5814610b2e578063e1758bd814610b5b578063e4fe1d9414610b8e57600080fd5b8063d4b4ec8f116100d1578063d4b4ec8f14610a72578063d70b890214610a92578063dc706a6214610ab2578063dc93c8a214610ae257600080fd5b8063c9fc7bcd146109f6578063ca5eb5e114610a3d578063cb5026b914610a5d57600080fd5b8063a7229fd911610164578063aafea3121161013e578063aafea31214610976578063b96a277f14610996578063c28e0eed146109b6578063c9a54a99146109d657600080fd5b8063a7229fd914610916578063a825d74714610936578063aafe5e071461095657600080fd5b80639c6d7340116101a05780639c6d73401461086f5780639d7f9775146108b6578063a0dd43fc146108d6578063a718531b146108f657600080fd5b80639132e5c31461081a57806391d20fa11461083c5780639535ff301461084f57600080fd5b80635b17bb70116102a05780636f50a8031161023e57806379624ca91161021857806379624ca9146107a35780637cb59012146107bc578063861e1ca5146107dc5780638da5cb5b146107fc57600080fd5b80636f50a80314610724578063715018a61461075a578063733180911461076f57600080fd5b80636a14d7151161027a5780636a14d715146106655780636bf73fa3146106855780636dbd9f90146106a55780636e83f5bb146106c557600080fd5b80635b17bb70146105b65780636750cd4c14610615578063697fe6b61461064557600080fd5b80632baf0be71161030d578063402f8468116102e7578063402f8468146104c057806340f80683146104ff578063416ecebf1461051f578063587cde1e1461056857600080fd5b80632baf0be7146104355780632e80fbf31461045957806335d330b01461047957600080fd5b80630c0c389e1461035557806314f651a91461036a578063183c834f146103a85780632637a450146103c85780632a56c1b0146103e85780632b3197b914610408575b600080fd5b610368610363366004613f4c565b610c6f565b005b34801561037657600080fd5b5061037f610d6d565b6040805163ffffffff90931683526001600160a01b039091166020830152015b60405180910390f35b3480156103b457600080fd5b506103686103c3366004613ffb565b610d9f565b6103db6103d6366004614046565b611046565b60405161039f9190614098565b3480156103f457600080fd5b506103686104033660046140da565b61116d565b34801561041457600080fd5b50610428610423366004614149565b61120d565b60405161039f91906141ed565b34801561044157600080fd5b5061044b60001981565b60405190815260200161039f565b34801561046557600080fd5b50610368610474366004614217565b6112d8565b34801561048557600080fd5b5061044b61049436600461427e565b600c60209081526000948552604080862082529385528385208152918452828420909152825290205481565b3480156104cc57600080fd5b506104e06104db3660046142c0565b611447565b604080516001600160a01b03909316835290151560208301520161039f565b34801561050b57600080fd5b5061036861051a366004614217565b6114c5565b34801561052b57600080fd5b506105537f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff909116815260200161039f565b34801561057457600080fd5b5061059e6105833660046142ea565b600f602052600090815260409020546001600160a01b031681565b6040516001600160a01b03909116815260200161039f565b3480156105c257600080fd5b506105fd6105d1366004614305565b60016020908152600093845260408085208252928452828420905282529020546001600160401b031681565b6040516001600160401b03909116815260200161039f565b34801561062157600080fd5b50610635610630366004614341565b61162b565b604051901515815260200161039f565b34801561065157600080fd5b5061036861066036600461435c565b61167b565b34801561067157600080fd5b50610368610680366004613ffb565b6116f0565b34801561069157600080fd5b506103686106a0366004614457565b611ace565b3480156106b157600080fd5b506103686106c036600461453a565b611b38565b3480156106d157600080fd5b506107056106e0366004614341565b600b60205260009081526040902080546001909101546001600160a01b039091169082565b604080516001600160a01b03909316835260208301919091520161039f565b34801561073057600080fd5b5061059e61073f366004614341565b600a602052600090815260409020546001600160a01b031681565b34801561076657600080fd5b50610368611bda565b34801561077b57600080fd5b5061059e7f000000000000000000000000000000000000000000000000000000000000000081565b3480156107af57600080fd5b50600d5460011415610635565b3480156107c857600080fd5b506103686107d73660046145ca565b611bee565b3480156107e857600080fd5b506106356107f736600461461b565b611cda565b34801561080857600080fd5b506000546001600160a01b031661059e565b34801561082657600080fd5b5061082f611d46565b60405161039f9190614646565b61036861084a366004614693565b611da8565b34801561085b57600080fd5b5061036861086a36600461473d565b611f38565b34801561087b57600080fd5b506105fd61088a366004614305565b60036020908152600093845260408085208252928452828420905282529020546001600160401b031681565b3480156108c257600080fd5b506106356108d136600461473d565b61219c565b3480156108e257600080fd5b506105fd6108f1366004614305565b612276565b34801561090257600080fd5b50610368610911366004614780565b6122d6565b34801561092257600080fd5b506103686109313660046147ac565b6125f6565b34801561094257600080fd5b506103686109513660046147ca565b61260e565b34801561096257600080fd5b5061044b610971366004614305565b612759565b34801561098257600080fd5b50610368610991366004614807565b6127d9565b3480156109a257600080fd5b5061059e6109b13660046142c0565b612a02565b3480156109c257600080fd5b506103686109d13660046142ea565b612a71565b3480156109e257600080fd5b506106356109f136600461461b565b612ad7565b348015610a0257600080fd5b5061044b610a11366004614823565b600260209081526000948552604080862082529385528385208152918452828420909152825290205481565b348015610a4957600080fd5b50610368610a583660046142ea565b612b3c565b348015610a6957600080fd5b5061044b600081565b348015610a7e57600080fd5b50610368610a8d366004614780565b612ba3565b348015610a9e57600080fd5b50610368610aad366004614823565b612de1565b348015610abe57600080fd5b50610635610acd3660046142ea565b60056020526000908152604090205460ff1681565b348015610aee57600080fd5b50610635610afd3660046142c0565b6001600160a01b03918216600090815260066020908152604080832063ffffffff9490941683529290522054161590565b348015610b3a57600080fd5b50610b4e610b49366004614046565b612ed0565b60405161039f9190614865565b348015610b6757600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061059e565b348015610b9a57600080fd5b50600e5461059e906001600160a01b031681565b348015610bba57600080fd5b50610368610bc93660046142ea565b61313c565b348015610bda57600080fd5b50610705610be93660046142c0565b6008602090815260009283526040808420909152908252902080546001909101546001600160a01b039091169082565b348015610c2557600080fd5b50610368610c343660046142ea565b6132a0565b348015610c4557600080fd5b5061059e610c54366004614341565b6009602052600090815260409020546001600160a01b031681565b610cbe86610c8060208a018a614341565b60208a0135610c9560608c0160408d0161487c565b898989604051602001610caa93929190614897565b6040516020818303038152906040526132db565b506040516313137d6560e01b81526001600160a01b038716906313137d65903490610cf9908b908a908a908a9033908b908b90600401614913565b6000604051808303818588803b158015610d1257600080fd5b505af1158015610d26573d6000803e3d6000fd5b50505050507f3cd5e48f9730b129dc7550f0fcea9c767b7be37837cd10e55eb35f734f4bca048787604051610d5c92919061496a565b60405180910390a150505050505050565b600080610d7d600d546001141590565b610d8957600080610d97565b610d97600d5460a081901c91565b915091509091565b6001600160a01b038216600090815260056020526040902054829060ff16610dda57604051631bc58ef360e11b815260040160405180910390fd5b826001600160a01b03811615610e7d576000816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e4e91906149a6565b6002811115610e5f57610e5f614990565b03610e7d576040516342756b1b60e11b815260040160405180910390fd5b83856001600160a01b03821615610f19576040516319d4335360e21b815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015610ed8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610efc91906149d5565b610f1957604051630e476aa960e21b815260040160405180910390fd5b610f2288613496565b6000610f2e8989611447565b9150508015610f5057604051633c075f7560e01b815260040160405180910390fd5b85600003610f98576001600160a01b038916600090815260086020908152604080832063ffffffff8c168452909152812080546001600160a01b031916815560010155610ffe565b438611610fb8576040516302efcf9160e11b815260040160405180910390fd5b6001600160a01b03898116600090815260086020908152604080832063ffffffff8d168452909152902080546001600160a01b0319169189169190911781556001018690555b7f4e0a5bbfa0c11a64effb1ada324b5437a17272e1aed9320398715ef71bb209288989898960405161103394939291906149f2565b60405180910390a1505050505050505050565b61104e613e95565b61105b6020840184614341565b336001600d541461107f5760405163ee120b0960e01b815260040160405180910390fd5b63ffffffff60a01b60a083811b919091166001600160a01b03831617600d556110ad90860160808701614a22565b80156110c25750600e546001600160a01b0316155b156110e057604051632d7b695560e11b815260040160405180910390fd5b6000806110ed33886134e7565b9150915060006110fb613793565b9050600061111761111260a08b0160808c01614a22565b613823565b9050611128846040015183836138bf565b600e5460408501516020015161114a916001600160a01b03169083868c61390d565b60408401515161115c9083858b61393a565b50506001600d555095945050505050565b61117685613496565b600083838360405160200161118d93929190614897565b60408051601f1981840301815291905290506111cb866111b06020880188614341565b60208801356111c560608a0160408b0161487c565b856132db565b507f3cd5e48f9730b129dc7550f0fcea9c767b7be37837cd10e55eb35f734f4bca0485876040516111fd92919061496a565b60405180910390a1505050505050565b6001600160a01b038316600090815260056020526040902054606090849060ff1661124b57604051631bc58ef360e11b815260040160405180910390fd5b604051639c33abf760e01b815263ffffffff80861660048301526001600160a01b0388811660248401529085166044830152861690639c33abf790606401600060405180830381865afa1580156112a6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526112ce9190810190614ad2565b9695505050505050565b6112e185613496565b6001600160a01b038516600090815260026020908152604080832063ffffffff88168452825280832086845282528083206001600160401b038616845290915290205481811461135357604051637182306f60e01b815260048101829052602481018390526044015b60405180910390fd5b6001600160a01b038616600090815260016020908152604080832063ffffffff8916845282528083208784529091529020546001600160401b039081169084161180159061139f575080155b156113c857604051630c09b63560e41b81526001600160401b038416600482015260240161134a565b6001600160a01b038616600090815260026020908152604080832063ffffffff89168452825280832087845282528083206001600160401b0387168452909152908190206000199055517faf0450c392c4f702515a457a362328c8aa21916048ca6d0419e248b30cb55292906111fd90879087908a9088908890614b06565b6001600160a01b03808316600090815260076020908152604080832063ffffffff8616845290915281205490911690816114be5763ffffffff83166000908152600a60205260409020546001600160a01b03169150816114ba57604051633c74268360e11b815260040160405180910390fd5b5060015b9250929050565b6114ce85613496565b6001600160a01b038516600090815260026020908152604080832063ffffffff88168452825280832086845282528083206001600160401b038616845290915290205481811461153b57604051637182306f60e01b8152600481018290526024810183905260440161134a565b80158061158557506001600160a01b038616600090815260016020908152604080832063ffffffff8916845282528083208784529091529020546001600160401b03908116908416115b156115ae57604051630c09b63560e41b81526001600160401b038416600482015260240161134a565b6001600160a01b038616600090815260026020908152604080832063ffffffff89168452825280832087845282528083206001600160401b038716845290915280822091909155517f7f68a37a6e69a0de35024a234558f9efe4b33b58657753d21eaaa82d51c3510e906111fd90879087908a9088908890614b06565b63ffffffff81166000908152600960205260408120546001600160a01b031615801590611675575063ffffffff82166000908152600a60205260409020546001600160a01b031615155b92915050565b336001600160a01b03168b6001600160a01b03168d6001600160a01b03167f8a0b1dce321c5c5fb42349bce46d18087c04140de520917661fb923e44a904b98d8d8d8d8d8d8d8d8d8d6040516116da9a99989796959493929190614b43565b60405180910390a4505050505050505050505050565b6001600160a01b038216600090815260056020526040902054829060ff1615801561172357506001600160a01b03811615155b156117415760405163a4ff2ec360e01b815260040160405180910390fd5b826001600160a01b038116156117e4576000816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611791573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117b591906149a6565b60028111156117c6576117c6614990565b036117e4576040516342756b1b60e11b815260040160405180910390fd5b83856001600160a01b03821615611880576040516319d4335360e21b815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa15801561183f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186391906149d5565b61188057604051630e476aa960e21b815260040160405180910390fd5b61188988613496565b6001600160a01b03808916600090815260076020908152604080832063ffffffff8c168452909152902054811690871681036118d85760405163d0ecb66b60e01b815260040160405180910390fd5b6001600160a01b03898116600081815260076020908152604080832063ffffffff8e168085529083529281902080546001600160a01b031916958d1695861790558051938452908301919091528101919091527fcd6f92f5ac6185a5acfa02c92090746cec64d777269cbcd0ed031e396657a1c29060600160405180910390a18515611a52576001600160a01b038116158061197b57506001600160a01b038716155b1561199957604051633c075f7560e01b815260040160405180910390fd5b60006040518060400160405280836001600160a01b0316815260200188436119c19190614bc2565b90526001600160a01b038b8116600090815260086020908152604080832063ffffffff8f168452825291829020845181546001600160a01b03191694169390931783558301516001909201829055519192507f4e0a5bbfa0c11a64effb1ada324b5437a17272e1aed9320398715ef71bb2092891611a44918d918d9187916149f2565b60405180910390a150611ac3565b6001600160a01b038916600090815260086020908152604080832063ffffffff8c16845290915280822080546001600160a01b0319168155600101829055517f4e0a5bbfa0c11a64effb1ada324b5437a17272e1aed9320398715ef71bb2092891611033918c918c918691906149f2565b505050505050505050565b336001600160a01b03168a6001600160a01b03167f7edfa10fe10193301ad8a8bea7e968c7bcabcc64981f368e3aeada40ce26ae2c8d8c8c8c8c8c8c8c8c8c604051611b239a99989796959493929190614bd5565b60405180910390a35050505050505050505050565b6001600160a01b038316600090815260056020526040902054839060ff16611b7357604051631bc58ef360e11b815260040160405180910390fd5b611b7c85613496565b604051631077eb9160e11b81526001600160a01b038516906320efd72290611bac90889087908790600401614c34565b600060405180830381600087803b158015611bc657600080fd5b505af1158015611ac3573d6000803e3d6000fd5b611be261398c565b611bec60006139b9565b565b336000908152600c602090815260408083206001600160a01b03891684528252808320878452825280832061ffff8716845290915290205415611c4457604051630542086560e21b815260040160405180910390fd5b8181604051611c54929190614d27565b60408051918290038220336000818152600c60209081528482206001600160a01b038c16835281528482208a8352815284822061ffff8a168352905292909220557f3d52ff888d033fd3dd1d8057da59e850c91d91a72c41dfa445b247dfedeb6dc191611ccb919088908890889088908890614d37565b60405180910390a15050505050565b6001600160a01b03811660009081526001602090815260408220611d3f91859185918590611d0a90850185614341565b63ffffffff168152602080820192909252604090810160009081208984013582529092529020546001600160401b0316613a09565b9392505050565b60606004805480602002602001604051908101604052809291908181526020018280548015611d9e57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611d80575b5050505050905090565b6001600160a01b038089166000908152600c60209081526040808320938b168352928152828220898352815282822061ffff891683529052818120549151611df39087908790614d27565b60405180910390209050808214611e27576040516335ca595f60e01b8152600481018390526024810182905260440161134a565b6001600160a01b03808b166000908152600c60209081526040808320938d168084529382528083208c8452825280832061ffff8c168452909152908190206001905551630685081360e51b815263d0a10260903490611e96908e908d908c908c9033908d908d90600401614d81565b6000604051808303818588803b158015611eaf57600080fd5b505af1158015611ec3573d6000803e3d6000fd5b50505050507e36c98efcf9e6641dfbc9051f66f405253e8e0c2ab4a24dccda15595b7378c88a8a8a8a604051611f2494939291906001600160a01b039485168152929093166020830152604082015261ffff91909116606082015260800190565b60405180910390a150505050505050505050565b6001600160a01b038116600090815260056020526040902054819060ff16158015611f6b57506001600160a01b03811615155b15611f895760405163a4ff2ec360e01b815260040160405180910390fd5b816001600160a01b0381161561202c576001816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611fd9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ffd91906149a6565b600281111561200e5761200e614990565b0361202c57604051633d00f6f160e11b815260040160405180910390fd5b82846001600160a01b038216156120c8576040516319d4335360e21b815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015612087573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120ab91906149d5565b6120c857604051630e476aa960e21b815260040160405180910390fd5b6120d187613496565b6001600160a01b03878116600090815260066020908152604080832063ffffffff8b16845290915290205481871691160361211f5760405163d0ecb66b60e01b815260040160405180910390fd5b6001600160a01b03878116600081815260066020908152604080832063ffffffff8c168085529083529281902080546001600160a01b031916958b1695861790558051938452908301919091528101919091527f4cff966ebee29a156dcb34cf72c1d06231fb1777f6bdf6e8089819232f002b1c90606001610d5c565b60008060006121ab8686611447565b91509150816001600160a01b0316846001600160a01b0316036121d357600192505050611d3f565b600081612208576001600160a01b038716600090815260086020908152604080832063ffffffff8a168452909152902061221e565b63ffffffff86166000908152600b602052604090205b6040805180820190915281546001600160a01b03908116808352600190930154602083015290925086161480156122585750438160200151115b156122695760019350505050611d3f565b5060009695505050505050565b6001600160a01b038316600090815260016020908152604080832063ffffffff8616845282528083208484529091528120546001600160401b03165b6122c185858584600101613a8d565b156122ce576001016122b2565b949350505050565b6122de61398c565b6001600160a01b038216600090815260056020526040902054829060ff1661231957604051631bc58ef360e11b815260040160405180910390fd5b826001600160a01b038116156123bc576000816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612369573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061238d91906149a6565b600281111561239e5761239e614990565b036123bc576040516342756b1b60e11b815260040160405180910390fd5b83856001600160a01b03821615612458576040516319d4335360e21b815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015612417573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061243b91906149d5565b61245857604051630e476aa960e21b815260040160405180910390fd5b63ffffffff87166000908152600a60205260409020546001600160a01b03908116908716810361249b5760405163d0ecb66b60e01b815260040160405180910390fd5b63ffffffff88166000818152600a602090815260409182902080546001600160a01b0319166001600160a01b038c169081179091558251938452908301527fc16891855cffb4a5ac51ac11864a3f3c96ba816cc45fe686c987ae36277de5ec910160405180910390a185156125895763ffffffff88166000908152600b6020526040902080546001600160a01b0319166001600160a01b0383161781556125428743614bc2565b600182018190556040517f55b28633cdb29709386f555dfc54418592ad475ce7a65a78ac5928af60ffb8f89161257b918c918691614dd4565b60405180910390a1506125ec565b63ffffffff88166000908152600b602052604080822080546001600160a01b0319168155600101829055517f55b28633cdb29709386f555dfc54418592ad475ce7a65a78ac5928af60ffb8f8916125e3918b918591614dd4565b60405180910390a15b5050505050505050565b6125fe61398c565b612609838383613ada565b505050565b6126258261261f6020860186614341565b3361219c565b612642576040516313e9bb2b60e21b815260040160405180910390fd5b6001600160a01b0382166000908152600160209081526040822090829061266b90870187614341565b63ffffffff168152602080820192909252604090810160009081208784013582529092529020546001600160401b031690506126a8848483613a09565b6126c55760405163751cb20f60e01b815260040160405180910390fd5b6126d0848483613afd565b6126ec5760405162bbf0e560e11b815260040160405180910390fd5b612718836126fd6020870187614341565b60208701356127126060890160408a0161487c565b86613bba565b7f0d87345f3d1c929caba93e1c3821b54ff3512e12b66aa3cfe54b6bcbc17e59b484848460405161274b93929190614dfb565b60405180910390a150505050565b6001600160a01b038316600090815260036020908152604080832063ffffffff86168452825280832084845290915281205481906127a1906001600160401b03166001614e23565b90506127d0817f0000000000000000000000000000000000000000000000000000000000000000878787613c20565b95945050505050565b6127e161398c565b6001600160a01b038116600090815260056020526040902054819060ff1661281c57604051631bc58ef360e11b815260040160405180910390fd5b816001600160a01b038116156128bf576001816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561286c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061289091906149a6565b60028111156128a1576128a1614990565b036128bf57604051633d00f6f160e11b815260040160405180910390fd5b82846001600160a01b0382161561295b576040516319d4335360e21b815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa15801561291a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061293e91906149d5565b61295b57604051630e476aa960e21b815260040160405180910390fd5b63ffffffff86166000908152600960205260409020546001600160a01b0380871691160361299c5760405163d0ecb66b60e01b815260040160405180910390fd5b63ffffffff861660008181526009602090815260409182902080546001600160a01b0319166001600160a01b038a169081179091558251938452908301527f16aa0f528038ab41019e95bae5b418a50ba8532c5800e3b7ea2f517d3fa625f591016111fd565b6001600160a01b03808316600090815260066020908152604080832063ffffffff861684529091529020541680611675575063ffffffff81166000908152600960205260409020546001600160a01b03168061167557604051636c1ccdb560e01b815260040160405180910390fd5b612a7961398c565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b031603612acb576040516310647d0b60e01b815260040160405180910390fd5b612ad481613c99565b50565b6001600160a01b03811660009081526001602090815260408220611d3f91859185918590612b0790850185614341565b63ffffffff168152602080820192909252604090810160009081208984013582529092529020546001600160401b0316613afd565b336000818152600f602090815260409182902080546001600160a01b0319166001600160a01b0386169081179091558251938452908301527f6ee10e9ed4d6ce9742703a498707862f4b00f1396a87195eb93267b3d798398191015b60405180910390a150565b6001600160a01b038216600090815260056020526040902054829060ff16612bde57604051631bc58ef360e11b815260040160405180910390fd5b826001600160a01b03811615612c81576000816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c5291906149a6565b6002811115612c6357612c63614990565b03612c81576040516342756b1b60e11b815260040160405180910390fd5b83856001600160a01b03821615612d1d576040516319d4335360e21b815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015612cdc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d0091906149d5565b612d1d57604051630e476aa960e21b815260040160405180910390fd5b612d2561398c565b84600003612d595763ffffffff87166000908152600b6020526040812080546001600160a01b031916815560010155612dae565b438511612d79576040516302efcf9160e11b815260040160405180910390fd5b63ffffffff87166000908152600b6020526040902080546001600160a01b0319166001600160a01b0388161781556001018590555b7f55b28633cdb29709386f555dfc54418592ad475ce7a65a78ac5928af60ffb8f8878787604051610d5c93929190614dd4565b612dea84613496565b612df5848484612276565b612e00906001614e23565b6001600160401b0316816001600160401b031614612e3c57604051630c09b63560e41b81526001600160401b038216600482015260240161134a565b6001600160a01b038416600081815260016020908152604080832063ffffffff8816808552908352818420878552835292819020805467ffffffffffffffff19166001600160401b038716908117909155815193845291830186905282019290925260608101919091527f28f40053783033ef755556a0c3315379141f51a33aed8334174ffbadd90bde489060800161274b565b6040805180820190915260008082526020820152612ef460a0840160808501614a22565b8015612f095750600e546001600160a01b0316155b15612f2757604051632d7b695560e11b815260040160405180910390fd5b6001600160a01b03821660009081526003602090815260408220908290612f5090870187614341565b63ffffffff16815260208082019290925260409081016000908120878401358252909252902054612f8b906001600160401b03166001614e23565b905060006040518060e00160405280836001600160401b031681526020017f000000000000000000000000000000000000000000000000000000000000000063ffffffff168152602001856001600160a01b03168152602001866000016020810190612ff79190614341565b63ffffffff1681526020018660200135815260200161304f847f0000000000000000000000000000000000000000000000000000000000000000888a60000160208101906130459190614341565b8b60200135613c20565b81526020016130616040880188614e43565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525092935091506130ae9050856109b16020890189614341565b90506001600160a01b03811663d80e9bd9836130cd60608a018a614e43565b6130dd60a08c0160808d01614a22565b6040518563ffffffff1660e01b81526004016130fc9493929190614e89565b6040805180830381865afa158015613118573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ce9190614f7d565b61314461398c565b6040516301ffc9a760e01b81526325fc096160e21b60048201526001600160a01b038216906301ffc9a790602401602060405180830381865afa15801561318f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131b391906149d5565b6131d05760405163eb64f35d60e01b815260040160405180910390fd5b6001600160a01b03811660009081526005602052604090205460ff161561320a5760405163457517f360e11b815260040160405180910390fd5b6001600160a01b0381166000818152600560209081526040808320805460ff191660019081179091556004805491820181559093527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b90920180546001600160a01b0319168417905590519182527f6b374d56679ca9463f27c85c6311e2bb7fde69bf201d3da39d53f10bd9d78af59101612b98565b6132a861398c565b6001600160a01b0381166132d257604051631e4fbdf760e01b81526000600482015260240161134a565b612ad4816139b9565b6001600160a01b038516600090815260016020908152604080832063ffffffff8816845282528083208684529091528120546001600160401b039081169084168110156133c957600181015b846001600160401b0316816001600160401b03161161337c5761334c88888884613a8d565b61337457604051630c09b63560e41b81526001600160401b038216600482015260240161134a565b600101613327565b506001600160a01b038716600090815260016020908152604080832063ffffffff8a16845282528083208884529091529020805467ffffffffffffffff19166001600160401b0386161790555b82516020808501919091206001600160a01b038916600090815260028352604080822063ffffffff8b168352845280822089835284528082206001600160401b0389168352909352919091205490925080831461344357604051637182306f60e01b8152600481018290526024810184905260440161134a565b50506001600160a01b03909516600090815260026020908152604080832063ffffffff90971683529581528582209482529384528481206001600160401b03909316815291909252918220919091555090565b336001600160a01b038216148015906134c957506001600160a01b038181166000908152600f6020526040902054163314155b15612ad45760405163c4c5259360e01b815260040160405180910390fd5b6134ef613e95565b600080613560856135036020870187614341565b6001600160a01b0391909116600090815260036020908152604080832063ffffffff949094168352928152828220818901358352905220805467ffffffffffffffff19811660016001600160401b03928316019182161790915590565b905060006040518060e00160405280836001600160401b031681526020017f000000000000000000000000000000000000000000000000000000000000000063ffffffff168152602001876001600160a01b031681526020018660000160208101906135cc9190614341565b63ffffffff1681526020018660200135815260200161361a847f00000000000000000000000000000000000000000000000000000000000000008a8a60000160208101906130459190614341565b815260200161362c6040880188614e43565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525092935091506136799050876109b16020890189614341565b90506000806001600160a01b038316634389e58f8561369b60608c018c614e43565b6136ab60a08e0160808f01614a22565b6040518563ffffffff1660e01b81526004016136ca9493929190614e89565b6000604051808303816000875af11580156136e9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526137119190810190614f99565b90925090507f1ab700d4ced0c005b164c0f789fd09fcbb0156d4c2041b8a3bfbcd961cd1567f8161374560608b018b614e43565b866040516137569493929190614fe7565b60405180910390a1506040805160608101825260a09094015184526001600160401b03909416602084015292820192909252925090509250929050565b6040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa1580156137fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061381e9190615027565b905090565b600081156138ba57600e546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015613873573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138979190615027565b9050806000036138ba57604051631775123760e01b815260040160405180910390fd5b919050565b82518210806138d15750808360200151115b156126095782516020840151604051634f3ec0d360e01b815260048101929092526024820184905260448201526064810182905260840161134a565b831561391e5761391e858386613cef565b82841015613933576139338582868603613cef565b5050505050565b341561395957604051634d18bd2960e11b815260040160405180910390fd5b6139867f00000000000000000000000000000000000000000000000000000000000000008585858561390d565b50505050565b6000546001600160a01b03163314611bec5760405163118cdaa760e01b815233600482015260240161134a565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600080826001600160401b031611806122ce5750604051600162842fc360e01b031981526001600160a01b0384169063ff7bd03d90613a4c908790600401615040565b602060405180830381865afa158015613a69573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122ce91906149d5565b6001600160a01b038416600090815260026020908152604080832063ffffffff87168452825280832085845282528083206001600160401b03851684529091529020541515949350505050565b6001600160a01b038316613af2576126098282613d2a565b612609838383613cef565b60006001600160401b038216613b19606086016040870161487c565b6001600160401b031611806122ce57506001600160a01b03831660009081526002602090815260408220908290613b5290880188614341565b63ffffffff1663ffffffff1681526020019081526020016000206000866020013581526020019081526020016000206000866040016020810190613b96919061487c565b6001600160401b031681526020810191909152604001600020541415949350505050565b80613bd8576040516304df7fdb60e11b815260040160405180910390fd5b6001600160a01b03909416600090815260026020908152604080832063ffffffff90961683529481528482209382529283528381206001600160401b03909216815291522055565b600085856001600160a01b03861660405160c09390931b6001600160c01b031916602084015260e091821b6001600160e01b03199081166028850152602c8401919091529085901b16604c8201526050810183905260700160405160208183030381529060405280519060200120905095945050505050565b613ca161398c565b600e80546001600160a01b0319166001600160a01b0383169081179091556040519081527fd476ec5ec1ac11cec3714d41e7ea49419471aceb9bd0dff1becfc3e363a6239690602001612b98565b6001600160a01b038216613d16576040516306b7a93160e41b815260040160405180910390fd5b6126096001600160a01b0384168383613dd7565b6001600160a01b038216613d51576040516306b7a93160e41b815260040160405180910390fd5b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114613d9e576040519150601f19603f3d011682016040523d82523d6000602084013e613da3565b606091505b505090508061260957604051631196f20d60e21b81526001600160a01b03841660048201526024810183905260440161134a565b604080516001600160a01b03841660248201526044808201849052825180830390910181526064909101909152602080820180516001600160e01b031663a9059cbb60e01b1781528251612609938793909260009283929183919082885af180613e47576040513d6000823e3d81fd5b50506000513d91508115613e5f578060011415613e6c565b6001600160a01b0384163b155b1561398657604051635274afe760e01b81526001600160a01b038516600482015260240161134a565b60405180606001604052806000801916815260200160006001600160401b03168152602001613ed7604051806040016040528060008152602001600081525090565b905290565b600060608284031215613eee57600080fd5b50919050565b80356001600160a01b03811681146138ba57600080fd5b60008083601f840112613f1d57600080fd5b5081356001600160401b03811115613f3457600080fd5b6020830191508360208285010111156114be57600080fd5b600080600080600080600060e0888a031215613f6757600080fd5b613f718989613edc565b9650613f7f60608901613ef4565b95506080880135945060a08801356001600160401b0380821115613fa257600080fd5b613fae8b838c01613f0b565b909650945060c08a0135915080821115613fc757600080fd5b50613fd48a828b01613f0b565b989b979a50959850939692959293505050565b803563ffffffff811681146138ba57600080fd5b6000806000806080858703121561401157600080fd5b61401a85613ef4565b935061402860208601613fe7565b925061403660408601613ef4565b9396929550929360600135925050565b6000806040838503121561405957600080fd5b82356001600160401b0381111561406f57600080fd5b830160a0818603121561408157600080fd5b915061408f60208401613ef4565b90509250929050565b6000608082019050825182526001600160401b03602084015116602083015260408301516140d3604084018280518252602090810151910152565b5092915050565b600080600080600060c086880312156140f257600080fd5b6140fb86613ef4565b945061410a8760208801613edc565b93506080860135925060a08601356001600160401b0381111561412c57600080fd5b61413888828901613f0b565b969995985093965092949392505050565b6000806000806080858703121561415f57600080fd5b61416885613ef4565b935061417660208601613ef4565b925061418460408601613fe7565b915061419260608601613fe7565b905092959194509250565b60005b838110156141b85781810151838201526020016141a0565b50506000910152565b600081518084526141d981602086016020860161419d565b601f01601f19169290920160200192915050565b602081526000611d3f60208301846141c1565b80356001600160401b03811681146138ba57600080fd5b600080600080600060a0868803121561422f57600080fd5b61423886613ef4565b945061424660208701613fe7565b93506040860135925061425b60608701614200565b949793965091946080013592915050565b803561ffff811681146138ba57600080fd5b6000806000806080858703121561429457600080fd5b61429d85613ef4565b93506142ab60208601613ef4565b9250604085013591506141926060860161426c565b600080604083850312156142d357600080fd5b6142dc83613ef4565b915061408f60208401613fe7565b6000602082840312156142fc57600080fd5b611d3f82613ef4565b60008060006060848603121561431a57600080fd5b61432384613ef4565b925061433160208501613fe7565b9150604084013590509250925092565b60006020828403121561435357600080fd5b611d3f82613fe7565b6000806000806000806000806000806000806101208d8f03121561437f57600080fd5b6143888d613ef4565b9b5061439660208e01613ef4565b9a5060408d013599506143ab60608e0161426c565b985060808d0135975060a08d013596506001600160401b0360c08e013511156143d357600080fd5b6143e38e60c08f01358f01613f0b565b90965094506001600160401b0360e08e0135111561440057600080fd5b6144108e60e08f01358f01613f0b565b90945092506001600160401b036101008e0135111561442e57600080fd5b61443f8e6101008f01358f01613f0b565b81935080925050509295989b509295989b509295989b565b60008060008060008060008060008060006101408c8e03121561447957600080fd5b6144838d8d613edc565b9a5061449160608d01613ef4565b995060808c0135985060a08c0135975060c08c013596506001600160401b038060e08e013511156144c157600080fd5b6144d18e60e08f01358f01613f0b565b90975095506101008d01358110156144e857600080fd5b6144f98e6101008f01358f01613f0b565b90955093506101208d013581101561451057600080fd5b506145228d6101208e01358e01613f0b565b81935080925050509295989b509295989b9093969950565b6000806000806060858703121561455057600080fd5b61455985613ef4565b935061456760208601613ef4565b925060408501356001600160401b038082111561458357600080fd5b818701915087601f83011261459757600080fd5b8135818111156145a657600080fd5b8860208260051b85010111156145bb57600080fd5b95989497505060200194505050565b6000806000806000608086880312156145e257600080fd5b6145eb86613ef4565b9450602086013593506146006040870161426c565b925060608601356001600160401b0381111561412c57600080fd5b6000806080838503121561462e57600080fd5b6146388484613edc565b915061408f60608401613ef4565b6020808252825182820181905260009190848201906040850190845b818110156146875783516001600160a01b031683529284019291840191600101614662565b50909695505050505050565b60008060008060008060008060c0898b0312156146af57600080fd5b6146b889613ef4565b97506146c660208a01613ef4565b9650604089013595506146db60608a0161426c565b945060808901356001600160401b03808211156146f757600080fd5b6147038c838d01613f0b565b909650945060a08b013591508082111561471c57600080fd5b506147298b828c01613f0b565b999c989b5096995094979396929594505050565b60008060006060848603121561475257600080fd5b61475b84613ef4565b925061476960208501613fe7565b915061477760408501613ef4565b90509250925092565b60008060006060848603121561479557600080fd5b61479e84613fe7565b925061433160208501613ef4565b6000806000606084860312156147c157600080fd5b61479e84613ef4565b600080600060a084860312156147df57600080fd5b6147e98585613edc565b92506147f760608501613ef4565b9150608084013590509250925092565b6000806040838503121561481a57600080fd5b61408183613fe7565b6000806000806080858703121561483957600080fd5b61484285613ef4565b935061485060208601613fe7565b92506040850135915061419260608601614200565b815181526020808301519082015260408101611675565b60006020828403121561488e57600080fd5b611d3f82614200565b838152818360208301376000910160200190815292915050565b63ffffffff6148bf82613fe7565b168252602081013560208301526001600160401b036148e060408301614200565b1660408301525050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b61491d81896148b1565b86606082015260e06080820152600061493a60e0830187896148ea565b6001600160a01b03861660a084015282810360c084015261495c8185876148ea565b9a9950505050505050505050565b6080810161497882856148b1565b6001600160a01b039290921660609190910152919050565b634e487b7160e01b600052602160045260246000fd5b6000602082840312156149b857600080fd5b815160038110611d3f57600080fd5b8015158114612ad457600080fd5b6000602082840312156149e757600080fd5b8151611d3f816149c7565b6001600160a01b03948516815263ffffffff93909316602084015292166040820152606081019190915260800190565b600060208284031215614a3457600080fd5b8135611d3f816149c7565b634e487b7160e01b600052604160045260246000fd5b600082601f830112614a6657600080fd5b81516001600160401b0380821115614a8057614a80614a3f565b604051601f8301601f19908116603f01168101908282118183101715614aa857614aa8614a3f565b81604052838152866020858801011115614ac157600080fd5b6112ce84602083016020890161419d565b600060208284031215614ae457600080fd5b81516001600160401b03811115614afa57600080fd5b6122ce84828501614a55565b63ffffffff95909516855260208501939093526001600160a01b039190911660408401526001600160401b03166060830152608082015260a00190565b8a815261ffff8a16602082015288604082015287606082015260e060808201526000614b7360e08301888a6148ea565b82810360a0840152614b868187896148ea565b905082810360c0840152614b9b8185876148ea565b9d9c50505050505050505050505050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561167557611675614bac565b6000610120614be4838e6148b1565b8b60608401528a60808401528960a08401528060c0840152614c09818401898b6148ea565b905082810360e0840152614c1e8187896148ea565b9050828103610100840152614b9b8185876148ea565b6001600160a01b03841681526040602080830182905282820184905260009190606090818501600587901b8601830188865b89811015614d1757888303605f190184528135368c9003605e19018112614c8c57600080fd5b8b0163ffffffff80614c9d83613fe7565b16855280614cac888401613fe7565b16878601525087810135601e19823603018112614cc857600080fd5b0185810190356001600160401b03811115614ce257600080fd5b803603821315614cf157600080fd5b8789860152614d0388860182846148ea565b958701959450505090840190600101614c66565b50909a9950505050505050505050565b8183823760009101908152919050565b6001600160a01b038781168252861660208201526040810185905261ffff8416606082015260a060808201819052600090614d7590830184866148ea565b98975050505050505050565b600060018060a01b03808a16835288602084015260a06040840152614daa60a08401888a6148ea565b81871660608501528381036080850152614dc58186886148ea565b9b9a5050505050505050505050565b63ffffffff9390931683526001600160a01b03919091166020830152604082015260600190565b60a08101614e0982866148b1565b6001600160a01b0393909316606082015260800152919050565b6001600160401b038181168382160190808211156140d3576140d3614bac565b6000808335601e19843603018112614e5a57600080fd5b8301803591506001600160401b03821115614e7457600080fd5b6020019150368190038213156114be57600080fd5b606080825285516001600160401b031682820152602086015163ffffffff16608083015260408601516001600160a01b031660a0830152850151600090614ed860c084018263ffffffff169052565b50608086015160e083015260a086015161010083015260c086015160e0610120840152614f096101408401826141c1565b90508281036020840152614f1e8186886148ea565b9150506127d0604083018415159052565b600060408284031215614f4157600080fd5b604051604081018181106001600160401b0382111715614f6357614f63614a3f565b604052825181526020928301519281019290925250919050565b600060408284031215614f8f57600080fd5b611d3f8383614f2f565b60008060608385031215614fac57600080fd5b614fb68484614f2f565b915060408301516001600160401b03811115614fd157600080fd5b614fdd85828601614a55565b9150509250929050565b606081526000614ffa60608301876141c1565b828103602084015261500d8186886148ea565b91505060018060a01b038316604083015295945050505050565b60006020828403121561503957600080fd5b5051919050565b6060810161167582846148b156fea264697066735822122090f702bc055b3c8606fe084619d87bdcfb9298de28d91daac921e84b5c1160f264736f6c63430008160033", - "sourceMap": "279:1560:74:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9753:572:75;;;;;;:::i;:::-;;:::i;:::-;;1153:158:30;;;;;;;;;;;;;:::i;:::-;;;;1996:10:132;1984:23;;;1966:42;;-1:-1:-1;;;;;2044:32:132;;;2039:2;2024:18;;2017:60;1939:18;1153:158:30;;;;;;;;13111:942:27;;;;;;;;;;-1:-1:-1;13111:942:27;;;;;:::i;:::-;;:::i;5245:1210:75:-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;11390:344::-;;;;;;;;;;-1:-1:-1;11390:344:75;;;;;:::i;:::-;;:::i;14475:261:27:-;;;;;;;;;;-1:-1:-1;14475:261:27;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;344:69:28:-;;;;;;;;;;-1:-1:-1;344:69:28;-1:-1:-1;;344:69:28;;;;;5759:25:132;;;5747:2;5732:18;344:69:28;5613:177:132;4815:687:28;;;;;;;;;;-1:-1:-1;4815:687:28;;;;;:::i;:::-;;:::i;455:145:29:-;;;;;;;;;;-1:-1:-1;455:145:29;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4135:379:27;;;;;;;;;;-1:-1:-1;4135:379:27;;;;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;7559:32:132;;;7541:51;;7635:14;;7628:22;7623:2;7608:18;;7601:50;7514:18;4135:379:27;7373:284:132;5920:644:28;;;;;;;;;;-1:-1:-1;5920:644:28;;;;;:::i;:::-;;:::i;486:27::-;;;;;;;;;;;;;;;;;;7836:10:132;7824:23;;;7806:42;;7794:2;7779:18;486:27:28;7662:192:132;2947:58:75;;;;;;;;;;-1:-1:-1;2947:58:75;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;2947:58:75;;;;;;-1:-1:-1;;;;;8214:32:132;;;8196:51;;8184:2;8169:18;2947:58:75;8050:203:132;520:126:28;;;;;;;;;;-1:-1:-1;520:126:28;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;520:126:28;;;;;;-1:-1:-1;;;;;8751:31:132;;;8733:50;;8721:2;8706:18;520:126:28;8589:200:132;9954:173:27;;;;;;;;;;-1:-1:-1;9954:173:27;;;;;:::i;:::-;;:::i;:::-;;;9148:14:132;;9141:22;9123:41;;9111:2;9096:18;9954:173:27;8983:187:132;3537:395:29;;;;;;;;;;-1:-1:-1;3537:395:29;;;;;:::i;:::-;;:::i;11204:1559:27:-;;;;;;;;;;-1:-1:-1;11204:1559:27;;;;;:::i;:::-;;:::i;10627:388:75:-;;;;;;;;;;-1:-1:-1;10627:388:75;;;;;:::i;:::-;;:::i;14185:208:27:-;;;;;;;;;;-1:-1:-1;14185:208:27;;;;;:::i;:::-;;:::i;1509:69::-;;;;;;;;;;-1:-1:-1;1509:69:27;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1509:69:27;;;;;;;;;;-1:-1:-1;;;;;13013:32:132;;;12995:51;;13077:2;13062:18;;13055:34;;;;12968:18;1509:69:27;12821:274:132;1437:66:27;;;;;;;;;;-1:-1:-1;1437:66:27;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;1437:66:27;;;2293:101:107;;;;;;;;;;;;;:::i;744:39:27:-;;;;;;;;;;;;;;;969:106:30;;;;;;;;;;-1:-1:-1;1041:12:30;;527:1;1041:27;;969:106;;1065:402:29;;;;;;;;;;-1:-1:-1;1065:402:29;;;;;:::i;:::-;;:::i;17710:215:75:-;;;;;;;;;;-1:-1:-1;17710:215:75;;;;;:::i;:::-;;:::i;1638:85:107:-;;;;;;;;;;-1:-1:-1;1684:7:107;1710:6;-1:-1:-1;;;;;1710:6:107;1638:85;;2858:118:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;2144:1048:29:-;;;;;;:::i;:::-;;:::i;10340:450:27:-;;;;;;;;;;-1:-1:-1;10340:450:27;;;;;:::i;:::-;;:::i;825:115:28:-;;;;;;;;;;-1:-1:-1;825:115:28;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;825:115:28;;;4887:1218:27;;;;;;;;;;-1:-1:-1;4887:1218:27;;;;;:::i;:::-;;:::i;2523:425:28:-;;;;;;;;;;-1:-1:-1;2523:425:28;;;;;:::i;:::-;;:::i;7763:1045:27:-;;;;;;;;;;-1:-1:-1;7763:1045:27;;;;;:::i;:::-;;:::i;12477:148:75:-;;;;;;;;;;-1:-1:-1;12477:148:75;;;;;:::i;:::-;;:::i;8373:709::-;;;;;;;;;;-1:-1:-1;8373:709:75;;;;;:::i;:::-;;:::i;8256:259:28:-;;;;;;;;;;-1:-1:-1;8256:259:28;;;;;:::i;:::-;;:::i;7038:400:27:-;;;;;;;;;;-1:-1:-1;7038:400:27;;;;;:::i;:::-;;:::i;3524:317::-;;;;;;;;;;-1:-1:-1;3524:317:27;;;;;:::i;:::-;;:::i;1552:180:74:-;;;;;;;;;;-1:-1:-1;1552:180:74;;;;;:::i;:::-;;:::i;17931:209:75:-;;;;;;;;;;-1:-1:-1;17931:209:75;;;;;:::i;:::-;;:::i;652:167:28:-;;;;;;;;;;-1:-1:-1;652:167:28;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16136:148:75;;;;;;;;;;-1:-1:-1;16136:148:75;;;;;:::i;:::-;;:::i;283:55:28:-;;;;;;;;;;-1:-1:-1;283:55:28;336:1;283:55;;9156:710:27;;;;;;;;;;-1:-1:-1;9156:710:27;;;;;:::i;:::-;;:::i;4016:359:28:-;;;;;;;;;;-1:-1:-1;4016:359:28;;;;;:::i;:::-;;:::i;948:55:27:-;;;;;;;;;;-1:-1:-1;948:55:27;;;;;:::i;:::-;;;;;;;;;;;;;;;;3847:158;;;;;;;;;;-1:-1:-1;3847:158:27;;;;;:::i;:::-;-1:-1:-1;;;;;3954:20:27;;;3931:4;3954:20;;;:11;:20;;;;;;;;:29;;;;;;;;;;;;;:44;;3847:158;3962:1043:75;;;;;;;;;;-1:-1:-1;3962:1043:75;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;1738:99:74:-;;;;;;;;;;-1:-1:-1;1819:11:74;1738:99;;2918:22:75;;;;;;;;;;-1:-1:-1;2918:22:75;;;;-1:-1:-1;;;;;2918:22:75;;;6264:511:27;;;;;;;;;;-1:-1:-1;6264:511:27;;;;;:::i;:::-;;:::i;1270:91::-;;;;;;;;;;-1:-1:-1;1270:91:27;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1270:91:27;;;;;;2543:215:107;;;;;;;;;;-1:-1:-1;2543:215:107;;;;;:::i;:::-;;:::i;1368:63:27:-;;;;;;;;;;-1:-1:-1;1368:63:27;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;1368:63:27;;;9753:572:75;10043:106;10057:9;10068:14;;;;:7;:14;:::i;:::-;10084;;;;10100:13;;;;;;;;:::i;:::-;10132:5;10139:8;;10115:33;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;10043:13;:106::i;:::-;-1:-1:-1;10159:109:75;;-1:-1:-1;;;10159:109:75;;-1:-1:-1;;;;;10159:39:75;;;;;10207:9;;10159:109;;10219:7;;10228:5;;10235:8;;;;10245:10;;10257;;;;10159:109;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10283:35;10299:7;10308:9;10283:35;;;;;;;:::i;:::-;;;;;;;;9753:572;;;;;;;:::o;1153:158:30:-;1202:6;1210:7;1236:18;1041:12;;527:1;1041:27;;;969:106;1236:18;:68;;1290:1;1301;1236:68;;;1257:29;1273:12;;1437:3;1425:15;;;;1317:160;1257:29;1229:75;;;;1153:158;;:::o;13111:942:27:-;-1:-1:-1;;;;;1765:25:27;;;;;;:19;:25;;;;;;13266:4;;1765:25;;1760:68;;1799:29;;-1:-1:-1;;;1799:29:27;;;;;;;;;;;1760:68;13285:4;-1:-1:-1;;;;;2114:19:27;::::1;::::0;2110:146:::1;;2191:19;2165:4;-1:-1:-1::0;;;;;2153:32:27::1;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:57;;;;;;;;:::i;:::-;::::0;2149:96:::1;;2219:26;;-1:-1:-1::0;;;2219:26:27::1;;;;;;;;;;;2149:96;13308:4:::0;13314;-1:-1:-1;;;;;2711:19:27;::::2;::::0;2707:128:::2;;2751:38;::::0;-1:-1:-1;;;2751:38:27;;7836:10:132;7824:23;;2751:38:27::2;::::0;::::2;7806:42:132::0;-1:-1:-1;;;;;2751:32:27;::::2;::::0;::::2;::::0;7779:18:132;;2751:38:27::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2746:78;;2798:26;;-1:-1:-1::0;;;2798:26:27::2;;;;;;;;;;;2746:78;13330:24:::3;13348:5;13330:17;:24::i;:::-;13368:14;13386:30;13404:5;13411:4;13386:17;:30::i;:::-;13365:51;;;13498:9;13494:51;;;13516:29;;-1:-1:-1::0;;;13516:29:27::3;;;;;;;;;;;13494:51;13560:7;13571:1;13560:12:::0;13556:424:::3;;-1:-1:-1::0;;;;;13649:28:27;::::3;;::::0;;;:21:::3;:28;::::0;;;;;;;:34:::3;::::0;::::3;::::0;;;;;;;13642:41;;-1:-1:-1;;;;;;13642:41:27::3;::::0;;;::::3;::::0;13556:424:::3;;;13779:12;13768:7;:23;13764:61;;13800:25;;-1:-1:-1::0;;;13800:25:27::3;;;;;;;;;;;13764:61;-1:-1:-1::0;;;;;13865:28:27;;::::3;13839:23;13865:28:::0;;;:21:::3;:28;::::0;;;;;;;:34:::3;::::0;::::3;::::0;;;;;;;13913:18;;-1:-1:-1;;;;;;13913:18:27::3;::::0;;::::3;::::0;;;::::3;::::0;;-1:-1:-1;13945:14:27::3;:24:::0;;;13556:424:::3;13994:52;14019:5;14026:4;14032;14038:7;13994:52;;;;;;;;;:::i;:::-;;;;;;;;13320:733;2265:1:::2;;1838::::1;13111:942:::0;;;;;:::o;5245:1210:75:-;5405:23;;:::i;:::-;5368:14;;;;:7;:14;:::i;:::-;5384:10;527:1:30;733:12;;:27;729:66;;769:26;;-1:-1:-1;;;769:26:30;;;;;;;;;;;729:66;-1:-1:-1;;;841:3:30;821:23;;;;;;;-1:-1:-1;;;;;820:44:30;;;805:12;:59;5444:20:75::1;::::0;;;::::1;::::0;::::1;;:::i;:::-;:47;;;;-1:-1:-1::0;5468:7:75::1;::::0;-1:-1:-1;;;;;5468:7:75::1;:23:::0;5444:47:::1;5440:90;;;5500:30;;-1:-1:-1::0;;;5500:30:75::1;;;;;;;;;;;5440:90;5566:31;5599:20:::0;5623:26:::1;5629:10;5641:7;5623:5;:26::i;:::-;5565:84;;;;5980:22;6005:17;:15;:17::i;:::-;5980:42:::0;-1:-1:-1;6032:23:75::1;6058:38;6075:20;::::0;;;::::1;::::0;::::1;;:::i;:::-;6058:16;:38::i;:::-;6032:64;;6106:65;6126:7;:11;;;6139:14;6155:15;6106:19;:65::i;:::-;6224:7;::::0;6233:11:::1;::::0;::::1;::::0;:22:::1;;::::0;6214:89:::1;::::0;-1:-1:-1;;;;;6224:7:75::1;::::0;6257:15;6274:12;6288:14;6214:9:::1;:89::i;:::-;6355:11;::::0;::::1;::::0;:21;6344:79:::1;::::0;6378:14;6394:12;6408:14;6344:10:::1;:79::i;:::-;-1:-1:-1::0;;527:1:30;885:12;:26;-1:-1:-1;6441:7:75;5245:1210;-1:-1:-1;;;;;5245:1210:75:o;11390:344::-;11504:24;11522:5;11504:17;:24::i;:::-;11539:20;11579:5;11586:8;;11562:33;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;11562:33:75;;;;;;;;;;-1:-1:-1;11605:76:75;11619:5;11626:14;11562:33;11626:14;;:7;:14;:::i;:::-;11642;;;;11658:13;;;;;;;;:::i;:::-;11673:7;11605:13;:76::i;:::-;;11696:31;11712:7;11721:5;11696:31;;;;;;;:::i;:::-;;;;;;;;11494:240;11390:344;;;;;:::o;14475:261:27:-;-1:-1:-1;;;;;1765:25:27;;;;;;:19;:25;;;;;;14638:19;;14623:4;;1765:25;;1760:68;;1799:29;;-1:-1:-1;;;1799:29:27;;;;;;;;;;;1760:68;14676:53:::1;::::0;-1:-1:-1;;;14676:53:27;;21964:10:132;22001:15;;;14676:53:27::1;::::0;::::1;21983:34:132::0;-1:-1:-1;;;;;22053:32:132;;;22033:18;;;22026:60;22122:15;;;22102:18;;;22095:43;14676:27:27;::::1;::::0;::::1;::::0;21927:18:132;;14676:53:27::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;::::0;;::::1;-1:-1:-1::0;;14676:53:27::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;:::i;:::-;14669:60:::0;14475:261;-1:-1:-1;;;;;;14475:261:27:o;4815:687:28:-;4935:24;4953:5;4935:17;:24::i;:::-;-1:-1:-1;;;;;4995:25:28;;4970:22;4995:25;;;:18;:25;;;;;;;;:34;;;;;;;;;;:43;;;;;;;;-1:-1:-1;;;;;4995:51:28;;;;;;;;;;5060:30;;;5056:102;;5099:59;;-1:-1:-1;;;5099:59:28;;;;;23498:25:132;;;23539:18;;;23532:34;;;23471:18;;5099:59:28;;;;;;;;5056:102;-1:-1:-1;;;;;5182:23:28;;;;;;:16;:23;;;;;;;;:32;;;;;;;;;;:41;;;;;;;;;-1:-1:-1;;;;;5182:41:28;;;5172:51;;;;;;;:91;;-1:-1:-1;5227:36:28;;5172:91;5168:146;;;5284:30;;-1:-1:-1;;;5284:30:28;;-1:-1:-1;;;;;8751:31:132;;5284:30:28;;;8733:50:132;8706:18;;5284:30:28;8589:200:132;5168:146:28;-1:-1:-1;;;;;5349:25:28;;387:26;5349:25;;;:18;:25;;;;;;;;:34;;;;;;;;;;:43;;;;;;;;-1:-1:-1;;;;;5349:51:28;;;;;;;;;;;-1:-1:-1;;5349:70:28;;5434:61;;;;;5375:7;;5384;;5368:5;;5393:6;;5482:12;;5434:61;:::i;4135:379:27:-;-1:-1:-1;;;;;4263:25:27;;;4218:11;4263:25;;;:14;:25;;;;;;;;:34;;;;;;;;;;;;;;;;4307:201;;4351:30;;;;;;;:21;:30;;;;;;-1:-1:-1;;;;;4351:30:27;;-1:-1:-1;4351:30:27;4395:72;;4427:40;;-1:-1:-1;;;4427:40:27;;;;;;;;;;;4395:72;-1:-1:-1;4493:4:27;4307:201;4135:379;;;;;:::o;5920:644:28:-;6038:24;6056:5;6038:17;:24::i;:::-;-1:-1:-1;;;;;6098:25:28;;6073:22;6098:25;;;:18;:25;;;;;;;;:34;;;;;;;;;;:43;;;;;;;;-1:-1:-1;;;;;6098:51:28;;;;;;;;;;6163:30;;;6159:102;;6202:59;;-1:-1:-1;;;6202:59:28;;;;;23498:25:132;;;23539:18;;;23532:34;;;23471:18;;6202:59:28;23324:248:132;6159:102:28;6275:36;;;:90;;-1:-1:-1;;;;;;6324:23:28;;;;;;:16;:23;;;;;;;;:32;;;;;;;;;;:41;;;;;;;;;-1:-1:-1;;;;;6324:41:28;;;6315:50;;;;6275:90;6271:145;;;6386:30;;-1:-1:-1;;;6386:30:28;;-1:-1:-1;;;;;8751:31:132;;6386:30:28;;;8733:50:132;8706:18;;6386:30:28;8589:200:132;6271:145:28;-1:-1:-1;;;;;6433:25:28;;;;;;:18;:25;;;;;;;;:34;;;;;;;;;;:43;;;;;;;;-1:-1:-1;;;;;6433:51:28;;;;;;;;;;6426:58;;;;6499;;;;;6459:7;;6468;;6452:5;;6477:6;;6544:12;;6499:58;:::i;9954:173:27:-;10037:24;;;10014:4;10037:24;;;:18;:24;;;;;;-1:-1:-1;;;;;10037:24:27;:38;;;;:83;;-1:-1:-1;10079:27:27;;;10118:1;10079:27;;;:21;:27;;;;;;-1:-1:-1;;;;;10079:27:27;:41;;10037:83;10030:90;9954:173;-1:-1:-1;;9954:173:27:o;3537:395:29:-;3854:10;-1:-1:-1;;;;;3827:98:29;3849:3;-1:-1:-1;;;;;3827:98:29;3842:5;-1:-1:-1;;;;;3827:98:29;;3866:5;3873:6;3881:4;3887:6;3895:8;;3905:10;;3917:7;;3827:98;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;3537:395;;;;;;;;;;;;:::o;11204:1559:27:-;-1:-1:-1;;;;;2341:25:27;;;;;;:19;:25;;;;;;11369:7;;2341:25;;2340:26;:49;;;;-1:-1:-1;;;;;;2370:19:27;;;;2340:49;2336:100;;;2398:38;;-1:-1:-1;;;2398:38:27;;;;;;;;;;;2336:100;11391:7;-1:-1:-1;;;;;2114:19:27;::::1;::::0;2110:146:::1;;2191:19;2165:4;-1:-1:-1::0;;;;;2153:32:27::1;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:57;;;;;;;;:::i;:::-;::::0;2149:96:::1;;2219:26;;-1:-1:-1::0;;;2219:26:27::1;;;;;;;;;;;2149:96;11417:7:::0;11426:4;-1:-1:-1;;;;;2711:19:27;::::2;::::0;2707:128:::2;;2751:38;::::0;-1:-1:-1;;;2751:38:27;;7836:10:132;7824:23;;2751:38:27::2;::::0;::::2;7806:42:132::0;-1:-1:-1;;;;;2751:32:27;::::2;::::0;::::2;::::0;7779:18:132;;2751:38:27::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2746:78;;2798:26;;-1:-1:-1::0;;;2798:26:27::2;;;;;;;;;;;2746:78;11442:24:::3;11460:5;11442:17;:24::i;:::-;-1:-1:-1::0;;;;;11494:21:27;;::::3;11477:14;11494:21:::0;;;:14:::3;:21;::::0;;;;;;;:27:::3;::::0;::::3;::::0;;;;;;;;;::::3;::::0;11570:17;::::3;::::0;;11566:51:::3;;11596:21;;-1:-1:-1::0;;;11596:21:27::3;;;;;;;;;;;11566:51;-1:-1:-1::0;;;;;11627:21:27;;::::3;;::::0;;;:14:::3;:21;::::0;;;;;;;:27:::3;::::0;::::3;::::0;;;;;;;;;;:37;;-1:-1:-1;;;;;;11627:37:27::3;::::0;;::::3;::::0;;::::3;::::0;;11679:39;;25270:34:132;;;25320:18;;;25313:51;;;;25380:18;;25373:43;;;;11679:39:27::3;::::0;25220:2:132;25205:18;11679:39:27::3;;;;;;;11733:16:::0;;11729:1028:::3;;-1:-1:-1::0;;;;;12251:21:27;::::3;::::0;;:47:::3;;-1:-1:-1::0;;;;;;12276:22:27;::::3;::::0;12251:47:::3;12247:89;;;12307:29;;-1:-1:-1::0;;;12307:29:27::3;;;;;;;;;;;12247:89;12383:22;12408:61;;;;;;;;12423:6;-1:-1:-1::0;;;;;12408:61:27::3;;;;;12454:12;12439;:27;;;;:::i;:::-;12408:61:::0;;-1:-1:-1;;;;;12483:28:27;;::::3;;::::0;;;:21:::3;:28;::::0;;;;;;;:34:::3;::::0;::::3;::::0;;;;;;;;:44;;;;-1:-1:-1;;;;;;12483:44:27::3;::::0;::::3;::::0;;;::::3;::::0;;;::::3;::::0;-1:-1:-1;12483:44:27;;::::3;::::0;;;12546:61;12483:44;;-1:-1:-1;12546:61:27::3;::::0;::::3;::::0;12483:28;;:34;;12584:6;;12546:61:::3;:::i;:::-;;;;;;;;11751:867;11729:1028;;;-1:-1:-1::0;;;;;12645:28:27;::::3;;::::0;;;:21:::3;:28;::::0;;;;;;;:34:::3;::::0;::::3;::::0;;;;;;;;12638:41;;-1:-1:-1;;;;;;12638:41:27::3;::::0;;;::::3;::::0;;;12698:48;::::3;::::0;::::3;::::0;12667:5;;12674:4;;12736:6;;12645:28;12698:48:::3;:::i;11729:1028::-;11432:1331;2265:1:::2;;2446::::1;11204:1559:::0;;;;;:::o;10627:388:75:-;10936:10;-1:-1:-1;;;;;10910:98:75;10925:9;-1:-1:-1;;;;;10910:98:75;;10948:7;10957:5;10964:4;10970:6;10978:8;;10988:10;;11000:7;;10910:98;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;10627:388;;;;;;;;;;;:::o;14185:208:27:-;-1:-1:-1;;;;;1765:25:27;;;;;;:19;:25;;;;;;14292:4;;1765:25;;1760:68;;1799:29;;-1:-1:-1;;;1799:29:27;;;;;;;;;;;1760:68;14308:24:::1;14326:5;14308:17;:24::i;:::-;14343:43;::::0;-1:-1:-1;;;14343:43:27;;-1:-1:-1;;;;;14343:27:27;::::1;::::0;::::1;::::0;:43:::1;::::0;14371:5;;14378:7;;;;14343:43:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;2293:101:107::0;1531:13;:11;:13::i;:::-;2357:30:::1;2384:1;2357:18;:30::i;:::-;2293:101::o:0;1065:402:29:-;1232:10;372:1;1219:24;;;:12;:24;;;;;;;;-1:-1:-1;;;;;1219:29:29;;;;;;;;;:36;;;;;;;;:44;;;;;;;;;;;:63;1215:101;;1291:25;;-1:-1:-1;;;1291:25:29;;;;;;;;;;;1215:101;1383:8;;1373:19;;;;;;;:::i;:::-;;;;;;;;;;1339:10;1326:24;;;;:12;:24;;;;;;;-1:-1:-1;;;;;1326:29:29;;;;;;;;;:36;;;;;;;;:44;;;;;;;;;;;:66;1407:53;;;;1339:10;1351:3;;1356:5;;1363:6;;1451:8;;;;1407:53;:::i;:::-;;;;;;;;1065:402;;;;;:::o;17710:215:75:-;-1:-1:-1;;;;;17858:27:75;;17800:4;17858:27;;;:16;:27;;;;;;;17823:95;;17838:7;;17847:9;;17800:4;;17886:14;;;;17838:7;17886:14;:::i;:::-;17858:43;;;;;;;;;;;;;;;;-1:-1:-1;17858:43:75;;;17902:14;;;;17858:59;;;;;;;;-1:-1:-1;;;;;17858:59:75;17823:14;:95::i;:::-;17816:102;17710:215;-1:-1:-1;;;17710:215:75:o;2858:118:27:-;2915:16;2950:19;2943:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2943:26:27;;;;;;;;;;;;;;;;;;;;;;;2858:118;:::o;2144:1048:29:-;-1:-1:-1;;;;;2408:19:29;;;2385:20;2408:19;;;:12;:19;;;;;;;;:24;;;;;;;;;;;:31;;;;;;;;:39;;;;;;;;;;;2478:19;;;;2488:8;;;;2478:19;:::i;:::-;;;;;;;;2457:40;;2527:10;2511:12;:26;2507:90;;2546:51;;-1:-1:-1;;;2546:51:29;;;;;23498:25:132;;;23539:18;;;23532:34;;;23471:18;;2546:51:29;23324:248:132;2507:90:29;-1:-1:-1;;;;;2953:19:29;;;429;2953;;;:12;:19;;;;;;;;:24;;;;;;;;;;;;:31;;;;;;;;:39;;;;;;;;;;;;445:1;2953:63;;3026:101;-1:-1:-1;;;3026:101:29;;:33;;3068:9;;3026:101;;2966:5;;2978;;3094:8;;;;3104:10;;3116;;;;3026:101;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3142:43;3159:5;3166:3;3171:5;3178:6;3142:43;;;;;;;;-1:-1:-1;;;;;30928:15:132;;;30910:34;;30980:15;;;;30975:2;30960:18;;30953:43;31027:2;31012:18;;31005:34;31087:6;31075:19;;;;31070:2;31055:18;;31048:47;30859:3;30844:19;;30643:458;3142:43:29;;;;;;;;2344:848;;2144:1048;;;;;;;;:::o;10340:450:27:-;-1:-1:-1;;;;;2341:25:27;;;;;;:19;:25;;;;;;10472:7;;2341:25;;2340:26;:49;;;;-1:-1:-1;;;;;;2370:19:27;;;;2340:49;2336:100;;;2398:38;;-1:-1:-1;;;2398:38:27;;;;;;;;;;;2336:100;10491:7;-1:-1:-1;;;;;1899:19:27;::::1;::::0;1895:146:::1;;1976:22;1950:4;-1:-1:-1::0;;;;;1938:32:27::1;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:60;;;;;;;;:::i;:::-;::::0;1934:96:::1;;2007:23;;-1:-1:-1::0;;;2007:23:27::1;;;;;;;;;;;1934:96;10517:7:::0;10526:4;-1:-1:-1;;;;;2711:19:27;::::2;::::0;2707:128:::2;;2751:38;::::0;-1:-1:-1;;;2751:38:27;;7836:10:132;7824:23;;2751:38:27::2;::::0;::::2;7806:42:132::0;-1:-1:-1;;;;;2751:32:27;::::2;::::0;::::2;::::0;7779:18:132;;2751:38:27::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2746:78;;2798:26;;-1:-1:-1::0;;;2798:26:27::2;;;;;;;;;;;2746:78;10542:24:::3;10560:5;10542:17;:24::i;:::-;-1:-1:-1::0;;;;;10623:18:27;;::::3;;::::0;;;:11:::3;:18;::::0;;;;;;;:24:::3;::::0;::::3;::::0;;;;;;;;:35;;::::3;:24:::0;::::3;:35:::0;10619:69:::3;;10667:21;;-1:-1:-1::0;;;10667:21:27::3;;;;;;;;;;;10619:69;-1:-1:-1::0;;;;;10698:18:27;;::::3;;::::0;;;:11:::3;:18;::::0;;;;;;;:24:::3;::::0;::::3;::::0;;;;;;;;;;:34;;-1:-1:-1;;;;;;10698:34:27::3;::::0;;::::3;::::0;;::::3;::::0;;10747:36;;25270:34:132;;;25320:18;;;25313:51;;;;25380:18;;25373:43;;;;10747:36:27::3;::::0;25220:2:132;25205:18;10747:36:27::3;25032:390:132::0;4887:1218:27;5031:4;5134:26;5162:14;5180:37;5198:9;5209:7;5180:17;:37::i;:::-;5133:84;;;;5252:18;-1:-1:-1;;;;;5231:39:27;:17;-1:-1:-1;;;;;5231:39:27;;5227:81;;5293:4;5286:11;;;;;;5227:81;5514:22;5539:9;:117;;-1:-1:-1;;;;;5615:32:27;;;;;;:21;:32;;;;;;;;:41;;;;;;;;;;5539:117;;;5563:37;;;;;;;:28;:37;;;;;5539:117;5514:142;;;;;;;;;;;-1:-1:-1;;;;;5514:142:27;;;;;;;;;;;;;;;;;-1:-1:-1;5886:32:27;;;:65;;;;;5939:12;5922:7;:14;;;:29;5886:65;5882:158;;;6025:4;6018:11;;;;;;;5882:158;-1:-1:-1;6093:5:27;;4887:1218;-1:-1:-1;;;;;;4887:1218:27:o;2523:425:28:-;-1:-1:-1;;;;;2657:27:28;;2618:6;2657:27;;;:16;:27;;;;;;;;:36;;;;;;;;;;:45;;;;;;;;;-1:-1:-1;;;;;2657:45:28;2788:116;2795:61;2811:9;2822:7;2831;2840:11;2854:1;2840:15;2795;:61::i;:::-;2788:116;;;2876:13;;2788:116;;;2930:11;2523:425;-1:-1:-1;;;;2523:425:28:o;7763:1045:27:-;1531:13:107;:11;:13::i;:::-;-1:-1:-1;;;;;1765:25:27;::::1;;::::0;;;:19:::1;:25;::::0;;;;;7913:7;;1765:25:::1;;1760:68;;1799:29;;-1:-1:-1::0;;;1799:29:27::1;;;;;;;;;;;1760:68;7935:7:::0;-1:-1:-1;;;;;2114:19:27;::::2;::::0;2110:146:::2;;2191:19;2165:4;-1:-1:-1::0;;;;;2153:32:27::2;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:57;;;;;;;;:::i;:::-;::::0;2149:96:::2;;2219:26;;-1:-1:-1::0;;;2219:26:27::2;;;;;;;;;;;2149:96;7961:7:::0;7970:4;-1:-1:-1;;;;;2711:19:27;::::3;::::0;2707:128:::3;;2751:38;::::0;-1:-1:-1;;;2751:38:27;;7836:10:132;7824:23;;2751:38:27::3;::::0;::::3;7806:42:132::0;-1:-1:-1;;;;;2751:32:27;::::3;::::0;::::3;::::0;7779:18:132;;2751:38:27::3;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2746:78;;2798:26;;-1:-1:-1::0;;;2798:26:27::3;;;;;;;;;;;2746:78;8003:27:::4;::::0;::::4;7986:14;8003:27:::0;;;:21:::4;:27;::::0;;;;;-1:-1:-1;;;;;8003:27:27;;::::4;::::0;8086:17;::::4;::::0;;8082:51:::4;;8112:21;;-1:-1:-1::0;;;8112:21:27::4;;;;;;;;;;;8082:51;8144:27;::::0;::::4;;::::0;;;:21:::4;:27;::::0;;;;;;;;:37;;-1:-1:-1;;;;;;8144:37:27::4;-1:-1:-1::0;;;;;8144:37:27;::::4;::::0;;::::4;::::0;;;8196:39;;1966:42:132;;;2024:18;;;2017:60;8196:39:27::4;::::0;1939:18:132;8196:39:27::4;;;;;;;8250:16:::0;;8246:556:::4;;8390:34;::::0;::::4;8364:23;8390:34:::0;;;:28:::4;:34;::::0;;;;8438:20;;-1:-1:-1;;;;;;8438:20:27::4;-1:-1:-1::0;;;;;8438:20:27;::::4;;::::0;;8489:27:::4;8504:12:::0;8489::::4;:27;:::i;:::-;8472:14;::::0;::::4;:44:::0;;;8535:61:::4;::::0;::::4;::::0;::::4;::::0;8567:4;;8573:6;;8535:61:::4;:::i;:::-;;;;;;;;8268:339;8246:556;;;8690:34;::::0;::::4;;::::0;;;:28:::4;:34;::::0;;;;;8683:41;;-1:-1:-1;;;;;;8683:41:27::4;::::0;;;::::4;::::0;;;8743:48;::::4;::::0;::::4;::::0;8719:4;;8781:6;;8743:48:::4;:::i;:::-;;;;;;;;8246:556;7976:832;2265:1:::3;;1838::::2;1554::107::1;7763:1045:27::0;;;:::o;12477:148:75:-;1531:13:107;:11;:13::i;:::-;12574:44:75::1;12597:6;12605:3;12610:7;12574:22;:44::i;:::-;12477:148:::0;;;:::o;8373:709::-;8479:60;8501:9;8512:14;;;;:7;:14;:::i;:::-;8528:10;8479:21;:60::i;:::-;8474:107;;8548:33;;-1:-1:-1;;;8548:33:75;;;;;;;;;;;8474:107;-1:-1:-1;;;;;8611:27:75;;8592:16;8611:27;;;:16;:27;;;;;;;;8592:16;;8639:14;;;;:7;:14;:::i;:::-;8611:43;;;;;;;;;;;;;;;;-1:-1:-1;8611:43:75;;;8655:14;;;;8611:59;;;;;;;;-1:-1:-1;;;;;8611:59:75;;-1:-1:-1;8685:45:75;8655:7;8709:9;8611:59;8685:14;:45::i;:::-;8680:91;;8739:32;;-1:-1:-1;;;8739:32:75;;;;;;;;;;;8680:91;8786:42;8798:7;8807:9;8818;8786:11;:42::i;:::-;8781:85;;8837:29;;-1:-1:-1;;;8837:29:75;;;;;;;;;;;8781:85;8932:80;8941:9;8952:14;;;;:7;:14;:::i;:::-;8968;;;;8984:13;;;;;;;;:::i;:::-;8999:12;8932:8;:80::i;:::-;9027:48;9042:7;9051:9;9062:12;9027:48;;;;;;;;:::i;:::-;;;;;;;;8464:618;8373:709;;;:::o;8256:259:28:-;-1:-1:-1;;;;;8387:22:28;;8349:7;8387:22;;;:13;:22;;;;;;;;:31;;;;;;;;;;:42;;;;;;;;;8349:7;;8387:46;;-1:-1:-1;;;;;8387:42:28;;:46;:::i;:::-;8368:65;;8450:58;8464:9;8475:3;8480:7;8489;8498:9;8450:13;:58::i;:::-;8443:65;8256:259;-1:-1:-1;;;;;8256:259:28:o;7038:400:27:-;1531:13:107;:11;:13::i;:::-;-1:-1:-1;;;;;1765:25:27;::::1;;::::0;;;:19:::1;:25;::::0;;;;;7155:7;;1765:25:::1;;1760:68;;1799:29;;-1:-1:-1::0;;;1799:29:27::1;;;;;;;;;;;1760:68;7174:7:::0;-1:-1:-1;;;;;1899:19:27;::::2;::::0;1895:146:::2;;1976:22;1950:4;-1:-1:-1::0;;;;;1938:32:27::2;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:60;;;;;;;;:::i;:::-;::::0;1934:96:::2;;2007:23;;-1:-1:-1::0;;;2007:23:27::2;;;;;;;;;;;1934:96;7200:7:::0;7209:4;-1:-1:-1;;;;;2711:19:27;::::3;::::0;2707:128:::3;;2751:38;::::0;-1:-1:-1;;;2751:38:27;;7836:10:132;7824:23;;2751:38:27::3;::::0;::::3;7806:42:132::0;-1:-1:-1;;;;;2751:32:27;::::3;::::0;::::3;::::0;7779:18:132;;2751:38:27::3;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2746:78;;2798:26;;-1:-1:-1::0;;;2798:26:27::3;;;;;;;;;;;2746:78;7271:24:::4;::::0;::::4;;::::0;;;:18:::4;:24;::::0;;;;;-1:-1:-1;;;;;7271:35:27;;::::4;:24:::0;::::4;:35:::0;7267:69:::4;;7315:21;;-1:-1:-1::0;;;7315:21:27::4;;;;;;;;;;;7267:69;7346:24;::::0;::::4;;::::0;;;:18:::4;:24;::::0;;;;;;;;:34;;-1:-1:-1;;;;;;7346:34:27::4;-1:-1:-1::0;;;;;7346:34:27;::::4;::::0;;::::4;::::0;;;7395:36;;1966:42:132;;;2024:18;;;2017:60;7395:36:27::4;::::0;1939:18:132;7395:36:27::4;1794:289:132::0;3524:317:27;-1:-1:-1;;;;;3631:20:27;;;3602:11;3631:20;;;:11;:20;;;;;;;;:29;;;;;;;;;;;;;3670:165;;-1:-1:-1;3714:27:27;;;;;;;:18;:27;;;;;;-1:-1:-1;;;;;3714:27:27;;3755:69;;3787:37;;-1:-1:-1;;;3787:37:27;;;;;;;;;;;1552:180:74;1531:13:107;:11;:13::i;:::-;1642:11:74::1;-1:-1:-1::0;;;;;1630:23:74::1;:8;-1:-1:-1::0;;;;;1630:23:74::1;::::0;1626:63:::1;;1662:27;;-1:-1:-1::0;;;1662:27:74::1;;;;;;;;;;;1626:63;1699:26;1716:8;1699:16;:26::i;:::-;1552:180:::0;:::o;17931:209:75:-;-1:-1:-1;;;;;18073:27:75;;18018:4;18073:27;;;:16;:27;;;;;;;18041:92;;18053:7;;18062:9;;18018:4;;18101:14;;;;18053:7;18101:14;:::i;:::-;18073:43;;;;;;;;;;;;;;;;-1:-1:-1;18073:43:75;;;18117:14;;;;18073:59;;;;;;;;-1:-1:-1;;;;;18073:59:75;18041:11;:92::i;16136:148::-;16205:10;16195:21;;;;:9;:21;;;;;;;;;:33;;-1:-1:-1;;;;;;16195:33:75;-1:-1:-1;;;;;16195:33:75;;;;;;;;16243:34;;32670::132;;;32720:18;;;32713:43;16243:34:75;;32605:18:132;16243:34:75;;;;;;;;16136:148;:::o;9156:710:27:-;-1:-1:-1;;;;;1765:25:27;;;;;;:19;:25;;;;;;9295:4;;1765:25;;1760:68;;1799:29;;-1:-1:-1;;;1799:29:27;;;;;;;;;;;1760:68;9314:4;-1:-1:-1;;;;;2114:19:27;::::1;::::0;2110:146:::1;;2191:19;2165:4;-1:-1:-1::0;;;;;2153:32:27::1;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:57;;;;;;;;:::i;:::-;::::0;2149:96:::1;;2219:26;;-1:-1:-1::0;;;2219:26:27::1;;;;;;;;;;;2149:96;9337:4:::0;9343;-1:-1:-1;;;;;2711:19:27;::::2;::::0;2707:128:::2;;2751:38;::::0;-1:-1:-1;;;2751:38:27;;7836:10:132;7824:23;;2751:38:27::2;::::0;::::2;7806:42:132::0;-1:-1:-1;;;;;2751:32:27;::::2;::::0;::::2;::::0;7779:18:132;;2751:38:27::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2746:78;;2798:26;;-1:-1:-1::0;;;2798:26:27::2;;;;;;;;;;;2746:78;1531:13:107::3;:11;:13::i;:::-;9373:7:27::4;9384:1;9373:12:::0;9369:424:::4;;9462:34;::::0;::::4;;::::0;;;:28:::4;:34;::::0;;;;9455:41;;-1:-1:-1;;;;;;9455:41:27::4;::::0;;;::::4;::::0;9369:424:::4;;;9592:12;9581:7;:23;9577:61;;9613:25;;-1:-1:-1::0;;;9613:25:27::4;;;;;;;;;;;9577:61;9678:34;::::0;::::4;9652:23;9678:34:::0;;;:28:::4;:34;::::0;;;;9726:18;;-1:-1:-1;;;;;;9726:18:27::4;-1:-1:-1::0;;;;;9726:18:27;::::4;;::::0;;-1:-1:-1;9758:14:27::4;:24:::0;;;9369:424:::4;9807:52;9839:4;9845;9851:7;9807:52;;;;;;;;:::i;4016:359:28:-:0;4112:24;4130:5;4112:17;:24::i;:::-;4161:37;4174:5;4181:7;4190;4161:12;:37::i;:::-;:41;;4201:1;4161:41;:::i;:::-;-1:-1:-1;;;;;4151:51:28;:6;-1:-1:-1;;;;;4151:51:28;;4147:94;;4211:30;;-1:-1:-1;;;4211:30:28;;-1:-1:-1;;;;;8751:31:132;;4211:30:28;;;8733:50:132;8706:18;;4211:30:28;8589:200:132;4147:94:28;-1:-1:-1;;;;;4251:23:28;;;;;;:16;:23;;;;;;;;:32;;;;;;;;;;;;:41;;;;;;;;;:50;;-1:-1:-1;;4251:50:28;-1:-1:-1;;;;;4251:50:28;;;;;;;;4316:52;;32994:42:132;;;33052:18;;;33045:34;;;33095:18;;33088:60;;;;33179:2;33164:18;;33157:59;;;;4316:52:28;;32981:3:132;32966:19;4316:52:28;32767:455:132;3962:1043:75;-1:-1:-1;;;;;;;;;;;;;;;;;4141:20:75;;;;;;;;:::i;:::-;:47;;;;-1:-1:-1;4165:7:75;;-1:-1:-1;;;;;4165:7:75;:23;4141:47;4137:90;;;4197:30;;-1:-1:-1;;;4197:30:75;;;;;;;;;;;4137:90;-1:-1:-1;;;;;4295:22:75;;4280:12;4295:22;;;:13;:22;;;;;;;;4280:12;;4318:14;;;;:7;:14;:::i;:::-;4295:38;;;;;;;;;;;;;;;;-1:-1:-1;4295:38:75;;;4334:16;;;;4295:56;;;;;;;;:60;;-1:-1:-1;;;;;4295:56:75;;:60;:::i;:::-;4280:75;;4410:20;4433:300;;;;;;;;4461:5;-1:-1:-1;;;;;4433:300:75;;;;;4488:3;4433:300;;;;;;4513:7;-1:-1:-1;;;;;4433:300:75;;;;;4542:7;:14;;;;;;;;;;:::i;:::-;4433:300;;;;;;4580:7;:16;;;4433:300;;;;4616:68;4630:5;4637:3;4642:7;4651;:14;;;;;;;;;;:::i;:::-;4667:7;:16;;;4616:13;:68::i;:::-;4433:300;;;;4707:15;;;;:7;:15;:::i;:::-;4433:300;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4433:300:75;;;;-1:-1:-1;4410:323:75;;-1:-1:-1;4433:300:75;-1:-1:-1;4866:39:75;;-1:-1:-1;4881:7:75;4890:14;;;;:7;:14;:::i;4866:39::-;4843:62;-1:-1:-1;;;;;;4923:28:75;;;4952:6;4960:15;;;;:7;:15;:::i;:::-;4977:20;;;;;;;;:::i;:::-;4923:75;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;6264:511:27:-;1531:13:107;:11;:13::i;:::-;6376:62:27::1;::::0;-1:-1:-1;;;6376:62:27;;-1:-1:-1;;;6376:62:27::1;::::0;::::1;35734:52:132::0;-1:-1:-1;;;;;6376:31:27;::::1;::::0;::::1;::::0;35707:18:132;;6376:62:27::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6371:108;;6447:32;;-1:-1:-1::0;;;6447:32:27::1;;;;;;;;;;;6371:108;-1:-1:-1::0;;;;;6534:25:27;::::1;;::::0;;;:19:::1;:25;::::0;;;;;::::1;;6530:67;;;6568:29;;-1:-1:-1::0;;;6568:29:27::1;;;;;;;;;;;6530:67;-1:-1:-1::0;;;;;6657:25:27;::::1;;::::0;;;:19:::1;:25;::::0;;;;;;;:32;;-1:-1:-1;;6657:32:27::1;6685:4;6657:32:::0;;::::1;::::0;;;6699:19:::1;:30:::0;;;;::::1;::::0;;;;;;;;::::1;::::0;;-1:-1:-1;;;;;;6699:30:27::1;::::0;::::1;::::0;;6745:23;;8196:51:132;;;6745:23:27::1;::::0;8169:18:132;6745:23:27::1;8050:203:132::0;2543:215:107;1531:13;:11;:13::i;:::-;-1:-1:-1;;;;;2627:22:107;::::1;2623:91;;2672:31;::::0;-1:-1:-1;;;2672:31:107;;2700:1:::1;2672:31;::::0;::::1;8196:51:132::0;8169:18;;2672:31:107::1;8050:203:132::0;2623:91:107::1;2723:28;2742:8;2723:18;:28::i;6931:1169:28:-:0;-1:-1:-1;;;;;7160:27:28;;7108:18;7160:27;;;:16;:27;;;;;;;;:36;;;;;;;;;;:45;;;;;;;;;-1:-1:-1;;;;;7160:45:28;;;;7219:21;;;-1:-1:-1;7215:417:28;;;7388:1;7373:16;;7357:179;7396:6;-1:-1:-1;;;;;7391:11:28;:1;-1:-1:-1;;;;;7391:11:28;;7357:179;;7436:47;7452:9;7463:7;7472;7481:1;7436:15;:47::i;:::-;7431:86;;7492:25;;-1:-1:-1;;;7492:25:28;;-1:-1:-1;;;;;8751:31:132;;7492:25:28;;;8733:50:132;8706:18;;7492:25:28;8589:200:132;7431:86:28;7404:3;;7357:179;;;-1:-1:-1;;;;;;7553:27:28;;;;;;:16;:27;;;;;;;;:36;;;;;;;;;;:45;;;;;;;;:54;;-1:-1:-1;;7553:54:28;-1:-1:-1;;;;;7553:54:28;;;;;7215:417;7771:19;;;;;;;;;;-1:-1:-1;;;;;7823:29:28;;7800:20;7823:29;;;:18;:29;;;;;;:38;;;;;;;;;;:47;;;;;;;;-1:-1:-1;;;;;7823:55:28;;;;;;;;;;;;7771:19;;-1:-1:-1;7892:26:28;;;7888:94;;7927:55;;-1:-1:-1;;;7927:55:28;;;;;23498:25:132;;;23539:18;;;23532:34;;;23471:18;;7927:55:28;23324:248:132;7888:94:28;-1:-1:-1;;;;;;;8038:29:28;;;;;;;:18;:29;;;;;;;;:38;;;;;;;;;;;;:47;;;;;;;;;-1:-1:-1;;;;;8038:55:28;;;;;;;;;;;;8031:62;;;;-1:-1:-1;6931:1169:28;:::o;17257:209:75:-;17373:10;-1:-1:-1;;;;;17373:19:75;;;;;;:53;;-1:-1:-1;;;;;;17410:16:75;;;;;;;:9;:16;;;;;;;17396:10;:30;;17373:53;17369:90;;;17435:24;;-1:-1:-1;;;17435:24:75;;;;;;;;;;;6698:1355;6804:23;;:::i;:::-;6829:7;;6911:52;6921:7;6930:14;;;;:7;:14;:::i;:::-;-1:-1:-1;;;;;1291:22:28;;;;1233:12;1291:22;;;:13;6946:16:75;1291:22:28;;;;;;;:31;;;;;;;;;;;;;6946:16:75;;;;1291:42:28;;;;;1289:44;;-1:-1:-1;;1289:44:28;;;-1:-1:-1;;;;;1289:44:28;;;;;;;;;;;;1144:206;6911:52:75;6890:73;;7018:20;7041:312;;;;;;;;7069:11;-1:-1:-1;;;;;7041:312:75;;;;;7102:3;7041:312;;;;;;7127:7;-1:-1:-1;;;;;7041:312:75;;;;;7156:7;:14;;;;;;;;;;:::i;:::-;7041:312;;;;;;7194:7;:16;;;7041:312;;;;7230:74;7244:11;7257:3;7262:7;7271;:14;;;;;;;;;;:::i;7230:74::-;7041:312;;;;7327:15;;;;:7;:15;:::i;:::-;7041:312;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7041:312:75;;;;-1:-1:-1;7018:335:75;;-1:-1:-1;7041:312:75;-1:-1:-1;7441:39:75;;-1:-1:-1;7456:7:75;7465:14;;;;:7;:14;:::i;7441:39::-;7418:62;-1:-1:-1;7553:23:75;;-1:-1:-1;;;;;7608:27:75;;;7649:6;7669:15;;;;:7;:15;:::i;:::-;7698:20;;;;;;;;:::i;:::-;7608:120;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;7608:120:75;;;;;;;;;;;;:::i;:::-;7552:176;;-1:-1:-1;7552:176:75;-1:-1:-1;7909:56:75;7552:176;7935:15;;;;:7;:15;:::i;:::-;7952:12;7909:56;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;7984:47:75;;;;;;;;8001:11;;;;;7984:47;;-1:-1:-1;;;;;7984:47:75;;;;;;;;;;;;;;;-1:-1:-1;8033:12:75;-1:-1:-1;6698:1355:75;;;;;:::o;1353:136:74:-;1438:44;;-1:-1:-1;;;1438:44:74;;1476:4;1438:44;;;8196:51:132;1412:7:74;;1445:11;-1:-1:-1;;;;;1438:29:74;;;;8169:18:132;;1438:44:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1431:51;;1353:136;:::o;14358:669:75:-;14427:16;14459:13;14455:566;;;14506:7;;14499:40;;-1:-1:-1;;;14499:40:75;;14533:4;14499:40;;;8196:51:132;-1:-1:-1;;;;;14506:7:75;;;;14499:25;;8169:18:132;;14499:40:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14488:51;;14962:8;14974:1;14962:13;14958:52;;14984:26;;-1:-1:-1;;;14984:26:75;;;;;;;;;;;14958:52;14358:669;;;:::o;15288:488::-;15463:19;;:40;-1:-1:-1;15463:40:75;:86;;;15530:19;15507:9;:20;;;:42;15463:86;15459:311;;;15615:19;;15688:20;;;;15572:187;;-1:-1:-1;;;15572:187:75;;;;;37199:25:132;;;;37240:18;;;37233:34;;;37283:18;;;37276:34;37326:18;;;37319:34;;;37171:19;;15572:187:75;36968:391:132;12948:476:75;13133:13;;13129:88;;13162:44;13177:6;13185:9;13196;13162:14;:44::i;:::-;13242:9;13230;:21;13226:192;;;13332:61;13347:6;13355:14;13383:9;13371;:21;13332:14;:61::i;:::-;12948:476;;;;;:::o;997:298:74:-;1168:9;:13;1164:43;;1190:17;;-1:-1:-1;;;1190:17:74;;;;;;;;;;;1164:43;1217:71;1227:11;1240:9;1251;1262;1273:14;1217:9;:71::i;:::-;997:298;;;;:::o;1796:162:107:-;1684:7;1710:6;-1:-1:-1;;;;;1710:6:107;735:10:117;1855:23:107;1851:101;;1901:40;;-1:-1:-1;;;1901:40:107;;735:10:117;1901:40:107;;;8196:51:132;8169:18;;1901:40:107;8050:203:132;2912:187:107;2985:16;3004:6;;-1:-1:-1;;;;;3020:17:107;;;-1:-1:-1;;;;;;3020:17:107;;;;;;3052:40;;3004:6;;;;;;;3052:40;;2985:16;3052:40;2975:124;2912:187;:::o;16358:323:75:-;16505:4;16560:1;16540:17;-1:-1:-1;;;;;16540:21:75;;:134;;;-1:-1:-1;16616:58:75;;-1:-1:-1;;;;;;16616:58:75;;-1:-1:-1;;;;;16616:49:75;;;;;:58;;16666:7;;16616:58;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;3076:260:28:-;-1:-1:-1;;;;;3252:29:28;;3229:4;3252:29;;;:18;:29;;;;;;;;:38;;;;;;;;;;:47;;;;;;;;-1:-1:-1;;;;;3252:55:28;;;;;;;;;;:77;;3076:260;;;;;;:::o;896:222:44:-;-1:-1:-1;;;;;987:22:44;;983:129;;1025:19;1032:3;1037:6;1025;:19::i;983:129::-;1075:26;1081:6;1089:3;1094:6;1075:5;:26::i;16744:438:75:-;16888:4;-1:-1:-1;;;;;16923:33:75;;:13;;;;;;;;:::i;:::-;-1:-1:-1;;;;;16923:33:75;;:199;;;-1:-1:-1;;;;;;17024:29:75;;336:1:28;17024:29:75;;;:18;:29;;;;;;;;336:1:28;;17054:14:75;;;;:7;:14;:::i;:::-;17024:45;;;;;;;;;;;;;;;:61;17070:7;:14;;;17024:61;;;;;;;;;;;:76;17086:7;:13;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;17024:76:75;;;;;;;;;;;;-1:-1:-1;17024:76:75;;:98;;;16744:438;-1:-1:-1;;;;16744:438:75:o;1608:336:28:-;1784:12;1780:77;;1827:30;;-1:-1:-1;;;1827:30:28;;;;;;;;;;;1780:77;-1:-1:-1;;;;;1867:29:28;;;;;;;:18;:29;;;;;;;;:38;;;;;;;;;;;;:47;;;;;;;;;-1:-1:-1;;;;;1867:55:28;;;;;;;;:70;1608:336::o;169:288:43:-;339:7;392:6;400:7;-1:-1:-1;;;;;409:17:43;;375:74;;37896:3:132;37874:16;;;;-1:-1:-1;;;;;;37870:51:132;375:74:43;;;37858:64:132;37945:3;37994:16;;;-1:-1:-1;;;;;;37990:25:132;;;37977:11;;;37970:46;38032:12;;;38025:28;;;;38087:16;;;;38083:25;38069:12;;;38062:47;38125:12;;;38118:28;;;38162:12;;375:74:43;;;;;;;;;;;;365:85;;;;;;358:92;;169:288;;;;;;;:::o;12081:133:75:-;1531:13:107;:11;:13::i;:::-;12154:7:75::1;:18:::0;;-1:-1:-1;;;;;;12154:18:75::1;-1:-1:-1::0;;;;;12154:18:75;::::1;::::0;;::::1;::::0;;;12187:20:::1;::::0;8196:51:132;;;12187:20:75::1;::::0;8184:2:132;8169:18;12187:20:75::1;8050:203:132::0;696:194:44;-1:-1:-1;;;;;779:19:44;;775:58;;807:26;;-1:-1:-1;;;807:26:44;;;;;;;;;;;775:58;843:40;-1:-1:-1;;;;;843:27:44;;871:3;876:6;843:27;:40::i;438:252::-;-1:-1:-1;;;;;506:19:44;;502:58;;534:26;;-1:-1:-1;;;534:26:44;;;;;;;;;;;502:58;571:12;589:3;-1:-1:-1;;;;;589:8:44;606:6;589:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;570:48;;;633:7;628:55;;649:34;;-1:-1:-1;;;649:34:44;;-1:-1:-1;;;;;13013:32:132;;649:34:44;;;12995:51:132;13062:18;;;13055:34;;;12968:18;;649:34:44;12821:274:132;1271:160:115;1380:43;;;-1:-1:-1;;;;;13013:32:132;;1380:43:115;;;12995:51:132;13062:18;;;;13055:34;;;1380:43:115;;;;;;;;;;12968:18:132;;;;1380:43:115;;;;;;;;;-1:-1:-1;;;;;1380:43:115;-1:-1:-1;;;1380:43:115;;;7968:11;;1353:71;;1373:5;;1380:43;;-1:-1:-1;;;;1380:43:115;-1:-1:-1;;7968:11:115;-1:-1:-1;1373:5:115;7934;7929:60;8041:7;8031:176;;8085:4;8079:11;8130:16;8127:1;8122:3;8107:40;8176:16;8171:3;8164:29;8031:176;-1:-1:-1;;8284:1:115;8278:8;8234:16;;-1:-1:-1;8310:15:115;;:68;;8362:11;8377:1;8362:16;;8310:68;;;-1:-1:-1;;;;;8328:26:115;;;:31;8310:68;8306:146;;;8401:40;;-1:-1:-1;;;8401:40:115;;-1:-1:-1;;;;;8214:32:132;;8401:40:115;;;8196:51:132;8169:18;;8401:40:115;8050:203:132;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:154:132:-;73:5;118:2;109:6;104:3;100:16;96:25;93:45;;;134:1;131;124:12;93:45;-1:-1:-1;156:6:132;14:154;-1:-1:-1;14:154:132:o;173:173::-;241:20;;-1:-1:-1;;;;;290:31:132;;280:42;;270:70;;336:1;333;326:12;351:347;402:8;412:6;466:3;459:4;451:6;447:17;443:27;433:55;;484:1;481;474:12;433:55;-1:-1:-1;507:20:132;;-1:-1:-1;;;;;539:30:132;;536:50;;;582:1;579;572:12;536:50;619:4;611:6;607:17;595:29;;671:3;664:4;655:6;647;643:19;639:30;636:39;633:59;;;688:1;685;678:12;703:987;846:6;854;862;870;878;886;894;947:3;935:9;926:7;922:23;918:33;915:53;;;964:1;961;954:12;915:53;987;1032:7;1021:9;987:53;:::i;:::-;977:63;;1059:38;1093:2;1082:9;1078:18;1059:38;:::i;:::-;1049:48;;1144:3;1133:9;1129:19;1116:33;1106:43;;1200:3;1189:9;1185:19;1172:33;-1:-1:-1;;;;;1265:2:132;1257:6;1254:14;1251:34;;;1281:1;1278;1271:12;1251:34;1320:58;1370:7;1361:6;1350:9;1346:22;1320:58;:::i;:::-;1397:8;;-1:-1:-1;1294:84:132;-1:-1:-1;1485:3:132;1470:19;;1457:33;;-1:-1:-1;1502:16:132;;;1499:36;;;1531:1;1528;1521:12;1499:36;;1570:60;1622:7;1611:8;1600:9;1596:24;1570:60;:::i;:::-;703:987;;;;-1:-1:-1;703:987:132;;-1:-1:-1;703:987:132;;;;1544:86;;-1:-1:-1;;;703:987:132:o;2088:163::-;2155:20;;2215:10;2204:22;;2194:33;;2184:61;;2241:1;2238;2231:12;2256:401;2341:6;2349;2357;2365;2418:3;2406:9;2397:7;2393:23;2389:33;2386:53;;;2435:1;2432;2425:12;2386:53;2458:29;2477:9;2458:29;:::i;:::-;2448:39;;2506:37;2539:2;2528:9;2524:18;2506:37;:::i;:::-;2496:47;;2562:38;2596:2;2585:9;2581:18;2562:38;:::i;:::-;2256:401;;;;-1:-1:-1;2552:48:132;;2647:2;2632:18;2619:32;;-1:-1:-1;;2256:401:132:o;2662:469::-;2765:6;2773;2826:2;2814:9;2805:7;2801:23;2797:32;2794:52;;;2842:1;2839;2832:12;2794:52;2882:9;2869:23;-1:-1:-1;;;;;2907:6:132;2904:30;2901:50;;;2947:1;2944;2937:12;2901:50;2970:22;;3026:3;3008:16;;;3004:26;3001:46;;;3043:1;3040;3033:12;3001:46;3066:2;-1:-1:-1;3087:38:132;3121:2;3106:18;;3087:38;:::i;:::-;3077:48;;2662:469;;;;;:::o;3294:::-;3454:4;3496:3;3485:9;3481:19;3473:27;;3533:6;3527:13;3516:9;3509:32;-1:-1:-1;;;;;3601:4:132;3593:6;3589:17;3583:24;3579:49;3572:4;3561:9;3557:20;3550:79;3676:4;3668:6;3664:17;3658:24;3691:66;3751:4;3740:9;3736:20;3722:12;3214;;3202:25;;3276:4;3265:16;;;3259:23;3243:14;;3236:47;3136:153;3691:66;;3294:469;;;;:::o;3768:678::-;3891:6;3899;3907;3915;3923;3976:3;3964:9;3955:7;3951:23;3947:33;3944:53;;;3993:1;3990;3983:12;3944:53;4016:29;4035:9;4016:29;:::i;:::-;4006:39;;4064:62;4118:7;4113:2;4102:9;4098:18;4064:62;:::i;:::-;4054:72;;4173:3;4162:9;4158:19;4145:33;4135:43;;4229:3;4218:9;4214:19;4201:33;-1:-1:-1;;;;;4249:6:132;4246:30;4243:50;;;4289:1;4286;4279:12;4243:50;4328:58;4378:7;4369:6;4358:9;4354:22;4328:58;:::i;:::-;3768:678;;;;-1:-1:-1;3768:678:132;;-1:-1:-1;4405:8:132;;4302:84;3768:678;-1:-1:-1;;;3768:678:132:o;4451:405::-;4535:6;4543;4551;4559;4612:3;4600:9;4591:7;4587:23;4583:33;4580:53;;;4629:1;4626;4619:12;4580:53;4652:29;4671:9;4652:29;:::i;:::-;4642:39;;4700:38;4734:2;4723:9;4719:18;4700:38;:::i;:::-;4690:48;;4757:37;4790:2;4779:9;4775:18;4757:37;:::i;:::-;4747:47;;4813:37;4846:2;4835:9;4831:18;4813:37;:::i;:::-;4803:47;;4451:405;;;;;;;:::o;4861:250::-;4946:1;4956:113;4970:6;4967:1;4964:13;4956:113;;;5046:11;;;5040:18;5027:11;;;5020:39;4992:2;4985:10;4956:113;;;-1:-1:-1;;5103:1:132;5085:16;;5078:27;4861:250::o;5116:270::-;5157:3;5195:5;5189:12;5222:6;5217:3;5210:19;5238:76;5307:6;5300:4;5295:3;5291:14;5284:4;5277:5;5273:16;5238:76;:::i;:::-;5368:2;5347:15;-1:-1:-1;;5343:29:132;5334:39;;;;5375:4;5330:50;;5116:270;-1:-1:-1;;5116:270:132:o;5391:217::-;5538:2;5527:9;5520:21;5501:4;5558:44;5598:2;5587:9;5583:18;5575:6;5558:44;:::i;5795:171::-;5862:20;;-1:-1:-1;;;;;5911:30:132;;5901:41;;5891:69;;5956:1;5953;5946:12;5971:468;6064:6;6072;6080;6088;6096;6149:3;6137:9;6128:7;6124:23;6120:33;6117:53;;;6166:1;6163;6156:12;6117:53;6189:29;6208:9;6189:29;:::i;:::-;6179:39;;6237:37;6270:2;6259:9;6255:18;6237:37;:::i;:::-;6227:47;;6321:2;6310:9;6306:18;6293:32;6283:42;;6344:37;6377:2;6366:9;6362:18;6344:37;:::i;:::-;5971:468;;;;-1:-1:-1;5971:468:132;;6428:3;6413:19;6400:33;;5971:468;-1:-1:-1;;5971:468:132:o;6444:159::-;6511:20;;6571:6;6560:18;;6550:29;;6540:57;;6593:1;6590;6583:12;6608:401;6693:6;6701;6709;6717;6770:3;6758:9;6749:7;6745:23;6741:33;6738:53;;;6787:1;6784;6777:12;6738:53;6810:29;6829:9;6810:29;:::i;:::-;6800:39;;6858:38;6892:2;6881:9;6877:18;6858:38;:::i;:::-;6848:48;;6943:2;6932:9;6928:18;6915:32;6905:42;;6966:37;6999:2;6988:9;6984:18;6966:37;:::i;7014:258::-;7081:6;7089;7142:2;7130:9;7121:7;7117:23;7113:32;7110:52;;;7158:1;7155;7148:12;7110:52;7181:29;7200:9;7181:29;:::i;:::-;7171:39;;7229:37;7262:2;7251:9;7247:18;7229:37;:::i;7859:186::-;7918:6;7971:2;7959:9;7950:7;7946:23;7942:32;7939:52;;;7987:1;7984;7977:12;7939:52;8010:29;8029:9;8010:29;:::i;8258:326::-;8334:6;8342;8350;8403:2;8391:9;8382:7;8378:23;8374:32;8371:52;;;8419:1;8416;8409:12;8371:52;8442:29;8461:9;8442:29;:::i;:::-;8432:39;;8490:37;8523:2;8512:9;8508:18;8490:37;:::i;:::-;8480:47;;8574:2;8563:9;8559:18;8546:32;8536:42;;8258:326;;;;;:::o;8794:184::-;8852:6;8905:2;8893:9;8884:7;8880:23;8876:32;8873:52;;;8921:1;8918;8911:12;8873:52;8944:28;8962:9;8944:28;:::i;9175:1435::-;9338:6;9346;9354;9362;9370;9378;9386;9394;9402;9410;9418:7;9427;9481:3;9469:9;9460:7;9456:23;9452:33;9449:53;;;9498:1;9495;9488:12;9449:53;9521:29;9540:9;9521:29;:::i;:::-;9511:39;;9569:38;9603:2;9592:9;9588:18;9569:38;:::i;:::-;9559:48;;9654:2;9643:9;9639:18;9626:32;9616:42;;9677:37;9710:2;9699:9;9695:18;9677:37;:::i;:::-;9667:47;;9761:3;9750:9;9746:19;9733:33;9723:43;;9813:3;9802:9;9798:19;9785:33;9775:43;;-1:-1:-1;;;;;9861:3:132;9850:9;9846:19;9833:33;9830:57;9827:77;;;9900:1;9897;9890:12;9827:77;9939:85;10016:7;10008:3;9997:9;9993:19;9980:33;9969:9;9965:49;9939:85;:::i;:::-;10043:8;;-1:-1:-1;10070:8:132;-1:-1:-1;;;;;;10121:3:132;10106:19;;10093:33;10090:57;10087:77;;;10160:1;10157;10150:12;10087:77;10199:85;10276:7;10268:3;10257:9;10253:19;10240:33;10229:9;10225:49;10199:85;:::i;:::-;10303:8;;-1:-1:-1;10330:8:132;-1:-1:-1;;;;;;10381:3:132;10366:19;;10353:33;10350:57;10347:77;;;10420:1;10417;10410:12;10347:77;10461:85;10538:7;10530:3;10519:9;10515:19;10502:33;10491:9;10487:49;10461:85;:::i;:::-;10566:9;10555:20;;10595:9;10584:20;;;;9175:1435;;;;;;;;;;;;;;:::o;10615:1399::-;10796:6;10804;10812;10820;10828;10836;10844;10852;10860;10868;10876:7;10930:3;10918:9;10909:7;10905:23;10901:33;10898:53;;;10947:1;10944;10937:12;10898:53;10970;11015:7;11004:9;10970:53;:::i;:::-;10960:63;;11042:38;11076:2;11065:9;11061:18;11042:38;:::i;:::-;11032:48;;11127:3;11116:9;11112:19;11099:33;11089:43;;11179:3;11168:9;11164:19;11151:33;11141:43;;11231:3;11220:9;11216:19;11203:33;11193:43;;-1:-1:-1;;;;;11323:2:132;11316:3;11305:9;11301:19;11288:33;11285:41;11282:61;;;11339:1;11336;11329:12;11282:61;11378:85;11455:7;11447:3;11436:9;11432:19;11419:33;11408:9;11404:49;11378:85;:::i;:::-;11482:8;;-1:-1:-1;11509:8:132;-1:-1:-1;11560:3:132;11545:19;;11532:33;11529:41;-1:-1:-1;11526:61:132;;;11583:1;11580;11573:12;11526:61;11622:85;11699:7;11691:3;11680:9;11676:19;11663:33;11652:9;11648:49;11622:85;:::i;:::-;11726:8;;-1:-1:-1;11753:8:132;-1:-1:-1;11804:3:132;11789:19;;11776:33;11773:41;-1:-1:-1;11770:61:132;;;11827:1;11824;11817:12;11770:61;;11867:85;11944:7;11936:3;11925:9;11921:19;11908:33;11897:9;11893:49;11867:85;:::i;:::-;11971:8;11961:18;;11999:9;11988:20;;;;10615:1399;;;;;;;;;;;;;;:::o;12019:797::-;12157:6;12165;12173;12181;12234:2;12222:9;12213:7;12209:23;12205:32;12202:52;;;12250:1;12247;12240:12;12202:52;12273:29;12292:9;12273:29;:::i;:::-;12263:39;;12321:38;12355:2;12344:9;12340:18;12321:38;:::i;:::-;12311:48;;12410:2;12399:9;12395:18;12382:32;-1:-1:-1;;;;;12474:2:132;12466:6;12463:14;12460:34;;;12490:1;12487;12480:12;12460:34;12528:6;12517:9;12513:22;12503:32;;12573:7;12566:4;12562:2;12558:13;12554:27;12544:55;;12595:1;12592;12585:12;12544:55;12635:2;12622:16;12661:2;12653:6;12650:14;12647:34;;;12677:1;12674;12667:12;12647:34;12730:7;12725:2;12715:6;12712:1;12708:14;12704:2;12700:23;12696:32;12693:45;12690:65;;;12751:1;12748;12741:12;12690:65;12019:797;;;;-1:-1:-1;;12782:2:132;12774:11;;-1:-1:-1;;;12019:797:132:o;13100:624::-;13196:6;13204;13212;13220;13228;13281:3;13269:9;13260:7;13256:23;13252:33;13249:53;;;13298:1;13295;13288:12;13249:53;13321:29;13340:9;13321:29;:::i;:::-;13311:39;;13397:2;13386:9;13382:18;13369:32;13359:42;;13420:37;13453:2;13442:9;13438:18;13420:37;:::i;:::-;13410:47;;13508:2;13497:9;13493:18;13480:32;-1:-1:-1;;;;;13527:6:132;13524:30;13521:50;;;13567:1;13564;13557:12;13729:311;13823:6;13831;13884:3;13872:9;13863:7;13859:23;13855:33;13852:53;;;13901:1;13898;13891:12;13852:53;13924;13969:7;13958:9;13924:53;:::i;:::-;13914:63;;13996:38;14030:2;14019:9;14015:18;13996:38;:::i;14045:658::-;14216:2;14268:21;;;14338:13;;14241:18;;;14360:22;;;14187:4;;14216:2;14439:15;;;;14413:2;14398:18;;;14187:4;14482:195;14496:6;14493:1;14490:13;14482:195;;;14561:13;;-1:-1:-1;;;;;14557:39:132;14545:52;;14652:15;;;;14617:12;;;;14593:1;14511:9;14482:195;;;-1:-1:-1;14694:3:132;;14045:658;-1:-1:-1;;;;;;14045:658:132:o;14708:1008::-;14833:6;14841;14849;14857;14865;14873;14881;14889;14942:3;14930:9;14921:7;14917:23;14913:33;14910:53;;;14959:1;14956;14949:12;14910:53;14982:29;15001:9;14982:29;:::i;:::-;14972:39;;15030:38;15064:2;15053:9;15049:18;15030:38;:::i;:::-;15020:48;;15115:2;15104:9;15100:18;15087:32;15077:42;;15138:37;15171:2;15160:9;15156:18;15138:37;:::i;:::-;15128:47;;15226:3;15215:9;15211:19;15198:33;-1:-1:-1;;;;;15291:2:132;15283:6;15280:14;15277:34;;;15307:1;15304;15297:12;15277:34;15346:58;15396:7;15387:6;15376:9;15372:22;15346:58;:::i;:::-;15423:8;;-1:-1:-1;15320:84:132;-1:-1:-1;15511:3:132;15496:19;;15483:33;;-1:-1:-1;15528:16:132;;;15525:36;;;15557:1;15554;15547:12;15525:36;;15596:60;15648:7;15637:8;15626:9;15622:24;15596:60;:::i;:::-;14708:1008;;;;-1:-1:-1;14708:1008:132;;-1:-1:-1;14708:1008:132;;;;;;15675:8;-1:-1:-1;;;14708:1008:132:o;15721:332::-;15797:6;15805;15813;15866:2;15854:9;15845:7;15841:23;15837:32;15834:52;;;15882:1;15879;15872:12;15834:52;15905:29;15924:9;15905:29;:::i;:::-;15895:39;;15953:37;15986:2;15975:9;15971:18;15953:37;:::i;:::-;15943:47;;16009:38;16043:2;16032:9;16028:18;16009:38;:::i;:::-;15999:48;;15721:332;;;;;:::o;16058:326::-;16134:6;16142;16150;16203:2;16191:9;16182:7;16178:23;16174:32;16171:52;;;16219:1;16216;16209:12;16171:52;16242:28;16260:9;16242:28;:::i;:::-;16232:38;;16289;16323:2;16312:9;16308:18;16289:38;:::i;16389:328::-;16466:6;16474;16482;16535:2;16523:9;16514:7;16510:23;16506:32;16503:52;;;16551:1;16548;16541:12;16503:52;16574:29;16593:9;16574:29;:::i;16722:380::-;16825:6;16833;16841;16894:3;16882:9;16873:7;16869:23;16865:33;16862:53;;;16911:1;16908;16901:12;16862:53;16934;16979:7;16968:9;16934:53;:::i;:::-;16924:63;;17006:38;17040:2;17029:9;17025:18;17006:38;:::i;:::-;16996:48;;17091:3;17080:9;17076:19;17063:33;17053:43;;16722:380;;;;;:::o;17107:258::-;17174:6;17182;17235:2;17223:9;17214:7;17210:23;17206:32;17203:52;;;17251:1;17248;17241:12;17203:52;17274:28;17292:9;17274:28;:::i;17370:399::-;17454:6;17462;17470;17478;17531:3;17519:9;17510:7;17506:23;17502:33;17499:53;;;17548:1;17545;17538:12;17499:53;17571:29;17590:9;17571:29;:::i;:::-;17561:39;;17619:37;17652:2;17641:9;17637:18;17619:37;:::i;:::-;17609:47;;17703:2;17692:9;17688:18;17675:32;17665:42;;17726:37;17759:2;17748:9;17744:18;17726:37;:::i;17774:261::-;3214:12;;3202:25;;3276:4;3265:16;;;3259:23;3243:14;;;3236:47;17968:2;17953:18;;17980:49;3136:153;18040:184;18098:6;18151:2;18139:9;18130:7;18126:23;18122:32;18119:52;;;18167:1;18164;18157:12;18119:52;18190:28;18208:9;18190:28;:::i;18229:345::-;18426:6;18421:3;18414:19;18477:6;18469;18464:2;18459:3;18455:12;18442:42;18396:3;18507:16;;18525:2;18503:25;18537:13;;;18503:25;18229:345;-1:-1:-1;;18229:345:132:o;18579:285::-;18690:10;18664:24;18682:5;18664:24;:::i;:::-;18660:41;18655:3;18648:54;18758:4;18751:5;18747:16;18734:30;18727:4;18722:3;18718:14;18711:54;-1:-1:-1;;;;;18801:35:132;18830:4;18823:5;18819:16;18801:35;:::i;:::-;18797:60;18790:4;18785:3;18781:14;18774:84;;;18579:285::o;18869:266::-;18957:6;18952:3;18945:19;19009:6;19002:5;18995:4;18990:3;18986:14;18973:43;-1:-1:-1;19061:1:132;19036:16;;;19054:4;19032:27;;;19025:38;;;;19117:2;19096:15;;;-1:-1:-1;;19092:29:132;19083:39;;;19079:50;;18869:266::o;19140:752::-;19469:52;19511:9;19503:6;19469:52;:::i;:::-;19557:6;19552:2;19541:9;19537:18;19530:34;19601:3;19595;19584:9;19580:19;19573:32;19450:4;19628:62;19685:3;19674:9;19670:19;19662:6;19654;19628:62;:::i;:::-;-1:-1:-1;;;;;19727:32:132;;19747:3;19706:19;;19699:61;19797:22;;;19791:3;19776:19;;19769:51;19837:49;19801:6;19871;19863;19837:49;:::i;:::-;19829:57;19140:752;-1:-1:-1;;;;;;;;;;19140:752:132:o;19897:352::-;20109:3;20094:19;;20122:52;20098:9;20156:6;20122:52;:::i;:::-;-1:-1:-1;;;;;20210:32:132;;;;20205:2;20190:18;;;;20183:60;19897:352;;-1:-1:-1;19897:352:132:o;20254:127::-;20315:10;20310:3;20306:20;20303:1;20296:31;20346:4;20343:1;20336:15;20370:4;20367:1;20360:15;20386:279;20475:6;20528:2;20516:9;20507:7;20503:23;20499:32;20496:52;;;20544:1;20541;20534:12;20496:52;20576:9;20570:16;20615:1;20608:5;20605:12;20595:40;;20631:1;20628;20621:12;20670:118;20756:5;20749:13;20742:21;20735:5;20732:32;20722:60;;20778:1;20775;20768:12;20793:245;20860:6;20913:2;20901:9;20892:7;20888:23;20884:32;20881:52;;;20929:1;20926;20919:12;20881:52;20961:9;20955:16;20980:28;21002:5;20980:28;:::i;21043:462::-;-1:-1:-1;;;;;21328:15:132;;;21310:34;;21392:10;21380:23;;;;21375:2;21360:18;;21353:51;21440:15;;21435:2;21420:18;;21413:43;21487:2;21472:18;;21465:34;;;;21259:3;21244:19;;21043:462::o;21510:241::-;21566:6;21619:2;21607:9;21598:7;21594:23;21590:32;21587:52;;;21635:1;21632;21625:12;21587:52;21674:9;21661:23;21693:28;21715:5;21693:28;:::i;22149:127::-;22210:10;22205:3;22201:20;22198:1;22191:31;22241:4;22238:1;22231:15;22265:4;22262:1;22255:15;22281:698;22334:5;22387:3;22380:4;22372:6;22368:17;22364:27;22354:55;;22405:1;22402;22395:12;22354:55;22434:6;22428:13;-1:-1:-1;;;;;22497:2:132;22493;22490:10;22487:36;;;22503:18;;:::i;:::-;22578:2;22572:9;22546:2;22632:13;;-1:-1:-1;;22628:22:132;;;22652:2;22624:31;22620:40;22608:53;;;22676:18;;;22696:22;;;22673:46;22670:72;;;22722:18;;:::i;:::-;22762:10;22758:2;22751:22;22797:2;22789:6;22782:18;22843:3;22836:4;22831:2;22823:6;22819:15;22815:26;22812:35;22809:55;;;22860:1;22857;22850:12;22809:55;22873:76;22946:2;22939:4;22931:6;22927:17;22920:4;22912:6;22908:17;22873:76;:::i;22984:335::-;23063:6;23116:2;23104:9;23095:7;23091:23;23087:32;23084:52;;;23132:1;23129;23122:12;23084:52;23165:9;23159:16;-1:-1:-1;;;;;23190:6:132;23187:30;23184:50;;;23230:1;23227;23220:12;23184:50;23253:60;23305:7;23296:6;23285:9;23281:22;23253:60;:::i;23577:527::-;23862:10;23850:23;;;;23832:42;;23905:2;23890:18;;23883:34;;;;-1:-1:-1;;;;;23953:32:132;;;;23948:2;23933:18;;23926:60;-1:-1:-1;;;;;24022:31:132;24017:2;24002:18;;23995:59;24085:3;24070:19;;24063:35;23819:3;23804:19;;23577:527::o;24109:918::-;24488:6;24477:9;24470:25;24543:6;24535;24531:19;24526:2;24515:9;24511:18;24504:47;24587:6;24582:2;24571:9;24567:18;24560:34;24630:6;24625:2;24614:9;24610:18;24603:34;24674:3;24668;24657:9;24653:19;24646:32;24451:4;24701:62;24758:3;24747:9;24743:19;24735:6;24727;24701:62;:::i;:::-;24812:9;24804:6;24800:22;24794:3;24783:9;24779:19;24772:51;24846:49;24888:6;24880;24872;24846:49;:::i;:::-;24832:63;;24944:9;24936:6;24932:22;24926:3;24915:9;24911:19;24904:51;24972:49;25014:6;25006;24998;24972:49;:::i;:::-;24964:57;24109:918;-1:-1:-1;;;;;;;;;;;;;24109:918:132:o;25427:127::-;25488:10;25483:3;25479:20;25476:1;25469:31;25519:4;25516:1;25509:15;25543:4;25540:1;25533:15;25559:125;25624:9;;;25645:10;;;25642:36;;;25658:18;;:::i;26164:1006::-;26558:4;26587:3;26599:52;26641:9;26633:6;26599:52;:::i;:::-;26687:6;26682:2;26671:9;26667:18;26660:34;26731:6;26725:3;26714:9;26710:19;26703:35;26775:6;26769:3;26758:9;26754:19;26747:35;26819:2;26813:3;26802:9;26798:19;26791:31;26845:61;26902:2;26891:9;26887:18;26879:6;26871;26845:61;:::i;:::-;26831:75;;26955:9;26947:6;26943:22;26937:3;26926:9;26922:19;26915:51;26989:49;27031:6;27023;27015;26989:49;:::i;:::-;26975:63;;27087:9;27079:6;27075:22;27069:3;27058:9;27054:19;27047:51;27115:49;27157:6;27149;27141;27115:49;:::i;27175:1876::-;-1:-1:-1;;;;;27520:32:132;;27502:51;;27450:2;27572;27590:18;;;27583:30;;;27475:18;;;27648:22;;;27421:4;;27450:2;27689;;27707:18;;;27771:1;27767:14;;;27752:30;;27748:39;;27810:6;27421:4;27844:1178;27858:6;27855:1;27852:13;27844:1178;;;27923:22;;;-1:-1:-1;;27919:36:132;27907:49;;27995:20;;28070:14;28066:27;;;-1:-1:-1;;28062:41:132;28038:66;;28028:94;;28118:1;28115;28108:12;28028:94;28148:31;;28202:10;;28244:24;28148:31;28244:24;:::i;:::-;28240:33;28232:6;28225:49;28350:2;28315:33;28344:2;28337:5;28333:14;28315:33;:::i;:::-;28311:42;28306:2;28298:6;28294:15;28287:67;;28419:2;28412:5;28408:14;28395:28;28508:2;28504:7;28496:5;28480:14;28476:26;28472:40;28450:20;28446:67;28436:95;;28527:1;28524;28517:12;28436:95;28559:32;28667:16;;;;28618:21;-1:-1:-1;;;;;28699:30:132;;28696:50;;;28742:1;28739;28732:12;28696:50;28795:6;28779:14;28775:27;28766:7;28762:41;28759:61;;;28816:1;28813;28806:12;28759:61;28857:2;28852;28844:6;28840:15;28833:27;28883:59;28938:2;28930:6;28926:15;28918:6;28909:7;28883:59;:::i;:::-;29000:12;;;;28873:69;-1:-1:-1;;;28965:15:132;;;;27880:1;27873:9;27844:1178;;;-1:-1:-1;29039:6:132;;27175:1876;-1:-1:-1;;;;;;;;;;27175:1876:132:o;29056:271::-;29239:6;29231;29226:3;29213:33;29195:3;29265:16;;29290:13;;;29265:16;29056:271;-1:-1:-1;29056:271:132:o;29332:598::-;-1:-1:-1;;;;;29637:15:132;;;29619:34;;29689:15;;29684:2;29669:18;;29662:43;29736:2;29721:18;;29714:34;;;29796:6;29784:19;;29779:2;29764:18;;29757:47;29599:3;29835;29820:19;;29813:32;;;29562:4;;29862:62;;29904:19;;29896:6;29888;29862:62;:::i;:::-;29854:70;29332:598;-1:-1:-1;;;;;;;;29332:598:132:o;29935:703::-;30195:4;30241:1;30237;30232:3;30228:11;30224:19;30282:2;30274:6;30270:15;30259:9;30252:34;30322:6;30317:2;30306:9;30302:18;30295:34;30365:3;30360:2;30349:9;30345:18;30338:31;30392:62;30449:3;30438:9;30434:19;30426:6;30418;30392:62;:::i;:::-;30502:2;30494:6;30490:15;30485:2;30474:9;30470:18;30463:43;30555:9;30547:6;30543:22;30537:3;30526:9;30522:19;30515:51;30583:49;30625:6;30617;30609;30583:49;:::i;:::-;30575:57;29935:703;-1:-1:-1;;;;;;;;;;;29935:703:132:o;31106:360::-;31336:10;31324:23;;;;31306:42;;-1:-1:-1;;;;;31384:32:132;;;;31379:2;31364:18;;31357:60;31448:2;31433:18;;31426:34;31294:2;31279:18;;31106:360::o;31844:424::-;32084:3;32069:19;;32097:52;32073:9;32131:6;32097:52;:::i;:::-;-1:-1:-1;;;;;32185:32:132;;;;32180:2;32165:18;;32158:60;32249:3;32234:19;32227:35;31844:424;;-1:-1:-1;31844:424:132:o;32273:180::-;-1:-1:-1;;;;;32378:10:132;;;32390;;;32374:27;;32413:11;;;32410:37;;;32427:18;;:::i;33227:521::-;33304:4;33310:6;33370:11;33357:25;33464:2;33460:7;33449:8;33433:14;33429:29;33425:43;33405:18;33401:68;33391:96;;33483:1;33480;33473:12;33391:96;33510:33;;33562:20;;;-1:-1:-1;;;;;;33594:30:132;;33591:50;;;33637:1;33634;33627:12;33591:50;33670:4;33658:17;;-1:-1:-1;33701:14:132;33697:27;;;33687:38;;33684:58;;;33738:1;33735;33728:12;33753:1085;34008:2;33990:21;;;34051:13;;-1:-1:-1;;;;;34047:38:132;34027:18;;;34020:66;34145:4;34133:17;;34127:24;34153:10;34123:41;34117:3;34102:19;;34095:70;34224:4;34212:17;;34206:24;-1:-1:-1;;;;;34202:50:132;34240:3;34181:19;;34174:79;34288:15;;34282:22;-1:-1:-1;;34313:52:132;34360:3;34345:19;;34282:22;1771:10;1760:22;1748:35;;1695:94;34313:52;;34421:3;34413:6;34409:16;34403:23;34396:4;34385:9;34381:20;34374:53;34482:3;34474:6;34470:16;34464:23;34458:3;34447:9;34443:19;34436:52;34537:3;34529:6;34525:16;34519:23;34579:4;34573:3;34562:9;34558:19;34551:33;34604:53;34652:3;34641:9;34637:19;34621:14;34604:53;:::i;:::-;34593:64;;34704:9;34699:3;34695:19;34688:4;34677:9;34673:20;34666:49;34732:46;34774:3;34766:6;34758;34732:46;:::i;:::-;34724:54;;;34787:45;34826:4;34815:9;34811:20;34803:6;7347:13;7340:21;7328:34;;7277:91;34843:478;34913:5;34961:4;34949:9;34944:3;34940:19;34936:30;34933:50;;;34979:1;34976;34969:12;34933:50;35012:4;35006:11;35056:4;35048:6;35044:17;35127:6;35115:10;35112:22;-1:-1:-1;;;;;35079:10:132;35076:34;35073:62;35070:88;;;35138:18;;:::i;:::-;35174:4;35167:24;35239:16;;35224:32;;35310:2;35295:18;;;35289:25;35272:15;;;35265:50;;;;-1:-1:-1;35209:6:132;34843:478;-1:-1:-1;34843:478:132:o;35326:259::-;35426:6;35479:2;35467:9;35458:7;35454:23;35450:32;35447:52;;;35495:1;35492;35485:12;35447:52;35518:61;35571:7;35560:9;35518:61;:::i;35797:471::-;35915:6;35923;35976:2;35964:9;35955:7;35951:23;35947:32;35944:52;;;35992:1;35989;35982:12;35944:52;36015:61;36068:7;36057:9;36015:61;:::i;:::-;36005:71;;36120:2;36109:9;36105:18;36099:25;-1:-1:-1;;;;;36139:6:132;36136:30;36133:50;;;36179:1;36176;36169:12;36133:50;36202:60;36254:7;36245:6;36234:9;36230:22;36202:60;:::i;:::-;36192:70;;;35797:471;;;;;:::o;36273:501::-;36504:2;36493:9;36486:21;36467:4;36530:44;36570:2;36559:9;36555:18;36547:6;36530:44;:::i;:::-;36622:9;36614:6;36610:22;36605:2;36594:9;36590:18;36583:50;36650:49;36692:6;36684;36676;36650:49;:::i;:::-;36642:57;;;36764:1;36760;36755:3;36751:11;36747:19;36739:6;36735:32;36730:2;36719:9;36715:18;36708:60;36273:501;;;;;;;:::o;36779:184::-;36849:6;36902:2;36890:9;36881:7;36877:23;36873:32;36870:52;;;36918:1;36915;36908:12;36870:52;-1:-1:-1;36941:16:132;;36779:184;-1:-1:-1;36779:184:132:o;37364:254::-;37548:2;37533:18;;37560:52;37537:9;37594:6;37560:52;:::i", - "linkReferences": {}, - "immutableReferences": { - "18145": [ - { "start": 2922, "length": 32 }, - { "start": 10875, "length": 32 }, - { "start": 14251, "length": 32 }, - { "start": 14686, "length": 32 } - ], - "6047": [{ "start": 1921, "length": 32 }], - "7028": [ - { "start": 1329, "length": 32 }, - { "start": 10153, "length": 32 }, - { "start": 12203, "length": 32 }, - { "start": 12306, "length": 32 }, - { "start": 13696, "length": 32 }, - { "start": 13799, "length": 32 } - ] - } - }, - "methodIdentifiers": { - "EMPTY_PAYLOAD_HASH()": "cb5026b9", - "NIL_PAYLOAD_HASH()": "2baf0be7", - "blockedLibrary()": "73318091", - "burn(address,uint32,bytes32,uint64,bytes32)": "40f80683", - "clear(address,(uint32,bytes32,uint64),bytes32,bytes)": "2a56c1b0", - "composeQueue(address,address,bytes32,uint16)": "35d330b0", - "defaultReceiveLibrary(uint32)": "6f50a803", - "defaultReceiveLibraryTimeout(uint32)": "6e83f5bb", - "defaultSendLibrary(uint32)": "f64be4c7", - "delegates(address)": "587cde1e", - "eid()": "416ecebf", - "getConfig(address,address,uint32,uint32)": "2b3197b9", - "getReceiveLibrary(address,uint32)": "402f8468", - "getRegisteredLibraries()": "9132e5c3", - "getSendContext()": "14f651a9", - "getSendLibrary(address,uint32)": "b96a277f", - "inboundNonce(address,uint32,bytes32)": "a0dd43fc", - "inboundPayloadHash(address,uint32,bytes32,uint64)": "c9fc7bcd", - "initializable((uint32,bytes32,uint64),address)": "861e1ca5", - "isDefaultSendLibrary(address,uint32)": "dc93c8a2", - "isRegisteredLibrary(address)": "dc706a62", - "isSendingMessage()": "79624ca9", - "isSupportedEid(uint32)": "6750cd4c", - "isValidReceiveLibrary(address,uint32,address)": "9d7f9775", - "lazyInboundNonce(address,uint32,bytes32)": "5b17bb70", - "lzCompose(address,address,bytes32,uint16,bytes,bytes)": "91d20fa1", - "lzComposeAlert(address,address,bytes32,uint16,uint256,uint256,bytes,bytes,bytes)": "697fe6b6", - "lzReceive((uint32,bytes32,uint64),address,bytes32,bytes,bytes)": "0c0c389e", - "lzReceiveAlert((uint32,bytes32,uint64),address,bytes32,uint256,uint256,bytes,bytes,bytes)": "6bf73fa3", - "lzToken()": "e4fe1d94", - "nativeToken()": "e1758bd8", - "nextGuid(address,uint32,bytes32)": "aafe5e07", - "nilify(address,uint32,bytes32,uint64,bytes32)": "2e80fbf3", - "outboundNonce(address,uint32,bytes32)": "9c6d7340", - "owner()": "8da5cb5b", - "quote((uint32,bytes32,bytes,bytes,bool),address)": "ddc28c58", - "receiveLibraryTimeout(address,uint32)": "ef667aa1", - "recoverToken(address,address,uint256)": "a7229fd9", - "registerLibrary(address)": "e8964e81", - "renounceOwnership()": "715018a6", - "send((uint32,bytes32,bytes,bytes,bool),address)": "2637a450", - "sendCompose(address,bytes32,uint16,bytes)": "7cb59012", - "setConfig(address,address,(uint32,uint32,bytes)[])": "6dbd9f90", - "setDefaultReceiveLibrary(uint32,address,uint256)": "a718531b", - "setDefaultReceiveLibraryTimeout(uint32,address,uint256)": "d4b4ec8f", - "setDefaultSendLibrary(uint32,address)": "aafea312", - "setDelegate(address)": "ca5eb5e1", - "setLzToken(address)": "c28e0eed", - "setReceiveLibrary(address,uint32,address,uint256)": "6a14d715", - "setReceiveLibraryTimeout(address,uint32,address,uint256)": "183c834f", - "setSendLibrary(address,uint32,address)": "9535ff30", - "skip(address,uint32,bytes32,uint64)": "d70b8902", - "transferOwnership(address)": "f2fde38b", - "verifiable((uint32,bytes32,uint64),address)": "c9a54a99", - "verify((uint32,bytes32,uint64),address,bytes32)": "a825d747" - }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_altToken\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"LZ_AlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_ComposeExists\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"expected\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"actual\",\"type\":\"bytes32\"}],\"name\":\"LZ_ComposeNotFound\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_DefaultReceiveLibUnavailable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_DefaultSendLibUnavailable\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"requiredNative\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"suppliedNative\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requiredLzToken\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"suppliedLzToken\",\"type\":\"uint256\"}],\"name\":\"LZ_InsufficientFee\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_InvalidArgument\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_InvalidExpiry\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"name\":\"LZ_InvalidNonce\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_InvalidPayloadHash\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_InvalidReceiveLibrary\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_LzTokenUnavailable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_OnlyAltToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_OnlyNonDefaultLib\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_OnlyReceiveLib\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_OnlyRegisteredLib\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_OnlyRegisteredOrDefaultLib\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_OnlySendLib\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_PathNotInitializable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_PathNotVerifiable\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"expected\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"actual\",\"type\":\"bytes32\"}],\"name\":\"LZ_PayloadHashNotFound\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_SameValue\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_SendReentrancy\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_Unauthorized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_UnsupportedEid\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_UnsupportedInterface\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_ZeroLzTokenFee\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"Transfer_NativeFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Transfer_ToAddressIsZero\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"index\",\"type\":\"uint16\"}],\"name\":\"ComposeDelivered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"index\",\"type\":\"uint16\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"ComposeSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newLib\",\"type\":\"address\"}],\"name\":\"DefaultReceiveLibrarySet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldLib\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"expiry\",\"type\":\"uint256\"}],\"name\":\"DefaultReceiveLibraryTimeoutSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newLib\",\"type\":\"address\"}],\"name\":\"DefaultSendLibrarySet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"delegate\",\"type\":\"address\"}],\"name\":\"DelegateSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"name\":\"InboundNonceSkipped\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newLib\",\"type\":\"address\"}],\"name\":\"LibraryRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"executor\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"index\",\"type\":\"uint16\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gas\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"reason\",\"type\":\"bytes\"}],\"name\":\"LzComposeAlert\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"executor\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"indexed\":false,\"internalType\":\"struct Origin\",\"name\":\"origin\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gas\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"reason\",\"type\":\"bytes\"}],\"name\":\"LzReceiveAlert\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"LzTokenSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"payloadHash\",\"type\":\"bytes32\"}],\"name\":\"PacketBurnt\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"indexed\":false,\"internalType\":\"struct Origin\",\"name\":\"origin\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"PacketDelivered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"payloadHash\",\"type\":\"bytes32\"}],\"name\":\"PacketNilified\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"encodedPayload\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"options\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sendLibrary\",\"type\":\"address\"}],\"name\":\"PacketSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"indexed\":false,\"internalType\":\"struct Origin\",\"name\":\"origin\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"payloadHash\",\"type\":\"bytes32\"}],\"name\":\"PacketVerified\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newLib\",\"type\":\"address\"}],\"name\":\"ReceiveLibrarySet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldLib\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timeout\",\"type\":\"uint256\"}],\"name\":\"ReceiveLibraryTimeoutSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newLib\",\"type\":\"address\"}],\"name\":\"SendLibrarySet\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"EMPTY_PAYLOAD_HASH\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"NIL_PAYLOAD_HASH\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"blockedLibrary\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_oapp\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"_nonce\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"_payloadHash\",\"type\":\"bytes32\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_oapp\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"_origin\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"_guid\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"}],\"name\":\"clear\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"internalType\":\"uint16\",\"name\":\"index\",\"type\":\"uint16\"}],\"name\":\"composeQueue\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageHash\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"}],\"name\":\"defaultReceiveLibrary\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"lib\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"}],\"name\":\"defaultReceiveLibraryTimeout\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"lib\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"expiry\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"}],\"name\":\"defaultSendLibrary\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"lib\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"oapp\",\"type\":\"address\"}],\"name\":\"delegates\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"delegate\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"eid\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_oapp\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_lib\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"_configType\",\"type\":\"uint32\"}],\"name\":\"getConfig\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"config\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_srcEid\",\"type\":\"uint32\"}],\"name\":\"getReceiveLibrary\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"lib\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isDefault\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRegisteredLibraries\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSendContext\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_dstEid\",\"type\":\"uint32\"}],\"name\":\"getSendLibrary\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"lib\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_sender\",\"type\":\"bytes32\"}],\"name\":\"inboundNonce\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"inboundNonce\",\"type\":\"uint64\"}],\"name\":\"inboundPayloadHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"payloadHash\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"_origin\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"}],\"name\":\"initializable\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_dstEid\",\"type\":\"uint32\"}],\"name\":\"isDefaultSendLibrary\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"lib\",\"type\":\"address\"}],\"name\":\"isRegisteredLibrary\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isSendingMessage\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"}],\"name\":\"isSupportedEid\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_srcEid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"_actualReceiveLib\",\"type\":\"address\"}],\"name\":\"isValidReceiveLibrary\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"}],\"name\":\"lazyInboundNonce\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_guid\",\"type\":\"bytes32\"},{\"internalType\":\"uint16\",\"name\":\"_index\",\"type\":\"uint16\"},{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"lzCompose\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_guid\",\"type\":\"bytes32\"},{\"internalType\":\"uint16\",\"name\":\"_index\",\"type\":\"uint16\"},{\"internalType\":\"uint256\",\"name\":\"_gas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_reason\",\"type\":\"bytes\"}],\"name\":\"lzComposeAlert\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"_origin\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_guid\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"lzReceive\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"_origin\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_guid\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_gas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_reason\",\"type\":\"bytes\"}],\"name\":\"lzReceiveAlert\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lzToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nativeToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_receiver\",\"type\":\"bytes32\"}],\"name\":\"nextGuid\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_oapp\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"_nonce\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"_payloadHash\",\"type\":\"bytes32\"}],\"name\":\"nilify\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"receiver\",\"type\":\"bytes32\"}],\"name\":\"outboundNonce\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"receiver\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"options\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"payInLzToken\",\"type\":\"bool\"}],\"internalType\":\"struct MessagingParams\",\"name\":\"_params\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"}],\"name\":\"quote\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nativeFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lzTokenFee\",\"type\":\"uint256\"}],\"internalType\":\"struct MessagingFee\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"}],\"name\":\"receiveLibraryTimeout\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"lib\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"expiry\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"recoverToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_lib\",\"type\":\"address\"}],\"name\":\"registerLibrary\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"receiver\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"options\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"payInLzToken\",\"type\":\"bool\"}],\"internalType\":\"struct MessagingParams\",\"name\":\"_params\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"_refundAddress\",\"type\":\"address\"}],\"name\":\"send\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nativeFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lzTokenFee\",\"type\":\"uint256\"}],\"internalType\":\"struct MessagingFee\",\"name\":\"fee\",\"type\":\"tuple\"}],\"internalType\":\"struct MessagingReceipt\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_guid\",\"type\":\"bytes32\"},{\"internalType\":\"uint16\",\"name\":\"_index\",\"type\":\"uint16\"},{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"}],\"name\":\"sendCompose\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_oapp\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_lib\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"configType\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"config\",\"type\":\"bytes\"}],\"internalType\":\"struct SetConfigParam[]\",\"name\":\"_params\",\"type\":\"tuple[]\"}],\"name\":\"setConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"_newLib\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_gracePeriod\",\"type\":\"uint256\"}],\"name\":\"setDefaultReceiveLibrary\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"_lib\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_expiry\",\"type\":\"uint256\"}],\"name\":\"setDefaultReceiveLibraryTimeout\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"_newLib\",\"type\":\"address\"}],\"name\":\"setDefaultSendLibrary\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_delegate\",\"type\":\"address\"}],\"name\":\"setDelegate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_lzToken\",\"type\":\"address\"}],\"name\":\"setLzToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_oapp\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"_newLib\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_gracePeriod\",\"type\":\"uint256\"}],\"name\":\"setReceiveLibrary\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_oapp\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"_lib\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_expiry\",\"type\":\"uint256\"}],\"name\":\"setReceiveLibraryTimeout\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_oapp\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"_newLib\",\"type\":\"address\"}],\"name\":\"setSendLibrary\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_oapp\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"_nonce\",\"type\":\"uint64\"}],\"name\":\"skip\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"_origin\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"}],\"name\":\"verifiable\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"_origin\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_payloadHash\",\"type\":\"bytes32\"}],\"name\":\"verify\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}],\"SafeERC20FailedOperation(address)\":[{\"details\":\"An operation with an ERC-20 token failed.\"}]},\"kind\":\"dev\",\"methods\":{\"burn(address,uint32,bytes32,uint64,bytes32)\":{\"details\":\"Marks a nonce as unexecutable and un-verifiable. The nonce can never be re-verified or executed.Reverts if the provided _payloadHash does not match the currently verified payload hash.Only packets with nonces less than or equal to the lazy inbound nonce can be burned.Reverts if the nonce has already been executed.Authenticated by the caller\"},\"clear(address,(uint32,bytes32,uint64),bytes32,bytes)\":{\"details\":\"Oapp uses this interface to clear a message.this is a PULL mode versus the PUSH mode of lzReceivethe cleared message can be ignored by the app (effectively burnt)authenticated by oapp\",\"params\":{\"_guid\":\"the guid of the message\",\"_message\":\"the message\",\"_origin\":\"the origin of the message\"}},\"getConfig(address,address,uint32,uint32)\":{\"details\":\"a view function to query the current configuration of the OApp\"},\"getReceiveLibrary(address,uint32)\":{\"details\":\"the receiveLibrary can be lazily resolved that if not set it will point to the default configured by LayerZero\"},\"getSendContext()\":{\"details\":\"returns (eid, sender) if sending message, (0, 0) otherwise\"},\"getSendLibrary(address,uint32)\":{\"details\":\"If the Oapp does not have a selected Send Library, this function will resolve to the default library configured by LayerZero\",\"params\":{\"_dstEid\":\"The destination endpoint id\",\"_sender\":\"The address of the Oapp that is sending the message\"},\"returns\":{\"lib\":\"address of the Send Library\"}},\"inboundNonce(address,uint32,bytes32)\":{\"details\":\"returns the max index of the longest gapless sequence of verified msg nonces.the uninitialized value is 0. the first nonce is always 1it starts from the lazyInboundNonce (last checkpoint) and iteratively check if the next nonce has been verifiedthis function can OOG if too many backlogs, but it can be trivially fixed by just clearing some prior messagesNOTE: Oapp explicitly skipped nonces count as \\\"verified\\\" for these purposeseg. [1,2,3,4,6,7] => 4, [1,2,6,8,10] => 2, [1,3,4,5,6] => 1\"},\"isSendingMessage()\":{\"details\":\"returns true if sending message\"},\"isSupportedEid(uint32)\":{\"details\":\"returns true only if both the default send/receive libraries are set\"},\"isValidReceiveLibrary(address,uint32,address)\":{\"details\":\"called when the endpoint checks if the msgLib attempting to verify the msg is the configured msgLib of the Oappthis check provides the ability for Oapp to lock in a trusted msgLibit will fist check if the msgLib is the currently configured one. then check if the msgLib is the one in grace period of msgLib versioning upgrade\"},\"lzCompose(address,address,bytes32,uint16,bytes,bytes)\":{\"details\":\"execute a composed messages from the sender to the composer (receiver)the execution provides the execution context (caller, extraData) to the receiver. the receiver can optionally assert the caller and validate the untrusted extraDatacan not re-entrant\",\"params\":{\"_extraData\":\"the extra data provided by the executor. this data is untrusted and should be validated.\",\"_from\":\"the address which sends the composed message. in most cases, it is the Oapp's address.\",\"_guid\":\"the message guid\",\"_message\":\"the message\",\"_to\":\"the address which receives the composed message\"}},\"lzComposeAlert(address,address,bytes32,uint16,uint256,uint256,bytes,bytes,bytes)\":{\"params\":{\"_extraData\":\"the extra data provided by the executor\",\"_from\":\"the address which sends the composed message\",\"_guid\":\"the message guid\",\"_message\":\"the message\",\"_reason\":\"the reason why the message is not received\",\"_to\":\"the address which receives the composed message\"}},\"lzReceive((uint32,bytes32,uint64),address,bytes32,bytes,bytes)\":{\"details\":\"MESSAGING STEP 3 - the last stepexecute a verified message to the designated receiverthe execution provides the execution context (caller, extraData) to the receiver. the receiver can optionally assert the caller and validate the untrusted extraDatacant reentrant because the payload is cleared before execution\",\"params\":{\"_extraData\":\"the extra data provided by the executor. this data is untrusted and should be validated.\",\"_guid\":\"the guid of the message\",\"_message\":\"the message\",\"_origin\":\"the origin of the message\",\"_receiver\":\"the receiver of the message\"}},\"lzReceiveAlert((uint32,bytes32,uint64),address,bytes32,uint256,uint256,bytes,bytes,bytes)\":{\"params\":{\"_extraData\":\"the extra data provided by the executor.\",\"_guid\":\"the guid of the message\",\"_message\":\"the message\",\"_origin\":\"the origin of the message\",\"_reason\":\"the reason for failure\",\"_receiver\":\"the receiver of the message\"}},\"nativeToken()\":{\"details\":\"override this if the endpoint is charging ERC20 tokens as native\",\"returns\":{\"_0\":\"0x0 if using native. otherwise the address of the native ERC20 token\"}},\"nextGuid(address,uint32,bytes32)\":{\"details\":\"returns the GUID for the next message given the paththe Oapp might want to include the GUID into the message in some cases\"},\"nilify(address,uint32,bytes32,uint64,bytes32)\":{\"details\":\"Marks a packet as verified, but disallows execution until it is re-verified.Reverts if the provided _payloadHash does not match the currently verified payload hash.A non-verified nonce can be nilified by passing EMPTY_PAYLOAD_HASH for _payloadHash.Assumes the computational intractability of finding a payload that hashes to bytes32.max.Authenticated by the caller\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"quote((uint32,bytes32,bytes,bytes,bool),address)\":{\"details\":\"MESSAGING STEP 0\",\"params\":{\"_params\":\"the messaging parameters\",\"_sender\":\"the sender of the message\"}},\"recoverToken(address,address,uint256)\":{\"details\":\"recover the token sent to this contract by mistakeonly owner\",\"params\":{\"_amount\":\"the amount to send\",\"_to\":\"the address to send the token to\",\"_token\":\"the token to recover. if 0x0 then it is native token\"}},\"registerLibrary(address)\":{\"details\":\"all libraries have to implement the erc165 interface to prevent wrong configurationsonly owner\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"send((uint32,bytes32,bytes,bytes,bool),address)\":{\"details\":\"MESSAGING STEP 1 - OApp need to transfer the fees to the endpoint before sending the message\",\"params\":{\"_params\":\"the messaging parameters\",\"_refundAddress\":\"the address to refund both the native and lzToken\"}},\"sendCompose(address,bytes32,uint16,bytes)\":{\"details\":\"the Oapp sends the lzCompose message to the endpointthe composer MUST assert the sender because anyone can send compose msg with this functionwith the same GUID, the Oapp can send compose to multiple _composer at the same timeauthenticated by the msg.sender\",\"params\":{\"_guid\":\"the message guid\",\"_message\":\"the message\",\"_to\":\"the address which will receive the composed message\"}},\"setConfig(address,address,(uint32,uint32,bytes)[])\":{\"details\":\"authenticated by the _oapp\"},\"setDefaultReceiveLibrary(uint32,address,uint256)\":{\"details\":\"owner setting the defaultSendLibrarymust be a registered library (including blockLibrary) with the eid support enabledin version migration, it can add a grace period to the old library. if the grace period is 0, it will delete the timeout configuration.only owner\"},\"setDefaultReceiveLibraryTimeout(uint32,address,uint256)\":{\"details\":\"owner setting the defaultSendLibrarymust be a registered library (including blockLibrary) with the eid support enabledcan used to (1) extend the current configuration (2) force remove the current configuration (3) change to a new configuration\",\"params\":{\"_expiry\":\"the block number when lib expires\"}},\"setDefaultSendLibrary(uint32,address)\":{\"details\":\"owner setting the defaultSendLibrarycan set to the blockedLibrary, which is a registered librarythe msgLib must enable the support before they can be registered to the endpoint as the defaultonly owner\"},\"setLzToken(address)\":{\"details\":\"check if lzToken is set to the same address\"},\"setReceiveLibrary(address,uint32,address,uint256)\":{\"details\":\"Oapp setting the receiveLibrarymust be a registered library (including blockLibrary) with the eid support enabledin version migration, it can add a grace period to the old library. if the grace period is 0, it will delete the timeout configuration.authenticated by the Oapp\",\"params\":{\"_gracePeriod\":\"the number of blocks from now until oldLib expires\"}},\"setReceiveLibraryTimeout(address,uint32,address,uint256)\":{\"details\":\"Oapp setting the defaultSendLibrarymust be a registered library (including blockLibrary) with the eid support enabledcan used to (1) extend the current configuration (2) force remove the current configuration (3) change to a new configuration\",\"params\":{\"_expiry\":\"the block number when lib expires\"}},\"setSendLibrary(address,uint32,address)\":{\"details\":\"Oapp setting the sendLibrarymust be a registered library (including blockLibrary) with the eid support enabledauthenticated by the Oapp\"},\"skip(address,uint32,bytes32,uint64)\":{\"details\":\"the caller must provide _nonce to prevent skipping the unintended nonceit could happen in some race conditions, e.g. to skip nonce 3, but nonce 3 was consumed firstusage: skipping the next nonce to prevent message verification, e.g. skip a message when Precrime throws alertsif the Oapp wants to skip a verified message, it should call the clear() function insteadafter skipping, the lazyInboundNonce is set to the provided nonce, which makes the inboundNonce also the provided nonceie. allows the Oapp to increment the lazyInboundNonce without having had that corresponding msg be verified\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"verify((uint32,bytes32,uint64),address,bytes32)\":{\"details\":\"MESSAGING STEP 2 - on the destination chainconfigured receive library verifies a message\",\"params\":{\"_origin\":\"a struct holding the srcEid, nonce, and sender of the message\",\"_payloadHash\":\"the payload hash of the message\",\"_receiver\":\"the receiver of the message\"}}},\"stateVariables\":{\"nativeErc20\":{\"details\":\"the altFeeToken is used for fees when the native token has no valueit is immutable for gas saving. only 1 endpoint for such chains\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getSendLibrary(address,uint32)\":{\"notice\":\"The Send Library is the Oapp specified library that will be used to send the message to the destination endpoint. If the Oapp does not specify a Send Library, the default Send Library will be used.\"},\"quote((uint32,bytes32,bytes,bytes,bool),address)\":{\"notice\":\"This view function gives the application built on top of LayerZero the ability to requests a quote with the same parameters as they would to send their message. Since the quotes are given on chain there is a race condition in which the prices could change between the time the user gets their quote and the time they submit their message. If the price moves up and the user doesn't send enough funds the transaction will revert, if the price goes down the _refundAddress provided by the app will be refunded the difference.\"},\"setDelegate(address)\":{\"notice\":\"delegate is authorized by the oapp to configure anything in layerzero\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/EndpointV2AltMock.sol\":\"EndpointV2AltMock\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessageLibManager.sol\":{\"keccak256\":\"0x64330e51de72e8d38cfc0eb5527d36baada46df4bc14233d3a8ecaf98098d69a\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://49aa45e5a26fc62e7af569cf915be8344adc78dceb6871c4c14bc5d115e59241\",\"dweb:/ipfs/QmbTuW7kzPDYForDEPnaNQi6ZrmWqDxGVnHFiugnvTyq9K\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingChannel.sol\":{\"keccak256\":\"0x8ab8cb12c8beba699c1a7f22ffa812ac553f7038326d0c0d0af77253005cfe73\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://7c7cba4ae16d0ca46ee0a365a204f7257ceaa892224604bf7c8e65c44737e46c\",\"dweb:/ipfs/QmbQX5hJDKMwKdoo6QkdcusXQXH54SVCPe5hM1ycJZsg7y\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingComposer.sol\":{\"keccak256\":\"0x20d36578e810e75346daf064813b76a177087214cae77628b1f9d43798cb52d1\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://475b6f3f1ba5d981d0c5f90b9e892d4f9f539f3b12196639b95770b5be4dbf6a\",\"dweb:/ipfs/QmYyGrnR3vDt8Dqa2paQwTG9qrD6anAGFrDZmMra8KGC6s\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingContext.sol\":{\"keccak256\":\"0x9616f3bd0d7293c9723f2ddf86f9f7030fbd99213c9748557eec8f6d13b25420\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://205e713f5af46f52799e51774ac74dbeee4056de6ddba3c4d78a327536426c54\",\"dweb:/ipfs/QmZ2ZqDwxdjpJbh91qwMfRhhQu4AMEsjUcsTEsdRV4NAys\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroComposer.sol\":{\"keccak256\":\"0xfaca7205d4211ee9208a7e59171e2301731f3d2a20c49b4a839821871f5fdd49\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f254bc60ac26687b5320a43a556e30777b0745abf7cd64d5f4720d9b1d1f7fdf\",\"dweb:/ipfs/QmRSJEZVgxaC3L2DdE6s8P5qkYfM3V5JMeseeFJJqGR4xz\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\":{\"keccak256\":\"0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bacc29fd3866af71e59cb0bdc1cf82c882a4a7f4e2652fd413c9f12649762083\",\"dweb:/ipfs/QmZh2toLnrQDWaNYhS5K4NoW7Vxd2GdZx9KA77vKEDLAqs\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol\":{\"keccak256\":\"0x9641abba8d53b08bb517d1b74801dd15ea7b84d77a6719085bd96c8ea94e3ca0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://77415ae0820859e0faf3fabdce683cce9fa03ea026ae0f6fe081ef1c9205f933\",\"dweb:/ipfs/QmXd7APqoCunQ2jYy73AHvi5gsZofLpm3SzM6FPo7zRPfL\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol\":{\"keccak256\":\"0x5cf5f24751b4e3ea1c9c5ded07cedfdfd62566b6daaffcc0144733859c9dba0c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cae7e35007a714f007ea08045ef7c0cfa6c91fd2425b5028b2d49abad357a5f0\",\"dweb:/ipfs/QmcDBs5tsiyB35b8cwzWQWNnpkawb3uuHRaqE77Hxm2tve\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol\":{\"keccak256\":\"0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d8ff6a8a89297fa127f86b54e0db3eba1d6a6eeb4f6398d3c84d569665ac8f1b\",\"dweb:/ipfs/QmVSwhw6xFDrLRAX4RXaCM47yBaBtac4wf36DYEq6KCTvT\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol\":{\"keccak256\":\"0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7e1b245d58221d16d8b5e0f01ef3e289a24a7df1ace3b94239e4d5b954ad5927\",\"dweb:/ipfs/Qmappsgp7PCY9rSSNE9Cdn4BTRX591WfCSEgq2HxhA3z6S\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol\":{\"keccak256\":\"0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b18b23a1643fc6636c4ad9d9023e2e6ca2d3c2a4a046482d4655bff09950598d\",\"dweb:/ipfs/Qma6G5SqiovwrMPfgqTrRngK1HWW373Wkf9c6YP2NhXpPk\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol\":{\"keccak256\":\"0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5173fc9143bea314b159ca5a9adb5626659ef763bc598e27de5fa46efe3291a6\",\"dweb:/ipfs/QmSLFeMFPmVeGxT4sxRPW28ictjAS22M8rLeYRu9TXkA6D\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol\":{\"keccak256\":\"0xf1c07bc61e7b1dce195ed12d50f87980fbf2d63cac1326fd28287f55fe0ba625\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://060f10ff7afc33c1c2f2b4b5ba29231fd3c943146488084d0e4ab99fce991d97\",\"dweb:/ipfs/QmaSsefAqqEqtf8FgFUmDYMwTsAty3X1pqDb6SiFvry6B3\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol\":{\"keccak256\":\"0x2ebbcaaab3554edcd41b581f1a72ac1806afbfb8047d0d47ff098f9af30d6deb\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://2d4b2cf5c3b16dc76c6767f285b57c0af917972327b2be3f7cba5825402f5fc1\",\"dweb:/ipfs/QmQQWiHE2jKEDbjzGutSoZwtApSXYfLqZt5CxEpFj8xyvT\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Errors.sol\":{\"keccak256\":\"0x35bcd6ca99c4c8d9f7d8413d1b92fb4a4d4a420ce3bf64b0fb01e68e6bcf2fa7\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://0ac14f98563f9c610c936c93e71eff657efaba1e1d892be6a215aa5cb1f63a24\",\"dweb:/ipfs/QmVZZ8owwfDGLQTAzQJJqmYY4KsrChDagh5GBK7rChT5wb\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/GUID.sol\":{\"keccak256\":\"0x8a44524af7deb96593f6b5606e9973654a113e1687809f2e45d4a91ba89862d5\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://32dd0b5d1946e0cd5c7b728086aafac50a62c061115afb8b41254589c8a6732b\",\"dweb:/ipfs/QmR9QqtiAUPRLaRVv5wnth3NGPhdWB8rJmWYfz3o5Z1mWj\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Transfer.sol\":{\"keccak256\":\"0x621d6dd5b8b7e827351459fff4ac87c16ba4656757592cf67de8b199aea4cf9a\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://345aa8c007ed8b96a74260d289545713f1d7180df270d67687e3a540a61fa5c0\",\"dweb:/ipfs/QmNWCvpqSuar6UGLDVshUc7shUv3pt1J5FTf9VyZZ13wXL\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/BlockedMessageLib.sol\":{\"keccak256\":\"0xb2b55968b26294139742adee6c155897c8334f4c6bf72f1940456cc84e6fbab9\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://e758a1fdcea4039b19f1252e4e2958f4a0e05517eb3e151784431533446c225f\",\"dweb:/ipfs/QmRBG345abgyUeTnSpuxdK1WbK5pvwhSmvBEgW1mnoYqTq\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/EndpointV2AltMock.sol\":{\"keccak256\":\"0x026b2f530b336ee237f37dde6f617acefbbf74d933d2a80da4216882f78be1a9\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://097a9fdd5a321e6e8455a1db00f2abda6e810c31ce47d1bced9e574be262a28b\",\"dweb:/ipfs/Qme17zGk93k5BghCWFXqeqppVahH4dHuw7U76K4EcJxsY1\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/EndpointV2Mock.sol\":{\"keccak256\":\"0xe9096c53611537a121589b56b882fc4dd797d5cac60def708f794a15e3ca98ff\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://4092d5dd582b48a5f703e4361fc5fb66050b5fe3253891175275dc832bc8e045\",\"dweb:/ipfs/QmXSTJJNx4rn2ByCaE6vxiHnkm366ZU7dScYH1JsUbVZ1V\"]},\"node_modules/@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol\":{\"keccak256\":\"0x9b6b3e7803bc5f2f8cd7ad57db8ac1def61a9930a5a3107df4882e028a9605d7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://da62d6be1f5c6edf577f0cb45666a8aa9c2086a4bac87d95d65f02e2f4c36a4b\",\"dweb:/ipfs/QmNkpvBpoCMvX8JwAFNSc5XxJ2q5BXJpL5L1txb4QkqVFF\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC165.sol\":{\"keccak256\":\"0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://11fea9f8bc98949ac6709f0c1699db7430d2948137aa94d5a9e95a91f61a710a\",\"dweb:/ipfs/QmQdfRXxQjwP6yn3DVo1GHPpriKNcFghSPi94Z1oKEFUNS\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC20.sol\":{\"keccak256\":\"0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a2608291cb038b388d80b79a06b6118a42f7894ff67b7da10ec0dbbf5b2973ba\",\"dweb:/ipfs/QmWohqcBLbcxmA4eGPhZDXe5RYMMEEpFq22nfkaUMvTfw1\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db\",\"dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0xca2ae13e0610f6a99238dd00b97bd786bc92732dae6d6b9d61f573ec51018310\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://75f8c71ce0c91c40dd5f249ace0b7d8270f8f1767231bcf71490f7157d6ba862\",\"dweb:/ipfs/QmYXgxeDyFHvz3JsXxLEYN6GNUR44ThHeFj5XkpkgMoG4w\"]},\"node_modules/@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0x9d8da059267bac779a2dbbb9a26c2acf00ca83085e105d62d5d4ef96054a47f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c78e2aa4313323cecd1ef12a8d6265b96beee1a199923abf55d9a2a9e291ad23\",\"dweb:/ipfs/QmUTs2KStXucZezzFo3EYeqYu47utu56qrF7jj1Gue65vb\"]},\"node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"node_modules/@openzeppelin/contracts/utils/Errors.sol\":{\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf\",\"dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB\"]},\"node_modules/@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0xddce8e17e3d3f9ed818b4f4c4478a8262aab8b11ed322f1bf5ed705bb4bd97fa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8084aa71a4cc7d2980972412a88fe4f114869faea3fefa5436431644eb5c0287\",\"dweb:/ipfs/Qmbqfs5dRdPvHVKY8kTaeyc65NdqXRQwRK7h9s5UJEhD1p\"]},\"node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { "internalType": "address", "name": "_owner", "type": "address" }, - { - "internalType": "address", - "name": "_altToken", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { "inputs": [], "type": "error", "name": "LZ_AlreadyRegistered" }, - { "inputs": [], "type": "error", "name": "LZ_ComposeExists" }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "expected", - "type": "bytes32" - }, - { "internalType": "bytes32", "name": "actual", "type": "bytes32" } - ], - "type": "error", - "name": "LZ_ComposeNotFound" - }, - { - "inputs": [], - "type": "error", - "name": "LZ_DefaultReceiveLibUnavailable" - }, - { - "inputs": [], - "type": "error", - "name": "LZ_DefaultSendLibUnavailable" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "requiredNative", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "suppliedNative", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "requiredLzToken", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "suppliedLzToken", - "type": "uint256" - } - ], - "type": "error", - "name": "LZ_InsufficientFee" - }, - { "inputs": [], "type": "error", "name": "LZ_InvalidArgument" }, - { "inputs": [], "type": "error", "name": "LZ_InvalidExpiry" }, - { - "inputs": [ - { "internalType": "uint64", "name": "nonce", "type": "uint64" } - ], - "type": "error", - "name": "LZ_InvalidNonce" - }, - { "inputs": [], "type": "error", "name": "LZ_InvalidPayloadHash" }, - { "inputs": [], "type": "error", "name": "LZ_InvalidReceiveLibrary" }, - { "inputs": [], "type": "error", "name": "LZ_LzTokenUnavailable" }, - { "inputs": [], "type": "error", "name": "LZ_OnlyAltToken" }, - { "inputs": [], "type": "error", "name": "LZ_OnlyNonDefaultLib" }, - { "inputs": [], "type": "error", "name": "LZ_OnlyReceiveLib" }, - { "inputs": [], "type": "error", "name": "LZ_OnlyRegisteredLib" }, - { - "inputs": [], - "type": "error", - "name": "LZ_OnlyRegisteredOrDefaultLib" - }, - { "inputs": [], "type": "error", "name": "LZ_OnlySendLib" }, - { "inputs": [], "type": "error", "name": "LZ_PathNotInitializable" }, - { "inputs": [], "type": "error", "name": "LZ_PathNotVerifiable" }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "expected", - "type": "bytes32" - }, - { "internalType": "bytes32", "name": "actual", "type": "bytes32" } - ], - "type": "error", - "name": "LZ_PayloadHashNotFound" - }, - { "inputs": [], "type": "error", "name": "LZ_SameValue" }, - { "inputs": [], "type": "error", "name": "LZ_SendReentrancy" }, - { "inputs": [], "type": "error", "name": "LZ_Unauthorized" }, - { "inputs": [], "type": "error", "name": "LZ_UnsupportedEid" }, - { "inputs": [], "type": "error", "name": "LZ_UnsupportedInterface" }, - { "inputs": [], "type": "error", "name": "LZ_ZeroLzTokenFee" }, - { - "inputs": [ - { "internalType": "address", "name": "owner", "type": "address" } - ], - "type": "error", - "name": "OwnableInvalidOwner" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "type": "error", - "name": "OwnableUnauthorizedAccount" - }, - { - "inputs": [ - { "internalType": "address", "name": "token", "type": "address" } - ], - "type": "error", - "name": "SafeERC20FailedOperation" - }, - { - "inputs": [ - { "internalType": "address", "name": "_to", "type": "address" }, - { "internalType": "uint256", "name": "_value", "type": "uint256" } - ], - "type": "error", - "name": "Transfer_NativeFailed" - }, - { "inputs": [], "type": "error", "name": "Transfer_ToAddressIsZero" }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address", - "indexed": false - }, - { - "internalType": "address", - "name": "to", - "type": "address", - "indexed": false - }, - { - "internalType": "bytes32", - "name": "guid", - "type": "bytes32", - "indexed": false - }, - { - "internalType": "uint16", - "name": "index", - "type": "uint16", - "indexed": false - } - ], - "type": "event", - "name": "ComposeDelivered", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address", - "indexed": false - }, - { - "internalType": "address", - "name": "to", - "type": "address", - "indexed": false - }, - { - "internalType": "bytes32", - "name": "guid", - "type": "bytes32", - "indexed": false - }, - { - "internalType": "uint16", - "name": "index", - "type": "uint16", - "indexed": false - }, - { - "internalType": "bytes", - "name": "message", - "type": "bytes", - "indexed": false - } - ], - "type": "event", - "name": "ComposeSent", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "eid", - "type": "uint32", - "indexed": false - }, - { - "internalType": "address", - "name": "newLib", - "type": "address", - "indexed": false - } - ], - "type": "event", - "name": "DefaultReceiveLibrarySet", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "eid", - "type": "uint32", - "indexed": false - }, - { - "internalType": "address", - "name": "oldLib", - "type": "address", - "indexed": false - }, - { - "internalType": "uint256", - "name": "expiry", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "DefaultReceiveLibraryTimeoutSet", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "eid", - "type": "uint32", - "indexed": false - }, - { - "internalType": "address", - "name": "newLib", - "type": "address", - "indexed": false - } - ], - "type": "event", - "name": "DefaultSendLibrarySet", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address", - "indexed": false - }, - { - "internalType": "address", - "name": "delegate", - "type": "address", - "indexed": false - } - ], - "type": "event", - "name": "DelegateSet", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32", - "indexed": false - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32", - "indexed": false - }, - { - "internalType": "address", - "name": "receiver", - "type": "address", - "indexed": false - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64", - "indexed": false - } - ], - "type": "event", - "name": "InboundNonceSkipped", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newLib", - "type": "address", - "indexed": false - } - ], - "type": "event", - "name": "LibraryRegistered", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address", - "indexed": true - }, - { - "internalType": "address", - "name": "to", - "type": "address", - "indexed": true - }, - { - "internalType": "address", - "name": "executor", - "type": "address", - "indexed": true - }, - { - "internalType": "bytes32", - "name": "guid", - "type": "bytes32", - "indexed": false - }, - { - "internalType": "uint16", - "name": "index", - "type": "uint16", - "indexed": false - }, - { - "internalType": "uint256", - "name": "gas", - "type": "uint256", - "indexed": false - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256", - "indexed": false - }, - { - "internalType": "bytes", - "name": "message", - "type": "bytes", - "indexed": false - }, - { - "internalType": "bytes", - "name": "extraData", - "type": "bytes", - "indexed": false - }, - { - "internalType": "bytes", - "name": "reason", - "type": "bytes", - "indexed": false - } - ], - "type": "event", - "name": "LzComposeAlert", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "receiver", - "type": "address", - "indexed": true - }, - { - "internalType": "address", - "name": "executor", - "type": "address", - "indexed": true - }, - { - "internalType": "struct Origin", - "name": "origin", - "type": "tuple", - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { "internalType": "uint64", "name": "nonce", "type": "uint64" } - ], - "indexed": false - }, - { - "internalType": "bytes32", - "name": "guid", - "type": "bytes32", - "indexed": false - }, - { - "internalType": "uint256", - "name": "gas", - "type": "uint256", - "indexed": false - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256", - "indexed": false - }, - { - "internalType": "bytes", - "name": "message", - "type": "bytes", - "indexed": false - }, - { - "internalType": "bytes", - "name": "extraData", - "type": "bytes", - "indexed": false - }, - { - "internalType": "bytes", - "name": "reason", - "type": "bytes", - "indexed": false - } - ], - "type": "event", - "name": "LzReceiveAlert", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address", - "indexed": false - } - ], - "type": "event", - "name": "LzTokenSet", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "previousOwner", - "type": "address", - "indexed": true - }, - { - "internalType": "address", - "name": "newOwner", - "type": "address", - "indexed": true - } - ], - "type": "event", - "name": "OwnershipTransferred", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32", - "indexed": false - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32", - "indexed": false - }, - { - "internalType": "address", - "name": "receiver", - "type": "address", - "indexed": false - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64", - "indexed": false - }, - { - "internalType": "bytes32", - "name": "payloadHash", - "type": "bytes32", - "indexed": false - } - ], - "type": "event", - "name": "PacketBurnt", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "struct Origin", - "name": "origin", - "type": "tuple", - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { "internalType": "uint64", "name": "nonce", "type": "uint64" } - ], - "indexed": false - }, - { - "internalType": "address", - "name": "receiver", - "type": "address", - "indexed": false - } - ], - "type": "event", - "name": "PacketDelivered", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32", - "indexed": false - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32", - "indexed": false - }, - { - "internalType": "address", - "name": "receiver", - "type": "address", - "indexed": false - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64", - "indexed": false - }, - { - "internalType": "bytes32", - "name": "payloadHash", - "type": "bytes32", - "indexed": false - } - ], - "type": "event", - "name": "PacketNilified", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "encodedPayload", - "type": "bytes", - "indexed": false - }, - { - "internalType": "bytes", - "name": "options", - "type": "bytes", - "indexed": false - }, - { - "internalType": "address", - "name": "sendLibrary", - "type": "address", - "indexed": false - } - ], - "type": "event", - "name": "PacketSent", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "struct Origin", - "name": "origin", - "type": "tuple", - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { "internalType": "uint64", "name": "nonce", "type": "uint64" } - ], - "indexed": false - }, - { - "internalType": "address", - "name": "receiver", - "type": "address", - "indexed": false - }, - { - "internalType": "bytes32", - "name": "payloadHash", - "type": "bytes32", - "indexed": false - } - ], - "type": "event", - "name": "PacketVerified", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "receiver", - "type": "address", - "indexed": false - }, - { - "internalType": "uint32", - "name": "eid", - "type": "uint32", - "indexed": false - }, - { - "internalType": "address", - "name": "newLib", - "type": "address", - "indexed": false - } - ], - "type": "event", - "name": "ReceiveLibrarySet", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "receiver", - "type": "address", - "indexed": false - }, - { - "internalType": "uint32", - "name": "eid", - "type": "uint32", - "indexed": false - }, - { - "internalType": "address", - "name": "oldLib", - "type": "address", - "indexed": false - }, - { - "internalType": "uint256", - "name": "timeout", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "ReceiveLibraryTimeoutSet", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address", - "indexed": false - }, - { - "internalType": "uint32", - "name": "eid", - "type": "uint32", - "indexed": false - }, - { - "internalType": "address", - "name": "newLib", - "type": "address", - "indexed": false - } - ], - "type": "event", - "name": "SendLibrarySet", - "anonymous": false - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "EMPTY_PAYLOAD_HASH", - "outputs": [ - { "internalType": "bytes32", "name": "", "type": "bytes32" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "NIL_PAYLOAD_HASH", - "outputs": [ - { "internalType": "bytes32", "name": "", "type": "bytes32" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "blockedLibrary", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "_oapp", "type": "address" }, - { "internalType": "uint32", "name": "_srcEid", "type": "uint32" }, - { "internalType": "bytes32", "name": "_sender", "type": "bytes32" }, - { "internalType": "uint64", "name": "_nonce", "type": "uint64" }, - { - "internalType": "bytes32", - "name": "_payloadHash", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "burn" - }, - { - "inputs": [ - { "internalType": "address", "name": "_oapp", "type": "address" }, - { - "internalType": "struct Origin", - "name": "_origin", - "type": "tuple", - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { "internalType": "uint64", "name": "nonce", "type": "uint64" } - ] - }, - { "internalType": "bytes32", "name": "_guid", "type": "bytes32" }, - { "internalType": "bytes", "name": "_message", "type": "bytes" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "clear" - }, - { - "inputs": [ - { "internalType": "address", "name": "from", "type": "address" }, - { "internalType": "address", "name": "to", "type": "address" }, - { "internalType": "bytes32", "name": "guid", "type": "bytes32" }, - { "internalType": "uint16", "name": "index", "type": "uint16" } - ], - "stateMutability": "view", - "type": "function", - "name": "composeQueue", - "outputs": [ - { - "internalType": "bytes32", - "name": "messageHash", - "type": "bytes32" - } - ] - }, - { - "inputs": [ - { "internalType": "uint32", "name": "srcEid", "type": "uint32" } - ], - "stateMutability": "view", - "type": "function", - "name": "defaultReceiveLibrary", - "outputs": [ - { "internalType": "address", "name": "lib", "type": "address" } - ] - }, - { - "inputs": [ - { "internalType": "uint32", "name": "srcEid", "type": "uint32" } - ], - "stateMutability": "view", - "type": "function", - "name": "defaultReceiveLibraryTimeout", - "outputs": [ - { "internalType": "address", "name": "lib", "type": "address" }, - { "internalType": "uint256", "name": "expiry", "type": "uint256" } - ] - }, - { - "inputs": [ - { "internalType": "uint32", "name": "dstEid", "type": "uint32" } - ], - "stateMutability": "view", - "type": "function", - "name": "defaultSendLibrary", - "outputs": [ - { "internalType": "address", "name": "lib", "type": "address" } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "oapp", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "delegates", - "outputs": [ - { "internalType": "address", "name": "delegate", "type": "address" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "eid", - "outputs": [ - { "internalType": "uint32", "name": "", "type": "uint32" } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "_oapp", "type": "address" }, - { "internalType": "address", "name": "_lib", "type": "address" }, - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { - "internalType": "uint32", - "name": "_configType", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function", - "name": "getConfig", - "outputs": [ - { "internalType": "bytes", "name": "config", "type": "bytes" } - ] - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_receiver", - "type": "address" - }, - { "internalType": "uint32", "name": "_srcEid", "type": "uint32" } - ], - "stateMutability": "view", - "type": "function", - "name": "getReceiveLibrary", - "outputs": [ - { "internalType": "address", "name": "lib", "type": "address" }, - { "internalType": "bool", "name": "isDefault", "type": "bool" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "getRegisteredLibraries", - "outputs": [ - { "internalType": "address[]", "name": "", "type": "address[]" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "getSendContext", - "outputs": [ - { "internalType": "uint32", "name": "", "type": "uint32" }, - { "internalType": "address", "name": "", "type": "address" } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "_sender", "type": "address" }, - { "internalType": "uint32", "name": "_dstEid", "type": "uint32" } - ], - "stateMutability": "view", - "type": "function", - "name": "getSendLibrary", - "outputs": [ - { "internalType": "address", "name": "lib", "type": "address" } - ] - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_receiver", - "type": "address" - }, - { "internalType": "uint32", "name": "_srcEid", "type": "uint32" }, - { "internalType": "bytes32", "name": "_sender", "type": "bytes32" } - ], - "stateMutability": "view", - "type": "function", - "name": "inboundNonce", - "outputs": [ - { "internalType": "uint64", "name": "", "type": "uint64" } - ] - }, - { - "inputs": [ - { - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { "internalType": "uint32", "name": "srcEid", "type": "uint32" }, - { "internalType": "bytes32", "name": "sender", "type": "bytes32" }, - { - "internalType": "uint64", - "name": "inboundNonce", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function", - "name": "inboundPayloadHash", - "outputs": [ - { - "internalType": "bytes32", - "name": "payloadHash", - "type": "bytes32" - } - ] - }, - { - "inputs": [ - { - "internalType": "struct Origin", - "name": "_origin", - "type": "tuple", - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { "internalType": "uint64", "name": "nonce", "type": "uint64" } - ] - }, - { - "internalType": "address", - "name": "_receiver", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function", - "name": "initializable", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "address", "name": "_sender", "type": "address" }, - { "internalType": "uint32", "name": "_dstEid", "type": "uint32" } - ], - "stateMutability": "view", - "type": "function", - "name": "isDefaultSendLibrary", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "address", "name": "lib", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "isRegisteredLibrary", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "isSendingMessage", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" } - ], - "stateMutability": "view", - "type": "function", - "name": "isSupportedEid", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_receiver", - "type": "address" - }, - { "internalType": "uint32", "name": "_srcEid", "type": "uint32" }, - { - "internalType": "address", - "name": "_actualReceiveLib", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function", - "name": "isValidReceiveLibrary", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { "internalType": "uint32", "name": "srcEid", "type": "uint32" }, - { "internalType": "bytes32", "name": "sender", "type": "bytes32" } - ], - "stateMutability": "view", - "type": "function", - "name": "lazyInboundNonce", - "outputs": [ - { "internalType": "uint64", "name": "nonce", "type": "uint64" } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "_from", "type": "address" }, - { "internalType": "address", "name": "_to", "type": "address" }, - { "internalType": "bytes32", "name": "_guid", "type": "bytes32" }, - { "internalType": "uint16", "name": "_index", "type": "uint16" }, - { "internalType": "bytes", "name": "_message", "type": "bytes" }, - { "internalType": "bytes", "name": "_extraData", "type": "bytes" } - ], - "stateMutability": "payable", - "type": "function", - "name": "lzCompose" - }, - { - "inputs": [ - { "internalType": "address", "name": "_from", "type": "address" }, - { "internalType": "address", "name": "_to", "type": "address" }, - { "internalType": "bytes32", "name": "_guid", "type": "bytes32" }, - { "internalType": "uint16", "name": "_index", "type": "uint16" }, - { "internalType": "uint256", "name": "_gas", "type": "uint256" }, - { "internalType": "uint256", "name": "_value", "type": "uint256" }, - { "internalType": "bytes", "name": "_message", "type": "bytes" }, - { "internalType": "bytes", "name": "_extraData", "type": "bytes" }, - { "internalType": "bytes", "name": "_reason", "type": "bytes" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "lzComposeAlert" - }, - { - "inputs": [ - { - "internalType": "struct Origin", - "name": "_origin", - "type": "tuple", - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { "internalType": "uint64", "name": "nonce", "type": "uint64" } - ] - }, - { - "internalType": "address", - "name": "_receiver", - "type": "address" - }, - { "internalType": "bytes32", "name": "_guid", "type": "bytes32" }, - { "internalType": "bytes", "name": "_message", "type": "bytes" }, - { "internalType": "bytes", "name": "_extraData", "type": "bytes" } - ], - "stateMutability": "payable", - "type": "function", - "name": "lzReceive" - }, - { - "inputs": [ - { - "internalType": "struct Origin", - "name": "_origin", - "type": "tuple", - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { "internalType": "uint64", "name": "nonce", "type": "uint64" } - ] - }, - { - "internalType": "address", - "name": "_receiver", - "type": "address" - }, - { "internalType": "bytes32", "name": "_guid", "type": "bytes32" }, - { "internalType": "uint256", "name": "_gas", "type": "uint256" }, - { "internalType": "uint256", "name": "_value", "type": "uint256" }, - { "internalType": "bytes", "name": "_message", "type": "bytes" }, - { "internalType": "bytes", "name": "_extraData", "type": "bytes" }, - { "internalType": "bytes", "name": "_reason", "type": "bytes" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "lzReceiveAlert" - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "lzToken", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "nativeToken", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "_sender", "type": "address" }, - { "internalType": "uint32", "name": "_dstEid", "type": "uint32" }, - { - "internalType": "bytes32", - "name": "_receiver", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function", - "name": "nextGuid", - "outputs": [ - { "internalType": "bytes32", "name": "", "type": "bytes32" } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "_oapp", "type": "address" }, - { "internalType": "uint32", "name": "_srcEid", "type": "uint32" }, - { "internalType": "bytes32", "name": "_sender", "type": "bytes32" }, - { "internalType": "uint64", "name": "_nonce", "type": "uint64" }, - { - "internalType": "bytes32", - "name": "_payloadHash", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "nilify" - }, - { - "inputs": [ - { "internalType": "address", "name": "sender", "type": "address" }, - { "internalType": "uint32", "name": "dstEid", "type": "uint32" }, - { "internalType": "bytes32", "name": "receiver", "type": "bytes32" } - ], - "stateMutability": "view", - "type": "function", - "name": "outboundNonce", - "outputs": [ - { "internalType": "uint64", "name": "nonce", "type": "uint64" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "owner", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ] - }, - { - "inputs": [ - { - "internalType": "struct MessagingParams", - "name": "_params", - "type": "tuple", - "components": [ - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "receiver", - "type": "bytes32" - }, - { "internalType": "bytes", "name": "message", "type": "bytes" }, - { "internalType": "bytes", "name": "options", "type": "bytes" }, - { - "internalType": "bool", - "name": "payInLzToken", - "type": "bool" - } - ] - }, - { "internalType": "address", "name": "_sender", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "quote", - "outputs": [ - { - "internalType": "struct MessagingFee", - "name": "", - "type": "tuple", - "components": [ - { - "internalType": "uint256", - "name": "nativeFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "lzTokenFee", - "type": "uint256" - } - ] - } - ] - }, - { - "inputs": [ - { - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { "internalType": "uint32", "name": "srcEid", "type": "uint32" } - ], - "stateMutability": "view", - "type": "function", - "name": "receiveLibraryTimeout", - "outputs": [ - { "internalType": "address", "name": "lib", "type": "address" }, - { "internalType": "uint256", "name": "expiry", "type": "uint256" } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "_token", "type": "address" }, - { "internalType": "address", "name": "_to", "type": "address" }, - { "internalType": "uint256", "name": "_amount", "type": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "recoverToken" - }, - { - "inputs": [ - { "internalType": "address", "name": "_lib", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "registerLibrary" - }, - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "function", - "name": "renounceOwnership" - }, - { - "inputs": [ - { - "internalType": "struct MessagingParams", - "name": "_params", - "type": "tuple", - "components": [ - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "receiver", - "type": "bytes32" - }, - { "internalType": "bytes", "name": "message", "type": "bytes" }, - { "internalType": "bytes", "name": "options", "type": "bytes" }, - { - "internalType": "bool", - "name": "payInLzToken", - "type": "bool" - } - ] - }, - { - "internalType": "address", - "name": "_refundAddress", - "type": "address" - } - ], - "stateMutability": "payable", - "type": "function", - "name": "send", - "outputs": [ - { - "internalType": "struct MessagingReceipt", - "name": "", - "type": "tuple", - "components": [ - { - "internalType": "bytes32", - "name": "guid", - "type": "bytes32" - }, - { "internalType": "uint64", "name": "nonce", "type": "uint64" }, - { - "internalType": "struct MessagingFee", - "name": "fee", - "type": "tuple", - "components": [ - { - "internalType": "uint256", - "name": "nativeFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "lzTokenFee", - "type": "uint256" - } - ] - } - ] - } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "_to", "type": "address" }, - { "internalType": "bytes32", "name": "_guid", "type": "bytes32" }, - { "internalType": "uint16", "name": "_index", "type": "uint16" }, - { "internalType": "bytes", "name": "_message", "type": "bytes" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "sendCompose" - }, - { - "inputs": [ - { "internalType": "address", "name": "_oapp", "type": "address" }, - { "internalType": "address", "name": "_lib", "type": "address" }, - { - "internalType": "struct SetConfigParam[]", - "name": "_params", - "type": "tuple[]", - "components": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" }, - { - "internalType": "uint32", - "name": "configType", - "type": "uint32" - }, - { "internalType": "bytes", "name": "config", "type": "bytes" } - ] - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setConfig" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { "internalType": "address", "name": "_newLib", "type": "address" }, - { - "internalType": "uint256", - "name": "_gracePeriod", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setDefaultReceiveLibrary" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { "internalType": "address", "name": "_lib", "type": "address" }, - { "internalType": "uint256", "name": "_expiry", "type": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setDefaultReceiveLibraryTimeout" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { "internalType": "address", "name": "_newLib", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setDefaultSendLibrary" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_delegate", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setDelegate" - }, - { - "inputs": [ - { "internalType": "address", "name": "_lzToken", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setLzToken" - }, - { - "inputs": [ - { "internalType": "address", "name": "_oapp", "type": "address" }, - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { "internalType": "address", "name": "_newLib", "type": "address" }, - { - "internalType": "uint256", - "name": "_gracePeriod", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setReceiveLibrary" - }, - { - "inputs": [ - { "internalType": "address", "name": "_oapp", "type": "address" }, - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { "internalType": "address", "name": "_lib", "type": "address" }, - { "internalType": "uint256", "name": "_expiry", "type": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setReceiveLibraryTimeout" - }, - { - "inputs": [ - { "internalType": "address", "name": "_oapp", "type": "address" }, - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { "internalType": "address", "name": "_newLib", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setSendLibrary" - }, - { - "inputs": [ - { "internalType": "address", "name": "_oapp", "type": "address" }, - { "internalType": "uint32", "name": "_srcEid", "type": "uint32" }, - { "internalType": "bytes32", "name": "_sender", "type": "bytes32" }, - { "internalType": "uint64", "name": "_nonce", "type": "uint64" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "skip" - }, - { - "inputs": [ - { "internalType": "address", "name": "newOwner", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "transferOwnership" - }, - { - "inputs": [ - { - "internalType": "struct Origin", - "name": "_origin", - "type": "tuple", - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { "internalType": "uint64", "name": "nonce", "type": "uint64" } - ] - }, - { - "internalType": "address", - "name": "_receiver", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function", - "name": "verifiable", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { - "internalType": "struct Origin", - "name": "_origin", - "type": "tuple", - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { "internalType": "uint64", "name": "nonce", "type": "uint64" } - ] - }, - { - "internalType": "address", - "name": "_receiver", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "_payloadHash", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "verify" - } - ], - "devdoc": { - "kind": "dev", - "methods": { - "burn(address,uint32,bytes32,uint64,bytes32)": { - "details": "Marks a nonce as unexecutable and un-verifiable. The nonce can never be re-verified or executed.Reverts if the provided _payloadHash does not match the currently verified payload hash.Only packets with nonces less than or equal to the lazy inbound nonce can be burned.Reverts if the nonce has already been executed.Authenticated by the caller" - }, - "clear(address,(uint32,bytes32,uint64),bytes32,bytes)": { - "details": "Oapp uses this interface to clear a message.this is a PULL mode versus the PUSH mode of lzReceivethe cleared message can be ignored by the app (effectively burnt)authenticated by oapp", - "params": { - "_guid": "the guid of the message", - "_message": "the message", - "_origin": "the origin of the message" - } - }, - "getConfig(address,address,uint32,uint32)": { - "details": "a view function to query the current configuration of the OApp" - }, - "getReceiveLibrary(address,uint32)": { - "details": "the receiveLibrary can be lazily resolved that if not set it will point to the default configured by LayerZero" - }, - "getSendContext()": { - "details": "returns (eid, sender) if sending message, (0, 0) otherwise" - }, - "getSendLibrary(address,uint32)": { - "details": "If the Oapp does not have a selected Send Library, this function will resolve to the default library configured by LayerZero", - "params": { - "_dstEid": "The destination endpoint id", - "_sender": "The address of the Oapp that is sending the message" - }, - "returns": { "lib": "address of the Send Library" } - }, - "inboundNonce(address,uint32,bytes32)": { - "details": "returns the max index of the longest gapless sequence of verified msg nonces.the uninitialized value is 0. the first nonce is always 1it starts from the lazyInboundNonce (last checkpoint) and iteratively check if the next nonce has been verifiedthis function can OOG if too many backlogs, but it can be trivially fixed by just clearing some prior messagesNOTE: Oapp explicitly skipped nonces count as \"verified\" for these purposeseg. [1,2,3,4,6,7] => 4, [1,2,6,8,10] => 2, [1,3,4,5,6] => 1" - }, - "isSendingMessage()": { - "details": "returns true if sending message" - }, - "isSupportedEid(uint32)": { - "details": "returns true only if both the default send/receive libraries are set" - }, - "isValidReceiveLibrary(address,uint32,address)": { - "details": "called when the endpoint checks if the msgLib attempting to verify the msg is the configured msgLib of the Oappthis check provides the ability for Oapp to lock in a trusted msgLibit will fist check if the msgLib is the currently configured one. then check if the msgLib is the one in grace period of msgLib versioning upgrade" - }, - "lzCompose(address,address,bytes32,uint16,bytes,bytes)": { - "details": "execute a composed messages from the sender to the composer (receiver)the execution provides the execution context (caller, extraData) to the receiver. the receiver can optionally assert the caller and validate the untrusted extraDatacan not re-entrant", - "params": { - "_extraData": "the extra data provided by the executor. this data is untrusted and should be validated.", - "_from": "the address which sends the composed message. in most cases, it is the Oapp's address.", - "_guid": "the message guid", - "_message": "the message", - "_to": "the address which receives the composed message" - } - }, - "lzComposeAlert(address,address,bytes32,uint16,uint256,uint256,bytes,bytes,bytes)": { - "params": { - "_extraData": "the extra data provided by the executor", - "_from": "the address which sends the composed message", - "_guid": "the message guid", - "_message": "the message", - "_reason": "the reason why the message is not received", - "_to": "the address which receives the composed message" - } - }, - "lzReceive((uint32,bytes32,uint64),address,bytes32,bytes,bytes)": { - "details": "MESSAGING STEP 3 - the last stepexecute a verified message to the designated receiverthe execution provides the execution context (caller, extraData) to the receiver. the receiver can optionally assert the caller and validate the untrusted extraDatacant reentrant because the payload is cleared before execution", - "params": { - "_extraData": "the extra data provided by the executor. this data is untrusted and should be validated.", - "_guid": "the guid of the message", - "_message": "the message", - "_origin": "the origin of the message", - "_receiver": "the receiver of the message" - } - }, - "lzReceiveAlert((uint32,bytes32,uint64),address,bytes32,uint256,uint256,bytes,bytes,bytes)": { - "params": { - "_extraData": "the extra data provided by the executor.", - "_guid": "the guid of the message", - "_message": "the message", - "_origin": "the origin of the message", - "_reason": "the reason for failure", - "_receiver": "the receiver of the message" - } - }, - "nativeToken()": { - "details": "override this if the endpoint is charging ERC20 tokens as native", - "returns": { - "_0": "0x0 if using native. otherwise the address of the native ERC20 token" - } - }, - "nextGuid(address,uint32,bytes32)": { - "details": "returns the GUID for the next message given the paththe Oapp might want to include the GUID into the message in some cases" - }, - "nilify(address,uint32,bytes32,uint64,bytes32)": { - "details": "Marks a packet as verified, but disallows execution until it is re-verified.Reverts if the provided _payloadHash does not match the currently verified payload hash.A non-verified nonce can be nilified by passing EMPTY_PAYLOAD_HASH for _payloadHash.Assumes the computational intractability of finding a payload that hashes to bytes32.max.Authenticated by the caller" - }, - "owner()": { "details": "Returns the address of the current owner." }, - "quote((uint32,bytes32,bytes,bytes,bool),address)": { - "details": "MESSAGING STEP 0", - "params": { - "_params": "the messaging parameters", - "_sender": "the sender of the message" - } - }, - "recoverToken(address,address,uint256)": { - "details": "recover the token sent to this contract by mistakeonly owner", - "params": { - "_amount": "the amount to send", - "_to": "the address to send the token to", - "_token": "the token to recover. if 0x0 then it is native token" - } - }, - "registerLibrary(address)": { - "details": "all libraries have to implement the erc165 interface to prevent wrong configurationsonly owner" - }, - "renounceOwnership()": { - "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner." - }, - "send((uint32,bytes32,bytes,bytes,bool),address)": { - "details": "MESSAGING STEP 1 - OApp need to transfer the fees to the endpoint before sending the message", - "params": { - "_params": "the messaging parameters", - "_refundAddress": "the address to refund both the native and lzToken" - } - }, - "sendCompose(address,bytes32,uint16,bytes)": { - "details": "the Oapp sends the lzCompose message to the endpointthe composer MUST assert the sender because anyone can send compose msg with this functionwith the same GUID, the Oapp can send compose to multiple _composer at the same timeauthenticated by the msg.sender", - "params": { - "_guid": "the message guid", - "_message": "the message", - "_to": "the address which will receive the composed message" - } - }, - "setConfig(address,address,(uint32,uint32,bytes)[])": { - "details": "authenticated by the _oapp" - }, - "setDefaultReceiveLibrary(uint32,address,uint256)": { - "details": "owner setting the defaultSendLibrarymust be a registered library (including blockLibrary) with the eid support enabledin version migration, it can add a grace period to the old library. if the grace period is 0, it will delete the timeout configuration.only owner" - }, - "setDefaultReceiveLibraryTimeout(uint32,address,uint256)": { - "details": "owner setting the defaultSendLibrarymust be a registered library (including blockLibrary) with the eid support enabledcan used to (1) extend the current configuration (2) force remove the current configuration (3) change to a new configuration", - "params": { "_expiry": "the block number when lib expires" } - }, - "setDefaultSendLibrary(uint32,address)": { - "details": "owner setting the defaultSendLibrarycan set to the blockedLibrary, which is a registered librarythe msgLib must enable the support before they can be registered to the endpoint as the defaultonly owner" - }, - "setLzToken(address)": { - "details": "check if lzToken is set to the same address" - }, - "setReceiveLibrary(address,uint32,address,uint256)": { - "details": "Oapp setting the receiveLibrarymust be a registered library (including blockLibrary) with the eid support enabledin version migration, it can add a grace period to the old library. if the grace period is 0, it will delete the timeout configuration.authenticated by the Oapp", - "params": { - "_gracePeriod": "the number of blocks from now until oldLib expires" - } - }, - "setReceiveLibraryTimeout(address,uint32,address,uint256)": { - "details": "Oapp setting the defaultSendLibrarymust be a registered library (including blockLibrary) with the eid support enabledcan used to (1) extend the current configuration (2) force remove the current configuration (3) change to a new configuration", - "params": { "_expiry": "the block number when lib expires" } - }, - "setSendLibrary(address,uint32,address)": { - "details": "Oapp setting the sendLibrarymust be a registered library (including blockLibrary) with the eid support enabledauthenticated by the Oapp" - }, - "skip(address,uint32,bytes32,uint64)": { - "details": "the caller must provide _nonce to prevent skipping the unintended nonceit could happen in some race conditions, e.g. to skip nonce 3, but nonce 3 was consumed firstusage: skipping the next nonce to prevent message verification, e.g. skip a message when Precrime throws alertsif the Oapp wants to skip a verified message, it should call the clear() function insteadafter skipping, the lazyInboundNonce is set to the provided nonce, which makes the inboundNonce also the provided nonceie. allows the Oapp to increment the lazyInboundNonce without having had that corresponding msg be verified" - }, - "transferOwnership(address)": { - "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." - }, - "verify((uint32,bytes32,uint64),address,bytes32)": { - "details": "MESSAGING STEP 2 - on the destination chainconfigured receive library verifies a message", - "params": { - "_origin": "a struct holding the srcEid, nonce, and sender of the message", - "_payloadHash": "the payload hash of the message", - "_receiver": "the receiver of the message" - } - } - }, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": { - "getSendLibrary(address,uint32)": { - "notice": "The Send Library is the Oapp specified library that will be used to send the message to the destination endpoint. If the Oapp does not specify a Send Library, the default Send Library will be used." - }, - "quote((uint32,bytes32,bytes,bytes,bool),address)": { - "notice": "This view function gives the application built on top of LayerZero the ability to requests a quote with the same parameters as they would to send their message. Since the quotes are given on chain there is a race condition in which the prices could change between the time the user gets their quote and the time they submit their message. If the price moves up and the user doesn't send enough funds the transaction will revert, if the price goes down the _refundAddress provided by the app will be refunded the difference." - }, - "setDelegate(address)": { - "notice": "delegate is authorized by the oapp to configure anything in layerzero" - } - }, - "version": 1 - } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/EndpointV2AltMock.sol": "EndpointV2AltMock" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessageLibManager.sol": { - "keccak256": "0x64330e51de72e8d38cfc0eb5527d36baada46df4bc14233d3a8ecaf98098d69a", - "urls": [ - "bzz-raw://49aa45e5a26fc62e7af569cf915be8344adc78dceb6871c4c14bc5d115e59241", - "dweb:/ipfs/QmbTuW7kzPDYForDEPnaNQi6ZrmWqDxGVnHFiugnvTyq9K" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingChannel.sol": { - "keccak256": "0x8ab8cb12c8beba699c1a7f22ffa812ac553f7038326d0c0d0af77253005cfe73", - "urls": [ - "bzz-raw://7c7cba4ae16d0ca46ee0a365a204f7257ceaa892224604bf7c8e65c44737e46c", - "dweb:/ipfs/QmbQX5hJDKMwKdoo6QkdcusXQXH54SVCPe5hM1ycJZsg7y" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingComposer.sol": { - "keccak256": "0x20d36578e810e75346daf064813b76a177087214cae77628b1f9d43798cb52d1", - "urls": [ - "bzz-raw://475b6f3f1ba5d981d0c5f90b9e892d4f9f539f3b12196639b95770b5be4dbf6a", - "dweb:/ipfs/QmYyGrnR3vDt8Dqa2paQwTG9qrD6anAGFrDZmMra8KGC6s" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingContext.sol": { - "keccak256": "0x9616f3bd0d7293c9723f2ddf86f9f7030fbd99213c9748557eec8f6d13b25420", - "urls": [ - "bzz-raw://205e713f5af46f52799e51774ac74dbeee4056de6ddba3c4d78a327536426c54", - "dweb:/ipfs/QmZ2ZqDwxdjpJbh91qwMfRhhQu4AMEsjUcsTEsdRV4NAys" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroComposer.sol": { - "keccak256": "0xfaca7205d4211ee9208a7e59171e2301731f3d2a20c49b4a839821871f5fdd49", - "urls": [ - "bzz-raw://f254bc60ac26687b5320a43a556e30777b0745abf7cd64d5f4720d9b1d1f7fdf", - "dweb:/ipfs/QmRSJEZVgxaC3L2DdE6s8P5qkYfM3V5JMeseeFJJqGR4xz" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol": { - "keccak256": "0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3", - "urls": [ - "bzz-raw://bacc29fd3866af71e59cb0bdc1cf82c882a4a7f4e2652fd413c9f12649762083", - "dweb:/ipfs/QmZh2toLnrQDWaNYhS5K4NoW7Vxd2GdZx9KA77vKEDLAqs" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol": { - "keccak256": "0x9641abba8d53b08bb517d1b74801dd15ea7b84d77a6719085bd96c8ea94e3ca0", - "urls": [ - "bzz-raw://77415ae0820859e0faf3fabdce683cce9fa03ea026ae0f6fe081ef1c9205f933", - "dweb:/ipfs/QmXd7APqoCunQ2jYy73AHvi5gsZofLpm3SzM6FPo7zRPfL" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol": { - "keccak256": "0x5cf5f24751b4e3ea1c9c5ded07cedfdfd62566b6daaffcc0144733859c9dba0c", - "urls": [ - "bzz-raw://cae7e35007a714f007ea08045ef7c0cfa6c91fd2425b5028b2d49abad357a5f0", - "dweb:/ipfs/QmcDBs5tsiyB35b8cwzWQWNnpkawb3uuHRaqE77Hxm2tve" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol": { - "keccak256": "0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc", - "urls": [ - "bzz-raw://d8ff6a8a89297fa127f86b54e0db3eba1d6a6eeb4f6398d3c84d569665ac8f1b", - "dweb:/ipfs/QmVSwhw6xFDrLRAX4RXaCM47yBaBtac4wf36DYEq6KCTvT" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol": { - "keccak256": "0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972", - "urls": [ - "bzz-raw://7e1b245d58221d16d8b5e0f01ef3e289a24a7df1ace3b94239e4d5b954ad5927", - "dweb:/ipfs/Qmappsgp7PCY9rSSNE9Cdn4BTRX591WfCSEgq2HxhA3z6S" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol": { - "keccak256": "0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901", - "urls": [ - "bzz-raw://b18b23a1643fc6636c4ad9d9023e2e6ca2d3c2a4a046482d4655bff09950598d", - "dweb:/ipfs/Qma6G5SqiovwrMPfgqTrRngK1HWW373Wkf9c6YP2NhXpPk" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol": { - "keccak256": "0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e", - "urls": [ - "bzz-raw://5173fc9143bea314b159ca5a9adb5626659ef763bc598e27de5fa46efe3291a6", - "dweb:/ipfs/QmSLFeMFPmVeGxT4sxRPW28ictjAS22M8rLeYRu9TXkA6D" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol": { - "keccak256": "0xf1c07bc61e7b1dce195ed12d50f87980fbf2d63cac1326fd28287f55fe0ba625", - "urls": [ - "bzz-raw://060f10ff7afc33c1c2f2b4b5ba29231fd3c943146488084d0e4ab99fce991d97", - "dweb:/ipfs/QmaSsefAqqEqtf8FgFUmDYMwTsAty3X1pqDb6SiFvry6B3" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol": { - "keccak256": "0x2ebbcaaab3554edcd41b581f1a72ac1806afbfb8047d0d47ff098f9af30d6deb", - "urls": [ - "bzz-raw://2d4b2cf5c3b16dc76c6767f285b57c0af917972327b2be3f7cba5825402f5fc1", - "dweb:/ipfs/QmQQWiHE2jKEDbjzGutSoZwtApSXYfLqZt5CxEpFj8xyvT" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Errors.sol": { - "keccak256": "0x35bcd6ca99c4c8d9f7d8413d1b92fb4a4d4a420ce3bf64b0fb01e68e6bcf2fa7", - "urls": [ - "bzz-raw://0ac14f98563f9c610c936c93e71eff657efaba1e1d892be6a215aa5cb1f63a24", - "dweb:/ipfs/QmVZZ8owwfDGLQTAzQJJqmYY4KsrChDagh5GBK7rChT5wb" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/GUID.sol": { - "keccak256": "0x8a44524af7deb96593f6b5606e9973654a113e1687809f2e45d4a91ba89862d5", - "urls": [ - "bzz-raw://32dd0b5d1946e0cd5c7b728086aafac50a62c061115afb8b41254589c8a6732b", - "dweb:/ipfs/QmR9QqtiAUPRLaRVv5wnth3NGPhdWB8rJmWYfz3o5Z1mWj" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Transfer.sol": { - "keccak256": "0x621d6dd5b8b7e827351459fff4ac87c16ba4656757592cf67de8b199aea4cf9a", - "urls": [ - "bzz-raw://345aa8c007ed8b96a74260d289545713f1d7180df270d67687e3a540a61fa5c0", - "dweb:/ipfs/QmNWCvpqSuar6UGLDVshUc7shUv3pt1J5FTf9VyZZ13wXL" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/BlockedMessageLib.sol": { - "keccak256": "0xb2b55968b26294139742adee6c155897c8334f4c6bf72f1940456cc84e6fbab9", - "urls": [ - "bzz-raw://e758a1fdcea4039b19f1252e4e2958f4a0e05517eb3e151784431533446c225f", - "dweb:/ipfs/QmRBG345abgyUeTnSpuxdK1WbK5pvwhSmvBEgW1mnoYqTq" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/EndpointV2AltMock.sol": { - "keccak256": "0x026b2f530b336ee237f37dde6f617acefbbf74d933d2a80da4216882f78be1a9", - "urls": [ - "bzz-raw://097a9fdd5a321e6e8455a1db00f2abda6e810c31ce47d1bced9e574be262a28b", - "dweb:/ipfs/Qme17zGk93k5BghCWFXqeqppVahH4dHuw7U76K4EcJxsY1" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/EndpointV2Mock.sol": { - "keccak256": "0xe9096c53611537a121589b56b882fc4dd797d5cac60def708f794a15e3ca98ff", - "urls": [ - "bzz-raw://4092d5dd582b48a5f703e4361fc5fb66050b5fe3253891175275dc832bc8e045", - "dweb:/ipfs/QmXSTJJNx4rn2ByCaE6vxiHnkm366ZU7dScYH1JsUbVZ1V" - ], - "license": "LZBL-1.2" - }, - "node_modules/@openzeppelin/contracts/access/Ownable.sol": { - "keccak256": "0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb", - "urls": [ - "bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6", - "dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol": { - "keccak256": "0x9b6b3e7803bc5f2f8cd7ad57db8ac1def61a9930a5a3107df4882e028a9605d7", - "urls": [ - "bzz-raw://da62d6be1f5c6edf577f0cb45666a8aa9c2086a4bac87d95d65f02e2f4c36a4b", - "dweb:/ipfs/QmNkpvBpoCMvX8JwAFNSc5XxJ2q5BXJpL5L1txb4QkqVFF" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/interfaces/IERC165.sol": { - "keccak256": "0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724", - "urls": [ - "bzz-raw://11fea9f8bc98949ac6709f0c1699db7430d2948137aa94d5a9e95a91f61a710a", - "dweb:/ipfs/QmQdfRXxQjwP6yn3DVo1GHPpriKNcFghSPi94Z1oKEFUNS" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/interfaces/IERC20.sol": { - "keccak256": "0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c", - "urls": [ - "bzz-raw://a2608291cb038b388d80b79a06b6118a42f7894ff67b7da10ec0dbbf5b2973ba", - "dweb:/ipfs/QmWohqcBLbcxmA4eGPhZDXe5RYMMEEpFq22nfkaUMvTfw1" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol": { - "keccak256": "0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7", - "urls": [ - "bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db", - "dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol": { - "keccak256": "0xca2ae13e0610f6a99238dd00b97bd786bc92732dae6d6b9d61f573ec51018310", - "urls": [ - "bzz-raw://75f8c71ce0c91c40dd5f249ace0b7d8270f8f1767231bcf71490f7157d6ba862", - "dweb:/ipfs/QmYXgxeDyFHvz3JsXxLEYN6GNUR44ThHeFj5XkpkgMoG4w" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Address.sol": { - "keccak256": "0x9d8da059267bac779a2dbbb9a26c2acf00ca83085e105d62d5d4ef96054a47f5", - "urls": [ - "bzz-raw://c78e2aa4313323cecd1ef12a8d6265b96beee1a199923abf55d9a2a9e291ad23", - "dweb:/ipfs/QmUTs2KStXucZezzFo3EYeqYu47utu56qrF7jj1Gue65vb" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Context.sol": { - "keccak256": "0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2", - "urls": [ - "bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12", - "dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Errors.sol": { - "keccak256": "0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123", - "urls": [ - "bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf", - "dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/introspection/ERC165.sol": { - "keccak256": "0xddce8e17e3d3f9ed818b4f4c4478a8262aab8b11ed322f1bf5ed705bb4bd97fa", - "urls": [ - "bzz-raw://8084aa71a4cc7d2980972412a88fe4f114869faea3fefa5436431644eb5c0287", - "dweb:/ipfs/Qmbqfs5dRdPvHVKY8kTaeyc65NdqXRQwRK7h9s5UJEhD1p" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol": { - "keccak256": "0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8", - "urls": [ - "bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621", - "dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL" - ], - "license": "MIT" - } - }, - "version": 1 - }, - "id": 74 -} diff --git a/examples/oft-movement/out/EndpointV2Mock.sol/EndpointV2Mock.json b/examples/oft-movement/out/EndpointV2Mock.sol/EndpointV2Mock.json deleted file mode 100644 index b83cef6f7..000000000 --- a/examples/oft-movement/out/EndpointV2Mock.sol/EndpointV2Mock.json +++ /dev/null @@ -1,3637 +0,0 @@ -{ - "abi": [ - { - "type": "constructor", - "inputs": [ - { "name": "_eid", "type": "uint32", "internalType": "uint32" }, - { "name": "_owner", "type": "address", "internalType": "address" } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "EMPTY_PAYLOAD_HASH", - "inputs": [], - "outputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "NIL_PAYLOAD_HASH", - "inputs": [], - "outputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "blockedLibrary", - "inputs": [], - "outputs": [{ "name": "", "type": "address", "internalType": "address" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "burn", - "inputs": [ - { "name": "_oapp", "type": "address", "internalType": "address" }, - { "name": "_srcEid", "type": "uint32", "internalType": "uint32" }, - { "name": "_sender", "type": "bytes32", "internalType": "bytes32" }, - { "name": "_nonce", "type": "uint64", "internalType": "uint64" }, - { "name": "_payloadHash", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "clear", - "inputs": [ - { "name": "_oapp", "type": "address", "internalType": "address" }, - { - "name": "_origin", - "type": "tuple", - "internalType": "struct Origin", - "components": [ - { "name": "srcEid", "type": "uint32", "internalType": "uint32" }, - { "name": "sender", "type": "bytes32", "internalType": "bytes32" }, - { "name": "nonce", "type": "uint64", "internalType": "uint64" } - ] - }, - { "name": "_guid", "type": "bytes32", "internalType": "bytes32" }, - { "name": "_message", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "composeQueue", - "inputs": [ - { "name": "from", "type": "address", "internalType": "address" }, - { "name": "to", "type": "address", "internalType": "address" }, - { "name": "guid", "type": "bytes32", "internalType": "bytes32" }, - { "name": "index", "type": "uint16", "internalType": "uint16" } - ], - "outputs": [ - { "name": "messageHash", "type": "bytes32", "internalType": "bytes32" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "defaultReceiveLibrary", - "inputs": [ - { "name": "srcEid", "type": "uint32", "internalType": "uint32" } - ], - "outputs": [ - { "name": "lib", "type": "address", "internalType": "address" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "defaultReceiveLibraryTimeout", - "inputs": [ - { "name": "srcEid", "type": "uint32", "internalType": "uint32" } - ], - "outputs": [ - { "name": "lib", "type": "address", "internalType": "address" }, - { "name": "expiry", "type": "uint256", "internalType": "uint256" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "defaultSendLibrary", - "inputs": [ - { "name": "dstEid", "type": "uint32", "internalType": "uint32" } - ], - "outputs": [ - { "name": "lib", "type": "address", "internalType": "address" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "delegates", - "inputs": [ - { "name": "oapp", "type": "address", "internalType": "address" } - ], - "outputs": [ - { "name": "delegate", "type": "address", "internalType": "address" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "eid", - "inputs": [], - "outputs": [{ "name": "", "type": "uint32", "internalType": "uint32" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getConfig", - "inputs": [ - { "name": "_oapp", "type": "address", "internalType": "address" }, - { "name": "_lib", "type": "address", "internalType": "address" }, - { "name": "_eid", "type": "uint32", "internalType": "uint32" }, - { "name": "_configType", "type": "uint32", "internalType": "uint32" } - ], - "outputs": [ - { "name": "config", "type": "bytes", "internalType": "bytes" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getReceiveLibrary", - "inputs": [ - { "name": "_receiver", "type": "address", "internalType": "address" }, - { "name": "_srcEid", "type": "uint32", "internalType": "uint32" } - ], - "outputs": [ - { "name": "lib", "type": "address", "internalType": "address" }, - { "name": "isDefault", "type": "bool", "internalType": "bool" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getRegisteredLibraries", - "inputs": [], - "outputs": [ - { "name": "", "type": "address[]", "internalType": "address[]" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getSendContext", - "inputs": [], - "outputs": [ - { "name": "", "type": "uint32", "internalType": "uint32" }, - { "name": "", "type": "address", "internalType": "address" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getSendLibrary", - "inputs": [ - { "name": "_sender", "type": "address", "internalType": "address" }, - { "name": "_dstEid", "type": "uint32", "internalType": "uint32" } - ], - "outputs": [ - { "name": "lib", "type": "address", "internalType": "address" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "inboundNonce", - "inputs": [ - { "name": "_receiver", "type": "address", "internalType": "address" }, - { "name": "_srcEid", "type": "uint32", "internalType": "uint32" }, - { "name": "_sender", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [{ "name": "", "type": "uint64", "internalType": "uint64" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "inboundPayloadHash", - "inputs": [ - { "name": "receiver", "type": "address", "internalType": "address" }, - { "name": "srcEid", "type": "uint32", "internalType": "uint32" }, - { "name": "sender", "type": "bytes32", "internalType": "bytes32" }, - { "name": "inboundNonce", "type": "uint64", "internalType": "uint64" } - ], - "outputs": [ - { "name": "payloadHash", "type": "bytes32", "internalType": "bytes32" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "initializable", - "inputs": [ - { - "name": "_origin", - "type": "tuple", - "internalType": "struct Origin", - "components": [ - { "name": "srcEid", "type": "uint32", "internalType": "uint32" }, - { "name": "sender", "type": "bytes32", "internalType": "bytes32" }, - { "name": "nonce", "type": "uint64", "internalType": "uint64" } - ] - }, - { "name": "_receiver", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "isDefaultSendLibrary", - "inputs": [ - { "name": "_sender", "type": "address", "internalType": "address" }, - { "name": "_dstEid", "type": "uint32", "internalType": "uint32" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "isRegisteredLibrary", - "inputs": [ - { "name": "lib", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "isSendingMessage", - "inputs": [], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "isSupportedEid", - "inputs": [ - { "name": "_eid", "type": "uint32", "internalType": "uint32" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "isValidReceiveLibrary", - "inputs": [ - { "name": "_receiver", "type": "address", "internalType": "address" }, - { "name": "_srcEid", "type": "uint32", "internalType": "uint32" }, - { - "name": "_actualReceiveLib", - "type": "address", - "internalType": "address" - } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "lazyInboundNonce", - "inputs": [ - { "name": "receiver", "type": "address", "internalType": "address" }, - { "name": "srcEid", "type": "uint32", "internalType": "uint32" }, - { "name": "sender", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [ - { "name": "nonce", "type": "uint64", "internalType": "uint64" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "lzCompose", - "inputs": [ - { "name": "_from", "type": "address", "internalType": "address" }, - { "name": "_to", "type": "address", "internalType": "address" }, - { "name": "_guid", "type": "bytes32", "internalType": "bytes32" }, - { "name": "_index", "type": "uint16", "internalType": "uint16" }, - { "name": "_message", "type": "bytes", "internalType": "bytes" }, - { "name": "_extraData", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [], - "stateMutability": "payable" - }, - { - "type": "function", - "name": "lzComposeAlert", - "inputs": [ - { "name": "_from", "type": "address", "internalType": "address" }, - { "name": "_to", "type": "address", "internalType": "address" }, - { "name": "_guid", "type": "bytes32", "internalType": "bytes32" }, - { "name": "_index", "type": "uint16", "internalType": "uint16" }, - { "name": "_gas", "type": "uint256", "internalType": "uint256" }, - { "name": "_value", "type": "uint256", "internalType": "uint256" }, - { "name": "_message", "type": "bytes", "internalType": "bytes" }, - { "name": "_extraData", "type": "bytes", "internalType": "bytes" }, - { "name": "_reason", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "lzReceive", - "inputs": [ - { - "name": "_origin", - "type": "tuple", - "internalType": "struct Origin", - "components": [ - { "name": "srcEid", "type": "uint32", "internalType": "uint32" }, - { "name": "sender", "type": "bytes32", "internalType": "bytes32" }, - { "name": "nonce", "type": "uint64", "internalType": "uint64" } - ] - }, - { "name": "_receiver", "type": "address", "internalType": "address" }, - { "name": "_guid", "type": "bytes32", "internalType": "bytes32" }, - { "name": "_message", "type": "bytes", "internalType": "bytes" }, - { "name": "_extraData", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [], - "stateMutability": "payable" - }, - { - "type": "function", - "name": "lzReceiveAlert", - "inputs": [ - { - "name": "_origin", - "type": "tuple", - "internalType": "struct Origin", - "components": [ - { "name": "srcEid", "type": "uint32", "internalType": "uint32" }, - { "name": "sender", "type": "bytes32", "internalType": "bytes32" }, - { "name": "nonce", "type": "uint64", "internalType": "uint64" } - ] - }, - { "name": "_receiver", "type": "address", "internalType": "address" }, - { "name": "_guid", "type": "bytes32", "internalType": "bytes32" }, - { "name": "_gas", "type": "uint256", "internalType": "uint256" }, - { "name": "_value", "type": "uint256", "internalType": "uint256" }, - { "name": "_message", "type": "bytes", "internalType": "bytes" }, - { "name": "_extraData", "type": "bytes", "internalType": "bytes" }, - { "name": "_reason", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "lzToken", - "inputs": [], - "outputs": [{ "name": "", "type": "address", "internalType": "address" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "nativeToken", - "inputs": [], - "outputs": [{ "name": "", "type": "address", "internalType": "address" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "nextGuid", - "inputs": [ - { "name": "_sender", "type": "address", "internalType": "address" }, - { "name": "_dstEid", "type": "uint32", "internalType": "uint32" }, - { "name": "_receiver", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "nilify", - "inputs": [ - { "name": "_oapp", "type": "address", "internalType": "address" }, - { "name": "_srcEid", "type": "uint32", "internalType": "uint32" }, - { "name": "_sender", "type": "bytes32", "internalType": "bytes32" }, - { "name": "_nonce", "type": "uint64", "internalType": "uint64" }, - { "name": "_payloadHash", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "outboundNonce", - "inputs": [ - { "name": "sender", "type": "address", "internalType": "address" }, - { "name": "dstEid", "type": "uint32", "internalType": "uint32" }, - { "name": "receiver", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [ - { "name": "nonce", "type": "uint64", "internalType": "uint64" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "owner", - "inputs": [], - "outputs": [{ "name": "", "type": "address", "internalType": "address" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "quote", - "inputs": [ - { - "name": "_params", - "type": "tuple", - "internalType": "struct MessagingParams", - "components": [ - { "name": "dstEid", "type": "uint32", "internalType": "uint32" }, - { - "name": "receiver", - "type": "bytes32", - "internalType": "bytes32" - }, - { "name": "message", "type": "bytes", "internalType": "bytes" }, - { "name": "options", "type": "bytes", "internalType": "bytes" }, - { "name": "payInLzToken", "type": "bool", "internalType": "bool" } - ] - }, - { "name": "_sender", "type": "address", "internalType": "address" } - ], - "outputs": [ - { - "name": "", - "type": "tuple", - "internalType": "struct MessagingFee", - "components": [ - { - "name": "nativeFee", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "lzTokenFee", - "type": "uint256", - "internalType": "uint256" - } - ] - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "receiveLibraryTimeout", - "inputs": [ - { "name": "receiver", "type": "address", "internalType": "address" }, - { "name": "srcEid", "type": "uint32", "internalType": "uint32" } - ], - "outputs": [ - { "name": "lib", "type": "address", "internalType": "address" }, - { "name": "expiry", "type": "uint256", "internalType": "uint256" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "recoverToken", - "inputs": [ - { "name": "_token", "type": "address", "internalType": "address" }, - { "name": "_to", "type": "address", "internalType": "address" }, - { "name": "_amount", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "registerLibrary", - "inputs": [ - { "name": "_lib", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "renounceOwnership", - "inputs": [], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "send", - "inputs": [ - { - "name": "_params", - "type": "tuple", - "internalType": "struct MessagingParams", - "components": [ - { "name": "dstEid", "type": "uint32", "internalType": "uint32" }, - { - "name": "receiver", - "type": "bytes32", - "internalType": "bytes32" - }, - { "name": "message", "type": "bytes", "internalType": "bytes" }, - { "name": "options", "type": "bytes", "internalType": "bytes" }, - { "name": "payInLzToken", "type": "bool", "internalType": "bool" } - ] - }, - { - "name": "_refundAddress", - "type": "address", - "internalType": "address" - } - ], - "outputs": [ - { - "name": "", - "type": "tuple", - "internalType": "struct MessagingReceipt", - "components": [ - { "name": "guid", "type": "bytes32", "internalType": "bytes32" }, - { "name": "nonce", "type": "uint64", "internalType": "uint64" }, - { - "name": "fee", - "type": "tuple", - "internalType": "struct MessagingFee", - "components": [ - { - "name": "nativeFee", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "lzTokenFee", - "type": "uint256", - "internalType": "uint256" - } - ] - } - ] - } - ], - "stateMutability": "payable" - }, - { - "type": "function", - "name": "sendCompose", - "inputs": [ - { "name": "_to", "type": "address", "internalType": "address" }, - { "name": "_guid", "type": "bytes32", "internalType": "bytes32" }, - { "name": "_index", "type": "uint16", "internalType": "uint16" }, - { "name": "_message", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setConfig", - "inputs": [ - { "name": "_oapp", "type": "address", "internalType": "address" }, - { "name": "_lib", "type": "address", "internalType": "address" }, - { - "name": "_params", - "type": "tuple[]", - "internalType": "struct SetConfigParam[]", - "components": [ - { "name": "eid", "type": "uint32", "internalType": "uint32" }, - { - "name": "configType", - "type": "uint32", - "internalType": "uint32" - }, - { "name": "config", "type": "bytes", "internalType": "bytes" } - ] - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setDefaultReceiveLibrary", - "inputs": [ - { "name": "_eid", "type": "uint32", "internalType": "uint32" }, - { "name": "_newLib", "type": "address", "internalType": "address" }, - { "name": "_gracePeriod", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setDefaultReceiveLibraryTimeout", - "inputs": [ - { "name": "_eid", "type": "uint32", "internalType": "uint32" }, - { "name": "_lib", "type": "address", "internalType": "address" }, - { "name": "_expiry", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setDefaultSendLibrary", - "inputs": [ - { "name": "_eid", "type": "uint32", "internalType": "uint32" }, - { "name": "_newLib", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setDelegate", - "inputs": [ - { "name": "_delegate", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setLzToken", - "inputs": [ - { "name": "_lzToken", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setReceiveLibrary", - "inputs": [ - { "name": "_oapp", "type": "address", "internalType": "address" }, - { "name": "_eid", "type": "uint32", "internalType": "uint32" }, - { "name": "_newLib", "type": "address", "internalType": "address" }, - { "name": "_gracePeriod", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setReceiveLibraryTimeout", - "inputs": [ - { "name": "_oapp", "type": "address", "internalType": "address" }, - { "name": "_eid", "type": "uint32", "internalType": "uint32" }, - { "name": "_lib", "type": "address", "internalType": "address" }, - { "name": "_expiry", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setSendLibrary", - "inputs": [ - { "name": "_oapp", "type": "address", "internalType": "address" }, - { "name": "_eid", "type": "uint32", "internalType": "uint32" }, - { "name": "_newLib", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "skip", - "inputs": [ - { "name": "_oapp", "type": "address", "internalType": "address" }, - { "name": "_srcEid", "type": "uint32", "internalType": "uint32" }, - { "name": "_sender", "type": "bytes32", "internalType": "bytes32" }, - { "name": "_nonce", "type": "uint64", "internalType": "uint64" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "transferOwnership", - "inputs": [ - { "name": "newOwner", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "verifiable", - "inputs": [ - { - "name": "_origin", - "type": "tuple", - "internalType": "struct Origin", - "components": [ - { "name": "srcEid", "type": "uint32", "internalType": "uint32" }, - { "name": "sender", "type": "bytes32", "internalType": "bytes32" }, - { "name": "nonce", "type": "uint64", "internalType": "uint64" } - ] - }, - { "name": "_receiver", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "verify", - "inputs": [ - { - "name": "_origin", - "type": "tuple", - "internalType": "struct Origin", - "components": [ - { "name": "srcEid", "type": "uint32", "internalType": "uint32" }, - { "name": "sender", "type": "bytes32", "internalType": "bytes32" }, - { "name": "nonce", "type": "uint64", "internalType": "uint64" } - ] - }, - { "name": "_receiver", "type": "address", "internalType": "address" }, - { "name": "_payloadHash", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "event", - "name": "ComposeDelivered", - "inputs": [ - { - "name": "from", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "to", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "guid", - "type": "bytes32", - "indexed": false, - "internalType": "bytes32" - }, - { - "name": "index", - "type": "uint16", - "indexed": false, - "internalType": "uint16" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "ComposeSent", - "inputs": [ - { - "name": "from", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "to", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "guid", - "type": "bytes32", - "indexed": false, - "internalType": "bytes32" - }, - { - "name": "index", - "type": "uint16", - "indexed": false, - "internalType": "uint16" - }, - { - "name": "message", - "type": "bytes", - "indexed": false, - "internalType": "bytes" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "DefaultReceiveLibrarySet", - "inputs": [ - { - "name": "eid", - "type": "uint32", - "indexed": false, - "internalType": "uint32" - }, - { - "name": "newLib", - "type": "address", - "indexed": false, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "DefaultReceiveLibraryTimeoutSet", - "inputs": [ - { - "name": "eid", - "type": "uint32", - "indexed": false, - "internalType": "uint32" - }, - { - "name": "oldLib", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "expiry", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "DefaultSendLibrarySet", - "inputs": [ - { - "name": "eid", - "type": "uint32", - "indexed": false, - "internalType": "uint32" - }, - { - "name": "newLib", - "type": "address", - "indexed": false, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "DelegateSet", - "inputs": [ - { - "name": "sender", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "delegate", - "type": "address", - "indexed": false, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "InboundNonceSkipped", - "inputs": [ - { - "name": "srcEid", - "type": "uint32", - "indexed": false, - "internalType": "uint32" - }, - { - "name": "sender", - "type": "bytes32", - "indexed": false, - "internalType": "bytes32" - }, - { - "name": "receiver", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "nonce", - "type": "uint64", - "indexed": false, - "internalType": "uint64" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "LibraryRegistered", - "inputs": [ - { - "name": "newLib", - "type": "address", - "indexed": false, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "LzComposeAlert", - "inputs": [ - { - "name": "from", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "to", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "executor", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "guid", - "type": "bytes32", - "indexed": false, - "internalType": "bytes32" - }, - { - "name": "index", - "type": "uint16", - "indexed": false, - "internalType": "uint16" - }, - { - "name": "gas", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - }, - { - "name": "value", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - }, - { - "name": "message", - "type": "bytes", - "indexed": false, - "internalType": "bytes" - }, - { - "name": "extraData", - "type": "bytes", - "indexed": false, - "internalType": "bytes" - }, - { - "name": "reason", - "type": "bytes", - "indexed": false, - "internalType": "bytes" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "LzReceiveAlert", - "inputs": [ - { - "name": "receiver", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "executor", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "origin", - "type": "tuple", - "indexed": false, - "internalType": "struct Origin", - "components": [ - { "name": "srcEid", "type": "uint32", "internalType": "uint32" }, - { "name": "sender", "type": "bytes32", "internalType": "bytes32" }, - { "name": "nonce", "type": "uint64", "internalType": "uint64" } - ] - }, - { - "name": "guid", - "type": "bytes32", - "indexed": false, - "internalType": "bytes32" - }, - { - "name": "gas", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - }, - { - "name": "value", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - }, - { - "name": "message", - "type": "bytes", - "indexed": false, - "internalType": "bytes" - }, - { - "name": "extraData", - "type": "bytes", - "indexed": false, - "internalType": "bytes" - }, - { - "name": "reason", - "type": "bytes", - "indexed": false, - "internalType": "bytes" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "LzTokenSet", - "inputs": [ - { - "name": "token", - "type": "address", - "indexed": false, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "OwnershipTransferred", - "inputs": [ - { - "name": "previousOwner", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "newOwner", - "type": "address", - "indexed": true, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "PacketBurnt", - "inputs": [ - { - "name": "srcEid", - "type": "uint32", - "indexed": false, - "internalType": "uint32" - }, - { - "name": "sender", - "type": "bytes32", - "indexed": false, - "internalType": "bytes32" - }, - { - "name": "receiver", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "nonce", - "type": "uint64", - "indexed": false, - "internalType": "uint64" - }, - { - "name": "payloadHash", - "type": "bytes32", - "indexed": false, - "internalType": "bytes32" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "PacketDelivered", - "inputs": [ - { - "name": "origin", - "type": "tuple", - "indexed": false, - "internalType": "struct Origin", - "components": [ - { "name": "srcEid", "type": "uint32", "internalType": "uint32" }, - { "name": "sender", "type": "bytes32", "internalType": "bytes32" }, - { "name": "nonce", "type": "uint64", "internalType": "uint64" } - ] - }, - { - "name": "receiver", - "type": "address", - "indexed": false, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "PacketNilified", - "inputs": [ - { - "name": "srcEid", - "type": "uint32", - "indexed": false, - "internalType": "uint32" - }, - { - "name": "sender", - "type": "bytes32", - "indexed": false, - "internalType": "bytes32" - }, - { - "name": "receiver", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "nonce", - "type": "uint64", - "indexed": false, - "internalType": "uint64" - }, - { - "name": "payloadHash", - "type": "bytes32", - "indexed": false, - "internalType": "bytes32" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "PacketSent", - "inputs": [ - { - "name": "encodedPayload", - "type": "bytes", - "indexed": false, - "internalType": "bytes" - }, - { - "name": "options", - "type": "bytes", - "indexed": false, - "internalType": "bytes" - }, - { - "name": "sendLibrary", - "type": "address", - "indexed": false, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "PacketVerified", - "inputs": [ - { - "name": "origin", - "type": "tuple", - "indexed": false, - "internalType": "struct Origin", - "components": [ - { "name": "srcEid", "type": "uint32", "internalType": "uint32" }, - { "name": "sender", "type": "bytes32", "internalType": "bytes32" }, - { "name": "nonce", "type": "uint64", "internalType": "uint64" } - ] - }, - { - "name": "receiver", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "payloadHash", - "type": "bytes32", - "indexed": false, - "internalType": "bytes32" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "ReceiveLibrarySet", - "inputs": [ - { - "name": "receiver", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "eid", - "type": "uint32", - "indexed": false, - "internalType": "uint32" - }, - { - "name": "newLib", - "type": "address", - "indexed": false, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "ReceiveLibraryTimeoutSet", - "inputs": [ - { - "name": "receiver", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "eid", - "type": "uint32", - "indexed": false, - "internalType": "uint32" - }, - { - "name": "oldLib", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "timeout", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "SendLibrarySet", - "inputs": [ - { - "name": "sender", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "eid", - "type": "uint32", - "indexed": false, - "internalType": "uint32" - }, - { - "name": "newLib", - "type": "address", - "indexed": false, - "internalType": "address" - } - ], - "anonymous": false - }, - { "type": "error", "name": "LZ_AlreadyRegistered", "inputs": [] }, - { "type": "error", "name": "LZ_ComposeExists", "inputs": [] }, - { - "type": "error", - "name": "LZ_ComposeNotFound", - "inputs": [ - { "name": "expected", "type": "bytes32", "internalType": "bytes32" }, - { "name": "actual", "type": "bytes32", "internalType": "bytes32" } - ] - }, - { - "type": "error", - "name": "LZ_DefaultReceiveLibUnavailable", - "inputs": [] - }, - { "type": "error", "name": "LZ_DefaultSendLibUnavailable", "inputs": [] }, - { - "type": "error", - "name": "LZ_InsufficientFee", - "inputs": [ - { - "name": "requiredNative", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "suppliedNative", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "requiredLzToken", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "suppliedLzToken", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { "type": "error", "name": "LZ_InvalidExpiry", "inputs": [] }, - { - "type": "error", - "name": "LZ_InvalidNonce", - "inputs": [ - { "name": "nonce", "type": "uint64", "internalType": "uint64" } - ] - }, - { "type": "error", "name": "LZ_InvalidPayloadHash", "inputs": [] }, - { "type": "error", "name": "LZ_InvalidReceiveLibrary", "inputs": [] }, - { "type": "error", "name": "LZ_LzTokenUnavailable", "inputs": [] }, - { "type": "error", "name": "LZ_OnlyNonDefaultLib", "inputs": [] }, - { "type": "error", "name": "LZ_OnlyReceiveLib", "inputs": [] }, - { "type": "error", "name": "LZ_OnlyRegisteredLib", "inputs": [] }, - { "type": "error", "name": "LZ_OnlyRegisteredOrDefaultLib", "inputs": [] }, - { "type": "error", "name": "LZ_OnlySendLib", "inputs": [] }, - { "type": "error", "name": "LZ_PathNotInitializable", "inputs": [] }, - { "type": "error", "name": "LZ_PathNotVerifiable", "inputs": [] }, - { - "type": "error", - "name": "LZ_PayloadHashNotFound", - "inputs": [ - { "name": "expected", "type": "bytes32", "internalType": "bytes32" }, - { "name": "actual", "type": "bytes32", "internalType": "bytes32" } - ] - }, - { "type": "error", "name": "LZ_SameValue", "inputs": [] }, - { "type": "error", "name": "LZ_SendReentrancy", "inputs": [] }, - { "type": "error", "name": "LZ_Unauthorized", "inputs": [] }, - { "type": "error", "name": "LZ_UnsupportedEid", "inputs": [] }, - { "type": "error", "name": "LZ_UnsupportedInterface", "inputs": [] }, - { "type": "error", "name": "LZ_ZeroLzTokenFee", "inputs": [] }, - { - "type": "error", - "name": "OwnableInvalidOwner", - "inputs": [ - { "name": "owner", "type": "address", "internalType": "address" } - ] - }, - { - "type": "error", - "name": "OwnableUnauthorizedAccount", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ] - }, - { - "type": "error", - "name": "SafeERC20FailedOperation", - "inputs": [ - { "name": "token", "type": "address", "internalType": "address" } - ] - }, - { - "type": "error", - "name": "Transfer_NativeFailed", - "inputs": [ - { "name": "_to", "type": "address", "internalType": "address" }, - { "name": "_value", "type": "uint256", "internalType": "uint256" } - ] - }, - { "type": "error", "name": "Transfer_ToAddressIsZero", "inputs": [] } - ], - "bytecode": { - "object": "0x60c06040526001600d553480156200001657600080fd5b50604051620054bf380380620054bf8339810160408190526200003991620002cd565b81816001600160a01b0381166200006b57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6200007681620000cd565b5063ffffffff166080526040516200008e90620002bf565b604051809103906000f080158015620000ab573d6000803e3d6000fd5b506001600160a01b031660a0819052620000c5906200011d565b50506200034a565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b620001276200028e565b6040516301ffc9a760e01b81526325fc096160e21b60048201526001600160a01b038216906301ffc9a790602401602060405180830381865afa15801562000173573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200019991906200031f565b620001b75760405163eb64f35d60e01b815260040160405180910390fd5b6001600160a01b03811660009081526005602052604090205460ff1615620001f25760405163457517f360e11b815260040160405180910390fd5b6001600160a01b0381166000818152600560209081526040808320805460ff191660019081179091556004805491820181559093527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b90920180546001600160a01b0319168417905590519182527f6b374d56679ca9463f27c85c6311e2bb7fde69bf201d3da39d53f10bd9d78af5910160405180910390a150565b6000546001600160a01b03163314620002bd5760405163118cdaa760e01b815233600482015260240162000062565b565b6101e380620052dc83390190565b60008060408385031215620002e157600080fd5b825163ffffffff81168114620002f657600080fd5b60208401519092506001600160a01b03811681146200031457600080fd5b809150509250929050565b6000602082840312156200033257600080fd5b815180151581146200034357600080fd5b9392505050565b60805160a051614f496200039360003960006107810152600081816105310152818161278901528181612f7b01528181612fe20152818161355301526135ba0152614f496000f3fe6080604052600436106103505760003560e01c80639132e5c3116101c6578063c9fc7bcd116100f7578063ddc28c5811610095578063e8964e811161006f578063e8964e8114610b8f578063ef667aa114610baf578063f2fde38b14610bfa578063f64be4c714610c1a57600080fd5b8063ddc28c5814610b2e578063e1758bd814610b5b578063e4fe1d9414610b6f57600080fd5b8063d4b4ec8f116100d1578063d4b4ec8f14610a72578063d70b890214610a92578063dc706a6214610ab2578063dc93c8a214610ae257600080fd5b8063c9fc7bcd146109f6578063ca5eb5e114610a3d578063cb5026b914610a5d57600080fd5b8063a7229fd911610164578063aafea3121161013e578063aafea31214610976578063b96a277f14610996578063c28e0eed146109b6578063c9a54a99146109d657600080fd5b8063a7229fd914610916578063a825d74714610936578063aafe5e071461095657600080fd5b80639c6d7340116101a05780639c6d73401461086f5780639d7f9775146108b6578063a0dd43fc146108d6578063a718531b146108f657600080fd5b80639132e5c31461081a57806391d20fa11461083c5780639535ff301461084f57600080fd5b80635b17bb70116102a05780636f50a8031161023e57806379624ca91161021857806379624ca9146107a35780637cb59012146107bc578063861e1ca5146107dc5780638da5cb5b146107fc57600080fd5b80636f50a80314610724578063715018a61461075a578063733180911461076f57600080fd5b80636a14d7151161027a5780636a14d715146106655780636bf73fa3146106855780636dbd9f90146106a55780636e83f5bb146106c557600080fd5b80635b17bb70146105b65780636750cd4c14610615578063697fe6b61461064557600080fd5b80632baf0be71161030d578063402f8468116102e7578063402f8468146104c057806340f80683146104ff578063416ecebf1461051f578063587cde1e1461056857600080fd5b80632baf0be7146104355780632e80fbf31461045957806335d330b01461047957600080fd5b80630c0c389e1461035557806314f651a91461036a578063183c834f146103a85780632637a450146103c85780632a56c1b0146103e85780632b3197b914610408575b600080fd5b610368610363366004613e11565b610c50565b005b34801561037657600080fd5b5061037f610d4e565b6040805163ffffffff90931683526001600160a01b039091166020830152015b60405180910390f35b3480156103b457600080fd5b506103686103c3366004613ec0565b610d80565b6103db6103d6366004613f0b565b611027565b60405161039f9190613f5d565b3480156103f457600080fd5b50610368610403366004613f9f565b61114d565b34801561041457600080fd5b5061042861042336600461400e565b6111ed565b60405161039f91906140b2565b34801561044157600080fd5b5061044b60001981565b60405190815260200161039f565b34801561046557600080fd5b506103686104743660046140dc565b6112b8565b34801561048557600080fd5b5061044b610494366004614143565b600c60209081526000948552604080862082529385528385208152918452828420909152825290205481565b3480156104cc57600080fd5b506104e06104db366004614185565b611427565b604080516001600160a01b03909316835290151560208301520161039f565b34801561050b57600080fd5b5061036861051a3660046140dc565b6114a5565b34801561052b57600080fd5b506105537f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff909116815260200161039f565b34801561057457600080fd5b5061059e6105833660046141af565b600f602052600090815260409020546001600160a01b031681565b6040516001600160a01b03909116815260200161039f565b3480156105c257600080fd5b506105fd6105d13660046141ca565b60016020908152600093845260408085208252928452828420905282529020546001600160401b031681565b6040516001600160401b03909116815260200161039f565b34801561062157600080fd5b50610635610630366004614206565b61160b565b604051901515815260200161039f565b34801561065157600080fd5b50610368610660366004614221565b61165b565b34801561067157600080fd5b50610368610680366004613ec0565b6116d0565b34801561069157600080fd5b506103686106a036600461431c565b611aae565b3480156106b157600080fd5b506103686106c03660046143ff565b611b18565b3480156106d157600080fd5b506107056106e0366004614206565b600b60205260009081526040902080546001909101546001600160a01b039091169082565b604080516001600160a01b03909316835260208301919091520161039f565b34801561073057600080fd5b5061059e61073f366004614206565b600a602052600090815260409020546001600160a01b031681565b34801561076657600080fd5b50610368611bba565b34801561077b57600080fd5b5061059e7f000000000000000000000000000000000000000000000000000000000000000081565b3480156107af57600080fd5b50600d5460011415610635565b3480156107c857600080fd5b506103686107d736600461448f565b611bce565b3480156107e857600080fd5b506106356107f73660046144e0565b611cba565b34801561080857600080fd5b506000546001600160a01b031661059e565b34801561082657600080fd5b5061082f611d26565b60405161039f919061450b565b61036861084a366004614558565b611d88565b34801561085b57600080fd5b5061036861086a366004614602565b611f18565b34801561087b57600080fd5b506105fd61088a3660046141ca565b60036020908152600093845260408085208252928452828420905282529020546001600160401b031681565b3480156108c257600080fd5b506106356108d1366004614602565b61217c565b3480156108e257600080fd5b506105fd6108f13660046141ca565b612256565b34801561090257600080fd5b50610368610911366004614645565b6122b6565b34801561092257600080fd5b50610368610931366004614671565b6125d6565b34801561094257600080fd5b5061036861095136600461468f565b6125ee565b34801561096257600080fd5b5061044b6109713660046141ca565b612739565b34801561098257600080fd5b506103686109913660046146cc565b6127b9565b3480156109a257600080fd5b5061059e6109b1366004614185565b6129e2565b3480156109c257600080fd5b506103686109d13660046141af565b612a51565b3480156109e257600080fd5b506106356109f13660046144e0565b612aae565b348015610a0257600080fd5b5061044b610a113660046146e8565b600260209081526000948552604080862082529385528385208152918452828420909152825290205481565b348015610a4957600080fd5b50610368610a583660046141af565b612b13565b348015610a6957600080fd5b5061044b600081565b348015610a7e57600080fd5b50610368610a8d366004614645565b612b73565b348015610a9e57600080fd5b50610368610aad3660046146e8565b612db1565b348015610abe57600080fd5b50610635610acd3660046141af565b60056020526000908152604090205460ff1681565b348015610aee57600080fd5b50610635610afd366004614185565b6001600160a01b03918216600090815260066020908152604080832063ffffffff9490941683529290522054161590565b348015610b3a57600080fd5b50610b4e610b49366004613f0b565b612ea0565b60405161039f919061472a565b348015610b6757600080fd5b50600061059e565b348015610b7b57600080fd5b50600e5461059e906001600160a01b031681565b348015610b9b57600080fd5b50610368610baa3660046141af565b61310c565b348015610bbb57600080fd5b50610705610bca366004614185565b6008602090815260009283526040808420909152908252902080546001909101546001600160a01b039091169082565b348015610c0657600080fd5b50610368610c153660046141af565b613270565b348015610c2657600080fd5b5061059e610c35366004614206565b6009602052600090815260409020546001600160a01b031681565b610c9f86610c6160208a018a614206565b60208a0135610c7660608c0160408d01614741565b898989604051602001610c8b9392919061475c565b6040516020818303038152906040526132ae565b506040516313137d6560e01b81526001600160a01b038716906313137d65903490610cda908b908a908a908a9033908b908b906004016147d8565b6000604051808303818588803b158015610cf357600080fd5b505af1158015610d07573d6000803e3d6000fd5b50505050507f3cd5e48f9730b129dc7550f0fcea9c767b7be37837cd10e55eb35f734f4bca048787604051610d3d92919061482f565b60405180910390a150505050505050565b600080610d5e600d546001141590565b610d6a57600080610d78565b610d78600d5460a081901c91565b915091509091565b6001600160a01b038216600090815260056020526040902054829060ff16610dbb57604051631bc58ef360e11b815260040160405180910390fd5b826001600160a01b03811615610e5e576000816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e2f919061486b565b6002811115610e4057610e40614855565b03610e5e576040516342756b1b60e11b815260040160405180910390fd5b83856001600160a01b03821615610efa576040516319d4335360e21b815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015610eb9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610edd919061489a565b610efa57604051630e476aa960e21b815260040160405180910390fd5b610f0388613469565b6000610f0f8989611427565b9150508015610f3157604051633c075f7560e01b815260040160405180910390fd5b85600003610f79576001600160a01b038916600090815260086020908152604080832063ffffffff8c168452909152812080546001600160a01b031916815560010155610fdf565b438611610f99576040516302efcf9160e11b815260040160405180910390fd5b6001600160a01b03898116600090815260086020908152604080832063ffffffff8d168452909152902080546001600160a01b0319169189169190911781556001018690555b7f4e0a5bbfa0c11a64effb1ada324b5437a17272e1aed9320398715ef71bb209288989898960405161101494939291906148b7565b60405180910390a1505050505050505050565b61102f613d5a565b61103c6020840184614206565b336001600d54146110605760405163ee120b0960e01b815260040160405180910390fd5b63ffffffff60a01b60a083811b919091166001600160a01b03831617600d5561108e908601608087016148e7565b80156110a35750600e546001600160a01b0316155b156110c157604051632d7b695560e11b815260040160405180910390fd5b6000806110ce33886134ba565b9150915060006110db3490565b905060006110f76110f260a08b0160808c016148e7565b613766565b905061110884604001518383613802565b600e5460408501516020015161112a916001600160a01b03169083868c613850565b60408401515161113c9083858b61387d565b50506001600d555095945050505050565b61115685613469565b600083838360405160200161116d9392919061475c565b60408051601f1981840301815291905290506111ab866111906020880188614206565b60208801356111a560608a0160408b01614741565b856132ae565b507f3cd5e48f9730b129dc7550f0fcea9c767b7be37837cd10e55eb35f734f4bca0485876040516111dd92919061482f565b60405180910390a1505050505050565b6001600160a01b038316600090815260056020526040902054606090849060ff1661122b57604051631bc58ef360e11b815260040160405180910390fd5b604051639c33abf760e01b815263ffffffff80861660048301526001600160a01b0388811660248401529085166044830152861690639c33abf790606401600060405180830381865afa158015611286573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526112ae9190810190614997565b9695505050505050565b6112c185613469565b6001600160a01b038516600090815260026020908152604080832063ffffffff88168452825280832086845282528083206001600160401b038616845290915290205481811461133357604051637182306f60e01b815260048101829052602481018390526044015b60405180910390fd5b6001600160a01b038616600090815260016020908152604080832063ffffffff8916845282528083208784529091529020546001600160401b039081169084161180159061137f575080155b156113a857604051630c09b63560e41b81526001600160401b038416600482015260240161132a565b6001600160a01b038616600090815260026020908152604080832063ffffffff89168452825280832087845282528083206001600160401b0387168452909152908190206000199055517faf0450c392c4f702515a457a362328c8aa21916048ca6d0419e248b30cb55292906111dd90879087908a90889088906149cb565b6001600160a01b03808316600090815260076020908152604080832063ffffffff86168452909152812054909116908161149e5763ffffffff83166000908152600a60205260409020546001600160a01b031691508161149a57604051633c74268360e11b815260040160405180910390fd5b5060015b9250929050565b6114ae85613469565b6001600160a01b038516600090815260026020908152604080832063ffffffff88168452825280832086845282528083206001600160401b038616845290915290205481811461151b57604051637182306f60e01b8152600481018290526024810183905260440161132a565b80158061156557506001600160a01b038616600090815260016020908152604080832063ffffffff8916845282528083208784529091529020546001600160401b03908116908416115b1561158e57604051630c09b63560e41b81526001600160401b038416600482015260240161132a565b6001600160a01b038616600090815260026020908152604080832063ffffffff89168452825280832087845282528083206001600160401b038716845290915280822091909155517f7f68a37a6e69a0de35024a234558f9efe4b33b58657753d21eaaa82d51c3510e906111dd90879087908a90889088906149cb565b63ffffffff81166000908152600960205260408120546001600160a01b031615801590611655575063ffffffff82166000908152600a60205260409020546001600160a01b031615155b92915050565b336001600160a01b03168b6001600160a01b03168d6001600160a01b03167f8a0b1dce321c5c5fb42349bce46d18087c04140de520917661fb923e44a904b98d8d8d8d8d8d8d8d8d8d6040516116ba9a99989796959493929190614a08565b60405180910390a4505050505050505050505050565b6001600160a01b038216600090815260056020526040902054829060ff1615801561170357506001600160a01b03811615155b156117215760405163a4ff2ec360e01b815260040160405180910390fd5b826001600160a01b038116156117c4576000816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611771573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611795919061486b565b60028111156117a6576117a6614855565b036117c4576040516342756b1b60e11b815260040160405180910390fd5b83856001600160a01b03821615611860576040516319d4335360e21b815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa15801561181f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611843919061489a565b61186057604051630e476aa960e21b815260040160405180910390fd5b61186988613469565b6001600160a01b03808916600090815260076020908152604080832063ffffffff8c168452909152902054811690871681036118b85760405163d0ecb66b60e01b815260040160405180910390fd5b6001600160a01b03898116600081815260076020908152604080832063ffffffff8e168085529083529281902080546001600160a01b031916958d1695861790558051938452908301919091528101919091527fcd6f92f5ac6185a5acfa02c92090746cec64d777269cbcd0ed031e396657a1c29060600160405180910390a18515611a32576001600160a01b038116158061195b57506001600160a01b038716155b1561197957604051633c075f7560e01b815260040160405180910390fd5b60006040518060400160405280836001600160a01b0316815260200188436119a19190614a87565b90526001600160a01b038b8116600090815260086020908152604080832063ffffffff8f168452825291829020845181546001600160a01b03191694169390931783558301516001909201829055519192507f4e0a5bbfa0c11a64effb1ada324b5437a17272e1aed9320398715ef71bb2092891611a24918d918d9187916148b7565b60405180910390a150611aa3565b6001600160a01b038916600090815260086020908152604080832063ffffffff8c16845290915280822080546001600160a01b0319168155600101829055517f4e0a5bbfa0c11a64effb1ada324b5437a17272e1aed9320398715ef71bb2092891611014918c918c918691906148b7565b505050505050505050565b336001600160a01b03168a6001600160a01b03167f7edfa10fe10193301ad8a8bea7e968c7bcabcc64981f368e3aeada40ce26ae2c8d8c8c8c8c8c8c8c8c8c604051611b039a99989796959493929190614a9a565b60405180910390a35050505050505050505050565b6001600160a01b038316600090815260056020526040902054839060ff16611b5357604051631bc58ef360e11b815260040160405180910390fd5b611b5c85613469565b604051631077eb9160e11b81526001600160a01b038516906320efd72290611b8c90889087908790600401614af9565b600060405180830381600087803b158015611ba657600080fd5b505af1158015611aa3573d6000803e3d6000fd5b611bc26138a7565b611bcc60006138d4565b565b336000908152600c602090815260408083206001600160a01b03891684528252808320878452825280832061ffff8716845290915290205415611c2457604051630542086560e21b815260040160405180910390fd5b8181604051611c34929190614bec565b60408051918290038220336000818152600c60209081528482206001600160a01b038c16835281528482208a8352815284822061ffff8a168352905292909220557f3d52ff888d033fd3dd1d8057da59e850c91d91a72c41dfa445b247dfedeb6dc191611cab919088908890889088908890614bfc565b60405180910390a15050505050565b6001600160a01b03811660009081526001602090815260408220611d1f91859185918590611cea90850185614206565b63ffffffff168152602080820192909252604090810160009081208984013582529092529020546001600160401b0316613924565b9392505050565b60606004805480602002602001604051908101604052809291908181526020018280548015611d7e57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611d60575b5050505050905090565b6001600160a01b038089166000908152600c60209081526040808320938b168352928152828220898352815282822061ffff891683529052818120549151611dd39087908790614bec565b60405180910390209050808214611e07576040516335ca595f60e01b8152600481018390526024810182905260440161132a565b6001600160a01b03808b166000908152600c60209081526040808320938d168084529382528083208c8452825280832061ffff8c168452909152908190206001905551630685081360e51b815263d0a10260903490611e76908e908d908c908c9033908d908d90600401614c46565b6000604051808303818588803b158015611e8f57600080fd5b505af1158015611ea3573d6000803e3d6000fd5b50505050507e36c98efcf9e6641dfbc9051f66f405253e8e0c2ab4a24dccda15595b7378c88a8a8a8a604051611f0494939291906001600160a01b039485168152929093166020830152604082015261ffff91909116606082015260800190565b60405180910390a150505050505050505050565b6001600160a01b038116600090815260056020526040902054819060ff16158015611f4b57506001600160a01b03811615155b15611f695760405163a4ff2ec360e01b815260040160405180910390fd5b816001600160a01b0381161561200c576001816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611fb9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fdd919061486b565b6002811115611fee57611fee614855565b0361200c57604051633d00f6f160e11b815260040160405180910390fd5b82846001600160a01b038216156120a8576040516319d4335360e21b815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015612067573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061208b919061489a565b6120a857604051630e476aa960e21b815260040160405180910390fd5b6120b187613469565b6001600160a01b03878116600090815260066020908152604080832063ffffffff8b1684529091529020548187169116036120ff5760405163d0ecb66b60e01b815260040160405180910390fd5b6001600160a01b03878116600081815260066020908152604080832063ffffffff8c168085529083529281902080546001600160a01b031916958b1695861790558051938452908301919091528101919091527f4cff966ebee29a156dcb34cf72c1d06231fb1777f6bdf6e8089819232f002b1c90606001610d3d565b600080600061218b8686611427565b91509150816001600160a01b0316846001600160a01b0316036121b357600192505050611d1f565b6000816121e8576001600160a01b038716600090815260086020908152604080832063ffffffff8a16845290915290206121fe565b63ffffffff86166000908152600b602052604090205b6040805180820190915281546001600160a01b03908116808352600190930154602083015290925086161480156122385750438160200151115b156122495760019350505050611d1f565b5060009695505050505050565b6001600160a01b038316600090815260016020908152604080832063ffffffff8616845282528083208484529091528120546001600160401b03165b6122a1858585846001016139a8565b156122ae57600101612292565b949350505050565b6122be6138a7565b6001600160a01b038216600090815260056020526040902054829060ff166122f957604051631bc58ef360e11b815260040160405180910390fd5b826001600160a01b0381161561239c576000816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612349573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061236d919061486b565b600281111561237e5761237e614855565b0361239c576040516342756b1b60e11b815260040160405180910390fd5b83856001600160a01b03821615612438576040516319d4335360e21b815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa1580156123f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061241b919061489a565b61243857604051630e476aa960e21b815260040160405180910390fd5b63ffffffff87166000908152600a60205260409020546001600160a01b03908116908716810361247b5760405163d0ecb66b60e01b815260040160405180910390fd5b63ffffffff88166000818152600a602090815260409182902080546001600160a01b0319166001600160a01b038c169081179091558251938452908301527fc16891855cffb4a5ac51ac11864a3f3c96ba816cc45fe686c987ae36277de5ec910160405180910390a185156125695763ffffffff88166000908152600b6020526040902080546001600160a01b0319166001600160a01b0383161781556125228743614a87565b600182018190556040517f55b28633cdb29709386f555dfc54418592ad475ce7a65a78ac5928af60ffb8f89161255b918c918691614c99565b60405180910390a1506125cc565b63ffffffff88166000908152600b602052604080822080546001600160a01b0319168155600101829055517f55b28633cdb29709386f555dfc54418592ad475ce7a65a78ac5928af60ffb8f8916125c3918b918591614c99565b60405180910390a15b5050505050505050565b6125de6138a7565b6125e98383836139f5565b505050565b612605826125ff6020860186614206565b3361217c565b612622576040516313e9bb2b60e21b815260040160405180910390fd5b6001600160a01b0382166000908152600160209081526040822090829061264b90870187614206565b63ffffffff168152602080820192909252604090810160009081208784013582529092529020546001600160401b03169050612688848483613924565b6126a55760405163751cb20f60e01b815260040160405180910390fd5b6126b0848483613a18565b6126cc5760405162bbf0e560e11b815260040160405180910390fd5b6126f8836126dd6020870187614206565b60208701356126f26060890160408a01614741565b86613ad5565b7f0d87345f3d1c929caba93e1c3821b54ff3512e12b66aa3cfe54b6bcbc17e59b484848460405161272b93929190614cc0565b60405180910390a150505050565b6001600160a01b038316600090815260036020908152604080832063ffffffff8616845282528083208484529091528120548190612781906001600160401b03166001614ce8565b90506127b0817f0000000000000000000000000000000000000000000000000000000000000000878787613b3b565b95945050505050565b6127c16138a7565b6001600160a01b038116600090815260056020526040902054819060ff166127fc57604051631bc58ef360e11b815260040160405180910390fd5b816001600160a01b0381161561289f576001816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561284c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612870919061486b565b600281111561288157612881614855565b0361289f57604051633d00f6f160e11b815260040160405180910390fd5b82846001600160a01b0382161561293b576040516319d4335360e21b815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa1580156128fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061291e919061489a565b61293b57604051630e476aa960e21b815260040160405180910390fd5b63ffffffff86166000908152600960205260409020546001600160a01b0380871691160361297c5760405163d0ecb66b60e01b815260040160405180910390fd5b63ffffffff861660008181526009602090815260409182902080546001600160a01b0319166001600160a01b038a169081179091558251938452908301527f16aa0f528038ab41019e95bae5b418a50ba8532c5800e3b7ea2f517d3fa625f591016111dd565b6001600160a01b03808316600090815260066020908152604080832063ffffffff861684529091529020541680611655575063ffffffff81166000908152600960205260409020546001600160a01b03168061165557604051636c1ccdb560e01b815260040160405180910390fd5b612a596138a7565b600e80546001600160a01b0319166001600160a01b0383169081179091556040519081527fd476ec5ec1ac11cec3714d41e7ea49419471aceb9bd0dff1becfc3e363a62396906020015b60405180910390a150565b6001600160a01b03811660009081526001602090815260408220611d1f91859185918590612ade90850185614206565b63ffffffff168152602080820192909252604090810160009081208984013582529092529020546001600160401b0316613a18565b336000818152600f602090815260409182902080546001600160a01b0319166001600160a01b0386169081179091558251938452908301527f6ee10e9ed4d6ce9742703a498707862f4b00f1396a87195eb93267b3d79839819101612aa3565b6001600160a01b038216600090815260056020526040902054829060ff16612bae57604051631bc58ef360e11b815260040160405180910390fd5b826001600160a01b03811615612c51576000816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612bfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c22919061486b565b6002811115612c3357612c33614855565b03612c51576040516342756b1b60e11b815260040160405180910390fd5b83856001600160a01b03821615612ced576040516319d4335360e21b815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015612cac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cd0919061489a565b612ced57604051630e476aa960e21b815260040160405180910390fd5b612cf56138a7565b84600003612d295763ffffffff87166000908152600b6020526040812080546001600160a01b031916815560010155612d7e565b438511612d49576040516302efcf9160e11b815260040160405180910390fd5b63ffffffff87166000908152600b6020526040902080546001600160a01b0319166001600160a01b0388161781556001018590555b7f55b28633cdb29709386f555dfc54418592ad475ce7a65a78ac5928af60ffb8f8878787604051610d3d93929190614c99565b612dba84613469565b612dc5848484612256565b612dd0906001614ce8565b6001600160401b0316816001600160401b031614612e0c57604051630c09b63560e41b81526001600160401b038216600482015260240161132a565b6001600160a01b038416600081815260016020908152604080832063ffffffff8816808552908352818420878552835292819020805467ffffffffffffffff19166001600160401b038716908117909155815193845291830186905282019290925260608101919091527f28f40053783033ef755556a0c3315379141f51a33aed8334174ffbadd90bde489060800161272b565b6040805180820190915260008082526020820152612ec460a08401608085016148e7565b8015612ed95750600e546001600160a01b0316155b15612ef757604051632d7b695560e11b815260040160405180910390fd5b6001600160a01b03821660009081526003602090815260408220908290612f2090870187614206565b63ffffffff16815260208082019290925260409081016000908120878401358252909252902054612f5b906001600160401b03166001614ce8565b905060006040518060e00160405280836001600160401b031681526020017f000000000000000000000000000000000000000000000000000000000000000063ffffffff168152602001856001600160a01b03168152602001866000016020810190612fc79190614206565b63ffffffff1681526020018660200135815260200161301f847f0000000000000000000000000000000000000000000000000000000000000000888a60000160208101906130159190614206565b8b60200135613b3b565b81526020016130316040880188614d08565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509390945250929350915061307e9050856109b16020890189614206565b90506001600160a01b03811663d80e9bd98361309d60608a018a614d08565b6130ad60a08c0160808d016148e7565b6040518563ffffffff1660e01b81526004016130cc9493929190614d4e565b6040805180830381865afa1580156130e8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ae9190614e42565b6131146138a7565b6040516301ffc9a760e01b81526325fc096160e21b60048201526001600160a01b038216906301ffc9a790602401602060405180830381865afa15801561315f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613183919061489a565b6131a05760405163eb64f35d60e01b815260040160405180910390fd5b6001600160a01b03811660009081526005602052604090205460ff16156131da5760405163457517f360e11b815260040160405180910390fd5b6001600160a01b0381166000818152600560209081526040808320805460ff191660019081179091556004805491820181559093527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b90920180546001600160a01b0319168417905590519182527f6b374d56679ca9463f27c85c6311e2bb7fde69bf201d3da39d53f10bd9d78af59101612aa3565b6132786138a7565b6001600160a01b0381166132a257604051631e4fbdf760e01b81526000600482015260240161132a565b6132ab816138d4565b50565b6001600160a01b038516600090815260016020908152604080832063ffffffff8816845282528083208684529091528120546001600160401b0390811690841681101561339c57600181015b846001600160401b0316816001600160401b03161161334f5761331f888888846139a8565b61334757604051630c09b63560e41b81526001600160401b038216600482015260240161132a565b6001016132fa565b506001600160a01b038716600090815260016020908152604080832063ffffffff8a16845282528083208884529091529020805467ffffffffffffffff19166001600160401b0386161790555b82516020808501919091206001600160a01b038916600090815260028352604080822063ffffffff8b168352845280822089835284528082206001600160401b0389168352909352919091205490925080831461341657604051637182306f60e01b8152600481018290526024810184905260440161132a565b50506001600160a01b03909516600090815260026020908152604080832063ffffffff90971683529581528582209482529384528481206001600160401b03909316815291909252918220919091555090565b336001600160a01b0382161480159061349c57506001600160a01b038181166000908152600f6020526040902054163314155b156132ab5760405163c4c5259360e01b815260040160405180910390fd5b6134c2613d5a565b600080613533856134d66020870187614206565b6001600160a01b0391909116600090815260036020908152604080832063ffffffff949094168352928152828220818901358352905220805467ffffffffffffffff19811660016001600160401b03928316019182161790915590565b905060006040518060e00160405280836001600160401b031681526020017f000000000000000000000000000000000000000000000000000000000000000063ffffffff168152602001876001600160a01b0316815260200186600001602081019061359f9190614206565b63ffffffff168152602001866020013581526020016135ed847f00000000000000000000000000000000000000000000000000000000000000008a8a60000160208101906130159190614206565b81526020016135ff6040880188614d08565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509390945250929350915061364c9050876109b16020890189614206565b90506000806001600160a01b038316634389e58f8561366e60608c018c614d08565b61367e60a08e0160808f016148e7565b6040518563ffffffff1660e01b815260040161369d9493929190614d4e565b6000604051808303816000875af11580156136bc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526136e49190810190614e5e565b90925090507f1ab700d4ced0c005b164c0f789fd09fcbb0156d4c2041b8a3bfbcd961cd1567f8161371860608b018b614d08565b866040516137299493929190614eac565b60405180910390a1506040805160608101825260a09094015184526001600160401b03909416602084015292820192909252925090509250929050565b600081156137fd57600e546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa1580156137b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137da9190614eec565b9050806000036137fd57604051631775123760e01b815260040160405180910390fd5b919050565b82518210806138145750808360200151115b156125e95782516020840151604051634f3ec0d360e01b815260048101929092526024820184905260448201526064810182905260840161132a565b831561386157613861858386613bb4565b82841015613876576138768582868603613bb4565b5050505050565b831561388d5761388d8285613bef565b828410156138a1576138a181858503613bef565b50505050565b6000546001600160a01b03163314611bcc5760405163118cdaa760e01b815233600482015260240161132a565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600080826001600160401b031611806122ae5750604051600162842fc360e01b031981526001600160a01b0384169063ff7bd03d90613967908790600401614f05565b602060405180830381865afa158015613984573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122ae919061489a565b6001600160a01b038416600090815260026020908152604080832063ffffffff87168452825280832085845282528083206001600160401b03851684529091529020541515949350505050565b6001600160a01b038316613a0d576125e98282613bef565b6125e9838383613bb4565b60006001600160401b038216613a346060860160408701614741565b6001600160401b031611806122ae57506001600160a01b03831660009081526002602090815260408220908290613a6d90880188614206565b63ffffffff1663ffffffff1681526020019081526020016000206000866020013581526020019081526020016000206000866040016020810190613ab19190614741565b6001600160401b031681526020810191909152604001600020541415949350505050565b80613af3576040516304df7fdb60e11b815260040160405180910390fd5b6001600160a01b03909416600090815260026020908152604080832063ffffffff90961683529481528482209382529283528381206001600160401b03909216815291522055565b600085856001600160a01b03861660405160c09390931b6001600160c01b031916602084015260e091821b6001600160e01b03199081166028850152602c8401919091529085901b16604c8201526050810183905260700160405160208183030381529060405280519060200120905095945050505050565b6001600160a01b038216613bdb576040516306b7a93160e41b815260040160405180910390fd5b6125e96001600160a01b0384168383613c9c565b6001600160a01b038216613c16576040516306b7a93160e41b815260040160405180910390fd5b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114613c63576040519150601f19603f3d011682016040523d82523d6000602084013e613c68565b606091505b50509050806125e957604051631196f20d60e21b81526001600160a01b03841660048201526024810183905260440161132a565b604080516001600160a01b03841660248201526044808201849052825180830390910181526064909101909152602080820180516001600160e01b031663a9059cbb60e01b17815282516125e9938793909260009283929183919082885af180613d0c576040513d6000823e3d81fd5b50506000513d91508115613d24578060011415613d31565b6001600160a01b0384163b155b156138a157604051635274afe760e01b81526001600160a01b038516600482015260240161132a565b60405180606001604052806000801916815260200160006001600160401b03168152602001613d9c604051806040016040528060008152602001600081525090565b905290565b600060608284031215613db357600080fd5b50919050565b80356001600160a01b03811681146137fd57600080fd5b60008083601f840112613de257600080fd5b5081356001600160401b03811115613df957600080fd5b60208301915083602082850101111561149e57600080fd5b600080600080600080600060e0888a031215613e2c57600080fd5b613e368989613da1565b9650613e4460608901613db9565b95506080880135945060a08801356001600160401b0380821115613e6757600080fd5b613e738b838c01613dd0565b909650945060c08a0135915080821115613e8c57600080fd5b50613e998a828b01613dd0565b989b979a50959850939692959293505050565b803563ffffffff811681146137fd57600080fd5b60008060008060808587031215613ed657600080fd5b613edf85613db9565b9350613eed60208601613eac565b9250613efb60408601613db9565b9396929550929360600135925050565b60008060408385031215613f1e57600080fd5b82356001600160401b03811115613f3457600080fd5b830160a08186031215613f4657600080fd5b9150613f5460208401613db9565b90509250929050565b6000608082019050825182526001600160401b0360208401511660208301526040830151613f98604084018280518252602090810151910152565b5092915050565b600080600080600060c08688031215613fb757600080fd5b613fc086613db9565b9450613fcf8760208801613da1565b93506080860135925060a08601356001600160401b03811115613ff157600080fd5b613ffd88828901613dd0565b969995985093965092949392505050565b6000806000806080858703121561402457600080fd5b61402d85613db9565b935061403b60208601613db9565b925061404960408601613eac565b915061405760608601613eac565b905092959194509250565b60005b8381101561407d578181015183820152602001614065565b50506000910152565b6000815180845261409e816020860160208601614062565b601f01601f19169290920160200192915050565b602081526000611d1f6020830184614086565b80356001600160401b03811681146137fd57600080fd5b600080600080600060a086880312156140f457600080fd5b6140fd86613db9565b945061410b60208701613eac565b935060408601359250614120606087016140c5565b949793965091946080013592915050565b803561ffff811681146137fd57600080fd5b6000806000806080858703121561415957600080fd5b61416285613db9565b935061417060208601613db9565b92506040850135915061405760608601614131565b6000806040838503121561419857600080fd5b6141a183613db9565b9150613f5460208401613eac565b6000602082840312156141c157600080fd5b611d1f82613db9565b6000806000606084860312156141df57600080fd5b6141e884613db9565b92506141f660208501613eac565b9150604084013590509250925092565b60006020828403121561421857600080fd5b611d1f82613eac565b6000806000806000806000806000806000806101208d8f03121561424457600080fd5b61424d8d613db9565b9b5061425b60208e01613db9565b9a5060408d0135995061427060608e01614131565b985060808d0135975060a08d013596506001600160401b0360c08e0135111561429857600080fd5b6142a88e60c08f01358f01613dd0565b90965094506001600160401b0360e08e013511156142c557600080fd5b6142d58e60e08f01358f01613dd0565b90945092506001600160401b036101008e013511156142f357600080fd5b6143048e6101008f01358f01613dd0565b81935080925050509295989b509295989b509295989b565b60008060008060008060008060008060006101408c8e03121561433e57600080fd5b6143488d8d613da1565b9a5061435660608d01613db9565b995060808c0135985060a08c0135975060c08c013596506001600160401b038060e08e0135111561438657600080fd5b6143968e60e08f01358f01613dd0565b90975095506101008d01358110156143ad57600080fd5b6143be8e6101008f01358f01613dd0565b90955093506101208d01358110156143d557600080fd5b506143e78d6101208e01358e01613dd0565b81935080925050509295989b509295989b9093969950565b6000806000806060858703121561441557600080fd5b61441e85613db9565b935061442c60208601613db9565b925060408501356001600160401b038082111561444857600080fd5b818701915087601f83011261445c57600080fd5b81358181111561446b57600080fd5b8860208260051b850101111561448057600080fd5b95989497505060200194505050565b6000806000806000608086880312156144a757600080fd5b6144b086613db9565b9450602086013593506144c560408701614131565b925060608601356001600160401b03811115613ff157600080fd5b600080608083850312156144f357600080fd5b6144fd8484613da1565b9150613f5460608401613db9565b6020808252825182820181905260009190848201906040850190845b8181101561454c5783516001600160a01b031683529284019291840191600101614527565b50909695505050505050565b60008060008060008060008060c0898b03121561457457600080fd5b61457d89613db9565b975061458b60208a01613db9565b9650604089013595506145a060608a01614131565b945060808901356001600160401b03808211156145bc57600080fd5b6145c88c838d01613dd0565b909650945060a08b01359150808211156145e157600080fd5b506145ee8b828c01613dd0565b999c989b5096995094979396929594505050565b60008060006060848603121561461757600080fd5b61462084613db9565b925061462e60208501613eac565b915061463c60408501613db9565b90509250925092565b60008060006060848603121561465a57600080fd5b61466384613eac565b92506141f660208501613db9565b60008060006060848603121561468657600080fd5b61466384613db9565b600080600060a084860312156146a457600080fd5b6146ae8585613da1565b92506146bc60608501613db9565b9150608084013590509250925092565b600080604083850312156146df57600080fd5b613f4683613eac565b600080600080608085870312156146fe57600080fd5b61470785613db9565b935061471560208601613eac565b925060408501359150614057606086016140c5565b815181526020808301519082015260408101611655565b60006020828403121561475357600080fd5b611d1f826140c5565b838152818360208301376000910160200190815292915050565b63ffffffff61478482613eac565b168252602081013560208301526001600160401b036147a5604083016140c5565b1660408301525050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6147e28189614776565b86606082015260e0608082015260006147ff60e0830187896147af565b6001600160a01b03861660a084015282810360c08401526148218185876147af565b9a9950505050505050505050565b6080810161483d8285614776565b6001600160a01b039290921660609190910152919050565b634e487b7160e01b600052602160045260246000fd5b60006020828403121561487d57600080fd5b815160038110611d1f57600080fd5b80151581146132ab57600080fd5b6000602082840312156148ac57600080fd5b8151611d1f8161488c565b6001600160a01b03948516815263ffffffff93909316602084015292166040820152606081019190915260800190565b6000602082840312156148f957600080fd5b8135611d1f8161488c565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261492b57600080fd5b81516001600160401b038082111561494557614945614904565b604051601f8301601f19908116603f0116810190828211818310171561496d5761496d614904565b8160405283815286602085880101111561498657600080fd5b6112ae846020830160208901614062565b6000602082840312156149a957600080fd5b81516001600160401b038111156149bf57600080fd5b6122ae8482850161491a565b63ffffffff95909516855260208501939093526001600160a01b039190911660408401526001600160401b03166060830152608082015260a00190565b8a815261ffff8a16602082015288604082015287606082015260e060808201526000614a3860e08301888a6147af565b82810360a0840152614a4b8187896147af565b905082810360c0840152614a608185876147af565b9d9c50505050505050505050505050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561165557611655614a71565b6000610120614aa9838e614776565b8b60608401528a60808401528960a08401528060c0840152614ace818401898b6147af565b905082810360e0840152614ae38187896147af565b9050828103610100840152614a608185876147af565b6001600160a01b03841681526040602080830182905282820184905260009190606090818501600587901b8601830188865b89811015614bdc57888303605f190184528135368c9003605e19018112614b5157600080fd5b8b0163ffffffff80614b6283613eac565b16855280614b71888401613eac565b16878601525087810135601e19823603018112614b8d57600080fd5b0185810190356001600160401b03811115614ba757600080fd5b803603821315614bb657600080fd5b8789860152614bc888860182846147af565b958701959450505090840190600101614b2b565b50909a9950505050505050505050565b8183823760009101908152919050565b6001600160a01b038781168252861660208201526040810185905261ffff8416606082015260a060808201819052600090614c3a90830184866147af565b98975050505050505050565b600060018060a01b03808a16835288602084015260a06040840152614c6f60a08401888a6147af565b81871660608501528381036080850152614c8a8186886147af565b9b9a5050505050505050505050565b63ffffffff9390931683526001600160a01b03919091166020830152604082015260600190565b60a08101614cce8286614776565b6001600160a01b0393909316606082015260800152919050565b6001600160401b03818116838216019080821115613f9857613f98614a71565b6000808335601e19843603018112614d1f57600080fd5b8301803591506001600160401b03821115614d3957600080fd5b60200191503681900382131561149e57600080fd5b606080825285516001600160401b031682820152602086015163ffffffff16608083015260408601516001600160a01b031660a0830152850151600090614d9d60c084018263ffffffff169052565b50608086015160e083015260a086015161010083015260c086015160e0610120840152614dce610140840182614086565b90508281036020840152614de38186886147af565b9150506127b0604083018415159052565b600060408284031215614e0657600080fd5b604051604081018181106001600160401b0382111715614e2857614e28614904565b604052825181526020928301519281019290925250919050565b600060408284031215614e5457600080fd5b611d1f8383614df4565b60008060608385031215614e7157600080fd5b614e7b8484614df4565b915060408301516001600160401b03811115614e9657600080fd5b614ea28582860161491a565b9150509250929050565b606081526000614ebf6060830187614086565b8281036020840152614ed28186886147af565b91505060018060a01b038316604083015295945050505050565b600060208284031215614efe57600080fd5b5051919050565b60608101611655828461477656fea264697066735822122051f9eb00fad53055a1c5087afa544b196a11f671f631975a7c4baa38e5aeab2064736f6c63430008160033608060405234801561001057600080fd5b506101c3806100206000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806301ffc9a7146100655780631881d94d1461008d57806354fd4d501461009c5780636750cd4c146100c3575b604051632657b6c360e01b815260040160405180910390fd5b61007861007336600461010e565b6100d7565b60405190151581526020015b60405180910390f35b6002604051610084919061013f565b6040805167ffffffffffffffff815260ff6020820152600291810191909152606001610084565b6100786100d1366004610167565b50600190565b60006001600160e01b031982166325fc096160e21b148061010857506301ffc9a760e01b6001600160e01b03198316145b92915050565b60006020828403121561012057600080fd5b81356001600160e01b03198116811461013857600080fd5b9392505050565b602081016003831061016157634e487b7160e01b600052602160045260246000fd5b91905290565b60006020828403121561017957600080fd5b813563ffffffff8116811461013857600080fdfea2646970667358221220b5a5c043a377444c26f6a8e7dd680ec55e20f7abeec109769ef20ff322bd379164736f6c63430008160033", - "sourceMap": "2770:15372:75:-:0;;;527:1:30;534:42;;3175:82:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3249:4;3224:6;-1:-1:-1;;;;;1273:26:107;;1269:95;;1322:31;;-1:-1:-1;;;1322:31:107;;1350:1;1322:31;;;620:51:132;593:18;;1322:31:107;;;;;;;;1269:95;1373:32;1392:12;1373:18;:32::i;:::-;-1:-1:-1;1064:10:28;;;;1634:23:27;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;1609:49:27;;;;;1668:31;;:15;:31::i;:::-;3175:82:75;;2770:15372;;2912:187:107;2985:16;3004:6;;-1:-1:-1;;;;;3020:17:107;;;-1:-1:-1;;;;;;3020:17:107;;;;;;3052:40;;3004:6;;;;;;;3052:40;;2985:16;3052:40;2975:124;2912:187;:::o;6264:511:27:-;1531:13:107;:11;:13::i;:::-;6376:62:27::1;::::0;-1:-1:-1;;;6376:62:27;;-1:-1:-1;;;6376:62:27::1;::::0;::::1;826:52:132::0;-1:-1:-1;;;;;6376:31:27;::::1;::::0;::::1;::::0;799:18:132;;6376:62:27::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6371:108;;6447:32;;-1:-1:-1::0;;;6447:32:27::1;;;;;;;;;;;6371:108;-1:-1:-1::0;;;;;6534:25:27;::::1;;::::0;;;:19:::1;:25;::::0;;;;;::::1;;6530:67;;;6568:29;;-1:-1:-1::0;;;6568:29:27::1;;;;;;;;;;;6530:67;-1:-1:-1::0;;;;;6657:25:27;::::1;;::::0;;;:19:::1;:25;::::0;;;;;;;:32;;-1:-1:-1;;6657:32:27::1;6685:4;6657:32:::0;;::::1;::::0;;;6699:19:::1;:30:::0;;;;::::1;::::0;;;;;;;;::::1;::::0;;-1:-1:-1;;;;;;6699:30:27::1;::::0;::::1;::::0;;6745:23;;620:51:132;;;6745:23:27::1;::::0;593:18:132;6745:23:27::1;;;;;;;6264:511:::0;:::o;1796:162:107:-;1684:7;1710:6;-1:-1:-1;;;;;1710:6:107;735:10:117;1855:23:107;1851:101;;1901:40;;-1:-1:-1;;;1901:40:107;;735:10:117;1901:40:107;;;620:51:132;593:18;;1901:40:107;474:203:132;1851:101:107;1796:162::o;2770:15372:75:-;;;;;;;;:::o;14:455:132:-;92:6;100;153:2;141:9;132:7;128:23;124:32;121:52;;;169:1;166;159:12;121:52;201:9;195:16;251:10;244:5;240:22;233:5;230:33;220:61;;277:1;274;267:12;220:61;350:2;335:18;;329:25;300:5;;-1:-1:-1;;;;;;385:33:132;;373:46;;363:74;;433:1;430;423:12;363:74;456:7;446:17;;;14:455;;;;;:::o;889:277::-;956:6;1009:2;997:9;988:7;984:23;980:32;977:52;;;1025:1;1022;1015:12;977:52;1057:9;1051:16;1110:5;1103:13;1096:21;1089:5;1086:32;1076:60;;1132:1;1129;1122:12;1076:60;1155:5;889:277;-1:-1:-1;;;889:277:132:o;:::-;2770:15372:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", - "linkReferences": {} - }, - "deployedBytecode": { - "object": "0x6080604052600436106103505760003560e01c80639132e5c3116101c6578063c9fc7bcd116100f7578063ddc28c5811610095578063e8964e811161006f578063e8964e8114610b8f578063ef667aa114610baf578063f2fde38b14610bfa578063f64be4c714610c1a57600080fd5b8063ddc28c5814610b2e578063e1758bd814610b5b578063e4fe1d9414610b6f57600080fd5b8063d4b4ec8f116100d1578063d4b4ec8f14610a72578063d70b890214610a92578063dc706a6214610ab2578063dc93c8a214610ae257600080fd5b8063c9fc7bcd146109f6578063ca5eb5e114610a3d578063cb5026b914610a5d57600080fd5b8063a7229fd911610164578063aafea3121161013e578063aafea31214610976578063b96a277f14610996578063c28e0eed146109b6578063c9a54a99146109d657600080fd5b8063a7229fd914610916578063a825d74714610936578063aafe5e071461095657600080fd5b80639c6d7340116101a05780639c6d73401461086f5780639d7f9775146108b6578063a0dd43fc146108d6578063a718531b146108f657600080fd5b80639132e5c31461081a57806391d20fa11461083c5780639535ff301461084f57600080fd5b80635b17bb70116102a05780636f50a8031161023e57806379624ca91161021857806379624ca9146107a35780637cb59012146107bc578063861e1ca5146107dc5780638da5cb5b146107fc57600080fd5b80636f50a80314610724578063715018a61461075a578063733180911461076f57600080fd5b80636a14d7151161027a5780636a14d715146106655780636bf73fa3146106855780636dbd9f90146106a55780636e83f5bb146106c557600080fd5b80635b17bb70146105b65780636750cd4c14610615578063697fe6b61461064557600080fd5b80632baf0be71161030d578063402f8468116102e7578063402f8468146104c057806340f80683146104ff578063416ecebf1461051f578063587cde1e1461056857600080fd5b80632baf0be7146104355780632e80fbf31461045957806335d330b01461047957600080fd5b80630c0c389e1461035557806314f651a91461036a578063183c834f146103a85780632637a450146103c85780632a56c1b0146103e85780632b3197b914610408575b600080fd5b610368610363366004613e11565b610c50565b005b34801561037657600080fd5b5061037f610d4e565b6040805163ffffffff90931683526001600160a01b039091166020830152015b60405180910390f35b3480156103b457600080fd5b506103686103c3366004613ec0565b610d80565b6103db6103d6366004613f0b565b611027565b60405161039f9190613f5d565b3480156103f457600080fd5b50610368610403366004613f9f565b61114d565b34801561041457600080fd5b5061042861042336600461400e565b6111ed565b60405161039f91906140b2565b34801561044157600080fd5b5061044b60001981565b60405190815260200161039f565b34801561046557600080fd5b506103686104743660046140dc565b6112b8565b34801561048557600080fd5b5061044b610494366004614143565b600c60209081526000948552604080862082529385528385208152918452828420909152825290205481565b3480156104cc57600080fd5b506104e06104db366004614185565b611427565b604080516001600160a01b03909316835290151560208301520161039f565b34801561050b57600080fd5b5061036861051a3660046140dc565b6114a5565b34801561052b57600080fd5b506105537f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff909116815260200161039f565b34801561057457600080fd5b5061059e6105833660046141af565b600f602052600090815260409020546001600160a01b031681565b6040516001600160a01b03909116815260200161039f565b3480156105c257600080fd5b506105fd6105d13660046141ca565b60016020908152600093845260408085208252928452828420905282529020546001600160401b031681565b6040516001600160401b03909116815260200161039f565b34801561062157600080fd5b50610635610630366004614206565b61160b565b604051901515815260200161039f565b34801561065157600080fd5b50610368610660366004614221565b61165b565b34801561067157600080fd5b50610368610680366004613ec0565b6116d0565b34801561069157600080fd5b506103686106a036600461431c565b611aae565b3480156106b157600080fd5b506103686106c03660046143ff565b611b18565b3480156106d157600080fd5b506107056106e0366004614206565b600b60205260009081526040902080546001909101546001600160a01b039091169082565b604080516001600160a01b03909316835260208301919091520161039f565b34801561073057600080fd5b5061059e61073f366004614206565b600a602052600090815260409020546001600160a01b031681565b34801561076657600080fd5b50610368611bba565b34801561077b57600080fd5b5061059e7f000000000000000000000000000000000000000000000000000000000000000081565b3480156107af57600080fd5b50600d5460011415610635565b3480156107c857600080fd5b506103686107d736600461448f565b611bce565b3480156107e857600080fd5b506106356107f73660046144e0565b611cba565b34801561080857600080fd5b506000546001600160a01b031661059e565b34801561082657600080fd5b5061082f611d26565b60405161039f919061450b565b61036861084a366004614558565b611d88565b34801561085b57600080fd5b5061036861086a366004614602565b611f18565b34801561087b57600080fd5b506105fd61088a3660046141ca565b60036020908152600093845260408085208252928452828420905282529020546001600160401b031681565b3480156108c257600080fd5b506106356108d1366004614602565b61217c565b3480156108e257600080fd5b506105fd6108f13660046141ca565b612256565b34801561090257600080fd5b50610368610911366004614645565b6122b6565b34801561092257600080fd5b50610368610931366004614671565b6125d6565b34801561094257600080fd5b5061036861095136600461468f565b6125ee565b34801561096257600080fd5b5061044b6109713660046141ca565b612739565b34801561098257600080fd5b506103686109913660046146cc565b6127b9565b3480156109a257600080fd5b5061059e6109b1366004614185565b6129e2565b3480156109c257600080fd5b506103686109d13660046141af565b612a51565b3480156109e257600080fd5b506106356109f13660046144e0565b612aae565b348015610a0257600080fd5b5061044b610a113660046146e8565b600260209081526000948552604080862082529385528385208152918452828420909152825290205481565b348015610a4957600080fd5b50610368610a583660046141af565b612b13565b348015610a6957600080fd5b5061044b600081565b348015610a7e57600080fd5b50610368610a8d366004614645565b612b73565b348015610a9e57600080fd5b50610368610aad3660046146e8565b612db1565b348015610abe57600080fd5b50610635610acd3660046141af565b60056020526000908152604090205460ff1681565b348015610aee57600080fd5b50610635610afd366004614185565b6001600160a01b03918216600090815260066020908152604080832063ffffffff9490941683529290522054161590565b348015610b3a57600080fd5b50610b4e610b49366004613f0b565b612ea0565b60405161039f919061472a565b348015610b6757600080fd5b50600061059e565b348015610b7b57600080fd5b50600e5461059e906001600160a01b031681565b348015610b9b57600080fd5b50610368610baa3660046141af565b61310c565b348015610bbb57600080fd5b50610705610bca366004614185565b6008602090815260009283526040808420909152908252902080546001909101546001600160a01b039091169082565b348015610c0657600080fd5b50610368610c153660046141af565b613270565b348015610c2657600080fd5b5061059e610c35366004614206565b6009602052600090815260409020546001600160a01b031681565b610c9f86610c6160208a018a614206565b60208a0135610c7660608c0160408d01614741565b898989604051602001610c8b9392919061475c565b6040516020818303038152906040526132ae565b506040516313137d6560e01b81526001600160a01b038716906313137d65903490610cda908b908a908a908a9033908b908b906004016147d8565b6000604051808303818588803b158015610cf357600080fd5b505af1158015610d07573d6000803e3d6000fd5b50505050507f3cd5e48f9730b129dc7550f0fcea9c767b7be37837cd10e55eb35f734f4bca048787604051610d3d92919061482f565b60405180910390a150505050505050565b600080610d5e600d546001141590565b610d6a57600080610d78565b610d78600d5460a081901c91565b915091509091565b6001600160a01b038216600090815260056020526040902054829060ff16610dbb57604051631bc58ef360e11b815260040160405180910390fd5b826001600160a01b03811615610e5e576000816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e2f919061486b565b6002811115610e4057610e40614855565b03610e5e576040516342756b1b60e11b815260040160405180910390fd5b83856001600160a01b03821615610efa576040516319d4335360e21b815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015610eb9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610edd919061489a565b610efa57604051630e476aa960e21b815260040160405180910390fd5b610f0388613469565b6000610f0f8989611427565b9150508015610f3157604051633c075f7560e01b815260040160405180910390fd5b85600003610f79576001600160a01b038916600090815260086020908152604080832063ffffffff8c168452909152812080546001600160a01b031916815560010155610fdf565b438611610f99576040516302efcf9160e11b815260040160405180910390fd5b6001600160a01b03898116600090815260086020908152604080832063ffffffff8d168452909152902080546001600160a01b0319169189169190911781556001018690555b7f4e0a5bbfa0c11a64effb1ada324b5437a17272e1aed9320398715ef71bb209288989898960405161101494939291906148b7565b60405180910390a1505050505050505050565b61102f613d5a565b61103c6020840184614206565b336001600d54146110605760405163ee120b0960e01b815260040160405180910390fd5b63ffffffff60a01b60a083811b919091166001600160a01b03831617600d5561108e908601608087016148e7565b80156110a35750600e546001600160a01b0316155b156110c157604051632d7b695560e11b815260040160405180910390fd5b6000806110ce33886134ba565b9150915060006110db3490565b905060006110f76110f260a08b0160808c016148e7565b613766565b905061110884604001518383613802565b600e5460408501516020015161112a916001600160a01b03169083868c613850565b60408401515161113c9083858b61387d565b50506001600d555095945050505050565b61115685613469565b600083838360405160200161116d9392919061475c565b60408051601f1981840301815291905290506111ab866111906020880188614206565b60208801356111a560608a0160408b01614741565b856132ae565b507f3cd5e48f9730b129dc7550f0fcea9c767b7be37837cd10e55eb35f734f4bca0485876040516111dd92919061482f565b60405180910390a1505050505050565b6001600160a01b038316600090815260056020526040902054606090849060ff1661122b57604051631bc58ef360e11b815260040160405180910390fd5b604051639c33abf760e01b815263ffffffff80861660048301526001600160a01b0388811660248401529085166044830152861690639c33abf790606401600060405180830381865afa158015611286573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526112ae9190810190614997565b9695505050505050565b6112c185613469565b6001600160a01b038516600090815260026020908152604080832063ffffffff88168452825280832086845282528083206001600160401b038616845290915290205481811461133357604051637182306f60e01b815260048101829052602481018390526044015b60405180910390fd5b6001600160a01b038616600090815260016020908152604080832063ffffffff8916845282528083208784529091529020546001600160401b039081169084161180159061137f575080155b156113a857604051630c09b63560e41b81526001600160401b038416600482015260240161132a565b6001600160a01b038616600090815260026020908152604080832063ffffffff89168452825280832087845282528083206001600160401b0387168452909152908190206000199055517faf0450c392c4f702515a457a362328c8aa21916048ca6d0419e248b30cb55292906111dd90879087908a90889088906149cb565b6001600160a01b03808316600090815260076020908152604080832063ffffffff86168452909152812054909116908161149e5763ffffffff83166000908152600a60205260409020546001600160a01b031691508161149a57604051633c74268360e11b815260040160405180910390fd5b5060015b9250929050565b6114ae85613469565b6001600160a01b038516600090815260026020908152604080832063ffffffff88168452825280832086845282528083206001600160401b038616845290915290205481811461151b57604051637182306f60e01b8152600481018290526024810183905260440161132a565b80158061156557506001600160a01b038616600090815260016020908152604080832063ffffffff8916845282528083208784529091529020546001600160401b03908116908416115b1561158e57604051630c09b63560e41b81526001600160401b038416600482015260240161132a565b6001600160a01b038616600090815260026020908152604080832063ffffffff89168452825280832087845282528083206001600160401b038716845290915280822091909155517f7f68a37a6e69a0de35024a234558f9efe4b33b58657753d21eaaa82d51c3510e906111dd90879087908a90889088906149cb565b63ffffffff81166000908152600960205260408120546001600160a01b031615801590611655575063ffffffff82166000908152600a60205260409020546001600160a01b031615155b92915050565b336001600160a01b03168b6001600160a01b03168d6001600160a01b03167f8a0b1dce321c5c5fb42349bce46d18087c04140de520917661fb923e44a904b98d8d8d8d8d8d8d8d8d8d6040516116ba9a99989796959493929190614a08565b60405180910390a4505050505050505050505050565b6001600160a01b038216600090815260056020526040902054829060ff1615801561170357506001600160a01b03811615155b156117215760405163a4ff2ec360e01b815260040160405180910390fd5b826001600160a01b038116156117c4576000816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611771573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611795919061486b565b60028111156117a6576117a6614855565b036117c4576040516342756b1b60e11b815260040160405180910390fd5b83856001600160a01b03821615611860576040516319d4335360e21b815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa15801561181f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611843919061489a565b61186057604051630e476aa960e21b815260040160405180910390fd5b61186988613469565b6001600160a01b03808916600090815260076020908152604080832063ffffffff8c168452909152902054811690871681036118b85760405163d0ecb66b60e01b815260040160405180910390fd5b6001600160a01b03898116600081815260076020908152604080832063ffffffff8e168085529083529281902080546001600160a01b031916958d1695861790558051938452908301919091528101919091527fcd6f92f5ac6185a5acfa02c92090746cec64d777269cbcd0ed031e396657a1c29060600160405180910390a18515611a32576001600160a01b038116158061195b57506001600160a01b038716155b1561197957604051633c075f7560e01b815260040160405180910390fd5b60006040518060400160405280836001600160a01b0316815260200188436119a19190614a87565b90526001600160a01b038b8116600090815260086020908152604080832063ffffffff8f168452825291829020845181546001600160a01b03191694169390931783558301516001909201829055519192507f4e0a5bbfa0c11a64effb1ada324b5437a17272e1aed9320398715ef71bb2092891611a24918d918d9187916148b7565b60405180910390a150611aa3565b6001600160a01b038916600090815260086020908152604080832063ffffffff8c16845290915280822080546001600160a01b0319168155600101829055517f4e0a5bbfa0c11a64effb1ada324b5437a17272e1aed9320398715ef71bb2092891611014918c918c918691906148b7565b505050505050505050565b336001600160a01b03168a6001600160a01b03167f7edfa10fe10193301ad8a8bea7e968c7bcabcc64981f368e3aeada40ce26ae2c8d8c8c8c8c8c8c8c8c8c604051611b039a99989796959493929190614a9a565b60405180910390a35050505050505050505050565b6001600160a01b038316600090815260056020526040902054839060ff16611b5357604051631bc58ef360e11b815260040160405180910390fd5b611b5c85613469565b604051631077eb9160e11b81526001600160a01b038516906320efd72290611b8c90889087908790600401614af9565b600060405180830381600087803b158015611ba657600080fd5b505af1158015611aa3573d6000803e3d6000fd5b611bc26138a7565b611bcc60006138d4565b565b336000908152600c602090815260408083206001600160a01b03891684528252808320878452825280832061ffff8716845290915290205415611c2457604051630542086560e21b815260040160405180910390fd5b8181604051611c34929190614bec565b60408051918290038220336000818152600c60209081528482206001600160a01b038c16835281528482208a8352815284822061ffff8a168352905292909220557f3d52ff888d033fd3dd1d8057da59e850c91d91a72c41dfa445b247dfedeb6dc191611cab919088908890889088908890614bfc565b60405180910390a15050505050565b6001600160a01b03811660009081526001602090815260408220611d1f91859185918590611cea90850185614206565b63ffffffff168152602080820192909252604090810160009081208984013582529092529020546001600160401b0316613924565b9392505050565b60606004805480602002602001604051908101604052809291908181526020018280548015611d7e57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611d60575b5050505050905090565b6001600160a01b038089166000908152600c60209081526040808320938b168352928152828220898352815282822061ffff891683529052818120549151611dd39087908790614bec565b60405180910390209050808214611e07576040516335ca595f60e01b8152600481018390526024810182905260440161132a565b6001600160a01b03808b166000908152600c60209081526040808320938d168084529382528083208c8452825280832061ffff8c168452909152908190206001905551630685081360e51b815263d0a10260903490611e76908e908d908c908c9033908d908d90600401614c46565b6000604051808303818588803b158015611e8f57600080fd5b505af1158015611ea3573d6000803e3d6000fd5b50505050507e36c98efcf9e6641dfbc9051f66f405253e8e0c2ab4a24dccda15595b7378c88a8a8a8a604051611f0494939291906001600160a01b039485168152929093166020830152604082015261ffff91909116606082015260800190565b60405180910390a150505050505050505050565b6001600160a01b038116600090815260056020526040902054819060ff16158015611f4b57506001600160a01b03811615155b15611f695760405163a4ff2ec360e01b815260040160405180910390fd5b816001600160a01b0381161561200c576001816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611fb9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fdd919061486b565b6002811115611fee57611fee614855565b0361200c57604051633d00f6f160e11b815260040160405180910390fd5b82846001600160a01b038216156120a8576040516319d4335360e21b815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015612067573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061208b919061489a565b6120a857604051630e476aa960e21b815260040160405180910390fd5b6120b187613469565b6001600160a01b03878116600090815260066020908152604080832063ffffffff8b1684529091529020548187169116036120ff5760405163d0ecb66b60e01b815260040160405180910390fd5b6001600160a01b03878116600081815260066020908152604080832063ffffffff8c168085529083529281902080546001600160a01b031916958b1695861790558051938452908301919091528101919091527f4cff966ebee29a156dcb34cf72c1d06231fb1777f6bdf6e8089819232f002b1c90606001610d3d565b600080600061218b8686611427565b91509150816001600160a01b0316846001600160a01b0316036121b357600192505050611d1f565b6000816121e8576001600160a01b038716600090815260086020908152604080832063ffffffff8a16845290915290206121fe565b63ffffffff86166000908152600b602052604090205b6040805180820190915281546001600160a01b03908116808352600190930154602083015290925086161480156122385750438160200151115b156122495760019350505050611d1f565b5060009695505050505050565b6001600160a01b038316600090815260016020908152604080832063ffffffff8616845282528083208484529091528120546001600160401b03165b6122a1858585846001016139a8565b156122ae57600101612292565b949350505050565b6122be6138a7565b6001600160a01b038216600090815260056020526040902054829060ff166122f957604051631bc58ef360e11b815260040160405180910390fd5b826001600160a01b0381161561239c576000816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612349573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061236d919061486b565b600281111561237e5761237e614855565b0361239c576040516342756b1b60e11b815260040160405180910390fd5b83856001600160a01b03821615612438576040516319d4335360e21b815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa1580156123f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061241b919061489a565b61243857604051630e476aa960e21b815260040160405180910390fd5b63ffffffff87166000908152600a60205260409020546001600160a01b03908116908716810361247b5760405163d0ecb66b60e01b815260040160405180910390fd5b63ffffffff88166000818152600a602090815260409182902080546001600160a01b0319166001600160a01b038c169081179091558251938452908301527fc16891855cffb4a5ac51ac11864a3f3c96ba816cc45fe686c987ae36277de5ec910160405180910390a185156125695763ffffffff88166000908152600b6020526040902080546001600160a01b0319166001600160a01b0383161781556125228743614a87565b600182018190556040517f55b28633cdb29709386f555dfc54418592ad475ce7a65a78ac5928af60ffb8f89161255b918c918691614c99565b60405180910390a1506125cc565b63ffffffff88166000908152600b602052604080822080546001600160a01b0319168155600101829055517f55b28633cdb29709386f555dfc54418592ad475ce7a65a78ac5928af60ffb8f8916125c3918b918591614c99565b60405180910390a15b5050505050505050565b6125de6138a7565b6125e98383836139f5565b505050565b612605826125ff6020860186614206565b3361217c565b612622576040516313e9bb2b60e21b815260040160405180910390fd5b6001600160a01b0382166000908152600160209081526040822090829061264b90870187614206565b63ffffffff168152602080820192909252604090810160009081208784013582529092529020546001600160401b03169050612688848483613924565b6126a55760405163751cb20f60e01b815260040160405180910390fd5b6126b0848483613a18565b6126cc5760405162bbf0e560e11b815260040160405180910390fd5b6126f8836126dd6020870187614206565b60208701356126f26060890160408a01614741565b86613ad5565b7f0d87345f3d1c929caba93e1c3821b54ff3512e12b66aa3cfe54b6bcbc17e59b484848460405161272b93929190614cc0565b60405180910390a150505050565b6001600160a01b038316600090815260036020908152604080832063ffffffff8616845282528083208484529091528120548190612781906001600160401b03166001614ce8565b90506127b0817f0000000000000000000000000000000000000000000000000000000000000000878787613b3b565b95945050505050565b6127c16138a7565b6001600160a01b038116600090815260056020526040902054819060ff166127fc57604051631bc58ef360e11b815260040160405180910390fd5b816001600160a01b0381161561289f576001816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561284c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612870919061486b565b600281111561288157612881614855565b0361289f57604051633d00f6f160e11b815260040160405180910390fd5b82846001600160a01b0382161561293b576040516319d4335360e21b815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa1580156128fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061291e919061489a565b61293b57604051630e476aa960e21b815260040160405180910390fd5b63ffffffff86166000908152600960205260409020546001600160a01b0380871691160361297c5760405163d0ecb66b60e01b815260040160405180910390fd5b63ffffffff861660008181526009602090815260409182902080546001600160a01b0319166001600160a01b038a169081179091558251938452908301527f16aa0f528038ab41019e95bae5b418a50ba8532c5800e3b7ea2f517d3fa625f591016111dd565b6001600160a01b03808316600090815260066020908152604080832063ffffffff861684529091529020541680611655575063ffffffff81166000908152600960205260409020546001600160a01b03168061165557604051636c1ccdb560e01b815260040160405180910390fd5b612a596138a7565b600e80546001600160a01b0319166001600160a01b0383169081179091556040519081527fd476ec5ec1ac11cec3714d41e7ea49419471aceb9bd0dff1becfc3e363a62396906020015b60405180910390a150565b6001600160a01b03811660009081526001602090815260408220611d1f91859185918590612ade90850185614206565b63ffffffff168152602080820192909252604090810160009081208984013582529092529020546001600160401b0316613a18565b336000818152600f602090815260409182902080546001600160a01b0319166001600160a01b0386169081179091558251938452908301527f6ee10e9ed4d6ce9742703a498707862f4b00f1396a87195eb93267b3d79839819101612aa3565b6001600160a01b038216600090815260056020526040902054829060ff16612bae57604051631bc58ef360e11b815260040160405180910390fd5b826001600160a01b03811615612c51576000816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612bfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c22919061486b565b6002811115612c3357612c33614855565b03612c51576040516342756b1b60e11b815260040160405180910390fd5b83856001600160a01b03821615612ced576040516319d4335360e21b815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015612cac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cd0919061489a565b612ced57604051630e476aa960e21b815260040160405180910390fd5b612cf56138a7565b84600003612d295763ffffffff87166000908152600b6020526040812080546001600160a01b031916815560010155612d7e565b438511612d49576040516302efcf9160e11b815260040160405180910390fd5b63ffffffff87166000908152600b6020526040902080546001600160a01b0319166001600160a01b0388161781556001018590555b7f55b28633cdb29709386f555dfc54418592ad475ce7a65a78ac5928af60ffb8f8878787604051610d3d93929190614c99565b612dba84613469565b612dc5848484612256565b612dd0906001614ce8565b6001600160401b0316816001600160401b031614612e0c57604051630c09b63560e41b81526001600160401b038216600482015260240161132a565b6001600160a01b038416600081815260016020908152604080832063ffffffff8816808552908352818420878552835292819020805467ffffffffffffffff19166001600160401b038716908117909155815193845291830186905282019290925260608101919091527f28f40053783033ef755556a0c3315379141f51a33aed8334174ffbadd90bde489060800161272b565b6040805180820190915260008082526020820152612ec460a08401608085016148e7565b8015612ed95750600e546001600160a01b0316155b15612ef757604051632d7b695560e11b815260040160405180910390fd5b6001600160a01b03821660009081526003602090815260408220908290612f2090870187614206565b63ffffffff16815260208082019290925260409081016000908120878401358252909252902054612f5b906001600160401b03166001614ce8565b905060006040518060e00160405280836001600160401b031681526020017f000000000000000000000000000000000000000000000000000000000000000063ffffffff168152602001856001600160a01b03168152602001866000016020810190612fc79190614206565b63ffffffff1681526020018660200135815260200161301f847f0000000000000000000000000000000000000000000000000000000000000000888a60000160208101906130159190614206565b8b60200135613b3b565b81526020016130316040880188614d08565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509390945250929350915061307e9050856109b16020890189614206565b90506001600160a01b03811663d80e9bd98361309d60608a018a614d08565b6130ad60a08c0160808d016148e7565b6040518563ffffffff1660e01b81526004016130cc9493929190614d4e565b6040805180830381865afa1580156130e8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ae9190614e42565b6131146138a7565b6040516301ffc9a760e01b81526325fc096160e21b60048201526001600160a01b038216906301ffc9a790602401602060405180830381865afa15801561315f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613183919061489a565b6131a05760405163eb64f35d60e01b815260040160405180910390fd5b6001600160a01b03811660009081526005602052604090205460ff16156131da5760405163457517f360e11b815260040160405180910390fd5b6001600160a01b0381166000818152600560209081526040808320805460ff191660019081179091556004805491820181559093527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b90920180546001600160a01b0319168417905590519182527f6b374d56679ca9463f27c85c6311e2bb7fde69bf201d3da39d53f10bd9d78af59101612aa3565b6132786138a7565b6001600160a01b0381166132a257604051631e4fbdf760e01b81526000600482015260240161132a565b6132ab816138d4565b50565b6001600160a01b038516600090815260016020908152604080832063ffffffff8816845282528083208684529091528120546001600160401b0390811690841681101561339c57600181015b846001600160401b0316816001600160401b03161161334f5761331f888888846139a8565b61334757604051630c09b63560e41b81526001600160401b038216600482015260240161132a565b6001016132fa565b506001600160a01b038716600090815260016020908152604080832063ffffffff8a16845282528083208884529091529020805467ffffffffffffffff19166001600160401b0386161790555b82516020808501919091206001600160a01b038916600090815260028352604080822063ffffffff8b168352845280822089835284528082206001600160401b0389168352909352919091205490925080831461341657604051637182306f60e01b8152600481018290526024810184905260440161132a565b50506001600160a01b03909516600090815260026020908152604080832063ffffffff90971683529581528582209482529384528481206001600160401b03909316815291909252918220919091555090565b336001600160a01b0382161480159061349c57506001600160a01b038181166000908152600f6020526040902054163314155b156132ab5760405163c4c5259360e01b815260040160405180910390fd5b6134c2613d5a565b600080613533856134d66020870187614206565b6001600160a01b0391909116600090815260036020908152604080832063ffffffff949094168352928152828220818901358352905220805467ffffffffffffffff19811660016001600160401b03928316019182161790915590565b905060006040518060e00160405280836001600160401b031681526020017f000000000000000000000000000000000000000000000000000000000000000063ffffffff168152602001876001600160a01b0316815260200186600001602081019061359f9190614206565b63ffffffff168152602001866020013581526020016135ed847f00000000000000000000000000000000000000000000000000000000000000008a8a60000160208101906130159190614206565b81526020016135ff6040880188614d08565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509390945250929350915061364c9050876109b16020890189614206565b90506000806001600160a01b038316634389e58f8561366e60608c018c614d08565b61367e60a08e0160808f016148e7565b6040518563ffffffff1660e01b815260040161369d9493929190614d4e565b6000604051808303816000875af11580156136bc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526136e49190810190614e5e565b90925090507f1ab700d4ced0c005b164c0f789fd09fcbb0156d4c2041b8a3bfbcd961cd1567f8161371860608b018b614d08565b866040516137299493929190614eac565b60405180910390a1506040805160608101825260a09094015184526001600160401b03909416602084015292820192909252925090509250929050565b600081156137fd57600e546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa1580156137b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137da9190614eec565b9050806000036137fd57604051631775123760e01b815260040160405180910390fd5b919050565b82518210806138145750808360200151115b156125e95782516020840151604051634f3ec0d360e01b815260048101929092526024820184905260448201526064810182905260840161132a565b831561386157613861858386613bb4565b82841015613876576138768582868603613bb4565b5050505050565b831561388d5761388d8285613bef565b828410156138a1576138a181858503613bef565b50505050565b6000546001600160a01b03163314611bcc5760405163118cdaa760e01b815233600482015260240161132a565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600080826001600160401b031611806122ae5750604051600162842fc360e01b031981526001600160a01b0384169063ff7bd03d90613967908790600401614f05565b602060405180830381865afa158015613984573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122ae919061489a565b6001600160a01b038416600090815260026020908152604080832063ffffffff87168452825280832085845282528083206001600160401b03851684529091529020541515949350505050565b6001600160a01b038316613a0d576125e98282613bef565b6125e9838383613bb4565b60006001600160401b038216613a346060860160408701614741565b6001600160401b031611806122ae57506001600160a01b03831660009081526002602090815260408220908290613a6d90880188614206565b63ffffffff1663ffffffff1681526020019081526020016000206000866020013581526020019081526020016000206000866040016020810190613ab19190614741565b6001600160401b031681526020810191909152604001600020541415949350505050565b80613af3576040516304df7fdb60e11b815260040160405180910390fd5b6001600160a01b03909416600090815260026020908152604080832063ffffffff90961683529481528482209382529283528381206001600160401b03909216815291522055565b600085856001600160a01b03861660405160c09390931b6001600160c01b031916602084015260e091821b6001600160e01b03199081166028850152602c8401919091529085901b16604c8201526050810183905260700160405160208183030381529060405280519060200120905095945050505050565b6001600160a01b038216613bdb576040516306b7a93160e41b815260040160405180910390fd5b6125e96001600160a01b0384168383613c9c565b6001600160a01b038216613c16576040516306b7a93160e41b815260040160405180910390fd5b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114613c63576040519150601f19603f3d011682016040523d82523d6000602084013e613c68565b606091505b50509050806125e957604051631196f20d60e21b81526001600160a01b03841660048201526024810183905260440161132a565b604080516001600160a01b03841660248201526044808201849052825180830390910181526064909101909152602080820180516001600160e01b031663a9059cbb60e01b17815282516125e9938793909260009283929183919082885af180613d0c576040513d6000823e3d81fd5b50506000513d91508115613d24578060011415613d31565b6001600160a01b0384163b155b156138a157604051635274afe760e01b81526001600160a01b038516600482015260240161132a565b60405180606001604052806000801916815260200160006001600160401b03168152602001613d9c604051806040016040528060008152602001600081525090565b905290565b600060608284031215613db357600080fd5b50919050565b80356001600160a01b03811681146137fd57600080fd5b60008083601f840112613de257600080fd5b5081356001600160401b03811115613df957600080fd5b60208301915083602082850101111561149e57600080fd5b600080600080600080600060e0888a031215613e2c57600080fd5b613e368989613da1565b9650613e4460608901613db9565b95506080880135945060a08801356001600160401b0380821115613e6757600080fd5b613e738b838c01613dd0565b909650945060c08a0135915080821115613e8c57600080fd5b50613e998a828b01613dd0565b989b979a50959850939692959293505050565b803563ffffffff811681146137fd57600080fd5b60008060008060808587031215613ed657600080fd5b613edf85613db9565b9350613eed60208601613eac565b9250613efb60408601613db9565b9396929550929360600135925050565b60008060408385031215613f1e57600080fd5b82356001600160401b03811115613f3457600080fd5b830160a08186031215613f4657600080fd5b9150613f5460208401613db9565b90509250929050565b6000608082019050825182526001600160401b0360208401511660208301526040830151613f98604084018280518252602090810151910152565b5092915050565b600080600080600060c08688031215613fb757600080fd5b613fc086613db9565b9450613fcf8760208801613da1565b93506080860135925060a08601356001600160401b03811115613ff157600080fd5b613ffd88828901613dd0565b969995985093965092949392505050565b6000806000806080858703121561402457600080fd5b61402d85613db9565b935061403b60208601613db9565b925061404960408601613eac565b915061405760608601613eac565b905092959194509250565b60005b8381101561407d578181015183820152602001614065565b50506000910152565b6000815180845261409e816020860160208601614062565b601f01601f19169290920160200192915050565b602081526000611d1f6020830184614086565b80356001600160401b03811681146137fd57600080fd5b600080600080600060a086880312156140f457600080fd5b6140fd86613db9565b945061410b60208701613eac565b935060408601359250614120606087016140c5565b949793965091946080013592915050565b803561ffff811681146137fd57600080fd5b6000806000806080858703121561415957600080fd5b61416285613db9565b935061417060208601613db9565b92506040850135915061405760608601614131565b6000806040838503121561419857600080fd5b6141a183613db9565b9150613f5460208401613eac565b6000602082840312156141c157600080fd5b611d1f82613db9565b6000806000606084860312156141df57600080fd5b6141e884613db9565b92506141f660208501613eac565b9150604084013590509250925092565b60006020828403121561421857600080fd5b611d1f82613eac565b6000806000806000806000806000806000806101208d8f03121561424457600080fd5b61424d8d613db9565b9b5061425b60208e01613db9565b9a5060408d0135995061427060608e01614131565b985060808d0135975060a08d013596506001600160401b0360c08e0135111561429857600080fd5b6142a88e60c08f01358f01613dd0565b90965094506001600160401b0360e08e013511156142c557600080fd5b6142d58e60e08f01358f01613dd0565b90945092506001600160401b036101008e013511156142f357600080fd5b6143048e6101008f01358f01613dd0565b81935080925050509295989b509295989b509295989b565b60008060008060008060008060008060006101408c8e03121561433e57600080fd5b6143488d8d613da1565b9a5061435660608d01613db9565b995060808c0135985060a08c0135975060c08c013596506001600160401b038060e08e0135111561438657600080fd5b6143968e60e08f01358f01613dd0565b90975095506101008d01358110156143ad57600080fd5b6143be8e6101008f01358f01613dd0565b90955093506101208d01358110156143d557600080fd5b506143e78d6101208e01358e01613dd0565b81935080925050509295989b509295989b9093969950565b6000806000806060858703121561441557600080fd5b61441e85613db9565b935061442c60208601613db9565b925060408501356001600160401b038082111561444857600080fd5b818701915087601f83011261445c57600080fd5b81358181111561446b57600080fd5b8860208260051b850101111561448057600080fd5b95989497505060200194505050565b6000806000806000608086880312156144a757600080fd5b6144b086613db9565b9450602086013593506144c560408701614131565b925060608601356001600160401b03811115613ff157600080fd5b600080608083850312156144f357600080fd5b6144fd8484613da1565b9150613f5460608401613db9565b6020808252825182820181905260009190848201906040850190845b8181101561454c5783516001600160a01b031683529284019291840191600101614527565b50909695505050505050565b60008060008060008060008060c0898b03121561457457600080fd5b61457d89613db9565b975061458b60208a01613db9565b9650604089013595506145a060608a01614131565b945060808901356001600160401b03808211156145bc57600080fd5b6145c88c838d01613dd0565b909650945060a08b01359150808211156145e157600080fd5b506145ee8b828c01613dd0565b999c989b5096995094979396929594505050565b60008060006060848603121561461757600080fd5b61462084613db9565b925061462e60208501613eac565b915061463c60408501613db9565b90509250925092565b60008060006060848603121561465a57600080fd5b61466384613eac565b92506141f660208501613db9565b60008060006060848603121561468657600080fd5b61466384613db9565b600080600060a084860312156146a457600080fd5b6146ae8585613da1565b92506146bc60608501613db9565b9150608084013590509250925092565b600080604083850312156146df57600080fd5b613f4683613eac565b600080600080608085870312156146fe57600080fd5b61470785613db9565b935061471560208601613eac565b925060408501359150614057606086016140c5565b815181526020808301519082015260408101611655565b60006020828403121561475357600080fd5b611d1f826140c5565b838152818360208301376000910160200190815292915050565b63ffffffff61478482613eac565b168252602081013560208301526001600160401b036147a5604083016140c5565b1660408301525050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6147e28189614776565b86606082015260e0608082015260006147ff60e0830187896147af565b6001600160a01b03861660a084015282810360c08401526148218185876147af565b9a9950505050505050505050565b6080810161483d8285614776565b6001600160a01b039290921660609190910152919050565b634e487b7160e01b600052602160045260246000fd5b60006020828403121561487d57600080fd5b815160038110611d1f57600080fd5b80151581146132ab57600080fd5b6000602082840312156148ac57600080fd5b8151611d1f8161488c565b6001600160a01b03948516815263ffffffff93909316602084015292166040820152606081019190915260800190565b6000602082840312156148f957600080fd5b8135611d1f8161488c565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261492b57600080fd5b81516001600160401b038082111561494557614945614904565b604051601f8301601f19908116603f0116810190828211818310171561496d5761496d614904565b8160405283815286602085880101111561498657600080fd5b6112ae846020830160208901614062565b6000602082840312156149a957600080fd5b81516001600160401b038111156149bf57600080fd5b6122ae8482850161491a565b63ffffffff95909516855260208501939093526001600160a01b039190911660408401526001600160401b03166060830152608082015260a00190565b8a815261ffff8a16602082015288604082015287606082015260e060808201526000614a3860e08301888a6147af565b82810360a0840152614a4b8187896147af565b905082810360c0840152614a608185876147af565b9d9c50505050505050505050505050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561165557611655614a71565b6000610120614aa9838e614776565b8b60608401528a60808401528960a08401528060c0840152614ace818401898b6147af565b905082810360e0840152614ae38187896147af565b9050828103610100840152614a608185876147af565b6001600160a01b03841681526040602080830182905282820184905260009190606090818501600587901b8601830188865b89811015614bdc57888303605f190184528135368c9003605e19018112614b5157600080fd5b8b0163ffffffff80614b6283613eac565b16855280614b71888401613eac565b16878601525087810135601e19823603018112614b8d57600080fd5b0185810190356001600160401b03811115614ba757600080fd5b803603821315614bb657600080fd5b8789860152614bc888860182846147af565b958701959450505090840190600101614b2b565b50909a9950505050505050505050565b8183823760009101908152919050565b6001600160a01b038781168252861660208201526040810185905261ffff8416606082015260a060808201819052600090614c3a90830184866147af565b98975050505050505050565b600060018060a01b03808a16835288602084015260a06040840152614c6f60a08401888a6147af565b81871660608501528381036080850152614c8a8186886147af565b9b9a5050505050505050505050565b63ffffffff9390931683526001600160a01b03919091166020830152604082015260600190565b60a08101614cce8286614776565b6001600160a01b0393909316606082015260800152919050565b6001600160401b03818116838216019080821115613f9857613f98614a71565b6000808335601e19843603018112614d1f57600080fd5b8301803591506001600160401b03821115614d3957600080fd5b60200191503681900382131561149e57600080fd5b606080825285516001600160401b031682820152602086015163ffffffff16608083015260408601516001600160a01b031660a0830152850151600090614d9d60c084018263ffffffff169052565b50608086015160e083015260a086015161010083015260c086015160e0610120840152614dce610140840182614086565b90508281036020840152614de38186886147af565b9150506127b0604083018415159052565b600060408284031215614e0657600080fd5b604051604081018181106001600160401b0382111715614e2857614e28614904565b604052825181526020928301519281019290925250919050565b600060408284031215614e5457600080fd5b611d1f8383614df4565b60008060608385031215614e7157600080fd5b614e7b8484614df4565b915060408301516001600160401b03811115614e9657600080fd5b614ea28582860161491a565b9150509250929050565b606081526000614ebf6060830187614086565b8281036020840152614ed28186886147af565b91505060018060a01b038316604083015295945050505050565b600060208284031215614efe57600080fd5b5051919050565b60608101611655828461477656fea264697066735822122051f9eb00fad53055a1c5087afa544b196a11f671f631975a7c4baa38e5aeab2064736f6c63430008160033", - "sourceMap": "2770:15372:75:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9753:572;;;;;;:::i;:::-;;:::i;:::-;;1153:158:30;;;;;;;;;;;;;:::i;:::-;;;;1996:10:132;1984:23;;;1966:42;;-1:-1:-1;;;;;2044:32:132;;;2039:2;2024:18;;2017:60;1939:18;1153:158:30;;;;;;;;13111:942:27;;;;;;;;;;-1:-1:-1;13111:942:27;;;;;:::i;:::-;;:::i;5245:1210:75:-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;11390:344::-;;;;;;;;;;-1:-1:-1;11390:344:75;;;;;:::i;:::-;;:::i;14475:261:27:-;;;;;;;;;;-1:-1:-1;14475:261:27;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;344:69:28:-;;;;;;;;;;-1:-1:-1;344:69:28;-1:-1:-1;;344:69:28;;;;;5759:25:132;;;5747:2;5732:18;344:69:28;5613:177:132;4815:687:28;;;;;;;;;;-1:-1:-1;4815:687:28;;;;;:::i;:::-;;:::i;455:145:29:-;;;;;;;;;;-1:-1:-1;455:145:29;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4135:379:27;;;;;;;;;;-1:-1:-1;4135:379:27;;;;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;7559:32:132;;;7541:51;;7635:14;;7628:22;7623:2;7608:18;;7601:50;7514:18;4135:379:27;7373:284:132;5920:644:28;;;;;;;;;;-1:-1:-1;5920:644:28;;;;;:::i;:::-;;:::i;486:27::-;;;;;;;;;;;;;;;;;;7836:10:132;7824:23;;;7806:42;;7794:2;7779:18;486:27:28;7662:192:132;2947:58:75;;;;;;;;;;-1:-1:-1;2947:58:75;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;2947:58:75;;;;;;-1:-1:-1;;;;;8214:32:132;;;8196:51;;8184:2;8169:18;2947:58:75;8050:203:132;520:126:28;;;;;;;;;;-1:-1:-1;520:126:28;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;520:126:28;;;;;;-1:-1:-1;;;;;8751:31:132;;;8733:50;;8721:2;8706:18;520:126:28;8589:200:132;9954:173:27;;;;;;;;;;-1:-1:-1;9954:173:27;;;;;:::i;:::-;;:::i;:::-;;;9148:14:132;;9141:22;9123:41;;9111:2;9096:18;9954:173:27;8983:187:132;3537:395:29;;;;;;;;;;-1:-1:-1;3537:395:29;;;;;:::i;:::-;;:::i;11204:1559:27:-;;;;;;;;;;-1:-1:-1;11204:1559:27;;;;;:::i;:::-;;:::i;10627:388:75:-;;;;;;;;;;-1:-1:-1;10627:388:75;;;;;:::i;:::-;;:::i;14185:208:27:-;;;;;;;;;;-1:-1:-1;14185:208:27;;;;;:::i;:::-;;:::i;1509:69::-;;;;;;;;;;-1:-1:-1;1509:69:27;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1509:69:27;;;;;;;;;;-1:-1:-1;;;;;13013:32:132;;;12995:51;;13077:2;13062:18;;13055:34;;;;12968:18;1509:69:27;12821:274:132;1437:66:27;;;;;;;;;;-1:-1:-1;1437:66:27;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;1437:66:27;;;2293:101:107;;;;;;;;;;;;;:::i;744:39:27:-;;;;;;;;;;;;;;;969:106:30;;;;;;;;;;-1:-1:-1;1041:12:30;;527:1;1041:27;;969:106;;1065:402:29;;;;;;;;;;-1:-1:-1;1065:402:29;;;;;:::i;:::-;;:::i;17710:215:75:-;;;;;;;;;;-1:-1:-1;17710:215:75;;;;;:::i;:::-;;:::i;1638:85:107:-;;;;;;;;;;-1:-1:-1;1684:7:107;1710:6;-1:-1:-1;;;;;1710:6:107;1638:85;;2858:118:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;2144:1048:29:-;;;;;;:::i;:::-;;:::i;10340:450:27:-;;;;;;;;;;-1:-1:-1;10340:450:27;;;;;:::i;:::-;;:::i;825:115:28:-;;;;;;;;;;-1:-1:-1;825:115:28;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;825:115:28;;;4887:1218:27;;;;;;;;;;-1:-1:-1;4887:1218:27;;;;;:::i;:::-;;:::i;2523:425:28:-;;;;;;;;;;-1:-1:-1;2523:425:28;;;;;:::i;:::-;;:::i;7763:1045:27:-;;;;;;;;;;-1:-1:-1;7763:1045:27;;;;;:::i;:::-;;:::i;12477:148:75:-;;;;;;;;;;-1:-1:-1;12477:148:75;;;;;:::i;:::-;;:::i;8373:709::-;;;;;;;;;;-1:-1:-1;8373:709:75;;;;;:::i;:::-;;:::i;8256:259:28:-;;;;;;;;;;-1:-1:-1;8256:259:28;;;;;:::i;:::-;;:::i;7038:400:27:-;;;;;;;;;;-1:-1:-1;7038:400:27;;;;;:::i;:::-;;:::i;3524:317::-;;;;;;;;;;-1:-1:-1;3524:317:27;;;;;:::i;:::-;;:::i;12081:133:75:-;;;;;;;;;;-1:-1:-1;12081:133:75;;;;;:::i;:::-;;:::i;17931:209::-;;;;;;;;;;-1:-1:-1;17931:209:75;;;;;:::i;:::-;;:::i;652:167:28:-;;;;;;;;;;-1:-1:-1;652:167:28;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16136:148:75;;;;;;;;;;-1:-1:-1;16136:148:75;;;;;:::i;:::-;;:::i;283:55:28:-;;;;;;;;;;-1:-1:-1;283:55:28;336:1;283:55;;9156:710:27;;;;;;;;;;-1:-1:-1;9156:710:27;;;;;:::i;:::-;;:::i;4016:359:28:-;;;;;;;;;;-1:-1:-1;4016:359:28;;;;;:::i;:::-;;:::i;948:55:27:-;;;;;;;;;;-1:-1:-1;948:55:27;;;;;:::i;:::-;;;;;;;;;;;;;;;;3847:158;;;;;;;;;;-1:-1:-1;3847:158:27;;;;;:::i;:::-;-1:-1:-1;;;;;3954:20:27;;;3931:4;3954:20;;;:11;:20;;;;;;;;:29;;;;;;;;;;;;;:44;;3847:158;3962:1043:75;;;;;;;;;;-1:-1:-1;3962:1043:75;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;15945:99::-;;;;;;;;;;-1:-1:-1;15999:7:75;15945:99;;2918:22;;;;;;;;;;-1:-1:-1;2918:22:75;;;;-1:-1:-1;;;;;2918:22:75;;;6264:511:27;;;;;;;;;;-1:-1:-1;6264:511:27;;;;;:::i;:::-;;:::i;1270:91::-;;;;;;;;;;-1:-1:-1;1270:91:27;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1270:91:27;;;;;;2543:215:107;;;;;;;;;;-1:-1:-1;2543:215:107;;;;;:::i;:::-;;:::i;1368:63:27:-;;;;;;;;;;-1:-1:-1;1368:63:27;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;1368:63:27;;;9753:572:75;10043:106;10057:9;10068:14;;;;:7;:14;:::i;:::-;10084;;;;10100:13;;;;;;;;:::i;:::-;10132:5;10139:8;;10115:33;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;10043:13;:106::i;:::-;-1:-1:-1;10159:109:75;;-1:-1:-1;;;10159:109:75;;-1:-1:-1;;;;;10159:39:75;;;;;10207:9;;10159:109;;10219:7;;10228:5;;10235:8;;;;10245:10;;10257;;;;10159:109;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10283:35;10299:7;10308:9;10283:35;;;;;;;:::i;:::-;;;;;;;;9753:572;;;;;;;:::o;1153:158:30:-;1202:6;1210:7;1236:18;1041:12;;527:1;1041:27;;;969:106;1236:18;:68;;1290:1;1301;1236:68;;;1257:29;1273:12;;1437:3;1425:15;;;;1317:160;1257:29;1229:75;;;;1153:158;;:::o;13111:942:27:-;-1:-1:-1;;;;;1765:25:27;;;;;;:19;:25;;;;;;13266:4;;1765:25;;1760:68;;1799:29;;-1:-1:-1;;;1799:29:27;;;;;;;;;;;1760:68;13285:4;-1:-1:-1;;;;;2114:19:27;::::1;::::0;2110:146:::1;;2191:19;2165:4;-1:-1:-1::0;;;;;2153:32:27::1;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:57;;;;;;;;:::i;:::-;::::0;2149:96:::1;;2219:26;;-1:-1:-1::0;;;2219:26:27::1;;;;;;;;;;;2149:96;13308:4:::0;13314;-1:-1:-1;;;;;2711:19:27;::::2;::::0;2707:128:::2;;2751:38;::::0;-1:-1:-1;;;2751:38:27;;7836:10:132;7824:23;;2751:38:27::2;::::0;::::2;7806:42:132::0;-1:-1:-1;;;;;2751:32:27;::::2;::::0;::::2;::::0;7779:18:132;;2751:38:27::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2746:78;;2798:26;;-1:-1:-1::0;;;2798:26:27::2;;;;;;;;;;;2746:78;13330:24:::3;13348:5;13330:17;:24::i;:::-;13368:14;13386:30;13404:5;13411:4;13386:17;:30::i;:::-;13365:51;;;13498:9;13494:51;;;13516:29;;-1:-1:-1::0;;;13516:29:27::3;;;;;;;;;;;13494:51;13560:7;13571:1;13560:12:::0;13556:424:::3;;-1:-1:-1::0;;;;;13649:28:27;::::3;;::::0;;;:21:::3;:28;::::0;;;;;;;:34:::3;::::0;::::3;::::0;;;;;;;13642:41;;-1:-1:-1;;;;;;13642:41:27::3;::::0;;;::::3;::::0;13556:424:::3;;;13779:12;13768:7;:23;13764:61;;13800:25;;-1:-1:-1::0;;;13800:25:27::3;;;;;;;;;;;13764:61;-1:-1:-1::0;;;;;13865:28:27;;::::3;13839:23;13865:28:::0;;;:21:::3;:28;::::0;;;;;;;:34:::3;::::0;::::3;::::0;;;;;;;13913:18;;-1:-1:-1;;;;;;13913:18:27::3;::::0;;::::3;::::0;;;::::3;::::0;;-1:-1:-1;13945:14:27::3;:24:::0;;;13556:424:::3;13994:52;14019:5;14026:4;14032;14038:7;13994:52;;;;;;;;;:::i;:::-;;;;;;;;13320:733;2265:1:::2;;1838::::1;13111:942:::0;;;;;:::o;5245:1210:75:-;5405:23;;:::i;:::-;5368:14;;;;:7;:14;:::i;:::-;5384:10;527:1:30;733:12;;:27;729:66;;769:26;;-1:-1:-1;;;769:26:30;;;;;;;;;;;729:66;-1:-1:-1;;;841:3:30;821:23;;;;;;;-1:-1:-1;;;;;820:44:30;;;805:12;:59;5444:20:75::1;::::0;;;::::1;::::0;::::1;;:::i;:::-;:47;;;;-1:-1:-1::0;5468:7:75::1;::::0;-1:-1:-1;;;;;5468:7:75::1;:23:::0;5444:47:::1;5440:90;;;5500:30;;-1:-1:-1::0;;;5500:30:75::1;;;;;;;;;;;5440:90;5566:31;5599:20:::0;5623:26:::1;5629:10;5641:7;5623:5;:26::i;:::-;5565:84;;;;5980:22;6005:17;15195:9:::0;;15111:100;6005:17:::1;5980:42:::0;-1:-1:-1;6032:23:75::1;6058:38;6075:20;::::0;;;::::1;::::0;::::1;;:::i;:::-;6058:16;:38::i;:::-;6032:64;;6106:65;6126:7;:11;;;6139:14;6155:15;6106:19;:65::i;:::-;6224:7;::::0;6233:11:::1;::::0;::::1;::::0;:22:::1;;::::0;6214:89:::1;::::0;-1:-1:-1;;;;;6224:7:75::1;::::0;6257:15;6274:12;6288:14;6214:9:::1;:89::i;:::-;6355:11;::::0;::::1;::::0;:21;6344:79:::1;::::0;6378:14;6394:12;6408:14;6344:10:::1;:79::i;:::-;-1:-1:-1::0;;527:1:30;885:12;:26;-1:-1:-1;6441:7:75;5245:1210;-1:-1:-1;;;;;5245:1210:75:o;11390:344::-;11504:24;11522:5;11504:17;:24::i;:::-;11539:20;11579:5;11586:8;;11562:33;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;11562:33:75;;;;;;;;;;-1:-1:-1;11605:76:75;11619:5;11626:14;11562:33;11626:14;;:7;:14;:::i;:::-;11642;;;;11658:13;;;;;;;;:::i;:::-;11673:7;11605:13;:76::i;:::-;;11696:31;11712:7;11721:5;11696:31;;;;;;;:::i;:::-;;;;;;;;11494:240;11390:344;;;;;:::o;14475:261:27:-;-1:-1:-1;;;;;1765:25:27;;;;;;:19;:25;;;;;;14638:19;;14623:4;;1765:25;;1760:68;;1799:29;;-1:-1:-1;;;1799:29:27;;;;;;;;;;;1760:68;14676:53:::1;::::0;-1:-1:-1;;;14676:53:27;;21964:10:132;22001:15;;;14676:53:27::1;::::0;::::1;21983:34:132::0;-1:-1:-1;;;;;22053:32:132;;;22033:18;;;22026:60;22122:15;;;22102:18;;;22095:43;14676:27:27;::::1;::::0;::::1;::::0;21927:18:132;;14676:53:27::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;::::0;;::::1;-1:-1:-1::0;;14676:53:27::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;:::i;:::-;14669:60:::0;14475:261;-1:-1:-1;;;;;;14475:261:27:o;4815:687:28:-;4935:24;4953:5;4935:17;:24::i;:::-;-1:-1:-1;;;;;4995:25:28;;4970:22;4995:25;;;:18;:25;;;;;;;;:34;;;;;;;;;;:43;;;;;;;;-1:-1:-1;;;;;4995:51:28;;;;;;;;;;5060:30;;;5056:102;;5099:59;;-1:-1:-1;;;5099:59:28;;;;;23498:25:132;;;23539:18;;;23532:34;;;23471:18;;5099:59:28;;;;;;;;5056:102;-1:-1:-1;;;;;5182:23:28;;;;;;:16;:23;;;;;;;;:32;;;;;;;;;;:41;;;;;;;;;-1:-1:-1;;;;;5182:41:28;;;5172:51;;;;;;;:91;;-1:-1:-1;5227:36:28;;5172:91;5168:146;;;5284:30;;-1:-1:-1;;;5284:30:28;;-1:-1:-1;;;;;8751:31:132;;5284:30:28;;;8733:50:132;8706:18;;5284:30:28;8589:200:132;5168:146:28;-1:-1:-1;;;;;5349:25:28;;387:26;5349:25;;;:18;:25;;;;;;;;:34;;;;;;;;;;:43;;;;;;;;-1:-1:-1;;;;;5349:51:28;;;;;;;;;;;-1:-1:-1;;5349:70:28;;5434:61;;;;;5375:7;;5384;;5368:5;;5393:6;;5482:12;;5434:61;:::i;4135:379:27:-;-1:-1:-1;;;;;4263:25:27;;;4218:11;4263:25;;;:14;:25;;;;;;;;:34;;;;;;;;;;;;;;;;4307:201;;4351:30;;;;;;;:21;:30;;;;;;-1:-1:-1;;;;;4351:30:27;;-1:-1:-1;4351:30:27;4395:72;;4427:40;;-1:-1:-1;;;4427:40:27;;;;;;;;;;;4395:72;-1:-1:-1;4493:4:27;4307:201;4135:379;;;;;:::o;5920:644:28:-;6038:24;6056:5;6038:17;:24::i;:::-;-1:-1:-1;;;;;6098:25:28;;6073:22;6098:25;;;:18;:25;;;;;;;;:34;;;;;;;;;;:43;;;;;;;;-1:-1:-1;;;;;6098:51:28;;;;;;;;;;6163:30;;;6159:102;;6202:59;;-1:-1:-1;;;6202:59:28;;;;;23498:25:132;;;23539:18;;;23532:34;;;23471:18;;6202:59:28;23324:248:132;6159:102:28;6275:36;;;:90;;-1:-1:-1;;;;;;6324:23:28;;;;;;:16;:23;;;;;;;;:32;;;;;;;;;;:41;;;;;;;;;-1:-1:-1;;;;;6324:41:28;;;6315:50;;;;6275:90;6271:145;;;6386:30;;-1:-1:-1;;;6386:30:28;;-1:-1:-1;;;;;8751:31:132;;6386:30:28;;;8733:50:132;8706:18;;6386:30:28;8589:200:132;6271:145:28;-1:-1:-1;;;;;6433:25:28;;;;;;:18;:25;;;;;;;;:34;;;;;;;;;;:43;;;;;;;;-1:-1:-1;;;;;6433:51:28;;;;;;;;;;6426:58;;;;6499;;;;;6459:7;;6468;;6452:5;;6477:6;;6544:12;;6499:58;:::i;9954:173:27:-;10037:24;;;10014:4;10037:24;;;:18;:24;;;;;;-1:-1:-1;;;;;10037:24:27;:38;;;;:83;;-1:-1:-1;10079:27:27;;;10118:1;10079:27;;;:21;:27;;;;;;-1:-1:-1;;;;;10079:27:27;:41;;10037:83;10030:90;9954:173;-1:-1:-1;;9954:173:27:o;3537:395:29:-;3854:10;-1:-1:-1;;;;;3827:98:29;3849:3;-1:-1:-1;;;;;3827:98:29;3842:5;-1:-1:-1;;;;;3827:98:29;;3866:5;3873:6;3881:4;3887:6;3895:8;;3905:10;;3917:7;;3827:98;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;3537:395;;;;;;;;;;;;:::o;11204:1559:27:-;-1:-1:-1;;;;;2341:25:27;;;;;;:19;:25;;;;;;11369:7;;2341:25;;2340:26;:49;;;;-1:-1:-1;;;;;;2370:19:27;;;;2340:49;2336:100;;;2398:38;;-1:-1:-1;;;2398:38:27;;;;;;;;;;;2336:100;11391:7;-1:-1:-1;;;;;2114:19:27;::::1;::::0;2110:146:::1;;2191:19;2165:4;-1:-1:-1::0;;;;;2153:32:27::1;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:57;;;;;;;;:::i;:::-;::::0;2149:96:::1;;2219:26;;-1:-1:-1::0;;;2219:26:27::1;;;;;;;;;;;2149:96;11417:7:::0;11426:4;-1:-1:-1;;;;;2711:19:27;::::2;::::0;2707:128:::2;;2751:38;::::0;-1:-1:-1;;;2751:38:27;;7836:10:132;7824:23;;2751:38:27::2;::::0;::::2;7806:42:132::0;-1:-1:-1;;;;;2751:32:27;::::2;::::0;::::2;::::0;7779:18:132;;2751:38:27::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2746:78;;2798:26;;-1:-1:-1::0;;;2798:26:27::2;;;;;;;;;;;2746:78;11442:24:::3;11460:5;11442:17;:24::i;:::-;-1:-1:-1::0;;;;;11494:21:27;;::::3;11477:14;11494:21:::0;;;:14:::3;:21;::::0;;;;;;;:27:::3;::::0;::::3;::::0;;;;;;;;;::::3;::::0;11570:17;::::3;::::0;;11566:51:::3;;11596:21;;-1:-1:-1::0;;;11596:21:27::3;;;;;;;;;;;11566:51;-1:-1:-1::0;;;;;11627:21:27;;::::3;;::::0;;;:14:::3;:21;::::0;;;;;;;:27:::3;::::0;::::3;::::0;;;;;;;;;;:37;;-1:-1:-1;;;;;;11627:37:27::3;::::0;;::::3;::::0;;::::3;::::0;;11679:39;;25270:34:132;;;25320:18;;;25313:51;;;;25380:18;;25373:43;;;;11679:39:27::3;::::0;25220:2:132;25205:18;11679:39:27::3;;;;;;;11733:16:::0;;11729:1028:::3;;-1:-1:-1::0;;;;;12251:21:27;::::3;::::0;;:47:::3;;-1:-1:-1::0;;;;;;12276:22:27;::::3;::::0;12251:47:::3;12247:89;;;12307:29;;-1:-1:-1::0;;;12307:29:27::3;;;;;;;;;;;12247:89;12383:22;12408:61;;;;;;;;12423:6;-1:-1:-1::0;;;;;12408:61:27::3;;;;;12454:12;12439;:27;;;;:::i;:::-;12408:61:::0;;-1:-1:-1;;;;;12483:28:27;;::::3;;::::0;;;:21:::3;:28;::::0;;;;;;;:34:::3;::::0;::::3;::::0;;;;;;;;:44;;;;-1:-1:-1;;;;;;12483:44:27::3;::::0;::::3;::::0;;;::::3;::::0;;;::::3;::::0;-1:-1:-1;12483:44:27;;::::3;::::0;;;12546:61;12483:44;;-1:-1:-1;12546:61:27::3;::::0;::::3;::::0;12483:28;;:34;;12584:6;;12546:61:::3;:::i;:::-;;;;;;;;11751:867;11729:1028;;;-1:-1:-1::0;;;;;12645:28:27;::::3;;::::0;;;:21:::3;:28;::::0;;;;;;;:34:::3;::::0;::::3;::::0;;;;;;;;12638:41;;-1:-1:-1;;;;;;12638:41:27::3;::::0;;;::::3;::::0;;;12698:48;::::3;::::0;::::3;::::0;12667:5;;12674:4;;12736:6;;12645:28;12698:48:::3;:::i;11729:1028::-;11432:1331;2265:1:::2;;2446::::1;11204:1559:::0;;;;;:::o;10627:388:75:-;10936:10;-1:-1:-1;;;;;10910:98:75;10925:9;-1:-1:-1;;;;;10910:98:75;;10948:7;10957:5;10964:4;10970:6;10978:8;;10988:10;;11000:7;;10910:98;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;10627:388;;;;;;;;;;;:::o;14185:208:27:-;-1:-1:-1;;;;;1765:25:27;;;;;;:19;:25;;;;;;14292:4;;1765:25;;1760:68;;1799:29;;-1:-1:-1;;;1799:29:27;;;;;;;;;;;1760:68;14308:24:::1;14326:5;14308:17;:24::i;:::-;14343:43;::::0;-1:-1:-1;;;14343:43:27;;-1:-1:-1;;;;;14343:27:27;::::1;::::0;::::1;::::0;:43:::1;::::0;14371:5;;14378:7;;;;14343:43:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;2293:101:107::0;1531:13;:11;:13::i;:::-;2357:30:::1;2384:1;2357:18;:30::i;:::-;2293:101::o:0;1065:402:29:-;1232:10;372:1;1219:24;;;:12;:24;;;;;;;;-1:-1:-1;;;;;1219:29:29;;;;;;;;;:36;;;;;;;;:44;;;;;;;;;;;:63;1215:101;;1291:25;;-1:-1:-1;;;1291:25:29;;;;;;;;;;;1215:101;1383:8;;1373:19;;;;;;;:::i;:::-;;;;;;;;;;1339:10;1326:24;;;;:12;:24;;;;;;;-1:-1:-1;;;;;1326:29:29;;;;;;;;;:36;;;;;;;;:44;;;;;;;;;;;:66;1407:53;;;;1339:10;1351:3;;1356:5;;1363:6;;1451:8;;;;1407:53;:::i;:::-;;;;;;;;1065:402;;;;;:::o;17710:215:75:-;-1:-1:-1;;;;;17858:27:75;;17800:4;17858:27;;;:16;:27;;;;;;;17823:95;;17838:7;;17847:9;;17800:4;;17886:14;;;;17838:7;17886:14;:::i;:::-;17858:43;;;;;;;;;;;;;;;;-1:-1:-1;17858:43:75;;;17902:14;;;;17858:59;;;;;;;;-1:-1:-1;;;;;17858:59:75;17823:14;:95::i;:::-;17816:102;17710:215;-1:-1:-1;;;17710:215:75:o;2858:118:27:-;2915:16;2950:19;2943:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2943:26:27;;;;;;;;;;;;;;;;;;;;;;;2858:118;:::o;2144:1048:29:-;-1:-1:-1;;;;;2408:19:29;;;2385:20;2408:19;;;:12;:19;;;;;;;;:24;;;;;;;;;;;:31;;;;;;;;:39;;;;;;;;;;;2478:19;;;;2488:8;;;;2478:19;:::i;:::-;;;;;;;;2457:40;;2527:10;2511:12;:26;2507:90;;2546:51;;-1:-1:-1;;;2546:51:29;;;;;23498:25:132;;;23539:18;;;23532:34;;;23471:18;;2546:51:29;23324:248:132;2507:90:29;-1:-1:-1;;;;;2953:19:29;;;429;2953;;;:12;:19;;;;;;;;:24;;;;;;;;;;;;:31;;;;;;;;:39;;;;;;;;;;;;445:1;2953:63;;3026:101;-1:-1:-1;;;3026:101:29;;:33;;3068:9;;3026:101;;2966:5;;2978;;3094:8;;;;3104:10;;3116;;;;3026:101;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3142:43;3159:5;3166:3;3171:5;3178:6;3142:43;;;;;;;;-1:-1:-1;;;;;30928:15:132;;;30910:34;;30980:15;;;;30975:2;30960:18;;30953:43;31027:2;31012:18;;31005:34;31087:6;31075:19;;;;31070:2;31055:18;;31048:47;30859:3;30844:19;;30643:458;3142:43:29;;;;;;;;2344:848;;2144:1048;;;;;;;;:::o;10340:450:27:-;-1:-1:-1;;;;;2341:25:27;;;;;;:19;:25;;;;;;10472:7;;2341:25;;2340:26;:49;;;;-1:-1:-1;;;;;;2370:19:27;;;;2340:49;2336:100;;;2398:38;;-1:-1:-1;;;2398:38:27;;;;;;;;;;;2336:100;10491:7;-1:-1:-1;;;;;1899:19:27;::::1;::::0;1895:146:::1;;1976:22;1950:4;-1:-1:-1::0;;;;;1938:32:27::1;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:60;;;;;;;;:::i;:::-;::::0;1934:96:::1;;2007:23;;-1:-1:-1::0;;;2007:23:27::1;;;;;;;;;;;1934:96;10517:7:::0;10526:4;-1:-1:-1;;;;;2711:19:27;::::2;::::0;2707:128:::2;;2751:38;::::0;-1:-1:-1;;;2751:38:27;;7836:10:132;7824:23;;2751:38:27::2;::::0;::::2;7806:42:132::0;-1:-1:-1;;;;;2751:32:27;::::2;::::0;::::2;::::0;7779:18:132;;2751:38:27::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2746:78;;2798:26;;-1:-1:-1::0;;;2798:26:27::2;;;;;;;;;;;2746:78;10542:24:::3;10560:5;10542:17;:24::i;:::-;-1:-1:-1::0;;;;;10623:18:27;;::::3;;::::0;;;:11:::3;:18;::::0;;;;;;;:24:::3;::::0;::::3;::::0;;;;;;;;:35;;::::3;:24:::0;::::3;:35:::0;10619:69:::3;;10667:21;;-1:-1:-1::0;;;10667:21:27::3;;;;;;;;;;;10619:69;-1:-1:-1::0;;;;;10698:18:27;;::::3;;::::0;;;:11:::3;:18;::::0;;;;;;;:24:::3;::::0;::::3;::::0;;;;;;;;;;:34;;-1:-1:-1;;;;;;10698:34:27::3;::::0;;::::3;::::0;;::::3;::::0;;10747:36;;25270:34:132;;;25320:18;;;25313:51;;;;25380:18;;25373:43;;;;10747:36:27::3;::::0;25220:2:132;25205:18;10747:36:27::3;25032:390:132::0;4887:1218:27;5031:4;5134:26;5162:14;5180:37;5198:9;5209:7;5180:17;:37::i;:::-;5133:84;;;;5252:18;-1:-1:-1;;;;;5231:39:27;:17;-1:-1:-1;;;;;5231:39:27;;5227:81;;5293:4;5286:11;;;;;;5227:81;5514:22;5539:9;:117;;-1:-1:-1;;;;;5615:32:27;;;;;;:21;:32;;;;;;;;:41;;;;;;;;;;5539:117;;;5563:37;;;;;;;:28;:37;;;;;5539:117;5514:142;;;;;;;;;;;-1:-1:-1;;;;;5514:142:27;;;;;;;;;;;;;;;;;-1:-1:-1;5886:32:27;;;:65;;;;;5939:12;5922:7;:14;;;:29;5886:65;5882:158;;;6025:4;6018:11;;;;;;;5882:158;-1:-1:-1;6093:5:27;;4887:1218;-1:-1:-1;;;;;;4887:1218:27:o;2523:425:28:-;-1:-1:-1;;;;;2657:27:28;;2618:6;2657:27;;;:16;:27;;;;;;;;:36;;;;;;;;;;:45;;;;;;;;;-1:-1:-1;;;;;2657:45:28;2788:116;2795:61;2811:9;2822:7;2831;2840:11;2854:1;2840:15;2795;:61::i;:::-;2788:116;;;2876:13;;2788:116;;;2930:11;2523:425;-1:-1:-1;;;;2523:425:28:o;7763:1045:27:-;1531:13:107;:11;:13::i;:::-;-1:-1:-1;;;;;1765:25:27;::::1;;::::0;;;:19:::1;:25;::::0;;;;;7913:7;;1765:25:::1;;1760:68;;1799:29;;-1:-1:-1::0;;;1799:29:27::1;;;;;;;;;;;1760:68;7935:7:::0;-1:-1:-1;;;;;2114:19:27;::::2;::::0;2110:146:::2;;2191:19;2165:4;-1:-1:-1::0;;;;;2153:32:27::2;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:57;;;;;;;;:::i;:::-;::::0;2149:96:::2;;2219:26;;-1:-1:-1::0;;;2219:26:27::2;;;;;;;;;;;2149:96;7961:7:::0;7970:4;-1:-1:-1;;;;;2711:19:27;::::3;::::0;2707:128:::3;;2751:38;::::0;-1:-1:-1;;;2751:38:27;;7836:10:132;7824:23;;2751:38:27::3;::::0;::::3;7806:42:132::0;-1:-1:-1;;;;;2751:32:27;::::3;::::0;::::3;::::0;7779:18:132;;2751:38:27::3;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2746:78;;2798:26;;-1:-1:-1::0;;;2798:26:27::3;;;;;;;;;;;2746:78;8003:27:::4;::::0;::::4;7986:14;8003:27:::0;;;:21:::4;:27;::::0;;;;;-1:-1:-1;;;;;8003:27:27;;::::4;::::0;8086:17;::::4;::::0;;8082:51:::4;;8112:21;;-1:-1:-1::0;;;8112:21:27::4;;;;;;;;;;;8082:51;8144:27;::::0;::::4;;::::0;;;:21:::4;:27;::::0;;;;;;;;:37;;-1:-1:-1;;;;;;8144:37:27::4;-1:-1:-1::0;;;;;8144:37:27;::::4;::::0;;::::4;::::0;;;8196:39;;1966:42:132;;;2024:18;;;2017:60;8196:39:27::4;::::0;1939:18:132;8196:39:27::4;;;;;;;8250:16:::0;;8246:556:::4;;8390:34;::::0;::::4;8364:23;8390:34:::0;;;:28:::4;:34;::::0;;;;8438:20;;-1:-1:-1;;;;;;8438:20:27::4;-1:-1:-1::0;;;;;8438:20:27;::::4;;::::0;;8489:27:::4;8504:12:::0;8489::::4;:27;:::i;:::-;8472:14;::::0;::::4;:44:::0;;;8535:61:::4;::::0;::::4;::::0;::::4;::::0;8567:4;;8573:6;;8535:61:::4;:::i;:::-;;;;;;;;8268:339;8246:556;;;8690:34;::::0;::::4;;::::0;;;:28:::4;:34;::::0;;;;;8683:41;;-1:-1:-1;;;;;;8683:41:27::4;::::0;;;::::4;::::0;;;8743:48;::::4;::::0;::::4;::::0;8719:4;;8781:6;;8743:48:::4;:::i;:::-;;;;;;;;8246:556;7976:832;2265:1:::3;;1838::::2;1554::107::1;7763:1045:27::0;;;:::o;12477:148:75:-;1531:13:107;:11;:13::i;:::-;12574:44:75::1;12597:6;12605:3;12610:7;12574:22;:44::i;:::-;12477:148:::0;;;:::o;8373:709::-;8479:60;8501:9;8512:14;;;;:7;:14;:::i;:::-;8528:10;8479:21;:60::i;:::-;8474:107;;8548:33;;-1:-1:-1;;;8548:33:75;;;;;;;;;;;8474:107;-1:-1:-1;;;;;8611:27:75;;8592:16;8611:27;;;:16;:27;;;;;;;;8592:16;;8639:14;;;;:7;:14;:::i;:::-;8611:43;;;;;;;;;;;;;;;;-1:-1:-1;8611:43:75;;;8655:14;;;;8611:59;;;;;;;;-1:-1:-1;;;;;8611:59:75;;-1:-1:-1;8685:45:75;8655:7;8709:9;8611:59;8685:14;:45::i;:::-;8680:91;;8739:32;;-1:-1:-1;;;8739:32:75;;;;;;;;;;;8680:91;8786:42;8798:7;8807:9;8818;8786:11;:42::i;:::-;8781:85;;8837:29;;-1:-1:-1;;;8837:29:75;;;;;;;;;;;8781:85;8932:80;8941:9;8952:14;;;;:7;:14;:::i;:::-;8968;;;;8984:13;;;;;;;;:::i;:::-;8999:12;8932:8;:80::i;:::-;9027:48;9042:7;9051:9;9062:12;9027:48;;;;;;;;:::i;:::-;;;;;;;;8464:618;8373:709;;;:::o;8256:259:28:-;-1:-1:-1;;;;;8387:22:28;;8349:7;8387:22;;;:13;:22;;;;;;;;:31;;;;;;;;;;:42;;;;;;;;;8349:7;;8387:46;;-1:-1:-1;;;;;8387:42:28;;:46;:::i;:::-;8368:65;;8450:58;8464:9;8475:3;8480:7;8489;8498:9;8450:13;:58::i;:::-;8443:65;8256:259;-1:-1:-1;;;;;8256:259:28:o;7038:400:27:-;1531:13:107;:11;:13::i;:::-;-1:-1:-1;;;;;1765:25:27;::::1;;::::0;;;:19:::1;:25;::::0;;;;;7155:7;;1765:25:::1;;1760:68;;1799:29;;-1:-1:-1::0;;;1799:29:27::1;;;;;;;;;;;1760:68;7174:7:::0;-1:-1:-1;;;;;1899:19:27;::::2;::::0;1895:146:::2;;1976:22;1950:4;-1:-1:-1::0;;;;;1938:32:27::2;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:60;;;;;;;;:::i;:::-;::::0;1934:96:::2;;2007:23;;-1:-1:-1::0;;;2007:23:27::2;;;;;;;;;;;1934:96;7200:7:::0;7209:4;-1:-1:-1;;;;;2711:19:27;::::3;::::0;2707:128:::3;;2751:38;::::0;-1:-1:-1;;;2751:38:27;;7836:10:132;7824:23;;2751:38:27::3;::::0;::::3;7806:42:132::0;-1:-1:-1;;;;;2751:32:27;::::3;::::0;::::3;::::0;7779:18:132;;2751:38:27::3;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2746:78;;2798:26;;-1:-1:-1::0;;;2798:26:27::3;;;;;;;;;;;2746:78;7271:24:::4;::::0;::::4;;::::0;;;:18:::4;:24;::::0;;;;;-1:-1:-1;;;;;7271:35:27;;::::4;:24:::0;::::4;:35:::0;7267:69:::4;;7315:21;;-1:-1:-1::0;;;7315:21:27::4;;;;;;;;;;;7267:69;7346:24;::::0;::::4;;::::0;;;:18:::4;:24;::::0;;;;;;;;:34;;-1:-1:-1;;;;;;7346:34:27::4;-1:-1:-1::0;;;;;7346:34:27;::::4;::::0;;::::4;::::0;;;7395:36;;1966:42:132;;;2024:18;;;2017:60;7395:36:27::4;::::0;1939:18:132;7395:36:27::4;1794:289:132::0;3524:317:27;-1:-1:-1;;;;;3631:20:27;;;3602:11;3631:20;;;:11;:20;;;;;;;;:29;;;;;;;;;;;;;3670:165;;-1:-1:-1;3714:27:27;;;;;;;:18;:27;;;;;;-1:-1:-1;;;;;3714:27:27;;3755:69;;3787:37;;-1:-1:-1;;;3787:37:27;;;;;;;;;;;12081:133:75;1531:13:107;:11;:13::i;:::-;12154:7:75::1;:18:::0;;-1:-1:-1;;;;;;12154:18:75::1;-1:-1:-1::0;;;;;12154:18:75;::::1;::::0;;::::1;::::0;;;12187:20:::1;::::0;8196:51:132;;;12187:20:75::1;::::0;8184:2:132;8169:18;12187:20:75::1;;;;;;;;12081:133:::0;:::o;17931:209::-;-1:-1:-1;;;;;18073:27:75;;18018:4;18073:27;;;:16;:27;;;;;;;18041:92;;18053:7;;18062:9;;18018:4;;18101:14;;;;18053:7;18101:14;:::i;:::-;18073:43;;;;;;;;;;;;;;;;-1:-1:-1;18073:43:75;;;18117:14;;;;18073:59;;;;;;;;-1:-1:-1;;;;;18073:59:75;18041:11;:92::i;16136:148::-;16205:10;16195:21;;;;:9;:21;;;;;;;;;:33;;-1:-1:-1;;;;;;16195:33:75;-1:-1:-1;;;;;16195:33:75;;;;;;;;16243:34;;32670::132;;;32720:18;;;32713:43;16243:34:75;;32605:18:132;16243:34:75;32458:304:132;9156:710:27;-1:-1:-1;;;;;1765:25:27;;;;;;:19;:25;;;;;;9295:4;;1765:25;;1760:68;;1799:29;;-1:-1:-1;;;1799:29:27;;;;;;;;;;;1760:68;9314:4;-1:-1:-1;;;;;2114:19:27;::::1;::::0;2110:146:::1;;2191:19;2165:4;-1:-1:-1::0;;;;;2153:32:27::1;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:57;;;;;;;;:::i;:::-;::::0;2149:96:::1;;2219:26;;-1:-1:-1::0;;;2219:26:27::1;;;;;;;;;;;2149:96;9337:4:::0;9343;-1:-1:-1;;;;;2711:19:27;::::2;::::0;2707:128:::2;;2751:38;::::0;-1:-1:-1;;;2751:38:27;;7836:10:132;7824:23;;2751:38:27::2;::::0;::::2;7806:42:132::0;-1:-1:-1;;;;;2751:32:27;::::2;::::0;::::2;::::0;7779:18:132;;2751:38:27::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2746:78;;2798:26;;-1:-1:-1::0;;;2798:26:27::2;;;;;;;;;;;2746:78;1531:13:107::3;:11;:13::i;:::-;9373:7:27::4;9384:1;9373:12:::0;9369:424:::4;;9462:34;::::0;::::4;;::::0;;;:28:::4;:34;::::0;;;;9455:41;;-1:-1:-1;;;;;;9455:41:27::4;::::0;;;::::4;::::0;9369:424:::4;;;9592:12;9581:7;:23;9577:61;;9613:25;;-1:-1:-1::0;;;9613:25:27::4;;;;;;;;;;;9577:61;9678:34;::::0;::::4;9652:23;9678:34:::0;;;:28:::4;:34;::::0;;;;9726:18;;-1:-1:-1;;;;;;9726:18:27::4;-1:-1:-1::0;;;;;9726:18:27;::::4;;::::0;;-1:-1:-1;9758:14:27::4;:24:::0;;;9369:424:::4;9807:52;9839:4;9845;9851:7;9807:52;;;;;;;;:::i;4016:359:28:-:0;4112:24;4130:5;4112:17;:24::i;:::-;4161:37;4174:5;4181:7;4190;4161:12;:37::i;:::-;:41;;4201:1;4161:41;:::i;:::-;-1:-1:-1;;;;;4151:51:28;:6;-1:-1:-1;;;;;4151:51:28;;4147:94;;4211:30;;-1:-1:-1;;;4211:30:28;;-1:-1:-1;;;;;8751:31:132;;4211:30:28;;;8733:50:132;8706:18;;4211:30:28;8589:200:132;4147:94:28;-1:-1:-1;;;;;4251:23:28;;;;;;:16;:23;;;;;;;;:32;;;;;;;;;;;;:41;;;;;;;;;:50;;-1:-1:-1;;4251:50:28;-1:-1:-1;;;;;4251:50:28;;;;;;;;4316:52;;32994:42:132;;;33052:18;;;33045:34;;;33095:18;;33088:60;;;;33179:2;33164:18;;33157:59;;;;4316:52:28;;32981:3:132;32966:19;4316:52:28;32767:455:132;3962:1043:75;-1:-1:-1;;;;;;;;;;;;;;;;;4141:20:75;;;;;;;;:::i;:::-;:47;;;;-1:-1:-1;4165:7:75;;-1:-1:-1;;;;;4165:7:75;:23;4141:47;4137:90;;;4197:30;;-1:-1:-1;;;4197:30:75;;;;;;;;;;;4137:90;-1:-1:-1;;;;;4295:22:75;;4280:12;4295:22;;;:13;:22;;;;;;;;4280:12;;4318:14;;;;:7;:14;:::i;:::-;4295:38;;;;;;;;;;;;;;;;-1:-1:-1;4295:38:75;;;4334:16;;;;4295:56;;;;;;;;:60;;-1:-1:-1;;;;;4295:56:75;;:60;:::i;:::-;4280:75;;4410:20;4433:300;;;;;;;;4461:5;-1:-1:-1;;;;;4433:300:75;;;;;4488:3;4433:300;;;;;;4513:7;-1:-1:-1;;;;;4433:300:75;;;;;4542:7;:14;;;;;;;;;;:::i;:::-;4433:300;;;;;;4580:7;:16;;;4433:300;;;;4616:68;4630:5;4637:3;4642:7;4651;:14;;;;;;;;;;:::i;:::-;4667:7;:16;;;4616:13;:68::i;:::-;4433:300;;;;4707:15;;;;:7;:15;:::i;:::-;4433:300;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4433:300:75;;;;-1:-1:-1;4410:323:75;;-1:-1:-1;4433:300:75;-1:-1:-1;4866:39:75;;-1:-1:-1;4881:7:75;4890:14;;;;:7;:14;:::i;4866:39::-;4843:62;-1:-1:-1;;;;;;4923:28:75;;;4952:6;4960:15;;;;:7;:15;:::i;:::-;4977:20;;;;;;;;:::i;:::-;4923:75;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;6264:511:27:-;1531:13:107;:11;:13::i;:::-;6376:62:27::1;::::0;-1:-1:-1;;;6376:62:27;;-1:-1:-1;;;6376:62:27::1;::::0;::::1;35734:52:132::0;-1:-1:-1;;;;;6376:31:27;::::1;::::0;::::1;::::0;35707:18:132;;6376:62:27::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6371:108;;6447:32;;-1:-1:-1::0;;;6447:32:27::1;;;;;;;;;;;6371:108;-1:-1:-1::0;;;;;6534:25:27;::::1;;::::0;;;:19:::1;:25;::::0;;;;;::::1;;6530:67;;;6568:29;;-1:-1:-1::0;;;6568:29:27::1;;;;;;;;;;;6530:67;-1:-1:-1::0;;;;;6657:25:27;::::1;;::::0;;;:19:::1;:25;::::0;;;;;;;:32;;-1:-1:-1;;6657:32:27::1;6685:4;6657:32:::0;;::::1;::::0;;;6699:19:::1;:30:::0;;;;::::1;::::0;;;;;;;;::::1;::::0;;-1:-1:-1;;;;;;6699:30:27::1;::::0;::::1;::::0;;6745:23;;8196:51:132;;;6745:23:27::1;::::0;8169:18:132;6745:23:27::1;8050:203:132::0;2543:215:107;1531:13;:11;:13::i;:::-;-1:-1:-1;;;;;2627:22:107;::::1;2623:91;;2672:31;::::0;-1:-1:-1;;;2672:31:107;;2700:1:::1;2672:31;::::0;::::1;8196:51:132::0;8169:18;;2672:31:107::1;8050:203:132::0;2623:91:107::1;2723:28;2742:8;2723:18;:28::i;:::-;2543:215:::0;:::o;6931:1169:28:-;-1:-1:-1;;;;;7160:27:28;;7108:18;7160:27;;;:16;:27;;;;;;;;:36;;;;;;;;;;:45;;;;;;;;;-1:-1:-1;;;;;7160:45:28;;;;7219:21;;;-1:-1:-1;7215:417:28;;;7388:1;7373:16;;7357:179;7396:6;-1:-1:-1;;;;;7391:11:28;:1;-1:-1:-1;;;;;7391:11:28;;7357:179;;7436:47;7452:9;7463:7;7472;7481:1;7436:15;:47::i;:::-;7431:86;;7492:25;;-1:-1:-1;;;7492:25:28;;-1:-1:-1;;;;;8751:31:132;;7492:25:28;;;8733:50:132;8706:18;;7492:25:28;8589:200:132;7431:86:28;7404:3;;7357:179;;;-1:-1:-1;;;;;;7553:27:28;;;;;;:16;:27;;;;;;;;:36;;;;;;;;;;:45;;;;;;;;:54;;-1:-1:-1;;7553:54:28;-1:-1:-1;;;;;7553:54:28;;;;;7215:417;7771:19;;;;;;;;;;-1:-1:-1;;;;;7823:29:28;;7800:20;7823:29;;;:18;:29;;;;;;:38;;;;;;;;;;:47;;;;;;;;-1:-1:-1;;;;;7823:55:28;;;;;;;;;;;;7771:19;;-1:-1:-1;7892:26:28;;;7888:94;;7927:55;;-1:-1:-1;;;7927:55:28;;;;;23498:25:132;;;23539:18;;;23532:34;;;23471:18;;7927:55:28;23324:248:132;7888:94:28;-1:-1:-1;;;;;;;8038:29:28;;;;;;;:18;:29;;;;;;;;:38;;;;;;;;;;;;:47;;;;;;;;;-1:-1:-1;;;;;8038:55:28;;;;;;;;;;;;8031:62;;;;-1:-1:-1;6931:1169:28;:::o;17257:209:75:-;17373:10;-1:-1:-1;;;;;17373:19:75;;;;;;:53;;-1:-1:-1;;;;;;17410:16:75;;;;;;;:9;:16;;;;;;;17396:10;:30;;17373:53;17369:90;;;17435:24;;-1:-1:-1;;;17435:24:75;;;;;;;;;;;6698:1355;6804:23;;:::i;:::-;6829:7;;6911:52;6921:7;6930:14;;;;:7;:14;:::i;:::-;-1:-1:-1;;;;;1291:22:28;;;;1233:12;1291:22;;;:13;6946:16:75;1291:22:28;;;;;;;:31;;;;;;;;;;;;;6946:16:75;;;;1291:42:28;;;;;1289:44;;-1:-1:-1;;1289:44:28;;;-1:-1:-1;;;;;1289:44:28;;;;;;;;;;;;1144:206;6911:52:75;6890:73;;7018:20;7041:312;;;;;;;;7069:11;-1:-1:-1;;;;;7041:312:75;;;;;7102:3;7041:312;;;;;;7127:7;-1:-1:-1;;;;;7041:312:75;;;;;7156:7;:14;;;;;;;;;;:::i;:::-;7041:312;;;;;;7194:7;:16;;;7041:312;;;;7230:74;7244:11;7257:3;7262:7;7271;:14;;;;;;;;;;:::i;7230:74::-;7041:312;;;;7327:15;;;;:7;:15;:::i;:::-;7041:312;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7041:312:75;;;;-1:-1:-1;7018:335:75;;-1:-1:-1;7041:312:75;-1:-1:-1;7441:39:75;;-1:-1:-1;7456:7:75;7465:14;;;;:7;:14;:::i;7441:39::-;7418:62;-1:-1:-1;7553:23:75;;-1:-1:-1;;;;;7608:27:75;;;7649:6;7669:15;;;;:7;:15;:::i;:::-;7698:20;;;;;;;;:::i;:::-;7608:120;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;7608:120:75;;;;;;;;;;;;:::i;:::-;7552:176;;-1:-1:-1;7552:176:75;-1:-1:-1;7909:56:75;7552:176;7935:15;;;;:7;:15;:::i;:::-;7952:12;7909:56;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;7984:47:75;;;;;;;;8001:11;;;;;7984:47;;-1:-1:-1;;;;;7984:47:75;;;;;;;;;;;;;;;-1:-1:-1;8033:12:75;-1:-1:-1;6698:1355:75;;;;;:::o;14358:669::-;14427:16;14459:13;14455:566;;;14506:7;;14499:40;;-1:-1:-1;;;14499:40:75;;14533:4;14499:40;;;8196:51:132;-1:-1:-1;;;;;14506:7:75;;;;14499:25;;8169:18:132;;14499:40:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14488:51;;14962:8;14974:1;14962:13;14958:52;;14984:26;;-1:-1:-1;;;14984:26:75;;;;;;;;;;;14958:52;14358:669;;;:::o;15288:488::-;15463:19;;:40;-1:-1:-1;15463:40:75;:86;;;15530:19;15507:9;:20;;;:42;15463:86;15459:311;;;15615:19;;15688:20;;;;15572:187;;-1:-1:-1;;;15572:187:75;;;;;37199:25:132;;;;37240:18;;;37233:34;;;37283:18;;;37276:34;37326:18;;;37319:34;;;37171:19;;15572:187:75;36968:391:132;12948:476:75;13133:13;;13129:88;;13162:44;13177:6;13185:9;13196;13162:14;:44::i;:::-;13242:9;13230;:21;13226:192;;;13332:61;13347:6;13355:14;13383:9;13371;:21;13332:14;:61::i;:::-;12948:476;;;;;:::o;13809:447::-;13979:13;;13975:81;;14008:37;14024:9;14035;14008:15;:37::i;:::-;14081:9;14069;:21;14065:185;;;14171:54;14187:14;14215:9;14203;:21;14171:15;:54::i;:::-;13809:447;;;;:::o;1796:162:107:-;1684:7;1710:6;-1:-1:-1;;;;;1710:6:107;735:10:117;1855:23:107;1851:101;;1901:40;;-1:-1:-1;;;1901:40:107;;735:10:117;1901:40:107;;;8196:51:132;8169:18;;1901:40:107;8050:203:132;2912:187:107;2985:16;3004:6;;-1:-1:-1;;;;;3020:17:107;;;-1:-1:-1;;;;;;3020:17:107;;;;;;3052:40;;3004:6;;;;;;;3052:40;;2985:16;3052:40;2975:124;2912:187;:::o;16358:323:75:-;16505:4;16560:1;16540:17;-1:-1:-1;;;;;16540:21:75;;:134;;;-1:-1:-1;16616:58:75;;-1:-1:-1;;;;;;16616:58:75;;-1:-1:-1;;;;;16616:49:75;;;;;:58;;16666:7;;16616:58;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;3076:260:28:-;-1:-1:-1;;;;;3252:29:28;;3229:4;3252:29;;;:18;:29;;;;;;;;:38;;;;;;;;;;:47;;;;;;;;-1:-1:-1;;;;;3252:55:28;;;;;;;;;;:77;;3076:260;;;;;;:::o;896:222:44:-;-1:-1:-1;;;;;987:22:44;;983:129;;1025:19;1032:3;1037:6;1025;:19::i;983:129::-;1075:26;1081:6;1089:3;1094:6;1075:5;:26::i;16744:438:75:-;16888:4;-1:-1:-1;;;;;16923:33:75;;:13;;;;;;;;:::i;:::-;-1:-1:-1;;;;;16923:33:75;;:199;;;-1:-1:-1;;;;;;17024:29:75;;336:1:28;17024:29:75;;;:18;:29;;;;;;;;336:1:28;;17054:14:75;;;;:7;:14;:::i;:::-;17024:45;;;;;;;;;;;;;;;:61;17070:7;:14;;;17024:61;;;;;;;;;;;:76;17086:7;:13;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;17024:76:75;;;;;;;;;;;;-1:-1:-1;17024:76:75;;:98;;;16744:438;-1:-1:-1;;;;16744:438:75:o;1608:336:28:-;1784:12;1780:77;;1827:30;;-1:-1:-1;;;1827:30:28;;;;;;;;;;;1780:77;-1:-1:-1;;;;;1867:29:28;;;;;;;:18;:29;;;;;;;;:38;;;;;;;;;;;;:47;;;;;;;;;-1:-1:-1;;;;;1867:55:28;;;;;;;;:70;1608:336::o;169:288:43:-;339:7;392:6;400:7;-1:-1:-1;;;;;409:17:43;;375:74;;37896:3:132;37874:16;;;;-1:-1:-1;;;;;;37870:51:132;375:74:43;;;37858:64:132;37945:3;37994:16;;;-1:-1:-1;;;;;;37990:25:132;;;37977:11;;;37970:46;38032:12;;;38025:28;;;;38087:16;;;;38083:25;38069:12;;;38062:47;38125:12;;;38118:28;;;38162:12;;375:74:43;;;;;;;;;;;;365:85;;;;;;358:92;;169:288;;;;;;;:::o;696:194:44:-;-1:-1:-1;;;;;779:19:44;;775:58;;807:26;;-1:-1:-1;;;807:26:44;;;;;;;;;;;775:58;843:40;-1:-1:-1;;;;;843:27:44;;871:3;876:6;843:27;:40::i;438:252::-;-1:-1:-1;;;;;506:19:44;;502:58;;534:26;;-1:-1:-1;;;534:26:44;;;;;;;;;;;502:58;571:12;589:3;-1:-1:-1;;;;;589:8:44;606:6;589:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;570:48;;;633:7;628:55;;649:34;;-1:-1:-1;;;649:34:44;;-1:-1:-1;;;;;13013:32:132;;649:34:44;;;12995:51:132;13062:18;;;13055:34;;;12968:18;;649:34:44;12821:274:132;1271:160:115;1380:43;;;-1:-1:-1;;;;;13013:32:132;;1380:43:115;;;12995:51:132;13062:18;;;;13055:34;;;1380:43:115;;;;;;;;;;12968:18:132;;;;1380:43:115;;;;;;;;;-1:-1:-1;;;;;1380:43:115;-1:-1:-1;;;1380:43:115;;;7968:11;;1353:71;;1373:5;;1380:43;;-1:-1:-1;;;;1380:43:115;-1:-1:-1;;7968:11:115;-1:-1:-1;1373:5:115;7934;7929:60;8041:7;8031:176;;8085:4;8079:11;8130:16;8127:1;8122:3;8107:40;8176:16;8171:3;8164:29;8031:176;-1:-1:-1;;8284:1:115;8278:8;8234:16;;-1:-1:-1;8310:15:115;;:68;;8362:11;8377:1;8362:16;;8310:68;;;-1:-1:-1;;;;;8328:26:115;;;:31;8310:68;8306:146;;;8401:40;;-1:-1:-1;;;8401:40:115;;-1:-1:-1;;;;;8214:32:132;;8401:40:115;;;8196:51:132;8169:18;;8401:40:115;8050:203:132;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:154:132:-;73:5;118:2;109:6;104:3;100:16;96:25;93:45;;;134:1;131;124:12;93:45;-1:-1:-1;156:6:132;14:154;-1:-1:-1;14:154:132:o;173:173::-;241:20;;-1:-1:-1;;;;;290:31:132;;280:42;;270:70;;336:1;333;326:12;351:347;402:8;412:6;466:3;459:4;451:6;447:17;443:27;433:55;;484:1;481;474:12;433:55;-1:-1:-1;507:20:132;;-1:-1:-1;;;;;539:30:132;;536:50;;;582:1;579;572:12;536:50;619:4;611:6;607:17;595:29;;671:3;664:4;655:6;647;643:19;639:30;636:39;633:59;;;688:1;685;678:12;703:987;846:6;854;862;870;878;886;894;947:3;935:9;926:7;922:23;918:33;915:53;;;964:1;961;954:12;915:53;987;1032:7;1021:9;987:53;:::i;:::-;977:63;;1059:38;1093:2;1082:9;1078:18;1059:38;:::i;:::-;1049:48;;1144:3;1133:9;1129:19;1116:33;1106:43;;1200:3;1189:9;1185:19;1172:33;-1:-1:-1;;;;;1265:2:132;1257:6;1254:14;1251:34;;;1281:1;1278;1271:12;1251:34;1320:58;1370:7;1361:6;1350:9;1346:22;1320:58;:::i;:::-;1397:8;;-1:-1:-1;1294:84:132;-1:-1:-1;1485:3:132;1470:19;;1457:33;;-1:-1:-1;1502:16:132;;;1499:36;;;1531:1;1528;1521:12;1499:36;;1570:60;1622:7;1611:8;1600:9;1596:24;1570:60;:::i;:::-;703:987;;;;-1:-1:-1;703:987:132;;-1:-1:-1;703:987:132;;;;1544:86;;-1:-1:-1;;;703:987:132:o;2088:163::-;2155:20;;2215:10;2204:22;;2194:33;;2184:61;;2241:1;2238;2231:12;2256:401;2341:6;2349;2357;2365;2418:3;2406:9;2397:7;2393:23;2389:33;2386:53;;;2435:1;2432;2425:12;2386:53;2458:29;2477:9;2458:29;:::i;:::-;2448:39;;2506:37;2539:2;2528:9;2524:18;2506:37;:::i;:::-;2496:47;;2562:38;2596:2;2585:9;2581:18;2562:38;:::i;:::-;2256:401;;;;-1:-1:-1;2552:48:132;;2647:2;2632:18;2619:32;;-1:-1:-1;;2256:401:132:o;2662:469::-;2765:6;2773;2826:2;2814:9;2805:7;2801:23;2797:32;2794:52;;;2842:1;2839;2832:12;2794:52;2882:9;2869:23;-1:-1:-1;;;;;2907:6:132;2904:30;2901:50;;;2947:1;2944;2937:12;2901:50;2970:22;;3026:3;3008:16;;;3004:26;3001:46;;;3043:1;3040;3033:12;3001:46;3066:2;-1:-1:-1;3087:38:132;3121:2;3106:18;;3087:38;:::i;:::-;3077:48;;2662:469;;;;;:::o;3294:::-;3454:4;3496:3;3485:9;3481:19;3473:27;;3533:6;3527:13;3516:9;3509:32;-1:-1:-1;;;;;3601:4:132;3593:6;3589:17;3583:24;3579:49;3572:4;3561:9;3557:20;3550:79;3676:4;3668:6;3664:17;3658:24;3691:66;3751:4;3740:9;3736:20;3722:12;3214;;3202:25;;3276:4;3265:16;;;3259:23;3243:14;;3236:47;3136:153;3691:66;;3294:469;;;;:::o;3768:678::-;3891:6;3899;3907;3915;3923;3976:3;3964:9;3955:7;3951:23;3947:33;3944:53;;;3993:1;3990;3983:12;3944:53;4016:29;4035:9;4016:29;:::i;:::-;4006:39;;4064:62;4118:7;4113:2;4102:9;4098:18;4064:62;:::i;:::-;4054:72;;4173:3;4162:9;4158:19;4145:33;4135:43;;4229:3;4218:9;4214:19;4201:33;-1:-1:-1;;;;;4249:6:132;4246:30;4243:50;;;4289:1;4286;4279:12;4243:50;4328:58;4378:7;4369:6;4358:9;4354:22;4328:58;:::i;:::-;3768:678;;;;-1:-1:-1;3768:678:132;;-1:-1:-1;4405:8:132;;4302:84;3768:678;-1:-1:-1;;;3768:678:132:o;4451:405::-;4535:6;4543;4551;4559;4612:3;4600:9;4591:7;4587:23;4583:33;4580:53;;;4629:1;4626;4619:12;4580:53;4652:29;4671:9;4652:29;:::i;:::-;4642:39;;4700:38;4734:2;4723:9;4719:18;4700:38;:::i;:::-;4690:48;;4757:37;4790:2;4779:9;4775:18;4757:37;:::i;:::-;4747:47;;4813:37;4846:2;4835:9;4831:18;4813:37;:::i;:::-;4803:47;;4451:405;;;;;;;:::o;4861:250::-;4946:1;4956:113;4970:6;4967:1;4964:13;4956:113;;;5046:11;;;5040:18;5027:11;;;5020:39;4992:2;4985:10;4956:113;;;-1:-1:-1;;5103:1:132;5085:16;;5078:27;4861:250::o;5116:270::-;5157:3;5195:5;5189:12;5222:6;5217:3;5210:19;5238:76;5307:6;5300:4;5295:3;5291:14;5284:4;5277:5;5273:16;5238:76;:::i;:::-;5368:2;5347:15;-1:-1:-1;;5343:29:132;5334:39;;;;5375:4;5330:50;;5116:270;-1:-1:-1;;5116:270:132:o;5391:217::-;5538:2;5527:9;5520:21;5501:4;5558:44;5598:2;5587:9;5583:18;5575:6;5558:44;:::i;5795:171::-;5862:20;;-1:-1:-1;;;;;5911:30:132;;5901:41;;5891:69;;5956:1;5953;5946:12;5971:468;6064:6;6072;6080;6088;6096;6149:3;6137:9;6128:7;6124:23;6120:33;6117:53;;;6166:1;6163;6156:12;6117:53;6189:29;6208:9;6189:29;:::i;:::-;6179:39;;6237:37;6270:2;6259:9;6255:18;6237:37;:::i;:::-;6227:47;;6321:2;6310:9;6306:18;6293:32;6283:42;;6344:37;6377:2;6366:9;6362:18;6344:37;:::i;:::-;5971:468;;;;-1:-1:-1;5971:468:132;;6428:3;6413:19;6400:33;;5971:468;-1:-1:-1;;5971:468:132:o;6444:159::-;6511:20;;6571:6;6560:18;;6550:29;;6540:57;;6593:1;6590;6583:12;6608:401;6693:6;6701;6709;6717;6770:3;6758:9;6749:7;6745:23;6741:33;6738:53;;;6787:1;6784;6777:12;6738:53;6810:29;6829:9;6810:29;:::i;:::-;6800:39;;6858:38;6892:2;6881:9;6877:18;6858:38;:::i;:::-;6848:48;;6943:2;6932:9;6928:18;6915:32;6905:42;;6966:37;6999:2;6988:9;6984:18;6966:37;:::i;7014:258::-;7081:6;7089;7142:2;7130:9;7121:7;7117:23;7113:32;7110:52;;;7158:1;7155;7148:12;7110:52;7181:29;7200:9;7181:29;:::i;:::-;7171:39;;7229:37;7262:2;7251:9;7247:18;7229:37;:::i;7859:186::-;7918:6;7971:2;7959:9;7950:7;7946:23;7942:32;7939:52;;;7987:1;7984;7977:12;7939:52;8010:29;8029:9;8010:29;:::i;8258:326::-;8334:6;8342;8350;8403:2;8391:9;8382:7;8378:23;8374:32;8371:52;;;8419:1;8416;8409:12;8371:52;8442:29;8461:9;8442:29;:::i;:::-;8432:39;;8490:37;8523:2;8512:9;8508:18;8490:37;:::i;:::-;8480:47;;8574:2;8563:9;8559:18;8546:32;8536:42;;8258:326;;;;;:::o;8794:184::-;8852:6;8905:2;8893:9;8884:7;8880:23;8876:32;8873:52;;;8921:1;8918;8911:12;8873:52;8944:28;8962:9;8944:28;:::i;9175:1435::-;9338:6;9346;9354;9362;9370;9378;9386;9394;9402;9410;9418:7;9427;9481:3;9469:9;9460:7;9456:23;9452:33;9449:53;;;9498:1;9495;9488:12;9449:53;9521:29;9540:9;9521:29;:::i;:::-;9511:39;;9569:38;9603:2;9592:9;9588:18;9569:38;:::i;:::-;9559:48;;9654:2;9643:9;9639:18;9626:32;9616:42;;9677:37;9710:2;9699:9;9695:18;9677:37;:::i;:::-;9667:47;;9761:3;9750:9;9746:19;9733:33;9723:43;;9813:3;9802:9;9798:19;9785:33;9775:43;;-1:-1:-1;;;;;9861:3:132;9850:9;9846:19;9833:33;9830:57;9827:77;;;9900:1;9897;9890:12;9827:77;9939:85;10016:7;10008:3;9997:9;9993:19;9980:33;9969:9;9965:49;9939:85;:::i;:::-;10043:8;;-1:-1:-1;10070:8:132;-1:-1:-1;;;;;;10121:3:132;10106:19;;10093:33;10090:57;10087:77;;;10160:1;10157;10150:12;10087:77;10199:85;10276:7;10268:3;10257:9;10253:19;10240:33;10229:9;10225:49;10199:85;:::i;:::-;10303:8;;-1:-1:-1;10330:8:132;-1:-1:-1;;;;;;10381:3:132;10366:19;;10353:33;10350:57;10347:77;;;10420:1;10417;10410:12;10347:77;10461:85;10538:7;10530:3;10519:9;10515:19;10502:33;10491:9;10487:49;10461:85;:::i;:::-;10566:9;10555:20;;10595:9;10584:20;;;;9175:1435;;;;;;;;;;;;;;:::o;10615:1399::-;10796:6;10804;10812;10820;10828;10836;10844;10852;10860;10868;10876:7;10930:3;10918:9;10909:7;10905:23;10901:33;10898:53;;;10947:1;10944;10937:12;10898:53;10970;11015:7;11004:9;10970:53;:::i;:::-;10960:63;;11042:38;11076:2;11065:9;11061:18;11042:38;:::i;:::-;11032:48;;11127:3;11116:9;11112:19;11099:33;11089:43;;11179:3;11168:9;11164:19;11151:33;11141:43;;11231:3;11220:9;11216:19;11203:33;11193:43;;-1:-1:-1;;;;;11323:2:132;11316:3;11305:9;11301:19;11288:33;11285:41;11282:61;;;11339:1;11336;11329:12;11282:61;11378:85;11455:7;11447:3;11436:9;11432:19;11419:33;11408:9;11404:49;11378:85;:::i;:::-;11482:8;;-1:-1:-1;11509:8:132;-1:-1:-1;11560:3:132;11545:19;;11532:33;11529:41;-1:-1:-1;11526:61:132;;;11583:1;11580;11573:12;11526:61;11622:85;11699:7;11691:3;11680:9;11676:19;11663:33;11652:9;11648:49;11622:85;:::i;:::-;11726:8;;-1:-1:-1;11753:8:132;-1:-1:-1;11804:3:132;11789:19;;11776:33;11773:41;-1:-1:-1;11770:61:132;;;11827:1;11824;11817:12;11770:61;;11867:85;11944:7;11936:3;11925:9;11921:19;11908:33;11897:9;11893:49;11867:85;:::i;:::-;11971:8;11961:18;;11999:9;11988:20;;;;10615:1399;;;;;;;;;;;;;;:::o;12019:797::-;12157:6;12165;12173;12181;12234:2;12222:9;12213:7;12209:23;12205:32;12202:52;;;12250:1;12247;12240:12;12202:52;12273:29;12292:9;12273:29;:::i;:::-;12263:39;;12321:38;12355:2;12344:9;12340:18;12321:38;:::i;:::-;12311:48;;12410:2;12399:9;12395:18;12382:32;-1:-1:-1;;;;;12474:2:132;12466:6;12463:14;12460:34;;;12490:1;12487;12480:12;12460:34;12528:6;12517:9;12513:22;12503:32;;12573:7;12566:4;12562:2;12558:13;12554:27;12544:55;;12595:1;12592;12585:12;12544:55;12635:2;12622:16;12661:2;12653:6;12650:14;12647:34;;;12677:1;12674;12667:12;12647:34;12730:7;12725:2;12715:6;12712:1;12708:14;12704:2;12700:23;12696:32;12693:45;12690:65;;;12751:1;12748;12741:12;12690:65;12019:797;;;;-1:-1:-1;;12782:2:132;12774:11;;-1:-1:-1;;;12019:797:132:o;13100:624::-;13196:6;13204;13212;13220;13228;13281:3;13269:9;13260:7;13256:23;13252:33;13249:53;;;13298:1;13295;13288:12;13249:53;13321:29;13340:9;13321:29;:::i;:::-;13311:39;;13397:2;13386:9;13382:18;13369:32;13359:42;;13420:37;13453:2;13442:9;13438:18;13420:37;:::i;:::-;13410:47;;13508:2;13497:9;13493:18;13480:32;-1:-1:-1;;;;;13527:6:132;13524:30;13521:50;;;13567:1;13564;13557:12;13729:311;13823:6;13831;13884:3;13872:9;13863:7;13859:23;13855:33;13852:53;;;13901:1;13898;13891:12;13852:53;13924;13969:7;13958:9;13924:53;:::i;:::-;13914:63;;13996:38;14030:2;14019:9;14015:18;13996:38;:::i;14045:658::-;14216:2;14268:21;;;14338:13;;14241:18;;;14360:22;;;14187:4;;14216:2;14439:15;;;;14413:2;14398:18;;;14187:4;14482:195;14496:6;14493:1;14490:13;14482:195;;;14561:13;;-1:-1:-1;;;;;14557:39:132;14545:52;;14652:15;;;;14617:12;;;;14593:1;14511:9;14482:195;;;-1:-1:-1;14694:3:132;;14045:658;-1:-1:-1;;;;;;14045:658:132:o;14708:1008::-;14833:6;14841;14849;14857;14865;14873;14881;14889;14942:3;14930:9;14921:7;14917:23;14913:33;14910:53;;;14959:1;14956;14949:12;14910:53;14982:29;15001:9;14982:29;:::i;:::-;14972:39;;15030:38;15064:2;15053:9;15049:18;15030:38;:::i;:::-;15020:48;;15115:2;15104:9;15100:18;15087:32;15077:42;;15138:37;15171:2;15160:9;15156:18;15138:37;:::i;:::-;15128:47;;15226:3;15215:9;15211:19;15198:33;-1:-1:-1;;;;;15291:2:132;15283:6;15280:14;15277:34;;;15307:1;15304;15297:12;15277:34;15346:58;15396:7;15387:6;15376:9;15372:22;15346:58;:::i;:::-;15423:8;;-1:-1:-1;15320:84:132;-1:-1:-1;15511:3:132;15496:19;;15483:33;;-1:-1:-1;15528:16:132;;;15525:36;;;15557:1;15554;15547:12;15525:36;;15596:60;15648:7;15637:8;15626:9;15622:24;15596:60;:::i;:::-;14708:1008;;;;-1:-1:-1;14708:1008:132;;-1:-1:-1;14708:1008:132;;;;;;15675:8;-1:-1:-1;;;14708:1008:132:o;15721:332::-;15797:6;15805;15813;15866:2;15854:9;15845:7;15841:23;15837:32;15834:52;;;15882:1;15879;15872:12;15834:52;15905:29;15924:9;15905:29;:::i;:::-;15895:39;;15953:37;15986:2;15975:9;15971:18;15953:37;:::i;:::-;15943:47;;16009:38;16043:2;16032:9;16028:18;16009:38;:::i;:::-;15999:48;;15721:332;;;;;:::o;16058:326::-;16134:6;16142;16150;16203:2;16191:9;16182:7;16178:23;16174:32;16171:52;;;16219:1;16216;16209:12;16171:52;16242:28;16260:9;16242:28;:::i;:::-;16232:38;;16289;16323:2;16312:9;16308:18;16289:38;:::i;16389:328::-;16466:6;16474;16482;16535:2;16523:9;16514:7;16510:23;16506:32;16503:52;;;16551:1;16548;16541:12;16503:52;16574:29;16593:9;16574:29;:::i;16722:380::-;16825:6;16833;16841;16894:3;16882:9;16873:7;16869:23;16865:33;16862:53;;;16911:1;16908;16901:12;16862:53;16934;16979:7;16968:9;16934:53;:::i;:::-;16924:63;;17006:38;17040:2;17029:9;17025:18;17006:38;:::i;:::-;16996:48;;17091:3;17080:9;17076:19;17063:33;17053:43;;16722:380;;;;;:::o;17107:258::-;17174:6;17182;17235:2;17223:9;17214:7;17210:23;17206:32;17203:52;;;17251:1;17248;17241:12;17203:52;17274:28;17292:9;17274:28;:::i;17370:399::-;17454:6;17462;17470;17478;17531:3;17519:9;17510:7;17506:23;17502:33;17499:53;;;17548:1;17545;17538:12;17499:53;17571:29;17590:9;17571:29;:::i;:::-;17561:39;;17619:37;17652:2;17641:9;17637:18;17619:37;:::i;:::-;17609:47;;17703:2;17692:9;17688:18;17675:32;17665:42;;17726:37;17759:2;17748:9;17744:18;17726:37;:::i;17774:261::-;3214:12;;3202:25;;3276:4;3265:16;;;3259:23;3243:14;;;3236:47;17968:2;17953:18;;17980:49;3136:153;18040:184;18098:6;18151:2;18139:9;18130:7;18126:23;18122:32;18119:52;;;18167:1;18164;18157:12;18119:52;18190:28;18208:9;18190:28;:::i;18229:345::-;18426:6;18421:3;18414:19;18477:6;18469;18464:2;18459:3;18455:12;18442:42;18396:3;18507:16;;18525:2;18503:25;18537:13;;;18503:25;18229:345;-1:-1:-1;;18229:345:132:o;18579:285::-;18690:10;18664:24;18682:5;18664:24;:::i;:::-;18660:41;18655:3;18648:54;18758:4;18751:5;18747:16;18734:30;18727:4;18722:3;18718:14;18711:54;-1:-1:-1;;;;;18801:35:132;18830:4;18823:5;18819:16;18801:35;:::i;:::-;18797:60;18790:4;18785:3;18781:14;18774:84;;;18579:285::o;18869:266::-;18957:6;18952:3;18945:19;19009:6;19002:5;18995:4;18990:3;18986:14;18973:43;-1:-1:-1;19061:1:132;19036:16;;;19054:4;19032:27;;;19025:38;;;;19117:2;19096:15;;;-1:-1:-1;;19092:29:132;19083:39;;;19079:50;;18869:266::o;19140:752::-;19469:52;19511:9;19503:6;19469:52;:::i;:::-;19557:6;19552:2;19541:9;19537:18;19530:34;19601:3;19595;19584:9;19580:19;19573:32;19450:4;19628:62;19685:3;19674:9;19670:19;19662:6;19654;19628:62;:::i;:::-;-1:-1:-1;;;;;19727:32:132;;19747:3;19706:19;;19699:61;19797:22;;;19791:3;19776:19;;19769:51;19837:49;19801:6;19871;19863;19837:49;:::i;:::-;19829:57;19140:752;-1:-1:-1;;;;;;;;;;19140:752:132:o;19897:352::-;20109:3;20094:19;;20122:52;20098:9;20156:6;20122:52;:::i;:::-;-1:-1:-1;;;;;20210:32:132;;;;20205:2;20190:18;;;;20183:60;19897:352;;-1:-1:-1;19897:352:132:o;20254:127::-;20315:10;20310:3;20306:20;20303:1;20296:31;20346:4;20343:1;20336:15;20370:4;20367:1;20360:15;20386:279;20475:6;20528:2;20516:9;20507:7;20503:23;20499:32;20496:52;;;20544:1;20541;20534:12;20496:52;20576:9;20570:16;20615:1;20608:5;20605:12;20595:40;;20631:1;20628;20621:12;20670:118;20756:5;20749:13;20742:21;20735:5;20732:32;20722:60;;20778:1;20775;20768:12;20793:245;20860:6;20913:2;20901:9;20892:7;20888:23;20884:32;20881:52;;;20929:1;20926;20919:12;20881:52;20961:9;20955:16;20980:28;21002:5;20980:28;:::i;21043:462::-;-1:-1:-1;;;;;21328:15:132;;;21310:34;;21392:10;21380:23;;;;21375:2;21360:18;;21353:51;21440:15;;21435:2;21420:18;;21413:43;21487:2;21472:18;;21465:34;;;;21259:3;21244:19;;21043:462::o;21510:241::-;21566:6;21619:2;21607:9;21598:7;21594:23;21590:32;21587:52;;;21635:1;21632;21625:12;21587:52;21674:9;21661:23;21693:28;21715:5;21693:28;:::i;22149:127::-;22210:10;22205:3;22201:20;22198:1;22191:31;22241:4;22238:1;22231:15;22265:4;22262:1;22255:15;22281:698;22334:5;22387:3;22380:4;22372:6;22368:17;22364:27;22354:55;;22405:1;22402;22395:12;22354:55;22434:6;22428:13;-1:-1:-1;;;;;22497:2:132;22493;22490:10;22487:36;;;22503:18;;:::i;:::-;22578:2;22572:9;22546:2;22632:13;;-1:-1:-1;;22628:22:132;;;22652:2;22624:31;22620:40;22608:53;;;22676:18;;;22696:22;;;22673:46;22670:72;;;22722:18;;:::i;:::-;22762:10;22758:2;22751:22;22797:2;22789:6;22782:18;22843:3;22836:4;22831:2;22823:6;22819:15;22815:26;22812:35;22809:55;;;22860:1;22857;22850:12;22809:55;22873:76;22946:2;22939:4;22931:6;22927:17;22920:4;22912:6;22908:17;22873:76;:::i;22984:335::-;23063:6;23116:2;23104:9;23095:7;23091:23;23087:32;23084:52;;;23132:1;23129;23122:12;23084:52;23165:9;23159:16;-1:-1:-1;;;;;23190:6:132;23187:30;23184:50;;;23230:1;23227;23220:12;23184:50;23253:60;23305:7;23296:6;23285:9;23281:22;23253:60;:::i;23577:527::-;23862:10;23850:23;;;;23832:42;;23905:2;23890:18;;23883:34;;;;-1:-1:-1;;;;;23953:32:132;;;;23948:2;23933:18;;23926:60;-1:-1:-1;;;;;24022:31:132;24017:2;24002:18;;23995:59;24085:3;24070:19;;24063:35;23819:3;23804:19;;23577:527::o;24109:918::-;24488:6;24477:9;24470:25;24543:6;24535;24531:19;24526:2;24515:9;24511:18;24504:47;24587:6;24582:2;24571:9;24567:18;24560:34;24630:6;24625:2;24614:9;24610:18;24603:34;24674:3;24668;24657:9;24653:19;24646:32;24451:4;24701:62;24758:3;24747:9;24743:19;24735:6;24727;24701:62;:::i;:::-;24812:9;24804:6;24800:22;24794:3;24783:9;24779:19;24772:51;24846:49;24888:6;24880;24872;24846:49;:::i;:::-;24832:63;;24944:9;24936:6;24932:22;24926:3;24915:9;24911:19;24904:51;24972:49;25014:6;25006;24998;24972:49;:::i;:::-;24964:57;24109:918;-1:-1:-1;;;;;;;;;;;;;24109:918:132:o;25427:127::-;25488:10;25483:3;25479:20;25476:1;25469:31;25519:4;25516:1;25509:15;25543:4;25540:1;25533:15;25559:125;25624:9;;;25645:10;;;25642:36;;;25658:18;;:::i;26164:1006::-;26558:4;26587:3;26599:52;26641:9;26633:6;26599:52;:::i;:::-;26687:6;26682:2;26671:9;26667:18;26660:34;26731:6;26725:3;26714:9;26710:19;26703:35;26775:6;26769:3;26758:9;26754:19;26747:35;26819:2;26813:3;26802:9;26798:19;26791:31;26845:61;26902:2;26891:9;26887:18;26879:6;26871;26845:61;:::i;:::-;26831:75;;26955:9;26947:6;26943:22;26937:3;26926:9;26922:19;26915:51;26989:49;27031:6;27023;27015;26989:49;:::i;:::-;26975:63;;27087:9;27079:6;27075:22;27069:3;27058:9;27054:19;27047:51;27115:49;27157:6;27149;27141;27115:49;:::i;27175:1876::-;-1:-1:-1;;;;;27520:32:132;;27502:51;;27450:2;27572;27590:18;;;27583:30;;;27475:18;;;27648:22;;;27421:4;;27450:2;27689;;27707:18;;;27771:1;27767:14;;;27752:30;;27748:39;;27810:6;27421:4;27844:1178;27858:6;27855:1;27852:13;27844:1178;;;27923:22;;;-1:-1:-1;;27919:36:132;27907:49;;27995:20;;28070:14;28066:27;;;-1:-1:-1;;28062:41:132;28038:66;;28028:94;;28118:1;28115;28108:12;28028:94;28148:31;;28202:10;;28244:24;28148:31;28244:24;:::i;:::-;28240:33;28232:6;28225:49;28350:2;28315:33;28344:2;28337:5;28333:14;28315:33;:::i;:::-;28311:42;28306:2;28298:6;28294:15;28287:67;;28419:2;28412:5;28408:14;28395:28;28508:2;28504:7;28496:5;28480:14;28476:26;28472:40;28450:20;28446:67;28436:95;;28527:1;28524;28517:12;28436:95;28559:32;28667:16;;;;28618:21;-1:-1:-1;;;;;28699:30:132;;28696:50;;;28742:1;28739;28732:12;28696:50;28795:6;28779:14;28775:27;28766:7;28762:41;28759:61;;;28816:1;28813;28806:12;28759:61;28857:2;28852;28844:6;28840:15;28833:27;28883:59;28938:2;28930:6;28926:15;28918:6;28909:7;28883:59;:::i;:::-;29000:12;;;;28873:69;-1:-1:-1;;;28965:15:132;;;;27880:1;27873:9;27844:1178;;;-1:-1:-1;29039:6:132;;27175:1876;-1:-1:-1;;;;;;;;;;27175:1876:132:o;29056:271::-;29239:6;29231;29226:3;29213:33;29195:3;29265:16;;29290:13;;;29265:16;29056:271;-1:-1:-1;29056:271:132:o;29332:598::-;-1:-1:-1;;;;;29637:15:132;;;29619:34;;29689:15;;29684:2;29669:18;;29662:43;29736:2;29721:18;;29714:34;;;29796:6;29784:19;;29779:2;29764:18;;29757:47;29599:3;29835;29820:19;;29813:32;;;29562:4;;29862:62;;29904:19;;29896:6;29888;29862:62;:::i;:::-;29854:70;29332:598;-1:-1:-1;;;;;;;;29332:598:132:o;29935:703::-;30195:4;30241:1;30237;30232:3;30228:11;30224:19;30282:2;30274:6;30270:15;30259:9;30252:34;30322:6;30317:2;30306:9;30302:18;30295:34;30365:3;30360:2;30349:9;30345:18;30338:31;30392:62;30449:3;30438:9;30434:19;30426:6;30418;30392:62;:::i;:::-;30502:2;30494:6;30490:15;30485:2;30474:9;30470:18;30463:43;30555:9;30547:6;30543:22;30537:3;30526:9;30522:19;30515:51;30583:49;30625:6;30617;30609;30583:49;:::i;:::-;30575:57;29935:703;-1:-1:-1;;;;;;;;;;;29935:703:132:o;31106:360::-;31336:10;31324:23;;;;31306:42;;-1:-1:-1;;;;;31384:32:132;;;;31379:2;31364:18;;31357:60;31448:2;31433:18;;31426:34;31294:2;31279:18;;31106:360::o;31844:424::-;32084:3;32069:19;;32097:52;32073:9;32131:6;32097:52;:::i;:::-;-1:-1:-1;;;;;32185:32:132;;;;32180:2;32165:18;;32158:60;32249:3;32234:19;32227:35;31844:424;;-1:-1:-1;31844:424:132:o;32273:180::-;-1:-1:-1;;;;;32378:10:132;;;32390;;;32374:27;;32413:11;;;32410:37;;;32427:18;;:::i;33227:521::-;33304:4;33310:6;33370:11;33357:25;33464:2;33460:7;33449:8;33433:14;33429:29;33425:43;33405:18;33401:68;33391:96;;33483:1;33480;33473:12;33391:96;33510:33;;33562:20;;;-1:-1:-1;;;;;;33594:30:132;;33591:50;;;33637:1;33634;33627:12;33591:50;33670:4;33658:17;;-1:-1:-1;33701:14:132;33697:27;;;33687:38;;33684:58;;;33738:1;33735;33728:12;33753:1085;34008:2;33990:21;;;34051:13;;-1:-1:-1;;;;;34047:38:132;34027:18;;;34020:66;34145:4;34133:17;;34127:24;34153:10;34123:41;34117:3;34102:19;;34095:70;34224:4;34212:17;;34206:24;-1:-1:-1;;;;;34202:50:132;34240:3;34181:19;;34174:79;34288:15;;34282:22;-1:-1:-1;;34313:52:132;34360:3;34345:19;;34282:22;1771:10;1760:22;1748:35;;1695:94;34313:52;;34421:3;34413:6;34409:16;34403:23;34396:4;34385:9;34381:20;34374:53;34482:3;34474:6;34470:16;34464:23;34458:3;34447:9;34443:19;34436:52;34537:3;34529:6;34525:16;34519:23;34579:4;34573:3;34562:9;34558:19;34551:33;34604:53;34652:3;34641:9;34637:19;34621:14;34604:53;:::i;:::-;34593:64;;34704:9;34699:3;34695:19;34688:4;34677:9;34673:20;34666:49;34732:46;34774:3;34766:6;34758;34732:46;:::i;:::-;34724:54;;;34787:45;34826:4;34815:9;34811:20;34803:6;7347:13;7340:21;7328:34;;7277:91;34843:478;34913:5;34961:4;34949:9;34944:3;34940:19;34936:30;34933:50;;;34979:1;34976;34969:12;34933:50;35012:4;35006:11;35056:4;35048:6;35044:17;35127:6;35115:10;35112:22;-1:-1:-1;;;;;35079:10:132;35076:34;35073:62;35070:88;;;35138:18;;:::i;:::-;35174:4;35167:24;35239:16;;35224:32;;35310:2;35295:18;;;35289:25;35272:15;;;35265:50;;;;-1:-1:-1;35209:6:132;34843:478;-1:-1:-1;34843:478:132:o;35326:259::-;35426:6;35479:2;35467:9;35458:7;35454:23;35450:32;35447:52;;;35495:1;35492;35485:12;35447:52;35518:61;35571:7;35560:9;35518:61;:::i;35797:471::-;35915:6;35923;35976:2;35964:9;35955:7;35951:23;35947:32;35944:52;;;35992:1;35989;35982:12;35944:52;36015:61;36068:7;36057:9;36015:61;:::i;:::-;36005:71;;36120:2;36109:9;36105:18;36099:25;-1:-1:-1;;;;;36139:6:132;36136:30;36133:50;;;36179:1;36176;36169:12;36133:50;36202:60;36254:7;36245:6;36234:9;36230:22;36202:60;:::i;:::-;36192:70;;;35797:471;;;;;:::o;36273:501::-;36504:2;36493:9;36486:21;36467:4;36530:44;36570:2;36559:9;36555:18;36547:6;36530:44;:::i;:::-;36622:9;36614:6;36610:22;36605:2;36594:9;36590:18;36583:50;36650:49;36692:6;36684;36676;36650:49;:::i;:::-;36642:57;;;36764:1;36760;36755:3;36751:11;36747:19;36739:6;36735:32;36730:2;36719:9;36715:18;36708:60;36273:501;;;;;;;:::o;36779:184::-;36849:6;36902:2;36890:9;36881:7;36877:23;36873:32;36870:52;;;36918:1;36915;36908:12;36870:52;-1:-1:-1;36941:16:132;;36779:184;-1:-1:-1;36779:184:132:o;37364:254::-;37548:2;37533:18;;37560:52;37537:9;37594:6;37560:52;:::i", - "linkReferences": {}, - "immutableReferences": { - "6047": [{ "start": 1921, "length": 32 }], - "7028": [ - { "start": 1329, "length": 32 }, - { "start": 10121, "length": 32 }, - { "start": 12155, "length": 32 }, - { "start": 12258, "length": 32 }, - { "start": 13651, "length": 32 }, - { "start": 13754, "length": 32 } - ] - } - }, - "methodIdentifiers": { - "EMPTY_PAYLOAD_HASH()": "cb5026b9", - "NIL_PAYLOAD_HASH()": "2baf0be7", - "blockedLibrary()": "73318091", - "burn(address,uint32,bytes32,uint64,bytes32)": "40f80683", - "clear(address,(uint32,bytes32,uint64),bytes32,bytes)": "2a56c1b0", - "composeQueue(address,address,bytes32,uint16)": "35d330b0", - "defaultReceiveLibrary(uint32)": "6f50a803", - "defaultReceiveLibraryTimeout(uint32)": "6e83f5bb", - "defaultSendLibrary(uint32)": "f64be4c7", - "delegates(address)": "587cde1e", - "eid()": "416ecebf", - "getConfig(address,address,uint32,uint32)": "2b3197b9", - "getReceiveLibrary(address,uint32)": "402f8468", - "getRegisteredLibraries()": "9132e5c3", - "getSendContext()": "14f651a9", - "getSendLibrary(address,uint32)": "b96a277f", - "inboundNonce(address,uint32,bytes32)": "a0dd43fc", - "inboundPayloadHash(address,uint32,bytes32,uint64)": "c9fc7bcd", - "initializable((uint32,bytes32,uint64),address)": "861e1ca5", - "isDefaultSendLibrary(address,uint32)": "dc93c8a2", - "isRegisteredLibrary(address)": "dc706a62", - "isSendingMessage()": "79624ca9", - "isSupportedEid(uint32)": "6750cd4c", - "isValidReceiveLibrary(address,uint32,address)": "9d7f9775", - "lazyInboundNonce(address,uint32,bytes32)": "5b17bb70", - "lzCompose(address,address,bytes32,uint16,bytes,bytes)": "91d20fa1", - "lzComposeAlert(address,address,bytes32,uint16,uint256,uint256,bytes,bytes,bytes)": "697fe6b6", - "lzReceive((uint32,bytes32,uint64),address,bytes32,bytes,bytes)": "0c0c389e", - "lzReceiveAlert((uint32,bytes32,uint64),address,bytes32,uint256,uint256,bytes,bytes,bytes)": "6bf73fa3", - "lzToken()": "e4fe1d94", - "nativeToken()": "e1758bd8", - "nextGuid(address,uint32,bytes32)": "aafe5e07", - "nilify(address,uint32,bytes32,uint64,bytes32)": "2e80fbf3", - "outboundNonce(address,uint32,bytes32)": "9c6d7340", - "owner()": "8da5cb5b", - "quote((uint32,bytes32,bytes,bytes,bool),address)": "ddc28c58", - "receiveLibraryTimeout(address,uint32)": "ef667aa1", - "recoverToken(address,address,uint256)": "a7229fd9", - "registerLibrary(address)": "e8964e81", - "renounceOwnership()": "715018a6", - "send((uint32,bytes32,bytes,bytes,bool),address)": "2637a450", - "sendCompose(address,bytes32,uint16,bytes)": "7cb59012", - "setConfig(address,address,(uint32,uint32,bytes)[])": "6dbd9f90", - "setDefaultReceiveLibrary(uint32,address,uint256)": "a718531b", - "setDefaultReceiveLibraryTimeout(uint32,address,uint256)": "d4b4ec8f", - "setDefaultSendLibrary(uint32,address)": "aafea312", - "setDelegate(address)": "ca5eb5e1", - "setLzToken(address)": "c28e0eed", - "setReceiveLibrary(address,uint32,address,uint256)": "6a14d715", - "setReceiveLibraryTimeout(address,uint32,address,uint256)": "183c834f", - "setSendLibrary(address,uint32,address)": "9535ff30", - "skip(address,uint32,bytes32,uint64)": "d70b8902", - "transferOwnership(address)": "f2fde38b", - "verifiable((uint32,bytes32,uint64),address)": "c9a54a99", - "verify((uint32,bytes32,uint64),address,bytes32)": "a825d747" - }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"LZ_AlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_ComposeExists\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"expected\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"actual\",\"type\":\"bytes32\"}],\"name\":\"LZ_ComposeNotFound\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_DefaultReceiveLibUnavailable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_DefaultSendLibUnavailable\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"requiredNative\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"suppliedNative\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requiredLzToken\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"suppliedLzToken\",\"type\":\"uint256\"}],\"name\":\"LZ_InsufficientFee\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_InvalidExpiry\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"name\":\"LZ_InvalidNonce\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_InvalidPayloadHash\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_InvalidReceiveLibrary\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_LzTokenUnavailable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_OnlyNonDefaultLib\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_OnlyReceiveLib\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_OnlyRegisteredLib\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_OnlyRegisteredOrDefaultLib\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_OnlySendLib\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_PathNotInitializable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_PathNotVerifiable\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"expected\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"actual\",\"type\":\"bytes32\"}],\"name\":\"LZ_PayloadHashNotFound\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_SameValue\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_SendReentrancy\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_Unauthorized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_UnsupportedEid\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_UnsupportedInterface\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_ZeroLzTokenFee\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"Transfer_NativeFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Transfer_ToAddressIsZero\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"index\",\"type\":\"uint16\"}],\"name\":\"ComposeDelivered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"index\",\"type\":\"uint16\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"ComposeSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newLib\",\"type\":\"address\"}],\"name\":\"DefaultReceiveLibrarySet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldLib\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"expiry\",\"type\":\"uint256\"}],\"name\":\"DefaultReceiveLibraryTimeoutSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newLib\",\"type\":\"address\"}],\"name\":\"DefaultSendLibrarySet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"delegate\",\"type\":\"address\"}],\"name\":\"DelegateSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"name\":\"InboundNonceSkipped\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newLib\",\"type\":\"address\"}],\"name\":\"LibraryRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"executor\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"index\",\"type\":\"uint16\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gas\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"reason\",\"type\":\"bytes\"}],\"name\":\"LzComposeAlert\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"executor\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"indexed\":false,\"internalType\":\"struct Origin\",\"name\":\"origin\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gas\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"reason\",\"type\":\"bytes\"}],\"name\":\"LzReceiveAlert\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"LzTokenSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"payloadHash\",\"type\":\"bytes32\"}],\"name\":\"PacketBurnt\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"indexed\":false,\"internalType\":\"struct Origin\",\"name\":\"origin\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"PacketDelivered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"payloadHash\",\"type\":\"bytes32\"}],\"name\":\"PacketNilified\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"encodedPayload\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"options\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sendLibrary\",\"type\":\"address\"}],\"name\":\"PacketSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"indexed\":false,\"internalType\":\"struct Origin\",\"name\":\"origin\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"payloadHash\",\"type\":\"bytes32\"}],\"name\":\"PacketVerified\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newLib\",\"type\":\"address\"}],\"name\":\"ReceiveLibrarySet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldLib\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timeout\",\"type\":\"uint256\"}],\"name\":\"ReceiveLibraryTimeoutSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newLib\",\"type\":\"address\"}],\"name\":\"SendLibrarySet\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"EMPTY_PAYLOAD_HASH\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"NIL_PAYLOAD_HASH\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"blockedLibrary\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_oapp\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"_nonce\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"_payloadHash\",\"type\":\"bytes32\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_oapp\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"_origin\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"_guid\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"}],\"name\":\"clear\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"internalType\":\"uint16\",\"name\":\"index\",\"type\":\"uint16\"}],\"name\":\"composeQueue\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageHash\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"}],\"name\":\"defaultReceiveLibrary\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"lib\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"}],\"name\":\"defaultReceiveLibraryTimeout\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"lib\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"expiry\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"}],\"name\":\"defaultSendLibrary\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"lib\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"oapp\",\"type\":\"address\"}],\"name\":\"delegates\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"delegate\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"eid\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_oapp\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_lib\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"_configType\",\"type\":\"uint32\"}],\"name\":\"getConfig\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"config\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_srcEid\",\"type\":\"uint32\"}],\"name\":\"getReceiveLibrary\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"lib\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isDefault\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRegisteredLibraries\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSendContext\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_dstEid\",\"type\":\"uint32\"}],\"name\":\"getSendLibrary\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"lib\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_sender\",\"type\":\"bytes32\"}],\"name\":\"inboundNonce\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"inboundNonce\",\"type\":\"uint64\"}],\"name\":\"inboundPayloadHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"payloadHash\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"_origin\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"}],\"name\":\"initializable\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_dstEid\",\"type\":\"uint32\"}],\"name\":\"isDefaultSendLibrary\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"lib\",\"type\":\"address\"}],\"name\":\"isRegisteredLibrary\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isSendingMessage\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"}],\"name\":\"isSupportedEid\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_srcEid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"_actualReceiveLib\",\"type\":\"address\"}],\"name\":\"isValidReceiveLibrary\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"}],\"name\":\"lazyInboundNonce\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_guid\",\"type\":\"bytes32\"},{\"internalType\":\"uint16\",\"name\":\"_index\",\"type\":\"uint16\"},{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"lzCompose\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_guid\",\"type\":\"bytes32\"},{\"internalType\":\"uint16\",\"name\":\"_index\",\"type\":\"uint16\"},{\"internalType\":\"uint256\",\"name\":\"_gas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_reason\",\"type\":\"bytes\"}],\"name\":\"lzComposeAlert\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"_origin\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_guid\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"lzReceive\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"_origin\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_guid\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_gas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_reason\",\"type\":\"bytes\"}],\"name\":\"lzReceiveAlert\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lzToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nativeToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_receiver\",\"type\":\"bytes32\"}],\"name\":\"nextGuid\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_oapp\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"_nonce\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"_payloadHash\",\"type\":\"bytes32\"}],\"name\":\"nilify\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"receiver\",\"type\":\"bytes32\"}],\"name\":\"outboundNonce\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"receiver\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"options\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"payInLzToken\",\"type\":\"bool\"}],\"internalType\":\"struct MessagingParams\",\"name\":\"_params\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"}],\"name\":\"quote\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nativeFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lzTokenFee\",\"type\":\"uint256\"}],\"internalType\":\"struct MessagingFee\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"}],\"name\":\"receiveLibraryTimeout\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"lib\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"expiry\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"recoverToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_lib\",\"type\":\"address\"}],\"name\":\"registerLibrary\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"receiver\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"options\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"payInLzToken\",\"type\":\"bool\"}],\"internalType\":\"struct MessagingParams\",\"name\":\"_params\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"_refundAddress\",\"type\":\"address\"}],\"name\":\"send\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nativeFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lzTokenFee\",\"type\":\"uint256\"}],\"internalType\":\"struct MessagingFee\",\"name\":\"fee\",\"type\":\"tuple\"}],\"internalType\":\"struct MessagingReceipt\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_guid\",\"type\":\"bytes32\"},{\"internalType\":\"uint16\",\"name\":\"_index\",\"type\":\"uint16\"},{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"}],\"name\":\"sendCompose\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_oapp\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_lib\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"configType\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"config\",\"type\":\"bytes\"}],\"internalType\":\"struct SetConfigParam[]\",\"name\":\"_params\",\"type\":\"tuple[]\"}],\"name\":\"setConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"_newLib\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_gracePeriod\",\"type\":\"uint256\"}],\"name\":\"setDefaultReceiveLibrary\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"_lib\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_expiry\",\"type\":\"uint256\"}],\"name\":\"setDefaultReceiveLibraryTimeout\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"_newLib\",\"type\":\"address\"}],\"name\":\"setDefaultSendLibrary\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_delegate\",\"type\":\"address\"}],\"name\":\"setDelegate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_lzToken\",\"type\":\"address\"}],\"name\":\"setLzToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_oapp\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"_newLib\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_gracePeriod\",\"type\":\"uint256\"}],\"name\":\"setReceiveLibrary\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_oapp\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"_lib\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_expiry\",\"type\":\"uint256\"}],\"name\":\"setReceiveLibraryTimeout\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_oapp\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"_newLib\",\"type\":\"address\"}],\"name\":\"setSendLibrary\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_oapp\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"_nonce\",\"type\":\"uint64\"}],\"name\":\"skip\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"_origin\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"}],\"name\":\"verifiable\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"_origin\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_payloadHash\",\"type\":\"bytes32\"}],\"name\":\"verify\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}],\"SafeERC20FailedOperation(address)\":[{\"details\":\"An operation with an ERC-20 token failed.\"}]},\"kind\":\"dev\",\"methods\":{\"burn(address,uint32,bytes32,uint64,bytes32)\":{\"details\":\"Marks a nonce as unexecutable and un-verifiable. The nonce can never be re-verified or executed.Reverts if the provided _payloadHash does not match the currently verified payload hash.Only packets with nonces less than or equal to the lazy inbound nonce can be burned.Reverts if the nonce has already been executed.Authenticated by the caller\"},\"clear(address,(uint32,bytes32,uint64),bytes32,bytes)\":{\"details\":\"Oapp uses this interface to clear a message.this is a PULL mode versus the PUSH mode of lzReceivethe cleared message can be ignored by the app (effectively burnt)authenticated by oapp\",\"params\":{\"_guid\":\"the guid of the message\",\"_message\":\"the message\",\"_origin\":\"the origin of the message\"}},\"constructor\":{\"params\":{\"_eid\":\"the unique Endpoint Id for this deploy that all other Endpoints can use to send to it\"}},\"getConfig(address,address,uint32,uint32)\":{\"details\":\"a view function to query the current configuration of the OApp\"},\"getReceiveLibrary(address,uint32)\":{\"details\":\"the receiveLibrary can be lazily resolved that if not set it will point to the default configured by LayerZero\"},\"getSendContext()\":{\"details\":\"returns (eid, sender) if sending message, (0, 0) otherwise\"},\"getSendLibrary(address,uint32)\":{\"details\":\"If the Oapp does not have a selected Send Library, this function will resolve to the default library configured by LayerZero\",\"params\":{\"_dstEid\":\"The destination endpoint id\",\"_sender\":\"The address of the Oapp that is sending the message\"},\"returns\":{\"lib\":\"address of the Send Library\"}},\"inboundNonce(address,uint32,bytes32)\":{\"details\":\"returns the max index of the longest gapless sequence of verified msg nonces.the uninitialized value is 0. the first nonce is always 1it starts from the lazyInboundNonce (last checkpoint) and iteratively check if the next nonce has been verifiedthis function can OOG if too many backlogs, but it can be trivially fixed by just clearing some prior messagesNOTE: Oapp explicitly skipped nonces count as \\\"verified\\\" for these purposeseg. [1,2,3,4,6,7] => 4, [1,2,6,8,10] => 2, [1,3,4,5,6] => 1\"},\"isSendingMessage()\":{\"details\":\"returns true if sending message\"},\"isSupportedEid(uint32)\":{\"details\":\"returns true only if both the default send/receive libraries are set\"},\"isValidReceiveLibrary(address,uint32,address)\":{\"details\":\"called when the endpoint checks if the msgLib attempting to verify the msg is the configured msgLib of the Oappthis check provides the ability for Oapp to lock in a trusted msgLibit will fist check if the msgLib is the currently configured one. then check if the msgLib is the one in grace period of msgLib versioning upgrade\"},\"lzCompose(address,address,bytes32,uint16,bytes,bytes)\":{\"details\":\"execute a composed messages from the sender to the composer (receiver)the execution provides the execution context (caller, extraData) to the receiver. the receiver can optionally assert the caller and validate the untrusted extraDatacan not re-entrant\",\"params\":{\"_extraData\":\"the extra data provided by the executor. this data is untrusted and should be validated.\",\"_from\":\"the address which sends the composed message. in most cases, it is the Oapp's address.\",\"_guid\":\"the message guid\",\"_message\":\"the message\",\"_to\":\"the address which receives the composed message\"}},\"lzComposeAlert(address,address,bytes32,uint16,uint256,uint256,bytes,bytes,bytes)\":{\"params\":{\"_extraData\":\"the extra data provided by the executor\",\"_from\":\"the address which sends the composed message\",\"_guid\":\"the message guid\",\"_message\":\"the message\",\"_reason\":\"the reason why the message is not received\",\"_to\":\"the address which receives the composed message\"}},\"lzReceive((uint32,bytes32,uint64),address,bytes32,bytes,bytes)\":{\"details\":\"MESSAGING STEP 3 - the last stepexecute a verified message to the designated receiverthe execution provides the execution context (caller, extraData) to the receiver. the receiver can optionally assert the caller and validate the untrusted extraDatacant reentrant because the payload is cleared before execution\",\"params\":{\"_extraData\":\"the extra data provided by the executor. this data is untrusted and should be validated.\",\"_guid\":\"the guid of the message\",\"_message\":\"the message\",\"_origin\":\"the origin of the message\",\"_receiver\":\"the receiver of the message\"}},\"lzReceiveAlert((uint32,bytes32,uint64),address,bytes32,uint256,uint256,bytes,bytes,bytes)\":{\"params\":{\"_extraData\":\"the extra data provided by the executor.\",\"_guid\":\"the guid of the message\",\"_message\":\"the message\",\"_origin\":\"the origin of the message\",\"_reason\":\"the reason for failure\",\"_receiver\":\"the receiver of the message\"}},\"nativeToken()\":{\"details\":\"override this if the endpoint is charging ERC20 tokens as native\",\"returns\":{\"_0\":\"0x0 if using native. otherwise the address of the native ERC20 token\"}},\"nextGuid(address,uint32,bytes32)\":{\"details\":\"returns the GUID for the next message given the paththe Oapp might want to include the GUID into the message in some cases\"},\"nilify(address,uint32,bytes32,uint64,bytes32)\":{\"details\":\"Marks a packet as verified, but disallows execution until it is re-verified.Reverts if the provided _payloadHash does not match the currently verified payload hash.A non-verified nonce can be nilified by passing EMPTY_PAYLOAD_HASH for _payloadHash.Assumes the computational intractability of finding a payload that hashes to bytes32.max.Authenticated by the caller\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"quote((uint32,bytes32,bytes,bytes,bool),address)\":{\"details\":\"MESSAGING STEP 0\",\"params\":{\"_params\":\"the messaging parameters\",\"_sender\":\"the sender of the message\"}},\"recoverToken(address,address,uint256)\":{\"details\":\"recover the token sent to this contract by mistakeonly owner\",\"params\":{\"_amount\":\"the amount to send\",\"_to\":\"the address to send the token to\",\"_token\":\"the token to recover. if 0x0 then it is native token\"}},\"registerLibrary(address)\":{\"details\":\"all libraries have to implement the erc165 interface to prevent wrong configurationsonly owner\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"send((uint32,bytes32,bytes,bytes,bool),address)\":{\"details\":\"MESSAGING STEP 1 - OApp need to transfer the fees to the endpoint before sending the message\",\"params\":{\"_params\":\"the messaging parameters\",\"_refundAddress\":\"the address to refund both the native and lzToken\"}},\"sendCompose(address,bytes32,uint16,bytes)\":{\"details\":\"the Oapp sends the lzCompose message to the endpointthe composer MUST assert the sender because anyone can send compose msg with this functionwith the same GUID, the Oapp can send compose to multiple _composer at the same timeauthenticated by the msg.sender\",\"params\":{\"_guid\":\"the message guid\",\"_message\":\"the message\",\"_to\":\"the address which will receive the composed message\"}},\"setConfig(address,address,(uint32,uint32,bytes)[])\":{\"details\":\"authenticated by the _oapp\"},\"setDefaultReceiveLibrary(uint32,address,uint256)\":{\"details\":\"owner setting the defaultSendLibrarymust be a registered library (including blockLibrary) with the eid support enabledin version migration, it can add a grace period to the old library. if the grace period is 0, it will delete the timeout configuration.only owner\"},\"setDefaultReceiveLibraryTimeout(uint32,address,uint256)\":{\"details\":\"owner setting the defaultSendLibrarymust be a registered library (including blockLibrary) with the eid support enabledcan used to (1) extend the current configuration (2) force remove the current configuration (3) change to a new configuration\",\"params\":{\"_expiry\":\"the block number when lib expires\"}},\"setDefaultSendLibrary(uint32,address)\":{\"details\":\"owner setting the defaultSendLibrarycan set to the blockedLibrary, which is a registered librarythe msgLib must enable the support before they can be registered to the endpoint as the defaultonly owner\"},\"setLzToken(address)\":{\"details\":\"allows reconfiguration to recover from wrong configurationsusers should never approve the EndpointV2 contract to spend their non-layerzero tokensoverride this function if the endpoint is charging ERC20 tokens as nativeonly owner\",\"params\":{\"_lzToken\":\"the new layer zero token address\"}},\"setReceiveLibrary(address,uint32,address,uint256)\":{\"details\":\"Oapp setting the receiveLibrarymust be a registered library (including blockLibrary) with the eid support enabledin version migration, it can add a grace period to the old library. if the grace period is 0, it will delete the timeout configuration.authenticated by the Oapp\",\"params\":{\"_gracePeriod\":\"the number of blocks from now until oldLib expires\"}},\"setReceiveLibraryTimeout(address,uint32,address,uint256)\":{\"details\":\"Oapp setting the defaultSendLibrarymust be a registered library (including blockLibrary) with the eid support enabledcan used to (1) extend the current configuration (2) force remove the current configuration (3) change to a new configuration\",\"params\":{\"_expiry\":\"the block number when lib expires\"}},\"setSendLibrary(address,uint32,address)\":{\"details\":\"Oapp setting the sendLibrarymust be a registered library (including blockLibrary) with the eid support enabledauthenticated by the Oapp\"},\"skip(address,uint32,bytes32,uint64)\":{\"details\":\"the caller must provide _nonce to prevent skipping the unintended nonceit could happen in some race conditions, e.g. to skip nonce 3, but nonce 3 was consumed firstusage: skipping the next nonce to prevent message verification, e.g. skip a message when Precrime throws alertsif the Oapp wants to skip a verified message, it should call the clear() function insteadafter skipping, the lazyInboundNonce is set to the provided nonce, which makes the inboundNonce also the provided nonceie. allows the Oapp to increment the lazyInboundNonce without having had that corresponding msg be verified\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"verify((uint32,bytes32,uint64),address,bytes32)\":{\"details\":\"MESSAGING STEP 2 - on the destination chainconfigured receive library verifies a message\",\"params\":{\"_origin\":\"a struct holding the srcEid, nonce, and sender of the message\",\"_payloadHash\":\"the payload hash of the message\",\"_receiver\":\"the receiver of the message\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getSendLibrary(address,uint32)\":{\"notice\":\"The Send Library is the Oapp specified library that will be used to send the message to the destination endpoint. If the Oapp does not specify a Send Library, the default Send Library will be used.\"},\"quote((uint32,bytes32,bytes,bytes,bool),address)\":{\"notice\":\"This view function gives the application built on top of LayerZero the ability to requests a quote with the same parameters as they would to send their message. Since the quotes are given on chain there is a race condition in which the prices could change between the time the user gets their quote and the time they submit their message. If the price moves up and the user doesn't send enough funds the transaction will revert, if the price goes down the _refundAddress provided by the app will be refunded the difference.\"},\"setDelegate(address)\":{\"notice\":\"delegate is authorized by the oapp to configure anything in layerzero\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/EndpointV2Mock.sol\":\"EndpointV2Mock\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessageLibManager.sol\":{\"keccak256\":\"0x64330e51de72e8d38cfc0eb5527d36baada46df4bc14233d3a8ecaf98098d69a\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://49aa45e5a26fc62e7af569cf915be8344adc78dceb6871c4c14bc5d115e59241\",\"dweb:/ipfs/QmbTuW7kzPDYForDEPnaNQi6ZrmWqDxGVnHFiugnvTyq9K\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingChannel.sol\":{\"keccak256\":\"0x8ab8cb12c8beba699c1a7f22ffa812ac553f7038326d0c0d0af77253005cfe73\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://7c7cba4ae16d0ca46ee0a365a204f7257ceaa892224604bf7c8e65c44737e46c\",\"dweb:/ipfs/QmbQX5hJDKMwKdoo6QkdcusXQXH54SVCPe5hM1ycJZsg7y\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingComposer.sol\":{\"keccak256\":\"0x20d36578e810e75346daf064813b76a177087214cae77628b1f9d43798cb52d1\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://475b6f3f1ba5d981d0c5f90b9e892d4f9f539f3b12196639b95770b5be4dbf6a\",\"dweb:/ipfs/QmYyGrnR3vDt8Dqa2paQwTG9qrD6anAGFrDZmMra8KGC6s\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingContext.sol\":{\"keccak256\":\"0x9616f3bd0d7293c9723f2ddf86f9f7030fbd99213c9748557eec8f6d13b25420\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://205e713f5af46f52799e51774ac74dbeee4056de6ddba3c4d78a327536426c54\",\"dweb:/ipfs/QmZ2ZqDwxdjpJbh91qwMfRhhQu4AMEsjUcsTEsdRV4NAys\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroComposer.sol\":{\"keccak256\":\"0xfaca7205d4211ee9208a7e59171e2301731f3d2a20c49b4a839821871f5fdd49\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f254bc60ac26687b5320a43a556e30777b0745abf7cd64d5f4720d9b1d1f7fdf\",\"dweb:/ipfs/QmRSJEZVgxaC3L2DdE6s8P5qkYfM3V5JMeseeFJJqGR4xz\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\":{\"keccak256\":\"0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bacc29fd3866af71e59cb0bdc1cf82c882a4a7f4e2652fd413c9f12649762083\",\"dweb:/ipfs/QmZh2toLnrQDWaNYhS5K4NoW7Vxd2GdZx9KA77vKEDLAqs\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol\":{\"keccak256\":\"0x9641abba8d53b08bb517d1b74801dd15ea7b84d77a6719085bd96c8ea94e3ca0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://77415ae0820859e0faf3fabdce683cce9fa03ea026ae0f6fe081ef1c9205f933\",\"dweb:/ipfs/QmXd7APqoCunQ2jYy73AHvi5gsZofLpm3SzM6FPo7zRPfL\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol\":{\"keccak256\":\"0x5cf5f24751b4e3ea1c9c5ded07cedfdfd62566b6daaffcc0144733859c9dba0c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cae7e35007a714f007ea08045ef7c0cfa6c91fd2425b5028b2d49abad357a5f0\",\"dweb:/ipfs/QmcDBs5tsiyB35b8cwzWQWNnpkawb3uuHRaqE77Hxm2tve\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol\":{\"keccak256\":\"0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d8ff6a8a89297fa127f86b54e0db3eba1d6a6eeb4f6398d3c84d569665ac8f1b\",\"dweb:/ipfs/QmVSwhw6xFDrLRAX4RXaCM47yBaBtac4wf36DYEq6KCTvT\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol\":{\"keccak256\":\"0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7e1b245d58221d16d8b5e0f01ef3e289a24a7df1ace3b94239e4d5b954ad5927\",\"dweb:/ipfs/Qmappsgp7PCY9rSSNE9Cdn4BTRX591WfCSEgq2HxhA3z6S\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol\":{\"keccak256\":\"0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b18b23a1643fc6636c4ad9d9023e2e6ca2d3c2a4a046482d4655bff09950598d\",\"dweb:/ipfs/Qma6G5SqiovwrMPfgqTrRngK1HWW373Wkf9c6YP2NhXpPk\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol\":{\"keccak256\":\"0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5173fc9143bea314b159ca5a9adb5626659ef763bc598e27de5fa46efe3291a6\",\"dweb:/ipfs/QmSLFeMFPmVeGxT4sxRPW28ictjAS22M8rLeYRu9TXkA6D\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol\":{\"keccak256\":\"0xf1c07bc61e7b1dce195ed12d50f87980fbf2d63cac1326fd28287f55fe0ba625\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://060f10ff7afc33c1c2f2b4b5ba29231fd3c943146488084d0e4ab99fce991d97\",\"dweb:/ipfs/QmaSsefAqqEqtf8FgFUmDYMwTsAty3X1pqDb6SiFvry6B3\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol\":{\"keccak256\":\"0x2ebbcaaab3554edcd41b581f1a72ac1806afbfb8047d0d47ff098f9af30d6deb\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://2d4b2cf5c3b16dc76c6767f285b57c0af917972327b2be3f7cba5825402f5fc1\",\"dweb:/ipfs/QmQQWiHE2jKEDbjzGutSoZwtApSXYfLqZt5CxEpFj8xyvT\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Errors.sol\":{\"keccak256\":\"0x35bcd6ca99c4c8d9f7d8413d1b92fb4a4d4a420ce3bf64b0fb01e68e6bcf2fa7\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://0ac14f98563f9c610c936c93e71eff657efaba1e1d892be6a215aa5cb1f63a24\",\"dweb:/ipfs/QmVZZ8owwfDGLQTAzQJJqmYY4KsrChDagh5GBK7rChT5wb\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/GUID.sol\":{\"keccak256\":\"0x8a44524af7deb96593f6b5606e9973654a113e1687809f2e45d4a91ba89862d5\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://32dd0b5d1946e0cd5c7b728086aafac50a62c061115afb8b41254589c8a6732b\",\"dweb:/ipfs/QmR9QqtiAUPRLaRVv5wnth3NGPhdWB8rJmWYfz3o5Z1mWj\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Transfer.sol\":{\"keccak256\":\"0x621d6dd5b8b7e827351459fff4ac87c16ba4656757592cf67de8b199aea4cf9a\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://345aa8c007ed8b96a74260d289545713f1d7180df270d67687e3a540a61fa5c0\",\"dweb:/ipfs/QmNWCvpqSuar6UGLDVshUc7shUv3pt1J5FTf9VyZZ13wXL\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/BlockedMessageLib.sol\":{\"keccak256\":\"0xb2b55968b26294139742adee6c155897c8334f4c6bf72f1940456cc84e6fbab9\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://e758a1fdcea4039b19f1252e4e2958f4a0e05517eb3e151784431533446c225f\",\"dweb:/ipfs/QmRBG345abgyUeTnSpuxdK1WbK5pvwhSmvBEgW1mnoYqTq\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/EndpointV2Mock.sol\":{\"keccak256\":\"0xe9096c53611537a121589b56b882fc4dd797d5cac60def708f794a15e3ca98ff\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://4092d5dd582b48a5f703e4361fc5fb66050b5fe3253891175275dc832bc8e045\",\"dweb:/ipfs/QmXSTJJNx4rn2ByCaE6vxiHnkm366ZU7dScYH1JsUbVZ1V\"]},\"node_modules/@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol\":{\"keccak256\":\"0x9b6b3e7803bc5f2f8cd7ad57db8ac1def61a9930a5a3107df4882e028a9605d7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://da62d6be1f5c6edf577f0cb45666a8aa9c2086a4bac87d95d65f02e2f4c36a4b\",\"dweb:/ipfs/QmNkpvBpoCMvX8JwAFNSc5XxJ2q5BXJpL5L1txb4QkqVFF\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC165.sol\":{\"keccak256\":\"0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://11fea9f8bc98949ac6709f0c1699db7430d2948137aa94d5a9e95a91f61a710a\",\"dweb:/ipfs/QmQdfRXxQjwP6yn3DVo1GHPpriKNcFghSPi94Z1oKEFUNS\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC20.sol\":{\"keccak256\":\"0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a2608291cb038b388d80b79a06b6118a42f7894ff67b7da10ec0dbbf5b2973ba\",\"dweb:/ipfs/QmWohqcBLbcxmA4eGPhZDXe5RYMMEEpFq22nfkaUMvTfw1\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db\",\"dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0xca2ae13e0610f6a99238dd00b97bd786bc92732dae6d6b9d61f573ec51018310\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://75f8c71ce0c91c40dd5f249ace0b7d8270f8f1767231bcf71490f7157d6ba862\",\"dweb:/ipfs/QmYXgxeDyFHvz3JsXxLEYN6GNUR44ThHeFj5XkpkgMoG4w\"]},\"node_modules/@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0x9d8da059267bac779a2dbbb9a26c2acf00ca83085e105d62d5d4ef96054a47f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c78e2aa4313323cecd1ef12a8d6265b96beee1a199923abf55d9a2a9e291ad23\",\"dweb:/ipfs/QmUTs2KStXucZezzFo3EYeqYu47utu56qrF7jj1Gue65vb\"]},\"node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"node_modules/@openzeppelin/contracts/utils/Errors.sol\":{\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf\",\"dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB\"]},\"node_modules/@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0xddce8e17e3d3f9ed818b4f4c4478a8262aab8b11ed322f1bf5ed705bb4bd97fa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8084aa71a4cc7d2980972412a88fe4f114869faea3fefa5436431644eb5c0287\",\"dweb:/ipfs/Qmbqfs5dRdPvHVKY8kTaeyc65NdqXRQwRK7h9s5UJEhD1p\"]},\"node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { "internalType": "address", "name": "_owner", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { "inputs": [], "type": "error", "name": "LZ_AlreadyRegistered" }, - { "inputs": [], "type": "error", "name": "LZ_ComposeExists" }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "expected", - "type": "bytes32" - }, - { "internalType": "bytes32", "name": "actual", "type": "bytes32" } - ], - "type": "error", - "name": "LZ_ComposeNotFound" - }, - { - "inputs": [], - "type": "error", - "name": "LZ_DefaultReceiveLibUnavailable" - }, - { - "inputs": [], - "type": "error", - "name": "LZ_DefaultSendLibUnavailable" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "requiredNative", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "suppliedNative", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "requiredLzToken", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "suppliedLzToken", - "type": "uint256" - } - ], - "type": "error", - "name": "LZ_InsufficientFee" - }, - { "inputs": [], "type": "error", "name": "LZ_InvalidExpiry" }, - { - "inputs": [ - { "internalType": "uint64", "name": "nonce", "type": "uint64" } - ], - "type": "error", - "name": "LZ_InvalidNonce" - }, - { "inputs": [], "type": "error", "name": "LZ_InvalidPayloadHash" }, - { "inputs": [], "type": "error", "name": "LZ_InvalidReceiveLibrary" }, - { "inputs": [], "type": "error", "name": "LZ_LzTokenUnavailable" }, - { "inputs": [], "type": "error", "name": "LZ_OnlyNonDefaultLib" }, - { "inputs": [], "type": "error", "name": "LZ_OnlyReceiveLib" }, - { "inputs": [], "type": "error", "name": "LZ_OnlyRegisteredLib" }, - { - "inputs": [], - "type": "error", - "name": "LZ_OnlyRegisteredOrDefaultLib" - }, - { "inputs": [], "type": "error", "name": "LZ_OnlySendLib" }, - { "inputs": [], "type": "error", "name": "LZ_PathNotInitializable" }, - { "inputs": [], "type": "error", "name": "LZ_PathNotVerifiable" }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "expected", - "type": "bytes32" - }, - { "internalType": "bytes32", "name": "actual", "type": "bytes32" } - ], - "type": "error", - "name": "LZ_PayloadHashNotFound" - }, - { "inputs": [], "type": "error", "name": "LZ_SameValue" }, - { "inputs": [], "type": "error", "name": "LZ_SendReentrancy" }, - { "inputs": [], "type": "error", "name": "LZ_Unauthorized" }, - { "inputs": [], "type": "error", "name": "LZ_UnsupportedEid" }, - { "inputs": [], "type": "error", "name": "LZ_UnsupportedInterface" }, - { "inputs": [], "type": "error", "name": "LZ_ZeroLzTokenFee" }, - { - "inputs": [ - { "internalType": "address", "name": "owner", "type": "address" } - ], - "type": "error", - "name": "OwnableInvalidOwner" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "type": "error", - "name": "OwnableUnauthorizedAccount" - }, - { - "inputs": [ - { "internalType": "address", "name": "token", "type": "address" } - ], - "type": "error", - "name": "SafeERC20FailedOperation" - }, - { - "inputs": [ - { "internalType": "address", "name": "_to", "type": "address" }, - { "internalType": "uint256", "name": "_value", "type": "uint256" } - ], - "type": "error", - "name": "Transfer_NativeFailed" - }, - { "inputs": [], "type": "error", "name": "Transfer_ToAddressIsZero" }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address", - "indexed": false - }, - { - "internalType": "address", - "name": "to", - "type": "address", - "indexed": false - }, - { - "internalType": "bytes32", - "name": "guid", - "type": "bytes32", - "indexed": false - }, - { - "internalType": "uint16", - "name": "index", - "type": "uint16", - "indexed": false - } - ], - "type": "event", - "name": "ComposeDelivered", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address", - "indexed": false - }, - { - "internalType": "address", - "name": "to", - "type": "address", - "indexed": false - }, - { - "internalType": "bytes32", - "name": "guid", - "type": "bytes32", - "indexed": false - }, - { - "internalType": "uint16", - "name": "index", - "type": "uint16", - "indexed": false - }, - { - "internalType": "bytes", - "name": "message", - "type": "bytes", - "indexed": false - } - ], - "type": "event", - "name": "ComposeSent", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "eid", - "type": "uint32", - "indexed": false - }, - { - "internalType": "address", - "name": "newLib", - "type": "address", - "indexed": false - } - ], - "type": "event", - "name": "DefaultReceiveLibrarySet", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "eid", - "type": "uint32", - "indexed": false - }, - { - "internalType": "address", - "name": "oldLib", - "type": "address", - "indexed": false - }, - { - "internalType": "uint256", - "name": "expiry", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "DefaultReceiveLibraryTimeoutSet", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "eid", - "type": "uint32", - "indexed": false - }, - { - "internalType": "address", - "name": "newLib", - "type": "address", - "indexed": false - } - ], - "type": "event", - "name": "DefaultSendLibrarySet", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address", - "indexed": false - }, - { - "internalType": "address", - "name": "delegate", - "type": "address", - "indexed": false - } - ], - "type": "event", - "name": "DelegateSet", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32", - "indexed": false - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32", - "indexed": false - }, - { - "internalType": "address", - "name": "receiver", - "type": "address", - "indexed": false - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64", - "indexed": false - } - ], - "type": "event", - "name": "InboundNonceSkipped", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newLib", - "type": "address", - "indexed": false - } - ], - "type": "event", - "name": "LibraryRegistered", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address", - "indexed": true - }, - { - "internalType": "address", - "name": "to", - "type": "address", - "indexed": true - }, - { - "internalType": "address", - "name": "executor", - "type": "address", - "indexed": true - }, - { - "internalType": "bytes32", - "name": "guid", - "type": "bytes32", - "indexed": false - }, - { - "internalType": "uint16", - "name": "index", - "type": "uint16", - "indexed": false - }, - { - "internalType": "uint256", - "name": "gas", - "type": "uint256", - "indexed": false - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256", - "indexed": false - }, - { - "internalType": "bytes", - "name": "message", - "type": "bytes", - "indexed": false - }, - { - "internalType": "bytes", - "name": "extraData", - "type": "bytes", - "indexed": false - }, - { - "internalType": "bytes", - "name": "reason", - "type": "bytes", - "indexed": false - } - ], - "type": "event", - "name": "LzComposeAlert", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "receiver", - "type": "address", - "indexed": true - }, - { - "internalType": "address", - "name": "executor", - "type": "address", - "indexed": true - }, - { - "internalType": "struct Origin", - "name": "origin", - "type": "tuple", - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { "internalType": "uint64", "name": "nonce", "type": "uint64" } - ], - "indexed": false - }, - { - "internalType": "bytes32", - "name": "guid", - "type": "bytes32", - "indexed": false - }, - { - "internalType": "uint256", - "name": "gas", - "type": "uint256", - "indexed": false - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256", - "indexed": false - }, - { - "internalType": "bytes", - "name": "message", - "type": "bytes", - "indexed": false - }, - { - "internalType": "bytes", - "name": "extraData", - "type": "bytes", - "indexed": false - }, - { - "internalType": "bytes", - "name": "reason", - "type": "bytes", - "indexed": false - } - ], - "type": "event", - "name": "LzReceiveAlert", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address", - "indexed": false - } - ], - "type": "event", - "name": "LzTokenSet", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "previousOwner", - "type": "address", - "indexed": true - }, - { - "internalType": "address", - "name": "newOwner", - "type": "address", - "indexed": true - } - ], - "type": "event", - "name": "OwnershipTransferred", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32", - "indexed": false - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32", - "indexed": false - }, - { - "internalType": "address", - "name": "receiver", - "type": "address", - "indexed": false - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64", - "indexed": false - }, - { - "internalType": "bytes32", - "name": "payloadHash", - "type": "bytes32", - "indexed": false - } - ], - "type": "event", - "name": "PacketBurnt", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "struct Origin", - "name": "origin", - "type": "tuple", - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { "internalType": "uint64", "name": "nonce", "type": "uint64" } - ], - "indexed": false - }, - { - "internalType": "address", - "name": "receiver", - "type": "address", - "indexed": false - } - ], - "type": "event", - "name": "PacketDelivered", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32", - "indexed": false - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32", - "indexed": false - }, - { - "internalType": "address", - "name": "receiver", - "type": "address", - "indexed": false - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64", - "indexed": false - }, - { - "internalType": "bytes32", - "name": "payloadHash", - "type": "bytes32", - "indexed": false - } - ], - "type": "event", - "name": "PacketNilified", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "encodedPayload", - "type": "bytes", - "indexed": false - }, - { - "internalType": "bytes", - "name": "options", - "type": "bytes", - "indexed": false - }, - { - "internalType": "address", - "name": "sendLibrary", - "type": "address", - "indexed": false - } - ], - "type": "event", - "name": "PacketSent", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "struct Origin", - "name": "origin", - "type": "tuple", - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { "internalType": "uint64", "name": "nonce", "type": "uint64" } - ], - "indexed": false - }, - { - "internalType": "address", - "name": "receiver", - "type": "address", - "indexed": false - }, - { - "internalType": "bytes32", - "name": "payloadHash", - "type": "bytes32", - "indexed": false - } - ], - "type": "event", - "name": "PacketVerified", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "receiver", - "type": "address", - "indexed": false - }, - { - "internalType": "uint32", - "name": "eid", - "type": "uint32", - "indexed": false - }, - { - "internalType": "address", - "name": "newLib", - "type": "address", - "indexed": false - } - ], - "type": "event", - "name": "ReceiveLibrarySet", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "receiver", - "type": "address", - "indexed": false - }, - { - "internalType": "uint32", - "name": "eid", - "type": "uint32", - "indexed": false - }, - { - "internalType": "address", - "name": "oldLib", - "type": "address", - "indexed": false - }, - { - "internalType": "uint256", - "name": "timeout", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "ReceiveLibraryTimeoutSet", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address", - "indexed": false - }, - { - "internalType": "uint32", - "name": "eid", - "type": "uint32", - "indexed": false - }, - { - "internalType": "address", - "name": "newLib", - "type": "address", - "indexed": false - } - ], - "type": "event", - "name": "SendLibrarySet", - "anonymous": false - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "EMPTY_PAYLOAD_HASH", - "outputs": [ - { "internalType": "bytes32", "name": "", "type": "bytes32" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "NIL_PAYLOAD_HASH", - "outputs": [ - { "internalType": "bytes32", "name": "", "type": "bytes32" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "blockedLibrary", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "_oapp", "type": "address" }, - { "internalType": "uint32", "name": "_srcEid", "type": "uint32" }, - { "internalType": "bytes32", "name": "_sender", "type": "bytes32" }, - { "internalType": "uint64", "name": "_nonce", "type": "uint64" }, - { - "internalType": "bytes32", - "name": "_payloadHash", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "burn" - }, - { - "inputs": [ - { "internalType": "address", "name": "_oapp", "type": "address" }, - { - "internalType": "struct Origin", - "name": "_origin", - "type": "tuple", - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { "internalType": "uint64", "name": "nonce", "type": "uint64" } - ] - }, - { "internalType": "bytes32", "name": "_guid", "type": "bytes32" }, - { "internalType": "bytes", "name": "_message", "type": "bytes" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "clear" - }, - { - "inputs": [ - { "internalType": "address", "name": "from", "type": "address" }, - { "internalType": "address", "name": "to", "type": "address" }, - { "internalType": "bytes32", "name": "guid", "type": "bytes32" }, - { "internalType": "uint16", "name": "index", "type": "uint16" } - ], - "stateMutability": "view", - "type": "function", - "name": "composeQueue", - "outputs": [ - { - "internalType": "bytes32", - "name": "messageHash", - "type": "bytes32" - } - ] - }, - { - "inputs": [ - { "internalType": "uint32", "name": "srcEid", "type": "uint32" } - ], - "stateMutability": "view", - "type": "function", - "name": "defaultReceiveLibrary", - "outputs": [ - { "internalType": "address", "name": "lib", "type": "address" } - ] - }, - { - "inputs": [ - { "internalType": "uint32", "name": "srcEid", "type": "uint32" } - ], - "stateMutability": "view", - "type": "function", - "name": "defaultReceiveLibraryTimeout", - "outputs": [ - { "internalType": "address", "name": "lib", "type": "address" }, - { "internalType": "uint256", "name": "expiry", "type": "uint256" } - ] - }, - { - "inputs": [ - { "internalType": "uint32", "name": "dstEid", "type": "uint32" } - ], - "stateMutability": "view", - "type": "function", - "name": "defaultSendLibrary", - "outputs": [ - { "internalType": "address", "name": "lib", "type": "address" } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "oapp", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "delegates", - "outputs": [ - { "internalType": "address", "name": "delegate", "type": "address" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "eid", - "outputs": [ - { "internalType": "uint32", "name": "", "type": "uint32" } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "_oapp", "type": "address" }, - { "internalType": "address", "name": "_lib", "type": "address" }, - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { - "internalType": "uint32", - "name": "_configType", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function", - "name": "getConfig", - "outputs": [ - { "internalType": "bytes", "name": "config", "type": "bytes" } - ] - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_receiver", - "type": "address" - }, - { "internalType": "uint32", "name": "_srcEid", "type": "uint32" } - ], - "stateMutability": "view", - "type": "function", - "name": "getReceiveLibrary", - "outputs": [ - { "internalType": "address", "name": "lib", "type": "address" }, - { "internalType": "bool", "name": "isDefault", "type": "bool" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "getRegisteredLibraries", - "outputs": [ - { "internalType": "address[]", "name": "", "type": "address[]" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "getSendContext", - "outputs": [ - { "internalType": "uint32", "name": "", "type": "uint32" }, - { "internalType": "address", "name": "", "type": "address" } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "_sender", "type": "address" }, - { "internalType": "uint32", "name": "_dstEid", "type": "uint32" } - ], - "stateMutability": "view", - "type": "function", - "name": "getSendLibrary", - "outputs": [ - { "internalType": "address", "name": "lib", "type": "address" } - ] - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_receiver", - "type": "address" - }, - { "internalType": "uint32", "name": "_srcEid", "type": "uint32" }, - { "internalType": "bytes32", "name": "_sender", "type": "bytes32" } - ], - "stateMutability": "view", - "type": "function", - "name": "inboundNonce", - "outputs": [ - { "internalType": "uint64", "name": "", "type": "uint64" } - ] - }, - { - "inputs": [ - { - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { "internalType": "uint32", "name": "srcEid", "type": "uint32" }, - { "internalType": "bytes32", "name": "sender", "type": "bytes32" }, - { - "internalType": "uint64", - "name": "inboundNonce", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function", - "name": "inboundPayloadHash", - "outputs": [ - { - "internalType": "bytes32", - "name": "payloadHash", - "type": "bytes32" - } - ] - }, - { - "inputs": [ - { - "internalType": "struct Origin", - "name": "_origin", - "type": "tuple", - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { "internalType": "uint64", "name": "nonce", "type": "uint64" } - ] - }, - { - "internalType": "address", - "name": "_receiver", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function", - "name": "initializable", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "address", "name": "_sender", "type": "address" }, - { "internalType": "uint32", "name": "_dstEid", "type": "uint32" } - ], - "stateMutability": "view", - "type": "function", - "name": "isDefaultSendLibrary", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "address", "name": "lib", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "isRegisteredLibrary", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "isSendingMessage", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" } - ], - "stateMutability": "view", - "type": "function", - "name": "isSupportedEid", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_receiver", - "type": "address" - }, - { "internalType": "uint32", "name": "_srcEid", "type": "uint32" }, - { - "internalType": "address", - "name": "_actualReceiveLib", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function", - "name": "isValidReceiveLibrary", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { "internalType": "uint32", "name": "srcEid", "type": "uint32" }, - { "internalType": "bytes32", "name": "sender", "type": "bytes32" } - ], - "stateMutability": "view", - "type": "function", - "name": "lazyInboundNonce", - "outputs": [ - { "internalType": "uint64", "name": "nonce", "type": "uint64" } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "_from", "type": "address" }, - { "internalType": "address", "name": "_to", "type": "address" }, - { "internalType": "bytes32", "name": "_guid", "type": "bytes32" }, - { "internalType": "uint16", "name": "_index", "type": "uint16" }, - { "internalType": "bytes", "name": "_message", "type": "bytes" }, - { "internalType": "bytes", "name": "_extraData", "type": "bytes" } - ], - "stateMutability": "payable", - "type": "function", - "name": "lzCompose" - }, - { - "inputs": [ - { "internalType": "address", "name": "_from", "type": "address" }, - { "internalType": "address", "name": "_to", "type": "address" }, - { "internalType": "bytes32", "name": "_guid", "type": "bytes32" }, - { "internalType": "uint16", "name": "_index", "type": "uint16" }, - { "internalType": "uint256", "name": "_gas", "type": "uint256" }, - { "internalType": "uint256", "name": "_value", "type": "uint256" }, - { "internalType": "bytes", "name": "_message", "type": "bytes" }, - { "internalType": "bytes", "name": "_extraData", "type": "bytes" }, - { "internalType": "bytes", "name": "_reason", "type": "bytes" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "lzComposeAlert" - }, - { - "inputs": [ - { - "internalType": "struct Origin", - "name": "_origin", - "type": "tuple", - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { "internalType": "uint64", "name": "nonce", "type": "uint64" } - ] - }, - { - "internalType": "address", - "name": "_receiver", - "type": "address" - }, - { "internalType": "bytes32", "name": "_guid", "type": "bytes32" }, - { "internalType": "bytes", "name": "_message", "type": "bytes" }, - { "internalType": "bytes", "name": "_extraData", "type": "bytes" } - ], - "stateMutability": "payable", - "type": "function", - "name": "lzReceive" - }, - { - "inputs": [ - { - "internalType": "struct Origin", - "name": "_origin", - "type": "tuple", - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { "internalType": "uint64", "name": "nonce", "type": "uint64" } - ] - }, - { - "internalType": "address", - "name": "_receiver", - "type": "address" - }, - { "internalType": "bytes32", "name": "_guid", "type": "bytes32" }, - { "internalType": "uint256", "name": "_gas", "type": "uint256" }, - { "internalType": "uint256", "name": "_value", "type": "uint256" }, - { "internalType": "bytes", "name": "_message", "type": "bytes" }, - { "internalType": "bytes", "name": "_extraData", "type": "bytes" }, - { "internalType": "bytes", "name": "_reason", "type": "bytes" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "lzReceiveAlert" - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "lzToken", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "nativeToken", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "_sender", "type": "address" }, - { "internalType": "uint32", "name": "_dstEid", "type": "uint32" }, - { - "internalType": "bytes32", - "name": "_receiver", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function", - "name": "nextGuid", - "outputs": [ - { "internalType": "bytes32", "name": "", "type": "bytes32" } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "_oapp", "type": "address" }, - { "internalType": "uint32", "name": "_srcEid", "type": "uint32" }, - { "internalType": "bytes32", "name": "_sender", "type": "bytes32" }, - { "internalType": "uint64", "name": "_nonce", "type": "uint64" }, - { - "internalType": "bytes32", - "name": "_payloadHash", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "nilify" - }, - { - "inputs": [ - { "internalType": "address", "name": "sender", "type": "address" }, - { "internalType": "uint32", "name": "dstEid", "type": "uint32" }, - { "internalType": "bytes32", "name": "receiver", "type": "bytes32" } - ], - "stateMutability": "view", - "type": "function", - "name": "outboundNonce", - "outputs": [ - { "internalType": "uint64", "name": "nonce", "type": "uint64" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "owner", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ] - }, - { - "inputs": [ - { - "internalType": "struct MessagingParams", - "name": "_params", - "type": "tuple", - "components": [ - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "receiver", - "type": "bytes32" - }, - { "internalType": "bytes", "name": "message", "type": "bytes" }, - { "internalType": "bytes", "name": "options", "type": "bytes" }, - { - "internalType": "bool", - "name": "payInLzToken", - "type": "bool" - } - ] - }, - { "internalType": "address", "name": "_sender", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "quote", - "outputs": [ - { - "internalType": "struct MessagingFee", - "name": "", - "type": "tuple", - "components": [ - { - "internalType": "uint256", - "name": "nativeFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "lzTokenFee", - "type": "uint256" - } - ] - } - ] - }, - { - "inputs": [ - { - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { "internalType": "uint32", "name": "srcEid", "type": "uint32" } - ], - "stateMutability": "view", - "type": "function", - "name": "receiveLibraryTimeout", - "outputs": [ - { "internalType": "address", "name": "lib", "type": "address" }, - { "internalType": "uint256", "name": "expiry", "type": "uint256" } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "_token", "type": "address" }, - { "internalType": "address", "name": "_to", "type": "address" }, - { "internalType": "uint256", "name": "_amount", "type": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "recoverToken" - }, - { - "inputs": [ - { "internalType": "address", "name": "_lib", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "registerLibrary" - }, - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "function", - "name": "renounceOwnership" - }, - { - "inputs": [ - { - "internalType": "struct MessagingParams", - "name": "_params", - "type": "tuple", - "components": [ - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "receiver", - "type": "bytes32" - }, - { "internalType": "bytes", "name": "message", "type": "bytes" }, - { "internalType": "bytes", "name": "options", "type": "bytes" }, - { - "internalType": "bool", - "name": "payInLzToken", - "type": "bool" - } - ] - }, - { - "internalType": "address", - "name": "_refundAddress", - "type": "address" - } - ], - "stateMutability": "payable", - "type": "function", - "name": "send", - "outputs": [ - { - "internalType": "struct MessagingReceipt", - "name": "", - "type": "tuple", - "components": [ - { - "internalType": "bytes32", - "name": "guid", - "type": "bytes32" - }, - { "internalType": "uint64", "name": "nonce", "type": "uint64" }, - { - "internalType": "struct MessagingFee", - "name": "fee", - "type": "tuple", - "components": [ - { - "internalType": "uint256", - "name": "nativeFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "lzTokenFee", - "type": "uint256" - } - ] - } - ] - } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "_to", "type": "address" }, - { "internalType": "bytes32", "name": "_guid", "type": "bytes32" }, - { "internalType": "uint16", "name": "_index", "type": "uint16" }, - { "internalType": "bytes", "name": "_message", "type": "bytes" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "sendCompose" - }, - { - "inputs": [ - { "internalType": "address", "name": "_oapp", "type": "address" }, - { "internalType": "address", "name": "_lib", "type": "address" }, - { - "internalType": "struct SetConfigParam[]", - "name": "_params", - "type": "tuple[]", - "components": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" }, - { - "internalType": "uint32", - "name": "configType", - "type": "uint32" - }, - { "internalType": "bytes", "name": "config", "type": "bytes" } - ] - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setConfig" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { "internalType": "address", "name": "_newLib", "type": "address" }, - { - "internalType": "uint256", - "name": "_gracePeriod", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setDefaultReceiveLibrary" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { "internalType": "address", "name": "_lib", "type": "address" }, - { "internalType": "uint256", "name": "_expiry", "type": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setDefaultReceiveLibraryTimeout" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { "internalType": "address", "name": "_newLib", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setDefaultSendLibrary" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_delegate", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setDelegate" - }, - { - "inputs": [ - { "internalType": "address", "name": "_lzToken", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setLzToken" - }, - { - "inputs": [ - { "internalType": "address", "name": "_oapp", "type": "address" }, - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { "internalType": "address", "name": "_newLib", "type": "address" }, - { - "internalType": "uint256", - "name": "_gracePeriod", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setReceiveLibrary" - }, - { - "inputs": [ - { "internalType": "address", "name": "_oapp", "type": "address" }, - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { "internalType": "address", "name": "_lib", "type": "address" }, - { "internalType": "uint256", "name": "_expiry", "type": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setReceiveLibraryTimeout" - }, - { - "inputs": [ - { "internalType": "address", "name": "_oapp", "type": "address" }, - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { "internalType": "address", "name": "_newLib", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setSendLibrary" - }, - { - "inputs": [ - { "internalType": "address", "name": "_oapp", "type": "address" }, - { "internalType": "uint32", "name": "_srcEid", "type": "uint32" }, - { "internalType": "bytes32", "name": "_sender", "type": "bytes32" }, - { "internalType": "uint64", "name": "_nonce", "type": "uint64" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "skip" - }, - { - "inputs": [ - { "internalType": "address", "name": "newOwner", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "transferOwnership" - }, - { - "inputs": [ - { - "internalType": "struct Origin", - "name": "_origin", - "type": "tuple", - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { "internalType": "uint64", "name": "nonce", "type": "uint64" } - ] - }, - { - "internalType": "address", - "name": "_receiver", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function", - "name": "verifiable", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { - "internalType": "struct Origin", - "name": "_origin", - "type": "tuple", - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { "internalType": "uint64", "name": "nonce", "type": "uint64" } - ] - }, - { - "internalType": "address", - "name": "_receiver", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "_payloadHash", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "verify" - } - ], - "devdoc": { - "kind": "dev", - "methods": { - "burn(address,uint32,bytes32,uint64,bytes32)": { - "details": "Marks a nonce as unexecutable and un-verifiable. The nonce can never be re-verified or executed.Reverts if the provided _payloadHash does not match the currently verified payload hash.Only packets with nonces less than or equal to the lazy inbound nonce can be burned.Reverts if the nonce has already been executed.Authenticated by the caller" - }, - "clear(address,(uint32,bytes32,uint64),bytes32,bytes)": { - "details": "Oapp uses this interface to clear a message.this is a PULL mode versus the PUSH mode of lzReceivethe cleared message can be ignored by the app (effectively burnt)authenticated by oapp", - "params": { - "_guid": "the guid of the message", - "_message": "the message", - "_origin": "the origin of the message" - } - }, - "constructor": { - "params": { - "_eid": "the unique Endpoint Id for this deploy that all other Endpoints can use to send to it" - } - }, - "getConfig(address,address,uint32,uint32)": { - "details": "a view function to query the current configuration of the OApp" - }, - "getReceiveLibrary(address,uint32)": { - "details": "the receiveLibrary can be lazily resolved that if not set it will point to the default configured by LayerZero" - }, - "getSendContext()": { - "details": "returns (eid, sender) if sending message, (0, 0) otherwise" - }, - "getSendLibrary(address,uint32)": { - "details": "If the Oapp does not have a selected Send Library, this function will resolve to the default library configured by LayerZero", - "params": { - "_dstEid": "The destination endpoint id", - "_sender": "The address of the Oapp that is sending the message" - }, - "returns": { "lib": "address of the Send Library" } - }, - "inboundNonce(address,uint32,bytes32)": { - "details": "returns the max index of the longest gapless sequence of verified msg nonces.the uninitialized value is 0. the first nonce is always 1it starts from the lazyInboundNonce (last checkpoint) and iteratively check if the next nonce has been verifiedthis function can OOG if too many backlogs, but it can be trivially fixed by just clearing some prior messagesNOTE: Oapp explicitly skipped nonces count as \"verified\" for these purposeseg. [1,2,3,4,6,7] => 4, [1,2,6,8,10] => 2, [1,3,4,5,6] => 1" - }, - "isSendingMessage()": { - "details": "returns true if sending message" - }, - "isSupportedEid(uint32)": { - "details": "returns true only if both the default send/receive libraries are set" - }, - "isValidReceiveLibrary(address,uint32,address)": { - "details": "called when the endpoint checks if the msgLib attempting to verify the msg is the configured msgLib of the Oappthis check provides the ability for Oapp to lock in a trusted msgLibit will fist check if the msgLib is the currently configured one. then check if the msgLib is the one in grace period of msgLib versioning upgrade" - }, - "lzCompose(address,address,bytes32,uint16,bytes,bytes)": { - "details": "execute a composed messages from the sender to the composer (receiver)the execution provides the execution context (caller, extraData) to the receiver. the receiver can optionally assert the caller and validate the untrusted extraDatacan not re-entrant", - "params": { - "_extraData": "the extra data provided by the executor. this data is untrusted and should be validated.", - "_from": "the address which sends the composed message. in most cases, it is the Oapp's address.", - "_guid": "the message guid", - "_message": "the message", - "_to": "the address which receives the composed message" - } - }, - "lzComposeAlert(address,address,bytes32,uint16,uint256,uint256,bytes,bytes,bytes)": { - "params": { - "_extraData": "the extra data provided by the executor", - "_from": "the address which sends the composed message", - "_guid": "the message guid", - "_message": "the message", - "_reason": "the reason why the message is not received", - "_to": "the address which receives the composed message" - } - }, - "lzReceive((uint32,bytes32,uint64),address,bytes32,bytes,bytes)": { - "details": "MESSAGING STEP 3 - the last stepexecute a verified message to the designated receiverthe execution provides the execution context (caller, extraData) to the receiver. the receiver can optionally assert the caller and validate the untrusted extraDatacant reentrant because the payload is cleared before execution", - "params": { - "_extraData": "the extra data provided by the executor. this data is untrusted and should be validated.", - "_guid": "the guid of the message", - "_message": "the message", - "_origin": "the origin of the message", - "_receiver": "the receiver of the message" - } - }, - "lzReceiveAlert((uint32,bytes32,uint64),address,bytes32,uint256,uint256,bytes,bytes,bytes)": { - "params": { - "_extraData": "the extra data provided by the executor.", - "_guid": "the guid of the message", - "_message": "the message", - "_origin": "the origin of the message", - "_reason": "the reason for failure", - "_receiver": "the receiver of the message" - } - }, - "nativeToken()": { - "details": "override this if the endpoint is charging ERC20 tokens as native", - "returns": { - "_0": "0x0 if using native. otherwise the address of the native ERC20 token" - } - }, - "nextGuid(address,uint32,bytes32)": { - "details": "returns the GUID for the next message given the paththe Oapp might want to include the GUID into the message in some cases" - }, - "nilify(address,uint32,bytes32,uint64,bytes32)": { - "details": "Marks a packet as verified, but disallows execution until it is re-verified.Reverts if the provided _payloadHash does not match the currently verified payload hash.A non-verified nonce can be nilified by passing EMPTY_PAYLOAD_HASH for _payloadHash.Assumes the computational intractability of finding a payload that hashes to bytes32.max.Authenticated by the caller" - }, - "owner()": { "details": "Returns the address of the current owner." }, - "quote((uint32,bytes32,bytes,bytes,bool),address)": { - "details": "MESSAGING STEP 0", - "params": { - "_params": "the messaging parameters", - "_sender": "the sender of the message" - } - }, - "recoverToken(address,address,uint256)": { - "details": "recover the token sent to this contract by mistakeonly owner", - "params": { - "_amount": "the amount to send", - "_to": "the address to send the token to", - "_token": "the token to recover. if 0x0 then it is native token" - } - }, - "registerLibrary(address)": { - "details": "all libraries have to implement the erc165 interface to prevent wrong configurationsonly owner" - }, - "renounceOwnership()": { - "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner." - }, - "send((uint32,bytes32,bytes,bytes,bool),address)": { - "details": "MESSAGING STEP 1 - OApp need to transfer the fees to the endpoint before sending the message", - "params": { - "_params": "the messaging parameters", - "_refundAddress": "the address to refund both the native and lzToken" - } - }, - "sendCompose(address,bytes32,uint16,bytes)": { - "details": "the Oapp sends the lzCompose message to the endpointthe composer MUST assert the sender because anyone can send compose msg with this functionwith the same GUID, the Oapp can send compose to multiple _composer at the same timeauthenticated by the msg.sender", - "params": { - "_guid": "the message guid", - "_message": "the message", - "_to": "the address which will receive the composed message" - } - }, - "setConfig(address,address,(uint32,uint32,bytes)[])": { - "details": "authenticated by the _oapp" - }, - "setDefaultReceiveLibrary(uint32,address,uint256)": { - "details": "owner setting the defaultSendLibrarymust be a registered library (including blockLibrary) with the eid support enabledin version migration, it can add a grace period to the old library. if the grace period is 0, it will delete the timeout configuration.only owner" - }, - "setDefaultReceiveLibraryTimeout(uint32,address,uint256)": { - "details": "owner setting the defaultSendLibrarymust be a registered library (including blockLibrary) with the eid support enabledcan used to (1) extend the current configuration (2) force remove the current configuration (3) change to a new configuration", - "params": { "_expiry": "the block number when lib expires" } - }, - "setDefaultSendLibrary(uint32,address)": { - "details": "owner setting the defaultSendLibrarycan set to the blockedLibrary, which is a registered librarythe msgLib must enable the support before they can be registered to the endpoint as the defaultonly owner" - }, - "setLzToken(address)": { - "details": "allows reconfiguration to recover from wrong configurationsusers should never approve the EndpointV2 contract to spend their non-layerzero tokensoverride this function if the endpoint is charging ERC20 tokens as nativeonly owner", - "params": { "_lzToken": "the new layer zero token address" } - }, - "setReceiveLibrary(address,uint32,address,uint256)": { - "details": "Oapp setting the receiveLibrarymust be a registered library (including blockLibrary) with the eid support enabledin version migration, it can add a grace period to the old library. if the grace period is 0, it will delete the timeout configuration.authenticated by the Oapp", - "params": { - "_gracePeriod": "the number of blocks from now until oldLib expires" - } - }, - "setReceiveLibraryTimeout(address,uint32,address,uint256)": { - "details": "Oapp setting the defaultSendLibrarymust be a registered library (including blockLibrary) with the eid support enabledcan used to (1) extend the current configuration (2) force remove the current configuration (3) change to a new configuration", - "params": { "_expiry": "the block number when lib expires" } - }, - "setSendLibrary(address,uint32,address)": { - "details": "Oapp setting the sendLibrarymust be a registered library (including blockLibrary) with the eid support enabledauthenticated by the Oapp" - }, - "skip(address,uint32,bytes32,uint64)": { - "details": "the caller must provide _nonce to prevent skipping the unintended nonceit could happen in some race conditions, e.g. to skip nonce 3, but nonce 3 was consumed firstusage: skipping the next nonce to prevent message verification, e.g. skip a message when Precrime throws alertsif the Oapp wants to skip a verified message, it should call the clear() function insteadafter skipping, the lazyInboundNonce is set to the provided nonce, which makes the inboundNonce also the provided nonceie. allows the Oapp to increment the lazyInboundNonce without having had that corresponding msg be verified" - }, - "transferOwnership(address)": { - "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." - }, - "verify((uint32,bytes32,uint64),address,bytes32)": { - "details": "MESSAGING STEP 2 - on the destination chainconfigured receive library verifies a message", - "params": { - "_origin": "a struct holding the srcEid, nonce, and sender of the message", - "_payloadHash": "the payload hash of the message", - "_receiver": "the receiver of the message" - } - } - }, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": { - "getSendLibrary(address,uint32)": { - "notice": "The Send Library is the Oapp specified library that will be used to send the message to the destination endpoint. If the Oapp does not specify a Send Library, the default Send Library will be used." - }, - "quote((uint32,bytes32,bytes,bytes,bool),address)": { - "notice": "This view function gives the application built on top of LayerZero the ability to requests a quote with the same parameters as they would to send their message. Since the quotes are given on chain there is a race condition in which the prices could change between the time the user gets their quote and the time they submit their message. If the price moves up and the user doesn't send enough funds the transaction will revert, if the price goes down the _refundAddress provided by the app will be refunded the difference." - }, - "setDelegate(address)": { - "notice": "delegate is authorized by the oapp to configure anything in layerzero" - } - }, - "version": 1 - } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/EndpointV2Mock.sol": "EndpointV2Mock" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessageLibManager.sol": { - "keccak256": "0x64330e51de72e8d38cfc0eb5527d36baada46df4bc14233d3a8ecaf98098d69a", - "urls": [ - "bzz-raw://49aa45e5a26fc62e7af569cf915be8344adc78dceb6871c4c14bc5d115e59241", - "dweb:/ipfs/QmbTuW7kzPDYForDEPnaNQi6ZrmWqDxGVnHFiugnvTyq9K" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingChannel.sol": { - "keccak256": "0x8ab8cb12c8beba699c1a7f22ffa812ac553f7038326d0c0d0af77253005cfe73", - "urls": [ - "bzz-raw://7c7cba4ae16d0ca46ee0a365a204f7257ceaa892224604bf7c8e65c44737e46c", - "dweb:/ipfs/QmbQX5hJDKMwKdoo6QkdcusXQXH54SVCPe5hM1ycJZsg7y" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingComposer.sol": { - "keccak256": "0x20d36578e810e75346daf064813b76a177087214cae77628b1f9d43798cb52d1", - "urls": [ - "bzz-raw://475b6f3f1ba5d981d0c5f90b9e892d4f9f539f3b12196639b95770b5be4dbf6a", - "dweb:/ipfs/QmYyGrnR3vDt8Dqa2paQwTG9qrD6anAGFrDZmMra8KGC6s" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingContext.sol": { - "keccak256": "0x9616f3bd0d7293c9723f2ddf86f9f7030fbd99213c9748557eec8f6d13b25420", - "urls": [ - "bzz-raw://205e713f5af46f52799e51774ac74dbeee4056de6ddba3c4d78a327536426c54", - "dweb:/ipfs/QmZ2ZqDwxdjpJbh91qwMfRhhQu4AMEsjUcsTEsdRV4NAys" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroComposer.sol": { - "keccak256": "0xfaca7205d4211ee9208a7e59171e2301731f3d2a20c49b4a839821871f5fdd49", - "urls": [ - "bzz-raw://f254bc60ac26687b5320a43a556e30777b0745abf7cd64d5f4720d9b1d1f7fdf", - "dweb:/ipfs/QmRSJEZVgxaC3L2DdE6s8P5qkYfM3V5JMeseeFJJqGR4xz" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol": { - "keccak256": "0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3", - "urls": [ - "bzz-raw://bacc29fd3866af71e59cb0bdc1cf82c882a4a7f4e2652fd413c9f12649762083", - "dweb:/ipfs/QmZh2toLnrQDWaNYhS5K4NoW7Vxd2GdZx9KA77vKEDLAqs" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol": { - "keccak256": "0x9641abba8d53b08bb517d1b74801dd15ea7b84d77a6719085bd96c8ea94e3ca0", - "urls": [ - "bzz-raw://77415ae0820859e0faf3fabdce683cce9fa03ea026ae0f6fe081ef1c9205f933", - "dweb:/ipfs/QmXd7APqoCunQ2jYy73AHvi5gsZofLpm3SzM6FPo7zRPfL" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol": { - "keccak256": "0x5cf5f24751b4e3ea1c9c5ded07cedfdfd62566b6daaffcc0144733859c9dba0c", - "urls": [ - "bzz-raw://cae7e35007a714f007ea08045ef7c0cfa6c91fd2425b5028b2d49abad357a5f0", - "dweb:/ipfs/QmcDBs5tsiyB35b8cwzWQWNnpkawb3uuHRaqE77Hxm2tve" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol": { - "keccak256": "0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc", - "urls": [ - "bzz-raw://d8ff6a8a89297fa127f86b54e0db3eba1d6a6eeb4f6398d3c84d569665ac8f1b", - "dweb:/ipfs/QmVSwhw6xFDrLRAX4RXaCM47yBaBtac4wf36DYEq6KCTvT" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol": { - "keccak256": "0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972", - "urls": [ - "bzz-raw://7e1b245d58221d16d8b5e0f01ef3e289a24a7df1ace3b94239e4d5b954ad5927", - "dweb:/ipfs/Qmappsgp7PCY9rSSNE9Cdn4BTRX591WfCSEgq2HxhA3z6S" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol": { - "keccak256": "0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901", - "urls": [ - "bzz-raw://b18b23a1643fc6636c4ad9d9023e2e6ca2d3c2a4a046482d4655bff09950598d", - "dweb:/ipfs/Qma6G5SqiovwrMPfgqTrRngK1HWW373Wkf9c6YP2NhXpPk" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol": { - "keccak256": "0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e", - "urls": [ - "bzz-raw://5173fc9143bea314b159ca5a9adb5626659ef763bc598e27de5fa46efe3291a6", - "dweb:/ipfs/QmSLFeMFPmVeGxT4sxRPW28ictjAS22M8rLeYRu9TXkA6D" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol": { - "keccak256": "0xf1c07bc61e7b1dce195ed12d50f87980fbf2d63cac1326fd28287f55fe0ba625", - "urls": [ - "bzz-raw://060f10ff7afc33c1c2f2b4b5ba29231fd3c943146488084d0e4ab99fce991d97", - "dweb:/ipfs/QmaSsefAqqEqtf8FgFUmDYMwTsAty3X1pqDb6SiFvry6B3" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol": { - "keccak256": "0x2ebbcaaab3554edcd41b581f1a72ac1806afbfb8047d0d47ff098f9af30d6deb", - "urls": [ - "bzz-raw://2d4b2cf5c3b16dc76c6767f285b57c0af917972327b2be3f7cba5825402f5fc1", - "dweb:/ipfs/QmQQWiHE2jKEDbjzGutSoZwtApSXYfLqZt5CxEpFj8xyvT" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Errors.sol": { - "keccak256": "0x35bcd6ca99c4c8d9f7d8413d1b92fb4a4d4a420ce3bf64b0fb01e68e6bcf2fa7", - "urls": [ - "bzz-raw://0ac14f98563f9c610c936c93e71eff657efaba1e1d892be6a215aa5cb1f63a24", - "dweb:/ipfs/QmVZZ8owwfDGLQTAzQJJqmYY4KsrChDagh5GBK7rChT5wb" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/GUID.sol": { - "keccak256": "0x8a44524af7deb96593f6b5606e9973654a113e1687809f2e45d4a91ba89862d5", - "urls": [ - "bzz-raw://32dd0b5d1946e0cd5c7b728086aafac50a62c061115afb8b41254589c8a6732b", - "dweb:/ipfs/QmR9QqtiAUPRLaRVv5wnth3NGPhdWB8rJmWYfz3o5Z1mWj" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Transfer.sol": { - "keccak256": "0x621d6dd5b8b7e827351459fff4ac87c16ba4656757592cf67de8b199aea4cf9a", - "urls": [ - "bzz-raw://345aa8c007ed8b96a74260d289545713f1d7180df270d67687e3a540a61fa5c0", - "dweb:/ipfs/QmNWCvpqSuar6UGLDVshUc7shUv3pt1J5FTf9VyZZ13wXL" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/BlockedMessageLib.sol": { - "keccak256": "0xb2b55968b26294139742adee6c155897c8334f4c6bf72f1940456cc84e6fbab9", - "urls": [ - "bzz-raw://e758a1fdcea4039b19f1252e4e2958f4a0e05517eb3e151784431533446c225f", - "dweb:/ipfs/QmRBG345abgyUeTnSpuxdK1WbK5pvwhSmvBEgW1mnoYqTq" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/EndpointV2Mock.sol": { - "keccak256": "0xe9096c53611537a121589b56b882fc4dd797d5cac60def708f794a15e3ca98ff", - "urls": [ - "bzz-raw://4092d5dd582b48a5f703e4361fc5fb66050b5fe3253891175275dc832bc8e045", - "dweb:/ipfs/QmXSTJJNx4rn2ByCaE6vxiHnkm366ZU7dScYH1JsUbVZ1V" - ], - "license": "LZBL-1.2" - }, - "node_modules/@openzeppelin/contracts/access/Ownable.sol": { - "keccak256": "0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb", - "urls": [ - "bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6", - "dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol": { - "keccak256": "0x9b6b3e7803bc5f2f8cd7ad57db8ac1def61a9930a5a3107df4882e028a9605d7", - "urls": [ - "bzz-raw://da62d6be1f5c6edf577f0cb45666a8aa9c2086a4bac87d95d65f02e2f4c36a4b", - "dweb:/ipfs/QmNkpvBpoCMvX8JwAFNSc5XxJ2q5BXJpL5L1txb4QkqVFF" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/interfaces/IERC165.sol": { - "keccak256": "0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724", - "urls": [ - "bzz-raw://11fea9f8bc98949ac6709f0c1699db7430d2948137aa94d5a9e95a91f61a710a", - "dweb:/ipfs/QmQdfRXxQjwP6yn3DVo1GHPpriKNcFghSPi94Z1oKEFUNS" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/interfaces/IERC20.sol": { - "keccak256": "0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c", - "urls": [ - "bzz-raw://a2608291cb038b388d80b79a06b6118a42f7894ff67b7da10ec0dbbf5b2973ba", - "dweb:/ipfs/QmWohqcBLbcxmA4eGPhZDXe5RYMMEEpFq22nfkaUMvTfw1" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol": { - "keccak256": "0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7", - "urls": [ - "bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db", - "dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol": { - "keccak256": "0xca2ae13e0610f6a99238dd00b97bd786bc92732dae6d6b9d61f573ec51018310", - "urls": [ - "bzz-raw://75f8c71ce0c91c40dd5f249ace0b7d8270f8f1767231bcf71490f7157d6ba862", - "dweb:/ipfs/QmYXgxeDyFHvz3JsXxLEYN6GNUR44ThHeFj5XkpkgMoG4w" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Address.sol": { - "keccak256": "0x9d8da059267bac779a2dbbb9a26c2acf00ca83085e105d62d5d4ef96054a47f5", - "urls": [ - "bzz-raw://c78e2aa4313323cecd1ef12a8d6265b96beee1a199923abf55d9a2a9e291ad23", - "dweb:/ipfs/QmUTs2KStXucZezzFo3EYeqYu47utu56qrF7jj1Gue65vb" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Context.sol": { - "keccak256": "0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2", - "urls": [ - "bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12", - "dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Errors.sol": { - "keccak256": "0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123", - "urls": [ - "bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf", - "dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/introspection/ERC165.sol": { - "keccak256": "0xddce8e17e3d3f9ed818b4f4c4478a8262aab8b11ed322f1bf5ed705bb4bd97fa", - "urls": [ - "bzz-raw://8084aa71a4cc7d2980972412a88fe4f114869faea3fefa5436431644eb5c0287", - "dweb:/ipfs/Qmbqfs5dRdPvHVKY8kTaeyc65NdqXRQwRK7h9s5UJEhD1p" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol": { - "keccak256": "0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8", - "urls": [ - "bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621", - "dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL" - ], - "license": "MIT" - } - }, - "version": 1 - }, - "id": 75 -} diff --git a/examples/oft-movement/out/Errors.sol/Errors.json b/examples/oft-movement/out/Errors.sol/Errors.json deleted file mode 100644 index 35983e6c3..000000000 --- a/examples/oft-movement/out/Errors.sol/Errors.json +++ /dev/null @@ -1,88 +0,0 @@ -{ - "abi": [ - { "type": "error", "name": "FailedCall", "inputs": [] }, - { "type": "error", "name": "FailedDeployment", "inputs": [] }, - { - "type": "error", - "name": "InsufficientBalance", - "inputs": [ - { "name": "balance", "type": "uint256", "internalType": "uint256" }, - { "name": "needed", "type": "uint256", "internalType": "uint256" } - ] - }, - { - "type": "error", - "name": "MissingPrecompile", - "inputs": [{ "name": "", "type": "address", "internalType": "address" }] - } - ], - "bytecode": { - "object": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220ba1f41182fac5b7c0870086083b409b008cfb7ba9621c962b3f1821e68aa869964736f6c63430008160033", - "sourceMap": "411:484:41:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;411:484:41;;;;;;;;;;;;;;;;;", - "linkReferences": {} - }, - "deployedBytecode": { - "object": "0x73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220ba1f41182fac5b7c0870086083b409b008cfb7ba9621c962b3f1821e68aa869964736f6c63430008160033", - "sourceMap": "411:484:41:-:0;;;;;;;;", - "linkReferences": {} - }, - "methodIdentifiers": {}, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"FailedCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedDeployment\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"MissingPrecompile\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Collection of common custom errors used in multiple contracts IMPORTANT: Backwards compatibility is not guaranteed in future versions of the library. It is recommended to avoid relying on the error API for critical functionality. _Available since v5.1._\",\"errors\":{\"FailedCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}],\"FailedDeployment()\":[{\"details\":\"The deployment failed.\"}],\"InsufficientBalance(uint256,uint256)\":[{\"details\":\"The ETH balance of the account is not enough to perform the operation.\"}],\"MissingPrecompile(address)\":[{\"details\":\"A necessary precompile is missing.\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@openzeppelin/contracts/utils/Errors.sol\":\"Errors\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@openzeppelin/contracts/utils/Errors.sol\":{\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf\",\"dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { "inputs": [], "type": "error", "name": "FailedCall" }, - { "inputs": [], "type": "error", "name": "FailedDeployment" }, - { - "inputs": [ - { "internalType": "uint256", "name": "balance", "type": "uint256" }, - { "internalType": "uint256", "name": "needed", "type": "uint256" } - ], - "type": "error", - "name": "InsufficientBalance" - }, - { - "inputs": [ - { "internalType": "address", "name": "", "type": "address" } - ], - "type": "error", - "name": "MissingPrecompile" - } - ], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@openzeppelin/contracts/utils/Errors.sol": "Errors" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@openzeppelin/contracts/utils/Errors.sol": { - "keccak256": "0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123", - "urls": [ - "bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf", - "dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB" - ], - "license": "MIT" - } - }, - "version": 1 - }, - "id": 41 -} diff --git a/examples/oft-movement/out/ExecutorFeeLibMock.sol/ExecutorFeeLibMock.json b/examples/oft-movement/out/ExecutorFeeLibMock.sol/ExecutorFeeLibMock.json deleted file mode 100644 index 66a74fbf4..000000000 --- a/examples/oft-movement/out/ExecutorFeeLibMock.sol/ExecutorFeeLibMock.json +++ /dev/null @@ -1,1142 +0,0 @@ -{ - "abi": [ - { - "type": "constructor", - "inputs": [ - { "name": "_localEidV2", "type": "uint32", "internalType": "uint32" } - ], - "stateMutability": "nonpayable" - }, - { "type": "receive", "stateMutability": "payable" }, - { - "type": "function", - "name": "getFee", - "inputs": [ - { - "name": "_params", - "type": "tuple", - "internalType": "struct IExecutorFeeLib.FeeParamsForRead", - "components": [ - { - "name": "priceFeed", - "type": "address", - "internalType": "address" - }, - { "name": "sender", "type": "address", "internalType": "address" }, - { - "name": "defaultMultiplierBps", - "type": "uint16", - "internalType": "uint16" - } - ] - }, - { - "name": "_dstConfig", - "type": "tuple", - "internalType": "struct IExecutor.DstConfig", - "components": [ - { - "name": "lzReceiveBaseGas", - "type": "uint64", - "internalType": "uint64" - }, - { - "name": "multiplierBps", - "type": "uint16", - "internalType": "uint16" - }, - { - "name": "floorMarginUSD", - "type": "uint128", - "internalType": "uint128" - }, - { - "name": "nativeCap", - "type": "uint128", - "internalType": "uint128" - }, - { - "name": "lzComposeBaseGas", - "type": "uint64", - "internalType": "uint64" - } - ] - }, - { "name": "_options", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [ - { "name": "fee", "type": "uint256", "internalType": "uint256" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getFee", - "inputs": [ - { - "name": "_params", - "type": "tuple", - "internalType": "struct IExecutorFeeLib.FeeParams", - "components": [ - { - "name": "priceFeed", - "type": "address", - "internalType": "address" - }, - { "name": "dstEid", "type": "uint32", "internalType": "uint32" }, - { "name": "sender", "type": "address", "internalType": "address" }, - { - "name": "calldataSize", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "defaultMultiplierBps", - "type": "uint16", - "internalType": "uint16" - } - ] - }, - { - "name": "_dstConfig", - "type": "tuple", - "internalType": "struct IExecutor.DstConfig", - "components": [ - { - "name": "lzReceiveBaseGas", - "type": "uint64", - "internalType": "uint64" - }, - { - "name": "multiplierBps", - "type": "uint16", - "internalType": "uint16" - }, - { - "name": "floorMarginUSD", - "type": "uint128", - "internalType": "uint128" - }, - { - "name": "nativeCap", - "type": "uint128", - "internalType": "uint128" - }, - { - "name": "lzComposeBaseGas", - "type": "uint64", - "internalType": "uint64" - } - ] - }, - { "name": "_options", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [ - { "name": "fee", "type": "uint256", "internalType": "uint256" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getFeeOnSend", - "inputs": [ - { - "name": "_params", - "type": "tuple", - "internalType": "struct IExecutorFeeLib.FeeParams", - "components": [ - { - "name": "priceFeed", - "type": "address", - "internalType": "address" - }, - { "name": "dstEid", "type": "uint32", "internalType": "uint32" }, - { "name": "sender", "type": "address", "internalType": "address" }, - { - "name": "calldataSize", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "defaultMultiplierBps", - "type": "uint16", - "internalType": "uint16" - } - ] - }, - { - "name": "_dstConfig", - "type": "tuple", - "internalType": "struct IExecutor.DstConfig", - "components": [ - { - "name": "lzReceiveBaseGas", - "type": "uint64", - "internalType": "uint64" - }, - { - "name": "multiplierBps", - "type": "uint16", - "internalType": "uint16" - }, - { - "name": "floorMarginUSD", - "type": "uint128", - "internalType": "uint128" - }, - { - "name": "nativeCap", - "type": "uint128", - "internalType": "uint128" - }, - { - "name": "lzComposeBaseGas", - "type": "uint64", - "internalType": "uint64" - } - ] - }, - { "name": "_options", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [ - { "name": "fee", "type": "uint256", "internalType": "uint256" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getFeeOnSend", - "inputs": [ - { - "name": "_params", - "type": "tuple", - "internalType": "struct IExecutorFeeLib.FeeParamsForRead", - "components": [ - { - "name": "priceFeed", - "type": "address", - "internalType": "address" - }, - { "name": "sender", "type": "address", "internalType": "address" }, - { - "name": "defaultMultiplierBps", - "type": "uint16", - "internalType": "uint16" - } - ] - }, - { - "name": "_dstConfig", - "type": "tuple", - "internalType": "struct IExecutor.DstConfig", - "components": [ - { - "name": "lzReceiveBaseGas", - "type": "uint64", - "internalType": "uint64" - }, - { - "name": "multiplierBps", - "type": "uint16", - "internalType": "uint16" - }, - { - "name": "floorMarginUSD", - "type": "uint128", - "internalType": "uint128" - }, - { - "name": "nativeCap", - "type": "uint128", - "internalType": "uint128" - }, - { - "name": "lzComposeBaseGas", - "type": "uint64", - "internalType": "uint64" - } - ] - }, - { "name": "_options", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [ - { "name": "fee", "type": "uint256", "internalType": "uint256" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "owner", - "inputs": [], - "outputs": [{ "name": "", "type": "address", "internalType": "address" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "renounceOwnership", - "inputs": [], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "transferOwnership", - "inputs": [ - { "name": "newOwner", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "version", - "inputs": [], - "outputs": [ - { "name": "major", "type": "uint64", "internalType": "uint64" }, - { "name": "minor", "type": "uint8", "internalType": "uint8" } - ], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "withdrawToken", - "inputs": [ - { "name": "_token", "type": "address", "internalType": "address" }, - { "name": "_to", "type": "address", "internalType": "address" }, - { "name": "_amount", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "event", - "name": "OwnershipTransferred", - "inputs": [ - { - "name": "previousOwner", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "newOwner", - "type": "address", - "indexed": true, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "error", - "name": "Executor_EidNotSupported", - "inputs": [{ "name": "eid", "type": "uint32", "internalType": "uint32" }] - }, - { - "type": "error", - "name": "Executor_InvalidExecutorOptions", - "inputs": [ - { "name": "cursor", "type": "uint256", "internalType": "uint256" } - ] - }, - { - "type": "error", - "name": "Executor_InvalidLzComposeOption", - "inputs": [] - }, - { "type": "error", "name": "Executor_InvalidLzReadOption", "inputs": [] }, - { - "type": "error", - "name": "Executor_InvalidLzReceiveOption", - "inputs": [] - }, - { - "type": "error", - "name": "Executor_InvalidNativeDropOption", - "inputs": [] - }, - { - "type": "error", - "name": "Executor_NativeAmountExceedsCap", - "inputs": [ - { "name": "amount", "type": "uint256", "internalType": "uint256" }, - { "name": "cap", "type": "uint256", "internalType": "uint256" } - ] - }, - { "type": "error", "name": "Executor_NoOptions", "inputs": [] }, - { - "type": "error", - "name": "Executor_UnsupportedOptionType", - "inputs": [ - { "name": "optionType", "type": "uint8", "internalType": "uint8" } - ] - }, - { - "type": "error", - "name": "Executor_ZeroCalldataSizeProvided", - "inputs": [] - }, - { - "type": "error", - "name": "Executor_ZeroLzComposeGasProvided", - "inputs": [] - }, - { - "type": "error", - "name": "Executor_ZeroLzReceiveGasProvided", - "inputs": [] - }, - { - "type": "error", - "name": "OwnableInvalidOwner", - "inputs": [ - { "name": "owner", "type": "address", "internalType": "address" } - ] - }, - { - "type": "error", - "name": "OwnableUnauthorizedAccount", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ] - }, - { - "type": "error", - "name": "SafeERC20FailedOperation", - "inputs": [ - { "name": "token", "type": "address", "internalType": "address" } - ] - }, - { - "type": "error", - "name": "Transfer_NativeFailed", - "inputs": [ - { "name": "_to", "type": "address", "internalType": "address" }, - { "name": "_value", "type": "uint256", "internalType": "uint256" } - ] - }, - { "type": "error", "name": "Transfer_ToAddressIsZero", "inputs": [] } - ], - "bytecode": { - "object": "0x60c060405234801561001057600080fd5b5060405161162538038061162583398101604081905261002f916100c9565b338061005557604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b61005e81610079565b5063ffffffff1660a052670de0b6b3a76400006080526100f6565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100db57600080fd5b815163ffffffff811681146100ef57600080fd5b9392505050565b60805160a0516115036101226000396000818161021501526102b20152600061075501526115036000f3fe60806040526004361061008a5760003560e01c8063566ef76211610059578063566ef7621461012c578063650037841461014c578063715018a61461016c5780638da5cb5b14610181578063f2fde38b146101a957600080fd5b806301e3366714610096578063337c7a9e146100b8578063434ee016146100eb57806354fd4d501461010b57600080fd5b3661009157005b600080fd5b3480156100a257600080fd5b506100b66100b13660046110c2565b6101c9565b005b3480156100c457600080fd5b506100d86100d336600461115f565b6101e1565b6040519081526020015b60405180910390f35b3480156100f757600080fd5b506100d86101063660046111cb565b6103c1565b34801561011757600080fd5b506040805160018082526020820152016100e2565b34801561013857600080fd5b506100d86101473660046111cb565b61058c565b34801561015857600080fd5b506100d861016736600461115f565b6105a3565b34801561017857600080fd5b506100b66105b1565b34801561018d57600080fd5b506000546040516001600160a01b0390911681526020016100e2565b3480156101b557600080fd5b506100b66101c4366004611218565b6105c5565b6101d1610603565b6101dc838383610630565b505050565b60006101f0602085018561123a565b67ffffffffffffffff166000036102475760405163c3baa0b760e01b815263ffffffff7f00000000000000000000000000000000000000000000000000000000000000001660048201526024015b60405180910390fd5b6000808061028560018261025e60208b018b61123a565b61026e60a08c0160808d0161123a565b61027e60808d0160608e01611279565b8b8b610653565b91945092509050600080808061029e60208d018d611218565b604051632229049360e21b815263ffffffff7f00000000000000000000000000000000000000000000000000000000000000008116600483015287166024820152604481018890526001600160a01b0391909116906388a4124c90606401608060405180830381865afa158015610319573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061033d9190611296565b929650909450925090506103878461035b60408e0160208f016112eb565b8e604001602081019061036e91906112eb565b8e60400160208101906103819190611279565b856106e5565b97506103a78784848f60400160208101906103a291906112eb565b6107ba565b6103b19089611325565b9c9b505050505050505050505050565b60006103d0602085018561123a565b67ffffffffffffffff16600003610413576103f1604086016020870161133e565b60405163c3baa0b760e01b815263ffffffff909116600482015260240161023e565b6000806104678161043361042d60408b0160208c0161133e565b50600090565b61044060208a018a61123a565b61045060a08b0160808c0161123a565b61046060808c0160608d01611279565b8a8a610653565b509092509050600080808061047f60208c018c611218565b6001600160a01b03166388a4124c61049d60408e0160208f0161133e565b6040516001600160e01b031960e084901b16815263ffffffff91909116600482015260608e0135602482015260448101889052606401608060405180830381865afa1580156104f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105149190611296565b929650909450925090506105588461053260408d0160208e016112eb565b8d608001602081019061054591906112eb565b8d60400160208101906103819190611279565b96506105738684848e60800160208101906103a291906112eb565b61057d9088611325565b9b9a5050505050505050505050565b600061059a858585856103c1565b95945050505050565b600061059a858585856101e1565b6105b9610603565b6105c3600061080f565b565b6105cd610603565b6001600160a01b0381166105f757604051631e4fbdf760e01b81526000600482015260240161023e565b6106008161080f565b50565b6000546001600160a01b031633146105c35760405163118cdaa760e01b815233600482015260240161023e565b6001600160a01b038316610648576101dc828261085f565b6101dc83838361090c565b60008060008061066686868d8d8b610947565b805160608201516080830151919650935090915061068e9067ffffffffffffffff8a16611364565b60208201516106a79067ffffffffffffffff8c16611325565b6106b19190611325565b92508060400151156106d75760646106ca846066611364565b6106d4919061137b565b92505b509750975097945050505050565b60008061ffff8616156106f857856106fa565b845b9050600061271061070f61ffff84168a611364565b610719919061137b565b90506001600160801b038416158061073857506001600160801b038516155b1561074657915061059a9050565b600088856001600160801b03167f0000000000000000000000000000000000000000000000000000000000000000886001600160801b03166107889190611364565b610792919061137b565b61079c9190611325565b90508181116107ab57816107ad565b805b9998505050505050505050565b60008415610807576127108261ffff16846001600160801b0316866001600160801b0316886107e99190611364565b6107f3919061137b565b6107fd9190611364565b61059a919061137b565b949350505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038216610886576040516306b7a93160e41b815260040160405180910390fd5b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146108d3576040519150601f19603f3d011682016040523d82523d6000602084013e6108d8565b606091505b50509050806101dc57604051631196f20d60e21b81526001600160a01b03841660048201526024810183905260440161023e565b6001600160a01b038216610933576040516306b7a93160e41b815260040160405180910390fd5b6101dc6001600160a01b0384168383610d50565b6109816040518060a001604052806000815260200160008152602001600015158152602001600063ffffffff168152602001600081525090565b60008590036109a25760405162575ea160e01b815260040160405180910390fd5b600080805b87831015610c725760003681806109bf8d8d89610da2565b99509195509350915086905060001960ff851601610a7f578a156109fb5760405163052e551560e01b815260ff8516600482015260240161023e565b600080610a088585610df8565b915091508b8015610a2257506000816001600160801b0316115b15610a455760405163052e551560e01b815260ff8716600482015260240161023e565b806001600160801b03168a600001818151610a609190611325565b905250610a766001600160801b03831689611325565b97505050610c69565b60011960ff851601610ae3578a15610aaf5760405163052e551560e01b815260ff8516600482015260240161023e565b6000610abb8484610e5d565b509050806001600160801b031689600001818151610ad99190611325565b905250610c699050565b60021960ff851601610ba8578915610b135760405163052e551560e01b815260ff8516600482015260240161023e565b600080610b208585610e9b565b9250925050816001600160801b0316600003610b4f5760405163a169d0e160e01b815260040160405180910390fd5b806001600160801b03168a600001818151610b6a9190611325565b90525060208a0180516001600160801b0384169190610b8a908390611325565b90525060808a01805190610b9d8261139d565b815250505050610c69565b60031960ff851601610bc05760016040890152610c69565b60041960ff851601610c4b578a610bef5760405163052e551560e01b815260ff8516600482015260240161023e565b6000806000610bfe8686610f0f565b925092509250806001600160801b03168b600001818151610c1f9190611325565b905250610c356001600160801b0384168a611325565b9850610c4182896113b6565b9750505050610c69565b60405163052e551560e01b815260ff8516600482015260240161023e565b505050506109a7565b828814610c9557604051634c83bb7560e11b81526004810184905260240161023e565b83516001600160801b0386161015610cd45783516040516242670160e11b815260048101919091526001600160801b038616602482015260440161023e565b81600003610cf557604051630e5eb8f360e41b815260040160405180910390fd5b868015610d06575063ffffffff8116155b15610d24576040516336619f8360e11b815260040160405180910390fd5b8184602001818151610d369190611325565b90525063ffffffff16606084015250909695505050505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526101dc908490610f7a565b600036816001840181610db6888884610ff1565b600292909201919050610dca888884611018565b94506001820161ffff82168301610de381838b8d6113da565b979b909a50969850505061ffff160193505050565b60008060108314801590610e0d575060208314155b15610e2b57604051634796aee160e01b815260040160405180910390fd5b610e378484600061103d565b915060208314610e48576000610e54565b610e548484601061103d565b90509250929050565b60008060308314610e81576040516361d0c2c760e11b815260040160405180910390fd5b610e8d8484600061103d565b9150610e5484846010611064565b6000808060128414801590610eb1575060228414155b15610ecf57604051638b4aa70b60e01b815260040160405180910390fd5b610edb85856000610ff1565b9250610ee98585600261103d565b915060228414610efa576000610f06565b610f068585601261103d565b90509250925092565b6000808060148414801590610f25575060248414155b15610f4357604051636f5bff2160e11b815260040160405180910390fd5b610f4f8585600061103d565b9250610f5d8585601061107f565b915060248414610f6e576000610f06565b610f068585601461103d565b600080602060008451602086016000885af180610f9d576040513d6000823e3d81fd5b50506000513d91508115610fb5578060011415610fc2565b6001600160a01b0384163b155b15610feb57604051635274afe760e01b81526001600160a01b038516600482015260240161023e565b50505050565b600060028201611003818486886113da565b61100c91611404565b60f01c95945050505050565b600083838381811061102c5761102c611434565b919091013560f81c95945050505050565b60006010820161104f818486886113da565b6110589161144a565b60801c95945050505050565b600060208201611076818486886113da565b61059a91611481565b600060048201611091818486886113da565b61109a9161149f565b60e01c95945050505050565b80356001600160a01b03811681146110bd57600080fd5b919050565b6000806000606084860312156110d757600080fd5b6110e0846110a6565b92506110ee602085016110a6565b9150604084013590509250925092565b600060a0828403121561111057600080fd5b50919050565b60008083601f84011261112857600080fd5b50813567ffffffffffffffff81111561114057600080fd5b60208301915083602082850101111561115857600080fd5b9250929050565b60008060008084860361012081121561117757600080fd5b606081121561118557600080fd5b5084935061119686606087016110fe565b925061010085013567ffffffffffffffff8111156111b357600080fd5b6111bf87828801611116565b95989497509550505050565b60008060008061016085870312156111e257600080fd5b6111ec86866110fe565b93506111fb8660a087016110fe565b925061014085013567ffffffffffffffff8111156111b357600080fd5b60006020828403121561122a57600080fd5b611233826110a6565b9392505050565b60006020828403121561124c57600080fd5b813567ffffffffffffffff8116811461123357600080fd5b6001600160801b038116811461060057600080fd5b60006020828403121561128b57600080fd5b813561123381611264565b600080600080608085870312156112ac57600080fd5b8451935060208501516112be81611264565b60408601519093506112cf81611264565b60608601519092506112e081611264565b939692955090935050565b6000602082840312156112fd57600080fd5b813561ffff8116811461123357600080fd5b634e487b7160e01b600052601160045260246000fd5b808201808211156113385761133861130f565b92915050565b60006020828403121561135057600080fd5b813563ffffffff8116811461123357600080fd5b80820281158282048414176113385761133861130f565b60008261139857634e487b7160e01b600052601260045260246000fd5b500490565b6000600182016113af576113af61130f565b5060010190565b63ffffffff8181168382160190808211156113d3576113d361130f565b5092915050565b600080858511156113ea57600080fd5b838611156113f757600080fd5b5050820193919092039150565b6001600160f01b0319813581811691600285101561142c5780818660020360031b1b83161692505b505092915050565b634e487b7160e01b600052603260045260246000fd5b6fffffffffffffffffffffffffffffffff19813581811691601085101561142c5760109490940360031b84901b1690921692915050565b8035602083101561133857600019602084900360031b1b1692915050565b6001600160e01b0319813581811691600485101561142c5760049490940360031b84901b169092169291505056fea26469706673582212204c4f5a98e90d6be97596e1e9898b33b6b2d63dca8ef38882eb89a478158f7b6b64736f6c63430008160033", - "sourceMap": "717:9671:76:-:0;;;1001:128;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1041:10;;1269:95:107;;1322:31;;-1:-1:-1;;;1322:31:107;;1350:1;1322:31;;;445:51:132;418:18;;1322:31:107;;;;;;;1269:95;1373:32;1392:12;1373:18;:32::i;:::-;-1:-1:-1;1063:24:76::1;;;::::0;1118:4:::1;1097:25;::::0;717:9671;;2912:187:107;2985:16;3004:6;;-1:-1:-1;;;;;3020:17:107;;;-1:-1:-1;;;;;;3020:17:107;;;;;;3052:40;;3004:6;;;;;;;3052:40;;2985:16;3052:40;2975:124;2912:187;:::o;14:280:132:-;83:6;136:2;124:9;115:7;111:23;107:32;104:52;;;152:1;149;142:12;104:52;184:9;178:16;234:10;227:5;223:22;216:5;213:33;203:61;;260:1;257;250:12;203:61;283:5;14:280;-1:-1:-1;;;14:280:132:o;299:203::-;717:9671:76;;;;;;;;;;;;;;;;;;;;;;;", - "linkReferences": {} - }, - "deployedBytecode": { - "object": "0x60806040526004361061008a5760003560e01c8063566ef76211610059578063566ef7621461012c578063650037841461014c578063715018a61461016c5780638da5cb5b14610181578063f2fde38b146101a957600080fd5b806301e3366714610096578063337c7a9e146100b8578063434ee016146100eb57806354fd4d501461010b57600080fd5b3661009157005b600080fd5b3480156100a257600080fd5b506100b66100b13660046110c2565b6101c9565b005b3480156100c457600080fd5b506100d86100d336600461115f565b6101e1565b6040519081526020015b60405180910390f35b3480156100f757600080fd5b506100d86101063660046111cb565b6103c1565b34801561011757600080fd5b506040805160018082526020820152016100e2565b34801561013857600080fd5b506100d86101473660046111cb565b61058c565b34801561015857600080fd5b506100d861016736600461115f565b6105a3565b34801561017857600080fd5b506100b66105b1565b34801561018d57600080fd5b506000546040516001600160a01b0390911681526020016100e2565b3480156101b557600080fd5b506100b66101c4366004611218565b6105c5565b6101d1610603565b6101dc838383610630565b505050565b60006101f0602085018561123a565b67ffffffffffffffff166000036102475760405163c3baa0b760e01b815263ffffffff7f00000000000000000000000000000000000000000000000000000000000000001660048201526024015b60405180910390fd5b6000808061028560018261025e60208b018b61123a565b61026e60a08c0160808d0161123a565b61027e60808d0160608e01611279565b8b8b610653565b91945092509050600080808061029e60208d018d611218565b604051632229049360e21b815263ffffffff7f00000000000000000000000000000000000000000000000000000000000000008116600483015287166024820152604481018890526001600160a01b0391909116906388a4124c90606401608060405180830381865afa158015610319573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061033d9190611296565b929650909450925090506103878461035b60408e0160208f016112eb565b8e604001602081019061036e91906112eb565b8e60400160208101906103819190611279565b856106e5565b97506103a78784848f60400160208101906103a291906112eb565b6107ba565b6103b19089611325565b9c9b505050505050505050505050565b60006103d0602085018561123a565b67ffffffffffffffff16600003610413576103f1604086016020870161133e565b60405163c3baa0b760e01b815263ffffffff909116600482015260240161023e565b6000806104678161043361042d60408b0160208c0161133e565b50600090565b61044060208a018a61123a565b61045060a08b0160808c0161123a565b61046060808c0160608d01611279565b8a8a610653565b509092509050600080808061047f60208c018c611218565b6001600160a01b03166388a4124c61049d60408e0160208f0161133e565b6040516001600160e01b031960e084901b16815263ffffffff91909116600482015260608e0135602482015260448101889052606401608060405180830381865afa1580156104f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105149190611296565b929650909450925090506105588461053260408d0160208e016112eb565b8d608001602081019061054591906112eb565b8d60400160208101906103819190611279565b96506105738684848e60800160208101906103a291906112eb565b61057d9088611325565b9b9a5050505050505050505050565b600061059a858585856103c1565b95945050505050565b600061059a858585856101e1565b6105b9610603565b6105c3600061080f565b565b6105cd610603565b6001600160a01b0381166105f757604051631e4fbdf760e01b81526000600482015260240161023e565b6106008161080f565b50565b6000546001600160a01b031633146105c35760405163118cdaa760e01b815233600482015260240161023e565b6001600160a01b038316610648576101dc828261085f565b6101dc83838361090c565b60008060008061066686868d8d8b610947565b805160608201516080830151919650935090915061068e9067ffffffffffffffff8a16611364565b60208201516106a79067ffffffffffffffff8c16611325565b6106b19190611325565b92508060400151156106d75760646106ca846066611364565b6106d4919061137b565b92505b509750975097945050505050565b60008061ffff8616156106f857856106fa565b845b9050600061271061070f61ffff84168a611364565b610719919061137b565b90506001600160801b038416158061073857506001600160801b038516155b1561074657915061059a9050565b600088856001600160801b03167f0000000000000000000000000000000000000000000000000000000000000000886001600160801b03166107889190611364565b610792919061137b565b61079c9190611325565b90508181116107ab57816107ad565b805b9998505050505050505050565b60008415610807576127108261ffff16846001600160801b0316866001600160801b0316886107e99190611364565b6107f3919061137b565b6107fd9190611364565b61059a919061137b565b949350505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038216610886576040516306b7a93160e41b815260040160405180910390fd5b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146108d3576040519150601f19603f3d011682016040523d82523d6000602084013e6108d8565b606091505b50509050806101dc57604051631196f20d60e21b81526001600160a01b03841660048201526024810183905260440161023e565b6001600160a01b038216610933576040516306b7a93160e41b815260040160405180910390fd5b6101dc6001600160a01b0384168383610d50565b6109816040518060a001604052806000815260200160008152602001600015158152602001600063ffffffff168152602001600081525090565b60008590036109a25760405162575ea160e01b815260040160405180910390fd5b600080805b87831015610c725760003681806109bf8d8d89610da2565b99509195509350915086905060001960ff851601610a7f578a156109fb5760405163052e551560e01b815260ff8516600482015260240161023e565b600080610a088585610df8565b915091508b8015610a2257506000816001600160801b0316115b15610a455760405163052e551560e01b815260ff8716600482015260240161023e565b806001600160801b03168a600001818151610a609190611325565b905250610a766001600160801b03831689611325565b97505050610c69565b60011960ff851601610ae3578a15610aaf5760405163052e551560e01b815260ff8516600482015260240161023e565b6000610abb8484610e5d565b509050806001600160801b031689600001818151610ad99190611325565b905250610c699050565b60021960ff851601610ba8578915610b135760405163052e551560e01b815260ff8516600482015260240161023e565b600080610b208585610e9b565b9250925050816001600160801b0316600003610b4f5760405163a169d0e160e01b815260040160405180910390fd5b806001600160801b03168a600001818151610b6a9190611325565b90525060208a0180516001600160801b0384169190610b8a908390611325565b90525060808a01805190610b9d8261139d565b815250505050610c69565b60031960ff851601610bc05760016040890152610c69565b60041960ff851601610c4b578a610bef5760405163052e551560e01b815260ff8516600482015260240161023e565b6000806000610bfe8686610f0f565b925092509250806001600160801b03168b600001818151610c1f9190611325565b905250610c356001600160801b0384168a611325565b9850610c4182896113b6565b9750505050610c69565b60405163052e551560e01b815260ff8516600482015260240161023e565b505050506109a7565b828814610c9557604051634c83bb7560e11b81526004810184905260240161023e565b83516001600160801b0386161015610cd45783516040516242670160e11b815260048101919091526001600160801b038616602482015260440161023e565b81600003610cf557604051630e5eb8f360e41b815260040160405180910390fd5b868015610d06575063ffffffff8116155b15610d24576040516336619f8360e11b815260040160405180910390fd5b8184602001818151610d369190611325565b90525063ffffffff16606084015250909695505050505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526101dc908490610f7a565b600036816001840181610db6888884610ff1565b600292909201919050610dca888884611018565b94506001820161ffff82168301610de381838b8d6113da565b979b909a50969850505061ffff160193505050565b60008060108314801590610e0d575060208314155b15610e2b57604051634796aee160e01b815260040160405180910390fd5b610e378484600061103d565b915060208314610e48576000610e54565b610e548484601061103d565b90509250929050565b60008060308314610e81576040516361d0c2c760e11b815260040160405180910390fd5b610e8d8484600061103d565b9150610e5484846010611064565b6000808060128414801590610eb1575060228414155b15610ecf57604051638b4aa70b60e01b815260040160405180910390fd5b610edb85856000610ff1565b9250610ee98585600261103d565b915060228414610efa576000610f06565b610f068585601261103d565b90509250925092565b6000808060148414801590610f25575060248414155b15610f4357604051636f5bff2160e11b815260040160405180910390fd5b610f4f8585600061103d565b9250610f5d8585601061107f565b915060248414610f6e576000610f06565b610f068585601461103d565b600080602060008451602086016000885af180610f9d576040513d6000823e3d81fd5b50506000513d91508115610fb5578060011415610fc2565b6001600160a01b0384163b155b15610feb57604051635274afe760e01b81526001600160a01b038516600482015260240161023e565b50505050565b600060028201611003818486886113da565b61100c91611404565b60f01c95945050505050565b600083838381811061102c5761102c611434565b919091013560f81c95945050505050565b60006010820161104f818486886113da565b6110589161144a565b60801c95945050505050565b600060208201611076818486886113da565b61059a91611481565b600060048201611091818486886113da565b61109a9161149f565b60e01c95945050505050565b80356001600160a01b03811681146110bd57600080fd5b919050565b6000806000606084860312156110d757600080fd5b6110e0846110a6565b92506110ee602085016110a6565b9150604084013590509250925092565b600060a0828403121561111057600080fd5b50919050565b60008083601f84011261112857600080fd5b50813567ffffffffffffffff81111561114057600080fd5b60208301915083602082850101111561115857600080fd5b9250929050565b60008060008084860361012081121561117757600080fd5b606081121561118557600080fd5b5084935061119686606087016110fe565b925061010085013567ffffffffffffffff8111156111b357600080fd5b6111bf87828801611116565b95989497509550505050565b60008060008061016085870312156111e257600080fd5b6111ec86866110fe565b93506111fb8660a087016110fe565b925061014085013567ffffffffffffffff8111156111b357600080fd5b60006020828403121561122a57600080fd5b611233826110a6565b9392505050565b60006020828403121561124c57600080fd5b813567ffffffffffffffff8116811461123357600080fd5b6001600160801b038116811461060057600080fd5b60006020828403121561128b57600080fd5b813561123381611264565b600080600080608085870312156112ac57600080fd5b8451935060208501516112be81611264565b60408601519093506112cf81611264565b60608601519092506112e081611264565b939692955090935050565b6000602082840312156112fd57600080fd5b813561ffff8116811461123357600080fd5b634e487b7160e01b600052601160045260246000fd5b808201808211156113385761133861130f565b92915050565b60006020828403121561135057600080fd5b813563ffffffff8116811461123357600080fd5b80820281158282048414176113385761133861130f565b60008261139857634e487b7160e01b600052601260045260246000fd5b500490565b6000600182016113af576113af61130f565b5060010190565b63ffffffff8181168382160190808211156113d3576113d361130f565b5092915050565b600080858511156113ea57600080fd5b838611156113f757600080fd5b5050820193919092039150565b6001600160f01b0319813581811691600285101561142c5780818660020360031b1b83161692505b505092915050565b634e487b7160e01b600052603260045260246000fd5b6fffffffffffffffffffffffffffffffff19813581811691601085101561142c5760109490940360031b84901b1690921692915050565b8035602083101561133857600019602084900360031b1b1692915050565b6001600160e01b0319813581811691600485101561142c5760049490940360031b84901b169092169291505056fea26469706673582212204c4f5a98e90d6be97596e1e9898b33b6b2d63dca8ef38882eb89a478158f7b6b64736f6c63430008160033", - "sourceMap": "717:9671:76:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1218:203;;;;;;;;;;-1:-1:-1;1218:203:76;;;;;:::i;:::-;;:::i;:::-;;3323:1237;;;;;;;;;;-1:-1:-1;3323:1237:76;;;;;:::i;:::-;;:::i;:::-;;;1883:25:132;;;1871:2;1856:18;3323:1237:76;;;;;;;;2090:1227;;;;;;;;;;-1:-1:-1;2090:1227:76;;;;;:::i;:::-;;:::i;10198:99::-;;;;;;;;;;-1:-1:-1;10198:99:76;;;10285:1;2764:50:132;;;2845:2;2830:18;;2823:45;2737:18;10198:99:76;2596:278:132;1509:242:76;;;;;;;;;;-1:-1:-1;1509:242:76;;;;;:::i;:::-;;:::i;1757:249::-;;;;;;;;;;-1:-1:-1;1757:249:76;;;;;:::i;:::-;;:::i;2293:101:107:-;;;;;;;;;;;;;:::i;1638:85::-;;;;;;;;;;-1:-1:-1;1684:7:107;1710:6;1638:85;;-1:-1:-1;;;;;1710:6:107;;;3025:51:132;;3013:2;2998:18;1638:85:107;2879:203:132;2543:215:107;;;;;;;;;;-1:-1:-1;2543:215:107;;;;;:::i;:::-;;:::i;1218:203:76:-;1531:13:107;:11;:13::i;:::-;1370:44:76::1;1393:6;1401:3;1406:7;1370:22;:44::i;:::-;1218:203:::0;;;:::o;3323:1237::-;3491:11;3518:27;;;;:10;:27;:::i;:::-;:32;;3549:1;3518:32;3514:81;;3559:36;;-1:-1:-1;;;3559:36:76;;3741:10:132;3584::76;3729:23:132;3559:36:76;;;3711:42:132;3684:18;;3559:36:76;;;;;;;;3514:81;3607:18;;;3668:227;3704:4;3607:18;3761:27;;;;:10;:27;:::i;:::-;3802;;;;;;;;:::i;:::-;3843:20;;;;;;;;:::i;:::-;3877:8;;3668:22;:227::i;:::-;3606:289;;-1:-1:-1;3606:289:76;-1:-1:-1;3606:289:76;-1:-1:-1;3920:19:76;;;;4083:17;;;;:7;:17;:::i;:::-;4063:91;;-1:-1:-1;;;4063:91:76;;;4119:10;4413:15:132;;4063:91:76;;;4395:34:132;4465:15;;4445:18;;;4438:43;4497:18;;;4490:34;;;-1:-1:-1;;;;;4063:55:76;;;;;;;4339:18:132;;4063:91:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3906:248;;-1:-1:-1;3906:248:76;;-1:-1:-1;3906:248:76;-1:-1:-1;3906:248:76;-1:-1:-1;4171:200:76;3906:248;4228:24;;;;;;;;:::i;:::-;4266:7;:28;;;;;;;;;;:::i;:::-;4308:10;:25;;;;;;;;;;:::i;:::-;4347:14;4171:18;:200::i;:::-;4165:206;;4388:165;4432:10;4456;4480:21;4515:7;:28;;;;;;;;;;:::i;:::-;4388:30;:165::i;:::-;4381:172;;;;:::i;:::-;;3323:1237;-1:-1:-1;;;;;;;;;;;;3323:1237:76:o;2090:1227::-;2251:11;2278:27;;;;:10;:27;:::i;:::-;:32;;2309:1;2278:32;2274:85;;2344:14;;;;;;;;:::i;:::-;2319:40;;-1:-1:-1;;;2319:40:76;;3741:10:132;3729:23;;;2319:40:76;;;3711:42:132;3684:18;;2319:40:76;3567:192:132;2274:85:76;2371:18;;2413:227;2371:18;2468:24;2477:14;;;;;;;;:::i;:::-;-1:-1:-1;10006:4:76;;9940:101;2468:24;2506:27;;;;:10;:27;:::i;:::-;2547;;;;;;;;:::i;:::-;2588:20;;;;;;;;:::i;:::-;2622:8;;2413:22;:227::i;:::-;-1:-1:-1;2370:270:76;;-1:-1:-1;2370:270:76;-1:-1:-1;2665:19:76;;;;2828:17;;;;:7;:17;:::i;:::-;-1:-1:-1;;;;;2808:55:76;;2864:14;;;;;;;;:::i;:::-;2808:103;;-1:-1:-1;;;;;;2808:103:76;;;;;;;;6159:23:132;;;;2808:103:76;;;6141:42:132;2880:20:76;;;;6199:18:132;;;6192:34;6242:18;;;6235:34;;;6114:18;;2808:103:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2651:260;;-1:-1:-1;2651:260:76;;-1:-1:-1;2651:260:76;-1:-1:-1;2651:260:76;-1:-1:-1;2928:200:76;2651:260;2985:24;;;;;;;;:::i;:::-;3023:7;:28;;;;;;;;;;:::i;:::-;3065:10;:25;;;;;;;;;;:::i;2928:200::-;2922:206;;3145:165;3189:10;3213;3237:21;3272:7;:28;;;;;;;;;;:::i;3145:165::-;3138:172;;;;:::i;:::-;;2090:1227;-1:-1:-1;;;;;;;;;;;2090:1227:76:o;1509:242::-;1678:11;1707:37;1714:7;1723:10;1735:8;;1707:6;:37::i;:::-;1701:43;1509:242;-1:-1:-1;;;;;1509:242:76:o;1757:249::-;1933:11;1962:37;1969:7;1978:10;1990:8;;1962:6;:37::i;2293:101:107:-;1531:13;:11;:13::i;:::-;2357:30:::1;2384:1;2357:18;:30::i;:::-;2293:101::o:0;2543:215::-;1531:13;:11;:13::i;:::-;-1:-1:-1;;;;;2627:22:107;::::1;2623:91;;2672:31;::::0;-1:-1:-1;;;2672:31:107;;2700:1:::1;2672:31;::::0;::::1;3025:51:132::0;2998:18;;2672:31:107::1;2879:203:132::0;2623:91:107::1;2723:28;2742:8;2723:18;:28::i;:::-;2543:215:::0;:::o;1796:162::-;1684:7;1710:6;-1:-1:-1;;;;;1710:6:107;735:10:117;1855:23:107;1851:101;;1901:40;;-1:-1:-1;;;1901:40:107;;735:10:117;1901:40:107;;;3025:51:132;2998:18;;1901:40:107;2879:203:132;896:222:44;-1:-1:-1;;;;;987:22:44;;983:129;;1025:19;1032:3;1037:6;1025;:19::i;983:129::-;1075:26;1081:6;1089:3;1094:6;1075:5;:26::i;4712:1001:76:-;4945:18;4965:16;4983:19;5014:36;5053:60;5075:8;;5085:7;5094:6;5102:10;5053:21;:60::i;:::-;5136:21;;5182:23;;;;5592;;;;5136:21;;-1:-1:-1;5182:23:76;-1:-1:-1;5014:99:76;;-1:-1:-1;5572:43:76;;;;;;:::i;:::-;5550:19;;;;5530:39;;;;;;:::i;:::-;:85;;;;:::i;:::-;5519:96;;5629:10;:18;;;5625:82;;;5693:3;5675:14;:8;5686:3;5675:14;:::i;:::-;5674:22;;;;:::i;:::-;5663:33;;5625:82;5004:709;4712:1001;;;;;;;;;;;:::o;8975:619::-;9164:7;;9206:9;;;;:30;;9232:4;9206:30;;;9218:11;9206:30;9183:53;-1:-1:-1;9247:25:76;9300:5;9276:20;;;;:4;:20;:::i;:::-;9275:30;;;;:::i;:::-;9247:58;-1:-1:-1;;;;;;9320:20:76;;;;:39;;-1:-1:-1;;;;;;9344:15:76;;;9320:39;9316:94;;;9382:17;-1:-1:-1;9375:24:76;;-1:-1:-1;9375:24:76;9316:94;9419:21;9497:4;9479:15;-1:-1:-1;;;;;9443:51:76;9457:18;9444:10;-1:-1:-1;;;;;9444:31:76;;;;;:::i;:::-;9443:51;;;;:::i;:::-;:58;;;;:::i;:::-;9419:82;;9534:17;9518:13;:33;:69;;9570:17;9518:69;;;9554:13;9518:69;9511:76;8975:619;-1:-1:-1;;;;;;;;;8975:619:76:o;9637:297::-;9806:11;9833:10;;9829:99;;9912:5;9897:11;9866:42;;9887:6;-1:-1:-1;;;;;9867:26:76;9877:6;-1:-1:-1;;;;;9868:15:76;:6;:15;;;;:::i;:::-;9867:26;;;;:::i;:::-;9866:42;;;;:::i;:::-;9865:52;;;;:::i;9829:99::-;9637:297;;;;;;:::o;2912:187:107:-;2985:16;3004:6;;-1:-1:-1;;;;;3020:17:107;;;-1:-1:-1;;;;;;3020:17:107;;;;;;3052:40;;3004:6;;;;;;;3052:40;;2985:16;3052:40;2975:124;2912:187;:::o;438:252:44:-;-1:-1:-1;;;;;506:19:44;;502:58;;534:26;;-1:-1:-1;;;534:26:44;;;;;;;;;;;502:58;571:12;589:3;-1:-1:-1;;;;;589:8:44;606:6;589:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;570:48;;;633:7;628:55;;649:34;;-1:-1:-1;;;649:34:44;;-1:-1:-1;;;;;7077:32:132;;649:34:44;;;7059:51:132;7126:18;;;7119:34;;;7032:18;;649:34:44;6885:274:132;696:194:44;-1:-1:-1;;;;;779:19:44;;775:58;;807:26;;-1:-1:-1;;;807:26:44;;;;;;;;;;;775:58;843:40;-1:-1:-1;;;;;843:27:44;;871:3;876:6;843:27;:40::i;5893:3076:76:-;6057:33;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6057:33:76;6125:1;6106:20;;;6102:78;;6149:20;;-1:-1:-1;;;6149:20:76;;;;;;;;;;;6102:78;6190:14;6218:20;6248:19;6277:2234;6284:24;;;6277:2234;;;6325:16;6343:21;6325:16;;6387:35;:8;;6415:6;6387:27;:35::i;:::-;6324:98;-1:-1:-1;6324:98:76;;-1:-1:-1;6324:98:76;-1:-1:-1;6324:98:76;-1:-1:-1;6324:98:76;;-1:-1:-1;;;6473:51:76;;;;6469:2032;;6608:7;6604:62;;;6624:42;;-1:-1:-1;;;6624:42:76;;7336:4:132;7324:17;;6624:42:76;;;7306:36:132;7279:18;;6624:42:76;7164:184:132;6604:62:76;6685:11;6698:13;6715:45;6753:6;;6715:37;:45::i;:::-;6684:76;;;;6852:6;:19;;;;;6870:1;6862:5;-1:-1:-1;;;;;6862:9:76;;6852:19;6848:74;;;6880:42;;-1:-1:-1;;;6880:42:76;;7336:4:132;7324:17;;6880:42:76;;;7306:36:132;7279:18;;6880:42:76;7164:184:132;6848:74:76;6963:5;-1:-1:-1;;;;;6941:27:76;:7;:18;;:27;;;;;;;:::i;:::-;;;-1:-1:-1;6986:19:76;-1:-1:-1;;;;;6986:19:76;;;;:::i;:::-;;;6526:494;;6469:2032;;;-1:-1:-1;;7030:53:76;;;;7026:1475;;7168:7;7164:62;;;7184:42;;-1:-1:-1;;;7184:42:76;;7336:4:132;7324:17;;7184:42:76;;;7306:36:132;7279:18;;7184:42:76;7164:184:132;:62:76;7246:24;7276:46;7315:6;;7276:38;:46::i;:::-;7245:77;;;7362:16;-1:-1:-1;;;;;7340:38:76;:7;:18;;:38;;;;;;;:::i;:::-;;;-1:-1:-1;7026:1475:76;;-1:-1:-1;7026:1475:76;;-1:-1:-1;;7403:51:76;;;;7399:1102;;7536:6;7532:61;;;7551:42;;-1:-1:-1;;;7551:42:76;;7336:4:132;7324:17;;7551:42:76;;;7306:36:132;7279:18;;7551:42:76;7164:184:132;7532:61:76;7615:11;7628:13;7645:45;7683:6;;7645:37;:45::i;:::-;7612:78;;;;;7712:3;-1:-1:-1;;;;;7712:8:76;7719:1;7712:8;7708:56;;7729:35;;-1:-1:-1;;;7729:35:76;;;;;;;;;;;7708:56;7805:5;-1:-1:-1;;;;;7783:27:76;:7;:18;;:27;;;;;;;:::i;:::-;;;-1:-1:-1;7828:16:76;;;:23;;-1:-1:-1;;;;;7828:23:76;;;:16;:23;;;;;:::i;:::-;;;-1:-1:-1;7869:20:76;;;:22;;;;;;:::i;:::-;;;;;7456:450;;7399:1102;;;-1:-1:-1;;7916:59:76;;;;7912:589;;8013:4;7995:15;;;:22;7912:589;;;-1:-1:-1;;8042:48:76;;;;8038:463;;8115:7;8110:63;;8131:42;;-1:-1:-1;;;8131:42:76;;7336:4:132;7324:17;;8131:42:76;;;7306:36:132;7279:18;;8131:42:76;7164:184:132;8110:63:76;8193:11;8206;8219:13;8236:42;8271:6;;8236:34;:42::i;:::-;8192:86;;;;;;8318:5;-1:-1:-1;;;;;8296:27:76;:7;:18;;:27;;;;;;;:::i;:::-;;;-1:-1:-1;8341:19:76;-1:-1:-1;;;;;8341:19:76;;;;:::i;:::-;;-1:-1:-1;8378:20:76;8394:4;8378:20;;:::i;:::-;;;8092:321;;;8038:463;;;8444:42;;-1:-1:-1;;;8444:42:76;;7336:4:132;7324:17;;8444:42:76;;;7306:36:132;7279:18;;8444:42:76;7164:184:132;8038:463:76;6310:2201;;;;6277:2234;;;8524:25;;;8520:77;;8558:39;;-1:-1:-1;;;8558:39:76;;;;;1883:25:132;;;1856:18;;8558:39:76;1737:177:132;8520:77:76;8611:18;;-1:-1:-1;;;;;8611:31:76;;-1:-1:-1;8607:107:76;;;8683:18;;8651:63;;-1:-1:-1;;;8651:63:76;;;;;7844:25:132;;;;-1:-1:-1;;;;;7905:47:132;;7885:18;;;7878:75;7817:18;;8651:63:76;7670:289:132;8607:107:76;8728:12;8744:1;8728:17;8724:65;;8754:35;;-1:-1:-1;;;8754:35:76;;;;;;;;;;;8724:65;8803:7;:28;;;;-1:-1:-1;8814:17:76;;;;8803:28;8799:76;;;8840:35;;-1:-1:-1;;;8840:35:76;;;;;;;;;;;8799:76;8905:12;8885:7;:16;;:32;;;;;;;:::i;:::-;;;-1:-1:-1;8927:35:76;;:20;;;:35;-1:-1:-1;8927:7:76;;5893:3076;-1:-1:-1;;;;;;5893:3076:76:o;1271:160:115:-;1380:43;;;-1:-1:-1;;;;;7077:32:132;;1380:43:115;;;7059:51:132;7126:18;;;;7119:34;;;1380:43:115;;;;;;;;;;7032:18:132;;;;1380:43:115;;;;;;;;-1:-1:-1;;;;;1380:43:115;-1:-1:-1;;;1380:43:115;;;1353:71;;1373:5;;1353:19;:71::i;1357:742:11:-;1472:16;1490:21;1472:16;1612:1;1602:11;;1472:16;1674:22;:8;;1602:11;1674:14;:22::i;:::-;1720:1;1710:11;;;;;1660:36;-1:-1:-1;1781:21:11;:8;;1710:11;1781:13;:21::i;:::-;1768:34;-1:-1:-1;1932:1:11;1923:10;;1987:13;;;;;2023:31;1987:13;1923:10;2023:8;;:31;:::i;:::-;1357:742;;2014:40;;-1:-1:-1;2014:40:11;;-1:-1:-1;;;2068:14:11;;;;-1:-1:-1;;;1357:742:11:o;2105:309::-;2183:11;;2243:2;2225:20;;;;;:44;;-1:-1:-1;2267:2:11;2249:20;;;2225:44;2221:90;;;2278:33;;-1:-1:-1;;;2278:33:11;;;;;;;;;;;2221:90;2327:17;:7;;2342:1;2327:14;:17::i;:::-;2321:23;-1:-1:-1;2380:2:11;2362:20;;:45;;2406:1;2362:45;;;2385:18;:7;;2400:2;2385:14;:18::i;:::-;2354:53;;2105:309;;;;;:::o;2420:271::-;2499:14;;2565:2;2547:20;;2543:67;;2576:34;;-1:-1:-1;;;2576:34:11;;;;;;;;;;;2543:67;2629:17;:7;;2644:1;2629:14;:17::i;:::-;2620:26;-1:-1:-1;2667:17:11;:7;;2681:2;2667:13;:17::i;2697:371::-;2789:12;;;2863:2;2845:20;;;;;:44;;-1:-1:-1;2887:2:11;2869:20;;;2845:44;2841:90;;;2898:33;;-1:-1:-1;;;2898:33:11;;;;;;;;;;;2841:90;2949:16;:7;;2963:1;2949:13;:16::i;:::-;2941:24;-1:-1:-1;2981:17:11;:7;;2996:1;2981:14;:17::i;:::-;2975:23;-1:-1:-1;3034:2:11;3016:20;;:45;;3060:1;3016:45;;;3039:18;:7;;3054:2;3039:14;:18::i;:::-;3008:53;;2697:371;;;;;:::o;3074:380::-;3163:11;;;3244:2;3226:20;;;;;:44;;-1:-1:-1;3268:2:11;3250:20;;;3226:44;3222:87;;;3279:30;;-1:-1:-1;;;3279:30:11;;;;;;;;;;;3222:87;3325:17;:7;;3340:1;3325:14;:17::i;:::-;3319:23;-1:-1:-1;3367:17:11;:7;;3381:2;3367:13;:17::i;:::-;3352:32;-1:-1:-1;3420:2:11;3402:20;;:45;;3446:1;3402:45;;;3425:18;:7;;3440:2;3425:14;:18::i;7738:720:115:-;7818:18;7846:19;7984:4;7981:1;7974:4;7968:11;7961:4;7955;7951:15;7948:1;7941:5;7934;7929:60;8041:7;8031:176;;8085:4;8079:11;8130:16;8127:1;8122:3;8107:40;8176:16;8171:3;8164:29;8031:176;-1:-1:-1;;8284:1:115;8278:8;8234:16;;-1:-1:-1;8310:15:115;;:68;;8362:11;8377:1;8362:16;;8310:68;;;-1:-1:-1;;;;;8328:26:115;;;:31;8310:68;8306:146;;;8401:40;;-1:-1:-1;;;8401:40:115;;-1:-1:-1;;;;;3043:32:132;;8401:40:115;;;3025:51:132;2998:18;;8401:40:115;2879:203:132;8306:146:115;7808:650;;7738:720;;:::o;229:215:41:-;306:6;371:1;362:10;;407:18;362:10;:6;407;;:18;:::i;:::-;400:26;;;:::i;:::-;393:34;;;229:215;-1:-1:-1;;;;;229:215:41:o;95:128::-;171:5;201:6;;208;201:14;;;;;;;:::i;:::-;;;;;;;;;95:128;-1:-1:-1;;;;;95:128:41:o;892:220::-;970:7;1036:2;1027:11;;1075:18;1027:11;:6;1075;;:18;:::i;:::-;1067:27;;;:::i;:::-;1059:36;;;892:220;-1:-1:-1;;;;;892:220:41:o;1570:210::-;1647:7;1713:2;1704:11;;1744:18;1704:11;:6;1744;;:18;:::i;:::-;1736:27;;;:::i;450:215::-;527:6;592:1;583:10;;628:18;583:10;:6;628;;:18;:::i;:::-;621:26;;;:::i;:::-;614:34;;;450:215;-1:-1:-1;;;;;450:215:41:o;14:173:132:-;82:20;;-1:-1:-1;;;;;131:31:132;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:328::-;269:6;277;285;338:2;326:9;317:7;313:23;309:32;306:52;;;354:1;351;344:12;306:52;377:29;396:9;377:29;:::i;:::-;367:39;;425:38;459:2;448:9;444:18;425:38;:::i;:::-;415:48;;510:2;499:9;495:18;482:32;472:42;;192:328;;;;;:::o;525:158::-;587:5;632:3;623:6;618:3;614:16;610:26;607:46;;;649:1;646;639:12;607:46;-1:-1:-1;671:6:132;525:158;-1:-1:-1;525:158:132:o;688:347::-;739:8;749:6;803:3;796:4;788:6;784:17;780:27;770:55;;821:1;818;811:12;770:55;-1:-1:-1;844:20:132;;887:18;876:30;;873:50;;;919:1;916;909:12;873:50;956:4;948:6;944:17;932:29;;1008:3;1001:4;992:6;984;980:19;976:30;973:39;970:59;;;1025:1;1022;1015:12;970:59;688:347;;;;;:::o;1040:692::-;1193:6;1201;1209;1217;1261:9;1252:7;1248:23;1291:3;1287:2;1283:12;1280:32;;;1308:1;1305;1298:12;1280:32;1332:2;1328;1324:11;1321:31;;;1348:1;1345;1338:12;1321:31;;1371:9;1361:19;;1399:65;1456:7;1451:2;1440:9;1436:18;1399:65;:::i;:::-;1389:75;;1515:3;1504:9;1500:19;1487:33;1543:18;1535:6;1532:30;1529:50;;;1575:1;1572;1565:12;1529:50;1614:58;1664:7;1655:6;1644:9;1640:22;1614:58;:::i;:::-;1040:692;;;;-1:-1:-1;1691:8:132;-1:-1:-1;;;;1040:692:132:o;1919:672::-;2065:6;2073;2081;2089;2142:3;2130:9;2121:7;2117:23;2113:33;2110:53;;;2159:1;2156;2149:12;2110:53;2182:56;2230:7;2219:9;2182:56;:::i;:::-;2172:66;;2257;2315:7;2309:3;2298:9;2294:19;2257:66;:::i;:::-;2247:76;;2374:3;2363:9;2359:19;2346:33;2402:18;2394:6;2391:30;2388:50;;;2434:1;2431;2424:12;3087:186;3146:6;3199:2;3187:9;3178:7;3174:23;3170:32;3167:52;;;3215:1;3212;3205:12;3167:52;3238:29;3257:9;3238:29;:::i;:::-;3228:39;3087:186;-1:-1:-1;;;3087:186:132:o;3278:284::-;3336:6;3389:2;3377:9;3368:7;3364:23;3360:32;3357:52;;;3405:1;3402;3395:12;3357:52;3444:9;3431:23;3494:18;3487:5;3483:30;3476:5;3473:41;3463:69;;3528:1;3525;3518:12;3764:146;-1:-1:-1;;;;;3843:5:132;3839:46;3832:5;3829:57;3819:85;;3900:1;3897;3890:12;3915:247;3974:6;4027:2;4015:9;4006:7;4002:23;3998:32;3995:52;;;4043:1;4040;4033:12;3995:52;4082:9;4069:23;4101:31;4126:5;4101:31;:::i;4535:581::-;4632:6;4640;4648;4656;4709:3;4697:9;4688:7;4684:23;4680:33;4677:53;;;4726:1;4723;4716:12;4677:53;4755:9;4749:16;4739:26;;4808:2;4797:9;4793:18;4787:25;4821:31;4846:5;4821:31;:::i;:::-;4921:2;4906:18;;4900:25;4871:5;;-1:-1:-1;4934:33:132;4900:25;4934:33;:::i;:::-;5038:2;5023:18;;5017:25;4986:7;;-1:-1:-1;5051:33:132;5017:25;5051:33;:::i;:::-;4535:581;;;;-1:-1:-1;4535:581:132;;-1:-1:-1;;4535:581:132:o;5121:272::-;5179:6;5232:2;5220:9;5211:7;5207:23;5203:32;5200:52;;;5248:1;5245;5238:12;5200:52;5287:9;5274:23;5337:6;5330:5;5326:18;5319:5;5316:29;5306:57;;5359:1;5356;5349:12;5398:127;5459:10;5454:3;5450:20;5447:1;5440:31;5490:4;5487:1;5480:15;5514:4;5511:1;5504:15;5530:125;5595:9;;;5616:10;;;5613:36;;;5629:18;;:::i;:::-;5530:125;;;;:::o;5660:276::-;5718:6;5771:2;5759:9;5750:7;5746:23;5742:32;5739:52;;;5787:1;5784;5777:12;5739:52;5826:9;5813:23;5876:10;5869:5;5865:22;5858:5;5855:33;5845:61;;5902:1;5899;5892:12;6280:168;6353:9;;;6384;;6401:15;;;6395:22;;6381:37;6371:71;;6422:18;;:::i;6453:217::-;6493:1;6519;6509:132;;6563:10;6558:3;6554:20;6551:1;6544:31;6598:4;6595:1;6588:15;6626:4;6623:1;6616:15;6509:132;-1:-1:-1;6655:9:132;;6453:217::o;7353:135::-;7392:3;7413:17;;;7410:43;;7433:18;;:::i;:::-;-1:-1:-1;7480:1:132;7469:13;;7353:135::o;7493:172::-;7560:10;7590;;;7602;;;7586:27;;7625:11;;;7622:37;;;7639:18;;:::i;:::-;7622:37;7493:172;;;;:::o;7964:331::-;8069:9;8080;8122:8;8110:10;8107:24;8104:44;;;8144:1;8141;8134:12;8104:44;8173:6;8163:8;8160:20;8157:40;;;8193:1;8190;8183:12;8157:40;-1:-1:-1;;8219:23:132;;;8264:25;;;;;-1:-1:-1;7964:331:132:o;8300:318::-;-1:-1:-1;;;;;;8420:19:132;;8491:11;;;;8522:1;8514:10;;8511:101;;;8599:2;8593;8586:3;8583:1;8579:11;8576:1;8572:19;8568:28;8564:2;8560:37;8556:46;8547:55;;8511:101;;;8300:318;;;;:::o;8623:127::-;8684:10;8679:3;8675:20;8672:1;8665:31;8715:4;8712:1;8705:15;8739:4;8736:1;8729:15;8755:345;-1:-1:-1;;8876:19:132;;8971:11;;;;9002:2;8994:11;;8991:103;;;9064:2;9060:12;;;;9057:1;9053:20;9049:29;;;9041:38;9037:47;;;;8755:345;-1:-1:-1;;8755:345:132:o;9105:255::-;9225:19;;9264:2;9256:11;;9253:101;;;-1:-1:-1;;9325:2:132;9321:12;;;9318:1;9314:20;9310:33;9299:45;9105:255;;;;:::o;9365:323::-;-1:-1:-1;;;;;;9485:19:132;;9561:11;;;;9592:1;9584:10;;9581:101;;;9653:1;9649:11;;;;9646:1;9642:19;9638:28;;;9630:37;9626:46;;;;9365:323;-1:-1:-1;;9365:323:132:o", - "linkReferences": {}, - "immutableReferences": { - "19166": [{ "start": 1877, "length": 32 }], - "19168": [ - { "start": 533, "length": 32 }, - { "start": 690, "length": 32 } - ] - } - }, - "methodIdentifiers": { - "getFee((address,address,uint16),(uint64,uint16,uint128,uint128,uint64),bytes)": "337c7a9e", - "getFee((address,uint32,address,uint256,uint16),(uint64,uint16,uint128,uint128,uint64),bytes)": "434ee016", - "getFeeOnSend((address,address,uint16),(uint64,uint16,uint128,uint128,uint64),bytes)": "65003784", - "getFeeOnSend((address,uint32,address,uint256,uint16),(uint64,uint16,uint128,uint128,uint64),bytes)": "566ef762", - "owner()": "8da5cb5b", - "renounceOwnership()": "715018a6", - "transferOwnership(address)": "f2fde38b", - "version()": "54fd4d50", - "withdrawToken(address,address,uint256)": "01e33667" - }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_localEidV2\",\"type\":\"uint32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"}],\"name\":\"Executor_EidNotSupported\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"cursor\",\"type\":\"uint256\"}],\"name\":\"Executor_InvalidExecutorOptions\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Executor_InvalidLzComposeOption\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Executor_InvalidLzReadOption\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Executor_InvalidLzReceiveOption\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Executor_InvalidNativeDropOption\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"cap\",\"type\":\"uint256\"}],\"name\":\"Executor_NativeAmountExceedsCap\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Executor_NoOptions\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"optionType\",\"type\":\"uint8\"}],\"name\":\"Executor_UnsupportedOptionType\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Executor_ZeroCalldataSizeProvided\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Executor_ZeroLzComposeGasProvided\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Executor_ZeroLzReceiveGasProvided\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"Transfer_NativeFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Transfer_ToAddressIsZero\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"priceFeed\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"defaultMultiplierBps\",\"type\":\"uint16\"}],\"internalType\":\"struct IExecutorFeeLib.FeeParamsForRead\",\"name\":\"_params\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"lzReceiveBaseGas\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"multiplierBps\",\"type\":\"uint16\"},{\"internalType\":\"uint128\",\"name\":\"floorMarginUSD\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"nativeCap\",\"type\":\"uint128\"},{\"internalType\":\"uint64\",\"name\":\"lzComposeBaseGas\",\"type\":\"uint64\"}],\"internalType\":\"struct IExecutor.DstConfig\",\"name\":\"_dstConfig\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"_options\",\"type\":\"bytes\"}],\"name\":\"getFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"priceFeed\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"calldataSize\",\"type\":\"uint256\"},{\"internalType\":\"uint16\",\"name\":\"defaultMultiplierBps\",\"type\":\"uint16\"}],\"internalType\":\"struct IExecutorFeeLib.FeeParams\",\"name\":\"_params\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"lzReceiveBaseGas\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"multiplierBps\",\"type\":\"uint16\"},{\"internalType\":\"uint128\",\"name\":\"floorMarginUSD\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"nativeCap\",\"type\":\"uint128\"},{\"internalType\":\"uint64\",\"name\":\"lzComposeBaseGas\",\"type\":\"uint64\"}],\"internalType\":\"struct IExecutor.DstConfig\",\"name\":\"_dstConfig\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"_options\",\"type\":\"bytes\"}],\"name\":\"getFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"priceFeed\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"calldataSize\",\"type\":\"uint256\"},{\"internalType\":\"uint16\",\"name\":\"defaultMultiplierBps\",\"type\":\"uint16\"}],\"internalType\":\"struct IExecutorFeeLib.FeeParams\",\"name\":\"_params\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"lzReceiveBaseGas\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"multiplierBps\",\"type\":\"uint16\"},{\"internalType\":\"uint128\",\"name\":\"floorMarginUSD\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"nativeCap\",\"type\":\"uint128\"},{\"internalType\":\"uint64\",\"name\":\"lzComposeBaseGas\",\"type\":\"uint64\"}],\"internalType\":\"struct IExecutor.DstConfig\",\"name\":\"_dstConfig\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"_options\",\"type\":\"bytes\"}],\"name\":\"getFeeOnSend\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"priceFeed\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"defaultMultiplierBps\",\"type\":\"uint16\"}],\"internalType\":\"struct IExecutorFeeLib.FeeParamsForRead\",\"name\":\"_params\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"lzReceiveBaseGas\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"multiplierBps\",\"type\":\"uint16\"},{\"internalType\":\"uint128\",\"name\":\"floorMarginUSD\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"nativeCap\",\"type\":\"uint128\"},{\"internalType\":\"uint64\",\"name\":\"lzComposeBaseGas\",\"type\":\"uint64\"}],\"internalType\":\"struct IExecutor.DstConfig\",\"name\":\"_dstConfig\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"_options\",\"type\":\"bytes\"}],\"name\":\"getFeeOnSend\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"major\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"minor\",\"type\":\"uint8\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"withdrawToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"errors\":{\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}],\"SafeERC20FailedOperation(address)\":[{\"details\":\"An operation with an ERC-20 token failed.\"}]},\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ExecutorFeeLibMock.sol\":\"ExecutorFeeLibMock\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IExecutor.sol\":{\"keccak256\":\"0x2fd26e454b060ede7afa15f8bbc67bd43f9181b6405ca411d36c8b538be016af\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cf2142e83214bb392f69ed14266718cfd803f849a7239ee9a1950ddf66553696\",\"dweb:/ipfs/QmSZ2mPMZqWBetMU8VESKtxy7UdSThUVmJmTFMHEyKLTGZ\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IExecutorFeeLib.sol\":{\"keccak256\":\"0x801d12eca6d6b232fb91d949cdb70a4c547c5e27e73555f2f1eb9e757c639bcc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b61bdffe26ff3902edab3efb0b5af3808ec9e28d72db95b77128502b9bc7638d\",\"dweb:/ipfs/Qmcyf3npDDEq28b9XqmXgSGyQegj2cxUZQ3UekSNf34g8M\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroExecutor.sol\":{\"keccak256\":\"0x3647af317ee126b1247a782abb30e59ec5ab21b4945f1d3b4370d1fa3c1bf347\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5b51cd5e7347ee869a06bd57a698f40e4a901ec7fdcb27f0ef485e4a0e1e9be4\",\"dweb:/ipfs/QmP2Nc73veRzLGdUahkjhQAiKR9ZWYiUtSGwoMB1sPXxUp\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroPriceFeed.sol\":{\"keccak256\":\"0xb4df72798a64f5ea44775b526e0c417c3de0ffc661659d7b31d5b28567c6fbcc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://30ca5fd5e3227a7bffc51654ee3bfebdd591a131f86846ac42dea8a40c5cf1d8\",\"dweb:/ipfs/QmXNmQCF8TZAFpUxgPa1rgWt4ktsBV38A8Hax7TiYLgybW\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroReadExecutor.sol\":{\"keccak256\":\"0x360936885f173f816ffb47e555d480928e74eb1ad54a76af0f4595ecba2d5657\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://16b5095e6439b1e416eb70571a1dd8f4f21a0d77b19c9e510ca289d99e5e09ab\",\"dweb:/ipfs/QmZ2mjQDQ35gJseyzmQhik4cBgN2ESADzofFNVFvgS64hv\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IWorker.sol\":{\"keccak256\":\"0xa6b61913767305227576cc6da5067de4208f09a4f58bfbfe32beafdfae9869b1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7fce83bfb831f383606aee7f5ff68a330c8526bb1036f9ba0813d3e4fa8d534\",\"dweb:/ipfs/QmR7zAqJkmCgBj6sguS8t2WthY5k6FwsakgH4UY11uqD4n\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/libs/ExecutorOptions.sol\":{\"keccak256\":\"0x441b723f2f597be2ec2bb361fcf3f11852c23534db1cfa7d2ffff7e61d228e3c\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://636817d20f90f75032e35376256cf5f4d2a047d6541b45f644d82a2e4dc8f1eb\",\"dweb:/ipfs/QmcEFRxCmmm9hKbqi7Powj6ATbw4JXXJW4rxfwMcxWsDnT\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\":{\"keccak256\":\"0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bacc29fd3866af71e59cb0bdc1cf82c882a4a7f4e2652fd413c9f12649762083\",\"dweb:/ipfs/QmZh2toLnrQDWaNYhS5K4NoW7Vxd2GdZx9KA77vKEDLAqs\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol\":{\"keccak256\":\"0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d8ff6a8a89297fa127f86b54e0db3eba1d6a6eeb4f6398d3c84d569665ac8f1b\",\"dweb:/ipfs/QmVSwhw6xFDrLRAX4RXaCM47yBaBtac4wf36DYEq6KCTvT\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol\":{\"keccak256\":\"0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7e1b245d58221d16d8b5e0f01ef3e289a24a7df1ace3b94239e4d5b954ad5927\",\"dweb:/ipfs/Qmappsgp7PCY9rSSNE9Cdn4BTRX591WfCSEgq2HxhA3z6S\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol\":{\"keccak256\":\"0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b18b23a1643fc6636c4ad9d9023e2e6ca2d3c2a4a046482d4655bff09950598d\",\"dweb:/ipfs/Qma6G5SqiovwrMPfgqTrRngK1HWW373Wkf9c6YP2NhXpPk\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol\":{\"keccak256\":\"0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5173fc9143bea314b159ca5a9adb5626659ef763bc598e27de5fa46efe3291a6\",\"dweb:/ipfs/QmSLFeMFPmVeGxT4sxRPW28ictjAS22M8rLeYRu9TXkA6D\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/CalldataBytesLib.sol\":{\"keccak256\":\"0x5c0db161cef6603c3b256d4220f489419e7478ef775e52a80056654129c61875\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://a33245d0fdd3992bb56b31d1840108d36bb46c8d617b659ef1af8dd7ed86302d\",\"dweb:/ipfs/QmWyBqT7Tdrfn5zz9xYM3V1PBtfAZAVwwCrrKwwfi3wMQK\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Transfer.sol\":{\"keccak256\":\"0x621d6dd5b8b7e827351459fff4ac87c16ba4656757592cf67de8b199aea4cf9a\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://345aa8c007ed8b96a74260d289545713f1d7180df270d67687e3a540a61fa5c0\",\"dweb:/ipfs/QmNWCvpqSuar6UGLDVshUc7shUv3pt1J5FTf9VyZZ13wXL\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ExecutorFeeLibMock.sol\":{\"keccak256\":\"0x4a47aaf41049710d5f05fcc66885cacc0dabc1864778b56ac75a59b61eef5a01\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://c9b8c26b38cb138c3225efbab8b1d2e0f43343798658a0f2ed9669c16e5a97ff\",\"dweb:/ipfs/QmV21G7Qwoi9gXYT8bKXDwnQDvjdZCAo2M9MqTKq4nQU9U\"]},\"node_modules/@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol\":{\"keccak256\":\"0x9b6b3e7803bc5f2f8cd7ad57db8ac1def61a9930a5a3107df4882e028a9605d7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://da62d6be1f5c6edf577f0cb45666a8aa9c2086a4bac87d95d65f02e2f4c36a4b\",\"dweb:/ipfs/QmNkpvBpoCMvX8JwAFNSc5XxJ2q5BXJpL5L1txb4QkqVFF\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC165.sol\":{\"keccak256\":\"0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://11fea9f8bc98949ac6709f0c1699db7430d2948137aa94d5a9e95a91f61a710a\",\"dweb:/ipfs/QmQdfRXxQjwP6yn3DVo1GHPpriKNcFghSPi94Z1oKEFUNS\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC20.sol\":{\"keccak256\":\"0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a2608291cb038b388d80b79a06b6118a42f7894ff67b7da10ec0dbbf5b2973ba\",\"dweb:/ipfs/QmWohqcBLbcxmA4eGPhZDXe5RYMMEEpFq22nfkaUMvTfw1\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db\",\"dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0xca2ae13e0610f6a99238dd00b97bd786bc92732dae6d6b9d61f573ec51018310\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://75f8c71ce0c91c40dd5f249ace0b7d8270f8f1767231bcf71490f7157d6ba862\",\"dweb:/ipfs/QmYXgxeDyFHvz3JsXxLEYN6GNUR44ThHeFj5XkpkgMoG4w\"]},\"node_modules/@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0x9d8da059267bac779a2dbbb9a26c2acf00ca83085e105d62d5d4ef96054a47f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c78e2aa4313323cecd1ef12a8d6265b96beee1a199923abf55d9a2a9e291ad23\",\"dweb:/ipfs/QmUTs2KStXucZezzFo3EYeqYu47utu56qrF7jj1Gue65vb\"]},\"node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"node_modules/@openzeppelin/contracts/utils/Errors.sol\":{\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf\",\"dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB\"]},\"node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { - "inputs": [ - { - "internalType": "uint32", - "name": "_localEidV2", - "type": "uint32" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" } - ], - "type": "error", - "name": "Executor_EidNotSupported" - }, - { - "inputs": [ - { "internalType": "uint256", "name": "cursor", "type": "uint256" } - ], - "type": "error", - "name": "Executor_InvalidExecutorOptions" - }, - { - "inputs": [], - "type": "error", - "name": "Executor_InvalidLzComposeOption" - }, - { - "inputs": [], - "type": "error", - "name": "Executor_InvalidLzReadOption" - }, - { - "inputs": [], - "type": "error", - "name": "Executor_InvalidLzReceiveOption" - }, - { - "inputs": [], - "type": "error", - "name": "Executor_InvalidNativeDropOption" - }, - { - "inputs": [ - { "internalType": "uint256", "name": "amount", "type": "uint256" }, - { "internalType": "uint256", "name": "cap", "type": "uint256" } - ], - "type": "error", - "name": "Executor_NativeAmountExceedsCap" - }, - { "inputs": [], "type": "error", "name": "Executor_NoOptions" }, - { - "inputs": [ - { "internalType": "uint8", "name": "optionType", "type": "uint8" } - ], - "type": "error", - "name": "Executor_UnsupportedOptionType" - }, - { - "inputs": [], - "type": "error", - "name": "Executor_ZeroCalldataSizeProvided" - }, - { - "inputs": [], - "type": "error", - "name": "Executor_ZeroLzComposeGasProvided" - }, - { - "inputs": [], - "type": "error", - "name": "Executor_ZeroLzReceiveGasProvided" - }, - { - "inputs": [ - { "internalType": "address", "name": "owner", "type": "address" } - ], - "type": "error", - "name": "OwnableInvalidOwner" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "type": "error", - "name": "OwnableUnauthorizedAccount" - }, - { - "inputs": [ - { "internalType": "address", "name": "token", "type": "address" } - ], - "type": "error", - "name": "SafeERC20FailedOperation" - }, - { - "inputs": [ - { "internalType": "address", "name": "_to", "type": "address" }, - { "internalType": "uint256", "name": "_value", "type": "uint256" } - ], - "type": "error", - "name": "Transfer_NativeFailed" - }, - { "inputs": [], "type": "error", "name": "Transfer_ToAddressIsZero" }, - { - "inputs": [ - { - "internalType": "address", - "name": "previousOwner", - "type": "address", - "indexed": true - }, - { - "internalType": "address", - "name": "newOwner", - "type": "address", - "indexed": true - } - ], - "type": "event", - "name": "OwnershipTransferred", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "struct IExecutorFeeLib.FeeParamsForRead", - "name": "_params", - "type": "tuple", - "components": [ - { - "internalType": "address", - "name": "priceFeed", - "type": "address" - }, - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint16", - "name": "defaultMultiplierBps", - "type": "uint16" - } - ] - }, - { - "internalType": "struct IExecutor.DstConfig", - "name": "_dstConfig", - "type": "tuple", - "components": [ - { - "internalType": "uint64", - "name": "lzReceiveBaseGas", - "type": "uint64" - }, - { - "internalType": "uint16", - "name": "multiplierBps", - "type": "uint16" - }, - { - "internalType": "uint128", - "name": "floorMarginUSD", - "type": "uint128" - }, - { - "internalType": "uint128", - "name": "nativeCap", - "type": "uint128" - }, - { - "internalType": "uint64", - "name": "lzComposeBaseGas", - "type": "uint64" - } - ] - }, - { "internalType": "bytes", "name": "_options", "type": "bytes" } - ], - "stateMutability": "view", - "type": "function", - "name": "getFee", - "outputs": [ - { "internalType": "uint256", "name": "fee", "type": "uint256" } - ] - }, - { - "inputs": [ - { - "internalType": "struct IExecutorFeeLib.FeeParams", - "name": "_params", - "type": "tuple", - "components": [ - { - "internalType": "address", - "name": "priceFeed", - "type": "address" - }, - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "calldataSize", - "type": "uint256" - }, - { - "internalType": "uint16", - "name": "defaultMultiplierBps", - "type": "uint16" - } - ] - }, - { - "internalType": "struct IExecutor.DstConfig", - "name": "_dstConfig", - "type": "tuple", - "components": [ - { - "internalType": "uint64", - "name": "lzReceiveBaseGas", - "type": "uint64" - }, - { - "internalType": "uint16", - "name": "multiplierBps", - "type": "uint16" - }, - { - "internalType": "uint128", - "name": "floorMarginUSD", - "type": "uint128" - }, - { - "internalType": "uint128", - "name": "nativeCap", - "type": "uint128" - }, - { - "internalType": "uint64", - "name": "lzComposeBaseGas", - "type": "uint64" - } - ] - }, - { "internalType": "bytes", "name": "_options", "type": "bytes" } - ], - "stateMutability": "view", - "type": "function", - "name": "getFee", - "outputs": [ - { "internalType": "uint256", "name": "fee", "type": "uint256" } - ] - }, - { - "inputs": [ - { - "internalType": "struct IExecutorFeeLib.FeeParams", - "name": "_params", - "type": "tuple", - "components": [ - { - "internalType": "address", - "name": "priceFeed", - "type": "address" - }, - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "calldataSize", - "type": "uint256" - }, - { - "internalType": "uint16", - "name": "defaultMultiplierBps", - "type": "uint16" - } - ] - }, - { - "internalType": "struct IExecutor.DstConfig", - "name": "_dstConfig", - "type": "tuple", - "components": [ - { - "internalType": "uint64", - "name": "lzReceiveBaseGas", - "type": "uint64" - }, - { - "internalType": "uint16", - "name": "multiplierBps", - "type": "uint16" - }, - { - "internalType": "uint128", - "name": "floorMarginUSD", - "type": "uint128" - }, - { - "internalType": "uint128", - "name": "nativeCap", - "type": "uint128" - }, - { - "internalType": "uint64", - "name": "lzComposeBaseGas", - "type": "uint64" - } - ] - }, - { "internalType": "bytes", "name": "_options", "type": "bytes" } - ], - "stateMutability": "view", - "type": "function", - "name": "getFeeOnSend", - "outputs": [ - { "internalType": "uint256", "name": "fee", "type": "uint256" } - ] - }, - { - "inputs": [ - { - "internalType": "struct IExecutorFeeLib.FeeParamsForRead", - "name": "_params", - "type": "tuple", - "components": [ - { - "internalType": "address", - "name": "priceFeed", - "type": "address" - }, - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint16", - "name": "defaultMultiplierBps", - "type": "uint16" - } - ] - }, - { - "internalType": "struct IExecutor.DstConfig", - "name": "_dstConfig", - "type": "tuple", - "components": [ - { - "internalType": "uint64", - "name": "lzReceiveBaseGas", - "type": "uint64" - }, - { - "internalType": "uint16", - "name": "multiplierBps", - "type": "uint16" - }, - { - "internalType": "uint128", - "name": "floorMarginUSD", - "type": "uint128" - }, - { - "internalType": "uint128", - "name": "nativeCap", - "type": "uint128" - }, - { - "internalType": "uint64", - "name": "lzComposeBaseGas", - "type": "uint64" - } - ] - }, - { "internalType": "bytes", "name": "_options", "type": "bytes" } - ], - "stateMutability": "view", - "type": "function", - "name": "getFeeOnSend", - "outputs": [ - { "internalType": "uint256", "name": "fee", "type": "uint256" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "owner", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ] - }, - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "function", - "name": "renounceOwnership" - }, - { - "inputs": [ - { "internalType": "address", "name": "newOwner", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "transferOwnership" - }, - { - "inputs": [], - "stateMutability": "pure", - "type": "function", - "name": "version", - "outputs": [ - { "internalType": "uint64", "name": "major", "type": "uint64" }, - { "internalType": "uint8", "name": "minor", "type": "uint8" } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "_token", "type": "address" }, - { "internalType": "address", "name": "_to", "type": "address" }, - { "internalType": "uint256", "name": "_amount", "type": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "withdrawToken" - }, - { "inputs": [], "stateMutability": "payable", "type": "receive" } - ], - "devdoc": { - "kind": "dev", - "methods": { - "owner()": { "details": "Returns the address of the current owner." }, - "renounceOwnership()": { - "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner." - }, - "transferOwnership(address)": { - "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." - } - }, - "version": 1 - }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ExecutorFeeLibMock.sol": "ExecutorFeeLibMock" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IExecutor.sol": { - "keccak256": "0x2fd26e454b060ede7afa15f8bbc67bd43f9181b6405ca411d36c8b538be016af", - "urls": [ - "bzz-raw://cf2142e83214bb392f69ed14266718cfd803f849a7239ee9a1950ddf66553696", - "dweb:/ipfs/QmSZ2mPMZqWBetMU8VESKtxy7UdSThUVmJmTFMHEyKLTGZ" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IExecutorFeeLib.sol": { - "keccak256": "0x801d12eca6d6b232fb91d949cdb70a4c547c5e27e73555f2f1eb9e757c639bcc", - "urls": [ - "bzz-raw://b61bdffe26ff3902edab3efb0b5af3808ec9e28d72db95b77128502b9bc7638d", - "dweb:/ipfs/Qmcyf3npDDEq28b9XqmXgSGyQegj2cxUZQ3UekSNf34g8M" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroExecutor.sol": { - "keccak256": "0x3647af317ee126b1247a782abb30e59ec5ab21b4945f1d3b4370d1fa3c1bf347", - "urls": [ - "bzz-raw://5b51cd5e7347ee869a06bd57a698f40e4a901ec7fdcb27f0ef485e4a0e1e9be4", - "dweb:/ipfs/QmP2Nc73veRzLGdUahkjhQAiKR9ZWYiUtSGwoMB1sPXxUp" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroPriceFeed.sol": { - "keccak256": "0xb4df72798a64f5ea44775b526e0c417c3de0ffc661659d7b31d5b28567c6fbcc", - "urls": [ - "bzz-raw://30ca5fd5e3227a7bffc51654ee3bfebdd591a131f86846ac42dea8a40c5cf1d8", - "dweb:/ipfs/QmXNmQCF8TZAFpUxgPa1rgWt4ktsBV38A8Hax7TiYLgybW" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroReadExecutor.sol": { - "keccak256": "0x360936885f173f816ffb47e555d480928e74eb1ad54a76af0f4595ecba2d5657", - "urls": [ - "bzz-raw://16b5095e6439b1e416eb70571a1dd8f4f21a0d77b19c9e510ca289d99e5e09ab", - "dweb:/ipfs/QmZ2mjQDQ35gJseyzmQhik4cBgN2ESADzofFNVFvgS64hv" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IWorker.sol": { - "keccak256": "0xa6b61913767305227576cc6da5067de4208f09a4f58bfbfe32beafdfae9869b1", - "urls": [ - "bzz-raw://b7fce83bfb831f383606aee7f5ff68a330c8526bb1036f9ba0813d3e4fa8d534", - "dweb:/ipfs/QmR7zAqJkmCgBj6sguS8t2WthY5k6FwsakgH4UY11uqD4n" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/libs/ExecutorOptions.sol": { - "keccak256": "0x441b723f2f597be2ec2bb361fcf3f11852c23534db1cfa7d2ffff7e61d228e3c", - "urls": [ - "bzz-raw://636817d20f90f75032e35376256cf5f4d2a047d6541b45f644d82a2e4dc8f1eb", - "dweb:/ipfs/QmcEFRxCmmm9hKbqi7Powj6ATbw4JXXJW4rxfwMcxWsDnT" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol": { - "keccak256": "0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3", - "urls": [ - "bzz-raw://bacc29fd3866af71e59cb0bdc1cf82c882a4a7f4e2652fd413c9f12649762083", - "dweb:/ipfs/QmZh2toLnrQDWaNYhS5K4NoW7Vxd2GdZx9KA77vKEDLAqs" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol": { - "keccak256": "0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc", - "urls": [ - "bzz-raw://d8ff6a8a89297fa127f86b54e0db3eba1d6a6eeb4f6398d3c84d569665ac8f1b", - "dweb:/ipfs/QmVSwhw6xFDrLRAX4RXaCM47yBaBtac4wf36DYEq6KCTvT" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol": { - "keccak256": "0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972", - "urls": [ - "bzz-raw://7e1b245d58221d16d8b5e0f01ef3e289a24a7df1ace3b94239e4d5b954ad5927", - "dweb:/ipfs/Qmappsgp7PCY9rSSNE9Cdn4BTRX591WfCSEgq2HxhA3z6S" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol": { - "keccak256": "0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901", - "urls": [ - "bzz-raw://b18b23a1643fc6636c4ad9d9023e2e6ca2d3c2a4a046482d4655bff09950598d", - "dweb:/ipfs/Qma6G5SqiovwrMPfgqTrRngK1HWW373Wkf9c6YP2NhXpPk" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol": { - "keccak256": "0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e", - "urls": [ - "bzz-raw://5173fc9143bea314b159ca5a9adb5626659ef763bc598e27de5fa46efe3291a6", - "dweb:/ipfs/QmSLFeMFPmVeGxT4sxRPW28ictjAS22M8rLeYRu9TXkA6D" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/CalldataBytesLib.sol": { - "keccak256": "0x5c0db161cef6603c3b256d4220f489419e7478ef775e52a80056654129c61875", - "urls": [ - "bzz-raw://a33245d0fdd3992bb56b31d1840108d36bb46c8d617b659ef1af8dd7ed86302d", - "dweb:/ipfs/QmWyBqT7Tdrfn5zz9xYM3V1PBtfAZAVwwCrrKwwfi3wMQK" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Transfer.sol": { - "keccak256": "0x621d6dd5b8b7e827351459fff4ac87c16ba4656757592cf67de8b199aea4cf9a", - "urls": [ - "bzz-raw://345aa8c007ed8b96a74260d289545713f1d7180df270d67687e3a540a61fa5c0", - "dweb:/ipfs/QmNWCvpqSuar6UGLDVshUc7shUv3pt1J5FTf9VyZZ13wXL" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ExecutorFeeLibMock.sol": { - "keccak256": "0x4a47aaf41049710d5f05fcc66885cacc0dabc1864778b56ac75a59b61eef5a01", - "urls": [ - "bzz-raw://c9b8c26b38cb138c3225efbab8b1d2e0f43343798658a0f2ed9669c16e5a97ff", - "dweb:/ipfs/QmV21G7Qwoi9gXYT8bKXDwnQDvjdZCAo2M9MqTKq4nQU9U" - ], - "license": "LZBL-1.2" - }, - "node_modules/@openzeppelin/contracts/access/Ownable.sol": { - "keccak256": "0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb", - "urls": [ - "bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6", - "dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol": { - "keccak256": "0x9b6b3e7803bc5f2f8cd7ad57db8ac1def61a9930a5a3107df4882e028a9605d7", - "urls": [ - "bzz-raw://da62d6be1f5c6edf577f0cb45666a8aa9c2086a4bac87d95d65f02e2f4c36a4b", - "dweb:/ipfs/QmNkpvBpoCMvX8JwAFNSc5XxJ2q5BXJpL5L1txb4QkqVFF" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/interfaces/IERC165.sol": { - "keccak256": "0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724", - "urls": [ - "bzz-raw://11fea9f8bc98949ac6709f0c1699db7430d2948137aa94d5a9e95a91f61a710a", - "dweb:/ipfs/QmQdfRXxQjwP6yn3DVo1GHPpriKNcFghSPi94Z1oKEFUNS" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/interfaces/IERC20.sol": { - "keccak256": "0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c", - "urls": [ - "bzz-raw://a2608291cb038b388d80b79a06b6118a42f7894ff67b7da10ec0dbbf5b2973ba", - "dweb:/ipfs/QmWohqcBLbcxmA4eGPhZDXe5RYMMEEpFq22nfkaUMvTfw1" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol": { - "keccak256": "0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7", - "urls": [ - "bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db", - "dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol": { - "keccak256": "0xca2ae13e0610f6a99238dd00b97bd786bc92732dae6d6b9d61f573ec51018310", - "urls": [ - "bzz-raw://75f8c71ce0c91c40dd5f249ace0b7d8270f8f1767231bcf71490f7157d6ba862", - "dweb:/ipfs/QmYXgxeDyFHvz3JsXxLEYN6GNUR44ThHeFj5XkpkgMoG4w" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Address.sol": { - "keccak256": "0x9d8da059267bac779a2dbbb9a26c2acf00ca83085e105d62d5d4ef96054a47f5", - "urls": [ - "bzz-raw://c78e2aa4313323cecd1ef12a8d6265b96beee1a199923abf55d9a2a9e291ad23", - "dweb:/ipfs/QmUTs2KStXucZezzFo3EYeqYu47utu56qrF7jj1Gue65vb" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Context.sol": { - "keccak256": "0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2", - "urls": [ - "bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12", - "dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Errors.sol": { - "keccak256": "0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123", - "urls": [ - "bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf", - "dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol": { - "keccak256": "0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8", - "urls": [ - "bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621", - "dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL" - ], - "license": "MIT" - } - }, - "version": 1 - }, - "id": 76 -} diff --git a/examples/oft-movement/out/ExecutorMock.sol/ExecutorMock.json b/examples/oft-movement/out/ExecutorMock.sol/ExecutorMock.json deleted file mode 100644 index b41f10345..000000000 --- a/examples/oft-movement/out/ExecutorMock.sol/ExecutorMock.json +++ /dev/null @@ -1,2285 +0,0 @@ -{ - "abi": [ - { - "type": "constructor", - "inputs": [ - { "name": "_endpoint", "type": "address", "internalType": "address" }, - { - "name": "_receiveUln301", - "type": "address", - "internalType": "address" - }, - { - "name": "_messageLibs", - "type": "address[]", - "internalType": "address[]" - }, - { "name": "_priceFeed", "type": "address", "internalType": "address" }, - { "name": "_roleAdmin", "type": "address", "internalType": "address" }, - { "name": "_admins", "type": "address[]", "internalType": "address[]" } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "DEFAULT_ADMIN_ROLE", - "inputs": [], - "outputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "allowlistSize", - "inputs": [], - "outputs": [{ "name": "", "type": "uint64", "internalType": "uint64" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "assignJob", - "inputs": [ - { "name": "_dstEid", "type": "uint32", "internalType": "uint32" }, - { "name": "_sender", "type": "address", "internalType": "address" }, - { - "name": "_calldataSize", - "type": "uint256", - "internalType": "uint256" - }, - { "name": "_options", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [ - { "name": "fee", "type": "uint256", "internalType": "uint256" } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "assignJob", - "inputs": [ - { "name": "_sender", "type": "address", "internalType": "address" }, - { "name": "_options", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [ - { "name": "fee", "type": "uint256", "internalType": "uint256" } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "compose302", - "inputs": [ - { "name": "_from", "type": "address", "internalType": "address" }, - { "name": "_to", "type": "address", "internalType": "address" }, - { "name": "_guid", "type": "bytes32", "internalType": "bytes32" }, - { "name": "_index", "type": "uint16", "internalType": "uint16" }, - { "name": "_message", "type": "bytes", "internalType": "bytes" }, - { "name": "_extraData", "type": "bytes", "internalType": "bytes" }, - { "name": "_gasLimit", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [], - "stateMutability": "payable" - }, - { - "type": "function", - "name": "defaultMultiplierBps", - "inputs": [], - "outputs": [{ "name": "", "type": "uint16", "internalType": "uint16" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "dstConfig", - "inputs": [ - { "name": "dstEid", "type": "uint32", "internalType": "uint32" } - ], - "outputs": [ - { - "name": "lzReceiveBaseGas", - "type": "uint64", - "internalType": "uint64" - }, - { "name": "multiplierBps", "type": "uint16", "internalType": "uint16" }, - { - "name": "floorMarginUSD", - "type": "uint128", - "internalType": "uint128" - }, - { "name": "nativeCap", "type": "uint128", "internalType": "uint128" }, - { - "name": "lzComposeBaseGas", - "type": "uint64", - "internalType": "uint64" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "endpoint", - "inputs": [], - "outputs": [{ "name": "", "type": "address", "internalType": "address" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "execute301", - "inputs": [ - { "name": "_packet", "type": "bytes", "internalType": "bytes" }, - { "name": "_gasLimit", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "execute302", - "inputs": [ - { - "name": "_executionParams", - "type": "tuple", - "internalType": "struct IExecutor.ExecutionParams", - "components": [ - { - "name": "receiver", - "type": "address", - "internalType": "address" - }, - { - "name": "origin", - "type": "tuple", - "internalType": "struct Origin", - "components": [ - { - "name": "srcEid", - "type": "uint32", - "internalType": "uint32" - }, - { - "name": "sender", - "type": "bytes32", - "internalType": "bytes32" - }, - { "name": "nonce", "type": "uint64", "internalType": "uint64" } - ] - }, - { "name": "guid", "type": "bytes32", "internalType": "bytes32" }, - { "name": "message", "type": "bytes", "internalType": "bytes" }, - { "name": "extraData", "type": "bytes", "internalType": "bytes" }, - { "name": "gasLimit", "type": "uint256", "internalType": "uint256" } - ] - } - ], - "outputs": [], - "stateMutability": "payable" - }, - { - "type": "function", - "name": "getFee", - "inputs": [ - { "name": "_dstEid", "type": "uint32", "internalType": "uint32" }, - { "name": "_sender", "type": "address", "internalType": "address" }, - { - "name": "_calldataSize", - "type": "uint256", - "internalType": "uint256" - }, - { "name": "_options", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [ - { "name": "fee", "type": "uint256", "internalType": "uint256" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getFee", - "inputs": [ - { "name": "_sender", "type": "address", "internalType": "address" }, - { "name": "_options", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [ - { "name": "fee", "type": "uint256", "internalType": "uint256" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getRoleAdmin", - "inputs": [ - { "name": "role", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getSupportedOptionTypes", - "inputs": [ - { "name": "_eid", "type": "uint32", "internalType": "uint32" } - ], - "outputs": [{ "name": "", "type": "uint8[]", "internalType": "uint8[]" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "grantRole", - "inputs": [ - { "name": "role", "type": "bytes32", "internalType": "bytes32" }, - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "hasAcl", - "inputs": [ - { "name": "_sender", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "hasRole", - "inputs": [ - { "name": "role", "type": "bytes32", "internalType": "bytes32" }, - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "localEidV2", - "inputs": [], - "outputs": [{ "name": "", "type": "uint32", "internalType": "uint32" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "nativeDrop", - "inputs": [ - { - "name": "_origin", - "type": "tuple", - "internalType": "struct Origin", - "components": [ - { "name": "srcEid", "type": "uint32", "internalType": "uint32" }, - { "name": "sender", "type": "bytes32", "internalType": "bytes32" }, - { "name": "nonce", "type": "uint64", "internalType": "uint64" } - ] - }, - { "name": "_dstEid", "type": "uint32", "internalType": "uint32" }, - { "name": "_oapp", "type": "address", "internalType": "address" }, - { - "name": "_nativeDropParams", - "type": "tuple[]", - "internalType": "struct IExecutor.NativeDropParams[]", - "components": [ - { - "name": "receiver", - "type": "address", - "internalType": "address" - }, - { "name": "amount", "type": "uint256", "internalType": "uint256" } - ] - }, - { - "name": "_nativeDropGasLimit", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [], - "stateMutability": "payable" - }, - { - "type": "function", - "name": "nativeDropAndExecute301", - "inputs": [ - { - "name": "_origin", - "type": "tuple", - "internalType": "struct Origin", - "components": [ - { "name": "srcEid", "type": "uint32", "internalType": "uint32" }, - { "name": "sender", "type": "bytes32", "internalType": "bytes32" }, - { "name": "nonce", "type": "uint64", "internalType": "uint64" } - ] - }, - { - "name": "_nativeDropParams", - "type": "tuple[]", - "internalType": "struct IExecutor.NativeDropParams[]", - "components": [ - { - "name": "receiver", - "type": "address", - "internalType": "address" - }, - { "name": "amount", "type": "uint256", "internalType": "uint256" } - ] - }, - { - "name": "_nativeDropGasLimit", - "type": "uint256", - "internalType": "uint256" - }, - { "name": "_packet", "type": "bytes", "internalType": "bytes" }, - { "name": "_gasLimit", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [], - "stateMutability": "payable" - }, - { - "type": "function", - "name": "nativeDropAndExecute302", - "inputs": [ - { - "name": "_nativeDropParams", - "type": "tuple[]", - "internalType": "struct IExecutor.NativeDropParams[]", - "components": [ - { - "name": "receiver", - "type": "address", - "internalType": "address" - }, - { "name": "amount", "type": "uint256", "internalType": "uint256" } - ] - }, - { - "name": "_nativeDropGasLimit", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "_executionParams", - "type": "tuple", - "internalType": "struct IExecutor.ExecutionParams", - "components": [ - { - "name": "receiver", - "type": "address", - "internalType": "address" - }, - { - "name": "origin", - "type": "tuple", - "internalType": "struct Origin", - "components": [ - { - "name": "srcEid", - "type": "uint32", - "internalType": "uint32" - }, - { - "name": "sender", - "type": "bytes32", - "internalType": "bytes32" - }, - { "name": "nonce", "type": "uint64", "internalType": "uint64" } - ] - }, - { "name": "guid", "type": "bytes32", "internalType": "bytes32" }, - { "name": "message", "type": "bytes", "internalType": "bytes" }, - { "name": "extraData", "type": "bytes", "internalType": "bytes" }, - { "name": "gasLimit", "type": "uint256", "internalType": "uint256" } - ] - } - ], - "outputs": [], - "stateMutability": "payable" - }, - { - "type": "function", - "name": "paused", - "inputs": [], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "priceFeed", - "inputs": [], - "outputs": [{ "name": "", "type": "address", "internalType": "address" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "receiveUln301", - "inputs": [], - "outputs": [{ "name": "", "type": "address", "internalType": "address" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "renounceRole", - "inputs": [ - { "name": "", "type": "bytes32", "internalType": "bytes32" }, - { "name": "", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "revokeRole", - "inputs": [ - { "name": "role", "type": "bytes32", "internalType": "bytes32" }, - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setDefaultMultiplierBps", - "inputs": [ - { "name": "_multiplierBps", "type": "uint16", "internalType": "uint16" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setDstConfig", - "inputs": [ - { - "name": "_params", - "type": "tuple[]", - "internalType": "struct IExecutor.DstConfigParam[]", - "components": [ - { "name": "dstEid", "type": "uint32", "internalType": "uint32" }, - { - "name": "lzReceiveBaseGas", - "type": "uint64", - "internalType": "uint64" - }, - { - "name": "lzComposeBaseGas", - "type": "uint64", - "internalType": "uint64" - }, - { - "name": "multiplierBps", - "type": "uint16", - "internalType": "uint16" - }, - { - "name": "floorMarginUSD", - "type": "uint128", - "internalType": "uint128" - }, - { - "name": "nativeCap", - "type": "uint128", - "internalType": "uint128" - } - ] - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setPaused", - "inputs": [{ "name": "_paused", "type": "bool", "internalType": "bool" }], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setPriceFeed", - "inputs": [ - { "name": "_priceFeed", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setSupportedOptionTypes", - "inputs": [ - { "name": "_eid", "type": "uint32", "internalType": "uint32" }, - { "name": "_optionTypes", "type": "uint8[]", "internalType": "uint8[]" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setWorkerFeeLib", - "inputs": [ - { - "name": "_workerFeeLib", - "type": "address", - "internalType": "address" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "supportsInterface", - "inputs": [ - { "name": "interfaceId", "type": "bytes4", "internalType": "bytes4" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "withdrawFee", - "inputs": [ - { "name": "_lib", "type": "address", "internalType": "address" }, - { "name": "_to", "type": "address", "internalType": "address" }, - { "name": "_amount", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "withdrawToken", - "inputs": [ - { "name": "_token", "type": "address", "internalType": "address" }, - { "name": "_to", "type": "address", "internalType": "address" }, - { "name": "_amount", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "workerFeeLib", - "inputs": [], - "outputs": [{ "name": "", "type": "address", "internalType": "address" }], - "stateMutability": "view" - }, - { - "type": "event", - "name": "DstConfigSet", - "inputs": [ - { - "name": "params", - "type": "tuple[]", - "indexed": false, - "internalType": "struct IExecutor.DstConfigParam[]", - "components": [ - { "name": "dstEid", "type": "uint32", "internalType": "uint32" }, - { - "name": "lzReceiveBaseGas", - "type": "uint64", - "internalType": "uint64" - }, - { - "name": "lzComposeBaseGas", - "type": "uint64", - "internalType": "uint64" - }, - { - "name": "multiplierBps", - "type": "uint16", - "internalType": "uint16" - }, - { - "name": "floorMarginUSD", - "type": "uint128", - "internalType": "uint128" - }, - { - "name": "nativeCap", - "type": "uint128", - "internalType": "uint128" - } - ] - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "NativeDropApplied", - "inputs": [ - { - "name": "origin", - "type": "tuple", - "indexed": false, - "internalType": "struct Origin", - "components": [ - { "name": "srcEid", "type": "uint32", "internalType": "uint32" }, - { "name": "sender", "type": "bytes32", "internalType": "bytes32" }, - { "name": "nonce", "type": "uint64", "internalType": "uint64" } - ] - }, - { - "name": "dstEid", - "type": "uint32", - "indexed": false, - "internalType": "uint32" - }, - { - "name": "oapp", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "params", - "type": "tuple[]", - "indexed": false, - "internalType": "struct IExecutor.NativeDropParams[]", - "components": [ - { - "name": "receiver", - "type": "address", - "internalType": "address" - }, - { "name": "amount", "type": "uint256", "internalType": "uint256" } - ] - }, - { - "name": "success", - "type": "bool[]", - "indexed": false, - "internalType": "bool[]" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "Paused", - "inputs": [ - { - "name": "account", - "type": "address", - "indexed": false, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "RoleAdminChanged", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "indexed": true, - "internalType": "bytes32" - }, - { - "name": "previousAdminRole", - "type": "bytes32", - "indexed": true, - "internalType": "bytes32" - }, - { - "name": "newAdminRole", - "type": "bytes32", - "indexed": true, - "internalType": "bytes32" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "RoleGranted", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "indexed": true, - "internalType": "bytes32" - }, - { - "name": "account", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "sender", - "type": "address", - "indexed": true, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "RoleRevoked", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "indexed": true, - "internalType": "bytes32" - }, - { - "name": "account", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "sender", - "type": "address", - "indexed": true, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "SetDefaultMultiplierBps", - "inputs": [ - { - "name": "multiplierBps", - "type": "uint16", - "indexed": false, - "internalType": "uint16" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "SetPriceFeed", - "inputs": [ - { - "name": "priceFeed", - "type": "address", - "indexed": false, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "SetSupportedOptionTypes", - "inputs": [ - { - "name": "dstEid", - "type": "uint32", - "indexed": false, - "internalType": "uint32" - }, - { - "name": "optionTypes", - "type": "uint8[]", - "indexed": false, - "internalType": "uint8[]" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "SetWorkerLib", - "inputs": [ - { - "name": "workerLib", - "type": "address", - "indexed": false, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "Unpaused", - "inputs": [ - { - "name": "account", - "type": "address", - "indexed": false, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "Withdraw", - "inputs": [ - { - "name": "lib", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "to", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "amount", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { "type": "error", "name": "AccessControlBadConfirmation", "inputs": [] }, - { - "type": "error", - "name": "AccessControlUnauthorizedAccount", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" }, - { "name": "neededRole", "type": "bytes32", "internalType": "bytes32" } - ] - }, - { "type": "error", "name": "EnforcedPause", "inputs": [] }, - { "type": "error", "name": "ExpectedPause", "inputs": [] }, - { "type": "error", "name": "ReentrancyGuardReentrantCall", "inputs": [] }, - { - "type": "error", - "name": "SafeERC20FailedOperation", - "inputs": [ - { "name": "token", "type": "address", "internalType": "address" } - ] - }, - { - "type": "error", - "name": "Transfer_NativeFailed", - "inputs": [ - { "name": "_to", "type": "address", "internalType": "address" }, - { "name": "_value", "type": "uint256", "internalType": "uint256" } - ] - }, - { "type": "error", "name": "Transfer_ToAddressIsZero", "inputs": [] }, - { "type": "error", "name": "Worker_NotAllowed", "inputs": [] }, - { "type": "error", "name": "Worker_OnlyMessageLib", "inputs": [] }, - { "type": "error", "name": "Worker_RoleRenouncingDisabled", "inputs": [] } - ], - "bytecode": { - "object": "0x60806040523480156200001157600080fd5b506040516200313b3803806200313b83398101604081905262000034916200046f565b6001805460ff61ffff60e81b01191661017760ed1b179055600280546001600160a01b0319166001600160a01b038581169190911790915584908490612ee090859085908216156200008f576200008d60008362000226565b505b60005b8551811015620000f457620000ea7f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de878381518110620000d657620000d662000523565b60200260200101516200022660201b60201c565b5060010162000092565b5060005b815181101562000146576200013c7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775838381518110620000d657620000d662000523565b50600101620000f8565b505060016004908155600680546001600160a01b0319166001600160a01b038d169081179091556040805163416ecebf60e01b8152905191965063416ecebf95508083019450602093509091908290030181865afa158015620001ad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001d3919062000539565b6006805463ffffffff92909216600160a01b0263ffffffff60a01b199092169190911790555050600780546001600160a01b039094166001600160a01b03199094169390931790925550620005a5915050565b60007f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca831480156200027957506000838152602081815260408083206001600160a01b038616845290915290205460ff16155b15620002c65760018054601590620002a190600160a81b90046001600160401b031662000568565b91906101000a8154816001600160401b0302191690836001600160401b031602179055505b620002d28383620002de565b50600190505b92915050565b6000828152602081815260408083206001600160a01b038516845290915281205460ff1662000383576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556200033a3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001620002d8565b506000620002d8565b80516001600160a01b0381168114620003a457600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620003d157600080fd5b815160206001600160401b0380831115620003f057620003f0620003a9565b8260051b604051601f19603f83011681018181108482111715620004185762000418620003a9565b60405293845260208187018101949081019250878511156200043957600080fd5b6020870191505b84821015620004645762000454826200038c565b8352918301919083019062000440565b979650505050505050565b60008060008060008060c087890312156200048957600080fd5b62000494876200038c565b9550620004a4602088016200038c565b60408801519095506001600160401b0380821115620004c257600080fd5b620004d08a838b01620003bf565b9550620004e060608a016200038c565b9450620004f060808a016200038c565b935060a08901519150808211156200050757600080fd5b506200051689828a01620003bf565b9150509295509295509295565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156200054c57600080fd5b815163ffffffff811681146200056157600080fd5b9392505050565b60006001600160401b038281166002600160401b031981016200059b57634e487b7160e01b600052601160045260246000fd5b6001019392505050565b612b8680620005b56000396000f3fe60806040526004361061020e5760003560e01c8063724e78da11610118578063c358de0a116100a0578063cd88b9031161006f578063cd88b903146106af578063cfc32570146106cf578063d2ae2104146106e2578063d547741f14610721578063e395eb5c1461074157600080fd5b8063c358de0a1461062a578063c416aa511461064a578063c7b2370b1461066f578063c8f8dcd11461068f57600080fd5b806391d14854116100e757806391d14854146105065780639e94496514610526578063a217fddf146105d5578063c015bb7d146105ea578063c2803b2c1461060a57600080fd5b8063724e78da146104a0578063741bef1a146104c05780637cd44734146104e05780638624ba07146104f357600080fd5b80633146646a1161019b578063475b6d9e1161016a578063475b6d9e146103fd5780635c975abb146104105780635e280f1114610428578063709eb66414610460578063717e8a421461048057600080fd5b80633146646a1461038a57806336568abe146103aa5780633927c075146103ca5780633d85ac33146103dd57600080fd5b806316c38b3c116101e257806316c38b3c146102bf578063248a9ca3146102df57806326e67a371461031d5780632de113761461034a5780632f2ff15d1461036a57600080fd5b8062bf2e801461021357806301e336671461024d57806301ffc9a71461026f5780631095b6d71461029f575b600080fd5b34801561021f57600080fd5b5060015461023590600160e81b900461ffff1681565b60405161ffff90911681526020015b60405180910390f35b34801561025957600080fd5b5061026d610268366004611dca565b61077a565b005b34801561027b57600080fd5b5061028f61028a366004611e06565b6107a3565b6040519015158152602001610244565b3480156102ab57600080fd5b5061026d6102ba366004611dca565b6107da565b3480156102cb57600080fd5b5061026d6102da366004611e30565b6108ed565b3480156102eb57600080fd5b5061030f6102fa366004611e52565b60009081526020819052604090206001015490565b604051908152602001610244565b34801561032957600080fd5b5061033d610338366004611e7f565b610912565b6040516102449190611e9a565b34801561035657600080fd5b5061028f610365366004611ee1565b610999565b34801561037657600080fd5b5061026d610385366004611efc565b610a30565b34801561039657600080fd5b5061026d6103a5366004611f70565b610a55565b3480156103b657600080fd5b5061026d6103c5366004611efc565b610ae5565b61026d6103d8366004612017565b610afe565b3480156103e957600080fd5b5061026d6103f8366004612158565b610bb9565b61026d61040b366004612273565b610d30565b34801561041c57600080fd5b5060015460ff1661028f565b34801561043457600080fd5b50600654610448906001600160a01b031681565b6040516001600160a01b039091168152602001610244565b34801561046c57600080fd5b5061030f61047b3660046122f1565b610d72565b34801561048c57600080fd5b5061030f61049b3660046122f1565b610e79565b3480156104ac57600080fd5b5061026d6104bb366004611ee1565b610fa5565b3480156104cc57600080fd5b50600254610448906001600160a01b031681565b61026d6104ee36600461235f565b61100b565b61026d610501366004612424565b6110b6565b34801561051257600080fd5b5061028f610521366004611efc565b6111c1565b34801561053257600080fd5b50610592610541366004611e7f565b600560205260009081526040902080546001909101546001600160401b038083169261ffff600160401b820416926001600160801b03600160501b90920482169291811691600160801b9091041685565b604080516001600160401b03968716815261ffff90951660208601526001600160801b03938416908501529116606083015291909116608082015260a001610244565b3480156105e157600080fd5b5061030f600081565b3480156105f657600080fd5b5061030f610605366004612496565b6111ea565b34801561061657600080fd5b50600754610448906001600160a01b031681565b34801561063657600080fd5b5061026d6106453660046124e8565b611312565b34801561065657600080fd5b506001546104489061010090046001600160a01b031681565b34801561067b57600080fd5b5061026d61068a366004611ee1565b61137a565b34801561069b57600080fd5b5061030f6106aa366004612496565b6113e8565b3480156106bb57600080fd5b5061026d6106ca366004612503565b6114e3565b61026d6106dd366004612588565b61151b565b3480156106ee57600080fd5b5060015461070990600160a81b90046001600160401b031681565b6040516001600160401b039091168152602001610244565b34801561072d57600080fd5b5061026d61073c366004611efc565b6115de565b34801561074d57600080fd5b5060065461076590600160a01b900463ffffffff1681565b60405163ffffffff9091168152602001610244565b600080516020612b3183398151915261079281611603565b61079d848484611610565b50505050565b60006001600160e01b03198216637965db0b60e01b14806107d457506301ffc9a760e01b6001600160e01b03198316145b92915050565b600080516020612b318339815191526107f281611603565b61081c7f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de856111c1565b61083957604051635ee08b9760e01b815260040160405180910390fd5b604051637ecdf29160e11b81526001600160a01b0384811660048301526024820184905285169063fd9be52290604401600060405180830381600087803b15801561088357600080fd5b505af1158015610897573d6000803e3d6000fd5b5050604080516001600160a01b038089168252871660208201529081018590527f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb9250606001905060405180910390a150505050565b60006108f881611603565b811561090a57610906611638565b5050565b61090661168c565b63ffffffff811660009081526003602090815260409182902080548351818402810184019094528084526060939283018282801561098d57602002820191906000526020600020906000905b825461010083900a900460ff1681526020600192830181810494850194909303909202910180841161095e5790505b50505050509050919050565b60006109c57f4270fae16c6d150d00e80b689daca99e8073b1838ff2b6063a37be9d851283e4836111c1565b156109d257506000919050565b600154600160a81b90046001600160401b03161580610a165750610a167f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca836111c1565b15610a2357506001919050565b506000919050565b919050565b600082815260208190526040902060010154610a4b81611603565b61079d83836116c5565b600080516020612b31833981519152610a6d81611603565b610a7561175b565b600754604051631cca20df60e31b81526001600160a01b039091169063e65106f890610aa9908790879087906004016125ed565b600060405180830381600087803b158015610ac357600080fd5b505af1158015610ad7573d6000803e3d6000fd5b5050505061079d6001600455565b60405163dec9f03160e01b815260040160405180910390fd5b600080516020612b31833981519152610b1681611603565b610b1e61175b565b610b3e88610b2c8686611785565b610b3687876117a8565b8a8a8a6117c1565b50600754604051631cca20df60e31b81526001600160a01b039091169063e65106f890610b73908790879087906004016125ed565b600060405180830381600087803b158015610b8d57600080fd5b505af1158015610ba1573d6000803e3d6000fd5b50505050610baf6001600455565b5050505050505050565b600080516020612b31833981519152610bd181611603565b60005b8251811015610cf4576000838281518110610bf157610bf1612611565b6020908102919091018101516040805160a08082018352838501516001600160401b03908116835260608086015161ffff9081168589019081526080808901516001600160801b03908116888a01908152968a01518116948801948552888a01518616918801918252985163ffffffff1660009081526005909a529690982094518554985194518816600160501b026fffffffffffffffffffffffffffffffff60501b1995909216600160401b0269ffffffffffffffffffff1990991690841617979097179290921695909517825551600191820180549351909516600160801b026001600160c01b031990931693169290921717909155919091019050610bd4565b507fb99f6de5e22c60c178b03bfacf2daeb4b6089f5b37e0fe2c48a5d5141191fc5382604051610d249190612627565b60405180910390a15050565b600080516020612b31833981519152610d4881611603565b610d5061175b565b610d5e8787878787876117c1565b50610d696001600455565b50505050505050565b600084610d7e81610999565b610d9b57604051634ab5ebcd60e01b815260040160405180910390fd5b610da3611928565b6040805160a0810182526002546001600160a01b03908116825263ffffffff8a1660208084018290528a831684860152606084018a905260015461ffff600160e81b8204166080860152600092835260059091529084902093516321a7700b60e11b815292936101009091049091169163434ee01691610e2c918591908a908a90600401612714565b602060405180830381865afa158015610e49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e6d919061277c565b98975050505050505050565b60007f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de610ea581611603565b85610eaf81610999565b610ecc57604051634ab5ebcd60e01b815260040160405180910390fd5b6040805160a0810182526002546001600160a01b03908116825263ffffffff8b1660208084018290528b831684860152606084018b905260015461ffff600160e81b820416608086015260009283526005909152908490209351632b377bb160e11b815292936101009091049091169163566ef76291610f55918591908b908b90600401612714565b6020604051808303816000875af1158015610f74573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f98919061277c565b9998505050505050505050565b600080516020612b31833981519152610fbd81611603565b600280546001600160a01b0319166001600160a01b0384169081179091556040519081527ff724a45d041687842411f2b977ef22ab8f43c8f1104f4592b42a00f9b34a643d90602001610d24565b600080516020612b3183398151915261102381611603565b61102b61175b565b6006546040516391d20fa160e01b81526001600160a01b03909116906391d20fa1908490349061106d908f908f908f908f908f908f908f908f90600401612795565b6000604051808303818589803b15801561108657600080fd5b5088f115801561109a573d6000803e3d6000fd5b5050505050506110aa6001600455565b50505050505050505050565b600080516020612b318339815191526110ce81611603565b6110d661175b565b600654600090611104906020850190600160a01b900463ffffffff166110fc8287611ee1565b8989896117c1565b90506000611112823461280b565b6006549091506001600160a01b0316630c0c389e60e0860135836020880161113a818a611ee1565b60808a013561114c60a08c018c61281e565b61115960c08e018e61281e565b6040518a63ffffffff1660e01b815260040161117b979695949392919061289d565b6000604051808303818589803b15801561119457600080fd5b5088f11580156111a8573d6000803e3d6000fd5b50505050505050506111ba6001600455565b5050505050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b60007f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de61121681611603565b8461122081610999565b61123d57604051634ab5ebcd60e01b815260040160405180910390fd5b604080516060810182526002546001600160a01b039081168252888116602080840191909152600154600160e81b810461ffff1684860152600654600160a01b900463ffffffff16600090815260059092529084902093516319400de160e21b81529293610100909104909116916365003784916112c4918591908b908b906004016128f3565b6020604051808303816000875af11580156112e3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611307919061277c565b979650505050505050565b600080516020612b3183398151915261132a81611603565b6001805461ffff60e81b1916600160e81b61ffff8516908102919091179091556040519081527f7af0ac740036ffb1c97b03697859d729e80a44ae5030543d64971c313565ab4d90602001610d24565b600080516020612b3183398151915261139281611603565b60018054610100600160a81b0319166101006001600160a01b038516908102919091179091556040519081527f1399be28223800f8669b3ba5f8721d9fc16fc4e8d0bbf98378791c8c5a3015e090602001610d24565b6000836113f481610999565b61141157604051634ab5ebcd60e01b815260040160405180910390fd5b604080516060810182526002546001600160a01b039081168252878116602080840191909152600154600160e81b810461ffff1684860152600654600160a01b900463ffffffff16600090815260059092529084902093516319be3d4f60e11b815292936101009091049091169163337c7a9e91611498918591908a908a906004016128f3565b602060405180830381865afa1580156114b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114d9919061277c565b9695505050505050565b600080516020612b318339815191526114fb81611603565b63ffffffff841660009081526003602052604090206111ba908484611cf5565b600080516020612b3183398151915261153381611603565b61153b61175b565b6006546001600160a01b0316630c0c389e60e084013534602086016115608188611ee1565b608088013561157260a08a018a61281e565b61157f60c08c018c61281e565b6040518a63ffffffff1660e01b81526004016115a1979695949392919061289d565b6000604051808303818589803b1580156115ba57600080fd5b5088f11580156115ce573d6000803e3d6000fd5b5050505050506109066001600455565b6000828152602081905260409020600101546115f981611603565b61079d838361194e565b61160d81336119d8565b50565b6001600160a01b03831661162d576116288282611a16565b505050565b611628838383611ac3565b611640611928565b6001805460ff1916811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b6040516001600160a01b03909116815260200160405180910390a1565b611694611afe565b6001805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa3361166f565b60007f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca831480156116fd57506116fb83836111c1565b155b15611747576001805460159061172290600160a81b90046001600160401b0316612943565b91906101000a8154816001600160401b0302191690836001600160401b031602179055505b6117518383611b21565b5060019392505050565b60026004540361177e57604051633ee5aeb560e01b815260040160405180910390fd5b6002600455565b60006117956031602d8486612969565b61179e91612993565b60e01c9392505050565b60006117ba6117b78484611bb3565b90565b9392505050565b600080836001600160401b038111156117dc576117dc6120aa565b604051908082528060200260200182016040528015611805578160200160208202803683370190505b50905060005b848110156118db57600086868381811061182757611827612611565b90506040020180360381019061183d91906129c3565b9050600081600001516001600160a01b031682602001518790604051600060405180830381858888f193505050503d8060008114611897576040519150601f19603f3d011682016040523d82523d6000602084013e61189c565b606091505b50509050808484815181106118b3576118b3612611565b9115156020928302919091018201528201516118cf9086612a19565b9450505060010161180b565b507f1f48172553121d8bf273ce457a5a3dd180d464e0add3e0143045b7fa039c346888888888888660405161191596959493929190612a6a565b60405180910390a1509695505050505050565b60015460ff161561194c5760405163d93c066560e01b815260040160405180910390fd5b565b60007f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca83148015611984575061198483836111c1565b156119ce57600180546015906119a990600160a81b90046001600160401b0316612aef565b91906101000a8154816001600160401b0302191690836001600160401b031602179055505b6117518383611bcc565b6119e282826111c1565b6109065760405163e2517d3f60e01b81526001600160a01b0382166004820152602481018390526044015b60405180910390fd5b6001600160a01b038216611a3d576040516306b7a93160e41b815260040160405180910390fd5b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611a8a576040519150601f19603f3d011682016040523d82523d6000602084013e611a8f565b606091505b505090508061162857604051631196f20d60e21b81526001600160a01b038416600482015260248101839052604401611a0d565b6001600160a01b038216611aea576040516306b7a93160e41b815260040160405180910390fd5b6116286001600160a01b0384168383611c37565b60015460ff1661194c57604051638dfc202b60e01b815260040160405180910390fd5b6000611b2d83836111c1565b611bab576000838152602081815260408083206001600160a01b03861684529091529020805460ff19166001179055611b633390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016107d4565b5060006107d4565b6000611bc3605160318486612969565b6117ba91612b12565b6000611bd883836111c1565b15611bab576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016107d4565b604080516001600160a01b03841660248201526044808201849052825180830390910181526064909101909152602080820180516001600160e01b031663a9059cbb60e01b1781528251611628938793909260009283929183919082885af180611ca7576040513d6000823e3d81fd5b50506000513d91508115611cbf578060011415611ccc565b6001600160a01b0384163b155b1561079d57604051635274afe760e01b81526001600160a01b0385166004820152602401611a0d565b82805482825590600052602060002090601f01602090048101928215611d8e5791602002820160005b83821115611d5f57833560ff1683826101000a81548160ff021916908360ff1602179055509260200192600101602081600001049283019260010302611d1e565b8015611d8c5782816101000a81549060ff0219169055600101602081600001049283019260010302611d5f565b505b50611d9a929150611d9e565b5090565b5b80821115611d9a5760008155600101611d9f565b80356001600160a01b0381168114610a2b57600080fd5b600080600060608486031215611ddf57600080fd5b611de884611db3565b9250611df660208501611db3565b9150604084013590509250925092565b600060208284031215611e1857600080fd5b81356001600160e01b0319811681146117ba57600080fd5b600060208284031215611e4257600080fd5b813580151581146117ba57600080fd5b600060208284031215611e6457600080fd5b5035919050565b803563ffffffff81168114610a2b57600080fd5b600060208284031215611e9157600080fd5b6117ba82611e6b565b6020808252825182820181905260009190848201906040850190845b81811015611ed557835160ff1683529284019291840191600101611eb6565b50909695505050505050565b600060208284031215611ef357600080fd5b6117ba82611db3565b60008060408385031215611f0f57600080fd5b82359150611f1f60208401611db3565b90509250929050565b60008083601f840112611f3a57600080fd5b5081356001600160401b03811115611f5157600080fd5b602083019150836020828501011115611f6957600080fd5b9250929050565b600080600060408486031215611f8557600080fd5b83356001600160401b03811115611f9b57600080fd5b611fa786828701611f28565b909790965060209590950135949350505050565b600060608284031215611fcd57600080fd5b50919050565b60008083601f840112611fe557600080fd5b5081356001600160401b03811115611ffc57600080fd5b6020830191508360208260061b8501011115611f6957600080fd5b600080600080600080600060e0888a03121561203257600080fd5b61203c8989611fbb565b965060608801356001600160401b038082111561205857600080fd5b6120648b838c01611fd3565b909850965060808a0135955060a08a013591508082111561208457600080fd5b506120918a828b01611f28565b989b979a5095989497959660c090950135949350505050565b634e487b7160e01b600052604160045260246000fd5b60405160c081016001600160401b03811182821017156120e2576120e26120aa565b60405290565b604051601f8201601f191681016001600160401b0381118282101715612110576121106120aa565b604052919050565b80356001600160401b0381168114610a2b57600080fd5b803561ffff81168114610a2b57600080fd5b80356001600160801b0381168114610a2b57600080fd5b6000602080838503121561216b57600080fd5b82356001600160401b038082111561218257600080fd5b818501915085601f83011261219657600080fd5b8135818111156121a8576121a86120aa565b6121b6848260051b016120e8565b818152848101925060c09182028401850191888311156121d557600080fd5b938501935b828510156122675780858a0312156121f25760008081fd5b6121fa6120c0565b61220386611e6b565b8152612210878701612118565b878201526040612221818801612118565b90820152606061223287820161212f565b908201526080612243878201612141565b9082015260a0612254878201612141565b90820152845293840193928501926121da565b50979650505050505050565b60008060008060008060e0878903121561228c57600080fd5b6122968888611fbb565b95506122a460608801611e6b565b94506122b260808801611db3565b935060a08701356001600160401b038111156122cd57600080fd5b6122d989828a01611fd3565b979a969950949794969560c090950135949350505050565b60008060008060006080868803121561230957600080fd5b61231286611e6b565b945061232060208701611db3565b93506040860135925060608601356001600160401b0381111561234257600080fd5b61234e88828901611f28565b969995985093965092949392505050565b600080600080600080600080600060e08a8c03121561237d57600080fd5b6123868a611db3565b985061239460208b01611db3565b975060408a013596506123a960608b0161212f565b955060808a01356001600160401b03808211156123c557600080fd5b6123d18d838e01611f28565b909750955060a08c01359150808211156123ea57600080fd5b506123f78c828d01611f28565b9a9d999c50979a9699959894979660c00135949350505050565b60006101008284031215611fcd57600080fd5b6000806000806060858703121561243a57600080fd5b84356001600160401b038082111561245157600080fd5b61245d88838901611fd3565b909650945060208701359350604087013591508082111561247d57600080fd5b5061248a87828801612411565b91505092959194509250565b6000806000604084860312156124ab57600080fd5b6124b484611db3565b925060208401356001600160401b038111156124cf57600080fd5b6124db86828701611f28565b9497909650939450505050565b6000602082840312156124fa57600080fd5b6117ba8261212f565b60008060006040848603121561251857600080fd5b61252184611e6b565b925060208401356001600160401b038082111561253d57600080fd5b818601915086601f83011261255157600080fd5b81358181111561256057600080fd5b8760208260051b850101111561257557600080fd5b6020830194508093505050509250925092565b60006020828403121561259a57600080fd5b81356001600160401b038111156125b057600080fd5b6125bc84828501612411565b949350505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6040815260006126016040830185876125c4565b9050826020830152949350505050565b634e487b7160e01b600052603260045260246000fd5b602080825282518282018190526000919060409081850190868401855b828110156126b7578151805163ffffffff168552868101516001600160401b039081168887015286820151168686015260608082015161ffff16908601526080808201516001600160801b039081169187019190915260a091820151169085015260c09093019290850190600101612644565b5091979650505050505050565b80546001600160401b03808216845261ffff8260401c1660208501526001600160801b03808360501c16604086015260018401549250808316606086015250808260801c16608085015250505050565b600061016060018060a01b0380885116845263ffffffff6020890151166020850152806040890151166040850152506060870151606084015261ffff608088015116608084015261276860a08401876126c4565b8061014084015261130781840185876125c4565b60006020828403121561278e57600080fd5b5051919050565b6001600160a01b038981168252881660208201526040810187905261ffff8616606082015260c0608082018190526000906127d390830186886125c4565b82810360a08401526127e68185876125c4565b9b9a5050505050505050505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156107d4576107d46127f5565b6000808335601e1984360301811261283557600080fd5b8301803591506001600160401b0382111561284f57600080fd5b602001915036819003821315611f6957600080fd5b63ffffffff61287282611e6b565b168252602081013560208301526001600160401b0361289360408301612118565b1660408301525050565b6128a78189612864565b60018060a01b038716606082015285608082015260e060a082015260006128d260e0830186886125c4565b82810360c08401526128e58185876125c4565b9a9950505050505050505050565b84516001600160a01b0390811682526020808701519091169082015260408086015161ffff1690820152600061012061292f60608401876126c4565b8061010084015261130781840185876125c4565b60006001600160401b0380831681810361295f5761295f6127f5565b6001019392505050565b6000808585111561297957600080fd5b8386111561298657600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156129bb5780818660040360031b1b83161692505b505092915050565b6000604082840312156129d557600080fd5b604051604081018181106001600160401b03821117156129f7576129f76120aa565b604052612a0383611db3565b8152602083013560208201528091505092915050565b808201808211156107d4576107d46127f5565b60008151808452602080850194506020840160005b83811015612a5f578151151587529582019590820190600101612a41565b509495945050505050565b600060e08201612a7a838a612864565b63ffffffff881660608401526001600160a01b03878116608085015260e060a0850152908590528590610100840160005b87811015612adc5782612abd85611db3565b1682526020848101359083015260409384019390910190600101612aab565b5084810360c08601526127e68187612a2c565b60006001600160401b03821680612b0857612b086127f5565b6000190192915050565b803560208310156107d457600019602084900360031b1b169291505056fea49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775a264697066735822122003e7fb8f464aa4a064aa9568ebbe17fdc3d0618228d79d9a1ced9212fb3e0e6b64736f6c63430008160033", - "sourceMap": "881:6700:77:-:0;;;1175:404;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1231:7:120;:15;;-1:-1:-1;;;;;;1699:44:84;-1:-1:-1;;;1699:44:84;;;1753:9;:22;;-1:-1:-1;;;;;;1753:22:84;-1:-1:-1;;;;;1753:22:84;;;;;;;;;;1388:12:77;;1753:22:84;;1414:5:77;;1421:10;;1433:7;;1790:26:84;;;1786:144;;1832:42;2232:4:105;1863:10:84;1832;:42::i;:::-;;1786:144;1945:9;1940:120;1964:12;:19;1960:1;:23;1940:120;;;2004:45;654:29;2033:12;2046:1;2033:15;;;;;;;;:::i;:::-;;;;;;;2004:10;;;:45;;:::i;:::-;-1:-1:-1;1985:3:84;;1940:120;;;;2075:9;2070:104;2094:7;:14;2090:1;:18;2070:104;;;2129:34;858:23;2152:7;2160:1;2152:10;;;;;;;;:::i;2129:34::-;-1:-1:-1;2110:3:84;;2070:104;;;-1:-1:-1;;1857:1:121;2061:7;:21;;;1452:8:77::1;:20:::0;;-1:-1:-1;;;;;;1452:20:77::1;-1:-1:-1::0;;;;;1452:20:77;::::1;::::0;;::::1;::::0;;;1495:37:::1;::::0;;-1:-1:-1;;;1495:37:77;;;;1452:20;;-1:-1:-1;1495:35:77::1;::::0;-1:-1:-1;1495:37:77;;::::1;::::0;-1:-1:-1;1495:37:77::1;::::0;-1:-1:-1;1495:37:77;;;;;;;;1452:20;1495:37:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1482:10;:50:::0;;::::1;::::0;;;::::1;-1:-1:-1::0;;;1482:50:77::1;-1:-1:-1::0;;;;1482:50:77;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;1542:13:77::1;:30:::0;;-1:-1:-1;;;;;1542:30:77;;::::1;-1:-1:-1::0;;;;;;1542:30:77;;::::1;::::0;;;::::1;::::0;;;-1:-1:-1;881:6700:77;;-1:-1:-1;;881:6700:77;5627:259:84;5707:4;727:22;5727:5;:18;:47;;;;-1:-1:-1;2931:4:105;2954:12;;;;;;;;;;;-1:-1:-1;;;;;2954:29:105;;;;;;;;;;;;5749:25:84;5727:47;5723:93;;;5792:13;5790:15;;5792:13;;5790:15;;-1:-1:-1;;;5790:15:84;;-1:-1:-1;;;;;5790:15:84;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;5790:15:84;;;;;-1:-1:-1;;;;;5790:15:84;;;;;;5723:93;5825:33;5842:5;5849:8;5825:16;:33::i;:::-;;5875:4;5868:11;;5627:259;;;;;:::o;6179:316:105:-;6256:4;2954:12;;;;;;;;;;;-1:-1:-1;;;;;2954:29:105;;;;;;;;;;;;6272:217;;6315:6;:12;;;;;;;;;;;-1:-1:-1;;;;;6315:29:105;;;;;;;;;:36;;-1:-1:-1;;6315:36:105;6347:4;6315:36;;;6397:12;735:10:117;;656:96;6397:12:105;-1:-1:-1;;;;;6370:40:105;6388:7;-1:-1:-1;;;;;6370:40:105;6382:4;6370:40;;;;;;;;;;-1:-1:-1;6431:4:105;6424:11;;6272:217;-1:-1:-1;6473:5:105;6466:12;;14:177:132;93:13;;-1:-1:-1;;;;;135:31:132;;125:42;;115:70;;181:1;178;171:12;115:70;14:177;;;:::o;196:127::-;257:10;252:3;248:20;245:1;238:31;288:4;285:1;278:15;312:4;309:1;302:15;328:929;393:5;446:3;439:4;431:6;427:17;423:27;413:55;;464:1;461;454:12;413:55;487:13;;519:4;-1:-1:-1;;;;;572:10:132;;;569:36;;;585:18;;:::i;:::-;631:2;628:1;624:10;663:2;657:9;726:2;722:7;717:2;713;709:11;705:25;697:6;693:38;781:6;769:10;766:22;761:2;749:10;746:18;743:46;740:72;;;792:18;;:::i;:::-;828:2;821:22;878:18;;;924:4;956:15;;;952:26;;;912:17;;;;-1:-1:-1;990:15:132;;;987:35;;;1018:1;1015;1008:12;987:35;1054:4;1046:6;1042:17;1031:28;;1068:159;1084:6;1079:3;1076:15;1068:159;;;1150:34;1180:3;1150:34;:::i;:::-;1138:47;;1205:12;;;;1101;;;;1068:159;;;1245:6;328:929;-1:-1:-1;;;;;;;328:929:132:o;1262:957::-;1427:6;1435;1443;1451;1459;1467;1520:3;1508:9;1499:7;1495:23;1491:33;1488:53;;;1537:1;1534;1527:12;1488:53;1560:40;1590:9;1560:40;:::i;:::-;1550:50;;1619:49;1664:2;1653:9;1649:18;1619:49;:::i;:::-;1712:2;1697:18;;1691:25;1609:59;;-1:-1:-1;;;;;;1765:14:132;;;1762:34;;;1792:1;1789;1782:12;1762:34;1815:72;1879:7;1870:6;1859:9;1855:22;1815:72;:::i;:::-;1805:82;;1906:49;1951:2;1940:9;1936:18;1906:49;:::i;:::-;1896:59;;1974:50;2019:3;2008:9;2004:19;1974:50;:::i;:::-;1964:60;;2070:3;2059:9;2055:19;2049:26;2033:42;;2100:2;2090:8;2087:16;2084:36;;;2116:1;2113;2106:12;2084:36;;2139:74;2205:7;2194:8;2183:9;2179:24;2139:74;:::i;:::-;2129:84;;;1262:957;;;;;;;;:::o;2224:127::-;2285:10;2280:3;2276:20;2273:1;2266:31;2316:4;2313:1;2306:15;2340:4;2337:1;2330:15;2356:280;2425:6;2478:2;2466:9;2457:7;2453:23;2449:32;2446:52;;;2494:1;2491;2484:12;2446:52;2526:9;2520:16;2576:10;2569:5;2565:22;2558:5;2555:33;2545:61;;2602:1;2599;2592:12;2545:61;2625:5;2356:280;-1:-1:-1;;;2356:280:132:o;2641:306::-;2679:3;-1:-1:-1;;;;;2749:14:132;;;-1:-1:-1;;;;;;2775:15:132;;2772:138;;2832:10;2827:3;2823:20;2820:1;2813:31;2867:4;2864:1;2857:15;2895:4;2892:1;2885:15;2772:138;2939:1;2926:15;;2641:306;-1:-1:-1;;;2641:306:132:o;:::-;881:6700:77;;;;;;", - "linkReferences": {} - }, - "deployedBytecode": { - "object": "0x60806040526004361061020e5760003560e01c8063724e78da11610118578063c358de0a116100a0578063cd88b9031161006f578063cd88b903146106af578063cfc32570146106cf578063d2ae2104146106e2578063d547741f14610721578063e395eb5c1461074157600080fd5b8063c358de0a1461062a578063c416aa511461064a578063c7b2370b1461066f578063c8f8dcd11461068f57600080fd5b806391d14854116100e757806391d14854146105065780639e94496514610526578063a217fddf146105d5578063c015bb7d146105ea578063c2803b2c1461060a57600080fd5b8063724e78da146104a0578063741bef1a146104c05780637cd44734146104e05780638624ba07146104f357600080fd5b80633146646a1161019b578063475b6d9e1161016a578063475b6d9e146103fd5780635c975abb146104105780635e280f1114610428578063709eb66414610460578063717e8a421461048057600080fd5b80633146646a1461038a57806336568abe146103aa5780633927c075146103ca5780633d85ac33146103dd57600080fd5b806316c38b3c116101e257806316c38b3c146102bf578063248a9ca3146102df57806326e67a371461031d5780632de113761461034a5780632f2ff15d1461036a57600080fd5b8062bf2e801461021357806301e336671461024d57806301ffc9a71461026f5780631095b6d71461029f575b600080fd5b34801561021f57600080fd5b5060015461023590600160e81b900461ffff1681565b60405161ffff90911681526020015b60405180910390f35b34801561025957600080fd5b5061026d610268366004611dca565b61077a565b005b34801561027b57600080fd5b5061028f61028a366004611e06565b6107a3565b6040519015158152602001610244565b3480156102ab57600080fd5b5061026d6102ba366004611dca565b6107da565b3480156102cb57600080fd5b5061026d6102da366004611e30565b6108ed565b3480156102eb57600080fd5b5061030f6102fa366004611e52565b60009081526020819052604090206001015490565b604051908152602001610244565b34801561032957600080fd5b5061033d610338366004611e7f565b610912565b6040516102449190611e9a565b34801561035657600080fd5b5061028f610365366004611ee1565b610999565b34801561037657600080fd5b5061026d610385366004611efc565b610a30565b34801561039657600080fd5b5061026d6103a5366004611f70565b610a55565b3480156103b657600080fd5b5061026d6103c5366004611efc565b610ae5565b61026d6103d8366004612017565b610afe565b3480156103e957600080fd5b5061026d6103f8366004612158565b610bb9565b61026d61040b366004612273565b610d30565b34801561041c57600080fd5b5060015460ff1661028f565b34801561043457600080fd5b50600654610448906001600160a01b031681565b6040516001600160a01b039091168152602001610244565b34801561046c57600080fd5b5061030f61047b3660046122f1565b610d72565b34801561048c57600080fd5b5061030f61049b3660046122f1565b610e79565b3480156104ac57600080fd5b5061026d6104bb366004611ee1565b610fa5565b3480156104cc57600080fd5b50600254610448906001600160a01b031681565b61026d6104ee36600461235f565b61100b565b61026d610501366004612424565b6110b6565b34801561051257600080fd5b5061028f610521366004611efc565b6111c1565b34801561053257600080fd5b50610592610541366004611e7f565b600560205260009081526040902080546001909101546001600160401b038083169261ffff600160401b820416926001600160801b03600160501b90920482169291811691600160801b9091041685565b604080516001600160401b03968716815261ffff90951660208601526001600160801b03938416908501529116606083015291909116608082015260a001610244565b3480156105e157600080fd5b5061030f600081565b3480156105f657600080fd5b5061030f610605366004612496565b6111ea565b34801561061657600080fd5b50600754610448906001600160a01b031681565b34801561063657600080fd5b5061026d6106453660046124e8565b611312565b34801561065657600080fd5b506001546104489061010090046001600160a01b031681565b34801561067b57600080fd5b5061026d61068a366004611ee1565b61137a565b34801561069b57600080fd5b5061030f6106aa366004612496565b6113e8565b3480156106bb57600080fd5b5061026d6106ca366004612503565b6114e3565b61026d6106dd366004612588565b61151b565b3480156106ee57600080fd5b5060015461070990600160a81b90046001600160401b031681565b6040516001600160401b039091168152602001610244565b34801561072d57600080fd5b5061026d61073c366004611efc565b6115de565b34801561074d57600080fd5b5060065461076590600160a01b900463ffffffff1681565b60405163ffffffff9091168152602001610244565b600080516020612b3183398151915261079281611603565b61079d848484611610565b50505050565b60006001600160e01b03198216637965db0b60e01b14806107d457506301ffc9a760e01b6001600160e01b03198316145b92915050565b600080516020612b318339815191526107f281611603565b61081c7f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de856111c1565b61083957604051635ee08b9760e01b815260040160405180910390fd5b604051637ecdf29160e11b81526001600160a01b0384811660048301526024820184905285169063fd9be52290604401600060405180830381600087803b15801561088357600080fd5b505af1158015610897573d6000803e3d6000fd5b5050604080516001600160a01b038089168252871660208201529081018590527f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb9250606001905060405180910390a150505050565b60006108f881611603565b811561090a57610906611638565b5050565b61090661168c565b63ffffffff811660009081526003602090815260409182902080548351818402810184019094528084526060939283018282801561098d57602002820191906000526020600020906000905b825461010083900a900460ff1681526020600192830181810494850194909303909202910180841161095e5790505b50505050509050919050565b60006109c57f4270fae16c6d150d00e80b689daca99e8073b1838ff2b6063a37be9d851283e4836111c1565b156109d257506000919050565b600154600160a81b90046001600160401b03161580610a165750610a167f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca836111c1565b15610a2357506001919050565b506000919050565b919050565b600082815260208190526040902060010154610a4b81611603565b61079d83836116c5565b600080516020612b31833981519152610a6d81611603565b610a7561175b565b600754604051631cca20df60e31b81526001600160a01b039091169063e65106f890610aa9908790879087906004016125ed565b600060405180830381600087803b158015610ac357600080fd5b505af1158015610ad7573d6000803e3d6000fd5b5050505061079d6001600455565b60405163dec9f03160e01b815260040160405180910390fd5b600080516020612b31833981519152610b1681611603565b610b1e61175b565b610b3e88610b2c8686611785565b610b3687876117a8565b8a8a8a6117c1565b50600754604051631cca20df60e31b81526001600160a01b039091169063e65106f890610b73908790879087906004016125ed565b600060405180830381600087803b158015610b8d57600080fd5b505af1158015610ba1573d6000803e3d6000fd5b50505050610baf6001600455565b5050505050505050565b600080516020612b31833981519152610bd181611603565b60005b8251811015610cf4576000838281518110610bf157610bf1612611565b6020908102919091018101516040805160a08082018352838501516001600160401b03908116835260608086015161ffff9081168589019081526080808901516001600160801b03908116888a01908152968a01518116948801948552888a01518616918801918252985163ffffffff1660009081526005909a529690982094518554985194518816600160501b026fffffffffffffffffffffffffffffffff60501b1995909216600160401b0269ffffffffffffffffffff1990991690841617979097179290921695909517825551600191820180549351909516600160801b026001600160c01b031990931693169290921717909155919091019050610bd4565b507fb99f6de5e22c60c178b03bfacf2daeb4b6089f5b37e0fe2c48a5d5141191fc5382604051610d249190612627565b60405180910390a15050565b600080516020612b31833981519152610d4881611603565b610d5061175b565b610d5e8787878787876117c1565b50610d696001600455565b50505050505050565b600084610d7e81610999565b610d9b57604051634ab5ebcd60e01b815260040160405180910390fd5b610da3611928565b6040805160a0810182526002546001600160a01b03908116825263ffffffff8a1660208084018290528a831684860152606084018a905260015461ffff600160e81b8204166080860152600092835260059091529084902093516321a7700b60e11b815292936101009091049091169163434ee01691610e2c918591908a908a90600401612714565b602060405180830381865afa158015610e49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e6d919061277c565b98975050505050505050565b60007f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de610ea581611603565b85610eaf81610999565b610ecc57604051634ab5ebcd60e01b815260040160405180910390fd5b6040805160a0810182526002546001600160a01b03908116825263ffffffff8b1660208084018290528b831684860152606084018b905260015461ffff600160e81b820416608086015260009283526005909152908490209351632b377bb160e11b815292936101009091049091169163566ef76291610f55918591908b908b90600401612714565b6020604051808303816000875af1158015610f74573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f98919061277c565b9998505050505050505050565b600080516020612b31833981519152610fbd81611603565b600280546001600160a01b0319166001600160a01b0384169081179091556040519081527ff724a45d041687842411f2b977ef22ab8f43c8f1104f4592b42a00f9b34a643d90602001610d24565b600080516020612b3183398151915261102381611603565b61102b61175b565b6006546040516391d20fa160e01b81526001600160a01b03909116906391d20fa1908490349061106d908f908f908f908f908f908f908f908f90600401612795565b6000604051808303818589803b15801561108657600080fd5b5088f115801561109a573d6000803e3d6000fd5b5050505050506110aa6001600455565b50505050505050505050565b600080516020612b318339815191526110ce81611603565b6110d661175b565b600654600090611104906020850190600160a01b900463ffffffff166110fc8287611ee1565b8989896117c1565b90506000611112823461280b565b6006549091506001600160a01b0316630c0c389e60e0860135836020880161113a818a611ee1565b60808a013561114c60a08c018c61281e565b61115960c08e018e61281e565b6040518a63ffffffff1660e01b815260040161117b979695949392919061289d565b6000604051808303818589803b15801561119457600080fd5b5088f11580156111a8573d6000803e3d6000fd5b50505050505050506111ba6001600455565b5050505050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b60007f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de61121681611603565b8461122081610999565b61123d57604051634ab5ebcd60e01b815260040160405180910390fd5b604080516060810182526002546001600160a01b039081168252888116602080840191909152600154600160e81b810461ffff1684860152600654600160a01b900463ffffffff16600090815260059092529084902093516319400de160e21b81529293610100909104909116916365003784916112c4918591908b908b906004016128f3565b6020604051808303816000875af11580156112e3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611307919061277c565b979650505050505050565b600080516020612b3183398151915261132a81611603565b6001805461ffff60e81b1916600160e81b61ffff8516908102919091179091556040519081527f7af0ac740036ffb1c97b03697859d729e80a44ae5030543d64971c313565ab4d90602001610d24565b600080516020612b3183398151915261139281611603565b60018054610100600160a81b0319166101006001600160a01b038516908102919091179091556040519081527f1399be28223800f8669b3ba5f8721d9fc16fc4e8d0bbf98378791c8c5a3015e090602001610d24565b6000836113f481610999565b61141157604051634ab5ebcd60e01b815260040160405180910390fd5b604080516060810182526002546001600160a01b039081168252878116602080840191909152600154600160e81b810461ffff1684860152600654600160a01b900463ffffffff16600090815260059092529084902093516319be3d4f60e11b815292936101009091049091169163337c7a9e91611498918591908a908a906004016128f3565b602060405180830381865afa1580156114b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114d9919061277c565b9695505050505050565b600080516020612b318339815191526114fb81611603565b63ffffffff841660009081526003602052604090206111ba908484611cf5565b600080516020612b3183398151915261153381611603565b61153b61175b565b6006546001600160a01b0316630c0c389e60e084013534602086016115608188611ee1565b608088013561157260a08a018a61281e565b61157f60c08c018c61281e565b6040518a63ffffffff1660e01b81526004016115a1979695949392919061289d565b6000604051808303818589803b1580156115ba57600080fd5b5088f11580156115ce573d6000803e3d6000fd5b5050505050506109066001600455565b6000828152602081905260409020600101546115f981611603565b61079d838361194e565b61160d81336119d8565b50565b6001600160a01b03831661162d576116288282611a16565b505050565b611628838383611ac3565b611640611928565b6001805460ff1916811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b6040516001600160a01b03909116815260200160405180910390a1565b611694611afe565b6001805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa3361166f565b60007f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca831480156116fd57506116fb83836111c1565b155b15611747576001805460159061172290600160a81b90046001600160401b0316612943565b91906101000a8154816001600160401b0302191690836001600160401b031602179055505b6117518383611b21565b5060019392505050565b60026004540361177e57604051633ee5aeb560e01b815260040160405180910390fd5b6002600455565b60006117956031602d8486612969565b61179e91612993565b60e01c9392505050565b60006117ba6117b78484611bb3565b90565b9392505050565b600080836001600160401b038111156117dc576117dc6120aa565b604051908082528060200260200182016040528015611805578160200160208202803683370190505b50905060005b848110156118db57600086868381811061182757611827612611565b90506040020180360381019061183d91906129c3565b9050600081600001516001600160a01b031682602001518790604051600060405180830381858888f193505050503d8060008114611897576040519150601f19603f3d011682016040523d82523d6000602084013e61189c565b606091505b50509050808484815181106118b3576118b3612611565b9115156020928302919091018201528201516118cf9086612a19565b9450505060010161180b565b507f1f48172553121d8bf273ce457a5a3dd180d464e0add3e0143045b7fa039c346888888888888660405161191596959493929190612a6a565b60405180910390a1509695505050505050565b60015460ff161561194c5760405163d93c066560e01b815260040160405180910390fd5b565b60007f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca83148015611984575061198483836111c1565b156119ce57600180546015906119a990600160a81b90046001600160401b0316612aef565b91906101000a8154816001600160401b0302191690836001600160401b031602179055505b6117518383611bcc565b6119e282826111c1565b6109065760405163e2517d3f60e01b81526001600160a01b0382166004820152602481018390526044015b60405180910390fd5b6001600160a01b038216611a3d576040516306b7a93160e41b815260040160405180910390fd5b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611a8a576040519150601f19603f3d011682016040523d82523d6000602084013e611a8f565b606091505b505090508061162857604051631196f20d60e21b81526001600160a01b038416600482015260248101839052604401611a0d565b6001600160a01b038216611aea576040516306b7a93160e41b815260040160405180910390fd5b6116286001600160a01b0384168383611c37565b60015460ff1661194c57604051638dfc202b60e01b815260040160405180910390fd5b6000611b2d83836111c1565b611bab576000838152602081815260408083206001600160a01b03861684529091529020805460ff19166001179055611b633390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016107d4565b5060006107d4565b6000611bc3605160318486612969565b6117ba91612b12565b6000611bd883836111c1565b15611bab576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016107d4565b604080516001600160a01b03841660248201526044808201849052825180830390910181526064909101909152602080820180516001600160e01b031663a9059cbb60e01b1781528251611628938793909260009283929183919082885af180611ca7576040513d6000823e3d81fd5b50506000513d91508115611cbf578060011415611ccc565b6001600160a01b0384163b155b1561079d57604051635274afe760e01b81526001600160a01b0385166004820152602401611a0d565b82805482825590600052602060002090601f01602090048101928215611d8e5791602002820160005b83821115611d5f57833560ff1683826101000a81548160ff021916908360ff1602179055509260200192600101602081600001049283019260010302611d1e565b8015611d8c5782816101000a81549060ff0219169055600101602081600001049283019260010302611d5f565b505b50611d9a929150611d9e565b5090565b5b80821115611d9a5760008155600101611d9f565b80356001600160a01b0381168114610a2b57600080fd5b600080600060608486031215611ddf57600080fd5b611de884611db3565b9250611df660208501611db3565b9150604084013590509250925092565b600060208284031215611e1857600080fd5b81356001600160e01b0319811681146117ba57600080fd5b600060208284031215611e4257600080fd5b813580151581146117ba57600080fd5b600060208284031215611e6457600080fd5b5035919050565b803563ffffffff81168114610a2b57600080fd5b600060208284031215611e9157600080fd5b6117ba82611e6b565b6020808252825182820181905260009190848201906040850190845b81811015611ed557835160ff1683529284019291840191600101611eb6565b50909695505050505050565b600060208284031215611ef357600080fd5b6117ba82611db3565b60008060408385031215611f0f57600080fd5b82359150611f1f60208401611db3565b90509250929050565b60008083601f840112611f3a57600080fd5b5081356001600160401b03811115611f5157600080fd5b602083019150836020828501011115611f6957600080fd5b9250929050565b600080600060408486031215611f8557600080fd5b83356001600160401b03811115611f9b57600080fd5b611fa786828701611f28565b909790965060209590950135949350505050565b600060608284031215611fcd57600080fd5b50919050565b60008083601f840112611fe557600080fd5b5081356001600160401b03811115611ffc57600080fd5b6020830191508360208260061b8501011115611f6957600080fd5b600080600080600080600060e0888a03121561203257600080fd5b61203c8989611fbb565b965060608801356001600160401b038082111561205857600080fd5b6120648b838c01611fd3565b909850965060808a0135955060a08a013591508082111561208457600080fd5b506120918a828b01611f28565b989b979a5095989497959660c090950135949350505050565b634e487b7160e01b600052604160045260246000fd5b60405160c081016001600160401b03811182821017156120e2576120e26120aa565b60405290565b604051601f8201601f191681016001600160401b0381118282101715612110576121106120aa565b604052919050565b80356001600160401b0381168114610a2b57600080fd5b803561ffff81168114610a2b57600080fd5b80356001600160801b0381168114610a2b57600080fd5b6000602080838503121561216b57600080fd5b82356001600160401b038082111561218257600080fd5b818501915085601f83011261219657600080fd5b8135818111156121a8576121a86120aa565b6121b6848260051b016120e8565b818152848101925060c09182028401850191888311156121d557600080fd5b938501935b828510156122675780858a0312156121f25760008081fd5b6121fa6120c0565b61220386611e6b565b8152612210878701612118565b878201526040612221818801612118565b90820152606061223287820161212f565b908201526080612243878201612141565b9082015260a0612254878201612141565b90820152845293840193928501926121da565b50979650505050505050565b60008060008060008060e0878903121561228c57600080fd5b6122968888611fbb565b95506122a460608801611e6b565b94506122b260808801611db3565b935060a08701356001600160401b038111156122cd57600080fd5b6122d989828a01611fd3565b979a969950949794969560c090950135949350505050565b60008060008060006080868803121561230957600080fd5b61231286611e6b565b945061232060208701611db3565b93506040860135925060608601356001600160401b0381111561234257600080fd5b61234e88828901611f28565b969995985093965092949392505050565b600080600080600080600080600060e08a8c03121561237d57600080fd5b6123868a611db3565b985061239460208b01611db3565b975060408a013596506123a960608b0161212f565b955060808a01356001600160401b03808211156123c557600080fd5b6123d18d838e01611f28565b909750955060a08c01359150808211156123ea57600080fd5b506123f78c828d01611f28565b9a9d999c50979a9699959894979660c00135949350505050565b60006101008284031215611fcd57600080fd5b6000806000806060858703121561243a57600080fd5b84356001600160401b038082111561245157600080fd5b61245d88838901611fd3565b909650945060208701359350604087013591508082111561247d57600080fd5b5061248a87828801612411565b91505092959194509250565b6000806000604084860312156124ab57600080fd5b6124b484611db3565b925060208401356001600160401b038111156124cf57600080fd5b6124db86828701611f28565b9497909650939450505050565b6000602082840312156124fa57600080fd5b6117ba8261212f565b60008060006040848603121561251857600080fd5b61252184611e6b565b925060208401356001600160401b038082111561253d57600080fd5b818601915086601f83011261255157600080fd5b81358181111561256057600080fd5b8760208260051b850101111561257557600080fd5b6020830194508093505050509250925092565b60006020828403121561259a57600080fd5b81356001600160401b038111156125b057600080fd5b6125bc84828501612411565b949350505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6040815260006126016040830185876125c4565b9050826020830152949350505050565b634e487b7160e01b600052603260045260246000fd5b602080825282518282018190526000919060409081850190868401855b828110156126b7578151805163ffffffff168552868101516001600160401b039081168887015286820151168686015260608082015161ffff16908601526080808201516001600160801b039081169187019190915260a091820151169085015260c09093019290850190600101612644565b5091979650505050505050565b80546001600160401b03808216845261ffff8260401c1660208501526001600160801b03808360501c16604086015260018401549250808316606086015250808260801c16608085015250505050565b600061016060018060a01b0380885116845263ffffffff6020890151166020850152806040890151166040850152506060870151606084015261ffff608088015116608084015261276860a08401876126c4565b8061014084015261130781840185876125c4565b60006020828403121561278e57600080fd5b5051919050565b6001600160a01b038981168252881660208201526040810187905261ffff8616606082015260c0608082018190526000906127d390830186886125c4565b82810360a08401526127e68185876125c4565b9b9a5050505050505050505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156107d4576107d46127f5565b6000808335601e1984360301811261283557600080fd5b8301803591506001600160401b0382111561284f57600080fd5b602001915036819003821315611f6957600080fd5b63ffffffff61287282611e6b565b168252602081013560208301526001600160401b0361289360408301612118565b1660408301525050565b6128a78189612864565b60018060a01b038716606082015285608082015260e060a082015260006128d260e0830186886125c4565b82810360c08401526128e58185876125c4565b9a9950505050505050505050565b84516001600160a01b0390811682526020808701519091169082015260408086015161ffff1690820152600061012061292f60608401876126c4565b8061010084015261130781840185876125c4565b60006001600160401b0380831681810361295f5761295f6127f5565b6001019392505050565b6000808585111561297957600080fd5b8386111561298657600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156129bb5780818660040360031b1b83161692505b505092915050565b6000604082840312156129d557600080fd5b604051604081018181106001600160401b03821117156129f7576129f76120aa565b604052612a0383611db3565b8152602083013560208201528091505092915050565b808201808211156107d4576107d46127f5565b60008151808452602080850194506020840160005b83811015612a5f578151151587529582019590820190600101612a41565b509495945050505050565b600060e08201612a7a838a612864565b63ffffffff881660608401526001600160a01b03878116608085015260e060a0850152908590528590610100840160005b87811015612adc5782612abd85611db3565b1682526020848101359083015260409384019390910190600101612aab565b5084810360c08601526127e68187612a2c565b60006001600160401b03821680612b0857612b086127f5565b6000190192915050565b803560208310156107d457600019602084900360031b1b169291505056fea49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775a264697066735822122003e7fb8f464aa4a064aa9568ebbe17fdc3d0618228d79d9a1ced9212fb3e0e6b64736f6c63430008160033", - "sourceMap": "881:6700:77:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;955:34:84;;;;;;;;;;-1:-1:-1;955:34:84;;;;-1:-1:-1;;;955:34:84;;;;;;;;;188:6:132;176:19;;;158:38;;146:2;131:18;955:34:84;;;;;;;;4782:214;;;;;;;;;;-1:-1:-1;4782:214:84;;;;;:::i;:::-;;:::i;:::-;;2565:202:105;;;;;;;;;;-1:-1:-1;2565:202:105;;;;;:::i;:::-;;:::i;:::-;;;1174:14:132;;1167:22;1149:41;;1137:2;1122:18;2565:202:105;1009:187:132;4319:273:84;;;;;;;;;;-1:-1:-1;4319:273:84;;;;;:::i;:::-;;:::i;3186:174::-;;;;;;;;;;-1:-1:-1;3186:174:84;;;;;:::i;:::-;;:::i;3810:120:105:-;;;;;;;;;;-1:-1:-1;3810:120:105;;;;;:::i;:::-;3875:7;3901:12;;;;;;;;;;:22;;;;3810:120;;;;1810:25:132;;;1798:2;1783:18;3810:120:105;1664:177:132;5247:135:84;;;;;;;;;;-1:-1:-1;5247:135:84;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;2678:285::-;;;;;;;;;;-1:-1:-1;2678:285:84;;;;;:::i;:::-;;:::i;4226:136:105:-;;;;;;;;;;-1:-1:-1;4226:136:105;;;;;:::i;:::-;;:::i;2938:195:77:-;;;;;;;;;;-1:-1:-1;2938:195:77;;;;;:::i;:::-;;:::i;6390:137:84:-;;;;;;;;;;-1:-1:-1;6390:137:84;;;;;:::i;:::-;;:::i;2458:474:77:-;;;;;;:::i;:::-;;:::i;1606:498::-;;;;;;;;;;-1:-1:-1;1606:498:77;;;;;:::i;:::-;;:::i;2110:342::-;;;;;;:::i;:::-;;:::i;1850:84:120:-;;;;;;;;;;-1:-1:-1;1920:7:120;;;;1850:84;;1061:23:77;;;;;;;;;;-1:-1:-1;1061:23:77;;;;-1:-1:-1;;;;;1061:23:77;;;;;;-1:-1:-1;;;;;9632:32:132;;;9614:51;;9602:2;9587:18;1061:23:77;9468:203:132;5960:512:77;;;;;;;;;;-1:-1:-1;5960:512:77;;;;;:::i;:::-;;:::i;4923:529::-;;;;;;;;;;-1:-1:-1;4923:529:77;;;;;:::i;:::-;;:::i;3481:150:84:-;;;;;;;;;;-1:-1:-1;3481:150:84;;;;;:::i;:::-;;:::i;995:24::-;;;;;;;;;;-1:-1:-1;995:24:84;;;;-1:-1:-1;;;;;995:24:84;;;3567:486:77;;;;;;:::i;:::-;;:::i;4059:831::-;;;;;;:::i;:::-;;:::i;2854:136:105:-;;;;;;;;;;-1:-1:-1;2854:136:105;;;;;:::i;:::-;;:::i;983:52:77:-;;;;;;;;;;-1:-1:-1;983:52:77;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;983:52:77;;;;;-1:-1:-1;;;983:52:77;;;;-1:-1:-1;;;;;;;;983:52:77;;;;;;;;;;-1:-1:-1;;;983:52:77;;;;;;;;;;-1:-1:-1;;;;;12888:15:132;;;12870:34;;12952:6;12940:19;;;12935:2;12920:18;;12913:47;-1:-1:-1;;;;;13049:15:132;;;13029:18;;;13022:43;13101:15;;13096:2;13081:18;;13074:43;13154:15;;;;13148:3;13133:19;;13126:44;12820:3;12805:19;983:52:77;12580:596:132;2187:49:105;;;;;;;;;;-1:-1:-1;2187:49:105;2232:4;2187:49;;5487:443:77;;;;;;;;;;-1:-1:-1;5487:443:77;;;;;:::i;:::-;;:::i;1140:28::-;;;;;;;;;;-1:-1:-1;1140:28:77;;;;-1:-1:-1;;;;;1140:28:77;;;3924:194:84;;;;;;;;;;-1:-1:-1;3924:194:84;;;;;:::i;:::-;;:::i;888:27::-;;;;;;;;;;-1:-1:-1;888:27:84;;;;;;;-1:-1:-1;;;;;888:27:84;;;3689:165;;;;;;;;;;-1:-1:-1;3689:165:84;;;;;:::i;:::-;;:::i;6478:390:77:-;;;;;;;;;;-1:-1:-1;6478:390:77;;;;;:::i;:::-;;:::i;5002:165:84:-;;;;;;;;;;-1:-1:-1;5002:165:84;;;;;:::i;:::-;;:::i;3139:422:77:-;;;;;;:::i;:::-;;:::i;922:27:84:-;;;;;;;;;;-1:-1:-1;922:27:84;;;;-1:-1:-1;;;922:27:84;;-1:-1:-1;;;;;922:27:84;;;;;;-1:-1:-1;;;;;15087:31:132;;;15069:50;;15057:2;15042:18;922:27:84;14925:200:132;4642:138:105;;;;;;;;;;-1:-1:-1;4642:138:105;;;;;:::i;:::-;;:::i;1090:24:77:-;;;;;;;;;;-1:-1:-1;1090:24:77;;;;-1:-1:-1;;;1090:24:77;;;;;;;;;15304:10:132;15292:23;;;15274:42;;15262:2;15247:18;1090:24:77;15130:192:132;4782:214:84;-1:-1:-1;;;;;;;;;;;2464:16:105;2475:4;2464:10;:16::i;:::-;4945:44:84::1;4968:6;4976:3;4981:7;4945:22;:44::i;:::-;4782:214:::0;;;;:::o;2565:202:105:-;2650:4;-1:-1:-1;;;;;;2673:47:105;;-1:-1:-1;;;2673:47:105;;:87;;-1:-1:-1;;;;;;;;;;862:40:123;;;2724:36:105;2666:94;2565:202;-1:-1:-1;;2565:202:105:o;4319:273:84:-;-1:-1:-1;;;;;;;;;;;2464:16:105;2475:4;2464:10;:16::i;:::-;4429:31:84::1;654:29;4455:4;4429:7;:31::i;:::-;4424:68;;4469:23;;-1:-1:-1::0;;;4469:23:84::1;;;;;;;;;;;4424:68;4502:40;::::0;-1:-1:-1;;;4502:40:84;;-1:-1:-1;;;;;15519:32:132;;;4502:40:84::1;::::0;::::1;15501:51:132::0;15568:18;;;15561:34;;;4502:26:84;::::1;::::0;::::1;::::0;15474:18:132;;4502:40:84::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;4557:28:84::1;::::0;;-1:-1:-1;;;;;15864:15:132;;;15846:34;;15916:15;;15911:2;15896:18;;15889:43;15948:18;;;15941:34;;;4557:28:84::1;::::0;-1:-1:-1;15796:2:132;15781:18;;-1:-1:-1;4557:28:84::1;;;;;;;4319:273:::0;;;;:::o;3186:174::-;2232:4:105;2464:16;2232:4;2464:10;:16::i;:::-;3271:7:84::1;3267:87;;;3294:8;:6;:8::i;:::-;3186:174:::0;;:::o;3267:87::-:1;3333:10;:8;:10::i;5247:135::-:0;5349:26;;;;;;;:20;:26;;;;;;;;;5342:33;;;;;;;;;;;;;;;;;5316:14;;5342:33;;;5349:26;5342:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5247:135;;;:::o;2678:285::-;2732:4;2752:26;792:21;2770:7;2752;:26::i;:::-;2748:209;;;-1:-1:-1;2801:5:84;;2678:285;-1:-1:-1;2678:285:84:o;2748:209::-;2827:13;;-1:-1:-1;;;2827:13:84;;-1:-1:-1;;;;;2827:13:84;:18;;:49;;;2849:27;727:22;2868:7;2849;:27::i;:::-;2823:134;;;-1:-1:-1;2899:4:84;;2678:285;-1:-1:-1;2678:285:84:o;2823:134::-;-1:-1:-1;2941:5:84;;2678:285;-1:-1:-1;2678:285:84:o;2823:134::-;2678:285;;;:::o;4226:136:105:-;3875:7;3901:12;;;;;;;;;;:22;;;2464:16;2475:4;2464:10;:16::i;:::-;4330:25:::1;4341:4;4347:7;4330:10;:25::i;2938:195:77:-:0;-1:-1:-1;;;;;;;;;;;2464:16:105;2475:4;2464:10;:16::i;:::-;2500:21:121::1;:19;:21::i;:::-;3073:13:77::2;::::0;3054:72:::2;::::0;-1:-1:-1;;;3054:72:77;;-1:-1:-1;;;;;3073:13:77;;::::2;::::0;3054:52:::2;::::0;:72:::2;::::0;3107:7;;;;3116:9;;3054:72:::2;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;2542:20:121::1;1857:1:::0;3068:7;:21;2888:208;6390:137:84;6489:31;;-1:-1:-1;;;6489:31:84;;;;;;;;;;;2458:474:77;-1:-1:-1;;;;;;;;;;;2464:16:105;2475:4;2464:10;:16::i;:::-;2500:21:121::1;:19;:21::i;:::-;2742:101:77::2;2754:7;2763:16;:7;;:14;:16::i;:::-;2781:21;:7;;:19;:21::i;:::-;2804:17;;2823:19;2742:11;:101::i;:::-;-1:-1:-1::0;2872:13:77::2;::::0;2853:72:::2;::::0;-1:-1:-1;;;2853:72:77;;-1:-1:-1;;;;;2872:13:77;;::::2;::::0;2853:52:::2;::::0;:72:::2;::::0;2906:7;;;;2915:9;;2853:72:::2;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;2542:20:121::1;1857:1:::0;3068:7;:21;2888:208;2542:20:::1;2458:474:77::0;;;;;;;;:::o;1606:498::-;-1:-1:-1;;;;;;;;;;;2464:16:105;2475:4;2464:10;:16::i;:::-;1706:9:77::1;1701:361;1725:7;:14;1721:1;:18;1701:361;;;1760:27;1790:7;1798:1;1790:10;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;1840:211:::1;::::0;;::::1;::::0;;::::1;::::0;;1867:22;;::::1;::::0;-1:-1:-1;;;;;1840:211:77;;::::1;::::0;;1907:19:::1;::::0;;::::1;::::0;1840:211:::1;::::0;;::::1;::::0;;::::1;::::0;;;1944:20:::1;::::0;;::::1;::::0;-1:-1:-1;;;;;1840:211:77;;::::1;::::0;;;;;;1982:15;;::::1;::::0;1840:211;::::1;::::0;;;;;;2015:22;;::::1;::::0;1840:211;::::1;::::0;;;;;;1824:12;;1814:23:::1;;-1:-1:-1::0;1814:23:77;;;:9:::1;:23:::0;;;;;;;:237;;;;;;;;;::::1;-1:-1:-1::0;;;1814:237:77::1;-1:-1:-1::0;;;;1814:237:77;;;::::1;-1:-1:-1::0;;;1814:237:77::1;-1:-1:-1::0;;1814:237:77;;;;;::::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;;;;;::::1;::::0;;;;;;::::1;-1:-1:-1::0;;;1814:237:77::1;-1:-1:-1::0;;;;;;1814:237:77;;;;::::1;::::0;;;;::::1;::::0;;;1741:3;;;::::1;::::0;-1:-1:-1;1701:361:77::1;;;;2076:21;2089:7;2076:21;;;;;;:::i;:::-;;;;;;;;1606:498:::0;;:::o;2110:342::-;-1:-1:-1;;;;;;;;;;;2464:16:105;2475:4;2464:10;:16::i;:::-;2500:21:121::1;:19;:21::i;:::-;2369:76:77::2;2381:7;2390;2399:5;2406:17;;2425:19;2369:11;:76::i;:::-;;2542:20:121::1;1857:1:::0;3068:7;:21;2888:208;2542:20:::1;2110:342:77::0;;;;;;;:::o;5960:512::-;6149:11;6117:7;2304:15:84;2311:7;2304:6;:15::i;:::-;2299:73;;2342:19;;-1:-1:-1;;;2342:19:84;;;;;;;;;;;2299:73;1474:19:120::1;:17;:19::i;:::-;6214:161:77::2;::::0;;::::2;::::0;::::2;::::0;;6253:9:::2;::::0;-1:-1:-1;;;;;6253:9:77;;::::2;6214:161:::0;;::::2;::::0;::::2;;::::0;;::::2;::::0;;;;;::::2;::::0;;;;;;;;;;6253:9;6345:20;::::2;-1:-1:-1::0;;;6345:20:77;::::2;;6214:161:::0;;;;6172:39:::2;6436:18:::0;;;:9:::2;:18:::0;;;;;;;6391:74;;-1:-1:-1;;;6391:74:77;;6214:161;;6253:9:::2;6407:12:::0;;::::2;::::0;;::::2;::::0;6391:36:::2;::::0;:74:::2;::::0;6214:161;;6436:18;6456:8;;;;6391:74:::2;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6385:80:::0;5960:512;-1:-1:-1;;;;;;;;5960:512:77:o;4923:529::-;5123:11;654:29:84;2464:16:105;2475:4;2464:10;:16::i;:::-;5105:7:77::1;2304:15:84;2311:7;2304:6;:15::i;:::-;2299:73;;2342:19;;-1:-1:-1::0;;;2342:19:84::1;;;;;;;;;;;2299:73;5188:161:77::2;::::0;;::::2;::::0;::::2;::::0;;5227:9:::2;::::0;-1:-1:-1;;;;;5227:9:77;;::::2;5188:161:::0;;::::2;::::0;::::2;;::::0;;::::2;::::0;;;;;::::2;::::0;;;;;;;;;;5227:9;5319:20;::::2;-1:-1:-1::0;;;5319:20:77;::::2;;5188:161:::0;;;;5146:39:::2;5416:18:::0;;;:9:::2;:18:::0;;;;;;;5365:80;;-1:-1:-1;;;5365:80:77;;5188:161;;5227:9:::2;5381:12:::0;;::::2;::::0;;::::2;::::0;5365:42:::2;::::0;:80:::2;::::0;5188:161;;5416:18;5436:8;;;;5365:80:::2;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5359:86:::0;4923:529;-1:-1:-1;;;;;;;;;4923:529:77:o;3481:150:84:-;-1:-1:-1;;;;;;;;;;;2464:16:105;2475:4;2464:10;:16::i;:::-;3563:9:84::1;:22:::0;;-1:-1:-1;;;;;;3563:22:84::1;-1:-1:-1::0;;;;;3563:22:84;::::1;::::0;;::::1;::::0;;;3600:24:::1;::::0;9614:51:132;;;3600:24:84::1;::::0;9602:2:132;9587:18;3600:24:84::1;9468:203:132::0;3567:486:77;-1:-1:-1;;;;;;;;;;;2464:16:105;2475:4;2464:10;:16::i;:::-;2500:21:121::1;:19;:21::i;:::-;3860:8:77::2;::::0;3839:207:::2;::::0;-1:-1:-1;;;3839:207:77;;-1:-1:-1;;;;;3860:8:77;;::::2;::::0;3839:40:::2;::::0;3904:9;;3888::::2;::::0;3839:207:::2;::::0;3929:5;;3948:3;;3965:5;;3984:6;;4004:8;;;;4026:10;;;;3839:207:::2;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;2542:20:121::1;1857:1:::0;3068:7;:21;2888:208;2542:20:::1;3567:486:77::0;;;;;;;;;;:::o;4059:831::-;-1:-1:-1;;;;;;;;;;;2464:16:105;2475:4;2464:10;:16::i;:::-;2500:21:121::1;:19;:21::i;:::-;4380:10:77::2;::::0;4302:13:::2;::::0;4318:185:::2;::::0;4343:23:::2;::::0;::::2;::::0;-1:-1:-1;;;4380:10:77;::::2;;;4404:25;4343:23:::0;;4404:25:::2;:::i;:::-;4443:17;;4474:19;4318:11;:185::i;:::-;4302:201:::0;-1:-1:-1;4514:13:77::2;4530:17;4302:201:::0;4530:9:::2;:17;:::i;:::-;4617:8;::::0;4514:33;;-1:-1:-1;;;;;;4617:8:77::2;4596:40;4657:25;::::0;::::2;;4514:33:::0;4698:23:::2;::::0;::::2;4735:25;4698:23:::0;4657:16;4735:25:::2;:::i;:::-;4774:21;::::0;::::2;;4809:24;;::::0;::::2;4774:16:::0;4809:24:::2;:::i;:::-;4847:26;;::::0;::::2;:16:::0;:26:::2;:::i;:::-;4596:287;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;4292:598;;2542:20:121::1;1857:1:::0;3068:7;:21;2888:208;2542:20:::1;4059:831:77::0;;;;;:::o;2854:136:105:-;2931:4;2954:12;;;;;;;;;;;-1:-1:-1;;;;;2954:29:105;;;;;;;;;;;;;;;2854:136::o;5487:443:77:-;5632:11;654:29:84;2464:16:105;2475:4;2464:10;:16::i;:::-;5614:7:77::1;2304:15:84;2311:7;2304:6;:15::i;:::-;2299:73;;2342:19;;-1:-1:-1::0;;;2342:19:84::1;;;;;;;;;;;2299:73;5704:120:77::2;::::0;;::::2;::::0;::::2;::::0;;5750:9:::2;::::0;-1:-1:-1;;;;;5750:9:77;;::::2;5704:120:::0;;;;::::2;;::::0;;::::2;::::0;;;;5750:9;5794:20;-1:-1:-1;;;5794:20:77;::::2;;;5704:120:::0;;;;5901:10:::2;::::0;-1:-1:-1;;;5901:10:77;::::2;;;-1:-1:-1::0;5891:21:77;;;:9:::2;:21:::0;;;;;;;5840:83;;-1:-1:-1;;;5840:83:77;;5704:120;;5750:9:::2;5856:12:::0;;::::2;::::0;;::::2;::::0;5840:42:::2;::::0;:83:::2;::::0;5704:120;;5891:21;5914:8;;;;5840:83:::2;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5834:89:::0;5487:443;-1:-1:-1;;;;;;;5487:443:77:o;3924:194:84:-;-1:-1:-1;;;;;;;;;;;2464:16:105;2475:4;2464:10;:16::i;:::-;4020:20:84::1;:37:::0;;-1:-1:-1;;;;4020:37:84::1;-1:-1:-1::0;;;4020:37:84::1;::::0;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;4072:39:::1;::::0;158:38:132;;;4072:39:84::1;::::0;146:2:132;131:18;4072:39:84::1;14:188:132::0;3689:165:84;-1:-1:-1;;;;;;;;;;;2464:16:105;2475:4;2464:10;:16::i;:::-;3777:12:84::1;:28:::0;;-1:-1:-1;;;;;;3777:28:84::1;;-1:-1:-1::0;;;;;3777:28:84;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;3820:27:::1;::::0;9614:51:132;;;3820:27:84::1;::::0;9602:2:132;9587:18;3820:27:84::1;9468:203:132::0;6478:390:77;6576:11;6558:7;2304:15:84;2311:7;2304:6;:15::i;:::-;2299:73;;2342:19;;-1:-1:-1;;;2342:19:84;;;;;;;;;;;2299:73;6648:120:77::1;::::0;;::::1;::::0;::::1;::::0;;6694:9:::1;::::0;-1:-1:-1;;;;;6694:9:77;;::::1;6648:120:::0;;;;::::1;;::::0;;::::1;::::0;;;;6694:9;6738:20;-1:-1:-1;;;6738:20:77;::::1;;;6648:120:::0;;;;6839:10:::1;::::0;-1:-1:-1;;;6839:10:77;::::1;;;-1:-1:-1::0;6829:21:77;;;:9:::1;:21:::0;;;;;;;6784:77;;-1:-1:-1;;;6784:77:77;;6648:120;;6694:9:::1;6800:12:::0;;::::1;::::0;;::::1;::::0;6784:36:::1;::::0;:77:::1;::::0;6648:120;;6829:21;6852:8;;;;6784:77:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6778:83:::0;6478:390;-1:-1:-1;;;;;;6478:390:77:o;5002:165:84:-;-1:-1:-1;;;;;;;;;;;2464:16:105;2475:4;2464:10;:16::i;:::-;5119:26:84::1;::::0;::::1;;::::0;;;:20:::1;:26;::::0;;;;:41:::1;::::0;5148:12;;5119:41:::1;:::i;3139:422:77:-:0;-1:-1:-1;;;;;;;;;;;2464:16:105;2475:4;2464:10;:16::i;:::-;2500:21:121::1;:19;:21::i;:::-;3284:8:77::2;::::0;-1:-1:-1;;;;;3284:8:77::2;3263:40;3328:25;::::0;::::2;;3312:9;3369:23;::::0;::::2;3406:25;3369:23:::0;3328:16;3406:25:::2;:::i;:::-;3445:21;::::0;::::2;;3480:24;;::::0;::::2;3445:16:::0;3480:24:::2;:::i;:::-;3518:26;;::::0;::::2;:16:::0;:26:::2;:::i;:::-;3263:291;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;2542:20:121::1;1857:1:::0;3068:7;:21;2888:208;4642:138:105;3875:7;3901:12;;;;;;;;;;:22;;;2464:16;2475:4;2464:10;:16::i;:::-;4747:26:::1;4759:4;4765:7;4747:11;:26::i;3199:103::-:0;3265:30;3276:4;735:10:117;3265::105;:30::i;:::-;3199:103;:::o;896:222:44:-;-1:-1:-1;;;;;987:22:44;;983:129;;1025:19;1032:3;1037:6;1025;:19::i;:::-;896:222;;;:::o;983:129::-;1075:26;1081:6;1089:3;1094:6;1075:5;:26::i;2463:115:120:-;1474:19;:17;:19::i;:::-;2532:4:::1;2522:14:::0;;-1:-1:-1;;2522:14:120::1;::::0;::::1;::::0;;2551:20:::1;735:10:117::0;2558:12:120::1;2551:20;::::0;-1:-1:-1;;;;;9632:32:132;;;9614:51;;9602:2;9587:18;2551:20:120::1;;;;;;;2463:115::o:0;2710:117::-;1721:16;:14;:16::i;:::-;2768:7:::1;:15:::0;;-1:-1:-1;;2768:15:120::1;::::0;;2798:22:::1;735:10:117::0;2807:12:120::1;656:96:117::0;5627:259:84;5707:4;727:22;5727:5;:18;:47;;;;;5750:24;5758:5;5765:8;5750:7;:24::i;:::-;5749:25;5727:47;5723:93;;;5792:13;5790:15;;5792:13;;5790:15;;-1:-1:-1;;;5790:15:84;;-1:-1:-1;;;;;5790:15:84;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;5790:15:84;;;;;-1:-1:-1;;;;;5790:15:84;;;;;;5723:93;5825:33;5842:5;5849:8;5825:16;:33::i;:::-;-1:-1:-1;5875:4:84;;5627:259;-1:-1:-1;;;5627:259:84:o;2575:307:121:-;1899:1;2702:7;;:18;2698:86;;2743:30;;-1:-1:-1;;;2743:30:121;;;;;;;;;;;2698:86;1899:1;2858:7;:17;2575:307::o;2671:150:48:-;2734:6;2773:39;706:2;655;2773:7;;:39;:::i;:::-;2766:47;;;:::i;:::-;2759:55;;;2671:150;-1:-1:-1;;;2671:150:48:o;2976:130::-;3044:7;3070:29;:17;3079:7;;3070:8;:17::i;:::-;1210:15:40;1084:151;3070:29:48;3063:36;2976:130;-1:-1:-1;;;2976:130:48:o;6874:705:77:-;7091:13;;7151:17;-1:-1:-1;;;;;7140:36:77;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7140:36:77;;7116:60;;7191:9;7186:302;7206:28;;;7186:302;;;7255:29;7287:17;;7305:1;7287:20;;;;;;;:::i;:::-;;;;;;7255:52;;;;;;;;;;:::i;:::-;;;7323:9;7338:5;:14;;;-1:-1:-1;;;;;7338:19:77;7366:5;:12;;;7385:19;7338:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7322:88;;;7438:4;7425:7;7433:1;7425:10;;;;;;;;:::i;:::-;:17;;;:10;;;;;;;;;;:17;7465:12;;;7456:21;;;;:::i;:::-;;-1:-1:-1;;;7236:3:77;;7186:302;;;;7502:70;7520:7;7529;7538:5;7545:17;;7564:7;7502:70;;;;;;;;;;;:::i;:::-;;;;;;;;7106:473;6874:705;;;;;;;;:::o;2002:128:120:-;1920:7;;;;2063:61;;;2098:15;;-1:-1:-1;;;2098:15:120;;;;;;;;;;;2063:61;2002:128::o;6056:260:84:-;6137:4;727:22;6157:5;:18;:46;;;;;6179:24;6187:5;6194:8;6179:7;:24::i;:::-;6153:92;;;6221:13;6219:15;;6221:13;;6219:15;;-1:-1:-1;;;6219:15:84;;-1:-1:-1;;;;;6219:15:84;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;6219:15:84;;;;;-1:-1:-1;;;;;6219:15:84;;;;;;6153:92;6254:34;6272:5;6279:8;6254:17;:34::i;3432:197:105:-;3520:22;3528:4;3534:7;3520;:22::i;:::-;3515:108;;3565:47;;-1:-1:-1;;;3565:47:105;;-1:-1:-1;;;;;15519:32:132;;3565:47:105;;;15501:51:132;15568:18;;;15561:34;;;15474:18;;3565:47:105;;;;;;;;438:252:44;-1:-1:-1;;;;;506:19:44;;502:58;;534:26;;-1:-1:-1;;;534:26:44;;;;;;;;;;;502:58;571:12;589:3;-1:-1:-1;;;;;589:8:44;606:6;589:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;570:48;;;633:7;628:55;;649:34;;-1:-1:-1;;;649:34:44;;-1:-1:-1;;;;;15519:32:132;;649:34:44;;;15501:51:132;15568:18;;;15561:34;;;15474:18;;649:34:44;15327:274:132;696:194:44;-1:-1:-1;;;;;779:19:44;;775:58;;807:26;;-1:-1:-1;;;807:26:44;;;;;;;;;;;775:58;843:40;-1:-1:-1;;;;;843:27:44;;871:3;876:6;843:27;:40::i;2202:126:120:-;1920:7;;;;2260:62;;2296:15;;-1:-1:-1;;;2296:15:120;;;;;;;;;;;6179:316:105;6256:4;6277:22;6285:4;6291:7;6277;:22::i;:::-;6272:217;;6315:6;:12;;;;;;;;;;;-1:-1:-1;;;;;6315:29:105;;;;;;;;;:36;;-1:-1:-1;;6315:36:105;6347:4;6315:36;;;6397:12;735:10:117;;656:96;6397:12:105;-1:-1:-1;;;;;6370:40:105;6388:7;-1:-1:-1;;;;;6370:40:105;6382:4;6370:40;;;;;;;;;;-1:-1:-1;6431:4:105;6424:11;;6272:217;-1:-1:-1;6473:5:105;6466:12;;2827:143:48;2892:7;2926:36;785:2;706;2926:7;;:36;:::i;:::-;2918:45;;;:::i;6730:317:105:-;6808:4;6828:22;6836:4;6842:7;6828;:22::i;:::-;6824:217;;;6898:5;6866:12;;;;;;;;;;;-1:-1:-1;;;;;6866:29:105;;;;;;;;;;:37;;-1:-1:-1;;6866:37:105;;;6922:40;735:10:117;;6866:12:105;;6922:40;;6898:5;6922:40;-1:-1:-1;6983:4:105;6976:11;;1271:160:115;1380:43;;;-1:-1:-1;;;;;15519:32:132;;1380:43:115;;;15501:51:132;15568:18;;;;15561:34;;;1380:43:115;;;;;;;;;;15474:18:132;;;;1380:43:115;;;;;;;;;-1:-1:-1;;;;;1380:43:115;-1:-1:-1;;;1380:43:115;;;7968:11;;1353:71;;1373:5;;1380:43;;-1:-1:-1;;;;1380:43:115;-1:-1:-1;;7968:11:115;-1:-1:-1;1373:5:115;7934;7929:60;8041:7;8031:176;;8085:4;8079:11;8130:16;8127:1;8122:3;8107:40;8176:16;8171:3;8164:29;8031:176;-1:-1:-1;;8284:1:115;8278:8;8234:16;;-1:-1:-1;8310:15:115;;:68;;8362:11;8377:1;8362:16;;8310:68;;;-1:-1:-1;;;;;8328:26:115;;;:31;8310:68;8306:146;;;8401:40;;-1:-1:-1;;;8401:40:115;;-1:-1:-1;;;;;9632:32:132;;8401:40:115;;;9614:51:132;9587:18;;8401:40:115;9468:203:132;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;207:173:132;275:20;;-1:-1:-1;;;;;324:31:132;;314:42;;304:70;;370:1;367;360:12;385:328;462:6;470;478;531:2;519:9;510:7;506:23;502:32;499:52;;;547:1;544;537:12;499:52;570:29;589:9;570:29;:::i;:::-;560:39;;618:38;652:2;641:9;637:18;618:38;:::i;:::-;608:48;;703:2;692:9;688:18;675:32;665:42;;385:328;;;;;:::o;718:286::-;776:6;829:2;817:9;808:7;804:23;800:32;797:52;;;845:1;842;835:12;797:52;871:23;;-1:-1:-1;;;;;;923:32:132;;913:43;;903:71;;970:1;967;960:12;1201:273;1257:6;1310:2;1298:9;1289:7;1285:23;1281:32;1278:52;;;1326:1;1323;1316:12;1278:52;1365:9;1352:23;1418:5;1411:13;1404:21;1397:5;1394:32;1384:60;;1440:1;1437;1430:12;1479:180;1538:6;1591:2;1579:9;1570:7;1566:23;1562:32;1559:52;;;1607:1;1604;1597:12;1559:52;-1:-1:-1;1630:23:132;;1479:180;-1:-1:-1;1479:180:132:o;1846:163::-;1913:20;;1973:10;1962:22;;1952:33;;1942:61;;1999:1;1996;1989:12;2014:184;2072:6;2125:2;2113:9;2104:7;2100:23;2096:32;2093:52;;;2141:1;2138;2131:12;2093:52;2164:28;2182:9;2164:28;:::i;2203:639::-;2370:2;2422:21;;;2492:13;;2395:18;;;2514:22;;;2341:4;;2370:2;2593:15;;;;2567:2;2552:18;;;2341:4;2636:180;2650:6;2647:1;2644:13;2636:180;;;2715:13;;2730:4;2711:24;2699:37;;2791:15;;;;2756:12;;;;2672:1;2665:9;2636:180;;;-1:-1:-1;2833:3:132;;2203:639;-1:-1:-1;;;;;;2203:639:132:o;2847:186::-;2906:6;2959:2;2947:9;2938:7;2934:23;2930:32;2927:52;;;2975:1;2972;2965:12;2927:52;2998:29;3017:9;2998:29;:::i;3038:254::-;3106:6;3114;3167:2;3155:9;3146:7;3142:23;3138:32;3135:52;;;3183:1;3180;3173:12;3135:52;3219:9;3206:23;3196:33;;3248:38;3282:2;3271:9;3267:18;3248:38;:::i;:::-;3238:48;;3038:254;;;;;:::o;3297:347::-;3348:8;3358:6;3412:3;3405:4;3397:6;3393:17;3389:27;3379:55;;3430:1;3427;3420:12;3379:55;-1:-1:-1;3453:20:132;;-1:-1:-1;;;;;3485:30:132;;3482:50;;;3528:1;3525;3518:12;3482:50;3565:4;3557:6;3553:17;3541:29;;3617:3;3610:4;3601:6;3593;3589:19;3585:30;3582:39;3579:59;;;3634:1;3631;3624:12;3579:59;3297:347;;;;;:::o;3649:477::-;3728:6;3736;3744;3797:2;3785:9;3776:7;3772:23;3768:32;3765:52;;;3813:1;3810;3803:12;3765:52;3853:9;3840:23;-1:-1:-1;;;;;3878:6:132;3875:30;3872:50;;;3918:1;3915;3908:12;3872:50;3957:58;4007:7;3998:6;3987:9;3983:22;3957:58;:::i;:::-;4034:8;;3931:84;;-1:-1:-1;4116:2:132;4101:18;;;;4088:32;;3649:477;-1:-1:-1;;;;3649:477:132:o;4131:154::-;4190:5;4235:2;4226:6;4221:3;4217:16;4213:25;4210:45;;;4251:1;4248;4241:12;4210:45;-1:-1:-1;4273:6:132;4131:154;-1:-1:-1;4131:154:132:o;4290:392::-;4378:8;4388:6;4442:3;4435:4;4427:6;4423:17;4419:27;4409:55;;4460:1;4457;4450:12;4409:55;-1:-1:-1;4483:20:132;;-1:-1:-1;;;;;4515:30:132;;4512:50;;;4558:1;4555;4548:12;4512:50;4595:4;4587:6;4583:17;4571:29;;4655:3;4648:4;4638:6;4635:1;4631:14;4623:6;4619:27;4615:38;4612:47;4609:67;;;4672:1;4669;4662:12;4687:1070;4882:6;4890;4898;4906;4914;4922;4930;4983:3;4971:9;4962:7;4958:23;4954:33;4951:53;;;5000:1;4997;4990:12;4951:53;5023;5068:7;5057:9;5023:53;:::i;:::-;5013:63;;5127:2;5116:9;5112:18;5099:32;-1:-1:-1;;;;;5191:2:132;5183:6;5180:14;5177:34;;;5207:1;5204;5197:12;5177:34;5246:95;5333:7;5324:6;5313:9;5309:22;5246:95;:::i;:::-;5360:8;;-1:-1:-1;5220:121:132;-1:-1:-1;5442:3:132;5427:19;;5414:33;;-1:-1:-1;5500:3:132;5485:19;;5472:33;;-1:-1:-1;5517:16:132;;;5514:36;;;5546:1;5543;5536:12;5514:36;;5585:60;5637:7;5626:8;5615:9;5611:24;5585:60;:::i;:::-;4687:1070;;;;-1:-1:-1;4687:1070:132;;;;;;5746:3;5731:19;;;5718:33;;4687:1070;-1:-1:-1;;;;4687:1070:132:o;5762:127::-;5823:10;5818:3;5814:20;5811:1;5804:31;5854:4;5851:1;5844:15;5878:4;5875:1;5868:15;5894:253;5966:2;5960:9;6008:4;5996:17;;-1:-1:-1;;;;;6028:34:132;;6064:22;;;6025:62;6022:88;;;6090:18;;:::i;:::-;6126:2;6119:22;5894:253;:::o;6152:275::-;6223:2;6217:9;6288:2;6269:13;;-1:-1:-1;;6265:27:132;6253:40;;-1:-1:-1;;;;;6308:34:132;;6344:22;;;6305:62;6302:88;;;6370:18;;:::i;:::-;6406:2;6399:22;6152:275;;-1:-1:-1;6152:275:132:o;6432:171::-;6499:20;;-1:-1:-1;;;;;6548:30:132;;6538:41;;6528:69;;6593:1;6590;6583:12;6608:159;6675:20;;6735:6;6724:18;;6714:29;;6704:57;;6757:1;6754;6747:12;6772:188;6840:20;;-1:-1:-1;;;;;6889:46:132;;6879:57;;6869:85;;6950:1;6947;6940:12;6965:1653;7081:6;7112:2;7155;7143:9;7134:7;7130:23;7126:32;7123:52;;;7171:1;7168;7161:12;7123:52;7211:9;7198:23;-1:-1:-1;;;;;7281:2:132;7273:6;7270:14;7267:34;;;7297:1;7294;7287:12;7267:34;7335:6;7324:9;7320:22;7310:32;;7380:7;7373:4;7369:2;7365:13;7361:27;7351:55;;7402:1;7399;7392:12;7351:55;7438:2;7425:16;7460:2;7456;7453:10;7450:36;;;7466:18;;:::i;:::-;7506:36;7538:2;7533;7530:1;7526:10;7522:19;7506:36;:::i;:::-;7576:15;;;7607:12;;;;-1:-1:-1;7638:4:132;7677:13;;;7669:22;;7665:31;;;7708:19;;;7705:39;;;7740:1;7737;7730:12;7705:39;7764:11;;;;7784:804;7800:6;7795:3;7792:15;7784:804;;;7880:2;7874:3;7865:7;7861:17;7857:26;7854:116;;;7924:1;7953:2;7949;7942:14;7854:116;7996:22;;:::i;:::-;8045;8063:3;8045:22;:::i;:::-;8038:5;8031:37;8104:31;8131:2;8126:3;8122:12;8104:31;:::i;:::-;8099:2;8092:5;8088:14;8081:55;8159:2;8197:31;8224:2;8219:3;8215:12;8197:31;:::i;:::-;8181:14;;;8174:55;8252:2;8290:31;8308:12;;;8290:31;:::i;:::-;8274:14;;;8267:55;8345:3;8384:32;8403:12;;;8384:32;:::i;:::-;8368:14;;;8361:56;8441:3;8481:33;8500:13;;;8481:33;:::i;:::-;8464:15;;;8457:58;8528:18;;7817:12;;;;8566;;;;7784:804;;;-1:-1:-1;8607:5:132;6965:1653;-1:-1:-1;;;;;;;6965:1653:132:o;8623:840::-;8806:6;8814;8822;8830;8838;8846;8899:3;8887:9;8878:7;8874:23;8870:33;8867:53;;;8916:1;8913;8906:12;8867:53;8939;8984:7;8973:9;8939:53;:::i;:::-;8929:63;;9011:37;9044:2;9033:9;9029:18;9011:37;:::i;:::-;9001:47;;9067:39;9101:3;9090:9;9086:19;9067:39;:::i;:::-;9057:49;;9157:3;9146:9;9142:19;9129:33;-1:-1:-1;;;;;9177:6:132;9174:30;9171:50;;;9217:1;9214;9207:12;9171:50;9256:95;9343:7;9334:6;9323:9;9319:22;9256:95;:::i;:::-;8623:840;;;;-1:-1:-1;8623:840:132;;;;;9452:3;9437:19;;;9424:33;;8623:840;-1:-1:-1;;;;8623:840:132:o;9676:624::-;9772:6;9780;9788;9796;9804;9857:3;9845:9;9836:7;9832:23;9828:33;9825:53;;;9874:1;9871;9864:12;9825:53;9897:28;9915:9;9897:28;:::i;:::-;9887:38;;9944;9978:2;9967:9;9963:18;9944:38;:::i;:::-;9934:48;;10029:2;10018:9;10014:18;10001:32;9991:42;;10084:2;10073:9;10069:18;10056:32;-1:-1:-1;;;;;10103:6:132;10100:30;10097:50;;;10143:1;10140;10133:12;10097:50;10182:58;10232:7;10223:6;10212:9;10208:22;10182:58;:::i;:::-;9676:624;;;;-1:-1:-1;9676:624:132;;-1:-1:-1;10259:8:132;;10156:84;9676:624;-1:-1:-1;;;9676:624:132:o;10487:1077::-;10621:6;10629;10637;10645;10653;10661;10669;10677;10685;10738:3;10726:9;10717:7;10713:23;10709:33;10706:53;;;10755:1;10752;10745:12;10706:53;10778:29;10797:9;10778:29;:::i;:::-;10768:39;;10826:38;10860:2;10849:9;10845:18;10826:38;:::i;:::-;10816:48;;10911:2;10900:9;10896:18;10883:32;10873:42;;10934:37;10967:2;10956:9;10952:18;10934:37;:::i;:::-;10924:47;;11022:3;11011:9;11007:19;10994:33;-1:-1:-1;;;;;11087:2:132;11079:6;11076:14;11073:34;;;11103:1;11100;11093:12;11073:34;11142:58;11192:7;11183:6;11172:9;11168:22;11142:58;:::i;:::-;11219:8;;-1:-1:-1;11116:84:132;-1:-1:-1;11307:3:132;11292:19;;11279:33;;-1:-1:-1;11324:16:132;;;11321:36;;;11353:1;11350;11343:12;11321:36;;11392:60;11444:7;11433:8;11422:9;11418:24;11392:60;:::i;:::-;10487:1077;;;;-1:-1:-1;10487:1077:132;;;;;;;;11471:8;11553:3;11538:19;11525:33;;10487:1077;-1:-1:-1;;;;10487:1077:132:o;11569:164::-;11637:5;11682:3;11673:6;11668:3;11664:16;11660:26;11657:46;;;11699:1;11696;11689:12;11738:837;11913:6;11921;11929;11937;11990:2;11978:9;11969:7;11965:23;11961:32;11958:52;;;12006:1;12003;11996:12;11958:52;12046:9;12033:23;-1:-1:-1;;;;;12116:2:132;12108:6;12105:14;12102:34;;;12132:1;12129;12122:12;12102:34;12171:95;12258:7;12249:6;12238:9;12234:22;12171:95;:::i;:::-;12285:8;;-1:-1:-1;12145:121:132;-1:-1:-1;12367:2:132;12352:18;;12339:32;;-1:-1:-1;12424:2:132;12409:18;;12396:32;;-1:-1:-1;12440:16:132;;;12437:36;;;12469:1;12466;12459:12;12437:36;;12492:77;12561:7;12550:8;12539:9;12535:24;12492:77;:::i;:::-;12482:87;;;11738:837;;;;;;;:::o;13181:483::-;13260:6;13268;13276;13329:2;13317:9;13308:7;13304:23;13300:32;13297:52;;;13345:1;13342;13335:12;13297:52;13368:29;13387:9;13368:29;:::i;:::-;13358:39;;13448:2;13437:9;13433:18;13420:32;-1:-1:-1;;;;;13467:6:132;13464:30;13461:50;;;13507:1;13504;13497:12;13461:50;13546:58;13596:7;13587:6;13576:9;13572:22;13546:58;:::i;:::-;13181:483;;13623:8;;-1:-1:-1;13520:84:132;;-1:-1:-1;;;;13181:483:132:o;13669:184::-;13727:6;13780:2;13768:9;13759:7;13755:23;13751:32;13748:52;;;13796:1;13793;13786:12;13748:52;13819:28;13837:9;13819:28;:::i;13858:685::-;13950:6;13958;13966;14019:2;14007:9;13998:7;13994:23;13990:32;13987:52;;;14035:1;14032;14025:12;13987:52;14058:28;14076:9;14058:28;:::i;:::-;14048:38;;14137:2;14126:9;14122:18;14109:32;-1:-1:-1;;;;;14201:2:132;14193:6;14190:14;14187:34;;;14217:1;14214;14207:12;14187:34;14255:6;14244:9;14240:22;14230:32;;14300:7;14293:4;14289:2;14285:13;14281:27;14271:55;;14322:1;14319;14312:12;14271:55;14362:2;14349:16;14388:2;14380:6;14377:14;14374:34;;;14404:1;14401;14394:12;14374:34;14457:7;14452:2;14442:6;14439:1;14435:14;14431:2;14427:23;14423:32;14420:45;14417:65;;;14478:1;14475;14468:12;14417:65;14509:2;14505;14501:11;14491:21;;14531:6;14521:16;;;;;13858:685;;;;;:::o;14548:372::-;14642:6;14695:2;14683:9;14674:7;14670:23;14666:32;14663:52;;;14711:1;14708;14701:12;14663:52;14751:9;14738:23;-1:-1:-1;;;;;14776:6:132;14773:30;14770:50;;;14816:1;14813;14806:12;14770:50;14839:75;14906:7;14897:6;14886:9;14882:22;14839:75;:::i;:::-;14829:85;14548:372;-1:-1:-1;;;;14548:372:132:o;15986:266::-;16074:6;16069:3;16062:19;16126:6;16119:5;16112:4;16107:3;16103:14;16090:43;-1:-1:-1;16178:1:132;16153:16;;;16171:4;16149:27;;;16142:38;;;;16234:2;16213:15;;;-1:-1:-1;;16209:29:132;16200:39;;;16196:50;;15986:266::o;16257:315::-;16442:2;16431:9;16424:21;16405:4;16462:61;16519:2;16508:9;16504:18;16496:6;16488;16462:61;:::i;:::-;16454:69;;16559:6;16554:2;16543:9;16539:18;16532:34;16257:315;;;;;;:::o;16577:127::-;16638:10;16633:3;16629:20;16626:1;16619:31;16669:4;16666:1;16659:15;16693:4;16690:1;16683:15;16709:1355;16944:2;16996:21;;;17066:13;;16969:18;;;17088:22;;;16915:4;;16944:2;17129;;17147:18;;;;17188:15;;;16915:4;17231:807;17245:6;17242:1;17239:13;17231:807;;;17304:13;;17346:9;;17357:10;17342:26;17330:39;;17408:11;;;17402:18;-1:-1:-1;;;;;17495:21:132;;;17481:12;;;17474:43;17561:11;;;17555:18;17551:27;17537:12;;;17530:49;17602:4;17650:11;;;17644:18;17664:6;17640:31;17626:12;;;17619:53;17695:4;17740:11;;;17734:18;-1:-1:-1;;;;;17843:23:132;;;17829:12;;;17822:45;;;;17890:4;17938:11;;;17932:18;17928:27;17914:12;;;17907:49;17985:4;17976:14;;;;18013:15;;;;17267:1;17260:9;17231:807;;;-1:-1:-1;18055:3:132;;16709:1355;-1:-1:-1;;;;;;;16709:1355:132:o;18069:524::-;18163:5;18157:12;-1:-1:-1;;;;;18242:2:132;18231:9;18227:18;18222:3;18215:31;18302:6;18290:9;18286:2;18282:18;18278:31;18271:4;18266:3;18262:14;18255:55;-1:-1:-1;;;;;18417:2:132;18405:9;18401:2;18397:18;18393:27;18388:2;18383:3;18379:12;18372:49;18466:4;18459:5;18455:16;18449:23;18430:42;;18521:2;18508:11;18504:20;18497:4;18492:3;18488:14;18481:44;;18583:2;18569:11;18564:3;18560:21;18556:30;18550:3;18545;18541:13;18534:53;;;18069:524;;:::o;18598:889::-;18879:4;18908:3;18947:1;18943;18938:3;18934:11;18930:19;18995:2;18986:6;18980:13;18976:22;18965:9;18958:41;19067:10;19059:4;19051:6;19047:17;19041:24;19037:41;19030:4;19019:9;19015:20;19008:71;19147:2;19139:4;19131:6;19127:17;19121:24;19117:33;19110:4;19099:9;19095:20;19088:63;;19207:4;19199:6;19195:17;19189:24;19182:4;19171:9;19167:20;19160:54;19282:6;19274:4;19266:6;19262:17;19256:24;19252:37;19245:4;19234:9;19230:20;19223:67;19299:64;19358:3;19347:9;19343:19;19335:6;19299:64;:::i;:::-;19400:2;19394:3;19383:9;19379:19;19372:31;19420:61;19477:2;19466:9;19462:18;19454:6;19446;19420:61;:::i;19492:184::-;19562:6;19615:2;19603:9;19594:7;19590:23;19586:32;19583:52;;;19631:1;19628;19621:12;19583:52;-1:-1:-1;19654:16:132;;19492:184;-1:-1:-1;19492:184:132:o;19681:786::-;-1:-1:-1;;;;;20042:15:132;;;20024:34;;20094:15;;20089:2;20074:18;;20067:43;20141:2;20126:18;;20119:34;;;20201:6;20189:19;;20184:2;20169:18;;20162:47;20246:3;20240;20225:19;;20218:32;;;19967:4;;20273:62;;20315:19;;20307:6;20299;20273:62;:::i;:::-;20384:9;20376:6;20372:22;20366:3;20355:9;20351:19;20344:51;20412:49;20454:6;20446;20438;20412:49;:::i;:::-;20404:57;19681:786;-1:-1:-1;;;;;;;;;;;19681:786:132:o;20472:127::-;20533:10;20528:3;20524:20;20521:1;20514:31;20564:4;20561:1;20554:15;20588:4;20585:1;20578:15;20604:128;20671:9;;;20692:11;;;20689:37;;;20706:18;;:::i;20737:521::-;20814:4;20820:6;20880:11;20867:25;20974:2;20970:7;20959:8;20943:14;20939:29;20935:43;20915:18;20911:68;20901:96;;20993:1;20990;20983:12;20901:96;21020:33;;21072:20;;;-1:-1:-1;;;;;;21104:30:132;;21101:50;;;21147:1;21144;21137:12;21101:50;21180:4;21168:17;;-1:-1:-1;21211:14:132;21207:27;;;21197:38;;21194:58;;;21248:1;21245;21238:12;21263:285;21374:10;21348:24;21366:5;21348:24;:::i;:::-;21344:41;21339:3;21332:54;21442:4;21435:5;21431:16;21418:30;21411:4;21406:3;21402:14;21395:54;-1:-1:-1;;;;;21485:35:132;21514:4;21507:5;21503:16;21485:35;:::i;:::-;21481:60;21474:4;21469:3;21465:14;21458:84;;;21263:285::o;21553:752::-;21882:52;21924:9;21916:6;21882:52;:::i;:::-;21999:1;21995;21990:3;21986:11;21982:19;21974:6;21970:32;21965:2;21954:9;21950:18;21943:60;22040:6;22034:3;22023:9;22019:19;22012:35;22084:3;22078;22067:9;22063:19;22056:32;21863:4;22111:62;22168:3;22157:9;22153:19;22145:6;22137;22111:62;:::i;:::-;22222:9;22214:6;22210:22;22204:3;22193:9;22189:19;22182:51;22250:49;22292:6;22284;22276;22250:49;:::i;:::-;22242:57;21553:752;-1:-1:-1;;;;;;;;;;21553:752:132:o;22310:759::-;22706:13;;-1:-1:-1;;;;;22702:22:132;;;22684:41;;22785:4;22773:17;;;22767:24;22763:33;;;22741:20;;;22734:63;22857:4;22845:17;;;22839:24;22865:6;22835:37;22813:20;;;22806:67;22605:4;22634:3;22882:63;22941:2;22926:18;;22918:6;22882:63;:::i;:::-;22982:2;22976:3;22965:9;22961:19;22954:31;23002:61;23059:2;23048:9;23044:18;23036:6;23028;23002:61;:::i;23074:209::-;23112:3;-1:-1:-1;;;;;23193:2:132;23186:5;23182:14;23220:2;23211:7;23208:15;23205:41;;23226:18;;:::i;:::-;23275:1;23262:15;;23074:209;-1:-1:-1;;;23074:209:132:o;23288:331::-;23393:9;23404;23446:8;23434:10;23431:24;23428:44;;;23468:1;23465;23458:12;23428:44;23497:6;23487:8;23484:20;23481:40;;;23517:1;23514;23507:12;23481:40;-1:-1:-1;;23543:23:132;;;23588:25;;;;;-1:-1:-1;23288:331:132:o;23624:323::-;-1:-1:-1;;;;;;23744:19:132;;23820:11;;;;23851:1;23843:10;;23840:101;;;23928:2;23922;23915:3;23912:1;23908:11;23905:1;23901:19;23897:28;23893:2;23889:37;23885:46;23876:55;;23840:101;;;23624:323;;;;:::o;23952:519::-;24045:6;24098:2;24086:9;24077:7;24073:23;24069:32;24066:52;;;24114:1;24111;24104:12;24066:52;24147:2;24141:9;24189:2;24181:6;24177:15;24258:6;24246:10;24243:22;-1:-1:-1;;;;;24210:10:132;24207:34;24204:62;24201:88;;;24269:18;;:::i;:::-;24305:2;24298:22;24344:29;24363:9;24344:29;:::i;:::-;24336:6;24329:45;24435:2;24424:9;24420:18;24407:32;24402:2;24394:6;24390:15;24383:57;24459:6;24449:16;;;23952:519;;;;:::o;24686:125::-;24751:9;;;24772:10;;;24769:36;;;24785:18;;:::i;24816:452::-;24866:3;24904:5;24898:12;24931:6;24926:3;24919:19;24957:4;24986;24981:3;24977:14;24970:21;;25025:4;25018:5;25014:16;25048:1;25058:185;25072:6;25069:1;25066:13;25058:185;;;25147:13;;25140:21;25133:29;25121:42;;25183:12;;;;25218:15;;;;25094:1;25087:9;25058:185;;;-1:-1:-1;25259:3:132;;24816:452;-1:-1:-1;;;;;24816:452:132:o;25273:1307::-;25699:4;25747:3;25736:9;25732:19;25760:52;25802:9;25794:6;25760:52;:::i;:::-;25860:10;25848:23;;25843:2;25828:18;;25821:51;-1:-1:-1;;;;;25947:15:132;;;25941:3;25926:19;;25919:44;26000:3;25899;25979:19;;25972:32;26039:22;;;;26119:6;;26092:3;26077:19;;-1:-1:-1;26153:309:132;26167:6;26164:1;26161:13;26153:309;;;26260:2;26232:26;26251:6;26232:26;:::i;:::-;26228:35;26216:48;;26287:4;26338:15;;;26325:29;26311:12;;;26304:51;26378:4;26437:15;;;;26402:12;;;;26189:1;26182:9;26153:309;;;26157:3;26508:9;26503:3;26499:19;26493:3;26482:9;26478:19;26471:48;26536:38;26570:3;26562:6;26536:38;:::i;26585:193::-;26623:3;-1:-1:-1;;;;;26660:5:132;26656:30;26705:7;26695:41;;26716:18;;:::i;:::-;-1:-1:-1;;26752:20:132;;26585:193;-1:-1:-1;;26585:193:132:o;27062:255::-;27182:19;;27221:2;27213:11;;27210:101;;;-1:-1:-1;;27282:2:132;27278:12;;;27275:1;27271:20;27267:33;27256:45;27062:255;;;;:::o", - "linkReferences": {} - }, - "methodIdentifiers": { - "DEFAULT_ADMIN_ROLE()": "a217fddf", - "allowlistSize()": "d2ae2104", - "assignJob(address,bytes)": "c015bb7d", - "assignJob(uint32,address,uint256,bytes)": "717e8a42", - "compose302(address,address,bytes32,uint16,bytes,bytes,uint256)": "7cd44734", - "defaultMultiplierBps()": "00bf2e80", - "dstConfig(uint32)": "9e944965", - "endpoint()": "5e280f11", - "execute301(bytes,uint256)": "3146646a", - "execute302((address,(uint32,bytes32,uint64),bytes32,bytes,bytes,uint256))": "cfc32570", - "getFee(address,bytes)": "c8f8dcd1", - "getFee(uint32,address,uint256,bytes)": "709eb664", - "getRoleAdmin(bytes32)": "248a9ca3", - "getSupportedOptionTypes(uint32)": "26e67a37", - "grantRole(bytes32,address)": "2f2ff15d", - "hasAcl(address)": "2de11376", - "hasRole(bytes32,address)": "91d14854", - "localEidV2()": "e395eb5c", - "nativeDrop((uint32,bytes32,uint64),uint32,address,(address,uint256)[],uint256)": "475b6d9e", - "nativeDropAndExecute301((uint32,bytes32,uint64),(address,uint256)[],uint256,bytes,uint256)": "3927c075", - "nativeDropAndExecute302((address,uint256)[],uint256,(address,(uint32,bytes32,uint64),bytes32,bytes,bytes,uint256))": "8624ba07", - "paused()": "5c975abb", - "priceFeed()": "741bef1a", - "receiveUln301()": "c2803b2c", - "renounceRole(bytes32,address)": "36568abe", - "revokeRole(bytes32,address)": "d547741f", - "setDefaultMultiplierBps(uint16)": "c358de0a", - "setDstConfig((uint32,uint64,uint64,uint16,uint128,uint128)[])": "3d85ac33", - "setPaused(bool)": "16c38b3c", - "setPriceFeed(address)": "724e78da", - "setSupportedOptionTypes(uint32,uint8[])": "cd88b903", - "setWorkerFeeLib(address)": "c7b2370b", - "supportsInterface(bytes4)": "01ffc9a7", - "withdrawFee(address,address,uint256)": "1095b6d7", - "withdrawToken(address,address,uint256)": "01e33667", - "workerFeeLib()": "c416aa51" - }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_endpoint\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_receiveUln301\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"_messageLibs\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"_priceFeed\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_roleAdmin\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"_admins\",\"type\":\"address[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AccessControlBadConfirmation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"neededRole\",\"type\":\"bytes32\"}],\"name\":\"AccessControlUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EnforcedPause\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExpectedPause\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"Transfer_NativeFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Transfer_ToAddressIsZero\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Worker_NotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Worker_OnlyMessageLib\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Worker_RoleRenouncingDisabled\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"lzReceiveBaseGas\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"lzComposeBaseGas\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"multiplierBps\",\"type\":\"uint16\"},{\"internalType\":\"uint128\",\"name\":\"floorMarginUSD\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"nativeCap\",\"type\":\"uint128\"}],\"indexed\":false,\"internalType\":\"struct IExecutor.DstConfigParam[]\",\"name\":\"params\",\"type\":\"tuple[]\"}],\"name\":\"DstConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"indexed\":false,\"internalType\":\"struct Origin\",\"name\":\"origin\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oapp\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"struct IExecutor.NativeDropParams[]\",\"name\":\"params\",\"type\":\"tuple[]\"},{\"indexed\":false,\"internalType\":\"bool[]\",\"name\":\"success\",\"type\":\"bool[]\"}],\"name\":\"NativeDropApplied\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"multiplierBps\",\"type\":\"uint16\"}],\"name\":\"SetDefaultMultiplierBps\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"priceFeed\",\"type\":\"address\"}],\"name\":\"SetPriceFeed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint8[]\",\"name\":\"optionTypes\",\"type\":\"uint8[]\"}],\"name\":\"SetSupportedOptionTypes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"workerLib\",\"type\":\"address\"}],\"name\":\"SetWorkerLib\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"lib\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Withdraw\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"allowlistSize\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_dstEid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_calldataSize\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_options\",\"type\":\"bytes\"}],\"name\":\"assignJob\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_options\",\"type\":\"bytes\"}],\"name\":\"assignJob\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_guid\",\"type\":\"bytes32\"},{\"internalType\":\"uint16\",\"name\":\"_index\",\"type\":\"uint16\"},{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_gasLimit\",\"type\":\"uint256\"}],\"name\":\"compose302\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"defaultMultiplierBps\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"}],\"name\":\"dstConfig\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"lzReceiveBaseGas\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"multiplierBps\",\"type\":\"uint16\"},{\"internalType\":\"uint128\",\"name\":\"floorMarginUSD\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"nativeCap\",\"type\":\"uint128\"},{\"internalType\":\"uint64\",\"name\":\"lzComposeBaseGas\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"endpoint\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_packet\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_gasLimit\",\"type\":\"uint256\"}],\"name\":\"execute301\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"origin\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"}],\"internalType\":\"struct IExecutor.ExecutionParams\",\"name\":\"_executionParams\",\"type\":\"tuple\"}],\"name\":\"execute302\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_dstEid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_calldataSize\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_options\",\"type\":\"bytes\"}],\"name\":\"getFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_options\",\"type\":\"bytes\"}],\"name\":\"getFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"}],\"name\":\"getSupportedOptionTypes\",\"outputs\":[{\"internalType\":\"uint8[]\",\"name\":\"\",\"type\":\"uint8[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"}],\"name\":\"hasAcl\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"localEidV2\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"_origin\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"_dstEid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"_oapp\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"struct IExecutor.NativeDropParams[]\",\"name\":\"_nativeDropParams\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"_nativeDropGasLimit\",\"type\":\"uint256\"}],\"name\":\"nativeDrop\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"_origin\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"struct IExecutor.NativeDropParams[]\",\"name\":\"_nativeDropParams\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"_nativeDropGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_packet\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_gasLimit\",\"type\":\"uint256\"}],\"name\":\"nativeDropAndExecute301\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"struct IExecutor.NativeDropParams[]\",\"name\":\"_nativeDropParams\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"_nativeDropGasLimit\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"origin\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"}],\"internalType\":\"struct IExecutor.ExecutionParams\",\"name\":\"_executionParams\",\"type\":\"tuple\"}],\"name\":\"nativeDropAndExecute302\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"priceFeed\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"receiveUln301\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"_multiplierBps\",\"type\":\"uint16\"}],\"name\":\"setDefaultMultiplierBps\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"lzReceiveBaseGas\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"lzComposeBaseGas\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"multiplierBps\",\"type\":\"uint16\"},{\"internalType\":\"uint128\",\"name\":\"floorMarginUSD\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"nativeCap\",\"type\":\"uint128\"}],\"internalType\":\"struct IExecutor.DstConfigParam[]\",\"name\":\"_params\",\"type\":\"tuple[]\"}],\"name\":\"setDstConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_paused\",\"type\":\"bool\"}],\"name\":\"setPaused\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_priceFeed\",\"type\":\"address\"}],\"name\":\"setPriceFeed\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"uint8[]\",\"name\":\"_optionTypes\",\"type\":\"uint8[]\"}],\"name\":\"setSupportedOptionTypes\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_workerFeeLib\",\"type\":\"address\"}],\"name\":\"setWorkerFeeLib\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_lib\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"withdrawFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"withdrawToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"workerFeeLib\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"AccessControlBadConfirmation()\":[{\"details\":\"The caller of a function is not the expected one. NOTE: Don't confuse with {AccessControlUnauthorizedAccount}.\"}],\"AccessControlUnauthorizedAccount(address,bytes32)\":[{\"details\":\"The `account` is missing a role.\"}],\"EnforcedPause()\":[{\"details\":\"The operation failed because the contract is paused.\"}],\"ExpectedPause()\":[{\"details\":\"The operation failed because the contract is not paused.\"}],\"ReentrancyGuardReentrantCall()\":[{\"details\":\"Unauthorized reentrant call.\"}],\"SafeERC20FailedOperation(address)\":[{\"details\":\"An operation with an ERC-20 token failed.\"}]},\"events\":{\"Paused(address)\":{\"details\":\"Emitted when the pause is triggered by `account`.\"},\"RoleAdminChanged(bytes32,bytes32,bytes32)\":{\"details\":\"Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted signaling this.\"},\"RoleGranted(bytes32,address,address)\":{\"details\":\"Emitted when `account` is granted `role`. `sender` is the account that originated the contract call. This account bears the admin role (for the granted role). Expected in cases where the role was granted using the internal {AccessControl-_grantRole}.\"},\"RoleRevoked(bytes32,address,address)\":{\"details\":\"Emitted when `account` is revoked `role`. `sender` is the account that originated the contract call: - if using `revokeRole`, it is the admin role bearer - if using `renounceRole`, it is the role bearer (i.e. `account`)\"},\"Unpaused(address)\":{\"details\":\"Emitted when the pause is lifted by `account`.\"}},\"kind\":\"dev\",\"methods\":{\"getRoleAdmin(bytes32)\":{\"details\":\"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}.\"},\"grantRole(bytes32,address)\":{\"details\":\"Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event.\"},\"hasAcl(address)\":{\"details\":\"Access control list using allowlist and denylist1) if one address is in the denylist -> deny2) else if address in the allowlist OR allowlist is empty (allows everyone)-> allow3) else deny\",\"params\":{\"_sender\":\"address to check\"}},\"hasRole(bytes32,address)\":{\"details\":\"Returns `true` if `account` has been granted `role`.\"},\"paused()\":{\"details\":\"Returns true if the contract is paused, and false otherwise.\"},\"renounceRole(bytes32,address)\":{\"details\":\"overrides AccessControl to disable renouncing of roles\"},\"revokeRole(bytes32,address)\":{\"details\":\"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event.\"},\"setDefaultMultiplierBps(uint16)\":{\"params\":{\"_multiplierBps\":\"default multiplier for worker fee\"}},\"setPaused(bool)\":{\"details\":\"flag to pause execution of workers (if used with whenNotPaused modifier)\",\"params\":{\"_paused\":\"true to pause, false to unpause\"}},\"setPriceFeed(address)\":{\"params\":{\"_priceFeed\":\"price feed address\"}},\"setWorkerFeeLib(address)\":{\"params\":{\"_workerFeeLib\":\"worker fee lib address\"}},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"},\"withdrawFee(address,address,uint256)\":{\"details\":\"supports withdrawing fee from ULN301, ULN302 and more\",\"params\":{\"_amount\":\"amount to withdraw\",\"_lib\":\"message lib address\",\"_to\":\"address to withdraw fee to\"}},\"withdrawToken(address,address,uint256)\":{\"details\":\"supports withdrawing token from the contract\",\"params\":{\"_amount\":\"amount to withdraw\",\"_to\":\"address to withdraw token to\",\"_token\":\"token address\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ExecutorMock.sol\":\"ExecutorMock\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IExecutor.sol\":{\"keccak256\":\"0x2fd26e454b060ede7afa15f8bbc67bd43f9181b6405ca411d36c8b538be016af\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cf2142e83214bb392f69ed14266718cfd803f849a7239ee9a1950ddf66553696\",\"dweb:/ipfs/QmSZ2mPMZqWBetMU8VESKtxy7UdSThUVmJmTFMHEyKLTGZ\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IExecutorFeeLib.sol\":{\"keccak256\":\"0x801d12eca6d6b232fb91d949cdb70a4c547c5e27e73555f2f1eb9e757c639bcc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b61bdffe26ff3902edab3efb0b5af3808ec9e28d72db95b77128502b9bc7638d\",\"dweb:/ipfs/Qmcyf3npDDEq28b9XqmXgSGyQegj2cxUZQ3UekSNf34g8M\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroExecutor.sol\":{\"keccak256\":\"0x3647af317ee126b1247a782abb30e59ec5ab21b4945f1d3b4370d1fa3c1bf347\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5b51cd5e7347ee869a06bd57a698f40e4a901ec7fdcb27f0ef485e4a0e1e9be4\",\"dweb:/ipfs/QmP2Nc73veRzLGdUahkjhQAiKR9ZWYiUtSGwoMB1sPXxUp\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroReadExecutor.sol\":{\"keccak256\":\"0x360936885f173f816ffb47e555d480928e74eb1ad54a76af0f4595ecba2d5657\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://16b5095e6439b1e416eb70571a1dd8f4f21a0d77b19c9e510ca289d99e5e09ab\",\"dweb:/ipfs/QmZ2mjQDQ35gJseyzmQhik4cBgN2ESADzofFNVFvgS64hv\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IWorker.sol\":{\"keccak256\":\"0xa6b61913767305227576cc6da5067de4208f09a4f58bfbfe32beafdfae9869b1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7fce83bfb831f383606aee7f5ff68a330c8526bb1036f9ba0813d3e4fa8d534\",\"dweb:/ipfs/QmR7zAqJkmCgBj6sguS8t2WthY5k6FwsakgH4UY11uqD4n\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/uln301/interfaces/IUltraLightNode301.sol\":{\"keccak256\":\"0x47f8ebeaa7d96a6f337a18c46e3c532da578c7cb0a13fb6e6f014286b991902f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d51f208b931be54e0ae1801c71c0756251d8c26f8d9b7911be1ad57b3d4a5691\",\"dweb:/ipfs/QmWqjst7jnYtSXQ9pakYHutDvENKLyqNg9nPfMxTH8p2Ed\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\":{\"keccak256\":\"0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bacc29fd3866af71e59cb0bdc1cf82c882a4a7f4e2652fd413c9f12649762083\",\"dweb:/ipfs/QmZh2toLnrQDWaNYhS5K4NoW7Vxd2GdZx9KA77vKEDLAqs\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol\":{\"keccak256\":\"0x5cf5f24751b4e3ea1c9c5ded07cedfdfd62566b6daaffcc0144733859c9dba0c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cae7e35007a714f007ea08045ef7c0cfa6c91fd2425b5028b2d49abad357a5f0\",\"dweb:/ipfs/QmcDBs5tsiyB35b8cwzWQWNnpkawb3uuHRaqE77Hxm2tve\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol\":{\"keccak256\":\"0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d8ff6a8a89297fa127f86b54e0db3eba1d6a6eeb4f6398d3c84d569665ac8f1b\",\"dweb:/ipfs/QmVSwhw6xFDrLRAX4RXaCM47yBaBtac4wf36DYEq6KCTvT\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol\":{\"keccak256\":\"0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7e1b245d58221d16d8b5e0f01ef3e289a24a7df1ace3b94239e4d5b954ad5927\",\"dweb:/ipfs/Qmappsgp7PCY9rSSNE9Cdn4BTRX591WfCSEgq2HxhA3z6S\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol\":{\"keccak256\":\"0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b18b23a1643fc6636c4ad9d9023e2e6ca2d3c2a4a046482d4655bff09950598d\",\"dweb:/ipfs/Qma6G5SqiovwrMPfgqTrRngK1HWW373Wkf9c6YP2NhXpPk\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol\":{\"keccak256\":\"0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5173fc9143bea314b159ca5a9adb5626659ef763bc598e27de5fa46efe3291a6\",\"dweb:/ipfs/QmSLFeMFPmVeGxT4sxRPW28ictjAS22M8rLeYRu9TXkA6D\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol\":{\"keccak256\":\"0xf1c07bc61e7b1dce195ed12d50f87980fbf2d63cac1326fd28287f55fe0ba625\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://060f10ff7afc33c1c2f2b4b5ba29231fd3c943146488084d0e4ab99fce991d97\",\"dweb:/ipfs/QmaSsefAqqEqtf8FgFUmDYMwTsAty3X1pqDb6SiFvry6B3\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol\":{\"keccak256\":\"0x2ebbcaaab3554edcd41b581f1a72ac1806afbfb8047d0d47ff098f9af30d6deb\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://2d4b2cf5c3b16dc76c6767f285b57c0af917972327b2be3f7cba5825402f5fc1\",\"dweb:/ipfs/QmQQWiHE2jKEDbjzGutSoZwtApSXYfLqZt5CxEpFj8xyvT\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Transfer.sol\":{\"keccak256\":\"0x621d6dd5b8b7e827351459fff4ac87c16ba4656757592cf67de8b199aea4cf9a\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://345aa8c007ed8b96a74260d289545713f1d7180df270d67687e3a540a61fa5c0\",\"dweb:/ipfs/QmNWCvpqSuar6UGLDVshUc7shUv3pt1J5FTf9VyZZ13wXL\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol\":{\"keccak256\":\"0xc84cf1bf785977fe1fbe7566eef902c2db68d0e163813ebe6c34921754802680\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://de686666fc16fa432d4208d85cec87dc952faf3e481b683b9adf4b4610db4b09\",\"dweb:/ipfs/QmdmQeopzmxqRzi9DNB4EJDrYUXFfD7fUhnGhSni4QejUW\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ExecutorMock.sol\":{\"keccak256\":\"0xbcdc4500270cd5496f10760ffe9e0444d23e454dd0ae2555e0661acf22fce96f\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://b816999bcfef5586b5e80bba21584b821fd7f7b32c276492adee530ffa83bb73\",\"dweb:/ipfs/QmXLV8ieYdrTBERajBCVuMzknFyPHJjnw7MGkzULAdjdt8\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/WorkerMock.sol\":{\"keccak256\":\"0x6c5bc31c117033dd35fa7ab3b13b1647a4b449c5f5b4cbff41bce8a63529ab97\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://01aa1d3f3b8e2fd4b544312d96916b16b97e01ab740e2bae1137723b2f1a31b1\",\"dweb:/ipfs/QmVMemJ4MSgi6y9NxDdSeB6QbJRtCWojJNxzs3CRLT56EA\"]},\"node_modules/@openzeppelin/contracts/access/AccessControl.sol\":{\"keccak256\":\"0xa0e92d42942f4f57c5be50568dac11e9d00c93efcb458026e18d2d9b9b2e7308\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://46326c0bb1e296b67185e81c918e0b40501b8b6386165855df0a3f3c634b6a80\",\"dweb:/ipfs/QmTwyrDYtsxsk6pymJTK94PnEpzsmkpUxFuzEiakDopy4Z\"]},\"node_modules/@openzeppelin/contracts/access/IAccessControl.sol\":{\"keccak256\":\"0xc1c2a7f1563b77050dc6d507db9f4ada5d042c1f6a9ddbffdc49c77cdc0a1606\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fd54abb96a6156d9a761f6fdad1d3004bc48d2d4fce47f40a3f91a7ae83fc3a1\",\"dweb:/ipfs/QmUrFSGkTDJ7WaZ6qPVVe3Gn5uN2viPb7x7QQ35UX4DofX\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol\":{\"keccak256\":\"0x9b6b3e7803bc5f2f8cd7ad57db8ac1def61a9930a5a3107df4882e028a9605d7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://da62d6be1f5c6edf577f0cb45666a8aa9c2086a4bac87d95d65f02e2f4c36a4b\",\"dweb:/ipfs/QmNkpvBpoCMvX8JwAFNSc5XxJ2q5BXJpL5L1txb4QkqVFF\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC165.sol\":{\"keccak256\":\"0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://11fea9f8bc98949ac6709f0c1699db7430d2948137aa94d5a9e95a91f61a710a\",\"dweb:/ipfs/QmQdfRXxQjwP6yn3DVo1GHPpriKNcFghSPi94Z1oKEFUNS\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC20.sol\":{\"keccak256\":\"0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a2608291cb038b388d80b79a06b6118a42f7894ff67b7da10ec0dbbf5b2973ba\",\"dweb:/ipfs/QmWohqcBLbcxmA4eGPhZDXe5RYMMEEpFq22nfkaUMvTfw1\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db\",\"dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0xca2ae13e0610f6a99238dd00b97bd786bc92732dae6d6b9d61f573ec51018310\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://75f8c71ce0c91c40dd5f249ace0b7d8270f8f1767231bcf71490f7157d6ba862\",\"dweb:/ipfs/QmYXgxeDyFHvz3JsXxLEYN6GNUR44ThHeFj5XkpkgMoG4w\"]},\"node_modules/@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0x9d8da059267bac779a2dbbb9a26c2acf00ca83085e105d62d5d4ef96054a47f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c78e2aa4313323cecd1ef12a8d6265b96beee1a199923abf55d9a2a9e291ad23\",\"dweb:/ipfs/QmUTs2KStXucZezzFo3EYeqYu47utu56qrF7jj1Gue65vb\"]},\"node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"node_modules/@openzeppelin/contracts/utils/Errors.sol\":{\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf\",\"dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB\"]},\"node_modules/@openzeppelin/contracts/utils/Pausable.sol\":{\"keccak256\":\"0xb2e5f50762c27fb4b123e3619c3c02bdcba5e515309382e5bfb6f7d6486510bd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1a4b83328c98d518a2699c2cbe9e9b055e78aa57fa8639f1b88deb8b3750b5dc\",\"dweb:/ipfs/QmXdcYj5v7zQxXFPULShHkR5p4Wa2zYuupbHnFdV3cHYtc\"]},\"node_modules/@openzeppelin/contracts/utils/ReentrancyGuard.sol\":{\"keccak256\":\"0x11a5a79827df29e915a12740caf62fe21ebe27c08c9ae3e09abe9ee3ba3866d3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3cf0c69ab827e3251db9ee6a50647d62c90ba580a4d7bbff21f2bea39e7b2f4a\",\"dweb:/ipfs/QmZiKwtKU1SBX4RGfQtY7PZfiapbbu6SZ9vizGQD9UHjRA\"]},\"node_modules/@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0xddce8e17e3d3f9ed818b4f4c4478a8262aab8b11ed322f1bf5ed705bb4bd97fa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8084aa71a4cc7d2980972412a88fe4f114869faea3fefa5436431644eb5c0287\",\"dweb:/ipfs/Qmbqfs5dRdPvHVKY8kTaeyc65NdqXRQwRK7h9s5UJEhD1p\"]},\"node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_endpoint", - "type": "address" - }, - { - "internalType": "address", - "name": "_receiveUln301", - "type": "address" - }, - { - "internalType": "address[]", - "name": "_messageLibs", - "type": "address[]" - }, - { - "internalType": "address", - "name": "_priceFeed", - "type": "address" - }, - { - "internalType": "address", - "name": "_roleAdmin", - "type": "address" - }, - { - "internalType": "address[]", - "name": "_admins", - "type": "address[]" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "type": "error", - "name": "AccessControlBadConfirmation" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" }, - { - "internalType": "bytes32", - "name": "neededRole", - "type": "bytes32" - } - ], - "type": "error", - "name": "AccessControlUnauthorizedAccount" - }, - { "inputs": [], "type": "error", "name": "EnforcedPause" }, - { "inputs": [], "type": "error", "name": "ExpectedPause" }, - { - "inputs": [], - "type": "error", - "name": "ReentrancyGuardReentrantCall" - }, - { - "inputs": [ - { "internalType": "address", "name": "token", "type": "address" } - ], - "type": "error", - "name": "SafeERC20FailedOperation" - }, - { - "inputs": [ - { "internalType": "address", "name": "_to", "type": "address" }, - { "internalType": "uint256", "name": "_value", "type": "uint256" } - ], - "type": "error", - "name": "Transfer_NativeFailed" - }, - { "inputs": [], "type": "error", "name": "Transfer_ToAddressIsZero" }, - { "inputs": [], "type": "error", "name": "Worker_NotAllowed" }, - { "inputs": [], "type": "error", "name": "Worker_OnlyMessageLib" }, - { - "inputs": [], - "type": "error", - "name": "Worker_RoleRenouncingDisabled" - }, - { - "inputs": [ - { - "internalType": "struct IExecutor.DstConfigParam[]", - "name": "params", - "type": "tuple[]", - "components": [ - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { - "internalType": "uint64", - "name": "lzReceiveBaseGas", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "lzComposeBaseGas", - "type": "uint64" - }, - { - "internalType": "uint16", - "name": "multiplierBps", - "type": "uint16" - }, - { - "internalType": "uint128", - "name": "floorMarginUSD", - "type": "uint128" - }, - { - "internalType": "uint128", - "name": "nativeCap", - "type": "uint128" - } - ], - "indexed": false - } - ], - "type": "event", - "name": "DstConfigSet", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "struct Origin", - "name": "origin", - "type": "tuple", - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { "internalType": "uint64", "name": "nonce", "type": "uint64" } - ], - "indexed": false - }, - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32", - "indexed": false - }, - { - "internalType": "address", - "name": "oapp", - "type": "address", - "indexed": false - }, - { - "internalType": "struct IExecutor.NativeDropParams[]", - "name": "params", - "type": "tuple[]", - "components": [ - { - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "indexed": false - }, - { - "internalType": "bool[]", - "name": "success", - "type": "bool[]", - "indexed": false - } - ], - "type": "event", - "name": "NativeDropApplied", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address", - "indexed": false - } - ], - "type": "event", - "name": "Paused", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32", - "indexed": true - }, - { - "internalType": "bytes32", - "name": "previousAdminRole", - "type": "bytes32", - "indexed": true - }, - { - "internalType": "bytes32", - "name": "newAdminRole", - "type": "bytes32", - "indexed": true - } - ], - "type": "event", - "name": "RoleAdminChanged", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32", - "indexed": true - }, - { - "internalType": "address", - "name": "account", - "type": "address", - "indexed": true - }, - { - "internalType": "address", - "name": "sender", - "type": "address", - "indexed": true - } - ], - "type": "event", - "name": "RoleGranted", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32", - "indexed": true - }, - { - "internalType": "address", - "name": "account", - "type": "address", - "indexed": true - }, - { - "internalType": "address", - "name": "sender", - "type": "address", - "indexed": true - } - ], - "type": "event", - "name": "RoleRevoked", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "uint16", - "name": "multiplierBps", - "type": "uint16", - "indexed": false - } - ], - "type": "event", - "name": "SetDefaultMultiplierBps", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "priceFeed", - "type": "address", - "indexed": false - } - ], - "type": "event", - "name": "SetPriceFeed", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32", - "indexed": false - }, - { - "internalType": "uint8[]", - "name": "optionTypes", - "type": "uint8[]", - "indexed": false - } - ], - "type": "event", - "name": "SetSupportedOptionTypes", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "workerLib", - "type": "address", - "indexed": false - } - ], - "type": "event", - "name": "SetWorkerLib", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address", - "indexed": false - } - ], - "type": "event", - "name": "Unpaused", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "lib", - "type": "address", - "indexed": false - }, - { - "internalType": "address", - "name": "to", - "type": "address", - "indexed": false - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "Withdraw", - "anonymous": false - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "DEFAULT_ADMIN_ROLE", - "outputs": [ - { "internalType": "bytes32", "name": "", "type": "bytes32" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "allowlistSize", - "outputs": [ - { "internalType": "uint64", "name": "", "type": "uint64" } - ] - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_dstEid", "type": "uint32" }, - { "internalType": "address", "name": "_sender", "type": "address" }, - { - "internalType": "uint256", - "name": "_calldataSize", - "type": "uint256" - }, - { "internalType": "bytes", "name": "_options", "type": "bytes" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "assignJob", - "outputs": [ - { "internalType": "uint256", "name": "fee", "type": "uint256" } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "_sender", "type": "address" }, - { "internalType": "bytes", "name": "_options", "type": "bytes" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "assignJob", - "outputs": [ - { "internalType": "uint256", "name": "fee", "type": "uint256" } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "_from", "type": "address" }, - { "internalType": "address", "name": "_to", "type": "address" }, - { "internalType": "bytes32", "name": "_guid", "type": "bytes32" }, - { "internalType": "uint16", "name": "_index", "type": "uint16" }, - { "internalType": "bytes", "name": "_message", "type": "bytes" }, - { "internalType": "bytes", "name": "_extraData", "type": "bytes" }, - { - "internalType": "uint256", - "name": "_gasLimit", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function", - "name": "compose302" - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "defaultMultiplierBps", - "outputs": [ - { "internalType": "uint16", "name": "", "type": "uint16" } - ] - }, - { - "inputs": [ - { "internalType": "uint32", "name": "dstEid", "type": "uint32" } - ], - "stateMutability": "view", - "type": "function", - "name": "dstConfig", - "outputs": [ - { - "internalType": "uint64", - "name": "lzReceiveBaseGas", - "type": "uint64" - }, - { - "internalType": "uint16", - "name": "multiplierBps", - "type": "uint16" - }, - { - "internalType": "uint128", - "name": "floorMarginUSD", - "type": "uint128" - }, - { - "internalType": "uint128", - "name": "nativeCap", - "type": "uint128" - }, - { - "internalType": "uint64", - "name": "lzComposeBaseGas", - "type": "uint64" - } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "endpoint", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ] - }, - { - "inputs": [ - { "internalType": "bytes", "name": "_packet", "type": "bytes" }, - { - "internalType": "uint256", - "name": "_gasLimit", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "execute301" - }, - { - "inputs": [ - { - "internalType": "struct IExecutor.ExecutionParams", - "name": "_executionParams", - "type": "tuple", - "components": [ - { - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "internalType": "struct Origin", - "name": "origin", - "type": "tuple", - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - } - ] - }, - { - "internalType": "bytes32", - "name": "guid", - "type": "bytes32" - }, - { "internalType": "bytes", "name": "message", "type": "bytes" }, - { - "internalType": "bytes", - "name": "extraData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "gasLimit", - "type": "uint256" - } - ] - } - ], - "stateMutability": "payable", - "type": "function", - "name": "execute302" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_dstEid", "type": "uint32" }, - { "internalType": "address", "name": "_sender", "type": "address" }, - { - "internalType": "uint256", - "name": "_calldataSize", - "type": "uint256" - }, - { "internalType": "bytes", "name": "_options", "type": "bytes" } - ], - "stateMutability": "view", - "type": "function", - "name": "getFee", - "outputs": [ - { "internalType": "uint256", "name": "fee", "type": "uint256" } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "_sender", "type": "address" }, - { "internalType": "bytes", "name": "_options", "type": "bytes" } - ], - "stateMutability": "view", - "type": "function", - "name": "getFee", - "outputs": [ - { "internalType": "uint256", "name": "fee", "type": "uint256" } - ] - }, - { - "inputs": [ - { "internalType": "bytes32", "name": "role", "type": "bytes32" } - ], - "stateMutability": "view", - "type": "function", - "name": "getRoleAdmin", - "outputs": [ - { "internalType": "bytes32", "name": "", "type": "bytes32" } - ] - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" } - ], - "stateMutability": "view", - "type": "function", - "name": "getSupportedOptionTypes", - "outputs": [ - { "internalType": "uint8[]", "name": "", "type": "uint8[]" } - ] - }, - { - "inputs": [ - { "internalType": "bytes32", "name": "role", "type": "bytes32" }, - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "grantRole" - }, - { - "inputs": [ - { "internalType": "address", "name": "_sender", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "hasAcl", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "bytes32", "name": "role", "type": "bytes32" }, - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "hasRole", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "localEidV2", - "outputs": [ - { "internalType": "uint32", "name": "", "type": "uint32" } - ] - }, - { - "inputs": [ - { - "internalType": "struct Origin", - "name": "_origin", - "type": "tuple", - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { "internalType": "uint64", "name": "nonce", "type": "uint64" } - ] - }, - { "internalType": "uint32", "name": "_dstEid", "type": "uint32" }, - { "internalType": "address", "name": "_oapp", "type": "address" }, - { - "internalType": "struct IExecutor.NativeDropParams[]", - "name": "_nativeDropParams", - "type": "tuple[]", - "components": [ - { - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ] - }, - { - "internalType": "uint256", - "name": "_nativeDropGasLimit", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function", - "name": "nativeDrop" - }, - { - "inputs": [ - { - "internalType": "struct Origin", - "name": "_origin", - "type": "tuple", - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { "internalType": "uint64", "name": "nonce", "type": "uint64" } - ] - }, - { - "internalType": "struct IExecutor.NativeDropParams[]", - "name": "_nativeDropParams", - "type": "tuple[]", - "components": [ - { - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ] - }, - { - "internalType": "uint256", - "name": "_nativeDropGasLimit", - "type": "uint256" - }, - { "internalType": "bytes", "name": "_packet", "type": "bytes" }, - { - "internalType": "uint256", - "name": "_gasLimit", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function", - "name": "nativeDropAndExecute301" - }, - { - "inputs": [ - { - "internalType": "struct IExecutor.NativeDropParams[]", - "name": "_nativeDropParams", - "type": "tuple[]", - "components": [ - { - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ] - }, - { - "internalType": "uint256", - "name": "_nativeDropGasLimit", - "type": "uint256" - }, - { - "internalType": "struct IExecutor.ExecutionParams", - "name": "_executionParams", - "type": "tuple", - "components": [ - { - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "internalType": "struct Origin", - "name": "origin", - "type": "tuple", - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - } - ] - }, - { - "internalType": "bytes32", - "name": "guid", - "type": "bytes32" - }, - { "internalType": "bytes", "name": "message", "type": "bytes" }, - { - "internalType": "bytes", - "name": "extraData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "gasLimit", - "type": "uint256" - } - ] - } - ], - "stateMutability": "payable", - "type": "function", - "name": "nativeDropAndExecute302" - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "paused", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "priceFeed", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "receiveUln301", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ] - }, - { - "inputs": [ - { "internalType": "bytes32", "name": "", "type": "bytes32" }, - { "internalType": "address", "name": "", "type": "address" } - ], - "stateMutability": "pure", - "type": "function", - "name": "renounceRole" - }, - { - "inputs": [ - { "internalType": "bytes32", "name": "role", "type": "bytes32" }, - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "revokeRole" - }, - { - "inputs": [ - { - "internalType": "uint16", - "name": "_multiplierBps", - "type": "uint16" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setDefaultMultiplierBps" - }, - { - "inputs": [ - { - "internalType": "struct IExecutor.DstConfigParam[]", - "name": "_params", - "type": "tuple[]", - "components": [ - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { - "internalType": "uint64", - "name": "lzReceiveBaseGas", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "lzComposeBaseGas", - "type": "uint64" - }, - { - "internalType": "uint16", - "name": "multiplierBps", - "type": "uint16" - }, - { - "internalType": "uint128", - "name": "floorMarginUSD", - "type": "uint128" - }, - { - "internalType": "uint128", - "name": "nativeCap", - "type": "uint128" - } - ] - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setDstConfig" - }, - { - "inputs": [ - { "internalType": "bool", "name": "_paused", "type": "bool" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setPaused" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_priceFeed", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setPriceFeed" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { - "internalType": "uint8[]", - "name": "_optionTypes", - "type": "uint8[]" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setSupportedOptionTypes" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_workerFeeLib", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setWorkerFeeLib" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "stateMutability": "view", - "type": "function", - "name": "supportsInterface", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "address", "name": "_lib", "type": "address" }, - { "internalType": "address", "name": "_to", "type": "address" }, - { "internalType": "uint256", "name": "_amount", "type": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "withdrawFee" - }, - { - "inputs": [ - { "internalType": "address", "name": "_token", "type": "address" }, - { "internalType": "address", "name": "_to", "type": "address" }, - { "internalType": "uint256", "name": "_amount", "type": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "withdrawToken" - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "workerFeeLib", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ] - } - ], - "devdoc": { - "kind": "dev", - "methods": { - "getRoleAdmin(bytes32)": { - "details": "Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}." - }, - "grantRole(bytes32,address)": { - "details": "Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event." - }, - "hasAcl(address)": { - "details": "Access control list using allowlist and denylist1) if one address is in the denylist -> deny2) else if address in the allowlist OR allowlist is empty (allows everyone)-> allow3) else deny", - "params": { "_sender": "address to check" } - }, - "hasRole(bytes32,address)": { - "details": "Returns `true` if `account` has been granted `role`." - }, - "paused()": { - "details": "Returns true if the contract is paused, and false otherwise." - }, - "renounceRole(bytes32,address)": { - "details": "overrides AccessControl to disable renouncing of roles" - }, - "revokeRole(bytes32,address)": { - "details": "Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event." - }, - "setDefaultMultiplierBps(uint16)": { - "params": { "_multiplierBps": "default multiplier for worker fee" } - }, - "setPaused(bool)": { - "details": "flag to pause execution of workers (if used with whenNotPaused modifier)", - "params": { "_paused": "true to pause, false to unpause" } - }, - "setPriceFeed(address)": { - "params": { "_priceFeed": "price feed address" } - }, - "setWorkerFeeLib(address)": { - "params": { "_workerFeeLib": "worker fee lib address" } - }, - "supportsInterface(bytes4)": { - "details": "See {IERC165-supportsInterface}." - }, - "withdrawFee(address,address,uint256)": { - "details": "supports withdrawing fee from ULN301, ULN302 and more", - "params": { - "_amount": "amount to withdraw", - "_lib": "message lib address", - "_to": "address to withdraw fee to" - } - }, - "withdrawToken(address,address,uint256)": { - "details": "supports withdrawing token from the contract", - "params": { - "_amount": "amount to withdraw", - "_to": "address to withdraw token to", - "_token": "token address" - } - } - }, - "version": 1 - }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ExecutorMock.sol": "ExecutorMock" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IExecutor.sol": { - "keccak256": "0x2fd26e454b060ede7afa15f8bbc67bd43f9181b6405ca411d36c8b538be016af", - "urls": [ - "bzz-raw://cf2142e83214bb392f69ed14266718cfd803f849a7239ee9a1950ddf66553696", - "dweb:/ipfs/QmSZ2mPMZqWBetMU8VESKtxy7UdSThUVmJmTFMHEyKLTGZ" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IExecutorFeeLib.sol": { - "keccak256": "0x801d12eca6d6b232fb91d949cdb70a4c547c5e27e73555f2f1eb9e757c639bcc", - "urls": [ - "bzz-raw://b61bdffe26ff3902edab3efb0b5af3808ec9e28d72db95b77128502b9bc7638d", - "dweb:/ipfs/Qmcyf3npDDEq28b9XqmXgSGyQegj2cxUZQ3UekSNf34g8M" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroExecutor.sol": { - "keccak256": "0x3647af317ee126b1247a782abb30e59ec5ab21b4945f1d3b4370d1fa3c1bf347", - "urls": [ - "bzz-raw://5b51cd5e7347ee869a06bd57a698f40e4a901ec7fdcb27f0ef485e4a0e1e9be4", - "dweb:/ipfs/QmP2Nc73veRzLGdUahkjhQAiKR9ZWYiUtSGwoMB1sPXxUp" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroReadExecutor.sol": { - "keccak256": "0x360936885f173f816ffb47e555d480928e74eb1ad54a76af0f4595ecba2d5657", - "urls": [ - "bzz-raw://16b5095e6439b1e416eb70571a1dd8f4f21a0d77b19c9e510ca289d99e5e09ab", - "dweb:/ipfs/QmZ2mjQDQ35gJseyzmQhik4cBgN2ESADzofFNVFvgS64hv" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IWorker.sol": { - "keccak256": "0xa6b61913767305227576cc6da5067de4208f09a4f58bfbfe32beafdfae9869b1", - "urls": [ - "bzz-raw://b7fce83bfb831f383606aee7f5ff68a330c8526bb1036f9ba0813d3e4fa8d534", - "dweb:/ipfs/QmR7zAqJkmCgBj6sguS8t2WthY5k6FwsakgH4UY11uqD4n" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/uln301/interfaces/IUltraLightNode301.sol": { - "keccak256": "0x47f8ebeaa7d96a6f337a18c46e3c532da578c7cb0a13fb6e6f014286b991902f", - "urls": [ - "bzz-raw://d51f208b931be54e0ae1801c71c0756251d8c26f8d9b7911be1ad57b3d4a5691", - "dweb:/ipfs/QmWqjst7jnYtSXQ9pakYHutDvENKLyqNg9nPfMxTH8p2Ed" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol": { - "keccak256": "0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3", - "urls": [ - "bzz-raw://bacc29fd3866af71e59cb0bdc1cf82c882a4a7f4e2652fd413c9f12649762083", - "dweb:/ipfs/QmZh2toLnrQDWaNYhS5K4NoW7Vxd2GdZx9KA77vKEDLAqs" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol": { - "keccak256": "0x5cf5f24751b4e3ea1c9c5ded07cedfdfd62566b6daaffcc0144733859c9dba0c", - "urls": [ - "bzz-raw://cae7e35007a714f007ea08045ef7c0cfa6c91fd2425b5028b2d49abad357a5f0", - "dweb:/ipfs/QmcDBs5tsiyB35b8cwzWQWNnpkawb3uuHRaqE77Hxm2tve" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol": { - "keccak256": "0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc", - "urls": [ - "bzz-raw://d8ff6a8a89297fa127f86b54e0db3eba1d6a6eeb4f6398d3c84d569665ac8f1b", - "dweb:/ipfs/QmVSwhw6xFDrLRAX4RXaCM47yBaBtac4wf36DYEq6KCTvT" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol": { - "keccak256": "0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972", - "urls": [ - "bzz-raw://7e1b245d58221d16d8b5e0f01ef3e289a24a7df1ace3b94239e4d5b954ad5927", - "dweb:/ipfs/Qmappsgp7PCY9rSSNE9Cdn4BTRX591WfCSEgq2HxhA3z6S" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol": { - "keccak256": "0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901", - "urls": [ - "bzz-raw://b18b23a1643fc6636c4ad9d9023e2e6ca2d3c2a4a046482d4655bff09950598d", - "dweb:/ipfs/Qma6G5SqiovwrMPfgqTrRngK1HWW373Wkf9c6YP2NhXpPk" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol": { - "keccak256": "0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e", - "urls": [ - "bzz-raw://5173fc9143bea314b159ca5a9adb5626659ef763bc598e27de5fa46efe3291a6", - "dweb:/ipfs/QmSLFeMFPmVeGxT4sxRPW28ictjAS22M8rLeYRu9TXkA6D" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol": { - "keccak256": "0xf1c07bc61e7b1dce195ed12d50f87980fbf2d63cac1326fd28287f55fe0ba625", - "urls": [ - "bzz-raw://060f10ff7afc33c1c2f2b4b5ba29231fd3c943146488084d0e4ab99fce991d97", - "dweb:/ipfs/QmaSsefAqqEqtf8FgFUmDYMwTsAty3X1pqDb6SiFvry6B3" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol": { - "keccak256": "0x2ebbcaaab3554edcd41b581f1a72ac1806afbfb8047d0d47ff098f9af30d6deb", - "urls": [ - "bzz-raw://2d4b2cf5c3b16dc76c6767f285b57c0af917972327b2be3f7cba5825402f5fc1", - "dweb:/ipfs/QmQQWiHE2jKEDbjzGutSoZwtApSXYfLqZt5CxEpFj8xyvT" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Transfer.sol": { - "keccak256": "0x621d6dd5b8b7e827351459fff4ac87c16ba4656757592cf67de8b199aea4cf9a", - "urls": [ - "bzz-raw://345aa8c007ed8b96a74260d289545713f1d7180df270d67687e3a540a61fa5c0", - "dweb:/ipfs/QmNWCvpqSuar6UGLDVshUc7shUv3pt1J5FTf9VyZZ13wXL" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol": { - "keccak256": "0xc84cf1bf785977fe1fbe7566eef902c2db68d0e163813ebe6c34921754802680", - "urls": [ - "bzz-raw://de686666fc16fa432d4208d85cec87dc952faf3e481b683b9adf4b4610db4b09", - "dweb:/ipfs/QmdmQeopzmxqRzi9DNB4EJDrYUXFfD7fUhnGhSni4QejUW" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ExecutorMock.sol": { - "keccak256": "0xbcdc4500270cd5496f10760ffe9e0444d23e454dd0ae2555e0661acf22fce96f", - "urls": [ - "bzz-raw://b816999bcfef5586b5e80bba21584b821fd7f7b32c276492adee530ffa83bb73", - "dweb:/ipfs/QmXLV8ieYdrTBERajBCVuMzknFyPHJjnw7MGkzULAdjdt8" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/WorkerMock.sol": { - "keccak256": "0x6c5bc31c117033dd35fa7ab3b13b1647a4b449c5f5b4cbff41bce8a63529ab97", - "urls": [ - "bzz-raw://01aa1d3f3b8e2fd4b544312d96916b16b97e01ab740e2bae1137723b2f1a31b1", - "dweb:/ipfs/QmVMemJ4MSgi6y9NxDdSeB6QbJRtCWojJNxzs3CRLT56EA" - ], - "license": "LZBL-1.2" - }, - "node_modules/@openzeppelin/contracts/access/AccessControl.sol": { - "keccak256": "0xa0e92d42942f4f57c5be50568dac11e9d00c93efcb458026e18d2d9b9b2e7308", - "urls": [ - "bzz-raw://46326c0bb1e296b67185e81c918e0b40501b8b6386165855df0a3f3c634b6a80", - "dweb:/ipfs/QmTwyrDYtsxsk6pymJTK94PnEpzsmkpUxFuzEiakDopy4Z" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/access/IAccessControl.sol": { - "keccak256": "0xc1c2a7f1563b77050dc6d507db9f4ada5d042c1f6a9ddbffdc49c77cdc0a1606", - "urls": [ - "bzz-raw://fd54abb96a6156d9a761f6fdad1d3004bc48d2d4fce47f40a3f91a7ae83fc3a1", - "dweb:/ipfs/QmUrFSGkTDJ7WaZ6qPVVe3Gn5uN2viPb7x7QQ35UX4DofX" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol": { - "keccak256": "0x9b6b3e7803bc5f2f8cd7ad57db8ac1def61a9930a5a3107df4882e028a9605d7", - "urls": [ - "bzz-raw://da62d6be1f5c6edf577f0cb45666a8aa9c2086a4bac87d95d65f02e2f4c36a4b", - "dweb:/ipfs/QmNkpvBpoCMvX8JwAFNSc5XxJ2q5BXJpL5L1txb4QkqVFF" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/interfaces/IERC165.sol": { - "keccak256": "0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724", - "urls": [ - "bzz-raw://11fea9f8bc98949ac6709f0c1699db7430d2948137aa94d5a9e95a91f61a710a", - "dweb:/ipfs/QmQdfRXxQjwP6yn3DVo1GHPpriKNcFghSPi94Z1oKEFUNS" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/interfaces/IERC20.sol": { - "keccak256": "0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c", - "urls": [ - "bzz-raw://a2608291cb038b388d80b79a06b6118a42f7894ff67b7da10ec0dbbf5b2973ba", - "dweb:/ipfs/QmWohqcBLbcxmA4eGPhZDXe5RYMMEEpFq22nfkaUMvTfw1" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol": { - "keccak256": "0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7", - "urls": [ - "bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db", - "dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol": { - "keccak256": "0xca2ae13e0610f6a99238dd00b97bd786bc92732dae6d6b9d61f573ec51018310", - "urls": [ - "bzz-raw://75f8c71ce0c91c40dd5f249ace0b7d8270f8f1767231bcf71490f7157d6ba862", - "dweb:/ipfs/QmYXgxeDyFHvz3JsXxLEYN6GNUR44ThHeFj5XkpkgMoG4w" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Address.sol": { - "keccak256": "0x9d8da059267bac779a2dbbb9a26c2acf00ca83085e105d62d5d4ef96054a47f5", - "urls": [ - "bzz-raw://c78e2aa4313323cecd1ef12a8d6265b96beee1a199923abf55d9a2a9e291ad23", - "dweb:/ipfs/QmUTs2KStXucZezzFo3EYeqYu47utu56qrF7jj1Gue65vb" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Context.sol": { - "keccak256": "0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2", - "urls": [ - "bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12", - "dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Errors.sol": { - "keccak256": "0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123", - "urls": [ - "bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf", - "dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Pausable.sol": { - "keccak256": "0xb2e5f50762c27fb4b123e3619c3c02bdcba5e515309382e5bfb6f7d6486510bd", - "urls": [ - "bzz-raw://1a4b83328c98d518a2699c2cbe9e9b055e78aa57fa8639f1b88deb8b3750b5dc", - "dweb:/ipfs/QmXdcYj5v7zQxXFPULShHkR5p4Wa2zYuupbHnFdV3cHYtc" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/ReentrancyGuard.sol": { - "keccak256": "0x11a5a79827df29e915a12740caf62fe21ebe27c08c9ae3e09abe9ee3ba3866d3", - "urls": [ - "bzz-raw://3cf0c69ab827e3251db9ee6a50647d62c90ba580a4d7bbff21f2bea39e7b2f4a", - "dweb:/ipfs/QmZiKwtKU1SBX4RGfQtY7PZfiapbbu6SZ9vizGQD9UHjRA" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/introspection/ERC165.sol": { - "keccak256": "0xddce8e17e3d3f9ed818b4f4c4478a8262aab8b11ed322f1bf5ed705bb4bd97fa", - "urls": [ - "bzz-raw://8084aa71a4cc7d2980972412a88fe4f114869faea3fefa5436431644eb5c0287", - "dweb:/ipfs/Qmbqfs5dRdPvHVKY8kTaeyc65NdqXRQwRK7h9s5UJEhD1p" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol": { - "keccak256": "0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8", - "urls": [ - "bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621", - "dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL" - ], - "license": "MIT" - } - }, - "version": 1 - }, - "id": 77 -} diff --git a/examples/oft-movement/out/ExecutorOptions.sol/ExecutorOptions.json b/examples/oft-movement/out/ExecutorOptions.sol/ExecutorOptions.json deleted file mode 100644 index 8c8911594..000000000 --- a/examples/oft-movement/out/ExecutorOptions.sol/ExecutorOptions.json +++ /dev/null @@ -1,100 +0,0 @@ -{ - "abi": [ - { - "type": "error", - "name": "Executor_InvalidLzComposeOption", - "inputs": [] - }, - { "type": "error", "name": "Executor_InvalidLzReadOption", "inputs": [] }, - { - "type": "error", - "name": "Executor_InvalidLzReceiveOption", - "inputs": [] - }, - { - "type": "error", - "name": "Executor_InvalidNativeDropOption", - "inputs": [] - } - ], - "bytecode": { - "object": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122029a4b0e1240020e3367e1b9f8fb170721452c22df13bec03d32049ab6053f83e64736f6c63430008160033", - "sourceMap": "145:4183:11:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;145:4183:11;;;;;;;;;;;;;;;;;", - "linkReferences": {} - }, - "deployedBytecode": { - "object": "0x73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122029a4b0e1240020e3367e1b9f8fb170721452c22df13bec03d32049ab6053f83e64736f6c63430008160033", - "sourceMap": "145:4183:11:-:0;;;;;;;;", - "linkReferences": {} - }, - "methodIdentifiers": {}, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"Executor_InvalidLzComposeOption\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Executor_InvalidLzReadOption\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Executor_InvalidLzReceiveOption\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Executor_InvalidNativeDropOption\",\"type\":\"error\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/libs/ExecutorOptions.sol\":\"ExecutorOptions\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/libs/ExecutorOptions.sol\":{\"keccak256\":\"0x441b723f2f597be2ec2bb361fcf3f11852c23534db1cfa7d2ffff7e61d228e3c\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://636817d20f90f75032e35376256cf5f4d2a047d6541b45f644d82a2e4dc8f1eb\",\"dweb:/ipfs/QmcEFRxCmmm9hKbqi7Powj6ATbw4JXXJW4rxfwMcxWsDnT\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/CalldataBytesLib.sol\":{\"keccak256\":\"0x5c0db161cef6603c3b256d4220f489419e7478ef775e52a80056654129c61875\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://a33245d0fdd3992bb56b31d1840108d36bb46c8d617b659ef1af8dd7ed86302d\",\"dweb:/ipfs/QmWyBqT7Tdrfn5zz9xYM3V1PBtfAZAVwwCrrKwwfi3wMQK\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { - "inputs": [], - "type": "error", - "name": "Executor_InvalidLzComposeOption" - }, - { - "inputs": [], - "type": "error", - "name": "Executor_InvalidLzReadOption" - }, - { - "inputs": [], - "type": "error", - "name": "Executor_InvalidLzReceiveOption" - }, - { - "inputs": [], - "type": "error", - "name": "Executor_InvalidNativeDropOption" - } - ], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/libs/ExecutorOptions.sol": "ExecutorOptions" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/libs/ExecutorOptions.sol": { - "keccak256": "0x441b723f2f597be2ec2bb361fcf3f11852c23534db1cfa7d2ffff7e61d228e3c", - "urls": [ - "bzz-raw://636817d20f90f75032e35376256cf5f4d2a047d6541b45f644d82a2e4dc8f1eb", - "dweb:/ipfs/QmcEFRxCmmm9hKbqi7Powj6ATbw4JXXJW4rxfwMcxWsDnT" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/CalldataBytesLib.sol": { - "keccak256": "0x5c0db161cef6603c3b256d4220f489419e7478ef775e52a80056654129c61875", - "urls": [ - "bzz-raw://a33245d0fdd3992bb56b31d1840108d36bb46c8d617b659ef1af8dd7ed86302d", - "dweb:/ipfs/QmWyBqT7Tdrfn5zz9xYM3V1PBtfAZAVwwCrrKwwfi3wMQK" - ], - "license": "LZBL-1.2" - } - }, - "version": 1 - }, - "id": 11 -} diff --git a/examples/oft-movement/out/GUID.sol/GUID.json b/examples/oft-movement/out/GUID.sol/GUID.json deleted file mode 100644 index 5bc7bafc2..000000000 --- a/examples/oft-movement/out/GUID.sol/GUID.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "abi": [], - "bytecode": { - "object": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220d3345436b129eabc668cbbb5d99f402394d1e0149b9d6f0728d28f951182367064736f6c63430008160033", - "sourceMap": "114:345:43:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;114:345:43;;;;;;;;;;;;;;;;;", - "linkReferences": {} - }, - "deployedBytecode": { - "object": "0x73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220d3345436b129eabc668cbbb5d99f402394d1e0149b9d6f0728d28f951182367064736f6c63430008160033", - "sourceMap": "114:345:43:-:0;;;;;;;;", - "linkReferences": {} - }, - "methodIdentifiers": {}, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/GUID.sol\":\"GUID\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol\":{\"keccak256\":\"0x2ebbcaaab3554edcd41b581f1a72ac1806afbfb8047d0d47ff098f9af30d6deb\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://2d4b2cf5c3b16dc76c6767f285b57c0af917972327b2be3f7cba5825402f5fc1\",\"dweb:/ipfs/QmQQWiHE2jKEDbjzGutSoZwtApSXYfLqZt5CxEpFj8xyvT\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/GUID.sol\":{\"keccak256\":\"0x8a44524af7deb96593f6b5606e9973654a113e1687809f2e45d4a91ba89862d5\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://32dd0b5d1946e0cd5c7b728086aafac50a62c061115afb8b41254589c8a6732b\",\"dweb:/ipfs/QmR9QqtiAUPRLaRVv5wnth3NGPhdWB8rJmWYfz3o5Z1mWj\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/GUID.sol": "GUID" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol": { - "keccak256": "0x2ebbcaaab3554edcd41b581f1a72ac1806afbfb8047d0d47ff098f9af30d6deb", - "urls": [ - "bzz-raw://2d4b2cf5c3b16dc76c6767f285b57c0af917972327b2be3f7cba5825402f5fc1", - "dweb:/ipfs/QmQQWiHE2jKEDbjzGutSoZwtApSXYfLqZt5CxEpFj8xyvT" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/GUID.sol": { - "keccak256": "0x8a44524af7deb96593f6b5606e9973654a113e1687809f2e45d4a91ba89862d5", - "urls": [ - "bzz-raw://32dd0b5d1946e0cd5c7b728086aafac50a62c061115afb8b41254589c8a6732b", - "dweb:/ipfs/QmR9QqtiAUPRLaRVv5wnth3NGPhdWB8rJmWYfz3o5Z1mWj" - ], - "license": "LZBL-1.2" - } - }, - "version": 1 - }, - "id": 43 -} diff --git a/examples/oft-movement/out/IAccessControl.sol/IAccessControl.json b/examples/oft-movement/out/IAccessControl.sol/IAccessControl.json deleted file mode 100644 index f0c9f07c6..000000000 --- a/examples/oft-movement/out/IAccessControl.sol/IAccessControl.json +++ /dev/null @@ -1,355 +0,0 @@ -{ - "abi": [ - { - "type": "function", - "name": "getRoleAdmin", - "inputs": [ - { "name": "role", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "grantRole", - "inputs": [ - { "name": "role", "type": "bytes32", "internalType": "bytes32" }, - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "hasRole", - "inputs": [ - { "name": "role", "type": "bytes32", "internalType": "bytes32" }, - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "renounceRole", - "inputs": [ - { "name": "role", "type": "bytes32", "internalType": "bytes32" }, - { - "name": "callerConfirmation", - "type": "address", - "internalType": "address" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "revokeRole", - "inputs": [ - { "name": "role", "type": "bytes32", "internalType": "bytes32" }, - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "event", - "name": "RoleAdminChanged", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "indexed": true, - "internalType": "bytes32" - }, - { - "name": "previousAdminRole", - "type": "bytes32", - "indexed": true, - "internalType": "bytes32" - }, - { - "name": "newAdminRole", - "type": "bytes32", - "indexed": true, - "internalType": "bytes32" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "RoleGranted", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "indexed": true, - "internalType": "bytes32" - }, - { - "name": "account", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "sender", - "type": "address", - "indexed": true, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "RoleRevoked", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "indexed": true, - "internalType": "bytes32" - }, - { - "name": "account", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "sender", - "type": "address", - "indexed": true, - "internalType": "address" - } - ], - "anonymous": false - }, - { "type": "error", "name": "AccessControlBadConfirmation", "inputs": [] }, - { - "type": "error", - "name": "AccessControlUnauthorizedAccount", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" }, - { "name": "neededRole", "type": "bytes32", "internalType": "bytes32" } - ] - } - ], - "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "methodIdentifiers": { - "getRoleAdmin(bytes32)": "248a9ca3", - "grantRole(bytes32,address)": "2f2ff15d", - "hasRole(bytes32,address)": "91d14854", - "renounceRole(bytes32,address)": "36568abe", - "revokeRole(bytes32,address)": "d547741f" - }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AccessControlBadConfirmation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"neededRole\",\"type\":\"bytes32\"}],\"name\":\"AccessControlUnauthorizedAccount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"callerConfirmation\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"External interface of AccessControl declared to support ERC-165 detection.\",\"errors\":{\"AccessControlBadConfirmation()\":[{\"details\":\"The caller of a function is not the expected one. NOTE: Don't confuse with {AccessControlUnauthorizedAccount}.\"}],\"AccessControlUnauthorizedAccount(address,bytes32)\":[{\"details\":\"The `account` is missing a role.\"}]},\"events\":{\"RoleAdminChanged(bytes32,bytes32,bytes32)\":{\"details\":\"Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted signaling this.\"},\"RoleGranted(bytes32,address,address)\":{\"details\":\"Emitted when `account` is granted `role`. `sender` is the account that originated the contract call. This account bears the admin role (for the granted role). Expected in cases where the role was granted using the internal {AccessControl-_grantRole}.\"},\"RoleRevoked(bytes32,address,address)\":{\"details\":\"Emitted when `account` is revoked `role`. `sender` is the account that originated the contract call: - if using `revokeRole`, it is the admin role bearer - if using `renounceRole`, it is the role bearer (i.e. `account`)\"}},\"kind\":\"dev\",\"methods\":{\"getRoleAdmin(bytes32)\":{\"details\":\"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {AccessControl-_setRoleAdmin}.\"},\"grantRole(bytes32,address)\":{\"details\":\"Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role.\"},\"hasRole(bytes32,address)\":{\"details\":\"Returns `true` if `account` has been granted `role`.\"},\"renounceRole(bytes32,address)\":{\"details\":\"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `callerConfirmation`.\"},\"revokeRole(bytes32,address)\":{\"details\":\"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@openzeppelin/contracts/access/IAccessControl.sol\":\"IAccessControl\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@openzeppelin/contracts/access/IAccessControl.sol\":{\"keccak256\":\"0xc1c2a7f1563b77050dc6d507db9f4ada5d042c1f6a9ddbffdc49c77cdc0a1606\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fd54abb96a6156d9a761f6fdad1d3004bc48d2d4fce47f40a3f91a7ae83fc3a1\",\"dweb:/ipfs/QmUrFSGkTDJ7WaZ6qPVVe3Gn5uN2viPb7x7QQ35UX4DofX\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { - "inputs": [], - "type": "error", - "name": "AccessControlBadConfirmation" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" }, - { - "internalType": "bytes32", - "name": "neededRole", - "type": "bytes32" - } - ], - "type": "error", - "name": "AccessControlUnauthorizedAccount" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32", - "indexed": true - }, - { - "internalType": "bytes32", - "name": "previousAdminRole", - "type": "bytes32", - "indexed": true - }, - { - "internalType": "bytes32", - "name": "newAdminRole", - "type": "bytes32", - "indexed": true - } - ], - "type": "event", - "name": "RoleAdminChanged", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32", - "indexed": true - }, - { - "internalType": "address", - "name": "account", - "type": "address", - "indexed": true - }, - { - "internalType": "address", - "name": "sender", - "type": "address", - "indexed": true - } - ], - "type": "event", - "name": "RoleGranted", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32", - "indexed": true - }, - { - "internalType": "address", - "name": "account", - "type": "address", - "indexed": true - }, - { - "internalType": "address", - "name": "sender", - "type": "address", - "indexed": true - } - ], - "type": "event", - "name": "RoleRevoked", - "anonymous": false - }, - { - "inputs": [ - { "internalType": "bytes32", "name": "role", "type": "bytes32" } - ], - "stateMutability": "view", - "type": "function", - "name": "getRoleAdmin", - "outputs": [ - { "internalType": "bytes32", "name": "", "type": "bytes32" } - ] - }, - { - "inputs": [ - { "internalType": "bytes32", "name": "role", "type": "bytes32" }, - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "grantRole" - }, - { - "inputs": [ - { "internalType": "bytes32", "name": "role", "type": "bytes32" }, - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "hasRole", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "bytes32", "name": "role", "type": "bytes32" }, - { - "internalType": "address", - "name": "callerConfirmation", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "renounceRole" - }, - { - "inputs": [ - { "internalType": "bytes32", "name": "role", "type": "bytes32" }, - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "revokeRole" - } - ], - "devdoc": { - "kind": "dev", - "methods": { - "getRoleAdmin(bytes32)": { - "details": "Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {AccessControl-_setRoleAdmin}." - }, - "grantRole(bytes32,address)": { - "details": "Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role." - }, - "hasRole(bytes32,address)": { - "details": "Returns `true` if `account` has been granted `role`." - }, - "renounceRole(bytes32,address)": { - "details": "Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `callerConfirmation`." - }, - "revokeRole(bytes32,address)": { - "details": "Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role." - } - }, - "version": 1 - }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@openzeppelin/contracts/access/IAccessControl.sol": "IAccessControl" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@openzeppelin/contracts/access/IAccessControl.sol": { - "keccak256": "0xc1c2a7f1563b77050dc6d507db9f4ada5d042c1f6a9ddbffdc49c77cdc0a1606", - "urls": [ - "bzz-raw://fd54abb96a6156d9a761f6fdad1d3004bc48d2d4fce47f40a3f91a7ae83fc3a1", - "dweb:/ipfs/QmUrFSGkTDJ7WaZ6qPVVe3Gn5uN2viPb7x7QQ35UX4DofX" - ], - "license": "MIT" - } - }, - "version": 1 - }, - "id": 106 -} diff --git a/examples/oft-movement/out/IDVN.sol/IDVN.json b/examples/oft-movement/out/IDVN.sol/IDVN.json deleted file mode 100644 index ee5f2d939..000000000 --- a/examples/oft-movement/out/IDVN.sol/IDVN.json +++ /dev/null @@ -1,661 +0,0 @@ -{ - "abi": [ - { - "type": "function", - "name": "assignJob", - "inputs": [ - { - "name": "_param", - "type": "tuple", - "internalType": "struct ILayerZeroDVN.AssignJobParam", - "components": [ - { "name": "dstEid", "type": "uint32", "internalType": "uint32" }, - { - "name": "packetHeader", - "type": "bytes", - "internalType": "bytes" - }, - { - "name": "payloadHash", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "confirmations", - "type": "uint64", - "internalType": "uint64" - }, - { "name": "sender", "type": "address", "internalType": "address" } - ] - }, - { "name": "_options", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [ - { "name": "fee", "type": "uint256", "internalType": "uint256" } - ], - "stateMutability": "payable" - }, - { - "type": "function", - "name": "assignJob", - "inputs": [ - { "name": "_sender", "type": "address", "internalType": "address" }, - { "name": "_packetHeader", "type": "bytes", "internalType": "bytes" }, - { "name": "_cmd", "type": "bytes", "internalType": "bytes" }, - { "name": "_options", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [ - { "name": "fee", "type": "uint256", "internalType": "uint256" } - ], - "stateMutability": "payable" - }, - { - "type": "function", - "name": "defaultMultiplierBps", - "inputs": [], - "outputs": [{ "name": "", "type": "uint16", "internalType": "uint16" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "dstConfig", - "inputs": [ - { "name": "_dstEid", "type": "uint32", "internalType": "uint32" } - ], - "outputs": [ - { "name": "", "type": "uint64", "internalType": "uint64" }, - { "name": "", "type": "uint16", "internalType": "uint16" }, - { "name": "", "type": "uint128", "internalType": "uint128" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getFee", - "inputs": [ - { "name": "_dstEid", "type": "uint32", "internalType": "uint32" }, - { - "name": "_confirmations", - "type": "uint64", - "internalType": "uint64" - }, - { "name": "_sender", "type": "address", "internalType": "address" }, - { "name": "_options", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [ - { "name": "fee", "type": "uint256", "internalType": "uint256" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getFee", - "inputs": [ - { "name": "_sender", "type": "address", "internalType": "address" }, - { "name": "_packetHeader", "type": "bytes", "internalType": "bytes" }, - { "name": "_cmd", "type": "bytes", "internalType": "bytes" }, - { "name": "_options", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [ - { "name": "fee", "type": "uint256", "internalType": "uint256" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getSupportedOptionTypes", - "inputs": [ - { "name": "_eid", "type": "uint32", "internalType": "uint32" } - ], - "outputs": [{ "name": "", "type": "uint8[]", "internalType": "uint8[]" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "priceFeed", - "inputs": [], - "outputs": [{ "name": "", "type": "address", "internalType": "address" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "setDefaultMultiplierBps", - "inputs": [ - { "name": "_multiplierBps", "type": "uint16", "internalType": "uint16" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setPriceFeed", - "inputs": [ - { "name": "_priceFeed", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setSupportedOptionTypes", - "inputs": [ - { "name": "_eid", "type": "uint32", "internalType": "uint32" }, - { "name": "_optionTypes", "type": "uint8[]", "internalType": "uint8[]" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "withdrawFee", - "inputs": [ - { "name": "_lib", "type": "address", "internalType": "address" }, - { "name": "_to", "type": "address", "internalType": "address" }, - { "name": "_amount", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "event", - "name": "SetDefaultMultiplierBps", - "inputs": [ - { - "name": "multiplierBps", - "type": "uint16", - "indexed": false, - "internalType": "uint16" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "SetDstConfig", - "inputs": [ - { - "name": "params", - "type": "tuple[]", - "indexed": false, - "internalType": "struct IDVN.DstConfigParam[]", - "components": [ - { "name": "dstEid", "type": "uint32", "internalType": "uint32" }, - { "name": "gas", "type": "uint64", "internalType": "uint64" }, - { - "name": "multiplierBps", - "type": "uint16", - "internalType": "uint16" - }, - { - "name": "floorMarginUSD", - "type": "uint128", - "internalType": "uint128" - } - ] - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "SetPriceFeed", - "inputs": [ - { - "name": "priceFeed", - "type": "address", - "indexed": false, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "SetSupportedOptionTypes", - "inputs": [ - { - "name": "dstEid", - "type": "uint32", - "indexed": false, - "internalType": "uint32" - }, - { - "name": "optionTypes", - "type": "uint8[]", - "indexed": false, - "internalType": "uint8[]" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "SetWorkerLib", - "inputs": [ - { - "name": "workerLib", - "type": "address", - "indexed": false, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "Withdraw", - "inputs": [ - { - "name": "lib", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "to", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "amount", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { "type": "error", "name": "Worker_NotAllowed", "inputs": [] }, - { "type": "error", "name": "Worker_OnlyMessageLib", "inputs": [] }, - { "type": "error", "name": "Worker_RoleRenouncingDisabled", "inputs": [] } - ], - "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "methodIdentifiers": { - "assignJob((uint32,bytes,bytes32,uint64,address),bytes)": "95d376d7", - "assignJob(address,bytes,bytes,bytes)": "f42ed2ed", - "defaultMultiplierBps()": "00bf2e80", - "dstConfig(uint32)": "9e944965", - "getFee(address,bytes,bytes,bytes)": "fdb9b0f1", - "getFee(uint32,uint64,address,bytes)": "30bb3aac", - "getSupportedOptionTypes(uint32)": "26e67a37", - "priceFeed()": "741bef1a", - "setDefaultMultiplierBps(uint16)": "c358de0a", - "setPriceFeed(address)": "724e78da", - "setSupportedOptionTypes(uint32,uint8[])": "cd88b903", - "withdrawFee(address,address,uint256)": "1095b6d7" - }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"Worker_NotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Worker_OnlyMessageLib\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Worker_RoleRenouncingDisabled\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"multiplierBps\",\"type\":\"uint16\"}],\"name\":\"SetDefaultMultiplierBps\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"gas\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"multiplierBps\",\"type\":\"uint16\"},{\"internalType\":\"uint128\",\"name\":\"floorMarginUSD\",\"type\":\"uint128\"}],\"indexed\":false,\"internalType\":\"struct IDVN.DstConfigParam[]\",\"name\":\"params\",\"type\":\"tuple[]\"}],\"name\":\"SetDstConfig\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"priceFeed\",\"type\":\"address\"}],\"name\":\"SetPriceFeed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint8[]\",\"name\":\"optionTypes\",\"type\":\"uint8[]\"}],\"name\":\"SetSupportedOptionTypes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"workerLib\",\"type\":\"address\"}],\"name\":\"SetWorkerLib\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"lib\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Withdraw\",\"type\":\"event\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"packetHeader\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"payloadHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"confirmations\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"internalType\":\"struct ILayerZeroDVN.AssignJobParam\",\"name\":\"_param\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"_options\",\"type\":\"bytes\"}],\"name\":\"assignJob\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_packetHeader\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_cmd\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_options\",\"type\":\"bytes\"}],\"name\":\"assignJob\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"defaultMultiplierBps\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_dstEid\",\"type\":\"uint32\"}],\"name\":\"dstConfig\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"},{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_dstEid\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"_confirmations\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_options\",\"type\":\"bytes\"}],\"name\":\"getFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_packetHeader\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_cmd\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_options\",\"type\":\"bytes\"}],\"name\":\"getFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"}],\"name\":\"getSupportedOptionTypes\",\"outputs\":[{\"internalType\":\"uint8[]\",\"name\":\"\",\"type\":\"uint8[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"priceFeed\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"_multiplierBps\",\"type\":\"uint16\"}],\"name\":\"setDefaultMultiplierBps\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_priceFeed\",\"type\":\"address\"}],\"name\":\"setPriceFeed\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"uint8[]\",\"name\":\"_optionTypes\",\"type\":\"uint8[]\"}],\"name\":\"setSupportedOptionTypes\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_lib\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"withdrawFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IDVN.sol\":\"IDVN\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IWorker.sol\":{\"keccak256\":\"0xa6b61913767305227576cc6da5067de4208f09a4f58bfbfe32beafdfae9869b1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7fce83bfb831f383606aee7f5ff68a330c8526bb1036f9ba0813d3e4fa8d534\",\"dweb:/ipfs/QmR7zAqJkmCgBj6sguS8t2WthY5k6FwsakgH4UY11uqD4n\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IDVN.sol\":{\"keccak256\":\"0x6becdfab6c1fcaf98f402bee48495895e54825f9d6eef6e292dde0caed628284\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2273341033856737cd46704a1a769768feae696d0e7a912f5be9de8ffdd2180c\",\"dweb:/ipfs/QmY1xBAmMX9jND1HAb7tDyZNPgFReXMqs1vtmHbShKZFQY\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/ILayerZeroDVN.sol\":{\"keccak256\":\"0x308e77078242fd5c5746ec29c12e618249134f9e4377c0028ab8f59c07a6014b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2f92cf397a8d26864ac92dfcd1b98e92a32c47f556a62c5e6dc1618734c1caa3\",\"dweb:/ipfs/QmXN3XJXEKq5djV6HeM6jrLycmJPFhMhecsYZ2TaRsQmhg\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/ILayerZeroReadDVN.sol\":{\"keccak256\":\"0x759a3ee7614c2de54b152b0278845f91ac9760d8c22045b2fee89e3e744402b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7a2dbf6bcf5bfab408f18c104b34c390e8bfabb0eeb1a10e3a9c0fb14c8c61d5\",\"dweb:/ipfs/QmWxmRbDBkbhGmNsRyXqQXB1QaWRS4qvh6a8achh8DQPKR\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { "inputs": [], "type": "error", "name": "Worker_NotAllowed" }, - { "inputs": [], "type": "error", "name": "Worker_OnlyMessageLib" }, - { - "inputs": [], - "type": "error", - "name": "Worker_RoleRenouncingDisabled" - }, - { - "inputs": [ - { - "internalType": "uint16", - "name": "multiplierBps", - "type": "uint16", - "indexed": false - } - ], - "type": "event", - "name": "SetDefaultMultiplierBps", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "struct IDVN.DstConfigParam[]", - "name": "params", - "type": "tuple[]", - "components": [ - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { "internalType": "uint64", "name": "gas", "type": "uint64" }, - { - "internalType": "uint16", - "name": "multiplierBps", - "type": "uint16" - }, - { - "internalType": "uint128", - "name": "floorMarginUSD", - "type": "uint128" - } - ], - "indexed": false - } - ], - "type": "event", - "name": "SetDstConfig", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "priceFeed", - "type": "address", - "indexed": false - } - ], - "type": "event", - "name": "SetPriceFeed", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32", - "indexed": false - }, - { - "internalType": "uint8[]", - "name": "optionTypes", - "type": "uint8[]", - "indexed": false - } - ], - "type": "event", - "name": "SetSupportedOptionTypes", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "workerLib", - "type": "address", - "indexed": false - } - ], - "type": "event", - "name": "SetWorkerLib", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "lib", - "type": "address", - "indexed": false - }, - { - "internalType": "address", - "name": "to", - "type": "address", - "indexed": false - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "Withdraw", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "struct ILayerZeroDVN.AssignJobParam", - "name": "_param", - "type": "tuple", - "components": [ - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { - "internalType": "bytes", - "name": "packetHeader", - "type": "bytes" - }, - { - "internalType": "bytes32", - "name": "payloadHash", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "confirmations", - "type": "uint64" - }, - { - "internalType": "address", - "name": "sender", - "type": "address" - } - ] - }, - { "internalType": "bytes", "name": "_options", "type": "bytes" } - ], - "stateMutability": "payable", - "type": "function", - "name": "assignJob", - "outputs": [ - { "internalType": "uint256", "name": "fee", "type": "uint256" } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "_sender", "type": "address" }, - { - "internalType": "bytes", - "name": "_packetHeader", - "type": "bytes" - }, - { "internalType": "bytes", "name": "_cmd", "type": "bytes" }, - { "internalType": "bytes", "name": "_options", "type": "bytes" } - ], - "stateMutability": "payable", - "type": "function", - "name": "assignJob", - "outputs": [ - { "internalType": "uint256", "name": "fee", "type": "uint256" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "defaultMultiplierBps", - "outputs": [ - { "internalType": "uint16", "name": "", "type": "uint16" } - ] - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_dstEid", "type": "uint32" } - ], - "stateMutability": "view", - "type": "function", - "name": "dstConfig", - "outputs": [ - { "internalType": "uint64", "name": "", "type": "uint64" }, - { "internalType": "uint16", "name": "", "type": "uint16" }, - { "internalType": "uint128", "name": "", "type": "uint128" } - ] - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_dstEid", "type": "uint32" }, - { - "internalType": "uint64", - "name": "_confirmations", - "type": "uint64" - }, - { "internalType": "address", "name": "_sender", "type": "address" }, - { "internalType": "bytes", "name": "_options", "type": "bytes" } - ], - "stateMutability": "view", - "type": "function", - "name": "getFee", - "outputs": [ - { "internalType": "uint256", "name": "fee", "type": "uint256" } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "_sender", "type": "address" }, - { - "internalType": "bytes", - "name": "_packetHeader", - "type": "bytes" - }, - { "internalType": "bytes", "name": "_cmd", "type": "bytes" }, - { "internalType": "bytes", "name": "_options", "type": "bytes" } - ], - "stateMutability": "view", - "type": "function", - "name": "getFee", - "outputs": [ - { "internalType": "uint256", "name": "fee", "type": "uint256" } - ] - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" } - ], - "stateMutability": "view", - "type": "function", - "name": "getSupportedOptionTypes", - "outputs": [ - { "internalType": "uint8[]", "name": "", "type": "uint8[]" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "priceFeed", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ] - }, - { - "inputs": [ - { - "internalType": "uint16", - "name": "_multiplierBps", - "type": "uint16" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setDefaultMultiplierBps" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_priceFeed", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setPriceFeed" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { - "internalType": "uint8[]", - "name": "_optionTypes", - "type": "uint8[]" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setSupportedOptionTypes" - }, - { - "inputs": [ - { "internalType": "address", "name": "_lib", "type": "address" }, - { "internalType": "address", "name": "_to", "type": "address" }, - { "internalType": "uint256", "name": "_amount", "type": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "withdrawFee" - } - ], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IDVN.sol": "IDVN" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IWorker.sol": { - "keccak256": "0xa6b61913767305227576cc6da5067de4208f09a4f58bfbfe32beafdfae9869b1", - "urls": [ - "bzz-raw://b7fce83bfb831f383606aee7f5ff68a330c8526bb1036f9ba0813d3e4fa8d534", - "dweb:/ipfs/QmR7zAqJkmCgBj6sguS8t2WthY5k6FwsakgH4UY11uqD4n" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IDVN.sol": { - "keccak256": "0x6becdfab6c1fcaf98f402bee48495895e54825f9d6eef6e292dde0caed628284", - "urls": [ - "bzz-raw://2273341033856737cd46704a1a769768feae696d0e7a912f5be9de8ffdd2180c", - "dweb:/ipfs/QmY1xBAmMX9jND1HAb7tDyZNPgFReXMqs1vtmHbShKZFQY" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/ILayerZeroDVN.sol": { - "keccak256": "0x308e77078242fd5c5746ec29c12e618249134f9e4377c0028ab8f59c07a6014b", - "urls": [ - "bzz-raw://2f92cf397a8d26864ac92dfcd1b98e92a32c47f556a62c5e6dc1618734c1caa3", - "dweb:/ipfs/QmXN3XJXEKq5djV6HeM6jrLycmJPFhMhecsYZ2TaRsQmhg" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/ILayerZeroReadDVN.sol": { - "keccak256": "0x759a3ee7614c2de54b152b0278845f91ac9760d8c22045b2fee89e3e744402b8", - "urls": [ - "bzz-raw://7a2dbf6bcf5bfab408f18c104b34c390e8bfabb0eeb1a10e3a9c0fb14c8c61d5", - "dweb:/ipfs/QmWxmRbDBkbhGmNsRyXqQXB1QaWRS4qvh6a8achh8DQPKR" - ], - "license": "MIT" - } - }, - "version": 1 - }, - "id": 16 -} diff --git a/examples/oft-movement/out/IDVNFeeLib.sol/IDVNFeeLib.json b/examples/oft-movement/out/IDVNFeeLib.sol/IDVNFeeLib.json deleted file mode 100644 index b3e0c525e..000000000 --- a/examples/oft-movement/out/IDVNFeeLib.sol/IDVNFeeLib.json +++ /dev/null @@ -1,602 +0,0 @@ -{ - "abi": [ - { - "type": "function", - "name": "getFee", - "inputs": [ - { - "name": "_params", - "type": "tuple", - "internalType": "struct IDVNFeeLib.FeeParams", - "components": [ - { - "name": "priceFeed", - "type": "address", - "internalType": "address" - }, - { "name": "dstEid", "type": "uint32", "internalType": "uint32" }, - { - "name": "confirmations", - "type": "uint64", - "internalType": "uint64" - }, - { "name": "sender", "type": "address", "internalType": "address" }, - { "name": "quorum", "type": "uint64", "internalType": "uint64" }, - { - "name": "defaultMultiplierBps", - "type": "uint16", - "internalType": "uint16" - } - ] - }, - { - "name": "_dstConfig", - "type": "tuple", - "internalType": "struct IDVN.DstConfig", - "components": [ - { "name": "gas", "type": "uint64", "internalType": "uint64" }, - { - "name": "multiplierBps", - "type": "uint16", - "internalType": "uint16" - }, - { - "name": "floorMarginUSD", - "type": "uint128", - "internalType": "uint128" - } - ] - }, - { "name": "_options", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [ - { "name": "fee", "type": "uint256", "internalType": "uint256" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getFee", - "inputs": [ - { - "name": "_params", - "type": "tuple", - "internalType": "struct IDVNFeeLib.FeeParamsForRead", - "components": [ - { - "name": "priceFeed", - "type": "address", - "internalType": "address" - }, - { "name": "sender", "type": "address", "internalType": "address" }, - { "name": "quorum", "type": "uint64", "internalType": "uint64" }, - { - "name": "defaultMultiplierBps", - "type": "uint16", - "internalType": "uint16" - } - ] - }, - { - "name": "_dstConfig", - "type": "tuple", - "internalType": "struct IDVN.DstConfig", - "components": [ - { "name": "gas", "type": "uint64", "internalType": "uint64" }, - { - "name": "multiplierBps", - "type": "uint16", - "internalType": "uint16" - }, - { - "name": "floorMarginUSD", - "type": "uint128", - "internalType": "uint128" - } - ] - }, - { "name": "_cmd", "type": "bytes", "internalType": "bytes" }, - { "name": "_options", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [ - { "name": "fee", "type": "uint256", "internalType": "uint256" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getFeeOnSend", - "inputs": [ - { - "name": "_params", - "type": "tuple", - "internalType": "struct IDVNFeeLib.FeeParamsForRead", - "components": [ - { - "name": "priceFeed", - "type": "address", - "internalType": "address" - }, - { "name": "sender", "type": "address", "internalType": "address" }, - { "name": "quorum", "type": "uint64", "internalType": "uint64" }, - { - "name": "defaultMultiplierBps", - "type": "uint16", - "internalType": "uint16" - } - ] - }, - { - "name": "_dstConfig", - "type": "tuple", - "internalType": "struct IDVN.DstConfig", - "components": [ - { "name": "gas", "type": "uint64", "internalType": "uint64" }, - { - "name": "multiplierBps", - "type": "uint16", - "internalType": "uint16" - }, - { - "name": "floorMarginUSD", - "type": "uint128", - "internalType": "uint128" - } - ] - }, - { "name": "_cmd", "type": "bytes", "internalType": "bytes" }, - { "name": "_options", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [ - { "name": "fee", "type": "uint256", "internalType": "uint256" } - ], - "stateMutability": "payable" - }, - { - "type": "function", - "name": "getFeeOnSend", - "inputs": [ - { - "name": "_params", - "type": "tuple", - "internalType": "struct IDVNFeeLib.FeeParams", - "components": [ - { - "name": "priceFeed", - "type": "address", - "internalType": "address" - }, - { "name": "dstEid", "type": "uint32", "internalType": "uint32" }, - { - "name": "confirmations", - "type": "uint64", - "internalType": "uint64" - }, - { "name": "sender", "type": "address", "internalType": "address" }, - { "name": "quorum", "type": "uint64", "internalType": "uint64" }, - { - "name": "defaultMultiplierBps", - "type": "uint16", - "internalType": "uint16" - } - ] - }, - { - "name": "_dstConfig", - "type": "tuple", - "internalType": "struct IDVN.DstConfig", - "components": [ - { "name": "gas", "type": "uint64", "internalType": "uint64" }, - { - "name": "multiplierBps", - "type": "uint16", - "internalType": "uint16" - }, - { - "name": "floorMarginUSD", - "type": "uint128", - "internalType": "uint128" - } - ] - }, - { "name": "_options", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [ - { "name": "fee", "type": "uint256", "internalType": "uint256" } - ], - "stateMutability": "payable" - }, - { - "type": "function", - "name": "version", - "inputs": [], - "outputs": [ - { "name": "major", "type": "uint64", "internalType": "uint64" }, - { "name": "minor", "type": "uint8", "internalType": "uint8" } - ], - "stateMutability": "view" - }, - { - "type": "error", - "name": "DVN_EidNotSupported", - "inputs": [{ "name": "eid", "type": "uint32", "internalType": "uint32" }] - }, - { "type": "error", "name": "DVN_INVALID_INPUT_LENGTH", "inputs": [] }, - { - "type": "error", - "name": "DVN_TimestampOutOfRange", - "inputs": [ - { "name": "eid", "type": "uint32", "internalType": "uint32" }, - { "name": "timestamp", "type": "uint64", "internalType": "uint64" } - ] - }, - { - "type": "error", - "name": "DVN_UnsupportedOptionType", - "inputs": [ - { "name": "optionType", "type": "uint8", "internalType": "uint8" } - ] - } - ], - "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "methodIdentifiers": { - "getFee((address,address,uint64,uint16),(uint64,uint16,uint128),bytes,bytes)": "d358b300", - "getFee((address,uint32,uint64,address,uint64,uint16),(uint64,uint16,uint128),bytes)": "7bfa20a9", - "getFeeOnSend((address,address,uint64,uint16),(uint64,uint16,uint128),bytes,bytes)": "bbc5a33b", - "getFeeOnSend((address,uint32,uint64,address,uint64,uint16),(uint64,uint16,uint128),bytes)": "df2b057e", - "version()": "54fd4d50" - }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"}],\"name\":\"DVN_EidNotSupported\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DVN_INVALID_INPUT_LENGTH\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"timestamp\",\"type\":\"uint64\"}],\"name\":\"DVN_TimestampOutOfRange\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"optionType\",\"type\":\"uint8\"}],\"name\":\"DVN_UnsupportedOptionType\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"priceFeed\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"confirmations\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"quorum\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"defaultMultiplierBps\",\"type\":\"uint16\"}],\"internalType\":\"struct IDVNFeeLib.FeeParams\",\"name\":\"_params\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"gas\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"multiplierBps\",\"type\":\"uint16\"},{\"internalType\":\"uint128\",\"name\":\"floorMarginUSD\",\"type\":\"uint128\"}],\"internalType\":\"struct IDVN.DstConfig\",\"name\":\"_dstConfig\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"_options\",\"type\":\"bytes\"}],\"name\":\"getFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"priceFeed\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"quorum\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"defaultMultiplierBps\",\"type\":\"uint16\"}],\"internalType\":\"struct IDVNFeeLib.FeeParamsForRead\",\"name\":\"_params\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"gas\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"multiplierBps\",\"type\":\"uint16\"},{\"internalType\":\"uint128\",\"name\":\"floorMarginUSD\",\"type\":\"uint128\"}],\"internalType\":\"struct IDVN.DstConfig\",\"name\":\"_dstConfig\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"_cmd\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_options\",\"type\":\"bytes\"}],\"name\":\"getFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"priceFeed\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"quorum\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"defaultMultiplierBps\",\"type\":\"uint16\"}],\"internalType\":\"struct IDVNFeeLib.FeeParamsForRead\",\"name\":\"_params\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"gas\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"multiplierBps\",\"type\":\"uint16\"},{\"internalType\":\"uint128\",\"name\":\"floorMarginUSD\",\"type\":\"uint128\"}],\"internalType\":\"struct IDVN.DstConfig\",\"name\":\"_dstConfig\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"_cmd\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_options\",\"type\":\"bytes\"}],\"name\":\"getFeeOnSend\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"priceFeed\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"confirmations\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"quorum\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"defaultMultiplierBps\",\"type\":\"uint16\"}],\"internalType\":\"struct IDVNFeeLib.FeeParams\",\"name\":\"_params\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"gas\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"multiplierBps\",\"type\":\"uint16\"},{\"internalType\":\"uint128\",\"name\":\"floorMarginUSD\",\"type\":\"uint128\"}],\"internalType\":\"struct IDVN.DstConfig\",\"name\":\"_dstConfig\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"_options\",\"type\":\"bytes\"}],\"name\":\"getFeeOnSend\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"major\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"minor\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IDVNFeeLib.sol\":\"IDVNFeeLib\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IWorker.sol\":{\"keccak256\":\"0xa6b61913767305227576cc6da5067de4208f09a4f58bfbfe32beafdfae9869b1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7fce83bfb831f383606aee7f5ff68a330c8526bb1036f9ba0813d3e4fa8d534\",\"dweb:/ipfs/QmR7zAqJkmCgBj6sguS8t2WthY5k6FwsakgH4UY11uqD4n\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IDVN.sol\":{\"keccak256\":\"0x6becdfab6c1fcaf98f402bee48495895e54825f9d6eef6e292dde0caed628284\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2273341033856737cd46704a1a769768feae696d0e7a912f5be9de8ffdd2180c\",\"dweb:/ipfs/QmY1xBAmMX9jND1HAb7tDyZNPgFReXMqs1vtmHbShKZFQY\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IDVNFeeLib.sol\":{\"keccak256\":\"0xed4a8e77148328132d8f4f2726c4aeec6b490cf03a1d5940bde0ab8d72954de9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7b07802ca32bf10f68e51da872fb358807446dc2242314374d226493a6e9e7dc\",\"dweb:/ipfs/QmfSwWPLgitDy2a9S3mCNBDk6kAcK9n186Dtvj7qg84i12\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/ILayerZeroDVN.sol\":{\"keccak256\":\"0x308e77078242fd5c5746ec29c12e618249134f9e4377c0028ab8f59c07a6014b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2f92cf397a8d26864ac92dfcd1b98e92a32c47f556a62c5e6dc1618734c1caa3\",\"dweb:/ipfs/QmXN3XJXEKq5djV6HeM6jrLycmJPFhMhecsYZ2TaRsQmhg\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/ILayerZeroReadDVN.sol\":{\"keccak256\":\"0x759a3ee7614c2de54b152b0278845f91ac9760d8c22045b2fee89e3e744402b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7a2dbf6bcf5bfab408f18c104b34c390e8bfabb0eeb1a10e3a9c0fb14c8c61d5\",\"dweb:/ipfs/QmWxmRbDBkbhGmNsRyXqQXB1QaWRS4qvh6a8achh8DQPKR\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { - "inputs": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" } - ], - "type": "error", - "name": "DVN_EidNotSupported" - }, - { "inputs": [], "type": "error", "name": "DVN_INVALID_INPUT_LENGTH" }, - { - "inputs": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" }, - { "internalType": "uint64", "name": "timestamp", "type": "uint64" } - ], - "type": "error", - "name": "DVN_TimestampOutOfRange" - }, - { - "inputs": [ - { "internalType": "uint8", "name": "optionType", "type": "uint8" } - ], - "type": "error", - "name": "DVN_UnsupportedOptionType" - }, - { - "inputs": [ - { - "internalType": "struct IDVNFeeLib.FeeParams", - "name": "_params", - "type": "tuple", - "components": [ - { - "internalType": "address", - "name": "priceFeed", - "type": "address" - }, - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { - "internalType": "uint64", - "name": "confirmations", - "type": "uint64" - }, - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint64", - "name": "quorum", - "type": "uint64" - }, - { - "internalType": "uint16", - "name": "defaultMultiplierBps", - "type": "uint16" - } - ] - }, - { - "internalType": "struct IDVN.DstConfig", - "name": "_dstConfig", - "type": "tuple", - "components": [ - { "internalType": "uint64", "name": "gas", "type": "uint64" }, - { - "internalType": "uint16", - "name": "multiplierBps", - "type": "uint16" - }, - { - "internalType": "uint128", - "name": "floorMarginUSD", - "type": "uint128" - } - ] - }, - { "internalType": "bytes", "name": "_options", "type": "bytes" } - ], - "stateMutability": "view", - "type": "function", - "name": "getFee", - "outputs": [ - { "internalType": "uint256", "name": "fee", "type": "uint256" } - ] - }, - { - "inputs": [ - { - "internalType": "struct IDVNFeeLib.FeeParamsForRead", - "name": "_params", - "type": "tuple", - "components": [ - { - "internalType": "address", - "name": "priceFeed", - "type": "address" - }, - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint64", - "name": "quorum", - "type": "uint64" - }, - { - "internalType": "uint16", - "name": "defaultMultiplierBps", - "type": "uint16" - } - ] - }, - { - "internalType": "struct IDVN.DstConfig", - "name": "_dstConfig", - "type": "tuple", - "components": [ - { "internalType": "uint64", "name": "gas", "type": "uint64" }, - { - "internalType": "uint16", - "name": "multiplierBps", - "type": "uint16" - }, - { - "internalType": "uint128", - "name": "floorMarginUSD", - "type": "uint128" - } - ] - }, - { "internalType": "bytes", "name": "_cmd", "type": "bytes" }, - { "internalType": "bytes", "name": "_options", "type": "bytes" } - ], - "stateMutability": "view", - "type": "function", - "name": "getFee", - "outputs": [ - { "internalType": "uint256", "name": "fee", "type": "uint256" } - ] - }, - { - "inputs": [ - { - "internalType": "struct IDVNFeeLib.FeeParamsForRead", - "name": "_params", - "type": "tuple", - "components": [ - { - "internalType": "address", - "name": "priceFeed", - "type": "address" - }, - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint64", - "name": "quorum", - "type": "uint64" - }, - { - "internalType": "uint16", - "name": "defaultMultiplierBps", - "type": "uint16" - } - ] - }, - { - "internalType": "struct IDVN.DstConfig", - "name": "_dstConfig", - "type": "tuple", - "components": [ - { "internalType": "uint64", "name": "gas", "type": "uint64" }, - { - "internalType": "uint16", - "name": "multiplierBps", - "type": "uint16" - }, - { - "internalType": "uint128", - "name": "floorMarginUSD", - "type": "uint128" - } - ] - }, - { "internalType": "bytes", "name": "_cmd", "type": "bytes" }, - { "internalType": "bytes", "name": "_options", "type": "bytes" } - ], - "stateMutability": "payable", - "type": "function", - "name": "getFeeOnSend", - "outputs": [ - { "internalType": "uint256", "name": "fee", "type": "uint256" } - ] - }, - { - "inputs": [ - { - "internalType": "struct IDVNFeeLib.FeeParams", - "name": "_params", - "type": "tuple", - "components": [ - { - "internalType": "address", - "name": "priceFeed", - "type": "address" - }, - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { - "internalType": "uint64", - "name": "confirmations", - "type": "uint64" - }, - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint64", - "name": "quorum", - "type": "uint64" - }, - { - "internalType": "uint16", - "name": "defaultMultiplierBps", - "type": "uint16" - } - ] - }, - { - "internalType": "struct IDVN.DstConfig", - "name": "_dstConfig", - "type": "tuple", - "components": [ - { "internalType": "uint64", "name": "gas", "type": "uint64" }, - { - "internalType": "uint16", - "name": "multiplierBps", - "type": "uint16" - }, - { - "internalType": "uint128", - "name": "floorMarginUSD", - "type": "uint128" - } - ] - }, - { "internalType": "bytes", "name": "_options", "type": "bytes" } - ], - "stateMutability": "payable", - "type": "function", - "name": "getFeeOnSend", - "outputs": [ - { "internalType": "uint256", "name": "fee", "type": "uint256" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "version", - "outputs": [ - { "internalType": "uint64", "name": "major", "type": "uint64" }, - { "internalType": "uint8", "name": "minor", "type": "uint8" } - ] - } - ], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IDVNFeeLib.sol": "IDVNFeeLib" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IWorker.sol": { - "keccak256": "0xa6b61913767305227576cc6da5067de4208f09a4f58bfbfe32beafdfae9869b1", - "urls": [ - "bzz-raw://b7fce83bfb831f383606aee7f5ff68a330c8526bb1036f9ba0813d3e4fa8d534", - "dweb:/ipfs/QmR7zAqJkmCgBj6sguS8t2WthY5k6FwsakgH4UY11uqD4n" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IDVN.sol": { - "keccak256": "0x6becdfab6c1fcaf98f402bee48495895e54825f9d6eef6e292dde0caed628284", - "urls": [ - "bzz-raw://2273341033856737cd46704a1a769768feae696d0e7a912f5be9de8ffdd2180c", - "dweb:/ipfs/QmY1xBAmMX9jND1HAb7tDyZNPgFReXMqs1vtmHbShKZFQY" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IDVNFeeLib.sol": { - "keccak256": "0xed4a8e77148328132d8f4f2726c4aeec6b490cf03a1d5940bde0ab8d72954de9", - "urls": [ - "bzz-raw://7b07802ca32bf10f68e51da872fb358807446dc2242314374d226493a6e9e7dc", - "dweb:/ipfs/QmfSwWPLgitDy2a9S3mCNBDk6kAcK9n186Dtvj7qg84i12" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/ILayerZeroDVN.sol": { - "keccak256": "0x308e77078242fd5c5746ec29c12e618249134f9e4377c0028ab8f59c07a6014b", - "urls": [ - "bzz-raw://2f92cf397a8d26864ac92dfcd1b98e92a32c47f556a62c5e6dc1618734c1caa3", - "dweb:/ipfs/QmXN3XJXEKq5djV6HeM6jrLycmJPFhMhecsYZ2TaRsQmhg" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/ILayerZeroReadDVN.sol": { - "keccak256": "0x759a3ee7614c2de54b152b0278845f91ac9760d8c22045b2fee89e3e744402b8", - "urls": [ - "bzz-raw://7a2dbf6bcf5bfab408f18c104b34c390e8bfabb0eeb1a10e3a9c0fb14c8c61d5", - "dweb:/ipfs/QmWxmRbDBkbhGmNsRyXqQXB1QaWRS4qvh6a8achh8DQPKR" - ], - "license": "MIT" - } - }, - "version": 1 - }, - "id": 17 -} diff --git a/examples/oft-movement/out/IERC1363.sol/IERC1363.json b/examples/oft-movement/out/IERC1363.sol/IERC1363.json deleted file mode 100644 index 89e0e8ed4..000000000 --- a/examples/oft-movement/out/IERC1363.sol/IERC1363.json +++ /dev/null @@ -1,557 +0,0 @@ -{ - "abi": [ - { - "type": "function", - "name": "allowance", - "inputs": [ - { "name": "owner", "type": "address", "internalType": "address" }, - { "name": "spender", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "approve", - "inputs": [ - { "name": "spender", "type": "address", "internalType": "address" }, - { "name": "value", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "approveAndCall", - "inputs": [ - { "name": "spender", "type": "address", "internalType": "address" }, - { "name": "value", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "approveAndCall", - "inputs": [ - { "name": "spender", "type": "address", "internalType": "address" }, - { "name": "value", "type": "uint256", "internalType": "uint256" }, - { "name": "data", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "balanceOf", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "supportsInterface", - "inputs": [ - { "name": "interfaceId", "type": "bytes4", "internalType": "bytes4" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "totalSupply", - "inputs": [], - "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "transfer", - "inputs": [ - { "name": "to", "type": "address", "internalType": "address" }, - { "name": "value", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "transferAndCall", - "inputs": [ - { "name": "to", "type": "address", "internalType": "address" }, - { "name": "value", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "transferAndCall", - "inputs": [ - { "name": "to", "type": "address", "internalType": "address" }, - { "name": "value", "type": "uint256", "internalType": "uint256" }, - { "name": "data", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "transferFrom", - "inputs": [ - { "name": "from", "type": "address", "internalType": "address" }, - { "name": "to", "type": "address", "internalType": "address" }, - { "name": "value", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "transferFromAndCall", - "inputs": [ - { "name": "from", "type": "address", "internalType": "address" }, - { "name": "to", "type": "address", "internalType": "address" }, - { "name": "value", "type": "uint256", "internalType": "uint256" }, - { "name": "data", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "transferFromAndCall", - "inputs": [ - { "name": "from", "type": "address", "internalType": "address" }, - { "name": "to", "type": "address", "internalType": "address" }, - { "name": "value", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "nonpayable" - }, - { - "type": "event", - "name": "Approval", - "inputs": [ - { - "name": "owner", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "spender", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "value", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "Transfer", - "inputs": [ - { - "name": "from", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "to", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "value", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - } - ], - "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "methodIdentifiers": { - "allowance(address,address)": "dd62ed3e", - "approve(address,uint256)": "095ea7b3", - "approveAndCall(address,uint256)": "3177029f", - "approveAndCall(address,uint256,bytes)": "cae9ca51", - "balanceOf(address)": "70a08231", - "supportsInterface(bytes4)": "01ffc9a7", - "totalSupply()": "18160ddd", - "transfer(address,uint256)": "a9059cbb", - "transferAndCall(address,uint256)": "1296ee62", - "transferAndCall(address,uint256,bytes)": "4000aea0", - "transferFrom(address,address,uint256)": "23b872dd", - "transferFromAndCall(address,address,uint256)": "d8fbe994", - "transferFromAndCall(address,address,uint256,bytes)": "c1d34b89" - }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approveAndCall\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"approveAndCall\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferAndCall\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"transferAndCall\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"transferFromAndCall\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFromAndCall\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface of the ERC-1363 standard as defined in the https://eips.ethereum.org/EIPS/eip-1363[ERC-1363]. Defines an extension interface for ERC-20 tokens that supports executing code on a recipient contract after `transfer` or `transferFrom`, or code on a spender contract after `approve`, in a single transaction.\",\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called.\"},\"approve(address,uint256)\":{\"details\":\"Sets a `value` amount of tokens as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event.\"},\"approveAndCall(address,uint256)\":{\"details\":\"Sets a `value` amount of tokens as the allowance of `spender` over the caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`.\",\"params\":{\"spender\":\"The address which will spend the funds.\",\"value\":\"The amount of tokens to be spent.\"},\"returns\":{\"_0\":\"A boolean value indicating whether the operation succeeded unless throwing.\"}},\"approveAndCall(address,uint256,bytes)\":{\"details\":\"Sets a `value` amount of tokens as the allowance of `spender` over the caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`.\",\"params\":{\"data\":\"Additional data with no specified format, sent in call to `spender`.\",\"spender\":\"The address which will spend the funds.\",\"value\":\"The amount of tokens to be spent.\"},\"returns\":{\"_0\":\"A boolean value indicating whether the operation succeeded unless throwing.\"}},\"balanceOf(address)\":{\"details\":\"Returns the value of tokens owned by `account`.\"},\"supportsInterface(bytes4)\":{\"details\":\"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section] to learn more about how these ids are created. This function call must use less than 30 000 gas.\"},\"totalSupply()\":{\"details\":\"Returns the value of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferAndCall(address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from the caller's account to `to` and then calls {IERC1363Receiver-onTransferReceived} on `to`.\",\"params\":{\"to\":\"The address which you want to transfer to.\",\"value\":\"The amount of tokens to be transferred.\"},\"returns\":{\"_0\":\"A boolean value indicating whether the operation succeeded unless throwing.\"}},\"transferAndCall(address,uint256,bytes)\":{\"details\":\"Moves a `value` amount of tokens from the caller's account to `to` and then calls {IERC1363Receiver-onTransferReceived} on `to`.\",\"params\":{\"data\":\"Additional data with no specified format, sent in call to `to`.\",\"to\":\"The address which you want to transfer to.\",\"value\":\"The amount of tokens to be transferred.\"},\"returns\":{\"_0\":\"A boolean value indicating whether the operation succeeded unless throwing.\"}},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism. `value` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFromAndCall(address,address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism and then calls {IERC1363Receiver-onTransferReceived} on `to`.\",\"params\":{\"from\":\"The address which you want to send tokens from.\",\"to\":\"The address which you want to transfer to.\",\"value\":\"The amount of tokens to be transferred.\"},\"returns\":{\"_0\":\"A boolean value indicating whether the operation succeeded unless throwing.\"}},\"transferFromAndCall(address,address,uint256,bytes)\":{\"details\":\"Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism and then calls {IERC1363Receiver-onTransferReceived} on `to`.\",\"params\":{\"data\":\"Additional data with no specified format, sent in call to `to`.\",\"from\":\"The address which you want to send tokens from.\",\"to\":\"The address which you want to transfer to.\",\"value\":\"The amount of tokens to be transferred.\"},\"returns\":{\"_0\":\"A boolean value indicating whether the operation succeeded unless throwing.\"}}},\"title\":\"IERC1363\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol\":\"IERC1363\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol\":{\"keccak256\":\"0x9b6b3e7803bc5f2f8cd7ad57db8ac1def61a9930a5a3107df4882e028a9605d7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://da62d6be1f5c6edf577f0cb45666a8aa9c2086a4bac87d95d65f02e2f4c36a4b\",\"dweb:/ipfs/QmNkpvBpoCMvX8JwAFNSc5XxJ2q5BXJpL5L1txb4QkqVFF\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC165.sol\":{\"keccak256\":\"0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://11fea9f8bc98949ac6709f0c1699db7430d2948137aa94d5a9e95a91f61a710a\",\"dweb:/ipfs/QmQdfRXxQjwP6yn3DVo1GHPpriKNcFghSPi94Z1oKEFUNS\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC20.sol\":{\"keccak256\":\"0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a2608291cb038b388d80b79a06b6118a42f7894ff67b7da10ec0dbbf5b2973ba\",\"dweb:/ipfs/QmWohqcBLbcxmA4eGPhZDXe5RYMMEEpFq22nfkaUMvTfw1\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db\",\"dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9\"]},\"node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address", - "indexed": true - }, - { - "internalType": "address", - "name": "spender", - "type": "address", - "indexed": true - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "Approval", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address", - "indexed": true - }, - { - "internalType": "address", - "name": "to", - "type": "address", - "indexed": true - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "Transfer", - "anonymous": false - }, - { - "inputs": [ - { "internalType": "address", "name": "owner", "type": "address" }, - { "internalType": "address", "name": "spender", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "allowance", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "spender", "type": "address" }, - { "internalType": "uint256", "name": "value", "type": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "approve", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "address", "name": "spender", "type": "address" }, - { "internalType": "uint256", "name": "value", "type": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "approveAndCall", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "address", "name": "spender", "type": "address" }, - { "internalType": "uint256", "name": "value", "type": "uint256" }, - { "internalType": "bytes", "name": "data", "type": "bytes" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "approveAndCall", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "balanceOf", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ] - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "stateMutability": "view", - "type": "function", - "name": "supportsInterface", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "totalSupply", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "to", "type": "address" }, - { "internalType": "uint256", "name": "value", "type": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "transfer", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "address", "name": "to", "type": "address" }, - { "internalType": "uint256", "name": "value", "type": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "transferAndCall", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "address", "name": "to", "type": "address" }, - { "internalType": "uint256", "name": "value", "type": "uint256" }, - { "internalType": "bytes", "name": "data", "type": "bytes" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "transferAndCall", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "address", "name": "from", "type": "address" }, - { "internalType": "address", "name": "to", "type": "address" }, - { "internalType": "uint256", "name": "value", "type": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "transferFrom", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "address", "name": "from", "type": "address" }, - { "internalType": "address", "name": "to", "type": "address" }, - { "internalType": "uint256", "name": "value", "type": "uint256" }, - { "internalType": "bytes", "name": "data", "type": "bytes" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "transferFromAndCall", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "address", "name": "from", "type": "address" }, - { "internalType": "address", "name": "to", "type": "address" }, - { "internalType": "uint256", "name": "value", "type": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "transferFromAndCall", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - } - ], - "devdoc": { - "kind": "dev", - "methods": { - "allowance(address,address)": { - "details": "Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called." - }, - "approve(address,uint256)": { - "details": "Sets a `value` amount of tokens as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event." - }, - "approveAndCall(address,uint256)": { - "details": "Sets a `value` amount of tokens as the allowance of `spender` over the caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`.", - "params": { - "spender": "The address which will spend the funds.", - "value": "The amount of tokens to be spent." - }, - "returns": { - "_0": "A boolean value indicating whether the operation succeeded unless throwing." - } - }, - "approveAndCall(address,uint256,bytes)": { - "details": "Sets a `value` amount of tokens as the allowance of `spender` over the caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`.", - "params": { - "data": "Additional data with no specified format, sent in call to `spender`.", - "spender": "The address which will spend the funds.", - "value": "The amount of tokens to be spent." - }, - "returns": { - "_0": "A boolean value indicating whether the operation succeeded unless throwing." - } - }, - "balanceOf(address)": { - "details": "Returns the value of tokens owned by `account`." - }, - "supportsInterface(bytes4)": { - "details": "Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section] to learn more about how these ids are created. This function call must use less than 30 000 gas." - }, - "totalSupply()": { - "details": "Returns the value of tokens in existence." - }, - "transfer(address,uint256)": { - "details": "Moves a `value` amount of tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event." - }, - "transferAndCall(address,uint256)": { - "details": "Moves a `value` amount of tokens from the caller's account to `to` and then calls {IERC1363Receiver-onTransferReceived} on `to`.", - "params": { - "to": "The address which you want to transfer to.", - "value": "The amount of tokens to be transferred." - }, - "returns": { - "_0": "A boolean value indicating whether the operation succeeded unless throwing." - } - }, - "transferAndCall(address,uint256,bytes)": { - "details": "Moves a `value` amount of tokens from the caller's account to `to` and then calls {IERC1363Receiver-onTransferReceived} on `to`.", - "params": { - "data": "Additional data with no specified format, sent in call to `to`.", - "to": "The address which you want to transfer to.", - "value": "The amount of tokens to be transferred." - }, - "returns": { - "_0": "A boolean value indicating whether the operation succeeded unless throwing." - } - }, - "transferFrom(address,address,uint256)": { - "details": "Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism. `value` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event." - }, - "transferFromAndCall(address,address,uint256)": { - "details": "Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism and then calls {IERC1363Receiver-onTransferReceived} on `to`.", - "params": { - "from": "The address which you want to send tokens from.", - "to": "The address which you want to transfer to.", - "value": "The amount of tokens to be transferred." - }, - "returns": { - "_0": "A boolean value indicating whether the operation succeeded unless throwing." - } - }, - "transferFromAndCall(address,address,uint256,bytes)": { - "details": "Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism and then calls {IERC1363Receiver-onTransferReceived} on `to`.", - "params": { - "data": "Additional data with no specified format, sent in call to `to`.", - "from": "The address which you want to send tokens from.", - "to": "The address which you want to transfer to.", - "value": "The amount of tokens to be transferred." - }, - "returns": { - "_0": "A boolean value indicating whether the operation succeeded unless throwing." - } - } - }, - "version": 1 - }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol": "IERC1363" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol": { - "keccak256": "0x9b6b3e7803bc5f2f8cd7ad57db8ac1def61a9930a5a3107df4882e028a9605d7", - "urls": [ - "bzz-raw://da62d6be1f5c6edf577f0cb45666a8aa9c2086a4bac87d95d65f02e2f4c36a4b", - "dweb:/ipfs/QmNkpvBpoCMvX8JwAFNSc5XxJ2q5BXJpL5L1txb4QkqVFF" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/interfaces/IERC165.sol": { - "keccak256": "0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724", - "urls": [ - "bzz-raw://11fea9f8bc98949ac6709f0c1699db7430d2948137aa94d5a9e95a91f61a710a", - "dweb:/ipfs/QmQdfRXxQjwP6yn3DVo1GHPpriKNcFghSPi94Z1oKEFUNS" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/interfaces/IERC20.sol": { - "keccak256": "0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c", - "urls": [ - "bzz-raw://a2608291cb038b388d80b79a06b6118a42f7894ff67b7da10ec0dbbf5b2973ba", - "dweb:/ipfs/QmWohqcBLbcxmA4eGPhZDXe5RYMMEEpFq22nfkaUMvTfw1" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol": { - "keccak256": "0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7", - "urls": [ - "bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db", - "dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol": { - "keccak256": "0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8", - "urls": [ - "bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621", - "dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL" - ], - "license": "MIT" - } - }, - "version": 1 - }, - "id": 31 -} diff --git a/examples/oft-movement/out/IERC165.sol/IERC165.json b/examples/oft-movement/out/IERC165.sol/IERC165.json deleted file mode 100644 index 9ec5d9b42..000000000 --- a/examples/oft-movement/out/IERC165.sol/IERC165.json +++ /dev/null @@ -1,78 +0,0 @@ -{ - "abi": [ - { - "type": "function", - "name": "supportsInterface", - "inputs": [ - { "name": "interfaceId", "type": "bytes4", "internalType": "bytes4" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - } - ], - "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "methodIdentifiers": { "supportsInterface(bytes4)": "01ffc9a7" }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface of the ERC-165 standard, as defined in the https://eips.ethereum.org/EIPS/eip-165[ERC]. Implementers can declare support of contract interfaces, which can then be queried by others ({ERC165Checker}). For an implementation, see {ERC165}.\",\"kind\":\"dev\",\"methods\":{\"supportsInterface(bytes4)\":{\"details\":\"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section] to learn more about how these ids are created. This function call must use less than 30 000 gas.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":\"IERC165\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "stateMutability": "view", - "type": "function", - "name": "supportsInterface", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - } - ], - "devdoc": { - "kind": "dev", - "methods": { - "supportsInterface(bytes4)": { - "details": "Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section] to learn more about how these ids are created. This function call must use less than 30 000 gas." - } - }, - "version": 1 - }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol": "IERC165" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol": { - "keccak256": "0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8", - "urls": [ - "bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621", - "dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL" - ], - "license": "MIT" - } - }, - "version": 1 - }, - "id": 42 -} diff --git a/examples/oft-movement/out/IERC20.sol/IERC20.json b/examples/oft-movement/out/IERC20.sol/IERC20.json deleted file mode 100644 index 3f7fddf41..000000000 --- a/examples/oft-movement/out/IERC20.sol/IERC20.json +++ /dev/null @@ -1,298 +0,0 @@ -{ - "abi": [ - { - "type": "function", - "name": "allowance", - "inputs": [ - { "name": "owner", "type": "address", "internalType": "address" }, - { "name": "spender", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "approve", - "inputs": [ - { "name": "spender", "type": "address", "internalType": "address" }, - { "name": "value", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "balanceOf", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "totalSupply", - "inputs": [], - "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "transfer", - "inputs": [ - { "name": "to", "type": "address", "internalType": "address" }, - { "name": "value", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "transferFrom", - "inputs": [ - { "name": "from", "type": "address", "internalType": "address" }, - { "name": "to", "type": "address", "internalType": "address" }, - { "name": "value", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "nonpayable" - }, - { - "type": "event", - "name": "Approval", - "inputs": [ - { - "name": "owner", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "spender", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "value", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "Transfer", - "inputs": [ - { - "name": "from", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "to", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "value", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - } - ], - "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "methodIdentifiers": { - "allowance(address,address)": "dd62ed3e", - "approve(address,uint256)": "095ea7b3", - "balanceOf(address)": "70a08231", - "totalSupply()": "18160ddd", - "transfer(address,uint256)": "a9059cbb", - "transferFrom(address,address,uint256)": "23b872dd" - }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface of the ERC-20 standard as defined in the ERC.\",\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called.\"},\"approve(address,uint256)\":{\"details\":\"Sets a `value` amount of tokens as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event.\"},\"balanceOf(address)\":{\"details\":\"Returns the value of tokens owned by `account`.\"},\"totalSupply()\":{\"details\":\"Returns the value of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism. `value` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol\":\"IERC20\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db\",\"dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address", - "indexed": true - }, - { - "internalType": "address", - "name": "spender", - "type": "address", - "indexed": true - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "Approval", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address", - "indexed": true - }, - { - "internalType": "address", - "name": "to", - "type": "address", - "indexed": true - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "Transfer", - "anonymous": false - }, - { - "inputs": [ - { "internalType": "address", "name": "owner", "type": "address" }, - { "internalType": "address", "name": "spender", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "allowance", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "spender", "type": "address" }, - { "internalType": "uint256", "name": "value", "type": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "approve", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "balanceOf", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "totalSupply", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "to", "type": "address" }, - { "internalType": "uint256", "name": "value", "type": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "transfer", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "address", "name": "from", "type": "address" }, - { "internalType": "address", "name": "to", "type": "address" }, - { "internalType": "uint256", "name": "value", "type": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "transferFrom", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - } - ], - "devdoc": { - "kind": "dev", - "methods": { - "allowance(address,address)": { - "details": "Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called." - }, - "approve(address,uint256)": { - "details": "Sets a `value` amount of tokens as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event." - }, - "balanceOf(address)": { - "details": "Returns the value of tokens owned by `account`." - }, - "totalSupply()": { - "details": "Returns the value of tokens in existence." - }, - "transfer(address,uint256)": { - "details": "Moves a `value` amount of tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event." - }, - "transferFrom(address,address,uint256)": { - "details": "Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism. `value` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event." - } - }, - "version": 1 - }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol": "IERC20" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol": { - "keccak256": "0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7", - "urls": [ - "bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db", - "dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9" - ], - "license": "MIT" - } - }, - "version": 1 - }, - "id": 36 -} diff --git a/examples/oft-movement/out/IERC20Metadata.sol/IERC20Metadata.json b/examples/oft-movement/out/IERC20Metadata.sol/IERC20Metadata.json deleted file mode 100644 index c0738368c..000000000 --- a/examples/oft-movement/out/IERC20Metadata.sol/IERC20Metadata.json +++ /dev/null @@ -1,360 +0,0 @@ -{ - "abi": [ - { - "type": "function", - "name": "allowance", - "inputs": [ - { "name": "owner", "type": "address", "internalType": "address" }, - { "name": "spender", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "approve", - "inputs": [ - { "name": "spender", "type": "address", "internalType": "address" }, - { "name": "value", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "balanceOf", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "decimals", - "inputs": [], - "outputs": [{ "name": "", "type": "uint8", "internalType": "uint8" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "name", - "inputs": [], - "outputs": [{ "name": "", "type": "string", "internalType": "string" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "symbol", - "inputs": [], - "outputs": [{ "name": "", "type": "string", "internalType": "string" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "totalSupply", - "inputs": [], - "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "transfer", - "inputs": [ - { "name": "to", "type": "address", "internalType": "address" }, - { "name": "value", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "transferFrom", - "inputs": [ - { "name": "from", "type": "address", "internalType": "address" }, - { "name": "to", "type": "address", "internalType": "address" }, - { "name": "value", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "nonpayable" - }, - { - "type": "event", - "name": "Approval", - "inputs": [ - { - "name": "owner", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "spender", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "value", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "Transfer", - "inputs": [ - { - "name": "from", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "to", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "value", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - } - ], - "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "methodIdentifiers": { - "allowance(address,address)": "dd62ed3e", - "approve(address,uint256)": "095ea7b3", - "balanceOf(address)": "70a08231", - "decimals()": "313ce567", - "name()": "06fdde03", - "symbol()": "95d89b41", - "totalSupply()": "18160ddd", - "transfer(address,uint256)": "a9059cbb", - "transferFrom(address,address,uint256)": "23b872dd" - }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface for the optional metadata functions from the ERC-20 standard.\",\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called.\"},\"approve(address,uint256)\":{\"details\":\"Sets a `value` amount of tokens as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event.\"},\"balanceOf(address)\":{\"details\":\"Returns the value of tokens owned by `account`.\"},\"decimals()\":{\"details\":\"Returns the decimals places of the token.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token.\"},\"totalSupply()\":{\"details\":\"Returns the value of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism. `value` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":\"IERC20Metadata\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db\",\"dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x70f2f713b13b7ce4610bcd0ac9fec0f3cc43693b043abcb8dc40a42a726eb330\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c13d13304ac79a83ab1c30168967d19e2203342ebbd6a9bbce4db7550522dcbf\",\"dweb:/ipfs/QmeN5jKMN2vw5bhacr6tkg78afbTTZUeaacNHqjWt4Ew1r\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address", - "indexed": true - }, - { - "internalType": "address", - "name": "spender", - "type": "address", - "indexed": true - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "Approval", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address", - "indexed": true - }, - { - "internalType": "address", - "name": "to", - "type": "address", - "indexed": true - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "Transfer", - "anonymous": false - }, - { - "inputs": [ - { "internalType": "address", "name": "owner", "type": "address" }, - { "internalType": "address", "name": "spender", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "allowance", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "spender", "type": "address" }, - { "internalType": "uint256", "name": "value", "type": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "approve", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "balanceOf", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "decimals", - "outputs": [{ "internalType": "uint8", "name": "", "type": "uint8" }] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "name", - "outputs": [ - { "internalType": "string", "name": "", "type": "string" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "symbol", - "outputs": [ - { "internalType": "string", "name": "", "type": "string" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "totalSupply", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "to", "type": "address" }, - { "internalType": "uint256", "name": "value", "type": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "transfer", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "address", "name": "from", "type": "address" }, - { "internalType": "address", "name": "to", "type": "address" }, - { "internalType": "uint256", "name": "value", "type": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "transferFrom", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - } - ], - "devdoc": { - "kind": "dev", - "methods": { - "allowance(address,address)": { - "details": "Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called." - }, - "approve(address,uint256)": { - "details": "Sets a `value` amount of tokens as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event." - }, - "balanceOf(address)": { - "details": "Returns the value of tokens owned by `account`." - }, - "decimals()": { - "details": "Returns the decimals places of the token." - }, - "name()": { "details": "Returns the name of the token." }, - "symbol()": { "details": "Returns the symbol of the token." }, - "totalSupply()": { - "details": "Returns the value of tokens in existence." - }, - "transfer(address,uint256)": { - "details": "Moves a `value` amount of tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event." - }, - "transferFrom(address,address,uint256)": { - "details": "Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism. `value` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event." - } - }, - "version": 1 - }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol": "IERC20Metadata" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol": { - "keccak256": "0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7", - "urls": [ - "bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db", - "dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol": { - "keccak256": "0x70f2f713b13b7ce4610bcd0ac9fec0f3cc43693b043abcb8dc40a42a726eb330", - "urls": [ - "bzz-raw://c13d13304ac79a83ab1c30168967d19e2203342ebbd6a9bbce4db7550522dcbf", - "dweb:/ipfs/QmeN5jKMN2vw5bhacr6tkg78afbTTZUeaacNHqjWt4Ew1r" - ], - "license": "MIT" - } - }, - "version": 1 - }, - "id": 37 -} diff --git a/examples/oft-movement/out/IExecutor.sol/IExecutor.json b/examples/oft-movement/out/IExecutor.sol/IExecutor.json deleted file mode 100644 index 90fb5241b..000000000 --- a/examples/oft-movement/out/IExecutor.sol/IExecutor.json +++ /dev/null @@ -1,787 +0,0 @@ -{ - "abi": [ - { - "type": "function", - "name": "assignJob", - "inputs": [ - { "name": "_dstEid", "type": "uint32", "internalType": "uint32" }, - { "name": "_sender", "type": "address", "internalType": "address" }, - { - "name": "_calldataSize", - "type": "uint256", - "internalType": "uint256" - }, - { "name": "_options", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [ - { "name": "price", "type": "uint256", "internalType": "uint256" } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "assignJob", - "inputs": [ - { "name": "_sender", "type": "address", "internalType": "address" }, - { "name": "_options", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [ - { "name": "fee", "type": "uint256", "internalType": "uint256" } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "defaultMultiplierBps", - "inputs": [], - "outputs": [{ "name": "", "type": "uint16", "internalType": "uint16" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "dstConfig", - "inputs": [ - { "name": "_dstEid", "type": "uint32", "internalType": "uint32" } - ], - "outputs": [ - { "name": "", "type": "uint64", "internalType": "uint64" }, - { "name": "", "type": "uint16", "internalType": "uint16" }, - { "name": "", "type": "uint128", "internalType": "uint128" }, - { "name": "", "type": "uint128", "internalType": "uint128" }, - { "name": "", "type": "uint64", "internalType": "uint64" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getFee", - "inputs": [ - { "name": "_dstEid", "type": "uint32", "internalType": "uint32" }, - { "name": "_sender", "type": "address", "internalType": "address" }, - { - "name": "_calldataSize", - "type": "uint256", - "internalType": "uint256" - }, - { "name": "_options", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [ - { "name": "price", "type": "uint256", "internalType": "uint256" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getFee", - "inputs": [ - { "name": "_sender", "type": "address", "internalType": "address" }, - { "name": "_options", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [ - { "name": "fee", "type": "uint256", "internalType": "uint256" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getSupportedOptionTypes", - "inputs": [ - { "name": "_eid", "type": "uint32", "internalType": "uint32" } - ], - "outputs": [{ "name": "", "type": "uint8[]", "internalType": "uint8[]" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "priceFeed", - "inputs": [], - "outputs": [{ "name": "", "type": "address", "internalType": "address" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "setDefaultMultiplierBps", - "inputs": [ - { "name": "_multiplierBps", "type": "uint16", "internalType": "uint16" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setPriceFeed", - "inputs": [ - { "name": "_priceFeed", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setSupportedOptionTypes", - "inputs": [ - { "name": "_eid", "type": "uint32", "internalType": "uint32" }, - { "name": "_optionTypes", "type": "uint8[]", "internalType": "uint8[]" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "withdrawFee", - "inputs": [ - { "name": "_lib", "type": "address", "internalType": "address" }, - { "name": "_to", "type": "address", "internalType": "address" }, - { "name": "_amount", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "event", - "name": "DstConfigSet", - "inputs": [ - { - "name": "params", - "type": "tuple[]", - "indexed": false, - "internalType": "struct IExecutor.DstConfigParam[]", - "components": [ - { "name": "dstEid", "type": "uint32", "internalType": "uint32" }, - { - "name": "lzReceiveBaseGas", - "type": "uint64", - "internalType": "uint64" - }, - { - "name": "lzComposeBaseGas", - "type": "uint64", - "internalType": "uint64" - }, - { - "name": "multiplierBps", - "type": "uint16", - "internalType": "uint16" - }, - { - "name": "floorMarginUSD", - "type": "uint128", - "internalType": "uint128" - }, - { - "name": "nativeCap", - "type": "uint128", - "internalType": "uint128" - } - ] - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "NativeDropApplied", - "inputs": [ - { - "name": "origin", - "type": "tuple", - "indexed": false, - "internalType": "struct Origin", - "components": [ - { "name": "srcEid", "type": "uint32", "internalType": "uint32" }, - { "name": "sender", "type": "bytes32", "internalType": "bytes32" }, - { "name": "nonce", "type": "uint64", "internalType": "uint64" } - ] - }, - { - "name": "dstEid", - "type": "uint32", - "indexed": false, - "internalType": "uint32" - }, - { - "name": "oapp", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "params", - "type": "tuple[]", - "indexed": false, - "internalType": "struct IExecutor.NativeDropParams[]", - "components": [ - { - "name": "receiver", - "type": "address", - "internalType": "address" - }, - { "name": "amount", "type": "uint256", "internalType": "uint256" } - ] - }, - { - "name": "success", - "type": "bool[]", - "indexed": false, - "internalType": "bool[]" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "SetDefaultMultiplierBps", - "inputs": [ - { - "name": "multiplierBps", - "type": "uint16", - "indexed": false, - "internalType": "uint16" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "SetPriceFeed", - "inputs": [ - { - "name": "priceFeed", - "type": "address", - "indexed": false, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "SetSupportedOptionTypes", - "inputs": [ - { - "name": "dstEid", - "type": "uint32", - "indexed": false, - "internalType": "uint32" - }, - { - "name": "optionTypes", - "type": "uint8[]", - "indexed": false, - "internalType": "uint8[]" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "SetWorkerLib", - "inputs": [ - { - "name": "workerLib", - "type": "address", - "indexed": false, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "Withdraw", - "inputs": [ - { - "name": "lib", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "to", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "amount", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { "type": "error", "name": "Worker_NotAllowed", "inputs": [] }, - { "type": "error", "name": "Worker_OnlyMessageLib", "inputs": [] }, - { "type": "error", "name": "Worker_RoleRenouncingDisabled", "inputs": [] } - ], - "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "methodIdentifiers": { - "assignJob(address,bytes)": "c015bb7d", - "assignJob(uint32,address,uint256,bytes)": "717e8a42", - "defaultMultiplierBps()": "00bf2e80", - "dstConfig(uint32)": "9e944965", - "getFee(address,bytes)": "c8f8dcd1", - "getFee(uint32,address,uint256,bytes)": "709eb664", - "getSupportedOptionTypes(uint32)": "26e67a37", - "priceFeed()": "741bef1a", - "setDefaultMultiplierBps(uint16)": "c358de0a", - "setPriceFeed(address)": "724e78da", - "setSupportedOptionTypes(uint32,uint8[])": "cd88b903", - "withdrawFee(address,address,uint256)": "1095b6d7" - }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"Worker_NotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Worker_OnlyMessageLib\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Worker_RoleRenouncingDisabled\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"lzReceiveBaseGas\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"lzComposeBaseGas\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"multiplierBps\",\"type\":\"uint16\"},{\"internalType\":\"uint128\",\"name\":\"floorMarginUSD\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"nativeCap\",\"type\":\"uint128\"}],\"indexed\":false,\"internalType\":\"struct IExecutor.DstConfigParam[]\",\"name\":\"params\",\"type\":\"tuple[]\"}],\"name\":\"DstConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"indexed\":false,\"internalType\":\"struct Origin\",\"name\":\"origin\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oapp\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"struct IExecutor.NativeDropParams[]\",\"name\":\"params\",\"type\":\"tuple[]\"},{\"indexed\":false,\"internalType\":\"bool[]\",\"name\":\"success\",\"type\":\"bool[]\"}],\"name\":\"NativeDropApplied\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"multiplierBps\",\"type\":\"uint16\"}],\"name\":\"SetDefaultMultiplierBps\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"priceFeed\",\"type\":\"address\"}],\"name\":\"SetPriceFeed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint8[]\",\"name\":\"optionTypes\",\"type\":\"uint8[]\"}],\"name\":\"SetSupportedOptionTypes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"workerLib\",\"type\":\"address\"}],\"name\":\"SetWorkerLib\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"lib\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Withdraw\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_dstEid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_calldataSize\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_options\",\"type\":\"bytes\"}],\"name\":\"assignJob\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_options\",\"type\":\"bytes\"}],\"name\":\"assignJob\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"defaultMultiplierBps\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_dstEid\",\"type\":\"uint32\"}],\"name\":\"dstConfig\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"},{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_dstEid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_calldataSize\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_options\",\"type\":\"bytes\"}],\"name\":\"getFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_options\",\"type\":\"bytes\"}],\"name\":\"getFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"}],\"name\":\"getSupportedOptionTypes\",\"outputs\":[{\"internalType\":\"uint8[]\",\"name\":\"\",\"type\":\"uint8[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"priceFeed\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"_multiplierBps\",\"type\":\"uint16\"}],\"name\":\"setDefaultMultiplierBps\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_priceFeed\",\"type\":\"address\"}],\"name\":\"setPriceFeed\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"uint8[]\",\"name\":\"_optionTypes\",\"type\":\"uint8[]\"}],\"name\":\"setSupportedOptionTypes\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_lib\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"withdrawFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IExecutor.sol\":\"IExecutor\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IExecutor.sol\":{\"keccak256\":\"0x2fd26e454b060ede7afa15f8bbc67bd43f9181b6405ca411d36c8b538be016af\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cf2142e83214bb392f69ed14266718cfd803f849a7239ee9a1950ddf66553696\",\"dweb:/ipfs/QmSZ2mPMZqWBetMU8VESKtxy7UdSThUVmJmTFMHEyKLTGZ\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroExecutor.sol\":{\"keccak256\":\"0x3647af317ee126b1247a782abb30e59ec5ab21b4945f1d3b4370d1fa3c1bf347\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5b51cd5e7347ee869a06bd57a698f40e4a901ec7fdcb27f0ef485e4a0e1e9be4\",\"dweb:/ipfs/QmP2Nc73veRzLGdUahkjhQAiKR9ZWYiUtSGwoMB1sPXxUp\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroReadExecutor.sol\":{\"keccak256\":\"0x360936885f173f816ffb47e555d480928e74eb1ad54a76af0f4595ecba2d5657\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://16b5095e6439b1e416eb70571a1dd8f4f21a0d77b19c9e510ca289d99e5e09ab\",\"dweb:/ipfs/QmZ2mjQDQ35gJseyzmQhik4cBgN2ESADzofFNVFvgS64hv\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IWorker.sol\":{\"keccak256\":\"0xa6b61913767305227576cc6da5067de4208f09a4f58bfbfe32beafdfae9869b1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7fce83bfb831f383606aee7f5ff68a330c8526bb1036f9ba0813d3e4fa8d534\",\"dweb:/ipfs/QmR7zAqJkmCgBj6sguS8t2WthY5k6FwsakgH4UY11uqD4n\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\":{\"keccak256\":\"0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bacc29fd3866af71e59cb0bdc1cf82c882a4a7f4e2652fd413c9f12649762083\",\"dweb:/ipfs/QmZh2toLnrQDWaNYhS5K4NoW7Vxd2GdZx9KA77vKEDLAqs\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol\":{\"keccak256\":\"0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d8ff6a8a89297fa127f86b54e0db3eba1d6a6eeb4f6398d3c84d569665ac8f1b\",\"dweb:/ipfs/QmVSwhw6xFDrLRAX4RXaCM47yBaBtac4wf36DYEq6KCTvT\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol\":{\"keccak256\":\"0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7e1b245d58221d16d8b5e0f01ef3e289a24a7df1ace3b94239e4d5b954ad5927\",\"dweb:/ipfs/Qmappsgp7PCY9rSSNE9Cdn4BTRX591WfCSEgq2HxhA3z6S\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol\":{\"keccak256\":\"0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b18b23a1643fc6636c4ad9d9023e2e6ca2d3c2a4a046482d4655bff09950598d\",\"dweb:/ipfs/Qma6G5SqiovwrMPfgqTrRngK1HWW373Wkf9c6YP2NhXpPk\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol\":{\"keccak256\":\"0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5173fc9143bea314b159ca5a9adb5626659ef763bc598e27de5fa46efe3291a6\",\"dweb:/ipfs/QmSLFeMFPmVeGxT4sxRPW28ictjAS22M8rLeYRu9TXkA6D\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { "inputs": [], "type": "error", "name": "Worker_NotAllowed" }, - { "inputs": [], "type": "error", "name": "Worker_OnlyMessageLib" }, - { - "inputs": [], - "type": "error", - "name": "Worker_RoleRenouncingDisabled" - }, - { - "inputs": [ - { - "internalType": "struct IExecutor.DstConfigParam[]", - "name": "params", - "type": "tuple[]", - "components": [ - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { - "internalType": "uint64", - "name": "lzReceiveBaseGas", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "lzComposeBaseGas", - "type": "uint64" - }, - { - "internalType": "uint16", - "name": "multiplierBps", - "type": "uint16" - }, - { - "internalType": "uint128", - "name": "floorMarginUSD", - "type": "uint128" - }, - { - "internalType": "uint128", - "name": "nativeCap", - "type": "uint128" - } - ], - "indexed": false - } - ], - "type": "event", - "name": "DstConfigSet", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "struct Origin", - "name": "origin", - "type": "tuple", - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { "internalType": "uint64", "name": "nonce", "type": "uint64" } - ], - "indexed": false - }, - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32", - "indexed": false - }, - { - "internalType": "address", - "name": "oapp", - "type": "address", - "indexed": false - }, - { - "internalType": "struct IExecutor.NativeDropParams[]", - "name": "params", - "type": "tuple[]", - "components": [ - { - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "indexed": false - }, - { - "internalType": "bool[]", - "name": "success", - "type": "bool[]", - "indexed": false - } - ], - "type": "event", - "name": "NativeDropApplied", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "uint16", - "name": "multiplierBps", - "type": "uint16", - "indexed": false - } - ], - "type": "event", - "name": "SetDefaultMultiplierBps", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "priceFeed", - "type": "address", - "indexed": false - } - ], - "type": "event", - "name": "SetPriceFeed", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32", - "indexed": false - }, - { - "internalType": "uint8[]", - "name": "optionTypes", - "type": "uint8[]", - "indexed": false - } - ], - "type": "event", - "name": "SetSupportedOptionTypes", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "workerLib", - "type": "address", - "indexed": false - } - ], - "type": "event", - "name": "SetWorkerLib", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "lib", - "type": "address", - "indexed": false - }, - { - "internalType": "address", - "name": "to", - "type": "address", - "indexed": false - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "Withdraw", - "anonymous": false - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_dstEid", "type": "uint32" }, - { "internalType": "address", "name": "_sender", "type": "address" }, - { - "internalType": "uint256", - "name": "_calldataSize", - "type": "uint256" - }, - { "internalType": "bytes", "name": "_options", "type": "bytes" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "assignJob", - "outputs": [ - { "internalType": "uint256", "name": "price", "type": "uint256" } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "_sender", "type": "address" }, - { "internalType": "bytes", "name": "_options", "type": "bytes" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "assignJob", - "outputs": [ - { "internalType": "uint256", "name": "fee", "type": "uint256" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "defaultMultiplierBps", - "outputs": [ - { "internalType": "uint16", "name": "", "type": "uint16" } - ] - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_dstEid", "type": "uint32" } - ], - "stateMutability": "view", - "type": "function", - "name": "dstConfig", - "outputs": [ - { "internalType": "uint64", "name": "", "type": "uint64" }, - { "internalType": "uint16", "name": "", "type": "uint16" }, - { "internalType": "uint128", "name": "", "type": "uint128" }, - { "internalType": "uint128", "name": "", "type": "uint128" }, - { "internalType": "uint64", "name": "", "type": "uint64" } - ] - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_dstEid", "type": "uint32" }, - { "internalType": "address", "name": "_sender", "type": "address" }, - { - "internalType": "uint256", - "name": "_calldataSize", - "type": "uint256" - }, - { "internalType": "bytes", "name": "_options", "type": "bytes" } - ], - "stateMutability": "view", - "type": "function", - "name": "getFee", - "outputs": [ - { "internalType": "uint256", "name": "price", "type": "uint256" } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "_sender", "type": "address" }, - { "internalType": "bytes", "name": "_options", "type": "bytes" } - ], - "stateMutability": "view", - "type": "function", - "name": "getFee", - "outputs": [ - { "internalType": "uint256", "name": "fee", "type": "uint256" } - ] - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" } - ], - "stateMutability": "view", - "type": "function", - "name": "getSupportedOptionTypes", - "outputs": [ - { "internalType": "uint8[]", "name": "", "type": "uint8[]" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "priceFeed", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ] - }, - { - "inputs": [ - { - "internalType": "uint16", - "name": "_multiplierBps", - "type": "uint16" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setDefaultMultiplierBps" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_priceFeed", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setPriceFeed" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { - "internalType": "uint8[]", - "name": "_optionTypes", - "type": "uint8[]" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setSupportedOptionTypes" - }, - { - "inputs": [ - { "internalType": "address", "name": "_lib", "type": "address" }, - { "internalType": "address", "name": "_to", "type": "address" }, - { "internalType": "uint256", "name": "_amount", "type": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "withdrawFee" - } - ], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IExecutor.sol": "IExecutor" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IExecutor.sol": { - "keccak256": "0x2fd26e454b060ede7afa15f8bbc67bd43f9181b6405ca411d36c8b538be016af", - "urls": [ - "bzz-raw://cf2142e83214bb392f69ed14266718cfd803f849a7239ee9a1950ddf66553696", - "dweb:/ipfs/QmSZ2mPMZqWBetMU8VESKtxy7UdSThUVmJmTFMHEyKLTGZ" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroExecutor.sol": { - "keccak256": "0x3647af317ee126b1247a782abb30e59ec5ab21b4945f1d3b4370d1fa3c1bf347", - "urls": [ - "bzz-raw://5b51cd5e7347ee869a06bd57a698f40e4a901ec7fdcb27f0ef485e4a0e1e9be4", - "dweb:/ipfs/QmP2Nc73veRzLGdUahkjhQAiKR9ZWYiUtSGwoMB1sPXxUp" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroReadExecutor.sol": { - "keccak256": "0x360936885f173f816ffb47e555d480928e74eb1ad54a76af0f4595ecba2d5657", - "urls": [ - "bzz-raw://16b5095e6439b1e416eb70571a1dd8f4f21a0d77b19c9e510ca289d99e5e09ab", - "dweb:/ipfs/QmZ2mjQDQ35gJseyzmQhik4cBgN2ESADzofFNVFvgS64hv" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IWorker.sol": { - "keccak256": "0xa6b61913767305227576cc6da5067de4208f09a4f58bfbfe32beafdfae9869b1", - "urls": [ - "bzz-raw://b7fce83bfb831f383606aee7f5ff68a330c8526bb1036f9ba0813d3e4fa8d534", - "dweb:/ipfs/QmR7zAqJkmCgBj6sguS8t2WthY5k6FwsakgH4UY11uqD4n" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol": { - "keccak256": "0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3", - "urls": [ - "bzz-raw://bacc29fd3866af71e59cb0bdc1cf82c882a4a7f4e2652fd413c9f12649762083", - "dweb:/ipfs/QmZh2toLnrQDWaNYhS5K4NoW7Vxd2GdZx9KA77vKEDLAqs" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol": { - "keccak256": "0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc", - "urls": [ - "bzz-raw://d8ff6a8a89297fa127f86b54e0db3eba1d6a6eeb4f6398d3c84d569665ac8f1b", - "dweb:/ipfs/QmVSwhw6xFDrLRAX4RXaCM47yBaBtac4wf36DYEq6KCTvT" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol": { - "keccak256": "0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972", - "urls": [ - "bzz-raw://7e1b245d58221d16d8b5e0f01ef3e289a24a7df1ace3b94239e4d5b954ad5927", - "dweb:/ipfs/Qmappsgp7PCY9rSSNE9Cdn4BTRX591WfCSEgq2HxhA3z6S" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol": { - "keccak256": "0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901", - "urls": [ - "bzz-raw://b18b23a1643fc6636c4ad9d9023e2e6ca2d3c2a4a046482d4655bff09950598d", - "dweb:/ipfs/Qma6G5SqiovwrMPfgqTrRngK1HWW373Wkf9c6YP2NhXpPk" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol": { - "keccak256": "0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e", - "urls": [ - "bzz-raw://5173fc9143bea314b159ca5a9adb5626659ef763bc598e27de5fa46efe3291a6", - "dweb:/ipfs/QmSLFeMFPmVeGxT4sxRPW28ictjAS22M8rLeYRu9TXkA6D" - ], - "license": "MIT" - } - }, - "version": 1 - }, - "id": 4 -} diff --git a/examples/oft-movement/out/IExecutorFeeLib.sol/IExecutorFeeLib.json b/examples/oft-movement/out/IExecutorFeeLib.sol/IExecutorFeeLib.json deleted file mode 100644 index 7ce1abadb..000000000 --- a/examples/oft-movement/out/IExecutorFeeLib.sol/IExecutorFeeLib.json +++ /dev/null @@ -1,770 +0,0 @@ -{ - "abi": [ - { - "type": "function", - "name": "getFee", - "inputs": [ - { - "name": "_params", - "type": "tuple", - "internalType": "struct IExecutorFeeLib.FeeParamsForRead", - "components": [ - { - "name": "priceFeed", - "type": "address", - "internalType": "address" - }, - { "name": "sender", "type": "address", "internalType": "address" }, - { - "name": "defaultMultiplierBps", - "type": "uint16", - "internalType": "uint16" - } - ] - }, - { - "name": "_dstConfig", - "type": "tuple", - "internalType": "struct IExecutor.DstConfig", - "components": [ - { - "name": "lzReceiveBaseGas", - "type": "uint64", - "internalType": "uint64" - }, - { - "name": "multiplierBps", - "type": "uint16", - "internalType": "uint16" - }, - { - "name": "floorMarginUSD", - "type": "uint128", - "internalType": "uint128" - }, - { - "name": "nativeCap", - "type": "uint128", - "internalType": "uint128" - }, - { - "name": "lzComposeBaseGas", - "type": "uint64", - "internalType": "uint64" - } - ] - }, - { "name": "_options", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [ - { "name": "fee", "type": "uint256", "internalType": "uint256" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getFee", - "inputs": [ - { - "name": "_params", - "type": "tuple", - "internalType": "struct IExecutorFeeLib.FeeParams", - "components": [ - { - "name": "priceFeed", - "type": "address", - "internalType": "address" - }, - { "name": "dstEid", "type": "uint32", "internalType": "uint32" }, - { "name": "sender", "type": "address", "internalType": "address" }, - { - "name": "calldataSize", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "defaultMultiplierBps", - "type": "uint16", - "internalType": "uint16" - } - ] - }, - { - "name": "_dstConfig", - "type": "tuple", - "internalType": "struct IExecutor.DstConfig", - "components": [ - { - "name": "lzReceiveBaseGas", - "type": "uint64", - "internalType": "uint64" - }, - { - "name": "multiplierBps", - "type": "uint16", - "internalType": "uint16" - }, - { - "name": "floorMarginUSD", - "type": "uint128", - "internalType": "uint128" - }, - { - "name": "nativeCap", - "type": "uint128", - "internalType": "uint128" - }, - { - "name": "lzComposeBaseGas", - "type": "uint64", - "internalType": "uint64" - } - ] - }, - { "name": "_options", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [ - { "name": "fee", "type": "uint256", "internalType": "uint256" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getFeeOnSend", - "inputs": [ - { - "name": "_params", - "type": "tuple", - "internalType": "struct IExecutorFeeLib.FeeParams", - "components": [ - { - "name": "priceFeed", - "type": "address", - "internalType": "address" - }, - { "name": "dstEid", "type": "uint32", "internalType": "uint32" }, - { "name": "sender", "type": "address", "internalType": "address" }, - { - "name": "calldataSize", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "defaultMultiplierBps", - "type": "uint16", - "internalType": "uint16" - } - ] - }, - { - "name": "_dstConfig", - "type": "tuple", - "internalType": "struct IExecutor.DstConfig", - "components": [ - { - "name": "lzReceiveBaseGas", - "type": "uint64", - "internalType": "uint64" - }, - { - "name": "multiplierBps", - "type": "uint16", - "internalType": "uint16" - }, - { - "name": "floorMarginUSD", - "type": "uint128", - "internalType": "uint128" - }, - { - "name": "nativeCap", - "type": "uint128", - "internalType": "uint128" - }, - { - "name": "lzComposeBaseGas", - "type": "uint64", - "internalType": "uint64" - } - ] - }, - { "name": "_options", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [ - { "name": "fee", "type": "uint256", "internalType": "uint256" } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "getFeeOnSend", - "inputs": [ - { - "name": "_params", - "type": "tuple", - "internalType": "struct IExecutorFeeLib.FeeParamsForRead", - "components": [ - { - "name": "priceFeed", - "type": "address", - "internalType": "address" - }, - { "name": "sender", "type": "address", "internalType": "address" }, - { - "name": "defaultMultiplierBps", - "type": "uint16", - "internalType": "uint16" - } - ] - }, - { - "name": "_dstConfig", - "type": "tuple", - "internalType": "struct IExecutor.DstConfig", - "components": [ - { - "name": "lzReceiveBaseGas", - "type": "uint64", - "internalType": "uint64" - }, - { - "name": "multiplierBps", - "type": "uint16", - "internalType": "uint16" - }, - { - "name": "floorMarginUSD", - "type": "uint128", - "internalType": "uint128" - }, - { - "name": "nativeCap", - "type": "uint128", - "internalType": "uint128" - }, - { - "name": "lzComposeBaseGas", - "type": "uint64", - "internalType": "uint64" - } - ] - }, - { "name": "_options", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [ - { "name": "fee", "type": "uint256", "internalType": "uint256" } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "version", - "inputs": [], - "outputs": [ - { "name": "major", "type": "uint64", "internalType": "uint64" }, - { "name": "minor", "type": "uint8", "internalType": "uint8" } - ], - "stateMutability": "view" - }, - { - "type": "error", - "name": "Executor_EidNotSupported", - "inputs": [{ "name": "eid", "type": "uint32", "internalType": "uint32" }] - }, - { - "type": "error", - "name": "Executor_InvalidExecutorOptions", - "inputs": [ - { "name": "cursor", "type": "uint256", "internalType": "uint256" } - ] - }, - { - "type": "error", - "name": "Executor_NativeAmountExceedsCap", - "inputs": [ - { "name": "amount", "type": "uint256", "internalType": "uint256" }, - { "name": "cap", "type": "uint256", "internalType": "uint256" } - ] - }, - { "type": "error", "name": "Executor_NoOptions", "inputs": [] }, - { - "type": "error", - "name": "Executor_UnsupportedOptionType", - "inputs": [ - { "name": "optionType", "type": "uint8", "internalType": "uint8" } - ] - }, - { - "type": "error", - "name": "Executor_ZeroCalldataSizeProvided", - "inputs": [] - }, - { - "type": "error", - "name": "Executor_ZeroLzComposeGasProvided", - "inputs": [] - }, - { - "type": "error", - "name": "Executor_ZeroLzReceiveGasProvided", - "inputs": [] - } - ], - "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "methodIdentifiers": { - "getFee((address,address,uint16),(uint64,uint16,uint128,uint128,uint64),bytes)": "337c7a9e", - "getFee((address,uint32,address,uint256,uint16),(uint64,uint16,uint128,uint128,uint64),bytes)": "434ee016", - "getFeeOnSend((address,address,uint16),(uint64,uint16,uint128,uint128,uint64),bytes)": "65003784", - "getFeeOnSend((address,uint32,address,uint256,uint16),(uint64,uint16,uint128,uint128,uint64),bytes)": "566ef762", - "version()": "54fd4d50" - }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"}],\"name\":\"Executor_EidNotSupported\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"cursor\",\"type\":\"uint256\"}],\"name\":\"Executor_InvalidExecutorOptions\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"cap\",\"type\":\"uint256\"}],\"name\":\"Executor_NativeAmountExceedsCap\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Executor_NoOptions\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"optionType\",\"type\":\"uint8\"}],\"name\":\"Executor_UnsupportedOptionType\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Executor_ZeroCalldataSizeProvided\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Executor_ZeroLzComposeGasProvided\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Executor_ZeroLzReceiveGasProvided\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"priceFeed\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"defaultMultiplierBps\",\"type\":\"uint16\"}],\"internalType\":\"struct IExecutorFeeLib.FeeParamsForRead\",\"name\":\"_params\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"lzReceiveBaseGas\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"multiplierBps\",\"type\":\"uint16\"},{\"internalType\":\"uint128\",\"name\":\"floorMarginUSD\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"nativeCap\",\"type\":\"uint128\"},{\"internalType\":\"uint64\",\"name\":\"lzComposeBaseGas\",\"type\":\"uint64\"}],\"internalType\":\"struct IExecutor.DstConfig\",\"name\":\"_dstConfig\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"_options\",\"type\":\"bytes\"}],\"name\":\"getFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"priceFeed\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"calldataSize\",\"type\":\"uint256\"},{\"internalType\":\"uint16\",\"name\":\"defaultMultiplierBps\",\"type\":\"uint16\"}],\"internalType\":\"struct IExecutorFeeLib.FeeParams\",\"name\":\"_params\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"lzReceiveBaseGas\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"multiplierBps\",\"type\":\"uint16\"},{\"internalType\":\"uint128\",\"name\":\"floorMarginUSD\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"nativeCap\",\"type\":\"uint128\"},{\"internalType\":\"uint64\",\"name\":\"lzComposeBaseGas\",\"type\":\"uint64\"}],\"internalType\":\"struct IExecutor.DstConfig\",\"name\":\"_dstConfig\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"_options\",\"type\":\"bytes\"}],\"name\":\"getFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"priceFeed\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"calldataSize\",\"type\":\"uint256\"},{\"internalType\":\"uint16\",\"name\":\"defaultMultiplierBps\",\"type\":\"uint16\"}],\"internalType\":\"struct IExecutorFeeLib.FeeParams\",\"name\":\"_params\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"lzReceiveBaseGas\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"multiplierBps\",\"type\":\"uint16\"},{\"internalType\":\"uint128\",\"name\":\"floorMarginUSD\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"nativeCap\",\"type\":\"uint128\"},{\"internalType\":\"uint64\",\"name\":\"lzComposeBaseGas\",\"type\":\"uint64\"}],\"internalType\":\"struct IExecutor.DstConfig\",\"name\":\"_dstConfig\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"_options\",\"type\":\"bytes\"}],\"name\":\"getFeeOnSend\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"priceFeed\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"defaultMultiplierBps\",\"type\":\"uint16\"}],\"internalType\":\"struct IExecutorFeeLib.FeeParamsForRead\",\"name\":\"_params\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"lzReceiveBaseGas\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"multiplierBps\",\"type\":\"uint16\"},{\"internalType\":\"uint128\",\"name\":\"floorMarginUSD\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"nativeCap\",\"type\":\"uint128\"},{\"internalType\":\"uint64\",\"name\":\"lzComposeBaseGas\",\"type\":\"uint64\"}],\"internalType\":\"struct IExecutor.DstConfig\",\"name\":\"_dstConfig\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"_options\",\"type\":\"bytes\"}],\"name\":\"getFeeOnSend\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"major\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"minor\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IExecutorFeeLib.sol\":\"IExecutorFeeLib\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IExecutor.sol\":{\"keccak256\":\"0x2fd26e454b060ede7afa15f8bbc67bd43f9181b6405ca411d36c8b538be016af\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cf2142e83214bb392f69ed14266718cfd803f849a7239ee9a1950ddf66553696\",\"dweb:/ipfs/QmSZ2mPMZqWBetMU8VESKtxy7UdSThUVmJmTFMHEyKLTGZ\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IExecutorFeeLib.sol\":{\"keccak256\":\"0x801d12eca6d6b232fb91d949cdb70a4c547c5e27e73555f2f1eb9e757c639bcc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b61bdffe26ff3902edab3efb0b5af3808ec9e28d72db95b77128502b9bc7638d\",\"dweb:/ipfs/Qmcyf3npDDEq28b9XqmXgSGyQegj2cxUZQ3UekSNf34g8M\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroExecutor.sol\":{\"keccak256\":\"0x3647af317ee126b1247a782abb30e59ec5ab21b4945f1d3b4370d1fa3c1bf347\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5b51cd5e7347ee869a06bd57a698f40e4a901ec7fdcb27f0ef485e4a0e1e9be4\",\"dweb:/ipfs/QmP2Nc73veRzLGdUahkjhQAiKR9ZWYiUtSGwoMB1sPXxUp\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroReadExecutor.sol\":{\"keccak256\":\"0x360936885f173f816ffb47e555d480928e74eb1ad54a76af0f4595ecba2d5657\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://16b5095e6439b1e416eb70571a1dd8f4f21a0d77b19c9e510ca289d99e5e09ab\",\"dweb:/ipfs/QmZ2mjQDQ35gJseyzmQhik4cBgN2ESADzofFNVFvgS64hv\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IWorker.sol\":{\"keccak256\":\"0xa6b61913767305227576cc6da5067de4208f09a4f58bfbfe32beafdfae9869b1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7fce83bfb831f383606aee7f5ff68a330c8526bb1036f9ba0813d3e4fa8d534\",\"dweb:/ipfs/QmR7zAqJkmCgBj6sguS8t2WthY5k6FwsakgH4UY11uqD4n\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\":{\"keccak256\":\"0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bacc29fd3866af71e59cb0bdc1cf82c882a4a7f4e2652fd413c9f12649762083\",\"dweb:/ipfs/QmZh2toLnrQDWaNYhS5K4NoW7Vxd2GdZx9KA77vKEDLAqs\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol\":{\"keccak256\":\"0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d8ff6a8a89297fa127f86b54e0db3eba1d6a6eeb4f6398d3c84d569665ac8f1b\",\"dweb:/ipfs/QmVSwhw6xFDrLRAX4RXaCM47yBaBtac4wf36DYEq6KCTvT\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol\":{\"keccak256\":\"0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7e1b245d58221d16d8b5e0f01ef3e289a24a7df1ace3b94239e4d5b954ad5927\",\"dweb:/ipfs/Qmappsgp7PCY9rSSNE9Cdn4BTRX591WfCSEgq2HxhA3z6S\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol\":{\"keccak256\":\"0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b18b23a1643fc6636c4ad9d9023e2e6ca2d3c2a4a046482d4655bff09950598d\",\"dweb:/ipfs/Qma6G5SqiovwrMPfgqTrRngK1HWW373Wkf9c6YP2NhXpPk\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol\":{\"keccak256\":\"0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5173fc9143bea314b159ca5a9adb5626659ef763bc598e27de5fa46efe3291a6\",\"dweb:/ipfs/QmSLFeMFPmVeGxT4sxRPW28ictjAS22M8rLeYRu9TXkA6D\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { - "inputs": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" } - ], - "type": "error", - "name": "Executor_EidNotSupported" - }, - { - "inputs": [ - { "internalType": "uint256", "name": "cursor", "type": "uint256" } - ], - "type": "error", - "name": "Executor_InvalidExecutorOptions" - }, - { - "inputs": [ - { "internalType": "uint256", "name": "amount", "type": "uint256" }, - { "internalType": "uint256", "name": "cap", "type": "uint256" } - ], - "type": "error", - "name": "Executor_NativeAmountExceedsCap" - }, - { "inputs": [], "type": "error", "name": "Executor_NoOptions" }, - { - "inputs": [ - { "internalType": "uint8", "name": "optionType", "type": "uint8" } - ], - "type": "error", - "name": "Executor_UnsupportedOptionType" - }, - { - "inputs": [], - "type": "error", - "name": "Executor_ZeroCalldataSizeProvided" - }, - { - "inputs": [], - "type": "error", - "name": "Executor_ZeroLzComposeGasProvided" - }, - { - "inputs": [], - "type": "error", - "name": "Executor_ZeroLzReceiveGasProvided" - }, - { - "inputs": [ - { - "internalType": "struct IExecutorFeeLib.FeeParamsForRead", - "name": "_params", - "type": "tuple", - "components": [ - { - "internalType": "address", - "name": "priceFeed", - "type": "address" - }, - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint16", - "name": "defaultMultiplierBps", - "type": "uint16" - } - ] - }, - { - "internalType": "struct IExecutor.DstConfig", - "name": "_dstConfig", - "type": "tuple", - "components": [ - { - "internalType": "uint64", - "name": "lzReceiveBaseGas", - "type": "uint64" - }, - { - "internalType": "uint16", - "name": "multiplierBps", - "type": "uint16" - }, - { - "internalType": "uint128", - "name": "floorMarginUSD", - "type": "uint128" - }, - { - "internalType": "uint128", - "name": "nativeCap", - "type": "uint128" - }, - { - "internalType": "uint64", - "name": "lzComposeBaseGas", - "type": "uint64" - } - ] - }, - { "internalType": "bytes", "name": "_options", "type": "bytes" } - ], - "stateMutability": "view", - "type": "function", - "name": "getFee", - "outputs": [ - { "internalType": "uint256", "name": "fee", "type": "uint256" } - ] - }, - { - "inputs": [ - { - "internalType": "struct IExecutorFeeLib.FeeParams", - "name": "_params", - "type": "tuple", - "components": [ - { - "internalType": "address", - "name": "priceFeed", - "type": "address" - }, - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "calldataSize", - "type": "uint256" - }, - { - "internalType": "uint16", - "name": "defaultMultiplierBps", - "type": "uint16" - } - ] - }, - { - "internalType": "struct IExecutor.DstConfig", - "name": "_dstConfig", - "type": "tuple", - "components": [ - { - "internalType": "uint64", - "name": "lzReceiveBaseGas", - "type": "uint64" - }, - { - "internalType": "uint16", - "name": "multiplierBps", - "type": "uint16" - }, - { - "internalType": "uint128", - "name": "floorMarginUSD", - "type": "uint128" - }, - { - "internalType": "uint128", - "name": "nativeCap", - "type": "uint128" - }, - { - "internalType": "uint64", - "name": "lzComposeBaseGas", - "type": "uint64" - } - ] - }, - { "internalType": "bytes", "name": "_options", "type": "bytes" } - ], - "stateMutability": "view", - "type": "function", - "name": "getFee", - "outputs": [ - { "internalType": "uint256", "name": "fee", "type": "uint256" } - ] - }, - { - "inputs": [ - { - "internalType": "struct IExecutorFeeLib.FeeParams", - "name": "_params", - "type": "tuple", - "components": [ - { - "internalType": "address", - "name": "priceFeed", - "type": "address" - }, - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "calldataSize", - "type": "uint256" - }, - { - "internalType": "uint16", - "name": "defaultMultiplierBps", - "type": "uint16" - } - ] - }, - { - "internalType": "struct IExecutor.DstConfig", - "name": "_dstConfig", - "type": "tuple", - "components": [ - { - "internalType": "uint64", - "name": "lzReceiveBaseGas", - "type": "uint64" - }, - { - "internalType": "uint16", - "name": "multiplierBps", - "type": "uint16" - }, - { - "internalType": "uint128", - "name": "floorMarginUSD", - "type": "uint128" - }, - { - "internalType": "uint128", - "name": "nativeCap", - "type": "uint128" - }, - { - "internalType": "uint64", - "name": "lzComposeBaseGas", - "type": "uint64" - } - ] - }, - { "internalType": "bytes", "name": "_options", "type": "bytes" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "getFeeOnSend", - "outputs": [ - { "internalType": "uint256", "name": "fee", "type": "uint256" } - ] - }, - { - "inputs": [ - { - "internalType": "struct IExecutorFeeLib.FeeParamsForRead", - "name": "_params", - "type": "tuple", - "components": [ - { - "internalType": "address", - "name": "priceFeed", - "type": "address" - }, - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint16", - "name": "defaultMultiplierBps", - "type": "uint16" - } - ] - }, - { - "internalType": "struct IExecutor.DstConfig", - "name": "_dstConfig", - "type": "tuple", - "components": [ - { - "internalType": "uint64", - "name": "lzReceiveBaseGas", - "type": "uint64" - }, - { - "internalType": "uint16", - "name": "multiplierBps", - "type": "uint16" - }, - { - "internalType": "uint128", - "name": "floorMarginUSD", - "type": "uint128" - }, - { - "internalType": "uint128", - "name": "nativeCap", - "type": "uint128" - }, - { - "internalType": "uint64", - "name": "lzComposeBaseGas", - "type": "uint64" - } - ] - }, - { "internalType": "bytes", "name": "_options", "type": "bytes" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "getFeeOnSend", - "outputs": [ - { "internalType": "uint256", "name": "fee", "type": "uint256" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "version", - "outputs": [ - { "internalType": "uint64", "name": "major", "type": "uint64" }, - { "internalType": "uint8", "name": "minor", "type": "uint8" } - ] - } - ], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IExecutorFeeLib.sol": "IExecutorFeeLib" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IExecutor.sol": { - "keccak256": "0x2fd26e454b060ede7afa15f8bbc67bd43f9181b6405ca411d36c8b538be016af", - "urls": [ - "bzz-raw://cf2142e83214bb392f69ed14266718cfd803f849a7239ee9a1950ddf66553696", - "dweb:/ipfs/QmSZ2mPMZqWBetMU8VESKtxy7UdSThUVmJmTFMHEyKLTGZ" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IExecutorFeeLib.sol": { - "keccak256": "0x801d12eca6d6b232fb91d949cdb70a4c547c5e27e73555f2f1eb9e757c639bcc", - "urls": [ - "bzz-raw://b61bdffe26ff3902edab3efb0b5af3808ec9e28d72db95b77128502b9bc7638d", - "dweb:/ipfs/Qmcyf3npDDEq28b9XqmXgSGyQegj2cxUZQ3UekSNf34g8M" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroExecutor.sol": { - "keccak256": "0x3647af317ee126b1247a782abb30e59ec5ab21b4945f1d3b4370d1fa3c1bf347", - "urls": [ - "bzz-raw://5b51cd5e7347ee869a06bd57a698f40e4a901ec7fdcb27f0ef485e4a0e1e9be4", - "dweb:/ipfs/QmP2Nc73veRzLGdUahkjhQAiKR9ZWYiUtSGwoMB1sPXxUp" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroReadExecutor.sol": { - "keccak256": "0x360936885f173f816ffb47e555d480928e74eb1ad54a76af0f4595ecba2d5657", - "urls": [ - "bzz-raw://16b5095e6439b1e416eb70571a1dd8f4f21a0d77b19c9e510ca289d99e5e09ab", - "dweb:/ipfs/QmZ2mjQDQ35gJseyzmQhik4cBgN2ESADzofFNVFvgS64hv" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IWorker.sol": { - "keccak256": "0xa6b61913767305227576cc6da5067de4208f09a4f58bfbfe32beafdfae9869b1", - "urls": [ - "bzz-raw://b7fce83bfb831f383606aee7f5ff68a330c8526bb1036f9ba0813d3e4fa8d534", - "dweb:/ipfs/QmR7zAqJkmCgBj6sguS8t2WthY5k6FwsakgH4UY11uqD4n" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol": { - "keccak256": "0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3", - "urls": [ - "bzz-raw://bacc29fd3866af71e59cb0bdc1cf82c882a4a7f4e2652fd413c9f12649762083", - "dweb:/ipfs/QmZh2toLnrQDWaNYhS5K4NoW7Vxd2GdZx9KA77vKEDLAqs" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol": { - "keccak256": "0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc", - "urls": [ - "bzz-raw://d8ff6a8a89297fa127f86b54e0db3eba1d6a6eeb4f6398d3c84d569665ac8f1b", - "dweb:/ipfs/QmVSwhw6xFDrLRAX4RXaCM47yBaBtac4wf36DYEq6KCTvT" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol": { - "keccak256": "0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972", - "urls": [ - "bzz-raw://7e1b245d58221d16d8b5e0f01ef3e289a24a7df1ace3b94239e4d5b954ad5927", - "dweb:/ipfs/Qmappsgp7PCY9rSSNE9Cdn4BTRX591WfCSEgq2HxhA3z6S" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol": { - "keccak256": "0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901", - "urls": [ - "bzz-raw://b18b23a1643fc6636c4ad9d9023e2e6ca2d3c2a4a046482d4655bff09950598d", - "dweb:/ipfs/Qma6G5SqiovwrMPfgqTrRngK1HWW373Wkf9c6YP2NhXpPk" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol": { - "keccak256": "0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e", - "urls": [ - "bzz-raw://5173fc9143bea314b159ca5a9adb5626659ef763bc598e27de5fa46efe3291a6", - "dweb:/ipfs/QmSLFeMFPmVeGxT4sxRPW28ictjAS22M8rLeYRu9TXkA6D" - ], - "license": "MIT" - } - }, - "version": 1 - }, - "id": 5 -} diff --git a/examples/oft-movement/out/ILayerZeroComposer.sol/ILayerZeroComposer.json b/examples/oft-movement/out/ILayerZeroComposer.sol/ILayerZeroComposer.json deleted file mode 100644 index 52415cba1..000000000 --- a/examples/oft-movement/out/ILayerZeroComposer.sol/ILayerZeroComposer.json +++ /dev/null @@ -1,102 +0,0 @@ -{ - "abi": [ - { - "type": "function", - "name": "lzCompose", - "inputs": [ - { "name": "_from", "type": "address", "internalType": "address" }, - { "name": "_guid", "type": "bytes32", "internalType": "bytes32" }, - { "name": "_message", "type": "bytes", "internalType": "bytes" }, - { "name": "_executor", "type": "address", "internalType": "address" }, - { "name": "_extraData", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [], - "stateMutability": "payable" - } - ], - "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "methodIdentifiers": { - "lzCompose(address,bytes32,bytes,address,bytes)": "d0a10260" - }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_guid\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"_executor\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"lzCompose\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"lzCompose(address,bytes32,bytes,address,bytes)\":{\"details\":\"To ensure non-reentrancy, implementers of this interface MUST assert msg.sender is the corresponding EndpointV2 contract (i.e., onlyEndpointV2).\",\"params\":{\"_executor\":\"The address of the executor for the composed message.\",\"_extraData\":\"Additional arbitrary data in bytes passed by the entity who executes the lzCompose.\",\"_from\":\"The address initiating the composition, typically the OApp where the lzReceive was called.\",\"_guid\":\"The unique identifier for the corresponding LayerZero src/dst tx.\",\"_message\":\"The composed message payload in bytes. NOT necessarily the same payload passed via lzReceive.\"}}},\"title\":\"ILayerZeroComposer\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"lzCompose(address,bytes32,bytes,address,bytes)\":{\"notice\":\"Composes a LayerZero message from an OApp.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroComposer.sol\":\"ILayerZeroComposer\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroComposer.sol\":{\"keccak256\":\"0xfaca7205d4211ee9208a7e59171e2301731f3d2a20c49b4a839821871f5fdd49\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f254bc60ac26687b5320a43a556e30777b0745abf7cd64d5f4720d9b1d1f7fdf\",\"dweb:/ipfs/QmRSJEZVgxaC3L2DdE6s8P5qkYfM3V5JMeseeFJJqGR4xz\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { - "inputs": [ - { "internalType": "address", "name": "_from", "type": "address" }, - { "internalType": "bytes32", "name": "_guid", "type": "bytes32" }, - { "internalType": "bytes", "name": "_message", "type": "bytes" }, - { - "internalType": "address", - "name": "_executor", - "type": "address" - }, - { "internalType": "bytes", "name": "_extraData", "type": "bytes" } - ], - "stateMutability": "payable", - "type": "function", - "name": "lzCompose" - } - ], - "devdoc": { - "kind": "dev", - "methods": { - "lzCompose(address,bytes32,bytes,address,bytes)": { - "details": "To ensure non-reentrancy, implementers of this interface MUST assert msg.sender is the corresponding EndpointV2 contract (i.e., onlyEndpointV2).", - "params": { - "_executor": "The address of the executor for the composed message.", - "_extraData": "Additional arbitrary data in bytes passed by the entity who executes the lzCompose.", - "_from": "The address initiating the composition, typically the OApp where the lzReceive was called.", - "_guid": "The unique identifier for the corresponding LayerZero src/dst tx.", - "_message": "The composed message payload in bytes. NOT necessarily the same payload passed via lzReceive." - } - } - }, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": { - "lzCompose(address,bytes32,bytes,address,bytes)": { - "notice": "Composes a LayerZero message from an OApp." - } - }, - "version": 1 - } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroComposer.sol": "ILayerZeroComposer" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroComposer.sol": { - "keccak256": "0xfaca7205d4211ee9208a7e59171e2301731f3d2a20c49b4a839821871f5fdd49", - "urls": [ - "bzz-raw://f254bc60ac26687b5320a43a556e30777b0745abf7cd64d5f4720d9b1d1f7fdf", - "dweb:/ipfs/QmRSJEZVgxaC3L2DdE6s8P5qkYfM3V5JMeseeFJJqGR4xz" - ], - "license": "MIT" - } - }, - "version": 1 - }, - "id": 31 -} diff --git a/examples/oft-movement/out/ILayerZeroDVN.sol/ILayerZeroDVN.json b/examples/oft-movement/out/ILayerZeroDVN.sol/ILayerZeroDVN.json deleted file mode 100644 index 545c32705..000000000 --- a/examples/oft-movement/out/ILayerZeroDVN.sol/ILayerZeroDVN.json +++ /dev/null @@ -1,165 +0,0 @@ -{ - "abi": [ - { - "type": "function", - "name": "assignJob", - "inputs": [ - { - "name": "_param", - "type": "tuple", - "internalType": "struct ILayerZeroDVN.AssignJobParam", - "components": [ - { "name": "dstEid", "type": "uint32", "internalType": "uint32" }, - { - "name": "packetHeader", - "type": "bytes", - "internalType": "bytes" - }, - { - "name": "payloadHash", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "confirmations", - "type": "uint64", - "internalType": "uint64" - }, - { "name": "sender", "type": "address", "internalType": "address" } - ] - }, - { "name": "_options", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [ - { "name": "fee", "type": "uint256", "internalType": "uint256" } - ], - "stateMutability": "payable" - }, - { - "type": "function", - "name": "getFee", - "inputs": [ - { "name": "_dstEid", "type": "uint32", "internalType": "uint32" }, - { - "name": "_confirmations", - "type": "uint64", - "internalType": "uint64" - }, - { "name": "_sender", "type": "address", "internalType": "address" }, - { "name": "_options", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [ - { "name": "fee", "type": "uint256", "internalType": "uint256" } - ], - "stateMutability": "view" - } - ], - "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "methodIdentifiers": { - "assignJob((uint32,bytes,bytes32,uint64,address),bytes)": "95d376d7", - "getFee(uint32,uint64,address,bytes)": "30bb3aac" - }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"packetHeader\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"payloadHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"confirmations\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"internalType\":\"struct ILayerZeroDVN.AssignJobParam\",\"name\":\"_param\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"_options\",\"type\":\"bytes\"}],\"name\":\"assignJob\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_dstEid\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"_confirmations\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_options\",\"type\":\"bytes\"}],\"name\":\"getFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/ILayerZeroDVN.sol\":\"ILayerZeroDVN\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/ILayerZeroDVN.sol\":{\"keccak256\":\"0x308e77078242fd5c5746ec29c12e618249134f9e4377c0028ab8f59c07a6014b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2f92cf397a8d26864ac92dfcd1b98e92a32c47f556a62c5e6dc1618734c1caa3\",\"dweb:/ipfs/QmXN3XJXEKq5djV6HeM6jrLycmJPFhMhecsYZ2TaRsQmhg\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { - "inputs": [ - { - "internalType": "struct ILayerZeroDVN.AssignJobParam", - "name": "_param", - "type": "tuple", - "components": [ - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { - "internalType": "bytes", - "name": "packetHeader", - "type": "bytes" - }, - { - "internalType": "bytes32", - "name": "payloadHash", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "confirmations", - "type": "uint64" - }, - { - "internalType": "address", - "name": "sender", - "type": "address" - } - ] - }, - { "internalType": "bytes", "name": "_options", "type": "bytes" } - ], - "stateMutability": "payable", - "type": "function", - "name": "assignJob", - "outputs": [ - { "internalType": "uint256", "name": "fee", "type": "uint256" } - ] - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_dstEid", "type": "uint32" }, - { - "internalType": "uint64", - "name": "_confirmations", - "type": "uint64" - }, - { "internalType": "address", "name": "_sender", "type": "address" }, - { "internalType": "bytes", "name": "_options", "type": "bytes" } - ], - "stateMutability": "view", - "type": "function", - "name": "getFee", - "outputs": [ - { "internalType": "uint256", "name": "fee", "type": "uint256" } - ] - } - ], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/ILayerZeroDVN.sol": "ILayerZeroDVN" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/ILayerZeroDVN.sol": { - "keccak256": "0x308e77078242fd5c5746ec29c12e618249134f9e4377c0028ab8f59c07a6014b", - "urls": [ - "bzz-raw://2f92cf397a8d26864ac92dfcd1b98e92a32c47f556a62c5e6dc1618734c1caa3", - "dweb:/ipfs/QmXN3XJXEKq5djV6HeM6jrLycmJPFhMhecsYZ2TaRsQmhg" - ], - "license": "MIT" - } - }, - "version": 1 - }, - "id": 18 -} diff --git a/examples/oft-movement/out/ILayerZeroEndpointV2.sol/ILayerZeroEndpointV2.json b/examples/oft-movement/out/ILayerZeroEndpointV2.sol/ILayerZeroEndpointV2.json deleted file mode 100644 index 8552682b0..000000000 --- a/examples/oft-movement/out/ILayerZeroEndpointV2.sol/ILayerZeroEndpointV2.json +++ /dev/null @@ -1,2688 +0,0 @@ -{ - "abi": [ - { - "type": "function", - "name": "burn", - "inputs": [ - { "name": "_oapp", "type": "address", "internalType": "address" }, - { "name": "_srcEid", "type": "uint32", "internalType": "uint32" }, - { "name": "_sender", "type": "bytes32", "internalType": "bytes32" }, - { "name": "_nonce", "type": "uint64", "internalType": "uint64" }, - { "name": "_payloadHash", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "clear", - "inputs": [ - { "name": "_oapp", "type": "address", "internalType": "address" }, - { - "name": "_origin", - "type": "tuple", - "internalType": "struct Origin", - "components": [ - { "name": "srcEid", "type": "uint32", "internalType": "uint32" }, - { "name": "sender", "type": "bytes32", "internalType": "bytes32" }, - { "name": "nonce", "type": "uint64", "internalType": "uint64" } - ] - }, - { "name": "_guid", "type": "bytes32", "internalType": "bytes32" }, - { "name": "_message", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "composeQueue", - "inputs": [ - { "name": "_from", "type": "address", "internalType": "address" }, - { "name": "_to", "type": "address", "internalType": "address" }, - { "name": "_guid", "type": "bytes32", "internalType": "bytes32" }, - { "name": "_index", "type": "uint16", "internalType": "uint16" } - ], - "outputs": [ - { "name": "messageHash", "type": "bytes32", "internalType": "bytes32" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "defaultReceiveLibrary", - "inputs": [ - { "name": "_eid", "type": "uint32", "internalType": "uint32" } - ], - "outputs": [{ "name": "", "type": "address", "internalType": "address" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "defaultReceiveLibraryTimeout", - "inputs": [ - { "name": "_eid", "type": "uint32", "internalType": "uint32" } - ], - "outputs": [ - { "name": "lib", "type": "address", "internalType": "address" }, - { "name": "expiry", "type": "uint256", "internalType": "uint256" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "defaultSendLibrary", - "inputs": [ - { "name": "_eid", "type": "uint32", "internalType": "uint32" } - ], - "outputs": [{ "name": "", "type": "address", "internalType": "address" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "eid", - "inputs": [], - "outputs": [{ "name": "", "type": "uint32", "internalType": "uint32" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getConfig", - "inputs": [ - { "name": "_oapp", "type": "address", "internalType": "address" }, - { "name": "_lib", "type": "address", "internalType": "address" }, - { "name": "_eid", "type": "uint32", "internalType": "uint32" }, - { "name": "_configType", "type": "uint32", "internalType": "uint32" } - ], - "outputs": [ - { "name": "config", "type": "bytes", "internalType": "bytes" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getReceiveLibrary", - "inputs": [ - { "name": "_receiver", "type": "address", "internalType": "address" }, - { "name": "_eid", "type": "uint32", "internalType": "uint32" } - ], - "outputs": [ - { "name": "lib", "type": "address", "internalType": "address" }, - { "name": "isDefault", "type": "bool", "internalType": "bool" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getRegisteredLibraries", - "inputs": [], - "outputs": [ - { "name": "", "type": "address[]", "internalType": "address[]" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getSendContext", - "inputs": [], - "outputs": [ - { "name": "dstEid", "type": "uint32", "internalType": "uint32" }, - { "name": "sender", "type": "address", "internalType": "address" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getSendLibrary", - "inputs": [ - { "name": "_sender", "type": "address", "internalType": "address" }, - { "name": "_eid", "type": "uint32", "internalType": "uint32" } - ], - "outputs": [ - { "name": "lib", "type": "address", "internalType": "address" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "inboundNonce", - "inputs": [ - { "name": "_receiver", "type": "address", "internalType": "address" }, - { "name": "_srcEid", "type": "uint32", "internalType": "uint32" }, - { "name": "_sender", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [{ "name": "", "type": "uint64", "internalType": "uint64" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "inboundPayloadHash", - "inputs": [ - { "name": "_receiver", "type": "address", "internalType": "address" }, - { "name": "_srcEid", "type": "uint32", "internalType": "uint32" }, - { "name": "_sender", "type": "bytes32", "internalType": "bytes32" }, - { "name": "_nonce", "type": "uint64", "internalType": "uint64" } - ], - "outputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "initializable", - "inputs": [ - { - "name": "_origin", - "type": "tuple", - "internalType": "struct Origin", - "components": [ - { "name": "srcEid", "type": "uint32", "internalType": "uint32" }, - { "name": "sender", "type": "bytes32", "internalType": "bytes32" }, - { "name": "nonce", "type": "uint64", "internalType": "uint64" } - ] - }, - { "name": "_receiver", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "isDefaultSendLibrary", - "inputs": [ - { "name": "_sender", "type": "address", "internalType": "address" }, - { "name": "_eid", "type": "uint32", "internalType": "uint32" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "isRegisteredLibrary", - "inputs": [ - { "name": "_lib", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "isSendingMessage", - "inputs": [], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "isSupportedEid", - "inputs": [ - { "name": "_eid", "type": "uint32", "internalType": "uint32" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "isValidReceiveLibrary", - "inputs": [ - { "name": "_receiver", "type": "address", "internalType": "address" }, - { "name": "_eid", "type": "uint32", "internalType": "uint32" }, - { "name": "_lib", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "lazyInboundNonce", - "inputs": [ - { "name": "_receiver", "type": "address", "internalType": "address" }, - { "name": "_srcEid", "type": "uint32", "internalType": "uint32" }, - { "name": "_sender", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [{ "name": "", "type": "uint64", "internalType": "uint64" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "lzCompose", - "inputs": [ - { "name": "_from", "type": "address", "internalType": "address" }, - { "name": "_to", "type": "address", "internalType": "address" }, - { "name": "_guid", "type": "bytes32", "internalType": "bytes32" }, - { "name": "_index", "type": "uint16", "internalType": "uint16" }, - { "name": "_message", "type": "bytes", "internalType": "bytes" }, - { "name": "_extraData", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [], - "stateMutability": "payable" - }, - { - "type": "function", - "name": "lzReceive", - "inputs": [ - { - "name": "_origin", - "type": "tuple", - "internalType": "struct Origin", - "components": [ - { "name": "srcEid", "type": "uint32", "internalType": "uint32" }, - { "name": "sender", "type": "bytes32", "internalType": "bytes32" }, - { "name": "nonce", "type": "uint64", "internalType": "uint64" } - ] - }, - { "name": "_receiver", "type": "address", "internalType": "address" }, - { "name": "_guid", "type": "bytes32", "internalType": "bytes32" }, - { "name": "_message", "type": "bytes", "internalType": "bytes" }, - { "name": "_extraData", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [], - "stateMutability": "payable" - }, - { - "type": "function", - "name": "lzToken", - "inputs": [], - "outputs": [{ "name": "", "type": "address", "internalType": "address" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "nativeToken", - "inputs": [], - "outputs": [{ "name": "", "type": "address", "internalType": "address" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "nextGuid", - "inputs": [ - { "name": "_sender", "type": "address", "internalType": "address" }, - { "name": "_dstEid", "type": "uint32", "internalType": "uint32" }, - { "name": "_receiver", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "nilify", - "inputs": [ - { "name": "_oapp", "type": "address", "internalType": "address" }, - { "name": "_srcEid", "type": "uint32", "internalType": "uint32" }, - { "name": "_sender", "type": "bytes32", "internalType": "bytes32" }, - { "name": "_nonce", "type": "uint64", "internalType": "uint64" }, - { "name": "_payloadHash", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "outboundNonce", - "inputs": [ - { "name": "_sender", "type": "address", "internalType": "address" }, - { "name": "_dstEid", "type": "uint32", "internalType": "uint32" }, - { "name": "_receiver", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [{ "name": "", "type": "uint64", "internalType": "uint64" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "quote", - "inputs": [ - { - "name": "_params", - "type": "tuple", - "internalType": "struct MessagingParams", - "components": [ - { "name": "dstEid", "type": "uint32", "internalType": "uint32" }, - { - "name": "receiver", - "type": "bytes32", - "internalType": "bytes32" - }, - { "name": "message", "type": "bytes", "internalType": "bytes" }, - { "name": "options", "type": "bytes", "internalType": "bytes" }, - { "name": "payInLzToken", "type": "bool", "internalType": "bool" } - ] - }, - { "name": "_sender", "type": "address", "internalType": "address" } - ], - "outputs": [ - { - "name": "", - "type": "tuple", - "internalType": "struct MessagingFee", - "components": [ - { - "name": "nativeFee", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "lzTokenFee", - "type": "uint256", - "internalType": "uint256" - } - ] - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "receiveLibraryTimeout", - "inputs": [ - { "name": "_receiver", "type": "address", "internalType": "address" }, - { "name": "_eid", "type": "uint32", "internalType": "uint32" } - ], - "outputs": [ - { "name": "lib", "type": "address", "internalType": "address" }, - { "name": "expiry", "type": "uint256", "internalType": "uint256" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "registerLibrary", - "inputs": [ - { "name": "_lib", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "send", - "inputs": [ - { - "name": "_params", - "type": "tuple", - "internalType": "struct MessagingParams", - "components": [ - { "name": "dstEid", "type": "uint32", "internalType": "uint32" }, - { - "name": "receiver", - "type": "bytes32", - "internalType": "bytes32" - }, - { "name": "message", "type": "bytes", "internalType": "bytes" }, - { "name": "options", "type": "bytes", "internalType": "bytes" }, - { "name": "payInLzToken", "type": "bool", "internalType": "bool" } - ] - }, - { - "name": "_refundAddress", - "type": "address", - "internalType": "address" - } - ], - "outputs": [ - { - "name": "", - "type": "tuple", - "internalType": "struct MessagingReceipt", - "components": [ - { "name": "guid", "type": "bytes32", "internalType": "bytes32" }, - { "name": "nonce", "type": "uint64", "internalType": "uint64" }, - { - "name": "fee", - "type": "tuple", - "internalType": "struct MessagingFee", - "components": [ - { - "name": "nativeFee", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "lzTokenFee", - "type": "uint256", - "internalType": "uint256" - } - ] - } - ] - } - ], - "stateMutability": "payable" - }, - { - "type": "function", - "name": "sendCompose", - "inputs": [ - { "name": "_to", "type": "address", "internalType": "address" }, - { "name": "_guid", "type": "bytes32", "internalType": "bytes32" }, - { "name": "_index", "type": "uint16", "internalType": "uint16" }, - { "name": "_message", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setConfig", - "inputs": [ - { "name": "_oapp", "type": "address", "internalType": "address" }, - { "name": "_lib", "type": "address", "internalType": "address" }, - { - "name": "_params", - "type": "tuple[]", - "internalType": "struct SetConfigParam[]", - "components": [ - { "name": "eid", "type": "uint32", "internalType": "uint32" }, - { - "name": "configType", - "type": "uint32", - "internalType": "uint32" - }, - { "name": "config", "type": "bytes", "internalType": "bytes" } - ] - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setDefaultReceiveLibrary", - "inputs": [ - { "name": "_eid", "type": "uint32", "internalType": "uint32" }, - { "name": "_newLib", "type": "address", "internalType": "address" }, - { "name": "_gracePeriod", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setDefaultReceiveLibraryTimeout", - "inputs": [ - { "name": "_eid", "type": "uint32", "internalType": "uint32" }, - { "name": "_lib", "type": "address", "internalType": "address" }, - { "name": "_expiry", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setDefaultSendLibrary", - "inputs": [ - { "name": "_eid", "type": "uint32", "internalType": "uint32" }, - { "name": "_newLib", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setDelegate", - "inputs": [ - { "name": "_delegate", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setLzToken", - "inputs": [ - { "name": "_lzToken", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setReceiveLibrary", - "inputs": [ - { "name": "_oapp", "type": "address", "internalType": "address" }, - { "name": "_eid", "type": "uint32", "internalType": "uint32" }, - { "name": "_newLib", "type": "address", "internalType": "address" }, - { "name": "_gracePeriod", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setReceiveLibraryTimeout", - "inputs": [ - { "name": "_oapp", "type": "address", "internalType": "address" }, - { "name": "_eid", "type": "uint32", "internalType": "uint32" }, - { "name": "_lib", "type": "address", "internalType": "address" }, - { "name": "_expiry", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setSendLibrary", - "inputs": [ - { "name": "_oapp", "type": "address", "internalType": "address" }, - { "name": "_eid", "type": "uint32", "internalType": "uint32" }, - { "name": "_newLib", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "skip", - "inputs": [ - { "name": "_oapp", "type": "address", "internalType": "address" }, - { "name": "_srcEid", "type": "uint32", "internalType": "uint32" }, - { "name": "_sender", "type": "bytes32", "internalType": "bytes32" }, - { "name": "_nonce", "type": "uint64", "internalType": "uint64" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "verifiable", - "inputs": [ - { - "name": "_origin", - "type": "tuple", - "internalType": "struct Origin", - "components": [ - { "name": "srcEid", "type": "uint32", "internalType": "uint32" }, - { "name": "sender", "type": "bytes32", "internalType": "bytes32" }, - { "name": "nonce", "type": "uint64", "internalType": "uint64" } - ] - }, - { "name": "_receiver", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "verify", - "inputs": [ - { - "name": "_origin", - "type": "tuple", - "internalType": "struct Origin", - "components": [ - { "name": "srcEid", "type": "uint32", "internalType": "uint32" }, - { "name": "sender", "type": "bytes32", "internalType": "bytes32" }, - { "name": "nonce", "type": "uint64", "internalType": "uint64" } - ] - }, - { "name": "_receiver", "type": "address", "internalType": "address" }, - { "name": "_payloadHash", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "event", - "name": "ComposeDelivered", - "inputs": [ - { - "name": "from", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "to", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "guid", - "type": "bytes32", - "indexed": false, - "internalType": "bytes32" - }, - { - "name": "index", - "type": "uint16", - "indexed": false, - "internalType": "uint16" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "ComposeSent", - "inputs": [ - { - "name": "from", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "to", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "guid", - "type": "bytes32", - "indexed": false, - "internalType": "bytes32" - }, - { - "name": "index", - "type": "uint16", - "indexed": false, - "internalType": "uint16" - }, - { - "name": "message", - "type": "bytes", - "indexed": false, - "internalType": "bytes" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "DefaultReceiveLibrarySet", - "inputs": [ - { - "name": "eid", - "type": "uint32", - "indexed": false, - "internalType": "uint32" - }, - { - "name": "newLib", - "type": "address", - "indexed": false, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "DefaultReceiveLibraryTimeoutSet", - "inputs": [ - { - "name": "eid", - "type": "uint32", - "indexed": false, - "internalType": "uint32" - }, - { - "name": "oldLib", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "expiry", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "DefaultSendLibrarySet", - "inputs": [ - { - "name": "eid", - "type": "uint32", - "indexed": false, - "internalType": "uint32" - }, - { - "name": "newLib", - "type": "address", - "indexed": false, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "DelegateSet", - "inputs": [ - { - "name": "sender", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "delegate", - "type": "address", - "indexed": false, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "InboundNonceSkipped", - "inputs": [ - { - "name": "srcEid", - "type": "uint32", - "indexed": false, - "internalType": "uint32" - }, - { - "name": "sender", - "type": "bytes32", - "indexed": false, - "internalType": "bytes32" - }, - { - "name": "receiver", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "nonce", - "type": "uint64", - "indexed": false, - "internalType": "uint64" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "LibraryRegistered", - "inputs": [ - { - "name": "newLib", - "type": "address", - "indexed": false, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "LzComposeAlert", - "inputs": [ - { - "name": "from", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "to", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "executor", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "guid", - "type": "bytes32", - "indexed": false, - "internalType": "bytes32" - }, - { - "name": "index", - "type": "uint16", - "indexed": false, - "internalType": "uint16" - }, - { - "name": "gas", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - }, - { - "name": "value", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - }, - { - "name": "message", - "type": "bytes", - "indexed": false, - "internalType": "bytes" - }, - { - "name": "extraData", - "type": "bytes", - "indexed": false, - "internalType": "bytes" - }, - { - "name": "reason", - "type": "bytes", - "indexed": false, - "internalType": "bytes" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "LzReceiveAlert", - "inputs": [ - { - "name": "receiver", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "executor", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "origin", - "type": "tuple", - "indexed": false, - "internalType": "struct Origin", - "components": [ - { "name": "srcEid", "type": "uint32", "internalType": "uint32" }, - { "name": "sender", "type": "bytes32", "internalType": "bytes32" }, - { "name": "nonce", "type": "uint64", "internalType": "uint64" } - ] - }, - { - "name": "guid", - "type": "bytes32", - "indexed": false, - "internalType": "bytes32" - }, - { - "name": "gas", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - }, - { - "name": "value", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - }, - { - "name": "message", - "type": "bytes", - "indexed": false, - "internalType": "bytes" - }, - { - "name": "extraData", - "type": "bytes", - "indexed": false, - "internalType": "bytes" - }, - { - "name": "reason", - "type": "bytes", - "indexed": false, - "internalType": "bytes" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "LzTokenSet", - "inputs": [ - { - "name": "token", - "type": "address", - "indexed": false, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "PacketBurnt", - "inputs": [ - { - "name": "srcEid", - "type": "uint32", - "indexed": false, - "internalType": "uint32" - }, - { - "name": "sender", - "type": "bytes32", - "indexed": false, - "internalType": "bytes32" - }, - { - "name": "receiver", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "nonce", - "type": "uint64", - "indexed": false, - "internalType": "uint64" - }, - { - "name": "payloadHash", - "type": "bytes32", - "indexed": false, - "internalType": "bytes32" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "PacketDelivered", - "inputs": [ - { - "name": "origin", - "type": "tuple", - "indexed": false, - "internalType": "struct Origin", - "components": [ - { "name": "srcEid", "type": "uint32", "internalType": "uint32" }, - { "name": "sender", "type": "bytes32", "internalType": "bytes32" }, - { "name": "nonce", "type": "uint64", "internalType": "uint64" } - ] - }, - { - "name": "receiver", - "type": "address", - "indexed": false, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "PacketNilified", - "inputs": [ - { - "name": "srcEid", - "type": "uint32", - "indexed": false, - "internalType": "uint32" - }, - { - "name": "sender", - "type": "bytes32", - "indexed": false, - "internalType": "bytes32" - }, - { - "name": "receiver", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "nonce", - "type": "uint64", - "indexed": false, - "internalType": "uint64" - }, - { - "name": "payloadHash", - "type": "bytes32", - "indexed": false, - "internalType": "bytes32" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "PacketSent", - "inputs": [ - { - "name": "encodedPayload", - "type": "bytes", - "indexed": false, - "internalType": "bytes" - }, - { - "name": "options", - "type": "bytes", - "indexed": false, - "internalType": "bytes" - }, - { - "name": "sendLibrary", - "type": "address", - "indexed": false, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "PacketVerified", - "inputs": [ - { - "name": "origin", - "type": "tuple", - "indexed": false, - "internalType": "struct Origin", - "components": [ - { "name": "srcEid", "type": "uint32", "internalType": "uint32" }, - { "name": "sender", "type": "bytes32", "internalType": "bytes32" }, - { "name": "nonce", "type": "uint64", "internalType": "uint64" } - ] - }, - { - "name": "receiver", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "payloadHash", - "type": "bytes32", - "indexed": false, - "internalType": "bytes32" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "ReceiveLibrarySet", - "inputs": [ - { - "name": "receiver", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "eid", - "type": "uint32", - "indexed": false, - "internalType": "uint32" - }, - { - "name": "newLib", - "type": "address", - "indexed": false, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "ReceiveLibraryTimeoutSet", - "inputs": [ - { - "name": "receiver", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "eid", - "type": "uint32", - "indexed": false, - "internalType": "uint32" - }, - { - "name": "oldLib", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "timeout", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "SendLibrarySet", - "inputs": [ - { - "name": "sender", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "eid", - "type": "uint32", - "indexed": false, - "internalType": "uint32" - }, - { - "name": "newLib", - "type": "address", - "indexed": false, - "internalType": "address" - } - ], - "anonymous": false - } - ], - "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "methodIdentifiers": { - "burn(address,uint32,bytes32,uint64,bytes32)": "40f80683", - "clear(address,(uint32,bytes32,uint64),bytes32,bytes)": "2a56c1b0", - "composeQueue(address,address,bytes32,uint16)": "35d330b0", - "defaultReceiveLibrary(uint32)": "6f50a803", - "defaultReceiveLibraryTimeout(uint32)": "6e83f5bb", - "defaultSendLibrary(uint32)": "f64be4c7", - "eid()": "416ecebf", - "getConfig(address,address,uint32,uint32)": "2b3197b9", - "getReceiveLibrary(address,uint32)": "402f8468", - "getRegisteredLibraries()": "9132e5c3", - "getSendContext()": "14f651a9", - "getSendLibrary(address,uint32)": "b96a277f", - "inboundNonce(address,uint32,bytes32)": "a0dd43fc", - "inboundPayloadHash(address,uint32,bytes32,uint64)": "c9fc7bcd", - "initializable((uint32,bytes32,uint64),address)": "861e1ca5", - "isDefaultSendLibrary(address,uint32)": "dc93c8a2", - "isRegisteredLibrary(address)": "dc706a62", - "isSendingMessage()": "79624ca9", - "isSupportedEid(uint32)": "6750cd4c", - "isValidReceiveLibrary(address,uint32,address)": "9d7f9775", - "lazyInboundNonce(address,uint32,bytes32)": "5b17bb70", - "lzCompose(address,address,bytes32,uint16,bytes,bytes)": "91d20fa1", - "lzReceive((uint32,bytes32,uint64),address,bytes32,bytes,bytes)": "0c0c389e", - "lzToken()": "e4fe1d94", - "nativeToken()": "e1758bd8", - "nextGuid(address,uint32,bytes32)": "aafe5e07", - "nilify(address,uint32,bytes32,uint64,bytes32)": "2e80fbf3", - "outboundNonce(address,uint32,bytes32)": "9c6d7340", - "quote((uint32,bytes32,bytes,bytes,bool),address)": "ddc28c58", - "receiveLibraryTimeout(address,uint32)": "ef667aa1", - "registerLibrary(address)": "e8964e81", - "send((uint32,bytes32,bytes,bytes,bool),address)": "2637a450", - "sendCompose(address,bytes32,uint16,bytes)": "7cb59012", - "setConfig(address,address,(uint32,uint32,bytes)[])": "6dbd9f90", - "setDefaultReceiveLibrary(uint32,address,uint256)": "a718531b", - "setDefaultReceiveLibraryTimeout(uint32,address,uint256)": "d4b4ec8f", - "setDefaultSendLibrary(uint32,address)": "aafea312", - "setDelegate(address)": "ca5eb5e1", - "setLzToken(address)": "c28e0eed", - "setReceiveLibrary(address,uint32,address,uint256)": "6a14d715", - "setReceiveLibraryTimeout(address,uint32,address,uint256)": "183c834f", - "setSendLibrary(address,uint32,address)": "9535ff30", - "skip(address,uint32,bytes32,uint64)": "d70b8902", - "verifiable((uint32,bytes32,uint64),address)": "c9a54a99", - "verify((uint32,bytes32,uint64),address,bytes32)": "a825d747" - }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"index\",\"type\":\"uint16\"}],\"name\":\"ComposeDelivered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"index\",\"type\":\"uint16\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"ComposeSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newLib\",\"type\":\"address\"}],\"name\":\"DefaultReceiveLibrarySet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldLib\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"expiry\",\"type\":\"uint256\"}],\"name\":\"DefaultReceiveLibraryTimeoutSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newLib\",\"type\":\"address\"}],\"name\":\"DefaultSendLibrarySet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"delegate\",\"type\":\"address\"}],\"name\":\"DelegateSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"name\":\"InboundNonceSkipped\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newLib\",\"type\":\"address\"}],\"name\":\"LibraryRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"executor\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"index\",\"type\":\"uint16\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gas\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"reason\",\"type\":\"bytes\"}],\"name\":\"LzComposeAlert\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"executor\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"indexed\":false,\"internalType\":\"struct Origin\",\"name\":\"origin\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gas\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"reason\",\"type\":\"bytes\"}],\"name\":\"LzReceiveAlert\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"LzTokenSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"payloadHash\",\"type\":\"bytes32\"}],\"name\":\"PacketBurnt\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"indexed\":false,\"internalType\":\"struct Origin\",\"name\":\"origin\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"PacketDelivered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"payloadHash\",\"type\":\"bytes32\"}],\"name\":\"PacketNilified\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"encodedPayload\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"options\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sendLibrary\",\"type\":\"address\"}],\"name\":\"PacketSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"indexed\":false,\"internalType\":\"struct Origin\",\"name\":\"origin\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"payloadHash\",\"type\":\"bytes32\"}],\"name\":\"PacketVerified\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newLib\",\"type\":\"address\"}],\"name\":\"ReceiveLibrarySet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldLib\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timeout\",\"type\":\"uint256\"}],\"name\":\"ReceiveLibraryTimeoutSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newLib\",\"type\":\"address\"}],\"name\":\"SendLibrarySet\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_oapp\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"_nonce\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"_payloadHash\",\"type\":\"bytes32\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_oapp\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"_origin\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"_guid\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"}],\"name\":\"clear\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_guid\",\"type\":\"bytes32\"},{\"internalType\":\"uint16\",\"name\":\"_index\",\"type\":\"uint16\"}],\"name\":\"composeQueue\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageHash\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"}],\"name\":\"defaultReceiveLibrary\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"}],\"name\":\"defaultReceiveLibraryTimeout\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"lib\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"expiry\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"}],\"name\":\"defaultSendLibrary\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"eid\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_oapp\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_lib\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"_configType\",\"type\":\"uint32\"}],\"name\":\"getConfig\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"config\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"}],\"name\":\"getReceiveLibrary\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"lib\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isDefault\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRegisteredLibraries\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSendContext\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"}],\"name\":\"getSendLibrary\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"lib\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_sender\",\"type\":\"bytes32\"}],\"name\":\"inboundNonce\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"_nonce\",\"type\":\"uint64\"}],\"name\":\"inboundPayloadHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"_origin\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"}],\"name\":\"initializable\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"}],\"name\":\"isDefaultSendLibrary\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_lib\",\"type\":\"address\"}],\"name\":\"isRegisteredLibrary\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isSendingMessage\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"}],\"name\":\"isSupportedEid\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"_lib\",\"type\":\"address\"}],\"name\":\"isValidReceiveLibrary\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_sender\",\"type\":\"bytes32\"}],\"name\":\"lazyInboundNonce\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_guid\",\"type\":\"bytes32\"},{\"internalType\":\"uint16\",\"name\":\"_index\",\"type\":\"uint16\"},{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"lzCompose\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"_origin\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_guid\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"lzReceive\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lzToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nativeToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_receiver\",\"type\":\"bytes32\"}],\"name\":\"nextGuid\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_oapp\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"_nonce\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"_payloadHash\",\"type\":\"bytes32\"}],\"name\":\"nilify\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_receiver\",\"type\":\"bytes32\"}],\"name\":\"outboundNonce\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"receiver\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"options\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"payInLzToken\",\"type\":\"bool\"}],\"internalType\":\"struct MessagingParams\",\"name\":\"_params\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"}],\"name\":\"quote\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nativeFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lzTokenFee\",\"type\":\"uint256\"}],\"internalType\":\"struct MessagingFee\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"}],\"name\":\"receiveLibraryTimeout\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"lib\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"expiry\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_lib\",\"type\":\"address\"}],\"name\":\"registerLibrary\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"receiver\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"options\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"payInLzToken\",\"type\":\"bool\"}],\"internalType\":\"struct MessagingParams\",\"name\":\"_params\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"_refundAddress\",\"type\":\"address\"}],\"name\":\"send\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nativeFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lzTokenFee\",\"type\":\"uint256\"}],\"internalType\":\"struct MessagingFee\",\"name\":\"fee\",\"type\":\"tuple\"}],\"internalType\":\"struct MessagingReceipt\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_guid\",\"type\":\"bytes32\"},{\"internalType\":\"uint16\",\"name\":\"_index\",\"type\":\"uint16\"},{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"}],\"name\":\"sendCompose\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_oapp\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_lib\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"configType\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"config\",\"type\":\"bytes\"}],\"internalType\":\"struct SetConfigParam[]\",\"name\":\"_params\",\"type\":\"tuple[]\"}],\"name\":\"setConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"_newLib\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_gracePeriod\",\"type\":\"uint256\"}],\"name\":\"setDefaultReceiveLibrary\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"_lib\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_expiry\",\"type\":\"uint256\"}],\"name\":\"setDefaultReceiveLibraryTimeout\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"_newLib\",\"type\":\"address\"}],\"name\":\"setDefaultSendLibrary\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_delegate\",\"type\":\"address\"}],\"name\":\"setDelegate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_lzToken\",\"type\":\"address\"}],\"name\":\"setLzToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_oapp\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"_newLib\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_gracePeriod\",\"type\":\"uint256\"}],\"name\":\"setReceiveLibrary\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_oapp\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"_lib\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_expiry\",\"type\":\"uint256\"}],\"name\":\"setReceiveLibraryTimeout\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_oapp\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"_newLib\",\"type\":\"address\"}],\"name\":\"setSendLibrary\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_oapp\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"_nonce\",\"type\":\"uint64\"}],\"name\":\"skip\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"_origin\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"}],\"name\":\"verifiable\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"_origin\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_payloadHash\",\"type\":\"bytes32\"}],\"name\":\"verify\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"setSendLibrary(address,uint32,address)\":{\"notice\":\"------------------- OApp interfaces -------------------\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\":\"ILayerZeroEndpointV2\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\":{\"keccak256\":\"0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bacc29fd3866af71e59cb0bdc1cf82c882a4a7f4e2652fd413c9f12649762083\",\"dweb:/ipfs/QmZh2toLnrQDWaNYhS5K4NoW7Vxd2GdZx9KA77vKEDLAqs\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol\":{\"keccak256\":\"0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d8ff6a8a89297fa127f86b54e0db3eba1d6a6eeb4f6398d3c84d569665ac8f1b\",\"dweb:/ipfs/QmVSwhw6xFDrLRAX4RXaCM47yBaBtac4wf36DYEq6KCTvT\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol\":{\"keccak256\":\"0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7e1b245d58221d16d8b5e0f01ef3e289a24a7df1ace3b94239e4d5b954ad5927\",\"dweb:/ipfs/Qmappsgp7PCY9rSSNE9Cdn4BTRX591WfCSEgq2HxhA3z6S\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol\":{\"keccak256\":\"0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b18b23a1643fc6636c4ad9d9023e2e6ca2d3c2a4a046482d4655bff09950598d\",\"dweb:/ipfs/Qma6G5SqiovwrMPfgqTrRngK1HWW373Wkf9c6YP2NhXpPk\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol\":{\"keccak256\":\"0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5173fc9143bea314b159ca5a9adb5626659ef763bc598e27de5fa46efe3291a6\",\"dweb:/ipfs/QmSLFeMFPmVeGxT4sxRPW28ictjAS22M8rLeYRu9TXkA6D\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address", - "indexed": false - }, - { - "internalType": "address", - "name": "to", - "type": "address", - "indexed": false - }, - { - "internalType": "bytes32", - "name": "guid", - "type": "bytes32", - "indexed": false - }, - { - "internalType": "uint16", - "name": "index", - "type": "uint16", - "indexed": false - } - ], - "type": "event", - "name": "ComposeDelivered", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address", - "indexed": false - }, - { - "internalType": "address", - "name": "to", - "type": "address", - "indexed": false - }, - { - "internalType": "bytes32", - "name": "guid", - "type": "bytes32", - "indexed": false - }, - { - "internalType": "uint16", - "name": "index", - "type": "uint16", - "indexed": false - }, - { - "internalType": "bytes", - "name": "message", - "type": "bytes", - "indexed": false - } - ], - "type": "event", - "name": "ComposeSent", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "eid", - "type": "uint32", - "indexed": false - }, - { - "internalType": "address", - "name": "newLib", - "type": "address", - "indexed": false - } - ], - "type": "event", - "name": "DefaultReceiveLibrarySet", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "eid", - "type": "uint32", - "indexed": false - }, - { - "internalType": "address", - "name": "oldLib", - "type": "address", - "indexed": false - }, - { - "internalType": "uint256", - "name": "expiry", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "DefaultReceiveLibraryTimeoutSet", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "eid", - "type": "uint32", - "indexed": false - }, - { - "internalType": "address", - "name": "newLib", - "type": "address", - "indexed": false - } - ], - "type": "event", - "name": "DefaultSendLibrarySet", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address", - "indexed": false - }, - { - "internalType": "address", - "name": "delegate", - "type": "address", - "indexed": false - } - ], - "type": "event", - "name": "DelegateSet", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32", - "indexed": false - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32", - "indexed": false - }, - { - "internalType": "address", - "name": "receiver", - "type": "address", - "indexed": false - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64", - "indexed": false - } - ], - "type": "event", - "name": "InboundNonceSkipped", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newLib", - "type": "address", - "indexed": false - } - ], - "type": "event", - "name": "LibraryRegistered", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address", - "indexed": true - }, - { - "internalType": "address", - "name": "to", - "type": "address", - "indexed": true - }, - { - "internalType": "address", - "name": "executor", - "type": "address", - "indexed": true - }, - { - "internalType": "bytes32", - "name": "guid", - "type": "bytes32", - "indexed": false - }, - { - "internalType": "uint16", - "name": "index", - "type": "uint16", - "indexed": false - }, - { - "internalType": "uint256", - "name": "gas", - "type": "uint256", - "indexed": false - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256", - "indexed": false - }, - { - "internalType": "bytes", - "name": "message", - "type": "bytes", - "indexed": false - }, - { - "internalType": "bytes", - "name": "extraData", - "type": "bytes", - "indexed": false - }, - { - "internalType": "bytes", - "name": "reason", - "type": "bytes", - "indexed": false - } - ], - "type": "event", - "name": "LzComposeAlert", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "receiver", - "type": "address", - "indexed": true - }, - { - "internalType": "address", - "name": "executor", - "type": "address", - "indexed": true - }, - { - "internalType": "struct Origin", - "name": "origin", - "type": "tuple", - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { "internalType": "uint64", "name": "nonce", "type": "uint64" } - ], - "indexed": false - }, - { - "internalType": "bytes32", - "name": "guid", - "type": "bytes32", - "indexed": false - }, - { - "internalType": "uint256", - "name": "gas", - "type": "uint256", - "indexed": false - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256", - "indexed": false - }, - { - "internalType": "bytes", - "name": "message", - "type": "bytes", - "indexed": false - }, - { - "internalType": "bytes", - "name": "extraData", - "type": "bytes", - "indexed": false - }, - { - "internalType": "bytes", - "name": "reason", - "type": "bytes", - "indexed": false - } - ], - "type": "event", - "name": "LzReceiveAlert", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address", - "indexed": false - } - ], - "type": "event", - "name": "LzTokenSet", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32", - "indexed": false - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32", - "indexed": false - }, - { - "internalType": "address", - "name": "receiver", - "type": "address", - "indexed": false - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64", - "indexed": false - }, - { - "internalType": "bytes32", - "name": "payloadHash", - "type": "bytes32", - "indexed": false - } - ], - "type": "event", - "name": "PacketBurnt", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "struct Origin", - "name": "origin", - "type": "tuple", - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { "internalType": "uint64", "name": "nonce", "type": "uint64" } - ], - "indexed": false - }, - { - "internalType": "address", - "name": "receiver", - "type": "address", - "indexed": false - } - ], - "type": "event", - "name": "PacketDelivered", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32", - "indexed": false - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32", - "indexed": false - }, - { - "internalType": "address", - "name": "receiver", - "type": "address", - "indexed": false - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64", - "indexed": false - }, - { - "internalType": "bytes32", - "name": "payloadHash", - "type": "bytes32", - "indexed": false - } - ], - "type": "event", - "name": "PacketNilified", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "encodedPayload", - "type": "bytes", - "indexed": false - }, - { - "internalType": "bytes", - "name": "options", - "type": "bytes", - "indexed": false - }, - { - "internalType": "address", - "name": "sendLibrary", - "type": "address", - "indexed": false - } - ], - "type": "event", - "name": "PacketSent", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "struct Origin", - "name": "origin", - "type": "tuple", - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { "internalType": "uint64", "name": "nonce", "type": "uint64" } - ], - "indexed": false - }, - { - "internalType": "address", - "name": "receiver", - "type": "address", - "indexed": false - }, - { - "internalType": "bytes32", - "name": "payloadHash", - "type": "bytes32", - "indexed": false - } - ], - "type": "event", - "name": "PacketVerified", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "receiver", - "type": "address", - "indexed": false - }, - { - "internalType": "uint32", - "name": "eid", - "type": "uint32", - "indexed": false - }, - { - "internalType": "address", - "name": "newLib", - "type": "address", - "indexed": false - } - ], - "type": "event", - "name": "ReceiveLibrarySet", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "receiver", - "type": "address", - "indexed": false - }, - { - "internalType": "uint32", - "name": "eid", - "type": "uint32", - "indexed": false - }, - { - "internalType": "address", - "name": "oldLib", - "type": "address", - "indexed": false - }, - { - "internalType": "uint256", - "name": "timeout", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "ReceiveLibraryTimeoutSet", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address", - "indexed": false - }, - { - "internalType": "uint32", - "name": "eid", - "type": "uint32", - "indexed": false - }, - { - "internalType": "address", - "name": "newLib", - "type": "address", - "indexed": false - } - ], - "type": "event", - "name": "SendLibrarySet", - "anonymous": false - }, - { - "inputs": [ - { "internalType": "address", "name": "_oapp", "type": "address" }, - { "internalType": "uint32", "name": "_srcEid", "type": "uint32" }, - { "internalType": "bytes32", "name": "_sender", "type": "bytes32" }, - { "internalType": "uint64", "name": "_nonce", "type": "uint64" }, - { - "internalType": "bytes32", - "name": "_payloadHash", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "burn" - }, - { - "inputs": [ - { "internalType": "address", "name": "_oapp", "type": "address" }, - { - "internalType": "struct Origin", - "name": "_origin", - "type": "tuple", - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { "internalType": "uint64", "name": "nonce", "type": "uint64" } - ] - }, - { "internalType": "bytes32", "name": "_guid", "type": "bytes32" }, - { "internalType": "bytes", "name": "_message", "type": "bytes" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "clear" - }, - { - "inputs": [ - { "internalType": "address", "name": "_from", "type": "address" }, - { "internalType": "address", "name": "_to", "type": "address" }, - { "internalType": "bytes32", "name": "_guid", "type": "bytes32" }, - { "internalType": "uint16", "name": "_index", "type": "uint16" } - ], - "stateMutability": "view", - "type": "function", - "name": "composeQueue", - "outputs": [ - { - "internalType": "bytes32", - "name": "messageHash", - "type": "bytes32" - } - ] - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" } - ], - "stateMutability": "view", - "type": "function", - "name": "defaultReceiveLibrary", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ] - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" } - ], - "stateMutability": "view", - "type": "function", - "name": "defaultReceiveLibraryTimeout", - "outputs": [ - { "internalType": "address", "name": "lib", "type": "address" }, - { "internalType": "uint256", "name": "expiry", "type": "uint256" } - ] - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" } - ], - "stateMutability": "view", - "type": "function", - "name": "defaultSendLibrary", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "eid", - "outputs": [ - { "internalType": "uint32", "name": "", "type": "uint32" } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "_oapp", "type": "address" }, - { "internalType": "address", "name": "_lib", "type": "address" }, - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { - "internalType": "uint32", - "name": "_configType", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function", - "name": "getConfig", - "outputs": [ - { "internalType": "bytes", "name": "config", "type": "bytes" } - ] - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_receiver", - "type": "address" - }, - { "internalType": "uint32", "name": "_eid", "type": "uint32" } - ], - "stateMutability": "view", - "type": "function", - "name": "getReceiveLibrary", - "outputs": [ - { "internalType": "address", "name": "lib", "type": "address" }, - { "internalType": "bool", "name": "isDefault", "type": "bool" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "getRegisteredLibraries", - "outputs": [ - { "internalType": "address[]", "name": "", "type": "address[]" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "getSendContext", - "outputs": [ - { "internalType": "uint32", "name": "dstEid", "type": "uint32" }, - { "internalType": "address", "name": "sender", "type": "address" } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "_sender", "type": "address" }, - { "internalType": "uint32", "name": "_eid", "type": "uint32" } - ], - "stateMutability": "view", - "type": "function", - "name": "getSendLibrary", - "outputs": [ - { "internalType": "address", "name": "lib", "type": "address" } - ] - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_receiver", - "type": "address" - }, - { "internalType": "uint32", "name": "_srcEid", "type": "uint32" }, - { "internalType": "bytes32", "name": "_sender", "type": "bytes32" } - ], - "stateMutability": "view", - "type": "function", - "name": "inboundNonce", - "outputs": [ - { "internalType": "uint64", "name": "", "type": "uint64" } - ] - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_receiver", - "type": "address" - }, - { "internalType": "uint32", "name": "_srcEid", "type": "uint32" }, - { "internalType": "bytes32", "name": "_sender", "type": "bytes32" }, - { "internalType": "uint64", "name": "_nonce", "type": "uint64" } - ], - "stateMutability": "view", - "type": "function", - "name": "inboundPayloadHash", - "outputs": [ - { "internalType": "bytes32", "name": "", "type": "bytes32" } - ] - }, - { - "inputs": [ - { - "internalType": "struct Origin", - "name": "_origin", - "type": "tuple", - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { "internalType": "uint64", "name": "nonce", "type": "uint64" } - ] - }, - { - "internalType": "address", - "name": "_receiver", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function", - "name": "initializable", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "address", "name": "_sender", "type": "address" }, - { "internalType": "uint32", "name": "_eid", "type": "uint32" } - ], - "stateMutability": "view", - "type": "function", - "name": "isDefaultSendLibrary", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "address", "name": "_lib", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "isRegisteredLibrary", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "isSendingMessage", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" } - ], - "stateMutability": "view", - "type": "function", - "name": "isSupportedEid", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_receiver", - "type": "address" - }, - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { "internalType": "address", "name": "_lib", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "isValidReceiveLibrary", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_receiver", - "type": "address" - }, - { "internalType": "uint32", "name": "_srcEid", "type": "uint32" }, - { "internalType": "bytes32", "name": "_sender", "type": "bytes32" } - ], - "stateMutability": "view", - "type": "function", - "name": "lazyInboundNonce", - "outputs": [ - { "internalType": "uint64", "name": "", "type": "uint64" } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "_from", "type": "address" }, - { "internalType": "address", "name": "_to", "type": "address" }, - { "internalType": "bytes32", "name": "_guid", "type": "bytes32" }, - { "internalType": "uint16", "name": "_index", "type": "uint16" }, - { "internalType": "bytes", "name": "_message", "type": "bytes" }, - { "internalType": "bytes", "name": "_extraData", "type": "bytes" } - ], - "stateMutability": "payable", - "type": "function", - "name": "lzCompose" - }, - { - "inputs": [ - { - "internalType": "struct Origin", - "name": "_origin", - "type": "tuple", - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { "internalType": "uint64", "name": "nonce", "type": "uint64" } - ] - }, - { - "internalType": "address", - "name": "_receiver", - "type": "address" - }, - { "internalType": "bytes32", "name": "_guid", "type": "bytes32" }, - { "internalType": "bytes", "name": "_message", "type": "bytes" }, - { "internalType": "bytes", "name": "_extraData", "type": "bytes" } - ], - "stateMutability": "payable", - "type": "function", - "name": "lzReceive" - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "lzToken", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "nativeToken", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "_sender", "type": "address" }, - { "internalType": "uint32", "name": "_dstEid", "type": "uint32" }, - { - "internalType": "bytes32", - "name": "_receiver", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function", - "name": "nextGuid", - "outputs": [ - { "internalType": "bytes32", "name": "", "type": "bytes32" } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "_oapp", "type": "address" }, - { "internalType": "uint32", "name": "_srcEid", "type": "uint32" }, - { "internalType": "bytes32", "name": "_sender", "type": "bytes32" }, - { "internalType": "uint64", "name": "_nonce", "type": "uint64" }, - { - "internalType": "bytes32", - "name": "_payloadHash", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "nilify" - }, - { - "inputs": [ - { "internalType": "address", "name": "_sender", "type": "address" }, - { "internalType": "uint32", "name": "_dstEid", "type": "uint32" }, - { - "internalType": "bytes32", - "name": "_receiver", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function", - "name": "outboundNonce", - "outputs": [ - { "internalType": "uint64", "name": "", "type": "uint64" } - ] - }, - { - "inputs": [ - { - "internalType": "struct MessagingParams", - "name": "_params", - "type": "tuple", - "components": [ - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "receiver", - "type": "bytes32" - }, - { "internalType": "bytes", "name": "message", "type": "bytes" }, - { "internalType": "bytes", "name": "options", "type": "bytes" }, - { - "internalType": "bool", - "name": "payInLzToken", - "type": "bool" - } - ] - }, - { "internalType": "address", "name": "_sender", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "quote", - "outputs": [ - { - "internalType": "struct MessagingFee", - "name": "", - "type": "tuple", - "components": [ - { - "internalType": "uint256", - "name": "nativeFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "lzTokenFee", - "type": "uint256" - } - ] - } - ] - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_receiver", - "type": "address" - }, - { "internalType": "uint32", "name": "_eid", "type": "uint32" } - ], - "stateMutability": "view", - "type": "function", - "name": "receiveLibraryTimeout", - "outputs": [ - { "internalType": "address", "name": "lib", "type": "address" }, - { "internalType": "uint256", "name": "expiry", "type": "uint256" } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "_lib", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "registerLibrary" - }, - { - "inputs": [ - { - "internalType": "struct MessagingParams", - "name": "_params", - "type": "tuple", - "components": [ - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "receiver", - "type": "bytes32" - }, - { "internalType": "bytes", "name": "message", "type": "bytes" }, - { "internalType": "bytes", "name": "options", "type": "bytes" }, - { - "internalType": "bool", - "name": "payInLzToken", - "type": "bool" - } - ] - }, - { - "internalType": "address", - "name": "_refundAddress", - "type": "address" - } - ], - "stateMutability": "payable", - "type": "function", - "name": "send", - "outputs": [ - { - "internalType": "struct MessagingReceipt", - "name": "", - "type": "tuple", - "components": [ - { - "internalType": "bytes32", - "name": "guid", - "type": "bytes32" - }, - { "internalType": "uint64", "name": "nonce", "type": "uint64" }, - { - "internalType": "struct MessagingFee", - "name": "fee", - "type": "tuple", - "components": [ - { - "internalType": "uint256", - "name": "nativeFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "lzTokenFee", - "type": "uint256" - } - ] - } - ] - } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "_to", "type": "address" }, - { "internalType": "bytes32", "name": "_guid", "type": "bytes32" }, - { "internalType": "uint16", "name": "_index", "type": "uint16" }, - { "internalType": "bytes", "name": "_message", "type": "bytes" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "sendCompose" - }, - { - "inputs": [ - { "internalType": "address", "name": "_oapp", "type": "address" }, - { "internalType": "address", "name": "_lib", "type": "address" }, - { - "internalType": "struct SetConfigParam[]", - "name": "_params", - "type": "tuple[]", - "components": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" }, - { - "internalType": "uint32", - "name": "configType", - "type": "uint32" - }, - { "internalType": "bytes", "name": "config", "type": "bytes" } - ] - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setConfig" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { "internalType": "address", "name": "_newLib", "type": "address" }, - { - "internalType": "uint256", - "name": "_gracePeriod", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setDefaultReceiveLibrary" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { "internalType": "address", "name": "_lib", "type": "address" }, - { "internalType": "uint256", "name": "_expiry", "type": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setDefaultReceiveLibraryTimeout" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { "internalType": "address", "name": "_newLib", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setDefaultSendLibrary" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_delegate", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setDelegate" - }, - { - "inputs": [ - { "internalType": "address", "name": "_lzToken", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setLzToken" - }, - { - "inputs": [ - { "internalType": "address", "name": "_oapp", "type": "address" }, - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { "internalType": "address", "name": "_newLib", "type": "address" }, - { - "internalType": "uint256", - "name": "_gracePeriod", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setReceiveLibrary" - }, - { - "inputs": [ - { "internalType": "address", "name": "_oapp", "type": "address" }, - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { "internalType": "address", "name": "_lib", "type": "address" }, - { "internalType": "uint256", "name": "_expiry", "type": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setReceiveLibraryTimeout" - }, - { - "inputs": [ - { "internalType": "address", "name": "_oapp", "type": "address" }, - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { "internalType": "address", "name": "_newLib", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setSendLibrary" - }, - { - "inputs": [ - { "internalType": "address", "name": "_oapp", "type": "address" }, - { "internalType": "uint32", "name": "_srcEid", "type": "uint32" }, - { "internalType": "bytes32", "name": "_sender", "type": "bytes32" }, - { "internalType": "uint64", "name": "_nonce", "type": "uint64" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "skip" - }, - { - "inputs": [ - { - "internalType": "struct Origin", - "name": "_origin", - "type": "tuple", - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { "internalType": "uint64", "name": "nonce", "type": "uint64" } - ] - }, - { - "internalType": "address", - "name": "_receiver", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function", - "name": "verifiable", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { - "internalType": "struct Origin", - "name": "_origin", - "type": "tuple", - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { "internalType": "uint64", "name": "nonce", "type": "uint64" } - ] - }, - { - "internalType": "address", - "name": "_receiver", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "_payloadHash", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "verify" - } - ], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "userdoc": { - "kind": "user", - "methods": { - "setSendLibrary(address,uint32,address)": { - "notice": "------------------- OApp interfaces -------------------" - } - }, - "version": 1 - } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol": "ILayerZeroEndpointV2" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol": { - "keccak256": "0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3", - "urls": [ - "bzz-raw://bacc29fd3866af71e59cb0bdc1cf82c882a4a7f4e2652fd413c9f12649762083", - "dweb:/ipfs/QmZh2toLnrQDWaNYhS5K4NoW7Vxd2GdZx9KA77vKEDLAqs" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol": { - "keccak256": "0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc", - "urls": [ - "bzz-raw://d8ff6a8a89297fa127f86b54e0db3eba1d6a6eeb4f6398d3c84d569665ac8f1b", - "dweb:/ipfs/QmVSwhw6xFDrLRAX4RXaCM47yBaBtac4wf36DYEq6KCTvT" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol": { - "keccak256": "0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972", - "urls": [ - "bzz-raw://7e1b245d58221d16d8b5e0f01ef3e289a24a7df1ace3b94239e4d5b954ad5927", - "dweb:/ipfs/Qmappsgp7PCY9rSSNE9Cdn4BTRX591WfCSEgq2HxhA3z6S" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol": { - "keccak256": "0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901", - "urls": [ - "bzz-raw://b18b23a1643fc6636c4ad9d9023e2e6ca2d3c2a4a046482d4655bff09950598d", - "dweb:/ipfs/Qma6G5SqiovwrMPfgqTrRngK1HWW373Wkf9c6YP2NhXpPk" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol": { - "keccak256": "0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e", - "urls": [ - "bzz-raw://5173fc9143bea314b159ca5a9adb5626659ef763bc598e27de5fa46efe3291a6", - "dweb:/ipfs/QmSLFeMFPmVeGxT4sxRPW28ictjAS22M8rLeYRu9TXkA6D" - ], - "license": "MIT" - } - }, - "version": 1 - }, - "id": 2 -} diff --git a/examples/oft-movement/out/ILayerZeroExecutor.sol/ILayerZeroExecutor.json b/examples/oft-movement/out/ILayerZeroExecutor.sol/ILayerZeroExecutor.json deleted file mode 100644 index 95a400ef7..000000000 --- a/examples/oft-movement/out/ILayerZeroExecutor.sol/ILayerZeroExecutor.json +++ /dev/null @@ -1,123 +0,0 @@ -{ - "abi": [ - { - "type": "function", - "name": "assignJob", - "inputs": [ - { "name": "_dstEid", "type": "uint32", "internalType": "uint32" }, - { "name": "_sender", "type": "address", "internalType": "address" }, - { - "name": "_calldataSize", - "type": "uint256", - "internalType": "uint256" - }, - { "name": "_options", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [ - { "name": "price", "type": "uint256", "internalType": "uint256" } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "getFee", - "inputs": [ - { "name": "_dstEid", "type": "uint32", "internalType": "uint32" }, - { "name": "_sender", "type": "address", "internalType": "address" }, - { - "name": "_calldataSize", - "type": "uint256", - "internalType": "uint256" - }, - { "name": "_options", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [ - { "name": "price", "type": "uint256", "internalType": "uint256" } - ], - "stateMutability": "view" - } - ], - "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "methodIdentifiers": { - "assignJob(uint32,address,uint256,bytes)": "717e8a42", - "getFee(uint32,address,uint256,bytes)": "709eb664" - }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_dstEid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_calldataSize\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_options\",\"type\":\"bytes\"}],\"name\":\"assignJob\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_dstEid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_calldataSize\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_options\",\"type\":\"bytes\"}],\"name\":\"getFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroExecutor.sol\":\"ILayerZeroExecutor\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroExecutor.sol\":{\"keccak256\":\"0x3647af317ee126b1247a782abb30e59ec5ab21b4945f1d3b4370d1fa3c1bf347\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5b51cd5e7347ee869a06bd57a698f40e4a901ec7fdcb27f0ef485e4a0e1e9be4\",\"dweb:/ipfs/QmP2Nc73veRzLGdUahkjhQAiKR9ZWYiUtSGwoMB1sPXxUp\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { - "inputs": [ - { "internalType": "uint32", "name": "_dstEid", "type": "uint32" }, - { "internalType": "address", "name": "_sender", "type": "address" }, - { - "internalType": "uint256", - "name": "_calldataSize", - "type": "uint256" - }, - { "internalType": "bytes", "name": "_options", "type": "bytes" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "assignJob", - "outputs": [ - { "internalType": "uint256", "name": "price", "type": "uint256" } - ] - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_dstEid", "type": "uint32" }, - { "internalType": "address", "name": "_sender", "type": "address" }, - { - "internalType": "uint256", - "name": "_calldataSize", - "type": "uint256" - }, - { "internalType": "bytes", "name": "_options", "type": "bytes" } - ], - "stateMutability": "view", - "type": "function", - "name": "getFee", - "outputs": [ - { "internalType": "uint256", "name": "price", "type": "uint256" } - ] - } - ], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroExecutor.sol": "ILayerZeroExecutor" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroExecutor.sol": { - "keccak256": "0x3647af317ee126b1247a782abb30e59ec5ab21b4945f1d3b4370d1fa3c1bf347", - "urls": [ - "bzz-raw://5b51cd5e7347ee869a06bd57a698f40e4a901ec7fdcb27f0ef485e4a0e1e9be4", - "dweb:/ipfs/QmP2Nc73veRzLGdUahkjhQAiKR9ZWYiUtSGwoMB1sPXxUp" - ], - "license": "MIT" - } - }, - "version": 1 - }, - "id": 6 -} diff --git a/examples/oft-movement/out/ILayerZeroPriceFeed.sol/ILayerZeroPriceFeed.json b/examples/oft-movement/out/ILayerZeroPriceFeed.sol/ILayerZeroPriceFeed.json deleted file mode 100644 index 9d240ab6b..000000000 --- a/examples/oft-movement/out/ILayerZeroPriceFeed.sol/ILayerZeroPriceFeed.json +++ /dev/null @@ -1,339 +0,0 @@ -{ - "abi": [ - { - "type": "function", - "name": "estimateFeeByEid", - "inputs": [ - { "name": "_dstEid", "type": "uint32", "internalType": "uint32" }, - { - "name": "_callDataSize", - "type": "uint256", - "internalType": "uint256" - }, - { "name": "_gas", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [ - { "name": "fee", "type": "uint256", "internalType": "uint256" }, - { "name": "priceRatio", "type": "uint128", "internalType": "uint128" }, - { - "name": "priceRatioDenominator", - "type": "uint128", - "internalType": "uint128" - }, - { - "name": "nativePriceUSD", - "type": "uint128", - "internalType": "uint128" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "estimateFeeOnSend", - "inputs": [ - { "name": "_dstEid", "type": "uint32", "internalType": "uint32" }, - { - "name": "_callDataSize", - "type": "uint256", - "internalType": "uint256" - }, - { "name": "_gas", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [ - { "name": "fee", "type": "uint256", "internalType": "uint256" }, - { "name": "priceRatio", "type": "uint128", "internalType": "uint128" }, - { - "name": "priceRatioDenominator", - "type": "uint128", - "internalType": "uint128" - }, - { - "name": "nativePriceUSD", - "type": "uint128", - "internalType": "uint128" - } - ], - "stateMutability": "payable" - }, - { - "type": "function", - "name": "getFee", - "inputs": [ - { "name": "_dstEid", "type": "uint32", "internalType": "uint32" }, - { - "name": "_callDataSize", - "type": "uint256", - "internalType": "uint256" - }, - { "name": "_gas", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getPrice", - "inputs": [ - { "name": "_dstEid", "type": "uint32", "internalType": "uint32" } - ], - "outputs": [ - { - "name": "", - "type": "tuple", - "internalType": "struct ILayerZeroPriceFeed.Price", - "components": [ - { - "name": "priceRatio", - "type": "uint128", - "internalType": "uint128" - }, - { - "name": "gasPriceInUnit", - "type": "uint64", - "internalType": "uint64" - }, - { "name": "gasPerByte", "type": "uint32", "internalType": "uint32" } - ] - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getPriceRatioDenominator", - "inputs": [], - "outputs": [{ "name": "", "type": "uint128", "internalType": "uint128" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "nativeTokenPriceUSD", - "inputs": [], - "outputs": [{ "name": "", "type": "uint128", "internalType": "uint128" }], - "stateMutability": "view" - }, - { - "type": "error", - "name": "LZ_PriceFeed_InsufficientFee", - "inputs": [ - { "name": "provided", "type": "uint256", "internalType": "uint256" }, - { "name": "required", "type": "uint256", "internalType": "uint256" } - ] - }, - { - "type": "error", - "name": "LZ_PriceFeed_NotAnOPStack", - "inputs": [ - { "name": "l2Eid", "type": "uint32", "internalType": "uint32" } - ] - }, - { "type": "error", "name": "LZ_PriceFeed_OnlyPriceUpdater", "inputs": [] } - ], - "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "methodIdentifiers": { - "estimateFeeByEid(uint32,uint256,uint256)": "88a4124c", - "estimateFeeOnSend(uint32,uint256,uint256)": "c1723a1d", - "getFee(uint32,uint256,uint256)": "11f2c343", - "getPrice(uint32)": "da26663a", - "getPriceRatioDenominator()": "c1840327", - "nativeTokenPriceUSD()": "92807f58" - }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"provided\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"required\",\"type\":\"uint256\"}],\"name\":\"LZ_PriceFeed_InsufficientFee\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"l2Eid\",\"type\":\"uint32\"}],\"name\":\"LZ_PriceFeed_NotAnOPStack\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_PriceFeed_OnlyPriceUpdater\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_dstEid\",\"type\":\"uint32\"},{\"internalType\":\"uint256\",\"name\":\"_callDataSize\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_gas\",\"type\":\"uint256\"}],\"name\":\"estimateFeeByEid\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"},{\"internalType\":\"uint128\",\"name\":\"priceRatio\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"priceRatioDenominator\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"nativePriceUSD\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_dstEid\",\"type\":\"uint32\"},{\"internalType\":\"uint256\",\"name\":\"_callDataSize\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_gas\",\"type\":\"uint256\"}],\"name\":\"estimateFeeOnSend\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"},{\"internalType\":\"uint128\",\"name\":\"priceRatio\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"priceRatioDenominator\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"nativePriceUSD\",\"type\":\"uint128\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_dstEid\",\"type\":\"uint32\"},{\"internalType\":\"uint256\",\"name\":\"_callDataSize\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_gas\",\"type\":\"uint256\"}],\"name\":\"getFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_dstEid\",\"type\":\"uint32\"}],\"name\":\"getPrice\",\"outputs\":[{\"components\":[{\"internalType\":\"uint128\",\"name\":\"priceRatio\",\"type\":\"uint128\"},{\"internalType\":\"uint64\",\"name\":\"gasPriceInUnit\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"gasPerByte\",\"type\":\"uint32\"}],\"internalType\":\"struct ILayerZeroPriceFeed.Price\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPriceRatioDenominator\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nativeTokenPriceUSD\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroPriceFeed.sol\":\"ILayerZeroPriceFeed\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroPriceFeed.sol\":{\"keccak256\":\"0xb4df72798a64f5ea44775b526e0c417c3de0ffc661659d7b31d5b28567c6fbcc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://30ca5fd5e3227a7bffc51654ee3bfebdd591a131f86846ac42dea8a40c5cf1d8\",\"dweb:/ipfs/QmXNmQCF8TZAFpUxgPa1rgWt4ktsBV38A8Hax7TiYLgybW\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { - "inputs": [ - { - "internalType": "uint256", - "name": "provided", - "type": "uint256" - }, - { "internalType": "uint256", "name": "required", "type": "uint256" } - ], - "type": "error", - "name": "LZ_PriceFeed_InsufficientFee" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "l2Eid", "type": "uint32" } - ], - "type": "error", - "name": "LZ_PriceFeed_NotAnOPStack" - }, - { - "inputs": [], - "type": "error", - "name": "LZ_PriceFeed_OnlyPriceUpdater" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_dstEid", "type": "uint32" }, - { - "internalType": "uint256", - "name": "_callDataSize", - "type": "uint256" - }, - { "internalType": "uint256", "name": "_gas", "type": "uint256" } - ], - "stateMutability": "view", - "type": "function", - "name": "estimateFeeByEid", - "outputs": [ - { "internalType": "uint256", "name": "fee", "type": "uint256" }, - { - "internalType": "uint128", - "name": "priceRatio", - "type": "uint128" - }, - { - "internalType": "uint128", - "name": "priceRatioDenominator", - "type": "uint128" - }, - { - "internalType": "uint128", - "name": "nativePriceUSD", - "type": "uint128" - } - ] - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_dstEid", "type": "uint32" }, - { - "internalType": "uint256", - "name": "_callDataSize", - "type": "uint256" - }, - { "internalType": "uint256", "name": "_gas", "type": "uint256" } - ], - "stateMutability": "payable", - "type": "function", - "name": "estimateFeeOnSend", - "outputs": [ - { "internalType": "uint256", "name": "fee", "type": "uint256" }, - { - "internalType": "uint128", - "name": "priceRatio", - "type": "uint128" - }, - { - "internalType": "uint128", - "name": "priceRatioDenominator", - "type": "uint128" - }, - { - "internalType": "uint128", - "name": "nativePriceUSD", - "type": "uint128" - } - ] - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_dstEid", "type": "uint32" }, - { - "internalType": "uint256", - "name": "_callDataSize", - "type": "uint256" - }, - { "internalType": "uint256", "name": "_gas", "type": "uint256" } - ], - "stateMutability": "view", - "type": "function", - "name": "getFee", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ] - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_dstEid", "type": "uint32" } - ], - "stateMutability": "view", - "type": "function", - "name": "getPrice", - "outputs": [ - { - "internalType": "struct ILayerZeroPriceFeed.Price", - "name": "", - "type": "tuple", - "components": [ - { - "internalType": "uint128", - "name": "priceRatio", - "type": "uint128" - }, - { - "internalType": "uint64", - "name": "gasPriceInUnit", - "type": "uint64" - }, - { - "internalType": "uint32", - "name": "gasPerByte", - "type": "uint32" - } - ] - } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "getPriceRatioDenominator", - "outputs": [ - { "internalType": "uint128", "name": "", "type": "uint128" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "nativeTokenPriceUSD", - "outputs": [ - { "internalType": "uint128", "name": "", "type": "uint128" } - ] - } - ], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroPriceFeed.sol": "ILayerZeroPriceFeed" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroPriceFeed.sol": { - "keccak256": "0xb4df72798a64f5ea44775b526e0c417c3de0ffc661659d7b31d5b28567c6fbcc", - "urls": [ - "bzz-raw://30ca5fd5e3227a7bffc51654ee3bfebdd591a131f86846ac42dea8a40c5cf1d8", - "dweb:/ipfs/QmXNmQCF8TZAFpUxgPa1rgWt4ktsBV38A8Hax7TiYLgybW" - ], - "license": "MIT" - } - }, - "version": 1 - }, - "id": 7 -} diff --git a/examples/oft-movement/out/ILayerZeroReadDVN.sol/ILayerZeroReadDVN.json b/examples/oft-movement/out/ILayerZeroReadDVN.sol/ILayerZeroReadDVN.json deleted file mode 100644 index 3a4dd8967..000000000 --- a/examples/oft-movement/out/ILayerZeroReadDVN.sol/ILayerZeroReadDVN.json +++ /dev/null @@ -1,115 +0,0 @@ -{ - "abi": [ - { - "type": "function", - "name": "assignJob", - "inputs": [ - { "name": "_sender", "type": "address", "internalType": "address" }, - { "name": "_packetHeader", "type": "bytes", "internalType": "bytes" }, - { "name": "_cmd", "type": "bytes", "internalType": "bytes" }, - { "name": "_options", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [ - { "name": "fee", "type": "uint256", "internalType": "uint256" } - ], - "stateMutability": "payable" - }, - { - "type": "function", - "name": "getFee", - "inputs": [ - { "name": "_sender", "type": "address", "internalType": "address" }, - { "name": "_packetHeader", "type": "bytes", "internalType": "bytes" }, - { "name": "_cmd", "type": "bytes", "internalType": "bytes" }, - { "name": "_options", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [ - { "name": "fee", "type": "uint256", "internalType": "uint256" } - ], - "stateMutability": "view" - } - ], - "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "methodIdentifiers": { - "assignJob(address,bytes,bytes,bytes)": "f42ed2ed", - "getFee(address,bytes,bytes,bytes)": "fdb9b0f1" - }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_packetHeader\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_cmd\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_options\",\"type\":\"bytes\"}],\"name\":\"assignJob\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_packetHeader\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_cmd\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_options\",\"type\":\"bytes\"}],\"name\":\"getFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/ILayerZeroReadDVN.sol\":\"ILayerZeroReadDVN\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/ILayerZeroReadDVN.sol\":{\"keccak256\":\"0x759a3ee7614c2de54b152b0278845f91ac9760d8c22045b2fee89e3e744402b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7a2dbf6bcf5bfab408f18c104b34c390e8bfabb0eeb1a10e3a9c0fb14c8c61d5\",\"dweb:/ipfs/QmWxmRbDBkbhGmNsRyXqQXB1QaWRS4qvh6a8achh8DQPKR\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { - "inputs": [ - { "internalType": "address", "name": "_sender", "type": "address" }, - { - "internalType": "bytes", - "name": "_packetHeader", - "type": "bytes" - }, - { "internalType": "bytes", "name": "_cmd", "type": "bytes" }, - { "internalType": "bytes", "name": "_options", "type": "bytes" } - ], - "stateMutability": "payable", - "type": "function", - "name": "assignJob", - "outputs": [ - { "internalType": "uint256", "name": "fee", "type": "uint256" } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "_sender", "type": "address" }, - { - "internalType": "bytes", - "name": "_packetHeader", - "type": "bytes" - }, - { "internalType": "bytes", "name": "_cmd", "type": "bytes" }, - { "internalType": "bytes", "name": "_options", "type": "bytes" } - ], - "stateMutability": "view", - "type": "function", - "name": "getFee", - "outputs": [ - { "internalType": "uint256", "name": "fee", "type": "uint256" } - ] - } - ], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/ILayerZeroReadDVN.sol": "ILayerZeroReadDVN" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/ILayerZeroReadDVN.sol": { - "keccak256": "0x759a3ee7614c2de54b152b0278845f91ac9760d8c22045b2fee89e3e744402b8", - "urls": [ - "bzz-raw://7a2dbf6bcf5bfab408f18c104b34c390e8bfabb0eeb1a10e3a9c0fb14c8c61d5", - "dweb:/ipfs/QmWxmRbDBkbhGmNsRyXqQXB1QaWRS4qvh6a8achh8DQPKR" - ], - "license": "MIT" - } - }, - "version": 1 - }, - "id": 19 -} diff --git a/examples/oft-movement/out/ILayerZeroReadExecutor.sol/ILayerZeroReadExecutor.json b/examples/oft-movement/out/ILayerZeroReadExecutor.sol/ILayerZeroReadExecutor.json deleted file mode 100644 index 15db2c949..000000000 --- a/examples/oft-movement/out/ILayerZeroReadExecutor.sol/ILayerZeroReadExecutor.json +++ /dev/null @@ -1,99 +0,0 @@ -{ - "abi": [ - { - "type": "function", - "name": "assignJob", - "inputs": [ - { "name": "_sender", "type": "address", "internalType": "address" }, - { "name": "_options", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [ - { "name": "fee", "type": "uint256", "internalType": "uint256" } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "getFee", - "inputs": [ - { "name": "_sender", "type": "address", "internalType": "address" }, - { "name": "_options", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [ - { "name": "fee", "type": "uint256", "internalType": "uint256" } - ], - "stateMutability": "view" - } - ], - "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "methodIdentifiers": { - "assignJob(address,bytes)": "c015bb7d", - "getFee(address,bytes)": "c8f8dcd1" - }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_options\",\"type\":\"bytes\"}],\"name\":\"assignJob\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_options\",\"type\":\"bytes\"}],\"name\":\"getFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroReadExecutor.sol\":\"ILayerZeroReadExecutor\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroReadExecutor.sol\":{\"keccak256\":\"0x360936885f173f816ffb47e555d480928e74eb1ad54a76af0f4595ecba2d5657\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://16b5095e6439b1e416eb70571a1dd8f4f21a0d77b19c9e510ca289d99e5e09ab\",\"dweb:/ipfs/QmZ2mjQDQ35gJseyzmQhik4cBgN2ESADzofFNVFvgS64hv\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { - "inputs": [ - { "internalType": "address", "name": "_sender", "type": "address" }, - { "internalType": "bytes", "name": "_options", "type": "bytes" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "assignJob", - "outputs": [ - { "internalType": "uint256", "name": "fee", "type": "uint256" } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "_sender", "type": "address" }, - { "internalType": "bytes", "name": "_options", "type": "bytes" } - ], - "stateMutability": "view", - "type": "function", - "name": "getFee", - "outputs": [ - { "internalType": "uint256", "name": "fee", "type": "uint256" } - ] - } - ], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroReadExecutor.sol": "ILayerZeroReadExecutor" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroReadExecutor.sol": { - "keccak256": "0x360936885f173f816ffb47e555d480928e74eb1ad54a76af0f4595ecba2d5657", - "urls": [ - "bzz-raw://16b5095e6439b1e416eb70571a1dd8f4f21a0d77b19c9e510ca289d99e5e09ab", - "dweb:/ipfs/QmZ2mjQDQ35gJseyzmQhik4cBgN2ESADzofFNVFvgS64hv" - ], - "license": "MIT" - } - }, - "version": 1 - }, - "id": 8 -} diff --git a/examples/oft-movement/out/ILayerZeroReceiver.sol/ILayerZeroReceiver.json b/examples/oft-movement/out/ILayerZeroReceiver.sol/ILayerZeroReceiver.json deleted file mode 100644 index 7e2f91e19..000000000 --- a/examples/oft-movement/out/ILayerZeroReceiver.sol/ILayerZeroReceiver.json +++ /dev/null @@ -1,213 +0,0 @@ -{ - "abi": [ - { - "type": "function", - "name": "allowInitializePath", - "inputs": [ - { - "name": "_origin", - "type": "tuple", - "internalType": "struct Origin", - "components": [ - { "name": "srcEid", "type": "uint32", "internalType": "uint32" }, - { "name": "sender", "type": "bytes32", "internalType": "bytes32" }, - { "name": "nonce", "type": "uint64", "internalType": "uint64" } - ] - } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "lzReceive", - "inputs": [ - { - "name": "_origin", - "type": "tuple", - "internalType": "struct Origin", - "components": [ - { "name": "srcEid", "type": "uint32", "internalType": "uint32" }, - { "name": "sender", "type": "bytes32", "internalType": "bytes32" }, - { "name": "nonce", "type": "uint64", "internalType": "uint64" } - ] - }, - { "name": "_guid", "type": "bytes32", "internalType": "bytes32" }, - { "name": "_message", "type": "bytes", "internalType": "bytes" }, - { "name": "_executor", "type": "address", "internalType": "address" }, - { "name": "_extraData", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [], - "stateMutability": "payable" - }, - { - "type": "function", - "name": "nextNonce", - "inputs": [ - { "name": "_eid", "type": "uint32", "internalType": "uint32" }, - { "name": "_sender", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [{ "name": "", "type": "uint64", "internalType": "uint64" }], - "stateMutability": "view" - } - ], - "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "methodIdentifiers": { - "allowInitializePath((uint32,bytes32,uint64))": "ff7bd03d", - "lzReceive((uint32,bytes32,uint64),bytes32,bytes,address,bytes)": "13137d65", - "nextNonce(uint32,bytes32)": "7d25a05e" - }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"_origin\",\"type\":\"tuple\"}],\"name\":\"allowInitializePath\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"_origin\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"_guid\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"_executor\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"lzReceive\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_sender\",\"type\":\"bytes32\"}],\"name\":\"nextNonce\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol\":\"ILayerZeroReceiver\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\":{\"keccak256\":\"0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bacc29fd3866af71e59cb0bdc1cf82c882a4a7f4e2652fd413c9f12649762083\",\"dweb:/ipfs/QmZh2toLnrQDWaNYhS5K4NoW7Vxd2GdZx9KA77vKEDLAqs\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol\":{\"keccak256\":\"0x9641abba8d53b08bb517d1b74801dd15ea7b84d77a6719085bd96c8ea94e3ca0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://77415ae0820859e0faf3fabdce683cce9fa03ea026ae0f6fe081ef1c9205f933\",\"dweb:/ipfs/QmXd7APqoCunQ2jYy73AHvi5gsZofLpm3SzM6FPo7zRPfL\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol\":{\"keccak256\":\"0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d8ff6a8a89297fa127f86b54e0db3eba1d6a6eeb4f6398d3c84d569665ac8f1b\",\"dweb:/ipfs/QmVSwhw6xFDrLRAX4RXaCM47yBaBtac4wf36DYEq6KCTvT\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol\":{\"keccak256\":\"0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7e1b245d58221d16d8b5e0f01ef3e289a24a7df1ace3b94239e4d5b954ad5927\",\"dweb:/ipfs/Qmappsgp7PCY9rSSNE9Cdn4BTRX591WfCSEgq2HxhA3z6S\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol\":{\"keccak256\":\"0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b18b23a1643fc6636c4ad9d9023e2e6ca2d3c2a4a046482d4655bff09950598d\",\"dweb:/ipfs/Qma6G5SqiovwrMPfgqTrRngK1HWW373Wkf9c6YP2NhXpPk\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol\":{\"keccak256\":\"0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5173fc9143bea314b159ca5a9adb5626659ef763bc598e27de5fa46efe3291a6\",\"dweb:/ipfs/QmSLFeMFPmVeGxT4sxRPW28ictjAS22M8rLeYRu9TXkA6D\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { - "inputs": [ - { - "internalType": "struct Origin", - "name": "_origin", - "type": "tuple", - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { "internalType": "uint64", "name": "nonce", "type": "uint64" } - ] - } - ], - "stateMutability": "view", - "type": "function", - "name": "allowInitializePath", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { - "internalType": "struct Origin", - "name": "_origin", - "type": "tuple", - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { "internalType": "uint64", "name": "nonce", "type": "uint64" } - ] - }, - { "internalType": "bytes32", "name": "_guid", "type": "bytes32" }, - { "internalType": "bytes", "name": "_message", "type": "bytes" }, - { - "internalType": "address", - "name": "_executor", - "type": "address" - }, - { "internalType": "bytes", "name": "_extraData", "type": "bytes" } - ], - "stateMutability": "payable", - "type": "function", - "name": "lzReceive" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { "internalType": "bytes32", "name": "_sender", "type": "bytes32" } - ], - "stateMutability": "view", - "type": "function", - "name": "nextNonce", - "outputs": [ - { "internalType": "uint64", "name": "", "type": "uint64" } - ] - } - ], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol": "ILayerZeroReceiver" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol": { - "keccak256": "0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3", - "urls": [ - "bzz-raw://bacc29fd3866af71e59cb0bdc1cf82c882a4a7f4e2652fd413c9f12649762083", - "dweb:/ipfs/QmZh2toLnrQDWaNYhS5K4NoW7Vxd2GdZx9KA77vKEDLAqs" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol": { - "keccak256": "0x9641abba8d53b08bb517d1b74801dd15ea7b84d77a6719085bd96c8ea94e3ca0", - "urls": [ - "bzz-raw://77415ae0820859e0faf3fabdce683cce9fa03ea026ae0f6fe081ef1c9205f933", - "dweb:/ipfs/QmXd7APqoCunQ2jYy73AHvi5gsZofLpm3SzM6FPo7zRPfL" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol": { - "keccak256": "0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc", - "urls": [ - "bzz-raw://d8ff6a8a89297fa127f86b54e0db3eba1d6a6eeb4f6398d3c84d569665ac8f1b", - "dweb:/ipfs/QmVSwhw6xFDrLRAX4RXaCM47yBaBtac4wf36DYEq6KCTvT" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol": { - "keccak256": "0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972", - "urls": [ - "bzz-raw://7e1b245d58221d16d8b5e0f01ef3e289a24a7df1ace3b94239e4d5b954ad5927", - "dweb:/ipfs/Qmappsgp7PCY9rSSNE9Cdn4BTRX591WfCSEgq2HxhA3z6S" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol": { - "keccak256": "0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901", - "urls": [ - "bzz-raw://b18b23a1643fc6636c4ad9d9023e2e6ca2d3c2a4a046482d4655bff09950598d", - "dweb:/ipfs/Qma6G5SqiovwrMPfgqTrRngK1HWW373Wkf9c6YP2NhXpPk" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol": { - "keccak256": "0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e", - "urls": [ - "bzz-raw://5173fc9143bea314b159ca5a9adb5626659ef763bc598e27de5fa46efe3291a6", - "dweb:/ipfs/QmSLFeMFPmVeGxT4sxRPW28ictjAS22M8rLeYRu9TXkA6D" - ], - "license": "MIT" - } - }, - "version": 1 - }, - "id": 3 -} diff --git a/examples/oft-movement/out/ILayerZeroTreasury.sol/ILayerZeroTreasury.json b/examples/oft-movement/out/ILayerZeroTreasury.sol/ILayerZeroTreasury.json deleted file mode 100644 index 9069104ad..000000000 --- a/examples/oft-movement/out/ILayerZeroTreasury.sol/ILayerZeroTreasury.json +++ /dev/null @@ -1,123 +0,0 @@ -{ - "abi": [ - { - "type": "function", - "name": "getFee", - "inputs": [ - { "name": "_sender", "type": "address", "internalType": "address" }, - { "name": "_dstEid", "type": "uint32", "internalType": "uint32" }, - { - "name": "_totalNativeFee", - "type": "uint256", - "internalType": "uint256" - }, - { "name": "_payInLzToken", "type": "bool", "internalType": "bool" } - ], - "outputs": [ - { "name": "fee", "type": "uint256", "internalType": "uint256" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "payFee", - "inputs": [ - { "name": "_sender", "type": "address", "internalType": "address" }, - { "name": "_dstEid", "type": "uint32", "internalType": "uint32" }, - { - "name": "_totalNativeFee", - "type": "uint256", - "internalType": "uint256" - }, - { "name": "_payInLzToken", "type": "bool", "internalType": "bool" } - ], - "outputs": [ - { "name": "fee", "type": "uint256", "internalType": "uint256" } - ], - "stateMutability": "payable" - } - ], - "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "methodIdentifiers": { - "getFee(address,uint32,uint256,bool)": "d4244221", - "payFee(address,uint32,uint256,bool)": "d51c5486" - }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_dstEid\",\"type\":\"uint32\"},{\"internalType\":\"uint256\",\"name\":\"_totalNativeFee\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"_payInLzToken\",\"type\":\"bool\"}],\"name\":\"getFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_dstEid\",\"type\":\"uint32\"},{\"internalType\":\"uint256\",\"name\":\"_totalNativeFee\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"_payInLzToken\",\"type\":\"bool\"}],\"name\":\"payFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroTreasury.sol\":\"ILayerZeroTreasury\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroTreasury.sol\":{\"keccak256\":\"0x2aab2a3cf50e20af56d9204b1367d52a47abba0b0c7c21f304d413de1ced6345\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f8b603b5e5e62c621715f8449280af240a4add8721c4ae8f5e8e491507f6e4c5\",\"dweb:/ipfs/QmUQ7Ti7CPmKnRbQFN9TLvVbeZhsi1xUjqZPTJ36dCZ6y8\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { - "inputs": [ - { "internalType": "address", "name": "_sender", "type": "address" }, - { "internalType": "uint32", "name": "_dstEid", "type": "uint32" }, - { - "internalType": "uint256", - "name": "_totalNativeFee", - "type": "uint256" - }, - { "internalType": "bool", "name": "_payInLzToken", "type": "bool" } - ], - "stateMutability": "view", - "type": "function", - "name": "getFee", - "outputs": [ - { "internalType": "uint256", "name": "fee", "type": "uint256" } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "_sender", "type": "address" }, - { "internalType": "uint32", "name": "_dstEid", "type": "uint32" }, - { - "internalType": "uint256", - "name": "_totalNativeFee", - "type": "uint256" - }, - { "internalType": "bool", "name": "_payInLzToken", "type": "bool" } - ], - "stateMutability": "payable", - "type": "function", - "name": "payFee", - "outputs": [ - { "internalType": "uint256", "name": "fee", "type": "uint256" } - ] - } - ], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroTreasury.sol": "ILayerZeroTreasury" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroTreasury.sol": { - "keccak256": "0x2aab2a3cf50e20af56d9204b1367d52a47abba0b0c7c21f304d413de1ced6345", - "urls": [ - "bzz-raw://f8b603b5e5e62c621715f8449280af240a4add8721c4ae8f5e8e491507f6e4c5", - "dweb:/ipfs/QmUQ7Ti7CPmKnRbQFN9TLvVbeZhsi1xUjqZPTJ36dCZ6y8" - ], - "license": "MIT" - } - }, - "version": 1 - }, - "id": 9 -} diff --git a/examples/oft-movement/out/ILayerZeroUltraLightNodeV2.sol/ILayerZeroUltraLightNodeV2.json b/examples/oft-movement/out/ILayerZeroUltraLightNodeV2.sol/ILayerZeroUltraLightNodeV2.json deleted file mode 100644 index 694c9560d..000000000 --- a/examples/oft-movement/out/ILayerZeroUltraLightNodeV2.sol/ILayerZeroUltraLightNodeV2.json +++ /dev/null @@ -1,1107 +0,0 @@ -{ - "abi": [ - { - "type": "function", - "name": "accruedNativeFee", - "inputs": [ - { "name": "_address", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getAppConfig", - "inputs": [ - { - "name": "_remoteChainId", - "type": "uint16", - "internalType": "uint16" - }, - { - "name": "_userApplicationAddress", - "type": "address", - "internalType": "address" - } - ], - "outputs": [ - { - "name": "", - "type": "tuple", - "internalType": "struct ILayerZeroUltraLightNodeV2.ApplicationConfiguration", - "components": [ - { - "name": "inboundProofLibraryVersion", - "type": "uint16", - "internalType": "uint16" - }, - { - "name": "inboundBlockConfirmations", - "type": "uint64", - "internalType": "uint64" - }, - { "name": "relayer", "type": "address", "internalType": "address" }, - { - "name": "outboundProofType", - "type": "uint16", - "internalType": "uint16" - }, - { - "name": "outboundBlockConfirmations", - "type": "uint64", - "internalType": "uint64" - }, - { "name": "oracle", "type": "address", "internalType": "address" } - ] - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "updateHash", - "inputs": [ - { "name": "_srcChainId", "type": "uint16", "internalType": "uint16" }, - { "name": "_lookupHash", "type": "bytes32", "internalType": "bytes32" }, - { - "name": "_confirmations", - "type": "uint256", - "internalType": "uint256" - }, - { "name": "_blockData", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "validateTransactionProof", - "inputs": [ - { "name": "_srcChainId", "type": "uint16", "internalType": "uint16" }, - { "name": "_dstAddress", "type": "address", "internalType": "address" }, - { "name": "_gasLimit", "type": "uint256", "internalType": "uint256" }, - { "name": "_lookupHash", "type": "bytes32", "internalType": "bytes32" }, - { "name": "_blockData", "type": "bytes32", "internalType": "bytes32" }, - { - "name": "_transactionProof", - "type": "bytes", - "internalType": "bytes" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "withdrawNative", - "inputs": [ - { "name": "_to", "type": "address", "internalType": "address payable" }, - { "name": "_amount", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "withdrawZRO", - "inputs": [ - { "name": "_to", "type": "address", "internalType": "address" }, - { "name": "_amount", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "event", - "name": "AddInboundProofLibraryForChain", - "inputs": [ - { - "name": "chainId", - "type": "uint16", - "indexed": true, - "internalType": "uint16" - }, - { - "name": "lib", - "type": "address", - "indexed": false, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "AppConfigUpdated", - "inputs": [ - { - "name": "userApplication", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "configType", - "type": "uint256", - "indexed": true, - "internalType": "uint256" - }, - { - "name": "newConfig", - "type": "bytes", - "indexed": false, - "internalType": "bytes" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "EnableSupportedOutboundProof", - "inputs": [ - { - "name": "chainId", - "type": "uint16", - "indexed": true, - "internalType": "uint16" - }, - { - "name": "proofType", - "type": "uint16", - "indexed": false, - "internalType": "uint16" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "HashReceived", - "inputs": [ - { - "name": "srcChainId", - "type": "uint16", - "indexed": true, - "internalType": "uint16" - }, - { - "name": "oracle", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "lookupHash", - "type": "bytes32", - "indexed": false, - "internalType": "bytes32" - }, - { - "name": "blockData", - "type": "bytes32", - "indexed": false, - "internalType": "bytes32" - }, - { - "name": "confirmations", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "InvalidDst", - "inputs": [ - { - "name": "srcChainId", - "type": "uint16", - "indexed": true, - "internalType": "uint16" - }, - { - "name": "srcAddress", - "type": "bytes", - "indexed": false, - "internalType": "bytes" - }, - { - "name": "dstAddress", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "nonce", - "type": "uint64", - "indexed": false, - "internalType": "uint64" - }, - { - "name": "payloadHash", - "type": "bytes32", - "indexed": false, - "internalType": "bytes32" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "Packet", - "inputs": [ - { - "name": "payload", - "type": "bytes", - "indexed": false, - "internalType": "bytes" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "PacketReceived", - "inputs": [ - { - "name": "srcChainId", - "type": "uint16", - "indexed": true, - "internalType": "uint16" - }, - { - "name": "srcAddress", - "type": "bytes", - "indexed": false, - "internalType": "bytes" - }, - { - "name": "dstAddress", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "nonce", - "type": "uint64", - "indexed": false, - "internalType": "uint64" - }, - { - "name": "payloadHash", - "type": "bytes32", - "indexed": false, - "internalType": "bytes32" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "RelayerParams", - "inputs": [ - { - "name": "adapterParams", - "type": "bytes", - "indexed": false, - "internalType": "bytes" - }, - { - "name": "outboundProofType", - "type": "uint16", - "indexed": false, - "internalType": "uint16" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "SetChainAddressSize", - "inputs": [ - { - "name": "chainId", - "type": "uint16", - "indexed": true, - "internalType": "uint16" - }, - { - "name": "size", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "SetDefaultAdapterParamsForChainId", - "inputs": [ - { - "name": "chainId", - "type": "uint16", - "indexed": true, - "internalType": "uint16" - }, - { - "name": "proofType", - "type": "uint16", - "indexed": true, - "internalType": "uint16" - }, - { - "name": "adapterParams", - "type": "bytes", - "indexed": false, - "internalType": "bytes" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "SetDefaultConfigForChainId", - "inputs": [ - { - "name": "chainId", - "type": "uint16", - "indexed": true, - "internalType": "uint16" - }, - { - "name": "inboundProofLib", - "type": "uint16", - "indexed": false, - "internalType": "uint16" - }, - { - "name": "inboundBlockConfirm", - "type": "uint64", - "indexed": false, - "internalType": "uint64" - }, - { - "name": "relayer", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "outboundProofType", - "type": "uint16", - "indexed": false, - "internalType": "uint16" - }, - { - "name": "outboundBlockConfirm", - "type": "uint64", - "indexed": false, - "internalType": "uint64" - }, - { - "name": "oracle", - "type": "address", - "indexed": false, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "SetLayerZeroToken", - "inputs": [ - { - "name": "tokenAddress", - "type": "address", - "indexed": true, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "SetRemoteUln", - "inputs": [ - { - "name": "chainId", - "type": "uint16", - "indexed": true, - "internalType": "uint16" - }, - { - "name": "uln", - "type": "bytes32", - "indexed": false, - "internalType": "bytes32" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "SetTreasury", - "inputs": [ - { - "name": "treasuryAddress", - "type": "address", - "indexed": true, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "WithdrawNative", - "inputs": [ - { - "name": "msgSender", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "to", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "amount", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "WithdrawZRO", - "inputs": [ - { - "name": "msgSender", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "to", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "amount", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - } - ], - "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "methodIdentifiers": { - "accruedNativeFee(address)": "69412bfa", - "getAppConfig(uint16,address)": "a4662222", - "updateHash(uint16,bytes32,uint256,bytes32)": "704316e5", - "validateTransactionProof(uint16,address,uint256,bytes32,bytes32,bytes)": "987fa2d5", - "withdrawNative(address,uint256)": "07b18bde", - "withdrawZRO(address,uint256)": "8525b711" - }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint16\",\"name\":\"chainId\",\"type\":\"uint16\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"lib\",\"type\":\"address\"}],\"name\":\"AddInboundProofLibraryForChain\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"userApplication\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"configType\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"newConfig\",\"type\":\"bytes\"}],\"name\":\"AppConfigUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint16\",\"name\":\"chainId\",\"type\":\"uint16\"},{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"proofType\",\"type\":\"uint16\"}],\"name\":\"EnableSupportedOutboundProof\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint16\",\"name\":\"srcChainId\",\"type\":\"uint16\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oracle\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"lookupHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"blockData\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"confirmations\",\"type\":\"uint256\"}],\"name\":\"HashReceived\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint16\",\"name\":\"srcChainId\",\"type\":\"uint16\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"srcAddress\",\"type\":\"bytes\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"dstAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"payloadHash\",\"type\":\"bytes32\"}],\"name\":\"InvalidDst\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"}],\"name\":\"Packet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint16\",\"name\":\"srcChainId\",\"type\":\"uint16\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"srcAddress\",\"type\":\"bytes\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"dstAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"payloadHash\",\"type\":\"bytes32\"}],\"name\":\"PacketReceived\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"adapterParams\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"outboundProofType\",\"type\":\"uint16\"}],\"name\":\"RelayerParams\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint16\",\"name\":\"chainId\",\"type\":\"uint16\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"size\",\"type\":\"uint256\"}],\"name\":\"SetChainAddressSize\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint16\",\"name\":\"chainId\",\"type\":\"uint16\"},{\"indexed\":true,\"internalType\":\"uint16\",\"name\":\"proofType\",\"type\":\"uint16\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"adapterParams\",\"type\":\"bytes\"}],\"name\":\"SetDefaultAdapterParamsForChainId\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint16\",\"name\":\"chainId\",\"type\":\"uint16\"},{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"inboundProofLib\",\"type\":\"uint16\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"inboundBlockConfirm\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"relayer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"outboundProofType\",\"type\":\"uint16\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"outboundBlockConfirm\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oracle\",\"type\":\"address\"}],\"name\":\"SetDefaultConfigForChainId\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"name\":\"SetLayerZeroToken\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint16\",\"name\":\"chainId\",\"type\":\"uint16\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"uln\",\"type\":\"bytes32\"}],\"name\":\"SetRemoteUln\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"treasuryAddress\",\"type\":\"address\"}],\"name\":\"SetTreasury\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"msgSender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"WithdrawNative\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"msgSender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"WithdrawZRO\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"accruedNativeFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"_remoteChainId\",\"type\":\"uint16\"},{\"internalType\":\"address\",\"name\":\"_userApplicationAddress\",\"type\":\"address\"}],\"name\":\"getAppConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"uint16\",\"name\":\"inboundProofLibraryVersion\",\"type\":\"uint16\"},{\"internalType\":\"uint64\",\"name\":\"inboundBlockConfirmations\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"relayer\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"outboundProofType\",\"type\":\"uint16\"},{\"internalType\":\"uint64\",\"name\":\"outboundBlockConfirmations\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"oracle\",\"type\":\"address\"}],\"internalType\":\"struct ILayerZeroUltraLightNodeV2.ApplicationConfiguration\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"_srcChainId\",\"type\":\"uint16\"},{\"internalType\":\"bytes32\",\"name\":\"_lookupHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_confirmations\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"_blockData\",\"type\":\"bytes32\"}],\"name\":\"updateHash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"_srcChainId\",\"type\":\"uint16\"},{\"internalType\":\"address\",\"name\":\"_dstAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"_lookupHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_blockData\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_transactionProof\",\"type\":\"bytes\"}],\"name\":\"validateTransactionProof\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"withdrawNative\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"withdrawZRO\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/lz-evm-v1-0.7/contracts/interfaces/ILayerZeroUltraLightNodeV2.sol\":\"ILayerZeroUltraLightNodeV2\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/lz-evm-v1-0.7/contracts/interfaces/ILayerZeroUltraLightNodeV2.sol\":{\"keccak256\":\"0xf1f36bbbc40d03b96affa151affb47da75a1b69dc79f4b311841a072d12fdd22\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://9f4f188c2998ecbda28a389ad8038da15c2260b1df6a8d135b3d96422e292fda\",\"dweb:/ipfs/QmeThR83tcaM4CmxQ2AamTafsgjcbGMfZtYcDHqw2CcwKa\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { - "inputs": [ - { - "internalType": "uint16", - "name": "chainId", - "type": "uint16", - "indexed": true - }, - { - "internalType": "address", - "name": "lib", - "type": "address", - "indexed": false - } - ], - "type": "event", - "name": "AddInboundProofLibraryForChain", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "userApplication", - "type": "address", - "indexed": true - }, - { - "internalType": "uint256", - "name": "configType", - "type": "uint256", - "indexed": true - }, - { - "internalType": "bytes", - "name": "newConfig", - "type": "bytes", - "indexed": false - } - ], - "type": "event", - "name": "AppConfigUpdated", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "uint16", - "name": "chainId", - "type": "uint16", - "indexed": true - }, - { - "internalType": "uint16", - "name": "proofType", - "type": "uint16", - "indexed": false - } - ], - "type": "event", - "name": "EnableSupportedOutboundProof", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "uint16", - "name": "srcChainId", - "type": "uint16", - "indexed": true - }, - { - "internalType": "address", - "name": "oracle", - "type": "address", - "indexed": true - }, - { - "internalType": "bytes32", - "name": "lookupHash", - "type": "bytes32", - "indexed": false - }, - { - "internalType": "bytes32", - "name": "blockData", - "type": "bytes32", - "indexed": false - }, - { - "internalType": "uint256", - "name": "confirmations", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "HashReceived", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "uint16", - "name": "srcChainId", - "type": "uint16", - "indexed": true - }, - { - "internalType": "bytes", - "name": "srcAddress", - "type": "bytes", - "indexed": false - }, - { - "internalType": "address", - "name": "dstAddress", - "type": "address", - "indexed": true - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64", - "indexed": false - }, - { - "internalType": "bytes32", - "name": "payloadHash", - "type": "bytes32", - "indexed": false - } - ], - "type": "event", - "name": "InvalidDst", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "payload", - "type": "bytes", - "indexed": false - } - ], - "type": "event", - "name": "Packet", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "uint16", - "name": "srcChainId", - "type": "uint16", - "indexed": true - }, - { - "internalType": "bytes", - "name": "srcAddress", - "type": "bytes", - "indexed": false - }, - { - "internalType": "address", - "name": "dstAddress", - "type": "address", - "indexed": true - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64", - "indexed": false - }, - { - "internalType": "bytes32", - "name": "payloadHash", - "type": "bytes32", - "indexed": false - } - ], - "type": "event", - "name": "PacketReceived", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "adapterParams", - "type": "bytes", - "indexed": false - }, - { - "internalType": "uint16", - "name": "outboundProofType", - "type": "uint16", - "indexed": false - } - ], - "type": "event", - "name": "RelayerParams", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "uint16", - "name": "chainId", - "type": "uint16", - "indexed": true - }, - { - "internalType": "uint256", - "name": "size", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "SetChainAddressSize", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "uint16", - "name": "chainId", - "type": "uint16", - "indexed": true - }, - { - "internalType": "uint16", - "name": "proofType", - "type": "uint16", - "indexed": true - }, - { - "internalType": "bytes", - "name": "adapterParams", - "type": "bytes", - "indexed": false - } - ], - "type": "event", - "name": "SetDefaultAdapterParamsForChainId", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "uint16", - "name": "chainId", - "type": "uint16", - "indexed": true - }, - { - "internalType": "uint16", - "name": "inboundProofLib", - "type": "uint16", - "indexed": false - }, - { - "internalType": "uint64", - "name": "inboundBlockConfirm", - "type": "uint64", - "indexed": false - }, - { - "internalType": "address", - "name": "relayer", - "type": "address", - "indexed": false - }, - { - "internalType": "uint16", - "name": "outboundProofType", - "type": "uint16", - "indexed": false - }, - { - "internalType": "uint64", - "name": "outboundBlockConfirm", - "type": "uint64", - "indexed": false - }, - { - "internalType": "address", - "name": "oracle", - "type": "address", - "indexed": false - } - ], - "type": "event", - "name": "SetDefaultConfigForChainId", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "tokenAddress", - "type": "address", - "indexed": true - } - ], - "type": "event", - "name": "SetLayerZeroToken", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "uint16", - "name": "chainId", - "type": "uint16", - "indexed": true - }, - { - "internalType": "bytes32", - "name": "uln", - "type": "bytes32", - "indexed": false - } - ], - "type": "event", - "name": "SetRemoteUln", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "treasuryAddress", - "type": "address", - "indexed": true - } - ], - "type": "event", - "name": "SetTreasury", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "msgSender", - "type": "address", - "indexed": true - }, - { - "internalType": "address", - "name": "to", - "type": "address", - "indexed": true - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "WithdrawNative", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "msgSender", - "type": "address", - "indexed": true - }, - { - "internalType": "address", - "name": "to", - "type": "address", - "indexed": true - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "WithdrawZRO", - "anonymous": false - }, - { - "inputs": [ - { "internalType": "address", "name": "_address", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "accruedNativeFee", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ] - }, - { - "inputs": [ - { - "internalType": "uint16", - "name": "_remoteChainId", - "type": "uint16" - }, - { - "internalType": "address", - "name": "_userApplicationAddress", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function", - "name": "getAppConfig", - "outputs": [ - { - "internalType": "struct ILayerZeroUltraLightNodeV2.ApplicationConfiguration", - "name": "", - "type": "tuple", - "components": [ - { - "internalType": "uint16", - "name": "inboundProofLibraryVersion", - "type": "uint16" - }, - { - "internalType": "uint64", - "name": "inboundBlockConfirmations", - "type": "uint64" - }, - { - "internalType": "address", - "name": "relayer", - "type": "address" - }, - { - "internalType": "uint16", - "name": "outboundProofType", - "type": "uint16" - }, - { - "internalType": "uint64", - "name": "outboundBlockConfirmations", - "type": "uint64" - }, - { - "internalType": "address", - "name": "oracle", - "type": "address" - } - ] - } - ] - }, - { - "inputs": [ - { - "internalType": "uint16", - "name": "_srcChainId", - "type": "uint16" - }, - { - "internalType": "bytes32", - "name": "_lookupHash", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "_confirmations", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "_blockData", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "updateHash" - }, - { - "inputs": [ - { - "internalType": "uint16", - "name": "_srcChainId", - "type": "uint16" - }, - { - "internalType": "address", - "name": "_dstAddress", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_gasLimit", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "_lookupHash", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "_blockData", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "_transactionProof", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "validateTransactionProof" - }, - { - "inputs": [ - { - "internalType": "address payable", - "name": "_to", - "type": "address" - }, - { "internalType": "uint256", "name": "_amount", "type": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "withdrawNative" - }, - { - "inputs": [ - { "internalType": "address", "name": "_to", "type": "address" }, - { "internalType": "uint256", "name": "_amount", "type": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "withdrawZRO" - } - ], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/lz-evm-v1-0.7/contracts/interfaces/ILayerZeroUltraLightNodeV2.sol": "ILayerZeroUltraLightNodeV2" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/lz-evm-v1-0.7/contracts/interfaces/ILayerZeroUltraLightNodeV2.sol": { - "keccak256": "0xf1f36bbbc40d03b96affa151affb47da75a1b69dc79f4b311841a072d12fdd22", - "urls": [ - "bzz-raw://9f4f188c2998ecbda28a389ad8038da15c2260b1df6a8d135b3d96422e292fda", - "dweb:/ipfs/QmeThR83tcaM4CmxQ2AamTafsgjcbGMfZtYcDHqw2CcwKa" - ], - "license": "BUSL-1.1" - } - }, - "version": 1 - }, - "id": 49 -} diff --git a/examples/oft-movement/out/IMessageLib.sol/IMessageLib.json b/examples/oft-movement/out/IMessageLib.sol/IMessageLib.json deleted file mode 100644 index 83421c328..000000000 --- a/examples/oft-movement/out/IMessageLib.sol/IMessageLib.json +++ /dev/null @@ -1,242 +0,0 @@ -{ - "abi": [ - { - "type": "function", - "name": "getConfig", - "inputs": [ - { "name": "_eid", "type": "uint32", "internalType": "uint32" }, - { "name": "_oapp", "type": "address", "internalType": "address" }, - { "name": "_configType", "type": "uint32", "internalType": "uint32" } - ], - "outputs": [ - { "name": "config", "type": "bytes", "internalType": "bytes" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "isSupportedEid", - "inputs": [ - { "name": "_eid", "type": "uint32", "internalType": "uint32" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "messageLibType", - "inputs": [], - "outputs": [ - { "name": "", "type": "uint8", "internalType": "enum MessageLibType" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "setConfig", - "inputs": [ - { "name": "_oapp", "type": "address", "internalType": "address" }, - { - "name": "_config", - "type": "tuple[]", - "internalType": "struct SetConfigParam[]", - "components": [ - { "name": "eid", "type": "uint32", "internalType": "uint32" }, - { - "name": "configType", - "type": "uint32", - "internalType": "uint32" - }, - { "name": "config", "type": "bytes", "internalType": "bytes" } - ] - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "supportsInterface", - "inputs": [ - { "name": "interfaceId", "type": "bytes4", "internalType": "bytes4" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "version", - "inputs": [], - "outputs": [ - { "name": "major", "type": "uint64", "internalType": "uint64" }, - { "name": "minor", "type": "uint8", "internalType": "uint8" }, - { "name": "endpointVersion", "type": "uint8", "internalType": "uint8" } - ], - "stateMutability": "view" - } - ], - "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "methodIdentifiers": { - "getConfig(uint32,address,uint32)": "9c33abf7", - "isSupportedEid(uint32)": "6750cd4c", - "messageLibType()": "1881d94d", - "setConfig(address,(uint32,uint32,bytes)[])": "20efd722", - "supportsInterface(bytes4)": "01ffc9a7", - "version()": "54fd4d50" - }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"_oapp\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_configType\",\"type\":\"uint32\"}],\"name\":\"getConfig\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"config\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"}],\"name\":\"isSupportedEid\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"messageLibType\",\"outputs\":[{\"internalType\":\"enum MessageLibType\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_oapp\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"configType\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"config\",\"type\":\"bytes\"}],\"internalType\":\"struct SetConfigParam[]\",\"name\":\"_config\",\"type\":\"tuple[]\"}],\"name\":\"setConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"major\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"minor\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"endpointVersion\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"supportsInterface(bytes4)\":{\"details\":\"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section] to learn more about how these ids are created. This function call must use less than 30 000 gas.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol\":\"IMessageLib\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol\":{\"keccak256\":\"0x5cf5f24751b4e3ea1c9c5ded07cedfdfd62566b6daaffcc0144733859c9dba0c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cae7e35007a714f007ea08045ef7c0cfa6c91fd2425b5028b2d49abad357a5f0\",\"dweb:/ipfs/QmcDBs5tsiyB35b8cwzWQWNnpkawb3uuHRaqE77Hxm2tve\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol\":{\"keccak256\":\"0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d8ff6a8a89297fa127f86b54e0db3eba1d6a6eeb4f6398d3c84d569665ac8f1b\",\"dweb:/ipfs/QmVSwhw6xFDrLRAX4RXaCM47yBaBtac4wf36DYEq6KCTvT\"]},\"node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { "internalType": "address", "name": "_oapp", "type": "address" }, - { - "internalType": "uint32", - "name": "_configType", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function", - "name": "getConfig", - "outputs": [ - { "internalType": "bytes", "name": "config", "type": "bytes" } - ] - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" } - ], - "stateMutability": "view", - "type": "function", - "name": "isSupportedEid", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "messageLibType", - "outputs": [ - { - "internalType": "enum MessageLibType", - "name": "", - "type": "uint8" - } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "_oapp", "type": "address" }, - { - "internalType": "struct SetConfigParam[]", - "name": "_config", - "type": "tuple[]", - "components": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" }, - { - "internalType": "uint32", - "name": "configType", - "type": "uint32" - }, - { "internalType": "bytes", "name": "config", "type": "bytes" } - ] - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setConfig" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "stateMutability": "view", - "type": "function", - "name": "supportsInterface", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "version", - "outputs": [ - { "internalType": "uint64", "name": "major", "type": "uint64" }, - { "internalType": "uint8", "name": "minor", "type": "uint8" }, - { - "internalType": "uint8", - "name": "endpointVersion", - "type": "uint8" - } - ] - } - ], - "devdoc": { - "kind": "dev", - "methods": { - "supportsInterface(bytes4)": { - "details": "Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section] to learn more about how these ids are created. This function call must use less than 30 000 gas." - } - }, - "version": 1 - }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol": "IMessageLib" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol": { - "keccak256": "0x5cf5f24751b4e3ea1c9c5ded07cedfdfd62566b6daaffcc0144733859c9dba0c", - "urls": [ - "bzz-raw://cae7e35007a714f007ea08045ef7c0cfa6c91fd2425b5028b2d49abad357a5f0", - "dweb:/ipfs/QmcDBs5tsiyB35b8cwzWQWNnpkawb3uuHRaqE77Hxm2tve" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol": { - "keccak256": "0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc", - "urls": [ - "bzz-raw://d8ff6a8a89297fa127f86b54e0db3eba1d6a6eeb4f6398d3c84d569665ac8f1b", - "dweb:/ipfs/QmVSwhw6xFDrLRAX4RXaCM47yBaBtac4wf36DYEq6KCTvT" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol": { - "keccak256": "0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8", - "urls": [ - "bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621", - "dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL" - ], - "license": "MIT" - } - }, - "version": 1 - }, - "id": 4 -} diff --git a/examples/oft-movement/out/IMessageLibManager.sol/IMessageLibManager.json b/examples/oft-movement/out/IMessageLibManager.sol/IMessageLibManager.json deleted file mode 100644 index 950948115..000000000 --- a/examples/oft-movement/out/IMessageLibManager.sol/IMessageLibManager.json +++ /dev/null @@ -1,871 +0,0 @@ -{ - "abi": [ - { - "type": "function", - "name": "defaultReceiveLibrary", - "inputs": [ - { "name": "_eid", "type": "uint32", "internalType": "uint32" } - ], - "outputs": [{ "name": "", "type": "address", "internalType": "address" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "defaultReceiveLibraryTimeout", - "inputs": [ - { "name": "_eid", "type": "uint32", "internalType": "uint32" } - ], - "outputs": [ - { "name": "lib", "type": "address", "internalType": "address" }, - { "name": "expiry", "type": "uint256", "internalType": "uint256" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "defaultSendLibrary", - "inputs": [ - { "name": "_eid", "type": "uint32", "internalType": "uint32" } - ], - "outputs": [{ "name": "", "type": "address", "internalType": "address" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getConfig", - "inputs": [ - { "name": "_oapp", "type": "address", "internalType": "address" }, - { "name": "_lib", "type": "address", "internalType": "address" }, - { "name": "_eid", "type": "uint32", "internalType": "uint32" }, - { "name": "_configType", "type": "uint32", "internalType": "uint32" } - ], - "outputs": [ - { "name": "config", "type": "bytes", "internalType": "bytes" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getReceiveLibrary", - "inputs": [ - { "name": "_receiver", "type": "address", "internalType": "address" }, - { "name": "_eid", "type": "uint32", "internalType": "uint32" } - ], - "outputs": [ - { "name": "lib", "type": "address", "internalType": "address" }, - { "name": "isDefault", "type": "bool", "internalType": "bool" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getRegisteredLibraries", - "inputs": [], - "outputs": [ - { "name": "", "type": "address[]", "internalType": "address[]" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getSendLibrary", - "inputs": [ - { "name": "_sender", "type": "address", "internalType": "address" }, - { "name": "_eid", "type": "uint32", "internalType": "uint32" } - ], - "outputs": [ - { "name": "lib", "type": "address", "internalType": "address" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "isDefaultSendLibrary", - "inputs": [ - { "name": "_sender", "type": "address", "internalType": "address" }, - { "name": "_eid", "type": "uint32", "internalType": "uint32" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "isRegisteredLibrary", - "inputs": [ - { "name": "_lib", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "isSupportedEid", - "inputs": [ - { "name": "_eid", "type": "uint32", "internalType": "uint32" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "isValidReceiveLibrary", - "inputs": [ - { "name": "_receiver", "type": "address", "internalType": "address" }, - { "name": "_eid", "type": "uint32", "internalType": "uint32" }, - { "name": "_lib", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "receiveLibraryTimeout", - "inputs": [ - { "name": "_receiver", "type": "address", "internalType": "address" }, - { "name": "_eid", "type": "uint32", "internalType": "uint32" } - ], - "outputs": [ - { "name": "lib", "type": "address", "internalType": "address" }, - { "name": "expiry", "type": "uint256", "internalType": "uint256" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "registerLibrary", - "inputs": [ - { "name": "_lib", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setConfig", - "inputs": [ - { "name": "_oapp", "type": "address", "internalType": "address" }, - { "name": "_lib", "type": "address", "internalType": "address" }, - { - "name": "_params", - "type": "tuple[]", - "internalType": "struct SetConfigParam[]", - "components": [ - { "name": "eid", "type": "uint32", "internalType": "uint32" }, - { - "name": "configType", - "type": "uint32", - "internalType": "uint32" - }, - { "name": "config", "type": "bytes", "internalType": "bytes" } - ] - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setDefaultReceiveLibrary", - "inputs": [ - { "name": "_eid", "type": "uint32", "internalType": "uint32" }, - { "name": "_newLib", "type": "address", "internalType": "address" }, - { "name": "_gracePeriod", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setDefaultReceiveLibraryTimeout", - "inputs": [ - { "name": "_eid", "type": "uint32", "internalType": "uint32" }, - { "name": "_lib", "type": "address", "internalType": "address" }, - { "name": "_expiry", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setDefaultSendLibrary", - "inputs": [ - { "name": "_eid", "type": "uint32", "internalType": "uint32" }, - { "name": "_newLib", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setReceiveLibrary", - "inputs": [ - { "name": "_oapp", "type": "address", "internalType": "address" }, - { "name": "_eid", "type": "uint32", "internalType": "uint32" }, - { "name": "_newLib", "type": "address", "internalType": "address" }, - { "name": "_gracePeriod", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setReceiveLibraryTimeout", - "inputs": [ - { "name": "_oapp", "type": "address", "internalType": "address" }, - { "name": "_eid", "type": "uint32", "internalType": "uint32" }, - { "name": "_lib", "type": "address", "internalType": "address" }, - { "name": "_expiry", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setSendLibrary", - "inputs": [ - { "name": "_oapp", "type": "address", "internalType": "address" }, - { "name": "_eid", "type": "uint32", "internalType": "uint32" }, - { "name": "_newLib", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "event", - "name": "DefaultReceiveLibrarySet", - "inputs": [ - { - "name": "eid", - "type": "uint32", - "indexed": false, - "internalType": "uint32" - }, - { - "name": "newLib", - "type": "address", - "indexed": false, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "DefaultReceiveLibraryTimeoutSet", - "inputs": [ - { - "name": "eid", - "type": "uint32", - "indexed": false, - "internalType": "uint32" - }, - { - "name": "oldLib", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "expiry", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "DefaultSendLibrarySet", - "inputs": [ - { - "name": "eid", - "type": "uint32", - "indexed": false, - "internalType": "uint32" - }, - { - "name": "newLib", - "type": "address", - "indexed": false, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "LibraryRegistered", - "inputs": [ - { - "name": "newLib", - "type": "address", - "indexed": false, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "ReceiveLibrarySet", - "inputs": [ - { - "name": "receiver", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "eid", - "type": "uint32", - "indexed": false, - "internalType": "uint32" - }, - { - "name": "newLib", - "type": "address", - "indexed": false, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "ReceiveLibraryTimeoutSet", - "inputs": [ - { - "name": "receiver", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "eid", - "type": "uint32", - "indexed": false, - "internalType": "uint32" - }, - { - "name": "oldLib", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "timeout", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "SendLibrarySet", - "inputs": [ - { - "name": "sender", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "eid", - "type": "uint32", - "indexed": false, - "internalType": "uint32" - }, - { - "name": "newLib", - "type": "address", - "indexed": false, - "internalType": "address" - } - ], - "anonymous": false - } - ], - "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "methodIdentifiers": { - "defaultReceiveLibrary(uint32)": "6f50a803", - "defaultReceiveLibraryTimeout(uint32)": "6e83f5bb", - "defaultSendLibrary(uint32)": "f64be4c7", - "getConfig(address,address,uint32,uint32)": "2b3197b9", - "getReceiveLibrary(address,uint32)": "402f8468", - "getRegisteredLibraries()": "9132e5c3", - "getSendLibrary(address,uint32)": "b96a277f", - "isDefaultSendLibrary(address,uint32)": "dc93c8a2", - "isRegisteredLibrary(address)": "dc706a62", - "isSupportedEid(uint32)": "6750cd4c", - "isValidReceiveLibrary(address,uint32,address)": "9d7f9775", - "receiveLibraryTimeout(address,uint32)": "ef667aa1", - "registerLibrary(address)": "e8964e81", - "setConfig(address,address,(uint32,uint32,bytes)[])": "6dbd9f90", - "setDefaultReceiveLibrary(uint32,address,uint256)": "a718531b", - "setDefaultReceiveLibraryTimeout(uint32,address,uint256)": "d4b4ec8f", - "setDefaultSendLibrary(uint32,address)": "aafea312", - "setReceiveLibrary(address,uint32,address,uint256)": "6a14d715", - "setReceiveLibraryTimeout(address,uint32,address,uint256)": "183c834f", - "setSendLibrary(address,uint32,address)": "9535ff30" - }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newLib\",\"type\":\"address\"}],\"name\":\"DefaultReceiveLibrarySet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldLib\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"expiry\",\"type\":\"uint256\"}],\"name\":\"DefaultReceiveLibraryTimeoutSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newLib\",\"type\":\"address\"}],\"name\":\"DefaultSendLibrarySet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newLib\",\"type\":\"address\"}],\"name\":\"LibraryRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newLib\",\"type\":\"address\"}],\"name\":\"ReceiveLibrarySet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldLib\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timeout\",\"type\":\"uint256\"}],\"name\":\"ReceiveLibraryTimeoutSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newLib\",\"type\":\"address\"}],\"name\":\"SendLibrarySet\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"}],\"name\":\"defaultReceiveLibrary\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"}],\"name\":\"defaultReceiveLibraryTimeout\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"lib\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"expiry\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"}],\"name\":\"defaultSendLibrary\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_oapp\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_lib\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"_configType\",\"type\":\"uint32\"}],\"name\":\"getConfig\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"config\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"}],\"name\":\"getReceiveLibrary\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"lib\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isDefault\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRegisteredLibraries\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"}],\"name\":\"getSendLibrary\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"lib\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"}],\"name\":\"isDefaultSendLibrary\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_lib\",\"type\":\"address\"}],\"name\":\"isRegisteredLibrary\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"}],\"name\":\"isSupportedEid\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"_lib\",\"type\":\"address\"}],\"name\":\"isValidReceiveLibrary\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"}],\"name\":\"receiveLibraryTimeout\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"lib\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"expiry\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_lib\",\"type\":\"address\"}],\"name\":\"registerLibrary\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_oapp\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_lib\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"configType\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"config\",\"type\":\"bytes\"}],\"internalType\":\"struct SetConfigParam[]\",\"name\":\"_params\",\"type\":\"tuple[]\"}],\"name\":\"setConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"_newLib\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_gracePeriod\",\"type\":\"uint256\"}],\"name\":\"setDefaultReceiveLibrary\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"_lib\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_expiry\",\"type\":\"uint256\"}],\"name\":\"setDefaultReceiveLibraryTimeout\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"_newLib\",\"type\":\"address\"}],\"name\":\"setDefaultSendLibrary\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_oapp\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"_newLib\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_gracePeriod\",\"type\":\"uint256\"}],\"name\":\"setReceiveLibrary\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_oapp\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"_lib\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_expiry\",\"type\":\"uint256\"}],\"name\":\"setReceiveLibraryTimeout\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_oapp\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"_newLib\",\"type\":\"address\"}],\"name\":\"setSendLibrary\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"setSendLibrary(address,uint32,address)\":{\"notice\":\"------------------- OApp interfaces -------------------\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol\":\"IMessageLibManager\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol\":{\"keccak256\":\"0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d8ff6a8a89297fa127f86b54e0db3eba1d6a6eeb4f6398d3c84d569665ac8f1b\",\"dweb:/ipfs/QmVSwhw6xFDrLRAX4RXaCM47yBaBtac4wf36DYEq6KCTvT\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { - "inputs": [ - { - "internalType": "uint32", - "name": "eid", - "type": "uint32", - "indexed": false - }, - { - "internalType": "address", - "name": "newLib", - "type": "address", - "indexed": false - } - ], - "type": "event", - "name": "DefaultReceiveLibrarySet", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "eid", - "type": "uint32", - "indexed": false - }, - { - "internalType": "address", - "name": "oldLib", - "type": "address", - "indexed": false - }, - { - "internalType": "uint256", - "name": "expiry", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "DefaultReceiveLibraryTimeoutSet", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "eid", - "type": "uint32", - "indexed": false - }, - { - "internalType": "address", - "name": "newLib", - "type": "address", - "indexed": false - } - ], - "type": "event", - "name": "DefaultSendLibrarySet", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newLib", - "type": "address", - "indexed": false - } - ], - "type": "event", - "name": "LibraryRegistered", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "receiver", - "type": "address", - "indexed": false - }, - { - "internalType": "uint32", - "name": "eid", - "type": "uint32", - "indexed": false - }, - { - "internalType": "address", - "name": "newLib", - "type": "address", - "indexed": false - } - ], - "type": "event", - "name": "ReceiveLibrarySet", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "receiver", - "type": "address", - "indexed": false - }, - { - "internalType": "uint32", - "name": "eid", - "type": "uint32", - "indexed": false - }, - { - "internalType": "address", - "name": "oldLib", - "type": "address", - "indexed": false - }, - { - "internalType": "uint256", - "name": "timeout", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "ReceiveLibraryTimeoutSet", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address", - "indexed": false - }, - { - "internalType": "uint32", - "name": "eid", - "type": "uint32", - "indexed": false - }, - { - "internalType": "address", - "name": "newLib", - "type": "address", - "indexed": false - } - ], - "type": "event", - "name": "SendLibrarySet", - "anonymous": false - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" } - ], - "stateMutability": "view", - "type": "function", - "name": "defaultReceiveLibrary", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ] - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" } - ], - "stateMutability": "view", - "type": "function", - "name": "defaultReceiveLibraryTimeout", - "outputs": [ - { "internalType": "address", "name": "lib", "type": "address" }, - { "internalType": "uint256", "name": "expiry", "type": "uint256" } - ] - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" } - ], - "stateMutability": "view", - "type": "function", - "name": "defaultSendLibrary", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "_oapp", "type": "address" }, - { "internalType": "address", "name": "_lib", "type": "address" }, - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { - "internalType": "uint32", - "name": "_configType", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function", - "name": "getConfig", - "outputs": [ - { "internalType": "bytes", "name": "config", "type": "bytes" } - ] - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_receiver", - "type": "address" - }, - { "internalType": "uint32", "name": "_eid", "type": "uint32" } - ], - "stateMutability": "view", - "type": "function", - "name": "getReceiveLibrary", - "outputs": [ - { "internalType": "address", "name": "lib", "type": "address" }, - { "internalType": "bool", "name": "isDefault", "type": "bool" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "getRegisteredLibraries", - "outputs": [ - { "internalType": "address[]", "name": "", "type": "address[]" } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "_sender", "type": "address" }, - { "internalType": "uint32", "name": "_eid", "type": "uint32" } - ], - "stateMutability": "view", - "type": "function", - "name": "getSendLibrary", - "outputs": [ - { "internalType": "address", "name": "lib", "type": "address" } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "_sender", "type": "address" }, - { "internalType": "uint32", "name": "_eid", "type": "uint32" } - ], - "stateMutability": "view", - "type": "function", - "name": "isDefaultSendLibrary", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "address", "name": "_lib", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "isRegisteredLibrary", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" } - ], - "stateMutability": "view", - "type": "function", - "name": "isSupportedEid", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_receiver", - "type": "address" - }, - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { "internalType": "address", "name": "_lib", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "isValidReceiveLibrary", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_receiver", - "type": "address" - }, - { "internalType": "uint32", "name": "_eid", "type": "uint32" } - ], - "stateMutability": "view", - "type": "function", - "name": "receiveLibraryTimeout", - "outputs": [ - { "internalType": "address", "name": "lib", "type": "address" }, - { "internalType": "uint256", "name": "expiry", "type": "uint256" } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "_lib", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "registerLibrary" - }, - { - "inputs": [ - { "internalType": "address", "name": "_oapp", "type": "address" }, - { "internalType": "address", "name": "_lib", "type": "address" }, - { - "internalType": "struct SetConfigParam[]", - "name": "_params", - "type": "tuple[]", - "components": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" }, - { - "internalType": "uint32", - "name": "configType", - "type": "uint32" - }, - { "internalType": "bytes", "name": "config", "type": "bytes" } - ] - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setConfig" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { "internalType": "address", "name": "_newLib", "type": "address" }, - { - "internalType": "uint256", - "name": "_gracePeriod", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setDefaultReceiveLibrary" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { "internalType": "address", "name": "_lib", "type": "address" }, - { "internalType": "uint256", "name": "_expiry", "type": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setDefaultReceiveLibraryTimeout" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { "internalType": "address", "name": "_newLib", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setDefaultSendLibrary" - }, - { - "inputs": [ - { "internalType": "address", "name": "_oapp", "type": "address" }, - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { "internalType": "address", "name": "_newLib", "type": "address" }, - { - "internalType": "uint256", - "name": "_gracePeriod", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setReceiveLibrary" - }, - { - "inputs": [ - { "internalType": "address", "name": "_oapp", "type": "address" }, - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { "internalType": "address", "name": "_lib", "type": "address" }, - { "internalType": "uint256", "name": "_expiry", "type": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setReceiveLibraryTimeout" - }, - { - "inputs": [ - { "internalType": "address", "name": "_oapp", "type": "address" }, - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { "internalType": "address", "name": "_newLib", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setSendLibrary" - } - ], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "userdoc": { - "kind": "user", - "methods": { - "setSendLibrary(address,uint32,address)": { - "notice": "------------------- OApp interfaces -------------------" - } - }, - "version": 1 - } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol": "IMessageLibManager" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol": { - "keccak256": "0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc", - "urls": [ - "bzz-raw://d8ff6a8a89297fa127f86b54e0db3eba1d6a6eeb4f6398d3c84d569665ac8f1b", - "dweb:/ipfs/QmVSwhw6xFDrLRAX4RXaCM47yBaBtac4wf36DYEq6KCTvT" - ], - "license": "MIT" - } - }, - "version": 1 - }, - "id": 5 -} diff --git a/examples/oft-movement/out/IMessagingChannel.sol/IMessagingChannel.json b/examples/oft-movement/out/IMessagingChannel.sol/IMessagingChannel.json deleted file mode 100644 index b277f5145..000000000 --- a/examples/oft-movement/out/IMessagingChannel.sol/IMessagingChannel.json +++ /dev/null @@ -1,507 +0,0 @@ -{ - "abi": [ - { - "type": "function", - "name": "burn", - "inputs": [ - { "name": "_oapp", "type": "address", "internalType": "address" }, - { "name": "_srcEid", "type": "uint32", "internalType": "uint32" }, - { "name": "_sender", "type": "bytes32", "internalType": "bytes32" }, - { "name": "_nonce", "type": "uint64", "internalType": "uint64" }, - { "name": "_payloadHash", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "eid", - "inputs": [], - "outputs": [{ "name": "", "type": "uint32", "internalType": "uint32" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "inboundNonce", - "inputs": [ - { "name": "_receiver", "type": "address", "internalType": "address" }, - { "name": "_srcEid", "type": "uint32", "internalType": "uint32" }, - { "name": "_sender", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [{ "name": "", "type": "uint64", "internalType": "uint64" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "inboundPayloadHash", - "inputs": [ - { "name": "_receiver", "type": "address", "internalType": "address" }, - { "name": "_srcEid", "type": "uint32", "internalType": "uint32" }, - { "name": "_sender", "type": "bytes32", "internalType": "bytes32" }, - { "name": "_nonce", "type": "uint64", "internalType": "uint64" } - ], - "outputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "lazyInboundNonce", - "inputs": [ - { "name": "_receiver", "type": "address", "internalType": "address" }, - { "name": "_srcEid", "type": "uint32", "internalType": "uint32" }, - { "name": "_sender", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [{ "name": "", "type": "uint64", "internalType": "uint64" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "nextGuid", - "inputs": [ - { "name": "_sender", "type": "address", "internalType": "address" }, - { "name": "_dstEid", "type": "uint32", "internalType": "uint32" }, - { "name": "_receiver", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "nilify", - "inputs": [ - { "name": "_oapp", "type": "address", "internalType": "address" }, - { "name": "_srcEid", "type": "uint32", "internalType": "uint32" }, - { "name": "_sender", "type": "bytes32", "internalType": "bytes32" }, - { "name": "_nonce", "type": "uint64", "internalType": "uint64" }, - { "name": "_payloadHash", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "outboundNonce", - "inputs": [ - { "name": "_sender", "type": "address", "internalType": "address" }, - { "name": "_dstEid", "type": "uint32", "internalType": "uint32" }, - { "name": "_receiver", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [{ "name": "", "type": "uint64", "internalType": "uint64" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "skip", - "inputs": [ - { "name": "_oapp", "type": "address", "internalType": "address" }, - { "name": "_srcEid", "type": "uint32", "internalType": "uint32" }, - { "name": "_sender", "type": "bytes32", "internalType": "bytes32" }, - { "name": "_nonce", "type": "uint64", "internalType": "uint64" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "event", - "name": "InboundNonceSkipped", - "inputs": [ - { - "name": "srcEid", - "type": "uint32", - "indexed": false, - "internalType": "uint32" - }, - { - "name": "sender", - "type": "bytes32", - "indexed": false, - "internalType": "bytes32" - }, - { - "name": "receiver", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "nonce", - "type": "uint64", - "indexed": false, - "internalType": "uint64" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "PacketBurnt", - "inputs": [ - { - "name": "srcEid", - "type": "uint32", - "indexed": false, - "internalType": "uint32" - }, - { - "name": "sender", - "type": "bytes32", - "indexed": false, - "internalType": "bytes32" - }, - { - "name": "receiver", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "nonce", - "type": "uint64", - "indexed": false, - "internalType": "uint64" - }, - { - "name": "payloadHash", - "type": "bytes32", - "indexed": false, - "internalType": "bytes32" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "PacketNilified", - "inputs": [ - { - "name": "srcEid", - "type": "uint32", - "indexed": false, - "internalType": "uint32" - }, - { - "name": "sender", - "type": "bytes32", - "indexed": false, - "internalType": "bytes32" - }, - { - "name": "receiver", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "nonce", - "type": "uint64", - "indexed": false, - "internalType": "uint64" - }, - { - "name": "payloadHash", - "type": "bytes32", - "indexed": false, - "internalType": "bytes32" - } - ], - "anonymous": false - } - ], - "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "methodIdentifiers": { - "burn(address,uint32,bytes32,uint64,bytes32)": "40f80683", - "eid()": "416ecebf", - "inboundNonce(address,uint32,bytes32)": "a0dd43fc", - "inboundPayloadHash(address,uint32,bytes32,uint64)": "c9fc7bcd", - "lazyInboundNonce(address,uint32,bytes32)": "5b17bb70", - "nextGuid(address,uint32,bytes32)": "aafe5e07", - "nilify(address,uint32,bytes32,uint64,bytes32)": "2e80fbf3", - "outboundNonce(address,uint32,bytes32)": "9c6d7340", - "skip(address,uint32,bytes32,uint64)": "d70b8902" - }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"name\":\"InboundNonceSkipped\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"payloadHash\",\"type\":\"bytes32\"}],\"name\":\"PacketBurnt\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"payloadHash\",\"type\":\"bytes32\"}],\"name\":\"PacketNilified\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_oapp\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"_nonce\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"_payloadHash\",\"type\":\"bytes32\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"eid\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_sender\",\"type\":\"bytes32\"}],\"name\":\"inboundNonce\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"_nonce\",\"type\":\"uint64\"}],\"name\":\"inboundPayloadHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_sender\",\"type\":\"bytes32\"}],\"name\":\"lazyInboundNonce\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_receiver\",\"type\":\"bytes32\"}],\"name\":\"nextGuid\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_oapp\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"_nonce\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"_payloadHash\",\"type\":\"bytes32\"}],\"name\":\"nilify\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_receiver\",\"type\":\"bytes32\"}],\"name\":\"outboundNonce\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_oapp\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"_nonce\",\"type\":\"uint64\"}],\"name\":\"skip\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol\":\"IMessagingChannel\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol\":{\"keccak256\":\"0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7e1b245d58221d16d8b5e0f01ef3e289a24a7df1ace3b94239e4d5b954ad5927\",\"dweb:/ipfs/Qmappsgp7PCY9rSSNE9Cdn4BTRX591WfCSEgq2HxhA3z6S\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { - "inputs": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32", - "indexed": false - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32", - "indexed": false - }, - { - "internalType": "address", - "name": "receiver", - "type": "address", - "indexed": false - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64", - "indexed": false - } - ], - "type": "event", - "name": "InboundNonceSkipped", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32", - "indexed": false - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32", - "indexed": false - }, - { - "internalType": "address", - "name": "receiver", - "type": "address", - "indexed": false - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64", - "indexed": false - }, - { - "internalType": "bytes32", - "name": "payloadHash", - "type": "bytes32", - "indexed": false - } - ], - "type": "event", - "name": "PacketBurnt", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32", - "indexed": false - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32", - "indexed": false - }, - { - "internalType": "address", - "name": "receiver", - "type": "address", - "indexed": false - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64", - "indexed": false - }, - { - "internalType": "bytes32", - "name": "payloadHash", - "type": "bytes32", - "indexed": false - } - ], - "type": "event", - "name": "PacketNilified", - "anonymous": false - }, - { - "inputs": [ - { "internalType": "address", "name": "_oapp", "type": "address" }, - { "internalType": "uint32", "name": "_srcEid", "type": "uint32" }, - { "internalType": "bytes32", "name": "_sender", "type": "bytes32" }, - { "internalType": "uint64", "name": "_nonce", "type": "uint64" }, - { - "internalType": "bytes32", - "name": "_payloadHash", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "burn" - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "eid", - "outputs": [ - { "internalType": "uint32", "name": "", "type": "uint32" } - ] - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_receiver", - "type": "address" - }, - { "internalType": "uint32", "name": "_srcEid", "type": "uint32" }, - { "internalType": "bytes32", "name": "_sender", "type": "bytes32" } - ], - "stateMutability": "view", - "type": "function", - "name": "inboundNonce", - "outputs": [ - { "internalType": "uint64", "name": "", "type": "uint64" } - ] - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_receiver", - "type": "address" - }, - { "internalType": "uint32", "name": "_srcEid", "type": "uint32" }, - { "internalType": "bytes32", "name": "_sender", "type": "bytes32" }, - { "internalType": "uint64", "name": "_nonce", "type": "uint64" } - ], - "stateMutability": "view", - "type": "function", - "name": "inboundPayloadHash", - "outputs": [ - { "internalType": "bytes32", "name": "", "type": "bytes32" } - ] - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_receiver", - "type": "address" - }, - { "internalType": "uint32", "name": "_srcEid", "type": "uint32" }, - { "internalType": "bytes32", "name": "_sender", "type": "bytes32" } - ], - "stateMutability": "view", - "type": "function", - "name": "lazyInboundNonce", - "outputs": [ - { "internalType": "uint64", "name": "", "type": "uint64" } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "_sender", "type": "address" }, - { "internalType": "uint32", "name": "_dstEid", "type": "uint32" }, - { - "internalType": "bytes32", - "name": "_receiver", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function", - "name": "nextGuid", - "outputs": [ - { "internalType": "bytes32", "name": "", "type": "bytes32" } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "_oapp", "type": "address" }, - { "internalType": "uint32", "name": "_srcEid", "type": "uint32" }, - { "internalType": "bytes32", "name": "_sender", "type": "bytes32" }, - { "internalType": "uint64", "name": "_nonce", "type": "uint64" }, - { - "internalType": "bytes32", - "name": "_payloadHash", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "nilify" - }, - { - "inputs": [ - { "internalType": "address", "name": "_sender", "type": "address" }, - { "internalType": "uint32", "name": "_dstEid", "type": "uint32" }, - { - "internalType": "bytes32", - "name": "_receiver", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function", - "name": "outboundNonce", - "outputs": [ - { "internalType": "uint64", "name": "", "type": "uint64" } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "_oapp", "type": "address" }, - { "internalType": "uint32", "name": "_srcEid", "type": "uint32" }, - { "internalType": "bytes32", "name": "_sender", "type": "bytes32" }, - { "internalType": "uint64", "name": "_nonce", "type": "uint64" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "skip" - } - ], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol": "IMessagingChannel" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol": { - "keccak256": "0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972", - "urls": [ - "bzz-raw://7e1b245d58221d16d8b5e0f01ef3e289a24a7df1ace3b94239e4d5b954ad5927", - "dweb:/ipfs/Qmappsgp7PCY9rSSNE9Cdn4BTRX591WfCSEgq2HxhA3z6S" - ], - "license": "MIT" - } - }, - "version": 1 - }, - "id": 6 -} diff --git a/examples/oft-movement/out/IMessagingComposer.sol/IMessagingComposer.json b/examples/oft-movement/out/IMessagingComposer.sol/IMessagingComposer.json deleted file mode 100644 index 4af1ddebb..000000000 --- a/examples/oft-movement/out/IMessagingComposer.sol/IMessagingComposer.json +++ /dev/null @@ -1,404 +0,0 @@ -{ - "abi": [ - { - "type": "function", - "name": "composeQueue", - "inputs": [ - { "name": "_from", "type": "address", "internalType": "address" }, - { "name": "_to", "type": "address", "internalType": "address" }, - { "name": "_guid", "type": "bytes32", "internalType": "bytes32" }, - { "name": "_index", "type": "uint16", "internalType": "uint16" } - ], - "outputs": [ - { "name": "messageHash", "type": "bytes32", "internalType": "bytes32" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "lzCompose", - "inputs": [ - { "name": "_from", "type": "address", "internalType": "address" }, - { "name": "_to", "type": "address", "internalType": "address" }, - { "name": "_guid", "type": "bytes32", "internalType": "bytes32" }, - { "name": "_index", "type": "uint16", "internalType": "uint16" }, - { "name": "_message", "type": "bytes", "internalType": "bytes" }, - { "name": "_extraData", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [], - "stateMutability": "payable" - }, - { - "type": "function", - "name": "sendCompose", - "inputs": [ - { "name": "_to", "type": "address", "internalType": "address" }, - { "name": "_guid", "type": "bytes32", "internalType": "bytes32" }, - { "name": "_index", "type": "uint16", "internalType": "uint16" }, - { "name": "_message", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "event", - "name": "ComposeDelivered", - "inputs": [ - { - "name": "from", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "to", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "guid", - "type": "bytes32", - "indexed": false, - "internalType": "bytes32" - }, - { - "name": "index", - "type": "uint16", - "indexed": false, - "internalType": "uint16" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "ComposeSent", - "inputs": [ - { - "name": "from", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "to", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "guid", - "type": "bytes32", - "indexed": false, - "internalType": "bytes32" - }, - { - "name": "index", - "type": "uint16", - "indexed": false, - "internalType": "uint16" - }, - { - "name": "message", - "type": "bytes", - "indexed": false, - "internalType": "bytes" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "LzComposeAlert", - "inputs": [ - { - "name": "from", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "to", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "executor", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "guid", - "type": "bytes32", - "indexed": false, - "internalType": "bytes32" - }, - { - "name": "index", - "type": "uint16", - "indexed": false, - "internalType": "uint16" - }, - { - "name": "gas", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - }, - { - "name": "value", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - }, - { - "name": "message", - "type": "bytes", - "indexed": false, - "internalType": "bytes" - }, - { - "name": "extraData", - "type": "bytes", - "indexed": false, - "internalType": "bytes" - }, - { - "name": "reason", - "type": "bytes", - "indexed": false, - "internalType": "bytes" - } - ], - "anonymous": false - } - ], - "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "methodIdentifiers": { - "composeQueue(address,address,bytes32,uint16)": "35d330b0", - "lzCompose(address,address,bytes32,uint16,bytes,bytes)": "91d20fa1", - "sendCompose(address,bytes32,uint16,bytes)": "7cb59012" - }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"index\",\"type\":\"uint16\"}],\"name\":\"ComposeDelivered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"index\",\"type\":\"uint16\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"ComposeSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"executor\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"index\",\"type\":\"uint16\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gas\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"reason\",\"type\":\"bytes\"}],\"name\":\"LzComposeAlert\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_guid\",\"type\":\"bytes32\"},{\"internalType\":\"uint16\",\"name\":\"_index\",\"type\":\"uint16\"}],\"name\":\"composeQueue\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageHash\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_guid\",\"type\":\"bytes32\"},{\"internalType\":\"uint16\",\"name\":\"_index\",\"type\":\"uint16\"},{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"lzCompose\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_guid\",\"type\":\"bytes32\"},{\"internalType\":\"uint16\",\"name\":\"_index\",\"type\":\"uint16\"},{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"}],\"name\":\"sendCompose\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol\":\"IMessagingComposer\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol\":{\"keccak256\":\"0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b18b23a1643fc6636c4ad9d9023e2e6ca2d3c2a4a046482d4655bff09950598d\",\"dweb:/ipfs/Qma6G5SqiovwrMPfgqTrRngK1HWW373Wkf9c6YP2NhXpPk\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address", - "indexed": false - }, - { - "internalType": "address", - "name": "to", - "type": "address", - "indexed": false - }, - { - "internalType": "bytes32", - "name": "guid", - "type": "bytes32", - "indexed": false - }, - { - "internalType": "uint16", - "name": "index", - "type": "uint16", - "indexed": false - } - ], - "type": "event", - "name": "ComposeDelivered", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address", - "indexed": false - }, - { - "internalType": "address", - "name": "to", - "type": "address", - "indexed": false - }, - { - "internalType": "bytes32", - "name": "guid", - "type": "bytes32", - "indexed": false - }, - { - "internalType": "uint16", - "name": "index", - "type": "uint16", - "indexed": false - }, - { - "internalType": "bytes", - "name": "message", - "type": "bytes", - "indexed": false - } - ], - "type": "event", - "name": "ComposeSent", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address", - "indexed": true - }, - { - "internalType": "address", - "name": "to", - "type": "address", - "indexed": true - }, - { - "internalType": "address", - "name": "executor", - "type": "address", - "indexed": true - }, - { - "internalType": "bytes32", - "name": "guid", - "type": "bytes32", - "indexed": false - }, - { - "internalType": "uint16", - "name": "index", - "type": "uint16", - "indexed": false - }, - { - "internalType": "uint256", - "name": "gas", - "type": "uint256", - "indexed": false - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256", - "indexed": false - }, - { - "internalType": "bytes", - "name": "message", - "type": "bytes", - "indexed": false - }, - { - "internalType": "bytes", - "name": "extraData", - "type": "bytes", - "indexed": false - }, - { - "internalType": "bytes", - "name": "reason", - "type": "bytes", - "indexed": false - } - ], - "type": "event", - "name": "LzComposeAlert", - "anonymous": false - }, - { - "inputs": [ - { "internalType": "address", "name": "_from", "type": "address" }, - { "internalType": "address", "name": "_to", "type": "address" }, - { "internalType": "bytes32", "name": "_guid", "type": "bytes32" }, - { "internalType": "uint16", "name": "_index", "type": "uint16" } - ], - "stateMutability": "view", - "type": "function", - "name": "composeQueue", - "outputs": [ - { - "internalType": "bytes32", - "name": "messageHash", - "type": "bytes32" - } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "_from", "type": "address" }, - { "internalType": "address", "name": "_to", "type": "address" }, - { "internalType": "bytes32", "name": "_guid", "type": "bytes32" }, - { "internalType": "uint16", "name": "_index", "type": "uint16" }, - { "internalType": "bytes", "name": "_message", "type": "bytes" }, - { "internalType": "bytes", "name": "_extraData", "type": "bytes" } - ], - "stateMutability": "payable", - "type": "function", - "name": "lzCompose" - }, - { - "inputs": [ - { "internalType": "address", "name": "_to", "type": "address" }, - { "internalType": "bytes32", "name": "_guid", "type": "bytes32" }, - { "internalType": "uint16", "name": "_index", "type": "uint16" }, - { "internalType": "bytes", "name": "_message", "type": "bytes" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "sendCompose" - } - ], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol": "IMessagingComposer" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol": { - "keccak256": "0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901", - "urls": [ - "bzz-raw://b18b23a1643fc6636c4ad9d9023e2e6ca2d3c2a4a046482d4655bff09950598d", - "dweb:/ipfs/Qma6G5SqiovwrMPfgqTrRngK1HWW373Wkf9c6YP2NhXpPk" - ], - "license": "MIT" - } - }, - "version": 1 - }, - "id": 7 -} diff --git a/examples/oft-movement/out/IMessagingContext.sol/IMessagingContext.json b/examples/oft-movement/out/IMessagingContext.sol/IMessagingContext.json deleted file mode 100644 index 61b1b3576..000000000 --- a/examples/oft-movement/out/IMessagingContext.sol/IMessagingContext.json +++ /dev/null @@ -1,85 +0,0 @@ -{ - "abi": [ - { - "type": "function", - "name": "getSendContext", - "inputs": [], - "outputs": [ - { "name": "dstEid", "type": "uint32", "internalType": "uint32" }, - { "name": "sender", "type": "address", "internalType": "address" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "isSendingMessage", - "inputs": [], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - } - ], - "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "methodIdentifiers": { - "getSendContext()": "14f651a9", - "isSendingMessage()": "79624ca9" - }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"getSendContext\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isSendingMessage\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol\":\"IMessagingContext\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol\":{\"keccak256\":\"0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5173fc9143bea314b159ca5a9adb5626659ef763bc598e27de5fa46efe3291a6\",\"dweb:/ipfs/QmSLFeMFPmVeGxT4sxRPW28ictjAS22M8rLeYRu9TXkA6D\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "getSendContext", - "outputs": [ - { "internalType": "uint32", "name": "dstEid", "type": "uint32" }, - { "internalType": "address", "name": "sender", "type": "address" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "isSendingMessage", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - } - ], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol": "IMessagingContext" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol": { - "keccak256": "0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e", - "urls": [ - "bzz-raw://5173fc9143bea314b159ca5a9adb5626659ef763bc598e27de5fa46efe3291a6", - "dweb:/ipfs/QmSLFeMFPmVeGxT4sxRPW28ictjAS22M8rLeYRu9TXkA6D" - ], - "license": "MIT" - } - }, - "version": 1 - }, - "id": 8 -} diff --git a/examples/oft-movement/out/IMulticall3.sol/IMulticall3.json b/examples/oft-movement/out/IMulticall3.sol/IMulticall3.json deleted file mode 100644 index ca395116b..000000000 --- a/examples/oft-movement/out/IMulticall3.sol/IMulticall3.json +++ /dev/null @@ -1,693 +0,0 @@ -{ - "abi": [ - { - "type": "function", - "name": "aggregate", - "inputs": [ - { - "name": "calls", - "type": "tuple[]", - "internalType": "struct IMulticall3.Call[]", - "components": [ - { "name": "target", "type": "address", "internalType": "address" }, - { "name": "callData", "type": "bytes", "internalType": "bytes" } - ] - } - ], - "outputs": [ - { "name": "blockNumber", "type": "uint256", "internalType": "uint256" }, - { "name": "returnData", "type": "bytes[]", "internalType": "bytes[]" } - ], - "stateMutability": "payable" - }, - { - "type": "function", - "name": "aggregate3", - "inputs": [ - { - "name": "calls", - "type": "tuple[]", - "internalType": "struct IMulticall3.Call3[]", - "components": [ - { "name": "target", "type": "address", "internalType": "address" }, - { "name": "allowFailure", "type": "bool", "internalType": "bool" }, - { "name": "callData", "type": "bytes", "internalType": "bytes" } - ] - } - ], - "outputs": [ - { - "name": "returnData", - "type": "tuple[]", - "internalType": "struct IMulticall3.Result[]", - "components": [ - { "name": "success", "type": "bool", "internalType": "bool" }, - { "name": "returnData", "type": "bytes", "internalType": "bytes" } - ] - } - ], - "stateMutability": "payable" - }, - { - "type": "function", - "name": "aggregate3Value", - "inputs": [ - { - "name": "calls", - "type": "tuple[]", - "internalType": "struct IMulticall3.Call3Value[]", - "components": [ - { "name": "target", "type": "address", "internalType": "address" }, - { "name": "allowFailure", "type": "bool", "internalType": "bool" }, - { "name": "value", "type": "uint256", "internalType": "uint256" }, - { "name": "callData", "type": "bytes", "internalType": "bytes" } - ] - } - ], - "outputs": [ - { - "name": "returnData", - "type": "tuple[]", - "internalType": "struct IMulticall3.Result[]", - "components": [ - { "name": "success", "type": "bool", "internalType": "bool" }, - { "name": "returnData", "type": "bytes", "internalType": "bytes" } - ] - } - ], - "stateMutability": "payable" - }, - { - "type": "function", - "name": "blockAndAggregate", - "inputs": [ - { - "name": "calls", - "type": "tuple[]", - "internalType": "struct IMulticall3.Call[]", - "components": [ - { "name": "target", "type": "address", "internalType": "address" }, - { "name": "callData", "type": "bytes", "internalType": "bytes" } - ] - } - ], - "outputs": [ - { "name": "blockNumber", "type": "uint256", "internalType": "uint256" }, - { "name": "blockHash", "type": "bytes32", "internalType": "bytes32" }, - { - "name": "returnData", - "type": "tuple[]", - "internalType": "struct IMulticall3.Result[]", - "components": [ - { "name": "success", "type": "bool", "internalType": "bool" }, - { "name": "returnData", "type": "bytes", "internalType": "bytes" } - ] - } - ], - "stateMutability": "payable" - }, - { - "type": "function", - "name": "getBasefee", - "inputs": [], - "outputs": [ - { "name": "basefee", "type": "uint256", "internalType": "uint256" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getBlockHash", - "inputs": [ - { "name": "blockNumber", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [ - { "name": "blockHash", "type": "bytes32", "internalType": "bytes32" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getBlockNumber", - "inputs": [], - "outputs": [ - { "name": "blockNumber", "type": "uint256", "internalType": "uint256" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getChainId", - "inputs": [], - "outputs": [ - { "name": "chainid", "type": "uint256", "internalType": "uint256" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getCurrentBlockCoinbase", - "inputs": [], - "outputs": [ - { "name": "coinbase", "type": "address", "internalType": "address" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getCurrentBlockDifficulty", - "inputs": [], - "outputs": [ - { "name": "difficulty", "type": "uint256", "internalType": "uint256" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getCurrentBlockGasLimit", - "inputs": [], - "outputs": [ - { "name": "gaslimit", "type": "uint256", "internalType": "uint256" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getCurrentBlockTimestamp", - "inputs": [], - "outputs": [ - { "name": "timestamp", "type": "uint256", "internalType": "uint256" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getEthBalance", - "inputs": [ - { "name": "addr", "type": "address", "internalType": "address" } - ], - "outputs": [ - { "name": "balance", "type": "uint256", "internalType": "uint256" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getLastBlockHash", - "inputs": [], - "outputs": [ - { "name": "blockHash", "type": "bytes32", "internalType": "bytes32" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "tryAggregate", - "inputs": [ - { "name": "requireSuccess", "type": "bool", "internalType": "bool" }, - { - "name": "calls", - "type": "tuple[]", - "internalType": "struct IMulticall3.Call[]", - "components": [ - { "name": "target", "type": "address", "internalType": "address" }, - { "name": "callData", "type": "bytes", "internalType": "bytes" } - ] - } - ], - "outputs": [ - { - "name": "returnData", - "type": "tuple[]", - "internalType": "struct IMulticall3.Result[]", - "components": [ - { "name": "success", "type": "bool", "internalType": "bool" }, - { "name": "returnData", "type": "bytes", "internalType": "bytes" } - ] - } - ], - "stateMutability": "payable" - }, - { - "type": "function", - "name": "tryBlockAndAggregate", - "inputs": [ - { "name": "requireSuccess", "type": "bool", "internalType": "bool" }, - { - "name": "calls", - "type": "tuple[]", - "internalType": "struct IMulticall3.Call[]", - "components": [ - { "name": "target", "type": "address", "internalType": "address" }, - { "name": "callData", "type": "bytes", "internalType": "bytes" } - ] - } - ], - "outputs": [ - { "name": "blockNumber", "type": "uint256", "internalType": "uint256" }, - { "name": "blockHash", "type": "bytes32", "internalType": "bytes32" }, - { - "name": "returnData", - "type": "tuple[]", - "internalType": "struct IMulticall3.Result[]", - "components": [ - { "name": "success", "type": "bool", "internalType": "bool" }, - { "name": "returnData", "type": "bytes", "internalType": "bytes" } - ] - } - ], - "stateMutability": "payable" - } - ], - "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "methodIdentifiers": { - "aggregate((address,bytes)[])": "252dba42", - "aggregate3((address,bool,bytes)[])": "82ad56cb", - "aggregate3Value((address,bool,uint256,bytes)[])": "174dea71", - "blockAndAggregate((address,bytes)[])": "c3077fa9", - "getBasefee()": "3e64a696", - "getBlockHash(uint256)": "ee82ac5e", - "getBlockNumber()": "42cbb15c", - "getChainId()": "3408e470", - "getCurrentBlockCoinbase()": "a8b0574e", - "getCurrentBlockDifficulty()": "72425d9d", - "getCurrentBlockGasLimit()": "86d516e8", - "getCurrentBlockTimestamp()": "0f28c97d", - "getEthBalance(address)": "4d2301cc", - "getLastBlockHash()": "27e86d6e", - "tryAggregate(bool,(address,bytes)[])": "bce38bd7", - "tryBlockAndAggregate(bool,(address,bytes)[])": "399542e9" - }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"internalType\":\"struct IMulticall3.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"}],\"name\":\"aggregate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"blockNumber\",\"type\":\"uint256\"},{\"internalType\":\"bytes[]\",\"name\":\"returnData\",\"type\":\"bytes[]\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"allowFailure\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"internalType\":\"struct IMulticall3.Call3[]\",\"name\":\"calls\",\"type\":\"tuple[]\"}],\"name\":\"aggregate3\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"internalType\":\"struct IMulticall3.Result[]\",\"name\":\"returnData\",\"type\":\"tuple[]\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"allowFailure\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"internalType\":\"struct IMulticall3.Call3Value[]\",\"name\":\"calls\",\"type\":\"tuple[]\"}],\"name\":\"aggregate3Value\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"internalType\":\"struct IMulticall3.Result[]\",\"name\":\"returnData\",\"type\":\"tuple[]\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"internalType\":\"struct IMulticall3.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"}],\"name\":\"blockAndAggregate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"blockNumber\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"internalType\":\"struct IMulticall3.Result[]\",\"name\":\"returnData\",\"type\":\"tuple[]\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBasefee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"basefee\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"blockNumber\",\"type\":\"uint256\"}],\"name\":\"getBlockHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBlockNumber\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"blockNumber\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getChainId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"chainid\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCurrentBlockCoinbase\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"coinbase\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCurrentBlockDifficulty\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"difficulty\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCurrentBlockGasLimit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"gaslimit\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCurrentBlockTimestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"getEthBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLastBlockHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"requireSuccess\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"internalType\":\"struct IMulticall3.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"}],\"name\":\"tryAggregate\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"internalType\":\"struct IMulticall3.Result[]\",\"name\":\"returnData\",\"type\":\"tuple[]\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"requireSuccess\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"internalType\":\"struct IMulticall3.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"}],\"name\":\"tryBlockAndAggregate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"blockNumber\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"internalType\":\"struct IMulticall3.Result[]\",\"name\":\"returnData\",\"type\":\"tuple[]\"}],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/interfaces/IMulticall3.sol\":\"IMulticall3\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/interfaces/IMulticall3.sol\":{\"keccak256\":\"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0\",\"dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { - "inputs": [ - { - "internalType": "struct IMulticall3.Call[]", - "name": "calls", - "type": "tuple[]", - "components": [ - { - "internalType": "address", - "name": "target", - "type": "address" - }, - { "internalType": "bytes", "name": "callData", "type": "bytes" } - ] - } - ], - "stateMutability": "payable", - "type": "function", - "name": "aggregate", - "outputs": [ - { - "internalType": "uint256", - "name": "blockNumber", - "type": "uint256" - }, - { - "internalType": "bytes[]", - "name": "returnData", - "type": "bytes[]" - } - ] - }, - { - "inputs": [ - { - "internalType": "struct IMulticall3.Call3[]", - "name": "calls", - "type": "tuple[]", - "components": [ - { - "internalType": "address", - "name": "target", - "type": "address" - }, - { - "internalType": "bool", - "name": "allowFailure", - "type": "bool" - }, - { "internalType": "bytes", "name": "callData", "type": "bytes" } - ] - } - ], - "stateMutability": "payable", - "type": "function", - "name": "aggregate3", - "outputs": [ - { - "internalType": "struct IMulticall3.Result[]", - "name": "returnData", - "type": "tuple[]", - "components": [ - { "internalType": "bool", "name": "success", "type": "bool" }, - { - "internalType": "bytes", - "name": "returnData", - "type": "bytes" - } - ] - } - ] - }, - { - "inputs": [ - { - "internalType": "struct IMulticall3.Call3Value[]", - "name": "calls", - "type": "tuple[]", - "components": [ - { - "internalType": "address", - "name": "target", - "type": "address" - }, - { - "internalType": "bool", - "name": "allowFailure", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { "internalType": "bytes", "name": "callData", "type": "bytes" } - ] - } - ], - "stateMutability": "payable", - "type": "function", - "name": "aggregate3Value", - "outputs": [ - { - "internalType": "struct IMulticall3.Result[]", - "name": "returnData", - "type": "tuple[]", - "components": [ - { "internalType": "bool", "name": "success", "type": "bool" }, - { - "internalType": "bytes", - "name": "returnData", - "type": "bytes" - } - ] - } - ] - }, - { - "inputs": [ - { - "internalType": "struct IMulticall3.Call[]", - "name": "calls", - "type": "tuple[]", - "components": [ - { - "internalType": "address", - "name": "target", - "type": "address" - }, - { "internalType": "bytes", "name": "callData", "type": "bytes" } - ] - } - ], - "stateMutability": "payable", - "type": "function", - "name": "blockAndAggregate", - "outputs": [ - { - "internalType": "uint256", - "name": "blockNumber", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "blockHash", - "type": "bytes32" - }, - { - "internalType": "struct IMulticall3.Result[]", - "name": "returnData", - "type": "tuple[]", - "components": [ - { "internalType": "bool", "name": "success", "type": "bool" }, - { - "internalType": "bytes", - "name": "returnData", - "type": "bytes" - } - ] - } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "getBasefee", - "outputs": [ - { "internalType": "uint256", "name": "basefee", "type": "uint256" } - ] - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "blockNumber", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function", - "name": "getBlockHash", - "outputs": [ - { - "internalType": "bytes32", - "name": "blockHash", - "type": "bytes32" - } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "getBlockNumber", - "outputs": [ - { - "internalType": "uint256", - "name": "blockNumber", - "type": "uint256" - } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "getChainId", - "outputs": [ - { "internalType": "uint256", "name": "chainid", "type": "uint256" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "getCurrentBlockCoinbase", - "outputs": [ - { "internalType": "address", "name": "coinbase", "type": "address" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "getCurrentBlockDifficulty", - "outputs": [ - { - "internalType": "uint256", - "name": "difficulty", - "type": "uint256" - } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "getCurrentBlockGasLimit", - "outputs": [ - { "internalType": "uint256", "name": "gaslimit", "type": "uint256" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "getCurrentBlockTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "timestamp", - "type": "uint256" - } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "addr", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "getEthBalance", - "outputs": [ - { "internalType": "uint256", "name": "balance", "type": "uint256" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "getLastBlockHash", - "outputs": [ - { - "internalType": "bytes32", - "name": "blockHash", - "type": "bytes32" - } - ] - }, - { - "inputs": [ - { - "internalType": "bool", - "name": "requireSuccess", - "type": "bool" - }, - { - "internalType": "struct IMulticall3.Call[]", - "name": "calls", - "type": "tuple[]", - "components": [ - { - "internalType": "address", - "name": "target", - "type": "address" - }, - { "internalType": "bytes", "name": "callData", "type": "bytes" } - ] - } - ], - "stateMutability": "payable", - "type": "function", - "name": "tryAggregate", - "outputs": [ - { - "internalType": "struct IMulticall3.Result[]", - "name": "returnData", - "type": "tuple[]", - "components": [ - { "internalType": "bool", "name": "success", "type": "bool" }, - { - "internalType": "bytes", - "name": "returnData", - "type": "bytes" - } - ] - } - ] - }, - { - "inputs": [ - { - "internalType": "bool", - "name": "requireSuccess", - "type": "bool" - }, - { - "internalType": "struct IMulticall3.Call[]", - "name": "calls", - "type": "tuple[]", - "components": [ - { - "internalType": "address", - "name": "target", - "type": "address" - }, - { "internalType": "bytes", "name": "callData", "type": "bytes" } - ] - } - ], - "stateMutability": "payable", - "type": "function", - "name": "tryBlockAndAggregate", - "outputs": [ - { - "internalType": "uint256", - "name": "blockNumber", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "blockHash", - "type": "bytes32" - }, - { - "internalType": "struct IMulticall3.Result[]", - "name": "returnData", - "type": "tuple[]", - "components": [ - { "internalType": "bool", "name": "success", "type": "bool" }, - { - "internalType": "bytes", - "name": "returnData", - "type": "bytes" - } - ] - } - ] - } - ], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/interfaces/IMulticall3.sol": "IMulticall3" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/interfaces/IMulticall3.sol": { - "keccak256": "0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a", - "urls": [ - "bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0", - "dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2" - ], - "license": "MIT" - } - }, - "version": 1 - }, - "id": 101 -} diff --git a/examples/oft-movement/out/IOAppComposer.sol/IOAppComposer.json b/examples/oft-movement/out/IOAppComposer.sol/IOAppComposer.json deleted file mode 100644 index 8acf5e7f8..000000000 --- a/examples/oft-movement/out/IOAppComposer.sol/IOAppComposer.json +++ /dev/null @@ -1,110 +0,0 @@ -{ - "abi": [ - { - "type": "function", - "name": "lzCompose", - "inputs": [ - { "name": "_from", "type": "address", "internalType": "address" }, - { "name": "_guid", "type": "bytes32", "internalType": "bytes32" }, - { "name": "_message", "type": "bytes", "internalType": "bytes" }, - { "name": "_executor", "type": "address", "internalType": "address" }, - { "name": "_extraData", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [], - "stateMutability": "payable" - } - ], - "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "methodIdentifiers": { - "lzCompose(address,bytes32,bytes,address,bytes)": "d0a10260" - }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_guid\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"_executor\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"lzCompose\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This interface defines the OApp Composer, allowing developers to inherit only the OApp package without the protocol.\",\"kind\":\"dev\",\"methods\":{\"lzCompose(address,bytes32,bytes,address,bytes)\":{\"details\":\"To ensure non-reentrancy, implementers of this interface MUST assert msg.sender is the corresponding EndpointV2 contract (i.e., onlyEndpointV2).\",\"params\":{\"_executor\":\"The address of the executor for the composed message.\",\"_extraData\":\"Additional arbitrary data in bytes passed by the entity who executes the lzCompose.\",\"_from\":\"The address initiating the composition, typically the OApp where the lzReceive was called.\",\"_guid\":\"The unique identifier for the corresponding LayerZero src/dst tx.\",\"_message\":\"The composed message payload in bytes. NOT necessarily the same payload passed via lzReceive.\"}}},\"title\":\"IOAppComposer\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"lzCompose(address,bytes32,bytes,address,bytes)\":{\"notice\":\"Composes a LayerZero message from an OApp.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppComposer.sol\":\"IOAppComposer\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroComposer.sol\":{\"keccak256\":\"0xfaca7205d4211ee9208a7e59171e2301731f3d2a20c49b4a839821871f5fdd49\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f254bc60ac26687b5320a43a556e30777b0745abf7cd64d5f4720d9b1d1f7fdf\",\"dweb:/ipfs/QmRSJEZVgxaC3L2DdE6s8P5qkYfM3V5JMeseeFJJqGR4xz\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppComposer.sol\":{\"keccak256\":\"0xe5014c411acb2b59dd74ae74a1bab02cf32d94a41a548a5ab553d64aeeb55dae\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://29dfb7bc121002fc7e7931c34eb17af0ae0f0127dcc3199511c83a58a917160d\",\"dweb:/ipfs/QmPdq1wcRRBdUP169LHCLoLuPRunN9eR71TQN42FjGpowx\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { - "inputs": [ - { "internalType": "address", "name": "_from", "type": "address" }, - { "internalType": "bytes32", "name": "_guid", "type": "bytes32" }, - { "internalType": "bytes", "name": "_message", "type": "bytes" }, - { - "internalType": "address", - "name": "_executor", - "type": "address" - }, - { "internalType": "bytes", "name": "_extraData", "type": "bytes" } - ], - "stateMutability": "payable", - "type": "function", - "name": "lzCompose" - } - ], - "devdoc": { - "kind": "dev", - "methods": { - "lzCompose(address,bytes32,bytes,address,bytes)": { - "details": "To ensure non-reentrancy, implementers of this interface MUST assert msg.sender is the corresponding EndpointV2 contract (i.e., onlyEndpointV2).", - "params": { - "_executor": "The address of the executor for the composed message.", - "_extraData": "Additional arbitrary data in bytes passed by the entity who executes the lzCompose.", - "_from": "The address initiating the composition, typically the OApp where the lzReceive was called.", - "_guid": "The unique identifier for the corresponding LayerZero src/dst tx.", - "_message": "The composed message payload in bytes. NOT necessarily the same payload passed via lzReceive." - } - } - }, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": { - "lzCompose(address,bytes32,bytes,address,bytes)": { - "notice": "Composes a LayerZero message from an OApp." - } - }, - "version": 1 - } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppComposer.sol": "IOAppComposer" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroComposer.sol": { - "keccak256": "0xfaca7205d4211ee9208a7e59171e2301731f3d2a20c49b4a839821871f5fdd49", - "urls": [ - "bzz-raw://f254bc60ac26687b5320a43a556e30777b0745abf7cd64d5f4720d9b1d1f7fdf", - "dweb:/ipfs/QmRSJEZVgxaC3L2DdE6s8P5qkYfM3V5JMeseeFJJqGR4xz" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppComposer.sol": { - "keccak256": "0xe5014c411acb2b59dd74ae74a1bab02cf32d94a41a548a5ab553d64aeeb55dae", - "urls": [ - "bzz-raw://29dfb7bc121002fc7e7931c34eb17af0ae0f0127dcc3199511c83a58a917160d", - "dweb:/ipfs/QmPdq1wcRRBdUP169LHCLoLuPRunN9eR71TQN42FjGpowx" - ], - "license": "MIT" - } - }, - "version": 1 - }, - "id": 54 -} diff --git a/examples/oft-movement/out/IOAppCore.sol/IOAppCore.json b/examples/oft-movement/out/IOAppCore.sol/IOAppCore.json deleted file mode 100644 index 6ca29e283..000000000 --- a/examples/oft-movement/out/IOAppCore.sol/IOAppCore.json +++ /dev/null @@ -1,335 +0,0 @@ -{ - "abi": [ - { - "type": "function", - "name": "endpoint", - "inputs": [], - "outputs": [ - { - "name": "iEndpoint", - "type": "address", - "internalType": "contract ILayerZeroEndpointV2" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "oAppVersion", - "inputs": [], - "outputs": [ - { "name": "senderVersion", "type": "uint64", "internalType": "uint64" }, - { - "name": "receiverVersion", - "type": "uint64", - "internalType": "uint64" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "peers", - "inputs": [ - { "name": "_eid", "type": "uint32", "internalType": "uint32" } - ], - "outputs": [ - { "name": "peer", "type": "bytes32", "internalType": "bytes32" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "setDelegate", - "inputs": [ - { "name": "_delegate", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setPeer", - "inputs": [ - { "name": "_eid", "type": "uint32", "internalType": "uint32" }, - { "name": "_peer", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "event", - "name": "PeerSet", - "inputs": [ - { - "name": "eid", - "type": "uint32", - "indexed": false, - "internalType": "uint32" - }, - { - "name": "peer", - "type": "bytes32", - "indexed": false, - "internalType": "bytes32" - } - ], - "anonymous": false - }, - { "type": "error", "name": "InvalidDelegate", "inputs": [] }, - { "type": "error", "name": "InvalidEndpointCall", "inputs": [] }, - { - "type": "error", - "name": "NoPeer", - "inputs": [{ "name": "eid", "type": "uint32", "internalType": "uint32" }] - }, - { - "type": "error", - "name": "OnlyPeer", - "inputs": [ - { "name": "eid", "type": "uint32", "internalType": "uint32" }, - { "name": "sender", "type": "bytes32", "internalType": "bytes32" } - ] - } - ], - "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "methodIdentifiers": { - "endpoint()": "5e280f11", - "oAppVersion()": "17442b70", - "peers(uint32)": "bb0b6a53", - "setDelegate(address)": "ca5eb5e1", - "setPeer(uint32,bytes32)": "3400288b" - }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"InvalidDelegate\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidEndpointCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"}],\"name\":\"NoPeer\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"}],\"name\":\"OnlyPeer\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"peer\",\"type\":\"bytes32\"}],\"name\":\"PeerSet\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"endpoint\",\"outputs\":[{\"internalType\":\"contract ILayerZeroEndpointV2\",\"name\":\"iEndpoint\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"oAppVersion\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"senderVersion\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"receiverVersion\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"}],\"name\":\"peers\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"peer\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_delegate\",\"type\":\"address\"}],\"name\":\"setDelegate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_peer\",\"type\":\"bytes32\"}],\"name\":\"setPeer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"endpoint()\":{\"returns\":{\"iEndpoint\":\"The LayerZero endpoint as an interface.\"}},\"oAppVersion()\":{\"returns\":{\"receiverVersion\":\"The version of the OAppReceiver.sol contract.\",\"senderVersion\":\"The version of the OAppSender.sol contract.\"}},\"peers(uint32)\":{\"params\":{\"_eid\":\"The endpoint ID.\"},\"returns\":{\"peer\":\"The peer address (OApp instance) associated with the corresponding endpoint.\"}},\"setDelegate(address)\":{\"params\":{\"_delegate\":\"The address of the delegate to be set.\"}},\"setPeer(uint32,bytes32)\":{\"params\":{\"_eid\":\"The endpoint ID.\",\"_peer\":\"The address of the peer to be associated with the corresponding endpoint.\"}}},\"title\":\"IOAppCore\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"endpoint()\":{\"notice\":\"Retrieves the LayerZero endpoint associated with the OApp.\"},\"oAppVersion()\":{\"notice\":\"Retrieves the OApp version information.\"},\"peers(uint32)\":{\"notice\":\"Retrieves the peer (OApp) associated with a corresponding endpoint.\"},\"setDelegate(address)\":{\"notice\":\"Sets the delegate address for the OApp Core.\"},\"setPeer(uint32,bytes32)\":{\"notice\":\"Sets the peer address (OApp instance) for a corresponding endpoint.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppCore.sol\":\"IOAppCore\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\":{\"keccak256\":\"0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bacc29fd3866af71e59cb0bdc1cf82c882a4a7f4e2652fd413c9f12649762083\",\"dweb:/ipfs/QmZh2toLnrQDWaNYhS5K4NoW7Vxd2GdZx9KA77vKEDLAqs\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol\":{\"keccak256\":\"0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d8ff6a8a89297fa127f86b54e0db3eba1d6a6eeb4f6398d3c84d569665ac8f1b\",\"dweb:/ipfs/QmVSwhw6xFDrLRAX4RXaCM47yBaBtac4wf36DYEq6KCTvT\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol\":{\"keccak256\":\"0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7e1b245d58221d16d8b5e0f01ef3e289a24a7df1ace3b94239e4d5b954ad5927\",\"dweb:/ipfs/Qmappsgp7PCY9rSSNE9Cdn4BTRX591WfCSEgq2HxhA3z6S\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol\":{\"keccak256\":\"0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b18b23a1643fc6636c4ad9d9023e2e6ca2d3c2a4a046482d4655bff09950598d\",\"dweb:/ipfs/Qma6G5SqiovwrMPfgqTrRngK1HWW373Wkf9c6YP2NhXpPk\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol\":{\"keccak256\":\"0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5173fc9143bea314b159ca5a9adb5626659ef763bc598e27de5fa46efe3291a6\",\"dweb:/ipfs/QmSLFeMFPmVeGxT4sxRPW28ictjAS22M8rLeYRu9TXkA6D\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppCore.sol\":{\"keccak256\":\"0x40e49f2de74506e1da5dcaed53a39853f691647f4ceb0fccc8f49a68d3f47c58\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4a1deb2a6a3eb1fb83936c9578469142bff470295f403d7d07d955a76be3adbd\",\"dweb:/ipfs/QmS9bjSfBaE4YhQ1PCQ1TknbEPbNfRXzBK9E7SaPGyiZEv\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { "inputs": [], "type": "error", "name": "InvalidDelegate" }, - { "inputs": [], "type": "error", "name": "InvalidEndpointCall" }, - { - "inputs": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" } - ], - "type": "error", - "name": "NoPeer" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" }, - { "internalType": "bytes32", "name": "sender", "type": "bytes32" } - ], - "type": "error", - "name": "OnlyPeer" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "eid", - "type": "uint32", - "indexed": false - }, - { - "internalType": "bytes32", - "name": "peer", - "type": "bytes32", - "indexed": false - } - ], - "type": "event", - "name": "PeerSet", - "anonymous": false - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "endpoint", - "outputs": [ - { - "internalType": "contract ILayerZeroEndpointV2", - "name": "iEndpoint", - "type": "address" - } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "oAppVersion", - "outputs": [ - { - "internalType": "uint64", - "name": "senderVersion", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "receiverVersion", - "type": "uint64" - } - ] - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" } - ], - "stateMutability": "view", - "type": "function", - "name": "peers", - "outputs": [ - { "internalType": "bytes32", "name": "peer", "type": "bytes32" } - ] - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_delegate", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setDelegate" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { "internalType": "bytes32", "name": "_peer", "type": "bytes32" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setPeer" - } - ], - "devdoc": { - "kind": "dev", - "methods": { - "endpoint()": { - "returns": { - "iEndpoint": "The LayerZero endpoint as an interface." - } - }, - "oAppVersion()": { - "returns": { - "receiverVersion": "The version of the OAppReceiver.sol contract.", - "senderVersion": "The version of the OAppSender.sol contract." - } - }, - "peers(uint32)": { - "params": { "_eid": "The endpoint ID." }, - "returns": { - "peer": "The peer address (OApp instance) associated with the corresponding endpoint." - } - }, - "setDelegate(address)": { - "params": { "_delegate": "The address of the delegate to be set." } - }, - "setPeer(uint32,bytes32)": { - "params": { - "_eid": "The endpoint ID.", - "_peer": "The address of the peer to be associated with the corresponding endpoint." - } - } - }, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": { - "endpoint()": { - "notice": "Retrieves the LayerZero endpoint associated with the OApp." - }, - "oAppVersion()": { - "notice": "Retrieves the OApp version information." - }, - "peers(uint32)": { - "notice": "Retrieves the peer (OApp) associated with a corresponding endpoint." - }, - "setDelegate(address)": { - "notice": "Sets the delegate address for the OApp Core." - }, - "setPeer(uint32,bytes32)": { - "notice": "Sets the peer address (OApp instance) for a corresponding endpoint." - } - }, - "version": 1 - } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppCore.sol": "IOAppCore" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol": { - "keccak256": "0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3", - "urls": [ - "bzz-raw://bacc29fd3866af71e59cb0bdc1cf82c882a4a7f4e2652fd413c9f12649762083", - "dweb:/ipfs/QmZh2toLnrQDWaNYhS5K4NoW7Vxd2GdZx9KA77vKEDLAqs" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol": { - "keccak256": "0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc", - "urls": [ - "bzz-raw://d8ff6a8a89297fa127f86b54e0db3eba1d6a6eeb4f6398d3c84d569665ac8f1b", - "dweb:/ipfs/QmVSwhw6xFDrLRAX4RXaCM47yBaBtac4wf36DYEq6KCTvT" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol": { - "keccak256": "0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972", - "urls": [ - "bzz-raw://7e1b245d58221d16d8b5e0f01ef3e289a24a7df1ace3b94239e4d5b954ad5927", - "dweb:/ipfs/Qmappsgp7PCY9rSSNE9Cdn4BTRX591WfCSEgq2HxhA3z6S" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol": { - "keccak256": "0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901", - "urls": [ - "bzz-raw://b18b23a1643fc6636c4ad9d9023e2e6ca2d3c2a4a046482d4655bff09950598d", - "dweb:/ipfs/Qma6G5SqiovwrMPfgqTrRngK1HWW373Wkf9c6YP2NhXpPk" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol": { - "keccak256": "0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e", - "urls": [ - "bzz-raw://5173fc9143bea314b159ca5a9adb5626659ef763bc598e27de5fa46efe3291a6", - "dweb:/ipfs/QmSLFeMFPmVeGxT4sxRPW28ictjAS22M8rLeYRu9TXkA6D" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppCore.sol": { - "keccak256": "0x40e49f2de74506e1da5dcaed53a39853f691647f4ceb0fccc8f49a68d3f47c58", - "urls": [ - "bzz-raw://4a1deb2a6a3eb1fb83936c9578469142bff470295f403d7d07d955a76be3adbd", - "dweb:/ipfs/QmS9bjSfBaE4YhQ1PCQ1TknbEPbNfRXzBK9E7SaPGyiZEv" - ], - "license": "MIT" - } - }, - "version": 1 - }, - "id": 16 -} diff --git a/examples/oft-movement/out/IOAppMsgInspector.sol/IOAppMsgInspector.json b/examples/oft-movement/out/IOAppMsgInspector.sol/IOAppMsgInspector.json deleted file mode 100644 index a0cf0cf1a..000000000 --- a/examples/oft-movement/out/IOAppMsgInspector.sol/IOAppMsgInspector.json +++ /dev/null @@ -1,109 +0,0 @@ -{ - "abi": [ - { - "type": "function", - "name": "inspect", - "inputs": [ - { "name": "_message", "type": "bytes", "internalType": "bytes" }, - { "name": "_options", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [{ "name": "valid", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "error", - "name": "InspectionFailed", - "inputs": [ - { "name": "message", "type": "bytes", "internalType": "bytes" }, - { "name": "options", "type": "bytes", "internalType": "bytes" } - ] - } - ], - "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "methodIdentifiers": { "inspect(bytes,bytes)": "043a78eb" }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"options\",\"type\":\"bytes\"}],\"name\":\"InspectionFailed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_options\",\"type\":\"bytes\"}],\"name\":\"inspect\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"valid\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface for the OApp Message Inspector, allowing examination of message and options contents.\",\"kind\":\"dev\",\"methods\":{\"inspect(bytes,bytes)\":{\"details\":\"Optionally done as a revert, OR use the boolean provided to handle the failure.\",\"params\":{\"_message\":\"The message payload to be inspected.\",\"_options\":\"Additional options or parameters for inspection.\"},\"returns\":{\"valid\":\"A boolean indicating whether the inspection passed (true) or failed (false).\"}}},\"title\":\"IOAppMsgInspector\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"inspect(bytes,bytes)\":{\"notice\":\"Allows the inspector to examine LayerZero message contents and optionally throw a revert if invalid.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppMsgInspector.sol\":\"IOAppMsgInspector\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppMsgInspector.sol\":{\"keccak256\":\"0x339654e699043c400cad92de209aa23855ce10211c31cf4114042cc5224d3b7c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5222afde59bf086f67b39e0288ad36343f4f5ed683d250533f256a5db956f37e\",\"dweb:/ipfs/QmbEG9EMYsK3Y6Cz7QbNtkW4kHGzMuhp2y2seSoL8v1A5b\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { - "inputs": [ - { "internalType": "bytes", "name": "message", "type": "bytes" }, - { "internalType": "bytes", "name": "options", "type": "bytes" } - ], - "type": "error", - "name": "InspectionFailed" - }, - { - "inputs": [ - { "internalType": "bytes", "name": "_message", "type": "bytes" }, - { "internalType": "bytes", "name": "_options", "type": "bytes" } - ], - "stateMutability": "view", - "type": "function", - "name": "inspect", - "outputs": [ - { "internalType": "bool", "name": "valid", "type": "bool" } - ] - } - ], - "devdoc": { - "kind": "dev", - "methods": { - "inspect(bytes,bytes)": { - "details": "Optionally done as a revert, OR use the boolean provided to handle the failure.", - "params": { - "_message": "The message payload to be inspected.", - "_options": "Additional options or parameters for inspection." - }, - "returns": { - "valid": "A boolean indicating whether the inspection passed (true) or failed (false)." - } - } - }, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": { - "inspect(bytes,bytes)": { - "notice": "Allows the inspector to examine LayerZero message contents and optionally throw a revert if invalid." - } - }, - "version": 1 - } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppMsgInspector.sol": "IOAppMsgInspector" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppMsgInspector.sol": { - "keccak256": "0x339654e699043c400cad92de209aa23855ce10211c31cf4114042cc5224d3b7c", - "urls": [ - "bzz-raw://5222afde59bf086f67b39e0288ad36343f4f5ed683d250533f256a5db956f37e", - "dweb:/ipfs/QmbEG9EMYsK3Y6Cz7QbNtkW4kHGzMuhp2y2seSoL8v1A5b" - ], - "license": "MIT" - } - }, - "version": 1 - }, - "id": 17 -} diff --git a/examples/oft-movement/out/IOAppOptionsType3.sol/IOAppOptionsType3.json b/examples/oft-movement/out/IOAppOptionsType3.sol/IOAppOptionsType3.json deleted file mode 100644 index ba7a5344e..000000000 --- a/examples/oft-movement/out/IOAppOptionsType3.sol/IOAppOptionsType3.json +++ /dev/null @@ -1,205 +0,0 @@ -{ - "abi": [ - { - "type": "function", - "name": "combineOptions", - "inputs": [ - { "name": "_eid", "type": "uint32", "internalType": "uint32" }, - { "name": "_msgType", "type": "uint16", "internalType": "uint16" }, - { "name": "_extraOptions", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [ - { "name": "options", "type": "bytes", "internalType": "bytes" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "setEnforcedOptions", - "inputs": [ - { - "name": "_enforcedOptions", - "type": "tuple[]", - "internalType": "struct EnforcedOptionParam[]", - "components": [ - { "name": "eid", "type": "uint32", "internalType": "uint32" }, - { "name": "msgType", "type": "uint16", "internalType": "uint16" }, - { "name": "options", "type": "bytes", "internalType": "bytes" } - ] - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "event", - "name": "EnforcedOptionSet", - "inputs": [ - { - "name": "_enforcedOptions", - "type": "tuple[]", - "indexed": false, - "internalType": "struct EnforcedOptionParam[]", - "components": [ - { "name": "eid", "type": "uint32", "internalType": "uint32" }, - { "name": "msgType", "type": "uint16", "internalType": "uint16" }, - { "name": "options", "type": "bytes", "internalType": "bytes" } - ] - } - ], - "anonymous": false - }, - { - "type": "error", - "name": "InvalidOptions", - "inputs": [ - { "name": "options", "type": "bytes", "internalType": "bytes" } - ] - } - ], - "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "methodIdentifiers": { - "combineOptions(uint32,uint16,bytes)": "bc70b354", - "setEnforcedOptions((uint32,uint16,bytes)[])": "b98bd070" - }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"options\",\"type\":\"bytes\"}],\"name\":\"InvalidOptions\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"msgType\",\"type\":\"uint16\"},{\"internalType\":\"bytes\",\"name\":\"options\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"struct EnforcedOptionParam[]\",\"name\":\"_enforcedOptions\",\"type\":\"tuple[]\"}],\"name\":\"EnforcedOptionSet\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"_msgType\",\"type\":\"uint16\"},{\"internalType\":\"bytes\",\"name\":\"_extraOptions\",\"type\":\"bytes\"}],\"name\":\"combineOptions\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"options\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"msgType\",\"type\":\"uint16\"},{\"internalType\":\"bytes\",\"name\":\"options\",\"type\":\"bytes\"}],\"internalType\":\"struct EnforcedOptionParam[]\",\"name\":\"_enforcedOptions\",\"type\":\"tuple[]\"}],\"name\":\"setEnforcedOptions\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface for the OApp with Type 3 Options, allowing the setting and combining of enforced options.\",\"kind\":\"dev\",\"methods\":{\"combineOptions(uint32,uint16,bytes)\":{\"params\":{\"_eid\":\"The endpoint ID.\",\"_extraOptions\":\"Additional options passed by the caller.\",\"_msgType\":\"The OApp message type.\"},\"returns\":{\"options\":\"The combination of caller specified options AND enforced options.\"}},\"setEnforcedOptions((uint32,uint16,bytes)[])\":{\"params\":{\"_enforcedOptions\":\"An array of EnforcedOptionParam structures specifying enforced options.\"}}},\"title\":\"IOAppOptionsType3\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"combineOptions(uint32,uint16,bytes)\":{\"notice\":\"Combines options for a given endpoint and message type.\"},\"setEnforcedOptions((uint32,uint16,bytes)[])\":{\"notice\":\"Sets enforced options for specific endpoint and message type combinations.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppOptionsType3.sol\":\"IOAppOptionsType3\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppOptionsType3.sol\":{\"keccak256\":\"0x9fc08a51e9d7c9c710c4eb26f84fe77228305ad7da63fa486ff24ebf2f3bc461\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2e2eea8a93bb9fc3f629767118b362e9b4bda2443ff95eae21c6a894f3e334cc\",\"dweb:/ipfs/QmPRRNjAB4U19ke4gr3U7ZJGtdcVBxdXVBZ2BmB1riFkP7\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { - "inputs": [ - { "internalType": "bytes", "name": "options", "type": "bytes" } - ], - "type": "error", - "name": "InvalidOptions" - }, - { - "inputs": [ - { - "internalType": "struct EnforcedOptionParam[]", - "name": "_enforcedOptions", - "type": "tuple[]", - "components": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" }, - { - "internalType": "uint16", - "name": "msgType", - "type": "uint16" - }, - { "internalType": "bytes", "name": "options", "type": "bytes" } - ], - "indexed": false - } - ], - "type": "event", - "name": "EnforcedOptionSet", - "anonymous": false - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { "internalType": "uint16", "name": "_msgType", "type": "uint16" }, - { - "internalType": "bytes", - "name": "_extraOptions", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function", - "name": "combineOptions", - "outputs": [ - { "internalType": "bytes", "name": "options", "type": "bytes" } - ] - }, - { - "inputs": [ - { - "internalType": "struct EnforcedOptionParam[]", - "name": "_enforcedOptions", - "type": "tuple[]", - "components": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" }, - { - "internalType": "uint16", - "name": "msgType", - "type": "uint16" - }, - { "internalType": "bytes", "name": "options", "type": "bytes" } - ] - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setEnforcedOptions" - } - ], - "devdoc": { - "kind": "dev", - "methods": { - "combineOptions(uint32,uint16,bytes)": { - "params": { - "_eid": "The endpoint ID.", - "_extraOptions": "Additional options passed by the caller.", - "_msgType": "The OApp message type." - }, - "returns": { - "options": "The combination of caller specified options AND enforced options." - } - }, - "setEnforcedOptions((uint32,uint16,bytes)[])": { - "params": { - "_enforcedOptions": "An array of EnforcedOptionParam structures specifying enforced options." - } - } - }, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": { - "combineOptions(uint32,uint16,bytes)": { - "notice": "Combines options for a given endpoint and message type." - }, - "setEnforcedOptions((uint32,uint16,bytes)[])": { - "notice": "Sets enforced options for specific endpoint and message type combinations." - } - }, - "version": 1 - } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppOptionsType3.sol": "IOAppOptionsType3" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppOptionsType3.sol": { - "keccak256": "0x9fc08a51e9d7c9c710c4eb26f84fe77228305ad7da63fa486ff24ebf2f3bc461", - "urls": [ - "bzz-raw://2e2eea8a93bb9fc3f629767118b362e9b4bda2443ff95eae21c6a894f3e334cc", - "dweb:/ipfs/QmPRRNjAB4U19ke4gr3U7ZJGtdcVBxdXVBZ2BmB1riFkP7" - ], - "license": "MIT" - } - }, - "version": 1 - }, - "id": 18 -} diff --git a/examples/oft-movement/out/IOAppPreCrimeSimulator.sol/IOAppPreCrimeSimulator.json b/examples/oft-movement/out/IOAppPreCrimeSimulator.sol/IOAppPreCrimeSimulator.json deleted file mode 100644 index 7d27bb7f2..000000000 --- a/examples/oft-movement/out/IOAppPreCrimeSimulator.sol/IOAppPreCrimeSimulator.json +++ /dev/null @@ -1,403 +0,0 @@ -{ - "abi": [ - { - "type": "function", - "name": "isPeer", - "inputs": [ - { "name": "_eid", "type": "uint32", "internalType": "uint32" }, - { "name": "_peer", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "lzReceiveAndRevert", - "inputs": [ - { - "name": "_packets", - "type": "tuple[]", - "internalType": "struct InboundPacket[]", - "components": [ - { - "name": "origin", - "type": "tuple", - "internalType": "struct Origin", - "components": [ - { - "name": "srcEid", - "type": "uint32", - "internalType": "uint32" - }, - { - "name": "sender", - "type": "bytes32", - "internalType": "bytes32" - }, - { "name": "nonce", "type": "uint64", "internalType": "uint64" } - ] - }, - { "name": "dstEid", "type": "uint32", "internalType": "uint32" }, - { - "name": "receiver", - "type": "address", - "internalType": "address" - }, - { "name": "guid", "type": "bytes32", "internalType": "bytes32" }, - { "name": "value", "type": "uint256", "internalType": "uint256" }, - { - "name": "executor", - "type": "address", - "internalType": "address" - }, - { "name": "message", "type": "bytes", "internalType": "bytes" }, - { "name": "extraData", "type": "bytes", "internalType": "bytes" } - ] - } - ], - "outputs": [], - "stateMutability": "payable" - }, - { - "type": "function", - "name": "oApp", - "inputs": [], - "outputs": [{ "name": "", "type": "address", "internalType": "address" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "preCrime", - "inputs": [], - "outputs": [{ "name": "", "type": "address", "internalType": "address" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "setPreCrime", - "inputs": [ - { "name": "_preCrime", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "event", - "name": "PreCrimeSet", - "inputs": [ - { - "name": "preCrimeAddress", - "type": "address", - "indexed": false, - "internalType": "address" - } - ], - "anonymous": false - }, - { "type": "error", "name": "OnlySelf", "inputs": [] }, - { - "type": "error", - "name": "SimulationResult", - "inputs": [{ "name": "result", "type": "bytes", "internalType": "bytes" }] - } - ], - "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "methodIdentifiers": { - "isPeer(uint32,bytes32)": "5a0dfe4d", - "lzReceiveAndRevert(((uint32,bytes32,uint64),uint32,address,bytes32,uint256,address,bytes,bytes)[])": "bd815db0", - "oApp()": "52ae2879", - "preCrime()": "b731ea0a", - "setPreCrime(address)": "d4243885" - }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"OnlySelf\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"name\":\"SimulationResult\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"preCrimeAddress\",\"type\":\"address\"}],\"name\":\"PreCrimeSet\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_peer\",\"type\":\"bytes32\"}],\"name\":\"isPeer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"origin\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"executor\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"internalType\":\"struct InboundPacket[]\",\"name\":\"_packets\",\"type\":\"tuple[]\"}],\"name\":\"lzReceiveAndRevert\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"oApp\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"preCrime\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_preCrime\",\"type\":\"address\"}],\"name\":\"setPreCrime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface for the preCrime simulation functionality in an OApp.\",\"events\":{\"PreCrimeSet(address)\":{\"details\":\"Emitted when the preCrime contract address is set.\",\"params\":{\"preCrimeAddress\":\"The address of the preCrime contract.\"}}},\"kind\":\"dev\",\"methods\":{\"isPeer(uint32,bytes32)\":{\"details\":\"checks if the specified peer is considered 'trusted' by the OApp.\",\"params\":{\"_eid\":\"The endpoint Id to check.\",\"_peer\":\"The peer to check.\"},\"returns\":{\"_0\":\"Whether the peer passed is considered 'trusted' by the OApp.\"}},\"lzReceiveAndRevert(((uint32,bytes32,uint64),uint32,address,bytes32,uint256,address,bytes,bytes)[])\":{\"details\":\"Mocks receiving a packet, then reverts with a series of data to infer the state/result.\",\"params\":{\"_packets\":\"An array of LayerZero InboundPacket objects representing received packets.\"}},\"oApp()\":{\"details\":\"Retrieves the address of the OApp contract.\",\"returns\":{\"_0\":\"The address of the OApp contract.\"}},\"preCrime()\":{\"details\":\"Retrieves the address of the preCrime contract implementation.\",\"returns\":{\"_0\":\"The address of the preCrime contract.\"}},\"setPreCrime(address)\":{\"details\":\"Sets the preCrime contract address.\",\"params\":{\"_preCrime\":\"The address of the preCrime contract.\"}}},\"title\":\"IOAppPreCrimeSimulator Interface\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IOAppPreCrimeSimulator.sol\":\"IOAppPreCrimeSimulator\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\":{\"keccak256\":\"0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bacc29fd3866af71e59cb0bdc1cf82c882a4a7f4e2652fd413c9f12649762083\",\"dweb:/ipfs/QmZh2toLnrQDWaNYhS5K4NoW7Vxd2GdZx9KA77vKEDLAqs\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol\":{\"keccak256\":\"0x5cf5f24751b4e3ea1c9c5ded07cedfdfd62566b6daaffcc0144733859c9dba0c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cae7e35007a714f007ea08045ef7c0cfa6c91fd2425b5028b2d49abad357a5f0\",\"dweb:/ipfs/QmcDBs5tsiyB35b8cwzWQWNnpkawb3uuHRaqE77Hxm2tve\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol\":{\"keccak256\":\"0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d8ff6a8a89297fa127f86b54e0db3eba1d6a6eeb4f6398d3c84d569665ac8f1b\",\"dweb:/ipfs/QmVSwhw6xFDrLRAX4RXaCM47yBaBtac4wf36DYEq6KCTvT\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol\":{\"keccak256\":\"0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7e1b245d58221d16d8b5e0f01ef3e289a24a7df1ace3b94239e4d5b954ad5927\",\"dweb:/ipfs/Qmappsgp7PCY9rSSNE9Cdn4BTRX591WfCSEgq2HxhA3z6S\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol\":{\"keccak256\":\"0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b18b23a1643fc6636c4ad9d9023e2e6ca2d3c2a4a046482d4655bff09950598d\",\"dweb:/ipfs/Qma6G5SqiovwrMPfgqTrRngK1HWW373Wkf9c6YP2NhXpPk\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol\":{\"keccak256\":\"0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5173fc9143bea314b159ca5a9adb5626659ef763bc598e27de5fa46efe3291a6\",\"dweb:/ipfs/QmSLFeMFPmVeGxT4sxRPW28ictjAS22M8rLeYRu9TXkA6D\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol\":{\"keccak256\":\"0xf1c07bc61e7b1dce195ed12d50f87980fbf2d63cac1326fd28287f55fe0ba625\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://060f10ff7afc33c1c2f2b4b5ba29231fd3c943146488084d0e4ab99fce991d97\",\"dweb:/ipfs/QmaSsefAqqEqtf8FgFUmDYMwTsAty3X1pqDb6SiFvry6B3\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol\":{\"keccak256\":\"0x2ebbcaaab3554edcd41b581f1a72ac1806afbfb8047d0d47ff098f9af30d6deb\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://2d4b2cf5c3b16dc76c6767f285b57c0af917972327b2be3f7cba5825402f5fc1\",\"dweb:/ipfs/QmQQWiHE2jKEDbjzGutSoZwtApSXYfLqZt5CxEpFj8xyvT\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol\":{\"keccak256\":\"0xc84cf1bf785977fe1fbe7566eef902c2db68d0e163813ebe6c34921754802680\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://de686666fc16fa432d4208d85cec87dc952faf3e481b683b9adf4b4610db4b09\",\"dweb:/ipfs/QmdmQeopzmxqRzi9DNB4EJDrYUXFfD7fUhnGhSni4QejUW\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IOAppPreCrimeSimulator.sol\":{\"keccak256\":\"0x5d24db150949ea8e6437178e65a942e8c8b7f332e5daf32750f56b23b35b5bb2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1b1dcea0267234654126f926a1b405743606d7b5e49185b621afb7bd94d18b9a\",\"dweb:/ipfs/QmZ9BXQmbWJcrhHKuBs4yhNtbCV5WUpUY3AXSX7rkWwX6y\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/precrime/libs/Packet.sol\":{\"keccak256\":\"0xcb2fb1c5b2eb3731de78b479b9c2ab3bba326fe0b0b3a008590f18e881e457a6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f70724c61d226743c2bd8ba6c09758805e4339780978949ce5b333c106be4edc\",\"dweb:/ipfs/QmX5rV9K1N7RgTz9xtf8CDG8SrYiitGAzFh9ec2tbnEec4\"]},\"node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { "inputs": [], "type": "error", "name": "OnlySelf" }, - { - "inputs": [ - { "internalType": "bytes", "name": "result", "type": "bytes" } - ], - "type": "error", - "name": "SimulationResult" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "preCrimeAddress", - "type": "address", - "indexed": false - } - ], - "type": "event", - "name": "PreCrimeSet", - "anonymous": false - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { "internalType": "bytes32", "name": "_peer", "type": "bytes32" } - ], - "stateMutability": "view", - "type": "function", - "name": "isPeer", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { - "internalType": "struct InboundPacket[]", - "name": "_packets", - "type": "tuple[]", - "components": [ - { - "internalType": "struct Origin", - "name": "origin", - "type": "tuple", - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - } - ] - }, - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "guid", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "address", - "name": "executor", - "type": "address" - }, - { "internalType": "bytes", "name": "message", "type": "bytes" }, - { - "internalType": "bytes", - "name": "extraData", - "type": "bytes" - } - ] - } - ], - "stateMutability": "payable", - "type": "function", - "name": "lzReceiveAndRevert" - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "oApp", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "preCrime", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ] - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_preCrime", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setPreCrime" - } - ], - "devdoc": { - "kind": "dev", - "methods": { - "isPeer(uint32,bytes32)": { - "details": "checks if the specified peer is considered 'trusted' by the OApp.", - "params": { - "_eid": "The endpoint Id to check.", - "_peer": "The peer to check." - }, - "returns": { - "_0": "Whether the peer passed is considered 'trusted' by the OApp." - } - }, - "lzReceiveAndRevert(((uint32,bytes32,uint64),uint32,address,bytes32,uint256,address,bytes,bytes)[])": { - "details": "Mocks receiving a packet, then reverts with a series of data to infer the state/result.", - "params": { - "_packets": "An array of LayerZero InboundPacket objects representing received packets." - } - }, - "oApp()": { - "details": "Retrieves the address of the OApp contract.", - "returns": { "_0": "The address of the OApp contract." } - }, - "preCrime()": { - "details": "Retrieves the address of the preCrime contract implementation.", - "returns": { "_0": "The address of the preCrime contract." } - }, - "setPreCrime(address)": { - "details": "Sets the preCrime contract address.", - "params": { "_preCrime": "The address of the preCrime contract." } - } - }, - "version": 1 - }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IOAppPreCrimeSimulator.sol": "IOAppPreCrimeSimulator" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol": { - "keccak256": "0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3", - "urls": [ - "bzz-raw://bacc29fd3866af71e59cb0bdc1cf82c882a4a7f4e2652fd413c9f12649762083", - "dweb:/ipfs/QmZh2toLnrQDWaNYhS5K4NoW7Vxd2GdZx9KA77vKEDLAqs" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol": { - "keccak256": "0x5cf5f24751b4e3ea1c9c5ded07cedfdfd62566b6daaffcc0144733859c9dba0c", - "urls": [ - "bzz-raw://cae7e35007a714f007ea08045ef7c0cfa6c91fd2425b5028b2d49abad357a5f0", - "dweb:/ipfs/QmcDBs5tsiyB35b8cwzWQWNnpkawb3uuHRaqE77Hxm2tve" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol": { - "keccak256": "0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc", - "urls": [ - "bzz-raw://d8ff6a8a89297fa127f86b54e0db3eba1d6a6eeb4f6398d3c84d569665ac8f1b", - "dweb:/ipfs/QmVSwhw6xFDrLRAX4RXaCM47yBaBtac4wf36DYEq6KCTvT" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol": { - "keccak256": "0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972", - "urls": [ - "bzz-raw://7e1b245d58221d16d8b5e0f01ef3e289a24a7df1ace3b94239e4d5b954ad5927", - "dweb:/ipfs/Qmappsgp7PCY9rSSNE9Cdn4BTRX591WfCSEgq2HxhA3z6S" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol": { - "keccak256": "0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901", - "urls": [ - "bzz-raw://b18b23a1643fc6636c4ad9d9023e2e6ca2d3c2a4a046482d4655bff09950598d", - "dweb:/ipfs/Qma6G5SqiovwrMPfgqTrRngK1HWW373Wkf9c6YP2NhXpPk" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol": { - "keccak256": "0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e", - "urls": [ - "bzz-raw://5173fc9143bea314b159ca5a9adb5626659ef763bc598e27de5fa46efe3291a6", - "dweb:/ipfs/QmSLFeMFPmVeGxT4sxRPW28ictjAS22M8rLeYRu9TXkA6D" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol": { - "keccak256": "0xf1c07bc61e7b1dce195ed12d50f87980fbf2d63cac1326fd28287f55fe0ba625", - "urls": [ - "bzz-raw://060f10ff7afc33c1c2f2b4b5ba29231fd3c943146488084d0e4ab99fce991d97", - "dweb:/ipfs/QmaSsefAqqEqtf8FgFUmDYMwTsAty3X1pqDb6SiFvry6B3" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol": { - "keccak256": "0x2ebbcaaab3554edcd41b581f1a72ac1806afbfb8047d0d47ff098f9af30d6deb", - "urls": [ - "bzz-raw://2d4b2cf5c3b16dc76c6767f285b57c0af917972327b2be3f7cba5825402f5fc1", - "dweb:/ipfs/QmQQWiHE2jKEDbjzGutSoZwtApSXYfLqZt5CxEpFj8xyvT" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol": { - "keccak256": "0xc84cf1bf785977fe1fbe7566eef902c2db68d0e163813ebe6c34921754802680", - "urls": [ - "bzz-raw://de686666fc16fa432d4208d85cec87dc952faf3e481b683b9adf4b4610db4b09", - "dweb:/ipfs/QmdmQeopzmxqRzi9DNB4EJDrYUXFfD7fUhnGhSni4QejUW" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IOAppPreCrimeSimulator.sol": { - "keccak256": "0x5d24db150949ea8e6437178e65a942e8c8b7f332e5daf32750f56b23b35b5bb2", - "urls": [ - "bzz-raw://1b1dcea0267234654126f926a1b405743606d7b5e49185b621afb7bd94d18b9a", - "dweb:/ipfs/QmZ9BXQmbWJcrhHKuBs4yhNtbCV5WUpUY3AXSX7rkWwX6y" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/precrime/libs/Packet.sol": { - "keccak256": "0xcb2fb1c5b2eb3731de78b479b9c2ab3bba326fe0b0b3a008590f18e881e457a6", - "urls": [ - "bzz-raw://f70724c61d226743c2bd8ba6c09758805e4339780978949ce5b333c106be4edc", - "dweb:/ipfs/QmX5rV9K1N7RgTz9xtf8CDG8SrYiitGAzFh9ec2tbnEec4" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol": { - "keccak256": "0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8", - "urls": [ - "bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621", - "dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL" - ], - "license": "MIT" - } - }, - "version": 1 - }, - "id": 22 -} diff --git a/examples/oft-movement/out/IOAppReceiver.sol/IOAppReceiver.json b/examples/oft-movement/out/IOAppReceiver.sol/IOAppReceiver.json deleted file mode 100644 index eb3ec26a3..000000000 --- a/examples/oft-movement/out/IOAppReceiver.sol/IOAppReceiver.json +++ /dev/null @@ -1,296 +0,0 @@ -{ - "abi": [ - { - "type": "function", - "name": "allowInitializePath", - "inputs": [ - { - "name": "_origin", - "type": "tuple", - "internalType": "struct Origin", - "components": [ - { "name": "srcEid", "type": "uint32", "internalType": "uint32" }, - { "name": "sender", "type": "bytes32", "internalType": "bytes32" }, - { "name": "nonce", "type": "uint64", "internalType": "uint64" } - ] - } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "isComposeMsgSender", - "inputs": [ - { - "name": "_origin", - "type": "tuple", - "internalType": "struct Origin", - "components": [ - { "name": "srcEid", "type": "uint32", "internalType": "uint32" }, - { "name": "sender", "type": "bytes32", "internalType": "bytes32" }, - { "name": "nonce", "type": "uint64", "internalType": "uint64" } - ] - }, - { "name": "_message", "type": "bytes", "internalType": "bytes" }, - { "name": "_sender", "type": "address", "internalType": "address" } - ], - "outputs": [ - { "name": "isSender", "type": "bool", "internalType": "bool" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "lzReceive", - "inputs": [ - { - "name": "_origin", - "type": "tuple", - "internalType": "struct Origin", - "components": [ - { "name": "srcEid", "type": "uint32", "internalType": "uint32" }, - { "name": "sender", "type": "bytes32", "internalType": "bytes32" }, - { "name": "nonce", "type": "uint64", "internalType": "uint64" } - ] - }, - { "name": "_guid", "type": "bytes32", "internalType": "bytes32" }, - { "name": "_message", "type": "bytes", "internalType": "bytes" }, - { "name": "_executor", "type": "address", "internalType": "address" }, - { "name": "_extraData", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [], - "stateMutability": "payable" - }, - { - "type": "function", - "name": "nextNonce", - "inputs": [ - { "name": "_eid", "type": "uint32", "internalType": "uint32" }, - { "name": "_sender", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [{ "name": "", "type": "uint64", "internalType": "uint64" }], - "stateMutability": "view" - } - ], - "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "methodIdentifiers": { - "allowInitializePath((uint32,bytes32,uint64))": "ff7bd03d", - "isComposeMsgSender((uint32,bytes32,uint64),bytes,address)": "82413eac", - "lzReceive((uint32,bytes32,uint64),bytes32,bytes,address,bytes)": "13137d65", - "nextNonce(uint32,bytes32)": "7d25a05e" - }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"_origin\",\"type\":\"tuple\"}],\"name\":\"allowInitializePath\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"_origin\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"}],\"name\":\"isComposeMsgSender\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"isSender\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"_origin\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"_guid\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"_executor\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"lzReceive\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_sender\",\"type\":\"bytes32\"}],\"name\":\"nextNonce\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"isComposeMsgSender((uint32,bytes32,uint64),bytes,address)\":{\"details\":\"Applications can optionally choose to implement a separate composeMsg sender that is NOT the bridging layer.The default sender IS the OAppReceiver implementer.\",\"params\":{\"_message\":\"The lzReceive payload.\",\"_origin\":\"The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message.\",\"_sender\":\"The sender address.\"},\"returns\":{\"isSender\":\"Is a valid sender.\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"isComposeMsgSender((uint32,bytes32,uint64),bytes,address)\":{\"notice\":\"Indicates whether an address is an approved composeMsg sender to the Endpoint.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppReceiver.sol\":\"IOAppReceiver\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\":{\"keccak256\":\"0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bacc29fd3866af71e59cb0bdc1cf82c882a4a7f4e2652fd413c9f12649762083\",\"dweb:/ipfs/QmZh2toLnrQDWaNYhS5K4NoW7Vxd2GdZx9KA77vKEDLAqs\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol\":{\"keccak256\":\"0x9641abba8d53b08bb517d1b74801dd15ea7b84d77a6719085bd96c8ea94e3ca0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://77415ae0820859e0faf3fabdce683cce9fa03ea026ae0f6fe081ef1c9205f933\",\"dweb:/ipfs/QmXd7APqoCunQ2jYy73AHvi5gsZofLpm3SzM6FPo7zRPfL\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol\":{\"keccak256\":\"0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d8ff6a8a89297fa127f86b54e0db3eba1d6a6eeb4f6398d3c84d569665ac8f1b\",\"dweb:/ipfs/QmVSwhw6xFDrLRAX4RXaCM47yBaBtac4wf36DYEq6KCTvT\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol\":{\"keccak256\":\"0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7e1b245d58221d16d8b5e0f01ef3e289a24a7df1ace3b94239e4d5b954ad5927\",\"dweb:/ipfs/Qmappsgp7PCY9rSSNE9Cdn4BTRX591WfCSEgq2HxhA3z6S\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol\":{\"keccak256\":\"0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b18b23a1643fc6636c4ad9d9023e2e6ca2d3c2a4a046482d4655bff09950598d\",\"dweb:/ipfs/Qma6G5SqiovwrMPfgqTrRngK1HWW373Wkf9c6YP2NhXpPk\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol\":{\"keccak256\":\"0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5173fc9143bea314b159ca5a9adb5626659ef763bc598e27de5fa46efe3291a6\",\"dweb:/ipfs/QmSLFeMFPmVeGxT4sxRPW28ictjAS22M8rLeYRu9TXkA6D\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppReceiver.sol\":{\"keccak256\":\"0xd26135185e19b3732746d4a9e2923e896f28dec8664bab161faea2ee26fcdc3d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c236dfe386b508be33c3a1a74ae1d4fd64b8c77ae207767e9dbed0f2429518a2\",\"dweb:/ipfs/QmXVbZJjfryTRti98uN3BMh5qh4K7NuEs1RSCoBjRoYd4q\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { - "inputs": [ - { - "internalType": "struct Origin", - "name": "_origin", - "type": "tuple", - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { "internalType": "uint64", "name": "nonce", "type": "uint64" } - ] - } - ], - "stateMutability": "view", - "type": "function", - "name": "allowInitializePath", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { - "internalType": "struct Origin", - "name": "_origin", - "type": "tuple", - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { "internalType": "uint64", "name": "nonce", "type": "uint64" } - ] - }, - { "internalType": "bytes", "name": "_message", "type": "bytes" }, - { "internalType": "address", "name": "_sender", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "isComposeMsgSender", - "outputs": [ - { "internalType": "bool", "name": "isSender", "type": "bool" } - ] - }, - { - "inputs": [ - { - "internalType": "struct Origin", - "name": "_origin", - "type": "tuple", - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { "internalType": "uint64", "name": "nonce", "type": "uint64" } - ] - }, - { "internalType": "bytes32", "name": "_guid", "type": "bytes32" }, - { "internalType": "bytes", "name": "_message", "type": "bytes" }, - { - "internalType": "address", - "name": "_executor", - "type": "address" - }, - { "internalType": "bytes", "name": "_extraData", "type": "bytes" } - ], - "stateMutability": "payable", - "type": "function", - "name": "lzReceive" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { "internalType": "bytes32", "name": "_sender", "type": "bytes32" } - ], - "stateMutability": "view", - "type": "function", - "name": "nextNonce", - "outputs": [ - { "internalType": "uint64", "name": "", "type": "uint64" } - ] - } - ], - "devdoc": { - "kind": "dev", - "methods": { - "isComposeMsgSender((uint32,bytes32,uint64),bytes,address)": { - "details": "Applications can optionally choose to implement a separate composeMsg sender that is NOT the bridging layer.The default sender IS the OAppReceiver implementer.", - "params": { - "_message": "The lzReceive payload.", - "_origin": "The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message.", - "_sender": "The sender address." - }, - "returns": { "isSender": "Is a valid sender." } - } - }, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": { - "isComposeMsgSender((uint32,bytes32,uint64),bytes,address)": { - "notice": "Indicates whether an address is an approved composeMsg sender to the Endpoint." - } - }, - "version": 1 - } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppReceiver.sol": "IOAppReceiver" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol": { - "keccak256": "0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3", - "urls": [ - "bzz-raw://bacc29fd3866af71e59cb0bdc1cf82c882a4a7f4e2652fd413c9f12649762083", - "dweb:/ipfs/QmZh2toLnrQDWaNYhS5K4NoW7Vxd2GdZx9KA77vKEDLAqs" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol": { - "keccak256": "0x9641abba8d53b08bb517d1b74801dd15ea7b84d77a6719085bd96c8ea94e3ca0", - "urls": [ - "bzz-raw://77415ae0820859e0faf3fabdce683cce9fa03ea026ae0f6fe081ef1c9205f933", - "dweb:/ipfs/QmXd7APqoCunQ2jYy73AHvi5gsZofLpm3SzM6FPo7zRPfL" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol": { - "keccak256": "0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc", - "urls": [ - "bzz-raw://d8ff6a8a89297fa127f86b54e0db3eba1d6a6eeb4f6398d3c84d569665ac8f1b", - "dweb:/ipfs/QmVSwhw6xFDrLRAX4RXaCM47yBaBtac4wf36DYEq6KCTvT" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol": { - "keccak256": "0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972", - "urls": [ - "bzz-raw://7e1b245d58221d16d8b5e0f01ef3e289a24a7df1ace3b94239e4d5b954ad5927", - "dweb:/ipfs/Qmappsgp7PCY9rSSNE9Cdn4BTRX591WfCSEgq2HxhA3z6S" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol": { - "keccak256": "0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901", - "urls": [ - "bzz-raw://b18b23a1643fc6636c4ad9d9023e2e6ca2d3c2a4a046482d4655bff09950598d", - "dweb:/ipfs/Qma6G5SqiovwrMPfgqTrRngK1HWW373Wkf9c6YP2NhXpPk" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol": { - "keccak256": "0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e", - "urls": [ - "bzz-raw://5173fc9143bea314b159ca5a9adb5626659ef763bc598e27de5fa46efe3291a6", - "dweb:/ipfs/QmSLFeMFPmVeGxT4sxRPW28ictjAS22M8rLeYRu9TXkA6D" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppReceiver.sol": { - "keccak256": "0xd26135185e19b3732746d4a9e2923e896f28dec8664bab161faea2ee26fcdc3d", - "urls": [ - "bzz-raw://c236dfe386b508be33c3a1a74ae1d4fd64b8c77ae207767e9dbed0f2429518a2", - "dweb:/ipfs/QmXVbZJjfryTRti98uN3BMh5qh4K7NuEs1RSCoBjRoYd4q" - ], - "license": "MIT" - } - }, - "version": 1 - }, - "id": 19 -} diff --git a/examples/oft-movement/out/IOFT.sol/IOFT.json b/examples/oft-movement/out/IOFT.sol/IOFT.json deleted file mode 100644 index 51a4e6d8e..000000000 --- a/examples/oft-movement/out/IOFT.sol/IOFT.json +++ /dev/null @@ -1,1022 +0,0 @@ -{ - "abi": [ - { - "type": "function", - "name": "approvalRequired", - "inputs": [], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "oftVersion", - "inputs": [], - "outputs": [ - { "name": "interfaceId", "type": "bytes4", "internalType": "bytes4" }, - { "name": "version", "type": "uint64", "internalType": "uint64" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "quoteOFT", - "inputs": [ - { - "name": "_sendParam", - "type": "tuple", - "internalType": "struct SendParam", - "components": [ - { "name": "dstEid", "type": "uint32", "internalType": "uint32" }, - { "name": "to", "type": "bytes32", "internalType": "bytes32" }, - { - "name": "amountLD", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "minAmountLD", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "extraOptions", - "type": "bytes", - "internalType": "bytes" - }, - { "name": "composeMsg", "type": "bytes", "internalType": "bytes" }, - { "name": "oftCmd", "type": "bytes", "internalType": "bytes" } - ] - } - ], - "outputs": [ - { - "name": "", - "type": "tuple", - "internalType": "struct OFTLimit", - "components": [ - { - "name": "minAmountLD", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "maxAmountLD", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "name": "oftFeeDetails", - "type": "tuple[]", - "internalType": "struct OFTFeeDetail[]", - "components": [ - { - "name": "feeAmountLD", - "type": "int256", - "internalType": "int256" - }, - { - "name": "description", - "type": "string", - "internalType": "string" - } - ] - }, - { - "name": "", - "type": "tuple", - "internalType": "struct OFTReceipt", - "components": [ - { - "name": "amountSentLD", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "amountReceivedLD", - "type": "uint256", - "internalType": "uint256" - } - ] - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "quoteSend", - "inputs": [ - { - "name": "_sendParam", - "type": "tuple", - "internalType": "struct SendParam", - "components": [ - { "name": "dstEid", "type": "uint32", "internalType": "uint32" }, - { "name": "to", "type": "bytes32", "internalType": "bytes32" }, - { - "name": "amountLD", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "minAmountLD", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "extraOptions", - "type": "bytes", - "internalType": "bytes" - }, - { "name": "composeMsg", "type": "bytes", "internalType": "bytes" }, - { "name": "oftCmd", "type": "bytes", "internalType": "bytes" } - ] - }, - { "name": "_payInLzToken", "type": "bool", "internalType": "bool" } - ], - "outputs": [ - { - "name": "", - "type": "tuple", - "internalType": "struct MessagingFee", - "components": [ - { - "name": "nativeFee", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "lzTokenFee", - "type": "uint256", - "internalType": "uint256" - } - ] - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "send", - "inputs": [ - { - "name": "_sendParam", - "type": "tuple", - "internalType": "struct SendParam", - "components": [ - { "name": "dstEid", "type": "uint32", "internalType": "uint32" }, - { "name": "to", "type": "bytes32", "internalType": "bytes32" }, - { - "name": "amountLD", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "minAmountLD", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "extraOptions", - "type": "bytes", - "internalType": "bytes" - }, - { "name": "composeMsg", "type": "bytes", "internalType": "bytes" }, - { "name": "oftCmd", "type": "bytes", "internalType": "bytes" } - ] - }, - { - "name": "_fee", - "type": "tuple", - "internalType": "struct MessagingFee", - "components": [ - { - "name": "nativeFee", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "lzTokenFee", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "name": "_refundAddress", - "type": "address", - "internalType": "address" - } - ], - "outputs": [ - { - "name": "", - "type": "tuple", - "internalType": "struct MessagingReceipt", - "components": [ - { "name": "guid", "type": "bytes32", "internalType": "bytes32" }, - { "name": "nonce", "type": "uint64", "internalType": "uint64" }, - { - "name": "fee", - "type": "tuple", - "internalType": "struct MessagingFee", - "components": [ - { - "name": "nativeFee", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "lzTokenFee", - "type": "uint256", - "internalType": "uint256" - } - ] - } - ] - }, - { - "name": "", - "type": "tuple", - "internalType": "struct OFTReceipt", - "components": [ - { - "name": "amountSentLD", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "amountReceivedLD", - "type": "uint256", - "internalType": "uint256" - } - ] - } - ], - "stateMutability": "payable" - }, - { - "type": "function", - "name": "sharedDecimals", - "inputs": [], - "outputs": [{ "name": "", "type": "uint8", "internalType": "uint8" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "token", - "inputs": [], - "outputs": [{ "name": "", "type": "address", "internalType": "address" }], - "stateMutability": "view" - }, - { - "type": "event", - "name": "OFTReceived", - "inputs": [ - { - "name": "guid", - "type": "bytes32", - "indexed": true, - "internalType": "bytes32" - }, - { - "name": "srcEid", - "type": "uint32", - "indexed": false, - "internalType": "uint32" - }, - { - "name": "toAddress", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "amountReceivedLD", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "OFTSent", - "inputs": [ - { - "name": "guid", - "type": "bytes32", - "indexed": true, - "internalType": "bytes32" - }, - { - "name": "dstEid", - "type": "uint32", - "indexed": false, - "internalType": "uint32" - }, - { - "name": "fromAddress", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "amountSentLD", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - }, - { - "name": "amountReceivedLD", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { "type": "error", "name": "InvalidLocalDecimals", "inputs": [] }, - { - "type": "error", - "name": "SlippageExceeded", - "inputs": [ - { "name": "amountLD", "type": "uint256", "internalType": "uint256" }, - { "name": "minAmountLD", "type": "uint256", "internalType": "uint256" } - ] - } - ], - "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "methodIdentifiers": { - "approvalRequired()": "9f68b964", - "oftVersion()": "156a0d0f", - "quoteOFT((uint32,bytes32,uint256,uint256,bytes,bytes,bytes))": "0d35b415", - "quoteSend((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),bool)": "3b6f743b", - "send((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),(uint256,uint256),address)": "c7c7f5b3", - "sharedDecimals()": "857749b0", - "token()": "fc0c546a" - }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"InvalidLocalDecimals\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountLD\",\"type\":\"uint256\"}],\"name\":\"SlippageExceeded\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"toAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountReceivedLD\",\"type\":\"uint256\"}],\"name\":\"OFTReceived\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"fromAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountSentLD\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountReceivedLD\",\"type\":\"uint256\"}],\"name\":\"OFTSent\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"approvalRequired\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"oftVersion\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"},{\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"to\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"amountLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountLD\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"extraOptions\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"composeMsg\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"oftCmd\",\"type\":\"bytes\"}],\"internalType\":\"struct SendParam\",\"name\":\"_sendParam\",\"type\":\"tuple\"}],\"name\":\"quoteOFT\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"minAmountLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountLD\",\"type\":\"uint256\"}],\"internalType\":\"struct OFTLimit\",\"name\":\"\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"int256\",\"name\":\"feeAmountLD\",\"type\":\"int256\"},{\"internalType\":\"string\",\"name\":\"description\",\"type\":\"string\"}],\"internalType\":\"struct OFTFeeDetail[]\",\"name\":\"oftFeeDetails\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"amountSentLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountReceivedLD\",\"type\":\"uint256\"}],\"internalType\":\"struct OFTReceipt\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"to\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"amountLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountLD\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"extraOptions\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"composeMsg\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"oftCmd\",\"type\":\"bytes\"}],\"internalType\":\"struct SendParam\",\"name\":\"_sendParam\",\"type\":\"tuple\"},{\"internalType\":\"bool\",\"name\":\"_payInLzToken\",\"type\":\"bool\"}],\"name\":\"quoteSend\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nativeFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lzTokenFee\",\"type\":\"uint256\"}],\"internalType\":\"struct MessagingFee\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"to\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"amountLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountLD\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"extraOptions\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"composeMsg\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"oftCmd\",\"type\":\"bytes\"}],\"internalType\":\"struct SendParam\",\"name\":\"_sendParam\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nativeFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lzTokenFee\",\"type\":\"uint256\"}],\"internalType\":\"struct MessagingFee\",\"name\":\"_fee\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"_refundAddress\",\"type\":\"address\"}],\"name\":\"send\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nativeFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lzTokenFee\",\"type\":\"uint256\"}],\"internalType\":\"struct MessagingFee\",\"name\":\"fee\",\"type\":\"tuple\"}],\"internalType\":\"struct MessagingReceipt\",\"name\":\"\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"amountSentLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountReceivedLD\",\"type\":\"uint256\"}],\"internalType\":\"struct OFTReceipt\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sharedDecimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"token\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface for the OftChain (OFT) token.Does not inherit ERC20 to accommodate usage by OFTAdapter as well.This specific interface ID is '0x02e49c2c'.\",\"kind\":\"dev\",\"methods\":{\"approvalRequired()\":{\"details\":\"Allows things like wallet implementers to determine integration requirements, without understanding the underlying token implementation.\",\"returns\":{\"_0\":\"requiresApproval Needs approval of the underlying token implementation.\"}},\"oftVersion()\":{\"details\":\"interfaceId: This specific interface ID is '0x02e49c2c'.version: Indicates a cross-chain compatible msg encoding with other OFTs.If a new feature is added to the OFT cross-chain msg encoding, the version will be incremented. ie. localOFT version(x,1) CAN send messages to remoteOFT version(x,1)\",\"returns\":{\"interfaceId\":\"The interface ID.\",\"version\":\"The version.\"}},\"quoteOFT((uint32,bytes32,uint256,uint256,bytes,bytes,bytes))\":{\"params\":{\"_sendParam\":\"The parameters for the send operation.\"},\"returns\":{\"_0\":\"limit The OFT limit information.\",\"_2\":\"receipt The OFT receipt information.\",\"oftFeeDetails\":\"The details of OFT fees.\"}},\"quoteSend((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),bool)\":{\"details\":\"MessagingFee: LayerZero msg fee - nativeFee: The native fee. - lzTokenFee: The lzToken fee.\",\"params\":{\"_payInLzToken\":\"Flag indicating whether the caller is paying in the LZ token.\",\"_sendParam\":\"The parameters for the send() operation.\"},\"returns\":{\"_0\":\"fee The calculated LayerZero messaging fee from the send() operation.\"}},\"send((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),(uint256,uint256),address)\":{\"details\":\"MessagingReceipt: LayerZero msg receipt - guid: The unique identifier for the sent message. - nonce: The nonce of the sent message. - fee: The LayerZero fee incurred for the message.\",\"params\":{\"_fee\":\"The fee information supplied by the caller. - nativeFee: The native fee. - lzTokenFee: The lzToken fee.\",\"_refundAddress\":\"The address to receive any excess funds from fees etc. on the src.\",\"_sendParam\":\"The parameters for the send operation.\"},\"returns\":{\"_0\":\"receipt The LayerZero messaging receipt from the send() operation.\",\"_1\":\"oftReceipt The OFT receipt information.\"}},\"sharedDecimals()\":{\"returns\":{\"_0\":\"sharedDecimals The shared decimals of the OFT.\"}},\"token()\":{\"returns\":{\"_0\":\"token The address of the ERC20 token implementation.\"}}},\"title\":\"IOFT\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"approvalRequired()\":{\"notice\":\"Indicates whether the OFT contract requires approval of the 'token()' to send.\"},\"oftVersion()\":{\"notice\":\"Retrieves interfaceID and the version of the OFT.\"},\"quoteOFT((uint32,bytes32,uint256,uint256,bytes,bytes,bytes))\":{\"notice\":\"Provides the fee breakdown and settings data for an OFT. Unused in the default implementation.\"},\"quoteSend((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),bool)\":{\"notice\":\"Provides a quote for the send() operation.\"},\"send((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),(uint256,uint256),address)\":{\"notice\":\"Executes the send() operation.\"},\"sharedDecimals()\":{\"notice\":\"Retrieves the shared decimals of the OFT.\"},\"token()\":{\"notice\":\"Retrieves the address of the token associated with the OFT.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/oft-evm/contracts/interfaces/IOFT.sol\":\"IOFT\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\":{\"keccak256\":\"0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bacc29fd3866af71e59cb0bdc1cf82c882a4a7f4e2652fd413c9f12649762083\",\"dweb:/ipfs/QmZh2toLnrQDWaNYhS5K4NoW7Vxd2GdZx9KA77vKEDLAqs\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol\":{\"keccak256\":\"0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d8ff6a8a89297fa127f86b54e0db3eba1d6a6eeb4f6398d3c84d569665ac8f1b\",\"dweb:/ipfs/QmVSwhw6xFDrLRAX4RXaCM47yBaBtac4wf36DYEq6KCTvT\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol\":{\"keccak256\":\"0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7e1b245d58221d16d8b5e0f01ef3e289a24a7df1ace3b94239e4d5b954ad5927\",\"dweb:/ipfs/Qmappsgp7PCY9rSSNE9Cdn4BTRX591WfCSEgq2HxhA3z6S\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol\":{\"keccak256\":\"0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b18b23a1643fc6636c4ad9d9023e2e6ca2d3c2a4a046482d4655bff09950598d\",\"dweb:/ipfs/Qma6G5SqiovwrMPfgqTrRngK1HWW373Wkf9c6YP2NhXpPk\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol\":{\"keccak256\":\"0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5173fc9143bea314b159ca5a9adb5626659ef763bc598e27de5fa46efe3291a6\",\"dweb:/ipfs/QmSLFeMFPmVeGxT4sxRPW28ictjAS22M8rLeYRu9TXkA6D\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppCore.sol\":{\"keccak256\":\"0x13a9c2d1d2c1f086b8624f2e84c4a4702212daae36f701d92bb915b535cbe4cc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://606515dd9193551bd2c94ac8c304f3776fafcc70e544ebf441f334658b2fd5f0\",\"dweb:/ipfs/QmZ88ey7DdZqV5taAoebabvszX5kdPMSrQCAmTteVdDtcH\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppSender.sol\":{\"keccak256\":\"0x518cf4adca601923ed4baa6619846a253ea32b8d8775f8bc1faa3dfac7f67c20\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d42b471418efadcc3577ef3fa9f8f504e8bed7db90c3b0c862038d8b29529eb2\",\"dweb:/ipfs/QmZETDQiJN4U92fmLKo8T9ZbdDf7BNBUUvo9H7M7GqAyFU\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppCore.sol\":{\"keccak256\":\"0x40e49f2de74506e1da5dcaed53a39853f691647f4ceb0fccc8f49a68d3f47c58\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4a1deb2a6a3eb1fb83936c9578469142bff470295f403d7d07d955a76be3adbd\",\"dweb:/ipfs/QmS9bjSfBaE4YhQ1PCQ1TknbEPbNfRXzBK9E7SaPGyiZEv\"]},\"node_modules/@layerzerolabs/oft-evm/contracts/interfaces/IOFT.sol\":{\"keccak256\":\"0x7ba6bb62fba7ee83451cfb0e727ddeef0e96b4388bd4e9ff0fc6ce103e1101c8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cfbd447f2e8a730bd46a14c3c3e6a0b2bf7446145579603a9793ba5ac1dd38b4\",\"dweb:/ipfs/QmZ4nx4iGrFmBHvYFgki5TXFdCHz4Co38hgdgwpRaM7NLs\"]},\"node_modules/@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol\":{\"keccak256\":\"0x9b6b3e7803bc5f2f8cd7ad57db8ac1def61a9930a5a3107df4882e028a9605d7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://da62d6be1f5c6edf577f0cb45666a8aa9c2086a4bac87d95d65f02e2f4c36a4b\",\"dweb:/ipfs/QmNkpvBpoCMvX8JwAFNSc5XxJ2q5BXJpL5L1txb4QkqVFF\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC165.sol\":{\"keccak256\":\"0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://11fea9f8bc98949ac6709f0c1699db7430d2948137aa94d5a9e95a91f61a710a\",\"dweb:/ipfs/QmQdfRXxQjwP6yn3DVo1GHPpriKNcFghSPi94Z1oKEFUNS\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC20.sol\":{\"keccak256\":\"0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a2608291cb038b388d80b79a06b6118a42f7894ff67b7da10ec0dbbf5b2973ba\",\"dweb:/ipfs/QmWohqcBLbcxmA4eGPhZDXe5RYMMEEpFq22nfkaUMvTfw1\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db\",\"dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0xca2ae13e0610f6a99238dd00b97bd786bc92732dae6d6b9d61f573ec51018310\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://75f8c71ce0c91c40dd5f249ace0b7d8270f8f1767231bcf71490f7157d6ba862\",\"dweb:/ipfs/QmYXgxeDyFHvz3JsXxLEYN6GNUR44ThHeFj5XkpkgMoG4w\"]},\"node_modules/@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0x9d8da059267bac779a2dbbb9a26c2acf00ca83085e105d62d5d4ef96054a47f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c78e2aa4313323cecd1ef12a8d6265b96beee1a199923abf55d9a2a9e291ad23\",\"dweb:/ipfs/QmUTs2KStXucZezzFo3EYeqYu47utu56qrF7jj1Gue65vb\"]},\"node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"node_modules/@openzeppelin/contracts/utils/Errors.sol\":{\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf\",\"dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB\"]},\"node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { "inputs": [], "type": "error", "name": "InvalidLocalDecimals" }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "amountLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minAmountLD", - "type": "uint256" - } - ], - "type": "error", - "name": "SlippageExceeded" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "guid", - "type": "bytes32", - "indexed": true - }, - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32", - "indexed": false - }, - { - "internalType": "address", - "name": "toAddress", - "type": "address", - "indexed": true - }, - { - "internalType": "uint256", - "name": "amountReceivedLD", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "OFTReceived", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "guid", - "type": "bytes32", - "indexed": true - }, - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32", - "indexed": false - }, - { - "internalType": "address", - "name": "fromAddress", - "type": "address", - "indexed": true - }, - { - "internalType": "uint256", - "name": "amountSentLD", - "type": "uint256", - "indexed": false - }, - { - "internalType": "uint256", - "name": "amountReceivedLD", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "OFTSent", - "anonymous": false - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "approvalRequired", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "oftVersion", - "outputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - }, - { "internalType": "uint64", "name": "version", "type": "uint64" } - ] - }, - { - "inputs": [ - { - "internalType": "struct SendParam", - "name": "_sendParam", - "type": "tuple", - "components": [ - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { "internalType": "bytes32", "name": "to", "type": "bytes32" }, - { - "internalType": "uint256", - "name": "amountLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minAmountLD", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "extraOptions", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "composeMsg", - "type": "bytes" - }, - { "internalType": "bytes", "name": "oftCmd", "type": "bytes" } - ] - } - ], - "stateMutability": "view", - "type": "function", - "name": "quoteOFT", - "outputs": [ - { - "internalType": "struct OFTLimit", - "name": "", - "type": "tuple", - "components": [ - { - "internalType": "uint256", - "name": "minAmountLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxAmountLD", - "type": "uint256" - } - ] - }, - { - "internalType": "struct OFTFeeDetail[]", - "name": "oftFeeDetails", - "type": "tuple[]", - "components": [ - { - "internalType": "int256", - "name": "feeAmountLD", - "type": "int256" - }, - { - "internalType": "string", - "name": "description", - "type": "string" - } - ] - }, - { - "internalType": "struct OFTReceipt", - "name": "", - "type": "tuple", - "components": [ - { - "internalType": "uint256", - "name": "amountSentLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "amountReceivedLD", - "type": "uint256" - } - ] - } - ] - }, - { - "inputs": [ - { - "internalType": "struct SendParam", - "name": "_sendParam", - "type": "tuple", - "components": [ - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { "internalType": "bytes32", "name": "to", "type": "bytes32" }, - { - "internalType": "uint256", - "name": "amountLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minAmountLD", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "extraOptions", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "composeMsg", - "type": "bytes" - }, - { "internalType": "bytes", "name": "oftCmd", "type": "bytes" } - ] - }, - { "internalType": "bool", "name": "_payInLzToken", "type": "bool" } - ], - "stateMutability": "view", - "type": "function", - "name": "quoteSend", - "outputs": [ - { - "internalType": "struct MessagingFee", - "name": "", - "type": "tuple", - "components": [ - { - "internalType": "uint256", - "name": "nativeFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "lzTokenFee", - "type": "uint256" - } - ] - } - ] - }, - { - "inputs": [ - { - "internalType": "struct SendParam", - "name": "_sendParam", - "type": "tuple", - "components": [ - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { "internalType": "bytes32", "name": "to", "type": "bytes32" }, - { - "internalType": "uint256", - "name": "amountLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minAmountLD", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "extraOptions", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "composeMsg", - "type": "bytes" - }, - { "internalType": "bytes", "name": "oftCmd", "type": "bytes" } - ] - }, - { - "internalType": "struct MessagingFee", - "name": "_fee", - "type": "tuple", - "components": [ - { - "internalType": "uint256", - "name": "nativeFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "lzTokenFee", - "type": "uint256" - } - ] - }, - { - "internalType": "address", - "name": "_refundAddress", - "type": "address" - } - ], - "stateMutability": "payable", - "type": "function", - "name": "send", - "outputs": [ - { - "internalType": "struct MessagingReceipt", - "name": "", - "type": "tuple", - "components": [ - { - "internalType": "bytes32", - "name": "guid", - "type": "bytes32" - }, - { "internalType": "uint64", "name": "nonce", "type": "uint64" }, - { - "internalType": "struct MessagingFee", - "name": "fee", - "type": "tuple", - "components": [ - { - "internalType": "uint256", - "name": "nativeFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "lzTokenFee", - "type": "uint256" - } - ] - } - ] - }, - { - "internalType": "struct OFTReceipt", - "name": "", - "type": "tuple", - "components": [ - { - "internalType": "uint256", - "name": "amountSentLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "amountReceivedLD", - "type": "uint256" - } - ] - } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "sharedDecimals", - "outputs": [{ "internalType": "uint8", "name": "", "type": "uint8" }] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "token", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ] - } - ], - "devdoc": { - "kind": "dev", - "methods": { - "approvalRequired()": { - "details": "Allows things like wallet implementers to determine integration requirements, without understanding the underlying token implementation.", - "returns": { - "_0": "requiresApproval Needs approval of the underlying token implementation." - } - }, - "oftVersion()": { - "details": "interfaceId: This specific interface ID is '0x02e49c2c'.version: Indicates a cross-chain compatible msg encoding with other OFTs.If a new feature is added to the OFT cross-chain msg encoding, the version will be incremented. ie. localOFT version(x,1) CAN send messages to remoteOFT version(x,1)", - "returns": { - "interfaceId": "The interface ID.", - "version": "The version." - } - }, - "quoteOFT((uint32,bytes32,uint256,uint256,bytes,bytes,bytes))": { - "params": { - "_sendParam": "The parameters for the send operation." - }, - "returns": { - "_0": "limit The OFT limit information.", - "_2": "receipt The OFT receipt information.", - "oftFeeDetails": "The details of OFT fees." - } - }, - "quoteSend((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),bool)": { - "details": "MessagingFee: LayerZero msg fee - nativeFee: The native fee. - lzTokenFee: The lzToken fee.", - "params": { - "_payInLzToken": "Flag indicating whether the caller is paying in the LZ token.", - "_sendParam": "The parameters for the send() operation." - }, - "returns": { - "_0": "fee The calculated LayerZero messaging fee from the send() operation." - } - }, - "send((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),(uint256,uint256),address)": { - "details": "MessagingReceipt: LayerZero msg receipt - guid: The unique identifier for the sent message. - nonce: The nonce of the sent message. - fee: The LayerZero fee incurred for the message.", - "params": { - "_fee": "The fee information supplied by the caller. - nativeFee: The native fee. - lzTokenFee: The lzToken fee.", - "_refundAddress": "The address to receive any excess funds from fees etc. on the src.", - "_sendParam": "The parameters for the send operation." - }, - "returns": { - "_0": "receipt The LayerZero messaging receipt from the send() operation.", - "_1": "oftReceipt The OFT receipt information." - } - }, - "sharedDecimals()": { - "returns": { - "_0": "sharedDecimals The shared decimals of the OFT." - } - }, - "token()": { - "returns": { - "_0": "token The address of the ERC20 token implementation." - } - } - }, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": { - "approvalRequired()": { - "notice": "Indicates whether the OFT contract requires approval of the 'token()' to send." - }, - "oftVersion()": { - "notice": "Retrieves interfaceID and the version of the OFT." - }, - "quoteOFT((uint32,bytes32,uint256,uint256,bytes,bytes,bytes))": { - "notice": "Provides the fee breakdown and settings data for an OFT. Unused in the default implementation." - }, - "quoteSend((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),bool)": { - "notice": "Provides a quote for the send() operation." - }, - "send((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),(uint256,uint256),address)": { - "notice": "Executes the send() operation." - }, - "sharedDecimals()": { - "notice": "Retrieves the shared decimals of the OFT." - }, - "token()": { - "notice": "Retrieves the address of the token associated with the OFT." - } - }, - "version": 1 - } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/oft-evm/contracts/interfaces/IOFT.sol": "IOFT" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol": { - "keccak256": "0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3", - "urls": [ - "bzz-raw://bacc29fd3866af71e59cb0bdc1cf82c882a4a7f4e2652fd413c9f12649762083", - "dweb:/ipfs/QmZh2toLnrQDWaNYhS5K4NoW7Vxd2GdZx9KA77vKEDLAqs" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol": { - "keccak256": "0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc", - "urls": [ - "bzz-raw://d8ff6a8a89297fa127f86b54e0db3eba1d6a6eeb4f6398d3c84d569665ac8f1b", - "dweb:/ipfs/QmVSwhw6xFDrLRAX4RXaCM47yBaBtac4wf36DYEq6KCTvT" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol": { - "keccak256": "0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972", - "urls": [ - "bzz-raw://7e1b245d58221d16d8b5e0f01ef3e289a24a7df1ace3b94239e4d5b954ad5927", - "dweb:/ipfs/Qmappsgp7PCY9rSSNE9Cdn4BTRX591WfCSEgq2HxhA3z6S" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol": { - "keccak256": "0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901", - "urls": [ - "bzz-raw://b18b23a1643fc6636c4ad9d9023e2e6ca2d3c2a4a046482d4655bff09950598d", - "dweb:/ipfs/Qma6G5SqiovwrMPfgqTrRngK1HWW373Wkf9c6YP2NhXpPk" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol": { - "keccak256": "0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e", - "urls": [ - "bzz-raw://5173fc9143bea314b159ca5a9adb5626659ef763bc598e27de5fa46efe3291a6", - "dweb:/ipfs/QmSLFeMFPmVeGxT4sxRPW28ictjAS22M8rLeYRu9TXkA6D" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppCore.sol": { - "keccak256": "0x13a9c2d1d2c1f086b8624f2e84c4a4702212daae36f701d92bb915b535cbe4cc", - "urls": [ - "bzz-raw://606515dd9193551bd2c94ac8c304f3776fafcc70e544ebf441f334658b2fd5f0", - "dweb:/ipfs/QmZ88ey7DdZqV5taAoebabvszX5kdPMSrQCAmTteVdDtcH" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppSender.sol": { - "keccak256": "0x518cf4adca601923ed4baa6619846a253ea32b8d8775f8bc1faa3dfac7f67c20", - "urls": [ - "bzz-raw://d42b471418efadcc3577ef3fa9f8f504e8bed7db90c3b0c862038d8b29529eb2", - "dweb:/ipfs/QmZETDQiJN4U92fmLKo8T9ZbdDf7BNBUUvo9H7M7GqAyFU" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppCore.sol": { - "keccak256": "0x40e49f2de74506e1da5dcaed53a39853f691647f4ceb0fccc8f49a68d3f47c58", - "urls": [ - "bzz-raw://4a1deb2a6a3eb1fb83936c9578469142bff470295f403d7d07d955a76be3adbd", - "dweb:/ipfs/QmS9bjSfBaE4YhQ1PCQ1TknbEPbNfRXzBK9E7SaPGyiZEv" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oft-evm/contracts/interfaces/IOFT.sol": { - "keccak256": "0x7ba6bb62fba7ee83451cfb0e727ddeef0e96b4388bd4e9ff0fc6ce103e1101c8", - "urls": [ - "bzz-raw://cfbd447f2e8a730bd46a14c3c3e6a0b2bf7446145579603a9793ba5ac1dd38b4", - "dweb:/ipfs/QmZ4nx4iGrFmBHvYFgki5TXFdCHz4Co38hgdgwpRaM7NLs" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/access/Ownable.sol": { - "keccak256": "0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb", - "urls": [ - "bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6", - "dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol": { - "keccak256": "0x9b6b3e7803bc5f2f8cd7ad57db8ac1def61a9930a5a3107df4882e028a9605d7", - "urls": [ - "bzz-raw://da62d6be1f5c6edf577f0cb45666a8aa9c2086a4bac87d95d65f02e2f4c36a4b", - "dweb:/ipfs/QmNkpvBpoCMvX8JwAFNSc5XxJ2q5BXJpL5L1txb4QkqVFF" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/interfaces/IERC165.sol": { - "keccak256": "0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724", - "urls": [ - "bzz-raw://11fea9f8bc98949ac6709f0c1699db7430d2948137aa94d5a9e95a91f61a710a", - "dweb:/ipfs/QmQdfRXxQjwP6yn3DVo1GHPpriKNcFghSPi94Z1oKEFUNS" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/interfaces/IERC20.sol": { - "keccak256": "0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c", - "urls": [ - "bzz-raw://a2608291cb038b388d80b79a06b6118a42f7894ff67b7da10ec0dbbf5b2973ba", - "dweb:/ipfs/QmWohqcBLbcxmA4eGPhZDXe5RYMMEEpFq22nfkaUMvTfw1" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol": { - "keccak256": "0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7", - "urls": [ - "bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db", - "dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol": { - "keccak256": "0xca2ae13e0610f6a99238dd00b97bd786bc92732dae6d6b9d61f573ec51018310", - "urls": [ - "bzz-raw://75f8c71ce0c91c40dd5f249ace0b7d8270f8f1767231bcf71490f7157d6ba862", - "dweb:/ipfs/QmYXgxeDyFHvz3JsXxLEYN6GNUR44ThHeFj5XkpkgMoG4w" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Address.sol": { - "keccak256": "0x9d8da059267bac779a2dbbb9a26c2acf00ca83085e105d62d5d4ef96054a47f5", - "urls": [ - "bzz-raw://c78e2aa4313323cecd1ef12a8d6265b96beee1a199923abf55d9a2a9e291ad23", - "dweb:/ipfs/QmUTs2KStXucZezzFo3EYeqYu47utu56qrF7jj1Gue65vb" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Context.sol": { - "keccak256": "0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2", - "urls": [ - "bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12", - "dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Errors.sol": { - "keccak256": "0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123", - "urls": [ - "bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf", - "dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol": { - "keccak256": "0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8", - "urls": [ - "bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621", - "dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL" - ], - "license": "MIT" - } - }, - "version": 1 - }, - "id": 27 -} diff --git a/examples/oft-movement/out/IPreCrime.sol/IPreCrime.json b/examples/oft-movement/out/IPreCrime.sol/IPreCrime.json deleted file mode 100644 index 322fb550e..000000000 --- a/examples/oft-movement/out/IPreCrime.sol/IPreCrime.json +++ /dev/null @@ -1,261 +0,0 @@ -{ - "abi": [ - { - "type": "function", - "name": "buildSimulationResult", - "inputs": [], - "outputs": [{ "name": "", "type": "bytes", "internalType": "bytes" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getConfig", - "inputs": [ - { "name": "_packets", "type": "bytes[]", "internalType": "bytes[]" }, - { - "name": "_packetMsgValues", - "type": "uint256[]", - "internalType": "uint256[]" - } - ], - "outputs": [{ "name": "", "type": "bytes", "internalType": "bytes" }], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "preCrime", - "inputs": [ - { "name": "_packets", "type": "bytes[]", "internalType": "bytes[]" }, - { - "name": "_packetMsgValues", - "type": "uint256[]", - "internalType": "uint256[]" - }, - { "name": "_simulations", "type": "bytes[]", "internalType": "bytes[]" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "simulate", - "inputs": [ - { "name": "_packets", "type": "bytes[]", "internalType": "bytes[]" }, - { - "name": "_packetMsgValues", - "type": "uint256[]", - "internalType": "uint256[]" - } - ], - "outputs": [{ "name": "", "type": "bytes", "internalType": "bytes" }], - "stateMutability": "payable" - }, - { - "type": "function", - "name": "version", - "inputs": [], - "outputs": [ - { "name": "major", "type": "uint64", "internalType": "uint64" }, - { "name": "minor", "type": "uint8", "internalType": "uint8" } - ], - "stateMutability": "view" - }, - { - "type": "error", - "name": "CrimeFound", - "inputs": [{ "name": "crime", "type": "bytes", "internalType": "bytes" }] - }, - { - "type": "error", - "name": "InvalidSimulationResult", - "inputs": [ - { "name": "eid", "type": "uint32", "internalType": "uint32" }, - { "name": "reason", "type": "bytes", "internalType": "bytes" } - ] - }, - { "type": "error", "name": "OnlyOffChain", "inputs": [] }, - { - "type": "error", - "name": "PacketOversize", - "inputs": [ - { "name": "max", "type": "uint256", "internalType": "uint256" }, - { "name": "actual", "type": "uint256", "internalType": "uint256" } - ] - }, - { "type": "error", "name": "PacketUnsorted", "inputs": [] }, - { - "type": "error", - "name": "SimulationFailed", - "inputs": [{ "name": "reason", "type": "bytes", "internalType": "bytes" }] - }, - { - "type": "error", - "name": "SimulationResultNotFound", - "inputs": [{ "name": "eid", "type": "uint32", "internalType": "uint32" }] - } - ], - "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "methodIdentifiers": { - "buildSimulationResult()": "8e9e7099", - "getConfig(bytes[],uint256[])": "f0cd3836", - "preCrime(bytes[],uint256[],bytes[])": "10f9cf3a", - "simulate(bytes[],uint256[])": "50dfa937", - "version()": "54fd4d50" - }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"crime\",\"type\":\"bytes\"}],\"name\":\"CrimeFound\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"reason\",\"type\":\"bytes\"}],\"name\":\"InvalidSimulationResult\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyOffChain\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"max\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actual\",\"type\":\"uint256\"}],\"name\":\"PacketOversize\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PacketUnsorted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"reason\",\"type\":\"bytes\"}],\"name\":\"SimulationFailed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"}],\"name\":\"SimulationResultNotFound\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"buildSimulationResult\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"_packets\",\"type\":\"bytes[]\"},{\"internalType\":\"uint256[]\",\"name\":\"_packetMsgValues\",\"type\":\"uint256[]\"}],\"name\":\"getConfig\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"_packets\",\"type\":\"bytes[]\"},{\"internalType\":\"uint256[]\",\"name\":\"_packetMsgValues\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes[]\",\"name\":\"_simulations\",\"type\":\"bytes[]\"}],\"name\":\"preCrime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"_packets\",\"type\":\"bytes[]\"},{\"internalType\":\"uint256[]\",\"name\":\"_packetMsgValues\",\"type\":\"uint256[]\"}],\"name\":\"simulate\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"major\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"minor\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IPreCrime.sol\":\"IPreCrime\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IPreCrime.sol\":{\"keccak256\":\"0xc8d869f27ef8ceb2e13fdf6a70682fd4dee3f90c4924eb8e125bc1e66cb6af84\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://66bf49d59c14832ea0ddddcd12d512d4f9bd0fd254a1368442587bf3e77fe73e\",\"dweb:/ipfs/QmYUAvsyuUPiSYjbL4zVo6ZtiRSLCUPDvCesqgdZWbSGDg\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { - "inputs": [ - { "internalType": "bytes", "name": "crime", "type": "bytes" } - ], - "type": "error", - "name": "CrimeFound" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" }, - { "internalType": "bytes", "name": "reason", "type": "bytes" } - ], - "type": "error", - "name": "InvalidSimulationResult" - }, - { "inputs": [], "type": "error", "name": "OnlyOffChain" }, - { - "inputs": [ - { "internalType": "uint256", "name": "max", "type": "uint256" }, - { "internalType": "uint256", "name": "actual", "type": "uint256" } - ], - "type": "error", - "name": "PacketOversize" - }, - { "inputs": [], "type": "error", "name": "PacketUnsorted" }, - { - "inputs": [ - { "internalType": "bytes", "name": "reason", "type": "bytes" } - ], - "type": "error", - "name": "SimulationFailed" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" } - ], - "type": "error", - "name": "SimulationResultNotFound" - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "buildSimulationResult", - "outputs": [{ "internalType": "bytes", "name": "", "type": "bytes" }] - }, - { - "inputs": [ - { - "internalType": "bytes[]", - "name": "_packets", - "type": "bytes[]" - }, - { - "internalType": "uint256[]", - "name": "_packetMsgValues", - "type": "uint256[]" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "getConfig", - "outputs": [{ "internalType": "bytes", "name": "", "type": "bytes" }] - }, - { - "inputs": [ - { - "internalType": "bytes[]", - "name": "_packets", - "type": "bytes[]" - }, - { - "internalType": "uint256[]", - "name": "_packetMsgValues", - "type": "uint256[]" - }, - { - "internalType": "bytes[]", - "name": "_simulations", - "type": "bytes[]" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "preCrime" - }, - { - "inputs": [ - { - "internalType": "bytes[]", - "name": "_packets", - "type": "bytes[]" - }, - { - "internalType": "uint256[]", - "name": "_packetMsgValues", - "type": "uint256[]" - } - ], - "stateMutability": "payable", - "type": "function", - "name": "simulate", - "outputs": [{ "internalType": "bytes", "name": "", "type": "bytes" }] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "version", - "outputs": [ - { "internalType": "uint64", "name": "major", "type": "uint64" }, - { "internalType": "uint8", "name": "minor", "type": "uint8" } - ] - } - ], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IPreCrime.sol": "IPreCrime" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IPreCrime.sol": { - "keccak256": "0xc8d869f27ef8ceb2e13fdf6a70682fd4dee3f90c4924eb8e125bc1e66cb6af84", - "urls": [ - "bzz-raw://66bf49d59c14832ea0ddddcd12d512d4f9bd0fd254a1368442587bf3e77fe73e", - "dweb:/ipfs/QmYUAvsyuUPiSYjbL4zVo6ZtiRSLCUPDvCesqgdZWbSGDg" - ], - "license": "MIT" - } - }, - "version": 1 - }, - "id": 23 -} diff --git a/examples/oft-movement/out/IReceiveUlnE2.sol/IReceiveUlnE2.json b/examples/oft-movement/out/IReceiveUlnE2.sol/IReceiveUlnE2.json deleted file mode 100644 index 9b00afd5f..000000000 --- a/examples/oft-movement/out/IReceiveUlnE2.sol/IReceiveUlnE2.json +++ /dev/null @@ -1,134 +0,0 @@ -{ - "abi": [ - { - "type": "function", - "name": "commitVerification", - "inputs": [ - { "name": "_packetHeader", "type": "bytes", "internalType": "bytes" }, - { "name": "_payloadHash", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "verify", - "inputs": [ - { "name": "_packetHeader", "type": "bytes", "internalType": "bytes" }, - { - "name": "_payloadHash", - "type": "bytes32", - "internalType": "bytes32" - }, - { "name": "_confirmations", "type": "uint64", "internalType": "uint64" } - ], - "outputs": [], - "stateMutability": "nonpayable" - } - ], - "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "methodIdentifiers": { - "commitVerification(bytes,bytes32)": "0894edf1", - "verify(bytes,bytes32,uint64)": "0223536e" - }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_packetHeader\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"_payloadHash\",\"type\":\"bytes32\"}],\"name\":\"commitVerification\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_packetHeader\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"_payloadHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"_confirmations\",\"type\":\"uint64\"}],\"name\":\"verify\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"should be implemented by the ReceiveUln302 contract and future ReceiveUln contracts on EndpointV2\",\"kind\":\"dev\",\"methods\":{\"verify(bytes,bytes32,uint64)\":{\"details\":\"this function signature 0x0223536e\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"commitVerification(bytes,bytes32)\":{\"notice\":\"verify the payload at endpoint, will check if all DVNs verified\"},\"verify(bytes,bytes32,uint64)\":{\"notice\":\"for each dvn to verify the payload\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IReceiveUlnE2.sol\":\"IReceiveUlnE2\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IReceiveUlnE2.sol\":{\"keccak256\":\"0xcdf7e690e5d5c0a3ec26a0d7b1a7fe49c7d16a3634721c3944f77d13ff5d4a91\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bd32a05dde1b83be1ce64fcfb9495d8b9bf0c5b3a5b521ac6c214e87e32f3cdc\",\"dweb:/ipfs/QmcDKTor8EQf3cbiWYmeFb9qzUM8JGPzGGN9qJnYjP1nN7\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { - "inputs": [ - { - "internalType": "bytes", - "name": "_packetHeader", - "type": "bytes" - }, - { - "internalType": "bytes32", - "name": "_payloadHash", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "commitVerification" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_packetHeader", - "type": "bytes" - }, - { - "internalType": "bytes32", - "name": "_payloadHash", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "_confirmations", - "type": "uint64" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "verify" - } - ], - "devdoc": { - "kind": "dev", - "methods": { - "verify(bytes,bytes32,uint64)": { - "details": "this function signature 0x0223536e" - } - }, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": { - "commitVerification(bytes,bytes32)": { - "notice": "verify the payload at endpoint, will check if all DVNs verified" - }, - "verify(bytes,bytes32,uint64)": { - "notice": "for each dvn to verify the payload" - } - }, - "version": 1 - } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IReceiveUlnE2.sol": "IReceiveUlnE2" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IReceiveUlnE2.sol": { - "keccak256": "0xcdf7e690e5d5c0a3ec26a0d7b1a7fe49c7d16a3634721c3944f77d13ff5d4a91", - "urls": [ - "bzz-raw://bd32a05dde1b83be1ce64fcfb9495d8b9bf0c5b3a5b521ac6c214e87e32f3cdc", - "dweb:/ipfs/QmcDKTor8EQf3cbiWYmeFb9qzUM8JGPzGGN9qJnYjP1nN7" - ], - "license": "MIT" - } - }, - "version": 1 - }, - "id": 20 -} diff --git a/examples/oft-movement/out/ISendLib.sol/ISendLib.json b/examples/oft-movement/out/ISendLib.sol/ISendLib.json deleted file mode 100644 index d6fd2d01a..000000000 --- a/examples/oft-movement/out/ISendLib.sol/ISendLib.json +++ /dev/null @@ -1,574 +0,0 @@ -{ - "abi": [ - { - "type": "function", - "name": "getConfig", - "inputs": [ - { "name": "_eid", "type": "uint32", "internalType": "uint32" }, - { "name": "_oapp", "type": "address", "internalType": "address" }, - { "name": "_configType", "type": "uint32", "internalType": "uint32" } - ], - "outputs": [ - { "name": "config", "type": "bytes", "internalType": "bytes" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "isSupportedEid", - "inputs": [ - { "name": "_eid", "type": "uint32", "internalType": "uint32" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "messageLibType", - "inputs": [], - "outputs": [ - { "name": "", "type": "uint8", "internalType": "enum MessageLibType" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "quote", - "inputs": [ - { - "name": "_packet", - "type": "tuple", - "internalType": "struct Packet", - "components": [ - { "name": "nonce", "type": "uint64", "internalType": "uint64" }, - { "name": "srcEid", "type": "uint32", "internalType": "uint32" }, - { "name": "sender", "type": "address", "internalType": "address" }, - { "name": "dstEid", "type": "uint32", "internalType": "uint32" }, - { - "name": "receiver", - "type": "bytes32", - "internalType": "bytes32" - }, - { "name": "guid", "type": "bytes32", "internalType": "bytes32" }, - { "name": "message", "type": "bytes", "internalType": "bytes" } - ] - }, - { "name": "_options", "type": "bytes", "internalType": "bytes" }, - { "name": "_payInLzToken", "type": "bool", "internalType": "bool" } - ], - "outputs": [ - { - "name": "", - "type": "tuple", - "internalType": "struct MessagingFee", - "components": [ - { - "name": "nativeFee", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "lzTokenFee", - "type": "uint256", - "internalType": "uint256" - } - ] - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "send", - "inputs": [ - { - "name": "_packet", - "type": "tuple", - "internalType": "struct Packet", - "components": [ - { "name": "nonce", "type": "uint64", "internalType": "uint64" }, - { "name": "srcEid", "type": "uint32", "internalType": "uint32" }, - { "name": "sender", "type": "address", "internalType": "address" }, - { "name": "dstEid", "type": "uint32", "internalType": "uint32" }, - { - "name": "receiver", - "type": "bytes32", - "internalType": "bytes32" - }, - { "name": "guid", "type": "bytes32", "internalType": "bytes32" }, - { "name": "message", "type": "bytes", "internalType": "bytes" } - ] - }, - { "name": "_options", "type": "bytes", "internalType": "bytes" }, - { "name": "_payInLzToken", "type": "bool", "internalType": "bool" } - ], - "outputs": [ - { - "name": "", - "type": "tuple", - "internalType": "struct MessagingFee", - "components": [ - { - "name": "nativeFee", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "lzTokenFee", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { "name": "encodedPacket", "type": "bytes", "internalType": "bytes" } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setConfig", - "inputs": [ - { "name": "_oapp", "type": "address", "internalType": "address" }, - { - "name": "_config", - "type": "tuple[]", - "internalType": "struct SetConfigParam[]", - "components": [ - { "name": "eid", "type": "uint32", "internalType": "uint32" }, - { - "name": "configType", - "type": "uint32", - "internalType": "uint32" - }, - { "name": "config", "type": "bytes", "internalType": "bytes" } - ] - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setTreasury", - "inputs": [ - { "name": "_treasury", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "supportsInterface", - "inputs": [ - { "name": "interfaceId", "type": "bytes4", "internalType": "bytes4" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "version", - "inputs": [], - "outputs": [ - { "name": "major", "type": "uint64", "internalType": "uint64" }, - { "name": "minor", "type": "uint8", "internalType": "uint8" }, - { "name": "endpointVersion", "type": "uint8", "internalType": "uint8" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "withdrawFee", - "inputs": [ - { "name": "_to", "type": "address", "internalType": "address" }, - { "name": "_amount", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "withdrawLzTokenFee", - "inputs": [ - { "name": "_lzToken", "type": "address", "internalType": "address" }, - { "name": "_to", "type": "address", "internalType": "address" }, - { "name": "_amount", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [], - "stateMutability": "nonpayable" - } - ], - "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "methodIdentifiers": { - "getConfig(uint32,address,uint32)": "9c33abf7", - "isSupportedEid(uint32)": "6750cd4c", - "messageLibType()": "1881d94d", - "quote((uint64,uint32,address,uint32,bytes32,bytes32,bytes),bytes,bool)": "d80e9bd9", - "send((uint64,uint32,address,uint32,bytes32,bytes32,bytes),bytes,bool)": "4389e58f", - "setConfig(address,(uint32,uint32,bytes)[])": "20efd722", - "setTreasury(address)": "f0f44260", - "supportsInterface(bytes4)": "01ffc9a7", - "version()": "54fd4d50", - "withdrawFee(address,uint256)": "fd9be522", - "withdrawLzTokenFee(address,address,uint256)": "200175f7" - }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"_oapp\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_configType\",\"type\":\"uint32\"}],\"name\":\"getConfig\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"config\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"}],\"name\":\"isSupportedEid\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"messageLibType\",\"outputs\":[{\"internalType\":\"enum MessageLibType\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"receiver\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"internalType\":\"struct Packet\",\"name\":\"_packet\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"_options\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"_payInLzToken\",\"type\":\"bool\"}],\"name\":\"quote\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nativeFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lzTokenFee\",\"type\":\"uint256\"}],\"internalType\":\"struct MessagingFee\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"receiver\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"internalType\":\"struct Packet\",\"name\":\"_packet\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"_options\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"_payInLzToken\",\"type\":\"bool\"}],\"name\":\"send\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nativeFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lzTokenFee\",\"type\":\"uint256\"}],\"internalType\":\"struct MessagingFee\",\"name\":\"\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"encodedPacket\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_oapp\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"configType\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"config\",\"type\":\"bytes\"}],\"internalType\":\"struct SetConfigParam[]\",\"name\":\"_config\",\"type\":\"tuple[]\"}],\"name\":\"setConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_treasury\",\"type\":\"address\"}],\"name\":\"setTreasury\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"major\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"minor\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"endpointVersion\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"withdrawFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_lzToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"withdrawLzTokenFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"supportsInterface(bytes4)\":{\"details\":\"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section] to learn more about how these ids are created. This function call must use less than 30 000 gas.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol\":\"ISendLib\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\":{\"keccak256\":\"0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bacc29fd3866af71e59cb0bdc1cf82c882a4a7f4e2652fd413c9f12649762083\",\"dweb:/ipfs/QmZh2toLnrQDWaNYhS5K4NoW7Vxd2GdZx9KA77vKEDLAqs\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol\":{\"keccak256\":\"0x5cf5f24751b4e3ea1c9c5ded07cedfdfd62566b6daaffcc0144733859c9dba0c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cae7e35007a714f007ea08045ef7c0cfa6c91fd2425b5028b2d49abad357a5f0\",\"dweb:/ipfs/QmcDBs5tsiyB35b8cwzWQWNnpkawb3uuHRaqE77Hxm2tve\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol\":{\"keccak256\":\"0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d8ff6a8a89297fa127f86b54e0db3eba1d6a6eeb4f6398d3c84d569665ac8f1b\",\"dweb:/ipfs/QmVSwhw6xFDrLRAX4RXaCM47yBaBtac4wf36DYEq6KCTvT\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol\":{\"keccak256\":\"0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7e1b245d58221d16d8b5e0f01ef3e289a24a7df1ace3b94239e4d5b954ad5927\",\"dweb:/ipfs/Qmappsgp7PCY9rSSNE9Cdn4BTRX591WfCSEgq2HxhA3z6S\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol\":{\"keccak256\":\"0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b18b23a1643fc6636c4ad9d9023e2e6ca2d3c2a4a046482d4655bff09950598d\",\"dweb:/ipfs/Qma6G5SqiovwrMPfgqTrRngK1HWW373Wkf9c6YP2NhXpPk\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol\":{\"keccak256\":\"0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5173fc9143bea314b159ca5a9adb5626659ef763bc598e27de5fa46efe3291a6\",\"dweb:/ipfs/QmSLFeMFPmVeGxT4sxRPW28ictjAS22M8rLeYRu9TXkA6D\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol\":{\"keccak256\":\"0xf1c07bc61e7b1dce195ed12d50f87980fbf2d63cac1326fd28287f55fe0ba625\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://060f10ff7afc33c1c2f2b4b5ba29231fd3c943146488084d0e4ab99fce991d97\",\"dweb:/ipfs/QmaSsefAqqEqtf8FgFUmDYMwTsAty3X1pqDb6SiFvry6B3\"]},\"node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { "internalType": "address", "name": "_oapp", "type": "address" }, - { - "internalType": "uint32", - "name": "_configType", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function", - "name": "getConfig", - "outputs": [ - { "internalType": "bytes", "name": "config", "type": "bytes" } - ] - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" } - ], - "stateMutability": "view", - "type": "function", - "name": "isSupportedEid", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "messageLibType", - "outputs": [ - { - "internalType": "enum MessageLibType", - "name": "", - "type": "uint8" - } - ] - }, - { - "inputs": [ - { - "internalType": "struct Packet", - "name": "_packet", - "type": "tuple", - "components": [ - { "internalType": "uint64", "name": "nonce", "type": "uint64" }, - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "receiver", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "guid", - "type": "bytes32" - }, - { "internalType": "bytes", "name": "message", "type": "bytes" } - ] - }, - { "internalType": "bytes", "name": "_options", "type": "bytes" }, - { "internalType": "bool", "name": "_payInLzToken", "type": "bool" } - ], - "stateMutability": "view", - "type": "function", - "name": "quote", - "outputs": [ - { - "internalType": "struct MessagingFee", - "name": "", - "type": "tuple", - "components": [ - { - "internalType": "uint256", - "name": "nativeFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "lzTokenFee", - "type": "uint256" - } - ] - } - ] - }, - { - "inputs": [ - { - "internalType": "struct Packet", - "name": "_packet", - "type": "tuple", - "components": [ - { "internalType": "uint64", "name": "nonce", "type": "uint64" }, - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "receiver", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "guid", - "type": "bytes32" - }, - { "internalType": "bytes", "name": "message", "type": "bytes" } - ] - }, - { "internalType": "bytes", "name": "_options", "type": "bytes" }, - { "internalType": "bool", "name": "_payInLzToken", "type": "bool" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "send", - "outputs": [ - { - "internalType": "struct MessagingFee", - "name": "", - "type": "tuple", - "components": [ - { - "internalType": "uint256", - "name": "nativeFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "lzTokenFee", - "type": "uint256" - } - ] - }, - { - "internalType": "bytes", - "name": "encodedPacket", - "type": "bytes" - } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "_oapp", "type": "address" }, - { - "internalType": "struct SetConfigParam[]", - "name": "_config", - "type": "tuple[]", - "components": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" }, - { - "internalType": "uint32", - "name": "configType", - "type": "uint32" - }, - { "internalType": "bytes", "name": "config", "type": "bytes" } - ] - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setConfig" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_treasury", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setTreasury" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "stateMutability": "view", - "type": "function", - "name": "supportsInterface", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "version", - "outputs": [ - { "internalType": "uint64", "name": "major", "type": "uint64" }, - { "internalType": "uint8", "name": "minor", "type": "uint8" }, - { - "internalType": "uint8", - "name": "endpointVersion", - "type": "uint8" - } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "_to", "type": "address" }, - { "internalType": "uint256", "name": "_amount", "type": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "withdrawFee" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_lzToken", - "type": "address" - }, - { "internalType": "address", "name": "_to", "type": "address" }, - { "internalType": "uint256", "name": "_amount", "type": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "withdrawLzTokenFee" - } - ], - "devdoc": { - "kind": "dev", - "methods": { - "supportsInterface(bytes4)": { - "details": "Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section] to learn more about how these ids are created. This function call must use less than 30 000 gas." - } - }, - "version": 1 - }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol": "ISendLib" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol": { - "keccak256": "0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3", - "urls": [ - "bzz-raw://bacc29fd3866af71e59cb0bdc1cf82c882a4a7f4e2652fd413c9f12649762083", - "dweb:/ipfs/QmZh2toLnrQDWaNYhS5K4NoW7Vxd2GdZx9KA77vKEDLAqs" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol": { - "keccak256": "0x5cf5f24751b4e3ea1c9c5ded07cedfdfd62566b6daaffcc0144733859c9dba0c", - "urls": [ - "bzz-raw://cae7e35007a714f007ea08045ef7c0cfa6c91fd2425b5028b2d49abad357a5f0", - "dweb:/ipfs/QmcDBs5tsiyB35b8cwzWQWNnpkawb3uuHRaqE77Hxm2tve" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol": { - "keccak256": "0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc", - "urls": [ - "bzz-raw://d8ff6a8a89297fa127f86b54e0db3eba1d6a6eeb4f6398d3c84d569665ac8f1b", - "dweb:/ipfs/QmVSwhw6xFDrLRAX4RXaCM47yBaBtac4wf36DYEq6KCTvT" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol": { - "keccak256": "0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972", - "urls": [ - "bzz-raw://7e1b245d58221d16d8b5e0f01ef3e289a24a7df1ace3b94239e4d5b954ad5927", - "dweb:/ipfs/Qmappsgp7PCY9rSSNE9Cdn4BTRX591WfCSEgq2HxhA3z6S" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol": { - "keccak256": "0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901", - "urls": [ - "bzz-raw://b18b23a1643fc6636c4ad9d9023e2e6ca2d3c2a4a046482d4655bff09950598d", - "dweb:/ipfs/Qma6G5SqiovwrMPfgqTrRngK1HWW373Wkf9c6YP2NhXpPk" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol": { - "keccak256": "0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e", - "urls": [ - "bzz-raw://5173fc9143bea314b159ca5a9adb5626659ef763bc598e27de5fa46efe3291a6", - "dweb:/ipfs/QmSLFeMFPmVeGxT4sxRPW28ictjAS22M8rLeYRu9TXkA6D" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol": { - "keccak256": "0xf1c07bc61e7b1dce195ed12d50f87980fbf2d63cac1326fd28287f55fe0ba625", - "urls": [ - "bzz-raw://060f10ff7afc33c1c2f2b4b5ba29231fd3c943146488084d0e4ab99fce991d97", - "dweb:/ipfs/QmaSsefAqqEqtf8FgFUmDYMwTsAty3X1pqDb6SiFvry6B3" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol": { - "keccak256": "0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8", - "urls": [ - "bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621", - "dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL" - ], - "license": "MIT" - } - }, - "version": 1 - }, - "id": 9 -} diff --git a/examples/oft-movement/out/IUltraLightNode301.sol/IUltraLightNode301.json b/examples/oft-movement/out/IUltraLightNode301.sol/IUltraLightNode301.json deleted file mode 100644 index 88372d765..000000000 --- a/examples/oft-movement/out/IUltraLightNode301.sol/IUltraLightNode301.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "abi": [ - { - "type": "function", - "name": "commitVerification", - "inputs": [ - { "name": "_packet", "type": "bytes", "internalType": "bytes" }, - { "name": "_gasLimit", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [], - "stateMutability": "nonpayable" - } - ], - "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "methodIdentifiers": { "commitVerification(bytes,uint256)": "e65106f8" }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_packet\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_gasLimit\",\"type\":\"uint256\"}],\"name\":\"commitVerification\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/uln301/interfaces/IUltraLightNode301.sol\":\"IUltraLightNode301\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/uln301/interfaces/IUltraLightNode301.sol\":{\"keccak256\":\"0x47f8ebeaa7d96a6f337a18c46e3c532da578c7cb0a13fb6e6f014286b991902f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d51f208b931be54e0ae1801c71c0756251d8c26f8d9b7911be1ad57b3d4a5691\",\"dweb:/ipfs/QmWqjst7jnYtSXQ9pakYHutDvENKLyqNg9nPfMxTH8p2Ed\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { - "inputs": [ - { "internalType": "bytes", "name": "_packet", "type": "bytes" }, - { - "internalType": "uint256", - "name": "_gasLimit", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "commitVerification" - } - ], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/uln301/interfaces/IUltraLightNode301.sol": "IUltraLightNode301" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/uln301/interfaces/IUltraLightNode301.sol": { - "keccak256": "0x47f8ebeaa7d96a6f337a18c46e3c532da578c7cb0a13fb6e6f014286b991902f", - "urls": [ - "bzz-raw://d51f208b931be54e0ae1801c71c0756251d8c26f8d9b7911be1ad57b3d4a5691", - "dweb:/ipfs/QmWqjst7jnYtSXQ9pakYHutDvENKLyqNg9nPfMxTH8p2Ed" - ], - "license": "MIT" - } - }, - "version": 1 - }, - "id": 26 -} diff --git a/examples/oft-movement/out/IWorker.sol/IWorker.json b/examples/oft-movement/out/IWorker.sol/IWorker.json deleted file mode 100644 index 77e44a553..000000000 --- a/examples/oft-movement/out/IWorker.sol/IWorker.json +++ /dev/null @@ -1,370 +0,0 @@ -{ - "abi": [ - { - "type": "function", - "name": "defaultMultiplierBps", - "inputs": [], - "outputs": [{ "name": "", "type": "uint16", "internalType": "uint16" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getSupportedOptionTypes", - "inputs": [ - { "name": "_eid", "type": "uint32", "internalType": "uint32" } - ], - "outputs": [{ "name": "", "type": "uint8[]", "internalType": "uint8[]" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "priceFeed", - "inputs": [], - "outputs": [{ "name": "", "type": "address", "internalType": "address" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "setDefaultMultiplierBps", - "inputs": [ - { "name": "_multiplierBps", "type": "uint16", "internalType": "uint16" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setPriceFeed", - "inputs": [ - { "name": "_priceFeed", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setSupportedOptionTypes", - "inputs": [ - { "name": "_eid", "type": "uint32", "internalType": "uint32" }, - { "name": "_optionTypes", "type": "uint8[]", "internalType": "uint8[]" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "withdrawFee", - "inputs": [ - { "name": "_lib", "type": "address", "internalType": "address" }, - { "name": "_to", "type": "address", "internalType": "address" }, - { "name": "_amount", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "event", - "name": "SetDefaultMultiplierBps", - "inputs": [ - { - "name": "multiplierBps", - "type": "uint16", - "indexed": false, - "internalType": "uint16" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "SetPriceFeed", - "inputs": [ - { - "name": "priceFeed", - "type": "address", - "indexed": false, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "SetSupportedOptionTypes", - "inputs": [ - { - "name": "dstEid", - "type": "uint32", - "indexed": false, - "internalType": "uint32" - }, - { - "name": "optionTypes", - "type": "uint8[]", - "indexed": false, - "internalType": "uint8[]" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "SetWorkerLib", - "inputs": [ - { - "name": "workerLib", - "type": "address", - "indexed": false, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "Withdraw", - "inputs": [ - { - "name": "lib", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "to", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "amount", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { "type": "error", "name": "Worker_NotAllowed", "inputs": [] }, - { "type": "error", "name": "Worker_OnlyMessageLib", "inputs": [] }, - { "type": "error", "name": "Worker_RoleRenouncingDisabled", "inputs": [] } - ], - "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "methodIdentifiers": { - "defaultMultiplierBps()": "00bf2e80", - "getSupportedOptionTypes(uint32)": "26e67a37", - "priceFeed()": "741bef1a", - "setDefaultMultiplierBps(uint16)": "c358de0a", - "setPriceFeed(address)": "724e78da", - "setSupportedOptionTypes(uint32,uint8[])": "cd88b903", - "withdrawFee(address,address,uint256)": "1095b6d7" - }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"Worker_NotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Worker_OnlyMessageLib\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Worker_RoleRenouncingDisabled\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"multiplierBps\",\"type\":\"uint16\"}],\"name\":\"SetDefaultMultiplierBps\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"priceFeed\",\"type\":\"address\"}],\"name\":\"SetPriceFeed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint8[]\",\"name\":\"optionTypes\",\"type\":\"uint8[]\"}],\"name\":\"SetSupportedOptionTypes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"workerLib\",\"type\":\"address\"}],\"name\":\"SetWorkerLib\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"lib\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Withdraw\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"defaultMultiplierBps\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"}],\"name\":\"getSupportedOptionTypes\",\"outputs\":[{\"internalType\":\"uint8[]\",\"name\":\"\",\"type\":\"uint8[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"priceFeed\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"_multiplierBps\",\"type\":\"uint16\"}],\"name\":\"setDefaultMultiplierBps\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_priceFeed\",\"type\":\"address\"}],\"name\":\"setPriceFeed\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"uint8[]\",\"name\":\"_optionTypes\",\"type\":\"uint8[]\"}],\"name\":\"setSupportedOptionTypes\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_lib\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"withdrawFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IWorker.sol\":\"IWorker\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IWorker.sol\":{\"keccak256\":\"0xa6b61913767305227576cc6da5067de4208f09a4f58bfbfe32beafdfae9869b1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7fce83bfb831f383606aee7f5ff68a330c8526bb1036f9ba0813d3e4fa8d534\",\"dweb:/ipfs/QmR7zAqJkmCgBj6sguS8t2WthY5k6FwsakgH4UY11uqD4n\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { "inputs": [], "type": "error", "name": "Worker_NotAllowed" }, - { "inputs": [], "type": "error", "name": "Worker_OnlyMessageLib" }, - { - "inputs": [], - "type": "error", - "name": "Worker_RoleRenouncingDisabled" - }, - { - "inputs": [ - { - "internalType": "uint16", - "name": "multiplierBps", - "type": "uint16", - "indexed": false - } - ], - "type": "event", - "name": "SetDefaultMultiplierBps", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "priceFeed", - "type": "address", - "indexed": false - } - ], - "type": "event", - "name": "SetPriceFeed", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32", - "indexed": false - }, - { - "internalType": "uint8[]", - "name": "optionTypes", - "type": "uint8[]", - "indexed": false - } - ], - "type": "event", - "name": "SetSupportedOptionTypes", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "workerLib", - "type": "address", - "indexed": false - } - ], - "type": "event", - "name": "SetWorkerLib", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "lib", - "type": "address", - "indexed": false - }, - { - "internalType": "address", - "name": "to", - "type": "address", - "indexed": false - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "Withdraw", - "anonymous": false - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "defaultMultiplierBps", - "outputs": [ - { "internalType": "uint16", "name": "", "type": "uint16" } - ] - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" } - ], - "stateMutability": "view", - "type": "function", - "name": "getSupportedOptionTypes", - "outputs": [ - { "internalType": "uint8[]", "name": "", "type": "uint8[]" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "priceFeed", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ] - }, - { - "inputs": [ - { - "internalType": "uint16", - "name": "_multiplierBps", - "type": "uint16" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setDefaultMultiplierBps" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_priceFeed", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setPriceFeed" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { - "internalType": "uint8[]", - "name": "_optionTypes", - "type": "uint8[]" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setSupportedOptionTypes" - }, - { - "inputs": [ - { "internalType": "address", "name": "_lib", "type": "address" }, - { "internalType": "address", "name": "_to", "type": "address" }, - { "internalType": "uint256", "name": "_amount", "type": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "withdrawFee" - } - ], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IWorker.sol": "IWorker" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IWorker.sol": { - "keccak256": "0xa6b61913767305227576cc6da5067de4208f09a4f58bfbfe32beafdfae9869b1", - "urls": [ - "bzz-raw://b7fce83bfb831f383606aee7f5ff68a330c8526bb1036f9ba0813d3e4fa8d534", - "dweb:/ipfs/QmR7zAqJkmCgBj6sguS8t2WthY5k6FwsakgH4UY11uqD4n" - ], - "license": "MIT" - } - }, - "version": 1 - }, - "id": 10 -} diff --git a/examples/oft-movement/out/MessageLibBase.sol/MessageLibBase.json b/examples/oft-movement/out/MessageLibBase.sol/MessageLibBase.json deleted file mode 100644 index 463ca6d1d..000000000 --- a/examples/oft-movement/out/MessageLibBase.sol/MessageLibBase.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "abi": [ - { "type": "error", "name": "LZ_MessageLib_OnlyEndpoint", "inputs": [] } - ], - "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "methodIdentifiers": {}, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"LZ_MessageLib_OnlyEndpoint\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"simply a container of endpoint address and local eid\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/MessageLibBase.sol\":\"MessageLibBase\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/MessageLibBase.sol\":{\"keccak256\":\"0x14899a4398251439938d6ef8a15ea8c6acdddc98a7b0066d7e63676192dea0d1\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://3998d03de7025c2c601a4fdcaf9475d12a1ef661fcf1a685ece84fdde6498cf9\",\"dweb:/ipfs/QmReknRbiGAiPqq9toKyXKo6hUKXrQPJyyS6LnTGjiDKoY\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { "inputs": [], "type": "error", "name": "LZ_MessageLib_OnlyEndpoint" } - ], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/MessageLibBase.sol": "MessageLibBase" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/MessageLibBase.sol": { - "keccak256": "0x14899a4398251439938d6ef8a15ea8c6acdddc98a7b0066d7e63676192dea0d1", - "urls": [ - "bzz-raw://3998d03de7025c2c601a4fdcaf9475d12a1ef661fcf1a685ece84fdde6498cf9", - "dweb:/ipfs/QmReknRbiGAiPqq9toKyXKo6hUKXrQPJyyS6LnTGjiDKoY" - ], - "license": "LZBL-1.2" - } - }, - "version": 1 - }, - "id": 0 -} diff --git a/examples/oft-movement/out/MessageLibManager.sol/MessageLibManager.json b/examples/oft-movement/out/MessageLibManager.sol/MessageLibManager.json deleted file mode 100644 index 21ef7dc54..000000000 --- a/examples/oft-movement/out/MessageLibManager.sol/MessageLibManager.json +++ /dev/null @@ -1,1180 +0,0 @@ -{ - "abi": [ - { - "type": "function", - "name": "blockedLibrary", - "inputs": [], - "outputs": [{ "name": "", "type": "address", "internalType": "address" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "defaultReceiveLibrary", - "inputs": [ - { "name": "srcEid", "type": "uint32", "internalType": "uint32" } - ], - "outputs": [ - { "name": "lib", "type": "address", "internalType": "address" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "defaultReceiveLibraryTimeout", - "inputs": [ - { "name": "srcEid", "type": "uint32", "internalType": "uint32" } - ], - "outputs": [ - { "name": "lib", "type": "address", "internalType": "address" }, - { "name": "expiry", "type": "uint256", "internalType": "uint256" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "defaultSendLibrary", - "inputs": [ - { "name": "dstEid", "type": "uint32", "internalType": "uint32" } - ], - "outputs": [ - { "name": "lib", "type": "address", "internalType": "address" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getConfig", - "inputs": [ - { "name": "_oapp", "type": "address", "internalType": "address" }, - { "name": "_lib", "type": "address", "internalType": "address" }, - { "name": "_eid", "type": "uint32", "internalType": "uint32" }, - { "name": "_configType", "type": "uint32", "internalType": "uint32" } - ], - "outputs": [ - { "name": "config", "type": "bytes", "internalType": "bytes" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getReceiveLibrary", - "inputs": [ - { "name": "_receiver", "type": "address", "internalType": "address" }, - { "name": "_srcEid", "type": "uint32", "internalType": "uint32" } - ], - "outputs": [ - { "name": "lib", "type": "address", "internalType": "address" }, - { "name": "isDefault", "type": "bool", "internalType": "bool" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getRegisteredLibraries", - "inputs": [], - "outputs": [ - { "name": "", "type": "address[]", "internalType": "address[]" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getSendLibrary", - "inputs": [ - { "name": "_sender", "type": "address", "internalType": "address" }, - { "name": "_dstEid", "type": "uint32", "internalType": "uint32" } - ], - "outputs": [ - { "name": "lib", "type": "address", "internalType": "address" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "isDefaultSendLibrary", - "inputs": [ - { "name": "_sender", "type": "address", "internalType": "address" }, - { "name": "_dstEid", "type": "uint32", "internalType": "uint32" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "isRegisteredLibrary", - "inputs": [ - { "name": "lib", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "isSupportedEid", - "inputs": [ - { "name": "_eid", "type": "uint32", "internalType": "uint32" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "isValidReceiveLibrary", - "inputs": [ - { "name": "_receiver", "type": "address", "internalType": "address" }, - { "name": "_srcEid", "type": "uint32", "internalType": "uint32" }, - { - "name": "_actualReceiveLib", - "type": "address", - "internalType": "address" - } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "owner", - "inputs": [], - "outputs": [{ "name": "", "type": "address", "internalType": "address" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "receiveLibraryTimeout", - "inputs": [ - { "name": "receiver", "type": "address", "internalType": "address" }, - { "name": "srcEid", "type": "uint32", "internalType": "uint32" } - ], - "outputs": [ - { "name": "lib", "type": "address", "internalType": "address" }, - { "name": "expiry", "type": "uint256", "internalType": "uint256" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "registerLibrary", - "inputs": [ - { "name": "_lib", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "renounceOwnership", - "inputs": [], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setConfig", - "inputs": [ - { "name": "_oapp", "type": "address", "internalType": "address" }, - { "name": "_lib", "type": "address", "internalType": "address" }, - { - "name": "_params", - "type": "tuple[]", - "internalType": "struct SetConfigParam[]", - "components": [ - { "name": "eid", "type": "uint32", "internalType": "uint32" }, - { - "name": "configType", - "type": "uint32", - "internalType": "uint32" - }, - { "name": "config", "type": "bytes", "internalType": "bytes" } - ] - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setDefaultReceiveLibrary", - "inputs": [ - { "name": "_eid", "type": "uint32", "internalType": "uint32" }, - { "name": "_newLib", "type": "address", "internalType": "address" }, - { "name": "_gracePeriod", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setDefaultReceiveLibraryTimeout", - "inputs": [ - { "name": "_eid", "type": "uint32", "internalType": "uint32" }, - { "name": "_lib", "type": "address", "internalType": "address" }, - { "name": "_expiry", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setDefaultSendLibrary", - "inputs": [ - { "name": "_eid", "type": "uint32", "internalType": "uint32" }, - { "name": "_newLib", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setReceiveLibrary", - "inputs": [ - { "name": "_oapp", "type": "address", "internalType": "address" }, - { "name": "_eid", "type": "uint32", "internalType": "uint32" }, - { "name": "_newLib", "type": "address", "internalType": "address" }, - { "name": "_gracePeriod", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setReceiveLibraryTimeout", - "inputs": [ - { "name": "_oapp", "type": "address", "internalType": "address" }, - { "name": "_eid", "type": "uint32", "internalType": "uint32" }, - { "name": "_lib", "type": "address", "internalType": "address" }, - { "name": "_expiry", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setSendLibrary", - "inputs": [ - { "name": "_oapp", "type": "address", "internalType": "address" }, - { "name": "_eid", "type": "uint32", "internalType": "uint32" }, - { "name": "_newLib", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "transferOwnership", - "inputs": [ - { "name": "newOwner", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "event", - "name": "DefaultReceiveLibrarySet", - "inputs": [ - { - "name": "eid", - "type": "uint32", - "indexed": false, - "internalType": "uint32" - }, - { - "name": "newLib", - "type": "address", - "indexed": false, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "DefaultReceiveLibraryTimeoutSet", - "inputs": [ - { - "name": "eid", - "type": "uint32", - "indexed": false, - "internalType": "uint32" - }, - { - "name": "oldLib", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "expiry", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "DefaultSendLibrarySet", - "inputs": [ - { - "name": "eid", - "type": "uint32", - "indexed": false, - "internalType": "uint32" - }, - { - "name": "newLib", - "type": "address", - "indexed": false, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "LibraryRegistered", - "inputs": [ - { - "name": "newLib", - "type": "address", - "indexed": false, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "OwnershipTransferred", - "inputs": [ - { - "name": "previousOwner", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "newOwner", - "type": "address", - "indexed": true, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "ReceiveLibrarySet", - "inputs": [ - { - "name": "receiver", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "eid", - "type": "uint32", - "indexed": false, - "internalType": "uint32" - }, - { - "name": "newLib", - "type": "address", - "indexed": false, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "ReceiveLibraryTimeoutSet", - "inputs": [ - { - "name": "receiver", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "eid", - "type": "uint32", - "indexed": false, - "internalType": "uint32" - }, - { - "name": "oldLib", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "timeout", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "SendLibrarySet", - "inputs": [ - { - "name": "sender", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "eid", - "type": "uint32", - "indexed": false, - "internalType": "uint32" - }, - { - "name": "newLib", - "type": "address", - "indexed": false, - "internalType": "address" - } - ], - "anonymous": false - }, - { "type": "error", "name": "LZ_AlreadyRegistered", "inputs": [] }, - { - "type": "error", - "name": "LZ_DefaultReceiveLibUnavailable", - "inputs": [] - }, - { "type": "error", "name": "LZ_DefaultSendLibUnavailable", "inputs": [] }, - { "type": "error", "name": "LZ_InvalidExpiry", "inputs": [] }, - { "type": "error", "name": "LZ_OnlyNonDefaultLib", "inputs": [] }, - { "type": "error", "name": "LZ_OnlyReceiveLib", "inputs": [] }, - { "type": "error", "name": "LZ_OnlyRegisteredLib", "inputs": [] }, - { "type": "error", "name": "LZ_OnlyRegisteredOrDefaultLib", "inputs": [] }, - { "type": "error", "name": "LZ_OnlySendLib", "inputs": [] }, - { "type": "error", "name": "LZ_SameValue", "inputs": [] }, - { "type": "error", "name": "LZ_UnsupportedEid", "inputs": [] }, - { "type": "error", "name": "LZ_UnsupportedInterface", "inputs": [] }, - { - "type": "error", - "name": "OwnableInvalidOwner", - "inputs": [ - { "name": "owner", "type": "address", "internalType": "address" } - ] - }, - { - "type": "error", - "name": "OwnableUnauthorizedAccount", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ] - } - ], - "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "methodIdentifiers": { - "blockedLibrary()": "73318091", - "defaultReceiveLibrary(uint32)": "6f50a803", - "defaultReceiveLibraryTimeout(uint32)": "6e83f5bb", - "defaultSendLibrary(uint32)": "f64be4c7", - "getConfig(address,address,uint32,uint32)": "2b3197b9", - "getReceiveLibrary(address,uint32)": "402f8468", - "getRegisteredLibraries()": "9132e5c3", - "getSendLibrary(address,uint32)": "b96a277f", - "isDefaultSendLibrary(address,uint32)": "dc93c8a2", - "isRegisteredLibrary(address)": "dc706a62", - "isSupportedEid(uint32)": "6750cd4c", - "isValidReceiveLibrary(address,uint32,address)": "9d7f9775", - "owner()": "8da5cb5b", - "receiveLibraryTimeout(address,uint32)": "ef667aa1", - "registerLibrary(address)": "e8964e81", - "renounceOwnership()": "715018a6", - "setConfig(address,address,(uint32,uint32,bytes)[])": "6dbd9f90", - "setDefaultReceiveLibrary(uint32,address,uint256)": "a718531b", - "setDefaultReceiveLibraryTimeout(uint32,address,uint256)": "d4b4ec8f", - "setDefaultSendLibrary(uint32,address)": "aafea312", - "setReceiveLibrary(address,uint32,address,uint256)": "6a14d715", - "setReceiveLibraryTimeout(address,uint32,address,uint256)": "183c834f", - "setSendLibrary(address,uint32,address)": "9535ff30", - "transferOwnership(address)": "f2fde38b" - }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"LZ_AlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_DefaultReceiveLibUnavailable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_DefaultSendLibUnavailable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_InvalidExpiry\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_OnlyNonDefaultLib\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_OnlyReceiveLib\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_OnlyRegisteredLib\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_OnlyRegisteredOrDefaultLib\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_OnlySendLib\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_SameValue\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_UnsupportedEid\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_UnsupportedInterface\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newLib\",\"type\":\"address\"}],\"name\":\"DefaultReceiveLibrarySet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldLib\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"expiry\",\"type\":\"uint256\"}],\"name\":\"DefaultReceiveLibraryTimeoutSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newLib\",\"type\":\"address\"}],\"name\":\"DefaultSendLibrarySet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newLib\",\"type\":\"address\"}],\"name\":\"LibraryRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newLib\",\"type\":\"address\"}],\"name\":\"ReceiveLibrarySet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldLib\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timeout\",\"type\":\"uint256\"}],\"name\":\"ReceiveLibraryTimeoutSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newLib\",\"type\":\"address\"}],\"name\":\"SendLibrarySet\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"blockedLibrary\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"}],\"name\":\"defaultReceiveLibrary\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"lib\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"}],\"name\":\"defaultReceiveLibraryTimeout\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"lib\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"expiry\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"}],\"name\":\"defaultSendLibrary\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"lib\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_oapp\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_lib\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"_configType\",\"type\":\"uint32\"}],\"name\":\"getConfig\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"config\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_srcEid\",\"type\":\"uint32\"}],\"name\":\"getReceiveLibrary\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"lib\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isDefault\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRegisteredLibraries\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_dstEid\",\"type\":\"uint32\"}],\"name\":\"getSendLibrary\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"lib\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_dstEid\",\"type\":\"uint32\"}],\"name\":\"isDefaultSendLibrary\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"lib\",\"type\":\"address\"}],\"name\":\"isRegisteredLibrary\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"}],\"name\":\"isSupportedEid\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_srcEid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"_actualReceiveLib\",\"type\":\"address\"}],\"name\":\"isValidReceiveLibrary\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"}],\"name\":\"receiveLibraryTimeout\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"lib\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"expiry\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_lib\",\"type\":\"address\"}],\"name\":\"registerLibrary\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_oapp\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_lib\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"configType\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"config\",\"type\":\"bytes\"}],\"internalType\":\"struct SetConfigParam[]\",\"name\":\"_params\",\"type\":\"tuple[]\"}],\"name\":\"setConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"_newLib\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_gracePeriod\",\"type\":\"uint256\"}],\"name\":\"setDefaultReceiveLibrary\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"_lib\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_expiry\",\"type\":\"uint256\"}],\"name\":\"setDefaultReceiveLibraryTimeout\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"_newLib\",\"type\":\"address\"}],\"name\":\"setDefaultSendLibrary\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_oapp\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"_newLib\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_gracePeriod\",\"type\":\"uint256\"}],\"name\":\"setReceiveLibrary\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_oapp\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"_lib\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_expiry\",\"type\":\"uint256\"}],\"name\":\"setReceiveLibraryTimeout\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_oapp\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"_newLib\",\"type\":\"address\"}],\"name\":\"setSendLibrary\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}]},\"kind\":\"dev\",\"methods\":{\"getConfig(address,address,uint32,uint32)\":{\"details\":\"a view function to query the current configuration of the OApp\"},\"getReceiveLibrary(address,uint32)\":{\"details\":\"the receiveLibrary can be lazily resolved that if not set it will point to the default configured by LayerZero\"},\"getSendLibrary(address,uint32)\":{\"details\":\"If the Oapp does not have a selected Send Library, this function will resolve to the default library configured by LayerZero\",\"params\":{\"_dstEid\":\"The destination endpoint id\",\"_sender\":\"The address of the Oapp that is sending the message\"},\"returns\":{\"lib\":\"address of the Send Library\"}},\"isSupportedEid(uint32)\":{\"details\":\"returns true only if both the default send/receive libraries are set\"},\"isValidReceiveLibrary(address,uint32,address)\":{\"details\":\"called when the endpoint checks if the msgLib attempting to verify the msg is the configured msgLib of the Oappthis check provides the ability for Oapp to lock in a trusted msgLibit will fist check if the msgLib is the currently configured one. then check if the msgLib is the one in grace period of msgLib versioning upgrade\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"registerLibrary(address)\":{\"details\":\"all libraries have to implement the erc165 interface to prevent wrong configurationsonly owner\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"setConfig(address,address,(uint32,uint32,bytes)[])\":{\"details\":\"authenticated by the _oapp\"},\"setDefaultReceiveLibrary(uint32,address,uint256)\":{\"details\":\"owner setting the defaultSendLibrarymust be a registered library (including blockLibrary) with the eid support enabledin version migration, it can add a grace period to the old library. if the grace period is 0, it will delete the timeout configuration.only owner\"},\"setDefaultReceiveLibraryTimeout(uint32,address,uint256)\":{\"details\":\"owner setting the defaultSendLibrarymust be a registered library (including blockLibrary) with the eid support enabledcan used to (1) extend the current configuration (2) force remove the current configuration (3) change to a new configuration\",\"params\":{\"_expiry\":\"the block number when lib expires\"}},\"setDefaultSendLibrary(uint32,address)\":{\"details\":\"owner setting the defaultSendLibrarycan set to the blockedLibrary, which is a registered librarythe msgLib must enable the support before they can be registered to the endpoint as the defaultonly owner\"},\"setReceiveLibrary(address,uint32,address,uint256)\":{\"details\":\"Oapp setting the receiveLibrarymust be a registered library (including blockLibrary) with the eid support enabledin version migration, it can add a grace period to the old library. if the grace period is 0, it will delete the timeout configuration.authenticated by the Oapp\",\"params\":{\"_gracePeriod\":\"the number of blocks from now until oldLib expires\"}},\"setReceiveLibraryTimeout(address,uint32,address,uint256)\":{\"details\":\"Oapp setting the defaultSendLibrarymust be a registered library (including blockLibrary) with the eid support enabledcan used to (1) extend the current configuration (2) force remove the current configuration (3) change to a new configuration\",\"params\":{\"_expiry\":\"the block number when lib expires\"}},\"setSendLibrary(address,uint32,address)\":{\"details\":\"Oapp setting the sendLibrarymust be a registered library (including blockLibrary) with the eid support enabledauthenticated by the Oapp\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getSendLibrary(address,uint32)\":{\"notice\":\"The Send Library is the Oapp specified library that will be used to send the message to the destination endpoint. If the Oapp does not specify a Send Library, the default Send Library will be used.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessageLibManager.sol\":\"MessageLibManager\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessageLibManager.sol\":{\"keccak256\":\"0x64330e51de72e8d38cfc0eb5527d36baada46df4bc14233d3a8ecaf98098d69a\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://49aa45e5a26fc62e7af569cf915be8344adc78dceb6871c4c14bc5d115e59241\",\"dweb:/ipfs/QmbTuW7kzPDYForDEPnaNQi6ZrmWqDxGVnHFiugnvTyq9K\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol\":{\"keccak256\":\"0x5cf5f24751b4e3ea1c9c5ded07cedfdfd62566b6daaffcc0144733859c9dba0c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cae7e35007a714f007ea08045ef7c0cfa6c91fd2425b5028b2d49abad357a5f0\",\"dweb:/ipfs/QmcDBs5tsiyB35b8cwzWQWNnpkawb3uuHRaqE77Hxm2tve\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol\":{\"keccak256\":\"0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d8ff6a8a89297fa127f86b54e0db3eba1d6a6eeb4f6398d3c84d569665ac8f1b\",\"dweb:/ipfs/QmVSwhw6xFDrLRAX4RXaCM47yBaBtac4wf36DYEq6KCTvT\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Errors.sol\":{\"keccak256\":\"0x35bcd6ca99c4c8d9f7d8413d1b92fb4a4d4a420ce3bf64b0fb01e68e6bcf2fa7\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://0ac14f98563f9c610c936c93e71eff657efaba1e1d892be6a215aa5cb1f63a24\",\"dweb:/ipfs/QmVZZ8owwfDGLQTAzQJJqmYY4KsrChDagh5GBK7rChT5wb\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/BlockedMessageLib.sol\":{\"keccak256\":\"0xb2b55968b26294139742adee6c155897c8334f4c6bf72f1940456cc84e6fbab9\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://e758a1fdcea4039b19f1252e4e2958f4a0e05517eb3e151784431533446c225f\",\"dweb:/ipfs/QmRBG345abgyUeTnSpuxdK1WbK5pvwhSmvBEgW1mnoYqTq\"]},\"node_modules/@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"node_modules/@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0xddce8e17e3d3f9ed818b4f4c4478a8262aab8b11ed322f1bf5ed705bb4bd97fa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8084aa71a4cc7d2980972412a88fe4f114869faea3fefa5436431644eb5c0287\",\"dweb:/ipfs/Qmbqfs5dRdPvHVKY8kTaeyc65NdqXRQwRK7h9s5UJEhD1p\"]},\"node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { "inputs": [], "type": "error", "name": "LZ_AlreadyRegistered" }, - { - "inputs": [], - "type": "error", - "name": "LZ_DefaultReceiveLibUnavailable" - }, - { - "inputs": [], - "type": "error", - "name": "LZ_DefaultSendLibUnavailable" - }, - { "inputs": [], "type": "error", "name": "LZ_InvalidExpiry" }, - { "inputs": [], "type": "error", "name": "LZ_OnlyNonDefaultLib" }, - { "inputs": [], "type": "error", "name": "LZ_OnlyReceiveLib" }, - { "inputs": [], "type": "error", "name": "LZ_OnlyRegisteredLib" }, - { - "inputs": [], - "type": "error", - "name": "LZ_OnlyRegisteredOrDefaultLib" - }, - { "inputs": [], "type": "error", "name": "LZ_OnlySendLib" }, - { "inputs": [], "type": "error", "name": "LZ_SameValue" }, - { "inputs": [], "type": "error", "name": "LZ_UnsupportedEid" }, - { "inputs": [], "type": "error", "name": "LZ_UnsupportedInterface" }, - { - "inputs": [ - { "internalType": "address", "name": "owner", "type": "address" } - ], - "type": "error", - "name": "OwnableInvalidOwner" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "type": "error", - "name": "OwnableUnauthorizedAccount" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "eid", - "type": "uint32", - "indexed": false - }, - { - "internalType": "address", - "name": "newLib", - "type": "address", - "indexed": false - } - ], - "type": "event", - "name": "DefaultReceiveLibrarySet", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "eid", - "type": "uint32", - "indexed": false - }, - { - "internalType": "address", - "name": "oldLib", - "type": "address", - "indexed": false - }, - { - "internalType": "uint256", - "name": "expiry", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "DefaultReceiveLibraryTimeoutSet", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "eid", - "type": "uint32", - "indexed": false - }, - { - "internalType": "address", - "name": "newLib", - "type": "address", - "indexed": false - } - ], - "type": "event", - "name": "DefaultSendLibrarySet", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newLib", - "type": "address", - "indexed": false - } - ], - "type": "event", - "name": "LibraryRegistered", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "previousOwner", - "type": "address", - "indexed": true - }, - { - "internalType": "address", - "name": "newOwner", - "type": "address", - "indexed": true - } - ], - "type": "event", - "name": "OwnershipTransferred", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "receiver", - "type": "address", - "indexed": false - }, - { - "internalType": "uint32", - "name": "eid", - "type": "uint32", - "indexed": false - }, - { - "internalType": "address", - "name": "newLib", - "type": "address", - "indexed": false - } - ], - "type": "event", - "name": "ReceiveLibrarySet", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "receiver", - "type": "address", - "indexed": false - }, - { - "internalType": "uint32", - "name": "eid", - "type": "uint32", - "indexed": false - }, - { - "internalType": "address", - "name": "oldLib", - "type": "address", - "indexed": false - }, - { - "internalType": "uint256", - "name": "timeout", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "ReceiveLibraryTimeoutSet", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address", - "indexed": false - }, - { - "internalType": "uint32", - "name": "eid", - "type": "uint32", - "indexed": false - }, - { - "internalType": "address", - "name": "newLib", - "type": "address", - "indexed": false - } - ], - "type": "event", - "name": "SendLibrarySet", - "anonymous": false - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "blockedLibrary", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ] - }, - { - "inputs": [ - { "internalType": "uint32", "name": "srcEid", "type": "uint32" } - ], - "stateMutability": "view", - "type": "function", - "name": "defaultReceiveLibrary", - "outputs": [ - { "internalType": "address", "name": "lib", "type": "address" } - ] - }, - { - "inputs": [ - { "internalType": "uint32", "name": "srcEid", "type": "uint32" } - ], - "stateMutability": "view", - "type": "function", - "name": "defaultReceiveLibraryTimeout", - "outputs": [ - { "internalType": "address", "name": "lib", "type": "address" }, - { "internalType": "uint256", "name": "expiry", "type": "uint256" } - ] - }, - { - "inputs": [ - { "internalType": "uint32", "name": "dstEid", "type": "uint32" } - ], - "stateMutability": "view", - "type": "function", - "name": "defaultSendLibrary", - "outputs": [ - { "internalType": "address", "name": "lib", "type": "address" } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "_oapp", "type": "address" }, - { "internalType": "address", "name": "_lib", "type": "address" }, - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { - "internalType": "uint32", - "name": "_configType", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function", - "name": "getConfig", - "outputs": [ - { "internalType": "bytes", "name": "config", "type": "bytes" } - ] - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_receiver", - "type": "address" - }, - { "internalType": "uint32", "name": "_srcEid", "type": "uint32" } - ], - "stateMutability": "view", - "type": "function", - "name": "getReceiveLibrary", - "outputs": [ - { "internalType": "address", "name": "lib", "type": "address" }, - { "internalType": "bool", "name": "isDefault", "type": "bool" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "getRegisteredLibraries", - "outputs": [ - { "internalType": "address[]", "name": "", "type": "address[]" } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "_sender", "type": "address" }, - { "internalType": "uint32", "name": "_dstEid", "type": "uint32" } - ], - "stateMutability": "view", - "type": "function", - "name": "getSendLibrary", - "outputs": [ - { "internalType": "address", "name": "lib", "type": "address" } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "_sender", "type": "address" }, - { "internalType": "uint32", "name": "_dstEid", "type": "uint32" } - ], - "stateMutability": "view", - "type": "function", - "name": "isDefaultSendLibrary", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "address", "name": "lib", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "isRegisteredLibrary", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" } - ], - "stateMutability": "view", - "type": "function", - "name": "isSupportedEid", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_receiver", - "type": "address" - }, - { "internalType": "uint32", "name": "_srcEid", "type": "uint32" }, - { - "internalType": "address", - "name": "_actualReceiveLib", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function", - "name": "isValidReceiveLibrary", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "owner", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ] - }, - { - "inputs": [ - { - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { "internalType": "uint32", "name": "srcEid", "type": "uint32" } - ], - "stateMutability": "view", - "type": "function", - "name": "receiveLibraryTimeout", - "outputs": [ - { "internalType": "address", "name": "lib", "type": "address" }, - { "internalType": "uint256", "name": "expiry", "type": "uint256" } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "_lib", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "registerLibrary" - }, - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "function", - "name": "renounceOwnership" - }, - { - "inputs": [ - { "internalType": "address", "name": "_oapp", "type": "address" }, - { "internalType": "address", "name": "_lib", "type": "address" }, - { - "internalType": "struct SetConfigParam[]", - "name": "_params", - "type": "tuple[]", - "components": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" }, - { - "internalType": "uint32", - "name": "configType", - "type": "uint32" - }, - { "internalType": "bytes", "name": "config", "type": "bytes" } - ] - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setConfig" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { "internalType": "address", "name": "_newLib", "type": "address" }, - { - "internalType": "uint256", - "name": "_gracePeriod", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setDefaultReceiveLibrary" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { "internalType": "address", "name": "_lib", "type": "address" }, - { "internalType": "uint256", "name": "_expiry", "type": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setDefaultReceiveLibraryTimeout" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { "internalType": "address", "name": "_newLib", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setDefaultSendLibrary" - }, - { - "inputs": [ - { "internalType": "address", "name": "_oapp", "type": "address" }, - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { "internalType": "address", "name": "_newLib", "type": "address" }, - { - "internalType": "uint256", - "name": "_gracePeriod", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setReceiveLibrary" - }, - { - "inputs": [ - { "internalType": "address", "name": "_oapp", "type": "address" }, - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { "internalType": "address", "name": "_lib", "type": "address" }, - { "internalType": "uint256", "name": "_expiry", "type": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setReceiveLibraryTimeout" - }, - { - "inputs": [ - { "internalType": "address", "name": "_oapp", "type": "address" }, - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { "internalType": "address", "name": "_newLib", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setSendLibrary" - }, - { - "inputs": [ - { "internalType": "address", "name": "newOwner", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "transferOwnership" - } - ], - "devdoc": { - "kind": "dev", - "methods": { - "getConfig(address,address,uint32,uint32)": { - "details": "a view function to query the current configuration of the OApp" - }, - "getReceiveLibrary(address,uint32)": { - "details": "the receiveLibrary can be lazily resolved that if not set it will point to the default configured by LayerZero" - }, - "getSendLibrary(address,uint32)": { - "details": "If the Oapp does not have a selected Send Library, this function will resolve to the default library configured by LayerZero", - "params": { - "_dstEid": "The destination endpoint id", - "_sender": "The address of the Oapp that is sending the message" - }, - "returns": { "lib": "address of the Send Library" } - }, - "isSupportedEid(uint32)": { - "details": "returns true only if both the default send/receive libraries are set" - }, - "isValidReceiveLibrary(address,uint32,address)": { - "details": "called when the endpoint checks if the msgLib attempting to verify the msg is the configured msgLib of the Oappthis check provides the ability for Oapp to lock in a trusted msgLibit will fist check if the msgLib is the currently configured one. then check if the msgLib is the one in grace period of msgLib versioning upgrade" - }, - "owner()": { "details": "Returns the address of the current owner." }, - "registerLibrary(address)": { - "details": "all libraries have to implement the erc165 interface to prevent wrong configurationsonly owner" - }, - "renounceOwnership()": { - "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner." - }, - "setConfig(address,address,(uint32,uint32,bytes)[])": { - "details": "authenticated by the _oapp" - }, - "setDefaultReceiveLibrary(uint32,address,uint256)": { - "details": "owner setting the defaultSendLibrarymust be a registered library (including blockLibrary) with the eid support enabledin version migration, it can add a grace period to the old library. if the grace period is 0, it will delete the timeout configuration.only owner" - }, - "setDefaultReceiveLibraryTimeout(uint32,address,uint256)": { - "details": "owner setting the defaultSendLibrarymust be a registered library (including blockLibrary) with the eid support enabledcan used to (1) extend the current configuration (2) force remove the current configuration (3) change to a new configuration", - "params": { "_expiry": "the block number when lib expires" } - }, - "setDefaultSendLibrary(uint32,address)": { - "details": "owner setting the defaultSendLibrarycan set to the blockedLibrary, which is a registered librarythe msgLib must enable the support before they can be registered to the endpoint as the defaultonly owner" - }, - "setReceiveLibrary(address,uint32,address,uint256)": { - "details": "Oapp setting the receiveLibrarymust be a registered library (including blockLibrary) with the eid support enabledin version migration, it can add a grace period to the old library. if the grace period is 0, it will delete the timeout configuration.authenticated by the Oapp", - "params": { - "_gracePeriod": "the number of blocks from now until oldLib expires" - } - }, - "setReceiveLibraryTimeout(address,uint32,address,uint256)": { - "details": "Oapp setting the defaultSendLibrarymust be a registered library (including blockLibrary) with the eid support enabledcan used to (1) extend the current configuration (2) force remove the current configuration (3) change to a new configuration", - "params": { "_expiry": "the block number when lib expires" } - }, - "setSendLibrary(address,uint32,address)": { - "details": "Oapp setting the sendLibrarymust be a registered library (including blockLibrary) with the eid support enabledauthenticated by the Oapp" - }, - "transferOwnership(address)": { - "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." - } - }, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": { - "getSendLibrary(address,uint32)": { - "notice": "The Send Library is the Oapp specified library that will be used to send the message to the destination endpoint. If the Oapp does not specify a Send Library, the default Send Library will be used." - } - }, - "version": 1 - } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessageLibManager.sol": "MessageLibManager" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessageLibManager.sol": { - "keccak256": "0x64330e51de72e8d38cfc0eb5527d36baada46df4bc14233d3a8ecaf98098d69a", - "urls": [ - "bzz-raw://49aa45e5a26fc62e7af569cf915be8344adc78dceb6871c4c14bc5d115e59241", - "dweb:/ipfs/QmbTuW7kzPDYForDEPnaNQi6ZrmWqDxGVnHFiugnvTyq9K" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol": { - "keccak256": "0x5cf5f24751b4e3ea1c9c5ded07cedfdfd62566b6daaffcc0144733859c9dba0c", - "urls": [ - "bzz-raw://cae7e35007a714f007ea08045ef7c0cfa6c91fd2425b5028b2d49abad357a5f0", - "dweb:/ipfs/QmcDBs5tsiyB35b8cwzWQWNnpkawb3uuHRaqE77Hxm2tve" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol": { - "keccak256": "0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc", - "urls": [ - "bzz-raw://d8ff6a8a89297fa127f86b54e0db3eba1d6a6eeb4f6398d3c84d569665ac8f1b", - "dweb:/ipfs/QmVSwhw6xFDrLRAX4RXaCM47yBaBtac4wf36DYEq6KCTvT" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Errors.sol": { - "keccak256": "0x35bcd6ca99c4c8d9f7d8413d1b92fb4a4d4a420ce3bf64b0fb01e68e6bcf2fa7", - "urls": [ - "bzz-raw://0ac14f98563f9c610c936c93e71eff657efaba1e1d892be6a215aa5cb1f63a24", - "dweb:/ipfs/QmVZZ8owwfDGLQTAzQJJqmYY4KsrChDagh5GBK7rChT5wb" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/BlockedMessageLib.sol": { - "keccak256": "0xb2b55968b26294139742adee6c155897c8334f4c6bf72f1940456cc84e6fbab9", - "urls": [ - "bzz-raw://e758a1fdcea4039b19f1252e4e2958f4a0e05517eb3e151784431533446c225f", - "dweb:/ipfs/QmRBG345abgyUeTnSpuxdK1WbK5pvwhSmvBEgW1mnoYqTq" - ], - "license": "LZBL-1.2" - }, - "node_modules/@openzeppelin/contracts/access/Ownable.sol": { - "keccak256": "0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb", - "urls": [ - "bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6", - "dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Context.sol": { - "keccak256": "0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2", - "urls": [ - "bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12", - "dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/introspection/ERC165.sol": { - "keccak256": "0xddce8e17e3d3f9ed818b4f4c4478a8262aab8b11ed322f1bf5ed705bb4bd97fa", - "urls": [ - "bzz-raw://8084aa71a4cc7d2980972412a88fe4f114869faea3fefa5436431644eb5c0287", - "dweb:/ipfs/Qmbqfs5dRdPvHVKY8kTaeyc65NdqXRQwRK7h9s5UJEhD1p" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol": { - "keccak256": "0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8", - "urls": [ - "bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621", - "dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL" - ], - "license": "MIT" - } - }, - "version": 1 - }, - "id": 27 -} diff --git a/examples/oft-movement/out/MessagingChannel.sol/MessagingChannel.json b/examples/oft-movement/out/MessagingChannel.sol/MessagingChannel.json deleted file mode 100644 index defac5e28..000000000 --- a/examples/oft-movement/out/MessagingChannel.sol/MessagingChannel.json +++ /dev/null @@ -1,642 +0,0 @@ -{ - "abi": [ - { - "type": "function", - "name": "EMPTY_PAYLOAD_HASH", - "inputs": [], - "outputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "NIL_PAYLOAD_HASH", - "inputs": [], - "outputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "burn", - "inputs": [ - { "name": "_oapp", "type": "address", "internalType": "address" }, - { "name": "_srcEid", "type": "uint32", "internalType": "uint32" }, - { "name": "_sender", "type": "bytes32", "internalType": "bytes32" }, - { "name": "_nonce", "type": "uint64", "internalType": "uint64" }, - { "name": "_payloadHash", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "eid", - "inputs": [], - "outputs": [{ "name": "", "type": "uint32", "internalType": "uint32" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "inboundNonce", - "inputs": [ - { "name": "_receiver", "type": "address", "internalType": "address" }, - { "name": "_srcEid", "type": "uint32", "internalType": "uint32" }, - { "name": "_sender", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [{ "name": "", "type": "uint64", "internalType": "uint64" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "inboundPayloadHash", - "inputs": [ - { "name": "receiver", "type": "address", "internalType": "address" }, - { "name": "srcEid", "type": "uint32", "internalType": "uint32" }, - { "name": "sender", "type": "bytes32", "internalType": "bytes32" }, - { "name": "inboundNonce", "type": "uint64", "internalType": "uint64" } - ], - "outputs": [ - { "name": "payloadHash", "type": "bytes32", "internalType": "bytes32" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "lazyInboundNonce", - "inputs": [ - { "name": "receiver", "type": "address", "internalType": "address" }, - { "name": "srcEid", "type": "uint32", "internalType": "uint32" }, - { "name": "sender", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [ - { "name": "nonce", "type": "uint64", "internalType": "uint64" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "nextGuid", - "inputs": [ - { "name": "_sender", "type": "address", "internalType": "address" }, - { "name": "_dstEid", "type": "uint32", "internalType": "uint32" }, - { "name": "_receiver", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "nilify", - "inputs": [ - { "name": "_oapp", "type": "address", "internalType": "address" }, - { "name": "_srcEid", "type": "uint32", "internalType": "uint32" }, - { "name": "_sender", "type": "bytes32", "internalType": "bytes32" }, - { "name": "_nonce", "type": "uint64", "internalType": "uint64" }, - { "name": "_payloadHash", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "outboundNonce", - "inputs": [ - { "name": "sender", "type": "address", "internalType": "address" }, - { "name": "dstEid", "type": "uint32", "internalType": "uint32" }, - { "name": "receiver", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [ - { "name": "nonce", "type": "uint64", "internalType": "uint64" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "skip", - "inputs": [ - { "name": "_oapp", "type": "address", "internalType": "address" }, - { "name": "_srcEid", "type": "uint32", "internalType": "uint32" }, - { "name": "_sender", "type": "bytes32", "internalType": "bytes32" }, - { "name": "_nonce", "type": "uint64", "internalType": "uint64" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "event", - "name": "InboundNonceSkipped", - "inputs": [ - { - "name": "srcEid", - "type": "uint32", - "indexed": false, - "internalType": "uint32" - }, - { - "name": "sender", - "type": "bytes32", - "indexed": false, - "internalType": "bytes32" - }, - { - "name": "receiver", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "nonce", - "type": "uint64", - "indexed": false, - "internalType": "uint64" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "PacketBurnt", - "inputs": [ - { - "name": "srcEid", - "type": "uint32", - "indexed": false, - "internalType": "uint32" - }, - { - "name": "sender", - "type": "bytes32", - "indexed": false, - "internalType": "bytes32" - }, - { - "name": "receiver", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "nonce", - "type": "uint64", - "indexed": false, - "internalType": "uint64" - }, - { - "name": "payloadHash", - "type": "bytes32", - "indexed": false, - "internalType": "bytes32" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "PacketNilified", - "inputs": [ - { - "name": "srcEid", - "type": "uint32", - "indexed": false, - "internalType": "uint32" - }, - { - "name": "sender", - "type": "bytes32", - "indexed": false, - "internalType": "bytes32" - }, - { - "name": "receiver", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "nonce", - "type": "uint64", - "indexed": false, - "internalType": "uint64" - }, - { - "name": "payloadHash", - "type": "bytes32", - "indexed": false, - "internalType": "bytes32" - } - ], - "anonymous": false - }, - { - "type": "error", - "name": "LZ_InvalidNonce", - "inputs": [ - { "name": "nonce", "type": "uint64", "internalType": "uint64" } - ] - }, - { - "type": "error", - "name": "LZ_PayloadHashNotFound", - "inputs": [ - { "name": "expected", "type": "bytes32", "internalType": "bytes32" }, - { "name": "actual", "type": "bytes32", "internalType": "bytes32" } - ] - } - ], - "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "methodIdentifiers": { - "EMPTY_PAYLOAD_HASH()": "cb5026b9", - "NIL_PAYLOAD_HASH()": "2baf0be7", - "burn(address,uint32,bytes32,uint64,bytes32)": "40f80683", - "eid()": "416ecebf", - "inboundNonce(address,uint32,bytes32)": "a0dd43fc", - "inboundPayloadHash(address,uint32,bytes32,uint64)": "c9fc7bcd", - "lazyInboundNonce(address,uint32,bytes32)": "5b17bb70", - "nextGuid(address,uint32,bytes32)": "aafe5e07", - "nilify(address,uint32,bytes32,uint64,bytes32)": "2e80fbf3", - "outboundNonce(address,uint32,bytes32)": "9c6d7340", - "skip(address,uint32,bytes32,uint64)": "d70b8902" - }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"name\":\"LZ_InvalidNonce\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"expected\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"actual\",\"type\":\"bytes32\"}],\"name\":\"LZ_PayloadHashNotFound\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"name\":\"InboundNonceSkipped\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"payloadHash\",\"type\":\"bytes32\"}],\"name\":\"PacketBurnt\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"payloadHash\",\"type\":\"bytes32\"}],\"name\":\"PacketNilified\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"EMPTY_PAYLOAD_HASH\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"NIL_PAYLOAD_HASH\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_oapp\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"_nonce\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"_payloadHash\",\"type\":\"bytes32\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"eid\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_sender\",\"type\":\"bytes32\"}],\"name\":\"inboundNonce\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"inboundNonce\",\"type\":\"uint64\"}],\"name\":\"inboundPayloadHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"payloadHash\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"}],\"name\":\"lazyInboundNonce\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_receiver\",\"type\":\"bytes32\"}],\"name\":\"nextGuid\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_oapp\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"_nonce\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"_payloadHash\",\"type\":\"bytes32\"}],\"name\":\"nilify\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"receiver\",\"type\":\"bytes32\"}],\"name\":\"outboundNonce\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_oapp\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"_nonce\",\"type\":\"uint64\"}],\"name\":\"skip\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"burn(address,uint32,bytes32,uint64,bytes32)\":{\"details\":\"Marks a nonce as unexecutable and un-verifiable. The nonce can never be re-verified or executed.Reverts if the provided _payloadHash does not match the currently verified payload hash.Only packets with nonces less than or equal to the lazy inbound nonce can be burned.Reverts if the nonce has already been executed.Authenticated by the caller\"},\"constructor\":{\"params\":{\"_eid\":\"is the universally unique id (UUID) of this deployed Endpoint\"}},\"inboundNonce(address,uint32,bytes32)\":{\"details\":\"returns the max index of the longest gapless sequence of verified msg nonces.the uninitialized value is 0. the first nonce is always 1it starts from the lazyInboundNonce (last checkpoint) and iteratively check if the next nonce has been verifiedthis function can OOG if too many backlogs, but it can be trivially fixed by just clearing some prior messagesNOTE: Oapp explicitly skipped nonces count as \\\"verified\\\" for these purposeseg. [1,2,3,4,6,7] => 4, [1,2,6,8,10] => 2, [1,3,4,5,6] => 1\"},\"nextGuid(address,uint32,bytes32)\":{\"details\":\"returns the GUID for the next message given the paththe Oapp might want to include the GUID into the message in some cases\"},\"nilify(address,uint32,bytes32,uint64,bytes32)\":{\"details\":\"Marks a packet as verified, but disallows execution until it is re-verified.Reverts if the provided _payloadHash does not match the currently verified payload hash.A non-verified nonce can be nilified by passing EMPTY_PAYLOAD_HASH for _payloadHash.Assumes the computational intractability of finding a payload that hashes to bytes32.max.Authenticated by the caller\"},\"skip(address,uint32,bytes32,uint64)\":{\"details\":\"the caller must provide _nonce to prevent skipping the unintended nonceit could happen in some race conditions, e.g. to skip nonce 3, but nonce 3 was consumed firstusage: skipping the next nonce to prevent message verification, e.g. skip a message when Precrime throws alertsif the Oapp wants to skip a verified message, it should call the clear() function insteadafter skipping, the lazyInboundNonce is set to the provided nonce, which makes the inboundNonce also the provided nonceie. allows the Oapp to increment the lazyInboundNonce without having had that corresponding msg be verified\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingChannel.sol\":\"MessagingChannel\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingChannel.sol\":{\"keccak256\":\"0x8ab8cb12c8beba699c1a7f22ffa812ac553f7038326d0c0d0af77253005cfe73\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://7c7cba4ae16d0ca46ee0a365a204f7257ceaa892224604bf7c8e65c44737e46c\",\"dweb:/ipfs/QmbQX5hJDKMwKdoo6QkdcusXQXH54SVCPe5hM1ycJZsg7y\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol\":{\"keccak256\":\"0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7e1b245d58221d16d8b5e0f01ef3e289a24a7df1ace3b94239e4d5b954ad5927\",\"dweb:/ipfs/Qmappsgp7PCY9rSSNE9Cdn4BTRX591WfCSEgq2HxhA3z6S\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol\":{\"keccak256\":\"0x2ebbcaaab3554edcd41b581f1a72ac1806afbfb8047d0d47ff098f9af30d6deb\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://2d4b2cf5c3b16dc76c6767f285b57c0af917972327b2be3f7cba5825402f5fc1\",\"dweb:/ipfs/QmQQWiHE2jKEDbjzGutSoZwtApSXYfLqZt5CxEpFj8xyvT\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Errors.sol\":{\"keccak256\":\"0x35bcd6ca99c4c8d9f7d8413d1b92fb4a4d4a420ce3bf64b0fb01e68e6bcf2fa7\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://0ac14f98563f9c610c936c93e71eff657efaba1e1d892be6a215aa5cb1f63a24\",\"dweb:/ipfs/QmVZZ8owwfDGLQTAzQJJqmYY4KsrChDagh5GBK7rChT5wb\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/GUID.sol\":{\"keccak256\":\"0x8a44524af7deb96593f6b5606e9973654a113e1687809f2e45d4a91ba89862d5\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://32dd0b5d1946e0cd5c7b728086aafac50a62c061115afb8b41254589c8a6732b\",\"dweb:/ipfs/QmR9QqtiAUPRLaRVv5wnth3NGPhdWB8rJmWYfz3o5Z1mWj\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { - "inputs": [ - { "internalType": "uint64", "name": "nonce", "type": "uint64" } - ], - "type": "error", - "name": "LZ_InvalidNonce" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "expected", - "type": "bytes32" - }, - { "internalType": "bytes32", "name": "actual", "type": "bytes32" } - ], - "type": "error", - "name": "LZ_PayloadHashNotFound" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32", - "indexed": false - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32", - "indexed": false - }, - { - "internalType": "address", - "name": "receiver", - "type": "address", - "indexed": false - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64", - "indexed": false - } - ], - "type": "event", - "name": "InboundNonceSkipped", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32", - "indexed": false - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32", - "indexed": false - }, - { - "internalType": "address", - "name": "receiver", - "type": "address", - "indexed": false - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64", - "indexed": false - }, - { - "internalType": "bytes32", - "name": "payloadHash", - "type": "bytes32", - "indexed": false - } - ], - "type": "event", - "name": "PacketBurnt", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32", - "indexed": false - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32", - "indexed": false - }, - { - "internalType": "address", - "name": "receiver", - "type": "address", - "indexed": false - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64", - "indexed": false - }, - { - "internalType": "bytes32", - "name": "payloadHash", - "type": "bytes32", - "indexed": false - } - ], - "type": "event", - "name": "PacketNilified", - "anonymous": false - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "EMPTY_PAYLOAD_HASH", - "outputs": [ - { "internalType": "bytes32", "name": "", "type": "bytes32" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "NIL_PAYLOAD_HASH", - "outputs": [ - { "internalType": "bytes32", "name": "", "type": "bytes32" } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "_oapp", "type": "address" }, - { "internalType": "uint32", "name": "_srcEid", "type": "uint32" }, - { "internalType": "bytes32", "name": "_sender", "type": "bytes32" }, - { "internalType": "uint64", "name": "_nonce", "type": "uint64" }, - { - "internalType": "bytes32", - "name": "_payloadHash", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "burn" - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "eid", - "outputs": [ - { "internalType": "uint32", "name": "", "type": "uint32" } - ] - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_receiver", - "type": "address" - }, - { "internalType": "uint32", "name": "_srcEid", "type": "uint32" }, - { "internalType": "bytes32", "name": "_sender", "type": "bytes32" } - ], - "stateMutability": "view", - "type": "function", - "name": "inboundNonce", - "outputs": [ - { "internalType": "uint64", "name": "", "type": "uint64" } - ] - }, - { - "inputs": [ - { - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { "internalType": "uint32", "name": "srcEid", "type": "uint32" }, - { "internalType": "bytes32", "name": "sender", "type": "bytes32" }, - { - "internalType": "uint64", - "name": "inboundNonce", - "type": "uint64" - } - ], - "stateMutability": "view", - "type": "function", - "name": "inboundPayloadHash", - "outputs": [ - { - "internalType": "bytes32", - "name": "payloadHash", - "type": "bytes32" - } - ] - }, - { - "inputs": [ - { - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { "internalType": "uint32", "name": "srcEid", "type": "uint32" }, - { "internalType": "bytes32", "name": "sender", "type": "bytes32" } - ], - "stateMutability": "view", - "type": "function", - "name": "lazyInboundNonce", - "outputs": [ - { "internalType": "uint64", "name": "nonce", "type": "uint64" } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "_sender", "type": "address" }, - { "internalType": "uint32", "name": "_dstEid", "type": "uint32" }, - { - "internalType": "bytes32", - "name": "_receiver", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function", - "name": "nextGuid", - "outputs": [ - { "internalType": "bytes32", "name": "", "type": "bytes32" } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "_oapp", "type": "address" }, - { "internalType": "uint32", "name": "_srcEid", "type": "uint32" }, - { "internalType": "bytes32", "name": "_sender", "type": "bytes32" }, - { "internalType": "uint64", "name": "_nonce", "type": "uint64" }, - { - "internalType": "bytes32", - "name": "_payloadHash", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "nilify" - }, - { - "inputs": [ - { "internalType": "address", "name": "sender", "type": "address" }, - { "internalType": "uint32", "name": "dstEid", "type": "uint32" }, - { "internalType": "bytes32", "name": "receiver", "type": "bytes32" } - ], - "stateMutability": "view", - "type": "function", - "name": "outboundNonce", - "outputs": [ - { "internalType": "uint64", "name": "nonce", "type": "uint64" } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "_oapp", "type": "address" }, - { "internalType": "uint32", "name": "_srcEid", "type": "uint32" }, - { "internalType": "bytes32", "name": "_sender", "type": "bytes32" }, - { "internalType": "uint64", "name": "_nonce", "type": "uint64" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "skip" - } - ], - "devdoc": { - "kind": "dev", - "methods": { - "burn(address,uint32,bytes32,uint64,bytes32)": { - "details": "Marks a nonce as unexecutable and un-verifiable. The nonce can never be re-verified or executed.Reverts if the provided _payloadHash does not match the currently verified payload hash.Only packets with nonces less than or equal to the lazy inbound nonce can be burned.Reverts if the nonce has already been executed.Authenticated by the caller" - }, - "constructor": { - "params": { - "_eid": "is the universally unique id (UUID) of this deployed Endpoint" - } - }, - "inboundNonce(address,uint32,bytes32)": { - "details": "returns the max index of the longest gapless sequence of verified msg nonces.the uninitialized value is 0. the first nonce is always 1it starts from the lazyInboundNonce (last checkpoint) and iteratively check if the next nonce has been verifiedthis function can OOG if too many backlogs, but it can be trivially fixed by just clearing some prior messagesNOTE: Oapp explicitly skipped nonces count as \"verified\" for these purposeseg. [1,2,3,4,6,7] => 4, [1,2,6,8,10] => 2, [1,3,4,5,6] => 1" - }, - "nextGuid(address,uint32,bytes32)": { - "details": "returns the GUID for the next message given the paththe Oapp might want to include the GUID into the message in some cases" - }, - "nilify(address,uint32,bytes32,uint64,bytes32)": { - "details": "Marks a packet as verified, but disallows execution until it is re-verified.Reverts if the provided _payloadHash does not match the currently verified payload hash.A non-verified nonce can be nilified by passing EMPTY_PAYLOAD_HASH for _payloadHash.Assumes the computational intractability of finding a payload that hashes to bytes32.max.Authenticated by the caller" - }, - "skip(address,uint32,bytes32,uint64)": { - "details": "the caller must provide _nonce to prevent skipping the unintended nonceit could happen in some race conditions, e.g. to skip nonce 3, but nonce 3 was consumed firstusage: skipping the next nonce to prevent message verification, e.g. skip a message when Precrime throws alertsif the Oapp wants to skip a verified message, it should call the clear() function insteadafter skipping, the lazyInboundNonce is set to the provided nonce, which makes the inboundNonce also the provided nonceie. allows the Oapp to increment the lazyInboundNonce without having had that corresponding msg be verified" - } - }, - "version": 1 - }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingChannel.sol": "MessagingChannel" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingChannel.sol": { - "keccak256": "0x8ab8cb12c8beba699c1a7f22ffa812ac553f7038326d0c0d0af77253005cfe73", - "urls": [ - "bzz-raw://7c7cba4ae16d0ca46ee0a365a204f7257ceaa892224604bf7c8e65c44737e46c", - "dweb:/ipfs/QmbQX5hJDKMwKdoo6QkdcusXQXH54SVCPe5hM1ycJZsg7y" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol": { - "keccak256": "0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972", - "urls": [ - "bzz-raw://7e1b245d58221d16d8b5e0f01ef3e289a24a7df1ace3b94239e4d5b954ad5927", - "dweb:/ipfs/Qmappsgp7PCY9rSSNE9Cdn4BTRX591WfCSEgq2HxhA3z6S" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol": { - "keccak256": "0x2ebbcaaab3554edcd41b581f1a72ac1806afbfb8047d0d47ff098f9af30d6deb", - "urls": [ - "bzz-raw://2d4b2cf5c3b16dc76c6767f285b57c0af917972327b2be3f7cba5825402f5fc1", - "dweb:/ipfs/QmQQWiHE2jKEDbjzGutSoZwtApSXYfLqZt5CxEpFj8xyvT" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Errors.sol": { - "keccak256": "0x35bcd6ca99c4c8d9f7d8413d1b92fb4a4d4a420ce3bf64b0fb01e68e6bcf2fa7", - "urls": [ - "bzz-raw://0ac14f98563f9c610c936c93e71eff657efaba1e1d892be6a215aa5cb1f63a24", - "dweb:/ipfs/QmVZZ8owwfDGLQTAzQJJqmYY4KsrChDagh5GBK7rChT5wb" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/GUID.sol": { - "keccak256": "0x8a44524af7deb96593f6b5606e9973654a113e1687809f2e45d4a91ba89862d5", - "urls": [ - "bzz-raw://32dd0b5d1946e0cd5c7b728086aafac50a62c061115afb8b41254589c8a6732b", - "dweb:/ipfs/QmR9QqtiAUPRLaRVv5wnth3NGPhdWB8rJmWYfz3o5Z1mWj" - ], - "license": "LZBL-1.2" - } - }, - "version": 1 - }, - "id": 28 -} diff --git a/examples/oft-movement/out/MessagingComposer.sol/MessagingComposer.json b/examples/oft-movement/out/MessagingComposer.sol/MessagingComposer.json deleted file mode 100644 index 22cd741c9..000000000 --- a/examples/oft-movement/out/MessagingComposer.sol/MessagingComposer.json +++ /dev/null @@ -1,517 +0,0 @@ -{ - "abi": [ - { - "type": "function", - "name": "composeQueue", - "inputs": [ - { "name": "from", "type": "address", "internalType": "address" }, - { "name": "to", "type": "address", "internalType": "address" }, - { "name": "guid", "type": "bytes32", "internalType": "bytes32" }, - { "name": "index", "type": "uint16", "internalType": "uint16" } - ], - "outputs": [ - { "name": "messageHash", "type": "bytes32", "internalType": "bytes32" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "lzCompose", - "inputs": [ - { "name": "_from", "type": "address", "internalType": "address" }, - { "name": "_to", "type": "address", "internalType": "address" }, - { "name": "_guid", "type": "bytes32", "internalType": "bytes32" }, - { "name": "_index", "type": "uint16", "internalType": "uint16" }, - { "name": "_message", "type": "bytes", "internalType": "bytes" }, - { "name": "_extraData", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [], - "stateMutability": "payable" - }, - { - "type": "function", - "name": "lzComposeAlert", - "inputs": [ - { "name": "_from", "type": "address", "internalType": "address" }, - { "name": "_to", "type": "address", "internalType": "address" }, - { "name": "_guid", "type": "bytes32", "internalType": "bytes32" }, - { "name": "_index", "type": "uint16", "internalType": "uint16" }, - { "name": "_gas", "type": "uint256", "internalType": "uint256" }, - { "name": "_value", "type": "uint256", "internalType": "uint256" }, - { "name": "_message", "type": "bytes", "internalType": "bytes" }, - { "name": "_extraData", "type": "bytes", "internalType": "bytes" }, - { "name": "_reason", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "sendCompose", - "inputs": [ - { "name": "_to", "type": "address", "internalType": "address" }, - { "name": "_guid", "type": "bytes32", "internalType": "bytes32" }, - { "name": "_index", "type": "uint16", "internalType": "uint16" }, - { "name": "_message", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "event", - "name": "ComposeDelivered", - "inputs": [ - { - "name": "from", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "to", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "guid", - "type": "bytes32", - "indexed": false, - "internalType": "bytes32" - }, - { - "name": "index", - "type": "uint16", - "indexed": false, - "internalType": "uint16" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "ComposeSent", - "inputs": [ - { - "name": "from", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "to", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "guid", - "type": "bytes32", - "indexed": false, - "internalType": "bytes32" - }, - { - "name": "index", - "type": "uint16", - "indexed": false, - "internalType": "uint16" - }, - { - "name": "message", - "type": "bytes", - "indexed": false, - "internalType": "bytes" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "LzComposeAlert", - "inputs": [ - { - "name": "from", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "to", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "executor", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "guid", - "type": "bytes32", - "indexed": false, - "internalType": "bytes32" - }, - { - "name": "index", - "type": "uint16", - "indexed": false, - "internalType": "uint16" - }, - { - "name": "gas", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - }, - { - "name": "value", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - }, - { - "name": "message", - "type": "bytes", - "indexed": false, - "internalType": "bytes" - }, - { - "name": "extraData", - "type": "bytes", - "indexed": false, - "internalType": "bytes" - }, - { - "name": "reason", - "type": "bytes", - "indexed": false, - "internalType": "bytes" - } - ], - "anonymous": false - }, - { "type": "error", "name": "LZ_ComposeExists", "inputs": [] }, - { - "type": "error", - "name": "LZ_ComposeNotFound", - "inputs": [ - { "name": "expected", "type": "bytes32", "internalType": "bytes32" }, - { "name": "actual", "type": "bytes32", "internalType": "bytes32" } - ] - } - ], - "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "methodIdentifiers": { - "composeQueue(address,address,bytes32,uint16)": "35d330b0", - "lzCompose(address,address,bytes32,uint16,bytes,bytes)": "91d20fa1", - "lzComposeAlert(address,address,bytes32,uint16,uint256,uint256,bytes,bytes,bytes)": "697fe6b6", - "sendCompose(address,bytes32,uint16,bytes)": "7cb59012" - }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"LZ_ComposeExists\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"expected\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"actual\",\"type\":\"bytes32\"}],\"name\":\"LZ_ComposeNotFound\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"index\",\"type\":\"uint16\"}],\"name\":\"ComposeDelivered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"index\",\"type\":\"uint16\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"ComposeSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"executor\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"index\",\"type\":\"uint16\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gas\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"reason\",\"type\":\"bytes\"}],\"name\":\"LzComposeAlert\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"internalType\":\"uint16\",\"name\":\"index\",\"type\":\"uint16\"}],\"name\":\"composeQueue\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageHash\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_guid\",\"type\":\"bytes32\"},{\"internalType\":\"uint16\",\"name\":\"_index\",\"type\":\"uint16\"},{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"lzCompose\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_guid\",\"type\":\"bytes32\"},{\"internalType\":\"uint16\",\"name\":\"_index\",\"type\":\"uint16\"},{\"internalType\":\"uint256\",\"name\":\"_gas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_reason\",\"type\":\"bytes\"}],\"name\":\"lzComposeAlert\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_guid\",\"type\":\"bytes32\"},{\"internalType\":\"uint16\",\"name\":\"_index\",\"type\":\"uint16\"},{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"}],\"name\":\"sendCompose\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"lzCompose(address,address,bytes32,uint16,bytes,bytes)\":{\"details\":\"execute a composed messages from the sender to the composer (receiver)the execution provides the execution context (caller, extraData) to the receiver. the receiver can optionally assert the caller and validate the untrusted extraDatacan not re-entrant\",\"params\":{\"_extraData\":\"the extra data provided by the executor. this data is untrusted and should be validated.\",\"_from\":\"the address which sends the composed message. in most cases, it is the Oapp's address.\",\"_guid\":\"the message guid\",\"_message\":\"the message\",\"_to\":\"the address which receives the composed message\"}},\"lzComposeAlert(address,address,bytes32,uint16,uint256,uint256,bytes,bytes,bytes)\":{\"params\":{\"_extraData\":\"the extra data provided by the executor\",\"_from\":\"the address which sends the composed message\",\"_guid\":\"the message guid\",\"_message\":\"the message\",\"_reason\":\"the reason why the message is not received\",\"_to\":\"the address which receives the composed message\"}},\"sendCompose(address,bytes32,uint16,bytes)\":{\"details\":\"the Oapp sends the lzCompose message to the endpointthe composer MUST assert the sender because anyone can send compose msg with this functionwith the same GUID, the Oapp can send compose to multiple _composer at the same timeauthenticated by the msg.sender\",\"params\":{\"_guid\":\"the message guid\",\"_message\":\"the message\",\"_to\":\"the address which will receive the composed message\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingComposer.sol\":\"MessagingComposer\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingComposer.sol\":{\"keccak256\":\"0x20d36578e810e75346daf064813b76a177087214cae77628b1f9d43798cb52d1\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://475b6f3f1ba5d981d0c5f90b9e892d4f9f539f3b12196639b95770b5be4dbf6a\",\"dweb:/ipfs/QmYyGrnR3vDt8Dqa2paQwTG9qrD6anAGFrDZmMra8KGC6s\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroComposer.sol\":{\"keccak256\":\"0xfaca7205d4211ee9208a7e59171e2301731f3d2a20c49b4a839821871f5fdd49\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f254bc60ac26687b5320a43a556e30777b0745abf7cd64d5f4720d9b1d1f7fdf\",\"dweb:/ipfs/QmRSJEZVgxaC3L2DdE6s8P5qkYfM3V5JMeseeFJJqGR4xz\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol\":{\"keccak256\":\"0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b18b23a1643fc6636c4ad9d9023e2e6ca2d3c2a4a046482d4655bff09950598d\",\"dweb:/ipfs/Qma6G5SqiovwrMPfgqTrRngK1HWW373Wkf9c6YP2NhXpPk\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Errors.sol\":{\"keccak256\":\"0x35bcd6ca99c4c8d9f7d8413d1b92fb4a4d4a420ce3bf64b0fb01e68e6bcf2fa7\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://0ac14f98563f9c610c936c93e71eff657efaba1e1d892be6a215aa5cb1f63a24\",\"dweb:/ipfs/QmVZZ8owwfDGLQTAzQJJqmYY4KsrChDagh5GBK7rChT5wb\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { "inputs": [], "type": "error", "name": "LZ_ComposeExists" }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "expected", - "type": "bytes32" - }, - { "internalType": "bytes32", "name": "actual", "type": "bytes32" } - ], - "type": "error", - "name": "LZ_ComposeNotFound" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address", - "indexed": false - }, - { - "internalType": "address", - "name": "to", - "type": "address", - "indexed": false - }, - { - "internalType": "bytes32", - "name": "guid", - "type": "bytes32", - "indexed": false - }, - { - "internalType": "uint16", - "name": "index", - "type": "uint16", - "indexed": false - } - ], - "type": "event", - "name": "ComposeDelivered", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address", - "indexed": false - }, - { - "internalType": "address", - "name": "to", - "type": "address", - "indexed": false - }, - { - "internalType": "bytes32", - "name": "guid", - "type": "bytes32", - "indexed": false - }, - { - "internalType": "uint16", - "name": "index", - "type": "uint16", - "indexed": false - }, - { - "internalType": "bytes", - "name": "message", - "type": "bytes", - "indexed": false - } - ], - "type": "event", - "name": "ComposeSent", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address", - "indexed": true - }, - { - "internalType": "address", - "name": "to", - "type": "address", - "indexed": true - }, - { - "internalType": "address", - "name": "executor", - "type": "address", - "indexed": true - }, - { - "internalType": "bytes32", - "name": "guid", - "type": "bytes32", - "indexed": false - }, - { - "internalType": "uint16", - "name": "index", - "type": "uint16", - "indexed": false - }, - { - "internalType": "uint256", - "name": "gas", - "type": "uint256", - "indexed": false - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256", - "indexed": false - }, - { - "internalType": "bytes", - "name": "message", - "type": "bytes", - "indexed": false - }, - { - "internalType": "bytes", - "name": "extraData", - "type": "bytes", - "indexed": false - }, - { - "internalType": "bytes", - "name": "reason", - "type": "bytes", - "indexed": false - } - ], - "type": "event", - "name": "LzComposeAlert", - "anonymous": false - }, - { - "inputs": [ - { "internalType": "address", "name": "from", "type": "address" }, - { "internalType": "address", "name": "to", "type": "address" }, - { "internalType": "bytes32", "name": "guid", "type": "bytes32" }, - { "internalType": "uint16", "name": "index", "type": "uint16" } - ], - "stateMutability": "view", - "type": "function", - "name": "composeQueue", - "outputs": [ - { - "internalType": "bytes32", - "name": "messageHash", - "type": "bytes32" - } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "_from", "type": "address" }, - { "internalType": "address", "name": "_to", "type": "address" }, - { "internalType": "bytes32", "name": "_guid", "type": "bytes32" }, - { "internalType": "uint16", "name": "_index", "type": "uint16" }, - { "internalType": "bytes", "name": "_message", "type": "bytes" }, - { "internalType": "bytes", "name": "_extraData", "type": "bytes" } - ], - "stateMutability": "payable", - "type": "function", - "name": "lzCompose" - }, - { - "inputs": [ - { "internalType": "address", "name": "_from", "type": "address" }, - { "internalType": "address", "name": "_to", "type": "address" }, - { "internalType": "bytes32", "name": "_guid", "type": "bytes32" }, - { "internalType": "uint16", "name": "_index", "type": "uint16" }, - { "internalType": "uint256", "name": "_gas", "type": "uint256" }, - { "internalType": "uint256", "name": "_value", "type": "uint256" }, - { "internalType": "bytes", "name": "_message", "type": "bytes" }, - { "internalType": "bytes", "name": "_extraData", "type": "bytes" }, - { "internalType": "bytes", "name": "_reason", "type": "bytes" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "lzComposeAlert" - }, - { - "inputs": [ - { "internalType": "address", "name": "_to", "type": "address" }, - { "internalType": "bytes32", "name": "_guid", "type": "bytes32" }, - { "internalType": "uint16", "name": "_index", "type": "uint16" }, - { "internalType": "bytes", "name": "_message", "type": "bytes" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "sendCompose" - } - ], - "devdoc": { - "kind": "dev", - "methods": { - "lzCompose(address,address,bytes32,uint16,bytes,bytes)": { - "details": "execute a composed messages from the sender to the composer (receiver)the execution provides the execution context (caller, extraData) to the receiver. the receiver can optionally assert the caller and validate the untrusted extraDatacan not re-entrant", - "params": { - "_extraData": "the extra data provided by the executor. this data is untrusted and should be validated.", - "_from": "the address which sends the composed message. in most cases, it is the Oapp's address.", - "_guid": "the message guid", - "_message": "the message", - "_to": "the address which receives the composed message" - } - }, - "lzComposeAlert(address,address,bytes32,uint16,uint256,uint256,bytes,bytes,bytes)": { - "params": { - "_extraData": "the extra data provided by the executor", - "_from": "the address which sends the composed message", - "_guid": "the message guid", - "_message": "the message", - "_reason": "the reason why the message is not received", - "_to": "the address which receives the composed message" - } - }, - "sendCompose(address,bytes32,uint16,bytes)": { - "details": "the Oapp sends the lzCompose message to the endpointthe composer MUST assert the sender because anyone can send compose msg with this functionwith the same GUID, the Oapp can send compose to multiple _composer at the same timeauthenticated by the msg.sender", - "params": { - "_guid": "the message guid", - "_message": "the message", - "_to": "the address which will receive the composed message" - } - } - }, - "version": 1 - }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingComposer.sol": "MessagingComposer" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingComposer.sol": { - "keccak256": "0x20d36578e810e75346daf064813b76a177087214cae77628b1f9d43798cb52d1", - "urls": [ - "bzz-raw://475b6f3f1ba5d981d0c5f90b9e892d4f9f539f3b12196639b95770b5be4dbf6a", - "dweb:/ipfs/QmYyGrnR3vDt8Dqa2paQwTG9qrD6anAGFrDZmMra8KGC6s" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroComposer.sol": { - "keccak256": "0xfaca7205d4211ee9208a7e59171e2301731f3d2a20c49b4a839821871f5fdd49", - "urls": [ - "bzz-raw://f254bc60ac26687b5320a43a556e30777b0745abf7cd64d5f4720d9b1d1f7fdf", - "dweb:/ipfs/QmRSJEZVgxaC3L2DdE6s8P5qkYfM3V5JMeseeFJJqGR4xz" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol": { - "keccak256": "0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901", - "urls": [ - "bzz-raw://b18b23a1643fc6636c4ad9d9023e2e6ca2d3c2a4a046482d4655bff09950598d", - "dweb:/ipfs/Qma6G5SqiovwrMPfgqTrRngK1HWW373Wkf9c6YP2NhXpPk" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Errors.sol": { - "keccak256": "0x35bcd6ca99c4c8d9f7d8413d1b92fb4a4d4a420ce3bf64b0fb01e68e6bcf2fa7", - "urls": [ - "bzz-raw://0ac14f98563f9c610c936c93e71eff657efaba1e1d892be6a215aa5cb1f63a24", - "dweb:/ipfs/QmVZZ8owwfDGLQTAzQJJqmYY4KsrChDagh5GBK7rChT5wb" - ], - "license": "LZBL-1.2" - } - }, - "version": 1 - }, - "id": 29 -} diff --git a/examples/oft-movement/out/MessagingContext.sol/MessagingContext.json b/examples/oft-movement/out/MessagingContext.sol/MessagingContext.json deleted file mode 100644 index 4eee9c79b..000000000 --- a/examples/oft-movement/out/MessagingContext.sol/MessagingContext.json +++ /dev/null @@ -1,110 +0,0 @@ -{ - "abi": [ - { - "type": "function", - "name": "getSendContext", - "inputs": [], - "outputs": [ - { "name": "", "type": "uint32", "internalType": "uint32" }, - { "name": "", "type": "address", "internalType": "address" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "isSendingMessage", - "inputs": [], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - } - ], - "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "methodIdentifiers": { - "getSendContext()": "14f651a9", - "isSendingMessage()": "79624ca9" - }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"getSendContext\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isSendingMessage\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"getSendContext()\":{\"details\":\"returns (eid, sender) if sending message, (0, 0) otherwise\"},\"isSendingMessage()\":{\"details\":\"returns true if sending message\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"this contract acts as a non-reentrancy guard and a source of messaging context the context includes the remote eid and the sender address it separates the send and receive context to allow messaging receipts (send back on receive())\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingContext.sol\":\"MessagingContext\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingContext.sol\":{\"keccak256\":\"0x9616f3bd0d7293c9723f2ddf86f9f7030fbd99213c9748557eec8f6d13b25420\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://205e713f5af46f52799e51774ac74dbeee4056de6ddba3c4d78a327536426c54\",\"dweb:/ipfs/QmZ2ZqDwxdjpJbh91qwMfRhhQu4AMEsjUcsTEsdRV4NAys\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol\":{\"keccak256\":\"0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5173fc9143bea314b159ca5a9adb5626659ef763bc598e27de5fa46efe3291a6\",\"dweb:/ipfs/QmSLFeMFPmVeGxT4sxRPW28ictjAS22M8rLeYRu9TXkA6D\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Errors.sol\":{\"keccak256\":\"0x35bcd6ca99c4c8d9f7d8413d1b92fb4a4d4a420ce3bf64b0fb01e68e6bcf2fa7\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://0ac14f98563f9c610c936c93e71eff657efaba1e1d892be6a215aa5cb1f63a24\",\"dweb:/ipfs/QmVZZ8owwfDGLQTAzQJJqmYY4KsrChDagh5GBK7rChT5wb\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "getSendContext", - "outputs": [ - { "internalType": "uint32", "name": "", "type": "uint32" }, - { "internalType": "address", "name": "", "type": "address" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "isSendingMessage", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - } - ], - "devdoc": { - "kind": "dev", - "methods": { - "getSendContext()": { - "details": "returns (eid, sender) if sending message, (0, 0) otherwise" - }, - "isSendingMessage()": { "details": "returns true if sending message" } - }, - "version": 1 - }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingContext.sol": "MessagingContext" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingContext.sol": { - "keccak256": "0x9616f3bd0d7293c9723f2ddf86f9f7030fbd99213c9748557eec8f6d13b25420", - "urls": [ - "bzz-raw://205e713f5af46f52799e51774ac74dbeee4056de6ddba3c4d78a327536426c54", - "dweb:/ipfs/QmZ2ZqDwxdjpJbh91qwMfRhhQu4AMEsjUcsTEsdRV4NAys" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol": { - "keccak256": "0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e", - "urls": [ - "bzz-raw://5173fc9143bea314b159ca5a9adb5626659ef763bc598e27de5fa46efe3291a6", - "dweb:/ipfs/QmSLFeMFPmVeGxT4sxRPW28ictjAS22M8rLeYRu9TXkA6D" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Errors.sol": { - "keccak256": "0x35bcd6ca99c4c8d9f7d8413d1b92fb4a4d4a420ce3bf64b0fb01e68e6bcf2fa7", - "urls": [ - "bzz-raw://0ac14f98563f9c610c936c93e71eff657efaba1e1d892be6a215aa5cb1f63a24", - "dweb:/ipfs/QmVZZ8owwfDGLQTAzQJJqmYY4KsrChDagh5GBK7rChT5wb" - ], - "license": "LZBL-1.2" - } - }, - "version": 1 - }, - "id": 30 -} diff --git a/examples/oft-movement/out/MockERC20.sol/MockERC20.json b/examples/oft-movement/out/MockERC20.sol/MockERC20.json deleted file mode 100644 index cc86b1aeb..000000000 --- a/examples/oft-movement/out/MockERC20.sol/MockERC20.json +++ /dev/null @@ -1,430 +0,0 @@ -{ - "abi": [ - { - "type": "function", - "name": "DOMAIN_SEPARATOR", - "inputs": [], - "outputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "allowance", - "inputs": [ - { "name": "", "type": "address", "internalType": "address" }, - { "name": "", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "approve", - "inputs": [ - { "name": "spender", "type": "address", "internalType": "address" }, - { "name": "amount", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "balanceOf", - "inputs": [{ "name": "", "type": "address", "internalType": "address" }], - "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "decimals", - "inputs": [], - "outputs": [{ "name": "", "type": "uint8", "internalType": "uint8" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "initialize", - "inputs": [ - { "name": "_name", "type": "string", "internalType": "string" }, - { "name": "_symbol", "type": "string", "internalType": "string" }, - { "name": "_decimals", "type": "uint8", "internalType": "uint8" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "name", - "inputs": [], - "outputs": [{ "name": "", "type": "string", "internalType": "string" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "nonces", - "inputs": [{ "name": "", "type": "address", "internalType": "address" }], - "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "permit", - "inputs": [ - { "name": "owner", "type": "address", "internalType": "address" }, - { "name": "spender", "type": "address", "internalType": "address" }, - { "name": "value", "type": "uint256", "internalType": "uint256" }, - { "name": "deadline", "type": "uint256", "internalType": "uint256" }, - { "name": "v", "type": "uint8", "internalType": "uint8" }, - { "name": "r", "type": "bytes32", "internalType": "bytes32" }, - { "name": "s", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "symbol", - "inputs": [], - "outputs": [{ "name": "", "type": "string", "internalType": "string" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "totalSupply", - "inputs": [], - "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "transfer", - "inputs": [ - { "name": "to", "type": "address", "internalType": "address" }, - { "name": "amount", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "transferFrom", - "inputs": [ - { "name": "from", "type": "address", "internalType": "address" }, - { "name": "to", "type": "address", "internalType": "address" }, - { "name": "amount", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "nonpayable" - }, - { - "type": "event", - "name": "Approval", - "inputs": [ - { - "name": "owner", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "spender", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "amount", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "Transfer", - "inputs": [ - { - "name": "from", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "to", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "amount", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - } - ], - "bytecode": { - "object": "0x608060405234801561001057600080fd5b50610e6a806100206000396000f3fe608060405234801561001057600080fd5b50600436106100cf5760003560e01c80633644e5151161008c57806395d89b411161006657806395d89b41146101bb578063a9059cbb146101c3578063d505accf146101d6578063dd62ed3e146101e957600080fd5b80633644e5151461017357806370a082311461017b5780637ecebe001461019b57600080fd5b806306fdde03146100d4578063095ea7b3146100f25780631624f6c61461011557806318160ddd1461012a57806323b872dd14610141578063313ce56714610154575b600080fd5b6100dc610214565b6040516100e9919061096d565b60405180910390f35b6101056101003660046109d8565b6102a2565b60405190151581526020016100e9565b610128610123366004610ab6565b61030f565b005b61013360035481565b6040519081526020016100e9565b61010561014f366004610b2a565b6103ae565b6002546101619060ff1681565b60405160ff90911681526020016100e9565b6101336104c3565b610133610189366004610b66565b60046020526000908152604090205481565b6101336101a9366004610b66565b60086020526000908152604090205481565b6100dc6104e9565b6101056101d13660046109d8565b6104f6565b6101286101e4366004610b81565b61058d565b6101336101f7366004610beb565b600560209081526000928352604080842090915290825290205481565b6000805461022190610c1e565b80601f016020809104026020016040519081016040528092919081815260200182805461024d90610c1e565b801561029a5780601f1061026f5761010080835404028352916020019161029a565b820191906000526020600020905b81548152906001019060200180831161027d57829003601f168201915b505050505081565b3360008181526005602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906102fd9086815260200190565b60405180910390a35060015b92915050565b60095460ff161561035d5760405162461bcd60e51b81526020600482015260136024820152721053149150511657d253925512505312569151606a1b60448201526064015b60405180910390fd5b60006103698482610ca9565b5060016103768382610ca9565b506002805460ff191660ff831617905561038e6107eb565b600655610399610804565b60075550506009805460ff1916600117905550565b6001600160a01b0383166000908152600560209081526040808320338452909152812054600019811461040a576103e581846108a7565b6001600160a01b03861660009081526005602090815260408083203384529091529020555b6001600160a01b03851660009081526004602052604090205461042d90846108a7565b6001600160a01b03808716600090815260046020526040808220939093559086168152205461045c908461090a565b6001600160a01b0380861660008181526004602052604090819020939093559151908716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906104b09087815260200190565b60405180910390a3506001949350505050565b60006006546104d06107eb565b146104e2576104dd610804565b905090565b5060075490565b6001805461022190610c1e565b3360009081526004602052604081205461051090836108a7565b33600090815260046020526040808220929092556001600160a01b0385168152205461053c908361090a565b6001600160a01b0384166000818152600460205260409081902092909255905133907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906102fd9086815260200190565b428410156105dd5760405162461bcd60e51b815260206004820152601760248201527f5045524d49545f444541444c494e455f455850495245440000000000000000006044820152606401610354565b600060016105e96104c3565b6001600160a01b038a16600090815260086020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9928d928d928d9290919061063783610d7f565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810188905260e001604051602081830303815290604052805190602001206040516020016106b092919061190160f01b81526002810192909252602282015260420190565b60408051601f198184030181528282528051602091820120600084529083018083525260ff871690820152606081018590526080810184905260a0016020604051602081039080840390855afa15801561070e573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906107445750876001600160a01b0316816001600160a01b0316145b6107815760405162461bcd60e51b815260206004820152600e60248201526d24a72b20a624a22fa9a4a3a722a960911b6044820152606401610354565b6001600160a01b0381811660009081526005602090815260408083208b8516808552908352928190208a90555189815291928b16917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35050505050505050565b6000610969806107fd63ffffffff8216565b9250505090565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60006040516108369190610d98565b60405180910390207fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66108676107eb565b604080516020810195909552840192909252606083015260808201523060a082015260c00160405160208183030381529060405280519060200120905090565b6000818310156108f95760405162461bcd60e51b815260206004820152601c60248201527f45524332303a207375627472616374696f6e20756e646572666c6f77000000006044820152606401610354565b6109038284610e0e565b9392505050565b6000806109178385610e21565b9050838110156109035760405162461bcd60e51b815260206004820152601860248201527f45524332303a206164646974696f6e206f766572666c6f7700000000000000006044820152606401610354565b4690565b60006020808352835180602085015260005b8181101561099b5785810183015185820160400152820161097f565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b03811681146109d357600080fd5b919050565b600080604083850312156109eb57600080fd5b6109f4836109bc565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112610a2957600080fd5b813567ffffffffffffffff80821115610a4457610a44610a02565b604051601f8301601f19908116603f01168101908282118183101715610a6c57610a6c610a02565b81604052838152866020858801011115610a8557600080fd5b836020870160208301376000602085830101528094505050505092915050565b803560ff811681146109d357600080fd5b600080600060608486031215610acb57600080fd5b833567ffffffffffffffff80821115610ae357600080fd5b610aef87838801610a18565b94506020860135915080821115610b0557600080fd5b50610b1286828701610a18565b925050610b2160408501610aa5565b90509250925092565b600080600060608486031215610b3f57600080fd5b610b48846109bc565b9250610b56602085016109bc565b9150604084013590509250925092565b600060208284031215610b7857600080fd5b610903826109bc565b600080600080600080600060e0888a031215610b9c57600080fd5b610ba5886109bc565b9650610bb3602089016109bc565b95506040880135945060608801359350610bcf60808901610aa5565b925060a0880135915060c0880135905092959891949750929550565b60008060408385031215610bfe57600080fd5b610c07836109bc565b9150610c15602084016109bc565b90509250929050565b600181811c90821680610c3257607f821691505b602082108103610c5257634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115610ca4576000816000526020600020601f850160051c81016020861015610c815750805b601f850160051c820191505b81811015610ca057828155600101610c8d565b5050505b505050565b815167ffffffffffffffff811115610cc357610cc3610a02565b610cd781610cd18454610c1e565b84610c58565b602080601f831160018114610d0c5760008415610cf45750858301515b600019600386901b1c1916600185901b178555610ca0565b600085815260208120601f198616915b82811015610d3b57888601518255948401946001909101908401610d1c565b5085821015610d595787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b600060018201610d9157610d91610d69565b5060010190565b6000808354610da681610c1e565b60018281168015610dbe5760018114610dd357610e02565b60ff1984168752821515830287019450610e02565b8760005260208060002060005b85811015610df95781548a820152908401908201610de0565b50505082870194505b50929695505050505050565b8181038181111561030957610309610d69565b8082018082111561030957610309610d6956fea2646970667358221220b1626f340cc7e358723a21ffc0c4f05b082f946cb5fe3ac8ffb0118df7ad68a964736f6c63430008160033", - "sourceMap": "319:7540:102:-:0;;;;;;;;;;;;;;;;;;;", - "linkReferences": {} - }, - "deployedBytecode": { - "object": "0x608060405234801561001057600080fd5b50600436106100cf5760003560e01c80633644e5151161008c57806395d89b411161006657806395d89b41146101bb578063a9059cbb146101c3578063d505accf146101d6578063dd62ed3e146101e957600080fd5b80633644e5151461017357806370a082311461017b5780637ecebe001461019b57600080fd5b806306fdde03146100d4578063095ea7b3146100f25780631624f6c61461011557806318160ddd1461012a57806323b872dd14610141578063313ce56714610154575b600080fd5b6100dc610214565b6040516100e9919061096d565b60405180910390f35b6101056101003660046109d8565b6102a2565b60405190151581526020016100e9565b610128610123366004610ab6565b61030f565b005b61013360035481565b6040519081526020016100e9565b61010561014f366004610b2a565b6103ae565b6002546101619060ff1681565b60405160ff90911681526020016100e9565b6101336104c3565b610133610189366004610b66565b60046020526000908152604090205481565b6101336101a9366004610b66565b60086020526000908152604090205481565b6100dc6104e9565b6101056101d13660046109d8565b6104f6565b6101286101e4366004610b81565b61058d565b6101336101f7366004610beb565b600560209081526000928352604080842090915290825290205481565b6000805461022190610c1e565b80601f016020809104026020016040519081016040528092919081815260200182805461024d90610c1e565b801561029a5780601f1061026f5761010080835404028352916020019161029a565b820191906000526020600020905b81548152906001019060200180831161027d57829003601f168201915b505050505081565b3360008181526005602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906102fd9086815260200190565b60405180910390a35060015b92915050565b60095460ff161561035d5760405162461bcd60e51b81526020600482015260136024820152721053149150511657d253925512505312569151606a1b60448201526064015b60405180910390fd5b60006103698482610ca9565b5060016103768382610ca9565b506002805460ff191660ff831617905561038e6107eb565b600655610399610804565b60075550506009805460ff1916600117905550565b6001600160a01b0383166000908152600560209081526040808320338452909152812054600019811461040a576103e581846108a7565b6001600160a01b03861660009081526005602090815260408083203384529091529020555b6001600160a01b03851660009081526004602052604090205461042d90846108a7565b6001600160a01b03808716600090815260046020526040808220939093559086168152205461045c908461090a565b6001600160a01b0380861660008181526004602052604090819020939093559151908716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906104b09087815260200190565b60405180910390a3506001949350505050565b60006006546104d06107eb565b146104e2576104dd610804565b905090565b5060075490565b6001805461022190610c1e565b3360009081526004602052604081205461051090836108a7565b33600090815260046020526040808220929092556001600160a01b0385168152205461053c908361090a565b6001600160a01b0384166000818152600460205260409081902092909255905133907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906102fd9086815260200190565b428410156105dd5760405162461bcd60e51b815260206004820152601760248201527f5045524d49545f444541444c494e455f455850495245440000000000000000006044820152606401610354565b600060016105e96104c3565b6001600160a01b038a16600090815260086020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9928d928d928d9290919061063783610d7f565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810188905260e001604051602081830303815290604052805190602001206040516020016106b092919061190160f01b81526002810192909252602282015260420190565b60408051601f198184030181528282528051602091820120600084529083018083525260ff871690820152606081018590526080810184905260a0016020604051602081039080840390855afa15801561070e573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906107445750876001600160a01b0316816001600160a01b0316145b6107815760405162461bcd60e51b815260206004820152600e60248201526d24a72b20a624a22fa9a4a3a722a960911b6044820152606401610354565b6001600160a01b0381811660009081526005602090815260408083208b8516808552908352928190208a90555189815291928b16917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35050505050505050565b6000610969806107fd63ffffffff8216565b9250505090565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60006040516108369190610d98565b60405180910390207fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66108676107eb565b604080516020810195909552840192909252606083015260808201523060a082015260c00160405160208183030381529060405280519060200120905090565b6000818310156108f95760405162461bcd60e51b815260206004820152601c60248201527f45524332303a207375627472616374696f6e20756e646572666c6f77000000006044820152606401610354565b6109038284610e0e565b9392505050565b6000806109178385610e21565b9050838110156109035760405162461bcd60e51b815260206004820152601860248201527f45524332303a206164646974696f6e206f766572666c6f7700000000000000006044820152606401610354565b4690565b60006020808352835180602085015260005b8181101561099b5785810183015185820160400152820161097f565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b03811681146109d357600080fd5b919050565b600080604083850312156109eb57600080fd5b6109f4836109bc565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112610a2957600080fd5b813567ffffffffffffffff80821115610a4457610a44610a02565b604051601f8301601f19908116603f01168101908282118183101715610a6c57610a6c610a02565b81604052838152866020858801011115610a8557600080fd5b836020870160208301376000602085830101528094505050505092915050565b803560ff811681146109d357600080fd5b600080600060608486031215610acb57600080fd5b833567ffffffffffffffff80821115610ae357600080fd5b610aef87838801610a18565b94506020860135915080821115610b0557600080fd5b50610b1286828701610a18565b925050610b2160408501610aa5565b90509250925092565b600080600060608486031215610b3f57600080fd5b610b48846109bc565b9250610b56602085016109bc565b9150604084013590509250925092565b600060208284031215610b7857600080fd5b610903826109bc565b600080600080600080600060e0888a031215610b9c57600080fd5b610ba5886109bc565b9650610bb3602089016109bc565b95506040880135945060608801359350610bcf60808901610aa5565b925060a0880135915060c0880135905092959891949750929550565b60008060408385031215610bfe57600080fd5b610c07836109bc565b9150610c15602084016109bc565b90509250929050565b600181811c90821680610c3257607f821691505b602082108103610c5257634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115610ca4576000816000526020600020601f850160051c81016020861015610c815750805b601f850160051c820191505b81811015610ca057828155600101610c8d565b5050505b505050565b815167ffffffffffffffff811115610cc357610cc3610a02565b610cd781610cd18454610c1e565b84610c58565b602080601f831160018114610d0c5760008415610cf45750858301515b600019600386901b1c1916600185901b178555610ca0565b600085815260208120601f198616915b82811015610d3b57888601518255948401946001909101908401610d1c565b5085821015610d595787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b600060018201610d9157610d91610d69565b5060010190565b6000808354610da681610c1e565b60018281168015610dbe5760018114610dd357610e02565b60ff1984168752821515830287019450610e02565b8760005260208060002060005b85811015610df95781548a820152908401908201610de0565b50505082870194505b50929695505050505050565b8181038181111561030957610309610d69565b8082018082111561030957610309610d6956fea2646970667358221220b1626f340cc7e358723a21ffc0c4f05b082f946cb5fe3ac8ffb0118df7ad68a964736f6c63430008160033", - "sourceMap": "319:7540:102:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;871:18;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2645:211;;;;;;:::i;:::-;;:::i;:::-;;;1169:14:132;;1162:22;1144:41;;1132:2;1117:18;2645:211:102;1004:187:132;2095:362:102;;;;;;:::i;:::-;;:::i;:::-;;1134:26;;;;;;;;;2977:25:132;;;2965:2;2950:18;1134:26:102;2831:177:132;3143:457:102;;;;;;:::i;:::-;;:::i;923:21::-;;;;;;;;;;;;3518:4:132;3506:17;;;3488:36;;3476:2;3461:18;923:21:102;3346:184:132;4976:178:102;;;:::i;1167:44::-;;;;;;:::i;:::-;;;;;;;;;;;;;;1561:41;;;;;;:::i;:::-;;;;;;;;;;;;;;896:20;;;:::i;2862:275::-;;;;;;:::i;:::-;;:::i;3789:1181::-;;;;;;:::i;:::-;;:::i;1218:64::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;871:18;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2645:211::-;2745:10;2719:4;2735:21;;;:9;:21;;;;;;;;-1:-1:-1;;;;;2735:30:102;;;;;;;;;;:39;;;2790:37;2719:4;;2735:30;;2790:37;;;;2768:6;2977:25:132;;2965:2;2950:18;;2831:177;2790:37:102;;;;;;;;-1:-1:-1;2845:4:102;2645:211;;;;;:::o;2095:362::-;2202:11;;;;2201:12;2193:44;;;;-1:-1:-1;;;2193:44:102;;5371:2:132;2193:44:102;;;5353:21:132;5410:2;5390:18;;;5383:30;-1:-1:-1;;;5429:18:132;;;5422:49;5488:18;;2193:44:102;;;;;;;;;2248:4;:12;2255:5;2248:4;:12;:::i;:::-;-1:-1:-1;2270:6:102;:16;2279:7;2270:6;:16;:::i;:::-;-1:-1:-1;2296:8:102;:20;;-1:-1:-1;;2296:20:102;;;;;;;2346:14;:12;:14::i;:::-;2327:16;:33;2397:24;:22;:24::i;:::-;2370;:51;-1:-1:-1;;2432:11:102;:18;;-1:-1:-1;;2432:18:102;2446:4;2432:18;;;-1:-1:-1;2095:362:102:o;3143:457::-;-1:-1:-1;;;;;3265:15:102;;3231:4;3265:15;;;:9;:15;;;;;;;;3281:10;3265:27;;;;;;;;-1:-1:-1;;3343:22:102;;3339:79;;3397:21;3402:7;3411:6;3397:4;:21::i;:::-;-1:-1:-1;;;;;3367:15:102;;;;;;:9;:15;;;;;;;;3383:10;3367:27;;;;;;;:51;3339:79;-1:-1:-1;;;;;3452:15:102;;;;;;:9;:15;;;;;;3447:29;;3469:6;3447:4;:29::i;:::-;-1:-1:-1;;;;;3429:15:102;;;;;;;:9;:15;;;;;;:47;;;;3507:13;;;;;;;3502:27;;3522:6;3502:4;:27::i;:::-;-1:-1:-1;;;;;3486:13:102;;;;;;;:9;:13;;;;;;;:43;;;;3545:26;;;;;;;;;;3564:6;2977:25:132;;2965:2;2950:18;;2831:177;3545:26:102;;;;;;;;-1:-1:-1;3589:4:102;;3143:457;-1:-1:-1;;;;3143:457:102:o;4976:178::-;5033:7;5077:16;;5059:14;:12;:14::i;:::-;:34;:88;;5123:24;:22;:24::i;:::-;5052:95;;4976:178;:::o;5059:88::-;-1:-1:-1;5096:24:102;;;4976:178::o;896:20::-;;;;;;;:::i;2862:275::-;2987:10;2932:4;2977:21;;;:9;:21;;;;;;2972:35;;3000:6;2972:4;:35::i;:::-;2958:10;2948:21;;;;:9;:21;;;;;;:59;;;;-1:-1:-1;;;;;3038:13:102;;;;;;3033:27;;3053:6;3033:4;:27::i;:::-;-1:-1:-1;;;;;3017:13:102;;;;;;:9;:13;;;;;;;:43;;;;3076:32;;3085:10;;3076:32;;;;3101:6;2977:25:132;;2965:2;2950:18;;2831:177;3789:1181:102;3966:15;3954:8;:27;;3946:63;;;;-1:-1:-1;;;3946:63:102;;7914:2:132;3946:63:102;;;7896:21:132;7953:2;7933:18;;;7926:30;7992:25;7972:18;;;7965:53;8035:18;;3946:63:102;7712:347:132;3946:63:102;4020:24;4047:717;4167:18;:16;:18::i;:::-;-1:-1:-1;;;;;4576:13:102;;;;;;:6;:13;;;;;:15;;4282:157;;4469:5;;4504:7;;4541:5;;4576:15;;:13;:15;;;:::i;:::-;;;;-1:-1:-1;4242:413:102;;;;;;8623:25:132;;;;-1:-1:-1;;;;;8722:15:132;;;8702:18;;;8695:43;8774:15;;;;8754:18;;;8747:43;8806:18;;;8799:34;8849:19;;;8842:35;8893:19;;;8886:35;;;8595:19;;4242:413:102;;;;;;;;;;;;4207:470;;;;;;4097:598;;;;;;;;-1:-1:-1;;;9190:27:132;;9242:1;9233:11;;9226:27;;;;9278:2;9269:12;;9262:28;9315:2;9306:12;;8932:392;4097:598:102;;;;-1:-1:-1;;4097:598:102;;;;;;;;;4070:639;;4097:598;4070:639;;;;4047:717;;;;;;;;;9556:25:132;9629:4;9617:17;;9597:18;;;9590:45;9651:18;;;9644:34;;;9694:18;;;9687:34;;;9528:19;;4047:717:102;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4047:717:102;;-1:-1:-1;;4047:717:102;;;-1:-1:-1;;;;;;;4783:30:102;;;;;;:59;;;4837:5;-1:-1:-1;;;;;4817:25:102;:16;-1:-1:-1;;;;;4817:25:102;;4783:59;4775:86;;;;-1:-1:-1;;;4775:86:102;;9934:2:132;4775:86:102;;;9916:21:132;9973:2;9953:18;;;9946:30;-1:-1:-1;;;9992:18:132;;;9985:44;10046:18;;4775:86:102;9732:338:132;4775:86:102;-1:-1:-1;;;;;4872:27:102;;;;;;;:9;:27;;;;;;;;:36;;;;;;;;;;;;;:44;;;4932:31;2977:25:132;;;4872:36:102;;4932:31;;;;;2950:18:132;4932:31:102;;;;;;;3936:1034;3789:1181;;;;;;;:::o;7557:300::-;7603:15;7680:12;;7837:13;;;;:::i;:::-;7827:23;;7620:237;;7557:300;:::o;5160:403::-;5225:7;5302:95;5431:4;5415:22;;;;;;:::i;:::-;;;;;;;;5455:14;5487;:12;:14::i;:::-;5274:272;;;;;;11184:25:132;;;;11225:18;;11218:34;;;;11268:18;;;11261:34;11311:18;;;11304:34;5527:4:102;11354:19:132;;;11347:61;11156:19;;5274:272:102;;;;;;;;;;;;5251:305;;;;;;5244:312;;5160:403;:::o;6578:154::-;6637:7;6669:1;6664;:6;;6656:47;;;;-1:-1:-1;;;6656:47:102;;11621:2:132;6656:47:102;;;11603:21:132;11660:2;11640:18;;;11633:30;11699;11679:18;;;11672:58;11747:18;;6656:47:102;11419:352:132;6656:47:102;6720:5;6724:1;6720;:5;:::i;:::-;6713:12;6578:154;-1:-1:-1;;;6578:154:102:o;6399:173::-;6458:7;;6489:5;6493:1;6489;:5;:::i;:::-;6477:17;;6517:1;6512;:6;;6504:43;;;;-1:-1:-1;;;6504:43:102;;12241:2:132;6504:43:102;;;12223:21:132;12280:2;12260:18;;;12253:30;12319:26;12299:18;;;12292:54;12363:18;;6504:43:102;12039:348:132;7275:276:102;7458:9;;7275:276::o;14:548:132:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:173::-;635:20;;-1:-1:-1;;;;;684:31:132;;674:42;;664:70;;730:1;727;720:12;664:70;567:173;;;:::o;745:254::-;813:6;821;874:2;862:9;853:7;849:23;845:32;842:52;;;890:1;887;880:12;842:52;913:29;932:9;913:29;:::i;:::-;903:39;989:2;974:18;;;;961:32;;-1:-1:-1;;;745:254:132:o;1196:127::-;1257:10;1252:3;1248:20;1245:1;1238:31;1288:4;1285:1;1278:15;1312:4;1309:1;1302:15;1328:719;1371:5;1424:3;1417:4;1409:6;1405:17;1401:27;1391:55;;1442:1;1439;1432:12;1391:55;1478:6;1465:20;1504:18;1541:2;1537;1534:10;1531:36;;;1547:18;;:::i;:::-;1622:2;1616:9;1590:2;1676:13;;-1:-1:-1;;1672:22:132;;;1696:2;1668:31;1664:40;1652:53;;;1720:18;;;1740:22;;;1717:46;1714:72;;;1766:18;;:::i;:::-;1806:10;1802:2;1795:22;1841:2;1833:6;1826:18;1887:3;1880:4;1875:2;1867:6;1863:15;1859:26;1856:35;1853:55;;;1904:1;1901;1894:12;1853:55;1968:2;1961:4;1953:6;1949:17;1942:4;1934:6;1930:17;1917:54;2015:1;2008:4;2003:2;1995:6;1991:15;1987:26;1980:37;2035:6;2026:15;;;;;;1328:719;;;;:::o;2052:156::-;2118:20;;2178:4;2167:16;;2157:27;;2147:55;;2198:1;2195;2188:12;2213:613;2308:6;2316;2324;2377:2;2365:9;2356:7;2352:23;2348:32;2345:52;;;2393:1;2390;2383:12;2345:52;2433:9;2420:23;2462:18;2503:2;2495:6;2492:14;2489:34;;;2519:1;2516;2509:12;2489:34;2542:50;2584:7;2575:6;2564:9;2560:22;2542:50;:::i;:::-;2532:60;;2645:2;2634:9;2630:18;2617:32;2601:48;;2674:2;2664:8;2661:16;2658:36;;;2690:1;2687;2680:12;2658:36;;2713:52;2757:7;2746:8;2735:9;2731:24;2713:52;:::i;:::-;2703:62;;;2784:36;2816:2;2805:9;2801:18;2784:36;:::i;:::-;2774:46;;2213:613;;;;;:::o;3013:328::-;3090:6;3098;3106;3159:2;3147:9;3138:7;3134:23;3130:32;3127:52;;;3175:1;3172;3165:12;3127:52;3198:29;3217:9;3198:29;:::i;:::-;3188:39;;3246:38;3280:2;3269:9;3265:18;3246:38;:::i;:::-;3236:48;;3331:2;3320:9;3316:18;3303:32;3293:42;;3013:328;;;;;:::o;3717:186::-;3776:6;3829:2;3817:9;3808:7;3804:23;3800:32;3797:52;;;3845:1;3842;3835:12;3797:52;3868:29;3887:9;3868:29;:::i;3908:606::-;4019:6;4027;4035;4043;4051;4059;4067;4120:3;4108:9;4099:7;4095:23;4091:33;4088:53;;;4137:1;4134;4127:12;4088:53;4160:29;4179:9;4160:29;:::i;:::-;4150:39;;4208:38;4242:2;4231:9;4227:18;4208:38;:::i;:::-;4198:48;;4293:2;4282:9;4278:18;4265:32;4255:42;;4344:2;4333:9;4329:18;4316:32;4306:42;;4367:37;4399:3;4388:9;4384:19;4367:37;:::i;:::-;4357:47;;4451:3;4440:9;4436:19;4423:33;4413:43;;4503:3;4492:9;4488:19;4475:33;4465:43;;3908:606;;;;;;;;;;:::o;4519:260::-;4587:6;4595;4648:2;4636:9;4627:7;4623:23;4619:32;4616:52;;;4664:1;4661;4654:12;4616:52;4687:29;4706:9;4687:29;:::i;:::-;4677:39;;4735:38;4769:2;4758:9;4754:18;4735:38;:::i;:::-;4725:48;;4519:260;;;;;:::o;4784:380::-;4863:1;4859:12;;;;4906;;;4927:61;;4981:4;4973:6;4969:17;4959:27;;4927:61;5034:2;5026:6;5023:14;5003:18;5000:38;4997:161;;5080:10;5075:3;5071:20;5068:1;5061:31;5115:4;5112:1;5105:15;5143:4;5140:1;5133:15;4997:161;;4784:380;;;:::o;5643:543::-;5745:2;5740:3;5737:11;5734:446;;;5781:1;5805:5;5802:1;5795:16;5849:4;5846:1;5836:18;5919:2;5907:10;5903:19;5900:1;5896:27;5890:4;5886:38;5955:4;5943:10;5940:20;5937:47;;;-1:-1:-1;5978:4:132;5937:47;6033:2;6028:3;6024:12;6021:1;6017:20;6011:4;6007:31;5997:41;;6088:82;6106:2;6099:5;6096:13;6088:82;;;6151:17;;;6132:1;6121:13;6088:82;;;6092:3;;;5734:446;5643:543;;;:::o;6362:1345::-;6488:3;6482:10;6515:18;6507:6;6504:30;6501:56;;;6537:18;;:::i;:::-;6566:97;6656:6;6616:38;6648:4;6642:11;6616:38;:::i;:::-;6610:4;6566:97;:::i;:::-;6718:4;;6775:2;6764:14;;6792:1;6787:663;;;;7494:1;7511:6;7508:89;;;-1:-1:-1;7563:19:132;;;7557:26;7508:89;-1:-1:-1;;6319:1:132;6315:11;;;6311:24;6307:29;6297:40;6343:1;6339:11;;;6294:57;7610:81;;6757:944;;6787:663;5590:1;5583:14;;;5627:4;5614:18;;-1:-1:-1;;6823:20:132;;;6941:236;6955:7;6952:1;6949:14;6941:236;;;7044:19;;;7038:26;7023:42;;7136:27;;;;7104:1;7092:14;;;;6971:19;;6941:236;;;6945:3;7205:6;7196:7;7193:19;7190:201;;;7266:19;;;7260:26;-1:-1:-1;;7349:1:132;7345:14;;;7361:3;7341:24;7337:37;7333:42;7318:58;7303:74;;7190:201;-1:-1:-1;;;;;7437:1:132;7421:14;;;7417:22;7404:36;;-1:-1:-1;6362:1345:132:o;8064:127::-;8125:10;8120:3;8116:20;8113:1;8106:31;8156:4;8153:1;8146:15;8180:4;8177:1;8170:15;8196:135;8235:3;8256:17;;;8253:43;;8276:18;;:::i;:::-;-1:-1:-1;8323:1:132;8312:13;;8196:135::o;10075:845::-;10205:3;10234:1;10267:6;10261:13;10297:36;10323:9;10297:36;:::i;:::-;10352:1;10369:17;;;10395:133;;;;10542:1;10537:358;;;;10362:533;;10395:133;-1:-1:-1;;10428:24:132;;10416:37;;10501:14;;10494:22;10482:35;;10473:45;;;-1:-1:-1;10395:133:132;;10537:358;10568:6;10565:1;10558:17;10598:4;10643;10640:1;10630:18;10670:1;10684:165;10698:6;10695:1;10692:13;10684:165;;;10776:14;;10763:11;;;10756:35;10819:16;;;;10713:10;;10684:165;;;10688:3;;;10878:6;10873:3;10869:16;10862:23;;10362:533;-1:-1:-1;10911:3:132;;10075:845;-1:-1:-1;;;;;;10075:845:132:o;11776:128::-;11843:9;;;11864:11;;;11861:37;;;11878:18;;:::i;11909:125::-;11974:9;;;11995:10;;;11992:36;;;12008:18;;:::i", - "linkReferences": {} - }, - "methodIdentifiers": { - "DOMAIN_SEPARATOR()": "3644e515", - "allowance(address,address)": "dd62ed3e", - "approve(address,uint256)": "095ea7b3", - "balanceOf(address)": "70a08231", - "decimals()": "313ce567", - "initialize(string,string,uint8)": "1624f6c6", - "name()": "06fdde03", - "nonces(address)": "7ecebe00", - "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)": "d505accf", - "symbol()": "95d89b41", - "totalSupply()": "18160ddd", - "transfer(address,uint256)": "a9059cbb", - "transferFrom(address,address,uint256)": "23b872dd" - }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DOMAIN_SEPARATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"uint8\",\"name\":\"_decimals\",\"type\":\"uint8\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"nonces\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"permit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Forked from: https://github.com/transmissions11/solmate/blob/0384dbaaa4fcb5715738a9254a7c0a4cb62cf458/src/tokens/ERC20.sol\",\"kind\":\"dev\",\"methods\":{\"initialize(string,string,uint8)\":{\"details\":\"To hide constructor warnings across solc versions due to different constructor visibility requirements and syntaxes, we add an initialization function that can be called only once.\"}},\"stateVariables\":{\"initialized\":{\"details\":\"A bool to track whether the contract has been initialized.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"This is a mock contract of the ERC20 standard for testing purposes only, it SHOULD NOT be used in production.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/mocks/MockERC20.sol\":\"MockERC20\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/mocks/MockERC20.sol\":{\"keccak256\":\"0xd8703f49411737ecf8d411f8fa66b2bf0ef972ba28b7a4adf1748c63df1bf682\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7c10a6b8112f6fe3cdccb6240ecd382765216b1a82e9a86a0fec8f5e09eadd1\",\"dweb:/ipfs/QmdRvPCU4RkjMHsTu3Ric1ZEF1AWDNLp78unFC5aWP17xq\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address", - "indexed": true - }, - { - "internalType": "address", - "name": "spender", - "type": "address", - "indexed": true - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "Approval", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address", - "indexed": true - }, - { - "internalType": "address", - "name": "to", - "type": "address", - "indexed": true - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "Transfer", - "anonymous": false - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "DOMAIN_SEPARATOR", - "outputs": [ - { "internalType": "bytes32", "name": "", "type": "bytes32" } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "", "type": "address" }, - { "internalType": "address", "name": "", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "allowance", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "spender", "type": "address" }, - { "internalType": "uint256", "name": "amount", "type": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "approve", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "address", "name": "", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "balanceOf", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "decimals", - "outputs": [{ "internalType": "uint8", "name": "", "type": "uint8" }] - }, - { - "inputs": [ - { "internalType": "string", "name": "_name", "type": "string" }, - { "internalType": "string", "name": "_symbol", "type": "string" }, - { "internalType": "uint8", "name": "_decimals", "type": "uint8" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "initialize" - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "name", - "outputs": [ - { "internalType": "string", "name": "", "type": "string" } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "nonces", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "owner", "type": "address" }, - { "internalType": "address", "name": "spender", "type": "address" }, - { "internalType": "uint256", "name": "value", "type": "uint256" }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - }, - { "internalType": "uint8", "name": "v", "type": "uint8" }, - { "internalType": "bytes32", "name": "r", "type": "bytes32" }, - { "internalType": "bytes32", "name": "s", "type": "bytes32" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "permit" - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "symbol", - "outputs": [ - { "internalType": "string", "name": "", "type": "string" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "totalSupply", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "to", "type": "address" }, - { "internalType": "uint256", "name": "amount", "type": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "transfer", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "address", "name": "from", "type": "address" }, - { "internalType": "address", "name": "to", "type": "address" }, - { "internalType": "uint256", "name": "amount", "type": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "transferFrom", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - } - ], - "devdoc": { - "kind": "dev", - "methods": { - "initialize(string,string,uint8)": { - "details": "To hide constructor warnings across solc versions due to different constructor visibility requirements and syntaxes, we add an initialization function that can be called only once." - } - }, - "version": 1 - }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/mocks/MockERC20.sol": "MockERC20" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/mocks/MockERC20.sol": { - "keccak256": "0xd8703f49411737ecf8d411f8fa66b2bf0ef972ba28b7a4adf1748c63df1bf682", - "urls": [ - "bzz-raw://b7c10a6b8112f6fe3cdccb6240ecd382765216b1a82e9a86a0fec8f5e09eadd1", - "dweb:/ipfs/QmdRvPCU4RkjMHsTu3Ric1ZEF1AWDNLp78unFC5aWP17xq" - ], - "license": "MIT" - } - }, - "version": 1 - }, - "id": 102 -} diff --git a/examples/oft-movement/out/MockERC721.sol/IERC721TokenReceiver.json b/examples/oft-movement/out/MockERC721.sol/IERC721TokenReceiver.json deleted file mode 100644 index b776d4cae..000000000 --- a/examples/oft-movement/out/MockERC721.sol/IERC721TokenReceiver.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "abi": [ - { - "type": "function", - "name": "onERC721Received", - "inputs": [ - { "name": "", "type": "address", "internalType": "address" }, - { "name": "", "type": "address", "internalType": "address" }, - { "name": "", "type": "uint256", "internalType": "uint256" }, - { "name": "", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [{ "name": "", "type": "bytes4", "internalType": "bytes4" }], - "stateMutability": "nonpayable" - } - ], - "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "methodIdentifiers": { - "onERC721Received(address,address,uint256,bytes)": "150b7a02" - }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onERC721Received\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/mocks/MockERC721.sol\":\"IERC721TokenReceiver\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/mocks/MockERC721.sol\":{\"keccak256\":\"0xa24468244abb66e663fb7eee6463cb518eb9a7c14e1071548ff564cca825bbca\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://145585a2194aa6e2d30edfe709ef2814e20b1b4540469aa6a8f50c841fcb9070\",\"dweb:/ipfs/QmZrwbvtpbtTxqbW5phUrwb3F1tBiPSQc6jZJAXBfsBsAh\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { - "inputs": [ - { "internalType": "address", "name": "", "type": "address" }, - { "internalType": "address", "name": "", "type": "address" }, - { "internalType": "uint256", "name": "", "type": "uint256" }, - { "internalType": "bytes", "name": "", "type": "bytes" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "onERC721Received", - "outputs": [ - { "internalType": "bytes4", "name": "", "type": "bytes4" } - ] - } - ], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/mocks/MockERC721.sol": "IERC721TokenReceiver" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/mocks/MockERC721.sol": { - "keccak256": "0xa24468244abb66e663fb7eee6463cb518eb9a7c14e1071548ff564cca825bbca", - "urls": [ - "bzz-raw://145585a2194aa6e2d30edfe709ef2814e20b1b4540469aa6a8f50c841fcb9070", - "dweb:/ipfs/QmZrwbvtpbtTxqbW5phUrwb3F1tBiPSQc6jZJAXBfsBsAh" - ], - "license": "MIT" - } - }, - "version": 1 - }, - "id": 103 -} diff --git a/examples/oft-movement/out/MockERC721.sol/MockERC721.json b/examples/oft-movement/out/MockERC721.sol/MockERC721.json deleted file mode 100644 index c0d7463fe..000000000 --- a/examples/oft-movement/out/MockERC721.sol/MockERC721.json +++ /dev/null @@ -1,509 +0,0 @@ -{ - "abi": [ - { - "type": "function", - "name": "approve", - "inputs": [ - { "name": "spender", "type": "address", "internalType": "address" }, - { "name": "id", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "balanceOf", - "inputs": [ - { "name": "owner", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getApproved", - "inputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], - "outputs": [{ "name": "", "type": "address", "internalType": "address" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "initialize", - "inputs": [ - { "name": "_name", "type": "string", "internalType": "string" }, - { "name": "_symbol", "type": "string", "internalType": "string" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "isApprovedForAll", - "inputs": [ - { "name": "", "type": "address", "internalType": "address" }, - { "name": "", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "name", - "inputs": [], - "outputs": [{ "name": "", "type": "string", "internalType": "string" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "ownerOf", - "inputs": [ - { "name": "id", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [ - { "name": "owner", "type": "address", "internalType": "address" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "safeTransferFrom", - "inputs": [ - { "name": "from", "type": "address", "internalType": "address" }, - { "name": "to", "type": "address", "internalType": "address" }, - { "name": "id", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "safeTransferFrom", - "inputs": [ - { "name": "from", "type": "address", "internalType": "address" }, - { "name": "to", "type": "address", "internalType": "address" }, - { "name": "id", "type": "uint256", "internalType": "uint256" }, - { "name": "data", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setApprovalForAll", - "inputs": [ - { "name": "operator", "type": "address", "internalType": "address" }, - { "name": "approved", "type": "bool", "internalType": "bool" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "supportsInterface", - "inputs": [ - { "name": "interfaceId", "type": "bytes4", "internalType": "bytes4" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "symbol", - "inputs": [], - "outputs": [{ "name": "", "type": "string", "internalType": "string" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "tokenURI", - "inputs": [ - { "name": "id", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [{ "name": "", "type": "string", "internalType": "string" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "transferFrom", - "inputs": [ - { "name": "from", "type": "address", "internalType": "address" }, - { "name": "to", "type": "address", "internalType": "address" }, - { "name": "id", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "event", - "name": "Approval", - "inputs": [ - { - "name": "owner", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "spender", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "id", - "type": "uint256", - "indexed": true, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "ApprovalForAll", - "inputs": [ - { - "name": "owner", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "operator", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "approved", - "type": "bool", - "indexed": false, - "internalType": "bool" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "Transfer", - "inputs": [ - { - "name": "from", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "to", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "id", - "type": "uint256", - "indexed": true, - "internalType": "uint256" - } - ], - "anonymous": false - } - ], - "bytecode": { - "object": "0x608060405234801561001057600080fd5b50610ef3806100206000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c80636352211e1161008c578063a22cb46511610066578063a22cb465146101f7578063b88d4fde1461020a578063c87b56dd1461021d578063e985e9c51461023157600080fd5b80636352211e146101bb57806370a08231146101ce57806395d89b41146101ef57600080fd5b8063095ea7b3116100c8578063095ea7b31461016d57806323b872dd1461018257806342842e0e146101955780634cd88b76146101a857600080fd5b806301ffc9a7146100ef57806306fdde0314610117578063081812fc1461012c575b600080fd5b6101026100fd3660046109aa565b61025f565b60405190151581526020015b60405180910390f35b61011f6102b1565b60405161010e9190610a14565b61015561013a366004610a27565b6004602052600090815260409020546001600160a01b031681565b6040516001600160a01b03909116815260200161010e565b61018061017b366004610a57565b61033f565b005b610180610190366004610a81565b610426565b6101806101a3366004610a81565b61061f565b6101806101b6366004610b69565b61070e565b6101556101c9366004610a27565b610782565b6101e16101dc366004610bcd565b6107d9565b60405190815260200161010e565b61011f61083c565b610180610205366004610be8565b610849565b610180610218366004610c24565b6108b5565b61011f61022b366004610a27565b50606090565b61010261023f366004610ca0565b600560209081526000928352604080842090915290825290205460ff1681565b60006301ffc9a760e01b6001600160e01b03198316148061029057506380ac58cd60e01b6001600160e01b03198316145b806102ab5750635b5e139f60e01b6001600160e01b03198316145b92915050565b600080546102be90610cd3565b80601f01602080910402602001604051908101604052809291908181526020018280546102ea90610cd3565b80156103375780601f1061030c57610100808354040283529160200191610337565b820191906000526020600020905b81548152906001019060200180831161031a57829003601f168201915b505050505081565b6000818152600260205260409020546001600160a01b03163381148061038857506001600160a01b038116600090815260056020908152604080832033845290915290205460ff165b6103ca5760405162461bcd60e51b815260206004820152600e60248201526d1393d517d055551213d49256915160921b60448201526064015b60405180910390fd5b60008281526004602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6000818152600260205260409020546001600160a01b0384811691161461047c5760405162461bcd60e51b815260206004820152600a60248201526957524f4e475f46524f4d60b01b60448201526064016103c1565b6001600160a01b0382166104c65760405162461bcd60e51b81526020600482015260116024820152701253959053125117d49150d25412515395607a1b60448201526064016103c1565b336001600160a01b038416148061050057506001600160a01b038316600090815260056020908152604080832033845290915290205460ff165b8061052157506000818152600460205260409020546001600160a01b031633145b61055e5760405162461bcd60e51b815260206004820152600e60248201526d1393d517d055551213d49256915160921b60448201526064016103c1565b6001600160a01b038316600090815260036020526040812080549161058283610d23565b90915550506001600160a01b03821660009081526003602052604081208054916105ab83610d3a565b9091555050600081815260026020908152604080832080546001600160a01b038088166001600160a01b031992831681179093556004909452828520805490911690559051849391928716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b61062a838383610426565b813b15806106ca5750604051630a85bd0160e11b8082523360048301526001600160a01b03858116602484015260448301849052608060648401526000608484015290919084169063150b7a029060a4016020604051808303816000875af115801561069a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106be9190610d53565b6001600160e01b031916145b6107095760405162461bcd60e51b815260206004820152601060248201526f155394d0519157d49150d2541251539560821b60448201526064016103c1565b505050565b60065460ff16156107575760405162461bcd60e51b81526020600482015260136024820152721053149150511657d253925512505312569151606a1b60448201526064016103c1565b60006107638382610dc0565b5060016107708282610dc0565b50506006805460ff1916600117905550565b6000818152600260205260409020546001600160a01b0316806107d45760405162461bcd60e51b815260206004820152600a6024820152691393d517d3525395115160b21b60448201526064016103c1565b919050565b60006001600160a01b0382166108205760405162461bcd60e51b815260206004820152600c60248201526b5a45524f5f4144445245535360a01b60448201526064016103c1565b506001600160a01b031660009081526003602052604090205490565b600180546102be90610cd3565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6108c0848484610426565b823b158061094c5750604051630a85bd0160e11b808252906001600160a01b0385169063150b7a02906108fd903390899088908890600401610e80565b6020604051808303816000875af115801561091c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109409190610d53565b6001600160e01b031916145b61098b5760405162461bcd60e51b815260206004820152601060248201526f155394d0519157d49150d2541251539560821b60448201526064016103c1565b50505050565b6001600160e01b0319811681146109a757600080fd5b50565b6000602082840312156109bc57600080fd5b81356109c781610991565b9392505050565b6000815180845260005b818110156109f4576020818501810151868301820152016109d8565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006109c760208301846109ce565b600060208284031215610a3957600080fd5b5035919050565b80356001600160a01b03811681146107d457600080fd5b60008060408385031215610a6a57600080fd5b610a7383610a40565b946020939093013593505050565b600080600060608486031215610a9657600080fd5b610a9f84610a40565b9250610aad60208501610a40565b9150604084013590509250925092565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff80841115610aee57610aee610abd565b604051601f8501601f19908116603f01168101908282118183101715610b1657610b16610abd565b81604052809350858152868686011115610b2f57600080fd5b858560208301376000602087830101525050509392505050565b600082601f830112610b5a57600080fd5b6109c783833560208501610ad3565b60008060408385031215610b7c57600080fd5b823567ffffffffffffffff80821115610b9457600080fd5b610ba086838701610b49565b93506020850135915080821115610bb657600080fd5b50610bc385828601610b49565b9150509250929050565b600060208284031215610bdf57600080fd5b6109c782610a40565b60008060408385031215610bfb57600080fd5b610c0483610a40565b915060208301358015158114610c1957600080fd5b809150509250929050565b60008060008060808587031215610c3a57600080fd5b610c4385610a40565b9350610c5160208601610a40565b925060408501359150606085013567ffffffffffffffff811115610c7457600080fd5b8501601f81018713610c8557600080fd5b610c9487823560208401610ad3565b91505092959194509250565b60008060408385031215610cb357600080fd5b610cbc83610a40565b9150610cca60208401610a40565b90509250929050565b600181811c90821680610ce757607f821691505b602082108103610d0757634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b600081610d3257610d32610d0d565b506000190190565b600060018201610d4c57610d4c610d0d565b5060010190565b600060208284031215610d6557600080fd5b81516109c781610991565b601f821115610709576000816000526020600020601f850160051c81016020861015610d995750805b601f850160051c820191505b81811015610db857828155600101610da5565b505050505050565b815167ffffffffffffffff811115610dda57610dda610abd565b610dee81610de88454610cd3565b84610d70565b602080601f831160018114610e235760008415610e0b5750858301515b600019600386901b1c1916600185901b178555610db8565b600085815260208120601f198616915b82811015610e5257888601518255948401946001909101908401610e33565b5085821015610e705787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090610eb3908301846109ce565b969550505050505056fea2646970667358221220f4b809632ebbd3a13d2f4f28eafd3d09a25cfd69416da08a0fdcc677ab3d781064736f6c63430008160033", - "sourceMap": "321:7246:103:-:0;;;;;;;;;;;;;;;;;;;", - "linkReferences": {} - }, - "deployedBytecode": { - "object": "0x608060405234801561001057600080fd5b50600436106100ea5760003560e01c80636352211e1161008c578063a22cb46511610066578063a22cb465146101f7578063b88d4fde1461020a578063c87b56dd1461021d578063e985e9c51461023157600080fd5b80636352211e146101bb57806370a08231146101ce57806395d89b41146101ef57600080fd5b8063095ea7b3116100c8578063095ea7b31461016d57806323b872dd1461018257806342842e0e146101955780634cd88b76146101a857600080fd5b806301ffc9a7146100ef57806306fdde0314610117578063081812fc1461012c575b600080fd5b6101026100fd3660046109aa565b61025f565b60405190151581526020015b60405180910390f35b61011f6102b1565b60405161010e9190610a14565b61015561013a366004610a27565b6004602052600090815260409020546001600160a01b031681565b6040516001600160a01b03909116815260200161010e565b61018061017b366004610a57565b61033f565b005b610180610190366004610a81565b610426565b6101806101a3366004610a81565b61061f565b6101806101b6366004610b69565b61070e565b6101556101c9366004610a27565b610782565b6101e16101dc366004610bcd565b6107d9565b60405190815260200161010e565b61011f61083c565b610180610205366004610be8565b610849565b610180610218366004610c24565b6108b5565b61011f61022b366004610a27565b50606090565b61010261023f366004610ca0565b600560209081526000928352604080842090915290825290205460ff1681565b60006301ffc9a760e01b6001600160e01b03198316148061029057506380ac58cd60e01b6001600160e01b03198316145b806102ab5750635b5e139f60e01b6001600160e01b03198316145b92915050565b600080546102be90610cd3565b80601f01602080910402602001604051908101604052809291908181526020018280546102ea90610cd3565b80156103375780601f1061030c57610100808354040283529160200191610337565b820191906000526020600020905b81548152906001019060200180831161031a57829003601f168201915b505050505081565b6000818152600260205260409020546001600160a01b03163381148061038857506001600160a01b038116600090815260056020908152604080832033845290915290205460ff165b6103ca5760405162461bcd60e51b815260206004820152600e60248201526d1393d517d055551213d49256915160921b60448201526064015b60405180910390fd5b60008281526004602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6000818152600260205260409020546001600160a01b0384811691161461047c5760405162461bcd60e51b815260206004820152600a60248201526957524f4e475f46524f4d60b01b60448201526064016103c1565b6001600160a01b0382166104c65760405162461bcd60e51b81526020600482015260116024820152701253959053125117d49150d25412515395607a1b60448201526064016103c1565b336001600160a01b038416148061050057506001600160a01b038316600090815260056020908152604080832033845290915290205460ff165b8061052157506000818152600460205260409020546001600160a01b031633145b61055e5760405162461bcd60e51b815260206004820152600e60248201526d1393d517d055551213d49256915160921b60448201526064016103c1565b6001600160a01b038316600090815260036020526040812080549161058283610d23565b90915550506001600160a01b03821660009081526003602052604081208054916105ab83610d3a565b9091555050600081815260026020908152604080832080546001600160a01b038088166001600160a01b031992831681179093556004909452828520805490911690559051849391928716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b61062a838383610426565b813b15806106ca5750604051630a85bd0160e11b8082523360048301526001600160a01b03858116602484015260448301849052608060648401526000608484015290919084169063150b7a029060a4016020604051808303816000875af115801561069a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106be9190610d53565b6001600160e01b031916145b6107095760405162461bcd60e51b815260206004820152601060248201526f155394d0519157d49150d2541251539560821b60448201526064016103c1565b505050565b60065460ff16156107575760405162461bcd60e51b81526020600482015260136024820152721053149150511657d253925512505312569151606a1b60448201526064016103c1565b60006107638382610dc0565b5060016107708282610dc0565b50506006805460ff1916600117905550565b6000818152600260205260409020546001600160a01b0316806107d45760405162461bcd60e51b815260206004820152600a6024820152691393d517d3525395115160b21b60448201526064016103c1565b919050565b60006001600160a01b0382166108205760405162461bcd60e51b815260206004820152600c60248201526b5a45524f5f4144445245535360a01b60448201526064016103c1565b506001600160a01b031660009081526003602052604090205490565b600180546102be90610cd3565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6108c0848484610426565b823b158061094c5750604051630a85bd0160e11b808252906001600160a01b0385169063150b7a02906108fd903390899088908890600401610e80565b6020604051808303816000875af115801561091c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109409190610d53565b6001600160e01b031916145b61098b5760405162461bcd60e51b815260206004820152601060248201526f155394d0519157d49150d2541251539560821b60448201526064016103c1565b50505050565b6001600160e01b0319811681146109a757600080fd5b50565b6000602082840312156109bc57600080fd5b81356109c781610991565b9392505050565b6000815180845260005b818110156109f4576020818501810151868301820152016109d8565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006109c760208301846109ce565b600060208284031215610a3957600080fd5b5035919050565b80356001600160a01b03811681146107d457600080fd5b60008060408385031215610a6a57600080fd5b610a7383610a40565b946020939093013593505050565b600080600060608486031215610a9657600080fd5b610a9f84610a40565b9250610aad60208501610a40565b9150604084013590509250925092565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff80841115610aee57610aee610abd565b604051601f8501601f19908116603f01168101908282118183101715610b1657610b16610abd565b81604052809350858152868686011115610b2f57600080fd5b858560208301376000602087830101525050509392505050565b600082601f830112610b5a57600080fd5b6109c783833560208501610ad3565b60008060408385031215610b7c57600080fd5b823567ffffffffffffffff80821115610b9457600080fd5b610ba086838701610b49565b93506020850135915080821115610bb657600080fd5b50610bc385828601610b49565b9150509250929050565b600060208284031215610bdf57600080fd5b6109c782610a40565b60008060408385031215610bfb57600080fd5b610c0483610a40565b915060208301358015158114610c1957600080fd5b809150509250929050565b60008060008060808587031215610c3a57600080fd5b610c4385610a40565b9350610c5160208601610a40565b925060408501359150606085013567ffffffffffffffff811115610c7457600080fd5b8501601f81018713610c8557600080fd5b610c9487823560208401610ad3565b91505092959194509250565b60008060408385031215610cb357600080fd5b610cbc83610a40565b9150610cca60208401610a40565b90509250929050565b600181811c90821680610ce757607f821691505b602082108103610d0757634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b600081610d3257610d32610d0d565b506000190190565b600060018201610d4c57610d4c610d0d565b5060010190565b600060208284031215610d6557600080fd5b81516109c781610991565b601f821115610709576000816000526020600020601f850160051c81016020861015610d995750805b601f850160051c820191505b81811015610db857828155600101610da5565b505050505050565b815167ffffffffffffffff811115610dda57610dda610abd565b610dee81610de88454610cd3565b84610d70565b602080601f831160018114610e235760008415610e0b5750858301515b600019600386901b1c1916600185901b178555610db8565b600085815260208120601f198616915b82811015610e5257888601518255948401946001909101908401610e33565b5085821015610e705787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090610eb3908301846109ce565b969550505050505056fea2646970667358221220f4b809632ebbd3a13d2f4f28eafd3d09a25cfd69416da08a0fdcc677ab3d781064736f6c63430008160033", - "sourceMap": "321:7246:103:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5052:323;;;;;;:::i;:::-;;:::i;:::-;;;565:14:132;;558:22;540:41;;528:2;513:18;5052:323:103;;;;;;;;976:18;;;:::i;:::-;;;;;;;:::i;1923:46::-;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;1923:46:103;;;;;;-1:-1:-1;;;;;1594:32:132;;;1576:51;;1564:2;1549:18;1923:46:103;1430:203:132;2935:282:103;;;;;;:::i;:::-;;:::i;:::-;;3432:661;;;;;;:::i;:::-;;:::i;4099:369::-;;;;;;:::i;:::-;;:::i;2537:210::-;;;;;;:::i;:::-;;:::i;1406:149::-;;;;;;:::i;:::-;;:::i;1561:168::-;;;;;;:::i;:::-;;:::i;:::-;;;4289:25:132;;;4277:2;4262:18;1561:168:103;4143:177:132;1001:20:103;;;:::i;3223:203::-;;;;;;:::i;:::-;;:::i;4474:390::-;;;;;;:::i;:::-;;:::i;1028:76::-;;;;;;:::i;:::-;-1:-1:-1;1087:13:103;;1028:76;1976:68;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;5052:323;5128:4;-1:-1:-1;;;;;;;;;5151:25:103;;;;:100;;-1:-1:-1;;;;;;;;;;5226:25:103;;;5151:100;:175;;;-1:-1:-1;;;;;;;;;;5301:25:103;;;5151:175;5144:182;5052:323;-1:-1:-1;;5052:323:103:o;976:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2935:282::-;3006:13;3022:12;;;:8;:12;;;;;;-1:-1:-1;;;;;3022:12:103;3053:10;:19;;;:58;;-1:-1:-1;;;;;;3076:23:103;;;;;;:16;:23;;;;;;;;3100:10;3076:35;;;;;;;;;;3053:58;3045:85;;;;-1:-1:-1;;;3045:85:103;;6201:2:132;3045:85:103;;;6183:21:132;6240:2;6220:18;;;6213:30;-1:-1:-1;;;6259:18:132;;;6252:44;6313:18;;3045:85:103;;;;;;;;;3141:15;;;;:11;:15;;;;;;:25;;-1:-1:-1;;;;;;3141:25:103;-1:-1:-1;;;;;3141:25:103;;;;;;;;;3182:28;;3141:15;;3182:28;;;;;;;2996:221;2935:282;;:::o;3432:661::-;3533:12;;;;:8;:12;;;;;;-1:-1:-1;;;;;3525:20:103;;;3533:12;;3525:20;3517:43;;;;-1:-1:-1;;;3517:43:103;;6544:2:132;3517:43:103;;;6526:21:132;6583:2;6563:18;;;6556:30;-1:-1:-1;;;6602:18:132;;;6595:40;6652:18;;3517:43:103;6342:334:132;3517:43:103;-1:-1:-1;;;;;3579:16:103;;3571:46;;;;-1:-1:-1;;;3571:46:103;;6883:2:132;3571:46:103;;;6865:21:132;6922:2;6902:18;;;6895:30;-1:-1:-1;;;6941:18:132;;;6934:47;6998:18;;3571:46:103;6681:341:132;3571:46:103;3649:10;-1:-1:-1;;;;;3649:18:103;;;;:56;;-1:-1:-1;;;;;;3671:22:103;;;;;;:16;:22;;;;;;;;3694:10;3671:34;;;;;;;;;;3649:56;:89;;;-1:-1:-1;3723:15:103;;;;:11;:15;;;;;;-1:-1:-1;;;;;3723:15:103;3709:10;:29;3649:89;3628:138;;;;-1:-1:-1;;;3628:138:103;;6201:2:132;3628:138:103;;;6183:21:132;6240:2;6220:18;;;6213:30;-1:-1:-1;;;6259:18:132;;;6252:44;6313:18;;3628:138:103;5999:338:132;3628:138:103;-1:-1:-1;;;;;3942:16:103;;;;;;:10;:16;;;;;:18;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;3971:14:103;;;;;;:10;:14;;;;;:16;;;;;;:::i;:::-;;;;-1:-1:-1;;3998:12:103;;;;:8;:12;;;;;;;;:17;;-1:-1:-1;;;;;3998:17:103;;;-1:-1:-1;;;;;;3998:17:103;;;;;;;;4033:11;:15;;;;;;4026:22;;;;;;;4064;;4007:2;;3998:17;;4064:22;;;;;;3432:661;;;:::o;4099:369::-;4188:26;4201:4;4207:2;4211;4188:12;:26::i;:::-;7499:18;;7544:14;;4246:173;;-1:-1:-1;4282:67:103;;-1:-1:-1;;;4282:67:103;;;4324:10;4282:67;;;7745:34:132;-1:-1:-1;;;;;7815:15:132;;;7795:18;;;7788:43;7847:18;;;7840:34;;;7910:3;7890:18;;;7883:31;-1:-1:-1;7930:19:132;;;7923:30;4373:46:103;;4282:41;;;;4373:46;;7970:19:132;;4282:67:103;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;4282:137:103;;4246:173;4225:236;;;;-1:-1:-1;;;4225:236:103;;8456:2:132;4225:236:103;;;8438:21:132;8495:2;8475:18;;;8468:30;-1:-1:-1;;;8514:18:132;;;8507:46;8570:18;;4225:236:103;8254:340:132;4225:236:103;4099:369;;;:::o;2537:210::-;2627:11;;;;2626:12;2618:44;;;;-1:-1:-1;;;2618:44:103;;8801:2:132;2618:44:103;;;8783:21:132;8840:2;8820:18;;;8813:30;-1:-1:-1;;;8859:18:132;;;8852:49;8918:18;;2618:44:103;8599:343:132;2618:44:103;2673:4;:12;2680:5;2673:4;:12;:::i;:::-;-1:-1:-1;2695:6:103;:16;2704:7;2695:6;:16;:::i;:::-;-1:-1:-1;;2722:11:103;:18;;-1:-1:-1;;2722:18:103;2736:4;2722:18;;;-1:-1:-1;2537:210:103:o;1406:149::-;1464:13;1506:12;;;:8;:12;;;;;;-1:-1:-1;;;;;1506:12:103;;1489:59;;;;-1:-1:-1;;;1489:59:103;;11344:2:132;1489:59:103;;;11326:21:132;11383:2;11363:18;;;11356:30;-1:-1:-1;;;11402:18:132;;;11395:40;11452:18;;1489:59:103;11142:334:132;1489:59:103;1406:149;;;:::o;1561:168::-;1624:7;-1:-1:-1;;;;;1651:19:103;;1643:44;;;;-1:-1:-1;;;1643:44:103;;11683:2:132;1643:44:103;;;11665:21:132;11722:2;11702:18;;;11695:30;-1:-1:-1;;;11741:18:132;;;11734:42;11793:18;;1643:44:103;11481:336:132;1643:44:103;-1:-1:-1;;;;;;1705:17:103;;;;;:10;:17;;;;;;;1561:168::o;1001:20::-;;;;;;;:::i;3223:203::-;3325:10;3308:28;;;;:16;:28;;;;;;;;-1:-1:-1;;;;;3308:38:103;;;;;;;;;;;;:49;;-1:-1:-1;;3308:49:103;;;;;;;;;;3373:46;;540:41:132;;;3308:38:103;;3325:10;3373:46;;513:18:132;3373:46:103;;;;;;;3223:203;;:::o;4474:390::-;4582:26;4595:4;4601:2;4605;4582:12;:26::i;:::-;7499:18;;7544:14;;4640:175;;-1:-1:-1;4676:69:103;;-1:-1:-1;;;4676:69:103;;;4769:46;-1:-1:-1;;;;;4676:41:103;;;4769:46;;4676:69;;4718:10;;4730:4;;4736:2;;4740:4;;4676:69;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;4676:139:103;;4640:175;4619:238;;;;-1:-1:-1;;;4619:238:103;;8456:2:132;4619:238:103;;;8438:21:132;8495:2;8475:18;;;8468:30;-1:-1:-1;;;8514:18:132;;;8507:46;8570:18;;4619:238:103;8254:340:132;4619:238:103;4474:390;;;;:::o;14:131:132:-;-1:-1:-1;;;;;;88:32:132;;78:43;;68:71;;135:1;132;125:12;68:71;14:131;:::o;150:245::-;208:6;261:2;249:9;240:7;236:23;232:32;229:52;;;277:1;274;267:12;229:52;316:9;303:23;335:30;359:5;335:30;:::i;:::-;384:5;150:245;-1:-1:-1;;;150:245:132:o;592:423::-;634:3;672:5;666:12;699:6;694:3;687:19;724:1;734:162;748:6;745:1;742:13;734:162;;;810:4;866:13;;;862:22;;856:29;838:11;;;834:20;;827:59;763:12;734:162;;;738:3;941:1;934:4;925:6;920:3;916:16;912:27;905:38;1004:4;997:2;993:7;988:2;980:6;976:15;972:29;967:3;963:39;959:50;952:57;;;592:423;;;;:::o;1020:220::-;1169:2;1158:9;1151:21;1132:4;1189:45;1230:2;1219:9;1215:18;1207:6;1189:45;:::i;1245:180::-;1304:6;1357:2;1345:9;1336:7;1332:23;1328:32;1325:52;;;1373:1;1370;1363:12;1325:52;-1:-1:-1;1396:23:132;;1245:180;-1:-1:-1;1245:180:132:o;1638:173::-;1706:20;;-1:-1:-1;;;;;1755:31:132;;1745:42;;1735:70;;1801:1;1798;1791:12;1816:254;1884:6;1892;1945:2;1933:9;1924:7;1920:23;1916:32;1913:52;;;1961:1;1958;1951:12;1913:52;1984:29;2003:9;1984:29;:::i;:::-;1974:39;2060:2;2045:18;;;;2032:32;;-1:-1:-1;;;1816:254:132:o;2075:328::-;2152:6;2160;2168;2221:2;2209:9;2200:7;2196:23;2192:32;2189:52;;;2237:1;2234;2227:12;2189:52;2260:29;2279:9;2260:29;:::i;:::-;2250:39;;2308:38;2342:2;2331:9;2327:18;2308:38;:::i;:::-;2298:48;;2393:2;2382:9;2378:18;2365:32;2355:42;;2075:328;;;;;:::o;2408:127::-;2469:10;2464:3;2460:20;2457:1;2450:31;2500:4;2497:1;2490:15;2524:4;2521:1;2514:15;2540:632;2605:5;2635:18;2676:2;2668:6;2665:14;2662:40;;;2682:18;;:::i;:::-;2757:2;2751:9;2725:2;2811:15;;-1:-1:-1;;2807:24:132;;;2833:2;2803:33;2799:42;2787:55;;;2857:18;;;2877:22;;;2854:46;2851:72;;;2903:18;;:::i;:::-;2943:10;2939:2;2932:22;2972:6;2963:15;;3002:6;2994;2987:22;3042:3;3033:6;3028:3;3024:16;3021:25;3018:45;;;3059:1;3056;3049:12;3018:45;3109:6;3104:3;3097:4;3089:6;3085:17;3072:44;3164:1;3157:4;3148:6;3140;3136:19;3132:30;3125:41;;;;2540:632;;;;;:::o;3177:222::-;3220:5;3273:3;3266:4;3258:6;3254:17;3250:27;3240:55;;3291:1;3288;3281:12;3240:55;3313:80;3389:3;3380:6;3367:20;3360:4;3352:6;3348:17;3313:80;:::i;3404:543::-;3492:6;3500;3553:2;3541:9;3532:7;3528:23;3524:32;3521:52;;;3569:1;3566;3559:12;3521:52;3609:9;3596:23;3638:18;3679:2;3671:6;3668:14;3665:34;;;3695:1;3692;3685:12;3665:34;3718:50;3760:7;3751:6;3740:9;3736:22;3718:50;:::i;:::-;3708:60;;3821:2;3810:9;3806:18;3793:32;3777:48;;3850:2;3840:8;3837:16;3834:36;;;3866:1;3863;3856:12;3834:36;;3889:52;3933:7;3922:8;3911:9;3907:24;3889:52;:::i;:::-;3879:62;;;3404:543;;;;;:::o;3952:186::-;4011:6;4064:2;4052:9;4043:7;4039:23;4035:32;4032:52;;;4080:1;4077;4070:12;4032:52;4103:29;4122:9;4103:29;:::i;4325:347::-;4390:6;4398;4451:2;4439:9;4430:7;4426:23;4422:32;4419:52;;;4467:1;4464;4457:12;4419:52;4490:29;4509:9;4490:29;:::i;:::-;4480:39;;4569:2;4558:9;4554:18;4541:32;4616:5;4609:13;4602:21;4595:5;4592:32;4582:60;;4638:1;4635;4628:12;4582:60;4661:5;4651:15;;;4325:347;;;;;:::o;4677:667::-;4772:6;4780;4788;4796;4849:3;4837:9;4828:7;4824:23;4820:33;4817:53;;;4866:1;4863;4856:12;4817:53;4889:29;4908:9;4889:29;:::i;:::-;4879:39;;4937:38;4971:2;4960:9;4956:18;4937:38;:::i;:::-;4927:48;;5022:2;5011:9;5007:18;4994:32;4984:42;;5077:2;5066:9;5062:18;5049:32;5104:18;5096:6;5093:30;5090:50;;;5136:1;5133;5126:12;5090:50;5159:22;;5212:4;5204:13;;5200:27;-1:-1:-1;5190:55:132;;5241:1;5238;5231:12;5190:55;5264:74;5330:7;5325:2;5312:16;5307:2;5303;5299:11;5264:74;:::i;:::-;5254:84;;;4677:667;;;;;;;:::o;5349:260::-;5417:6;5425;5478:2;5466:9;5457:7;5453:23;5449:32;5446:52;;;5494:1;5491;5484:12;5446:52;5517:29;5536:9;5517:29;:::i;:::-;5507:39;;5565:38;5599:2;5588:9;5584:18;5565:38;:::i;:::-;5555:48;;5349:260;;;;;:::o;5614:380::-;5693:1;5689:12;;;;5736;;;5757:61;;5811:4;5803:6;5799:17;5789:27;;5757:61;5864:2;5856:6;5853:14;5833:18;5830:38;5827:161;;5910:10;5905:3;5901:20;5898:1;5891:31;5945:4;5942:1;5935:15;5973:4;5970:1;5963:15;5827:161;;5614:380;;;:::o;7027:127::-;7088:10;7083:3;7079:20;7076:1;7069:31;7119:4;7116:1;7109:15;7143:4;7140:1;7133:15;7159:136;7198:3;7226:5;7216:39;;7235:18;;:::i;:::-;-1:-1:-1;;;7271:18:132;;7159:136::o;7300:135::-;7339:3;7360:17;;;7357:43;;7380:18;;:::i;:::-;-1:-1:-1;7427:1:132;7416:13;;7300:135::o;8000:249::-;8069:6;8122:2;8110:9;8101:7;8097:23;8093:32;8090:52;;;8138:1;8135;8128:12;8090:52;8170:9;8164:16;8189:30;8213:5;8189:30;:::i;9073:543::-;9175:2;9170:3;9167:11;9164:446;;;9211:1;9235:5;9232:1;9225:16;9279:4;9276:1;9266:18;9349:2;9337:10;9333:19;9330:1;9326:27;9320:4;9316:38;9385:4;9373:10;9370:20;9367:47;;;-1:-1:-1;9408:4:132;9367:47;9463:2;9458:3;9454:12;9451:1;9447:20;9441:4;9437:31;9427:41;;9518:82;9536:2;9529:5;9526:13;9518:82;;;9581:17;;;9562:1;9551:13;9518:82;;;9522:3;;;9073:543;;;:::o;9792:1345::-;9918:3;9912:10;9945:18;9937:6;9934:30;9931:56;;;9967:18;;:::i;:::-;9996:97;10086:6;10046:38;10078:4;10072:11;10046:38;:::i;:::-;10040:4;9996:97;:::i;:::-;10148:4;;10205:2;10194:14;;10222:1;10217:663;;;;10924:1;10941:6;10938:89;;;-1:-1:-1;10993:19:132;;;10987:26;10938:89;-1:-1:-1;;9749:1:132;9745:11;;;9741:24;9737:29;9727:40;9773:1;9769:11;;;9724:57;11040:81;;10187:944;;10217:663;9020:1;9013:14;;;9057:4;9044:18;;-1:-1:-1;;10253:20:132;;;10371:236;10385:7;10382:1;10379:14;10371:236;;;10474:19;;;10468:26;10453:42;;10566:27;;;;10534:1;10522:14;;;;10401:19;;10371:236;;;10375:3;10635:6;10626:7;10623:19;10620:201;;;10696:19;;;10690:26;-1:-1:-1;;10779:1:132;10775:14;;;10791:3;10771:24;10767:37;10763:42;10748:58;10733:74;;10620:201;-1:-1:-1;;;;;10867:1:132;10851:14;;;10847:22;10834:36;;-1:-1:-1;9792:1345:132:o;11822:489::-;-1:-1:-1;;;;;12091:15:132;;;12073:34;;12143:15;;12138:2;12123:18;;12116:43;12190:2;12175:18;;12168:34;;;12238:3;12233:2;12218:18;;12211:31;;;12016:4;;12259:46;;12285:19;;12277:6;12259:46;:::i;:::-;12251:54;11822:489;-1:-1:-1;;;;;;11822:489:132:o", - "linkReferences": {} - }, - "methodIdentifiers": { - "approve(address,uint256)": "095ea7b3", - "balanceOf(address)": "70a08231", - "getApproved(uint256)": "081812fc", - "initialize(string,string)": "4cd88b76", - "isApprovedForAll(address,address)": "e985e9c5", - "name()": "06fdde03", - "ownerOf(uint256)": "6352211e", - "safeTransferFrom(address,address,uint256)": "42842e0e", - "safeTransferFrom(address,address,uint256,bytes)": "b88d4fde", - "setApprovalForAll(address,bool)": "a22cb465", - "supportsInterface(bytes4)": "01ffc9a7", - "symbol()": "95d89b41", - "tokenURI(uint256)": "c87b56dd", - "transferFrom(address,address,uint256)": "23b872dd" - }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"getApproved\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"ownerOf\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"tokenURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Forked from: https://github.com/transmissions11/solmate/blob/0384dbaaa4fcb5715738a9254a7c0a4cb62cf458/src/tokens/ERC721.sol\",\"kind\":\"dev\",\"methods\":{\"initialize(string,string)\":{\"details\":\"To hide constructor warnings across solc versions due to different constructor visibility requirements and syntaxes, we add an initialization function that can be called only once.\"}},\"stateVariables\":{\"initialized\":{\"details\":\"A bool to track whether the contract has been initialized.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"This is a mock contract of the ERC721 standard for testing purposes only, it SHOULD NOT be used in production.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/mocks/MockERC721.sol\":\"MockERC721\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/mocks/MockERC721.sol\":{\"keccak256\":\"0xa24468244abb66e663fb7eee6463cb518eb9a7c14e1071548ff564cca825bbca\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://145585a2194aa6e2d30edfe709ef2814e20b1b4540469aa6a8f50c841fcb9070\",\"dweb:/ipfs/QmZrwbvtpbtTxqbW5phUrwb3F1tBiPSQc6jZJAXBfsBsAh\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address", - "indexed": true - }, - { - "internalType": "address", - "name": "spender", - "type": "address", - "indexed": true - }, - { - "internalType": "uint256", - "name": "id", - "type": "uint256", - "indexed": true - } - ], - "type": "event", - "name": "Approval", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address", - "indexed": true - }, - { - "internalType": "address", - "name": "operator", - "type": "address", - "indexed": true - }, - { - "internalType": "bool", - "name": "approved", - "type": "bool", - "indexed": false - } - ], - "type": "event", - "name": "ApprovalForAll", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address", - "indexed": true - }, - { - "internalType": "address", - "name": "to", - "type": "address", - "indexed": true - }, - { - "internalType": "uint256", - "name": "id", - "type": "uint256", - "indexed": true - } - ], - "type": "event", - "name": "Transfer", - "anonymous": false - }, - { - "inputs": [ - { "internalType": "address", "name": "spender", "type": "address" }, - { "internalType": "uint256", "name": "id", "type": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "approve" - }, - { - "inputs": [ - { "internalType": "address", "name": "owner", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "balanceOf", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ] - }, - { - "inputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ], - "stateMutability": "view", - "type": "function", - "name": "getApproved", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "_name", "type": "string" }, - { "internalType": "string", "name": "_symbol", "type": "string" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "initialize" - }, - { - "inputs": [ - { "internalType": "address", "name": "", "type": "address" }, - { "internalType": "address", "name": "", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "isApprovedForAll", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "name", - "outputs": [ - { "internalType": "string", "name": "", "type": "string" } - ] - }, - { - "inputs": [ - { "internalType": "uint256", "name": "id", "type": "uint256" } - ], - "stateMutability": "view", - "type": "function", - "name": "ownerOf", - "outputs": [ - { "internalType": "address", "name": "owner", "type": "address" } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "from", "type": "address" }, - { "internalType": "address", "name": "to", "type": "address" }, - { "internalType": "uint256", "name": "id", "type": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "safeTransferFrom" - }, - { - "inputs": [ - { "internalType": "address", "name": "from", "type": "address" }, - { "internalType": "address", "name": "to", "type": "address" }, - { "internalType": "uint256", "name": "id", "type": "uint256" }, - { "internalType": "bytes", "name": "data", "type": "bytes" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "safeTransferFrom" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - }, - { "internalType": "bool", "name": "approved", "type": "bool" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setApprovalForAll" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "stateMutability": "pure", - "type": "function", - "name": "supportsInterface", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "symbol", - "outputs": [ - { "internalType": "string", "name": "", "type": "string" } - ] - }, - { - "inputs": [ - { "internalType": "uint256", "name": "id", "type": "uint256" } - ], - "stateMutability": "view", - "type": "function", - "name": "tokenURI", - "outputs": [ - { "internalType": "string", "name": "", "type": "string" } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "from", "type": "address" }, - { "internalType": "address", "name": "to", "type": "address" }, - { "internalType": "uint256", "name": "id", "type": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "transferFrom" - } - ], - "devdoc": { - "kind": "dev", - "methods": { - "initialize(string,string)": { - "details": "To hide constructor warnings across solc versions due to different constructor visibility requirements and syntaxes, we add an initialization function that can be called only once." - } - }, - "version": 1 - }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/mocks/MockERC721.sol": "MockERC721" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/mocks/MockERC721.sol": { - "keccak256": "0xa24468244abb66e663fb7eee6463cb518eb9a7c14e1071548ff564cca825bbca", - "urls": [ - "bzz-raw://145585a2194aa6e2d30edfe709ef2814e20b1b4540469aa6a8f50c841fcb9070", - "dweb:/ipfs/QmZrwbvtpbtTxqbW5phUrwb3F1tBiPSQc6jZJAXBfsBsAh" - ], - "license": "MIT" - } - }, - "version": 1 - }, - "id": 103 -} diff --git a/examples/oft-movement/out/MultiSigMock.sol/MultiSigMock.json b/examples/oft-movement/out/MultiSigMock.sol/MultiSigMock.json deleted file mode 100644 index 2b31d1645..000000000 --- a/examples/oft-movement/out/MultiSigMock.sol/MultiSigMock.json +++ /dev/null @@ -1,253 +0,0 @@ -{ - "abi": [ - { - "type": "function", - "name": "quorum", - "inputs": [], - "outputs": [{ "name": "", "type": "uint64", "internalType": "uint64" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "signerSize", - "inputs": [], - "outputs": [{ "name": "", "type": "uint64", "internalType": "uint64" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "signers", - "inputs": [ - { "name": "signer", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "active", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "verifySignatures", - "inputs": [ - { "name": "_hash", "type": "bytes32", "internalType": "bytes32" }, - { "name": "_signatures", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [ - { "name": "", "type": "bool", "internalType": "bool" }, - { - "name": "", - "type": "uint8", - "internalType": "enum MultiSigMock.Errors" - } - ], - "stateMutability": "view" - }, - { - "type": "event", - "name": "UpdateQuorum", - "inputs": [ - { - "name": "_quorum", - "type": "uint64", - "indexed": false, - "internalType": "uint64" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "UpdateSigner", - "inputs": [ - { - "name": "_signer", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "_active", - "type": "bool", - "indexed": false, - "internalType": "bool" - } - ], - "anonymous": false - }, - { "type": "error", "name": "MultiSig_OnlySigner", "inputs": [] }, - { "type": "error", "name": "MultiSig_QuorumIsZero", "inputs": [] }, - { - "type": "error", - "name": "MultiSig_SignersSizeIsLessThanQuorum", - "inputs": [ - { "name": "signersSize", "type": "uint64", "internalType": "uint64" }, - { "name": "quorum", "type": "uint64", "internalType": "uint64" } - ] - }, - { - "type": "error", - "name": "MultiSig_StateAlreadySet", - "inputs": [ - { "name": "signer", "type": "address", "internalType": "address" }, - { "name": "active", "type": "bool", "internalType": "bool" } - ] - }, - { "type": "error", "name": "MultiSig_UnorderedSigners", "inputs": [] } - ], - "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "methodIdentifiers": { - "quorum()": "1703a018", - "signerSize()": "fd62e750", - "signers(address)": "736c0d5b", - "verifySignatures(bytes32,bytes)": "c7a823e0" - }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"MultiSig_OnlySigner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MultiSig_QuorumIsZero\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"signersSize\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"quorum\",\"type\":\"uint64\"}],\"name\":\"MultiSig_SignersSizeIsLessThanQuorum\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"active\",\"type\":\"bool\"}],\"name\":\"MultiSig_StateAlreadySet\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MultiSig_UnorderedSigners\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"_quorum\",\"type\":\"uint64\"}],\"name\":\"UpdateQuorum\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_signer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"_active\",\"type\":\"bool\"}],\"name\":\"UpdateSigner\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"quorum\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"signerSize\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"}],\"name\":\"signers\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"active\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_signatures\",\"type\":\"bytes\"}],\"name\":\"verifySignatures\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"enum MultiSigMock.Errors\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/MultiSigMock.sol\":\"MultiSigMock\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/MultiSigMock.sol\":{\"keccak256\":\"0xc7c90e073e52af1da6c07e3d3f7477b064a89e78935c16e9872457df503c6830\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://cef1ae2d517e152616aea7f8f5c15fa1fbabbec8896a9c30a9eed35fb56b4f2f\",\"dweb:/ipfs/QmeitPMQht2WfbR9ZLzwKWgThamdsJkobeaWo6ojTCoQG5\"]},\"node_modules/@openzeppelin/contracts/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0x69f54c02b7d81d505910ec198c11ed4c6a728418a868b906b4a0cf29946fda84\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8e25e4bdb7ae1f21d23bfee996e22736fc0ab44cfabedac82a757b1edc5623b9\",\"dweb:/ipfs/QmQdWQvB6JCP9ZMbzi8EvQ1PTETqkcTWrbcVurS7DKpa5n\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { "inputs": [], "type": "error", "name": "MultiSig_OnlySigner" }, - { "inputs": [], "type": "error", "name": "MultiSig_QuorumIsZero" }, - { - "inputs": [ - { - "internalType": "uint64", - "name": "signersSize", - "type": "uint64" - }, - { "internalType": "uint64", "name": "quorum", "type": "uint64" } - ], - "type": "error", - "name": "MultiSig_SignersSizeIsLessThanQuorum" - }, - { - "inputs": [ - { "internalType": "address", "name": "signer", "type": "address" }, - { "internalType": "bool", "name": "active", "type": "bool" } - ], - "type": "error", - "name": "MultiSig_StateAlreadySet" - }, - { "inputs": [], "type": "error", "name": "MultiSig_UnorderedSigners" }, - { - "inputs": [ - { - "internalType": "uint64", - "name": "_quorum", - "type": "uint64", - "indexed": false - } - ], - "type": "event", - "name": "UpdateQuorum", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_signer", - "type": "address", - "indexed": false - }, - { - "internalType": "bool", - "name": "_active", - "type": "bool", - "indexed": false - } - ], - "type": "event", - "name": "UpdateSigner", - "anonymous": false - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "quorum", - "outputs": [ - { "internalType": "uint64", "name": "", "type": "uint64" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "signerSize", - "outputs": [ - { "internalType": "uint64", "name": "", "type": "uint64" } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "signer", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "signers", - "outputs": [ - { "internalType": "bool", "name": "active", "type": "bool" } - ] - }, - { - "inputs": [ - { "internalType": "bytes32", "name": "_hash", "type": "bytes32" }, - { "internalType": "bytes", "name": "_signatures", "type": "bytes" } - ], - "stateMutability": "view", - "type": "function", - "name": "verifySignatures", - "outputs": [ - { "internalType": "bool", "name": "", "type": "bool" }, - { - "internalType": "enum MultiSigMock.Errors", - "name": "", - "type": "uint8" - } - ] - } - ], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/MultiSigMock.sol": "MultiSigMock" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/MultiSigMock.sol": { - "keccak256": "0xc7c90e073e52af1da6c07e3d3f7477b064a89e78935c16e9872457df503c6830", - "urls": [ - "bzz-raw://cef1ae2d517e152616aea7f8f5c15fa1fbabbec8896a9c30a9eed35fb56b4f2f", - "dweb:/ipfs/QmeitPMQht2WfbR9ZLzwKWgThamdsJkobeaWo6ojTCoQG5" - ], - "license": "LZBL-1.2" - }, - "node_modules/@openzeppelin/contracts/utils/cryptography/ECDSA.sol": { - "keccak256": "0x69f54c02b7d81d505910ec198c11ed4c6a728418a868b906b4a0cf29946fda84", - "urls": [ - "bzz-raw://8e25e4bdb7ae1f21d23bfee996e22736fc0ab44cfabedac82a757b1edc5623b9", - "dweb:/ipfs/QmQdWQvB6JCP9ZMbzi8EvQ1PTETqkcTWrbcVurS7DKpa5n" - ], - "license": "MIT" - } - }, - "version": 1 - }, - "id": 78 -} diff --git a/examples/oft-movement/out/MyOFT.sol/MyOFT.json b/examples/oft-movement/out/MyOFT.sol/MyOFT.json deleted file mode 100644 index 58c57ad6f..000000000 --- a/examples/oft-movement/out/MyOFT.sol/MyOFT.json +++ /dev/null @@ -1,2859 +0,0 @@ -{ - "abi": [ - { - "type": "constructor", - "inputs": [ - { "name": "_name", "type": "string", "internalType": "string" }, - { "name": "_symbol", "type": "string", "internalType": "string" }, - { "name": "_lzEndpoint", "type": "address", "internalType": "address" }, - { "name": "_delegate", "type": "address", "internalType": "address" } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "SEND", - "inputs": [], - "outputs": [{ "name": "", "type": "uint16", "internalType": "uint16" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "SEND_AND_CALL", - "inputs": [], - "outputs": [{ "name": "", "type": "uint16", "internalType": "uint16" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "allowInitializePath", - "inputs": [ - { - "name": "origin", - "type": "tuple", - "internalType": "struct Origin", - "components": [ - { "name": "srcEid", "type": "uint32", "internalType": "uint32" }, - { "name": "sender", "type": "bytes32", "internalType": "bytes32" }, - { "name": "nonce", "type": "uint64", "internalType": "uint64" } - ] - } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "allowance", - "inputs": [ - { "name": "owner", "type": "address", "internalType": "address" }, - { "name": "spender", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "approvalRequired", - "inputs": [], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "approve", - "inputs": [ - { "name": "spender", "type": "address", "internalType": "address" }, - { "name": "value", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "balanceOf", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "combineOptions", - "inputs": [ - { "name": "_eid", "type": "uint32", "internalType": "uint32" }, - { "name": "_msgType", "type": "uint16", "internalType": "uint16" }, - { "name": "_extraOptions", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [{ "name": "", "type": "bytes", "internalType": "bytes" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "decimalConversionRate", - "inputs": [], - "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "decimals", - "inputs": [], - "outputs": [{ "name": "", "type": "uint8", "internalType": "uint8" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "endpoint", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "contract ILayerZeroEndpointV2" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "enforcedOptions", - "inputs": [ - { "name": "eid", "type": "uint32", "internalType": "uint32" }, - { "name": "msgType", "type": "uint16", "internalType": "uint16" } - ], - "outputs": [ - { "name": "enforcedOption", "type": "bytes", "internalType": "bytes" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "isComposeMsgSender", - "inputs": [ - { - "name": "", - "type": "tuple", - "internalType": "struct Origin", - "components": [ - { "name": "srcEid", "type": "uint32", "internalType": "uint32" }, - { "name": "sender", "type": "bytes32", "internalType": "bytes32" }, - { "name": "nonce", "type": "uint64", "internalType": "uint64" } - ] - }, - { "name": "", "type": "bytes", "internalType": "bytes" }, - { "name": "_sender", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "isPeer", - "inputs": [ - { "name": "_eid", "type": "uint32", "internalType": "uint32" }, - { "name": "_peer", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "lzReceive", - "inputs": [ - { - "name": "_origin", - "type": "tuple", - "internalType": "struct Origin", - "components": [ - { "name": "srcEid", "type": "uint32", "internalType": "uint32" }, - { "name": "sender", "type": "bytes32", "internalType": "bytes32" }, - { "name": "nonce", "type": "uint64", "internalType": "uint64" } - ] - }, - { "name": "_guid", "type": "bytes32", "internalType": "bytes32" }, - { "name": "_message", "type": "bytes", "internalType": "bytes" }, - { "name": "_executor", "type": "address", "internalType": "address" }, - { "name": "_extraData", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [], - "stateMutability": "payable" - }, - { - "type": "function", - "name": "lzReceiveAndRevert", - "inputs": [ - { - "name": "_packets", - "type": "tuple[]", - "internalType": "struct InboundPacket[]", - "components": [ - { - "name": "origin", - "type": "tuple", - "internalType": "struct Origin", - "components": [ - { - "name": "srcEid", - "type": "uint32", - "internalType": "uint32" - }, - { - "name": "sender", - "type": "bytes32", - "internalType": "bytes32" - }, - { "name": "nonce", "type": "uint64", "internalType": "uint64" } - ] - }, - { "name": "dstEid", "type": "uint32", "internalType": "uint32" }, - { - "name": "receiver", - "type": "address", - "internalType": "address" - }, - { "name": "guid", "type": "bytes32", "internalType": "bytes32" }, - { "name": "value", "type": "uint256", "internalType": "uint256" }, - { - "name": "executor", - "type": "address", - "internalType": "address" - }, - { "name": "message", "type": "bytes", "internalType": "bytes" }, - { "name": "extraData", "type": "bytes", "internalType": "bytes" } - ] - } - ], - "outputs": [], - "stateMutability": "payable" - }, - { - "type": "function", - "name": "lzReceiveSimulate", - "inputs": [ - { - "name": "_origin", - "type": "tuple", - "internalType": "struct Origin", - "components": [ - { "name": "srcEid", "type": "uint32", "internalType": "uint32" }, - { "name": "sender", "type": "bytes32", "internalType": "bytes32" }, - { "name": "nonce", "type": "uint64", "internalType": "uint64" } - ] - }, - { "name": "_guid", "type": "bytes32", "internalType": "bytes32" }, - { "name": "_message", "type": "bytes", "internalType": "bytes" }, - { "name": "_executor", "type": "address", "internalType": "address" }, - { "name": "_extraData", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [], - "stateMutability": "payable" - }, - { - "type": "function", - "name": "msgInspector", - "inputs": [], - "outputs": [{ "name": "", "type": "address", "internalType": "address" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "name", - "inputs": [], - "outputs": [{ "name": "", "type": "string", "internalType": "string" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "nextNonce", - "inputs": [ - { "name": "", "type": "uint32", "internalType": "uint32" }, - { "name": "", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [ - { "name": "nonce", "type": "uint64", "internalType": "uint64" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "oApp", - "inputs": [], - "outputs": [{ "name": "", "type": "address", "internalType": "address" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "oAppVersion", - "inputs": [], - "outputs": [ - { "name": "senderVersion", "type": "uint64", "internalType": "uint64" }, - { - "name": "receiverVersion", - "type": "uint64", - "internalType": "uint64" - } - ], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "oftVersion", - "inputs": [], - "outputs": [ - { "name": "interfaceId", "type": "bytes4", "internalType": "bytes4" }, - { "name": "version", "type": "uint64", "internalType": "uint64" } - ], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "owner", - "inputs": [], - "outputs": [{ "name": "", "type": "address", "internalType": "address" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "peers", - "inputs": [{ "name": "eid", "type": "uint32", "internalType": "uint32" }], - "outputs": [ - { "name": "peer", "type": "bytes32", "internalType": "bytes32" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "preCrime", - "inputs": [], - "outputs": [{ "name": "", "type": "address", "internalType": "address" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "quoteOFT", - "inputs": [ - { - "name": "_sendParam", - "type": "tuple", - "internalType": "struct SendParam", - "components": [ - { "name": "dstEid", "type": "uint32", "internalType": "uint32" }, - { "name": "to", "type": "bytes32", "internalType": "bytes32" }, - { - "name": "amountLD", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "minAmountLD", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "extraOptions", - "type": "bytes", - "internalType": "bytes" - }, - { "name": "composeMsg", "type": "bytes", "internalType": "bytes" }, - { "name": "oftCmd", "type": "bytes", "internalType": "bytes" } - ] - } - ], - "outputs": [ - { - "name": "oftLimit", - "type": "tuple", - "internalType": "struct OFTLimit", - "components": [ - { - "name": "minAmountLD", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "maxAmountLD", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "name": "oftFeeDetails", - "type": "tuple[]", - "internalType": "struct OFTFeeDetail[]", - "components": [ - { - "name": "feeAmountLD", - "type": "int256", - "internalType": "int256" - }, - { - "name": "description", - "type": "string", - "internalType": "string" - } - ] - }, - { - "name": "oftReceipt", - "type": "tuple", - "internalType": "struct OFTReceipt", - "components": [ - { - "name": "amountSentLD", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "amountReceivedLD", - "type": "uint256", - "internalType": "uint256" - } - ] - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "quoteSend", - "inputs": [ - { - "name": "_sendParam", - "type": "tuple", - "internalType": "struct SendParam", - "components": [ - { "name": "dstEid", "type": "uint32", "internalType": "uint32" }, - { "name": "to", "type": "bytes32", "internalType": "bytes32" }, - { - "name": "amountLD", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "minAmountLD", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "extraOptions", - "type": "bytes", - "internalType": "bytes" - }, - { "name": "composeMsg", "type": "bytes", "internalType": "bytes" }, - { "name": "oftCmd", "type": "bytes", "internalType": "bytes" } - ] - }, - { "name": "_payInLzToken", "type": "bool", "internalType": "bool" } - ], - "outputs": [ - { - "name": "msgFee", - "type": "tuple", - "internalType": "struct MessagingFee", - "components": [ - { - "name": "nativeFee", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "lzTokenFee", - "type": "uint256", - "internalType": "uint256" - } - ] - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "renounceOwnership", - "inputs": [], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "send", - "inputs": [ - { - "name": "_sendParam", - "type": "tuple", - "internalType": "struct SendParam", - "components": [ - { "name": "dstEid", "type": "uint32", "internalType": "uint32" }, - { "name": "to", "type": "bytes32", "internalType": "bytes32" }, - { - "name": "amountLD", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "minAmountLD", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "extraOptions", - "type": "bytes", - "internalType": "bytes" - }, - { "name": "composeMsg", "type": "bytes", "internalType": "bytes" }, - { "name": "oftCmd", "type": "bytes", "internalType": "bytes" } - ] - }, - { - "name": "_fee", - "type": "tuple", - "internalType": "struct MessagingFee", - "components": [ - { - "name": "nativeFee", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "lzTokenFee", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "name": "_refundAddress", - "type": "address", - "internalType": "address" - } - ], - "outputs": [ - { - "name": "msgReceipt", - "type": "tuple", - "internalType": "struct MessagingReceipt", - "components": [ - { "name": "guid", "type": "bytes32", "internalType": "bytes32" }, - { "name": "nonce", "type": "uint64", "internalType": "uint64" }, - { - "name": "fee", - "type": "tuple", - "internalType": "struct MessagingFee", - "components": [ - { - "name": "nativeFee", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "lzTokenFee", - "type": "uint256", - "internalType": "uint256" - } - ] - } - ] - }, - { - "name": "oftReceipt", - "type": "tuple", - "internalType": "struct OFTReceipt", - "components": [ - { - "name": "amountSentLD", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "amountReceivedLD", - "type": "uint256", - "internalType": "uint256" - } - ] - } - ], - "stateMutability": "payable" - }, - { - "type": "function", - "name": "setDelegate", - "inputs": [ - { "name": "_delegate", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setEnforcedOptions", - "inputs": [ - { - "name": "_enforcedOptions", - "type": "tuple[]", - "internalType": "struct EnforcedOptionParam[]", - "components": [ - { "name": "eid", "type": "uint32", "internalType": "uint32" }, - { "name": "msgType", "type": "uint16", "internalType": "uint16" }, - { "name": "options", "type": "bytes", "internalType": "bytes" } - ] - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setMsgInspector", - "inputs": [ - { - "name": "_msgInspector", - "type": "address", - "internalType": "address" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setPeer", - "inputs": [ - { "name": "_eid", "type": "uint32", "internalType": "uint32" }, - { "name": "_peer", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setPreCrime", - "inputs": [ - { "name": "_preCrime", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "sharedDecimals", - "inputs": [], - "outputs": [{ "name": "", "type": "uint8", "internalType": "uint8" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "symbol", - "inputs": [], - "outputs": [{ "name": "", "type": "string", "internalType": "string" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "token", - "inputs": [], - "outputs": [{ "name": "", "type": "address", "internalType": "address" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "totalSupply", - "inputs": [], - "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "transfer", - "inputs": [ - { "name": "to", "type": "address", "internalType": "address" }, - { "name": "value", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "transferFrom", - "inputs": [ - { "name": "from", "type": "address", "internalType": "address" }, - { "name": "to", "type": "address", "internalType": "address" }, - { "name": "value", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "transferOwnership", - "inputs": [ - { "name": "newOwner", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "event", - "name": "Approval", - "inputs": [ - { - "name": "owner", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "spender", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "value", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "EnforcedOptionSet", - "inputs": [ - { - "name": "_enforcedOptions", - "type": "tuple[]", - "indexed": false, - "internalType": "struct EnforcedOptionParam[]", - "components": [ - { "name": "eid", "type": "uint32", "internalType": "uint32" }, - { "name": "msgType", "type": "uint16", "internalType": "uint16" }, - { "name": "options", "type": "bytes", "internalType": "bytes" } - ] - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "MsgInspectorSet", - "inputs": [ - { - "name": "inspector", - "type": "address", - "indexed": false, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "OFTReceived", - "inputs": [ - { - "name": "guid", - "type": "bytes32", - "indexed": true, - "internalType": "bytes32" - }, - { - "name": "srcEid", - "type": "uint32", - "indexed": false, - "internalType": "uint32" - }, - { - "name": "toAddress", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "amountReceivedLD", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "OFTSent", - "inputs": [ - { - "name": "guid", - "type": "bytes32", - "indexed": true, - "internalType": "bytes32" - }, - { - "name": "dstEid", - "type": "uint32", - "indexed": false, - "internalType": "uint32" - }, - { - "name": "fromAddress", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "amountSentLD", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - }, - { - "name": "amountReceivedLD", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "OwnershipTransferred", - "inputs": [ - { - "name": "previousOwner", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "newOwner", - "type": "address", - "indexed": true, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "PeerSet", - "inputs": [ - { - "name": "eid", - "type": "uint32", - "indexed": false, - "internalType": "uint32" - }, - { - "name": "peer", - "type": "bytes32", - "indexed": false, - "internalType": "bytes32" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "PreCrimeSet", - "inputs": [ - { - "name": "preCrimeAddress", - "type": "address", - "indexed": false, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "Transfer", - "inputs": [ - { - "name": "from", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "to", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "value", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "error", - "name": "ERC20InsufficientAllowance", - "inputs": [ - { "name": "spender", "type": "address", "internalType": "address" }, - { "name": "allowance", "type": "uint256", "internalType": "uint256" }, - { "name": "needed", "type": "uint256", "internalType": "uint256" } - ] - }, - { - "type": "error", - "name": "ERC20InsufficientBalance", - "inputs": [ - { "name": "sender", "type": "address", "internalType": "address" }, - { "name": "balance", "type": "uint256", "internalType": "uint256" }, - { "name": "needed", "type": "uint256", "internalType": "uint256" } - ] - }, - { - "type": "error", - "name": "ERC20InvalidApprover", - "inputs": [ - { "name": "approver", "type": "address", "internalType": "address" } - ] - }, - { - "type": "error", - "name": "ERC20InvalidReceiver", - "inputs": [ - { "name": "receiver", "type": "address", "internalType": "address" } - ] - }, - { - "type": "error", - "name": "ERC20InvalidSender", - "inputs": [ - { "name": "sender", "type": "address", "internalType": "address" } - ] - }, - { - "type": "error", - "name": "ERC20InvalidSpender", - "inputs": [ - { "name": "spender", "type": "address", "internalType": "address" } - ] - }, - { "type": "error", "name": "InvalidDelegate", "inputs": [] }, - { "type": "error", "name": "InvalidEndpointCall", "inputs": [] }, - { "type": "error", "name": "InvalidLocalDecimals", "inputs": [] }, - { - "type": "error", - "name": "InvalidOptions", - "inputs": [ - { "name": "options", "type": "bytes", "internalType": "bytes" } - ] - }, - { "type": "error", "name": "LzTokenUnavailable", "inputs": [] }, - { - "type": "error", - "name": "NoPeer", - "inputs": [{ "name": "eid", "type": "uint32", "internalType": "uint32" }] - }, - { - "type": "error", - "name": "NotEnoughNative", - "inputs": [ - { "name": "msgValue", "type": "uint256", "internalType": "uint256" } - ] - }, - { - "type": "error", - "name": "OnlyEndpoint", - "inputs": [ - { "name": "addr", "type": "address", "internalType": "address" } - ] - }, - { - "type": "error", - "name": "OnlyPeer", - "inputs": [ - { "name": "eid", "type": "uint32", "internalType": "uint32" }, - { "name": "sender", "type": "bytes32", "internalType": "bytes32" } - ] - }, - { "type": "error", "name": "OnlySelf", "inputs": [] }, - { - "type": "error", - "name": "OwnableInvalidOwner", - "inputs": [ - { "name": "owner", "type": "address", "internalType": "address" } - ] - }, - { - "type": "error", - "name": "OwnableUnauthorizedAccount", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ] - }, - { - "type": "error", - "name": "SafeERC20FailedOperation", - "inputs": [ - { "name": "token", "type": "address", "internalType": "address" } - ] - }, - { - "type": "error", - "name": "SimulationResult", - "inputs": [{ "name": "result", "type": "bytes", "internalType": "bytes" }] - }, - { - "type": "error", - "name": "SlippageExceeded", - "inputs": [ - { "name": "amountLD", "type": "uint256", "internalType": "uint256" }, - { "name": "minAmountLD", "type": "uint256", "internalType": "uint256" } - ] - } - ], - "bytecode": { - "object": "0x60c06040523480156200001157600080fd5b506040516200366a3803806200366a8339810160408190526200003491620002d2565b83838383838360128484818181818d6001600160a01b0381166200007257604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b6200007d8162000198565b506001600160a01b038083166080528116620000ac57604051632d618d8160e21b815260040160405180910390fd5b60805160405163ca5eb5e160e01b81526001600160a01b0383811660048301529091169063ca5eb5e190602401600060405180830381600087803b158015620000f457600080fd5b505af115801562000109573d6000803e3d6000fd5b505050505050505062000121620001e860201b60201c565b60ff168360ff16101562000148576040516301e9714b60e41b815260040160405180910390fd5b6200015560068462000377565b6200016290600a62000496565b60a052506008915062000178905083826200053f565b5060096200018782826200053f565b50505050505050505050506200060b565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600690565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200021557600080fd5b81516001600160401b0380821115620002325762000232620001ed565b604051601f8301601f19908116603f011681019082821181831017156200025d576200025d620001ed565b81604052838152602092508660208588010111156200027b57600080fd5b600091505b838210156200029f578582018301518183018401529082019062000280565b6000602085830101528094505050505092915050565b80516001600160a01b0381168114620002cd57600080fd5b919050565b60008060008060808587031215620002e957600080fd5b84516001600160401b03808211156200030157600080fd5b6200030f8883890162000203565b955060208701519150808211156200032657600080fd5b50620003358782880162000203565b9350506200034660408601620002b5565b91506200035660608601620002b5565b905092959194509250565b634e487b7160e01b600052601160045260246000fd5b60ff828116828216039081111562000393576200039362000361565b92915050565b600181815b80851115620003da578160001904821115620003be57620003be62000361565b80851615620003cc57918102915b93841c93908002906200039e565b509250929050565b600082620003f35750600162000393565b81620004025750600062000393565b81600181146200041b5760028114620004265762000446565b600191505062000393565b60ff8411156200043a576200043a62000361565b50506001821b62000393565b5060208310610133831016604e8410600b84101617156200046b575081810a62000393565b62000477838362000399565b80600019048211156200048e576200048e62000361565b029392505050565b6000620004a760ff841683620003e2565b9392505050565b600181811c90821680620004c357607f821691505b602082108103620004e457634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200053a576000816000526020600020601f850160051c81016020861015620005155750805b601f850160051c820191505b81811015620005365782815560010162000521565b5050505b505050565b81516001600160401b038111156200055b576200055b620001ed565b62000573816200056c8454620004ae565b84620004ea565b602080601f831160018114620005ab5760008415620005925750858301515b600019600386901b1c1916600185901b17855562000536565b600085815260208120601f198616915b82811015620005dc57888601518255948401946001909101908401620005bb565b5085821015620005fb5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a051612ff3620006776000396000818161061e015281816119e001528181611a550152611c590152600081816104dd0152818161098d01528181610fdd01528181611254015281816115be01528181611d5101528181611ec10152611f780152612ff36000f3fe6080604052600436106102515760003560e01c80637d25a05e11610139578063bb0b6a53116100b6578063d045a0dc1161007a578063d045a0dc14610755578063d424388514610768578063dd62ed3e14610788578063f2fde38b146107ce578063fc0c546a14610461578063ff7bd03d146107ee57600080fd5b8063bb0b6a53146106b4578063bc70b354146106e1578063bd815db014610701578063c7c7f5b314610714578063ca5eb5e11461073557600080fd5b8063963efcaa116100fd578063963efcaa1461060c5780639f68b96414610640578063a9059cbb14610654578063b731ea0a14610674578063b98bd0701461069457600080fd5b80637d25a05e1461056a57806382413eac146105a5578063857749b0146105c55780638da5cb5b146105d957806395d89b41146105f757600080fd5b806323b872dd116101d25780635535d461116101965780635535d461146104745780635a0dfe4d146104945780635e280f11146104cb5780636fc1b31e146104ff57806370a082311461051f578063715018a61461055557600080fd5b806323b872dd146103d2578063313ce567146103f25780633400288b146104145780633b6f743b1461043457806352ae28791461046157600080fd5b8063134d4f2511610219578063134d4f251461032d578063156a0d0f1461035557806317442b701461037c57806318160ddd1461039e5780631f5e1334146103bd57600080fd5b806306fdde0314610256578063095ea7b3146102815780630d35b415146102b1578063111ecdad146102e057806313137d6514610318575b600080fd5b34801561026257600080fd5b5061026b61080e565b60405161027891906120f0565b60405180910390f35b34801561028d57600080fd5b506102a161029c366004612118565b6108a0565b6040519015158152602001610278565b3480156102bd57600080fd5b506102d16102cc36600461215c565b6108ba565b60405161027893929190612190565b3480156102ec57600080fd5b50600454610300906001600160a01b031681565b6040516001600160a01b039091168152602001610278565b61032b610326366004612283565b61098b565b005b34801561033957600080fd5b50610342600281565b60405161ffff9091168152602001610278565b34801561036157600080fd5b506040805162b9270b60e21b81526001602082015201610278565b34801561038857600080fd5b5060408051600181526002602082015201610278565b3480156103aa57600080fd5b506007545b604051908152602001610278565b3480156103c957600080fd5b50610342600181565b3480156103de57600080fd5b506102a16103ed366004612322565b610a4b565b3480156103fe57600080fd5b5060125b60405160ff9091168152602001610278565b34801561042057600080fd5b5061032b61042f36600461237c565b610a71565b34801561044057600080fd5b5061045461044f3660046123a6565b610a87565b60405161027891906123f7565b34801561046d57600080fd5b5030610300565b34801561048057600080fd5b5061026b61048f366004612420565b610aee565b3480156104a057600080fd5b506102a16104af36600461237c565b63ffffffff919091166000908152600160205260409020541490565b3480156104d757600080fd5b506103007f000000000000000000000000000000000000000000000000000000000000000081565b34801561050b57600080fd5b5061032b61051a366004612453565b610b93565b34801561052b57600080fd5b506103af61053a366004612453565b6001600160a01b031660009081526005602052604090205490565b34801561056157600080fd5b5061032b610bf0565b34801561057657600080fd5b5061058d61058536600461237c565b600092915050565b6040516001600160401b039091168152602001610278565b3480156105b157600080fd5b506102a16105c0366004612470565b610c04565b3480156105d157600080fd5b506006610402565b3480156105e557600080fd5b506000546001600160a01b0316610300565b34801561060357600080fd5b5061026b610c19565b34801561061857600080fd5b506103af7f000000000000000000000000000000000000000000000000000000000000000081565b34801561064c57600080fd5b5060006102a1565b34801561066057600080fd5b506102a161066f366004612118565b610c28565b34801561068057600080fd5b50600254610300906001600160a01b031681565b3480156106a057600080fd5b5061032b6106af36600461251a565b610c36565b3480156106c057600080fd5b506103af6106cf36600461255b565b60016020526000908152604090205481565b3480156106ed57600080fd5b5061026b6106fc366004612576565b610c50565b61032b61070f36600461251a565b610df8565b6107276107223660046125d6565b610f82565b604051610278929190612643565b34801561074157600080fd5b5061032b610750366004612453565b610fb6565b61032b610763366004612283565b61103c565b34801561077457600080fd5b5061032b610783366004612453565b61106b565b34801561079457600080fd5b506103af6107a3366004612695565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b3480156107da57600080fd5b5061032b6107e9366004612453565b6110c1565b3480156107fa57600080fd5b506102a16108093660046126c3565b6110ff565b60606008805461081d906126df565b80601f0160208091040260200160405190810160405280929190818152602001828054610849906126df565b80156108965780601f1061086b57610100808354040283529160200191610896565b820191906000526020600020905b81548152906001019060200180831161087957829003601f168201915b5050505050905090565b6000336108ae818585611135565b60019150505b92915050565b604080518082019091526000808252602082015260606108ed604051806040016040528060008152602001600081525090565b60408051808201825260008082526001600160401b03602080840182905284518381529081019094529195509182610948565b6040805180820190915260008152606060208201528152602001906001900390816109205790505b50935060008061096d604089013560608a013561096860208c018c61255b565b611147565b60408051808201909152918252602082015296989597505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633146109db576040516391ac5e4f60e01b81523360048201526024015b60405180910390fd5b602087018035906109f5906109f0908a61255b565b611183565b14610a3357610a07602088018861255b565b60405163309afaf360e21b815263ffffffff9091166004820152602088013560248201526044016109d2565b610a42878787878787876111bf565b50505050505050565b600033610a59858285611326565b610a648585856113a4565b60019150505b9392505050565b610a79611403565b610a838282611430565b5050565b60408051808201909152600080825260208201526000610ab760408501356060860135610968602088018861255b565b915050600080610ac78684611485565b9092509050610ae4610adc602088018861255b565b8383886115a8565b9695505050505050565b600360209081526000928352604080842090915290825290208054610b12906126df565b80601f0160208091040260200160405190810160405280929190818152602001828054610b3e906126df565b8015610b8b5780601f10610b6057610100808354040283529160200191610b8b565b820191906000526020600020905b815481529060010190602001808311610b6e57829003601f168201915b505050505081565b610b9b611403565b600480546001600160a01b0319166001600160a01b0383169081179091556040519081527ff0be4f1e87349231d80c36b33f9e8639658eeaf474014dee15a3e6a4d4414197906020015b60405180910390a150565b610bf8611403565b610c026000611689565b565b6001600160a01b03811630145b949350505050565b60606009805461081d906126df565b6000336108ae8185856113a4565b610c3e611403565b610a83610c4b82846127ca565b6116d9565b63ffffffff8416600090815260036020908152604080832061ffff87168452909152812080546060929190610c84906126df565b80601f0160208091040260200160405190810160405280929190818152602001828054610cb0906126df565b8015610cfd5780601f10610cd257610100808354040283529160200191610cfd565b820191906000526020600020905b815481529060010190602001808311610ce057829003601f168201915b505050505090508051600003610d4d5783838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929450610c119350505050565b6000839003610d5d579050610c11565b60028310610ddb57610da484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506117e092505050565b80610db284600281886128df565b604051602001610dc493929190612909565b604051602081830303815290604052915050610c11565b8383604051639a6d49cd60e01b81526004016109d292919061295a565b60005b81811015610f015736838383818110610e1657610e1661296e565b9050602002810190610e289190612984565b9050610e5b610e3a602083018361255b565b602083013563ffffffff919091166000908152600160205260409020541490565b610e655750610ef9565b3063d045a0dc60c08301358360a0810135610e846101008301836129a5565b610e95610100890160e08a01612453565b610ea36101208a018a6129a5565b6040518963ffffffff1660e01b8152600401610ec59796959493929190612a00565b6000604051808303818588803b158015610ede57600080fd5b505af1158015610ef2573d6000803e3d6000fd5b5050505050505b600101610dfb565b50336001600160a01b0316638e9e70996040518163ffffffff1660e01b8152600401600060405180830381865afa158015610f40573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610f689190810190612a86565b604051638351eea760e01b81526004016109d291906120f0565b610f8a612059565b6040805180820190915260008082526020820152610fa985858561180c565b915091505b935093915050565b610fbe611403565b60405163ca5eb5e160e01b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063ca5eb5e190602401600060405180830381600087803b15801561102157600080fd5b505af1158015611035573d6000803e3d6000fd5b5050505050565b33301461105c5760405163029a949d60e31b815260040160405180910390fd5b610a4287878787878787610a33565b611073611403565b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527fd48d879cef83a1c0bdda516f27b13ddb1b3f8bbac1c9e1511bb2a659c242776090602001610be5565b6110c9611403565b6001600160a01b0381166110f357604051631e4fbdf760e01b8152600060048201526024016109d2565b6110fc81611689565b50565b6000602082018035906001908390611117908661255b565b63ffffffff1681526020810191909152604001600020541492915050565b6111428383836001611907565b505050565b600080611153856119dc565b915081905083811015610fae576040516371c4efed60e01b815260048101829052602481018590526044016109d2565b63ffffffff8116600090815260016020526040812054806108b45760405163f6ff4fb760e01b815263ffffffff841660048201526024016109d2565b60006111d16111ce8787611a13565b90565b905060006111fd826111eb6111e68a8a611a2b565b611a4e565b6111f860208d018d61255b565b611a83565b905060288611156112c457600061123a61121d60608c0160408d01612af3565b61122a60208d018d61255b565b846112358c8c611aab565b611af6565b604051633e5ac80960e11b81529091506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690637cb59012906112909086908d906000908790600401612b10565b600060405180830381600087803b1580156112aa57600080fd5b505af11580156112be573d6000803e3d6000fd5b50505050505b6001600160a01b038216887fefed6d3500546b29533b128a29e3a94d70788727f0507505ac12eaf2e578fd9c6112fd60208d018d61255b565b6040805163ffffffff9092168252602082018690520160405180910390a3505050505050505050565b6001600160a01b03838116600090815260066020908152604080832093861683529290522054600019811461139e578181101561138f57604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064016109d2565b61139e84848484036000611907565b50505050565b6001600160a01b0383166113ce57604051634b637e8f60e11b8152600060048201526024016109d2565b6001600160a01b0382166113f85760405163ec442f0560e01b8152600060048201526024016109d2565b611142838383611b28565b6000546001600160a01b03163314610c025760405163118cdaa760e01b81523360048201526024016109d2565b63ffffffff8216600081815260016020908152604091829020849055815192835282018390527f238399d427b947898edb290f5ff0f9109849b1c3ba196a42e35f00c50a54b98b910160405180910390a15050565b60608060006114e2856020013561149b86611c52565b6114a860a08901896129a5565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c7e92505050565b90935090506000816114f55760016114f8565b60025b905061151861150a602088018861255b565b826106fc60808a018a6129a5565b6004549093506001600160a01b0316801561159e5760405163043a78eb60e01b81526001600160a01b0382169063043a78eb9061155b9088908890600401612b41565b602060405180830381865afa158015611578573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061159c9190612b66565b505b5050509250929050565b60408051808201909152600080825260208201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ddc28c586040518060a001604052808863ffffffff16815260200161160b89611183565b8152602001878152602001868152602001851515815250306040518363ffffffff1660e01b8152600401611640929190612b83565b6040805180830381865afa15801561165c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116809190612c2c565b95945050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60005b81518110156117b05761170b8282815181106116fa576116fa61296e565b6020026020010151604001516117e0565b81818151811061171d5761171d61296e565b6020026020010151604001516003600084848151811061173f5761173f61296e565b60200260200101516000015163ffffffff1663ffffffff16815260200190815260200160002060008484815181106117795761177961296e565b60200260200101516020015161ffff1661ffff16815260200190815260200160002090816117a79190612c98565b506001016116dc565b507fbe4864a8e820971c0247f5992e2da559595f7bf076a21cb5928d443d2a13b67481604051610be59190612d57565b600281015161ffff8116600314610a835781604051639a6d49cd60e01b81526004016109d291906120f0565b611814612059565b604080518082019091526000808252602082015260008061184b33604089013560608a013561184660208c018c61255b565b611cf8565b9150915060008061185c8984611485565b909250905061188861187160208b018b61255b565b8383611882368d90038d018d612de2565b8b611d1e565b60408051808201909152858152602080820186905282519298509096503391907f85496b760a4b7f8d66384b9df21b381f5d1b1e79f229a47aaf4c232edc2fe59a906118d6908d018d61255b565b6040805163ffffffff909216825260208201899052810187905260600160405180910390a350505050935093915050565b6001600160a01b0384166119315760405163e602df0560e01b8152600060048201526024016109d2565b6001600160a01b03831661195b57604051634a1406b160e11b8152600060048201526024016109d2565b6001600160a01b038085166000908152600660209081526040808320938716835292905220829055801561139e57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516119ce91815260200190565b60405180910390a350505050565b60007f0000000000000000000000000000000000000000000000000000000000000000611a098184612e2a565b6108b49190612e4c565b6000611a2260208284866128df565b610a6a91612e63565b6000611a3b6028602084866128df565b611a4491612e81565b60c01c9392505050565b60006108b47f00000000000000000000000000000000000000000000000000000000000000006001600160401b038416612e4c565b60006001600160a01b038416611a995761dead93505b611aa38484611e29565b509092915050565b6060611aba82602881866128df565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929695505050505050565b606084848484604051602001611b0f9493929190612eb1565b6040516020818303038152906040529050949350505050565b6001600160a01b038316611b53578060076000828254611b489190612f00565b90915550611bc59050565b6001600160a01b03831660009081526005602052604090205481811015611ba65760405163391434e360e21b81526001600160a01b038516600482015260248101829052604481018390526064016109d2565b6001600160a01b03841660009081526005602052604090209082900390555b6001600160a01b038216611be157600780548290039055611c00565b6001600160a01b03821660009081526005602052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611c4591815260200190565b60405180910390a3505050565b60006108b47f000000000000000000000000000000000000000000000000000000000000000083612e2a565b8051606090151580611cc7578484604051602001611cb392919091825260c01b6001600160c01b031916602082015260280190565b604051602081830303815290604052611cee565b84843385604051602001611cde9493929190612f13565b6040516020818303038152906040525b9150935093915050565b600080611d06858585611147565b9092509050611d158683611e5f565b94509492505050565b611d26612059565b6000611d358460000151611e95565b602085015190915015611d4f57611d4f8460200151611ebd565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632637a450826040518060a001604052808b63ffffffff168152602001611d9f8c611183565b81526020018a815260200189815260200160008960200151111515815250866040518463ffffffff1660e01b8152600401611ddb929190612b83565b60806040518083038185885af1158015611df9573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611e1e9190612f56565b979650505050505050565b6001600160a01b038216611e535760405163ec442f0560e01b8152600060048201526024016109d2565b610a8360008383611b28565b6001600160a01b038216611e8957604051634b637e8f60e11b8152600060048201526024016109d2565b610a8382600083611b28565b6000813414611eb9576040516304fb820960e51b81523460048201526024016109d2565b5090565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e4fe1d946040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f419190612fa0565b90506001600160a01b038116611f6a576040516329b99a9560e11b815260040160405180910390fd5b6040805133602482018190527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0381811660448501526064808501889052855180860390910181526084909401909452602080840180516001600160e01b03166323b872dd60e01b1781528451610a8396881695899361139e93889360009283929091839182885af18061200b576040513d6000823e3d81fd5b50506000513d91508115612023578060011415612030565b6001600160a01b0384163b155b1561139e57604051635274afe760e01b81526001600160a01b03851660048201526024016109d2565b60405180606001604052806000801916815260200160006001600160401b0316815260200161209b604051806040016040528060008152602001600081525090565b905290565b60005b838110156120bb5781810151838201526020016120a3565b50506000910152565b600081518084526120dc8160208601602086016120a0565b601f01601f19169290920160200192915050565b602081526000610a6a60208301846120c4565b6001600160a01b03811681146110fc57600080fd5b6000806040838503121561212b57600080fd5b823561213681612103565b946020939093013593505050565b600060e0828403121561215657600080fd5b50919050565b60006020828403121561216e57600080fd5b81356001600160401b0381111561218457600080fd5b610c1184828501612144565b8351815260208085015190820152600060a08201604060a0604085015281865180845260c08601915060c08160051b8701019350602080890160005b8381101561220b5788870360bf190185528151805188528301518388018790526121f8878901826120c4565b97505093820193908201906001016121cc565b50508751606088015250505060208501516080850152509050610c11565b60006060828403121561215657600080fd5b60008083601f84011261224d57600080fd5b5081356001600160401b0381111561226457600080fd5b60208301915083602082850101111561227c57600080fd5b9250929050565b600080600080600080600060e0888a03121561229e57600080fd5b6122a88989612229565b96506060880135955060808801356001600160401b03808211156122cb57600080fd5b6122d78b838c0161223b565b909750955060a08a013591506122ec82612103565b90935060c0890135908082111561230257600080fd5b5061230f8a828b0161223b565b989b979a50959850939692959293505050565b60008060006060848603121561233757600080fd5b833561234281612103565b9250602084013561235281612103565b929592945050506040919091013590565b803563ffffffff8116811461237757600080fd5b919050565b6000806040838503121561238f57600080fd5b61213683612363565b80151581146110fc57600080fd5b600080604083850312156123b957600080fd5b82356001600160401b038111156123cf57600080fd5b6123db85828601612144565b92505060208301356123ec81612398565b809150509250929050565b8151815260208083015190820152604081016108b4565b803561ffff8116811461237757600080fd5b6000806040838503121561243357600080fd5b61243c83612363565b915061244a6020840161240e565b90509250929050565b60006020828403121561246557600080fd5b8135610a6a81612103565b60008060008060a0858703121561248657600080fd5b6124908686612229565b935060608501356001600160401b038111156124ab57600080fd5b6124b78782880161223b565b90945092505060808501356124cb81612103565b939692955090935050565b60008083601f8401126124e857600080fd5b5081356001600160401b038111156124ff57600080fd5b6020830191508360208260051b850101111561227c57600080fd5b6000806020838503121561252d57600080fd5b82356001600160401b0381111561254357600080fd5b61254f858286016124d6565b90969095509350505050565b60006020828403121561256d57600080fd5b610a6a82612363565b6000806000806060858703121561258c57600080fd5b61259585612363565b93506125a36020860161240e565b925060408501356001600160401b038111156125be57600080fd5b6125ca8782880161223b565b95989497509550505050565b600080600083850360808112156125ec57600080fd5b84356001600160401b0381111561260257600080fd5b61260e87828801612144565b9450506040601f198201121561262357600080fd5b50602084019150606084013561263881612103565b809150509250925092565b600060c082019050835182526001600160401b036020850151166020830152604084015161267e604084018280518252602090810151910152565b5082516080830152602083015160a0830152610a6a565b600080604083850312156126a857600080fd5b82356126b381612103565b915060208301356123ec81612103565b6000606082840312156126d557600080fd5b610a6a8383612229565b600181811c908216806126f357607f821691505b60208210810361215657634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b038111828210171561274b5761274b612713565b60405290565b604080519081016001600160401b038111828210171561274b5761274b612713565b604051601f8201601f191681016001600160401b038111828210171561279b5761279b612713565b604052919050565b60006001600160401b038211156127bc576127bc612713565b50601f01601f191660200190565b60006001600160401b03808411156127e4576127e4612713565b8360051b60206127f5818301612773565b86815291850191818101903684111561280d57600080fd5b865b848110156128d3578035868111156128275760008081fd5b8801606036829003121561283b5760008081fd5b612843612729565b61284c82612363565b815261285986830161240e565b86820152604080830135898111156128715760008081fd5b929092019136601f8401126128865760008081fd5b8235612899612894826127a3565b612773565b81815236898387010111156128ae5760008081fd5b818986018a83013760009181018901919091529082015284525091830191830161280f565b50979650505050505050565b600080858511156128ef57600080fd5b838611156128fc57600080fd5b5050820193919092039150565b6000845161291b8184602089016120a0565b8201838582376000930192835250909392505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b602081526000610c11602083018486612931565b634e487b7160e01b600052603260045260246000fd5b6000823561013e1983360301811261299b57600080fd5b9190910192915050565b6000808335601e198436030181126129bc57600080fd5b8301803591506001600160401b038211156129d657600080fd5b60200191503681900382131561227c57600080fd5b6001600160401b03811681146110fc57600080fd5b63ffffffff612a0e89612363565b1681526020880135602082015260006040890135612a2b816129eb565b6001600160401b03811660408401525087606083015260e06080830152612a5660e083018789612931565b6001600160a01b03861660a084015282810360c0840152612a78818587612931565b9a9950505050505050505050565b600060208284031215612a9857600080fd5b81516001600160401b03811115612aae57600080fd5b8201601f81018413612abf57600080fd5b8051612acd612894826127a3565b818152856020838501011115612ae257600080fd5b6116808260208301602086016120a0565b600060208284031215612b0557600080fd5b8135610a6a816129eb565b60018060a01b038516815283602082015261ffff83166040820152608060608201526000610ae460808301846120c4565b604081526000612b5460408301856120c4565b828103602084015261168081856120c4565b600060208284031215612b7857600080fd5b8151610a6a81612398565b6040815263ffffffff8351166040820152602083015160608201526000604084015160a06080840152612bb960e08401826120c4565b90506060850151603f198483030160a0850152612bd682826120c4565b60809690960151151560c08501525050506001600160a01b039190911660209091015290565b600060408284031215612c0e57600080fd5b612c16612751565b9050815181526020820151602082015292915050565b600060408284031215612c3e57600080fd5b610a6a8383612bfc565b601f821115611142576000816000526020600020601f850160051c81016020861015612c715750805b601f850160051c820191505b81811015612c9057828155600101612c7d565b505050505050565b81516001600160401b03811115612cb157612cb1612713565b612cc581612cbf84546126df565b84612c48565b602080601f831160018114612cfa5760008415612ce25750858301515b600019600386901b1c1916600185901b178555612c90565b600085815260208120601f198616915b82811015612d2957888601518255948401946001909101908401612d0a565b5085821015612d475787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b83811015612dd457888303603f190185528151805163ffffffff1684528781015161ffff16888501528601516060878501819052612dc0818601836120c4565b968901969450505090860190600101612d80565b509098975050505050505050565b600060408284031215612df457600080fd5b612dfc612751565b82358152602083013560208201528091505092915050565b634e487b7160e01b600052601160045260246000fd5b600082612e4757634e487b7160e01b600052601260045260246000fd5b500490565b80820281158282048414176108b4576108b4612e14565b803560208310156108b457600019602084900360031b1b1692915050565b6001600160c01b03198135818116916008851015612ea95780818660080360031b1b83161692505b505092915050565b6001600160401b0360c01b8560c01b16815263ffffffff60e01b8460e01b16600882015282600c82015260008251612ef081602c8501602087016120a0565b91909101602c0195945050505050565b808201808211156108b4576108b4612e14565b8481526001600160401b0360c01b8460c01b16602082015282602882015260008251612f468160488501602087016120a0565b9190910160480195945050505050565b600060808284031215612f6857600080fd5b612f70612729565b825181526020830151612f82816129eb565b6020820152612f948460408501612bfc565b60408201529392505050565b600060208284031215612fb257600080fd5b8151610a6a8161210356fea2646970667358221220e860170e4cf704ed2a543bd1d6fcca13cf2e7dbc304e2c03c3d5d8427d2e29de64736f6c63430008160033", - "sourceMap": "200:229:0:-:0;;;228:199;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;366:5;373:7;382:11;395:9;366:5;373:7;2780:2:35;823:11:25;836:9;823:11;836:9;823:11;836:9;414::0;-1:-1:-1;;;;;1273:26:30;;1269:95;;1322:31;;-1:-1:-1;;;1322:31:30;;1350:1;1322:31;;;2061:51:43;2034:18;;1322:31:30;;;;;;;1269:95;1373:32;1392:12;1373:18;:32::i;:::-;-1:-1:-1;;;;;;1047:42:13;;;;;1104:23;;1100:53;;1136:17;;-1:-1:-1;;;1136:17:13;;;;;;;;;;;1100:53;1163:8;;:31;;-1:-1:-1;;;1163:31:13;;-1:-1:-1;;;;;2079:32:43;;;1163:31:13;;;2061:51:43;1163:20:13;;;;;;2034:18:43;;1163:31:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;987:214;;965:83:12;;2757:16:26::1;:14;;;:16;;:::i;:::-;2740:33;;:14;:33;;;2736:68;;;2782:22;;-1:-1:-1::0;;;2782:22:26::1;;;;;;;;;;;2736:68;2845:33;4227:1:::0;2845:14;:33:::1;:::i;:::-;2838:41;::::0;:2:::1;:41;:::i;:::-;2814:65;::::0;-1:-1:-1;1667:5:35;;-1:-1:-1;1667:13:35;;-1:-1:-1;1675:5:35;1667;:13;:::i;:::-;-1:-1:-1;1690:7:35;:17;1700:7;1690;:17;:::i;:::-;;1601:113;;647:202:25;;;;228:199:0;;;;200:229;;2912:187:30;2985:16;3004:6;;-1:-1:-1;;;;;3020:17:30;;;-1:-1:-1;;;;;;3020:17:30;;;;;;3052:40;;3004:6;;;;;;;3052:40;;2985:16;3052:40;2975:124;2912:187;:::o;4148:87:26:-;4227:1;;4148:87::o;14:127:43:-;75:10;70:3;66:20;63:1;56:31;106:4;103:1;96:15;130:4;127:1;120:15;146:844;200:5;253:3;246:4;238:6;234:17;230:27;220:55;;271:1;268;261:12;220:55;294:13;;-1:-1:-1;;;;;356:10:43;;;353:36;;;369:18;;:::i;:::-;444:2;438:9;412:2;498:13;;-1:-1:-1;;494:22:43;;;518:2;490:31;486:40;474:53;;;542:18;;;562:22;;;539:46;536:72;;;588:18;;:::i;:::-;628:10;624:2;617:22;663:2;655:6;648:18;685:4;675:14;;732:3;725:4;720:2;712:6;708:15;704:26;701:35;698:55;;;749:1;746;739:12;698:55;771:1;762:10;;781:133;795:2;792:1;789:9;781:133;;;883:14;;;879:23;;873:30;852:14;;;848:23;;841:63;806:10;;;;781:133;;;958:1;951:4;946:2;938:6;934:15;930:26;923:37;978:6;969:15;;;;;;146:844;;;;:::o;995:177::-;1074:13;;-1:-1:-1;;;;;1116:31:43;;1106:42;;1096:70;;1162:1;1159;1152:12;1096:70;995:177;;;:::o;1177:733::-;1294:6;1302;1310;1318;1371:3;1359:9;1350:7;1346:23;1342:33;1339:53;;;1388:1;1385;1378:12;1339:53;1415:16;;-1:-1:-1;;;;;1480:14:43;;;1477:34;;;1507:1;1504;1497:12;1477:34;1530:61;1583:7;1574:6;1563:9;1559:22;1530:61;:::i;:::-;1520:71;;1637:2;1626:9;1622:18;1616:25;1600:41;;1666:2;1656:8;1653:16;1650:36;;;1682:1;1679;1672:12;1650:36;;1705:63;1760:7;1749:8;1738:9;1734:24;1705:63;:::i;:::-;1695:73;;;1787:49;1832:2;1821:9;1817:18;1787:49;:::i;:::-;1777:59;;1855:49;1900:2;1889:9;1885:18;1855:49;:::i;:::-;1845:59;;1177:733;;;;;;;:::o;2123:127::-;2184:10;2179:3;2175:20;2172:1;2165:31;2215:4;2212:1;2205:15;2239:4;2236:1;2229:15;2255:151;2345:4;2338:12;;;2324;;;2320:31;;2363:14;;2360:40;;;2380:18;;:::i;:::-;2255:151;;;;:::o;2411:416::-;2500:1;2537:5;2500:1;2551:270;2572:7;2562:8;2559:21;2551:270;;;2631:4;2627:1;2623:6;2619:17;2613:4;2610:27;2607:53;;;2640:18;;:::i;:::-;2690:7;2680:8;2676:22;2673:55;;;2710:16;;;;2673:55;2789:22;;;;2749:15;;;;2551:270;;;2555:3;2411:416;;;;;:::o;2832:806::-;2881:5;2911:8;2901:80;;-1:-1:-1;2952:1:43;2966:5;;2901:80;3000:4;2990:76;;-1:-1:-1;3037:1:43;3051:5;;2990:76;3082:4;3100:1;3095:59;;;;3168:1;3163:130;;;;3075:218;;3095:59;3125:1;3116:10;;3139:5;;;3163:130;3200:3;3190:8;3187:17;3184:43;;;3207:18;;:::i;:::-;-1:-1:-1;;3263:1:43;3249:16;;3278:5;;3075:218;;3377:2;3367:8;3364:16;3358:3;3352:4;3349:13;3345:36;3339:2;3329:8;3326:16;3321:2;3315:4;3312:12;3308:35;3305:77;3302:159;;;-1:-1:-1;3414:19:43;;;3446:5;;3302:159;3493:34;3518:8;3512:4;3493:34;:::i;:::-;3563:6;3559:1;3555:6;3551:19;3542:7;3539:32;3536:58;;;3574:18;;:::i;:::-;3612:20;;2832:806;-1:-1:-1;;;2832:806:43:o;3643:140::-;3701:5;3730:47;3771:4;3761:8;3757:19;3751:4;3730:47;:::i;:::-;3721:56;3643:140;-1:-1:-1;;;3643:140:43:o;3788:380::-;3867:1;3863:12;;;;3910;;;3931:61;;3985:4;3977:6;3973:17;3963:27;;3931:61;4038:2;4030:6;4027:14;4007:18;4004:38;4001:161;;4084:10;4079:3;4075:20;4072:1;4065:31;4119:4;4116:1;4109:15;4147:4;4144:1;4137:15;4001:161;;3788:380;;;:::o;4299:543::-;4401:2;4396:3;4393:11;4390:446;;;4437:1;4461:5;4458:1;4451:16;4505:4;4502:1;4492:18;4575:2;4563:10;4559:19;4556:1;4552:27;4546:4;4542:38;4611:4;4599:10;4596:20;4593:47;;;-1:-1:-1;4634:4:43;4593:47;4689:2;4684:3;4680:12;4677:1;4673:20;4667:4;4663:31;4653:41;;4744:82;4762:2;4755:5;4752:13;4744:82;;;4807:17;;;4788:1;4777:13;4744:82;;;4748:3;;;4390:446;4299:543;;;:::o;5018:1345::-;5138:10;;-1:-1:-1;;;;;5160:30:43;;5157:56;;;5193:18;;:::i;:::-;5222:97;5312:6;5272:38;5304:4;5298:11;5272:38;:::i;:::-;5266:4;5222:97;:::i;:::-;5374:4;;5431:2;5420:14;;5448:1;5443:663;;;;6150:1;6167:6;6164:89;;;-1:-1:-1;6219:19:43;;;6213:26;6164:89;-1:-1:-1;;4975:1:43;4971:11;;;4967:24;4963:29;4953:40;4999:1;4995:11;;;4950:57;6266:81;;5413:944;;5443:663;4246:1;4239:14;;;4283:4;4270:18;;-1:-1:-1;;5479:20:43;;;5597:236;5611:7;5608:1;5605:14;5597:236;;;5700:19;;;5694:26;5679:42;;5792:27;;;;5760:1;5748:14;;;;5627:19;;5597:236;;;5601:3;5861:6;5852:7;5849:19;5846:201;;;5922:19;;;5916:26;-1:-1:-1;;6005:1:43;6001:14;;;6017:3;5997:24;5993:37;5989:42;5974:58;5959:74;;5846:201;-1:-1:-1;;;;;6093:1:43;6077:14;;;6073:22;6060:36;;-1:-1:-1;5018:1345:43:o;:::-;200:229:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", - "linkReferences": {} - }, - "deployedBytecode": { - "object": "0x6080604052600436106102515760003560e01c80637d25a05e11610139578063bb0b6a53116100b6578063d045a0dc1161007a578063d045a0dc14610755578063d424388514610768578063dd62ed3e14610788578063f2fde38b146107ce578063fc0c546a14610461578063ff7bd03d146107ee57600080fd5b8063bb0b6a53146106b4578063bc70b354146106e1578063bd815db014610701578063c7c7f5b314610714578063ca5eb5e11461073557600080fd5b8063963efcaa116100fd578063963efcaa1461060c5780639f68b96414610640578063a9059cbb14610654578063b731ea0a14610674578063b98bd0701461069457600080fd5b80637d25a05e1461056a57806382413eac146105a5578063857749b0146105c55780638da5cb5b146105d957806395d89b41146105f757600080fd5b806323b872dd116101d25780635535d461116101965780635535d461146104745780635a0dfe4d146104945780635e280f11146104cb5780636fc1b31e146104ff57806370a082311461051f578063715018a61461055557600080fd5b806323b872dd146103d2578063313ce567146103f25780633400288b146104145780633b6f743b1461043457806352ae28791461046157600080fd5b8063134d4f2511610219578063134d4f251461032d578063156a0d0f1461035557806317442b701461037c57806318160ddd1461039e5780631f5e1334146103bd57600080fd5b806306fdde0314610256578063095ea7b3146102815780630d35b415146102b1578063111ecdad146102e057806313137d6514610318575b600080fd5b34801561026257600080fd5b5061026b61080e565b60405161027891906120f0565b60405180910390f35b34801561028d57600080fd5b506102a161029c366004612118565b6108a0565b6040519015158152602001610278565b3480156102bd57600080fd5b506102d16102cc36600461215c565b6108ba565b60405161027893929190612190565b3480156102ec57600080fd5b50600454610300906001600160a01b031681565b6040516001600160a01b039091168152602001610278565b61032b610326366004612283565b61098b565b005b34801561033957600080fd5b50610342600281565b60405161ffff9091168152602001610278565b34801561036157600080fd5b506040805162b9270b60e21b81526001602082015201610278565b34801561038857600080fd5b5060408051600181526002602082015201610278565b3480156103aa57600080fd5b506007545b604051908152602001610278565b3480156103c957600080fd5b50610342600181565b3480156103de57600080fd5b506102a16103ed366004612322565b610a4b565b3480156103fe57600080fd5b5060125b60405160ff9091168152602001610278565b34801561042057600080fd5b5061032b61042f36600461237c565b610a71565b34801561044057600080fd5b5061045461044f3660046123a6565b610a87565b60405161027891906123f7565b34801561046d57600080fd5b5030610300565b34801561048057600080fd5b5061026b61048f366004612420565b610aee565b3480156104a057600080fd5b506102a16104af36600461237c565b63ffffffff919091166000908152600160205260409020541490565b3480156104d757600080fd5b506103007f000000000000000000000000000000000000000000000000000000000000000081565b34801561050b57600080fd5b5061032b61051a366004612453565b610b93565b34801561052b57600080fd5b506103af61053a366004612453565b6001600160a01b031660009081526005602052604090205490565b34801561056157600080fd5b5061032b610bf0565b34801561057657600080fd5b5061058d61058536600461237c565b600092915050565b6040516001600160401b039091168152602001610278565b3480156105b157600080fd5b506102a16105c0366004612470565b610c04565b3480156105d157600080fd5b506006610402565b3480156105e557600080fd5b506000546001600160a01b0316610300565b34801561060357600080fd5b5061026b610c19565b34801561061857600080fd5b506103af7f000000000000000000000000000000000000000000000000000000000000000081565b34801561064c57600080fd5b5060006102a1565b34801561066057600080fd5b506102a161066f366004612118565b610c28565b34801561068057600080fd5b50600254610300906001600160a01b031681565b3480156106a057600080fd5b5061032b6106af36600461251a565b610c36565b3480156106c057600080fd5b506103af6106cf36600461255b565b60016020526000908152604090205481565b3480156106ed57600080fd5b5061026b6106fc366004612576565b610c50565b61032b61070f36600461251a565b610df8565b6107276107223660046125d6565b610f82565b604051610278929190612643565b34801561074157600080fd5b5061032b610750366004612453565b610fb6565b61032b610763366004612283565b61103c565b34801561077457600080fd5b5061032b610783366004612453565b61106b565b34801561079457600080fd5b506103af6107a3366004612695565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b3480156107da57600080fd5b5061032b6107e9366004612453565b6110c1565b3480156107fa57600080fd5b506102a16108093660046126c3565b6110ff565b60606008805461081d906126df565b80601f0160208091040260200160405190810160405280929190818152602001828054610849906126df565b80156108965780601f1061086b57610100808354040283529160200191610896565b820191906000526020600020905b81548152906001019060200180831161087957829003601f168201915b5050505050905090565b6000336108ae818585611135565b60019150505b92915050565b604080518082019091526000808252602082015260606108ed604051806040016040528060008152602001600081525090565b60408051808201825260008082526001600160401b03602080840182905284518381529081019094529195509182610948565b6040805180820190915260008152606060208201528152602001906001900390816109205790505b50935060008061096d604089013560608a013561096860208c018c61255b565b611147565b60408051808201909152918252602082015296989597505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633146109db576040516391ac5e4f60e01b81523360048201526024015b60405180910390fd5b602087018035906109f5906109f0908a61255b565b611183565b14610a3357610a07602088018861255b565b60405163309afaf360e21b815263ffffffff9091166004820152602088013560248201526044016109d2565b610a42878787878787876111bf565b50505050505050565b600033610a59858285611326565b610a648585856113a4565b60019150505b9392505050565b610a79611403565b610a838282611430565b5050565b60408051808201909152600080825260208201526000610ab760408501356060860135610968602088018861255b565b915050600080610ac78684611485565b9092509050610ae4610adc602088018861255b565b8383886115a8565b9695505050505050565b600360209081526000928352604080842090915290825290208054610b12906126df565b80601f0160208091040260200160405190810160405280929190818152602001828054610b3e906126df565b8015610b8b5780601f10610b6057610100808354040283529160200191610b8b565b820191906000526020600020905b815481529060010190602001808311610b6e57829003601f168201915b505050505081565b610b9b611403565b600480546001600160a01b0319166001600160a01b0383169081179091556040519081527ff0be4f1e87349231d80c36b33f9e8639658eeaf474014dee15a3e6a4d4414197906020015b60405180910390a150565b610bf8611403565b610c026000611689565b565b6001600160a01b03811630145b949350505050565b60606009805461081d906126df565b6000336108ae8185856113a4565b610c3e611403565b610a83610c4b82846127ca565b6116d9565b63ffffffff8416600090815260036020908152604080832061ffff87168452909152812080546060929190610c84906126df565b80601f0160208091040260200160405190810160405280929190818152602001828054610cb0906126df565b8015610cfd5780601f10610cd257610100808354040283529160200191610cfd565b820191906000526020600020905b815481529060010190602001808311610ce057829003601f168201915b505050505090508051600003610d4d5783838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929450610c119350505050565b6000839003610d5d579050610c11565b60028310610ddb57610da484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506117e092505050565b80610db284600281886128df565b604051602001610dc493929190612909565b604051602081830303815290604052915050610c11565b8383604051639a6d49cd60e01b81526004016109d292919061295a565b60005b81811015610f015736838383818110610e1657610e1661296e565b9050602002810190610e289190612984565b9050610e5b610e3a602083018361255b565b602083013563ffffffff919091166000908152600160205260409020541490565b610e655750610ef9565b3063d045a0dc60c08301358360a0810135610e846101008301836129a5565b610e95610100890160e08a01612453565b610ea36101208a018a6129a5565b6040518963ffffffff1660e01b8152600401610ec59796959493929190612a00565b6000604051808303818588803b158015610ede57600080fd5b505af1158015610ef2573d6000803e3d6000fd5b5050505050505b600101610dfb565b50336001600160a01b0316638e9e70996040518163ffffffff1660e01b8152600401600060405180830381865afa158015610f40573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610f689190810190612a86565b604051638351eea760e01b81526004016109d291906120f0565b610f8a612059565b6040805180820190915260008082526020820152610fa985858561180c565b915091505b935093915050565b610fbe611403565b60405163ca5eb5e160e01b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063ca5eb5e190602401600060405180830381600087803b15801561102157600080fd5b505af1158015611035573d6000803e3d6000fd5b5050505050565b33301461105c5760405163029a949d60e31b815260040160405180910390fd5b610a4287878787878787610a33565b611073611403565b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527fd48d879cef83a1c0bdda516f27b13ddb1b3f8bbac1c9e1511bb2a659c242776090602001610be5565b6110c9611403565b6001600160a01b0381166110f357604051631e4fbdf760e01b8152600060048201526024016109d2565b6110fc81611689565b50565b6000602082018035906001908390611117908661255b565b63ffffffff1681526020810191909152604001600020541492915050565b6111428383836001611907565b505050565b600080611153856119dc565b915081905083811015610fae576040516371c4efed60e01b815260048101829052602481018590526044016109d2565b63ffffffff8116600090815260016020526040812054806108b45760405163f6ff4fb760e01b815263ffffffff841660048201526024016109d2565b60006111d16111ce8787611a13565b90565b905060006111fd826111eb6111e68a8a611a2b565b611a4e565b6111f860208d018d61255b565b611a83565b905060288611156112c457600061123a61121d60608c0160408d01612af3565b61122a60208d018d61255b565b846112358c8c611aab565b611af6565b604051633e5ac80960e11b81529091506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690637cb59012906112909086908d906000908790600401612b10565b600060405180830381600087803b1580156112aa57600080fd5b505af11580156112be573d6000803e3d6000fd5b50505050505b6001600160a01b038216887fefed6d3500546b29533b128a29e3a94d70788727f0507505ac12eaf2e578fd9c6112fd60208d018d61255b565b6040805163ffffffff9092168252602082018690520160405180910390a3505050505050505050565b6001600160a01b03838116600090815260066020908152604080832093861683529290522054600019811461139e578181101561138f57604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064016109d2565b61139e84848484036000611907565b50505050565b6001600160a01b0383166113ce57604051634b637e8f60e11b8152600060048201526024016109d2565b6001600160a01b0382166113f85760405163ec442f0560e01b8152600060048201526024016109d2565b611142838383611b28565b6000546001600160a01b03163314610c025760405163118cdaa760e01b81523360048201526024016109d2565b63ffffffff8216600081815260016020908152604091829020849055815192835282018390527f238399d427b947898edb290f5ff0f9109849b1c3ba196a42e35f00c50a54b98b910160405180910390a15050565b60608060006114e2856020013561149b86611c52565b6114a860a08901896129a5565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c7e92505050565b90935090506000816114f55760016114f8565b60025b905061151861150a602088018861255b565b826106fc60808a018a6129a5565b6004549093506001600160a01b0316801561159e5760405163043a78eb60e01b81526001600160a01b0382169063043a78eb9061155b9088908890600401612b41565b602060405180830381865afa158015611578573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061159c9190612b66565b505b5050509250929050565b60408051808201909152600080825260208201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ddc28c586040518060a001604052808863ffffffff16815260200161160b89611183565b8152602001878152602001868152602001851515815250306040518363ffffffff1660e01b8152600401611640929190612b83565b6040805180830381865afa15801561165c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116809190612c2c565b95945050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60005b81518110156117b05761170b8282815181106116fa576116fa61296e565b6020026020010151604001516117e0565b81818151811061171d5761171d61296e565b6020026020010151604001516003600084848151811061173f5761173f61296e565b60200260200101516000015163ffffffff1663ffffffff16815260200190815260200160002060008484815181106117795761177961296e565b60200260200101516020015161ffff1661ffff16815260200190815260200160002090816117a79190612c98565b506001016116dc565b507fbe4864a8e820971c0247f5992e2da559595f7bf076a21cb5928d443d2a13b67481604051610be59190612d57565b600281015161ffff8116600314610a835781604051639a6d49cd60e01b81526004016109d291906120f0565b611814612059565b604080518082019091526000808252602082015260008061184b33604089013560608a013561184660208c018c61255b565b611cf8565b9150915060008061185c8984611485565b909250905061188861187160208b018b61255b565b8383611882368d90038d018d612de2565b8b611d1e565b60408051808201909152858152602080820186905282519298509096503391907f85496b760a4b7f8d66384b9df21b381f5d1b1e79f229a47aaf4c232edc2fe59a906118d6908d018d61255b565b6040805163ffffffff909216825260208201899052810187905260600160405180910390a350505050935093915050565b6001600160a01b0384166119315760405163e602df0560e01b8152600060048201526024016109d2565b6001600160a01b03831661195b57604051634a1406b160e11b8152600060048201526024016109d2565b6001600160a01b038085166000908152600660209081526040808320938716835292905220829055801561139e57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516119ce91815260200190565b60405180910390a350505050565b60007f0000000000000000000000000000000000000000000000000000000000000000611a098184612e2a565b6108b49190612e4c565b6000611a2260208284866128df565b610a6a91612e63565b6000611a3b6028602084866128df565b611a4491612e81565b60c01c9392505050565b60006108b47f00000000000000000000000000000000000000000000000000000000000000006001600160401b038416612e4c565b60006001600160a01b038416611a995761dead93505b611aa38484611e29565b509092915050565b6060611aba82602881866128df565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929695505050505050565b606084848484604051602001611b0f9493929190612eb1565b6040516020818303038152906040529050949350505050565b6001600160a01b038316611b53578060076000828254611b489190612f00565b90915550611bc59050565b6001600160a01b03831660009081526005602052604090205481811015611ba65760405163391434e360e21b81526001600160a01b038516600482015260248101829052604481018390526064016109d2565b6001600160a01b03841660009081526005602052604090209082900390555b6001600160a01b038216611be157600780548290039055611c00565b6001600160a01b03821660009081526005602052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611c4591815260200190565b60405180910390a3505050565b60006108b47f000000000000000000000000000000000000000000000000000000000000000083612e2a565b8051606090151580611cc7578484604051602001611cb392919091825260c01b6001600160c01b031916602082015260280190565b604051602081830303815290604052611cee565b84843385604051602001611cde9493929190612f13565b6040516020818303038152906040525b9150935093915050565b600080611d06858585611147565b9092509050611d158683611e5f565b94509492505050565b611d26612059565b6000611d358460000151611e95565b602085015190915015611d4f57611d4f8460200151611ebd565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632637a450826040518060a001604052808b63ffffffff168152602001611d9f8c611183565b81526020018a815260200189815260200160008960200151111515815250866040518463ffffffff1660e01b8152600401611ddb929190612b83565b60806040518083038185885af1158015611df9573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611e1e9190612f56565b979650505050505050565b6001600160a01b038216611e535760405163ec442f0560e01b8152600060048201526024016109d2565b610a8360008383611b28565b6001600160a01b038216611e8957604051634b637e8f60e11b8152600060048201526024016109d2565b610a8382600083611b28565b6000813414611eb9576040516304fb820960e51b81523460048201526024016109d2565b5090565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e4fe1d946040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f419190612fa0565b90506001600160a01b038116611f6a576040516329b99a9560e11b815260040160405180910390fd5b6040805133602482018190527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0381811660448501526064808501889052855180860390910181526084909401909452602080840180516001600160e01b03166323b872dd60e01b1781528451610a8396881695899361139e93889360009283929091839182885af18061200b576040513d6000823e3d81fd5b50506000513d91508115612023578060011415612030565b6001600160a01b0384163b155b1561139e57604051635274afe760e01b81526001600160a01b03851660048201526024016109d2565b60405180606001604052806000801916815260200160006001600160401b0316815260200161209b604051806040016040528060008152602001600081525090565b905290565b60005b838110156120bb5781810151838201526020016120a3565b50506000910152565b600081518084526120dc8160208601602086016120a0565b601f01601f19169290920160200192915050565b602081526000610a6a60208301846120c4565b6001600160a01b03811681146110fc57600080fd5b6000806040838503121561212b57600080fd5b823561213681612103565b946020939093013593505050565b600060e0828403121561215657600080fd5b50919050565b60006020828403121561216e57600080fd5b81356001600160401b0381111561218457600080fd5b610c1184828501612144565b8351815260208085015190820152600060a08201604060a0604085015281865180845260c08601915060c08160051b8701019350602080890160005b8381101561220b5788870360bf190185528151805188528301518388018790526121f8878901826120c4565b97505093820193908201906001016121cc565b50508751606088015250505060208501516080850152509050610c11565b60006060828403121561215657600080fd5b60008083601f84011261224d57600080fd5b5081356001600160401b0381111561226457600080fd5b60208301915083602082850101111561227c57600080fd5b9250929050565b600080600080600080600060e0888a03121561229e57600080fd5b6122a88989612229565b96506060880135955060808801356001600160401b03808211156122cb57600080fd5b6122d78b838c0161223b565b909750955060a08a013591506122ec82612103565b90935060c0890135908082111561230257600080fd5b5061230f8a828b0161223b565b989b979a50959850939692959293505050565b60008060006060848603121561233757600080fd5b833561234281612103565b9250602084013561235281612103565b929592945050506040919091013590565b803563ffffffff8116811461237757600080fd5b919050565b6000806040838503121561238f57600080fd5b61213683612363565b80151581146110fc57600080fd5b600080604083850312156123b957600080fd5b82356001600160401b038111156123cf57600080fd5b6123db85828601612144565b92505060208301356123ec81612398565b809150509250929050565b8151815260208083015190820152604081016108b4565b803561ffff8116811461237757600080fd5b6000806040838503121561243357600080fd5b61243c83612363565b915061244a6020840161240e565b90509250929050565b60006020828403121561246557600080fd5b8135610a6a81612103565b60008060008060a0858703121561248657600080fd5b6124908686612229565b935060608501356001600160401b038111156124ab57600080fd5b6124b78782880161223b565b90945092505060808501356124cb81612103565b939692955090935050565b60008083601f8401126124e857600080fd5b5081356001600160401b038111156124ff57600080fd5b6020830191508360208260051b850101111561227c57600080fd5b6000806020838503121561252d57600080fd5b82356001600160401b0381111561254357600080fd5b61254f858286016124d6565b90969095509350505050565b60006020828403121561256d57600080fd5b610a6a82612363565b6000806000806060858703121561258c57600080fd5b61259585612363565b93506125a36020860161240e565b925060408501356001600160401b038111156125be57600080fd5b6125ca8782880161223b565b95989497509550505050565b600080600083850360808112156125ec57600080fd5b84356001600160401b0381111561260257600080fd5b61260e87828801612144565b9450506040601f198201121561262357600080fd5b50602084019150606084013561263881612103565b809150509250925092565b600060c082019050835182526001600160401b036020850151166020830152604084015161267e604084018280518252602090810151910152565b5082516080830152602083015160a0830152610a6a565b600080604083850312156126a857600080fd5b82356126b381612103565b915060208301356123ec81612103565b6000606082840312156126d557600080fd5b610a6a8383612229565b600181811c908216806126f357607f821691505b60208210810361215657634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b038111828210171561274b5761274b612713565b60405290565b604080519081016001600160401b038111828210171561274b5761274b612713565b604051601f8201601f191681016001600160401b038111828210171561279b5761279b612713565b604052919050565b60006001600160401b038211156127bc576127bc612713565b50601f01601f191660200190565b60006001600160401b03808411156127e4576127e4612713565b8360051b60206127f5818301612773565b86815291850191818101903684111561280d57600080fd5b865b848110156128d3578035868111156128275760008081fd5b8801606036829003121561283b5760008081fd5b612843612729565b61284c82612363565b815261285986830161240e565b86820152604080830135898111156128715760008081fd5b929092019136601f8401126128865760008081fd5b8235612899612894826127a3565b612773565b81815236898387010111156128ae5760008081fd5b818986018a83013760009181018901919091529082015284525091830191830161280f565b50979650505050505050565b600080858511156128ef57600080fd5b838611156128fc57600080fd5b5050820193919092039150565b6000845161291b8184602089016120a0565b8201838582376000930192835250909392505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b602081526000610c11602083018486612931565b634e487b7160e01b600052603260045260246000fd5b6000823561013e1983360301811261299b57600080fd5b9190910192915050565b6000808335601e198436030181126129bc57600080fd5b8301803591506001600160401b038211156129d657600080fd5b60200191503681900382131561227c57600080fd5b6001600160401b03811681146110fc57600080fd5b63ffffffff612a0e89612363565b1681526020880135602082015260006040890135612a2b816129eb565b6001600160401b03811660408401525087606083015260e06080830152612a5660e083018789612931565b6001600160a01b03861660a084015282810360c0840152612a78818587612931565b9a9950505050505050505050565b600060208284031215612a9857600080fd5b81516001600160401b03811115612aae57600080fd5b8201601f81018413612abf57600080fd5b8051612acd612894826127a3565b818152856020838501011115612ae257600080fd5b6116808260208301602086016120a0565b600060208284031215612b0557600080fd5b8135610a6a816129eb565b60018060a01b038516815283602082015261ffff83166040820152608060608201526000610ae460808301846120c4565b604081526000612b5460408301856120c4565b828103602084015261168081856120c4565b600060208284031215612b7857600080fd5b8151610a6a81612398565b6040815263ffffffff8351166040820152602083015160608201526000604084015160a06080840152612bb960e08401826120c4565b90506060850151603f198483030160a0850152612bd682826120c4565b60809690960151151560c08501525050506001600160a01b039190911660209091015290565b600060408284031215612c0e57600080fd5b612c16612751565b9050815181526020820151602082015292915050565b600060408284031215612c3e57600080fd5b610a6a8383612bfc565b601f821115611142576000816000526020600020601f850160051c81016020861015612c715750805b601f850160051c820191505b81811015612c9057828155600101612c7d565b505050505050565b81516001600160401b03811115612cb157612cb1612713565b612cc581612cbf84546126df565b84612c48565b602080601f831160018114612cfa5760008415612ce25750858301515b600019600386901b1c1916600185901b178555612c90565b600085815260208120601f198616915b82811015612d2957888601518255948401946001909101908401612d0a565b5085821015612d475787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b83811015612dd457888303603f190185528151805163ffffffff1684528781015161ffff16888501528601516060878501819052612dc0818601836120c4565b968901969450505090860190600101612d80565b509098975050505050505050565b600060408284031215612df457600080fd5b612dfc612751565b82358152602083013560208201528091505092915050565b634e487b7160e01b600052601160045260246000fd5b600082612e4757634e487b7160e01b600052601260045260246000fd5b500490565b80820281158282048414176108b4576108b4612e14565b803560208310156108b457600019602084900360031b1b1692915050565b6001600160c01b03198135818116916008851015612ea95780818660080360031b1b83161692505b505092915050565b6001600160401b0360c01b8560c01b16815263ffffffff60e01b8460e01b16600882015282600c82015260008251612ef081602c8501602087016120a0565b91909101602c0195945050505050565b808201808211156108b4576108b4612e14565b8481526001600160401b0360c01b8460c01b16602082015282602882015260008251612f468160488501602087016120a0565b9190910160480195945050505050565b600060808284031215612f6857600080fd5b612f70612729565b825181526020830151612f82816129eb565b6020820152612f948460408501612bfc565b60408201529392505050565b600060208284031215612fb257600080fd5b8151610a6a8161210356fea2646970667358221220e860170e4cf704ed2a543bd1d6fcca13cf2e7dbc304e2c03c3d5d8427d2e29de64736f6c63430008160033", - "sourceMap": "200:229:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1779:89:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3998:186;;;;;;;;;;-1:-1:-1;3998:186:35;;;;;:::i;:::-;;:::i;:::-;;;1391:14:43;;1384:22;1366:41;;1354:2;1339:18;3998:186:35;1226:187:43;5102:1258:26;;;;;;;;;;-1:-1:-1;5102:1258:26;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;2256:27::-;;;;;;;;;;-1:-1:-1;2256:27:26;;;;-1:-1:-1;;;;;2256:27:26;;;;;;-1:-1:-1;;;;;3605:32:43;;;3587:51;;3575:2;3560:18;2256:27:26;3441:203:43;4368:708:14;;;;;;:::i;:::-;;:::i;:::-;;2130:40:26;;;;;;;;;;;;2169:1;2130:40;;;;;5386:6:43;5374:19;;;5356:38;;5344:2;5329:18;2130:40:26;5212:188:43;3401:140:26;;;;;;;;;;-1:-1:-1;3401:140:26;;;-1:-1:-1;;;5575:52:43;;3532:1:26;5658:2:43;5643:18;;5636:59;5548:18;3401:140:26;5405:296:43;1287:235:12;;;;;;;;;;-1:-1:-1;1287:235:12;;;843:1:15;5913:34:43;;678:1:14;5978:2:43;5963:18;;5956:43;5849:18;1287:235:12;5706:299:43;2849:97:35;;;;;;;;;;-1:-1:-1;2927:12:35;;2849:97;;;6156:25:43;;;6144:2;6129:18;2849:97:35;6010:177:43;2093:31:26;;;;;;;;;;;;2123:1;2093:31;;4776:244:35;;;;;;;;;;-1:-1:-1;4776:244:35;;;;;:::i;:::-;;:::i;2707:82::-;;;;;;;;;;-1:-1:-1;2780:2:35;2707:82;;;6825:4:43;6813:17;;;6795:36;;6783:2;6768:18;2707:82:35;6653:184:43;1724:108:13;;;;;;;;;;-1:-1:-1;1724:108:13;;;;;:::i;:::-;;:::i;6811:774:26:-;;;;;;;;;;-1:-1:-1;6811:774:26;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;875:93:21:-;;;;;;;;;;-1:-1:-1;956:4:21;875:93;;538::20;;;;;;;;;;-1:-1:-1;538:93:20;;;;;:::i;:::-;;:::i;16059:132:26:-;;;;;;;;;;-1:-1:-1;16059:132:26;;;;;:::i;:::-;16164:11;;;;;16141:4;16164:11;;;:5;:11;;;;;;:20;;16059:132;446:46:13;;;;;;;;;;;;;;;4583:163:26;;;;;;;;;;-1:-1:-1;4583:163:26;;;;;:::i;:::-;;:::i;3004:116:35:-;;;;;;;;;;-1:-1:-1;3004:116:35;;;;;:::i;:::-;-1:-1:-1;;;;;3095:18:35;3069:7;3095:18;;;:9;:18;;;;;;;3004:116;2293:101:30;;;;;;;;;;;;;:::i;3507:128:14:-;;;;;;;;;;-1:-1:-1;3507:128:14;;;;;:::i;:::-;3596:12;3507:128;;;;;;;;-1:-1:-1;;;;;9442:31:43;;;9424:50;;9412:2;9397:18;3507:128:14;9280:200:43;2013:216:14;;;;;;;;;;-1:-1:-1;2013:216:14;;;;;:::i;:::-;;:::i;4148:87:26:-;;;;;;;;;;-1:-1:-1;4227:1:26;4148:87;;1638:85:30;;;;;;;;;;-1:-1:-1;1684:7:30;1710:6;-1:-1:-1;;;;;1710:6:30;1638:85;;1981:93:35;;;;;;;;;;;;;:::i;1787:46:26:-;;;;;;;;;;;;;;;1460:94:25;;;;;;;;;;-1:-1:-1;1519:4:25;1460:94;;3315:178:35;;;;;;;;;;-1:-1:-1;3315:178:35;;;;;:::i;:::-;;:::i;559:23:21:-;;;;;;;;;;-1:-1:-1;559:23:21;;;;-1:-1:-1;;;;;559:23:21;;;1391:156:20;;;;;;;;;;-1:-1:-1;1391:156:20;;;;;:::i;:::-;;:::i;569:48:13:-;;;;;;;;;;-1:-1:-1;569:48:13;;;;;:::i;:::-;;;;;;;;;;;;;;3510:981:20;;;;;;;;;;-1:-1:-1;3510:981:20;;;;;:::i;:::-;;:::i;1698:1333:21:-;;;;;;:::i;:::-;;:::i;8273:290:26:-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;3252:105:13:-;;;;;;;;;;-1:-1:-1;3252:105:13;;;;;:::i;:::-;;:::i;3679:409:21:-;;;;;;:::i;:::-;;:::i;1100:139::-;;;;;;;;;;-1:-1:-1;1100:139:21;;;;;:::i;:::-;;:::i;3551:140:35:-;;;;;;;;;;-1:-1:-1;3551:140:35;;;;;:::i;:::-;-1:-1:-1;;;;;3657:18:35;;;3631:7;3657:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;3551:140;2543:215:30;;;;;;;;;;-1:-1:-1;2543:215:30;;;;;:::i;:::-;;:::i;2771:149:14:-;;;;;;;;;;-1:-1:-1;2771:149:14;;;;;:::i;:::-;;:::i;1779:89:35:-;1824:13;1856:5;1849:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1779:89;:::o;3998:186::-;4071:4;735:10:40;4125:31:35;735:10:40;4141:7:35;4150:5;4125:8;:31::i;:::-;4173:4;4166:11;;;3998:186;;;;;:::o;5102:1258:26:-;-1:-1:-1;;;;;;;;;;;;;;;;;5254:35:26;5291:28;-1:-1:-1;;;;;;;;;;;;;;;;;;;5291:28:26;5509:34;;;;;;;;-1:-1:-1;5509:34:26;;;-1:-1:-1;;;;;5509:34:26;;;;;;;5660:21;;;;;;;;;;;5509:34;;-1:-1:-1;;;5660:21:26;;;-1:-1:-1;;;;;;;;;;;;;;;;;5660:21:26;;;;;;;;;;;;;;;-1:-1:-1;5644:37:26;-1:-1:-1;6118:20:26;;6168:120;6192:19;;;;6225:22;;;;6261:17;;;;6192:10;6261:17;:::i;:::-;6168:10;:120::i;:::-;6311:42;;;;;;;;;;;;;;;;5102:1258;;;;-1:-1:-1;;;;;;5102:1258:26:o;4368:708:14:-;4681:8;-1:-1:-1;;;;;4673:31:14;4694:10;4673:31;4669:68;;4713:24;;-1:-1:-1;;;4713:24:14;;4726:10;4713:24;;;3587:51:43;3560:18;;4713:24:14;;;;;;;;4669:68;4873:14;;;;;;4837:32;;4854:14;;4873:7;4854:14;:::i;:::-;4837:16;:32::i;:::-;:50;4833:103;;4905:14;;;;:7;:14;:::i;:::-;4896:40;;-1:-1:-1;;;4896:40:14;;15127:10:43;15115:23;;;4896:40:14;;;15097:42:43;4921:14:14;;;;15155:18:43;;;15148:34;15070:18;;4896:40:14;14925:263:43;4833:103:14;5010:59;5021:7;5030:5;5037:8;;5047:9;5058:10;;5010;:59::i;:::-;4368:708;;;;;;;:::o;4776:244:35:-;4863:4;735:10:40;4919:37:35;4935:4;735:10:40;4950:5:35;4919:15;:37::i;:::-;4966:26;4976:4;4982:2;4986:5;4966:9;:26::i;:::-;5009:4;5002:11;;;4776:244;;;;;;:::o;1724:108:13:-;1531:13:30;:11;:13::i;:::-;1804:21:13::1;1813:4;1819:5;1804:8;:21::i;:::-;1724:108:::0;;:::o;6811:774:26:-;-1:-1:-1;;;;;;;;;;;;;;;;;7145:24:26;7173:74;7184:19;;;;7205:22;;;;7229:17;;;;7184:10;7229:17;:::i;7173:74::-;7142:105;;;7336:20;7358;7382:49;7402:10;7414:16;7382:19;:49::i;:::-;7335:96;;-1:-1:-1;7335:96:26;-1:-1:-1;7520:58:26;7527:17;;;;:10;:17;:::i;:::-;7546:7;7555;7564:13;7520:6;:58::i;:::-;7513:65;6811:774;-1:-1:-1;;;;;;6811:774:26:o;538:93:20:-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;4583:163:26:-;1531:13:30;:11;:13::i;:::-;4666:12:26::1;:28:::0;;-1:-1:-1;;;;;;4666:28:26::1;-1:-1:-1::0;;;;;4666:28:26;::::1;::::0;;::::1;::::0;;;4709:30:::1;::::0;3587:51:43;;;4709:30:26::1;::::0;3575:2:43;3560:18;4709:30:26::1;;;;;;;;4583:163:::0;:::o;2293:101:30:-;1531:13;:11;:13::i;:::-;2357:30:::1;2384:1;2357:18;:30::i;:::-;2293:101::o:0;2013:216:14:-;-1:-1:-1;;;;;2198:24:14;;2217:4;2198:24;2013:216;;;;;;;:::o;1981:93:35:-;2028:13;2060:7;2053:14;;;;;:::i;3315:178::-;3384:4;735:10:40;3438:27:35;735:10:40;3455:2:35;3459:5;3438:9;:27::i;1391:156:20:-;1531:13:30;:11;:13::i;:::-;1503:37:20::1;;1523:16:::0;;1503:37:::1;:::i;:::-;:19;:37::i;3510:981::-:0;3701:21;;;3677;3701;;;:15;:21;;;;;;;;:31;;;;;;;;;;3677:55;;3653:12;;3677:21;3701:31;3677:55;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3861:8;:15;3880:1;3861:20;3857:46;;3890:13;;3883:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3883:20:20;;-1:-1:-1;3883:20:20;;-1:-1:-1;;;;3883:20:20;3857:46;3988:1;3964:25;;;3960:46;;3998:8;-1:-1:-1;3991:15:20;;3960:46;4153:1;4129:25;;4125:267;;4170:34;4190:13;;4170:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4170:19:20;;-1:-1:-1;;;4170:34:20:i;:::-;4353:8;4363:17;:13;4377:1;4363:13;;:17;:::i;:::-;4340:41;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;4333:48;;;;;4125:267;4470:13;;4455:29;;-1:-1:-1;;;4455:29:20;;;;;;;;;:::i;1698:1333:21:-;1799:9;1794:1037;1814:19;;;1794:1037;;;1854:29;1886:8;;1895:1;1886:11;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;1854:43;-1:-1:-1;1980:50:21;1987:20;;;;1854:43;1987:20;:::i;:::-;2009;;;;16164:11:26;;;;;16141:4;16164:11;;;:5;:11;;;;;;:20;;16059:132;1980:50:21;1975:65;;2032:8;;;1975:65;2602:4;:22;2633:12;;;;:6;2696:11;;;;2725:14;;;;2633:6;2725:14;:::i;:::-;2757:15;;;;;;;;:::i;:::-;2790:16;;;;:6;:16;:::i;:::-;2602:218;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1840:991;1794:1037;1835:3;;1794:1037;;;;2988:10;-1:-1:-1;;;;;2978:43:21;;:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2978:45:21;;;;;;;;;;;;:::i;:::-;2961:63;;-1:-1:-1;;;2961:63:21;;;;;;;;:::i;8273:290:26:-;8434:34;;:::i;:::-;-1:-1:-1;;;;;;;;;;;;;;;;;8517:39:26;8523:10;8535:4;8541:14;8517:5;:39::i;:::-;8510:46;;;;8273:290;;;;;;;:::o;3252:105:13:-;1531:13:30;:11;:13::i;:::-;3319:31:13::1;::::0;-1:-1:-1;;;3319:31:13;;-1:-1:-1;;;;;3605:32:43;;;3319:31:13::1;::::0;::::1;3587:51:43::0;3319:8:13::1;:20;::::0;::::1;::::0;3560:18:43;;3319:31:13::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;3252:105:::0;:::o;3679:409:21:-;3958:10;3980:4;3958:27;3954:50;;3994:10;;-1:-1:-1;;;3994:10:21;;;;;;;;;;;3954:50;4014:67;4033:7;4042:5;4049:8;;4059:9;4070:10;;4014:18;:67::i;1100:139::-;1531:13:30;:11;:13::i;:::-;1175:8:21::1;:20:::0;;-1:-1:-1;;;;;;1175:20:21::1;-1:-1:-1::0;;;;;1175:20:21;::::1;::::0;;::::1;::::0;;;1210:22:::1;::::0;3587:51:43;;;1210:22:21::1;::::0;3575:2:43;3560:18;1210:22:21::1;3441:203:43::0;2543:215:30;1531:13;:11;:13::i;:::-;-1:-1:-1;;;;;2627:22:30;::::1;2623:91;;2672:31;::::0;-1:-1:-1;;;2672:31:30;;2700:1:::1;2672:31;::::0;::::1;3587:51:43::0;3560:18;;2672:31:30::1;3441:203:43::0;2623:91:30::1;2723:28;2742:8;2723:18;:28::i;:::-;2543:215:::0;:::o;2771:149:14:-;2853:4;2900:13;;;;;;2876:5;;2853:4;;2882:13;;2900:6;2882:13;:::i;:::-;2876:20;;;;;;;;;;;;;-1:-1:-1;2876:20:14;;:37;;2771:149;-1:-1:-1;;2771:149:14:o;8726:128:35:-;8810:37;8819:5;8826:7;8835:5;8842:4;8810:8;:37::i;:::-;8726:128;;;:::o;18076:668:26:-;18218:20;18240:24;18414:22;18426:9;18414:11;:22::i;:::-;18399:37;;18562:12;18543:31;;18644:12;18625:16;:31;18621:117;;;18679:48;;-1:-1:-1;;;18679:48:26;;;;;22592:25:43;;;22633:18;;;22626:34;;;22565:18;;18679:48:26;22418:248:43;2718:196:13;2822:11;;;2788:7;2822:11;;;:5;:11;;;;;;;2843:43;;2874:12;;-1:-1:-1;;;2874:12:13;;22845:10:43;22833:23;;2874:12:13;;;22815:42:43;22788:18;;2874:12:13;22671:192:43;12852:1806:26;13329:17;13349:36;:17;:8;;:15;:17::i;:::-;2891:2:29;2780:123;13349:36:26;13329:56;;13518:24;13545:62;13553:9;13564:26;13570:19;:8;;:17;:19::i;:::-;13564:5;:26::i;:::-;13592:14;;;;:7;:14;:::i;:::-;13545:7;:62::i;:::-;13518:89;-1:-1:-1;243:2:29;-1:-1:-1;;13618:955:26;;;13722:23;13748:175;13791:13;;;;;;;;:::i;:::-;13822:14;;;;:7;:14;:::i;:::-;13854:16;13888:21;:8;;:19;:21::i;:::-;13748:25;:175::i;:::-;14470:92;;-1:-1:-1;;;14470:92:26;;13722:201;;-1:-1:-1;;;;;;14470:8:26;:20;;;;:92;;14491:9;;14502:5;;14509:1;;13722:201;;14470:92;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13645:928;13618:955;-1:-1:-1;;;;;14588:63:26;;14600:5;14588:63;14607:14;;;;:7;:14;:::i;:::-;14588:63;;;15127:10:43;15115:23;;;15097:42;;15170:2;15155:18;;15148:34;;;15070:18;14588:63:26;;;;;;;13155:1503;;12852:1806;;;;;;;:::o;10415:477:35:-;-1:-1:-1;;;;;3657:18:35;;;10514:24;3657:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;-1:-1:-1;;10580:37:35;;10576:310;;10656:5;10637:16;:24;10633:130;;;10688:60;;-1:-1:-1;;;10688:60:35;;-1:-1:-1;;;;;24090:32:43;;10688:60:35;;;24072:51:43;24139:18;;;24132:34;;;24182:18;;;24175:34;;;24045:18;;10688:60:35;23870:345:43;10633:130:35;10804:57;10813:5;10820:7;10848:5;10829:16;:24;10855:5;10804:8;:57::i;:::-;10504:388;10415:477;;;:::o;5393:300::-;-1:-1:-1;;;;;5476:18:35;;5472:86;;5517:30;;-1:-1:-1;;;5517:30:35;;5544:1;5517:30;;;3587:51:43;3560:18;;5517:30:35;3441:203:43;5472:86:35;-1:-1:-1;;;;;5571:16:35;;5567:86;;5610:32;;-1:-1:-1;;;5610:32:35;;5639:1;5610:32;;;3587:51:43;3560:18;;5610:32:35;3441:203:43;5567:86:35;5662:24;5670:4;5676:2;5680:5;5662:7;:24::i;1796:162:30:-;1684:7;1710:6;-1:-1:-1;;;;;1710:6:30;735:10:40;1855:23:30;1851:101;;1901:40;;-1:-1:-1;;;1901:40:30;;735:10:40;1901:40:30;;;3587:51:43;3560:18;;1901:40:30;3441:203:43;2286:134:13;2359:11;;;;;;;:5;:11;;;;;;;;;:19;;;2393:20;;15097:42:43;;;15155:18;;15148:34;;;2393:20:13;;15070:18:43;2393:20:13;;;;;;;2286:134;;:::o;10898:1436:26:-;11030:20;11052;11084:15;11255:324;11287:10;:13;;;11314:16;11320:9;11314:5;:16::i;:::-;11548:21;;;;:10;:21;:::i;:::-;11255:324;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11255:18:26;;-1:-1:-1;;;11255:324:26:i;:::-;11231:348;;-1:-1:-1;11231:348:26;-1:-1:-1;11659:14:26;11231:348;11676:33;;2123:1;11676:33;;;2169:1;11676:33;11659:50;-1:-1:-1;11831:67:26;11846:17;;;;:10;:17;:::i;:::-;11865:7;11874:23;;;;:10;:23;:::i;11831:67::-;12156:12;;11821:77;;-1:-1:-1;;;;;;12156:12:26;12248:23;;12244:83;;12273:54;;-1:-1:-1;;;12273:54:26;;-1:-1:-1;;;;;12273:36:26;;;;;:54;;12310:7;;12319;;12273:54;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;12244:83;11074:1260;;;10898:1436;;;;;:::o;2038:391:15:-;-1:-1:-1;;;;;;;;;;;;;;;;;2259:8:15;-1:-1:-1;;;;;2259:14:15;;2291:86;;;;;;;;2307:7;2291:86;;;;;;2316:25;2333:7;2316:16;:25::i;:::-;2291:86;;;;2343:8;2291:86;;;;2353:8;2291:86;;;;2363:13;2291:86;;;;;2403:4;2259:163;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2240:182;2038:391;-1:-1:-1;;;;;2038:391:15:o;2912:187:30:-;2985:16;3004:6;;-1:-1:-1;;;;;3020:17:30;;;-1:-1:-1;;;;;;3020:17:30;;;;;;3052:40;;3004:6;;;;;;;3052:40;;2985:16;3052:40;2975:124;2912:187;:::o;2237:514:20:-;2345:9;2340:354;2364:16;:23;2360:1;:27;2340:354;;;2522:48;2542:16;2559:1;2542:19;;;;;;;;:::i;:::-;;;;;;;:27;;;2522:19;:48::i;:::-;2656:16;2673:1;2656:19;;;;;;;;:::i;:::-;;;;;;;:27;;;2584:15;:40;2600:16;2617:1;2600:19;;;;;;;;:::i;:::-;;;;;;;:23;;;2584:40;;;;;;;;;;;;;;;:69;2625:16;2642:1;2625:19;;;;;;;;:::i;:::-;;;;;;;:27;;;2584:69;;;;;;;;;;;;;;;:99;;;;;;:::i;:::-;-1:-1:-1;2389:3:20;;2340:354;;;;2709:35;2727:16;2709:35;;;;;;:::i;4631:264::-;4801:1;4787:16;;4781:23;4827:28;;;463:1;4827:28;4823:65;;4879:8;4864:24;;-1:-1:-1;;;4864:24:20;;;;;;;;:::i;9271:1333:26:-;9425:34;;:::i;:::-;-1:-1:-1;;;;;;;;;;;;;;;;;9823:20:26;;9873:140;9893:10;9917:19;;;;9950:22;;;;9986:17;;;;9917:10;9986:17;:::i;:::-;9873:6;:140::i;:::-;9822:191;;;;10102:20;10124;10148:49;10168:10;10180:16;10148:19;:49::i;:::-;10101:96;;-1:-1:-1;10101:96:26;-1:-1:-1;10320:66:26;10328:17;;;;:10;:17;:::i;:::-;10347:7;10356;10320:66;;;;;;;10365:4;10320:66;:::i;:::-;10371:14;10320:7;:66::i;:::-;10452:42;;;;;;;;;;;;;;;;;;;10518:15;;10307:79;;-1:-1:-1;10452:42:26;;-1:-1:-1;10554:10:26;;10518:15;10510:87;;10535:17;;;;:10;:17;:::i;:::-;10510:87;;;30238:10:43;30226:23;;;30208:42;;30281:2;30266:18;;30259:34;;;30309:18;;30302:34;;;30196:2;30181:18;10510:87:26;;;;;;;9491:1113;;;;9271:1333;;;;;;:::o;9701:432:35:-;-1:-1:-1;;;;;9813:19:35;;9809:89;;9855:32;;-1:-1:-1;;;9855:32:35;;9884:1;9855:32;;;3587:51:43;3560:18;;9855:32:35;3441:203:43;9809:89:35;-1:-1:-1;;;;;9911:21:35;;9907:90;;9955:31;;-1:-1:-1;;;9955:31:35;;9983:1;9955:31;;;3587:51:43;3560:18;;9955:31:35;3441:203:43;9907:90:35;-1:-1:-1;;;;;10006:18:35;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;:35;;;10051:76;;;;10101:7;-1:-1:-1;;;;;10085:31:35;10094:5;-1:-1:-1;;;;;10085:31:35;;10110:5;10085:31;;;;6156:25:43;;6144:2;6129:18;;6010:177;10085:31:35;;;;;;;;9701:432;;;;:::o;16585:172:26:-;16656:16;16729:21;16692:33;16729:21;16692:9;:33;:::i;:::-;16691:59;;;;:::i;1573:123:29:-;1633:7;1667:21;188:2;1633:7;1667:4;;:21;:::i;:::-;1659:30;;;:::i;1874:152::-;1936:6;1975:42;243:2;188;1975:4;;:42;:::i;:::-;1968:50;;;:::i;:::-;1961:58;;;1874:152;-1:-1:-1;;;1874:152:29:o;16981:139:26:-;17045:16;17080:33;17092:21;-1:-1:-1;;;;;17080:33:26;;;:::i;2939:462:25:-;3073:24;-1:-1:-1;;;;;3113:19:25;;3109:46;;3148:6;3134:21;;3109:46;3251:21;3257:3;3262:9;3251:5;:21::i;:::-;-1:-1:-1;3385:9:25;;2939:462;-1:-1:-1;;2939:462:25:o;2186:130:29:-;2250:12;2281:28;:4;243:2;2281:4;;:28;:::i;:::-;2274:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2274:35:29;;2186:130;-1:-1:-1;;;;;;2186:130:29:o;640:284:28:-;824:17;877:6;885:7;894:9;905:11;860:57;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;853:64;;640:284;;;;;;:::o;6008:1107:35:-;-1:-1:-1;;;;;6097:18:35;;6093:540;;6249:5;6233:12;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;6093:540:35;;-1:-1:-1;6093:540:35;;-1:-1:-1;;;;;6307:15:35;;6285:19;6307:15;;;:9;:15;;;;;;6340:19;;;6336:115;;;6386:50;;-1:-1:-1;;;6386:50:35;;-1:-1:-1;;;;;24090:32:43;;6386:50:35;;;24072:51:43;24139:18;;;24132:34;;;24182:18;;;24175:34;;;24045:18;;6386:50:35;23870:345:43;6336:115:35;-1:-1:-1;;;;;6571:15:35;;;;;;:9;:15;;;;;6589:19;;;;6571:37;;6093:540;-1:-1:-1;;;;;6647:16:35;;6643:425;;6810:12;:21;;;;;;;6643:425;;;-1:-1:-1;;;;;7021:13:35;;;;;;:9;:13;;;;;:22;;;;;;6643:425;7098:2;-1:-1:-1;;;;;7083:25:35;7092:4;-1:-1:-1;;;;;7083:25:35;;7102:5;7083:25;;;;6156::43;;6144:2;6129:18;;6010:177;7083:25:35;;;;;;;;6008:1107;;;:::o;17344:147:26:-;17409:15;17450:33;17462:21;17450:9;:33;:::i;598:506:29:-;791:18;;732:17;;791:22;;;934:163;;1074:7;1083:13;1057:40;;;;;;;;32328:19:43;;;32403:3;32381:16;-1:-1:-1;;;;;;32377:51:43;32372:2;32363:12;;32356:73;32454:2;32445:12;;32173:290;1057:40:29;;;;;;;;;;;;;934:163;;;976:7;985:13;1017:10;1030:11;959:83;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;934:163;927:170;;598:506;;;;;;:::o;2037:567:25:-;2198:20;2220:24;2291:44;2302:9;2313:12;2327:7;2291:10;:44::i;:::-;2256:79;;-1:-1:-1;2256:79:25;-1:-1:-1;2571:26:25;2577:5;2256:79;2571:5;:26::i;:::-;2037:567;;;;;;;:::o;3188:766:15:-;3389:31;;:::i;:::-;3554:20;3577:26;3588:4;:14;;;3577:10;:26::i;:::-;3617:15;;;;3554:49;;-1:-1:-1;3617:19:15;3613:53;;3638:28;3650:4;:15;;;3638:11;:28::i;:::-;3755:8;-1:-1:-1;;;;;3755:13:15;;3777:12;3809:92;;;;;;;;3825:7;3809:92;;;;;;3834:25;3851:7;3834:16;:25::i;:::-;3809:92;;;;3861:8;3809:92;;;;3871:8;3809:92;;;;3899:1;3881:4;:15;;;:19;3809:92;;;;;3919:14;3755:192;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3677:270;3188:766;-1:-1:-1;;;;;;;3188:766:15:o;7458:208:35:-;-1:-1:-1;;;;;7528:21:35;;7524:91;;7572:32;;-1:-1:-1;;;7572:32:35;;7601:1;7572:32;;;3587:51:43;3560:18;;7572:32:35;3441:203:43;7524:91:35;7624:35;7640:1;7644:7;7653:5;7624:7;:35::i;7984:206::-;-1:-1:-1;;;;;8054:21:35;;8050:89;;8098:30;;-1:-1:-1;;;8098:30:35;;8125:1;8098:30;;;3587:51:43;3560:18;;8098:30:35;3441:203:43;8050:89:35;8148:35;8156:7;8173:1;8177:5;8148:7;:35::i;4650:191:15:-;4716:17;4762:10;4749:9;:23;4745:62;;4781:26;;-1:-1:-1;;;4781:26:15;;4797:9;4781:26;;;6156:25:43;6129:18;;4781:26:15;6010:177:43;4745:62:15;-1:-1:-1;4824:10:15;4650:191::o;5218:410::-;5371:15;5389:8;-1:-1:-1;;;;;5389:16:15;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5371:36;-1:-1:-1;;;;;;5421:21:15;;5417:54;;5451:20;;-1:-1:-1;;;5451:20:15;;;;;;;;;;;5417:54;1797:53:38;;;5578:10:15;1797:53:38;;;34029:34:43;;;5598:8:15;-1:-1:-1;;;;;34099:15:43;;;34079:18;;;34072:43;34131:18;;;;34124:34;;;1797:53:38;;;;;;;;;;33964:18:43;;;;1797:53:38;;;;;;;;;-1:-1:-1;;;;;1797:53:38;-1:-1:-1;;;1797:53:38;;;7968:11;;5545:76:15;;:32;;;5609:11;;1770:81:38;;5545:32:15;;-1:-1:-1;;;;1797:53:38;;-1:-1:-1;;;5545:32:15;7934:5:38;7929:60;8041:7;8031:176;;8085:4;8079:11;8130:16;8127:1;8122:3;8107:40;8176:16;8171:3;8164:29;8031:176;-1:-1:-1;;8284:1:38;8278:8;8234:16;;-1:-1:-1;8310:15:38;;:68;;8362:11;8377:1;8362:16;;8310:68;;;-1:-1:-1;;;;;8328:26:38;;;:31;8310:68;8306:146;;;8401:40;;-1:-1:-1;;;8401:40:38;;-1:-1:-1;;;;;3605:32:43;;8401:40:38;;;3587:51:43;3560:18;;8401:40:38;3441:203:43;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:250:43:-;99:1;109:113;123:6;120:1;117:13;109:113;;;199:11;;;193:18;180:11;;;173:39;145:2;138:10;109:113;;;-1:-1:-1;;256:1:43;238:16;;231:27;14:250::o;269:271::-;311:3;349:5;343:12;376:6;371:3;364:19;392:76;461:6;454:4;449:3;445:14;438:4;431:5;427:16;392:76;:::i;:::-;522:2;501:15;-1:-1:-1;;497:29:43;488:39;;;;529:4;484:50;;269:271;-1:-1:-1;;269:271:43:o;545:220::-;694:2;683:9;676:21;657:4;714:45;755:2;744:9;740:18;732:6;714:45;:::i;770:131::-;-1:-1:-1;;;;;845:31:43;;835:42;;825:70;;891:1;888;881:12;906:315;974:6;982;1035:2;1023:9;1014:7;1010:23;1006:32;1003:52;;;1051:1;1048;1041:12;1003:52;1090:9;1077:23;1109:31;1134:5;1109:31;:::i;:::-;1159:5;1211:2;1196:18;;;;1183:32;;-1:-1:-1;;;906:315:43:o;1418:158::-;1480:5;1525:3;1516:6;1511:3;1507:16;1503:26;1500:46;;;1542:1;1539;1532:12;1500:46;-1:-1:-1;1564:6:43;1418:158;-1:-1:-1;1418:158:43:o;1581:360::-;1669:6;1722:2;1710:9;1701:7;1697:23;1693:32;1690:52;;;1738:1;1735;1728:12;1690:52;1778:9;1765:23;-1:-1:-1;;;;;1803:6:43;1800:30;1797:50;;;1843:1;1840;1833:12;1797:50;1866:69;1927:7;1918:6;1907:9;1903:22;1866:69;:::i;2100:1336::-;2020:12;;2008:25;;2082:4;2071:16;;;2065:23;2049:14;;;2042:47;2466:4;2514:3;2499:19;;2591:2;2629:3;2624:2;2613:9;2609:18;2602:31;2653:6;2688;2682:13;2719:6;2711;2704:22;2757:3;2746:9;2742:19;2735:26;;2820:3;2810:6;2807:1;2803:14;2792:9;2788:30;2784:40;2770:54;;2843:4;2882;2874:6;2870:17;2905:1;2915:429;2929:6;2926:1;2923:13;2915:429;;;2994:22;;;-1:-1:-1;;2990:37:43;2978:50;;3051:13;;3092:9;;3077:25;;3141:11;;3135:18;3173:15;;;3166:27;;;3216:48;3248:15;;;3135:18;3216:48;:::i;:::-;3206:58;-1:-1:-1;;3322:12:43;;;;3287:15;;;;2951:1;2944:9;2915:429;;;-1:-1:-1;;2020:12:43;;3426:2;3411:18;;2008:25;-1:-1:-1;;;2082:4:43;2071:16;;2065:23;2049:14;;;2042:47;-1:-1:-1;3361:6:43;-1:-1:-1;3376:54:43;1946:149;3649:154;3708:5;3753:2;3744:6;3739:3;3735:16;3731:25;3728:45;;;3769:1;3766;3759:12;3808:347;3859:8;3869:6;3923:3;3916:4;3908:6;3904:17;3900:27;3890:55;;3941:1;3938;3931:12;3890:55;-1:-1:-1;3964:20:43;;-1:-1:-1;;;;;3996:30:43;;3993:50;;;4039:1;4036;4029:12;3993:50;4076:4;4068:6;4064:17;4052:29;;4128:3;4121:4;4112:6;4104;4100:19;4096:30;4093:39;4090:59;;;4145:1;4142;4135:12;4090:59;3808:347;;;;;:::o;4160:1047::-;4302:6;4310;4318;4326;4334;4342;4350;4403:3;4391:9;4382:7;4378:23;4374:33;4371:53;;;4420:1;4417;4410:12;4371:53;4443;4488:7;4477:9;4443:53;:::i;:::-;4433:63;;4543:2;4532:9;4528:18;4515:32;4505:42;;4598:3;4587:9;4583:19;4570:33;-1:-1:-1;;;;;4663:2:43;4655:6;4652:14;4649:34;;;4679:1;4676;4669:12;4649:34;4718:58;4768:7;4759:6;4748:9;4744:22;4718:58;:::i;:::-;4795:8;;-1:-1:-1;4692:84:43;-1:-1:-1;4880:3:43;4865:19;;4852:33;;-1:-1:-1;4894:31:43;4852:33;4894:31;:::i;:::-;4944:5;;-1:-1:-1;5002:3:43;4987:19;;4974:33;;5019:16;;;5016:36;;;5048:1;5045;5038:12;5016:36;;5087:60;5139:7;5128:8;5117:9;5113:24;5087:60;:::i;:::-;4160:1047;;;;-1:-1:-1;4160:1047:43;;-1:-1:-1;4160:1047:43;;;;5061:86;;-1:-1:-1;;;4160:1047:43:o;6192:456::-;6269:6;6277;6285;6338:2;6326:9;6317:7;6313:23;6309:32;6306:52;;;6354:1;6351;6344:12;6306:52;6393:9;6380:23;6412:31;6437:5;6412:31;:::i;:::-;6462:5;-1:-1:-1;6519:2:43;6504:18;;6491:32;6532:33;6491:32;6532:33;:::i;:::-;6192:456;;6584:7;;-1:-1:-1;;;6638:2:43;6623:18;;;;6610:32;;6192:456::o;6842:163::-;6909:20;;6969:10;6958:22;;6948:33;;6938:61;;6995:1;6992;6985:12;6938:61;6842:163;;;:::o;7010:252::-;7077:6;7085;7138:2;7126:9;7117:7;7113:23;7109:32;7106:52;;;7154:1;7151;7144:12;7106:52;7177:28;7195:9;7177:28;:::i;7267:118::-;7353:5;7346:13;7339:21;7332:5;7329:32;7319:60;;7375:1;7372;7365:12;7390:489;7484:6;7492;7545:2;7533:9;7524:7;7520:23;7516:32;7513:52;;;7561:1;7558;7551:12;7513:52;7601:9;7588:23;-1:-1:-1;;;;;7626:6:43;7623:30;7620:50;;;7666:1;7663;7656:12;7620:50;7689:69;7750:7;7741:6;7730:9;7726:22;7689:69;:::i;:::-;7679:79;;;7808:2;7797:9;7793:18;7780:32;7821:28;7843:5;7821:28;:::i;:::-;7868:5;7858:15;;;7390:489;;;;;:::o;7884:255::-;2020:12;;2008:25;;2082:4;2071:16;;;2065:23;2049:14;;;2042:47;8076:2;8061:18;;8088:45;1946:149;8144:159;8211:20;;8271:6;8260:18;;8250:29;;8240:57;;8293:1;8290;8283:12;8308:256;8374:6;8382;8435:2;8423:9;8414:7;8410:23;8406:32;8403:52;;;8451:1;8448;8441:12;8403:52;8474:28;8492:9;8474:28;:::i;:::-;8464:38;;8521:37;8554:2;8543:9;8539:18;8521:37;:::i;:::-;8511:47;;8308:256;;;;;:::o;9028:247::-;9087:6;9140:2;9128:9;9119:7;9115:23;9111:32;9108:52;;;9156:1;9153;9146:12;9108:52;9195:9;9182:23;9214:31;9239:5;9214:31;:::i;9485:669::-;9598:6;9606;9614;9622;9675:3;9663:9;9654:7;9650:23;9646:33;9643:53;;;9692:1;9689;9682:12;9643:53;9715;9760:7;9749:9;9715:53;:::i;:::-;9705:63;;9819:2;9808:9;9804:18;9791:32;-1:-1:-1;;;;;9838:6:43;9835:30;9832:50;;;9878:1;9875;9868:12;9832:50;9917:58;9967:7;9958:6;9947:9;9943:22;9917:58;:::i;:::-;9994:8;;-1:-1:-1;9891:84:43;-1:-1:-1;;10079:3:43;10064:19;;10051:33;10093:31;10051:33;10093:31;:::i;:::-;9485:669;;;;-1:-1:-1;9485:669:43;;-1:-1:-1;;9485:669:43:o;10159:395::-;10250:8;10260:6;10314:3;10307:4;10299:6;10295:17;10291:27;10281:55;;10332:1;10329;10322:12;10281:55;-1:-1:-1;10355:20:43;;-1:-1:-1;;;;;10387:30:43;;10384:50;;;10430:1;10427;10420:12;10384:50;10467:4;10459:6;10455:17;10443:29;;10527:3;10520:4;10510:6;10507:1;10503:14;10495:6;10491:27;10487:38;10484:47;10481:67;;;10544:1;10541;10534:12;10559:504;10684:6;10692;10745:2;10733:9;10724:7;10720:23;10716:32;10713:52;;;10761:1;10758;10751:12;10713:52;10801:9;10788:23;-1:-1:-1;;;;;10826:6:43;10823:30;10820:50;;;10866:1;10863;10856:12;10820:50;10905:98;10995:7;10986:6;10975:9;10971:22;10905:98;:::i;:::-;11022:8;;10879:124;;-1:-1:-1;10559:504:43;-1:-1:-1;;;;10559:504:43:o;11068:184::-;11126:6;11179:2;11167:9;11158:7;11154:23;11150:32;11147:52;;;11195:1;11192;11185:12;11147:52;11218:28;11236:9;11218:28;:::i;11439:553::-;11525:6;11533;11541;11549;11602:2;11590:9;11581:7;11577:23;11573:32;11570:52;;;11618:1;11615;11608:12;11570:52;11641:28;11659:9;11641:28;:::i;:::-;11631:38;;11688:37;11721:2;11710:9;11706:18;11688:37;:::i;:::-;11678:47;;11776:2;11765:9;11761:18;11748:32;-1:-1:-1;;;;;11795:6:43;11792:30;11789:50;;;11835:1;11832;11825:12;11789:50;11874:58;11924:7;11915:6;11904:9;11900:22;11874:58;:::i;:::-;11439:553;;;;-1:-1:-1;11951:8:43;-1:-1:-1;;;;11439:553:43:o;12500:656::-;12637:6;12645;12653;12697:9;12688:7;12684:23;12727:3;12723:2;12719:12;12716:32;;;12744:1;12741;12734:12;12716:32;12784:9;12771:23;-1:-1:-1;;;;;12809:6:43;12806:30;12803:50;;;12849:1;12846;12839:12;12803:50;12872:69;12933:7;12924:6;12913:9;12909:22;12872:69;:::i;:::-;12862:79;-1:-1:-1;;12975:2:43;-1:-1:-1;;12957:16:43;;12953:25;12950:45;;;12991:1;12988;12981:12;12950:45;;13029:2;13018:9;13014:18;13004:28;;13082:2;13071:9;13067:18;13054:32;13095:31;13120:5;13095:31;:::i;:::-;13145:5;13135:15;;;12500:656;;;;;:::o;13161:609::-;13401:4;13443:3;13432:9;13428:19;13420:27;;13480:6;13474:13;13463:9;13456:32;-1:-1:-1;;;;;13548:4:43;13540:6;13536:17;13530:24;13526:49;13519:4;13508:9;13504:20;13497:79;13623:4;13615:6;13611:17;13605:24;13638:62;13694:4;13683:9;13679:20;13665:12;2020;;2008:25;;2082:4;2071:16;;;2065:23;2049:14;;2042:47;1946:149;13638:62;-1:-1:-1;2020:12:43;;13759:3;13744:19;;2008:25;2082:4;2071:16;;2065:23;2049:14;;;2042:47;13709:55;1946:149;13775:388;13843:6;13851;13904:2;13892:9;13883:7;13879:23;13875:32;13872:52;;;13920:1;13917;13910:12;13872:52;13959:9;13946:23;13978:31;14003:5;13978:31;:::i;:::-;14028:5;-1:-1:-1;14085:2:43;14070:18;;14057:32;14098:33;14057:32;14098:33;:::i;14168:235::-;14252:6;14305:2;14293:9;14284:7;14280:23;14276:32;14273:52;;;14321:1;14318;14311:12;14273:52;14344:53;14389:7;14378:9;14344:53;:::i;14408:380::-;14487:1;14483:12;;;;14530;;;14551:61;;14605:4;14597:6;14593:17;14583:27;;14551:61;14658:2;14650:6;14647:14;14627:18;14624:38;14621:161;;14704:10;14699:3;14695:20;14692:1;14685:31;14739:4;14736:1;14729:15;14767:4;14764:1;14757:15;14793:127;14854:10;14849:3;14845:20;14842:1;14835:31;14885:4;14882:1;14875:15;14909:4;14906:1;14899:15;15193:253;15265:2;15259:9;15307:4;15295:17;;-1:-1:-1;;;;;15327:34:43;;15363:22;;;15324:62;15321:88;;;15389:18;;:::i;:::-;15425:2;15418:22;15193:253;:::o;15451:257::-;15523:4;15517:11;;;15555:17;;-1:-1:-1;;;;;15587:34:43;;15623:22;;;15584:62;15581:88;;;15649:18;;:::i;15713:275::-;15784:2;15778:9;15849:2;15830:13;;-1:-1:-1;;15826:27:43;15814:40;;-1:-1:-1;;;;;15869:34:43;;15905:22;;;15866:62;15863:88;;;15931:18;;:::i;:::-;15967:2;15960:22;15713:275;;-1:-1:-1;15713:275:43:o;15993:186::-;16041:4;-1:-1:-1;;;;;16066:6:43;16063:30;16060:56;;;16096:18;;:::i;:::-;-1:-1:-1;16162:2:43;16141:15;-1:-1:-1;;16137:29:43;16168:4;16133:40;;15993:186::o;16184:2117::-;16376:9;-1:-1:-1;;;;;16451:2:43;16443:6;16440:14;16437:40;;;16457:18;;:::i;:::-;16503:6;16500:1;16496:14;16529:4;16553:28;16577:2;16573;16569:11;16553:28;:::i;:::-;16615:19;;;16685:14;;;;16650:12;;;;16722:14;16711:26;;16708:46;;;16750:1;16747;16740:12;16708:46;16774:5;16788:1480;16804:6;16799:3;16796:15;16788:1480;;;16890:3;16877:17;16926:2;16913:11;16910:19;16907:109;;;16970:1;16999:2;16995;16988:14;16907:109;17039:23;;17107:4;17086:14;17082:23;;;17078:34;17075:124;;;17153:1;17182:2;17178;17171:14;17075:124;17227:22;;:::i;:::-;17278:21;17296:2;17278:21;:::i;:::-;17269:7;17262:38;17338:30;17364:2;17360;17356:11;17338:30;:::i;:::-;17333:2;17324:7;17320:16;17313:56;17392:2;17442;17438;17434:11;17421:25;17473:2;17465:6;17462:14;17459:104;;;17517:1;17546:2;17542;17535:14;17459:104;17586:15;;;;;17643:14;17636:4;17628:13;;17624:34;17614:135;;17701:1;17731:3;17726;17719:16;17614:135;17786:2;17773:16;17815:49;17831:32;17859:3;17831:32;:::i;:::-;17815:49;:::i;:::-;17891:3;17884:5;17877:18;17937:14;17932:2;17926:3;17922:2;17918:12;17914:21;17911:41;17908:134;;;17994:1;18024:3;18019;18012:16;17908:134;18097:3;18092:2;18088;18084:11;18079:2;18072:5;18068:14;18055:46;18147:1;18125:15;;;18121:24;;18114:35;;;;18169:16;;;18162:31;18206:20;;-1:-1:-1;18246:12:43;;;;16821;;16788:1480;;;-1:-1:-1;18290:5:43;16184:2117;-1:-1:-1;;;;;;;16184:2117:43:o;18306:331::-;18411:9;18422;18464:8;18452:10;18449:24;18446:44;;;18486:1;18483;18476:12;18446:44;18515:6;18505:8;18502:20;18499:40;;;18535:1;18532;18525:12;18499:40;-1:-1:-1;;18561:23:43;;;18606:25;;;;;-1:-1:-1;18306:331:43:o;18642:476::-;18833:3;18871:6;18865:13;18887:66;18946:6;18941:3;18934:4;18926:6;18922:17;18887:66;:::i;:::-;18975:16;;19028:6;19020;18975:16;19000:35;19092:1;19054:18;;19081:13;;;-1:-1:-1;19054:18:43;;18642:476;-1:-1:-1;;;18642:476:43:o;19123:266::-;19211:6;19206:3;19199:19;19263:6;19256:5;19249:4;19244:3;19240:14;19227:43;-1:-1:-1;19315:1:43;19290:16;;;19308:4;19286:27;;;19279:38;;;;19371:2;19350:15;;;-1:-1:-1;;19346:29:43;19337:39;;;19333:50;;19123:266::o;19394:244::-;19551:2;19540:9;19533:21;19514:4;19571:61;19628:2;19617:9;19613:18;19605:6;19597;19571:61;:::i;19643:127::-;19704:10;19699:3;19695:20;19692:1;19685:31;19735:4;19732:1;19725:15;19759:4;19756:1;19749:15;19775:331;19874:4;19932:11;19919:25;20026:3;20022:8;20011;19995:14;19991:29;19987:44;19967:18;19963:69;19953:97;;20046:1;20043;20036:12;19953:97;20067:33;;;;;19775:331;-1:-1:-1;;19775:331:43:o;20111:521::-;20188:4;20194:6;20254:11;20241:25;20348:2;20344:7;20333:8;20317:14;20313:29;20309:43;20289:18;20285:68;20275:96;;20367:1;20364;20357:12;20275:96;20394:33;;20446:20;;;-1:-1:-1;;;;;;20478:30:43;;20475:50;;;20521:1;20518;20511:12;20475:50;20554:4;20542:17;;-1:-1:-1;20585:14:43;20581:27;;;20571:38;;20568:58;;;20622:1;20619;20612:12;20637:129;-1:-1:-1;;;;;20715:5:43;20711:30;20704:5;20701:41;20691:69;;20756:1;20753;20746:12;20771:990;21147:10;21120:25;21138:6;21120:25;:::i;:::-;21116:42;21105:9;21098:61;21222:4;21214:6;21210:17;21197:31;21190:4;21179:9;21175:20;21168:61;21079:4;21276;21268:6;21264:17;21251:31;21291:30;21315:5;21291:30;:::i;:::-;-1:-1:-1;;;;;21363:5:43;21359:30;21352:4;21341:9;21337:20;21330:60;;21426:6;21421:2;21410:9;21406:18;21399:34;21470:3;21464;21453:9;21449:19;21442:32;21497:62;21554:3;21543:9;21539:19;21531:6;21523;21497:62;:::i;:::-;-1:-1:-1;;;;;21596:32:43;;21616:3;21575:19;;21568:61;21666:22;;;21660:3;21645:19;;21638:51;21706:49;21670:6;21740;21732;21706:49;:::i;:::-;21698:57;20771:990;-1:-1:-1;;;;;;;;;;20771:990:43:o;21766:647::-;21845:6;21898:2;21886:9;21877:7;21873:23;21869:32;21866:52;;;21914:1;21911;21904:12;21866:52;21947:9;21941:16;-1:-1:-1;;;;;21972:6:43;21969:30;21966:50;;;22012:1;22009;22002:12;21966:50;22035:22;;22088:4;22080:13;;22076:27;-1:-1:-1;22066:55:43;;22117:1;22114;22107:12;22066:55;22146:2;22140:9;22171:48;22187:31;22215:2;22187:31;:::i;22171:48::-;22242:2;22235:5;22228:17;22282:7;22277:2;22272;22268;22264:11;22260:20;22257:33;22254:53;;;22303:1;22300;22293:12;22254:53;22316:67;22380:2;22375;22368:5;22364:14;22359:2;22355;22351:11;22316:67;:::i;22868:245::-;22926:6;22979:2;22967:9;22958:7;22954:23;22950:32;22947:52;;;22995:1;22992;22985:12;22947:52;23034:9;23021:23;23053:30;23077:5;23053:30;:::i;23118:479::-;23385:1;23381;23376:3;23372:11;23368:19;23360:6;23356:32;23345:9;23338:51;23425:6;23420:2;23409:9;23405:18;23398:34;23480:6;23472;23468:19;23463:2;23452:9;23448:18;23441:47;23524:3;23519:2;23508:9;23504:18;23497:31;23319:4;23545:46;23586:3;23575:9;23571:19;23563:6;23545:46;:::i;24220:379::-;24413:2;24402:9;24395:21;24376:4;24439:45;24480:2;24469:9;24465:18;24457:6;24439:45;:::i;:::-;24532:9;24524:6;24520:22;24515:2;24504:9;24500:18;24493:50;24560:33;24586:6;24578;24560:33;:::i;24604:245::-;24671:6;24724:2;24712:9;24703:7;24699:23;24695:32;24692:52;;;24740:1;24737;24730:12;24692:52;24772:9;24766:16;24791:28;24813:5;24791:28;:::i;24854:887::-;25073:2;25062:9;25055:21;25131:10;25122:6;25116:13;25112:30;25107:2;25096:9;25092:18;25085:58;25197:4;25189:6;25185:17;25179:24;25174:2;25163:9;25159:18;25152:52;25036:4;25251:2;25243:6;25239:15;25233:22;25292:4;25286:3;25275:9;25271:19;25264:33;25320:52;25367:3;25356:9;25352:19;25338:12;25320:52;:::i;:::-;25306:66;;25421:2;25413:6;25409:15;25403:22;25495:2;25491:7;25479:9;25471:6;25467:22;25463:36;25456:4;25445:9;25441:20;25434:66;25523:41;25557:6;25541:14;25523:41;:::i;:::-;25633:3;25621:16;;;;25615:23;25608:31;25601:39;25595:3;25580:19;;25573:68;-1:-1:-1;;;;;;;;25702:32:43;;;;25695:4;25680:20;;;25673:62;25509:55;24854:887::o;25746:284::-;25816:5;25864:4;25852:9;25847:3;25843:19;25839:30;25836:50;;;25882:1;25879;25872:12;25836:50;25904:22;;:::i;:::-;25895:31;;25955:9;25949:16;25942:5;25935:31;26019:2;26008:9;26004:18;25998:25;25993:2;25986:5;25982:14;25975:49;25746:284;;;;:::o;26035:258::-;26134:6;26187:2;26175:9;26166:7;26162:23;26158:32;26155:52;;;26203:1;26200;26193:12;26155:52;26226:61;26279:7;26268:9;26226:61;:::i;26423:542::-;26524:2;26519:3;26516:11;26513:446;;;26560:1;26584:5;26581:1;26574:16;26628:4;26625:1;26615:18;26698:2;26686:10;26682:19;26679:1;26675:27;26669:4;26665:38;26734:4;26722:10;26719:20;26716:47;;;-1:-1:-1;26757:4:43;26716:47;26812:2;26807:3;26803:12;26800:1;26796:20;26790:4;26786:31;26776:41;;26867:82;26885:2;26878:5;26875:13;26867:82;;;26930:17;;;26911:1;26900:13;26867:82;;;26871:3;;;26423:542;;;:::o;27141:1341::-;27265:3;27259:10;-1:-1:-1;;;;;27284:6:43;27281:30;27278:56;;;27314:18;;:::i;:::-;27343:96;27432:6;27392:38;27424:4;27418:11;27392:38;:::i;:::-;27386:4;27343:96;:::i;:::-;27494:4;;27551:2;27540:14;;27568:1;27563:662;;;;28269:1;28286:6;28283:89;;;-1:-1:-1;28338:19:43;;;28332:26;28283:89;-1:-1:-1;;27098:1:43;27094:11;;;27090:24;27086:29;27076:40;27122:1;27118:11;;;27073:57;28385:81;;27533:943;;27563:662;26370:1;26363:14;;;26407:4;26394:18;;-1:-1:-1;;27599:20:43;;;27716:236;27730:7;27727:1;27724:14;27716:236;;;27819:19;;;27813:26;27798:42;;27911:27;;;;27879:1;27867:14;;;;27746:19;;27716:236;;;27720:3;27980:6;27971:7;27968:19;27965:201;;;28041:19;;;28035:26;-1:-1:-1;;28124:1:43;28120:14;;;28136:3;28116:24;28112:37;28108:42;28093:58;28078:74;;27965:201;-1:-1:-1;;;;;28212:1:43;28196:14;;;28192:22;28179:36;;-1:-1:-1;27141:1341:43:o;28487:1164::-;28703:4;28732:2;28772;28761:9;28757:18;28802:2;28791:9;28784:21;28825:6;28860;28854:13;28891:6;28883;28876:22;28917:2;28907:12;;28950:2;28939:9;28935:18;28928:25;;29012:2;29002:6;28999:1;28995:14;28984:9;28980:30;28976:39;29050:2;29042:6;29038:15;29071:1;29081:541;29095:6;29092:1;29089:13;29081:541;;;29160:22;;;-1:-1:-1;;29156:36:43;29144:49;;29216:13;;29288:9;;29299:10;29284:26;29269:42;;29358:11;;;29352:18;29372:6;29348:31;29331:15;;;29324:56;29419:11;;29413:18;29252:4;29451:15;;;29444:27;;;29494:48;29526:15;;;29413:18;29494:48;:::i;:::-;29600:12;;;;29484:58;-1:-1:-1;;;29565:15:43;;;;29117:1;29110:9;29081:541;;;-1:-1:-1;29639:6:43;;28487:1164;-1:-1:-1;;;;;;;;28487:1164:43:o;29656:347::-;29744:6;29797:2;29785:9;29776:7;29772:23;29768:32;29765:52;;;29813:1;29810;29803:12;29765:52;29839:22;;:::i;:::-;29897:9;29884:23;29877:5;29870:38;29968:2;29957:9;29953:18;29940:32;29935:2;29928:5;29924:14;29917:56;29992:5;29982:15;;;29656:347;;;;:::o;30347:127::-;30408:10;30403:3;30399:20;30396:1;30389:31;30439:4;30436:1;30429:15;30463:4;30460:1;30453:15;30479:217;30519:1;30545;30535:132;;30589:10;30584:3;30580:20;30577:1;30570:31;30624:4;30621:1;30614:15;30652:4;30649:1;30642:15;30535:132;-1:-1:-1;30681:9:43;;30479:217::o;30701:168::-;30774:9;;;30805;;30822:15;;;30816:22;;30802:37;30792:71;;30843:18;;:::i;30874:255::-;30994:19;;31033:2;31025:11;;31022:101;;;-1:-1:-1;;31094:2:43;31090:12;;;31087:1;31083:20;31079:33;31068:45;30874:255;;;;:::o;31134:331::-;-1:-1:-1;;;;;;31254:19:43;;31338:11;;;;31369:1;31361:10;;31358:101;;;31446:2;31440;31433:3;31430:1;31426:11;31423:1;31419:19;31415:28;31411:2;31407:37;31403:46;31394:55;;31358:101;;;31134:331;;;;:::o;31470:568::-;-1:-1:-1;;;;;31735:3:43;31731:28;31722:6;31717:3;31713:16;31709:51;31704:3;31697:64;31821:10;31816:3;31812:20;31803:6;31798:3;31794:16;31790:43;31786:1;31781:3;31777:11;31770:64;31864:6;31859:2;31854:3;31850:12;31843:28;31679:3;31900:6;31894:13;31916:75;31984:6;31979:2;31974:3;31970:12;31963:4;31955:6;31951:17;31916:75;:::i;:::-;32011:16;;;;32029:2;32007:25;;31470:568;-1:-1:-1;;;;;31470:568:43:o;32043:125::-;32108:9;;;32129:10;;;32126:36;;;32142:18;;:::i;32468:532::-;32709:6;32704:3;32697:19;-1:-1:-1;;;;;32772:3:43;32768:28;32759:6;32754:3;32750:16;32746:51;32741:2;32736:3;32732:12;32725:73;32828:6;32823:2;32818:3;32814:12;32807:28;32679:3;32864:6;32858:13;32880:73;32946:6;32941:2;32936:3;32932:12;32927:2;32919:6;32915:15;32880:73;:::i;:::-;32973:16;;;;32991:2;32969:25;;32468:532;-1:-1:-1;;;;;32468:532:43:o;33005:523::-;33107:6;33160:3;33148:9;33139:7;33135:23;33131:33;33128:53;;;33177:1;33174;33167:12;33128:53;33203:22;;:::i;:::-;33254:9;33248:16;33241:5;33234:31;33310:2;33299:9;33295:18;33289:25;33323:32;33347:7;33323:32;:::i;:::-;33382:2;33371:14;;33364:31;33427:70;33489:7;33484:2;33469:18;;33427:70;:::i;:::-;33422:2;33411:14;;33404:94;33415:5;33005:523;-1:-1:-1;;;33005:523:43:o;33533:251::-;33603:6;33656:2;33644:9;33635:7;33631:23;33627:32;33624:52;;;33672:1;33669;33662:12;33624:52;33704:9;33698:16;33723:31;33748:5;33723:31;:::i", - "linkReferences": {}, - "immutableReferences": { - "1454": [ - { "start": 1245, "length": 32 }, - { "start": 2445, "length": 32 }, - { "start": 4061, "length": 32 }, - { "start": 4692, "length": 32 }, - { "start": 5566, "length": 32 }, - { "start": 7505, "length": 32 }, - { "start": 7873, "length": 32 }, - { "start": 8056, "length": 32 } - ], - "2844": [ - { "start": 1566, "length": 32 }, - { "start": 6624, "length": 32 }, - { "start": 6741, "length": 32 }, - { "start": 7257, "length": 32 } - ] - } - }, - "methodIdentifiers": { - "SEND()": "1f5e1334", - "SEND_AND_CALL()": "134d4f25", - "allowInitializePath((uint32,bytes32,uint64))": "ff7bd03d", - "allowance(address,address)": "dd62ed3e", - "approvalRequired()": "9f68b964", - "approve(address,uint256)": "095ea7b3", - "balanceOf(address)": "70a08231", - "combineOptions(uint32,uint16,bytes)": "bc70b354", - "decimalConversionRate()": "963efcaa", - "decimals()": "313ce567", - "endpoint()": "5e280f11", - "enforcedOptions(uint32,uint16)": "5535d461", - "isComposeMsgSender((uint32,bytes32,uint64),bytes,address)": "82413eac", - "isPeer(uint32,bytes32)": "5a0dfe4d", - "lzReceive((uint32,bytes32,uint64),bytes32,bytes,address,bytes)": "13137d65", - "lzReceiveAndRevert(((uint32,bytes32,uint64),uint32,address,bytes32,uint256,address,bytes,bytes)[])": "bd815db0", - "lzReceiveSimulate((uint32,bytes32,uint64),bytes32,bytes,address,bytes)": "d045a0dc", - "msgInspector()": "111ecdad", - "name()": "06fdde03", - "nextNonce(uint32,bytes32)": "7d25a05e", - "oApp()": "52ae2879", - "oAppVersion()": "17442b70", - "oftVersion()": "156a0d0f", - "owner()": "8da5cb5b", - "peers(uint32)": "bb0b6a53", - "preCrime()": "b731ea0a", - "quoteOFT((uint32,bytes32,uint256,uint256,bytes,bytes,bytes))": "0d35b415", - "quoteSend((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),bool)": "3b6f743b", - "renounceOwnership()": "715018a6", - "send((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),(uint256,uint256),address)": "c7c7f5b3", - "setDelegate(address)": "ca5eb5e1", - "setEnforcedOptions((uint32,uint16,bytes)[])": "b98bd070", - "setMsgInspector(address)": "6fc1b31e", - "setPeer(uint32,bytes32)": "3400288b", - "setPreCrime(address)": "d4243885", - "sharedDecimals()": "857749b0", - "symbol()": "95d89b41", - "token()": "fc0c546a", - "totalSupply()": "18160ddd", - "transfer(address,uint256)": "a9059cbb", - "transferFrom(address,address,uint256)": "23b872dd", - "transferOwnership(address)": "f2fde38b" - }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"_lzEndpoint\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_delegate\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"allowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSpender\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidDelegate\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidEndpointCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidLocalDecimals\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"options\",\"type\":\"bytes\"}],\"name\":\"InvalidOptions\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LzTokenUnavailable\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"}],\"name\":\"NoPeer\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"msgValue\",\"type\":\"uint256\"}],\"name\":\"NotEnoughNative\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"OnlyEndpoint\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"}],\"name\":\"OnlyPeer\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlySelf\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"name\":\"SimulationResult\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountLD\",\"type\":\"uint256\"}],\"name\":\"SlippageExceeded\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"msgType\",\"type\":\"uint16\"},{\"internalType\":\"bytes\",\"name\":\"options\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"struct EnforcedOptionParam[]\",\"name\":\"_enforcedOptions\",\"type\":\"tuple[]\"}],\"name\":\"EnforcedOptionSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"inspector\",\"type\":\"address\"}],\"name\":\"MsgInspectorSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"toAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountReceivedLD\",\"type\":\"uint256\"}],\"name\":\"OFTReceived\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"fromAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountSentLD\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountReceivedLD\",\"type\":\"uint256\"}],\"name\":\"OFTSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"peer\",\"type\":\"bytes32\"}],\"name\":\"PeerSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"preCrimeAddress\",\"type\":\"address\"}],\"name\":\"PreCrimeSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"SEND\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SEND_AND_CALL\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"origin\",\"type\":\"tuple\"}],\"name\":\"allowInitializePath\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"approvalRequired\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"_msgType\",\"type\":\"uint16\"},{\"internalType\":\"bytes\",\"name\":\"_extraOptions\",\"type\":\"bytes\"}],\"name\":\"combineOptions\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimalConversionRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"endpoint\",\"outputs\":[{\"internalType\":\"contract ILayerZeroEndpointV2\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"msgType\",\"type\":\"uint16\"}],\"name\":\"enforcedOptions\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"enforcedOption\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"}],\"name\":\"isComposeMsgSender\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_peer\",\"type\":\"bytes32\"}],\"name\":\"isPeer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"_origin\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"_guid\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"_executor\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"lzReceive\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"origin\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"executor\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"internalType\":\"struct InboundPacket[]\",\"name\":\"_packets\",\"type\":\"tuple[]\"}],\"name\":\"lzReceiveAndRevert\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"_origin\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"_guid\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"_executor\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"lzReceiveSimulate\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"msgInspector\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"nextNonce\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"oApp\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"oAppVersion\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"senderVersion\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"receiverVersion\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"oftVersion\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"},{\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"}],\"name\":\"peers\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"peer\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"preCrime\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"to\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"amountLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountLD\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"extraOptions\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"composeMsg\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"oftCmd\",\"type\":\"bytes\"}],\"internalType\":\"struct SendParam\",\"name\":\"_sendParam\",\"type\":\"tuple\"}],\"name\":\"quoteOFT\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"minAmountLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountLD\",\"type\":\"uint256\"}],\"internalType\":\"struct OFTLimit\",\"name\":\"oftLimit\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"int256\",\"name\":\"feeAmountLD\",\"type\":\"int256\"},{\"internalType\":\"string\",\"name\":\"description\",\"type\":\"string\"}],\"internalType\":\"struct OFTFeeDetail[]\",\"name\":\"oftFeeDetails\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"amountSentLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountReceivedLD\",\"type\":\"uint256\"}],\"internalType\":\"struct OFTReceipt\",\"name\":\"oftReceipt\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"to\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"amountLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountLD\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"extraOptions\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"composeMsg\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"oftCmd\",\"type\":\"bytes\"}],\"internalType\":\"struct SendParam\",\"name\":\"_sendParam\",\"type\":\"tuple\"},{\"internalType\":\"bool\",\"name\":\"_payInLzToken\",\"type\":\"bool\"}],\"name\":\"quoteSend\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nativeFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lzTokenFee\",\"type\":\"uint256\"}],\"internalType\":\"struct MessagingFee\",\"name\":\"msgFee\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"to\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"amountLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountLD\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"extraOptions\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"composeMsg\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"oftCmd\",\"type\":\"bytes\"}],\"internalType\":\"struct SendParam\",\"name\":\"_sendParam\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nativeFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lzTokenFee\",\"type\":\"uint256\"}],\"internalType\":\"struct MessagingFee\",\"name\":\"_fee\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"_refundAddress\",\"type\":\"address\"}],\"name\":\"send\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nativeFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lzTokenFee\",\"type\":\"uint256\"}],\"internalType\":\"struct MessagingFee\",\"name\":\"fee\",\"type\":\"tuple\"}],\"internalType\":\"struct MessagingReceipt\",\"name\":\"msgReceipt\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"amountSentLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountReceivedLD\",\"type\":\"uint256\"}],\"internalType\":\"struct OFTReceipt\",\"name\":\"oftReceipt\",\"type\":\"tuple\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_delegate\",\"type\":\"address\"}],\"name\":\"setDelegate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"msgType\",\"type\":\"uint16\"},{\"internalType\":\"bytes\",\"name\":\"options\",\"type\":\"bytes\"}],\"internalType\":\"struct EnforcedOptionParam[]\",\"name\":\"_enforcedOptions\",\"type\":\"tuple[]\"}],\"name\":\"setEnforcedOptions\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_msgInspector\",\"type\":\"address\"}],\"name\":\"setMsgInspector\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_peer\",\"type\":\"bytes32\"}],\"name\":\"setPeer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_preCrime\",\"type\":\"address\"}],\"name\":\"setPreCrime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sharedDecimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"token\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"ERC20InsufficientAllowance(address,uint256,uint256)\":[{\"details\":\"Indicates a failure with the `spender`\\u2019s `allowance`. Used in transfers.\",\"params\":{\"allowance\":\"Amount of tokens a `spender` is allowed to operate with.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC20InsufficientBalance(address,uint256,uint256)\":[{\"details\":\"Indicates an error related to the current `balance` of a `sender`. Used in transfers.\",\"params\":{\"balance\":\"Current balance for the interacting account.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC20InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC20InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidSpender(address)\":[{\"details\":\"Indicates a failure with the `spender` to be approved. Used in approvals.\",\"params\":{\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}],\"SafeERC20FailedOperation(address)\":[{\"details\":\"An operation with an ERC-20 token failed.\"}]},\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"PreCrimeSet(address)\":{\"details\":\"Emitted when the preCrime contract address is set.\",\"params\":{\"preCrimeAddress\":\"The address of the preCrime contract.\"}},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowInitializePath((uint32,bytes32,uint64))\":{\"details\":\"This indicates to the endpoint that the OApp has enabled msgs for this particular path to be received.This defaults to assuming if a peer has been set, its initialized. Can be overridden by the OApp if there is other logic to determine this.\",\"params\":{\"origin\":\"The origin information containing the source endpoint and sender address.\"},\"returns\":{\"_0\":\"Whether the path has been initialized.\"}},\"allowance(address,address)\":{\"details\":\"See {IERC20-allowance}.\"},\"approvalRequired()\":{\"details\":\"In the case of OFT where the contract IS the token, approval is NOT required.\",\"returns\":{\"_0\":\"requiresApproval Needs approval of the underlying token implementation.\"}},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. NOTE: If `value` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"See {IERC20-balanceOf}.\"},\"combineOptions(uint32,uint16,bytes)\":{\"details\":\"If there is an enforced lzReceive option: - {gasLimit: 200k, msg.value: 1 ether} AND a caller supplies a lzReceive option: {gasLimit: 100k, msg.value: 0.5 ether} - The resulting options will be {gasLimit: 300k, msg.value: 1.5 ether} when the message is executed on the remote lzReceive() function.This presence of duplicated options is handled off-chain in the verifier/executor.\",\"params\":{\"_eid\":\"The endpoint ID.\",\"_extraOptions\":\"Additional options passed by the caller.\",\"_msgType\":\"The OAPP message type.\"},\"returns\":{\"_0\":\"options The combination of caller specified options AND enforced options.\"}},\"decimals()\":{\"details\":\"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the default value returned by this function, unless it's overridden. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.\"},\"isComposeMsgSender((uint32,bytes32,uint64),bytes,address)\":{\"details\":\"_origin The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message._message The lzReceive payload.Applications can optionally choose to implement separate composeMsg senders that are NOT the bridging layer.The default sender IS the OAppReceiver implementer.\",\"params\":{\"_sender\":\"The sender address.\"},\"returns\":{\"_0\":\"isSender Is a valid sender.\"}},\"isPeer(uint32,bytes32)\":{\"details\":\"Check if the peer is considered 'trusted' by the OApp.Enables OAppPreCrimeSimulator to check whether a potential Inbound Packet is from a trusted source.\",\"params\":{\"_eid\":\"The endpoint ID to check.\",\"_peer\":\"The peer to check.\"},\"returns\":{\"_0\":\"Whether the peer passed is considered 'trusted' by the OApp.\"}},\"lzReceive((uint32,bytes32,uint64),bytes32,bytes,address,bytes)\":{\"details\":\"Entry point for receiving messages or packets from the endpoint.Entry point for receiving msg/packet from the LayerZero endpoint.\",\"params\":{\"_executor\":\"The address of the executor for the received message.\",\"_extraData\":\"Additional arbitrary data provided by the corresponding executor.\",\"_guid\":\"The unique identifier for the received LayerZero message.\",\"_message\":\"The payload of the received message.\",\"_origin\":\"The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message.\"}},\"lzReceiveAndRevert(((uint32,bytes32,uint64),uint32,address,bytes32,uint256,address,bytes,bytes)[])\":{\"details\":\"Interface for pre-crime simulations. Always reverts at the end with the simulation results.WARNING: MUST revert at the end with the simulation results.Gives the preCrime implementation the ability to mock sending packets to the lzReceive function, WITHOUT actually executing them.\",\"params\":{\"_packets\":\"An array of InboundPacket objects representing received packets to be delivered.\"}},\"lzReceiveSimulate((uint32,bytes32,uint64),bytes32,bytes,address,bytes)\":{\"details\":\"Is effectively an internal function because msg.sender must be address(this). Allows resetting the call stack for 'internal' calls.\",\"params\":{\"_executor\":\"The executor address for the packet.\",\"_extraData\":\"Additional data for the packet.\",\"_guid\":\"The unique identifier of the packet.\",\"_message\":\"The message payload of the packet.\",\"_origin\":\"The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message.\"}},\"name()\":{\"details\":\"Returns the name of the token.\"},\"nextNonce(uint32,bytes32)\":{\"details\":\"_srcEid The source endpoint ID._sender The sender address.The path nonce starts from 1. If 0 is returned it means that there is NO nonce ordered enforcement.Is required by the off-chain executor to determine the OApp expects msg execution is ordered.This is also enforced by the OApp.By default this is NOT enabled. ie. nextNonce is hardcoded to return 0.\",\"returns\":{\"nonce\":\"The next nonce.\"}},\"oApp()\":{\"details\":\"Retrieves the address of the OApp contract.The simulator contract is the base contract for the OApp by default.If the simulator is a separate contract, override this function.\",\"returns\":{\"_0\":\"The address of the OApp contract.\"}},\"oAppVersion()\":{\"returns\":{\"receiverVersion\":\"The version of the OAppReceiver.sol implementation.\",\"senderVersion\":\"The version of the OAppSender.sol implementation.\"}},\"oftVersion()\":{\"details\":\"interfaceId: This specific interface ID is '0x02e49c2c'.version: Indicates a cross-chain compatible msg encoding with other OFTs.If a new feature is added to the OFT cross-chain msg encoding, the version will be incremented. ie. localOFT version(x,1) CAN send messages to remoteOFT version(x,1)\",\"returns\":{\"interfaceId\":\"The interface ID.\",\"version\":\"The version.\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"quoteOFT((uint32,bytes32,uint256,uint256,bytes,bytes,bytes))\":{\"params\":{\"_sendParam\":\"The parameters for the send operation.\"},\"returns\":{\"oftFeeDetails\":\"The details of OFT fees.\",\"oftLimit\":\"The OFT limit information.\",\"oftReceipt\":\"The OFT receipt information.\"}},\"quoteSend((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),bool)\":{\"details\":\"MessagingFee: LayerZero msg fee - nativeFee: The native fee. - lzTokenFee: The lzToken fee.\",\"params\":{\"_payInLzToken\":\"Flag indicating whether the caller is paying in the LZ token.\",\"_sendParam\":\"The parameters for the send() operation.\"},\"returns\":{\"msgFee\":\"The calculated LayerZero messaging fee from the send() operation.\"}},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"send((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),(uint256,uint256),address)\":{\"details\":\"Executes the send operation.MessagingReceipt: LayerZero msg receipt - guid: The unique identifier for the sent message. - nonce: The nonce of the sent message. - fee: The LayerZero fee incurred for the message.\",\"params\":{\"_fee\":\"The calculated fee for the send() operation. - nativeFee: The native fee. - lzTokenFee: The lzToken fee.\",\"_refundAddress\":\"The address to receive any excess funds.\",\"_sendParam\":\"The parameters for the send operation.\"},\"returns\":{\"msgReceipt\":\"The receipt for the send operation.\",\"oftReceipt\":\"The OFT receipt information.\"}},\"setDelegate(address)\":{\"details\":\"Only the owner/admin of the OApp can call this function.Provides the ability for a delegate to set configs, on behalf of the OApp, directly on the Endpoint contract.\",\"params\":{\"_delegate\":\"The address of the delegate to be set.\"}},\"setEnforcedOptions((uint32,uint16,bytes)[])\":{\"details\":\"Sets the enforced options for specific endpoint and message type combinations.Only the owner/admin of the OApp can call this function.Provides a way for the OApp to enforce things like paying for PreCrime, AND/OR minimum dst lzReceive gas amounts etc.These enforced options can vary as the potential options/execution on the remote may differ as per the msgType. eg. Amount of lzReceive() gas necessary to deliver a lzCompose() message adds overhead you dont want to pay if you are only making a standard LayerZero message ie. lzReceive() WITHOUT sendCompose().\",\"params\":{\"_enforcedOptions\":\"An array of EnforcedOptionParam structures specifying enforced options.\"}},\"setMsgInspector(address)\":{\"details\":\"Sets the message inspector address for the OFT.This is an optional contract that can be used to inspect both 'message' and 'options'.Set it to address(0) to disable it, or set it to a contract address to enable it.\",\"params\":{\"_msgInspector\":\"The address of the message inspector.\"}},\"setPeer(uint32,bytes32)\":{\"details\":\"Only the owner/admin of the OApp can call this function.Indicates that the peer is trusted to send LayerZero messages to this OApp.Set this to bytes32(0) to remove the peer address.Peer is a bytes32 to accommodate non-evm chains.\",\"params\":{\"_eid\":\"The endpoint ID.\",\"_peer\":\"The address of the peer to be associated with the corresponding endpoint.\"}},\"setPreCrime(address)\":{\"details\":\"Sets the preCrime contract address.\",\"params\":{\"_preCrime\":\"The address of the preCrime contract.\"}},\"sharedDecimals()\":{\"details\":\"Retrieves the shared decimals of the OFT.Sets an implicit cap on the amount of tokens, over uint64.max() will need some sort of outbound cap / totalSupply cap Lowest common decimal denominator between chains. Defaults to 6 decimal places to provide up to 18,446,744,073,709.551615 units (max uint64). For tokens exceeding this totalSupply(), they will need to override the sharedDecimals function with something smaller. ie. 4 sharedDecimals would be 1,844,674,407,370,955.1615\",\"returns\":{\"_0\":\"The shared decimals of the OFT.\"}},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"token()\":{\"details\":\"Retrieves the address of the underlying ERC20 implementation.In the case of OFT, address(this) and erc20 are the same contract.\",\"returns\":{\"_0\":\"The address of the OFT token.\"}},\"totalSupply()\":{\"details\":\"See {IERC20-totalSupply}.\"},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `value`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC20-transferFrom}. Skips emitting an {Approval} event indicating an allowance update. This is not required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve]. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `value`. - the caller must have allowance for ``from``'s tokens of at least `value`.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"allowInitializePath((uint32,bytes32,uint64))\":{\"notice\":\"Checks if the path initialization is allowed based on the provided origin.\"},\"approvalRequired()\":{\"notice\":\"Indicates whether the OFT contract requires approval of the 'token()' to send.\"},\"combineOptions(uint32,uint16,bytes)\":{\"notice\":\"Combines options for a given endpoint and message type.\"},\"endpoint()\":{\"notice\":\"Retrieves the LayerZero endpoint associated with the OApp.\"},\"isComposeMsgSender((uint32,bytes32,uint64),bytes,address)\":{\"notice\":\"Indicates whether an address is an approved composeMsg sender to the Endpoint.\"},\"nextNonce(uint32,bytes32)\":{\"notice\":\"Retrieves the next nonce for a given source endpoint and sender address.\"},\"oAppVersion()\":{\"notice\":\"Retrieves the OApp version information.\"},\"oftVersion()\":{\"notice\":\"Retrieves interfaceID and the version of the OFT.\"},\"peers(uint32)\":{\"notice\":\"Retrieves the peer (OApp) associated with a corresponding endpoint.\"},\"quoteOFT((uint32,bytes32,uint256,uint256,bytes,bytes,bytes))\":{\"notice\":\"Provides the fee breakdown and settings data for an OFT. Unused in the default implementation.\"},\"quoteSend((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),bool)\":{\"notice\":\"Provides a quote for the send() operation.\"},\"setDelegate(address)\":{\"notice\":\"Sets the delegate address for the OApp.\"},\"setPeer(uint32,bytes32)\":{\"notice\":\"Sets the peer address (OApp instance) for a corresponding endpoint.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/MyOFT.sol\":\"MyOFT\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"contracts/MyOFT.sol\":{\"keccak256\":\"0x903ef3775b76a5c87c69530c8c70b97b3474317b72dae1967b4cc3e00bbb3042\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://5f4f7d41ee11fe4ba4a46e3b0efde626c870d9fd81f8532442bbb206c59cbbda\",\"dweb:/ipfs/QmTppfkueRqajda2A4jZqQJhd99ZXfhqQfjSW62shmekna\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\":{\"keccak256\":\"0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bacc29fd3866af71e59cb0bdc1cf82c882a4a7f4e2652fd413c9f12649762083\",\"dweb:/ipfs/QmZh2toLnrQDWaNYhS5K4NoW7Vxd2GdZx9KA77vKEDLAqs\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol\":{\"keccak256\":\"0x9641abba8d53b08bb517d1b74801dd15ea7b84d77a6719085bd96c8ea94e3ca0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://77415ae0820859e0faf3fabdce683cce9fa03ea026ae0f6fe081ef1c9205f933\",\"dweb:/ipfs/QmXd7APqoCunQ2jYy73AHvi5gsZofLpm3SzM6FPo7zRPfL\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol\":{\"keccak256\":\"0x5cf5f24751b4e3ea1c9c5ded07cedfdfd62566b6daaffcc0144733859c9dba0c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cae7e35007a714f007ea08045ef7c0cfa6c91fd2425b5028b2d49abad357a5f0\",\"dweb:/ipfs/QmcDBs5tsiyB35b8cwzWQWNnpkawb3uuHRaqE77Hxm2tve\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol\":{\"keccak256\":\"0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d8ff6a8a89297fa127f86b54e0db3eba1d6a6eeb4f6398d3c84d569665ac8f1b\",\"dweb:/ipfs/QmVSwhw6xFDrLRAX4RXaCM47yBaBtac4wf36DYEq6KCTvT\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol\":{\"keccak256\":\"0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7e1b245d58221d16d8b5e0f01ef3e289a24a7df1ace3b94239e4d5b954ad5927\",\"dweb:/ipfs/Qmappsgp7PCY9rSSNE9Cdn4BTRX591WfCSEgq2HxhA3z6S\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol\":{\"keccak256\":\"0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b18b23a1643fc6636c4ad9d9023e2e6ca2d3c2a4a046482d4655bff09950598d\",\"dweb:/ipfs/Qma6G5SqiovwrMPfgqTrRngK1HWW373Wkf9c6YP2NhXpPk\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol\":{\"keccak256\":\"0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5173fc9143bea314b159ca5a9adb5626659ef763bc598e27de5fa46efe3291a6\",\"dweb:/ipfs/QmSLFeMFPmVeGxT4sxRPW28ictjAS22M8rLeYRu9TXkA6D\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol\":{\"keccak256\":\"0xf1c07bc61e7b1dce195ed12d50f87980fbf2d63cac1326fd28287f55fe0ba625\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://060f10ff7afc33c1c2f2b4b5ba29231fd3c943146488084d0e4ab99fce991d97\",\"dweb:/ipfs/QmaSsefAqqEqtf8FgFUmDYMwTsAty3X1pqDb6SiFvry6B3\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol\":{\"keccak256\":\"0x2ebbcaaab3554edcd41b581f1a72ac1806afbfb8047d0d47ff098f9af30d6deb\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://2d4b2cf5c3b16dc76c6767f285b57c0af917972327b2be3f7cba5825402f5fc1\",\"dweb:/ipfs/QmQQWiHE2jKEDbjzGutSoZwtApSXYfLqZt5CxEpFj8xyvT\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol\":{\"keccak256\":\"0xc84cf1bf785977fe1fbe7566eef902c2db68d0e163813ebe6c34921754802680\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://de686666fc16fa432d4208d85cec87dc952faf3e481b683b9adf4b4610db4b09\",\"dweb:/ipfs/QmdmQeopzmxqRzi9DNB4EJDrYUXFfD7fUhnGhSni4QejUW\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OApp.sol\":{\"keccak256\":\"0xac362c4c291fad2f1511a968424b2e78a5ad502d1c867bd31da04be742aca8c5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e1f8cf9f20a2b683a53c3883972aa0676af97a24c678f461fae08e1fb056df28\",\"dweb:/ipfs/QmPpKNqda3rgxDwnq3XiRTtT3NfWeqrCJT6LwmhYd2AoT2\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppCore.sol\":{\"keccak256\":\"0x13a9c2d1d2c1f086b8624f2e84c4a4702212daae36f701d92bb915b535cbe4cc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://606515dd9193551bd2c94ac8c304f3776fafcc70e544ebf441f334658b2fd5f0\",\"dweb:/ipfs/QmZ88ey7DdZqV5taAoebabvszX5kdPMSrQCAmTteVdDtcH\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppReceiver.sol\":{\"keccak256\":\"0x0174e9f1ec4cefe4b5adc26c392269c699b9ff75965364e5b7264426a462c70b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cd12bb4fe5802c53911b9a0081a2ea10639b1f99925d1e5c1b1421d1bdc17075\",\"dweb:/ipfs/QmZonarwbKiEwQ8qoASKur2bbMjusdy9pqK9RCR4P1YPtc\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppSender.sol\":{\"keccak256\":\"0x518cf4adca601923ed4baa6619846a253ea32b8d8775f8bc1faa3dfac7f67c20\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d42b471418efadcc3577ef3fa9f8f504e8bed7db90c3b0c862038d8b29529eb2\",\"dweb:/ipfs/QmZETDQiJN4U92fmLKo8T9ZbdDf7BNBUUvo9H7M7GqAyFU\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppCore.sol\":{\"keccak256\":\"0x40e49f2de74506e1da5dcaed53a39853f691647f4ceb0fccc8f49a68d3f47c58\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4a1deb2a6a3eb1fb83936c9578469142bff470295f403d7d07d955a76be3adbd\",\"dweb:/ipfs/QmS9bjSfBaE4YhQ1PCQ1TknbEPbNfRXzBK9E7SaPGyiZEv\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppMsgInspector.sol\":{\"keccak256\":\"0x339654e699043c400cad92de209aa23855ce10211c31cf4114042cc5224d3b7c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5222afde59bf086f67b39e0288ad36343f4f5ed683d250533f256a5db956f37e\",\"dweb:/ipfs/QmbEG9EMYsK3Y6Cz7QbNtkW4kHGzMuhp2y2seSoL8v1A5b\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppOptionsType3.sol\":{\"keccak256\":\"0x9fc08a51e9d7c9c710c4eb26f84fe77228305ad7da63fa486ff24ebf2f3bc461\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2e2eea8a93bb9fc3f629767118b362e9b4bda2443ff95eae21c6a894f3e334cc\",\"dweb:/ipfs/QmPRRNjAB4U19ke4gr3U7ZJGtdcVBxdXVBZ2BmB1riFkP7\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppReceiver.sol\":{\"keccak256\":\"0xd26135185e19b3732746d4a9e2923e896f28dec8664bab161faea2ee26fcdc3d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c236dfe386b508be33c3a1a74ae1d4fd64b8c77ae207767e9dbed0f2429518a2\",\"dweb:/ipfs/QmXVbZJjfryTRti98uN3BMh5qh4K7NuEs1RSCoBjRoYd4q\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/libs/OAppOptionsType3.sol\":{\"keccak256\":\"0x5275636cd47e660a2fdf6c7fe9d41ff3cc866b785cc8a9d88c1b8ca983509f01\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a59dd6e3cfcc332f45a13d44585eb228588c4b9d470cbb19852df5753a4571af\",\"dweb:/ipfs/QmQJF1QU3MKhvmw42eq61u9z3bzKJJKMsEdQVYyPyYgTVS\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/precrime/OAppPreCrimeSimulator.sol\":{\"keccak256\":\"0x205a0abfd8b3c9af2740769f251381b84999b8e9347f3cd50de3ef8290a17750\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d9778d7d5da941af2029410b6ac212f915ea1785573ae2865b0ed8f779fcca82\",\"dweb:/ipfs/QmNkVEkfecvgubgnMuaT5fEfSExd95vz8DQHhpZtMrVRjH\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IOAppPreCrimeSimulator.sol\":{\"keccak256\":\"0x5d24db150949ea8e6437178e65a942e8c8b7f332e5daf32750f56b23b35b5bb2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1b1dcea0267234654126f926a1b405743606d7b5e49185b621afb7bd94d18b9a\",\"dweb:/ipfs/QmZ9BXQmbWJcrhHKuBs4yhNtbCV5WUpUY3AXSX7rkWwX6y\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IPreCrime.sol\":{\"keccak256\":\"0xc8d869f27ef8ceb2e13fdf6a70682fd4dee3f90c4924eb8e125bc1e66cb6af84\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://66bf49d59c14832ea0ddddcd12d512d4f9bd0fd254a1368442587bf3e77fe73e\",\"dweb:/ipfs/QmYUAvsyuUPiSYjbL4zVo6ZtiRSLCUPDvCesqgdZWbSGDg\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/precrime/libs/Packet.sol\":{\"keccak256\":\"0xcb2fb1c5b2eb3731de78b479b9c2ab3bba326fe0b0b3a008590f18e881e457a6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f70724c61d226743c2bd8ba6c09758805e4339780978949ce5b333c106be4edc\",\"dweb:/ipfs/QmX5rV9K1N7RgTz9xtf8CDG8SrYiitGAzFh9ec2tbnEec4\"]},\"node_modules/@layerzerolabs/oft-evm/contracts/OFT.sol\":{\"keccak256\":\"0xdc3582e4a20e02a79050c17058a1f1f42a4335d1a70be06c0a52a3fb05d4c89a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://83c4bd42e68528246860a952a92a79e51e3a789dac79a0b62576ab2f609de9c7\",\"dweb:/ipfs/QmVj1x655j1cFTnPT8uBaM71TCSrhFVwPdoFkAkWhhadns\"]},\"node_modules/@layerzerolabs/oft-evm/contracts/OFTCore.sol\":{\"keccak256\":\"0x9ce49b83455df600b52538e42028c422a322643f7ffb4f2814c72c3b970ea7be\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2ebbf79612c3f6cd4e2754ba55519df6b89504ab5514e3517cbd286d87143997\",\"dweb:/ipfs/QmQZpSPhNhF4MESb2if2DbcjC75xfuoEzDGXmeJKYZtHZ5\"]},\"node_modules/@layerzerolabs/oft-evm/contracts/interfaces/IOFT.sol\":{\"keccak256\":\"0x7ba6bb62fba7ee83451cfb0e727ddeef0e96b4388bd4e9ff0fc6ce103e1101c8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cfbd447f2e8a730bd46a14c3c3e6a0b2bf7446145579603a9793ba5ac1dd38b4\",\"dweb:/ipfs/QmZ4nx4iGrFmBHvYFgki5TXFdCHz4Co38hgdgwpRaM7NLs\"]},\"node_modules/@layerzerolabs/oft-evm/contracts/libs/OFTComposeMsgCodec.sol\":{\"keccak256\":\"0xaae73d6eb8b9561c43f1802f3c416c00ccd35f172b711f9781ccdf1b25a40db5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7beda2d895ae9e15269dd261a492ce0a29b498e5bebf088ed6f2ae6a5185719e\",\"dweb:/ipfs/QmScog2tW1YVyEPLVcUVqGGc85ub46sA28nUKNzFEZcFdK\"]},\"node_modules/@layerzerolabs/oft-evm/contracts/libs/OFTMsgCodec.sol\":{\"keccak256\":\"0x5358948017669c03e157f871d8c38e988f9004dbd0801ad3119d2487f0d40b0b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c7d0f1bf32a80af9b99cd93fefa373dac5c27463351cc35f62b9c2439d5b9258\",\"dweb:/ipfs/Qmb81qoxzMwV3PkPANRvnXf4fJTsZ5sjJ8r2df9V2vhh6q\"]},\"node_modules/@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol\":{\"keccak256\":\"0x9b6b3e7803bc5f2f8cd7ad57db8ac1def61a9930a5a3107df4882e028a9605d7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://da62d6be1f5c6edf577f0cb45666a8aa9c2086a4bac87d95d65f02e2f4c36a4b\",\"dweb:/ipfs/QmNkpvBpoCMvX8JwAFNSc5XxJ2q5BXJpL5L1txb4QkqVFF\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC165.sol\":{\"keccak256\":\"0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://11fea9f8bc98949ac6709f0c1699db7430d2948137aa94d5a9e95a91f61a710a\",\"dweb:/ipfs/QmQdfRXxQjwP6yn3DVo1GHPpriKNcFghSPi94Z1oKEFUNS\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC20.sol\":{\"keccak256\":\"0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a2608291cb038b388d80b79a06b6118a42f7894ff67b7da10ec0dbbf5b2973ba\",\"dweb:/ipfs/QmWohqcBLbcxmA4eGPhZDXe5RYMMEEpFq22nfkaUMvTfw1\"]},\"node_modules/@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x880da465c203cec76b10d72dbd87c80f387df4102274f23eea1f9c9b0918792b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://399594cd8bb0143bc9e55e0f1d071d0d8c850a394fb7a319d50edd55d9ed822b\",\"dweb:/ipfs/QmbPZzgtT6LEm9CMqWfagQFwETbV1ztpECBB1DtQHrKiRz\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0xbf61ab2ae1d575a17ea58fbb99ca232baddcc4e0eeea180e84cbc74b0c348b31\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4e0968705bad99747a8e5288aa008678c2be2f471f919dce3925a3cc4f1dee09\",\"dweb:/ipfs/QmbAFnCQfo4tw6ssfQSjhA5LzwHWNNryXN8bX7ty8jiqqn\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db\",\"dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x70f2f713b13b7ce4610bcd0ac9fec0f3cc43693b043abcb8dc40a42a726eb330\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c13d13304ac79a83ab1c30168967d19e2203342ebbd6a9bbce4db7550522dcbf\",\"dweb:/ipfs/QmeN5jKMN2vw5bhacr6tkg78afbTTZUeaacNHqjWt4Ew1r\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0xca2ae13e0610f6a99238dd00b97bd786bc92732dae6d6b9d61f573ec51018310\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://75f8c71ce0c91c40dd5f249ace0b7d8270f8f1767231bcf71490f7157d6ba862\",\"dweb:/ipfs/QmYXgxeDyFHvz3JsXxLEYN6GNUR44ThHeFj5XkpkgMoG4w\"]},\"node_modules/@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0x9d8da059267bac779a2dbbb9a26c2acf00ca83085e105d62d5d4ef96054a47f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c78e2aa4313323cecd1ef12a8d6265b96beee1a199923abf55d9a2a9e291ad23\",\"dweb:/ipfs/QmUTs2KStXucZezzFo3EYeqYu47utu56qrF7jj1Gue65vb\"]},\"node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"node_modules/@openzeppelin/contracts/utils/Errors.sol\":{\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf\",\"dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB\"]},\"node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { - "inputs": [ - { "internalType": "string", "name": "_name", "type": "string" }, - { "internalType": "string", "name": "_symbol", "type": "string" }, - { - "internalType": "address", - "name": "_lzEndpoint", - "type": "address" - }, - { - "internalType": "address", - "name": "_delegate", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [ - { "internalType": "address", "name": "spender", "type": "address" }, - { - "internalType": "uint256", - "name": "allowance", - "type": "uint256" - }, - { "internalType": "uint256", "name": "needed", "type": "uint256" } - ], - "type": "error", - "name": "ERC20InsufficientAllowance" - }, - { - "inputs": [ - { "internalType": "address", "name": "sender", "type": "address" }, - { "internalType": "uint256", "name": "balance", "type": "uint256" }, - { "internalType": "uint256", "name": "needed", "type": "uint256" } - ], - "type": "error", - "name": "ERC20InsufficientBalance" - }, - { - "inputs": [ - { "internalType": "address", "name": "approver", "type": "address" } - ], - "type": "error", - "name": "ERC20InvalidApprover" - }, - { - "inputs": [ - { "internalType": "address", "name": "receiver", "type": "address" } - ], - "type": "error", - "name": "ERC20InvalidReceiver" - }, - { - "inputs": [ - { "internalType": "address", "name": "sender", "type": "address" } - ], - "type": "error", - "name": "ERC20InvalidSender" - }, - { - "inputs": [ - { "internalType": "address", "name": "spender", "type": "address" } - ], - "type": "error", - "name": "ERC20InvalidSpender" - }, - { "inputs": [], "type": "error", "name": "InvalidDelegate" }, - { "inputs": [], "type": "error", "name": "InvalidEndpointCall" }, - { "inputs": [], "type": "error", "name": "InvalidLocalDecimals" }, - { - "inputs": [ - { "internalType": "bytes", "name": "options", "type": "bytes" } - ], - "type": "error", - "name": "InvalidOptions" - }, - { "inputs": [], "type": "error", "name": "LzTokenUnavailable" }, - { - "inputs": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" } - ], - "type": "error", - "name": "NoPeer" - }, - { - "inputs": [ - { "internalType": "uint256", "name": "msgValue", "type": "uint256" } - ], - "type": "error", - "name": "NotEnoughNative" - }, - { - "inputs": [ - { "internalType": "address", "name": "addr", "type": "address" } - ], - "type": "error", - "name": "OnlyEndpoint" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" }, - { "internalType": "bytes32", "name": "sender", "type": "bytes32" } - ], - "type": "error", - "name": "OnlyPeer" - }, - { "inputs": [], "type": "error", "name": "OnlySelf" }, - { - "inputs": [ - { "internalType": "address", "name": "owner", "type": "address" } - ], - "type": "error", - "name": "OwnableInvalidOwner" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "type": "error", - "name": "OwnableUnauthorizedAccount" - }, - { - "inputs": [ - { "internalType": "address", "name": "token", "type": "address" } - ], - "type": "error", - "name": "SafeERC20FailedOperation" - }, - { - "inputs": [ - { "internalType": "bytes", "name": "result", "type": "bytes" } - ], - "type": "error", - "name": "SimulationResult" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "amountLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minAmountLD", - "type": "uint256" - } - ], - "type": "error", - "name": "SlippageExceeded" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address", - "indexed": true - }, - { - "internalType": "address", - "name": "spender", - "type": "address", - "indexed": true - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "Approval", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "struct EnforcedOptionParam[]", - "name": "_enforcedOptions", - "type": "tuple[]", - "components": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" }, - { - "internalType": "uint16", - "name": "msgType", - "type": "uint16" - }, - { "internalType": "bytes", "name": "options", "type": "bytes" } - ], - "indexed": false - } - ], - "type": "event", - "name": "EnforcedOptionSet", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "inspector", - "type": "address", - "indexed": false - } - ], - "type": "event", - "name": "MsgInspectorSet", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "guid", - "type": "bytes32", - "indexed": true - }, - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32", - "indexed": false - }, - { - "internalType": "address", - "name": "toAddress", - "type": "address", - "indexed": true - }, - { - "internalType": "uint256", - "name": "amountReceivedLD", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "OFTReceived", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "guid", - "type": "bytes32", - "indexed": true - }, - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32", - "indexed": false - }, - { - "internalType": "address", - "name": "fromAddress", - "type": "address", - "indexed": true - }, - { - "internalType": "uint256", - "name": "amountSentLD", - "type": "uint256", - "indexed": false - }, - { - "internalType": "uint256", - "name": "amountReceivedLD", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "OFTSent", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "previousOwner", - "type": "address", - "indexed": true - }, - { - "internalType": "address", - "name": "newOwner", - "type": "address", - "indexed": true - } - ], - "type": "event", - "name": "OwnershipTransferred", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "eid", - "type": "uint32", - "indexed": false - }, - { - "internalType": "bytes32", - "name": "peer", - "type": "bytes32", - "indexed": false - } - ], - "type": "event", - "name": "PeerSet", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "preCrimeAddress", - "type": "address", - "indexed": false - } - ], - "type": "event", - "name": "PreCrimeSet", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address", - "indexed": true - }, - { - "internalType": "address", - "name": "to", - "type": "address", - "indexed": true - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "Transfer", - "anonymous": false - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "SEND", - "outputs": [ - { "internalType": "uint16", "name": "", "type": "uint16" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "SEND_AND_CALL", - "outputs": [ - { "internalType": "uint16", "name": "", "type": "uint16" } - ] - }, - { - "inputs": [ - { - "internalType": "struct Origin", - "name": "origin", - "type": "tuple", - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { "internalType": "uint64", "name": "nonce", "type": "uint64" } - ] - } - ], - "stateMutability": "view", - "type": "function", - "name": "allowInitializePath", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "address", "name": "owner", "type": "address" }, - { "internalType": "address", "name": "spender", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "allowance", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ] - }, - { - "inputs": [], - "stateMutability": "pure", - "type": "function", - "name": "approvalRequired", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "address", "name": "spender", "type": "address" }, - { "internalType": "uint256", "name": "value", "type": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "approve", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "balanceOf", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ] - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { "internalType": "uint16", "name": "_msgType", "type": "uint16" }, - { - "internalType": "bytes", - "name": "_extraOptions", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function", - "name": "combineOptions", - "outputs": [{ "internalType": "bytes", "name": "", "type": "bytes" }] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "decimalConversionRate", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "decimals", - "outputs": [{ "internalType": "uint8", "name": "", "type": "uint8" }] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "endpoint", - "outputs": [ - { - "internalType": "contract ILayerZeroEndpointV2", - "name": "", - "type": "address" - } - ] - }, - { - "inputs": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" }, - { "internalType": "uint16", "name": "msgType", "type": "uint16" } - ], - "stateMutability": "view", - "type": "function", - "name": "enforcedOptions", - "outputs": [ - { - "internalType": "bytes", - "name": "enforcedOption", - "type": "bytes" - } - ] - }, - { - "inputs": [ - { - "internalType": "struct Origin", - "name": "", - "type": "tuple", - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { "internalType": "uint64", "name": "nonce", "type": "uint64" } - ] - }, - { "internalType": "bytes", "name": "", "type": "bytes" }, - { "internalType": "address", "name": "_sender", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "isComposeMsgSender", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { "internalType": "bytes32", "name": "_peer", "type": "bytes32" } - ], - "stateMutability": "view", - "type": "function", - "name": "isPeer", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { - "internalType": "struct Origin", - "name": "_origin", - "type": "tuple", - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { "internalType": "uint64", "name": "nonce", "type": "uint64" } - ] - }, - { "internalType": "bytes32", "name": "_guid", "type": "bytes32" }, - { "internalType": "bytes", "name": "_message", "type": "bytes" }, - { - "internalType": "address", - "name": "_executor", - "type": "address" - }, - { "internalType": "bytes", "name": "_extraData", "type": "bytes" } - ], - "stateMutability": "payable", - "type": "function", - "name": "lzReceive" - }, - { - "inputs": [ - { - "internalType": "struct InboundPacket[]", - "name": "_packets", - "type": "tuple[]", - "components": [ - { - "internalType": "struct Origin", - "name": "origin", - "type": "tuple", - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - } - ] - }, - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "guid", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "address", - "name": "executor", - "type": "address" - }, - { "internalType": "bytes", "name": "message", "type": "bytes" }, - { - "internalType": "bytes", - "name": "extraData", - "type": "bytes" - } - ] - } - ], - "stateMutability": "payable", - "type": "function", - "name": "lzReceiveAndRevert" - }, - { - "inputs": [ - { - "internalType": "struct Origin", - "name": "_origin", - "type": "tuple", - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { "internalType": "uint64", "name": "nonce", "type": "uint64" } - ] - }, - { "internalType": "bytes32", "name": "_guid", "type": "bytes32" }, - { "internalType": "bytes", "name": "_message", "type": "bytes" }, - { - "internalType": "address", - "name": "_executor", - "type": "address" - }, - { "internalType": "bytes", "name": "_extraData", "type": "bytes" } - ], - "stateMutability": "payable", - "type": "function", - "name": "lzReceiveSimulate" - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "msgInspector", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "name", - "outputs": [ - { "internalType": "string", "name": "", "type": "string" } - ] - }, - { - "inputs": [ - { "internalType": "uint32", "name": "", "type": "uint32" }, - { "internalType": "bytes32", "name": "", "type": "bytes32" } - ], - "stateMutability": "view", - "type": "function", - "name": "nextNonce", - "outputs": [ - { "internalType": "uint64", "name": "nonce", "type": "uint64" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "oApp", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ] - }, - { - "inputs": [], - "stateMutability": "pure", - "type": "function", - "name": "oAppVersion", - "outputs": [ - { - "internalType": "uint64", - "name": "senderVersion", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "receiverVersion", - "type": "uint64" - } - ] - }, - { - "inputs": [], - "stateMutability": "pure", - "type": "function", - "name": "oftVersion", - "outputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - }, - { "internalType": "uint64", "name": "version", "type": "uint64" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "owner", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ] - }, - { - "inputs": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" } - ], - "stateMutability": "view", - "type": "function", - "name": "peers", - "outputs": [ - { "internalType": "bytes32", "name": "peer", "type": "bytes32" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "preCrime", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ] - }, - { - "inputs": [ - { - "internalType": "struct SendParam", - "name": "_sendParam", - "type": "tuple", - "components": [ - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { "internalType": "bytes32", "name": "to", "type": "bytes32" }, - { - "internalType": "uint256", - "name": "amountLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minAmountLD", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "extraOptions", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "composeMsg", - "type": "bytes" - }, - { "internalType": "bytes", "name": "oftCmd", "type": "bytes" } - ] - } - ], - "stateMutability": "view", - "type": "function", - "name": "quoteOFT", - "outputs": [ - { - "internalType": "struct OFTLimit", - "name": "oftLimit", - "type": "tuple", - "components": [ - { - "internalType": "uint256", - "name": "minAmountLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxAmountLD", - "type": "uint256" - } - ] - }, - { - "internalType": "struct OFTFeeDetail[]", - "name": "oftFeeDetails", - "type": "tuple[]", - "components": [ - { - "internalType": "int256", - "name": "feeAmountLD", - "type": "int256" - }, - { - "internalType": "string", - "name": "description", - "type": "string" - } - ] - }, - { - "internalType": "struct OFTReceipt", - "name": "oftReceipt", - "type": "tuple", - "components": [ - { - "internalType": "uint256", - "name": "amountSentLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "amountReceivedLD", - "type": "uint256" - } - ] - } - ] - }, - { - "inputs": [ - { - "internalType": "struct SendParam", - "name": "_sendParam", - "type": "tuple", - "components": [ - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { "internalType": "bytes32", "name": "to", "type": "bytes32" }, - { - "internalType": "uint256", - "name": "amountLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minAmountLD", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "extraOptions", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "composeMsg", - "type": "bytes" - }, - { "internalType": "bytes", "name": "oftCmd", "type": "bytes" } - ] - }, - { "internalType": "bool", "name": "_payInLzToken", "type": "bool" } - ], - "stateMutability": "view", - "type": "function", - "name": "quoteSend", - "outputs": [ - { - "internalType": "struct MessagingFee", - "name": "msgFee", - "type": "tuple", - "components": [ - { - "internalType": "uint256", - "name": "nativeFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "lzTokenFee", - "type": "uint256" - } - ] - } - ] - }, - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "function", - "name": "renounceOwnership" - }, - { - "inputs": [ - { - "internalType": "struct SendParam", - "name": "_sendParam", - "type": "tuple", - "components": [ - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { "internalType": "bytes32", "name": "to", "type": "bytes32" }, - { - "internalType": "uint256", - "name": "amountLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minAmountLD", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "extraOptions", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "composeMsg", - "type": "bytes" - }, - { "internalType": "bytes", "name": "oftCmd", "type": "bytes" } - ] - }, - { - "internalType": "struct MessagingFee", - "name": "_fee", - "type": "tuple", - "components": [ - { - "internalType": "uint256", - "name": "nativeFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "lzTokenFee", - "type": "uint256" - } - ] - }, - { - "internalType": "address", - "name": "_refundAddress", - "type": "address" - } - ], - "stateMutability": "payable", - "type": "function", - "name": "send", - "outputs": [ - { - "internalType": "struct MessagingReceipt", - "name": "msgReceipt", - "type": "tuple", - "components": [ - { - "internalType": "bytes32", - "name": "guid", - "type": "bytes32" - }, - { "internalType": "uint64", "name": "nonce", "type": "uint64" }, - { - "internalType": "struct MessagingFee", - "name": "fee", - "type": "tuple", - "components": [ - { - "internalType": "uint256", - "name": "nativeFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "lzTokenFee", - "type": "uint256" - } - ] - } - ] - }, - { - "internalType": "struct OFTReceipt", - "name": "oftReceipt", - "type": "tuple", - "components": [ - { - "internalType": "uint256", - "name": "amountSentLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "amountReceivedLD", - "type": "uint256" - } - ] - } - ] - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_delegate", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setDelegate" - }, - { - "inputs": [ - { - "internalType": "struct EnforcedOptionParam[]", - "name": "_enforcedOptions", - "type": "tuple[]", - "components": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" }, - { - "internalType": "uint16", - "name": "msgType", - "type": "uint16" - }, - { "internalType": "bytes", "name": "options", "type": "bytes" } - ] - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setEnforcedOptions" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_msgInspector", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setMsgInspector" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { "internalType": "bytes32", "name": "_peer", "type": "bytes32" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setPeer" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_preCrime", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setPreCrime" - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "sharedDecimals", - "outputs": [{ "internalType": "uint8", "name": "", "type": "uint8" }] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "symbol", - "outputs": [ - { "internalType": "string", "name": "", "type": "string" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "token", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "totalSupply", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "to", "type": "address" }, - { "internalType": "uint256", "name": "value", "type": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "transfer", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "address", "name": "from", "type": "address" }, - { "internalType": "address", "name": "to", "type": "address" }, - { "internalType": "uint256", "name": "value", "type": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "transferFrom", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "address", "name": "newOwner", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "transferOwnership" - } - ], - "devdoc": { - "kind": "dev", - "methods": { - "allowInitializePath((uint32,bytes32,uint64))": { - "details": "This indicates to the endpoint that the OApp has enabled msgs for this particular path to be received.This defaults to assuming if a peer has been set, its initialized. Can be overridden by the OApp if there is other logic to determine this.", - "params": { - "origin": "The origin information containing the source endpoint and sender address." - }, - "returns": { "_0": "Whether the path has been initialized." } - }, - "allowance(address,address)": { - "details": "See {IERC20-allowance}." - }, - "approvalRequired()": { - "details": "In the case of OFT where the contract IS the token, approval is NOT required.", - "returns": { - "_0": "requiresApproval Needs approval of the underlying token implementation." - } - }, - "approve(address,uint256)": { - "details": "See {IERC20-approve}. NOTE: If `value` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address." - }, - "balanceOf(address)": { "details": "See {IERC20-balanceOf}." }, - "combineOptions(uint32,uint16,bytes)": { - "details": "If there is an enforced lzReceive option: - {gasLimit: 200k, msg.value: 1 ether} AND a caller supplies a lzReceive option: {gasLimit: 100k, msg.value: 0.5 ether} - The resulting options will be {gasLimit: 300k, msg.value: 1.5 ether} when the message is executed on the remote lzReceive() function.This presence of duplicated options is handled off-chain in the verifier/executor.", - "params": { - "_eid": "The endpoint ID.", - "_extraOptions": "Additional options passed by the caller.", - "_msgType": "The OAPP message type." - }, - "returns": { - "_0": "options The combination of caller specified options AND enforced options." - } - }, - "decimals()": { - "details": "Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the default value returned by this function, unless it's overridden. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}." - }, - "isComposeMsgSender((uint32,bytes32,uint64),bytes,address)": { - "details": "_origin The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message._message The lzReceive payload.Applications can optionally choose to implement separate composeMsg senders that are NOT the bridging layer.The default sender IS the OAppReceiver implementer.", - "params": { "_sender": "The sender address." }, - "returns": { "_0": "isSender Is a valid sender." } - }, - "isPeer(uint32,bytes32)": { - "details": "Check if the peer is considered 'trusted' by the OApp.Enables OAppPreCrimeSimulator to check whether a potential Inbound Packet is from a trusted source.", - "params": { - "_eid": "The endpoint ID to check.", - "_peer": "The peer to check." - }, - "returns": { - "_0": "Whether the peer passed is considered 'trusted' by the OApp." - } - }, - "lzReceive((uint32,bytes32,uint64),bytes32,bytes,address,bytes)": { - "details": "Entry point for receiving messages or packets from the endpoint.Entry point for receiving msg/packet from the LayerZero endpoint.", - "params": { - "_executor": "The address of the executor for the received message.", - "_extraData": "Additional arbitrary data provided by the corresponding executor.", - "_guid": "The unique identifier for the received LayerZero message.", - "_message": "The payload of the received message.", - "_origin": "The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message." - } - }, - "lzReceiveAndRevert(((uint32,bytes32,uint64),uint32,address,bytes32,uint256,address,bytes,bytes)[])": { - "details": "Interface for pre-crime simulations. Always reverts at the end with the simulation results.WARNING: MUST revert at the end with the simulation results.Gives the preCrime implementation the ability to mock sending packets to the lzReceive function, WITHOUT actually executing them.", - "params": { - "_packets": "An array of InboundPacket objects representing received packets to be delivered." - } - }, - "lzReceiveSimulate((uint32,bytes32,uint64),bytes32,bytes,address,bytes)": { - "details": "Is effectively an internal function because msg.sender must be address(this). Allows resetting the call stack for 'internal' calls.", - "params": { - "_executor": "The executor address for the packet.", - "_extraData": "Additional data for the packet.", - "_guid": "The unique identifier of the packet.", - "_message": "The message payload of the packet.", - "_origin": "The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message." - } - }, - "name()": { "details": "Returns the name of the token." }, - "nextNonce(uint32,bytes32)": { - "details": "_srcEid The source endpoint ID._sender The sender address.The path nonce starts from 1. If 0 is returned it means that there is NO nonce ordered enforcement.Is required by the off-chain executor to determine the OApp expects msg execution is ordered.This is also enforced by the OApp.By default this is NOT enabled. ie. nextNonce is hardcoded to return 0.", - "returns": { "nonce": "The next nonce." } - }, - "oApp()": { - "details": "Retrieves the address of the OApp contract.The simulator contract is the base contract for the OApp by default.If the simulator is a separate contract, override this function.", - "returns": { "_0": "The address of the OApp contract." } - }, - "oAppVersion()": { - "returns": { - "receiverVersion": "The version of the OAppReceiver.sol implementation.", - "senderVersion": "The version of the OAppSender.sol implementation." - } - }, - "oftVersion()": { - "details": "interfaceId: This specific interface ID is '0x02e49c2c'.version: Indicates a cross-chain compatible msg encoding with other OFTs.If a new feature is added to the OFT cross-chain msg encoding, the version will be incremented. ie. localOFT version(x,1) CAN send messages to remoteOFT version(x,1)", - "returns": { - "interfaceId": "The interface ID.", - "version": "The version." - } - }, - "owner()": { "details": "Returns the address of the current owner." }, - "quoteOFT((uint32,bytes32,uint256,uint256,bytes,bytes,bytes))": { - "params": { - "_sendParam": "The parameters for the send operation." - }, - "returns": { - "oftFeeDetails": "The details of OFT fees.", - "oftLimit": "The OFT limit information.", - "oftReceipt": "The OFT receipt information." - } - }, - "quoteSend((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),bool)": { - "details": "MessagingFee: LayerZero msg fee - nativeFee: The native fee. - lzTokenFee: The lzToken fee.", - "params": { - "_payInLzToken": "Flag indicating whether the caller is paying in the LZ token.", - "_sendParam": "The parameters for the send() operation." - }, - "returns": { - "msgFee": "The calculated LayerZero messaging fee from the send() operation." - } - }, - "renounceOwnership()": { - "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner." - }, - "send((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),(uint256,uint256),address)": { - "details": "Executes the send operation.MessagingReceipt: LayerZero msg receipt - guid: The unique identifier for the sent message. - nonce: The nonce of the sent message. - fee: The LayerZero fee incurred for the message.", - "params": { - "_fee": "The calculated fee for the send() operation. - nativeFee: The native fee. - lzTokenFee: The lzToken fee.", - "_refundAddress": "The address to receive any excess funds.", - "_sendParam": "The parameters for the send operation." - }, - "returns": { - "msgReceipt": "The receipt for the send operation.", - "oftReceipt": "The OFT receipt information." - } - }, - "setDelegate(address)": { - "details": "Only the owner/admin of the OApp can call this function.Provides the ability for a delegate to set configs, on behalf of the OApp, directly on the Endpoint contract.", - "params": { "_delegate": "The address of the delegate to be set." } - }, - "setEnforcedOptions((uint32,uint16,bytes)[])": { - "details": "Sets the enforced options for specific endpoint and message type combinations.Only the owner/admin of the OApp can call this function.Provides a way for the OApp to enforce things like paying for PreCrime, AND/OR minimum dst lzReceive gas amounts etc.These enforced options can vary as the potential options/execution on the remote may differ as per the msgType. eg. Amount of lzReceive() gas necessary to deliver a lzCompose() message adds overhead you dont want to pay if you are only making a standard LayerZero message ie. lzReceive() WITHOUT sendCompose().", - "params": { - "_enforcedOptions": "An array of EnforcedOptionParam structures specifying enforced options." - } - }, - "setMsgInspector(address)": { - "details": "Sets the message inspector address for the OFT.This is an optional contract that can be used to inspect both 'message' and 'options'.Set it to address(0) to disable it, or set it to a contract address to enable it.", - "params": { - "_msgInspector": "The address of the message inspector." - } - }, - "setPeer(uint32,bytes32)": { - "details": "Only the owner/admin of the OApp can call this function.Indicates that the peer is trusted to send LayerZero messages to this OApp.Set this to bytes32(0) to remove the peer address.Peer is a bytes32 to accommodate non-evm chains.", - "params": { - "_eid": "The endpoint ID.", - "_peer": "The address of the peer to be associated with the corresponding endpoint." - } - }, - "setPreCrime(address)": { - "details": "Sets the preCrime contract address.", - "params": { "_preCrime": "The address of the preCrime contract." } - }, - "sharedDecimals()": { - "details": "Retrieves the shared decimals of the OFT.Sets an implicit cap on the amount of tokens, over uint64.max() will need some sort of outbound cap / totalSupply cap Lowest common decimal denominator between chains. Defaults to 6 decimal places to provide up to 18,446,744,073,709.551615 units (max uint64). For tokens exceeding this totalSupply(), they will need to override the sharedDecimals function with something smaller. ie. 4 sharedDecimals would be 1,844,674,407,370,955.1615", - "returns": { "_0": "The shared decimals of the OFT." } - }, - "symbol()": { - "details": "Returns the symbol of the token, usually a shorter version of the name." - }, - "token()": { - "details": "Retrieves the address of the underlying ERC20 implementation.In the case of OFT, address(this) and erc20 are the same contract.", - "returns": { "_0": "The address of the OFT token." } - }, - "totalSupply()": { "details": "See {IERC20-totalSupply}." }, - "transfer(address,uint256)": { - "details": "See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `value`." - }, - "transferFrom(address,address,uint256)": { - "details": "See {IERC20-transferFrom}. Skips emitting an {Approval} event indicating an allowance update. This is not required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve]. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `value`. - the caller must have allowance for ``from``'s tokens of at least `value`." - }, - "transferOwnership(address)": { - "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." - } - }, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": { - "allowInitializePath((uint32,bytes32,uint64))": { - "notice": "Checks if the path initialization is allowed based on the provided origin." - }, - "approvalRequired()": { - "notice": "Indicates whether the OFT contract requires approval of the 'token()' to send." - }, - "combineOptions(uint32,uint16,bytes)": { - "notice": "Combines options for a given endpoint and message type." - }, - "endpoint()": { - "notice": "Retrieves the LayerZero endpoint associated with the OApp." - }, - "isComposeMsgSender((uint32,bytes32,uint64),bytes,address)": { - "notice": "Indicates whether an address is an approved composeMsg sender to the Endpoint." - }, - "nextNonce(uint32,bytes32)": { - "notice": "Retrieves the next nonce for a given source endpoint and sender address." - }, - "oAppVersion()": { - "notice": "Retrieves the OApp version information." - }, - "oftVersion()": { - "notice": "Retrieves interfaceID and the version of the OFT." - }, - "peers(uint32)": { - "notice": "Retrieves the peer (OApp) associated with a corresponding endpoint." - }, - "quoteOFT((uint32,bytes32,uint256,uint256,bytes,bytes,bytes))": { - "notice": "Provides the fee breakdown and settings data for an OFT. Unused in the default implementation." - }, - "quoteSend((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),bool)": { - "notice": "Provides a quote for the send() operation." - }, - "setDelegate(address)": { - "notice": "Sets the delegate address for the OApp." - }, - "setPeer(uint32,bytes32)": { - "notice": "Sets the peer address (OApp instance) for a corresponding endpoint." - } - }, - "version": 1 - } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { "contracts/MyOFT.sol": "MyOFT" }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "contracts/MyOFT.sol": { - "keccak256": "0x903ef3775b76a5c87c69530c8c70b97b3474317b72dae1967b4cc3e00bbb3042", - "urls": [ - "bzz-raw://5f4f7d41ee11fe4ba4a46e3b0efde626c870d9fd81f8532442bbb206c59cbbda", - "dweb:/ipfs/QmTppfkueRqajda2A4jZqQJhd99ZXfhqQfjSW62shmekna" - ], - "license": "UNLICENSED" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol": { - "keccak256": "0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3", - "urls": [ - "bzz-raw://bacc29fd3866af71e59cb0bdc1cf82c882a4a7f4e2652fd413c9f12649762083", - "dweb:/ipfs/QmZh2toLnrQDWaNYhS5K4NoW7Vxd2GdZx9KA77vKEDLAqs" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol": { - "keccak256": "0x9641abba8d53b08bb517d1b74801dd15ea7b84d77a6719085bd96c8ea94e3ca0", - "urls": [ - "bzz-raw://77415ae0820859e0faf3fabdce683cce9fa03ea026ae0f6fe081ef1c9205f933", - "dweb:/ipfs/QmXd7APqoCunQ2jYy73AHvi5gsZofLpm3SzM6FPo7zRPfL" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol": { - "keccak256": "0x5cf5f24751b4e3ea1c9c5ded07cedfdfd62566b6daaffcc0144733859c9dba0c", - "urls": [ - "bzz-raw://cae7e35007a714f007ea08045ef7c0cfa6c91fd2425b5028b2d49abad357a5f0", - "dweb:/ipfs/QmcDBs5tsiyB35b8cwzWQWNnpkawb3uuHRaqE77Hxm2tve" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol": { - "keccak256": "0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc", - "urls": [ - "bzz-raw://d8ff6a8a89297fa127f86b54e0db3eba1d6a6eeb4f6398d3c84d569665ac8f1b", - "dweb:/ipfs/QmVSwhw6xFDrLRAX4RXaCM47yBaBtac4wf36DYEq6KCTvT" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol": { - "keccak256": "0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972", - "urls": [ - "bzz-raw://7e1b245d58221d16d8b5e0f01ef3e289a24a7df1ace3b94239e4d5b954ad5927", - "dweb:/ipfs/Qmappsgp7PCY9rSSNE9Cdn4BTRX591WfCSEgq2HxhA3z6S" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol": { - "keccak256": "0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901", - "urls": [ - "bzz-raw://b18b23a1643fc6636c4ad9d9023e2e6ca2d3c2a4a046482d4655bff09950598d", - "dweb:/ipfs/Qma6G5SqiovwrMPfgqTrRngK1HWW373Wkf9c6YP2NhXpPk" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol": { - "keccak256": "0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e", - "urls": [ - "bzz-raw://5173fc9143bea314b159ca5a9adb5626659ef763bc598e27de5fa46efe3291a6", - "dweb:/ipfs/QmSLFeMFPmVeGxT4sxRPW28ictjAS22M8rLeYRu9TXkA6D" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol": { - "keccak256": "0xf1c07bc61e7b1dce195ed12d50f87980fbf2d63cac1326fd28287f55fe0ba625", - "urls": [ - "bzz-raw://060f10ff7afc33c1c2f2b4b5ba29231fd3c943146488084d0e4ab99fce991d97", - "dweb:/ipfs/QmaSsefAqqEqtf8FgFUmDYMwTsAty3X1pqDb6SiFvry6B3" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol": { - "keccak256": "0x2ebbcaaab3554edcd41b581f1a72ac1806afbfb8047d0d47ff098f9af30d6deb", - "urls": [ - "bzz-raw://2d4b2cf5c3b16dc76c6767f285b57c0af917972327b2be3f7cba5825402f5fc1", - "dweb:/ipfs/QmQQWiHE2jKEDbjzGutSoZwtApSXYfLqZt5CxEpFj8xyvT" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol": { - "keccak256": "0xc84cf1bf785977fe1fbe7566eef902c2db68d0e163813ebe6c34921754802680", - "urls": [ - "bzz-raw://de686666fc16fa432d4208d85cec87dc952faf3e481b683b9adf4b4610db4b09", - "dweb:/ipfs/QmdmQeopzmxqRzi9DNB4EJDrYUXFfD7fUhnGhSni4QejUW" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OApp.sol": { - "keccak256": "0xac362c4c291fad2f1511a968424b2e78a5ad502d1c867bd31da04be742aca8c5", - "urls": [ - "bzz-raw://e1f8cf9f20a2b683a53c3883972aa0676af97a24c678f461fae08e1fb056df28", - "dweb:/ipfs/QmPpKNqda3rgxDwnq3XiRTtT3NfWeqrCJT6LwmhYd2AoT2" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppCore.sol": { - "keccak256": "0x13a9c2d1d2c1f086b8624f2e84c4a4702212daae36f701d92bb915b535cbe4cc", - "urls": [ - "bzz-raw://606515dd9193551bd2c94ac8c304f3776fafcc70e544ebf441f334658b2fd5f0", - "dweb:/ipfs/QmZ88ey7DdZqV5taAoebabvszX5kdPMSrQCAmTteVdDtcH" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppReceiver.sol": { - "keccak256": "0x0174e9f1ec4cefe4b5adc26c392269c699b9ff75965364e5b7264426a462c70b", - "urls": [ - "bzz-raw://cd12bb4fe5802c53911b9a0081a2ea10639b1f99925d1e5c1b1421d1bdc17075", - "dweb:/ipfs/QmZonarwbKiEwQ8qoASKur2bbMjusdy9pqK9RCR4P1YPtc" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppSender.sol": { - "keccak256": "0x518cf4adca601923ed4baa6619846a253ea32b8d8775f8bc1faa3dfac7f67c20", - "urls": [ - "bzz-raw://d42b471418efadcc3577ef3fa9f8f504e8bed7db90c3b0c862038d8b29529eb2", - "dweb:/ipfs/QmZETDQiJN4U92fmLKo8T9ZbdDf7BNBUUvo9H7M7GqAyFU" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppCore.sol": { - "keccak256": "0x40e49f2de74506e1da5dcaed53a39853f691647f4ceb0fccc8f49a68d3f47c58", - "urls": [ - "bzz-raw://4a1deb2a6a3eb1fb83936c9578469142bff470295f403d7d07d955a76be3adbd", - "dweb:/ipfs/QmS9bjSfBaE4YhQ1PCQ1TknbEPbNfRXzBK9E7SaPGyiZEv" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppMsgInspector.sol": { - "keccak256": "0x339654e699043c400cad92de209aa23855ce10211c31cf4114042cc5224d3b7c", - "urls": [ - "bzz-raw://5222afde59bf086f67b39e0288ad36343f4f5ed683d250533f256a5db956f37e", - "dweb:/ipfs/QmbEG9EMYsK3Y6Cz7QbNtkW4kHGzMuhp2y2seSoL8v1A5b" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppOptionsType3.sol": { - "keccak256": "0x9fc08a51e9d7c9c710c4eb26f84fe77228305ad7da63fa486ff24ebf2f3bc461", - "urls": [ - "bzz-raw://2e2eea8a93bb9fc3f629767118b362e9b4bda2443ff95eae21c6a894f3e334cc", - "dweb:/ipfs/QmPRRNjAB4U19ke4gr3U7ZJGtdcVBxdXVBZ2BmB1riFkP7" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppReceiver.sol": { - "keccak256": "0xd26135185e19b3732746d4a9e2923e896f28dec8664bab161faea2ee26fcdc3d", - "urls": [ - "bzz-raw://c236dfe386b508be33c3a1a74ae1d4fd64b8c77ae207767e9dbed0f2429518a2", - "dweb:/ipfs/QmXVbZJjfryTRti98uN3BMh5qh4K7NuEs1RSCoBjRoYd4q" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/libs/OAppOptionsType3.sol": { - "keccak256": "0x5275636cd47e660a2fdf6c7fe9d41ff3cc866b785cc8a9d88c1b8ca983509f01", - "urls": [ - "bzz-raw://a59dd6e3cfcc332f45a13d44585eb228588c4b9d470cbb19852df5753a4571af", - "dweb:/ipfs/QmQJF1QU3MKhvmw42eq61u9z3bzKJJKMsEdQVYyPyYgTVS" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/precrime/OAppPreCrimeSimulator.sol": { - "keccak256": "0x205a0abfd8b3c9af2740769f251381b84999b8e9347f3cd50de3ef8290a17750", - "urls": [ - "bzz-raw://d9778d7d5da941af2029410b6ac212f915ea1785573ae2865b0ed8f779fcca82", - "dweb:/ipfs/QmNkVEkfecvgubgnMuaT5fEfSExd95vz8DQHhpZtMrVRjH" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IOAppPreCrimeSimulator.sol": { - "keccak256": "0x5d24db150949ea8e6437178e65a942e8c8b7f332e5daf32750f56b23b35b5bb2", - "urls": [ - "bzz-raw://1b1dcea0267234654126f926a1b405743606d7b5e49185b621afb7bd94d18b9a", - "dweb:/ipfs/QmZ9BXQmbWJcrhHKuBs4yhNtbCV5WUpUY3AXSX7rkWwX6y" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IPreCrime.sol": { - "keccak256": "0xc8d869f27ef8ceb2e13fdf6a70682fd4dee3f90c4924eb8e125bc1e66cb6af84", - "urls": [ - "bzz-raw://66bf49d59c14832ea0ddddcd12d512d4f9bd0fd254a1368442587bf3e77fe73e", - "dweb:/ipfs/QmYUAvsyuUPiSYjbL4zVo6ZtiRSLCUPDvCesqgdZWbSGDg" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/precrime/libs/Packet.sol": { - "keccak256": "0xcb2fb1c5b2eb3731de78b479b9c2ab3bba326fe0b0b3a008590f18e881e457a6", - "urls": [ - "bzz-raw://f70724c61d226743c2bd8ba6c09758805e4339780978949ce5b333c106be4edc", - "dweb:/ipfs/QmX5rV9K1N7RgTz9xtf8CDG8SrYiitGAzFh9ec2tbnEec4" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oft-evm/contracts/OFT.sol": { - "keccak256": "0xdc3582e4a20e02a79050c17058a1f1f42a4335d1a70be06c0a52a3fb05d4c89a", - "urls": [ - "bzz-raw://83c4bd42e68528246860a952a92a79e51e3a789dac79a0b62576ab2f609de9c7", - "dweb:/ipfs/QmVj1x655j1cFTnPT8uBaM71TCSrhFVwPdoFkAkWhhadns" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oft-evm/contracts/OFTCore.sol": { - "keccak256": "0x9ce49b83455df600b52538e42028c422a322643f7ffb4f2814c72c3b970ea7be", - "urls": [ - "bzz-raw://2ebbf79612c3f6cd4e2754ba55519df6b89504ab5514e3517cbd286d87143997", - "dweb:/ipfs/QmQZpSPhNhF4MESb2if2DbcjC75xfuoEzDGXmeJKYZtHZ5" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oft-evm/contracts/interfaces/IOFT.sol": { - "keccak256": "0x7ba6bb62fba7ee83451cfb0e727ddeef0e96b4388bd4e9ff0fc6ce103e1101c8", - "urls": [ - "bzz-raw://cfbd447f2e8a730bd46a14c3c3e6a0b2bf7446145579603a9793ba5ac1dd38b4", - "dweb:/ipfs/QmZ4nx4iGrFmBHvYFgki5TXFdCHz4Co38hgdgwpRaM7NLs" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oft-evm/contracts/libs/OFTComposeMsgCodec.sol": { - "keccak256": "0xaae73d6eb8b9561c43f1802f3c416c00ccd35f172b711f9781ccdf1b25a40db5", - "urls": [ - "bzz-raw://7beda2d895ae9e15269dd261a492ce0a29b498e5bebf088ed6f2ae6a5185719e", - "dweb:/ipfs/QmScog2tW1YVyEPLVcUVqGGc85ub46sA28nUKNzFEZcFdK" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oft-evm/contracts/libs/OFTMsgCodec.sol": { - "keccak256": "0x5358948017669c03e157f871d8c38e988f9004dbd0801ad3119d2487f0d40b0b", - "urls": [ - "bzz-raw://c7d0f1bf32a80af9b99cd93fefa373dac5c27463351cc35f62b9c2439d5b9258", - "dweb:/ipfs/Qmb81qoxzMwV3PkPANRvnXf4fJTsZ5sjJ8r2df9V2vhh6q" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/access/Ownable.sol": { - "keccak256": "0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb", - "urls": [ - "bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6", - "dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol": { - "keccak256": "0x9b6b3e7803bc5f2f8cd7ad57db8ac1def61a9930a5a3107df4882e028a9605d7", - "urls": [ - "bzz-raw://da62d6be1f5c6edf577f0cb45666a8aa9c2086a4bac87d95d65f02e2f4c36a4b", - "dweb:/ipfs/QmNkpvBpoCMvX8JwAFNSc5XxJ2q5BXJpL5L1txb4QkqVFF" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/interfaces/IERC165.sol": { - "keccak256": "0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724", - "urls": [ - "bzz-raw://11fea9f8bc98949ac6709f0c1699db7430d2948137aa94d5a9e95a91f61a710a", - "dweb:/ipfs/QmQdfRXxQjwP6yn3DVo1GHPpriKNcFghSPi94Z1oKEFUNS" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/interfaces/IERC20.sol": { - "keccak256": "0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c", - "urls": [ - "bzz-raw://a2608291cb038b388d80b79a06b6118a42f7894ff67b7da10ec0dbbf5b2973ba", - "dweb:/ipfs/QmWohqcBLbcxmA4eGPhZDXe5RYMMEEpFq22nfkaUMvTfw1" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/interfaces/draft-IERC6093.sol": { - "keccak256": "0x880da465c203cec76b10d72dbd87c80f387df4102274f23eea1f9c9b0918792b", - "urls": [ - "bzz-raw://399594cd8bb0143bc9e55e0f1d071d0d8c850a394fb7a319d50edd55d9ed822b", - "dweb:/ipfs/QmbPZzgtT6LEm9CMqWfagQFwETbV1ztpECBB1DtQHrKiRz" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/token/ERC20/ERC20.sol": { - "keccak256": "0xbf61ab2ae1d575a17ea58fbb99ca232baddcc4e0eeea180e84cbc74b0c348b31", - "urls": [ - "bzz-raw://4e0968705bad99747a8e5288aa008678c2be2f471f919dce3925a3cc4f1dee09", - "dweb:/ipfs/QmbAFnCQfo4tw6ssfQSjhA5LzwHWNNryXN8bX7ty8jiqqn" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol": { - "keccak256": "0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7", - "urls": [ - "bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db", - "dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol": { - "keccak256": "0x70f2f713b13b7ce4610bcd0ac9fec0f3cc43693b043abcb8dc40a42a726eb330", - "urls": [ - "bzz-raw://c13d13304ac79a83ab1c30168967d19e2203342ebbd6a9bbce4db7550522dcbf", - "dweb:/ipfs/QmeN5jKMN2vw5bhacr6tkg78afbTTZUeaacNHqjWt4Ew1r" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol": { - "keccak256": "0xca2ae13e0610f6a99238dd00b97bd786bc92732dae6d6b9d61f573ec51018310", - "urls": [ - "bzz-raw://75f8c71ce0c91c40dd5f249ace0b7d8270f8f1767231bcf71490f7157d6ba862", - "dweb:/ipfs/QmYXgxeDyFHvz3JsXxLEYN6GNUR44ThHeFj5XkpkgMoG4w" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Address.sol": { - "keccak256": "0x9d8da059267bac779a2dbbb9a26c2acf00ca83085e105d62d5d4ef96054a47f5", - "urls": [ - "bzz-raw://c78e2aa4313323cecd1ef12a8d6265b96beee1a199923abf55d9a2a9e291ad23", - "dweb:/ipfs/QmUTs2KStXucZezzFo3EYeqYu47utu56qrF7jj1Gue65vb" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Context.sol": { - "keccak256": "0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2", - "urls": [ - "bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12", - "dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Errors.sol": { - "keccak256": "0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123", - "urls": [ - "bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf", - "dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol": { - "keccak256": "0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8", - "urls": [ - "bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621", - "dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL" - ], - "license": "MIT" - } - }, - "version": 1 - }, - "id": 0 -} diff --git a/examples/oft-movement/out/MyOFT.t.sol/MyOFTTest.json b/examples/oft-movement/out/MyOFT.t.sol/MyOFTTest.json deleted file mode 100644 index 6d1bdc12b..000000000 --- a/examples/oft-movement/out/MyOFT.t.sol/MyOFTTest.json +++ /dev/null @@ -1,3211 +0,0 @@ -{ - "abi": [ - { "type": "receive", "stateMutability": "payable" }, - { - "type": "function", - "name": "DEFAULT_CHANNEL_ID", - "inputs": [], - "outputs": [{ "name": "", "type": "uint32", "internalType": "uint32" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "EVM_COMPUTE_MAP_BPS", - "inputs": [], - "outputs": [{ "name": "", "type": "uint16", "internalType": "uint16" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "EVM_COMPUTE_REDUCE_FEE_USD", - "inputs": [], - "outputs": [{ "name": "", "type": "uint120", "internalType": "uint120" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "EVM_REQUEST_FEE_USD", - "inputs": [], - "outputs": [{ "name": "", "type": "uint120", "internalType": "uint120" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "IS_TEST", - "inputs": [], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "MAP_REDUCE_COMPUTE_TYPES", - "inputs": [], - "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "NATIVE_TOKEN_PRICE_USD", - "inputs": [], - "outputs": [{ "name": "", "type": "uint128", "internalType": "uint128" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "TREASURY_GAS_CAP", - "inputs": [], - "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "TREASURY_GAS_FOR_FEE_CAP", - "inputs": [], - "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "assertGuid", - "inputs": [ - { "name": "packetBytes", "type": "bytes", "internalType": "bytes" }, - { "name": "guid", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "createEndpoints", - "inputs": [ - { "name": "_endpointNum", "type": "uint8", "internalType": "uint8" }, - { - "name": "_libraryType", - "type": "uint8", - "internalType": "enum TestHelperOz5.LibraryType" - }, - { - "name": "nativeTokenAddresses", - "type": "address[]", - "internalType": "address[]" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "decodeLzComposeOption", - "inputs": [ - { "name": "_option", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [ - { "name": "index", "type": "uint16", "internalType": "uint16" }, - { "name": "gas", "type": "uint128", "internalType": "uint128" }, - { "name": "value", "type": "uint128", "internalType": "uint128" } - ], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "decodeLzReadOption", - "inputs": [ - { "name": "_option", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [ - { "name": "gas", "type": "uint128", "internalType": "uint128" }, - { "name": "size", "type": "uint32", "internalType": "uint32" }, - { "name": "value", "type": "uint128", "internalType": "uint128" } - ], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "decodeLzReceiveOption", - "inputs": [ - { "name": "_option", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [ - { "name": "gas", "type": "uint128", "internalType": "uint128" }, - { "name": "value", "type": "uint128", "internalType": "uint128" } - ], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "decodeNativeDropOption", - "inputs": [ - { "name": "_option", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [ - { "name": "amount", "type": "uint128", "internalType": "uint128" }, - { "name": "receiver", "type": "bytes32", "internalType": "bytes32" } - ], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "excludeArtifacts", - "inputs": [], - "outputs": [ - { - "name": "excludedArtifacts_", - "type": "string[]", - "internalType": "string[]" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "excludeContracts", - "inputs": [], - "outputs": [ - { - "name": "excludedContracts_", - "type": "address[]", - "internalType": "address[]" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "excludeSenders", - "inputs": [], - "outputs": [ - { - "name": "excludedSenders_", - "type": "address[]", - "internalType": "address[]" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "executorValueCap", - "inputs": [], - "outputs": [{ "name": "", "type": "uint128", "internalType": "uint128" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "failed", - "inputs": [], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "getNextInflightPacket", - "inputs": [ - { "name": "_dstEid", "type": "uint16", "internalType": "uint16" }, - { "name": "_dstAddress", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [ - { "name": "packetBytes", "type": "bytes", "internalType": "bytes" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "hasPendingPackets", - "inputs": [ - { "name": "_dstEid", "type": "uint16", "internalType": "uint16" }, - { "name": "_dstAddress", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [{ "name": "flag", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "lzCompose", - "inputs": [ - { "name": "_dstEid", "type": "uint32", "internalType": "uint32" }, - { "name": "_from", "type": "address", "internalType": "address" }, - { "name": "_options", "type": "bytes", "internalType": "bytes" }, - { "name": "_guid", "type": "bytes32", "internalType": "bytes32" }, - { "name": "_to", "type": "address", "internalType": "address" }, - { "name": "_composerMsg", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [], - "stateMutability": "payable" - }, - { - "type": "function", - "name": "lzCompose", - "inputs": [ - { "name": "_packetBytes", "type": "bytes", "internalType": "bytes" }, - { "name": "_options", "type": "bytes", "internalType": "bytes" }, - { "name": "_guid", "type": "bytes32", "internalType": "bytes32" }, - { "name": "_composer", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "payable" - }, - { - "type": "function", - "name": "lzReadReceive", - "inputs": [ - { "name": "_packetBytes", "type": "bytes", "internalType": "bytes" }, - { "name": "_options", "type": "bytes", "internalType": "bytes" }, - { "name": "_resolvedPayload", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [], - "stateMutability": "payable" - }, - { - "type": "function", - "name": "lzReceive", - "inputs": [ - { "name": "_packetBytes", "type": "bytes", "internalType": "bytes" }, - { "name": "_options", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [], - "stateMutability": "payable" - }, - { - "type": "function", - "name": "nextExecutorOption", - "inputs": [ - { "name": "_options", "type": "bytes", "internalType": "bytes" }, - { "name": "_cursor", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [ - { "name": "optionType", "type": "uint8", "internalType": "uint8" }, - { "name": "option", "type": "bytes", "internalType": "bytes" }, - { "name": "cursor", "type": "uint256", "internalType": "uint256" } - ], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "registerEndpoint", - "inputs": [ - { - "name": "endpoint", - "type": "address", - "internalType": "contract EndpointV2Mock" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "schedulePacket", - "inputs": [ - { "name": "_packetBytes", "type": "bytes", "internalType": "bytes" }, - { "name": "_options", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setExecutorValueCap", - "inputs": [ - { "name": "_valueCap", "type": "uint128", "internalType": "uint128" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setUp", - "inputs": [], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setUpEndpoints", - "inputs": [ - { "name": "_endpointNum", "type": "uint8", "internalType": "uint8" }, - { - "name": "_libraryType", - "type": "uint8", - "internalType": "enum TestHelperOz5.LibraryType" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setupOApps", - "inputs": [ - { - "name": "_oappCreationCode", - "type": "bytes", - "internalType": "bytes" - }, - { "name": "_startEid", "type": "uint8", "internalType": "uint8" }, - { "name": "_oappNum", "type": "uint8", "internalType": "uint8" } - ], - "outputs": [ - { "name": "oapps", "type": "address[]", "internalType": "address[]" } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "targetArtifactSelectors", - "inputs": [], - "outputs": [ - { - "name": "targetedArtifactSelectors_", - "type": "tuple[]", - "internalType": "struct StdInvariant.FuzzSelector[]", - "components": [ - { "name": "addr", "type": "address", "internalType": "address" }, - { - "name": "selectors", - "type": "bytes4[]", - "internalType": "bytes4[]" - } - ] - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "targetArtifacts", - "inputs": [], - "outputs": [ - { - "name": "targetedArtifacts_", - "type": "string[]", - "internalType": "string[]" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "targetContracts", - "inputs": [], - "outputs": [ - { - "name": "targetedContracts_", - "type": "address[]", - "internalType": "address[]" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "targetInterfaces", - "inputs": [], - "outputs": [ - { - "name": "targetedInterfaces_", - "type": "tuple[]", - "internalType": "struct StdInvariant.FuzzInterface[]", - "components": [ - { "name": "addr", "type": "address", "internalType": "address" }, - { - "name": "artifacts", - "type": "string[]", - "internalType": "string[]" - } - ] - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "targetSelectors", - "inputs": [], - "outputs": [ - { - "name": "targetedSelectors_", - "type": "tuple[]", - "internalType": "struct StdInvariant.FuzzSelector[]", - "components": [ - { "name": "addr", "type": "address", "internalType": "address" }, - { - "name": "selectors", - "type": "bytes4[]", - "internalType": "bytes4[]" - } - ] - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "targetSenders", - "inputs": [], - "outputs": [ - { - "name": "targetedSenders_", - "type": "address[]", - "internalType": "address[]" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "test_constructor", - "inputs": [], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "test_send_oft", - "inputs": [], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "test_send_oft_compose_msg", - "inputs": [], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "validatePacket", - "inputs": [ - { "name": "_packetBytes", "type": "bytes", "internalType": "bytes" }, - { "name": "_resolvedPayload", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "verifyPackets", - "inputs": [ - { "name": "_dstEid", "type": "uint32", "internalType": "uint32" }, - { "name": "_dstAddress", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "verifyPackets", - "inputs": [ - { "name": "_dstEid", "type": "uint32", "internalType": "uint32" }, - { "name": "_dstAddress", "type": "bytes32", "internalType": "bytes32" }, - { - "name": "_packetAmount", - "type": "uint256", - "internalType": "uint256" - }, - { "name": "_composer", "type": "address", "internalType": "address" }, - { "name": "_resolvedPayload", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "verifyPackets", - "inputs": [ - { "name": "_dstEid", "type": "uint32", "internalType": "uint32" }, - { "name": "_dstAddress", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "wireOApps", - "inputs": [ - { "name": "oapps", "type": "address[]", "internalType": "address[]" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "wireReadOApps", - "inputs": [ - { "name": "oapps", "type": "address[]", "internalType": "address[]" }, - { "name": "channels", "type": "uint32[]", "internalType": "uint32[]" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "event", - "name": "log", - "inputs": [ - { - "name": "", - "type": "string", - "indexed": false, - "internalType": "string" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "log_address", - "inputs": [ - { - "name": "", - "type": "address", - "indexed": false, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "log_array", - "inputs": [ - { - "name": "val", - "type": "uint256[]", - "indexed": false, - "internalType": "uint256[]" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "log_array", - "inputs": [ - { - "name": "val", - "type": "int256[]", - "indexed": false, - "internalType": "int256[]" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "log_array", - "inputs": [ - { - "name": "val", - "type": "address[]", - "indexed": false, - "internalType": "address[]" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "log_bytes", - "inputs": [ - { - "name": "", - "type": "bytes", - "indexed": false, - "internalType": "bytes" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "log_bytes32", - "inputs": [ - { - "name": "", - "type": "bytes32", - "indexed": false, - "internalType": "bytes32" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "log_int", - "inputs": [ - { - "name": "", - "type": "int256", - "indexed": false, - "internalType": "int256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "log_named_address", - "inputs": [ - { - "name": "key", - "type": "string", - "indexed": false, - "internalType": "string" - }, - { - "name": "val", - "type": "address", - "indexed": false, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "log_named_array", - "inputs": [ - { - "name": "key", - "type": "string", - "indexed": false, - "internalType": "string" - }, - { - "name": "val", - "type": "uint256[]", - "indexed": false, - "internalType": "uint256[]" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "log_named_array", - "inputs": [ - { - "name": "key", - "type": "string", - "indexed": false, - "internalType": "string" - }, - { - "name": "val", - "type": "int256[]", - "indexed": false, - "internalType": "int256[]" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "log_named_array", - "inputs": [ - { - "name": "key", - "type": "string", - "indexed": false, - "internalType": "string" - }, - { - "name": "val", - "type": "address[]", - "indexed": false, - "internalType": "address[]" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "log_named_bytes", - "inputs": [ - { - "name": "key", - "type": "string", - "indexed": false, - "internalType": "string" - }, - { - "name": "val", - "type": "bytes", - "indexed": false, - "internalType": "bytes" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "log_named_bytes32", - "inputs": [ - { - "name": "key", - "type": "string", - "indexed": false, - "internalType": "string" - }, - { - "name": "val", - "type": "bytes32", - "indexed": false, - "internalType": "bytes32" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "log_named_decimal_int", - "inputs": [ - { - "name": "key", - "type": "string", - "indexed": false, - "internalType": "string" - }, - { - "name": "val", - "type": "int256", - "indexed": false, - "internalType": "int256" - }, - { - "name": "decimals", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "log_named_decimal_uint", - "inputs": [ - { - "name": "key", - "type": "string", - "indexed": false, - "internalType": "string" - }, - { - "name": "val", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - }, - { - "name": "decimals", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "log_named_int", - "inputs": [ - { - "name": "key", - "type": "string", - "indexed": false, - "internalType": "string" - }, - { - "name": "val", - "type": "int256", - "indexed": false, - "internalType": "int256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "log_named_string", - "inputs": [ - { - "name": "key", - "type": "string", - "indexed": false, - "internalType": "string" - }, - { - "name": "val", - "type": "string", - "indexed": false, - "internalType": "string" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "log_named_uint", - "inputs": [ - { - "name": "key", - "type": "string", - "indexed": false, - "internalType": "string" - }, - { - "name": "val", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "log_string", - "inputs": [ - { - "name": "", - "type": "string", - "indexed": false, - "internalType": "string" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "log_uint", - "inputs": [ - { - "name": "", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "logs", - "inputs": [ - { - "name": "", - "type": "bytes", - "indexed": false, - "internalType": "bytes" - } - ], - "anonymous": false - }, - { - "type": "error", - "name": "Executor_InvalidLzComposeOption", - "inputs": [] - }, - { "type": "error", "name": "Executor_InvalidLzReadOption", "inputs": [] }, - { - "type": "error", - "name": "Executor_InvalidLzReceiveOption", - "inputs": [] - }, - { - "type": "error", - "name": "Executor_InvalidNativeDropOption", - "inputs": [] - }, - { - "type": "error", - "name": "InvalidOptionType", - "inputs": [ - { "name": "optionType", "type": "uint16", "internalType": "uint16" } - ] - }, - { - "type": "error", - "name": "SafeCastOverflowedUintDowncast", - "inputs": [ - { "name": "bits", "type": "uint8", "internalType": "uint8" }, - { "name": "value", "type": "uint256", "internalType": "uint256" } - ] - } - ], - "bytecode": { - "object": "0x6080604081905260078054600160ff199182168117909255600b805490911690911790556200002e9062000281565b604051809103906000f0801580156200004b573d6000803e3d6000fd5b50601c80546001600160a01b0319166001600160a01b03929092169190911790556021805467016345785d8a00006001600160801b0319909116179055603080546001600160401b031916640200000001179055604080518082019091526005815264757365724160d81b6020820152620000c6906200014e565b603280546001600160a01b0319166001600160a01b03929092169190911790556040805180820190915260058152643ab9b2b92160d91b60208201526200010d906200014e565b603380546001600160a01b0319166001600160a01b039290921691909117905568056bc75e2d631000006034553480156200014757600080fd5b5062000349565b60006200015b8262000162565b5092915050565b60008082604051602001620001789190620002b5565b60408051808303601f190181529082905280516020909101206001625e79b760e01b03198252600482018190529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ffa1864990602401602060405180830381865afa158015620001e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200020a9190620002d3565b6040516318caf8e360e31b8152909250737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c657c7189062000248908590879060040162000305565b600060405180830381600087803b1580156200026357600080fd5b505af115801562000278573d6000803e3d6000fd5b50505050915091565b6107f28062031d2783390190565b60005b83811015620002ac57818101518382015260200162000292565b50506000910152565b60008251620002c98184602087016200028f565b9190910192915050565b600060208284031215620002e657600080fd5b81516001600160a01b0381168114620002fe57600080fd5b9392505050565b60018060a01b03831681526040602082015260008251806040840152620003348160608501602087016200028f565b601f01601f1916919091016060019392505050565b620319cd806200035a6000396000f3fe608060405260043610620002cf5760003560e01c806382411c771162000177578063b954fdf611620000d1578063e20c9f711162000084578063e20c9f711462000934578063e99b6b31146200094c578063ec53eaa01462000964578063f93e1d61146200097b578063fa7626d414620009c1578063faed6c5814620009dd57600080fd5b8063b954fdf6146200083e578063ba414fa61462000883578063baead19c146200089b578063d1c6eafc14620008b6578063d6d6249714620008ce578063defd9da614620008f357600080fd5b8063a29c8984116200012a578063a29c89841462000786578063ae6ce400146200079d578063b1dcf5c814620007c2578063b5508aa914620007ea578063b752b72a1462000802578063b76bada5146200082757600080fd5b806382411c771462000362578063834bd15914620006a857806385226c8114620006cd578063916a17c614620006f45780639751ca86146200070c578063997cff1b146200076157600080fd5b80633f7286f4116200022957806366d9a9a011620001dc57806366d9a9a014620005ba578063699cbade14620005e15780636e1775e31462000600578063703ca25414620006375780637949f59b146200065c5780637982cf42146200067457600080fd5b80633f7286f414620004a3578063518e8ab014620004bb57806351aa318b146200050b5780635ea0fefe146200053a57806360197889146200057057806365449eb0146200059557600080fd5b80631ed7831c11620002825780631ed7831c14620003c65780632113ce6214620003ed5780632a35d25014620004285780632ade3880146200044d5780633bbd6a9414620004745780633e5e3c23146200048b57600080fd5b8063090852b614620002dc5780630a69faa914620003035780630a9254e4146200031a5780630afba86814620003325780631766f5a414620003625780631cc4652514620003a157600080fd5b36620002d757005b600080fd5b348015620002e957600080fd5b5062000301620002fb36600462007b0c565b62000a02565b005b620003016200031436600462007c88565b62000a31565b3480156200032757600080fd5b506200030162000b6f565b3480156200033f57600080fd5b506200034a61271081565b60405161ffff90911681526020015b60405180910390f35b3480156200036f57600080fd5b5062000380670de0b6b3a764000081565b6040516effffffffffffffffffffffffffffff909116815260200162000359565b348015620003ae57600080fd5b5062000301620003c036600462007d3f565b62000f7f565b348015620003d357600080fd5b50620003de62000fd4565b60405162000359919062007db7565b348015620003fa57600080fd5b506021546200040f906001600160801b031681565b6040516001600160801b03909116815260200162000359565b3480156200043557600080fd5b50620003de6200044736600462007dcc565b62001038565b3480156200045a57600080fd5b506200046562001140565b60405162000359919062007ee9565b620003016200048536600462007f6c565b6200128e565b3480156200049857600080fd5b50620003de6200134e565b348015620004b057600080fd5b50620003de620013b0565b348015620004c857600080fd5b50620004e0620004da36600462008026565b62001412565b6040805161ffff90941684526001600160801b03928316602085015291169082015260600162000359565b3480156200051857600080fd5b50620005246201117181565b60405163ffffffff909116815260200162000359565b3480156200054757600080fd5b506200055f620005593660046200807c565b62001430565b604051901515815260200162000359565b3480156200057d57600080fd5b50620003016200058f366004620080ab565b62001465565b348015620005a257600080fd5b5062000301620005b4366004620081bc565b6200206b565b348015620005c757600080fd5b50620005d262002151565b6040516200035991906200828d565b348015620005ee57600080fd5b506200040f68056bc75e2d6310000081565b3480156200060d57600080fd5b50620006256200061f36600462008346565b6200223b565b604051620003599493929190620083be565b3480156200064457600080fd5b506200030162000656366004620083ee565b6200225f565b3480156200066957600080fd5b506200030162002426565b3480156200068157600080fd5b5062000699620006933660046200807c565b62002c09565b60405162000359919062008426565b348015620006b557600080fd5b5062000301620006c73660046200843b565b62002cf7565b348015620006da57600080fd5b50620006e562003222565b604051620003599190620084b8565b3480156200070157600080fd5b50620005d2620032fc565b3480156200071957600080fd5b50620007316200072b36600462008026565b620033e6565b604080516001600160801b03948516815263ffffffff909316602084015292169181019190915260600162000359565b3480156200076e57600080fd5b50620003016200078036600462008346565b620033f7565b6200030162000797366004620084cd565b6200344f565b348015620007aa57600080fd5b5062000301620007bc3660046200855d565b620034db565b348015620007cf57600080fd5b50620007db620186a081565b60405190815260200162000359565b348015620007f757600080fd5b50620006e56200357c565b3480156200080f57600080fd5b5062000301620008213660046200857d565b62003656565b3480156200083457600080fd5b50620007db600381565b3480156200084b57600080fd5b50620008636200085d36600462008026565b62003675565b604080516001600160801b03909316835260208301919091520162000359565b3480156200089057600080fd5b506200055f62003690565b348015620008a857600080fd5b50620007db64e8d4a5100081565b348015620008c357600080fd5b5062000301620037c7565b348015620008db57600080fd5b5062000301620008ed3660046200859e565b62003ba5565b3480156200090057600080fd5b50620003016200091236600462008611565b602180546001600160801b0319166001600160801b0392909216919091179055565b3480156200094157600080fd5b50620003de62005b75565b3480156200095957600080fd5b506200030162005bd7565b6200030162000975366004620080ab565b62005e18565b3480156200098857600080fd5b50620009a06200099a36600462008026565b62005f53565b604080516001600160801b0393841681529290911660208301520162000359565b348015620009ce57600080fd5b506007546200055f9060ff1681565b348015620009ea57600080fd5b5062000301620009fc36600462008631565b62005f62565b62000a2d82826001600160a01b031660001b6000806040518060200160405280600081525062002cf7565b5050565b60006020600062000a43878762005ff4565b63ffffffff16815260208101919091526040016000908120546001600160a01b031691508062000a73856200601b565b92505091506000604051806060016040528062000a918a8a6200610a565b63ffffffff16815260200162000aa88a8a6200611c565b815260200162000ab98a8a62006139565b6001600160401b0316905290506001600160a01b038416630c0c389e6001600160801b038581169085168462000af08d8d62006160565b62000afc8e8e62006175565b604080516020810182526000815290516001600160e01b031960e089901b16815262000b30949392918e91600401620086a3565b6000604051808303818589803b15801562000b4a57600080fd5b5088f115801562000b5f573d6000803e3d6000fd5b5050505050505050505050505050565b60325460405163c88a5e6d60e01b81526001600160a01b039091166004820152683635c9adc5dea000006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b15801562000bd857600080fd5b505af115801562000bed573d6000803e3d6000fd5b505060335460405163c88a5e6d60e01b81526001600160a01b039091166004820152683635c9adc5dea000006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b15801562000c5a57600080fd5b505af115801562000c6f573d6000803e3d6000fd5b5050505062000c7d62006187565b62000c8b6002600062000f7f565b62000cfc6040518060200162000ca1906200779e565b601f1982820381018352601f90910116604081815260305463ffffffff16600090815260208080529190205462000ce7926001600160a01b039091169130910162008716565b60405160208183030381529060405262006191565b603060086101000a8154816001600160a01b0302191690836001600160a01b0316021790555062000d876040518060200162000d38906200779e565b601f1982820381018352601f90910116604081815260305463ffffffff64010000000090910416600090815260208080529190205462000ce7926001600160a01b039091169130910162008782565b603180546001600160a01b0319166001600160a01b0392909216919091179055604080516002808252606082018352600092602083019080368337019050509050603060089054906101000a90046001600160a01b03168160008151811062000df45762000df4620087cb565b6001600160a01b03928316602091820292909201015260315482519116908290600190811062000e285762000e28620087cb565b6001600160a01b0390921660209283029190910190910152604051631c0f289560e21b8152309063703ca2549062000e6590849060040162007db7565b600060405180830381600087803b15801562000e8057600080fd5b505af115801562000e95573d6000803e3d6000fd5b50506030546032546034546040516340c10f1960e01b81526001600160a01b0392831660048201526024810191909152600160401b9092041692506340c10f199150604401600060405180830381600087803b15801562000ef557600080fd5b505af115801562000f0a573d6000803e3d6000fd5b50506031546033546034546040516340c10f1960e01b81526001600160a01b0392831660048201526024810191909152911692506340c10f199150604401600060405180830381600087803b15801562000f6357600080fd5b505af115801562000f78573d6000803e3d6000fd5b5050505050565b62000a2d82828460ff166001600160401b0381111562000fa35762000fa362007b8e565b60405190808252806020026020018201604052801562000fcd578160200160208202803683370190505b5062003ba5565b606060148054806020026020016040519081016040528092919081815260200182805480156200102e57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116200100f575b5050505050905090565b60608160ff166001600160401b0381111562001058576200105862007b8e565b60405190808252806020026020018201604052801562001082578160200160208202803683370190505b509050825b620010938385620087f7565b60ff168160ff1610156200112d5760ff81166000908152602080805260408083205481516001600160a01b0390911692810192909252309082015260016060820152620010e590879060800162000ce7565b90508083620010f5878562008813565b60ff16815181106200110b576200110b620087cb565b6001600160a01b03909216602092830291909101909101525060010162001087565b5062001139816200225f565b9392505050565b6060601b805480602002602001604051908101604052809291908181526020016000905b828210156200128557600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b828210156200126d578382906000526020600020018054620011d9906200882f565b80601f016020809104026020016040519081016040528092919081815260200182805462001207906200882f565b8015620012585780601f106200122c5761010080835404028352916020019162001258565b820191906000526020600020905b8154815290600101906020018083116200123a57829003601f168201915b505050505081526020019060010190620011b7565b50505050815250508152602001906001019062001164565b50505050905090565b63ffffffff871660009081526020805260408120546001600160a01b0316908080620012ba89620061f0565b925092509250836001600160a01b03166391d20fa18284908d8b8d898d8d604051806020016040528060008152506040518a63ffffffff1660e01b81526004016200130c97969594939291906200886b565b6000604051808303818589803b1580156200132657600080fd5b5088f11580156200133b573d6000803e3d6000fd5b5050505050505050505050505050505050565b606060168054806020026020016040519081016040528092919081815260200182805480156200102e576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116200100f575050505050905090565b606060158054806020026020016040519081016040528092919081815260200182805480156200102e576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116200100f575050505050905090565b6000806000620014238585620062ed565b9250925092509250925092565b61ffff82166000908152601d602090815260408083208484529091528120816200145a826200636b565b119150505b92915050565b600062001473848462005ff4565b63ffffffff811660009081526020805260408120549192506001600160a01b03909116908163402f8468620014a9888862006160565b620014b589896200610a565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015263ffffffff1660248201526044016040805180830381865afa15801562001504573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200152a9190620088eb565b50905060006200153b878762006389565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052506040805163054fd4d560e41b8152905195965090946001600160a01b03881694506354fd4d509350600480830193506060928290030181865afa158015620015b7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620015dd919062008941565b50509050806001600160401b031660030362001ab3578260006001600160a01b038216639c33abf7620016118c8c6200610a565b6200161d8d8d62006160565b6040516001600160e01b031960e085901b16815263ffffffff9290921660048301526001600160a01b0316602482015260026044820152606401600060405180830381865afa15801562001675573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200169f9190810190620089d3565b9050600081806020019051810190620016b9919062008a7c565b60800151600081518110620016d257620016d2620087cb565b602002602001015190506000620016ea8c8c6200639b565b604051620016fa92919062008b63565b6040518091039020905060606000630223536e60e01b88846064604051602401620017289392919062008b73565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152905060006001600160a01b03851663f010cb238d89856200177e426103e862008ba1565b6040518563ffffffff1660e01b81526004016200179f949392919062008bb7565b602060405180830381865afa158015620017bd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620017e3919062008bfa565b9050620017f081620063ad565b60408051600180825281830190925291945060009250816020015b62001815620077ac565b8152602001906001900390816200180b5790505090506040518060a001604052808d63ffffffff168152602001886001600160a01b03168152602001838152602001426103e862001867919062008ba1565b81526020018481525081600081518110620018865762001886620087cb565b602090810291909101015260405163b143044b60e01b81526001600160a01b0386169063b143044b90620018bf90849060040162008c14565b600060405180830381600087803b158015620018da57600080fd5b505af1158015620018ef573d6000803e3d6000fd5b505050506000630894edf160e01b8a866040516024016200191292919062008cc6565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152905060006001600160a01b03871663f010cb238f8b8562001968426103e862008ba1565b6040518563ffffffff1660e01b815260040162001989949392919062008bb7565b602060405180830381865afa158015620019a7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620019cd919062008bfa565b9050620019da81620063ad565b9450506040518060a001604052808e63ffffffff168152602001896001600160a01b03168152602001828152602001426103e862001a19919062008ba1565b8152602001858152508260008151811062001a385762001a38620087cb565b602090810291909101015260405163b143044b60e01b81526001600160a01b0387169063b143044b9062001a7190859060040162008c14565b600060405180830381600087803b15801562001a8c57600080fd5b505af115801562001aa1573d6000803e3d6000fd5b50505050505050505050505062002061565b806001600160401b0316600a0362001ffc578260006001600160a01b038216639c33abf762001ae38c8c6200610a565b62001aef8d8d62006160565b6040516001600160e01b031960e085901b16815263ffffffff9290921660048301526001600160a01b0316602482015260016044820152606401600060405180830381865afa15801562001b47573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262001b719190810190620089d3565b905060008180602001905181019062001b8b919062008cea565b6080015160008151811062001ba45762001ba4620087cb565b60200260200101519050600062001bbc8c8c620064c7565b60405162001bcc92919062008b63565b60405180910390209050600062001be48d8d62006175565b8b60405160200162001bf892919062008d3f565b6040516020818303038152906040528051906020012090506060600063ab750e7560e01b89858560405160240162001c339392919062008d67565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152905060006001600160a01b03861663f010cb238e8a8562001c89426103e862008ba1565b6040518563ffffffff1660e01b815260040162001caa949392919062008bb7565b602060405180830381865afa15801562001cc8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001cee919062008bfa565b905062001cfb81620063ad565b60408051600180825281830190925291945060009190816020015b62001d20620077ac565b81526020019060019003908162001d165790505090506040518060a001604052808f63ffffffff1681526020018a6001600160a01b03168152602001848152602001426103e862001d72919062008ba1565b8152602001858152508160008151811062001d915762001d91620087cb565b602090810291909101015260405163b143044b60e01b81526001600160a01b0388169063b143044b9062001dca90849060040162008c14565b600060405180830381600087803b15801562001de557600080fd5b505af115801562001dfa573d6000803e3d6000fd5b50505050505050600063594924da60e01b89858560405160240162001e229392919062008d67565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152905060006001600160a01b03861663f010cb238e8a8562001e78426103e862008ba1565b6040518563ffffffff1660e01b815260040162001e99949392919062008bb7565b602060405180830381865afa15801562001eb7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001edd919062008bfa565b905062001eea81620063ad565b60408051600180825281830190925291945060009190816020015b62001f0f620077ac565b81526020019060019003908162001f055790505090506040518060a001604052808f63ffffffff1681526020018a6001600160a01b03168152602001848152602001426103e862001f61919062008ba1565b8152602001858152508160008151811062001f805762001f80620087cb565b602090810291909101015260405163b143044b60e01b81526001600160a01b0388169063b143044b9062001fb990849060040162008c14565b600060405180830381600087803b15801562001fd457600080fd5b505af115801562001fe9573d6000803e3d6000fd5b5050505050505050505050505062002061565b6040516312cc947f60e01b81526001600160a01b038416906312cc947f906200202c908b908b9060040162008d8e565b600060405180830381600087803b1580156200204757600080fd5b505af11580156200205c573d6000803e3d6000fd5b505050505b5050505050505050565b60005b82518110156200214c5760008382815181106200208f576200208f620087cb565b6020026020010151905060005b83518110156200214157816001600160a01b031663f0a9e481858381518110620020ca57620020ca620087cb565b60209081029190910101516040516001600160e01b031960e084901b16815263ffffffff909116600482015260016024820152604401600060405180830381600087803b1580156200211b57600080fd5b505af115801562002130573d6000803e3d6000fd5b5050600190920191506200209c9050565b50506001016200206e565b505050565b60606019805480602002602001604051908101604052809291908181526020016000905b82821015620012855760008481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156200222257602002820191906000526020600020906000905b82829054906101000a900460e01b6001600160e01b03191681526020019060040190602082600301049283019260010382029150808411620021e35790505b5050505050815250508152602001906001019062002175565b6000366000806200224e878787620064d9565b935093509350935093509350935093565b805160005b818110156200214c576000838281518110620022845762002284620087cb565b6020026020010151905060005b838110156200241b5782811462002412576000858281518110620022b957620022b9620087cb565b602002602001015190506000816001600160a01b0316635e280f116040518163ffffffff1660e01b8152600401602060405180830381865afa15801562002304573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200232a919062008da4565b6001600160a01b031663416ecebf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562002368573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200238e919062008dc4565b9050836001600160a01b0316633400288b82620023b1856001600160a01b031690565b6040516001600160e01b031960e085901b16815263ffffffff9290921660048301526024820152604401600060405180830381600087803b158015620023f657600080fd5b505af11580156200240b573d6000803e3d6000fd5b5050505050505b60010162002291565b505060010162002264565b604051670de0b6b3a7640000906000906200244190620077ea565b604051809103906000f0801580156200245e573d6000803e3d6000fd5b5090506000620024b160006207a1206000620024a862030d406000620024a060408051600360f01b602082015281516002818303018152602290910190915290565b919062006535565b929190620065a7565b6040805180820182526002815261048d60f21b602080830191909152825160e08101845260305463ffffffff64010000000082041682526001600160a01b03888116838501528286018a9052606083018a90526080830187905260a0830185905285519384018652600080855260c08401949094529451633b6f743b60e01b8152959650929490939192600160401b900490911690633b6f743b906200255e908590859060040162008e60565b6040805180830381865afa1580156200257b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620025a1919062008ed8565b6030546032546040516370a0823160e01b81526001600160a01b0391821660048201529293506200262d92600160401b90920416906370a08231906024015b602060405180830381865afa158015620025fe573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002624919062008bfa565b603454620065fa565b6031546040516370a0823160e01b81526001600160a01b038781166004830152620026a99216906370a0823190602401602060405180830381865afa1580156200267b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620026a1919062008bfa565b6000620065fa565b60325460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156200270357600080fd5b505af115801562002718573d6000803e3d6000fd5b5050603054835160405163c7c7f5b360e01b815260009450849350600160401b9092046001600160a01b03169163c7c7f5b39190620027609088908890309060040162008ef7565b60c06040518083038185885af11580156200277f573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190620027a6919062008f38565b603054603154929450909250620027d69164010000000090910463ffffffff16906001600160a01b031662003656565b6000603060049054906101000a900463ffffffff1690506000603160009054906101000a90046001600160a01b03169050600088905060008560000151905060008b905060006200288c8860200151603060009054906101000a900463ffffffff16896020015162002863603260009054906101000a90046001600160a01b03166001600160a01b031690565b8f6040516020016200287792919062008d3f565b604051602081830303815290604052620066e0565b604051630eef5aa560e21b81529091503090633bbd6a9490620028be9089908990899089908990899060040162008fc1565b600060405180830381600087803b158015620028d957600080fd5b505af1158015620028ee573d6000803e3d6000fd5b50506030546032546040516370a0823160e01b81526001600160a01b039182166004820152620029879450600160401b9092041691506370a0823190602401602060405180830381865afa1580156200294b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002971919062008bfa565b8f60345462002981919062009013565b620065fa565b6031546040516370a0823160e01b81526001600160a01b038f8116600483015262002a029216906370a0823190602401602060405180830381865afa158015620029d5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620029fb919062008bfa565b8f620065fa565b62002a728d6001600160a01b031663d5ce33896040518163ffffffff1660e01b8152600401602060405180830381865afa15801562002a45573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002a6b919062008da4565b8662006714565b62002ae28d6001600160a01b0316630ae6d46b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562002ab5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002adb919062008bfa565b84620067fd565b62002b568d6001600160a01b031663e21f37ce6040518163ffffffff1660e01b8152600401600060405180830381865afa15801562002b25573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262002b4f9190810190620089d3565b82620068d4565b62002bc68d6001600160a01b031663c34c08e56040518163ffffffff1660e01b8152600401602060405180830381865afa15801562002b99573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002bbf919062008da4565b3062006714565b62000b5f8d6001600160a01b031663609d33346040518163ffffffff1660e01b8152600401600060405180830381865afa15801562002b25573d6000803e3d6000fd5b61ffff82166000908152601d60209081526040808320848452909152812060609162002c35826200636b565b111562002cf057600062002c4982620068e0565b6000818152601e6020526040902080549192509062002c68906200882f565b80601f016020809104026020016040519081016040528092919081815260200182805462002c96906200882f565b801562002ce75780601f1062002cbb5761010080835404028352916020019162002ce7565b820191906000526020600020905b81548152906001019060200180831162002cc957829003601f168201915b50505050509250505b5092915050565b63ffffffff851660009081526020805260409020546001600160a01b031662002d675760405162461bcd60e51b815260206004820152601b60248201527f656e64706f696e74206e6f74207965742072656769737465726564000000000060448201526064015b60405180910390fd5b63ffffffff85166000908152601d6020908152604080832087845290915281209062002d93826200636b565b905060008560000362002db35762002dab836200636b565b905062002dc7565b85821162002dc2578162002dc4565b855b90505b801562002061578062002dda8162009029565b915050600062002dea8462006941565b6000818152601e602052604081208054929350909162002e0a906200882f565b80601f016020809104026020016040519081016040528092919081815260200182805462002e38906200882f565b801562002e895780601f1062002e5d5761010080835404028352916020019162002e89565b820191906000526020600020905b81548152906001019060200180831162002e6b57829003601f168201915b505060405163997cff1b60e01b8152939450309363997cff1b935062002eb89250859150869060040162008cc6565b60006040518083038186803b15801562002ed157600080fd5b505afa15801562002ee6573d6000803e3d6000fd5b5050604051636019788960e01b81523092506360197889915062002f119084908a9060040162009043565b600060405180830381600087803b15801562002f2c57600080fd5b505af115801562002f41573d6000803e3d6000fd5b5050506000838152601f6020526040812080549192509062002f63906200882f565b80601f016020809104026020016040519081016040528092919081815260200182805462002f91906200882f565b801562002fe25780601f1062002fb65761010080835404028352916020019162002fe2565b820191906000526020600020905b81548152906001019060200180831162002fc457829003601f168201915b5050505050905062002ff6816002620069a5565b15620030b2576000806200300a83620069bb565b604051919350915081906000906001600160a01b0383169085908381818185875af1925050503d80600081146200305e576040519150601f19603f3d011682016040523d82523d6000602084013e62003063565b606091505b5050905080620030ad5760405162461bcd60e51b81526020600482015260146024820152732330b4b632b2103a379039b2b7321022ba3432b960611b604482015260640162002d5e565b505050505b620030bf816001620069a5565b1562003121576040516307629f5560e51b8152309063ec53eaa090620030ec908590859060040162009043565b600060405180830381600087803b1580156200310757600080fd5b505af11580156200311c573d6000803e3d6000fd5b505050505b6200312e816005620069a5565b156200319257604051630a69faa960e01b81523090630a69faa9906200315d90859085908c906004016200906c565b600060405180830381600087803b1580156200317857600080fd5b505af11580156200318d573d6000803e3d6000fd5b505050505b6001600160a01b03881615801590620031b35750620031b3816003620069a5565b1562003219576040516328a7226160e21b8152309063a29c898490620031e4908590859088908e90600401620090ab565b600060405180830381600087803b158015620031ff57600080fd5b505af115801562003214573d6000803e3d6000fd5b505050505b50505062002dc7565b60606018805480602002602001604051908101604052809291908181526020016000905b828210156200128557838290600052602060002001805462003268906200882f565b80601f016020809104026020016040519081016040528092919081815260200182805462003296906200882f565b8015620032e75780601f10620032bb57610100808354040283529160200191620032e7565b820191906000526020600020905b815481529060010190602001808311620032c957829003601f168201915b50505050508152602001906001019062003246565b6060601a805480602002602001604051908101604052809291908181526020016000905b82821015620012855760008481526020908190206040805180820182526002860290920180546001600160a01b03168352600181018054835181870281018701909452808452939491938583019392830182828015620033cd57602002820191906000526020600020906000905b82829054906101000a900460e01b6001600160e01b031916815260200190600401906020826003010492830192600103820291508084116200338e5790505b5050505050815250508152602001906001019062003320565b600080600062001423858562006ab2565b600062003405848462006175565b9050818114620034495760405162461bcd60e51b815260206004820152600e60248201526d0ceead2c840dcdee840dac2e8c6d60931b604482015260640162002d5e565b50505050565b30633bbd6a9462003461878762005ff4565b6200346d888862006160565b8686866200347c8c8c620064c7565b6040518863ffffffff1660e01b8152600401620034a09796959493929190620090f6565b600060405180830381600087803b158015620034bb57600080fd5b505af1158015620034d0573d6000803e3d6000fd5b505050505050505050565b8060206000836001600160a01b031663416ecebf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200351f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003545919062008dc4565b63ffffffff168152602081019190915260400160002080546001600160a01b0319166001600160a01b039290921691909117905550565b60606017805480602002602001604051908101604052809291908181526020016000905b8282101562001285578382906000526020600020018054620035c2906200882f565b80601f0160208091040260200160405190810160405280929190818152602001828054620035f0906200882f565b8015620036415780601f10620036155761010080835404028352916020019162003641565b820191906000526020600020905b8154815290600101906020018083116200362357829003601f168201915b505050505081526020019060010190620035a0565b62000a2d82826000806040518060200160405280600081525062002cf7565b60008062003684848462006b27565b915091505b9250929050565b600754600090610100900460ff1615620036b35750600754610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620037c25760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190526519985a5b195960d21b8284015282518083038401815260608301909352600092909162003744917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc49160800162009158565b60408051601f198184030181529082905262003760916200918b565b6000604051808303816000865af19150503d80600081146200379f576040519150601f19603f3d011682016040523d82523d6000602084013e620037a4565b606091505b5091505080806020019051810190620037be9190620091a9565b9150505b919050565b670de0b6b3a764000060006200380262030d4082620024a060408051600360f01b602082015281516002818303018152602290910190915290565b6040805160e08101825260305463ffffffff64010000000082041682526033546001600160a01b03908116602080850191909152838501889052606084018890526080840186905284518082018652600080825260a08601919091528551918201865280825260c08501919091529351633b6f743b60e01b81529495509193600160401b90910490911690633b6f743b90620038a5908590859060040162008e60565b6040805180830381865afa158015620038c2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620038e8919062008ed8565b6030546032546040516370a0823160e01b81526001600160a01b0391821660048201529293506200392c92600160401b90920416906370a0823190602401620025e0565b6031546033546040516370a0823160e01b81526001600160a01b039182166004820152620039689291909116906370a0823190602401620025e0565b60325460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015620039c257600080fd5b505af1158015620039d7573d6000803e3d6000fd5b5050603054835160405163c7c7f5b360e01b8152600160401b9092046001600160a01b0316935063c7c7f5b392509062003a1a9086908690309060040162008ef7565b60c06040518083038185885af115801562003a39573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019062003a60919062008f38565b505060305460315462003a8b91640100000000900463ffffffff16906001600160a01b031662003656565b6030546032546040516370a0823160e01b81526001600160a01b03918216600482015262003b1b92600160401b9004909116906370a0823190602401602060405180830381865afa15801562003ae5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003b0b919062008bfa565b8560345462002981919062009013565b6031546033546040516370a0823160e01b81526001600160a01b039182166004820152620034499291909116906370a0823190602401602060405180830381865afa15801562003b6f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003b95919062008bfa565b8560345462002981919062008ba1565b8260ff166001600160401b0381111562003bc35762003bc362007b8e565b60405190808252806020026020018201604052801562003bed578160200160208202803683370190505b50805162003c0491602291602090910190620077f8565b508260ff166001600160401b0381111562003c235762003c2362007b8e565b60405190808252806020026020018201604052801562003c4d578160200160208202803683370190505b50805162003c64916023916020909101906200785e565b508260ff166001600160401b0381111562003c835762003c8362007b8e565b60405190808252806020026020018201604052801562003cad578160200160208202803683370190505b50805162003cc491602491602090910190620077f8565b508260ff166001600160401b0381111562003ce35762003ce362007b8e565b60405190808252806020026020018201604052801562003d0d578160200160208202803683370190505b50805162003d2491602591602090910190620077f8565b508260ff166001600160401b0381111562003d435762003d4362007b8e565b60405190808252806020026020018201604052801562003d6d578160200160208202803683370190505b50805162003d8491602691602090910190620077f8565b5060408051600180825281830190925290602080830190803683375050815162003db6926027925060200190620077f8565b506040516001625e79b760e01b0319815260016004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ffa1864990602401602060405180830381865afa15801562003e0b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003e31919062008da4565b6027805460009062003e475762003e47620087cb565b6000918252602082200180546001600160a01b0319166001600160a01b0393909316929092179091555b8360ff168160ff1610156200409b57600062003e8f826001620087f7565b60ff1690506000838360ff168151811062003eae5762003eae620087cb565b602002602001015190508160226001018460ff168154811062003ed55762003ed5620087cb565b90600052602060002090600891828204019190066004026101000a81548163ffffffff021916908363ffffffff16021790555060006001600160a01b0316816001600160a01b03160362003fba57813060405162003f33906200790f565b63ffffffff90921682526001600160a01b03166020820152604001604051809103906000f08015801562003f6b573d6000803e3d6000fd5b506022805460ff861690811062003f865762003f86620087cb565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555062004055565b81308260405162003fcb906200791d565b63ffffffff90931683526001600160a01b039182166020840152166040820152606001604051809103906000f0801580156200400b573d6000803e3d6000fd5b506022805460ff8616908110620040265762004026620087cb565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b6200409060226000018460ff1681548110620040755762004075620087cb565b6000918252602090912001546001600160a01b0316620034db565b505060010162003e71565b5030604051620040ab906200792b565b6001600160a01b039091168152602001604051809103906000f080158015620040d8573d6000803e3d6000fd5b50602880546001600160a01b0319166001600160a01b039290921691909117905560005b8360ff168160ff16101562005846576000836001811115620041225762004122620091c7565b036200564157600060226000018260ff1681548110620041465762004146620087cb565b9060005260206000200160009054906101000a90046001600160a01b03169050308164e8d4a51000620186a0604051620041809062007939565b6001600160a01b03948516815293909216602084015260408301526060820152608001604051809103906000f080158015620041c0573d6000803e3d6000fd5b50602980546001600160a01b0319166001600160a01b03929092169190911790556040518190620041f19062007947565b6001600160a01b039091168152602001604051809103906000f0801580156200421e573d6000803e3d6000fd5b50602960010160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550308164e8d4a51000620186a0604051620042629062007955565b6001600160a01b03948516815293909216602084015260408301526060820152608001604051809103906000f080158015620042a2573d6000803e3d6000fd5b50602b80546001600160a01b0319166001600160a01b03929092169190911790556022805460ff8416908110620042dd57620042dd620087cb565b60009182526020909120015460295460405163e8964e8160e01b81526001600160a01b03918216600482015291169063e8964e8190602401600060405180830381600087803b1580156200433057600080fd5b505af115801562004345573d6000803e3d6000fd5b5050505060226000018260ff1681548110620043655762004365620087cb565b600091825260209091200154602a5460405163e8964e8160e01b81526001600160a01b03918216600482015291169063e8964e8190602401600060405180830381600087803b158015620043b857600080fd5b505af1158015620043cd573d6000803e3d6000fd5b5050505060226000018260ff1681548110620043ed57620043ed620087cb565b600091825260209091200154602b5460405163e8964e8160e01b81526001600160a01b03918216600482015291169063e8964e8190602401600060405180830381600087803b1580156200444057600080fd5b505af115801562004455573d6000803e3d6000fd5b5050602954602480546001600160a01b039092169350915060ff8516908110620044835762004483620087cb565b600091825260209091200180546001600160a01b0319166001600160a01b03928316179055602a546025805491909216919060ff8516908110620044cb57620044cb620087cb565b600091825260209091200180546001600160a01b0319166001600160a01b03928316179055602b546026805491909216919060ff8516908110620045135762004513620087cb565b6000918252602082200180546001600160a01b03939093166001600160a01b031990931692909217909155604080516001808252818301909252908160200160208202803683370190505090503081600081518110620045775762004577620087cb565b6001600160a01b0392909216602092830291909101820152604080516003808252608082019092526000929091908201606080368337505060295482519293506001600160a01b031691839150600090620045d657620045d6620087cb565b6001600160a01b039283166020918202929092010152602a548251911690829060019081106200460a576200460a620087cb565b6001600160a01b039283166020918202929092010152602b548251911690829060029081106200463e576200463e620087cb565b6001600160a01b0392831660209182029290920101526028546040518592600092859291169030908790620046739062007963565b6200468496959493929190620091dd565b604051809103906000f080158015620046a1573d6000803e3d6000fd5b50602c80546001600160a01b0319166001600160a01b03929092169190911790556023805460ff8616908110620046dc57620046dc620087cb565b90600052602060002090600891828204019190066004029054906101000a900463ffffffff16604051620047109062007971565b63ffffffff9091168152602001604051809103906000f0801580156200473a573d6000803e3d6000fd5b50602e80546001600160a01b0319166001600160a01b03928316908117909155602c5460405163c7b2370b60e01b815260048101929092529091169063c7b2370b90602401600060405180830381600087803b1580156200479a57600080fd5b505af1158015620047af573d6000803e3d6000fd5b5050505060226001018460ff1681548110620047cf57620047cf620087cb565b6000918252602090912060088204015460079091166004026101000a900463ffffffff1662004800856001620087f7565b60285460405184916001600160a01b031690602790600190889062004825906200797f565b6200483797969594939291906200922d565b604051809103906000f08015801562004854573d6000803e3d6000fd5b50602d80546001600160a01b0319166001600160a01b03929092169190911790556023805460ff86169081106200488f576200488f620087cb565b90600052602060002090600891828204019190066004029054906101000a900463ffffffff16670de0b6b3a7640000604051620048cc906200798d565b63ffffffff90921682526020820152604001604051809103906000f080158015620048fb573d6000803e3d6000fd5b50602f80546001600160a01b0319166001600160a01b03929092169182179055604051630e7c9b7f60e21b8152670de0b6b3a764000060048201819052602482015261271060448201526339f26dfc90606401600060405180830381600087803b1580156200496957600080fd5b505af11580156200497e573d6000803e3d6000fd5b5050602d54602f5460405163c7b2370b60e01b81526001600160a01b0391821660048201529116925063c7b2370b9150602401600060405180830381600087803b158015620049cc57600080fd5b505af1158015620049e1573d6000803e3d6000fd5b50505050505062004a0c60405180606001604052806060815260200160608152602001606081525090565b62004a19866001620087f7565b60ff166001600160401b0381111562004a365762004a3662007b8e565b60405190808252806020026020018201604052801562004a9857816020015b6040805160c08101825260008082526020808301829052928201819052606082018190526080820181905260a0820152825260001990920191018162004a555790505b50815262004aa8866001620087f7565b60ff166001600160401b0381111562004ac55762004ac562007b8e565b60405190808252806020026020018201604052801562004b1957816020015b60408051608081018252600080825260208083018290529282018190526060820152825260001990920191018162004ae45790505b50602082015262004b2c866001620087f7565b60ff166001600160401b0381111562004b495762004b4962007b8e565b60405190808252806020026020018201604052801562004b9057816020015b604080518082019091526000808252602082015281526020019060019003908162004b685790505b506040828101919091528051600180825281830190925260009160208083019080368337505060408051600080825260208201909252602d54845194955090936001600160a01b03909116925084919062004bef5762004bef620087cb565b60200260200101906001600160a01b031690816001600160a01b03168152505060005b8860ff168160ff1610156200522f578060ff168660ff1603156200522657600062004c3f826001620087f7565b60408051600180825281830190925260ff92909216925060009190816020015b62004c696200799b565b81526020019060019003908162004c5f57905050905060006040518060c0016040528060646001600160401b03168152602001875160ff168152602001865160ff168152602001600060ff16815260200187815260200186815250905060405180604001604052808463ffffffff168152602001828152508260008151811062004cf75762004cf7620087cb565b60209081029190910101526029546040516329460b0b60e01b81526001600160a01b03909116906329460b0b9062004d34908590600401620092db565b600060405180830381600087803b15801562004d4f57600080fd5b505af115801562004d64573d6000803e3d6000fd5b5050602a546040516329460b0b60e01b81526001600160a01b0390911692506329460b0b915062004d9a908590600401620092db565b600060405180830381600087803b15801562004db557600080fd5b505af115801562004dca573d6000803e3d6000fd5b50600092506001915062004ddb9050565b60405190808252806020026020018201604052801562004e1857816020015b62004e0462007a04565b81526020019060019003908162004dfa5790505b506040805180820182526127108152602c546001600160a01b0316602080830191909152825180840190935263ffffffff881683528201819052825192935091839060009062004e6c5762004e6c620087cb565b602090810291909101015260295460405163c14c434960e01b81526001600160a01b039091169063c14c43499062004ea9908590600401620093b9565b600060405180830381600087803b15801562004ec457600080fd5b505af115801562004ed9573d6000803e3d6000fd5b50506040805160c08101825263ffffffff89168152611388602082018190529181019190915261271060608201526402540be40060808201526021546001600160801b031660a08201528b518051919550935060ff891692508210905062004f455762004f45620087cb565b602002602001018190525060405180608001604052808463ffffffff1681526020016113886001600160401b0316815260200161271061ffff1681526020016402540be4006001600160801b031681525087602001518560ff168151811062004fb25762004fb2620087cb565b602002602001018190525060405180604001604052808463ffffffff168152602001600381525087604001518560ff168151811062004ff55762004ff5620087cb565b60200260200101819052506000602260060160009054906101000a90046001600160a01b03166001600160a01b031663c18403276040518163ffffffff1660e01b8152600401602060405180830381865afa15801562005059573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200507f91906200942a565b60408051600180825281830190925291925060009190816020015b620050ce60408051808201825260008082528251606081018452818152602081810183905293810191909152909182015290565b8152602001906001900390816200509a57905050905060405180604001604052808663ffffffff16815260200160405180606001604052808560016200511591906200944a565b6001600160801b03168152600160208201819052604090910152905281518290600090620051475762005147620087cb565b60209081029190910101526028546040516318b0dbfb60e11b81526001600160a01b0390911690633161b7f6906200518490849060040162009478565b600060405180830381600087803b1580156200519f57600080fd5b505af1158015620051b4573d6000803e3d6000fd5b5050602854604051635d6d7ccb60e01b815268056bc75e2d6310000060048201526001600160a01b039091169250635d6d7ccb9150602401600060405180830381600087803b1580156200520757600080fd5b505af11580156200521c573d6000803e3d6000fd5b5050505050505050505b60010162004c12565b50604080516001808252818301909252600091816020015b6200525162007a49565b815260200190600190039081620052475750506040805160c081018252602c546001600160a01b03168152855160ff9081166020808401919091528651909116828401526000606083018190526080830188905260a08301879052835180850190945262011171845290830182905283519394509092849190620052d957620052d9620087cb565b6020908102919091010152602b5460405163642fa5a760e11b81526001600160a01b039091169063c85f4b4e9062005316908590600401620094ec565b600060405180830381600087803b1580156200533157600080fd5b505af115801562005346573d6000803e3d6000fd5b5050505050506040518060c0016040528060226001018760ff1681548110620053735762005373620087cb565b600091825260209182902060088204015460079091166004026101000a900463ffffffff168252611388908201819052604082015261271060608201526402540be40060808201526021546001600160801b031660a0909101528351805160ff8b16908110620053e757620053e7620087cb565b6020026020010181905250604051806080016040528060226001018760ff1681548110620054195762005419620087cb565b600091825260209182902060088204015460079091166004026101000a900463ffffffff1682526113888282015261271060408301526402540be400606090920191909152840151805160ff8b16908110620054795762005479620087cb565b6020026020010181905250604051806040016040528060226001018760ff1681548110620054ab57620054ab620087cb565b600091825260209182902060088204015460079091166004026101000a900463ffffffff16825260039101526040840151805160ff8b16908110620054f457620054f4620087cb565b6020908102919091010152602c548351604051633d85ac3360e01b81526001600160a01b0390921691633d85ac33916200553191600401620095ca565b600060405180830381600087803b1580156200554c57600080fd5b505af115801562005561573d6000803e3d6000fd5b5050602d5460208601516040516352d3b87160e01b81526001600160a01b0390921693506352d3b87192506200559a916004016200965c565b600060405180830381600087803b158015620055b557600080fd5b505af1158015620055ca573d6000803e3d6000fd5b5050602f54604080870151905163f5ff608f60e01b81526001600160a01b03909216935063f5ff608f92506200560391600401620096d1565b600060405180830381600087803b1580156200561e57600080fd5b505af115801562005633573d6000803e3d6000fd5b50505050505050506200583d565b6001836001811115620056585762005658620091c7565b03620057fd5760003060226000018360ff16815481106200567d576200567d620087cb565b6000918252602090912001546040516001600160a01b0390911690620056a39062007aad565b6001600160a01b03928316815291166020820152604001604051809103906000f080158015620056d7573d6000803e3d6000fd5b50905060226000018260ff1681548110620056f657620056f6620087cb565b60009182526020909120015460405163e8964e8160e01b81526001600160a01b0383811660048301529091169063e8964e8190602401600060405180830381600087803b1580156200574757600080fd5b505af11580156200575c573d6000803e3d6000fd5b505050508060226002018360ff16815481106200577d576200577d620087cb565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055508060226003018360ff1681548110620057c857620057c8620087cb565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550506200583d565b60405162461bcd60e51b8152602060048201526014602482015273696e76616c6964206c696272617279207479706560601b604482015260640162002d5e565b600101620040fc565b5060005b8360ff168160ff1610156200344957600060226000018260ff1681548110620058775762005877620087cb565b60009182526020822001546001600160a01b03169150846001811115620058a257620058a2620091c7565b03620059ef57806001600160a01b031663aafea3126201117160226004018560ff1681548110620058d757620058d7620087cb565b60009182526020909120015460405160e084901b6001600160e01b031916815263ffffffff90921660048301526001600160a01b03166024820152604401600060405180830381600087803b1580156200593057600080fd5b505af115801562005945573d6000803e3d6000fd5b50505050806001600160a01b031663a718531b6201117160226004018560ff1681548110620059785762005978620087cb565b600091825260208220015460405160e085901b6001600160e01b031916815263ffffffff90931660048401526001600160a01b031660248301526044820152606401600060405180830381600087803b158015620059d557600080fd5b505af1158015620059ea573d6000803e3d6000fd5b505050505b60005b8560ff168160ff16101562005b6a578060ff168360ff16031562005b61576001600160a01b03821663aafea31262005a2c836001620087f7565b6024805460ff881690811062005a465762005a46620087cb565b60009182526020909120015460405160e084901b6001600160e01b031916815260ff90921660048301526001600160a01b03166024820152604401600060405180830381600087803b15801562005a9c57600080fd5b505af115801562005ab1573d6000803e3d6000fd5b50505050816001600160a01b031663a718531b82600162005ad39190620087f7565b6025805460ff881690811062005aed5762005aed620087cb565b600091825260208220015460405160e085901b6001600160e01b031916815260ff90931660048401526001600160a01b031660248301526044820152606401600060405180830381600087803b15801562005b4757600080fd5b505af115801562005b5c573d6000803e3d6000fd5b505050505b600101620059f2565b50506001016200584a565b606060138054806020026020016040519081016040528092919081815260200182805480156200102e576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116200100f575050505050905090565b62005c2f603060089054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562002b99573d6000803e3d6000fd5b60315460408051638da5cb5b60e01b8152905162005c7c926001600160a01b031691638da5cb5b9160048083019260209291908290030181865afa15801562002b99573d6000803e3d6000fd5b6030546032546040516370a0823160e01b81526001600160a01b03918216600482015262005cbe92600160401b9004909116906370a0823190602401620025e0565b6031546033546040516370a0823160e01b81526001600160a01b03918216600482015262005cfa9291909116906370a0823190602401620025e0565b62005d91603060089054906101000a90046001600160a01b03166001600160a01b031663fc0c546a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562005d52573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062005d78919062008da4565b603054600160401b90046001600160a01b031662006714565b60315460408051637e062a3560e11b8152905162005e16926001600160a01b03169163fc0c546a9160048083019260209291908290030181865afa15801562005dde573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062005e04919062008da4565b6031546001600160a01b031662006714565b565b60006020600062005e2a868662005ff4565b63ffffffff16815260208101919091526040016000908120546001600160a01b031691508062005e5a8462006b73565b915091506000604051806060016040528062005e7789896200610a565b63ffffffff16815260200162005e8e89896200611c565b815260200162005e9f898962006139565b6001600160401b0316905290506001600160a01b038416630c0c389e84848462005eca8c8c62006160565b62005ed68d8d62006175565b62005ee28e8e620064c7565b604051806020016040528060008152506040518963ffffffff1660e01b815260040162005f15969594939291906200971b565b6000604051808303818589803b15801562005f2f57600080fd5b5088f115801562005f44573d6000803e3d6000fd5b50505050505050505050505050565b60008062003684848462006c6a565b600062005f70858562005ff4565b9050600062005f80868662006cce565b63ffffffff83166000908152601d60209081526040808320848452909152812091925062005faf888862006175565b905062005fbd828262006ce0565b6000818152601e6020526040902062005fd8888a83620097e4565b506000818152601f60205260409020620034d0868883620097e4565b6000620060066031602d8486620098b0565b6200601191620098dc565b60e01c9392505050565b60008060008060006200603086600562006d3e565b9150915081620060925760405162461bcd60e51b815260206004820152602660248201527f4f7074696f6e7348656c7065723a206c7a52656164206f7074696f6e206e6f7460448201526508199bdd5b9960d21b606482015260840162002d5e565b604051634ba8e54360e11b81523090639751ca8690620060b790849060040162008426565b606060405180830381865afa158015620060d5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620060fb91906200990b565b94509450945050509193909250565b600062006006600d60098486620098b0565b60006200612e602d600d8486620098b0565b620011399162009954565b60006200614b600960018486620098b0565b620061569162009973565b60c01c9392505050565b60006200113962006172848462006cce565b90565b60006200612e607160518486620098b0565b62005e16620071e4565b60008083604051602001620061a791906200918b565b60408051601f1981840301815290829052620061c8918590602001620099a2565b60405160208183030381529060405290508051602082016000f09150813b62002cf057600080fd5b60008060008060006200620586600362006d3e565b91509150816200626a5760405162461bcd60e51b815260206004820152602960248201527f4f7074696f6e7348656c7065723a206c7a436f6d706f7365206f7074696f6e206044820152681b9bdd08199bdd5b9960ba1b606482015260840162002d5e565b604051630518e8ab60e41b8152309063518e8ab0906200628f90849060040162008426565b606060405180830381865afa158015620062ad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620062d39190620099d5565b91986001600160801b039182169850911695509350505050565b600080806012841480159062006304575060228414155b156200632357604051638b4aa70b60e01b815260040160405180910390fd5b620063318585600062007232565b925062006341858560026200725d565b9150602284146200635457600062006362565b62006362858560126200725d565b90509250925092565b546001600160801b03808216600160801b9092048116919091031690565b366000620036846051828587620098b0565b366000620036848360518187620098b0565b6040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052606090600090605c0160408051808303601f190181529082905280516020909101206338d07aa960e21b82526001600483015260248201819052915060009081908190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063e341eaa490604401606060405180830381865afa1580156200645d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062006483919062009a0b565b6040805160208101939093528281019190915260f89290921b6001600160f81b03191660608201528151604181830301815260619091019091529695505050505050565b366000620036848360718187620098b0565b600036816001840181620064ef88888462007232565b6002929092019190506200650588888462007288565b94506001820161ffff821683016200652081838b8d620098b0565b979b909a50969850505061ffff160193505050565b606083600362006547826000620072b0565b61ffff16146200657f576200655e816000620072b0565b604051633a51740d60e01b815261ffff909116600482015260240162002d5e565b60006200658d858562007311565b90506200659d866001836200738c565b9695505050505050565b6060846003620065b9826000620072b0565b61ffff1614620065d0576200655e816000620072b0565b6000620065df86868662007402565b9050620065ef876003836200738c565b979650505050505050565b80821462000a2d57600080516020620319788339815191526040516200665c9060208082526022908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b75696e604082015261745d60f01b606082015260800190565b60405180910390a17fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a88260405162006695919062009a45565b60405180910390a17fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a881604051620066ce919062009a7e565b60405180910390a162000a2d62007486565b606084848484604051602001620066fb949392919062009aa9565b6040516020818303038152906040529050949350505050565b806001600160a01b0316826001600160a01b03161462000a2d57600080516020620319788339815191526040516200678b9060208082526025908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b616464604082015264726573735d60d81b606082015260800190565b60405180910390a17f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f82604051620067c4919062009afa565b60405180910390a17f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f81604051620066ce919062009b3f565b80821462000a2d5760008051602062031978833981519152604051620068629060208082526025908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b627974604082015264657333325d60d81b606082015260800190565b60405180910390a17fafb795c9c61e4fe7468c386f925d7a5429ecad9c0495ddb8d38d690614d32f99826040516200689b919062009a45565b60405180910390a17fafb795c9c61e4fe7468c386f925d7a5429ecad9c0495ddb8d38d690614d32f9981604051620066ce919062009a7e565b62000a2d828262007599565b6000620069008254600160801b81046001600160801b0390811691161490565b15620069125762006912603262007677565b5080546000196001600160801b03600160801b9092048216011660009081526001909101602052604090205490565b80546000906001600160801b03600160801b82048116911681036200696c576200696c603162007677565b600019016001600160801b039081166000818152600185016020526040812080549190558454909216600160801b909102179092555090565b6000620069b3838362006d3e565b509392505050565b600080600080620069ce85600262006d3e565b915091508162006a345760405162461bcd60e51b815260206004820152602a60248201527f4f7074696f6e7348656c7065723a206e617469766544726f70206f7074696f6e604482015269081b9bdd08199bdd5b9960b21b606482015260840162002d5e565b604051635caa7efb60e11b8152309063b954fdf69062006a5990849060040162008426565b6040805180830381865afa15801562006a76573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062006a9c919062009b6a565b6001600160801b03909116969095509350505050565b600080806014841480159062006ac9575060248414155b1562006ae857604051636f5bff2160e11b815260040160405180910390fd5b62006af6858560006200725d565b925062006b068585601062007689565b91506024841462006b1957600062006362565b62006362858560146200725d565b6000806030831462006b4c576040516361d0c2c760e11b815260040160405180910390fd5b62006b5a848460006200725d565b915062006b6a84846010620076b4565b90509250929050565b60008060008062006b8685600162006d3e565b915091508162006beb5760405162461bcd60e51b815260206004820152602960248201527f4f7074696f6e7348656c7065723a206c7a52656365697665206f7074696f6e206044820152681b9bdd08199bdd5b9960ba1b606482015260840162002d5e565b60405163f93e1d6160e01b8152309063f93e1d619062006c1090849060040162008426565b6040805180830381865afa15801562006c2d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062006c53919062009b9b565b6001600160801b0391821697911695509350505050565b6000806010831480159062006c80575060208314155b1562006c9f57604051634796aee160e01b815260040160405180910390fd5b62006cad848460006200725d565b91506020831462006cc057600062006b6a565b62006b6a848460106200725d565b60006200612e605160318486620098b0565b81546001600160801b038082166000190191600160801b900481169082160362006d105762006d10604162007677565b6001600160801b0316600081815260018401602052604090209190915581546001600160801b031916179055565b601c5460405163e5c5e9a360e01b815260009160609183916001600160a01b03169063e5c5e9a39062006d7690889060040162008426565b600060405180830381865afa15801562006d94573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262006dbe919081019062009bcf565b5060408051600080825260208201909252919250908190819081905b8551851015620071b757604051636e1775e360e01b8152600090819081903090636e1775e39062006e12908c908c9060040162008cc6565b600060405180830381865afa15801562006e30573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262006e5a919081019062009c39565b9250925092508b60ff168360ff1603620071ac5760008080808060001960ff89160162006f535760405163f93e1d6160e01b8152309063f93e1d619062006ea6908a9060040162008426565b6040805180830381865afa15801562006ec3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062006ee9919062009b9b565b909550935062006efa858d62009c98565b9b5062006f08848c62009c98565b9a508b8b60405160200162006f3c929190608092831b6001600160801b031990811682529190921b16601082015260200190565b6040516020818303038152906040529850620071a6565b60011960ff8916016200700357604051635caa7efb60e11b8152309063b954fdf69062006f85908a9060040162008426565b6040805180830381865afa15801562006fa2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062006fc8919062009b6a565b909450925062006fd9848c62009c98565b6040516001600160801b0319608083901b16602082015260308101859052909b5060500162006f3c565b60021960ff891601620070b357604051630518e8ab60e41b8152309063518e8ab09062007035908a9060040162008426565b606060405180830381865afa15801562007053573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620070799190620099d5565b909650945091506200708c858d62009c98565b9b506200709a848c62009c98565b9a50818c8c60405160200162006f3c9392919062009cbb565b60041960ff891601620071a657604051634ba8e54360e11b81523090639751ca8690620070e5908a9060040162008426565b606060405180830381865afa15801562007103573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200712991906200990b565b91965090945090506200713d848c62009c98565b9a506200714b858d62009c98565b9b5062007159818b62009cf1565b6040516001600160801b031960808f811b821660208401526001600160e01b031960e085901b1660308401528e901b166034820152909a5060440160405160208183030381529060405298505b50505050505b965062006dda915050565b8051600003620071d35760009750955062003689945050505050565b60019a909950975050505050505050565b604051620071f29062007abb565b604051809103906000f0801580156200720f573d6000803e3d6000fd5b50601c80546001600160a01b0319166001600160a01b0392909216919091179055565b6000600282016200724681848688620098b0565b620072519162009d11565b60f01c95945050505050565b6000601082016200727181848688620098b0565b6200727c9162009d40565b60801c95945050505050565b60008383838181106200729f576200729f620087cb565b919091013560f81c95945050505050565b6000620072bf82600262008ba1565b83511015620073085760405162461bcd60e51b8152602060048201526014602482015273746f55696e7431365f6f75744f66426f756e647360601b604482015260640162002d5e565b50016002015190565b60606001600160801b038216156200735b57604080516001600160801b0319608086811b8216602084015285901b1660308201520160405160208183030381529060405262001139565b6040516001600160801b0319608085901b166020820152603001604051602081830303815290604052905092915050565b60608360036200739e826000620072b0565b61ffff1614620073b5576200655e816000620072b0565b846001620073c48551620076dc565b620073d190600162009d6f565b8686604051602001620073e995949392919062009d8d565b6040516020818303038152906040529150509392505050565b60606001600160801b0382161562007440578383836040516020016200742b9392919062009cbb565b6040516020818303038152906040526200747e565b6040516001600160f01b031960f086901b1660208201526001600160801b0319608085901b1660228201526032016040516020818303038152906040525b949350505050565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620075885760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190526519985a5b195960d21b9282019290925260016060820152600091907f70ca10bbd0dbfd9020a9f4b13402c16cb120705e0d1c0aeab10fa353ae586fc49060800160408051601f198184030181529082905262007523929160200162009158565b60408051601f19818403018152908290526200753f916200918b565b6000604051808303816000865af19150503d80600081146200757e576040519150601f19603f3d011682016040523d82523d6000602084013e62007583565b606091505b505050505b6007805461ff001916610100179055565b620075a5828262007711565b62000a2d5760008051602062031978833981519152604051620076059060208082526023908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b62797460408201526265735d60e81b606082015260800190565b60405180910390a17fd26e16cad4548705e4c9e2d94f98ee91c289085ee425594fd5635fa2964ccf18826040516200763e919062009df8565b60405180910390a17fd26e16cad4548705e4c9e2d94f98ee91c289085ee425594fd5635fa2964ccf1881604051620066ce919062009e37565b634e487b71600052806020526024601cfd5b6000600482016200769d81848688620098b0565b620076a891620098dc565b60e01c95945050505050565b600060208201620076c881848688620098b0565b620076d39162009954565b95945050505050565b600061ffff8211156200770d576040516306dfcc6560e41b8152601060048201526024810183905260440162002d5e565b5090565b805182516001919003620077955760005b83518110156200778e57828181518110620077415762007741620087cb565b602001015160f81c60f81b6001600160f81b0319168482815181106200776b576200776b620087cb565b01602001516001600160f81b031916146200778557600091505b60010162007722565b506200145f565b50600092915050565b6139358062009e6383390190565b6040518060a00160405280600063ffffffff16815260200160006001600160a01b031681526020016060815260200160008152602001606081525090565b61052c806200d79883390190565b82805482825590600052602060002090810192821562007850579160200282015b828111156200785057825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019062007819565b506200770d92915062007ac9565b82805482825590600052602060002090600701600890048101928215620078505791602002820160005b83821115620078ce57835183826101000a81548163ffffffff021916908363ffffffff160217905550926020019260040160208160030104928301926001030262007888565b8015620079005782816101000a81549063ffffffff0219169055600401602081600301049283019260010302620078ce565b50506200770d92915062007ac9565b6154bf806200dcc483390190565b615649806201318383390190565b6114d680620187cc83390190565b6149708062019ca283390190565b612441806201e61283390190565b614c078062020a5383390190565b61313b806202565a83390190565b611625806202879583390190565b613bf78062029dba83390190565b611eb6806202d9b183390190565b6040518060400160405280600063ffffffff168152602001620079ff6040518060c0016040528060006001600160401b03168152602001600060ff168152602001600060ff168152602001600060ff16815260200160608152602001606081525090565b905290565b6040518060400160405280600063ffffffff168152602001620079ff6040518060400160405280600063ffffffff16815260200160006001600160a01b031681525090565b6040518060400160405280600063ffffffff168152602001620079ff6040518060c0016040528060006001600160a01b03168152602001600060ff168152602001600060ff168152602001600060ff16815260200160608152602001606081525090565b61191f806202f86783390190565b6107f2806203118683390190565b5b808211156200770d576000815560010162007aca565b63ffffffff8116811462007af357600080fd5b50565b6001600160a01b038116811462007af357600080fd5b6000806040838503121562007b2057600080fd5b823562007b2d8162007ae0565b9150602083013562007b3f8162007af6565b809150509250929050565b60008083601f84011262007b5d57600080fd5b5081356001600160401b0381111562007b7557600080fd5b6020830191508360208285010111156200368957600080fd5b634e487b7160e01b600052604160045260246000fd5b60405160c081016001600160401b038111828210171562007bc95762007bc962007b8e565b60405290565b604051601f8201601f191681016001600160401b038111828210171562007bfa5762007bfa62007b8e565b604052919050565b60006001600160401b0382111562007c1e5762007c1e62007b8e565b50601f01601f191660200190565b600082601f83011262007c3e57600080fd5b813562007c5562007c4f8262007c02565b62007bcf565b81815284602083860101111562007c6b57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806060858703121562007c9f57600080fd5b84356001600160401b038082111562007cb757600080fd5b62007cc58883890162007b4a565b9096509450602087013591508082111562007cdf57600080fd5b62007ced8883890162007c2c565b9350604087013591508082111562007d0457600080fd5b5062007d138782880162007c2c565b91505092959194509250565b60ff8116811462007af357600080fd5b803560028110620037c257600080fd5b6000806040838503121562007d5357600080fd5b823562007d608162007d1f565b915062006b6a6020840162007d2f565b60008151808452602080850194506020840160005b8381101562007dac5781516001600160a01b03168752958201959082019060010162007d85565b509495945050505050565b60208152600062001139602083018462007d70565b60008060006060848603121562007de257600080fd5b83356001600160401b0381111562007df957600080fd5b62007e078682870162007c2c565b935050602084013562007e1a8162007d1f565b9150604084013562007e2c8162007d1f565b809150509250925092565b60005b8381101562007e5457818101518382015260200162007e3a565b50506000910152565b6000815180845262007e7781602086016020860162007e37565b601f01601f19169290920160200192915050565b60008282518085526020808601955060208260051b8401016020860160005b8481101562007edc57601f1986840301895262007ec983835162007e5d565b9884019892509083019060010162007eaa565b5090979650505050505050565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b8381101562007f5e57888303603f19018552815180516001600160a01b0316845287015187840187905262007f4a8785018262007e8b565b958801959350509086019060010162007f12565b509098975050505050505050565b600080600080600080600060c0888a03121562007f8857600080fd5b873562007f958162007ae0565b9650602088013562007fa78162007af6565b955060408801356001600160401b038082111562007fc457600080fd5b62007fd28b838c0162007c2c565b965060608a0135955060808a0135915062007fed8262007af6565b90935060a089013590808211156200800457600080fd5b50620080138a828b0162007b4a565b989b979a50959850939692959293505050565b600080602083850312156200803a57600080fd5b82356001600160401b038111156200805157600080fd5b6200805f8582860162007b4a565b90969095509350505050565b61ffff8116811462007af357600080fd5b600080604083850312156200809057600080fd5b82356200809d816200806b565b946020939093013593505050565b600080600060408486031215620080c157600080fd5b83356001600160401b0380821115620080d957600080fd5b620080e78783880162007b4a565b909550935060208601359150808211156200810157600080fd5b50620081108682870162007c2c565b9150509250925092565b60006001600160401b0382111562008136576200813662007b8e565b5060051b60200190565b600082601f8301126200815257600080fd5b813560206200816562007c4f836200811a565b8083825260208201915060208460051b8701019350868411156200818857600080fd5b602086015b84811015620081b1578035620081a38162007af6565b83529183019183016200818d565b509695505050505050565b60008060408385031215620081d057600080fd5b82356001600160401b0380821115620081e857600080fd5b620081f68683870162008140565b93506020915081850135818111156200820e57600080fd5b85019050601f810186136200822257600080fd5b80356200823362007c4f826200811a565b81815260059190911b820183019083810190888311156200825357600080fd5b928401925b828410156200827e5783356200826e8162007ae0565b8252928401929084019062008258565b80955050505050509250929050565b600060208083018184528085518083526040925060408601915060408160051b8701018488016000805b848110156200833757898403603f19018652825180516001600160a01b03168552880151888501889052805188860181905290890190839060608701905b80831015620083215783516001600160e01b0319168252928b019260019290920191908b0190620082f5565b50978a01979550505091870191600101620082b7565b50919998505050505050505050565b6000806000604084860312156200835c57600080fd5b83356001600160401b038111156200837357600080fd5b620083818682870162007b4a565b909790965060209590950135949350505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60ff85168152606060208201526000620083dd60608301858762008395565b905082604083015295945050505050565b6000602082840312156200840157600080fd5b81356001600160401b038111156200841857600080fd5b6200747e8482850162008140565b60208152600062001139602083018462007e5d565b600080600080600060a086880312156200845457600080fd5b8535620084618162007ae0565b945060208601359350604086013592506060860135620084818162007af6565b915060808601356001600160401b038111156200849d57600080fd5b620084ab8882890162007c2c565b9150509295509295909350565b60208152600062001139602083018462007e8b565b600080600080600060808688031215620084e657600080fd5b85356001600160401b0380821115620084fe57600080fd5b6200850c89838a0162007b4a565b909750955060208801359150808211156200852657600080fd5b50620085358882890162007c2c565b9350506040860135915060608601356200854f8162007af6565b809150509295509295909350565b6000602082840312156200857057600080fd5b8135620011398162007af6565b600080604083850312156200859157600080fd5b82356200809d8162007ae0565b600080600060608486031215620085b457600080fd5b8335620085c18162007d1f565b9250620085d16020850162007d2f565b915060408401356001600160401b03811115620085ed57600080fd5b620081108682870162008140565b6001600160801b038116811462007af357600080fd5b6000602082840312156200862457600080fd5b81356200113981620085fb565b600080600080604085870312156200864857600080fd5b84356001600160401b03808211156200866057600080fd5b6200866e8883890162007b4a565b909650945060208701359150808211156200868857600080fd5b50620086978782880162007b4a565b95989497509550505050565b855163ffffffff168152602080870151908201526040808701516001600160401b03169082015260018060a01b038516606082015283608082015260e060a08201526000620086f660e083018562007e5d565b82810360c08401526200870a818562007e5d565b98975050505050505050565b6080815260006200873b6080830160048152631853d19560e21b602082015260400190565b82810360208401526200875f8160048152631853d19560e21b602082015260400190565b6001600160a01b0395861660408501529390941660609092019190915250919050565b608081526000620087a76080830160048152631893d19560e21b602082015260400190565b82810360208401526200875f8160048152631893d19560e21b602082015260400190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60ff81811683821601908111156200145f576200145f620087e1565b60ff82811682821603908111156200145f576200145f620087e1565b600181811c908216806200884457607f821691505b6020821081036200886557634e487b7160e01b600052602260045260246000fd5b50919050565b6001600160a01b038881168252871660208201526040810186905261ffff8516606082015260c060808201819052600090620088ab908301858762008395565b82810360a0840152620088bf818562007e5d565b9a9950505050505050505050565b8051620037c28162007af6565b80518015158114620037c257600080fd5b60008060408385031215620088ff57600080fd5b82516200890c8162007af6565b915062006b6a60208401620088da565b80516001600160401b0381168114620037c257600080fd5b8051620037c28162007d1f565b6000806000606084860312156200895757600080fd5b62008962846200891c565b92506020840151620089748162007d1f565b604085015190925062007e2c8162007d1f565b600082601f8301126200899957600080fd5b8151620089aa62007c4f8262007c02565b818152846020838601011115620089c057600080fd5b6200747e82602083016020870162007e37565b600060208284031215620089e657600080fd5b81516001600160401b03811115620089fd57600080fd5b6200747e8482850162008987565b600082601f83011262008a1d57600080fd5b8151602062008a3062007c4f836200811a565b8083825260208201915060208460051b87010193508684111562008a5357600080fd5b602086015b84811015620081b157805162008a6e8162007af6565b835291830191830162008a58565b60006020828403121562008a8f57600080fd5b81516001600160401b038082111562008aa757600080fd5b9083019060c0828603121562008abc57600080fd5b62008ac662007ba4565b62008ad1836200891c565b815262008ae16020840162008934565b602082015262008af46040840162008934565b604082015262008b076060840162008934565b606082015260808301518281111562008b1f57600080fd5b62008b2d8782860162008a0b565b60808301525060a08301518281111562008b4657600080fd5b62008b548782860162008a0b565b60a08301525095945050505050565b8183823760009101908152919050565b60608152600062008b88606083018662007e5d565b905083602083015260ff83166040830152949350505050565b808201808211156200145f576200145f620087e1565b63ffffffff851681526001600160a01b038416602082015260806040820181905260009062008be99083018562007e5d565b905082606083015295945050505050565b60006020828403121562008c0d57600080fd5b5051919050565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b8381101562007f5e57888303603f190185528151805163ffffffff168452878101516001600160a01b0316888501528681015160a08886018190529062008c878287018262007e5d565b91505060608083015181870152506080808301519250858203818701525062008cb1818362007e5d565b96890196945050509086019060010162008c3d565b60408152600062008cdb604083018562007e5d565b90508260208301529392505050565b60006020828403121562008cfd57600080fd5b81516001600160401b038082111562008d1557600080fd5b9083019060c0828603121562008d2a57600080fd5b62008d3462007ba4565b62008ad183620088cd565b8281526000825162008d5981602085016020870162007e37565b919091016020019392505050565b60608152600062008d7c606083018662007e5d565b60208301949094525060400152919050565b6020815260006200747e60208301848662008395565b60006020828403121562008db757600080fd5b8151620011398162007af6565b60006020828403121562008dd757600080fd5b8151620011398162007ae0565b63ffffffff81511682526020810151602083015260408101516040830152606081015160608301526000608082015160e0608085015262008e2960e085018262007e5d565b905060a083015184820360a086015262008e44828262007e5d565b91505060c083015184820360c0860152620076d3828262007e5d565b60408152600062008e75604083018562008de4565b905082151560208301529392505050565b60006040828403121562008e9957600080fd5b604051604081018181106001600160401b038211171562008ebe5762008ebe62007b8e565b604052825181526020928301519281019290925250919050565b60006040828403121562008eeb57600080fd5b62001139838362008e86565b60808152600062008f0c608083018662008de4565b8451602084810191909152909401516040830152506001600160a01b0391909116606090910152919050565b60008082840360c081121562008f4d57600080fd5b608081121562008f5c57600080fd5b50604051606081018181106001600160401b038211171562008f825762008f8262007b8e565b6040528351815262008f97602085016200891c565b602082015262008fab856040860162008e86565b6040820152915062006b6a846080850162008e86565b63ffffffff87168152600060018060a01b03808816602084015260c0604084015262008ff160c084018862007e5d565b866060850152818616608085015283810360a0850152620088bf818662007e5d565b818103818111156200145f576200145f620087e1565b6000816200903b576200903b620087e1565b506000190190565b60408152600062009058604083018562007e5d565b8281036020840152620076d3818562007e5d565b60608152600062009081606083018662007e5d565b828103602084015262009095818662007e5d565b905082810360408401526200659d818562007e5d565b608081526000620090c0608083018762007e5d565b8281036020840152620090d4818762007e5d565b604084019590955250506001600160a01b039190911660609091015292915050565b63ffffffff88168152600060018060a01b03808916602084015260c060408401526200912660c084018962007e5d565b876060850152818716608085015283810360a08501526200914981868862008395565b9b9a5050505050505050505050565b6001600160e01b03198316815281516000906200917d81600485016020870162007e37565b919091016004019392505050565b600082516200919f81846020870162007e37565b9190910192915050565b600060208284031215620091bc57600080fd5b6200113982620088da565b634e487b7160e01b600052602160045260246000fd5b600060018060a01b038089168352808816602084015260c060408401526200920960c084018862007d70565b8187166060850152818616608085015283810360a0850152620088bf818662007d70565b63ffffffff881681526000602060ff8916602084015260e060408401526200925960e084018962007d70565b6001600160a01b0388811660608601528482036080860152875480835260008981526020808220940191905b81811015620092a557845484168352600194850194928601920162009285565b50506001600160401b03881660a087015285810360c0870152620092ca818862007d70565b9d9c50505050505050505050505050565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b8381101562007f5e57603f19898403810186528251805163ffffffff16855288015188850188905280516001600160401b0316888601528089015160ff9081166060808801919091528983015182166080808901919091529083015190911660a0808801919091529082015160c080880152906200938761010088018362007d70565b920151868303840160e0880152919050620093a3818362007d70565b978a019795505050918701915060010162009304565b602080825282518282018190526000919060409081850190868401855b828110156200941d578151805163ffffffff9081168652908701518051909116878601528601516001600160a01b03168585015260609093019290850190600101620093d6565b5091979650505050505050565b6000602082840312156200943d57600080fd5b81516200113981620085fb565b6001600160801b03818116838216028082169190828114620094705762009470620087e1565b505092915050565b602080825282518282018190526000919060409081850190868401855b828110156200941d578151805163ffffffff90811686529087015180516001600160801b031688870152808801516001600160401b0316878701528601511660608501526080909301929085019060010162009495565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b8381101562007f5e57603f19898403810186528251805163ffffffff16855288015188850188905280516001600160a01b0316888601528089015160ff9081166060808801919091528983015182166080808901919091529083015190911660a0808801919091529082015160c080880152906200959861010088018362007d70565b920151868303840160e0880152919050620095b4818362007d70565b978a019795505050918701915060010162009515565b602080825282518282018190526000919060409081850190868401855b828110156200941d578151805163ffffffff168552868101516001600160401b039081168887015286820151168686015260608082015161ffff16908601526080808201516001600160801b039081169187019190915260a091820151169085015260c09093019290850190600101620095e7565b602080825282518282018190526000919060409081850190868401855b828110156200941d578151805163ffffffff168552868101516001600160401b0316878601528581015161ffff16868601526060908101516001600160801b0316908501526080909301929085019060010162009679565b602080825282518282018190526000919060409081850190868401855b828110156200941d578151805163ffffffff168552860151868501529284019290850190600101620096ee565b865163ffffffff168152602080880151908201526040808801516001600160401b03169082015260018060a01b038616606082015284608082015260e060a082015260006200976f60e08301858762008395565b82810360c084015262009783818562007e5d565b9998505050505050505050565b601f8211156200214c576000816000526020600020601f850160051c81016020861015620097bb5750805b601f850160051c820191505b81811015620097dc57828155600101620097c7565b505050505050565b6001600160401b03831115620097fe57620097fe62007b8e565b62009816836200980f83546200882f565b8362009790565b6000601f8411600181146200984d5760008515620098345750838201355b600019600387901b1c1916600186901b17835562000f78565b600083815260209020601f19861690835b828110156200988057868501358255602094850194600190920191016200985e565b50868210156200989e5760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b60008085851115620098c157600080fd5b83861115620098cf57600080fd5b5050820193919092039150565b6001600160e01b03198135818116916004851015620094705760049490940360031b84901b1690921692915050565b6000806000606084860312156200992157600080fd5b83516200992e81620085fb565b6020850151909350620099418162007ae0565b604085015190925062007e2c81620085fb565b803560208310156200145f57600019602084900360031b1b1692915050565b6001600160c01b03198135818116916008851015620094705760089490940360031b84901b1690921692915050565b60008351620099b681846020880162007e37565b835190830190620099cc81836020880162007e37565b01949350505050565b600080600060608486031215620099eb57600080fd5b8351620099f8816200806b565b60208501519093506200994181620085fb565b60008060006060848603121562009a2157600080fd5b835162009a2e8162007d1f565b602085015160409095015190969495509392505050565b60408152600062009a7060408301600a8152690808080808081319599d60b21b602082015260400190565b905082602083015292915050565b60408152600062009a7060408301600a8152690808080808149a59da1d60b21b602082015260400190565b6001600160401b0360c01b8560c01b16815263ffffffff60e01b8460e01b16600882015282600c8201526000825162009aea81602c85016020870162007e37565b91909101602c0195945050505050565b60408152600062009b2560408301600a8152690808080808081319599d60b21b602082015260400190565b6001600160a01b0393909316602092909201919091525090565b60408152600062009b2560408301600a8152690808080808149a59da1d60b21b602082015260400190565b6000806040838503121562009b7e57600080fd5b825162009b8b81620085fb565b6020939093015192949293505050565b6000806040838503121562009baf57600080fd5b825162009bbc81620085fb565b602084015190925062007b3f81620085fb565b6000806040838503121562009be357600080fd5b82516001600160401b038082111562009bfb57600080fd5b62009c098683870162008987565b9350602085015191508082111562009c2057600080fd5b5062009c2f8582860162008987565b9150509250929050565b60008060006060848603121562009c4f57600080fd5b835162009c5c8162007d1f565b60208501519093506001600160401b0381111562009c7957600080fd5b62009c878682870162008987565b925050604084015190509250925092565b6001600160801b0381811683821601908082111562002cf05762002cf0620087e1565b60f09390931b6001600160f01b0319168352608091821b6001600160801b03199081166002850152911b16601282015260220190565b63ffffffff81811683821601908082111562002cf05762002cf0620087e1565b6001600160f01b03198135818116916002851015620094705760029490940360031b84901b1690921692915050565b6001600160801b03198135818116916010851015620094705760109490940360031b84901b1690921692915050565b61ffff81811683821601908082111562002cf05762002cf0620087e1565b6000865162009da1818460208b0162007e37565b6001600160f81b031960f888811b82169285019283526001600160f01b031960f089901b16600184015286901b166003820152835162009de981600484016020880162007e37565b01600401979650505050505050565b60408152600062009e2360408301600a8152690808080808081319599d60b21b602082015260400190565b82810360208401526200747e818562007e5d565b60408152600062009e2360408301600a8152690808080808149a59da1d60b21b60208201526040019056fe60c06040523480156200001157600080fd5b5060405162003935380380620039358339810160408190526200003491620002d2565b83838383838360128484818181818d6001600160a01b0381166200007257604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b6200007d8162000198565b506001600160a01b038083166080528116620000ac57604051632d618d8160e21b815260040160405180910390fd5b60805160405163ca5eb5e160e01b81526001600160a01b0383811660048301529091169063ca5eb5e190602401600060405180830381600087803b158015620000f457600080fd5b505af115801562000109573d6000803e3d6000fd5b505050505050505062000121620001e860201b60201c565b60ff168360ff16101562000148576040516301e9714b60e41b815260040160405180910390fd5b6200015560068462000377565b6200016290600a62000496565b60a052506008915062000178905083826200053f565b5060096200018782826200053f565b50505050505050505050506200060b565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600690565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200021557600080fd5b81516001600160401b0380821115620002325762000232620001ed565b604051601f8301601f19908116603f011681019082821181831017156200025d576200025d620001ed565b81604052838152602092508660208588010111156200027b57600080fd5b600091505b838210156200029f578582018301518183018401529082019062000280565b6000602085830101528094505050505092915050565b80516001600160a01b0381168114620002cd57600080fd5b919050565b60008060008060808587031215620002e957600080fd5b84516001600160401b03808211156200030157600080fd5b6200030f8883890162000203565b955060208701519150808211156200032657600080fd5b50620003358782880162000203565b9350506200034660408601620002b5565b91506200035660608601620002b5565b905092959194509250565b634e487b7160e01b600052601160045260246000fd5b60ff828116828216039081111562000393576200039362000361565b92915050565b600181815b80851115620003da578160001904821115620003be57620003be62000361565b80851615620003cc57918102915b93841c93908002906200039e565b509250929050565b600082620003f35750600162000393565b81620004025750600062000393565b81600181146200041b5760028114620004265762000446565b600191505062000393565b60ff8411156200043a576200043a62000361565b50506001821b62000393565b5060208310610133831016604e8410600b84101617156200046b575081810a62000393565b62000477838362000399565b80600019048211156200048e576200048e62000361565b029392505050565b6000620004a760ff841683620003e2565b9392505050565b600181811c90821680620004c357607f821691505b602082108103620004e457634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200053a576000816000526020600020601f850160051c81016020861015620005155750805b601f850160051c820191505b81811015620005365782815560010162000521565b5050505b505050565b81516001600160401b038111156200055b576200055b620001ed565b62000573816200056c8454620004ae565b84620004ea565b602080601f831160018114620005ab5760008415620005925750858301515b600019600386901b1c1916600185901b17855562000536565b600085815260208120601f198616915b82811015620005dc57888601518255948401946001909101908401620005bb565b5085821015620005fb5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a0516132be6200067760003960008181610768015281816114b80152818161199b0152611b0001526000818161063001528181610b5b015281816111da015281816115ae015281816117f501528181611fc8015281816120cc015261218301526132be6000f3fe6080604052600436106102c95760003560e01c8063715018a611610175578063bb0b6a53116100dc578063d045a0dc11610095578063f01630231161006f578063f016302314610958578063f2fde38b14610978578063fc0c546a1461057f578063ff7bd03d1461099857600080fd5b8063d045a0dc146108df578063d4243885146108f2578063dd62ed3e1461091257600080fd5b8063bb0b6a531461081e578063bc70b3541461084b578063bd815db01461086b578063c07799881461087e578063c7c7f5b31461089e578063ca5eb5e1146108bf57600080fd5b8063963efcaa1161012e578063963efcaa146107565780639f68b9641461078a578063a9059cbb1461079e578063b3a5abeb146107be578063b731ea0a146107de578063b98bd070146107fe57600080fd5b8063715018a6146106a85780637d25a05e146106bd57806382413eac146106e0578063857749b01461070f5780638da5cb5b1461072357806395d89b411461074157600080fd5b806323b872dd1161023457806352ae2879116101ed5780635a0dfe4d116101c75780635a0dfe4d146105e75780635e280f111461061e5780636fc1b31e1461065257806370a082311461067257600080fd5b806352ae28791461057f57806354f52414146105925780635535d461146105c757600080fd5b806323b872dd146104b0578063313ce567146104d05780633400288b146104f25780633b6f743b1461051257806340c10f191461053f5780634dba701b1461055f57600080fd5b806313137d651161028657806313137d65146103f6578063134d4f251461040b578063156a0d0f1461043357806317442b701461045a57806318160ddd1461047c5780631f5e13341461049b57600080fd5b8063056d62de146102ce57806306fdde0314610305578063095ea7b3146103275780630d35b415146103575780630e78842c14610386578063111ecdad146103be575b600080fd5b3480156102da57600080fd5b506102ee6102e93660046122c3565b6109b8565b6040516102fc929190612357565b60405180910390f35b34801561031157600080fd5b5061031a6109d1565b6040516102fc919061237c565b34801561033357600080fd5b506103476103423660046123a4565b610a63565b60405190151581526020016102fc565b34801561036357600080fd5b506103776103723660046123d0565b610a7d565b6040516102fc93929190612404565b34801561039257600080fd5b506103a66103a136600461249d565b610b4e565b6040516001600160401b0390911681526020016102fc565b3480156103ca57600080fd5b506004546103de906001600160a01b031681565b6040516001600160a01b0390911681526020016102fc565b610409610404366004612509565b610b59565b005b34801561041757600080fd5b50610420600281565b60405161ffff90911681526020016102fc565b34801561043f57600080fd5b506040805162b9270b60e21b815260016020820152016102fc565b34801561046657600080fd5b50604080516001815260026020820152016102fc565b34801561048857600080fd5b506007545b6040519081526020016102fc565b3480156104a757600080fd5b50610420600181565b3480156104bc57600080fd5b506103476104cb3660046125a8565b610c19565b3480156104dc57600080fd5b5060125b60405160ff90911681526020016102fc565b3480156104fe57600080fd5b5061040961050d366004612602565b610c3f565b34801561051e57600080fd5b5061053261052d36600461262c565b610c55565b6040516102fc919061267d565b34801561054b57600080fd5b5061040961055a3660046123a4565b610cbc565b34801561056b57600080fd5b5061048d61057a366004612694565b610cc6565b34801561058b57600080fd5b50306103de565b34801561059e57600080fd5b506105b26105ad3660046126d2565b610cdb565b604080519283526020830191909152016102fc565b3480156105d357600080fd5b5061031a6105e2366004612710565b610cf7565b3480156105f357600080fd5b50610347610602366004612602565b63ffffffff919091166000908152600160205260409020541490565b34801561062a57600080fd5b506103de7f000000000000000000000000000000000000000000000000000000000000000081565b34801561065e57600080fd5b5061040961066d366004612743565b610d9c565b34801561067e57600080fd5b5061048d61068d366004612743565b6001600160a01b031660009081526005602052604090205490565b3480156106b457600080fd5b50610409610df9565b3480156106c957600080fd5b506103a66106d8366004612602565b600092915050565b3480156106ec57600080fd5b506103476106fb366004612760565b6001600160a01b0381163014949350505050565b34801561071b57600080fd5b5060066104e0565b34801561072f57600080fd5b506000546001600160a01b03166103de565b34801561074d57600080fd5b5061031a610e0d565b34801561076257600080fd5b5061048d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561079657600080fd5b506000610347565b3480156107aa57600080fd5b506103476107b93660046123a4565b610e1c565b3480156107ca57600080fd5b5061048d6107d93660046127db565b610e2a565b3480156107ea57600080fd5b506002546103de906001600160a01b031681565b34801561080a57600080fd5b5061040961081936600461283c565b610e35565b34801561082a57600080fd5b5061048d61083936600461287d565b60016020526000908152604090205481565b34801561085757600080fd5b5061031a610866366004612898565b610e4f565b61040961087936600461283c565b610ff7565b34801561088a57600080fd5b5061048d61089936600461249d565b611181565b6108b16108ac3660046128f8565b61118c565b6040516102fc929190612965565b3480156108cb57600080fd5b506104096108da366004612743565b6111b3565b6104096108ed366004612509565b611239565b3480156108fe57600080fd5b5061040961090d366004612743565b611268565b34801561091e57600080fd5b5061048d61092d3660046129b7565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b34801561096457600080fd5b506105b26109733660046126d2565b6112be565b34801561098457600080fd5b50610409610993366004612743565b6112cc565b3480156109a457600080fd5b506103476109b33660046129e5565b61130a565b6060806109c58484611340565b915091505b9250929050565b6060600880546109e090612a01565b80601f0160208091040260200160405190810160405280929190818152602001828054610a0c90612a01565b8015610a595780601f10610a2e57610100808354040283529160200191610a59565b820191906000526020600020905b815481529060010190602001808311610a3c57829003601f168201915b5050505050905090565b600033610a71818585611463565b60019150505b92915050565b60408051808201909152600080825260208201526060610ab0604051806040016040528060008152602001600081525090565b60408051808201825260008082526001600160401b03602080840182905284518381529081019094529195509182610b0b565b604080518082019091526000815260606020820152815260200190600190039081610ae35790505b509350600080610b30604089013560608a0135610b2b60208c018c61287d565b611475565b60408051808201909152918252602082015296989597505050505050565b6000610a77826114b1565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163314610ba9576040516391ac5e4f60e01b81523360048201526024015b60405180910390fd5b60208701803590610bc390610bbe908a61287d565b6114dd565b14610c0157610bd5602088018861287d565b60405163309afaf360e21b815263ffffffff909116600482015260208801356024820152604401610ba0565b610c1087878787878787611519565b50505050505050565b600033610c27858285611680565b610c328585856116fe565b60019150505b9392505050565b610c4761175d565b610c51828261178a565b5050565b60408051808201909152600080825260208201526000610c8560408501356060860135610b2b602088018861287d565b915050600080610c958684611340565b9092509050610cb2610caa602088018861287d565b8383886117df565b9695505050505050565b610c5182826118c0565b6000610cd38484846118f6565b949350505050565b600080610cea3386868661191e565b915091505b935093915050565b600360209081526000928352604080842090915290825290208054610d1b90612a01565b80601f0160208091040260200160405190810160405280929190818152602001828054610d4790612a01565b8015610d945780601f10610d6957610100808354040283529160200191610d94565b820191906000526020600020905b815481529060010190602001808311610d7757829003601f168201915b505050505081565b610da461175d565b600480546001600160a01b0319166001600160a01b0383169081179091556040519081527ff0be4f1e87349231d80c36b33f9e8639658eeaf474014dee15a3e6a4d4414197906020015b60405180910390a150565b610e0161175d565b610e0b6000611944565b565b6060600980546109e090612a01565b600033610a718185856116fe565b6000610a7782611994565b610e3d61175d565b610c51610e4a8284612aec565b6119c9565b63ffffffff8416600090815260036020908152604080832061ffff87168452909152812080546060929190610e8390612a01565b80601f0160208091040260200160405190810160405280929190818152602001828054610eaf90612a01565b8015610efc5780601f10610ed157610100808354040283529160200191610efc565b820191906000526020600020905b815481529060010190602001808311610edf57829003601f168201915b505050505090508051600003610f4c5783838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929450610cd39350505050565b6000839003610f5c579050610cd3565b60028310610fda57610fa384848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611ad092505050565b80610fb18460028188612c01565b604051602001610fc393929190612c2b565b604051602081830303815290604052915050610cd3565b8383604051639a6d49cd60e01b8152600401610ba0929190612c7c565b60005b81811015611100573683838381811061101557611015612c90565b90506020028101906110279190612ca6565b905061105a611039602083018361287d565b602083013563ffffffff919091166000908152600160205260409020541490565b61106457506110f8565b3063d045a0dc60c08301358360a0810135611083610100830183612cc7565b611094610100890160e08a01612743565b6110a26101208a018a612cc7565b6040518963ffffffff1660e01b81526004016110c49796959493929190612d0d565b6000604051808303818588803b1580156110dd57600080fd5b505af11580156110f1573d6000803e3d6000fd5b5050505050505b600101610ffa565b50336001600160a01b0316638e9e70996040518163ffffffff1660e01b8152600401600060405180830381865afa15801561113f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526111679190810190612d93565b604051638351eea760e01b8152600401610ba0919061237c565b6000610a7782611afc565b611194612264565b6040805180820190915260008082526020820152610cea858585611b33565b6111bb61175d565b60405163ca5eb5e160e01b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063ca5eb5e190602401600060405180830381600087803b15801561121e57600080fd5b505af1158015611232573d6000803e3d6000fd5b5050505050565b3330146112595760405163029a949d60e31b815260040160405180910390fd5b610c1087878787878787610c01565b61127061175d565b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527fd48d879cef83a1c0bdda516f27b13ddb1b3f8bbac1c9e1511bb2a659c242776090602001610dee565b600080610cea858585611475565b6112d461175d565b6001600160a01b0381166112fe57604051631e4fbdf760e01b815260006004820152602401610ba0565b61130781611944565b50565b6000602082018035906001908390611322908661287d565b63ffffffff1681526020810191909152604001600020541492915050565b606080600061139d8560200135611356866114b1565b61136360a0890189612cc7565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c2e92505050565b90935090506000816113b05760016113b3565b60025b90506113d36113c5602088018861287d565b8261086660808a018a612cc7565b6004549093506001600160a01b031680156114595760405163043a78eb60e01b81526001600160a01b0382169063043a78eb906114169088908890600401612357565b602060405180830381865afa158015611433573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114579190612e00565b505b5050509250929050565b6114708383836001611ca8565b505050565b60008061148185611afc565b915081905083811015610cef576040516371c4efed60e01b81526004810182905260248101859052604401610ba0565b6000610a777f000000000000000000000000000000000000000000000000000000000000000083612e33565b63ffffffff811660009081526001602052604081205480610a775760405163f6ff4fb760e01b815263ffffffff84166004820152602401610ba0565b600061152b6115288787611d7d565b90565b90506000611557826115456115408a8a611d95565b611994565b61155260208d018d61287d565b6118f6565b9050602886111561161e57600061159461157760608c0160408d016127db565b61158460208d018d61287d565b8461158f8c8c611db8565b611e03565b604051633e5ac80960e11b81529091506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690637cb59012906115ea9086908d906000908790600401612e55565b600060405180830381600087803b15801561160457600080fd5b505af1158015611618573d6000803e3d6000fd5b50505050505b6001600160a01b038216887fefed6d3500546b29533b128a29e3a94d70788727f0507505ac12eaf2e578fd9c61165760208d018d61287d565b6040805163ffffffff9092168252602082018690520160405180910390a3505050505050505050565b6001600160a01b0383811660009081526006602090815260408083209386168352929052205460001981146116f857818110156116e957604051637dc7a0d960e11b81526001600160a01b03841660048201526024810182905260448101839052606401610ba0565b6116f884848484036000611ca8565b50505050565b6001600160a01b03831661172857604051634b637e8f60e11b815260006004820152602401610ba0565b6001600160a01b0382166117525760405163ec442f0560e01b815260006004820152602401610ba0565b611470838383611e35565b6000546001600160a01b03163314610e0b5760405163118cdaa760e01b8152336004820152602401610ba0565b63ffffffff8216600081815260016020908152604091829020849055815192835282018390527f238399d427b947898edb290f5ff0f9109849b1c3ba196a42e35f00c50a54b98b910160405180910390a15050565b60408051808201909152600080825260208201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ddc28c586040518060a001604052808863ffffffff168152602001611842896114dd565b8152602001878152602001868152602001851515815250306040518363ffffffff1660e01b8152600401611877929190612e86565b6040805180830381865afa158015611893573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118b79190612f2f565b95945050505050565b6001600160a01b0382166118ea5760405163ec442f0560e01b815260006004820152602401610ba0565b610c5160008383611e35565b60006001600160a01b03841661190c5761dead93505b61191684846118c0565b509092915050565b60008061192c858585611475565b909250905061193b8683611f5f565b94509492505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000610a777f00000000000000000000000000000000000000000000000000000000000000006001600160401b038416612f4b565b60005b8151811015611aa0576119fb8282815181106119ea576119ea612c90565b602002602001015160400151611ad0565b818181518110611a0d57611a0d612c90565b60200260200101516040015160036000848481518110611a2f57611a2f612c90565b60200260200101516000015163ffffffff1663ffffffff1681526020019081526020016000206000848481518110611a6957611a69612c90565b60200260200101516020015161ffff1661ffff1681526020019081526020016000209081611a979190612fb2565b506001016119cc565b507fbe4864a8e820971c0247f5992e2da559595f7bf076a21cb5928d443d2a13b67481604051610dee9190613071565b600281015161ffff8116600314610c515781604051639a6d49cd60e01b8152600401610ba0919061237c565b60007f0000000000000000000000000000000000000000000000000000000000000000611b298184612e33565b610a779190612f4b565b611b3b612264565b6040805180820190915260008082526020820152600080611b7233604089013560608a0135611b6d60208c018c61287d565b61191e565b91509150600080611b838984611340565b9092509050611baf611b9860208b018b61287d565b8383611ba9368d90038d018d6130fc565b8b611f95565b60408051808201909152858152602080820186905282519298509096503391907f85496b760a4b7f8d66384b9df21b381f5d1b1e79f229a47aaf4c232edc2fe59a90611bfd908d018d61287d565b6040805163ffffffff909216825260208201899052810187905260600160405180910390a350505050935093915050565b8051606090151580611c77578484604051602001611c6392919091825260c01b6001600160c01b031916602082015260280190565b604051602081830303815290604052611c9e565b84843385604051602001611c8e949392919061312e565b6040516020818303038152906040525b9150935093915050565b6001600160a01b038416611cd25760405163e602df0560e01b815260006004820152602401610ba0565b6001600160a01b038316611cfc57604051634a1406b160e11b815260006004820152602401610ba0565b6001600160a01b03808516600090815260066020908152604080832093871683529290522082905580156116f857826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051611d6f91815260200190565b60405180910390a350505050565b6000611d8c6020828486612c01565b610c3891613171565b6000611da5602860208486612c01565b611dae9161318f565b60c01c9392505050565b6060611dc78260288186612c01565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929695505050505050565b606084848484604051602001611e1c94939291906131bf565b6040516020818303038152906040529050949350505050565b6001600160a01b038316611e60578060076000828254611e55919061320e565b90915550611ed29050565b6001600160a01b03831660009081526005602052604090205481811015611eb35760405163391434e360e21b81526001600160a01b03851660048201526024810182905260448101839052606401610ba0565b6001600160a01b03841660009081526005602052604090209082900390555b6001600160a01b038216611eee57600780548290039055611f0d565b6001600160a01b03821660009081526005602052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611f5291815260200190565b60405180910390a3505050565b6001600160a01b038216611f8957604051634b637e8f60e11b815260006004820152602401610ba0565b610c5182600083611e35565b611f9d612264565b6000611fac84600001516120a0565b602085015190915015611fc657611fc684602001516120c8565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632637a450826040518060a001604052808b63ffffffff1681526020016120168c6114dd565b81526020018a815260200189815260200160008960200151111515815250866040518463ffffffff1660e01b8152600401612052929190612e86565b60806040518083038185885af1158015612070573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906120959190613221565b979650505050505050565b60008134146120c4576040516304fb820960e51b8152346004820152602401610ba0565b5090565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e4fe1d946040518163ffffffff1660e01b8152600401602060405180830381865afa158015612128573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061214c919061326b565b90506001600160a01b038116612175576040516329b99a9560e11b815260040160405180910390fd5b6040805133602482018190527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0381811660448501526064808501889052855180860390910181526084909401909452602080840180516001600160e01b03166323b872dd60e01b1781528451610c519688169589936116f893889360009283929091839182885af180612216576040513d6000823e3d81fd5b50506000513d9150811561222e57806001141561223b565b6001600160a01b0384163b155b156116f857604051635274afe760e01b81526001600160a01b0385166004820152602401610ba0565b60405180606001604052806000801916815260200160006001600160401b031681526020016122a6604051806040016040528060008152602001600081525090565b905290565b600060e082840312156122bd57600080fd5b50919050565b600080604083850312156122d657600080fd5b82356001600160401b038111156122ec57600080fd5b6122f8858286016122ab565b95602094909401359450505050565b60005b8381101561232257818101518382015260200161230a565b50506000910152565b60008151808452612343816020860160208601612307565b601f01601f19169290920160200192915050565b60408152600061236a604083018561232b565b82810360208401526118b7818561232b565b602081526000610c38602083018461232b565b6001600160a01b038116811461130757600080fd5b600080604083850312156123b757600080fd5b82356123c28161238f565b946020939093013593505050565b6000602082840312156123e257600080fd5b81356001600160401b038111156123f857600080fd5b610cd3848285016122ab565b8351815260208085015190820152600060a08201604060a0604085015281865180845260c08601915060c08160051b8701019350602080890160005b8381101561247f5788870360bf1901855281518051885283015183880187905261246c8789018261232b565b9750509382019390820190600101612440565b50508751606088015250505060208501516080850152509050610cd3565b6000602082840312156124af57600080fd5b5035919050565b6000606082840312156122bd57600080fd5b60008083601f8401126124da57600080fd5b5081356001600160401b038111156124f157600080fd5b6020830191508360208285010111156109ca57600080fd5b600080600080600080600060e0888a03121561252457600080fd5b61252e89896124b6565b96506060880135955060808801356001600160401b038082111561255157600080fd5b61255d8b838c016124c8565b909750955060a08a013591506125728261238f565b90935060c0890135908082111561258857600080fd5b506125958a828b016124c8565b989b979a50959850939692959293505050565b6000806000606084860312156125bd57600080fd5b83356125c88161238f565b925060208401356125d88161238f565b929592945050506040919091013590565b803563ffffffff811681146125fd57600080fd5b919050565b6000806040838503121561261557600080fd5b6123c2836125e9565b801515811461130757600080fd5b6000806040838503121561263f57600080fd5b82356001600160401b0381111561265557600080fd5b612661858286016122ab565b92505060208301356126728161261e565b809150509250929050565b815181526020808301519082015260408101610a77565b6000806000606084860312156126a957600080fd5b83356126b48161238f565b9250602084013591506126c9604085016125e9565b90509250925092565b6000806000606084860312156126e757600080fd5b83359250602084013591506126c9604085016125e9565b803561ffff811681146125fd57600080fd5b6000806040838503121561272357600080fd5b61272c836125e9565b915061273a602084016126fe565b90509250929050565b60006020828403121561275557600080fd5b8135610c388161238f565b60008060008060a0858703121561277657600080fd5b61278086866124b6565b935060608501356001600160401b0381111561279b57600080fd5b6127a7878288016124c8565b90945092505060808501356127bb8161238f565b939692955090935050565b6001600160401b038116811461130757600080fd5b6000602082840312156127ed57600080fd5b8135610c38816127c6565b60008083601f84011261280a57600080fd5b5081356001600160401b0381111561282157600080fd5b6020830191508360208260051b85010111156109ca57600080fd5b6000806020838503121561284f57600080fd5b82356001600160401b0381111561286557600080fd5b612871858286016127f8565b90969095509350505050565b60006020828403121561288f57600080fd5b610c38826125e9565b600080600080606085870312156128ae57600080fd5b6128b7856125e9565b93506128c5602086016126fe565b925060408501356001600160401b038111156128e057600080fd5b6128ec878288016124c8565b95989497509550505050565b6000806000838503608081121561290e57600080fd5b84356001600160401b0381111561292457600080fd5b612930878288016122ab565b9450506040601f198201121561294557600080fd5b50602084019150606084013561295a8161238f565b809150509250925092565b600060c082019050835182526001600160401b03602085015116602083015260408401516129a0604084018280518252602090810151910152565b5082516080830152602083015160a0830152610c38565b600080604083850312156129ca57600080fd5b82356129d58161238f565b915060208301356126728161238f565b6000606082840312156129f757600080fd5b610c3883836124b6565b600181811c90821680612a1557607f821691505b6020821081036122bd57634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b0381118282101715612a6d57612a6d612a35565b60405290565b604080519081016001600160401b0381118282101715612a6d57612a6d612a35565b604051601f8201601f191681016001600160401b0381118282101715612abd57612abd612a35565b604052919050565b60006001600160401b03821115612ade57612ade612a35565b50601f01601f191660200190565b60006001600160401b0380841115612b0657612b06612a35565b8360051b6020612b17818301612a95565b868152918501918181019036841115612b2f57600080fd5b865b84811015612bf557803586811115612b495760008081fd5b88016060368290031215612b5d5760008081fd5b612b65612a4b565b612b6e826125e9565b8152612b7b8683016126fe565b8682015260408083013589811115612b935760008081fd5b929092019136601f840112612ba85760008081fd5b8235612bbb612bb682612ac5565b612a95565b8181523689838701011115612bd05760008081fd5b818986018a830137600091810189019190915290820152845250918301918301612b31565b50979650505050505050565b60008085851115612c1157600080fd5b83861115612c1e57600080fd5b5050820193919092039150565b60008451612c3d818460208901612307565b8201838582376000930192835250909392505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b602081526000610cd3602083018486612c53565b634e487b7160e01b600052603260045260246000fd5b6000823561013e19833603018112612cbd57600080fd5b9190910192915050565b6000808335601e19843603018112612cde57600080fd5b8301803591506001600160401b03821115612cf857600080fd5b6020019150368190038213156109ca57600080fd5b63ffffffff612d1b896125e9565b1681526020880135602082015260006040890135612d38816127c6565b6001600160401b03811660408401525087606083015260e06080830152612d6360e083018789612c53565b6001600160a01b03861660a084015282810360c0840152612d85818587612c53565b9a9950505050505050505050565b600060208284031215612da557600080fd5b81516001600160401b03811115612dbb57600080fd5b8201601f81018413612dcc57600080fd5b8051612dda612bb682612ac5565b818152856020838501011115612def57600080fd5b6118b7826020830160208601612307565b600060208284031215612e1257600080fd5b8151610c388161261e565b634e487b7160e01b600052601160045260246000fd5b600082612e5057634e487b7160e01b600052601260045260246000fd5b500490565b60018060a01b038516815283602082015261ffff83166040820152608060608201526000610cb2608083018461232b565b6040815263ffffffff8351166040820152602083015160608201526000604084015160a06080840152612ebc60e084018261232b565b90506060850151603f198483030160a0850152612ed9828261232b565b60809690960151151560c08501525050506001600160a01b039190911660209091015290565b600060408284031215612f1157600080fd5b612f19612a73565b9050815181526020820151602082015292915050565b600060408284031215612f4157600080fd5b610c388383612eff565b8082028115828204841417610a7757610a77612e1d565b601f821115611470576000816000526020600020601f850160051c81016020861015612f8b5750805b601f850160051c820191505b81811015612faa57828155600101612f97565b505050505050565b81516001600160401b03811115612fcb57612fcb612a35565b612fdf81612fd98454612a01565b84612f62565b602080601f8311600181146130145760008415612ffc5750858301515b600019600386901b1c1916600185901b178555612faa565b600085815260208120601f198616915b8281101561304357888601518255948401946001909101908401613024565b50858210156130615787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b838110156130ee57888303603f190185528151805163ffffffff1684528781015161ffff168885015286015160608785018190526130da8186018361232b565b96890196945050509086019060010161309a565b509098975050505050505050565b60006040828403121561310e57600080fd5b613116612a73565b82358152602083013560208201528091505092915050565b8481526001600160401b0360c01b8460c01b16602082015282602882015260008251613161816048850160208701612307565b9190910160480195945050505050565b80356020831015610a7757600019602084900360031b1b1692915050565b6001600160c01b031981358181169160088510156131b75780818660080360031b1b83161692505b505092915050565b6001600160401b0360c01b8560c01b16815263ffffffff60e01b8460e01b16600882015282600c820152600082516131fe81602c850160208701612307565b91909101602c0195945050505050565b80820180821115610a7757610a77612e1d565b60006080828403121561323357600080fd5b61323b612a4b565b82518152602083015161324d816127c6565b602082015261325f8460408501612eff565b60408201529392505050565b60006020828403121561327d57600080fd5b8151610c388161238f56fea2646970667358221220c184047f55d32f63a680c09336614b1b1422300e42596cef498353ab916c762e64736f6c63430008160033608060405234801561001057600080fd5b5061050c806100206000396000f3fe6080604052600436106100555760003560e01c80630ae6d46b1461005a578063609d333414610083578063c34c08e5146100a5578063d0a10260146100dd578063d5ce3389146100f2578063e21f37ce14610112575b600080fd5b34801561006657600080fd5b5061007060015481565b6040519081526020015b60405180910390f35b34801561008f57600080fd5b50610098610127565b60405161007a9190610222565b3480156100b157600080fd5b506003546100c5906001600160a01b031681565b6040516001600160a01b03909116815260200161007a565b6100f06100eb3660046102d6565b6101b5565b005b3480156100fe57600080fd5b506000546100c5906001600160a01b031681565b34801561011e57600080fd5b50610098610215565b6004805461013490610374565b80601f016020809104026020016040519081016040528092919081815260200182805461016090610374565b80156101ad5780601f10610182576101008083540402835291602001916101ad565b820191906000526020600020905b81548152906001019060200180831161019057829003601f168201915b505050505081565b600080546001600160a01b0319166001600160a01b038916179055600186905560026101e2858783610415565b50600380546001600160a01b0319166001600160a01b038516179055600461020b858783610415565b5050505050505050565b6002805461013490610374565b60006020808352835180602085015260005b8181101561025057858101830151858201604001528201610234565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b038116811461028857600080fd5b919050565b60008083601f84011261029f57600080fd5b50813567ffffffffffffffff8111156102b757600080fd5b6020830191508360208285010111156102cf57600080fd5b9250929050565b600080600080600080600060a0888a0312156102f157600080fd5b6102fa88610271565b965060208801359550604088013567ffffffffffffffff8082111561031e57600080fd5b61032a8b838c0161028d565b909750955085915061033e60608b01610271565b945060808a013591508082111561035457600080fd5b506103618a828b0161028d565b989b979a50959850939692959293505050565b600181811c9082168061038857607f821691505b6020821081036103a857634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b601f821115610410576000816000526020600020601f850160051c810160208610156103ed5750805b601f850160051c820191505b8181101561040c578281556001016103f9565b5050505b505050565b67ffffffffffffffff83111561042d5761042d6103ae565b6104418361043b8354610374565b836103c4565b6000601f841160018114610475576000851561045d5750838201355b600019600387901b1c1916600186901b1783556104cf565b600083815260209020601f19861690835b828110156104a65786850135825560209485019460019092019101610486565b50868210156104c35760001960f88860031b161c19848701351681555b505060018560011b0183555b505050505056fea2646970667358221220eb22feaa2ed7a5cd3c95f8aeac361d18eaca6b9f0f64a88c34ed0e2b872e3d6a64736f6c6343000816003360c06040526001600d553480156200001657600080fd5b50604051620054bf380380620054bf8339810160408190526200003991620002cd565b81816001600160a01b0381166200006b57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6200007681620000cd565b5063ffffffff166080526040516200008e90620002bf565b604051809103906000f080158015620000ab573d6000803e3d6000fd5b506001600160a01b031660a0819052620000c5906200011d565b50506200034a565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b620001276200028e565b6040516301ffc9a760e01b81526325fc096160e21b60048201526001600160a01b038216906301ffc9a790602401602060405180830381865afa15801562000173573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200019991906200031f565b620001b75760405163eb64f35d60e01b815260040160405180910390fd5b6001600160a01b03811660009081526005602052604090205460ff1615620001f25760405163457517f360e11b815260040160405180910390fd5b6001600160a01b0381166000818152600560209081526040808320805460ff191660019081179091556004805491820181559093527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b90920180546001600160a01b0319168417905590519182527f6b374d56679ca9463f27c85c6311e2bb7fde69bf201d3da39d53f10bd9d78af5910160405180910390a150565b6000546001600160a01b03163314620002bd5760405163118cdaa760e01b815233600482015260240162000062565b565b6101e380620052dc83390190565b60008060408385031215620002e157600080fd5b825163ffffffff81168114620002f657600080fd5b60208401519092506001600160a01b03811681146200031457600080fd5b809150509250929050565b6000602082840312156200033257600080fd5b815180151581146200034357600080fd5b9392505050565b60805160a051614f496200039360003960006107810152600081816105310152818161278901528181612f7b01528181612fe20152818161355301526135ba0152614f496000f3fe6080604052600436106103505760003560e01c80639132e5c3116101c6578063c9fc7bcd116100f7578063ddc28c5811610095578063e8964e811161006f578063e8964e8114610b8f578063ef667aa114610baf578063f2fde38b14610bfa578063f64be4c714610c1a57600080fd5b8063ddc28c5814610b2e578063e1758bd814610b5b578063e4fe1d9414610b6f57600080fd5b8063d4b4ec8f116100d1578063d4b4ec8f14610a72578063d70b890214610a92578063dc706a6214610ab2578063dc93c8a214610ae257600080fd5b8063c9fc7bcd146109f6578063ca5eb5e114610a3d578063cb5026b914610a5d57600080fd5b8063a7229fd911610164578063aafea3121161013e578063aafea31214610976578063b96a277f14610996578063c28e0eed146109b6578063c9a54a99146109d657600080fd5b8063a7229fd914610916578063a825d74714610936578063aafe5e071461095657600080fd5b80639c6d7340116101a05780639c6d73401461086f5780639d7f9775146108b6578063a0dd43fc146108d6578063a718531b146108f657600080fd5b80639132e5c31461081a57806391d20fa11461083c5780639535ff301461084f57600080fd5b80635b17bb70116102a05780636f50a8031161023e57806379624ca91161021857806379624ca9146107a35780637cb59012146107bc578063861e1ca5146107dc5780638da5cb5b146107fc57600080fd5b80636f50a80314610724578063715018a61461075a578063733180911461076f57600080fd5b80636a14d7151161027a5780636a14d715146106655780636bf73fa3146106855780636dbd9f90146106a55780636e83f5bb146106c557600080fd5b80635b17bb70146105b65780636750cd4c14610615578063697fe6b61461064557600080fd5b80632baf0be71161030d578063402f8468116102e7578063402f8468146104c057806340f80683146104ff578063416ecebf1461051f578063587cde1e1461056857600080fd5b80632baf0be7146104355780632e80fbf31461045957806335d330b01461047957600080fd5b80630c0c389e1461035557806314f651a91461036a578063183c834f146103a85780632637a450146103c85780632a56c1b0146103e85780632b3197b914610408575b600080fd5b610368610363366004613e11565b610c50565b005b34801561037657600080fd5b5061037f610d4e565b6040805163ffffffff90931683526001600160a01b039091166020830152015b60405180910390f35b3480156103b457600080fd5b506103686103c3366004613ec0565b610d80565b6103db6103d6366004613f0b565b611027565b60405161039f9190613f5d565b3480156103f457600080fd5b50610368610403366004613f9f565b61114d565b34801561041457600080fd5b5061042861042336600461400e565b6111ed565b60405161039f91906140b2565b34801561044157600080fd5b5061044b60001981565b60405190815260200161039f565b34801561046557600080fd5b506103686104743660046140dc565b6112b8565b34801561048557600080fd5b5061044b610494366004614143565b600c60209081526000948552604080862082529385528385208152918452828420909152825290205481565b3480156104cc57600080fd5b506104e06104db366004614185565b611427565b604080516001600160a01b03909316835290151560208301520161039f565b34801561050b57600080fd5b5061036861051a3660046140dc565b6114a5565b34801561052b57600080fd5b506105537f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff909116815260200161039f565b34801561057457600080fd5b5061059e6105833660046141af565b600f602052600090815260409020546001600160a01b031681565b6040516001600160a01b03909116815260200161039f565b3480156105c257600080fd5b506105fd6105d13660046141ca565b60016020908152600093845260408085208252928452828420905282529020546001600160401b031681565b6040516001600160401b03909116815260200161039f565b34801561062157600080fd5b50610635610630366004614206565b61160b565b604051901515815260200161039f565b34801561065157600080fd5b50610368610660366004614221565b61165b565b34801561067157600080fd5b50610368610680366004613ec0565b6116d0565b34801561069157600080fd5b506103686106a036600461431c565b611aae565b3480156106b157600080fd5b506103686106c03660046143ff565b611b18565b3480156106d157600080fd5b506107056106e0366004614206565b600b60205260009081526040902080546001909101546001600160a01b039091169082565b604080516001600160a01b03909316835260208301919091520161039f565b34801561073057600080fd5b5061059e61073f366004614206565b600a602052600090815260409020546001600160a01b031681565b34801561076657600080fd5b50610368611bba565b34801561077b57600080fd5b5061059e7f000000000000000000000000000000000000000000000000000000000000000081565b3480156107af57600080fd5b50600d5460011415610635565b3480156107c857600080fd5b506103686107d736600461448f565b611bce565b3480156107e857600080fd5b506106356107f73660046144e0565b611cba565b34801561080857600080fd5b506000546001600160a01b031661059e565b34801561082657600080fd5b5061082f611d26565b60405161039f919061450b565b61036861084a366004614558565b611d88565b34801561085b57600080fd5b5061036861086a366004614602565b611f18565b34801561087b57600080fd5b506105fd61088a3660046141ca565b60036020908152600093845260408085208252928452828420905282529020546001600160401b031681565b3480156108c257600080fd5b506106356108d1366004614602565b61217c565b3480156108e257600080fd5b506105fd6108f13660046141ca565b612256565b34801561090257600080fd5b50610368610911366004614645565b6122b6565b34801561092257600080fd5b50610368610931366004614671565b6125d6565b34801561094257600080fd5b5061036861095136600461468f565b6125ee565b34801561096257600080fd5b5061044b6109713660046141ca565b612739565b34801561098257600080fd5b506103686109913660046146cc565b6127b9565b3480156109a257600080fd5b5061059e6109b1366004614185565b6129e2565b3480156109c257600080fd5b506103686109d13660046141af565b612a51565b3480156109e257600080fd5b506106356109f13660046144e0565b612aae565b348015610a0257600080fd5b5061044b610a113660046146e8565b600260209081526000948552604080862082529385528385208152918452828420909152825290205481565b348015610a4957600080fd5b50610368610a583660046141af565b612b13565b348015610a6957600080fd5b5061044b600081565b348015610a7e57600080fd5b50610368610a8d366004614645565b612b73565b348015610a9e57600080fd5b50610368610aad3660046146e8565b612db1565b348015610abe57600080fd5b50610635610acd3660046141af565b60056020526000908152604090205460ff1681565b348015610aee57600080fd5b50610635610afd366004614185565b6001600160a01b03918216600090815260066020908152604080832063ffffffff9490941683529290522054161590565b348015610b3a57600080fd5b50610b4e610b49366004613f0b565b612ea0565b60405161039f919061472a565b348015610b6757600080fd5b50600061059e565b348015610b7b57600080fd5b50600e5461059e906001600160a01b031681565b348015610b9b57600080fd5b50610368610baa3660046141af565b61310c565b348015610bbb57600080fd5b50610705610bca366004614185565b6008602090815260009283526040808420909152908252902080546001909101546001600160a01b039091169082565b348015610c0657600080fd5b50610368610c153660046141af565b613270565b348015610c2657600080fd5b5061059e610c35366004614206565b6009602052600090815260409020546001600160a01b031681565b610c9f86610c6160208a018a614206565b60208a0135610c7660608c0160408d01614741565b898989604051602001610c8b9392919061475c565b6040516020818303038152906040526132ae565b506040516313137d6560e01b81526001600160a01b038716906313137d65903490610cda908b908a908a908a9033908b908b906004016147d8565b6000604051808303818588803b158015610cf357600080fd5b505af1158015610d07573d6000803e3d6000fd5b50505050507f3cd5e48f9730b129dc7550f0fcea9c767b7be37837cd10e55eb35f734f4bca048787604051610d3d92919061482f565b60405180910390a150505050505050565b600080610d5e600d546001141590565b610d6a57600080610d78565b610d78600d5460a081901c91565b915091509091565b6001600160a01b038216600090815260056020526040902054829060ff16610dbb57604051631bc58ef360e11b815260040160405180910390fd5b826001600160a01b03811615610e5e576000816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e2f919061486b565b6002811115610e4057610e40614855565b03610e5e576040516342756b1b60e11b815260040160405180910390fd5b83856001600160a01b03821615610efa576040516319d4335360e21b815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015610eb9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610edd919061489a565b610efa57604051630e476aa960e21b815260040160405180910390fd5b610f0388613469565b6000610f0f8989611427565b9150508015610f3157604051633c075f7560e01b815260040160405180910390fd5b85600003610f79576001600160a01b038916600090815260086020908152604080832063ffffffff8c168452909152812080546001600160a01b031916815560010155610fdf565b438611610f99576040516302efcf9160e11b815260040160405180910390fd5b6001600160a01b03898116600090815260086020908152604080832063ffffffff8d168452909152902080546001600160a01b0319169189169190911781556001018690555b7f4e0a5bbfa0c11a64effb1ada324b5437a17272e1aed9320398715ef71bb209288989898960405161101494939291906148b7565b60405180910390a1505050505050505050565b61102f613d5a565b61103c6020840184614206565b336001600d54146110605760405163ee120b0960e01b815260040160405180910390fd5b63ffffffff60a01b60a083811b919091166001600160a01b03831617600d5561108e908601608087016148e7565b80156110a35750600e546001600160a01b0316155b156110c157604051632d7b695560e11b815260040160405180910390fd5b6000806110ce33886134ba565b9150915060006110db3490565b905060006110f76110f260a08b0160808c016148e7565b613766565b905061110884604001518383613802565b600e5460408501516020015161112a916001600160a01b03169083868c613850565b60408401515161113c9083858b61387d565b50506001600d555095945050505050565b61115685613469565b600083838360405160200161116d9392919061475c565b60408051601f1981840301815291905290506111ab866111906020880188614206565b60208801356111a560608a0160408b01614741565b856132ae565b507f3cd5e48f9730b129dc7550f0fcea9c767b7be37837cd10e55eb35f734f4bca0485876040516111dd92919061482f565b60405180910390a1505050505050565b6001600160a01b038316600090815260056020526040902054606090849060ff1661122b57604051631bc58ef360e11b815260040160405180910390fd5b604051639c33abf760e01b815263ffffffff80861660048301526001600160a01b0388811660248401529085166044830152861690639c33abf790606401600060405180830381865afa158015611286573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526112ae9190810190614997565b9695505050505050565b6112c185613469565b6001600160a01b038516600090815260026020908152604080832063ffffffff88168452825280832086845282528083206001600160401b038616845290915290205481811461133357604051637182306f60e01b815260048101829052602481018390526044015b60405180910390fd5b6001600160a01b038616600090815260016020908152604080832063ffffffff8916845282528083208784529091529020546001600160401b039081169084161180159061137f575080155b156113a857604051630c09b63560e41b81526001600160401b038416600482015260240161132a565b6001600160a01b038616600090815260026020908152604080832063ffffffff89168452825280832087845282528083206001600160401b0387168452909152908190206000199055517faf0450c392c4f702515a457a362328c8aa21916048ca6d0419e248b30cb55292906111dd90879087908a90889088906149cb565b6001600160a01b03808316600090815260076020908152604080832063ffffffff86168452909152812054909116908161149e5763ffffffff83166000908152600a60205260409020546001600160a01b031691508161149a57604051633c74268360e11b815260040160405180910390fd5b5060015b9250929050565b6114ae85613469565b6001600160a01b038516600090815260026020908152604080832063ffffffff88168452825280832086845282528083206001600160401b038616845290915290205481811461151b57604051637182306f60e01b8152600481018290526024810183905260440161132a565b80158061156557506001600160a01b038616600090815260016020908152604080832063ffffffff8916845282528083208784529091529020546001600160401b03908116908416115b1561158e57604051630c09b63560e41b81526001600160401b038416600482015260240161132a565b6001600160a01b038616600090815260026020908152604080832063ffffffff89168452825280832087845282528083206001600160401b038716845290915280822091909155517f7f68a37a6e69a0de35024a234558f9efe4b33b58657753d21eaaa82d51c3510e906111dd90879087908a90889088906149cb565b63ffffffff81166000908152600960205260408120546001600160a01b031615801590611655575063ffffffff82166000908152600a60205260409020546001600160a01b031615155b92915050565b336001600160a01b03168b6001600160a01b03168d6001600160a01b03167f8a0b1dce321c5c5fb42349bce46d18087c04140de520917661fb923e44a904b98d8d8d8d8d8d8d8d8d8d6040516116ba9a99989796959493929190614a08565b60405180910390a4505050505050505050505050565b6001600160a01b038216600090815260056020526040902054829060ff1615801561170357506001600160a01b03811615155b156117215760405163a4ff2ec360e01b815260040160405180910390fd5b826001600160a01b038116156117c4576000816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611771573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611795919061486b565b60028111156117a6576117a6614855565b036117c4576040516342756b1b60e11b815260040160405180910390fd5b83856001600160a01b03821615611860576040516319d4335360e21b815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa15801561181f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611843919061489a565b61186057604051630e476aa960e21b815260040160405180910390fd5b61186988613469565b6001600160a01b03808916600090815260076020908152604080832063ffffffff8c168452909152902054811690871681036118b85760405163d0ecb66b60e01b815260040160405180910390fd5b6001600160a01b03898116600081815260076020908152604080832063ffffffff8e168085529083529281902080546001600160a01b031916958d1695861790558051938452908301919091528101919091527fcd6f92f5ac6185a5acfa02c92090746cec64d777269cbcd0ed031e396657a1c29060600160405180910390a18515611a32576001600160a01b038116158061195b57506001600160a01b038716155b1561197957604051633c075f7560e01b815260040160405180910390fd5b60006040518060400160405280836001600160a01b0316815260200188436119a19190614a87565b90526001600160a01b038b8116600090815260086020908152604080832063ffffffff8f168452825291829020845181546001600160a01b03191694169390931783558301516001909201829055519192507f4e0a5bbfa0c11a64effb1ada324b5437a17272e1aed9320398715ef71bb2092891611a24918d918d9187916148b7565b60405180910390a150611aa3565b6001600160a01b038916600090815260086020908152604080832063ffffffff8c16845290915280822080546001600160a01b0319168155600101829055517f4e0a5bbfa0c11a64effb1ada324b5437a17272e1aed9320398715ef71bb2092891611014918c918c918691906148b7565b505050505050505050565b336001600160a01b03168a6001600160a01b03167f7edfa10fe10193301ad8a8bea7e968c7bcabcc64981f368e3aeada40ce26ae2c8d8c8c8c8c8c8c8c8c8c604051611b039a99989796959493929190614a9a565b60405180910390a35050505050505050505050565b6001600160a01b038316600090815260056020526040902054839060ff16611b5357604051631bc58ef360e11b815260040160405180910390fd5b611b5c85613469565b604051631077eb9160e11b81526001600160a01b038516906320efd72290611b8c90889087908790600401614af9565b600060405180830381600087803b158015611ba657600080fd5b505af1158015611aa3573d6000803e3d6000fd5b611bc26138a7565b611bcc60006138d4565b565b336000908152600c602090815260408083206001600160a01b03891684528252808320878452825280832061ffff8716845290915290205415611c2457604051630542086560e21b815260040160405180910390fd5b8181604051611c34929190614bec565b60408051918290038220336000818152600c60209081528482206001600160a01b038c16835281528482208a8352815284822061ffff8a168352905292909220557f3d52ff888d033fd3dd1d8057da59e850c91d91a72c41dfa445b247dfedeb6dc191611cab919088908890889088908890614bfc565b60405180910390a15050505050565b6001600160a01b03811660009081526001602090815260408220611d1f91859185918590611cea90850185614206565b63ffffffff168152602080820192909252604090810160009081208984013582529092529020546001600160401b0316613924565b9392505050565b60606004805480602002602001604051908101604052809291908181526020018280548015611d7e57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611d60575b5050505050905090565b6001600160a01b038089166000908152600c60209081526040808320938b168352928152828220898352815282822061ffff891683529052818120549151611dd39087908790614bec565b60405180910390209050808214611e07576040516335ca595f60e01b8152600481018390526024810182905260440161132a565b6001600160a01b03808b166000908152600c60209081526040808320938d168084529382528083208c8452825280832061ffff8c168452909152908190206001905551630685081360e51b815263d0a10260903490611e76908e908d908c908c9033908d908d90600401614c46565b6000604051808303818588803b158015611e8f57600080fd5b505af1158015611ea3573d6000803e3d6000fd5b50505050507e36c98efcf9e6641dfbc9051f66f405253e8e0c2ab4a24dccda15595b7378c88a8a8a8a604051611f0494939291906001600160a01b039485168152929093166020830152604082015261ffff91909116606082015260800190565b60405180910390a150505050505050505050565b6001600160a01b038116600090815260056020526040902054819060ff16158015611f4b57506001600160a01b03811615155b15611f695760405163a4ff2ec360e01b815260040160405180910390fd5b816001600160a01b0381161561200c576001816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611fb9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fdd919061486b565b6002811115611fee57611fee614855565b0361200c57604051633d00f6f160e11b815260040160405180910390fd5b82846001600160a01b038216156120a8576040516319d4335360e21b815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015612067573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061208b919061489a565b6120a857604051630e476aa960e21b815260040160405180910390fd5b6120b187613469565b6001600160a01b03878116600090815260066020908152604080832063ffffffff8b1684529091529020548187169116036120ff5760405163d0ecb66b60e01b815260040160405180910390fd5b6001600160a01b03878116600081815260066020908152604080832063ffffffff8c168085529083529281902080546001600160a01b031916958b1695861790558051938452908301919091528101919091527f4cff966ebee29a156dcb34cf72c1d06231fb1777f6bdf6e8089819232f002b1c90606001610d3d565b600080600061218b8686611427565b91509150816001600160a01b0316846001600160a01b0316036121b357600192505050611d1f565b6000816121e8576001600160a01b038716600090815260086020908152604080832063ffffffff8a16845290915290206121fe565b63ffffffff86166000908152600b602052604090205b6040805180820190915281546001600160a01b03908116808352600190930154602083015290925086161480156122385750438160200151115b156122495760019350505050611d1f565b5060009695505050505050565b6001600160a01b038316600090815260016020908152604080832063ffffffff8616845282528083208484529091528120546001600160401b03165b6122a1858585846001016139a8565b156122ae57600101612292565b949350505050565b6122be6138a7565b6001600160a01b038216600090815260056020526040902054829060ff166122f957604051631bc58ef360e11b815260040160405180910390fd5b826001600160a01b0381161561239c576000816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612349573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061236d919061486b565b600281111561237e5761237e614855565b0361239c576040516342756b1b60e11b815260040160405180910390fd5b83856001600160a01b03821615612438576040516319d4335360e21b815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa1580156123f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061241b919061489a565b61243857604051630e476aa960e21b815260040160405180910390fd5b63ffffffff87166000908152600a60205260409020546001600160a01b03908116908716810361247b5760405163d0ecb66b60e01b815260040160405180910390fd5b63ffffffff88166000818152600a602090815260409182902080546001600160a01b0319166001600160a01b038c169081179091558251938452908301527fc16891855cffb4a5ac51ac11864a3f3c96ba816cc45fe686c987ae36277de5ec910160405180910390a185156125695763ffffffff88166000908152600b6020526040902080546001600160a01b0319166001600160a01b0383161781556125228743614a87565b600182018190556040517f55b28633cdb29709386f555dfc54418592ad475ce7a65a78ac5928af60ffb8f89161255b918c918691614c99565b60405180910390a1506125cc565b63ffffffff88166000908152600b602052604080822080546001600160a01b0319168155600101829055517f55b28633cdb29709386f555dfc54418592ad475ce7a65a78ac5928af60ffb8f8916125c3918b918591614c99565b60405180910390a15b5050505050505050565b6125de6138a7565b6125e98383836139f5565b505050565b612605826125ff6020860186614206565b3361217c565b612622576040516313e9bb2b60e21b815260040160405180910390fd5b6001600160a01b0382166000908152600160209081526040822090829061264b90870187614206565b63ffffffff168152602080820192909252604090810160009081208784013582529092529020546001600160401b03169050612688848483613924565b6126a55760405163751cb20f60e01b815260040160405180910390fd5b6126b0848483613a18565b6126cc5760405162bbf0e560e11b815260040160405180910390fd5b6126f8836126dd6020870187614206565b60208701356126f26060890160408a01614741565b86613ad5565b7f0d87345f3d1c929caba93e1c3821b54ff3512e12b66aa3cfe54b6bcbc17e59b484848460405161272b93929190614cc0565b60405180910390a150505050565b6001600160a01b038316600090815260036020908152604080832063ffffffff8616845282528083208484529091528120548190612781906001600160401b03166001614ce8565b90506127b0817f0000000000000000000000000000000000000000000000000000000000000000878787613b3b565b95945050505050565b6127c16138a7565b6001600160a01b038116600090815260056020526040902054819060ff166127fc57604051631bc58ef360e11b815260040160405180910390fd5b816001600160a01b0381161561289f576001816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561284c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612870919061486b565b600281111561288157612881614855565b0361289f57604051633d00f6f160e11b815260040160405180910390fd5b82846001600160a01b0382161561293b576040516319d4335360e21b815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa1580156128fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061291e919061489a565b61293b57604051630e476aa960e21b815260040160405180910390fd5b63ffffffff86166000908152600960205260409020546001600160a01b0380871691160361297c5760405163d0ecb66b60e01b815260040160405180910390fd5b63ffffffff861660008181526009602090815260409182902080546001600160a01b0319166001600160a01b038a169081179091558251938452908301527f16aa0f528038ab41019e95bae5b418a50ba8532c5800e3b7ea2f517d3fa625f591016111dd565b6001600160a01b03808316600090815260066020908152604080832063ffffffff861684529091529020541680611655575063ffffffff81166000908152600960205260409020546001600160a01b03168061165557604051636c1ccdb560e01b815260040160405180910390fd5b612a596138a7565b600e80546001600160a01b0319166001600160a01b0383169081179091556040519081527fd476ec5ec1ac11cec3714d41e7ea49419471aceb9bd0dff1becfc3e363a62396906020015b60405180910390a150565b6001600160a01b03811660009081526001602090815260408220611d1f91859185918590612ade90850185614206565b63ffffffff168152602080820192909252604090810160009081208984013582529092529020546001600160401b0316613a18565b336000818152600f602090815260409182902080546001600160a01b0319166001600160a01b0386169081179091558251938452908301527f6ee10e9ed4d6ce9742703a498707862f4b00f1396a87195eb93267b3d79839819101612aa3565b6001600160a01b038216600090815260056020526040902054829060ff16612bae57604051631bc58ef360e11b815260040160405180910390fd5b826001600160a01b03811615612c51576000816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612bfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c22919061486b565b6002811115612c3357612c33614855565b03612c51576040516342756b1b60e11b815260040160405180910390fd5b83856001600160a01b03821615612ced576040516319d4335360e21b815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015612cac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cd0919061489a565b612ced57604051630e476aa960e21b815260040160405180910390fd5b612cf56138a7565b84600003612d295763ffffffff87166000908152600b6020526040812080546001600160a01b031916815560010155612d7e565b438511612d49576040516302efcf9160e11b815260040160405180910390fd5b63ffffffff87166000908152600b6020526040902080546001600160a01b0319166001600160a01b0388161781556001018590555b7f55b28633cdb29709386f555dfc54418592ad475ce7a65a78ac5928af60ffb8f8878787604051610d3d93929190614c99565b612dba84613469565b612dc5848484612256565b612dd0906001614ce8565b6001600160401b0316816001600160401b031614612e0c57604051630c09b63560e41b81526001600160401b038216600482015260240161132a565b6001600160a01b038416600081815260016020908152604080832063ffffffff8816808552908352818420878552835292819020805467ffffffffffffffff19166001600160401b038716908117909155815193845291830186905282019290925260608101919091527f28f40053783033ef755556a0c3315379141f51a33aed8334174ffbadd90bde489060800161272b565b6040805180820190915260008082526020820152612ec460a08401608085016148e7565b8015612ed95750600e546001600160a01b0316155b15612ef757604051632d7b695560e11b815260040160405180910390fd5b6001600160a01b03821660009081526003602090815260408220908290612f2090870187614206565b63ffffffff16815260208082019290925260409081016000908120878401358252909252902054612f5b906001600160401b03166001614ce8565b905060006040518060e00160405280836001600160401b031681526020017f000000000000000000000000000000000000000000000000000000000000000063ffffffff168152602001856001600160a01b03168152602001866000016020810190612fc79190614206565b63ffffffff1681526020018660200135815260200161301f847f0000000000000000000000000000000000000000000000000000000000000000888a60000160208101906130159190614206565b8b60200135613b3b565b81526020016130316040880188614d08565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509390945250929350915061307e9050856109b16020890189614206565b90506001600160a01b03811663d80e9bd98361309d60608a018a614d08565b6130ad60a08c0160808d016148e7565b6040518563ffffffff1660e01b81526004016130cc9493929190614d4e565b6040805180830381865afa1580156130e8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ae9190614e42565b6131146138a7565b6040516301ffc9a760e01b81526325fc096160e21b60048201526001600160a01b038216906301ffc9a790602401602060405180830381865afa15801561315f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613183919061489a565b6131a05760405163eb64f35d60e01b815260040160405180910390fd5b6001600160a01b03811660009081526005602052604090205460ff16156131da5760405163457517f360e11b815260040160405180910390fd5b6001600160a01b0381166000818152600560209081526040808320805460ff191660019081179091556004805491820181559093527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b90920180546001600160a01b0319168417905590519182527f6b374d56679ca9463f27c85c6311e2bb7fde69bf201d3da39d53f10bd9d78af59101612aa3565b6132786138a7565b6001600160a01b0381166132a257604051631e4fbdf760e01b81526000600482015260240161132a565b6132ab816138d4565b50565b6001600160a01b038516600090815260016020908152604080832063ffffffff8816845282528083208684529091528120546001600160401b0390811690841681101561339c57600181015b846001600160401b0316816001600160401b03161161334f5761331f888888846139a8565b61334757604051630c09b63560e41b81526001600160401b038216600482015260240161132a565b6001016132fa565b506001600160a01b038716600090815260016020908152604080832063ffffffff8a16845282528083208884529091529020805467ffffffffffffffff19166001600160401b0386161790555b82516020808501919091206001600160a01b038916600090815260028352604080822063ffffffff8b168352845280822089835284528082206001600160401b0389168352909352919091205490925080831461341657604051637182306f60e01b8152600481018290526024810184905260440161132a565b50506001600160a01b03909516600090815260026020908152604080832063ffffffff90971683529581528582209482529384528481206001600160401b03909316815291909252918220919091555090565b336001600160a01b0382161480159061349c57506001600160a01b038181166000908152600f6020526040902054163314155b156132ab5760405163c4c5259360e01b815260040160405180910390fd5b6134c2613d5a565b600080613533856134d66020870187614206565b6001600160a01b0391909116600090815260036020908152604080832063ffffffff949094168352928152828220818901358352905220805467ffffffffffffffff19811660016001600160401b03928316019182161790915590565b905060006040518060e00160405280836001600160401b031681526020017f000000000000000000000000000000000000000000000000000000000000000063ffffffff168152602001876001600160a01b0316815260200186600001602081019061359f9190614206565b63ffffffff168152602001866020013581526020016135ed847f00000000000000000000000000000000000000000000000000000000000000008a8a60000160208101906130159190614206565b81526020016135ff6040880188614d08565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509390945250929350915061364c9050876109b16020890189614206565b90506000806001600160a01b038316634389e58f8561366e60608c018c614d08565b61367e60a08e0160808f016148e7565b6040518563ffffffff1660e01b815260040161369d9493929190614d4e565b6000604051808303816000875af11580156136bc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526136e49190810190614e5e565b90925090507f1ab700d4ced0c005b164c0f789fd09fcbb0156d4c2041b8a3bfbcd961cd1567f8161371860608b018b614d08565b866040516137299493929190614eac565b60405180910390a1506040805160608101825260a09094015184526001600160401b03909416602084015292820192909252925090509250929050565b600081156137fd57600e546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa1580156137b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137da9190614eec565b9050806000036137fd57604051631775123760e01b815260040160405180910390fd5b919050565b82518210806138145750808360200151115b156125e95782516020840151604051634f3ec0d360e01b815260048101929092526024820184905260448201526064810182905260840161132a565b831561386157613861858386613bb4565b82841015613876576138768582868603613bb4565b5050505050565b831561388d5761388d8285613bef565b828410156138a1576138a181858503613bef565b50505050565b6000546001600160a01b03163314611bcc5760405163118cdaa760e01b815233600482015260240161132a565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600080826001600160401b031611806122ae5750604051600162842fc360e01b031981526001600160a01b0384169063ff7bd03d90613967908790600401614f05565b602060405180830381865afa158015613984573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122ae919061489a565b6001600160a01b038416600090815260026020908152604080832063ffffffff87168452825280832085845282528083206001600160401b03851684529091529020541515949350505050565b6001600160a01b038316613a0d576125e98282613bef565b6125e9838383613bb4565b60006001600160401b038216613a346060860160408701614741565b6001600160401b031611806122ae57506001600160a01b03831660009081526002602090815260408220908290613a6d90880188614206565b63ffffffff1663ffffffff1681526020019081526020016000206000866020013581526020019081526020016000206000866040016020810190613ab19190614741565b6001600160401b031681526020810191909152604001600020541415949350505050565b80613af3576040516304df7fdb60e11b815260040160405180910390fd5b6001600160a01b03909416600090815260026020908152604080832063ffffffff90961683529481528482209382529283528381206001600160401b03909216815291522055565b600085856001600160a01b03861660405160c09390931b6001600160c01b031916602084015260e091821b6001600160e01b03199081166028850152602c8401919091529085901b16604c8201526050810183905260700160405160208183030381529060405280519060200120905095945050505050565b6001600160a01b038216613bdb576040516306b7a93160e41b815260040160405180910390fd5b6125e96001600160a01b0384168383613c9c565b6001600160a01b038216613c16576040516306b7a93160e41b815260040160405180910390fd5b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114613c63576040519150601f19603f3d011682016040523d82523d6000602084013e613c68565b606091505b50509050806125e957604051631196f20d60e21b81526001600160a01b03841660048201526024810183905260440161132a565b604080516001600160a01b03841660248201526044808201849052825180830390910181526064909101909152602080820180516001600160e01b031663a9059cbb60e01b17815282516125e9938793909260009283929183919082885af180613d0c576040513d6000823e3d81fd5b50506000513d91508115613d24578060011415613d31565b6001600160a01b0384163b155b156138a157604051635274afe760e01b81526001600160a01b038516600482015260240161132a565b60405180606001604052806000801916815260200160006001600160401b03168152602001613d9c604051806040016040528060008152602001600081525090565b905290565b600060608284031215613db357600080fd5b50919050565b80356001600160a01b03811681146137fd57600080fd5b60008083601f840112613de257600080fd5b5081356001600160401b03811115613df957600080fd5b60208301915083602082850101111561149e57600080fd5b600080600080600080600060e0888a031215613e2c57600080fd5b613e368989613da1565b9650613e4460608901613db9565b95506080880135945060a08801356001600160401b0380821115613e6757600080fd5b613e738b838c01613dd0565b909650945060c08a0135915080821115613e8c57600080fd5b50613e998a828b01613dd0565b989b979a50959850939692959293505050565b803563ffffffff811681146137fd57600080fd5b60008060008060808587031215613ed657600080fd5b613edf85613db9565b9350613eed60208601613eac565b9250613efb60408601613db9565b9396929550929360600135925050565b60008060408385031215613f1e57600080fd5b82356001600160401b03811115613f3457600080fd5b830160a08186031215613f4657600080fd5b9150613f5460208401613db9565b90509250929050565b6000608082019050825182526001600160401b0360208401511660208301526040830151613f98604084018280518252602090810151910152565b5092915050565b600080600080600060c08688031215613fb757600080fd5b613fc086613db9565b9450613fcf8760208801613da1565b93506080860135925060a08601356001600160401b03811115613ff157600080fd5b613ffd88828901613dd0565b969995985093965092949392505050565b6000806000806080858703121561402457600080fd5b61402d85613db9565b935061403b60208601613db9565b925061404960408601613eac565b915061405760608601613eac565b905092959194509250565b60005b8381101561407d578181015183820152602001614065565b50506000910152565b6000815180845261409e816020860160208601614062565b601f01601f19169290920160200192915050565b602081526000611d1f6020830184614086565b80356001600160401b03811681146137fd57600080fd5b600080600080600060a086880312156140f457600080fd5b6140fd86613db9565b945061410b60208701613eac565b935060408601359250614120606087016140c5565b949793965091946080013592915050565b803561ffff811681146137fd57600080fd5b6000806000806080858703121561415957600080fd5b61416285613db9565b935061417060208601613db9565b92506040850135915061405760608601614131565b6000806040838503121561419857600080fd5b6141a183613db9565b9150613f5460208401613eac565b6000602082840312156141c157600080fd5b611d1f82613db9565b6000806000606084860312156141df57600080fd5b6141e884613db9565b92506141f660208501613eac565b9150604084013590509250925092565b60006020828403121561421857600080fd5b611d1f82613eac565b6000806000806000806000806000806000806101208d8f03121561424457600080fd5b61424d8d613db9565b9b5061425b60208e01613db9565b9a5060408d0135995061427060608e01614131565b985060808d0135975060a08d013596506001600160401b0360c08e0135111561429857600080fd5b6142a88e60c08f01358f01613dd0565b90965094506001600160401b0360e08e013511156142c557600080fd5b6142d58e60e08f01358f01613dd0565b90945092506001600160401b036101008e013511156142f357600080fd5b6143048e6101008f01358f01613dd0565b81935080925050509295989b509295989b509295989b565b60008060008060008060008060008060006101408c8e03121561433e57600080fd5b6143488d8d613da1565b9a5061435660608d01613db9565b995060808c0135985060a08c0135975060c08c013596506001600160401b038060e08e0135111561438657600080fd5b6143968e60e08f01358f01613dd0565b90975095506101008d01358110156143ad57600080fd5b6143be8e6101008f01358f01613dd0565b90955093506101208d01358110156143d557600080fd5b506143e78d6101208e01358e01613dd0565b81935080925050509295989b509295989b9093969950565b6000806000806060858703121561441557600080fd5b61441e85613db9565b935061442c60208601613db9565b925060408501356001600160401b038082111561444857600080fd5b818701915087601f83011261445c57600080fd5b81358181111561446b57600080fd5b8860208260051b850101111561448057600080fd5b95989497505060200194505050565b6000806000806000608086880312156144a757600080fd5b6144b086613db9565b9450602086013593506144c560408701614131565b925060608601356001600160401b03811115613ff157600080fd5b600080608083850312156144f357600080fd5b6144fd8484613da1565b9150613f5460608401613db9565b6020808252825182820181905260009190848201906040850190845b8181101561454c5783516001600160a01b031683529284019291840191600101614527565b50909695505050505050565b60008060008060008060008060c0898b03121561457457600080fd5b61457d89613db9565b975061458b60208a01613db9565b9650604089013595506145a060608a01614131565b945060808901356001600160401b03808211156145bc57600080fd5b6145c88c838d01613dd0565b909650945060a08b01359150808211156145e157600080fd5b506145ee8b828c01613dd0565b999c989b5096995094979396929594505050565b60008060006060848603121561461757600080fd5b61462084613db9565b925061462e60208501613eac565b915061463c60408501613db9565b90509250925092565b60008060006060848603121561465a57600080fd5b61466384613eac565b92506141f660208501613db9565b60008060006060848603121561468657600080fd5b61466384613db9565b600080600060a084860312156146a457600080fd5b6146ae8585613da1565b92506146bc60608501613db9565b9150608084013590509250925092565b600080604083850312156146df57600080fd5b613f4683613eac565b600080600080608085870312156146fe57600080fd5b61470785613db9565b935061471560208601613eac565b925060408501359150614057606086016140c5565b815181526020808301519082015260408101611655565b60006020828403121561475357600080fd5b611d1f826140c5565b838152818360208301376000910160200190815292915050565b63ffffffff61478482613eac565b168252602081013560208301526001600160401b036147a5604083016140c5565b1660408301525050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6147e28189614776565b86606082015260e0608082015260006147ff60e0830187896147af565b6001600160a01b03861660a084015282810360c08401526148218185876147af565b9a9950505050505050505050565b6080810161483d8285614776565b6001600160a01b039290921660609190910152919050565b634e487b7160e01b600052602160045260246000fd5b60006020828403121561487d57600080fd5b815160038110611d1f57600080fd5b80151581146132ab57600080fd5b6000602082840312156148ac57600080fd5b8151611d1f8161488c565b6001600160a01b03948516815263ffffffff93909316602084015292166040820152606081019190915260800190565b6000602082840312156148f957600080fd5b8135611d1f8161488c565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261492b57600080fd5b81516001600160401b038082111561494557614945614904565b604051601f8301601f19908116603f0116810190828211818310171561496d5761496d614904565b8160405283815286602085880101111561498657600080fd5b6112ae846020830160208901614062565b6000602082840312156149a957600080fd5b81516001600160401b038111156149bf57600080fd5b6122ae8482850161491a565b63ffffffff95909516855260208501939093526001600160a01b039190911660408401526001600160401b03166060830152608082015260a00190565b8a815261ffff8a16602082015288604082015287606082015260e060808201526000614a3860e08301888a6147af565b82810360a0840152614a4b8187896147af565b905082810360c0840152614a608185876147af565b9d9c50505050505050505050505050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561165557611655614a71565b6000610120614aa9838e614776565b8b60608401528a60808401528960a08401528060c0840152614ace818401898b6147af565b905082810360e0840152614ae38187896147af565b9050828103610100840152614a608185876147af565b6001600160a01b03841681526040602080830182905282820184905260009190606090818501600587901b8601830188865b89811015614bdc57888303605f190184528135368c9003605e19018112614b5157600080fd5b8b0163ffffffff80614b6283613eac565b16855280614b71888401613eac565b16878601525087810135601e19823603018112614b8d57600080fd5b0185810190356001600160401b03811115614ba757600080fd5b803603821315614bb657600080fd5b8789860152614bc888860182846147af565b958701959450505090840190600101614b2b565b50909a9950505050505050505050565b8183823760009101908152919050565b6001600160a01b038781168252861660208201526040810185905261ffff8416606082015260a060808201819052600090614c3a90830184866147af565b98975050505050505050565b600060018060a01b03808a16835288602084015260a06040840152614c6f60a08401888a6147af565b81871660608501528381036080850152614c8a8186886147af565b9b9a5050505050505050505050565b63ffffffff9390931683526001600160a01b03919091166020830152604082015260600190565b60a08101614cce8286614776565b6001600160a01b0393909316606082015260800152919050565b6001600160401b03818116838216019080821115613f9857613f98614a71565b6000808335601e19843603018112614d1f57600080fd5b8301803591506001600160401b03821115614d3957600080fd5b60200191503681900382131561149e57600080fd5b606080825285516001600160401b031682820152602086015163ffffffff16608083015260408601516001600160a01b031660a0830152850151600090614d9d60c084018263ffffffff169052565b50608086015160e083015260a086015161010083015260c086015160e0610120840152614dce610140840182614086565b90508281036020840152614de38186886147af565b9150506127b0604083018415159052565b600060408284031215614e0657600080fd5b604051604081018181106001600160401b0382111715614e2857614e28614904565b604052825181526020928301519281019290925250919050565b600060408284031215614e5457600080fd5b611d1f8383614df4565b60008060608385031215614e7157600080fd5b614e7b8484614df4565b915060408301516001600160401b03811115614e9657600080fd5b614ea28582860161491a565b9150509250929050565b606081526000614ebf6060830187614086565b8281036020840152614ed28186886147af565b91505060018060a01b038316604083015295945050505050565b600060208284031215614efe57600080fd5b5051919050565b60608101611655828461477656fea264697066735822122051f9eb00fad53055a1c5087afa544b196a11f671f631975a7c4baa38e5aeab2064736f6c63430008160033608060405234801561001057600080fd5b506101c3806100206000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806301ffc9a7146100655780631881d94d1461008d57806354fd4d501461009c5780636750cd4c146100c3575b604051632657b6c360e01b815260040160405180910390fd5b61007861007336600461010e565b6100d7565b60405190151581526020015b60405180910390f35b6002604051610084919061013f565b6040805167ffffffffffffffff815260ff6020820152600291810191909152606001610084565b6100786100d1366004610167565b50600190565b60006001600160e01b031982166325fc096160e21b148061010857506301ffc9a760e01b6001600160e01b03198316145b92915050565b60006020828403121561012057600080fd5b81356001600160e01b03198116811461013857600080fd5b9392505050565b602081016003831061016157634e487b7160e01b600052602160045260246000fd5b91905290565b60006020828403121561017957600080fd5b813563ffffffff8116811461013857600080fdfea2646970667358221220b5a5c043a377444c26f6a8e7dd680ec55e20f7abeec109769ef20ff322bd379164736f6c6343000816003360e06040526001600d553480156200001657600080fd5b5060405162005649380380620056498339810160408190526200003991620002fb565b828281816001600160a01b0381166200006d57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6200007881620000de565b5063ffffffff166080526040516200009090620002d0565b604051809103906000f080158015620000ad573d6000803e3d6000fd5b506001600160a01b031660a0819052620000c7906200012e565b50506001600160a01b031660c052506200037a9050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b620001386200029f565b6040516301ffc9a760e01b81526325fc096160e21b60048201526001600160a01b038216906301ffc9a790602401602060405180830381865afa15801562000184573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001aa91906200034f565b620001c85760405163eb64f35d60e01b815260040160405180910390fd5b6001600160a01b03811660009081526005602052604090205460ff1615620002035760405163457517f360e11b815260040160405180910390fd5b6001600160a01b0381166000818152600560209081526040808320805460ff191660019081179091556004805491820181559093527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b90920180546001600160a01b0319168417905590519182527f6b374d56679ca9463f27c85c6311e2bb7fde69bf201d3da39d53f10bd9d78af5910160405180910390a150565b6000546001600160a01b03163314620002ce5760405163118cdaa760e01b815233600482015260240162000064565b565b6101e3806200546683390190565b80516001600160a01b0381168114620002f657600080fd5b919050565b6000806000606084860312156200031157600080fd5b835163ffffffff811681146200032657600080fd5b92506200033660208501620002de565b91506200034660408501620002de565b90509250925092565b6000602082840312156200036257600080fd5b815180151581146200037357600080fd5b9392505050565b60805160a05160c051615084620003e260003960008181610b6a01528181612a7b015281816137ab015261395e01526000610781015260008181610531015281816127a901528181612fab015281816130120152818161358001526135e701526150846000f3fe6080604052600436106103505760003560e01c80639132e5c3116101c6578063c9fc7bcd116100f7578063ddc28c5811610095578063e8964e811161006f578063e8964e8114610bae578063ef667aa114610bce578063f2fde38b14610c19578063f64be4c714610c3957600080fd5b8063ddc28c5814610b2e578063e1758bd814610b5b578063e4fe1d9414610b8e57600080fd5b8063d4b4ec8f116100d1578063d4b4ec8f14610a72578063d70b890214610a92578063dc706a6214610ab2578063dc93c8a214610ae257600080fd5b8063c9fc7bcd146109f6578063ca5eb5e114610a3d578063cb5026b914610a5d57600080fd5b8063a7229fd911610164578063aafea3121161013e578063aafea31214610976578063b96a277f14610996578063c28e0eed146109b6578063c9a54a99146109d657600080fd5b8063a7229fd914610916578063a825d74714610936578063aafe5e071461095657600080fd5b80639c6d7340116101a05780639c6d73401461086f5780639d7f9775146108b6578063a0dd43fc146108d6578063a718531b146108f657600080fd5b80639132e5c31461081a57806391d20fa11461083c5780639535ff301461084f57600080fd5b80635b17bb70116102a05780636f50a8031161023e57806379624ca91161021857806379624ca9146107a35780637cb59012146107bc578063861e1ca5146107dc5780638da5cb5b146107fc57600080fd5b80636f50a80314610724578063715018a61461075a578063733180911461076f57600080fd5b80636a14d7151161027a5780636a14d715146106655780636bf73fa3146106855780636dbd9f90146106a55780636e83f5bb146106c557600080fd5b80635b17bb70146105b65780636750cd4c14610615578063697fe6b61461064557600080fd5b80632baf0be71161030d578063402f8468116102e7578063402f8468146104c057806340f80683146104ff578063416ecebf1461051f578063587cde1e1461056857600080fd5b80632baf0be7146104355780632e80fbf31461045957806335d330b01461047957600080fd5b80630c0c389e1461035557806314f651a91461036a578063183c834f146103a85780632637a450146103c85780632a56c1b0146103e85780632b3197b914610408575b600080fd5b610368610363366004613f4c565b610c6f565b005b34801561037657600080fd5b5061037f610d6d565b6040805163ffffffff90931683526001600160a01b039091166020830152015b60405180910390f35b3480156103b457600080fd5b506103686103c3366004613ffb565b610d9f565b6103db6103d6366004614046565b611046565b60405161039f9190614098565b3480156103f457600080fd5b506103686104033660046140da565b61116d565b34801561041457600080fd5b50610428610423366004614149565b61120d565b60405161039f91906141ed565b34801561044157600080fd5b5061044b60001981565b60405190815260200161039f565b34801561046557600080fd5b50610368610474366004614217565b6112d8565b34801561048557600080fd5b5061044b61049436600461427e565b600c60209081526000948552604080862082529385528385208152918452828420909152825290205481565b3480156104cc57600080fd5b506104e06104db3660046142c0565b611447565b604080516001600160a01b03909316835290151560208301520161039f565b34801561050b57600080fd5b5061036861051a366004614217565b6114c5565b34801561052b57600080fd5b506105537f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff909116815260200161039f565b34801561057457600080fd5b5061059e6105833660046142ea565b600f602052600090815260409020546001600160a01b031681565b6040516001600160a01b03909116815260200161039f565b3480156105c257600080fd5b506105fd6105d1366004614305565b60016020908152600093845260408085208252928452828420905282529020546001600160401b031681565b6040516001600160401b03909116815260200161039f565b34801561062157600080fd5b50610635610630366004614341565b61162b565b604051901515815260200161039f565b34801561065157600080fd5b5061036861066036600461435c565b61167b565b34801561067157600080fd5b50610368610680366004613ffb565b6116f0565b34801561069157600080fd5b506103686106a0366004614457565b611ace565b3480156106b157600080fd5b506103686106c036600461453a565b611b38565b3480156106d157600080fd5b506107056106e0366004614341565b600b60205260009081526040902080546001909101546001600160a01b039091169082565b604080516001600160a01b03909316835260208301919091520161039f565b34801561073057600080fd5b5061059e61073f366004614341565b600a602052600090815260409020546001600160a01b031681565b34801561076657600080fd5b50610368611bda565b34801561077b57600080fd5b5061059e7f000000000000000000000000000000000000000000000000000000000000000081565b3480156107af57600080fd5b50600d5460011415610635565b3480156107c857600080fd5b506103686107d73660046145ca565b611bee565b3480156107e857600080fd5b506106356107f736600461461b565b611cda565b34801561080857600080fd5b506000546001600160a01b031661059e565b34801561082657600080fd5b5061082f611d46565b60405161039f9190614646565b61036861084a366004614693565b611da8565b34801561085b57600080fd5b5061036861086a36600461473d565b611f38565b34801561087b57600080fd5b506105fd61088a366004614305565b60036020908152600093845260408085208252928452828420905282529020546001600160401b031681565b3480156108c257600080fd5b506106356108d136600461473d565b61219c565b3480156108e257600080fd5b506105fd6108f1366004614305565b612276565b34801561090257600080fd5b50610368610911366004614780565b6122d6565b34801561092257600080fd5b506103686109313660046147ac565b6125f6565b34801561094257600080fd5b506103686109513660046147ca565b61260e565b34801561096257600080fd5b5061044b610971366004614305565b612759565b34801561098257600080fd5b50610368610991366004614807565b6127d9565b3480156109a257600080fd5b5061059e6109b13660046142c0565b612a02565b3480156109c257600080fd5b506103686109d13660046142ea565b612a71565b3480156109e257600080fd5b506106356109f136600461461b565b612ad7565b348015610a0257600080fd5b5061044b610a11366004614823565b600260209081526000948552604080862082529385528385208152918452828420909152825290205481565b348015610a4957600080fd5b50610368610a583660046142ea565b612b3c565b348015610a6957600080fd5b5061044b600081565b348015610a7e57600080fd5b50610368610a8d366004614780565b612ba3565b348015610a9e57600080fd5b50610368610aad366004614823565b612de1565b348015610abe57600080fd5b50610635610acd3660046142ea565b60056020526000908152604090205460ff1681565b348015610aee57600080fd5b50610635610afd3660046142c0565b6001600160a01b03918216600090815260066020908152604080832063ffffffff9490941683529290522054161590565b348015610b3a57600080fd5b50610b4e610b49366004614046565b612ed0565b60405161039f9190614865565b348015610b6757600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061059e565b348015610b9a57600080fd5b50600e5461059e906001600160a01b031681565b348015610bba57600080fd5b50610368610bc93660046142ea565b61313c565b348015610bda57600080fd5b50610705610be93660046142c0565b6008602090815260009283526040808420909152908252902080546001909101546001600160a01b039091169082565b348015610c2557600080fd5b50610368610c343660046142ea565b6132a0565b348015610c4557600080fd5b5061059e610c54366004614341565b6009602052600090815260409020546001600160a01b031681565b610cbe86610c8060208a018a614341565b60208a0135610c9560608c0160408d0161487c565b898989604051602001610caa93929190614897565b6040516020818303038152906040526132db565b506040516313137d6560e01b81526001600160a01b038716906313137d65903490610cf9908b908a908a908a9033908b908b90600401614913565b6000604051808303818588803b158015610d1257600080fd5b505af1158015610d26573d6000803e3d6000fd5b50505050507f3cd5e48f9730b129dc7550f0fcea9c767b7be37837cd10e55eb35f734f4bca048787604051610d5c92919061496a565b60405180910390a150505050505050565b600080610d7d600d546001141590565b610d8957600080610d97565b610d97600d5460a081901c91565b915091509091565b6001600160a01b038216600090815260056020526040902054829060ff16610dda57604051631bc58ef360e11b815260040160405180910390fd5b826001600160a01b03811615610e7d576000816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e4e91906149a6565b6002811115610e5f57610e5f614990565b03610e7d576040516342756b1b60e11b815260040160405180910390fd5b83856001600160a01b03821615610f19576040516319d4335360e21b815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015610ed8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610efc91906149d5565b610f1957604051630e476aa960e21b815260040160405180910390fd5b610f2288613496565b6000610f2e8989611447565b9150508015610f5057604051633c075f7560e01b815260040160405180910390fd5b85600003610f98576001600160a01b038916600090815260086020908152604080832063ffffffff8c168452909152812080546001600160a01b031916815560010155610ffe565b438611610fb8576040516302efcf9160e11b815260040160405180910390fd5b6001600160a01b03898116600090815260086020908152604080832063ffffffff8d168452909152902080546001600160a01b0319169189169190911781556001018690555b7f4e0a5bbfa0c11a64effb1ada324b5437a17272e1aed9320398715ef71bb209288989898960405161103394939291906149f2565b60405180910390a1505050505050505050565b61104e613e95565b61105b6020840184614341565b336001600d541461107f5760405163ee120b0960e01b815260040160405180910390fd5b63ffffffff60a01b60a083811b919091166001600160a01b03831617600d556110ad90860160808701614a22565b80156110c25750600e546001600160a01b0316155b156110e057604051632d7b695560e11b815260040160405180910390fd5b6000806110ed33886134e7565b9150915060006110fb613793565b9050600061111761111260a08b0160808c01614a22565b613823565b9050611128846040015183836138bf565b600e5460408501516020015161114a916001600160a01b03169083868c61390d565b60408401515161115c9083858b61393a565b50506001600d555095945050505050565b61117685613496565b600083838360405160200161118d93929190614897565b60408051601f1981840301815291905290506111cb866111b06020880188614341565b60208801356111c560608a0160408b0161487c565b856132db565b507f3cd5e48f9730b129dc7550f0fcea9c767b7be37837cd10e55eb35f734f4bca0485876040516111fd92919061496a565b60405180910390a1505050505050565b6001600160a01b038316600090815260056020526040902054606090849060ff1661124b57604051631bc58ef360e11b815260040160405180910390fd5b604051639c33abf760e01b815263ffffffff80861660048301526001600160a01b0388811660248401529085166044830152861690639c33abf790606401600060405180830381865afa1580156112a6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526112ce9190810190614ad2565b9695505050505050565b6112e185613496565b6001600160a01b038516600090815260026020908152604080832063ffffffff88168452825280832086845282528083206001600160401b038616845290915290205481811461135357604051637182306f60e01b815260048101829052602481018390526044015b60405180910390fd5b6001600160a01b038616600090815260016020908152604080832063ffffffff8916845282528083208784529091529020546001600160401b039081169084161180159061139f575080155b156113c857604051630c09b63560e41b81526001600160401b038416600482015260240161134a565b6001600160a01b038616600090815260026020908152604080832063ffffffff89168452825280832087845282528083206001600160401b0387168452909152908190206000199055517faf0450c392c4f702515a457a362328c8aa21916048ca6d0419e248b30cb55292906111fd90879087908a9088908890614b06565b6001600160a01b03808316600090815260076020908152604080832063ffffffff8616845290915281205490911690816114be5763ffffffff83166000908152600a60205260409020546001600160a01b03169150816114ba57604051633c74268360e11b815260040160405180910390fd5b5060015b9250929050565b6114ce85613496565b6001600160a01b038516600090815260026020908152604080832063ffffffff88168452825280832086845282528083206001600160401b038616845290915290205481811461153b57604051637182306f60e01b8152600481018290526024810183905260440161134a565b80158061158557506001600160a01b038616600090815260016020908152604080832063ffffffff8916845282528083208784529091529020546001600160401b03908116908416115b156115ae57604051630c09b63560e41b81526001600160401b038416600482015260240161134a565b6001600160a01b038616600090815260026020908152604080832063ffffffff89168452825280832087845282528083206001600160401b038716845290915280822091909155517f7f68a37a6e69a0de35024a234558f9efe4b33b58657753d21eaaa82d51c3510e906111fd90879087908a9088908890614b06565b63ffffffff81166000908152600960205260408120546001600160a01b031615801590611675575063ffffffff82166000908152600a60205260409020546001600160a01b031615155b92915050565b336001600160a01b03168b6001600160a01b03168d6001600160a01b03167f8a0b1dce321c5c5fb42349bce46d18087c04140de520917661fb923e44a904b98d8d8d8d8d8d8d8d8d8d6040516116da9a99989796959493929190614b43565b60405180910390a4505050505050505050505050565b6001600160a01b038216600090815260056020526040902054829060ff1615801561172357506001600160a01b03811615155b156117415760405163a4ff2ec360e01b815260040160405180910390fd5b826001600160a01b038116156117e4576000816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611791573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117b591906149a6565b60028111156117c6576117c6614990565b036117e4576040516342756b1b60e11b815260040160405180910390fd5b83856001600160a01b03821615611880576040516319d4335360e21b815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa15801561183f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186391906149d5565b61188057604051630e476aa960e21b815260040160405180910390fd5b61188988613496565b6001600160a01b03808916600090815260076020908152604080832063ffffffff8c168452909152902054811690871681036118d85760405163d0ecb66b60e01b815260040160405180910390fd5b6001600160a01b03898116600081815260076020908152604080832063ffffffff8e168085529083529281902080546001600160a01b031916958d1695861790558051938452908301919091528101919091527fcd6f92f5ac6185a5acfa02c92090746cec64d777269cbcd0ed031e396657a1c29060600160405180910390a18515611a52576001600160a01b038116158061197b57506001600160a01b038716155b1561199957604051633c075f7560e01b815260040160405180910390fd5b60006040518060400160405280836001600160a01b0316815260200188436119c19190614bc2565b90526001600160a01b038b8116600090815260086020908152604080832063ffffffff8f168452825291829020845181546001600160a01b03191694169390931783558301516001909201829055519192507f4e0a5bbfa0c11a64effb1ada324b5437a17272e1aed9320398715ef71bb2092891611a44918d918d9187916149f2565b60405180910390a150611ac3565b6001600160a01b038916600090815260086020908152604080832063ffffffff8c16845290915280822080546001600160a01b0319168155600101829055517f4e0a5bbfa0c11a64effb1ada324b5437a17272e1aed9320398715ef71bb2092891611033918c918c918691906149f2565b505050505050505050565b336001600160a01b03168a6001600160a01b03167f7edfa10fe10193301ad8a8bea7e968c7bcabcc64981f368e3aeada40ce26ae2c8d8c8c8c8c8c8c8c8c8c604051611b239a99989796959493929190614bd5565b60405180910390a35050505050505050505050565b6001600160a01b038316600090815260056020526040902054839060ff16611b7357604051631bc58ef360e11b815260040160405180910390fd5b611b7c85613496565b604051631077eb9160e11b81526001600160a01b038516906320efd72290611bac90889087908790600401614c34565b600060405180830381600087803b158015611bc657600080fd5b505af1158015611ac3573d6000803e3d6000fd5b611be261398c565b611bec60006139b9565b565b336000908152600c602090815260408083206001600160a01b03891684528252808320878452825280832061ffff8716845290915290205415611c4457604051630542086560e21b815260040160405180910390fd5b8181604051611c54929190614d27565b60408051918290038220336000818152600c60209081528482206001600160a01b038c16835281528482208a8352815284822061ffff8a168352905292909220557f3d52ff888d033fd3dd1d8057da59e850c91d91a72c41dfa445b247dfedeb6dc191611ccb919088908890889088908890614d37565b60405180910390a15050505050565b6001600160a01b03811660009081526001602090815260408220611d3f91859185918590611d0a90850185614341565b63ffffffff168152602080820192909252604090810160009081208984013582529092529020546001600160401b0316613a09565b9392505050565b60606004805480602002602001604051908101604052809291908181526020018280548015611d9e57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611d80575b5050505050905090565b6001600160a01b038089166000908152600c60209081526040808320938b168352928152828220898352815282822061ffff891683529052818120549151611df39087908790614d27565b60405180910390209050808214611e27576040516335ca595f60e01b8152600481018390526024810182905260440161134a565b6001600160a01b03808b166000908152600c60209081526040808320938d168084529382528083208c8452825280832061ffff8c168452909152908190206001905551630685081360e51b815263d0a10260903490611e96908e908d908c908c9033908d908d90600401614d81565b6000604051808303818588803b158015611eaf57600080fd5b505af1158015611ec3573d6000803e3d6000fd5b50505050507e36c98efcf9e6641dfbc9051f66f405253e8e0c2ab4a24dccda15595b7378c88a8a8a8a604051611f2494939291906001600160a01b039485168152929093166020830152604082015261ffff91909116606082015260800190565b60405180910390a150505050505050505050565b6001600160a01b038116600090815260056020526040902054819060ff16158015611f6b57506001600160a01b03811615155b15611f895760405163a4ff2ec360e01b815260040160405180910390fd5b816001600160a01b0381161561202c576001816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611fd9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ffd91906149a6565b600281111561200e5761200e614990565b0361202c57604051633d00f6f160e11b815260040160405180910390fd5b82846001600160a01b038216156120c8576040516319d4335360e21b815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015612087573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120ab91906149d5565b6120c857604051630e476aa960e21b815260040160405180910390fd5b6120d187613496565b6001600160a01b03878116600090815260066020908152604080832063ffffffff8b16845290915290205481871691160361211f5760405163d0ecb66b60e01b815260040160405180910390fd5b6001600160a01b03878116600081815260066020908152604080832063ffffffff8c168085529083529281902080546001600160a01b031916958b1695861790558051938452908301919091528101919091527f4cff966ebee29a156dcb34cf72c1d06231fb1777f6bdf6e8089819232f002b1c90606001610d5c565b60008060006121ab8686611447565b91509150816001600160a01b0316846001600160a01b0316036121d357600192505050611d3f565b600081612208576001600160a01b038716600090815260086020908152604080832063ffffffff8a168452909152902061221e565b63ffffffff86166000908152600b602052604090205b6040805180820190915281546001600160a01b03908116808352600190930154602083015290925086161480156122585750438160200151115b156122695760019350505050611d3f565b5060009695505050505050565b6001600160a01b038316600090815260016020908152604080832063ffffffff8616845282528083208484529091528120546001600160401b03165b6122c185858584600101613a8d565b156122ce576001016122b2565b949350505050565b6122de61398c565b6001600160a01b038216600090815260056020526040902054829060ff1661231957604051631bc58ef360e11b815260040160405180910390fd5b826001600160a01b038116156123bc576000816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612369573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061238d91906149a6565b600281111561239e5761239e614990565b036123bc576040516342756b1b60e11b815260040160405180910390fd5b83856001600160a01b03821615612458576040516319d4335360e21b815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015612417573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061243b91906149d5565b61245857604051630e476aa960e21b815260040160405180910390fd5b63ffffffff87166000908152600a60205260409020546001600160a01b03908116908716810361249b5760405163d0ecb66b60e01b815260040160405180910390fd5b63ffffffff88166000818152600a602090815260409182902080546001600160a01b0319166001600160a01b038c169081179091558251938452908301527fc16891855cffb4a5ac51ac11864a3f3c96ba816cc45fe686c987ae36277de5ec910160405180910390a185156125895763ffffffff88166000908152600b6020526040902080546001600160a01b0319166001600160a01b0383161781556125428743614bc2565b600182018190556040517f55b28633cdb29709386f555dfc54418592ad475ce7a65a78ac5928af60ffb8f89161257b918c918691614dd4565b60405180910390a1506125ec565b63ffffffff88166000908152600b602052604080822080546001600160a01b0319168155600101829055517f55b28633cdb29709386f555dfc54418592ad475ce7a65a78ac5928af60ffb8f8916125e3918b918591614dd4565b60405180910390a15b5050505050505050565b6125fe61398c565b612609838383613ada565b505050565b6126258261261f6020860186614341565b3361219c565b612642576040516313e9bb2b60e21b815260040160405180910390fd5b6001600160a01b0382166000908152600160209081526040822090829061266b90870187614341565b63ffffffff168152602080820192909252604090810160009081208784013582529092529020546001600160401b031690506126a8848483613a09565b6126c55760405163751cb20f60e01b815260040160405180910390fd5b6126d0848483613afd565b6126ec5760405162bbf0e560e11b815260040160405180910390fd5b612718836126fd6020870187614341565b60208701356127126060890160408a0161487c565b86613bba565b7f0d87345f3d1c929caba93e1c3821b54ff3512e12b66aa3cfe54b6bcbc17e59b484848460405161274b93929190614dfb565b60405180910390a150505050565b6001600160a01b038316600090815260036020908152604080832063ffffffff86168452825280832084845290915281205481906127a1906001600160401b03166001614e23565b90506127d0817f0000000000000000000000000000000000000000000000000000000000000000878787613c20565b95945050505050565b6127e161398c565b6001600160a01b038116600090815260056020526040902054819060ff1661281c57604051631bc58ef360e11b815260040160405180910390fd5b816001600160a01b038116156128bf576001816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561286c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061289091906149a6565b60028111156128a1576128a1614990565b036128bf57604051633d00f6f160e11b815260040160405180910390fd5b82846001600160a01b0382161561295b576040516319d4335360e21b815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa15801561291a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061293e91906149d5565b61295b57604051630e476aa960e21b815260040160405180910390fd5b63ffffffff86166000908152600960205260409020546001600160a01b0380871691160361299c5760405163d0ecb66b60e01b815260040160405180910390fd5b63ffffffff861660008181526009602090815260409182902080546001600160a01b0319166001600160a01b038a169081179091558251938452908301527f16aa0f528038ab41019e95bae5b418a50ba8532c5800e3b7ea2f517d3fa625f591016111fd565b6001600160a01b03808316600090815260066020908152604080832063ffffffff861684529091529020541680611675575063ffffffff81166000908152600960205260409020546001600160a01b03168061167557604051636c1ccdb560e01b815260040160405180910390fd5b612a7961398c565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b031603612acb576040516310647d0b60e01b815260040160405180910390fd5b612ad481613c99565b50565b6001600160a01b03811660009081526001602090815260408220611d3f91859185918590612b0790850185614341565b63ffffffff168152602080820192909252604090810160009081208984013582529092529020546001600160401b0316613afd565b336000818152600f602090815260409182902080546001600160a01b0319166001600160a01b0386169081179091558251938452908301527f6ee10e9ed4d6ce9742703a498707862f4b00f1396a87195eb93267b3d798398191015b60405180910390a150565b6001600160a01b038216600090815260056020526040902054829060ff16612bde57604051631bc58ef360e11b815260040160405180910390fd5b826001600160a01b03811615612c81576000816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c5291906149a6565b6002811115612c6357612c63614990565b03612c81576040516342756b1b60e11b815260040160405180910390fd5b83856001600160a01b03821615612d1d576040516319d4335360e21b815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015612cdc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d0091906149d5565b612d1d57604051630e476aa960e21b815260040160405180910390fd5b612d2561398c565b84600003612d595763ffffffff87166000908152600b6020526040812080546001600160a01b031916815560010155612dae565b438511612d79576040516302efcf9160e11b815260040160405180910390fd5b63ffffffff87166000908152600b6020526040902080546001600160a01b0319166001600160a01b0388161781556001018590555b7f55b28633cdb29709386f555dfc54418592ad475ce7a65a78ac5928af60ffb8f8878787604051610d5c93929190614dd4565b612dea84613496565b612df5848484612276565b612e00906001614e23565b6001600160401b0316816001600160401b031614612e3c57604051630c09b63560e41b81526001600160401b038216600482015260240161134a565b6001600160a01b038416600081815260016020908152604080832063ffffffff8816808552908352818420878552835292819020805467ffffffffffffffff19166001600160401b038716908117909155815193845291830186905282019290925260608101919091527f28f40053783033ef755556a0c3315379141f51a33aed8334174ffbadd90bde489060800161274b565b6040805180820190915260008082526020820152612ef460a0840160808501614a22565b8015612f095750600e546001600160a01b0316155b15612f2757604051632d7b695560e11b815260040160405180910390fd5b6001600160a01b03821660009081526003602090815260408220908290612f5090870187614341565b63ffffffff16815260208082019290925260409081016000908120878401358252909252902054612f8b906001600160401b03166001614e23565b905060006040518060e00160405280836001600160401b031681526020017f000000000000000000000000000000000000000000000000000000000000000063ffffffff168152602001856001600160a01b03168152602001866000016020810190612ff79190614341565b63ffffffff1681526020018660200135815260200161304f847f0000000000000000000000000000000000000000000000000000000000000000888a60000160208101906130459190614341565b8b60200135613c20565b81526020016130616040880188614e43565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525092935091506130ae9050856109b16020890189614341565b90506001600160a01b03811663d80e9bd9836130cd60608a018a614e43565b6130dd60a08c0160808d01614a22565b6040518563ffffffff1660e01b81526004016130fc9493929190614e89565b6040805180830381865afa158015613118573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ce9190614f7d565b61314461398c565b6040516301ffc9a760e01b81526325fc096160e21b60048201526001600160a01b038216906301ffc9a790602401602060405180830381865afa15801561318f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131b391906149d5565b6131d05760405163eb64f35d60e01b815260040160405180910390fd5b6001600160a01b03811660009081526005602052604090205460ff161561320a5760405163457517f360e11b815260040160405180910390fd5b6001600160a01b0381166000818152600560209081526040808320805460ff191660019081179091556004805491820181559093527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b90920180546001600160a01b0319168417905590519182527f6b374d56679ca9463f27c85c6311e2bb7fde69bf201d3da39d53f10bd9d78af59101612b98565b6132a861398c565b6001600160a01b0381166132d257604051631e4fbdf760e01b81526000600482015260240161134a565b612ad4816139b9565b6001600160a01b038516600090815260016020908152604080832063ffffffff8816845282528083208684529091528120546001600160401b039081169084168110156133c957600181015b846001600160401b0316816001600160401b03161161337c5761334c88888884613a8d565b61337457604051630c09b63560e41b81526001600160401b038216600482015260240161134a565b600101613327565b506001600160a01b038716600090815260016020908152604080832063ffffffff8a16845282528083208884529091529020805467ffffffffffffffff19166001600160401b0386161790555b82516020808501919091206001600160a01b038916600090815260028352604080822063ffffffff8b168352845280822089835284528082206001600160401b0389168352909352919091205490925080831461344357604051637182306f60e01b8152600481018290526024810184905260440161134a565b50506001600160a01b03909516600090815260026020908152604080832063ffffffff90971683529581528582209482529384528481206001600160401b03909316815291909252918220919091555090565b336001600160a01b038216148015906134c957506001600160a01b038181166000908152600f6020526040902054163314155b15612ad45760405163c4c5259360e01b815260040160405180910390fd5b6134ef613e95565b600080613560856135036020870187614341565b6001600160a01b0391909116600090815260036020908152604080832063ffffffff949094168352928152828220818901358352905220805467ffffffffffffffff19811660016001600160401b03928316019182161790915590565b905060006040518060e00160405280836001600160401b031681526020017f000000000000000000000000000000000000000000000000000000000000000063ffffffff168152602001876001600160a01b031681526020018660000160208101906135cc9190614341565b63ffffffff1681526020018660200135815260200161361a847f00000000000000000000000000000000000000000000000000000000000000008a8a60000160208101906130459190614341565b815260200161362c6040880188614e43565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525092935091506136799050876109b16020890189614341565b90506000806001600160a01b038316634389e58f8561369b60608c018c614e43565b6136ab60a08e0160808f01614a22565b6040518563ffffffff1660e01b81526004016136ca9493929190614e89565b6000604051808303816000875af11580156136e9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526137119190810190614f99565b90925090507f1ab700d4ced0c005b164c0f789fd09fcbb0156d4c2041b8a3bfbcd961cd1567f8161374560608b018b614e43565b866040516137569493929190614fe7565b60405180910390a1506040805160608101825260a09094015184526001600160401b03909416602084015292820192909252925090509250929050565b6040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa1580156137fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061381e9190615027565b905090565b600081156138ba57600e546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015613873573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138979190615027565b9050806000036138ba57604051631775123760e01b815260040160405180910390fd5b919050565b82518210806138d15750808360200151115b156126095782516020840151604051634f3ec0d360e01b815260048101929092526024820184905260448201526064810182905260840161134a565b831561391e5761391e858386613cef565b82841015613933576139338582868603613cef565b5050505050565b341561395957604051634d18bd2960e11b815260040160405180910390fd5b6139867f00000000000000000000000000000000000000000000000000000000000000008585858561390d565b50505050565b6000546001600160a01b03163314611bec5760405163118cdaa760e01b815233600482015260240161134a565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600080826001600160401b031611806122ce5750604051600162842fc360e01b031981526001600160a01b0384169063ff7bd03d90613a4c908790600401615040565b602060405180830381865afa158015613a69573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122ce91906149d5565b6001600160a01b038416600090815260026020908152604080832063ffffffff87168452825280832085845282528083206001600160401b03851684529091529020541515949350505050565b6001600160a01b038316613af2576126098282613d2a565b612609838383613cef565b60006001600160401b038216613b19606086016040870161487c565b6001600160401b031611806122ce57506001600160a01b03831660009081526002602090815260408220908290613b5290880188614341565b63ffffffff1663ffffffff1681526020019081526020016000206000866020013581526020019081526020016000206000866040016020810190613b96919061487c565b6001600160401b031681526020810191909152604001600020541415949350505050565b80613bd8576040516304df7fdb60e11b815260040160405180910390fd5b6001600160a01b03909416600090815260026020908152604080832063ffffffff90961683529481528482209382529283528381206001600160401b03909216815291522055565b600085856001600160a01b03861660405160c09390931b6001600160c01b031916602084015260e091821b6001600160e01b03199081166028850152602c8401919091529085901b16604c8201526050810183905260700160405160208183030381529060405280519060200120905095945050505050565b613ca161398c565b600e80546001600160a01b0319166001600160a01b0383169081179091556040519081527fd476ec5ec1ac11cec3714d41e7ea49419471aceb9bd0dff1becfc3e363a6239690602001612b98565b6001600160a01b038216613d16576040516306b7a93160e41b815260040160405180910390fd5b6126096001600160a01b0384168383613dd7565b6001600160a01b038216613d51576040516306b7a93160e41b815260040160405180910390fd5b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114613d9e576040519150601f19603f3d011682016040523d82523d6000602084013e613da3565b606091505b505090508061260957604051631196f20d60e21b81526001600160a01b03841660048201526024810183905260440161134a565b604080516001600160a01b03841660248201526044808201849052825180830390910181526064909101909152602080820180516001600160e01b031663a9059cbb60e01b1781528251612609938793909260009283929183919082885af180613e47576040513d6000823e3d81fd5b50506000513d91508115613e5f578060011415613e6c565b6001600160a01b0384163b155b1561398657604051635274afe760e01b81526001600160a01b038516600482015260240161134a565b60405180606001604052806000801916815260200160006001600160401b03168152602001613ed7604051806040016040528060008152602001600081525090565b905290565b600060608284031215613eee57600080fd5b50919050565b80356001600160a01b03811681146138ba57600080fd5b60008083601f840112613f1d57600080fd5b5081356001600160401b03811115613f3457600080fd5b6020830191508360208285010111156114be57600080fd5b600080600080600080600060e0888a031215613f6757600080fd5b613f718989613edc565b9650613f7f60608901613ef4565b95506080880135945060a08801356001600160401b0380821115613fa257600080fd5b613fae8b838c01613f0b565b909650945060c08a0135915080821115613fc757600080fd5b50613fd48a828b01613f0b565b989b979a50959850939692959293505050565b803563ffffffff811681146138ba57600080fd5b6000806000806080858703121561401157600080fd5b61401a85613ef4565b935061402860208601613fe7565b925061403660408601613ef4565b9396929550929360600135925050565b6000806040838503121561405957600080fd5b82356001600160401b0381111561406f57600080fd5b830160a0818603121561408157600080fd5b915061408f60208401613ef4565b90509250929050565b6000608082019050825182526001600160401b03602084015116602083015260408301516140d3604084018280518252602090810151910152565b5092915050565b600080600080600060c086880312156140f257600080fd5b6140fb86613ef4565b945061410a8760208801613edc565b93506080860135925060a08601356001600160401b0381111561412c57600080fd5b61413888828901613f0b565b969995985093965092949392505050565b6000806000806080858703121561415f57600080fd5b61416885613ef4565b935061417660208601613ef4565b925061418460408601613fe7565b915061419260608601613fe7565b905092959194509250565b60005b838110156141b85781810151838201526020016141a0565b50506000910152565b600081518084526141d981602086016020860161419d565b601f01601f19169290920160200192915050565b602081526000611d3f60208301846141c1565b80356001600160401b03811681146138ba57600080fd5b600080600080600060a0868803121561422f57600080fd5b61423886613ef4565b945061424660208701613fe7565b93506040860135925061425b60608701614200565b949793965091946080013592915050565b803561ffff811681146138ba57600080fd5b6000806000806080858703121561429457600080fd5b61429d85613ef4565b93506142ab60208601613ef4565b9250604085013591506141926060860161426c565b600080604083850312156142d357600080fd5b6142dc83613ef4565b915061408f60208401613fe7565b6000602082840312156142fc57600080fd5b611d3f82613ef4565b60008060006060848603121561431a57600080fd5b61432384613ef4565b925061433160208501613fe7565b9150604084013590509250925092565b60006020828403121561435357600080fd5b611d3f82613fe7565b6000806000806000806000806000806000806101208d8f03121561437f57600080fd5b6143888d613ef4565b9b5061439660208e01613ef4565b9a5060408d013599506143ab60608e0161426c565b985060808d0135975060a08d013596506001600160401b0360c08e013511156143d357600080fd5b6143e38e60c08f01358f01613f0b565b90965094506001600160401b0360e08e0135111561440057600080fd5b6144108e60e08f01358f01613f0b565b90945092506001600160401b036101008e0135111561442e57600080fd5b61443f8e6101008f01358f01613f0b565b81935080925050509295989b509295989b509295989b565b60008060008060008060008060008060006101408c8e03121561447957600080fd5b6144838d8d613edc565b9a5061449160608d01613ef4565b995060808c0135985060a08c0135975060c08c013596506001600160401b038060e08e013511156144c157600080fd5b6144d18e60e08f01358f01613f0b565b90975095506101008d01358110156144e857600080fd5b6144f98e6101008f01358f01613f0b565b90955093506101208d013581101561451057600080fd5b506145228d6101208e01358e01613f0b565b81935080925050509295989b509295989b9093969950565b6000806000806060858703121561455057600080fd5b61455985613ef4565b935061456760208601613ef4565b925060408501356001600160401b038082111561458357600080fd5b818701915087601f83011261459757600080fd5b8135818111156145a657600080fd5b8860208260051b85010111156145bb57600080fd5b95989497505060200194505050565b6000806000806000608086880312156145e257600080fd5b6145eb86613ef4565b9450602086013593506146006040870161426c565b925060608601356001600160401b0381111561412c57600080fd5b6000806080838503121561462e57600080fd5b6146388484613edc565b915061408f60608401613ef4565b6020808252825182820181905260009190848201906040850190845b818110156146875783516001600160a01b031683529284019291840191600101614662565b50909695505050505050565b60008060008060008060008060c0898b0312156146af57600080fd5b6146b889613ef4565b97506146c660208a01613ef4565b9650604089013595506146db60608a0161426c565b945060808901356001600160401b03808211156146f757600080fd5b6147038c838d01613f0b565b909650945060a08b013591508082111561471c57600080fd5b506147298b828c01613f0b565b999c989b5096995094979396929594505050565b60008060006060848603121561475257600080fd5b61475b84613ef4565b925061476960208501613fe7565b915061477760408501613ef4565b90509250925092565b60008060006060848603121561479557600080fd5b61479e84613fe7565b925061433160208501613ef4565b6000806000606084860312156147c157600080fd5b61479e84613ef4565b600080600060a084860312156147df57600080fd5b6147e98585613edc565b92506147f760608501613ef4565b9150608084013590509250925092565b6000806040838503121561481a57600080fd5b61408183613fe7565b6000806000806080858703121561483957600080fd5b61484285613ef4565b935061485060208601613fe7565b92506040850135915061419260608601614200565b815181526020808301519082015260408101611675565b60006020828403121561488e57600080fd5b611d3f82614200565b838152818360208301376000910160200190815292915050565b63ffffffff6148bf82613fe7565b168252602081013560208301526001600160401b036148e060408301614200565b1660408301525050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b61491d81896148b1565b86606082015260e06080820152600061493a60e0830187896148ea565b6001600160a01b03861660a084015282810360c084015261495c8185876148ea565b9a9950505050505050505050565b6080810161497882856148b1565b6001600160a01b039290921660609190910152919050565b634e487b7160e01b600052602160045260246000fd5b6000602082840312156149b857600080fd5b815160038110611d3f57600080fd5b8015158114612ad457600080fd5b6000602082840312156149e757600080fd5b8151611d3f816149c7565b6001600160a01b03948516815263ffffffff93909316602084015292166040820152606081019190915260800190565b600060208284031215614a3457600080fd5b8135611d3f816149c7565b634e487b7160e01b600052604160045260246000fd5b600082601f830112614a6657600080fd5b81516001600160401b0380821115614a8057614a80614a3f565b604051601f8301601f19908116603f01168101908282118183101715614aa857614aa8614a3f565b81604052838152866020858801011115614ac157600080fd5b6112ce84602083016020890161419d565b600060208284031215614ae457600080fd5b81516001600160401b03811115614afa57600080fd5b6122ce84828501614a55565b63ffffffff95909516855260208501939093526001600160a01b039190911660408401526001600160401b03166060830152608082015260a00190565b8a815261ffff8a16602082015288604082015287606082015260e060808201526000614b7360e08301888a6148ea565b82810360a0840152614b868187896148ea565b905082810360c0840152614b9b8185876148ea565b9d9c50505050505050505050505050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561167557611675614bac565b6000610120614be4838e6148b1565b8b60608401528a60808401528960a08401528060c0840152614c09818401898b6148ea565b905082810360e0840152614c1e8187896148ea565b9050828103610100840152614b9b8185876148ea565b6001600160a01b03841681526040602080830182905282820184905260009190606090818501600587901b8601830188865b89811015614d1757888303605f190184528135368c9003605e19018112614c8c57600080fd5b8b0163ffffffff80614c9d83613fe7565b16855280614cac888401613fe7565b16878601525087810135601e19823603018112614cc857600080fd5b0185810190356001600160401b03811115614ce257600080fd5b803603821315614cf157600080fd5b8789860152614d0388860182846148ea565b958701959450505090840190600101614c66565b50909a9950505050505050505050565b8183823760009101908152919050565b6001600160a01b038781168252861660208201526040810185905261ffff8416606082015260a060808201819052600090614d7590830184866148ea565b98975050505050505050565b600060018060a01b03808a16835288602084015260a06040840152614daa60a08401888a6148ea565b81871660608501528381036080850152614dc58186886148ea565b9b9a5050505050505050505050565b63ffffffff9390931683526001600160a01b03919091166020830152604082015260600190565b60a08101614e0982866148b1565b6001600160a01b0393909316606082015260800152919050565b6001600160401b038181168382160190808211156140d3576140d3614bac565b6000808335601e19843603018112614e5a57600080fd5b8301803591506001600160401b03821115614e7457600080fd5b6020019150368190038213156114be57600080fd5b606080825285516001600160401b031682820152602086015163ffffffff16608083015260408601516001600160a01b031660a0830152850151600090614ed860c084018263ffffffff169052565b50608086015160e083015260a086015161010083015260c086015160e0610120840152614f096101408401826141c1565b90508281036020840152614f1e8186886148ea565b9150506127d0604083018415159052565b600060408284031215614f4157600080fd5b604051604081018181106001600160401b0382111715614f6357614f63614a3f565b604052825181526020928301519281019290925250919050565b600060408284031215614f8f57600080fd5b611d3f8383614f2f565b60008060608385031215614fac57600080fd5b614fb68484614f2f565b915060408301516001600160401b03811115614fd157600080fd5b614fdd85828601614a55565b9150509250929050565b606081526000614ffa60608301876141c1565b828103602084015261500d8186886148ea565b91505060018060a01b038316604083015295945050505050565b60006020828403121561503957600080fd5b5051919050565b6060810161167582846148b156fea264697066735822122090f702bc055b3c8606fe084619d87bdcfb9298de28d91daac921e84b5c1160f264736f6c63430008160033608060405234801561001057600080fd5b506101c3806100206000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806301ffc9a7146100655780631881d94d1461008d57806354fd4d501461009c5780636750cd4c146100c3575b604051632657b6c360e01b815260040160405180910390fd5b61007861007336600461010e565b6100d7565b60405190151581526020015b60405180910390f35b6002604051610084919061013f565b6040805167ffffffffffffffff815260ff6020820152600291810191909152606001610084565b6100786100d1366004610167565b50600190565b60006001600160e01b031982166325fc096160e21b148061010857506301ffc9a760e01b6001600160e01b03198316145b92915050565b60006020828403121561012057600080fd5b81356001600160e01b03198116811461013857600080fd5b9392505050565b602081016003831061016157634e487b7160e01b600052602160045260246000fd5b91905290565b60006020828403121561017957600080fd5b813563ffffffff8116811461013857600080fdfea2646970667358221220b5a5c043a377444c26f6a8e7dd680ec55e20f7abeec109769ef20ff322bd379164736f6c63430008160033608060405234801561001057600080fd5b506040516114d63803806114d683398101604081905261002f9161010a565b338061005557604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b61005e816100ba565b506001600160a01b03166000908152600260205260409020805460ff1916600190811790915580546001600160801b03191668056bc75e2d6310000017905560058054602f60801b6001600160801b039190911617905561013a565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561011c57600080fd5b81516001600160a01b038116811461013357600080fd5b9392505050565b61138d806101496000396000f3fe6080604052600436106101405760003560e01c80638ca2fb08116100b6578063d350ad251161006f578063d350ad2514610441578063da26663a14610461578063dbbb415514610522578063e0ad121a14610542578063f2fde38b146105cb578063fd9be522146105eb57600080fd5b80638ca2fb08146103595780638da5cb5b1461039957806392807f58146103b7578063c1723a1d146103e9578063c1840327146103fc578063cd68b79b1461041a57600080fd5b80635d6d7ccb116101085780635d6d7ccb146102405780635e280f1114610260578063715018a6146102985780637bc3c9ab146102ad5780637dc438a4146102ea57806388a4124c1461030a57600080fd5b806311f2c343146101455780632f7cb0b41461017c5780633161b7f61461019e57806336a5beba146101be57806352a7251014610220575b600080fd5b34801561015157600080fd5b5061016961016036600461100d565b60009392505050565b6040519081526020015b60405180910390f35b34801561018857600080fd5b5061019c610197366004611057565b61060b565b005b3480156101aa57600080fd5b5061019c6101b9366004611079565b610632565b3480156101ca57600080fd5b506040805180820182526000808252602091820152815180830183526004546001600160401b03811680835263ffffffff600160401b909204821692840192835284519081529151169181019190915201610173565b34801561022c57600080fd5b5061019c61023b366004611104565b610773565b34801561024c57600080fd5b5061019c61025b366004611057565b6107a6565b34801561026c57600080fd5b50600654610280906001600160a01b031681565b6040516001600160a01b039091168152602001610173565b3480156102a457600080fd5b5061019c610819565b3480156102b957600080fd5b506102cd6102c8366004611152565b61082d565b604080519283526001600160801b03909116602083015201610173565b3480156102f657600080fd5b5061019c610305366004611170565b6108c8565b34801561031657600080fd5b5061032a61032536600461100d565b610989565b604080519485526001600160801b03938416602086015291831691840191909152166060820152608001610173565b34801561036557600080fd5b50610389610374366004611188565b60026020526000908152604090205460ff1681565b6040519015158152602001610173565b3480156103a557600080fd5b506000546001600160a01b0316610280565b3480156103c357600080fd5b506005546001600160801b03165b6040516001600160801b039091168152602001610173565b61032a6103f736600461100d565b6109ab565b34801561040857600080fd5b506001546001600160801b03166103d1565b34801561042657600080fd5b506005546103d190600160801b90046001600160801b031681565b34801561044d57600080fd5b5061019c61045c366004611057565b6109dc565b34801561046d57600080fd5b506104e861047c3660046111a3565b60408051606080820183526000808352602080840182905292840181905263ffffffff94851681526003835283902083519182018452546001600160801b0381168252600160801b81046001600160401b031692820192909252600160c01b9091049092169082015290565b6040805182516001600160801b031681526020808401516001600160401b0316908201529181015163ffffffff1690820152606001610173565b34801561052e57600080fd5b5061019c61053d366004611188565b610a06565b34801561054e57600080fd5b506104e861055d3660046111be565b60408051606080820183526000808352602080840182905292840181905261ffff949094168452600382529282902082519384018352546001600160801b03811684526001600160401b03600160801b82041691840191909152600160c01b900463ffffffff169082015290565b3480156105d757600080fd5b5061019c6105e6366004611188565b610a30565b3480156105f757600080fd5b5061019c6106063660046111d9565b610a6e565b610613610a84565b600580546001600160801b03928316600160801b029216919091179055565b336106456000546001600160a01b031690565b6001600160a01b031614610683573360009081526002602052604090205460ff166106835760405163320ae52960e01b815260040160405180910390fd5b60005b8181101561076e57368383838181106106a1576106a1611203565b60800291909101915061076590506106bc60208301836111a3565b6106ce36849003840160208501611230565b805160208083015160409384015184516060810186526001600160801b0394851681526001600160401b0392831681850190815263ffffffff9283168288019081529783166000908152600390955295909320925183549551965194166001600160c01b031990951694909417600160801b95909116949094029390931763ffffffff60c01b1916600160c01b9190921602179055565b50600101610686565b505050565b61077b610a84565b6001600160a01b03919091166000908152600260205260409020805460ff1916911515919091179055565b336107b96000546001600160a01b031690565b6001600160a01b0316146107f7573360009081526002602052604090205460ff166107f75760405163320ae52960e01b815260040160405180910390fd5b600580546001600160801b0319166001600160801b0392909216919091179055565b610821610a84565b61082b6000610ab1565b565b6000808461ffff16606e148061084857508461ffff1661279f145b8061085857508461ffff16614eaf145b156108755761086c8561ffff168585610b01565b915091506108c0565b8461ffff16606f148061088d57508461ffff16612794145b8061089d57508461ffff16614ea4145b156108b15761086c8561ffff168585610c0e565b61086c8561ffff168585610d5e565b935093915050565b336108db6000546001600160a01b031690565b6001600160a01b031614610919573360009081526002602052604090205460ff166109195760405163320ae52960e01b815260040160405180910390fd5b6109296106bc60208301836111a3565b600061093b60a08301608084016112a9565b9050600061094f60c0840160a085016111a3565b6004805463ffffffff909216600160401b026bffffffffffffffffffffffff199092166001600160401b0390941693909317179091555050565b60008060008061099a878787610dfe565b935093509350935093509350935093565b6000808080806109bf565b60405180910390fd5b6109ca888888610dfe565b94509450945094505093509350935093565b6109e4610a84565b600180546001600160801b0319166001600160801b0392909216919091179055565b610a0e610a84565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b610a38610a84565b6001600160a01b038116610a6257604051631e4fbdf760e01b8152600060048201526024016109b6565b610a6b81610ab1565b50565b610a76610a84565b610a808282610ecc565b5050565b6000546001600160a01b0316331461082b5760405163118cdaa760e01b81523360048201526024016109b6565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b63ffffffff8381166000908152600360205260408120600454600554929384938492600160401b900490911690606490610b4b90600160801b90046001600160801b0316896112da565b610b55919061130d565b610b5f91906112da565b8254909150600090610b7e90600160c01b900463ffffffff16886112da565b83546004549192506000916001600160401b03600160801b90920482169184918691610bab91168b611321565b610bb59190611321565b610bbf9190611321565b610bc991906112da565b60015485549192506001600160801b0390811691610be89116836112da565b610bf2919061130d565b935493996001600160801b039094169850929650505050505050565b6000806000610c1c86610f79565b63ffffffff80821660009081526003602052604081208054939450929091610c4c91600160c01b900416886112da565b610c5890610c74611321565b8254909150600090610c7a90600160801b90046001600160401b0316836112da565b63ffffffff808b1660009081526003602052604081208054939450929091610caa91600160c01b9004168b6112da565b8254909150600090600160801b90046001600160401b0316610ccc8b84611321565b610cd691906112da565b60015487549192506000916001600160801b0391821691610cf89116876112da565b610d02919061130d565b60015485549192506000916001600160801b0391821691610d249116856112da565b610d2e919061130d565b90506000610d3c8284611321565b9554959f6001600160801b039096169e50949c50505050505050505050505050565b63ffffffff80841660009081526003602052604081208054919283928391610d8e91600160c01b900416876112da565b8254909150600090600160801b90046001600160401b0316610db08784611321565b610dba91906112da565b60015484549192506001600160801b0390811691610dd99116836112da565b610de3919061130d565b925492986001600160801b0390931697509195505050505050565b600080808080610e1061753089611334565b90508063ffffffff16606e1480610e2e57508063ffffffff1661279f145b80610e4057508063ffffffff16614eaf145b15610e5a57610e50818888610b01565b9095509350610ea9565b8063ffffffff16606f1480610e7657508063ffffffff16612794145b80610e8857508063ffffffff16614ea4145b15610e9857610e50818888610c0e565b610ea3818888610d5e565b90955093505b505060015460055493979296506001600160801b03908116955090921692509050565b6001600160a01b038216610ef3576040516306b7a93160e41b815260040160405180910390fd5b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114610f40576040519150601f19603f3d011682016040523d82523d6000602084013e610f45565b606091505b505090508061076e57604051631196f20d60e21b81526001600160a01b0384166004820152602481018390526044016109b6565b600080610f8861753084611334565b90508063ffffffff16606f03610fa15750606592915050565b8063ffffffff1661279403610fba575061278992915050565b8063ffffffff16614ea403610fd35750614e9992915050565b604051633d0b0cf760e21b815263ffffffff821660048201526024016109b6565b803563ffffffff8116811461100857600080fd5b919050565b60008060006060848603121561102257600080fd5b61102b84610ff4565b95602085013595506040909401359392505050565b80356001600160801b038116811461100857600080fd5b60006020828403121561106957600080fd5b61107282611040565b9392505050565b6000806020838503121561108c57600080fd5b82356001600160401b03808211156110a357600080fd5b818501915085601f8301126110b757600080fd5b8135818111156110c657600080fd5b8660208260071b85010111156110db57600080fd5b60209290920196919550909350505050565b80356001600160a01b038116811461100857600080fd5b6000806040838503121561111757600080fd5b611120836110ed565b91506020830135801515811461113557600080fd5b809150509250929050565b803561ffff8116811461100857600080fd5b60008060006060848603121561116757600080fd5b61102b84611140565b600060c0828403121561118257600080fd5b50919050565b60006020828403121561119a57600080fd5b611072826110ed565b6000602082840312156111b557600080fd5b61107282610ff4565b6000602082840312156111d057600080fd5b61107282611140565b600080604083850312156111ec57600080fd5b6111f5836110ed565b946020939093013593505050565b634e487b7160e01b600052603260045260246000fd5b80356001600160401b038116811461100857600080fd5b60006060828403121561124257600080fd5b604051606081018181106001600160401b038211171561127257634e487b7160e01b600052604160045260246000fd5b60405261127e83611040565b815261128c60208401611219565b602082015261129d60408401610ff4565b60408201529392505050565b6000602082840312156112bb57600080fd5b61107282611219565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176112f1576112f16112c4565b92915050565b634e487b7160e01b600052601260045260246000fd5b60008261131c5761131c6112f7565b500490565b808201808211156112f1576112f16112c4565b600063ffffffff8084168061134b5761134b6112f7565b9216919091069291505056fea2646970667358221220ff064bafdc05a2d85d9d93ddac0510aa9c8f276c4f57eefac742b7fc656acac564736f6c6343000816003360e06040523480156200001157600080fd5b50604051620049703803806200497083398101604081905262000034916200018b565b82828282836001600160a01b031663416ecebf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000077573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200009d9190620001d8565b6001600160a01b03821660805263ffffffff811660a05283833380620000dd57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b620000e88162000122565b5060c0919091526002555050600680546001600160a01b0319166001600160a01b0398909816979097179096555062000207945050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146200018857600080fd5b50565b60008060008060808587031215620001a257600080fd5b8451620001af8162000172565b6020860151909450620001c28162000172565b6040860151606090960151949790965092505050565b600060208284031215620001eb57600080fd5b815163ffffffff811681146200020057600080fd5b9392505050565b60805160a05160c0516147206200025060003960008181611d100152611e730152600050506000818161069a0152818161079f015281816112b101526117d901526147206000f3fe60806040526004361061014f5760003560e01c806361d027b3116100b6578063d15b0d491161006f578063d15b0d4914610450578063d80e9bd914610470578063f0f442601461049d578063f2fde38b146104bd578063faaebd21146104dd578063fd9be5221461051857600080fd5b806361d027b3146103905780636750cd4c146103b0578063715018a6146103d05780638da5cb5b146103e55780639c33abf714610403578063c14c43491461043057600080fd5b806329460b0b1161010857806329460b0b1461025357806339e3f938146102735780634389e58f146102a057806343ea4fa9146102ce5780634d963200146102ee57806354fd4d501461036357600080fd5b806301ffc9a71461015b5780630e97289b14610190578063188183f4146101c85780631881d94d146101f5578063200175f71461021157806320efd7221461023357600080fd5b3661015657005b600080fd5b34801561016757600080fd5b5061017b6101763660046135db565b610538565b60405190151581526020015b60405180910390f35b34801561019c57600080fd5b506006546101b0906001600160a01b031681565b6040516001600160a01b039091168152602001610187565b3480156101d457600080fd5b506101e86101e3366004613647565b61058a565b6040516101879190613680565b34801561020157600080fd5b50600060405161018791906136a6565b34801561021d57600080fd5b5061023161022c3660046136ce565b610663565b005b34801561023f57600080fd5b5061023161024e366004613753565b61079d565b34801561025f57600080fd5b5061023161026e3660046137a7565b610912565b34801561027f57600080fd5b5061029361028e366004613647565b610aaa565b604051610187919061389e565b3480156102ac57600080fd5b506102c06102bb3660046138c1565b610be5565b6040516101879291906139c0565b3480156102da57600080fd5b506102936102e9366004613647565b610c7a565b3480156102fa57600080fd5b5061033f610309366004613647565b600460209081526000928352604080842090915290825290205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b03909116602083015201610187565b34801561036f57600080fd5b50604080516003815260006020820152600291810191909152606001610187565b34801561039c57600080fd5b506003546101b0906001600160a01b031681565b3480156103bc57600080fd5b5061017b6103cb3660046139e4565b610f86565b3480156103dc57600080fd5b50610231610f91565b3480156103f157600080fd5b506000546001600160a01b03166101b0565b34801561040f57600080fd5b5061042361041e366004613a01565b610fa5565b6040516101879190613a4c565b34801561043c57600080fd5b5061023161044b366004613a5f565b611037565b34801561045c57600080fd5b5061023161046b366004613ad3565b611170565b34801561047c57600080fd5b5061049061048b3660046138c1565b6111e5565b6040516101879190613aec565b3480156104a957600080fd5b506102316104b8366004613b03565b611255565b3480156104c957600080fd5b506102316104d8366004613b03565b611269565b3480156104e957600080fd5b5061050a6104f8366004613b03565b60056020526000908152604090205481565b604051908152602001610187565b34801561052457600080fd5b50610231610533366004613b20565b6112a4565b60006001600160e01b031982166325fc096160e21b148061056957506001600160e01b0319821663b6e9ace360e01b145b8061058457506301ffc9a760e01b6001600160e01b03198316145b92915050565b604080518082019091526000808252602082015263ffffffff80831660008181527f17ef568e3e12ab5b9c7254a8d58478811de00f9e6eb34345acd53bf8fd09d3ec602090815260408083206001600160a01b038916845260048352818420948452939091528120805492939092169081900361060e57825463ffffffff16610610565b805b63ffffffff168452815464010000000090046001600160a01b03168061064857835464010000000090046001600160a01b031661064a565b805b6001600160a01b03166020860152509295945050505050565b6003546001600160a01b0316331461068e5760405163885762a760e01b815260040160405180910390fd5b826001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e1758bd86040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061071a9190613b4c565b6001600160a01b031603610741576040516339a5741160e21b815260040160405180910390fd5b61074c838383611384565b604080516001600160a01b038086168252841660208201529081018290527fe081464b7278501267de69fa85b7b9560b0ae05d5fbfaab9b1986c70356e2efe906060015b60405180910390a1505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633146107e65760405163467409c360e01b815260040160405180910390fd5b60005b8181101561090c573683838381811061080457610804613b69565b90506020028101906108169190613b7f565b905061082d61082860208301836139e4565b6113c4565b600161083f60408301602084016139e4565b63ffffffff160361087f5761087a61085a60208301836139e4565b866108686040850185613b9f565b8101906108759190613c75565b6113f2565b610903565b600261089160408301602084016139e4565b63ffffffff16036108cc5761087a6108ac60208301836139e4565b866108ba6040850185613b9f565b8101906108c79190613e35565b61147a565b6108dc60408201602083016139e4565b604051635d4be0fd60e11b815263ffffffff90911660048201526024015b60405180910390fd5b506001016107e9565b50505050565b61091a6114c3565b60005b81811015610a6c573683838381811061093857610938613b69565b905060200281019061094a9190613e69565b905060ff61095b6020830183613e7f565b61096c906040810190602001613e95565b60ff160361098d576040516341d50bed60e11b815260040160405180910390fd5b60ff61099c6020830183613e7f565b6109ad906060810190604001613e95565b60ff16036109ce5760405163211089b360e11b815260040160405180910390fd5b6001600160401b036109e36020830183613e7f565b6109f1906020810190613eb0565b6001600160401b031603610a185760405163281b33d760e11b815260040160405180910390fd5b610a36610a286020830183613e7f565b610a3190613ecb565b6114f0565b610a636000610a4860208401846139e4565b610a556020850185613e7f565b610a5e90613ecb565b611528565b5060010161091d565b507faaf3aaa0c11056e86ac56eb653e25b005ca1a7d4dcd21ba24647f7ab63f3b5608282604051610a9e929190613f5d565b60405180910390a15050565b610ab2613522565b6001600160a01b038316600090815260016020818152604080842063ffffffff87168552825292839020835160c08101855281546001600160401b038116825260ff600160401b8204811683860152600160481b8204811683880152600160501b9091041660608201529281018054855181850281018501909652808652939491936080860193830182828015610b7257602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610b54575b5050505050815260200160028201805480602002602001604051908101604052809291908181526020018280548015610bd457602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610bb6575b505050505081525050905092915050565b60408051808201909152600080825260208201526060610c07868686866117c1565b600654604051631f5dad8b60e31b81529294509092506001600160a01b03169063faed6c5890610c3f908490899089906004016140a2565b600060405180830381600087803b158015610c5957600080fd5b505af1158015610c6d573d6000803e3d6000fd5b5050505094509492505050565b610c82613522565b63ffffffff821660008181527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49602090815260408083206001600160a01b03881684526001835281842094845293909152902080546001600160401b031680610cf75782546001600160401b03168452610d14565b6001600160401b0381811614610d14576001600160401b03811684525b8154600160401b900460ff16610dae578254600160401b900460ff1615610da95782600101805480602002602001604051908101604052809291908181526020018280548015610d8d57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610d6f575b505050505060808501528254600160401b900460ff1660208501525b610e35565b8154600160401b900460ff90811614610e355781600101805480602002602001604051908101604052809291908181526020018280548015610e1957602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610dfb575b505050505060808501528154600160401b900460ff1660208501525b8154600160481b900460ff16610ede578254600160481b900460ff1615610ed95782600201805480602002602001604051908101604052809291908181526020018280548015610eae57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610e90575b505050505060a0850152825460ff600160481b820481166040870152600160501b9091041660608501525b610f74565b8154600160481b900460ff90811614610f745781600201805480602002602001604051908101604052809291908181526020018280548015610f4957602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610f2b575b505050505060a0850152815460ff600160481b820481166040870152600160501b9091041660608501525b610f7d846114f0565b50505092915050565b600061058482611895565b610f996114c3565b610fa360006118f0565b565b606060001963ffffffff831601610fe657610fc0838561058a565b604051602001610fd09190613680565b6040516020818303038152906040529050611030565b60011963ffffffff83160161100f57610fff8385610c7a565b604051602001610fd0919061389e565b604051635d4be0fd60e11b815263ffffffff831660048201526024016108fa565b9392505050565b61103f6114c3565b60005b8181101561113e573683838381811061105d5761105d613b69565b606090810292909201925060009161107b9150830160408401613b03565b6001600160a01b0316036110a257604051631074e82d60e11b815260040160405180910390fd5b6110b260408201602083016139e4565b63ffffffff166000036110d8576040516349cfac4360e01b815260040160405180910390fd5b6000808052600460209081528201907f17ef568e3e12ab5b9c7254a8d58478811de00f9e6eb34345acd53bf8fd09d3ec9061111383856139e4565b63ffffffff168152602081019190915260400160002061113382826140e8565b505050600101611042565b507f2b001e1c6683bf79cc52891bd7215b204c787d18134fc7f3d21b4f32a49e47de8282604051610a9e929190614141565b6111786114c3565b6002548111156111a95760025460405163068109f760e31b81526108fa918391600401918252602082015260400190565b60028190556040518181527f491ff913b5444f4136b0d4075f020cfe3a5f60de926ec0b091612401a22b7842906020015b60405180910390a150565b604080518082019091526000808252602082015260008061123661120f6060890160408a01613b03565b61121f60808a0160608b016139e4565b61122c60c08b018b613b9f565b9050878a8a611940565b604080518082019091529182526020820152925050505b949350505050565b61125d6114c3565b61126681611a39565b50565b6112716114c3565b6001600160a01b03811661129b57604051631e4fbdf760e01b8152600060048201526024016108fa565b611266816118f0565b6112ad81611a87565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e1758bd86040518163ffffffff1660e01b8152600401602060405180830381865afa15801561130d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113319190613b4c565b905061133e818484611ad8565b604080513381526001600160a01b03851660208201529081018390527f820b7fd51bf79c54350bab98400651b3314ff6e79b33528821871d94a666988390606001610790565b6001600160a01b0382166113ab576040516306b7a93160e41b815260040160405180910390fd5b6113bf6001600160a01b0384168383611afb565b505050565b6113cd81611895565b61126657604051633c30434160e21b815263ffffffff821660048201526024016108fa565b6001600160a01b03808316600090815260046020908152604080832063ffffffff8089168552908352928190208551815493870151909516640100000000026001600160c01b03199093169490931693909317179055517f779cb2dd9d2bb1be1737d05435d744facbfb84a2a4912e21379d39beddcdc80590610790908490869085906141c1565b611485828483611528565b61148f8284610c7a565b507f82118522aa536ac0e96cc5c689407ae42b89d592aa133890a01f1509842f508182848360405161079093929190614203565b6000546001600160a01b03163314610fa35760405163118cdaa760e01b81523360048201526024016108fa565b602081015160ff1615801561150a5750606081015160ff16155b156112665760405163ce2c375160e01b815260040160405180910390fd5b602081015160ff90811614806115435750602081015160ff16155b15611571576080810151511561156c576040516341d50bed60e11b815260040160405180910390fd5b6115d7565b806020015160ff168160800151511415806115ac57506002611595600160ff614249565b61159f9190614262565b60ff16816020015160ff16115b156115ca576040516341d50bed60e11b815260040160405180910390fd5b6115d78160800151611b4d565b604081015160ff90811614806115f25750604081015160ff16155b156116465760a0810151511561161b5760405163211089b360e11b815260040160405180910390fd5b606081015160ff1615611641576040516338682fa960e01b815260040160405180910390fd5b6116eb565b806040015160ff168160a00151511415806116815750600261166a600160ff614249565b6116749190614262565b60ff16816040015160ff16115b1561169f5760405163211089b360e11b815260040160405180910390fd5b606081015160ff1615806116c05750806040015160ff16816060015160ff16115b156116de576040516338682fa960e01b815260040160405180910390fd5b6116eb8160a00151611b4d565b6001600160a01b038316600090815260016020818152604080842063ffffffff8716855282529283902084518154868401519587015160608801516001600160401b0390931668ffffffffffffffffff1990921691909117600160401b60ff97881602176affff0000000000000000001916600160481b9187169190910260ff60501b191617600160501b95909116949094029390931783556080840151805185949361179d9390850192019061356a565b5060a082015180516117b991600284019160209091019061356a565b505050505050565b604080518082019091526000808252602082015260607f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633146118205760405163467409c360e01b815260040160405180910390fd5b60008061182e888888611bb4565b909250905060008061186061184960608c0160408d01613b03565b61185960808d0160608e016139e4565b858a611c81565b909250905061186f8284614292565b604080518082019091529081526020810191909152945091925050505b94509492505050565b63ffffffff811660009081527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49602052604081208054600160401b900460ff16151580611030575054600160501b900460ff16151592915050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000806000806119508686611d8f565b9150915060006119618b8b84611da8565b9050600061196f8c8c61058a565b90506119858a826000015163ffffffff16611db5565b80602001516001600160a01b031663709eb6648c8e8d886040518563ffffffff1660e01b81526004016119bb94939291906142a5565b602060405180830381865afa1580156119d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119fc91906142e2565b611a069083614292565b9150600080611a178e8e868e611de4565b9092509050611a268285614292565b9e909d509b505050505050505050505050565b600380546001600160a01b0319166001600160a01b0383169081179091556040519081527f3c864541ef71378c6229510ed90f376565ee42d9c5e0904a984a9e863e6db44f906020016111da565b3360009081526005602052604090205480821115611ac25760405163068109f760e31b815260048101839052602481018290526044016108fa565b3360009081526005602052604090209190039055565b6001600160a01b038316611af0576113bf8282611eb5565b6113bf838383611384565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526113bf908490611f62565b6000805b82518110156113bf576000838281518110611b6e57611b6e613b69565b60200260200101519050826001600160a01b0316816001600160a01b031611611baa5760405163447516e160e01b815260040160405180910390fd5b9150600101611b51565b60606000806000611bc58686611d8f565b90925090506000611bef611bdf60608a0160408b01613b03565b6101e360808b0160608c016139e4565b90506000611c0060c08a018a613b9f565b90509050611c1881836000015163ffffffff16611db5565b6020820151611c4890611c3160808c0160608d016139e4565b611c4160608d0160408e01613b03565b8488611fd3565b611c529086614292565b9450600080611c618b866120cc565b9092509050611c708288614292565b909b909a5098505050505050505050565b60035460009081906001600160a01b03161561188c576040516001600160a01b038716602482015263ffffffff8616604482015260648101859052831515608482015260009060a40160408051601f19818403018152919052602080820180516001600160e01b0316636a8e2a4360e11b1790526003549192506000918291611d38916001600160a01b0316907f0000000000000000000000000000000000000000000000000000000000000000908490876120ef565b91509150611d488787848461219f565b90955093508415611d83576003546001600160a01b031660009081526005602052604081208054879290611d7d908490614292565b90915550505b50505094509492505050565b606080611d9c848461221a565b915091505b9250929050565b600061124d848484612307565b80821115611de057604051636333d79f60e11b815260048101839052602481018290526044016108fa565b5050565b60035460009081906001600160a01b03161561188c576040516001600160a01b038716602482015263ffffffff8616604482015260648101859052831515608482015260009060a40160408051601f19818403018152919052602080820180516001600160e01b031663d424422160e01b1790526003549192506000918291611e99916001600160a01b0316907f00000000000000000000000000000000000000000000000000000000000000009086612381565b91509150611ea98787848461219f565b9450945050505061188c565b6001600160a01b038216611edc576040516306b7a93160e41b815260040160405180910390fd5b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611f29576040519150601f19603f3d011682016040523d82523d6000602084013e611f2e565b606091505b50509050806113bf57604051631196f20d60e21b81526001600160a01b0384166004820152602481018390526044016108fa565b600080602060008451602086016000885af180611f85576040513d6000823e3d81fd5b50506000513d91508115611f9d578060011415611faa565b6001600160a01b0384163b155b1561090c57604051635274afe760e01b81526001600160a01b03851660048201526024016108fa565b6040516338bf452160e11b81526000906001600160a01b0387169063717e8a42906120089088908890889088906004016142a5565b6020604051808303816000875af1158015612027573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061204b91906142e2565b90508015612081576001600160a01b0386166000908152600560205260408120805483929061207b908490614292565b90915550505b604080516001600160a01b0388168152602081018390527f61ed099e74a97a1d7f8bb0952a88ca8b7b8ebd00c126ea04671f92a81213318a910160405180910390a195945050505050565b600060606120e460056120de8661436a565b8561242d565b909590945092505050565b60006060863b80830361211657604080516000808252602082019092529250925050612195565b60008060008761ffff166001600160401b0381111561213757612137613be5565b6040519080825280601f01601f191660200182016040528015612161576020820181803683370190505b509050600080885160208a018c8f8ff191503d925087831115612182578792505b828152826000602083013e909450925050505b9550959350505050565b6000808315806121b0575082516020115b156121c05750600090508061188c565b6000838060200190518101906121d691906142e2565b905085156121e657809150612210565b600060025488116121f9576002546121fb565b875b905080821161220a578161220c565b805b9350505b5094509492505050565b60608060008061222a868661257b565b91509150805160000361228257604080516000808252602082019092528391612276565b60408051808201909152600081526060602082015281526020019060019003908161224e5790505b50935093505050611da1565b604080516001808252818301909252600091816020015b6040805180820190915260008152606060208201528152602001906001900390816122995790505090506040518060400160405280600260ff16815260200183815250816000815181106122ef576122ef613b69565b60209081029190910101529196919550909350505050565b6000806123148585610c7a565b905060008351600014612345578360008151811061233457612334613b69565b602002602001015160200151612356565b604051806020016040528060008152505b90506000806123648361273a565b9150915061237584888a85856129a0565b98975050505050505050565b60006060853b8083036123a85760408051600080825260208201909252925092505061188c565b60008060008761ffff166001600160401b038111156123c9576123c9613be5565b6040519080825280601f01601f1916602001820160405280156123f3576020820181803683370190505b509050600080885160208a018d8dfa91503d925087831115612413578792505b828152826000602083013e90999098509650505050505050565b60006060600061243c85612b38565b9050600061244986612bc5565b80516020820120606088015160408901519293509091600061246b8284610c7a565b90506000895160001461249c578960008151811061248b5761248b613b69565b6020026020010151602001516124ad565b604051806020016040528060008152505b905060606124ff8d846040518060a001604052808963ffffffff1681526020018c81526020018a815260200187600001516001600160401b03168152602001886001600160a01b031681525085612be2565b604051919b5091506125179089908990602001614407565b60405160208183030381529060405298507f07ea52d82345d6e838192107d8fd7123d9c2ec8e916cd0aad13fd2b60db2464483608001518460a001518360405161256393929190614436565b60405180910390a15050505050505050935093915050565b60608060028310156125a35760405163196499c760e21b8152600060048201526024016108fa565b60006125b26002828688614494565b6125bb916144be565b60f01c905060026002198201612723578060005b868310156126c85760006125e860018501858a8c614494565b6125f1916144ee565b60f81c9050600081900361261b57604051636780cfaf60e01b8152600060048201526024016108fa565b8160ff1660000361262e5780915061266b565b8160ff168160ff161461266b5736600061264a86868c8e614494565b9150915061265b8989868585612e80565b9099509750859450919250829150505b600184019360009061268290600301868b8d614494565b61268b916144be565b60f01c905060008190036126b55760405163196499c760e21b8152600481018690526024016108fa565b8060020161ffff168501945050506125cf565b8287146126eb5760405163196499c760e21b8152600481018490526024016108fa565b600287111561271c5736600061270385858b8d614494565b915091506127148888858585612e80565b909850965050505b5050612731565b61272e828787612fa0565b93505b50509250929050565b606080825160000361274b57915091565b60006127568461312b565b90508060ff166001036128085760408051600180825281830190925290816020015b606081526020019060019003908161277857905050925083836000815181106127a3576127a3613b69565b6020908102919091010152604080516001808252818301909252908160200160208202803683370190505091506127db846003613205565b826000815181106127ee576127ee613b69565b602002602001019060ff16908160ff168152505050915091565b8060ff166001600160401b0381111561282357612823613be5565b60405190808252806020026020018201604052801561284c578160200160208202803683370190505b5091508060ff166001600160401b0381111561286a5761286a613be5565b60405190808252806020026020018201604052801561289d57816020015b60608152602001906001900390816128885790505b50925060008060ff5b86518310156129335760019092019160006128c18885613261565b60029490940193905060006128d68986613205565b90508260ff1660ff036128eb57809250612924565b8260ff168160ff16146129245760021984860301600061290c8b87846132be565b905061291a8a8a87846133cb565b5093909301929150815b5061ffff1692909201916128a6565b81830360006129438985846132be565b9050612951888885846133cb565b60005b8660ff168160ff16101561299457878160ff168151811061297757612977613b69565b6020908102919091010180516000190160ff169052600101612954565b50505050505050915091565b600080866040015187602001516129b7919061451c565b905060005b8160ff168160ff161015612b2d576000886020015160ff168260ff1610612a115760a089015160208a01516129f19084614249565b60ff1681518110612a0457612a04613b69565b6020026020010151612a33565b88608001518260ff1681518110612a2a57612a2a613b69565b60200260200101515b60408051602081019091526000808252919250905b8651811015612aa0578360ff16878281518110612a6757612a67613b69565b602002602001015160ff1603612a9857878181518110612a8957612a89613b69565b60200260200101519150612aa0565b600101612a48565b508951604051630c2eceab60e21b81526001600160a01b038416916330bb3aac91612ad3918d918d908790600401614535565b602060405180830381865afa158015612af0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b1491906142e2565b612b1e9086614292565b945050508060010190506129bc565b505095945050505050565b805160208083015160408085015160608087015160808801519351600160f81b9681019690965260c09690961b6001600160c01b031916602186015260e093841b6001600160e01b031990811660298701526001600160a01b03909216602d8601529490921b909116604d83015260518201526071015b6040516020818303038152906040529050919050565b60608160a001518260c00151604051602001612baf929190614574565b60006060600080612bf28561273a565b91509150600087604001518860200151612c0c919061451c565b90508060ff166001600160401b03811115612c2957612c29613be5565b604051908082528060200260200182016040528015612c52578160200160208202803683370190505b50935060005b8160ff168160ff161015610c6d576000896020015160ff168260ff1610612cad5760a08a015160208b0151612c8d9084614249565b60ff1681518110612ca057612ca0613b69565b6020026020010151612ccf565b89608001518260ff1681518110612cc657612cc6613b69565b60200260200101515b60408051602081019091526000808252919250905b8551811015612d3c578360ff16868281518110612d0357612d03613b69565b602002602001015160ff1603612d3457868181518110612d2557612d25613b69565b60200260200101519150612d3c565b600101612ce4565b506040516395d376d760e01b81526001600160a01b038316906395d376d790612d6b908d90859060040161459a565b6020604051808303816000875af1158015612d8a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dae91906142e2565b878460ff1681518110612dc357612dc3613b69565b6020026020010181815250506000878460ff1681518110612de657612de6613b69565b60200260200101511115612e7657868360ff1681518110612e0957612e09613b69565b60200260200101518c6000846001600160a01b03166001600160a01b031681526020019081526020016000206000828254612e449190614292565b92505081905550868360ff1681518110612e6057612e60613b69565b602002602001015188612e739190614292565b97505b5050600101612c58565b60608060001960ff861601612efd57865115612ebf57868484604051602001612eab9392919061460c565b604051602081830303815290604052612ef6565b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050505b9650612f95565b60011960ff861601612f7757855115612f3957858484604051602001612f259392919061460c565b604051602081830303815290604052612f70565b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050505b9550612f95565b604051636780cfaf60e01b815260ff861660048201526024016108fa565b509495939450505050565b606060001961ffff8516016130405760228214612fd0576040516301b8ca5560e31b815260040160405180910390fd5b6000612ff1612fe3602260028688614494565b612fec91614634565b6134e1565b604051600160f81b60208201819052601160f01b602183015260238201526001600160801b0319608083901b166024820152909150603401604051602081830303815290604052915050611030565b60011961ffff85160161310c5760428211158061305d5750606282115b1561307b576040516360493e2b60e11b815260040160405180910390fd5b600061308e612fe3602260028688614494565b905060006130a3612fe3604260228789614494565b9050600060411985016130b9866042818a614494565b6130c291614634565b60405160086020938403029190911c92506130f3916001916011918391889183916031916002918b918b9101614652565b6040516020818303038152906040529350505050611030565b604051630417051360e41b815261ffff851660048201526024016108fa565b600080805b83518210156131da57600190910190600061314b8584613261565b905060028301925060028161ffff16101561317c5760405163013adb8360e21b8152600481018490526024016108fa565b60006131888685613205565b90508060ff1660ff036131ae576040516334f4f66f60e21b815260040160405180910390fd5b600160ff82161b83166131cb5760019485019460ff82161b831792505b5061ffff169190910190613130565b835182146131fe5760405163013adb8360e21b8152600481018390526024016108fa565b5050919050565b6000613212826001614292565b835110156132585760405162461bcd60e51b8152602060048201526013602482015272746f55696e74385f6f75744f66426f756e647360681b60448201526064016108fa565b50016001015190565b600061326e826002614292565b835110156132b55760405162461bcd60e51b8152602060048201526014602482015273746f55696e7431365f6f75744f66426f756e647360601b60448201526064016108fa565b50016002015190565b6060816132cc81601f614292565b101561330b5760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b60448201526064016108fa565b6133158284614292565b845110156133595760405162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b60448201526064016108fa565b60608215801561337857604051915060008252602082016040526133c2565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156133b1578051835260209283019201613399565b5050858452601f01601f1916604052505b50949350505050565b8160ff1660ff036133ef576040516334f4f66f60e21b815260040160405180910390fd5b60006133fc83600161451c565b905060005b84518110156117b957600085828151811061341e5761341e613b69565b602002602001015190508060ff168360ff16036134935786828151811061344757613447613b69565b602002602001015184604051602001613461929190614407565b60405160208183030381529060405287838151811061348257613482613b69565b6020026020010181905250506117b9565b8060ff166000036134d857828683815181106134b1576134b1613b69565b602002602001019060ff16908160ff16815250508387838151811061348257613482613b69565b50600101613401565b60006fffffffffffffffffffffffffffffffff82111561351e576040516306dfcc6560e41b815260806004820152602481018390526044016108fa565b5090565b6040518060c0016040528060006001600160401b03168152602001600060ff168152602001600060ff168152602001600060ff16815260200160608152602001606081525090565b8280548282559060005260206000209081019282156135bf579160200282015b828111156135bf57825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019061358a565b5061351e9291505b8082111561351e57600081556001016135c7565b6000602082840312156135ed57600080fd5b81356001600160e01b03198116811461103057600080fd5b6001600160a01b038116811461126657600080fd5b803561362581613605565b919050565b63ffffffff8116811461126657600080fd5b80356136258161362a565b6000806040838503121561365a57600080fd5b823561366581613605565b915060208301356136758161362a565b809150509250929050565b815163ffffffff1681526020808301516001600160a01b03169082015260408101610584565b60208101600383106136c857634e487b7160e01b600052602160045260246000fd5b91905290565b6000806000606084860312156136e357600080fd5b83356136ee81613605565b925060208401356136fe81613605565b929592945050506040919091013590565b60008083601f84011261372157600080fd5b5081356001600160401b0381111561373857600080fd5b6020830191508360208260051b8501011115611da157600080fd5b60008060006040848603121561376857600080fd5b833561377381613605565b925060208401356001600160401b0381111561378e57600080fd5b61379a8682870161370f565b9497909650939450505050565b600080602083850312156137ba57600080fd5b82356001600160401b038111156137d057600080fd5b6137dc8582860161370f565b90969095509350505050565b60008151808452602080850194506020840160005b838110156138225781516001600160a01b0316875295820195908201906001016137fd565b509495945050505050565b6001600160401b03815116825260ff602082015116602083015260ff604082015116604083015260ff60608201511660608301526000608082015160c0608085015261387c60c08501826137e8565b905060a083015184820360a086015261389582826137e8565b95945050505050565b602081526000611030602083018461382d565b8035801515811461362557600080fd5b600080600080606085870312156138d757600080fd5b84356001600160401b03808211156138ee57600080fd5b9086019060e0828903121561390257600080fd5b9094506020860135908082111561391857600080fd5b818701915087601f83011261392c57600080fd5b81358181111561393b57600080fd5b88602082850101111561394d57600080fd5b602083019550809450505050613965604086016138b1565b905092959194509250565b60005b8381101561398b578181015183820152602001613973565b50506000910152565b600081518084526139ac816020860160208601613970565b601f01601f19169290920160200192915050565b825181526020808401519082015260606040820152600061124d6060830184613994565b6000602082840312156139f657600080fd5b81356110308161362a565b600080600060608486031215613a1657600080fd5b8335613a218161362a565b92506020840135613a3181613605565b91506040840135613a418161362a565b809150509250925092565b6020815260006110306020830184613994565b60008060208385031215613a7257600080fd5b82356001600160401b0380821115613a8957600080fd5b818501915085601f830112613a9d57600080fd5b813581811115613aac57600080fd5b866020606083028501011115613ac157600080fd5b60209290920196919550909350505050565b600060208284031215613ae557600080fd5b5035919050565b815181526020808301519082015260408101610584565b600060208284031215613b1557600080fd5b813561103081613605565b60008060408385031215613b3357600080fd5b8235613b3e81613605565b946020939093013593505050565b600060208284031215613b5e57600080fd5b815161103081613605565b634e487b7160e01b600052603260045260246000fd5b60008235605e19833603018112613b9557600080fd5b9190910192915050565b6000808335601e19843603018112613bb657600080fd5b8301803591506001600160401b03821115613bd057600080fd5b602001915036819003821315611da157600080fd5b634e487b7160e01b600052604160045260246000fd5b60405160c081016001600160401b0381118282101715613c1d57613c1d613be5565b60405290565b60405160e081016001600160401b0381118282101715613c1d57613c1d613be5565b604051601f8201601f191681016001600160401b0381118282101715613c6d57613c6d613be5565b604052919050565b600060408284031215613c8757600080fd5b604051604081018181106001600160401b0382111715613ca957613ca9613be5565b6040528235613cb78161362a565b81526020830135613cc781613605565b60208201529392505050565b80356001600160401b038116811461362557600080fd5b803560ff8116811461362557600080fd5b600082601f830112613d0c57600080fd5b813560206001600160401b03821115613d2757613d27613be5565b8160051b613d36828201613c45565b9283528481018201928281019087851115613d5057600080fd5b83870192505b84831015613d78578235613d6981613605565b82529183019190830190613d56565b979650505050505050565b600060c08284031215613d9557600080fd5b613d9d613bfb565b9050613da882613cd3565b8152613db660208301613cea565b6020820152613dc760408301613cea565b6040820152613dd860608301613cea565b606082015260808201356001600160401b0380821115613df757600080fd5b613e0385838601613cfb565b608084015260a0840135915080821115613e1c57600080fd5b50613e2984828501613cfb565b60a08301525092915050565b600060208284031215613e4757600080fd5b81356001600160401b03811115613e5d57600080fd5b61124d84828501613d83565b60008235603e19833603018112613b9557600080fd5b6000823560be19833603018112613b9557600080fd5b600060208284031215613ea757600080fd5b61103082613cea565b600060208284031215613ec257600080fd5b61103082613cd3565b60006105843683613d83565b6000808335601e19843603018112613eee57600080fd5b83016020810192503590506001600160401b03811115613f0d57600080fd5b8060051b3603821315611da157600080fd5b8183526000602080850194508260005b85811015613822578135613f4281613605565b6001600160a01b031687529582019590820190600101613f2f565b60208082528181018390526000906040808401600586901b8501820187855b8881101561409457603f19808985030185528235603e198c3603018112613fa257600080fd5b8b018035613faf8161362a565b63ffffffff168552808801353682900360be19018112613fce57600080fd5b858901889052016001600160401b03613fe682613cd3565b1687860152613ff6888201613cea565b606060ff8083168289015261400c8a8501613cea565b92506080818416818a0152614022838601613cea565b935060a09250818416838a015261403b81860186613ed7565b60c08b81015294509150614056905061010089018483613f1f565b92505061406581840184613ed7565b93509050838783030160e088015261407e828483613f1f565b978a019796505050928701925050600101613f7c565b509098975050505050505050565b6040815260006140b56040830186613994565b8281036020840152838152838560208301376000602085830101526020601f19601f860116820101915050949350505050565b81356140f38161362a565b63ffffffff8116905081548163ffffffff198216178355602084013561411881613605565b6001600160c01b03199190911690911760209190911b640100000000600160c01b031617905550565b6020808252818101839052600090604080840186845b878110156141b457813561416a8161362a565b63ffffffff908116845282860135906141828261362a565b16838601528184013561419481613605565b6001600160a01b0316838501526060928301929190910190600101614157565b5090979650505050505050565b6001600160a01b038416815263ffffffff831660208201526080810161124d6040830184805163ffffffff1682526020908101516001600160a01b0316910152565b6001600160a01b038416815263ffffffff831660208201526060604082018190526000906138959083018461382d565b634e487b7160e01b600052601160045260246000fd5b60ff828116828216039081111561058457610584614233565b600060ff83168061428357634e487b7160e01b600052601260045260246000fd5b8060ff84160491505092915050565b8082018082111561058457610584614233565b63ffffffff8516815260018060a01b03841660208201528260408201526080606082015260006142d86080830184613994565b9695505050505050565b6000602082840312156142f457600080fd5b5051919050565b600082601f83011261430c57600080fd5b81356001600160401b0381111561432557614325613be5565b614338601f8201601f1916602001613c45565b81815284602083860101111561434d57600080fd5b816020850160208301376000918101602001919091529392505050565b600060e0823603121561437c57600080fd5b614384613c23565b61438d83613cd3565b815261439b6020840161363c565b60208201526143ac6040840161361a565b60408201526143bd6060840161363c565b60608201526080830135608082015260a083013560a082015260c08301356001600160401b038111156143ef57600080fd5b6143fb368286016142fb565b60c08301525092915050565b60008351614419818460208801613970565b83519083019061442d818360208801613970565b01949350505050565b60608152600061444960608301866137e8565b6020838203602085015261445d82876137e8565b84810360408601528551808252602080880194509091019060005b8181101561409457845183529383019391830191600101614478565b600080858511156144a457600080fd5b838611156144b157600080fd5b5050820193919092039150565b6001600160f01b031981358181169160028510156144e65780818660020360031b1b83161692505b505092915050565b6001600160f81b031981358181169160018510156144e65760019490940360031b84901b1690921692915050565b60ff818116838216019081111561058457610584614233565b63ffffffff851681526001600160401b03841660208201526001600160a01b03831660408201526080606082018190526000906142d890830184613994565b8281526000825161458c816020850160208701613970565b919091016020019392505050565b6040815263ffffffff83511660408201526000602084015160a060608401526145c660e0840182613994565b604086015160808581019190915260608701516001600160401b031660a08601528601516001600160a01b031660c0850152838103602085015290506138958185613994565b6000845161461e818460208901613970565b8201838582376000930192835250909392505050565b8035602083101561058457600019602084900360031b1b1692915050565b60f88a811b6001600160f81b0319908116835260f08b811b6001600160f01b031990811660018601528b841b8316600386015260808b901b6001600160801b031916600486015289841b831660148601529088901b1660158401529085901b16601782015260006146d2601883018560801b6001600160801b0319169052565b5060288101919091526048019897505050505050505056fea2646970667358221220d9784bfc6a1a26f66ca9108192fade74e4e3799cd23fe6424871d62320841a2464736f6c6343000816003360c06040523480156200001157600080fd5b50604051620024413803806200244183398101604081905262000034916200013e565b8080816001600160a01b031663416ecebf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000075573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200009b919062000170565b3380620000c257604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b620000cd81620000ee565b506001600160a01b0390911660805263ffffffff1660a05250620001989050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156200015157600080fd5b81516001600160a01b03811681146200016957600080fd5b9392505050565b6000602082840312156200018357600080fd5b815163ffffffff811681146200016957600080fd5b60805160a05161227c620001c5600039600061031e01526000818161041b0152610484015261227c6000f3fe608060405234801561001057600080fd5b506004361061010b5760003560e01c806343ea4fa9116100a25780638da5cb5b116100715780638da5cb5b146102665780639c33abf714610281578063c40ff835146102a1578063e084d952146102b4578063f2fde38b146102c757600080fd5b806343ea4fa91461021857806354fd4d501461022b5780636750cd4c1461024b578063715018a61461025e57600080fd5b806320efd722116100de57806320efd7221461016f57806329460b0b1461018257806339e3f938146101955780633c782a52146101b557600080fd5b806301ffc9a7146101105780630223536e146101385780630894edf11461014d5780631881d94d14610160575b600080fd5b61012361011e3660046116ed565b6102da565b60405190151581526020015b60405180910390f35b61014b61014636600461177b565b610305565b005b61014b61015b3660046117d7565b610317565b600160405161012f9190611822565b61014b61017d3660046118a5565b610482565b61014b6101903660046118f7565b6105a4565b6101a86101a336600461194c565b61073c565b60405161012f9190611a35565b6101f96101c3366004611a48565b600260209081526000938452604080852082529284528284209052825290205460ff81169061010090046001600160401b031682565b6040805192151583526001600160401b0390911660208301520161012f565b6101a861022636600461194c565b610877565b60408051600381526000602082015260029181019190915260600161012f565b610123610259366004611a7d565b610b83565b61014b610b8e565b6000546040516001600160a01b03909116815260200161012f565b61029461028f366004611a98565b610ba2565b60405161012f9190611ad2565b61014b6102af366004611b21565b610c0b565b6101236102c2366004611d10565b610c1b565b61014b6102d5366004611d5d565b610c30565b60006001600160e01b03198216630ab7be9f60e01b14806102ff57506102ff82610c6e565b92915050565b61031184848484610ca3565b50505050565b61034283837f0000000000000000000000000000000000000000000000000000000000000000610d89565b600061034e8484610e0c565b9050600061035c8585610e1e565b9050600061036a8383610877565b905061038e818787604051610380929190611d78565b604051809103902086610e41565b600060405180606001604052808463ffffffff1681526020016103b18989610f91565b81526020016103c08989610faa565b6001600160401b039081169091526040805163a825d74760e01b8152835163ffffffff166004820152602084015160248201529083015190911660448201526001600160a01b038681166064830152608482018890529192507f00000000000000000000000000000000000000000000000000000000000000009091169063a825d7479060a401600060405180830381600087803b15801561046157600080fd5b505af1158015610475573d6000803e3d6000fd5b5050505050505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633146104cb5760405163467409c360e01b815260040160405180910390fd5b60005b8181101561031157368383838181106104e9576104e9611d88565b90506020028101906104fb9190611d9e565b905061051261050d6020830183611a7d565b610fcd565b60026105246040830160208401611a7d565b63ffffffff16036105645761055f61053f6020830183611a7d565b8661054d6040850185611dbe565b81019061055a9190611e04565b610ffb565b61059b565b6105746040820160208301611a7d565b604051635d4be0fd60e11b815263ffffffff90911660048201526024015b60405180910390fd5b506001016104ce565b6105ac611051565b60005b818110156106fe57368383838181106105ca576105ca611d88565b90506020028101906105dc9190611e38565b905060ff6105ed6020830183611e4e565b6105fe906040810190602001611e64565b60ff160361061f576040516341d50bed60e11b815260040160405180910390fd5b60ff61062e6020830183611e4e565b61063f906060810190604001611e64565b60ff16036106605760405163211089b360e11b815260040160405180910390fd5b6001600160401b036106756020830183611e4e565b610683906020810190611e7f565b6001600160401b0316036106aa5760405163281b33d760e11b815260040160405180910390fd5b6106c86106ba6020830183611e4e565b6106c390611e9a565b61107e565b6106f560006106da6020840184611a7d565b6106e76020850185611e4e565b6106f090611e9a565b6110b6565b506001016105af565b507faaf3aaa0c11056e86ac56eb653e25b005ca1a7d4dcd21ba24647f7ab63f3b5608282604051610730929190611f2a565b60405180910390a15050565b61074461162b565b6001600160a01b038316600090815260016020818152604080842063ffffffff87168552825292839020835160c08101855281546001600160401b038116825260ff600160401b8204811683860152600160481b8204811683880152600160501b909104166060820152928101805485518185028101850190965280865293949193608086019383018282801561080457602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116107e6575b505050505081526020016002820180548060200260200160405190810160405280929190818152602001828054801561086657602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610848575b505050505081525050905092915050565b61087f61162b565b63ffffffff821660008181527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49602090815260408083206001600160a01b03881684526001835281842094845293909152902080546001600160401b0316806108f45782546001600160401b03168452610911565b6001600160401b0381811614610911576001600160401b03811684525b8154600160401b900460ff166109ab578254600160401b900460ff16156109a6578260010180548060200260200160405190810160405280929190818152602001828054801561098a57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161096c575b505050505060808501528254600160401b900460ff1660208501525b610a32565b8154600160401b900460ff90811614610a325781600101805480602002602001604051908101604052809291908181526020018280548015610a1657602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116109f8575b505050505060808501528154600160401b900460ff1660208501525b8154600160481b900460ff16610adb578254600160481b900460ff1615610ad65782600201805480602002602001604051908101604052809291908181526020018280548015610aab57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610a8d575b505050505060a0850152825460ff600160481b820481166040870152600160501b9091041660608501525b610b71565b8154600160481b900460ff90811614610b715781600201805480602002602001604051908101604052809291908181526020018280548015610b4657602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610b28575b505050505060a0850152815460ff600160481b820481166040870152600160501b9091041660608501525b610b7a8461107e565b50505092915050565b60006102ff8261134f565b610b96611051565b610ba060006113aa565b565b606060011963ffffffff831601610be357610bbd8385610877565b604051602001610bcd9190611a35565b6040516020818303038152906040529050610c04565b604051635d4be0fd60e11b815263ffffffff83166004820152602401610592565b9392505050565b610c16838383610d89565b505050565b6000610c288484846113fa565b949350505050565b610c38611051565b6001600160a01b038116610c6257604051631e4fbdf760e01b815260006004820152602401610592565b610c6b816113aa565b50565b60006001600160e01b031982166325fc096160e21b14806102ff57506301ffc9a760e01b6001600160e01b03198316146102ff565b604080518082018252600181526001600160401b03831660208201529051600290600090610cd49088908890611d78565b604080519182900390912082526020808301939093529081016000908120868252835281812033808352908452908290208451815495909401516001600160401b03166101000268ffffffffffffffff00199415159490941668ffffffffffffffffff19909516949094179290921790925590517f2cb0eed7538baeae4c6fde038c0fd0384d27de0dd55a228c65847bda6aa1ab5691610d7b91879087908690889061206c565b60405180910390a150505050565b60518214610daa5760405163c9bf37b760e01b815260040160405180910390fd5b6001610db68484611503565b60ff1614610dd757604051633a9ae7b960e01b815260040160405180910390fd5b8063ffffffff16610de88484611525565b63ffffffff1614610c165760405163216964bf60e11b815260040160405180910390fd5b6000610c04610e1b8484611535565b90565b6000610e2e600d600984866120c6565b610e37916120f0565b60e01c9392505050565b610e4c8383836113fa565b610e695760405163130c463560e21b815260040160405180910390fd5b602083015160ff1615610efe5760005b836020015160ff168160ff161015610efc57600083815260026020908152604080832085845290915281206080860151805191929160ff8516908110610ec157610ec1611d88565b6020908102919091018101516001600160a01b03168252810191909152604001600020805468ffffffffffffffffff19169055600101610e79565b505b604083015160ff1615610c165760005b836040015160ff168160ff161015610311576000838152600260209081526040808320858452909152812060a0860151805191929160ff8516908110610f5657610f56611d88565b6020908102919091018101516001600160a01b03168252810191909152604001600020805468ffffffffffffffffff19169055600101610f0e565b6000610fa1602d600d84866120c6565b610c0491612120565b6000610fba6009600184866120c6565b610fc39161213e565b60c01c9392505050565b610fd68161134f565b610c6b57604051633c30434160e21b815263ffffffff82166004820152602401610592565b6110068284836110b6565b6110108284610877565b507f82118522aa536ac0e96cc5c689407ae42b89d592aa133890a01f1509842f50818284836040516110449392919061216c565b60405180910390a1505050565b6000546001600160a01b03163314610ba05760405163118cdaa760e01b8152336004820152602401610592565b602081015160ff161580156110985750606081015160ff16155b15610c6b5760405163ce2c375160e01b815260040160405180910390fd5b602081015160ff90811614806110d15750602081015160ff16155b156110ff57608081015151156110fa576040516341d50bed60e11b815260040160405180910390fd5b611165565b806020015160ff1681608001515114158061113a57506002611123600160ff6121b2565b61112d91906121cb565b60ff16816020015160ff16115b15611158576040516341d50bed60e11b815260040160405180910390fd5b6111658160800151611545565b604081015160ff90811614806111805750604081015160ff16155b156111d45760a081015151156111a95760405163211089b360e11b815260040160405180910390fd5b606081015160ff16156111cf576040516338682fa960e01b815260040160405180910390fd5b611279565b806040015160ff168160a001515114158061120f575060026111f8600160ff6121b2565b61120291906121cb565b60ff16816040015160ff16115b1561122d5760405163211089b360e11b815260040160405180910390fd5b606081015160ff16158061124e5750806040015160ff16816060015160ff16115b1561126c576040516338682fa960e01b815260040160405180910390fd5b6112798160a00151611545565b6001600160a01b038316600090815260016020818152604080842063ffffffff8716855282529283902084518154868401519587015160608801516001600160401b0390931668ffffffffffffffffff1990921691909117600160401b60ff97881602176affff0000000000000000001916600160481b9187169190910260ff60501b191617600160501b95909116949094029390931783556080840151805185949361132b93908501920190611673565b5060a08201518051611347916002840191602090910190611673565b505050505050565b63ffffffff811660009081527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49602052604081208054600160401b900460ff16151580610c04575054600160501b900460ff16151592915050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b602083015160009060ff161561147d5760005b846020015160ff168160ff1610156114655761144f85608001518260ff168151811061143b5761143b611d88565b6020026020010151858588600001516115ac565b61145d576000915050610c04565b60010161140d565b50836040015160ff1660000361147d57506001610c04565b606084015160005b856040015160ff168160ff1610156114f7576114c78660a001518260ff16815181106114b3576114b3611d88565b6020026020010151868689600001516115ac565b156114ef57816114d6816121fb565b9250508160ff166000036114ef57600192505050610c04565b600101611485565b50600095945050505050565b600061151260018284866120c6565b61151b91612218565b60f81c9392505050565b6000610e2e6031602d84866120c6565b6000610fa16051603184866120c6565b6000805b8251811015610c1657600083828151811061156657611566611d88565b60200260200101519050826001600160a01b0316816001600160a01b0316116115a25760405163447516e160e01b815260040160405180910390fd5b9150600101611549565b600083815260026020908152604080832085845282528083206001600160a01b0388168452825280832081518083019092525460ff81161580158084526101009092046001600160401b03169383019390935290916116215750826001600160401b031681602001516001600160401b031610155b9695505050505050565b6040518060c0016040528060006001600160401b03168152602001600060ff168152602001600060ff168152602001600060ff16815260200160608152602001606081525090565b8280548282559060005260206000209081019282156116c8579160200282015b828111156116c857825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190611693565b506116d49291506116d8565b5090565b5b808211156116d457600081556001016116d9565b6000602082840312156116ff57600080fd5b81356001600160e01b031981168114610c0457600080fd5b60008083601f84011261172957600080fd5b5081356001600160401b0381111561174057600080fd5b60208301915083602082850101111561175857600080fd5b9250929050565b80356001600160401b038116811461177657600080fd5b919050565b6000806000806060858703121561179157600080fd5b84356001600160401b038111156117a757600080fd5b6117b387828801611717565b909550935050602085013591506117cc6040860161175f565b905092959194509250565b6000806000604084860312156117ec57600080fd5b83356001600160401b0381111561180257600080fd5b61180e86828701611717565b909790965060209590950135949350505050565b602081016003831061184457634e487b7160e01b600052602160045260246000fd5b91905290565b80356001600160a01b038116811461177657600080fd5b60008083601f84011261187357600080fd5b5081356001600160401b0381111561188a57600080fd5b6020830191508360208260051b850101111561175857600080fd5b6000806000604084860312156118ba57600080fd5b6118c38461184a565b925060208401356001600160401b038111156118de57600080fd5b6118ea86828701611861565b9497909650939450505050565b6000806020838503121561190a57600080fd5b82356001600160401b0381111561192057600080fd5b61192c85828601611861565b90969095509350505050565b803563ffffffff8116811461177657600080fd5b6000806040838503121561195f57600080fd5b6119688361184a565b915061197660208401611938565b90509250929050565b60008151808452602080850194506020840160005b838110156119b95781516001600160a01b031687529582019590820190600101611994565b509495945050505050565b6001600160401b03815116825260ff602082015116602083015260ff604082015116604083015260ff60608201511660608301526000608082015160c06080850152611a1360c085018261197f565b905060a083015184820360a0860152611a2c828261197f565b95945050505050565b602081526000610c0460208301846119c4565b600080600060608486031215611a5d57600080fd5b8335925060208401359150611a746040850161184a565b90509250925092565b600060208284031215611a8f57600080fd5b610c0482611938565b600080600060608486031215611aad57600080fd5b611ab684611938565b9250611ac46020850161184a565b9150611a7460408501611938565b60006020808352835180602085015260005b81811015611b0057858101830151858201604001528201611ae4565b506000604082860101526040601f19601f8301168501019250505092915050565b600080600060408486031215611b3657600080fd5b83356001600160401b03811115611b4c57600080fd5b611b5886828701611717565b9094509250611a74905060208501611938565b634e487b7160e01b600052604160045260246000fd5b60405160c081016001600160401b0381118282101715611ba357611ba3611b6b565b60405290565b803560ff8116811461177657600080fd5b600082601f830112611bcb57600080fd5b813560206001600160401b0380831115611be757611be7611b6b565b8260051b604051601f19603f83011681018181108482111715611c0c57611c0c611b6b565b6040529384526020818701810194908101925087851115611c2c57600080fd5b6020870191505b84821015611c5357611c448261184a565b83529183019190830190611c33565b979650505050505050565b600060c08284031215611c7057600080fd5b611c78611b81565b9050611c838261175f565b8152611c9160208301611ba9565b6020820152611ca260408301611ba9565b6040820152611cb360608301611ba9565b606082015260808201356001600160401b0380821115611cd257600080fd5b611cde85838601611bba565b608084015260a0840135915080821115611cf757600080fd5b50611d0484828501611bba565b60a08301525092915050565b600080600060608486031215611d2557600080fd5b83356001600160401b03811115611d3b57600080fd5b611d4786828701611c5e565b9660208601359650604090950135949350505050565b600060208284031215611d6f57600080fd5b610c048261184a565b8183823760009101908152919050565b634e487b7160e01b600052603260045260246000fd5b60008235605e19833603018112611db457600080fd5b9190910192915050565b6000808335601e19843603018112611dd557600080fd5b8301803591506001600160401b03821115611def57600080fd5b60200191503681900382131561175857600080fd5b600060208284031215611e1657600080fd5b81356001600160401b03811115611e2c57600080fd5b610c2884828501611c5e565b60008235603e19833603018112611db457600080fd5b6000823560be19833603018112611db457600080fd5b600060208284031215611e7657600080fd5b610c0482611ba9565b600060208284031215611e9157600080fd5b610c048261175f565b60006102ff3683611c5e565b6000808335601e19843603018112611ebd57600080fd5b83016020810192503590506001600160401b03811115611edc57600080fd5b8060051b360382131561175857600080fd5b8183526000602080850194508260005b858110156119b9576001600160a01b03611f178361184a565b1687529582019590820190600101611efe565b60208082528181018390526000906040808401600586901b8501820187855b8881101561205e57603f19808985030185528235603e198c3603018112611f6f57600080fd5b8b0163ffffffff611f7f82611938565b1685528781013560be19823603018112611f9857600080fd5b858901889052016001600160401b03611fb08261175f565b1687860152611fc0888201611ba9565b606060ff80831682890152611fd68a8501611ba9565b92506080818416818a0152611fec838601611ba9565b935060a09250818416838a015261200581860186611ea6565b60c08b81015294509150612020905061010089018483611eee565b92505061202f81840184611ea6565b93509050838783030160e0880152612048828483611eee565b978a019796505050928701925050600101611f49565b509098975050505050505050565b6001600160a01b03861681526080602082018190528101849052838560a0830137600060a08583010152600060a0601f19601f87011683010190506001600160401b03841660408301528260608301529695505050505050565b600080858511156120d657600080fd5b838611156120e357600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156121185780818660040360031b1b83161692505b505092915050565b803560208310156102ff57600019602084900360031b1b1692915050565b6001600160c01b031981358181169160088510156121185760089490940360031b84901b1690921692915050565b6001600160a01b038416815263ffffffff83166020820152606060408201819052600090611a2c908301846119c4565b634e487b7160e01b600052601160045260246000fd5b60ff82811682821603908111156102ff576102ff61219c565b600060ff8316806121ec57634e487b7160e01b600052601260045260246000fd5b8060ff84160491505092915050565b600060ff82168061220e5761220e61219c565b6000190192915050565b6001600160f81b031981358181169160018510156121185760019490940360031b84901b169092169291505056fea2646970667358221220f261181fa476bcf41c4bf04e3eda4bd6084e0edf3739fd077cfebd99f1f1561764736f6c6343000816003360e06040523480156200001157600080fd5b5060405162004c0738038062004c07833981016040819052620000349162000176565b82836001600160a01b031663416ecebf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000074573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200009a9190620001c3565b3380620000c157604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b620000cc816200010d565b506001600160a01b0391821660805263ffffffff1660a05260c092909252600655600280546001600160a01b031916939091169290921790915550620001f2565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146200017357600080fd5b50565b600080600080608085870312156200018d57600080fd5b84516200019a816200015d565b6020860151909450620001ad816200015d565b6040860151606090960151949790965092505050565b600060208284031215620001d657600080fd5b815163ffffffff81168114620001eb57600080fd5b9392505050565b60805160a05160c0516149c26200024560003960008181611b52015261262c01526000610be50152600081816106550152818161075a0152818161089801528181610d6d015261176101526149c26000f3fe6080604052600436106101855760003560e01c80637620fd01116100d1578063d15b0d491161008a578063f0f4426011610064578063f0f442601461051e578063f2fde38b1461053e578063faaebd211461055e578063fd9be5221461058b57600080fd5b8063d15b0d49146104b1578063d80e9bd9146104d1578063ea69d69d146104fe57600080fd5b80637620fd01146103b65780638da5cb5b146103f95780638eb0bf30146104175780639c33abf714610444578063ab750e7514610471578063c85f4b4e1461049157600080fd5b806320efd7221161013e57806354fd4d501161011857806354fd4d5014610334578063594924da146103615780636750cd4c14610381578063715018a6146103a157600080fd5b806320efd722146102a85780633c782a52146102c85780634389e58f1461030657600080fd5b806301ffc9a714610191578063052368ca146101c65780630e97289b146101e65780631881d94d1461021e5780631fb512251461023a578063200175f71461028657600080fd5b3661018c57005b600080fd5b34801561019d57600080fd5b506101b16101ac36600461389c565b6105ab565b60405190151581526020015b60405180910390f35b3480156101d257600080fd5b506101b16101e13660046138c6565b6105fd565b3480156101f257600080fd5b50600254610206906001600160a01b031681565b6040516001600160a01b0390911681526020016101bd565b34801561022a57600080fd5b5060026040516101bd919061391e565b34801561024657600080fd5b50610278610255366004613996565b600360209081526000938452604080852082529284528284209052825290205481565b6040519081526020016101bd565b34801561029257600080fd5b506102a66102a13660046139db565b61061e565b005b3480156102b457600080fd5b506102a66102c3366004613a67565b610758565b3480156102d457600080fd5b506102786102e3366004613abb565b600460209081526000938452604080852082529284528284209052825290205481565b34801561031257600080fd5b50610326610321366004613b35565b610880565b6040516101bd929190613c0d565b34801561034057600080fd5b5060408051600a8152600060208201526002918101919091526060016101bd565b34801561036d57600080fd5b506102a661037c366004613c31565b610b95565b34801561038d57600080fd5b506101b161039c366004613c81565b610dd6565b3480156103ad57600080fd5b506102a6610de1565b3480156103c257600080fd5b506103da6007546006546001600160a01b0390911691565b604080516001600160a01b0390931683526020830191909152016101bd565b34801561040557600080fd5b506000546001600160a01b0316610206565b34801561042357600080fd5b50610437610432366004613c9c565b610df5565b6040516101bd9190613d86565b34801561045057600080fd5b5061046461045f366004613d99565b6110ed565b6040516101bd9190613dd5565b34801561047d57600080fd5b506102a661048c366004613c31565b611156565b34801561049d57600080fd5b506102a66104ac366004613de8565b6111e1565b3480156104bd57600080fd5b506102a66104cc366004613e29565b611373565b3480156104dd57600080fd5b506104f16104ec366004613b35565b6113e8565b6040516101bd9190613e42565b34801561050a57600080fd5b50610437610519366004613c9c565b611534565b34801561052a57600080fd5b506102a6610539366004613e59565b61166b565b34801561054a57600080fd5b506102a6610559366004613e59565b6116c1565b34801561056a57600080fd5b50610278610579366004613e59565b60056020526000908152604090205481565b34801561059757600080fd5b506102a66105a6366004613e76565b6116ff565b60006001600160e01b031982166325fc096160e21b14806105dc57506001600160e01b0319821663b6e9ace360e01b145b806105f757506301ffc9a760e01b6001600160e01b03198316145b92915050565b600061061361060b8661407d565b858585611827565b90505b949350505050565b6007546001600160a01b0316331461064957604051634b41868f60e11b815260040160405180910390fd5b826001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e1758bd86040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106d59190614089565b6001600160a01b0316036106fc57604051632ddfd41160e21b815260040160405180910390fd5b610707838383611983565b604080516001600160a01b038086168252841660208201529081018290527fe081464b7278501267de69fa85b7b9560b0ae05d5fbfaab9b1986c70356e2efe906060015b60405180910390a1505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633146107a15760405163467409c360e01b815260040160405180910390fd5b60005b8181101561087a57368383838181106107bf576107bf6140a6565b90506020028101906107d191906140bc565b90506107e86107e36020830183613c81565b6119c3565b60016107fa6040830160208401613c81565b63ffffffff160361083a576108356108156020830183613c81565b8661082360408501856140dc565b8101906108309190614122565b6119f1565b610871565b61084a6040820160208301613c81565b60405163065c274160e11b815263ffffffff90911660048201526024015b60405180910390fd5b506001016107a4565b50505050565b604080518082019091526000808252602082015260607f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633146108df5760405163467409c360e01b815260040160405180910390fd5b60808601356109036108f76060890160408a01613e59565b6001600160a01b031690565b146109215760405163a4884a5960e01b815260040160405180910390fd5b60008061092f888888611a3a565b909250905060008061096161094a60608c0160408d01613e59565b61095a60808d0160608e01613c81565b858a611ac3565b9092509050610970828461416c565b925061097f60c08b018b6140dc565b60405161098d92919061417f565b6040518091039020600360008c60400160208101906109ac9190613e59565b6001600160a01b0316815260208101919091526040016000908120906109d860808e0160608f01613c81565b63ffffffff1681526020808201929092526040016000908120916109fe908e018e61418f565b6001600160401b03166001600160401b03168152602001908152602001600020819055506000610b0c6040518060e001604052808d6000016020810190610a45919061418f565b6001600160401b031681526020018d6060016020810190610a669190613c81565b63ffffffff1681526020018d6040016020810190610a849190613e59565b6001600160a01b031681526020018d6020016020810190610aa59190613c81565b63ffffffff16815260808e0135602082015260a08e01356040820152606001610ad160c08f018f6140dc565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050915250611bd1565b600254604051631f5dad8b60e31b81529192506001600160a01b03169063faed6c5890610b419084908e908e906004016141d3565b600060405180830381600087803b158015610b5b57600080fd5b505af1158015610b6f573d6000803e3d6000fd5b505060408051808201909152958652505050602083015250925090505b94509492505050565b60518314610bb65760405163864d08b360e01b815260040160405180910390fd5b6001610bc28585611c29565b60ff1614610be357604051637952a82f60e01b815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000063ffffffff16610c148585611c4b565b63ffffffff1614610c3857604051631f4b6f8b60e11b815260040160405180910390fd5b6000610c448585611c6e565b90506000610c528686611c80565b90506000610c608787611c90565b6001600160a01b038416600090815260036020908152604080832063ffffffff8716845282528083206001600160401b03851684529091529020549091508514610cbd576040516333074b7760e11b815260040160405180910390fd5b6000610cc98484610df5565b9050610cee818989604051610cdf92919061417f565b60405180910390208888611cb3565b600060405180606001604052808563ffffffff168152602001610d118b8b611e03565b81526001600160401b038581166020928301526040805163a825d74760e01b8152845163ffffffff1660048201529284015160248401528301511660448201526001600160a01b038781166064830152608482018990529192507f00000000000000000000000000000000000000000000000000000000000000009091169063a825d7479060a401600060405180830381600087803b158015610db357600080fd5b505af1158015610dc7573d6000803e3d6000fd5b50505050505050505050505050565b60006105f782611e1c565b610de9611e77565b610df36000611ea4565b565b610dfd6137e3565b63ffffffff821660008181527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49602090815260408083206001600160a01b03888116855260018452828520958552949092529091208054919290911680610e6e5782546001600160a01b0316610e70565b805b6001600160a01b031684528154600160a01b900460ff16610f15578254600160a01b900460ff1615610f105782600101805480602002602001604051908101604052809291908181526020018280548015610ef457602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610ed6575b505050505060808501528254600160a01b900460ff1660208501525b610f9c565b8154600160a01b900460ff90811614610f9c5781600101805480602002602001604051908101604052809291908181526020018280548015610f8057602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610f62575b505050505060808501528154600160a01b900460ff1660208501525b8154600160a81b900460ff16611045578254600160a81b900460ff1615611040578260020180548060200260200160405190810160405280929190818152602001828054801561101557602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610ff7575b505050505060a0850152825460ff600160a81b820481166040870152600160b01b9091041660608501525b6110db565b8154600160a81b900460ff908116146110db57816002018054806020026020016040519081016040528092919081815260200182805480156110b057602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611092575b505050505060a0850152815460ff600160a81b820481166040870152600160b01b9091041660608501525b6110e484611ef4565b50505092915050565b606060001963ffffffff83160161112e576111088385610df5565b6040516020016111189190613d86565b604051602081830303815290604052905061114f565b60405163065c274160e11b815263ffffffff83166004820152602401610868565b9392505050565b8060046000868660405161116b92919061417f565b60408051918290039091208252602080830193909352908101600090812086825283528181203380835293528190209290925590517f04708e5dfef6005d6d646eb761e3b9e412e1cc5749fc9d884bca441cc7a95258916111d3918790879087908790614203565b60405180910390a150505050565b6111e9611e77565b60005b818110156113355736838383818110611207576112076140a6565b9050602002810190611219919061423c565b905060ff61122a6020830183614252565b61123b906040810190602001614268565b60ff160361125c57604051632ad00e0160e11b815260040160405180910390fd5b60ff61126b6020830183614252565b61127c906060810190604001614268565b60ff160361129d576040516371aa1b6360e11b815260040160405180910390fd5b6112bb6112ad6020830183614252565b6112b69061407d565b611ef4565b60006112ca6020830183614252565b6112d8906020810190613e59565b6001600160a01b0316036112ff57604051633b6faad360e11b815260040160405180910390fd5b61132c60006113116020840184613c81565b61131e6020850185614252565b6113279061407d565b611f2c565b506001016111ec565b507f65edb7dc0f21ba15c998f8bd220ea9fec30757ff9fb07696c634bcce00ce6f348282604051611367929190614309565b60405180910390a15050565b61137b611e77565b6006548111156113ac5760065460405163b79d126360e01b8152610868918391600401918252602082015260400190565b60068190556040518181527f491ff913b5444f4136b0d4075f020cfe3a5f60de926ec0b091612401a22b7842906020015b60405180910390a150565b604080518082019091526000808252602082015260008061140986866121b5565b909250905060006114206060890160408a01613e59565b9050600061143460808a0160608b01613c81565b905060006114428383610df5565b90506000611472828561145c6114578f6144bc565b612374565b8e8060c0019061146c91906140dc565b8a6123ef565b825160405163c8f8dcd160e01b81529192506001600160a01b03169063c8f8dcd1906114a49087908a90600401614559565b602060405180830381865afa1580156114c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114e5919061457d565b6114ef908261416c565b90506000806115008686858d61259d565b909250905061150f828461416c565b6040805180820190915290815260208101919091529c9b505050505050505050505050565b61153c6137e3565b6001600160a01b03808416600090815260016020818152604080842063ffffffff88168552825292839020835160c0810185528154958616815260ff600160a01b8704811682850152600160a81b8704811682870152600160b01b909604909516606086015291820180548451818402810184019095528085529293608086019390928301828280156115f857602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116115da575b505050505081526020016002820180548060200260200160405190810160405280929190818152602001828054801561165a57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161163c575b505050505081525050905092915050565b611673611e77565b600780546001600160a01b0319166001600160a01b0383169081179091556040519081527f3c864541ef71378c6229510ed90f376565ee42d9c5e0904a984a9e863e6db44f906020016113dd565b6116c9611e77565b6001600160a01b0381166116f357604051631e4fbdf760e01b815260006004820152602401610868565b6116fc81611ea4565b50565b336000908152600560205260409020548082111561173a5760405163b79d126360e01b81526004810183905260248101829052604401610868565b33600090815260056020908152604080832085850390558051631c2eb17b60e31b815290517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169263e1758bd892600480820193918290030181865afa1580156117b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117d49190614089565b90506117e181858561266e565b604080513381526001600160a01b03861660208201529081018490527f820b7fd51bf79c54350bab98400651b3314ff6e79b33528821871d94a6669883906060016111d3565b602084015160009060ff16156118d35760005b856020015160ff168160ff1610156118bb576118a586608001518260ff1681518110611868576118686140a6565b602002602001015186868660009283526004602090815260408085209385529281528284206001600160a01b039095168452939093529020541490565b6118b3576000915050610616565b60010161183a565b50846040015160ff166000036118d357506001610616565b606085015160005b866040015160ff168160ff161015611976576119468760a001518260ff1681518110611909576119096140a6565b602002602001015187878760009283526004602090815260408085209385529281528284206001600160a01b039095168452939093529020541490565b1561196e578161195581614596565b9250508160ff1660000361196e57600192505050610616565b6001016118db565b5060009695505050505050565b6001600160a01b0382166119aa576040516306b7a93160e41b815260040160405180910390fd5b6119be6001600160a01b0384168383612691565b505050565b6119cc81611e1c565b6116fc576040516303fc0f9560e21b815263ffffffff82166004820152602401610868565b6119fc828483611f2c565b611a068284610df5565b507fe8e2a5b92fc69ac50188ea142042492be8e8c34febb10b2cd02983684336e14282848360405161074b939291906145b3565b60606000806000611a4b86866121b5565b90925090506000611a75611a6560608a0160408b01613e59565b61043260808b0160608c01613c81565b8051909150611a9490611a8e60608b0160408c01613e59565b856126e3565b9350600080611aa4838b866127d6565b9092509050611ab3828761416c565b909a909950975050505050505050565b60075460009081906001600160a01b031615610b8c576040516001600160a01b038716602482015263ffffffff8616604482015260648101859052831515608482015260009060a40160408051601f19818403018152919052602080820180516001600160e01b0316636a8e2a4360e11b1790526007549192506000918291611b7a916001600160a01b0316907f00000000000000000000000000000000000000000000000000000000000000009084908761289e565b91509150611b8a8787848461294e565b90955093508415611bc5576007546001600160a01b031660009081526005602052604081208054879290611bbf90849061416c565b90915550505b50505094509492505050565b8051602080830151604080850151606080870151608088015160a089015160c08a015195519398611c1398600198919791966001600160a01b031695016145e3565b6040516020818303038152906040529050919050565b6000611c38600182848661465e565b611c4191614688565b60f81c9392505050565b6000611c5b6031602d848661465e565b611c64916146b8565b60e01c9392505050565b600061114f611c7d84846129c9565b90565b6000611c5b600d6009848661465e565b6000611ca060096001848661465e565b611ca9916146e6565b60c01c9392505050565b611cbf84848484611827565b611cdc576040516328ca4b5160e01b815260040160405180910390fd5b602084015160ff1615611d6d5760005b846020015160ff168160ff161015611d6b57600084815260046020908152604080832086845290915281206080870151805191929160ff8516908110611d3457611d346140a6565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060009055806001019050611cec565b505b604084015160ff161561087a5760005b846040015160ff168160ff161015611dfc576000848152600460209081526040808320868452909152812060a0870151805191929160ff8516908110611dc557611dc56140a6565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060009055806001019050611d7d565b5050505050565b6000611e13602d600d848661465e565b61114f91614714565b63ffffffff811660009081527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49602052604081208054600160a01b900460ff1615158061114f575054600160b01b900460ff16151592915050565b6000546001600160a01b03163314610df35760405163118cdaa760e01b8152336004820152602401610868565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b602081015160ff16158015611f0e5750606081015160ff16155b156116fc57604051634dafcfbd60e11b815260040160405180910390fd5b602081015160ff9081161480611f475750602081015160ff16155b15611f755760808101515115611f7057604051632ad00e0160e11b815260040160405180910390fd5b611fdb565b806020015160ff16816080015151141580611fb057506002611f99600160ff614732565b611fa3919061474b565b60ff16816020015160ff16115b15611fce57604051632ad00e0160e11b815260040160405180910390fd5b611fdb81608001516129d9565b604081015160ff9081161480611ff65750604081015160ff16155b1561204a5760a0810151511561201f576040516371aa1b6360e11b815260040160405180910390fd5b606081015160ff161561204557604051637c94a05f60e11b815260040160405180910390fd5b6120ef565b806040015160ff168160a00151511415806120855750600261206e600160ff614732565b612078919061474b565b60ff16816040015160ff16115b156120a3576040516371aa1b6360e11b815260040160405180910390fd5b606081015160ff1615806120c45750806040015160ff16816060015160ff16115b156120e257604051637c94a05f60e11b815260040160405180910390fd5b6120ef8160a001516129d9565b6001600160a01b03838116600090815260016020818152604080842063ffffffff881685528252928390208551815487840151958801516060890151929097166001600160a81b031990911617600160a01b60ff968716021761ffff60a81b1916600160a81b9686169690960260ff60b01b191695909517600160b01b949095169390930293909317825560808401518051859461219193850192019061382b565b5060a082015180516121ad91600284019160209091019061382b565b505050505050565b60608060028310156121dd5760405163196499c760e21b815260006004820152602401610868565b60006121ec600282868861465e565b6121f59161477b565b60f01c90506002600219820161235d578060005b8683101561230257600061222260018501858a8c61465e565b61222b91614688565b60f81c9050600081900361225557604051636780cfaf60e01b815260006004820152602401610868565b8160ff16600003612268578091506122a5565b8160ff168160ff16146122a55736600061228486868c8e61465e565b915091506122958989868585612a40565b9099509750859450919250829150505b60018401936000906122bc90600301868b8d61465e565b6122c59161477b565b60f01c905060008190036122ef5760405163196499c760e21b815260048101869052602401610868565b8060020161ffff16850194505050612209565b8287146123255760405163196499c760e21b815260048101849052602401610868565b60028711156123565736600061233d85858b8d61465e565b9150915061234e8888858585612a40565b909850965050505b505061236b565b612368828787612b60565b93505b50509250929050565b805160208083015160408085015160608087015160808801519351600160f81b9681019690965260c09690961b6001600160c01b031916602186015260e093841b6001600160e01b031990811660298701526001600160a01b03909216602d8601529490921b909116604d8301526051820152607101611c13565b60008060006123fd84612ceb565b91509150600089604001518a6020015161241791906147a9565b905060005b8160ff168160ff16101561258f5760008b6020015160ff168260ff16106124715760a08c015160208d01516124519084614732565b60ff1681518110612464576124646140a6565b6020026020010151612493565b8b608001518260ff168151811061248a5761248a6140a6565b60200260200101515b60408051602081019091526000808252919250905b8551811015612500578360ff168682815181106124c7576124c76140a6565b602002602001015160ff16036124f8578681815181106124e9576124e96140a6565b60200260200101519150612500565b6001016124a8565b5060405163fdb9b0f160e01b81526001600160a01b0383169063fdb9b0f190612535908f908f908f908f9088906004016147c2565b602060405180830381865afa158015612552573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612576919061457d565b612580908861416c565b9650505080600101905061241c565b505050509695505050505050565b60075460009081906001600160a01b031615610b8c576040516001600160a01b038716602482015263ffffffff8616604482015260648101859052831515608482015260009060a40160408051601f19818403018152919052602080820180516001600160e01b031663d424422160e01b1790526007549192506000918291612652916001600160a01b0316907f00000000000000000000000000000000000000000000000000000000000000009086612f51565b915091506126628787848461294e565b94509450505050610b8c565b6001600160a01b038316612686576119be8282612ffd565b6119be838383611983565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526119be9084906130aa565b60405163c015bb7d60e01b81526000906001600160a01b0385169063c015bb7d906127149086908690600401614559565b6020604051808303816000875af1158015612733573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612757919061457d565b9050801561278d576001600160a01b0384166000908152600560205260408120805483929061278790849061416c565b90915550505b604080516001600160a01b0386168152602081018390527f61ed099e74a97a1d7f8bb0952a88ca8b7b8ebd00c126ea04671f92a81213318a910160405180910390a19392505050565b60006060816127e7611457866144bc565b905060006127fc6127f7876144bc565b61311b565b905060606128278861281389840160408b01613e59565b8561282160c08c018c6140dc565b8b613138565b604051919650915061283f9084908490602001614819565b60405160208183030381529060405293507f07ea52d82345d6e838192107d8fd7123d9c2ec8e916cd0aad13fd2b60db2464488608001518960a001518360405161288b93929190614848565b60405180910390a1505050935093915050565b60006060863b8083036128c557604080516000808252602082019092529250925050612944565b60008060008761ffff166001600160401b038111156128e6576128e6613ea2565b6040519080825280601f01601f191660200182016040528015612910576020820181803683370190505b509050600080885160208a018c8f8ff191503d925087831115612931578792505b828152826000602083013e909450925050505b9550959350505050565b60008083158061295f575082516020115b1561296f57506000905080610b8c565b600083806020019051810190612985919061457d565b90508515612995578091506129bf565b600060065488116129a8576006546129aa565b875b90508082116129b957816129bb565b805b9350505b5094509492505050565b6000611e1360516031848661465e565b6000805b82518110156119be5760008382815181106129fa576129fa6140a6565b60200260200101519050826001600160a01b0316816001600160a01b031611612a365760405163c0762a5d60e01b815260040160405180910390fd5b91506001016129dd565b60608060001960ff861601612abd57865115612a7f57868484604051602001612a6b939291906148a6565b604051602081830303815290604052612ab6565b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050505b9650612b55565b60011960ff861601612b3757855115612af957858484604051602001612ae5939291906148a6565b604051602081830303815290604052612b30565b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050505b9550612b55565b604051636780cfaf60e01b815260ff86166004820152602401610868565b509495939450505050565b606060001961ffff851601612c005760228214612b90576040516301b8ca5560e31b815260040160405180910390fd5b6000612bb1612ba360226002868861465e565b612bac91614714565b6133ec565b604051600160f81b60208201819052601160f01b602183015260238201526001600160801b0319608083901b16602482015290915060340160405160208183030381529060405291505061114f565b60011961ffff851601612ccc57604282111580612c1d5750606282115b15612c3b576040516360493e2b60e11b815260040160405180910390fd5b6000612c4e612ba360226002868861465e565b90506000612c63612ba360426022878961465e565b905060006041198501612c79866042818a61465e565b612c8291614714565b60405160086020938403029190911c9250612cb3916001916011918391889183916031916002918b918b91016148ce565b604051602081830303815290604052935050505061114f565b604051630417051360e41b815261ffff85166004820152602401610868565b6060808251600003612cfc57915091565b6000612d078461342d565b90508060ff16600103612db95760408051600180825281830190925290816020015b6060815260200190600190039081612d295790505092508383600081518110612d5457612d546140a6565b602090810291909101015260408051600180825281830190925290816020016020820280368337019050509150612d8c846003613507565b82600081518110612d9f57612d9f6140a6565b602002602001019060ff16908160ff168152505050915091565b8060ff166001600160401b03811115612dd457612dd4613ea2565b604051908082528060200260200182016040528015612dfd578160200160208202803683370190505b5091508060ff166001600160401b03811115612e1b57612e1b613ea2565b604051908082528060200260200182016040528015612e4e57816020015b6060815260200190600190039081612e395790505b50925060008060ff5b8651831015612ee4576001909201916000612e728885613563565b6002949094019390506000612e878986613507565b90508260ff1660ff03612e9c57809250612ed5565b8260ff168160ff1614612ed557600219848603016000612ebd8b87846135c0565b9050612ecb8a8a87846136cd565b5093909301929150815b5061ffff169290920191612e57565b8183036000612ef48985846135c0565b9050612f02888885846136cd565b60005b8660ff168160ff161015612f4557878160ff1681518110612f2857612f286140a6565b6020908102919091010180516000190160ff169052600101612f05565b50505050505050915091565b60006060853b808303612f7857604080516000808252602082019092529250925050610b8c565b60008060008761ffff166001600160401b03811115612f9957612f99613ea2565b6040519080825280601f01601f191660200182016040528015612fc3576020820181803683370190505b509050600080885160208a018d8dfa91503d925087831115612fe3578792505b828152826000602083013e90999098509650505050505050565b6001600160a01b038216613024576040516306b7a93160e41b815260040160405180910390fd5b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114613071576040519150601f19603f3d011682016040523d82523d6000602084013e613076565b606091505b50509050806119be57604051631196f20d60e21b81526001600160a01b038416600482015260248101839052604401610868565b600080602060008451602086016000885af1806130cd576040513d6000823e3d81fd5b50506000513d915081156130e55780600114156130f2565b6001600160a01b0384163b155b1561087a57604051635274afe760e01b81526001600160a01b0385166004820152602401610868565b60608160a001518260c00151604051602001611c13929190614966565b6000606060008061314885612ceb565b9150915060008a604001518b6020015161316291906147a9565b90508060ff166001600160401b0381111561317f5761317f613ea2565b6040519080825280602002602001820160405280156131a8578160200160208202803683370190505b50935060005b8160ff168160ff1610156133dd5760008c6020015160ff168260ff16106132035760a08d015160208e01516131e39084614732565b60ff16815181106131f6576131f66140a6565b6020026020010151613225565b8c608001518260ff168151811061321c5761321c6140a6565b60200260200101515b60408051602081019091526000808252919250905b8551811015613292578360ff16868281518110613259576132596140a6565b602002602001015160ff160361328a5786818151811061327b5761327b6140a6565b60200260200101519150613292565b60010161323a565b50816001600160a01b031663f42ed2ed8e8e8e8e866040518663ffffffff1660e01b81526004016132c79594939291906147c2565b6020604051808303816000875af11580156132e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061330a919061457d565b878460ff168151811061331f5761331f6140a6565b6020026020010181815250506000878460ff1681518110613342576133426140a6565b602002602001015111156133d357868360ff1681518110613365576133656140a6565b602002602001015160056000846001600160a01b03166001600160a01b0316815260200190815260200160002060008282546133a1919061416c565b92505081905550868360ff16815181106133bd576133bd6140a6565b6020026020010151886133d0919061416c565b97505b50506001016131ae565b50505050965096945050505050565b60006fffffffffffffffffffffffffffffffff821115613429576040516306dfcc6560e41b81526080600482015260248101839052604401610868565b5090565b600080805b83518210156134dc57600190910190600061344d8584613563565b905060028301925060028161ffff16101561347e5760405163013adb8360e21b815260048101849052602401610868565b600061348a8685613507565b90508060ff1660ff036134b0576040516334f4f66f60e21b815260040160405180910390fd5b600160ff82161b83166134cd5760019485019460ff82161b831792505b5061ffff169190910190613432565b835182146135005760405163013adb8360e21b815260048101839052602401610868565b5050919050565b600061351482600161416c565b8351101561355a5760405162461bcd60e51b8152602060048201526013602482015272746f55696e74385f6f75744f66426f756e647360681b6044820152606401610868565b50016001015190565b600061357082600261416c565b835110156135b75760405162461bcd60e51b8152602060048201526014602482015273746f55696e7431365f6f75744f66426f756e647360601b6044820152606401610868565b50016002015190565b6060816135ce81601f61416c565b101561360d5760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b6044820152606401610868565b613617828461416c565b8451101561365b5760405162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b6044820152606401610868565b60608215801561367a57604051915060008252602082016040526136c4565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156136b357805183526020928301920161369b565b5050858452601f01601f1916604052505b50949350505050565b8160ff1660ff036136f1576040516334f4f66f60e21b815260040160405180910390fd5b60006136fe8360016147a9565b905060005b84518110156121ad576000858281518110613720576137206140a6565b602002602001015190508060ff168360ff160361379557868281518110613749576137496140a6565b602002602001015184604051602001613763929190614819565b604051602081830303815290604052878381518110613784576137846140a6565b6020026020010181905250506121ad565b8060ff166000036137da57828683815181106137b3576137b36140a6565b602002602001019060ff16908160ff168152505083878381518110613784576137846140a6565b50600101613703565b6040518060c0016040528060006001600160a01b03168152602001600060ff168152602001600060ff168152602001600060ff16815260200160608152602001606081525090565b828054828255906000526020600020908101928215613880579160200282015b8281111561388057825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019061384b565b506134299291505b808211156134295760008155600101613888565b6000602082840312156138ae57600080fd5b81356001600160e01b03198116811461114f57600080fd5b600080600080608085870312156138dc57600080fd5b84356001600160401b038111156138f257600080fd5b850160c0818803121561390457600080fd5b966020860135965060408601359560600135945092505050565b602081016003831061394057634e487b7160e01b600052602160045260246000fd5b91905290565b6001600160a01b03811681146116fc57600080fd5b803561396681613946565b919050565b803563ffffffff8116811461396657600080fd5b80356001600160401b038116811461396657600080fd5b6000806000606084860312156139ab57600080fd5b83356139b681613946565b92506139c46020850161396b565b91506139d26040850161397f565b90509250925092565b6000806000606084860312156139f057600080fd5b83356139fb81613946565b92506020840135613a0b81613946565b929592945050506040919091013590565b60008083601f840112613a2e57600080fd5b5081356001600160401b03811115613a4557600080fd5b6020830191508360208260051b8501011115613a6057600080fd5b9250929050565b600080600060408486031215613a7c57600080fd5b8335613a8781613946565b925060208401356001600160401b03811115613aa257600080fd5b613aae86828701613a1c565b9497909650939450505050565b600080600060608486031215613ad057600080fd5b83359250602084013591506040840135613ae981613946565b809150509250925092565b60008083601f840112613b0657600080fd5b5081356001600160401b03811115613b1d57600080fd5b602083019150836020828501011115613a6057600080fd5b60008060008060608587031215613b4b57600080fd5b84356001600160401b0380821115613b6257600080fd5b9086019060e08289031215613b7657600080fd5b90945060208601359080821115613b8c57600080fd5b50613b9987828801613af4565b90945092505060408501358015158114613bb257600080fd5b939692955090935050565b60005b83811015613bd8578181015183820152602001613bc0565b50506000910152565b60008151808452613bf9816020860160208601613bbd565b601f01601f19169290920160200192915050565b82518152602080840151908201526060604082015260006106166060830184613be1565b60008060008060608587031215613c4757600080fd5b84356001600160401b03811115613c5d57600080fd5b613c6987828801613af4565b90989097506020870135966040013595509350505050565b600060208284031215613c9357600080fd5b61114f8261396b565b60008060408385031215613caf57600080fd5b8235613cba81613946565b9150613cc86020840161396b565b90509250929050565b60008151808452602080850194506020840160005b83811015613d0b5781516001600160a01b031687529582019590820190600101613ce6565b509495945050505050565b60018060a01b03815116825260ff602082015116602083015260ff604082015116604083015260ff60608201511660608301526000608082015160c06080850152613d6460c0850182613cd1565b905060a083015184820360a0860152613d7d8282613cd1565b95945050505050565b60208152600061114f6020830184613d16565b600080600060608486031215613dae57600080fd5b613db78461396b565b92506020840135613dc781613946565b91506139d26040850161396b565b60208152600061114f6020830184613be1565b60008060208385031215613dfb57600080fd5b82356001600160401b03811115613e1157600080fd5b613e1d85828601613a1c565b90969095509350505050565b600060208284031215613e3b57600080fd5b5035919050565b8151815260208083015190820152604081016105f7565b600060208284031215613e6b57600080fd5b813561114f81613946565b60008060408385031215613e8957600080fd5b8235613e9481613946565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b60405160c081016001600160401b0381118282101715613eda57613eda613ea2565b60405290565b60405160e081016001600160401b0381118282101715613eda57613eda613ea2565b604051601f8201601f191681016001600160401b0381118282101715613f2a57613f2a613ea2565b604052919050565b803560ff8116811461396657600080fd5b600082601f830112613f5457600080fd5b813560206001600160401b03821115613f6f57613f6f613ea2565b8160051b613f7e828201613f02565b9283528481018201928281019087851115613f9857600080fd5b83870192505b84831015613fc0578235613fb181613946565b82529183019190830190613f9e565b979650505050505050565b600060c08284031215613fdd57600080fd5b613fe5613eb8565b9050613ff08261395b565b8152613ffe60208301613f32565b602082015261400f60408301613f32565b604082015261402060608301613f32565b606082015260808201356001600160401b038082111561403f57600080fd5b61404b85838601613f43565b608084015260a084013591508082111561406457600080fd5b5061407184828501613f43565b60a08301525092915050565b60006105f73683613fcb565b60006020828403121561409b57600080fd5b815161114f81613946565b634e487b7160e01b600052603260045260246000fd5b60008235605e198336030181126140d257600080fd5b9190910192915050565b6000808335601e198436030181126140f357600080fd5b8301803591506001600160401b0382111561410d57600080fd5b602001915036819003821315613a6057600080fd5b60006020828403121561413457600080fd5b81356001600160401b0381111561414a57600080fd5b61061684828501613fcb565b634e487b7160e01b600052601160045260246000fd5b808201808211156105f7576105f7614156565b8183823760009101908152919050565b6000602082840312156141a157600080fd5b61114f8261397f565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6040815260006141e66040830186613be1565b82810360208401526141f98185876141aa565b9695505050505050565b6001600160a01b038616815260806020820181905260009061422890830186886141aa565b604083019490945250606001529392505050565b60008235603e198336030181126140d257600080fd5b6000823560be198336030181126140d257600080fd5b60006020828403121561427a57600080fd5b61114f82613f32565b6000808335601e1984360301811261429a57600080fd5b83016020810192503590506001600160401b038111156142b957600080fd5b8060051b3603821315613a6057600080fd5b8183526000602080850194508260005b85811015613d0b5781356142ee81613946565b6001600160a01b0316875295820195908201906001016142db565b60208082528181018390526000906040808401600586901b8501820187855b8881101561443f57603f19808985030185528235603e198c360301811261434e57600080fd5b8b0163ffffffff61435e8261396b565b1685528781013560be1982360301811261437757600080fd5b85890188905201803561438981613946565b6001600160a01b0316858801526143a1818901613f32565b606060ff808316828901526143b78a8501613f32565b92506080818416818a01526143cd838601613f32565b935060a09250818416838a01526143e681860186614283565b60c08b810152945091506144019050610100890184836142cb565b92505061441081840184614283565b93509050838783030160e08801526144298284836142cb565b978a019796505050928701925050600101614328565b509098975050505050505050565b600082601f83011261445e57600080fd5b81356001600160401b0381111561447757614477613ea2565b61448a601f8201601f1916602001613f02565b81815284602083860101111561449f57600080fd5b816020850160208301376000918101602001919091529392505050565b600060e082360312156144ce57600080fd5b6144d6613ee0565b6144df8361397f565b81526144ed6020840161396b565b60208201526144fe6040840161395b565b604082015261450f6060840161396b565b60608201526080830135608082015260a083013560a082015260c08301356001600160401b0381111561454157600080fd5b61454d3682860161444d565b60c08301525092915050565b6001600160a01b038316815260406020820181905260009061061690830184613be1565b60006020828403121561458f57600080fd5b5051919050565b600060ff8216806145a9576145a9614156565b6000190192915050565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009061061390830184613d16565b60ff60f81b8960f81b1681526001600160401b0360c01b8860c01b166001820152600063ffffffff60e01b808960e01b16600984015287600d840152808760e01b16602d84015250846031830152836051830152825161464a816071850160208701613bbd565b919091016071019998505050505050505050565b6000808585111561466e57600080fd5b8386111561467b57600080fd5b5050820193919092039150565b6001600160f81b031981358181169160018510156146b05780818660010360031b1b83161692505b505092915050565b6001600160e01b031981358181169160048510156146b05760049490940360031b84901b1690921692915050565b6001600160c01b031981358181169160088510156146b05760089490940360031b84901b1690921692915050565b803560208310156105f757600019602084900360031b1b1692915050565b60ff82811682821603908111156105f7576105f7614156565b600060ff83168061476c57634e487b7160e01b600052601260045260246000fd5b8060ff84160491505092915050565b6001600160f01b031981358181169160028510156146b05760029490940360031b84901b1690921692915050565b60ff81811683821601908111156105f7576105f7614156565b6001600160a01b03861681526080602082018190526000906147e690830187613be1565b82810360408401526147f98186886141aa565b9050828103606084015261480d8185613be1565b98975050505050505050565b6000835161482b818460208801613bbd565b83519083019061483f818360208801613bbd565b01949350505050565b60608152600061485b6060830186613cd1565b6020838203602085015261486f8287613cd1565b84810360408601528551808252602080880194509091019060005b8181101561443f5784518352938301939183019160010161488a565b600084516148b8818460208901613bbd565b8201838582376000930192835250909392505050565b60f88a811b6001600160f81b0319908116835260f08b811b6001600160f01b031990811660018601528b841b8316600386015260808b901b6001600160801b031916600486015289841b831660148601529088901b1660158401529085901b166017820152600061494e601883018560801b6001600160801b0319169052565b50602881019190915260480198975050505050505050565b8281526000825161497e816020850160208701613bbd565b91909101602001939250505056fea2646970667358221220aa3c2aa17972b91a5ad74e17a6fe1bc85298f9e147161924798ce8a3a1115efc64736f6c6343000816003360806040523480156200001157600080fd5b506040516200313b3803806200313b83398101604081905262000034916200046f565b6001805460ff61ffff60e81b01191661017760ed1b179055600280546001600160a01b0319166001600160a01b038581169190911790915584908490612ee090859085908216156200008f576200008d60008362000226565b505b60005b8551811015620000f457620000ea7f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de878381518110620000d657620000d662000523565b60200260200101516200022660201b60201c565b5060010162000092565b5060005b815181101562000146576200013c7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775838381518110620000d657620000d662000523565b50600101620000f8565b505060016004908155600680546001600160a01b0319166001600160a01b038d169081179091556040805163416ecebf60e01b8152905191965063416ecebf95508083019450602093509091908290030181865afa158015620001ad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001d3919062000539565b6006805463ffffffff92909216600160a01b0263ffffffff60a01b199092169190911790555050600780546001600160a01b039094166001600160a01b03199094169390931790925550620005a5915050565b60007f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca831480156200027957506000838152602081815260408083206001600160a01b038616845290915290205460ff16155b15620002c65760018054601590620002a190600160a81b90046001600160401b031662000568565b91906101000a8154816001600160401b0302191690836001600160401b031602179055505b620002d28383620002de565b50600190505b92915050565b6000828152602081815260408083206001600160a01b038516845290915281205460ff1662000383576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556200033a3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001620002d8565b506000620002d8565b80516001600160a01b0381168114620003a457600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620003d157600080fd5b815160206001600160401b0380831115620003f057620003f0620003a9565b8260051b604051601f19603f83011681018181108482111715620004185762000418620003a9565b60405293845260208187018101949081019250878511156200043957600080fd5b6020870191505b84821015620004645762000454826200038c565b8352918301919083019062000440565b979650505050505050565b60008060008060008060c087890312156200048957600080fd5b62000494876200038c565b9550620004a4602088016200038c565b60408801519095506001600160401b0380821115620004c257600080fd5b620004d08a838b01620003bf565b9550620004e060608a016200038c565b9450620004f060808a016200038c565b935060a08901519150808211156200050757600080fd5b506200051689828a01620003bf565b9150509295509295509295565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156200054c57600080fd5b815163ffffffff811681146200056157600080fd5b9392505050565b60006001600160401b038281166002600160401b031981016200059b57634e487b7160e01b600052601160045260246000fd5b6001019392505050565b612b8680620005b56000396000f3fe60806040526004361061020e5760003560e01c8063724e78da11610118578063c358de0a116100a0578063cd88b9031161006f578063cd88b903146106af578063cfc32570146106cf578063d2ae2104146106e2578063d547741f14610721578063e395eb5c1461074157600080fd5b8063c358de0a1461062a578063c416aa511461064a578063c7b2370b1461066f578063c8f8dcd11461068f57600080fd5b806391d14854116100e757806391d14854146105065780639e94496514610526578063a217fddf146105d5578063c015bb7d146105ea578063c2803b2c1461060a57600080fd5b8063724e78da146104a0578063741bef1a146104c05780637cd44734146104e05780638624ba07146104f357600080fd5b80633146646a1161019b578063475b6d9e1161016a578063475b6d9e146103fd5780635c975abb146104105780635e280f1114610428578063709eb66414610460578063717e8a421461048057600080fd5b80633146646a1461038a57806336568abe146103aa5780633927c075146103ca5780633d85ac33146103dd57600080fd5b806316c38b3c116101e257806316c38b3c146102bf578063248a9ca3146102df57806326e67a371461031d5780632de113761461034a5780632f2ff15d1461036a57600080fd5b8062bf2e801461021357806301e336671461024d57806301ffc9a71461026f5780631095b6d71461029f575b600080fd5b34801561021f57600080fd5b5060015461023590600160e81b900461ffff1681565b60405161ffff90911681526020015b60405180910390f35b34801561025957600080fd5b5061026d610268366004611dca565b61077a565b005b34801561027b57600080fd5b5061028f61028a366004611e06565b6107a3565b6040519015158152602001610244565b3480156102ab57600080fd5b5061026d6102ba366004611dca565b6107da565b3480156102cb57600080fd5b5061026d6102da366004611e30565b6108ed565b3480156102eb57600080fd5b5061030f6102fa366004611e52565b60009081526020819052604090206001015490565b604051908152602001610244565b34801561032957600080fd5b5061033d610338366004611e7f565b610912565b6040516102449190611e9a565b34801561035657600080fd5b5061028f610365366004611ee1565b610999565b34801561037657600080fd5b5061026d610385366004611efc565b610a30565b34801561039657600080fd5b5061026d6103a5366004611f70565b610a55565b3480156103b657600080fd5b5061026d6103c5366004611efc565b610ae5565b61026d6103d8366004612017565b610afe565b3480156103e957600080fd5b5061026d6103f8366004612158565b610bb9565b61026d61040b366004612273565b610d30565b34801561041c57600080fd5b5060015460ff1661028f565b34801561043457600080fd5b50600654610448906001600160a01b031681565b6040516001600160a01b039091168152602001610244565b34801561046c57600080fd5b5061030f61047b3660046122f1565b610d72565b34801561048c57600080fd5b5061030f61049b3660046122f1565b610e79565b3480156104ac57600080fd5b5061026d6104bb366004611ee1565b610fa5565b3480156104cc57600080fd5b50600254610448906001600160a01b031681565b61026d6104ee36600461235f565b61100b565b61026d610501366004612424565b6110b6565b34801561051257600080fd5b5061028f610521366004611efc565b6111c1565b34801561053257600080fd5b50610592610541366004611e7f565b600560205260009081526040902080546001909101546001600160401b038083169261ffff600160401b820416926001600160801b03600160501b90920482169291811691600160801b9091041685565b604080516001600160401b03968716815261ffff90951660208601526001600160801b03938416908501529116606083015291909116608082015260a001610244565b3480156105e157600080fd5b5061030f600081565b3480156105f657600080fd5b5061030f610605366004612496565b6111ea565b34801561061657600080fd5b50600754610448906001600160a01b031681565b34801561063657600080fd5b5061026d6106453660046124e8565b611312565b34801561065657600080fd5b506001546104489061010090046001600160a01b031681565b34801561067b57600080fd5b5061026d61068a366004611ee1565b61137a565b34801561069b57600080fd5b5061030f6106aa366004612496565b6113e8565b3480156106bb57600080fd5b5061026d6106ca366004612503565b6114e3565b61026d6106dd366004612588565b61151b565b3480156106ee57600080fd5b5060015461070990600160a81b90046001600160401b031681565b6040516001600160401b039091168152602001610244565b34801561072d57600080fd5b5061026d61073c366004611efc565b6115de565b34801561074d57600080fd5b5060065461076590600160a01b900463ffffffff1681565b60405163ffffffff9091168152602001610244565b600080516020612b3183398151915261079281611603565b61079d848484611610565b50505050565b60006001600160e01b03198216637965db0b60e01b14806107d457506301ffc9a760e01b6001600160e01b03198316145b92915050565b600080516020612b318339815191526107f281611603565b61081c7f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de856111c1565b61083957604051635ee08b9760e01b815260040160405180910390fd5b604051637ecdf29160e11b81526001600160a01b0384811660048301526024820184905285169063fd9be52290604401600060405180830381600087803b15801561088357600080fd5b505af1158015610897573d6000803e3d6000fd5b5050604080516001600160a01b038089168252871660208201529081018590527f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb9250606001905060405180910390a150505050565b60006108f881611603565b811561090a57610906611638565b5050565b61090661168c565b63ffffffff811660009081526003602090815260409182902080548351818402810184019094528084526060939283018282801561098d57602002820191906000526020600020906000905b825461010083900a900460ff1681526020600192830181810494850194909303909202910180841161095e5790505b50505050509050919050565b60006109c57f4270fae16c6d150d00e80b689daca99e8073b1838ff2b6063a37be9d851283e4836111c1565b156109d257506000919050565b600154600160a81b90046001600160401b03161580610a165750610a167f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca836111c1565b15610a2357506001919050565b506000919050565b919050565b600082815260208190526040902060010154610a4b81611603565b61079d83836116c5565b600080516020612b31833981519152610a6d81611603565b610a7561175b565b600754604051631cca20df60e31b81526001600160a01b039091169063e65106f890610aa9908790879087906004016125ed565b600060405180830381600087803b158015610ac357600080fd5b505af1158015610ad7573d6000803e3d6000fd5b5050505061079d6001600455565b60405163dec9f03160e01b815260040160405180910390fd5b600080516020612b31833981519152610b1681611603565b610b1e61175b565b610b3e88610b2c8686611785565b610b3687876117a8565b8a8a8a6117c1565b50600754604051631cca20df60e31b81526001600160a01b039091169063e65106f890610b73908790879087906004016125ed565b600060405180830381600087803b158015610b8d57600080fd5b505af1158015610ba1573d6000803e3d6000fd5b50505050610baf6001600455565b5050505050505050565b600080516020612b31833981519152610bd181611603565b60005b8251811015610cf4576000838281518110610bf157610bf1612611565b6020908102919091018101516040805160a08082018352838501516001600160401b03908116835260608086015161ffff9081168589019081526080808901516001600160801b03908116888a01908152968a01518116948801948552888a01518616918801918252985163ffffffff1660009081526005909a529690982094518554985194518816600160501b026fffffffffffffffffffffffffffffffff60501b1995909216600160401b0269ffffffffffffffffffff1990991690841617979097179290921695909517825551600191820180549351909516600160801b026001600160c01b031990931693169290921717909155919091019050610bd4565b507fb99f6de5e22c60c178b03bfacf2daeb4b6089f5b37e0fe2c48a5d5141191fc5382604051610d249190612627565b60405180910390a15050565b600080516020612b31833981519152610d4881611603565b610d5061175b565b610d5e8787878787876117c1565b50610d696001600455565b50505050505050565b600084610d7e81610999565b610d9b57604051634ab5ebcd60e01b815260040160405180910390fd5b610da3611928565b6040805160a0810182526002546001600160a01b03908116825263ffffffff8a1660208084018290528a831684860152606084018a905260015461ffff600160e81b8204166080860152600092835260059091529084902093516321a7700b60e11b815292936101009091049091169163434ee01691610e2c918591908a908a90600401612714565b602060405180830381865afa158015610e49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e6d919061277c565b98975050505050505050565b60007f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de610ea581611603565b85610eaf81610999565b610ecc57604051634ab5ebcd60e01b815260040160405180910390fd5b6040805160a0810182526002546001600160a01b03908116825263ffffffff8b1660208084018290528b831684860152606084018b905260015461ffff600160e81b820416608086015260009283526005909152908490209351632b377bb160e11b815292936101009091049091169163566ef76291610f55918591908b908b90600401612714565b6020604051808303816000875af1158015610f74573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f98919061277c565b9998505050505050505050565b600080516020612b31833981519152610fbd81611603565b600280546001600160a01b0319166001600160a01b0384169081179091556040519081527ff724a45d041687842411f2b977ef22ab8f43c8f1104f4592b42a00f9b34a643d90602001610d24565b600080516020612b3183398151915261102381611603565b61102b61175b565b6006546040516391d20fa160e01b81526001600160a01b03909116906391d20fa1908490349061106d908f908f908f908f908f908f908f908f90600401612795565b6000604051808303818589803b15801561108657600080fd5b5088f115801561109a573d6000803e3d6000fd5b5050505050506110aa6001600455565b50505050505050505050565b600080516020612b318339815191526110ce81611603565b6110d661175b565b600654600090611104906020850190600160a01b900463ffffffff166110fc8287611ee1565b8989896117c1565b90506000611112823461280b565b6006549091506001600160a01b0316630c0c389e60e0860135836020880161113a818a611ee1565b60808a013561114c60a08c018c61281e565b61115960c08e018e61281e565b6040518a63ffffffff1660e01b815260040161117b979695949392919061289d565b6000604051808303818589803b15801561119457600080fd5b5088f11580156111a8573d6000803e3d6000fd5b50505050505050506111ba6001600455565b5050505050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b60007f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de61121681611603565b8461122081610999565b61123d57604051634ab5ebcd60e01b815260040160405180910390fd5b604080516060810182526002546001600160a01b039081168252888116602080840191909152600154600160e81b810461ffff1684860152600654600160a01b900463ffffffff16600090815260059092529084902093516319400de160e21b81529293610100909104909116916365003784916112c4918591908b908b906004016128f3565b6020604051808303816000875af11580156112e3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611307919061277c565b979650505050505050565b600080516020612b3183398151915261132a81611603565b6001805461ffff60e81b1916600160e81b61ffff8516908102919091179091556040519081527f7af0ac740036ffb1c97b03697859d729e80a44ae5030543d64971c313565ab4d90602001610d24565b600080516020612b3183398151915261139281611603565b60018054610100600160a81b0319166101006001600160a01b038516908102919091179091556040519081527f1399be28223800f8669b3ba5f8721d9fc16fc4e8d0bbf98378791c8c5a3015e090602001610d24565b6000836113f481610999565b61141157604051634ab5ebcd60e01b815260040160405180910390fd5b604080516060810182526002546001600160a01b039081168252878116602080840191909152600154600160e81b810461ffff1684860152600654600160a01b900463ffffffff16600090815260059092529084902093516319be3d4f60e11b815292936101009091049091169163337c7a9e91611498918591908a908a906004016128f3565b602060405180830381865afa1580156114b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114d9919061277c565b9695505050505050565b600080516020612b318339815191526114fb81611603565b63ffffffff841660009081526003602052604090206111ba908484611cf5565b600080516020612b3183398151915261153381611603565b61153b61175b565b6006546001600160a01b0316630c0c389e60e084013534602086016115608188611ee1565b608088013561157260a08a018a61281e565b61157f60c08c018c61281e565b6040518a63ffffffff1660e01b81526004016115a1979695949392919061289d565b6000604051808303818589803b1580156115ba57600080fd5b5088f11580156115ce573d6000803e3d6000fd5b5050505050506109066001600455565b6000828152602081905260409020600101546115f981611603565b61079d838361194e565b61160d81336119d8565b50565b6001600160a01b03831661162d576116288282611a16565b505050565b611628838383611ac3565b611640611928565b6001805460ff1916811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b6040516001600160a01b03909116815260200160405180910390a1565b611694611afe565b6001805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa3361166f565b60007f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca831480156116fd57506116fb83836111c1565b155b15611747576001805460159061172290600160a81b90046001600160401b0316612943565b91906101000a8154816001600160401b0302191690836001600160401b031602179055505b6117518383611b21565b5060019392505050565b60026004540361177e57604051633ee5aeb560e01b815260040160405180910390fd5b6002600455565b60006117956031602d8486612969565b61179e91612993565b60e01c9392505050565b60006117ba6117b78484611bb3565b90565b9392505050565b600080836001600160401b038111156117dc576117dc6120aa565b604051908082528060200260200182016040528015611805578160200160208202803683370190505b50905060005b848110156118db57600086868381811061182757611827612611565b90506040020180360381019061183d91906129c3565b9050600081600001516001600160a01b031682602001518790604051600060405180830381858888f193505050503d8060008114611897576040519150601f19603f3d011682016040523d82523d6000602084013e61189c565b606091505b50509050808484815181106118b3576118b3612611565b9115156020928302919091018201528201516118cf9086612a19565b9450505060010161180b565b507f1f48172553121d8bf273ce457a5a3dd180d464e0add3e0143045b7fa039c346888888888888660405161191596959493929190612a6a565b60405180910390a1509695505050505050565b60015460ff161561194c5760405163d93c066560e01b815260040160405180910390fd5b565b60007f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca83148015611984575061198483836111c1565b156119ce57600180546015906119a990600160a81b90046001600160401b0316612aef565b91906101000a8154816001600160401b0302191690836001600160401b031602179055505b6117518383611bcc565b6119e282826111c1565b6109065760405163e2517d3f60e01b81526001600160a01b0382166004820152602481018390526044015b60405180910390fd5b6001600160a01b038216611a3d576040516306b7a93160e41b815260040160405180910390fd5b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611a8a576040519150601f19603f3d011682016040523d82523d6000602084013e611a8f565b606091505b505090508061162857604051631196f20d60e21b81526001600160a01b038416600482015260248101839052604401611a0d565b6001600160a01b038216611aea576040516306b7a93160e41b815260040160405180910390fd5b6116286001600160a01b0384168383611c37565b60015460ff1661194c57604051638dfc202b60e01b815260040160405180910390fd5b6000611b2d83836111c1565b611bab576000838152602081815260408083206001600160a01b03861684529091529020805460ff19166001179055611b633390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016107d4565b5060006107d4565b6000611bc3605160318486612969565b6117ba91612b12565b6000611bd883836111c1565b15611bab576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016107d4565b604080516001600160a01b03841660248201526044808201849052825180830390910181526064909101909152602080820180516001600160e01b031663a9059cbb60e01b1781528251611628938793909260009283929183919082885af180611ca7576040513d6000823e3d81fd5b50506000513d91508115611cbf578060011415611ccc565b6001600160a01b0384163b155b1561079d57604051635274afe760e01b81526001600160a01b0385166004820152602401611a0d565b82805482825590600052602060002090601f01602090048101928215611d8e5791602002820160005b83821115611d5f57833560ff1683826101000a81548160ff021916908360ff1602179055509260200192600101602081600001049283019260010302611d1e565b8015611d8c5782816101000a81549060ff0219169055600101602081600001049283019260010302611d5f565b505b50611d9a929150611d9e565b5090565b5b80821115611d9a5760008155600101611d9f565b80356001600160a01b0381168114610a2b57600080fd5b600080600060608486031215611ddf57600080fd5b611de884611db3565b9250611df660208501611db3565b9150604084013590509250925092565b600060208284031215611e1857600080fd5b81356001600160e01b0319811681146117ba57600080fd5b600060208284031215611e4257600080fd5b813580151581146117ba57600080fd5b600060208284031215611e6457600080fd5b5035919050565b803563ffffffff81168114610a2b57600080fd5b600060208284031215611e9157600080fd5b6117ba82611e6b565b6020808252825182820181905260009190848201906040850190845b81811015611ed557835160ff1683529284019291840191600101611eb6565b50909695505050505050565b600060208284031215611ef357600080fd5b6117ba82611db3565b60008060408385031215611f0f57600080fd5b82359150611f1f60208401611db3565b90509250929050565b60008083601f840112611f3a57600080fd5b5081356001600160401b03811115611f5157600080fd5b602083019150836020828501011115611f6957600080fd5b9250929050565b600080600060408486031215611f8557600080fd5b83356001600160401b03811115611f9b57600080fd5b611fa786828701611f28565b909790965060209590950135949350505050565b600060608284031215611fcd57600080fd5b50919050565b60008083601f840112611fe557600080fd5b5081356001600160401b03811115611ffc57600080fd5b6020830191508360208260061b8501011115611f6957600080fd5b600080600080600080600060e0888a03121561203257600080fd5b61203c8989611fbb565b965060608801356001600160401b038082111561205857600080fd5b6120648b838c01611fd3565b909850965060808a0135955060a08a013591508082111561208457600080fd5b506120918a828b01611f28565b989b979a5095989497959660c090950135949350505050565b634e487b7160e01b600052604160045260246000fd5b60405160c081016001600160401b03811182821017156120e2576120e26120aa565b60405290565b604051601f8201601f191681016001600160401b0381118282101715612110576121106120aa565b604052919050565b80356001600160401b0381168114610a2b57600080fd5b803561ffff81168114610a2b57600080fd5b80356001600160801b0381168114610a2b57600080fd5b6000602080838503121561216b57600080fd5b82356001600160401b038082111561218257600080fd5b818501915085601f83011261219657600080fd5b8135818111156121a8576121a86120aa565b6121b6848260051b016120e8565b818152848101925060c09182028401850191888311156121d557600080fd5b938501935b828510156122675780858a0312156121f25760008081fd5b6121fa6120c0565b61220386611e6b565b8152612210878701612118565b878201526040612221818801612118565b90820152606061223287820161212f565b908201526080612243878201612141565b9082015260a0612254878201612141565b90820152845293840193928501926121da565b50979650505050505050565b60008060008060008060e0878903121561228c57600080fd5b6122968888611fbb565b95506122a460608801611e6b565b94506122b260808801611db3565b935060a08701356001600160401b038111156122cd57600080fd5b6122d989828a01611fd3565b979a969950949794969560c090950135949350505050565b60008060008060006080868803121561230957600080fd5b61231286611e6b565b945061232060208701611db3565b93506040860135925060608601356001600160401b0381111561234257600080fd5b61234e88828901611f28565b969995985093965092949392505050565b600080600080600080600080600060e08a8c03121561237d57600080fd5b6123868a611db3565b985061239460208b01611db3565b975060408a013596506123a960608b0161212f565b955060808a01356001600160401b03808211156123c557600080fd5b6123d18d838e01611f28565b909750955060a08c01359150808211156123ea57600080fd5b506123f78c828d01611f28565b9a9d999c50979a9699959894979660c00135949350505050565b60006101008284031215611fcd57600080fd5b6000806000806060858703121561243a57600080fd5b84356001600160401b038082111561245157600080fd5b61245d88838901611fd3565b909650945060208701359350604087013591508082111561247d57600080fd5b5061248a87828801612411565b91505092959194509250565b6000806000604084860312156124ab57600080fd5b6124b484611db3565b925060208401356001600160401b038111156124cf57600080fd5b6124db86828701611f28565b9497909650939450505050565b6000602082840312156124fa57600080fd5b6117ba8261212f565b60008060006040848603121561251857600080fd5b61252184611e6b565b925060208401356001600160401b038082111561253d57600080fd5b818601915086601f83011261255157600080fd5b81358181111561256057600080fd5b8760208260051b850101111561257557600080fd5b6020830194508093505050509250925092565b60006020828403121561259a57600080fd5b81356001600160401b038111156125b057600080fd5b6125bc84828501612411565b949350505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6040815260006126016040830185876125c4565b9050826020830152949350505050565b634e487b7160e01b600052603260045260246000fd5b602080825282518282018190526000919060409081850190868401855b828110156126b7578151805163ffffffff168552868101516001600160401b039081168887015286820151168686015260608082015161ffff16908601526080808201516001600160801b039081169187019190915260a091820151169085015260c09093019290850190600101612644565b5091979650505050505050565b80546001600160401b03808216845261ffff8260401c1660208501526001600160801b03808360501c16604086015260018401549250808316606086015250808260801c16608085015250505050565b600061016060018060a01b0380885116845263ffffffff6020890151166020850152806040890151166040850152506060870151606084015261ffff608088015116608084015261276860a08401876126c4565b8061014084015261130781840185876125c4565b60006020828403121561278e57600080fd5b5051919050565b6001600160a01b038981168252881660208201526040810187905261ffff8616606082015260c0608082018190526000906127d390830186886125c4565b82810360a08401526127e68185876125c4565b9b9a5050505050505050505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156107d4576107d46127f5565b6000808335601e1984360301811261283557600080fd5b8301803591506001600160401b0382111561284f57600080fd5b602001915036819003821315611f6957600080fd5b63ffffffff61287282611e6b565b168252602081013560208301526001600160401b0361289360408301612118565b1660408301525050565b6128a78189612864565b60018060a01b038716606082015285608082015260e060a082015260006128d260e0830186886125c4565b82810360c08401526128e58185876125c4565b9a9950505050505050505050565b84516001600160a01b0390811682526020808701519091169082015260408086015161ffff1690820152600061012061292f60608401876126c4565b8061010084015261130781840185876125c4565b60006001600160401b0380831681810361295f5761295f6127f5565b6001019392505050565b6000808585111561297957600080fd5b8386111561298657600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156129bb5780818660040360031b1b83161692505b505092915050565b6000604082840312156129d557600080fd5b604051604081018181106001600160401b03821117156129f7576129f76120aa565b604052612a0383611db3565b8152602083013560208201528091505092915050565b808201808211156107d4576107d46127f5565b60008151808452602080850194506020840160005b83811015612a5f578151151587529582019590820190600101612a41565b509495945050505050565b600060e08201612a7a838a612864565b63ffffffff881660608401526001600160a01b03878116608085015260e060a0850152908590528590610100840160005b87811015612adc5782612abd85611db3565b1682526020848101359083015260409384019390910190600101612aab565b5084810360c08601526127e68187612a2c565b60006001600160401b03821680612b0857612b086127f5565b6000190192915050565b803560208310156107d457600019602084900360031b1b169291505056fea49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775a264697066735822122003e7fb8f464aa4a064aa9568ebbe17fdc3d0618228d79d9a1ced9212fb3e0e6b64736f6c6343000816003360c060405234801561001057600080fd5b5060405161162538038061162583398101604081905261002f916100c9565b338061005557604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b61005e81610079565b5063ffffffff1660a052670de0b6b3a76400006080526100f6565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100db57600080fd5b815163ffffffff811681146100ef57600080fd5b9392505050565b60805160a0516115036101226000396000818161021501526102b20152600061075501526115036000f3fe60806040526004361061008a5760003560e01c8063566ef76211610059578063566ef7621461012c578063650037841461014c578063715018a61461016c5780638da5cb5b14610181578063f2fde38b146101a957600080fd5b806301e3366714610096578063337c7a9e146100b8578063434ee016146100eb57806354fd4d501461010b57600080fd5b3661009157005b600080fd5b3480156100a257600080fd5b506100b66100b13660046110c2565b6101c9565b005b3480156100c457600080fd5b506100d86100d336600461115f565b6101e1565b6040519081526020015b60405180910390f35b3480156100f757600080fd5b506100d86101063660046111cb565b6103c1565b34801561011757600080fd5b506040805160018082526020820152016100e2565b34801561013857600080fd5b506100d86101473660046111cb565b61058c565b34801561015857600080fd5b506100d861016736600461115f565b6105a3565b34801561017857600080fd5b506100b66105b1565b34801561018d57600080fd5b506000546040516001600160a01b0390911681526020016100e2565b3480156101b557600080fd5b506100b66101c4366004611218565b6105c5565b6101d1610603565b6101dc838383610630565b505050565b60006101f0602085018561123a565b67ffffffffffffffff166000036102475760405163c3baa0b760e01b815263ffffffff7f00000000000000000000000000000000000000000000000000000000000000001660048201526024015b60405180910390fd5b6000808061028560018261025e60208b018b61123a565b61026e60a08c0160808d0161123a565b61027e60808d0160608e01611279565b8b8b610653565b91945092509050600080808061029e60208d018d611218565b604051632229049360e21b815263ffffffff7f00000000000000000000000000000000000000000000000000000000000000008116600483015287166024820152604481018890526001600160a01b0391909116906388a4124c90606401608060405180830381865afa158015610319573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061033d9190611296565b929650909450925090506103878461035b60408e0160208f016112eb565b8e604001602081019061036e91906112eb565b8e60400160208101906103819190611279565b856106e5565b97506103a78784848f60400160208101906103a291906112eb565b6107ba565b6103b19089611325565b9c9b505050505050505050505050565b60006103d0602085018561123a565b67ffffffffffffffff16600003610413576103f1604086016020870161133e565b60405163c3baa0b760e01b815263ffffffff909116600482015260240161023e565b6000806104678161043361042d60408b0160208c0161133e565b50600090565b61044060208a018a61123a565b61045060a08b0160808c0161123a565b61046060808c0160608d01611279565b8a8a610653565b509092509050600080808061047f60208c018c611218565b6001600160a01b03166388a4124c61049d60408e0160208f0161133e565b6040516001600160e01b031960e084901b16815263ffffffff91909116600482015260608e0135602482015260448101889052606401608060405180830381865afa1580156104f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105149190611296565b929650909450925090506105588461053260408d0160208e016112eb565b8d608001602081019061054591906112eb565b8d60400160208101906103819190611279565b96506105738684848e60800160208101906103a291906112eb565b61057d9088611325565b9b9a5050505050505050505050565b600061059a858585856103c1565b95945050505050565b600061059a858585856101e1565b6105b9610603565b6105c3600061080f565b565b6105cd610603565b6001600160a01b0381166105f757604051631e4fbdf760e01b81526000600482015260240161023e565b6106008161080f565b50565b6000546001600160a01b031633146105c35760405163118cdaa760e01b815233600482015260240161023e565b6001600160a01b038316610648576101dc828261085f565b6101dc83838361090c565b60008060008061066686868d8d8b610947565b805160608201516080830151919650935090915061068e9067ffffffffffffffff8a16611364565b60208201516106a79067ffffffffffffffff8c16611325565b6106b19190611325565b92508060400151156106d75760646106ca846066611364565b6106d4919061137b565b92505b509750975097945050505050565b60008061ffff8616156106f857856106fa565b845b9050600061271061070f61ffff84168a611364565b610719919061137b565b90506001600160801b038416158061073857506001600160801b038516155b1561074657915061059a9050565b600088856001600160801b03167f0000000000000000000000000000000000000000000000000000000000000000886001600160801b03166107889190611364565b610792919061137b565b61079c9190611325565b90508181116107ab57816107ad565b805b9998505050505050505050565b60008415610807576127108261ffff16846001600160801b0316866001600160801b0316886107e99190611364565b6107f3919061137b565b6107fd9190611364565b61059a919061137b565b949350505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038216610886576040516306b7a93160e41b815260040160405180910390fd5b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146108d3576040519150601f19603f3d011682016040523d82523d6000602084013e6108d8565b606091505b50509050806101dc57604051631196f20d60e21b81526001600160a01b03841660048201526024810183905260440161023e565b6001600160a01b038216610933576040516306b7a93160e41b815260040160405180910390fd5b6101dc6001600160a01b0384168383610d50565b6109816040518060a001604052806000815260200160008152602001600015158152602001600063ffffffff168152602001600081525090565b60008590036109a25760405162575ea160e01b815260040160405180910390fd5b600080805b87831015610c725760003681806109bf8d8d89610da2565b99509195509350915086905060001960ff851601610a7f578a156109fb5760405163052e551560e01b815260ff8516600482015260240161023e565b600080610a088585610df8565b915091508b8015610a2257506000816001600160801b0316115b15610a455760405163052e551560e01b815260ff8716600482015260240161023e565b806001600160801b03168a600001818151610a609190611325565b905250610a766001600160801b03831689611325565b97505050610c69565b60011960ff851601610ae3578a15610aaf5760405163052e551560e01b815260ff8516600482015260240161023e565b6000610abb8484610e5d565b509050806001600160801b031689600001818151610ad99190611325565b905250610c699050565b60021960ff851601610ba8578915610b135760405163052e551560e01b815260ff8516600482015260240161023e565b600080610b208585610e9b565b9250925050816001600160801b0316600003610b4f5760405163a169d0e160e01b815260040160405180910390fd5b806001600160801b03168a600001818151610b6a9190611325565b90525060208a0180516001600160801b0384169190610b8a908390611325565b90525060808a01805190610b9d8261139d565b815250505050610c69565b60031960ff851601610bc05760016040890152610c69565b60041960ff851601610c4b578a610bef5760405163052e551560e01b815260ff8516600482015260240161023e565b6000806000610bfe8686610f0f565b925092509250806001600160801b03168b600001818151610c1f9190611325565b905250610c356001600160801b0384168a611325565b9850610c4182896113b6565b9750505050610c69565b60405163052e551560e01b815260ff8516600482015260240161023e565b505050506109a7565b828814610c9557604051634c83bb7560e11b81526004810184905260240161023e565b83516001600160801b0386161015610cd45783516040516242670160e11b815260048101919091526001600160801b038616602482015260440161023e565b81600003610cf557604051630e5eb8f360e41b815260040160405180910390fd5b868015610d06575063ffffffff8116155b15610d24576040516336619f8360e11b815260040160405180910390fd5b8184602001818151610d369190611325565b90525063ffffffff16606084015250909695505050505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526101dc908490610f7a565b600036816001840181610db6888884610ff1565b600292909201919050610dca888884611018565b94506001820161ffff82168301610de381838b8d6113da565b979b909a50969850505061ffff160193505050565b60008060108314801590610e0d575060208314155b15610e2b57604051634796aee160e01b815260040160405180910390fd5b610e378484600061103d565b915060208314610e48576000610e54565b610e548484601061103d565b90509250929050565b60008060308314610e81576040516361d0c2c760e11b815260040160405180910390fd5b610e8d8484600061103d565b9150610e5484846010611064565b6000808060128414801590610eb1575060228414155b15610ecf57604051638b4aa70b60e01b815260040160405180910390fd5b610edb85856000610ff1565b9250610ee98585600261103d565b915060228414610efa576000610f06565b610f068585601261103d565b90509250925092565b6000808060148414801590610f25575060248414155b15610f4357604051636f5bff2160e11b815260040160405180910390fd5b610f4f8585600061103d565b9250610f5d8585601061107f565b915060248414610f6e576000610f06565b610f068585601461103d565b600080602060008451602086016000885af180610f9d576040513d6000823e3d81fd5b50506000513d91508115610fb5578060011415610fc2565b6001600160a01b0384163b155b15610feb57604051635274afe760e01b81526001600160a01b038516600482015260240161023e565b50505050565b600060028201611003818486886113da565b61100c91611404565b60f01c95945050505050565b600083838381811061102c5761102c611434565b919091013560f81c95945050505050565b60006010820161104f818486886113da565b6110589161144a565b60801c95945050505050565b600060208201611076818486886113da565b61059a91611481565b600060048201611091818486886113da565b61109a9161149f565b60e01c95945050505050565b80356001600160a01b03811681146110bd57600080fd5b919050565b6000806000606084860312156110d757600080fd5b6110e0846110a6565b92506110ee602085016110a6565b9150604084013590509250925092565b600060a0828403121561111057600080fd5b50919050565b60008083601f84011261112857600080fd5b50813567ffffffffffffffff81111561114057600080fd5b60208301915083602082850101111561115857600080fd5b9250929050565b60008060008084860361012081121561117757600080fd5b606081121561118557600080fd5b5084935061119686606087016110fe565b925061010085013567ffffffffffffffff8111156111b357600080fd5b6111bf87828801611116565b95989497509550505050565b60008060008061016085870312156111e257600080fd5b6111ec86866110fe565b93506111fb8660a087016110fe565b925061014085013567ffffffffffffffff8111156111b357600080fd5b60006020828403121561122a57600080fd5b611233826110a6565b9392505050565b60006020828403121561124c57600080fd5b813567ffffffffffffffff8116811461123357600080fd5b6001600160801b038116811461060057600080fd5b60006020828403121561128b57600080fd5b813561123381611264565b600080600080608085870312156112ac57600080fd5b8451935060208501516112be81611264565b60408601519093506112cf81611264565b60608601519092506112e081611264565b939692955090935050565b6000602082840312156112fd57600080fd5b813561ffff8116811461123357600080fd5b634e487b7160e01b600052601160045260246000fd5b808201808211156113385761133861130f565b92915050565b60006020828403121561135057600080fd5b813563ffffffff8116811461123357600080fd5b80820281158282048414176113385761133861130f565b60008261139857634e487b7160e01b600052601260045260246000fd5b500490565b6000600182016113af576113af61130f565b5060010190565b63ffffffff8181168382160190808211156113d3576113d361130f565b5092915050565b600080858511156113ea57600080fd5b838611156113f757600080fd5b5050820193919092039150565b6001600160f01b0319813581811691600285101561142c5780818660020360031b1b83161692505b505092915050565b634e487b7160e01b600052603260045260246000fd5b6fffffffffffffffffffffffffffffffff19813581811691601085101561142c5760109490940360031b84901b1690921692915050565b8035602083101561133857600019602084900360031b1b1692915050565b6001600160e01b0319813581811691600485101561142c5760049490940360031b84901b169092169291505056fea26469706673582212204c4f5a98e90d6be97596e1e9898b33b6b2d63dca8ef38882eb89a478158f7b6b64736f6c6343000816003360c06040523480156200001157600080fd5b5060405162003bf738038062003bf78339810160408190526200003491620004de565b6001805460ff61ffff60e81b01191661017760ed1b179055600280546001600160a01b0319166001600160a01b03861617905582828686612ee060008660005b8551811015620000d657620000cc7f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de878381518110620000b857620000b8620005c2565b60200260200101516200028060201b60201c565b5060010162000074565b5060005b815181101562000128576200011e7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775838381518110620000b857620000b8620005c2565b50600101620000da565b505050505050806001600160401b03166000036200015957604051635f86e17760e01b815260040160405180910390fd5b806001600160401b0316825110156200019f5781516040516378e2c15760e11b81526001600160401b039182166004820152908216602482015260440160405180910390fd5b6000805b835181101562000231576000848281518110620001c457620001c4620005c2565b60200260200101519050826001600160a01b0316816001600160a01b03161162000201576040516305fa937f60e11b815260040160405180910390fd5b6001600160a01b0381166000908152600460205260409020805460ff1916600190811790915590925001620001a3565b50509051600580546001600160401b0393841668010000000000000000026001600160801b0319909116939092169290921717905550505063ffffffff92831660805250501660a05262000615565b60007f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca83148015620002d357506000838152602081815260408083206001600160a01b038616845290915290205460ff16155b15620003205760018054601590620002fb90600160a81b90046001600160401b0316620005d8565b91906101000a8154816001600160401b0302191690836001600160401b031602179055505b6200032c838362000338565b50600190505b92915050565b6000828152602081815260408083206001600160a01b038516845290915281205460ff16620003dd576000838152602081815260408083206001600160a01b03861684529091529020805460ff19166001179055620003943390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600162000332565b50600062000332565b805163ffffffff81168114620003fb57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b80516001600160a01b0381168114620003fb57600080fd5b600082601f8301126200044057600080fd5b815160206001600160401b03808311156200045f576200045f62000400565b8260051b604051601f19603f8301168101818110848211171562000487576200048762000400565b6040529384526020818701810194908101925087851115620004a857600080fd5b6020870191505b84821015620004d357620004c38262000416565b83529183019190830190620004af565b979650505050505050565b600080600080600080600060e0888a031215620004fa57600080fd5b6200050588620003e6565b96506200051560208901620003e6565b60408901519096506001600160401b03808211156200053357600080fd5b620005418b838c016200042e565b96506200055160608b0162000416565b955060808a01519150808211156200056857600080fd5b620005768b838c016200042e565b945060a08a0151915080821682146200058e57600080fd5b60c08a015191935080821115620005a457600080fd5b50620005b38a828b016200042e565b91505092959891949750929550565b634e487b7160e01b600052603260045260246000fd5b60006001600160401b038281166002600160401b031981016200060b57634e487b7160e01b600052601160045260246000fd5b6001019392505050565b60805160a0516135a0620006576000396000818161081d01528181611d5a0152611e8f01526000818161076d015281816112b00152611b9801526135a06000f3fe6080604052600436106102505760003560e01c806395d376d711610139578063cd88b903116100b6578063e395eb5c1161007a578063e395eb5c1461080b578063f010cb231461083f578063f3b4ebd01461085f578063f42ed2ed1461087f578063fd62e75014610892578063fdb9b0f1146108b257600080fd5b8063cd88b9031461073b578063cf34c7681461075b578063d2ae2104146107a4578063d547741f146107cb578063dafe0ccc146107eb57600080fd5b8063c358de0a116100fd578063c358de0a14610688578063c416aa51146106a8578063c5e193cd146106cd578063c7a823e0146106ed578063c7b2370b1461071b57600080fd5b806395d376d71461058b5780639e9449651461059e578063a217fddf14610623578063aef18bf714610638578063b143044b1461066857600080fd5b806330bb3aac116101d25780635c975abb116101965780635c975abb146104ab578063724e78da146104c3578063736c0d5b146104e3578063741bef1a146105135780638585c9451461054b57806391d148541461056b57600080fd5b806330bb3aac1461040b57806331cb61051461042b57806336568abe1461044b57806352d3b8711461046b5780635553fb8e1461048b57600080fd5b80631703a018116102195780631703a01814610321578063248a9ca31461036057806326e67a371461039e5780632de11376146103cb5780632f2ff15d146103eb57600080fd5b8062bf2e801461025557806301e336671461028f57806301ffc9a7146102b15780631095b6d7146102e157806316c38b3c14610301575b600080fd5b34801561026157600080fd5b5060015461027790600160e81b900461ffff1681565b60405161ffff90911681526020015b60405180910390f35b34801561029b57600080fd5b506102af6102aa366004612893565b6108d2565b005b3480156102bd57600080fd5b506102d16102cc3660046128d4565b6108fb565b6040519015158152602001610286565b3480156102ed57600080fd5b506102af6102fc366004612893565b610932565b34801561030d57600080fd5b506102af61031c366004612915565b610a34565b34801561032d57600080fd5b5060055461034890600160401b90046001600160401b031681565b6040516001600160401b039091168152602001610286565b34801561036c57600080fd5b5061039061037b366004612930565b60009081526020819052604090206001015490565b604051908152602001610286565b3480156103aa57600080fd5b506103be6103b936600461295d565b610a59565b6040516102869190612978565b3480156103d757600080fd5b506102d16103e63660046129bf565b610ae0565b3480156103f757600080fd5b506102af6104063660046129dc565b610b65565b34801561041757600080fd5b50610390610426366004612a6b565b610c3a565b34801561043757600080fd5b506102af610446366004612ae2565b610d52565b34801561045757600080fd5b506102af6104663660046129dc565b610d7c565b34801561047757600080fd5b506102af610486366004612b17565b610d95565b34801561049757600080fd5b506103906104a6366004612b9d565b610f0e565b3480156104b757600080fd5b5060015460ff166102d1565b3480156104cf57600080fd5b506102af6104de3660046129bf565b611026565b3480156104ef57600080fd5b506102d16104fe3660046129bf565b60046020526000908152604090205460ff1681565b34801561051f57600080fd5b50600254610533906001600160a01b031681565b6040516001600160a01b039091168152602001610286565b34801561055757600080fd5b506102af610566366004612bf3565b611094565b34801561057757600080fd5b506102d16105863660046129dc565b6110c0565b610390610599366004612c26565b6110e9565b3480156105aa57600080fd5b506105f26105b936600461295d565b6006602052600090815260409020546001600160401b03811690600160401b810461ffff1690600160501b90046001600160801b031683565b604080516001600160401b03909416845261ffff90921660208401526001600160801b031690820152606001610286565b34801561062f57600080fd5b50610390600081565b34801561064457600080fd5b506102d1610653366004612930565b60076020526000908152604090205460ff1681565b34801561067457600080fd5b506102af610683366004612cd2565b61125f565b34801561069457600080fd5b506102af6106a3366004612d13565b611514565b3480156106b457600080fd5b506001546105339061010090046001600160a01b031681565b3480156106d957600080fd5b506103906106e8366004612b9d565b61157c565b3480156106f957600080fd5b5061070d610708366004612d2e565b6116e9565b604051610286929190612d82565b34801561072757600080fd5b506102af6107363660046129bf565b6118c7565b34801561074757600080fd5b506102af610756366004612db6565b611935565b34801561076757600080fd5b5061078f7f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff9091168152602001610286565b3480156107b057600080fd5b5060015461034890600160a81b90046001600160401b031681565b3480156107d757600080fd5b506102af6107e63660046129dc565b611974565b3480156107f757600080fd5b506102af610806366004612893565b611a28565b34801561081757600080fd5b5061078f7f000000000000000000000000000000000000000000000000000000000000000081565b34801561084b57600080fd5b5061039061085a366004612dfb565b611add565b34801561086b57600080fd5b506102af61087a366004612e65565b611b19565b61039061088d366004612ea1565b611cc7565b34801561089e57600080fd5b50600554610348906001600160401b031681565b3480156108be57600080fd5b506103906108cd366004612ea1565b611e14565b60008051602061352b8339815191526108ea81611f45565b6108f5848484611f4f565b50505050565b60006001600160e01b03198216637965db0b60e01b148061092c57506301ffc9a760e01b6001600160e01b03198316145b92915050565b60008051602061352b83398151915261094a81611f45565b61096260008051602061350b833981519152856110c0565b61097f57604051635ee08b9760e01b815260040160405180910390fd5b604051637ecdf29160e11b81526001600160a01b0384811660048301526024820184905285169063fd9be52290604401600060405180830381600087803b1580156109c957600080fd5b505af11580156109dd573d6000803e3d6000fd5b5050604080516001600160a01b038089168252871660208201529081018590527f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb925060600190505b60405180910390a150505050565b6000610a3f81611f45565b8115610a5157610a4d611f77565b5050565b610a4d611fcb565b63ffffffff8116600090815260036020908152604091829020805483518184028101840190945280845260609392830182828015610ad457602002820191906000526020600020906000905b825461010083900a900460ff16815260206001928301818104948501949093039092029101808411610aa55790505b50505050509050919050565b6000610b0c7f4270fae16c6d150d00e80b689daca99e8073b1838ff2b6063a37be9d851283e4836110c0565b15610b1957506000919050565b600154600160a81b90046001600160401b03161580610b4b5750610b4b60008051602061354b833981519152836110c0565b15610b5857506001919050565b506000919050565b919050565b8160008051602061354b833981519152811480610ba157507f4270fae16c6d150d00e80b689daca99e8073b1838ff2b6063a37be9d851283e481145b80610bb9575060008051602061350b83398151915281145b15610be357303314610bde57604051637d5d391d60e11b815260040160405180910390fd5b610c30565b60008051602061352b8339815191528103610c0f57610bde60008051602061352b833981519152611f45565b604051634a7ee1b960e11b8152600481018290526024015b60405180910390fd5b6108f58383612004565b600083610c4681610ae0565b610c6357604051634ab5ebcd60e01b815260040160405180910390fd5b6040805160c0810182526002546001600160a01b03908116825263ffffffff8a1660208084018290526001600160401b03808c16858701528a84166060860152600554600160401b900416608085015260015461ffff600160e81b82041660a086015260009283526006909152908490209351637bfa20a960e01b8152929361010090910490911691637bfa20a991610d05918591908a908a90600401613004565b602060405180830381865afa158015610d22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d469190613034565b98975050505050505050565b303314610d7257604051637d5d391d60e11b815260040160405180910390fd5b610a4d8282612088565b60405163dec9f03160e01b815260040160405180910390fd5b60008051602061352b833981519152610dad81611f45565b60005b82811015610ecf5736848483818110610dcb57610dcb61304d565b90506080020190506040518060600160405280826020016020810190610df19190612bf3565b6001600160401b03168152602001610e0f6060840160408501612d13565b61ffff168152602001610e28608084016060850161307a565b6001600160801b0316905260066000610e44602085018561295d565b63ffffffff1681526020808201929092526040908101600020835181549385015194909201516001600160801b0316600160501b026fffffffffffffffffffffffffffffffff60501b1961ffff909516600160401b0269ffffffffffffffffffff199094166001600160401b0390931692909217929092179290921691909117905550600101610db0565b507f7dd21e42791b013d1929e86f0c59085e4fca24251f0f1aa81917b3b1611766e08383604051610f01929190613095565b60405180910390a1505050565b600081610f1a81610ae0565b610f3757604051634ab5ebcd60e01b815260040160405180910390fd5b6040805160c0810182526002546001600160a01b03908116825261ffff808a1660208085018290526001600160401b03808b16868801528985166060870152600554600160401b9004166080860152600154600160e81b810490931660a0860152600091825260068152858220865191820187529181529451637bfa20a960e01b8152939461010090920490921692637bfa20a992610fda92869260040161316f565b602060405180830381865afa158015610ff7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061101b9190613034565b979650505050505050565b60008051602061352b83398151915261103e81611f45565b600280546001600160a01b0319166001600160a01b0384169081179091556040519081527ff724a45d041687842411f2b977ef22ab8f43c8f1104f4592b42a00f9b34a643d906020015b60405180910390a15050565b3033146110b457604051637d5d391d60e11b815260040160405180910390fd5b6110bd816121e3565b50565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b600060008051602061350b83398151915261110381611f45565b61111360a08601608087016129bf565b61111c81610ae0565b61113957604051634ab5ebcd60e01b815260040160405180910390fd5b6040805160c081019091526002546001600160a01b03168152600090602080820190611167908a018a61295d565b63ffffffff16815260200161118260808a0160608b01612bf3565b6001600160401b031681526020016111a060a08a0160808b016129bf565b6001600160a01b039081168252600554600160401b90046001600160401b0316602080840191909152600154600160e81b810461ffff16604090940193909352929350610100909104169063df2b057e908390600690600090611205908d018d61295d565b63ffffffff1663ffffffff16815260200190815260200160002089896040518563ffffffff1660e01b81526004016112409493929190613004565b6020604051808303816000875af1158015610ff7573d6000803e3d6000fd5b60008051602061352b83398151915261127781611f45565b60005b828110156108f557368484838181106112955761129561304d565b90506020028101906112a791906131a8565b905063ffffffff7f0000000000000000000000000000000000000000000000000000000000000000166112dd602083018361295d565b63ffffffff16146112ee575061150c565b428160600135116112ff575061150c565b6000611338611311602084018461295d565b61132160408501602086016129bf565b61132e60408601866131c8565b8660600135611add565b9050600061134d8261070860808601866131c8565b50905080611390576040518481527fd6d90193101048cc1b6edcdc2348f5acf7a4a4a97d3e7b668b74cb7602ab3ebc9060200160405180910390a150505061150c565b60006113b06113a260408601866131c8565b6113ab9161320e565b6122b1565b9050801561142b5760008381526007602052604090205460ff1615611411577f9bb9bddbdf537a2104255307230b323d7982f4512ee8e5bd15df62ddca50ab978484604051611400929190613283565b60405180910390a15050505061150c565b6000838152600760205260409020805460ff191660011790555b60008061143e60408701602088016129bf565b6001600160a01b031661145460408801886131c8565b60405161146292919061331e565b6000604051808303816000865af19150503d806000811461149f576040519150601f19603f3d011682016040523d82523d6000602084013e6114a4565b606091505b5091509150816115055782156114cb576000858152600760205260409020805460ff191690555b7fdc8cdd96296241bbefda4a8e18ad2e0985a8da6495b34d409cfc4c886ee3b0cf87826040516114fc92919061332e565b60405180910390a15b5050505050505b60010161127a565b60008051602061352b83398151915261152c81611f45565b6001805461ffff60e81b1916600160e81b61ffff8516908102919091179091556040519081527f7af0ac740036ffb1c97b03697859d729e80a44ae5030543d64971c313565ab4d90602001611088565b600060008051602061350b83398151915261159681611f45565b826115a081610ae0565b6115bd57604051634ab5ebcd60e01b815260040160405180910390fd5b6040805160c0810182526002546001600160a01b03908116825261ffff808b1660208085018290526001600160401b03808c16868801528a85166060870152600554600160401b9004166080860152600154600160e81b810490931660a0860152600091825260068152858220865191820187529181529451636f9582bf60e11b815293946101009092049092169263df2b057e9261166092869260040161316f565b6020604051808303816000875af115801561167f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116a39190613034565b93507f87e46b0a6199bc734632187269a103c05714ee0adae5b28f30723955724f37ef846040516116d691815260200190565b60405180910390a1505050949350505050565b600554600090819061170c90600160401b90046001600160401b0316604161335d565b831461171e57506000905060016118bf565b6000611777866040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b90506000805b600554600160401b90046001600160401b03168110156118b35736600088886117a785604161335d565b906117b3866001613374565b6117be90604161335d565b926117cb93929190613387565b915091506000806118128785858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061230792505050565b509092509050600081600381111561182c5761182c612d6c565b14611845576000600198509850505050505050506118bf565b856001600160a01b0316826001600160a01b031611611872576000600298509850505050505050506118bf565b6001600160a01b03821660009081526004602052604090205460ff166118a6576000600398509850505050505050506118bf565b509350505060010161177d565b50600160009350935050505b935093915050565b60008051602061352b8339815191526118df81611f45565b60018054610100600160a81b0319166101006001600160a01b038516908102919091179091556040519081527f1399be28223800f8669b3ba5f8721d9fc16fc4e8d0bbf98378791c8c5a3015e090602001611088565b60008051602061352b83398151915261194d81611f45565b63ffffffff8416600090815260036020526040902061196d9084846127c0565b5050505050565b8160008051602061354b8339815191528114806119b057507f4270fae16c6d150d00e80b689daca99e8073b1838ff2b6063a37be9d851283e481145b806119c8575060008051602061350b83398151915281145b156119f2573033146119ed57604051637d5d391d60e11b815260040160405180910390fd5b611a1e565b60008051602061352b8339815191528103610c0f576119ed60008051602061352b833981519152611f45565b6108f58383612354565b60008051602061352b833981519152611a4081611f45565b611a5860008051602061350b833981519152856110c0565b611a7557604051635ee08b9760e01b815260040160405180910390fd5b6040516303d8c5ef60e11b81526001600160a01b038481166004830152602482018490528516906307b18bde90604401600060405180830381600087803b158015611abf57600080fd5b505af1158015611ad3573d6000803e3d6000fd5b5050505050505050565b60008585838686604051602001611af89594939291906133b1565b60405160208183030381529060405280519060200120905095945050505050565b42816060013511611b3d57604051630bbaf26360e01b815260040160405180910390fd5b30611b4e60408301602084016129bf565b6001600160a01b031614611b9157611b6c60408201602083016129bf565b604051631ce0bfcd60e01b81526001600160a01b039091166004820152602401610c27565b63ffffffff7f000000000000000000000000000000000000000000000000000000000000000016611bc5602083018361295d565b63ffffffff1614611bff57611bdd602082018261295d565b60405163134bf0e160e11b815263ffffffff9091166004820152602401610c27565b6000611c11611311602084018461295d565b90506000611c268261070860808601866131c8565b50905080611c4757604051630af656f760e11b815260040160405180910390fd5b60008281526007602052604090205460ff1615611c7a57604051634eb522d360e11b815260048101839052602401610c27565b60008281526007602052604090819020805460ff191660011790556108f59060008051602061352b83398151915290611cb5908601866131c8565b810190611cc291906129bf565b612004565b600060008051602061350b833981519152611ce181611f45565b88611ceb81610ae0565b611d0857604051634ab5ebcd60e01b815260040160405180910390fd5b604080516080810182526002546001600160a01b0390811682528c8116602080840191909152600554600160401b90046001600160401b031683850152600154600160e81b810461ffff1660608501527f000000000000000000000000000000000000000000000000000000000000000063ffffffff166000908152600690925290849020935163bbc5a33b60e01b815292936101009091049091169163bbc5a33b91611dc2918591908d908d908d908d906004016133f7565b6020604051808303816000875af1158015611de1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e059190613034565b9b9a5050505050505050505050565b600087611e2081610ae0565b611e3d57604051634ab5ebcd60e01b815260040160405180910390fd5b604080516080810182526002546001600160a01b0390811682528b8116602080840191909152600554600160401b90046001600160401b031683850152600154600160e81b810461ffff1660608501527f000000000000000000000000000000000000000000000000000000000000000063ffffffff166000908152600690925290849020935162d358b360e81b815292936101009091049091169163d358b30091611ef6918591908c908c908c908c906004016133f7565b602060405180830381865afa158015611f13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f379190613034565b9a9950505050505050505050565b6110bd81336123cc565b6001600160a01b038316611f6c57611f678282612405565b505050565b611f678383836124b2565b611f7f6124ed565b6001805460ff1916811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b6040516001600160a01b03909116815260200160405180910390a1565b611fd3612513565b6001805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33611fae565b600060008051602061354b8339815191528314801561202a575061202883836110c0565b155b15612074576001805460159061204f90600160a81b90046001600160401b031661347a565b91906101000a8154816001600160401b0302191690836001600160401b031602179055505b61207e8383612536565b5060019392505050565b6001600160a01b03821660009081526004602052604090205481151560ff9091161515036120dc576040516302c6469560e51b81526001600160a01b03831660048201528115156024820152604401610c27565b6001600160a01b0382166000908152600460205260408120805460ff1916831515179055816121225760055461211d906001906001600160401b03166134a0565b612139565b600554612139906001600160401b031660016134c7565b6005549091506001600160401b03600160401b9091048116908216811115612187576040516378e2c15760e11b81526001600160401b03808416600483015282166024820152604401610c27565b6005805467ffffffffffffffff19166001600160401b038416179055604080516001600160a01b038616815284151560208201527f863d338cad74814b108a06288ad5e0e80d56495e0332238b1d2cdcfa0ca8e5ce9101610a26565b806001600160401b031660000361220d57604051635f86e17760e01b815260040160405180910390fd5b6005546001600160401b03908116908216811015612251576040516378e2c15760e11b81526001600160401b03808316600483015283166024820152604401610c27565b600580546fffffffffffffffff00000000000000001916600160401b6001600160401b038516908102919091179091556040519081527fb600f3cf7f38a4b49bb0c75f722ef69f7e3e39ef3bb4aa8207fd86e724a2324990602001611088565b60006001600160e01b03198216630111a9b760e11b148015906122e557506001600160e01b0319821663ab750e7560e01b14155b801561092c57506001600160e01b0319821663704316e560e01b141592915050565b600080600083516041036123415760208401516040850151606086015160001a612333888285856125c8565b95509550955050505061234d565b50508151600091506002905b9250925092565b600060008051602061354b83398151915283148015612378575061237883836110c0565b156123c2576001805460159061239d90600160a81b90046001600160401b03166134e7565b91906101000a8154816001600160401b0302191690836001600160401b031602179055505b61207e8383612697565b6123d682826110c0565b610a4d5760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401610c27565b6001600160a01b03821661242c576040516306b7a93160e41b815260040160405180910390fd5b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612479576040519150601f19603f3d011682016040523d82523d6000602084013e61247e565b606091505b5050905080611f6757604051631196f20d60e21b81526001600160a01b038416600482015260248101839052604401610c27565b6001600160a01b0382166124d9576040516306b7a93160e41b815260040160405180910390fd5b611f676001600160a01b0384168383612702565b60015460ff16156125115760405163d93c066560e01b815260040160405180910390fd5b565b60015460ff1661251157604051638dfc202b60e01b815260040160405180910390fd5b600061254283836110c0565b6125c0576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556125783390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161092c565b50600061092c565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115612603575060009150600390508261268d565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015612657573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166126835750600092506001915082905061268d565b9250600091508190505b9450945094915050565b60006126a383836110c0565b156125c0576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161092c565b604080516001600160a01b03841660248201526044808201849052825180830390910181526064909101909152602080820180516001600160e01b031663a9059cbb60e01b1781528251611f67938793909260009283929183919082885af180612772576040513d6000823e3d81fd5b50506000513d9150811561278a578060011415612797565b6001600160a01b0384163b155b156108f557604051635274afe760e01b81526001600160a01b0385166004820152602401610c27565b82805482825590600052602060002090601f016020900481019282156128595791602002820160005b8382111561282a57833560ff1683826101000a81548160ff021916908360ff16021790555092602001926001016020816000010492830192600103026127e9565b80156128575782816101000a81549060ff021916905560010160208160000104928301926001030261282a565b505b50612865929150612869565b5090565b5b80821115612865576000815560010161286a565b6001600160a01b03811681146110bd57600080fd5b6000806000606084860312156128a857600080fd5b83356128b38161287e565b925060208401356128c38161287e565b929592945050506040919091013590565b6000602082840312156128e657600080fd5b81356001600160e01b0319811681146128fe57600080fd5b9392505050565b80358015158114610b6057600080fd5b60006020828403121561292757600080fd5b6128fe82612905565b60006020828403121561294257600080fd5b5035919050565b803563ffffffff81168114610b6057600080fd5b60006020828403121561296f57600080fd5b6128fe82612949565b6020808252825182820181905260009190848201906040850190845b818110156129b357835160ff1683529284019291840191600101612994565b50909695505050505050565b6000602082840312156129d157600080fd5b81356128fe8161287e565b600080604083850312156129ef57600080fd5b823591506020830135612a018161287e565b809150509250929050565b80356001600160401b0381168114610b6057600080fd5b60008083601f840112612a3557600080fd5b5081356001600160401b03811115612a4c57600080fd5b602083019150836020828501011115612a6457600080fd5b9250929050565b600080600080600060808688031215612a8357600080fd5b612a8c86612949565b9450612a9a60208701612a0c565b93506040860135612aaa8161287e565b925060608601356001600160401b03811115612ac557600080fd5b612ad188828901612a23565b969995985093965092949392505050565b60008060408385031215612af557600080fd5b8235612b008161287e565b9150612b0e60208401612905565b90509250929050565b60008060208385031215612b2a57600080fd5b82356001600160401b0380821115612b4157600080fd5b818501915085601f830112612b5557600080fd5b813581811115612b6457600080fd5b8660208260071b8501011115612b7957600080fd5b60209290920196919550909350505050565b803561ffff81168114610b6057600080fd5b60008060008060808587031215612bb357600080fd5b612bbc85612b8b565b9350612bca60208601612b8b565b9250612bd860408601612a0c565b91506060850135612be88161287e565b939692955090935050565b600060208284031215612c0557600080fd5b6128fe82612a0c565b600060a08284031215612c2057600080fd5b50919050565b600080600060408486031215612c3b57600080fd5b83356001600160401b0380821115612c5257600080fd5b612c5e87838801612c0e565b94506020860135915080821115612c7457600080fd5b50612c8186828701612a23565b9497909650939450505050565b60008083601f840112612ca057600080fd5b5081356001600160401b03811115612cb757600080fd5b6020830191508360208260051b8501011115612a6457600080fd5b60008060208385031215612ce557600080fd5b82356001600160401b03811115612cfb57600080fd5b612d0785828601612c8e565b90969095509350505050565b600060208284031215612d2557600080fd5b6128fe82612b8b565b600080600060408486031215612d4357600080fd5b8335925060208401356001600160401b03811115612d6057600080fd5b612c8186828701612a23565b634e487b7160e01b600052602160045260246000fd5b82151581526040810160048310612da957634e487b7160e01b600052602160045260246000fd5b8260208301529392505050565b600080600060408486031215612dcb57600080fd5b612dd484612949565b925060208401356001600160401b03811115612def57600080fd5b612c8186828701612c8e565b600080600080600060808688031215612e1357600080fd5b612e1c86612949565b94506020860135612e2c8161287e565b935060408601356001600160401b03811115612e4757600080fd5b612e5388828901612a23565b96999598509660600135949350505050565b600060208284031215612e7757600080fd5b81356001600160401b03811115612e8d57600080fd5b612e9984828501612c0e565b949350505050565b60008060008060008060006080888a031215612ebc57600080fd5b8735612ec78161287e565b965060208801356001600160401b0380821115612ee357600080fd5b612eef8b838c01612a23565b909850965060408a0135915080821115612f0857600080fd5b612f148b838c01612a23565b909650945060608a0135915080821115612f2d57600080fd5b50612f3a8a828b01612a23565b989b979a50959850939692959293505050565b60018060a01b0380825116835263ffffffff602083015116602084015260408201516001600160401b03808216604086015282606085015116606086015280608085015116608086015250505061ffff60a08201511660a08301525050565b546001600160401b0381168252604081811c61ffff16602084015260509190911c6001600160801b0316910152565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60006101406130138388612f4d565b61302060c0840187612fac565b8061012084015261101b8184018587612fdb565b60006020828403121561304657600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b80356001600160801b0381168114610b6057600080fd5b60006020828403121561308c57600080fd5b6128fe82613063565b6020808252818101839052600090604080840186845b8781101561311c5763ffffffff6130c183612949565b1683526001600160401b036130d7868401612a0c565b168584015261ffff6130ea858401612b8b565b168484015260606001600160801b03613104828501613063565b169084015260809283019291909101906001016130ab565b5090979650505050505050565b6000815180845260005b8181101561314f57602081850181015186830182015201613133565b506000602082860101526020601f19601f83011685010191505092915050565b600061014061317e8387612f4d565b61318b60c0840186612fac565b8061012084015261319e81840185613129565b9695505050505050565b60008235609e198336030181126131be57600080fd5b9190910192915050565b6000808335601e198436030181126131df57600080fd5b8301803591506001600160401b038211156131f957600080fd5b602001915036819003821315612a6457600080fd5b6001600160e01b031981358181169160048510156132365780818660040360031b1b83161692505b505092915050565b6000808335601e1984360301811261325557600080fd5b83016020810192503590506001600160401b0381111561327457600080fd5b803603821315612a6457600080fd5b6040815263ffffffff61329584612949565b166040820152600060208401356132ab8161287e565b6001600160a01b031660608301526132c6604085018561323e565b60a060808501526132db60e085018284612fdb565b915050606085013560a08401526132f5608086018661323e565b848303603f190160c086015261330c838284612fdb565b93505050508260208301529392505050565b8183823760009101908152919050565b828152604060208201526000612e996040830184613129565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761092c5761092c613347565b8082018082111561092c5761092c613347565b6000808585111561339757600080fd5b838611156133a457600080fd5b5050820193919092039150565b63ffffffff60e01b8660e01b1681526bffffffffffffffffffffffff198560601b1660048201528360188201528183603883013760009101603801908152949350505050565b600061012060018060a01b03808a511684528060208b0151166020850152506001600160401b0360408a015116604084015261ffff60608a01511660608401526134446080840189612fac565b8060e08401526134578184018789612fdb565b905082810361010084015261346d818587612fdb565b9998505050505050505050565b60006001600160401b0380831681810361349657613496613347565b6001019392505050565b6001600160401b038281168282160390808211156134c0576134c0613347565b5092915050565b6001600160401b038181168382160190808211156134c0576134c0613347565b60006001600160401b0382168061350057613500613347565b600019019291505056fe724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19dea49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177574845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bcaa264697066735822122024327161ffb7d62bcb3e3b78be45b9ccbc1a11373295fe0f97bd10b71bcadb8164736f6c6343000816003360c06040523480156200001157600080fd5b5060405162001eb638038062001eb68339810160408190526200003491620000cb565b33806200005b57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b62000066816200007b565b5063ffffffff90911660a05260805262000104565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008060408385031215620000df57600080fd5b825163ffffffff81168114620000f457600080fd5b6020939093015192949293505050565b60805160a051611d7e620001386000396000818161069001526106ff0152600081816107cd0152610ab80152611d7e6000f3fe6080604052600436106100ec5760003560e01c80638da5cb5b1161008a578063de0a93c311610059578063de0a93c3146102f7578063df2b057e1461033d578063f2fde38b14610350578063f5ff608f1461037057600080fd5b80638da5cb5b1461027c5780639ac23d28146102a4578063bbc5a33b146102c4578063d358b300146102d757600080fd5b806339f26dfc116100c657806339f26dfc1461020657806354fd4d5014610226578063715018a6146102475780637bfa20a91461025c57600080fd5b806301e33667146100f857806310b65f761461011a5780632565c2451461016057600080fd5b366100f357005b600080fd5b34801561010457600080fd5b506101186101133660046115c3565b610390565b005b34801561012657600080fd5b5061014d610135366004611611565b63ffffffff1660009081526001602052604090205490565b6040519081526020015b60405180910390f35b34801561016c57600080fd5b506101c761017b366004611611565b60036020526000908152604090205463ffffffff808216916001600160401b036401000000008204811692600160601b830490911691600160a01b8104821691600160c01b9091041685565b6040805163ffffffff96871681526001600160401b0395861660208201529390941693830193909352831660608201529116608082015260a001610157565b34801561021257600080fd5b5061011861022136600461165e565b6103a8565b34801561023257600080fd5b50604080516001808252602082015201610157565b34801561025357600080fd5b506101186103fa565b34801561026857600080fd5b5061014d610277366004611701565b61040e565b34801561028857600080fd5b506000546040516001600160a01b039091168152602001610157565b3480156102b057600080fd5b506101186102bf36600461176c565b61059b565b61014d6102d2366004611833565b610642565b3480156102e357600080fd5b5061014d6102f2366004611833565b61065d565b34801561030357600080fd5b50600254604080516001600160781b038084168252600160781b8404166020820152600160f01b90920461ffff1690820152606001610157565b61014d61034b366004611701565b610857565b34801561035c57600080fd5b5061011861036b3660046118ce565b61086e565b34801561037c57600080fd5b5061011861038b3660046118e9565b6108ac565b610398610929565b6103a3838383610956565b505050565b6103b0610929565b6002805461ffff909216600160f01b026001600160f01b036001600160781b03948516600160781b026001600160f01b031990941694909516939093179190911792909216179055565b610402610929565b61040c6000610979565b565b600061041d6020850185611972565b6001600160401b03166000036104645761043d6040860160208701611611565b60405163680489c560e11b815263ffffffff90911660048201526024015b60405180910390fd5b61046e83836109c9565b50600061049261048460a0880160808901611972565b6001600160401b0316610a3b565b90506000806104a460208901896118ce565b6001600160a01b03166388a4124c6104c260408b0160208c01611611565b856104d060208c018c611972565b6040516001600160e01b031960e086901b16815263ffffffff93909316600484015260248301919091526001600160401b03166044820152606401608060405180830381865afa158015610528573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061054c91906119a4565b93505050915061058f8288602001602081019061056991906119f9565b61057960c08c0160a08d016119f9565b61058960608c0160408d01611a14565b85610a49565b98975050505050505050565b6105a3610929565b8281146105c3576040516316a9d98760e31b815260040160405180910390fd5b60005b8381101561063b578282828181106105e0576105e0611a31565b905060a00201600360008787858181106105fc576105fc611a31565b90506020020160208101906106119190611611565b63ffffffff16815260208101919091526040016000206106318282611a54565b50506001016105c6565b5050505050565b600061065287878787878761065d565b979650505050505050565b600061066c6020870187611972565b6001600160401b03166000036106bd5760405163680489c560e11b815263ffffffff7f000000000000000000000000000000000000000000000000000000000000000016600482015260240161045b565b6106c783836109c9565b5060006106dd61048460608a0160408b01611972565b90506000806106ef60208b018b6118ce565b6001600160a01b03166388a4124c7f00000000000000000000000000000000000000000000000000000000000000008561072c60208e018e611972565b6040516001600160e01b031960e086901b16815263ffffffff93909316600484015260248301919091526001600160401b03166044820152606401608060405180830381865afa158015610784573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107a891906119a4565b93505050915060006107ba8989610b1d565b905060006001600160801b0383166107f27f000000000000000000000000000000000000000000000000000000000000000084611b65565b6107fc9190611b92565b905061084761080b8286611ba6565b61081b60408e0160208f016119f9565b8e606001602081019061082e91906119f9565b8e60400160208101906108419190611a14565b87610a49565b9c9b505050505050505050505050565b60006108658585858561040e565b95945050505050565b610876610929565b6001600160a01b0381166108a057604051631e4fbdf760e01b81526000600482015260240161045b565b6108a981610979565b50565b6108b4610929565b60005b818110156103a3578282828181106108d1576108d1611a31565b90506040020160200135600160000160008585858181106108f4576108f4611a31565b61090a9260206040909202019081019150611611565b63ffffffff1681526020810191909152604001600020556001016108b7565b6000546001600160a01b0316331461040c5760405163118cdaa760e01b815233600482015260240161045b565b6001600160a01b03831661096e576103a38282610bc7565b6103a3838383610c74565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000808215610a0c576000806109e0868685610caf565b604051637085244b60e01b815260ff85166004820152909650929450859350506024909101905061045b565b808314610a2f5760405163013adb8360e21b81526004810182905260240161045b565b60009150505b92915050565b6000610a3582610120610d09565b60008061ffff861615610a5c5785610a5e565b845b90506000612710610a7361ffff84168a611b65565b610a7d9190611b92565b90506001600160801b0384161580610a9c57506001600160801b038516155b15610aaa5791506108659050565b6000846001600160801b03167f0000000000000000000000000000000000000000000000000000000000000000876001600160801b0316610aeb9190611b65565b610af59190611b92565b610aff908a611ba6565b9050818111610b0e5781610b10565b805b9998505050505050505050565b600080610b2d8484610d6e610f31565b6002548151919250610b4e916001600160781b039091169061ffff16611bb9565b6001600160781b03169150806020015115610b965760025461271090610b7f90600160f01b900461ffff1684611b65565b610b899190611b92565b610b939083611ba6565b91505b806040015115610bc057600254610bbd90600160781b90046001600160781b031683611ba6565b91505b5092915050565b6001600160a01b038216610bee576040516306b7a93160e41b815260040160405180910390fd5b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114610c3b576040519150601f19603f3d011682016040523d82523d6000602084013e610c40565b606091505b50509050806103a357604051631196f20d60e21b81526001600160a01b03841660048201526024810183905260440161045b565b6001600160a01b038216610c9b576040516306b7a93160e41b815260040160405180910390fd5b6103a36001600160a01b0384168383611433565b600036816001840181610cc3888884611485565b6002830192909150610cdb90899089906003016114ac565b94506002820161ffff82168301610cf481838b8d611be4565b979b909a50969850505061ffff160193505050565b600080610d17604185611b65565b9050610d24602082611c0e565b15610d4c57610d34602082611c0e565b610d3e9082611c22565b610d49906020611ba6565b90505b80610d5984610104611ba6565b610d639190611ba6565b610bbd906020611ba6565b610d7a600185836114d1565b610d8760018560026114f9565b15610f2b5763ffffffff808516600090815260036020908152604091829020825160a081018452905480851682526001600160401b036401000000008204811693830193909352600160601b810490921692810192909252600160a01b810483166060830152600160c01b90049091166080820152828415610eab5781602001516001600160401b0316846001600160401b03161115610e6757815160208301516103e89163ffffffff1690610e3d9087611c35565b610e479190611c55565b610e519190611c78565b8260400151610e609190611c9e565b9050610eab565b6103e8826000015163ffffffff16858460200151610e859190611c35565b610e8f9190611c55565b610e999190611c78565b8260400151610ea89190611c35565b90505b42826060015163ffffffff1682610ec29190611c9e565b6001600160401b03161080610ef357506080820151610ee79063ffffffff1642611ba6565b816001600160401b0316115b15610f2857604051630c5a8d2360e01b815263ffffffff871660048201526001600160401b038216602482015260440161045b565b50505b50505050565b604080516060810182526000808252602082018190529181018290529080858186610f5d826002611ba6565b92610f6a93929190611be4565b610f7391611cbe565b60f01c9050610f83600283611ba6565b915061ffff8116600114610faa5760405163a9146eeb60e01b815260040160405180910390fd5b610fb5600283611ba6565b91506000868387610fc7826002611ba6565b92610fd493929190611be4565b610fdd91611cbe565b60f01c9050610fed600284611ba6565b92508061ffff16600003611014576040516387a7f37960e01b815260040160405180910390fd5b61ffff1683525060005b826000015161ffff168161ffff16101561121d57600086868481811061104657611046611a31565b919091013560f81c915061105d9050600184611ba6565b925060ff81166001146110835760405163a9146eeb60e01b815260040160405180910390fd5b61108e600284611ba6565b925060008784886110a0826002611ba6565b926110ad93929190611be4565b6110b691611cbe565b60f01c90506110c6600285611ba6565b935060001961ffff8216016111fa5760008885896110e5826002611ba6565b926110f293929190611be4565b6110fb91611cbe565b60f01c905061110b600286611ba6565b94508460008a828b61111e826004611ba6565b9261112b93929190611be4565b61113491611cec565b60e01c9050611144600483611ba6565b915060008b8b8481811061115a5761115a611a31565b600192013560f81c8214925061117291905084611ba6565b925060008c848d611184826008611ba6565b9261119193929190611be4565b61119a91611d1a565b60c01c90506111b083838360008f63ffffffff16565b508a92506111c591505061ffff831687611ba6565b11156111e4576040516387a7f37960e01b815260040160405180910390fd5b6111f261ffff821686611ba6565b945050611213565b60405163b968846160e01b815260040160405180910390fd5b505060010161101e565b508381101561140b57600085858381811061123a5761123a611a31565b919091013560f81c91506112519050600183611ba6565b915060ff81166001146112775760405163a9146eeb60e01b815260040160405180910390fd5b6000868387611287826002611ba6565b9261129493929190611be4565b61129d91611cbe565b60f01c90506112ad600284611ba6565b925061ffff81166001146112d45760405163b968846160e01b815260040160405180910390fd5b60008787858181106112e8576112e8611a31565b919091013560f81c91506112ff9050600185611ba6565b935060ff81166113155760016020860152611348565b60001960ff82160161132d5760016040860152611348565b60011960ff8216016111fa5760016020860181905260408601525b6000888589611358826004611ba6565b9261136593929190611be4565b61136e91611cec565b60e01c905061137e600486611ba6565b9450600089898781811061139457611394611a31565b600192013560f81c821492506113ac91905087611ba6565b955060008a878b6113be826008611ba6565b926113cb93929190611be4565b6113d491611d1a565b60c01c90506113e4600888611ba6565b96506113f783838360018d63ffffffff16565b611402601688611ba6565b96505050505050505b80841461142b576040516387a7f37960e01b815260040160405180910390fd5b509392505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526103a3908490611527565b60006002820161149781848688611be4565b6114a091611cbe565b60f01c95945050505050565b60008383838181106114c0576114c0611a31565b919091013560f81c95945050505050565b6114dc8383836114f9565b6103a3576040516350fae9eb60e01b815260040160405180910390fd5b63ffffffff808316600090815260208590526040812054909161151f9190849061159816565b949350505050565b600080602060008451602086016000885af18061154a576040513d6000823e3d81fd5b50506000513d9150811561156257806001141561156f565b6001600160a01b0384163b155b15610f2b57604051635274afe760e01b81526001600160a01b038516600482015260240161045b565b600160ff919091161b16151590565b80356001600160a01b03811681146115be57600080fd5b919050565b6000806000606084860312156115d857600080fd5b6115e1846115a7565b92506115ef602085016115a7565b9150604084013590509250925092565b63ffffffff811681146108a957600080fd5b60006020828403121561162357600080fd5b813561162e816115ff565b9392505050565b80356001600160781b03811681146115be57600080fd5b803561ffff811681146115be57600080fd5b60008060006060848603121561167357600080fd5b61167c84611635565b925061168a60208501611635565b91506116986040850161164c565b90509250925092565b6000606082840312156116b357600080fd5b50919050565b60008083601f8401126116cb57600080fd5b5081356001600160401b038111156116e257600080fd5b6020830191508360208285010111156116fa57600080fd5b9250929050565b60008060008084860361014081121561171957600080fd5b60c081121561172757600080fd5b508493506117388660c087016116a1565b92506101208501356001600160401b0381111561175457600080fd5b611760878288016116b9565b95989497509550505050565b6000806000806040858703121561178257600080fd5b84356001600160401b038082111561179957600080fd5b818701915087601f8301126117ad57600080fd5b8135818111156117bc57600080fd5b8860208260051b85010111156117d157600080fd5b6020928301965094509086013590808211156117ec57600080fd5b818701915087601f83011261180057600080fd5b81358181111561180f57600080fd5b88602060a08302850101111561182457600080fd5b95989497505060200194505050565b60008060008060008086880361012081121561184e57600080fd5b608081121561185c57600080fd5b5086955061186d88608089016116a1565b945060e08701356001600160401b038082111561188957600080fd5b6118958a838b016116b9565b90965094506101008901359150808211156118af57600080fd5b506118bc89828a016116b9565b979a9699509497509295939492505050565b6000602082840312156118e057600080fd5b61162e826115a7565b600080602083850312156118fc57600080fd5b82356001600160401b038082111561191357600080fd5b818501915085601f83011261192757600080fd5b81358181111561193657600080fd5b8660208260061b850101111561194b57600080fd5b60209290920196919550909350505050565b6001600160401b03811681146108a957600080fd5b60006020828403121561198457600080fd5b813561162e8161195d565b6001600160801b03811681146108a957600080fd5b600080600080608085870312156119ba57600080fd5b8451935060208501516119cc8161198f565b60408601519093506119dd8161198f565b60608601519092506119ee8161198f565b939692955090935050565b600060208284031215611a0b57600080fd5b61162e8261164c565b600060208284031215611a2657600080fd5b813561162e8161198f565b634e487b7160e01b600052603260045260246000fd5b60008135610a35816115ff565b8135611a5f816115ff565b63ffffffff8116905081548163ffffffff1982161783556020840135611a848161195d565b6bffffffffffffffff000000008160201b16905080836bffffffffffffffffffffffff198416171784556040850135611abc8161195d565b67ffffffffffffffff60601b606091821b166001600160a01b03199390931693909317808217831785559285013591611af4836115ff565b63ffffffff60a01b1993909316179190911760a09190911b63ffffffff60a01b16178155611b4b611b2760808401611a47565b82805463ffffffff60c01b191660c09290921b63ffffffff60c01b16919091179055565b5050565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610a3557610a35611b4f565b634e487b7160e01b600052601260045260246000fd5b600082611ba157611ba1611b7c565b500490565b80820180821115610a3557610a35611b4f565b6001600160781b03818116838216028082169190828114611bdc57611bdc611b4f565b505092915050565b60008085851115611bf457600080fd5b83861115611c0157600080fd5b5050820193919092039150565b600082611c1d57611c1d611b7c565b500690565b81810381811115610a3557610a35611b4f565b6001600160401b03828116828216039080821115610bc057610bc0611b4f565b6001600160401b03818116838216028082169190828114611bdc57611bdc611b4f565b60006001600160401b0380841680611c9257611c92611b7c565b92169190910492915050565b6001600160401b03818116838216019080821115610bc057610bc0611b4f565b6001600160f01b03198135818116916002851015611bdc5760029490940360031b84901b1690921692915050565b6001600160e01b03198135818116916004851015611bdc5760049490940360031b84901b1690921692915050565b6001600160c01b03198135818116916008851015611bdc5760089490940360031b84901b169092169291505056fea2646970667358221220d34b7cf3109d1a09d2ef9d6586b9648c558d96c099d9868a56aea4afa7c4f88e64736f6c6343000816003360e06040523480156200001157600080fd5b506040516200191f3803806200191f833981016040819052620000349162000179565b33806200005b57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b620000668162000110565b50600180546001600160a01b0319166001600160a01b038481169190911790915581166080819052600060a0526040805163416ecebf60e01b8152905163416ecebf916004808201926020929091908290030181865afa158015620000cf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000f59190620001b8565b63ffffffff1660c052505060636003556064600455620001e7565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146200017657600080fd5b50565b600080604083850312156200018d57600080fd5b82516200019a8162000160565b6020840151909250620001ad8162000160565b809150509250929050565b600060208284031215620001cb57600080fd5b815163ffffffff81168114620001e057600080fd5b9392505050565b60805160a05160c0516116ec62000233600039600061038c015260006102fb0152600081816102c7015281816105d6015281816106df015281816108e50152610aa101526116ec6000f3fe60806040526004361061014f5760003560e01c8063715018a6116100b6578063996f79c01161006f578063996f79c014610447578063aec336e61461045d578063d80e9bd91461047d578063dabca063146104aa578063f2fde38b146104ca578063fd9be522146104ea57610156565b8063715018a614610365578063726075371461037a57806372d71322146103c35780638da5cb5b146103e55780638f58aa7a14610403578063909532381461042357610156565b80634389e58f116101085780634389e58f1461025a57806354fd4d50146102895780635e280f11146102b557806361d027b3146102e95780636251b6371461031d5780636750cd4c1461034457610156565b806301ffc9a71461016f5780630e97289b146101a457806312cc947f146101dc5780631881d94d146101fe5780631c7c294e1461021a578063334993ff1461023a57610156565b3661015657005b604051632657b6c360e01b815260040160405180910390fd5b34801561017b57600080fd5b5061018f61018a366004610ee3565b61050a565b60405190151581526020015b60405180910390f35b3480156101b057600080fd5b506001546101c4906001600160a01b031681565b6040516001600160a01b03909116815260200161019b565b3480156101e857600080fd5b506101fc6101f7366004610f4e565b610541565b005b34801561020a57600080fd5b50600260405161019b9190610f8f565b34801561022657600080fd5b506002546101c4906001600160a01b031681565b34801561024657600080fd5b506101fc610255366004610fb7565b6106b3565b34801561026657600080fd5b5061027a6102753660046110d0565b6106c6565b60405161019b93929190611193565b34801561029557600080fd5b50604080516000808252602082015260029181019190915260600161019b565b3480156102c157600080fd5b506101c47f000000000000000000000000000000000000000000000000000000000000000081565b3480156102f557600080fd5b506101c47f000000000000000000000000000000000000000000000000000000000000000081565b34801561032957600080fd5b50610332600181565b60405160ff909116815260200161019b565b34801561035057600080fd5b5061018f61035f3660046111e7565b50600190565b34801561037157600080fd5b506101fc610810565b34801561038657600080fd5b506103ae7f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff909116815260200161019b565b3480156103cf57600080fd5b506103d8610824565b60405161019b9190611202565b3480156103f157600080fd5b506000546001600160a01b03166101c4565b34801561040f57600080fd5b506101fc61041e366004611235565b6108b2565b34801561042f57600080fd5b5061043960035481565b60405190815260200161019b565b34801561045357600080fd5b5061043960045481565b34801561046957600080fd5b506101fc610478366004611261565b6109a7565b34801561048957600080fd5b5061049d61049836600461127e565b6109d1565b60405161019b91906112f8565b3480156104b657600080fd5b506101fc6104c536600461130f565b610a13565b3480156104d657600080fd5b506101fc6104e5366004611261565b610a2b565b3480156104f657600080fd5b506101fc610505366004611235565b610a6e565b60006001600160e01b031982166325fc096160e21b148061053b57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6002546001600160a01b03161580159061056657506002546001600160a01b03163314155b1561058457604051631c2c85bb60e21b815260040160405180910390fd5b6000604051806060016040528061059b8585610b2e565b63ffffffff1681526020016105b08585610b51565b81526020016105bf8585610b71565b6001600160401b0316905290506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663a825d747826106068686610b94565b6106108787610ba6565b60405161061e92919061134b565b6040805191829003822060e086901b6001600160e01b0319168352845163ffffffff166004840152602085015160248401529301516001600160401b031660448201526001600160a01b039091166064820152608481019190915260a401600060405180830381600087803b15801561069657600080fd5b505af11580156106aa573d6000803e3d6000fd5b50505050505050565b6106bb610bc2565b600491909155600355565b60408051808201909152600080825260208201526060807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316331461072657604051630fd72cd960e31b815260040160405180910390fd5b61073761073287611372565b610bef565b9150845160001461074857846107d4565b600580546107559061140f565b80601f01602080910402602001604051908101604052809291908181526020018280546107819061140f565b80156107ce5780601f106107a3576101008083540402835291602001916107ce565b820191906000526020600020905b8154815290600101906020018083116107b157829003601f168201915b50505050505b90506107e08282610c47565b60405180604001604052806004548152602001856107ff576000610803565b6003545b9052969195509350915050565b610818610bc2565b6108226000610caf565b565b600580546108319061140f565b80601f016020809104026020016040519081016040528092919081815260200182805461085d9061140f565b80156108aa5780601f1061087f576101008083540402835291602001916108aa565b820191906000526020600020905b81548152906001019060200180831161088d57829003601f168201915b505050505081565b6108ba610bc2565b6001600160a01b0382166108e157604051633d3496e160e01b815260040160405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e4fe1d946040518163ffffffff1660e01b8152600401602060405180830381865afa158015610941573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109659190611443565b90506001600160a01b03811661098e576040516354c1781b60e01b815260040160405180910390fd5b6109a26001600160a01b0382168484610cff565b505050565b6109af610bc2565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b60408051808201909152600080825260208201526040518060400160405280600454815260200183610a04576000610a08565b6003545b905295945050505050565b610a1b610bc2565b6005610a2782826114a8565b5050565b610a33610bc2565b6001600160a01b038116610a6257604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b610a6b81610caf565b50565b610a76610bc2565b6001600160a01b038216610a9d57604051633d3496e160e01b815260040160405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e1758bd86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610afd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b219190611443565b90506109a2818484610d51565b6000610b3e600d60098486611567565b610b4791611591565b60e01c9392505050565b6000610b61602d600d8486611567565b610b6a916115c1565b9392505050565b6000610b81600960018486611567565b610b8a916115df565b60c01c9392505050565b6000610b6a610ba38484610d74565b90565b366000610bb68360518187611567565b915091505b9250929050565b6000546001600160a01b031633146108225760405163118cdaa760e01b8152336004820152602401610a59565b8051602080830151604080850151606080870151608088015160a089015160c08a015195519398610c3198600198919791966001600160a01b0316950161160d565b6040516020818303038152906040529050919050565b600154604051631f5dad8b60e31b81526001600160a01b039091169063faed6c5890610c799085908590600401611688565b600060405180830381600087803b158015610c9357600080fd5b505af1158015610ca7573d6000803e3d6000fd5b505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526109a2908490610d84565b6001600160a01b038316610d69576109a28282610dfb565b6109a2838383610ea8565b6000610b61605160318486611567565b600080602060008451602086016000885af180610da7576040513d6000823e3d81fd5b50506000513d91508115610dbf578060011415610dcc565b6001600160a01b0384163b155b15610df557604051635274afe760e01b81526001600160a01b0385166004820152602401610a59565b50505050565b6001600160a01b038216610e22576040516306b7a93160e41b815260040160405180910390fd5b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114610e6f576040519150601f19603f3d011682016040523d82523d6000602084013e610e74565b606091505b50509050806109a257604051631196f20d60e21b81526001600160a01b038416600482015260248101839052604401610a59565b6001600160a01b038216610ecf576040516306b7a93160e41b815260040160405180910390fd5b6109a26001600160a01b0384168383610cff565b600060208284031215610ef557600080fd5b81356001600160e01b031981168114610b6a57600080fd5b60008083601f840112610f1f57600080fd5b5081356001600160401b03811115610f3657600080fd5b602083019150836020828501011115610bbb57600080fd5b60008060208385031215610f6157600080fd5b82356001600160401b03811115610f7757600080fd5b610f8385828601610f0d565b90969095509350505050565b6020810160038310610fb157634e487b7160e01b600052602160045260246000fd5b91905290565b60008060408385031215610fca57600080fd5b50508035926020909101359150565b600060e08284031215610feb57600080fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b60405160e081016001600160401b038111828210171561102957611029610ff1565b60405290565b600082601f83011261104057600080fd5b81356001600160401b038082111561105a5761105a610ff1565b604051601f8301601f19908116603f0116810190828211818310171561108257611082610ff1565b8160405283815286602085880101111561109b57600080fd5b836020870160208301376000602085830101528094505050505092915050565b803580151581146110cb57600080fd5b919050565b6000806000606084860312156110e557600080fd5b83356001600160401b03808211156110fc57600080fd5b61110887838801610fd9565b9450602086013591508082111561111e57600080fd5b5061112b8682870161102f565b92505061113a604085016110bb565b90509250925092565b60005b8381101561115e578181015183820152602001611146565b50506000910152565b6000815180845261117f816020860160208601611143565b601f01601f19169290920160200192915050565b83518152602080850151908201526080604082015260006111b76080830185611167565b82810360608401526111c98185611167565b9695505050505050565b803563ffffffff811681146110cb57600080fd5b6000602082840312156111f957600080fd5b610b6a826111d3565b602081526000610b6a6020830184611167565b6001600160a01b0381168114610a6b57600080fd5b80356110cb81611215565b6000806040838503121561124857600080fd5b823561125381611215565b946020939093013593505050565b60006020828403121561127357600080fd5b8135610b6a81611215565b6000806000806060858703121561129457600080fd5b84356001600160401b03808211156112ab57600080fd5b6112b788838901610fd9565b955060208701359150808211156112cd57600080fd5b506112da87828801610f0d565b90945092506112ed9050604086016110bb565b905092959194509250565b81518152602080830151908201526040810161053b565b60006020828403121561132157600080fd5b81356001600160401b0381111561133757600080fd5b6113438482850161102f565b949350505050565b8183823760009101908152919050565b80356001600160401b03811681146110cb57600080fd5b600060e0823603121561138457600080fd5b61138c611007565b6113958361135b565b81526113a3602084016111d3565b60208201526113b46040840161122a565b60408201526113c5606084016111d3565b60608201526080830135608082015260a083013560a082015260c08301356001600160401b038111156113f757600080fd5b6114033682860161102f565b60c08301525092915050565b600181811c9082168061142357607f821691505b602082108103610feb57634e487b7160e01b600052602260045260246000fd5b60006020828403121561145557600080fd5b8151610b6a81611215565b601f8211156109a2576000816000526020600020601f850160051c810160208610156114895750805b601f850160051c820191505b81811015610ca757828155600101611495565b81516001600160401b038111156114c1576114c1610ff1565b6114d5816114cf845461140f565b84611460565b602080601f83116001811461150a57600084156114f25750858301515b600019600386901b1c1916600185901b178555610ca7565b600085815260208120601f198616915b828110156115395788860151825594840194600190910190840161151a565b50858210156115575787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000808585111561157757600080fd5b8386111561158457600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156115b95780818660040360031b1b83161692505b505092915050565b8035602083101561053b57600019602084900360031b1b1692915050565b6001600160c01b031981358181169160088510156115b95760089490940360031b84901b1690921692915050565b60ff60f81b8960f81b1681526001600160401b0360c01b8860c01b166001820152600063ffffffff60e01b808960e01b16600984015287600d840152808760e01b16602d840152508460318301528360518301528251611674816071850160208701611143565b919091016071019998505050505050505050565b60408152600061169b6040830185611167565b82810360208401526116ad8185611167565b9594505050505056fea2646970667358221220c3e86e5a7f47955117c968f35183229c2a822980b5af2d2973f411f36b4f38a564736f6c63430008160033608060405234801561001057600080fd5b506107d2806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063e5c5e9a314610030575b600080fd5b61004361003e366004610529565b61005a565b6040516100519291906105eb565b60405180910390f35b6060806100678484610072565b915091509250929050565b606080600283101561009f5760405163196499c760e21b8152600060048201526024015b60405180910390fd5b60006100ae6002828688610619565b6100b791610643565b60f01c90506002600219820161021f578060005b868310156101c45760006100e460018501858a8c610619565b6100ed91610673565b60f81c9050600081900361011757604051636780cfaf60e01b815260006004820152602401610096565b8160ff1660000361012a57809150610167565b8160ff168160ff16146101675736600061014686868c8e610619565b915091506101578989868585610236565b9099509750859450919250829150505b600184019360009061017e90600301868b8d610619565b61018791610643565b60f01c905060008190036101b15760405163196499c760e21b815260048101869052602401610096565b8060020161ffff168501945050506100cb565b8287146101e75760405163196499c760e21b815260048101849052602401610096565b6002871115610218573660006101ff85858b8d610619565b915091506102108888858585610236565b909850965050505b505061022d565b61022a828787610356565b93505b50509250929050565b60608060001960ff8616016102b35786511561027557868484604051602001610261939291906106a1565b6040516020818303038152906040526102ac565b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050505b965061034b565b60011960ff86160161032d578551156102ef578584846040516020016102db939291906106a1565b604051602081830303815290604052610326565b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050505b955061034b565b604051636780cfaf60e01b815260ff86166004820152602401610096565b509495939450505050565b606060001961ffff8516016103f65760228214610386576040516301b8ca5560e31b815260040160405180910390fd5b60006103a7610399602260028688610619565b6103a2916106c9565b6104e8565b604051600160f81b60208201819052601160f01b602183015260238201526001600160801b0319608083901b1660248201529091506034016040516020818303038152906040529150506104e1565b60011961ffff8516016104c2576042821115806104135750606282115b15610431576040516360493e2b60e11b815260040160405180910390fd5b6000610444610399602260028688610619565b90506000610459610399604260228789610619565b90506000604119850161046f866042818a610619565b610478916106c9565b60405160086020938403029190911c92506104a9916001916011918391889183916031916002918b918b91016106e8565b60405160208183030381529060405293505050506104e1565b604051630417051360e41b815261ffff85166004820152602401610096565b9392505050565b60006fffffffffffffffffffffffffffffffff821115610525576040516306dfcc6560e41b81526080600482015260248101839052604401610096565b5090565b6000806020838503121561053c57600080fd5b823567ffffffffffffffff8082111561055457600080fd5b818501915085601f83011261056857600080fd5b81358181111561057757600080fd5b86602082850101111561058957600080fd5b60209290920196919550909350505050565b60005b838110156105b657818101518382015260200161059e565b50506000910152565b600081518084526105d781602086016020860161059b565b601f01601f19169290920160200192915050565b6040815260006105fe60408301856105bf565b828103602084015261061081856105bf565b95945050505050565b6000808585111561062957600080fd5b8386111561063657600080fd5b5050820193919092039150565b6001600160f01b0319813581811691600285101561066b5780818660020360031b1b83161692505b505092915050565b6001600160f81b0319813581811691600185101561066b5760019490940360031b84901b1690921692915050565b600084516106b381846020890161059b565b8201838582376000930192835250909392505050565b803560208310156106e257600019602084900360031b1b165b92915050565b60f88a811b6001600160f81b0319908116835260f08b901b6001600160f01b031916600184015289821b81166003840152608089901b6001600160801b03191660048401529087901b1660148201526000610752601583018760f01b6001600160f01b0319169052565b61076b601783018660f81b6001600160f81b0319169052565b610784601883018560801b6001600160801b0319169052565b5060288101919091526048019897505050505050505056fea2646970667358221220994aaf0c18254f983fac2634c8bb3f9ecd3d5348f39af4ed525562428cb6fc4f64736f6c6343000816003341304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f50a26469706673582212202bb9056fdb9ac573ad9acea30a99e1a498eb6b60643829bb5d022a08e09cf68564736f6c63430008160033608060405234801561001057600080fd5b506107d2806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063e5c5e9a314610030575b600080fd5b61004361003e366004610529565b61005a565b6040516100519291906105eb565b60405180910390f35b6060806100678484610072565b915091509250929050565b606080600283101561009f5760405163196499c760e21b8152600060048201526024015b60405180910390fd5b60006100ae6002828688610619565b6100b791610643565b60f01c90506002600219820161021f578060005b868310156101c45760006100e460018501858a8c610619565b6100ed91610673565b60f81c9050600081900361011757604051636780cfaf60e01b815260006004820152602401610096565b8160ff1660000361012a57809150610167565b8160ff168160ff16146101675736600061014686868c8e610619565b915091506101578989868585610236565b9099509750859450919250829150505b600184019360009061017e90600301868b8d610619565b61018791610643565b60f01c905060008190036101b15760405163196499c760e21b815260048101869052602401610096565b8060020161ffff168501945050506100cb565b8287146101e75760405163196499c760e21b815260048101849052602401610096565b6002871115610218573660006101ff85858b8d610619565b915091506102108888858585610236565b909850965050505b505061022d565b61022a828787610356565b93505b50509250929050565b60608060001960ff8616016102b35786511561027557868484604051602001610261939291906106a1565b6040516020818303038152906040526102ac565b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050505b965061034b565b60011960ff86160161032d578551156102ef578584846040516020016102db939291906106a1565b604051602081830303815290604052610326565b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050505b955061034b565b604051636780cfaf60e01b815260ff86166004820152602401610096565b509495939450505050565b606060001961ffff8516016103f65760228214610386576040516301b8ca5560e31b815260040160405180910390fd5b60006103a7610399602260028688610619565b6103a2916106c9565b6104e8565b604051600160f81b60208201819052601160f01b602183015260238201526001600160801b0319608083901b1660248201529091506034016040516020818303038152906040529150506104e1565b60011961ffff8516016104c2576042821115806104135750606282115b15610431576040516360493e2b60e11b815260040160405180910390fd5b6000610444610399602260028688610619565b90506000610459610399604260228789610619565b90506000604119850161046f866042818a610619565b610478916106c9565b60405160086020938403029190911c92506104a9916001916011918391889183916031916002918b918b91016106e8565b60405160208183030381529060405293505050506104e1565b604051630417051360e41b815261ffff85166004820152602401610096565b9392505050565b60006fffffffffffffffffffffffffffffffff821115610525576040516306dfcc6560e41b81526080600482015260248101839052604401610096565b5090565b6000806020838503121561053c57600080fd5b823567ffffffffffffffff8082111561055457600080fd5b818501915085601f83011261056857600080fd5b81358181111561057757600080fd5b86602082850101111561058957600080fd5b60209290920196919550909350505050565b60005b838110156105b657818101518382015260200161059e565b50506000910152565b600081518084526105d781602086016020860161059b565b601f01601f19169290920160200192915050565b6040815260006105fe60408301856105bf565b828103602084015261061081856105bf565b95945050505050565b6000808585111561062957600080fd5b8386111561063657600080fd5b5050820193919092039150565b6001600160f01b0319813581811691600285101561066b5780818660020360031b1b83161692505b505092915050565b6001600160f81b0319813581811691600185101561066b5760019490940360031b84901b1690921692915050565b600084516106b381846020890161059b565b8201838582376000930192835250909392505050565b803560208310156106e257600019602084900360031b1b165b92915050565b60f88a811b6001600160f81b0319908116835260f08b901b6001600160f01b031916600184015289821b81166003840152608089901b6001600160801b03191660048401529087901b1660148201526000610752601583018760f01b6001600160f01b0319169052565b61076b601783018660f81b6001600160f81b0319169052565b610784601883018560801b6001600160801b0319169052565b5060288101919091526048019897505050505050505056fea2646970667358221220994aaf0c18254f983fac2634c8bb3f9ecd3d5348f39af4ed525562428cb6fc4f64736f6c63430008160033", - "sourceMap": "1158:4500:128:-:0;;;;;1572:26:85;;;1594:4;-1:-1:-1;;1572:26:85;;;;;;;;3126:44:88;;;;;;;;;;;738:20:70;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;710:48:70;;;-1:-1:-1;;;;;;710:48:70;-1:-1:-1;;;;;710:48:70;;;;;;;;;;4586:43:71;;;4620:9;-1:-1:-1;;;;;;4586:43:71;;;;;;1237:23:128;;;-1:-1:-1;;;;;;1266:23:128;;;;;1373:17;;;;;;;;;;;;-1:-1:-1;;;1373:17:128;;;;;;:8;:17::i;:::-;1349:41;;;-1:-1:-1;;;;;;1349:41:128;-1:-1:-1;;;;;1349:41:128;;;;;;;;;;1420:17;;;;;;;;;;;;-1:-1:-1;;;1420:17:128;;;;;;:8;:17::i;:::-;1396:41;;;-1:-1:-1;;;;;;1396:41:128;-1:-1:-1;;;;;1396:41:128;;;;;;;;;;1476:9;1443:42;;1158:4500;;;;;;;;;;;;20439:125:89;20503:12;20537:20;20552:4;20537:14;:20::i;:::-;-1:-1:-1;20527:30:89;20439:125;-1:-1:-1;;20439:125:89:o;20158:242::-;20228:12;20242:18;20320:4;20303:22;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;20303:22:89;;;;;;;20293:33;;20303:22;20293:33;;;;-1:-1:-1;;;;;;20344:19:89;;;;;709:25:132;;;20293:33:89;-1:-1:-1;20344:7:89;;;;682:18:132;;20344:19:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20373:20;;-1:-1:-1;;;20373:20:89;;20337:26;;-1:-1:-1;20373:8:89;;;;:20;;20337:26;;20388:4;;20373:20;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20158:242;;;:::o;1158:4500:128:-;;;;;;;;:::o;14:250:132:-;99:1;109:113;123:6;120:1;117:13;109:113;;;199:11;;;193:18;180:11;;;173:39;145:2;138:10;109:113;;;-1:-1:-1;;256:1:132;238:16;;231:27;14:250::o;269:289::-;400:3;438:6;432:13;454:66;513:6;508:3;501:4;493:6;489:17;454:66;:::i;:::-;536:16;;;;;269:289;-1:-1:-1;;269:289:132:o;745:290::-;815:6;868:2;856:9;847:7;843:23;839:32;836:52;;;884:1;881;874:12;836:52;910:16;;-1:-1:-1;;;;;955:31:132;;945:42;;935:70;;1001:1;998;991:12;935:70;1024:5;745:290;-1:-1:-1;;;745:290:132:o;1040:493::-;1246:1;1242;1237:3;1233:11;1229:19;1221:6;1217:32;1206:9;1199:51;1286:2;1281;1270:9;1266:18;1259:30;1180:4;1318:6;1312:13;1361:6;1356:2;1345:9;1341:18;1334:34;1377:79;1449:6;1444:2;1433:9;1429:18;1424:2;1416:6;1412:15;1377:79;:::i;:::-;1517:2;1496:15;-1:-1:-1;;1492:29:132;1477:45;;;;1524:2;1473:54;;1040:493;-1:-1:-1;;;1040:493:132:o;:::-;1158:4500:128;;;;;;", - "linkReferences": {} - }, - "deployedBytecode": { - "object": "0x608060405260043610620002cf5760003560e01c806382411c771162000177578063b954fdf611620000d1578063e20c9f711162000084578063e20c9f711462000934578063e99b6b31146200094c578063ec53eaa01462000964578063f93e1d61146200097b578063fa7626d414620009c1578063faed6c5814620009dd57600080fd5b8063b954fdf6146200083e578063ba414fa61462000883578063baead19c146200089b578063d1c6eafc14620008b6578063d6d6249714620008ce578063defd9da614620008f357600080fd5b8063a29c8984116200012a578063a29c89841462000786578063ae6ce400146200079d578063b1dcf5c814620007c2578063b5508aa914620007ea578063b752b72a1462000802578063b76bada5146200082757600080fd5b806382411c771462000362578063834bd15914620006a857806385226c8114620006cd578063916a17c614620006f45780639751ca86146200070c578063997cff1b146200076157600080fd5b80633f7286f4116200022957806366d9a9a011620001dc57806366d9a9a014620005ba578063699cbade14620005e15780636e1775e31462000600578063703ca25414620006375780637949f59b146200065c5780637982cf42146200067457600080fd5b80633f7286f414620004a3578063518e8ab014620004bb57806351aa318b146200050b5780635ea0fefe146200053a57806360197889146200057057806365449eb0146200059557600080fd5b80631ed7831c11620002825780631ed7831c14620003c65780632113ce6214620003ed5780632a35d25014620004285780632ade3880146200044d5780633bbd6a9414620004745780633e5e3c23146200048b57600080fd5b8063090852b614620002dc5780630a69faa914620003035780630a9254e4146200031a5780630afba86814620003325780631766f5a414620003625780631cc4652514620003a157600080fd5b36620002d757005b600080fd5b348015620002e957600080fd5b5062000301620002fb36600462007b0c565b62000a02565b005b620003016200031436600462007c88565b62000a31565b3480156200032757600080fd5b506200030162000b6f565b3480156200033f57600080fd5b506200034a61271081565b60405161ffff90911681526020015b60405180910390f35b3480156200036f57600080fd5b5062000380670de0b6b3a764000081565b6040516effffffffffffffffffffffffffffff909116815260200162000359565b348015620003ae57600080fd5b5062000301620003c036600462007d3f565b62000f7f565b348015620003d357600080fd5b50620003de62000fd4565b60405162000359919062007db7565b348015620003fa57600080fd5b506021546200040f906001600160801b031681565b6040516001600160801b03909116815260200162000359565b3480156200043557600080fd5b50620003de6200044736600462007dcc565b62001038565b3480156200045a57600080fd5b506200046562001140565b60405162000359919062007ee9565b620003016200048536600462007f6c565b6200128e565b3480156200049857600080fd5b50620003de6200134e565b348015620004b057600080fd5b50620003de620013b0565b348015620004c857600080fd5b50620004e0620004da36600462008026565b62001412565b6040805161ffff90941684526001600160801b03928316602085015291169082015260600162000359565b3480156200051857600080fd5b50620005246201117181565b60405163ffffffff909116815260200162000359565b3480156200054757600080fd5b506200055f620005593660046200807c565b62001430565b604051901515815260200162000359565b3480156200057d57600080fd5b50620003016200058f366004620080ab565b62001465565b348015620005a257600080fd5b5062000301620005b4366004620081bc565b6200206b565b348015620005c757600080fd5b50620005d262002151565b6040516200035991906200828d565b348015620005ee57600080fd5b506200040f68056bc75e2d6310000081565b3480156200060d57600080fd5b50620006256200061f36600462008346565b6200223b565b604051620003599493929190620083be565b3480156200064457600080fd5b506200030162000656366004620083ee565b6200225f565b3480156200066957600080fd5b506200030162002426565b3480156200068157600080fd5b5062000699620006933660046200807c565b62002c09565b60405162000359919062008426565b348015620006b557600080fd5b5062000301620006c73660046200843b565b62002cf7565b348015620006da57600080fd5b50620006e562003222565b604051620003599190620084b8565b3480156200070157600080fd5b50620005d2620032fc565b3480156200071957600080fd5b50620007316200072b36600462008026565b620033e6565b604080516001600160801b03948516815263ffffffff909316602084015292169181019190915260600162000359565b3480156200076e57600080fd5b50620003016200078036600462008346565b620033f7565b6200030162000797366004620084cd565b6200344f565b348015620007aa57600080fd5b5062000301620007bc3660046200855d565b620034db565b348015620007cf57600080fd5b50620007db620186a081565b60405190815260200162000359565b348015620007f757600080fd5b50620006e56200357c565b3480156200080f57600080fd5b5062000301620008213660046200857d565b62003656565b3480156200083457600080fd5b50620007db600381565b3480156200084b57600080fd5b50620008636200085d36600462008026565b62003675565b604080516001600160801b03909316835260208301919091520162000359565b3480156200089057600080fd5b506200055f62003690565b348015620008a857600080fd5b50620007db64e8d4a5100081565b348015620008c357600080fd5b5062000301620037c7565b348015620008db57600080fd5b5062000301620008ed3660046200859e565b62003ba5565b3480156200090057600080fd5b50620003016200091236600462008611565b602180546001600160801b0319166001600160801b0392909216919091179055565b3480156200094157600080fd5b50620003de62005b75565b3480156200095957600080fd5b506200030162005bd7565b6200030162000975366004620080ab565b62005e18565b3480156200098857600080fd5b50620009a06200099a36600462008026565b62005f53565b604080516001600160801b0393841681529290911660208301520162000359565b348015620009ce57600080fd5b506007546200055f9060ff1681565b348015620009ea57600080fd5b5062000301620009fc36600462008631565b62005f62565b62000a2d82826001600160a01b031660001b6000806040518060200160405280600081525062002cf7565b5050565b60006020600062000a43878762005ff4565b63ffffffff16815260208101919091526040016000908120546001600160a01b031691508062000a73856200601b565b92505091506000604051806060016040528062000a918a8a6200610a565b63ffffffff16815260200162000aa88a8a6200611c565b815260200162000ab98a8a62006139565b6001600160401b0316905290506001600160a01b038416630c0c389e6001600160801b038581169085168462000af08d8d62006160565b62000afc8e8e62006175565b604080516020810182526000815290516001600160e01b031960e089901b16815262000b30949392918e91600401620086a3565b6000604051808303818589803b15801562000b4a57600080fd5b5088f115801562000b5f573d6000803e3d6000fd5b5050505050505050505050505050565b60325460405163c88a5e6d60e01b81526001600160a01b039091166004820152683635c9adc5dea000006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b15801562000bd857600080fd5b505af115801562000bed573d6000803e3d6000fd5b505060335460405163c88a5e6d60e01b81526001600160a01b039091166004820152683635c9adc5dea000006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b15801562000c5a57600080fd5b505af115801562000c6f573d6000803e3d6000fd5b5050505062000c7d62006187565b62000c8b6002600062000f7f565b62000cfc6040518060200162000ca1906200779e565b601f1982820381018352601f90910116604081815260305463ffffffff16600090815260208080529190205462000ce7926001600160a01b039091169130910162008716565b60405160208183030381529060405262006191565b603060086101000a8154816001600160a01b0302191690836001600160a01b0316021790555062000d876040518060200162000d38906200779e565b601f1982820381018352601f90910116604081815260305463ffffffff64010000000090910416600090815260208080529190205462000ce7926001600160a01b039091169130910162008782565b603180546001600160a01b0319166001600160a01b0392909216919091179055604080516002808252606082018352600092602083019080368337019050509050603060089054906101000a90046001600160a01b03168160008151811062000df45762000df4620087cb565b6001600160a01b03928316602091820292909201015260315482519116908290600190811062000e285762000e28620087cb565b6001600160a01b0390921660209283029190910190910152604051631c0f289560e21b8152309063703ca2549062000e6590849060040162007db7565b600060405180830381600087803b15801562000e8057600080fd5b505af115801562000e95573d6000803e3d6000fd5b50506030546032546034546040516340c10f1960e01b81526001600160a01b0392831660048201526024810191909152600160401b9092041692506340c10f199150604401600060405180830381600087803b15801562000ef557600080fd5b505af115801562000f0a573d6000803e3d6000fd5b50506031546033546034546040516340c10f1960e01b81526001600160a01b0392831660048201526024810191909152911692506340c10f199150604401600060405180830381600087803b15801562000f6357600080fd5b505af115801562000f78573d6000803e3d6000fd5b5050505050565b62000a2d82828460ff166001600160401b0381111562000fa35762000fa362007b8e565b60405190808252806020026020018201604052801562000fcd578160200160208202803683370190505b5062003ba5565b606060148054806020026020016040519081016040528092919081815260200182805480156200102e57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116200100f575b5050505050905090565b60608160ff166001600160401b0381111562001058576200105862007b8e565b60405190808252806020026020018201604052801562001082578160200160208202803683370190505b509050825b620010938385620087f7565b60ff168160ff1610156200112d5760ff81166000908152602080805260408083205481516001600160a01b0390911692810192909252309082015260016060820152620010e590879060800162000ce7565b90508083620010f5878562008813565b60ff16815181106200110b576200110b620087cb565b6001600160a01b03909216602092830291909101909101525060010162001087565b5062001139816200225f565b9392505050565b6060601b805480602002602001604051908101604052809291908181526020016000905b828210156200128557600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b828210156200126d578382906000526020600020018054620011d9906200882f565b80601f016020809104026020016040519081016040528092919081815260200182805462001207906200882f565b8015620012585780601f106200122c5761010080835404028352916020019162001258565b820191906000526020600020905b8154815290600101906020018083116200123a57829003601f168201915b505050505081526020019060010190620011b7565b50505050815250508152602001906001019062001164565b50505050905090565b63ffffffff871660009081526020805260408120546001600160a01b0316908080620012ba89620061f0565b925092509250836001600160a01b03166391d20fa18284908d8b8d898d8d604051806020016040528060008152506040518a63ffffffff1660e01b81526004016200130c97969594939291906200886b565b6000604051808303818589803b1580156200132657600080fd5b5088f11580156200133b573d6000803e3d6000fd5b5050505050505050505050505050505050565b606060168054806020026020016040519081016040528092919081815260200182805480156200102e576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116200100f575050505050905090565b606060158054806020026020016040519081016040528092919081815260200182805480156200102e576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116200100f575050505050905090565b6000806000620014238585620062ed565b9250925092509250925092565b61ffff82166000908152601d602090815260408083208484529091528120816200145a826200636b565b119150505b92915050565b600062001473848462005ff4565b63ffffffff811660009081526020805260408120549192506001600160a01b03909116908163402f8468620014a9888862006160565b620014b589896200610a565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015263ffffffff1660248201526044016040805180830381865afa15801562001504573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200152a9190620088eb565b50905060006200153b878762006389565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052506040805163054fd4d560e41b8152905195965090946001600160a01b03881694506354fd4d509350600480830193506060928290030181865afa158015620015b7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620015dd919062008941565b50509050806001600160401b031660030362001ab3578260006001600160a01b038216639c33abf7620016118c8c6200610a565b6200161d8d8d62006160565b6040516001600160e01b031960e085901b16815263ffffffff9290921660048301526001600160a01b0316602482015260026044820152606401600060405180830381865afa15801562001675573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200169f9190810190620089d3565b9050600081806020019051810190620016b9919062008a7c565b60800151600081518110620016d257620016d2620087cb565b602002602001015190506000620016ea8c8c6200639b565b604051620016fa92919062008b63565b6040518091039020905060606000630223536e60e01b88846064604051602401620017289392919062008b73565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152905060006001600160a01b03851663f010cb238d89856200177e426103e862008ba1565b6040518563ffffffff1660e01b81526004016200179f949392919062008bb7565b602060405180830381865afa158015620017bd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620017e3919062008bfa565b9050620017f081620063ad565b60408051600180825281830190925291945060009250816020015b62001815620077ac565b8152602001906001900390816200180b5790505090506040518060a001604052808d63ffffffff168152602001886001600160a01b03168152602001838152602001426103e862001867919062008ba1565b81526020018481525081600081518110620018865762001886620087cb565b602090810291909101015260405163b143044b60e01b81526001600160a01b0386169063b143044b90620018bf90849060040162008c14565b600060405180830381600087803b158015620018da57600080fd5b505af1158015620018ef573d6000803e3d6000fd5b505050506000630894edf160e01b8a866040516024016200191292919062008cc6565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152905060006001600160a01b03871663f010cb238f8b8562001968426103e862008ba1565b6040518563ffffffff1660e01b815260040162001989949392919062008bb7565b602060405180830381865afa158015620019a7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620019cd919062008bfa565b9050620019da81620063ad565b9450506040518060a001604052808e63ffffffff168152602001896001600160a01b03168152602001828152602001426103e862001a19919062008ba1565b8152602001858152508260008151811062001a385762001a38620087cb565b602090810291909101015260405163b143044b60e01b81526001600160a01b0387169063b143044b9062001a7190859060040162008c14565b600060405180830381600087803b15801562001a8c57600080fd5b505af115801562001aa1573d6000803e3d6000fd5b50505050505050505050505062002061565b806001600160401b0316600a0362001ffc578260006001600160a01b038216639c33abf762001ae38c8c6200610a565b62001aef8d8d62006160565b6040516001600160e01b031960e085901b16815263ffffffff9290921660048301526001600160a01b0316602482015260016044820152606401600060405180830381865afa15801562001b47573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262001b719190810190620089d3565b905060008180602001905181019062001b8b919062008cea565b6080015160008151811062001ba45762001ba4620087cb565b60200260200101519050600062001bbc8c8c620064c7565b60405162001bcc92919062008b63565b60405180910390209050600062001be48d8d62006175565b8b60405160200162001bf892919062008d3f565b6040516020818303038152906040528051906020012090506060600063ab750e7560e01b89858560405160240162001c339392919062008d67565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152905060006001600160a01b03861663f010cb238e8a8562001c89426103e862008ba1565b6040518563ffffffff1660e01b815260040162001caa949392919062008bb7565b602060405180830381865afa15801562001cc8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001cee919062008bfa565b905062001cfb81620063ad565b60408051600180825281830190925291945060009190816020015b62001d20620077ac565b81526020019060019003908162001d165790505090506040518060a001604052808f63ffffffff1681526020018a6001600160a01b03168152602001848152602001426103e862001d72919062008ba1565b8152602001858152508160008151811062001d915762001d91620087cb565b602090810291909101015260405163b143044b60e01b81526001600160a01b0388169063b143044b9062001dca90849060040162008c14565b600060405180830381600087803b15801562001de557600080fd5b505af115801562001dfa573d6000803e3d6000fd5b50505050505050600063594924da60e01b89858560405160240162001e229392919062008d67565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152905060006001600160a01b03861663f010cb238e8a8562001e78426103e862008ba1565b6040518563ffffffff1660e01b815260040162001e99949392919062008bb7565b602060405180830381865afa15801562001eb7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001edd919062008bfa565b905062001eea81620063ad565b60408051600180825281830190925291945060009190816020015b62001f0f620077ac565b81526020019060019003908162001f055790505090506040518060a001604052808f63ffffffff1681526020018a6001600160a01b03168152602001848152602001426103e862001f61919062008ba1565b8152602001858152508160008151811062001f805762001f80620087cb565b602090810291909101015260405163b143044b60e01b81526001600160a01b0388169063b143044b9062001fb990849060040162008c14565b600060405180830381600087803b15801562001fd457600080fd5b505af115801562001fe9573d6000803e3d6000fd5b5050505050505050505050505062002061565b6040516312cc947f60e01b81526001600160a01b038416906312cc947f906200202c908b908b9060040162008d8e565b600060405180830381600087803b1580156200204757600080fd5b505af11580156200205c573d6000803e3d6000fd5b505050505b5050505050505050565b60005b82518110156200214c5760008382815181106200208f576200208f620087cb565b6020026020010151905060005b83518110156200214157816001600160a01b031663f0a9e481858381518110620020ca57620020ca620087cb565b60209081029190910101516040516001600160e01b031960e084901b16815263ffffffff909116600482015260016024820152604401600060405180830381600087803b1580156200211b57600080fd5b505af115801562002130573d6000803e3d6000fd5b5050600190920191506200209c9050565b50506001016200206e565b505050565b60606019805480602002602001604051908101604052809291908181526020016000905b82821015620012855760008481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156200222257602002820191906000526020600020906000905b82829054906101000a900460e01b6001600160e01b03191681526020019060040190602082600301049283019260010382029150808411620021e35790505b5050505050815250508152602001906001019062002175565b6000366000806200224e878787620064d9565b935093509350935093509350935093565b805160005b818110156200214c576000838281518110620022845762002284620087cb565b6020026020010151905060005b838110156200241b5782811462002412576000858281518110620022b957620022b9620087cb565b602002602001015190506000816001600160a01b0316635e280f116040518163ffffffff1660e01b8152600401602060405180830381865afa15801562002304573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200232a919062008da4565b6001600160a01b031663416ecebf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562002368573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200238e919062008dc4565b9050836001600160a01b0316633400288b82620023b1856001600160a01b031690565b6040516001600160e01b031960e085901b16815263ffffffff9290921660048301526024820152604401600060405180830381600087803b158015620023f657600080fd5b505af11580156200240b573d6000803e3d6000fd5b5050505050505b60010162002291565b505060010162002264565b604051670de0b6b3a7640000906000906200244190620077ea565b604051809103906000f0801580156200245e573d6000803e3d6000fd5b5090506000620024b160006207a1206000620024a862030d406000620024a060408051600360f01b602082015281516002818303018152602290910190915290565b919062006535565b929190620065a7565b6040805180820182526002815261048d60f21b602080830191909152825160e08101845260305463ffffffff64010000000082041682526001600160a01b03888116838501528286018a9052606083018a90526080830187905260a0830185905285519384018652600080855260c08401949094529451633b6f743b60e01b8152959650929490939192600160401b900490911690633b6f743b906200255e908590859060040162008e60565b6040805180830381865afa1580156200257b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620025a1919062008ed8565b6030546032546040516370a0823160e01b81526001600160a01b0391821660048201529293506200262d92600160401b90920416906370a08231906024015b602060405180830381865afa158015620025fe573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002624919062008bfa565b603454620065fa565b6031546040516370a0823160e01b81526001600160a01b038781166004830152620026a99216906370a0823190602401602060405180830381865afa1580156200267b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620026a1919062008bfa565b6000620065fa565b60325460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156200270357600080fd5b505af115801562002718573d6000803e3d6000fd5b5050603054835160405163c7c7f5b360e01b815260009450849350600160401b9092046001600160a01b03169163c7c7f5b39190620027609088908890309060040162008ef7565b60c06040518083038185885af11580156200277f573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190620027a6919062008f38565b603054603154929450909250620027d69164010000000090910463ffffffff16906001600160a01b031662003656565b6000603060049054906101000a900463ffffffff1690506000603160009054906101000a90046001600160a01b03169050600088905060008560000151905060008b905060006200288c8860200151603060009054906101000a900463ffffffff16896020015162002863603260009054906101000a90046001600160a01b03166001600160a01b031690565b8f6040516020016200287792919062008d3f565b604051602081830303815290604052620066e0565b604051630eef5aa560e21b81529091503090633bbd6a9490620028be9089908990899089908990899060040162008fc1565b600060405180830381600087803b158015620028d957600080fd5b505af1158015620028ee573d6000803e3d6000fd5b50506030546032546040516370a0823160e01b81526001600160a01b039182166004820152620029879450600160401b9092041691506370a0823190602401602060405180830381865afa1580156200294b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002971919062008bfa565b8f60345462002981919062009013565b620065fa565b6031546040516370a0823160e01b81526001600160a01b038f8116600483015262002a029216906370a0823190602401602060405180830381865afa158015620029d5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620029fb919062008bfa565b8f620065fa565b62002a728d6001600160a01b031663d5ce33896040518163ffffffff1660e01b8152600401602060405180830381865afa15801562002a45573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002a6b919062008da4565b8662006714565b62002ae28d6001600160a01b0316630ae6d46b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562002ab5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002adb919062008bfa565b84620067fd565b62002b568d6001600160a01b031663e21f37ce6040518163ffffffff1660e01b8152600401600060405180830381865afa15801562002b25573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262002b4f9190810190620089d3565b82620068d4565b62002bc68d6001600160a01b031663c34c08e56040518163ffffffff1660e01b8152600401602060405180830381865afa15801562002b99573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002bbf919062008da4565b3062006714565b62000b5f8d6001600160a01b031663609d33346040518163ffffffff1660e01b8152600401600060405180830381865afa15801562002b25573d6000803e3d6000fd5b61ffff82166000908152601d60209081526040808320848452909152812060609162002c35826200636b565b111562002cf057600062002c4982620068e0565b6000818152601e6020526040902080549192509062002c68906200882f565b80601f016020809104026020016040519081016040528092919081815260200182805462002c96906200882f565b801562002ce75780601f1062002cbb5761010080835404028352916020019162002ce7565b820191906000526020600020905b81548152906001019060200180831162002cc957829003601f168201915b50505050509250505b5092915050565b63ffffffff851660009081526020805260409020546001600160a01b031662002d675760405162461bcd60e51b815260206004820152601b60248201527f656e64706f696e74206e6f74207965742072656769737465726564000000000060448201526064015b60405180910390fd5b63ffffffff85166000908152601d6020908152604080832087845290915281209062002d93826200636b565b905060008560000362002db35762002dab836200636b565b905062002dc7565b85821162002dc2578162002dc4565b855b90505b801562002061578062002dda8162009029565b915050600062002dea8462006941565b6000818152601e602052604081208054929350909162002e0a906200882f565b80601f016020809104026020016040519081016040528092919081815260200182805462002e38906200882f565b801562002e895780601f1062002e5d5761010080835404028352916020019162002e89565b820191906000526020600020905b81548152906001019060200180831162002e6b57829003601f168201915b505060405163997cff1b60e01b8152939450309363997cff1b935062002eb89250859150869060040162008cc6565b60006040518083038186803b15801562002ed157600080fd5b505afa15801562002ee6573d6000803e3d6000fd5b5050604051636019788960e01b81523092506360197889915062002f119084908a9060040162009043565b600060405180830381600087803b15801562002f2c57600080fd5b505af115801562002f41573d6000803e3d6000fd5b5050506000838152601f6020526040812080549192509062002f63906200882f565b80601f016020809104026020016040519081016040528092919081815260200182805462002f91906200882f565b801562002fe25780601f1062002fb65761010080835404028352916020019162002fe2565b820191906000526020600020905b81548152906001019060200180831162002fc457829003601f168201915b5050505050905062002ff6816002620069a5565b15620030b2576000806200300a83620069bb565b604051919350915081906000906001600160a01b0383169085908381818185875af1925050503d80600081146200305e576040519150601f19603f3d011682016040523d82523d6000602084013e62003063565b606091505b5050905080620030ad5760405162461bcd60e51b81526020600482015260146024820152732330b4b632b2103a379039b2b7321022ba3432b960611b604482015260640162002d5e565b505050505b620030bf816001620069a5565b1562003121576040516307629f5560e51b8152309063ec53eaa090620030ec908590859060040162009043565b600060405180830381600087803b1580156200310757600080fd5b505af11580156200311c573d6000803e3d6000fd5b505050505b6200312e816005620069a5565b156200319257604051630a69faa960e01b81523090630a69faa9906200315d90859085908c906004016200906c565b600060405180830381600087803b1580156200317857600080fd5b505af11580156200318d573d6000803e3d6000fd5b505050505b6001600160a01b03881615801590620031b35750620031b3816003620069a5565b1562003219576040516328a7226160e21b8152309063a29c898490620031e4908590859088908e90600401620090ab565b600060405180830381600087803b158015620031ff57600080fd5b505af115801562003214573d6000803e3d6000fd5b505050505b50505062002dc7565b60606018805480602002602001604051908101604052809291908181526020016000905b828210156200128557838290600052602060002001805462003268906200882f565b80601f016020809104026020016040519081016040528092919081815260200182805462003296906200882f565b8015620032e75780601f10620032bb57610100808354040283529160200191620032e7565b820191906000526020600020905b815481529060010190602001808311620032c957829003601f168201915b50505050508152602001906001019062003246565b6060601a805480602002602001604051908101604052809291908181526020016000905b82821015620012855760008481526020908190206040805180820182526002860290920180546001600160a01b03168352600181018054835181870281018701909452808452939491938583019392830182828015620033cd57602002820191906000526020600020906000905b82829054906101000a900460e01b6001600160e01b031916815260200190600401906020826003010492830192600103820291508084116200338e5790505b5050505050815250508152602001906001019062003320565b600080600062001423858562006ab2565b600062003405848462006175565b9050818114620034495760405162461bcd60e51b815260206004820152600e60248201526d0ceead2c840dcdee840dac2e8c6d60931b604482015260640162002d5e565b50505050565b30633bbd6a9462003461878762005ff4565b6200346d888862006160565b8686866200347c8c8c620064c7565b6040518863ffffffff1660e01b8152600401620034a09796959493929190620090f6565b600060405180830381600087803b158015620034bb57600080fd5b505af1158015620034d0573d6000803e3d6000fd5b505050505050505050565b8060206000836001600160a01b031663416ecebf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200351f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003545919062008dc4565b63ffffffff168152602081019190915260400160002080546001600160a01b0319166001600160a01b039290921691909117905550565b60606017805480602002602001604051908101604052809291908181526020016000905b8282101562001285578382906000526020600020018054620035c2906200882f565b80601f0160208091040260200160405190810160405280929190818152602001828054620035f0906200882f565b8015620036415780601f10620036155761010080835404028352916020019162003641565b820191906000526020600020905b8154815290600101906020018083116200362357829003601f168201915b505050505081526020019060010190620035a0565b62000a2d82826000806040518060200160405280600081525062002cf7565b60008062003684848462006b27565b915091505b9250929050565b600754600090610100900460ff1615620036b35750600754610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620037c25760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190526519985a5b195960d21b8284015282518083038401815260608301909352600092909162003744917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc49160800162009158565b60408051601f198184030181529082905262003760916200918b565b6000604051808303816000865af19150503d80600081146200379f576040519150601f19603f3d011682016040523d82523d6000602084013e620037a4565b606091505b5091505080806020019051810190620037be9190620091a9565b9150505b919050565b670de0b6b3a764000060006200380262030d4082620024a060408051600360f01b602082015281516002818303018152602290910190915290565b6040805160e08101825260305463ffffffff64010000000082041682526033546001600160a01b03908116602080850191909152838501889052606084018890526080840186905284518082018652600080825260a08601919091528551918201865280825260c08501919091529351633b6f743b60e01b81529495509193600160401b90910490911690633b6f743b90620038a5908590859060040162008e60565b6040805180830381865afa158015620038c2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620038e8919062008ed8565b6030546032546040516370a0823160e01b81526001600160a01b0391821660048201529293506200392c92600160401b90920416906370a0823190602401620025e0565b6031546033546040516370a0823160e01b81526001600160a01b039182166004820152620039689291909116906370a0823190602401620025e0565b60325460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015620039c257600080fd5b505af1158015620039d7573d6000803e3d6000fd5b5050603054835160405163c7c7f5b360e01b8152600160401b9092046001600160a01b0316935063c7c7f5b392509062003a1a9086908690309060040162008ef7565b60c06040518083038185885af115801562003a39573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019062003a60919062008f38565b505060305460315462003a8b91640100000000900463ffffffff16906001600160a01b031662003656565b6030546032546040516370a0823160e01b81526001600160a01b03918216600482015262003b1b92600160401b9004909116906370a0823190602401602060405180830381865afa15801562003ae5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003b0b919062008bfa565b8560345462002981919062009013565b6031546033546040516370a0823160e01b81526001600160a01b039182166004820152620034499291909116906370a0823190602401602060405180830381865afa15801562003b6f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003b95919062008bfa565b8560345462002981919062008ba1565b8260ff166001600160401b0381111562003bc35762003bc362007b8e565b60405190808252806020026020018201604052801562003bed578160200160208202803683370190505b50805162003c0491602291602090910190620077f8565b508260ff166001600160401b0381111562003c235762003c2362007b8e565b60405190808252806020026020018201604052801562003c4d578160200160208202803683370190505b50805162003c64916023916020909101906200785e565b508260ff166001600160401b0381111562003c835762003c8362007b8e565b60405190808252806020026020018201604052801562003cad578160200160208202803683370190505b50805162003cc491602491602090910190620077f8565b508260ff166001600160401b0381111562003ce35762003ce362007b8e565b60405190808252806020026020018201604052801562003d0d578160200160208202803683370190505b50805162003d2491602591602090910190620077f8565b508260ff166001600160401b0381111562003d435762003d4362007b8e565b60405190808252806020026020018201604052801562003d6d578160200160208202803683370190505b50805162003d8491602691602090910190620077f8565b5060408051600180825281830190925290602080830190803683375050815162003db6926027925060200190620077f8565b506040516001625e79b760e01b0319815260016004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ffa1864990602401602060405180830381865afa15801562003e0b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003e31919062008da4565b6027805460009062003e475762003e47620087cb565b6000918252602082200180546001600160a01b0319166001600160a01b0393909316929092179091555b8360ff168160ff1610156200409b57600062003e8f826001620087f7565b60ff1690506000838360ff168151811062003eae5762003eae620087cb565b602002602001015190508160226001018460ff168154811062003ed55762003ed5620087cb565b90600052602060002090600891828204019190066004026101000a81548163ffffffff021916908363ffffffff16021790555060006001600160a01b0316816001600160a01b03160362003fba57813060405162003f33906200790f565b63ffffffff90921682526001600160a01b03166020820152604001604051809103906000f08015801562003f6b573d6000803e3d6000fd5b506022805460ff861690811062003f865762003f86620087cb565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555062004055565b81308260405162003fcb906200791d565b63ffffffff90931683526001600160a01b039182166020840152166040820152606001604051809103906000f0801580156200400b573d6000803e3d6000fd5b506022805460ff8616908110620040265762004026620087cb565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b6200409060226000018460ff1681548110620040755762004075620087cb565b6000918252602090912001546001600160a01b0316620034db565b505060010162003e71565b5030604051620040ab906200792b565b6001600160a01b039091168152602001604051809103906000f080158015620040d8573d6000803e3d6000fd5b50602880546001600160a01b0319166001600160a01b039290921691909117905560005b8360ff168160ff16101562005846576000836001811115620041225762004122620091c7565b036200564157600060226000018260ff1681548110620041465762004146620087cb565b9060005260206000200160009054906101000a90046001600160a01b03169050308164e8d4a51000620186a0604051620041809062007939565b6001600160a01b03948516815293909216602084015260408301526060820152608001604051809103906000f080158015620041c0573d6000803e3d6000fd5b50602980546001600160a01b0319166001600160a01b03929092169190911790556040518190620041f19062007947565b6001600160a01b039091168152602001604051809103906000f0801580156200421e573d6000803e3d6000fd5b50602960010160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550308164e8d4a51000620186a0604051620042629062007955565b6001600160a01b03948516815293909216602084015260408301526060820152608001604051809103906000f080158015620042a2573d6000803e3d6000fd5b50602b80546001600160a01b0319166001600160a01b03929092169190911790556022805460ff8416908110620042dd57620042dd620087cb565b60009182526020909120015460295460405163e8964e8160e01b81526001600160a01b03918216600482015291169063e8964e8190602401600060405180830381600087803b1580156200433057600080fd5b505af115801562004345573d6000803e3d6000fd5b5050505060226000018260ff1681548110620043655762004365620087cb565b600091825260209091200154602a5460405163e8964e8160e01b81526001600160a01b03918216600482015291169063e8964e8190602401600060405180830381600087803b158015620043b857600080fd5b505af1158015620043cd573d6000803e3d6000fd5b5050505060226000018260ff1681548110620043ed57620043ed620087cb565b600091825260209091200154602b5460405163e8964e8160e01b81526001600160a01b03918216600482015291169063e8964e8190602401600060405180830381600087803b1580156200444057600080fd5b505af115801562004455573d6000803e3d6000fd5b5050602954602480546001600160a01b039092169350915060ff8516908110620044835762004483620087cb565b600091825260209091200180546001600160a01b0319166001600160a01b03928316179055602a546025805491909216919060ff8516908110620044cb57620044cb620087cb565b600091825260209091200180546001600160a01b0319166001600160a01b03928316179055602b546026805491909216919060ff8516908110620045135762004513620087cb565b6000918252602082200180546001600160a01b03939093166001600160a01b031990931692909217909155604080516001808252818301909252908160200160208202803683370190505090503081600081518110620045775762004577620087cb565b6001600160a01b0392909216602092830291909101820152604080516003808252608082019092526000929091908201606080368337505060295482519293506001600160a01b031691839150600090620045d657620045d6620087cb565b6001600160a01b039283166020918202929092010152602a548251911690829060019081106200460a576200460a620087cb565b6001600160a01b039283166020918202929092010152602b548251911690829060029081106200463e576200463e620087cb565b6001600160a01b0392831660209182029290920101526028546040518592600092859291169030908790620046739062007963565b6200468496959493929190620091dd565b604051809103906000f080158015620046a1573d6000803e3d6000fd5b50602c80546001600160a01b0319166001600160a01b03929092169190911790556023805460ff8616908110620046dc57620046dc620087cb565b90600052602060002090600891828204019190066004029054906101000a900463ffffffff16604051620047109062007971565b63ffffffff9091168152602001604051809103906000f0801580156200473a573d6000803e3d6000fd5b50602e80546001600160a01b0319166001600160a01b03928316908117909155602c5460405163c7b2370b60e01b815260048101929092529091169063c7b2370b90602401600060405180830381600087803b1580156200479a57600080fd5b505af1158015620047af573d6000803e3d6000fd5b5050505060226001018460ff1681548110620047cf57620047cf620087cb565b6000918252602090912060088204015460079091166004026101000a900463ffffffff1662004800856001620087f7565b60285460405184916001600160a01b031690602790600190889062004825906200797f565b6200483797969594939291906200922d565b604051809103906000f08015801562004854573d6000803e3d6000fd5b50602d80546001600160a01b0319166001600160a01b03929092169190911790556023805460ff86169081106200488f576200488f620087cb565b90600052602060002090600891828204019190066004029054906101000a900463ffffffff16670de0b6b3a7640000604051620048cc906200798d565b63ffffffff90921682526020820152604001604051809103906000f080158015620048fb573d6000803e3d6000fd5b50602f80546001600160a01b0319166001600160a01b03929092169182179055604051630e7c9b7f60e21b8152670de0b6b3a764000060048201819052602482015261271060448201526339f26dfc90606401600060405180830381600087803b1580156200496957600080fd5b505af11580156200497e573d6000803e3d6000fd5b5050602d54602f5460405163c7b2370b60e01b81526001600160a01b0391821660048201529116925063c7b2370b9150602401600060405180830381600087803b158015620049cc57600080fd5b505af1158015620049e1573d6000803e3d6000fd5b50505050505062004a0c60405180606001604052806060815260200160608152602001606081525090565b62004a19866001620087f7565b60ff166001600160401b0381111562004a365762004a3662007b8e565b60405190808252806020026020018201604052801562004a9857816020015b6040805160c08101825260008082526020808301829052928201819052606082018190526080820181905260a0820152825260001990920191018162004a555790505b50815262004aa8866001620087f7565b60ff166001600160401b0381111562004ac55762004ac562007b8e565b60405190808252806020026020018201604052801562004b1957816020015b60408051608081018252600080825260208083018290529282018190526060820152825260001990920191018162004ae45790505b50602082015262004b2c866001620087f7565b60ff166001600160401b0381111562004b495762004b4962007b8e565b60405190808252806020026020018201604052801562004b9057816020015b604080518082019091526000808252602082015281526020019060019003908162004b685790505b506040828101919091528051600180825281830190925260009160208083019080368337505060408051600080825260208201909252602d54845194955090936001600160a01b03909116925084919062004bef5762004bef620087cb565b60200260200101906001600160a01b031690816001600160a01b03168152505060005b8860ff168160ff1610156200522f578060ff168660ff1603156200522657600062004c3f826001620087f7565b60408051600180825281830190925260ff92909216925060009190816020015b62004c696200799b565b81526020019060019003908162004c5f57905050905060006040518060c0016040528060646001600160401b03168152602001875160ff168152602001865160ff168152602001600060ff16815260200187815260200186815250905060405180604001604052808463ffffffff168152602001828152508260008151811062004cf75762004cf7620087cb565b60209081029190910101526029546040516329460b0b60e01b81526001600160a01b03909116906329460b0b9062004d34908590600401620092db565b600060405180830381600087803b15801562004d4f57600080fd5b505af115801562004d64573d6000803e3d6000fd5b5050602a546040516329460b0b60e01b81526001600160a01b0390911692506329460b0b915062004d9a908590600401620092db565b600060405180830381600087803b15801562004db557600080fd5b505af115801562004dca573d6000803e3d6000fd5b50600092506001915062004ddb9050565b60405190808252806020026020018201604052801562004e1857816020015b62004e0462007a04565b81526020019060019003908162004dfa5790505b506040805180820182526127108152602c546001600160a01b0316602080830191909152825180840190935263ffffffff881683528201819052825192935091839060009062004e6c5762004e6c620087cb565b602090810291909101015260295460405163c14c434960e01b81526001600160a01b039091169063c14c43499062004ea9908590600401620093b9565b600060405180830381600087803b15801562004ec457600080fd5b505af115801562004ed9573d6000803e3d6000fd5b50506040805160c08101825263ffffffff89168152611388602082018190529181019190915261271060608201526402540be40060808201526021546001600160801b031660a08201528b518051919550935060ff891692508210905062004f455762004f45620087cb565b602002602001018190525060405180608001604052808463ffffffff1681526020016113886001600160401b0316815260200161271061ffff1681526020016402540be4006001600160801b031681525087602001518560ff168151811062004fb25762004fb2620087cb565b602002602001018190525060405180604001604052808463ffffffff168152602001600381525087604001518560ff168151811062004ff55762004ff5620087cb565b60200260200101819052506000602260060160009054906101000a90046001600160a01b03166001600160a01b031663c18403276040518163ffffffff1660e01b8152600401602060405180830381865afa15801562005059573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200507f91906200942a565b60408051600180825281830190925291925060009190816020015b620050ce60408051808201825260008082528251606081018452818152602081810183905293810191909152909182015290565b8152602001906001900390816200509a57905050905060405180604001604052808663ffffffff16815260200160405180606001604052808560016200511591906200944a565b6001600160801b03168152600160208201819052604090910152905281518290600090620051475762005147620087cb565b60209081029190910101526028546040516318b0dbfb60e11b81526001600160a01b0390911690633161b7f6906200518490849060040162009478565b600060405180830381600087803b1580156200519f57600080fd5b505af1158015620051b4573d6000803e3d6000fd5b5050602854604051635d6d7ccb60e01b815268056bc75e2d6310000060048201526001600160a01b039091169250635d6d7ccb9150602401600060405180830381600087803b1580156200520757600080fd5b505af11580156200521c573d6000803e3d6000fd5b5050505050505050505b60010162004c12565b50604080516001808252818301909252600091816020015b6200525162007a49565b815260200190600190039081620052475750506040805160c081018252602c546001600160a01b03168152855160ff9081166020808401919091528651909116828401526000606083018190526080830188905260a08301879052835180850190945262011171845290830182905283519394509092849190620052d957620052d9620087cb565b6020908102919091010152602b5460405163642fa5a760e11b81526001600160a01b039091169063c85f4b4e9062005316908590600401620094ec565b600060405180830381600087803b1580156200533157600080fd5b505af115801562005346573d6000803e3d6000fd5b5050505050506040518060c0016040528060226001018760ff1681548110620053735762005373620087cb565b600091825260209182902060088204015460079091166004026101000a900463ffffffff168252611388908201819052604082015261271060608201526402540be40060808201526021546001600160801b031660a0909101528351805160ff8b16908110620053e757620053e7620087cb565b6020026020010181905250604051806080016040528060226001018760ff1681548110620054195762005419620087cb565b600091825260209182902060088204015460079091166004026101000a900463ffffffff1682526113888282015261271060408301526402540be400606090920191909152840151805160ff8b16908110620054795762005479620087cb565b6020026020010181905250604051806040016040528060226001018760ff1681548110620054ab57620054ab620087cb565b600091825260209182902060088204015460079091166004026101000a900463ffffffff16825260039101526040840151805160ff8b16908110620054f457620054f4620087cb565b6020908102919091010152602c548351604051633d85ac3360e01b81526001600160a01b0390921691633d85ac33916200553191600401620095ca565b600060405180830381600087803b1580156200554c57600080fd5b505af115801562005561573d6000803e3d6000fd5b5050602d5460208601516040516352d3b87160e01b81526001600160a01b0390921693506352d3b87192506200559a916004016200965c565b600060405180830381600087803b158015620055b557600080fd5b505af1158015620055ca573d6000803e3d6000fd5b5050602f54604080870151905163f5ff608f60e01b81526001600160a01b03909216935063f5ff608f92506200560391600401620096d1565b600060405180830381600087803b1580156200561e57600080fd5b505af115801562005633573d6000803e3d6000fd5b50505050505050506200583d565b6001836001811115620056585762005658620091c7565b03620057fd5760003060226000018360ff16815481106200567d576200567d620087cb565b6000918252602090912001546040516001600160a01b0390911690620056a39062007aad565b6001600160a01b03928316815291166020820152604001604051809103906000f080158015620056d7573d6000803e3d6000fd5b50905060226000018260ff1681548110620056f657620056f6620087cb565b60009182526020909120015460405163e8964e8160e01b81526001600160a01b0383811660048301529091169063e8964e8190602401600060405180830381600087803b1580156200574757600080fd5b505af11580156200575c573d6000803e3d6000fd5b505050508060226002018360ff16815481106200577d576200577d620087cb565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055508060226003018360ff1681548110620057c857620057c8620087cb565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550506200583d565b60405162461bcd60e51b8152602060048201526014602482015273696e76616c6964206c696272617279207479706560601b604482015260640162002d5e565b600101620040fc565b5060005b8360ff168160ff1610156200344957600060226000018260ff1681548110620058775762005877620087cb565b60009182526020822001546001600160a01b03169150846001811115620058a257620058a2620091c7565b03620059ef57806001600160a01b031663aafea3126201117160226004018560ff1681548110620058d757620058d7620087cb565b60009182526020909120015460405160e084901b6001600160e01b031916815263ffffffff90921660048301526001600160a01b03166024820152604401600060405180830381600087803b1580156200593057600080fd5b505af115801562005945573d6000803e3d6000fd5b50505050806001600160a01b031663a718531b6201117160226004018560ff1681548110620059785762005978620087cb565b600091825260208220015460405160e085901b6001600160e01b031916815263ffffffff90931660048401526001600160a01b031660248301526044820152606401600060405180830381600087803b158015620059d557600080fd5b505af1158015620059ea573d6000803e3d6000fd5b505050505b60005b8560ff168160ff16101562005b6a578060ff168360ff16031562005b61576001600160a01b03821663aafea31262005a2c836001620087f7565b6024805460ff881690811062005a465762005a46620087cb565b60009182526020909120015460405160e084901b6001600160e01b031916815260ff90921660048301526001600160a01b03166024820152604401600060405180830381600087803b15801562005a9c57600080fd5b505af115801562005ab1573d6000803e3d6000fd5b50505050816001600160a01b031663a718531b82600162005ad39190620087f7565b6025805460ff881690811062005aed5762005aed620087cb565b600091825260208220015460405160e085901b6001600160e01b031916815260ff90931660048401526001600160a01b031660248301526044820152606401600060405180830381600087803b15801562005b4757600080fd5b505af115801562005b5c573d6000803e3d6000fd5b505050505b600101620059f2565b50506001016200584a565b606060138054806020026020016040519081016040528092919081815260200182805480156200102e576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116200100f575050505050905090565b62005c2f603060089054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562002b99573d6000803e3d6000fd5b60315460408051638da5cb5b60e01b8152905162005c7c926001600160a01b031691638da5cb5b9160048083019260209291908290030181865afa15801562002b99573d6000803e3d6000fd5b6030546032546040516370a0823160e01b81526001600160a01b03918216600482015262005cbe92600160401b9004909116906370a0823190602401620025e0565b6031546033546040516370a0823160e01b81526001600160a01b03918216600482015262005cfa9291909116906370a0823190602401620025e0565b62005d91603060089054906101000a90046001600160a01b03166001600160a01b031663fc0c546a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562005d52573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062005d78919062008da4565b603054600160401b90046001600160a01b031662006714565b60315460408051637e062a3560e11b8152905162005e16926001600160a01b03169163fc0c546a9160048083019260209291908290030181865afa15801562005dde573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062005e04919062008da4565b6031546001600160a01b031662006714565b565b60006020600062005e2a868662005ff4565b63ffffffff16815260208101919091526040016000908120546001600160a01b031691508062005e5a8462006b73565b915091506000604051806060016040528062005e7789896200610a565b63ffffffff16815260200162005e8e89896200611c565b815260200162005e9f898962006139565b6001600160401b0316905290506001600160a01b038416630c0c389e84848462005eca8c8c62006160565b62005ed68d8d62006175565b62005ee28e8e620064c7565b604051806020016040528060008152506040518963ffffffff1660e01b815260040162005f15969594939291906200971b565b6000604051808303818589803b15801562005f2f57600080fd5b5088f115801562005f44573d6000803e3d6000fd5b50505050505050505050505050565b60008062003684848462006c6a565b600062005f70858562005ff4565b9050600062005f80868662006cce565b63ffffffff83166000908152601d60209081526040808320848452909152812091925062005faf888862006175565b905062005fbd828262006ce0565b6000818152601e6020526040902062005fd8888a83620097e4565b506000818152601f60205260409020620034d0868883620097e4565b6000620060066031602d8486620098b0565b6200601191620098dc565b60e01c9392505050565b60008060008060006200603086600562006d3e565b9150915081620060925760405162461bcd60e51b815260206004820152602660248201527f4f7074696f6e7348656c7065723a206c7a52656164206f7074696f6e206e6f7460448201526508199bdd5b9960d21b606482015260840162002d5e565b604051634ba8e54360e11b81523090639751ca8690620060b790849060040162008426565b606060405180830381865afa158015620060d5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620060fb91906200990b565b94509450945050509193909250565b600062006006600d60098486620098b0565b60006200612e602d600d8486620098b0565b620011399162009954565b60006200614b600960018486620098b0565b620061569162009973565b60c01c9392505050565b60006200113962006172848462006cce565b90565b60006200612e607160518486620098b0565b62005e16620071e4565b60008083604051602001620061a791906200918b565b60408051601f1981840301815290829052620061c8918590602001620099a2565b60405160208183030381529060405290508051602082016000f09150813b62002cf057600080fd5b60008060008060006200620586600362006d3e565b91509150816200626a5760405162461bcd60e51b815260206004820152602960248201527f4f7074696f6e7348656c7065723a206c7a436f6d706f7365206f7074696f6e206044820152681b9bdd08199bdd5b9960ba1b606482015260840162002d5e565b604051630518e8ab60e41b8152309063518e8ab0906200628f90849060040162008426565b606060405180830381865afa158015620062ad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620062d39190620099d5565b91986001600160801b039182169850911695509350505050565b600080806012841480159062006304575060228414155b156200632357604051638b4aa70b60e01b815260040160405180910390fd5b620063318585600062007232565b925062006341858560026200725d565b9150602284146200635457600062006362565b62006362858560126200725d565b90509250925092565b546001600160801b03808216600160801b9092048116919091031690565b366000620036846051828587620098b0565b366000620036848360518187620098b0565b6040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052606090600090605c0160408051808303601f190181529082905280516020909101206338d07aa960e21b82526001600483015260248201819052915060009081908190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063e341eaa490604401606060405180830381865afa1580156200645d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062006483919062009a0b565b6040805160208101939093528281019190915260f89290921b6001600160f81b03191660608201528151604181830301815260619091019091529695505050505050565b366000620036848360718187620098b0565b600036816001840181620064ef88888462007232565b6002929092019190506200650588888462007288565b94506001820161ffff821683016200652081838b8d620098b0565b979b909a50969850505061ffff160193505050565b606083600362006547826000620072b0565b61ffff16146200657f576200655e816000620072b0565b604051633a51740d60e01b815261ffff909116600482015260240162002d5e565b60006200658d858562007311565b90506200659d866001836200738c565b9695505050505050565b6060846003620065b9826000620072b0565b61ffff1614620065d0576200655e816000620072b0565b6000620065df86868662007402565b9050620065ef876003836200738c565b979650505050505050565b80821462000a2d57600080516020620319788339815191526040516200665c9060208082526022908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b75696e604082015261745d60f01b606082015260800190565b60405180910390a17fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a88260405162006695919062009a45565b60405180910390a17fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a881604051620066ce919062009a7e565b60405180910390a162000a2d62007486565b606084848484604051602001620066fb949392919062009aa9565b6040516020818303038152906040529050949350505050565b806001600160a01b0316826001600160a01b03161462000a2d57600080516020620319788339815191526040516200678b9060208082526025908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b616464604082015264726573735d60d81b606082015260800190565b60405180910390a17f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f82604051620067c4919062009afa565b60405180910390a17f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f81604051620066ce919062009b3f565b80821462000a2d5760008051602062031978833981519152604051620068629060208082526025908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b627974604082015264657333325d60d81b606082015260800190565b60405180910390a17fafb795c9c61e4fe7468c386f925d7a5429ecad9c0495ddb8d38d690614d32f99826040516200689b919062009a45565b60405180910390a17fafb795c9c61e4fe7468c386f925d7a5429ecad9c0495ddb8d38d690614d32f9981604051620066ce919062009a7e565b62000a2d828262007599565b6000620069008254600160801b81046001600160801b0390811691161490565b15620069125762006912603262007677565b5080546000196001600160801b03600160801b9092048216011660009081526001909101602052604090205490565b80546000906001600160801b03600160801b82048116911681036200696c576200696c603162007677565b600019016001600160801b039081166000818152600185016020526040812080549190558454909216600160801b909102179092555090565b6000620069b3838362006d3e565b509392505050565b600080600080620069ce85600262006d3e565b915091508162006a345760405162461bcd60e51b815260206004820152602a60248201527f4f7074696f6e7348656c7065723a206e617469766544726f70206f7074696f6e604482015269081b9bdd08199bdd5b9960b21b606482015260840162002d5e565b604051635caa7efb60e11b8152309063b954fdf69062006a5990849060040162008426565b6040805180830381865afa15801562006a76573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062006a9c919062009b6a565b6001600160801b03909116969095509350505050565b600080806014841480159062006ac9575060248414155b1562006ae857604051636f5bff2160e11b815260040160405180910390fd5b62006af6858560006200725d565b925062006b068585601062007689565b91506024841462006b1957600062006362565b62006362858560146200725d565b6000806030831462006b4c576040516361d0c2c760e11b815260040160405180910390fd5b62006b5a848460006200725d565b915062006b6a84846010620076b4565b90509250929050565b60008060008062006b8685600162006d3e565b915091508162006beb5760405162461bcd60e51b815260206004820152602960248201527f4f7074696f6e7348656c7065723a206c7a52656365697665206f7074696f6e206044820152681b9bdd08199bdd5b9960ba1b606482015260840162002d5e565b60405163f93e1d6160e01b8152309063f93e1d619062006c1090849060040162008426565b6040805180830381865afa15801562006c2d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062006c53919062009b9b565b6001600160801b0391821697911695509350505050565b6000806010831480159062006c80575060208314155b1562006c9f57604051634796aee160e01b815260040160405180910390fd5b62006cad848460006200725d565b91506020831462006cc057600062006b6a565b62006b6a848460106200725d565b60006200612e605160318486620098b0565b81546001600160801b038082166000190191600160801b900481169082160362006d105762006d10604162007677565b6001600160801b0316600081815260018401602052604090209190915581546001600160801b031916179055565b601c5460405163e5c5e9a360e01b815260009160609183916001600160a01b03169063e5c5e9a39062006d7690889060040162008426565b600060405180830381865afa15801562006d94573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262006dbe919081019062009bcf565b5060408051600080825260208201909252919250908190819081905b8551851015620071b757604051636e1775e360e01b8152600090819081903090636e1775e39062006e12908c908c9060040162008cc6565b600060405180830381865afa15801562006e30573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262006e5a919081019062009c39565b9250925092508b60ff168360ff1603620071ac5760008080808060001960ff89160162006f535760405163f93e1d6160e01b8152309063f93e1d619062006ea6908a9060040162008426565b6040805180830381865afa15801562006ec3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062006ee9919062009b9b565b909550935062006efa858d62009c98565b9b5062006f08848c62009c98565b9a508b8b60405160200162006f3c929190608092831b6001600160801b031990811682529190921b16601082015260200190565b6040516020818303038152906040529850620071a6565b60011960ff8916016200700357604051635caa7efb60e11b8152309063b954fdf69062006f85908a9060040162008426565b6040805180830381865afa15801562006fa2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062006fc8919062009b6a565b909450925062006fd9848c62009c98565b6040516001600160801b0319608083901b16602082015260308101859052909b5060500162006f3c565b60021960ff891601620070b357604051630518e8ab60e41b8152309063518e8ab09062007035908a9060040162008426565b606060405180830381865afa15801562007053573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620070799190620099d5565b909650945091506200708c858d62009c98565b9b506200709a848c62009c98565b9a50818c8c60405160200162006f3c9392919062009cbb565b60041960ff891601620071a657604051634ba8e54360e11b81523090639751ca8690620070e5908a9060040162008426565b606060405180830381865afa15801562007103573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200712991906200990b565b91965090945090506200713d848c62009c98565b9a506200714b858d62009c98565b9b5062007159818b62009cf1565b6040516001600160801b031960808f811b821660208401526001600160e01b031960e085901b1660308401528e901b166034820152909a5060440160405160208183030381529060405298505b50505050505b965062006dda915050565b8051600003620071d35760009750955062003689945050505050565b60019a909950975050505050505050565b604051620071f29062007abb565b604051809103906000f0801580156200720f573d6000803e3d6000fd5b50601c80546001600160a01b0319166001600160a01b0392909216919091179055565b6000600282016200724681848688620098b0565b620072519162009d11565b60f01c95945050505050565b6000601082016200727181848688620098b0565b6200727c9162009d40565b60801c95945050505050565b60008383838181106200729f576200729f620087cb565b919091013560f81c95945050505050565b6000620072bf82600262008ba1565b83511015620073085760405162461bcd60e51b8152602060048201526014602482015273746f55696e7431365f6f75744f66426f756e647360601b604482015260640162002d5e565b50016002015190565b60606001600160801b038216156200735b57604080516001600160801b0319608086811b8216602084015285901b1660308201520160405160208183030381529060405262001139565b6040516001600160801b0319608085901b166020820152603001604051602081830303815290604052905092915050565b60608360036200739e826000620072b0565b61ffff1614620073b5576200655e816000620072b0565b846001620073c48551620076dc565b620073d190600162009d6f565b8686604051602001620073e995949392919062009d8d565b6040516020818303038152906040529150509392505050565b60606001600160801b0382161562007440578383836040516020016200742b9392919062009cbb565b6040516020818303038152906040526200747e565b6040516001600160f01b031960f086901b1660208201526001600160801b0319608085901b1660228201526032016040516020818303038152906040525b949350505050565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620075885760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190526519985a5b195960d21b9282019290925260016060820152600091907f70ca10bbd0dbfd9020a9f4b13402c16cb120705e0d1c0aeab10fa353ae586fc49060800160408051601f198184030181529082905262007523929160200162009158565b60408051601f19818403018152908290526200753f916200918b565b6000604051808303816000865af19150503d80600081146200757e576040519150601f19603f3d011682016040523d82523d6000602084013e62007583565b606091505b505050505b6007805461ff001916610100179055565b620075a5828262007711565b62000a2d5760008051602062031978833981519152604051620076059060208082526023908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b62797460408201526265735d60e81b606082015260800190565b60405180910390a17fd26e16cad4548705e4c9e2d94f98ee91c289085ee425594fd5635fa2964ccf18826040516200763e919062009df8565b60405180910390a17fd26e16cad4548705e4c9e2d94f98ee91c289085ee425594fd5635fa2964ccf1881604051620066ce919062009e37565b634e487b71600052806020526024601cfd5b6000600482016200769d81848688620098b0565b620076a891620098dc565b60e01c95945050505050565b600060208201620076c881848688620098b0565b620076d39162009954565b95945050505050565b600061ffff8211156200770d576040516306dfcc6560e41b8152601060048201526024810183905260440162002d5e565b5090565b805182516001919003620077955760005b83518110156200778e57828181518110620077415762007741620087cb565b602001015160f81c60f81b6001600160f81b0319168482815181106200776b576200776b620087cb565b01602001516001600160f81b031916146200778557600091505b60010162007722565b506200145f565b50600092915050565b6139358062009e6383390190565b6040518060a00160405280600063ffffffff16815260200160006001600160a01b031681526020016060815260200160008152602001606081525090565b61052c806200d79883390190565b82805482825590600052602060002090810192821562007850579160200282015b828111156200785057825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019062007819565b506200770d92915062007ac9565b82805482825590600052602060002090600701600890048101928215620078505791602002820160005b83821115620078ce57835183826101000a81548163ffffffff021916908363ffffffff160217905550926020019260040160208160030104928301926001030262007888565b8015620079005782816101000a81549063ffffffff0219169055600401602081600301049283019260010302620078ce565b50506200770d92915062007ac9565b6154bf806200dcc483390190565b615649806201318383390190565b6114d680620187cc83390190565b6149708062019ca283390190565b612441806201e61283390190565b614c078062020a5383390190565b61313b806202565a83390190565b611625806202879583390190565b613bf78062029dba83390190565b611eb6806202d9b183390190565b6040518060400160405280600063ffffffff168152602001620079ff6040518060c0016040528060006001600160401b03168152602001600060ff168152602001600060ff168152602001600060ff16815260200160608152602001606081525090565b905290565b6040518060400160405280600063ffffffff168152602001620079ff6040518060400160405280600063ffffffff16815260200160006001600160a01b031681525090565b6040518060400160405280600063ffffffff168152602001620079ff6040518060c0016040528060006001600160a01b03168152602001600060ff168152602001600060ff168152602001600060ff16815260200160608152602001606081525090565b61191f806202f86783390190565b6107f2806203118683390190565b5b808211156200770d576000815560010162007aca565b63ffffffff8116811462007af357600080fd5b50565b6001600160a01b038116811462007af357600080fd5b6000806040838503121562007b2057600080fd5b823562007b2d8162007ae0565b9150602083013562007b3f8162007af6565b809150509250929050565b60008083601f84011262007b5d57600080fd5b5081356001600160401b0381111562007b7557600080fd5b6020830191508360208285010111156200368957600080fd5b634e487b7160e01b600052604160045260246000fd5b60405160c081016001600160401b038111828210171562007bc95762007bc962007b8e565b60405290565b604051601f8201601f191681016001600160401b038111828210171562007bfa5762007bfa62007b8e565b604052919050565b60006001600160401b0382111562007c1e5762007c1e62007b8e565b50601f01601f191660200190565b600082601f83011262007c3e57600080fd5b813562007c5562007c4f8262007c02565b62007bcf565b81815284602083860101111562007c6b57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806060858703121562007c9f57600080fd5b84356001600160401b038082111562007cb757600080fd5b62007cc58883890162007b4a565b9096509450602087013591508082111562007cdf57600080fd5b62007ced8883890162007c2c565b9350604087013591508082111562007d0457600080fd5b5062007d138782880162007c2c565b91505092959194509250565b60ff8116811462007af357600080fd5b803560028110620037c257600080fd5b6000806040838503121562007d5357600080fd5b823562007d608162007d1f565b915062006b6a6020840162007d2f565b60008151808452602080850194506020840160005b8381101562007dac5781516001600160a01b03168752958201959082019060010162007d85565b509495945050505050565b60208152600062001139602083018462007d70565b60008060006060848603121562007de257600080fd5b83356001600160401b0381111562007df957600080fd5b62007e078682870162007c2c565b935050602084013562007e1a8162007d1f565b9150604084013562007e2c8162007d1f565b809150509250925092565b60005b8381101562007e5457818101518382015260200162007e3a565b50506000910152565b6000815180845262007e7781602086016020860162007e37565b601f01601f19169290920160200192915050565b60008282518085526020808601955060208260051b8401016020860160005b8481101562007edc57601f1986840301895262007ec983835162007e5d565b9884019892509083019060010162007eaa565b5090979650505050505050565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b8381101562007f5e57888303603f19018552815180516001600160a01b0316845287015187840187905262007f4a8785018262007e8b565b958801959350509086019060010162007f12565b509098975050505050505050565b600080600080600080600060c0888a03121562007f8857600080fd5b873562007f958162007ae0565b9650602088013562007fa78162007af6565b955060408801356001600160401b038082111562007fc457600080fd5b62007fd28b838c0162007c2c565b965060608a0135955060808a0135915062007fed8262007af6565b90935060a089013590808211156200800457600080fd5b50620080138a828b0162007b4a565b989b979a50959850939692959293505050565b600080602083850312156200803a57600080fd5b82356001600160401b038111156200805157600080fd5b6200805f8582860162007b4a565b90969095509350505050565b61ffff8116811462007af357600080fd5b600080604083850312156200809057600080fd5b82356200809d816200806b565b946020939093013593505050565b600080600060408486031215620080c157600080fd5b83356001600160401b0380821115620080d957600080fd5b620080e78783880162007b4a565b909550935060208601359150808211156200810157600080fd5b50620081108682870162007c2c565b9150509250925092565b60006001600160401b0382111562008136576200813662007b8e565b5060051b60200190565b600082601f8301126200815257600080fd5b813560206200816562007c4f836200811a565b8083825260208201915060208460051b8701019350868411156200818857600080fd5b602086015b84811015620081b1578035620081a38162007af6565b83529183019183016200818d565b509695505050505050565b60008060408385031215620081d057600080fd5b82356001600160401b0380821115620081e857600080fd5b620081f68683870162008140565b93506020915081850135818111156200820e57600080fd5b85019050601f810186136200822257600080fd5b80356200823362007c4f826200811a565b81815260059190911b820183019083810190888311156200825357600080fd5b928401925b828410156200827e5783356200826e8162007ae0565b8252928401929084019062008258565b80955050505050509250929050565b600060208083018184528085518083526040925060408601915060408160051b8701018488016000805b848110156200833757898403603f19018652825180516001600160a01b03168552880151888501889052805188860181905290890190839060608701905b80831015620083215783516001600160e01b0319168252928b019260019290920191908b0190620082f5565b50978a01979550505091870191600101620082b7565b50919998505050505050505050565b6000806000604084860312156200835c57600080fd5b83356001600160401b038111156200837357600080fd5b620083818682870162007b4a565b909790965060209590950135949350505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60ff85168152606060208201526000620083dd60608301858762008395565b905082604083015295945050505050565b6000602082840312156200840157600080fd5b81356001600160401b038111156200841857600080fd5b6200747e8482850162008140565b60208152600062001139602083018462007e5d565b600080600080600060a086880312156200845457600080fd5b8535620084618162007ae0565b945060208601359350604086013592506060860135620084818162007af6565b915060808601356001600160401b038111156200849d57600080fd5b620084ab8882890162007c2c565b9150509295509295909350565b60208152600062001139602083018462007e8b565b600080600080600060808688031215620084e657600080fd5b85356001600160401b0380821115620084fe57600080fd5b6200850c89838a0162007b4a565b909750955060208801359150808211156200852657600080fd5b50620085358882890162007c2c565b9350506040860135915060608601356200854f8162007af6565b809150509295509295909350565b6000602082840312156200857057600080fd5b8135620011398162007af6565b600080604083850312156200859157600080fd5b82356200809d8162007ae0565b600080600060608486031215620085b457600080fd5b8335620085c18162007d1f565b9250620085d16020850162007d2f565b915060408401356001600160401b03811115620085ed57600080fd5b620081108682870162008140565b6001600160801b038116811462007af357600080fd5b6000602082840312156200862457600080fd5b81356200113981620085fb565b600080600080604085870312156200864857600080fd5b84356001600160401b03808211156200866057600080fd5b6200866e8883890162007b4a565b909650945060208701359150808211156200868857600080fd5b50620086978782880162007b4a565b95989497509550505050565b855163ffffffff168152602080870151908201526040808701516001600160401b03169082015260018060a01b038516606082015283608082015260e060a08201526000620086f660e083018562007e5d565b82810360c08401526200870a818562007e5d565b98975050505050505050565b6080815260006200873b6080830160048152631853d19560e21b602082015260400190565b82810360208401526200875f8160048152631853d19560e21b602082015260400190565b6001600160a01b0395861660408501529390941660609092019190915250919050565b608081526000620087a76080830160048152631893d19560e21b602082015260400190565b82810360208401526200875f8160048152631893d19560e21b602082015260400190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60ff81811683821601908111156200145f576200145f620087e1565b60ff82811682821603908111156200145f576200145f620087e1565b600181811c908216806200884457607f821691505b6020821081036200886557634e487b7160e01b600052602260045260246000fd5b50919050565b6001600160a01b038881168252871660208201526040810186905261ffff8516606082015260c060808201819052600090620088ab908301858762008395565b82810360a0840152620088bf818562007e5d565b9a9950505050505050505050565b8051620037c28162007af6565b80518015158114620037c257600080fd5b60008060408385031215620088ff57600080fd5b82516200890c8162007af6565b915062006b6a60208401620088da565b80516001600160401b0381168114620037c257600080fd5b8051620037c28162007d1f565b6000806000606084860312156200895757600080fd5b62008962846200891c565b92506020840151620089748162007d1f565b604085015190925062007e2c8162007d1f565b600082601f8301126200899957600080fd5b8151620089aa62007c4f8262007c02565b818152846020838601011115620089c057600080fd5b6200747e82602083016020870162007e37565b600060208284031215620089e657600080fd5b81516001600160401b03811115620089fd57600080fd5b6200747e8482850162008987565b600082601f83011262008a1d57600080fd5b8151602062008a3062007c4f836200811a565b8083825260208201915060208460051b87010193508684111562008a5357600080fd5b602086015b84811015620081b157805162008a6e8162007af6565b835291830191830162008a58565b60006020828403121562008a8f57600080fd5b81516001600160401b038082111562008aa757600080fd5b9083019060c0828603121562008abc57600080fd5b62008ac662007ba4565b62008ad1836200891c565b815262008ae16020840162008934565b602082015262008af46040840162008934565b604082015262008b076060840162008934565b606082015260808301518281111562008b1f57600080fd5b62008b2d8782860162008a0b565b60808301525060a08301518281111562008b4657600080fd5b62008b548782860162008a0b565b60a08301525095945050505050565b8183823760009101908152919050565b60608152600062008b88606083018662007e5d565b905083602083015260ff83166040830152949350505050565b808201808211156200145f576200145f620087e1565b63ffffffff851681526001600160a01b038416602082015260806040820181905260009062008be99083018562007e5d565b905082606083015295945050505050565b60006020828403121562008c0d57600080fd5b5051919050565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b8381101562007f5e57888303603f190185528151805163ffffffff168452878101516001600160a01b0316888501528681015160a08886018190529062008c878287018262007e5d565b91505060608083015181870152506080808301519250858203818701525062008cb1818362007e5d565b96890196945050509086019060010162008c3d565b60408152600062008cdb604083018562007e5d565b90508260208301529392505050565b60006020828403121562008cfd57600080fd5b81516001600160401b038082111562008d1557600080fd5b9083019060c0828603121562008d2a57600080fd5b62008d3462007ba4565b62008ad183620088cd565b8281526000825162008d5981602085016020870162007e37565b919091016020019392505050565b60608152600062008d7c606083018662007e5d565b60208301949094525060400152919050565b6020815260006200747e60208301848662008395565b60006020828403121562008db757600080fd5b8151620011398162007af6565b60006020828403121562008dd757600080fd5b8151620011398162007ae0565b63ffffffff81511682526020810151602083015260408101516040830152606081015160608301526000608082015160e0608085015262008e2960e085018262007e5d565b905060a083015184820360a086015262008e44828262007e5d565b91505060c083015184820360c0860152620076d3828262007e5d565b60408152600062008e75604083018562008de4565b905082151560208301529392505050565b60006040828403121562008e9957600080fd5b604051604081018181106001600160401b038211171562008ebe5762008ebe62007b8e565b604052825181526020928301519281019290925250919050565b60006040828403121562008eeb57600080fd5b62001139838362008e86565b60808152600062008f0c608083018662008de4565b8451602084810191909152909401516040830152506001600160a01b0391909116606090910152919050565b60008082840360c081121562008f4d57600080fd5b608081121562008f5c57600080fd5b50604051606081018181106001600160401b038211171562008f825762008f8262007b8e565b6040528351815262008f97602085016200891c565b602082015262008fab856040860162008e86565b6040820152915062006b6a846080850162008e86565b63ffffffff87168152600060018060a01b03808816602084015260c0604084015262008ff160c084018862007e5d565b866060850152818616608085015283810360a0850152620088bf818662007e5d565b818103818111156200145f576200145f620087e1565b6000816200903b576200903b620087e1565b506000190190565b60408152600062009058604083018562007e5d565b8281036020840152620076d3818562007e5d565b60608152600062009081606083018662007e5d565b828103602084015262009095818662007e5d565b905082810360408401526200659d818562007e5d565b608081526000620090c0608083018762007e5d565b8281036020840152620090d4818762007e5d565b604084019590955250506001600160a01b039190911660609091015292915050565b63ffffffff88168152600060018060a01b03808916602084015260c060408401526200912660c084018962007e5d565b876060850152818716608085015283810360a08501526200914981868862008395565b9b9a5050505050505050505050565b6001600160e01b03198316815281516000906200917d81600485016020870162007e37565b919091016004019392505050565b600082516200919f81846020870162007e37565b9190910192915050565b600060208284031215620091bc57600080fd5b6200113982620088da565b634e487b7160e01b600052602160045260246000fd5b600060018060a01b038089168352808816602084015260c060408401526200920960c084018862007d70565b8187166060850152818616608085015283810360a0850152620088bf818662007d70565b63ffffffff881681526000602060ff8916602084015260e060408401526200925960e084018962007d70565b6001600160a01b0388811660608601528482036080860152875480835260008981526020808220940191905b81811015620092a557845484168352600194850194928601920162009285565b50506001600160401b03881660a087015285810360c0870152620092ca818862007d70565b9d9c50505050505050505050505050565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b8381101562007f5e57603f19898403810186528251805163ffffffff16855288015188850188905280516001600160401b0316888601528089015160ff9081166060808801919091528983015182166080808901919091529083015190911660a0808801919091529082015160c080880152906200938761010088018362007d70565b920151868303840160e0880152919050620093a3818362007d70565b978a019795505050918701915060010162009304565b602080825282518282018190526000919060409081850190868401855b828110156200941d578151805163ffffffff9081168652908701518051909116878601528601516001600160a01b03168585015260609093019290850190600101620093d6565b5091979650505050505050565b6000602082840312156200943d57600080fd5b81516200113981620085fb565b6001600160801b03818116838216028082169190828114620094705762009470620087e1565b505092915050565b602080825282518282018190526000919060409081850190868401855b828110156200941d578151805163ffffffff90811686529087015180516001600160801b031688870152808801516001600160401b0316878701528601511660608501526080909301929085019060010162009495565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b8381101562007f5e57603f19898403810186528251805163ffffffff16855288015188850188905280516001600160a01b0316888601528089015160ff9081166060808801919091528983015182166080808901919091529083015190911660a0808801919091529082015160c080880152906200959861010088018362007d70565b920151868303840160e0880152919050620095b4818362007d70565b978a019795505050918701915060010162009515565b602080825282518282018190526000919060409081850190868401855b828110156200941d578151805163ffffffff168552868101516001600160401b039081168887015286820151168686015260608082015161ffff16908601526080808201516001600160801b039081169187019190915260a091820151169085015260c09093019290850190600101620095e7565b602080825282518282018190526000919060409081850190868401855b828110156200941d578151805163ffffffff168552868101516001600160401b0316878601528581015161ffff16868601526060908101516001600160801b0316908501526080909301929085019060010162009679565b602080825282518282018190526000919060409081850190868401855b828110156200941d578151805163ffffffff168552860151868501529284019290850190600101620096ee565b865163ffffffff168152602080880151908201526040808801516001600160401b03169082015260018060a01b038616606082015284608082015260e060a082015260006200976f60e08301858762008395565b82810360c084015262009783818562007e5d565b9998505050505050505050565b601f8211156200214c576000816000526020600020601f850160051c81016020861015620097bb5750805b601f850160051c820191505b81811015620097dc57828155600101620097c7565b505050505050565b6001600160401b03831115620097fe57620097fe62007b8e565b62009816836200980f83546200882f565b8362009790565b6000601f8411600181146200984d5760008515620098345750838201355b600019600387901b1c1916600186901b17835562000f78565b600083815260209020601f19861690835b828110156200988057868501358255602094850194600190920191016200985e565b50868210156200989e5760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b60008085851115620098c157600080fd5b83861115620098cf57600080fd5b5050820193919092039150565b6001600160e01b03198135818116916004851015620094705760049490940360031b84901b1690921692915050565b6000806000606084860312156200992157600080fd5b83516200992e81620085fb565b6020850151909350620099418162007ae0565b604085015190925062007e2c81620085fb565b803560208310156200145f57600019602084900360031b1b1692915050565b6001600160c01b03198135818116916008851015620094705760089490940360031b84901b1690921692915050565b60008351620099b681846020880162007e37565b835190830190620099cc81836020880162007e37565b01949350505050565b600080600060608486031215620099eb57600080fd5b8351620099f8816200806b565b60208501519093506200994181620085fb565b60008060006060848603121562009a2157600080fd5b835162009a2e8162007d1f565b602085015160409095015190969495509392505050565b60408152600062009a7060408301600a8152690808080808081319599d60b21b602082015260400190565b905082602083015292915050565b60408152600062009a7060408301600a8152690808080808149a59da1d60b21b602082015260400190565b6001600160401b0360c01b8560c01b16815263ffffffff60e01b8460e01b16600882015282600c8201526000825162009aea81602c85016020870162007e37565b91909101602c0195945050505050565b60408152600062009b2560408301600a8152690808080808081319599d60b21b602082015260400190565b6001600160a01b0393909316602092909201919091525090565b60408152600062009b2560408301600a8152690808080808149a59da1d60b21b602082015260400190565b6000806040838503121562009b7e57600080fd5b825162009b8b81620085fb565b6020939093015192949293505050565b6000806040838503121562009baf57600080fd5b825162009bbc81620085fb565b602084015190925062007b3f81620085fb565b6000806040838503121562009be357600080fd5b82516001600160401b038082111562009bfb57600080fd5b62009c098683870162008987565b9350602085015191508082111562009c2057600080fd5b5062009c2f8582860162008987565b9150509250929050565b60008060006060848603121562009c4f57600080fd5b835162009c5c8162007d1f565b60208501519093506001600160401b0381111562009c7957600080fd5b62009c878682870162008987565b925050604084015190509250925092565b6001600160801b0381811683821601908082111562002cf05762002cf0620087e1565b60f09390931b6001600160f01b0319168352608091821b6001600160801b03199081166002850152911b16601282015260220190565b63ffffffff81811683821601908082111562002cf05762002cf0620087e1565b6001600160f01b03198135818116916002851015620094705760029490940360031b84901b1690921692915050565b6001600160801b03198135818116916010851015620094705760109490940360031b84901b1690921692915050565b61ffff81811683821601908082111562002cf05762002cf0620087e1565b6000865162009da1818460208b0162007e37565b6001600160f81b031960f888811b82169285019283526001600160f01b031960f089901b16600184015286901b166003820152835162009de981600484016020880162007e37565b01600401979650505050505050565b60408152600062009e2360408301600a8152690808080808081319599d60b21b602082015260400190565b82810360208401526200747e818562007e5d565b60408152600062009e2360408301600a8152690808080808149a59da1d60b21b60208201526040019056fe60c06040523480156200001157600080fd5b5060405162003935380380620039358339810160408190526200003491620002d2565b83838383838360128484818181818d6001600160a01b0381166200007257604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b6200007d8162000198565b506001600160a01b038083166080528116620000ac57604051632d618d8160e21b815260040160405180910390fd5b60805160405163ca5eb5e160e01b81526001600160a01b0383811660048301529091169063ca5eb5e190602401600060405180830381600087803b158015620000f457600080fd5b505af115801562000109573d6000803e3d6000fd5b505050505050505062000121620001e860201b60201c565b60ff168360ff16101562000148576040516301e9714b60e41b815260040160405180910390fd5b6200015560068462000377565b6200016290600a62000496565b60a052506008915062000178905083826200053f565b5060096200018782826200053f565b50505050505050505050506200060b565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600690565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200021557600080fd5b81516001600160401b0380821115620002325762000232620001ed565b604051601f8301601f19908116603f011681019082821181831017156200025d576200025d620001ed565b81604052838152602092508660208588010111156200027b57600080fd5b600091505b838210156200029f578582018301518183018401529082019062000280565b6000602085830101528094505050505092915050565b80516001600160a01b0381168114620002cd57600080fd5b919050565b60008060008060808587031215620002e957600080fd5b84516001600160401b03808211156200030157600080fd5b6200030f8883890162000203565b955060208701519150808211156200032657600080fd5b50620003358782880162000203565b9350506200034660408601620002b5565b91506200035660608601620002b5565b905092959194509250565b634e487b7160e01b600052601160045260246000fd5b60ff828116828216039081111562000393576200039362000361565b92915050565b600181815b80851115620003da578160001904821115620003be57620003be62000361565b80851615620003cc57918102915b93841c93908002906200039e565b509250929050565b600082620003f35750600162000393565b81620004025750600062000393565b81600181146200041b5760028114620004265762000446565b600191505062000393565b60ff8411156200043a576200043a62000361565b50506001821b62000393565b5060208310610133831016604e8410600b84101617156200046b575081810a62000393565b62000477838362000399565b80600019048211156200048e576200048e62000361565b029392505050565b6000620004a760ff841683620003e2565b9392505050565b600181811c90821680620004c357607f821691505b602082108103620004e457634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200053a576000816000526020600020601f850160051c81016020861015620005155750805b601f850160051c820191505b81811015620005365782815560010162000521565b5050505b505050565b81516001600160401b038111156200055b576200055b620001ed565b62000573816200056c8454620004ae565b84620004ea565b602080601f831160018114620005ab5760008415620005925750858301515b600019600386901b1c1916600185901b17855562000536565b600085815260208120601f198616915b82811015620005dc57888601518255948401946001909101908401620005bb565b5085821015620005fb5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a0516132be6200067760003960008181610768015281816114b80152818161199b0152611b0001526000818161063001528181610b5b015281816111da015281816115ae015281816117f501528181611fc8015281816120cc015261218301526132be6000f3fe6080604052600436106102c95760003560e01c8063715018a611610175578063bb0b6a53116100dc578063d045a0dc11610095578063f01630231161006f578063f016302314610958578063f2fde38b14610978578063fc0c546a1461057f578063ff7bd03d1461099857600080fd5b8063d045a0dc146108df578063d4243885146108f2578063dd62ed3e1461091257600080fd5b8063bb0b6a531461081e578063bc70b3541461084b578063bd815db01461086b578063c07799881461087e578063c7c7f5b31461089e578063ca5eb5e1146108bf57600080fd5b8063963efcaa1161012e578063963efcaa146107565780639f68b9641461078a578063a9059cbb1461079e578063b3a5abeb146107be578063b731ea0a146107de578063b98bd070146107fe57600080fd5b8063715018a6146106a85780637d25a05e146106bd57806382413eac146106e0578063857749b01461070f5780638da5cb5b1461072357806395d89b411461074157600080fd5b806323b872dd1161023457806352ae2879116101ed5780635a0dfe4d116101c75780635a0dfe4d146105e75780635e280f111461061e5780636fc1b31e1461065257806370a082311461067257600080fd5b806352ae28791461057f57806354f52414146105925780635535d461146105c757600080fd5b806323b872dd146104b0578063313ce567146104d05780633400288b146104f25780633b6f743b1461051257806340c10f191461053f5780634dba701b1461055f57600080fd5b806313137d651161028657806313137d65146103f6578063134d4f251461040b578063156a0d0f1461043357806317442b701461045a57806318160ddd1461047c5780631f5e13341461049b57600080fd5b8063056d62de146102ce57806306fdde0314610305578063095ea7b3146103275780630d35b415146103575780630e78842c14610386578063111ecdad146103be575b600080fd5b3480156102da57600080fd5b506102ee6102e93660046122c3565b6109b8565b6040516102fc929190612357565b60405180910390f35b34801561031157600080fd5b5061031a6109d1565b6040516102fc919061237c565b34801561033357600080fd5b506103476103423660046123a4565b610a63565b60405190151581526020016102fc565b34801561036357600080fd5b506103776103723660046123d0565b610a7d565b6040516102fc93929190612404565b34801561039257600080fd5b506103a66103a136600461249d565b610b4e565b6040516001600160401b0390911681526020016102fc565b3480156103ca57600080fd5b506004546103de906001600160a01b031681565b6040516001600160a01b0390911681526020016102fc565b610409610404366004612509565b610b59565b005b34801561041757600080fd5b50610420600281565b60405161ffff90911681526020016102fc565b34801561043f57600080fd5b506040805162b9270b60e21b815260016020820152016102fc565b34801561046657600080fd5b50604080516001815260026020820152016102fc565b34801561048857600080fd5b506007545b6040519081526020016102fc565b3480156104a757600080fd5b50610420600181565b3480156104bc57600080fd5b506103476104cb3660046125a8565b610c19565b3480156104dc57600080fd5b5060125b60405160ff90911681526020016102fc565b3480156104fe57600080fd5b5061040961050d366004612602565b610c3f565b34801561051e57600080fd5b5061053261052d36600461262c565b610c55565b6040516102fc919061267d565b34801561054b57600080fd5b5061040961055a3660046123a4565b610cbc565b34801561056b57600080fd5b5061048d61057a366004612694565b610cc6565b34801561058b57600080fd5b50306103de565b34801561059e57600080fd5b506105b26105ad3660046126d2565b610cdb565b604080519283526020830191909152016102fc565b3480156105d357600080fd5b5061031a6105e2366004612710565b610cf7565b3480156105f357600080fd5b50610347610602366004612602565b63ffffffff919091166000908152600160205260409020541490565b34801561062a57600080fd5b506103de7f000000000000000000000000000000000000000000000000000000000000000081565b34801561065e57600080fd5b5061040961066d366004612743565b610d9c565b34801561067e57600080fd5b5061048d61068d366004612743565b6001600160a01b031660009081526005602052604090205490565b3480156106b457600080fd5b50610409610df9565b3480156106c957600080fd5b506103a66106d8366004612602565b600092915050565b3480156106ec57600080fd5b506103476106fb366004612760565b6001600160a01b0381163014949350505050565b34801561071b57600080fd5b5060066104e0565b34801561072f57600080fd5b506000546001600160a01b03166103de565b34801561074d57600080fd5b5061031a610e0d565b34801561076257600080fd5b5061048d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561079657600080fd5b506000610347565b3480156107aa57600080fd5b506103476107b93660046123a4565b610e1c565b3480156107ca57600080fd5b5061048d6107d93660046127db565b610e2a565b3480156107ea57600080fd5b506002546103de906001600160a01b031681565b34801561080a57600080fd5b5061040961081936600461283c565b610e35565b34801561082a57600080fd5b5061048d61083936600461287d565b60016020526000908152604090205481565b34801561085757600080fd5b5061031a610866366004612898565b610e4f565b61040961087936600461283c565b610ff7565b34801561088a57600080fd5b5061048d61089936600461249d565b611181565b6108b16108ac3660046128f8565b61118c565b6040516102fc929190612965565b3480156108cb57600080fd5b506104096108da366004612743565b6111b3565b6104096108ed366004612509565b611239565b3480156108fe57600080fd5b5061040961090d366004612743565b611268565b34801561091e57600080fd5b5061048d61092d3660046129b7565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b34801561096457600080fd5b506105b26109733660046126d2565b6112be565b34801561098457600080fd5b50610409610993366004612743565b6112cc565b3480156109a457600080fd5b506103476109b33660046129e5565b61130a565b6060806109c58484611340565b915091505b9250929050565b6060600880546109e090612a01565b80601f0160208091040260200160405190810160405280929190818152602001828054610a0c90612a01565b8015610a595780601f10610a2e57610100808354040283529160200191610a59565b820191906000526020600020905b815481529060010190602001808311610a3c57829003601f168201915b5050505050905090565b600033610a71818585611463565b60019150505b92915050565b60408051808201909152600080825260208201526060610ab0604051806040016040528060008152602001600081525090565b60408051808201825260008082526001600160401b03602080840182905284518381529081019094529195509182610b0b565b604080518082019091526000815260606020820152815260200190600190039081610ae35790505b509350600080610b30604089013560608a0135610b2b60208c018c61287d565b611475565b60408051808201909152918252602082015296989597505050505050565b6000610a77826114b1565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163314610ba9576040516391ac5e4f60e01b81523360048201526024015b60405180910390fd5b60208701803590610bc390610bbe908a61287d565b6114dd565b14610c0157610bd5602088018861287d565b60405163309afaf360e21b815263ffffffff909116600482015260208801356024820152604401610ba0565b610c1087878787878787611519565b50505050505050565b600033610c27858285611680565b610c328585856116fe565b60019150505b9392505050565b610c4761175d565b610c51828261178a565b5050565b60408051808201909152600080825260208201526000610c8560408501356060860135610b2b602088018861287d565b915050600080610c958684611340565b9092509050610cb2610caa602088018861287d565b8383886117df565b9695505050505050565b610c5182826118c0565b6000610cd38484846118f6565b949350505050565b600080610cea3386868661191e565b915091505b935093915050565b600360209081526000928352604080842090915290825290208054610d1b90612a01565b80601f0160208091040260200160405190810160405280929190818152602001828054610d4790612a01565b8015610d945780601f10610d6957610100808354040283529160200191610d94565b820191906000526020600020905b815481529060010190602001808311610d7757829003601f168201915b505050505081565b610da461175d565b600480546001600160a01b0319166001600160a01b0383169081179091556040519081527ff0be4f1e87349231d80c36b33f9e8639658eeaf474014dee15a3e6a4d4414197906020015b60405180910390a150565b610e0161175d565b610e0b6000611944565b565b6060600980546109e090612a01565b600033610a718185856116fe565b6000610a7782611994565b610e3d61175d565b610c51610e4a8284612aec565b6119c9565b63ffffffff8416600090815260036020908152604080832061ffff87168452909152812080546060929190610e8390612a01565b80601f0160208091040260200160405190810160405280929190818152602001828054610eaf90612a01565b8015610efc5780601f10610ed157610100808354040283529160200191610efc565b820191906000526020600020905b815481529060010190602001808311610edf57829003601f168201915b505050505090508051600003610f4c5783838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929450610cd39350505050565b6000839003610f5c579050610cd3565b60028310610fda57610fa384848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611ad092505050565b80610fb18460028188612c01565b604051602001610fc393929190612c2b565b604051602081830303815290604052915050610cd3565b8383604051639a6d49cd60e01b8152600401610ba0929190612c7c565b60005b81811015611100573683838381811061101557611015612c90565b90506020028101906110279190612ca6565b905061105a611039602083018361287d565b602083013563ffffffff919091166000908152600160205260409020541490565b61106457506110f8565b3063d045a0dc60c08301358360a0810135611083610100830183612cc7565b611094610100890160e08a01612743565b6110a26101208a018a612cc7565b6040518963ffffffff1660e01b81526004016110c49796959493929190612d0d565b6000604051808303818588803b1580156110dd57600080fd5b505af11580156110f1573d6000803e3d6000fd5b5050505050505b600101610ffa565b50336001600160a01b0316638e9e70996040518163ffffffff1660e01b8152600401600060405180830381865afa15801561113f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526111679190810190612d93565b604051638351eea760e01b8152600401610ba0919061237c565b6000610a7782611afc565b611194612264565b6040805180820190915260008082526020820152610cea858585611b33565b6111bb61175d565b60405163ca5eb5e160e01b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063ca5eb5e190602401600060405180830381600087803b15801561121e57600080fd5b505af1158015611232573d6000803e3d6000fd5b5050505050565b3330146112595760405163029a949d60e31b815260040160405180910390fd5b610c1087878787878787610c01565b61127061175d565b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527fd48d879cef83a1c0bdda516f27b13ddb1b3f8bbac1c9e1511bb2a659c242776090602001610dee565b600080610cea858585611475565b6112d461175d565b6001600160a01b0381166112fe57604051631e4fbdf760e01b815260006004820152602401610ba0565b61130781611944565b50565b6000602082018035906001908390611322908661287d565b63ffffffff1681526020810191909152604001600020541492915050565b606080600061139d8560200135611356866114b1565b61136360a0890189612cc7565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c2e92505050565b90935090506000816113b05760016113b3565b60025b90506113d36113c5602088018861287d565b8261086660808a018a612cc7565b6004549093506001600160a01b031680156114595760405163043a78eb60e01b81526001600160a01b0382169063043a78eb906114169088908890600401612357565b602060405180830381865afa158015611433573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114579190612e00565b505b5050509250929050565b6114708383836001611ca8565b505050565b60008061148185611afc565b915081905083811015610cef576040516371c4efed60e01b81526004810182905260248101859052604401610ba0565b6000610a777f000000000000000000000000000000000000000000000000000000000000000083612e33565b63ffffffff811660009081526001602052604081205480610a775760405163f6ff4fb760e01b815263ffffffff84166004820152602401610ba0565b600061152b6115288787611d7d565b90565b90506000611557826115456115408a8a611d95565b611994565b61155260208d018d61287d565b6118f6565b9050602886111561161e57600061159461157760608c0160408d016127db565b61158460208d018d61287d565b8461158f8c8c611db8565b611e03565b604051633e5ac80960e11b81529091506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690637cb59012906115ea9086908d906000908790600401612e55565b600060405180830381600087803b15801561160457600080fd5b505af1158015611618573d6000803e3d6000fd5b50505050505b6001600160a01b038216887fefed6d3500546b29533b128a29e3a94d70788727f0507505ac12eaf2e578fd9c61165760208d018d61287d565b6040805163ffffffff9092168252602082018690520160405180910390a3505050505050505050565b6001600160a01b0383811660009081526006602090815260408083209386168352929052205460001981146116f857818110156116e957604051637dc7a0d960e11b81526001600160a01b03841660048201526024810182905260448101839052606401610ba0565b6116f884848484036000611ca8565b50505050565b6001600160a01b03831661172857604051634b637e8f60e11b815260006004820152602401610ba0565b6001600160a01b0382166117525760405163ec442f0560e01b815260006004820152602401610ba0565b611470838383611e35565b6000546001600160a01b03163314610e0b5760405163118cdaa760e01b8152336004820152602401610ba0565b63ffffffff8216600081815260016020908152604091829020849055815192835282018390527f238399d427b947898edb290f5ff0f9109849b1c3ba196a42e35f00c50a54b98b910160405180910390a15050565b60408051808201909152600080825260208201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ddc28c586040518060a001604052808863ffffffff168152602001611842896114dd565b8152602001878152602001868152602001851515815250306040518363ffffffff1660e01b8152600401611877929190612e86565b6040805180830381865afa158015611893573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118b79190612f2f565b95945050505050565b6001600160a01b0382166118ea5760405163ec442f0560e01b815260006004820152602401610ba0565b610c5160008383611e35565b60006001600160a01b03841661190c5761dead93505b61191684846118c0565b509092915050565b60008061192c858585611475565b909250905061193b8683611f5f565b94509492505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000610a777f00000000000000000000000000000000000000000000000000000000000000006001600160401b038416612f4b565b60005b8151811015611aa0576119fb8282815181106119ea576119ea612c90565b602002602001015160400151611ad0565b818181518110611a0d57611a0d612c90565b60200260200101516040015160036000848481518110611a2f57611a2f612c90565b60200260200101516000015163ffffffff1663ffffffff1681526020019081526020016000206000848481518110611a6957611a69612c90565b60200260200101516020015161ffff1661ffff1681526020019081526020016000209081611a979190612fb2565b506001016119cc565b507fbe4864a8e820971c0247f5992e2da559595f7bf076a21cb5928d443d2a13b67481604051610dee9190613071565b600281015161ffff8116600314610c515781604051639a6d49cd60e01b8152600401610ba0919061237c565b60007f0000000000000000000000000000000000000000000000000000000000000000611b298184612e33565b610a779190612f4b565b611b3b612264565b6040805180820190915260008082526020820152600080611b7233604089013560608a0135611b6d60208c018c61287d565b61191e565b91509150600080611b838984611340565b9092509050611baf611b9860208b018b61287d565b8383611ba9368d90038d018d6130fc565b8b611f95565b60408051808201909152858152602080820186905282519298509096503391907f85496b760a4b7f8d66384b9df21b381f5d1b1e79f229a47aaf4c232edc2fe59a90611bfd908d018d61287d565b6040805163ffffffff909216825260208201899052810187905260600160405180910390a350505050935093915050565b8051606090151580611c77578484604051602001611c6392919091825260c01b6001600160c01b031916602082015260280190565b604051602081830303815290604052611c9e565b84843385604051602001611c8e949392919061312e565b6040516020818303038152906040525b9150935093915050565b6001600160a01b038416611cd25760405163e602df0560e01b815260006004820152602401610ba0565b6001600160a01b038316611cfc57604051634a1406b160e11b815260006004820152602401610ba0565b6001600160a01b03808516600090815260066020908152604080832093871683529290522082905580156116f857826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051611d6f91815260200190565b60405180910390a350505050565b6000611d8c6020828486612c01565b610c3891613171565b6000611da5602860208486612c01565b611dae9161318f565b60c01c9392505050565b6060611dc78260288186612c01565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929695505050505050565b606084848484604051602001611e1c94939291906131bf565b6040516020818303038152906040529050949350505050565b6001600160a01b038316611e60578060076000828254611e55919061320e565b90915550611ed29050565b6001600160a01b03831660009081526005602052604090205481811015611eb35760405163391434e360e21b81526001600160a01b03851660048201526024810182905260448101839052606401610ba0565b6001600160a01b03841660009081526005602052604090209082900390555b6001600160a01b038216611eee57600780548290039055611f0d565b6001600160a01b03821660009081526005602052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611f5291815260200190565b60405180910390a3505050565b6001600160a01b038216611f8957604051634b637e8f60e11b815260006004820152602401610ba0565b610c5182600083611e35565b611f9d612264565b6000611fac84600001516120a0565b602085015190915015611fc657611fc684602001516120c8565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632637a450826040518060a001604052808b63ffffffff1681526020016120168c6114dd565b81526020018a815260200189815260200160008960200151111515815250866040518463ffffffff1660e01b8152600401612052929190612e86565b60806040518083038185885af1158015612070573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906120959190613221565b979650505050505050565b60008134146120c4576040516304fb820960e51b8152346004820152602401610ba0565b5090565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e4fe1d946040518163ffffffff1660e01b8152600401602060405180830381865afa158015612128573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061214c919061326b565b90506001600160a01b038116612175576040516329b99a9560e11b815260040160405180910390fd5b6040805133602482018190527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0381811660448501526064808501889052855180860390910181526084909401909452602080840180516001600160e01b03166323b872dd60e01b1781528451610c519688169589936116f893889360009283929091839182885af180612216576040513d6000823e3d81fd5b50506000513d9150811561222e57806001141561223b565b6001600160a01b0384163b155b156116f857604051635274afe760e01b81526001600160a01b0385166004820152602401610ba0565b60405180606001604052806000801916815260200160006001600160401b031681526020016122a6604051806040016040528060008152602001600081525090565b905290565b600060e082840312156122bd57600080fd5b50919050565b600080604083850312156122d657600080fd5b82356001600160401b038111156122ec57600080fd5b6122f8858286016122ab565b95602094909401359450505050565b60005b8381101561232257818101518382015260200161230a565b50506000910152565b60008151808452612343816020860160208601612307565b601f01601f19169290920160200192915050565b60408152600061236a604083018561232b565b82810360208401526118b7818561232b565b602081526000610c38602083018461232b565b6001600160a01b038116811461130757600080fd5b600080604083850312156123b757600080fd5b82356123c28161238f565b946020939093013593505050565b6000602082840312156123e257600080fd5b81356001600160401b038111156123f857600080fd5b610cd3848285016122ab565b8351815260208085015190820152600060a08201604060a0604085015281865180845260c08601915060c08160051b8701019350602080890160005b8381101561247f5788870360bf1901855281518051885283015183880187905261246c8789018261232b565b9750509382019390820190600101612440565b50508751606088015250505060208501516080850152509050610cd3565b6000602082840312156124af57600080fd5b5035919050565b6000606082840312156122bd57600080fd5b60008083601f8401126124da57600080fd5b5081356001600160401b038111156124f157600080fd5b6020830191508360208285010111156109ca57600080fd5b600080600080600080600060e0888a03121561252457600080fd5b61252e89896124b6565b96506060880135955060808801356001600160401b038082111561255157600080fd5b61255d8b838c016124c8565b909750955060a08a013591506125728261238f565b90935060c0890135908082111561258857600080fd5b506125958a828b016124c8565b989b979a50959850939692959293505050565b6000806000606084860312156125bd57600080fd5b83356125c88161238f565b925060208401356125d88161238f565b929592945050506040919091013590565b803563ffffffff811681146125fd57600080fd5b919050565b6000806040838503121561261557600080fd5b6123c2836125e9565b801515811461130757600080fd5b6000806040838503121561263f57600080fd5b82356001600160401b0381111561265557600080fd5b612661858286016122ab565b92505060208301356126728161261e565b809150509250929050565b815181526020808301519082015260408101610a77565b6000806000606084860312156126a957600080fd5b83356126b48161238f565b9250602084013591506126c9604085016125e9565b90509250925092565b6000806000606084860312156126e757600080fd5b83359250602084013591506126c9604085016125e9565b803561ffff811681146125fd57600080fd5b6000806040838503121561272357600080fd5b61272c836125e9565b915061273a602084016126fe565b90509250929050565b60006020828403121561275557600080fd5b8135610c388161238f565b60008060008060a0858703121561277657600080fd5b61278086866124b6565b935060608501356001600160401b0381111561279b57600080fd5b6127a7878288016124c8565b90945092505060808501356127bb8161238f565b939692955090935050565b6001600160401b038116811461130757600080fd5b6000602082840312156127ed57600080fd5b8135610c38816127c6565b60008083601f84011261280a57600080fd5b5081356001600160401b0381111561282157600080fd5b6020830191508360208260051b85010111156109ca57600080fd5b6000806020838503121561284f57600080fd5b82356001600160401b0381111561286557600080fd5b612871858286016127f8565b90969095509350505050565b60006020828403121561288f57600080fd5b610c38826125e9565b600080600080606085870312156128ae57600080fd5b6128b7856125e9565b93506128c5602086016126fe565b925060408501356001600160401b038111156128e057600080fd5b6128ec878288016124c8565b95989497509550505050565b6000806000838503608081121561290e57600080fd5b84356001600160401b0381111561292457600080fd5b612930878288016122ab565b9450506040601f198201121561294557600080fd5b50602084019150606084013561295a8161238f565b809150509250925092565b600060c082019050835182526001600160401b03602085015116602083015260408401516129a0604084018280518252602090810151910152565b5082516080830152602083015160a0830152610c38565b600080604083850312156129ca57600080fd5b82356129d58161238f565b915060208301356126728161238f565b6000606082840312156129f757600080fd5b610c3883836124b6565b600181811c90821680612a1557607f821691505b6020821081036122bd57634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b0381118282101715612a6d57612a6d612a35565b60405290565b604080519081016001600160401b0381118282101715612a6d57612a6d612a35565b604051601f8201601f191681016001600160401b0381118282101715612abd57612abd612a35565b604052919050565b60006001600160401b03821115612ade57612ade612a35565b50601f01601f191660200190565b60006001600160401b0380841115612b0657612b06612a35565b8360051b6020612b17818301612a95565b868152918501918181019036841115612b2f57600080fd5b865b84811015612bf557803586811115612b495760008081fd5b88016060368290031215612b5d5760008081fd5b612b65612a4b565b612b6e826125e9565b8152612b7b8683016126fe565b8682015260408083013589811115612b935760008081fd5b929092019136601f840112612ba85760008081fd5b8235612bbb612bb682612ac5565b612a95565b8181523689838701011115612bd05760008081fd5b818986018a830137600091810189019190915290820152845250918301918301612b31565b50979650505050505050565b60008085851115612c1157600080fd5b83861115612c1e57600080fd5b5050820193919092039150565b60008451612c3d818460208901612307565b8201838582376000930192835250909392505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b602081526000610cd3602083018486612c53565b634e487b7160e01b600052603260045260246000fd5b6000823561013e19833603018112612cbd57600080fd5b9190910192915050565b6000808335601e19843603018112612cde57600080fd5b8301803591506001600160401b03821115612cf857600080fd5b6020019150368190038213156109ca57600080fd5b63ffffffff612d1b896125e9565b1681526020880135602082015260006040890135612d38816127c6565b6001600160401b03811660408401525087606083015260e06080830152612d6360e083018789612c53565b6001600160a01b03861660a084015282810360c0840152612d85818587612c53565b9a9950505050505050505050565b600060208284031215612da557600080fd5b81516001600160401b03811115612dbb57600080fd5b8201601f81018413612dcc57600080fd5b8051612dda612bb682612ac5565b818152856020838501011115612def57600080fd5b6118b7826020830160208601612307565b600060208284031215612e1257600080fd5b8151610c388161261e565b634e487b7160e01b600052601160045260246000fd5b600082612e5057634e487b7160e01b600052601260045260246000fd5b500490565b60018060a01b038516815283602082015261ffff83166040820152608060608201526000610cb2608083018461232b565b6040815263ffffffff8351166040820152602083015160608201526000604084015160a06080840152612ebc60e084018261232b565b90506060850151603f198483030160a0850152612ed9828261232b565b60809690960151151560c08501525050506001600160a01b039190911660209091015290565b600060408284031215612f1157600080fd5b612f19612a73565b9050815181526020820151602082015292915050565b600060408284031215612f4157600080fd5b610c388383612eff565b8082028115828204841417610a7757610a77612e1d565b601f821115611470576000816000526020600020601f850160051c81016020861015612f8b5750805b601f850160051c820191505b81811015612faa57828155600101612f97565b505050505050565b81516001600160401b03811115612fcb57612fcb612a35565b612fdf81612fd98454612a01565b84612f62565b602080601f8311600181146130145760008415612ffc5750858301515b600019600386901b1c1916600185901b178555612faa565b600085815260208120601f198616915b8281101561304357888601518255948401946001909101908401613024565b50858210156130615787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b838110156130ee57888303603f190185528151805163ffffffff1684528781015161ffff168885015286015160608785018190526130da8186018361232b565b96890196945050509086019060010161309a565b509098975050505050505050565b60006040828403121561310e57600080fd5b613116612a73565b82358152602083013560208201528091505092915050565b8481526001600160401b0360c01b8460c01b16602082015282602882015260008251613161816048850160208701612307565b9190910160480195945050505050565b80356020831015610a7757600019602084900360031b1b1692915050565b6001600160c01b031981358181169160088510156131b75780818660080360031b1b83161692505b505092915050565b6001600160401b0360c01b8560c01b16815263ffffffff60e01b8460e01b16600882015282600c820152600082516131fe81602c850160208701612307565b91909101602c0195945050505050565b80820180821115610a7757610a77612e1d565b60006080828403121561323357600080fd5b61323b612a4b565b82518152602083015161324d816127c6565b602082015261325f8460408501612eff565b60408201529392505050565b60006020828403121561327d57600080fd5b8151610c388161238f56fea2646970667358221220c184047f55d32f63a680c09336614b1b1422300e42596cef498353ab916c762e64736f6c63430008160033608060405234801561001057600080fd5b5061050c806100206000396000f3fe6080604052600436106100555760003560e01c80630ae6d46b1461005a578063609d333414610083578063c34c08e5146100a5578063d0a10260146100dd578063d5ce3389146100f2578063e21f37ce14610112575b600080fd5b34801561006657600080fd5b5061007060015481565b6040519081526020015b60405180910390f35b34801561008f57600080fd5b50610098610127565b60405161007a9190610222565b3480156100b157600080fd5b506003546100c5906001600160a01b031681565b6040516001600160a01b03909116815260200161007a565b6100f06100eb3660046102d6565b6101b5565b005b3480156100fe57600080fd5b506000546100c5906001600160a01b031681565b34801561011e57600080fd5b50610098610215565b6004805461013490610374565b80601f016020809104026020016040519081016040528092919081815260200182805461016090610374565b80156101ad5780601f10610182576101008083540402835291602001916101ad565b820191906000526020600020905b81548152906001019060200180831161019057829003601f168201915b505050505081565b600080546001600160a01b0319166001600160a01b038916179055600186905560026101e2858783610415565b50600380546001600160a01b0319166001600160a01b038516179055600461020b858783610415565b5050505050505050565b6002805461013490610374565b60006020808352835180602085015260005b8181101561025057858101830151858201604001528201610234565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b038116811461028857600080fd5b919050565b60008083601f84011261029f57600080fd5b50813567ffffffffffffffff8111156102b757600080fd5b6020830191508360208285010111156102cf57600080fd5b9250929050565b600080600080600080600060a0888a0312156102f157600080fd5b6102fa88610271565b965060208801359550604088013567ffffffffffffffff8082111561031e57600080fd5b61032a8b838c0161028d565b909750955085915061033e60608b01610271565b945060808a013591508082111561035457600080fd5b506103618a828b0161028d565b989b979a50959850939692959293505050565b600181811c9082168061038857607f821691505b6020821081036103a857634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b601f821115610410576000816000526020600020601f850160051c810160208610156103ed5750805b601f850160051c820191505b8181101561040c578281556001016103f9565b5050505b505050565b67ffffffffffffffff83111561042d5761042d6103ae565b6104418361043b8354610374565b836103c4565b6000601f841160018114610475576000851561045d5750838201355b600019600387901b1c1916600186901b1783556104cf565b600083815260209020601f19861690835b828110156104a65786850135825560209485019460019092019101610486565b50868210156104c35760001960f88860031b161c19848701351681555b505060018560011b0183555b505050505056fea2646970667358221220eb22feaa2ed7a5cd3c95f8aeac361d18eaca6b9f0f64a88c34ed0e2b872e3d6a64736f6c6343000816003360c06040526001600d553480156200001657600080fd5b50604051620054bf380380620054bf8339810160408190526200003991620002cd565b81816001600160a01b0381166200006b57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6200007681620000cd565b5063ffffffff166080526040516200008e90620002bf565b604051809103906000f080158015620000ab573d6000803e3d6000fd5b506001600160a01b031660a0819052620000c5906200011d565b50506200034a565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b620001276200028e565b6040516301ffc9a760e01b81526325fc096160e21b60048201526001600160a01b038216906301ffc9a790602401602060405180830381865afa15801562000173573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200019991906200031f565b620001b75760405163eb64f35d60e01b815260040160405180910390fd5b6001600160a01b03811660009081526005602052604090205460ff1615620001f25760405163457517f360e11b815260040160405180910390fd5b6001600160a01b0381166000818152600560209081526040808320805460ff191660019081179091556004805491820181559093527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b90920180546001600160a01b0319168417905590519182527f6b374d56679ca9463f27c85c6311e2bb7fde69bf201d3da39d53f10bd9d78af5910160405180910390a150565b6000546001600160a01b03163314620002bd5760405163118cdaa760e01b815233600482015260240162000062565b565b6101e380620052dc83390190565b60008060408385031215620002e157600080fd5b825163ffffffff81168114620002f657600080fd5b60208401519092506001600160a01b03811681146200031457600080fd5b809150509250929050565b6000602082840312156200033257600080fd5b815180151581146200034357600080fd5b9392505050565b60805160a051614f496200039360003960006107810152600081816105310152818161278901528181612f7b01528181612fe20152818161355301526135ba0152614f496000f3fe6080604052600436106103505760003560e01c80639132e5c3116101c6578063c9fc7bcd116100f7578063ddc28c5811610095578063e8964e811161006f578063e8964e8114610b8f578063ef667aa114610baf578063f2fde38b14610bfa578063f64be4c714610c1a57600080fd5b8063ddc28c5814610b2e578063e1758bd814610b5b578063e4fe1d9414610b6f57600080fd5b8063d4b4ec8f116100d1578063d4b4ec8f14610a72578063d70b890214610a92578063dc706a6214610ab2578063dc93c8a214610ae257600080fd5b8063c9fc7bcd146109f6578063ca5eb5e114610a3d578063cb5026b914610a5d57600080fd5b8063a7229fd911610164578063aafea3121161013e578063aafea31214610976578063b96a277f14610996578063c28e0eed146109b6578063c9a54a99146109d657600080fd5b8063a7229fd914610916578063a825d74714610936578063aafe5e071461095657600080fd5b80639c6d7340116101a05780639c6d73401461086f5780639d7f9775146108b6578063a0dd43fc146108d6578063a718531b146108f657600080fd5b80639132e5c31461081a57806391d20fa11461083c5780639535ff301461084f57600080fd5b80635b17bb70116102a05780636f50a8031161023e57806379624ca91161021857806379624ca9146107a35780637cb59012146107bc578063861e1ca5146107dc5780638da5cb5b146107fc57600080fd5b80636f50a80314610724578063715018a61461075a578063733180911461076f57600080fd5b80636a14d7151161027a5780636a14d715146106655780636bf73fa3146106855780636dbd9f90146106a55780636e83f5bb146106c557600080fd5b80635b17bb70146105b65780636750cd4c14610615578063697fe6b61461064557600080fd5b80632baf0be71161030d578063402f8468116102e7578063402f8468146104c057806340f80683146104ff578063416ecebf1461051f578063587cde1e1461056857600080fd5b80632baf0be7146104355780632e80fbf31461045957806335d330b01461047957600080fd5b80630c0c389e1461035557806314f651a91461036a578063183c834f146103a85780632637a450146103c85780632a56c1b0146103e85780632b3197b914610408575b600080fd5b610368610363366004613e11565b610c50565b005b34801561037657600080fd5b5061037f610d4e565b6040805163ffffffff90931683526001600160a01b039091166020830152015b60405180910390f35b3480156103b457600080fd5b506103686103c3366004613ec0565b610d80565b6103db6103d6366004613f0b565b611027565b60405161039f9190613f5d565b3480156103f457600080fd5b50610368610403366004613f9f565b61114d565b34801561041457600080fd5b5061042861042336600461400e565b6111ed565b60405161039f91906140b2565b34801561044157600080fd5b5061044b60001981565b60405190815260200161039f565b34801561046557600080fd5b506103686104743660046140dc565b6112b8565b34801561048557600080fd5b5061044b610494366004614143565b600c60209081526000948552604080862082529385528385208152918452828420909152825290205481565b3480156104cc57600080fd5b506104e06104db366004614185565b611427565b604080516001600160a01b03909316835290151560208301520161039f565b34801561050b57600080fd5b5061036861051a3660046140dc565b6114a5565b34801561052b57600080fd5b506105537f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff909116815260200161039f565b34801561057457600080fd5b5061059e6105833660046141af565b600f602052600090815260409020546001600160a01b031681565b6040516001600160a01b03909116815260200161039f565b3480156105c257600080fd5b506105fd6105d13660046141ca565b60016020908152600093845260408085208252928452828420905282529020546001600160401b031681565b6040516001600160401b03909116815260200161039f565b34801561062157600080fd5b50610635610630366004614206565b61160b565b604051901515815260200161039f565b34801561065157600080fd5b50610368610660366004614221565b61165b565b34801561067157600080fd5b50610368610680366004613ec0565b6116d0565b34801561069157600080fd5b506103686106a036600461431c565b611aae565b3480156106b157600080fd5b506103686106c03660046143ff565b611b18565b3480156106d157600080fd5b506107056106e0366004614206565b600b60205260009081526040902080546001909101546001600160a01b039091169082565b604080516001600160a01b03909316835260208301919091520161039f565b34801561073057600080fd5b5061059e61073f366004614206565b600a602052600090815260409020546001600160a01b031681565b34801561076657600080fd5b50610368611bba565b34801561077b57600080fd5b5061059e7f000000000000000000000000000000000000000000000000000000000000000081565b3480156107af57600080fd5b50600d5460011415610635565b3480156107c857600080fd5b506103686107d736600461448f565b611bce565b3480156107e857600080fd5b506106356107f73660046144e0565b611cba565b34801561080857600080fd5b506000546001600160a01b031661059e565b34801561082657600080fd5b5061082f611d26565b60405161039f919061450b565b61036861084a366004614558565b611d88565b34801561085b57600080fd5b5061036861086a366004614602565b611f18565b34801561087b57600080fd5b506105fd61088a3660046141ca565b60036020908152600093845260408085208252928452828420905282529020546001600160401b031681565b3480156108c257600080fd5b506106356108d1366004614602565b61217c565b3480156108e257600080fd5b506105fd6108f13660046141ca565b612256565b34801561090257600080fd5b50610368610911366004614645565b6122b6565b34801561092257600080fd5b50610368610931366004614671565b6125d6565b34801561094257600080fd5b5061036861095136600461468f565b6125ee565b34801561096257600080fd5b5061044b6109713660046141ca565b612739565b34801561098257600080fd5b506103686109913660046146cc565b6127b9565b3480156109a257600080fd5b5061059e6109b1366004614185565b6129e2565b3480156109c257600080fd5b506103686109d13660046141af565b612a51565b3480156109e257600080fd5b506106356109f13660046144e0565b612aae565b348015610a0257600080fd5b5061044b610a113660046146e8565b600260209081526000948552604080862082529385528385208152918452828420909152825290205481565b348015610a4957600080fd5b50610368610a583660046141af565b612b13565b348015610a6957600080fd5b5061044b600081565b348015610a7e57600080fd5b50610368610a8d366004614645565b612b73565b348015610a9e57600080fd5b50610368610aad3660046146e8565b612db1565b348015610abe57600080fd5b50610635610acd3660046141af565b60056020526000908152604090205460ff1681565b348015610aee57600080fd5b50610635610afd366004614185565b6001600160a01b03918216600090815260066020908152604080832063ffffffff9490941683529290522054161590565b348015610b3a57600080fd5b50610b4e610b49366004613f0b565b612ea0565b60405161039f919061472a565b348015610b6757600080fd5b50600061059e565b348015610b7b57600080fd5b50600e5461059e906001600160a01b031681565b348015610b9b57600080fd5b50610368610baa3660046141af565b61310c565b348015610bbb57600080fd5b50610705610bca366004614185565b6008602090815260009283526040808420909152908252902080546001909101546001600160a01b039091169082565b348015610c0657600080fd5b50610368610c153660046141af565b613270565b348015610c2657600080fd5b5061059e610c35366004614206565b6009602052600090815260409020546001600160a01b031681565b610c9f86610c6160208a018a614206565b60208a0135610c7660608c0160408d01614741565b898989604051602001610c8b9392919061475c565b6040516020818303038152906040526132ae565b506040516313137d6560e01b81526001600160a01b038716906313137d65903490610cda908b908a908a908a9033908b908b906004016147d8565b6000604051808303818588803b158015610cf357600080fd5b505af1158015610d07573d6000803e3d6000fd5b50505050507f3cd5e48f9730b129dc7550f0fcea9c767b7be37837cd10e55eb35f734f4bca048787604051610d3d92919061482f565b60405180910390a150505050505050565b600080610d5e600d546001141590565b610d6a57600080610d78565b610d78600d5460a081901c91565b915091509091565b6001600160a01b038216600090815260056020526040902054829060ff16610dbb57604051631bc58ef360e11b815260040160405180910390fd5b826001600160a01b03811615610e5e576000816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e2f919061486b565b6002811115610e4057610e40614855565b03610e5e576040516342756b1b60e11b815260040160405180910390fd5b83856001600160a01b03821615610efa576040516319d4335360e21b815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015610eb9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610edd919061489a565b610efa57604051630e476aa960e21b815260040160405180910390fd5b610f0388613469565b6000610f0f8989611427565b9150508015610f3157604051633c075f7560e01b815260040160405180910390fd5b85600003610f79576001600160a01b038916600090815260086020908152604080832063ffffffff8c168452909152812080546001600160a01b031916815560010155610fdf565b438611610f99576040516302efcf9160e11b815260040160405180910390fd5b6001600160a01b03898116600090815260086020908152604080832063ffffffff8d168452909152902080546001600160a01b0319169189169190911781556001018690555b7f4e0a5bbfa0c11a64effb1ada324b5437a17272e1aed9320398715ef71bb209288989898960405161101494939291906148b7565b60405180910390a1505050505050505050565b61102f613d5a565b61103c6020840184614206565b336001600d54146110605760405163ee120b0960e01b815260040160405180910390fd5b63ffffffff60a01b60a083811b919091166001600160a01b03831617600d5561108e908601608087016148e7565b80156110a35750600e546001600160a01b0316155b156110c157604051632d7b695560e11b815260040160405180910390fd5b6000806110ce33886134ba565b9150915060006110db3490565b905060006110f76110f260a08b0160808c016148e7565b613766565b905061110884604001518383613802565b600e5460408501516020015161112a916001600160a01b03169083868c613850565b60408401515161113c9083858b61387d565b50506001600d555095945050505050565b61115685613469565b600083838360405160200161116d9392919061475c565b60408051601f1981840301815291905290506111ab866111906020880188614206565b60208801356111a560608a0160408b01614741565b856132ae565b507f3cd5e48f9730b129dc7550f0fcea9c767b7be37837cd10e55eb35f734f4bca0485876040516111dd92919061482f565b60405180910390a1505050505050565b6001600160a01b038316600090815260056020526040902054606090849060ff1661122b57604051631bc58ef360e11b815260040160405180910390fd5b604051639c33abf760e01b815263ffffffff80861660048301526001600160a01b0388811660248401529085166044830152861690639c33abf790606401600060405180830381865afa158015611286573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526112ae9190810190614997565b9695505050505050565b6112c185613469565b6001600160a01b038516600090815260026020908152604080832063ffffffff88168452825280832086845282528083206001600160401b038616845290915290205481811461133357604051637182306f60e01b815260048101829052602481018390526044015b60405180910390fd5b6001600160a01b038616600090815260016020908152604080832063ffffffff8916845282528083208784529091529020546001600160401b039081169084161180159061137f575080155b156113a857604051630c09b63560e41b81526001600160401b038416600482015260240161132a565b6001600160a01b038616600090815260026020908152604080832063ffffffff89168452825280832087845282528083206001600160401b0387168452909152908190206000199055517faf0450c392c4f702515a457a362328c8aa21916048ca6d0419e248b30cb55292906111dd90879087908a90889088906149cb565b6001600160a01b03808316600090815260076020908152604080832063ffffffff86168452909152812054909116908161149e5763ffffffff83166000908152600a60205260409020546001600160a01b031691508161149a57604051633c74268360e11b815260040160405180910390fd5b5060015b9250929050565b6114ae85613469565b6001600160a01b038516600090815260026020908152604080832063ffffffff88168452825280832086845282528083206001600160401b038616845290915290205481811461151b57604051637182306f60e01b8152600481018290526024810183905260440161132a565b80158061156557506001600160a01b038616600090815260016020908152604080832063ffffffff8916845282528083208784529091529020546001600160401b03908116908416115b1561158e57604051630c09b63560e41b81526001600160401b038416600482015260240161132a565b6001600160a01b038616600090815260026020908152604080832063ffffffff89168452825280832087845282528083206001600160401b038716845290915280822091909155517f7f68a37a6e69a0de35024a234558f9efe4b33b58657753d21eaaa82d51c3510e906111dd90879087908a90889088906149cb565b63ffffffff81166000908152600960205260408120546001600160a01b031615801590611655575063ffffffff82166000908152600a60205260409020546001600160a01b031615155b92915050565b336001600160a01b03168b6001600160a01b03168d6001600160a01b03167f8a0b1dce321c5c5fb42349bce46d18087c04140de520917661fb923e44a904b98d8d8d8d8d8d8d8d8d8d6040516116ba9a99989796959493929190614a08565b60405180910390a4505050505050505050505050565b6001600160a01b038216600090815260056020526040902054829060ff1615801561170357506001600160a01b03811615155b156117215760405163a4ff2ec360e01b815260040160405180910390fd5b826001600160a01b038116156117c4576000816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611771573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611795919061486b565b60028111156117a6576117a6614855565b036117c4576040516342756b1b60e11b815260040160405180910390fd5b83856001600160a01b03821615611860576040516319d4335360e21b815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa15801561181f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611843919061489a565b61186057604051630e476aa960e21b815260040160405180910390fd5b61186988613469565b6001600160a01b03808916600090815260076020908152604080832063ffffffff8c168452909152902054811690871681036118b85760405163d0ecb66b60e01b815260040160405180910390fd5b6001600160a01b03898116600081815260076020908152604080832063ffffffff8e168085529083529281902080546001600160a01b031916958d1695861790558051938452908301919091528101919091527fcd6f92f5ac6185a5acfa02c92090746cec64d777269cbcd0ed031e396657a1c29060600160405180910390a18515611a32576001600160a01b038116158061195b57506001600160a01b038716155b1561197957604051633c075f7560e01b815260040160405180910390fd5b60006040518060400160405280836001600160a01b0316815260200188436119a19190614a87565b90526001600160a01b038b8116600090815260086020908152604080832063ffffffff8f168452825291829020845181546001600160a01b03191694169390931783558301516001909201829055519192507f4e0a5bbfa0c11a64effb1ada324b5437a17272e1aed9320398715ef71bb2092891611a24918d918d9187916148b7565b60405180910390a150611aa3565b6001600160a01b038916600090815260086020908152604080832063ffffffff8c16845290915280822080546001600160a01b0319168155600101829055517f4e0a5bbfa0c11a64effb1ada324b5437a17272e1aed9320398715ef71bb2092891611014918c918c918691906148b7565b505050505050505050565b336001600160a01b03168a6001600160a01b03167f7edfa10fe10193301ad8a8bea7e968c7bcabcc64981f368e3aeada40ce26ae2c8d8c8c8c8c8c8c8c8c8c604051611b039a99989796959493929190614a9a565b60405180910390a35050505050505050505050565b6001600160a01b038316600090815260056020526040902054839060ff16611b5357604051631bc58ef360e11b815260040160405180910390fd5b611b5c85613469565b604051631077eb9160e11b81526001600160a01b038516906320efd72290611b8c90889087908790600401614af9565b600060405180830381600087803b158015611ba657600080fd5b505af1158015611aa3573d6000803e3d6000fd5b611bc26138a7565b611bcc60006138d4565b565b336000908152600c602090815260408083206001600160a01b03891684528252808320878452825280832061ffff8716845290915290205415611c2457604051630542086560e21b815260040160405180910390fd5b8181604051611c34929190614bec565b60408051918290038220336000818152600c60209081528482206001600160a01b038c16835281528482208a8352815284822061ffff8a168352905292909220557f3d52ff888d033fd3dd1d8057da59e850c91d91a72c41dfa445b247dfedeb6dc191611cab919088908890889088908890614bfc565b60405180910390a15050505050565b6001600160a01b03811660009081526001602090815260408220611d1f91859185918590611cea90850185614206565b63ffffffff168152602080820192909252604090810160009081208984013582529092529020546001600160401b0316613924565b9392505050565b60606004805480602002602001604051908101604052809291908181526020018280548015611d7e57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611d60575b5050505050905090565b6001600160a01b038089166000908152600c60209081526040808320938b168352928152828220898352815282822061ffff891683529052818120549151611dd39087908790614bec565b60405180910390209050808214611e07576040516335ca595f60e01b8152600481018390526024810182905260440161132a565b6001600160a01b03808b166000908152600c60209081526040808320938d168084529382528083208c8452825280832061ffff8c168452909152908190206001905551630685081360e51b815263d0a10260903490611e76908e908d908c908c9033908d908d90600401614c46565b6000604051808303818588803b158015611e8f57600080fd5b505af1158015611ea3573d6000803e3d6000fd5b50505050507e36c98efcf9e6641dfbc9051f66f405253e8e0c2ab4a24dccda15595b7378c88a8a8a8a604051611f0494939291906001600160a01b039485168152929093166020830152604082015261ffff91909116606082015260800190565b60405180910390a150505050505050505050565b6001600160a01b038116600090815260056020526040902054819060ff16158015611f4b57506001600160a01b03811615155b15611f695760405163a4ff2ec360e01b815260040160405180910390fd5b816001600160a01b0381161561200c576001816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611fb9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fdd919061486b565b6002811115611fee57611fee614855565b0361200c57604051633d00f6f160e11b815260040160405180910390fd5b82846001600160a01b038216156120a8576040516319d4335360e21b815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015612067573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061208b919061489a565b6120a857604051630e476aa960e21b815260040160405180910390fd5b6120b187613469565b6001600160a01b03878116600090815260066020908152604080832063ffffffff8b1684529091529020548187169116036120ff5760405163d0ecb66b60e01b815260040160405180910390fd5b6001600160a01b03878116600081815260066020908152604080832063ffffffff8c168085529083529281902080546001600160a01b031916958b1695861790558051938452908301919091528101919091527f4cff966ebee29a156dcb34cf72c1d06231fb1777f6bdf6e8089819232f002b1c90606001610d3d565b600080600061218b8686611427565b91509150816001600160a01b0316846001600160a01b0316036121b357600192505050611d1f565b6000816121e8576001600160a01b038716600090815260086020908152604080832063ffffffff8a16845290915290206121fe565b63ffffffff86166000908152600b602052604090205b6040805180820190915281546001600160a01b03908116808352600190930154602083015290925086161480156122385750438160200151115b156122495760019350505050611d1f565b5060009695505050505050565b6001600160a01b038316600090815260016020908152604080832063ffffffff8616845282528083208484529091528120546001600160401b03165b6122a1858585846001016139a8565b156122ae57600101612292565b949350505050565b6122be6138a7565b6001600160a01b038216600090815260056020526040902054829060ff166122f957604051631bc58ef360e11b815260040160405180910390fd5b826001600160a01b0381161561239c576000816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612349573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061236d919061486b565b600281111561237e5761237e614855565b0361239c576040516342756b1b60e11b815260040160405180910390fd5b83856001600160a01b03821615612438576040516319d4335360e21b815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa1580156123f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061241b919061489a565b61243857604051630e476aa960e21b815260040160405180910390fd5b63ffffffff87166000908152600a60205260409020546001600160a01b03908116908716810361247b5760405163d0ecb66b60e01b815260040160405180910390fd5b63ffffffff88166000818152600a602090815260409182902080546001600160a01b0319166001600160a01b038c169081179091558251938452908301527fc16891855cffb4a5ac51ac11864a3f3c96ba816cc45fe686c987ae36277de5ec910160405180910390a185156125695763ffffffff88166000908152600b6020526040902080546001600160a01b0319166001600160a01b0383161781556125228743614a87565b600182018190556040517f55b28633cdb29709386f555dfc54418592ad475ce7a65a78ac5928af60ffb8f89161255b918c918691614c99565b60405180910390a1506125cc565b63ffffffff88166000908152600b602052604080822080546001600160a01b0319168155600101829055517f55b28633cdb29709386f555dfc54418592ad475ce7a65a78ac5928af60ffb8f8916125c3918b918591614c99565b60405180910390a15b5050505050505050565b6125de6138a7565b6125e98383836139f5565b505050565b612605826125ff6020860186614206565b3361217c565b612622576040516313e9bb2b60e21b815260040160405180910390fd5b6001600160a01b0382166000908152600160209081526040822090829061264b90870187614206565b63ffffffff168152602080820192909252604090810160009081208784013582529092529020546001600160401b03169050612688848483613924565b6126a55760405163751cb20f60e01b815260040160405180910390fd5b6126b0848483613a18565b6126cc5760405162bbf0e560e11b815260040160405180910390fd5b6126f8836126dd6020870187614206565b60208701356126f26060890160408a01614741565b86613ad5565b7f0d87345f3d1c929caba93e1c3821b54ff3512e12b66aa3cfe54b6bcbc17e59b484848460405161272b93929190614cc0565b60405180910390a150505050565b6001600160a01b038316600090815260036020908152604080832063ffffffff8616845282528083208484529091528120548190612781906001600160401b03166001614ce8565b90506127b0817f0000000000000000000000000000000000000000000000000000000000000000878787613b3b565b95945050505050565b6127c16138a7565b6001600160a01b038116600090815260056020526040902054819060ff166127fc57604051631bc58ef360e11b815260040160405180910390fd5b816001600160a01b0381161561289f576001816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561284c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612870919061486b565b600281111561288157612881614855565b0361289f57604051633d00f6f160e11b815260040160405180910390fd5b82846001600160a01b0382161561293b576040516319d4335360e21b815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa1580156128fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061291e919061489a565b61293b57604051630e476aa960e21b815260040160405180910390fd5b63ffffffff86166000908152600960205260409020546001600160a01b0380871691160361297c5760405163d0ecb66b60e01b815260040160405180910390fd5b63ffffffff861660008181526009602090815260409182902080546001600160a01b0319166001600160a01b038a169081179091558251938452908301527f16aa0f528038ab41019e95bae5b418a50ba8532c5800e3b7ea2f517d3fa625f591016111dd565b6001600160a01b03808316600090815260066020908152604080832063ffffffff861684529091529020541680611655575063ffffffff81166000908152600960205260409020546001600160a01b03168061165557604051636c1ccdb560e01b815260040160405180910390fd5b612a596138a7565b600e80546001600160a01b0319166001600160a01b0383169081179091556040519081527fd476ec5ec1ac11cec3714d41e7ea49419471aceb9bd0dff1becfc3e363a62396906020015b60405180910390a150565b6001600160a01b03811660009081526001602090815260408220611d1f91859185918590612ade90850185614206565b63ffffffff168152602080820192909252604090810160009081208984013582529092529020546001600160401b0316613a18565b336000818152600f602090815260409182902080546001600160a01b0319166001600160a01b0386169081179091558251938452908301527f6ee10e9ed4d6ce9742703a498707862f4b00f1396a87195eb93267b3d79839819101612aa3565b6001600160a01b038216600090815260056020526040902054829060ff16612bae57604051631bc58ef360e11b815260040160405180910390fd5b826001600160a01b03811615612c51576000816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612bfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c22919061486b565b6002811115612c3357612c33614855565b03612c51576040516342756b1b60e11b815260040160405180910390fd5b83856001600160a01b03821615612ced576040516319d4335360e21b815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015612cac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cd0919061489a565b612ced57604051630e476aa960e21b815260040160405180910390fd5b612cf56138a7565b84600003612d295763ffffffff87166000908152600b6020526040812080546001600160a01b031916815560010155612d7e565b438511612d49576040516302efcf9160e11b815260040160405180910390fd5b63ffffffff87166000908152600b6020526040902080546001600160a01b0319166001600160a01b0388161781556001018590555b7f55b28633cdb29709386f555dfc54418592ad475ce7a65a78ac5928af60ffb8f8878787604051610d3d93929190614c99565b612dba84613469565b612dc5848484612256565b612dd0906001614ce8565b6001600160401b0316816001600160401b031614612e0c57604051630c09b63560e41b81526001600160401b038216600482015260240161132a565b6001600160a01b038416600081815260016020908152604080832063ffffffff8816808552908352818420878552835292819020805467ffffffffffffffff19166001600160401b038716908117909155815193845291830186905282019290925260608101919091527f28f40053783033ef755556a0c3315379141f51a33aed8334174ffbadd90bde489060800161272b565b6040805180820190915260008082526020820152612ec460a08401608085016148e7565b8015612ed95750600e546001600160a01b0316155b15612ef757604051632d7b695560e11b815260040160405180910390fd5b6001600160a01b03821660009081526003602090815260408220908290612f2090870187614206565b63ffffffff16815260208082019290925260409081016000908120878401358252909252902054612f5b906001600160401b03166001614ce8565b905060006040518060e00160405280836001600160401b031681526020017f000000000000000000000000000000000000000000000000000000000000000063ffffffff168152602001856001600160a01b03168152602001866000016020810190612fc79190614206565b63ffffffff1681526020018660200135815260200161301f847f0000000000000000000000000000000000000000000000000000000000000000888a60000160208101906130159190614206565b8b60200135613b3b565b81526020016130316040880188614d08565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509390945250929350915061307e9050856109b16020890189614206565b90506001600160a01b03811663d80e9bd98361309d60608a018a614d08565b6130ad60a08c0160808d016148e7565b6040518563ffffffff1660e01b81526004016130cc9493929190614d4e565b6040805180830381865afa1580156130e8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ae9190614e42565b6131146138a7565b6040516301ffc9a760e01b81526325fc096160e21b60048201526001600160a01b038216906301ffc9a790602401602060405180830381865afa15801561315f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613183919061489a565b6131a05760405163eb64f35d60e01b815260040160405180910390fd5b6001600160a01b03811660009081526005602052604090205460ff16156131da5760405163457517f360e11b815260040160405180910390fd5b6001600160a01b0381166000818152600560209081526040808320805460ff191660019081179091556004805491820181559093527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b90920180546001600160a01b0319168417905590519182527f6b374d56679ca9463f27c85c6311e2bb7fde69bf201d3da39d53f10bd9d78af59101612aa3565b6132786138a7565b6001600160a01b0381166132a257604051631e4fbdf760e01b81526000600482015260240161132a565b6132ab816138d4565b50565b6001600160a01b038516600090815260016020908152604080832063ffffffff8816845282528083208684529091528120546001600160401b0390811690841681101561339c57600181015b846001600160401b0316816001600160401b03161161334f5761331f888888846139a8565b61334757604051630c09b63560e41b81526001600160401b038216600482015260240161132a565b6001016132fa565b506001600160a01b038716600090815260016020908152604080832063ffffffff8a16845282528083208884529091529020805467ffffffffffffffff19166001600160401b0386161790555b82516020808501919091206001600160a01b038916600090815260028352604080822063ffffffff8b168352845280822089835284528082206001600160401b0389168352909352919091205490925080831461341657604051637182306f60e01b8152600481018290526024810184905260440161132a565b50506001600160a01b03909516600090815260026020908152604080832063ffffffff90971683529581528582209482529384528481206001600160401b03909316815291909252918220919091555090565b336001600160a01b0382161480159061349c57506001600160a01b038181166000908152600f6020526040902054163314155b156132ab5760405163c4c5259360e01b815260040160405180910390fd5b6134c2613d5a565b600080613533856134d66020870187614206565b6001600160a01b0391909116600090815260036020908152604080832063ffffffff949094168352928152828220818901358352905220805467ffffffffffffffff19811660016001600160401b03928316019182161790915590565b905060006040518060e00160405280836001600160401b031681526020017f000000000000000000000000000000000000000000000000000000000000000063ffffffff168152602001876001600160a01b0316815260200186600001602081019061359f9190614206565b63ffffffff168152602001866020013581526020016135ed847f00000000000000000000000000000000000000000000000000000000000000008a8a60000160208101906130159190614206565b81526020016135ff6040880188614d08565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509390945250929350915061364c9050876109b16020890189614206565b90506000806001600160a01b038316634389e58f8561366e60608c018c614d08565b61367e60a08e0160808f016148e7565b6040518563ffffffff1660e01b815260040161369d9493929190614d4e565b6000604051808303816000875af11580156136bc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526136e49190810190614e5e565b90925090507f1ab700d4ced0c005b164c0f789fd09fcbb0156d4c2041b8a3bfbcd961cd1567f8161371860608b018b614d08565b866040516137299493929190614eac565b60405180910390a1506040805160608101825260a09094015184526001600160401b03909416602084015292820192909252925090509250929050565b600081156137fd57600e546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa1580156137b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137da9190614eec565b9050806000036137fd57604051631775123760e01b815260040160405180910390fd5b919050565b82518210806138145750808360200151115b156125e95782516020840151604051634f3ec0d360e01b815260048101929092526024820184905260448201526064810182905260840161132a565b831561386157613861858386613bb4565b82841015613876576138768582868603613bb4565b5050505050565b831561388d5761388d8285613bef565b828410156138a1576138a181858503613bef565b50505050565b6000546001600160a01b03163314611bcc5760405163118cdaa760e01b815233600482015260240161132a565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600080826001600160401b031611806122ae5750604051600162842fc360e01b031981526001600160a01b0384169063ff7bd03d90613967908790600401614f05565b602060405180830381865afa158015613984573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122ae919061489a565b6001600160a01b038416600090815260026020908152604080832063ffffffff87168452825280832085845282528083206001600160401b03851684529091529020541515949350505050565b6001600160a01b038316613a0d576125e98282613bef565b6125e9838383613bb4565b60006001600160401b038216613a346060860160408701614741565b6001600160401b031611806122ae57506001600160a01b03831660009081526002602090815260408220908290613a6d90880188614206565b63ffffffff1663ffffffff1681526020019081526020016000206000866020013581526020019081526020016000206000866040016020810190613ab19190614741565b6001600160401b031681526020810191909152604001600020541415949350505050565b80613af3576040516304df7fdb60e11b815260040160405180910390fd5b6001600160a01b03909416600090815260026020908152604080832063ffffffff90961683529481528482209382529283528381206001600160401b03909216815291522055565b600085856001600160a01b03861660405160c09390931b6001600160c01b031916602084015260e091821b6001600160e01b03199081166028850152602c8401919091529085901b16604c8201526050810183905260700160405160208183030381529060405280519060200120905095945050505050565b6001600160a01b038216613bdb576040516306b7a93160e41b815260040160405180910390fd5b6125e96001600160a01b0384168383613c9c565b6001600160a01b038216613c16576040516306b7a93160e41b815260040160405180910390fd5b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114613c63576040519150601f19603f3d011682016040523d82523d6000602084013e613c68565b606091505b50509050806125e957604051631196f20d60e21b81526001600160a01b03841660048201526024810183905260440161132a565b604080516001600160a01b03841660248201526044808201849052825180830390910181526064909101909152602080820180516001600160e01b031663a9059cbb60e01b17815282516125e9938793909260009283929183919082885af180613d0c576040513d6000823e3d81fd5b50506000513d91508115613d24578060011415613d31565b6001600160a01b0384163b155b156138a157604051635274afe760e01b81526001600160a01b038516600482015260240161132a565b60405180606001604052806000801916815260200160006001600160401b03168152602001613d9c604051806040016040528060008152602001600081525090565b905290565b600060608284031215613db357600080fd5b50919050565b80356001600160a01b03811681146137fd57600080fd5b60008083601f840112613de257600080fd5b5081356001600160401b03811115613df957600080fd5b60208301915083602082850101111561149e57600080fd5b600080600080600080600060e0888a031215613e2c57600080fd5b613e368989613da1565b9650613e4460608901613db9565b95506080880135945060a08801356001600160401b0380821115613e6757600080fd5b613e738b838c01613dd0565b909650945060c08a0135915080821115613e8c57600080fd5b50613e998a828b01613dd0565b989b979a50959850939692959293505050565b803563ffffffff811681146137fd57600080fd5b60008060008060808587031215613ed657600080fd5b613edf85613db9565b9350613eed60208601613eac565b9250613efb60408601613db9565b9396929550929360600135925050565b60008060408385031215613f1e57600080fd5b82356001600160401b03811115613f3457600080fd5b830160a08186031215613f4657600080fd5b9150613f5460208401613db9565b90509250929050565b6000608082019050825182526001600160401b0360208401511660208301526040830151613f98604084018280518252602090810151910152565b5092915050565b600080600080600060c08688031215613fb757600080fd5b613fc086613db9565b9450613fcf8760208801613da1565b93506080860135925060a08601356001600160401b03811115613ff157600080fd5b613ffd88828901613dd0565b969995985093965092949392505050565b6000806000806080858703121561402457600080fd5b61402d85613db9565b935061403b60208601613db9565b925061404960408601613eac565b915061405760608601613eac565b905092959194509250565b60005b8381101561407d578181015183820152602001614065565b50506000910152565b6000815180845261409e816020860160208601614062565b601f01601f19169290920160200192915050565b602081526000611d1f6020830184614086565b80356001600160401b03811681146137fd57600080fd5b600080600080600060a086880312156140f457600080fd5b6140fd86613db9565b945061410b60208701613eac565b935060408601359250614120606087016140c5565b949793965091946080013592915050565b803561ffff811681146137fd57600080fd5b6000806000806080858703121561415957600080fd5b61416285613db9565b935061417060208601613db9565b92506040850135915061405760608601614131565b6000806040838503121561419857600080fd5b6141a183613db9565b9150613f5460208401613eac565b6000602082840312156141c157600080fd5b611d1f82613db9565b6000806000606084860312156141df57600080fd5b6141e884613db9565b92506141f660208501613eac565b9150604084013590509250925092565b60006020828403121561421857600080fd5b611d1f82613eac565b6000806000806000806000806000806000806101208d8f03121561424457600080fd5b61424d8d613db9565b9b5061425b60208e01613db9565b9a5060408d0135995061427060608e01614131565b985060808d0135975060a08d013596506001600160401b0360c08e0135111561429857600080fd5b6142a88e60c08f01358f01613dd0565b90965094506001600160401b0360e08e013511156142c557600080fd5b6142d58e60e08f01358f01613dd0565b90945092506001600160401b036101008e013511156142f357600080fd5b6143048e6101008f01358f01613dd0565b81935080925050509295989b509295989b509295989b565b60008060008060008060008060008060006101408c8e03121561433e57600080fd5b6143488d8d613da1565b9a5061435660608d01613db9565b995060808c0135985060a08c0135975060c08c013596506001600160401b038060e08e0135111561438657600080fd5b6143968e60e08f01358f01613dd0565b90975095506101008d01358110156143ad57600080fd5b6143be8e6101008f01358f01613dd0565b90955093506101208d01358110156143d557600080fd5b506143e78d6101208e01358e01613dd0565b81935080925050509295989b509295989b9093969950565b6000806000806060858703121561441557600080fd5b61441e85613db9565b935061442c60208601613db9565b925060408501356001600160401b038082111561444857600080fd5b818701915087601f83011261445c57600080fd5b81358181111561446b57600080fd5b8860208260051b850101111561448057600080fd5b95989497505060200194505050565b6000806000806000608086880312156144a757600080fd5b6144b086613db9565b9450602086013593506144c560408701614131565b925060608601356001600160401b03811115613ff157600080fd5b600080608083850312156144f357600080fd5b6144fd8484613da1565b9150613f5460608401613db9565b6020808252825182820181905260009190848201906040850190845b8181101561454c5783516001600160a01b031683529284019291840191600101614527565b50909695505050505050565b60008060008060008060008060c0898b03121561457457600080fd5b61457d89613db9565b975061458b60208a01613db9565b9650604089013595506145a060608a01614131565b945060808901356001600160401b03808211156145bc57600080fd5b6145c88c838d01613dd0565b909650945060a08b01359150808211156145e157600080fd5b506145ee8b828c01613dd0565b999c989b5096995094979396929594505050565b60008060006060848603121561461757600080fd5b61462084613db9565b925061462e60208501613eac565b915061463c60408501613db9565b90509250925092565b60008060006060848603121561465a57600080fd5b61466384613eac565b92506141f660208501613db9565b60008060006060848603121561468657600080fd5b61466384613db9565b600080600060a084860312156146a457600080fd5b6146ae8585613da1565b92506146bc60608501613db9565b9150608084013590509250925092565b600080604083850312156146df57600080fd5b613f4683613eac565b600080600080608085870312156146fe57600080fd5b61470785613db9565b935061471560208601613eac565b925060408501359150614057606086016140c5565b815181526020808301519082015260408101611655565b60006020828403121561475357600080fd5b611d1f826140c5565b838152818360208301376000910160200190815292915050565b63ffffffff61478482613eac565b168252602081013560208301526001600160401b036147a5604083016140c5565b1660408301525050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6147e28189614776565b86606082015260e0608082015260006147ff60e0830187896147af565b6001600160a01b03861660a084015282810360c08401526148218185876147af565b9a9950505050505050505050565b6080810161483d8285614776565b6001600160a01b039290921660609190910152919050565b634e487b7160e01b600052602160045260246000fd5b60006020828403121561487d57600080fd5b815160038110611d1f57600080fd5b80151581146132ab57600080fd5b6000602082840312156148ac57600080fd5b8151611d1f8161488c565b6001600160a01b03948516815263ffffffff93909316602084015292166040820152606081019190915260800190565b6000602082840312156148f957600080fd5b8135611d1f8161488c565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261492b57600080fd5b81516001600160401b038082111561494557614945614904565b604051601f8301601f19908116603f0116810190828211818310171561496d5761496d614904565b8160405283815286602085880101111561498657600080fd5b6112ae846020830160208901614062565b6000602082840312156149a957600080fd5b81516001600160401b038111156149bf57600080fd5b6122ae8482850161491a565b63ffffffff95909516855260208501939093526001600160a01b039190911660408401526001600160401b03166060830152608082015260a00190565b8a815261ffff8a16602082015288604082015287606082015260e060808201526000614a3860e08301888a6147af565b82810360a0840152614a4b8187896147af565b905082810360c0840152614a608185876147af565b9d9c50505050505050505050505050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561165557611655614a71565b6000610120614aa9838e614776565b8b60608401528a60808401528960a08401528060c0840152614ace818401898b6147af565b905082810360e0840152614ae38187896147af565b9050828103610100840152614a608185876147af565b6001600160a01b03841681526040602080830182905282820184905260009190606090818501600587901b8601830188865b89811015614bdc57888303605f190184528135368c9003605e19018112614b5157600080fd5b8b0163ffffffff80614b6283613eac565b16855280614b71888401613eac565b16878601525087810135601e19823603018112614b8d57600080fd5b0185810190356001600160401b03811115614ba757600080fd5b803603821315614bb657600080fd5b8789860152614bc888860182846147af565b958701959450505090840190600101614b2b565b50909a9950505050505050505050565b8183823760009101908152919050565b6001600160a01b038781168252861660208201526040810185905261ffff8416606082015260a060808201819052600090614c3a90830184866147af565b98975050505050505050565b600060018060a01b03808a16835288602084015260a06040840152614c6f60a08401888a6147af565b81871660608501528381036080850152614c8a8186886147af565b9b9a5050505050505050505050565b63ffffffff9390931683526001600160a01b03919091166020830152604082015260600190565b60a08101614cce8286614776565b6001600160a01b0393909316606082015260800152919050565b6001600160401b03818116838216019080821115613f9857613f98614a71565b6000808335601e19843603018112614d1f57600080fd5b8301803591506001600160401b03821115614d3957600080fd5b60200191503681900382131561149e57600080fd5b606080825285516001600160401b031682820152602086015163ffffffff16608083015260408601516001600160a01b031660a0830152850151600090614d9d60c084018263ffffffff169052565b50608086015160e083015260a086015161010083015260c086015160e0610120840152614dce610140840182614086565b90508281036020840152614de38186886147af565b9150506127b0604083018415159052565b600060408284031215614e0657600080fd5b604051604081018181106001600160401b0382111715614e2857614e28614904565b604052825181526020928301519281019290925250919050565b600060408284031215614e5457600080fd5b611d1f8383614df4565b60008060608385031215614e7157600080fd5b614e7b8484614df4565b915060408301516001600160401b03811115614e9657600080fd5b614ea28582860161491a565b9150509250929050565b606081526000614ebf6060830187614086565b8281036020840152614ed28186886147af565b91505060018060a01b038316604083015295945050505050565b600060208284031215614efe57600080fd5b5051919050565b60608101611655828461477656fea264697066735822122051f9eb00fad53055a1c5087afa544b196a11f671f631975a7c4baa38e5aeab2064736f6c63430008160033608060405234801561001057600080fd5b506101c3806100206000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806301ffc9a7146100655780631881d94d1461008d57806354fd4d501461009c5780636750cd4c146100c3575b604051632657b6c360e01b815260040160405180910390fd5b61007861007336600461010e565b6100d7565b60405190151581526020015b60405180910390f35b6002604051610084919061013f565b6040805167ffffffffffffffff815260ff6020820152600291810191909152606001610084565b6100786100d1366004610167565b50600190565b60006001600160e01b031982166325fc096160e21b148061010857506301ffc9a760e01b6001600160e01b03198316145b92915050565b60006020828403121561012057600080fd5b81356001600160e01b03198116811461013857600080fd5b9392505050565b602081016003831061016157634e487b7160e01b600052602160045260246000fd5b91905290565b60006020828403121561017957600080fd5b813563ffffffff8116811461013857600080fdfea2646970667358221220b5a5c043a377444c26f6a8e7dd680ec55e20f7abeec109769ef20ff322bd379164736f6c6343000816003360e06040526001600d553480156200001657600080fd5b5060405162005649380380620056498339810160408190526200003991620002fb565b828281816001600160a01b0381166200006d57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6200007881620000de565b5063ffffffff166080526040516200009090620002d0565b604051809103906000f080158015620000ad573d6000803e3d6000fd5b506001600160a01b031660a0819052620000c7906200012e565b50506001600160a01b031660c052506200037a9050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b620001386200029f565b6040516301ffc9a760e01b81526325fc096160e21b60048201526001600160a01b038216906301ffc9a790602401602060405180830381865afa15801562000184573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001aa91906200034f565b620001c85760405163eb64f35d60e01b815260040160405180910390fd5b6001600160a01b03811660009081526005602052604090205460ff1615620002035760405163457517f360e11b815260040160405180910390fd5b6001600160a01b0381166000818152600560209081526040808320805460ff191660019081179091556004805491820181559093527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b90920180546001600160a01b0319168417905590519182527f6b374d56679ca9463f27c85c6311e2bb7fde69bf201d3da39d53f10bd9d78af5910160405180910390a150565b6000546001600160a01b03163314620002ce5760405163118cdaa760e01b815233600482015260240162000064565b565b6101e3806200546683390190565b80516001600160a01b0381168114620002f657600080fd5b919050565b6000806000606084860312156200031157600080fd5b835163ffffffff811681146200032657600080fd5b92506200033660208501620002de565b91506200034660408501620002de565b90509250925092565b6000602082840312156200036257600080fd5b815180151581146200037357600080fd5b9392505050565b60805160a05160c051615084620003e260003960008181610b6a01528181612a7b015281816137ab015261395e01526000610781015260008181610531015281816127a901528181612fab015281816130120152818161358001526135e701526150846000f3fe6080604052600436106103505760003560e01c80639132e5c3116101c6578063c9fc7bcd116100f7578063ddc28c5811610095578063e8964e811161006f578063e8964e8114610bae578063ef667aa114610bce578063f2fde38b14610c19578063f64be4c714610c3957600080fd5b8063ddc28c5814610b2e578063e1758bd814610b5b578063e4fe1d9414610b8e57600080fd5b8063d4b4ec8f116100d1578063d4b4ec8f14610a72578063d70b890214610a92578063dc706a6214610ab2578063dc93c8a214610ae257600080fd5b8063c9fc7bcd146109f6578063ca5eb5e114610a3d578063cb5026b914610a5d57600080fd5b8063a7229fd911610164578063aafea3121161013e578063aafea31214610976578063b96a277f14610996578063c28e0eed146109b6578063c9a54a99146109d657600080fd5b8063a7229fd914610916578063a825d74714610936578063aafe5e071461095657600080fd5b80639c6d7340116101a05780639c6d73401461086f5780639d7f9775146108b6578063a0dd43fc146108d6578063a718531b146108f657600080fd5b80639132e5c31461081a57806391d20fa11461083c5780639535ff301461084f57600080fd5b80635b17bb70116102a05780636f50a8031161023e57806379624ca91161021857806379624ca9146107a35780637cb59012146107bc578063861e1ca5146107dc5780638da5cb5b146107fc57600080fd5b80636f50a80314610724578063715018a61461075a578063733180911461076f57600080fd5b80636a14d7151161027a5780636a14d715146106655780636bf73fa3146106855780636dbd9f90146106a55780636e83f5bb146106c557600080fd5b80635b17bb70146105b65780636750cd4c14610615578063697fe6b61461064557600080fd5b80632baf0be71161030d578063402f8468116102e7578063402f8468146104c057806340f80683146104ff578063416ecebf1461051f578063587cde1e1461056857600080fd5b80632baf0be7146104355780632e80fbf31461045957806335d330b01461047957600080fd5b80630c0c389e1461035557806314f651a91461036a578063183c834f146103a85780632637a450146103c85780632a56c1b0146103e85780632b3197b914610408575b600080fd5b610368610363366004613f4c565b610c6f565b005b34801561037657600080fd5b5061037f610d6d565b6040805163ffffffff90931683526001600160a01b039091166020830152015b60405180910390f35b3480156103b457600080fd5b506103686103c3366004613ffb565b610d9f565b6103db6103d6366004614046565b611046565b60405161039f9190614098565b3480156103f457600080fd5b506103686104033660046140da565b61116d565b34801561041457600080fd5b50610428610423366004614149565b61120d565b60405161039f91906141ed565b34801561044157600080fd5b5061044b60001981565b60405190815260200161039f565b34801561046557600080fd5b50610368610474366004614217565b6112d8565b34801561048557600080fd5b5061044b61049436600461427e565b600c60209081526000948552604080862082529385528385208152918452828420909152825290205481565b3480156104cc57600080fd5b506104e06104db3660046142c0565b611447565b604080516001600160a01b03909316835290151560208301520161039f565b34801561050b57600080fd5b5061036861051a366004614217565b6114c5565b34801561052b57600080fd5b506105537f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff909116815260200161039f565b34801561057457600080fd5b5061059e6105833660046142ea565b600f602052600090815260409020546001600160a01b031681565b6040516001600160a01b03909116815260200161039f565b3480156105c257600080fd5b506105fd6105d1366004614305565b60016020908152600093845260408085208252928452828420905282529020546001600160401b031681565b6040516001600160401b03909116815260200161039f565b34801561062157600080fd5b50610635610630366004614341565b61162b565b604051901515815260200161039f565b34801561065157600080fd5b5061036861066036600461435c565b61167b565b34801561067157600080fd5b50610368610680366004613ffb565b6116f0565b34801561069157600080fd5b506103686106a0366004614457565b611ace565b3480156106b157600080fd5b506103686106c036600461453a565b611b38565b3480156106d157600080fd5b506107056106e0366004614341565b600b60205260009081526040902080546001909101546001600160a01b039091169082565b604080516001600160a01b03909316835260208301919091520161039f565b34801561073057600080fd5b5061059e61073f366004614341565b600a602052600090815260409020546001600160a01b031681565b34801561076657600080fd5b50610368611bda565b34801561077b57600080fd5b5061059e7f000000000000000000000000000000000000000000000000000000000000000081565b3480156107af57600080fd5b50600d5460011415610635565b3480156107c857600080fd5b506103686107d73660046145ca565b611bee565b3480156107e857600080fd5b506106356107f736600461461b565b611cda565b34801561080857600080fd5b506000546001600160a01b031661059e565b34801561082657600080fd5b5061082f611d46565b60405161039f9190614646565b61036861084a366004614693565b611da8565b34801561085b57600080fd5b5061036861086a36600461473d565b611f38565b34801561087b57600080fd5b506105fd61088a366004614305565b60036020908152600093845260408085208252928452828420905282529020546001600160401b031681565b3480156108c257600080fd5b506106356108d136600461473d565b61219c565b3480156108e257600080fd5b506105fd6108f1366004614305565b612276565b34801561090257600080fd5b50610368610911366004614780565b6122d6565b34801561092257600080fd5b506103686109313660046147ac565b6125f6565b34801561094257600080fd5b506103686109513660046147ca565b61260e565b34801561096257600080fd5b5061044b610971366004614305565b612759565b34801561098257600080fd5b50610368610991366004614807565b6127d9565b3480156109a257600080fd5b5061059e6109b13660046142c0565b612a02565b3480156109c257600080fd5b506103686109d13660046142ea565b612a71565b3480156109e257600080fd5b506106356109f136600461461b565b612ad7565b348015610a0257600080fd5b5061044b610a11366004614823565b600260209081526000948552604080862082529385528385208152918452828420909152825290205481565b348015610a4957600080fd5b50610368610a583660046142ea565b612b3c565b348015610a6957600080fd5b5061044b600081565b348015610a7e57600080fd5b50610368610a8d366004614780565b612ba3565b348015610a9e57600080fd5b50610368610aad366004614823565b612de1565b348015610abe57600080fd5b50610635610acd3660046142ea565b60056020526000908152604090205460ff1681565b348015610aee57600080fd5b50610635610afd3660046142c0565b6001600160a01b03918216600090815260066020908152604080832063ffffffff9490941683529290522054161590565b348015610b3a57600080fd5b50610b4e610b49366004614046565b612ed0565b60405161039f9190614865565b348015610b6757600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061059e565b348015610b9a57600080fd5b50600e5461059e906001600160a01b031681565b348015610bba57600080fd5b50610368610bc93660046142ea565b61313c565b348015610bda57600080fd5b50610705610be93660046142c0565b6008602090815260009283526040808420909152908252902080546001909101546001600160a01b039091169082565b348015610c2557600080fd5b50610368610c343660046142ea565b6132a0565b348015610c4557600080fd5b5061059e610c54366004614341565b6009602052600090815260409020546001600160a01b031681565b610cbe86610c8060208a018a614341565b60208a0135610c9560608c0160408d0161487c565b898989604051602001610caa93929190614897565b6040516020818303038152906040526132db565b506040516313137d6560e01b81526001600160a01b038716906313137d65903490610cf9908b908a908a908a9033908b908b90600401614913565b6000604051808303818588803b158015610d1257600080fd5b505af1158015610d26573d6000803e3d6000fd5b50505050507f3cd5e48f9730b129dc7550f0fcea9c767b7be37837cd10e55eb35f734f4bca048787604051610d5c92919061496a565b60405180910390a150505050505050565b600080610d7d600d546001141590565b610d8957600080610d97565b610d97600d5460a081901c91565b915091509091565b6001600160a01b038216600090815260056020526040902054829060ff16610dda57604051631bc58ef360e11b815260040160405180910390fd5b826001600160a01b03811615610e7d576000816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e4e91906149a6565b6002811115610e5f57610e5f614990565b03610e7d576040516342756b1b60e11b815260040160405180910390fd5b83856001600160a01b03821615610f19576040516319d4335360e21b815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015610ed8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610efc91906149d5565b610f1957604051630e476aa960e21b815260040160405180910390fd5b610f2288613496565b6000610f2e8989611447565b9150508015610f5057604051633c075f7560e01b815260040160405180910390fd5b85600003610f98576001600160a01b038916600090815260086020908152604080832063ffffffff8c168452909152812080546001600160a01b031916815560010155610ffe565b438611610fb8576040516302efcf9160e11b815260040160405180910390fd5b6001600160a01b03898116600090815260086020908152604080832063ffffffff8d168452909152902080546001600160a01b0319169189169190911781556001018690555b7f4e0a5bbfa0c11a64effb1ada324b5437a17272e1aed9320398715ef71bb209288989898960405161103394939291906149f2565b60405180910390a1505050505050505050565b61104e613e95565b61105b6020840184614341565b336001600d541461107f5760405163ee120b0960e01b815260040160405180910390fd5b63ffffffff60a01b60a083811b919091166001600160a01b03831617600d556110ad90860160808701614a22565b80156110c25750600e546001600160a01b0316155b156110e057604051632d7b695560e11b815260040160405180910390fd5b6000806110ed33886134e7565b9150915060006110fb613793565b9050600061111761111260a08b0160808c01614a22565b613823565b9050611128846040015183836138bf565b600e5460408501516020015161114a916001600160a01b03169083868c61390d565b60408401515161115c9083858b61393a565b50506001600d555095945050505050565b61117685613496565b600083838360405160200161118d93929190614897565b60408051601f1981840301815291905290506111cb866111b06020880188614341565b60208801356111c560608a0160408b0161487c565b856132db565b507f3cd5e48f9730b129dc7550f0fcea9c767b7be37837cd10e55eb35f734f4bca0485876040516111fd92919061496a565b60405180910390a1505050505050565b6001600160a01b038316600090815260056020526040902054606090849060ff1661124b57604051631bc58ef360e11b815260040160405180910390fd5b604051639c33abf760e01b815263ffffffff80861660048301526001600160a01b0388811660248401529085166044830152861690639c33abf790606401600060405180830381865afa1580156112a6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526112ce9190810190614ad2565b9695505050505050565b6112e185613496565b6001600160a01b038516600090815260026020908152604080832063ffffffff88168452825280832086845282528083206001600160401b038616845290915290205481811461135357604051637182306f60e01b815260048101829052602481018390526044015b60405180910390fd5b6001600160a01b038616600090815260016020908152604080832063ffffffff8916845282528083208784529091529020546001600160401b039081169084161180159061139f575080155b156113c857604051630c09b63560e41b81526001600160401b038416600482015260240161134a565b6001600160a01b038616600090815260026020908152604080832063ffffffff89168452825280832087845282528083206001600160401b0387168452909152908190206000199055517faf0450c392c4f702515a457a362328c8aa21916048ca6d0419e248b30cb55292906111fd90879087908a9088908890614b06565b6001600160a01b03808316600090815260076020908152604080832063ffffffff8616845290915281205490911690816114be5763ffffffff83166000908152600a60205260409020546001600160a01b03169150816114ba57604051633c74268360e11b815260040160405180910390fd5b5060015b9250929050565b6114ce85613496565b6001600160a01b038516600090815260026020908152604080832063ffffffff88168452825280832086845282528083206001600160401b038616845290915290205481811461153b57604051637182306f60e01b8152600481018290526024810183905260440161134a565b80158061158557506001600160a01b038616600090815260016020908152604080832063ffffffff8916845282528083208784529091529020546001600160401b03908116908416115b156115ae57604051630c09b63560e41b81526001600160401b038416600482015260240161134a565b6001600160a01b038616600090815260026020908152604080832063ffffffff89168452825280832087845282528083206001600160401b038716845290915280822091909155517f7f68a37a6e69a0de35024a234558f9efe4b33b58657753d21eaaa82d51c3510e906111fd90879087908a9088908890614b06565b63ffffffff81166000908152600960205260408120546001600160a01b031615801590611675575063ffffffff82166000908152600a60205260409020546001600160a01b031615155b92915050565b336001600160a01b03168b6001600160a01b03168d6001600160a01b03167f8a0b1dce321c5c5fb42349bce46d18087c04140de520917661fb923e44a904b98d8d8d8d8d8d8d8d8d8d6040516116da9a99989796959493929190614b43565b60405180910390a4505050505050505050505050565b6001600160a01b038216600090815260056020526040902054829060ff1615801561172357506001600160a01b03811615155b156117415760405163a4ff2ec360e01b815260040160405180910390fd5b826001600160a01b038116156117e4576000816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611791573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117b591906149a6565b60028111156117c6576117c6614990565b036117e4576040516342756b1b60e11b815260040160405180910390fd5b83856001600160a01b03821615611880576040516319d4335360e21b815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa15801561183f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186391906149d5565b61188057604051630e476aa960e21b815260040160405180910390fd5b61188988613496565b6001600160a01b03808916600090815260076020908152604080832063ffffffff8c168452909152902054811690871681036118d85760405163d0ecb66b60e01b815260040160405180910390fd5b6001600160a01b03898116600081815260076020908152604080832063ffffffff8e168085529083529281902080546001600160a01b031916958d1695861790558051938452908301919091528101919091527fcd6f92f5ac6185a5acfa02c92090746cec64d777269cbcd0ed031e396657a1c29060600160405180910390a18515611a52576001600160a01b038116158061197b57506001600160a01b038716155b1561199957604051633c075f7560e01b815260040160405180910390fd5b60006040518060400160405280836001600160a01b0316815260200188436119c19190614bc2565b90526001600160a01b038b8116600090815260086020908152604080832063ffffffff8f168452825291829020845181546001600160a01b03191694169390931783558301516001909201829055519192507f4e0a5bbfa0c11a64effb1ada324b5437a17272e1aed9320398715ef71bb2092891611a44918d918d9187916149f2565b60405180910390a150611ac3565b6001600160a01b038916600090815260086020908152604080832063ffffffff8c16845290915280822080546001600160a01b0319168155600101829055517f4e0a5bbfa0c11a64effb1ada324b5437a17272e1aed9320398715ef71bb2092891611033918c918c918691906149f2565b505050505050505050565b336001600160a01b03168a6001600160a01b03167f7edfa10fe10193301ad8a8bea7e968c7bcabcc64981f368e3aeada40ce26ae2c8d8c8c8c8c8c8c8c8c8c604051611b239a99989796959493929190614bd5565b60405180910390a35050505050505050505050565b6001600160a01b038316600090815260056020526040902054839060ff16611b7357604051631bc58ef360e11b815260040160405180910390fd5b611b7c85613496565b604051631077eb9160e11b81526001600160a01b038516906320efd72290611bac90889087908790600401614c34565b600060405180830381600087803b158015611bc657600080fd5b505af1158015611ac3573d6000803e3d6000fd5b611be261398c565b611bec60006139b9565b565b336000908152600c602090815260408083206001600160a01b03891684528252808320878452825280832061ffff8716845290915290205415611c4457604051630542086560e21b815260040160405180910390fd5b8181604051611c54929190614d27565b60408051918290038220336000818152600c60209081528482206001600160a01b038c16835281528482208a8352815284822061ffff8a168352905292909220557f3d52ff888d033fd3dd1d8057da59e850c91d91a72c41dfa445b247dfedeb6dc191611ccb919088908890889088908890614d37565b60405180910390a15050505050565b6001600160a01b03811660009081526001602090815260408220611d3f91859185918590611d0a90850185614341565b63ffffffff168152602080820192909252604090810160009081208984013582529092529020546001600160401b0316613a09565b9392505050565b60606004805480602002602001604051908101604052809291908181526020018280548015611d9e57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611d80575b5050505050905090565b6001600160a01b038089166000908152600c60209081526040808320938b168352928152828220898352815282822061ffff891683529052818120549151611df39087908790614d27565b60405180910390209050808214611e27576040516335ca595f60e01b8152600481018390526024810182905260440161134a565b6001600160a01b03808b166000908152600c60209081526040808320938d168084529382528083208c8452825280832061ffff8c168452909152908190206001905551630685081360e51b815263d0a10260903490611e96908e908d908c908c9033908d908d90600401614d81565b6000604051808303818588803b158015611eaf57600080fd5b505af1158015611ec3573d6000803e3d6000fd5b50505050507e36c98efcf9e6641dfbc9051f66f405253e8e0c2ab4a24dccda15595b7378c88a8a8a8a604051611f2494939291906001600160a01b039485168152929093166020830152604082015261ffff91909116606082015260800190565b60405180910390a150505050505050505050565b6001600160a01b038116600090815260056020526040902054819060ff16158015611f6b57506001600160a01b03811615155b15611f895760405163a4ff2ec360e01b815260040160405180910390fd5b816001600160a01b0381161561202c576001816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611fd9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ffd91906149a6565b600281111561200e5761200e614990565b0361202c57604051633d00f6f160e11b815260040160405180910390fd5b82846001600160a01b038216156120c8576040516319d4335360e21b815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015612087573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120ab91906149d5565b6120c857604051630e476aa960e21b815260040160405180910390fd5b6120d187613496565b6001600160a01b03878116600090815260066020908152604080832063ffffffff8b16845290915290205481871691160361211f5760405163d0ecb66b60e01b815260040160405180910390fd5b6001600160a01b03878116600081815260066020908152604080832063ffffffff8c168085529083529281902080546001600160a01b031916958b1695861790558051938452908301919091528101919091527f4cff966ebee29a156dcb34cf72c1d06231fb1777f6bdf6e8089819232f002b1c90606001610d5c565b60008060006121ab8686611447565b91509150816001600160a01b0316846001600160a01b0316036121d357600192505050611d3f565b600081612208576001600160a01b038716600090815260086020908152604080832063ffffffff8a168452909152902061221e565b63ffffffff86166000908152600b602052604090205b6040805180820190915281546001600160a01b03908116808352600190930154602083015290925086161480156122585750438160200151115b156122695760019350505050611d3f565b5060009695505050505050565b6001600160a01b038316600090815260016020908152604080832063ffffffff8616845282528083208484529091528120546001600160401b03165b6122c185858584600101613a8d565b156122ce576001016122b2565b949350505050565b6122de61398c565b6001600160a01b038216600090815260056020526040902054829060ff1661231957604051631bc58ef360e11b815260040160405180910390fd5b826001600160a01b038116156123bc576000816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612369573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061238d91906149a6565b600281111561239e5761239e614990565b036123bc576040516342756b1b60e11b815260040160405180910390fd5b83856001600160a01b03821615612458576040516319d4335360e21b815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015612417573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061243b91906149d5565b61245857604051630e476aa960e21b815260040160405180910390fd5b63ffffffff87166000908152600a60205260409020546001600160a01b03908116908716810361249b5760405163d0ecb66b60e01b815260040160405180910390fd5b63ffffffff88166000818152600a602090815260409182902080546001600160a01b0319166001600160a01b038c169081179091558251938452908301527fc16891855cffb4a5ac51ac11864a3f3c96ba816cc45fe686c987ae36277de5ec910160405180910390a185156125895763ffffffff88166000908152600b6020526040902080546001600160a01b0319166001600160a01b0383161781556125428743614bc2565b600182018190556040517f55b28633cdb29709386f555dfc54418592ad475ce7a65a78ac5928af60ffb8f89161257b918c918691614dd4565b60405180910390a1506125ec565b63ffffffff88166000908152600b602052604080822080546001600160a01b0319168155600101829055517f55b28633cdb29709386f555dfc54418592ad475ce7a65a78ac5928af60ffb8f8916125e3918b918591614dd4565b60405180910390a15b5050505050505050565b6125fe61398c565b612609838383613ada565b505050565b6126258261261f6020860186614341565b3361219c565b612642576040516313e9bb2b60e21b815260040160405180910390fd5b6001600160a01b0382166000908152600160209081526040822090829061266b90870187614341565b63ffffffff168152602080820192909252604090810160009081208784013582529092529020546001600160401b031690506126a8848483613a09565b6126c55760405163751cb20f60e01b815260040160405180910390fd5b6126d0848483613afd565b6126ec5760405162bbf0e560e11b815260040160405180910390fd5b612718836126fd6020870187614341565b60208701356127126060890160408a0161487c565b86613bba565b7f0d87345f3d1c929caba93e1c3821b54ff3512e12b66aa3cfe54b6bcbc17e59b484848460405161274b93929190614dfb565b60405180910390a150505050565b6001600160a01b038316600090815260036020908152604080832063ffffffff86168452825280832084845290915281205481906127a1906001600160401b03166001614e23565b90506127d0817f0000000000000000000000000000000000000000000000000000000000000000878787613c20565b95945050505050565b6127e161398c565b6001600160a01b038116600090815260056020526040902054819060ff1661281c57604051631bc58ef360e11b815260040160405180910390fd5b816001600160a01b038116156128bf576001816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561286c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061289091906149a6565b60028111156128a1576128a1614990565b036128bf57604051633d00f6f160e11b815260040160405180910390fd5b82846001600160a01b0382161561295b576040516319d4335360e21b815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa15801561291a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061293e91906149d5565b61295b57604051630e476aa960e21b815260040160405180910390fd5b63ffffffff86166000908152600960205260409020546001600160a01b0380871691160361299c5760405163d0ecb66b60e01b815260040160405180910390fd5b63ffffffff861660008181526009602090815260409182902080546001600160a01b0319166001600160a01b038a169081179091558251938452908301527f16aa0f528038ab41019e95bae5b418a50ba8532c5800e3b7ea2f517d3fa625f591016111fd565b6001600160a01b03808316600090815260066020908152604080832063ffffffff861684529091529020541680611675575063ffffffff81166000908152600960205260409020546001600160a01b03168061167557604051636c1ccdb560e01b815260040160405180910390fd5b612a7961398c565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b031603612acb576040516310647d0b60e01b815260040160405180910390fd5b612ad481613c99565b50565b6001600160a01b03811660009081526001602090815260408220611d3f91859185918590612b0790850185614341565b63ffffffff168152602080820192909252604090810160009081208984013582529092529020546001600160401b0316613afd565b336000818152600f602090815260409182902080546001600160a01b0319166001600160a01b0386169081179091558251938452908301527f6ee10e9ed4d6ce9742703a498707862f4b00f1396a87195eb93267b3d798398191015b60405180910390a150565b6001600160a01b038216600090815260056020526040902054829060ff16612bde57604051631bc58ef360e11b815260040160405180910390fd5b826001600160a01b03811615612c81576000816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c5291906149a6565b6002811115612c6357612c63614990565b03612c81576040516342756b1b60e11b815260040160405180910390fd5b83856001600160a01b03821615612d1d576040516319d4335360e21b815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015612cdc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d0091906149d5565b612d1d57604051630e476aa960e21b815260040160405180910390fd5b612d2561398c565b84600003612d595763ffffffff87166000908152600b6020526040812080546001600160a01b031916815560010155612dae565b438511612d79576040516302efcf9160e11b815260040160405180910390fd5b63ffffffff87166000908152600b6020526040902080546001600160a01b0319166001600160a01b0388161781556001018590555b7f55b28633cdb29709386f555dfc54418592ad475ce7a65a78ac5928af60ffb8f8878787604051610d5c93929190614dd4565b612dea84613496565b612df5848484612276565b612e00906001614e23565b6001600160401b0316816001600160401b031614612e3c57604051630c09b63560e41b81526001600160401b038216600482015260240161134a565b6001600160a01b038416600081815260016020908152604080832063ffffffff8816808552908352818420878552835292819020805467ffffffffffffffff19166001600160401b038716908117909155815193845291830186905282019290925260608101919091527f28f40053783033ef755556a0c3315379141f51a33aed8334174ffbadd90bde489060800161274b565b6040805180820190915260008082526020820152612ef460a0840160808501614a22565b8015612f095750600e546001600160a01b0316155b15612f2757604051632d7b695560e11b815260040160405180910390fd5b6001600160a01b03821660009081526003602090815260408220908290612f5090870187614341565b63ffffffff16815260208082019290925260409081016000908120878401358252909252902054612f8b906001600160401b03166001614e23565b905060006040518060e00160405280836001600160401b031681526020017f000000000000000000000000000000000000000000000000000000000000000063ffffffff168152602001856001600160a01b03168152602001866000016020810190612ff79190614341565b63ffffffff1681526020018660200135815260200161304f847f0000000000000000000000000000000000000000000000000000000000000000888a60000160208101906130459190614341565b8b60200135613c20565b81526020016130616040880188614e43565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525092935091506130ae9050856109b16020890189614341565b90506001600160a01b03811663d80e9bd9836130cd60608a018a614e43565b6130dd60a08c0160808d01614a22565b6040518563ffffffff1660e01b81526004016130fc9493929190614e89565b6040805180830381865afa158015613118573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ce9190614f7d565b61314461398c565b6040516301ffc9a760e01b81526325fc096160e21b60048201526001600160a01b038216906301ffc9a790602401602060405180830381865afa15801561318f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131b391906149d5565b6131d05760405163eb64f35d60e01b815260040160405180910390fd5b6001600160a01b03811660009081526005602052604090205460ff161561320a5760405163457517f360e11b815260040160405180910390fd5b6001600160a01b0381166000818152600560209081526040808320805460ff191660019081179091556004805491820181559093527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b90920180546001600160a01b0319168417905590519182527f6b374d56679ca9463f27c85c6311e2bb7fde69bf201d3da39d53f10bd9d78af59101612b98565b6132a861398c565b6001600160a01b0381166132d257604051631e4fbdf760e01b81526000600482015260240161134a565b612ad4816139b9565b6001600160a01b038516600090815260016020908152604080832063ffffffff8816845282528083208684529091528120546001600160401b039081169084168110156133c957600181015b846001600160401b0316816001600160401b03161161337c5761334c88888884613a8d565b61337457604051630c09b63560e41b81526001600160401b038216600482015260240161134a565b600101613327565b506001600160a01b038716600090815260016020908152604080832063ffffffff8a16845282528083208884529091529020805467ffffffffffffffff19166001600160401b0386161790555b82516020808501919091206001600160a01b038916600090815260028352604080822063ffffffff8b168352845280822089835284528082206001600160401b0389168352909352919091205490925080831461344357604051637182306f60e01b8152600481018290526024810184905260440161134a565b50506001600160a01b03909516600090815260026020908152604080832063ffffffff90971683529581528582209482529384528481206001600160401b03909316815291909252918220919091555090565b336001600160a01b038216148015906134c957506001600160a01b038181166000908152600f6020526040902054163314155b15612ad45760405163c4c5259360e01b815260040160405180910390fd5b6134ef613e95565b600080613560856135036020870187614341565b6001600160a01b0391909116600090815260036020908152604080832063ffffffff949094168352928152828220818901358352905220805467ffffffffffffffff19811660016001600160401b03928316019182161790915590565b905060006040518060e00160405280836001600160401b031681526020017f000000000000000000000000000000000000000000000000000000000000000063ffffffff168152602001876001600160a01b031681526020018660000160208101906135cc9190614341565b63ffffffff1681526020018660200135815260200161361a847f00000000000000000000000000000000000000000000000000000000000000008a8a60000160208101906130459190614341565b815260200161362c6040880188614e43565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525092935091506136799050876109b16020890189614341565b90506000806001600160a01b038316634389e58f8561369b60608c018c614e43565b6136ab60a08e0160808f01614a22565b6040518563ffffffff1660e01b81526004016136ca9493929190614e89565b6000604051808303816000875af11580156136e9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526137119190810190614f99565b90925090507f1ab700d4ced0c005b164c0f789fd09fcbb0156d4c2041b8a3bfbcd961cd1567f8161374560608b018b614e43565b866040516137569493929190614fe7565b60405180910390a1506040805160608101825260a09094015184526001600160401b03909416602084015292820192909252925090509250929050565b6040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa1580156137fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061381e9190615027565b905090565b600081156138ba57600e546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015613873573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138979190615027565b9050806000036138ba57604051631775123760e01b815260040160405180910390fd5b919050565b82518210806138d15750808360200151115b156126095782516020840151604051634f3ec0d360e01b815260048101929092526024820184905260448201526064810182905260840161134a565b831561391e5761391e858386613cef565b82841015613933576139338582868603613cef565b5050505050565b341561395957604051634d18bd2960e11b815260040160405180910390fd5b6139867f00000000000000000000000000000000000000000000000000000000000000008585858561390d565b50505050565b6000546001600160a01b03163314611bec5760405163118cdaa760e01b815233600482015260240161134a565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600080826001600160401b031611806122ce5750604051600162842fc360e01b031981526001600160a01b0384169063ff7bd03d90613a4c908790600401615040565b602060405180830381865afa158015613a69573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122ce91906149d5565b6001600160a01b038416600090815260026020908152604080832063ffffffff87168452825280832085845282528083206001600160401b03851684529091529020541515949350505050565b6001600160a01b038316613af2576126098282613d2a565b612609838383613cef565b60006001600160401b038216613b19606086016040870161487c565b6001600160401b031611806122ce57506001600160a01b03831660009081526002602090815260408220908290613b5290880188614341565b63ffffffff1663ffffffff1681526020019081526020016000206000866020013581526020019081526020016000206000866040016020810190613b96919061487c565b6001600160401b031681526020810191909152604001600020541415949350505050565b80613bd8576040516304df7fdb60e11b815260040160405180910390fd5b6001600160a01b03909416600090815260026020908152604080832063ffffffff90961683529481528482209382529283528381206001600160401b03909216815291522055565b600085856001600160a01b03861660405160c09390931b6001600160c01b031916602084015260e091821b6001600160e01b03199081166028850152602c8401919091529085901b16604c8201526050810183905260700160405160208183030381529060405280519060200120905095945050505050565b613ca161398c565b600e80546001600160a01b0319166001600160a01b0383169081179091556040519081527fd476ec5ec1ac11cec3714d41e7ea49419471aceb9bd0dff1becfc3e363a6239690602001612b98565b6001600160a01b038216613d16576040516306b7a93160e41b815260040160405180910390fd5b6126096001600160a01b0384168383613dd7565b6001600160a01b038216613d51576040516306b7a93160e41b815260040160405180910390fd5b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114613d9e576040519150601f19603f3d011682016040523d82523d6000602084013e613da3565b606091505b505090508061260957604051631196f20d60e21b81526001600160a01b03841660048201526024810183905260440161134a565b604080516001600160a01b03841660248201526044808201849052825180830390910181526064909101909152602080820180516001600160e01b031663a9059cbb60e01b1781528251612609938793909260009283929183919082885af180613e47576040513d6000823e3d81fd5b50506000513d91508115613e5f578060011415613e6c565b6001600160a01b0384163b155b1561398657604051635274afe760e01b81526001600160a01b038516600482015260240161134a565b60405180606001604052806000801916815260200160006001600160401b03168152602001613ed7604051806040016040528060008152602001600081525090565b905290565b600060608284031215613eee57600080fd5b50919050565b80356001600160a01b03811681146138ba57600080fd5b60008083601f840112613f1d57600080fd5b5081356001600160401b03811115613f3457600080fd5b6020830191508360208285010111156114be57600080fd5b600080600080600080600060e0888a031215613f6757600080fd5b613f718989613edc565b9650613f7f60608901613ef4565b95506080880135945060a08801356001600160401b0380821115613fa257600080fd5b613fae8b838c01613f0b565b909650945060c08a0135915080821115613fc757600080fd5b50613fd48a828b01613f0b565b989b979a50959850939692959293505050565b803563ffffffff811681146138ba57600080fd5b6000806000806080858703121561401157600080fd5b61401a85613ef4565b935061402860208601613fe7565b925061403660408601613ef4565b9396929550929360600135925050565b6000806040838503121561405957600080fd5b82356001600160401b0381111561406f57600080fd5b830160a0818603121561408157600080fd5b915061408f60208401613ef4565b90509250929050565b6000608082019050825182526001600160401b03602084015116602083015260408301516140d3604084018280518252602090810151910152565b5092915050565b600080600080600060c086880312156140f257600080fd5b6140fb86613ef4565b945061410a8760208801613edc565b93506080860135925060a08601356001600160401b0381111561412c57600080fd5b61413888828901613f0b565b969995985093965092949392505050565b6000806000806080858703121561415f57600080fd5b61416885613ef4565b935061417660208601613ef4565b925061418460408601613fe7565b915061419260608601613fe7565b905092959194509250565b60005b838110156141b85781810151838201526020016141a0565b50506000910152565b600081518084526141d981602086016020860161419d565b601f01601f19169290920160200192915050565b602081526000611d3f60208301846141c1565b80356001600160401b03811681146138ba57600080fd5b600080600080600060a0868803121561422f57600080fd5b61423886613ef4565b945061424660208701613fe7565b93506040860135925061425b60608701614200565b949793965091946080013592915050565b803561ffff811681146138ba57600080fd5b6000806000806080858703121561429457600080fd5b61429d85613ef4565b93506142ab60208601613ef4565b9250604085013591506141926060860161426c565b600080604083850312156142d357600080fd5b6142dc83613ef4565b915061408f60208401613fe7565b6000602082840312156142fc57600080fd5b611d3f82613ef4565b60008060006060848603121561431a57600080fd5b61432384613ef4565b925061433160208501613fe7565b9150604084013590509250925092565b60006020828403121561435357600080fd5b611d3f82613fe7565b6000806000806000806000806000806000806101208d8f03121561437f57600080fd5b6143888d613ef4565b9b5061439660208e01613ef4565b9a5060408d013599506143ab60608e0161426c565b985060808d0135975060a08d013596506001600160401b0360c08e013511156143d357600080fd5b6143e38e60c08f01358f01613f0b565b90965094506001600160401b0360e08e0135111561440057600080fd5b6144108e60e08f01358f01613f0b565b90945092506001600160401b036101008e0135111561442e57600080fd5b61443f8e6101008f01358f01613f0b565b81935080925050509295989b509295989b509295989b565b60008060008060008060008060008060006101408c8e03121561447957600080fd5b6144838d8d613edc565b9a5061449160608d01613ef4565b995060808c0135985060a08c0135975060c08c013596506001600160401b038060e08e013511156144c157600080fd5b6144d18e60e08f01358f01613f0b565b90975095506101008d01358110156144e857600080fd5b6144f98e6101008f01358f01613f0b565b90955093506101208d013581101561451057600080fd5b506145228d6101208e01358e01613f0b565b81935080925050509295989b509295989b9093969950565b6000806000806060858703121561455057600080fd5b61455985613ef4565b935061456760208601613ef4565b925060408501356001600160401b038082111561458357600080fd5b818701915087601f83011261459757600080fd5b8135818111156145a657600080fd5b8860208260051b85010111156145bb57600080fd5b95989497505060200194505050565b6000806000806000608086880312156145e257600080fd5b6145eb86613ef4565b9450602086013593506146006040870161426c565b925060608601356001600160401b0381111561412c57600080fd5b6000806080838503121561462e57600080fd5b6146388484613edc565b915061408f60608401613ef4565b6020808252825182820181905260009190848201906040850190845b818110156146875783516001600160a01b031683529284019291840191600101614662565b50909695505050505050565b60008060008060008060008060c0898b0312156146af57600080fd5b6146b889613ef4565b97506146c660208a01613ef4565b9650604089013595506146db60608a0161426c565b945060808901356001600160401b03808211156146f757600080fd5b6147038c838d01613f0b565b909650945060a08b013591508082111561471c57600080fd5b506147298b828c01613f0b565b999c989b5096995094979396929594505050565b60008060006060848603121561475257600080fd5b61475b84613ef4565b925061476960208501613fe7565b915061477760408501613ef4565b90509250925092565b60008060006060848603121561479557600080fd5b61479e84613fe7565b925061433160208501613ef4565b6000806000606084860312156147c157600080fd5b61479e84613ef4565b600080600060a084860312156147df57600080fd5b6147e98585613edc565b92506147f760608501613ef4565b9150608084013590509250925092565b6000806040838503121561481a57600080fd5b61408183613fe7565b6000806000806080858703121561483957600080fd5b61484285613ef4565b935061485060208601613fe7565b92506040850135915061419260608601614200565b815181526020808301519082015260408101611675565b60006020828403121561488e57600080fd5b611d3f82614200565b838152818360208301376000910160200190815292915050565b63ffffffff6148bf82613fe7565b168252602081013560208301526001600160401b036148e060408301614200565b1660408301525050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b61491d81896148b1565b86606082015260e06080820152600061493a60e0830187896148ea565b6001600160a01b03861660a084015282810360c084015261495c8185876148ea565b9a9950505050505050505050565b6080810161497882856148b1565b6001600160a01b039290921660609190910152919050565b634e487b7160e01b600052602160045260246000fd5b6000602082840312156149b857600080fd5b815160038110611d3f57600080fd5b8015158114612ad457600080fd5b6000602082840312156149e757600080fd5b8151611d3f816149c7565b6001600160a01b03948516815263ffffffff93909316602084015292166040820152606081019190915260800190565b600060208284031215614a3457600080fd5b8135611d3f816149c7565b634e487b7160e01b600052604160045260246000fd5b600082601f830112614a6657600080fd5b81516001600160401b0380821115614a8057614a80614a3f565b604051601f8301601f19908116603f01168101908282118183101715614aa857614aa8614a3f565b81604052838152866020858801011115614ac157600080fd5b6112ce84602083016020890161419d565b600060208284031215614ae457600080fd5b81516001600160401b03811115614afa57600080fd5b6122ce84828501614a55565b63ffffffff95909516855260208501939093526001600160a01b039190911660408401526001600160401b03166060830152608082015260a00190565b8a815261ffff8a16602082015288604082015287606082015260e060808201526000614b7360e08301888a6148ea565b82810360a0840152614b868187896148ea565b905082810360c0840152614b9b8185876148ea565b9d9c50505050505050505050505050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561167557611675614bac565b6000610120614be4838e6148b1565b8b60608401528a60808401528960a08401528060c0840152614c09818401898b6148ea565b905082810360e0840152614c1e8187896148ea565b9050828103610100840152614b9b8185876148ea565b6001600160a01b03841681526040602080830182905282820184905260009190606090818501600587901b8601830188865b89811015614d1757888303605f190184528135368c9003605e19018112614c8c57600080fd5b8b0163ffffffff80614c9d83613fe7565b16855280614cac888401613fe7565b16878601525087810135601e19823603018112614cc857600080fd5b0185810190356001600160401b03811115614ce257600080fd5b803603821315614cf157600080fd5b8789860152614d0388860182846148ea565b958701959450505090840190600101614c66565b50909a9950505050505050505050565b8183823760009101908152919050565b6001600160a01b038781168252861660208201526040810185905261ffff8416606082015260a060808201819052600090614d7590830184866148ea565b98975050505050505050565b600060018060a01b03808a16835288602084015260a06040840152614daa60a08401888a6148ea565b81871660608501528381036080850152614dc58186886148ea565b9b9a5050505050505050505050565b63ffffffff9390931683526001600160a01b03919091166020830152604082015260600190565b60a08101614e0982866148b1565b6001600160a01b0393909316606082015260800152919050565b6001600160401b038181168382160190808211156140d3576140d3614bac565b6000808335601e19843603018112614e5a57600080fd5b8301803591506001600160401b03821115614e7457600080fd5b6020019150368190038213156114be57600080fd5b606080825285516001600160401b031682820152602086015163ffffffff16608083015260408601516001600160a01b031660a0830152850151600090614ed860c084018263ffffffff169052565b50608086015160e083015260a086015161010083015260c086015160e0610120840152614f096101408401826141c1565b90508281036020840152614f1e8186886148ea565b9150506127d0604083018415159052565b600060408284031215614f4157600080fd5b604051604081018181106001600160401b0382111715614f6357614f63614a3f565b604052825181526020928301519281019290925250919050565b600060408284031215614f8f57600080fd5b611d3f8383614f2f565b60008060608385031215614fac57600080fd5b614fb68484614f2f565b915060408301516001600160401b03811115614fd157600080fd5b614fdd85828601614a55565b9150509250929050565b606081526000614ffa60608301876141c1565b828103602084015261500d8186886148ea565b91505060018060a01b038316604083015295945050505050565b60006020828403121561503957600080fd5b5051919050565b6060810161167582846148b156fea264697066735822122090f702bc055b3c8606fe084619d87bdcfb9298de28d91daac921e84b5c1160f264736f6c63430008160033608060405234801561001057600080fd5b506101c3806100206000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806301ffc9a7146100655780631881d94d1461008d57806354fd4d501461009c5780636750cd4c146100c3575b604051632657b6c360e01b815260040160405180910390fd5b61007861007336600461010e565b6100d7565b60405190151581526020015b60405180910390f35b6002604051610084919061013f565b6040805167ffffffffffffffff815260ff6020820152600291810191909152606001610084565b6100786100d1366004610167565b50600190565b60006001600160e01b031982166325fc096160e21b148061010857506301ffc9a760e01b6001600160e01b03198316145b92915050565b60006020828403121561012057600080fd5b81356001600160e01b03198116811461013857600080fd5b9392505050565b602081016003831061016157634e487b7160e01b600052602160045260246000fd5b91905290565b60006020828403121561017957600080fd5b813563ffffffff8116811461013857600080fdfea2646970667358221220b5a5c043a377444c26f6a8e7dd680ec55e20f7abeec109769ef20ff322bd379164736f6c63430008160033608060405234801561001057600080fd5b506040516114d63803806114d683398101604081905261002f9161010a565b338061005557604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b61005e816100ba565b506001600160a01b03166000908152600260205260409020805460ff1916600190811790915580546001600160801b03191668056bc75e2d6310000017905560058054602f60801b6001600160801b039190911617905561013a565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561011c57600080fd5b81516001600160a01b038116811461013357600080fd5b9392505050565b61138d806101496000396000f3fe6080604052600436106101405760003560e01c80638ca2fb08116100b6578063d350ad251161006f578063d350ad2514610441578063da26663a14610461578063dbbb415514610522578063e0ad121a14610542578063f2fde38b146105cb578063fd9be522146105eb57600080fd5b80638ca2fb08146103595780638da5cb5b1461039957806392807f58146103b7578063c1723a1d146103e9578063c1840327146103fc578063cd68b79b1461041a57600080fd5b80635d6d7ccb116101085780635d6d7ccb146102405780635e280f1114610260578063715018a6146102985780637bc3c9ab146102ad5780637dc438a4146102ea57806388a4124c1461030a57600080fd5b806311f2c343146101455780632f7cb0b41461017c5780633161b7f61461019e57806336a5beba146101be57806352a7251014610220575b600080fd5b34801561015157600080fd5b5061016961016036600461100d565b60009392505050565b6040519081526020015b60405180910390f35b34801561018857600080fd5b5061019c610197366004611057565b61060b565b005b3480156101aa57600080fd5b5061019c6101b9366004611079565b610632565b3480156101ca57600080fd5b506040805180820182526000808252602091820152815180830183526004546001600160401b03811680835263ffffffff600160401b909204821692840192835284519081529151169181019190915201610173565b34801561022c57600080fd5b5061019c61023b366004611104565b610773565b34801561024c57600080fd5b5061019c61025b366004611057565b6107a6565b34801561026c57600080fd5b50600654610280906001600160a01b031681565b6040516001600160a01b039091168152602001610173565b3480156102a457600080fd5b5061019c610819565b3480156102b957600080fd5b506102cd6102c8366004611152565b61082d565b604080519283526001600160801b03909116602083015201610173565b3480156102f657600080fd5b5061019c610305366004611170565b6108c8565b34801561031657600080fd5b5061032a61032536600461100d565b610989565b604080519485526001600160801b03938416602086015291831691840191909152166060820152608001610173565b34801561036557600080fd5b50610389610374366004611188565b60026020526000908152604090205460ff1681565b6040519015158152602001610173565b3480156103a557600080fd5b506000546001600160a01b0316610280565b3480156103c357600080fd5b506005546001600160801b03165b6040516001600160801b039091168152602001610173565b61032a6103f736600461100d565b6109ab565b34801561040857600080fd5b506001546001600160801b03166103d1565b34801561042657600080fd5b506005546103d190600160801b90046001600160801b031681565b34801561044d57600080fd5b5061019c61045c366004611057565b6109dc565b34801561046d57600080fd5b506104e861047c3660046111a3565b60408051606080820183526000808352602080840182905292840181905263ffffffff94851681526003835283902083519182018452546001600160801b0381168252600160801b81046001600160401b031692820192909252600160c01b9091049092169082015290565b6040805182516001600160801b031681526020808401516001600160401b0316908201529181015163ffffffff1690820152606001610173565b34801561052e57600080fd5b5061019c61053d366004611188565b610a06565b34801561054e57600080fd5b506104e861055d3660046111be565b60408051606080820183526000808352602080840182905292840181905261ffff949094168452600382529282902082519384018352546001600160801b03811684526001600160401b03600160801b82041691840191909152600160c01b900463ffffffff169082015290565b3480156105d757600080fd5b5061019c6105e6366004611188565b610a30565b3480156105f757600080fd5b5061019c6106063660046111d9565b610a6e565b610613610a84565b600580546001600160801b03928316600160801b029216919091179055565b336106456000546001600160a01b031690565b6001600160a01b031614610683573360009081526002602052604090205460ff166106835760405163320ae52960e01b815260040160405180910390fd5b60005b8181101561076e57368383838181106106a1576106a1611203565b60800291909101915061076590506106bc60208301836111a3565b6106ce36849003840160208501611230565b805160208083015160409384015184516060810186526001600160801b0394851681526001600160401b0392831681850190815263ffffffff9283168288019081529783166000908152600390955295909320925183549551965194166001600160c01b031990951694909417600160801b95909116949094029390931763ffffffff60c01b1916600160c01b9190921602179055565b50600101610686565b505050565b61077b610a84565b6001600160a01b03919091166000908152600260205260409020805460ff1916911515919091179055565b336107b96000546001600160a01b031690565b6001600160a01b0316146107f7573360009081526002602052604090205460ff166107f75760405163320ae52960e01b815260040160405180910390fd5b600580546001600160801b0319166001600160801b0392909216919091179055565b610821610a84565b61082b6000610ab1565b565b6000808461ffff16606e148061084857508461ffff1661279f145b8061085857508461ffff16614eaf145b156108755761086c8561ffff168585610b01565b915091506108c0565b8461ffff16606f148061088d57508461ffff16612794145b8061089d57508461ffff16614ea4145b156108b15761086c8561ffff168585610c0e565b61086c8561ffff168585610d5e565b935093915050565b336108db6000546001600160a01b031690565b6001600160a01b031614610919573360009081526002602052604090205460ff166109195760405163320ae52960e01b815260040160405180910390fd5b6109296106bc60208301836111a3565b600061093b60a08301608084016112a9565b9050600061094f60c0840160a085016111a3565b6004805463ffffffff909216600160401b026bffffffffffffffffffffffff199092166001600160401b0390941693909317179091555050565b60008060008061099a878787610dfe565b935093509350935093509350935093565b6000808080806109bf565b60405180910390fd5b6109ca888888610dfe565b94509450945094505093509350935093565b6109e4610a84565b600180546001600160801b0319166001600160801b0392909216919091179055565b610a0e610a84565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b610a38610a84565b6001600160a01b038116610a6257604051631e4fbdf760e01b8152600060048201526024016109b6565b610a6b81610ab1565b50565b610a76610a84565b610a808282610ecc565b5050565b6000546001600160a01b0316331461082b5760405163118cdaa760e01b81523360048201526024016109b6565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b63ffffffff8381166000908152600360205260408120600454600554929384938492600160401b900490911690606490610b4b90600160801b90046001600160801b0316896112da565b610b55919061130d565b610b5f91906112da565b8254909150600090610b7e90600160c01b900463ffffffff16886112da565b83546004549192506000916001600160401b03600160801b90920482169184918691610bab91168b611321565b610bb59190611321565b610bbf9190611321565b610bc991906112da565b60015485549192506001600160801b0390811691610be89116836112da565b610bf2919061130d565b935493996001600160801b039094169850929650505050505050565b6000806000610c1c86610f79565b63ffffffff80821660009081526003602052604081208054939450929091610c4c91600160c01b900416886112da565b610c5890610c74611321565b8254909150600090610c7a90600160801b90046001600160401b0316836112da565b63ffffffff808b1660009081526003602052604081208054939450929091610caa91600160c01b9004168b6112da565b8254909150600090600160801b90046001600160401b0316610ccc8b84611321565b610cd691906112da565b60015487549192506000916001600160801b0391821691610cf89116876112da565b610d02919061130d565b60015485549192506000916001600160801b0391821691610d249116856112da565b610d2e919061130d565b90506000610d3c8284611321565b9554959f6001600160801b039096169e50949c50505050505050505050505050565b63ffffffff80841660009081526003602052604081208054919283928391610d8e91600160c01b900416876112da565b8254909150600090600160801b90046001600160401b0316610db08784611321565b610dba91906112da565b60015484549192506001600160801b0390811691610dd99116836112da565b610de3919061130d565b925492986001600160801b0390931697509195505050505050565b600080808080610e1061753089611334565b90508063ffffffff16606e1480610e2e57508063ffffffff1661279f145b80610e4057508063ffffffff16614eaf145b15610e5a57610e50818888610b01565b9095509350610ea9565b8063ffffffff16606f1480610e7657508063ffffffff16612794145b80610e8857508063ffffffff16614ea4145b15610e9857610e50818888610c0e565b610ea3818888610d5e565b90955093505b505060015460055493979296506001600160801b03908116955090921692509050565b6001600160a01b038216610ef3576040516306b7a93160e41b815260040160405180910390fd5b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114610f40576040519150601f19603f3d011682016040523d82523d6000602084013e610f45565b606091505b505090508061076e57604051631196f20d60e21b81526001600160a01b0384166004820152602481018390526044016109b6565b600080610f8861753084611334565b90508063ffffffff16606f03610fa15750606592915050565b8063ffffffff1661279403610fba575061278992915050565b8063ffffffff16614ea403610fd35750614e9992915050565b604051633d0b0cf760e21b815263ffffffff821660048201526024016109b6565b803563ffffffff8116811461100857600080fd5b919050565b60008060006060848603121561102257600080fd5b61102b84610ff4565b95602085013595506040909401359392505050565b80356001600160801b038116811461100857600080fd5b60006020828403121561106957600080fd5b61107282611040565b9392505050565b6000806020838503121561108c57600080fd5b82356001600160401b03808211156110a357600080fd5b818501915085601f8301126110b757600080fd5b8135818111156110c657600080fd5b8660208260071b85010111156110db57600080fd5b60209290920196919550909350505050565b80356001600160a01b038116811461100857600080fd5b6000806040838503121561111757600080fd5b611120836110ed565b91506020830135801515811461113557600080fd5b809150509250929050565b803561ffff8116811461100857600080fd5b60008060006060848603121561116757600080fd5b61102b84611140565b600060c0828403121561118257600080fd5b50919050565b60006020828403121561119a57600080fd5b611072826110ed565b6000602082840312156111b557600080fd5b61107282610ff4565b6000602082840312156111d057600080fd5b61107282611140565b600080604083850312156111ec57600080fd5b6111f5836110ed565b946020939093013593505050565b634e487b7160e01b600052603260045260246000fd5b80356001600160401b038116811461100857600080fd5b60006060828403121561124257600080fd5b604051606081018181106001600160401b038211171561127257634e487b7160e01b600052604160045260246000fd5b60405261127e83611040565b815261128c60208401611219565b602082015261129d60408401610ff4565b60408201529392505050565b6000602082840312156112bb57600080fd5b61107282611219565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176112f1576112f16112c4565b92915050565b634e487b7160e01b600052601260045260246000fd5b60008261131c5761131c6112f7565b500490565b808201808211156112f1576112f16112c4565b600063ffffffff8084168061134b5761134b6112f7565b9216919091069291505056fea2646970667358221220ff064bafdc05a2d85d9d93ddac0510aa9c8f276c4f57eefac742b7fc656acac564736f6c6343000816003360e06040523480156200001157600080fd5b50604051620049703803806200497083398101604081905262000034916200018b565b82828282836001600160a01b031663416ecebf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000077573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200009d9190620001d8565b6001600160a01b03821660805263ffffffff811660a05283833380620000dd57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b620000e88162000122565b5060c0919091526002555050600680546001600160a01b0319166001600160a01b0398909816979097179096555062000207945050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146200018857600080fd5b50565b60008060008060808587031215620001a257600080fd5b8451620001af8162000172565b6020860151909450620001c28162000172565b6040860151606090960151949790965092505050565b600060208284031215620001eb57600080fd5b815163ffffffff811681146200020057600080fd5b9392505050565b60805160a05160c0516147206200025060003960008181611d100152611e730152600050506000818161069a0152818161079f015281816112b101526117d901526147206000f3fe60806040526004361061014f5760003560e01c806361d027b3116100b6578063d15b0d491161006f578063d15b0d4914610450578063d80e9bd914610470578063f0f442601461049d578063f2fde38b146104bd578063faaebd21146104dd578063fd9be5221461051857600080fd5b806361d027b3146103905780636750cd4c146103b0578063715018a6146103d05780638da5cb5b146103e55780639c33abf714610403578063c14c43491461043057600080fd5b806329460b0b1161010857806329460b0b1461025357806339e3f938146102735780634389e58f146102a057806343ea4fa9146102ce5780634d963200146102ee57806354fd4d501461036357600080fd5b806301ffc9a71461015b5780630e97289b14610190578063188183f4146101c85780631881d94d146101f5578063200175f71461021157806320efd7221461023357600080fd5b3661015657005b600080fd5b34801561016757600080fd5b5061017b6101763660046135db565b610538565b60405190151581526020015b60405180910390f35b34801561019c57600080fd5b506006546101b0906001600160a01b031681565b6040516001600160a01b039091168152602001610187565b3480156101d457600080fd5b506101e86101e3366004613647565b61058a565b6040516101879190613680565b34801561020157600080fd5b50600060405161018791906136a6565b34801561021d57600080fd5b5061023161022c3660046136ce565b610663565b005b34801561023f57600080fd5b5061023161024e366004613753565b61079d565b34801561025f57600080fd5b5061023161026e3660046137a7565b610912565b34801561027f57600080fd5b5061029361028e366004613647565b610aaa565b604051610187919061389e565b3480156102ac57600080fd5b506102c06102bb3660046138c1565b610be5565b6040516101879291906139c0565b3480156102da57600080fd5b506102936102e9366004613647565b610c7a565b3480156102fa57600080fd5b5061033f610309366004613647565b600460209081526000928352604080842090915290825290205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b03909116602083015201610187565b34801561036f57600080fd5b50604080516003815260006020820152600291810191909152606001610187565b34801561039c57600080fd5b506003546101b0906001600160a01b031681565b3480156103bc57600080fd5b5061017b6103cb3660046139e4565b610f86565b3480156103dc57600080fd5b50610231610f91565b3480156103f157600080fd5b506000546001600160a01b03166101b0565b34801561040f57600080fd5b5061042361041e366004613a01565b610fa5565b6040516101879190613a4c565b34801561043c57600080fd5b5061023161044b366004613a5f565b611037565b34801561045c57600080fd5b5061023161046b366004613ad3565b611170565b34801561047c57600080fd5b5061049061048b3660046138c1565b6111e5565b6040516101879190613aec565b3480156104a957600080fd5b506102316104b8366004613b03565b611255565b3480156104c957600080fd5b506102316104d8366004613b03565b611269565b3480156104e957600080fd5b5061050a6104f8366004613b03565b60056020526000908152604090205481565b604051908152602001610187565b34801561052457600080fd5b50610231610533366004613b20565b6112a4565b60006001600160e01b031982166325fc096160e21b148061056957506001600160e01b0319821663b6e9ace360e01b145b8061058457506301ffc9a760e01b6001600160e01b03198316145b92915050565b604080518082019091526000808252602082015263ffffffff80831660008181527f17ef568e3e12ab5b9c7254a8d58478811de00f9e6eb34345acd53bf8fd09d3ec602090815260408083206001600160a01b038916845260048352818420948452939091528120805492939092169081900361060e57825463ffffffff16610610565b805b63ffffffff168452815464010000000090046001600160a01b03168061064857835464010000000090046001600160a01b031661064a565b805b6001600160a01b03166020860152509295945050505050565b6003546001600160a01b0316331461068e5760405163885762a760e01b815260040160405180910390fd5b826001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e1758bd86040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061071a9190613b4c565b6001600160a01b031603610741576040516339a5741160e21b815260040160405180910390fd5b61074c838383611384565b604080516001600160a01b038086168252841660208201529081018290527fe081464b7278501267de69fa85b7b9560b0ae05d5fbfaab9b1986c70356e2efe906060015b60405180910390a1505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633146107e65760405163467409c360e01b815260040160405180910390fd5b60005b8181101561090c573683838381811061080457610804613b69565b90506020028101906108169190613b7f565b905061082d61082860208301836139e4565b6113c4565b600161083f60408301602084016139e4565b63ffffffff160361087f5761087a61085a60208301836139e4565b866108686040850185613b9f565b8101906108759190613c75565b6113f2565b610903565b600261089160408301602084016139e4565b63ffffffff16036108cc5761087a6108ac60208301836139e4565b866108ba6040850185613b9f565b8101906108c79190613e35565b61147a565b6108dc60408201602083016139e4565b604051635d4be0fd60e11b815263ffffffff90911660048201526024015b60405180910390fd5b506001016107e9565b50505050565b61091a6114c3565b60005b81811015610a6c573683838381811061093857610938613b69565b905060200281019061094a9190613e69565b905060ff61095b6020830183613e7f565b61096c906040810190602001613e95565b60ff160361098d576040516341d50bed60e11b815260040160405180910390fd5b60ff61099c6020830183613e7f565b6109ad906060810190604001613e95565b60ff16036109ce5760405163211089b360e11b815260040160405180910390fd5b6001600160401b036109e36020830183613e7f565b6109f1906020810190613eb0565b6001600160401b031603610a185760405163281b33d760e11b815260040160405180910390fd5b610a36610a286020830183613e7f565b610a3190613ecb565b6114f0565b610a636000610a4860208401846139e4565b610a556020850185613e7f565b610a5e90613ecb565b611528565b5060010161091d565b507faaf3aaa0c11056e86ac56eb653e25b005ca1a7d4dcd21ba24647f7ab63f3b5608282604051610a9e929190613f5d565b60405180910390a15050565b610ab2613522565b6001600160a01b038316600090815260016020818152604080842063ffffffff87168552825292839020835160c08101855281546001600160401b038116825260ff600160401b8204811683860152600160481b8204811683880152600160501b9091041660608201529281018054855181850281018501909652808652939491936080860193830182828015610b7257602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610b54575b5050505050815260200160028201805480602002602001604051908101604052809291908181526020018280548015610bd457602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610bb6575b505050505081525050905092915050565b60408051808201909152600080825260208201526060610c07868686866117c1565b600654604051631f5dad8b60e31b81529294509092506001600160a01b03169063faed6c5890610c3f908490899089906004016140a2565b600060405180830381600087803b158015610c5957600080fd5b505af1158015610c6d573d6000803e3d6000fd5b5050505094509492505050565b610c82613522565b63ffffffff821660008181527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49602090815260408083206001600160a01b03881684526001835281842094845293909152902080546001600160401b031680610cf75782546001600160401b03168452610d14565b6001600160401b0381811614610d14576001600160401b03811684525b8154600160401b900460ff16610dae578254600160401b900460ff1615610da95782600101805480602002602001604051908101604052809291908181526020018280548015610d8d57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610d6f575b505050505060808501528254600160401b900460ff1660208501525b610e35565b8154600160401b900460ff90811614610e355781600101805480602002602001604051908101604052809291908181526020018280548015610e1957602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610dfb575b505050505060808501528154600160401b900460ff1660208501525b8154600160481b900460ff16610ede578254600160481b900460ff1615610ed95782600201805480602002602001604051908101604052809291908181526020018280548015610eae57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610e90575b505050505060a0850152825460ff600160481b820481166040870152600160501b9091041660608501525b610f74565b8154600160481b900460ff90811614610f745781600201805480602002602001604051908101604052809291908181526020018280548015610f4957602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610f2b575b505050505060a0850152815460ff600160481b820481166040870152600160501b9091041660608501525b610f7d846114f0565b50505092915050565b600061058482611895565b610f996114c3565b610fa360006118f0565b565b606060001963ffffffff831601610fe657610fc0838561058a565b604051602001610fd09190613680565b6040516020818303038152906040529050611030565b60011963ffffffff83160161100f57610fff8385610c7a565b604051602001610fd0919061389e565b604051635d4be0fd60e11b815263ffffffff831660048201526024016108fa565b9392505050565b61103f6114c3565b60005b8181101561113e573683838381811061105d5761105d613b69565b606090810292909201925060009161107b9150830160408401613b03565b6001600160a01b0316036110a257604051631074e82d60e11b815260040160405180910390fd5b6110b260408201602083016139e4565b63ffffffff166000036110d8576040516349cfac4360e01b815260040160405180910390fd5b6000808052600460209081528201907f17ef568e3e12ab5b9c7254a8d58478811de00f9e6eb34345acd53bf8fd09d3ec9061111383856139e4565b63ffffffff168152602081019190915260400160002061113382826140e8565b505050600101611042565b507f2b001e1c6683bf79cc52891bd7215b204c787d18134fc7f3d21b4f32a49e47de8282604051610a9e929190614141565b6111786114c3565b6002548111156111a95760025460405163068109f760e31b81526108fa918391600401918252602082015260400190565b60028190556040518181527f491ff913b5444f4136b0d4075f020cfe3a5f60de926ec0b091612401a22b7842906020015b60405180910390a150565b604080518082019091526000808252602082015260008061123661120f6060890160408a01613b03565b61121f60808a0160608b016139e4565b61122c60c08b018b613b9f565b9050878a8a611940565b604080518082019091529182526020820152925050505b949350505050565b61125d6114c3565b61126681611a39565b50565b6112716114c3565b6001600160a01b03811661129b57604051631e4fbdf760e01b8152600060048201526024016108fa565b611266816118f0565b6112ad81611a87565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e1758bd86040518163ffffffff1660e01b8152600401602060405180830381865afa15801561130d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113319190613b4c565b905061133e818484611ad8565b604080513381526001600160a01b03851660208201529081018390527f820b7fd51bf79c54350bab98400651b3314ff6e79b33528821871d94a666988390606001610790565b6001600160a01b0382166113ab576040516306b7a93160e41b815260040160405180910390fd5b6113bf6001600160a01b0384168383611afb565b505050565b6113cd81611895565b61126657604051633c30434160e21b815263ffffffff821660048201526024016108fa565b6001600160a01b03808316600090815260046020908152604080832063ffffffff8089168552908352928190208551815493870151909516640100000000026001600160c01b03199093169490931693909317179055517f779cb2dd9d2bb1be1737d05435d744facbfb84a2a4912e21379d39beddcdc80590610790908490869085906141c1565b611485828483611528565b61148f8284610c7a565b507f82118522aa536ac0e96cc5c689407ae42b89d592aa133890a01f1509842f508182848360405161079093929190614203565b6000546001600160a01b03163314610fa35760405163118cdaa760e01b81523360048201526024016108fa565b602081015160ff1615801561150a5750606081015160ff16155b156112665760405163ce2c375160e01b815260040160405180910390fd5b602081015160ff90811614806115435750602081015160ff16155b15611571576080810151511561156c576040516341d50bed60e11b815260040160405180910390fd5b6115d7565b806020015160ff168160800151511415806115ac57506002611595600160ff614249565b61159f9190614262565b60ff16816020015160ff16115b156115ca576040516341d50bed60e11b815260040160405180910390fd5b6115d78160800151611b4d565b604081015160ff90811614806115f25750604081015160ff16155b156116465760a0810151511561161b5760405163211089b360e11b815260040160405180910390fd5b606081015160ff1615611641576040516338682fa960e01b815260040160405180910390fd5b6116eb565b806040015160ff168160a00151511415806116815750600261166a600160ff614249565b6116749190614262565b60ff16816040015160ff16115b1561169f5760405163211089b360e11b815260040160405180910390fd5b606081015160ff1615806116c05750806040015160ff16816060015160ff16115b156116de576040516338682fa960e01b815260040160405180910390fd5b6116eb8160a00151611b4d565b6001600160a01b038316600090815260016020818152604080842063ffffffff8716855282529283902084518154868401519587015160608801516001600160401b0390931668ffffffffffffffffff1990921691909117600160401b60ff97881602176affff0000000000000000001916600160481b9187169190910260ff60501b191617600160501b95909116949094029390931783556080840151805185949361179d9390850192019061356a565b5060a082015180516117b991600284019160209091019061356a565b505050505050565b604080518082019091526000808252602082015260607f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633146118205760405163467409c360e01b815260040160405180910390fd5b60008061182e888888611bb4565b909250905060008061186061184960608c0160408d01613b03565b61185960808d0160608e016139e4565b858a611c81565b909250905061186f8284614292565b604080518082019091529081526020810191909152945091925050505b94509492505050565b63ffffffff811660009081527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49602052604081208054600160401b900460ff16151580611030575054600160501b900460ff16151592915050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000806000806119508686611d8f565b9150915060006119618b8b84611da8565b9050600061196f8c8c61058a565b90506119858a826000015163ffffffff16611db5565b80602001516001600160a01b031663709eb6648c8e8d886040518563ffffffff1660e01b81526004016119bb94939291906142a5565b602060405180830381865afa1580156119d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119fc91906142e2565b611a069083614292565b9150600080611a178e8e868e611de4565b9092509050611a268285614292565b9e909d509b505050505050505050505050565b600380546001600160a01b0319166001600160a01b0383169081179091556040519081527f3c864541ef71378c6229510ed90f376565ee42d9c5e0904a984a9e863e6db44f906020016111da565b3360009081526005602052604090205480821115611ac25760405163068109f760e31b815260048101839052602481018290526044016108fa565b3360009081526005602052604090209190039055565b6001600160a01b038316611af0576113bf8282611eb5565b6113bf838383611384565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526113bf908490611f62565b6000805b82518110156113bf576000838281518110611b6e57611b6e613b69565b60200260200101519050826001600160a01b0316816001600160a01b031611611baa5760405163447516e160e01b815260040160405180910390fd5b9150600101611b51565b60606000806000611bc58686611d8f565b90925090506000611bef611bdf60608a0160408b01613b03565b6101e360808b0160608c016139e4565b90506000611c0060c08a018a613b9f565b90509050611c1881836000015163ffffffff16611db5565b6020820151611c4890611c3160808c0160608d016139e4565b611c4160608d0160408e01613b03565b8488611fd3565b611c529086614292565b9450600080611c618b866120cc565b9092509050611c708288614292565b909b909a5098505050505050505050565b60035460009081906001600160a01b03161561188c576040516001600160a01b038716602482015263ffffffff8616604482015260648101859052831515608482015260009060a40160408051601f19818403018152919052602080820180516001600160e01b0316636a8e2a4360e11b1790526003549192506000918291611d38916001600160a01b0316907f0000000000000000000000000000000000000000000000000000000000000000908490876120ef565b91509150611d488787848461219f565b90955093508415611d83576003546001600160a01b031660009081526005602052604081208054879290611d7d908490614292565b90915550505b50505094509492505050565b606080611d9c848461221a565b915091505b9250929050565b600061124d848484612307565b80821115611de057604051636333d79f60e11b815260048101839052602481018290526044016108fa565b5050565b60035460009081906001600160a01b03161561188c576040516001600160a01b038716602482015263ffffffff8616604482015260648101859052831515608482015260009060a40160408051601f19818403018152919052602080820180516001600160e01b031663d424422160e01b1790526003549192506000918291611e99916001600160a01b0316907f00000000000000000000000000000000000000000000000000000000000000009086612381565b91509150611ea98787848461219f565b9450945050505061188c565b6001600160a01b038216611edc576040516306b7a93160e41b815260040160405180910390fd5b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611f29576040519150601f19603f3d011682016040523d82523d6000602084013e611f2e565b606091505b50509050806113bf57604051631196f20d60e21b81526001600160a01b0384166004820152602481018390526044016108fa565b600080602060008451602086016000885af180611f85576040513d6000823e3d81fd5b50506000513d91508115611f9d578060011415611faa565b6001600160a01b0384163b155b1561090c57604051635274afe760e01b81526001600160a01b03851660048201526024016108fa565b6040516338bf452160e11b81526000906001600160a01b0387169063717e8a42906120089088908890889088906004016142a5565b6020604051808303816000875af1158015612027573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061204b91906142e2565b90508015612081576001600160a01b0386166000908152600560205260408120805483929061207b908490614292565b90915550505b604080516001600160a01b0388168152602081018390527f61ed099e74a97a1d7f8bb0952a88ca8b7b8ebd00c126ea04671f92a81213318a910160405180910390a195945050505050565b600060606120e460056120de8661436a565b8561242d565b909590945092505050565b60006060863b80830361211657604080516000808252602082019092529250925050612195565b60008060008761ffff166001600160401b0381111561213757612137613be5565b6040519080825280601f01601f191660200182016040528015612161576020820181803683370190505b509050600080885160208a018c8f8ff191503d925087831115612182578792505b828152826000602083013e909450925050505b9550959350505050565b6000808315806121b0575082516020115b156121c05750600090508061188c565b6000838060200190518101906121d691906142e2565b905085156121e657809150612210565b600060025488116121f9576002546121fb565b875b905080821161220a578161220c565b805b9350505b5094509492505050565b60608060008061222a868661257b565b91509150805160000361228257604080516000808252602082019092528391612276565b60408051808201909152600081526060602082015281526020019060019003908161224e5790505b50935093505050611da1565b604080516001808252818301909252600091816020015b6040805180820190915260008152606060208201528152602001906001900390816122995790505090506040518060400160405280600260ff16815260200183815250816000815181106122ef576122ef613b69565b60209081029190910101529196919550909350505050565b6000806123148585610c7a565b905060008351600014612345578360008151811061233457612334613b69565b602002602001015160200151612356565b604051806020016040528060008152505b90506000806123648361273a565b9150915061237584888a85856129a0565b98975050505050505050565b60006060853b8083036123a85760408051600080825260208201909252925092505061188c565b60008060008761ffff166001600160401b038111156123c9576123c9613be5565b6040519080825280601f01601f1916602001820160405280156123f3576020820181803683370190505b509050600080885160208a018d8dfa91503d925087831115612413578792505b828152826000602083013e90999098509650505050505050565b60006060600061243c85612b38565b9050600061244986612bc5565b80516020820120606088015160408901519293509091600061246b8284610c7a565b90506000895160001461249c578960008151811061248b5761248b613b69565b6020026020010151602001516124ad565b604051806020016040528060008152505b905060606124ff8d846040518060a001604052808963ffffffff1681526020018c81526020018a815260200187600001516001600160401b03168152602001886001600160a01b031681525085612be2565b604051919b5091506125179089908990602001614407565b60405160208183030381529060405298507f07ea52d82345d6e838192107d8fd7123d9c2ec8e916cd0aad13fd2b60db2464483608001518460a001518360405161256393929190614436565b60405180910390a15050505050505050935093915050565b60608060028310156125a35760405163196499c760e21b8152600060048201526024016108fa565b60006125b26002828688614494565b6125bb916144be565b60f01c905060026002198201612723578060005b868310156126c85760006125e860018501858a8c614494565b6125f1916144ee565b60f81c9050600081900361261b57604051636780cfaf60e01b8152600060048201526024016108fa565b8160ff1660000361262e5780915061266b565b8160ff168160ff161461266b5736600061264a86868c8e614494565b9150915061265b8989868585612e80565b9099509750859450919250829150505b600184019360009061268290600301868b8d614494565b61268b916144be565b60f01c905060008190036126b55760405163196499c760e21b8152600481018690526024016108fa565b8060020161ffff168501945050506125cf565b8287146126eb5760405163196499c760e21b8152600481018490526024016108fa565b600287111561271c5736600061270385858b8d614494565b915091506127148888858585612e80565b909850965050505b5050612731565b61272e828787612fa0565b93505b50509250929050565b606080825160000361274b57915091565b60006127568461312b565b90508060ff166001036128085760408051600180825281830190925290816020015b606081526020019060019003908161277857905050925083836000815181106127a3576127a3613b69565b6020908102919091010152604080516001808252818301909252908160200160208202803683370190505091506127db846003613205565b826000815181106127ee576127ee613b69565b602002602001019060ff16908160ff168152505050915091565b8060ff166001600160401b0381111561282357612823613be5565b60405190808252806020026020018201604052801561284c578160200160208202803683370190505b5091508060ff166001600160401b0381111561286a5761286a613be5565b60405190808252806020026020018201604052801561289d57816020015b60608152602001906001900390816128885790505b50925060008060ff5b86518310156129335760019092019160006128c18885613261565b60029490940193905060006128d68986613205565b90508260ff1660ff036128eb57809250612924565b8260ff168160ff16146129245760021984860301600061290c8b87846132be565b905061291a8a8a87846133cb565b5093909301929150815b5061ffff1692909201916128a6565b81830360006129438985846132be565b9050612951888885846133cb565b60005b8660ff168160ff16101561299457878160ff168151811061297757612977613b69565b6020908102919091010180516000190160ff169052600101612954565b50505050505050915091565b600080866040015187602001516129b7919061451c565b905060005b8160ff168160ff161015612b2d576000886020015160ff168260ff1610612a115760a089015160208a01516129f19084614249565b60ff1681518110612a0457612a04613b69565b6020026020010151612a33565b88608001518260ff1681518110612a2a57612a2a613b69565b60200260200101515b60408051602081019091526000808252919250905b8651811015612aa0578360ff16878281518110612a6757612a67613b69565b602002602001015160ff1603612a9857878181518110612a8957612a89613b69565b60200260200101519150612aa0565b600101612a48565b508951604051630c2eceab60e21b81526001600160a01b038416916330bb3aac91612ad3918d918d908790600401614535565b602060405180830381865afa158015612af0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b1491906142e2565b612b1e9086614292565b945050508060010190506129bc565b505095945050505050565b805160208083015160408085015160608087015160808801519351600160f81b9681019690965260c09690961b6001600160c01b031916602186015260e093841b6001600160e01b031990811660298701526001600160a01b03909216602d8601529490921b909116604d83015260518201526071015b6040516020818303038152906040529050919050565b60608160a001518260c00151604051602001612baf929190614574565b60006060600080612bf28561273a565b91509150600087604001518860200151612c0c919061451c565b90508060ff166001600160401b03811115612c2957612c29613be5565b604051908082528060200260200182016040528015612c52578160200160208202803683370190505b50935060005b8160ff168160ff161015610c6d576000896020015160ff168260ff1610612cad5760a08a015160208b0151612c8d9084614249565b60ff1681518110612ca057612ca0613b69565b6020026020010151612ccf565b89608001518260ff1681518110612cc657612cc6613b69565b60200260200101515b60408051602081019091526000808252919250905b8551811015612d3c578360ff16868281518110612d0357612d03613b69565b602002602001015160ff1603612d3457868181518110612d2557612d25613b69565b60200260200101519150612d3c565b600101612ce4565b506040516395d376d760e01b81526001600160a01b038316906395d376d790612d6b908d90859060040161459a565b6020604051808303816000875af1158015612d8a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dae91906142e2565b878460ff1681518110612dc357612dc3613b69565b6020026020010181815250506000878460ff1681518110612de657612de6613b69565b60200260200101511115612e7657868360ff1681518110612e0957612e09613b69565b60200260200101518c6000846001600160a01b03166001600160a01b031681526020019081526020016000206000828254612e449190614292565b92505081905550868360ff1681518110612e6057612e60613b69565b602002602001015188612e739190614292565b97505b5050600101612c58565b60608060001960ff861601612efd57865115612ebf57868484604051602001612eab9392919061460c565b604051602081830303815290604052612ef6565b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050505b9650612f95565b60011960ff861601612f7757855115612f3957858484604051602001612f259392919061460c565b604051602081830303815290604052612f70565b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050505b9550612f95565b604051636780cfaf60e01b815260ff861660048201526024016108fa565b509495939450505050565b606060001961ffff8516016130405760228214612fd0576040516301b8ca5560e31b815260040160405180910390fd5b6000612ff1612fe3602260028688614494565b612fec91614634565b6134e1565b604051600160f81b60208201819052601160f01b602183015260238201526001600160801b0319608083901b166024820152909150603401604051602081830303815290604052915050611030565b60011961ffff85160161310c5760428211158061305d5750606282115b1561307b576040516360493e2b60e11b815260040160405180910390fd5b600061308e612fe3602260028688614494565b905060006130a3612fe3604260228789614494565b9050600060411985016130b9866042818a614494565b6130c291614634565b60405160086020938403029190911c92506130f3916001916011918391889183916031916002918b918b9101614652565b6040516020818303038152906040529350505050611030565b604051630417051360e41b815261ffff851660048201526024016108fa565b600080805b83518210156131da57600190910190600061314b8584613261565b905060028301925060028161ffff16101561317c5760405163013adb8360e21b8152600481018490526024016108fa565b60006131888685613205565b90508060ff1660ff036131ae576040516334f4f66f60e21b815260040160405180910390fd5b600160ff82161b83166131cb5760019485019460ff82161b831792505b5061ffff169190910190613130565b835182146131fe5760405163013adb8360e21b8152600481018390526024016108fa565b5050919050565b6000613212826001614292565b835110156132585760405162461bcd60e51b8152602060048201526013602482015272746f55696e74385f6f75744f66426f756e647360681b60448201526064016108fa565b50016001015190565b600061326e826002614292565b835110156132b55760405162461bcd60e51b8152602060048201526014602482015273746f55696e7431365f6f75744f66426f756e647360601b60448201526064016108fa565b50016002015190565b6060816132cc81601f614292565b101561330b5760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b60448201526064016108fa565b6133158284614292565b845110156133595760405162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b60448201526064016108fa565b60608215801561337857604051915060008252602082016040526133c2565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156133b1578051835260209283019201613399565b5050858452601f01601f1916604052505b50949350505050565b8160ff1660ff036133ef576040516334f4f66f60e21b815260040160405180910390fd5b60006133fc83600161451c565b905060005b84518110156117b957600085828151811061341e5761341e613b69565b602002602001015190508060ff168360ff16036134935786828151811061344757613447613b69565b602002602001015184604051602001613461929190614407565b60405160208183030381529060405287838151811061348257613482613b69565b6020026020010181905250506117b9565b8060ff166000036134d857828683815181106134b1576134b1613b69565b602002602001019060ff16908160ff16815250508387838151811061348257613482613b69565b50600101613401565b60006fffffffffffffffffffffffffffffffff82111561351e576040516306dfcc6560e41b815260806004820152602481018390526044016108fa565b5090565b6040518060c0016040528060006001600160401b03168152602001600060ff168152602001600060ff168152602001600060ff16815260200160608152602001606081525090565b8280548282559060005260206000209081019282156135bf579160200282015b828111156135bf57825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019061358a565b5061351e9291505b8082111561351e57600081556001016135c7565b6000602082840312156135ed57600080fd5b81356001600160e01b03198116811461103057600080fd5b6001600160a01b038116811461126657600080fd5b803561362581613605565b919050565b63ffffffff8116811461126657600080fd5b80356136258161362a565b6000806040838503121561365a57600080fd5b823561366581613605565b915060208301356136758161362a565b809150509250929050565b815163ffffffff1681526020808301516001600160a01b03169082015260408101610584565b60208101600383106136c857634e487b7160e01b600052602160045260246000fd5b91905290565b6000806000606084860312156136e357600080fd5b83356136ee81613605565b925060208401356136fe81613605565b929592945050506040919091013590565b60008083601f84011261372157600080fd5b5081356001600160401b0381111561373857600080fd5b6020830191508360208260051b8501011115611da157600080fd5b60008060006040848603121561376857600080fd5b833561377381613605565b925060208401356001600160401b0381111561378e57600080fd5b61379a8682870161370f565b9497909650939450505050565b600080602083850312156137ba57600080fd5b82356001600160401b038111156137d057600080fd5b6137dc8582860161370f565b90969095509350505050565b60008151808452602080850194506020840160005b838110156138225781516001600160a01b0316875295820195908201906001016137fd565b509495945050505050565b6001600160401b03815116825260ff602082015116602083015260ff604082015116604083015260ff60608201511660608301526000608082015160c0608085015261387c60c08501826137e8565b905060a083015184820360a086015261389582826137e8565b95945050505050565b602081526000611030602083018461382d565b8035801515811461362557600080fd5b600080600080606085870312156138d757600080fd5b84356001600160401b03808211156138ee57600080fd5b9086019060e0828903121561390257600080fd5b9094506020860135908082111561391857600080fd5b818701915087601f83011261392c57600080fd5b81358181111561393b57600080fd5b88602082850101111561394d57600080fd5b602083019550809450505050613965604086016138b1565b905092959194509250565b60005b8381101561398b578181015183820152602001613973565b50506000910152565b600081518084526139ac816020860160208601613970565b601f01601f19169290920160200192915050565b825181526020808401519082015260606040820152600061124d6060830184613994565b6000602082840312156139f657600080fd5b81356110308161362a565b600080600060608486031215613a1657600080fd5b8335613a218161362a565b92506020840135613a3181613605565b91506040840135613a418161362a565b809150509250925092565b6020815260006110306020830184613994565b60008060208385031215613a7257600080fd5b82356001600160401b0380821115613a8957600080fd5b818501915085601f830112613a9d57600080fd5b813581811115613aac57600080fd5b866020606083028501011115613ac157600080fd5b60209290920196919550909350505050565b600060208284031215613ae557600080fd5b5035919050565b815181526020808301519082015260408101610584565b600060208284031215613b1557600080fd5b813561103081613605565b60008060408385031215613b3357600080fd5b8235613b3e81613605565b946020939093013593505050565b600060208284031215613b5e57600080fd5b815161103081613605565b634e487b7160e01b600052603260045260246000fd5b60008235605e19833603018112613b9557600080fd5b9190910192915050565b6000808335601e19843603018112613bb657600080fd5b8301803591506001600160401b03821115613bd057600080fd5b602001915036819003821315611da157600080fd5b634e487b7160e01b600052604160045260246000fd5b60405160c081016001600160401b0381118282101715613c1d57613c1d613be5565b60405290565b60405160e081016001600160401b0381118282101715613c1d57613c1d613be5565b604051601f8201601f191681016001600160401b0381118282101715613c6d57613c6d613be5565b604052919050565b600060408284031215613c8757600080fd5b604051604081018181106001600160401b0382111715613ca957613ca9613be5565b6040528235613cb78161362a565b81526020830135613cc781613605565b60208201529392505050565b80356001600160401b038116811461362557600080fd5b803560ff8116811461362557600080fd5b600082601f830112613d0c57600080fd5b813560206001600160401b03821115613d2757613d27613be5565b8160051b613d36828201613c45565b9283528481018201928281019087851115613d5057600080fd5b83870192505b84831015613d78578235613d6981613605565b82529183019190830190613d56565b979650505050505050565b600060c08284031215613d9557600080fd5b613d9d613bfb565b9050613da882613cd3565b8152613db660208301613cea565b6020820152613dc760408301613cea565b6040820152613dd860608301613cea565b606082015260808201356001600160401b0380821115613df757600080fd5b613e0385838601613cfb565b608084015260a0840135915080821115613e1c57600080fd5b50613e2984828501613cfb565b60a08301525092915050565b600060208284031215613e4757600080fd5b81356001600160401b03811115613e5d57600080fd5b61124d84828501613d83565b60008235603e19833603018112613b9557600080fd5b6000823560be19833603018112613b9557600080fd5b600060208284031215613ea757600080fd5b61103082613cea565b600060208284031215613ec257600080fd5b61103082613cd3565b60006105843683613d83565b6000808335601e19843603018112613eee57600080fd5b83016020810192503590506001600160401b03811115613f0d57600080fd5b8060051b3603821315611da157600080fd5b8183526000602080850194508260005b85811015613822578135613f4281613605565b6001600160a01b031687529582019590820190600101613f2f565b60208082528181018390526000906040808401600586901b8501820187855b8881101561409457603f19808985030185528235603e198c3603018112613fa257600080fd5b8b018035613faf8161362a565b63ffffffff168552808801353682900360be19018112613fce57600080fd5b858901889052016001600160401b03613fe682613cd3565b1687860152613ff6888201613cea565b606060ff8083168289015261400c8a8501613cea565b92506080818416818a0152614022838601613cea565b935060a09250818416838a015261403b81860186613ed7565b60c08b81015294509150614056905061010089018483613f1f565b92505061406581840184613ed7565b93509050838783030160e088015261407e828483613f1f565b978a019796505050928701925050600101613f7c565b509098975050505050505050565b6040815260006140b56040830186613994565b8281036020840152838152838560208301376000602085830101526020601f19601f860116820101915050949350505050565b81356140f38161362a565b63ffffffff8116905081548163ffffffff198216178355602084013561411881613605565b6001600160c01b03199190911690911760209190911b640100000000600160c01b031617905550565b6020808252818101839052600090604080840186845b878110156141b457813561416a8161362a565b63ffffffff908116845282860135906141828261362a565b16838601528184013561419481613605565b6001600160a01b0316838501526060928301929190910190600101614157565b5090979650505050505050565b6001600160a01b038416815263ffffffff831660208201526080810161124d6040830184805163ffffffff1682526020908101516001600160a01b0316910152565b6001600160a01b038416815263ffffffff831660208201526060604082018190526000906138959083018461382d565b634e487b7160e01b600052601160045260246000fd5b60ff828116828216039081111561058457610584614233565b600060ff83168061428357634e487b7160e01b600052601260045260246000fd5b8060ff84160491505092915050565b8082018082111561058457610584614233565b63ffffffff8516815260018060a01b03841660208201528260408201526080606082015260006142d86080830184613994565b9695505050505050565b6000602082840312156142f457600080fd5b5051919050565b600082601f83011261430c57600080fd5b81356001600160401b0381111561432557614325613be5565b614338601f8201601f1916602001613c45565b81815284602083860101111561434d57600080fd5b816020850160208301376000918101602001919091529392505050565b600060e0823603121561437c57600080fd5b614384613c23565b61438d83613cd3565b815261439b6020840161363c565b60208201526143ac6040840161361a565b60408201526143bd6060840161363c565b60608201526080830135608082015260a083013560a082015260c08301356001600160401b038111156143ef57600080fd5b6143fb368286016142fb565b60c08301525092915050565b60008351614419818460208801613970565b83519083019061442d818360208801613970565b01949350505050565b60608152600061444960608301866137e8565b6020838203602085015261445d82876137e8565b84810360408601528551808252602080880194509091019060005b8181101561409457845183529383019391830191600101614478565b600080858511156144a457600080fd5b838611156144b157600080fd5b5050820193919092039150565b6001600160f01b031981358181169160028510156144e65780818660020360031b1b83161692505b505092915050565b6001600160f81b031981358181169160018510156144e65760019490940360031b84901b1690921692915050565b60ff818116838216019081111561058457610584614233565b63ffffffff851681526001600160401b03841660208201526001600160a01b03831660408201526080606082018190526000906142d890830184613994565b8281526000825161458c816020850160208701613970565b919091016020019392505050565b6040815263ffffffff83511660408201526000602084015160a060608401526145c660e0840182613994565b604086015160808581019190915260608701516001600160401b031660a08601528601516001600160a01b031660c0850152838103602085015290506138958185613994565b6000845161461e818460208901613970565b8201838582376000930192835250909392505050565b8035602083101561058457600019602084900360031b1b1692915050565b60f88a811b6001600160f81b0319908116835260f08b811b6001600160f01b031990811660018601528b841b8316600386015260808b901b6001600160801b031916600486015289841b831660148601529088901b1660158401529085901b16601782015260006146d2601883018560801b6001600160801b0319169052565b5060288101919091526048019897505050505050505056fea2646970667358221220d9784bfc6a1a26f66ca9108192fade74e4e3799cd23fe6424871d62320841a2464736f6c6343000816003360c06040523480156200001157600080fd5b50604051620024413803806200244183398101604081905262000034916200013e565b8080816001600160a01b031663416ecebf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000075573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200009b919062000170565b3380620000c257604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b620000cd81620000ee565b506001600160a01b0390911660805263ffffffff1660a05250620001989050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156200015157600080fd5b81516001600160a01b03811681146200016957600080fd5b9392505050565b6000602082840312156200018357600080fd5b815163ffffffff811681146200016957600080fd5b60805160a05161227c620001c5600039600061031e01526000818161041b0152610484015261227c6000f3fe608060405234801561001057600080fd5b506004361061010b5760003560e01c806343ea4fa9116100a25780638da5cb5b116100715780638da5cb5b146102665780639c33abf714610281578063c40ff835146102a1578063e084d952146102b4578063f2fde38b146102c757600080fd5b806343ea4fa91461021857806354fd4d501461022b5780636750cd4c1461024b578063715018a61461025e57600080fd5b806320efd722116100de57806320efd7221461016f57806329460b0b1461018257806339e3f938146101955780633c782a52146101b557600080fd5b806301ffc9a7146101105780630223536e146101385780630894edf11461014d5780631881d94d14610160575b600080fd5b61012361011e3660046116ed565b6102da565b60405190151581526020015b60405180910390f35b61014b61014636600461177b565b610305565b005b61014b61015b3660046117d7565b610317565b600160405161012f9190611822565b61014b61017d3660046118a5565b610482565b61014b6101903660046118f7565b6105a4565b6101a86101a336600461194c565b61073c565b60405161012f9190611a35565b6101f96101c3366004611a48565b600260209081526000938452604080852082529284528284209052825290205460ff81169061010090046001600160401b031682565b6040805192151583526001600160401b0390911660208301520161012f565b6101a861022636600461194c565b610877565b60408051600381526000602082015260029181019190915260600161012f565b610123610259366004611a7d565b610b83565b61014b610b8e565b6000546040516001600160a01b03909116815260200161012f565b61029461028f366004611a98565b610ba2565b60405161012f9190611ad2565b61014b6102af366004611b21565b610c0b565b6101236102c2366004611d10565b610c1b565b61014b6102d5366004611d5d565b610c30565b60006001600160e01b03198216630ab7be9f60e01b14806102ff57506102ff82610c6e565b92915050565b61031184848484610ca3565b50505050565b61034283837f0000000000000000000000000000000000000000000000000000000000000000610d89565b600061034e8484610e0c565b9050600061035c8585610e1e565b9050600061036a8383610877565b905061038e818787604051610380929190611d78565b604051809103902086610e41565b600060405180606001604052808463ffffffff1681526020016103b18989610f91565b81526020016103c08989610faa565b6001600160401b039081169091526040805163a825d74760e01b8152835163ffffffff166004820152602084015160248201529083015190911660448201526001600160a01b038681166064830152608482018890529192507f00000000000000000000000000000000000000000000000000000000000000009091169063a825d7479060a401600060405180830381600087803b15801561046157600080fd5b505af1158015610475573d6000803e3d6000fd5b5050505050505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633146104cb5760405163467409c360e01b815260040160405180910390fd5b60005b8181101561031157368383838181106104e9576104e9611d88565b90506020028101906104fb9190611d9e565b905061051261050d6020830183611a7d565b610fcd565b60026105246040830160208401611a7d565b63ffffffff16036105645761055f61053f6020830183611a7d565b8661054d6040850185611dbe565b81019061055a9190611e04565b610ffb565b61059b565b6105746040820160208301611a7d565b604051635d4be0fd60e11b815263ffffffff90911660048201526024015b60405180910390fd5b506001016104ce565b6105ac611051565b60005b818110156106fe57368383838181106105ca576105ca611d88565b90506020028101906105dc9190611e38565b905060ff6105ed6020830183611e4e565b6105fe906040810190602001611e64565b60ff160361061f576040516341d50bed60e11b815260040160405180910390fd5b60ff61062e6020830183611e4e565b61063f906060810190604001611e64565b60ff16036106605760405163211089b360e11b815260040160405180910390fd5b6001600160401b036106756020830183611e4e565b610683906020810190611e7f565b6001600160401b0316036106aa5760405163281b33d760e11b815260040160405180910390fd5b6106c86106ba6020830183611e4e565b6106c390611e9a565b61107e565b6106f560006106da6020840184611a7d565b6106e76020850185611e4e565b6106f090611e9a565b6110b6565b506001016105af565b507faaf3aaa0c11056e86ac56eb653e25b005ca1a7d4dcd21ba24647f7ab63f3b5608282604051610730929190611f2a565b60405180910390a15050565b61074461162b565b6001600160a01b038316600090815260016020818152604080842063ffffffff87168552825292839020835160c08101855281546001600160401b038116825260ff600160401b8204811683860152600160481b8204811683880152600160501b909104166060820152928101805485518185028101850190965280865293949193608086019383018282801561080457602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116107e6575b505050505081526020016002820180548060200260200160405190810160405280929190818152602001828054801561086657602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610848575b505050505081525050905092915050565b61087f61162b565b63ffffffff821660008181527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49602090815260408083206001600160a01b03881684526001835281842094845293909152902080546001600160401b0316806108f45782546001600160401b03168452610911565b6001600160401b0381811614610911576001600160401b03811684525b8154600160401b900460ff166109ab578254600160401b900460ff16156109a6578260010180548060200260200160405190810160405280929190818152602001828054801561098a57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161096c575b505050505060808501528254600160401b900460ff1660208501525b610a32565b8154600160401b900460ff90811614610a325781600101805480602002602001604051908101604052809291908181526020018280548015610a1657602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116109f8575b505050505060808501528154600160401b900460ff1660208501525b8154600160481b900460ff16610adb578254600160481b900460ff1615610ad65782600201805480602002602001604051908101604052809291908181526020018280548015610aab57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610a8d575b505050505060a0850152825460ff600160481b820481166040870152600160501b9091041660608501525b610b71565b8154600160481b900460ff90811614610b715781600201805480602002602001604051908101604052809291908181526020018280548015610b4657602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610b28575b505050505060a0850152815460ff600160481b820481166040870152600160501b9091041660608501525b610b7a8461107e565b50505092915050565b60006102ff8261134f565b610b96611051565b610ba060006113aa565b565b606060011963ffffffff831601610be357610bbd8385610877565b604051602001610bcd9190611a35565b6040516020818303038152906040529050610c04565b604051635d4be0fd60e11b815263ffffffff83166004820152602401610592565b9392505050565b610c16838383610d89565b505050565b6000610c288484846113fa565b949350505050565b610c38611051565b6001600160a01b038116610c6257604051631e4fbdf760e01b815260006004820152602401610592565b610c6b816113aa565b50565b60006001600160e01b031982166325fc096160e21b14806102ff57506301ffc9a760e01b6001600160e01b03198316146102ff565b604080518082018252600181526001600160401b03831660208201529051600290600090610cd49088908890611d78565b604080519182900390912082526020808301939093529081016000908120868252835281812033808352908452908290208451815495909401516001600160401b03166101000268ffffffffffffffff00199415159490941668ffffffffffffffffff19909516949094179290921790925590517f2cb0eed7538baeae4c6fde038c0fd0384d27de0dd55a228c65847bda6aa1ab5691610d7b91879087908690889061206c565b60405180910390a150505050565b60518214610daa5760405163c9bf37b760e01b815260040160405180910390fd5b6001610db68484611503565b60ff1614610dd757604051633a9ae7b960e01b815260040160405180910390fd5b8063ffffffff16610de88484611525565b63ffffffff1614610c165760405163216964bf60e11b815260040160405180910390fd5b6000610c04610e1b8484611535565b90565b6000610e2e600d600984866120c6565b610e37916120f0565b60e01c9392505050565b610e4c8383836113fa565b610e695760405163130c463560e21b815260040160405180910390fd5b602083015160ff1615610efe5760005b836020015160ff168160ff161015610efc57600083815260026020908152604080832085845290915281206080860151805191929160ff8516908110610ec157610ec1611d88565b6020908102919091018101516001600160a01b03168252810191909152604001600020805468ffffffffffffffffff19169055600101610e79565b505b604083015160ff1615610c165760005b836040015160ff168160ff161015610311576000838152600260209081526040808320858452909152812060a0860151805191929160ff8516908110610f5657610f56611d88565b6020908102919091018101516001600160a01b03168252810191909152604001600020805468ffffffffffffffffff19169055600101610f0e565b6000610fa1602d600d84866120c6565b610c0491612120565b6000610fba6009600184866120c6565b610fc39161213e565b60c01c9392505050565b610fd68161134f565b610c6b57604051633c30434160e21b815263ffffffff82166004820152602401610592565b6110068284836110b6565b6110108284610877565b507f82118522aa536ac0e96cc5c689407ae42b89d592aa133890a01f1509842f50818284836040516110449392919061216c565b60405180910390a1505050565b6000546001600160a01b03163314610ba05760405163118cdaa760e01b8152336004820152602401610592565b602081015160ff161580156110985750606081015160ff16155b15610c6b5760405163ce2c375160e01b815260040160405180910390fd5b602081015160ff90811614806110d15750602081015160ff16155b156110ff57608081015151156110fa576040516341d50bed60e11b815260040160405180910390fd5b611165565b806020015160ff1681608001515114158061113a57506002611123600160ff6121b2565b61112d91906121cb565b60ff16816020015160ff16115b15611158576040516341d50bed60e11b815260040160405180910390fd5b6111658160800151611545565b604081015160ff90811614806111805750604081015160ff16155b156111d45760a081015151156111a95760405163211089b360e11b815260040160405180910390fd5b606081015160ff16156111cf576040516338682fa960e01b815260040160405180910390fd5b611279565b806040015160ff168160a001515114158061120f575060026111f8600160ff6121b2565b61120291906121cb565b60ff16816040015160ff16115b1561122d5760405163211089b360e11b815260040160405180910390fd5b606081015160ff16158061124e5750806040015160ff16816060015160ff16115b1561126c576040516338682fa960e01b815260040160405180910390fd5b6112798160a00151611545565b6001600160a01b038316600090815260016020818152604080842063ffffffff8716855282529283902084518154868401519587015160608801516001600160401b0390931668ffffffffffffffffff1990921691909117600160401b60ff97881602176affff0000000000000000001916600160481b9187169190910260ff60501b191617600160501b95909116949094029390931783556080840151805185949361132b93908501920190611673565b5060a08201518051611347916002840191602090910190611673565b505050505050565b63ffffffff811660009081527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49602052604081208054600160401b900460ff16151580610c04575054600160501b900460ff16151592915050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b602083015160009060ff161561147d5760005b846020015160ff168160ff1610156114655761144f85608001518260ff168151811061143b5761143b611d88565b6020026020010151858588600001516115ac565b61145d576000915050610c04565b60010161140d565b50836040015160ff1660000361147d57506001610c04565b606084015160005b856040015160ff168160ff1610156114f7576114c78660a001518260ff16815181106114b3576114b3611d88565b6020026020010151868689600001516115ac565b156114ef57816114d6816121fb565b9250508160ff166000036114ef57600192505050610c04565b600101611485565b50600095945050505050565b600061151260018284866120c6565b61151b91612218565b60f81c9392505050565b6000610e2e6031602d84866120c6565b6000610fa16051603184866120c6565b6000805b8251811015610c1657600083828151811061156657611566611d88565b60200260200101519050826001600160a01b0316816001600160a01b0316116115a25760405163447516e160e01b815260040160405180910390fd5b9150600101611549565b600083815260026020908152604080832085845282528083206001600160a01b0388168452825280832081518083019092525460ff81161580158084526101009092046001600160401b03169383019390935290916116215750826001600160401b031681602001516001600160401b031610155b9695505050505050565b6040518060c0016040528060006001600160401b03168152602001600060ff168152602001600060ff168152602001600060ff16815260200160608152602001606081525090565b8280548282559060005260206000209081019282156116c8579160200282015b828111156116c857825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190611693565b506116d49291506116d8565b5090565b5b808211156116d457600081556001016116d9565b6000602082840312156116ff57600080fd5b81356001600160e01b031981168114610c0457600080fd5b60008083601f84011261172957600080fd5b5081356001600160401b0381111561174057600080fd5b60208301915083602082850101111561175857600080fd5b9250929050565b80356001600160401b038116811461177657600080fd5b919050565b6000806000806060858703121561179157600080fd5b84356001600160401b038111156117a757600080fd5b6117b387828801611717565b909550935050602085013591506117cc6040860161175f565b905092959194509250565b6000806000604084860312156117ec57600080fd5b83356001600160401b0381111561180257600080fd5b61180e86828701611717565b909790965060209590950135949350505050565b602081016003831061184457634e487b7160e01b600052602160045260246000fd5b91905290565b80356001600160a01b038116811461177657600080fd5b60008083601f84011261187357600080fd5b5081356001600160401b0381111561188a57600080fd5b6020830191508360208260051b850101111561175857600080fd5b6000806000604084860312156118ba57600080fd5b6118c38461184a565b925060208401356001600160401b038111156118de57600080fd5b6118ea86828701611861565b9497909650939450505050565b6000806020838503121561190a57600080fd5b82356001600160401b0381111561192057600080fd5b61192c85828601611861565b90969095509350505050565b803563ffffffff8116811461177657600080fd5b6000806040838503121561195f57600080fd5b6119688361184a565b915061197660208401611938565b90509250929050565b60008151808452602080850194506020840160005b838110156119b95781516001600160a01b031687529582019590820190600101611994565b509495945050505050565b6001600160401b03815116825260ff602082015116602083015260ff604082015116604083015260ff60608201511660608301526000608082015160c06080850152611a1360c085018261197f565b905060a083015184820360a0860152611a2c828261197f565b95945050505050565b602081526000610c0460208301846119c4565b600080600060608486031215611a5d57600080fd5b8335925060208401359150611a746040850161184a565b90509250925092565b600060208284031215611a8f57600080fd5b610c0482611938565b600080600060608486031215611aad57600080fd5b611ab684611938565b9250611ac46020850161184a565b9150611a7460408501611938565b60006020808352835180602085015260005b81811015611b0057858101830151858201604001528201611ae4565b506000604082860101526040601f19601f8301168501019250505092915050565b600080600060408486031215611b3657600080fd5b83356001600160401b03811115611b4c57600080fd5b611b5886828701611717565b9094509250611a74905060208501611938565b634e487b7160e01b600052604160045260246000fd5b60405160c081016001600160401b0381118282101715611ba357611ba3611b6b565b60405290565b803560ff8116811461177657600080fd5b600082601f830112611bcb57600080fd5b813560206001600160401b0380831115611be757611be7611b6b565b8260051b604051601f19603f83011681018181108482111715611c0c57611c0c611b6b565b6040529384526020818701810194908101925087851115611c2c57600080fd5b6020870191505b84821015611c5357611c448261184a565b83529183019190830190611c33565b979650505050505050565b600060c08284031215611c7057600080fd5b611c78611b81565b9050611c838261175f565b8152611c9160208301611ba9565b6020820152611ca260408301611ba9565b6040820152611cb360608301611ba9565b606082015260808201356001600160401b0380821115611cd257600080fd5b611cde85838601611bba565b608084015260a0840135915080821115611cf757600080fd5b50611d0484828501611bba565b60a08301525092915050565b600080600060608486031215611d2557600080fd5b83356001600160401b03811115611d3b57600080fd5b611d4786828701611c5e565b9660208601359650604090950135949350505050565b600060208284031215611d6f57600080fd5b610c048261184a565b8183823760009101908152919050565b634e487b7160e01b600052603260045260246000fd5b60008235605e19833603018112611db457600080fd5b9190910192915050565b6000808335601e19843603018112611dd557600080fd5b8301803591506001600160401b03821115611def57600080fd5b60200191503681900382131561175857600080fd5b600060208284031215611e1657600080fd5b81356001600160401b03811115611e2c57600080fd5b610c2884828501611c5e565b60008235603e19833603018112611db457600080fd5b6000823560be19833603018112611db457600080fd5b600060208284031215611e7657600080fd5b610c0482611ba9565b600060208284031215611e9157600080fd5b610c048261175f565b60006102ff3683611c5e565b6000808335601e19843603018112611ebd57600080fd5b83016020810192503590506001600160401b03811115611edc57600080fd5b8060051b360382131561175857600080fd5b8183526000602080850194508260005b858110156119b9576001600160a01b03611f178361184a565b1687529582019590820190600101611efe565b60208082528181018390526000906040808401600586901b8501820187855b8881101561205e57603f19808985030185528235603e198c3603018112611f6f57600080fd5b8b0163ffffffff611f7f82611938565b1685528781013560be19823603018112611f9857600080fd5b858901889052016001600160401b03611fb08261175f565b1687860152611fc0888201611ba9565b606060ff80831682890152611fd68a8501611ba9565b92506080818416818a0152611fec838601611ba9565b935060a09250818416838a015261200581860186611ea6565b60c08b81015294509150612020905061010089018483611eee565b92505061202f81840184611ea6565b93509050838783030160e0880152612048828483611eee565b978a019796505050928701925050600101611f49565b509098975050505050505050565b6001600160a01b03861681526080602082018190528101849052838560a0830137600060a08583010152600060a0601f19601f87011683010190506001600160401b03841660408301528260608301529695505050505050565b600080858511156120d657600080fd5b838611156120e357600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156121185780818660040360031b1b83161692505b505092915050565b803560208310156102ff57600019602084900360031b1b1692915050565b6001600160c01b031981358181169160088510156121185760089490940360031b84901b1690921692915050565b6001600160a01b038416815263ffffffff83166020820152606060408201819052600090611a2c908301846119c4565b634e487b7160e01b600052601160045260246000fd5b60ff82811682821603908111156102ff576102ff61219c565b600060ff8316806121ec57634e487b7160e01b600052601260045260246000fd5b8060ff84160491505092915050565b600060ff82168061220e5761220e61219c565b6000190192915050565b6001600160f81b031981358181169160018510156121185760019490940360031b84901b169092169291505056fea2646970667358221220f261181fa476bcf41c4bf04e3eda4bd6084e0edf3739fd077cfebd99f1f1561764736f6c6343000816003360e06040523480156200001157600080fd5b5060405162004c0738038062004c07833981016040819052620000349162000176565b82836001600160a01b031663416ecebf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000074573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200009a9190620001c3565b3380620000c157604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b620000cc816200010d565b506001600160a01b0391821660805263ffffffff1660a05260c092909252600655600280546001600160a01b031916939091169290921790915550620001f2565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146200017357600080fd5b50565b600080600080608085870312156200018d57600080fd5b84516200019a816200015d565b6020860151909450620001ad816200015d565b6040860151606090960151949790965092505050565b600060208284031215620001d657600080fd5b815163ffffffff81168114620001eb57600080fd5b9392505050565b60805160a05160c0516149c26200024560003960008181611b52015261262c01526000610be50152600081816106550152818161075a0152818161089801528181610d6d015261176101526149c26000f3fe6080604052600436106101855760003560e01c80637620fd01116100d1578063d15b0d491161008a578063f0f4426011610064578063f0f442601461051e578063f2fde38b1461053e578063faaebd211461055e578063fd9be5221461058b57600080fd5b8063d15b0d49146104b1578063d80e9bd9146104d1578063ea69d69d146104fe57600080fd5b80637620fd01146103b65780638da5cb5b146103f95780638eb0bf30146104175780639c33abf714610444578063ab750e7514610471578063c85f4b4e1461049157600080fd5b806320efd7221161013e57806354fd4d501161011857806354fd4d5014610334578063594924da146103615780636750cd4c14610381578063715018a6146103a157600080fd5b806320efd722146102a85780633c782a52146102c85780634389e58f1461030657600080fd5b806301ffc9a714610191578063052368ca146101c65780630e97289b146101e65780631881d94d1461021e5780631fb512251461023a578063200175f71461028657600080fd5b3661018c57005b600080fd5b34801561019d57600080fd5b506101b16101ac36600461389c565b6105ab565b60405190151581526020015b60405180910390f35b3480156101d257600080fd5b506101b16101e13660046138c6565b6105fd565b3480156101f257600080fd5b50600254610206906001600160a01b031681565b6040516001600160a01b0390911681526020016101bd565b34801561022a57600080fd5b5060026040516101bd919061391e565b34801561024657600080fd5b50610278610255366004613996565b600360209081526000938452604080852082529284528284209052825290205481565b6040519081526020016101bd565b34801561029257600080fd5b506102a66102a13660046139db565b61061e565b005b3480156102b457600080fd5b506102a66102c3366004613a67565b610758565b3480156102d457600080fd5b506102786102e3366004613abb565b600460209081526000938452604080852082529284528284209052825290205481565b34801561031257600080fd5b50610326610321366004613b35565b610880565b6040516101bd929190613c0d565b34801561034057600080fd5b5060408051600a8152600060208201526002918101919091526060016101bd565b34801561036d57600080fd5b506102a661037c366004613c31565b610b95565b34801561038d57600080fd5b506101b161039c366004613c81565b610dd6565b3480156103ad57600080fd5b506102a6610de1565b3480156103c257600080fd5b506103da6007546006546001600160a01b0390911691565b604080516001600160a01b0390931683526020830191909152016101bd565b34801561040557600080fd5b506000546001600160a01b0316610206565b34801561042357600080fd5b50610437610432366004613c9c565b610df5565b6040516101bd9190613d86565b34801561045057600080fd5b5061046461045f366004613d99565b6110ed565b6040516101bd9190613dd5565b34801561047d57600080fd5b506102a661048c366004613c31565b611156565b34801561049d57600080fd5b506102a66104ac366004613de8565b6111e1565b3480156104bd57600080fd5b506102a66104cc366004613e29565b611373565b3480156104dd57600080fd5b506104f16104ec366004613b35565b6113e8565b6040516101bd9190613e42565b34801561050a57600080fd5b50610437610519366004613c9c565b611534565b34801561052a57600080fd5b506102a6610539366004613e59565b61166b565b34801561054a57600080fd5b506102a6610559366004613e59565b6116c1565b34801561056a57600080fd5b50610278610579366004613e59565b60056020526000908152604090205481565b34801561059757600080fd5b506102a66105a6366004613e76565b6116ff565b60006001600160e01b031982166325fc096160e21b14806105dc57506001600160e01b0319821663b6e9ace360e01b145b806105f757506301ffc9a760e01b6001600160e01b03198316145b92915050565b600061061361060b8661407d565b858585611827565b90505b949350505050565b6007546001600160a01b0316331461064957604051634b41868f60e11b815260040160405180910390fd5b826001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e1758bd86040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106d59190614089565b6001600160a01b0316036106fc57604051632ddfd41160e21b815260040160405180910390fd5b610707838383611983565b604080516001600160a01b038086168252841660208201529081018290527fe081464b7278501267de69fa85b7b9560b0ae05d5fbfaab9b1986c70356e2efe906060015b60405180910390a1505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633146107a15760405163467409c360e01b815260040160405180910390fd5b60005b8181101561087a57368383838181106107bf576107bf6140a6565b90506020028101906107d191906140bc565b90506107e86107e36020830183613c81565b6119c3565b60016107fa6040830160208401613c81565b63ffffffff160361083a576108356108156020830183613c81565b8661082360408501856140dc565b8101906108309190614122565b6119f1565b610871565b61084a6040820160208301613c81565b60405163065c274160e11b815263ffffffff90911660048201526024015b60405180910390fd5b506001016107a4565b50505050565b604080518082019091526000808252602082015260607f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633146108df5760405163467409c360e01b815260040160405180910390fd5b60808601356109036108f76060890160408a01613e59565b6001600160a01b031690565b146109215760405163a4884a5960e01b815260040160405180910390fd5b60008061092f888888611a3a565b909250905060008061096161094a60608c0160408d01613e59565b61095a60808d0160608e01613c81565b858a611ac3565b9092509050610970828461416c565b925061097f60c08b018b6140dc565b60405161098d92919061417f565b6040518091039020600360008c60400160208101906109ac9190613e59565b6001600160a01b0316815260208101919091526040016000908120906109d860808e0160608f01613c81565b63ffffffff1681526020808201929092526040016000908120916109fe908e018e61418f565b6001600160401b03166001600160401b03168152602001908152602001600020819055506000610b0c6040518060e001604052808d6000016020810190610a45919061418f565b6001600160401b031681526020018d6060016020810190610a669190613c81565b63ffffffff1681526020018d6040016020810190610a849190613e59565b6001600160a01b031681526020018d6020016020810190610aa59190613c81565b63ffffffff16815260808e0135602082015260a08e01356040820152606001610ad160c08f018f6140dc565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050915250611bd1565b600254604051631f5dad8b60e31b81529192506001600160a01b03169063faed6c5890610b419084908e908e906004016141d3565b600060405180830381600087803b158015610b5b57600080fd5b505af1158015610b6f573d6000803e3d6000fd5b505060408051808201909152958652505050602083015250925090505b94509492505050565b60518314610bb65760405163864d08b360e01b815260040160405180910390fd5b6001610bc28585611c29565b60ff1614610be357604051637952a82f60e01b815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000063ffffffff16610c148585611c4b565b63ffffffff1614610c3857604051631f4b6f8b60e11b815260040160405180910390fd5b6000610c448585611c6e565b90506000610c528686611c80565b90506000610c608787611c90565b6001600160a01b038416600090815260036020908152604080832063ffffffff8716845282528083206001600160401b03851684529091529020549091508514610cbd576040516333074b7760e11b815260040160405180910390fd5b6000610cc98484610df5565b9050610cee818989604051610cdf92919061417f565b60405180910390208888611cb3565b600060405180606001604052808563ffffffff168152602001610d118b8b611e03565b81526001600160401b038581166020928301526040805163a825d74760e01b8152845163ffffffff1660048201529284015160248401528301511660448201526001600160a01b038781166064830152608482018990529192507f00000000000000000000000000000000000000000000000000000000000000009091169063a825d7479060a401600060405180830381600087803b158015610db357600080fd5b505af1158015610dc7573d6000803e3d6000fd5b50505050505050505050505050565b60006105f782611e1c565b610de9611e77565b610df36000611ea4565b565b610dfd6137e3565b63ffffffff821660008181527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49602090815260408083206001600160a01b03888116855260018452828520958552949092529091208054919290911680610e6e5782546001600160a01b0316610e70565b805b6001600160a01b031684528154600160a01b900460ff16610f15578254600160a01b900460ff1615610f105782600101805480602002602001604051908101604052809291908181526020018280548015610ef457602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610ed6575b505050505060808501528254600160a01b900460ff1660208501525b610f9c565b8154600160a01b900460ff90811614610f9c5781600101805480602002602001604051908101604052809291908181526020018280548015610f8057602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610f62575b505050505060808501528154600160a01b900460ff1660208501525b8154600160a81b900460ff16611045578254600160a81b900460ff1615611040578260020180548060200260200160405190810160405280929190818152602001828054801561101557602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610ff7575b505050505060a0850152825460ff600160a81b820481166040870152600160b01b9091041660608501525b6110db565b8154600160a81b900460ff908116146110db57816002018054806020026020016040519081016040528092919081815260200182805480156110b057602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611092575b505050505060a0850152815460ff600160a81b820481166040870152600160b01b9091041660608501525b6110e484611ef4565b50505092915050565b606060001963ffffffff83160161112e576111088385610df5565b6040516020016111189190613d86565b604051602081830303815290604052905061114f565b60405163065c274160e11b815263ffffffff83166004820152602401610868565b9392505050565b8060046000868660405161116b92919061417f565b60408051918290039091208252602080830193909352908101600090812086825283528181203380835293528190209290925590517f04708e5dfef6005d6d646eb761e3b9e412e1cc5749fc9d884bca441cc7a95258916111d3918790879087908790614203565b60405180910390a150505050565b6111e9611e77565b60005b818110156113355736838383818110611207576112076140a6565b9050602002810190611219919061423c565b905060ff61122a6020830183614252565b61123b906040810190602001614268565b60ff160361125c57604051632ad00e0160e11b815260040160405180910390fd5b60ff61126b6020830183614252565b61127c906060810190604001614268565b60ff160361129d576040516371aa1b6360e11b815260040160405180910390fd5b6112bb6112ad6020830183614252565b6112b69061407d565b611ef4565b60006112ca6020830183614252565b6112d8906020810190613e59565b6001600160a01b0316036112ff57604051633b6faad360e11b815260040160405180910390fd5b61132c60006113116020840184613c81565b61131e6020850185614252565b6113279061407d565b611f2c565b506001016111ec565b507f65edb7dc0f21ba15c998f8bd220ea9fec30757ff9fb07696c634bcce00ce6f348282604051611367929190614309565b60405180910390a15050565b61137b611e77565b6006548111156113ac5760065460405163b79d126360e01b8152610868918391600401918252602082015260400190565b60068190556040518181527f491ff913b5444f4136b0d4075f020cfe3a5f60de926ec0b091612401a22b7842906020015b60405180910390a150565b604080518082019091526000808252602082015260008061140986866121b5565b909250905060006114206060890160408a01613e59565b9050600061143460808a0160608b01613c81565b905060006114428383610df5565b90506000611472828561145c6114578f6144bc565b612374565b8e8060c0019061146c91906140dc565b8a6123ef565b825160405163c8f8dcd160e01b81529192506001600160a01b03169063c8f8dcd1906114a49087908a90600401614559565b602060405180830381865afa1580156114c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114e5919061457d565b6114ef908261416c565b90506000806115008686858d61259d565b909250905061150f828461416c565b6040805180820190915290815260208101919091529c9b505050505050505050505050565b61153c6137e3565b6001600160a01b03808416600090815260016020818152604080842063ffffffff88168552825292839020835160c0810185528154958616815260ff600160a01b8704811682850152600160a81b8704811682870152600160b01b909604909516606086015291820180548451818402810184019095528085529293608086019390928301828280156115f857602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116115da575b505050505081526020016002820180548060200260200160405190810160405280929190818152602001828054801561165a57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161163c575b505050505081525050905092915050565b611673611e77565b600780546001600160a01b0319166001600160a01b0383169081179091556040519081527f3c864541ef71378c6229510ed90f376565ee42d9c5e0904a984a9e863e6db44f906020016113dd565b6116c9611e77565b6001600160a01b0381166116f357604051631e4fbdf760e01b815260006004820152602401610868565b6116fc81611ea4565b50565b336000908152600560205260409020548082111561173a5760405163b79d126360e01b81526004810183905260248101829052604401610868565b33600090815260056020908152604080832085850390558051631c2eb17b60e31b815290517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169263e1758bd892600480820193918290030181865afa1580156117b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117d49190614089565b90506117e181858561266e565b604080513381526001600160a01b03861660208201529081018490527f820b7fd51bf79c54350bab98400651b3314ff6e79b33528821871d94a6669883906060016111d3565b602084015160009060ff16156118d35760005b856020015160ff168160ff1610156118bb576118a586608001518260ff1681518110611868576118686140a6565b602002602001015186868660009283526004602090815260408085209385529281528284206001600160a01b039095168452939093529020541490565b6118b3576000915050610616565b60010161183a565b50846040015160ff166000036118d357506001610616565b606085015160005b866040015160ff168160ff161015611976576119468760a001518260ff1681518110611909576119096140a6565b602002602001015187878760009283526004602090815260408085209385529281528284206001600160a01b039095168452939093529020541490565b1561196e578161195581614596565b9250508160ff1660000361196e57600192505050610616565b6001016118db565b5060009695505050505050565b6001600160a01b0382166119aa576040516306b7a93160e41b815260040160405180910390fd5b6119be6001600160a01b0384168383612691565b505050565b6119cc81611e1c565b6116fc576040516303fc0f9560e21b815263ffffffff82166004820152602401610868565b6119fc828483611f2c565b611a068284610df5565b507fe8e2a5b92fc69ac50188ea142042492be8e8c34febb10b2cd02983684336e14282848360405161074b939291906145b3565b60606000806000611a4b86866121b5565b90925090506000611a75611a6560608a0160408b01613e59565b61043260808b0160608c01613c81565b8051909150611a9490611a8e60608b0160408c01613e59565b856126e3565b9350600080611aa4838b866127d6565b9092509050611ab3828761416c565b909a909950975050505050505050565b60075460009081906001600160a01b031615610b8c576040516001600160a01b038716602482015263ffffffff8616604482015260648101859052831515608482015260009060a40160408051601f19818403018152919052602080820180516001600160e01b0316636a8e2a4360e11b1790526007549192506000918291611b7a916001600160a01b0316907f00000000000000000000000000000000000000000000000000000000000000009084908761289e565b91509150611b8a8787848461294e565b90955093508415611bc5576007546001600160a01b031660009081526005602052604081208054879290611bbf90849061416c565b90915550505b50505094509492505050565b8051602080830151604080850151606080870151608088015160a089015160c08a015195519398611c1398600198919791966001600160a01b031695016145e3565b6040516020818303038152906040529050919050565b6000611c38600182848661465e565b611c4191614688565b60f81c9392505050565b6000611c5b6031602d848661465e565b611c64916146b8565b60e01c9392505050565b600061114f611c7d84846129c9565b90565b6000611c5b600d6009848661465e565b6000611ca060096001848661465e565b611ca9916146e6565b60c01c9392505050565b611cbf84848484611827565b611cdc576040516328ca4b5160e01b815260040160405180910390fd5b602084015160ff1615611d6d5760005b846020015160ff168160ff161015611d6b57600084815260046020908152604080832086845290915281206080870151805191929160ff8516908110611d3457611d346140a6565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060009055806001019050611cec565b505b604084015160ff161561087a5760005b846040015160ff168160ff161015611dfc576000848152600460209081526040808320868452909152812060a0870151805191929160ff8516908110611dc557611dc56140a6565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060009055806001019050611d7d565b5050505050565b6000611e13602d600d848661465e565b61114f91614714565b63ffffffff811660009081527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49602052604081208054600160a01b900460ff1615158061114f575054600160b01b900460ff16151592915050565b6000546001600160a01b03163314610df35760405163118cdaa760e01b8152336004820152602401610868565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b602081015160ff16158015611f0e5750606081015160ff16155b156116fc57604051634dafcfbd60e11b815260040160405180910390fd5b602081015160ff9081161480611f475750602081015160ff16155b15611f755760808101515115611f7057604051632ad00e0160e11b815260040160405180910390fd5b611fdb565b806020015160ff16816080015151141580611fb057506002611f99600160ff614732565b611fa3919061474b565b60ff16816020015160ff16115b15611fce57604051632ad00e0160e11b815260040160405180910390fd5b611fdb81608001516129d9565b604081015160ff9081161480611ff65750604081015160ff16155b1561204a5760a0810151511561201f576040516371aa1b6360e11b815260040160405180910390fd5b606081015160ff161561204557604051637c94a05f60e11b815260040160405180910390fd5b6120ef565b806040015160ff168160a00151511415806120855750600261206e600160ff614732565b612078919061474b565b60ff16816040015160ff16115b156120a3576040516371aa1b6360e11b815260040160405180910390fd5b606081015160ff1615806120c45750806040015160ff16816060015160ff16115b156120e257604051637c94a05f60e11b815260040160405180910390fd5b6120ef8160a001516129d9565b6001600160a01b03838116600090815260016020818152604080842063ffffffff881685528252928390208551815487840151958801516060890151929097166001600160a81b031990911617600160a01b60ff968716021761ffff60a81b1916600160a81b9686169690960260ff60b01b191695909517600160b01b949095169390930293909317825560808401518051859461219193850192019061382b565b5060a082015180516121ad91600284019160209091019061382b565b505050505050565b60608060028310156121dd5760405163196499c760e21b815260006004820152602401610868565b60006121ec600282868861465e565b6121f59161477b565b60f01c90506002600219820161235d578060005b8683101561230257600061222260018501858a8c61465e565b61222b91614688565b60f81c9050600081900361225557604051636780cfaf60e01b815260006004820152602401610868565b8160ff16600003612268578091506122a5565b8160ff168160ff16146122a55736600061228486868c8e61465e565b915091506122958989868585612a40565b9099509750859450919250829150505b60018401936000906122bc90600301868b8d61465e565b6122c59161477b565b60f01c905060008190036122ef5760405163196499c760e21b815260048101869052602401610868565b8060020161ffff16850194505050612209565b8287146123255760405163196499c760e21b815260048101849052602401610868565b60028711156123565736600061233d85858b8d61465e565b9150915061234e8888858585612a40565b909850965050505b505061236b565b612368828787612b60565b93505b50509250929050565b805160208083015160408085015160608087015160808801519351600160f81b9681019690965260c09690961b6001600160c01b031916602186015260e093841b6001600160e01b031990811660298701526001600160a01b03909216602d8601529490921b909116604d8301526051820152607101611c13565b60008060006123fd84612ceb565b91509150600089604001518a6020015161241791906147a9565b905060005b8160ff168160ff16101561258f5760008b6020015160ff168260ff16106124715760a08c015160208d01516124519084614732565b60ff1681518110612464576124646140a6565b6020026020010151612493565b8b608001518260ff168151811061248a5761248a6140a6565b60200260200101515b60408051602081019091526000808252919250905b8551811015612500578360ff168682815181106124c7576124c76140a6565b602002602001015160ff16036124f8578681815181106124e9576124e96140a6565b60200260200101519150612500565b6001016124a8565b5060405163fdb9b0f160e01b81526001600160a01b0383169063fdb9b0f190612535908f908f908f908f9088906004016147c2565b602060405180830381865afa158015612552573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612576919061457d565b612580908861416c565b9650505080600101905061241c565b505050509695505050505050565b60075460009081906001600160a01b031615610b8c576040516001600160a01b038716602482015263ffffffff8616604482015260648101859052831515608482015260009060a40160408051601f19818403018152919052602080820180516001600160e01b031663d424422160e01b1790526007549192506000918291612652916001600160a01b0316907f00000000000000000000000000000000000000000000000000000000000000009086612f51565b915091506126628787848461294e565b94509450505050610b8c565b6001600160a01b038316612686576119be8282612ffd565b6119be838383611983565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526119be9084906130aa565b60405163c015bb7d60e01b81526000906001600160a01b0385169063c015bb7d906127149086908690600401614559565b6020604051808303816000875af1158015612733573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612757919061457d565b9050801561278d576001600160a01b0384166000908152600560205260408120805483929061278790849061416c565b90915550505b604080516001600160a01b0386168152602081018390527f61ed099e74a97a1d7f8bb0952a88ca8b7b8ebd00c126ea04671f92a81213318a910160405180910390a19392505050565b60006060816127e7611457866144bc565b905060006127fc6127f7876144bc565b61311b565b905060606128278861281389840160408b01613e59565b8561282160c08c018c6140dc565b8b613138565b604051919650915061283f9084908490602001614819565b60405160208183030381529060405293507f07ea52d82345d6e838192107d8fd7123d9c2ec8e916cd0aad13fd2b60db2464488608001518960a001518360405161288b93929190614848565b60405180910390a1505050935093915050565b60006060863b8083036128c557604080516000808252602082019092529250925050612944565b60008060008761ffff166001600160401b038111156128e6576128e6613ea2565b6040519080825280601f01601f191660200182016040528015612910576020820181803683370190505b509050600080885160208a018c8f8ff191503d925087831115612931578792505b828152826000602083013e909450925050505b9550959350505050565b60008083158061295f575082516020115b1561296f57506000905080610b8c565b600083806020019051810190612985919061457d565b90508515612995578091506129bf565b600060065488116129a8576006546129aa565b875b90508082116129b957816129bb565b805b9350505b5094509492505050565b6000611e1360516031848661465e565b6000805b82518110156119be5760008382815181106129fa576129fa6140a6565b60200260200101519050826001600160a01b0316816001600160a01b031611612a365760405163c0762a5d60e01b815260040160405180910390fd5b91506001016129dd565b60608060001960ff861601612abd57865115612a7f57868484604051602001612a6b939291906148a6565b604051602081830303815290604052612ab6565b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050505b9650612b55565b60011960ff861601612b3757855115612af957858484604051602001612ae5939291906148a6565b604051602081830303815290604052612b30565b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050505b9550612b55565b604051636780cfaf60e01b815260ff86166004820152602401610868565b509495939450505050565b606060001961ffff851601612c005760228214612b90576040516301b8ca5560e31b815260040160405180910390fd5b6000612bb1612ba360226002868861465e565b612bac91614714565b6133ec565b604051600160f81b60208201819052601160f01b602183015260238201526001600160801b0319608083901b16602482015290915060340160405160208183030381529060405291505061114f565b60011961ffff851601612ccc57604282111580612c1d5750606282115b15612c3b576040516360493e2b60e11b815260040160405180910390fd5b6000612c4e612ba360226002868861465e565b90506000612c63612ba360426022878961465e565b905060006041198501612c79866042818a61465e565b612c8291614714565b60405160086020938403029190911c9250612cb3916001916011918391889183916031916002918b918b91016148ce565b604051602081830303815290604052935050505061114f565b604051630417051360e41b815261ffff85166004820152602401610868565b6060808251600003612cfc57915091565b6000612d078461342d565b90508060ff16600103612db95760408051600180825281830190925290816020015b6060815260200190600190039081612d295790505092508383600081518110612d5457612d546140a6565b602090810291909101015260408051600180825281830190925290816020016020820280368337019050509150612d8c846003613507565b82600081518110612d9f57612d9f6140a6565b602002602001019060ff16908160ff168152505050915091565b8060ff166001600160401b03811115612dd457612dd4613ea2565b604051908082528060200260200182016040528015612dfd578160200160208202803683370190505b5091508060ff166001600160401b03811115612e1b57612e1b613ea2565b604051908082528060200260200182016040528015612e4e57816020015b6060815260200190600190039081612e395790505b50925060008060ff5b8651831015612ee4576001909201916000612e728885613563565b6002949094019390506000612e878986613507565b90508260ff1660ff03612e9c57809250612ed5565b8260ff168160ff1614612ed557600219848603016000612ebd8b87846135c0565b9050612ecb8a8a87846136cd565b5093909301929150815b5061ffff169290920191612e57565b8183036000612ef48985846135c0565b9050612f02888885846136cd565b60005b8660ff168160ff161015612f4557878160ff1681518110612f2857612f286140a6565b6020908102919091010180516000190160ff169052600101612f05565b50505050505050915091565b60006060853b808303612f7857604080516000808252602082019092529250925050610b8c565b60008060008761ffff166001600160401b03811115612f9957612f99613ea2565b6040519080825280601f01601f191660200182016040528015612fc3576020820181803683370190505b509050600080885160208a018d8dfa91503d925087831115612fe3578792505b828152826000602083013e90999098509650505050505050565b6001600160a01b038216613024576040516306b7a93160e41b815260040160405180910390fd5b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114613071576040519150601f19603f3d011682016040523d82523d6000602084013e613076565b606091505b50509050806119be57604051631196f20d60e21b81526001600160a01b038416600482015260248101839052604401610868565b600080602060008451602086016000885af1806130cd576040513d6000823e3d81fd5b50506000513d915081156130e55780600114156130f2565b6001600160a01b0384163b155b1561087a57604051635274afe760e01b81526001600160a01b0385166004820152602401610868565b60608160a001518260c00151604051602001611c13929190614966565b6000606060008061314885612ceb565b9150915060008a604001518b6020015161316291906147a9565b90508060ff166001600160401b0381111561317f5761317f613ea2565b6040519080825280602002602001820160405280156131a8578160200160208202803683370190505b50935060005b8160ff168160ff1610156133dd5760008c6020015160ff168260ff16106132035760a08d015160208e01516131e39084614732565b60ff16815181106131f6576131f66140a6565b6020026020010151613225565b8c608001518260ff168151811061321c5761321c6140a6565b60200260200101515b60408051602081019091526000808252919250905b8551811015613292578360ff16868281518110613259576132596140a6565b602002602001015160ff160361328a5786818151811061327b5761327b6140a6565b60200260200101519150613292565b60010161323a565b50816001600160a01b031663f42ed2ed8e8e8e8e866040518663ffffffff1660e01b81526004016132c79594939291906147c2565b6020604051808303816000875af11580156132e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061330a919061457d565b878460ff168151811061331f5761331f6140a6565b6020026020010181815250506000878460ff1681518110613342576133426140a6565b602002602001015111156133d357868360ff1681518110613365576133656140a6565b602002602001015160056000846001600160a01b03166001600160a01b0316815260200190815260200160002060008282546133a1919061416c565b92505081905550868360ff16815181106133bd576133bd6140a6565b6020026020010151886133d0919061416c565b97505b50506001016131ae565b50505050965096945050505050565b60006fffffffffffffffffffffffffffffffff821115613429576040516306dfcc6560e41b81526080600482015260248101839052604401610868565b5090565b600080805b83518210156134dc57600190910190600061344d8584613563565b905060028301925060028161ffff16101561347e5760405163013adb8360e21b815260048101849052602401610868565b600061348a8685613507565b90508060ff1660ff036134b0576040516334f4f66f60e21b815260040160405180910390fd5b600160ff82161b83166134cd5760019485019460ff82161b831792505b5061ffff169190910190613432565b835182146135005760405163013adb8360e21b815260048101839052602401610868565b5050919050565b600061351482600161416c565b8351101561355a5760405162461bcd60e51b8152602060048201526013602482015272746f55696e74385f6f75744f66426f756e647360681b6044820152606401610868565b50016001015190565b600061357082600261416c565b835110156135b75760405162461bcd60e51b8152602060048201526014602482015273746f55696e7431365f6f75744f66426f756e647360601b6044820152606401610868565b50016002015190565b6060816135ce81601f61416c565b101561360d5760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b6044820152606401610868565b613617828461416c565b8451101561365b5760405162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b6044820152606401610868565b60608215801561367a57604051915060008252602082016040526136c4565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156136b357805183526020928301920161369b565b5050858452601f01601f1916604052505b50949350505050565b8160ff1660ff036136f1576040516334f4f66f60e21b815260040160405180910390fd5b60006136fe8360016147a9565b905060005b84518110156121ad576000858281518110613720576137206140a6565b602002602001015190508060ff168360ff160361379557868281518110613749576137496140a6565b602002602001015184604051602001613763929190614819565b604051602081830303815290604052878381518110613784576137846140a6565b6020026020010181905250506121ad565b8060ff166000036137da57828683815181106137b3576137b36140a6565b602002602001019060ff16908160ff168152505083878381518110613784576137846140a6565b50600101613703565b6040518060c0016040528060006001600160a01b03168152602001600060ff168152602001600060ff168152602001600060ff16815260200160608152602001606081525090565b828054828255906000526020600020908101928215613880579160200282015b8281111561388057825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019061384b565b506134299291505b808211156134295760008155600101613888565b6000602082840312156138ae57600080fd5b81356001600160e01b03198116811461114f57600080fd5b600080600080608085870312156138dc57600080fd5b84356001600160401b038111156138f257600080fd5b850160c0818803121561390457600080fd5b966020860135965060408601359560600135945092505050565b602081016003831061394057634e487b7160e01b600052602160045260246000fd5b91905290565b6001600160a01b03811681146116fc57600080fd5b803561396681613946565b919050565b803563ffffffff8116811461396657600080fd5b80356001600160401b038116811461396657600080fd5b6000806000606084860312156139ab57600080fd5b83356139b681613946565b92506139c46020850161396b565b91506139d26040850161397f565b90509250925092565b6000806000606084860312156139f057600080fd5b83356139fb81613946565b92506020840135613a0b81613946565b929592945050506040919091013590565b60008083601f840112613a2e57600080fd5b5081356001600160401b03811115613a4557600080fd5b6020830191508360208260051b8501011115613a6057600080fd5b9250929050565b600080600060408486031215613a7c57600080fd5b8335613a8781613946565b925060208401356001600160401b03811115613aa257600080fd5b613aae86828701613a1c565b9497909650939450505050565b600080600060608486031215613ad057600080fd5b83359250602084013591506040840135613ae981613946565b809150509250925092565b60008083601f840112613b0657600080fd5b5081356001600160401b03811115613b1d57600080fd5b602083019150836020828501011115613a6057600080fd5b60008060008060608587031215613b4b57600080fd5b84356001600160401b0380821115613b6257600080fd5b9086019060e08289031215613b7657600080fd5b90945060208601359080821115613b8c57600080fd5b50613b9987828801613af4565b90945092505060408501358015158114613bb257600080fd5b939692955090935050565b60005b83811015613bd8578181015183820152602001613bc0565b50506000910152565b60008151808452613bf9816020860160208601613bbd565b601f01601f19169290920160200192915050565b82518152602080840151908201526060604082015260006106166060830184613be1565b60008060008060608587031215613c4757600080fd5b84356001600160401b03811115613c5d57600080fd5b613c6987828801613af4565b90989097506020870135966040013595509350505050565b600060208284031215613c9357600080fd5b61114f8261396b565b60008060408385031215613caf57600080fd5b8235613cba81613946565b9150613cc86020840161396b565b90509250929050565b60008151808452602080850194506020840160005b83811015613d0b5781516001600160a01b031687529582019590820190600101613ce6565b509495945050505050565b60018060a01b03815116825260ff602082015116602083015260ff604082015116604083015260ff60608201511660608301526000608082015160c06080850152613d6460c0850182613cd1565b905060a083015184820360a0860152613d7d8282613cd1565b95945050505050565b60208152600061114f6020830184613d16565b600080600060608486031215613dae57600080fd5b613db78461396b565b92506020840135613dc781613946565b91506139d26040850161396b565b60208152600061114f6020830184613be1565b60008060208385031215613dfb57600080fd5b82356001600160401b03811115613e1157600080fd5b613e1d85828601613a1c565b90969095509350505050565b600060208284031215613e3b57600080fd5b5035919050565b8151815260208083015190820152604081016105f7565b600060208284031215613e6b57600080fd5b813561114f81613946565b60008060408385031215613e8957600080fd5b8235613e9481613946565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b60405160c081016001600160401b0381118282101715613eda57613eda613ea2565b60405290565b60405160e081016001600160401b0381118282101715613eda57613eda613ea2565b604051601f8201601f191681016001600160401b0381118282101715613f2a57613f2a613ea2565b604052919050565b803560ff8116811461396657600080fd5b600082601f830112613f5457600080fd5b813560206001600160401b03821115613f6f57613f6f613ea2565b8160051b613f7e828201613f02565b9283528481018201928281019087851115613f9857600080fd5b83870192505b84831015613fc0578235613fb181613946565b82529183019190830190613f9e565b979650505050505050565b600060c08284031215613fdd57600080fd5b613fe5613eb8565b9050613ff08261395b565b8152613ffe60208301613f32565b602082015261400f60408301613f32565b604082015261402060608301613f32565b606082015260808201356001600160401b038082111561403f57600080fd5b61404b85838601613f43565b608084015260a084013591508082111561406457600080fd5b5061407184828501613f43565b60a08301525092915050565b60006105f73683613fcb565b60006020828403121561409b57600080fd5b815161114f81613946565b634e487b7160e01b600052603260045260246000fd5b60008235605e198336030181126140d257600080fd5b9190910192915050565b6000808335601e198436030181126140f357600080fd5b8301803591506001600160401b0382111561410d57600080fd5b602001915036819003821315613a6057600080fd5b60006020828403121561413457600080fd5b81356001600160401b0381111561414a57600080fd5b61061684828501613fcb565b634e487b7160e01b600052601160045260246000fd5b808201808211156105f7576105f7614156565b8183823760009101908152919050565b6000602082840312156141a157600080fd5b61114f8261397f565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6040815260006141e66040830186613be1565b82810360208401526141f98185876141aa565b9695505050505050565b6001600160a01b038616815260806020820181905260009061422890830186886141aa565b604083019490945250606001529392505050565b60008235603e198336030181126140d257600080fd5b6000823560be198336030181126140d257600080fd5b60006020828403121561427a57600080fd5b61114f82613f32565b6000808335601e1984360301811261429a57600080fd5b83016020810192503590506001600160401b038111156142b957600080fd5b8060051b3603821315613a6057600080fd5b8183526000602080850194508260005b85811015613d0b5781356142ee81613946565b6001600160a01b0316875295820195908201906001016142db565b60208082528181018390526000906040808401600586901b8501820187855b8881101561443f57603f19808985030185528235603e198c360301811261434e57600080fd5b8b0163ffffffff61435e8261396b565b1685528781013560be1982360301811261437757600080fd5b85890188905201803561438981613946565b6001600160a01b0316858801526143a1818901613f32565b606060ff808316828901526143b78a8501613f32565b92506080818416818a01526143cd838601613f32565b935060a09250818416838a01526143e681860186614283565b60c08b810152945091506144019050610100890184836142cb565b92505061441081840184614283565b93509050838783030160e08801526144298284836142cb565b978a019796505050928701925050600101614328565b509098975050505050505050565b600082601f83011261445e57600080fd5b81356001600160401b0381111561447757614477613ea2565b61448a601f8201601f1916602001613f02565b81815284602083860101111561449f57600080fd5b816020850160208301376000918101602001919091529392505050565b600060e082360312156144ce57600080fd5b6144d6613ee0565b6144df8361397f565b81526144ed6020840161396b565b60208201526144fe6040840161395b565b604082015261450f6060840161396b565b60608201526080830135608082015260a083013560a082015260c08301356001600160401b0381111561454157600080fd5b61454d3682860161444d565b60c08301525092915050565b6001600160a01b038316815260406020820181905260009061061690830184613be1565b60006020828403121561458f57600080fd5b5051919050565b600060ff8216806145a9576145a9614156565b6000190192915050565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009061061390830184613d16565b60ff60f81b8960f81b1681526001600160401b0360c01b8860c01b166001820152600063ffffffff60e01b808960e01b16600984015287600d840152808760e01b16602d84015250846031830152836051830152825161464a816071850160208701613bbd565b919091016071019998505050505050505050565b6000808585111561466e57600080fd5b8386111561467b57600080fd5b5050820193919092039150565b6001600160f81b031981358181169160018510156146b05780818660010360031b1b83161692505b505092915050565b6001600160e01b031981358181169160048510156146b05760049490940360031b84901b1690921692915050565b6001600160c01b031981358181169160088510156146b05760089490940360031b84901b1690921692915050565b803560208310156105f757600019602084900360031b1b1692915050565b60ff82811682821603908111156105f7576105f7614156565b600060ff83168061476c57634e487b7160e01b600052601260045260246000fd5b8060ff84160491505092915050565b6001600160f01b031981358181169160028510156146b05760029490940360031b84901b1690921692915050565b60ff81811683821601908111156105f7576105f7614156565b6001600160a01b03861681526080602082018190526000906147e690830187613be1565b82810360408401526147f98186886141aa565b9050828103606084015261480d8185613be1565b98975050505050505050565b6000835161482b818460208801613bbd565b83519083019061483f818360208801613bbd565b01949350505050565b60608152600061485b6060830186613cd1565b6020838203602085015261486f8287613cd1565b84810360408601528551808252602080880194509091019060005b8181101561443f5784518352938301939183019160010161488a565b600084516148b8818460208901613bbd565b8201838582376000930192835250909392505050565b60f88a811b6001600160f81b0319908116835260f08b811b6001600160f01b031990811660018601528b841b8316600386015260808b901b6001600160801b031916600486015289841b831660148601529088901b1660158401529085901b166017820152600061494e601883018560801b6001600160801b0319169052565b50602881019190915260480198975050505050505050565b8281526000825161497e816020850160208701613bbd565b91909101602001939250505056fea2646970667358221220aa3c2aa17972b91a5ad74e17a6fe1bc85298f9e147161924798ce8a3a1115efc64736f6c6343000816003360806040523480156200001157600080fd5b506040516200313b3803806200313b83398101604081905262000034916200046f565b6001805460ff61ffff60e81b01191661017760ed1b179055600280546001600160a01b0319166001600160a01b038581169190911790915584908490612ee090859085908216156200008f576200008d60008362000226565b505b60005b8551811015620000f457620000ea7f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de878381518110620000d657620000d662000523565b60200260200101516200022660201b60201c565b5060010162000092565b5060005b815181101562000146576200013c7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775838381518110620000d657620000d662000523565b50600101620000f8565b505060016004908155600680546001600160a01b0319166001600160a01b038d169081179091556040805163416ecebf60e01b8152905191965063416ecebf95508083019450602093509091908290030181865afa158015620001ad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001d3919062000539565b6006805463ffffffff92909216600160a01b0263ffffffff60a01b199092169190911790555050600780546001600160a01b039094166001600160a01b03199094169390931790925550620005a5915050565b60007f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca831480156200027957506000838152602081815260408083206001600160a01b038616845290915290205460ff16155b15620002c65760018054601590620002a190600160a81b90046001600160401b031662000568565b91906101000a8154816001600160401b0302191690836001600160401b031602179055505b620002d28383620002de565b50600190505b92915050565b6000828152602081815260408083206001600160a01b038516845290915281205460ff1662000383576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556200033a3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001620002d8565b506000620002d8565b80516001600160a01b0381168114620003a457600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620003d157600080fd5b815160206001600160401b0380831115620003f057620003f0620003a9565b8260051b604051601f19603f83011681018181108482111715620004185762000418620003a9565b60405293845260208187018101949081019250878511156200043957600080fd5b6020870191505b84821015620004645762000454826200038c565b8352918301919083019062000440565b979650505050505050565b60008060008060008060c087890312156200048957600080fd5b62000494876200038c565b9550620004a4602088016200038c565b60408801519095506001600160401b0380821115620004c257600080fd5b620004d08a838b01620003bf565b9550620004e060608a016200038c565b9450620004f060808a016200038c565b935060a08901519150808211156200050757600080fd5b506200051689828a01620003bf565b9150509295509295509295565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156200054c57600080fd5b815163ffffffff811681146200056157600080fd5b9392505050565b60006001600160401b038281166002600160401b031981016200059b57634e487b7160e01b600052601160045260246000fd5b6001019392505050565b612b8680620005b56000396000f3fe60806040526004361061020e5760003560e01c8063724e78da11610118578063c358de0a116100a0578063cd88b9031161006f578063cd88b903146106af578063cfc32570146106cf578063d2ae2104146106e2578063d547741f14610721578063e395eb5c1461074157600080fd5b8063c358de0a1461062a578063c416aa511461064a578063c7b2370b1461066f578063c8f8dcd11461068f57600080fd5b806391d14854116100e757806391d14854146105065780639e94496514610526578063a217fddf146105d5578063c015bb7d146105ea578063c2803b2c1461060a57600080fd5b8063724e78da146104a0578063741bef1a146104c05780637cd44734146104e05780638624ba07146104f357600080fd5b80633146646a1161019b578063475b6d9e1161016a578063475b6d9e146103fd5780635c975abb146104105780635e280f1114610428578063709eb66414610460578063717e8a421461048057600080fd5b80633146646a1461038a57806336568abe146103aa5780633927c075146103ca5780633d85ac33146103dd57600080fd5b806316c38b3c116101e257806316c38b3c146102bf578063248a9ca3146102df57806326e67a371461031d5780632de113761461034a5780632f2ff15d1461036a57600080fd5b8062bf2e801461021357806301e336671461024d57806301ffc9a71461026f5780631095b6d71461029f575b600080fd5b34801561021f57600080fd5b5060015461023590600160e81b900461ffff1681565b60405161ffff90911681526020015b60405180910390f35b34801561025957600080fd5b5061026d610268366004611dca565b61077a565b005b34801561027b57600080fd5b5061028f61028a366004611e06565b6107a3565b6040519015158152602001610244565b3480156102ab57600080fd5b5061026d6102ba366004611dca565b6107da565b3480156102cb57600080fd5b5061026d6102da366004611e30565b6108ed565b3480156102eb57600080fd5b5061030f6102fa366004611e52565b60009081526020819052604090206001015490565b604051908152602001610244565b34801561032957600080fd5b5061033d610338366004611e7f565b610912565b6040516102449190611e9a565b34801561035657600080fd5b5061028f610365366004611ee1565b610999565b34801561037657600080fd5b5061026d610385366004611efc565b610a30565b34801561039657600080fd5b5061026d6103a5366004611f70565b610a55565b3480156103b657600080fd5b5061026d6103c5366004611efc565b610ae5565b61026d6103d8366004612017565b610afe565b3480156103e957600080fd5b5061026d6103f8366004612158565b610bb9565b61026d61040b366004612273565b610d30565b34801561041c57600080fd5b5060015460ff1661028f565b34801561043457600080fd5b50600654610448906001600160a01b031681565b6040516001600160a01b039091168152602001610244565b34801561046c57600080fd5b5061030f61047b3660046122f1565b610d72565b34801561048c57600080fd5b5061030f61049b3660046122f1565b610e79565b3480156104ac57600080fd5b5061026d6104bb366004611ee1565b610fa5565b3480156104cc57600080fd5b50600254610448906001600160a01b031681565b61026d6104ee36600461235f565b61100b565b61026d610501366004612424565b6110b6565b34801561051257600080fd5b5061028f610521366004611efc565b6111c1565b34801561053257600080fd5b50610592610541366004611e7f565b600560205260009081526040902080546001909101546001600160401b038083169261ffff600160401b820416926001600160801b03600160501b90920482169291811691600160801b9091041685565b604080516001600160401b03968716815261ffff90951660208601526001600160801b03938416908501529116606083015291909116608082015260a001610244565b3480156105e157600080fd5b5061030f600081565b3480156105f657600080fd5b5061030f610605366004612496565b6111ea565b34801561061657600080fd5b50600754610448906001600160a01b031681565b34801561063657600080fd5b5061026d6106453660046124e8565b611312565b34801561065657600080fd5b506001546104489061010090046001600160a01b031681565b34801561067b57600080fd5b5061026d61068a366004611ee1565b61137a565b34801561069b57600080fd5b5061030f6106aa366004612496565b6113e8565b3480156106bb57600080fd5b5061026d6106ca366004612503565b6114e3565b61026d6106dd366004612588565b61151b565b3480156106ee57600080fd5b5060015461070990600160a81b90046001600160401b031681565b6040516001600160401b039091168152602001610244565b34801561072d57600080fd5b5061026d61073c366004611efc565b6115de565b34801561074d57600080fd5b5060065461076590600160a01b900463ffffffff1681565b60405163ffffffff9091168152602001610244565b600080516020612b3183398151915261079281611603565b61079d848484611610565b50505050565b60006001600160e01b03198216637965db0b60e01b14806107d457506301ffc9a760e01b6001600160e01b03198316145b92915050565b600080516020612b318339815191526107f281611603565b61081c7f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de856111c1565b61083957604051635ee08b9760e01b815260040160405180910390fd5b604051637ecdf29160e11b81526001600160a01b0384811660048301526024820184905285169063fd9be52290604401600060405180830381600087803b15801561088357600080fd5b505af1158015610897573d6000803e3d6000fd5b5050604080516001600160a01b038089168252871660208201529081018590527f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb9250606001905060405180910390a150505050565b60006108f881611603565b811561090a57610906611638565b5050565b61090661168c565b63ffffffff811660009081526003602090815260409182902080548351818402810184019094528084526060939283018282801561098d57602002820191906000526020600020906000905b825461010083900a900460ff1681526020600192830181810494850194909303909202910180841161095e5790505b50505050509050919050565b60006109c57f4270fae16c6d150d00e80b689daca99e8073b1838ff2b6063a37be9d851283e4836111c1565b156109d257506000919050565b600154600160a81b90046001600160401b03161580610a165750610a167f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca836111c1565b15610a2357506001919050565b506000919050565b919050565b600082815260208190526040902060010154610a4b81611603565b61079d83836116c5565b600080516020612b31833981519152610a6d81611603565b610a7561175b565b600754604051631cca20df60e31b81526001600160a01b039091169063e65106f890610aa9908790879087906004016125ed565b600060405180830381600087803b158015610ac357600080fd5b505af1158015610ad7573d6000803e3d6000fd5b5050505061079d6001600455565b60405163dec9f03160e01b815260040160405180910390fd5b600080516020612b31833981519152610b1681611603565b610b1e61175b565b610b3e88610b2c8686611785565b610b3687876117a8565b8a8a8a6117c1565b50600754604051631cca20df60e31b81526001600160a01b039091169063e65106f890610b73908790879087906004016125ed565b600060405180830381600087803b158015610b8d57600080fd5b505af1158015610ba1573d6000803e3d6000fd5b50505050610baf6001600455565b5050505050505050565b600080516020612b31833981519152610bd181611603565b60005b8251811015610cf4576000838281518110610bf157610bf1612611565b6020908102919091018101516040805160a08082018352838501516001600160401b03908116835260608086015161ffff9081168589019081526080808901516001600160801b03908116888a01908152968a01518116948801948552888a01518616918801918252985163ffffffff1660009081526005909a529690982094518554985194518816600160501b026fffffffffffffffffffffffffffffffff60501b1995909216600160401b0269ffffffffffffffffffff1990991690841617979097179290921695909517825551600191820180549351909516600160801b026001600160c01b031990931693169290921717909155919091019050610bd4565b507fb99f6de5e22c60c178b03bfacf2daeb4b6089f5b37e0fe2c48a5d5141191fc5382604051610d249190612627565b60405180910390a15050565b600080516020612b31833981519152610d4881611603565b610d5061175b565b610d5e8787878787876117c1565b50610d696001600455565b50505050505050565b600084610d7e81610999565b610d9b57604051634ab5ebcd60e01b815260040160405180910390fd5b610da3611928565b6040805160a0810182526002546001600160a01b03908116825263ffffffff8a1660208084018290528a831684860152606084018a905260015461ffff600160e81b8204166080860152600092835260059091529084902093516321a7700b60e11b815292936101009091049091169163434ee01691610e2c918591908a908a90600401612714565b602060405180830381865afa158015610e49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e6d919061277c565b98975050505050505050565b60007f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de610ea581611603565b85610eaf81610999565b610ecc57604051634ab5ebcd60e01b815260040160405180910390fd5b6040805160a0810182526002546001600160a01b03908116825263ffffffff8b1660208084018290528b831684860152606084018b905260015461ffff600160e81b820416608086015260009283526005909152908490209351632b377bb160e11b815292936101009091049091169163566ef76291610f55918591908b908b90600401612714565b6020604051808303816000875af1158015610f74573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f98919061277c565b9998505050505050505050565b600080516020612b31833981519152610fbd81611603565b600280546001600160a01b0319166001600160a01b0384169081179091556040519081527ff724a45d041687842411f2b977ef22ab8f43c8f1104f4592b42a00f9b34a643d90602001610d24565b600080516020612b3183398151915261102381611603565b61102b61175b565b6006546040516391d20fa160e01b81526001600160a01b03909116906391d20fa1908490349061106d908f908f908f908f908f908f908f908f90600401612795565b6000604051808303818589803b15801561108657600080fd5b5088f115801561109a573d6000803e3d6000fd5b5050505050506110aa6001600455565b50505050505050505050565b600080516020612b318339815191526110ce81611603565b6110d661175b565b600654600090611104906020850190600160a01b900463ffffffff166110fc8287611ee1565b8989896117c1565b90506000611112823461280b565b6006549091506001600160a01b0316630c0c389e60e0860135836020880161113a818a611ee1565b60808a013561114c60a08c018c61281e565b61115960c08e018e61281e565b6040518a63ffffffff1660e01b815260040161117b979695949392919061289d565b6000604051808303818589803b15801561119457600080fd5b5088f11580156111a8573d6000803e3d6000fd5b50505050505050506111ba6001600455565b5050505050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b60007f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de61121681611603565b8461122081610999565b61123d57604051634ab5ebcd60e01b815260040160405180910390fd5b604080516060810182526002546001600160a01b039081168252888116602080840191909152600154600160e81b810461ffff1684860152600654600160a01b900463ffffffff16600090815260059092529084902093516319400de160e21b81529293610100909104909116916365003784916112c4918591908b908b906004016128f3565b6020604051808303816000875af11580156112e3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611307919061277c565b979650505050505050565b600080516020612b3183398151915261132a81611603565b6001805461ffff60e81b1916600160e81b61ffff8516908102919091179091556040519081527f7af0ac740036ffb1c97b03697859d729e80a44ae5030543d64971c313565ab4d90602001610d24565b600080516020612b3183398151915261139281611603565b60018054610100600160a81b0319166101006001600160a01b038516908102919091179091556040519081527f1399be28223800f8669b3ba5f8721d9fc16fc4e8d0bbf98378791c8c5a3015e090602001610d24565b6000836113f481610999565b61141157604051634ab5ebcd60e01b815260040160405180910390fd5b604080516060810182526002546001600160a01b039081168252878116602080840191909152600154600160e81b810461ffff1684860152600654600160a01b900463ffffffff16600090815260059092529084902093516319be3d4f60e11b815292936101009091049091169163337c7a9e91611498918591908a908a906004016128f3565b602060405180830381865afa1580156114b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114d9919061277c565b9695505050505050565b600080516020612b318339815191526114fb81611603565b63ffffffff841660009081526003602052604090206111ba908484611cf5565b600080516020612b3183398151915261153381611603565b61153b61175b565b6006546001600160a01b0316630c0c389e60e084013534602086016115608188611ee1565b608088013561157260a08a018a61281e565b61157f60c08c018c61281e565b6040518a63ffffffff1660e01b81526004016115a1979695949392919061289d565b6000604051808303818589803b1580156115ba57600080fd5b5088f11580156115ce573d6000803e3d6000fd5b5050505050506109066001600455565b6000828152602081905260409020600101546115f981611603565b61079d838361194e565b61160d81336119d8565b50565b6001600160a01b03831661162d576116288282611a16565b505050565b611628838383611ac3565b611640611928565b6001805460ff1916811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b6040516001600160a01b03909116815260200160405180910390a1565b611694611afe565b6001805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa3361166f565b60007f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca831480156116fd57506116fb83836111c1565b155b15611747576001805460159061172290600160a81b90046001600160401b0316612943565b91906101000a8154816001600160401b0302191690836001600160401b031602179055505b6117518383611b21565b5060019392505050565b60026004540361177e57604051633ee5aeb560e01b815260040160405180910390fd5b6002600455565b60006117956031602d8486612969565b61179e91612993565b60e01c9392505050565b60006117ba6117b78484611bb3565b90565b9392505050565b600080836001600160401b038111156117dc576117dc6120aa565b604051908082528060200260200182016040528015611805578160200160208202803683370190505b50905060005b848110156118db57600086868381811061182757611827612611565b90506040020180360381019061183d91906129c3565b9050600081600001516001600160a01b031682602001518790604051600060405180830381858888f193505050503d8060008114611897576040519150601f19603f3d011682016040523d82523d6000602084013e61189c565b606091505b50509050808484815181106118b3576118b3612611565b9115156020928302919091018201528201516118cf9086612a19565b9450505060010161180b565b507f1f48172553121d8bf273ce457a5a3dd180d464e0add3e0143045b7fa039c346888888888888660405161191596959493929190612a6a565b60405180910390a1509695505050505050565b60015460ff161561194c5760405163d93c066560e01b815260040160405180910390fd5b565b60007f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca83148015611984575061198483836111c1565b156119ce57600180546015906119a990600160a81b90046001600160401b0316612aef565b91906101000a8154816001600160401b0302191690836001600160401b031602179055505b6117518383611bcc565b6119e282826111c1565b6109065760405163e2517d3f60e01b81526001600160a01b0382166004820152602481018390526044015b60405180910390fd5b6001600160a01b038216611a3d576040516306b7a93160e41b815260040160405180910390fd5b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611a8a576040519150601f19603f3d011682016040523d82523d6000602084013e611a8f565b606091505b505090508061162857604051631196f20d60e21b81526001600160a01b038416600482015260248101839052604401611a0d565b6001600160a01b038216611aea576040516306b7a93160e41b815260040160405180910390fd5b6116286001600160a01b0384168383611c37565b60015460ff1661194c57604051638dfc202b60e01b815260040160405180910390fd5b6000611b2d83836111c1565b611bab576000838152602081815260408083206001600160a01b03861684529091529020805460ff19166001179055611b633390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016107d4565b5060006107d4565b6000611bc3605160318486612969565b6117ba91612b12565b6000611bd883836111c1565b15611bab576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016107d4565b604080516001600160a01b03841660248201526044808201849052825180830390910181526064909101909152602080820180516001600160e01b031663a9059cbb60e01b1781528251611628938793909260009283929183919082885af180611ca7576040513d6000823e3d81fd5b50506000513d91508115611cbf578060011415611ccc565b6001600160a01b0384163b155b1561079d57604051635274afe760e01b81526001600160a01b0385166004820152602401611a0d565b82805482825590600052602060002090601f01602090048101928215611d8e5791602002820160005b83821115611d5f57833560ff1683826101000a81548160ff021916908360ff1602179055509260200192600101602081600001049283019260010302611d1e565b8015611d8c5782816101000a81549060ff0219169055600101602081600001049283019260010302611d5f565b505b50611d9a929150611d9e565b5090565b5b80821115611d9a5760008155600101611d9f565b80356001600160a01b0381168114610a2b57600080fd5b600080600060608486031215611ddf57600080fd5b611de884611db3565b9250611df660208501611db3565b9150604084013590509250925092565b600060208284031215611e1857600080fd5b81356001600160e01b0319811681146117ba57600080fd5b600060208284031215611e4257600080fd5b813580151581146117ba57600080fd5b600060208284031215611e6457600080fd5b5035919050565b803563ffffffff81168114610a2b57600080fd5b600060208284031215611e9157600080fd5b6117ba82611e6b565b6020808252825182820181905260009190848201906040850190845b81811015611ed557835160ff1683529284019291840191600101611eb6565b50909695505050505050565b600060208284031215611ef357600080fd5b6117ba82611db3565b60008060408385031215611f0f57600080fd5b82359150611f1f60208401611db3565b90509250929050565b60008083601f840112611f3a57600080fd5b5081356001600160401b03811115611f5157600080fd5b602083019150836020828501011115611f6957600080fd5b9250929050565b600080600060408486031215611f8557600080fd5b83356001600160401b03811115611f9b57600080fd5b611fa786828701611f28565b909790965060209590950135949350505050565b600060608284031215611fcd57600080fd5b50919050565b60008083601f840112611fe557600080fd5b5081356001600160401b03811115611ffc57600080fd5b6020830191508360208260061b8501011115611f6957600080fd5b600080600080600080600060e0888a03121561203257600080fd5b61203c8989611fbb565b965060608801356001600160401b038082111561205857600080fd5b6120648b838c01611fd3565b909850965060808a0135955060a08a013591508082111561208457600080fd5b506120918a828b01611f28565b989b979a5095989497959660c090950135949350505050565b634e487b7160e01b600052604160045260246000fd5b60405160c081016001600160401b03811182821017156120e2576120e26120aa565b60405290565b604051601f8201601f191681016001600160401b0381118282101715612110576121106120aa565b604052919050565b80356001600160401b0381168114610a2b57600080fd5b803561ffff81168114610a2b57600080fd5b80356001600160801b0381168114610a2b57600080fd5b6000602080838503121561216b57600080fd5b82356001600160401b038082111561218257600080fd5b818501915085601f83011261219657600080fd5b8135818111156121a8576121a86120aa565b6121b6848260051b016120e8565b818152848101925060c09182028401850191888311156121d557600080fd5b938501935b828510156122675780858a0312156121f25760008081fd5b6121fa6120c0565b61220386611e6b565b8152612210878701612118565b878201526040612221818801612118565b90820152606061223287820161212f565b908201526080612243878201612141565b9082015260a0612254878201612141565b90820152845293840193928501926121da565b50979650505050505050565b60008060008060008060e0878903121561228c57600080fd5b6122968888611fbb565b95506122a460608801611e6b565b94506122b260808801611db3565b935060a08701356001600160401b038111156122cd57600080fd5b6122d989828a01611fd3565b979a969950949794969560c090950135949350505050565b60008060008060006080868803121561230957600080fd5b61231286611e6b565b945061232060208701611db3565b93506040860135925060608601356001600160401b0381111561234257600080fd5b61234e88828901611f28565b969995985093965092949392505050565b600080600080600080600080600060e08a8c03121561237d57600080fd5b6123868a611db3565b985061239460208b01611db3565b975060408a013596506123a960608b0161212f565b955060808a01356001600160401b03808211156123c557600080fd5b6123d18d838e01611f28565b909750955060a08c01359150808211156123ea57600080fd5b506123f78c828d01611f28565b9a9d999c50979a9699959894979660c00135949350505050565b60006101008284031215611fcd57600080fd5b6000806000806060858703121561243a57600080fd5b84356001600160401b038082111561245157600080fd5b61245d88838901611fd3565b909650945060208701359350604087013591508082111561247d57600080fd5b5061248a87828801612411565b91505092959194509250565b6000806000604084860312156124ab57600080fd5b6124b484611db3565b925060208401356001600160401b038111156124cf57600080fd5b6124db86828701611f28565b9497909650939450505050565b6000602082840312156124fa57600080fd5b6117ba8261212f565b60008060006040848603121561251857600080fd5b61252184611e6b565b925060208401356001600160401b038082111561253d57600080fd5b818601915086601f83011261255157600080fd5b81358181111561256057600080fd5b8760208260051b850101111561257557600080fd5b6020830194508093505050509250925092565b60006020828403121561259a57600080fd5b81356001600160401b038111156125b057600080fd5b6125bc84828501612411565b949350505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6040815260006126016040830185876125c4565b9050826020830152949350505050565b634e487b7160e01b600052603260045260246000fd5b602080825282518282018190526000919060409081850190868401855b828110156126b7578151805163ffffffff168552868101516001600160401b039081168887015286820151168686015260608082015161ffff16908601526080808201516001600160801b039081169187019190915260a091820151169085015260c09093019290850190600101612644565b5091979650505050505050565b80546001600160401b03808216845261ffff8260401c1660208501526001600160801b03808360501c16604086015260018401549250808316606086015250808260801c16608085015250505050565b600061016060018060a01b0380885116845263ffffffff6020890151166020850152806040890151166040850152506060870151606084015261ffff608088015116608084015261276860a08401876126c4565b8061014084015261130781840185876125c4565b60006020828403121561278e57600080fd5b5051919050565b6001600160a01b038981168252881660208201526040810187905261ffff8616606082015260c0608082018190526000906127d390830186886125c4565b82810360a08401526127e68185876125c4565b9b9a5050505050505050505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156107d4576107d46127f5565b6000808335601e1984360301811261283557600080fd5b8301803591506001600160401b0382111561284f57600080fd5b602001915036819003821315611f6957600080fd5b63ffffffff61287282611e6b565b168252602081013560208301526001600160401b0361289360408301612118565b1660408301525050565b6128a78189612864565b60018060a01b038716606082015285608082015260e060a082015260006128d260e0830186886125c4565b82810360c08401526128e58185876125c4565b9a9950505050505050505050565b84516001600160a01b0390811682526020808701519091169082015260408086015161ffff1690820152600061012061292f60608401876126c4565b8061010084015261130781840185876125c4565b60006001600160401b0380831681810361295f5761295f6127f5565b6001019392505050565b6000808585111561297957600080fd5b8386111561298657600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156129bb5780818660040360031b1b83161692505b505092915050565b6000604082840312156129d557600080fd5b604051604081018181106001600160401b03821117156129f7576129f76120aa565b604052612a0383611db3565b8152602083013560208201528091505092915050565b808201808211156107d4576107d46127f5565b60008151808452602080850194506020840160005b83811015612a5f578151151587529582019590820190600101612a41565b509495945050505050565b600060e08201612a7a838a612864565b63ffffffff881660608401526001600160a01b03878116608085015260e060a0850152908590528590610100840160005b87811015612adc5782612abd85611db3565b1682526020848101359083015260409384019390910190600101612aab565b5084810360c08601526127e68187612a2c565b60006001600160401b03821680612b0857612b086127f5565b6000190192915050565b803560208310156107d457600019602084900360031b1b169291505056fea49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775a264697066735822122003e7fb8f464aa4a064aa9568ebbe17fdc3d0618228d79d9a1ced9212fb3e0e6b64736f6c6343000816003360c060405234801561001057600080fd5b5060405161162538038061162583398101604081905261002f916100c9565b338061005557604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b61005e81610079565b5063ffffffff1660a052670de0b6b3a76400006080526100f6565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100db57600080fd5b815163ffffffff811681146100ef57600080fd5b9392505050565b60805160a0516115036101226000396000818161021501526102b20152600061075501526115036000f3fe60806040526004361061008a5760003560e01c8063566ef76211610059578063566ef7621461012c578063650037841461014c578063715018a61461016c5780638da5cb5b14610181578063f2fde38b146101a957600080fd5b806301e3366714610096578063337c7a9e146100b8578063434ee016146100eb57806354fd4d501461010b57600080fd5b3661009157005b600080fd5b3480156100a257600080fd5b506100b66100b13660046110c2565b6101c9565b005b3480156100c457600080fd5b506100d86100d336600461115f565b6101e1565b6040519081526020015b60405180910390f35b3480156100f757600080fd5b506100d86101063660046111cb565b6103c1565b34801561011757600080fd5b506040805160018082526020820152016100e2565b34801561013857600080fd5b506100d86101473660046111cb565b61058c565b34801561015857600080fd5b506100d861016736600461115f565b6105a3565b34801561017857600080fd5b506100b66105b1565b34801561018d57600080fd5b506000546040516001600160a01b0390911681526020016100e2565b3480156101b557600080fd5b506100b66101c4366004611218565b6105c5565b6101d1610603565b6101dc838383610630565b505050565b60006101f0602085018561123a565b67ffffffffffffffff166000036102475760405163c3baa0b760e01b815263ffffffff7f00000000000000000000000000000000000000000000000000000000000000001660048201526024015b60405180910390fd5b6000808061028560018261025e60208b018b61123a565b61026e60a08c0160808d0161123a565b61027e60808d0160608e01611279565b8b8b610653565b91945092509050600080808061029e60208d018d611218565b604051632229049360e21b815263ffffffff7f00000000000000000000000000000000000000000000000000000000000000008116600483015287166024820152604481018890526001600160a01b0391909116906388a4124c90606401608060405180830381865afa158015610319573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061033d9190611296565b929650909450925090506103878461035b60408e0160208f016112eb565b8e604001602081019061036e91906112eb565b8e60400160208101906103819190611279565b856106e5565b97506103a78784848f60400160208101906103a291906112eb565b6107ba565b6103b19089611325565b9c9b505050505050505050505050565b60006103d0602085018561123a565b67ffffffffffffffff16600003610413576103f1604086016020870161133e565b60405163c3baa0b760e01b815263ffffffff909116600482015260240161023e565b6000806104678161043361042d60408b0160208c0161133e565b50600090565b61044060208a018a61123a565b61045060a08b0160808c0161123a565b61046060808c0160608d01611279565b8a8a610653565b509092509050600080808061047f60208c018c611218565b6001600160a01b03166388a4124c61049d60408e0160208f0161133e565b6040516001600160e01b031960e084901b16815263ffffffff91909116600482015260608e0135602482015260448101889052606401608060405180830381865afa1580156104f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105149190611296565b929650909450925090506105588461053260408d0160208e016112eb565b8d608001602081019061054591906112eb565b8d60400160208101906103819190611279565b96506105738684848e60800160208101906103a291906112eb565b61057d9088611325565b9b9a5050505050505050505050565b600061059a858585856103c1565b95945050505050565b600061059a858585856101e1565b6105b9610603565b6105c3600061080f565b565b6105cd610603565b6001600160a01b0381166105f757604051631e4fbdf760e01b81526000600482015260240161023e565b6106008161080f565b50565b6000546001600160a01b031633146105c35760405163118cdaa760e01b815233600482015260240161023e565b6001600160a01b038316610648576101dc828261085f565b6101dc83838361090c565b60008060008061066686868d8d8b610947565b805160608201516080830151919650935090915061068e9067ffffffffffffffff8a16611364565b60208201516106a79067ffffffffffffffff8c16611325565b6106b19190611325565b92508060400151156106d75760646106ca846066611364565b6106d4919061137b565b92505b509750975097945050505050565b60008061ffff8616156106f857856106fa565b845b9050600061271061070f61ffff84168a611364565b610719919061137b565b90506001600160801b038416158061073857506001600160801b038516155b1561074657915061059a9050565b600088856001600160801b03167f0000000000000000000000000000000000000000000000000000000000000000886001600160801b03166107889190611364565b610792919061137b565b61079c9190611325565b90508181116107ab57816107ad565b805b9998505050505050505050565b60008415610807576127108261ffff16846001600160801b0316866001600160801b0316886107e99190611364565b6107f3919061137b565b6107fd9190611364565b61059a919061137b565b949350505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038216610886576040516306b7a93160e41b815260040160405180910390fd5b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146108d3576040519150601f19603f3d011682016040523d82523d6000602084013e6108d8565b606091505b50509050806101dc57604051631196f20d60e21b81526001600160a01b03841660048201526024810183905260440161023e565b6001600160a01b038216610933576040516306b7a93160e41b815260040160405180910390fd5b6101dc6001600160a01b0384168383610d50565b6109816040518060a001604052806000815260200160008152602001600015158152602001600063ffffffff168152602001600081525090565b60008590036109a25760405162575ea160e01b815260040160405180910390fd5b600080805b87831015610c725760003681806109bf8d8d89610da2565b99509195509350915086905060001960ff851601610a7f578a156109fb5760405163052e551560e01b815260ff8516600482015260240161023e565b600080610a088585610df8565b915091508b8015610a2257506000816001600160801b0316115b15610a455760405163052e551560e01b815260ff8716600482015260240161023e565b806001600160801b03168a600001818151610a609190611325565b905250610a766001600160801b03831689611325565b97505050610c69565b60011960ff851601610ae3578a15610aaf5760405163052e551560e01b815260ff8516600482015260240161023e565b6000610abb8484610e5d565b509050806001600160801b031689600001818151610ad99190611325565b905250610c699050565b60021960ff851601610ba8578915610b135760405163052e551560e01b815260ff8516600482015260240161023e565b600080610b208585610e9b565b9250925050816001600160801b0316600003610b4f5760405163a169d0e160e01b815260040160405180910390fd5b806001600160801b03168a600001818151610b6a9190611325565b90525060208a0180516001600160801b0384169190610b8a908390611325565b90525060808a01805190610b9d8261139d565b815250505050610c69565b60031960ff851601610bc05760016040890152610c69565b60041960ff851601610c4b578a610bef5760405163052e551560e01b815260ff8516600482015260240161023e565b6000806000610bfe8686610f0f565b925092509250806001600160801b03168b600001818151610c1f9190611325565b905250610c356001600160801b0384168a611325565b9850610c4182896113b6565b9750505050610c69565b60405163052e551560e01b815260ff8516600482015260240161023e565b505050506109a7565b828814610c9557604051634c83bb7560e11b81526004810184905260240161023e565b83516001600160801b0386161015610cd45783516040516242670160e11b815260048101919091526001600160801b038616602482015260440161023e565b81600003610cf557604051630e5eb8f360e41b815260040160405180910390fd5b868015610d06575063ffffffff8116155b15610d24576040516336619f8360e11b815260040160405180910390fd5b8184602001818151610d369190611325565b90525063ffffffff16606084015250909695505050505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526101dc908490610f7a565b600036816001840181610db6888884610ff1565b600292909201919050610dca888884611018565b94506001820161ffff82168301610de381838b8d6113da565b979b909a50969850505061ffff160193505050565b60008060108314801590610e0d575060208314155b15610e2b57604051634796aee160e01b815260040160405180910390fd5b610e378484600061103d565b915060208314610e48576000610e54565b610e548484601061103d565b90509250929050565b60008060308314610e81576040516361d0c2c760e11b815260040160405180910390fd5b610e8d8484600061103d565b9150610e5484846010611064565b6000808060128414801590610eb1575060228414155b15610ecf57604051638b4aa70b60e01b815260040160405180910390fd5b610edb85856000610ff1565b9250610ee98585600261103d565b915060228414610efa576000610f06565b610f068585601261103d565b90509250925092565b6000808060148414801590610f25575060248414155b15610f4357604051636f5bff2160e11b815260040160405180910390fd5b610f4f8585600061103d565b9250610f5d8585601061107f565b915060248414610f6e576000610f06565b610f068585601461103d565b600080602060008451602086016000885af180610f9d576040513d6000823e3d81fd5b50506000513d91508115610fb5578060011415610fc2565b6001600160a01b0384163b155b15610feb57604051635274afe760e01b81526001600160a01b038516600482015260240161023e565b50505050565b600060028201611003818486886113da565b61100c91611404565b60f01c95945050505050565b600083838381811061102c5761102c611434565b919091013560f81c95945050505050565b60006010820161104f818486886113da565b6110589161144a565b60801c95945050505050565b600060208201611076818486886113da565b61059a91611481565b600060048201611091818486886113da565b61109a9161149f565b60e01c95945050505050565b80356001600160a01b03811681146110bd57600080fd5b919050565b6000806000606084860312156110d757600080fd5b6110e0846110a6565b92506110ee602085016110a6565b9150604084013590509250925092565b600060a0828403121561111057600080fd5b50919050565b60008083601f84011261112857600080fd5b50813567ffffffffffffffff81111561114057600080fd5b60208301915083602082850101111561115857600080fd5b9250929050565b60008060008084860361012081121561117757600080fd5b606081121561118557600080fd5b5084935061119686606087016110fe565b925061010085013567ffffffffffffffff8111156111b357600080fd5b6111bf87828801611116565b95989497509550505050565b60008060008061016085870312156111e257600080fd5b6111ec86866110fe565b93506111fb8660a087016110fe565b925061014085013567ffffffffffffffff8111156111b357600080fd5b60006020828403121561122a57600080fd5b611233826110a6565b9392505050565b60006020828403121561124c57600080fd5b813567ffffffffffffffff8116811461123357600080fd5b6001600160801b038116811461060057600080fd5b60006020828403121561128b57600080fd5b813561123381611264565b600080600080608085870312156112ac57600080fd5b8451935060208501516112be81611264565b60408601519093506112cf81611264565b60608601519092506112e081611264565b939692955090935050565b6000602082840312156112fd57600080fd5b813561ffff8116811461123357600080fd5b634e487b7160e01b600052601160045260246000fd5b808201808211156113385761133861130f565b92915050565b60006020828403121561135057600080fd5b813563ffffffff8116811461123357600080fd5b80820281158282048414176113385761133861130f565b60008261139857634e487b7160e01b600052601260045260246000fd5b500490565b6000600182016113af576113af61130f565b5060010190565b63ffffffff8181168382160190808211156113d3576113d361130f565b5092915050565b600080858511156113ea57600080fd5b838611156113f757600080fd5b5050820193919092039150565b6001600160f01b0319813581811691600285101561142c5780818660020360031b1b83161692505b505092915050565b634e487b7160e01b600052603260045260246000fd5b6fffffffffffffffffffffffffffffffff19813581811691601085101561142c5760109490940360031b84901b1690921692915050565b8035602083101561133857600019602084900360031b1b1692915050565b6001600160e01b0319813581811691600485101561142c5760049490940360031b84901b169092169291505056fea26469706673582212204c4f5a98e90d6be97596e1e9898b33b6b2d63dca8ef38882eb89a478158f7b6b64736f6c6343000816003360c06040523480156200001157600080fd5b5060405162003bf738038062003bf78339810160408190526200003491620004de565b6001805460ff61ffff60e81b01191661017760ed1b179055600280546001600160a01b0319166001600160a01b03861617905582828686612ee060008660005b8551811015620000d657620000cc7f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de878381518110620000b857620000b8620005c2565b60200260200101516200028060201b60201c565b5060010162000074565b5060005b815181101562000128576200011e7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775838381518110620000b857620000b8620005c2565b50600101620000da565b505050505050806001600160401b03166000036200015957604051635f86e17760e01b815260040160405180910390fd5b806001600160401b0316825110156200019f5781516040516378e2c15760e11b81526001600160401b039182166004820152908216602482015260440160405180910390fd5b6000805b835181101562000231576000848281518110620001c457620001c4620005c2565b60200260200101519050826001600160a01b0316816001600160a01b03161162000201576040516305fa937f60e11b815260040160405180910390fd5b6001600160a01b0381166000908152600460205260409020805460ff1916600190811790915590925001620001a3565b50509051600580546001600160401b0393841668010000000000000000026001600160801b0319909116939092169290921717905550505063ffffffff92831660805250501660a05262000615565b60007f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca83148015620002d357506000838152602081815260408083206001600160a01b038616845290915290205460ff16155b15620003205760018054601590620002fb90600160a81b90046001600160401b0316620005d8565b91906101000a8154816001600160401b0302191690836001600160401b031602179055505b6200032c838362000338565b50600190505b92915050565b6000828152602081815260408083206001600160a01b038516845290915281205460ff16620003dd576000838152602081815260408083206001600160a01b03861684529091529020805460ff19166001179055620003943390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600162000332565b50600062000332565b805163ffffffff81168114620003fb57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b80516001600160a01b0381168114620003fb57600080fd5b600082601f8301126200044057600080fd5b815160206001600160401b03808311156200045f576200045f62000400565b8260051b604051601f19603f8301168101818110848211171562000487576200048762000400565b6040529384526020818701810194908101925087851115620004a857600080fd5b6020870191505b84821015620004d357620004c38262000416565b83529183019190830190620004af565b979650505050505050565b600080600080600080600060e0888a031215620004fa57600080fd5b6200050588620003e6565b96506200051560208901620003e6565b60408901519096506001600160401b03808211156200053357600080fd5b620005418b838c016200042e565b96506200055160608b0162000416565b955060808a01519150808211156200056857600080fd5b620005768b838c016200042e565b945060a08a0151915080821682146200058e57600080fd5b60c08a015191935080821115620005a457600080fd5b50620005b38a828b016200042e565b91505092959891949750929550565b634e487b7160e01b600052603260045260246000fd5b60006001600160401b038281166002600160401b031981016200060b57634e487b7160e01b600052601160045260246000fd5b6001019392505050565b60805160a0516135a0620006576000396000818161081d01528181611d5a0152611e8f01526000818161076d015281816112b00152611b9801526135a06000f3fe6080604052600436106102505760003560e01c806395d376d711610139578063cd88b903116100b6578063e395eb5c1161007a578063e395eb5c1461080b578063f010cb231461083f578063f3b4ebd01461085f578063f42ed2ed1461087f578063fd62e75014610892578063fdb9b0f1146108b257600080fd5b8063cd88b9031461073b578063cf34c7681461075b578063d2ae2104146107a4578063d547741f146107cb578063dafe0ccc146107eb57600080fd5b8063c358de0a116100fd578063c358de0a14610688578063c416aa51146106a8578063c5e193cd146106cd578063c7a823e0146106ed578063c7b2370b1461071b57600080fd5b806395d376d71461058b5780639e9449651461059e578063a217fddf14610623578063aef18bf714610638578063b143044b1461066857600080fd5b806330bb3aac116101d25780635c975abb116101965780635c975abb146104ab578063724e78da146104c3578063736c0d5b146104e3578063741bef1a146105135780638585c9451461054b57806391d148541461056b57600080fd5b806330bb3aac1461040b57806331cb61051461042b57806336568abe1461044b57806352d3b8711461046b5780635553fb8e1461048b57600080fd5b80631703a018116102195780631703a01814610321578063248a9ca31461036057806326e67a371461039e5780632de11376146103cb5780632f2ff15d146103eb57600080fd5b8062bf2e801461025557806301e336671461028f57806301ffc9a7146102b15780631095b6d7146102e157806316c38b3c14610301575b600080fd5b34801561026157600080fd5b5060015461027790600160e81b900461ffff1681565b60405161ffff90911681526020015b60405180910390f35b34801561029b57600080fd5b506102af6102aa366004612893565b6108d2565b005b3480156102bd57600080fd5b506102d16102cc3660046128d4565b6108fb565b6040519015158152602001610286565b3480156102ed57600080fd5b506102af6102fc366004612893565b610932565b34801561030d57600080fd5b506102af61031c366004612915565b610a34565b34801561032d57600080fd5b5060055461034890600160401b90046001600160401b031681565b6040516001600160401b039091168152602001610286565b34801561036c57600080fd5b5061039061037b366004612930565b60009081526020819052604090206001015490565b604051908152602001610286565b3480156103aa57600080fd5b506103be6103b936600461295d565b610a59565b6040516102869190612978565b3480156103d757600080fd5b506102d16103e63660046129bf565b610ae0565b3480156103f757600080fd5b506102af6104063660046129dc565b610b65565b34801561041757600080fd5b50610390610426366004612a6b565b610c3a565b34801561043757600080fd5b506102af610446366004612ae2565b610d52565b34801561045757600080fd5b506102af6104663660046129dc565b610d7c565b34801561047757600080fd5b506102af610486366004612b17565b610d95565b34801561049757600080fd5b506103906104a6366004612b9d565b610f0e565b3480156104b757600080fd5b5060015460ff166102d1565b3480156104cf57600080fd5b506102af6104de3660046129bf565b611026565b3480156104ef57600080fd5b506102d16104fe3660046129bf565b60046020526000908152604090205460ff1681565b34801561051f57600080fd5b50600254610533906001600160a01b031681565b6040516001600160a01b039091168152602001610286565b34801561055757600080fd5b506102af610566366004612bf3565b611094565b34801561057757600080fd5b506102d16105863660046129dc565b6110c0565b610390610599366004612c26565b6110e9565b3480156105aa57600080fd5b506105f26105b936600461295d565b6006602052600090815260409020546001600160401b03811690600160401b810461ffff1690600160501b90046001600160801b031683565b604080516001600160401b03909416845261ffff90921660208401526001600160801b031690820152606001610286565b34801561062f57600080fd5b50610390600081565b34801561064457600080fd5b506102d1610653366004612930565b60076020526000908152604090205460ff1681565b34801561067457600080fd5b506102af610683366004612cd2565b61125f565b34801561069457600080fd5b506102af6106a3366004612d13565b611514565b3480156106b457600080fd5b506001546105339061010090046001600160a01b031681565b3480156106d957600080fd5b506103906106e8366004612b9d565b61157c565b3480156106f957600080fd5b5061070d610708366004612d2e565b6116e9565b604051610286929190612d82565b34801561072757600080fd5b506102af6107363660046129bf565b6118c7565b34801561074757600080fd5b506102af610756366004612db6565b611935565b34801561076757600080fd5b5061078f7f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff9091168152602001610286565b3480156107b057600080fd5b5060015461034890600160a81b90046001600160401b031681565b3480156107d757600080fd5b506102af6107e63660046129dc565b611974565b3480156107f757600080fd5b506102af610806366004612893565b611a28565b34801561081757600080fd5b5061078f7f000000000000000000000000000000000000000000000000000000000000000081565b34801561084b57600080fd5b5061039061085a366004612dfb565b611add565b34801561086b57600080fd5b506102af61087a366004612e65565b611b19565b61039061088d366004612ea1565b611cc7565b34801561089e57600080fd5b50600554610348906001600160401b031681565b3480156108be57600080fd5b506103906108cd366004612ea1565b611e14565b60008051602061352b8339815191526108ea81611f45565b6108f5848484611f4f565b50505050565b60006001600160e01b03198216637965db0b60e01b148061092c57506301ffc9a760e01b6001600160e01b03198316145b92915050565b60008051602061352b83398151915261094a81611f45565b61096260008051602061350b833981519152856110c0565b61097f57604051635ee08b9760e01b815260040160405180910390fd5b604051637ecdf29160e11b81526001600160a01b0384811660048301526024820184905285169063fd9be52290604401600060405180830381600087803b1580156109c957600080fd5b505af11580156109dd573d6000803e3d6000fd5b5050604080516001600160a01b038089168252871660208201529081018590527f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb925060600190505b60405180910390a150505050565b6000610a3f81611f45565b8115610a5157610a4d611f77565b5050565b610a4d611fcb565b63ffffffff8116600090815260036020908152604091829020805483518184028101840190945280845260609392830182828015610ad457602002820191906000526020600020906000905b825461010083900a900460ff16815260206001928301818104948501949093039092029101808411610aa55790505b50505050509050919050565b6000610b0c7f4270fae16c6d150d00e80b689daca99e8073b1838ff2b6063a37be9d851283e4836110c0565b15610b1957506000919050565b600154600160a81b90046001600160401b03161580610b4b5750610b4b60008051602061354b833981519152836110c0565b15610b5857506001919050565b506000919050565b919050565b8160008051602061354b833981519152811480610ba157507f4270fae16c6d150d00e80b689daca99e8073b1838ff2b6063a37be9d851283e481145b80610bb9575060008051602061350b83398151915281145b15610be357303314610bde57604051637d5d391d60e11b815260040160405180910390fd5b610c30565b60008051602061352b8339815191528103610c0f57610bde60008051602061352b833981519152611f45565b604051634a7ee1b960e11b8152600481018290526024015b60405180910390fd5b6108f58383612004565b600083610c4681610ae0565b610c6357604051634ab5ebcd60e01b815260040160405180910390fd5b6040805160c0810182526002546001600160a01b03908116825263ffffffff8a1660208084018290526001600160401b03808c16858701528a84166060860152600554600160401b900416608085015260015461ffff600160e81b82041660a086015260009283526006909152908490209351637bfa20a960e01b8152929361010090910490911691637bfa20a991610d05918591908a908a90600401613004565b602060405180830381865afa158015610d22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d469190613034565b98975050505050505050565b303314610d7257604051637d5d391d60e11b815260040160405180910390fd5b610a4d8282612088565b60405163dec9f03160e01b815260040160405180910390fd5b60008051602061352b833981519152610dad81611f45565b60005b82811015610ecf5736848483818110610dcb57610dcb61304d565b90506080020190506040518060600160405280826020016020810190610df19190612bf3565b6001600160401b03168152602001610e0f6060840160408501612d13565b61ffff168152602001610e28608084016060850161307a565b6001600160801b0316905260066000610e44602085018561295d565b63ffffffff1681526020808201929092526040908101600020835181549385015194909201516001600160801b0316600160501b026fffffffffffffffffffffffffffffffff60501b1961ffff909516600160401b0269ffffffffffffffffffff199094166001600160401b0390931692909217929092179290921691909117905550600101610db0565b507f7dd21e42791b013d1929e86f0c59085e4fca24251f0f1aa81917b3b1611766e08383604051610f01929190613095565b60405180910390a1505050565b600081610f1a81610ae0565b610f3757604051634ab5ebcd60e01b815260040160405180910390fd5b6040805160c0810182526002546001600160a01b03908116825261ffff808a1660208085018290526001600160401b03808b16868801528985166060870152600554600160401b9004166080860152600154600160e81b810490931660a0860152600091825260068152858220865191820187529181529451637bfa20a960e01b8152939461010090920490921692637bfa20a992610fda92869260040161316f565b602060405180830381865afa158015610ff7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061101b9190613034565b979650505050505050565b60008051602061352b83398151915261103e81611f45565b600280546001600160a01b0319166001600160a01b0384169081179091556040519081527ff724a45d041687842411f2b977ef22ab8f43c8f1104f4592b42a00f9b34a643d906020015b60405180910390a15050565b3033146110b457604051637d5d391d60e11b815260040160405180910390fd5b6110bd816121e3565b50565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b600060008051602061350b83398151915261110381611f45565b61111360a08601608087016129bf565b61111c81610ae0565b61113957604051634ab5ebcd60e01b815260040160405180910390fd5b6040805160c081019091526002546001600160a01b03168152600090602080820190611167908a018a61295d565b63ffffffff16815260200161118260808a0160608b01612bf3565b6001600160401b031681526020016111a060a08a0160808b016129bf565b6001600160a01b039081168252600554600160401b90046001600160401b0316602080840191909152600154600160e81b810461ffff16604090940193909352929350610100909104169063df2b057e908390600690600090611205908d018d61295d565b63ffffffff1663ffffffff16815260200190815260200160002089896040518563ffffffff1660e01b81526004016112409493929190613004565b6020604051808303816000875af1158015610ff7573d6000803e3d6000fd5b60008051602061352b83398151915261127781611f45565b60005b828110156108f557368484838181106112955761129561304d565b90506020028101906112a791906131a8565b905063ffffffff7f0000000000000000000000000000000000000000000000000000000000000000166112dd602083018361295d565b63ffffffff16146112ee575061150c565b428160600135116112ff575061150c565b6000611338611311602084018461295d565b61132160408501602086016129bf565b61132e60408601866131c8565b8660600135611add565b9050600061134d8261070860808601866131c8565b50905080611390576040518481527fd6d90193101048cc1b6edcdc2348f5acf7a4a4a97d3e7b668b74cb7602ab3ebc9060200160405180910390a150505061150c565b60006113b06113a260408601866131c8565b6113ab9161320e565b6122b1565b9050801561142b5760008381526007602052604090205460ff1615611411577f9bb9bddbdf537a2104255307230b323d7982f4512ee8e5bd15df62ddca50ab978484604051611400929190613283565b60405180910390a15050505061150c565b6000838152600760205260409020805460ff191660011790555b60008061143e60408701602088016129bf565b6001600160a01b031661145460408801886131c8565b60405161146292919061331e565b6000604051808303816000865af19150503d806000811461149f576040519150601f19603f3d011682016040523d82523d6000602084013e6114a4565b606091505b5091509150816115055782156114cb576000858152600760205260409020805460ff191690555b7fdc8cdd96296241bbefda4a8e18ad2e0985a8da6495b34d409cfc4c886ee3b0cf87826040516114fc92919061332e565b60405180910390a15b5050505050505b60010161127a565b60008051602061352b83398151915261152c81611f45565b6001805461ffff60e81b1916600160e81b61ffff8516908102919091179091556040519081527f7af0ac740036ffb1c97b03697859d729e80a44ae5030543d64971c313565ab4d90602001611088565b600060008051602061350b83398151915261159681611f45565b826115a081610ae0565b6115bd57604051634ab5ebcd60e01b815260040160405180910390fd5b6040805160c0810182526002546001600160a01b03908116825261ffff808b1660208085018290526001600160401b03808c16868801528a85166060870152600554600160401b9004166080860152600154600160e81b810490931660a0860152600091825260068152858220865191820187529181529451636f9582bf60e11b815293946101009092049092169263df2b057e9261166092869260040161316f565b6020604051808303816000875af115801561167f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116a39190613034565b93507f87e46b0a6199bc734632187269a103c05714ee0adae5b28f30723955724f37ef846040516116d691815260200190565b60405180910390a1505050949350505050565b600554600090819061170c90600160401b90046001600160401b0316604161335d565b831461171e57506000905060016118bf565b6000611777866040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b90506000805b600554600160401b90046001600160401b03168110156118b35736600088886117a785604161335d565b906117b3866001613374565b6117be90604161335d565b926117cb93929190613387565b915091506000806118128785858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061230792505050565b509092509050600081600381111561182c5761182c612d6c565b14611845576000600198509850505050505050506118bf565b856001600160a01b0316826001600160a01b031611611872576000600298509850505050505050506118bf565b6001600160a01b03821660009081526004602052604090205460ff166118a6576000600398509850505050505050506118bf565b509350505060010161177d565b50600160009350935050505b935093915050565b60008051602061352b8339815191526118df81611f45565b60018054610100600160a81b0319166101006001600160a01b038516908102919091179091556040519081527f1399be28223800f8669b3ba5f8721d9fc16fc4e8d0bbf98378791c8c5a3015e090602001611088565b60008051602061352b83398151915261194d81611f45565b63ffffffff8416600090815260036020526040902061196d9084846127c0565b5050505050565b8160008051602061354b8339815191528114806119b057507f4270fae16c6d150d00e80b689daca99e8073b1838ff2b6063a37be9d851283e481145b806119c8575060008051602061350b83398151915281145b156119f2573033146119ed57604051637d5d391d60e11b815260040160405180910390fd5b611a1e565b60008051602061352b8339815191528103610c0f576119ed60008051602061352b833981519152611f45565b6108f58383612354565b60008051602061352b833981519152611a4081611f45565b611a5860008051602061350b833981519152856110c0565b611a7557604051635ee08b9760e01b815260040160405180910390fd5b6040516303d8c5ef60e11b81526001600160a01b038481166004830152602482018490528516906307b18bde90604401600060405180830381600087803b158015611abf57600080fd5b505af1158015611ad3573d6000803e3d6000fd5b5050505050505050565b60008585838686604051602001611af89594939291906133b1565b60405160208183030381529060405280519060200120905095945050505050565b42816060013511611b3d57604051630bbaf26360e01b815260040160405180910390fd5b30611b4e60408301602084016129bf565b6001600160a01b031614611b9157611b6c60408201602083016129bf565b604051631ce0bfcd60e01b81526001600160a01b039091166004820152602401610c27565b63ffffffff7f000000000000000000000000000000000000000000000000000000000000000016611bc5602083018361295d565b63ffffffff1614611bff57611bdd602082018261295d565b60405163134bf0e160e11b815263ffffffff9091166004820152602401610c27565b6000611c11611311602084018461295d565b90506000611c268261070860808601866131c8565b50905080611c4757604051630af656f760e11b815260040160405180910390fd5b60008281526007602052604090205460ff1615611c7a57604051634eb522d360e11b815260048101839052602401610c27565b60008281526007602052604090819020805460ff191660011790556108f59060008051602061352b83398151915290611cb5908601866131c8565b810190611cc291906129bf565b612004565b600060008051602061350b833981519152611ce181611f45565b88611ceb81610ae0565b611d0857604051634ab5ebcd60e01b815260040160405180910390fd5b604080516080810182526002546001600160a01b0390811682528c8116602080840191909152600554600160401b90046001600160401b031683850152600154600160e81b810461ffff1660608501527f000000000000000000000000000000000000000000000000000000000000000063ffffffff166000908152600690925290849020935163bbc5a33b60e01b815292936101009091049091169163bbc5a33b91611dc2918591908d908d908d908d906004016133f7565b6020604051808303816000875af1158015611de1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e059190613034565b9b9a5050505050505050505050565b600087611e2081610ae0565b611e3d57604051634ab5ebcd60e01b815260040160405180910390fd5b604080516080810182526002546001600160a01b0390811682528b8116602080840191909152600554600160401b90046001600160401b031683850152600154600160e81b810461ffff1660608501527f000000000000000000000000000000000000000000000000000000000000000063ffffffff166000908152600690925290849020935162d358b360e81b815292936101009091049091169163d358b30091611ef6918591908c908c908c908c906004016133f7565b602060405180830381865afa158015611f13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f379190613034565b9a9950505050505050505050565b6110bd81336123cc565b6001600160a01b038316611f6c57611f678282612405565b505050565b611f678383836124b2565b611f7f6124ed565b6001805460ff1916811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b6040516001600160a01b03909116815260200160405180910390a1565b611fd3612513565b6001805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33611fae565b600060008051602061354b8339815191528314801561202a575061202883836110c0565b155b15612074576001805460159061204f90600160a81b90046001600160401b031661347a565b91906101000a8154816001600160401b0302191690836001600160401b031602179055505b61207e8383612536565b5060019392505050565b6001600160a01b03821660009081526004602052604090205481151560ff9091161515036120dc576040516302c6469560e51b81526001600160a01b03831660048201528115156024820152604401610c27565b6001600160a01b0382166000908152600460205260408120805460ff1916831515179055816121225760055461211d906001906001600160401b03166134a0565b612139565b600554612139906001600160401b031660016134c7565b6005549091506001600160401b03600160401b9091048116908216811115612187576040516378e2c15760e11b81526001600160401b03808416600483015282166024820152604401610c27565b6005805467ffffffffffffffff19166001600160401b038416179055604080516001600160a01b038616815284151560208201527f863d338cad74814b108a06288ad5e0e80d56495e0332238b1d2cdcfa0ca8e5ce9101610a26565b806001600160401b031660000361220d57604051635f86e17760e01b815260040160405180910390fd5b6005546001600160401b03908116908216811015612251576040516378e2c15760e11b81526001600160401b03808316600483015283166024820152604401610c27565b600580546fffffffffffffffff00000000000000001916600160401b6001600160401b038516908102919091179091556040519081527fb600f3cf7f38a4b49bb0c75f722ef69f7e3e39ef3bb4aa8207fd86e724a2324990602001611088565b60006001600160e01b03198216630111a9b760e11b148015906122e557506001600160e01b0319821663ab750e7560e01b14155b801561092c57506001600160e01b0319821663704316e560e01b141592915050565b600080600083516041036123415760208401516040850151606086015160001a612333888285856125c8565b95509550955050505061234d565b50508151600091506002905b9250925092565b600060008051602061354b83398151915283148015612378575061237883836110c0565b156123c2576001805460159061239d90600160a81b90046001600160401b03166134e7565b91906101000a8154816001600160401b0302191690836001600160401b031602179055505b61207e8383612697565b6123d682826110c0565b610a4d5760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401610c27565b6001600160a01b03821661242c576040516306b7a93160e41b815260040160405180910390fd5b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612479576040519150601f19603f3d011682016040523d82523d6000602084013e61247e565b606091505b5050905080611f6757604051631196f20d60e21b81526001600160a01b038416600482015260248101839052604401610c27565b6001600160a01b0382166124d9576040516306b7a93160e41b815260040160405180910390fd5b611f676001600160a01b0384168383612702565b60015460ff16156125115760405163d93c066560e01b815260040160405180910390fd5b565b60015460ff1661251157604051638dfc202b60e01b815260040160405180910390fd5b600061254283836110c0565b6125c0576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556125783390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161092c565b50600061092c565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115612603575060009150600390508261268d565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015612657573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166126835750600092506001915082905061268d565b9250600091508190505b9450945094915050565b60006126a383836110c0565b156125c0576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161092c565b604080516001600160a01b03841660248201526044808201849052825180830390910181526064909101909152602080820180516001600160e01b031663a9059cbb60e01b1781528251611f67938793909260009283929183919082885af180612772576040513d6000823e3d81fd5b50506000513d9150811561278a578060011415612797565b6001600160a01b0384163b155b156108f557604051635274afe760e01b81526001600160a01b0385166004820152602401610c27565b82805482825590600052602060002090601f016020900481019282156128595791602002820160005b8382111561282a57833560ff1683826101000a81548160ff021916908360ff16021790555092602001926001016020816000010492830192600103026127e9565b80156128575782816101000a81549060ff021916905560010160208160000104928301926001030261282a565b505b50612865929150612869565b5090565b5b80821115612865576000815560010161286a565b6001600160a01b03811681146110bd57600080fd5b6000806000606084860312156128a857600080fd5b83356128b38161287e565b925060208401356128c38161287e565b929592945050506040919091013590565b6000602082840312156128e657600080fd5b81356001600160e01b0319811681146128fe57600080fd5b9392505050565b80358015158114610b6057600080fd5b60006020828403121561292757600080fd5b6128fe82612905565b60006020828403121561294257600080fd5b5035919050565b803563ffffffff81168114610b6057600080fd5b60006020828403121561296f57600080fd5b6128fe82612949565b6020808252825182820181905260009190848201906040850190845b818110156129b357835160ff1683529284019291840191600101612994565b50909695505050505050565b6000602082840312156129d157600080fd5b81356128fe8161287e565b600080604083850312156129ef57600080fd5b823591506020830135612a018161287e565b809150509250929050565b80356001600160401b0381168114610b6057600080fd5b60008083601f840112612a3557600080fd5b5081356001600160401b03811115612a4c57600080fd5b602083019150836020828501011115612a6457600080fd5b9250929050565b600080600080600060808688031215612a8357600080fd5b612a8c86612949565b9450612a9a60208701612a0c565b93506040860135612aaa8161287e565b925060608601356001600160401b03811115612ac557600080fd5b612ad188828901612a23565b969995985093965092949392505050565b60008060408385031215612af557600080fd5b8235612b008161287e565b9150612b0e60208401612905565b90509250929050565b60008060208385031215612b2a57600080fd5b82356001600160401b0380821115612b4157600080fd5b818501915085601f830112612b5557600080fd5b813581811115612b6457600080fd5b8660208260071b8501011115612b7957600080fd5b60209290920196919550909350505050565b803561ffff81168114610b6057600080fd5b60008060008060808587031215612bb357600080fd5b612bbc85612b8b565b9350612bca60208601612b8b565b9250612bd860408601612a0c565b91506060850135612be88161287e565b939692955090935050565b600060208284031215612c0557600080fd5b6128fe82612a0c565b600060a08284031215612c2057600080fd5b50919050565b600080600060408486031215612c3b57600080fd5b83356001600160401b0380821115612c5257600080fd5b612c5e87838801612c0e565b94506020860135915080821115612c7457600080fd5b50612c8186828701612a23565b9497909650939450505050565b60008083601f840112612ca057600080fd5b5081356001600160401b03811115612cb757600080fd5b6020830191508360208260051b8501011115612a6457600080fd5b60008060208385031215612ce557600080fd5b82356001600160401b03811115612cfb57600080fd5b612d0785828601612c8e565b90969095509350505050565b600060208284031215612d2557600080fd5b6128fe82612b8b565b600080600060408486031215612d4357600080fd5b8335925060208401356001600160401b03811115612d6057600080fd5b612c8186828701612a23565b634e487b7160e01b600052602160045260246000fd5b82151581526040810160048310612da957634e487b7160e01b600052602160045260246000fd5b8260208301529392505050565b600080600060408486031215612dcb57600080fd5b612dd484612949565b925060208401356001600160401b03811115612def57600080fd5b612c8186828701612c8e565b600080600080600060808688031215612e1357600080fd5b612e1c86612949565b94506020860135612e2c8161287e565b935060408601356001600160401b03811115612e4757600080fd5b612e5388828901612a23565b96999598509660600135949350505050565b600060208284031215612e7757600080fd5b81356001600160401b03811115612e8d57600080fd5b612e9984828501612c0e565b949350505050565b60008060008060008060006080888a031215612ebc57600080fd5b8735612ec78161287e565b965060208801356001600160401b0380821115612ee357600080fd5b612eef8b838c01612a23565b909850965060408a0135915080821115612f0857600080fd5b612f148b838c01612a23565b909650945060608a0135915080821115612f2d57600080fd5b50612f3a8a828b01612a23565b989b979a50959850939692959293505050565b60018060a01b0380825116835263ffffffff602083015116602084015260408201516001600160401b03808216604086015282606085015116606086015280608085015116608086015250505061ffff60a08201511660a08301525050565b546001600160401b0381168252604081811c61ffff16602084015260509190911c6001600160801b0316910152565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60006101406130138388612f4d565b61302060c0840187612fac565b8061012084015261101b8184018587612fdb565b60006020828403121561304657600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b80356001600160801b0381168114610b6057600080fd5b60006020828403121561308c57600080fd5b6128fe82613063565b6020808252818101839052600090604080840186845b8781101561311c5763ffffffff6130c183612949565b1683526001600160401b036130d7868401612a0c565b168584015261ffff6130ea858401612b8b565b168484015260606001600160801b03613104828501613063565b169084015260809283019291909101906001016130ab565b5090979650505050505050565b6000815180845260005b8181101561314f57602081850181015186830182015201613133565b506000602082860101526020601f19601f83011685010191505092915050565b600061014061317e8387612f4d565b61318b60c0840186612fac565b8061012084015261319e81840185613129565b9695505050505050565b60008235609e198336030181126131be57600080fd5b9190910192915050565b6000808335601e198436030181126131df57600080fd5b8301803591506001600160401b038211156131f957600080fd5b602001915036819003821315612a6457600080fd5b6001600160e01b031981358181169160048510156132365780818660040360031b1b83161692505b505092915050565b6000808335601e1984360301811261325557600080fd5b83016020810192503590506001600160401b0381111561327457600080fd5b803603821315612a6457600080fd5b6040815263ffffffff61329584612949565b166040820152600060208401356132ab8161287e565b6001600160a01b031660608301526132c6604085018561323e565b60a060808501526132db60e085018284612fdb565b915050606085013560a08401526132f5608086018661323e565b848303603f190160c086015261330c838284612fdb565b93505050508260208301529392505050565b8183823760009101908152919050565b828152604060208201526000612e996040830184613129565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761092c5761092c613347565b8082018082111561092c5761092c613347565b6000808585111561339757600080fd5b838611156133a457600080fd5b5050820193919092039150565b63ffffffff60e01b8660e01b1681526bffffffffffffffffffffffff198560601b1660048201528360188201528183603883013760009101603801908152949350505050565b600061012060018060a01b03808a511684528060208b0151166020850152506001600160401b0360408a015116604084015261ffff60608a01511660608401526134446080840189612fac565b8060e08401526134578184018789612fdb565b905082810361010084015261346d818587612fdb565b9998505050505050505050565b60006001600160401b0380831681810361349657613496613347565b6001019392505050565b6001600160401b038281168282160390808211156134c0576134c0613347565b5092915050565b6001600160401b038181168382160190808211156134c0576134c0613347565b60006001600160401b0382168061350057613500613347565b600019019291505056fe724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19dea49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177574845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bcaa264697066735822122024327161ffb7d62bcb3e3b78be45b9ccbc1a11373295fe0f97bd10b71bcadb8164736f6c6343000816003360c06040523480156200001157600080fd5b5060405162001eb638038062001eb68339810160408190526200003491620000cb565b33806200005b57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b62000066816200007b565b5063ffffffff90911660a05260805262000104565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008060408385031215620000df57600080fd5b825163ffffffff81168114620000f457600080fd5b6020939093015192949293505050565b60805160a051611d7e620001386000396000818161069001526106ff0152600081816107cd0152610ab80152611d7e6000f3fe6080604052600436106100ec5760003560e01c80638da5cb5b1161008a578063de0a93c311610059578063de0a93c3146102f7578063df2b057e1461033d578063f2fde38b14610350578063f5ff608f1461037057600080fd5b80638da5cb5b1461027c5780639ac23d28146102a4578063bbc5a33b146102c4578063d358b300146102d757600080fd5b806339f26dfc116100c657806339f26dfc1461020657806354fd4d5014610226578063715018a6146102475780637bfa20a91461025c57600080fd5b806301e33667146100f857806310b65f761461011a5780632565c2451461016057600080fd5b366100f357005b600080fd5b34801561010457600080fd5b506101186101133660046115c3565b610390565b005b34801561012657600080fd5b5061014d610135366004611611565b63ffffffff1660009081526001602052604090205490565b6040519081526020015b60405180910390f35b34801561016c57600080fd5b506101c761017b366004611611565b60036020526000908152604090205463ffffffff808216916001600160401b036401000000008204811692600160601b830490911691600160a01b8104821691600160c01b9091041685565b6040805163ffffffff96871681526001600160401b0395861660208201529390941693830193909352831660608201529116608082015260a001610157565b34801561021257600080fd5b5061011861022136600461165e565b6103a8565b34801561023257600080fd5b50604080516001808252602082015201610157565b34801561025357600080fd5b506101186103fa565b34801561026857600080fd5b5061014d610277366004611701565b61040e565b34801561028857600080fd5b506000546040516001600160a01b039091168152602001610157565b3480156102b057600080fd5b506101186102bf36600461176c565b61059b565b61014d6102d2366004611833565b610642565b3480156102e357600080fd5b5061014d6102f2366004611833565b61065d565b34801561030357600080fd5b50600254604080516001600160781b038084168252600160781b8404166020820152600160f01b90920461ffff1690820152606001610157565b61014d61034b366004611701565b610857565b34801561035c57600080fd5b5061011861036b3660046118ce565b61086e565b34801561037c57600080fd5b5061011861038b3660046118e9565b6108ac565b610398610929565b6103a3838383610956565b505050565b6103b0610929565b6002805461ffff909216600160f01b026001600160f01b036001600160781b03948516600160781b026001600160f01b031990941694909516939093179190911792909216179055565b610402610929565b61040c6000610979565b565b600061041d6020850185611972565b6001600160401b03166000036104645761043d6040860160208701611611565b60405163680489c560e11b815263ffffffff90911660048201526024015b60405180910390fd5b61046e83836109c9565b50600061049261048460a0880160808901611972565b6001600160401b0316610a3b565b90506000806104a460208901896118ce565b6001600160a01b03166388a4124c6104c260408b0160208c01611611565b856104d060208c018c611972565b6040516001600160e01b031960e086901b16815263ffffffff93909316600484015260248301919091526001600160401b03166044820152606401608060405180830381865afa158015610528573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061054c91906119a4565b93505050915061058f8288602001602081019061056991906119f9565b61057960c08c0160a08d016119f9565b61058960608c0160408d01611a14565b85610a49565b98975050505050505050565b6105a3610929565b8281146105c3576040516316a9d98760e31b815260040160405180910390fd5b60005b8381101561063b578282828181106105e0576105e0611a31565b905060a00201600360008787858181106105fc576105fc611a31565b90506020020160208101906106119190611611565b63ffffffff16815260208101919091526040016000206106318282611a54565b50506001016105c6565b5050505050565b600061065287878787878761065d565b979650505050505050565b600061066c6020870187611972565b6001600160401b03166000036106bd5760405163680489c560e11b815263ffffffff7f000000000000000000000000000000000000000000000000000000000000000016600482015260240161045b565b6106c783836109c9565b5060006106dd61048460608a0160408b01611972565b90506000806106ef60208b018b6118ce565b6001600160a01b03166388a4124c7f00000000000000000000000000000000000000000000000000000000000000008561072c60208e018e611972565b6040516001600160e01b031960e086901b16815263ffffffff93909316600484015260248301919091526001600160401b03166044820152606401608060405180830381865afa158015610784573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107a891906119a4565b93505050915060006107ba8989610b1d565b905060006001600160801b0383166107f27f000000000000000000000000000000000000000000000000000000000000000084611b65565b6107fc9190611b92565b905061084761080b8286611ba6565b61081b60408e0160208f016119f9565b8e606001602081019061082e91906119f9565b8e60400160208101906108419190611a14565b87610a49565b9c9b505050505050505050505050565b60006108658585858561040e565b95945050505050565b610876610929565b6001600160a01b0381166108a057604051631e4fbdf760e01b81526000600482015260240161045b565b6108a981610979565b50565b6108b4610929565b60005b818110156103a3578282828181106108d1576108d1611a31565b90506040020160200135600160000160008585858181106108f4576108f4611a31565b61090a9260206040909202019081019150611611565b63ffffffff1681526020810191909152604001600020556001016108b7565b6000546001600160a01b0316331461040c5760405163118cdaa760e01b815233600482015260240161045b565b6001600160a01b03831661096e576103a38282610bc7565b6103a3838383610c74565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000808215610a0c576000806109e0868685610caf565b604051637085244b60e01b815260ff85166004820152909650929450859350506024909101905061045b565b808314610a2f5760405163013adb8360e21b81526004810182905260240161045b565b60009150505b92915050565b6000610a3582610120610d09565b60008061ffff861615610a5c5785610a5e565b845b90506000612710610a7361ffff84168a611b65565b610a7d9190611b92565b90506001600160801b0384161580610a9c57506001600160801b038516155b15610aaa5791506108659050565b6000846001600160801b03167f0000000000000000000000000000000000000000000000000000000000000000876001600160801b0316610aeb9190611b65565b610af59190611b92565b610aff908a611ba6565b9050818111610b0e5781610b10565b805b9998505050505050505050565b600080610b2d8484610d6e610f31565b6002548151919250610b4e916001600160781b039091169061ffff16611bb9565b6001600160781b03169150806020015115610b965760025461271090610b7f90600160f01b900461ffff1684611b65565b610b899190611b92565b610b939083611ba6565b91505b806040015115610bc057600254610bbd90600160781b90046001600160781b031683611ba6565b91505b5092915050565b6001600160a01b038216610bee576040516306b7a93160e41b815260040160405180910390fd5b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114610c3b576040519150601f19603f3d011682016040523d82523d6000602084013e610c40565b606091505b50509050806103a357604051631196f20d60e21b81526001600160a01b03841660048201526024810183905260440161045b565b6001600160a01b038216610c9b576040516306b7a93160e41b815260040160405180910390fd5b6103a36001600160a01b0384168383611433565b600036816001840181610cc3888884611485565b6002830192909150610cdb90899089906003016114ac565b94506002820161ffff82168301610cf481838b8d611be4565b979b909a50969850505061ffff160193505050565b600080610d17604185611b65565b9050610d24602082611c0e565b15610d4c57610d34602082611c0e565b610d3e9082611c22565b610d49906020611ba6565b90505b80610d5984610104611ba6565b610d639190611ba6565b610bbd906020611ba6565b610d7a600185836114d1565b610d8760018560026114f9565b15610f2b5763ffffffff808516600090815260036020908152604091829020825160a081018452905480851682526001600160401b036401000000008204811693830193909352600160601b810490921692810192909252600160a01b810483166060830152600160c01b90049091166080820152828415610eab5781602001516001600160401b0316846001600160401b03161115610e6757815160208301516103e89163ffffffff1690610e3d9087611c35565b610e479190611c55565b610e519190611c78565b8260400151610e609190611c9e565b9050610eab565b6103e8826000015163ffffffff16858460200151610e859190611c35565b610e8f9190611c55565b610e999190611c78565b8260400151610ea89190611c35565b90505b42826060015163ffffffff1682610ec29190611c9e565b6001600160401b03161080610ef357506080820151610ee79063ffffffff1642611ba6565b816001600160401b0316115b15610f2857604051630c5a8d2360e01b815263ffffffff871660048201526001600160401b038216602482015260440161045b565b50505b50505050565b604080516060810182526000808252602082018190529181018290529080858186610f5d826002611ba6565b92610f6a93929190611be4565b610f7391611cbe565b60f01c9050610f83600283611ba6565b915061ffff8116600114610faa5760405163a9146eeb60e01b815260040160405180910390fd5b610fb5600283611ba6565b91506000868387610fc7826002611ba6565b92610fd493929190611be4565b610fdd91611cbe565b60f01c9050610fed600284611ba6565b92508061ffff16600003611014576040516387a7f37960e01b815260040160405180910390fd5b61ffff1683525060005b826000015161ffff168161ffff16101561121d57600086868481811061104657611046611a31565b919091013560f81c915061105d9050600184611ba6565b925060ff81166001146110835760405163a9146eeb60e01b815260040160405180910390fd5b61108e600284611ba6565b925060008784886110a0826002611ba6565b926110ad93929190611be4565b6110b691611cbe565b60f01c90506110c6600285611ba6565b935060001961ffff8216016111fa5760008885896110e5826002611ba6565b926110f293929190611be4565b6110fb91611cbe565b60f01c905061110b600286611ba6565b94508460008a828b61111e826004611ba6565b9261112b93929190611be4565b61113491611cec565b60e01c9050611144600483611ba6565b915060008b8b8481811061115a5761115a611a31565b600192013560f81c8214925061117291905084611ba6565b925060008c848d611184826008611ba6565b9261119193929190611be4565b61119a91611d1a565b60c01c90506111b083838360008f63ffffffff16565b508a92506111c591505061ffff831687611ba6565b11156111e4576040516387a7f37960e01b815260040160405180910390fd5b6111f261ffff821686611ba6565b945050611213565b60405163b968846160e01b815260040160405180910390fd5b505060010161101e565b508381101561140b57600085858381811061123a5761123a611a31565b919091013560f81c91506112519050600183611ba6565b915060ff81166001146112775760405163a9146eeb60e01b815260040160405180910390fd5b6000868387611287826002611ba6565b9261129493929190611be4565b61129d91611cbe565b60f01c90506112ad600284611ba6565b925061ffff81166001146112d45760405163b968846160e01b815260040160405180910390fd5b60008787858181106112e8576112e8611a31565b919091013560f81c91506112ff9050600185611ba6565b935060ff81166113155760016020860152611348565b60001960ff82160161132d5760016040860152611348565b60011960ff8216016111fa5760016020860181905260408601525b6000888589611358826004611ba6565b9261136593929190611be4565b61136e91611cec565b60e01c905061137e600486611ba6565b9450600089898781811061139457611394611a31565b600192013560f81c821492506113ac91905087611ba6565b955060008a878b6113be826008611ba6565b926113cb93929190611be4565b6113d491611d1a565b60c01c90506113e4600888611ba6565b96506113f783838360018d63ffffffff16565b611402601688611ba6565b96505050505050505b80841461142b576040516387a7f37960e01b815260040160405180910390fd5b509392505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526103a3908490611527565b60006002820161149781848688611be4565b6114a091611cbe565b60f01c95945050505050565b60008383838181106114c0576114c0611a31565b919091013560f81c95945050505050565b6114dc8383836114f9565b6103a3576040516350fae9eb60e01b815260040160405180910390fd5b63ffffffff808316600090815260208590526040812054909161151f9190849061159816565b949350505050565b600080602060008451602086016000885af18061154a576040513d6000823e3d81fd5b50506000513d9150811561156257806001141561156f565b6001600160a01b0384163b155b15610f2b57604051635274afe760e01b81526001600160a01b038516600482015260240161045b565b600160ff919091161b16151590565b80356001600160a01b03811681146115be57600080fd5b919050565b6000806000606084860312156115d857600080fd5b6115e1846115a7565b92506115ef602085016115a7565b9150604084013590509250925092565b63ffffffff811681146108a957600080fd5b60006020828403121561162357600080fd5b813561162e816115ff565b9392505050565b80356001600160781b03811681146115be57600080fd5b803561ffff811681146115be57600080fd5b60008060006060848603121561167357600080fd5b61167c84611635565b925061168a60208501611635565b91506116986040850161164c565b90509250925092565b6000606082840312156116b357600080fd5b50919050565b60008083601f8401126116cb57600080fd5b5081356001600160401b038111156116e257600080fd5b6020830191508360208285010111156116fa57600080fd5b9250929050565b60008060008084860361014081121561171957600080fd5b60c081121561172757600080fd5b508493506117388660c087016116a1565b92506101208501356001600160401b0381111561175457600080fd5b611760878288016116b9565b95989497509550505050565b6000806000806040858703121561178257600080fd5b84356001600160401b038082111561179957600080fd5b818701915087601f8301126117ad57600080fd5b8135818111156117bc57600080fd5b8860208260051b85010111156117d157600080fd5b6020928301965094509086013590808211156117ec57600080fd5b818701915087601f83011261180057600080fd5b81358181111561180f57600080fd5b88602060a08302850101111561182457600080fd5b95989497505060200194505050565b60008060008060008086880361012081121561184e57600080fd5b608081121561185c57600080fd5b5086955061186d88608089016116a1565b945060e08701356001600160401b038082111561188957600080fd5b6118958a838b016116b9565b90965094506101008901359150808211156118af57600080fd5b506118bc89828a016116b9565b979a9699509497509295939492505050565b6000602082840312156118e057600080fd5b61162e826115a7565b600080602083850312156118fc57600080fd5b82356001600160401b038082111561191357600080fd5b818501915085601f83011261192757600080fd5b81358181111561193657600080fd5b8660208260061b850101111561194b57600080fd5b60209290920196919550909350505050565b6001600160401b03811681146108a957600080fd5b60006020828403121561198457600080fd5b813561162e8161195d565b6001600160801b03811681146108a957600080fd5b600080600080608085870312156119ba57600080fd5b8451935060208501516119cc8161198f565b60408601519093506119dd8161198f565b60608601519092506119ee8161198f565b939692955090935050565b600060208284031215611a0b57600080fd5b61162e8261164c565b600060208284031215611a2657600080fd5b813561162e8161198f565b634e487b7160e01b600052603260045260246000fd5b60008135610a35816115ff565b8135611a5f816115ff565b63ffffffff8116905081548163ffffffff1982161783556020840135611a848161195d565b6bffffffffffffffff000000008160201b16905080836bffffffffffffffffffffffff198416171784556040850135611abc8161195d565b67ffffffffffffffff60601b606091821b166001600160a01b03199390931693909317808217831785559285013591611af4836115ff565b63ffffffff60a01b1993909316179190911760a09190911b63ffffffff60a01b16178155611b4b611b2760808401611a47565b82805463ffffffff60c01b191660c09290921b63ffffffff60c01b16919091179055565b5050565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610a3557610a35611b4f565b634e487b7160e01b600052601260045260246000fd5b600082611ba157611ba1611b7c565b500490565b80820180821115610a3557610a35611b4f565b6001600160781b03818116838216028082169190828114611bdc57611bdc611b4f565b505092915050565b60008085851115611bf457600080fd5b83861115611c0157600080fd5b5050820193919092039150565b600082611c1d57611c1d611b7c565b500690565b81810381811115610a3557610a35611b4f565b6001600160401b03828116828216039080821115610bc057610bc0611b4f565b6001600160401b03818116838216028082169190828114611bdc57611bdc611b4f565b60006001600160401b0380841680611c9257611c92611b7c565b92169190910492915050565b6001600160401b03818116838216019080821115610bc057610bc0611b4f565b6001600160f01b03198135818116916002851015611bdc5760029490940360031b84901b1690921692915050565b6001600160e01b03198135818116916004851015611bdc5760049490940360031b84901b1690921692915050565b6001600160c01b03198135818116916008851015611bdc5760089490940360031b84901b169092169291505056fea2646970667358221220d34b7cf3109d1a09d2ef9d6586b9648c558d96c099d9868a56aea4afa7c4f88e64736f6c6343000816003360e06040523480156200001157600080fd5b506040516200191f3803806200191f833981016040819052620000349162000179565b33806200005b57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b620000668162000110565b50600180546001600160a01b0319166001600160a01b038481169190911790915581166080819052600060a0526040805163416ecebf60e01b8152905163416ecebf916004808201926020929091908290030181865afa158015620000cf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000f59190620001b8565b63ffffffff1660c052505060636003556064600455620001e7565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146200017657600080fd5b50565b600080604083850312156200018d57600080fd5b82516200019a8162000160565b6020840151909250620001ad8162000160565b809150509250929050565b600060208284031215620001cb57600080fd5b815163ffffffff81168114620001e057600080fd5b9392505050565b60805160a05160c0516116ec62000233600039600061038c015260006102fb0152600081816102c7015281816105d6015281816106df015281816108e50152610aa101526116ec6000f3fe60806040526004361061014f5760003560e01c8063715018a6116100b6578063996f79c01161006f578063996f79c014610447578063aec336e61461045d578063d80e9bd91461047d578063dabca063146104aa578063f2fde38b146104ca578063fd9be522146104ea57610156565b8063715018a614610365578063726075371461037a57806372d71322146103c35780638da5cb5b146103e55780638f58aa7a14610403578063909532381461042357610156565b80634389e58f116101085780634389e58f1461025a57806354fd4d50146102895780635e280f11146102b557806361d027b3146102e95780636251b6371461031d5780636750cd4c1461034457610156565b806301ffc9a71461016f5780630e97289b146101a457806312cc947f146101dc5780631881d94d146101fe5780631c7c294e1461021a578063334993ff1461023a57610156565b3661015657005b604051632657b6c360e01b815260040160405180910390fd5b34801561017b57600080fd5b5061018f61018a366004610ee3565b61050a565b60405190151581526020015b60405180910390f35b3480156101b057600080fd5b506001546101c4906001600160a01b031681565b6040516001600160a01b03909116815260200161019b565b3480156101e857600080fd5b506101fc6101f7366004610f4e565b610541565b005b34801561020a57600080fd5b50600260405161019b9190610f8f565b34801561022657600080fd5b506002546101c4906001600160a01b031681565b34801561024657600080fd5b506101fc610255366004610fb7565b6106b3565b34801561026657600080fd5b5061027a6102753660046110d0565b6106c6565b60405161019b93929190611193565b34801561029557600080fd5b50604080516000808252602082015260029181019190915260600161019b565b3480156102c157600080fd5b506101c47f000000000000000000000000000000000000000000000000000000000000000081565b3480156102f557600080fd5b506101c47f000000000000000000000000000000000000000000000000000000000000000081565b34801561032957600080fd5b50610332600181565b60405160ff909116815260200161019b565b34801561035057600080fd5b5061018f61035f3660046111e7565b50600190565b34801561037157600080fd5b506101fc610810565b34801561038657600080fd5b506103ae7f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff909116815260200161019b565b3480156103cf57600080fd5b506103d8610824565b60405161019b9190611202565b3480156103f157600080fd5b506000546001600160a01b03166101c4565b34801561040f57600080fd5b506101fc61041e366004611235565b6108b2565b34801561042f57600080fd5b5061043960035481565b60405190815260200161019b565b34801561045357600080fd5b5061043960045481565b34801561046957600080fd5b506101fc610478366004611261565b6109a7565b34801561048957600080fd5b5061049d61049836600461127e565b6109d1565b60405161019b91906112f8565b3480156104b657600080fd5b506101fc6104c536600461130f565b610a13565b3480156104d657600080fd5b506101fc6104e5366004611261565b610a2b565b3480156104f657600080fd5b506101fc610505366004611235565b610a6e565b60006001600160e01b031982166325fc096160e21b148061053b57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6002546001600160a01b03161580159061056657506002546001600160a01b03163314155b1561058457604051631c2c85bb60e21b815260040160405180910390fd5b6000604051806060016040528061059b8585610b2e565b63ffffffff1681526020016105b08585610b51565b81526020016105bf8585610b71565b6001600160401b0316905290506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663a825d747826106068686610b94565b6106108787610ba6565b60405161061e92919061134b565b6040805191829003822060e086901b6001600160e01b0319168352845163ffffffff166004840152602085015160248401529301516001600160401b031660448201526001600160a01b039091166064820152608481019190915260a401600060405180830381600087803b15801561069657600080fd5b505af11580156106aa573d6000803e3d6000fd5b50505050505050565b6106bb610bc2565b600491909155600355565b60408051808201909152600080825260208201526060807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316331461072657604051630fd72cd960e31b815260040160405180910390fd5b61073761073287611372565b610bef565b9150845160001461074857846107d4565b600580546107559061140f565b80601f01602080910402602001604051908101604052809291908181526020018280546107819061140f565b80156107ce5780601f106107a3576101008083540402835291602001916107ce565b820191906000526020600020905b8154815290600101906020018083116107b157829003601f168201915b50505050505b90506107e08282610c47565b60405180604001604052806004548152602001856107ff576000610803565b6003545b9052969195509350915050565b610818610bc2565b6108226000610caf565b565b600580546108319061140f565b80601f016020809104026020016040519081016040528092919081815260200182805461085d9061140f565b80156108aa5780601f1061087f576101008083540402835291602001916108aa565b820191906000526020600020905b81548152906001019060200180831161088d57829003601f168201915b505050505081565b6108ba610bc2565b6001600160a01b0382166108e157604051633d3496e160e01b815260040160405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e4fe1d946040518163ffffffff1660e01b8152600401602060405180830381865afa158015610941573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109659190611443565b90506001600160a01b03811661098e576040516354c1781b60e01b815260040160405180910390fd5b6109a26001600160a01b0382168484610cff565b505050565b6109af610bc2565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b60408051808201909152600080825260208201526040518060400160405280600454815260200183610a04576000610a08565b6003545b905295945050505050565b610a1b610bc2565b6005610a2782826114a8565b5050565b610a33610bc2565b6001600160a01b038116610a6257604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b610a6b81610caf565b50565b610a76610bc2565b6001600160a01b038216610a9d57604051633d3496e160e01b815260040160405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e1758bd86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610afd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b219190611443565b90506109a2818484610d51565b6000610b3e600d60098486611567565b610b4791611591565b60e01c9392505050565b6000610b61602d600d8486611567565b610b6a916115c1565b9392505050565b6000610b81600960018486611567565b610b8a916115df565b60c01c9392505050565b6000610b6a610ba38484610d74565b90565b366000610bb68360518187611567565b915091505b9250929050565b6000546001600160a01b031633146108225760405163118cdaa760e01b8152336004820152602401610a59565b8051602080830151604080850151606080870151608088015160a089015160c08a015195519398610c3198600198919791966001600160a01b0316950161160d565b6040516020818303038152906040529050919050565b600154604051631f5dad8b60e31b81526001600160a01b039091169063faed6c5890610c799085908590600401611688565b600060405180830381600087803b158015610c9357600080fd5b505af1158015610ca7573d6000803e3d6000fd5b505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526109a2908490610d84565b6001600160a01b038316610d69576109a28282610dfb565b6109a2838383610ea8565b6000610b61605160318486611567565b600080602060008451602086016000885af180610da7576040513d6000823e3d81fd5b50506000513d91508115610dbf578060011415610dcc565b6001600160a01b0384163b155b15610df557604051635274afe760e01b81526001600160a01b0385166004820152602401610a59565b50505050565b6001600160a01b038216610e22576040516306b7a93160e41b815260040160405180910390fd5b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114610e6f576040519150601f19603f3d011682016040523d82523d6000602084013e610e74565b606091505b50509050806109a257604051631196f20d60e21b81526001600160a01b038416600482015260248101839052604401610a59565b6001600160a01b038216610ecf576040516306b7a93160e41b815260040160405180910390fd5b6109a26001600160a01b0384168383610cff565b600060208284031215610ef557600080fd5b81356001600160e01b031981168114610b6a57600080fd5b60008083601f840112610f1f57600080fd5b5081356001600160401b03811115610f3657600080fd5b602083019150836020828501011115610bbb57600080fd5b60008060208385031215610f6157600080fd5b82356001600160401b03811115610f7757600080fd5b610f8385828601610f0d565b90969095509350505050565b6020810160038310610fb157634e487b7160e01b600052602160045260246000fd5b91905290565b60008060408385031215610fca57600080fd5b50508035926020909101359150565b600060e08284031215610feb57600080fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b60405160e081016001600160401b038111828210171561102957611029610ff1565b60405290565b600082601f83011261104057600080fd5b81356001600160401b038082111561105a5761105a610ff1565b604051601f8301601f19908116603f0116810190828211818310171561108257611082610ff1565b8160405283815286602085880101111561109b57600080fd5b836020870160208301376000602085830101528094505050505092915050565b803580151581146110cb57600080fd5b919050565b6000806000606084860312156110e557600080fd5b83356001600160401b03808211156110fc57600080fd5b61110887838801610fd9565b9450602086013591508082111561111e57600080fd5b5061112b8682870161102f565b92505061113a604085016110bb565b90509250925092565b60005b8381101561115e578181015183820152602001611146565b50506000910152565b6000815180845261117f816020860160208601611143565b601f01601f19169290920160200192915050565b83518152602080850151908201526080604082015260006111b76080830185611167565b82810360608401526111c98185611167565b9695505050505050565b803563ffffffff811681146110cb57600080fd5b6000602082840312156111f957600080fd5b610b6a826111d3565b602081526000610b6a6020830184611167565b6001600160a01b0381168114610a6b57600080fd5b80356110cb81611215565b6000806040838503121561124857600080fd5b823561125381611215565b946020939093013593505050565b60006020828403121561127357600080fd5b8135610b6a81611215565b6000806000806060858703121561129457600080fd5b84356001600160401b03808211156112ab57600080fd5b6112b788838901610fd9565b955060208701359150808211156112cd57600080fd5b506112da87828801610f0d565b90945092506112ed9050604086016110bb565b905092959194509250565b81518152602080830151908201526040810161053b565b60006020828403121561132157600080fd5b81356001600160401b0381111561133757600080fd5b6113438482850161102f565b949350505050565b8183823760009101908152919050565b80356001600160401b03811681146110cb57600080fd5b600060e0823603121561138457600080fd5b61138c611007565b6113958361135b565b81526113a3602084016111d3565b60208201526113b46040840161122a565b60408201526113c5606084016111d3565b60608201526080830135608082015260a083013560a082015260c08301356001600160401b038111156113f757600080fd5b6114033682860161102f565b60c08301525092915050565b600181811c9082168061142357607f821691505b602082108103610feb57634e487b7160e01b600052602260045260246000fd5b60006020828403121561145557600080fd5b8151610b6a81611215565b601f8211156109a2576000816000526020600020601f850160051c810160208610156114895750805b601f850160051c820191505b81811015610ca757828155600101611495565b81516001600160401b038111156114c1576114c1610ff1565b6114d5816114cf845461140f565b84611460565b602080601f83116001811461150a57600084156114f25750858301515b600019600386901b1c1916600185901b178555610ca7565b600085815260208120601f198616915b828110156115395788860151825594840194600190910190840161151a565b50858210156115575787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000808585111561157757600080fd5b8386111561158457600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156115b95780818660040360031b1b83161692505b505092915050565b8035602083101561053b57600019602084900360031b1b1692915050565b6001600160c01b031981358181169160088510156115b95760089490940360031b84901b1690921692915050565b60ff60f81b8960f81b1681526001600160401b0360c01b8860c01b166001820152600063ffffffff60e01b808960e01b16600984015287600d840152808760e01b16602d840152508460318301528360518301528251611674816071850160208701611143565b919091016071019998505050505050505050565b60408152600061169b6040830185611167565b82810360208401526116ad8185611167565b9594505050505056fea2646970667358221220c3e86e5a7f47955117c968f35183229c2a822980b5af2d2973f411f36b4f38a564736f6c63430008160033608060405234801561001057600080fd5b506107d2806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063e5c5e9a314610030575b600080fd5b61004361003e366004610529565b61005a565b6040516100519291906105eb565b60405180910390f35b6060806100678484610072565b915091509250929050565b606080600283101561009f5760405163196499c760e21b8152600060048201526024015b60405180910390fd5b60006100ae6002828688610619565b6100b791610643565b60f01c90506002600219820161021f578060005b868310156101c45760006100e460018501858a8c610619565b6100ed91610673565b60f81c9050600081900361011757604051636780cfaf60e01b815260006004820152602401610096565b8160ff1660000361012a57809150610167565b8160ff168160ff16146101675736600061014686868c8e610619565b915091506101578989868585610236565b9099509750859450919250829150505b600184019360009061017e90600301868b8d610619565b61018791610643565b60f01c905060008190036101b15760405163196499c760e21b815260048101869052602401610096565b8060020161ffff168501945050506100cb565b8287146101e75760405163196499c760e21b815260048101849052602401610096565b6002871115610218573660006101ff85858b8d610619565b915091506102108888858585610236565b909850965050505b505061022d565b61022a828787610356565b93505b50509250929050565b60608060001960ff8616016102b35786511561027557868484604051602001610261939291906106a1565b6040516020818303038152906040526102ac565b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050505b965061034b565b60011960ff86160161032d578551156102ef578584846040516020016102db939291906106a1565b604051602081830303815290604052610326565b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050505b955061034b565b604051636780cfaf60e01b815260ff86166004820152602401610096565b509495939450505050565b606060001961ffff8516016103f65760228214610386576040516301b8ca5560e31b815260040160405180910390fd5b60006103a7610399602260028688610619565b6103a2916106c9565b6104e8565b604051600160f81b60208201819052601160f01b602183015260238201526001600160801b0319608083901b1660248201529091506034016040516020818303038152906040529150506104e1565b60011961ffff8516016104c2576042821115806104135750606282115b15610431576040516360493e2b60e11b815260040160405180910390fd5b6000610444610399602260028688610619565b90506000610459610399604260228789610619565b90506000604119850161046f866042818a610619565b610478916106c9565b60405160086020938403029190911c92506104a9916001916011918391889183916031916002918b918b91016106e8565b60405160208183030381529060405293505050506104e1565b604051630417051360e41b815261ffff85166004820152602401610096565b9392505050565b60006fffffffffffffffffffffffffffffffff821115610525576040516306dfcc6560e41b81526080600482015260248101839052604401610096565b5090565b6000806020838503121561053c57600080fd5b823567ffffffffffffffff8082111561055457600080fd5b818501915085601f83011261056857600080fd5b81358181111561057757600080fd5b86602082850101111561058957600080fd5b60209290920196919550909350505050565b60005b838110156105b657818101518382015260200161059e565b50506000910152565b600081518084526105d781602086016020860161059b565b601f01601f19169290920160200192915050565b6040815260006105fe60408301856105bf565b828103602084015261061081856105bf565b95945050505050565b6000808585111561062957600080fd5b8386111561063657600080fd5b5050820193919092039150565b6001600160f01b0319813581811691600285101561066b5780818660020360031b1b83161692505b505092915050565b6001600160f81b0319813581811691600185101561066b5760019490940360031b84901b1690921692915050565b600084516106b381846020890161059b565b8201838582376000930192835250909392505050565b803560208310156106e257600019602084900360031b1b165b92915050565b60f88a811b6001600160f81b0319908116835260f08b901b6001600160f01b031916600184015289821b81166003840152608089901b6001600160801b03191660048401529087901b1660148201526000610752601583018760f01b6001600160f01b0319169052565b61076b601783018660f81b6001600160f81b0319169052565b610784601883018560801b6001600160801b0319169052565b5060288101919091526048019897505050505050505056fea2646970667358221220994aaf0c18254f983fac2634c8bb3f9ecd3d5348f39af4ed525562428cb6fc4f64736f6c6343000816003341304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f50a26469706673582212202bb9056fdb9ac573ad9acea30a99e1a498eb6b60643829bb5d022a08e09cf68564736f6c63430008160033", - "sourceMap": "1158:4500:128:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21149:174:71;;;;;;;;;;-1:-1:-1;21149:174:71;;;;;:::i;:::-;;:::i;:::-;;23482:633;;;;;;:::i;:::-;;:::i;1492:804:128:-;;;;;;;;;;;;;:::i;4416:50:71:-;;;;;;;;;;;;4461:5;4416:50;;;;;3353:6:132;3341:19;;;3323:38;;3311:2;3296:18;4416:50:71;;;;;;;;4297;;;;;;;;;;;;4343:4;4297:50;;;;;3548:32:132;3536:45;;;3518:64;;3506:2;3491:18;4297:50:71;3372:216:132;5226:166:71;;;;;;;;;;-1:-1:-1;5226:166:71;;;;;:::i;:::-;;:::i;2452:134:91:-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;4586:43:71:-;;;;;;;;;;-1:-1:-1;4586:43:71;;;;-1:-1:-1;;;;;4586:43:71;;;;;;-1:-1:-1;;;;;5117:47:132;;;5099:66;;5087:2;5072:18;4586:43:71;4953:218:132;16845:490:71;;;;;;;;;;-1:-1:-1;16845:490:71;;;;;:::i;:::-;;:::i;3360:151:91:-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;25280:469:71:-;;;;;;:::i;:::-;;:::i;3221:133:91:-;;;;;;;;;;;;;:::i;2922:141::-;;;;;;;;;;;;;:::i;5976:204:70:-;;;;;;;;;;-1:-1:-1;5976:204:70;;;;;:::i;:::-;;:::i;:::-;;;;9748:6:132;9736:19;;;9718:38;;-1:-1:-1;;;;;9845:15:132;;;9840:2;9825:18;;9818:43;9897:15;;9877:18;;;9870:43;9706:2;9691:18;5976:204:70;9518:401:132;4530:49:71;;;;;;;;;;;;4574:5;4530:49;;;;;10098:10:132;10086:23;;;10068:42;;10056:2;10041:18;4530:49:71;9924:192:132;30440:228:71;;;;;;;;;;-1:-1:-1;30440:228:71;;;;;:::i;:::-;;:::i;:::-;;;10726:14:132;;10719:22;10701:41;;10689:2;10674:18;30440:228:71;10561:187:132;26061:4058:71;;;;;;;;;;-1:-1:-1;26061:4058:71;;;;;:::i;:::-;;:::i;18447:360::-;;;;;;;;;;-1:-1:-1;18447:360:71;;;;;:::i;:::-;;:::i;2738:178:91:-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;4229:53:71:-;;;;;;;;;;;;4278:4;4229:53;;5349:249:70;;;;;;;;;;-1:-1:-1;5349:249:70;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;17605:528:71:-;;;;;;;;;;-1:-1:-1;17605:528:71;;;;;:::i;:::-;;:::i;3554:2059:128:-;;;;;;;;;;;;;:::i;30674:338:71:-;;;;;;;;;;-1:-1:-1;30674:338:71;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;21518:1958::-;;;;;;;;;;-1:-1:-1;21518:1958:71;;;;;:::i;:::-;;:::i;2592:140:91:-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;3069:146::-;;;;;;;;;;;;;:::i;6186:197:70:-;;;;;;;;;;-1:-1:-1;6186:197:70;;;;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;18132:15:132;;;18114:34;;18196:10;18184:23;;;18179:2;18164:18;;18157:51;18244:15;;18224:18;;;18217:43;;;;18049:2;18034:18;6186:197:70;17861:405:132;30125:187:71;;;;;;;;;;-1:-1:-1;30125:187:71;;;;;:::i;:::-;;:::i;24702:376::-;;;;;;:::i;:::-;;:::i;30318:116::-;;;;;;;;;;-1:-1:-1;30318:116:71;;;;;:::i;:::-;;:::i;4166:57::-;;;;;;;;;;;;4217:6;4166:57;;;;;20012:25:132;;;20000:2;19985:18;4166:57:71;19866:177:132;2157:141:91;;;;;;;;;;;;;:::i;20814:147:71:-;;;;;;;;;;-1:-1:-1;20814:147:71;;;;;:::i;:::-;;:::i;4472:52::-;;;;;;;;;;;;4523:1;4472:52;;5786:184:70;;;;;;;;;;-1:-1:-1;5786:184:70;;;;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;20558:47:132;;;20540:66;;20637:2;20622:18;;20615:34;;;;20513:18;5786:184:70;20366:289:132;1819:584:85;;;;;;;;;;;;;:::i;4104:56:71:-;;;;;;;;;;;;4147:13;4104:56;;2654:894:128;;;;;;;;;;;;;:::i;5621:10886:71:-;;;;;;;;;;-1:-1:-1;5621:10886:71;;;;;:::i;:::-;;:::i;5120:100::-;;;;;;;;;;-1:-1:-1;5120:100:71;;;;;:::i;:::-;5185:16;:28;;-1:-1:-1;;;;;;5185:28:71;-1:-1:-1;;;;;5185:28:71;;;;;;;;;;5120:100;2304:142:91;;;;;;;;;;;;;:::i;2302:346:128:-;;;;;;;;;;;;;:::i;24121:575:71:-;;;;;;:::i;:::-;;:::i;5604:176:70:-;;;;;;;;;;-1:-1:-1;5604:176:70;;;;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;21892:15:132;;;21874:34;;21944:15;;;;21939:2;21924:18;;21917:43;21794:18;5604:176:70;21647:319:132;1572:26:85;;;;;;;;;;-1:-1:-1;1572:26:85;;;;;;;;19989:464:71;;;;;;;;;;-1:-1:-1;19989:464:71;;;;;:::i;:::-;;:::i;21149:174::-;21226:90;21240:7;21273:11;-1:-1:-1;;;;;21257:29:71;21249:38;;21289:1;21300:3;21306:9;;;;;;;;;;;;21226:13;:90::i;:::-;21149:174;;:::o;23482:633::-;23645:19;23678:9;:32;23688:21;:12;;:19;:21::i;:::-;23678:32;;;;;;;;;;;;;-1:-1:-1;23678:32:71;;;;-1:-1:-1;;;;;23678:32:71;;-1:-1:-1;;23754:36:71;23781:8;23754:26;:36::i;:::-;23721:69;;;;;23801:20;23824:74;;;;;;;;23831:21;:12;;:19;:21::i;:::-;23824:74;;;;;;23854:21;:12;;:19;:21::i;:::-;23824:74;;;;23877:20;:12;;:18;:20::i;:::-;-1:-1:-1;;;;;23824:74:71;;;23801:97;-1:-1:-1;;;;;;23908:18:71;;;-1:-1:-1;;;;;23908:200:71;;;;;;23801:97;23986:26;:12;;:24;:26::i;:::-;24026:19;:12;;:17;:19::i;:::-;24089:9;;;;;;;;-1:-1:-1;24089:9:71;;23908:200;;-1:-1:-1;;;;;;23908:200:71;;;;;;;;;;;;24059:16;;23908:200;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23635:480;;;;23482:633;;;;:::o;1492:804:128:-;1551:5;;1543:26;;-1:-1:-1;;;1543:26:128;;-1:-1:-1;;;;;1551:5:128;;;1543:26;;;23947:51:132;1558:10:128;24014:18:132;;;24007:34;1543:7:128;;;;23920:18:132;;1543:26:128;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1587:5:128;;1579:26;;-1:-1:-1;;;1579:26:128;;-1:-1:-1;;;;;1587:5:128;;;1579:26;;;23947:51:132;1594:10:128;24014:18:132;;;24007:34;1579:7:128;;-1:-1:-1;1579:7:128;;-1:-1:-1;23920:18:132;;1579:26:128;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1616:13;:11;:13::i;:::-;1639:45;1654:1;1657:26;1639:14;:45::i;:::-;1723:108;1735:26;;;;;;;;:::i;:::-;-1:-1:-1;;1735:26:128;;;;;;;;;;;;;;;;1808:4;;;;1798:15;;;;1735:26;1798:15;;;;;;;1763:67;;-1:-1:-1;;;;;1798:15:128;;;;1824:4;;1763:67;;:::i;:::-;;;;;;;;;;;;;1723:11;:108::i;:::-;1695:4;;:146;;;;;-1:-1:-1;;;;;1695:146:128;;;;;-1:-1:-1;;;;;1695:146:128;;;;;;1880:108;1892:26;;;;;;;;:::i;:::-;-1:-1:-1;;1892:26:128;;;;;;;;;;;;;;;;1965:4;;;;;;;;1955:15;;;;1892:26;1955:15;;;;;;;1920:67;;-1:-1:-1;;;;;1955:15:128;;;;1981:4;;1920:67;;:::i;1880:108::-;1852:4;:146;;-1:-1:-1;;;;;;1852:146:128;-1:-1:-1;;;;;1852:146:128;;;;;;;;;;2069:16;;;2083:1;2069:16;;;;;;;;-1:-1:-1;;2069:16:128;;;;;;;;;;-1:-1:-1;2069:16:128;2045:40;;2113:4;;;;;;;;;-1:-1:-1;;;;;2113:4:128;2095;2100:1;2095:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2095:23:128;;;:7;;;;;;;;;:23;2146:4;;2128:7;;2146:4;;;2128;;2146;;2128:7;;;;;;:::i;:::-;-1:-1:-1;;;;;2128:23:128;;;:7;;;;;;;;;;;:23;2161:20;;-1:-1:-1;;;2161:20:128;;:4;;:14;;:20;;2176:4;;2161:20;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2215:4:128;;2225:5;;2232:14;;2215:32;;-1:-1:-1;;;2215:32:128;;-1:-1:-1;;;;;2225:5:128;;;2215:32;;;23947:51:132;24014:18;;;24007:34;;;;-1:-1:-1;;;2215:4:128;;;;;-1:-1:-1;2215:9:128;;-1:-1:-1;23920:18:132;;2215:32:128;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2257:4:128;;2267:5;;2274:14;;2257:32;;-1:-1:-1;;;2257:32:128;;-1:-1:-1;;;;;2267:5:128;;;2257:32;;;23947:51:132;24014:18;;;24007:34;;;;2257:4:128;;;-1:-1:-1;2257:9:128;;-1:-1:-1;23920:18:132;;2257:32:128;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1533:763;1492:804::o;5226:166:71:-;5313:72;5329:12;5343;5371;5357:27;;-1:-1:-1;;;;;5357:27:71;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5357:27:71;;5313:15;:72::i;2452:134:91:-;2499:33;2563:16;2544:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2544:35:91;;;;;;;;;;;;;;;;;;;;;;;2452:134;:::o;16845:490:71:-;16976:22;17032:8;17018:23;;-1:-1:-1;;;;;17018:23:71;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17018:23:71;-1:-1:-1;17010:31:71;-1:-1:-1;17068:9:71;17051:234;17085:20;17097:8;17085:9;:20;:::i;:::-;17079:26;;:3;:26;;;17051:234;;;17193:14;;;17128:12;17193:14;;;:9;:14;;;;;;;;17174:56;;-1:-1:-1;;;;;17193:14:71;;;17174:56;;;26700:34:132;;;;17218:4:71;26750:18:132;;;26743:43;17193:14:71;26802:18:132;;;26795:50;17143:88:71;;17155:17;;26635:18:132;;17174:56:71;26466:385:132;17143:88:71;17128:103;-1:-1:-1;17128:103:71;17245:5;17251:15;17257:9;17251:3;:15;:::i;:::-;17245:22;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;17245:29:71;;;:22;;;;;;;;;;;:29;-1:-1:-1;17107:5:71;;17051:234;;;;17312:16;17322:5;17312:9;:16::i;:::-;16845:490;;;;;:::o;3360:151:91:-;3409:42;3485:19;3463:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3463:41:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3360:151;:::o;25280:469:71:-;25524:18;;;25491:19;25524:18;;;:9;:18;;;;;;-1:-1:-1;;;;;25524:18:71;;25491:19;;25598:39;25628:8;25598:29;:39::i;:::-;25553:84;;;;;;25647:8;-1:-1:-1;;;;;25647:18:71;;25674:5;25686:3;25647:95;25692:5;25699:3;25704:5;25711;25718:12;;25732:9;;;;;;;;;;;;25647:95;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25481:268;;;;25280:469;;;;;;;:::o;3221:133:91:-;3267:33;3331:16;3312:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3312:35:91;;;;;;;;;;;;;;;;;;;;;;3221:133;:::o;2922:141::-;2970:35;3038:18;3017:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3017:39:91;;;;;;;;;;;;;;;;;;;;;;2922:141;:::o;5976:204:70:-;6068:12;6082:11;6095:13;6127:46;6165:7;;6127:37;:46::i;:::-;6120:53;;;;;;5976:204;;;;;:::o;30440:228:71:-;30592:21;;;30525:9;30592:21;;;:12;:21;;;;;;;;:34;;;;;;;;30525:9;30643:14;30592:34;30643:12;:14::i;:::-;:18;30636:25;;;30440:228;;;;;:::o;26061:4058::-;26164:13;26180:21;:12;;:19;:21::i;:::-;26244:17;;;26211:19;26244:17;;;:9;:17;;;;;;26164:37;;-1:-1:-1;;;;;;26244:17:71;;;;;26297:26;26324;:12;;:24;:26::i;:::-;26352:21;:12;;:19;:21::i;:::-;26297:77;;-1:-1:-1;;;;;;26297:77:71;;;;;;;-1:-1:-1;;;;;28352:32:132;;;26297:77:71;;;28334:51:132;26297:77:71;28421:23:132;28401:18;;;28394:51;28307:18;;26297:77:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26272:102;;;26384:25;26412:21;:12;;:19;:21::i;:::-;26384:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26465:33:71;;;-1:-1:-1;;;26465:33:71;;;;26384:49;;-1:-1:-1;26384:49:71;;-1:-1:-1;;;;;26465:31:71;;;-1:-1:-1;26465:31:71;;-1:-1:-1;26465:33:71;;;;;-1:-1:-1;26465:33:71;;;;;;;:31;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26444:54;;;;26512:5;-1:-1:-1;;;;;26512:10:71;26521:1;26512:10;26508:3605;;26613:10;26576:20;-1:-1:-1;;;;;26660:16:71;;;26677:21;:12;;:19;:21::i;:::-;26700:26;:12;;:24;:26::i;:::-;26660:70;;-1:-1:-1;;;;;;26660:70:71;;;;;;;;30141:15:132;;;;26660:70:71;;;30123:34:132;-1:-1:-1;;;;;30193:32:132;30173:18;;;30166:60;26728:1:71;30242:18:132;;;30235:43;30067:18;;26660:70:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;26660:70:71;;;;;;;;;;;;:::i;:::-;26638:92;;26763:7;26788:6;26777:31;;;;;;;;;;;;:::i;:::-;:44;;;26822:1;26777:47;;;;;;;;:::i;:::-;;;;;;;26763:62;;26840:19;26872:22;:12;;:20;:22::i;:::-;26862:33;;;;;;;:::i;:::-;;;;;;;;26840:55;;26930:23;26967:27;27037:29;;;27084:12;27114:11;27143:3;26997:163;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;26997:163:71;;;;;;;;;;;;;;-1:-1:-1;;;;;26997:163:71;-1:-1:-1;;;;;;26997:163:71;;;;;;;;;;;-1:-1:-1;;;;;;;27207:16:71;;;27224:6;27240;26997:163;27265:22;:15;27283:4;27265:22;:::i;:::-;27207:81;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27192:96;;27319:10;27324:4;27319;:10::i;:::-;27388:21;;;27407:1;27388:21;;;;;;;;;27306:23;;-1:-1:-1;27357:28:71;;-1:-1:-1;27388:21:71;;;;;;:::i;:::-;;;;;;;;;;;;;;;;27357:52;;27435:89;;;;;;;;27448:6;27435:89;;;;;;27464:6;-1:-1:-1;;;;;27435:89:71;;;;;27473:14;27435:89;;;;27489:15;27507:4;27489:22;;;;:::i;:::-;27435:89;;;;27513:10;27435:89;;;27423:6;27430:1;27423:9;;;;;;;;:::i;:::-;;;;;;;;;;:101;27538:19;;-1:-1:-1;;;27538:19:71;;-1:-1:-1;;;;;27538:11:71;;;;;:19;;27550:6;;27538:19;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27607:21;27671:41;;;27730:12;27760:11;27631:154;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;27631:154:71;;;;;;;;;;;;;;-1:-1:-1;;;;;27631:154:71;-1:-1:-1;;;;;;27631:154:71;;;;;;;;;;;-1:-1:-1;;;;;;;27832:16:71;;;27849:6;27865;27631:154;27884:22;:15;27902:4;27884:22;:::i;:::-;27832:75;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27817:90;;27938:10;27943:4;27938;:10::i;:::-;27925:23;;27799:164;27988:83;;;;;;;;28001:6;27988:83;;;;;;28017:6;-1:-1:-1;;;;;27988:83:71;;;;;28026:8;27988:83;;;;28036:15;28054:4;28036:22;;;;:::i;:::-;27988:83;;;;28060:10;27988:83;;;27976:6;27983:1;27976:9;;;;;;;;:::i;:::-;;;;;;;;;;:95;28085:19;;-1:-1:-1;;;28085:19:71;;-1:-1:-1;;;;;28085:11:71;;;;;:19;;28097:6;;28085:19;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26524:1591;;;;;;;;26508:3605;;;28125:5;-1:-1:-1;;;;;28125:11:71;28134:2;28125:11;28121:1992;;28193:10;28152:18;-1:-1:-1;;;;;28241:16:71;;;28258:21;:12;;:19;:21::i;:::-;28281:26;:12;;:24;:26::i;:::-;28241:70;;-1:-1:-1;;;;;;28241:70:71;;;;;;;;30141:15:132;;;;28241:70:71;;;30123:34:132;-1:-1:-1;;;;;30193:32:132;30173:18;;;30166:60;28309:1:71;30242:18:132;;;30235:43;30067:18;;28241:70:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;28241:70:71;;;;;;;;;;;;:::i;:::-;28219:92;;28355:7;28380:6;28369:35;;;;;;;;;;;;:::i;:::-;:48;;;28418:1;28369:51;;;;;;;;:::i;:::-;;;;;;;28355:66;;28436:19;28468:22;:12;;:20;:22::i;:::-;28458:33;;;;;;;:::i;:::-;;;;;;;;28436:55;;28505:27;28562:19;:12;;:17;:19::i;:::-;28583:16;28545:55;;;;;;;;;:::i;:::-;;;;;;;;;;;;;28535:66;;;;;;28505:96;;28615:23;28671:27;28745;;;28794:12;28828:11;28861:19;28701:197;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;28701:197:71;;;;;;;;;;;;;;-1:-1:-1;;;;;28701:197:71;-1:-1:-1;;;;;;28701:197:71;;;;;;;;;;;-1:-1:-1;;;;;;;28937:16:71;;;28954:6;28970;28701:197;28995:22;:15;29013:4;28995:22;:::i;:::-;28937:81;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28916:102;;29049:16;29054:10;29049:4;:16::i;:::-;29114:21;;;29133:1;29114:21;;;;;;;;;29036:29;;-1:-1:-1;29083:28:71;;29114:21;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;29083:52;;29165:89;;;;;;;;29178:6;29165:89;;;;;;29194:6;-1:-1:-1;;;;;29165:89:71;;;;;29203:14;29165:89;;;;29219:15;29237:4;29219:22;;;;:::i;:::-;29165:89;;;;29243:10;29165:89;;;29153:6;29160:1;29153:9;;;;;;;;:::i;:::-;;;;;;;;;;:101;29272:19;;-1:-1:-1;;;29272:19:71;;-1:-1:-1;;;;;29272:11:71;;;;;:19;;29284:6;;29272:19;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28653:653;;;29373:21;29441:39;;;29502:12;29536:11;29569:19;29397:209;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;29397:209:71;;;;;;;;;;;;;;-1:-1:-1;;;;;29397:209:71;-1:-1:-1;;;;;;29397:209:71;;;;;;;;;;;-1:-1:-1;;;;;;;29645:16:71;;;29662:6;29678;29397:209;29697:22;:15;29715:4;29697:22;:::i;:::-;29645:75;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29624:96;;29751:16;29756:10;29751:4;:16::i;:::-;29816:21;;;29835:1;29816:21;;;;;;;;;29738:29;;-1:-1:-1;29785:28:71;;29816:21;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;29785:52;;29867:83;;;;;;;;29880:6;29867:83;;;;;;29896:6;-1:-1:-1;;;;;29867:83:71;;;;;29905:8;29867:83;;;;29915:15;29933:4;29915:22;;;;:::i;:::-;29867:83;;;;29939:10;29867:83;;;29855:6;29862:1;29855:9;;;;;;;;:::i;:::-;;;;;;;;;;:95;29968:19;;-1:-1:-1;;;29968:19:71;;-1:-1:-1;;;;;29968:11:71;;;;;:19;;29980:6;;29968:19;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29355:647;;;28138:1874;;;;;;28121:1992;;;30032:70;;-1:-1:-1;;;30032:70:71;;-1:-1:-1;;;;;30032:56:71;;;;;:70;;30089:12;;;;30032:70;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28121:1992;26154:3965;;;;;26061:4058;;;:::o;18447:360::-;18542:9;18537:264;18561:5;:12;18557:1;:16;18537:264;;;18594:29;18646:5;18652:1;18646:8;;;;;;;;:::i;:::-;;;;;;;18594:61;;18674:9;18669:122;18693:8;:15;18689:1;:19;18669:122;;;18733:9;-1:-1:-1;;;;;18733:24:71;;18758:8;18767:1;18758:11;;;;;;;;:::i;:::-;;;;;;;;;;;18733:43;;-1:-1:-1;;;;;;18733:43:71;;;;;;;;38841:23:132;;;18733:43:71;;;38823:42:132;18771:4:71;38881:18:132;;;38874:50;38796:18;;18733:43:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;18710:3:71;;;;;-1:-1:-1;18669:122:71;;-1:-1:-1;18669:122:71;;-1:-1:-1;;18575:3:71;;18537:264;;;;18447:360;;:::o;2738:178:91:-;2794:48;2883:26;2854:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2854:55:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2854:55:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5349:249:70;5464:16;5482:21;;5505:14;5538:53;5573:8;;5583:7;5538:34;:53::i;:::-;5531:60;;;;;;;;5349:249;;;;;;;:::o;17605:528:71:-;17680:12;;17665;17702:425;17726:4;17722:1;:8;17702:425;;;17751:22;17789:5;17795:1;17789:8;;;;;;;;:::i;:::-;;;;;;;17751:47;;17817:9;17812:305;17836:4;17832:1;:8;17812:305;;;17865:20;;;17877:8;17865:20;17903:23;17942:5;17948:1;17942:8;;;;;;;;:::i;:::-;;;;;;;17903:48;;17969:16;17989:10;-1:-1:-1;;;;;17989:19:71;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;17988:27:71;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17969:48;;18035:9;-1:-1:-1;;;;;18035:17:71;;18053:9;18064:37;18089:10;-1:-1:-1;;;;;31116:23:71;;31018:129;18064:37;18035:67;;-1:-1:-1;;;;;;18035:67:71;;;;;;;;39664:23:132;;;;18035:67:71;;;39646:42:132;39704:18;;;39697:34;39619:18;;18035:67:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17847:270;;17812:305;17842:3;;17812:305;;;-1:-1:-1;;17732:3:71;;17702:425;;3554:2059:128;3676:21;;3631:7;;3608:20;;3676:21;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;3649:48;;3708:20;3731:145;3863:1;3866:6;3874:1;3731:91;3812:6;3820:1;3731:40;1370:24:60;;;-1:-1:-1;;;1370:24:60;;;73860:51:132;1370:24:60;;;;;;;;;73927:11:132;;;;1370:24:60;;;;1294:107;3731:40:128;:80;:91;:80;:91::i;:::-;:131;:145;;:131;:145::i;:::-;3886:35;;;;;;;;;;;-1:-1:-1;;;3886:35:128;;;;;;;;3960:199;;;;;;;3983:4;;;;;;;3960:199;;-1:-1:-1;;;;;31116:23:71;;;3960:199:128;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3960:199:128;;;;;;;;;;4195:32;;-1:-1:-1;;;4195:32:128;;3708:168;;-1:-1:-1;3886:35:128;;3960:199;;-1:-1:-1;;;;;4195:4:128;;;;;;:14;;:32;;3960:199;;-1:-1:-1;;4195:32:128;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4247:4;;4262:5;;4247:21;;-1:-1:-1;;;4247:21:128;;-1:-1:-1;;;;;4262:5:128;;;4247:21;;;41758:51:132;4169:58:128;;-1:-1:-1;4238:47:128;;-1:-1:-1;;;4247:4:128;;;;;:14;;41731:18:132;;4247:21:128;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4270:14;;4238:8;:47::i;:::-;4304:4;;:33;;-1:-1:-1;;;4304:33:128;;-1:-1:-1;;;;;41776:32:132;;;4304:33:128;;;41758:51:132;4295:46:128;;4304:4;;:14;;41731:18:132;;4304:33:128;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4339:1;4295:8;:46::i;:::-;4361:5;;4352:15;;-1:-1:-1;;;4352:15:128;;-1:-1:-1;;;;;4361:5:128;;;4352:15;;;41758:51:132;4352:8:128;;;;41731:18:132;;4352:15:128;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4446:4:128;;4464:13;;4446:119;;-1:-1:-1;;;4446:119:128;;4378:34;;-1:-1:-1;4378:34:128;;-1:-1:-1;;;;4446:4:128;;;-1:-1:-1;;;;;4446:4:128;;:9;;4464:13;4446:119;;4493:9;;4464:13;;4549:4;;4446:119;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4589:4;;4620;;4377:188;;-1:-1:-1;4377:188:128;;-1:-1:-1;4575:52:128;;4589:4;;;;;;;-1:-1:-1;;;;;4620:4:128;20814:147:71;:::i;4575:52:128:-;4666:14;4683:4;;;;;;;;;;;4666:21;;4697:13;4721:4;;;;;;;;;-1:-1:-1;;;;;4721:4:128;4697:29;;4736:21;4760:7;4736:31;;4777:13;4793:10;:15;;;4777:31;;4818:11;4840:8;4818:31;;4859:25;4887:191;4926:10;:16;;;4956:4;;;;;;;;;;;4974:10;:27;;;5032:23;5049:5;;;;;;;;;-1:-1:-1;;;;;5049:5:128;-1:-1:-1;;;;;31116:23:71;;31018:129;5032:23:128;5057:10;5015:53;;;;;;;;;:::i;:::-;;;;;;;;;;;;;4887:25;:191::i;:::-;5088:66;;-1:-1:-1;;;5088:66:128;;4859:219;;-1:-1:-1;5088:4:128;;:14;;:66;;5103:7;;5112:5;;5119:8;;5129:5;;5136:3;;4859:219;;5088:66;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5174:4:128;;5189:5;;5174:21;;-1:-1:-1;;;5174:21:128;;-1:-1:-1;;;;;5189:5:128;;;5174:21;;;41758:51:132;5165:62:128;;-1:-1:-1;;;;5174:4:128;;;;;-1:-1:-1;5174:14:128;;41731:18:132;;5174:21:128;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5214:12;5197:14;;:29;;;;:::i;:::-;5165:8;:62::i;:::-;5246:4;;:33;;-1:-1:-1;;;5246:33:128;;-1:-1:-1;;;;;41776:32:132;;;5246:33:128;;;41758:51:132;5237:57:128;;5246:4;;:14;;41731:18:132;;5246:33:128;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5281:12;5237:8;:57::i;:::-;5305:32;5314:8;-1:-1:-1;;;;;5314:13:128;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5331:5;5305:8;:32::i;:::-;5347;5356:8;-1:-1:-1;;;;;5356:13:128;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5373:5;5347:8;:32::i;:::-;5389:42;5398:8;-1:-1:-1;;;;;5398:16:128;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5398:18:128;;;;;;;;;;;;:::i;:::-;5418:12;5389:8;:42::i;:::-;5441:44;5450:8;-1:-1:-1;;;;;5450:17:128;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5479:4;5441:8;:44::i;:::-;5495;5504:8;-1:-1:-1;;;;;5504:18:128;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30674:338:71;30845:21;;;30799:43;30845:21;;;:12;:21;;;;;;;;:34;;;;;;;;30763:24;;30893:14;30845:34;30893:12;:14::i;:::-;:18;30889:117;;;30927:12;30942;:5;:10;:12::i;:::-;30982:13;;;;:7;:13;;;;;30968:27;;30927;;-1:-1:-1;30982:13:71;30968:27;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30913:93;30889:117;30789:223;30674:338;;;;:::o;21518:1958::-;21722:18;;;21752:1;21722:18;;;:9;:18;;;;;;-1:-1:-1;;;;;21722:18:71;21714:72;;;;-1:-1:-1;;;21714:72:71;;44763:2:132;21714:72:71;;;44745:21:132;44802:2;44782:18;;;44775:30;44841:29;44821:18;;;44814:57;44888:18;;21714:72:71;;;;;;;;;21843:21;;;21797:43;21843:21;;;:12;:21;;;;;;;;:34;;;;;;;;;21916:14;21843:34;21916:12;:14::i;:::-;21887:43;;21940:23;21977:13;21994:1;21977:18;21973:201;;22029:14;:5;:12;:14::i;:::-;22011:32;;21973:201;;;22113:13;22092:18;:34;:71;;22145:18;22092:71;;;22129:13;22092:71;22074:89;;21973:201;22190:19;;22183:1287;;22225:17;;;;:::i;:::-;;;;22290:12;22305:15;:5;:13;:15::i;:::-;22334:24;22361:13;;;:7;:13;;;;;22334:40;;22290:30;;-1:-1:-1;22334:24:71;;:40;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;22388:34:71;;-1:-1:-1;;;22388:34:71;;22334:40;;-1:-1:-1;22388:4:71;;:15;;-1:-1:-1;22388:34:71;;-1:-1:-1;22334:40:71;;-1:-1:-1;22417:4:71;;22388:34;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;22436:50:71;;-1:-1:-1;;;22436:50:71;;:4;;-1:-1:-1;22436:19:71;;-1:-1:-1;22436:50:71;;22456:11;;22469:16;;22436:50;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;22501:20:71;22524:19;;;:13;:19;;;;;22501:42;;:20;;-1:-1:-1;22524:19:71;22501:42;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22561:71;22583:7;363:1:11;22561:21:71;:71::i;:::-;22557:369;;;22653:14;22669:16;22689:39;22720:7;22689:30;:39::i;:::-;22828:28;;22652:76;;-1:-1:-1;22652:76:71;-1:-1:-1;22652:76:71;;22746:10;;-1:-1:-1;;;;;22828:7:71;;;22652:76;;22746:10;22828:28;22746:10;22828:28;22652:76;22828:7;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22812:44;;;22882:4;22874:37;;;;-1:-1:-1;;;22874:37:71;;45854:2:132;22874:37:71;;;45836:21:132;45893:2;45873:18;;;45866:30;-1:-1:-1;;;45912:18:132;;;45905:50;45972:18;;22874:37:71;45652:344:132;22874:37:71;22634:292;;;;22557:369;22943:69;22965:7;306:1:11;22943:21:71;:69::i;:::-;22939:144;;;23032:36;;-1:-1:-1;;;23032:36:71;;:4;;:14;;:36;;23047:11;;23060:7;;23032:36;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22939:144;23100:66;23122:7;533:1:11;23100:21:71;:66::i;:::-;23096:163;;;23186:58;;-1:-1:-1;;;23186:58:71;;:4;;:18;;:58;;23205:11;;23218:7;;23227:16;;23186:58;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23096:163;-1:-1:-1;;;;;23276:23:71;;;;;;:96;;;23303:69;23325:7;418:1:11;23303:21:71;:69::i;:::-;23272:188;;;23392:53;;-1:-1:-1;;;23392:53:71;;:4;;:14;;:53;;23407:11;;23420:7;;23429:4;;23435:9;;23392:53;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23272:188;22211:1259;;;22183:1287;;2592:140:91;2640:34;2707:18;2686:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3069:146;3117:40;3190:18;3169:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3169:39:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3169:39:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6186:197:70;6275:11;6288;6301:13;6333:43;6368:7;;6333:34;:43::i;30125:187:71:-;30211:18;30232;:11;;:16;:18::i;:::-;30211:39;;30282:4;30268:10;:18;30260:45;;;;-1:-1:-1;;;30260:45:71;;47302:2:132;30260:45:71;;;47284:21:132;47341:2;47321:18;;;47314:30;-1:-1:-1;;;47360:18:132;;;47353:44;47414:18;;30260:45:71;47100:338:132;30260:45:71;30201:111;30125:187;;;:::o;24702:376::-;24872:4;:14;24900:21;:12;;:19;:21::i;:::-;24935:26;:12;;:24;:26::i;:::-;24975:8;24997:5;25016:9;25039:22;:12;;:20;:22::i;:::-;24872:199;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24702:376;;;;;:::o;30318:116::-;30418:8;30382:9;:25;30392:8;-1:-1:-1;;;;;30392:12:71;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30382:25;;;;;;;;;;;;;-1:-1:-1;30382:25:71;:45;;-1:-1:-1;;;;;;30382:45:71;-1:-1:-1;;;;;30382:45:71;;;;;;;;;;-1:-1:-1;30318:116:71:o;2157:141:91:-;2206:34;2273:18;2252:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20814:147:71;20891:63;20905:7;20914:11;20927:1;20938:3;20944:9;;;;;;;;;;;;20891:13;:63::i;5786:184:70:-;5865:14;5881:16;5916:47;5955:7;;5916:38;:47::i;:::-;5909:54;;;;5786:184;;;;;;:::o;1819:584:85:-;1873:7;;1853:4;;1873:7;;;;;1869:528;;;-1:-1:-1;1903:7:85;;;;;;;;1819:584::o;1869:528::-;1941:17;2997:42;2985:55;3066:16;1980:374;;2196:43;;;1671:64;2196:43;;;23947:51:132;;;-1:-1:-1;;;24014:18:132;;;24007:34;2196:43:85;;;;;;;;;23920:18:132;;;2196:43:85;;;-1:-1:-1;;1671:64:85;;2086:175;;2135:34;;2086:175;;;:::i;:::-;;;;-1:-1:-1;;2086:175:85;;;;;;;;;;2047:232;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2020:259;;;2323:7;2312:27;;;;;;;;;;;;:::i;:::-;2297:42;;2002:352;1980:374;2374:12;1819:584;-1:-1:-1;1819:584:85:o;2654:894:128:-;2719:7;2696:20;2759:65;2814:6;2696:20;2759:27;1370:24:60;;;-1:-1:-1;;;1370:24:60;;;73860:51:132;1370:24:60;;;;;;;;;73927:11:132;;;;1370:24:60;;;;1294:107;2759:65:128;2863:179;;;;;;;;2886:4;;;;;;;2863:179;;2921:5;;-1:-1:-1;;;;;2921:5:128;;;2863:179;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2863:179:128;;;;;;;;;;;;;;;;;;;;;;;;;;;3078:32;;-1:-1:-1;;;3078:32:128;;2736:88;;-1:-1:-1;2863:179:128;;-1:-1:-1;;;3078:4:128;;;;;;;:14;;:32;;2863:179;;-1:-1:-1;;3078:32:128;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3130:4;;3145:5;;3130:21;;-1:-1:-1;;;3130:21:128;;-1:-1:-1;;;;;3145:5:128;;;3130:21;;;41758:51:132;3052:58:128;;-1:-1:-1;3121:47:128;;-1:-1:-1;;;3130:4:128;;;;;:14;;41731:18:132;;3130:21:128;41612:203:132;3121:47:128;3187:4;;3202:5;;3187:21;;-1:-1:-1;;;3187:21:128;;-1:-1:-1;;;;;3202:5:128;;;3187:21;;;41758:51:132;3178:47:128;;3187:4;;;;;:14;;41731:18:132;;3187:21:128;41612:203:132;3178:47:128;3245:5;;3236:15;;-1:-1:-1;;;3236:15:128;;-1:-1:-1;;;;;3245:5:128;;;3236:15;;;41758:51:132;3236:8:128;;;;41731:18:132;;3236:15:128;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3261:4:128;;3279:13;;3261:73;;-1:-1:-1;;;3261:73:128;;-1:-1:-1;;;3261:4:128;;;-1:-1:-1;;;;;3261:4:128;;-1:-1:-1;3261:9:128;;-1:-1:-1;3279:13:128;3261:73;;3295:9;;3279:13;;3327:4;;3261:73;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;3358:4:128;;3389;;3344:52;;3358:4;;;;;;-1:-1:-1;;;;;3389:4:128;20814:147:71;:::i;3344:52:128:-;3416:4;;3431:5;;3416:21;;-1:-1:-1;;;3416:21:128;;-1:-1:-1;;;;;3431:5:128;;;3416:21;;;41758:51:132;3407:62:128;;-1:-1:-1;;;3416:4:128;;;;;;:14;;41731:18:132;;3416:21:128;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3456:12;3439:14;;:29;;;;:::i;3407:62::-;3488:4;;3503:5;;3488:21;;-1:-1:-1;;;3488:21:128;;-1:-1:-1;;;;;3503:5:128;;;3488:21;;;41758:51:132;3479:62:128;;3488:4;;;;;:14;;41731:18:132;;3488:21:128;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3528:12;3511:14;;:29;;;;:::i;5621:10886:71:-;5824:12;5807:30;;-1:-1:-1;;;;;5807:30:71;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5807:30:71;-1:-1:-1;5778:59:71;;;;:13;;:59;;;;;;:::i;:::-;;5884:12;5871:26;;-1:-1:-1;;;;;5871:26:71;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5871:26:71;-1:-1:-1;5847:50:71;;;;:21;;:50;;;;;;:::i;:::-;;5946:12;5932:27;;-1:-1:-1;;;;;5932:27:71;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5932:27:71;-1:-1:-1;5907:52:71;;;;:22;;:52;;;;;;:::i;:::-;;6011:12;5997:27;;-1:-1:-1;;;;;5997:27:71;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5997:27:71;-1:-1:-1;5969:55:71;;;;:25;;:55;;;;;;:::i;:::-;;6073:12;6059:27;;-1:-1:-1;;;;;6059:27:71;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6059:27:71;-1:-1:-1;6034:52:71;;;;:22;;:52;;;;;;:::i;:::-;-1:-1:-1;6120:16:71;;;6134:1;6120:16;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6096:40:71;;;;:21;;-1:-1:-1;6096:40:71;;;;:::i;:::-;-1:-1:-1;6173:10:71;;-1:-1:-1;;;;;;6173:10:71;;6181:1;6173:10;;;20012:25:132;6173:7:71;;;;19985:18:132;;6173:10:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6146:21;:24;;6168:1;;6146:24;;;;:::i;:::-;;;;;;;;;:37;;-1:-1:-1;;;;;;6146:37:71;-1:-1:-1;;;;;6146:37:71;;;;;;;;;;;6240:552;6262:12;6258:16;;:1;:16;;;6240:552;;;6299:10;6312:5;:1;6316;6312:5;:::i;:::-;6299:18;;;;6335:19;6357:20;6378:1;6357:23;;;;;;;;;;:::i;:::-;;;;;;;6335:45;;6425:3;6398:13;:21;;6420:1;6398:24;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;6473:1;-1:-1:-1;;;;;6450:25:71;:11;-1:-1:-1;;;;;6450:25:71;;6446:267;;6546:3;6559:4;6531:34;;;;;:::i;:::-;49771:10:132;49759:23;;;49741:42;;-1:-1:-1;;;;;49819:32:132;49814:2;49799:18;;49792:60;49729:2;49714:18;6531:34:71;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6499:13:71;:29;;;;;;;;;;;;:::i;:::-;;;;;;;;;:66;;;;;-1:-1:-1;;;;;6499:66:71;;;;;-1:-1:-1;;;;;6499:66:71;;;;;;6446:267;;;6662:3;6675:4;6682:11;6644:50;;;;;:::i;:::-;50093:10:132;50081:23;;;50063:42;;-1:-1:-1;;;;;50179:15:132;;;50174:2;50159:18;;50152:43;50231:15;50226:2;50211:18;;50204:43;50051:2;50036:18;6644:50:71;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6612:13:71;:29;;;;;;;;;;;;:::i;:::-;;;;;;;;;:82;;;;;-1:-1:-1;;;;;6612:82:71;;;;;-1:-1:-1;;;;;6612:82:71;;;;;;6446:267;6730:47;6747:13;:26;;6774:1;6747:29;;;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;6747:29:71;6730:16;:47::i;:::-;-1:-1:-1;;6276:3:71;;6240:552;;;;6918:4;6896:28;;;;;:::i;:::-;-1:-1:-1;;;;;41776:32:132;;;41758:51;;41746:2;41731:18;6896:28:71;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6870:23:71;:54;;-1:-1:-1;;;;;;6870:54:71;-1:-1:-1;;;;;6870:54:71;;;;;;;;;;-1:-1:-1;6935:8866:71;6957:12;6953:16;;:1;:16;;;6935:8866;;;7010:26;6994:12;:42;;;;;;;;:::i;:::-;;6990:8801;;7056:20;7087:13;:26;;7114:1;7087:29;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7087:29:71;7056:61;;7199:4;7226:12;4147:13;4217:6;7155:185;;;;;:::i;:::-;-1:-1:-1;;;;;50693:15:132;;;50675:34;;50745:15;;;;50740:2;50725:18;;50718:43;50792:2;50777:18;;50770:34;50835:2;50820:18;;50813:34;50624:3;50609:19;7155:185:71;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7136:8:71;:204;;-1:-1:-1;;;;;;7136:204:71;-1:-1:-1;;;;;7136:204:71;;;;;;;;;;7380:31;;7398:12;;7380:31;;;:::i;:::-;-1:-1:-1;;;;;41776:32:132;;;41758:51;;41746:2;41731:18;7380:31:71;;;;;;;;;;;;;;;;;;;;;;;7358:8;:19;;;:53;;;;;-1:-1:-1;;;;;7358:53:71;;;;;-1:-1:-1;;;;;7358:53:71;;;;;;7493:4;7520:12;4147:13;4217:6;7448:186;;;;;:::i;:::-;-1:-1:-1;;;;;50693:15:132;;;50675:34;;50745:15;;;;50740:2;50725:18;;50718:43;50792:2;50777:18;;50770:34;50835:2;50820:18;;50813:34;50624:3;50609:19;7448:186:71;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7429:16:71;:205;;-1:-1:-1;;;;;;7429:205:71;-1:-1:-1;;;;;7429:205:71;;;;;;;;;;7652:13;:29;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;7706:8;:16;7652:72;;-1:-1:-1;;;7652:72:71;;-1:-1:-1;;;;;7706:16:71;;;7652:72;;;41758:51:132;7652:29:71;;;:45;;41731:18:132;;7652:72:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7742:13;:26;;7769:1;7742:29;;;;;;;;;;:::i;:::-;;;;;;;;;;;7796:19;;7742:75;;-1:-1:-1;;;7742:75:71;;-1:-1:-1;;;;;7796:19:71;;;7742:75;;;41758:51:132;7742:29:71;;;:45;;41731:18:132;;7742:75:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7835:13;:26;;7862:1;7835:29;;;;;;;;;;:::i;:::-;;;;;;;;;;;7889:16;;7835:72;;-1:-1:-1;;;7835:72:71;;-1:-1:-1;;;;;7889:16:71;;;7835:72;;;41758:51:132;7835:29:71;;;:45;;41731:18:132;;7835:72:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;7961:8:71;:16;7925:22;:25;;-1:-1:-1;;;;;7961:16:71;;;;-1:-1:-1;7925:22:71;-1:-1:-1;7925:25:71;;;;;;;;;;:::i;:::-;;;;;;;;;;:53;;-1:-1:-1;;;;;;7925:53:71;-1:-1:-1;;;;;7925:53:71;;;;;;8035:19;;7996:25;:28;;8035:19;;;;;7996:25;:28;;;;;;;;;;:::i;:::-;;;;;;;;;;:59;;-1:-1:-1;;;;;;7996:59:71;-1:-1:-1;;;;;7996:59:71;;;;;;8109:16;;8073:22;:25;;8109:16;;;;;8073:22;:25;;;;;;;;;;:::i;:::-;;;;;;;;;:53;;-1:-1:-1;;;;;8073:53:71;;;;-1:-1:-1;;;;;;8073:53:71;;;;;;;;;;8193:16;;;-1:-1:-1;8193:16:71;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8193:16:71;8167:42;;8251:4;8231:6;8238:1;8231:9;;;;;;;;:::i;:::-;-1:-1:-1;;;;;8231:25:71;;;;:9;;;;;;;;;;:25;8310:16;;;8324:1;8310:16;;;;;;;;;8279:28;;8310:16;;8324:1;8310:16;;;;;;;-1:-1:-1;;8373:8:71;:16;8348:14;;;;-1:-1:-1;;;;;;8373:16:71;;8348:14;;-1:-1:-1;8373:16:71;;8348:14;;;;:::i;:::-;-1:-1:-1;;;;;8348:42:71;;;:14;;;;;;;;;:42;8437:19;;8412:14;;8437:19;;;8412:11;;8437:19;;8412:14;;;;;;:::i;:::-;-1:-1:-1;;;;;8412:45:71;;;:14;;;;;;;;;:45;8504:16;;8479:14;;8504:16;;;8479:11;;8504:16;;8479:14;;;;;;:::i;:::-;-1:-1:-1;;;;;8479:42:71;;;:14;;;;;;;;;:42;8723:23;;8564:276;;8602:12;;8648:3;;8678:11;;8723:23;;;8781:4;;8812:6;;8564:276;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8544:17:71;:296;;-1:-1:-1;;;;;;8544:296:71;-1:-1:-1;;;;;8544:296:71;;;;;;;;;;8905:21;:24;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;8886:44;;;;;:::i;:::-;10098:10:132;10086:23;;;10068:42;;10056:2;10041:18;8886:44:71;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8863:20:71;:67;;-1:-1:-1;;;;;;8863:67:71;-1:-1:-1;;;;;8863:67:71;;;;;;;;;8952:17;;:64;;-1:-1:-1;;;8952:64:71;;;;;41758:51:132;;;;8952:17:71;;;;:33;;41731:18:132;;8952:64:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9087:13;:21;;9109:1;9087:24;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;9137:5;:1;9141;9137:5;:::i;:::-;9213:23;;9054:311;;9168:11;;-1:-1:-1;;;;;9213:23:71;;9263:21;;9213:23;;9337:6;;9054:311;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9039:12:71;:326;;-1:-1:-1;;;;;;9039:326:71;-1:-1:-1;;;;;9039:326:71;;;;;;;;;;9419:21;:24;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;9445:4;9405:45;;;;;:::i;:::-;39676:10:132;39664:23;;;39646:42;;39719:2;39704:18;;39697:34;39634:2;39619:18;9405:45:71;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9387:15:71;:63;;-1:-1:-1;;;;;;9387:63:71;-1:-1:-1;;;;;9387:63:71;;;;;;;;;9472:96;;-1:-1:-1;;;9472:96:71;;4343:4;9472:96;;;53762:34:132;;;53812:18;;;53805:43;4461:5:71;53864:18:132;;;53857:47;9472:26:71;;53684:18:132;;9472:96:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;9590:12:71;;9627:15;;9590:54;;-1:-1:-1;;;9590:54:71;;-1:-1:-1;;;;;9627:15:71;;;9590:12;:54;;41758:51:132;9590:12:71;;;-1:-1:-1;9590:28:71;;-1:-1:-1;41731:18:132;;9590:54:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8145:1518;;9681:32;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;9681:32:71;9798:16;:12;9813:1;9798:16;:::i;:::-;9767:48;;-1:-1:-1;;;;;9767:48:71;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9767:48:71;;-1:-1:-1;;9767:48:71;;;;;;;;;;;-1:-1:-1;9731:84:71;;9890:16;:12;9905:1;9890:16;:::i;:::-;9864:43;;-1:-1:-1;;;;;9864:43:71;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9864:43:71;;-1:-1:-1;;9864:43:71;;;;;;;;;;;-1:-1:-1;9833:28:71;;;:74;10004:16;:12;10019:1;10004:16;:::i;:::-;9962:59;;-1:-1:-1;;;;;9962:59:71;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;9962:59:71;;;;;;;;;;;;;;;-1:-1:-1;9925:34:71;;;;:96;;;;10071:16;;10085:1;10071:16;;;;;;;;;10040:28;;10071:16;;;;;;;;;-1:-1:-1;;10137:16:71;;;10105:29;10137:16;;;;;;;;;10196:12;;10171:14;;10040:47;;-1:-1:-1;10137:16:71;;-1:-1:-1;;;;;10196:12:71;;;;-1:-1:-1;10040:47:71;;10105:29;10171:14;;;;:::i;:::-;;;;;;:38;-1:-1:-1;;;;;10171:38:71;;;-1:-1:-1;;;;;10171:38:71;;;;;10233:7;10228:2850;10250:12;10246:16;;:1;:16;;;10228:2850;;;10300:1;10295:6;;:1;:6;;;10291:20;10303:8;10291:20;10333:13;10349:5;:1;10353;10349:5;:::i;:::-;10423:33;;;10454:1;10423:33;;;;;;;;;10333:21;;;;;;-1:-1:-1;10377:43:71;;10423:33;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;10377:79;;10478:26;10507:265;;;;;;;;10542:3;-1:-1:-1;;;;;10507:265:71;;;;;10577:11;:18;10507:265;;;;;;10628:12;:19;10507:265;;;;;;10674:1;10507:265;;;;;;10701:11;10507:265;;;;10738:12;10507:265;;;10478:294;;10836:43;;;;;;;;10861:6;10836:43;;;;;;10869:9;10836:43;;;10821:9;10831:1;10821:12;;;;;;;;:::i;:::-;;;;;;;;;;:58;10905:8;:16;:48;;-1:-1:-1;;;10905:48:71;;-1:-1:-1;;;;;10905:16:71;;;;:37;;:48;;10943:9;;10905:48;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;10979:19:71;;:51;;-1:-1:-1;;;10979:51:71;;-1:-1:-1;;;;;10979:19:71;;;;-1:-1:-1;10979:40:71;;-1:-1:-1;10979:51:71;;11020:9;;10979:51;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11101:49:71;;-1:-1:-1;11189:1:71;;-1:-1:-1;11153:38:71;;-1:-1:-1;11153:38:71;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;11252:49:71;;;;;;;;11267:5;11252:49;;11282:17;;-1:-1:-1;;;;;11282:17:71;11252:49;;;;;;;;11343;;;;;;;;11252;11343;;;;;;;;;11327:13;;11101:90;;-1:-1:-1;11252:49:71;11101:90;;11217:32;;11327:13;;;;:::i;:::-;;;;;;;;;;:65;11418:8;:16;:54;;-1:-1:-1;;;11418:54:71;;-1:-1:-1;;;;;11418:16:71;;;;:42;;:54;;11461:10;;11418:54;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;11595:329:71;;;;;;;;;;;;;11704:4;11595:329;;;;;;;;;;;;;11797:5;11595:329;;;;11844:4;11595:329;;;;11885:16;;-1:-1:-1;;;;;11885:16:71;11595:329;;;;11556:33;;:36;;11595:329;;-1:-1:-1;11556:33:71;-1:-1:-1;11556:36:71;;;;-1:-1:-1;11556:36:71;;;-1:-1:-1;11556:36:71;;;;:::i;:::-;;;;;;:368;;;;12015:210;;;;;;;;12069:6;12015:210;;;;;;12106:4;-1:-1:-1;;;;;12015:210:71;;;;;12151:5;12015:210;;;;;;12198:4;-1:-1:-1;;;;;12015:210:71;;;;11981:12;:28;;;12010:1;11981:31;;;;;;;;;;:::i;:::-;;;;;;:244;;;;12330:175;;;;;;;;12403:6;12330:175;;;;;;4523:1;12330:175;;;12290:12;:34;;;12325:1;12290:37;;;;;;;;;;:::i;:::-;;;;;;:215;;;;12528:19;12550:13;:23;;;;;;;;;;-1:-1:-1;;;;;12550:23:71;-1:-1:-1;;;;;12550:48:71;;:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12672:40;;;12710:1;12672:40;;;;;;;;;12528:72;;-1:-1:-1;12622:47:71;;12672:40;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12672:40:71;;;;;;;;;;;;;;;;12622:90;;12746:159;;;;;;;;12803:6;12746:159;;;;;;12835:48;;;;;;;;12865:11;12861:1;:15;;;;:::i;:::-;-1:-1:-1;;;;;12835:48:71;;;12878:1;12835:48;;;;;;;;;;;12746:159;;12734:9;;:6;;-1:-1:-1;;12734:9:71;;;;:::i;:::-;;;;;;;;;;:171;12927:23;;:40;;-1:-1:-1;;;12927:40:71;;-1:-1:-1;;;;;12927:23:71;;;;:32;;:40;;12960:6;;12927:40;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;12989:23:71;;:70;;-1:-1:-1;;;12989:70:71;;4278:4;12989:70;;;5099:66:132;-1:-1:-1;;;;;12989:23:71;;;;-1:-1:-1;12989:46:71;;-1:-1:-1;5072:18:132;;12989:70:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10269:2809;;;;;10228:2850;10264:3;;10228:2850;;;-1:-1:-1;13234:37:71;;;13269:1;13234:37;;;;;;;;;13180:51;;13234:37;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;13334:320:71;;;;;;;;13385:17;;-1:-1:-1;;;;;13385:17:71;13334:320;;13439:18;;13334:320;;;;;;;;;;;;13494:19;;13334:320;;;;;;;-1:-1:-1;13334:320:71;;;;;;;;;;;;;;;;;;13699:63;;;;;;;;4574:5;13699:63;;;;;;;;13680:16;;;;-1:-1:-1;13334:320:71;;13680:16;;-1:-1:-1;13680:16:71;;;;:::i;:::-;;;;;;;;;;:82;13788:16;;:56;;-1:-1:-1;;;13788:56:71;;-1:-1:-1;;;;;13788:16:71;;;;:41;;:56;;13830:13;;13788:56;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13154:713;;13965:375;;;;;;;;14028:13;:21;;14050:1;14028:24;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;13965:375;;14100:4;13965:375;;;;;;;;;;14201:5;13965:375;;;;14252:4;13965:375;;;;14297:16;;-1:-1:-1;;;;;14297:16:71;13965:375;;;;;13915:33;;:47;;;;;;;;;;;;:::i;:::-;;;;;;:425;;;;14412:248;;;;;;;;14470:13;:21;;14492:1;14470:24;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;14412:248;;14529:4;14412:248;;;;14578:5;14412:248;;;;14629:4;14412:248;;;;;;;;14367:28;;;:42;;;;;;;;;;;;:::i;:::-;;;;;;:293;;;;14738:205;;;;;;;;14815:13;:21;;14837:1;14815:24;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;14738:205;;4523:1;14738:205;;;14687:34;;;;:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:256;15002:17;;15033:33;;15002:65;;-1:-1:-1;;;15002:65:71;;-1:-1:-1;;;;;15002:17:71;;;;:30;;:65;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;15085:12:71;;15111:28;;;;15085:55;;-1:-1:-1;;;15085:55:71;;-1:-1:-1;;;;;15085:12:71;;;;-1:-1:-1;15085:25:71;;-1:-1:-1;15085:55:71;;:12;:55;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;15158:15:71;;15195:34;;;;;15158:72;;-1:-1:-1;;;15158:72:71;;-1:-1:-1;;;;;15158:15:71;;;;-1:-1:-1;15158:36:71;;-1:-1:-1;15158:72:71;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7038:8207;;;;6990:8801;;;15271:28;15255:12;:44;;;;;;;;:::i;:::-;;15251:540;;15319:31;15407:4;15442:13;:26;;15469:1;15442:29;;;;;;;;;;:::i;:::-;;;;;;;;;;;15353:137;;-1:-1:-1;;;;;15442:29:71;;;;15353:137;;;:::i;:::-;-1:-1:-1;;;;;64641:15:132;;;64623:34;;64693:15;;64688:2;64673:18;;64666:43;64573:2;64558:18;15353:137:71;;;;;;;;;;;;;;;;;;;;;;;15319:171;;15508:13;:26;;15535:1;15508:29;;;;;;;;;;:::i;:::-;;;;;;;;;;;:66;;-1:-1:-1;;;15508:66:71;;-1:-1:-1;;;;;41776:32:132;;;15508:66:71;;;41758:51:132;15508:29:71;;;;:45;;41731:18:132;;15508:66:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15628:10;15592:13;:22;;15615:1;15592:25;;;;;;;;;;:::i;:::-;;;;;;;;;:47;;;;;-1:-1:-1;;;;;15592:47:71;;;;;-1:-1:-1;;;;;15592:47:71;;;;;;15696:10;15657:13;:25;;15683:1;15657:28;;;;;;;;;;:::i;:::-;;;;;;;;;:50;;;;;-1:-1:-1;;;;;15657:50:71;;;;;-1:-1:-1;;;;;15657:50:71;;;;;;15301:421;15251:540;;;15746:30;;-1:-1:-1;;;15746:30:71;;64922:2:132;15746:30:71;;;64904:21:132;64961:2;64941:18;;;64934:30;-1:-1:-1;;;64980:18:132;;;64973:50;65040:18;;15746:30:71;64720:344:132;15251:540:71;6971:3;;6935:8866;;;;15837:7;15832:669;15854:12;15850:16;;:1;:16;;;15832:669;;;15887:19;15909:13;:26;;15936:1;15909:29;;;;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;;;;15909:29:71;;-1:-1:-1;15956:12:71;:42;;;;;;;;:::i;:::-;;15952:259;;16018:8;-1:-1:-1;;;;;16018:30:71;;4574:5;16069:13;:22;;16092:1;16069:25;;;;;;;;;;:::i;:::-;;;;;;;;;;;16018:77;;;;;;-1:-1:-1;;;;;;16018:77:71;;;49771:10:132;49759:23;;;16018:77:71;;;49741:42:132;-1:-1:-1;;;;;16069:25:71;49799:18:132;;;49792:60;49714:18;;16018:77:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16113:8;-1:-1:-1;;;;;16113:33:71;;4574:5;16167:13;:22;;16190:1;16167:25;;;;;;;;;;:::i;:::-;;;;;;;;;;16113:83;;;;;;-1:-1:-1;;;;;;16113:83:71;;;65307:10:132;65295:23;;;16113:83:71;;;65277:42:132;-1:-1:-1;;;;;16167:25:71;65335:18:132;;;65328:60;65404:18;;;65397:34;65250:18;;16113:83:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15952:259;16229:7;16224:267;16246:12;16242:16;;:1;:16;;;16224:267;;;16292:1;16287:6;;:1;:6;;;16283:20;16295:8;16283:20;-1:-1:-1;;;;;16321:30:71;;;16352:5;:1;16356;16352:5;:::i;:::-;16359:22;:25;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;16321:64;;;;;;-1:-1:-1;;;;;;16321:64:71;;;65643:4:132;65631:17;;;16321:64:71;;;65613:36:132;-1:-1:-1;;;;;16359:25:71;65665:18:132;;;65658:60;65586:18;;16321:64:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16403:8;-1:-1:-1;;;;;16403:33:71;;16437:1;16441;16437:5;;;;:::i;:::-;16444:25;:28;;;;;;;;;;;;:::i;:::-;;;;;;;;;;16403:73;;;;;;-1:-1:-1;;;;;;16403:73:71;;;65966:4:132;65954:17;;;16403:73:71;;;65936:36:132;-1:-1:-1;;;;;16444:28:71;65988:18:132;;;65981:60;66057:18;;;66050:34;65909:18;;16403:73:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16224:267;16260:3;;16224:267;;;-1:-1:-1;;15868:3:71;;15832:669;;2304:142:91;2353:35;2421:18;2400:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2400:39:91;;;;;;;;;;;;;;;;;;;;;;2304:142;:::o;2302:346:128:-;2347:37;2356:4;;;;;;;;;-1:-1:-1;;;;;2356:4:128;-1:-1:-1;;;;;2356:10:128;;:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2347:37;2403:4;;:12;;;-1:-1:-1;;;2403:12:128;;;;2394:37;;-1:-1:-1;;;;;2403:4:128;;:10;;:12;;;;;;;;;;;;;;:4;:12;;;;;;;;;;;;;;2394:37;2451:4;;2466:5;;2451:21;;-1:-1:-1;;;2451:21:128;;-1:-1:-1;;;;;2466:5:128;;;2451:21;;;41758:51:132;2442:47:128;;-1:-1:-1;;;2451:4:128;;;;;;:14;;41731:18:132;;2451:21:128;41612:203:132;2442:47:128;2508:4;;2523:5;;2508:21;;-1:-1:-1;;;2508:21:128;;-1:-1:-1;;;;;2523:5:128;;;2508:21;;;41758:51:132;2499:47:128;;2508:4;;;;;:14;;41731:18:132;;2508:21:128;41612:203:132;2499:47:128;2557:37;2566:4;;;;;;;;;-1:-1:-1;;;;;2566:4:128;-1:-1:-1;;;;;2566:10:128;;:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2588:4;;-1:-1:-1;;;2588:4:128;;-1:-1:-1;;;;;2588:4:128;2557:8;:37::i;:::-;2613:4;;:12;;;-1:-1:-1;;;2613:12:128;;;;2604:37;;-1:-1:-1;;;;;2613:4:128;;:10;;:12;;;;;;;;;;;;;;:4;:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2635:4;;-1:-1:-1;;;;;2635:4:128;2604:8;:37::i;:::-;2302:346::o;24121:575:71:-;24219:19;24252:9;:32;24262:21;:12;;:19;:21::i;:::-;24252:32;;;;;;;;;;;;;-1:-1:-1;24252:32:71;;;;-1:-1:-1;;;;;24252:32:71;;-1:-1:-1;;24326:39:71;24356:8;24326:29;:39::i;:::-;24295:70;;;;24376:20;24399:74;;;;;;;;24406:21;:12;;:19;:21::i;:::-;24399:74;;;;;;24429:21;:12;;:19;:21::i;:::-;24399:74;;;;24452:20;:12;;:18;:20::i;:::-;-1:-1:-1;;;;;24399:74:71;;;24376:97;-1:-1:-1;;;;;;24483:18:71;;;24522:3;24510:5;24376:97;24561:26;:12;;:24;:26::i;:::-;24601:19;:12;;:17;:19::i;:::-;24634:22;:12;;:20;:22::i;:::-;24670:9;;;;;;;;;;;;24483:206;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24209:487;;;;24121:575;;;:::o;5604:176:70:-;5682:11;5695:13;5727:46;5765:7;;5727:37;:46::i;19989:464:71:-;20084:13;20100:21;:12;;:19;:21::i;:::-;20084:37;;20131:18;20152:23;:12;;:21;:23::i;:::-;20231:20;;;20185:43;20231:20;;;:12;:20;;;;;;;;:32;;;;;;;;20131:44;;-1:-1:-1;20318:19:71;:12;;:17;:19::i;:::-;20303:34;-1:-1:-1;20347:21:71;:5;20303:34;20347:15;:21::i;:::-;20378:13;;;;:7;:13;;;;;:28;20394:12;;20378:13;:28;:::i;:::-;-1:-1:-1;20416:19:71;;;;:13;:19;;;;;:30;20438:8;;20416:19;:30;:::i;2671:150:48:-;2734:6;2773:39;706:2;655;2773:7;;:39;:::i;:::-;2766:47;;;:::i;:::-;2759:55;;;2671:150;-1:-1:-1;;;2671:150:48:o;2148:414:70:-;2244:11;2257;2270:13;2296:10;2308:19;2331:110;2375:8;533:1:11;2331:30:70;:110::i;:::-;2295:146;;;;2459:5;2451:56;;;;-1:-1:-1;;;2451:56:70;;69618:2:132;2451:56:70;;;69600:21:132;69657:2;69637:18;;;69630:30;69696:34;69676:18;;;69669:62;-1:-1:-1;;;69747:18:132;;;69740:36;69793:19;;2451:56:70;69416:402:132;2451:56:70;2524:31;;-1:-1:-1;;;2524:31:70;;:4;;:23;;:31;;2548:6;;2524:31;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2517:38;;;;;;;;2148:414;;;;;:::o;2230:148:48:-;2293:6;2332:37;605:2;557:1;2332:7;;:37;:::i;2384:142::-;2447:7;2481:37;655:2;605;2481:7;;:37;:::i;:::-;2473:46;;;:::i;2078:146::-;2140:6;2179:36;557:1;493;2179:7;;:36;:::i;:::-;2172:44;;;:::i;:::-;2165:52;;;2078:146;-1:-1:-1;;;2078:146:48:o;2976:130::-;3044:7;3070:29;:17;3079:7;;3070:8;:17::i;:::-;1210:15:40;1084:151;3112:138:48;3173:7;3207:35;862:3;785:2;3207:7;;:35;:::i;4800:67:71:-;4842:18;:16;:18::i;19244:399::-;19342:12;19366:21;19420:13;19403:31;;;;;;;;:::i;:::-;;;;-1:-1:-1;;19403:31:71;;;;;;;;;;19390:63;;19436:16;;19403:31;19390:63;;:::i;:::-;;;;;;;;;;;;;19366:87;;19531:8;19525:15;19518:4;19508:8;19504:19;19501:1;19494:47;19486:55;;19576:4;19564:17;19554:73;;19611:1;19608;19601:12;1715:427:70;1814:12;1828:11;1841:13;1867:10;1879:19;1902:113;1946:8;418:1:11;1902:30:70;:113::i;:::-;1866:149;;;;2033:5;2025:59;;;;-1:-1:-1;;;2025:59:70;;71640:2:132;2025:59:70;;;71622:21:132;71679:2;71659:18;;;71652:30;71718:34;71698:18;;;71691:62;-1:-1:-1;;;71769:18:132;;;71762:39;71818:19;;2025:59:70;71438:405:132;2025:59:70;2101:34;;-1:-1:-1;;;2101:34:70;;:4;;:26;;:34;;2128:6;;2101:34;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2094:41;;-1:-1:-1;;;;;2094:41:70;;;;-1:-1:-1;2094:41:70;;;-1:-1:-1;1715:427:70;-1:-1:-1;;;;1715:427:70:o;2697:371:11:-;2789:12;;;2863:2;2845:20;;;;;:44;;-1:-1:-1;2887:2:11;2869:20;;;2845:44;2841:90;;;2898:33;;-1:-1:-1;;;2898:33:11;;;;;;;;;;;2841:90;2949:16;:7;;2963:1;2949:13;:16::i;:::-;2941:24;-1:-1:-1;2981:17:11;:7;;2996:1;2981:14;:17::i;:::-;2975:23;-1:-1:-1;3034:2:11;3016:20;;:45;;3060:1;3016:45;;;3039:18;:7;;3054:2;3039:14;:18::i;:::-;3008:53;;2697:371;;;;;:::o;5326:168:126:-;5464:12;-1:-1:-1;;;;;5464:12:126;;;-1:-1:-1;;;5451:10:126;;;;;:25;;;;5443:34;;5326:168::o;1788:125:48:-;1851:14;;1884:22;785:2;1851:14;1884:7;;:22;:::i;3397:132::-;3461:14;;3500:21;:7;785:2;3500:7;;:21;:::i;25755:300:71:-;25871:58;;72612:66:132;25871:58:71;;;72600:79:132;72695:12;;;72688:28;;;25806:12:71;;25830:28;;72732:12:132;;25871:58:71;;;;;;-1:-1:-1;;25871:58:71;;;;;;;25861:69;;25871:58;25861:69;;;;-1:-1:-1;;;25974:32:71;;25982:1;25974:32;;;72937:25:132;72978:18;;;72971:34;;;25861:69:71;-1:-1:-1;25941:7:71;;;;;;25974;;;;72910:18:132;;25974:32:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26023:25;;;;;;73571:19:132;;;;73606:12;;;73599:28;;;;73683:3;73661:16;;;;-1:-1:-1;;;;;;73657:36:132;73643:12;;;73636:58;26023:25:71;;;;;;;;;73710:12:132;;;;26023:25:71;;;;25755:300;-1:-1:-1;;;;;;25755:300:71:o;3256:135:48:-;3320:14;;3359:24;:7;862:3;3359:7;;:24;:::i;1357:742:11:-;1472:16;1490:21;1472:16;1612:1;1602:11;;1472:16;1674:22;:8;;1602:11;1674:14;:22::i;:::-;1720:1;1710:11;;;;;1660:36;-1:-1:-1;1781:21:11;:8;;1710:11;1781:13;:21::i;:::-;1768:34;-1:-1:-1;1932:1:11;1923:10;;1987:13;;;;;2023:31;1987:13;1923:10;2023:8;;:31;:::i;:::-;1357:742;;2014:40;;-1:-1:-1;2014:40:11;;-1:-1:-1;;;2068:14:11;;;;-1:-1:-1;;;1357:742:11:o;2092:357:60:-;2254:12;2235:8;808:1;1059:20;2235:8;1077:1;1059:17;:20::i;:::-;:30;;;1055:82;;1116:20;:8;1134:1;1116:17;:20::i;:::-;1098:39;;-1:-1:-1;;;1098:39:60;;3353:6:132;3341:19;;;1098:39:60;;;3323:38:132;3296:18;;1098:39:60;3179:188:132;1055:82:60;2278:19:::1;2300:51;2338:4;2344:6;2300:37;:51::i;:::-;2278:73;;2368:74;2386:8;306:1:11;2435:6:60;2368:17;:74::i;:::-;2361:81:::0;2092:357;-1:-1:-1;;;;;;2092:357:60:o;4939:388::-;5124:12;5105:8;808:1;1059:20;5105:8;1077:1;1059:17;:20::i;:::-;:30;;;1055:82;;1116:20;:8;1134:1;1116:17;:20::i;1055:82::-;5148:19:::1;5170:59;5208:6;5216:4;5222:6;5170:37;:59::i;:::-;5148:81;;5246:74;5264:8;418:1:11;5313:6:60;5246:17;:74::i;:::-;5239:81:::0;4939:388;-1:-1:-1;;;;;;;4939:388:60:o;5209:262:85:-;5271:1;5266;:6;5262:203;;-1:-1:-1;;;;;;;;;;;5293:41:85;;;;74151:2:132;74133:21;;;74190:2;74170:18;;;74163:30;74229:34;74224:2;74209:18;;74202:62;-1:-1:-1;;;74295:2:132;74280:18;;74273:32;74337:3;74322:19;;73949:398;5293:41:85;;;;;;;;5353:31;5382:1;5353:31;;;;;;:::i;:::-;;;;;;;;5403;5432:1;5403:31;;;;;;:::i;:::-;;;;;;;;5448:6;:4;:6::i;640:284:68:-;824:17;877:6;885:7;894:9;905:11;860:57;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;853:64;;640:284;;;;;;:::o;3622:277:85:-;3690:1;-1:-1:-1;;;;;3685:6:85;:1;-1:-1:-1;;;;;3685:6:85;;3681:212;;-1:-1:-1;;;;;;;;;;;3712:44:85;;;;76161:2:132;76143:21;;;76200:2;76180:18;;;76173:30;76239:34;76234:2;76219:18;;76212:62;-1:-1:-1;;;76305:2:132;76290:18;;76283:35;76350:3;76335:19;;75959:401;3712:44:85;;;;;;;;3775:34;3807:1;3775:34;;;;;;:::i;:::-;;;;;;;;3828;3860:1;3828:34;;;;;;:::i;4095:277::-;4163:1;4158;:6;4154:212;;-1:-1:-1;;;;;;;;;;;4185:44:85;;;;77325:2:132;77307:21;;;77364:2;77344:18;;;77337:30;77403:34;77398:2;77383:18;;77376:62;-1:-1:-1;;;77469:2:132;77454:18;;77447:35;77514:3;77499:19;;77123:401;4185:44:85;;;;;;;;4248:34;4280:1;4248:34;;;;;;:::i;:::-;;;;;;;;4301;4333:1;4301:34;;;;;;:::i;1299:99:87:-;1376:15;1386:1;1389;1376:9;:15::i;4032:231:126:-;4097:13;4126:12;4132:5;5667:12;-1:-1:-1;;;5653:10:126;;-1:-1:-1;;;;;5653:10:126;;;5667:12;;5653:26;;5564:122;4126:12;4122:56;;;4140:38;1413:4:119;4140:11:126;:38::i;:::-;-1:-1:-1;4231:10:126;;-1:-1:-1;;;;;;;;;;4231:10:126;;;;;:14;4219:27;;;;;:11;;;;:27;;;;;;;4032:231::o;2119:386::-;2251:10;;2182:13;;-1:-1:-1;;;;;;;;2251:10:126;;;;;2292:12;2279:25;;2275:65;;2306:34;1315:4:119;2306:11:126;:34::i;:::-;-1:-1:-1;;2354:11:126;-1:-1:-1;;;;;2387:22:126;;;;;;;2354:11;2387;;:22;;;;;;;2423:29;;;2466:22;;;;;-1:-1:-1;;;2466:22:126;;;;;;;-1:-1:-1;2387:22:126;2119:386::o;2568:228:70:-;2694:10;2728:61;2759:8;2769:19;2728:30;:61::i;:::-;-1:-1:-1;2716:73:70;2568:228;-1:-1:-1;;;2568:228:70:o;1271:438::-;1371:14;1387:16;1416:10;1428:19;1451:115;1495:8;363:1:11;1451:30:70;:115::i;:::-;1415:151;;;;1584:5;1576:60;;;;-1:-1:-1;;;1576:60:70;;78437:2:132;1576:60:70;;;78419:21:132;78476:2;78456:18;;;78449:30;78515:34;78495:18;;;78488:62;-1:-1:-1;;;78566:18:132;;;78559:40;78616:19;;1576:60:70;78235:406:132;1576:60:70;1667:35;;-1:-1:-1;;;1667:35:70;;:4;;:27;;:35;;1695:6;;1667:35;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1646:56:70;;;;;;-1:-1:-1;1271:438:70;-1:-1:-1;;;;1271:438:70:o;3074:380:11:-;3163:11;;;3244:2;3226:20;;;;;:44;;-1:-1:-1;3268:2:11;3250:20;;;3226:44;3222:87;;;3279:30;;-1:-1:-1;;;3279:30:11;;;;;;;;;;;3222:87;3325:17;:7;;3340:1;3325:14;:17::i;:::-;3319:23;-1:-1:-1;3367:17:11;:7;;3381:2;3367:13;:17::i;:::-;3352:32;-1:-1:-1;3420:2:11;3402:20;;:45;;3446:1;3402:45;;;3425:18;:7;;3440:2;3425:14;:18::i;2420:271::-;2499:14;;2565:2;2547:20;;2543:67;;2576:34;;-1:-1:-1;;;2576:34:11;;;;;;;;;;;2543:67;2629:17;:7;;2644:1;2629:14;:17::i;:::-;2620:26;-1:-1:-1;2667:17:11;:7;;2681:2;2667:13;:17::i;:::-;2656:28;;2420:271;;;;;:::o;858:407:70:-;943:11;956:13;982:10;994:19;1017:113;1061:8;306:1:11;1017:30:70;:113::i;:::-;981:149;;;;1148:5;1140:59;;;;-1:-1:-1;;;1140:59:70;;79165:2:132;1140:59:70;;;79147:21:132;79204:2;79184:18;;;79177:30;79243:34;79223:18;;;79216:62;-1:-1:-1;;;79294:18:132;;;79287:39;79343:19;;1140:59:70;78963:405:132;1140:59:70;1224:34;;-1:-1:-1;;;1224:34:70;;:4;;:26;;:34;;1251:6;;1224:34;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1209:49:70;;;;;;;-1:-1:-1;858:407:70;-1:-1:-1;;;;858:407:70:o;2105:309:11:-;2183:11;;2243:2;2225:20;;;;;:44;;-1:-1:-1;2267:2:11;2249:20;;;2225:44;2221:90;;;2278:33;;-1:-1:-1;;;2278:33:11;;;;;;;;;;;2221:90;2327:17;:7;;2342:1;2327:14;:17::i;:::-;2321:23;-1:-1:-1;2380:2:11;2362:20;;:45;;2406:1;2362:45;;;2385:18;:7;;2400:2;2385:14;:18::i;2827:143:48:-;2892:7;2926:36;785:2;706;2926:7;;:36;:::i;2658:320:126:-;2784:12;;-1:-1:-1;;;;;2784:12:126;;;-1:-1:-1;;2784:16:126;;-1:-1:-1;;;2832:10:126;;;;2818:24;;;;2814:63;;2844:33;1536:4:119;2844:11:126;:33::i;:::-;-1:-1:-1;;;;;2891:23:126;;;;;:11;;;:23;;;;;:31;;;;2936:25;;-1:-1:-1;;;;;;2936:25:126;;;;2658:320::o;2802:2541:70:-;3012:10;;:27;;-1:-1:-1;;;3012:27:70;;2937:10;;2949:19;;2937:10;;-1:-1:-1;;;;;3012:10:70;;:17;;:27;;3030:8;;3012:27;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3012:27:70;;;;;;;;;;;;:::i;:::-;-1:-1:-1;3306:12:70;;;3050:14;3306:12;;;;;;;;;2980:59;;-1:-1:-1;3050:14:70;;;;;;;3329:1893;3345:12;:19;3336:6;:28;3329:1893;;;3438:45;;-1:-1:-1;;;3438:45:70;;3381:16;;;;;;3438:4;;:23;;:45;;3462:12;;3476:6;;3438:45;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3438:45:70;;;;;;;;;;;;:::i;:::-;3380:103;;;;;;3606:19;3592:33;;:10;:33;;;3588:1591;;3645:11;;;;;-1:-1:-1;;3802:51:70;;;;3798:1367;;3892:30;;-1:-1:-1;;;3892:30:70;;:4;;:26;;:30;;3919:2;;3892:30;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3877:45;;-1:-1:-1;3877:45:70;-1:-1:-1;3944:18:70;3877:45;3944:18;;:::i;:::-;;-1:-1:-1;3984:22:70;4001:5;3984:22;;:::i;:::-;;;4055:11;4068:13;4038:44;;;;;;;;81582:3:132;81578:16;;;-1:-1:-1;;;;;;81574:25:132;;;81562:38;;81634:16;;;;81630:25;81625:2;81616:12;;81609:47;81681:2;81672:12;;81347:343;4038:44:70;;;;;;;;;;;;;4028:54;;3798:1367;;;-1:-1:-1;;4111:53:70;;;;4107:1058;;4311:31;;-1:-1:-1;;;4311:31:70;;:4;;:27;;:31;;4339:2;;4311:31;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4291:51;;-1:-1:-1;4291:51:70;-1:-1:-1;4364:22:70;4291:51;4364:22;;:::i;:::-;4418:41;;-1:-1:-1;;;;;;81872:3:132;81868:16;;;81864:62;4418:41:70;;;81852:75:132;81943:12;;;81936:28;;;4364:22:70;;-1:-1:-1;81980:12:132;;4418:41:70;81695:303:132;4107:1058:70;-1:-1:-1;;4488:51:70;;;;4484:681;;4585:30;;-1:-1:-1;;;4585:30:70;;:4;;:26;;:30;;4612:2;;4585:30;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4563:52;;-1:-1:-1;4563:52:70;-1:-1:-1;4563:52:70;-1:-1:-1;4637:18:70;4563:52;4637:18;;:::i;:::-;;-1:-1:-1;4677:22:70;4694:5;4677:22;;:::i;:::-;;;4748:5;4755:11;4768:13;4731:51;;;;;;;;;;:::i;4484:681::-;-1:-1:-1;;4811:48:70;;;;4807:358;;4904:27;;-1:-1:-1;;;4904:27:70;;:4;;:23;;:27;;4928:2;;4904:27;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4883:48;;-1:-1:-1;4883:48:70;;-1:-1:-1;4883:48:70;-1:-1:-1;4953:22:70;4883:48;4953:22;;:::i;:::-;;-1:-1:-1;4997:18:70;5012:3;4997:18;;:::i;:::-;;-1:-1:-1;5037:20:70;5053:4;5037:20;;:::i;:::-;5089:57;;-1:-1:-1;;;;;;82883:3:132;82879:16;;;82875:25;;5089:57:70;;;82863:38:132;-1:-1:-1;;;;;;82957:3:132;82935:16;;;82931:43;82917:12;;;82910:65;83009:16;;;83005:25;82991:12;;;82984:47;5037:20:70;;-1:-1:-1;83047:12:132;;5089:57:70;;;;;;;;;;;;5079:67;;4807:358;3627:1552;;;;;3588:1591;5201:10;-1:-1:-1;3329:1893:70;;-1:-1:-1;;3329:1893:70;;5236:7;:14;5254:1;5236:19;5232:73;;5279:5;;-1:-1:-1;5286:7:70;-1:-1:-1;5271:23:70;;-1:-1:-1;;;;;5271:23:70;5232:73;5322:4;;5328:7;;-1:-1:-1;2802:2541:70;-1:-1:-1;;;;;;;;2802:2541:70:o;765:87::-;825:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;812:10:70;:33;;-1:-1:-1;;;;;;812:33:70;-1:-1:-1;;;;;812:33:70;;;;;;;;;;765:87::o;229:215:41:-;306:6;371:1;362:10;;407:18;362:10;:6;407;;:18;:::i;:::-;400:26;;;:::i;:::-;393:34;;;229:215;-1:-1:-1;;;;;229:215:41:o;892:220::-;970:7;1036:2;1027:11;;1075:18;1027:11;:6;1075;;:18;:::i;:::-;1067:27;;;:::i;:::-;1059:36;;;892:220;-1:-1:-1;;;;;892:220:41:o;95:128::-;171:5;201:6;;208;201:14;;;;;;;:::i;:::-;;;;;;;;;95:128;-1:-1:-1;;;;;95:128:41:o;12935:305:127:-;13013:6;13056:10;:6;13065:1;13056:10;:::i;:::-;13039:6;:13;:27;;13031:60;;;;-1:-1:-1;;;13031:60:127;;83945:2:132;13031:60:127;;;83927:21:132;83984:2;83964:18;;;83957:30;-1:-1:-1;;;84003:18:132;;;83996:50;84063:18;;13031:60:127;83743:344:132;13031:60:127;-1:-1:-1;13168:29:127;13184:3;13168:29;13162:36;;12935:305::o;3460:191:11:-;3544:12;-1:-1:-1;;;;;3575:11:11;;;:69;;3614:30;;;-1:-1:-1;;;;;;81582:3:132;81578:16;;;81574:25;;3614:30:11;;;81562:38:132;81634:16;;;81630:25;81616:12;;;81609:47;81672:12;3614:30:11;;;;;;;;;;;;3575:69;;;3589:22;;-1:-1:-1;;;;;;84241:3:132;84237:16;;;84233:62;3589:22:11;;;84221:75:132;84312:12;;3589:22:11;;;;;;;;;;;;3568:76;;3460:191;;;;:::o;6602:435:60:-;6766:12;6747:8;808:1;1059:20;6747:8;1077:1;1059:17;:20::i;:::-;:30;;;1055:82;;1116:20;:8;1134:1;1116:17;:20::i;1055:82::-;6843:8:::1;250:1:11;6912:25:60;:7;:14;:23;:25::i;:::-;:29;::::0;6940:1:::1;6912:29;:::i;:::-;6980:11;7009:7;6809:221;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;6790:240;;6602:435:::0;;;;;;:::o;3828:222:11:-;3927:12;-1:-1:-1;;;;;3958:11:11;;;:85;;4022:6;4030:4;4036:6;4005:38;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;3958:85;;;3972:30;;-1:-1:-1;;;;;;85496:3:132;85474:16;;;85470:38;3972:30:11;;;85458:51:132;-1:-1:-1;;;;;;85546:3:132;85542:16;;;85538:62;85525:11;;;85518:83;85617:12;;3972:30:11;;;;;;;;;;;;3958:85;3951:92;3828:222;-1:-1:-1;;;;3828:222:11:o;2409:432:85:-;2997:42;2985:55;3066:16;2452:359;;2652:67;;;1671:64;2652:67;;;85842:51:132;;;-1:-1:-1;;;85909:18:132;;;85902:34;;;;2712:4:85;85952:18:132;;;85945:34;2489:11:85;;1671:64;2586:43;;85815:18:132;;2652:67:85;;;-1:-1:-1;;2652:67:85;;;;;;;;;;2541:196;;;2652:67;2541:196;;:::i;:::-;;;;-1:-1:-1;;2541:196:85;;;;;;;;;;2506:245;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;2452:359:85;2820:7;:14;;-1:-1:-1;;2820:14:85;;;;;2409:432::o;19479:291::-;19554:14;19563:1;19566;19554:8;:14::i;:::-;19549:215;;-1:-1:-1;;;;;;;;;;;19589:42:85;;;;86192:2:132;86174:21;;;86231:2;86211:18;;;86204:30;86270:34;86265:2;86250:18;;86243:62;-1:-1:-1;;;86336:2:132;86321:18;;86314:33;86379:3;86364:19;;85990:399;19589:42:85;;;;;;;;19650:32;19680:1;19650:32;;;;;;:::i;:::-;;;;;;;;19701;19731:1;19701:32;;;;;;:::i;1776:194:119:-;1881:10;1875:4;1868:24;1918:4;1912;1905:18;1949:4;1943;1936:18;450:215:41;527:6;592:1;583:10;;628:18;583:10;:6;628;;:18;:::i;:::-;621:26;;;:::i;:::-;614:34;;;450:215;-1:-1:-1;;;;;450:215:41:o;1570:210::-;1647:7;1713:2;1704:11;;1744:18;1704:11;:6;1744;;:18;:::i;:::-;1736:27;;;:::i;:::-;1729:34;1570:210;-1:-1:-1;;;;;1570:210:41:o;16296:213:125:-;16352:6;16382:16;16374:24;;16370:103;;;16421:41;;-1:-1:-1;;;16421:41:125;;16452:2;16421:41;;;87461:36:132;87513:18;;;87506:34;;;87434:18;;16421:41:125;87280:266:132;16370:103:125;-1:-1:-1;16496:5:125;16296:213::o;19129:345:85:-;19256:8;;19244;;19226:4;;19244:20;;19240:228;;19285:6;19280:137;19301:1;:8;19297:1;:12;19280:137;;;19346:1;19348;19346:4;;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;19338:12:85;;:1;19340;19338:4;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;;19338:4:85;:12;19334:69;;19379:5;19374:10;;19334:69;19311:3;;19280:137;;;;19240:228;;;-1:-1:-1;19452:5:85;19129:345;;;;:::o;-1:-1:-1:-;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;14:121:132;99:10;92:5;88:22;81:5;78:33;68:61;;125:1;122;115:12;68:61;14:121;:::o;140:131::-;-1:-1:-1;;;;;215:31:132;;205:42;;195:70;;261:1;258;251:12;276:386;343:6;351;404:2;392:9;383:7;379:23;375:32;372:52;;;420:1;417;410:12;372:52;459:9;446:23;478:30;502:5;478:30;:::i;:::-;527:5;-1:-1:-1;584:2:132;569:18;;556:32;597:33;556:32;597:33;:::i;:::-;649:7;639:17;;;276:386;;;;;:::o;667:347::-;718:8;728:6;782:3;775:4;767:6;763:17;759:27;749:55;;800:1;797;790:12;749:55;-1:-1:-1;823:20:132;;-1:-1:-1;;;;;855:30:132;;852:50;;;898:1;895;888:12;852:50;935:4;927:6;923:17;911:29;;987:3;980:4;971:6;963;959:19;955:30;952:39;949:59;;;1004:1;1001;994:12;1019:127;1080:10;1075:3;1071:20;1068:1;1061:31;1111:4;1108:1;1101:15;1135:4;1132:1;1125:15;1151:254;1224:2;1218:9;1266:4;1254:17;;-1:-1:-1;;;;;1286:34:132;;1322:22;;;1283:62;1280:88;;;1348:18;;:::i;:::-;1384:2;1377:22;1151:254;:::o;1410:275::-;1481:2;1475:9;1546:2;1527:13;;-1:-1:-1;;1523:27:132;1511:40;;-1:-1:-1;;;;;1566:34:132;;1602:22;;;1563:62;1560:88;;;1628:18;;:::i;:::-;1664:2;1657:22;1410:275;;-1:-1:-1;1410:275:132:o;1690:186::-;1738:4;-1:-1:-1;;;;;1763:6:132;1760:30;1757:56;;;1793:18;;:::i;:::-;-1:-1:-1;1859:2:132;1838:15;-1:-1:-1;;1834:29:132;1865:4;1830:40;;1690:186::o;1881:462::-;1923:5;1976:3;1969:4;1961:6;1957:17;1953:27;1943:55;;1994:1;1991;1984:12;1943:55;2030:6;2017:20;2061:48;2077:31;2105:2;2077:31;:::i;:::-;2061:48;:::i;:::-;2134:2;2125:7;2118:19;2180:3;2173:4;2168:2;2160:6;2156:15;2152:26;2149:35;2146:55;;;2197:1;2194;2187:12;2146:55;2262:2;2255:4;2247:6;2243:17;2236:4;2227:7;2223:18;2210:55;2310:1;2285:16;;;2303:4;2281:27;2274:38;;;;2289:7;1881:462;-1:-1:-1;;;1881:462:132:o;2348:826::-;2454:6;2462;2470;2478;2531:2;2519:9;2510:7;2506:23;2502:32;2499:52;;;2547:1;2544;2537:12;2499:52;2587:9;2574:23;-1:-1:-1;;;;;2657:2:132;2649:6;2646:14;2643:34;;;2673:1;2670;2663:12;2643:34;2712:58;2762:7;2753:6;2742:9;2738:22;2712:58;:::i;:::-;2789:8;;-1:-1:-1;2686:84:132;-1:-1:-1;2877:2:132;2862:18;;2849:32;;-1:-1:-1;2893:16:132;;;2890:36;;;2922:1;2919;2912:12;2890:36;2945:51;2988:7;2977:8;2966:9;2962:24;2945:51;:::i;:::-;2935:61;;3049:2;3038:9;3034:18;3021:32;3005:48;;3078:2;3068:8;3065:16;3062:36;;;3094:1;3091;3084:12;3062:36;;3117:51;3160:7;3149:8;3138:9;3134:24;3117:51;:::i;:::-;3107:61;;;2348:826;;;;;;;:::o;3593:114::-;3677:4;3670:5;3666:16;3659:5;3656:27;3646:55;;3697:1;3694;3687:12;3712:152;3789:20;;3838:1;3828:12;;3818:40;;3854:1;3851;3844:12;3869:343;3952:6;3960;4013:2;4001:9;3992:7;3988:23;3984:32;3981:52;;;4029:1;4026;4019:12;3981:52;4068:9;4055:23;4087:29;4110:5;4087:29;:::i;:::-;4135:5;-1:-1:-1;4159:47:132;4202:2;4187:18;;4159:47;:::i;4217:465::-;4270:3;4308:5;4302:12;4335:6;4330:3;4323:19;4361:4;4390;4385:3;4381:14;4374:21;;4429:4;4422:5;4418:16;4452:1;4462:195;4476:6;4473:1;4470:13;4462:195;;;4541:13;;-1:-1:-1;;;;;4537:39:132;4525:52;;4597:12;;;;4632:15;;;;4573:1;4491:9;4462:195;;;-1:-1:-1;4673:3:132;;4217:465;-1:-1:-1;;;;;4217:465:132:o;4687:261::-;4866:2;4855:9;4848:21;4829:4;4886:56;4938:2;4927:9;4923:18;4915:6;4886:56;:::i;5176:588::-;5258:6;5266;5274;5327:2;5315:9;5306:7;5302:23;5298:32;5295:52;;;5343:1;5340;5333:12;5295:52;5383:9;5370:23;-1:-1:-1;;;;;5408:6:132;5405:30;5402:50;;;5448:1;5445;5438:12;5402:50;5471:49;5512:7;5503:6;5492:9;5488:22;5471:49;:::i;:::-;5461:59;;;5570:2;5559:9;5555:18;5542:32;5583:29;5606:5;5583:29;:::i;:::-;5631:5;-1:-1:-1;5688:2:132;5673:18;;5660:32;5701:31;5660:32;5701:31;:::i;:::-;5751:7;5741:17;;;5176:588;;;;;:::o;5769:250::-;5854:1;5864:113;5878:6;5875:1;5872:13;5864:113;;;5954:11;;;5948:18;5935:11;;;5928:39;5900:2;5893:10;5864:113;;;-1:-1:-1;;6011:1:132;5993:16;;5986:27;5769:250::o;6024:271::-;6066:3;6104:5;6098:12;6131:6;6126:3;6119:19;6147:76;6216:6;6209:4;6204:3;6200:14;6193:4;6186:5;6182:16;6147:76;:::i;:::-;6277:2;6256:15;-1:-1:-1;;6252:29:132;6243:39;;;;6284:4;6239:50;;6024:271;-1:-1:-1;;6024:271:132:o;6300:598::-;6352:3;6383;6415:5;6409:12;6442:6;6437:3;6430:19;6468:4;6497;6492:3;6488:14;6481:21;;6555:4;6545:6;6542:1;6538:14;6531:5;6527:26;6523:37;6594:4;6587:5;6583:16;6617:1;6627:245;6641:6;6638:1;6635:13;6627:245;;;6728:2;6724:7;6716:5;6710:4;6706:16;6702:30;6697:3;6690:43;6754:38;6787:4;6778:6;6772:13;6754:38;:::i;:::-;6850:12;;;;6746:46;-1:-1:-1;6815:15:132;;;;6663:1;6656:9;6627:245;;;-1:-1:-1;6888:4:132;;6300:598;-1:-1:-1;;;;;;;6300:598:132:o;6903:1077::-;7109:4;7138:2;7178;7167:9;7163:18;7208:2;7197:9;7190:21;7231:6;7266;7260:13;7297:6;7289;7282:22;7323:2;7313:12;;7356:2;7345:9;7341:18;7334:25;;7418:2;7408:6;7405:1;7401:14;7390:9;7386:30;7382:39;7456:2;7448:6;7444:15;7477:1;7487:464;7501:6;7498:1;7495:13;7487:464;;;7566:22;;;-1:-1:-1;;7562:36:132;7550:49;;7622:13;;7667:9;;-1:-1:-1;;;;;7663:35:132;7648:51;;7738:11;;7732:18;7770:15;;;7763:27;;;7813:58;7855:15;;;7732:18;7813:58;:::i;:::-;7929:12;;;;7803:68;-1:-1:-1;;7894:15:132;;;;7523:1;7516:9;7487:464;;;-1:-1:-1;7968:6:132;;6903:1077;-1:-1:-1;;;;;;;;6903:1077:132:o;7985:1114::-;8108:6;8116;8124;8132;8140;8148;8156;8209:3;8197:9;8188:7;8184:23;8180:33;8177:53;;;8226:1;8223;8216:12;8177:53;8265:9;8252:23;8284:30;8308:5;8284:30;:::i;:::-;8333:5;-1:-1:-1;8390:2:132;8375:18;;8362:32;8403:33;8362:32;8403:33;:::i;:::-;8455:7;-1:-1:-1;8513:2:132;8498:18;;8485:32;-1:-1:-1;;;;;8566:14:132;;;8563:34;;;8593:1;8590;8583:12;8563:34;8616:49;8657:7;8648:6;8637:9;8633:22;8616:49;:::i;:::-;8606:59;;8712:2;8701:9;8697:18;8684:32;8674:42;;8768:3;8757:9;8753:19;8740:33;8725:48;;8782:33;8807:7;8782:33;:::i;:::-;8834:7;;-1:-1:-1;8894:3:132;8879:19;;8866:33;;8911:16;;;8908:36;;;8940:1;8937;8930:12;8908:36;;8979:60;9031:7;9020:8;9009:9;9005:24;8979:60;:::i;:::-;7985:1114;;;;-1:-1:-1;7985:1114:132;;-1:-1:-1;7985:1114:132;;;;8953:86;;-1:-1:-1;;;7985:1114:132:o;9104:409::-;9174:6;9182;9235:2;9223:9;9214:7;9210:23;9206:32;9203:52;;;9251:1;9248;9241:12;9203:52;9291:9;9278:23;-1:-1:-1;;;;;9316:6:132;9313:30;9310:50;;;9356:1;9353;9346:12;9310:50;9395:58;9445:7;9436:6;9425:9;9421:22;9395:58;:::i;:::-;9472:8;;9369:84;;-1:-1:-1;9104:409:132;-1:-1:-1;;;;9104:409:132:o;10121:117::-;10206:6;10199:5;10195:18;10188:5;10185:29;10175:57;;10228:1;10225;10218:12;10243:313;10310:6;10318;10371:2;10359:9;10350:7;10346:23;10342:32;10339:52;;;10387:1;10384;10377:12;10339:52;10426:9;10413:23;10445:30;10469:5;10445:30;:::i;:::-;10494:5;10546:2;10531:18;;;;10518:32;;-1:-1:-1;;;10243:313:132:o;10753:628::-;10841:6;10849;10857;10910:2;10898:9;10889:7;10885:23;10881:32;10878:52;;;10926:1;10923;10916:12;10878:52;10966:9;10953:23;-1:-1:-1;;;;;11036:2:132;11028:6;11025:14;11022:34;;;11052:1;11049;11042:12;11022:34;11091:58;11141:7;11132:6;11121:9;11117:22;11091:58;:::i;:::-;11168:8;;-1:-1:-1;11065:84:132;-1:-1:-1;11256:2:132;11241:18;;11228:32;;-1:-1:-1;11272:16:132;;;11269:36;;;11301:1;11298;11291:12;11269:36;;11324:51;11367:7;11356:8;11345:9;11341:24;11324:51;:::i;:::-;11314:61;;;10753:628;;;;;:::o;11386:183::-;11446:4;-1:-1:-1;;;;;11471:6:132;11468:30;11465:56;;;11501:18;;:::i;:::-;-1:-1:-1;11546:1:132;11542:14;11558:4;11538:25;;11386:183::o;11574:743::-;11628:5;11681:3;11674:4;11666:6;11662:17;11658:27;11648:55;;11699:1;11696;11689:12;11648:55;11735:6;11722:20;11761:4;11785:60;11801:43;11841:2;11801:43;:::i;11785:60::-;11867:3;11891:2;11886:3;11879:15;11919:4;11914:3;11910:14;11903:21;;11976:4;11970:2;11967:1;11963:10;11955:6;11951:23;11947:34;11933:48;;12004:3;11996:6;11993:15;11990:35;;;12021:1;12018;12011:12;11990:35;12057:4;12049:6;12045:17;12071:217;12087:6;12082:3;12079:15;12071:217;;;12167:3;12154:17;12184:31;12209:5;12184:31;:::i;:::-;12228:18;;12266:12;;;;12104;;12071:217;;;-1:-1:-1;12306:5:132;11574:743;-1:-1:-1;;;;;;11574:743:132:o;12322:1211::-;12439:6;12447;12500:2;12488:9;12479:7;12475:23;12471:32;12468:52;;;12516:1;12513;12506:12;12468:52;12556:9;12543:23;-1:-1:-1;;;;;12626:2:132;12618:6;12615:14;12612:34;;;12642:1;12639;12632:12;12612:34;12665:61;12718:7;12709:6;12698:9;12694:22;12665:61;:::i;:::-;12655:71;;12745:2;12735:12;;12800:2;12789:9;12785:18;12772:32;12829:2;12819:8;12816:16;12813:36;;;12845:1;12842;12835:12;12813:36;12868:24;;;-1:-1:-1;12923:4:132;12915:13;;12911:27;-1:-1:-1;12901:55:132;;12952:1;12949;12942:12;12901:55;12988:2;12975:16;13011:60;13027:43;13067:2;13027:43;:::i;13011:60::-;13105:15;;;13187:1;13183:10;;;;13175:19;;13171:28;;;13136:12;;;;13211:19;;;13208:39;;;13243:1;13240;13233:12;13208:39;13267:11;;;;13287:216;13303:6;13298:3;13295:15;13287:216;;;13383:3;13370:17;13400:30;13424:5;13400:30;:::i;:::-;13443:18;;13320:12;;;;13481;;;;13287:216;;;13522:5;13512:15;;;;;;;12322:1211;;;;;:::o;13538:1569::-;13742:4;13771:2;13811;13800:9;13796:18;13841:2;13830:9;13823:21;13864:6;13899;13893:13;13930:6;13922;13915:22;13956:2;13946:12;;13989:2;13978:9;13974:18;13967:25;;14051:2;14041:6;14038:1;14034:14;14023:9;14019:30;14015:39;14089:2;14081:6;14077:15;14110:1;14131;14141:937;14157:6;14152:3;14149:15;14141:937;;;14226:22;;;-1:-1:-1;;14222:36:132;14210:49;;14282:13;;14369:9;;-1:-1:-1;;;;;14365:35:132;14350:51;;14440:11;;14434:18;14472:15;;;14465:27;;;14553:19;;14322:15;;;14585:24;;;14675:21;;;;14720:1;;14643:2;14631:15;;;14734:236;14750:8;14745:3;14742:17;14734:236;;;14831:15;;-1:-1:-1;;;;;;14827:42:132;14813:57;;14939:17;;;;14778:1;14769:11;;;;;14896:14;;;;14734:236;;;-1:-1:-1;15056:12:132;;;;14993:5;-1:-1:-1;;;15021:15:132;;;;14183:1;14174:11;14141:937;;;-1:-1:-1;15095:6:132;;13538:1569;-1:-1:-1;;;;;;;;;13538:1569:132:o;15112:477::-;15191:6;15199;15207;15260:2;15248:9;15239:7;15235:23;15231:32;15228:52;;;15276:1;15273;15266:12;15228:52;15316:9;15303:23;-1:-1:-1;;;;;15341:6:132;15338:30;15335:50;;;15381:1;15378;15371:12;15335:50;15420:58;15470:7;15461:6;15450:9;15446:22;15420:58;:::i;:::-;15497:8;;15394:84;;-1:-1:-1;15579:2:132;15564:18;;;;15551:32;;15112:477;-1:-1:-1;;;;15112:477:132:o;15594:266::-;15682:6;15677:3;15670:19;15734:6;15727:5;15720:4;15715:3;15711:14;15698:43;-1:-1:-1;15786:1:132;15761:16;;;15779:4;15757:27;;;15750:38;;;;15842:2;15821:15;;;-1:-1:-1;;15817:29:132;15808:39;;;15804:50;;15594:266::o;15865:393::-;16086:4;16078:6;16074:17;16063:9;16056:36;16128:2;16123;16112:9;16108:18;16101:30;16037:4;16148:61;16205:2;16194:9;16190:18;16182:6;16174;16148:61;:::i;:::-;16140:69;;16245:6;16240:2;16229:9;16225:18;16218:34;15865:393;;;;;;;:::o;16263:348::-;16347:6;16400:2;16388:9;16379:7;16375:23;16371:32;16368:52;;;16416:1;16413;16406:12;16368:52;16456:9;16443:23;-1:-1:-1;;;;;16481:6:132;16478:30;16475:50;;;16521:1;16518;16511:12;16475:50;16544:61;16597:7;16588:6;16577:9;16573:22;16544:61;:::i;16616:218::-;16763:2;16752:9;16745:21;16726:4;16783:45;16824:2;16813:9;16809:18;16801:6;16783:45;:::i;16839:732::-;16942:6;16950;16958;16966;16974;17027:3;17015:9;17006:7;17002:23;16998:33;16995:53;;;17044:1;17041;17034:12;16995:53;17083:9;17070:23;17102:30;17126:5;17102:30;:::i;:::-;17151:5;-1:-1:-1;17203:2:132;17188:18;;17175:32;;-1:-1:-1;17254:2:132;17239:18;;17226:32;;-1:-1:-1;17310:2:132;17295:18;;17282:32;17323:33;17282:32;17323:33;:::i;:::-;17375:7;-1:-1:-1;17433:3:132;17418:19;;17405:33;-1:-1:-1;;;;;17450:30:132;;17447:50;;;17493:1;17490;17483:12;17447:50;17516:49;17557:7;17548:6;17537:9;17533:22;17516:49;:::i;:::-;17506:59;;;16839:732;;;;;;;;:::o;17576:280::-;17775:2;17764:9;17757:21;17738:4;17795:55;17846:2;17835:9;17831:18;17823:6;17795:55;:::i;18753:832::-;18859:6;18867;18875;18883;18891;18944:3;18932:9;18923:7;18919:23;18915:33;18912:53;;;18961:1;18958;18951:12;18912:53;19001:9;18988:23;-1:-1:-1;;;;;19071:2:132;19063:6;19060:14;19057:34;;;19087:1;19084;19077:12;19057:34;19126:58;19176:7;19167:6;19156:9;19152:22;19126:58;:::i;:::-;19203:8;;-1:-1:-1;19100:84:132;-1:-1:-1;19291:2:132;19276:18;;19263:32;;-1:-1:-1;19307:16:132;;;19304:36;;;19336:1;19333;19326:12;19304:36;;19359:51;19402:7;19391:8;19380:9;19376:24;19359:51;:::i;:::-;19349:61;;;19457:2;19446:9;19442:18;19429:32;19419:42;;19511:2;19500:9;19496:18;19483:32;19524:31;19549:5;19524:31;:::i;:::-;19574:5;19564:15;;;18753:832;;;;;;;;:::o;19590:271::-;19673:6;19726:2;19714:9;19705:7;19701:23;19697:32;19694:52;;;19742:1;19739;19732:12;19694:52;19781:9;19768:23;19800:31;19825:5;19800:31;:::i;20048:313::-;20115:6;20123;20176:2;20164:9;20155:7;20151:23;20147:32;20144:52;;;20192:1;20189;20182:12;20144:52;20231:9;20218:23;20250:30;20274:5;20250:30;:::i;20660:579::-;20777:6;20785;20793;20846:2;20834:9;20825:7;20821:23;20817:32;20814:52;;;20862:1;20859;20852:12;20814:52;20901:9;20888:23;20920:29;20943:5;20920:29;:::i;:::-;20968:5;-1:-1:-1;20992:47:132;21035:2;21020:18;;20992:47;:::i;:::-;20982:57;;21090:2;21079:9;21075:18;21062:32;-1:-1:-1;;;;;21109:6:132;21106:30;21103:50;;;21149:1;21146;21139:12;21103:50;21172:61;21225:7;21216:6;21205:9;21201:22;21172:61;:::i;21244:146::-;-1:-1:-1;;;;;21323:5:132;21319:46;21312:5;21309:57;21299:85;;21380:1;21377;21370:12;21395:247;21454:6;21507:2;21495:9;21486:7;21482:23;21478:32;21475:52;;;21523:1;21520;21513:12;21475:52;21562:9;21549:23;21581:31;21606:5;21581:31;:::i;21971:717::-;22061:6;22069;22077;22085;22138:2;22126:9;22117:7;22113:23;22109:32;22106:52;;;22154:1;22151;22144:12;22106:52;22194:9;22181:23;-1:-1:-1;;;;;22264:2:132;22256:6;22253:14;22250:34;;;22280:1;22277;22270:12;22250:34;22319:58;22369:7;22360:6;22349:9;22345:22;22319:58;:::i;:::-;22396:8;;-1:-1:-1;22293:84:132;-1:-1:-1;22484:2:132;22469:18;;22456:32;;-1:-1:-1;22500:16:132;;;22497:36;;;22529:1;22526;22519:12;22497:36;;22568:60;22620:7;22609:8;22598:9;22594:24;22568:60;:::i;:::-;21971:717;;;;-1:-1:-1;22647:8:132;-1:-1:-1;;;;21971:717:132:o;23050:689::-;22876:12;;22890:10;22872:29;22860:42;;22951:4;22940:16;;;22934:23;22918:14;;;22911:47;23011:4;23000:16;;;22994:23;-1:-1:-1;;;;;22990:48:132;22974:14;;;22967:72;23465:1;23461;23456:3;23452:11;23448:19;23440:6;23436:32;23431:2;23420:9;23416:18;23409:60;23506:6;23500:3;23489:9;23485:19;23478:35;23550:3;23544;23533:9;23529:19;23522:32;23338:4;23577:46;23618:3;23607:9;23603:19;23595:6;23577:46;:::i;:::-;23672:9;23664:6;23660:22;23654:3;23643:9;23639:19;23632:51;23700:33;23726:6;23718;23700:33;:::i;:::-;23692:41;23050:689;-1:-1:-1;;;;;;;;23050:689:132:o;24209:697::-;24568:3;24557:9;24550:22;24531:4;24595:50;24640:3;24629:9;24625:19;24129:1;24117:14;;-1:-1:-1;;;24156:4:132;24147:14;;24140:30;24195:2;24186:12;;24052:152;24595:50;24693:9;24685:6;24681:22;24676:2;24665:9;24661:18;24654:50;24721:37;24751:6;24129:1;24117:14;;-1:-1:-1;;;24156:4:132;24147:14;;24140:30;24195:2;24186:12;;24052:152;24721:37;-1:-1:-1;;;;;24832:15:132;;;24827:2;24812:18;;24805:43;24884:15;;;;24879:2;24864:18;;;24857:43;;;;-1:-1:-1;24713:45:132;24209:697;-1:-1:-1;24209:697:132:o;25068:::-;25427:3;25416:9;25409:22;25390:4;25454:50;25499:3;25488:9;25484:19;24988:1;24976:14;;-1:-1:-1;;;25015:4:132;25006:14;;24999:30;25054:2;25045:12;;24911:152;25454:50;25552:9;25544:6;25540:22;25535:2;25524:9;25520:18;25513:50;25580:37;25610:6;24988:1;24976:14;;-1:-1:-1;;;25015:4:132;25006:14;;24999:30;25054:2;25045:12;;24911:152;25770:127;25831:10;25826:3;25822:20;25819:1;25812:31;25862:4;25859:1;25852:15;25886:4;25883:1;25876:15;26181:127;26242:10;26237:3;26233:20;26230:1;26223:31;26273:4;26270:1;26263:15;26297:4;26294:1;26287:15;26313:148;26401:4;26380:12;;;26394;;;26376:31;;26419:13;;26416:39;;;26435:18;;:::i;26856:151::-;26946:4;26939:12;;;26925;;;26921:31;;26964:14;;26961:40;;;26981:18;;:::i;27012:380::-;27091:1;27087:12;;;;27134;;;27155:61;;27209:4;27201:6;27197:17;27187:27;;27155:61;27262:2;27254:6;27251:14;27231:18;27228:38;27225:161;;27308:10;27303:3;27299:20;27296:1;27289:31;27343:4;27340:1;27333:15;27371:4;27368:1;27361:15;27225:161;;27012:380;;;:::o;27397:760::-;-1:-1:-1;;;;;27748:15:132;;;27730:34;;27800:15;;27795:2;27780:18;;27773:43;27847:2;27832:18;;27825:34;;;27907:6;27895:19;;27890:2;27875:18;;27868:47;27952:3;27946;27931:19;;27924:32;;;27673:4;;27979:62;;28021:19;;28013:6;28005;27979:62;:::i;:::-;28090:9;28082:6;28078:22;28072:3;28061:9;28057:19;28050:51;28118:33;28144:6;28136;28118:33;:::i;:::-;28110:41;27397:760;-1:-1:-1;;;;;;;;;;27397:760:132:o;28456:138::-;28535:13;;28557:31;28535:13;28557:31;:::i;28599:164::-;28675:13;;28724;;28717:21;28707:32;;28697:60;;28753:1;28750;28743:12;28768:330;28844:6;28852;28905:2;28893:9;28884:7;28880:23;28876:32;28873:52;;;28921:1;28918;28911:12;28873:52;28953:9;28947:16;28972:31;28997:5;28972:31;:::i;:::-;29022:5;-1:-1:-1;29046:46:132;29088:2;29073:18;;29046:46;:::i;29103:175::-;29181:13;;-1:-1:-1;;;;;29223:30:132;;29213:41;;29203:69;;29268:1;29265;29258:12;29283:134;29360:13;;29382:29;29360:13;29382:29;:::i;29422:460::-;29505:6;29513;29521;29574:2;29562:9;29553:7;29549:23;29545:32;29542:52;;;29590:1;29587;29580:12;29542:52;29613:39;29642:9;29613:39;:::i;:::-;29603:49;;29695:2;29684:9;29680:18;29674:25;29708:29;29731:5;29708:29;:::i;:::-;29806:2;29791:18;;29785:25;29756:5;;-1:-1:-1;29819:31:132;29785:25;29819:31;:::i;30289:441::-;30342:5;30395:3;30388:4;30380:6;30376:17;30372:27;30362:55;;30413:1;30410;30403:12;30362:55;30442:6;30436:13;30473:48;30489:31;30517:2;30489:31;:::i;30473:48::-;30546:2;30537:7;30530:19;30592:3;30585:4;30580:2;30572:6;30568:15;30564:26;30561:35;30558:55;;;30609:1;30606;30599:12;30558:55;30622:77;30696:2;30689:4;30680:7;30676:18;30669:4;30661:6;30657:17;30622:77;:::i;30735:335::-;30814:6;30867:2;30855:9;30846:7;30842:23;30838:32;30835:52;;;30883:1;30880;30873:12;30835:52;30916:9;30910:16;-1:-1:-1;;;;;30941:6:132;30938:30;30935:50;;;30981:1;30978;30971:12;30935:50;31004:60;31056:7;31047:6;31036:9;31032:22;31004:60;:::i;31075:740::-;31140:5;31193:3;31186:4;31178:6;31174:17;31170:27;31160:55;;31211:1;31208;31201:12;31160:55;31240:6;31234:13;31266:4;31290:60;31306:43;31346:2;31306:43;:::i;31290:60::-;31372:3;31396:2;31391:3;31384:15;31424:4;31419:3;31415:14;31408:21;;31481:4;31475:2;31472:1;31468:10;31460:6;31456:23;31452:34;31438:48;;31509:3;31501:6;31498:15;31495:35;;;31526:1;31523;31516:12;31495:35;31562:4;31554:6;31550:17;31576:210;31592:6;31587:3;31584:15;31576:210;;;31665:3;31659:10;31682:31;31707:5;31682:31;:::i;:::-;31726:18;;31764:12;;;;31609;;31576:210;;31820:1116;31917:6;31970:2;31958:9;31949:7;31945:23;31941:32;31938:52;;;31986:1;31983;31976:12;31938:52;32019:9;32013:16;-1:-1:-1;;;;;32089:2:132;32081:6;32078:14;32075:34;;;32105:1;32102;32095:12;32075:34;32128:22;;;;32184:4;32166:16;;;32162:27;32159:47;;;32202:1;32199;32192:12;32159:47;32228:23;;:::i;:::-;32274:32;32303:2;32274:32;:::i;:::-;32267:5;32260:47;32339:40;32375:2;32371;32367:11;32339:40;:::i;:::-;32334:2;32327:5;32323:14;32316:64;32412:40;32448:2;32444;32440:11;32412:40;:::i;:::-;32407:2;32400:5;32396:14;32389:64;32485:40;32521:2;32517;32513:11;32485:40;:::i;:::-;32480:2;32473:5;32469:14;32462:64;32565:3;32561:2;32557:12;32551:19;32595:2;32585:8;32582:16;32579:36;;;32611:1;32608;32601:12;32579:36;32648:67;32707:7;32696:8;32692:2;32688:17;32648:67;:::i;:::-;32642:3;32635:5;32631:15;32624:92;;32755:3;32751:2;32747:12;32741:19;32785:2;32775:8;32772:16;32769:36;;;32801:1;32798;32791:12;32769:36;32838:67;32897:7;32886:8;32882:2;32878:17;32838:67;:::i;:::-;32832:3;32821:15;;32814:92;-1:-1:-1;32825:5:132;31820:1116;-1:-1:-1;;;;;31820:1116:132:o;32941:271::-;33124:6;33116;33111:3;33098:33;33080:3;33150:16;;33175:13;;;33150:16;32941:271;-1:-1:-1;32941:271:132:o;33217:379::-;33428:2;33417:9;33410:21;33391:4;33448:45;33489:2;33478:9;33474:18;33466:6;33448:45;:::i;:::-;33440:53;;33529:6;33524:2;33513:9;33509:18;33502:34;33584:4;33576:6;33572:17;33567:2;33556:9;33552:18;33545:45;33217:379;;;;;;:::o;33601:125::-;33666:9;;;33687:10;;;33684:36;;;33700:18;;:::i;33731:474::-;33972:10;33960:23;;33942:42;;-1:-1:-1;;;;;34020:32:132;;34015:2;34000:18;;33993:60;34089:3;34084:2;34069:18;;34062:31;;;-1:-1:-1;;34110:46:132;;34136:19;;34128:6;34110:46;:::i;:::-;34102:54;;34192:6;34187:2;34176:9;34172:18;34165:34;33731:474;;;;;;;:::o;34210:184::-;34280:6;34333:2;34321:9;34312:7;34308:23;34304:32;34301:52;;;34349:1;34346;34339:12;34301:52;-1:-1:-1;34372:16:132;;34210:184;-1:-1:-1;34210:184:132:o;34399:1453::-;34603:4;34632:2;34672;34661:9;34657:18;34702:2;34691:9;34684:21;34725:6;34760;34754:13;34791:6;34783;34776:22;34817:2;34807:12;;34850:2;34839:9;34835:18;34828:25;;34912:2;34902:6;34899:1;34895:14;34884:9;34880:30;34876:39;34950:2;34942:6;34938:15;34971:1;34981:842;34995:6;34992:1;34989:13;34981:842;;;35060:22;;;-1:-1:-1;;35056:36:132;35044:49;;35116:13;;35188:9;;35199:10;35184:26;35169:42;;35258:11;;;35252:18;-1:-1:-1;;;;;35248:44:132;35231:15;;;35224:69;35332:11;;;35326:18;35152:4;35364:15;;;35357:27;;;35152:4;35411:48;35443:15;;;35326:18;35411:48;:::i;:::-;35397:62;;;35482:4;35537:2;35533;35529:11;35523:18;35518:2;35510:6;35506:15;35499:43;;35565:4;35618:2;35614;35610:11;35604:18;35582:40;;35671:6;35663;35659:19;35654:2;35646:6;35642:15;35635:44;;35702:41;35736:6;35720:14;35702:41;:::i;:::-;35801:12;;;;35692:51;-1:-1:-1;;;35766:15:132;;;;35017:1;35010:9;34981:842;;35857:289;36032:2;36021:9;36014:21;35995:4;36052:45;36093:2;36082:9;36078:18;36070:6;36052:45;:::i;:::-;36044:53;;36133:6;36128:2;36117:9;36113:18;36106:34;35857:289;;;;;:::o;36553:1121::-;36654:6;36707:2;36695:9;36686:7;36682:23;36678:32;36675:52;;;36723:1;36720;36713:12;36675:52;36756:9;36750:16;-1:-1:-1;;;;;36826:2:132;36818:6;36815:14;36812:34;;;36842:1;36839;36832:12;36812:34;36865:22;;;;36921:4;36903:16;;;36899:27;36896:47;;;36939:1;36936;36929:12;36896:47;36965:23;;:::i;:::-;37011:33;37041:2;37011:33;:::i;37679:359::-;37866:6;37861:3;37854:19;37836:3;37902:6;37896:13;37918:73;37984:6;37979:2;37974:3;37970:12;37965:2;37957:6;37953:15;37918:73;:::i;:::-;38011:16;;;;38029:2;38007:25;;37679:359;-1:-1:-1;;;37679:359:132:o;38043:360::-;38246:2;38235:9;38228:21;38209:4;38266:45;38307:2;38296:9;38292:18;38284:6;38266:45;:::i;:::-;38342:2;38327:18;;38320:34;;;;-1:-1:-1;38385:2:132;38370:18;38363:34;38258:53;38043:360;-1:-1:-1;38043:360:132:o;38408:244::-;38565:2;38554:9;38547:21;38528:4;38585:61;38642:2;38631:9;38627:18;38619:6;38611;38585:61;:::i;38935:280::-;39034:6;39087:2;39075:9;39066:7;39062:23;39058:32;39055:52;;;39103:1;39100;39093:12;39055:52;39135:9;39129:16;39154:31;39179:5;39154:31;:::i;39220:249::-;39289:6;39342:2;39330:9;39321:7;39317:23;39313:32;39310:52;;;39358:1;39355;39348:12;39310:52;39390:9;39384:16;39409:30;39433:5;39409:30;:::i;39742:766::-;39842:10;39834:5;39828:12;39824:29;39819:3;39812:42;39903:4;39896:5;39892:16;39886:23;39879:4;39874:3;39870:14;39863:47;39959:4;39952:5;39948:16;39942:23;39935:4;39930:3;39926:14;39919:47;40015:4;40008:5;40004:16;39998:23;39991:4;39986:3;39982:14;39975:47;39794:3;40068:4;40061:5;40057:16;40051:23;40106:4;40099;40094:3;40090:14;40083:28;40132:47;40173:4;40168:3;40164:14;40150:12;40132:47;:::i;:::-;40120:59;;40227:4;40220:5;40216:16;40210:23;40275:3;40269:4;40265:14;40258:4;40253:3;40249:14;40242:38;40303:39;40337:4;40321:14;40303:39;:::i;:::-;40289:53;;;40390:4;40383:5;40379:16;40373:23;40440:3;40432:6;40428:16;40421:4;40416:3;40412:14;40405:40;40461:41;40495:6;40479:14;40461:41;:::i;40513:347::-;40720:2;40709:9;40702:21;40683:4;40740:55;40791:2;40780:9;40776:18;40768:6;40740:55;:::i;:::-;40732:63;;40845:6;40838:14;40831:22;40826:2;40815:9;40811:18;40804:50;40513:347;;;;;:::o;40865:478::-;40935:5;40983:4;40971:9;40966:3;40962:19;40958:30;40955:50;;;41001:1;40998;40991:12;40955:50;41034:4;41028:11;41078:4;41070:6;41066:17;41149:6;41137:10;41134:22;-1:-1:-1;;;;;41101:10:132;41098:34;41095:62;41092:88;;;41160:18;;:::i;:::-;41196:4;41189:24;41261:16;;41246:32;;41332:2;41317:18;;;41311:25;41294:15;;;41287:50;;;;-1:-1:-1;41231:6:132;40865:478;-1:-1:-1;40865:478:132:o;41348:259::-;41448:6;41501:2;41489:9;41480:7;41476:23;41472:32;41469:52;;;41517:1;41514;41507:12;41469:52;41540:61;41593:7;41582:9;41540:61;:::i;42009:570::-;42318:3;42307:9;42300:22;42281:4;42339:56;42390:3;42379:9;42375:19;42367:6;42339:56;:::i;:::-;42431:13;;42426:2;42411:18;;;42404:41;;;;42487:15;;;42481:22;42476:2;42461:18;;42454:50;-1:-1:-1;;;;;;42540:32:132;;;;42535:2;42520:18;;;42513:60;42331:64;42009:570;-1:-1:-1;42009:570:132:o;42584:840::-;42726:6;42734;42778:9;42769:7;42765:23;42808:3;42804:2;42800:12;42797:32;;;42825:1;42822;42815:12;42797:32;42849:4;42845:2;42841:13;42838:33;;;42867:1;42864;42857:12;42838:33;;42900:2;42894:9;42942:4;42934:6;42930:17;43013:6;43001:10;42998:22;-1:-1:-1;;;;;42965:10:132;42962:34;42959:62;42956:88;;;43024:18;;:::i;:::-;43060:2;43053:22;43099:16;;43084:32;;43149:48;43193:2;43178:18;;43149:48;:::i;:::-;43144:2;43136:6;43132:15;43125:73;43231:70;43293:7;43288:2;43277:9;43273:18;43231:70;:::i;:::-;43226:2;43214:15;;43207:95;43218:6;-1:-1:-1;43346:72:132;43410:7;43403:4;43388:20;;43346:72;:::i;43429:738::-;43744:10;43736:6;43732:23;43721:9;43714:42;43695:4;43792:1;43788;43783:3;43779:11;43775:19;43842:2;43834:6;43830:15;43825:2;43814:9;43810:18;43803:43;43882:3;43877:2;43866:9;43862:18;43855:31;43909:46;43950:3;43939:9;43935:19;43927:6;43909:46;:::i;:::-;43991:6;43986:2;43975:9;43971:18;43964:34;44047:2;44039:6;44035:15;44029:3;44018:9;44014:19;44007:44;44100:9;44092:6;44088:22;44082:3;44071:9;44067:19;44060:51;44128:33;44154:6;44146;44128:33;:::i;44172:128::-;44239:9;;;44260:11;;;44257:37;;;44274:18;;:::i;44917:136::-;44956:3;44984:5;44974:39;;44993:18;;:::i;:::-;-1:-1:-1;;;45029:18:132;;44917:136::o;45058:379::-;45251:2;45240:9;45233:21;45214:4;45277:45;45318:2;45307:9;45303:18;45295:6;45277:45;:::i;:::-;45370:9;45362:6;45358:22;45353:2;45342:9;45338:18;45331:50;45398:33;45424:6;45416;45398:33;:::i;46001:540::-;46240:2;46229:9;46222:21;46203:4;46266:45;46307:2;46296:9;46292:18;46284:6;46266:45;:::i;:::-;46359:9;46351:6;46347:22;46342:2;46331:9;46327:18;46320:50;46393:33;46419:6;46411;46393:33;:::i;:::-;46379:47;;46474:9;46466:6;46462:22;46457:2;46446:9;46442:18;46435:50;46502:33;46528:6;46520;46502:33;:::i;46546:549::-;46795:3;46784:9;46777:22;46758:4;46822:46;46863:3;46852:9;46848:19;46840:6;46822:46;:::i;:::-;46916:9;46908:6;46904:22;46899:2;46888:9;46884:18;46877:50;46944:33;46970:6;46962;46944:33;:::i;:::-;47008:2;46993:18;;46986:34;;;;-1:-1:-1;;;;;;;47056:32:132;;;;47051:2;47036:18;;;47029:60;46936:41;46546:549;-1:-1:-1;;46546:549:132:o;47443:764::-;47768:10;47760:6;47756:23;47745:9;47738:42;47719:4;47816:1;47812;47807:3;47803:11;47799:19;47866:2;47858:6;47854:15;47849:2;47838:9;47834:18;47827:43;47906:3;47901:2;47890:9;47886:18;47879:31;47933:46;47974:3;47963:9;47959:19;47951:6;47933:46;:::i;:::-;48015:6;48010:2;47999:9;47995:18;47988:34;48071:2;48063:6;48059:15;48053:3;48042:9;48038:19;48031:44;48124:9;48116:6;48112:22;48106:3;48095:9;48091:19;48084:51;48152:49;48194:6;48186;48178;48152:49;:::i;:::-;48144:57;47443:764;-1:-1:-1;;;;;;;;;;;47443:764:132:o;48491:384::-;-1:-1:-1;;;;;;48676:33:132;;48664:46;;48733:13;;48646:3;;48755:74;48733:13;48818:1;48809:11;;48802:4;48790:17;;48755:74;:::i;:::-;48849:16;;;;48867:1;48845:24;;48491:384;-1:-1:-1;;;48491:384:132:o;48880:287::-;49009:3;49047:6;49041:13;49063:66;49122:6;49117:3;49110:4;49102:6;49098:17;49063:66;:::i;:::-;49145:16;;;;;48880:287;-1:-1:-1;;48880:287:132:o;49172:202::-;49239:6;49292:2;49280:9;49271:7;49267:23;49263:32;49260:52;;;49308:1;49305;49298:12;49260:52;49331:37;49358:9;49331:37;:::i;50258:127::-;50319:10;50314:3;50310:20;50307:1;50300:31;50350:4;50347:1;50340:15;50374:4;50371:1;50364:15;50858:827;51190:4;51236:1;51232;51227:3;51223:11;51219:19;51277:2;51269:6;51265:15;51254:9;51247:34;51329:2;51321:6;51317:15;51312:2;51301:9;51297:18;51290:43;51369:3;51364:2;51353:9;51349:18;51342:31;51396:57;51448:3;51437:9;51433:19;51425:6;51396:57;:::i;:::-;51501:2;51493:6;51489:15;51484:2;51473:9;51469:18;51462:43;51554:2;51546:6;51542:15;51536:3;51525:9;51521:19;51514:44;51607:9;51599:6;51595:22;51589:3;51578:9;51574:19;51567:51;51635:44;51672:6;51664;51635:44;:::i;51827:1385::-;52285:10;52277:6;52273:23;52262:9;52255:42;52236:4;52316:2;52366:4;52358:6;52354:17;52349:2;52338:9;52334:18;52327:45;52408:3;52403:2;52392:9;52388:18;52381:31;52435:57;52487:3;52476:9;52472:19;52464:6;52435:57;:::i;:::-;-1:-1:-1;;;;;52566:15:132;;;52561:2;52546:18;;52539:43;52619:22;;;52613:3;52598:19;;52591:51;52691:13;;52713:22;;;-1:-1:-1;52775:17:132;;;52763:2;52815:16;;;;52751:15;;52691:13;52859:177;52873:6;52870:1;52867:13;52859:177;;;52938:13;;52934:22;;52922:35;;53024:1;53012:14;;;;52977:12;;;;52888:9;52859:177;;;-1:-1:-1;;;;;;;22758:30:132;;53086:3;53071:19;;22746:43;53137:9;53132:3;53128:19;53122:3;53111:9;53107:19;53100:48;53165:41;53202:3;53194:6;53165:41;:::i;:::-;53157:49;51827:1385;-1:-1:-1;;;;;;;;;;;;;51827:1385:132:o;54396:2036::-;54622:4;54651:2;54691;54680:9;54676:18;54721:2;54710:9;54703:21;54744:6;54779;54773:13;54810:6;54802;54795:22;54836:2;54826:12;;54869:2;54858:9;54854:18;54847:25;;54931:2;54921:6;54918:1;54914:14;54903:9;54899:30;54895:39;54969:2;54961:6;54957:15;54990:1;55000:1403;55014:6;55011:1;55008:13;55000:1403;;;-1:-1:-1;;55109:22:132;;;55105:31;;55093:44;;55160:13;;55205:9;;55216:10;55201:26;55186:42;;55267:11;;55261:18;55299:15;;;55292:27;;;55360:19;;-1:-1:-1;;;;;55356:44:132;55339:15;;;55332:69;55442:21;;;55436:28;55512:4;55553:23;;;55487:2;55536:15;;;55529:48;;;;55618:21;;;55612:28;55703:23;;55663:3;55686:15;;;55679:48;;;;55768:21;;;55762:28;55853:23;;;55813:3;55836:15;;;55829:48;;;;55918:21;;;55912:28;55963:4;55987:15;;;55980:27;55912:28;56034:73;56102:3;56090:16;;55912:28;56034:73;:::i;:::-;56148:21;;56142:28;56212:19;;;56208:28;;56202:3;56190:16;;56183:54;56142:28;56020:87;-1:-1:-1;56260:63:132;56020:87;56142:28;56260:63;:::i;:::-;56381:12;;;;56250:73;-1:-1:-1;;;56346:15:132;;;;-1:-1:-1;55036:1:132;55029:9;55000:1403;;56437:1024;56700:2;56752:21;;;56822:13;;56725:18;;;56844:22;;;56671:4;;56700:2;56885;;56903:18;;;;56944:15;;;56671:4;56987:448;57001:6;56998:1;56995:13;56987:448;;;57060:13;;57135:9;;57096:10;57131:18;;;57119:31;;57189:11;;;57183:18;57239:19;;57235:28;;;57221:12;;;57214:50;57308:21;;57302:28;-1:-1:-1;;;;;57298:54:132;57284:12;;;57277:76;57382:4;57373:14;;;;57410:15;;;;57349:1;57016:9;56987:448;;;-1:-1:-1;57452:3:132;;56437:1024;-1:-1:-1;;;;;;;56437:1024:132:o;57466:251::-;57536:6;57589:2;57577:9;57568:7;57564:23;57560:32;57557:52;;;57605:1;57602;57595:12;57557:52;57637:9;57631:16;57656:31;57681:5;57656:31;:::i;57722:274::-;-1:-1:-1;;;;;57860:10:132;;;57872;;;57856:27;57903:20;;;;57794:34;57942:24;;;57932:58;;57970:18;;:::i;:::-;57932:58;;57722:274;;;;:::o;58001:1093::-;58230:2;58282:21;;;58352:13;;58255:18;;;58374:22;;;58201:4;;58230:2;58415;;58433:18;;;;58474:15;;;58201:4;58517:551;58531:6;58528:1;58525:13;58517:551;;;58590:13;;58665:9;;58626:10;58661:18;;;58649:31;;58719:11;;;58713:18;58769:19;;-1:-1:-1;;;;;58765:60:132;58751:12;;;58744:82;58870:21;;;58864:28;-1:-1:-1;;;;;58860:53:132;58846:12;;;58839:75;58958:21;;58952:28;58948:37;58943:2;58934:12;;58927:59;59015:4;59006:14;;;;59043:15;;;;58553:1;58546:9;58517:551;;59099:2045;59333:4;59362:2;59402;59391:9;59387:18;59432:2;59421:9;59414:21;59455:6;59490;59484:13;59521:6;59513;59506:22;59547:2;59537:12;;59580:2;59569:9;59565:18;59558:25;;59642:2;59632:6;59629:1;59625:14;59614:9;59610:30;59606:39;59680:2;59672:6;59668:15;59701:1;59711:1404;59725:6;59722:1;59719:13;59711:1404;;;-1:-1:-1;;59820:22:132;;;59816:31;;59804:44;;59871:13;;59916:9;;59927:10;59912:26;59897:42;;59978:11;;59972:18;60010:15;;;60003:27;;;60071:19;;-1:-1:-1;;;;;60067:45:132;60050:15;;;60043:70;60154:21;;;60148:28;60224:4;60265:23;;;60199:2;60248:15;;;60241:48;;;;60330:21;;;60324:28;60415:23;;60375:3;60398:15;;;60391:48;;;;60480:21;;;60474:28;60565:23;;;60100:3;60548:15;;;60541:48;;;;60630:21;;;60624:28;60675:4;60699:15;;;60692:27;60624:28;60746:73;60814:3;60802:16;;60624:28;60746:73;:::i;:::-;60860:21;;60854:28;60924:19;;;60920:28;;60914:3;60902:16;;60895:54;60854:28;60732:87;-1:-1:-1;60972:63:132;60732:87;60854:28;60972:63;:::i;:::-;61093:12;;;;60962:73;-1:-1:-1;;;61058:15:132;;;;-1:-1:-1;59747:1:132;59740:9;59711:1404;;61149:1355;61384:2;61436:21;;;61506:13;;61409:18;;;61528:22;;;61355:4;;61384:2;61569;;61587:18;;;;61628:15;;;61355:4;61671:807;61685:6;61682:1;61679:13;61671:807;;;61744:13;;61786:9;;61797:10;61782:26;61770:39;;61848:11;;;61842:18;-1:-1:-1;;;;;61935:21:132;;;61921:12;;;61914:43;62001:11;;;61995:18;61991:27;61977:12;;;61970:49;62042:4;62090:11;;;62084:18;62104:6;62080:31;62066:12;;;62059:53;62135:4;62180:11;;;62174:18;-1:-1:-1;;;;;62283:23:132;;;62269:12;;;62262:45;;;;62330:4;62378:11;;;62372:18;62368:27;62354:12;;;62347:49;62425:4;62416:14;;;;62453:15;;;;61707:1;61700:9;61671:807;;62509:1033;62744:2;62796:21;;;62866:13;;62769:18;;;62888:22;;;62715:4;;62744:2;62929;;62947:18;;;;62988:15;;;62715:4;63031:485;63045:6;63042:1;63039:13;63031:485;;;63104:13;;63146:9;;63157:10;63142:26;63130:39;;63213:11;;;63207:18;-1:-1:-1;;;;;63203:43:132;63189:12;;;63182:65;63291:11;;;63285:18;63305:6;63281:31;63267:12;;;63260:53;63336:4;63384:11;;;63378:18;-1:-1:-1;;;;;63374:59:132;63360:12;;;63353:81;63463:4;63454:14;;;;63491:15;;;;63067:1;63060:9;63031:485;;63547:843;63806:2;63858:21;;;63928:13;;63831:18;;;63950:22;;;63777:4;;63806:2;63991;;64009:18;;;;64050:15;;;63777:4;64093:271;64107:6;64104:1;64101:13;64093:271;;;64166:13;;64208:9;;64219:10;64204:26;64192:39;;64271:11;;64265:18;64251:12;;;64244:40;64304:12;;;;64339:15;;;;64129:1;64122:9;64093:271;;66095:715;22876:12;;22890:10;22872:29;22860:42;;22951:4;22940:16;;;22934:23;22918:14;;;22911:47;23011:4;23000:16;;;22994:23;-1:-1:-1;;;;;22990:48:132;22974:14;;;22967:72;66520:1;66516;66511:3;66507:11;66503:19;66495:6;66491:32;66486:2;66475:9;66471:18;66464:60;66561:6;66555:3;66544:9;66540:19;66533:35;66605:3;66599;66588:9;66584:19;66577:32;66393:4;66632:62;66689:3;66678:9;66674:19;66666:6;66658;66632:62;:::i;:::-;66743:9;66735:6;66731:22;66725:3;66714:9;66710:19;66703:51;66771:33;66797:6;66789;66771:33;:::i;:::-;66763:41;66095:715;-1:-1:-1;;;;;;;;;66095:715:132:o;66815:542::-;66916:2;66911:3;66908:11;66905:446;;;66952:1;66976:5;66973:1;66966:16;67020:4;67017:1;67007:18;67090:2;67078:10;67074:19;67071:1;67067:27;67061:4;67057:38;67126:4;67114:10;67111:20;67108:47;;;-1:-1:-1;67149:4:132;67108:47;67204:2;67199:3;67195:12;67192:1;67188:20;67182:4;67178:31;67168:41;;67259:82;67277:2;67270:5;67267:13;67259:82;;;67322:17;;;67303:1;67292:13;67259:82;;;67263:3;;;66815:542;;;:::o;67533:1214::-;-1:-1:-1;;;;;67650:3:132;67647:27;67644:53;;;67677:18;;:::i;:::-;67706:93;67795:3;67755:38;67787:4;67781:11;67755:38;:::i;:::-;67749:4;67706:93;:::i;:::-;67825:1;67850:2;67845:3;67842:11;67867:1;67862:627;;;;68533:1;68550:3;68547:93;;;-1:-1:-1;68606:19:132;;;68593:33;68547:93;-1:-1:-1;;67490:1:132;67486:11;;;67482:24;67478:29;67468:40;67514:1;67510:11;;;67465:57;68653:78;;67835:906;;67862:627;51774:1;51767:14;;;51811:4;51798:18;;-1:-1:-1;;67898:17:132;;;68010:9;68032:229;68046:7;68043:1;68040:14;68032:229;;;68135:19;;;68122:33;68107:49;;68242:4;68227:20;;;;68195:1;68183:14;;;;68062:12;68032:229;;;68036:3;68289;68280:7;68277:16;68274:159;;;68413:1;68409:6;68403:3;68397;68394:1;68390:11;68386:21;68382:34;68378:39;68365:9;68360:3;68356:19;68343:33;68339:79;68331:6;68324:95;68274:159;;;68476:1;68470:3;68467:1;68463:11;68459:19;68453:4;68446:33;67835:906;;67533:1214;;;:::o;68752:331::-;68857:9;68868;68910:8;68898:10;68895:24;68892:44;;;68932:1;68929;68922:12;68892:44;68961:6;68951:8;68948:20;68945:40;;;68981:1;68978;68971:12;68945:40;-1:-1:-1;;69007:23:132;;;69052:25;;;;;-1:-1:-1;68752:331:132:o;69088:323::-;-1:-1:-1;;;;;;69208:19:132;;69284:11;;;;69315:1;69307:10;;69304:101;;;69376:1;69372:11;;;;69369:1;69365:19;69361:28;;;69353:37;69349:46;;;;69088:323;-1:-1:-1;;69088:323:132:o;69823:517::-;69910:6;69918;69926;69979:2;69967:9;69958:7;69954:23;69950:32;69947:52;;;69995:1;69992;69985:12;69947:52;70027:9;70021:16;70046:31;70071:5;70046:31;:::i;:::-;70146:2;70131:18;;70125:25;70096:5;;-1:-1:-1;70159:32:132;70125:25;70159:32;:::i;:::-;70262:2;70247:18;;70241:25;70210:7;;-1:-1:-1;70275:33:132;70241:25;70275:33;:::i;70345:255::-;70465:19;;70504:2;70496:11;;70493:101;;;-1:-1:-1;;70565:2:132;70561:12;;;70558:1;70554:20;70550:33;70539:45;70345:255;;;;:::o;70605:331::-;-1:-1:-1;;;;;;70725:19:132;;70809:11;;;;70840:1;70832:10;;70829:101;;;70901:1;70897:11;;;;70894:1;70890:19;70886:28;;;70878:37;70874:46;;;;70605:331;-1:-1:-1;;70605:331:132:o;70941:492::-;71116:3;71154:6;71148:13;71170:66;71229:6;71224:3;71217:4;71209:6;71205:17;71170:66;:::i;:::-;71299:13;;71258:16;;;;71321:70;71299:13;71258:16;71368:4;71356:17;;71321:70;:::i;:::-;71407:20;;70941:492;-1:-1:-1;;;;70941:492:132:o;71848:517::-;71935:6;71943;71951;72004:2;71992:9;71983:7;71979:23;71975:32;71972:52;;;72020:1;72017;72010:12;71972:52;72052:9;72046:16;72071:30;72095:5;72071:30;:::i;:::-;72170:2;72155:18;;72149:25;72120:5;;-1:-1:-1;72183:33:132;72149:25;72183:33;:::i;73016:369::-;73102:6;73110;73118;73171:2;73159:9;73150:7;73146:23;73142:32;73139:52;;;73187:1;73184;73177:12;73139:52;73219:9;73213:16;73238:29;73261:5;73238:29;:::i;:::-;73331:2;73316:18;;73310:25;73375:2;73360:18;;;73354:25;73286:5;;73310:25;;-1:-1:-1;73354:25:132;73016:369;-1:-1:-1;;;73016:369:132:o;74516:348::-;74746:2;74735:9;74728:21;74709:4;74766:49;74811:2;74800:9;74796:18;74429:2;74417:15;;-1:-1:-1;;;74457:4:132;74448:14;;74441:36;74502:2;74493:12;;74352:159;74766:49;74758:57;;74851:6;74846:2;74835:9;74831:18;74824:34;74516:348;;;;:::o;75033:::-;75263:2;75252:9;75245:21;75226:4;75283:49;75328:2;75317:9;75313:18;74946:2;74934:15;;-1:-1:-1;;;74974:4:132;74965:14;;74958:36;75019:2;75010:12;;74869:159;75386:568;-1:-1:-1;;;;;75651:3:132;75647:28;75638:6;75633:3;75629:16;75625:51;75620:3;75613:64;75737:10;75732:3;75728:20;75719:6;75714:3;75710:16;75706:43;75702:1;75697:3;75693:11;75686:64;75780:6;75775:2;75770:3;75766:12;75759:28;75595:3;75816:6;75810:13;75832:75;75900:6;75895:2;75890:3;75886:12;75879:4;75871:6;75867:17;75832:75;:::i;:::-;75927:16;;;;75945:2;75923:25;;75386:568;-1:-1:-1;;;;;75386:568:132:o;76365:374::-;76595:2;76584:9;76577:21;76558:4;76615:49;76660:2;76649:9;76645:18;74429:2;74417:15;;-1:-1:-1;;;74457:4:132;74448:14;;74441:36;74502:2;74493:12;;74352:159;76615:49;-1:-1:-1;;;;;76700:32:132;;;;76695:2;76680:18;;;;76673:60;;;;-1:-1:-1;76607:57:132;76365:374::o;76744:::-;76974:2;76963:9;76956:21;76937:4;76994:49;77039:2;77028:9;77024:18;74946:2;74934:15;;-1:-1:-1;;;74974:4:132;74965:14;;74958:36;75019:2;75010:12;;74869:159;78646:312;78725:6;78733;78786:2;78774:9;78765:7;78761:23;78757:32;78754:52;;;78802:1;78799;78792:12;78754:52;78834:9;78828:16;78853:31;78878:5;78853:31;:::i;:::-;78948:2;78933:18;;;;78927:25;78903:5;;78927:25;;-1:-1:-1;;;78646:312:132:o;79373:385::-;79452:6;79460;79513:2;79501:9;79492:7;79488:23;79484:32;79481:52;;;79529:1;79526;79519:12;79481:52;79561:9;79555:16;79580:31;79605:5;79580:31;:::i;:::-;79680:2;79665:18;;79659:25;79630:5;;-1:-1:-1;79693:33:132;79659:25;79693:33;:::i;79763:558::-;79860:6;79868;79921:2;79909:9;79900:7;79896:23;79892:32;79889:52;;;79937:1;79934;79927:12;79889:52;79970:9;79964:16;-1:-1:-1;;;;;80040:2:132;80032:6;80029:14;80026:34;;;80056:1;80053;80046:12;80026:34;80079:60;80131:7;80122:6;80111:9;80107:22;80079:60;:::i;:::-;80069:70;;80185:2;80174:9;80170:18;80164:25;80148:41;;80214:2;80204:8;80201:16;80198:36;;;80230:1;80227;80220:12;80198:36;;80253:62;80307:7;80296:8;80285:9;80281:24;80253:62;:::i;:::-;80243:72;;;79763:558;;;;;:::o;80620:520::-;80715:6;80723;80731;80784:2;80772:9;80763:7;80759:23;80755:32;80752:52;;;80800:1;80797;80790:12;80752:52;80832:9;80826:16;80851:29;80874:5;80851:29;:::i;:::-;80948:2;80933:18;;80927:25;80899:5;;-1:-1:-1;;;;;;80964:30:132;;80961:50;;;81007:1;81004;80997:12;80961:50;81030:60;81082:7;81073:6;81062:9;81058:22;81030:60;:::i;:::-;81020:70;;;81130:2;81119:9;81115:18;81109:25;81099:35;;80620:520;;;;;:::o;81145:197::-;-1:-1:-1;;;;;81267:10:132;;;81279;;;81263:27;;81302:11;;;81299:37;;;81316:18;;:::i;82003:437::-;82224:3;82202:16;;;;-1:-1:-1;;;;;;82198:38:132;82186:51;;82332:3;82328:16;;;-1:-1:-1;;;;;;82324:25:132;;;82320:1;82311:11;;82304:46;82384:16;;82380:25;82375:2;82366:12;;82359:47;82431:2;82422:12;;82003:437::o;82445:172::-;82512:10;82542;;;82554;;;82538:27;;82577:11;;;82574:37;;;82591:18;;:::i;83070:318::-;-1:-1:-1;;;;;;83190:19:132;;83261:11;;;;83292:1;83284:10;;83281:101;;;83353:1;83349:11;;;;83346:1;83342:19;83338:28;;;83330:37;83326:46;;;;83070:318;-1:-1:-1;;83070:318:132:o;83393:345::-;-1:-1:-1;;;;;;83514:19:132;;83609:11;;;;83640:2;83632:11;;83629:103;;;83702:2;83698:12;;;;83695:1;83691:20;83687:29;;;83679:38;83675:47;;;;83393:345;-1:-1:-1;;83393:345:132:o;84335:168::-;84402:6;84428:10;;;84440;;;84424:27;;84463:11;;;84460:37;;;84477:18;;:::i;84508:790::-;84757:3;84795:6;84789:13;84811:66;84870:6;84865:3;84858:4;84850:6;84846:17;84811:66;:::i;:::-;-1:-1:-1;;;;;;84938:3:132;84974:16;;;84970:25;;84899:16;;;84956:40;;;-1:-1:-1;;;;;;85053:3:132;85031:16;;;85027:38;85023:1;85012:13;;85005:61;85101:16;;;85097:25;85093:1;85082:13;;85075:48;85148:13;;85170:78;85148:13;85235:1;85224:13;;85217:4;85205:17;;85170:78;:::i;:::-;85268:20;85290:1;85264:28;;84508:790;-1:-1:-1;;;;;;;84508:790:132:o;86394:438::-;86642:2;86631:9;86624:21;86605:4;86668:49;86713:2;86702:9;86698:18;74429:2;74417:15;;-1:-1:-1;;;74457:4:132;74448:14;;74441:36;74502:2;74493:12;;74352:159;86668:49;86765:9;86757:6;86753:22;86748:2;86737:9;86733:18;86726:50;86793:33;86819:6;86811;86793:33;:::i;86837:438::-;87085:2;87074:9;87067:21;87048:4;87111:49;87156:2;87145:9;87141:18;74946:2;74934:15;;-1:-1:-1;;;74974:4:132;74965:14;;74958:36;75019:2;75010:12;;74869:159", - "linkReferences": {} - }, - "methodIdentifiers": { - "DEFAULT_CHANNEL_ID()": "51aa318b", - "EVM_COMPUTE_MAP_BPS()": "0afba868", - "EVM_COMPUTE_REDUCE_FEE_USD()": "82411c77", - "EVM_REQUEST_FEE_USD()": "1766f5a4", - "IS_TEST()": "fa7626d4", - "MAP_REDUCE_COMPUTE_TYPES()": "b76bada5", - "NATIVE_TOKEN_PRICE_USD()": "699cbade", - "TREASURY_GAS_CAP()": "baead19c", - "TREASURY_GAS_FOR_FEE_CAP()": "b1dcf5c8", - "assertGuid(bytes,bytes32)": "997cff1b", - "createEndpoints(uint8,uint8,address[])": "d6d62497", - "decodeLzComposeOption(bytes)": "518e8ab0", - "decodeLzReadOption(bytes)": "9751ca86", - "decodeLzReceiveOption(bytes)": "f93e1d61", - "decodeNativeDropOption(bytes)": "b954fdf6", - "excludeArtifacts()": "b5508aa9", - "excludeContracts()": "e20c9f71", - "excludeSenders()": "1ed7831c", - "executorValueCap()": "2113ce62", - "failed()": "ba414fa6", - "getNextInflightPacket(uint16,bytes32)": "7982cf42", - "hasPendingPackets(uint16,bytes32)": "5ea0fefe", - "lzCompose(bytes,bytes,bytes32,address)": "a29c8984", - "lzCompose(uint32,address,bytes,bytes32,address,bytes)": "3bbd6a94", - "lzReadReceive(bytes,bytes,bytes)": "0a69faa9", - "lzReceive(bytes,bytes)": "ec53eaa0", - "nextExecutorOption(bytes,uint256)": "6e1775e3", - "registerEndpoint(address)": "ae6ce400", - "schedulePacket(bytes,bytes)": "faed6c58", - "setExecutorValueCap(uint128)": "defd9da6", - "setUp()": "0a9254e4", - "setUpEndpoints(uint8,uint8)": "1cc46525", - "setupOApps(bytes,uint8,uint8)": "2a35d250", - "targetArtifactSelectors()": "66d9a9a0", - "targetArtifacts()": "85226c81", - "targetContracts()": "3f7286f4", - "targetInterfaces()": "2ade3880", - "targetSelectors()": "916a17c6", - "targetSenders()": "3e5e3c23", - "test_constructor()": "e99b6b31", - "test_send_oft()": "d1c6eafc", - "test_send_oft_compose_msg()": "7949f59b", - "validatePacket(bytes,bytes)": "60197889", - "verifyPackets(uint32,address)": "090852b6", - "verifyPackets(uint32,bytes32)": "b752b72a", - "verifyPackets(uint32,bytes32,uint256,address,bytes)": "834bd159", - "wireOApps(address[])": "703ca254", - "wireReadOApps(address[],uint32[])": "65449eb0" - }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"Executor_InvalidLzComposeOption\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Executor_InvalidLzReadOption\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Executor_InvalidLzReceiveOption\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Executor_InvalidNativeDropOption\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"optionType\",\"type\":\"uint16\"}],\"name\":\"InvalidOptionType\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"bits\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"SafeCastOverflowedUintDowncast\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"name\":\"log\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"log_address\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"val\",\"type\":\"uint256[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"int256[]\",\"name\":\"val\",\"type\":\"int256[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"val\",\"type\":\"address[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"log_bytes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"log_bytes32\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"name\":\"log_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"val\",\"type\":\"address\"}],\"name\":\"log_named_address\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"val\",\"type\":\"uint256[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256[]\",\"name\":\"val\",\"type\":\"int256[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"val\",\"type\":\"address[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"val\",\"type\":\"bytes\"}],\"name\":\"log_named_bytes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"val\",\"type\":\"bytes32\"}],\"name\":\"log_named_bytes32\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"val\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"log_named_decimal_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"val\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"log_named_decimal_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"val\",\"type\":\"int256\"}],\"name\":\"log_named_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"val\",\"type\":\"string\"}],\"name\":\"log_named_string\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"val\",\"type\":\"uint256\"}],\"name\":\"log_named_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"name\":\"log_string\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"log_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"logs\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DEFAULT_CHANNEL_ID\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"EVM_COMPUTE_MAP_BPS\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"EVM_COMPUTE_REDUCE_FEE_USD\",\"outputs\":[{\"internalType\":\"uint120\",\"name\":\"\",\"type\":\"uint120\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"EVM_REQUEST_FEE_USD\",\"outputs\":[{\"internalType\":\"uint120\",\"name\":\"\",\"type\":\"uint120\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"IS_TEST\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAP_REDUCE_COMPUTE_TYPES\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"NATIVE_TOKEN_PRICE_USD\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"TREASURY_GAS_CAP\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"TREASURY_GAS_FOR_FEE_CAP\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"packetBytes\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"}],\"name\":\"assertGuid\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"_endpointNum\",\"type\":\"uint8\"},{\"internalType\":\"enum TestHelperOz5.LibraryType\",\"name\":\"_libraryType\",\"type\":\"uint8\"},{\"internalType\":\"address[]\",\"name\":\"nativeTokenAddresses\",\"type\":\"address[]\"}],\"name\":\"createEndpoints\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_option\",\"type\":\"bytes\"}],\"name\":\"decodeLzComposeOption\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"index\",\"type\":\"uint16\"},{\"internalType\":\"uint128\",\"name\":\"gas\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_option\",\"type\":\"bytes\"}],\"name\":\"decodeLzReadOption\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"gas\",\"type\":\"uint128\"},{\"internalType\":\"uint32\",\"name\":\"size\",\"type\":\"uint32\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_option\",\"type\":\"bytes\"}],\"name\":\"decodeLzReceiveOption\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"gas\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_option\",\"type\":\"bytes\"}],\"name\":\"decodeNativeDropOption\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"amount\",\"type\":\"uint128\"},{\"internalType\":\"bytes32\",\"name\":\"receiver\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeArtifacts\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"excludedArtifacts_\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeContracts\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"excludedContracts_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeSenders\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"excludedSenders_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"executorValueCap\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"failed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"_dstEid\",\"type\":\"uint16\"},{\"internalType\":\"bytes32\",\"name\":\"_dstAddress\",\"type\":\"bytes32\"}],\"name\":\"getNextInflightPacket\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"packetBytes\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"_dstEid\",\"type\":\"uint16\"},{\"internalType\":\"bytes32\",\"name\":\"_dstAddress\",\"type\":\"bytes32\"}],\"name\":\"hasPendingPackets\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"flag\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_dstEid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_options\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"_guid\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_composerMsg\",\"type\":\"bytes\"}],\"name\":\"lzCompose\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_packetBytes\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_options\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"_guid\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"_composer\",\"type\":\"address\"}],\"name\":\"lzCompose\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_packetBytes\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_options\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_resolvedPayload\",\"type\":\"bytes\"}],\"name\":\"lzReadReceive\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_packetBytes\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_options\",\"type\":\"bytes\"}],\"name\":\"lzReceive\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_options\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_cursor\",\"type\":\"uint256\"}],\"name\":\"nextExecutorOption\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"optionType\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"option\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"cursor\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract EndpointV2Mock\",\"name\":\"endpoint\",\"type\":\"address\"}],\"name\":\"registerEndpoint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_packetBytes\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_options\",\"type\":\"bytes\"}],\"name\":\"schedulePacket\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint128\",\"name\":\"_valueCap\",\"type\":\"uint128\"}],\"name\":\"setExecutorValueCap\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"setUp\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"_endpointNum\",\"type\":\"uint8\"},{\"internalType\":\"enum TestHelperOz5.LibraryType\",\"name\":\"_libraryType\",\"type\":\"uint8\"}],\"name\":\"setUpEndpoints\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_oappCreationCode\",\"type\":\"bytes\"},{\"internalType\":\"uint8\",\"name\":\"_startEid\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"_oappNum\",\"type\":\"uint8\"}],\"name\":\"setupOApps\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"oapps\",\"type\":\"address[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetArtifactSelectors\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct StdInvariant.FuzzSelector[]\",\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetArtifacts\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"targetedArtifacts_\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetContracts\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"targetedContracts_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetInterfaces\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"string[]\",\"name\":\"artifacts\",\"type\":\"string[]\"}],\"internalType\":\"struct StdInvariant.FuzzInterface[]\",\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetSelectors\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct StdInvariant.FuzzSelector[]\",\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetSenders\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"targetedSenders_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"test_constructor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"test_send_oft\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"test_send_oft_compose_msg\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_packetBytes\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_resolvedPayload\",\"type\":\"bytes\"}],\"name\":\"validatePacket\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_dstEid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"_dstAddress\",\"type\":\"address\"}],\"name\":\"verifyPackets\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_dstAddress\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_packetAmount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_composer\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_resolvedPayload\",\"type\":\"bytes\"}],\"name\":\"verifyPackets\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_dstAddress\",\"type\":\"bytes32\"}],\"name\":\"verifyPackets\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"oapps\",\"type\":\"address[]\"}],\"name\":\"wireOApps\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"oapps\",\"type\":\"address[]\"},{\"internalType\":\"uint32[]\",\"name\":\"channels\",\"type\":\"uint32[]\"}],\"name\":\"wireReadOApps\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"errors\":{\"SafeCastOverflowedUintDowncast(uint8,uint256)\":[{\"details\":\"Value doesn't fit in an uint of `bits` size.\"}]},\"kind\":\"dev\",\"methods\":{\"createEndpoints(uint8,uint8,address[])\":{\"params\":{\"_endpointNum\":\"The number of endpoints to create.\",\"_libraryType\":\"The type of message library to use (UltraLightNode or SimpleMessageLib).\"}},\"schedulePacket(bytes,bytes)\":{\"details\":\"Adds the packet to the front of the queue and stores its options for later retrieval.\",\"params\":{\"_options\":\"The options associated with the packet, used during delivery.\",\"_packetBytes\":\"The packet data to be scheduled.\"}},\"setExecutorValueCap(uint128)\":{\"details\":\"set executorValueCap if more than 0.1 ether is necessarythis must be called prior to setUpEndpoints() if the value is to be used\",\"params\":{\"_valueCap\":\"amount executor can pass as msg.value to lzReceive()\"}},\"setUp()\":{\"details\":\"Initializes test environment setup, to be overridden by specific tests.\"},\"setupOApps(bytes,uint8,uint8)\":{\"params\":{\"_oappCreationCode\":\"The bytecode for creating OApp contracts.\",\"_oappNum\":\"The number of OApps to set up.\",\"_startEid\":\"The starting endpoint ID for OApp setup.\"},\"returns\":{\"oapps\":\"An array of addresses for the deployed OApps.\"}},\"verifyPackets(uint32,address)\":{\"details\":\"verify packets to destination chain's OApp address.\",\"params\":{\"_dstAddress\":\"The destination address.\",\"_dstEid\":\"The destination endpoint ID.\"}},\"verifyPackets(uint32,bytes32)\":{\"details\":\"Calls an overloaded version of verifyPackets with default values for packet amount and composer address.\",\"params\":{\"_dstAddress\":\"The destination address in bytes32 format.\",\"_dstEid\":\"The destination chain's endpoint ID.\"}},\"verifyPackets(uint32,bytes32,uint256,address,bytes)\":{\"details\":\"dst UA receive/execute packetswill NOT work calling this directly with composer IF the composed payload is different from the lzReceive msg payload\"},\"wireOApps(address[])\":{\"details\":\"Sets each OApp as a peer to every other OApp in the provided array, except itself.\",\"params\":{\"oapps\":\"An array of addresses representing the deployed OApp instances.\"}},\"wireReadOApps(address[],uint32[])\":{\"details\":\"Sets each OApp to read from the provided channels.\",\"params\":{\"channels\":\"An array of channel IDs to set as read channels.\",\"oapps\":\"An array of addresses representing the deployed OApp instances.\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"createEndpoints(uint8,uint8,address[])\":{\"notice\":\"Sets up endpoints for testing.\"},\"schedulePacket(bytes,bytes)\":{\"notice\":\"Schedules a packet for delivery, storing it in the packets queue.\"},\"setupOApps(bytes,uint8,uint8)\":{\"notice\":\"Sets up mock OApp contracts for testing.\"},\"verifyPackets(uint32,bytes32)\":{\"notice\":\"Verifies and processes packets destined for a specific chain and user address.\"},\"wireOApps(address[])\":{\"notice\":\"Configures the peers between multiple OApp instances.\"},\"wireReadOApps(address[],uint32[])\":{\"notice\":\"Configures the read channels for multiple OApp instances.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"test/evm/foundry/MyOFT.t.sol\":\"MyOFTTest\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/MessageLibBase.sol\":{\"keccak256\":\"0x14899a4398251439938d6ef8a15ea8c6acdddc98a7b0066d7e63676192dea0d1\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://3998d03de7025c2c601a4fdcaf9475d12a1ef661fcf1a685ece84fdde6498cf9\",\"dweb:/ipfs/QmReknRbiGAiPqq9toKyXKo6hUKXrQPJyyS6LnTGjiDKoY\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/ReceiveLibBaseE2.sol\":{\"keccak256\":\"0x2fdbd1b13751a264cd6e7fac518a2685b15c968806c03f1d18b177fc0526e9a9\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://600af48bb67939b5f4a3a00c76863ee290a55325ea8697f7cc4b46321ab26ef2\",\"dweb:/ipfs/QmdRigYaB6TXczjtVkvwpUEBwvvvDuymFoViMCB6xQPYUU\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/SendLibBase.sol\":{\"keccak256\":\"0x400eaa11c7d50b4c25b7625290ff00937b6875ad3986b353c37a4e62b5a834b1\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://1f51eb0785d3630815a9d63de1c1331fe966df4c3f2fb6750b8da7be9e9743a4\",\"dweb:/ipfs/QmaAEf1kjhhff3AUhRiPm6ikpk2YMMrpKc2ccYzNs7waBy\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/SendLibBaseE2.sol\":{\"keccak256\":\"0x90ada11d0a330732c56b989e59c8272b70f956a5d7be2cf209d6d51a51d35a9e\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://0abc7a6d07ec40a3a922256ad05bdd6eca10550d85bfd2e67147473617bb0497\",\"dweb:/ipfs/QmRDphmFhx1scRJXcusg6pUhVQvp941oCJwnHGAPdrNY4T\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IExecutor.sol\":{\"keccak256\":\"0x2fd26e454b060ede7afa15f8bbc67bd43f9181b6405ca411d36c8b538be016af\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cf2142e83214bb392f69ed14266718cfd803f849a7239ee9a1950ddf66553696\",\"dweb:/ipfs/QmSZ2mPMZqWBetMU8VESKtxy7UdSThUVmJmTFMHEyKLTGZ\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IExecutorFeeLib.sol\":{\"keccak256\":\"0x801d12eca6d6b232fb91d949cdb70a4c547c5e27e73555f2f1eb9e757c639bcc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b61bdffe26ff3902edab3efb0b5af3808ec9e28d72db95b77128502b9bc7638d\",\"dweb:/ipfs/Qmcyf3npDDEq28b9XqmXgSGyQegj2cxUZQ3UekSNf34g8M\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroExecutor.sol\":{\"keccak256\":\"0x3647af317ee126b1247a782abb30e59ec5ab21b4945f1d3b4370d1fa3c1bf347\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5b51cd5e7347ee869a06bd57a698f40e4a901ec7fdcb27f0ef485e4a0e1e9be4\",\"dweb:/ipfs/QmP2Nc73veRzLGdUahkjhQAiKR9ZWYiUtSGwoMB1sPXxUp\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroPriceFeed.sol\":{\"keccak256\":\"0xb4df72798a64f5ea44775b526e0c417c3de0ffc661659d7b31d5b28567c6fbcc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://30ca5fd5e3227a7bffc51654ee3bfebdd591a131f86846ac42dea8a40c5cf1d8\",\"dweb:/ipfs/QmXNmQCF8TZAFpUxgPa1rgWt4ktsBV38A8Hax7TiYLgybW\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroReadExecutor.sol\":{\"keccak256\":\"0x360936885f173f816ffb47e555d480928e74eb1ad54a76af0f4595ecba2d5657\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://16b5095e6439b1e416eb70571a1dd8f4f21a0d77b19c9e510ca289d99e5e09ab\",\"dweb:/ipfs/QmZ2mjQDQ35gJseyzmQhik4cBgN2ESADzofFNVFvgS64hv\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroTreasury.sol\":{\"keccak256\":\"0x2aab2a3cf50e20af56d9204b1367d52a47abba0b0c7c21f304d413de1ced6345\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f8b603b5e5e62c621715f8449280af240a4add8721c4ae8f5e8e491507f6e4c5\",\"dweb:/ipfs/QmUQ7Ti7CPmKnRbQFN9TLvVbeZhsi1xUjqZPTJ36dCZ6y8\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IWorker.sol\":{\"keccak256\":\"0xa6b61913767305227576cc6da5067de4208f09a4f58bfbfe32beafdfae9869b1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7fce83bfb831f383606aee7f5ff68a330c8526bb1036f9ba0813d3e4fa8d534\",\"dweb:/ipfs/QmR7zAqJkmCgBj6sguS8t2WthY5k6FwsakgH4UY11uqD4n\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/libs/ExecutorOptions.sol\":{\"keccak256\":\"0x441b723f2f597be2ec2bb361fcf3f11852c23534db1cfa7d2ffff7e61d228e3c\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://636817d20f90f75032e35376256cf5f4d2a047d6541b45f644d82a2e4dc8f1eb\",\"dweb:/ipfs/QmcEFRxCmmm9hKbqi7Powj6ATbw4JXXJW4rxfwMcxWsDnT\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/libs/SafeCall.sol\":{\"keccak256\":\"0xc3b7b7927472f7c1ca9703af310e9050c798afaccf399ad0f131e179b8582c8d\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://e5be13af32ff6b371985d405bc6fe8ac2faf5445bd88fda2dab4b869f66e3f89\",\"dweb:/ipfs/Qmd21k4H2tAHKrpiuHUbH87eNtHLLJzHj9ZCrMh8AKfDHh\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/ReceiveUlnBase.sol\":{\"keccak256\":\"0x36c93de122bbb74ae31e3eacf567c0a3bc649ed3ebb2766c76dfa93aebcace44\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://e83bcaa80e2715e68818dd53e4dc6ad8e665b8249d69a08cf2d2635b9757fb79\",\"dweb:/ipfs/QmSKh6NgaTrTSa48gDzGGqGNAcs5jVEHgZSzZzbuJSEsxo\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/SendUlnBase.sol\":{\"keccak256\":\"0x6d9962ffa476ac2efb78f1415bb2f650a30eedeef2b75fdab0aeafaf3e8da6a5\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://21f32c56b67d2e770444b809c1a85a96627194c605ad317d482dfc5b6ce7e8c2\",\"dweb:/ipfs/QmP5tzoMDzTdduEcSpYHgg6WCHLQGuc1djDMFUBycJPLCU\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/UlnBase.sol\":{\"keccak256\":\"0xfdb1d04f4996c0a9d35abfbfcf10d978da638885eb77d0a9dc35cea5993074e3\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://776d58d88d13b058f236cf18c32b4b9718a021513fc4e198287f4fe18ec5aba4\",\"dweb:/ipfs/QmdNX8jJu2aXJ8Dpbt2ohfhT8RKQLuvh58sW6SAXcUTcV9\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IDVN.sol\":{\"keccak256\":\"0x6becdfab6c1fcaf98f402bee48495895e54825f9d6eef6e292dde0caed628284\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2273341033856737cd46704a1a769768feae696d0e7a912f5be9de8ffdd2180c\",\"dweb:/ipfs/QmY1xBAmMX9jND1HAb7tDyZNPgFReXMqs1vtmHbShKZFQY\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IDVNFeeLib.sol\":{\"keccak256\":\"0xed4a8e77148328132d8f4f2726c4aeec6b490cf03a1d5940bde0ab8d72954de9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7b07802ca32bf10f68e51da872fb358807446dc2242314374d226493a6e9e7dc\",\"dweb:/ipfs/QmfSwWPLgitDy2a9S3mCNBDk6kAcK9n186Dtvj7qg84i12\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/ILayerZeroDVN.sol\":{\"keccak256\":\"0x308e77078242fd5c5746ec29c12e618249134f9e4377c0028ab8f59c07a6014b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2f92cf397a8d26864ac92dfcd1b98e92a32c47f556a62c5e6dc1618734c1caa3\",\"dweb:/ipfs/QmXN3XJXEKq5djV6HeM6jrLycmJPFhMhecsYZ2TaRsQmhg\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/ILayerZeroReadDVN.sol\":{\"keccak256\":\"0x759a3ee7614c2de54b152b0278845f91ac9760d8c22045b2fee89e3e744402b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7a2dbf6bcf5bfab408f18c104b34c390e8bfabb0eeb1a10e3a9c0fb14c8c61d5\",\"dweb:/ipfs/QmWxmRbDBkbhGmNsRyXqQXB1QaWRS4qvh6a8achh8DQPKR\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IReceiveUlnE2.sol\":{\"keccak256\":\"0xcdf7e690e5d5c0a3ec26a0d7b1a7fe49c7d16a3634721c3944f77d13ff5d4a91\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bd32a05dde1b83be1ce64fcfb9495d8b9bf0c5b3a5b521ac6c214e87e32f3cdc\",\"dweb:/ipfs/QmcDKTor8EQf3cbiWYmeFb9qzUM8JGPzGGN9qJnYjP1nN7\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/DVNOptions.sol\":{\"keccak256\":\"0x2beee03cdf59a9bc72e94d08b69cb2e908725f4ceabb48651494938100e21e35\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://d88e121a39e74309f3575417df2318e2d2ee8bc8314e68dbf78544a9c393b141\",\"dweb:/ipfs/QmRojBRAyENK21HnjevAWeoZZxtWkYZubB9Y78vCJPYeU6\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/ReadCmdCodecV1.sol\":{\"keccak256\":\"0x52fbab4a114ce9defb2ffd57c0a978eee438b2c232862f7e20475e0dcadd4eda\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://a4d5d4e186e3f2a916ea02c2d1d0761069ab1a5c0d6f74719bbf3501a7ccb899\",\"dweb:/ipfs/QmS2e12U9Fap2EK1CmSBTccL4PCKkHNdKJn2bXCqqKdbRn\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/SupportedCmdTypes.sol\":{\"keccak256\":\"0x6b2534522c163714e499041ecd06aaeb93857373cef82cf2752f162bb7c69f9a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bf6c3545c3b9505692dbfaa29b40cab5ed9dc9b65e5804b6f47b5a76596120e9\",\"dweb:/ipfs/QmNs98oRaMvpYhLCQ5yU256eYNEopFTrLRjjwm3gL4foQ3\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/UlnOptions.sol\":{\"keccak256\":\"0x5df07fef16b20767f7524c367d90f696c12e8ce0e4fde7aecc9d83fb2b6b0e27\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://0997203f57d736e56ebb3d736550f1c7ff7950c8df0574c7abe95e22f847b850\",\"dweb:/ipfs/QmZBjkH1vaPLyN3Jx9kGfVZKuTdfVWJfJVLSPok8SpjGbT\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/readlib/ReadLibBase.sol\":{\"keccak256\":\"0x7d312ba1e6288cb201b211f58b814eaaa0b5993721475fbc64321b0e7a2c74d3\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://dfc0dce9362eca0f03b51e0e808389c8bf51fda901e6ca58da169f165e4fc3c8\",\"dweb:/ipfs/QmSXAQ3veWf6gPXcgpX1XLZW9SyLQjBjCSdsFiQTttLNac\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/uln301/interfaces/IUltraLightNode301.sol\":{\"keccak256\":\"0x47f8ebeaa7d96a6f337a18c46e3c532da578c7cb0a13fb6e6f014286b991902f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d51f208b931be54e0ae1801c71c0756251d8c26f8d9b7911be1ad57b3d4a5691\",\"dweb:/ipfs/QmWqjst7jnYtSXQ9pakYHutDvENKLyqNg9nPfMxTH8p2Ed\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessageLibManager.sol\":{\"keccak256\":\"0x64330e51de72e8d38cfc0eb5527d36baada46df4bc14233d3a8ecaf98098d69a\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://49aa45e5a26fc62e7af569cf915be8344adc78dceb6871c4c14bc5d115e59241\",\"dweb:/ipfs/QmbTuW7kzPDYForDEPnaNQi6ZrmWqDxGVnHFiugnvTyq9K\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingChannel.sol\":{\"keccak256\":\"0x8ab8cb12c8beba699c1a7f22ffa812ac553f7038326d0c0d0af77253005cfe73\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://7c7cba4ae16d0ca46ee0a365a204f7257ceaa892224604bf7c8e65c44737e46c\",\"dweb:/ipfs/QmbQX5hJDKMwKdoo6QkdcusXQXH54SVCPe5hM1ycJZsg7y\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingComposer.sol\":{\"keccak256\":\"0x20d36578e810e75346daf064813b76a177087214cae77628b1f9d43798cb52d1\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://475b6f3f1ba5d981d0c5f90b9e892d4f9f539f3b12196639b95770b5be4dbf6a\",\"dweb:/ipfs/QmYyGrnR3vDt8Dqa2paQwTG9qrD6anAGFrDZmMra8KGC6s\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingContext.sol\":{\"keccak256\":\"0x9616f3bd0d7293c9723f2ddf86f9f7030fbd99213c9748557eec8f6d13b25420\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://205e713f5af46f52799e51774ac74dbeee4056de6ddba3c4d78a327536426c54\",\"dweb:/ipfs/QmZ2ZqDwxdjpJbh91qwMfRhhQu4AMEsjUcsTEsdRV4NAys\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroComposer.sol\":{\"keccak256\":\"0xfaca7205d4211ee9208a7e59171e2301731f3d2a20c49b4a839821871f5fdd49\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f254bc60ac26687b5320a43a556e30777b0745abf7cd64d5f4720d9b1d1f7fdf\",\"dweb:/ipfs/QmRSJEZVgxaC3L2DdE6s8P5qkYfM3V5JMeseeFJJqGR4xz\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\":{\"keccak256\":\"0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bacc29fd3866af71e59cb0bdc1cf82c882a4a7f4e2652fd413c9f12649762083\",\"dweb:/ipfs/QmZh2toLnrQDWaNYhS5K4NoW7Vxd2GdZx9KA77vKEDLAqs\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol\":{\"keccak256\":\"0x9641abba8d53b08bb517d1b74801dd15ea7b84d77a6719085bd96c8ea94e3ca0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://77415ae0820859e0faf3fabdce683cce9fa03ea026ae0f6fe081ef1c9205f933\",\"dweb:/ipfs/QmXd7APqoCunQ2jYy73AHvi5gsZofLpm3SzM6FPo7zRPfL\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol\":{\"keccak256\":\"0x5cf5f24751b4e3ea1c9c5ded07cedfdfd62566b6daaffcc0144733859c9dba0c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cae7e35007a714f007ea08045ef7c0cfa6c91fd2425b5028b2d49abad357a5f0\",\"dweb:/ipfs/QmcDBs5tsiyB35b8cwzWQWNnpkawb3uuHRaqE77Hxm2tve\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol\":{\"keccak256\":\"0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d8ff6a8a89297fa127f86b54e0db3eba1d6a6eeb4f6398d3c84d569665ac8f1b\",\"dweb:/ipfs/QmVSwhw6xFDrLRAX4RXaCM47yBaBtac4wf36DYEq6KCTvT\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol\":{\"keccak256\":\"0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7e1b245d58221d16d8b5e0f01ef3e289a24a7df1ace3b94239e4d5b954ad5927\",\"dweb:/ipfs/Qmappsgp7PCY9rSSNE9Cdn4BTRX591WfCSEgq2HxhA3z6S\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol\":{\"keccak256\":\"0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b18b23a1643fc6636c4ad9d9023e2e6ca2d3c2a4a046482d4655bff09950598d\",\"dweb:/ipfs/Qma6G5SqiovwrMPfgqTrRngK1HWW373Wkf9c6YP2NhXpPk\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol\":{\"keccak256\":\"0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5173fc9143bea314b159ca5a9adb5626659ef763bc598e27de5fa46efe3291a6\",\"dweb:/ipfs/QmSLFeMFPmVeGxT4sxRPW28ictjAS22M8rLeYRu9TXkA6D\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol\":{\"keccak256\":\"0xf1c07bc61e7b1dce195ed12d50f87980fbf2d63cac1326fd28287f55fe0ba625\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://060f10ff7afc33c1c2f2b4b5ba29231fd3c943146488084d0e4ab99fce991d97\",\"dweb:/ipfs/QmaSsefAqqEqtf8FgFUmDYMwTsAty3X1pqDb6SiFvry6B3\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol\":{\"keccak256\":\"0x2ebbcaaab3554edcd41b581f1a72ac1806afbfb8047d0d47ff098f9af30d6deb\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://2d4b2cf5c3b16dc76c6767f285b57c0af917972327b2be3f7cba5825402f5fc1\",\"dweb:/ipfs/QmQQWiHE2jKEDbjzGutSoZwtApSXYfLqZt5CxEpFj8xyvT\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/CalldataBytesLib.sol\":{\"keccak256\":\"0x5c0db161cef6603c3b256d4220f489419e7478ef775e52a80056654129c61875\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://a33245d0fdd3992bb56b31d1840108d36bb46c8d617b659ef1af8dd7ed86302d\",\"dweb:/ipfs/QmWyBqT7Tdrfn5zz9xYM3V1PBtfAZAVwwCrrKwwfi3wMQK\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Errors.sol\":{\"keccak256\":\"0x35bcd6ca99c4c8d9f7d8413d1b92fb4a4d4a420ce3bf64b0fb01e68e6bcf2fa7\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://0ac14f98563f9c610c936c93e71eff657efaba1e1d892be6a215aa5cb1f63a24\",\"dweb:/ipfs/QmVZZ8owwfDGLQTAzQJJqmYY4KsrChDagh5GBK7rChT5wb\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/GUID.sol\":{\"keccak256\":\"0x8a44524af7deb96593f6b5606e9973654a113e1687809f2e45d4a91ba89862d5\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://32dd0b5d1946e0cd5c7b728086aafac50a62c061115afb8b41254589c8a6732b\",\"dweb:/ipfs/QmR9QqtiAUPRLaRVv5wnth3NGPhdWB8rJmWYfz3o5Z1mWj\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Transfer.sol\":{\"keccak256\":\"0x621d6dd5b8b7e827351459fff4ac87c16ba4656757592cf67de8b199aea4cf9a\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://345aa8c007ed8b96a74260d289545713f1d7180df270d67687e3a540a61fa5c0\",\"dweb:/ipfs/QmNWCvpqSuar6UGLDVshUc7shUv3pt1J5FTf9VyZZ13wXL\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/BlockedMessageLib.sol\":{\"keccak256\":\"0xb2b55968b26294139742adee6c155897c8334f4c6bf72f1940456cc84e6fbab9\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://e758a1fdcea4039b19f1252e4e2958f4a0e05517eb3e151784431533446c225f\",\"dweb:/ipfs/QmRBG345abgyUeTnSpuxdK1WbK5pvwhSmvBEgW1mnoYqTq\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/BitMaps.sol\":{\"keccak256\":\"0xaad3c72ef43480d2253fd48b394e8fb7286d009991d2bc4e61be58ce48ac5ee9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b8c02b14f954416ba2148b389c87da8378ac8dd16ba3d458cbbfba8b0fd8639f\",\"dweb:/ipfs/Qmd2EEQhYL2VmgJi1V4uiHM2WcYxF9iBtxSgcFkbS21rQD\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/ExecutorOptions.sol\":{\"keccak256\":\"0x621c6090fc432f94a99f677a95d72b75f56db89ddc5fc870669777a313587c28\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://69086166f16d29e30c5eb9ca2f97afb27569afe619807d79736833a809a512d2\",\"dweb:/ipfs/QmcZqXjFuVdTrfbteKBF3GuEpjVFZ2YNZTa3J87dyLsqav\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol\":{\"keccak256\":\"0xc84cf1bf785977fe1fbe7566eef902c2db68d0e163813ebe6c34921754802680\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://de686666fc16fa432d4208d85cec87dc952faf3e481b683b9adf4b4610db4b09\",\"dweb:/ipfs/QmdmQeopzmxqRzi9DNB4EJDrYUXFfD7fUhnGhSni4QejUW\"]},\"node_modules/@layerzerolabs/lz-evm-v1-0.7/contracts/interfaces/ILayerZeroUltraLightNodeV2.sol\":{\"keccak256\":\"0xf1f36bbbc40d03b96affa151affb47da75a1b69dc79f4b311841a072d12fdd22\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://9f4f188c2998ecbda28a389ad8038da15c2260b1df6a8d135b3d96422e292fda\",\"dweb:/ipfs/QmeThR83tcaM4CmxQ2AamTafsgjcbGMfZtYcDHqw2CcwKa\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OApp.sol\":{\"keccak256\":\"0xac362c4c291fad2f1511a968424b2e78a5ad502d1c867bd31da04be742aca8c5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e1f8cf9f20a2b683a53c3883972aa0676af97a24c678f461fae08e1fb056df28\",\"dweb:/ipfs/QmPpKNqda3rgxDwnq3XiRTtT3NfWeqrCJT6LwmhYd2AoT2\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppCore.sol\":{\"keccak256\":\"0x13a9c2d1d2c1f086b8624f2e84c4a4702212daae36f701d92bb915b535cbe4cc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://606515dd9193551bd2c94ac8c304f3776fafcc70e544ebf441f334658b2fd5f0\",\"dweb:/ipfs/QmZ88ey7DdZqV5taAoebabvszX5kdPMSrQCAmTteVdDtcH\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppReceiver.sol\":{\"keccak256\":\"0x0174e9f1ec4cefe4b5adc26c392269c699b9ff75965364e5b7264426a462c70b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cd12bb4fe5802c53911b9a0081a2ea10639b1f99925d1e5c1b1421d1bdc17075\",\"dweb:/ipfs/QmZonarwbKiEwQ8qoASKur2bbMjusdy9pqK9RCR4P1YPtc\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppSender.sol\":{\"keccak256\":\"0x518cf4adca601923ed4baa6619846a253ea32b8d8775f8bc1faa3dfac7f67c20\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d42b471418efadcc3577ef3fa9f8f504e8bed7db90c3b0c862038d8b29529eb2\",\"dweb:/ipfs/QmZETDQiJN4U92fmLKo8T9ZbdDf7BNBUUvo9H7M7GqAyFU\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppComposer.sol\":{\"keccak256\":\"0xe5014c411acb2b59dd74ae74a1bab02cf32d94a41a548a5ab553d64aeeb55dae\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://29dfb7bc121002fc7e7931c34eb17af0ae0f0127dcc3199511c83a58a917160d\",\"dweb:/ipfs/QmPdq1wcRRBdUP169LHCLoLuPRunN9eR71TQN42FjGpowx\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppCore.sol\":{\"keccak256\":\"0x40e49f2de74506e1da5dcaed53a39853f691647f4ceb0fccc8f49a68d3f47c58\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4a1deb2a6a3eb1fb83936c9578469142bff470295f403d7d07d955a76be3adbd\",\"dweb:/ipfs/QmS9bjSfBaE4YhQ1PCQ1TknbEPbNfRXzBK9E7SaPGyiZEv\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppMsgInspector.sol\":{\"keccak256\":\"0x339654e699043c400cad92de209aa23855ce10211c31cf4114042cc5224d3b7c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5222afde59bf086f67b39e0288ad36343f4f5ed683d250533f256a5db956f37e\",\"dweb:/ipfs/QmbEG9EMYsK3Y6Cz7QbNtkW4kHGzMuhp2y2seSoL8v1A5b\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppOptionsType3.sol\":{\"keccak256\":\"0x9fc08a51e9d7c9c710c4eb26f84fe77228305ad7da63fa486ff24ebf2f3bc461\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2e2eea8a93bb9fc3f629767118b362e9b4bda2443ff95eae21c6a894f3e334cc\",\"dweb:/ipfs/QmPRRNjAB4U19ke4gr3U7ZJGtdcVBxdXVBZ2BmB1riFkP7\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppReceiver.sol\":{\"keccak256\":\"0xd26135185e19b3732746d4a9e2923e896f28dec8664bab161faea2ee26fcdc3d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c236dfe386b508be33c3a1a74ae1d4fd64b8c77ae207767e9dbed0f2429518a2\",\"dweb:/ipfs/QmXVbZJjfryTRti98uN3BMh5qh4K7NuEs1RSCoBjRoYd4q\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/libs/OAppOptionsType3.sol\":{\"keccak256\":\"0x5275636cd47e660a2fdf6c7fe9d41ff3cc866b785cc8a9d88c1b8ca983509f01\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a59dd6e3cfcc332f45a13d44585eb228588c4b9d470cbb19852df5753a4571af\",\"dweb:/ipfs/QmQJF1QU3MKhvmw42eq61u9z3bzKJJKMsEdQVYyPyYgTVS\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/libs/OptionsBuilder.sol\":{\"keccak256\":\"0xd40d91e8173cdb5bb821b4594f806b99344d5fd605bc6f2cf0fb21d5ab2500e3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1278c26c077e3b1ee6a5f25385a3c00eaecc0efd7b622facac5569d1e47ac42e\",\"dweb:/ipfs/QmQZyrJV7UoUfdY1KYNJ2ru27Khtg4Z8v8XE9KNHFtsvA4\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/precrime/OAppPreCrimeSimulator.sol\":{\"keccak256\":\"0x205a0abfd8b3c9af2740769f251381b84999b8e9347f3cd50de3ef8290a17750\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d9778d7d5da941af2029410b6ac212f915ea1785573ae2865b0ed8f779fcca82\",\"dweb:/ipfs/QmNkVEkfecvgubgnMuaT5fEfSExd95vz8DQHhpZtMrVRjH\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IOAppPreCrimeSimulator.sol\":{\"keccak256\":\"0x5d24db150949ea8e6437178e65a942e8c8b7f332e5daf32750f56b23b35b5bb2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1b1dcea0267234654126f926a1b405743606d7b5e49185b621afb7bd94d18b9a\",\"dweb:/ipfs/QmZ9BXQmbWJcrhHKuBs4yhNtbCV5WUpUY3AXSX7rkWwX6y\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IPreCrime.sol\":{\"keccak256\":\"0xc8d869f27ef8ceb2e13fdf6a70682fd4dee3f90c4924eb8e125bc1e66cb6af84\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://66bf49d59c14832ea0ddddcd12d512d4f9bd0fd254a1368442587bf3e77fe73e\",\"dweb:/ipfs/QmYUAvsyuUPiSYjbL4zVo6ZtiRSLCUPDvCesqgdZWbSGDg\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/precrime/libs/Packet.sol\":{\"keccak256\":\"0xcb2fb1c5b2eb3731de78b479b9c2ab3bba326fe0b0b3a008590f18e881e457a6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f70724c61d226743c2bd8ba6c09758805e4339780978949ce5b333c106be4edc\",\"dweb:/ipfs/QmX5rV9K1N7RgTz9xtf8CDG8SrYiitGAzFh9ec2tbnEec4\"]},\"node_modules/@layerzerolabs/oft-evm/contracts/OFT.sol\":{\"keccak256\":\"0xdc3582e4a20e02a79050c17058a1f1f42a4335d1a70be06c0a52a3fb05d4c89a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://83c4bd42e68528246860a952a92a79e51e3a789dac79a0b62576ab2f609de9c7\",\"dweb:/ipfs/QmVj1x655j1cFTnPT8uBaM71TCSrhFVwPdoFkAkWhhadns\"]},\"node_modules/@layerzerolabs/oft-evm/contracts/OFTCore.sol\":{\"keccak256\":\"0x9ce49b83455df600b52538e42028c422a322643f7ffb4f2814c72c3b970ea7be\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2ebbf79612c3f6cd4e2754ba55519df6b89504ab5514e3517cbd286d87143997\",\"dweb:/ipfs/QmQZpSPhNhF4MESb2if2DbcjC75xfuoEzDGXmeJKYZtHZ5\"]},\"node_modules/@layerzerolabs/oft-evm/contracts/interfaces/IOFT.sol\":{\"keccak256\":\"0x7ba6bb62fba7ee83451cfb0e727ddeef0e96b4388bd4e9ff0fc6ce103e1101c8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cfbd447f2e8a730bd46a14c3c3e6a0b2bf7446145579603a9793ba5ac1dd38b4\",\"dweb:/ipfs/QmZ4nx4iGrFmBHvYFgki5TXFdCHz4Co38hgdgwpRaM7NLs\"]},\"node_modules/@layerzerolabs/oft-evm/contracts/libs/OFTComposeMsgCodec.sol\":{\"keccak256\":\"0xaae73d6eb8b9561c43f1802f3c416c00ccd35f172b711f9781ccdf1b25a40db5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7beda2d895ae9e15269dd261a492ce0a29b498e5bebf088ed6f2ae6a5185719e\",\"dweb:/ipfs/QmScog2tW1YVyEPLVcUVqGGc85ub46sA28nUKNzFEZcFdK\"]},\"node_modules/@layerzerolabs/oft-evm/contracts/libs/OFTMsgCodec.sol\":{\"keccak256\":\"0x5358948017669c03e157f871d8c38e988f9004dbd0801ad3119d2487f0d40b0b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c7d0f1bf32a80af9b99cd93fefa373dac5c27463351cc35f62b9c2439d5b9258\",\"dweb:/ipfs/Qmb81qoxzMwV3PkPANRvnXf4fJTsZ5sjJ8r2df9V2vhh6q\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/OptionsHelper.sol\":{\"keccak256\":\"0x729ce2290d16a45a16ad936263803db6a6bebcfba5c063ebe0f0fd284ba828c0\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://7494875394fc968684761b22bb5fe05789f8d84ba07b2e0ab579ce0afe7aa973\",\"dweb:/ipfs/QmZNrexRXL3ef3UnES5e8JcdyMJ5HVftwGKQjGC5CwNg9Q\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/TestHelperOz5.sol\":{\"keccak256\":\"0xe60b21a345bb1c2e9ee2fb7301398d342da0acc3a730b442106a2ad9478f7a63\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://ee7e0a47ae666a16e33a51f946da4fe549e8f4c6ea1f1978850515172c44656f\",\"dweb:/ipfs/QmR2AZ9pYiwMCV4wPPVaGGPRJEjuBoFjJEesHtbAYhNoFq\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/DVNFeeLibMock.sol\":{\"keccak256\":\"0x4c2e212f73a1c2a2989af947eef715ebacb11a80d55e5fd18a89a905790971b1\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://30eb29a81414780828903f5320367e89020af5a4055b768e2be08d43605b1688\",\"dweb:/ipfs/QmeC5bVtmaY6tn6Z2XpVFXAkxVWQCQUzKbP2V9nPdv3vCr\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/DVNMock.sol\":{\"keccak256\":\"0xdafd7da964b6ac8637d543c30370739bb805f7e10b42043444689240b5c27b3f\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://154067632b4799f49c0b3a8c5304499f60b2c232ebd17c21912efdb72421bdab\",\"dweb:/ipfs/QmUEr6VsNt2odnrL3xFrLKwZTVLkLXi8BDzpPWeiCxC63T\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/EndpointV2AltMock.sol\":{\"keccak256\":\"0x026b2f530b336ee237f37dde6f617acefbbf74d933d2a80da4216882f78be1a9\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://097a9fdd5a321e6e8455a1db00f2abda6e810c31ce47d1bced9e574be262a28b\",\"dweb:/ipfs/Qme17zGk93k5BghCWFXqeqppVahH4dHuw7U76K4EcJxsY1\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/EndpointV2Mock.sol\":{\"keccak256\":\"0xe9096c53611537a121589b56b882fc4dd797d5cac60def708f794a15e3ca98ff\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://4092d5dd582b48a5f703e4361fc5fb66050b5fe3253891175275dc832bc8e045\",\"dweb:/ipfs/QmXSTJJNx4rn2ByCaE6vxiHnkm366ZU7dScYH1JsUbVZ1V\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ExecutorFeeLibMock.sol\":{\"keccak256\":\"0x4a47aaf41049710d5f05fcc66885cacc0dabc1864778b56ac75a59b61eef5a01\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://c9b8c26b38cb138c3225efbab8b1d2e0f43343798658a0f2ed9669c16e5a97ff\",\"dweb:/ipfs/QmV21G7Qwoi9gXYT8bKXDwnQDvjdZCAo2M9MqTKq4nQU9U\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ExecutorMock.sol\":{\"keccak256\":\"0xbcdc4500270cd5496f10760ffe9e0444d23e454dd0ae2555e0661acf22fce96f\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://b816999bcfef5586b5e80bba21584b821fd7f7b32c276492adee530ffa83bb73\",\"dweb:/ipfs/QmXLV8ieYdrTBERajBCVuMzknFyPHJjnw7MGkzULAdjdt8\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/MultiSigMock.sol\":{\"keccak256\":\"0xc7c90e073e52af1da6c07e3d3f7477b064a89e78935c16e9872457df503c6830\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://cef1ae2d517e152616aea7f8f5c15fa1fbabbec8896a9c30a9eed35fb56b4f2f\",\"dweb:/ipfs/QmeitPMQht2WfbR9ZLzwKWgThamdsJkobeaWo6ojTCoQG5\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/PriceFeedMock.sol\":{\"keccak256\":\"0xd8f419b25c648287b5b7f0923b069b2449c51e807c9153df39445f2f83e55f44\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://bb300a5bb62655073c7aa9cd2221e60e59ce904a0d73f7f5e06af7c9df3445ec\",\"dweb:/ipfs/QmcYb2qFevymfkWhTqGaNH5HwK9MMUixzAKJJAdNQHSCbw\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ReadLib1002Mock.sol\":{\"keccak256\":\"0x1403b7a91b185fd8211f00fa380a0b8918e92e663c403a1dafa30f1667091fdc\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://7494444260a981ae9a9e11cd8981fad35a6b45a9c09cf72c05aad88ee191e7f0\",\"dweb:/ipfs/QmaTyujm37PsCobQ36ootD5xVgKyBYqeUTdTJij9x3oaN6\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ReceiveUln302Mock.sol\":{\"keccak256\":\"0x8e60b01e9bc801167b374dc119b41832d546afd43c143a0cd15ab1941198e121\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://bb1512762417dda9cd81fd9b41f590fd05888358fda1c2ab7e79e0cfabf61ec4\",\"dweb:/ipfs/QmPAgBwdjLz29vE5L1Jth1Wvx6TTM1ig97amVtAyDFF61Q\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/SendUln302Mock.sol\":{\"keccak256\":\"0x0c5cb54ec6b18e77aa653f7d774ac9d010684dafc96794d1d02f12b6885cc348\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://24c5a8ba8d92c16ec3047229167528f57b38cbd64882140014126ca51ab14574\",\"dweb:/ipfs/QmXQsMDtZ3qNmjnr2LYgctBpPKxffuC6EeWHvFUtLBS5st\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/SimpleMessageLibMock.sol\":{\"keccak256\":\"0xe6c93840c612592686732dd516550816eb77d6cde92514220eacb72443dcb9b9\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://a6a00fb60b7ac66e746f0471c2262fc98febafeb8acad8785d38ce1ddc4cc991\",\"dweb:/ipfs/QmboboJskbXBbsyAGGRbW4JQCPJo9WiLFy7nwQxGVS9UhZ\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/WorkerMock.sol\":{\"keccak256\":\"0x6c5bc31c117033dd35fa7ab3b13b1647a4b449c5f5b4cbff41bce8a63529ab97\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://01aa1d3f3b8e2fd4b544312d96916b16b97e01ab740e2bae1137723b2f1a31b1\",\"dweb:/ipfs/QmVMemJ4MSgi6y9NxDdSeB6QbJRtCWojJNxzs3CRLT56EA\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/test.sol\":{\"keccak256\":\"0x8758531bbac3972efcf1fa46383dbe1d276406fe527bc7abb2f236486278e83b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://1f64264d61506847acf8761e84aff690cebe830958eac00bac7924d8be569240\",\"dweb:/ipfs/QmSekDJvJ82MZAmr63n7YvfLzQ7gS4NLSHPmHL3GN3rw8k\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Base.sol\":{\"keccak256\":\"0x4ff1a785311017d1eedb1b4737956fa383067ad34eb439abfec1d989754dde1c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f553622969b9fdb930246704a4c10dfaee6b1a4468c142fa7eb9dc292a438224\",\"dweb:/ipfs/QmcxqHnqdQsMVtgsfH9VNLmZ3g7GhgNagfq7yvNCDcCHFK\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdAssertions.sol\":{\"keccak256\":\"0x1a0dee4d8b2c81e9318e87dd85ef009467ebf7dba6575530d1fce94d34dbae60\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ddd790c86ddde1013d1f7a552a80168eacf2e9244077f96799180644ad523a5b\",\"dweb:/ipfs/QmYinBFt9uEVFXP9ytT9CDoNpzWieQVgLWRFRNiypMzJaL\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdChains.sol\":{\"keccak256\":\"0x598b85609125830885b8fb54a18f447d04f8dd799aca3de81baef35eb6b783c0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c9c128aae4f5668d8c8f71e9e6d9379d8451b8713d139cb66a02d23bc1c75f69\",\"dweb:/ipfs/QmVRihXHWi2yg9CcAhzKf63Y7m6gWz4P1giGMhXUHT3DFu\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdCheats.sol\":{\"keccak256\":\"0xb72f3519e0bf7d31df5d68557525f4fc55d861c3fb3b0f7793144ef7c94cbeb7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f3456d0f78e6f61203fa7871ba2df0d35925f10db3baee14be623ce2a35b84e2\",\"dweb:/ipfs/QmWE6QQSBvJifHMraisBTrf1x4WCwrDoTPLX8UKajTiApc\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdError.sol\":{\"keccak256\":\"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6\",\"dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdInvariant.sol\":{\"keccak256\":\"0x67299bfacd77fddfa2a67b8e2b901e0e333618a4975fb94850b07475e51f6de6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1b61121d310f4053ce344b345b4a9ccf43b059daf9097ec2647f594beaca896d\",\"dweb:/ipfs/QmZUCoTtXBM9zfAZVbj2dFPPnKaV1CSZzXE7zictyg3Gfz\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdJson.sol\":{\"keccak256\":\"0x8f914dbd016bd0e318fe2b8bd556fbc8256c7cddc24e3e4fcb9f3c1c1935592d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://19e704df493dde38323303b07d18cadfeb4dcadf1ddc2301add4aea9474fbb5e\",\"dweb:/ipfs/QmZasuGiLK8LHwWtvpqEBxUR6QFY6GdzLMTJ9q7CMf8PNZ\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdMath.sol\":{\"keccak256\":\"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92\",\"dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdStorage.sol\":{\"keccak256\":\"0x4298f3f4cedaedb07029820b1daad2c03af45379559392201f7bf3ec71105811\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6e062f36d8d1ae3c383ef8975757926eaa9c4de3a92b5f1fe2d12748bcd8db32\",\"dweb:/ipfs/QmcWkv3ia5Ew4DZNcudMNSTNXZ3W2QiXTZunRd44e9BT8z\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdStyle.sol\":{\"keccak256\":\"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8\",\"dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdUtils.sol\":{\"keccak256\":\"0x502b18a4becda6ecd91fa8b419d8034946bfa80e6cc7f6497f51f8565bfadae0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bf499ee483a1dfd02023d4ce78ed4029a49794ccd5b849aaab912faea0d2ba61\",\"dweb:/ipfs/QmP6hwNZW7sYbQK9fBzuZWxfLm6Swx2nKzvZ54qWNqQkzX\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Test.sol\":{\"keccak256\":\"0x39b1729d5868c8e94ab8af16751eb500a17fe3870dc627d2b7ddcd5df18d7ad0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1568c82aff125cc4b0fc168be9d67ac313f469a3c7405c5493caecaaaecfb765\",\"dweb:/ipfs/QmXByuZReJsdu1jDcxj1FcmpcUnzoBcqybn9kWgDAECWri\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Vm.sol\":{\"keccak256\":\"0x87ba9f3edc254e529db9e3129c954391adcc7fc8574203767979d8d2f1e724b9\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://4d16c08d80d9f2869deb6350642cf5af624d21fce6b3b023abbcdedc62e195fe\",\"dweb:/ipfs/QmURpnnFECPKt3i7P7jQRZpr4ZBXjRGcZ9KzcbKzsgYR2W\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/console.sol\":{\"keccak256\":\"0x91d5413c2434ca58fd278b6e1e79fd98d10c83931cc2596a6038eee4daeb34ba\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://91ccea707361e48b9b7a161fe81f496b9932bc471e9c4e4e1e9c283f2453cc70\",\"dweb:/ipfs/QmcB66sZhQ6Kz7MUHcLE78YXRUZxoZnnxZjN6yATsbB2ec\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/console2.sol\":{\"keccak256\":\"0x954646445d1014c3cd85c7918f5e7adeeca5ee44b68c00bafa237e597a4e35ea\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://516fa3be52da4763147175bfba4be0aa011fadbb0c1afb01f97265bd4cee7973\",\"dweb:/ipfs/QmdixAyMJefx7qePChgdxcBH5MxhmN7vsqPuPLx3CgrVmF\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/interfaces/IMulticall3.sol\":{\"keccak256\":\"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0\",\"dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/mocks/MockERC20.sol\":{\"keccak256\":\"0xd8703f49411737ecf8d411f8fa66b2bf0ef972ba28b7a4adf1748c63df1bf682\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7c10a6b8112f6fe3cdccb6240ecd382765216b1a82e9a86a0fec8f5e09eadd1\",\"dweb:/ipfs/QmdRvPCU4RkjMHsTu3Ric1ZEF1AWDNLp78unFC5aWP17xq\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/mocks/MockERC721.sol\":{\"keccak256\":\"0xa24468244abb66e663fb7eee6463cb518eb9a7c14e1071548ff564cca825bbca\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://145585a2194aa6e2d30edfe709ef2814e20b1b4540469aa6a8f50c841fcb9070\",\"dweb:/ipfs/QmZrwbvtpbtTxqbW5phUrwb3F1tBiPSQc6jZJAXBfsBsAh\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/safeconsole.sol\":{\"keccak256\":\"0xbaf41fdc6c54297e7cd8250e48b0f20eaac918e342a1028cef3f9a52ac086381\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a500ad81dea226f9910e6b50f99a9ff930105e393a692cbfb2185e4cdb4424ae\",\"dweb:/ipfs/QmVbUQpXNMmMWRiy4FvBNczzq46BMGfUoBikvSHNiCxVTq\"]},\"node_modules/@openzeppelin/contracts/access/AccessControl.sol\":{\"keccak256\":\"0xa0e92d42942f4f57c5be50568dac11e9d00c93efcb458026e18d2d9b9b2e7308\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://46326c0bb1e296b67185e81c918e0b40501b8b6386165855df0a3f3c634b6a80\",\"dweb:/ipfs/QmTwyrDYtsxsk6pymJTK94PnEpzsmkpUxFuzEiakDopy4Z\"]},\"node_modules/@openzeppelin/contracts/access/IAccessControl.sol\":{\"keccak256\":\"0xc1c2a7f1563b77050dc6d507db9f4ada5d042c1f6a9ddbffdc49c77cdc0a1606\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fd54abb96a6156d9a761f6fdad1d3004bc48d2d4fce47f40a3f91a7ae83fc3a1\",\"dweb:/ipfs/QmUrFSGkTDJ7WaZ6qPVVe3Gn5uN2viPb7x7QQ35UX4DofX\"]},\"node_modules/@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol\":{\"keccak256\":\"0x9b6b3e7803bc5f2f8cd7ad57db8ac1def61a9930a5a3107df4882e028a9605d7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://da62d6be1f5c6edf577f0cb45666a8aa9c2086a4bac87d95d65f02e2f4c36a4b\",\"dweb:/ipfs/QmNkpvBpoCMvX8JwAFNSc5XxJ2q5BXJpL5L1txb4QkqVFF\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC165.sol\":{\"keccak256\":\"0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://11fea9f8bc98949ac6709f0c1699db7430d2948137aa94d5a9e95a91f61a710a\",\"dweb:/ipfs/QmQdfRXxQjwP6yn3DVo1GHPpriKNcFghSPi94Z1oKEFUNS\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC20.sol\":{\"keccak256\":\"0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a2608291cb038b388d80b79a06b6118a42f7894ff67b7da10ec0dbbf5b2973ba\",\"dweb:/ipfs/QmWohqcBLbcxmA4eGPhZDXe5RYMMEEpFq22nfkaUMvTfw1\"]},\"node_modules/@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x880da465c203cec76b10d72dbd87c80f387df4102274f23eea1f9c9b0918792b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://399594cd8bb0143bc9e55e0f1d071d0d8c850a394fb7a319d50edd55d9ed822b\",\"dweb:/ipfs/QmbPZzgtT6LEm9CMqWfagQFwETbV1ztpECBB1DtQHrKiRz\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0xbf61ab2ae1d575a17ea58fbb99ca232baddcc4e0eeea180e84cbc74b0c348b31\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4e0968705bad99747a8e5288aa008678c2be2f471f919dce3925a3cc4f1dee09\",\"dweb:/ipfs/QmbAFnCQfo4tw6ssfQSjhA5LzwHWNNryXN8bX7ty8jiqqn\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db\",\"dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x70f2f713b13b7ce4610bcd0ac9fec0f3cc43693b043abcb8dc40a42a726eb330\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c13d13304ac79a83ab1c30168967d19e2203342ebbd6a9bbce4db7550522dcbf\",\"dweb:/ipfs/QmeN5jKMN2vw5bhacr6tkg78afbTTZUeaacNHqjWt4Ew1r\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0xca2ae13e0610f6a99238dd00b97bd786bc92732dae6d6b9d61f573ec51018310\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://75f8c71ce0c91c40dd5f249ace0b7d8270f8f1767231bcf71490f7157d6ba862\",\"dweb:/ipfs/QmYXgxeDyFHvz3JsXxLEYN6GNUR44ThHeFj5XkpkgMoG4w\"]},\"node_modules/@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0x9d8da059267bac779a2dbbb9a26c2acf00ca83085e105d62d5d4ef96054a47f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c78e2aa4313323cecd1ef12a8d6265b96beee1a199923abf55d9a2a9e291ad23\",\"dweb:/ipfs/QmUTs2KStXucZezzFo3EYeqYu47utu56qrF7jj1Gue65vb\"]},\"node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"node_modules/@openzeppelin/contracts/utils/Errors.sol\":{\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf\",\"dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB\"]},\"node_modules/@openzeppelin/contracts/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]},\"node_modules/@openzeppelin/contracts/utils/Pausable.sol\":{\"keccak256\":\"0xb2e5f50762c27fb4b123e3619c3c02bdcba5e515309382e5bfb6f7d6486510bd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1a4b83328c98d518a2699c2cbe9e9b055e78aa57fa8639f1b88deb8b3750b5dc\",\"dweb:/ipfs/QmXdcYj5v7zQxXFPULShHkR5p4Wa2zYuupbHnFdV3cHYtc\"]},\"node_modules/@openzeppelin/contracts/utils/ReentrancyGuard.sol\":{\"keccak256\":\"0x11a5a79827df29e915a12740caf62fe21ebe27c08c9ae3e09abe9ee3ba3866d3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3cf0c69ab827e3251db9ee6a50647d62c90ba580a4d7bbff21f2bea39e7b2f4a\",\"dweb:/ipfs/QmZiKwtKU1SBX4RGfQtY7PZfiapbbu6SZ9vizGQD9UHjRA\"]},\"node_modules/@openzeppelin/contracts/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0x69f54c02b7d81d505910ec198c11ed4c6a728418a868b906b4a0cf29946fda84\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8e25e4bdb7ae1f21d23bfee996e22736fc0ab44cfabedac82a757b1edc5623b9\",\"dweb:/ipfs/QmQdWQvB6JCP9ZMbzi8EvQ1PTETqkcTWrbcVurS7DKpa5n\"]},\"node_modules/@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0xddce8e17e3d3f9ed818b4f4c4478a8262aab8b11ed322f1bf5ed705bb4bd97fa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8084aa71a4cc7d2980972412a88fe4f114869faea3fefa5436431644eb5c0287\",\"dweb:/ipfs/Qmbqfs5dRdPvHVKY8kTaeyc65NdqXRQwRK7h9s5UJEhD1p\"]},\"node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]},\"node_modules/@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]},\"node_modules/@openzeppelin/contracts/utils/structs/DoubleEndedQueue.sol\":{\"keccak256\":\"0x1e1d74658d7f4eab3d4f8fb0c6c5953bc5f629d9425e978d557dabff7b58b217\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://be0175d00008d452d3d553890f73a3d5d51dff4372f720336c8b98f26822fcdb\",\"dweb:/ipfs/QmUkE8g5xPExWoSAKwdi5ww1qJJVtEWtjSF93G2LMQkgD3\"]},\"node_modules/solidity-bytes-utils/contracts/BytesLib.sol\":{\"keccak256\":\"0xa5b10f04797d5a10a9ba07855108b6bd695940e6a3d128927b2f74a0d359868a\",\"license\":\"Unlicense\",\"urls\":[\"bzz-raw://a38d7680aacbb18dae659876b396b73bcc8f759672213f8a0efc4129e2648535\",\"dweb:/ipfs/QmfKFnwpTEGAnbRnZxMuv3mRCG9S9WMjFhFL23bftBT2Jq\"]},\"test/evm/foundry/MyOFT.t.sol\":{\"keccak256\":\"0xda676258c3edd0f68b893d09b7293aa17676a76e026e314cbfdea21ab664cc79\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://c731a6f521f994ea978a75ed92868f83df14a178e63f6c07edd70346a94646ec\",\"dweb:/ipfs/Qmf5d1soEabrpT8MFKaoMrqdgk4P2AGnD2jXEeVEPJd8TK\"]},\"test/evm/mocks/ERC20Mock.sol\":{\"keccak256\":\"0x9134f00d206167b482f4bdad5b443b990c4ec04cc86c523373831750bd841a2e\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://06605d3fdabb46937c1a2098a4caa4a5e5da8c110f52c5f6a7b42060e33d4127\",\"dweb:/ipfs/QmZSbT8rU5HhcgLQm9VWingv7HCdq4KxsTcEmqoG25qcQE\"]},\"test/evm/mocks/OFTComposerMock.sol\":{\"keccak256\":\"0x9e3ca0772aa55c6352283e84d9062660f5e136c6a8c129051c00941f5bbec1f3\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://79ddb778928733c8a52ca6e4d79de24f8da935673f25c62f488627eb59bb97e6\",\"dweb:/ipfs/QmR6cga173tuHGpVSEFoZYN89mPK2WenuAWpT5XRxyaFjX\"]},\"test/evm/mocks/OFTMock.sol\":{\"keccak256\":\"0xff3044b693ecca8da9ac6604ac2c4103980531ff3a04f35ffde5f80671d1a340\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://705441e8b86f606e1553d6f77483c3cddfc389a26136d48d1b3869f02575d703\",\"dweb:/ipfs/QmXLaXZh2DCGpsMymYb1kBQBbG3mTuDApDiNGUk2yHD219\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { - "inputs": [], - "type": "error", - "name": "Executor_InvalidLzComposeOption" - }, - { - "inputs": [], - "type": "error", - "name": "Executor_InvalidLzReadOption" - }, - { - "inputs": [], - "type": "error", - "name": "Executor_InvalidLzReceiveOption" - }, - { - "inputs": [], - "type": "error", - "name": "Executor_InvalidNativeDropOption" - }, - { - "inputs": [ - { "internalType": "uint16", "name": "optionType", "type": "uint16" } - ], - "type": "error", - "name": "InvalidOptionType" - }, - { - "inputs": [ - { "internalType": "uint8", "name": "bits", "type": "uint8" }, - { "internalType": "uint256", "name": "value", "type": "uint256" } - ], - "type": "error", - "name": "SafeCastOverflowedUintDowncast" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "", - "type": "string", - "indexed": false - } - ], - "type": "event", - "name": "log", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address", - "indexed": false - } - ], - "type": "event", - "name": "log_address", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "uint256[]", - "name": "val", - "type": "uint256[]", - "indexed": false - } - ], - "type": "event", - "name": "log_array", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "int256[]", - "name": "val", - "type": "int256[]", - "indexed": false - } - ], - "type": "event", - "name": "log_array", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "val", - "type": "address[]", - "indexed": false - } - ], - "type": "event", - "name": "log_array", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes", - "indexed": false - } - ], - "type": "event", - "name": "log_bytes", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32", - "indexed": false - } - ], - "type": "event", - "name": "log_bytes32", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "int256", - "name": "", - "type": "int256", - "indexed": false - } - ], - "type": "event", - "name": "log_int", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "string", - "name": "key", - "type": "string", - "indexed": false - }, - { - "internalType": "address", - "name": "val", - "type": "address", - "indexed": false - } - ], - "type": "event", - "name": "log_named_address", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "string", - "name": "key", - "type": "string", - "indexed": false - }, - { - "internalType": "uint256[]", - "name": "val", - "type": "uint256[]", - "indexed": false - } - ], - "type": "event", - "name": "log_named_array", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "string", - "name": "key", - "type": "string", - "indexed": false - }, - { - "internalType": "int256[]", - "name": "val", - "type": "int256[]", - "indexed": false - } - ], - "type": "event", - "name": "log_named_array", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "string", - "name": "key", - "type": "string", - "indexed": false - }, - { - "internalType": "address[]", - "name": "val", - "type": "address[]", - "indexed": false - } - ], - "type": "event", - "name": "log_named_array", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "string", - "name": "key", - "type": "string", - "indexed": false - }, - { - "internalType": "bytes", - "name": "val", - "type": "bytes", - "indexed": false - } - ], - "type": "event", - "name": "log_named_bytes", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "string", - "name": "key", - "type": "string", - "indexed": false - }, - { - "internalType": "bytes32", - "name": "val", - "type": "bytes32", - "indexed": false - } - ], - "type": "event", - "name": "log_named_bytes32", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "string", - "name": "key", - "type": "string", - "indexed": false - }, - { - "internalType": "int256", - "name": "val", - "type": "int256", - "indexed": false - }, - { - "internalType": "uint256", - "name": "decimals", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "log_named_decimal_int", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "string", - "name": "key", - "type": "string", - "indexed": false - }, - { - "internalType": "uint256", - "name": "val", - "type": "uint256", - "indexed": false - }, - { - "internalType": "uint256", - "name": "decimals", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "log_named_decimal_uint", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "string", - "name": "key", - "type": "string", - "indexed": false - }, - { - "internalType": "int256", - "name": "val", - "type": "int256", - "indexed": false - } - ], - "type": "event", - "name": "log_named_int", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "string", - "name": "key", - "type": "string", - "indexed": false - }, - { - "internalType": "string", - "name": "val", - "type": "string", - "indexed": false - } - ], - "type": "event", - "name": "log_named_string", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "string", - "name": "key", - "type": "string", - "indexed": false - }, - { - "internalType": "uint256", - "name": "val", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "log_named_uint", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "string", - "name": "", - "type": "string", - "indexed": false - } - ], - "type": "event", - "name": "log_string", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "log_uint", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes", - "indexed": false - } - ], - "type": "event", - "name": "logs", - "anonymous": false - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "DEFAULT_CHANNEL_ID", - "outputs": [ - { "internalType": "uint32", "name": "", "type": "uint32" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "EVM_COMPUTE_MAP_BPS", - "outputs": [ - { "internalType": "uint16", "name": "", "type": "uint16" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "EVM_COMPUTE_REDUCE_FEE_USD", - "outputs": [ - { "internalType": "uint120", "name": "", "type": "uint120" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "EVM_REQUEST_FEE_USD", - "outputs": [ - { "internalType": "uint120", "name": "", "type": "uint120" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "IS_TEST", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "MAP_REDUCE_COMPUTE_TYPES", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "NATIVE_TOKEN_PRICE_USD", - "outputs": [ - { "internalType": "uint128", "name": "", "type": "uint128" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "TREASURY_GAS_CAP", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "TREASURY_GAS_FOR_FEE_CAP", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ] - }, - { - "inputs": [ - { "internalType": "bytes", "name": "packetBytes", "type": "bytes" }, - { "internalType": "bytes32", "name": "guid", "type": "bytes32" } - ], - "stateMutability": "pure", - "type": "function", - "name": "assertGuid" - }, - { - "inputs": [ - { - "internalType": "uint8", - "name": "_endpointNum", - "type": "uint8" - }, - { - "internalType": "enum TestHelperOz5.LibraryType", - "name": "_libraryType", - "type": "uint8" - }, - { - "internalType": "address[]", - "name": "nativeTokenAddresses", - "type": "address[]" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "createEndpoints" - }, - { - "inputs": [ - { "internalType": "bytes", "name": "_option", "type": "bytes" } - ], - "stateMutability": "pure", - "type": "function", - "name": "decodeLzComposeOption", - "outputs": [ - { "internalType": "uint16", "name": "index", "type": "uint16" }, - { "internalType": "uint128", "name": "gas", "type": "uint128" }, - { "internalType": "uint128", "name": "value", "type": "uint128" } - ] - }, - { - "inputs": [ - { "internalType": "bytes", "name": "_option", "type": "bytes" } - ], - "stateMutability": "pure", - "type": "function", - "name": "decodeLzReadOption", - "outputs": [ - { "internalType": "uint128", "name": "gas", "type": "uint128" }, - { "internalType": "uint32", "name": "size", "type": "uint32" }, - { "internalType": "uint128", "name": "value", "type": "uint128" } - ] - }, - { - "inputs": [ - { "internalType": "bytes", "name": "_option", "type": "bytes" } - ], - "stateMutability": "pure", - "type": "function", - "name": "decodeLzReceiveOption", - "outputs": [ - { "internalType": "uint128", "name": "gas", "type": "uint128" }, - { "internalType": "uint128", "name": "value", "type": "uint128" } - ] - }, - { - "inputs": [ - { "internalType": "bytes", "name": "_option", "type": "bytes" } - ], - "stateMutability": "pure", - "type": "function", - "name": "decodeNativeDropOption", - "outputs": [ - { "internalType": "uint128", "name": "amount", "type": "uint128" }, - { "internalType": "bytes32", "name": "receiver", "type": "bytes32" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "excludeArtifacts", - "outputs": [ - { - "internalType": "string[]", - "name": "excludedArtifacts_", - "type": "string[]" - } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "excludeContracts", - "outputs": [ - { - "internalType": "address[]", - "name": "excludedContracts_", - "type": "address[]" - } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "excludeSenders", - "outputs": [ - { - "internalType": "address[]", - "name": "excludedSenders_", - "type": "address[]" - } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "executorValueCap", - "outputs": [ - { "internalType": "uint128", "name": "", "type": "uint128" } - ] - }, - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "function", - "name": "failed", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "uint16", "name": "_dstEid", "type": "uint16" }, - { - "internalType": "bytes32", - "name": "_dstAddress", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function", - "name": "getNextInflightPacket", - "outputs": [ - { "internalType": "bytes", "name": "packetBytes", "type": "bytes" } - ] - }, - { - "inputs": [ - { "internalType": "uint16", "name": "_dstEid", "type": "uint16" }, - { - "internalType": "bytes32", - "name": "_dstAddress", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function", - "name": "hasPendingPackets", - "outputs": [ - { "internalType": "bool", "name": "flag", "type": "bool" } - ] - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_dstEid", "type": "uint32" }, - { "internalType": "address", "name": "_from", "type": "address" }, - { "internalType": "bytes", "name": "_options", "type": "bytes" }, - { "internalType": "bytes32", "name": "_guid", "type": "bytes32" }, - { "internalType": "address", "name": "_to", "type": "address" }, - { "internalType": "bytes", "name": "_composerMsg", "type": "bytes" } - ], - "stateMutability": "payable", - "type": "function", - "name": "lzCompose" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_packetBytes", - "type": "bytes" - }, - { "internalType": "bytes", "name": "_options", "type": "bytes" }, - { "internalType": "bytes32", "name": "_guid", "type": "bytes32" }, - { - "internalType": "address", - "name": "_composer", - "type": "address" - } - ], - "stateMutability": "payable", - "type": "function", - "name": "lzCompose" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_packetBytes", - "type": "bytes" - }, - { "internalType": "bytes", "name": "_options", "type": "bytes" }, - { - "internalType": "bytes", - "name": "_resolvedPayload", - "type": "bytes" - } - ], - "stateMutability": "payable", - "type": "function", - "name": "lzReadReceive" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_packetBytes", - "type": "bytes" - }, - { "internalType": "bytes", "name": "_options", "type": "bytes" } - ], - "stateMutability": "payable", - "type": "function", - "name": "lzReceive" - }, - { - "inputs": [ - { "internalType": "bytes", "name": "_options", "type": "bytes" }, - { "internalType": "uint256", "name": "_cursor", "type": "uint256" } - ], - "stateMutability": "pure", - "type": "function", - "name": "nextExecutorOption", - "outputs": [ - { "internalType": "uint8", "name": "optionType", "type": "uint8" }, - { "internalType": "bytes", "name": "option", "type": "bytes" }, - { "internalType": "uint256", "name": "cursor", "type": "uint256" } - ] - }, - { - "inputs": [ - { - "internalType": "contract EndpointV2Mock", - "name": "endpoint", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "registerEndpoint" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_packetBytes", - "type": "bytes" - }, - { "internalType": "bytes", "name": "_options", "type": "bytes" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "schedulePacket" - }, - { - "inputs": [ - { - "internalType": "uint128", - "name": "_valueCap", - "type": "uint128" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setExecutorValueCap" - }, - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "function", - "name": "setUp" - }, - { - "inputs": [ - { - "internalType": "uint8", - "name": "_endpointNum", - "type": "uint8" - }, - { - "internalType": "enum TestHelperOz5.LibraryType", - "name": "_libraryType", - "type": "uint8" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setUpEndpoints" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_oappCreationCode", - "type": "bytes" - }, - { "internalType": "uint8", "name": "_startEid", "type": "uint8" }, - { "internalType": "uint8", "name": "_oappNum", "type": "uint8" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setupOApps", - "outputs": [ - { - "internalType": "address[]", - "name": "oapps", - "type": "address[]" - } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "targetArtifactSelectors", - "outputs": [ - { - "internalType": "struct StdInvariant.FuzzSelector[]", - "name": "targetedArtifactSelectors_", - "type": "tuple[]", - "components": [ - { - "internalType": "address", - "name": "addr", - "type": "address" - }, - { - "internalType": "bytes4[]", - "name": "selectors", - "type": "bytes4[]" - } - ] - } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "targetArtifacts", - "outputs": [ - { - "internalType": "string[]", - "name": "targetedArtifacts_", - "type": "string[]" - } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "targetContracts", - "outputs": [ - { - "internalType": "address[]", - "name": "targetedContracts_", - "type": "address[]" - } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "targetInterfaces", - "outputs": [ - { - "internalType": "struct StdInvariant.FuzzInterface[]", - "name": "targetedInterfaces_", - "type": "tuple[]", - "components": [ - { - "internalType": "address", - "name": "addr", - "type": "address" - }, - { - "internalType": "string[]", - "name": "artifacts", - "type": "string[]" - } - ] - } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "targetSelectors", - "outputs": [ - { - "internalType": "struct StdInvariant.FuzzSelector[]", - "name": "targetedSelectors_", - "type": "tuple[]", - "components": [ - { - "internalType": "address", - "name": "addr", - "type": "address" - }, - { - "internalType": "bytes4[]", - "name": "selectors", - "type": "bytes4[]" - } - ] - } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "targetSenders", - "outputs": [ - { - "internalType": "address[]", - "name": "targetedSenders_", - "type": "address[]" - } - ] - }, - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "function", - "name": "test_constructor" - }, - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "function", - "name": "test_send_oft" - }, - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "function", - "name": "test_send_oft_compose_msg" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_packetBytes", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "_resolvedPayload", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "validatePacket" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_dstEid", "type": "uint32" }, - { - "internalType": "address", - "name": "_dstAddress", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "verifyPackets" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_dstEid", "type": "uint32" }, - { - "internalType": "bytes32", - "name": "_dstAddress", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "_packetAmount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_composer", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_resolvedPayload", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "verifyPackets" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_dstEid", "type": "uint32" }, - { - "internalType": "bytes32", - "name": "_dstAddress", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "verifyPackets" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "oapps", - "type": "address[]" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "wireOApps" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "oapps", - "type": "address[]" - }, - { - "internalType": "uint32[]", - "name": "channels", - "type": "uint32[]" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "wireReadOApps" - }, - { "inputs": [], "stateMutability": "payable", "type": "receive" } - ], - "devdoc": { - "kind": "dev", - "methods": { - "createEndpoints(uint8,uint8,address[])": { - "params": { - "_endpointNum": "The number of endpoints to create.", - "_libraryType": "The type of message library to use (UltraLightNode or SimpleMessageLib)." - } - }, - "schedulePacket(bytes,bytes)": { - "details": "Adds the packet to the front of the queue and stores its options for later retrieval.", - "params": { - "_options": "The options associated with the packet, used during delivery.", - "_packetBytes": "The packet data to be scheduled." - } - }, - "setExecutorValueCap(uint128)": { - "details": "set executorValueCap if more than 0.1 ether is necessarythis must be called prior to setUpEndpoints() if the value is to be used", - "params": { - "_valueCap": "amount executor can pass as msg.value to lzReceive()" - } - }, - "setUp()": { - "details": "Initializes test environment setup, to be overridden by specific tests." - }, - "setupOApps(bytes,uint8,uint8)": { - "params": { - "_oappCreationCode": "The bytecode for creating OApp contracts.", - "_oappNum": "The number of OApps to set up.", - "_startEid": "The starting endpoint ID for OApp setup." - }, - "returns": { - "oapps": "An array of addresses for the deployed OApps." - } - }, - "verifyPackets(uint32,address)": { - "details": "verify packets to destination chain's OApp address.", - "params": { - "_dstAddress": "The destination address.", - "_dstEid": "The destination endpoint ID." - } - }, - "verifyPackets(uint32,bytes32)": { - "details": "Calls an overloaded version of verifyPackets with default values for packet amount and composer address.", - "params": { - "_dstAddress": "The destination address in bytes32 format.", - "_dstEid": "The destination chain's endpoint ID." - } - }, - "verifyPackets(uint32,bytes32,uint256,address,bytes)": { - "details": "dst UA receive/execute packetswill NOT work calling this directly with composer IF the composed payload is different from the lzReceive msg payload" - }, - "wireOApps(address[])": { - "details": "Sets each OApp as a peer to every other OApp in the provided array, except itself.", - "params": { - "oapps": "An array of addresses representing the deployed OApp instances." - } - }, - "wireReadOApps(address[],uint32[])": { - "details": "Sets each OApp to read from the provided channels.", - "params": { - "channels": "An array of channel IDs to set as read channels.", - "oapps": "An array of addresses representing the deployed OApp instances." - } - } - }, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": { - "createEndpoints(uint8,uint8,address[])": { - "notice": "Sets up endpoints for testing." - }, - "schedulePacket(bytes,bytes)": { - "notice": "Schedules a packet for delivery, storing it in the packets queue." - }, - "setupOApps(bytes,uint8,uint8)": { - "notice": "Sets up mock OApp contracts for testing." - }, - "verifyPackets(uint32,bytes32)": { - "notice": "Verifies and processes packets destined for a specific chain and user address." - }, - "wireOApps(address[])": { - "notice": "Configures the peers between multiple OApp instances." - }, - "wireReadOApps(address[],uint32[])": { - "notice": "Configures the read channels for multiple OApp instances." - } - }, - "version": 1 - } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { "test/evm/foundry/MyOFT.t.sol": "MyOFTTest" }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/MessageLibBase.sol": { - "keccak256": "0x14899a4398251439938d6ef8a15ea8c6acdddc98a7b0066d7e63676192dea0d1", - "urls": [ - "bzz-raw://3998d03de7025c2c601a4fdcaf9475d12a1ef661fcf1a685ece84fdde6498cf9", - "dweb:/ipfs/QmReknRbiGAiPqq9toKyXKo6hUKXrQPJyyS6LnTGjiDKoY" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/ReceiveLibBaseE2.sol": { - "keccak256": "0x2fdbd1b13751a264cd6e7fac518a2685b15c968806c03f1d18b177fc0526e9a9", - "urls": [ - "bzz-raw://600af48bb67939b5f4a3a00c76863ee290a55325ea8697f7cc4b46321ab26ef2", - "dweb:/ipfs/QmdRigYaB6TXczjtVkvwpUEBwvvvDuymFoViMCB6xQPYUU" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/SendLibBase.sol": { - "keccak256": "0x400eaa11c7d50b4c25b7625290ff00937b6875ad3986b353c37a4e62b5a834b1", - "urls": [ - "bzz-raw://1f51eb0785d3630815a9d63de1c1331fe966df4c3f2fb6750b8da7be9e9743a4", - "dweb:/ipfs/QmaAEf1kjhhff3AUhRiPm6ikpk2YMMrpKc2ccYzNs7waBy" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/SendLibBaseE2.sol": { - "keccak256": "0x90ada11d0a330732c56b989e59c8272b70f956a5d7be2cf209d6d51a51d35a9e", - "urls": [ - "bzz-raw://0abc7a6d07ec40a3a922256ad05bdd6eca10550d85bfd2e67147473617bb0497", - "dweb:/ipfs/QmRDphmFhx1scRJXcusg6pUhVQvp941oCJwnHGAPdrNY4T" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IExecutor.sol": { - "keccak256": "0x2fd26e454b060ede7afa15f8bbc67bd43f9181b6405ca411d36c8b538be016af", - "urls": [ - "bzz-raw://cf2142e83214bb392f69ed14266718cfd803f849a7239ee9a1950ddf66553696", - "dweb:/ipfs/QmSZ2mPMZqWBetMU8VESKtxy7UdSThUVmJmTFMHEyKLTGZ" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IExecutorFeeLib.sol": { - "keccak256": "0x801d12eca6d6b232fb91d949cdb70a4c547c5e27e73555f2f1eb9e757c639bcc", - "urls": [ - "bzz-raw://b61bdffe26ff3902edab3efb0b5af3808ec9e28d72db95b77128502b9bc7638d", - "dweb:/ipfs/Qmcyf3npDDEq28b9XqmXgSGyQegj2cxUZQ3UekSNf34g8M" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroExecutor.sol": { - "keccak256": "0x3647af317ee126b1247a782abb30e59ec5ab21b4945f1d3b4370d1fa3c1bf347", - "urls": [ - "bzz-raw://5b51cd5e7347ee869a06bd57a698f40e4a901ec7fdcb27f0ef485e4a0e1e9be4", - "dweb:/ipfs/QmP2Nc73veRzLGdUahkjhQAiKR9ZWYiUtSGwoMB1sPXxUp" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroPriceFeed.sol": { - "keccak256": "0xb4df72798a64f5ea44775b526e0c417c3de0ffc661659d7b31d5b28567c6fbcc", - "urls": [ - "bzz-raw://30ca5fd5e3227a7bffc51654ee3bfebdd591a131f86846ac42dea8a40c5cf1d8", - "dweb:/ipfs/QmXNmQCF8TZAFpUxgPa1rgWt4ktsBV38A8Hax7TiYLgybW" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroReadExecutor.sol": { - "keccak256": "0x360936885f173f816ffb47e555d480928e74eb1ad54a76af0f4595ecba2d5657", - "urls": [ - "bzz-raw://16b5095e6439b1e416eb70571a1dd8f4f21a0d77b19c9e510ca289d99e5e09ab", - "dweb:/ipfs/QmZ2mjQDQ35gJseyzmQhik4cBgN2ESADzofFNVFvgS64hv" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroTreasury.sol": { - "keccak256": "0x2aab2a3cf50e20af56d9204b1367d52a47abba0b0c7c21f304d413de1ced6345", - "urls": [ - "bzz-raw://f8b603b5e5e62c621715f8449280af240a4add8721c4ae8f5e8e491507f6e4c5", - "dweb:/ipfs/QmUQ7Ti7CPmKnRbQFN9TLvVbeZhsi1xUjqZPTJ36dCZ6y8" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IWorker.sol": { - "keccak256": "0xa6b61913767305227576cc6da5067de4208f09a4f58bfbfe32beafdfae9869b1", - "urls": [ - "bzz-raw://b7fce83bfb831f383606aee7f5ff68a330c8526bb1036f9ba0813d3e4fa8d534", - "dweb:/ipfs/QmR7zAqJkmCgBj6sguS8t2WthY5k6FwsakgH4UY11uqD4n" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/libs/ExecutorOptions.sol": { - "keccak256": "0x441b723f2f597be2ec2bb361fcf3f11852c23534db1cfa7d2ffff7e61d228e3c", - "urls": [ - "bzz-raw://636817d20f90f75032e35376256cf5f4d2a047d6541b45f644d82a2e4dc8f1eb", - "dweb:/ipfs/QmcEFRxCmmm9hKbqi7Powj6ATbw4JXXJW4rxfwMcxWsDnT" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/libs/SafeCall.sol": { - "keccak256": "0xc3b7b7927472f7c1ca9703af310e9050c798afaccf399ad0f131e179b8582c8d", - "urls": [ - "bzz-raw://e5be13af32ff6b371985d405bc6fe8ac2faf5445bd88fda2dab4b869f66e3f89", - "dweb:/ipfs/Qmd21k4H2tAHKrpiuHUbH87eNtHLLJzHj9ZCrMh8AKfDHh" - ], - "license": "MIT OR Apache-2.0" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/ReceiveUlnBase.sol": { - "keccak256": "0x36c93de122bbb74ae31e3eacf567c0a3bc649ed3ebb2766c76dfa93aebcace44", - "urls": [ - "bzz-raw://e83bcaa80e2715e68818dd53e4dc6ad8e665b8249d69a08cf2d2635b9757fb79", - "dweb:/ipfs/QmSKh6NgaTrTSa48gDzGGqGNAcs5jVEHgZSzZzbuJSEsxo" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/SendUlnBase.sol": { - "keccak256": "0x6d9962ffa476ac2efb78f1415bb2f650a30eedeef2b75fdab0aeafaf3e8da6a5", - "urls": [ - "bzz-raw://21f32c56b67d2e770444b809c1a85a96627194c605ad317d482dfc5b6ce7e8c2", - "dweb:/ipfs/QmP5tzoMDzTdduEcSpYHgg6WCHLQGuc1djDMFUBycJPLCU" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/UlnBase.sol": { - "keccak256": "0xfdb1d04f4996c0a9d35abfbfcf10d978da638885eb77d0a9dc35cea5993074e3", - "urls": [ - "bzz-raw://776d58d88d13b058f236cf18c32b4b9718a021513fc4e198287f4fe18ec5aba4", - "dweb:/ipfs/QmdNX8jJu2aXJ8Dpbt2ohfhT8RKQLuvh58sW6SAXcUTcV9" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IDVN.sol": { - "keccak256": "0x6becdfab6c1fcaf98f402bee48495895e54825f9d6eef6e292dde0caed628284", - "urls": [ - "bzz-raw://2273341033856737cd46704a1a769768feae696d0e7a912f5be9de8ffdd2180c", - "dweb:/ipfs/QmY1xBAmMX9jND1HAb7tDyZNPgFReXMqs1vtmHbShKZFQY" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IDVNFeeLib.sol": { - "keccak256": "0xed4a8e77148328132d8f4f2726c4aeec6b490cf03a1d5940bde0ab8d72954de9", - "urls": [ - "bzz-raw://7b07802ca32bf10f68e51da872fb358807446dc2242314374d226493a6e9e7dc", - "dweb:/ipfs/QmfSwWPLgitDy2a9S3mCNBDk6kAcK9n186Dtvj7qg84i12" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/ILayerZeroDVN.sol": { - "keccak256": "0x308e77078242fd5c5746ec29c12e618249134f9e4377c0028ab8f59c07a6014b", - "urls": [ - "bzz-raw://2f92cf397a8d26864ac92dfcd1b98e92a32c47f556a62c5e6dc1618734c1caa3", - "dweb:/ipfs/QmXN3XJXEKq5djV6HeM6jrLycmJPFhMhecsYZ2TaRsQmhg" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/ILayerZeroReadDVN.sol": { - "keccak256": "0x759a3ee7614c2de54b152b0278845f91ac9760d8c22045b2fee89e3e744402b8", - "urls": [ - "bzz-raw://7a2dbf6bcf5bfab408f18c104b34c390e8bfabb0eeb1a10e3a9c0fb14c8c61d5", - "dweb:/ipfs/QmWxmRbDBkbhGmNsRyXqQXB1QaWRS4qvh6a8achh8DQPKR" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IReceiveUlnE2.sol": { - "keccak256": "0xcdf7e690e5d5c0a3ec26a0d7b1a7fe49c7d16a3634721c3944f77d13ff5d4a91", - "urls": [ - "bzz-raw://bd32a05dde1b83be1ce64fcfb9495d8b9bf0c5b3a5b521ac6c214e87e32f3cdc", - "dweb:/ipfs/QmcDKTor8EQf3cbiWYmeFb9qzUM8JGPzGGN9qJnYjP1nN7" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/DVNOptions.sol": { - "keccak256": "0x2beee03cdf59a9bc72e94d08b69cb2e908725f4ceabb48651494938100e21e35", - "urls": [ - "bzz-raw://d88e121a39e74309f3575417df2318e2d2ee8bc8314e68dbf78544a9c393b141", - "dweb:/ipfs/QmRojBRAyENK21HnjevAWeoZZxtWkYZubB9Y78vCJPYeU6" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/ReadCmdCodecV1.sol": { - "keccak256": "0x52fbab4a114ce9defb2ffd57c0a978eee438b2c232862f7e20475e0dcadd4eda", - "urls": [ - "bzz-raw://a4d5d4e186e3f2a916ea02c2d1d0761069ab1a5c0d6f74719bbf3501a7ccb899", - "dweb:/ipfs/QmS2e12U9Fap2EK1CmSBTccL4PCKkHNdKJn2bXCqqKdbRn" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/SupportedCmdTypes.sol": { - "keccak256": "0x6b2534522c163714e499041ecd06aaeb93857373cef82cf2752f162bb7c69f9a", - "urls": [ - "bzz-raw://bf6c3545c3b9505692dbfaa29b40cab5ed9dc9b65e5804b6f47b5a76596120e9", - "dweb:/ipfs/QmNs98oRaMvpYhLCQ5yU256eYNEopFTrLRjjwm3gL4foQ3" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/UlnOptions.sol": { - "keccak256": "0x5df07fef16b20767f7524c367d90f696c12e8ce0e4fde7aecc9d83fb2b6b0e27", - "urls": [ - "bzz-raw://0997203f57d736e56ebb3d736550f1c7ff7950c8df0574c7abe95e22f847b850", - "dweb:/ipfs/QmZBjkH1vaPLyN3Jx9kGfVZKuTdfVWJfJVLSPok8SpjGbT" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/readlib/ReadLibBase.sol": { - "keccak256": "0x7d312ba1e6288cb201b211f58b814eaaa0b5993721475fbc64321b0e7a2c74d3", - "urls": [ - "bzz-raw://dfc0dce9362eca0f03b51e0e808389c8bf51fda901e6ca58da169f165e4fc3c8", - "dweb:/ipfs/QmSXAQ3veWf6gPXcgpX1XLZW9SyLQjBjCSdsFiQTttLNac" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/uln301/interfaces/IUltraLightNode301.sol": { - "keccak256": "0x47f8ebeaa7d96a6f337a18c46e3c532da578c7cb0a13fb6e6f014286b991902f", - "urls": [ - "bzz-raw://d51f208b931be54e0ae1801c71c0756251d8c26f8d9b7911be1ad57b3d4a5691", - "dweb:/ipfs/QmWqjst7jnYtSXQ9pakYHutDvENKLyqNg9nPfMxTH8p2Ed" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessageLibManager.sol": { - "keccak256": "0x64330e51de72e8d38cfc0eb5527d36baada46df4bc14233d3a8ecaf98098d69a", - "urls": [ - "bzz-raw://49aa45e5a26fc62e7af569cf915be8344adc78dceb6871c4c14bc5d115e59241", - "dweb:/ipfs/QmbTuW7kzPDYForDEPnaNQi6ZrmWqDxGVnHFiugnvTyq9K" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingChannel.sol": { - "keccak256": "0x8ab8cb12c8beba699c1a7f22ffa812ac553f7038326d0c0d0af77253005cfe73", - "urls": [ - "bzz-raw://7c7cba4ae16d0ca46ee0a365a204f7257ceaa892224604bf7c8e65c44737e46c", - "dweb:/ipfs/QmbQX5hJDKMwKdoo6QkdcusXQXH54SVCPe5hM1ycJZsg7y" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingComposer.sol": { - "keccak256": "0x20d36578e810e75346daf064813b76a177087214cae77628b1f9d43798cb52d1", - "urls": [ - "bzz-raw://475b6f3f1ba5d981d0c5f90b9e892d4f9f539f3b12196639b95770b5be4dbf6a", - "dweb:/ipfs/QmYyGrnR3vDt8Dqa2paQwTG9qrD6anAGFrDZmMra8KGC6s" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingContext.sol": { - "keccak256": "0x9616f3bd0d7293c9723f2ddf86f9f7030fbd99213c9748557eec8f6d13b25420", - "urls": [ - "bzz-raw://205e713f5af46f52799e51774ac74dbeee4056de6ddba3c4d78a327536426c54", - "dweb:/ipfs/QmZ2ZqDwxdjpJbh91qwMfRhhQu4AMEsjUcsTEsdRV4NAys" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroComposer.sol": { - "keccak256": "0xfaca7205d4211ee9208a7e59171e2301731f3d2a20c49b4a839821871f5fdd49", - "urls": [ - "bzz-raw://f254bc60ac26687b5320a43a556e30777b0745abf7cd64d5f4720d9b1d1f7fdf", - "dweb:/ipfs/QmRSJEZVgxaC3L2DdE6s8P5qkYfM3V5JMeseeFJJqGR4xz" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol": { - "keccak256": "0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3", - "urls": [ - "bzz-raw://bacc29fd3866af71e59cb0bdc1cf82c882a4a7f4e2652fd413c9f12649762083", - "dweb:/ipfs/QmZh2toLnrQDWaNYhS5K4NoW7Vxd2GdZx9KA77vKEDLAqs" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol": { - "keccak256": "0x9641abba8d53b08bb517d1b74801dd15ea7b84d77a6719085bd96c8ea94e3ca0", - "urls": [ - "bzz-raw://77415ae0820859e0faf3fabdce683cce9fa03ea026ae0f6fe081ef1c9205f933", - "dweb:/ipfs/QmXd7APqoCunQ2jYy73AHvi5gsZofLpm3SzM6FPo7zRPfL" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol": { - "keccak256": "0x5cf5f24751b4e3ea1c9c5ded07cedfdfd62566b6daaffcc0144733859c9dba0c", - "urls": [ - "bzz-raw://cae7e35007a714f007ea08045ef7c0cfa6c91fd2425b5028b2d49abad357a5f0", - "dweb:/ipfs/QmcDBs5tsiyB35b8cwzWQWNnpkawb3uuHRaqE77Hxm2tve" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol": { - "keccak256": "0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc", - "urls": [ - "bzz-raw://d8ff6a8a89297fa127f86b54e0db3eba1d6a6eeb4f6398d3c84d569665ac8f1b", - "dweb:/ipfs/QmVSwhw6xFDrLRAX4RXaCM47yBaBtac4wf36DYEq6KCTvT" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol": { - "keccak256": "0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972", - "urls": [ - "bzz-raw://7e1b245d58221d16d8b5e0f01ef3e289a24a7df1ace3b94239e4d5b954ad5927", - "dweb:/ipfs/Qmappsgp7PCY9rSSNE9Cdn4BTRX591WfCSEgq2HxhA3z6S" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol": { - "keccak256": "0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901", - "urls": [ - "bzz-raw://b18b23a1643fc6636c4ad9d9023e2e6ca2d3c2a4a046482d4655bff09950598d", - "dweb:/ipfs/Qma6G5SqiovwrMPfgqTrRngK1HWW373Wkf9c6YP2NhXpPk" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol": { - "keccak256": "0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e", - "urls": [ - "bzz-raw://5173fc9143bea314b159ca5a9adb5626659ef763bc598e27de5fa46efe3291a6", - "dweb:/ipfs/QmSLFeMFPmVeGxT4sxRPW28ictjAS22M8rLeYRu9TXkA6D" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol": { - "keccak256": "0xf1c07bc61e7b1dce195ed12d50f87980fbf2d63cac1326fd28287f55fe0ba625", - "urls": [ - "bzz-raw://060f10ff7afc33c1c2f2b4b5ba29231fd3c943146488084d0e4ab99fce991d97", - "dweb:/ipfs/QmaSsefAqqEqtf8FgFUmDYMwTsAty3X1pqDb6SiFvry6B3" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol": { - "keccak256": "0x2ebbcaaab3554edcd41b581f1a72ac1806afbfb8047d0d47ff098f9af30d6deb", - "urls": [ - "bzz-raw://2d4b2cf5c3b16dc76c6767f285b57c0af917972327b2be3f7cba5825402f5fc1", - "dweb:/ipfs/QmQQWiHE2jKEDbjzGutSoZwtApSXYfLqZt5CxEpFj8xyvT" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/CalldataBytesLib.sol": { - "keccak256": "0x5c0db161cef6603c3b256d4220f489419e7478ef775e52a80056654129c61875", - "urls": [ - "bzz-raw://a33245d0fdd3992bb56b31d1840108d36bb46c8d617b659ef1af8dd7ed86302d", - "dweb:/ipfs/QmWyBqT7Tdrfn5zz9xYM3V1PBtfAZAVwwCrrKwwfi3wMQK" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Errors.sol": { - "keccak256": "0x35bcd6ca99c4c8d9f7d8413d1b92fb4a4d4a420ce3bf64b0fb01e68e6bcf2fa7", - "urls": [ - "bzz-raw://0ac14f98563f9c610c936c93e71eff657efaba1e1d892be6a215aa5cb1f63a24", - "dweb:/ipfs/QmVZZ8owwfDGLQTAzQJJqmYY4KsrChDagh5GBK7rChT5wb" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/GUID.sol": { - "keccak256": "0x8a44524af7deb96593f6b5606e9973654a113e1687809f2e45d4a91ba89862d5", - "urls": [ - "bzz-raw://32dd0b5d1946e0cd5c7b728086aafac50a62c061115afb8b41254589c8a6732b", - "dweb:/ipfs/QmR9QqtiAUPRLaRVv5wnth3NGPhdWB8rJmWYfz3o5Z1mWj" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Transfer.sol": { - "keccak256": "0x621d6dd5b8b7e827351459fff4ac87c16ba4656757592cf67de8b199aea4cf9a", - "urls": [ - "bzz-raw://345aa8c007ed8b96a74260d289545713f1d7180df270d67687e3a540a61fa5c0", - "dweb:/ipfs/QmNWCvpqSuar6UGLDVshUc7shUv3pt1J5FTf9VyZZ13wXL" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/BlockedMessageLib.sol": { - "keccak256": "0xb2b55968b26294139742adee6c155897c8334f4c6bf72f1940456cc84e6fbab9", - "urls": [ - "bzz-raw://e758a1fdcea4039b19f1252e4e2958f4a0e05517eb3e151784431533446c225f", - "dweb:/ipfs/QmRBG345abgyUeTnSpuxdK1WbK5pvwhSmvBEgW1mnoYqTq" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/BitMaps.sol": { - "keccak256": "0xaad3c72ef43480d2253fd48b394e8fb7286d009991d2bc4e61be58ce48ac5ee9", - "urls": [ - "bzz-raw://b8c02b14f954416ba2148b389c87da8378ac8dd16ba3d458cbbfba8b0fd8639f", - "dweb:/ipfs/Qmd2EEQhYL2VmgJi1V4uiHM2WcYxF9iBtxSgcFkbS21rQD" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/ExecutorOptions.sol": { - "keccak256": "0x621c6090fc432f94a99f677a95d72b75f56db89ddc5fc870669777a313587c28", - "urls": [ - "bzz-raw://69086166f16d29e30c5eb9ca2f97afb27569afe619807d79736833a809a512d2", - "dweb:/ipfs/QmcZqXjFuVdTrfbteKBF3GuEpjVFZ2YNZTa3J87dyLsqav" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol": { - "keccak256": "0xc84cf1bf785977fe1fbe7566eef902c2db68d0e163813ebe6c34921754802680", - "urls": [ - "bzz-raw://de686666fc16fa432d4208d85cec87dc952faf3e481b683b9adf4b4610db4b09", - "dweb:/ipfs/QmdmQeopzmxqRzi9DNB4EJDrYUXFfD7fUhnGhSni4QejUW" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-v1-0.7/contracts/interfaces/ILayerZeroUltraLightNodeV2.sol": { - "keccak256": "0xf1f36bbbc40d03b96affa151affb47da75a1b69dc79f4b311841a072d12fdd22", - "urls": [ - "bzz-raw://9f4f188c2998ecbda28a389ad8038da15c2260b1df6a8d135b3d96422e292fda", - "dweb:/ipfs/QmeThR83tcaM4CmxQ2AamTafsgjcbGMfZtYcDHqw2CcwKa" - ], - "license": "BUSL-1.1" - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OApp.sol": { - "keccak256": "0xac362c4c291fad2f1511a968424b2e78a5ad502d1c867bd31da04be742aca8c5", - "urls": [ - "bzz-raw://e1f8cf9f20a2b683a53c3883972aa0676af97a24c678f461fae08e1fb056df28", - "dweb:/ipfs/QmPpKNqda3rgxDwnq3XiRTtT3NfWeqrCJT6LwmhYd2AoT2" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppCore.sol": { - "keccak256": "0x13a9c2d1d2c1f086b8624f2e84c4a4702212daae36f701d92bb915b535cbe4cc", - "urls": [ - "bzz-raw://606515dd9193551bd2c94ac8c304f3776fafcc70e544ebf441f334658b2fd5f0", - "dweb:/ipfs/QmZ88ey7DdZqV5taAoebabvszX5kdPMSrQCAmTteVdDtcH" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppReceiver.sol": { - "keccak256": "0x0174e9f1ec4cefe4b5adc26c392269c699b9ff75965364e5b7264426a462c70b", - "urls": [ - "bzz-raw://cd12bb4fe5802c53911b9a0081a2ea10639b1f99925d1e5c1b1421d1bdc17075", - "dweb:/ipfs/QmZonarwbKiEwQ8qoASKur2bbMjusdy9pqK9RCR4P1YPtc" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppSender.sol": { - "keccak256": "0x518cf4adca601923ed4baa6619846a253ea32b8d8775f8bc1faa3dfac7f67c20", - "urls": [ - "bzz-raw://d42b471418efadcc3577ef3fa9f8f504e8bed7db90c3b0c862038d8b29529eb2", - "dweb:/ipfs/QmZETDQiJN4U92fmLKo8T9ZbdDf7BNBUUvo9H7M7GqAyFU" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppComposer.sol": { - "keccak256": "0xe5014c411acb2b59dd74ae74a1bab02cf32d94a41a548a5ab553d64aeeb55dae", - "urls": [ - "bzz-raw://29dfb7bc121002fc7e7931c34eb17af0ae0f0127dcc3199511c83a58a917160d", - "dweb:/ipfs/QmPdq1wcRRBdUP169LHCLoLuPRunN9eR71TQN42FjGpowx" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppCore.sol": { - "keccak256": "0x40e49f2de74506e1da5dcaed53a39853f691647f4ceb0fccc8f49a68d3f47c58", - "urls": [ - "bzz-raw://4a1deb2a6a3eb1fb83936c9578469142bff470295f403d7d07d955a76be3adbd", - "dweb:/ipfs/QmS9bjSfBaE4YhQ1PCQ1TknbEPbNfRXzBK9E7SaPGyiZEv" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppMsgInspector.sol": { - "keccak256": "0x339654e699043c400cad92de209aa23855ce10211c31cf4114042cc5224d3b7c", - "urls": [ - "bzz-raw://5222afde59bf086f67b39e0288ad36343f4f5ed683d250533f256a5db956f37e", - "dweb:/ipfs/QmbEG9EMYsK3Y6Cz7QbNtkW4kHGzMuhp2y2seSoL8v1A5b" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppOptionsType3.sol": { - "keccak256": "0x9fc08a51e9d7c9c710c4eb26f84fe77228305ad7da63fa486ff24ebf2f3bc461", - "urls": [ - "bzz-raw://2e2eea8a93bb9fc3f629767118b362e9b4bda2443ff95eae21c6a894f3e334cc", - "dweb:/ipfs/QmPRRNjAB4U19ke4gr3U7ZJGtdcVBxdXVBZ2BmB1riFkP7" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppReceiver.sol": { - "keccak256": "0xd26135185e19b3732746d4a9e2923e896f28dec8664bab161faea2ee26fcdc3d", - "urls": [ - "bzz-raw://c236dfe386b508be33c3a1a74ae1d4fd64b8c77ae207767e9dbed0f2429518a2", - "dweb:/ipfs/QmXVbZJjfryTRti98uN3BMh5qh4K7NuEs1RSCoBjRoYd4q" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/libs/OAppOptionsType3.sol": { - "keccak256": "0x5275636cd47e660a2fdf6c7fe9d41ff3cc866b785cc8a9d88c1b8ca983509f01", - "urls": [ - "bzz-raw://a59dd6e3cfcc332f45a13d44585eb228588c4b9d470cbb19852df5753a4571af", - "dweb:/ipfs/QmQJF1QU3MKhvmw42eq61u9z3bzKJJKMsEdQVYyPyYgTVS" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/libs/OptionsBuilder.sol": { - "keccak256": "0xd40d91e8173cdb5bb821b4594f806b99344d5fd605bc6f2cf0fb21d5ab2500e3", - "urls": [ - "bzz-raw://1278c26c077e3b1ee6a5f25385a3c00eaecc0efd7b622facac5569d1e47ac42e", - "dweb:/ipfs/QmQZyrJV7UoUfdY1KYNJ2ru27Khtg4Z8v8XE9KNHFtsvA4" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/precrime/OAppPreCrimeSimulator.sol": { - "keccak256": "0x205a0abfd8b3c9af2740769f251381b84999b8e9347f3cd50de3ef8290a17750", - "urls": [ - "bzz-raw://d9778d7d5da941af2029410b6ac212f915ea1785573ae2865b0ed8f779fcca82", - "dweb:/ipfs/QmNkVEkfecvgubgnMuaT5fEfSExd95vz8DQHhpZtMrVRjH" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IOAppPreCrimeSimulator.sol": { - "keccak256": "0x5d24db150949ea8e6437178e65a942e8c8b7f332e5daf32750f56b23b35b5bb2", - "urls": [ - "bzz-raw://1b1dcea0267234654126f926a1b405743606d7b5e49185b621afb7bd94d18b9a", - "dweb:/ipfs/QmZ9BXQmbWJcrhHKuBs4yhNtbCV5WUpUY3AXSX7rkWwX6y" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IPreCrime.sol": { - "keccak256": "0xc8d869f27ef8ceb2e13fdf6a70682fd4dee3f90c4924eb8e125bc1e66cb6af84", - "urls": [ - "bzz-raw://66bf49d59c14832ea0ddddcd12d512d4f9bd0fd254a1368442587bf3e77fe73e", - "dweb:/ipfs/QmYUAvsyuUPiSYjbL4zVo6ZtiRSLCUPDvCesqgdZWbSGDg" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/precrime/libs/Packet.sol": { - "keccak256": "0xcb2fb1c5b2eb3731de78b479b9c2ab3bba326fe0b0b3a008590f18e881e457a6", - "urls": [ - "bzz-raw://f70724c61d226743c2bd8ba6c09758805e4339780978949ce5b333c106be4edc", - "dweb:/ipfs/QmX5rV9K1N7RgTz9xtf8CDG8SrYiitGAzFh9ec2tbnEec4" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oft-evm/contracts/OFT.sol": { - "keccak256": "0xdc3582e4a20e02a79050c17058a1f1f42a4335d1a70be06c0a52a3fb05d4c89a", - "urls": [ - "bzz-raw://83c4bd42e68528246860a952a92a79e51e3a789dac79a0b62576ab2f609de9c7", - "dweb:/ipfs/QmVj1x655j1cFTnPT8uBaM71TCSrhFVwPdoFkAkWhhadns" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oft-evm/contracts/OFTCore.sol": { - "keccak256": "0x9ce49b83455df600b52538e42028c422a322643f7ffb4f2814c72c3b970ea7be", - "urls": [ - "bzz-raw://2ebbf79612c3f6cd4e2754ba55519df6b89504ab5514e3517cbd286d87143997", - "dweb:/ipfs/QmQZpSPhNhF4MESb2if2DbcjC75xfuoEzDGXmeJKYZtHZ5" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oft-evm/contracts/interfaces/IOFT.sol": { - "keccak256": "0x7ba6bb62fba7ee83451cfb0e727ddeef0e96b4388bd4e9ff0fc6ce103e1101c8", - "urls": [ - "bzz-raw://cfbd447f2e8a730bd46a14c3c3e6a0b2bf7446145579603a9793ba5ac1dd38b4", - "dweb:/ipfs/QmZ4nx4iGrFmBHvYFgki5TXFdCHz4Co38hgdgwpRaM7NLs" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oft-evm/contracts/libs/OFTComposeMsgCodec.sol": { - "keccak256": "0xaae73d6eb8b9561c43f1802f3c416c00ccd35f172b711f9781ccdf1b25a40db5", - "urls": [ - "bzz-raw://7beda2d895ae9e15269dd261a492ce0a29b498e5bebf088ed6f2ae6a5185719e", - "dweb:/ipfs/QmScog2tW1YVyEPLVcUVqGGc85ub46sA28nUKNzFEZcFdK" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oft-evm/contracts/libs/OFTMsgCodec.sol": { - "keccak256": "0x5358948017669c03e157f871d8c38e988f9004dbd0801ad3119d2487f0d40b0b", - "urls": [ - "bzz-raw://c7d0f1bf32a80af9b99cd93fefa373dac5c27463351cc35f62b9c2439d5b9258", - "dweb:/ipfs/Qmb81qoxzMwV3PkPANRvnXf4fJTsZ5sjJ8r2df9V2vhh6q" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/OptionsHelper.sol": { - "keccak256": "0x729ce2290d16a45a16ad936263803db6a6bebcfba5c063ebe0f0fd284ba828c0", - "urls": [ - "bzz-raw://7494875394fc968684761b22bb5fe05789f8d84ba07b2e0ab579ce0afe7aa973", - "dweb:/ipfs/QmZNrexRXL3ef3UnES5e8JcdyMJ5HVftwGKQjGC5CwNg9Q" - ], - "license": "UNLICENSED" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/TestHelperOz5.sol": { - "keccak256": "0xe60b21a345bb1c2e9ee2fb7301398d342da0acc3a730b442106a2ad9478f7a63", - "urls": [ - "bzz-raw://ee7e0a47ae666a16e33a51f946da4fe549e8f4c6ea1f1978850515172c44656f", - "dweb:/ipfs/QmR2AZ9pYiwMCV4wPPVaGGPRJEjuBoFjJEesHtbAYhNoFq" - ], - "license": "UNLICENSED" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/DVNFeeLibMock.sol": { - "keccak256": "0x4c2e212f73a1c2a2989af947eef715ebacb11a80d55e5fd18a89a905790971b1", - "urls": [ - "bzz-raw://30eb29a81414780828903f5320367e89020af5a4055b768e2be08d43605b1688", - "dweb:/ipfs/QmeC5bVtmaY6tn6Z2XpVFXAkxVWQCQUzKbP2V9nPdv3vCr" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/DVNMock.sol": { - "keccak256": "0xdafd7da964b6ac8637d543c30370739bb805f7e10b42043444689240b5c27b3f", - "urls": [ - "bzz-raw://154067632b4799f49c0b3a8c5304499f60b2c232ebd17c21912efdb72421bdab", - "dweb:/ipfs/QmUEr6VsNt2odnrL3xFrLKwZTVLkLXi8BDzpPWeiCxC63T" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/EndpointV2AltMock.sol": { - "keccak256": "0x026b2f530b336ee237f37dde6f617acefbbf74d933d2a80da4216882f78be1a9", - "urls": [ - "bzz-raw://097a9fdd5a321e6e8455a1db00f2abda6e810c31ce47d1bced9e574be262a28b", - "dweb:/ipfs/Qme17zGk93k5BghCWFXqeqppVahH4dHuw7U76K4EcJxsY1" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/EndpointV2Mock.sol": { - "keccak256": "0xe9096c53611537a121589b56b882fc4dd797d5cac60def708f794a15e3ca98ff", - "urls": [ - "bzz-raw://4092d5dd582b48a5f703e4361fc5fb66050b5fe3253891175275dc832bc8e045", - "dweb:/ipfs/QmXSTJJNx4rn2ByCaE6vxiHnkm366ZU7dScYH1JsUbVZ1V" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ExecutorFeeLibMock.sol": { - "keccak256": "0x4a47aaf41049710d5f05fcc66885cacc0dabc1864778b56ac75a59b61eef5a01", - "urls": [ - "bzz-raw://c9b8c26b38cb138c3225efbab8b1d2e0f43343798658a0f2ed9669c16e5a97ff", - "dweb:/ipfs/QmV21G7Qwoi9gXYT8bKXDwnQDvjdZCAo2M9MqTKq4nQU9U" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ExecutorMock.sol": { - "keccak256": "0xbcdc4500270cd5496f10760ffe9e0444d23e454dd0ae2555e0661acf22fce96f", - "urls": [ - "bzz-raw://b816999bcfef5586b5e80bba21584b821fd7f7b32c276492adee530ffa83bb73", - "dweb:/ipfs/QmXLV8ieYdrTBERajBCVuMzknFyPHJjnw7MGkzULAdjdt8" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/MultiSigMock.sol": { - "keccak256": "0xc7c90e073e52af1da6c07e3d3f7477b064a89e78935c16e9872457df503c6830", - "urls": [ - "bzz-raw://cef1ae2d517e152616aea7f8f5c15fa1fbabbec8896a9c30a9eed35fb56b4f2f", - "dweb:/ipfs/QmeitPMQht2WfbR9ZLzwKWgThamdsJkobeaWo6ojTCoQG5" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/PriceFeedMock.sol": { - "keccak256": "0xd8f419b25c648287b5b7f0923b069b2449c51e807c9153df39445f2f83e55f44", - "urls": [ - "bzz-raw://bb300a5bb62655073c7aa9cd2221e60e59ce904a0d73f7f5e06af7c9df3445ec", - "dweb:/ipfs/QmcYb2qFevymfkWhTqGaNH5HwK9MMUixzAKJJAdNQHSCbw" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ReadLib1002Mock.sol": { - "keccak256": "0x1403b7a91b185fd8211f00fa380a0b8918e92e663c403a1dafa30f1667091fdc", - "urls": [ - "bzz-raw://7494444260a981ae9a9e11cd8981fad35a6b45a9c09cf72c05aad88ee191e7f0", - "dweb:/ipfs/QmaTyujm37PsCobQ36ootD5xVgKyBYqeUTdTJij9x3oaN6" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ReceiveUln302Mock.sol": { - "keccak256": "0x8e60b01e9bc801167b374dc119b41832d546afd43c143a0cd15ab1941198e121", - "urls": [ - "bzz-raw://bb1512762417dda9cd81fd9b41f590fd05888358fda1c2ab7e79e0cfabf61ec4", - "dweb:/ipfs/QmPAgBwdjLz29vE5L1Jth1Wvx6TTM1ig97amVtAyDFF61Q" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/SendUln302Mock.sol": { - "keccak256": "0x0c5cb54ec6b18e77aa653f7d774ac9d010684dafc96794d1d02f12b6885cc348", - "urls": [ - "bzz-raw://24c5a8ba8d92c16ec3047229167528f57b38cbd64882140014126ca51ab14574", - "dweb:/ipfs/QmXQsMDtZ3qNmjnr2LYgctBpPKxffuC6EeWHvFUtLBS5st" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/SimpleMessageLibMock.sol": { - "keccak256": "0xe6c93840c612592686732dd516550816eb77d6cde92514220eacb72443dcb9b9", - "urls": [ - "bzz-raw://a6a00fb60b7ac66e746f0471c2262fc98febafeb8acad8785d38ce1ddc4cc991", - "dweb:/ipfs/QmboboJskbXBbsyAGGRbW4JQCPJo9WiLFy7nwQxGVS9UhZ" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/WorkerMock.sol": { - "keccak256": "0x6c5bc31c117033dd35fa7ab3b13b1647a4b449c5f5b4cbff41bce8a63529ab97", - "urls": [ - "bzz-raw://01aa1d3f3b8e2fd4b544312d96916b16b97e01ab740e2bae1137723b2f1a31b1", - "dweb:/ipfs/QmVMemJ4MSgi6y9NxDdSeB6QbJRtCWojJNxzs3CRLT56EA" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/test.sol": { - "keccak256": "0x8758531bbac3972efcf1fa46383dbe1d276406fe527bc7abb2f236486278e83b", - "urls": [ - "bzz-raw://1f64264d61506847acf8761e84aff690cebe830958eac00bac7924d8be569240", - "dweb:/ipfs/QmSekDJvJ82MZAmr63n7YvfLzQ7gS4NLSHPmHL3GN3rw8k" - ], - "license": "GPL-3.0-or-later" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Base.sol": { - "keccak256": "0x4ff1a785311017d1eedb1b4737956fa383067ad34eb439abfec1d989754dde1c", - "urls": [ - "bzz-raw://f553622969b9fdb930246704a4c10dfaee6b1a4468c142fa7eb9dc292a438224", - "dweb:/ipfs/QmcxqHnqdQsMVtgsfH9VNLmZ3g7GhgNagfq7yvNCDcCHFK" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdAssertions.sol": { - "keccak256": "0x1a0dee4d8b2c81e9318e87dd85ef009467ebf7dba6575530d1fce94d34dbae60", - "urls": [ - "bzz-raw://ddd790c86ddde1013d1f7a552a80168eacf2e9244077f96799180644ad523a5b", - "dweb:/ipfs/QmYinBFt9uEVFXP9ytT9CDoNpzWieQVgLWRFRNiypMzJaL" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdChains.sol": { - "keccak256": "0x598b85609125830885b8fb54a18f447d04f8dd799aca3de81baef35eb6b783c0", - "urls": [ - "bzz-raw://c9c128aae4f5668d8c8f71e9e6d9379d8451b8713d139cb66a02d23bc1c75f69", - "dweb:/ipfs/QmVRihXHWi2yg9CcAhzKf63Y7m6gWz4P1giGMhXUHT3DFu" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdCheats.sol": { - "keccak256": "0xb72f3519e0bf7d31df5d68557525f4fc55d861c3fb3b0f7793144ef7c94cbeb7", - "urls": [ - "bzz-raw://f3456d0f78e6f61203fa7871ba2df0d35925f10db3baee14be623ce2a35b84e2", - "dweb:/ipfs/QmWE6QQSBvJifHMraisBTrf1x4WCwrDoTPLX8UKajTiApc" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdError.sol": { - "keccak256": "0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77", - "urls": [ - "bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6", - "dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdInvariant.sol": { - "keccak256": "0x67299bfacd77fddfa2a67b8e2b901e0e333618a4975fb94850b07475e51f6de6", - "urls": [ - "bzz-raw://1b61121d310f4053ce344b345b4a9ccf43b059daf9097ec2647f594beaca896d", - "dweb:/ipfs/QmZUCoTtXBM9zfAZVbj2dFPPnKaV1CSZzXE7zictyg3Gfz" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdJson.sol": { - "keccak256": "0x8f914dbd016bd0e318fe2b8bd556fbc8256c7cddc24e3e4fcb9f3c1c1935592d", - "urls": [ - "bzz-raw://19e704df493dde38323303b07d18cadfeb4dcadf1ddc2301add4aea9474fbb5e", - "dweb:/ipfs/QmZasuGiLK8LHwWtvpqEBxUR6QFY6GdzLMTJ9q7CMf8PNZ" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdMath.sol": { - "keccak256": "0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2", - "urls": [ - "bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92", - "dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdStorage.sol": { - "keccak256": "0x4298f3f4cedaedb07029820b1daad2c03af45379559392201f7bf3ec71105811", - "urls": [ - "bzz-raw://6e062f36d8d1ae3c383ef8975757926eaa9c4de3a92b5f1fe2d12748bcd8db32", - "dweb:/ipfs/QmcWkv3ia5Ew4DZNcudMNSTNXZ3W2QiXTZunRd44e9BT8z" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdStyle.sol": { - "keccak256": "0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d", - "urls": [ - "bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8", - "dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdUtils.sol": { - "keccak256": "0x502b18a4becda6ecd91fa8b419d8034946bfa80e6cc7f6497f51f8565bfadae0", - "urls": [ - "bzz-raw://bf499ee483a1dfd02023d4ce78ed4029a49794ccd5b849aaab912faea0d2ba61", - "dweb:/ipfs/QmP6hwNZW7sYbQK9fBzuZWxfLm6Swx2nKzvZ54qWNqQkzX" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Test.sol": { - "keccak256": "0x39b1729d5868c8e94ab8af16751eb500a17fe3870dc627d2b7ddcd5df18d7ad0", - "urls": [ - "bzz-raw://1568c82aff125cc4b0fc168be9d67ac313f469a3c7405c5493caecaaaecfb765", - "dweb:/ipfs/QmXByuZReJsdu1jDcxj1FcmpcUnzoBcqybn9kWgDAECWri" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Vm.sol": { - "keccak256": "0x87ba9f3edc254e529db9e3129c954391adcc7fc8574203767979d8d2f1e724b9", - "urls": [ - "bzz-raw://4d16c08d80d9f2869deb6350642cf5af624d21fce6b3b023abbcdedc62e195fe", - "dweb:/ipfs/QmURpnnFECPKt3i7P7jQRZpr4ZBXjRGcZ9KzcbKzsgYR2W" - ], - "license": "MIT OR Apache-2.0" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/console.sol": { - "keccak256": "0x91d5413c2434ca58fd278b6e1e79fd98d10c83931cc2596a6038eee4daeb34ba", - "urls": [ - "bzz-raw://91ccea707361e48b9b7a161fe81f496b9932bc471e9c4e4e1e9c283f2453cc70", - "dweb:/ipfs/QmcB66sZhQ6Kz7MUHcLE78YXRUZxoZnnxZjN6yATsbB2ec" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/console2.sol": { - "keccak256": "0x954646445d1014c3cd85c7918f5e7adeeca5ee44b68c00bafa237e597a4e35ea", - "urls": [ - "bzz-raw://516fa3be52da4763147175bfba4be0aa011fadbb0c1afb01f97265bd4cee7973", - "dweb:/ipfs/QmdixAyMJefx7qePChgdxcBH5MxhmN7vsqPuPLx3CgrVmF" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/interfaces/IMulticall3.sol": { - "keccak256": "0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a", - "urls": [ - "bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0", - "dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/mocks/MockERC20.sol": { - "keccak256": "0xd8703f49411737ecf8d411f8fa66b2bf0ef972ba28b7a4adf1748c63df1bf682", - "urls": [ - "bzz-raw://b7c10a6b8112f6fe3cdccb6240ecd382765216b1a82e9a86a0fec8f5e09eadd1", - "dweb:/ipfs/QmdRvPCU4RkjMHsTu3Ric1ZEF1AWDNLp78unFC5aWP17xq" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/mocks/MockERC721.sol": { - "keccak256": "0xa24468244abb66e663fb7eee6463cb518eb9a7c14e1071548ff564cca825bbca", - "urls": [ - "bzz-raw://145585a2194aa6e2d30edfe709ef2814e20b1b4540469aa6a8f50c841fcb9070", - "dweb:/ipfs/QmZrwbvtpbtTxqbW5phUrwb3F1tBiPSQc6jZJAXBfsBsAh" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/safeconsole.sol": { - "keccak256": "0xbaf41fdc6c54297e7cd8250e48b0f20eaac918e342a1028cef3f9a52ac086381", - "urls": [ - "bzz-raw://a500ad81dea226f9910e6b50f99a9ff930105e393a692cbfb2185e4cdb4424ae", - "dweb:/ipfs/QmVbUQpXNMmMWRiy4FvBNczzq46BMGfUoBikvSHNiCxVTq" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/access/AccessControl.sol": { - "keccak256": "0xa0e92d42942f4f57c5be50568dac11e9d00c93efcb458026e18d2d9b9b2e7308", - "urls": [ - "bzz-raw://46326c0bb1e296b67185e81c918e0b40501b8b6386165855df0a3f3c634b6a80", - "dweb:/ipfs/QmTwyrDYtsxsk6pymJTK94PnEpzsmkpUxFuzEiakDopy4Z" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/access/IAccessControl.sol": { - "keccak256": "0xc1c2a7f1563b77050dc6d507db9f4ada5d042c1f6a9ddbffdc49c77cdc0a1606", - "urls": [ - "bzz-raw://fd54abb96a6156d9a761f6fdad1d3004bc48d2d4fce47f40a3f91a7ae83fc3a1", - "dweb:/ipfs/QmUrFSGkTDJ7WaZ6qPVVe3Gn5uN2viPb7x7QQ35UX4DofX" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/access/Ownable.sol": { - "keccak256": "0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb", - "urls": [ - "bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6", - "dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol": { - "keccak256": "0x9b6b3e7803bc5f2f8cd7ad57db8ac1def61a9930a5a3107df4882e028a9605d7", - "urls": [ - "bzz-raw://da62d6be1f5c6edf577f0cb45666a8aa9c2086a4bac87d95d65f02e2f4c36a4b", - "dweb:/ipfs/QmNkpvBpoCMvX8JwAFNSc5XxJ2q5BXJpL5L1txb4QkqVFF" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/interfaces/IERC165.sol": { - "keccak256": "0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724", - "urls": [ - "bzz-raw://11fea9f8bc98949ac6709f0c1699db7430d2948137aa94d5a9e95a91f61a710a", - "dweb:/ipfs/QmQdfRXxQjwP6yn3DVo1GHPpriKNcFghSPi94Z1oKEFUNS" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/interfaces/IERC20.sol": { - "keccak256": "0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c", - "urls": [ - "bzz-raw://a2608291cb038b388d80b79a06b6118a42f7894ff67b7da10ec0dbbf5b2973ba", - "dweb:/ipfs/QmWohqcBLbcxmA4eGPhZDXe5RYMMEEpFq22nfkaUMvTfw1" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/interfaces/draft-IERC6093.sol": { - "keccak256": "0x880da465c203cec76b10d72dbd87c80f387df4102274f23eea1f9c9b0918792b", - "urls": [ - "bzz-raw://399594cd8bb0143bc9e55e0f1d071d0d8c850a394fb7a319d50edd55d9ed822b", - "dweb:/ipfs/QmbPZzgtT6LEm9CMqWfagQFwETbV1ztpECBB1DtQHrKiRz" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/token/ERC20/ERC20.sol": { - "keccak256": "0xbf61ab2ae1d575a17ea58fbb99ca232baddcc4e0eeea180e84cbc74b0c348b31", - "urls": [ - "bzz-raw://4e0968705bad99747a8e5288aa008678c2be2f471f919dce3925a3cc4f1dee09", - "dweb:/ipfs/QmbAFnCQfo4tw6ssfQSjhA5LzwHWNNryXN8bX7ty8jiqqn" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol": { - "keccak256": "0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7", - "urls": [ - "bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db", - "dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol": { - "keccak256": "0x70f2f713b13b7ce4610bcd0ac9fec0f3cc43693b043abcb8dc40a42a726eb330", - "urls": [ - "bzz-raw://c13d13304ac79a83ab1c30168967d19e2203342ebbd6a9bbce4db7550522dcbf", - "dweb:/ipfs/QmeN5jKMN2vw5bhacr6tkg78afbTTZUeaacNHqjWt4Ew1r" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol": { - "keccak256": "0xca2ae13e0610f6a99238dd00b97bd786bc92732dae6d6b9d61f573ec51018310", - "urls": [ - "bzz-raw://75f8c71ce0c91c40dd5f249ace0b7d8270f8f1767231bcf71490f7157d6ba862", - "dweb:/ipfs/QmYXgxeDyFHvz3JsXxLEYN6GNUR44ThHeFj5XkpkgMoG4w" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Address.sol": { - "keccak256": "0x9d8da059267bac779a2dbbb9a26c2acf00ca83085e105d62d5d4ef96054a47f5", - "urls": [ - "bzz-raw://c78e2aa4313323cecd1ef12a8d6265b96beee1a199923abf55d9a2a9e291ad23", - "dweb:/ipfs/QmUTs2KStXucZezzFo3EYeqYu47utu56qrF7jj1Gue65vb" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Context.sol": { - "keccak256": "0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2", - "urls": [ - "bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12", - "dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Errors.sol": { - "keccak256": "0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123", - "urls": [ - "bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf", - "dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Panic.sol": { - "keccak256": "0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a", - "urls": [ - "bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a", - "dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Pausable.sol": { - "keccak256": "0xb2e5f50762c27fb4b123e3619c3c02bdcba5e515309382e5bfb6f7d6486510bd", - "urls": [ - "bzz-raw://1a4b83328c98d518a2699c2cbe9e9b055e78aa57fa8639f1b88deb8b3750b5dc", - "dweb:/ipfs/QmXdcYj5v7zQxXFPULShHkR5p4Wa2zYuupbHnFdV3cHYtc" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/ReentrancyGuard.sol": { - "keccak256": "0x11a5a79827df29e915a12740caf62fe21ebe27c08c9ae3e09abe9ee3ba3866d3", - "urls": [ - "bzz-raw://3cf0c69ab827e3251db9ee6a50647d62c90ba580a4d7bbff21f2bea39e7b2f4a", - "dweb:/ipfs/QmZiKwtKU1SBX4RGfQtY7PZfiapbbu6SZ9vizGQD9UHjRA" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/cryptography/ECDSA.sol": { - "keccak256": "0x69f54c02b7d81d505910ec198c11ed4c6a728418a868b906b4a0cf29946fda84", - "urls": [ - "bzz-raw://8e25e4bdb7ae1f21d23bfee996e22736fc0ab44cfabedac82a757b1edc5623b9", - "dweb:/ipfs/QmQdWQvB6JCP9ZMbzi8EvQ1PTETqkcTWrbcVurS7DKpa5n" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/introspection/ERC165.sol": { - "keccak256": "0xddce8e17e3d3f9ed818b4f4c4478a8262aab8b11ed322f1bf5ed705bb4bd97fa", - "urls": [ - "bzz-raw://8084aa71a4cc7d2980972412a88fe4f114869faea3fefa5436431644eb5c0287", - "dweb:/ipfs/Qmbqfs5dRdPvHVKY8kTaeyc65NdqXRQwRK7h9s5UJEhD1p" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol": { - "keccak256": "0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8", - "urls": [ - "bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621", - "dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/math/SafeCast.sol": { - "keccak256": "0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54", - "urls": [ - "bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8", - "dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/structs/DoubleEndedQueue.sol": { - "keccak256": "0x1e1d74658d7f4eab3d4f8fb0c6c5953bc5f629d9425e978d557dabff7b58b217", - "urls": [ - "bzz-raw://be0175d00008d452d3d553890f73a3d5d51dff4372f720336c8b98f26822fcdb", - "dweb:/ipfs/QmUkE8g5xPExWoSAKwdi5ww1qJJVtEWtjSF93G2LMQkgD3" - ], - "license": "MIT" - }, - "node_modules/solidity-bytes-utils/contracts/BytesLib.sol": { - "keccak256": "0xa5b10f04797d5a10a9ba07855108b6bd695940e6a3d128927b2f74a0d359868a", - "urls": [ - "bzz-raw://a38d7680aacbb18dae659876b396b73bcc8f759672213f8a0efc4129e2648535", - "dweb:/ipfs/QmfKFnwpTEGAnbRnZxMuv3mRCG9S9WMjFhFL23bftBT2Jq" - ], - "license": "Unlicense" - }, - "test/evm/foundry/MyOFT.t.sol": { - "keccak256": "0xda676258c3edd0f68b893d09b7293aa17676a76e026e314cbfdea21ab664cc79", - "urls": [ - "bzz-raw://c731a6f521f994ea978a75ed92868f83df14a178e63f6c07edd70346a94646ec", - "dweb:/ipfs/Qmf5d1soEabrpT8MFKaoMrqdgk4P2AGnD2jXEeVEPJd8TK" - ], - "license": "UNLICENSED" - }, - "test/evm/mocks/ERC20Mock.sol": { - "keccak256": "0x9134f00d206167b482f4bdad5b443b990c4ec04cc86c523373831750bd841a2e", - "urls": [ - "bzz-raw://06605d3fdabb46937c1a2098a4caa4a5e5da8c110f52c5f6a7b42060e33d4127", - "dweb:/ipfs/QmZSbT8rU5HhcgLQm9VWingv7HCdq4KxsTcEmqoG25qcQE" - ], - "license": "UNLICENSED" - }, - "test/evm/mocks/OFTComposerMock.sol": { - "keccak256": "0x9e3ca0772aa55c6352283e84d9062660f5e136c6a8c129051c00941f5bbec1f3", - "urls": [ - "bzz-raw://79ddb778928733c8a52ca6e4d79de24f8da935673f25c62f488627eb59bb97e6", - "dweb:/ipfs/QmR6cga173tuHGpVSEFoZYN89mPK2WenuAWpT5XRxyaFjX" - ], - "license": "UNLICENSED" - }, - "test/evm/mocks/OFTMock.sol": { - "keccak256": "0xff3044b693ecca8da9ac6604ac2c4103980531ff3a04f35ffde5f80671d1a340", - "urls": [ - "bzz-raw://705441e8b86f606e1553d6f77483c3cddfc389a26136d48d1b3869f02575d703", - "dweb:/ipfs/QmXLaXZh2DCGpsMymYb1kBQBbG3mTuDApDiNGUk2yHD219" - ], - "license": "UNLICENSED" - } - }, - "version": 1 - }, - "id": 128 -} diff --git a/examples/oft-movement/out/MyOFTMock.sol/MyOFTMock.json b/examples/oft-movement/out/MyOFTMock.sol/MyOFTMock.json deleted file mode 100644 index 391884bad..000000000 --- a/examples/oft-movement/out/MyOFTMock.sol/MyOFTMock.json +++ /dev/null @@ -1,2887 +0,0 @@ -{ - "abi": [ - { - "type": "constructor", - "inputs": [ - { "name": "_name", "type": "string", "internalType": "string" }, - { "name": "_symbol", "type": "string", "internalType": "string" }, - { "name": "_lzEndpoint", "type": "address", "internalType": "address" }, - { "name": "_delegate", "type": "address", "internalType": "address" } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "SEND", - "inputs": [], - "outputs": [{ "name": "", "type": "uint16", "internalType": "uint16" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "SEND_AND_CALL", - "inputs": [], - "outputs": [{ "name": "", "type": "uint16", "internalType": "uint16" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "allowInitializePath", - "inputs": [ - { - "name": "origin", - "type": "tuple", - "internalType": "struct Origin", - "components": [ - { "name": "srcEid", "type": "uint32", "internalType": "uint32" }, - { "name": "sender", "type": "bytes32", "internalType": "bytes32" }, - { "name": "nonce", "type": "uint64", "internalType": "uint64" } - ] - } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "allowance", - "inputs": [ - { "name": "owner", "type": "address", "internalType": "address" }, - { "name": "spender", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "approvalRequired", - "inputs": [], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "approve", - "inputs": [ - { "name": "spender", "type": "address", "internalType": "address" }, - { "name": "value", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "balanceOf", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "combineOptions", - "inputs": [ - { "name": "_eid", "type": "uint32", "internalType": "uint32" }, - { "name": "_msgType", "type": "uint16", "internalType": "uint16" }, - { "name": "_extraOptions", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [{ "name": "", "type": "bytes", "internalType": "bytes" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "decimalConversionRate", - "inputs": [], - "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "decimals", - "inputs": [], - "outputs": [{ "name": "", "type": "uint8", "internalType": "uint8" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "endpoint", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "contract ILayerZeroEndpointV2" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "enforcedOptions", - "inputs": [ - { "name": "eid", "type": "uint32", "internalType": "uint32" }, - { "name": "msgType", "type": "uint16", "internalType": "uint16" } - ], - "outputs": [ - { "name": "enforcedOption", "type": "bytes", "internalType": "bytes" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "isComposeMsgSender", - "inputs": [ - { - "name": "", - "type": "tuple", - "internalType": "struct Origin", - "components": [ - { "name": "srcEid", "type": "uint32", "internalType": "uint32" }, - { "name": "sender", "type": "bytes32", "internalType": "bytes32" }, - { "name": "nonce", "type": "uint64", "internalType": "uint64" } - ] - }, - { "name": "", "type": "bytes", "internalType": "bytes" }, - { "name": "_sender", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "isPeer", - "inputs": [ - { "name": "_eid", "type": "uint32", "internalType": "uint32" }, - { "name": "_peer", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "lzReceive", - "inputs": [ - { - "name": "_origin", - "type": "tuple", - "internalType": "struct Origin", - "components": [ - { "name": "srcEid", "type": "uint32", "internalType": "uint32" }, - { "name": "sender", "type": "bytes32", "internalType": "bytes32" }, - { "name": "nonce", "type": "uint64", "internalType": "uint64" } - ] - }, - { "name": "_guid", "type": "bytes32", "internalType": "bytes32" }, - { "name": "_message", "type": "bytes", "internalType": "bytes" }, - { "name": "_executor", "type": "address", "internalType": "address" }, - { "name": "_extraData", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [], - "stateMutability": "payable" - }, - { - "type": "function", - "name": "lzReceiveAndRevert", - "inputs": [ - { - "name": "_packets", - "type": "tuple[]", - "internalType": "struct InboundPacket[]", - "components": [ - { - "name": "origin", - "type": "tuple", - "internalType": "struct Origin", - "components": [ - { - "name": "srcEid", - "type": "uint32", - "internalType": "uint32" - }, - { - "name": "sender", - "type": "bytes32", - "internalType": "bytes32" - }, - { "name": "nonce", "type": "uint64", "internalType": "uint64" } - ] - }, - { "name": "dstEid", "type": "uint32", "internalType": "uint32" }, - { - "name": "receiver", - "type": "address", - "internalType": "address" - }, - { "name": "guid", "type": "bytes32", "internalType": "bytes32" }, - { "name": "value", "type": "uint256", "internalType": "uint256" }, - { - "name": "executor", - "type": "address", - "internalType": "address" - }, - { "name": "message", "type": "bytes", "internalType": "bytes" }, - { "name": "extraData", "type": "bytes", "internalType": "bytes" } - ] - } - ], - "outputs": [], - "stateMutability": "payable" - }, - { - "type": "function", - "name": "lzReceiveSimulate", - "inputs": [ - { - "name": "_origin", - "type": "tuple", - "internalType": "struct Origin", - "components": [ - { "name": "srcEid", "type": "uint32", "internalType": "uint32" }, - { "name": "sender", "type": "bytes32", "internalType": "bytes32" }, - { "name": "nonce", "type": "uint64", "internalType": "uint64" } - ] - }, - { "name": "_guid", "type": "bytes32", "internalType": "bytes32" }, - { "name": "_message", "type": "bytes", "internalType": "bytes" }, - { "name": "_executor", "type": "address", "internalType": "address" }, - { "name": "_extraData", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [], - "stateMutability": "payable" - }, - { - "type": "function", - "name": "mint", - "inputs": [ - { "name": "_to", "type": "address", "internalType": "address" }, - { "name": "_amount", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "msgInspector", - "inputs": [], - "outputs": [{ "name": "", "type": "address", "internalType": "address" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "name", - "inputs": [], - "outputs": [{ "name": "", "type": "string", "internalType": "string" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "nextNonce", - "inputs": [ - { "name": "", "type": "uint32", "internalType": "uint32" }, - { "name": "", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [ - { "name": "nonce", "type": "uint64", "internalType": "uint64" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "oApp", - "inputs": [], - "outputs": [{ "name": "", "type": "address", "internalType": "address" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "oAppVersion", - "inputs": [], - "outputs": [ - { "name": "senderVersion", "type": "uint64", "internalType": "uint64" }, - { - "name": "receiverVersion", - "type": "uint64", - "internalType": "uint64" - } - ], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "oftVersion", - "inputs": [], - "outputs": [ - { "name": "interfaceId", "type": "bytes4", "internalType": "bytes4" }, - { "name": "version", "type": "uint64", "internalType": "uint64" } - ], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "owner", - "inputs": [], - "outputs": [{ "name": "", "type": "address", "internalType": "address" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "peers", - "inputs": [{ "name": "eid", "type": "uint32", "internalType": "uint32" }], - "outputs": [ - { "name": "peer", "type": "bytes32", "internalType": "bytes32" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "preCrime", - "inputs": [], - "outputs": [{ "name": "", "type": "address", "internalType": "address" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "quoteOFT", - "inputs": [ - { - "name": "_sendParam", - "type": "tuple", - "internalType": "struct SendParam", - "components": [ - { "name": "dstEid", "type": "uint32", "internalType": "uint32" }, - { "name": "to", "type": "bytes32", "internalType": "bytes32" }, - { - "name": "amountLD", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "minAmountLD", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "extraOptions", - "type": "bytes", - "internalType": "bytes" - }, - { "name": "composeMsg", "type": "bytes", "internalType": "bytes" }, - { "name": "oftCmd", "type": "bytes", "internalType": "bytes" } - ] - } - ], - "outputs": [ - { - "name": "oftLimit", - "type": "tuple", - "internalType": "struct OFTLimit", - "components": [ - { - "name": "minAmountLD", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "maxAmountLD", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "name": "oftFeeDetails", - "type": "tuple[]", - "internalType": "struct OFTFeeDetail[]", - "components": [ - { - "name": "feeAmountLD", - "type": "int256", - "internalType": "int256" - }, - { - "name": "description", - "type": "string", - "internalType": "string" - } - ] - }, - { - "name": "oftReceipt", - "type": "tuple", - "internalType": "struct OFTReceipt", - "components": [ - { - "name": "amountSentLD", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "amountReceivedLD", - "type": "uint256", - "internalType": "uint256" - } - ] - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "quoteSend", - "inputs": [ - { - "name": "_sendParam", - "type": "tuple", - "internalType": "struct SendParam", - "components": [ - { "name": "dstEid", "type": "uint32", "internalType": "uint32" }, - { "name": "to", "type": "bytes32", "internalType": "bytes32" }, - { - "name": "amountLD", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "minAmountLD", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "extraOptions", - "type": "bytes", - "internalType": "bytes" - }, - { "name": "composeMsg", "type": "bytes", "internalType": "bytes" }, - { "name": "oftCmd", "type": "bytes", "internalType": "bytes" } - ] - }, - { "name": "_payInLzToken", "type": "bool", "internalType": "bool" } - ], - "outputs": [ - { - "name": "msgFee", - "type": "tuple", - "internalType": "struct MessagingFee", - "components": [ - { - "name": "nativeFee", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "lzTokenFee", - "type": "uint256", - "internalType": "uint256" - } - ] - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "renounceOwnership", - "inputs": [], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "send", - "inputs": [ - { - "name": "_sendParam", - "type": "tuple", - "internalType": "struct SendParam", - "components": [ - { "name": "dstEid", "type": "uint32", "internalType": "uint32" }, - { "name": "to", "type": "bytes32", "internalType": "bytes32" }, - { - "name": "amountLD", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "minAmountLD", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "extraOptions", - "type": "bytes", - "internalType": "bytes" - }, - { "name": "composeMsg", "type": "bytes", "internalType": "bytes" }, - { "name": "oftCmd", "type": "bytes", "internalType": "bytes" } - ] - }, - { - "name": "_fee", - "type": "tuple", - "internalType": "struct MessagingFee", - "components": [ - { - "name": "nativeFee", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "lzTokenFee", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "name": "_refundAddress", - "type": "address", - "internalType": "address" - } - ], - "outputs": [ - { - "name": "msgReceipt", - "type": "tuple", - "internalType": "struct MessagingReceipt", - "components": [ - { "name": "guid", "type": "bytes32", "internalType": "bytes32" }, - { "name": "nonce", "type": "uint64", "internalType": "uint64" }, - { - "name": "fee", - "type": "tuple", - "internalType": "struct MessagingFee", - "components": [ - { - "name": "nativeFee", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "lzTokenFee", - "type": "uint256", - "internalType": "uint256" - } - ] - } - ] - }, - { - "name": "oftReceipt", - "type": "tuple", - "internalType": "struct OFTReceipt", - "components": [ - { - "name": "amountSentLD", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "amountReceivedLD", - "type": "uint256", - "internalType": "uint256" - } - ] - } - ], - "stateMutability": "payable" - }, - { - "type": "function", - "name": "setDelegate", - "inputs": [ - { "name": "_delegate", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setEnforcedOptions", - "inputs": [ - { - "name": "_enforcedOptions", - "type": "tuple[]", - "internalType": "struct EnforcedOptionParam[]", - "components": [ - { "name": "eid", "type": "uint32", "internalType": "uint32" }, - { "name": "msgType", "type": "uint16", "internalType": "uint16" }, - { "name": "options", "type": "bytes", "internalType": "bytes" } - ] - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setMsgInspector", - "inputs": [ - { - "name": "_msgInspector", - "type": "address", - "internalType": "address" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setPeer", - "inputs": [ - { "name": "_eid", "type": "uint32", "internalType": "uint32" }, - { "name": "_peer", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setPreCrime", - "inputs": [ - { "name": "_preCrime", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "sharedDecimals", - "inputs": [], - "outputs": [{ "name": "", "type": "uint8", "internalType": "uint8" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "symbol", - "inputs": [], - "outputs": [{ "name": "", "type": "string", "internalType": "string" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "token", - "inputs": [], - "outputs": [{ "name": "", "type": "address", "internalType": "address" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "totalSupply", - "inputs": [], - "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "transfer", - "inputs": [ - { "name": "to", "type": "address", "internalType": "address" }, - { "name": "value", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "transferFrom", - "inputs": [ - { "name": "from", "type": "address", "internalType": "address" }, - { "name": "to", "type": "address", "internalType": "address" }, - { "name": "value", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "transferOwnership", - "inputs": [ - { "name": "newOwner", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "event", - "name": "Approval", - "inputs": [ - { - "name": "owner", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "spender", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "value", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "EnforcedOptionSet", - "inputs": [ - { - "name": "_enforcedOptions", - "type": "tuple[]", - "indexed": false, - "internalType": "struct EnforcedOptionParam[]", - "components": [ - { "name": "eid", "type": "uint32", "internalType": "uint32" }, - { "name": "msgType", "type": "uint16", "internalType": "uint16" }, - { "name": "options", "type": "bytes", "internalType": "bytes" } - ] - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "MsgInspectorSet", - "inputs": [ - { - "name": "inspector", - "type": "address", - "indexed": false, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "OFTReceived", - "inputs": [ - { - "name": "guid", - "type": "bytes32", - "indexed": true, - "internalType": "bytes32" - }, - { - "name": "srcEid", - "type": "uint32", - "indexed": false, - "internalType": "uint32" - }, - { - "name": "toAddress", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "amountReceivedLD", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "OFTSent", - "inputs": [ - { - "name": "guid", - "type": "bytes32", - "indexed": true, - "internalType": "bytes32" - }, - { - "name": "dstEid", - "type": "uint32", - "indexed": false, - "internalType": "uint32" - }, - { - "name": "fromAddress", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "amountSentLD", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - }, - { - "name": "amountReceivedLD", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "OwnershipTransferred", - "inputs": [ - { - "name": "previousOwner", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "newOwner", - "type": "address", - "indexed": true, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "PeerSet", - "inputs": [ - { - "name": "eid", - "type": "uint32", - "indexed": false, - "internalType": "uint32" - }, - { - "name": "peer", - "type": "bytes32", - "indexed": false, - "internalType": "bytes32" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "PreCrimeSet", - "inputs": [ - { - "name": "preCrimeAddress", - "type": "address", - "indexed": false, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "Transfer", - "inputs": [ - { - "name": "from", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "to", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "value", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "error", - "name": "ERC20InsufficientAllowance", - "inputs": [ - { "name": "spender", "type": "address", "internalType": "address" }, - { "name": "allowance", "type": "uint256", "internalType": "uint256" }, - { "name": "needed", "type": "uint256", "internalType": "uint256" } - ] - }, - { - "type": "error", - "name": "ERC20InsufficientBalance", - "inputs": [ - { "name": "sender", "type": "address", "internalType": "address" }, - { "name": "balance", "type": "uint256", "internalType": "uint256" }, - { "name": "needed", "type": "uint256", "internalType": "uint256" } - ] - }, - { - "type": "error", - "name": "ERC20InvalidApprover", - "inputs": [ - { "name": "approver", "type": "address", "internalType": "address" } - ] - }, - { - "type": "error", - "name": "ERC20InvalidReceiver", - "inputs": [ - { "name": "receiver", "type": "address", "internalType": "address" } - ] - }, - { - "type": "error", - "name": "ERC20InvalidSender", - "inputs": [ - { "name": "sender", "type": "address", "internalType": "address" } - ] - }, - { - "type": "error", - "name": "ERC20InvalidSpender", - "inputs": [ - { "name": "spender", "type": "address", "internalType": "address" } - ] - }, - { "type": "error", "name": "InvalidDelegate", "inputs": [] }, - { "type": "error", "name": "InvalidEndpointCall", "inputs": [] }, - { "type": "error", "name": "InvalidLocalDecimals", "inputs": [] }, - { - "type": "error", - "name": "InvalidOptions", - "inputs": [ - { "name": "options", "type": "bytes", "internalType": "bytes" } - ] - }, - { "type": "error", "name": "LzTokenUnavailable", "inputs": [] }, - { - "type": "error", - "name": "NoPeer", - "inputs": [{ "name": "eid", "type": "uint32", "internalType": "uint32" }] - }, - { - "type": "error", - "name": "NotEnoughNative", - "inputs": [ - { "name": "msgValue", "type": "uint256", "internalType": "uint256" } - ] - }, - { - "type": "error", - "name": "OnlyEndpoint", - "inputs": [ - { "name": "addr", "type": "address", "internalType": "address" } - ] - }, - { - "type": "error", - "name": "OnlyPeer", - "inputs": [ - { "name": "eid", "type": "uint32", "internalType": "uint32" }, - { "name": "sender", "type": "bytes32", "internalType": "bytes32" } - ] - }, - { "type": "error", "name": "OnlySelf", "inputs": [] }, - { - "type": "error", - "name": "OwnableInvalidOwner", - "inputs": [ - { "name": "owner", "type": "address", "internalType": "address" } - ] - }, - { - "type": "error", - "name": "OwnableUnauthorizedAccount", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ] - }, - { - "type": "error", - "name": "SafeERC20FailedOperation", - "inputs": [ - { "name": "token", "type": "address", "internalType": "address" } - ] - }, - { - "type": "error", - "name": "SimulationResult", - "inputs": [{ "name": "result", "type": "bytes", "internalType": "bytes" }] - }, - { - "type": "error", - "name": "SlippageExceeded", - "inputs": [ - { "name": "amountLD", "type": "uint256", "internalType": "uint256" }, - { "name": "minAmountLD", "type": "uint256", "internalType": "uint256" } - ] - } - ], - "bytecode": { - "object": "0x60c06040523480156200001157600080fd5b50604051620036a7380380620036a78339810160408190526200003491620002da565b8383838383838383838360128484818181818d6001600160a01b0381166200007657604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b6200008181620001a0565b506001600160a01b038083166080528116620000b057604051632d618d8160e21b815260040160405180910390fd5b60805160405163ca5eb5e160e01b81526001600160a01b0383811660048301529091169063ca5eb5e190602401600060405180830381600087803b158015620000f857600080fd5b505af11580156200010d573d6000803e3d6000fd5b505050505050505062000125620001f060201b60201c565b60ff168360ff1610156200014c576040516301e9714b60e41b815260040160405180910390fd5b620001596006846200037f565b6200016690600a6200049e565b60a05250600891506200017c9050838262000547565b5060096200018b828262000547565b50505050505050505050505050505062000613565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600690565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200021d57600080fd5b81516001600160401b03808211156200023a576200023a620001f5565b604051601f8301601f19908116603f01168101908282118183101715620002655762000265620001f5565b81604052838152602092508660208588010111156200028357600080fd5b600091505b83821015620002a7578582018301518183018401529082019062000288565b6000602085830101528094505050505092915050565b80516001600160a01b0381168114620002d557600080fd5b919050565b60008060008060808587031215620002f157600080fd5b84516001600160401b03808211156200030957600080fd5b62000317888389016200020b565b955060208701519150808211156200032e57600080fd5b506200033d878288016200020b565b9350506200034e60408601620002bd565b91506200035e60608601620002bd565b905092959194509250565b634e487b7160e01b600052601160045260246000fd5b60ff82811682821603908111156200039b576200039b62000369565b92915050565b600181815b80851115620003e2578160001904821115620003c657620003c662000369565b80851615620003d457918102915b93841c9390800290620003a6565b509250929050565b600082620003fb575060016200039b565b816200040a575060006200039b565b81600181146200042357600281146200042e576200044e565b60019150506200039b565b60ff84111562000442576200044262000369565b50506001821b6200039b565b5060208310610133831016604e8410600b841016171562000473575081810a6200039b565b6200047f8383620003a1565b806000190482111562000496576200049662000369565b029392505050565b6000620004af60ff841683620003ea565b9392505050565b600181811c90821680620004cb57607f821691505b602082108103620004ec57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000542576000816000526020600020601f850160051c810160208610156200051d5750805b601f850160051c820191505b818110156200053e5782815560010162000529565b5050505b505050565b81516001600160401b03811115620005635762000563620001f5565b6200057b81620005748454620004b6565b84620004f2565b602080601f831160018114620005b357600084156200059a5750858301515b600019600386901b1c1916600185901b1785556200053e565b600085815260208120601f198616915b82811015620005e457888601518255948401946001909101908401620005c3565b5085821015620006035787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a0516130286200067f6000396000818161064901528181611a4b01528181611ac00152611cc4015260008181610508015281816109b80152818161101201528181611289015281816115f301528181611dbc01528181611ef60152611fad01526130286000f3fe60806040526004361061025c5760003560e01c8063715018a611610144578063bb0b6a53116100b6578063d045a0dc1161007a578063d045a0dc14610780578063d424388514610793578063dd62ed3e146107b3578063f2fde38b146107f9578063fc0c546a1461048c578063ff7bd03d1461081957600080fd5b8063bb0b6a53146106df578063bc70b3541461070c578063bd815db01461072c578063c7c7f5b31461073f578063ca5eb5e11461076057600080fd5b806395d89b411161010857806395d89b4114610622578063963efcaa146106375780639f68b9641461066b578063a9059cbb1461067f578063b731ea0a1461069f578063b98bd070146106bf57600080fd5b8063715018a6146105805780637d25a05e1461059557806382413eac146105d0578063857749b0146105f05780638da5cb5b1461060457600080fd5b806323b872dd116101dd57806352ae2879116101a157806352ae28791461048c5780635535d4611461049f5780635a0dfe4d146104bf5780635e280f11146104f65780636fc1b31e1461052a57806370a082311461054a57600080fd5b806323b872dd146103dd578063313ce567146103fd5780633400288b1461041f5780633b6f743b1461043f57806340c10f191461046c57600080fd5b8063134d4f2511610224578063134d4f2514610338578063156a0d0f1461036057806317442b701461038757806318160ddd146103a95780631f5e1334146103c857600080fd5b806306fdde0314610261578063095ea7b31461028c5780630d35b415146102bc578063111ecdad146102eb57806313137d6514610323575b600080fd5b34801561026d57600080fd5b50610276610839565b6040516102839190612125565b60405180910390f35b34801561029857600080fd5b506102ac6102a736600461214d565b6108cb565b6040519015158152602001610283565b3480156102c857600080fd5b506102dc6102d7366004612191565b6108e5565b604051610283939291906121c5565b3480156102f757600080fd5b5060045461030b906001600160a01b031681565b6040516001600160a01b039091168152602001610283565b6103366103313660046122b8565b6109b6565b005b34801561034457600080fd5b5061034d600281565b60405161ffff9091168152602001610283565b34801561036c57600080fd5b506040805162b9270b60e21b81526001602082015201610283565b34801561039357600080fd5b5060408051600181526002602082015201610283565b3480156103b557600080fd5b506007545b604051908152602001610283565b3480156103d457600080fd5b5061034d600181565b3480156103e957600080fd5b506102ac6103f8366004612357565b610a76565b34801561040957600080fd5b5060125b60405160ff9091168152602001610283565b34801561042b57600080fd5b5061033661043a3660046123b1565b610a9c565b34801561044b57600080fd5b5061045f61045a3660046123db565b610ab2565b604051610283919061242c565b34801561047857600080fd5b5061033661048736600461214d565b610b19565b34801561049857600080fd5b503061030b565b3480156104ab57600080fd5b506102766104ba366004612455565b610b23565b3480156104cb57600080fd5b506102ac6104da3660046123b1565b63ffffffff919091166000908152600160205260409020541490565b34801561050257600080fd5b5061030b7f000000000000000000000000000000000000000000000000000000000000000081565b34801561053657600080fd5b50610336610545366004612488565b610bc8565b34801561055657600080fd5b506103ba610565366004612488565b6001600160a01b031660009081526005602052604090205490565b34801561058c57600080fd5b50610336610c25565b3480156105a157600080fd5b506105b86105b03660046123b1565b600092915050565b6040516001600160401b039091168152602001610283565b3480156105dc57600080fd5b506102ac6105eb3660046124a5565b610c39565b3480156105fc57600080fd5b50600661040d565b34801561061057600080fd5b506000546001600160a01b031661030b565b34801561062e57600080fd5b50610276610c4e565b34801561064357600080fd5b506103ba7f000000000000000000000000000000000000000000000000000000000000000081565b34801561067757600080fd5b5060006102ac565b34801561068b57600080fd5b506102ac61069a36600461214d565b610c5d565b3480156106ab57600080fd5b5060025461030b906001600160a01b031681565b3480156106cb57600080fd5b506103366106da36600461254f565b610c6b565b3480156106eb57600080fd5b506103ba6106fa366004612590565b60016020526000908152604090205481565b34801561071857600080fd5b506102766107273660046125ab565b610c85565b61033661073a36600461254f565b610e2d565b61075261074d36600461260b565b610fb7565b604051610283929190612678565b34801561076c57600080fd5b5061033661077b366004612488565b610feb565b61033661078e3660046122b8565b611071565b34801561079f57600080fd5b506103366107ae366004612488565b6110a0565b3480156107bf57600080fd5b506103ba6107ce3660046126ca565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b34801561080557600080fd5b50610336610814366004612488565b6110f6565b34801561082557600080fd5b506102ac6108343660046126f8565b611134565b60606008805461084890612714565b80601f016020809104026020016040519081016040528092919081815260200182805461087490612714565b80156108c15780601f10610896576101008083540402835291602001916108c1565b820191906000526020600020905b8154815290600101906020018083116108a457829003601f168201915b5050505050905090565b6000336108d981858561116a565b60019150505b92915050565b60408051808201909152600080825260208201526060610918604051806040016040528060008152602001600081525090565b60408051808201825260008082526001600160401b03602080840182905284518381529081019094529195509182610973565b60408051808201909152600081526060602082015281526020019060019003908161094b5790505b509350600080610998604089013560608a013561099360208c018c612590565b61117c565b60408051808201909152918252602082015296989597505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163314610a06576040516391ac5e4f60e01b81523360048201526024015b60405180910390fd5b60208701803590610a2090610a1b908a612590565b6111b8565b14610a5e57610a326020880188612590565b60405163309afaf360e21b815263ffffffff9091166004820152602088013560248201526044016109fd565b610a6d878787878787876111f4565b50505050505050565b600033610a8485828561135b565b610a8f8585856113d9565b60019150505b9392505050565b610aa4611438565b610aae8282611465565b5050565b60408051808201909152600080825260208201526000610ae2604085013560608601356109936020880188612590565b915050600080610af286846114ba565b9092509050610b0f610b076020880188612590565b8383886115dd565b9695505050505050565b610aae82826116be565b600360209081526000928352604080842090915290825290208054610b4790612714565b80601f0160208091040260200160405190810160405280929190818152602001828054610b7390612714565b8015610bc05780601f10610b9557610100808354040283529160200191610bc0565b820191906000526020600020905b815481529060010190602001808311610ba357829003601f168201915b505050505081565b610bd0611438565b600480546001600160a01b0319166001600160a01b0383169081179091556040519081527ff0be4f1e87349231d80c36b33f9e8639658eeaf474014dee15a3e6a4d4414197906020015b60405180910390a150565b610c2d611438565b610c3760006116f4565b565b6001600160a01b03811630145b949350505050565b60606009805461084890612714565b6000336108d98185856113d9565b610c73611438565b610aae610c8082846127ff565b611744565b63ffffffff8416600090815260036020908152604080832061ffff87168452909152812080546060929190610cb990612714565b80601f0160208091040260200160405190810160405280929190818152602001828054610ce590612714565b8015610d325780601f10610d0757610100808354040283529160200191610d32565b820191906000526020600020905b815481529060010190602001808311610d1557829003601f168201915b505050505090508051600003610d825783838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929450610c469350505050565b6000839003610d92579050610c46565b60028310610e1057610dd984848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061184b92505050565b80610de78460028188612914565b604051602001610df99392919061293e565b604051602081830303815290604052915050610c46565b8383604051639a6d49cd60e01b81526004016109fd92919061298f565b60005b81811015610f365736838383818110610e4b57610e4b6129a3565b9050602002810190610e5d91906129b9565b9050610e90610e6f6020830183612590565b602083013563ffffffff919091166000908152600160205260409020541490565b610e9a5750610f2e565b3063d045a0dc60c08301358360a0810135610eb96101008301836129da565b610eca610100890160e08a01612488565b610ed86101208a018a6129da565b6040518963ffffffff1660e01b8152600401610efa9796959493929190612a35565b6000604051808303818588803b158015610f1357600080fd5b505af1158015610f27573d6000803e3d6000fd5b5050505050505b600101610e30565b50336001600160a01b0316638e9e70996040518163ffffffff1660e01b8152600401600060405180830381865afa158015610f75573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610f9d9190810190612abb565b604051638351eea760e01b81526004016109fd9190612125565b610fbf61208e565b6040805180820190915260008082526020820152610fde858585611877565b915091505b935093915050565b610ff3611438565b60405163ca5eb5e160e01b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063ca5eb5e190602401600060405180830381600087803b15801561105657600080fd5b505af115801561106a573d6000803e3d6000fd5b5050505050565b3330146110915760405163029a949d60e31b815260040160405180910390fd5b610a6d87878787878787610a5e565b6110a8611438565b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527fd48d879cef83a1c0bdda516f27b13ddb1b3f8bbac1c9e1511bb2a659c242776090602001610c1a565b6110fe611438565b6001600160a01b03811661112857604051631e4fbdf760e01b8152600060048201526024016109fd565b611131816116f4565b50565b600060208201803590600190839061114c9086612590565b63ffffffff1681526020810191909152604001600020541492915050565b6111778383836001611972565b505050565b60008061118885611a47565b915081905083811015610fe3576040516371c4efed60e01b815260048101829052602481018590526044016109fd565b63ffffffff8116600090815260016020526040812054806108df5760405163f6ff4fb760e01b815263ffffffff841660048201526024016109fd565b60006112066112038787611a7e565b90565b905060006112328261122061121b8a8a611a96565b611ab9565b61122d60208d018d612590565b611aee565b905060288611156112f957600061126f61125260608c0160408d01612b28565b61125f60208d018d612590565b8461126a8c8c611b16565b611b61565b604051633e5ac80960e11b81529091506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690637cb59012906112c59086908d906000908790600401612b45565b600060405180830381600087803b1580156112df57600080fd5b505af11580156112f3573d6000803e3d6000fd5b50505050505b6001600160a01b038216887fefed6d3500546b29533b128a29e3a94d70788727f0507505ac12eaf2e578fd9c61133260208d018d612590565b6040805163ffffffff9092168252602082018690520160405180910390a3505050505050505050565b6001600160a01b0383811660009081526006602090815260408083209386168352929052205460001981146113d357818110156113c457604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064016109fd565b6113d384848484036000611972565b50505050565b6001600160a01b03831661140357604051634b637e8f60e11b8152600060048201526024016109fd565b6001600160a01b03821661142d5760405163ec442f0560e01b8152600060048201526024016109fd565b611177838383611b93565b6000546001600160a01b03163314610c375760405163118cdaa760e01b81523360048201526024016109fd565b63ffffffff8216600081815260016020908152604091829020849055815192835282018390527f238399d427b947898edb290f5ff0f9109849b1c3ba196a42e35f00c50a54b98b910160405180910390a15050565b606080600061151785602001356114d086611cbd565b6114dd60a08901896129da565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611ce992505050565b909350905060008161152a57600161152d565b60025b905061154d61153f6020880188612590565b8261072760808a018a6129da565b6004549093506001600160a01b031680156115d35760405163043a78eb60e01b81526001600160a01b0382169063043a78eb906115909088908890600401612b76565b602060405180830381865afa1580156115ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115d19190612b9b565b505b5050509250929050565b60408051808201909152600080825260208201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ddc28c586040518060a001604052808863ffffffff168152602001611640896111b8565b8152602001878152602001868152602001851515815250306040518363ffffffff1660e01b8152600401611675929190612bb8565b6040805180830381865afa158015611691573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116b59190612c61565b95945050505050565b6001600160a01b0382166116e85760405163ec442f0560e01b8152600060048201526024016109fd565b610aae60008383611b93565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60005b815181101561181b57611776828281518110611765576117656129a3565b60200260200101516040015161184b565b818181518110611788576117886129a3565b602002602001015160400151600360008484815181106117aa576117aa6129a3565b60200260200101516000015163ffffffff1663ffffffff16815260200190815260200160002060008484815181106117e4576117e46129a3565b60200260200101516020015161ffff1661ffff16815260200190815260200160002090816118129190612ccd565b50600101611747565b507fbe4864a8e820971c0247f5992e2da559595f7bf076a21cb5928d443d2a13b67481604051610c1a9190612d8c565b600281015161ffff8116600314610aae5781604051639a6d49cd60e01b81526004016109fd9190612125565b61187f61208e565b60408051808201909152600080825260208201526000806118b633604089013560608a01356118b160208c018c612590565b611d63565b915091506000806118c789846114ba565b90925090506118f36118dc60208b018b612590565b83836118ed368d90038d018d612e17565b8b611d89565b60408051808201909152858152602080820186905282519298509096503391907f85496b760a4b7f8d66384b9df21b381f5d1b1e79f229a47aaf4c232edc2fe59a90611941908d018d612590565b6040805163ffffffff909216825260208201899052810187905260600160405180910390a350505050935093915050565b6001600160a01b03841661199c5760405163e602df0560e01b8152600060048201526024016109fd565b6001600160a01b0383166119c657604051634a1406b160e11b8152600060048201526024016109fd565b6001600160a01b03808516600090815260066020908152604080832093871683529290522082905580156113d357826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051611a3991815260200190565b60405180910390a350505050565b60007f0000000000000000000000000000000000000000000000000000000000000000611a748184612e5f565b6108df9190612e81565b6000611a8d6020828486612914565b610a9591612e98565b6000611aa6602860208486612914565b611aaf91612eb6565b60c01c9392505050565b60006108df7f00000000000000000000000000000000000000000000000000000000000000006001600160401b038416612e81565b60006001600160a01b038416611b045761dead93505b611b0e84846116be565b509092915050565b6060611b258260288186612914565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929695505050505050565b606084848484604051602001611b7a9493929190612ee6565b6040516020818303038152906040529050949350505050565b6001600160a01b038316611bbe578060076000828254611bb39190612f35565b90915550611c309050565b6001600160a01b03831660009081526005602052604090205481811015611c115760405163391434e360e21b81526001600160a01b038516600482015260248101829052604481018390526064016109fd565b6001600160a01b03841660009081526005602052604090209082900390555b6001600160a01b038216611c4c57600780548290039055611c6b565b6001600160a01b03821660009081526005602052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611cb091815260200190565b60405180910390a3505050565b60006108df7f000000000000000000000000000000000000000000000000000000000000000083612e5f565b8051606090151580611d32578484604051602001611d1e92919091825260c01b6001600160c01b031916602082015260280190565b604051602081830303815290604052611d59565b84843385604051602001611d499493929190612f48565b6040516020818303038152906040525b9150935093915050565b600080611d7185858561117c565b9092509050611d808683611e94565b94509492505050565b611d9161208e565b6000611da08460000151611eca565b602085015190915015611dba57611dba8460200151611ef2565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632637a450826040518060a001604052808b63ffffffff168152602001611e0a8c6111b8565b81526020018a815260200189815260200160008960200151111515815250866040518463ffffffff1660e01b8152600401611e46929190612bb8565b60806040518083038185885af1158015611e64573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611e899190612f8b565b979650505050505050565b6001600160a01b038216611ebe57604051634b637e8f60e11b8152600060048201526024016109fd565b610aae82600083611b93565b6000813414611eee576040516304fb820960e51b81523460048201526024016109fd565b5090565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e4fe1d946040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f769190612fd5565b90506001600160a01b038116611f9f576040516329b99a9560e11b815260040160405180910390fd5b6040805133602482018190527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0381811660448501526064808501889052855180860390910181526084909401909452602080840180516001600160e01b03166323b872dd60e01b1781528451610aae9688169589936113d393889360009283929091839182885af180612040576040513d6000823e3d81fd5b50506000513d91508115612058578060011415612065565b6001600160a01b0384163b155b156113d357604051635274afe760e01b81526001600160a01b03851660048201526024016109fd565b60405180606001604052806000801916815260200160006001600160401b031681526020016120d0604051806040016040528060008152602001600081525090565b905290565b60005b838110156120f05781810151838201526020016120d8565b50506000910152565b600081518084526121118160208601602086016120d5565b601f01601f19169290920160200192915050565b602081526000610a9560208301846120f9565b6001600160a01b038116811461113157600080fd5b6000806040838503121561216057600080fd5b823561216b81612138565b946020939093013593505050565b600060e0828403121561218b57600080fd5b50919050565b6000602082840312156121a357600080fd5b81356001600160401b038111156121b957600080fd5b610c4684828501612179565b8351815260208085015190820152600060a08201604060a0604085015281865180845260c08601915060c08160051b8701019350602080890160005b838110156122405788870360bf1901855281518051885283015183880187905261222d878901826120f9565b9750509382019390820190600101612201565b50508751606088015250505060208501516080850152509050610c46565b60006060828403121561218b57600080fd5b60008083601f84011261228257600080fd5b5081356001600160401b0381111561229957600080fd5b6020830191508360208285010111156122b157600080fd5b9250929050565b600080600080600080600060e0888a0312156122d357600080fd5b6122dd898961225e565b96506060880135955060808801356001600160401b038082111561230057600080fd5b61230c8b838c01612270565b909750955060a08a0135915061232182612138565b90935060c0890135908082111561233757600080fd5b506123448a828b01612270565b989b979a50959850939692959293505050565b60008060006060848603121561236c57600080fd5b833561237781612138565b9250602084013561238781612138565b929592945050506040919091013590565b803563ffffffff811681146123ac57600080fd5b919050565b600080604083850312156123c457600080fd5b61216b83612398565b801515811461113157600080fd5b600080604083850312156123ee57600080fd5b82356001600160401b0381111561240457600080fd5b61241085828601612179565b9250506020830135612421816123cd565b809150509250929050565b8151815260208083015190820152604081016108df565b803561ffff811681146123ac57600080fd5b6000806040838503121561246857600080fd5b61247183612398565b915061247f60208401612443565b90509250929050565b60006020828403121561249a57600080fd5b8135610a9581612138565b60008060008060a085870312156124bb57600080fd5b6124c5868661225e565b935060608501356001600160401b038111156124e057600080fd5b6124ec87828801612270565b909450925050608085013561250081612138565b939692955090935050565b60008083601f84011261251d57600080fd5b5081356001600160401b0381111561253457600080fd5b6020830191508360208260051b85010111156122b157600080fd5b6000806020838503121561256257600080fd5b82356001600160401b0381111561257857600080fd5b6125848582860161250b565b90969095509350505050565b6000602082840312156125a257600080fd5b610a9582612398565b600080600080606085870312156125c157600080fd5b6125ca85612398565b93506125d860208601612443565b925060408501356001600160401b038111156125f357600080fd5b6125ff87828801612270565b95989497509550505050565b6000806000838503608081121561262157600080fd5b84356001600160401b0381111561263757600080fd5b61264387828801612179565b9450506040601f198201121561265857600080fd5b50602084019150606084013561266d81612138565b809150509250925092565b600060c082019050835182526001600160401b03602085015116602083015260408401516126b3604084018280518252602090810151910152565b5082516080830152602083015160a0830152610a95565b600080604083850312156126dd57600080fd5b82356126e881612138565b9150602083013561242181612138565b60006060828403121561270a57600080fd5b610a95838361225e565b600181811c9082168061272857607f821691505b60208210810361218b57634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b038111828210171561278057612780612748565b60405290565b604080519081016001600160401b038111828210171561278057612780612748565b604051601f8201601f191681016001600160401b03811182821017156127d0576127d0612748565b604052919050565b60006001600160401b038211156127f1576127f1612748565b50601f01601f191660200190565b60006001600160401b038084111561281957612819612748565b8360051b602061282a8183016127a8565b86815291850191818101903684111561284257600080fd5b865b848110156129085780358681111561285c5760008081fd5b880160603682900312156128705760008081fd5b61287861275e565b61288182612398565b815261288e868301612443565b86820152604080830135898111156128a65760008081fd5b929092019136601f8401126128bb5760008081fd5b82356128ce6128c9826127d8565b6127a8565b81815236898387010111156128e35760008081fd5b818986018a830137600091810189019190915290820152845250918301918301612844565b50979650505050505050565b6000808585111561292457600080fd5b8386111561293157600080fd5b5050820193919092039150565b600084516129508184602089016120d5565b8201838582376000930192835250909392505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b602081526000610c46602083018486612966565b634e487b7160e01b600052603260045260246000fd5b6000823561013e198336030181126129d057600080fd5b9190910192915050565b6000808335601e198436030181126129f157600080fd5b8301803591506001600160401b03821115612a0b57600080fd5b6020019150368190038213156122b157600080fd5b6001600160401b038116811461113157600080fd5b63ffffffff612a4389612398565b1681526020880135602082015260006040890135612a6081612a20565b6001600160401b03811660408401525087606083015260e06080830152612a8b60e083018789612966565b6001600160a01b03861660a084015282810360c0840152612aad818587612966565b9a9950505050505050505050565b600060208284031215612acd57600080fd5b81516001600160401b03811115612ae357600080fd5b8201601f81018413612af457600080fd5b8051612b026128c9826127d8565b818152856020838501011115612b1757600080fd5b6116b58260208301602086016120d5565b600060208284031215612b3a57600080fd5b8135610a9581612a20565b60018060a01b038516815283602082015261ffff83166040820152608060608201526000610b0f60808301846120f9565b604081526000612b8960408301856120f9565b82810360208401526116b581856120f9565b600060208284031215612bad57600080fd5b8151610a95816123cd565b6040815263ffffffff8351166040820152602083015160608201526000604084015160a06080840152612bee60e08401826120f9565b90506060850151603f198483030160a0850152612c0b82826120f9565b60809690960151151560c08501525050506001600160a01b039190911660209091015290565b600060408284031215612c4357600080fd5b612c4b612786565b9050815181526020820151602082015292915050565b600060408284031215612c7357600080fd5b610a958383612c31565b601f821115611177576000816000526020600020601f850160051c81016020861015612ca65750805b601f850160051c820191505b81811015612cc557828155600101612cb2565b505050505050565b81516001600160401b03811115612ce657612ce6612748565b612cfa81612cf48454612714565b84612c7d565b602080601f831160018114612d2f5760008415612d175750858301515b600019600386901b1c1916600185901b178555612cc5565b600085815260208120601f198616915b82811015612d5e57888601518255948401946001909101908401612d3f565b5085821015612d7c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b83811015612e0957888303603f190185528151805163ffffffff1684528781015161ffff16888501528601516060878501819052612df5818601836120f9565b968901969450505090860190600101612db5565b509098975050505050505050565b600060408284031215612e2957600080fd5b612e31612786565b82358152602083013560208201528091505092915050565b634e487b7160e01b600052601160045260246000fd5b600082612e7c57634e487b7160e01b600052601260045260246000fd5b500490565b80820281158282048414176108df576108df612e49565b803560208310156108df57600019602084900360031b1b1692915050565b6001600160c01b03198135818116916008851015612ede5780818660080360031b1b83161692505b505092915050565b6001600160401b0360c01b8560c01b16815263ffffffff60e01b8460e01b16600882015282600c82015260008251612f2581602c8501602087016120d5565b91909101602c0195945050505050565b808201808211156108df576108df612e49565b8481526001600160401b0360c01b8460c01b16602082015282602882015260008251612f7b8160488501602087016120d5565b9190910160480195945050505050565b600060808284031215612f9d57600080fd5b612fa561275e565b825181526020830151612fb781612a20565b6020820152612fc98460408501612c31565b60408201529392505050565b600060208284031215612fe757600080fd5b8151610a958161213856fea2646970667358221220157845c368f4c415f0e6323b7c6368e865afac2701d8a7941157ccb56e42c9e264736f6c63430008160033", - "sourceMap": "155:311:1:-:0;;;189:182;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;329:5;336:7;345:11;358:9;329:5;336:7;345:11;358:9;329:5;336:7;2780:2:35;823:11:25;836:9;823:11;836:9;823:11;836:9;414::0;-1:-1:-1;;;;;1273:26:30;;1269:95;;1322:31;;-1:-1:-1;;;1322:31:30;;1350:1;1322:31;;;2061:51:43;2034:18;;1322:31:30;;;;;;;1269:95;1373:32;1392:12;1373:18;:32::i;:::-;-1:-1:-1;;;;;;1047:42:13;;;;;1104:23;;1100:53;;1136:17;;-1:-1:-1;;;1136:17:13;;;;;;;;;;;1100:53;1163:8;;:31;;-1:-1:-1;;;1163:31:13;;-1:-1:-1;;;;;2079:32:43;;;1163:31:13;;;2061:51:43;1163:20:13;;;;;;2034:18:43;;1163:31:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;987:214;;965:83:12;;2757:16:26::1;:14;;;:16;;:::i;:::-;2740:33;;:14;:33;;;2736:68;;;2782:22;;-1:-1:-1::0;;;2782:22:26::1;;;;;;;;;;;2736:68;2845:33;4227:1:::0;2845:14;:33:::1;:::i;:::-;2838:41;::::0;:2:::1;:41;:::i;:::-;2814:65;::::0;-1:-1:-1;1667:5:35;;-1:-1:-1;1667:13:35;;-1:-1:-1;1675:5:35;1667;:13;:::i;:::-;-1:-1:-1;1690:7:35;:17;1700:7;1690;:17;:::i;:::-;;1601:113;;647:202:25;;;;228:199:0;;;;189:182:1;;;;155:311;;2912:187:30;2985:16;3004:6;;-1:-1:-1;;;;;3020:17:30;;;-1:-1:-1;;;;;;3020:17:30;;;;;;3052:40;;3004:6;;;;;;;3052:40;;2985:16;3052:40;2975:124;2912:187;:::o;4148:87:26:-;4227:1;;4148:87::o;14:127:43:-;75:10;70:3;66:20;63:1;56:31;106:4;103:1;96:15;130:4;127:1;120:15;146:844;200:5;253:3;246:4;238:6;234:17;230:27;220:55;;271:1;268;261:12;220:55;294:13;;-1:-1:-1;;;;;356:10:43;;;353:36;;;369:18;;:::i;:::-;444:2;438:9;412:2;498:13;;-1:-1:-1;;494:22:43;;;518:2;490:31;486:40;474:53;;;542:18;;;562:22;;;539:46;536:72;;;588:18;;:::i;:::-;628:10;624:2;617:22;663:2;655:6;648:18;685:4;675:14;;732:3;725:4;720:2;712:6;708:15;704:26;701:35;698:55;;;749:1;746;739:12;698:55;771:1;762:10;;781:133;795:2;792:1;789:9;781:133;;;883:14;;;879:23;;873:30;852:14;;;848:23;;841:63;806:10;;;;781:133;;;958:1;951:4;946:2;938:6;934:15;930:26;923:37;978:6;969:15;;;;;;146:844;;;;:::o;995:177::-;1074:13;;-1:-1:-1;;;;;1116:31:43;;1106:42;;1096:70;;1162:1;1159;1152:12;1096:70;995:177;;;:::o;1177:733::-;1294:6;1302;1310;1318;1371:3;1359:9;1350:7;1346:23;1342:33;1339:53;;;1388:1;1385;1378:12;1339:53;1415:16;;-1:-1:-1;;;;;1480:14:43;;;1477:34;;;1507:1;1504;1497:12;1477:34;1530:61;1583:7;1574:6;1563:9;1559:22;1530:61;:::i;:::-;1520:71;;1637:2;1626:9;1622:18;1616:25;1600:41;;1666:2;1656:8;1653:16;1650:36;;;1682:1;1679;1672:12;1650:36;;1705:63;1760:7;1749:8;1738:9;1734:24;1705:63;:::i;:::-;1695:73;;;1787:49;1832:2;1821:9;1817:18;1787:49;:::i;:::-;1777:59;;1855:49;1900:2;1889:9;1885:18;1855:49;:::i;:::-;1845:59;;1177:733;;;;;;;:::o;2123:127::-;2184:10;2179:3;2175:20;2172:1;2165:31;2215:4;2212:1;2205:15;2239:4;2236:1;2229:15;2255:151;2345:4;2338:12;;;2324;;;2320:31;;2363:14;;2360:40;;;2380:18;;:::i;:::-;2255:151;;;;:::o;2411:416::-;2500:1;2537:5;2500:1;2551:270;2572:7;2562:8;2559:21;2551:270;;;2631:4;2627:1;2623:6;2619:17;2613:4;2610:27;2607:53;;;2640:18;;:::i;:::-;2690:7;2680:8;2676:22;2673:55;;;2710:16;;;;2673:55;2789:22;;;;2749:15;;;;2551:270;;;2555:3;2411:416;;;;;:::o;2832:806::-;2881:5;2911:8;2901:80;;-1:-1:-1;2952:1:43;2966:5;;2901:80;3000:4;2990:76;;-1:-1:-1;3037:1:43;3051:5;;2990:76;3082:4;3100:1;3095:59;;;;3168:1;3163:130;;;;3075:218;;3095:59;3125:1;3116:10;;3139:5;;;3163:130;3200:3;3190:8;3187:17;3184:43;;;3207:18;;:::i;:::-;-1:-1:-1;;3263:1:43;3249:16;;3278:5;;3075:218;;3377:2;3367:8;3364:16;3358:3;3352:4;3349:13;3345:36;3339:2;3329:8;3326:16;3321:2;3315:4;3312:12;3308:35;3305:77;3302:159;;;-1:-1:-1;3414:19:43;;;3446:5;;3302:159;3493:34;3518:8;3512:4;3493:34;:::i;:::-;3563:6;3559:1;3555:6;3551:19;3542:7;3539:32;3536:58;;;3574:18;;:::i;:::-;3612:20;;2832:806;-1:-1:-1;;;2832:806:43:o;3643:140::-;3701:5;3730:47;3771:4;3761:8;3757:19;3751:4;3730:47;:::i;:::-;3721:56;3643:140;-1:-1:-1;;;3643:140:43:o;3788:380::-;3867:1;3863:12;;;;3910;;;3931:61;;3985:4;3977:6;3973:17;3963:27;;3931:61;4038:2;4030:6;4027:14;4007:18;4004:38;4001:161;;4084:10;4079:3;4075:20;4072:1;4065:31;4119:4;4116:1;4109:15;4147:4;4144:1;4137:15;4001:161;;3788:380;;;:::o;4299:543::-;4401:2;4396:3;4393:11;4390:446;;;4437:1;4461:5;4458:1;4451:16;4505:4;4502:1;4492:18;4575:2;4563:10;4559:19;4556:1;4552:27;4546:4;4542:38;4611:4;4599:10;4596:20;4593:47;;;-1:-1:-1;4634:4:43;4593:47;4689:2;4684:3;4680:12;4677:1;4673:20;4667:4;4663:31;4653:41;;4744:82;4762:2;4755:5;4752:13;4744:82;;;4807:17;;;4788:1;4777:13;4744:82;;;4748:3;;;4390:446;4299:543;;;:::o;5018:1345::-;5138:10;;-1:-1:-1;;;;;5160:30:43;;5157:56;;;5193:18;;:::i;:::-;5222:97;5312:6;5272:38;5304:4;5298:11;5272:38;:::i;:::-;5266:4;5222:97;:::i;:::-;5374:4;;5431:2;5420:14;;5448:1;5443:663;;;;6150:1;6167:6;6164:89;;;-1:-1:-1;6219:19:43;;;6213:26;6164:89;-1:-1:-1;;4975:1:43;4971:11;;;4967:24;4963:29;4953:40;4999:1;4995:11;;;4950:57;6266:81;;5413:944;;5443:663;4246:1;4239:14;;;4283:4;4270:18;;-1:-1:-1;;5479:20:43;;;5597:236;5611:7;5608:1;5605:14;5597:236;;;5700:19;;;5694:26;5679:42;;5792:27;;;;5760:1;5748:14;;;;5627:19;;5597:236;;;5601:3;5861:6;5852:7;5849:19;5846:201;;;5922:19;;;5916:26;-1:-1:-1;;6005:1:43;6001:14;;;6017:3;5997:24;5993:37;5989:42;5974:58;5959:74;;5846:201;-1:-1:-1;;;;;6093:1:43;6077:14;;;6073:22;6060:36;;-1:-1:-1;5018:1345:43:o;:::-;155:311:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", - "linkReferences": {} - }, - "deployedBytecode": { - "object": "0x60806040526004361061025c5760003560e01c8063715018a611610144578063bb0b6a53116100b6578063d045a0dc1161007a578063d045a0dc14610780578063d424388514610793578063dd62ed3e146107b3578063f2fde38b146107f9578063fc0c546a1461048c578063ff7bd03d1461081957600080fd5b8063bb0b6a53146106df578063bc70b3541461070c578063bd815db01461072c578063c7c7f5b31461073f578063ca5eb5e11461076057600080fd5b806395d89b411161010857806395d89b4114610622578063963efcaa146106375780639f68b9641461066b578063a9059cbb1461067f578063b731ea0a1461069f578063b98bd070146106bf57600080fd5b8063715018a6146105805780637d25a05e1461059557806382413eac146105d0578063857749b0146105f05780638da5cb5b1461060457600080fd5b806323b872dd116101dd57806352ae2879116101a157806352ae28791461048c5780635535d4611461049f5780635a0dfe4d146104bf5780635e280f11146104f65780636fc1b31e1461052a57806370a082311461054a57600080fd5b806323b872dd146103dd578063313ce567146103fd5780633400288b1461041f5780633b6f743b1461043f57806340c10f191461046c57600080fd5b8063134d4f2511610224578063134d4f2514610338578063156a0d0f1461036057806317442b701461038757806318160ddd146103a95780631f5e1334146103c857600080fd5b806306fdde0314610261578063095ea7b31461028c5780630d35b415146102bc578063111ecdad146102eb57806313137d6514610323575b600080fd5b34801561026d57600080fd5b50610276610839565b6040516102839190612125565b60405180910390f35b34801561029857600080fd5b506102ac6102a736600461214d565b6108cb565b6040519015158152602001610283565b3480156102c857600080fd5b506102dc6102d7366004612191565b6108e5565b604051610283939291906121c5565b3480156102f757600080fd5b5060045461030b906001600160a01b031681565b6040516001600160a01b039091168152602001610283565b6103366103313660046122b8565b6109b6565b005b34801561034457600080fd5b5061034d600281565b60405161ffff9091168152602001610283565b34801561036c57600080fd5b506040805162b9270b60e21b81526001602082015201610283565b34801561039357600080fd5b5060408051600181526002602082015201610283565b3480156103b557600080fd5b506007545b604051908152602001610283565b3480156103d457600080fd5b5061034d600181565b3480156103e957600080fd5b506102ac6103f8366004612357565b610a76565b34801561040957600080fd5b5060125b60405160ff9091168152602001610283565b34801561042b57600080fd5b5061033661043a3660046123b1565b610a9c565b34801561044b57600080fd5b5061045f61045a3660046123db565b610ab2565b604051610283919061242c565b34801561047857600080fd5b5061033661048736600461214d565b610b19565b34801561049857600080fd5b503061030b565b3480156104ab57600080fd5b506102766104ba366004612455565b610b23565b3480156104cb57600080fd5b506102ac6104da3660046123b1565b63ffffffff919091166000908152600160205260409020541490565b34801561050257600080fd5b5061030b7f000000000000000000000000000000000000000000000000000000000000000081565b34801561053657600080fd5b50610336610545366004612488565b610bc8565b34801561055657600080fd5b506103ba610565366004612488565b6001600160a01b031660009081526005602052604090205490565b34801561058c57600080fd5b50610336610c25565b3480156105a157600080fd5b506105b86105b03660046123b1565b600092915050565b6040516001600160401b039091168152602001610283565b3480156105dc57600080fd5b506102ac6105eb3660046124a5565b610c39565b3480156105fc57600080fd5b50600661040d565b34801561061057600080fd5b506000546001600160a01b031661030b565b34801561062e57600080fd5b50610276610c4e565b34801561064357600080fd5b506103ba7f000000000000000000000000000000000000000000000000000000000000000081565b34801561067757600080fd5b5060006102ac565b34801561068b57600080fd5b506102ac61069a36600461214d565b610c5d565b3480156106ab57600080fd5b5060025461030b906001600160a01b031681565b3480156106cb57600080fd5b506103366106da36600461254f565b610c6b565b3480156106eb57600080fd5b506103ba6106fa366004612590565b60016020526000908152604090205481565b34801561071857600080fd5b506102766107273660046125ab565b610c85565b61033661073a36600461254f565b610e2d565b61075261074d36600461260b565b610fb7565b604051610283929190612678565b34801561076c57600080fd5b5061033661077b366004612488565b610feb565b61033661078e3660046122b8565b611071565b34801561079f57600080fd5b506103366107ae366004612488565b6110a0565b3480156107bf57600080fd5b506103ba6107ce3660046126ca565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b34801561080557600080fd5b50610336610814366004612488565b6110f6565b34801561082557600080fd5b506102ac6108343660046126f8565b611134565b60606008805461084890612714565b80601f016020809104026020016040519081016040528092919081815260200182805461087490612714565b80156108c15780601f10610896576101008083540402835291602001916108c1565b820191906000526020600020905b8154815290600101906020018083116108a457829003601f168201915b5050505050905090565b6000336108d981858561116a565b60019150505b92915050565b60408051808201909152600080825260208201526060610918604051806040016040528060008152602001600081525090565b60408051808201825260008082526001600160401b03602080840182905284518381529081019094529195509182610973565b60408051808201909152600081526060602082015281526020019060019003908161094b5790505b509350600080610998604089013560608a013561099360208c018c612590565b61117c565b60408051808201909152918252602082015296989597505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163314610a06576040516391ac5e4f60e01b81523360048201526024015b60405180910390fd5b60208701803590610a2090610a1b908a612590565b6111b8565b14610a5e57610a326020880188612590565b60405163309afaf360e21b815263ffffffff9091166004820152602088013560248201526044016109fd565b610a6d878787878787876111f4565b50505050505050565b600033610a8485828561135b565b610a8f8585856113d9565b60019150505b9392505050565b610aa4611438565b610aae8282611465565b5050565b60408051808201909152600080825260208201526000610ae2604085013560608601356109936020880188612590565b915050600080610af286846114ba565b9092509050610b0f610b076020880188612590565b8383886115dd565b9695505050505050565b610aae82826116be565b600360209081526000928352604080842090915290825290208054610b4790612714565b80601f0160208091040260200160405190810160405280929190818152602001828054610b7390612714565b8015610bc05780601f10610b9557610100808354040283529160200191610bc0565b820191906000526020600020905b815481529060010190602001808311610ba357829003601f168201915b505050505081565b610bd0611438565b600480546001600160a01b0319166001600160a01b0383169081179091556040519081527ff0be4f1e87349231d80c36b33f9e8639658eeaf474014dee15a3e6a4d4414197906020015b60405180910390a150565b610c2d611438565b610c3760006116f4565b565b6001600160a01b03811630145b949350505050565b60606009805461084890612714565b6000336108d98185856113d9565b610c73611438565b610aae610c8082846127ff565b611744565b63ffffffff8416600090815260036020908152604080832061ffff87168452909152812080546060929190610cb990612714565b80601f0160208091040260200160405190810160405280929190818152602001828054610ce590612714565b8015610d325780601f10610d0757610100808354040283529160200191610d32565b820191906000526020600020905b815481529060010190602001808311610d1557829003601f168201915b505050505090508051600003610d825783838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929450610c469350505050565b6000839003610d92579050610c46565b60028310610e1057610dd984848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061184b92505050565b80610de78460028188612914565b604051602001610df99392919061293e565b604051602081830303815290604052915050610c46565b8383604051639a6d49cd60e01b81526004016109fd92919061298f565b60005b81811015610f365736838383818110610e4b57610e4b6129a3565b9050602002810190610e5d91906129b9565b9050610e90610e6f6020830183612590565b602083013563ffffffff919091166000908152600160205260409020541490565b610e9a5750610f2e565b3063d045a0dc60c08301358360a0810135610eb96101008301836129da565b610eca610100890160e08a01612488565b610ed86101208a018a6129da565b6040518963ffffffff1660e01b8152600401610efa9796959493929190612a35565b6000604051808303818588803b158015610f1357600080fd5b505af1158015610f27573d6000803e3d6000fd5b5050505050505b600101610e30565b50336001600160a01b0316638e9e70996040518163ffffffff1660e01b8152600401600060405180830381865afa158015610f75573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610f9d9190810190612abb565b604051638351eea760e01b81526004016109fd9190612125565b610fbf61208e565b6040805180820190915260008082526020820152610fde858585611877565b915091505b935093915050565b610ff3611438565b60405163ca5eb5e160e01b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063ca5eb5e190602401600060405180830381600087803b15801561105657600080fd5b505af115801561106a573d6000803e3d6000fd5b5050505050565b3330146110915760405163029a949d60e31b815260040160405180910390fd5b610a6d87878787878787610a5e565b6110a8611438565b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527fd48d879cef83a1c0bdda516f27b13ddb1b3f8bbac1c9e1511bb2a659c242776090602001610c1a565b6110fe611438565b6001600160a01b03811661112857604051631e4fbdf760e01b8152600060048201526024016109fd565b611131816116f4565b50565b600060208201803590600190839061114c9086612590565b63ffffffff1681526020810191909152604001600020541492915050565b6111778383836001611972565b505050565b60008061118885611a47565b915081905083811015610fe3576040516371c4efed60e01b815260048101829052602481018590526044016109fd565b63ffffffff8116600090815260016020526040812054806108df5760405163f6ff4fb760e01b815263ffffffff841660048201526024016109fd565b60006112066112038787611a7e565b90565b905060006112328261122061121b8a8a611a96565b611ab9565b61122d60208d018d612590565b611aee565b905060288611156112f957600061126f61125260608c0160408d01612b28565b61125f60208d018d612590565b8461126a8c8c611b16565b611b61565b604051633e5ac80960e11b81529091506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690637cb59012906112c59086908d906000908790600401612b45565b600060405180830381600087803b1580156112df57600080fd5b505af11580156112f3573d6000803e3d6000fd5b50505050505b6001600160a01b038216887fefed6d3500546b29533b128a29e3a94d70788727f0507505ac12eaf2e578fd9c61133260208d018d612590565b6040805163ffffffff9092168252602082018690520160405180910390a3505050505050505050565b6001600160a01b0383811660009081526006602090815260408083209386168352929052205460001981146113d357818110156113c457604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064016109fd565b6113d384848484036000611972565b50505050565b6001600160a01b03831661140357604051634b637e8f60e11b8152600060048201526024016109fd565b6001600160a01b03821661142d5760405163ec442f0560e01b8152600060048201526024016109fd565b611177838383611b93565b6000546001600160a01b03163314610c375760405163118cdaa760e01b81523360048201526024016109fd565b63ffffffff8216600081815260016020908152604091829020849055815192835282018390527f238399d427b947898edb290f5ff0f9109849b1c3ba196a42e35f00c50a54b98b910160405180910390a15050565b606080600061151785602001356114d086611cbd565b6114dd60a08901896129da565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611ce992505050565b909350905060008161152a57600161152d565b60025b905061154d61153f6020880188612590565b8261072760808a018a6129da565b6004549093506001600160a01b031680156115d35760405163043a78eb60e01b81526001600160a01b0382169063043a78eb906115909088908890600401612b76565b602060405180830381865afa1580156115ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115d19190612b9b565b505b5050509250929050565b60408051808201909152600080825260208201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ddc28c586040518060a001604052808863ffffffff168152602001611640896111b8565b8152602001878152602001868152602001851515815250306040518363ffffffff1660e01b8152600401611675929190612bb8565b6040805180830381865afa158015611691573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116b59190612c61565b95945050505050565b6001600160a01b0382166116e85760405163ec442f0560e01b8152600060048201526024016109fd565b610aae60008383611b93565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60005b815181101561181b57611776828281518110611765576117656129a3565b60200260200101516040015161184b565b818181518110611788576117886129a3565b602002602001015160400151600360008484815181106117aa576117aa6129a3565b60200260200101516000015163ffffffff1663ffffffff16815260200190815260200160002060008484815181106117e4576117e46129a3565b60200260200101516020015161ffff1661ffff16815260200190815260200160002090816118129190612ccd565b50600101611747565b507fbe4864a8e820971c0247f5992e2da559595f7bf076a21cb5928d443d2a13b67481604051610c1a9190612d8c565b600281015161ffff8116600314610aae5781604051639a6d49cd60e01b81526004016109fd9190612125565b61187f61208e565b60408051808201909152600080825260208201526000806118b633604089013560608a01356118b160208c018c612590565b611d63565b915091506000806118c789846114ba565b90925090506118f36118dc60208b018b612590565b83836118ed368d90038d018d612e17565b8b611d89565b60408051808201909152858152602080820186905282519298509096503391907f85496b760a4b7f8d66384b9df21b381f5d1b1e79f229a47aaf4c232edc2fe59a90611941908d018d612590565b6040805163ffffffff909216825260208201899052810187905260600160405180910390a350505050935093915050565b6001600160a01b03841661199c5760405163e602df0560e01b8152600060048201526024016109fd565b6001600160a01b0383166119c657604051634a1406b160e11b8152600060048201526024016109fd565b6001600160a01b03808516600090815260066020908152604080832093871683529290522082905580156113d357826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051611a3991815260200190565b60405180910390a350505050565b60007f0000000000000000000000000000000000000000000000000000000000000000611a748184612e5f565b6108df9190612e81565b6000611a8d6020828486612914565b610a9591612e98565b6000611aa6602860208486612914565b611aaf91612eb6565b60c01c9392505050565b60006108df7f00000000000000000000000000000000000000000000000000000000000000006001600160401b038416612e81565b60006001600160a01b038416611b045761dead93505b611b0e84846116be565b509092915050565b6060611b258260288186612914565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929695505050505050565b606084848484604051602001611b7a9493929190612ee6565b6040516020818303038152906040529050949350505050565b6001600160a01b038316611bbe578060076000828254611bb39190612f35565b90915550611c309050565b6001600160a01b03831660009081526005602052604090205481811015611c115760405163391434e360e21b81526001600160a01b038516600482015260248101829052604481018390526064016109fd565b6001600160a01b03841660009081526005602052604090209082900390555b6001600160a01b038216611c4c57600780548290039055611c6b565b6001600160a01b03821660009081526005602052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611cb091815260200190565b60405180910390a3505050565b60006108df7f000000000000000000000000000000000000000000000000000000000000000083612e5f565b8051606090151580611d32578484604051602001611d1e92919091825260c01b6001600160c01b031916602082015260280190565b604051602081830303815290604052611d59565b84843385604051602001611d499493929190612f48565b6040516020818303038152906040525b9150935093915050565b600080611d7185858561117c565b9092509050611d808683611e94565b94509492505050565b611d9161208e565b6000611da08460000151611eca565b602085015190915015611dba57611dba8460200151611ef2565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632637a450826040518060a001604052808b63ffffffff168152602001611e0a8c6111b8565b81526020018a815260200189815260200160008960200151111515815250866040518463ffffffff1660e01b8152600401611e46929190612bb8565b60806040518083038185885af1158015611e64573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611e899190612f8b565b979650505050505050565b6001600160a01b038216611ebe57604051634b637e8f60e11b8152600060048201526024016109fd565b610aae82600083611b93565b6000813414611eee576040516304fb820960e51b81523460048201526024016109fd565b5090565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e4fe1d946040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f769190612fd5565b90506001600160a01b038116611f9f576040516329b99a9560e11b815260040160405180910390fd5b6040805133602482018190527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0381811660448501526064808501889052855180860390910181526084909401909452602080840180516001600160e01b03166323b872dd60e01b1781528451610aae9688169589936113d393889360009283929091839182885af180612040576040513d6000823e3d81fd5b50506000513d91508115612058578060011415612065565b6001600160a01b0384163b155b156113d357604051635274afe760e01b81526001600160a01b03851660048201526024016109fd565b60405180606001604052806000801916815260200160006001600160401b031681526020016120d0604051806040016040528060008152602001600081525090565b905290565b60005b838110156120f05781810151838201526020016120d8565b50506000910152565b600081518084526121118160208601602086016120d5565b601f01601f19169290920160200192915050565b602081526000610a9560208301846120f9565b6001600160a01b038116811461113157600080fd5b6000806040838503121561216057600080fd5b823561216b81612138565b946020939093013593505050565b600060e0828403121561218b57600080fd5b50919050565b6000602082840312156121a357600080fd5b81356001600160401b038111156121b957600080fd5b610c4684828501612179565b8351815260208085015190820152600060a08201604060a0604085015281865180845260c08601915060c08160051b8701019350602080890160005b838110156122405788870360bf1901855281518051885283015183880187905261222d878901826120f9565b9750509382019390820190600101612201565b50508751606088015250505060208501516080850152509050610c46565b60006060828403121561218b57600080fd5b60008083601f84011261228257600080fd5b5081356001600160401b0381111561229957600080fd5b6020830191508360208285010111156122b157600080fd5b9250929050565b600080600080600080600060e0888a0312156122d357600080fd5b6122dd898961225e565b96506060880135955060808801356001600160401b038082111561230057600080fd5b61230c8b838c01612270565b909750955060a08a0135915061232182612138565b90935060c0890135908082111561233757600080fd5b506123448a828b01612270565b989b979a50959850939692959293505050565b60008060006060848603121561236c57600080fd5b833561237781612138565b9250602084013561238781612138565b929592945050506040919091013590565b803563ffffffff811681146123ac57600080fd5b919050565b600080604083850312156123c457600080fd5b61216b83612398565b801515811461113157600080fd5b600080604083850312156123ee57600080fd5b82356001600160401b0381111561240457600080fd5b61241085828601612179565b9250506020830135612421816123cd565b809150509250929050565b8151815260208083015190820152604081016108df565b803561ffff811681146123ac57600080fd5b6000806040838503121561246857600080fd5b61247183612398565b915061247f60208401612443565b90509250929050565b60006020828403121561249a57600080fd5b8135610a9581612138565b60008060008060a085870312156124bb57600080fd5b6124c5868661225e565b935060608501356001600160401b038111156124e057600080fd5b6124ec87828801612270565b909450925050608085013561250081612138565b939692955090935050565b60008083601f84011261251d57600080fd5b5081356001600160401b0381111561253457600080fd5b6020830191508360208260051b85010111156122b157600080fd5b6000806020838503121561256257600080fd5b82356001600160401b0381111561257857600080fd5b6125848582860161250b565b90969095509350505050565b6000602082840312156125a257600080fd5b610a9582612398565b600080600080606085870312156125c157600080fd5b6125ca85612398565b93506125d860208601612443565b925060408501356001600160401b038111156125f357600080fd5b6125ff87828801612270565b95989497509550505050565b6000806000838503608081121561262157600080fd5b84356001600160401b0381111561263757600080fd5b61264387828801612179565b9450506040601f198201121561265857600080fd5b50602084019150606084013561266d81612138565b809150509250925092565b600060c082019050835182526001600160401b03602085015116602083015260408401516126b3604084018280518252602090810151910152565b5082516080830152602083015160a0830152610a95565b600080604083850312156126dd57600080fd5b82356126e881612138565b9150602083013561242181612138565b60006060828403121561270a57600080fd5b610a95838361225e565b600181811c9082168061272857607f821691505b60208210810361218b57634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b038111828210171561278057612780612748565b60405290565b604080519081016001600160401b038111828210171561278057612780612748565b604051601f8201601f191681016001600160401b03811182821017156127d0576127d0612748565b604052919050565b60006001600160401b038211156127f1576127f1612748565b50601f01601f191660200190565b60006001600160401b038084111561281957612819612748565b8360051b602061282a8183016127a8565b86815291850191818101903684111561284257600080fd5b865b848110156129085780358681111561285c5760008081fd5b880160603682900312156128705760008081fd5b61287861275e565b61288182612398565b815261288e868301612443565b86820152604080830135898111156128a65760008081fd5b929092019136601f8401126128bb5760008081fd5b82356128ce6128c9826127d8565b6127a8565b81815236898387010111156128e35760008081fd5b818986018a830137600091810189019190915290820152845250918301918301612844565b50979650505050505050565b6000808585111561292457600080fd5b8386111561293157600080fd5b5050820193919092039150565b600084516129508184602089016120d5565b8201838582376000930192835250909392505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b602081526000610c46602083018486612966565b634e487b7160e01b600052603260045260246000fd5b6000823561013e198336030181126129d057600080fd5b9190910192915050565b6000808335601e198436030181126129f157600080fd5b8301803591506001600160401b03821115612a0b57600080fd5b6020019150368190038213156122b157600080fd5b6001600160401b038116811461113157600080fd5b63ffffffff612a4389612398565b1681526020880135602082015260006040890135612a6081612a20565b6001600160401b03811660408401525087606083015260e06080830152612a8b60e083018789612966565b6001600160a01b03861660a084015282810360c0840152612aad818587612966565b9a9950505050505050505050565b600060208284031215612acd57600080fd5b81516001600160401b03811115612ae357600080fd5b8201601f81018413612af457600080fd5b8051612b026128c9826127d8565b818152856020838501011115612b1757600080fd5b6116b58260208301602086016120d5565b600060208284031215612b3a57600080fd5b8135610a9581612a20565b60018060a01b038516815283602082015261ffff83166040820152608060608201526000610b0f60808301846120f9565b604081526000612b8960408301856120f9565b82810360208401526116b581856120f9565b600060208284031215612bad57600080fd5b8151610a95816123cd565b6040815263ffffffff8351166040820152602083015160608201526000604084015160a06080840152612bee60e08401826120f9565b90506060850151603f198483030160a0850152612c0b82826120f9565b60809690960151151560c08501525050506001600160a01b039190911660209091015290565b600060408284031215612c4357600080fd5b612c4b612786565b9050815181526020820151602082015292915050565b600060408284031215612c7357600080fd5b610a958383612c31565b601f821115611177576000816000526020600020601f850160051c81016020861015612ca65750805b601f850160051c820191505b81811015612cc557828155600101612cb2565b505050505050565b81516001600160401b03811115612ce657612ce6612748565b612cfa81612cf48454612714565b84612c7d565b602080601f831160018114612d2f5760008415612d175750858301515b600019600386901b1c1916600185901b178555612cc5565b600085815260208120601f198616915b82811015612d5e57888601518255948401946001909101908401612d3f565b5085821015612d7c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b83811015612e0957888303603f190185528151805163ffffffff1684528781015161ffff16888501528601516060878501819052612df5818601836120f9565b968901969450505090860190600101612db5565b509098975050505050505050565b600060408284031215612e2957600080fd5b612e31612786565b82358152602083013560208201528091505092915050565b634e487b7160e01b600052601160045260246000fd5b600082612e7c57634e487b7160e01b600052601260045260246000fd5b500490565b80820281158282048414176108df576108df612e49565b803560208310156108df57600019602084900360031b1b1692915050565b6001600160c01b03198135818116916008851015612ede5780818660080360031b1b83161692505b505092915050565b6001600160401b0360c01b8560c01b16815263ffffffff60e01b8460e01b16600882015282600c82015260008251612f2581602c8501602087016120d5565b91909101602c0195945050505050565b808201808211156108df576108df612e49565b8481526001600160401b0360c01b8460c01b16602082015282602882015260008251612f7b8160488501602087016120d5565b9190910160480195945050505050565b600060808284031215612f9d57600080fd5b612fa561275e565b825181526020830151612fb781612a20565b6020820152612fc98460408501612c31565b60408201529392505050565b600060208284031215612fe757600080fd5b8151610a958161213856fea2646970667358221220157845c368f4c415f0e6323b7c6368e865afac2701d8a7941157ccb56e42c9e264736f6c63430008160033", - "sourceMap": "155:311:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1779:89:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3998:186;;;;;;;;;;-1:-1:-1;3998:186:35;;;;;:::i;:::-;;:::i;:::-;;;1391:14:43;;1384:22;1366:41;;1354:2;1339:18;3998:186:35;1226:187:43;5102:1258:26;;;;;;;;;;-1:-1:-1;5102:1258:26;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;2256:27::-;;;;;;;;;;-1:-1:-1;2256:27:26;;;;-1:-1:-1;;;;;2256:27:26;;;;;;-1:-1:-1;;;;;3605:32:43;;;3587:51;;3575:2;3560:18;2256:27:26;3441:203:43;4368:708:14;;;;;;:::i;:::-;;:::i;:::-;;2130:40:26;;;;;;;;;;;;2169:1;2130:40;;;;;5386:6:43;5374:19;;;5356:38;;5344:2;5329:18;2130:40:26;5212:188:43;3401:140:26;;;;;;;;;;-1:-1:-1;3401:140:26;;;-1:-1:-1;;;5575:52:43;;3532:1:26;5658:2:43;5643:18;;5636:59;5548:18;3401:140:26;5405:296:43;1287:235:12;;;;;;;;;;-1:-1:-1;1287:235:12;;;843:1:15;5913:34:43;;678:1:14;5978:2:43;5963:18;;5956:43;5849:18;1287:235:12;5706:299:43;2849:97:35;;;;;;;;;;-1:-1:-1;2927:12:35;;2849:97;;;6156:25:43;;;6144:2;6129:18;2849:97:35;6010:177:43;2093:31:26;;;;;;;;;;;;2123:1;2093:31;;4776:244:35;;;;;;;;;;-1:-1:-1;4776:244:35;;;;;:::i;:::-;;:::i;2707:82::-;;;;;;;;;;-1:-1:-1;2780:2:35;2707:82;;;6825:4:43;6813:17;;;6795:36;;6783:2;6768:18;2707:82:35;6653:184:43;1724:108:13;;;;;;;;;;-1:-1:-1;1724:108:13;;;;;:::i;:::-;;:::i;6811:774:26:-;;;;;;;;;;-1:-1:-1;6811:774:26;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;377:87:1:-;;;;;;;;;;-1:-1:-1;377:87:1;;;;;:::i;:::-;;:::i;875:93:21:-;;;;;;;;;;-1:-1:-1;956:4:21;875:93;;538::20;;;;;;;;;;-1:-1:-1;538:93:20;;;;;:::i;:::-;;:::i;16059:132:26:-;;;;;;;;;;-1:-1:-1;16059:132:26;;;;;:::i;:::-;16164:11;;;;;16141:4;16164:11;;;:5;:11;;;;;;:20;;16059:132;446:46:13;;;;;;;;;;;;;;;4583:163:26;;;;;;;;;;-1:-1:-1;4583:163:26;;;;;:::i;:::-;;:::i;3004:116:35:-;;;;;;;;;;-1:-1:-1;3004:116:35;;;;;:::i;:::-;-1:-1:-1;;;;;3095:18:35;3069:7;3095:18;;;:9;:18;;;;;;;3004:116;2293:101:30;;;;;;;;;;;;;:::i;3507:128:14:-;;;;;;;;;;-1:-1:-1;3507:128:14;;;;;:::i;:::-;3596:12;3507:128;;;;;;;;-1:-1:-1;;;;;9442:31:43;;;9424:50;;9412:2;9397:18;3507:128:14;9280:200:43;2013:216:14;;;;;;;;;;-1:-1:-1;2013:216:14;;;;;:::i;:::-;;:::i;4148:87:26:-;;;;;;;;;;-1:-1:-1;4227:1:26;4148:87;;1638:85:30;;;;;;;;;;-1:-1:-1;1684:7:30;1710:6;-1:-1:-1;;;;;1710:6:30;1638:85;;1981:93:35;;;;;;;;;;;;;:::i;1787:46:26:-;;;;;;;;;;;;;;;1460:94:25;;;;;;;;;;-1:-1:-1;1519:4:25;1460:94;;3315:178:35;;;;;;;;;;-1:-1:-1;3315:178:35;;;;;:::i;:::-;;:::i;559:23:21:-;;;;;;;;;;-1:-1:-1;559:23:21;;;;-1:-1:-1;;;;;559:23:21;;;1391:156:20;;;;;;;;;;-1:-1:-1;1391:156:20;;;;;:::i;:::-;;:::i;569:48:13:-;;;;;;;;;;-1:-1:-1;569:48:13;;;;;:::i;:::-;;;;;;;;;;;;;;3510:981:20;;;;;;;;;;-1:-1:-1;3510:981:20;;;;;:::i;:::-;;:::i;1698:1333:21:-;;;;;;:::i;:::-;;:::i;8273:290:26:-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;3252:105:13:-;;;;;;;;;;-1:-1:-1;3252:105:13;;;;;:::i;:::-;;:::i;3679:409:21:-;;;;;;:::i;:::-;;:::i;1100:139::-;;;;;;;;;;-1:-1:-1;1100:139:21;;;;;:::i;:::-;;:::i;3551:140:35:-;;;;;;;;;;-1:-1:-1;3551:140:35;;;;;:::i;:::-;-1:-1:-1;;;;;3657:18:35;;;3631:7;3657:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;3551:140;2543:215:30;;;;;;;;;;-1:-1:-1;2543:215:30;;;;;:::i;:::-;;:::i;2771:149:14:-;;;;;;;;;;-1:-1:-1;2771:149:14;;;;;:::i;:::-;;:::i;1779:89:35:-;1824:13;1856:5;1849:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1779:89;:::o;3998:186::-;4071:4;735:10:40;4125:31:35;735:10:40;4141:7:35;4150:5;4125:8;:31::i;:::-;4173:4;4166:11;;;3998:186;;;;;:::o;5102:1258:26:-;-1:-1:-1;;;;;;;;;;;;;;;;;5254:35:26;5291:28;-1:-1:-1;;;;;;;;;;;;;;;;;;;5291:28:26;5509:34;;;;;;;;-1:-1:-1;5509:34:26;;;-1:-1:-1;;;;;5509:34:26;;;;;;;5660:21;;;;;;;;;;;5509:34;;-1:-1:-1;;;5660:21:26;;;-1:-1:-1;;;;;;;;;;;;;;;;;5660:21:26;;;;;;;;;;;;;;;-1:-1:-1;5644:37:26;-1:-1:-1;6118:20:26;;6168:120;6192:19;;;;6225:22;;;;6261:17;;;;6192:10;6261:17;:::i;:::-;6168:10;:120::i;:::-;6311:42;;;;;;;;;;;;;;;;5102:1258;;;;-1:-1:-1;;;;;;5102:1258:26:o;4368:708:14:-;4681:8;-1:-1:-1;;;;;4673:31:14;4694:10;4673:31;4669:68;;4713:24;;-1:-1:-1;;;4713:24:14;;4726:10;4713:24;;;3587:51:43;3560:18;;4713:24:14;;;;;;;;4669:68;4873:14;;;;;;4837:32;;4854:14;;4873:7;4854:14;:::i;:::-;4837:16;:32::i;:::-;:50;4833:103;;4905:14;;;;:7;:14;:::i;:::-;4896:40;;-1:-1:-1;;;4896:40:14;;15127:10:43;15115:23;;;4896:40:14;;;15097:42:43;4921:14:14;;;;15155:18:43;;;15148:34;15070:18;;4896:40:14;14925:263:43;4833:103:14;5010:59;5021:7;5030:5;5037:8;;5047:9;5058:10;;5010;:59::i;:::-;4368:708;;;;;;;:::o;4776:244:35:-;4863:4;735:10:40;4919:37:35;4935:4;735:10:40;4950:5:35;4919:15;:37::i;:::-;4966:26;4976:4;4982:2;4986:5;4966:9;:26::i;:::-;5009:4;5002:11;;;4776:244;;;;;;:::o;1724:108:13:-;1531:13:30;:11;:13::i;:::-;1804:21:13::1;1813:4;1819:5;1804:8;:21::i;:::-;1724:108:::0;;:::o;6811:774:26:-;-1:-1:-1;;;;;;;;;;;;;;;;;7145:24:26;7173:74;7184:19;;;;7205:22;;;;7229:17;;;;7184:10;7229:17;:::i;7173:74::-;7142:105;;;7336:20;7358;7382:49;7402:10;7414:16;7382:19;:49::i;:::-;7335:96;;-1:-1:-1;7335:96:26;-1:-1:-1;7520:58:26;7527:17;;;;:10;:17;:::i;:::-;7546:7;7555;7564:13;7520:6;:58::i;:::-;7513:65;6811:774;-1:-1:-1;;;;;;6811:774:26:o;377:87:1:-;438:19;444:3;449:7;438:5;:19::i;538:93:20:-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;4583:163:26:-;1531:13:30;:11;:13::i;:::-;4666:12:26::1;:28:::0;;-1:-1:-1;;;;;;4666:28:26::1;-1:-1:-1::0;;;;;4666:28:26;::::1;::::0;;::::1;::::0;;;4709:30:::1;::::0;3587:51:43;;;4709:30:26::1;::::0;3575:2:43;3560:18;4709:30:26::1;;;;;;;;4583:163:::0;:::o;2293:101:30:-;1531:13;:11;:13::i;:::-;2357:30:::1;2384:1;2357:18;:30::i;:::-;2293:101::o:0;2013:216:14:-;-1:-1:-1;;;;;2198:24:14;;2217:4;2198:24;2013:216;;;;;;;:::o;1981:93:35:-;2028:13;2060:7;2053:14;;;;;:::i;3315:178::-;3384:4;735:10:40;3438:27:35;735:10:40;3455:2:35;3459:5;3438:9;:27::i;1391:156:20:-;1531:13:30;:11;:13::i;:::-;1503:37:20::1;;1523:16:::0;;1503:37:::1;:::i;:::-;:19;:37::i;3510:981::-:0;3701:21;;;3677;3701;;;:15;:21;;;;;;;;:31;;;;;;;;;;3677:55;;3653:12;;3677:21;3701:31;3677:55;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3861:8;:15;3880:1;3861:20;3857:46;;3890:13;;3883:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3883:20:20;;-1:-1:-1;3883:20:20;;-1:-1:-1;;;;3883:20:20;3857:46;3988:1;3964:25;;;3960:46;;3998:8;-1:-1:-1;3991:15:20;;3960:46;4153:1;4129:25;;4125:267;;4170:34;4190:13;;4170:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4170:19:20;;-1:-1:-1;;;4170:34:20:i;:::-;4353:8;4363:17;:13;4377:1;4363:13;;:17;:::i;:::-;4340:41;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;4333:48;;;;;4125:267;4470:13;;4455:29;;-1:-1:-1;;;4455:29:20;;;;;;;;;:::i;1698:1333:21:-;1799:9;1794:1037;1814:19;;;1794:1037;;;1854:29;1886:8;;1895:1;1886:11;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;1854:43;-1:-1:-1;1980:50:21;1987:20;;;;1854:43;1987:20;:::i;:::-;2009;;;;16164:11:26;;;;;16141:4;16164:11;;;:5;:11;;;;;;:20;;16059:132;1980:50:21;1975:65;;2032:8;;;1975:65;2602:4;:22;2633:12;;;;:6;2696:11;;;;2725:14;;;;2633:6;2725:14;:::i;:::-;2757:15;;;;;;;;:::i;:::-;2790:16;;;;:6;:16;:::i;:::-;2602:218;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1840:991;1794:1037;1835:3;;1794:1037;;;;2988:10;-1:-1:-1;;;;;2978:43:21;;:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2978:45:21;;;;;;;;;;;;:::i;:::-;2961:63;;-1:-1:-1;;;2961:63:21;;;;;;;;:::i;8273:290:26:-;8434:34;;:::i;:::-;-1:-1:-1;;;;;;;;;;;;;;;;;8517:39:26;8523:10;8535:4;8541:14;8517:5;:39::i;:::-;8510:46;;;;8273:290;;;;;;;:::o;3252:105:13:-;1531:13:30;:11;:13::i;:::-;3319:31:13::1;::::0;-1:-1:-1;;;3319:31:13;;-1:-1:-1;;;;;3605:32:43;;;3319:31:13::1;::::0;::::1;3587:51:43::0;3319:8:13::1;:20;::::0;::::1;::::0;3560:18:43;;3319:31:13::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;3252:105:::0;:::o;3679:409:21:-;3958:10;3980:4;3958:27;3954:50;;3994:10;;-1:-1:-1;;;3994:10:21;;;;;;;;;;;3954:50;4014:67;4033:7;4042:5;4049:8;;4059:9;4070:10;;4014:18;:67::i;1100:139::-;1531:13:30;:11;:13::i;:::-;1175:8:21::1;:20:::0;;-1:-1:-1;;;;;;1175:20:21::1;-1:-1:-1::0;;;;;1175:20:21;::::1;::::0;;::::1;::::0;;;1210:22:::1;::::0;3587:51:43;;;1210:22:21::1;::::0;3575:2:43;3560:18;1210:22:21::1;3441:203:43::0;2543:215:30;1531:13;:11;:13::i;:::-;-1:-1:-1;;;;;2627:22:30;::::1;2623:91;;2672:31;::::0;-1:-1:-1;;;2672:31:30;;2700:1:::1;2672:31;::::0;::::1;3587:51:43::0;3560:18;;2672:31:30::1;3441:203:43::0;2623:91:30::1;2723:28;2742:8;2723:18;:28::i;:::-;2543:215:::0;:::o;2771:149:14:-;2853:4;2900:13;;;;;;2876:5;;2853:4;;2882:13;;2900:6;2882:13;:::i;:::-;2876:20;;;;;;;;;;;;;-1:-1:-1;2876:20:14;;:37;;2771:149;-1:-1:-1;;2771:149:14:o;8726:128:35:-;8810:37;8819:5;8826:7;8835:5;8842:4;8810:8;:37::i;:::-;8726:128;;;:::o;18076:668:26:-;18218:20;18240:24;18414:22;18426:9;18414:11;:22::i;:::-;18399:37;;18562:12;18543:31;;18644:12;18625:16;:31;18621:117;;;18679:48;;-1:-1:-1;;;18679:48:26;;;;;22592:25:43;;;22633:18;;;22626:34;;;22565:18;;18679:48:26;22418:248:43;2718:196:13;2822:11;;;2788:7;2822:11;;;:5;:11;;;;;;;2843:43;;2874:12;;-1:-1:-1;;;2874:12:13;;22845:10:43;22833:23;;2874:12:13;;;22815:42:43;22788:18;;2874:12:13;22671:192:43;12852:1806:26;13329:17;13349:36;:17;:8;;:15;:17::i;:::-;2891:2:29;2780:123;13349:36:26;13329:56;;13518:24;13545:62;13553:9;13564:26;13570:19;:8;;:17;:19::i;:::-;13564:5;:26::i;:::-;13592:14;;;;:7;:14;:::i;:::-;13545:7;:62::i;:::-;13518:89;-1:-1:-1;243:2:29;-1:-1:-1;;13618:955:26;;;13722:23;13748:175;13791:13;;;;;;;;:::i;:::-;13822:14;;;;:7;:14;:::i;:::-;13854:16;13888:21;:8;;:19;:21::i;:::-;13748:25;:175::i;:::-;14470:92;;-1:-1:-1;;;14470:92:26;;13722:201;;-1:-1:-1;;;;;;14470:8:26;:20;;;;:92;;14491:9;;14502:5;;14509:1;;13722:201;;14470:92;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13645:928;13618:955;-1:-1:-1;;;;;14588:63:26;;14600:5;14588:63;14607:14;;;;:7;:14;:::i;:::-;14588:63;;;15127:10:43;15115:23;;;15097:42;;15170:2;15155:18;;15148:34;;;15070:18;14588:63:26;;;;;;;13155:1503;;12852:1806;;;;;;;:::o;10415:477:35:-;-1:-1:-1;;;;;3657:18:35;;;10514:24;3657:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;-1:-1:-1;;10580:37:35;;10576:310;;10656:5;10637:16;:24;10633:130;;;10688:60;;-1:-1:-1;;;10688:60:35;;-1:-1:-1;;;;;24090:32:43;;10688:60:35;;;24072:51:43;24139:18;;;24132:34;;;24182:18;;;24175:34;;;24045:18;;10688:60:35;23870:345:43;10633:130:35;10804:57;10813:5;10820:7;10848:5;10829:16;:24;10855:5;10804:8;:57::i;:::-;10504:388;10415:477;;;:::o;5393:300::-;-1:-1:-1;;;;;5476:18:35;;5472:86;;5517:30;;-1:-1:-1;;;5517:30:35;;5544:1;5517:30;;;3587:51:43;3560:18;;5517:30:35;3441:203:43;5472:86:35;-1:-1:-1;;;;;5571:16:35;;5567:86;;5610:32;;-1:-1:-1;;;5610:32:35;;5639:1;5610:32;;;3587:51:43;3560:18;;5610:32:35;3441:203:43;5567:86:35;5662:24;5670:4;5676:2;5680:5;5662:7;:24::i;1796:162:30:-;1684:7;1710:6;-1:-1:-1;;;;;1710:6:30;735:10:40;1855:23:30;1851:101;;1901:40;;-1:-1:-1;;;1901:40:30;;735:10:40;1901:40:30;;;3587:51:43;3560:18;;1901:40:30;3441:203:43;2286:134:13;2359:11;;;;;;;:5;:11;;;;;;;;;:19;;;2393:20;;15097:42:43;;;15155:18;;15148:34;;;2393:20:13;;15070:18:43;2393:20:13;;;;;;;2286:134;;:::o;10898:1436:26:-;11030:20;11052;11084:15;11255:324;11287:10;:13;;;11314:16;11320:9;11314:5;:16::i;:::-;11548:21;;;;:10;:21;:::i;:::-;11255:324;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11255:18:26;;-1:-1:-1;;;11255:324:26:i;:::-;11231:348;;-1:-1:-1;11231:348:26;-1:-1:-1;11659:14:26;11231:348;11676:33;;2123:1;11676:33;;;2169:1;11676:33;11659:50;-1:-1:-1;11831:67:26;11846:17;;;;:10;:17;:::i;:::-;11865:7;11874:23;;;;:10;:23;:::i;11831:67::-;12156:12;;11821:77;;-1:-1:-1;;;;;;12156:12:26;12248:23;;12244:83;;12273:54;;-1:-1:-1;;;12273:54:26;;-1:-1:-1;;;;;12273:36:26;;;;;:54;;12310:7;;12319;;12273:54;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;12244:83;11074:1260;;;10898:1436;;;;;:::o;2038:391:15:-;-1:-1:-1;;;;;;;;;;;;;;;;;2259:8:15;-1:-1:-1;;;;;2259:14:15;;2291:86;;;;;;;;2307:7;2291:86;;;;;;2316:25;2333:7;2316:16;:25::i;:::-;2291:86;;;;2343:8;2291:86;;;;2353:8;2291:86;;;;2363:13;2291:86;;;;;2403:4;2259:163;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2240:182;2038:391;-1:-1:-1;;;;;2038:391:15:o;7458:208:35:-;-1:-1:-1;;;;;7528:21:35;;7524:91;;7572:32;;-1:-1:-1;;;7572:32:35;;7601:1;7572:32;;;3587:51:43;3560:18;;7572:32:35;3441:203:43;7524:91:35;7624:35;7640:1;7644:7;7653:5;7624:7;:35::i;2912:187:30:-;2985:16;3004:6;;-1:-1:-1;;;;;3020:17:30;;;-1:-1:-1;;;;;;3020:17:30;;;;;;3052:40;;3004:6;;;;;;;3052:40;;2985:16;3052:40;2975:124;2912:187;:::o;2237:514:20:-;2345:9;2340:354;2364:16;:23;2360:1;:27;2340:354;;;2522:48;2542:16;2559:1;2542:19;;;;;;;;:::i;:::-;;;;;;;:27;;;2522:19;:48::i;:::-;2656:16;2673:1;2656:19;;;;;;;;:::i;:::-;;;;;;;:27;;;2584:15;:40;2600:16;2617:1;2600:19;;;;;;;;:::i;:::-;;;;;;;:23;;;2584:40;;;;;;;;;;;;;;;:69;2625:16;2642:1;2625:19;;;;;;;;:::i;:::-;;;;;;;:27;;;2584:69;;;;;;;;;;;;;;;:99;;;;;;:::i;:::-;-1:-1:-1;2389:3:20;;2340:354;;;;2709:35;2727:16;2709:35;;;;;;:::i;4631:264::-;4801:1;4787:16;;4781:23;4827:28;;;463:1;4827:28;4823:65;;4879:8;4864:24;;-1:-1:-1;;;4864:24:20;;;;;;;;:::i;9271:1333:26:-;9425:34;;:::i;:::-;-1:-1:-1;;;;;;;;;;;;;;;;;9823:20:26;;9873:140;9893:10;9917:19;;;;9950:22;;;;9986:17;;;;9917:10;9986:17;:::i;:::-;9873:6;:140::i;:::-;9822:191;;;;10102:20;10124;10148:49;10168:10;10180:16;10148:19;:49::i;:::-;10101:96;;-1:-1:-1;10101:96:26;-1:-1:-1;10320:66:26;10328:17;;;;:10;:17;:::i;:::-;10347:7;10356;10320:66;;;;;;;10365:4;10320:66;:::i;:::-;10371:14;10320:7;:66::i;:::-;10452:42;;;;;;;;;;;;;;;;;;;10518:15;;10307:79;;-1:-1:-1;10452:42:26;;-1:-1:-1;10554:10:26;;10518:15;10510:87;;10535:17;;;;:10;:17;:::i;:::-;10510:87;;;30238:10:43;30226:23;;;30208:42;;30281:2;30266:18;;30259:34;;;30309:18;;30302:34;;;30196:2;30181:18;10510:87:26;;;;;;;9491:1113;;;;9271:1333;;;;;;:::o;9701:432:35:-;-1:-1:-1;;;;;9813:19:35;;9809:89;;9855:32;;-1:-1:-1;;;9855:32:35;;9884:1;9855:32;;;3587:51:43;3560:18;;9855:32:35;3441:203:43;9809:89:35;-1:-1:-1;;;;;9911:21:35;;9907:90;;9955:31;;-1:-1:-1;;;9955:31:35;;9983:1;9955:31;;;3587:51:43;3560:18;;9955:31:35;3441:203:43;9907:90:35;-1:-1:-1;;;;;10006:18:35;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;:35;;;10051:76;;;;10101:7;-1:-1:-1;;;;;10085:31:35;10094:5;-1:-1:-1;;;;;10085:31:35;;10110:5;10085:31;;;;6156:25:43;;6144:2;6129:18;;6010:177;10085:31:35;;;;;;;;9701:432;;;;:::o;16585:172:26:-;16656:16;16729:21;16692:33;16729:21;16692:9;:33;:::i;:::-;16691:59;;;;:::i;1573:123:29:-;1633:7;1667:21;188:2;1633:7;1667:4;;:21;:::i;:::-;1659:30;;;:::i;1874:152::-;1936:6;1975:42;243:2;188;1975:4;;:42;:::i;:::-;1968:50;;;:::i;:::-;1961:58;;;1874:152;-1:-1:-1;;;1874:152:29:o;16981:139:26:-;17045:16;17080:33;17092:21;-1:-1:-1;;;;;17080:33:26;;;:::i;2939:462:25:-;3073:24;-1:-1:-1;;;;;3113:19:25;;3109:46;;3148:6;3134:21;;3109:46;3251:21;3257:3;3262:9;3251:5;:21::i;:::-;-1:-1:-1;3385:9:25;;2939:462;-1:-1:-1;;2939:462:25:o;2186:130:29:-;2250:12;2281:28;:4;243:2;2281:4;;:28;:::i;:::-;2274:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2274:35:29;;2186:130;-1:-1:-1;;;;;;2186:130:29:o;640:284:28:-;824:17;877:6;885:7;894:9;905:11;860:57;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;853:64;;640:284;;;;;;:::o;6008:1107:35:-;-1:-1:-1;;;;;6097:18:35;;6093:540;;6249:5;6233:12;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;6093:540:35;;-1:-1:-1;6093:540:35;;-1:-1:-1;;;;;6307:15:35;;6285:19;6307:15;;;:9;:15;;;;;;6340:19;;;6336:115;;;6386:50;;-1:-1:-1;;;6386:50:35;;-1:-1:-1;;;;;24090:32:43;;6386:50:35;;;24072:51:43;24139:18;;;24132:34;;;24182:18;;;24175:34;;;24045:18;;6386:50:35;23870:345:43;6336:115:35;-1:-1:-1;;;;;6571:15:35;;;;;;:9;:15;;;;;6589:19;;;;6571:37;;6093:540;-1:-1:-1;;;;;6647:16:35;;6643:425;;6810:12;:21;;;;;;;6643:425;;;-1:-1:-1;;;;;7021:13:35;;;;;;:9;:13;;;;;:22;;;;;;6643:425;7098:2;-1:-1:-1;;;;;7083:25:35;7092:4;-1:-1:-1;;;;;7083:25:35;;7102:5;7083:25;;;;6156::43;;6144:2;6129:18;;6010:177;7083:25:35;;;;;;;;6008:1107;;;:::o;17344:147:26:-;17409:15;17450:33;17462:21;17450:9;:33;:::i;598:506:29:-;791:18;;732:17;;791:22;;;934:163;;1074:7;1083:13;1057:40;;;;;;;;32328:19:43;;;32403:3;32381:16;-1:-1:-1;;;;;;32377:51:43;32372:2;32363:12;;32356:73;32454:2;32445:12;;32173:290;1057:40:29;;;;;;;;;;;;;934:163;;;976:7;985:13;1017:10;1030:11;959:83;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;934:163;927:170;;598:506;;;;;;:::o;2037:567:25:-;2198:20;2220:24;2291:44;2302:9;2313:12;2327:7;2291:10;:44::i;:::-;2256:79;;-1:-1:-1;2256:79:25;-1:-1:-1;2571:26:25;2577:5;2256:79;2571:5;:26::i;:::-;2037:567;;;;;;;:::o;3188:766:15:-;3389:31;;:::i;:::-;3554:20;3577:26;3588:4;:14;;;3577:10;:26::i;:::-;3617:15;;;;3554:49;;-1:-1:-1;3617:19:15;3613:53;;3638:28;3650:4;:15;;;3638:11;:28::i;:::-;3755:8;-1:-1:-1;;;;;3755:13:15;;3777:12;3809:92;;;;;;;;3825:7;3809:92;;;;;;3834:25;3851:7;3834:16;:25::i;:::-;3809:92;;;;3861:8;3809:92;;;;3871:8;3809:92;;;;3899:1;3881:4;:15;;;:19;3809:92;;;;;3919:14;3755:192;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3677:270;3188:766;-1:-1:-1;;;;;;;3188:766:15:o;7984:206:35:-;-1:-1:-1;;;;;8054:21:35;;8050:89;;8098:30;;-1:-1:-1;;;8098:30:35;;8125:1;8098:30;;;3587:51:43;3560:18;;8098:30:35;3441:203:43;8050:89:35;8148:35;8156:7;8173:1;8177:5;8148:7;:35::i;4650:191:15:-;4716:17;4762:10;4749:9;:23;4745:62;;4781:26;;-1:-1:-1;;;4781:26:15;;4797:9;4781:26;;;6156:25:43;6129:18;;4781:26:15;6010:177:43;4745:62:15;-1:-1:-1;4824:10:15;4650:191::o;5218:410::-;5371:15;5389:8;-1:-1:-1;;;;;5389:16:15;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5371:36;-1:-1:-1;;;;;;5421:21:15;;5417:54;;5451:20;;-1:-1:-1;;;5451:20:15;;;;;;;;;;;5417:54;1797:53:38;;;5578:10:15;1797:53:38;;;34029:34:43;;;5598:8:15;-1:-1:-1;;;;;34099:15:43;;;34079:18;;;34072:43;34131:18;;;;34124:34;;;1797:53:38;;;;;;;;;;33964:18:43;;;;1797:53:38;;;;;;;;;-1:-1:-1;;;;;1797:53:38;-1:-1:-1;;;1797:53:38;;;7968:11;;5545:76:15;;:32;;;5609:11;;1770:81:38;;5545:32:15;;-1:-1:-1;;;;1797:53:38;;-1:-1:-1;;;5545:32:15;7934:5:38;7929:60;8041:7;8031:176;;8085:4;8079:11;8130:16;8127:1;8122:3;8107:40;8176:16;8171:3;8164:29;8031:176;-1:-1:-1;;8284:1:38;8278:8;8234:16;;-1:-1:-1;8310:15:38;;:68;;8362:11;8377:1;8362:16;;8310:68;;;-1:-1:-1;;;;;8328:26:38;;;:31;8310:68;8306:146;;;8401:40;;-1:-1:-1;;;8401:40:38;;-1:-1:-1;;;;;3605:32:43;;8401:40:38;;;3587:51:43;3560:18;;8401:40:38;3441:203:43;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:250:43:-;99:1;109:113;123:6;120:1;117:13;109:113;;;199:11;;;193:18;180:11;;;173:39;145:2;138:10;109:113;;;-1:-1:-1;;256:1:43;238:16;;231:27;14:250::o;269:271::-;311:3;349:5;343:12;376:6;371:3;364:19;392:76;461:6;454:4;449:3;445:14;438:4;431:5;427:16;392:76;:::i;:::-;522:2;501:15;-1:-1:-1;;497:29:43;488:39;;;;529:4;484:50;;269:271;-1:-1:-1;;269:271:43:o;545:220::-;694:2;683:9;676:21;657:4;714:45;755:2;744:9;740:18;732:6;714:45;:::i;770:131::-;-1:-1:-1;;;;;845:31:43;;835:42;;825:70;;891:1;888;881:12;906:315;974:6;982;1035:2;1023:9;1014:7;1010:23;1006:32;1003:52;;;1051:1;1048;1041:12;1003:52;1090:9;1077:23;1109:31;1134:5;1109:31;:::i;:::-;1159:5;1211:2;1196:18;;;;1183:32;;-1:-1:-1;;;906:315:43:o;1418:158::-;1480:5;1525:3;1516:6;1511:3;1507:16;1503:26;1500:46;;;1542:1;1539;1532:12;1500:46;-1:-1:-1;1564:6:43;1418:158;-1:-1:-1;1418:158:43:o;1581:360::-;1669:6;1722:2;1710:9;1701:7;1697:23;1693:32;1690:52;;;1738:1;1735;1728:12;1690:52;1778:9;1765:23;-1:-1:-1;;;;;1803:6:43;1800:30;1797:50;;;1843:1;1840;1833:12;1797:50;1866:69;1927:7;1918:6;1907:9;1903:22;1866:69;:::i;2100:1336::-;2020:12;;2008:25;;2082:4;2071:16;;;2065:23;2049:14;;;2042:47;2466:4;2514:3;2499:19;;2591:2;2629:3;2624:2;2613:9;2609:18;2602:31;2653:6;2688;2682:13;2719:6;2711;2704:22;2757:3;2746:9;2742:19;2735:26;;2820:3;2810:6;2807:1;2803:14;2792:9;2788:30;2784:40;2770:54;;2843:4;2882;2874:6;2870:17;2905:1;2915:429;2929:6;2926:1;2923:13;2915:429;;;2994:22;;;-1:-1:-1;;2990:37:43;2978:50;;3051:13;;3092:9;;3077:25;;3141:11;;3135:18;3173:15;;;3166:27;;;3216:48;3248:15;;;3135:18;3216:48;:::i;:::-;3206:58;-1:-1:-1;;3322:12:43;;;;3287:15;;;;2951:1;2944:9;2915:429;;;-1:-1:-1;;2020:12:43;;3426:2;3411:18;;2008:25;-1:-1:-1;;;2082:4:43;2071:16;;2065:23;2049:14;;;2042:47;-1:-1:-1;3361:6:43;-1:-1:-1;3376:54:43;1946:149;3649:154;3708:5;3753:2;3744:6;3739:3;3735:16;3731:25;3728:45;;;3769:1;3766;3759:12;3808:347;3859:8;3869:6;3923:3;3916:4;3908:6;3904:17;3900:27;3890:55;;3941:1;3938;3931:12;3890:55;-1:-1:-1;3964:20:43;;-1:-1:-1;;;;;3996:30:43;;3993:50;;;4039:1;4036;4029:12;3993:50;4076:4;4068:6;4064:17;4052:29;;4128:3;4121:4;4112:6;4104;4100:19;4096:30;4093:39;4090:59;;;4145:1;4142;4135:12;4090:59;3808:347;;;;;:::o;4160:1047::-;4302:6;4310;4318;4326;4334;4342;4350;4403:3;4391:9;4382:7;4378:23;4374:33;4371:53;;;4420:1;4417;4410:12;4371:53;4443;4488:7;4477:9;4443:53;:::i;:::-;4433:63;;4543:2;4532:9;4528:18;4515:32;4505:42;;4598:3;4587:9;4583:19;4570:33;-1:-1:-1;;;;;4663:2:43;4655:6;4652:14;4649:34;;;4679:1;4676;4669:12;4649:34;4718:58;4768:7;4759:6;4748:9;4744:22;4718:58;:::i;:::-;4795:8;;-1:-1:-1;4692:84:43;-1:-1:-1;4880:3:43;4865:19;;4852:33;;-1:-1:-1;4894:31:43;4852:33;4894:31;:::i;:::-;4944:5;;-1:-1:-1;5002:3:43;4987:19;;4974:33;;5019:16;;;5016:36;;;5048:1;5045;5038:12;5016:36;;5087:60;5139:7;5128:8;5117:9;5113:24;5087:60;:::i;:::-;4160:1047;;;;-1:-1:-1;4160:1047:43;;-1:-1:-1;4160:1047:43;;;;5061:86;;-1:-1:-1;;;4160:1047:43:o;6192:456::-;6269:6;6277;6285;6338:2;6326:9;6317:7;6313:23;6309:32;6306:52;;;6354:1;6351;6344:12;6306:52;6393:9;6380:23;6412:31;6437:5;6412:31;:::i;:::-;6462:5;-1:-1:-1;6519:2:43;6504:18;;6491:32;6532:33;6491:32;6532:33;:::i;:::-;6192:456;;6584:7;;-1:-1:-1;;;6638:2:43;6623:18;;;;6610:32;;6192:456::o;6842:163::-;6909:20;;6969:10;6958:22;;6948:33;;6938:61;;6995:1;6992;6985:12;6938:61;6842:163;;;:::o;7010:252::-;7077:6;7085;7138:2;7126:9;7117:7;7113:23;7109:32;7106:52;;;7154:1;7151;7144:12;7106:52;7177:28;7195:9;7177:28;:::i;7267:118::-;7353:5;7346:13;7339:21;7332:5;7329:32;7319:60;;7375:1;7372;7365:12;7390:489;7484:6;7492;7545:2;7533:9;7524:7;7520:23;7516:32;7513:52;;;7561:1;7558;7551:12;7513:52;7601:9;7588:23;-1:-1:-1;;;;;7626:6:43;7623:30;7620:50;;;7666:1;7663;7656:12;7620:50;7689:69;7750:7;7741:6;7730:9;7726:22;7689:69;:::i;:::-;7679:79;;;7808:2;7797:9;7793:18;7780:32;7821:28;7843:5;7821:28;:::i;:::-;7868:5;7858:15;;;7390:489;;;;;:::o;7884:255::-;2020:12;;2008:25;;2082:4;2071:16;;;2065:23;2049:14;;;2042:47;8076:2;8061:18;;8088:45;1946:149;8144:159;8211:20;;8271:6;8260:18;;8250:29;;8240:57;;8293:1;8290;8283:12;8308:256;8374:6;8382;8435:2;8423:9;8414:7;8410:23;8406:32;8403:52;;;8451:1;8448;8441:12;8403:52;8474:28;8492:9;8474:28;:::i;:::-;8464:38;;8521:37;8554:2;8543:9;8539:18;8521:37;:::i;:::-;8511:47;;8308:256;;;;;:::o;9028:247::-;9087:6;9140:2;9128:9;9119:7;9115:23;9111:32;9108:52;;;9156:1;9153;9146:12;9108:52;9195:9;9182:23;9214:31;9239:5;9214:31;:::i;9485:669::-;9598:6;9606;9614;9622;9675:3;9663:9;9654:7;9650:23;9646:33;9643:53;;;9692:1;9689;9682:12;9643:53;9715;9760:7;9749:9;9715:53;:::i;:::-;9705:63;;9819:2;9808:9;9804:18;9791:32;-1:-1:-1;;;;;9838:6:43;9835:30;9832:50;;;9878:1;9875;9868:12;9832:50;9917:58;9967:7;9958:6;9947:9;9943:22;9917:58;:::i;:::-;9994:8;;-1:-1:-1;9891:84:43;-1:-1:-1;;10079:3:43;10064:19;;10051:33;10093:31;10051:33;10093:31;:::i;:::-;9485:669;;;;-1:-1:-1;9485:669:43;;-1:-1:-1;;9485:669:43:o;10159:395::-;10250:8;10260:6;10314:3;10307:4;10299:6;10295:17;10291:27;10281:55;;10332:1;10329;10322:12;10281:55;-1:-1:-1;10355:20:43;;-1:-1:-1;;;;;10387:30:43;;10384:50;;;10430:1;10427;10420:12;10384:50;10467:4;10459:6;10455:17;10443:29;;10527:3;10520:4;10510:6;10507:1;10503:14;10495:6;10491:27;10487:38;10484:47;10481:67;;;10544:1;10541;10534:12;10559:504;10684:6;10692;10745:2;10733:9;10724:7;10720:23;10716:32;10713:52;;;10761:1;10758;10751:12;10713:52;10801:9;10788:23;-1:-1:-1;;;;;10826:6:43;10823:30;10820:50;;;10866:1;10863;10856:12;10820:50;10905:98;10995:7;10986:6;10975:9;10971:22;10905:98;:::i;:::-;11022:8;;10879:124;;-1:-1:-1;10559:504:43;-1:-1:-1;;;;10559:504:43:o;11068:184::-;11126:6;11179:2;11167:9;11158:7;11154:23;11150:32;11147:52;;;11195:1;11192;11185:12;11147:52;11218:28;11236:9;11218:28;:::i;11439:553::-;11525:6;11533;11541;11549;11602:2;11590:9;11581:7;11577:23;11573:32;11570:52;;;11618:1;11615;11608:12;11570:52;11641:28;11659:9;11641:28;:::i;:::-;11631:38;;11688:37;11721:2;11710:9;11706:18;11688:37;:::i;:::-;11678:47;;11776:2;11765:9;11761:18;11748:32;-1:-1:-1;;;;;11795:6:43;11792:30;11789:50;;;11835:1;11832;11825:12;11789:50;11874:58;11924:7;11915:6;11904:9;11900:22;11874:58;:::i;:::-;11439:553;;;;-1:-1:-1;11951:8:43;-1:-1:-1;;;;11439:553:43:o;12500:656::-;12637:6;12645;12653;12697:9;12688:7;12684:23;12727:3;12723:2;12719:12;12716:32;;;12744:1;12741;12734:12;12716:32;12784:9;12771:23;-1:-1:-1;;;;;12809:6:43;12806:30;12803:50;;;12849:1;12846;12839:12;12803:50;12872:69;12933:7;12924:6;12913:9;12909:22;12872:69;:::i;:::-;12862:79;-1:-1:-1;;12975:2:43;-1:-1:-1;;12957:16:43;;12953:25;12950:45;;;12991:1;12988;12981:12;12950:45;;13029:2;13018:9;13014:18;13004:28;;13082:2;13071:9;13067:18;13054:32;13095:31;13120:5;13095:31;:::i;:::-;13145:5;13135:15;;;12500:656;;;;;:::o;13161:609::-;13401:4;13443:3;13432:9;13428:19;13420:27;;13480:6;13474:13;13463:9;13456:32;-1:-1:-1;;;;;13548:4:43;13540:6;13536:17;13530:24;13526:49;13519:4;13508:9;13504:20;13497:79;13623:4;13615:6;13611:17;13605:24;13638:62;13694:4;13683:9;13679:20;13665:12;2020;;2008:25;;2082:4;2071:16;;;2065:23;2049:14;;2042:47;1946:149;13638:62;-1:-1:-1;2020:12:43;;13759:3;13744:19;;2008:25;2082:4;2071:16;;2065:23;2049:14;;;2042:47;13709:55;1946:149;13775:388;13843:6;13851;13904:2;13892:9;13883:7;13879:23;13875:32;13872:52;;;13920:1;13917;13910:12;13872:52;13959:9;13946:23;13978:31;14003:5;13978:31;:::i;:::-;14028:5;-1:-1:-1;14085:2:43;14070:18;;14057:32;14098:33;14057:32;14098:33;:::i;14168:235::-;14252:6;14305:2;14293:9;14284:7;14280:23;14276:32;14273:52;;;14321:1;14318;14311:12;14273:52;14344:53;14389:7;14378:9;14344:53;:::i;14408:380::-;14487:1;14483:12;;;;14530;;;14551:61;;14605:4;14597:6;14593:17;14583:27;;14551:61;14658:2;14650:6;14647:14;14627:18;14624:38;14621:161;;14704:10;14699:3;14695:20;14692:1;14685:31;14739:4;14736:1;14729:15;14767:4;14764:1;14757:15;14793:127;14854:10;14849:3;14845:20;14842:1;14835:31;14885:4;14882:1;14875:15;14909:4;14906:1;14899:15;15193:253;15265:2;15259:9;15307:4;15295:17;;-1:-1:-1;;;;;15327:34:43;;15363:22;;;15324:62;15321:88;;;15389:18;;:::i;:::-;15425:2;15418:22;15193:253;:::o;15451:257::-;15523:4;15517:11;;;15555:17;;-1:-1:-1;;;;;15587:34:43;;15623:22;;;15584:62;15581:88;;;15649:18;;:::i;15713:275::-;15784:2;15778:9;15849:2;15830:13;;-1:-1:-1;;15826:27:43;15814:40;;-1:-1:-1;;;;;15869:34:43;;15905:22;;;15866:62;15863:88;;;15931:18;;:::i;:::-;15967:2;15960:22;15713:275;;-1:-1:-1;15713:275:43:o;15993:186::-;16041:4;-1:-1:-1;;;;;16066:6:43;16063:30;16060:56;;;16096:18;;:::i;:::-;-1:-1:-1;16162:2:43;16141:15;-1:-1:-1;;16137:29:43;16168:4;16133:40;;15993:186::o;16184:2117::-;16376:9;-1:-1:-1;;;;;16451:2:43;16443:6;16440:14;16437:40;;;16457:18;;:::i;:::-;16503:6;16500:1;16496:14;16529:4;16553:28;16577:2;16573;16569:11;16553:28;:::i;:::-;16615:19;;;16685:14;;;;16650:12;;;;16722:14;16711:26;;16708:46;;;16750:1;16747;16740:12;16708:46;16774:5;16788:1480;16804:6;16799:3;16796:15;16788:1480;;;16890:3;16877:17;16926:2;16913:11;16910:19;16907:109;;;16970:1;16999:2;16995;16988:14;16907:109;17039:23;;17107:4;17086:14;17082:23;;;17078:34;17075:124;;;17153:1;17182:2;17178;17171:14;17075:124;17227:22;;:::i;:::-;17278:21;17296:2;17278:21;:::i;:::-;17269:7;17262:38;17338:30;17364:2;17360;17356:11;17338:30;:::i;:::-;17333:2;17324:7;17320:16;17313:56;17392:2;17442;17438;17434:11;17421:25;17473:2;17465:6;17462:14;17459:104;;;17517:1;17546:2;17542;17535:14;17459:104;17586:15;;;;;17643:14;17636:4;17628:13;;17624:34;17614:135;;17701:1;17731:3;17726;17719:16;17614:135;17786:2;17773:16;17815:49;17831:32;17859:3;17831:32;:::i;:::-;17815:49;:::i;:::-;17891:3;17884:5;17877:18;17937:14;17932:2;17926:3;17922:2;17918:12;17914:21;17911:41;17908:134;;;17994:1;18024:3;18019;18012:16;17908:134;18097:3;18092:2;18088;18084:11;18079:2;18072:5;18068:14;18055:46;18147:1;18125:15;;;18121:24;;18114:35;;;;18169:16;;;18162:31;18206:20;;-1:-1:-1;18246:12:43;;;;16821;;16788:1480;;;-1:-1:-1;18290:5:43;16184:2117;-1:-1:-1;;;;;;;16184:2117:43:o;18306:331::-;18411:9;18422;18464:8;18452:10;18449:24;18446:44;;;18486:1;18483;18476:12;18446:44;18515:6;18505:8;18502:20;18499:40;;;18535:1;18532;18525:12;18499:40;-1:-1:-1;;18561:23:43;;;18606:25;;;;;-1:-1:-1;18306:331:43:o;18642:476::-;18833:3;18871:6;18865:13;18887:66;18946:6;18941:3;18934:4;18926:6;18922:17;18887:66;:::i;:::-;18975:16;;19028:6;19020;18975:16;19000:35;19092:1;19054:18;;19081:13;;;-1:-1:-1;19054:18:43;;18642:476;-1:-1:-1;;;18642:476:43:o;19123:266::-;19211:6;19206:3;19199:19;19263:6;19256:5;19249:4;19244:3;19240:14;19227:43;-1:-1:-1;19315:1:43;19290:16;;;19308:4;19286:27;;;19279:38;;;;19371:2;19350:15;;;-1:-1:-1;;19346:29:43;19337:39;;;19333:50;;19123:266::o;19394:244::-;19551:2;19540:9;19533:21;19514:4;19571:61;19628:2;19617:9;19613:18;19605:6;19597;19571:61;:::i;19643:127::-;19704:10;19699:3;19695:20;19692:1;19685:31;19735:4;19732:1;19725:15;19759:4;19756:1;19749:15;19775:331;19874:4;19932:11;19919:25;20026:3;20022:8;20011;19995:14;19991:29;19987:44;19967:18;19963:69;19953:97;;20046:1;20043;20036:12;19953:97;20067:33;;;;;19775:331;-1:-1:-1;;19775:331:43:o;20111:521::-;20188:4;20194:6;20254:11;20241:25;20348:2;20344:7;20333:8;20317:14;20313:29;20309:43;20289:18;20285:68;20275:96;;20367:1;20364;20357:12;20275:96;20394:33;;20446:20;;;-1:-1:-1;;;;;;20478:30:43;;20475:50;;;20521:1;20518;20511:12;20475:50;20554:4;20542:17;;-1:-1:-1;20585:14:43;20581:27;;;20571:38;;20568:58;;;20622:1;20619;20612:12;20637:129;-1:-1:-1;;;;;20715:5:43;20711:30;20704:5;20701:41;20691:69;;20756:1;20753;20746:12;20771:990;21147:10;21120:25;21138:6;21120:25;:::i;:::-;21116:42;21105:9;21098:61;21222:4;21214:6;21210:17;21197:31;21190:4;21179:9;21175:20;21168:61;21079:4;21276;21268:6;21264:17;21251:31;21291:30;21315:5;21291:30;:::i;:::-;-1:-1:-1;;;;;21363:5:43;21359:30;21352:4;21341:9;21337:20;21330:60;;21426:6;21421:2;21410:9;21406:18;21399:34;21470:3;21464;21453:9;21449:19;21442:32;21497:62;21554:3;21543:9;21539:19;21531:6;21523;21497:62;:::i;:::-;-1:-1:-1;;;;;21596:32:43;;21616:3;21575:19;;21568:61;21666:22;;;21660:3;21645:19;;21638:51;21706:49;21670:6;21740;21732;21706:49;:::i;:::-;21698:57;20771:990;-1:-1:-1;;;;;;;;;;20771:990:43:o;21766:647::-;21845:6;21898:2;21886:9;21877:7;21873:23;21869:32;21866:52;;;21914:1;21911;21904:12;21866:52;21947:9;21941:16;-1:-1:-1;;;;;21972:6:43;21969:30;21966:50;;;22012:1;22009;22002:12;21966:50;22035:22;;22088:4;22080:13;;22076:27;-1:-1:-1;22066:55:43;;22117:1;22114;22107:12;22066:55;22146:2;22140:9;22171:48;22187:31;22215:2;22187:31;:::i;22171:48::-;22242:2;22235:5;22228:17;22282:7;22277:2;22272;22268;22264:11;22260:20;22257:33;22254:53;;;22303:1;22300;22293:12;22254:53;22316:67;22380:2;22375;22368:5;22364:14;22359:2;22355;22351:11;22316:67;:::i;22868:245::-;22926:6;22979:2;22967:9;22958:7;22954:23;22950:32;22947:52;;;22995:1;22992;22985:12;22947:52;23034:9;23021:23;23053:30;23077:5;23053:30;:::i;23118:479::-;23385:1;23381;23376:3;23372:11;23368:19;23360:6;23356:32;23345:9;23338:51;23425:6;23420:2;23409:9;23405:18;23398:34;23480:6;23472;23468:19;23463:2;23452:9;23448:18;23441:47;23524:3;23519:2;23508:9;23504:18;23497:31;23319:4;23545:46;23586:3;23575:9;23571:19;23563:6;23545:46;:::i;24220:379::-;24413:2;24402:9;24395:21;24376:4;24439:45;24480:2;24469:9;24465:18;24457:6;24439:45;:::i;:::-;24532:9;24524:6;24520:22;24515:2;24504:9;24500:18;24493:50;24560:33;24586:6;24578;24560:33;:::i;24604:245::-;24671:6;24724:2;24712:9;24703:7;24699:23;24695:32;24692:52;;;24740:1;24737;24730:12;24692:52;24772:9;24766:16;24791:28;24813:5;24791:28;:::i;24854:887::-;25073:2;25062:9;25055:21;25131:10;25122:6;25116:13;25112:30;25107:2;25096:9;25092:18;25085:58;25197:4;25189:6;25185:17;25179:24;25174:2;25163:9;25159:18;25152:52;25036:4;25251:2;25243:6;25239:15;25233:22;25292:4;25286:3;25275:9;25271:19;25264:33;25320:52;25367:3;25356:9;25352:19;25338:12;25320:52;:::i;:::-;25306:66;;25421:2;25413:6;25409:15;25403:22;25495:2;25491:7;25479:9;25471:6;25467:22;25463:36;25456:4;25445:9;25441:20;25434:66;25523:41;25557:6;25541:14;25523:41;:::i;:::-;25633:3;25621:16;;;;25615:23;25608:31;25601:39;25595:3;25580:19;;25573:68;-1:-1:-1;;;;;;;;25702:32:43;;;;25695:4;25680:20;;;25673:62;25509:55;24854:887::o;25746:284::-;25816:5;25864:4;25852:9;25847:3;25843:19;25839:30;25836:50;;;25882:1;25879;25872:12;25836:50;25904:22;;:::i;:::-;25895:31;;25955:9;25949:16;25942:5;25935:31;26019:2;26008:9;26004:18;25998:25;25993:2;25986:5;25982:14;25975:49;25746:284;;;;:::o;26035:258::-;26134:6;26187:2;26175:9;26166:7;26162:23;26158:32;26155:52;;;26203:1;26200;26193:12;26155:52;26226:61;26279:7;26268:9;26226:61;:::i;26423:542::-;26524:2;26519:3;26516:11;26513:446;;;26560:1;26584:5;26581:1;26574:16;26628:4;26625:1;26615:18;26698:2;26686:10;26682:19;26679:1;26675:27;26669:4;26665:38;26734:4;26722:10;26719:20;26716:47;;;-1:-1:-1;26757:4:43;26716:47;26812:2;26807:3;26803:12;26800:1;26796:20;26790:4;26786:31;26776:41;;26867:82;26885:2;26878:5;26875:13;26867:82;;;26930:17;;;26911:1;26900:13;26867:82;;;26871:3;;;26423:542;;;:::o;27141:1341::-;27265:3;27259:10;-1:-1:-1;;;;;27284:6:43;27281:30;27278:56;;;27314:18;;:::i;:::-;27343:96;27432:6;27392:38;27424:4;27418:11;27392:38;:::i;:::-;27386:4;27343:96;:::i;:::-;27494:4;;27551:2;27540:14;;27568:1;27563:662;;;;28269:1;28286:6;28283:89;;;-1:-1:-1;28338:19:43;;;28332:26;28283:89;-1:-1:-1;;27098:1:43;27094:11;;;27090:24;27086:29;27076:40;27122:1;27118:11;;;27073:57;28385:81;;27533:943;;27563:662;26370:1;26363:14;;;26407:4;26394:18;;-1:-1:-1;;27599:20:43;;;27716:236;27730:7;27727:1;27724:14;27716:236;;;27819:19;;;27813:26;27798:42;;27911:27;;;;27879:1;27867:14;;;;27746:19;;27716:236;;;27720:3;27980:6;27971:7;27968:19;27965:201;;;28041:19;;;28035:26;-1:-1:-1;;28124:1:43;28120:14;;;28136:3;28116:24;28112:37;28108:42;28093:58;28078:74;;27965:201;-1:-1:-1;;;;;28212:1:43;28196:14;;;28192:22;28179:36;;-1:-1:-1;27141:1341:43:o;28487:1164::-;28703:4;28732:2;28772;28761:9;28757:18;28802:2;28791:9;28784:21;28825:6;28860;28854:13;28891:6;28883;28876:22;28917:2;28907:12;;28950:2;28939:9;28935:18;28928:25;;29012:2;29002:6;28999:1;28995:14;28984:9;28980:30;28976:39;29050:2;29042:6;29038:15;29071:1;29081:541;29095:6;29092:1;29089:13;29081:541;;;29160:22;;;-1:-1:-1;;29156:36:43;29144:49;;29216:13;;29288:9;;29299:10;29284:26;29269:42;;29358:11;;;29352:18;29372:6;29348:31;29331:15;;;29324:56;29419:11;;29413:18;29252:4;29451:15;;;29444:27;;;29494:48;29526:15;;;29413:18;29494:48;:::i;:::-;29600:12;;;;29484:58;-1:-1:-1;;;29565:15:43;;;;29117:1;29110:9;29081:541;;;-1:-1:-1;29639:6:43;;28487:1164;-1:-1:-1;;;;;;;;28487:1164:43:o;29656:347::-;29744:6;29797:2;29785:9;29776:7;29772:23;29768:32;29765:52;;;29813:1;29810;29803:12;29765:52;29839:22;;:::i;:::-;29897:9;29884:23;29877:5;29870:38;29968:2;29957:9;29953:18;29940:32;29935:2;29928:5;29924:14;29917:56;29992:5;29982:15;;;29656:347;;;;:::o;30347:127::-;30408:10;30403:3;30399:20;30396:1;30389:31;30439:4;30436:1;30429:15;30463:4;30460:1;30453:15;30479:217;30519:1;30545;30535:132;;30589:10;30584:3;30580:20;30577:1;30570:31;30624:4;30621:1;30614:15;30652:4;30649:1;30642:15;30535:132;-1:-1:-1;30681:9:43;;30479:217::o;30701:168::-;30774:9;;;30805;;30822:15;;;30816:22;;30802:37;30792:71;;30843:18;;:::i;30874:255::-;30994:19;;31033:2;31025:11;;31022:101;;;-1:-1:-1;;31094:2:43;31090:12;;;31087:1;31083:20;31079:33;31068:45;30874:255;;;;:::o;31134:331::-;-1:-1:-1;;;;;;31254:19:43;;31338:11;;;;31369:1;31361:10;;31358:101;;;31446:2;31440;31433:3;31430:1;31426:11;31423:1;31419:19;31415:28;31411:2;31407:37;31403:46;31394:55;;31358:101;;;31134:331;;;;:::o;31470:568::-;-1:-1:-1;;;;;31735:3:43;31731:28;31722:6;31717:3;31713:16;31709:51;31704:3;31697:64;31821:10;31816:3;31812:20;31803:6;31798:3;31794:16;31790:43;31786:1;31781:3;31777:11;31770:64;31864:6;31859:2;31854:3;31850:12;31843:28;31679:3;31900:6;31894:13;31916:75;31984:6;31979:2;31974:3;31970:12;31963:4;31955:6;31951:17;31916:75;:::i;:::-;32011:16;;;;32029:2;32007:25;;31470:568;-1:-1:-1;;;;;31470:568:43:o;32043:125::-;32108:9;;;32129:10;;;32126:36;;;32142:18;;:::i;32468:532::-;32709:6;32704:3;32697:19;-1:-1:-1;;;;;32772:3:43;32768:28;32759:6;32754:3;32750:16;32746:51;32741:2;32736:3;32732:12;32725:73;32828:6;32823:2;32818:3;32814:12;32807:28;32679:3;32864:6;32858:13;32880:73;32946:6;32941:2;32936:3;32932:12;32927:2;32919:6;32915:15;32880:73;:::i;:::-;32973:16;;;;32991:2;32969:25;;32468:532;-1:-1:-1;;;;;32468:532:43:o;33005:523::-;33107:6;33160:3;33148:9;33139:7;33135:23;33131:33;33128:53;;;33177:1;33174;33167:12;33128:53;33203:22;;:::i;:::-;33254:9;33248:16;33241:5;33234:31;33310:2;33299:9;33295:18;33289:25;33323:32;33347:7;33323:32;:::i;:::-;33382:2;33371:14;;33364:31;33427:70;33489:7;33484:2;33469:18;;33427:70;:::i;:::-;33422:2;33411:14;;33404:94;33415:5;33005:523;-1:-1:-1;;;33005:523:43:o;33533:251::-;33603:6;33656:2;33644:9;33635:7;33631:23;33627:32;33624:52;;;33672:1;33669;33662:12;33624:52;33704:9;33698:16;33723:31;33748:5;33723:31;:::i", - "linkReferences": {}, - "immutableReferences": { - "1454": [ - { "start": 1288, "length": 32 }, - { "start": 2488, "length": 32 }, - { "start": 4114, "length": 32 }, - { "start": 4745, "length": 32 }, - { "start": 5619, "length": 32 }, - { "start": 7612, "length": 32 }, - { "start": 7926, "length": 32 }, - { "start": 8109, "length": 32 } - ], - "2844": [ - { "start": 1609, "length": 32 }, - { "start": 6731, "length": 32 }, - { "start": 6848, "length": 32 }, - { "start": 7364, "length": 32 } - ] - } - }, - "methodIdentifiers": { - "SEND()": "1f5e1334", - "SEND_AND_CALL()": "134d4f25", - "allowInitializePath((uint32,bytes32,uint64))": "ff7bd03d", - "allowance(address,address)": "dd62ed3e", - "approvalRequired()": "9f68b964", - "approve(address,uint256)": "095ea7b3", - "balanceOf(address)": "70a08231", - "combineOptions(uint32,uint16,bytes)": "bc70b354", - "decimalConversionRate()": "963efcaa", - "decimals()": "313ce567", - "endpoint()": "5e280f11", - "enforcedOptions(uint32,uint16)": "5535d461", - "isComposeMsgSender((uint32,bytes32,uint64),bytes,address)": "82413eac", - "isPeer(uint32,bytes32)": "5a0dfe4d", - "lzReceive((uint32,bytes32,uint64),bytes32,bytes,address,bytes)": "13137d65", - "lzReceiveAndRevert(((uint32,bytes32,uint64),uint32,address,bytes32,uint256,address,bytes,bytes)[])": "bd815db0", - "lzReceiveSimulate((uint32,bytes32,uint64),bytes32,bytes,address,bytes)": "d045a0dc", - "mint(address,uint256)": "40c10f19", - "msgInspector()": "111ecdad", - "name()": "06fdde03", - "nextNonce(uint32,bytes32)": "7d25a05e", - "oApp()": "52ae2879", - "oAppVersion()": "17442b70", - "oftVersion()": "156a0d0f", - "owner()": "8da5cb5b", - "peers(uint32)": "bb0b6a53", - "preCrime()": "b731ea0a", - "quoteOFT((uint32,bytes32,uint256,uint256,bytes,bytes,bytes))": "0d35b415", - "quoteSend((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),bool)": "3b6f743b", - "renounceOwnership()": "715018a6", - "send((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),(uint256,uint256),address)": "c7c7f5b3", - "setDelegate(address)": "ca5eb5e1", - "setEnforcedOptions((uint32,uint16,bytes)[])": "b98bd070", - "setMsgInspector(address)": "6fc1b31e", - "setPeer(uint32,bytes32)": "3400288b", - "setPreCrime(address)": "d4243885", - "sharedDecimals()": "857749b0", - "symbol()": "95d89b41", - "token()": "fc0c546a", - "totalSupply()": "18160ddd", - "transfer(address,uint256)": "a9059cbb", - "transferFrom(address,address,uint256)": "23b872dd", - "transferOwnership(address)": "f2fde38b" - }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"_lzEndpoint\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_delegate\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"allowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSpender\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidDelegate\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidEndpointCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidLocalDecimals\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"options\",\"type\":\"bytes\"}],\"name\":\"InvalidOptions\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LzTokenUnavailable\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"}],\"name\":\"NoPeer\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"msgValue\",\"type\":\"uint256\"}],\"name\":\"NotEnoughNative\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"OnlyEndpoint\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"}],\"name\":\"OnlyPeer\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlySelf\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"name\":\"SimulationResult\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountLD\",\"type\":\"uint256\"}],\"name\":\"SlippageExceeded\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"msgType\",\"type\":\"uint16\"},{\"internalType\":\"bytes\",\"name\":\"options\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"struct EnforcedOptionParam[]\",\"name\":\"_enforcedOptions\",\"type\":\"tuple[]\"}],\"name\":\"EnforcedOptionSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"inspector\",\"type\":\"address\"}],\"name\":\"MsgInspectorSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"toAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountReceivedLD\",\"type\":\"uint256\"}],\"name\":\"OFTReceived\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"fromAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountSentLD\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountReceivedLD\",\"type\":\"uint256\"}],\"name\":\"OFTSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"peer\",\"type\":\"bytes32\"}],\"name\":\"PeerSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"preCrimeAddress\",\"type\":\"address\"}],\"name\":\"PreCrimeSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"SEND\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SEND_AND_CALL\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"origin\",\"type\":\"tuple\"}],\"name\":\"allowInitializePath\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"approvalRequired\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"_msgType\",\"type\":\"uint16\"},{\"internalType\":\"bytes\",\"name\":\"_extraOptions\",\"type\":\"bytes\"}],\"name\":\"combineOptions\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimalConversionRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"endpoint\",\"outputs\":[{\"internalType\":\"contract ILayerZeroEndpointV2\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"msgType\",\"type\":\"uint16\"}],\"name\":\"enforcedOptions\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"enforcedOption\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"}],\"name\":\"isComposeMsgSender\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_peer\",\"type\":\"bytes32\"}],\"name\":\"isPeer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"_origin\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"_guid\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"_executor\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"lzReceive\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"origin\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"executor\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"internalType\":\"struct InboundPacket[]\",\"name\":\"_packets\",\"type\":\"tuple[]\"}],\"name\":\"lzReceiveAndRevert\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"_origin\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"_guid\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"_executor\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"lzReceiveSimulate\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"msgInspector\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"nextNonce\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"oApp\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"oAppVersion\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"senderVersion\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"receiverVersion\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"oftVersion\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"},{\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"}],\"name\":\"peers\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"peer\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"preCrime\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"to\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"amountLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountLD\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"extraOptions\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"composeMsg\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"oftCmd\",\"type\":\"bytes\"}],\"internalType\":\"struct SendParam\",\"name\":\"_sendParam\",\"type\":\"tuple\"}],\"name\":\"quoteOFT\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"minAmountLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountLD\",\"type\":\"uint256\"}],\"internalType\":\"struct OFTLimit\",\"name\":\"oftLimit\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"int256\",\"name\":\"feeAmountLD\",\"type\":\"int256\"},{\"internalType\":\"string\",\"name\":\"description\",\"type\":\"string\"}],\"internalType\":\"struct OFTFeeDetail[]\",\"name\":\"oftFeeDetails\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"amountSentLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountReceivedLD\",\"type\":\"uint256\"}],\"internalType\":\"struct OFTReceipt\",\"name\":\"oftReceipt\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"to\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"amountLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountLD\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"extraOptions\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"composeMsg\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"oftCmd\",\"type\":\"bytes\"}],\"internalType\":\"struct SendParam\",\"name\":\"_sendParam\",\"type\":\"tuple\"},{\"internalType\":\"bool\",\"name\":\"_payInLzToken\",\"type\":\"bool\"}],\"name\":\"quoteSend\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nativeFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lzTokenFee\",\"type\":\"uint256\"}],\"internalType\":\"struct MessagingFee\",\"name\":\"msgFee\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"to\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"amountLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountLD\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"extraOptions\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"composeMsg\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"oftCmd\",\"type\":\"bytes\"}],\"internalType\":\"struct SendParam\",\"name\":\"_sendParam\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nativeFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lzTokenFee\",\"type\":\"uint256\"}],\"internalType\":\"struct MessagingFee\",\"name\":\"_fee\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"_refundAddress\",\"type\":\"address\"}],\"name\":\"send\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nativeFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lzTokenFee\",\"type\":\"uint256\"}],\"internalType\":\"struct MessagingFee\",\"name\":\"fee\",\"type\":\"tuple\"}],\"internalType\":\"struct MessagingReceipt\",\"name\":\"msgReceipt\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"amountSentLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountReceivedLD\",\"type\":\"uint256\"}],\"internalType\":\"struct OFTReceipt\",\"name\":\"oftReceipt\",\"type\":\"tuple\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_delegate\",\"type\":\"address\"}],\"name\":\"setDelegate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"msgType\",\"type\":\"uint16\"},{\"internalType\":\"bytes\",\"name\":\"options\",\"type\":\"bytes\"}],\"internalType\":\"struct EnforcedOptionParam[]\",\"name\":\"_enforcedOptions\",\"type\":\"tuple[]\"}],\"name\":\"setEnforcedOptions\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_msgInspector\",\"type\":\"address\"}],\"name\":\"setMsgInspector\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_peer\",\"type\":\"bytes32\"}],\"name\":\"setPeer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_preCrime\",\"type\":\"address\"}],\"name\":\"setPreCrime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sharedDecimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"token\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"ERC20InsufficientAllowance(address,uint256,uint256)\":[{\"details\":\"Indicates a failure with the `spender`\\u2019s `allowance`. Used in transfers.\",\"params\":{\"allowance\":\"Amount of tokens a `spender` is allowed to operate with.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC20InsufficientBalance(address,uint256,uint256)\":[{\"details\":\"Indicates an error related to the current `balance` of a `sender`. Used in transfers.\",\"params\":{\"balance\":\"Current balance for the interacting account.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC20InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC20InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidSpender(address)\":[{\"details\":\"Indicates a failure with the `spender` to be approved. Used in approvals.\",\"params\":{\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}],\"SafeERC20FailedOperation(address)\":[{\"details\":\"An operation with an ERC-20 token failed.\"}]},\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"PreCrimeSet(address)\":{\"details\":\"Emitted when the preCrime contract address is set.\",\"params\":{\"preCrimeAddress\":\"The address of the preCrime contract.\"}},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowInitializePath((uint32,bytes32,uint64))\":{\"details\":\"This indicates to the endpoint that the OApp has enabled msgs for this particular path to be received.This defaults to assuming if a peer has been set, its initialized. Can be overridden by the OApp if there is other logic to determine this.\",\"params\":{\"origin\":\"The origin information containing the source endpoint and sender address.\"},\"returns\":{\"_0\":\"Whether the path has been initialized.\"}},\"allowance(address,address)\":{\"details\":\"See {IERC20-allowance}.\"},\"approvalRequired()\":{\"details\":\"In the case of OFT where the contract IS the token, approval is NOT required.\",\"returns\":{\"_0\":\"requiresApproval Needs approval of the underlying token implementation.\"}},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. NOTE: If `value` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"See {IERC20-balanceOf}.\"},\"combineOptions(uint32,uint16,bytes)\":{\"details\":\"If there is an enforced lzReceive option: - {gasLimit: 200k, msg.value: 1 ether} AND a caller supplies a lzReceive option: {gasLimit: 100k, msg.value: 0.5 ether} - The resulting options will be {gasLimit: 300k, msg.value: 1.5 ether} when the message is executed on the remote lzReceive() function.This presence of duplicated options is handled off-chain in the verifier/executor.\",\"params\":{\"_eid\":\"The endpoint ID.\",\"_extraOptions\":\"Additional options passed by the caller.\",\"_msgType\":\"The OAPP message type.\"},\"returns\":{\"_0\":\"options The combination of caller specified options AND enforced options.\"}},\"decimals()\":{\"details\":\"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the default value returned by this function, unless it's overridden. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.\"},\"isComposeMsgSender((uint32,bytes32,uint64),bytes,address)\":{\"details\":\"_origin The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message._message The lzReceive payload.Applications can optionally choose to implement separate composeMsg senders that are NOT the bridging layer.The default sender IS the OAppReceiver implementer.\",\"params\":{\"_sender\":\"The sender address.\"},\"returns\":{\"_0\":\"isSender Is a valid sender.\"}},\"isPeer(uint32,bytes32)\":{\"details\":\"Check if the peer is considered 'trusted' by the OApp.Enables OAppPreCrimeSimulator to check whether a potential Inbound Packet is from a trusted source.\",\"params\":{\"_eid\":\"The endpoint ID to check.\",\"_peer\":\"The peer to check.\"},\"returns\":{\"_0\":\"Whether the peer passed is considered 'trusted' by the OApp.\"}},\"lzReceive((uint32,bytes32,uint64),bytes32,bytes,address,bytes)\":{\"details\":\"Entry point for receiving messages or packets from the endpoint.Entry point for receiving msg/packet from the LayerZero endpoint.\",\"params\":{\"_executor\":\"The address of the executor for the received message.\",\"_extraData\":\"Additional arbitrary data provided by the corresponding executor.\",\"_guid\":\"The unique identifier for the received LayerZero message.\",\"_message\":\"The payload of the received message.\",\"_origin\":\"The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message.\"}},\"lzReceiveAndRevert(((uint32,bytes32,uint64),uint32,address,bytes32,uint256,address,bytes,bytes)[])\":{\"details\":\"Interface for pre-crime simulations. Always reverts at the end with the simulation results.WARNING: MUST revert at the end with the simulation results.Gives the preCrime implementation the ability to mock sending packets to the lzReceive function, WITHOUT actually executing them.\",\"params\":{\"_packets\":\"An array of InboundPacket objects representing received packets to be delivered.\"}},\"lzReceiveSimulate((uint32,bytes32,uint64),bytes32,bytes,address,bytes)\":{\"details\":\"Is effectively an internal function because msg.sender must be address(this). Allows resetting the call stack for 'internal' calls.\",\"params\":{\"_executor\":\"The executor address for the packet.\",\"_extraData\":\"Additional data for the packet.\",\"_guid\":\"The unique identifier of the packet.\",\"_message\":\"The message payload of the packet.\",\"_origin\":\"The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message.\"}},\"name()\":{\"details\":\"Returns the name of the token.\"},\"nextNonce(uint32,bytes32)\":{\"details\":\"_srcEid The source endpoint ID._sender The sender address.The path nonce starts from 1. If 0 is returned it means that there is NO nonce ordered enforcement.Is required by the off-chain executor to determine the OApp expects msg execution is ordered.This is also enforced by the OApp.By default this is NOT enabled. ie. nextNonce is hardcoded to return 0.\",\"returns\":{\"nonce\":\"The next nonce.\"}},\"oApp()\":{\"details\":\"Retrieves the address of the OApp contract.The simulator contract is the base contract for the OApp by default.If the simulator is a separate contract, override this function.\",\"returns\":{\"_0\":\"The address of the OApp contract.\"}},\"oAppVersion()\":{\"returns\":{\"receiverVersion\":\"The version of the OAppReceiver.sol implementation.\",\"senderVersion\":\"The version of the OAppSender.sol implementation.\"}},\"oftVersion()\":{\"details\":\"interfaceId: This specific interface ID is '0x02e49c2c'.version: Indicates a cross-chain compatible msg encoding with other OFTs.If a new feature is added to the OFT cross-chain msg encoding, the version will be incremented. ie. localOFT version(x,1) CAN send messages to remoteOFT version(x,1)\",\"returns\":{\"interfaceId\":\"The interface ID.\",\"version\":\"The version.\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"quoteOFT((uint32,bytes32,uint256,uint256,bytes,bytes,bytes))\":{\"params\":{\"_sendParam\":\"The parameters for the send operation.\"},\"returns\":{\"oftFeeDetails\":\"The details of OFT fees.\",\"oftLimit\":\"The OFT limit information.\",\"oftReceipt\":\"The OFT receipt information.\"}},\"quoteSend((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),bool)\":{\"details\":\"MessagingFee: LayerZero msg fee - nativeFee: The native fee. - lzTokenFee: The lzToken fee.\",\"params\":{\"_payInLzToken\":\"Flag indicating whether the caller is paying in the LZ token.\",\"_sendParam\":\"The parameters for the send() operation.\"},\"returns\":{\"msgFee\":\"The calculated LayerZero messaging fee from the send() operation.\"}},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"send((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),(uint256,uint256),address)\":{\"details\":\"Executes the send operation.MessagingReceipt: LayerZero msg receipt - guid: The unique identifier for the sent message. - nonce: The nonce of the sent message. - fee: The LayerZero fee incurred for the message.\",\"params\":{\"_fee\":\"The calculated fee for the send() operation. - nativeFee: The native fee. - lzTokenFee: The lzToken fee.\",\"_refundAddress\":\"The address to receive any excess funds.\",\"_sendParam\":\"The parameters for the send operation.\"},\"returns\":{\"msgReceipt\":\"The receipt for the send operation.\",\"oftReceipt\":\"The OFT receipt information.\"}},\"setDelegate(address)\":{\"details\":\"Only the owner/admin of the OApp can call this function.Provides the ability for a delegate to set configs, on behalf of the OApp, directly on the Endpoint contract.\",\"params\":{\"_delegate\":\"The address of the delegate to be set.\"}},\"setEnforcedOptions((uint32,uint16,bytes)[])\":{\"details\":\"Sets the enforced options for specific endpoint and message type combinations.Only the owner/admin of the OApp can call this function.Provides a way for the OApp to enforce things like paying for PreCrime, AND/OR minimum dst lzReceive gas amounts etc.These enforced options can vary as the potential options/execution on the remote may differ as per the msgType. eg. Amount of lzReceive() gas necessary to deliver a lzCompose() message adds overhead you dont want to pay if you are only making a standard LayerZero message ie. lzReceive() WITHOUT sendCompose().\",\"params\":{\"_enforcedOptions\":\"An array of EnforcedOptionParam structures specifying enforced options.\"}},\"setMsgInspector(address)\":{\"details\":\"Sets the message inspector address for the OFT.This is an optional contract that can be used to inspect both 'message' and 'options'.Set it to address(0) to disable it, or set it to a contract address to enable it.\",\"params\":{\"_msgInspector\":\"The address of the message inspector.\"}},\"setPeer(uint32,bytes32)\":{\"details\":\"Only the owner/admin of the OApp can call this function.Indicates that the peer is trusted to send LayerZero messages to this OApp.Set this to bytes32(0) to remove the peer address.Peer is a bytes32 to accommodate non-evm chains.\",\"params\":{\"_eid\":\"The endpoint ID.\",\"_peer\":\"The address of the peer to be associated with the corresponding endpoint.\"}},\"setPreCrime(address)\":{\"details\":\"Sets the preCrime contract address.\",\"params\":{\"_preCrime\":\"The address of the preCrime contract.\"}},\"sharedDecimals()\":{\"details\":\"Retrieves the shared decimals of the OFT.Sets an implicit cap on the amount of tokens, over uint64.max() will need some sort of outbound cap / totalSupply cap Lowest common decimal denominator between chains. Defaults to 6 decimal places to provide up to 18,446,744,073,709.551615 units (max uint64). For tokens exceeding this totalSupply(), they will need to override the sharedDecimals function with something smaller. ie. 4 sharedDecimals would be 1,844,674,407,370,955.1615\",\"returns\":{\"_0\":\"The shared decimals of the OFT.\"}},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"token()\":{\"details\":\"Retrieves the address of the underlying ERC20 implementation.In the case of OFT, address(this) and erc20 are the same contract.\",\"returns\":{\"_0\":\"The address of the OFT token.\"}},\"totalSupply()\":{\"details\":\"See {IERC20-totalSupply}.\"},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `value`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC20-transferFrom}. Skips emitting an {Approval} event indicating an allowance update. This is not required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve]. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `value`. - the caller must have allowance for ``from``'s tokens of at least `value`.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"allowInitializePath((uint32,bytes32,uint64))\":{\"notice\":\"Checks if the path initialization is allowed based on the provided origin.\"},\"approvalRequired()\":{\"notice\":\"Indicates whether the OFT contract requires approval of the 'token()' to send.\"},\"combineOptions(uint32,uint16,bytes)\":{\"notice\":\"Combines options for a given endpoint and message type.\"},\"endpoint()\":{\"notice\":\"Retrieves the LayerZero endpoint associated with the OApp.\"},\"isComposeMsgSender((uint32,bytes32,uint64),bytes,address)\":{\"notice\":\"Indicates whether an address is an approved composeMsg sender to the Endpoint.\"},\"nextNonce(uint32,bytes32)\":{\"notice\":\"Retrieves the next nonce for a given source endpoint and sender address.\"},\"oAppVersion()\":{\"notice\":\"Retrieves the OApp version information.\"},\"oftVersion()\":{\"notice\":\"Retrieves interfaceID and the version of the OFT.\"},\"peers(uint32)\":{\"notice\":\"Retrieves the peer (OApp) associated with a corresponding endpoint.\"},\"quoteOFT((uint32,bytes32,uint256,uint256,bytes,bytes,bytes))\":{\"notice\":\"Provides the fee breakdown and settings data for an OFT. Unused in the default implementation.\"},\"quoteSend((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),bool)\":{\"notice\":\"Provides a quote for the send() operation.\"},\"setDelegate(address)\":{\"notice\":\"Sets the delegate address for the OApp.\"},\"setPeer(uint32,bytes32)\":{\"notice\":\"Sets the peer address (OApp instance) for a corresponding endpoint.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/mocks/MyOFTMock.sol\":\"MyOFTMock\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"contracts/MyOFT.sol\":{\"keccak256\":\"0x903ef3775b76a5c87c69530c8c70b97b3474317b72dae1967b4cc3e00bbb3042\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://5f4f7d41ee11fe4ba4a46e3b0efde626c870d9fd81f8532442bbb206c59cbbda\",\"dweb:/ipfs/QmTppfkueRqajda2A4jZqQJhd99ZXfhqQfjSW62shmekna\"]},\"contracts/mocks/MyOFTMock.sol\":{\"keccak256\":\"0xa72bec6c7982566a2f1d7fb3c516d952d60d3afd0383432c225b60afa692dc5c\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://4ab9293535367680e1fb3f03ef7aff55f25fb602aabdc472d723b83b141c1811\",\"dweb:/ipfs/QmVsVwzrirJRkxhSXz9bmo24RkCXsRmHncSZwPshWtDjcT\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\":{\"keccak256\":\"0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bacc29fd3866af71e59cb0bdc1cf82c882a4a7f4e2652fd413c9f12649762083\",\"dweb:/ipfs/QmZh2toLnrQDWaNYhS5K4NoW7Vxd2GdZx9KA77vKEDLAqs\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol\":{\"keccak256\":\"0x9641abba8d53b08bb517d1b74801dd15ea7b84d77a6719085bd96c8ea94e3ca0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://77415ae0820859e0faf3fabdce683cce9fa03ea026ae0f6fe081ef1c9205f933\",\"dweb:/ipfs/QmXd7APqoCunQ2jYy73AHvi5gsZofLpm3SzM6FPo7zRPfL\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol\":{\"keccak256\":\"0x5cf5f24751b4e3ea1c9c5ded07cedfdfd62566b6daaffcc0144733859c9dba0c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cae7e35007a714f007ea08045ef7c0cfa6c91fd2425b5028b2d49abad357a5f0\",\"dweb:/ipfs/QmcDBs5tsiyB35b8cwzWQWNnpkawb3uuHRaqE77Hxm2tve\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol\":{\"keccak256\":\"0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d8ff6a8a89297fa127f86b54e0db3eba1d6a6eeb4f6398d3c84d569665ac8f1b\",\"dweb:/ipfs/QmVSwhw6xFDrLRAX4RXaCM47yBaBtac4wf36DYEq6KCTvT\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol\":{\"keccak256\":\"0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7e1b245d58221d16d8b5e0f01ef3e289a24a7df1ace3b94239e4d5b954ad5927\",\"dweb:/ipfs/Qmappsgp7PCY9rSSNE9Cdn4BTRX591WfCSEgq2HxhA3z6S\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol\":{\"keccak256\":\"0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b18b23a1643fc6636c4ad9d9023e2e6ca2d3c2a4a046482d4655bff09950598d\",\"dweb:/ipfs/Qma6G5SqiovwrMPfgqTrRngK1HWW373Wkf9c6YP2NhXpPk\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol\":{\"keccak256\":\"0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5173fc9143bea314b159ca5a9adb5626659ef763bc598e27de5fa46efe3291a6\",\"dweb:/ipfs/QmSLFeMFPmVeGxT4sxRPW28ictjAS22M8rLeYRu9TXkA6D\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol\":{\"keccak256\":\"0xf1c07bc61e7b1dce195ed12d50f87980fbf2d63cac1326fd28287f55fe0ba625\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://060f10ff7afc33c1c2f2b4b5ba29231fd3c943146488084d0e4ab99fce991d97\",\"dweb:/ipfs/QmaSsefAqqEqtf8FgFUmDYMwTsAty3X1pqDb6SiFvry6B3\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol\":{\"keccak256\":\"0x2ebbcaaab3554edcd41b581f1a72ac1806afbfb8047d0d47ff098f9af30d6deb\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://2d4b2cf5c3b16dc76c6767f285b57c0af917972327b2be3f7cba5825402f5fc1\",\"dweb:/ipfs/QmQQWiHE2jKEDbjzGutSoZwtApSXYfLqZt5CxEpFj8xyvT\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol\":{\"keccak256\":\"0xc84cf1bf785977fe1fbe7566eef902c2db68d0e163813ebe6c34921754802680\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://de686666fc16fa432d4208d85cec87dc952faf3e481b683b9adf4b4610db4b09\",\"dweb:/ipfs/QmdmQeopzmxqRzi9DNB4EJDrYUXFfD7fUhnGhSni4QejUW\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OApp.sol\":{\"keccak256\":\"0xac362c4c291fad2f1511a968424b2e78a5ad502d1c867bd31da04be742aca8c5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e1f8cf9f20a2b683a53c3883972aa0676af97a24c678f461fae08e1fb056df28\",\"dweb:/ipfs/QmPpKNqda3rgxDwnq3XiRTtT3NfWeqrCJT6LwmhYd2AoT2\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppCore.sol\":{\"keccak256\":\"0x13a9c2d1d2c1f086b8624f2e84c4a4702212daae36f701d92bb915b535cbe4cc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://606515dd9193551bd2c94ac8c304f3776fafcc70e544ebf441f334658b2fd5f0\",\"dweb:/ipfs/QmZ88ey7DdZqV5taAoebabvszX5kdPMSrQCAmTteVdDtcH\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppReceiver.sol\":{\"keccak256\":\"0x0174e9f1ec4cefe4b5adc26c392269c699b9ff75965364e5b7264426a462c70b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cd12bb4fe5802c53911b9a0081a2ea10639b1f99925d1e5c1b1421d1bdc17075\",\"dweb:/ipfs/QmZonarwbKiEwQ8qoASKur2bbMjusdy9pqK9RCR4P1YPtc\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppSender.sol\":{\"keccak256\":\"0x518cf4adca601923ed4baa6619846a253ea32b8d8775f8bc1faa3dfac7f67c20\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d42b471418efadcc3577ef3fa9f8f504e8bed7db90c3b0c862038d8b29529eb2\",\"dweb:/ipfs/QmZETDQiJN4U92fmLKo8T9ZbdDf7BNBUUvo9H7M7GqAyFU\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppCore.sol\":{\"keccak256\":\"0x40e49f2de74506e1da5dcaed53a39853f691647f4ceb0fccc8f49a68d3f47c58\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4a1deb2a6a3eb1fb83936c9578469142bff470295f403d7d07d955a76be3adbd\",\"dweb:/ipfs/QmS9bjSfBaE4YhQ1PCQ1TknbEPbNfRXzBK9E7SaPGyiZEv\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppMsgInspector.sol\":{\"keccak256\":\"0x339654e699043c400cad92de209aa23855ce10211c31cf4114042cc5224d3b7c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5222afde59bf086f67b39e0288ad36343f4f5ed683d250533f256a5db956f37e\",\"dweb:/ipfs/QmbEG9EMYsK3Y6Cz7QbNtkW4kHGzMuhp2y2seSoL8v1A5b\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppOptionsType3.sol\":{\"keccak256\":\"0x9fc08a51e9d7c9c710c4eb26f84fe77228305ad7da63fa486ff24ebf2f3bc461\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2e2eea8a93bb9fc3f629767118b362e9b4bda2443ff95eae21c6a894f3e334cc\",\"dweb:/ipfs/QmPRRNjAB4U19ke4gr3U7ZJGtdcVBxdXVBZ2BmB1riFkP7\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppReceiver.sol\":{\"keccak256\":\"0xd26135185e19b3732746d4a9e2923e896f28dec8664bab161faea2ee26fcdc3d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c236dfe386b508be33c3a1a74ae1d4fd64b8c77ae207767e9dbed0f2429518a2\",\"dweb:/ipfs/QmXVbZJjfryTRti98uN3BMh5qh4K7NuEs1RSCoBjRoYd4q\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/libs/OAppOptionsType3.sol\":{\"keccak256\":\"0x5275636cd47e660a2fdf6c7fe9d41ff3cc866b785cc8a9d88c1b8ca983509f01\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a59dd6e3cfcc332f45a13d44585eb228588c4b9d470cbb19852df5753a4571af\",\"dweb:/ipfs/QmQJF1QU3MKhvmw42eq61u9z3bzKJJKMsEdQVYyPyYgTVS\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/precrime/OAppPreCrimeSimulator.sol\":{\"keccak256\":\"0x205a0abfd8b3c9af2740769f251381b84999b8e9347f3cd50de3ef8290a17750\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d9778d7d5da941af2029410b6ac212f915ea1785573ae2865b0ed8f779fcca82\",\"dweb:/ipfs/QmNkVEkfecvgubgnMuaT5fEfSExd95vz8DQHhpZtMrVRjH\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IOAppPreCrimeSimulator.sol\":{\"keccak256\":\"0x5d24db150949ea8e6437178e65a942e8c8b7f332e5daf32750f56b23b35b5bb2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1b1dcea0267234654126f926a1b405743606d7b5e49185b621afb7bd94d18b9a\",\"dweb:/ipfs/QmZ9BXQmbWJcrhHKuBs4yhNtbCV5WUpUY3AXSX7rkWwX6y\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IPreCrime.sol\":{\"keccak256\":\"0xc8d869f27ef8ceb2e13fdf6a70682fd4dee3f90c4924eb8e125bc1e66cb6af84\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://66bf49d59c14832ea0ddddcd12d512d4f9bd0fd254a1368442587bf3e77fe73e\",\"dweb:/ipfs/QmYUAvsyuUPiSYjbL4zVo6ZtiRSLCUPDvCesqgdZWbSGDg\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/precrime/libs/Packet.sol\":{\"keccak256\":\"0xcb2fb1c5b2eb3731de78b479b9c2ab3bba326fe0b0b3a008590f18e881e457a6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f70724c61d226743c2bd8ba6c09758805e4339780978949ce5b333c106be4edc\",\"dweb:/ipfs/QmX5rV9K1N7RgTz9xtf8CDG8SrYiitGAzFh9ec2tbnEec4\"]},\"node_modules/@layerzerolabs/oft-evm/contracts/OFT.sol\":{\"keccak256\":\"0xdc3582e4a20e02a79050c17058a1f1f42a4335d1a70be06c0a52a3fb05d4c89a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://83c4bd42e68528246860a952a92a79e51e3a789dac79a0b62576ab2f609de9c7\",\"dweb:/ipfs/QmVj1x655j1cFTnPT8uBaM71TCSrhFVwPdoFkAkWhhadns\"]},\"node_modules/@layerzerolabs/oft-evm/contracts/OFTCore.sol\":{\"keccak256\":\"0x9ce49b83455df600b52538e42028c422a322643f7ffb4f2814c72c3b970ea7be\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2ebbf79612c3f6cd4e2754ba55519df6b89504ab5514e3517cbd286d87143997\",\"dweb:/ipfs/QmQZpSPhNhF4MESb2if2DbcjC75xfuoEzDGXmeJKYZtHZ5\"]},\"node_modules/@layerzerolabs/oft-evm/contracts/interfaces/IOFT.sol\":{\"keccak256\":\"0x7ba6bb62fba7ee83451cfb0e727ddeef0e96b4388bd4e9ff0fc6ce103e1101c8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cfbd447f2e8a730bd46a14c3c3e6a0b2bf7446145579603a9793ba5ac1dd38b4\",\"dweb:/ipfs/QmZ4nx4iGrFmBHvYFgki5TXFdCHz4Co38hgdgwpRaM7NLs\"]},\"node_modules/@layerzerolabs/oft-evm/contracts/libs/OFTComposeMsgCodec.sol\":{\"keccak256\":\"0xaae73d6eb8b9561c43f1802f3c416c00ccd35f172b711f9781ccdf1b25a40db5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7beda2d895ae9e15269dd261a492ce0a29b498e5bebf088ed6f2ae6a5185719e\",\"dweb:/ipfs/QmScog2tW1YVyEPLVcUVqGGc85ub46sA28nUKNzFEZcFdK\"]},\"node_modules/@layerzerolabs/oft-evm/contracts/libs/OFTMsgCodec.sol\":{\"keccak256\":\"0x5358948017669c03e157f871d8c38e988f9004dbd0801ad3119d2487f0d40b0b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c7d0f1bf32a80af9b99cd93fefa373dac5c27463351cc35f62b9c2439d5b9258\",\"dweb:/ipfs/Qmb81qoxzMwV3PkPANRvnXf4fJTsZ5sjJ8r2df9V2vhh6q\"]},\"node_modules/@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol\":{\"keccak256\":\"0x9b6b3e7803bc5f2f8cd7ad57db8ac1def61a9930a5a3107df4882e028a9605d7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://da62d6be1f5c6edf577f0cb45666a8aa9c2086a4bac87d95d65f02e2f4c36a4b\",\"dweb:/ipfs/QmNkpvBpoCMvX8JwAFNSc5XxJ2q5BXJpL5L1txb4QkqVFF\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC165.sol\":{\"keccak256\":\"0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://11fea9f8bc98949ac6709f0c1699db7430d2948137aa94d5a9e95a91f61a710a\",\"dweb:/ipfs/QmQdfRXxQjwP6yn3DVo1GHPpriKNcFghSPi94Z1oKEFUNS\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC20.sol\":{\"keccak256\":\"0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a2608291cb038b388d80b79a06b6118a42f7894ff67b7da10ec0dbbf5b2973ba\",\"dweb:/ipfs/QmWohqcBLbcxmA4eGPhZDXe5RYMMEEpFq22nfkaUMvTfw1\"]},\"node_modules/@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x880da465c203cec76b10d72dbd87c80f387df4102274f23eea1f9c9b0918792b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://399594cd8bb0143bc9e55e0f1d071d0d8c850a394fb7a319d50edd55d9ed822b\",\"dweb:/ipfs/QmbPZzgtT6LEm9CMqWfagQFwETbV1ztpECBB1DtQHrKiRz\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0xbf61ab2ae1d575a17ea58fbb99ca232baddcc4e0eeea180e84cbc74b0c348b31\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4e0968705bad99747a8e5288aa008678c2be2f471f919dce3925a3cc4f1dee09\",\"dweb:/ipfs/QmbAFnCQfo4tw6ssfQSjhA5LzwHWNNryXN8bX7ty8jiqqn\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db\",\"dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x70f2f713b13b7ce4610bcd0ac9fec0f3cc43693b043abcb8dc40a42a726eb330\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c13d13304ac79a83ab1c30168967d19e2203342ebbd6a9bbce4db7550522dcbf\",\"dweb:/ipfs/QmeN5jKMN2vw5bhacr6tkg78afbTTZUeaacNHqjWt4Ew1r\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0xca2ae13e0610f6a99238dd00b97bd786bc92732dae6d6b9d61f573ec51018310\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://75f8c71ce0c91c40dd5f249ace0b7d8270f8f1767231bcf71490f7157d6ba862\",\"dweb:/ipfs/QmYXgxeDyFHvz3JsXxLEYN6GNUR44ThHeFj5XkpkgMoG4w\"]},\"node_modules/@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0x9d8da059267bac779a2dbbb9a26c2acf00ca83085e105d62d5d4ef96054a47f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c78e2aa4313323cecd1ef12a8d6265b96beee1a199923abf55d9a2a9e291ad23\",\"dweb:/ipfs/QmUTs2KStXucZezzFo3EYeqYu47utu56qrF7jj1Gue65vb\"]},\"node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"node_modules/@openzeppelin/contracts/utils/Errors.sol\":{\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf\",\"dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB\"]},\"node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { - "inputs": [ - { "internalType": "string", "name": "_name", "type": "string" }, - { "internalType": "string", "name": "_symbol", "type": "string" }, - { - "internalType": "address", - "name": "_lzEndpoint", - "type": "address" - }, - { - "internalType": "address", - "name": "_delegate", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [ - { "internalType": "address", "name": "spender", "type": "address" }, - { - "internalType": "uint256", - "name": "allowance", - "type": "uint256" - }, - { "internalType": "uint256", "name": "needed", "type": "uint256" } - ], - "type": "error", - "name": "ERC20InsufficientAllowance" - }, - { - "inputs": [ - { "internalType": "address", "name": "sender", "type": "address" }, - { "internalType": "uint256", "name": "balance", "type": "uint256" }, - { "internalType": "uint256", "name": "needed", "type": "uint256" } - ], - "type": "error", - "name": "ERC20InsufficientBalance" - }, - { - "inputs": [ - { "internalType": "address", "name": "approver", "type": "address" } - ], - "type": "error", - "name": "ERC20InvalidApprover" - }, - { - "inputs": [ - { "internalType": "address", "name": "receiver", "type": "address" } - ], - "type": "error", - "name": "ERC20InvalidReceiver" - }, - { - "inputs": [ - { "internalType": "address", "name": "sender", "type": "address" } - ], - "type": "error", - "name": "ERC20InvalidSender" - }, - { - "inputs": [ - { "internalType": "address", "name": "spender", "type": "address" } - ], - "type": "error", - "name": "ERC20InvalidSpender" - }, - { "inputs": [], "type": "error", "name": "InvalidDelegate" }, - { "inputs": [], "type": "error", "name": "InvalidEndpointCall" }, - { "inputs": [], "type": "error", "name": "InvalidLocalDecimals" }, - { - "inputs": [ - { "internalType": "bytes", "name": "options", "type": "bytes" } - ], - "type": "error", - "name": "InvalidOptions" - }, - { "inputs": [], "type": "error", "name": "LzTokenUnavailable" }, - { - "inputs": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" } - ], - "type": "error", - "name": "NoPeer" - }, - { - "inputs": [ - { "internalType": "uint256", "name": "msgValue", "type": "uint256" } - ], - "type": "error", - "name": "NotEnoughNative" - }, - { - "inputs": [ - { "internalType": "address", "name": "addr", "type": "address" } - ], - "type": "error", - "name": "OnlyEndpoint" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" }, - { "internalType": "bytes32", "name": "sender", "type": "bytes32" } - ], - "type": "error", - "name": "OnlyPeer" - }, - { "inputs": [], "type": "error", "name": "OnlySelf" }, - { - "inputs": [ - { "internalType": "address", "name": "owner", "type": "address" } - ], - "type": "error", - "name": "OwnableInvalidOwner" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "type": "error", - "name": "OwnableUnauthorizedAccount" - }, - { - "inputs": [ - { "internalType": "address", "name": "token", "type": "address" } - ], - "type": "error", - "name": "SafeERC20FailedOperation" - }, - { - "inputs": [ - { "internalType": "bytes", "name": "result", "type": "bytes" } - ], - "type": "error", - "name": "SimulationResult" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "amountLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minAmountLD", - "type": "uint256" - } - ], - "type": "error", - "name": "SlippageExceeded" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address", - "indexed": true - }, - { - "internalType": "address", - "name": "spender", - "type": "address", - "indexed": true - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "Approval", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "struct EnforcedOptionParam[]", - "name": "_enforcedOptions", - "type": "tuple[]", - "components": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" }, - { - "internalType": "uint16", - "name": "msgType", - "type": "uint16" - }, - { "internalType": "bytes", "name": "options", "type": "bytes" } - ], - "indexed": false - } - ], - "type": "event", - "name": "EnforcedOptionSet", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "inspector", - "type": "address", - "indexed": false - } - ], - "type": "event", - "name": "MsgInspectorSet", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "guid", - "type": "bytes32", - "indexed": true - }, - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32", - "indexed": false - }, - { - "internalType": "address", - "name": "toAddress", - "type": "address", - "indexed": true - }, - { - "internalType": "uint256", - "name": "amountReceivedLD", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "OFTReceived", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "guid", - "type": "bytes32", - "indexed": true - }, - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32", - "indexed": false - }, - { - "internalType": "address", - "name": "fromAddress", - "type": "address", - "indexed": true - }, - { - "internalType": "uint256", - "name": "amountSentLD", - "type": "uint256", - "indexed": false - }, - { - "internalType": "uint256", - "name": "amountReceivedLD", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "OFTSent", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "previousOwner", - "type": "address", - "indexed": true - }, - { - "internalType": "address", - "name": "newOwner", - "type": "address", - "indexed": true - } - ], - "type": "event", - "name": "OwnershipTransferred", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "eid", - "type": "uint32", - "indexed": false - }, - { - "internalType": "bytes32", - "name": "peer", - "type": "bytes32", - "indexed": false - } - ], - "type": "event", - "name": "PeerSet", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "preCrimeAddress", - "type": "address", - "indexed": false - } - ], - "type": "event", - "name": "PreCrimeSet", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address", - "indexed": true - }, - { - "internalType": "address", - "name": "to", - "type": "address", - "indexed": true - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "Transfer", - "anonymous": false - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "SEND", - "outputs": [ - { "internalType": "uint16", "name": "", "type": "uint16" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "SEND_AND_CALL", - "outputs": [ - { "internalType": "uint16", "name": "", "type": "uint16" } - ] - }, - { - "inputs": [ - { - "internalType": "struct Origin", - "name": "origin", - "type": "tuple", - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { "internalType": "uint64", "name": "nonce", "type": "uint64" } - ] - } - ], - "stateMutability": "view", - "type": "function", - "name": "allowInitializePath", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "address", "name": "owner", "type": "address" }, - { "internalType": "address", "name": "spender", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "allowance", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ] - }, - { - "inputs": [], - "stateMutability": "pure", - "type": "function", - "name": "approvalRequired", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "address", "name": "spender", "type": "address" }, - { "internalType": "uint256", "name": "value", "type": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "approve", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "balanceOf", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ] - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { "internalType": "uint16", "name": "_msgType", "type": "uint16" }, - { - "internalType": "bytes", - "name": "_extraOptions", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function", - "name": "combineOptions", - "outputs": [{ "internalType": "bytes", "name": "", "type": "bytes" }] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "decimalConversionRate", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "decimals", - "outputs": [{ "internalType": "uint8", "name": "", "type": "uint8" }] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "endpoint", - "outputs": [ - { - "internalType": "contract ILayerZeroEndpointV2", - "name": "", - "type": "address" - } - ] - }, - { - "inputs": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" }, - { "internalType": "uint16", "name": "msgType", "type": "uint16" } - ], - "stateMutability": "view", - "type": "function", - "name": "enforcedOptions", - "outputs": [ - { - "internalType": "bytes", - "name": "enforcedOption", - "type": "bytes" - } - ] - }, - { - "inputs": [ - { - "internalType": "struct Origin", - "name": "", - "type": "tuple", - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { "internalType": "uint64", "name": "nonce", "type": "uint64" } - ] - }, - { "internalType": "bytes", "name": "", "type": "bytes" }, - { "internalType": "address", "name": "_sender", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "isComposeMsgSender", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { "internalType": "bytes32", "name": "_peer", "type": "bytes32" } - ], - "stateMutability": "view", - "type": "function", - "name": "isPeer", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { - "internalType": "struct Origin", - "name": "_origin", - "type": "tuple", - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { "internalType": "uint64", "name": "nonce", "type": "uint64" } - ] - }, - { "internalType": "bytes32", "name": "_guid", "type": "bytes32" }, - { "internalType": "bytes", "name": "_message", "type": "bytes" }, - { - "internalType": "address", - "name": "_executor", - "type": "address" - }, - { "internalType": "bytes", "name": "_extraData", "type": "bytes" } - ], - "stateMutability": "payable", - "type": "function", - "name": "lzReceive" - }, - { - "inputs": [ - { - "internalType": "struct InboundPacket[]", - "name": "_packets", - "type": "tuple[]", - "components": [ - { - "internalType": "struct Origin", - "name": "origin", - "type": "tuple", - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - } - ] - }, - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "guid", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "address", - "name": "executor", - "type": "address" - }, - { "internalType": "bytes", "name": "message", "type": "bytes" }, - { - "internalType": "bytes", - "name": "extraData", - "type": "bytes" - } - ] - } - ], - "stateMutability": "payable", - "type": "function", - "name": "lzReceiveAndRevert" - }, - { - "inputs": [ - { - "internalType": "struct Origin", - "name": "_origin", - "type": "tuple", - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { "internalType": "uint64", "name": "nonce", "type": "uint64" } - ] - }, - { "internalType": "bytes32", "name": "_guid", "type": "bytes32" }, - { "internalType": "bytes", "name": "_message", "type": "bytes" }, - { - "internalType": "address", - "name": "_executor", - "type": "address" - }, - { "internalType": "bytes", "name": "_extraData", "type": "bytes" } - ], - "stateMutability": "payable", - "type": "function", - "name": "lzReceiveSimulate" - }, - { - "inputs": [ - { "internalType": "address", "name": "_to", "type": "address" }, - { "internalType": "uint256", "name": "_amount", "type": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "mint" - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "msgInspector", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "name", - "outputs": [ - { "internalType": "string", "name": "", "type": "string" } - ] - }, - { - "inputs": [ - { "internalType": "uint32", "name": "", "type": "uint32" }, - { "internalType": "bytes32", "name": "", "type": "bytes32" } - ], - "stateMutability": "view", - "type": "function", - "name": "nextNonce", - "outputs": [ - { "internalType": "uint64", "name": "nonce", "type": "uint64" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "oApp", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ] - }, - { - "inputs": [], - "stateMutability": "pure", - "type": "function", - "name": "oAppVersion", - "outputs": [ - { - "internalType": "uint64", - "name": "senderVersion", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "receiverVersion", - "type": "uint64" - } - ] - }, - { - "inputs": [], - "stateMutability": "pure", - "type": "function", - "name": "oftVersion", - "outputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - }, - { "internalType": "uint64", "name": "version", "type": "uint64" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "owner", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ] - }, - { - "inputs": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" } - ], - "stateMutability": "view", - "type": "function", - "name": "peers", - "outputs": [ - { "internalType": "bytes32", "name": "peer", "type": "bytes32" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "preCrime", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ] - }, - { - "inputs": [ - { - "internalType": "struct SendParam", - "name": "_sendParam", - "type": "tuple", - "components": [ - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { "internalType": "bytes32", "name": "to", "type": "bytes32" }, - { - "internalType": "uint256", - "name": "amountLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minAmountLD", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "extraOptions", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "composeMsg", - "type": "bytes" - }, - { "internalType": "bytes", "name": "oftCmd", "type": "bytes" } - ] - } - ], - "stateMutability": "view", - "type": "function", - "name": "quoteOFT", - "outputs": [ - { - "internalType": "struct OFTLimit", - "name": "oftLimit", - "type": "tuple", - "components": [ - { - "internalType": "uint256", - "name": "minAmountLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxAmountLD", - "type": "uint256" - } - ] - }, - { - "internalType": "struct OFTFeeDetail[]", - "name": "oftFeeDetails", - "type": "tuple[]", - "components": [ - { - "internalType": "int256", - "name": "feeAmountLD", - "type": "int256" - }, - { - "internalType": "string", - "name": "description", - "type": "string" - } - ] - }, - { - "internalType": "struct OFTReceipt", - "name": "oftReceipt", - "type": "tuple", - "components": [ - { - "internalType": "uint256", - "name": "amountSentLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "amountReceivedLD", - "type": "uint256" - } - ] - } - ] - }, - { - "inputs": [ - { - "internalType": "struct SendParam", - "name": "_sendParam", - "type": "tuple", - "components": [ - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { "internalType": "bytes32", "name": "to", "type": "bytes32" }, - { - "internalType": "uint256", - "name": "amountLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minAmountLD", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "extraOptions", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "composeMsg", - "type": "bytes" - }, - { "internalType": "bytes", "name": "oftCmd", "type": "bytes" } - ] - }, - { "internalType": "bool", "name": "_payInLzToken", "type": "bool" } - ], - "stateMutability": "view", - "type": "function", - "name": "quoteSend", - "outputs": [ - { - "internalType": "struct MessagingFee", - "name": "msgFee", - "type": "tuple", - "components": [ - { - "internalType": "uint256", - "name": "nativeFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "lzTokenFee", - "type": "uint256" - } - ] - } - ] - }, - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "function", - "name": "renounceOwnership" - }, - { - "inputs": [ - { - "internalType": "struct SendParam", - "name": "_sendParam", - "type": "tuple", - "components": [ - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { "internalType": "bytes32", "name": "to", "type": "bytes32" }, - { - "internalType": "uint256", - "name": "amountLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minAmountLD", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "extraOptions", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "composeMsg", - "type": "bytes" - }, - { "internalType": "bytes", "name": "oftCmd", "type": "bytes" } - ] - }, - { - "internalType": "struct MessagingFee", - "name": "_fee", - "type": "tuple", - "components": [ - { - "internalType": "uint256", - "name": "nativeFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "lzTokenFee", - "type": "uint256" - } - ] - }, - { - "internalType": "address", - "name": "_refundAddress", - "type": "address" - } - ], - "stateMutability": "payable", - "type": "function", - "name": "send", - "outputs": [ - { - "internalType": "struct MessagingReceipt", - "name": "msgReceipt", - "type": "tuple", - "components": [ - { - "internalType": "bytes32", - "name": "guid", - "type": "bytes32" - }, - { "internalType": "uint64", "name": "nonce", "type": "uint64" }, - { - "internalType": "struct MessagingFee", - "name": "fee", - "type": "tuple", - "components": [ - { - "internalType": "uint256", - "name": "nativeFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "lzTokenFee", - "type": "uint256" - } - ] - } - ] - }, - { - "internalType": "struct OFTReceipt", - "name": "oftReceipt", - "type": "tuple", - "components": [ - { - "internalType": "uint256", - "name": "amountSentLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "amountReceivedLD", - "type": "uint256" - } - ] - } - ] - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_delegate", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setDelegate" - }, - { - "inputs": [ - { - "internalType": "struct EnforcedOptionParam[]", - "name": "_enforcedOptions", - "type": "tuple[]", - "components": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" }, - { - "internalType": "uint16", - "name": "msgType", - "type": "uint16" - }, - { "internalType": "bytes", "name": "options", "type": "bytes" } - ] - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setEnforcedOptions" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_msgInspector", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setMsgInspector" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { "internalType": "bytes32", "name": "_peer", "type": "bytes32" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setPeer" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_preCrime", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setPreCrime" - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "sharedDecimals", - "outputs": [{ "internalType": "uint8", "name": "", "type": "uint8" }] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "symbol", - "outputs": [ - { "internalType": "string", "name": "", "type": "string" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "token", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "totalSupply", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "to", "type": "address" }, - { "internalType": "uint256", "name": "value", "type": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "transfer", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "address", "name": "from", "type": "address" }, - { "internalType": "address", "name": "to", "type": "address" }, - { "internalType": "uint256", "name": "value", "type": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "transferFrom", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "address", "name": "newOwner", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "transferOwnership" - } - ], - "devdoc": { - "kind": "dev", - "methods": { - "allowInitializePath((uint32,bytes32,uint64))": { - "details": "This indicates to the endpoint that the OApp has enabled msgs for this particular path to be received.This defaults to assuming if a peer has been set, its initialized. Can be overridden by the OApp if there is other logic to determine this.", - "params": { - "origin": "The origin information containing the source endpoint and sender address." - }, - "returns": { "_0": "Whether the path has been initialized." } - }, - "allowance(address,address)": { - "details": "See {IERC20-allowance}." - }, - "approvalRequired()": { - "details": "In the case of OFT where the contract IS the token, approval is NOT required.", - "returns": { - "_0": "requiresApproval Needs approval of the underlying token implementation." - } - }, - "approve(address,uint256)": { - "details": "See {IERC20-approve}. NOTE: If `value` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address." - }, - "balanceOf(address)": { "details": "See {IERC20-balanceOf}." }, - "combineOptions(uint32,uint16,bytes)": { - "details": "If there is an enforced lzReceive option: - {gasLimit: 200k, msg.value: 1 ether} AND a caller supplies a lzReceive option: {gasLimit: 100k, msg.value: 0.5 ether} - The resulting options will be {gasLimit: 300k, msg.value: 1.5 ether} when the message is executed on the remote lzReceive() function.This presence of duplicated options is handled off-chain in the verifier/executor.", - "params": { - "_eid": "The endpoint ID.", - "_extraOptions": "Additional options passed by the caller.", - "_msgType": "The OAPP message type." - }, - "returns": { - "_0": "options The combination of caller specified options AND enforced options." - } - }, - "decimals()": { - "details": "Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the default value returned by this function, unless it's overridden. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}." - }, - "isComposeMsgSender((uint32,bytes32,uint64),bytes,address)": { - "details": "_origin The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message._message The lzReceive payload.Applications can optionally choose to implement separate composeMsg senders that are NOT the bridging layer.The default sender IS the OAppReceiver implementer.", - "params": { "_sender": "The sender address." }, - "returns": { "_0": "isSender Is a valid sender." } - }, - "isPeer(uint32,bytes32)": { - "details": "Check if the peer is considered 'trusted' by the OApp.Enables OAppPreCrimeSimulator to check whether a potential Inbound Packet is from a trusted source.", - "params": { - "_eid": "The endpoint ID to check.", - "_peer": "The peer to check." - }, - "returns": { - "_0": "Whether the peer passed is considered 'trusted' by the OApp." - } - }, - "lzReceive((uint32,bytes32,uint64),bytes32,bytes,address,bytes)": { - "details": "Entry point for receiving messages or packets from the endpoint.Entry point for receiving msg/packet from the LayerZero endpoint.", - "params": { - "_executor": "The address of the executor for the received message.", - "_extraData": "Additional arbitrary data provided by the corresponding executor.", - "_guid": "The unique identifier for the received LayerZero message.", - "_message": "The payload of the received message.", - "_origin": "The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message." - } - }, - "lzReceiveAndRevert(((uint32,bytes32,uint64),uint32,address,bytes32,uint256,address,bytes,bytes)[])": { - "details": "Interface for pre-crime simulations. Always reverts at the end with the simulation results.WARNING: MUST revert at the end with the simulation results.Gives the preCrime implementation the ability to mock sending packets to the lzReceive function, WITHOUT actually executing them.", - "params": { - "_packets": "An array of InboundPacket objects representing received packets to be delivered." - } - }, - "lzReceiveSimulate((uint32,bytes32,uint64),bytes32,bytes,address,bytes)": { - "details": "Is effectively an internal function because msg.sender must be address(this). Allows resetting the call stack for 'internal' calls.", - "params": { - "_executor": "The executor address for the packet.", - "_extraData": "Additional data for the packet.", - "_guid": "The unique identifier of the packet.", - "_message": "The message payload of the packet.", - "_origin": "The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message." - } - }, - "name()": { "details": "Returns the name of the token." }, - "nextNonce(uint32,bytes32)": { - "details": "_srcEid The source endpoint ID._sender The sender address.The path nonce starts from 1. If 0 is returned it means that there is NO nonce ordered enforcement.Is required by the off-chain executor to determine the OApp expects msg execution is ordered.This is also enforced by the OApp.By default this is NOT enabled. ie. nextNonce is hardcoded to return 0.", - "returns": { "nonce": "The next nonce." } - }, - "oApp()": { - "details": "Retrieves the address of the OApp contract.The simulator contract is the base contract for the OApp by default.If the simulator is a separate contract, override this function.", - "returns": { "_0": "The address of the OApp contract." } - }, - "oAppVersion()": { - "returns": { - "receiverVersion": "The version of the OAppReceiver.sol implementation.", - "senderVersion": "The version of the OAppSender.sol implementation." - } - }, - "oftVersion()": { - "details": "interfaceId: This specific interface ID is '0x02e49c2c'.version: Indicates a cross-chain compatible msg encoding with other OFTs.If a new feature is added to the OFT cross-chain msg encoding, the version will be incremented. ie. localOFT version(x,1) CAN send messages to remoteOFT version(x,1)", - "returns": { - "interfaceId": "The interface ID.", - "version": "The version." - } - }, - "owner()": { "details": "Returns the address of the current owner." }, - "quoteOFT((uint32,bytes32,uint256,uint256,bytes,bytes,bytes))": { - "params": { - "_sendParam": "The parameters for the send operation." - }, - "returns": { - "oftFeeDetails": "The details of OFT fees.", - "oftLimit": "The OFT limit information.", - "oftReceipt": "The OFT receipt information." - } - }, - "quoteSend((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),bool)": { - "details": "MessagingFee: LayerZero msg fee - nativeFee: The native fee. - lzTokenFee: The lzToken fee.", - "params": { - "_payInLzToken": "Flag indicating whether the caller is paying in the LZ token.", - "_sendParam": "The parameters for the send() operation." - }, - "returns": { - "msgFee": "The calculated LayerZero messaging fee from the send() operation." - } - }, - "renounceOwnership()": { - "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner." - }, - "send((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),(uint256,uint256),address)": { - "details": "Executes the send operation.MessagingReceipt: LayerZero msg receipt - guid: The unique identifier for the sent message. - nonce: The nonce of the sent message. - fee: The LayerZero fee incurred for the message.", - "params": { - "_fee": "The calculated fee for the send() operation. - nativeFee: The native fee. - lzTokenFee: The lzToken fee.", - "_refundAddress": "The address to receive any excess funds.", - "_sendParam": "The parameters for the send operation." - }, - "returns": { - "msgReceipt": "The receipt for the send operation.", - "oftReceipt": "The OFT receipt information." - } - }, - "setDelegate(address)": { - "details": "Only the owner/admin of the OApp can call this function.Provides the ability for a delegate to set configs, on behalf of the OApp, directly on the Endpoint contract.", - "params": { "_delegate": "The address of the delegate to be set." } - }, - "setEnforcedOptions((uint32,uint16,bytes)[])": { - "details": "Sets the enforced options for specific endpoint and message type combinations.Only the owner/admin of the OApp can call this function.Provides a way for the OApp to enforce things like paying for PreCrime, AND/OR minimum dst lzReceive gas amounts etc.These enforced options can vary as the potential options/execution on the remote may differ as per the msgType. eg. Amount of lzReceive() gas necessary to deliver a lzCompose() message adds overhead you dont want to pay if you are only making a standard LayerZero message ie. lzReceive() WITHOUT sendCompose().", - "params": { - "_enforcedOptions": "An array of EnforcedOptionParam structures specifying enforced options." - } - }, - "setMsgInspector(address)": { - "details": "Sets the message inspector address for the OFT.This is an optional contract that can be used to inspect both 'message' and 'options'.Set it to address(0) to disable it, or set it to a contract address to enable it.", - "params": { - "_msgInspector": "The address of the message inspector." - } - }, - "setPeer(uint32,bytes32)": { - "details": "Only the owner/admin of the OApp can call this function.Indicates that the peer is trusted to send LayerZero messages to this OApp.Set this to bytes32(0) to remove the peer address.Peer is a bytes32 to accommodate non-evm chains.", - "params": { - "_eid": "The endpoint ID.", - "_peer": "The address of the peer to be associated with the corresponding endpoint." - } - }, - "setPreCrime(address)": { - "details": "Sets the preCrime contract address.", - "params": { "_preCrime": "The address of the preCrime contract." } - }, - "sharedDecimals()": { - "details": "Retrieves the shared decimals of the OFT.Sets an implicit cap on the amount of tokens, over uint64.max() will need some sort of outbound cap / totalSupply cap Lowest common decimal denominator between chains. Defaults to 6 decimal places to provide up to 18,446,744,073,709.551615 units (max uint64). For tokens exceeding this totalSupply(), they will need to override the sharedDecimals function with something smaller. ie. 4 sharedDecimals would be 1,844,674,407,370,955.1615", - "returns": { "_0": "The shared decimals of the OFT." } - }, - "symbol()": { - "details": "Returns the symbol of the token, usually a shorter version of the name." - }, - "token()": { - "details": "Retrieves the address of the underlying ERC20 implementation.In the case of OFT, address(this) and erc20 are the same contract.", - "returns": { "_0": "The address of the OFT token." } - }, - "totalSupply()": { "details": "See {IERC20-totalSupply}." }, - "transfer(address,uint256)": { - "details": "See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `value`." - }, - "transferFrom(address,address,uint256)": { - "details": "See {IERC20-transferFrom}. Skips emitting an {Approval} event indicating an allowance update. This is not required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve]. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `value`. - the caller must have allowance for ``from``'s tokens of at least `value`." - }, - "transferOwnership(address)": { - "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." - } - }, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": { - "allowInitializePath((uint32,bytes32,uint64))": { - "notice": "Checks if the path initialization is allowed based on the provided origin." - }, - "approvalRequired()": { - "notice": "Indicates whether the OFT contract requires approval of the 'token()' to send." - }, - "combineOptions(uint32,uint16,bytes)": { - "notice": "Combines options for a given endpoint and message type." - }, - "endpoint()": { - "notice": "Retrieves the LayerZero endpoint associated with the OApp." - }, - "isComposeMsgSender((uint32,bytes32,uint64),bytes,address)": { - "notice": "Indicates whether an address is an approved composeMsg sender to the Endpoint." - }, - "nextNonce(uint32,bytes32)": { - "notice": "Retrieves the next nonce for a given source endpoint and sender address." - }, - "oAppVersion()": { - "notice": "Retrieves the OApp version information." - }, - "oftVersion()": { - "notice": "Retrieves interfaceID and the version of the OFT." - }, - "peers(uint32)": { - "notice": "Retrieves the peer (OApp) associated with a corresponding endpoint." - }, - "quoteOFT((uint32,bytes32,uint256,uint256,bytes,bytes,bytes))": { - "notice": "Provides the fee breakdown and settings data for an OFT. Unused in the default implementation." - }, - "quoteSend((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),bool)": { - "notice": "Provides a quote for the send() operation." - }, - "setDelegate(address)": { - "notice": "Sets the delegate address for the OApp." - }, - "setPeer(uint32,bytes32)": { - "notice": "Sets the peer address (OApp instance) for a corresponding endpoint." - } - }, - "version": 1 - } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { "contracts/mocks/MyOFTMock.sol": "MyOFTMock" }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "contracts/MyOFT.sol": { - "keccak256": "0x903ef3775b76a5c87c69530c8c70b97b3474317b72dae1967b4cc3e00bbb3042", - "urls": [ - "bzz-raw://5f4f7d41ee11fe4ba4a46e3b0efde626c870d9fd81f8532442bbb206c59cbbda", - "dweb:/ipfs/QmTppfkueRqajda2A4jZqQJhd99ZXfhqQfjSW62shmekna" - ], - "license": "UNLICENSED" - }, - "contracts/mocks/MyOFTMock.sol": { - "keccak256": "0xa72bec6c7982566a2f1d7fb3c516d952d60d3afd0383432c225b60afa692dc5c", - "urls": [ - "bzz-raw://4ab9293535367680e1fb3f03ef7aff55f25fb602aabdc472d723b83b141c1811", - "dweb:/ipfs/QmVsVwzrirJRkxhSXz9bmo24RkCXsRmHncSZwPshWtDjcT" - ], - "license": "UNLICENSED" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol": { - "keccak256": "0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3", - "urls": [ - "bzz-raw://bacc29fd3866af71e59cb0bdc1cf82c882a4a7f4e2652fd413c9f12649762083", - "dweb:/ipfs/QmZh2toLnrQDWaNYhS5K4NoW7Vxd2GdZx9KA77vKEDLAqs" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol": { - "keccak256": "0x9641abba8d53b08bb517d1b74801dd15ea7b84d77a6719085bd96c8ea94e3ca0", - "urls": [ - "bzz-raw://77415ae0820859e0faf3fabdce683cce9fa03ea026ae0f6fe081ef1c9205f933", - "dweb:/ipfs/QmXd7APqoCunQ2jYy73AHvi5gsZofLpm3SzM6FPo7zRPfL" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol": { - "keccak256": "0x5cf5f24751b4e3ea1c9c5ded07cedfdfd62566b6daaffcc0144733859c9dba0c", - "urls": [ - "bzz-raw://cae7e35007a714f007ea08045ef7c0cfa6c91fd2425b5028b2d49abad357a5f0", - "dweb:/ipfs/QmcDBs5tsiyB35b8cwzWQWNnpkawb3uuHRaqE77Hxm2tve" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol": { - "keccak256": "0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc", - "urls": [ - "bzz-raw://d8ff6a8a89297fa127f86b54e0db3eba1d6a6eeb4f6398d3c84d569665ac8f1b", - "dweb:/ipfs/QmVSwhw6xFDrLRAX4RXaCM47yBaBtac4wf36DYEq6KCTvT" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol": { - "keccak256": "0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972", - "urls": [ - "bzz-raw://7e1b245d58221d16d8b5e0f01ef3e289a24a7df1ace3b94239e4d5b954ad5927", - "dweb:/ipfs/Qmappsgp7PCY9rSSNE9Cdn4BTRX591WfCSEgq2HxhA3z6S" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol": { - "keccak256": "0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901", - "urls": [ - "bzz-raw://b18b23a1643fc6636c4ad9d9023e2e6ca2d3c2a4a046482d4655bff09950598d", - "dweb:/ipfs/Qma6G5SqiovwrMPfgqTrRngK1HWW373Wkf9c6YP2NhXpPk" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol": { - "keccak256": "0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e", - "urls": [ - "bzz-raw://5173fc9143bea314b159ca5a9adb5626659ef763bc598e27de5fa46efe3291a6", - "dweb:/ipfs/QmSLFeMFPmVeGxT4sxRPW28ictjAS22M8rLeYRu9TXkA6D" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol": { - "keccak256": "0xf1c07bc61e7b1dce195ed12d50f87980fbf2d63cac1326fd28287f55fe0ba625", - "urls": [ - "bzz-raw://060f10ff7afc33c1c2f2b4b5ba29231fd3c943146488084d0e4ab99fce991d97", - "dweb:/ipfs/QmaSsefAqqEqtf8FgFUmDYMwTsAty3X1pqDb6SiFvry6B3" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol": { - "keccak256": "0x2ebbcaaab3554edcd41b581f1a72ac1806afbfb8047d0d47ff098f9af30d6deb", - "urls": [ - "bzz-raw://2d4b2cf5c3b16dc76c6767f285b57c0af917972327b2be3f7cba5825402f5fc1", - "dweb:/ipfs/QmQQWiHE2jKEDbjzGutSoZwtApSXYfLqZt5CxEpFj8xyvT" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol": { - "keccak256": "0xc84cf1bf785977fe1fbe7566eef902c2db68d0e163813ebe6c34921754802680", - "urls": [ - "bzz-raw://de686666fc16fa432d4208d85cec87dc952faf3e481b683b9adf4b4610db4b09", - "dweb:/ipfs/QmdmQeopzmxqRzi9DNB4EJDrYUXFfD7fUhnGhSni4QejUW" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OApp.sol": { - "keccak256": "0xac362c4c291fad2f1511a968424b2e78a5ad502d1c867bd31da04be742aca8c5", - "urls": [ - "bzz-raw://e1f8cf9f20a2b683a53c3883972aa0676af97a24c678f461fae08e1fb056df28", - "dweb:/ipfs/QmPpKNqda3rgxDwnq3XiRTtT3NfWeqrCJT6LwmhYd2AoT2" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppCore.sol": { - "keccak256": "0x13a9c2d1d2c1f086b8624f2e84c4a4702212daae36f701d92bb915b535cbe4cc", - "urls": [ - "bzz-raw://606515dd9193551bd2c94ac8c304f3776fafcc70e544ebf441f334658b2fd5f0", - "dweb:/ipfs/QmZ88ey7DdZqV5taAoebabvszX5kdPMSrQCAmTteVdDtcH" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppReceiver.sol": { - "keccak256": "0x0174e9f1ec4cefe4b5adc26c392269c699b9ff75965364e5b7264426a462c70b", - "urls": [ - "bzz-raw://cd12bb4fe5802c53911b9a0081a2ea10639b1f99925d1e5c1b1421d1bdc17075", - "dweb:/ipfs/QmZonarwbKiEwQ8qoASKur2bbMjusdy9pqK9RCR4P1YPtc" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppSender.sol": { - "keccak256": "0x518cf4adca601923ed4baa6619846a253ea32b8d8775f8bc1faa3dfac7f67c20", - "urls": [ - "bzz-raw://d42b471418efadcc3577ef3fa9f8f504e8bed7db90c3b0c862038d8b29529eb2", - "dweb:/ipfs/QmZETDQiJN4U92fmLKo8T9ZbdDf7BNBUUvo9H7M7GqAyFU" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppCore.sol": { - "keccak256": "0x40e49f2de74506e1da5dcaed53a39853f691647f4ceb0fccc8f49a68d3f47c58", - "urls": [ - "bzz-raw://4a1deb2a6a3eb1fb83936c9578469142bff470295f403d7d07d955a76be3adbd", - "dweb:/ipfs/QmS9bjSfBaE4YhQ1PCQ1TknbEPbNfRXzBK9E7SaPGyiZEv" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppMsgInspector.sol": { - "keccak256": "0x339654e699043c400cad92de209aa23855ce10211c31cf4114042cc5224d3b7c", - "urls": [ - "bzz-raw://5222afde59bf086f67b39e0288ad36343f4f5ed683d250533f256a5db956f37e", - "dweb:/ipfs/QmbEG9EMYsK3Y6Cz7QbNtkW4kHGzMuhp2y2seSoL8v1A5b" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppOptionsType3.sol": { - "keccak256": "0x9fc08a51e9d7c9c710c4eb26f84fe77228305ad7da63fa486ff24ebf2f3bc461", - "urls": [ - "bzz-raw://2e2eea8a93bb9fc3f629767118b362e9b4bda2443ff95eae21c6a894f3e334cc", - "dweb:/ipfs/QmPRRNjAB4U19ke4gr3U7ZJGtdcVBxdXVBZ2BmB1riFkP7" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppReceiver.sol": { - "keccak256": "0xd26135185e19b3732746d4a9e2923e896f28dec8664bab161faea2ee26fcdc3d", - "urls": [ - "bzz-raw://c236dfe386b508be33c3a1a74ae1d4fd64b8c77ae207767e9dbed0f2429518a2", - "dweb:/ipfs/QmXVbZJjfryTRti98uN3BMh5qh4K7NuEs1RSCoBjRoYd4q" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/libs/OAppOptionsType3.sol": { - "keccak256": "0x5275636cd47e660a2fdf6c7fe9d41ff3cc866b785cc8a9d88c1b8ca983509f01", - "urls": [ - "bzz-raw://a59dd6e3cfcc332f45a13d44585eb228588c4b9d470cbb19852df5753a4571af", - "dweb:/ipfs/QmQJF1QU3MKhvmw42eq61u9z3bzKJJKMsEdQVYyPyYgTVS" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/precrime/OAppPreCrimeSimulator.sol": { - "keccak256": "0x205a0abfd8b3c9af2740769f251381b84999b8e9347f3cd50de3ef8290a17750", - "urls": [ - "bzz-raw://d9778d7d5da941af2029410b6ac212f915ea1785573ae2865b0ed8f779fcca82", - "dweb:/ipfs/QmNkVEkfecvgubgnMuaT5fEfSExd95vz8DQHhpZtMrVRjH" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IOAppPreCrimeSimulator.sol": { - "keccak256": "0x5d24db150949ea8e6437178e65a942e8c8b7f332e5daf32750f56b23b35b5bb2", - "urls": [ - "bzz-raw://1b1dcea0267234654126f926a1b405743606d7b5e49185b621afb7bd94d18b9a", - "dweb:/ipfs/QmZ9BXQmbWJcrhHKuBs4yhNtbCV5WUpUY3AXSX7rkWwX6y" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IPreCrime.sol": { - "keccak256": "0xc8d869f27ef8ceb2e13fdf6a70682fd4dee3f90c4924eb8e125bc1e66cb6af84", - "urls": [ - "bzz-raw://66bf49d59c14832ea0ddddcd12d512d4f9bd0fd254a1368442587bf3e77fe73e", - "dweb:/ipfs/QmYUAvsyuUPiSYjbL4zVo6ZtiRSLCUPDvCesqgdZWbSGDg" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/precrime/libs/Packet.sol": { - "keccak256": "0xcb2fb1c5b2eb3731de78b479b9c2ab3bba326fe0b0b3a008590f18e881e457a6", - "urls": [ - "bzz-raw://f70724c61d226743c2bd8ba6c09758805e4339780978949ce5b333c106be4edc", - "dweb:/ipfs/QmX5rV9K1N7RgTz9xtf8CDG8SrYiitGAzFh9ec2tbnEec4" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oft-evm/contracts/OFT.sol": { - "keccak256": "0xdc3582e4a20e02a79050c17058a1f1f42a4335d1a70be06c0a52a3fb05d4c89a", - "urls": [ - "bzz-raw://83c4bd42e68528246860a952a92a79e51e3a789dac79a0b62576ab2f609de9c7", - "dweb:/ipfs/QmVj1x655j1cFTnPT8uBaM71TCSrhFVwPdoFkAkWhhadns" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oft-evm/contracts/OFTCore.sol": { - "keccak256": "0x9ce49b83455df600b52538e42028c422a322643f7ffb4f2814c72c3b970ea7be", - "urls": [ - "bzz-raw://2ebbf79612c3f6cd4e2754ba55519df6b89504ab5514e3517cbd286d87143997", - "dweb:/ipfs/QmQZpSPhNhF4MESb2if2DbcjC75xfuoEzDGXmeJKYZtHZ5" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oft-evm/contracts/interfaces/IOFT.sol": { - "keccak256": "0x7ba6bb62fba7ee83451cfb0e727ddeef0e96b4388bd4e9ff0fc6ce103e1101c8", - "urls": [ - "bzz-raw://cfbd447f2e8a730bd46a14c3c3e6a0b2bf7446145579603a9793ba5ac1dd38b4", - "dweb:/ipfs/QmZ4nx4iGrFmBHvYFgki5TXFdCHz4Co38hgdgwpRaM7NLs" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oft-evm/contracts/libs/OFTComposeMsgCodec.sol": { - "keccak256": "0xaae73d6eb8b9561c43f1802f3c416c00ccd35f172b711f9781ccdf1b25a40db5", - "urls": [ - "bzz-raw://7beda2d895ae9e15269dd261a492ce0a29b498e5bebf088ed6f2ae6a5185719e", - "dweb:/ipfs/QmScog2tW1YVyEPLVcUVqGGc85ub46sA28nUKNzFEZcFdK" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oft-evm/contracts/libs/OFTMsgCodec.sol": { - "keccak256": "0x5358948017669c03e157f871d8c38e988f9004dbd0801ad3119d2487f0d40b0b", - "urls": [ - "bzz-raw://c7d0f1bf32a80af9b99cd93fefa373dac5c27463351cc35f62b9c2439d5b9258", - "dweb:/ipfs/Qmb81qoxzMwV3PkPANRvnXf4fJTsZ5sjJ8r2df9V2vhh6q" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/access/Ownable.sol": { - "keccak256": "0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb", - "urls": [ - "bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6", - "dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol": { - "keccak256": "0x9b6b3e7803bc5f2f8cd7ad57db8ac1def61a9930a5a3107df4882e028a9605d7", - "urls": [ - "bzz-raw://da62d6be1f5c6edf577f0cb45666a8aa9c2086a4bac87d95d65f02e2f4c36a4b", - "dweb:/ipfs/QmNkpvBpoCMvX8JwAFNSc5XxJ2q5BXJpL5L1txb4QkqVFF" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/interfaces/IERC165.sol": { - "keccak256": "0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724", - "urls": [ - "bzz-raw://11fea9f8bc98949ac6709f0c1699db7430d2948137aa94d5a9e95a91f61a710a", - "dweb:/ipfs/QmQdfRXxQjwP6yn3DVo1GHPpriKNcFghSPi94Z1oKEFUNS" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/interfaces/IERC20.sol": { - "keccak256": "0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c", - "urls": [ - "bzz-raw://a2608291cb038b388d80b79a06b6118a42f7894ff67b7da10ec0dbbf5b2973ba", - "dweb:/ipfs/QmWohqcBLbcxmA4eGPhZDXe5RYMMEEpFq22nfkaUMvTfw1" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/interfaces/draft-IERC6093.sol": { - "keccak256": "0x880da465c203cec76b10d72dbd87c80f387df4102274f23eea1f9c9b0918792b", - "urls": [ - "bzz-raw://399594cd8bb0143bc9e55e0f1d071d0d8c850a394fb7a319d50edd55d9ed822b", - "dweb:/ipfs/QmbPZzgtT6LEm9CMqWfagQFwETbV1ztpECBB1DtQHrKiRz" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/token/ERC20/ERC20.sol": { - "keccak256": "0xbf61ab2ae1d575a17ea58fbb99ca232baddcc4e0eeea180e84cbc74b0c348b31", - "urls": [ - "bzz-raw://4e0968705bad99747a8e5288aa008678c2be2f471f919dce3925a3cc4f1dee09", - "dweb:/ipfs/QmbAFnCQfo4tw6ssfQSjhA5LzwHWNNryXN8bX7ty8jiqqn" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol": { - "keccak256": "0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7", - "urls": [ - "bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db", - "dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol": { - "keccak256": "0x70f2f713b13b7ce4610bcd0ac9fec0f3cc43693b043abcb8dc40a42a726eb330", - "urls": [ - "bzz-raw://c13d13304ac79a83ab1c30168967d19e2203342ebbd6a9bbce4db7550522dcbf", - "dweb:/ipfs/QmeN5jKMN2vw5bhacr6tkg78afbTTZUeaacNHqjWt4Ew1r" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol": { - "keccak256": "0xca2ae13e0610f6a99238dd00b97bd786bc92732dae6d6b9d61f573ec51018310", - "urls": [ - "bzz-raw://75f8c71ce0c91c40dd5f249ace0b7d8270f8f1767231bcf71490f7157d6ba862", - "dweb:/ipfs/QmYXgxeDyFHvz3JsXxLEYN6GNUR44ThHeFj5XkpkgMoG4w" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Address.sol": { - "keccak256": "0x9d8da059267bac779a2dbbb9a26c2acf00ca83085e105d62d5d4ef96054a47f5", - "urls": [ - "bzz-raw://c78e2aa4313323cecd1ef12a8d6265b96beee1a199923abf55d9a2a9e291ad23", - "dweb:/ipfs/QmUTs2KStXucZezzFo3EYeqYu47utu56qrF7jj1Gue65vb" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Context.sol": { - "keccak256": "0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2", - "urls": [ - "bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12", - "dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Errors.sol": { - "keccak256": "0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123", - "urls": [ - "bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf", - "dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol": { - "keccak256": "0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8", - "urls": [ - "bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621", - "dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL" - ], - "license": "MIT" - } - }, - "version": 1 - }, - "id": 1 -} diff --git a/examples/oft-movement/out/OApp.sol/OApp.json b/examples/oft-movement/out/OApp.sol/OApp.json deleted file mode 100644 index e72582bd2..000000000 --- a/examples/oft-movement/out/OApp.sol/OApp.json +++ /dev/null @@ -1,821 +0,0 @@ -{ - "abi": [ - { - "type": "function", - "name": "allowInitializePath", - "inputs": [ - { - "name": "origin", - "type": "tuple", - "internalType": "struct Origin", - "components": [ - { "name": "srcEid", "type": "uint32", "internalType": "uint32" }, - { "name": "sender", "type": "bytes32", "internalType": "bytes32" }, - { "name": "nonce", "type": "uint64", "internalType": "uint64" } - ] - } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "endpoint", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "contract ILayerZeroEndpointV2" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "isComposeMsgSender", - "inputs": [ - { - "name": "", - "type": "tuple", - "internalType": "struct Origin", - "components": [ - { "name": "srcEid", "type": "uint32", "internalType": "uint32" }, - { "name": "sender", "type": "bytes32", "internalType": "bytes32" }, - { "name": "nonce", "type": "uint64", "internalType": "uint64" } - ] - }, - { "name": "", "type": "bytes", "internalType": "bytes" }, - { "name": "_sender", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "lzReceive", - "inputs": [ - { - "name": "_origin", - "type": "tuple", - "internalType": "struct Origin", - "components": [ - { "name": "srcEid", "type": "uint32", "internalType": "uint32" }, - { "name": "sender", "type": "bytes32", "internalType": "bytes32" }, - { "name": "nonce", "type": "uint64", "internalType": "uint64" } - ] - }, - { "name": "_guid", "type": "bytes32", "internalType": "bytes32" }, - { "name": "_message", "type": "bytes", "internalType": "bytes" }, - { "name": "_executor", "type": "address", "internalType": "address" }, - { "name": "_extraData", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [], - "stateMutability": "payable" - }, - { - "type": "function", - "name": "nextNonce", - "inputs": [ - { "name": "", "type": "uint32", "internalType": "uint32" }, - { "name": "", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [ - { "name": "nonce", "type": "uint64", "internalType": "uint64" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "oAppVersion", - "inputs": [], - "outputs": [ - { "name": "senderVersion", "type": "uint64", "internalType": "uint64" }, - { - "name": "receiverVersion", - "type": "uint64", - "internalType": "uint64" - } - ], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "owner", - "inputs": [], - "outputs": [{ "name": "", "type": "address", "internalType": "address" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "peers", - "inputs": [{ "name": "eid", "type": "uint32", "internalType": "uint32" }], - "outputs": [ - { "name": "peer", "type": "bytes32", "internalType": "bytes32" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "renounceOwnership", - "inputs": [], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setDelegate", - "inputs": [ - { "name": "_delegate", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setPeer", - "inputs": [ - { "name": "_eid", "type": "uint32", "internalType": "uint32" }, - { "name": "_peer", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "transferOwnership", - "inputs": [ - { "name": "newOwner", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "event", - "name": "OwnershipTransferred", - "inputs": [ - { - "name": "previousOwner", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "newOwner", - "type": "address", - "indexed": true, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "PeerSet", - "inputs": [ - { - "name": "eid", - "type": "uint32", - "indexed": false, - "internalType": "uint32" - }, - { - "name": "peer", - "type": "bytes32", - "indexed": false, - "internalType": "bytes32" - } - ], - "anonymous": false - }, - { "type": "error", "name": "InvalidDelegate", "inputs": [] }, - { "type": "error", "name": "InvalidEndpointCall", "inputs": [] }, - { "type": "error", "name": "LzTokenUnavailable", "inputs": [] }, - { - "type": "error", - "name": "NoPeer", - "inputs": [{ "name": "eid", "type": "uint32", "internalType": "uint32" }] - }, - { - "type": "error", - "name": "NotEnoughNative", - "inputs": [ - { "name": "msgValue", "type": "uint256", "internalType": "uint256" } - ] - }, - { - "type": "error", - "name": "OnlyEndpoint", - "inputs": [ - { "name": "addr", "type": "address", "internalType": "address" } - ] - }, - { - "type": "error", - "name": "OnlyPeer", - "inputs": [ - { "name": "eid", "type": "uint32", "internalType": "uint32" }, - { "name": "sender", "type": "bytes32", "internalType": "bytes32" } - ] - }, - { - "type": "error", - "name": "OwnableInvalidOwner", - "inputs": [ - { "name": "owner", "type": "address", "internalType": "address" } - ] - }, - { - "type": "error", - "name": "OwnableUnauthorizedAccount", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ] - } - ], - "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "methodIdentifiers": { - "allowInitializePath((uint32,bytes32,uint64))": "ff7bd03d", - "endpoint()": "5e280f11", - "isComposeMsgSender((uint32,bytes32,uint64),bytes,address)": "82413eac", - "lzReceive((uint32,bytes32,uint64),bytes32,bytes,address,bytes)": "13137d65", - "nextNonce(uint32,bytes32)": "7d25a05e", - "oAppVersion()": "17442b70", - "owner()": "8da5cb5b", - "peers(uint32)": "bb0b6a53", - "renounceOwnership()": "715018a6", - "setDelegate(address)": "ca5eb5e1", - "setPeer(uint32,bytes32)": "3400288b", - "transferOwnership(address)": "f2fde38b" - }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"InvalidDelegate\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidEndpointCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LzTokenUnavailable\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"}],\"name\":\"NoPeer\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"msgValue\",\"type\":\"uint256\"}],\"name\":\"NotEnoughNative\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"OnlyEndpoint\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"}],\"name\":\"OnlyPeer\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"peer\",\"type\":\"bytes32\"}],\"name\":\"PeerSet\",\"type\":\"event\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"origin\",\"type\":\"tuple\"}],\"name\":\"allowInitializePath\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"endpoint\",\"outputs\":[{\"internalType\":\"contract ILayerZeroEndpointV2\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"}],\"name\":\"isComposeMsgSender\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"_origin\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"_guid\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"_executor\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"lzReceive\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"nextNonce\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"oAppVersion\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"senderVersion\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"receiverVersion\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"}],\"name\":\"peers\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"peer\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_delegate\",\"type\":\"address\"}],\"name\":\"setDelegate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_peer\",\"type\":\"bytes32\"}],\"name\":\"setPeer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Abstract contract serving as the base for OApp implementation, combining OAppSender and OAppReceiver functionality.\",\"errors\":{\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}]},\"kind\":\"dev\",\"methods\":{\"allowInitializePath((uint32,bytes32,uint64))\":{\"details\":\"This indicates to the endpoint that the OApp has enabled msgs for this particular path to be received.This defaults to assuming if a peer has been set, its initialized. Can be overridden by the OApp if there is other logic to determine this.\",\"params\":{\"origin\":\"The origin information containing the source endpoint and sender address.\"},\"returns\":{\"_0\":\"Whether the path has been initialized.\"}},\"constructor\":{\"details\":\"Constructor to initialize the OApp with the provided endpoint and owner.\",\"params\":{\"_delegate\":\"The delegate capable of making OApp configurations inside of the endpoint.\",\"_endpoint\":\"The address of the LOCAL LayerZero endpoint.\"}},\"isComposeMsgSender((uint32,bytes32,uint64),bytes,address)\":{\"details\":\"_origin The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message._message The lzReceive payload.Applications can optionally choose to implement separate composeMsg senders that are NOT the bridging layer.The default sender IS the OAppReceiver implementer.\",\"params\":{\"_sender\":\"The sender address.\"},\"returns\":{\"_0\":\"isSender Is a valid sender.\"}},\"lzReceive((uint32,bytes32,uint64),bytes32,bytes,address,bytes)\":{\"details\":\"Entry point for receiving messages or packets from the endpoint.Entry point for receiving msg/packet from the LayerZero endpoint.\",\"params\":{\"_executor\":\"The address of the executor for the received message.\",\"_extraData\":\"Additional arbitrary data provided by the corresponding executor.\",\"_guid\":\"The unique identifier for the received LayerZero message.\",\"_message\":\"The payload of the received message.\",\"_origin\":\"The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message.\"}},\"nextNonce(uint32,bytes32)\":{\"details\":\"_srcEid The source endpoint ID._sender The sender address.The path nonce starts from 1. If 0 is returned it means that there is NO nonce ordered enforcement.Is required by the off-chain executor to determine the OApp expects msg execution is ordered.This is also enforced by the OApp.By default this is NOT enabled. ie. nextNonce is hardcoded to return 0.\",\"returns\":{\"nonce\":\"The next nonce.\"}},\"oAppVersion()\":{\"returns\":{\"receiverVersion\":\"The version of the OAppReceiver.sol implementation.\",\"senderVersion\":\"The version of the OAppSender.sol implementation.\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"setDelegate(address)\":{\"details\":\"Only the owner/admin of the OApp can call this function.Provides the ability for a delegate to set configs, on behalf of the OApp, directly on the Endpoint contract.\",\"params\":{\"_delegate\":\"The address of the delegate to be set.\"}},\"setPeer(uint32,bytes32)\":{\"details\":\"Only the owner/admin of the OApp can call this function.Indicates that the peer is trusted to send LayerZero messages to this OApp.Set this to bytes32(0) to remove the peer address.Peer is a bytes32 to accommodate non-evm chains.\",\"params\":{\"_eid\":\"The endpoint ID.\",\"_peer\":\"The address of the peer to be associated with the corresponding endpoint.\"}},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"title\":\"OApp\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"allowInitializePath((uint32,bytes32,uint64))\":{\"notice\":\"Checks if the path initialization is allowed based on the provided origin.\"},\"endpoint()\":{\"notice\":\"Retrieves the LayerZero endpoint associated with the OApp.\"},\"isComposeMsgSender((uint32,bytes32,uint64),bytes,address)\":{\"notice\":\"Indicates whether an address is an approved composeMsg sender to the Endpoint.\"},\"nextNonce(uint32,bytes32)\":{\"notice\":\"Retrieves the next nonce for a given source endpoint and sender address.\"},\"oAppVersion()\":{\"notice\":\"Retrieves the OApp version information.\"},\"peers(uint32)\":{\"notice\":\"Retrieves the peer (OApp) associated with a corresponding endpoint.\"},\"setDelegate(address)\":{\"notice\":\"Sets the delegate address for the OApp.\"},\"setPeer(uint32,bytes32)\":{\"notice\":\"Sets the peer address (OApp instance) for a corresponding endpoint.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OApp.sol\":\"OApp\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\":{\"keccak256\":\"0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bacc29fd3866af71e59cb0bdc1cf82c882a4a7f4e2652fd413c9f12649762083\",\"dweb:/ipfs/QmZh2toLnrQDWaNYhS5K4NoW7Vxd2GdZx9KA77vKEDLAqs\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol\":{\"keccak256\":\"0x9641abba8d53b08bb517d1b74801dd15ea7b84d77a6719085bd96c8ea94e3ca0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://77415ae0820859e0faf3fabdce683cce9fa03ea026ae0f6fe081ef1c9205f933\",\"dweb:/ipfs/QmXd7APqoCunQ2jYy73AHvi5gsZofLpm3SzM6FPo7zRPfL\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol\":{\"keccak256\":\"0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d8ff6a8a89297fa127f86b54e0db3eba1d6a6eeb4f6398d3c84d569665ac8f1b\",\"dweb:/ipfs/QmVSwhw6xFDrLRAX4RXaCM47yBaBtac4wf36DYEq6KCTvT\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol\":{\"keccak256\":\"0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7e1b245d58221d16d8b5e0f01ef3e289a24a7df1ace3b94239e4d5b954ad5927\",\"dweb:/ipfs/Qmappsgp7PCY9rSSNE9Cdn4BTRX591WfCSEgq2HxhA3z6S\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol\":{\"keccak256\":\"0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b18b23a1643fc6636c4ad9d9023e2e6ca2d3c2a4a046482d4655bff09950598d\",\"dweb:/ipfs/Qma6G5SqiovwrMPfgqTrRngK1HWW373Wkf9c6YP2NhXpPk\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol\":{\"keccak256\":\"0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5173fc9143bea314b159ca5a9adb5626659ef763bc598e27de5fa46efe3291a6\",\"dweb:/ipfs/QmSLFeMFPmVeGxT4sxRPW28ictjAS22M8rLeYRu9TXkA6D\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OApp.sol\":{\"keccak256\":\"0xac362c4c291fad2f1511a968424b2e78a5ad502d1c867bd31da04be742aca8c5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e1f8cf9f20a2b683a53c3883972aa0676af97a24c678f461fae08e1fb056df28\",\"dweb:/ipfs/QmPpKNqda3rgxDwnq3XiRTtT3NfWeqrCJT6LwmhYd2AoT2\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppCore.sol\":{\"keccak256\":\"0x13a9c2d1d2c1f086b8624f2e84c4a4702212daae36f701d92bb915b535cbe4cc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://606515dd9193551bd2c94ac8c304f3776fafcc70e544ebf441f334658b2fd5f0\",\"dweb:/ipfs/QmZ88ey7DdZqV5taAoebabvszX5kdPMSrQCAmTteVdDtcH\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppReceiver.sol\":{\"keccak256\":\"0x0174e9f1ec4cefe4b5adc26c392269c699b9ff75965364e5b7264426a462c70b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cd12bb4fe5802c53911b9a0081a2ea10639b1f99925d1e5c1b1421d1bdc17075\",\"dweb:/ipfs/QmZonarwbKiEwQ8qoASKur2bbMjusdy9pqK9RCR4P1YPtc\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppSender.sol\":{\"keccak256\":\"0x518cf4adca601923ed4baa6619846a253ea32b8d8775f8bc1faa3dfac7f67c20\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d42b471418efadcc3577ef3fa9f8f504e8bed7db90c3b0c862038d8b29529eb2\",\"dweb:/ipfs/QmZETDQiJN4U92fmLKo8T9ZbdDf7BNBUUvo9H7M7GqAyFU\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppCore.sol\":{\"keccak256\":\"0x40e49f2de74506e1da5dcaed53a39853f691647f4ceb0fccc8f49a68d3f47c58\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4a1deb2a6a3eb1fb83936c9578469142bff470295f403d7d07d955a76be3adbd\",\"dweb:/ipfs/QmS9bjSfBaE4YhQ1PCQ1TknbEPbNfRXzBK9E7SaPGyiZEv\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppReceiver.sol\":{\"keccak256\":\"0xd26135185e19b3732746d4a9e2923e896f28dec8664bab161faea2ee26fcdc3d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c236dfe386b508be33c3a1a74ae1d4fd64b8c77ae207767e9dbed0f2429518a2\",\"dweb:/ipfs/QmXVbZJjfryTRti98uN3BMh5qh4K7NuEs1RSCoBjRoYd4q\"]},\"node_modules/@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol\":{\"keccak256\":\"0x9b6b3e7803bc5f2f8cd7ad57db8ac1def61a9930a5a3107df4882e028a9605d7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://da62d6be1f5c6edf577f0cb45666a8aa9c2086a4bac87d95d65f02e2f4c36a4b\",\"dweb:/ipfs/QmNkpvBpoCMvX8JwAFNSc5XxJ2q5BXJpL5L1txb4QkqVFF\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC165.sol\":{\"keccak256\":\"0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://11fea9f8bc98949ac6709f0c1699db7430d2948137aa94d5a9e95a91f61a710a\",\"dweb:/ipfs/QmQdfRXxQjwP6yn3DVo1GHPpriKNcFghSPi94Z1oKEFUNS\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC20.sol\":{\"keccak256\":\"0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a2608291cb038b388d80b79a06b6118a42f7894ff67b7da10ec0dbbf5b2973ba\",\"dweb:/ipfs/QmWohqcBLbcxmA4eGPhZDXe5RYMMEEpFq22nfkaUMvTfw1\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db\",\"dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0xca2ae13e0610f6a99238dd00b97bd786bc92732dae6d6b9d61f573ec51018310\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://75f8c71ce0c91c40dd5f249ace0b7d8270f8f1767231bcf71490f7157d6ba862\",\"dweb:/ipfs/QmYXgxeDyFHvz3JsXxLEYN6GNUR44ThHeFj5XkpkgMoG4w\"]},\"node_modules/@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0x9d8da059267bac779a2dbbb9a26c2acf00ca83085e105d62d5d4ef96054a47f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c78e2aa4313323cecd1ef12a8d6265b96beee1a199923abf55d9a2a9e291ad23\",\"dweb:/ipfs/QmUTs2KStXucZezzFo3EYeqYu47utu56qrF7jj1Gue65vb\"]},\"node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"node_modules/@openzeppelin/contracts/utils/Errors.sol\":{\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf\",\"dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB\"]},\"node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { "inputs": [], "type": "error", "name": "InvalidDelegate" }, - { "inputs": [], "type": "error", "name": "InvalidEndpointCall" }, - { "inputs": [], "type": "error", "name": "LzTokenUnavailable" }, - { - "inputs": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" } - ], - "type": "error", - "name": "NoPeer" - }, - { - "inputs": [ - { "internalType": "uint256", "name": "msgValue", "type": "uint256" } - ], - "type": "error", - "name": "NotEnoughNative" - }, - { - "inputs": [ - { "internalType": "address", "name": "addr", "type": "address" } - ], - "type": "error", - "name": "OnlyEndpoint" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" }, - { "internalType": "bytes32", "name": "sender", "type": "bytes32" } - ], - "type": "error", - "name": "OnlyPeer" - }, - { - "inputs": [ - { "internalType": "address", "name": "owner", "type": "address" } - ], - "type": "error", - "name": "OwnableInvalidOwner" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "type": "error", - "name": "OwnableUnauthorizedAccount" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "previousOwner", - "type": "address", - "indexed": true - }, - { - "internalType": "address", - "name": "newOwner", - "type": "address", - "indexed": true - } - ], - "type": "event", - "name": "OwnershipTransferred", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "eid", - "type": "uint32", - "indexed": false - }, - { - "internalType": "bytes32", - "name": "peer", - "type": "bytes32", - "indexed": false - } - ], - "type": "event", - "name": "PeerSet", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "struct Origin", - "name": "origin", - "type": "tuple", - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { "internalType": "uint64", "name": "nonce", "type": "uint64" } - ] - } - ], - "stateMutability": "view", - "type": "function", - "name": "allowInitializePath", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "endpoint", - "outputs": [ - { - "internalType": "contract ILayerZeroEndpointV2", - "name": "", - "type": "address" - } - ] - }, - { - "inputs": [ - { - "internalType": "struct Origin", - "name": "", - "type": "tuple", - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { "internalType": "uint64", "name": "nonce", "type": "uint64" } - ] - }, - { "internalType": "bytes", "name": "", "type": "bytes" }, - { "internalType": "address", "name": "_sender", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "isComposeMsgSender", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { - "internalType": "struct Origin", - "name": "_origin", - "type": "tuple", - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { "internalType": "uint64", "name": "nonce", "type": "uint64" } - ] - }, - { "internalType": "bytes32", "name": "_guid", "type": "bytes32" }, - { "internalType": "bytes", "name": "_message", "type": "bytes" }, - { - "internalType": "address", - "name": "_executor", - "type": "address" - }, - { "internalType": "bytes", "name": "_extraData", "type": "bytes" } - ], - "stateMutability": "payable", - "type": "function", - "name": "lzReceive" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "", "type": "uint32" }, - { "internalType": "bytes32", "name": "", "type": "bytes32" } - ], - "stateMutability": "view", - "type": "function", - "name": "nextNonce", - "outputs": [ - { "internalType": "uint64", "name": "nonce", "type": "uint64" } - ] - }, - { - "inputs": [], - "stateMutability": "pure", - "type": "function", - "name": "oAppVersion", - "outputs": [ - { - "internalType": "uint64", - "name": "senderVersion", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "receiverVersion", - "type": "uint64" - } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "owner", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ] - }, - { - "inputs": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" } - ], - "stateMutability": "view", - "type": "function", - "name": "peers", - "outputs": [ - { "internalType": "bytes32", "name": "peer", "type": "bytes32" } - ] - }, - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "function", - "name": "renounceOwnership" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_delegate", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setDelegate" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { "internalType": "bytes32", "name": "_peer", "type": "bytes32" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setPeer" - }, - { - "inputs": [ - { "internalType": "address", "name": "newOwner", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "transferOwnership" - } - ], - "devdoc": { - "kind": "dev", - "methods": { - "allowInitializePath((uint32,bytes32,uint64))": { - "details": "This indicates to the endpoint that the OApp has enabled msgs for this particular path to be received.This defaults to assuming if a peer has been set, its initialized. Can be overridden by the OApp if there is other logic to determine this.", - "params": { - "origin": "The origin information containing the source endpoint and sender address." - }, - "returns": { "_0": "Whether the path has been initialized." } - }, - "constructor": { - "details": "Constructor to initialize the OApp with the provided endpoint and owner.", - "params": { - "_delegate": "The delegate capable of making OApp configurations inside of the endpoint.", - "_endpoint": "The address of the LOCAL LayerZero endpoint." - } - }, - "isComposeMsgSender((uint32,bytes32,uint64),bytes,address)": { - "details": "_origin The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message._message The lzReceive payload.Applications can optionally choose to implement separate composeMsg senders that are NOT the bridging layer.The default sender IS the OAppReceiver implementer.", - "params": { "_sender": "The sender address." }, - "returns": { "_0": "isSender Is a valid sender." } - }, - "lzReceive((uint32,bytes32,uint64),bytes32,bytes,address,bytes)": { - "details": "Entry point for receiving messages or packets from the endpoint.Entry point for receiving msg/packet from the LayerZero endpoint.", - "params": { - "_executor": "The address of the executor for the received message.", - "_extraData": "Additional arbitrary data provided by the corresponding executor.", - "_guid": "The unique identifier for the received LayerZero message.", - "_message": "The payload of the received message.", - "_origin": "The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message." - } - }, - "nextNonce(uint32,bytes32)": { - "details": "_srcEid The source endpoint ID._sender The sender address.The path nonce starts from 1. If 0 is returned it means that there is NO nonce ordered enforcement.Is required by the off-chain executor to determine the OApp expects msg execution is ordered.This is also enforced by the OApp.By default this is NOT enabled. ie. nextNonce is hardcoded to return 0.", - "returns": { "nonce": "The next nonce." } - }, - "oAppVersion()": { - "returns": { - "receiverVersion": "The version of the OAppReceiver.sol implementation.", - "senderVersion": "The version of the OAppSender.sol implementation." - } - }, - "owner()": { "details": "Returns the address of the current owner." }, - "renounceOwnership()": { - "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner." - }, - "setDelegate(address)": { - "details": "Only the owner/admin of the OApp can call this function.Provides the ability for a delegate to set configs, on behalf of the OApp, directly on the Endpoint contract.", - "params": { "_delegate": "The address of the delegate to be set." } - }, - "setPeer(uint32,bytes32)": { - "details": "Only the owner/admin of the OApp can call this function.Indicates that the peer is trusted to send LayerZero messages to this OApp.Set this to bytes32(0) to remove the peer address.Peer is a bytes32 to accommodate non-evm chains.", - "params": { - "_eid": "The endpoint ID.", - "_peer": "The address of the peer to be associated with the corresponding endpoint." - } - }, - "transferOwnership(address)": { - "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." - } - }, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": { - "allowInitializePath((uint32,bytes32,uint64))": { - "notice": "Checks if the path initialization is allowed based on the provided origin." - }, - "endpoint()": { - "notice": "Retrieves the LayerZero endpoint associated with the OApp." - }, - "isComposeMsgSender((uint32,bytes32,uint64),bytes,address)": { - "notice": "Indicates whether an address is an approved composeMsg sender to the Endpoint." - }, - "nextNonce(uint32,bytes32)": { - "notice": "Retrieves the next nonce for a given source endpoint and sender address." - }, - "oAppVersion()": { - "notice": "Retrieves the OApp version information." - }, - "peers(uint32)": { - "notice": "Retrieves the peer (OApp) associated with a corresponding endpoint." - }, - "setDelegate(address)": { - "notice": "Sets the delegate address for the OApp." - }, - "setPeer(uint32,bytes32)": { - "notice": "Sets the peer address (OApp instance) for a corresponding endpoint." - } - }, - "version": 1 - } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OApp.sol": "OApp" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol": { - "keccak256": "0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3", - "urls": [ - "bzz-raw://bacc29fd3866af71e59cb0bdc1cf82c882a4a7f4e2652fd413c9f12649762083", - "dweb:/ipfs/QmZh2toLnrQDWaNYhS5K4NoW7Vxd2GdZx9KA77vKEDLAqs" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol": { - "keccak256": "0x9641abba8d53b08bb517d1b74801dd15ea7b84d77a6719085bd96c8ea94e3ca0", - "urls": [ - "bzz-raw://77415ae0820859e0faf3fabdce683cce9fa03ea026ae0f6fe081ef1c9205f933", - "dweb:/ipfs/QmXd7APqoCunQ2jYy73AHvi5gsZofLpm3SzM6FPo7zRPfL" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol": { - "keccak256": "0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc", - "urls": [ - "bzz-raw://d8ff6a8a89297fa127f86b54e0db3eba1d6a6eeb4f6398d3c84d569665ac8f1b", - "dweb:/ipfs/QmVSwhw6xFDrLRAX4RXaCM47yBaBtac4wf36DYEq6KCTvT" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol": { - "keccak256": "0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972", - "urls": [ - "bzz-raw://7e1b245d58221d16d8b5e0f01ef3e289a24a7df1ace3b94239e4d5b954ad5927", - "dweb:/ipfs/Qmappsgp7PCY9rSSNE9Cdn4BTRX591WfCSEgq2HxhA3z6S" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol": { - "keccak256": "0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901", - "urls": [ - "bzz-raw://b18b23a1643fc6636c4ad9d9023e2e6ca2d3c2a4a046482d4655bff09950598d", - "dweb:/ipfs/Qma6G5SqiovwrMPfgqTrRngK1HWW373Wkf9c6YP2NhXpPk" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol": { - "keccak256": "0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e", - "urls": [ - "bzz-raw://5173fc9143bea314b159ca5a9adb5626659ef763bc598e27de5fa46efe3291a6", - "dweb:/ipfs/QmSLFeMFPmVeGxT4sxRPW28ictjAS22M8rLeYRu9TXkA6D" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OApp.sol": { - "keccak256": "0xac362c4c291fad2f1511a968424b2e78a5ad502d1c867bd31da04be742aca8c5", - "urls": [ - "bzz-raw://e1f8cf9f20a2b683a53c3883972aa0676af97a24c678f461fae08e1fb056df28", - "dweb:/ipfs/QmPpKNqda3rgxDwnq3XiRTtT3NfWeqrCJT6LwmhYd2AoT2" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppCore.sol": { - "keccak256": "0x13a9c2d1d2c1f086b8624f2e84c4a4702212daae36f701d92bb915b535cbe4cc", - "urls": [ - "bzz-raw://606515dd9193551bd2c94ac8c304f3776fafcc70e544ebf441f334658b2fd5f0", - "dweb:/ipfs/QmZ88ey7DdZqV5taAoebabvszX5kdPMSrQCAmTteVdDtcH" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppReceiver.sol": { - "keccak256": "0x0174e9f1ec4cefe4b5adc26c392269c699b9ff75965364e5b7264426a462c70b", - "urls": [ - "bzz-raw://cd12bb4fe5802c53911b9a0081a2ea10639b1f99925d1e5c1b1421d1bdc17075", - "dweb:/ipfs/QmZonarwbKiEwQ8qoASKur2bbMjusdy9pqK9RCR4P1YPtc" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppSender.sol": { - "keccak256": "0x518cf4adca601923ed4baa6619846a253ea32b8d8775f8bc1faa3dfac7f67c20", - "urls": [ - "bzz-raw://d42b471418efadcc3577ef3fa9f8f504e8bed7db90c3b0c862038d8b29529eb2", - "dweb:/ipfs/QmZETDQiJN4U92fmLKo8T9ZbdDf7BNBUUvo9H7M7GqAyFU" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppCore.sol": { - "keccak256": "0x40e49f2de74506e1da5dcaed53a39853f691647f4ceb0fccc8f49a68d3f47c58", - "urls": [ - "bzz-raw://4a1deb2a6a3eb1fb83936c9578469142bff470295f403d7d07d955a76be3adbd", - "dweb:/ipfs/QmS9bjSfBaE4YhQ1PCQ1TknbEPbNfRXzBK9E7SaPGyiZEv" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppReceiver.sol": { - "keccak256": "0xd26135185e19b3732746d4a9e2923e896f28dec8664bab161faea2ee26fcdc3d", - "urls": [ - "bzz-raw://c236dfe386b508be33c3a1a74ae1d4fd64b8c77ae207767e9dbed0f2429518a2", - "dweb:/ipfs/QmXVbZJjfryTRti98uN3BMh5qh4K7NuEs1RSCoBjRoYd4q" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/access/Ownable.sol": { - "keccak256": "0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb", - "urls": [ - "bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6", - "dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol": { - "keccak256": "0x9b6b3e7803bc5f2f8cd7ad57db8ac1def61a9930a5a3107df4882e028a9605d7", - "urls": [ - "bzz-raw://da62d6be1f5c6edf577f0cb45666a8aa9c2086a4bac87d95d65f02e2f4c36a4b", - "dweb:/ipfs/QmNkpvBpoCMvX8JwAFNSc5XxJ2q5BXJpL5L1txb4QkqVFF" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/interfaces/IERC165.sol": { - "keccak256": "0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724", - "urls": [ - "bzz-raw://11fea9f8bc98949ac6709f0c1699db7430d2948137aa94d5a9e95a91f61a710a", - "dweb:/ipfs/QmQdfRXxQjwP6yn3DVo1GHPpriKNcFghSPi94Z1oKEFUNS" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/interfaces/IERC20.sol": { - "keccak256": "0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c", - "urls": [ - "bzz-raw://a2608291cb038b388d80b79a06b6118a42f7894ff67b7da10ec0dbbf5b2973ba", - "dweb:/ipfs/QmWohqcBLbcxmA4eGPhZDXe5RYMMEEpFq22nfkaUMvTfw1" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol": { - "keccak256": "0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7", - "urls": [ - "bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db", - "dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol": { - "keccak256": "0xca2ae13e0610f6a99238dd00b97bd786bc92732dae6d6b9d61f573ec51018310", - "urls": [ - "bzz-raw://75f8c71ce0c91c40dd5f249ace0b7d8270f8f1767231bcf71490f7157d6ba862", - "dweb:/ipfs/QmYXgxeDyFHvz3JsXxLEYN6GNUR44ThHeFj5XkpkgMoG4w" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Address.sol": { - "keccak256": "0x9d8da059267bac779a2dbbb9a26c2acf00ca83085e105d62d5d4ef96054a47f5", - "urls": [ - "bzz-raw://c78e2aa4313323cecd1ef12a8d6265b96beee1a199923abf55d9a2a9e291ad23", - "dweb:/ipfs/QmUTs2KStXucZezzFo3EYeqYu47utu56qrF7jj1Gue65vb" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Context.sol": { - "keccak256": "0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2", - "urls": [ - "bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12", - "dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Errors.sol": { - "keccak256": "0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123", - "urls": [ - "bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf", - "dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol": { - "keccak256": "0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8", - "urls": [ - "bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621", - "dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL" - ], - "license": "MIT" - } - }, - "version": 1 - }, - "id": 12 -} diff --git a/examples/oft-movement/out/OAppCore.sol/OAppCore.json b/examples/oft-movement/out/OAppCore.sol/OAppCore.json deleted file mode 100644 index 624b7a850..000000000 --- a/examples/oft-movement/out/OAppCore.sol/OAppCore.json +++ /dev/null @@ -1,477 +0,0 @@ -{ - "abi": [ - { - "type": "function", - "name": "endpoint", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "contract ILayerZeroEndpointV2" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "oAppVersion", - "inputs": [], - "outputs": [ - { "name": "senderVersion", "type": "uint64", "internalType": "uint64" }, - { - "name": "receiverVersion", - "type": "uint64", - "internalType": "uint64" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "owner", - "inputs": [], - "outputs": [{ "name": "", "type": "address", "internalType": "address" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "peers", - "inputs": [{ "name": "eid", "type": "uint32", "internalType": "uint32" }], - "outputs": [ - { "name": "peer", "type": "bytes32", "internalType": "bytes32" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "renounceOwnership", - "inputs": [], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setDelegate", - "inputs": [ - { "name": "_delegate", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setPeer", - "inputs": [ - { "name": "_eid", "type": "uint32", "internalType": "uint32" }, - { "name": "_peer", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "transferOwnership", - "inputs": [ - { "name": "newOwner", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "event", - "name": "OwnershipTransferred", - "inputs": [ - { - "name": "previousOwner", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "newOwner", - "type": "address", - "indexed": true, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "PeerSet", - "inputs": [ - { - "name": "eid", - "type": "uint32", - "indexed": false, - "internalType": "uint32" - }, - { - "name": "peer", - "type": "bytes32", - "indexed": false, - "internalType": "bytes32" - } - ], - "anonymous": false - }, - { "type": "error", "name": "InvalidDelegate", "inputs": [] }, - { "type": "error", "name": "InvalidEndpointCall", "inputs": [] }, - { - "type": "error", - "name": "NoPeer", - "inputs": [{ "name": "eid", "type": "uint32", "internalType": "uint32" }] - }, - { - "type": "error", - "name": "OnlyPeer", - "inputs": [ - { "name": "eid", "type": "uint32", "internalType": "uint32" }, - { "name": "sender", "type": "bytes32", "internalType": "bytes32" } - ] - }, - { - "type": "error", - "name": "OwnableInvalidOwner", - "inputs": [ - { "name": "owner", "type": "address", "internalType": "address" } - ] - }, - { - "type": "error", - "name": "OwnableUnauthorizedAccount", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ] - } - ], - "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "methodIdentifiers": { - "endpoint()": "5e280f11", - "oAppVersion()": "17442b70", - "owner()": "8da5cb5b", - "peers(uint32)": "bb0b6a53", - "renounceOwnership()": "715018a6", - "setDelegate(address)": "ca5eb5e1", - "setPeer(uint32,bytes32)": "3400288b", - "transferOwnership(address)": "f2fde38b" - }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"InvalidDelegate\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidEndpointCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"}],\"name\":\"NoPeer\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"}],\"name\":\"OnlyPeer\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"peer\",\"type\":\"bytes32\"}],\"name\":\"PeerSet\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"endpoint\",\"outputs\":[{\"internalType\":\"contract ILayerZeroEndpointV2\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"oAppVersion\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"senderVersion\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"receiverVersion\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"}],\"name\":\"peers\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"peer\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_delegate\",\"type\":\"address\"}],\"name\":\"setDelegate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_peer\",\"type\":\"bytes32\"}],\"name\":\"setPeer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Abstract contract implementing the IOAppCore interface with basic OApp configurations.\",\"errors\":{\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}]},\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Constructor to initialize the OAppCore with the provided endpoint and delegate.The delegate typically should be set as the owner of the contract.\",\"params\":{\"_delegate\":\"The delegate capable of making OApp configurations inside of the endpoint.\",\"_endpoint\":\"The address of the LOCAL Layer Zero endpoint.\"}},\"oAppVersion()\":{\"returns\":{\"receiverVersion\":\"The version of the OAppReceiver.sol contract.\",\"senderVersion\":\"The version of the OAppSender.sol contract.\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"setDelegate(address)\":{\"details\":\"Only the owner/admin of the OApp can call this function.Provides the ability for a delegate to set configs, on behalf of the OApp, directly on the Endpoint contract.\",\"params\":{\"_delegate\":\"The address of the delegate to be set.\"}},\"setPeer(uint32,bytes32)\":{\"details\":\"Only the owner/admin of the OApp can call this function.Indicates that the peer is trusted to send LayerZero messages to this OApp.Set this to bytes32(0) to remove the peer address.Peer is a bytes32 to accommodate non-evm chains.\",\"params\":{\"_eid\":\"The endpoint ID.\",\"_peer\":\"The address of the peer to be associated with the corresponding endpoint.\"}},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"stateVariables\":{\"endpoint\":{\"return\":\"The LayerZero endpoint as an interface.\",\"returns\":{\"_0\":\"The LayerZero endpoint as an interface.\"}},\"peers\":{\"params\":{\"_eid\":\"The endpoint ID.\"},\"return\":\"peer The peer address (OApp instance) associated with the corresponding endpoint.\",\"returns\":{\"peer\":\"The peer address (OApp instance) associated with the corresponding endpoint.\"}}},\"title\":\"OAppCore\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"endpoint()\":{\"notice\":\"Retrieves the LayerZero endpoint associated with the OApp.\"},\"oAppVersion()\":{\"notice\":\"Retrieves the OApp version information.\"},\"peers(uint32)\":{\"notice\":\"Retrieves the peer (OApp) associated with a corresponding endpoint.\"},\"setDelegate(address)\":{\"notice\":\"Sets the delegate address for the OApp.\"},\"setPeer(uint32,bytes32)\":{\"notice\":\"Sets the peer address (OApp instance) for a corresponding endpoint.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppCore.sol\":\"OAppCore\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\":{\"keccak256\":\"0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bacc29fd3866af71e59cb0bdc1cf82c882a4a7f4e2652fd413c9f12649762083\",\"dweb:/ipfs/QmZh2toLnrQDWaNYhS5K4NoW7Vxd2GdZx9KA77vKEDLAqs\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol\":{\"keccak256\":\"0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d8ff6a8a89297fa127f86b54e0db3eba1d6a6eeb4f6398d3c84d569665ac8f1b\",\"dweb:/ipfs/QmVSwhw6xFDrLRAX4RXaCM47yBaBtac4wf36DYEq6KCTvT\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol\":{\"keccak256\":\"0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7e1b245d58221d16d8b5e0f01ef3e289a24a7df1ace3b94239e4d5b954ad5927\",\"dweb:/ipfs/Qmappsgp7PCY9rSSNE9Cdn4BTRX591WfCSEgq2HxhA3z6S\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol\":{\"keccak256\":\"0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b18b23a1643fc6636c4ad9d9023e2e6ca2d3c2a4a046482d4655bff09950598d\",\"dweb:/ipfs/Qma6G5SqiovwrMPfgqTrRngK1HWW373Wkf9c6YP2NhXpPk\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol\":{\"keccak256\":\"0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5173fc9143bea314b159ca5a9adb5626659ef763bc598e27de5fa46efe3291a6\",\"dweb:/ipfs/QmSLFeMFPmVeGxT4sxRPW28ictjAS22M8rLeYRu9TXkA6D\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppCore.sol\":{\"keccak256\":\"0x13a9c2d1d2c1f086b8624f2e84c4a4702212daae36f701d92bb915b535cbe4cc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://606515dd9193551bd2c94ac8c304f3776fafcc70e544ebf441f334658b2fd5f0\",\"dweb:/ipfs/QmZ88ey7DdZqV5taAoebabvszX5kdPMSrQCAmTteVdDtcH\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppCore.sol\":{\"keccak256\":\"0x40e49f2de74506e1da5dcaed53a39853f691647f4ceb0fccc8f49a68d3f47c58\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4a1deb2a6a3eb1fb83936c9578469142bff470295f403d7d07d955a76be3adbd\",\"dweb:/ipfs/QmS9bjSfBaE4YhQ1PCQ1TknbEPbNfRXzBK9E7SaPGyiZEv\"]},\"node_modules/@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { "inputs": [], "type": "error", "name": "InvalidDelegate" }, - { "inputs": [], "type": "error", "name": "InvalidEndpointCall" }, - { - "inputs": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" } - ], - "type": "error", - "name": "NoPeer" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" }, - { "internalType": "bytes32", "name": "sender", "type": "bytes32" } - ], - "type": "error", - "name": "OnlyPeer" - }, - { - "inputs": [ - { "internalType": "address", "name": "owner", "type": "address" } - ], - "type": "error", - "name": "OwnableInvalidOwner" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "type": "error", - "name": "OwnableUnauthorizedAccount" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "previousOwner", - "type": "address", - "indexed": true - }, - { - "internalType": "address", - "name": "newOwner", - "type": "address", - "indexed": true - } - ], - "type": "event", - "name": "OwnershipTransferred", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "eid", - "type": "uint32", - "indexed": false - }, - { - "internalType": "bytes32", - "name": "peer", - "type": "bytes32", - "indexed": false - } - ], - "type": "event", - "name": "PeerSet", - "anonymous": false - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "endpoint", - "outputs": [ - { - "internalType": "contract ILayerZeroEndpointV2", - "name": "", - "type": "address" - } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "oAppVersion", - "outputs": [ - { - "internalType": "uint64", - "name": "senderVersion", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "receiverVersion", - "type": "uint64" - } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "owner", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ] - }, - { - "inputs": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" } - ], - "stateMutability": "view", - "type": "function", - "name": "peers", - "outputs": [ - { "internalType": "bytes32", "name": "peer", "type": "bytes32" } - ] - }, - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "function", - "name": "renounceOwnership" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_delegate", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setDelegate" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { "internalType": "bytes32", "name": "_peer", "type": "bytes32" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setPeer" - }, - { - "inputs": [ - { "internalType": "address", "name": "newOwner", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "transferOwnership" - } - ], - "devdoc": { - "kind": "dev", - "methods": { - "constructor": { - "details": "Constructor to initialize the OAppCore with the provided endpoint and delegate.The delegate typically should be set as the owner of the contract.", - "params": { - "_delegate": "The delegate capable of making OApp configurations inside of the endpoint.", - "_endpoint": "The address of the LOCAL Layer Zero endpoint." - } - }, - "oAppVersion()": { - "returns": { - "receiverVersion": "The version of the OAppReceiver.sol contract.", - "senderVersion": "The version of the OAppSender.sol contract." - } - }, - "owner()": { "details": "Returns the address of the current owner." }, - "renounceOwnership()": { - "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner." - }, - "setDelegate(address)": { - "details": "Only the owner/admin of the OApp can call this function.Provides the ability for a delegate to set configs, on behalf of the OApp, directly on the Endpoint contract.", - "params": { "_delegate": "The address of the delegate to be set." } - }, - "setPeer(uint32,bytes32)": { - "details": "Only the owner/admin of the OApp can call this function.Indicates that the peer is trusted to send LayerZero messages to this OApp.Set this to bytes32(0) to remove the peer address.Peer is a bytes32 to accommodate non-evm chains.", - "params": { - "_eid": "The endpoint ID.", - "_peer": "The address of the peer to be associated with the corresponding endpoint." - } - }, - "transferOwnership(address)": { - "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." - } - }, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": { - "endpoint()": { - "notice": "Retrieves the LayerZero endpoint associated with the OApp." - }, - "oAppVersion()": { - "notice": "Retrieves the OApp version information." - }, - "peers(uint32)": { - "notice": "Retrieves the peer (OApp) associated with a corresponding endpoint." - }, - "setDelegate(address)": { - "notice": "Sets the delegate address for the OApp." - }, - "setPeer(uint32,bytes32)": { - "notice": "Sets the peer address (OApp instance) for a corresponding endpoint." - } - }, - "version": 1 - } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppCore.sol": "OAppCore" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol": { - "keccak256": "0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3", - "urls": [ - "bzz-raw://bacc29fd3866af71e59cb0bdc1cf82c882a4a7f4e2652fd413c9f12649762083", - "dweb:/ipfs/QmZh2toLnrQDWaNYhS5K4NoW7Vxd2GdZx9KA77vKEDLAqs" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol": { - "keccak256": "0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc", - "urls": [ - "bzz-raw://d8ff6a8a89297fa127f86b54e0db3eba1d6a6eeb4f6398d3c84d569665ac8f1b", - "dweb:/ipfs/QmVSwhw6xFDrLRAX4RXaCM47yBaBtac4wf36DYEq6KCTvT" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol": { - "keccak256": "0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972", - "urls": [ - "bzz-raw://7e1b245d58221d16d8b5e0f01ef3e289a24a7df1ace3b94239e4d5b954ad5927", - "dweb:/ipfs/Qmappsgp7PCY9rSSNE9Cdn4BTRX591WfCSEgq2HxhA3z6S" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol": { - "keccak256": "0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901", - "urls": [ - "bzz-raw://b18b23a1643fc6636c4ad9d9023e2e6ca2d3c2a4a046482d4655bff09950598d", - "dweb:/ipfs/Qma6G5SqiovwrMPfgqTrRngK1HWW373Wkf9c6YP2NhXpPk" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol": { - "keccak256": "0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e", - "urls": [ - "bzz-raw://5173fc9143bea314b159ca5a9adb5626659ef763bc598e27de5fa46efe3291a6", - "dweb:/ipfs/QmSLFeMFPmVeGxT4sxRPW28ictjAS22M8rLeYRu9TXkA6D" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppCore.sol": { - "keccak256": "0x13a9c2d1d2c1f086b8624f2e84c4a4702212daae36f701d92bb915b535cbe4cc", - "urls": [ - "bzz-raw://606515dd9193551bd2c94ac8c304f3776fafcc70e544ebf441f334658b2fd5f0", - "dweb:/ipfs/QmZ88ey7DdZqV5taAoebabvszX5kdPMSrQCAmTteVdDtcH" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppCore.sol": { - "keccak256": "0x40e49f2de74506e1da5dcaed53a39853f691647f4ceb0fccc8f49a68d3f47c58", - "urls": [ - "bzz-raw://4a1deb2a6a3eb1fb83936c9578469142bff470295f403d7d07d955a76be3adbd", - "dweb:/ipfs/QmS9bjSfBaE4YhQ1PCQ1TknbEPbNfRXzBK9E7SaPGyiZEv" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/access/Ownable.sol": { - "keccak256": "0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb", - "urls": [ - "bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6", - "dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Context.sol": { - "keccak256": "0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2", - "urls": [ - "bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12", - "dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF" - ], - "license": "MIT" - } - }, - "version": 1 - }, - "id": 13 -} diff --git a/examples/oft-movement/out/OAppOptionsType3.sol/OAppOptionsType3.json b/examples/oft-movement/out/OAppOptionsType3.sol/OAppOptionsType3.json deleted file mode 100644 index 42cb3f240..000000000 --- a/examples/oft-movement/out/OAppOptionsType3.sol/OAppOptionsType3.json +++ /dev/null @@ -1,375 +0,0 @@ -{ - "abi": [ - { - "type": "function", - "name": "combineOptions", - "inputs": [ - { "name": "_eid", "type": "uint32", "internalType": "uint32" }, - { "name": "_msgType", "type": "uint16", "internalType": "uint16" }, - { "name": "_extraOptions", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [{ "name": "", "type": "bytes", "internalType": "bytes" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "enforcedOptions", - "inputs": [ - { "name": "eid", "type": "uint32", "internalType": "uint32" }, - { "name": "msgType", "type": "uint16", "internalType": "uint16" } - ], - "outputs": [ - { "name": "enforcedOption", "type": "bytes", "internalType": "bytes" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "owner", - "inputs": [], - "outputs": [{ "name": "", "type": "address", "internalType": "address" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "renounceOwnership", - "inputs": [], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setEnforcedOptions", - "inputs": [ - { - "name": "_enforcedOptions", - "type": "tuple[]", - "internalType": "struct EnforcedOptionParam[]", - "components": [ - { "name": "eid", "type": "uint32", "internalType": "uint32" }, - { "name": "msgType", "type": "uint16", "internalType": "uint16" }, - { "name": "options", "type": "bytes", "internalType": "bytes" } - ] - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "transferOwnership", - "inputs": [ - { "name": "newOwner", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "event", - "name": "EnforcedOptionSet", - "inputs": [ - { - "name": "_enforcedOptions", - "type": "tuple[]", - "indexed": false, - "internalType": "struct EnforcedOptionParam[]", - "components": [ - { "name": "eid", "type": "uint32", "internalType": "uint32" }, - { "name": "msgType", "type": "uint16", "internalType": "uint16" }, - { "name": "options", "type": "bytes", "internalType": "bytes" } - ] - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "OwnershipTransferred", - "inputs": [ - { - "name": "previousOwner", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "newOwner", - "type": "address", - "indexed": true, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "error", - "name": "InvalidOptions", - "inputs": [ - { "name": "options", "type": "bytes", "internalType": "bytes" } - ] - }, - { - "type": "error", - "name": "OwnableInvalidOwner", - "inputs": [ - { "name": "owner", "type": "address", "internalType": "address" } - ] - }, - { - "type": "error", - "name": "OwnableUnauthorizedAccount", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ] - } - ], - "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "methodIdentifiers": { - "combineOptions(uint32,uint16,bytes)": "bc70b354", - "enforcedOptions(uint32,uint16)": "5535d461", - "owner()": "8da5cb5b", - "renounceOwnership()": "715018a6", - "setEnforcedOptions((uint32,uint16,bytes)[])": "b98bd070", - "transferOwnership(address)": "f2fde38b" - }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"options\",\"type\":\"bytes\"}],\"name\":\"InvalidOptions\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"msgType\",\"type\":\"uint16\"},{\"internalType\":\"bytes\",\"name\":\"options\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"struct EnforcedOptionParam[]\",\"name\":\"_enforcedOptions\",\"type\":\"tuple[]\"}],\"name\":\"EnforcedOptionSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"_msgType\",\"type\":\"uint16\"},{\"internalType\":\"bytes\",\"name\":\"_extraOptions\",\"type\":\"bytes\"}],\"name\":\"combineOptions\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"msgType\",\"type\":\"uint16\"}],\"name\":\"enforcedOptions\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"enforcedOption\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"msgType\",\"type\":\"uint16\"},{\"internalType\":\"bytes\",\"name\":\"options\",\"type\":\"bytes\"}],\"internalType\":\"struct EnforcedOptionParam[]\",\"name\":\"_enforcedOptions\",\"type\":\"tuple[]\"}],\"name\":\"setEnforcedOptions\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Abstract contract implementing the IOAppOptionsType3 interface with type 3 options.\",\"errors\":{\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}]},\"kind\":\"dev\",\"methods\":{\"combineOptions(uint32,uint16,bytes)\":{\"details\":\"If there is an enforced lzReceive option: - {gasLimit: 200k, msg.value: 1 ether} AND a caller supplies a lzReceive option: {gasLimit: 100k, msg.value: 0.5 ether} - The resulting options will be {gasLimit: 300k, msg.value: 1.5 ether} when the message is executed on the remote lzReceive() function.This presence of duplicated options is handled off-chain in the verifier/executor.\",\"params\":{\"_eid\":\"The endpoint ID.\",\"_extraOptions\":\"Additional options passed by the caller.\",\"_msgType\":\"The OAPP message type.\"},\"returns\":{\"_0\":\"options The combination of caller specified options AND enforced options.\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"setEnforcedOptions((uint32,uint16,bytes)[])\":{\"details\":\"Sets the enforced options for specific endpoint and message type combinations.Only the owner/admin of the OApp can call this function.Provides a way for the OApp to enforce things like paying for PreCrime, AND/OR minimum dst lzReceive gas amounts etc.These enforced options can vary as the potential options/execution on the remote may differ as per the msgType. eg. Amount of lzReceive() gas necessary to deliver a lzCompose() message adds overhead you dont want to pay if you are only making a standard LayerZero message ie. lzReceive() WITHOUT sendCompose().\",\"params\":{\"_enforcedOptions\":\"An array of EnforcedOptionParam structures specifying enforced options.\"}},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"title\":\"OAppOptionsType3\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"combineOptions(uint32,uint16,bytes)\":{\"notice\":\"Combines options for a given endpoint and message type.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/libs/OAppOptionsType3.sol\":\"OAppOptionsType3\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppOptionsType3.sol\":{\"keccak256\":\"0x9fc08a51e9d7c9c710c4eb26f84fe77228305ad7da63fa486ff24ebf2f3bc461\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2e2eea8a93bb9fc3f629767118b362e9b4bda2443ff95eae21c6a894f3e334cc\",\"dweb:/ipfs/QmPRRNjAB4U19ke4gr3U7ZJGtdcVBxdXVBZ2BmB1riFkP7\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/libs/OAppOptionsType3.sol\":{\"keccak256\":\"0x5275636cd47e660a2fdf6c7fe9d41ff3cc866b785cc8a9d88c1b8ca983509f01\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a59dd6e3cfcc332f45a13d44585eb228588c4b9d470cbb19852df5753a4571af\",\"dweb:/ipfs/QmQJF1QU3MKhvmw42eq61u9z3bzKJJKMsEdQVYyPyYgTVS\"]},\"node_modules/@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { - "inputs": [ - { "internalType": "bytes", "name": "options", "type": "bytes" } - ], - "type": "error", - "name": "InvalidOptions" - }, - { - "inputs": [ - { "internalType": "address", "name": "owner", "type": "address" } - ], - "type": "error", - "name": "OwnableInvalidOwner" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "type": "error", - "name": "OwnableUnauthorizedAccount" - }, - { - "inputs": [ - { - "internalType": "struct EnforcedOptionParam[]", - "name": "_enforcedOptions", - "type": "tuple[]", - "components": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" }, - { - "internalType": "uint16", - "name": "msgType", - "type": "uint16" - }, - { "internalType": "bytes", "name": "options", "type": "bytes" } - ], - "indexed": false - } - ], - "type": "event", - "name": "EnforcedOptionSet", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "previousOwner", - "type": "address", - "indexed": true - }, - { - "internalType": "address", - "name": "newOwner", - "type": "address", - "indexed": true - } - ], - "type": "event", - "name": "OwnershipTransferred", - "anonymous": false - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { "internalType": "uint16", "name": "_msgType", "type": "uint16" }, - { - "internalType": "bytes", - "name": "_extraOptions", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function", - "name": "combineOptions", - "outputs": [{ "internalType": "bytes", "name": "", "type": "bytes" }] - }, - { - "inputs": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" }, - { "internalType": "uint16", "name": "msgType", "type": "uint16" } - ], - "stateMutability": "view", - "type": "function", - "name": "enforcedOptions", - "outputs": [ - { - "internalType": "bytes", - "name": "enforcedOption", - "type": "bytes" - } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "owner", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ] - }, - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "function", - "name": "renounceOwnership" - }, - { - "inputs": [ - { - "internalType": "struct EnforcedOptionParam[]", - "name": "_enforcedOptions", - "type": "tuple[]", - "components": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" }, - { - "internalType": "uint16", - "name": "msgType", - "type": "uint16" - }, - { "internalType": "bytes", "name": "options", "type": "bytes" } - ] - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setEnforcedOptions" - }, - { - "inputs": [ - { "internalType": "address", "name": "newOwner", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "transferOwnership" - } - ], - "devdoc": { - "kind": "dev", - "methods": { - "combineOptions(uint32,uint16,bytes)": { - "details": "If there is an enforced lzReceive option: - {gasLimit: 200k, msg.value: 1 ether} AND a caller supplies a lzReceive option: {gasLimit: 100k, msg.value: 0.5 ether} - The resulting options will be {gasLimit: 300k, msg.value: 1.5 ether} when the message is executed on the remote lzReceive() function.This presence of duplicated options is handled off-chain in the verifier/executor.", - "params": { - "_eid": "The endpoint ID.", - "_extraOptions": "Additional options passed by the caller.", - "_msgType": "The OAPP message type." - }, - "returns": { - "_0": "options The combination of caller specified options AND enforced options." - } - }, - "owner()": { "details": "Returns the address of the current owner." }, - "renounceOwnership()": { - "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner." - }, - "setEnforcedOptions((uint32,uint16,bytes)[])": { - "details": "Sets the enforced options for specific endpoint and message type combinations.Only the owner/admin of the OApp can call this function.Provides a way for the OApp to enforce things like paying for PreCrime, AND/OR minimum dst lzReceive gas amounts etc.These enforced options can vary as the potential options/execution on the remote may differ as per the msgType. eg. Amount of lzReceive() gas necessary to deliver a lzCompose() message adds overhead you dont want to pay if you are only making a standard LayerZero message ie. lzReceive() WITHOUT sendCompose().", - "params": { - "_enforcedOptions": "An array of EnforcedOptionParam structures specifying enforced options." - } - }, - "transferOwnership(address)": { - "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." - } - }, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": { - "combineOptions(uint32,uint16,bytes)": { - "notice": "Combines options for a given endpoint and message type." - } - }, - "version": 1 - } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/libs/OAppOptionsType3.sol": "OAppOptionsType3" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppOptionsType3.sol": { - "keccak256": "0x9fc08a51e9d7c9c710c4eb26f84fe77228305ad7da63fa486ff24ebf2f3bc461", - "urls": [ - "bzz-raw://2e2eea8a93bb9fc3f629767118b362e9b4bda2443ff95eae21c6a894f3e334cc", - "dweb:/ipfs/QmPRRNjAB4U19ke4gr3U7ZJGtdcVBxdXVBZ2BmB1riFkP7" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/libs/OAppOptionsType3.sol": { - "keccak256": "0x5275636cd47e660a2fdf6c7fe9d41ff3cc866b785cc8a9d88c1b8ca983509f01", - "urls": [ - "bzz-raw://a59dd6e3cfcc332f45a13d44585eb228588c4b9d470cbb19852df5753a4571af", - "dweb:/ipfs/QmQJF1QU3MKhvmw42eq61u9z3bzKJJKMsEdQVYyPyYgTVS" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/access/Ownable.sol": { - "keccak256": "0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb", - "urls": [ - "bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6", - "dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Context.sol": { - "keccak256": "0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2", - "urls": [ - "bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12", - "dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF" - ], - "license": "MIT" - } - }, - "version": 1 - }, - "id": 20 -} diff --git a/examples/oft-movement/out/OAppPreCrimeSimulator.sol/OAppPreCrimeSimulator.json b/examples/oft-movement/out/OAppPreCrimeSimulator.sol/OAppPreCrimeSimulator.json deleted file mode 100644 index d114e6013..000000000 --- a/examples/oft-movement/out/OAppPreCrimeSimulator.sol/OAppPreCrimeSimulator.json +++ /dev/null @@ -1,619 +0,0 @@ -{ - "abi": [ - { - "type": "function", - "name": "isPeer", - "inputs": [ - { "name": "_eid", "type": "uint32", "internalType": "uint32" }, - { "name": "_peer", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "lzReceiveAndRevert", - "inputs": [ - { - "name": "_packets", - "type": "tuple[]", - "internalType": "struct InboundPacket[]", - "components": [ - { - "name": "origin", - "type": "tuple", - "internalType": "struct Origin", - "components": [ - { - "name": "srcEid", - "type": "uint32", - "internalType": "uint32" - }, - { - "name": "sender", - "type": "bytes32", - "internalType": "bytes32" - }, - { "name": "nonce", "type": "uint64", "internalType": "uint64" } - ] - }, - { "name": "dstEid", "type": "uint32", "internalType": "uint32" }, - { - "name": "receiver", - "type": "address", - "internalType": "address" - }, - { "name": "guid", "type": "bytes32", "internalType": "bytes32" }, - { "name": "value", "type": "uint256", "internalType": "uint256" }, - { - "name": "executor", - "type": "address", - "internalType": "address" - }, - { "name": "message", "type": "bytes", "internalType": "bytes" }, - { "name": "extraData", "type": "bytes", "internalType": "bytes" } - ] - } - ], - "outputs": [], - "stateMutability": "payable" - }, - { - "type": "function", - "name": "lzReceiveSimulate", - "inputs": [ - { - "name": "_origin", - "type": "tuple", - "internalType": "struct Origin", - "components": [ - { "name": "srcEid", "type": "uint32", "internalType": "uint32" }, - { "name": "sender", "type": "bytes32", "internalType": "bytes32" }, - { "name": "nonce", "type": "uint64", "internalType": "uint64" } - ] - }, - { "name": "_guid", "type": "bytes32", "internalType": "bytes32" }, - { "name": "_message", "type": "bytes", "internalType": "bytes" }, - { "name": "_executor", "type": "address", "internalType": "address" }, - { "name": "_extraData", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [], - "stateMutability": "payable" - }, - { - "type": "function", - "name": "oApp", - "inputs": [], - "outputs": [{ "name": "", "type": "address", "internalType": "address" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "owner", - "inputs": [], - "outputs": [{ "name": "", "type": "address", "internalType": "address" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "preCrime", - "inputs": [], - "outputs": [{ "name": "", "type": "address", "internalType": "address" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "renounceOwnership", - "inputs": [], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setPreCrime", - "inputs": [ - { "name": "_preCrime", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "transferOwnership", - "inputs": [ - { "name": "newOwner", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "event", - "name": "OwnershipTransferred", - "inputs": [ - { - "name": "previousOwner", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "newOwner", - "type": "address", - "indexed": true, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "PreCrimeSet", - "inputs": [ - { - "name": "preCrimeAddress", - "type": "address", - "indexed": false, - "internalType": "address" - } - ], - "anonymous": false - }, - { "type": "error", "name": "OnlySelf", "inputs": [] }, - { - "type": "error", - "name": "OwnableInvalidOwner", - "inputs": [ - { "name": "owner", "type": "address", "internalType": "address" } - ] - }, - { - "type": "error", - "name": "OwnableUnauthorizedAccount", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ] - }, - { - "type": "error", - "name": "SimulationResult", - "inputs": [{ "name": "result", "type": "bytes", "internalType": "bytes" }] - } - ], - "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "methodIdentifiers": { - "isPeer(uint32,bytes32)": "5a0dfe4d", - "lzReceiveAndRevert(((uint32,bytes32,uint64),uint32,address,bytes32,uint256,address,bytes,bytes)[])": "bd815db0", - "lzReceiveSimulate((uint32,bytes32,uint64),bytes32,bytes,address,bytes)": "d045a0dc", - "oApp()": "52ae2879", - "owner()": "8da5cb5b", - "preCrime()": "b731ea0a", - "renounceOwnership()": "715018a6", - "setPreCrime(address)": "d4243885", - "transferOwnership(address)": "f2fde38b" - }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"OnlySelf\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"name\":\"SimulationResult\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"preCrimeAddress\",\"type\":\"address\"}],\"name\":\"PreCrimeSet\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_peer\",\"type\":\"bytes32\"}],\"name\":\"isPeer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"origin\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"executor\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"internalType\":\"struct InboundPacket[]\",\"name\":\"_packets\",\"type\":\"tuple[]\"}],\"name\":\"lzReceiveAndRevert\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"_origin\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"_guid\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"_executor\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"lzReceiveSimulate\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"oApp\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"preCrime\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_preCrime\",\"type\":\"address\"}],\"name\":\"setPreCrime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Abstract contract serving as the base for preCrime simulation functionality in an OApp.\",\"errors\":{\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}]},\"events\":{\"PreCrimeSet(address)\":{\"details\":\"Emitted when the preCrime contract address is set.\",\"params\":{\"preCrimeAddress\":\"The address of the preCrime contract.\"}}},\"kind\":\"dev\",\"methods\":{\"isPeer(uint32,bytes32)\":{\"details\":\"checks if the specified peer is considered 'trusted' by the OApp.\",\"params\":{\"_eid\":\"The endpoint Id to check.\",\"_peer\":\"The peer to check.\"},\"returns\":{\"_0\":\"Whether the peer passed is considered 'trusted' by the OApp.\"}},\"lzReceiveAndRevert(((uint32,bytes32,uint64),uint32,address,bytes32,uint256,address,bytes,bytes)[])\":{\"details\":\"Interface for pre-crime simulations. Always reverts at the end with the simulation results.WARNING: MUST revert at the end with the simulation results.Gives the preCrime implementation the ability to mock sending packets to the lzReceive function, WITHOUT actually executing them.\",\"params\":{\"_packets\":\"An array of InboundPacket objects representing received packets to be delivered.\"}},\"lzReceiveSimulate((uint32,bytes32,uint64),bytes32,bytes,address,bytes)\":{\"details\":\"Is effectively an internal function because msg.sender must be address(this). Allows resetting the call stack for 'internal' calls.\",\"params\":{\"_executor\":\"The executor address for the packet.\",\"_extraData\":\"Additional data for the packet.\",\"_guid\":\"The unique identifier of the packet.\",\"_message\":\"The message payload of the packet.\",\"_origin\":\"The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message.\"}},\"oApp()\":{\"details\":\"Retrieves the address of the OApp contract.The simulator contract is the base contract for the OApp by default.If the simulator is a separate contract, override this function.\",\"returns\":{\"_0\":\"The address of the OApp contract.\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"setPreCrime(address)\":{\"details\":\"Sets the preCrime contract address.\",\"params\":{\"_preCrime\":\"The address of the preCrime contract.\"}},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"stateVariables\":{\"preCrime\":{\"details\":\"Retrieves the address of the preCrime contract implementation.\",\"return\":\"The address of the preCrime contract.\",\"returns\":{\"_0\":\"The address of the preCrime contract.\"}}},\"title\":\"OAppPreCrimeSimulator\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/oapp-evm/contracts/precrime/OAppPreCrimeSimulator.sol\":\"OAppPreCrimeSimulator\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\":{\"keccak256\":\"0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bacc29fd3866af71e59cb0bdc1cf82c882a4a7f4e2652fd413c9f12649762083\",\"dweb:/ipfs/QmZh2toLnrQDWaNYhS5K4NoW7Vxd2GdZx9KA77vKEDLAqs\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol\":{\"keccak256\":\"0x5cf5f24751b4e3ea1c9c5ded07cedfdfd62566b6daaffcc0144733859c9dba0c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cae7e35007a714f007ea08045ef7c0cfa6c91fd2425b5028b2d49abad357a5f0\",\"dweb:/ipfs/QmcDBs5tsiyB35b8cwzWQWNnpkawb3uuHRaqE77Hxm2tve\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol\":{\"keccak256\":\"0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d8ff6a8a89297fa127f86b54e0db3eba1d6a6eeb4f6398d3c84d569665ac8f1b\",\"dweb:/ipfs/QmVSwhw6xFDrLRAX4RXaCM47yBaBtac4wf36DYEq6KCTvT\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol\":{\"keccak256\":\"0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7e1b245d58221d16d8b5e0f01ef3e289a24a7df1ace3b94239e4d5b954ad5927\",\"dweb:/ipfs/Qmappsgp7PCY9rSSNE9Cdn4BTRX591WfCSEgq2HxhA3z6S\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol\":{\"keccak256\":\"0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b18b23a1643fc6636c4ad9d9023e2e6ca2d3c2a4a046482d4655bff09950598d\",\"dweb:/ipfs/Qma6G5SqiovwrMPfgqTrRngK1HWW373Wkf9c6YP2NhXpPk\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol\":{\"keccak256\":\"0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5173fc9143bea314b159ca5a9adb5626659ef763bc598e27de5fa46efe3291a6\",\"dweb:/ipfs/QmSLFeMFPmVeGxT4sxRPW28ictjAS22M8rLeYRu9TXkA6D\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol\":{\"keccak256\":\"0xf1c07bc61e7b1dce195ed12d50f87980fbf2d63cac1326fd28287f55fe0ba625\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://060f10ff7afc33c1c2f2b4b5ba29231fd3c943146488084d0e4ab99fce991d97\",\"dweb:/ipfs/QmaSsefAqqEqtf8FgFUmDYMwTsAty3X1pqDb6SiFvry6B3\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol\":{\"keccak256\":\"0x2ebbcaaab3554edcd41b581f1a72ac1806afbfb8047d0d47ff098f9af30d6deb\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://2d4b2cf5c3b16dc76c6767f285b57c0af917972327b2be3f7cba5825402f5fc1\",\"dweb:/ipfs/QmQQWiHE2jKEDbjzGutSoZwtApSXYfLqZt5CxEpFj8xyvT\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol\":{\"keccak256\":\"0xc84cf1bf785977fe1fbe7566eef902c2db68d0e163813ebe6c34921754802680\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://de686666fc16fa432d4208d85cec87dc952faf3e481b683b9adf4b4610db4b09\",\"dweb:/ipfs/QmdmQeopzmxqRzi9DNB4EJDrYUXFfD7fUhnGhSni4QejUW\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/precrime/OAppPreCrimeSimulator.sol\":{\"keccak256\":\"0x205a0abfd8b3c9af2740769f251381b84999b8e9347f3cd50de3ef8290a17750\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d9778d7d5da941af2029410b6ac212f915ea1785573ae2865b0ed8f779fcca82\",\"dweb:/ipfs/QmNkVEkfecvgubgnMuaT5fEfSExd95vz8DQHhpZtMrVRjH\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IOAppPreCrimeSimulator.sol\":{\"keccak256\":\"0x5d24db150949ea8e6437178e65a942e8c8b7f332e5daf32750f56b23b35b5bb2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1b1dcea0267234654126f926a1b405743606d7b5e49185b621afb7bd94d18b9a\",\"dweb:/ipfs/QmZ9BXQmbWJcrhHKuBs4yhNtbCV5WUpUY3AXSX7rkWwX6y\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IPreCrime.sol\":{\"keccak256\":\"0xc8d869f27ef8ceb2e13fdf6a70682fd4dee3f90c4924eb8e125bc1e66cb6af84\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://66bf49d59c14832ea0ddddcd12d512d4f9bd0fd254a1368442587bf3e77fe73e\",\"dweb:/ipfs/QmYUAvsyuUPiSYjbL4zVo6ZtiRSLCUPDvCesqgdZWbSGDg\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/precrime/libs/Packet.sol\":{\"keccak256\":\"0xcb2fb1c5b2eb3731de78b479b9c2ab3bba326fe0b0b3a008590f18e881e457a6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f70724c61d226743c2bd8ba6c09758805e4339780978949ce5b333c106be4edc\",\"dweb:/ipfs/QmX5rV9K1N7RgTz9xtf8CDG8SrYiitGAzFh9ec2tbnEec4\"]},\"node_modules/@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { "inputs": [], "type": "error", "name": "OnlySelf" }, - { - "inputs": [ - { "internalType": "address", "name": "owner", "type": "address" } - ], - "type": "error", - "name": "OwnableInvalidOwner" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "type": "error", - "name": "OwnableUnauthorizedAccount" - }, - { - "inputs": [ - { "internalType": "bytes", "name": "result", "type": "bytes" } - ], - "type": "error", - "name": "SimulationResult" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "previousOwner", - "type": "address", - "indexed": true - }, - { - "internalType": "address", - "name": "newOwner", - "type": "address", - "indexed": true - } - ], - "type": "event", - "name": "OwnershipTransferred", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "preCrimeAddress", - "type": "address", - "indexed": false - } - ], - "type": "event", - "name": "PreCrimeSet", - "anonymous": false - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { "internalType": "bytes32", "name": "_peer", "type": "bytes32" } - ], - "stateMutability": "view", - "type": "function", - "name": "isPeer", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { - "internalType": "struct InboundPacket[]", - "name": "_packets", - "type": "tuple[]", - "components": [ - { - "internalType": "struct Origin", - "name": "origin", - "type": "tuple", - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - } - ] - }, - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "guid", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "address", - "name": "executor", - "type": "address" - }, - { "internalType": "bytes", "name": "message", "type": "bytes" }, - { - "internalType": "bytes", - "name": "extraData", - "type": "bytes" - } - ] - } - ], - "stateMutability": "payable", - "type": "function", - "name": "lzReceiveAndRevert" - }, - { - "inputs": [ - { - "internalType": "struct Origin", - "name": "_origin", - "type": "tuple", - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { "internalType": "uint64", "name": "nonce", "type": "uint64" } - ] - }, - { "internalType": "bytes32", "name": "_guid", "type": "bytes32" }, - { "internalType": "bytes", "name": "_message", "type": "bytes" }, - { - "internalType": "address", - "name": "_executor", - "type": "address" - }, - { "internalType": "bytes", "name": "_extraData", "type": "bytes" } - ], - "stateMutability": "payable", - "type": "function", - "name": "lzReceiveSimulate" - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "oApp", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "owner", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "preCrime", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ] - }, - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "function", - "name": "renounceOwnership" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_preCrime", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setPreCrime" - }, - { - "inputs": [ - { "internalType": "address", "name": "newOwner", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "transferOwnership" - } - ], - "devdoc": { - "kind": "dev", - "methods": { - "isPeer(uint32,bytes32)": { - "details": "checks if the specified peer is considered 'trusted' by the OApp.", - "params": { - "_eid": "The endpoint Id to check.", - "_peer": "The peer to check." - }, - "returns": { - "_0": "Whether the peer passed is considered 'trusted' by the OApp." - } - }, - "lzReceiveAndRevert(((uint32,bytes32,uint64),uint32,address,bytes32,uint256,address,bytes,bytes)[])": { - "details": "Interface for pre-crime simulations. Always reverts at the end with the simulation results.WARNING: MUST revert at the end with the simulation results.Gives the preCrime implementation the ability to mock sending packets to the lzReceive function, WITHOUT actually executing them.", - "params": { - "_packets": "An array of InboundPacket objects representing received packets to be delivered." - } - }, - "lzReceiveSimulate((uint32,bytes32,uint64),bytes32,bytes,address,bytes)": { - "details": "Is effectively an internal function because msg.sender must be address(this). Allows resetting the call stack for 'internal' calls.", - "params": { - "_executor": "The executor address for the packet.", - "_extraData": "Additional data for the packet.", - "_guid": "The unique identifier of the packet.", - "_message": "The message payload of the packet.", - "_origin": "The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message." - } - }, - "oApp()": { - "details": "Retrieves the address of the OApp contract.The simulator contract is the base contract for the OApp by default.If the simulator is a separate contract, override this function.", - "returns": { "_0": "The address of the OApp contract." } - }, - "owner()": { "details": "Returns the address of the current owner." }, - "renounceOwnership()": { - "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner." - }, - "setPreCrime(address)": { - "details": "Sets the preCrime contract address.", - "params": { "_preCrime": "The address of the preCrime contract." } - }, - "transferOwnership(address)": { - "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." - } - }, - "version": 1 - }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/oapp-evm/contracts/precrime/OAppPreCrimeSimulator.sol": "OAppPreCrimeSimulator" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol": { - "keccak256": "0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3", - "urls": [ - "bzz-raw://bacc29fd3866af71e59cb0bdc1cf82c882a4a7f4e2652fd413c9f12649762083", - "dweb:/ipfs/QmZh2toLnrQDWaNYhS5K4NoW7Vxd2GdZx9KA77vKEDLAqs" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol": { - "keccak256": "0x5cf5f24751b4e3ea1c9c5ded07cedfdfd62566b6daaffcc0144733859c9dba0c", - "urls": [ - "bzz-raw://cae7e35007a714f007ea08045ef7c0cfa6c91fd2425b5028b2d49abad357a5f0", - "dweb:/ipfs/QmcDBs5tsiyB35b8cwzWQWNnpkawb3uuHRaqE77Hxm2tve" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol": { - "keccak256": "0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc", - "urls": [ - "bzz-raw://d8ff6a8a89297fa127f86b54e0db3eba1d6a6eeb4f6398d3c84d569665ac8f1b", - "dweb:/ipfs/QmVSwhw6xFDrLRAX4RXaCM47yBaBtac4wf36DYEq6KCTvT" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol": { - "keccak256": "0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972", - "urls": [ - "bzz-raw://7e1b245d58221d16d8b5e0f01ef3e289a24a7df1ace3b94239e4d5b954ad5927", - "dweb:/ipfs/Qmappsgp7PCY9rSSNE9Cdn4BTRX591WfCSEgq2HxhA3z6S" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol": { - "keccak256": "0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901", - "urls": [ - "bzz-raw://b18b23a1643fc6636c4ad9d9023e2e6ca2d3c2a4a046482d4655bff09950598d", - "dweb:/ipfs/Qma6G5SqiovwrMPfgqTrRngK1HWW373Wkf9c6YP2NhXpPk" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol": { - "keccak256": "0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e", - "urls": [ - "bzz-raw://5173fc9143bea314b159ca5a9adb5626659ef763bc598e27de5fa46efe3291a6", - "dweb:/ipfs/QmSLFeMFPmVeGxT4sxRPW28ictjAS22M8rLeYRu9TXkA6D" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol": { - "keccak256": "0xf1c07bc61e7b1dce195ed12d50f87980fbf2d63cac1326fd28287f55fe0ba625", - "urls": [ - "bzz-raw://060f10ff7afc33c1c2f2b4b5ba29231fd3c943146488084d0e4ab99fce991d97", - "dweb:/ipfs/QmaSsefAqqEqtf8FgFUmDYMwTsAty3X1pqDb6SiFvry6B3" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol": { - "keccak256": "0x2ebbcaaab3554edcd41b581f1a72ac1806afbfb8047d0d47ff098f9af30d6deb", - "urls": [ - "bzz-raw://2d4b2cf5c3b16dc76c6767f285b57c0af917972327b2be3f7cba5825402f5fc1", - "dweb:/ipfs/QmQQWiHE2jKEDbjzGutSoZwtApSXYfLqZt5CxEpFj8xyvT" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol": { - "keccak256": "0xc84cf1bf785977fe1fbe7566eef902c2db68d0e163813ebe6c34921754802680", - "urls": [ - "bzz-raw://de686666fc16fa432d4208d85cec87dc952faf3e481b683b9adf4b4610db4b09", - "dweb:/ipfs/QmdmQeopzmxqRzi9DNB4EJDrYUXFfD7fUhnGhSni4QejUW" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/precrime/OAppPreCrimeSimulator.sol": { - "keccak256": "0x205a0abfd8b3c9af2740769f251381b84999b8e9347f3cd50de3ef8290a17750", - "urls": [ - "bzz-raw://d9778d7d5da941af2029410b6ac212f915ea1785573ae2865b0ed8f779fcca82", - "dweb:/ipfs/QmNkVEkfecvgubgnMuaT5fEfSExd95vz8DQHhpZtMrVRjH" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IOAppPreCrimeSimulator.sol": { - "keccak256": "0x5d24db150949ea8e6437178e65a942e8c8b7f332e5daf32750f56b23b35b5bb2", - "urls": [ - "bzz-raw://1b1dcea0267234654126f926a1b405743606d7b5e49185b621afb7bd94d18b9a", - "dweb:/ipfs/QmZ9BXQmbWJcrhHKuBs4yhNtbCV5WUpUY3AXSX7rkWwX6y" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IPreCrime.sol": { - "keccak256": "0xc8d869f27ef8ceb2e13fdf6a70682fd4dee3f90c4924eb8e125bc1e66cb6af84", - "urls": [ - "bzz-raw://66bf49d59c14832ea0ddddcd12d512d4f9bd0fd254a1368442587bf3e77fe73e", - "dweb:/ipfs/QmYUAvsyuUPiSYjbL4zVo6ZtiRSLCUPDvCesqgdZWbSGDg" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/precrime/libs/Packet.sol": { - "keccak256": "0xcb2fb1c5b2eb3731de78b479b9c2ab3bba326fe0b0b3a008590f18e881e457a6", - "urls": [ - "bzz-raw://f70724c61d226743c2bd8ba6c09758805e4339780978949ce5b333c106be4edc", - "dweb:/ipfs/QmX5rV9K1N7RgTz9xtf8CDG8SrYiitGAzFh9ec2tbnEec4" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/access/Ownable.sol": { - "keccak256": "0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb", - "urls": [ - "bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6", - "dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Context.sol": { - "keccak256": "0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2", - "urls": [ - "bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12", - "dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol": { - "keccak256": "0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8", - "urls": [ - "bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621", - "dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL" - ], - "license": "MIT" - } - }, - "version": 1 - }, - "id": 21 -} diff --git a/examples/oft-movement/out/OAppReceiver.sol/OAppReceiver.json b/examples/oft-movement/out/OAppReceiver.sol/OAppReceiver.json deleted file mode 100644 index d30e97081..000000000 --- a/examples/oft-movement/out/OAppReceiver.sol/OAppReceiver.json +++ /dev/null @@ -1,719 +0,0 @@ -{ - "abi": [ - { - "type": "function", - "name": "allowInitializePath", - "inputs": [ - { - "name": "origin", - "type": "tuple", - "internalType": "struct Origin", - "components": [ - { "name": "srcEid", "type": "uint32", "internalType": "uint32" }, - { "name": "sender", "type": "bytes32", "internalType": "bytes32" }, - { "name": "nonce", "type": "uint64", "internalType": "uint64" } - ] - } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "endpoint", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "contract ILayerZeroEndpointV2" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "isComposeMsgSender", - "inputs": [ - { - "name": "", - "type": "tuple", - "internalType": "struct Origin", - "components": [ - { "name": "srcEid", "type": "uint32", "internalType": "uint32" }, - { "name": "sender", "type": "bytes32", "internalType": "bytes32" }, - { "name": "nonce", "type": "uint64", "internalType": "uint64" } - ] - }, - { "name": "", "type": "bytes", "internalType": "bytes" }, - { "name": "_sender", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "lzReceive", - "inputs": [ - { - "name": "_origin", - "type": "tuple", - "internalType": "struct Origin", - "components": [ - { "name": "srcEid", "type": "uint32", "internalType": "uint32" }, - { "name": "sender", "type": "bytes32", "internalType": "bytes32" }, - { "name": "nonce", "type": "uint64", "internalType": "uint64" } - ] - }, - { "name": "_guid", "type": "bytes32", "internalType": "bytes32" }, - { "name": "_message", "type": "bytes", "internalType": "bytes" }, - { "name": "_executor", "type": "address", "internalType": "address" }, - { "name": "_extraData", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [], - "stateMutability": "payable" - }, - { - "type": "function", - "name": "nextNonce", - "inputs": [ - { "name": "", "type": "uint32", "internalType": "uint32" }, - { "name": "", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [ - { "name": "nonce", "type": "uint64", "internalType": "uint64" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "oAppVersion", - "inputs": [], - "outputs": [ - { "name": "senderVersion", "type": "uint64", "internalType": "uint64" }, - { - "name": "receiverVersion", - "type": "uint64", - "internalType": "uint64" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "owner", - "inputs": [], - "outputs": [{ "name": "", "type": "address", "internalType": "address" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "peers", - "inputs": [{ "name": "eid", "type": "uint32", "internalType": "uint32" }], - "outputs": [ - { "name": "peer", "type": "bytes32", "internalType": "bytes32" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "renounceOwnership", - "inputs": [], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setDelegate", - "inputs": [ - { "name": "_delegate", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setPeer", - "inputs": [ - { "name": "_eid", "type": "uint32", "internalType": "uint32" }, - { "name": "_peer", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "transferOwnership", - "inputs": [ - { "name": "newOwner", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "event", - "name": "OwnershipTransferred", - "inputs": [ - { - "name": "previousOwner", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "newOwner", - "type": "address", - "indexed": true, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "PeerSet", - "inputs": [ - { - "name": "eid", - "type": "uint32", - "indexed": false, - "internalType": "uint32" - }, - { - "name": "peer", - "type": "bytes32", - "indexed": false, - "internalType": "bytes32" - } - ], - "anonymous": false - }, - { "type": "error", "name": "InvalidDelegate", "inputs": [] }, - { "type": "error", "name": "InvalidEndpointCall", "inputs": [] }, - { - "type": "error", - "name": "NoPeer", - "inputs": [{ "name": "eid", "type": "uint32", "internalType": "uint32" }] - }, - { - "type": "error", - "name": "OnlyEndpoint", - "inputs": [ - { "name": "addr", "type": "address", "internalType": "address" } - ] - }, - { - "type": "error", - "name": "OnlyPeer", - "inputs": [ - { "name": "eid", "type": "uint32", "internalType": "uint32" }, - { "name": "sender", "type": "bytes32", "internalType": "bytes32" } - ] - }, - { - "type": "error", - "name": "OwnableInvalidOwner", - "inputs": [ - { "name": "owner", "type": "address", "internalType": "address" } - ] - }, - { - "type": "error", - "name": "OwnableUnauthorizedAccount", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ] - } - ], - "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "methodIdentifiers": { - "allowInitializePath((uint32,bytes32,uint64))": "ff7bd03d", - "endpoint()": "5e280f11", - "isComposeMsgSender((uint32,bytes32,uint64),bytes,address)": "82413eac", - "lzReceive((uint32,bytes32,uint64),bytes32,bytes,address,bytes)": "13137d65", - "nextNonce(uint32,bytes32)": "7d25a05e", - "oAppVersion()": "17442b70", - "owner()": "8da5cb5b", - "peers(uint32)": "bb0b6a53", - "renounceOwnership()": "715018a6", - "setDelegate(address)": "ca5eb5e1", - "setPeer(uint32,bytes32)": "3400288b", - "transferOwnership(address)": "f2fde38b" - }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"InvalidDelegate\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidEndpointCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"}],\"name\":\"NoPeer\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"OnlyEndpoint\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"}],\"name\":\"OnlyPeer\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"peer\",\"type\":\"bytes32\"}],\"name\":\"PeerSet\",\"type\":\"event\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"origin\",\"type\":\"tuple\"}],\"name\":\"allowInitializePath\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"endpoint\",\"outputs\":[{\"internalType\":\"contract ILayerZeroEndpointV2\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"}],\"name\":\"isComposeMsgSender\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"_origin\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"_guid\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"_executor\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"lzReceive\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"nextNonce\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"oAppVersion\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"senderVersion\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"receiverVersion\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"}],\"name\":\"peers\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"peer\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_delegate\",\"type\":\"address\"}],\"name\":\"setDelegate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_peer\",\"type\":\"bytes32\"}],\"name\":\"setPeer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Abstract contract implementing the ILayerZeroReceiver interface and extending OAppCore for OApp receivers.\",\"errors\":{\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}]},\"kind\":\"dev\",\"methods\":{\"allowInitializePath((uint32,bytes32,uint64))\":{\"details\":\"This indicates to the endpoint that the OApp has enabled msgs for this particular path to be received.This defaults to assuming if a peer has been set, its initialized. Can be overridden by the OApp if there is other logic to determine this.\",\"params\":{\"origin\":\"The origin information containing the source endpoint and sender address.\"},\"returns\":{\"_0\":\"Whether the path has been initialized.\"}},\"isComposeMsgSender((uint32,bytes32,uint64),bytes,address)\":{\"details\":\"_origin The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message._message The lzReceive payload.Applications can optionally choose to implement separate composeMsg senders that are NOT the bridging layer.The default sender IS the OAppReceiver implementer.\",\"params\":{\"_sender\":\"The sender address.\"},\"returns\":{\"_0\":\"isSender Is a valid sender.\"}},\"lzReceive((uint32,bytes32,uint64),bytes32,bytes,address,bytes)\":{\"details\":\"Entry point for receiving messages or packets from the endpoint.Entry point for receiving msg/packet from the LayerZero endpoint.\",\"params\":{\"_executor\":\"The address of the executor for the received message.\",\"_extraData\":\"Additional arbitrary data provided by the corresponding executor.\",\"_guid\":\"The unique identifier for the received LayerZero message.\",\"_message\":\"The payload of the received message.\",\"_origin\":\"The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message.\"}},\"nextNonce(uint32,bytes32)\":{\"details\":\"_srcEid The source endpoint ID._sender The sender address.The path nonce starts from 1. If 0 is returned it means that there is NO nonce ordered enforcement.Is required by the off-chain executor to determine the OApp expects msg execution is ordered.This is also enforced by the OApp.By default this is NOT enabled. ie. nextNonce is hardcoded to return 0.\",\"returns\":{\"nonce\":\"The next nonce.\"}},\"oAppVersion()\":{\"details\":\"Providing 0 as the default for OAppSender version. Indicates that the OAppSender is not implemented. ie. this is a RECEIVE only OApp.If the OApp uses both OAppSender and OAppReceiver, then this needs to be override returning the correct versions.\",\"returns\":{\"receiverVersion\":\"The version of the OAppReceiver.sol contract.\",\"senderVersion\":\"The version of the OAppSender.sol contract.\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"setDelegate(address)\":{\"details\":\"Only the owner/admin of the OApp can call this function.Provides the ability for a delegate to set configs, on behalf of the OApp, directly on the Endpoint contract.\",\"params\":{\"_delegate\":\"The address of the delegate to be set.\"}},\"setPeer(uint32,bytes32)\":{\"details\":\"Only the owner/admin of the OApp can call this function.Indicates that the peer is trusted to send LayerZero messages to this OApp.Set this to bytes32(0) to remove the peer address.Peer is a bytes32 to accommodate non-evm chains.\",\"params\":{\"_eid\":\"The endpoint ID.\",\"_peer\":\"The address of the peer to be associated with the corresponding endpoint.\"}},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"title\":\"OAppReceiver\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"allowInitializePath((uint32,bytes32,uint64))\":{\"notice\":\"Checks if the path initialization is allowed based on the provided origin.\"},\"endpoint()\":{\"notice\":\"Retrieves the LayerZero endpoint associated with the OApp.\"},\"isComposeMsgSender((uint32,bytes32,uint64),bytes,address)\":{\"notice\":\"Indicates whether an address is an approved composeMsg sender to the Endpoint.\"},\"nextNonce(uint32,bytes32)\":{\"notice\":\"Retrieves the next nonce for a given source endpoint and sender address.\"},\"oAppVersion()\":{\"notice\":\"Retrieves the OApp version information.\"},\"peers(uint32)\":{\"notice\":\"Retrieves the peer (OApp) associated with a corresponding endpoint.\"},\"setDelegate(address)\":{\"notice\":\"Sets the delegate address for the OApp.\"},\"setPeer(uint32,bytes32)\":{\"notice\":\"Sets the peer address (OApp instance) for a corresponding endpoint.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppReceiver.sol\":\"OAppReceiver\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\":{\"keccak256\":\"0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bacc29fd3866af71e59cb0bdc1cf82c882a4a7f4e2652fd413c9f12649762083\",\"dweb:/ipfs/QmZh2toLnrQDWaNYhS5K4NoW7Vxd2GdZx9KA77vKEDLAqs\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol\":{\"keccak256\":\"0x9641abba8d53b08bb517d1b74801dd15ea7b84d77a6719085bd96c8ea94e3ca0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://77415ae0820859e0faf3fabdce683cce9fa03ea026ae0f6fe081ef1c9205f933\",\"dweb:/ipfs/QmXd7APqoCunQ2jYy73AHvi5gsZofLpm3SzM6FPo7zRPfL\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol\":{\"keccak256\":\"0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d8ff6a8a89297fa127f86b54e0db3eba1d6a6eeb4f6398d3c84d569665ac8f1b\",\"dweb:/ipfs/QmVSwhw6xFDrLRAX4RXaCM47yBaBtac4wf36DYEq6KCTvT\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol\":{\"keccak256\":\"0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7e1b245d58221d16d8b5e0f01ef3e289a24a7df1ace3b94239e4d5b954ad5927\",\"dweb:/ipfs/Qmappsgp7PCY9rSSNE9Cdn4BTRX591WfCSEgq2HxhA3z6S\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol\":{\"keccak256\":\"0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b18b23a1643fc6636c4ad9d9023e2e6ca2d3c2a4a046482d4655bff09950598d\",\"dweb:/ipfs/Qma6G5SqiovwrMPfgqTrRngK1HWW373Wkf9c6YP2NhXpPk\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol\":{\"keccak256\":\"0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5173fc9143bea314b159ca5a9adb5626659ef763bc598e27de5fa46efe3291a6\",\"dweb:/ipfs/QmSLFeMFPmVeGxT4sxRPW28ictjAS22M8rLeYRu9TXkA6D\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppCore.sol\":{\"keccak256\":\"0x13a9c2d1d2c1f086b8624f2e84c4a4702212daae36f701d92bb915b535cbe4cc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://606515dd9193551bd2c94ac8c304f3776fafcc70e544ebf441f334658b2fd5f0\",\"dweb:/ipfs/QmZ88ey7DdZqV5taAoebabvszX5kdPMSrQCAmTteVdDtcH\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppReceiver.sol\":{\"keccak256\":\"0x0174e9f1ec4cefe4b5adc26c392269c699b9ff75965364e5b7264426a462c70b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cd12bb4fe5802c53911b9a0081a2ea10639b1f99925d1e5c1b1421d1bdc17075\",\"dweb:/ipfs/QmZonarwbKiEwQ8qoASKur2bbMjusdy9pqK9RCR4P1YPtc\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppCore.sol\":{\"keccak256\":\"0x40e49f2de74506e1da5dcaed53a39853f691647f4ceb0fccc8f49a68d3f47c58\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4a1deb2a6a3eb1fb83936c9578469142bff470295f403d7d07d955a76be3adbd\",\"dweb:/ipfs/QmS9bjSfBaE4YhQ1PCQ1TknbEPbNfRXzBK9E7SaPGyiZEv\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppReceiver.sol\":{\"keccak256\":\"0xd26135185e19b3732746d4a9e2923e896f28dec8664bab161faea2ee26fcdc3d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c236dfe386b508be33c3a1a74ae1d4fd64b8c77ae207767e9dbed0f2429518a2\",\"dweb:/ipfs/QmXVbZJjfryTRti98uN3BMh5qh4K7NuEs1RSCoBjRoYd4q\"]},\"node_modules/@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { "inputs": [], "type": "error", "name": "InvalidDelegate" }, - { "inputs": [], "type": "error", "name": "InvalidEndpointCall" }, - { - "inputs": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" } - ], - "type": "error", - "name": "NoPeer" - }, - { - "inputs": [ - { "internalType": "address", "name": "addr", "type": "address" } - ], - "type": "error", - "name": "OnlyEndpoint" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" }, - { "internalType": "bytes32", "name": "sender", "type": "bytes32" } - ], - "type": "error", - "name": "OnlyPeer" - }, - { - "inputs": [ - { "internalType": "address", "name": "owner", "type": "address" } - ], - "type": "error", - "name": "OwnableInvalidOwner" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "type": "error", - "name": "OwnableUnauthorizedAccount" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "previousOwner", - "type": "address", - "indexed": true - }, - { - "internalType": "address", - "name": "newOwner", - "type": "address", - "indexed": true - } - ], - "type": "event", - "name": "OwnershipTransferred", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "eid", - "type": "uint32", - "indexed": false - }, - { - "internalType": "bytes32", - "name": "peer", - "type": "bytes32", - "indexed": false - } - ], - "type": "event", - "name": "PeerSet", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "struct Origin", - "name": "origin", - "type": "tuple", - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { "internalType": "uint64", "name": "nonce", "type": "uint64" } - ] - } - ], - "stateMutability": "view", - "type": "function", - "name": "allowInitializePath", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "endpoint", - "outputs": [ - { - "internalType": "contract ILayerZeroEndpointV2", - "name": "", - "type": "address" - } - ] - }, - { - "inputs": [ - { - "internalType": "struct Origin", - "name": "", - "type": "tuple", - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { "internalType": "uint64", "name": "nonce", "type": "uint64" } - ] - }, - { "internalType": "bytes", "name": "", "type": "bytes" }, - { "internalType": "address", "name": "_sender", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "isComposeMsgSender", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { - "internalType": "struct Origin", - "name": "_origin", - "type": "tuple", - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { "internalType": "uint64", "name": "nonce", "type": "uint64" } - ] - }, - { "internalType": "bytes32", "name": "_guid", "type": "bytes32" }, - { "internalType": "bytes", "name": "_message", "type": "bytes" }, - { - "internalType": "address", - "name": "_executor", - "type": "address" - }, - { "internalType": "bytes", "name": "_extraData", "type": "bytes" } - ], - "stateMutability": "payable", - "type": "function", - "name": "lzReceive" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "", "type": "uint32" }, - { "internalType": "bytes32", "name": "", "type": "bytes32" } - ], - "stateMutability": "view", - "type": "function", - "name": "nextNonce", - "outputs": [ - { "internalType": "uint64", "name": "nonce", "type": "uint64" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "oAppVersion", - "outputs": [ - { - "internalType": "uint64", - "name": "senderVersion", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "receiverVersion", - "type": "uint64" - } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "owner", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ] - }, - { - "inputs": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" } - ], - "stateMutability": "view", - "type": "function", - "name": "peers", - "outputs": [ - { "internalType": "bytes32", "name": "peer", "type": "bytes32" } - ] - }, - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "function", - "name": "renounceOwnership" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_delegate", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setDelegate" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { "internalType": "bytes32", "name": "_peer", "type": "bytes32" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setPeer" - }, - { - "inputs": [ - { "internalType": "address", "name": "newOwner", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "transferOwnership" - } - ], - "devdoc": { - "kind": "dev", - "methods": { - "allowInitializePath((uint32,bytes32,uint64))": { - "details": "This indicates to the endpoint that the OApp has enabled msgs for this particular path to be received.This defaults to assuming if a peer has been set, its initialized. Can be overridden by the OApp if there is other logic to determine this.", - "params": { - "origin": "The origin information containing the source endpoint and sender address." - }, - "returns": { "_0": "Whether the path has been initialized." } - }, - "isComposeMsgSender((uint32,bytes32,uint64),bytes,address)": { - "details": "_origin The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message._message The lzReceive payload.Applications can optionally choose to implement separate composeMsg senders that are NOT the bridging layer.The default sender IS the OAppReceiver implementer.", - "params": { "_sender": "The sender address." }, - "returns": { "_0": "isSender Is a valid sender." } - }, - "lzReceive((uint32,bytes32,uint64),bytes32,bytes,address,bytes)": { - "details": "Entry point for receiving messages or packets from the endpoint.Entry point for receiving msg/packet from the LayerZero endpoint.", - "params": { - "_executor": "The address of the executor for the received message.", - "_extraData": "Additional arbitrary data provided by the corresponding executor.", - "_guid": "The unique identifier for the received LayerZero message.", - "_message": "The payload of the received message.", - "_origin": "The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message." - } - }, - "nextNonce(uint32,bytes32)": { - "details": "_srcEid The source endpoint ID._sender The sender address.The path nonce starts from 1. If 0 is returned it means that there is NO nonce ordered enforcement.Is required by the off-chain executor to determine the OApp expects msg execution is ordered.This is also enforced by the OApp.By default this is NOT enabled. ie. nextNonce is hardcoded to return 0.", - "returns": { "nonce": "The next nonce." } - }, - "oAppVersion()": { - "details": "Providing 0 as the default for OAppSender version. Indicates that the OAppSender is not implemented. ie. this is a RECEIVE only OApp.If the OApp uses both OAppSender and OAppReceiver, then this needs to be override returning the correct versions.", - "returns": { - "receiverVersion": "The version of the OAppReceiver.sol contract.", - "senderVersion": "The version of the OAppSender.sol contract." - } - }, - "owner()": { "details": "Returns the address of the current owner." }, - "renounceOwnership()": { - "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner." - }, - "setDelegate(address)": { - "details": "Only the owner/admin of the OApp can call this function.Provides the ability for a delegate to set configs, on behalf of the OApp, directly on the Endpoint contract.", - "params": { "_delegate": "The address of the delegate to be set." } - }, - "setPeer(uint32,bytes32)": { - "details": "Only the owner/admin of the OApp can call this function.Indicates that the peer is trusted to send LayerZero messages to this OApp.Set this to bytes32(0) to remove the peer address.Peer is a bytes32 to accommodate non-evm chains.", - "params": { - "_eid": "The endpoint ID.", - "_peer": "The address of the peer to be associated with the corresponding endpoint." - } - }, - "transferOwnership(address)": { - "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." - } - }, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": { - "allowInitializePath((uint32,bytes32,uint64))": { - "notice": "Checks if the path initialization is allowed based on the provided origin." - }, - "endpoint()": { - "notice": "Retrieves the LayerZero endpoint associated with the OApp." - }, - "isComposeMsgSender((uint32,bytes32,uint64),bytes,address)": { - "notice": "Indicates whether an address is an approved composeMsg sender to the Endpoint." - }, - "nextNonce(uint32,bytes32)": { - "notice": "Retrieves the next nonce for a given source endpoint and sender address." - }, - "oAppVersion()": { - "notice": "Retrieves the OApp version information." - }, - "peers(uint32)": { - "notice": "Retrieves the peer (OApp) associated with a corresponding endpoint." - }, - "setDelegate(address)": { - "notice": "Sets the delegate address for the OApp." - }, - "setPeer(uint32,bytes32)": { - "notice": "Sets the peer address (OApp instance) for a corresponding endpoint." - } - }, - "version": 1 - } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppReceiver.sol": "OAppReceiver" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol": { - "keccak256": "0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3", - "urls": [ - "bzz-raw://bacc29fd3866af71e59cb0bdc1cf82c882a4a7f4e2652fd413c9f12649762083", - "dweb:/ipfs/QmZh2toLnrQDWaNYhS5K4NoW7Vxd2GdZx9KA77vKEDLAqs" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol": { - "keccak256": "0x9641abba8d53b08bb517d1b74801dd15ea7b84d77a6719085bd96c8ea94e3ca0", - "urls": [ - "bzz-raw://77415ae0820859e0faf3fabdce683cce9fa03ea026ae0f6fe081ef1c9205f933", - "dweb:/ipfs/QmXd7APqoCunQ2jYy73AHvi5gsZofLpm3SzM6FPo7zRPfL" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol": { - "keccak256": "0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc", - "urls": [ - "bzz-raw://d8ff6a8a89297fa127f86b54e0db3eba1d6a6eeb4f6398d3c84d569665ac8f1b", - "dweb:/ipfs/QmVSwhw6xFDrLRAX4RXaCM47yBaBtac4wf36DYEq6KCTvT" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol": { - "keccak256": "0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972", - "urls": [ - "bzz-raw://7e1b245d58221d16d8b5e0f01ef3e289a24a7df1ace3b94239e4d5b954ad5927", - "dweb:/ipfs/Qmappsgp7PCY9rSSNE9Cdn4BTRX591WfCSEgq2HxhA3z6S" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol": { - "keccak256": "0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901", - "urls": [ - "bzz-raw://b18b23a1643fc6636c4ad9d9023e2e6ca2d3c2a4a046482d4655bff09950598d", - "dweb:/ipfs/Qma6G5SqiovwrMPfgqTrRngK1HWW373Wkf9c6YP2NhXpPk" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol": { - "keccak256": "0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e", - "urls": [ - "bzz-raw://5173fc9143bea314b159ca5a9adb5626659ef763bc598e27de5fa46efe3291a6", - "dweb:/ipfs/QmSLFeMFPmVeGxT4sxRPW28ictjAS22M8rLeYRu9TXkA6D" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppCore.sol": { - "keccak256": "0x13a9c2d1d2c1f086b8624f2e84c4a4702212daae36f701d92bb915b535cbe4cc", - "urls": [ - "bzz-raw://606515dd9193551bd2c94ac8c304f3776fafcc70e544ebf441f334658b2fd5f0", - "dweb:/ipfs/QmZ88ey7DdZqV5taAoebabvszX5kdPMSrQCAmTteVdDtcH" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppReceiver.sol": { - "keccak256": "0x0174e9f1ec4cefe4b5adc26c392269c699b9ff75965364e5b7264426a462c70b", - "urls": [ - "bzz-raw://cd12bb4fe5802c53911b9a0081a2ea10639b1f99925d1e5c1b1421d1bdc17075", - "dweb:/ipfs/QmZonarwbKiEwQ8qoASKur2bbMjusdy9pqK9RCR4P1YPtc" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppCore.sol": { - "keccak256": "0x40e49f2de74506e1da5dcaed53a39853f691647f4ceb0fccc8f49a68d3f47c58", - "urls": [ - "bzz-raw://4a1deb2a6a3eb1fb83936c9578469142bff470295f403d7d07d955a76be3adbd", - "dweb:/ipfs/QmS9bjSfBaE4YhQ1PCQ1TknbEPbNfRXzBK9E7SaPGyiZEv" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppReceiver.sol": { - "keccak256": "0xd26135185e19b3732746d4a9e2923e896f28dec8664bab161faea2ee26fcdc3d", - "urls": [ - "bzz-raw://c236dfe386b508be33c3a1a74ae1d4fd64b8c77ae207767e9dbed0f2429518a2", - "dweb:/ipfs/QmXVbZJjfryTRti98uN3BMh5qh4K7NuEs1RSCoBjRoYd4q" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/access/Ownable.sol": { - "keccak256": "0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb", - "urls": [ - "bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6", - "dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Context.sol": { - "keccak256": "0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2", - "urls": [ - "bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12", - "dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF" - ], - "license": "MIT" - } - }, - "version": 1 - }, - "id": 14 -} diff --git a/examples/oft-movement/out/OAppSender.sol/OAppSender.json b/examples/oft-movement/out/OAppSender.sol/OAppSender.json deleted file mode 100644 index 69080667a..000000000 --- a/examples/oft-movement/out/OAppSender.sol/OAppSender.json +++ /dev/null @@ -1,559 +0,0 @@ -{ - "abi": [ - { - "type": "function", - "name": "endpoint", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "contract ILayerZeroEndpointV2" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "oAppVersion", - "inputs": [], - "outputs": [ - { "name": "senderVersion", "type": "uint64", "internalType": "uint64" }, - { - "name": "receiverVersion", - "type": "uint64", - "internalType": "uint64" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "owner", - "inputs": [], - "outputs": [{ "name": "", "type": "address", "internalType": "address" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "peers", - "inputs": [{ "name": "eid", "type": "uint32", "internalType": "uint32" }], - "outputs": [ - { "name": "peer", "type": "bytes32", "internalType": "bytes32" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "renounceOwnership", - "inputs": [], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setDelegate", - "inputs": [ - { "name": "_delegate", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setPeer", - "inputs": [ - { "name": "_eid", "type": "uint32", "internalType": "uint32" }, - { "name": "_peer", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "transferOwnership", - "inputs": [ - { "name": "newOwner", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "event", - "name": "OwnershipTransferred", - "inputs": [ - { - "name": "previousOwner", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "newOwner", - "type": "address", - "indexed": true, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "PeerSet", - "inputs": [ - { - "name": "eid", - "type": "uint32", - "indexed": false, - "internalType": "uint32" - }, - { - "name": "peer", - "type": "bytes32", - "indexed": false, - "internalType": "bytes32" - } - ], - "anonymous": false - }, - { "type": "error", "name": "InvalidDelegate", "inputs": [] }, - { "type": "error", "name": "InvalidEndpointCall", "inputs": [] }, - { "type": "error", "name": "LzTokenUnavailable", "inputs": [] }, - { - "type": "error", - "name": "NoPeer", - "inputs": [{ "name": "eid", "type": "uint32", "internalType": "uint32" }] - }, - { - "type": "error", - "name": "NotEnoughNative", - "inputs": [ - { "name": "msgValue", "type": "uint256", "internalType": "uint256" } - ] - }, - { - "type": "error", - "name": "OnlyPeer", - "inputs": [ - { "name": "eid", "type": "uint32", "internalType": "uint32" }, - { "name": "sender", "type": "bytes32", "internalType": "bytes32" } - ] - }, - { - "type": "error", - "name": "OwnableInvalidOwner", - "inputs": [ - { "name": "owner", "type": "address", "internalType": "address" } - ] - }, - { - "type": "error", - "name": "OwnableUnauthorizedAccount", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ] - } - ], - "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "methodIdentifiers": { - "endpoint()": "5e280f11", - "oAppVersion()": "17442b70", - "owner()": "8da5cb5b", - "peers(uint32)": "bb0b6a53", - "renounceOwnership()": "715018a6", - "setDelegate(address)": "ca5eb5e1", - "setPeer(uint32,bytes32)": "3400288b", - "transferOwnership(address)": "f2fde38b" - }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"InvalidDelegate\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidEndpointCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LzTokenUnavailable\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"}],\"name\":\"NoPeer\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"msgValue\",\"type\":\"uint256\"}],\"name\":\"NotEnoughNative\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"}],\"name\":\"OnlyPeer\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"peer\",\"type\":\"bytes32\"}],\"name\":\"PeerSet\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"endpoint\",\"outputs\":[{\"internalType\":\"contract ILayerZeroEndpointV2\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"oAppVersion\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"senderVersion\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"receiverVersion\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"}],\"name\":\"peers\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"peer\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_delegate\",\"type\":\"address\"}],\"name\":\"setDelegate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_peer\",\"type\":\"bytes32\"}],\"name\":\"setPeer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Abstract contract implementing the OAppSender functionality for sending messages to a LayerZero endpoint.\",\"errors\":{\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}]},\"kind\":\"dev\",\"methods\":{\"oAppVersion()\":{\"details\":\"Providing 0 as the default for OAppReceiver version. Indicates that the OAppReceiver is not implemented. ie. this is a SEND only OApp.If the OApp uses both OAppSender and OAppReceiver, then this needs to be override returning the correct versions\",\"returns\":{\"receiverVersion\":\"The version of the OAppReceiver.sol contract.\",\"senderVersion\":\"The version of the OAppSender.sol contract.\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"setDelegate(address)\":{\"details\":\"Only the owner/admin of the OApp can call this function.Provides the ability for a delegate to set configs, on behalf of the OApp, directly on the Endpoint contract.\",\"params\":{\"_delegate\":\"The address of the delegate to be set.\"}},\"setPeer(uint32,bytes32)\":{\"details\":\"Only the owner/admin of the OApp can call this function.Indicates that the peer is trusted to send LayerZero messages to this OApp.Set this to bytes32(0) to remove the peer address.Peer is a bytes32 to accommodate non-evm chains.\",\"params\":{\"_eid\":\"The endpoint ID.\",\"_peer\":\"The address of the peer to be associated with the corresponding endpoint.\"}},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"title\":\"OAppSender\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"endpoint()\":{\"notice\":\"Retrieves the LayerZero endpoint associated with the OApp.\"},\"oAppVersion()\":{\"notice\":\"Retrieves the OApp version information.\"},\"peers(uint32)\":{\"notice\":\"Retrieves the peer (OApp) associated with a corresponding endpoint.\"},\"setDelegate(address)\":{\"notice\":\"Sets the delegate address for the OApp.\"},\"setPeer(uint32,bytes32)\":{\"notice\":\"Sets the peer address (OApp instance) for a corresponding endpoint.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppSender.sol\":\"OAppSender\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\":{\"keccak256\":\"0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bacc29fd3866af71e59cb0bdc1cf82c882a4a7f4e2652fd413c9f12649762083\",\"dweb:/ipfs/QmZh2toLnrQDWaNYhS5K4NoW7Vxd2GdZx9KA77vKEDLAqs\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol\":{\"keccak256\":\"0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d8ff6a8a89297fa127f86b54e0db3eba1d6a6eeb4f6398d3c84d569665ac8f1b\",\"dweb:/ipfs/QmVSwhw6xFDrLRAX4RXaCM47yBaBtac4wf36DYEq6KCTvT\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol\":{\"keccak256\":\"0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7e1b245d58221d16d8b5e0f01ef3e289a24a7df1ace3b94239e4d5b954ad5927\",\"dweb:/ipfs/Qmappsgp7PCY9rSSNE9Cdn4BTRX591WfCSEgq2HxhA3z6S\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol\":{\"keccak256\":\"0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b18b23a1643fc6636c4ad9d9023e2e6ca2d3c2a4a046482d4655bff09950598d\",\"dweb:/ipfs/Qma6G5SqiovwrMPfgqTrRngK1HWW373Wkf9c6YP2NhXpPk\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol\":{\"keccak256\":\"0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5173fc9143bea314b159ca5a9adb5626659ef763bc598e27de5fa46efe3291a6\",\"dweb:/ipfs/QmSLFeMFPmVeGxT4sxRPW28ictjAS22M8rLeYRu9TXkA6D\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppCore.sol\":{\"keccak256\":\"0x13a9c2d1d2c1f086b8624f2e84c4a4702212daae36f701d92bb915b535cbe4cc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://606515dd9193551bd2c94ac8c304f3776fafcc70e544ebf441f334658b2fd5f0\",\"dweb:/ipfs/QmZ88ey7DdZqV5taAoebabvszX5kdPMSrQCAmTteVdDtcH\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppSender.sol\":{\"keccak256\":\"0x518cf4adca601923ed4baa6619846a253ea32b8d8775f8bc1faa3dfac7f67c20\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d42b471418efadcc3577ef3fa9f8f504e8bed7db90c3b0c862038d8b29529eb2\",\"dweb:/ipfs/QmZETDQiJN4U92fmLKo8T9ZbdDf7BNBUUvo9H7M7GqAyFU\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppCore.sol\":{\"keccak256\":\"0x40e49f2de74506e1da5dcaed53a39853f691647f4ceb0fccc8f49a68d3f47c58\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4a1deb2a6a3eb1fb83936c9578469142bff470295f403d7d07d955a76be3adbd\",\"dweb:/ipfs/QmS9bjSfBaE4YhQ1PCQ1TknbEPbNfRXzBK9E7SaPGyiZEv\"]},\"node_modules/@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol\":{\"keccak256\":\"0x9b6b3e7803bc5f2f8cd7ad57db8ac1def61a9930a5a3107df4882e028a9605d7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://da62d6be1f5c6edf577f0cb45666a8aa9c2086a4bac87d95d65f02e2f4c36a4b\",\"dweb:/ipfs/QmNkpvBpoCMvX8JwAFNSc5XxJ2q5BXJpL5L1txb4QkqVFF\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC165.sol\":{\"keccak256\":\"0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://11fea9f8bc98949ac6709f0c1699db7430d2948137aa94d5a9e95a91f61a710a\",\"dweb:/ipfs/QmQdfRXxQjwP6yn3DVo1GHPpriKNcFghSPi94Z1oKEFUNS\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC20.sol\":{\"keccak256\":\"0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a2608291cb038b388d80b79a06b6118a42f7894ff67b7da10ec0dbbf5b2973ba\",\"dweb:/ipfs/QmWohqcBLbcxmA4eGPhZDXe5RYMMEEpFq22nfkaUMvTfw1\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db\",\"dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0xca2ae13e0610f6a99238dd00b97bd786bc92732dae6d6b9d61f573ec51018310\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://75f8c71ce0c91c40dd5f249ace0b7d8270f8f1767231bcf71490f7157d6ba862\",\"dweb:/ipfs/QmYXgxeDyFHvz3JsXxLEYN6GNUR44ThHeFj5XkpkgMoG4w\"]},\"node_modules/@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0x9d8da059267bac779a2dbbb9a26c2acf00ca83085e105d62d5d4ef96054a47f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c78e2aa4313323cecd1ef12a8d6265b96beee1a199923abf55d9a2a9e291ad23\",\"dweb:/ipfs/QmUTs2KStXucZezzFo3EYeqYu47utu56qrF7jj1Gue65vb\"]},\"node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"node_modules/@openzeppelin/contracts/utils/Errors.sol\":{\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf\",\"dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB\"]},\"node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { "inputs": [], "type": "error", "name": "InvalidDelegate" }, - { "inputs": [], "type": "error", "name": "InvalidEndpointCall" }, - { "inputs": [], "type": "error", "name": "LzTokenUnavailable" }, - { - "inputs": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" } - ], - "type": "error", - "name": "NoPeer" - }, - { - "inputs": [ - { "internalType": "uint256", "name": "msgValue", "type": "uint256" } - ], - "type": "error", - "name": "NotEnoughNative" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" }, - { "internalType": "bytes32", "name": "sender", "type": "bytes32" } - ], - "type": "error", - "name": "OnlyPeer" - }, - { - "inputs": [ - { "internalType": "address", "name": "owner", "type": "address" } - ], - "type": "error", - "name": "OwnableInvalidOwner" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "type": "error", - "name": "OwnableUnauthorizedAccount" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "previousOwner", - "type": "address", - "indexed": true - }, - { - "internalType": "address", - "name": "newOwner", - "type": "address", - "indexed": true - } - ], - "type": "event", - "name": "OwnershipTransferred", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "eid", - "type": "uint32", - "indexed": false - }, - { - "internalType": "bytes32", - "name": "peer", - "type": "bytes32", - "indexed": false - } - ], - "type": "event", - "name": "PeerSet", - "anonymous": false - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "endpoint", - "outputs": [ - { - "internalType": "contract ILayerZeroEndpointV2", - "name": "", - "type": "address" - } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "oAppVersion", - "outputs": [ - { - "internalType": "uint64", - "name": "senderVersion", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "receiverVersion", - "type": "uint64" - } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "owner", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ] - }, - { - "inputs": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" } - ], - "stateMutability": "view", - "type": "function", - "name": "peers", - "outputs": [ - { "internalType": "bytes32", "name": "peer", "type": "bytes32" } - ] - }, - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "function", - "name": "renounceOwnership" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_delegate", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setDelegate" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { "internalType": "bytes32", "name": "_peer", "type": "bytes32" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setPeer" - }, - { - "inputs": [ - { "internalType": "address", "name": "newOwner", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "transferOwnership" - } - ], - "devdoc": { - "kind": "dev", - "methods": { - "oAppVersion()": { - "details": "Providing 0 as the default for OAppReceiver version. Indicates that the OAppReceiver is not implemented. ie. this is a SEND only OApp.If the OApp uses both OAppSender and OAppReceiver, then this needs to be override returning the correct versions", - "returns": { - "receiverVersion": "The version of the OAppReceiver.sol contract.", - "senderVersion": "The version of the OAppSender.sol contract." - } - }, - "owner()": { "details": "Returns the address of the current owner." }, - "renounceOwnership()": { - "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner." - }, - "setDelegate(address)": { - "details": "Only the owner/admin of the OApp can call this function.Provides the ability for a delegate to set configs, on behalf of the OApp, directly on the Endpoint contract.", - "params": { "_delegate": "The address of the delegate to be set." } - }, - "setPeer(uint32,bytes32)": { - "details": "Only the owner/admin of the OApp can call this function.Indicates that the peer is trusted to send LayerZero messages to this OApp.Set this to bytes32(0) to remove the peer address.Peer is a bytes32 to accommodate non-evm chains.", - "params": { - "_eid": "The endpoint ID.", - "_peer": "The address of the peer to be associated with the corresponding endpoint." - } - }, - "transferOwnership(address)": { - "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." - } - }, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": { - "endpoint()": { - "notice": "Retrieves the LayerZero endpoint associated with the OApp." - }, - "oAppVersion()": { - "notice": "Retrieves the OApp version information." - }, - "peers(uint32)": { - "notice": "Retrieves the peer (OApp) associated with a corresponding endpoint." - }, - "setDelegate(address)": { - "notice": "Sets the delegate address for the OApp." - }, - "setPeer(uint32,bytes32)": { - "notice": "Sets the peer address (OApp instance) for a corresponding endpoint." - } - }, - "version": 1 - } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppSender.sol": "OAppSender" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol": { - "keccak256": "0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3", - "urls": [ - "bzz-raw://bacc29fd3866af71e59cb0bdc1cf82c882a4a7f4e2652fd413c9f12649762083", - "dweb:/ipfs/QmZh2toLnrQDWaNYhS5K4NoW7Vxd2GdZx9KA77vKEDLAqs" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol": { - "keccak256": "0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc", - "urls": [ - "bzz-raw://d8ff6a8a89297fa127f86b54e0db3eba1d6a6eeb4f6398d3c84d569665ac8f1b", - "dweb:/ipfs/QmVSwhw6xFDrLRAX4RXaCM47yBaBtac4wf36DYEq6KCTvT" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol": { - "keccak256": "0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972", - "urls": [ - "bzz-raw://7e1b245d58221d16d8b5e0f01ef3e289a24a7df1ace3b94239e4d5b954ad5927", - "dweb:/ipfs/Qmappsgp7PCY9rSSNE9Cdn4BTRX591WfCSEgq2HxhA3z6S" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol": { - "keccak256": "0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901", - "urls": [ - "bzz-raw://b18b23a1643fc6636c4ad9d9023e2e6ca2d3c2a4a046482d4655bff09950598d", - "dweb:/ipfs/Qma6G5SqiovwrMPfgqTrRngK1HWW373Wkf9c6YP2NhXpPk" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol": { - "keccak256": "0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e", - "urls": [ - "bzz-raw://5173fc9143bea314b159ca5a9adb5626659ef763bc598e27de5fa46efe3291a6", - "dweb:/ipfs/QmSLFeMFPmVeGxT4sxRPW28ictjAS22M8rLeYRu9TXkA6D" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppCore.sol": { - "keccak256": "0x13a9c2d1d2c1f086b8624f2e84c4a4702212daae36f701d92bb915b535cbe4cc", - "urls": [ - "bzz-raw://606515dd9193551bd2c94ac8c304f3776fafcc70e544ebf441f334658b2fd5f0", - "dweb:/ipfs/QmZ88ey7DdZqV5taAoebabvszX5kdPMSrQCAmTteVdDtcH" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppSender.sol": { - "keccak256": "0x518cf4adca601923ed4baa6619846a253ea32b8d8775f8bc1faa3dfac7f67c20", - "urls": [ - "bzz-raw://d42b471418efadcc3577ef3fa9f8f504e8bed7db90c3b0c862038d8b29529eb2", - "dweb:/ipfs/QmZETDQiJN4U92fmLKo8T9ZbdDf7BNBUUvo9H7M7GqAyFU" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppCore.sol": { - "keccak256": "0x40e49f2de74506e1da5dcaed53a39853f691647f4ceb0fccc8f49a68d3f47c58", - "urls": [ - "bzz-raw://4a1deb2a6a3eb1fb83936c9578469142bff470295f403d7d07d955a76be3adbd", - "dweb:/ipfs/QmS9bjSfBaE4YhQ1PCQ1TknbEPbNfRXzBK9E7SaPGyiZEv" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/access/Ownable.sol": { - "keccak256": "0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb", - "urls": [ - "bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6", - "dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol": { - "keccak256": "0x9b6b3e7803bc5f2f8cd7ad57db8ac1def61a9930a5a3107df4882e028a9605d7", - "urls": [ - "bzz-raw://da62d6be1f5c6edf577f0cb45666a8aa9c2086a4bac87d95d65f02e2f4c36a4b", - "dweb:/ipfs/QmNkpvBpoCMvX8JwAFNSc5XxJ2q5BXJpL5L1txb4QkqVFF" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/interfaces/IERC165.sol": { - "keccak256": "0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724", - "urls": [ - "bzz-raw://11fea9f8bc98949ac6709f0c1699db7430d2948137aa94d5a9e95a91f61a710a", - "dweb:/ipfs/QmQdfRXxQjwP6yn3DVo1GHPpriKNcFghSPi94Z1oKEFUNS" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/interfaces/IERC20.sol": { - "keccak256": "0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c", - "urls": [ - "bzz-raw://a2608291cb038b388d80b79a06b6118a42f7894ff67b7da10ec0dbbf5b2973ba", - "dweb:/ipfs/QmWohqcBLbcxmA4eGPhZDXe5RYMMEEpFq22nfkaUMvTfw1" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol": { - "keccak256": "0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7", - "urls": [ - "bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db", - "dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol": { - "keccak256": "0xca2ae13e0610f6a99238dd00b97bd786bc92732dae6d6b9d61f573ec51018310", - "urls": [ - "bzz-raw://75f8c71ce0c91c40dd5f249ace0b7d8270f8f1767231bcf71490f7157d6ba862", - "dweb:/ipfs/QmYXgxeDyFHvz3JsXxLEYN6GNUR44ThHeFj5XkpkgMoG4w" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Address.sol": { - "keccak256": "0x9d8da059267bac779a2dbbb9a26c2acf00ca83085e105d62d5d4ef96054a47f5", - "urls": [ - "bzz-raw://c78e2aa4313323cecd1ef12a8d6265b96beee1a199923abf55d9a2a9e291ad23", - "dweb:/ipfs/QmUTs2KStXucZezzFo3EYeqYu47utu56qrF7jj1Gue65vb" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Context.sol": { - "keccak256": "0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2", - "urls": [ - "bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12", - "dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Errors.sol": { - "keccak256": "0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123", - "urls": [ - "bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf", - "dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol": { - "keccak256": "0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8", - "urls": [ - "bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621", - "dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL" - ], - "license": "MIT" - } - }, - "version": 1 - }, - "id": 15 -} diff --git a/examples/oft-movement/out/OFT.sol/OFT.json b/examples/oft-movement/out/OFT.sol/OFT.json deleted file mode 100644 index f9903137f..000000000 --- a/examples/oft-movement/out/OFT.sol/OFT.json +++ /dev/null @@ -1,2808 +0,0 @@ -{ - "abi": [ - { - "type": "function", - "name": "SEND", - "inputs": [], - "outputs": [{ "name": "", "type": "uint16", "internalType": "uint16" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "SEND_AND_CALL", - "inputs": [], - "outputs": [{ "name": "", "type": "uint16", "internalType": "uint16" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "allowInitializePath", - "inputs": [ - { - "name": "origin", - "type": "tuple", - "internalType": "struct Origin", - "components": [ - { "name": "srcEid", "type": "uint32", "internalType": "uint32" }, - { "name": "sender", "type": "bytes32", "internalType": "bytes32" }, - { "name": "nonce", "type": "uint64", "internalType": "uint64" } - ] - } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "allowance", - "inputs": [ - { "name": "owner", "type": "address", "internalType": "address" }, - { "name": "spender", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "approvalRequired", - "inputs": [], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "approve", - "inputs": [ - { "name": "spender", "type": "address", "internalType": "address" }, - { "name": "value", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "balanceOf", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "combineOptions", - "inputs": [ - { "name": "_eid", "type": "uint32", "internalType": "uint32" }, - { "name": "_msgType", "type": "uint16", "internalType": "uint16" }, - { "name": "_extraOptions", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [{ "name": "", "type": "bytes", "internalType": "bytes" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "decimalConversionRate", - "inputs": [], - "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "decimals", - "inputs": [], - "outputs": [{ "name": "", "type": "uint8", "internalType": "uint8" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "endpoint", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "contract ILayerZeroEndpointV2" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "enforcedOptions", - "inputs": [ - { "name": "eid", "type": "uint32", "internalType": "uint32" }, - { "name": "msgType", "type": "uint16", "internalType": "uint16" } - ], - "outputs": [ - { "name": "enforcedOption", "type": "bytes", "internalType": "bytes" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "isComposeMsgSender", - "inputs": [ - { - "name": "", - "type": "tuple", - "internalType": "struct Origin", - "components": [ - { "name": "srcEid", "type": "uint32", "internalType": "uint32" }, - { "name": "sender", "type": "bytes32", "internalType": "bytes32" }, - { "name": "nonce", "type": "uint64", "internalType": "uint64" } - ] - }, - { "name": "", "type": "bytes", "internalType": "bytes" }, - { "name": "_sender", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "isPeer", - "inputs": [ - { "name": "_eid", "type": "uint32", "internalType": "uint32" }, - { "name": "_peer", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "lzReceive", - "inputs": [ - { - "name": "_origin", - "type": "tuple", - "internalType": "struct Origin", - "components": [ - { "name": "srcEid", "type": "uint32", "internalType": "uint32" }, - { "name": "sender", "type": "bytes32", "internalType": "bytes32" }, - { "name": "nonce", "type": "uint64", "internalType": "uint64" } - ] - }, - { "name": "_guid", "type": "bytes32", "internalType": "bytes32" }, - { "name": "_message", "type": "bytes", "internalType": "bytes" }, - { "name": "_executor", "type": "address", "internalType": "address" }, - { "name": "_extraData", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [], - "stateMutability": "payable" - }, - { - "type": "function", - "name": "lzReceiveAndRevert", - "inputs": [ - { - "name": "_packets", - "type": "tuple[]", - "internalType": "struct InboundPacket[]", - "components": [ - { - "name": "origin", - "type": "tuple", - "internalType": "struct Origin", - "components": [ - { - "name": "srcEid", - "type": "uint32", - "internalType": "uint32" - }, - { - "name": "sender", - "type": "bytes32", - "internalType": "bytes32" - }, - { "name": "nonce", "type": "uint64", "internalType": "uint64" } - ] - }, - { "name": "dstEid", "type": "uint32", "internalType": "uint32" }, - { - "name": "receiver", - "type": "address", - "internalType": "address" - }, - { "name": "guid", "type": "bytes32", "internalType": "bytes32" }, - { "name": "value", "type": "uint256", "internalType": "uint256" }, - { - "name": "executor", - "type": "address", - "internalType": "address" - }, - { "name": "message", "type": "bytes", "internalType": "bytes" }, - { "name": "extraData", "type": "bytes", "internalType": "bytes" } - ] - } - ], - "outputs": [], - "stateMutability": "payable" - }, - { - "type": "function", - "name": "lzReceiveSimulate", - "inputs": [ - { - "name": "_origin", - "type": "tuple", - "internalType": "struct Origin", - "components": [ - { "name": "srcEid", "type": "uint32", "internalType": "uint32" }, - { "name": "sender", "type": "bytes32", "internalType": "bytes32" }, - { "name": "nonce", "type": "uint64", "internalType": "uint64" } - ] - }, - { "name": "_guid", "type": "bytes32", "internalType": "bytes32" }, - { "name": "_message", "type": "bytes", "internalType": "bytes" }, - { "name": "_executor", "type": "address", "internalType": "address" }, - { "name": "_extraData", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [], - "stateMutability": "payable" - }, - { - "type": "function", - "name": "msgInspector", - "inputs": [], - "outputs": [{ "name": "", "type": "address", "internalType": "address" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "name", - "inputs": [], - "outputs": [{ "name": "", "type": "string", "internalType": "string" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "nextNonce", - "inputs": [ - { "name": "", "type": "uint32", "internalType": "uint32" }, - { "name": "", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [ - { "name": "nonce", "type": "uint64", "internalType": "uint64" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "oApp", - "inputs": [], - "outputs": [{ "name": "", "type": "address", "internalType": "address" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "oAppVersion", - "inputs": [], - "outputs": [ - { "name": "senderVersion", "type": "uint64", "internalType": "uint64" }, - { - "name": "receiverVersion", - "type": "uint64", - "internalType": "uint64" - } - ], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "oftVersion", - "inputs": [], - "outputs": [ - { "name": "interfaceId", "type": "bytes4", "internalType": "bytes4" }, - { "name": "version", "type": "uint64", "internalType": "uint64" } - ], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "owner", - "inputs": [], - "outputs": [{ "name": "", "type": "address", "internalType": "address" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "peers", - "inputs": [{ "name": "eid", "type": "uint32", "internalType": "uint32" }], - "outputs": [ - { "name": "peer", "type": "bytes32", "internalType": "bytes32" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "preCrime", - "inputs": [], - "outputs": [{ "name": "", "type": "address", "internalType": "address" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "quoteOFT", - "inputs": [ - { - "name": "_sendParam", - "type": "tuple", - "internalType": "struct SendParam", - "components": [ - { "name": "dstEid", "type": "uint32", "internalType": "uint32" }, - { "name": "to", "type": "bytes32", "internalType": "bytes32" }, - { - "name": "amountLD", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "minAmountLD", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "extraOptions", - "type": "bytes", - "internalType": "bytes" - }, - { "name": "composeMsg", "type": "bytes", "internalType": "bytes" }, - { "name": "oftCmd", "type": "bytes", "internalType": "bytes" } - ] - } - ], - "outputs": [ - { - "name": "oftLimit", - "type": "tuple", - "internalType": "struct OFTLimit", - "components": [ - { - "name": "minAmountLD", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "maxAmountLD", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "name": "oftFeeDetails", - "type": "tuple[]", - "internalType": "struct OFTFeeDetail[]", - "components": [ - { - "name": "feeAmountLD", - "type": "int256", - "internalType": "int256" - }, - { - "name": "description", - "type": "string", - "internalType": "string" - } - ] - }, - { - "name": "oftReceipt", - "type": "tuple", - "internalType": "struct OFTReceipt", - "components": [ - { - "name": "amountSentLD", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "amountReceivedLD", - "type": "uint256", - "internalType": "uint256" - } - ] - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "quoteSend", - "inputs": [ - { - "name": "_sendParam", - "type": "tuple", - "internalType": "struct SendParam", - "components": [ - { "name": "dstEid", "type": "uint32", "internalType": "uint32" }, - { "name": "to", "type": "bytes32", "internalType": "bytes32" }, - { - "name": "amountLD", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "minAmountLD", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "extraOptions", - "type": "bytes", - "internalType": "bytes" - }, - { "name": "composeMsg", "type": "bytes", "internalType": "bytes" }, - { "name": "oftCmd", "type": "bytes", "internalType": "bytes" } - ] - }, - { "name": "_payInLzToken", "type": "bool", "internalType": "bool" } - ], - "outputs": [ - { - "name": "msgFee", - "type": "tuple", - "internalType": "struct MessagingFee", - "components": [ - { - "name": "nativeFee", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "lzTokenFee", - "type": "uint256", - "internalType": "uint256" - } - ] - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "renounceOwnership", - "inputs": [], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "send", - "inputs": [ - { - "name": "_sendParam", - "type": "tuple", - "internalType": "struct SendParam", - "components": [ - { "name": "dstEid", "type": "uint32", "internalType": "uint32" }, - { "name": "to", "type": "bytes32", "internalType": "bytes32" }, - { - "name": "amountLD", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "minAmountLD", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "extraOptions", - "type": "bytes", - "internalType": "bytes" - }, - { "name": "composeMsg", "type": "bytes", "internalType": "bytes" }, - { "name": "oftCmd", "type": "bytes", "internalType": "bytes" } - ] - }, - { - "name": "_fee", - "type": "tuple", - "internalType": "struct MessagingFee", - "components": [ - { - "name": "nativeFee", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "lzTokenFee", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "name": "_refundAddress", - "type": "address", - "internalType": "address" - } - ], - "outputs": [ - { - "name": "msgReceipt", - "type": "tuple", - "internalType": "struct MessagingReceipt", - "components": [ - { "name": "guid", "type": "bytes32", "internalType": "bytes32" }, - { "name": "nonce", "type": "uint64", "internalType": "uint64" }, - { - "name": "fee", - "type": "tuple", - "internalType": "struct MessagingFee", - "components": [ - { - "name": "nativeFee", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "lzTokenFee", - "type": "uint256", - "internalType": "uint256" - } - ] - } - ] - }, - { - "name": "oftReceipt", - "type": "tuple", - "internalType": "struct OFTReceipt", - "components": [ - { - "name": "amountSentLD", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "amountReceivedLD", - "type": "uint256", - "internalType": "uint256" - } - ] - } - ], - "stateMutability": "payable" - }, - { - "type": "function", - "name": "setDelegate", - "inputs": [ - { "name": "_delegate", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setEnforcedOptions", - "inputs": [ - { - "name": "_enforcedOptions", - "type": "tuple[]", - "internalType": "struct EnforcedOptionParam[]", - "components": [ - { "name": "eid", "type": "uint32", "internalType": "uint32" }, - { "name": "msgType", "type": "uint16", "internalType": "uint16" }, - { "name": "options", "type": "bytes", "internalType": "bytes" } - ] - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setMsgInspector", - "inputs": [ - { - "name": "_msgInspector", - "type": "address", - "internalType": "address" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setPeer", - "inputs": [ - { "name": "_eid", "type": "uint32", "internalType": "uint32" }, - { "name": "_peer", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setPreCrime", - "inputs": [ - { "name": "_preCrime", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "sharedDecimals", - "inputs": [], - "outputs": [{ "name": "", "type": "uint8", "internalType": "uint8" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "symbol", - "inputs": [], - "outputs": [{ "name": "", "type": "string", "internalType": "string" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "token", - "inputs": [], - "outputs": [{ "name": "", "type": "address", "internalType": "address" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "totalSupply", - "inputs": [], - "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "transfer", - "inputs": [ - { "name": "to", "type": "address", "internalType": "address" }, - { "name": "value", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "transferFrom", - "inputs": [ - { "name": "from", "type": "address", "internalType": "address" }, - { "name": "to", "type": "address", "internalType": "address" }, - { "name": "value", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "transferOwnership", - "inputs": [ - { "name": "newOwner", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "event", - "name": "Approval", - "inputs": [ - { - "name": "owner", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "spender", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "value", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "EnforcedOptionSet", - "inputs": [ - { - "name": "_enforcedOptions", - "type": "tuple[]", - "indexed": false, - "internalType": "struct EnforcedOptionParam[]", - "components": [ - { "name": "eid", "type": "uint32", "internalType": "uint32" }, - { "name": "msgType", "type": "uint16", "internalType": "uint16" }, - { "name": "options", "type": "bytes", "internalType": "bytes" } - ] - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "MsgInspectorSet", - "inputs": [ - { - "name": "inspector", - "type": "address", - "indexed": false, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "OFTReceived", - "inputs": [ - { - "name": "guid", - "type": "bytes32", - "indexed": true, - "internalType": "bytes32" - }, - { - "name": "srcEid", - "type": "uint32", - "indexed": false, - "internalType": "uint32" - }, - { - "name": "toAddress", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "amountReceivedLD", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "OFTSent", - "inputs": [ - { - "name": "guid", - "type": "bytes32", - "indexed": true, - "internalType": "bytes32" - }, - { - "name": "dstEid", - "type": "uint32", - "indexed": false, - "internalType": "uint32" - }, - { - "name": "fromAddress", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "amountSentLD", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - }, - { - "name": "amountReceivedLD", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "OwnershipTransferred", - "inputs": [ - { - "name": "previousOwner", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "newOwner", - "type": "address", - "indexed": true, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "PeerSet", - "inputs": [ - { - "name": "eid", - "type": "uint32", - "indexed": false, - "internalType": "uint32" - }, - { - "name": "peer", - "type": "bytes32", - "indexed": false, - "internalType": "bytes32" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "PreCrimeSet", - "inputs": [ - { - "name": "preCrimeAddress", - "type": "address", - "indexed": false, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "Transfer", - "inputs": [ - { - "name": "from", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "to", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "value", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "error", - "name": "ERC20InsufficientAllowance", - "inputs": [ - { "name": "spender", "type": "address", "internalType": "address" }, - { "name": "allowance", "type": "uint256", "internalType": "uint256" }, - { "name": "needed", "type": "uint256", "internalType": "uint256" } - ] - }, - { - "type": "error", - "name": "ERC20InsufficientBalance", - "inputs": [ - { "name": "sender", "type": "address", "internalType": "address" }, - { "name": "balance", "type": "uint256", "internalType": "uint256" }, - { "name": "needed", "type": "uint256", "internalType": "uint256" } - ] - }, - { - "type": "error", - "name": "ERC20InvalidApprover", - "inputs": [ - { "name": "approver", "type": "address", "internalType": "address" } - ] - }, - { - "type": "error", - "name": "ERC20InvalidReceiver", - "inputs": [ - { "name": "receiver", "type": "address", "internalType": "address" } - ] - }, - { - "type": "error", - "name": "ERC20InvalidSender", - "inputs": [ - { "name": "sender", "type": "address", "internalType": "address" } - ] - }, - { - "type": "error", - "name": "ERC20InvalidSpender", - "inputs": [ - { "name": "spender", "type": "address", "internalType": "address" } - ] - }, - { "type": "error", "name": "InvalidDelegate", "inputs": [] }, - { "type": "error", "name": "InvalidEndpointCall", "inputs": [] }, - { "type": "error", "name": "InvalidLocalDecimals", "inputs": [] }, - { - "type": "error", - "name": "InvalidOptions", - "inputs": [ - { "name": "options", "type": "bytes", "internalType": "bytes" } - ] - }, - { "type": "error", "name": "LzTokenUnavailable", "inputs": [] }, - { - "type": "error", - "name": "NoPeer", - "inputs": [{ "name": "eid", "type": "uint32", "internalType": "uint32" }] - }, - { - "type": "error", - "name": "NotEnoughNative", - "inputs": [ - { "name": "msgValue", "type": "uint256", "internalType": "uint256" } - ] - }, - { - "type": "error", - "name": "OnlyEndpoint", - "inputs": [ - { "name": "addr", "type": "address", "internalType": "address" } - ] - }, - { - "type": "error", - "name": "OnlyPeer", - "inputs": [ - { "name": "eid", "type": "uint32", "internalType": "uint32" }, - { "name": "sender", "type": "bytes32", "internalType": "bytes32" } - ] - }, - { "type": "error", "name": "OnlySelf", "inputs": [] }, - { - "type": "error", - "name": "OwnableInvalidOwner", - "inputs": [ - { "name": "owner", "type": "address", "internalType": "address" } - ] - }, - { - "type": "error", - "name": "OwnableUnauthorizedAccount", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ] - }, - { - "type": "error", - "name": "SafeERC20FailedOperation", - "inputs": [ - { "name": "token", "type": "address", "internalType": "address" } - ] - }, - { - "type": "error", - "name": "SimulationResult", - "inputs": [{ "name": "result", "type": "bytes", "internalType": "bytes" }] - }, - { - "type": "error", - "name": "SlippageExceeded", - "inputs": [ - { "name": "amountLD", "type": "uint256", "internalType": "uint256" }, - { "name": "minAmountLD", "type": "uint256", "internalType": "uint256" } - ] - } - ], - "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "methodIdentifiers": { - "SEND()": "1f5e1334", - "SEND_AND_CALL()": "134d4f25", - "allowInitializePath((uint32,bytes32,uint64))": "ff7bd03d", - "allowance(address,address)": "dd62ed3e", - "approvalRequired()": "9f68b964", - "approve(address,uint256)": "095ea7b3", - "balanceOf(address)": "70a08231", - "combineOptions(uint32,uint16,bytes)": "bc70b354", - "decimalConversionRate()": "963efcaa", - "decimals()": "313ce567", - "endpoint()": "5e280f11", - "enforcedOptions(uint32,uint16)": "5535d461", - "isComposeMsgSender((uint32,bytes32,uint64),bytes,address)": "82413eac", - "isPeer(uint32,bytes32)": "5a0dfe4d", - "lzReceive((uint32,bytes32,uint64),bytes32,bytes,address,bytes)": "13137d65", - "lzReceiveAndRevert(((uint32,bytes32,uint64),uint32,address,bytes32,uint256,address,bytes,bytes)[])": "bd815db0", - "lzReceiveSimulate((uint32,bytes32,uint64),bytes32,bytes,address,bytes)": "d045a0dc", - "msgInspector()": "111ecdad", - "name()": "06fdde03", - "nextNonce(uint32,bytes32)": "7d25a05e", - "oApp()": "52ae2879", - "oAppVersion()": "17442b70", - "oftVersion()": "156a0d0f", - "owner()": "8da5cb5b", - "peers(uint32)": "bb0b6a53", - "preCrime()": "b731ea0a", - "quoteOFT((uint32,bytes32,uint256,uint256,bytes,bytes,bytes))": "0d35b415", - "quoteSend((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),bool)": "3b6f743b", - "renounceOwnership()": "715018a6", - "send((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),(uint256,uint256),address)": "c7c7f5b3", - "setDelegate(address)": "ca5eb5e1", - "setEnforcedOptions((uint32,uint16,bytes)[])": "b98bd070", - "setMsgInspector(address)": "6fc1b31e", - "setPeer(uint32,bytes32)": "3400288b", - "setPreCrime(address)": "d4243885", - "sharedDecimals()": "857749b0", - "symbol()": "95d89b41", - "token()": "fc0c546a", - "totalSupply()": "18160ddd", - "transfer(address,uint256)": "a9059cbb", - "transferFrom(address,address,uint256)": "23b872dd", - "transferOwnership(address)": "f2fde38b" - }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"allowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSpender\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidDelegate\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidEndpointCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidLocalDecimals\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"options\",\"type\":\"bytes\"}],\"name\":\"InvalidOptions\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LzTokenUnavailable\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"}],\"name\":\"NoPeer\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"msgValue\",\"type\":\"uint256\"}],\"name\":\"NotEnoughNative\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"OnlyEndpoint\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"}],\"name\":\"OnlyPeer\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlySelf\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"name\":\"SimulationResult\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountLD\",\"type\":\"uint256\"}],\"name\":\"SlippageExceeded\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"msgType\",\"type\":\"uint16\"},{\"internalType\":\"bytes\",\"name\":\"options\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"struct EnforcedOptionParam[]\",\"name\":\"_enforcedOptions\",\"type\":\"tuple[]\"}],\"name\":\"EnforcedOptionSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"inspector\",\"type\":\"address\"}],\"name\":\"MsgInspectorSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"toAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountReceivedLD\",\"type\":\"uint256\"}],\"name\":\"OFTReceived\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"fromAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountSentLD\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountReceivedLD\",\"type\":\"uint256\"}],\"name\":\"OFTSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"peer\",\"type\":\"bytes32\"}],\"name\":\"PeerSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"preCrimeAddress\",\"type\":\"address\"}],\"name\":\"PreCrimeSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"SEND\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SEND_AND_CALL\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"origin\",\"type\":\"tuple\"}],\"name\":\"allowInitializePath\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"approvalRequired\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"_msgType\",\"type\":\"uint16\"},{\"internalType\":\"bytes\",\"name\":\"_extraOptions\",\"type\":\"bytes\"}],\"name\":\"combineOptions\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimalConversionRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"endpoint\",\"outputs\":[{\"internalType\":\"contract ILayerZeroEndpointV2\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"msgType\",\"type\":\"uint16\"}],\"name\":\"enforcedOptions\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"enforcedOption\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"}],\"name\":\"isComposeMsgSender\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_peer\",\"type\":\"bytes32\"}],\"name\":\"isPeer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"_origin\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"_guid\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"_executor\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"lzReceive\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"origin\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"executor\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"internalType\":\"struct InboundPacket[]\",\"name\":\"_packets\",\"type\":\"tuple[]\"}],\"name\":\"lzReceiveAndRevert\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"_origin\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"_guid\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"_executor\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"lzReceiveSimulate\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"msgInspector\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"nextNonce\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"oApp\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"oAppVersion\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"senderVersion\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"receiverVersion\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"oftVersion\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"},{\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"}],\"name\":\"peers\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"peer\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"preCrime\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"to\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"amountLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountLD\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"extraOptions\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"composeMsg\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"oftCmd\",\"type\":\"bytes\"}],\"internalType\":\"struct SendParam\",\"name\":\"_sendParam\",\"type\":\"tuple\"}],\"name\":\"quoteOFT\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"minAmountLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountLD\",\"type\":\"uint256\"}],\"internalType\":\"struct OFTLimit\",\"name\":\"oftLimit\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"int256\",\"name\":\"feeAmountLD\",\"type\":\"int256\"},{\"internalType\":\"string\",\"name\":\"description\",\"type\":\"string\"}],\"internalType\":\"struct OFTFeeDetail[]\",\"name\":\"oftFeeDetails\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"amountSentLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountReceivedLD\",\"type\":\"uint256\"}],\"internalType\":\"struct OFTReceipt\",\"name\":\"oftReceipt\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"to\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"amountLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountLD\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"extraOptions\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"composeMsg\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"oftCmd\",\"type\":\"bytes\"}],\"internalType\":\"struct SendParam\",\"name\":\"_sendParam\",\"type\":\"tuple\"},{\"internalType\":\"bool\",\"name\":\"_payInLzToken\",\"type\":\"bool\"}],\"name\":\"quoteSend\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nativeFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lzTokenFee\",\"type\":\"uint256\"}],\"internalType\":\"struct MessagingFee\",\"name\":\"msgFee\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"to\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"amountLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountLD\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"extraOptions\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"composeMsg\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"oftCmd\",\"type\":\"bytes\"}],\"internalType\":\"struct SendParam\",\"name\":\"_sendParam\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nativeFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lzTokenFee\",\"type\":\"uint256\"}],\"internalType\":\"struct MessagingFee\",\"name\":\"_fee\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"_refundAddress\",\"type\":\"address\"}],\"name\":\"send\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nativeFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lzTokenFee\",\"type\":\"uint256\"}],\"internalType\":\"struct MessagingFee\",\"name\":\"fee\",\"type\":\"tuple\"}],\"internalType\":\"struct MessagingReceipt\",\"name\":\"msgReceipt\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"amountSentLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountReceivedLD\",\"type\":\"uint256\"}],\"internalType\":\"struct OFTReceipt\",\"name\":\"oftReceipt\",\"type\":\"tuple\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_delegate\",\"type\":\"address\"}],\"name\":\"setDelegate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"msgType\",\"type\":\"uint16\"},{\"internalType\":\"bytes\",\"name\":\"options\",\"type\":\"bytes\"}],\"internalType\":\"struct EnforcedOptionParam[]\",\"name\":\"_enforcedOptions\",\"type\":\"tuple[]\"}],\"name\":\"setEnforcedOptions\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_msgInspector\",\"type\":\"address\"}],\"name\":\"setMsgInspector\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_peer\",\"type\":\"bytes32\"}],\"name\":\"setPeer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_preCrime\",\"type\":\"address\"}],\"name\":\"setPreCrime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sharedDecimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"token\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"OFT is an ERC-20 token that extends the functionality of the OFTCore contract.\",\"errors\":{\"ERC20InsufficientAllowance(address,uint256,uint256)\":[{\"details\":\"Indicates a failure with the `spender`\\u2019s `allowance`. Used in transfers.\",\"params\":{\"allowance\":\"Amount of tokens a `spender` is allowed to operate with.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC20InsufficientBalance(address,uint256,uint256)\":[{\"details\":\"Indicates an error related to the current `balance` of a `sender`. Used in transfers.\",\"params\":{\"balance\":\"Current balance for the interacting account.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC20InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC20InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidSpender(address)\":[{\"details\":\"Indicates a failure with the `spender` to be approved. Used in approvals.\",\"params\":{\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}],\"SafeERC20FailedOperation(address)\":[{\"details\":\"An operation with an ERC-20 token failed.\"}]},\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"PreCrimeSet(address)\":{\"details\":\"Emitted when the preCrime contract address is set.\",\"params\":{\"preCrimeAddress\":\"The address of the preCrime contract.\"}},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowInitializePath((uint32,bytes32,uint64))\":{\"details\":\"This indicates to the endpoint that the OApp has enabled msgs for this particular path to be received.This defaults to assuming if a peer has been set, its initialized. Can be overridden by the OApp if there is other logic to determine this.\",\"params\":{\"origin\":\"The origin information containing the source endpoint and sender address.\"},\"returns\":{\"_0\":\"Whether the path has been initialized.\"}},\"allowance(address,address)\":{\"details\":\"See {IERC20-allowance}.\"},\"approvalRequired()\":{\"details\":\"In the case of OFT where the contract IS the token, approval is NOT required.\",\"returns\":{\"_0\":\"requiresApproval Needs approval of the underlying token implementation.\"}},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. NOTE: If `value` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"See {IERC20-balanceOf}.\"},\"combineOptions(uint32,uint16,bytes)\":{\"details\":\"If there is an enforced lzReceive option: - {gasLimit: 200k, msg.value: 1 ether} AND a caller supplies a lzReceive option: {gasLimit: 100k, msg.value: 0.5 ether} - The resulting options will be {gasLimit: 300k, msg.value: 1.5 ether} when the message is executed on the remote lzReceive() function.This presence of duplicated options is handled off-chain in the verifier/executor.\",\"params\":{\"_eid\":\"The endpoint ID.\",\"_extraOptions\":\"Additional options passed by the caller.\",\"_msgType\":\"The OAPP message type.\"},\"returns\":{\"_0\":\"options The combination of caller specified options AND enforced options.\"}},\"constructor\":{\"details\":\"Constructor for the OFT contract.\",\"params\":{\"_delegate\":\"The delegate capable of making OApp configurations inside of the endpoint.\",\"_lzEndpoint\":\"The LayerZero endpoint address.\",\"_name\":\"The name of the OFT.\",\"_symbol\":\"The symbol of the OFT.\"}},\"decimals()\":{\"details\":\"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the default value returned by this function, unless it's overridden. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.\"},\"isComposeMsgSender((uint32,bytes32,uint64),bytes,address)\":{\"details\":\"_origin The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message._message The lzReceive payload.Applications can optionally choose to implement separate composeMsg senders that are NOT the bridging layer.The default sender IS the OAppReceiver implementer.\",\"params\":{\"_sender\":\"The sender address.\"},\"returns\":{\"_0\":\"isSender Is a valid sender.\"}},\"isPeer(uint32,bytes32)\":{\"details\":\"Check if the peer is considered 'trusted' by the OApp.Enables OAppPreCrimeSimulator to check whether a potential Inbound Packet is from a trusted source.\",\"params\":{\"_eid\":\"The endpoint ID to check.\",\"_peer\":\"The peer to check.\"},\"returns\":{\"_0\":\"Whether the peer passed is considered 'trusted' by the OApp.\"}},\"lzReceive((uint32,bytes32,uint64),bytes32,bytes,address,bytes)\":{\"details\":\"Entry point for receiving messages or packets from the endpoint.Entry point for receiving msg/packet from the LayerZero endpoint.\",\"params\":{\"_executor\":\"The address of the executor for the received message.\",\"_extraData\":\"Additional arbitrary data provided by the corresponding executor.\",\"_guid\":\"The unique identifier for the received LayerZero message.\",\"_message\":\"The payload of the received message.\",\"_origin\":\"The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message.\"}},\"lzReceiveAndRevert(((uint32,bytes32,uint64),uint32,address,bytes32,uint256,address,bytes,bytes)[])\":{\"details\":\"Interface for pre-crime simulations. Always reverts at the end with the simulation results.WARNING: MUST revert at the end with the simulation results.Gives the preCrime implementation the ability to mock sending packets to the lzReceive function, WITHOUT actually executing them.\",\"params\":{\"_packets\":\"An array of InboundPacket objects representing received packets to be delivered.\"}},\"lzReceiveSimulate((uint32,bytes32,uint64),bytes32,bytes,address,bytes)\":{\"details\":\"Is effectively an internal function because msg.sender must be address(this). Allows resetting the call stack for 'internal' calls.\",\"params\":{\"_executor\":\"The executor address for the packet.\",\"_extraData\":\"Additional data for the packet.\",\"_guid\":\"The unique identifier of the packet.\",\"_message\":\"The message payload of the packet.\",\"_origin\":\"The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message.\"}},\"name()\":{\"details\":\"Returns the name of the token.\"},\"nextNonce(uint32,bytes32)\":{\"details\":\"_srcEid The source endpoint ID._sender The sender address.The path nonce starts from 1. If 0 is returned it means that there is NO nonce ordered enforcement.Is required by the off-chain executor to determine the OApp expects msg execution is ordered.This is also enforced by the OApp.By default this is NOT enabled. ie. nextNonce is hardcoded to return 0.\",\"returns\":{\"nonce\":\"The next nonce.\"}},\"oApp()\":{\"details\":\"Retrieves the address of the OApp contract.The simulator contract is the base contract for the OApp by default.If the simulator is a separate contract, override this function.\",\"returns\":{\"_0\":\"The address of the OApp contract.\"}},\"oAppVersion()\":{\"returns\":{\"receiverVersion\":\"The version of the OAppReceiver.sol implementation.\",\"senderVersion\":\"The version of the OAppSender.sol implementation.\"}},\"oftVersion()\":{\"details\":\"interfaceId: This specific interface ID is '0x02e49c2c'.version: Indicates a cross-chain compatible msg encoding with other OFTs.If a new feature is added to the OFT cross-chain msg encoding, the version will be incremented. ie. localOFT version(x,1) CAN send messages to remoteOFT version(x,1)\",\"returns\":{\"interfaceId\":\"The interface ID.\",\"version\":\"The version.\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"quoteOFT((uint32,bytes32,uint256,uint256,bytes,bytes,bytes))\":{\"params\":{\"_sendParam\":\"The parameters for the send operation.\"},\"returns\":{\"oftFeeDetails\":\"The details of OFT fees.\",\"oftLimit\":\"The OFT limit information.\",\"oftReceipt\":\"The OFT receipt information.\"}},\"quoteSend((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),bool)\":{\"details\":\"MessagingFee: LayerZero msg fee - nativeFee: The native fee. - lzTokenFee: The lzToken fee.\",\"params\":{\"_payInLzToken\":\"Flag indicating whether the caller is paying in the LZ token.\",\"_sendParam\":\"The parameters for the send() operation.\"},\"returns\":{\"msgFee\":\"The calculated LayerZero messaging fee from the send() operation.\"}},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"send((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),(uint256,uint256),address)\":{\"details\":\"Executes the send operation.MessagingReceipt: LayerZero msg receipt - guid: The unique identifier for the sent message. - nonce: The nonce of the sent message. - fee: The LayerZero fee incurred for the message.\",\"params\":{\"_fee\":\"The calculated fee for the send() operation. - nativeFee: The native fee. - lzTokenFee: The lzToken fee.\",\"_refundAddress\":\"The address to receive any excess funds.\",\"_sendParam\":\"The parameters for the send operation.\"},\"returns\":{\"msgReceipt\":\"The receipt for the send operation.\",\"oftReceipt\":\"The OFT receipt information.\"}},\"setDelegate(address)\":{\"details\":\"Only the owner/admin of the OApp can call this function.Provides the ability for a delegate to set configs, on behalf of the OApp, directly on the Endpoint contract.\",\"params\":{\"_delegate\":\"The address of the delegate to be set.\"}},\"setEnforcedOptions((uint32,uint16,bytes)[])\":{\"details\":\"Sets the enforced options for specific endpoint and message type combinations.Only the owner/admin of the OApp can call this function.Provides a way for the OApp to enforce things like paying for PreCrime, AND/OR minimum dst lzReceive gas amounts etc.These enforced options can vary as the potential options/execution on the remote may differ as per the msgType. eg. Amount of lzReceive() gas necessary to deliver a lzCompose() message adds overhead you dont want to pay if you are only making a standard LayerZero message ie. lzReceive() WITHOUT sendCompose().\",\"params\":{\"_enforcedOptions\":\"An array of EnforcedOptionParam structures specifying enforced options.\"}},\"setMsgInspector(address)\":{\"details\":\"Sets the message inspector address for the OFT.This is an optional contract that can be used to inspect both 'message' and 'options'.Set it to address(0) to disable it, or set it to a contract address to enable it.\",\"params\":{\"_msgInspector\":\"The address of the message inspector.\"}},\"setPeer(uint32,bytes32)\":{\"details\":\"Only the owner/admin of the OApp can call this function.Indicates that the peer is trusted to send LayerZero messages to this OApp.Set this to bytes32(0) to remove the peer address.Peer is a bytes32 to accommodate non-evm chains.\",\"params\":{\"_eid\":\"The endpoint ID.\",\"_peer\":\"The address of the peer to be associated with the corresponding endpoint.\"}},\"setPreCrime(address)\":{\"details\":\"Sets the preCrime contract address.\",\"params\":{\"_preCrime\":\"The address of the preCrime contract.\"}},\"sharedDecimals()\":{\"details\":\"Retrieves the shared decimals of the OFT.Sets an implicit cap on the amount of tokens, over uint64.max() will need some sort of outbound cap / totalSupply cap Lowest common decimal denominator between chains. Defaults to 6 decimal places to provide up to 18,446,744,073,709.551615 units (max uint64). For tokens exceeding this totalSupply(), they will need to override the sharedDecimals function with something smaller. ie. 4 sharedDecimals would be 1,844,674,407,370,955.1615\",\"returns\":{\"_0\":\"The shared decimals of the OFT.\"}},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"token()\":{\"details\":\"Retrieves the address of the underlying ERC20 implementation.In the case of OFT, address(this) and erc20 are the same contract.\",\"returns\":{\"_0\":\"The address of the OFT token.\"}},\"totalSupply()\":{\"details\":\"See {IERC20-totalSupply}.\"},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `value`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC20-transferFrom}. Skips emitting an {Approval} event indicating an allowance update. This is not required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve]. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `value`. - the caller must have allowance for ``from``'s tokens of at least `value`.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"title\":\"OFT Contract\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"allowInitializePath((uint32,bytes32,uint64))\":{\"notice\":\"Checks if the path initialization is allowed based on the provided origin.\"},\"approvalRequired()\":{\"notice\":\"Indicates whether the OFT contract requires approval of the 'token()' to send.\"},\"combineOptions(uint32,uint16,bytes)\":{\"notice\":\"Combines options for a given endpoint and message type.\"},\"endpoint()\":{\"notice\":\"Retrieves the LayerZero endpoint associated with the OApp.\"},\"isComposeMsgSender((uint32,bytes32,uint64),bytes,address)\":{\"notice\":\"Indicates whether an address is an approved composeMsg sender to the Endpoint.\"},\"nextNonce(uint32,bytes32)\":{\"notice\":\"Retrieves the next nonce for a given source endpoint and sender address.\"},\"oAppVersion()\":{\"notice\":\"Retrieves the OApp version information.\"},\"oftVersion()\":{\"notice\":\"Retrieves interfaceID and the version of the OFT.\"},\"peers(uint32)\":{\"notice\":\"Retrieves the peer (OApp) associated with a corresponding endpoint.\"},\"quoteOFT((uint32,bytes32,uint256,uint256,bytes,bytes,bytes))\":{\"notice\":\"Provides the fee breakdown and settings data for an OFT. Unused in the default implementation.\"},\"quoteSend((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),bool)\":{\"notice\":\"Provides a quote for the send() operation.\"},\"setDelegate(address)\":{\"notice\":\"Sets the delegate address for the OApp.\"},\"setPeer(uint32,bytes32)\":{\"notice\":\"Sets the peer address (OApp instance) for a corresponding endpoint.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/oft-evm/contracts/OFT.sol\":\"OFT\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\":{\"keccak256\":\"0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bacc29fd3866af71e59cb0bdc1cf82c882a4a7f4e2652fd413c9f12649762083\",\"dweb:/ipfs/QmZh2toLnrQDWaNYhS5K4NoW7Vxd2GdZx9KA77vKEDLAqs\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol\":{\"keccak256\":\"0x9641abba8d53b08bb517d1b74801dd15ea7b84d77a6719085bd96c8ea94e3ca0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://77415ae0820859e0faf3fabdce683cce9fa03ea026ae0f6fe081ef1c9205f933\",\"dweb:/ipfs/QmXd7APqoCunQ2jYy73AHvi5gsZofLpm3SzM6FPo7zRPfL\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol\":{\"keccak256\":\"0x5cf5f24751b4e3ea1c9c5ded07cedfdfd62566b6daaffcc0144733859c9dba0c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cae7e35007a714f007ea08045ef7c0cfa6c91fd2425b5028b2d49abad357a5f0\",\"dweb:/ipfs/QmcDBs5tsiyB35b8cwzWQWNnpkawb3uuHRaqE77Hxm2tve\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol\":{\"keccak256\":\"0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d8ff6a8a89297fa127f86b54e0db3eba1d6a6eeb4f6398d3c84d569665ac8f1b\",\"dweb:/ipfs/QmVSwhw6xFDrLRAX4RXaCM47yBaBtac4wf36DYEq6KCTvT\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol\":{\"keccak256\":\"0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7e1b245d58221d16d8b5e0f01ef3e289a24a7df1ace3b94239e4d5b954ad5927\",\"dweb:/ipfs/Qmappsgp7PCY9rSSNE9Cdn4BTRX591WfCSEgq2HxhA3z6S\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol\":{\"keccak256\":\"0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b18b23a1643fc6636c4ad9d9023e2e6ca2d3c2a4a046482d4655bff09950598d\",\"dweb:/ipfs/Qma6G5SqiovwrMPfgqTrRngK1HWW373Wkf9c6YP2NhXpPk\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol\":{\"keccak256\":\"0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5173fc9143bea314b159ca5a9adb5626659ef763bc598e27de5fa46efe3291a6\",\"dweb:/ipfs/QmSLFeMFPmVeGxT4sxRPW28ictjAS22M8rLeYRu9TXkA6D\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol\":{\"keccak256\":\"0xf1c07bc61e7b1dce195ed12d50f87980fbf2d63cac1326fd28287f55fe0ba625\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://060f10ff7afc33c1c2f2b4b5ba29231fd3c943146488084d0e4ab99fce991d97\",\"dweb:/ipfs/QmaSsefAqqEqtf8FgFUmDYMwTsAty3X1pqDb6SiFvry6B3\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol\":{\"keccak256\":\"0x2ebbcaaab3554edcd41b581f1a72ac1806afbfb8047d0d47ff098f9af30d6deb\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://2d4b2cf5c3b16dc76c6767f285b57c0af917972327b2be3f7cba5825402f5fc1\",\"dweb:/ipfs/QmQQWiHE2jKEDbjzGutSoZwtApSXYfLqZt5CxEpFj8xyvT\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol\":{\"keccak256\":\"0xc84cf1bf785977fe1fbe7566eef902c2db68d0e163813ebe6c34921754802680\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://de686666fc16fa432d4208d85cec87dc952faf3e481b683b9adf4b4610db4b09\",\"dweb:/ipfs/QmdmQeopzmxqRzi9DNB4EJDrYUXFfD7fUhnGhSni4QejUW\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OApp.sol\":{\"keccak256\":\"0xac362c4c291fad2f1511a968424b2e78a5ad502d1c867bd31da04be742aca8c5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e1f8cf9f20a2b683a53c3883972aa0676af97a24c678f461fae08e1fb056df28\",\"dweb:/ipfs/QmPpKNqda3rgxDwnq3XiRTtT3NfWeqrCJT6LwmhYd2AoT2\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppCore.sol\":{\"keccak256\":\"0x13a9c2d1d2c1f086b8624f2e84c4a4702212daae36f701d92bb915b535cbe4cc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://606515dd9193551bd2c94ac8c304f3776fafcc70e544ebf441f334658b2fd5f0\",\"dweb:/ipfs/QmZ88ey7DdZqV5taAoebabvszX5kdPMSrQCAmTteVdDtcH\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppReceiver.sol\":{\"keccak256\":\"0x0174e9f1ec4cefe4b5adc26c392269c699b9ff75965364e5b7264426a462c70b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cd12bb4fe5802c53911b9a0081a2ea10639b1f99925d1e5c1b1421d1bdc17075\",\"dweb:/ipfs/QmZonarwbKiEwQ8qoASKur2bbMjusdy9pqK9RCR4P1YPtc\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppSender.sol\":{\"keccak256\":\"0x518cf4adca601923ed4baa6619846a253ea32b8d8775f8bc1faa3dfac7f67c20\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d42b471418efadcc3577ef3fa9f8f504e8bed7db90c3b0c862038d8b29529eb2\",\"dweb:/ipfs/QmZETDQiJN4U92fmLKo8T9ZbdDf7BNBUUvo9H7M7GqAyFU\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppCore.sol\":{\"keccak256\":\"0x40e49f2de74506e1da5dcaed53a39853f691647f4ceb0fccc8f49a68d3f47c58\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4a1deb2a6a3eb1fb83936c9578469142bff470295f403d7d07d955a76be3adbd\",\"dweb:/ipfs/QmS9bjSfBaE4YhQ1PCQ1TknbEPbNfRXzBK9E7SaPGyiZEv\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppMsgInspector.sol\":{\"keccak256\":\"0x339654e699043c400cad92de209aa23855ce10211c31cf4114042cc5224d3b7c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5222afde59bf086f67b39e0288ad36343f4f5ed683d250533f256a5db956f37e\",\"dweb:/ipfs/QmbEG9EMYsK3Y6Cz7QbNtkW4kHGzMuhp2y2seSoL8v1A5b\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppOptionsType3.sol\":{\"keccak256\":\"0x9fc08a51e9d7c9c710c4eb26f84fe77228305ad7da63fa486ff24ebf2f3bc461\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2e2eea8a93bb9fc3f629767118b362e9b4bda2443ff95eae21c6a894f3e334cc\",\"dweb:/ipfs/QmPRRNjAB4U19ke4gr3U7ZJGtdcVBxdXVBZ2BmB1riFkP7\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppReceiver.sol\":{\"keccak256\":\"0xd26135185e19b3732746d4a9e2923e896f28dec8664bab161faea2ee26fcdc3d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c236dfe386b508be33c3a1a74ae1d4fd64b8c77ae207767e9dbed0f2429518a2\",\"dweb:/ipfs/QmXVbZJjfryTRti98uN3BMh5qh4K7NuEs1RSCoBjRoYd4q\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/libs/OAppOptionsType3.sol\":{\"keccak256\":\"0x5275636cd47e660a2fdf6c7fe9d41ff3cc866b785cc8a9d88c1b8ca983509f01\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a59dd6e3cfcc332f45a13d44585eb228588c4b9d470cbb19852df5753a4571af\",\"dweb:/ipfs/QmQJF1QU3MKhvmw42eq61u9z3bzKJJKMsEdQVYyPyYgTVS\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/precrime/OAppPreCrimeSimulator.sol\":{\"keccak256\":\"0x205a0abfd8b3c9af2740769f251381b84999b8e9347f3cd50de3ef8290a17750\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d9778d7d5da941af2029410b6ac212f915ea1785573ae2865b0ed8f779fcca82\",\"dweb:/ipfs/QmNkVEkfecvgubgnMuaT5fEfSExd95vz8DQHhpZtMrVRjH\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IOAppPreCrimeSimulator.sol\":{\"keccak256\":\"0x5d24db150949ea8e6437178e65a942e8c8b7f332e5daf32750f56b23b35b5bb2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1b1dcea0267234654126f926a1b405743606d7b5e49185b621afb7bd94d18b9a\",\"dweb:/ipfs/QmZ9BXQmbWJcrhHKuBs4yhNtbCV5WUpUY3AXSX7rkWwX6y\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IPreCrime.sol\":{\"keccak256\":\"0xc8d869f27ef8ceb2e13fdf6a70682fd4dee3f90c4924eb8e125bc1e66cb6af84\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://66bf49d59c14832ea0ddddcd12d512d4f9bd0fd254a1368442587bf3e77fe73e\",\"dweb:/ipfs/QmYUAvsyuUPiSYjbL4zVo6ZtiRSLCUPDvCesqgdZWbSGDg\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/precrime/libs/Packet.sol\":{\"keccak256\":\"0xcb2fb1c5b2eb3731de78b479b9c2ab3bba326fe0b0b3a008590f18e881e457a6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f70724c61d226743c2bd8ba6c09758805e4339780978949ce5b333c106be4edc\",\"dweb:/ipfs/QmX5rV9K1N7RgTz9xtf8CDG8SrYiitGAzFh9ec2tbnEec4\"]},\"node_modules/@layerzerolabs/oft-evm/contracts/OFT.sol\":{\"keccak256\":\"0xdc3582e4a20e02a79050c17058a1f1f42a4335d1a70be06c0a52a3fb05d4c89a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://83c4bd42e68528246860a952a92a79e51e3a789dac79a0b62576ab2f609de9c7\",\"dweb:/ipfs/QmVj1x655j1cFTnPT8uBaM71TCSrhFVwPdoFkAkWhhadns\"]},\"node_modules/@layerzerolabs/oft-evm/contracts/OFTCore.sol\":{\"keccak256\":\"0x9ce49b83455df600b52538e42028c422a322643f7ffb4f2814c72c3b970ea7be\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2ebbf79612c3f6cd4e2754ba55519df6b89504ab5514e3517cbd286d87143997\",\"dweb:/ipfs/QmQZpSPhNhF4MESb2if2DbcjC75xfuoEzDGXmeJKYZtHZ5\"]},\"node_modules/@layerzerolabs/oft-evm/contracts/interfaces/IOFT.sol\":{\"keccak256\":\"0x7ba6bb62fba7ee83451cfb0e727ddeef0e96b4388bd4e9ff0fc6ce103e1101c8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cfbd447f2e8a730bd46a14c3c3e6a0b2bf7446145579603a9793ba5ac1dd38b4\",\"dweb:/ipfs/QmZ4nx4iGrFmBHvYFgki5TXFdCHz4Co38hgdgwpRaM7NLs\"]},\"node_modules/@layerzerolabs/oft-evm/contracts/libs/OFTComposeMsgCodec.sol\":{\"keccak256\":\"0xaae73d6eb8b9561c43f1802f3c416c00ccd35f172b711f9781ccdf1b25a40db5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7beda2d895ae9e15269dd261a492ce0a29b498e5bebf088ed6f2ae6a5185719e\",\"dweb:/ipfs/QmScog2tW1YVyEPLVcUVqGGc85ub46sA28nUKNzFEZcFdK\"]},\"node_modules/@layerzerolabs/oft-evm/contracts/libs/OFTMsgCodec.sol\":{\"keccak256\":\"0x5358948017669c03e157f871d8c38e988f9004dbd0801ad3119d2487f0d40b0b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c7d0f1bf32a80af9b99cd93fefa373dac5c27463351cc35f62b9c2439d5b9258\",\"dweb:/ipfs/Qmb81qoxzMwV3PkPANRvnXf4fJTsZ5sjJ8r2df9V2vhh6q\"]},\"node_modules/@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol\":{\"keccak256\":\"0x9b6b3e7803bc5f2f8cd7ad57db8ac1def61a9930a5a3107df4882e028a9605d7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://da62d6be1f5c6edf577f0cb45666a8aa9c2086a4bac87d95d65f02e2f4c36a4b\",\"dweb:/ipfs/QmNkpvBpoCMvX8JwAFNSc5XxJ2q5BXJpL5L1txb4QkqVFF\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC165.sol\":{\"keccak256\":\"0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://11fea9f8bc98949ac6709f0c1699db7430d2948137aa94d5a9e95a91f61a710a\",\"dweb:/ipfs/QmQdfRXxQjwP6yn3DVo1GHPpriKNcFghSPi94Z1oKEFUNS\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC20.sol\":{\"keccak256\":\"0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a2608291cb038b388d80b79a06b6118a42f7894ff67b7da10ec0dbbf5b2973ba\",\"dweb:/ipfs/QmWohqcBLbcxmA4eGPhZDXe5RYMMEEpFq22nfkaUMvTfw1\"]},\"node_modules/@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x880da465c203cec76b10d72dbd87c80f387df4102274f23eea1f9c9b0918792b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://399594cd8bb0143bc9e55e0f1d071d0d8c850a394fb7a319d50edd55d9ed822b\",\"dweb:/ipfs/QmbPZzgtT6LEm9CMqWfagQFwETbV1ztpECBB1DtQHrKiRz\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0xbf61ab2ae1d575a17ea58fbb99ca232baddcc4e0eeea180e84cbc74b0c348b31\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4e0968705bad99747a8e5288aa008678c2be2f471f919dce3925a3cc4f1dee09\",\"dweb:/ipfs/QmbAFnCQfo4tw6ssfQSjhA5LzwHWNNryXN8bX7ty8jiqqn\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db\",\"dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x70f2f713b13b7ce4610bcd0ac9fec0f3cc43693b043abcb8dc40a42a726eb330\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c13d13304ac79a83ab1c30168967d19e2203342ebbd6a9bbce4db7550522dcbf\",\"dweb:/ipfs/QmeN5jKMN2vw5bhacr6tkg78afbTTZUeaacNHqjWt4Ew1r\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0xca2ae13e0610f6a99238dd00b97bd786bc92732dae6d6b9d61f573ec51018310\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://75f8c71ce0c91c40dd5f249ace0b7d8270f8f1767231bcf71490f7157d6ba862\",\"dweb:/ipfs/QmYXgxeDyFHvz3JsXxLEYN6GNUR44ThHeFj5XkpkgMoG4w\"]},\"node_modules/@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0x9d8da059267bac779a2dbbb9a26c2acf00ca83085e105d62d5d4ef96054a47f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c78e2aa4313323cecd1ef12a8d6265b96beee1a199923abf55d9a2a9e291ad23\",\"dweb:/ipfs/QmUTs2KStXucZezzFo3EYeqYu47utu56qrF7jj1Gue65vb\"]},\"node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"node_modules/@openzeppelin/contracts/utils/Errors.sol\":{\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf\",\"dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB\"]},\"node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { - "inputs": [ - { "internalType": "address", "name": "spender", "type": "address" }, - { - "internalType": "uint256", - "name": "allowance", - "type": "uint256" - }, - { "internalType": "uint256", "name": "needed", "type": "uint256" } - ], - "type": "error", - "name": "ERC20InsufficientAllowance" - }, - { - "inputs": [ - { "internalType": "address", "name": "sender", "type": "address" }, - { "internalType": "uint256", "name": "balance", "type": "uint256" }, - { "internalType": "uint256", "name": "needed", "type": "uint256" } - ], - "type": "error", - "name": "ERC20InsufficientBalance" - }, - { - "inputs": [ - { "internalType": "address", "name": "approver", "type": "address" } - ], - "type": "error", - "name": "ERC20InvalidApprover" - }, - { - "inputs": [ - { "internalType": "address", "name": "receiver", "type": "address" } - ], - "type": "error", - "name": "ERC20InvalidReceiver" - }, - { - "inputs": [ - { "internalType": "address", "name": "sender", "type": "address" } - ], - "type": "error", - "name": "ERC20InvalidSender" - }, - { - "inputs": [ - { "internalType": "address", "name": "spender", "type": "address" } - ], - "type": "error", - "name": "ERC20InvalidSpender" - }, - { "inputs": [], "type": "error", "name": "InvalidDelegate" }, - { "inputs": [], "type": "error", "name": "InvalidEndpointCall" }, - { "inputs": [], "type": "error", "name": "InvalidLocalDecimals" }, - { - "inputs": [ - { "internalType": "bytes", "name": "options", "type": "bytes" } - ], - "type": "error", - "name": "InvalidOptions" - }, - { "inputs": [], "type": "error", "name": "LzTokenUnavailable" }, - { - "inputs": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" } - ], - "type": "error", - "name": "NoPeer" - }, - { - "inputs": [ - { "internalType": "uint256", "name": "msgValue", "type": "uint256" } - ], - "type": "error", - "name": "NotEnoughNative" - }, - { - "inputs": [ - { "internalType": "address", "name": "addr", "type": "address" } - ], - "type": "error", - "name": "OnlyEndpoint" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" }, - { "internalType": "bytes32", "name": "sender", "type": "bytes32" } - ], - "type": "error", - "name": "OnlyPeer" - }, - { "inputs": [], "type": "error", "name": "OnlySelf" }, - { - "inputs": [ - { "internalType": "address", "name": "owner", "type": "address" } - ], - "type": "error", - "name": "OwnableInvalidOwner" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "type": "error", - "name": "OwnableUnauthorizedAccount" - }, - { - "inputs": [ - { "internalType": "address", "name": "token", "type": "address" } - ], - "type": "error", - "name": "SafeERC20FailedOperation" - }, - { - "inputs": [ - { "internalType": "bytes", "name": "result", "type": "bytes" } - ], - "type": "error", - "name": "SimulationResult" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "amountLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minAmountLD", - "type": "uint256" - } - ], - "type": "error", - "name": "SlippageExceeded" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address", - "indexed": true - }, - { - "internalType": "address", - "name": "spender", - "type": "address", - "indexed": true - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "Approval", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "struct EnforcedOptionParam[]", - "name": "_enforcedOptions", - "type": "tuple[]", - "components": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" }, - { - "internalType": "uint16", - "name": "msgType", - "type": "uint16" - }, - { "internalType": "bytes", "name": "options", "type": "bytes" } - ], - "indexed": false - } - ], - "type": "event", - "name": "EnforcedOptionSet", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "inspector", - "type": "address", - "indexed": false - } - ], - "type": "event", - "name": "MsgInspectorSet", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "guid", - "type": "bytes32", - "indexed": true - }, - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32", - "indexed": false - }, - { - "internalType": "address", - "name": "toAddress", - "type": "address", - "indexed": true - }, - { - "internalType": "uint256", - "name": "amountReceivedLD", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "OFTReceived", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "guid", - "type": "bytes32", - "indexed": true - }, - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32", - "indexed": false - }, - { - "internalType": "address", - "name": "fromAddress", - "type": "address", - "indexed": true - }, - { - "internalType": "uint256", - "name": "amountSentLD", - "type": "uint256", - "indexed": false - }, - { - "internalType": "uint256", - "name": "amountReceivedLD", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "OFTSent", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "previousOwner", - "type": "address", - "indexed": true - }, - { - "internalType": "address", - "name": "newOwner", - "type": "address", - "indexed": true - } - ], - "type": "event", - "name": "OwnershipTransferred", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "eid", - "type": "uint32", - "indexed": false - }, - { - "internalType": "bytes32", - "name": "peer", - "type": "bytes32", - "indexed": false - } - ], - "type": "event", - "name": "PeerSet", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "preCrimeAddress", - "type": "address", - "indexed": false - } - ], - "type": "event", - "name": "PreCrimeSet", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address", - "indexed": true - }, - { - "internalType": "address", - "name": "to", - "type": "address", - "indexed": true - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "Transfer", - "anonymous": false - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "SEND", - "outputs": [ - { "internalType": "uint16", "name": "", "type": "uint16" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "SEND_AND_CALL", - "outputs": [ - { "internalType": "uint16", "name": "", "type": "uint16" } - ] - }, - { - "inputs": [ - { - "internalType": "struct Origin", - "name": "origin", - "type": "tuple", - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { "internalType": "uint64", "name": "nonce", "type": "uint64" } - ] - } - ], - "stateMutability": "view", - "type": "function", - "name": "allowInitializePath", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "address", "name": "owner", "type": "address" }, - { "internalType": "address", "name": "spender", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "allowance", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ] - }, - { - "inputs": [], - "stateMutability": "pure", - "type": "function", - "name": "approvalRequired", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "address", "name": "spender", "type": "address" }, - { "internalType": "uint256", "name": "value", "type": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "approve", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "balanceOf", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ] - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { "internalType": "uint16", "name": "_msgType", "type": "uint16" }, - { - "internalType": "bytes", - "name": "_extraOptions", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function", - "name": "combineOptions", - "outputs": [{ "internalType": "bytes", "name": "", "type": "bytes" }] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "decimalConversionRate", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "decimals", - "outputs": [{ "internalType": "uint8", "name": "", "type": "uint8" }] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "endpoint", - "outputs": [ - { - "internalType": "contract ILayerZeroEndpointV2", - "name": "", - "type": "address" - } - ] - }, - { - "inputs": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" }, - { "internalType": "uint16", "name": "msgType", "type": "uint16" } - ], - "stateMutability": "view", - "type": "function", - "name": "enforcedOptions", - "outputs": [ - { - "internalType": "bytes", - "name": "enforcedOption", - "type": "bytes" - } - ] - }, - { - "inputs": [ - { - "internalType": "struct Origin", - "name": "", - "type": "tuple", - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { "internalType": "uint64", "name": "nonce", "type": "uint64" } - ] - }, - { "internalType": "bytes", "name": "", "type": "bytes" }, - { "internalType": "address", "name": "_sender", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "isComposeMsgSender", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { "internalType": "bytes32", "name": "_peer", "type": "bytes32" } - ], - "stateMutability": "view", - "type": "function", - "name": "isPeer", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { - "internalType": "struct Origin", - "name": "_origin", - "type": "tuple", - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { "internalType": "uint64", "name": "nonce", "type": "uint64" } - ] - }, - { "internalType": "bytes32", "name": "_guid", "type": "bytes32" }, - { "internalType": "bytes", "name": "_message", "type": "bytes" }, - { - "internalType": "address", - "name": "_executor", - "type": "address" - }, - { "internalType": "bytes", "name": "_extraData", "type": "bytes" } - ], - "stateMutability": "payable", - "type": "function", - "name": "lzReceive" - }, - { - "inputs": [ - { - "internalType": "struct InboundPacket[]", - "name": "_packets", - "type": "tuple[]", - "components": [ - { - "internalType": "struct Origin", - "name": "origin", - "type": "tuple", - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - } - ] - }, - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "guid", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "address", - "name": "executor", - "type": "address" - }, - { "internalType": "bytes", "name": "message", "type": "bytes" }, - { - "internalType": "bytes", - "name": "extraData", - "type": "bytes" - } - ] - } - ], - "stateMutability": "payable", - "type": "function", - "name": "lzReceiveAndRevert" - }, - { - "inputs": [ - { - "internalType": "struct Origin", - "name": "_origin", - "type": "tuple", - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { "internalType": "uint64", "name": "nonce", "type": "uint64" } - ] - }, - { "internalType": "bytes32", "name": "_guid", "type": "bytes32" }, - { "internalType": "bytes", "name": "_message", "type": "bytes" }, - { - "internalType": "address", - "name": "_executor", - "type": "address" - }, - { "internalType": "bytes", "name": "_extraData", "type": "bytes" } - ], - "stateMutability": "payable", - "type": "function", - "name": "lzReceiveSimulate" - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "msgInspector", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "name", - "outputs": [ - { "internalType": "string", "name": "", "type": "string" } - ] - }, - { - "inputs": [ - { "internalType": "uint32", "name": "", "type": "uint32" }, - { "internalType": "bytes32", "name": "", "type": "bytes32" } - ], - "stateMutability": "view", - "type": "function", - "name": "nextNonce", - "outputs": [ - { "internalType": "uint64", "name": "nonce", "type": "uint64" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "oApp", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ] - }, - { - "inputs": [], - "stateMutability": "pure", - "type": "function", - "name": "oAppVersion", - "outputs": [ - { - "internalType": "uint64", - "name": "senderVersion", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "receiverVersion", - "type": "uint64" - } - ] - }, - { - "inputs": [], - "stateMutability": "pure", - "type": "function", - "name": "oftVersion", - "outputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - }, - { "internalType": "uint64", "name": "version", "type": "uint64" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "owner", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ] - }, - { - "inputs": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" } - ], - "stateMutability": "view", - "type": "function", - "name": "peers", - "outputs": [ - { "internalType": "bytes32", "name": "peer", "type": "bytes32" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "preCrime", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ] - }, - { - "inputs": [ - { - "internalType": "struct SendParam", - "name": "_sendParam", - "type": "tuple", - "components": [ - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { "internalType": "bytes32", "name": "to", "type": "bytes32" }, - { - "internalType": "uint256", - "name": "amountLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minAmountLD", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "extraOptions", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "composeMsg", - "type": "bytes" - }, - { "internalType": "bytes", "name": "oftCmd", "type": "bytes" } - ] - } - ], - "stateMutability": "view", - "type": "function", - "name": "quoteOFT", - "outputs": [ - { - "internalType": "struct OFTLimit", - "name": "oftLimit", - "type": "tuple", - "components": [ - { - "internalType": "uint256", - "name": "minAmountLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxAmountLD", - "type": "uint256" - } - ] - }, - { - "internalType": "struct OFTFeeDetail[]", - "name": "oftFeeDetails", - "type": "tuple[]", - "components": [ - { - "internalType": "int256", - "name": "feeAmountLD", - "type": "int256" - }, - { - "internalType": "string", - "name": "description", - "type": "string" - } - ] - }, - { - "internalType": "struct OFTReceipt", - "name": "oftReceipt", - "type": "tuple", - "components": [ - { - "internalType": "uint256", - "name": "amountSentLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "amountReceivedLD", - "type": "uint256" - } - ] - } - ] - }, - { - "inputs": [ - { - "internalType": "struct SendParam", - "name": "_sendParam", - "type": "tuple", - "components": [ - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { "internalType": "bytes32", "name": "to", "type": "bytes32" }, - { - "internalType": "uint256", - "name": "amountLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minAmountLD", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "extraOptions", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "composeMsg", - "type": "bytes" - }, - { "internalType": "bytes", "name": "oftCmd", "type": "bytes" } - ] - }, - { "internalType": "bool", "name": "_payInLzToken", "type": "bool" } - ], - "stateMutability": "view", - "type": "function", - "name": "quoteSend", - "outputs": [ - { - "internalType": "struct MessagingFee", - "name": "msgFee", - "type": "tuple", - "components": [ - { - "internalType": "uint256", - "name": "nativeFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "lzTokenFee", - "type": "uint256" - } - ] - } - ] - }, - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "function", - "name": "renounceOwnership" - }, - { - "inputs": [ - { - "internalType": "struct SendParam", - "name": "_sendParam", - "type": "tuple", - "components": [ - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { "internalType": "bytes32", "name": "to", "type": "bytes32" }, - { - "internalType": "uint256", - "name": "amountLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minAmountLD", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "extraOptions", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "composeMsg", - "type": "bytes" - }, - { "internalType": "bytes", "name": "oftCmd", "type": "bytes" } - ] - }, - { - "internalType": "struct MessagingFee", - "name": "_fee", - "type": "tuple", - "components": [ - { - "internalType": "uint256", - "name": "nativeFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "lzTokenFee", - "type": "uint256" - } - ] - }, - { - "internalType": "address", - "name": "_refundAddress", - "type": "address" - } - ], - "stateMutability": "payable", - "type": "function", - "name": "send", - "outputs": [ - { - "internalType": "struct MessagingReceipt", - "name": "msgReceipt", - "type": "tuple", - "components": [ - { - "internalType": "bytes32", - "name": "guid", - "type": "bytes32" - }, - { "internalType": "uint64", "name": "nonce", "type": "uint64" }, - { - "internalType": "struct MessagingFee", - "name": "fee", - "type": "tuple", - "components": [ - { - "internalType": "uint256", - "name": "nativeFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "lzTokenFee", - "type": "uint256" - } - ] - } - ] - }, - { - "internalType": "struct OFTReceipt", - "name": "oftReceipt", - "type": "tuple", - "components": [ - { - "internalType": "uint256", - "name": "amountSentLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "amountReceivedLD", - "type": "uint256" - } - ] - } - ] - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_delegate", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setDelegate" - }, - { - "inputs": [ - { - "internalType": "struct EnforcedOptionParam[]", - "name": "_enforcedOptions", - "type": "tuple[]", - "components": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" }, - { - "internalType": "uint16", - "name": "msgType", - "type": "uint16" - }, - { "internalType": "bytes", "name": "options", "type": "bytes" } - ] - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setEnforcedOptions" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_msgInspector", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setMsgInspector" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { "internalType": "bytes32", "name": "_peer", "type": "bytes32" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setPeer" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_preCrime", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setPreCrime" - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "sharedDecimals", - "outputs": [{ "internalType": "uint8", "name": "", "type": "uint8" }] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "symbol", - "outputs": [ - { "internalType": "string", "name": "", "type": "string" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "token", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "totalSupply", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "to", "type": "address" }, - { "internalType": "uint256", "name": "value", "type": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "transfer", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "address", "name": "from", "type": "address" }, - { "internalType": "address", "name": "to", "type": "address" }, - { "internalType": "uint256", "name": "value", "type": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "transferFrom", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "address", "name": "newOwner", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "transferOwnership" - } - ], - "devdoc": { - "kind": "dev", - "methods": { - "allowInitializePath((uint32,bytes32,uint64))": { - "details": "This indicates to the endpoint that the OApp has enabled msgs for this particular path to be received.This defaults to assuming if a peer has been set, its initialized. Can be overridden by the OApp if there is other logic to determine this.", - "params": { - "origin": "The origin information containing the source endpoint and sender address." - }, - "returns": { "_0": "Whether the path has been initialized." } - }, - "allowance(address,address)": { - "details": "See {IERC20-allowance}." - }, - "approvalRequired()": { - "details": "In the case of OFT where the contract IS the token, approval is NOT required.", - "returns": { - "_0": "requiresApproval Needs approval of the underlying token implementation." - } - }, - "approve(address,uint256)": { - "details": "See {IERC20-approve}. NOTE: If `value` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address." - }, - "balanceOf(address)": { "details": "See {IERC20-balanceOf}." }, - "combineOptions(uint32,uint16,bytes)": { - "details": "If there is an enforced lzReceive option: - {gasLimit: 200k, msg.value: 1 ether} AND a caller supplies a lzReceive option: {gasLimit: 100k, msg.value: 0.5 ether} - The resulting options will be {gasLimit: 300k, msg.value: 1.5 ether} when the message is executed on the remote lzReceive() function.This presence of duplicated options is handled off-chain in the verifier/executor.", - "params": { - "_eid": "The endpoint ID.", - "_extraOptions": "Additional options passed by the caller.", - "_msgType": "The OAPP message type." - }, - "returns": { - "_0": "options The combination of caller specified options AND enforced options." - } - }, - "constructor": { - "details": "Constructor for the OFT contract.", - "params": { - "_delegate": "The delegate capable of making OApp configurations inside of the endpoint.", - "_lzEndpoint": "The LayerZero endpoint address.", - "_name": "The name of the OFT.", - "_symbol": "The symbol of the OFT." - } - }, - "decimals()": { - "details": "Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the default value returned by this function, unless it's overridden. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}." - }, - "isComposeMsgSender((uint32,bytes32,uint64),bytes,address)": { - "details": "_origin The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message._message The lzReceive payload.Applications can optionally choose to implement separate composeMsg senders that are NOT the bridging layer.The default sender IS the OAppReceiver implementer.", - "params": { "_sender": "The sender address." }, - "returns": { "_0": "isSender Is a valid sender." } - }, - "isPeer(uint32,bytes32)": { - "details": "Check if the peer is considered 'trusted' by the OApp.Enables OAppPreCrimeSimulator to check whether a potential Inbound Packet is from a trusted source.", - "params": { - "_eid": "The endpoint ID to check.", - "_peer": "The peer to check." - }, - "returns": { - "_0": "Whether the peer passed is considered 'trusted' by the OApp." - } - }, - "lzReceive((uint32,bytes32,uint64),bytes32,bytes,address,bytes)": { - "details": "Entry point for receiving messages or packets from the endpoint.Entry point for receiving msg/packet from the LayerZero endpoint.", - "params": { - "_executor": "The address of the executor for the received message.", - "_extraData": "Additional arbitrary data provided by the corresponding executor.", - "_guid": "The unique identifier for the received LayerZero message.", - "_message": "The payload of the received message.", - "_origin": "The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message." - } - }, - "lzReceiveAndRevert(((uint32,bytes32,uint64),uint32,address,bytes32,uint256,address,bytes,bytes)[])": { - "details": "Interface for pre-crime simulations. Always reverts at the end with the simulation results.WARNING: MUST revert at the end with the simulation results.Gives the preCrime implementation the ability to mock sending packets to the lzReceive function, WITHOUT actually executing them.", - "params": { - "_packets": "An array of InboundPacket objects representing received packets to be delivered." - } - }, - "lzReceiveSimulate((uint32,bytes32,uint64),bytes32,bytes,address,bytes)": { - "details": "Is effectively an internal function because msg.sender must be address(this). Allows resetting the call stack for 'internal' calls.", - "params": { - "_executor": "The executor address for the packet.", - "_extraData": "Additional data for the packet.", - "_guid": "The unique identifier of the packet.", - "_message": "The message payload of the packet.", - "_origin": "The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message." - } - }, - "name()": { "details": "Returns the name of the token." }, - "nextNonce(uint32,bytes32)": { - "details": "_srcEid The source endpoint ID._sender The sender address.The path nonce starts from 1. If 0 is returned it means that there is NO nonce ordered enforcement.Is required by the off-chain executor to determine the OApp expects msg execution is ordered.This is also enforced by the OApp.By default this is NOT enabled. ie. nextNonce is hardcoded to return 0.", - "returns": { "nonce": "The next nonce." } - }, - "oApp()": { - "details": "Retrieves the address of the OApp contract.The simulator contract is the base contract for the OApp by default.If the simulator is a separate contract, override this function.", - "returns": { "_0": "The address of the OApp contract." } - }, - "oAppVersion()": { - "returns": { - "receiverVersion": "The version of the OAppReceiver.sol implementation.", - "senderVersion": "The version of the OAppSender.sol implementation." - } - }, - "oftVersion()": { - "details": "interfaceId: This specific interface ID is '0x02e49c2c'.version: Indicates a cross-chain compatible msg encoding with other OFTs.If a new feature is added to the OFT cross-chain msg encoding, the version will be incremented. ie. localOFT version(x,1) CAN send messages to remoteOFT version(x,1)", - "returns": { - "interfaceId": "The interface ID.", - "version": "The version." - } - }, - "owner()": { "details": "Returns the address of the current owner." }, - "quoteOFT((uint32,bytes32,uint256,uint256,bytes,bytes,bytes))": { - "params": { - "_sendParam": "The parameters for the send operation." - }, - "returns": { - "oftFeeDetails": "The details of OFT fees.", - "oftLimit": "The OFT limit information.", - "oftReceipt": "The OFT receipt information." - } - }, - "quoteSend((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),bool)": { - "details": "MessagingFee: LayerZero msg fee - nativeFee: The native fee. - lzTokenFee: The lzToken fee.", - "params": { - "_payInLzToken": "Flag indicating whether the caller is paying in the LZ token.", - "_sendParam": "The parameters for the send() operation." - }, - "returns": { - "msgFee": "The calculated LayerZero messaging fee from the send() operation." - } - }, - "renounceOwnership()": { - "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner." - }, - "send((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),(uint256,uint256),address)": { - "details": "Executes the send operation.MessagingReceipt: LayerZero msg receipt - guid: The unique identifier for the sent message. - nonce: The nonce of the sent message. - fee: The LayerZero fee incurred for the message.", - "params": { - "_fee": "The calculated fee for the send() operation. - nativeFee: The native fee. - lzTokenFee: The lzToken fee.", - "_refundAddress": "The address to receive any excess funds.", - "_sendParam": "The parameters for the send operation." - }, - "returns": { - "msgReceipt": "The receipt for the send operation.", - "oftReceipt": "The OFT receipt information." - } - }, - "setDelegate(address)": { - "details": "Only the owner/admin of the OApp can call this function.Provides the ability for a delegate to set configs, on behalf of the OApp, directly on the Endpoint contract.", - "params": { "_delegate": "The address of the delegate to be set." } - }, - "setEnforcedOptions((uint32,uint16,bytes)[])": { - "details": "Sets the enforced options for specific endpoint and message type combinations.Only the owner/admin of the OApp can call this function.Provides a way for the OApp to enforce things like paying for PreCrime, AND/OR minimum dst lzReceive gas amounts etc.These enforced options can vary as the potential options/execution on the remote may differ as per the msgType. eg. Amount of lzReceive() gas necessary to deliver a lzCompose() message adds overhead you dont want to pay if you are only making a standard LayerZero message ie. lzReceive() WITHOUT sendCompose().", - "params": { - "_enforcedOptions": "An array of EnforcedOptionParam structures specifying enforced options." - } - }, - "setMsgInspector(address)": { - "details": "Sets the message inspector address for the OFT.This is an optional contract that can be used to inspect both 'message' and 'options'.Set it to address(0) to disable it, or set it to a contract address to enable it.", - "params": { - "_msgInspector": "The address of the message inspector." - } - }, - "setPeer(uint32,bytes32)": { - "details": "Only the owner/admin of the OApp can call this function.Indicates that the peer is trusted to send LayerZero messages to this OApp.Set this to bytes32(0) to remove the peer address.Peer is a bytes32 to accommodate non-evm chains.", - "params": { - "_eid": "The endpoint ID.", - "_peer": "The address of the peer to be associated with the corresponding endpoint." - } - }, - "setPreCrime(address)": { - "details": "Sets the preCrime contract address.", - "params": { "_preCrime": "The address of the preCrime contract." } - }, - "sharedDecimals()": { - "details": "Retrieves the shared decimals of the OFT.Sets an implicit cap on the amount of tokens, over uint64.max() will need some sort of outbound cap / totalSupply cap Lowest common decimal denominator between chains. Defaults to 6 decimal places to provide up to 18,446,744,073,709.551615 units (max uint64). For tokens exceeding this totalSupply(), they will need to override the sharedDecimals function with something smaller. ie. 4 sharedDecimals would be 1,844,674,407,370,955.1615", - "returns": { "_0": "The shared decimals of the OFT." } - }, - "symbol()": { - "details": "Returns the symbol of the token, usually a shorter version of the name." - }, - "token()": { - "details": "Retrieves the address of the underlying ERC20 implementation.In the case of OFT, address(this) and erc20 are the same contract.", - "returns": { "_0": "The address of the OFT token." } - }, - "totalSupply()": { "details": "See {IERC20-totalSupply}." }, - "transfer(address,uint256)": { - "details": "See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `value`." - }, - "transferFrom(address,address,uint256)": { - "details": "See {IERC20-transferFrom}. Skips emitting an {Approval} event indicating an allowance update. This is not required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve]. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `value`. - the caller must have allowance for ``from``'s tokens of at least `value`." - }, - "transferOwnership(address)": { - "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." - } - }, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": { - "allowInitializePath((uint32,bytes32,uint64))": { - "notice": "Checks if the path initialization is allowed based on the provided origin." - }, - "approvalRequired()": { - "notice": "Indicates whether the OFT contract requires approval of the 'token()' to send." - }, - "combineOptions(uint32,uint16,bytes)": { - "notice": "Combines options for a given endpoint and message type." - }, - "endpoint()": { - "notice": "Retrieves the LayerZero endpoint associated with the OApp." - }, - "isComposeMsgSender((uint32,bytes32,uint64),bytes,address)": { - "notice": "Indicates whether an address is an approved composeMsg sender to the Endpoint." - }, - "nextNonce(uint32,bytes32)": { - "notice": "Retrieves the next nonce for a given source endpoint and sender address." - }, - "oAppVersion()": { - "notice": "Retrieves the OApp version information." - }, - "oftVersion()": { - "notice": "Retrieves interfaceID and the version of the OFT." - }, - "peers(uint32)": { - "notice": "Retrieves the peer (OApp) associated with a corresponding endpoint." - }, - "quoteOFT((uint32,bytes32,uint256,uint256,bytes,bytes,bytes))": { - "notice": "Provides the fee breakdown and settings data for an OFT. Unused in the default implementation." - }, - "quoteSend((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),bool)": { - "notice": "Provides a quote for the send() operation." - }, - "setDelegate(address)": { - "notice": "Sets the delegate address for the OApp." - }, - "setPeer(uint32,bytes32)": { - "notice": "Sets the peer address (OApp instance) for a corresponding endpoint." - } - }, - "version": 1 - } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/oft-evm/contracts/OFT.sol": "OFT" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol": { - "keccak256": "0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3", - "urls": [ - "bzz-raw://bacc29fd3866af71e59cb0bdc1cf82c882a4a7f4e2652fd413c9f12649762083", - "dweb:/ipfs/QmZh2toLnrQDWaNYhS5K4NoW7Vxd2GdZx9KA77vKEDLAqs" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol": { - "keccak256": "0x9641abba8d53b08bb517d1b74801dd15ea7b84d77a6719085bd96c8ea94e3ca0", - "urls": [ - "bzz-raw://77415ae0820859e0faf3fabdce683cce9fa03ea026ae0f6fe081ef1c9205f933", - "dweb:/ipfs/QmXd7APqoCunQ2jYy73AHvi5gsZofLpm3SzM6FPo7zRPfL" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol": { - "keccak256": "0x5cf5f24751b4e3ea1c9c5ded07cedfdfd62566b6daaffcc0144733859c9dba0c", - "urls": [ - "bzz-raw://cae7e35007a714f007ea08045ef7c0cfa6c91fd2425b5028b2d49abad357a5f0", - "dweb:/ipfs/QmcDBs5tsiyB35b8cwzWQWNnpkawb3uuHRaqE77Hxm2tve" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol": { - "keccak256": "0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc", - "urls": [ - "bzz-raw://d8ff6a8a89297fa127f86b54e0db3eba1d6a6eeb4f6398d3c84d569665ac8f1b", - "dweb:/ipfs/QmVSwhw6xFDrLRAX4RXaCM47yBaBtac4wf36DYEq6KCTvT" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol": { - "keccak256": "0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972", - "urls": [ - "bzz-raw://7e1b245d58221d16d8b5e0f01ef3e289a24a7df1ace3b94239e4d5b954ad5927", - "dweb:/ipfs/Qmappsgp7PCY9rSSNE9Cdn4BTRX591WfCSEgq2HxhA3z6S" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol": { - "keccak256": "0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901", - "urls": [ - "bzz-raw://b18b23a1643fc6636c4ad9d9023e2e6ca2d3c2a4a046482d4655bff09950598d", - "dweb:/ipfs/Qma6G5SqiovwrMPfgqTrRngK1HWW373Wkf9c6YP2NhXpPk" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol": { - "keccak256": "0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e", - "urls": [ - "bzz-raw://5173fc9143bea314b159ca5a9adb5626659ef763bc598e27de5fa46efe3291a6", - "dweb:/ipfs/QmSLFeMFPmVeGxT4sxRPW28ictjAS22M8rLeYRu9TXkA6D" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol": { - "keccak256": "0xf1c07bc61e7b1dce195ed12d50f87980fbf2d63cac1326fd28287f55fe0ba625", - "urls": [ - "bzz-raw://060f10ff7afc33c1c2f2b4b5ba29231fd3c943146488084d0e4ab99fce991d97", - "dweb:/ipfs/QmaSsefAqqEqtf8FgFUmDYMwTsAty3X1pqDb6SiFvry6B3" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol": { - "keccak256": "0x2ebbcaaab3554edcd41b581f1a72ac1806afbfb8047d0d47ff098f9af30d6deb", - "urls": [ - "bzz-raw://2d4b2cf5c3b16dc76c6767f285b57c0af917972327b2be3f7cba5825402f5fc1", - "dweb:/ipfs/QmQQWiHE2jKEDbjzGutSoZwtApSXYfLqZt5CxEpFj8xyvT" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol": { - "keccak256": "0xc84cf1bf785977fe1fbe7566eef902c2db68d0e163813ebe6c34921754802680", - "urls": [ - "bzz-raw://de686666fc16fa432d4208d85cec87dc952faf3e481b683b9adf4b4610db4b09", - "dweb:/ipfs/QmdmQeopzmxqRzi9DNB4EJDrYUXFfD7fUhnGhSni4QejUW" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OApp.sol": { - "keccak256": "0xac362c4c291fad2f1511a968424b2e78a5ad502d1c867bd31da04be742aca8c5", - "urls": [ - "bzz-raw://e1f8cf9f20a2b683a53c3883972aa0676af97a24c678f461fae08e1fb056df28", - "dweb:/ipfs/QmPpKNqda3rgxDwnq3XiRTtT3NfWeqrCJT6LwmhYd2AoT2" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppCore.sol": { - "keccak256": "0x13a9c2d1d2c1f086b8624f2e84c4a4702212daae36f701d92bb915b535cbe4cc", - "urls": [ - "bzz-raw://606515dd9193551bd2c94ac8c304f3776fafcc70e544ebf441f334658b2fd5f0", - "dweb:/ipfs/QmZ88ey7DdZqV5taAoebabvszX5kdPMSrQCAmTteVdDtcH" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppReceiver.sol": { - "keccak256": "0x0174e9f1ec4cefe4b5adc26c392269c699b9ff75965364e5b7264426a462c70b", - "urls": [ - "bzz-raw://cd12bb4fe5802c53911b9a0081a2ea10639b1f99925d1e5c1b1421d1bdc17075", - "dweb:/ipfs/QmZonarwbKiEwQ8qoASKur2bbMjusdy9pqK9RCR4P1YPtc" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppSender.sol": { - "keccak256": "0x518cf4adca601923ed4baa6619846a253ea32b8d8775f8bc1faa3dfac7f67c20", - "urls": [ - "bzz-raw://d42b471418efadcc3577ef3fa9f8f504e8bed7db90c3b0c862038d8b29529eb2", - "dweb:/ipfs/QmZETDQiJN4U92fmLKo8T9ZbdDf7BNBUUvo9H7M7GqAyFU" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppCore.sol": { - "keccak256": "0x40e49f2de74506e1da5dcaed53a39853f691647f4ceb0fccc8f49a68d3f47c58", - "urls": [ - "bzz-raw://4a1deb2a6a3eb1fb83936c9578469142bff470295f403d7d07d955a76be3adbd", - "dweb:/ipfs/QmS9bjSfBaE4YhQ1PCQ1TknbEPbNfRXzBK9E7SaPGyiZEv" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppMsgInspector.sol": { - "keccak256": "0x339654e699043c400cad92de209aa23855ce10211c31cf4114042cc5224d3b7c", - "urls": [ - "bzz-raw://5222afde59bf086f67b39e0288ad36343f4f5ed683d250533f256a5db956f37e", - "dweb:/ipfs/QmbEG9EMYsK3Y6Cz7QbNtkW4kHGzMuhp2y2seSoL8v1A5b" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppOptionsType3.sol": { - "keccak256": "0x9fc08a51e9d7c9c710c4eb26f84fe77228305ad7da63fa486ff24ebf2f3bc461", - "urls": [ - "bzz-raw://2e2eea8a93bb9fc3f629767118b362e9b4bda2443ff95eae21c6a894f3e334cc", - "dweb:/ipfs/QmPRRNjAB4U19ke4gr3U7ZJGtdcVBxdXVBZ2BmB1riFkP7" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppReceiver.sol": { - "keccak256": "0xd26135185e19b3732746d4a9e2923e896f28dec8664bab161faea2ee26fcdc3d", - "urls": [ - "bzz-raw://c236dfe386b508be33c3a1a74ae1d4fd64b8c77ae207767e9dbed0f2429518a2", - "dweb:/ipfs/QmXVbZJjfryTRti98uN3BMh5qh4K7NuEs1RSCoBjRoYd4q" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/libs/OAppOptionsType3.sol": { - "keccak256": "0x5275636cd47e660a2fdf6c7fe9d41ff3cc866b785cc8a9d88c1b8ca983509f01", - "urls": [ - "bzz-raw://a59dd6e3cfcc332f45a13d44585eb228588c4b9d470cbb19852df5753a4571af", - "dweb:/ipfs/QmQJF1QU3MKhvmw42eq61u9z3bzKJJKMsEdQVYyPyYgTVS" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/precrime/OAppPreCrimeSimulator.sol": { - "keccak256": "0x205a0abfd8b3c9af2740769f251381b84999b8e9347f3cd50de3ef8290a17750", - "urls": [ - "bzz-raw://d9778d7d5da941af2029410b6ac212f915ea1785573ae2865b0ed8f779fcca82", - "dweb:/ipfs/QmNkVEkfecvgubgnMuaT5fEfSExd95vz8DQHhpZtMrVRjH" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IOAppPreCrimeSimulator.sol": { - "keccak256": "0x5d24db150949ea8e6437178e65a942e8c8b7f332e5daf32750f56b23b35b5bb2", - "urls": [ - "bzz-raw://1b1dcea0267234654126f926a1b405743606d7b5e49185b621afb7bd94d18b9a", - "dweb:/ipfs/QmZ9BXQmbWJcrhHKuBs4yhNtbCV5WUpUY3AXSX7rkWwX6y" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IPreCrime.sol": { - "keccak256": "0xc8d869f27ef8ceb2e13fdf6a70682fd4dee3f90c4924eb8e125bc1e66cb6af84", - "urls": [ - "bzz-raw://66bf49d59c14832ea0ddddcd12d512d4f9bd0fd254a1368442587bf3e77fe73e", - "dweb:/ipfs/QmYUAvsyuUPiSYjbL4zVo6ZtiRSLCUPDvCesqgdZWbSGDg" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/precrime/libs/Packet.sol": { - "keccak256": "0xcb2fb1c5b2eb3731de78b479b9c2ab3bba326fe0b0b3a008590f18e881e457a6", - "urls": [ - "bzz-raw://f70724c61d226743c2bd8ba6c09758805e4339780978949ce5b333c106be4edc", - "dweb:/ipfs/QmX5rV9K1N7RgTz9xtf8CDG8SrYiitGAzFh9ec2tbnEec4" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oft-evm/contracts/OFT.sol": { - "keccak256": "0xdc3582e4a20e02a79050c17058a1f1f42a4335d1a70be06c0a52a3fb05d4c89a", - "urls": [ - "bzz-raw://83c4bd42e68528246860a952a92a79e51e3a789dac79a0b62576ab2f609de9c7", - "dweb:/ipfs/QmVj1x655j1cFTnPT8uBaM71TCSrhFVwPdoFkAkWhhadns" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oft-evm/contracts/OFTCore.sol": { - "keccak256": "0x9ce49b83455df600b52538e42028c422a322643f7ffb4f2814c72c3b970ea7be", - "urls": [ - "bzz-raw://2ebbf79612c3f6cd4e2754ba55519df6b89504ab5514e3517cbd286d87143997", - "dweb:/ipfs/QmQZpSPhNhF4MESb2if2DbcjC75xfuoEzDGXmeJKYZtHZ5" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oft-evm/contracts/interfaces/IOFT.sol": { - "keccak256": "0x7ba6bb62fba7ee83451cfb0e727ddeef0e96b4388bd4e9ff0fc6ce103e1101c8", - "urls": [ - "bzz-raw://cfbd447f2e8a730bd46a14c3c3e6a0b2bf7446145579603a9793ba5ac1dd38b4", - "dweb:/ipfs/QmZ4nx4iGrFmBHvYFgki5TXFdCHz4Co38hgdgwpRaM7NLs" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oft-evm/contracts/libs/OFTComposeMsgCodec.sol": { - "keccak256": "0xaae73d6eb8b9561c43f1802f3c416c00ccd35f172b711f9781ccdf1b25a40db5", - "urls": [ - "bzz-raw://7beda2d895ae9e15269dd261a492ce0a29b498e5bebf088ed6f2ae6a5185719e", - "dweb:/ipfs/QmScog2tW1YVyEPLVcUVqGGc85ub46sA28nUKNzFEZcFdK" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oft-evm/contracts/libs/OFTMsgCodec.sol": { - "keccak256": "0x5358948017669c03e157f871d8c38e988f9004dbd0801ad3119d2487f0d40b0b", - "urls": [ - "bzz-raw://c7d0f1bf32a80af9b99cd93fefa373dac5c27463351cc35f62b9c2439d5b9258", - "dweb:/ipfs/Qmb81qoxzMwV3PkPANRvnXf4fJTsZ5sjJ8r2df9V2vhh6q" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/access/Ownable.sol": { - "keccak256": "0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb", - "urls": [ - "bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6", - "dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol": { - "keccak256": "0x9b6b3e7803bc5f2f8cd7ad57db8ac1def61a9930a5a3107df4882e028a9605d7", - "urls": [ - "bzz-raw://da62d6be1f5c6edf577f0cb45666a8aa9c2086a4bac87d95d65f02e2f4c36a4b", - "dweb:/ipfs/QmNkpvBpoCMvX8JwAFNSc5XxJ2q5BXJpL5L1txb4QkqVFF" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/interfaces/IERC165.sol": { - "keccak256": "0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724", - "urls": [ - "bzz-raw://11fea9f8bc98949ac6709f0c1699db7430d2948137aa94d5a9e95a91f61a710a", - "dweb:/ipfs/QmQdfRXxQjwP6yn3DVo1GHPpriKNcFghSPi94Z1oKEFUNS" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/interfaces/IERC20.sol": { - "keccak256": "0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c", - "urls": [ - "bzz-raw://a2608291cb038b388d80b79a06b6118a42f7894ff67b7da10ec0dbbf5b2973ba", - "dweb:/ipfs/QmWohqcBLbcxmA4eGPhZDXe5RYMMEEpFq22nfkaUMvTfw1" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/interfaces/draft-IERC6093.sol": { - "keccak256": "0x880da465c203cec76b10d72dbd87c80f387df4102274f23eea1f9c9b0918792b", - "urls": [ - "bzz-raw://399594cd8bb0143bc9e55e0f1d071d0d8c850a394fb7a319d50edd55d9ed822b", - "dweb:/ipfs/QmbPZzgtT6LEm9CMqWfagQFwETbV1ztpECBB1DtQHrKiRz" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/token/ERC20/ERC20.sol": { - "keccak256": "0xbf61ab2ae1d575a17ea58fbb99ca232baddcc4e0eeea180e84cbc74b0c348b31", - "urls": [ - "bzz-raw://4e0968705bad99747a8e5288aa008678c2be2f471f919dce3925a3cc4f1dee09", - "dweb:/ipfs/QmbAFnCQfo4tw6ssfQSjhA5LzwHWNNryXN8bX7ty8jiqqn" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol": { - "keccak256": "0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7", - "urls": [ - "bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db", - "dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol": { - "keccak256": "0x70f2f713b13b7ce4610bcd0ac9fec0f3cc43693b043abcb8dc40a42a726eb330", - "urls": [ - "bzz-raw://c13d13304ac79a83ab1c30168967d19e2203342ebbd6a9bbce4db7550522dcbf", - "dweb:/ipfs/QmeN5jKMN2vw5bhacr6tkg78afbTTZUeaacNHqjWt4Ew1r" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol": { - "keccak256": "0xca2ae13e0610f6a99238dd00b97bd786bc92732dae6d6b9d61f573ec51018310", - "urls": [ - "bzz-raw://75f8c71ce0c91c40dd5f249ace0b7d8270f8f1767231bcf71490f7157d6ba862", - "dweb:/ipfs/QmYXgxeDyFHvz3JsXxLEYN6GNUR44ThHeFj5XkpkgMoG4w" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Address.sol": { - "keccak256": "0x9d8da059267bac779a2dbbb9a26c2acf00ca83085e105d62d5d4ef96054a47f5", - "urls": [ - "bzz-raw://c78e2aa4313323cecd1ef12a8d6265b96beee1a199923abf55d9a2a9e291ad23", - "dweb:/ipfs/QmUTs2KStXucZezzFo3EYeqYu47utu56qrF7jj1Gue65vb" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Context.sol": { - "keccak256": "0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2", - "urls": [ - "bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12", - "dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Errors.sol": { - "keccak256": "0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123", - "urls": [ - "bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf", - "dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol": { - "keccak256": "0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8", - "urls": [ - "bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621", - "dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL" - ], - "license": "MIT" - } - }, - "version": 1 - }, - "id": 25 -} diff --git a/examples/oft-movement/out/OFTComposeMsgCodec.sol/OFTComposeMsgCodec.json b/examples/oft-movement/out/OFTComposeMsgCodec.sol/OFTComposeMsgCodec.json deleted file mode 100644 index 20879a531..000000000 --- a/examples/oft-movement/out/OFTComposeMsgCodec.sol/OFTComposeMsgCodec.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "abi": [], - "bytecode": { - "object": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220600f6d2d62ee23692e70dc27aa5f76de97f778392ae7d7d986fc9d9a7c95e14264736f6c63430008160033", - "sourceMap": "59:2931:28:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;59:2931:28;;;;;;;;;;;;;;;;;", - "linkReferences": {} - }, - "deployedBytecode": { - "object": "0x73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220600f6d2d62ee23692e70dc27aa5f76de97f778392ae7d7d986fc9d9a7c95e14264736f6c63430008160033", - "sourceMap": "59:2931:28:-:0;;;;;;;;", - "linkReferences": {} - }, - "methodIdentifiers": {}, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/oft-evm/contracts/libs/OFTComposeMsgCodec.sol\":\"OFTComposeMsgCodec\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/oft-evm/contracts/libs/OFTComposeMsgCodec.sol\":{\"keccak256\":\"0xaae73d6eb8b9561c43f1802f3c416c00ccd35f172b711f9781ccdf1b25a40db5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7beda2d895ae9e15269dd261a492ce0a29b498e5bebf088ed6f2ae6a5185719e\",\"dweb:/ipfs/QmScog2tW1YVyEPLVcUVqGGc85ub46sA28nUKNzFEZcFdK\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/oft-evm/contracts/libs/OFTComposeMsgCodec.sol": "OFTComposeMsgCodec" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/oft-evm/contracts/libs/OFTComposeMsgCodec.sol": { - "keccak256": "0xaae73d6eb8b9561c43f1802f3c416c00ccd35f172b711f9781ccdf1b25a40db5", - "urls": [ - "bzz-raw://7beda2d895ae9e15269dd261a492ce0a29b498e5bebf088ed6f2ae6a5185719e", - "dweb:/ipfs/QmScog2tW1YVyEPLVcUVqGGc85ub46sA28nUKNzFEZcFdK" - ], - "license": "MIT" - } - }, - "version": 1 - }, - "id": 28 -} diff --git a/examples/oft-movement/out/OFTComposerMock.sol/OFTComposerMock.json b/examples/oft-movement/out/OFTComposerMock.sol/OFTComposerMock.json deleted file mode 100644 index c1044241f..000000000 --- a/examples/oft-movement/out/OFTComposerMock.sol/OFTComposerMock.json +++ /dev/null @@ -1,184 +0,0 @@ -{ - "abi": [ - { - "type": "function", - "name": "executor", - "inputs": [], - "outputs": [{ "name": "", "type": "address", "internalType": "address" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "extraData", - "inputs": [], - "outputs": [{ "name": "", "type": "bytes", "internalType": "bytes" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "from", - "inputs": [], - "outputs": [{ "name": "", "type": "address", "internalType": "address" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "guid", - "inputs": [], - "outputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "lzCompose", - "inputs": [ - { "name": "_from", "type": "address", "internalType": "address" }, - { "name": "_guid", "type": "bytes32", "internalType": "bytes32" }, - { "name": "_message", "type": "bytes", "internalType": "bytes" }, - { "name": "_executor", "type": "address", "internalType": "address" }, - { "name": "", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [], - "stateMutability": "payable" - }, - { - "type": "function", - "name": "message", - "inputs": [], - "outputs": [{ "name": "", "type": "bytes", "internalType": "bytes" }], - "stateMutability": "view" - } - ], - "bytecode": { - "object": "0x608060405234801561001057600080fd5b5061050c806100206000396000f3fe6080604052600436106100555760003560e01c80630ae6d46b1461005a578063609d333414610083578063c34c08e5146100a5578063d0a10260146100dd578063d5ce3389146100f2578063e21f37ce14610112575b600080fd5b34801561006657600080fd5b5061007060015481565b6040519081526020015b60405180910390f35b34801561008f57600080fd5b50610098610127565b60405161007a9190610222565b3480156100b157600080fd5b506003546100c5906001600160a01b031681565b6040516001600160a01b03909116815260200161007a565b6100f06100eb3660046102d6565b6101b5565b005b3480156100fe57600080fd5b506000546100c5906001600160a01b031681565b34801561011e57600080fd5b50610098610215565b6004805461013490610374565b80601f016020809104026020016040519081016040528092919081815260200182805461016090610374565b80156101ad5780601f10610182576101008083540402835291602001916101ad565b820191906000526020600020905b81548152906001019060200180831161019057829003601f168201915b505050505081565b600080546001600160a01b0319166001600160a01b038916179055600186905560026101e2858783610415565b50600380546001600160a01b0319166001600160a01b038516179055600461020b858783610415565b5050505050505050565b6002805461013490610374565b60006020808352835180602085015260005b8181101561025057858101830151858201604001528201610234565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b038116811461028857600080fd5b919050565b60008083601f84011261029f57600080fd5b50813567ffffffffffffffff8111156102b757600080fd5b6020830191508360208285010111156102cf57600080fd5b9250929050565b600080600080600080600060a0888a0312156102f157600080fd5b6102fa88610271565b965060208801359550604088013567ffffffffffffffff8082111561031e57600080fd5b61032a8b838c0161028d565b909750955085915061033e60608b01610271565b945060808a013591508082111561035457600080fd5b506103618a828b0161028d565b989b979a50959850939692959293505050565b600181811c9082168061038857607f821691505b6020821081036103a857634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b601f821115610410576000816000526020600020601f850160051c810160208610156103ed5750805b601f850160051c820191505b8181101561040c578281556001016103f9565b5050505b505050565b67ffffffffffffffff83111561042d5761042d6103ae565b6104418361043b8354610374565b836103c4565b6000601f841160018114610475576000851561045d5750838201355b600019600387901b1c1916600186901b1783556104cf565b600083815260209020601f19861690835b828110156104a65786850135825560209485019460019092019101610486565b50868210156104c35760001960f88860031b161c19848701351681555b505060018560011b0183555b505050505056fea2646970667358221220eb22feaa2ed7a5cd3c95f8aeac361d18eaca6b9f0f64a88c34ed0e2b872e3d6a64736f6c63430008160033", - "sourceMap": "166:579:130:-:0;;;;;;;;;;;;;;;;;;;", - "linkReferences": {} - }, - "deployedBytecode": { - "object": "0x6080604052600436106100555760003560e01c80630ae6d46b1461005a578063609d333414610083578063c34c08e5146100a5578063d0a10260146100dd578063d5ce3389146100f2578063e21f37ce14610112575b600080fd5b34801561006657600080fd5b5061007060015481565b6040519081526020015b60405180910390f35b34801561008f57600080fd5b50610098610127565b60405161007a9190610222565b3480156100b157600080fd5b506003546100c5906001600160a01b031681565b6040516001600160a01b03909116815260200161007a565b6100f06100eb3660046102d6565b6101b5565b005b3480156100fe57600080fd5b506000546100c5906001600160a01b031681565b34801561011e57600080fd5b50610098610215565b6004805461013490610374565b80601f016020809104026020016040519081016040528092919081815260200182805461016090610374565b80156101ad5780601f10610182576101008083540402835291602001916101ad565b820191906000526020600020905b81548152906001019060200180831161019057829003601f168201915b505050505081565b600080546001600160a01b0319166001600160a01b038916179055600186905560026101e2858783610415565b50600380546001600160a01b0319166001600160a01b038516179055600461020b858783610415565b5050505050505050565b6002805461013490610374565b60006020808352835180602085015260005b8181101561025057858101830151858201604001528201610234565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b038116811461028857600080fd5b919050565b60008083601f84011261029f57600080fd5b50813567ffffffffffffffff8111156102b757600080fd5b6020830191508360208285010111156102cf57600080fd5b9250929050565b600080600080600080600060a0888a0312156102f157600080fd5b6102fa88610271565b965060208801359550604088013567ffffffffffffffff8082111561031e57600080fd5b61032a8b838c0161028d565b909750955085915061033e60608b01610271565b945060808a013591508082111561035457600080fd5b506103618a828b0161028d565b989b979a50959850939692959293505050565b600181811c9082168061038857607f821691505b6020821081036103a857634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b601f821115610410576000816000526020600020601f850160051c810160208610156103ed5750805b601f850160051c820191505b8181101561040c578281556001016103f9565b5050505b505050565b67ffffffffffffffff83111561042d5761042d6103ae565b6104418361043b8354610374565b836103c4565b6000601f841160018114610475576000851561045d5750838201355b600019600387901b1c1916600186901b1783556104cf565b600083815260209020601f19861690835b828110156104a65786850135825560209485019460019092019101610486565b50868210156104c35760001960f88860031b161c19848701351681555b505060018560011b0183555b505050505056fea2646970667358221220eb22feaa2ed7a5cd3c95f8aeac361d18eaca6b9f0f64a88c34ed0e2b872e3d6a64736f6c63430008160033", - "sourceMap": "166:579:130:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;308:19;;;;;;;;;;;;;;;;;;;160:25:132;;;148:2;133:18;308:19:130;;;;;;;;388:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;359:23::-;;;;;;;;;;-1:-1:-1;359:23:130;;;;-1:-1:-1;;;;;359:23:130;;;;;;-1:-1:-1;;;;;911:32:132;;;893:51;;881:2;866:18;359:23:130;747:203:132;417:326:130;;;;;;:::i;:::-;;:::i;:::-;;283:19;;;;;;;;;;-1:-1:-1;283:19:130;;;;-1:-1:-1;;;;;283:19:130;;;333:20;;;;;;;;;;;;;:::i;388:22::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;417:326::-;614:4;:12;;-1:-1:-1;;;;;;614:12:130;-1:-1:-1;;;;;614:12:130;;;;;-1:-1:-1;636:12:130;;;658:7;:18;668:8;;658:7;:18;:::i;:::-;-1:-1:-1;686:8:130;:20;;-1:-1:-1;;;;;;686:20:130;-1:-1:-1;;;;;686:20:130;;;;;716:9;:20;728:8;;716:9;:20;:::i;:::-;;417:326;;;;;;;:::o;333:20::-;;;;;;;:::i;196:546:132:-;306:4;335:2;364;353:9;346:21;396:6;390:13;439:6;434:2;423:9;419:18;412:34;464:1;474:140;488:6;485:1;482:13;474:140;;;583:14;;;579:23;;573:30;549:17;;;568:2;545:26;538:66;503:10;;474:140;;;478:3;663:1;658:2;649:6;638:9;634:22;630:31;623:42;733:2;726;722:7;717:2;709:6;705:15;701:29;690:9;686:45;682:54;674:62;;;;196:546;;;;:::o;955:173::-;1023:20;;-1:-1:-1;;;;;1072:31:132;;1062:42;;1052:70;;1118:1;1115;1108:12;1052:70;955:173;;;:::o;1133:347::-;1184:8;1194:6;1248:3;1241:4;1233:6;1229:17;1225:27;1215:55;;1266:1;1263;1256:12;1215:55;-1:-1:-1;1289:20:132;;1332:18;1321:30;;1318:50;;;1364:1;1361;1354:12;1318:50;1401:4;1393:6;1389:17;1377:29;;1453:3;1446:4;1437:6;1429;1425:19;1421:30;1418:39;1415:59;;;1470:1;1467;1460:12;1415:59;1133:347;;;;;:::o;1485:935::-;1602:6;1610;1618;1626;1634;1642;1650;1703:3;1691:9;1682:7;1678:23;1674:33;1671:53;;;1720:1;1717;1710:12;1671:53;1743:29;1762:9;1743:29;:::i;:::-;1733:39;;1819:2;1808:9;1804:18;1791:32;1781:42;;1874:2;1863:9;1859:18;1846:32;1897:18;1938:2;1930:6;1927:14;1924:34;;;1954:1;1951;1944:12;1924:34;1993:58;2043:7;2034:6;2023:9;2019:22;1993:58;:::i;:::-;2070:8;;-1:-1:-1;1967:84:132;-1:-1:-1;1967:84:132;;-1:-1:-1;2124:38:132;2158:2;2143:18;;2124:38;:::i;:::-;2114:48;;2215:3;2204:9;2200:19;2187:33;2171:49;;2245:2;2235:8;2232:16;2229:36;;;2261:1;2258;2251:12;2229:36;;2300:60;2352:7;2341:8;2330:9;2326:24;2300:60;:::i;:::-;1485:935;;;;-1:-1:-1;1485:935:132;;-1:-1:-1;1485:935:132;;;;2274:86;;-1:-1:-1;;;1485:935:132:o;2425:380::-;2504:1;2500:12;;;;2547;;;2568:61;;2622:4;2614:6;2610:17;2600:27;;2568:61;2675:2;2667:6;2664:14;2644:18;2641:38;2638:161;;2721:10;2716:3;2712:20;2709:1;2702:31;2756:4;2753:1;2746:15;2784:4;2781:1;2774:15;2638:161;;2425:380;;;:::o;2810:127::-;2871:10;2866:3;2862:20;2859:1;2852:31;2902:4;2899:1;2892:15;2926:4;2923:1;2916:15;3067:542;3168:2;3163:3;3160:11;3157:446;;;3204:1;3228:5;3225:1;3218:16;3272:4;3269:1;3259:18;3342:2;3330:10;3326:19;3323:1;3319:27;3313:4;3309:38;3378:4;3366:10;3363:20;3360:47;;;-1:-1:-1;3401:4:132;3360:47;3456:2;3451:3;3447:12;3444:1;3440:20;3434:4;3430:31;3420:41;;3511:82;3529:2;3522:5;3519:13;3511:82;;;3574:17;;;3555:1;3544:13;3511:82;;;3515:3;;;3157:446;3067:542;;;:::o;3785:1202::-;3907:18;3902:3;3899:27;3896:53;;;3929:18;;:::i;:::-;3958:93;4047:3;4007:38;4039:4;4033:11;4007:38;:::i;:::-;4001:4;3958:93;:::i;:::-;4077:1;4102:2;4097:3;4094:11;4119:1;4114:615;;;;4773:1;4790:3;4787:93;;;-1:-1:-1;4846:19:132;;;4833:33;4787:93;-1:-1:-1;;3742:1:132;3738:11;;;3734:24;3730:29;3720:40;3766:1;3762:11;;;3717:57;4893:78;;4087:894;;4114:615;3014:1;3007:14;;;3051:4;3038:18;;-1:-1:-1;;4150:17:132;;;4250:9;4272:229;4286:7;4283:1;4280:14;4272:229;;;4375:19;;;4362:33;4347:49;;4482:4;4467:20;;;;4435:1;4423:14;;;;4302:12;4272:229;;;4276:3;4529;4520:7;4517:16;4514:159;;;4653:1;4649:6;4643:3;4637;4634:1;4630:11;4626:21;4622:34;4618:39;4605:9;4600:3;4596:19;4583:33;4579:79;4571:6;4564:95;4514:159;;;4716:1;4710:3;4707:1;4703:11;4699:19;4693:4;4686:33;4087:894;;;3785:1202;;;:::o", - "linkReferences": {} - }, - "methodIdentifiers": { - "executor()": "c34c08e5", - "extraData()": "609d3334", - "from()": "d5ce3389", - "guid()": "0ae6d46b", - "lzCompose(address,bytes32,bytes,address,bytes)": "d0a10260", - "message()": "e21f37ce" - }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"executor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"extraData\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"from\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"guid\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_guid\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"_executor\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"lzCompose\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"message\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"test/evm/mocks/OFTComposerMock.sol\":\"OFTComposerMock\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroComposer.sol\":{\"keccak256\":\"0xfaca7205d4211ee9208a7e59171e2301731f3d2a20c49b4a839821871f5fdd49\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f254bc60ac26687b5320a43a556e30777b0745abf7cd64d5f4720d9b1d1f7fdf\",\"dweb:/ipfs/QmRSJEZVgxaC3L2DdE6s8P5qkYfM3V5JMeseeFJJqGR4xz\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppComposer.sol\":{\"keccak256\":\"0xe5014c411acb2b59dd74ae74a1bab02cf32d94a41a548a5ab553d64aeeb55dae\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://29dfb7bc121002fc7e7931c34eb17af0ae0f0127dcc3199511c83a58a917160d\",\"dweb:/ipfs/QmPdq1wcRRBdUP169LHCLoLuPRunN9eR71TQN42FjGpowx\"]},\"test/evm/mocks/OFTComposerMock.sol\":{\"keccak256\":\"0x9e3ca0772aa55c6352283e84d9062660f5e136c6a8c129051c00941f5bbec1f3\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://79ddb778928733c8a52ca6e4d79de24f8da935673f25c62f488627eb59bb97e6\",\"dweb:/ipfs/QmR6cga173tuHGpVSEFoZYN89mPK2WenuAWpT5XRxyaFjX\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "executor", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "extraData", - "outputs": [{ "internalType": "bytes", "name": "", "type": "bytes" }] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "from", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "guid", - "outputs": [ - { "internalType": "bytes32", "name": "", "type": "bytes32" } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "_from", "type": "address" }, - { "internalType": "bytes32", "name": "_guid", "type": "bytes32" }, - { "internalType": "bytes", "name": "_message", "type": "bytes" }, - { - "internalType": "address", - "name": "_executor", - "type": "address" - }, - { "internalType": "bytes", "name": "", "type": "bytes" } - ], - "stateMutability": "payable", - "type": "function", - "name": "lzCompose" - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "message", - "outputs": [{ "internalType": "bytes", "name": "", "type": "bytes" }] - } - ], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "test/evm/mocks/OFTComposerMock.sol": "OFTComposerMock" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroComposer.sol": { - "keccak256": "0xfaca7205d4211ee9208a7e59171e2301731f3d2a20c49b4a839821871f5fdd49", - "urls": [ - "bzz-raw://f254bc60ac26687b5320a43a556e30777b0745abf7cd64d5f4720d9b1d1f7fdf", - "dweb:/ipfs/QmRSJEZVgxaC3L2DdE6s8P5qkYfM3V5JMeseeFJJqGR4xz" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppComposer.sol": { - "keccak256": "0xe5014c411acb2b59dd74ae74a1bab02cf32d94a41a548a5ab553d64aeeb55dae", - "urls": [ - "bzz-raw://29dfb7bc121002fc7e7931c34eb17af0ae0f0127dcc3199511c83a58a917160d", - "dweb:/ipfs/QmPdq1wcRRBdUP169LHCLoLuPRunN9eR71TQN42FjGpowx" - ], - "license": "MIT" - }, - "test/evm/mocks/OFTComposerMock.sol": { - "keccak256": "0x9e3ca0772aa55c6352283e84d9062660f5e136c6a8c129051c00941f5bbec1f3", - "urls": [ - "bzz-raw://79ddb778928733c8a52ca6e4d79de24f8da935673f25c62f488627eb59bb97e6", - "dweb:/ipfs/QmR6cga173tuHGpVSEFoZYN89mPK2WenuAWpT5XRxyaFjX" - ], - "license": "UNLICENSED" - } - }, - "version": 1 - }, - "id": 130 -} diff --git a/examples/oft-movement/out/OFTCore.sol/OFTCore.json b/examples/oft-movement/out/OFTCore.sol/OFTCore.json deleted file mode 100644 index 47cb4ffd5..000000000 --- a/examples/oft-movement/out/OFTCore.sol/OFTCore.json +++ /dev/null @@ -1,2387 +0,0 @@ -{ - "abi": [ - { - "type": "function", - "name": "SEND", - "inputs": [], - "outputs": [{ "name": "", "type": "uint16", "internalType": "uint16" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "SEND_AND_CALL", - "inputs": [], - "outputs": [{ "name": "", "type": "uint16", "internalType": "uint16" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "allowInitializePath", - "inputs": [ - { - "name": "origin", - "type": "tuple", - "internalType": "struct Origin", - "components": [ - { "name": "srcEid", "type": "uint32", "internalType": "uint32" }, - { "name": "sender", "type": "bytes32", "internalType": "bytes32" }, - { "name": "nonce", "type": "uint64", "internalType": "uint64" } - ] - } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "approvalRequired", - "inputs": [], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "combineOptions", - "inputs": [ - { "name": "_eid", "type": "uint32", "internalType": "uint32" }, - { "name": "_msgType", "type": "uint16", "internalType": "uint16" }, - { "name": "_extraOptions", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [{ "name": "", "type": "bytes", "internalType": "bytes" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "decimalConversionRate", - "inputs": [], - "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "endpoint", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "contract ILayerZeroEndpointV2" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "enforcedOptions", - "inputs": [ - { "name": "eid", "type": "uint32", "internalType": "uint32" }, - { "name": "msgType", "type": "uint16", "internalType": "uint16" } - ], - "outputs": [ - { "name": "enforcedOption", "type": "bytes", "internalType": "bytes" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "isComposeMsgSender", - "inputs": [ - { - "name": "", - "type": "tuple", - "internalType": "struct Origin", - "components": [ - { "name": "srcEid", "type": "uint32", "internalType": "uint32" }, - { "name": "sender", "type": "bytes32", "internalType": "bytes32" }, - { "name": "nonce", "type": "uint64", "internalType": "uint64" } - ] - }, - { "name": "", "type": "bytes", "internalType": "bytes" }, - { "name": "_sender", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "isPeer", - "inputs": [ - { "name": "_eid", "type": "uint32", "internalType": "uint32" }, - { "name": "_peer", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "lzReceive", - "inputs": [ - { - "name": "_origin", - "type": "tuple", - "internalType": "struct Origin", - "components": [ - { "name": "srcEid", "type": "uint32", "internalType": "uint32" }, - { "name": "sender", "type": "bytes32", "internalType": "bytes32" }, - { "name": "nonce", "type": "uint64", "internalType": "uint64" } - ] - }, - { "name": "_guid", "type": "bytes32", "internalType": "bytes32" }, - { "name": "_message", "type": "bytes", "internalType": "bytes" }, - { "name": "_executor", "type": "address", "internalType": "address" }, - { "name": "_extraData", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [], - "stateMutability": "payable" - }, - { - "type": "function", - "name": "lzReceiveAndRevert", - "inputs": [ - { - "name": "_packets", - "type": "tuple[]", - "internalType": "struct InboundPacket[]", - "components": [ - { - "name": "origin", - "type": "tuple", - "internalType": "struct Origin", - "components": [ - { - "name": "srcEid", - "type": "uint32", - "internalType": "uint32" - }, - { - "name": "sender", - "type": "bytes32", - "internalType": "bytes32" - }, - { "name": "nonce", "type": "uint64", "internalType": "uint64" } - ] - }, - { "name": "dstEid", "type": "uint32", "internalType": "uint32" }, - { - "name": "receiver", - "type": "address", - "internalType": "address" - }, - { "name": "guid", "type": "bytes32", "internalType": "bytes32" }, - { "name": "value", "type": "uint256", "internalType": "uint256" }, - { - "name": "executor", - "type": "address", - "internalType": "address" - }, - { "name": "message", "type": "bytes", "internalType": "bytes" }, - { "name": "extraData", "type": "bytes", "internalType": "bytes" } - ] - } - ], - "outputs": [], - "stateMutability": "payable" - }, - { - "type": "function", - "name": "lzReceiveSimulate", - "inputs": [ - { - "name": "_origin", - "type": "tuple", - "internalType": "struct Origin", - "components": [ - { "name": "srcEid", "type": "uint32", "internalType": "uint32" }, - { "name": "sender", "type": "bytes32", "internalType": "bytes32" }, - { "name": "nonce", "type": "uint64", "internalType": "uint64" } - ] - }, - { "name": "_guid", "type": "bytes32", "internalType": "bytes32" }, - { "name": "_message", "type": "bytes", "internalType": "bytes" }, - { "name": "_executor", "type": "address", "internalType": "address" }, - { "name": "_extraData", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [], - "stateMutability": "payable" - }, - { - "type": "function", - "name": "msgInspector", - "inputs": [], - "outputs": [{ "name": "", "type": "address", "internalType": "address" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "nextNonce", - "inputs": [ - { "name": "", "type": "uint32", "internalType": "uint32" }, - { "name": "", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [ - { "name": "nonce", "type": "uint64", "internalType": "uint64" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "oApp", - "inputs": [], - "outputs": [{ "name": "", "type": "address", "internalType": "address" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "oAppVersion", - "inputs": [], - "outputs": [ - { "name": "senderVersion", "type": "uint64", "internalType": "uint64" }, - { - "name": "receiverVersion", - "type": "uint64", - "internalType": "uint64" - } - ], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "oftVersion", - "inputs": [], - "outputs": [ - { "name": "interfaceId", "type": "bytes4", "internalType": "bytes4" }, - { "name": "version", "type": "uint64", "internalType": "uint64" } - ], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "owner", - "inputs": [], - "outputs": [{ "name": "", "type": "address", "internalType": "address" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "peers", - "inputs": [{ "name": "eid", "type": "uint32", "internalType": "uint32" }], - "outputs": [ - { "name": "peer", "type": "bytes32", "internalType": "bytes32" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "preCrime", - "inputs": [], - "outputs": [{ "name": "", "type": "address", "internalType": "address" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "quoteOFT", - "inputs": [ - { - "name": "_sendParam", - "type": "tuple", - "internalType": "struct SendParam", - "components": [ - { "name": "dstEid", "type": "uint32", "internalType": "uint32" }, - { "name": "to", "type": "bytes32", "internalType": "bytes32" }, - { - "name": "amountLD", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "minAmountLD", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "extraOptions", - "type": "bytes", - "internalType": "bytes" - }, - { "name": "composeMsg", "type": "bytes", "internalType": "bytes" }, - { "name": "oftCmd", "type": "bytes", "internalType": "bytes" } - ] - } - ], - "outputs": [ - { - "name": "oftLimit", - "type": "tuple", - "internalType": "struct OFTLimit", - "components": [ - { - "name": "minAmountLD", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "maxAmountLD", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "name": "oftFeeDetails", - "type": "tuple[]", - "internalType": "struct OFTFeeDetail[]", - "components": [ - { - "name": "feeAmountLD", - "type": "int256", - "internalType": "int256" - }, - { - "name": "description", - "type": "string", - "internalType": "string" - } - ] - }, - { - "name": "oftReceipt", - "type": "tuple", - "internalType": "struct OFTReceipt", - "components": [ - { - "name": "amountSentLD", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "amountReceivedLD", - "type": "uint256", - "internalType": "uint256" - } - ] - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "quoteSend", - "inputs": [ - { - "name": "_sendParam", - "type": "tuple", - "internalType": "struct SendParam", - "components": [ - { "name": "dstEid", "type": "uint32", "internalType": "uint32" }, - { "name": "to", "type": "bytes32", "internalType": "bytes32" }, - { - "name": "amountLD", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "minAmountLD", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "extraOptions", - "type": "bytes", - "internalType": "bytes" - }, - { "name": "composeMsg", "type": "bytes", "internalType": "bytes" }, - { "name": "oftCmd", "type": "bytes", "internalType": "bytes" } - ] - }, - { "name": "_payInLzToken", "type": "bool", "internalType": "bool" } - ], - "outputs": [ - { - "name": "msgFee", - "type": "tuple", - "internalType": "struct MessagingFee", - "components": [ - { - "name": "nativeFee", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "lzTokenFee", - "type": "uint256", - "internalType": "uint256" - } - ] - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "renounceOwnership", - "inputs": [], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "send", - "inputs": [ - { - "name": "_sendParam", - "type": "tuple", - "internalType": "struct SendParam", - "components": [ - { "name": "dstEid", "type": "uint32", "internalType": "uint32" }, - { "name": "to", "type": "bytes32", "internalType": "bytes32" }, - { - "name": "amountLD", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "minAmountLD", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "extraOptions", - "type": "bytes", - "internalType": "bytes" - }, - { "name": "composeMsg", "type": "bytes", "internalType": "bytes" }, - { "name": "oftCmd", "type": "bytes", "internalType": "bytes" } - ] - }, - { - "name": "_fee", - "type": "tuple", - "internalType": "struct MessagingFee", - "components": [ - { - "name": "nativeFee", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "lzTokenFee", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "name": "_refundAddress", - "type": "address", - "internalType": "address" - } - ], - "outputs": [ - { - "name": "msgReceipt", - "type": "tuple", - "internalType": "struct MessagingReceipt", - "components": [ - { "name": "guid", "type": "bytes32", "internalType": "bytes32" }, - { "name": "nonce", "type": "uint64", "internalType": "uint64" }, - { - "name": "fee", - "type": "tuple", - "internalType": "struct MessagingFee", - "components": [ - { - "name": "nativeFee", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "lzTokenFee", - "type": "uint256", - "internalType": "uint256" - } - ] - } - ] - }, - { - "name": "oftReceipt", - "type": "tuple", - "internalType": "struct OFTReceipt", - "components": [ - { - "name": "amountSentLD", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "amountReceivedLD", - "type": "uint256", - "internalType": "uint256" - } - ] - } - ], - "stateMutability": "payable" - }, - { - "type": "function", - "name": "setDelegate", - "inputs": [ - { "name": "_delegate", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setEnforcedOptions", - "inputs": [ - { - "name": "_enforcedOptions", - "type": "tuple[]", - "internalType": "struct EnforcedOptionParam[]", - "components": [ - { "name": "eid", "type": "uint32", "internalType": "uint32" }, - { "name": "msgType", "type": "uint16", "internalType": "uint16" }, - { "name": "options", "type": "bytes", "internalType": "bytes" } - ] - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setMsgInspector", - "inputs": [ - { - "name": "_msgInspector", - "type": "address", - "internalType": "address" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setPeer", - "inputs": [ - { "name": "_eid", "type": "uint32", "internalType": "uint32" }, - { "name": "_peer", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setPreCrime", - "inputs": [ - { "name": "_preCrime", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "sharedDecimals", - "inputs": [], - "outputs": [{ "name": "", "type": "uint8", "internalType": "uint8" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "token", - "inputs": [], - "outputs": [{ "name": "", "type": "address", "internalType": "address" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "transferOwnership", - "inputs": [ - { "name": "newOwner", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "event", - "name": "EnforcedOptionSet", - "inputs": [ - { - "name": "_enforcedOptions", - "type": "tuple[]", - "indexed": false, - "internalType": "struct EnforcedOptionParam[]", - "components": [ - { "name": "eid", "type": "uint32", "internalType": "uint32" }, - { "name": "msgType", "type": "uint16", "internalType": "uint16" }, - { "name": "options", "type": "bytes", "internalType": "bytes" } - ] - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "MsgInspectorSet", - "inputs": [ - { - "name": "inspector", - "type": "address", - "indexed": false, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "OFTReceived", - "inputs": [ - { - "name": "guid", - "type": "bytes32", - "indexed": true, - "internalType": "bytes32" - }, - { - "name": "srcEid", - "type": "uint32", - "indexed": false, - "internalType": "uint32" - }, - { - "name": "toAddress", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "amountReceivedLD", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "OFTSent", - "inputs": [ - { - "name": "guid", - "type": "bytes32", - "indexed": true, - "internalType": "bytes32" - }, - { - "name": "dstEid", - "type": "uint32", - "indexed": false, - "internalType": "uint32" - }, - { - "name": "fromAddress", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "amountSentLD", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - }, - { - "name": "amountReceivedLD", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "OwnershipTransferred", - "inputs": [ - { - "name": "previousOwner", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "newOwner", - "type": "address", - "indexed": true, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "PeerSet", - "inputs": [ - { - "name": "eid", - "type": "uint32", - "indexed": false, - "internalType": "uint32" - }, - { - "name": "peer", - "type": "bytes32", - "indexed": false, - "internalType": "bytes32" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "PreCrimeSet", - "inputs": [ - { - "name": "preCrimeAddress", - "type": "address", - "indexed": false, - "internalType": "address" - } - ], - "anonymous": false - }, - { "type": "error", "name": "InvalidDelegate", "inputs": [] }, - { "type": "error", "name": "InvalidEndpointCall", "inputs": [] }, - { "type": "error", "name": "InvalidLocalDecimals", "inputs": [] }, - { - "type": "error", - "name": "InvalidOptions", - "inputs": [ - { "name": "options", "type": "bytes", "internalType": "bytes" } - ] - }, - { "type": "error", "name": "LzTokenUnavailable", "inputs": [] }, - { - "type": "error", - "name": "NoPeer", - "inputs": [{ "name": "eid", "type": "uint32", "internalType": "uint32" }] - }, - { - "type": "error", - "name": "NotEnoughNative", - "inputs": [ - { "name": "msgValue", "type": "uint256", "internalType": "uint256" } - ] - }, - { - "type": "error", - "name": "OnlyEndpoint", - "inputs": [ - { "name": "addr", "type": "address", "internalType": "address" } - ] - }, - { - "type": "error", - "name": "OnlyPeer", - "inputs": [ - { "name": "eid", "type": "uint32", "internalType": "uint32" }, - { "name": "sender", "type": "bytes32", "internalType": "bytes32" } - ] - }, - { "type": "error", "name": "OnlySelf", "inputs": [] }, - { - "type": "error", - "name": "OwnableInvalidOwner", - "inputs": [ - { "name": "owner", "type": "address", "internalType": "address" } - ] - }, - { - "type": "error", - "name": "OwnableUnauthorizedAccount", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ] - }, - { - "type": "error", - "name": "SafeERC20FailedOperation", - "inputs": [ - { "name": "token", "type": "address", "internalType": "address" } - ] - }, - { - "type": "error", - "name": "SimulationResult", - "inputs": [{ "name": "result", "type": "bytes", "internalType": "bytes" }] - }, - { - "type": "error", - "name": "SlippageExceeded", - "inputs": [ - { "name": "amountLD", "type": "uint256", "internalType": "uint256" }, - { "name": "minAmountLD", "type": "uint256", "internalType": "uint256" } - ] - } - ], - "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "methodIdentifiers": { - "SEND()": "1f5e1334", - "SEND_AND_CALL()": "134d4f25", - "allowInitializePath((uint32,bytes32,uint64))": "ff7bd03d", - "approvalRequired()": "9f68b964", - "combineOptions(uint32,uint16,bytes)": "bc70b354", - "decimalConversionRate()": "963efcaa", - "endpoint()": "5e280f11", - "enforcedOptions(uint32,uint16)": "5535d461", - "isComposeMsgSender((uint32,bytes32,uint64),bytes,address)": "82413eac", - "isPeer(uint32,bytes32)": "5a0dfe4d", - "lzReceive((uint32,bytes32,uint64),bytes32,bytes,address,bytes)": "13137d65", - "lzReceiveAndRevert(((uint32,bytes32,uint64),uint32,address,bytes32,uint256,address,bytes,bytes)[])": "bd815db0", - "lzReceiveSimulate((uint32,bytes32,uint64),bytes32,bytes,address,bytes)": "d045a0dc", - "msgInspector()": "111ecdad", - "nextNonce(uint32,bytes32)": "7d25a05e", - "oApp()": "52ae2879", - "oAppVersion()": "17442b70", - "oftVersion()": "156a0d0f", - "owner()": "8da5cb5b", - "peers(uint32)": "bb0b6a53", - "preCrime()": "b731ea0a", - "quoteOFT((uint32,bytes32,uint256,uint256,bytes,bytes,bytes))": "0d35b415", - "quoteSend((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),bool)": "3b6f743b", - "renounceOwnership()": "715018a6", - "send((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),(uint256,uint256),address)": "c7c7f5b3", - "setDelegate(address)": "ca5eb5e1", - "setEnforcedOptions((uint32,uint16,bytes)[])": "b98bd070", - "setMsgInspector(address)": "6fc1b31e", - "setPeer(uint32,bytes32)": "3400288b", - "setPreCrime(address)": "d4243885", - "sharedDecimals()": "857749b0", - "token()": "fc0c546a", - "transferOwnership(address)": "f2fde38b" - }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"InvalidDelegate\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidEndpointCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidLocalDecimals\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"options\",\"type\":\"bytes\"}],\"name\":\"InvalidOptions\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LzTokenUnavailable\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"}],\"name\":\"NoPeer\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"msgValue\",\"type\":\"uint256\"}],\"name\":\"NotEnoughNative\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"OnlyEndpoint\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"}],\"name\":\"OnlyPeer\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlySelf\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"name\":\"SimulationResult\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountLD\",\"type\":\"uint256\"}],\"name\":\"SlippageExceeded\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"msgType\",\"type\":\"uint16\"},{\"internalType\":\"bytes\",\"name\":\"options\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"struct EnforcedOptionParam[]\",\"name\":\"_enforcedOptions\",\"type\":\"tuple[]\"}],\"name\":\"EnforcedOptionSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"inspector\",\"type\":\"address\"}],\"name\":\"MsgInspectorSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"toAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountReceivedLD\",\"type\":\"uint256\"}],\"name\":\"OFTReceived\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"fromAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountSentLD\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountReceivedLD\",\"type\":\"uint256\"}],\"name\":\"OFTSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"peer\",\"type\":\"bytes32\"}],\"name\":\"PeerSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"preCrimeAddress\",\"type\":\"address\"}],\"name\":\"PreCrimeSet\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"SEND\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SEND_AND_CALL\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"origin\",\"type\":\"tuple\"}],\"name\":\"allowInitializePath\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"approvalRequired\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"_msgType\",\"type\":\"uint16\"},{\"internalType\":\"bytes\",\"name\":\"_extraOptions\",\"type\":\"bytes\"}],\"name\":\"combineOptions\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimalConversionRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"endpoint\",\"outputs\":[{\"internalType\":\"contract ILayerZeroEndpointV2\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"msgType\",\"type\":\"uint16\"}],\"name\":\"enforcedOptions\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"enforcedOption\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"}],\"name\":\"isComposeMsgSender\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_peer\",\"type\":\"bytes32\"}],\"name\":\"isPeer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"_origin\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"_guid\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"_executor\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"lzReceive\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"origin\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"executor\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"internalType\":\"struct InboundPacket[]\",\"name\":\"_packets\",\"type\":\"tuple[]\"}],\"name\":\"lzReceiveAndRevert\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"_origin\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"_guid\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"_executor\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"lzReceiveSimulate\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"msgInspector\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"nextNonce\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"oApp\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"oAppVersion\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"senderVersion\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"receiverVersion\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"oftVersion\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"},{\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"}],\"name\":\"peers\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"peer\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"preCrime\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"to\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"amountLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountLD\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"extraOptions\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"composeMsg\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"oftCmd\",\"type\":\"bytes\"}],\"internalType\":\"struct SendParam\",\"name\":\"_sendParam\",\"type\":\"tuple\"}],\"name\":\"quoteOFT\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"minAmountLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountLD\",\"type\":\"uint256\"}],\"internalType\":\"struct OFTLimit\",\"name\":\"oftLimit\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"int256\",\"name\":\"feeAmountLD\",\"type\":\"int256\"},{\"internalType\":\"string\",\"name\":\"description\",\"type\":\"string\"}],\"internalType\":\"struct OFTFeeDetail[]\",\"name\":\"oftFeeDetails\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"amountSentLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountReceivedLD\",\"type\":\"uint256\"}],\"internalType\":\"struct OFTReceipt\",\"name\":\"oftReceipt\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"to\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"amountLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountLD\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"extraOptions\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"composeMsg\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"oftCmd\",\"type\":\"bytes\"}],\"internalType\":\"struct SendParam\",\"name\":\"_sendParam\",\"type\":\"tuple\"},{\"internalType\":\"bool\",\"name\":\"_payInLzToken\",\"type\":\"bool\"}],\"name\":\"quoteSend\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nativeFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lzTokenFee\",\"type\":\"uint256\"}],\"internalType\":\"struct MessagingFee\",\"name\":\"msgFee\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"to\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"amountLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountLD\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"extraOptions\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"composeMsg\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"oftCmd\",\"type\":\"bytes\"}],\"internalType\":\"struct SendParam\",\"name\":\"_sendParam\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nativeFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lzTokenFee\",\"type\":\"uint256\"}],\"internalType\":\"struct MessagingFee\",\"name\":\"_fee\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"_refundAddress\",\"type\":\"address\"}],\"name\":\"send\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nativeFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lzTokenFee\",\"type\":\"uint256\"}],\"internalType\":\"struct MessagingFee\",\"name\":\"fee\",\"type\":\"tuple\"}],\"internalType\":\"struct MessagingReceipt\",\"name\":\"msgReceipt\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"amountSentLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountReceivedLD\",\"type\":\"uint256\"}],\"internalType\":\"struct OFTReceipt\",\"name\":\"oftReceipt\",\"type\":\"tuple\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_delegate\",\"type\":\"address\"}],\"name\":\"setDelegate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"msgType\",\"type\":\"uint16\"},{\"internalType\":\"bytes\",\"name\":\"options\",\"type\":\"bytes\"}],\"internalType\":\"struct EnforcedOptionParam[]\",\"name\":\"_enforcedOptions\",\"type\":\"tuple[]\"}],\"name\":\"setEnforcedOptions\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_msgInspector\",\"type\":\"address\"}],\"name\":\"setMsgInspector\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_peer\",\"type\":\"bytes32\"}],\"name\":\"setPeer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_preCrime\",\"type\":\"address\"}],\"name\":\"setPreCrime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sharedDecimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"token\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Abstract contract for the OftChain (OFT) token.\",\"errors\":{\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}],\"SafeERC20FailedOperation(address)\":[{\"details\":\"An operation with an ERC-20 token failed.\"}]},\"events\":{\"PreCrimeSet(address)\":{\"details\":\"Emitted when the preCrime contract address is set.\",\"params\":{\"preCrimeAddress\":\"The address of the preCrime contract.\"}}},\"kind\":\"dev\",\"methods\":{\"allowInitializePath((uint32,bytes32,uint64))\":{\"details\":\"This indicates to the endpoint that the OApp has enabled msgs for this particular path to be received.This defaults to assuming if a peer has been set, its initialized. Can be overridden by the OApp if there is other logic to determine this.\",\"params\":{\"origin\":\"The origin information containing the source endpoint and sender address.\"},\"returns\":{\"_0\":\"Whether the path has been initialized.\"}},\"approvalRequired()\":{\"details\":\"Allows things like wallet implementers to determine integration requirements, without understanding the underlying token implementation.\",\"returns\":{\"_0\":\"requiresApproval Needs approval of the underlying token implementation.\"}},\"combineOptions(uint32,uint16,bytes)\":{\"details\":\"If there is an enforced lzReceive option: - {gasLimit: 200k, msg.value: 1 ether} AND a caller supplies a lzReceive option: {gasLimit: 100k, msg.value: 0.5 ether} - The resulting options will be {gasLimit: 300k, msg.value: 1.5 ether} when the message is executed on the remote lzReceive() function.This presence of duplicated options is handled off-chain in the verifier/executor.\",\"params\":{\"_eid\":\"The endpoint ID.\",\"_extraOptions\":\"Additional options passed by the caller.\",\"_msgType\":\"The OAPP message type.\"},\"returns\":{\"_0\":\"options The combination of caller specified options AND enforced options.\"}},\"constructor\":{\"details\":\"Constructor.\",\"params\":{\"_delegate\":\"The delegate capable of making OApp configurations inside of the endpoint.\",\"_endpoint\":\"The address of the LayerZero endpoint.\",\"_localDecimals\":\"The decimals of the token on the local chain (this chain).\"}},\"isComposeMsgSender((uint32,bytes32,uint64),bytes,address)\":{\"details\":\"_origin The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message._message The lzReceive payload.Applications can optionally choose to implement separate composeMsg senders that are NOT the bridging layer.The default sender IS the OAppReceiver implementer.\",\"params\":{\"_sender\":\"The sender address.\"},\"returns\":{\"_0\":\"isSender Is a valid sender.\"}},\"isPeer(uint32,bytes32)\":{\"details\":\"Check if the peer is considered 'trusted' by the OApp.Enables OAppPreCrimeSimulator to check whether a potential Inbound Packet is from a trusted source.\",\"params\":{\"_eid\":\"The endpoint ID to check.\",\"_peer\":\"The peer to check.\"},\"returns\":{\"_0\":\"Whether the peer passed is considered 'trusted' by the OApp.\"}},\"lzReceive((uint32,bytes32,uint64),bytes32,bytes,address,bytes)\":{\"details\":\"Entry point for receiving messages or packets from the endpoint.Entry point for receiving msg/packet from the LayerZero endpoint.\",\"params\":{\"_executor\":\"The address of the executor for the received message.\",\"_extraData\":\"Additional arbitrary data provided by the corresponding executor.\",\"_guid\":\"The unique identifier for the received LayerZero message.\",\"_message\":\"The payload of the received message.\",\"_origin\":\"The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message.\"}},\"lzReceiveAndRevert(((uint32,bytes32,uint64),uint32,address,bytes32,uint256,address,bytes,bytes)[])\":{\"details\":\"Interface for pre-crime simulations. Always reverts at the end with the simulation results.WARNING: MUST revert at the end with the simulation results.Gives the preCrime implementation the ability to mock sending packets to the lzReceive function, WITHOUT actually executing them.\",\"params\":{\"_packets\":\"An array of InboundPacket objects representing received packets to be delivered.\"}},\"lzReceiveSimulate((uint32,bytes32,uint64),bytes32,bytes,address,bytes)\":{\"details\":\"Is effectively an internal function because msg.sender must be address(this). Allows resetting the call stack for 'internal' calls.\",\"params\":{\"_executor\":\"The executor address for the packet.\",\"_extraData\":\"Additional data for the packet.\",\"_guid\":\"The unique identifier of the packet.\",\"_message\":\"The message payload of the packet.\",\"_origin\":\"The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message.\"}},\"nextNonce(uint32,bytes32)\":{\"details\":\"_srcEid The source endpoint ID._sender The sender address.The path nonce starts from 1. If 0 is returned it means that there is NO nonce ordered enforcement.Is required by the off-chain executor to determine the OApp expects msg execution is ordered.This is also enforced by the OApp.By default this is NOT enabled. ie. nextNonce is hardcoded to return 0.\",\"returns\":{\"nonce\":\"The next nonce.\"}},\"oApp()\":{\"details\":\"Retrieves the address of the OApp contract.The simulator contract is the base contract for the OApp by default.If the simulator is a separate contract, override this function.\",\"returns\":{\"_0\":\"The address of the OApp contract.\"}},\"oAppVersion()\":{\"returns\":{\"receiverVersion\":\"The version of the OAppReceiver.sol implementation.\",\"senderVersion\":\"The version of the OAppSender.sol implementation.\"}},\"oftVersion()\":{\"details\":\"interfaceId: This specific interface ID is '0x02e49c2c'.version: Indicates a cross-chain compatible msg encoding with other OFTs.If a new feature is added to the OFT cross-chain msg encoding, the version will be incremented. ie. localOFT version(x,1) CAN send messages to remoteOFT version(x,1)\",\"returns\":{\"interfaceId\":\"The interface ID.\",\"version\":\"The version.\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"quoteOFT((uint32,bytes32,uint256,uint256,bytes,bytes,bytes))\":{\"params\":{\"_sendParam\":\"The parameters for the send operation.\"},\"returns\":{\"oftFeeDetails\":\"The details of OFT fees.\",\"oftLimit\":\"The OFT limit information.\",\"oftReceipt\":\"The OFT receipt information.\"}},\"quoteSend((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),bool)\":{\"details\":\"MessagingFee: LayerZero msg fee - nativeFee: The native fee. - lzTokenFee: The lzToken fee.\",\"params\":{\"_payInLzToken\":\"Flag indicating whether the caller is paying in the LZ token.\",\"_sendParam\":\"The parameters for the send() operation.\"},\"returns\":{\"msgFee\":\"The calculated LayerZero messaging fee from the send() operation.\"}},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"send((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),(uint256,uint256),address)\":{\"details\":\"Executes the send operation.MessagingReceipt: LayerZero msg receipt - guid: The unique identifier for the sent message. - nonce: The nonce of the sent message. - fee: The LayerZero fee incurred for the message.\",\"params\":{\"_fee\":\"The calculated fee for the send() operation. - nativeFee: The native fee. - lzTokenFee: The lzToken fee.\",\"_refundAddress\":\"The address to receive any excess funds.\",\"_sendParam\":\"The parameters for the send operation.\"},\"returns\":{\"msgReceipt\":\"The receipt for the send operation.\",\"oftReceipt\":\"The OFT receipt information.\"}},\"setDelegate(address)\":{\"details\":\"Only the owner/admin of the OApp can call this function.Provides the ability for a delegate to set configs, on behalf of the OApp, directly on the Endpoint contract.\",\"params\":{\"_delegate\":\"The address of the delegate to be set.\"}},\"setEnforcedOptions((uint32,uint16,bytes)[])\":{\"details\":\"Sets the enforced options for specific endpoint and message type combinations.Only the owner/admin of the OApp can call this function.Provides a way for the OApp to enforce things like paying for PreCrime, AND/OR minimum dst lzReceive gas amounts etc.These enforced options can vary as the potential options/execution on the remote may differ as per the msgType. eg. Amount of lzReceive() gas necessary to deliver a lzCompose() message adds overhead you dont want to pay if you are only making a standard LayerZero message ie. lzReceive() WITHOUT sendCompose().\",\"params\":{\"_enforcedOptions\":\"An array of EnforcedOptionParam structures specifying enforced options.\"}},\"setMsgInspector(address)\":{\"details\":\"Sets the message inspector address for the OFT.This is an optional contract that can be used to inspect both 'message' and 'options'.Set it to address(0) to disable it, or set it to a contract address to enable it.\",\"params\":{\"_msgInspector\":\"The address of the message inspector.\"}},\"setPeer(uint32,bytes32)\":{\"details\":\"Only the owner/admin of the OApp can call this function.Indicates that the peer is trusted to send LayerZero messages to this OApp.Set this to bytes32(0) to remove the peer address.Peer is a bytes32 to accommodate non-evm chains.\",\"params\":{\"_eid\":\"The endpoint ID.\",\"_peer\":\"The address of the peer to be associated with the corresponding endpoint.\"}},\"setPreCrime(address)\":{\"details\":\"Sets the preCrime contract address.\",\"params\":{\"_preCrime\":\"The address of the preCrime contract.\"}},\"sharedDecimals()\":{\"details\":\"Retrieves the shared decimals of the OFT.Sets an implicit cap on the amount of tokens, over uint64.max() will need some sort of outbound cap / totalSupply cap Lowest common decimal denominator between chains. Defaults to 6 decimal places to provide up to 18,446,744,073,709.551615 units (max uint64). For tokens exceeding this totalSupply(), they will need to override the sharedDecimals function with something smaller. ie. 4 sharedDecimals would be 1,844,674,407,370,955.1615\",\"returns\":{\"_0\":\"The shared decimals of the OFT.\"}},\"token()\":{\"returns\":{\"_0\":\"token The address of the ERC20 token implementation.\"}},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"title\":\"OFTCore\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"allowInitializePath((uint32,bytes32,uint64))\":{\"notice\":\"Checks if the path initialization is allowed based on the provided origin.\"},\"approvalRequired()\":{\"notice\":\"Indicates whether the OFT contract requires approval of the 'token()' to send.\"},\"combineOptions(uint32,uint16,bytes)\":{\"notice\":\"Combines options for a given endpoint and message type.\"},\"endpoint()\":{\"notice\":\"Retrieves the LayerZero endpoint associated with the OApp.\"},\"isComposeMsgSender((uint32,bytes32,uint64),bytes,address)\":{\"notice\":\"Indicates whether an address is an approved composeMsg sender to the Endpoint.\"},\"nextNonce(uint32,bytes32)\":{\"notice\":\"Retrieves the next nonce for a given source endpoint and sender address.\"},\"oAppVersion()\":{\"notice\":\"Retrieves the OApp version information.\"},\"oftVersion()\":{\"notice\":\"Retrieves interfaceID and the version of the OFT.\"},\"peers(uint32)\":{\"notice\":\"Retrieves the peer (OApp) associated with a corresponding endpoint.\"},\"quoteOFT((uint32,bytes32,uint256,uint256,bytes,bytes,bytes))\":{\"notice\":\"Provides the fee breakdown and settings data for an OFT. Unused in the default implementation.\"},\"quoteSend((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),bool)\":{\"notice\":\"Provides a quote for the send() operation.\"},\"setDelegate(address)\":{\"notice\":\"Sets the delegate address for the OApp.\"},\"setPeer(uint32,bytes32)\":{\"notice\":\"Sets the peer address (OApp instance) for a corresponding endpoint.\"},\"token()\":{\"notice\":\"Retrieves the address of the token associated with the OFT.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/oft-evm/contracts/OFTCore.sol\":\"OFTCore\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\":{\"keccak256\":\"0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bacc29fd3866af71e59cb0bdc1cf82c882a4a7f4e2652fd413c9f12649762083\",\"dweb:/ipfs/QmZh2toLnrQDWaNYhS5K4NoW7Vxd2GdZx9KA77vKEDLAqs\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol\":{\"keccak256\":\"0x9641abba8d53b08bb517d1b74801dd15ea7b84d77a6719085bd96c8ea94e3ca0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://77415ae0820859e0faf3fabdce683cce9fa03ea026ae0f6fe081ef1c9205f933\",\"dweb:/ipfs/QmXd7APqoCunQ2jYy73AHvi5gsZofLpm3SzM6FPo7zRPfL\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol\":{\"keccak256\":\"0x5cf5f24751b4e3ea1c9c5ded07cedfdfd62566b6daaffcc0144733859c9dba0c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cae7e35007a714f007ea08045ef7c0cfa6c91fd2425b5028b2d49abad357a5f0\",\"dweb:/ipfs/QmcDBs5tsiyB35b8cwzWQWNnpkawb3uuHRaqE77Hxm2tve\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol\":{\"keccak256\":\"0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d8ff6a8a89297fa127f86b54e0db3eba1d6a6eeb4f6398d3c84d569665ac8f1b\",\"dweb:/ipfs/QmVSwhw6xFDrLRAX4RXaCM47yBaBtac4wf36DYEq6KCTvT\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol\":{\"keccak256\":\"0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7e1b245d58221d16d8b5e0f01ef3e289a24a7df1ace3b94239e4d5b954ad5927\",\"dweb:/ipfs/Qmappsgp7PCY9rSSNE9Cdn4BTRX591WfCSEgq2HxhA3z6S\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol\":{\"keccak256\":\"0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b18b23a1643fc6636c4ad9d9023e2e6ca2d3c2a4a046482d4655bff09950598d\",\"dweb:/ipfs/Qma6G5SqiovwrMPfgqTrRngK1HWW373Wkf9c6YP2NhXpPk\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol\":{\"keccak256\":\"0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5173fc9143bea314b159ca5a9adb5626659ef763bc598e27de5fa46efe3291a6\",\"dweb:/ipfs/QmSLFeMFPmVeGxT4sxRPW28ictjAS22M8rLeYRu9TXkA6D\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol\":{\"keccak256\":\"0xf1c07bc61e7b1dce195ed12d50f87980fbf2d63cac1326fd28287f55fe0ba625\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://060f10ff7afc33c1c2f2b4b5ba29231fd3c943146488084d0e4ab99fce991d97\",\"dweb:/ipfs/QmaSsefAqqEqtf8FgFUmDYMwTsAty3X1pqDb6SiFvry6B3\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol\":{\"keccak256\":\"0x2ebbcaaab3554edcd41b581f1a72ac1806afbfb8047d0d47ff098f9af30d6deb\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://2d4b2cf5c3b16dc76c6767f285b57c0af917972327b2be3f7cba5825402f5fc1\",\"dweb:/ipfs/QmQQWiHE2jKEDbjzGutSoZwtApSXYfLqZt5CxEpFj8xyvT\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol\":{\"keccak256\":\"0xc84cf1bf785977fe1fbe7566eef902c2db68d0e163813ebe6c34921754802680\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://de686666fc16fa432d4208d85cec87dc952faf3e481b683b9adf4b4610db4b09\",\"dweb:/ipfs/QmdmQeopzmxqRzi9DNB4EJDrYUXFfD7fUhnGhSni4QejUW\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OApp.sol\":{\"keccak256\":\"0xac362c4c291fad2f1511a968424b2e78a5ad502d1c867bd31da04be742aca8c5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e1f8cf9f20a2b683a53c3883972aa0676af97a24c678f461fae08e1fb056df28\",\"dweb:/ipfs/QmPpKNqda3rgxDwnq3XiRTtT3NfWeqrCJT6LwmhYd2AoT2\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppCore.sol\":{\"keccak256\":\"0x13a9c2d1d2c1f086b8624f2e84c4a4702212daae36f701d92bb915b535cbe4cc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://606515dd9193551bd2c94ac8c304f3776fafcc70e544ebf441f334658b2fd5f0\",\"dweb:/ipfs/QmZ88ey7DdZqV5taAoebabvszX5kdPMSrQCAmTteVdDtcH\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppReceiver.sol\":{\"keccak256\":\"0x0174e9f1ec4cefe4b5adc26c392269c699b9ff75965364e5b7264426a462c70b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cd12bb4fe5802c53911b9a0081a2ea10639b1f99925d1e5c1b1421d1bdc17075\",\"dweb:/ipfs/QmZonarwbKiEwQ8qoASKur2bbMjusdy9pqK9RCR4P1YPtc\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppSender.sol\":{\"keccak256\":\"0x518cf4adca601923ed4baa6619846a253ea32b8d8775f8bc1faa3dfac7f67c20\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d42b471418efadcc3577ef3fa9f8f504e8bed7db90c3b0c862038d8b29529eb2\",\"dweb:/ipfs/QmZETDQiJN4U92fmLKo8T9ZbdDf7BNBUUvo9H7M7GqAyFU\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppCore.sol\":{\"keccak256\":\"0x40e49f2de74506e1da5dcaed53a39853f691647f4ceb0fccc8f49a68d3f47c58\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4a1deb2a6a3eb1fb83936c9578469142bff470295f403d7d07d955a76be3adbd\",\"dweb:/ipfs/QmS9bjSfBaE4YhQ1PCQ1TknbEPbNfRXzBK9E7SaPGyiZEv\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppMsgInspector.sol\":{\"keccak256\":\"0x339654e699043c400cad92de209aa23855ce10211c31cf4114042cc5224d3b7c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5222afde59bf086f67b39e0288ad36343f4f5ed683d250533f256a5db956f37e\",\"dweb:/ipfs/QmbEG9EMYsK3Y6Cz7QbNtkW4kHGzMuhp2y2seSoL8v1A5b\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppOptionsType3.sol\":{\"keccak256\":\"0x9fc08a51e9d7c9c710c4eb26f84fe77228305ad7da63fa486ff24ebf2f3bc461\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2e2eea8a93bb9fc3f629767118b362e9b4bda2443ff95eae21c6a894f3e334cc\",\"dweb:/ipfs/QmPRRNjAB4U19ke4gr3U7ZJGtdcVBxdXVBZ2BmB1riFkP7\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppReceiver.sol\":{\"keccak256\":\"0xd26135185e19b3732746d4a9e2923e896f28dec8664bab161faea2ee26fcdc3d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c236dfe386b508be33c3a1a74ae1d4fd64b8c77ae207767e9dbed0f2429518a2\",\"dweb:/ipfs/QmXVbZJjfryTRti98uN3BMh5qh4K7NuEs1RSCoBjRoYd4q\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/libs/OAppOptionsType3.sol\":{\"keccak256\":\"0x5275636cd47e660a2fdf6c7fe9d41ff3cc866b785cc8a9d88c1b8ca983509f01\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a59dd6e3cfcc332f45a13d44585eb228588c4b9d470cbb19852df5753a4571af\",\"dweb:/ipfs/QmQJF1QU3MKhvmw42eq61u9z3bzKJJKMsEdQVYyPyYgTVS\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/precrime/OAppPreCrimeSimulator.sol\":{\"keccak256\":\"0x205a0abfd8b3c9af2740769f251381b84999b8e9347f3cd50de3ef8290a17750\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d9778d7d5da941af2029410b6ac212f915ea1785573ae2865b0ed8f779fcca82\",\"dweb:/ipfs/QmNkVEkfecvgubgnMuaT5fEfSExd95vz8DQHhpZtMrVRjH\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IOAppPreCrimeSimulator.sol\":{\"keccak256\":\"0x5d24db150949ea8e6437178e65a942e8c8b7f332e5daf32750f56b23b35b5bb2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1b1dcea0267234654126f926a1b405743606d7b5e49185b621afb7bd94d18b9a\",\"dweb:/ipfs/QmZ9BXQmbWJcrhHKuBs4yhNtbCV5WUpUY3AXSX7rkWwX6y\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IPreCrime.sol\":{\"keccak256\":\"0xc8d869f27ef8ceb2e13fdf6a70682fd4dee3f90c4924eb8e125bc1e66cb6af84\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://66bf49d59c14832ea0ddddcd12d512d4f9bd0fd254a1368442587bf3e77fe73e\",\"dweb:/ipfs/QmYUAvsyuUPiSYjbL4zVo6ZtiRSLCUPDvCesqgdZWbSGDg\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/precrime/libs/Packet.sol\":{\"keccak256\":\"0xcb2fb1c5b2eb3731de78b479b9c2ab3bba326fe0b0b3a008590f18e881e457a6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f70724c61d226743c2bd8ba6c09758805e4339780978949ce5b333c106be4edc\",\"dweb:/ipfs/QmX5rV9K1N7RgTz9xtf8CDG8SrYiitGAzFh9ec2tbnEec4\"]},\"node_modules/@layerzerolabs/oft-evm/contracts/OFTCore.sol\":{\"keccak256\":\"0x9ce49b83455df600b52538e42028c422a322643f7ffb4f2814c72c3b970ea7be\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2ebbf79612c3f6cd4e2754ba55519df6b89504ab5514e3517cbd286d87143997\",\"dweb:/ipfs/QmQZpSPhNhF4MESb2if2DbcjC75xfuoEzDGXmeJKYZtHZ5\"]},\"node_modules/@layerzerolabs/oft-evm/contracts/interfaces/IOFT.sol\":{\"keccak256\":\"0x7ba6bb62fba7ee83451cfb0e727ddeef0e96b4388bd4e9ff0fc6ce103e1101c8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cfbd447f2e8a730bd46a14c3c3e6a0b2bf7446145579603a9793ba5ac1dd38b4\",\"dweb:/ipfs/QmZ4nx4iGrFmBHvYFgki5TXFdCHz4Co38hgdgwpRaM7NLs\"]},\"node_modules/@layerzerolabs/oft-evm/contracts/libs/OFTComposeMsgCodec.sol\":{\"keccak256\":\"0xaae73d6eb8b9561c43f1802f3c416c00ccd35f172b711f9781ccdf1b25a40db5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7beda2d895ae9e15269dd261a492ce0a29b498e5bebf088ed6f2ae6a5185719e\",\"dweb:/ipfs/QmScog2tW1YVyEPLVcUVqGGc85ub46sA28nUKNzFEZcFdK\"]},\"node_modules/@layerzerolabs/oft-evm/contracts/libs/OFTMsgCodec.sol\":{\"keccak256\":\"0x5358948017669c03e157f871d8c38e988f9004dbd0801ad3119d2487f0d40b0b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c7d0f1bf32a80af9b99cd93fefa373dac5c27463351cc35f62b9c2439d5b9258\",\"dweb:/ipfs/Qmb81qoxzMwV3PkPANRvnXf4fJTsZ5sjJ8r2df9V2vhh6q\"]},\"node_modules/@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol\":{\"keccak256\":\"0x9b6b3e7803bc5f2f8cd7ad57db8ac1def61a9930a5a3107df4882e028a9605d7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://da62d6be1f5c6edf577f0cb45666a8aa9c2086a4bac87d95d65f02e2f4c36a4b\",\"dweb:/ipfs/QmNkpvBpoCMvX8JwAFNSc5XxJ2q5BXJpL5L1txb4QkqVFF\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC165.sol\":{\"keccak256\":\"0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://11fea9f8bc98949ac6709f0c1699db7430d2948137aa94d5a9e95a91f61a710a\",\"dweb:/ipfs/QmQdfRXxQjwP6yn3DVo1GHPpriKNcFghSPi94Z1oKEFUNS\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC20.sol\":{\"keccak256\":\"0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a2608291cb038b388d80b79a06b6118a42f7894ff67b7da10ec0dbbf5b2973ba\",\"dweb:/ipfs/QmWohqcBLbcxmA4eGPhZDXe5RYMMEEpFq22nfkaUMvTfw1\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db\",\"dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0xca2ae13e0610f6a99238dd00b97bd786bc92732dae6d6b9d61f573ec51018310\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://75f8c71ce0c91c40dd5f249ace0b7d8270f8f1767231bcf71490f7157d6ba862\",\"dweb:/ipfs/QmYXgxeDyFHvz3JsXxLEYN6GNUR44ThHeFj5XkpkgMoG4w\"]},\"node_modules/@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0x9d8da059267bac779a2dbbb9a26c2acf00ca83085e105d62d5d4ef96054a47f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c78e2aa4313323cecd1ef12a8d6265b96beee1a199923abf55d9a2a9e291ad23\",\"dweb:/ipfs/QmUTs2KStXucZezzFo3EYeqYu47utu56qrF7jj1Gue65vb\"]},\"node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"node_modules/@openzeppelin/contracts/utils/Errors.sol\":{\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf\",\"dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB\"]},\"node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { "inputs": [], "type": "error", "name": "InvalidDelegate" }, - { "inputs": [], "type": "error", "name": "InvalidEndpointCall" }, - { "inputs": [], "type": "error", "name": "InvalidLocalDecimals" }, - { - "inputs": [ - { "internalType": "bytes", "name": "options", "type": "bytes" } - ], - "type": "error", - "name": "InvalidOptions" - }, - { "inputs": [], "type": "error", "name": "LzTokenUnavailable" }, - { - "inputs": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" } - ], - "type": "error", - "name": "NoPeer" - }, - { - "inputs": [ - { "internalType": "uint256", "name": "msgValue", "type": "uint256" } - ], - "type": "error", - "name": "NotEnoughNative" - }, - { - "inputs": [ - { "internalType": "address", "name": "addr", "type": "address" } - ], - "type": "error", - "name": "OnlyEndpoint" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" }, - { "internalType": "bytes32", "name": "sender", "type": "bytes32" } - ], - "type": "error", - "name": "OnlyPeer" - }, - { "inputs": [], "type": "error", "name": "OnlySelf" }, - { - "inputs": [ - { "internalType": "address", "name": "owner", "type": "address" } - ], - "type": "error", - "name": "OwnableInvalidOwner" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "type": "error", - "name": "OwnableUnauthorizedAccount" - }, - { - "inputs": [ - { "internalType": "address", "name": "token", "type": "address" } - ], - "type": "error", - "name": "SafeERC20FailedOperation" - }, - { - "inputs": [ - { "internalType": "bytes", "name": "result", "type": "bytes" } - ], - "type": "error", - "name": "SimulationResult" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "amountLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minAmountLD", - "type": "uint256" - } - ], - "type": "error", - "name": "SlippageExceeded" - }, - { - "inputs": [ - { - "internalType": "struct EnforcedOptionParam[]", - "name": "_enforcedOptions", - "type": "tuple[]", - "components": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" }, - { - "internalType": "uint16", - "name": "msgType", - "type": "uint16" - }, - { "internalType": "bytes", "name": "options", "type": "bytes" } - ], - "indexed": false - } - ], - "type": "event", - "name": "EnforcedOptionSet", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "inspector", - "type": "address", - "indexed": false - } - ], - "type": "event", - "name": "MsgInspectorSet", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "guid", - "type": "bytes32", - "indexed": true - }, - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32", - "indexed": false - }, - { - "internalType": "address", - "name": "toAddress", - "type": "address", - "indexed": true - }, - { - "internalType": "uint256", - "name": "amountReceivedLD", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "OFTReceived", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "guid", - "type": "bytes32", - "indexed": true - }, - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32", - "indexed": false - }, - { - "internalType": "address", - "name": "fromAddress", - "type": "address", - "indexed": true - }, - { - "internalType": "uint256", - "name": "amountSentLD", - "type": "uint256", - "indexed": false - }, - { - "internalType": "uint256", - "name": "amountReceivedLD", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "OFTSent", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "previousOwner", - "type": "address", - "indexed": true - }, - { - "internalType": "address", - "name": "newOwner", - "type": "address", - "indexed": true - } - ], - "type": "event", - "name": "OwnershipTransferred", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "eid", - "type": "uint32", - "indexed": false - }, - { - "internalType": "bytes32", - "name": "peer", - "type": "bytes32", - "indexed": false - } - ], - "type": "event", - "name": "PeerSet", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "preCrimeAddress", - "type": "address", - "indexed": false - } - ], - "type": "event", - "name": "PreCrimeSet", - "anonymous": false - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "SEND", - "outputs": [ - { "internalType": "uint16", "name": "", "type": "uint16" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "SEND_AND_CALL", - "outputs": [ - { "internalType": "uint16", "name": "", "type": "uint16" } - ] - }, - { - "inputs": [ - { - "internalType": "struct Origin", - "name": "origin", - "type": "tuple", - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { "internalType": "uint64", "name": "nonce", "type": "uint64" } - ] - } - ], - "stateMutability": "view", - "type": "function", - "name": "allowInitializePath", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "approvalRequired", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { "internalType": "uint16", "name": "_msgType", "type": "uint16" }, - { - "internalType": "bytes", - "name": "_extraOptions", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function", - "name": "combineOptions", - "outputs": [{ "internalType": "bytes", "name": "", "type": "bytes" }] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "decimalConversionRate", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "endpoint", - "outputs": [ - { - "internalType": "contract ILayerZeroEndpointV2", - "name": "", - "type": "address" - } - ] - }, - { - "inputs": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" }, - { "internalType": "uint16", "name": "msgType", "type": "uint16" } - ], - "stateMutability": "view", - "type": "function", - "name": "enforcedOptions", - "outputs": [ - { - "internalType": "bytes", - "name": "enforcedOption", - "type": "bytes" - } - ] - }, - { - "inputs": [ - { - "internalType": "struct Origin", - "name": "", - "type": "tuple", - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { "internalType": "uint64", "name": "nonce", "type": "uint64" } - ] - }, - { "internalType": "bytes", "name": "", "type": "bytes" }, - { "internalType": "address", "name": "_sender", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "isComposeMsgSender", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { "internalType": "bytes32", "name": "_peer", "type": "bytes32" } - ], - "stateMutability": "view", - "type": "function", - "name": "isPeer", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { - "internalType": "struct Origin", - "name": "_origin", - "type": "tuple", - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { "internalType": "uint64", "name": "nonce", "type": "uint64" } - ] - }, - { "internalType": "bytes32", "name": "_guid", "type": "bytes32" }, - { "internalType": "bytes", "name": "_message", "type": "bytes" }, - { - "internalType": "address", - "name": "_executor", - "type": "address" - }, - { "internalType": "bytes", "name": "_extraData", "type": "bytes" } - ], - "stateMutability": "payable", - "type": "function", - "name": "lzReceive" - }, - { - "inputs": [ - { - "internalType": "struct InboundPacket[]", - "name": "_packets", - "type": "tuple[]", - "components": [ - { - "internalType": "struct Origin", - "name": "origin", - "type": "tuple", - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - } - ] - }, - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "guid", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "address", - "name": "executor", - "type": "address" - }, - { "internalType": "bytes", "name": "message", "type": "bytes" }, - { - "internalType": "bytes", - "name": "extraData", - "type": "bytes" - } - ] - } - ], - "stateMutability": "payable", - "type": "function", - "name": "lzReceiveAndRevert" - }, - { - "inputs": [ - { - "internalType": "struct Origin", - "name": "_origin", - "type": "tuple", - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { "internalType": "uint64", "name": "nonce", "type": "uint64" } - ] - }, - { "internalType": "bytes32", "name": "_guid", "type": "bytes32" }, - { "internalType": "bytes", "name": "_message", "type": "bytes" }, - { - "internalType": "address", - "name": "_executor", - "type": "address" - }, - { "internalType": "bytes", "name": "_extraData", "type": "bytes" } - ], - "stateMutability": "payable", - "type": "function", - "name": "lzReceiveSimulate" - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "msgInspector", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ] - }, - { - "inputs": [ - { "internalType": "uint32", "name": "", "type": "uint32" }, - { "internalType": "bytes32", "name": "", "type": "bytes32" } - ], - "stateMutability": "view", - "type": "function", - "name": "nextNonce", - "outputs": [ - { "internalType": "uint64", "name": "nonce", "type": "uint64" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "oApp", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ] - }, - { - "inputs": [], - "stateMutability": "pure", - "type": "function", - "name": "oAppVersion", - "outputs": [ - { - "internalType": "uint64", - "name": "senderVersion", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "receiverVersion", - "type": "uint64" - } - ] - }, - { - "inputs": [], - "stateMutability": "pure", - "type": "function", - "name": "oftVersion", - "outputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - }, - { "internalType": "uint64", "name": "version", "type": "uint64" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "owner", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ] - }, - { - "inputs": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" } - ], - "stateMutability": "view", - "type": "function", - "name": "peers", - "outputs": [ - { "internalType": "bytes32", "name": "peer", "type": "bytes32" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "preCrime", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ] - }, - { - "inputs": [ - { - "internalType": "struct SendParam", - "name": "_sendParam", - "type": "tuple", - "components": [ - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { "internalType": "bytes32", "name": "to", "type": "bytes32" }, - { - "internalType": "uint256", - "name": "amountLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minAmountLD", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "extraOptions", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "composeMsg", - "type": "bytes" - }, - { "internalType": "bytes", "name": "oftCmd", "type": "bytes" } - ] - } - ], - "stateMutability": "view", - "type": "function", - "name": "quoteOFT", - "outputs": [ - { - "internalType": "struct OFTLimit", - "name": "oftLimit", - "type": "tuple", - "components": [ - { - "internalType": "uint256", - "name": "minAmountLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxAmountLD", - "type": "uint256" - } - ] - }, - { - "internalType": "struct OFTFeeDetail[]", - "name": "oftFeeDetails", - "type": "tuple[]", - "components": [ - { - "internalType": "int256", - "name": "feeAmountLD", - "type": "int256" - }, - { - "internalType": "string", - "name": "description", - "type": "string" - } - ] - }, - { - "internalType": "struct OFTReceipt", - "name": "oftReceipt", - "type": "tuple", - "components": [ - { - "internalType": "uint256", - "name": "amountSentLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "amountReceivedLD", - "type": "uint256" - } - ] - } - ] - }, - { - "inputs": [ - { - "internalType": "struct SendParam", - "name": "_sendParam", - "type": "tuple", - "components": [ - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { "internalType": "bytes32", "name": "to", "type": "bytes32" }, - { - "internalType": "uint256", - "name": "amountLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minAmountLD", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "extraOptions", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "composeMsg", - "type": "bytes" - }, - { "internalType": "bytes", "name": "oftCmd", "type": "bytes" } - ] - }, - { "internalType": "bool", "name": "_payInLzToken", "type": "bool" } - ], - "stateMutability": "view", - "type": "function", - "name": "quoteSend", - "outputs": [ - { - "internalType": "struct MessagingFee", - "name": "msgFee", - "type": "tuple", - "components": [ - { - "internalType": "uint256", - "name": "nativeFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "lzTokenFee", - "type": "uint256" - } - ] - } - ] - }, - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "function", - "name": "renounceOwnership" - }, - { - "inputs": [ - { - "internalType": "struct SendParam", - "name": "_sendParam", - "type": "tuple", - "components": [ - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { "internalType": "bytes32", "name": "to", "type": "bytes32" }, - { - "internalType": "uint256", - "name": "amountLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minAmountLD", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "extraOptions", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "composeMsg", - "type": "bytes" - }, - { "internalType": "bytes", "name": "oftCmd", "type": "bytes" } - ] - }, - { - "internalType": "struct MessagingFee", - "name": "_fee", - "type": "tuple", - "components": [ - { - "internalType": "uint256", - "name": "nativeFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "lzTokenFee", - "type": "uint256" - } - ] - }, - { - "internalType": "address", - "name": "_refundAddress", - "type": "address" - } - ], - "stateMutability": "payable", - "type": "function", - "name": "send", - "outputs": [ - { - "internalType": "struct MessagingReceipt", - "name": "msgReceipt", - "type": "tuple", - "components": [ - { - "internalType": "bytes32", - "name": "guid", - "type": "bytes32" - }, - { "internalType": "uint64", "name": "nonce", "type": "uint64" }, - { - "internalType": "struct MessagingFee", - "name": "fee", - "type": "tuple", - "components": [ - { - "internalType": "uint256", - "name": "nativeFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "lzTokenFee", - "type": "uint256" - } - ] - } - ] - }, - { - "internalType": "struct OFTReceipt", - "name": "oftReceipt", - "type": "tuple", - "components": [ - { - "internalType": "uint256", - "name": "amountSentLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "amountReceivedLD", - "type": "uint256" - } - ] - } - ] - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_delegate", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setDelegate" - }, - { - "inputs": [ - { - "internalType": "struct EnforcedOptionParam[]", - "name": "_enforcedOptions", - "type": "tuple[]", - "components": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" }, - { - "internalType": "uint16", - "name": "msgType", - "type": "uint16" - }, - { "internalType": "bytes", "name": "options", "type": "bytes" } - ] - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setEnforcedOptions" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_msgInspector", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setMsgInspector" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { "internalType": "bytes32", "name": "_peer", "type": "bytes32" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setPeer" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_preCrime", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setPreCrime" - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "sharedDecimals", - "outputs": [{ "internalType": "uint8", "name": "", "type": "uint8" }] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "token", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "newOwner", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "transferOwnership" - } - ], - "devdoc": { - "kind": "dev", - "methods": { - "allowInitializePath((uint32,bytes32,uint64))": { - "details": "This indicates to the endpoint that the OApp has enabled msgs for this particular path to be received.This defaults to assuming if a peer has been set, its initialized. Can be overridden by the OApp if there is other logic to determine this.", - "params": { - "origin": "The origin information containing the source endpoint and sender address." - }, - "returns": { "_0": "Whether the path has been initialized." } - }, - "approvalRequired()": { - "details": "Allows things like wallet implementers to determine integration requirements, without understanding the underlying token implementation.", - "returns": { - "_0": "requiresApproval Needs approval of the underlying token implementation." - } - }, - "combineOptions(uint32,uint16,bytes)": { - "details": "If there is an enforced lzReceive option: - {gasLimit: 200k, msg.value: 1 ether} AND a caller supplies a lzReceive option: {gasLimit: 100k, msg.value: 0.5 ether} - The resulting options will be {gasLimit: 300k, msg.value: 1.5 ether} when the message is executed on the remote lzReceive() function.This presence of duplicated options is handled off-chain in the verifier/executor.", - "params": { - "_eid": "The endpoint ID.", - "_extraOptions": "Additional options passed by the caller.", - "_msgType": "The OAPP message type." - }, - "returns": { - "_0": "options The combination of caller specified options AND enforced options." - } - }, - "constructor": { - "details": "Constructor.", - "params": { - "_delegate": "The delegate capable of making OApp configurations inside of the endpoint.", - "_endpoint": "The address of the LayerZero endpoint.", - "_localDecimals": "The decimals of the token on the local chain (this chain)." - } - }, - "isComposeMsgSender((uint32,bytes32,uint64),bytes,address)": { - "details": "_origin The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message._message The lzReceive payload.Applications can optionally choose to implement separate composeMsg senders that are NOT the bridging layer.The default sender IS the OAppReceiver implementer.", - "params": { "_sender": "The sender address." }, - "returns": { "_0": "isSender Is a valid sender." } - }, - "isPeer(uint32,bytes32)": { - "details": "Check if the peer is considered 'trusted' by the OApp.Enables OAppPreCrimeSimulator to check whether a potential Inbound Packet is from a trusted source.", - "params": { - "_eid": "The endpoint ID to check.", - "_peer": "The peer to check." - }, - "returns": { - "_0": "Whether the peer passed is considered 'trusted' by the OApp." - } - }, - "lzReceive((uint32,bytes32,uint64),bytes32,bytes,address,bytes)": { - "details": "Entry point for receiving messages or packets from the endpoint.Entry point for receiving msg/packet from the LayerZero endpoint.", - "params": { - "_executor": "The address of the executor for the received message.", - "_extraData": "Additional arbitrary data provided by the corresponding executor.", - "_guid": "The unique identifier for the received LayerZero message.", - "_message": "The payload of the received message.", - "_origin": "The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message." - } - }, - "lzReceiveAndRevert(((uint32,bytes32,uint64),uint32,address,bytes32,uint256,address,bytes,bytes)[])": { - "details": "Interface for pre-crime simulations. Always reverts at the end with the simulation results.WARNING: MUST revert at the end with the simulation results.Gives the preCrime implementation the ability to mock sending packets to the lzReceive function, WITHOUT actually executing them.", - "params": { - "_packets": "An array of InboundPacket objects representing received packets to be delivered." - } - }, - "lzReceiveSimulate((uint32,bytes32,uint64),bytes32,bytes,address,bytes)": { - "details": "Is effectively an internal function because msg.sender must be address(this). Allows resetting the call stack for 'internal' calls.", - "params": { - "_executor": "The executor address for the packet.", - "_extraData": "Additional data for the packet.", - "_guid": "The unique identifier of the packet.", - "_message": "The message payload of the packet.", - "_origin": "The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message." - } - }, - "nextNonce(uint32,bytes32)": { - "details": "_srcEid The source endpoint ID._sender The sender address.The path nonce starts from 1. If 0 is returned it means that there is NO nonce ordered enforcement.Is required by the off-chain executor to determine the OApp expects msg execution is ordered.This is also enforced by the OApp.By default this is NOT enabled. ie. nextNonce is hardcoded to return 0.", - "returns": { "nonce": "The next nonce." } - }, - "oApp()": { - "details": "Retrieves the address of the OApp contract.The simulator contract is the base contract for the OApp by default.If the simulator is a separate contract, override this function.", - "returns": { "_0": "The address of the OApp contract." } - }, - "oAppVersion()": { - "returns": { - "receiverVersion": "The version of the OAppReceiver.sol implementation.", - "senderVersion": "The version of the OAppSender.sol implementation." - } - }, - "oftVersion()": { - "details": "interfaceId: This specific interface ID is '0x02e49c2c'.version: Indicates a cross-chain compatible msg encoding with other OFTs.If a new feature is added to the OFT cross-chain msg encoding, the version will be incremented. ie. localOFT version(x,1) CAN send messages to remoteOFT version(x,1)", - "returns": { - "interfaceId": "The interface ID.", - "version": "The version." - } - }, - "owner()": { "details": "Returns the address of the current owner." }, - "quoteOFT((uint32,bytes32,uint256,uint256,bytes,bytes,bytes))": { - "params": { - "_sendParam": "The parameters for the send operation." - }, - "returns": { - "oftFeeDetails": "The details of OFT fees.", - "oftLimit": "The OFT limit information.", - "oftReceipt": "The OFT receipt information." - } - }, - "quoteSend((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),bool)": { - "details": "MessagingFee: LayerZero msg fee - nativeFee: The native fee. - lzTokenFee: The lzToken fee.", - "params": { - "_payInLzToken": "Flag indicating whether the caller is paying in the LZ token.", - "_sendParam": "The parameters for the send() operation." - }, - "returns": { - "msgFee": "The calculated LayerZero messaging fee from the send() operation." - } - }, - "renounceOwnership()": { - "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner." - }, - "send((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),(uint256,uint256),address)": { - "details": "Executes the send operation.MessagingReceipt: LayerZero msg receipt - guid: The unique identifier for the sent message. - nonce: The nonce of the sent message. - fee: The LayerZero fee incurred for the message.", - "params": { - "_fee": "The calculated fee for the send() operation. - nativeFee: The native fee. - lzTokenFee: The lzToken fee.", - "_refundAddress": "The address to receive any excess funds.", - "_sendParam": "The parameters for the send operation." - }, - "returns": { - "msgReceipt": "The receipt for the send operation.", - "oftReceipt": "The OFT receipt information." - } - }, - "setDelegate(address)": { - "details": "Only the owner/admin of the OApp can call this function.Provides the ability for a delegate to set configs, on behalf of the OApp, directly on the Endpoint contract.", - "params": { "_delegate": "The address of the delegate to be set." } - }, - "setEnforcedOptions((uint32,uint16,bytes)[])": { - "details": "Sets the enforced options for specific endpoint and message type combinations.Only the owner/admin of the OApp can call this function.Provides a way for the OApp to enforce things like paying for PreCrime, AND/OR minimum dst lzReceive gas amounts etc.These enforced options can vary as the potential options/execution on the remote may differ as per the msgType. eg. Amount of lzReceive() gas necessary to deliver a lzCompose() message adds overhead you dont want to pay if you are only making a standard LayerZero message ie. lzReceive() WITHOUT sendCompose().", - "params": { - "_enforcedOptions": "An array of EnforcedOptionParam structures specifying enforced options." - } - }, - "setMsgInspector(address)": { - "details": "Sets the message inspector address for the OFT.This is an optional contract that can be used to inspect both 'message' and 'options'.Set it to address(0) to disable it, or set it to a contract address to enable it.", - "params": { - "_msgInspector": "The address of the message inspector." - } - }, - "setPeer(uint32,bytes32)": { - "details": "Only the owner/admin of the OApp can call this function.Indicates that the peer is trusted to send LayerZero messages to this OApp.Set this to bytes32(0) to remove the peer address.Peer is a bytes32 to accommodate non-evm chains.", - "params": { - "_eid": "The endpoint ID.", - "_peer": "The address of the peer to be associated with the corresponding endpoint." - } - }, - "setPreCrime(address)": { - "details": "Sets the preCrime contract address.", - "params": { "_preCrime": "The address of the preCrime contract." } - }, - "sharedDecimals()": { - "details": "Retrieves the shared decimals of the OFT.Sets an implicit cap on the amount of tokens, over uint64.max() will need some sort of outbound cap / totalSupply cap Lowest common decimal denominator between chains. Defaults to 6 decimal places to provide up to 18,446,744,073,709.551615 units (max uint64). For tokens exceeding this totalSupply(), they will need to override the sharedDecimals function with something smaller. ie. 4 sharedDecimals would be 1,844,674,407,370,955.1615", - "returns": { "_0": "The shared decimals of the OFT." } - }, - "token()": { - "returns": { - "_0": "token The address of the ERC20 token implementation." - } - }, - "transferOwnership(address)": { - "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." - } - }, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": { - "allowInitializePath((uint32,bytes32,uint64))": { - "notice": "Checks if the path initialization is allowed based on the provided origin." - }, - "approvalRequired()": { - "notice": "Indicates whether the OFT contract requires approval of the 'token()' to send." - }, - "combineOptions(uint32,uint16,bytes)": { - "notice": "Combines options for a given endpoint and message type." - }, - "endpoint()": { - "notice": "Retrieves the LayerZero endpoint associated with the OApp." - }, - "isComposeMsgSender((uint32,bytes32,uint64),bytes,address)": { - "notice": "Indicates whether an address is an approved composeMsg sender to the Endpoint." - }, - "nextNonce(uint32,bytes32)": { - "notice": "Retrieves the next nonce for a given source endpoint and sender address." - }, - "oAppVersion()": { - "notice": "Retrieves the OApp version information." - }, - "oftVersion()": { - "notice": "Retrieves interfaceID and the version of the OFT." - }, - "peers(uint32)": { - "notice": "Retrieves the peer (OApp) associated with a corresponding endpoint." - }, - "quoteOFT((uint32,bytes32,uint256,uint256,bytes,bytes,bytes))": { - "notice": "Provides the fee breakdown and settings data for an OFT. Unused in the default implementation." - }, - "quoteSend((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),bool)": { - "notice": "Provides a quote for the send() operation." - }, - "setDelegate(address)": { - "notice": "Sets the delegate address for the OApp." - }, - "setPeer(uint32,bytes32)": { - "notice": "Sets the peer address (OApp instance) for a corresponding endpoint." - }, - "token()": { - "notice": "Retrieves the address of the token associated with the OFT." - } - }, - "version": 1 - } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/oft-evm/contracts/OFTCore.sol": "OFTCore" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol": { - "keccak256": "0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3", - "urls": [ - "bzz-raw://bacc29fd3866af71e59cb0bdc1cf82c882a4a7f4e2652fd413c9f12649762083", - "dweb:/ipfs/QmZh2toLnrQDWaNYhS5K4NoW7Vxd2GdZx9KA77vKEDLAqs" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol": { - "keccak256": "0x9641abba8d53b08bb517d1b74801dd15ea7b84d77a6719085bd96c8ea94e3ca0", - "urls": [ - "bzz-raw://77415ae0820859e0faf3fabdce683cce9fa03ea026ae0f6fe081ef1c9205f933", - "dweb:/ipfs/QmXd7APqoCunQ2jYy73AHvi5gsZofLpm3SzM6FPo7zRPfL" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol": { - "keccak256": "0x5cf5f24751b4e3ea1c9c5ded07cedfdfd62566b6daaffcc0144733859c9dba0c", - "urls": [ - "bzz-raw://cae7e35007a714f007ea08045ef7c0cfa6c91fd2425b5028b2d49abad357a5f0", - "dweb:/ipfs/QmcDBs5tsiyB35b8cwzWQWNnpkawb3uuHRaqE77Hxm2tve" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol": { - "keccak256": "0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc", - "urls": [ - "bzz-raw://d8ff6a8a89297fa127f86b54e0db3eba1d6a6eeb4f6398d3c84d569665ac8f1b", - "dweb:/ipfs/QmVSwhw6xFDrLRAX4RXaCM47yBaBtac4wf36DYEq6KCTvT" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol": { - "keccak256": "0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972", - "urls": [ - "bzz-raw://7e1b245d58221d16d8b5e0f01ef3e289a24a7df1ace3b94239e4d5b954ad5927", - "dweb:/ipfs/Qmappsgp7PCY9rSSNE9Cdn4BTRX591WfCSEgq2HxhA3z6S" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol": { - "keccak256": "0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901", - "urls": [ - "bzz-raw://b18b23a1643fc6636c4ad9d9023e2e6ca2d3c2a4a046482d4655bff09950598d", - "dweb:/ipfs/Qma6G5SqiovwrMPfgqTrRngK1HWW373Wkf9c6YP2NhXpPk" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol": { - "keccak256": "0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e", - "urls": [ - "bzz-raw://5173fc9143bea314b159ca5a9adb5626659ef763bc598e27de5fa46efe3291a6", - "dweb:/ipfs/QmSLFeMFPmVeGxT4sxRPW28ictjAS22M8rLeYRu9TXkA6D" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol": { - "keccak256": "0xf1c07bc61e7b1dce195ed12d50f87980fbf2d63cac1326fd28287f55fe0ba625", - "urls": [ - "bzz-raw://060f10ff7afc33c1c2f2b4b5ba29231fd3c943146488084d0e4ab99fce991d97", - "dweb:/ipfs/QmaSsefAqqEqtf8FgFUmDYMwTsAty3X1pqDb6SiFvry6B3" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol": { - "keccak256": "0x2ebbcaaab3554edcd41b581f1a72ac1806afbfb8047d0d47ff098f9af30d6deb", - "urls": [ - "bzz-raw://2d4b2cf5c3b16dc76c6767f285b57c0af917972327b2be3f7cba5825402f5fc1", - "dweb:/ipfs/QmQQWiHE2jKEDbjzGutSoZwtApSXYfLqZt5CxEpFj8xyvT" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol": { - "keccak256": "0xc84cf1bf785977fe1fbe7566eef902c2db68d0e163813ebe6c34921754802680", - "urls": [ - "bzz-raw://de686666fc16fa432d4208d85cec87dc952faf3e481b683b9adf4b4610db4b09", - "dweb:/ipfs/QmdmQeopzmxqRzi9DNB4EJDrYUXFfD7fUhnGhSni4QejUW" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OApp.sol": { - "keccak256": "0xac362c4c291fad2f1511a968424b2e78a5ad502d1c867bd31da04be742aca8c5", - "urls": [ - "bzz-raw://e1f8cf9f20a2b683a53c3883972aa0676af97a24c678f461fae08e1fb056df28", - "dweb:/ipfs/QmPpKNqda3rgxDwnq3XiRTtT3NfWeqrCJT6LwmhYd2AoT2" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppCore.sol": { - "keccak256": "0x13a9c2d1d2c1f086b8624f2e84c4a4702212daae36f701d92bb915b535cbe4cc", - "urls": [ - "bzz-raw://606515dd9193551bd2c94ac8c304f3776fafcc70e544ebf441f334658b2fd5f0", - "dweb:/ipfs/QmZ88ey7DdZqV5taAoebabvszX5kdPMSrQCAmTteVdDtcH" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppReceiver.sol": { - "keccak256": "0x0174e9f1ec4cefe4b5adc26c392269c699b9ff75965364e5b7264426a462c70b", - "urls": [ - "bzz-raw://cd12bb4fe5802c53911b9a0081a2ea10639b1f99925d1e5c1b1421d1bdc17075", - "dweb:/ipfs/QmZonarwbKiEwQ8qoASKur2bbMjusdy9pqK9RCR4P1YPtc" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppSender.sol": { - "keccak256": "0x518cf4adca601923ed4baa6619846a253ea32b8d8775f8bc1faa3dfac7f67c20", - "urls": [ - "bzz-raw://d42b471418efadcc3577ef3fa9f8f504e8bed7db90c3b0c862038d8b29529eb2", - "dweb:/ipfs/QmZETDQiJN4U92fmLKo8T9ZbdDf7BNBUUvo9H7M7GqAyFU" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppCore.sol": { - "keccak256": "0x40e49f2de74506e1da5dcaed53a39853f691647f4ceb0fccc8f49a68d3f47c58", - "urls": [ - "bzz-raw://4a1deb2a6a3eb1fb83936c9578469142bff470295f403d7d07d955a76be3adbd", - "dweb:/ipfs/QmS9bjSfBaE4YhQ1PCQ1TknbEPbNfRXzBK9E7SaPGyiZEv" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppMsgInspector.sol": { - "keccak256": "0x339654e699043c400cad92de209aa23855ce10211c31cf4114042cc5224d3b7c", - "urls": [ - "bzz-raw://5222afde59bf086f67b39e0288ad36343f4f5ed683d250533f256a5db956f37e", - "dweb:/ipfs/QmbEG9EMYsK3Y6Cz7QbNtkW4kHGzMuhp2y2seSoL8v1A5b" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppOptionsType3.sol": { - "keccak256": "0x9fc08a51e9d7c9c710c4eb26f84fe77228305ad7da63fa486ff24ebf2f3bc461", - "urls": [ - "bzz-raw://2e2eea8a93bb9fc3f629767118b362e9b4bda2443ff95eae21c6a894f3e334cc", - "dweb:/ipfs/QmPRRNjAB4U19ke4gr3U7ZJGtdcVBxdXVBZ2BmB1riFkP7" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppReceiver.sol": { - "keccak256": "0xd26135185e19b3732746d4a9e2923e896f28dec8664bab161faea2ee26fcdc3d", - "urls": [ - "bzz-raw://c236dfe386b508be33c3a1a74ae1d4fd64b8c77ae207767e9dbed0f2429518a2", - "dweb:/ipfs/QmXVbZJjfryTRti98uN3BMh5qh4K7NuEs1RSCoBjRoYd4q" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/libs/OAppOptionsType3.sol": { - "keccak256": "0x5275636cd47e660a2fdf6c7fe9d41ff3cc866b785cc8a9d88c1b8ca983509f01", - "urls": [ - "bzz-raw://a59dd6e3cfcc332f45a13d44585eb228588c4b9d470cbb19852df5753a4571af", - "dweb:/ipfs/QmQJF1QU3MKhvmw42eq61u9z3bzKJJKMsEdQVYyPyYgTVS" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/precrime/OAppPreCrimeSimulator.sol": { - "keccak256": "0x205a0abfd8b3c9af2740769f251381b84999b8e9347f3cd50de3ef8290a17750", - "urls": [ - "bzz-raw://d9778d7d5da941af2029410b6ac212f915ea1785573ae2865b0ed8f779fcca82", - "dweb:/ipfs/QmNkVEkfecvgubgnMuaT5fEfSExd95vz8DQHhpZtMrVRjH" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IOAppPreCrimeSimulator.sol": { - "keccak256": "0x5d24db150949ea8e6437178e65a942e8c8b7f332e5daf32750f56b23b35b5bb2", - "urls": [ - "bzz-raw://1b1dcea0267234654126f926a1b405743606d7b5e49185b621afb7bd94d18b9a", - "dweb:/ipfs/QmZ9BXQmbWJcrhHKuBs4yhNtbCV5WUpUY3AXSX7rkWwX6y" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IPreCrime.sol": { - "keccak256": "0xc8d869f27ef8ceb2e13fdf6a70682fd4dee3f90c4924eb8e125bc1e66cb6af84", - "urls": [ - "bzz-raw://66bf49d59c14832ea0ddddcd12d512d4f9bd0fd254a1368442587bf3e77fe73e", - "dweb:/ipfs/QmYUAvsyuUPiSYjbL4zVo6ZtiRSLCUPDvCesqgdZWbSGDg" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/precrime/libs/Packet.sol": { - "keccak256": "0xcb2fb1c5b2eb3731de78b479b9c2ab3bba326fe0b0b3a008590f18e881e457a6", - "urls": [ - "bzz-raw://f70724c61d226743c2bd8ba6c09758805e4339780978949ce5b333c106be4edc", - "dweb:/ipfs/QmX5rV9K1N7RgTz9xtf8CDG8SrYiitGAzFh9ec2tbnEec4" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oft-evm/contracts/OFTCore.sol": { - "keccak256": "0x9ce49b83455df600b52538e42028c422a322643f7ffb4f2814c72c3b970ea7be", - "urls": [ - "bzz-raw://2ebbf79612c3f6cd4e2754ba55519df6b89504ab5514e3517cbd286d87143997", - "dweb:/ipfs/QmQZpSPhNhF4MESb2if2DbcjC75xfuoEzDGXmeJKYZtHZ5" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oft-evm/contracts/interfaces/IOFT.sol": { - "keccak256": "0x7ba6bb62fba7ee83451cfb0e727ddeef0e96b4388bd4e9ff0fc6ce103e1101c8", - "urls": [ - "bzz-raw://cfbd447f2e8a730bd46a14c3c3e6a0b2bf7446145579603a9793ba5ac1dd38b4", - "dweb:/ipfs/QmZ4nx4iGrFmBHvYFgki5TXFdCHz4Co38hgdgwpRaM7NLs" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oft-evm/contracts/libs/OFTComposeMsgCodec.sol": { - "keccak256": "0xaae73d6eb8b9561c43f1802f3c416c00ccd35f172b711f9781ccdf1b25a40db5", - "urls": [ - "bzz-raw://7beda2d895ae9e15269dd261a492ce0a29b498e5bebf088ed6f2ae6a5185719e", - "dweb:/ipfs/QmScog2tW1YVyEPLVcUVqGGc85ub46sA28nUKNzFEZcFdK" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oft-evm/contracts/libs/OFTMsgCodec.sol": { - "keccak256": "0x5358948017669c03e157f871d8c38e988f9004dbd0801ad3119d2487f0d40b0b", - "urls": [ - "bzz-raw://c7d0f1bf32a80af9b99cd93fefa373dac5c27463351cc35f62b9c2439d5b9258", - "dweb:/ipfs/Qmb81qoxzMwV3PkPANRvnXf4fJTsZ5sjJ8r2df9V2vhh6q" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/access/Ownable.sol": { - "keccak256": "0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb", - "urls": [ - "bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6", - "dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol": { - "keccak256": "0x9b6b3e7803bc5f2f8cd7ad57db8ac1def61a9930a5a3107df4882e028a9605d7", - "urls": [ - "bzz-raw://da62d6be1f5c6edf577f0cb45666a8aa9c2086a4bac87d95d65f02e2f4c36a4b", - "dweb:/ipfs/QmNkpvBpoCMvX8JwAFNSc5XxJ2q5BXJpL5L1txb4QkqVFF" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/interfaces/IERC165.sol": { - "keccak256": "0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724", - "urls": [ - "bzz-raw://11fea9f8bc98949ac6709f0c1699db7430d2948137aa94d5a9e95a91f61a710a", - "dweb:/ipfs/QmQdfRXxQjwP6yn3DVo1GHPpriKNcFghSPi94Z1oKEFUNS" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/interfaces/IERC20.sol": { - "keccak256": "0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c", - "urls": [ - "bzz-raw://a2608291cb038b388d80b79a06b6118a42f7894ff67b7da10ec0dbbf5b2973ba", - "dweb:/ipfs/QmWohqcBLbcxmA4eGPhZDXe5RYMMEEpFq22nfkaUMvTfw1" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol": { - "keccak256": "0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7", - "urls": [ - "bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db", - "dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol": { - "keccak256": "0xca2ae13e0610f6a99238dd00b97bd786bc92732dae6d6b9d61f573ec51018310", - "urls": [ - "bzz-raw://75f8c71ce0c91c40dd5f249ace0b7d8270f8f1767231bcf71490f7157d6ba862", - "dweb:/ipfs/QmYXgxeDyFHvz3JsXxLEYN6GNUR44ThHeFj5XkpkgMoG4w" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Address.sol": { - "keccak256": "0x9d8da059267bac779a2dbbb9a26c2acf00ca83085e105d62d5d4ef96054a47f5", - "urls": [ - "bzz-raw://c78e2aa4313323cecd1ef12a8d6265b96beee1a199923abf55d9a2a9e291ad23", - "dweb:/ipfs/QmUTs2KStXucZezzFo3EYeqYu47utu56qrF7jj1Gue65vb" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Context.sol": { - "keccak256": "0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2", - "urls": [ - "bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12", - "dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Errors.sol": { - "keccak256": "0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123", - "urls": [ - "bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf", - "dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol": { - "keccak256": "0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8", - "urls": [ - "bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621", - "dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL" - ], - "license": "MIT" - } - }, - "version": 1 - }, - "id": 26 -} diff --git a/examples/oft-movement/out/OFTMock.sol/OFTMock.json b/examples/oft-movement/out/OFTMock.sol/OFTMock.json deleted file mode 100644 index 91a0665b5..000000000 --- a/examples/oft-movement/out/OFTMock.sol/OFTMock.json +++ /dev/null @@ -1,3214 +0,0 @@ -{ - "abi": [ - { - "type": "constructor", - "inputs": [ - { "name": "_name", "type": "string", "internalType": "string" }, - { "name": "_symbol", "type": "string", "internalType": "string" }, - { "name": "_lzEndpoint", "type": "address", "internalType": "address" }, - { "name": "_delegate", "type": "address", "internalType": "address" } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "SEND", - "inputs": [], - "outputs": [{ "name": "", "type": "uint16", "internalType": "uint16" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "SEND_AND_CALL", - "inputs": [], - "outputs": [{ "name": "", "type": "uint16", "internalType": "uint16" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "allowInitializePath", - "inputs": [ - { - "name": "origin", - "type": "tuple", - "internalType": "struct Origin", - "components": [ - { "name": "srcEid", "type": "uint32", "internalType": "uint32" }, - { "name": "sender", "type": "bytes32", "internalType": "bytes32" }, - { "name": "nonce", "type": "uint64", "internalType": "uint64" } - ] - } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "allowance", - "inputs": [ - { "name": "owner", "type": "address", "internalType": "address" }, - { "name": "spender", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "approvalRequired", - "inputs": [], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "approve", - "inputs": [ - { "name": "spender", "type": "address", "internalType": "address" }, - { "name": "value", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "balanceOf", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "buildMsgAndOptions", - "inputs": [ - { - "name": "_sendParam", - "type": "tuple", - "internalType": "struct SendParam", - "components": [ - { "name": "dstEid", "type": "uint32", "internalType": "uint32" }, - { "name": "to", "type": "bytes32", "internalType": "bytes32" }, - { - "name": "amountLD", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "minAmountLD", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "extraOptions", - "type": "bytes", - "internalType": "bytes" - }, - { "name": "composeMsg", "type": "bytes", "internalType": "bytes" }, - { "name": "oftCmd", "type": "bytes", "internalType": "bytes" } - ] - }, - { - "name": "_amountToCreditLD", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [ - { "name": "message", "type": "bytes", "internalType": "bytes" }, - { "name": "options", "type": "bytes", "internalType": "bytes" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "combineOptions", - "inputs": [ - { "name": "_eid", "type": "uint32", "internalType": "uint32" }, - { "name": "_msgType", "type": "uint16", "internalType": "uint16" }, - { "name": "_extraOptions", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [{ "name": "", "type": "bytes", "internalType": "bytes" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "credit", - "inputs": [ - { "name": "_to", "type": "address", "internalType": "address" }, - { - "name": "_amountToCreditLD", - "type": "uint256", - "internalType": "uint256" - }, - { "name": "_srcEid", "type": "uint32", "internalType": "uint32" } - ], - "outputs": [ - { - "name": "amountReceivedLD", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "debit", - "inputs": [ - { - "name": "_amountToSendLD", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "_minAmountToCreditLD", - "type": "uint256", - "internalType": "uint256" - }, - { "name": "_dstEid", "type": "uint32", "internalType": "uint32" } - ], - "outputs": [ - { - "name": "amountDebitedLD", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "amountToCreditLD", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "debitView", - "inputs": [ - { - "name": "_amountToSendLD", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "_minAmountToCreditLD", - "type": "uint256", - "internalType": "uint256" - }, - { "name": "_dstEid", "type": "uint32", "internalType": "uint32" } - ], - "outputs": [ - { - "name": "amountDebitedLD", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "amountToCreditLD", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "decimalConversionRate", - "inputs": [], - "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "decimals", - "inputs": [], - "outputs": [{ "name": "", "type": "uint8", "internalType": "uint8" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "endpoint", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "contract ILayerZeroEndpointV2" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "enforcedOptions", - "inputs": [ - { "name": "eid", "type": "uint32", "internalType": "uint32" }, - { "name": "msgType", "type": "uint16", "internalType": "uint16" } - ], - "outputs": [ - { "name": "enforcedOption", "type": "bytes", "internalType": "bytes" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "isComposeMsgSender", - "inputs": [ - { - "name": "", - "type": "tuple", - "internalType": "struct Origin", - "components": [ - { "name": "srcEid", "type": "uint32", "internalType": "uint32" }, - { "name": "sender", "type": "bytes32", "internalType": "bytes32" }, - { "name": "nonce", "type": "uint64", "internalType": "uint64" } - ] - }, - { "name": "", "type": "bytes", "internalType": "bytes" }, - { "name": "_sender", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "isPeer", - "inputs": [ - { "name": "_eid", "type": "uint32", "internalType": "uint32" }, - { "name": "_peer", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "lzReceive", - "inputs": [ - { - "name": "_origin", - "type": "tuple", - "internalType": "struct Origin", - "components": [ - { "name": "srcEid", "type": "uint32", "internalType": "uint32" }, - { "name": "sender", "type": "bytes32", "internalType": "bytes32" }, - { "name": "nonce", "type": "uint64", "internalType": "uint64" } - ] - }, - { "name": "_guid", "type": "bytes32", "internalType": "bytes32" }, - { "name": "_message", "type": "bytes", "internalType": "bytes" }, - { "name": "_executor", "type": "address", "internalType": "address" }, - { "name": "_extraData", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [], - "stateMutability": "payable" - }, - { - "type": "function", - "name": "lzReceiveAndRevert", - "inputs": [ - { - "name": "_packets", - "type": "tuple[]", - "internalType": "struct InboundPacket[]", - "components": [ - { - "name": "origin", - "type": "tuple", - "internalType": "struct Origin", - "components": [ - { - "name": "srcEid", - "type": "uint32", - "internalType": "uint32" - }, - { - "name": "sender", - "type": "bytes32", - "internalType": "bytes32" - }, - { "name": "nonce", "type": "uint64", "internalType": "uint64" } - ] - }, - { "name": "dstEid", "type": "uint32", "internalType": "uint32" }, - { - "name": "receiver", - "type": "address", - "internalType": "address" - }, - { "name": "guid", "type": "bytes32", "internalType": "bytes32" }, - { "name": "value", "type": "uint256", "internalType": "uint256" }, - { - "name": "executor", - "type": "address", - "internalType": "address" - }, - { "name": "message", "type": "bytes", "internalType": "bytes" }, - { "name": "extraData", "type": "bytes", "internalType": "bytes" } - ] - } - ], - "outputs": [], - "stateMutability": "payable" - }, - { - "type": "function", - "name": "lzReceiveSimulate", - "inputs": [ - { - "name": "_origin", - "type": "tuple", - "internalType": "struct Origin", - "components": [ - { "name": "srcEid", "type": "uint32", "internalType": "uint32" }, - { "name": "sender", "type": "bytes32", "internalType": "bytes32" }, - { "name": "nonce", "type": "uint64", "internalType": "uint64" } - ] - }, - { "name": "_guid", "type": "bytes32", "internalType": "bytes32" }, - { "name": "_message", "type": "bytes", "internalType": "bytes" }, - { "name": "_executor", "type": "address", "internalType": "address" }, - { "name": "_extraData", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [], - "stateMutability": "payable" - }, - { - "type": "function", - "name": "mint", - "inputs": [ - { "name": "_to", "type": "address", "internalType": "address" }, - { "name": "_amount", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "msgInspector", - "inputs": [], - "outputs": [{ "name": "", "type": "address", "internalType": "address" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "name", - "inputs": [], - "outputs": [{ "name": "", "type": "string", "internalType": "string" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "nextNonce", - "inputs": [ - { "name": "", "type": "uint32", "internalType": "uint32" }, - { "name": "", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [ - { "name": "nonce", "type": "uint64", "internalType": "uint64" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "oApp", - "inputs": [], - "outputs": [{ "name": "", "type": "address", "internalType": "address" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "oAppVersion", - "inputs": [], - "outputs": [ - { "name": "senderVersion", "type": "uint64", "internalType": "uint64" }, - { - "name": "receiverVersion", - "type": "uint64", - "internalType": "uint64" - } - ], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "oftVersion", - "inputs": [], - "outputs": [ - { "name": "interfaceId", "type": "bytes4", "internalType": "bytes4" }, - { "name": "version", "type": "uint64", "internalType": "uint64" } - ], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "owner", - "inputs": [], - "outputs": [{ "name": "", "type": "address", "internalType": "address" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "peers", - "inputs": [{ "name": "eid", "type": "uint32", "internalType": "uint32" }], - "outputs": [ - { "name": "peer", "type": "bytes32", "internalType": "bytes32" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "preCrime", - "inputs": [], - "outputs": [{ "name": "", "type": "address", "internalType": "address" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "quoteOFT", - "inputs": [ - { - "name": "_sendParam", - "type": "tuple", - "internalType": "struct SendParam", - "components": [ - { "name": "dstEid", "type": "uint32", "internalType": "uint32" }, - { "name": "to", "type": "bytes32", "internalType": "bytes32" }, - { - "name": "amountLD", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "minAmountLD", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "extraOptions", - "type": "bytes", - "internalType": "bytes" - }, - { "name": "composeMsg", "type": "bytes", "internalType": "bytes" }, - { "name": "oftCmd", "type": "bytes", "internalType": "bytes" } - ] - } - ], - "outputs": [ - { - "name": "oftLimit", - "type": "tuple", - "internalType": "struct OFTLimit", - "components": [ - { - "name": "minAmountLD", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "maxAmountLD", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "name": "oftFeeDetails", - "type": "tuple[]", - "internalType": "struct OFTFeeDetail[]", - "components": [ - { - "name": "feeAmountLD", - "type": "int256", - "internalType": "int256" - }, - { - "name": "description", - "type": "string", - "internalType": "string" - } - ] - }, - { - "name": "oftReceipt", - "type": "tuple", - "internalType": "struct OFTReceipt", - "components": [ - { - "name": "amountSentLD", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "amountReceivedLD", - "type": "uint256", - "internalType": "uint256" - } - ] - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "quoteSend", - "inputs": [ - { - "name": "_sendParam", - "type": "tuple", - "internalType": "struct SendParam", - "components": [ - { "name": "dstEid", "type": "uint32", "internalType": "uint32" }, - { "name": "to", "type": "bytes32", "internalType": "bytes32" }, - { - "name": "amountLD", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "minAmountLD", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "extraOptions", - "type": "bytes", - "internalType": "bytes" - }, - { "name": "composeMsg", "type": "bytes", "internalType": "bytes" }, - { "name": "oftCmd", "type": "bytes", "internalType": "bytes" } - ] - }, - { "name": "_payInLzToken", "type": "bool", "internalType": "bool" } - ], - "outputs": [ - { - "name": "msgFee", - "type": "tuple", - "internalType": "struct MessagingFee", - "components": [ - { - "name": "nativeFee", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "lzTokenFee", - "type": "uint256", - "internalType": "uint256" - } - ] - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "removeDust", - "inputs": [ - { "name": "_amountLD", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [ - { "name": "amountLD", "type": "uint256", "internalType": "uint256" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "renounceOwnership", - "inputs": [], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "send", - "inputs": [ - { - "name": "_sendParam", - "type": "tuple", - "internalType": "struct SendParam", - "components": [ - { "name": "dstEid", "type": "uint32", "internalType": "uint32" }, - { "name": "to", "type": "bytes32", "internalType": "bytes32" }, - { - "name": "amountLD", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "minAmountLD", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "extraOptions", - "type": "bytes", - "internalType": "bytes" - }, - { "name": "composeMsg", "type": "bytes", "internalType": "bytes" }, - { "name": "oftCmd", "type": "bytes", "internalType": "bytes" } - ] - }, - { - "name": "_fee", - "type": "tuple", - "internalType": "struct MessagingFee", - "components": [ - { - "name": "nativeFee", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "lzTokenFee", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "name": "_refundAddress", - "type": "address", - "internalType": "address" - } - ], - "outputs": [ - { - "name": "msgReceipt", - "type": "tuple", - "internalType": "struct MessagingReceipt", - "components": [ - { "name": "guid", "type": "bytes32", "internalType": "bytes32" }, - { "name": "nonce", "type": "uint64", "internalType": "uint64" }, - { - "name": "fee", - "type": "tuple", - "internalType": "struct MessagingFee", - "components": [ - { - "name": "nativeFee", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "lzTokenFee", - "type": "uint256", - "internalType": "uint256" - } - ] - } - ] - }, - { - "name": "oftReceipt", - "type": "tuple", - "internalType": "struct OFTReceipt", - "components": [ - { - "name": "amountSentLD", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "amountReceivedLD", - "type": "uint256", - "internalType": "uint256" - } - ] - } - ], - "stateMutability": "payable" - }, - { - "type": "function", - "name": "setDelegate", - "inputs": [ - { "name": "_delegate", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setEnforcedOptions", - "inputs": [ - { - "name": "_enforcedOptions", - "type": "tuple[]", - "internalType": "struct EnforcedOptionParam[]", - "components": [ - { "name": "eid", "type": "uint32", "internalType": "uint32" }, - { "name": "msgType", "type": "uint16", "internalType": "uint16" }, - { "name": "options", "type": "bytes", "internalType": "bytes" } - ] - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setMsgInspector", - "inputs": [ - { - "name": "_msgInspector", - "type": "address", - "internalType": "address" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setPeer", - "inputs": [ - { "name": "_eid", "type": "uint32", "internalType": "uint32" }, - { "name": "_peer", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setPreCrime", - "inputs": [ - { "name": "_preCrime", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "sharedDecimals", - "inputs": [], - "outputs": [{ "name": "", "type": "uint8", "internalType": "uint8" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "symbol", - "inputs": [], - "outputs": [{ "name": "", "type": "string", "internalType": "string" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "toLD", - "inputs": [ - { "name": "_amountSD", "type": "uint64", "internalType": "uint64" } - ], - "outputs": [ - { "name": "amountLD", "type": "uint256", "internalType": "uint256" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "toSD", - "inputs": [ - { "name": "_amountLD", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [ - { "name": "amountSD", "type": "uint64", "internalType": "uint64" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "token", - "inputs": [], - "outputs": [{ "name": "", "type": "address", "internalType": "address" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "totalSupply", - "inputs": [], - "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "transfer", - "inputs": [ - { "name": "to", "type": "address", "internalType": "address" }, - { "name": "value", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "transferFrom", - "inputs": [ - { "name": "from", "type": "address", "internalType": "address" }, - { "name": "to", "type": "address", "internalType": "address" }, - { "name": "value", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "transferOwnership", - "inputs": [ - { "name": "newOwner", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "event", - "name": "Approval", - "inputs": [ - { - "name": "owner", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "spender", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "value", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "EnforcedOptionSet", - "inputs": [ - { - "name": "_enforcedOptions", - "type": "tuple[]", - "indexed": false, - "internalType": "struct EnforcedOptionParam[]", - "components": [ - { "name": "eid", "type": "uint32", "internalType": "uint32" }, - { "name": "msgType", "type": "uint16", "internalType": "uint16" }, - { "name": "options", "type": "bytes", "internalType": "bytes" } - ] - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "MsgInspectorSet", - "inputs": [ - { - "name": "inspector", - "type": "address", - "indexed": false, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "OFTReceived", - "inputs": [ - { - "name": "guid", - "type": "bytes32", - "indexed": true, - "internalType": "bytes32" - }, - { - "name": "srcEid", - "type": "uint32", - "indexed": false, - "internalType": "uint32" - }, - { - "name": "toAddress", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "amountReceivedLD", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "OFTSent", - "inputs": [ - { - "name": "guid", - "type": "bytes32", - "indexed": true, - "internalType": "bytes32" - }, - { - "name": "dstEid", - "type": "uint32", - "indexed": false, - "internalType": "uint32" - }, - { - "name": "fromAddress", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "amountSentLD", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - }, - { - "name": "amountReceivedLD", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "OwnershipTransferred", - "inputs": [ - { - "name": "previousOwner", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "newOwner", - "type": "address", - "indexed": true, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "PeerSet", - "inputs": [ - { - "name": "eid", - "type": "uint32", - "indexed": false, - "internalType": "uint32" - }, - { - "name": "peer", - "type": "bytes32", - "indexed": false, - "internalType": "bytes32" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "PreCrimeSet", - "inputs": [ - { - "name": "preCrimeAddress", - "type": "address", - "indexed": false, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "Transfer", - "inputs": [ - { - "name": "from", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "to", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "value", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "error", - "name": "ERC20InsufficientAllowance", - "inputs": [ - { "name": "spender", "type": "address", "internalType": "address" }, - { "name": "allowance", "type": "uint256", "internalType": "uint256" }, - { "name": "needed", "type": "uint256", "internalType": "uint256" } - ] - }, - { - "type": "error", - "name": "ERC20InsufficientBalance", - "inputs": [ - { "name": "sender", "type": "address", "internalType": "address" }, - { "name": "balance", "type": "uint256", "internalType": "uint256" }, - { "name": "needed", "type": "uint256", "internalType": "uint256" } - ] - }, - { - "type": "error", - "name": "ERC20InvalidApprover", - "inputs": [ - { "name": "approver", "type": "address", "internalType": "address" } - ] - }, - { - "type": "error", - "name": "ERC20InvalidReceiver", - "inputs": [ - { "name": "receiver", "type": "address", "internalType": "address" } - ] - }, - { - "type": "error", - "name": "ERC20InvalidSender", - "inputs": [ - { "name": "sender", "type": "address", "internalType": "address" } - ] - }, - { - "type": "error", - "name": "ERC20InvalidSpender", - "inputs": [ - { "name": "spender", "type": "address", "internalType": "address" } - ] - }, - { "type": "error", "name": "InvalidDelegate", "inputs": [] }, - { "type": "error", "name": "InvalidEndpointCall", "inputs": [] }, - { "type": "error", "name": "InvalidLocalDecimals", "inputs": [] }, - { - "type": "error", - "name": "InvalidOptions", - "inputs": [ - { "name": "options", "type": "bytes", "internalType": "bytes" } - ] - }, - { "type": "error", "name": "LzTokenUnavailable", "inputs": [] }, - { - "type": "error", - "name": "NoPeer", - "inputs": [{ "name": "eid", "type": "uint32", "internalType": "uint32" }] - }, - { - "type": "error", - "name": "NotEnoughNative", - "inputs": [ - { "name": "msgValue", "type": "uint256", "internalType": "uint256" } - ] - }, - { - "type": "error", - "name": "OnlyEndpoint", - "inputs": [ - { "name": "addr", "type": "address", "internalType": "address" } - ] - }, - { - "type": "error", - "name": "OnlyPeer", - "inputs": [ - { "name": "eid", "type": "uint32", "internalType": "uint32" }, - { "name": "sender", "type": "bytes32", "internalType": "bytes32" } - ] - }, - { "type": "error", "name": "OnlySelf", "inputs": [] }, - { - "type": "error", - "name": "OwnableInvalidOwner", - "inputs": [ - { "name": "owner", "type": "address", "internalType": "address" } - ] - }, - { - "type": "error", - "name": "OwnableUnauthorizedAccount", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ] - }, - { - "type": "error", - "name": "SafeERC20FailedOperation", - "inputs": [ - { "name": "token", "type": "address", "internalType": "address" } - ] - }, - { - "type": "error", - "name": "SimulationResult", - "inputs": [{ "name": "result", "type": "bytes", "internalType": "bytes" }] - }, - { - "type": "error", - "name": "SlippageExceeded", - "inputs": [ - { "name": "amountLD", "type": "uint256", "internalType": "uint256" }, - { "name": "minAmountLD", "type": "uint256", "internalType": "uint256" } - ] - } - ], - "bytecode": { - "object": "0x60c06040523480156200001157600080fd5b5060405162003935380380620039358339810160408190526200003491620002d2565b83838383838360128484818181818d6001600160a01b0381166200007257604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b6200007d8162000198565b506001600160a01b038083166080528116620000ac57604051632d618d8160e21b815260040160405180910390fd5b60805160405163ca5eb5e160e01b81526001600160a01b0383811660048301529091169063ca5eb5e190602401600060405180830381600087803b158015620000f457600080fd5b505af115801562000109573d6000803e3d6000fd5b505050505050505062000121620001e860201b60201c565b60ff168360ff16101562000148576040516301e9714b60e41b815260040160405180910390fd5b6200015560068462000377565b6200016290600a62000496565b60a052506008915062000178905083826200053f565b5060096200018782826200053f565b50505050505050505050506200060b565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600690565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200021557600080fd5b81516001600160401b0380821115620002325762000232620001ed565b604051601f8301601f19908116603f011681019082821181831017156200025d576200025d620001ed565b81604052838152602092508660208588010111156200027b57600080fd5b600091505b838210156200029f578582018301518183018401529082019062000280565b6000602085830101528094505050505092915050565b80516001600160a01b0381168114620002cd57600080fd5b919050565b60008060008060808587031215620002e957600080fd5b84516001600160401b03808211156200030157600080fd5b6200030f8883890162000203565b955060208701519150808211156200032657600080fd5b50620003358782880162000203565b9350506200034660408601620002b5565b91506200035660608601620002b5565b905092959194509250565b634e487b7160e01b600052601160045260246000fd5b60ff828116828216039081111562000393576200039362000361565b92915050565b600181815b80851115620003da578160001904821115620003be57620003be62000361565b80851615620003cc57918102915b93841c93908002906200039e565b509250929050565b600082620003f35750600162000393565b81620004025750600062000393565b81600181146200041b5760028114620004265762000446565b600191505062000393565b60ff8411156200043a576200043a62000361565b50506001821b62000393565b5060208310610133831016604e8410600b84101617156200046b575081810a62000393565b62000477838362000399565b80600019048211156200048e576200048e62000361565b029392505050565b6000620004a760ff841683620003e2565b9392505050565b600181811c90821680620004c357607f821691505b602082108103620004e457634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200053a576000816000526020600020601f850160051c81016020861015620005155750805b601f850160051c820191505b81811015620005365782815560010162000521565b5050505b505050565b81516001600160401b038111156200055b576200055b620001ed565b62000573816200056c8454620004ae565b84620004ea565b602080601f831160018114620005ab5760008415620005925750858301515b600019600386901b1c1916600185901b17855562000536565b600085815260208120601f198616915b82811015620005dc57888601518255948401946001909101908401620005bb565b5085821015620005fb5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a0516132be6200067760003960008181610768015281816114b80152818161199b0152611b0001526000818161063001528181610b5b015281816111da015281816115ae015281816117f501528181611fc8015281816120cc015261218301526132be6000f3fe6080604052600436106102c95760003560e01c8063715018a611610175578063bb0b6a53116100dc578063d045a0dc11610095578063f01630231161006f578063f016302314610958578063f2fde38b14610978578063fc0c546a1461057f578063ff7bd03d1461099857600080fd5b8063d045a0dc146108df578063d4243885146108f2578063dd62ed3e1461091257600080fd5b8063bb0b6a531461081e578063bc70b3541461084b578063bd815db01461086b578063c07799881461087e578063c7c7f5b31461089e578063ca5eb5e1146108bf57600080fd5b8063963efcaa1161012e578063963efcaa146107565780639f68b9641461078a578063a9059cbb1461079e578063b3a5abeb146107be578063b731ea0a146107de578063b98bd070146107fe57600080fd5b8063715018a6146106a85780637d25a05e146106bd57806382413eac146106e0578063857749b01461070f5780638da5cb5b1461072357806395d89b411461074157600080fd5b806323b872dd1161023457806352ae2879116101ed5780635a0dfe4d116101c75780635a0dfe4d146105e75780635e280f111461061e5780636fc1b31e1461065257806370a082311461067257600080fd5b806352ae28791461057f57806354f52414146105925780635535d461146105c757600080fd5b806323b872dd146104b0578063313ce567146104d05780633400288b146104f25780633b6f743b1461051257806340c10f191461053f5780634dba701b1461055f57600080fd5b806313137d651161028657806313137d65146103f6578063134d4f251461040b578063156a0d0f1461043357806317442b701461045a57806318160ddd1461047c5780631f5e13341461049b57600080fd5b8063056d62de146102ce57806306fdde0314610305578063095ea7b3146103275780630d35b415146103575780630e78842c14610386578063111ecdad146103be575b600080fd5b3480156102da57600080fd5b506102ee6102e93660046122c3565b6109b8565b6040516102fc929190612357565b60405180910390f35b34801561031157600080fd5b5061031a6109d1565b6040516102fc919061237c565b34801561033357600080fd5b506103476103423660046123a4565b610a63565b60405190151581526020016102fc565b34801561036357600080fd5b506103776103723660046123d0565b610a7d565b6040516102fc93929190612404565b34801561039257600080fd5b506103a66103a136600461249d565b610b4e565b6040516001600160401b0390911681526020016102fc565b3480156103ca57600080fd5b506004546103de906001600160a01b031681565b6040516001600160a01b0390911681526020016102fc565b610409610404366004612509565b610b59565b005b34801561041757600080fd5b50610420600281565b60405161ffff90911681526020016102fc565b34801561043f57600080fd5b506040805162b9270b60e21b815260016020820152016102fc565b34801561046657600080fd5b50604080516001815260026020820152016102fc565b34801561048857600080fd5b506007545b6040519081526020016102fc565b3480156104a757600080fd5b50610420600181565b3480156104bc57600080fd5b506103476104cb3660046125a8565b610c19565b3480156104dc57600080fd5b5060125b60405160ff90911681526020016102fc565b3480156104fe57600080fd5b5061040961050d366004612602565b610c3f565b34801561051e57600080fd5b5061053261052d36600461262c565b610c55565b6040516102fc919061267d565b34801561054b57600080fd5b5061040961055a3660046123a4565b610cbc565b34801561056b57600080fd5b5061048d61057a366004612694565b610cc6565b34801561058b57600080fd5b50306103de565b34801561059e57600080fd5b506105b26105ad3660046126d2565b610cdb565b604080519283526020830191909152016102fc565b3480156105d357600080fd5b5061031a6105e2366004612710565b610cf7565b3480156105f357600080fd5b50610347610602366004612602565b63ffffffff919091166000908152600160205260409020541490565b34801561062a57600080fd5b506103de7f000000000000000000000000000000000000000000000000000000000000000081565b34801561065e57600080fd5b5061040961066d366004612743565b610d9c565b34801561067e57600080fd5b5061048d61068d366004612743565b6001600160a01b031660009081526005602052604090205490565b3480156106b457600080fd5b50610409610df9565b3480156106c957600080fd5b506103a66106d8366004612602565b600092915050565b3480156106ec57600080fd5b506103476106fb366004612760565b6001600160a01b0381163014949350505050565b34801561071b57600080fd5b5060066104e0565b34801561072f57600080fd5b506000546001600160a01b03166103de565b34801561074d57600080fd5b5061031a610e0d565b34801561076257600080fd5b5061048d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561079657600080fd5b506000610347565b3480156107aa57600080fd5b506103476107b93660046123a4565b610e1c565b3480156107ca57600080fd5b5061048d6107d93660046127db565b610e2a565b3480156107ea57600080fd5b506002546103de906001600160a01b031681565b34801561080a57600080fd5b5061040961081936600461283c565b610e35565b34801561082a57600080fd5b5061048d61083936600461287d565b60016020526000908152604090205481565b34801561085757600080fd5b5061031a610866366004612898565b610e4f565b61040961087936600461283c565b610ff7565b34801561088a57600080fd5b5061048d61089936600461249d565b611181565b6108b16108ac3660046128f8565b61118c565b6040516102fc929190612965565b3480156108cb57600080fd5b506104096108da366004612743565b6111b3565b6104096108ed366004612509565b611239565b3480156108fe57600080fd5b5061040961090d366004612743565b611268565b34801561091e57600080fd5b5061048d61092d3660046129b7565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b34801561096457600080fd5b506105b26109733660046126d2565b6112be565b34801561098457600080fd5b50610409610993366004612743565b6112cc565b3480156109a457600080fd5b506103476109b33660046129e5565b61130a565b6060806109c58484611340565b915091505b9250929050565b6060600880546109e090612a01565b80601f0160208091040260200160405190810160405280929190818152602001828054610a0c90612a01565b8015610a595780601f10610a2e57610100808354040283529160200191610a59565b820191906000526020600020905b815481529060010190602001808311610a3c57829003601f168201915b5050505050905090565b600033610a71818585611463565b60019150505b92915050565b60408051808201909152600080825260208201526060610ab0604051806040016040528060008152602001600081525090565b60408051808201825260008082526001600160401b03602080840182905284518381529081019094529195509182610b0b565b604080518082019091526000815260606020820152815260200190600190039081610ae35790505b509350600080610b30604089013560608a0135610b2b60208c018c61287d565b611475565b60408051808201909152918252602082015296989597505050505050565b6000610a77826114b1565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163314610ba9576040516391ac5e4f60e01b81523360048201526024015b60405180910390fd5b60208701803590610bc390610bbe908a61287d565b6114dd565b14610c0157610bd5602088018861287d565b60405163309afaf360e21b815263ffffffff909116600482015260208801356024820152604401610ba0565b610c1087878787878787611519565b50505050505050565b600033610c27858285611680565b610c328585856116fe565b60019150505b9392505050565b610c4761175d565b610c51828261178a565b5050565b60408051808201909152600080825260208201526000610c8560408501356060860135610b2b602088018861287d565b915050600080610c958684611340565b9092509050610cb2610caa602088018861287d565b8383886117df565b9695505050505050565b610c5182826118c0565b6000610cd38484846118f6565b949350505050565b600080610cea3386868661191e565b915091505b935093915050565b600360209081526000928352604080842090915290825290208054610d1b90612a01565b80601f0160208091040260200160405190810160405280929190818152602001828054610d4790612a01565b8015610d945780601f10610d6957610100808354040283529160200191610d94565b820191906000526020600020905b815481529060010190602001808311610d7757829003601f168201915b505050505081565b610da461175d565b600480546001600160a01b0319166001600160a01b0383169081179091556040519081527ff0be4f1e87349231d80c36b33f9e8639658eeaf474014dee15a3e6a4d4414197906020015b60405180910390a150565b610e0161175d565b610e0b6000611944565b565b6060600980546109e090612a01565b600033610a718185856116fe565b6000610a7782611994565b610e3d61175d565b610c51610e4a8284612aec565b6119c9565b63ffffffff8416600090815260036020908152604080832061ffff87168452909152812080546060929190610e8390612a01565b80601f0160208091040260200160405190810160405280929190818152602001828054610eaf90612a01565b8015610efc5780601f10610ed157610100808354040283529160200191610efc565b820191906000526020600020905b815481529060010190602001808311610edf57829003601f168201915b505050505090508051600003610f4c5783838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929450610cd39350505050565b6000839003610f5c579050610cd3565b60028310610fda57610fa384848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611ad092505050565b80610fb18460028188612c01565b604051602001610fc393929190612c2b565b604051602081830303815290604052915050610cd3565b8383604051639a6d49cd60e01b8152600401610ba0929190612c7c565b60005b81811015611100573683838381811061101557611015612c90565b90506020028101906110279190612ca6565b905061105a611039602083018361287d565b602083013563ffffffff919091166000908152600160205260409020541490565b61106457506110f8565b3063d045a0dc60c08301358360a0810135611083610100830183612cc7565b611094610100890160e08a01612743565b6110a26101208a018a612cc7565b6040518963ffffffff1660e01b81526004016110c49796959493929190612d0d565b6000604051808303818588803b1580156110dd57600080fd5b505af11580156110f1573d6000803e3d6000fd5b5050505050505b600101610ffa565b50336001600160a01b0316638e9e70996040518163ffffffff1660e01b8152600401600060405180830381865afa15801561113f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526111679190810190612d93565b604051638351eea760e01b8152600401610ba0919061237c565b6000610a7782611afc565b611194612264565b6040805180820190915260008082526020820152610cea858585611b33565b6111bb61175d565b60405163ca5eb5e160e01b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063ca5eb5e190602401600060405180830381600087803b15801561121e57600080fd5b505af1158015611232573d6000803e3d6000fd5b5050505050565b3330146112595760405163029a949d60e31b815260040160405180910390fd5b610c1087878787878787610c01565b61127061175d565b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527fd48d879cef83a1c0bdda516f27b13ddb1b3f8bbac1c9e1511bb2a659c242776090602001610dee565b600080610cea858585611475565b6112d461175d565b6001600160a01b0381166112fe57604051631e4fbdf760e01b815260006004820152602401610ba0565b61130781611944565b50565b6000602082018035906001908390611322908661287d565b63ffffffff1681526020810191909152604001600020541492915050565b606080600061139d8560200135611356866114b1565b61136360a0890189612cc7565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c2e92505050565b90935090506000816113b05760016113b3565b60025b90506113d36113c5602088018861287d565b8261086660808a018a612cc7565b6004549093506001600160a01b031680156114595760405163043a78eb60e01b81526001600160a01b0382169063043a78eb906114169088908890600401612357565b602060405180830381865afa158015611433573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114579190612e00565b505b5050509250929050565b6114708383836001611ca8565b505050565b60008061148185611afc565b915081905083811015610cef576040516371c4efed60e01b81526004810182905260248101859052604401610ba0565b6000610a777f000000000000000000000000000000000000000000000000000000000000000083612e33565b63ffffffff811660009081526001602052604081205480610a775760405163f6ff4fb760e01b815263ffffffff84166004820152602401610ba0565b600061152b6115288787611d7d565b90565b90506000611557826115456115408a8a611d95565b611994565b61155260208d018d61287d565b6118f6565b9050602886111561161e57600061159461157760608c0160408d016127db565b61158460208d018d61287d565b8461158f8c8c611db8565b611e03565b604051633e5ac80960e11b81529091506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690637cb59012906115ea9086908d906000908790600401612e55565b600060405180830381600087803b15801561160457600080fd5b505af1158015611618573d6000803e3d6000fd5b50505050505b6001600160a01b038216887fefed6d3500546b29533b128a29e3a94d70788727f0507505ac12eaf2e578fd9c61165760208d018d61287d565b6040805163ffffffff9092168252602082018690520160405180910390a3505050505050505050565b6001600160a01b0383811660009081526006602090815260408083209386168352929052205460001981146116f857818110156116e957604051637dc7a0d960e11b81526001600160a01b03841660048201526024810182905260448101839052606401610ba0565b6116f884848484036000611ca8565b50505050565b6001600160a01b03831661172857604051634b637e8f60e11b815260006004820152602401610ba0565b6001600160a01b0382166117525760405163ec442f0560e01b815260006004820152602401610ba0565b611470838383611e35565b6000546001600160a01b03163314610e0b5760405163118cdaa760e01b8152336004820152602401610ba0565b63ffffffff8216600081815260016020908152604091829020849055815192835282018390527f238399d427b947898edb290f5ff0f9109849b1c3ba196a42e35f00c50a54b98b910160405180910390a15050565b60408051808201909152600080825260208201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ddc28c586040518060a001604052808863ffffffff168152602001611842896114dd565b8152602001878152602001868152602001851515815250306040518363ffffffff1660e01b8152600401611877929190612e86565b6040805180830381865afa158015611893573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118b79190612f2f565b95945050505050565b6001600160a01b0382166118ea5760405163ec442f0560e01b815260006004820152602401610ba0565b610c5160008383611e35565b60006001600160a01b03841661190c5761dead93505b61191684846118c0565b509092915050565b60008061192c858585611475565b909250905061193b8683611f5f565b94509492505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000610a777f00000000000000000000000000000000000000000000000000000000000000006001600160401b038416612f4b565b60005b8151811015611aa0576119fb8282815181106119ea576119ea612c90565b602002602001015160400151611ad0565b818181518110611a0d57611a0d612c90565b60200260200101516040015160036000848481518110611a2f57611a2f612c90565b60200260200101516000015163ffffffff1663ffffffff1681526020019081526020016000206000848481518110611a6957611a69612c90565b60200260200101516020015161ffff1661ffff1681526020019081526020016000209081611a979190612fb2565b506001016119cc565b507fbe4864a8e820971c0247f5992e2da559595f7bf076a21cb5928d443d2a13b67481604051610dee9190613071565b600281015161ffff8116600314610c515781604051639a6d49cd60e01b8152600401610ba0919061237c565b60007f0000000000000000000000000000000000000000000000000000000000000000611b298184612e33565b610a779190612f4b565b611b3b612264565b6040805180820190915260008082526020820152600080611b7233604089013560608a0135611b6d60208c018c61287d565b61191e565b91509150600080611b838984611340565b9092509050611baf611b9860208b018b61287d565b8383611ba9368d90038d018d6130fc565b8b611f95565b60408051808201909152858152602080820186905282519298509096503391907f85496b760a4b7f8d66384b9df21b381f5d1b1e79f229a47aaf4c232edc2fe59a90611bfd908d018d61287d565b6040805163ffffffff909216825260208201899052810187905260600160405180910390a350505050935093915050565b8051606090151580611c77578484604051602001611c6392919091825260c01b6001600160c01b031916602082015260280190565b604051602081830303815290604052611c9e565b84843385604051602001611c8e949392919061312e565b6040516020818303038152906040525b9150935093915050565b6001600160a01b038416611cd25760405163e602df0560e01b815260006004820152602401610ba0565b6001600160a01b038316611cfc57604051634a1406b160e11b815260006004820152602401610ba0565b6001600160a01b03808516600090815260066020908152604080832093871683529290522082905580156116f857826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051611d6f91815260200190565b60405180910390a350505050565b6000611d8c6020828486612c01565b610c3891613171565b6000611da5602860208486612c01565b611dae9161318f565b60c01c9392505050565b6060611dc78260288186612c01565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929695505050505050565b606084848484604051602001611e1c94939291906131bf565b6040516020818303038152906040529050949350505050565b6001600160a01b038316611e60578060076000828254611e55919061320e565b90915550611ed29050565b6001600160a01b03831660009081526005602052604090205481811015611eb35760405163391434e360e21b81526001600160a01b03851660048201526024810182905260448101839052606401610ba0565b6001600160a01b03841660009081526005602052604090209082900390555b6001600160a01b038216611eee57600780548290039055611f0d565b6001600160a01b03821660009081526005602052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611f5291815260200190565b60405180910390a3505050565b6001600160a01b038216611f8957604051634b637e8f60e11b815260006004820152602401610ba0565b610c5182600083611e35565b611f9d612264565b6000611fac84600001516120a0565b602085015190915015611fc657611fc684602001516120c8565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632637a450826040518060a001604052808b63ffffffff1681526020016120168c6114dd565b81526020018a815260200189815260200160008960200151111515815250866040518463ffffffff1660e01b8152600401612052929190612e86565b60806040518083038185885af1158015612070573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906120959190613221565b979650505050505050565b60008134146120c4576040516304fb820960e51b8152346004820152602401610ba0565b5090565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e4fe1d946040518163ffffffff1660e01b8152600401602060405180830381865afa158015612128573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061214c919061326b565b90506001600160a01b038116612175576040516329b99a9560e11b815260040160405180910390fd5b6040805133602482018190527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0381811660448501526064808501889052855180860390910181526084909401909452602080840180516001600160e01b03166323b872dd60e01b1781528451610c519688169589936116f893889360009283929091839182885af180612216576040513d6000823e3d81fd5b50506000513d9150811561222e57806001141561223b565b6001600160a01b0384163b155b156116f857604051635274afe760e01b81526001600160a01b0385166004820152602401610ba0565b60405180606001604052806000801916815260200160006001600160401b031681526020016122a6604051806040016040528060008152602001600081525090565b905290565b600060e082840312156122bd57600080fd5b50919050565b600080604083850312156122d657600080fd5b82356001600160401b038111156122ec57600080fd5b6122f8858286016122ab565b95602094909401359450505050565b60005b8381101561232257818101518382015260200161230a565b50506000910152565b60008151808452612343816020860160208601612307565b601f01601f19169290920160200192915050565b60408152600061236a604083018561232b565b82810360208401526118b7818561232b565b602081526000610c38602083018461232b565b6001600160a01b038116811461130757600080fd5b600080604083850312156123b757600080fd5b82356123c28161238f565b946020939093013593505050565b6000602082840312156123e257600080fd5b81356001600160401b038111156123f857600080fd5b610cd3848285016122ab565b8351815260208085015190820152600060a08201604060a0604085015281865180845260c08601915060c08160051b8701019350602080890160005b8381101561247f5788870360bf1901855281518051885283015183880187905261246c8789018261232b565b9750509382019390820190600101612440565b50508751606088015250505060208501516080850152509050610cd3565b6000602082840312156124af57600080fd5b5035919050565b6000606082840312156122bd57600080fd5b60008083601f8401126124da57600080fd5b5081356001600160401b038111156124f157600080fd5b6020830191508360208285010111156109ca57600080fd5b600080600080600080600060e0888a03121561252457600080fd5b61252e89896124b6565b96506060880135955060808801356001600160401b038082111561255157600080fd5b61255d8b838c016124c8565b909750955060a08a013591506125728261238f565b90935060c0890135908082111561258857600080fd5b506125958a828b016124c8565b989b979a50959850939692959293505050565b6000806000606084860312156125bd57600080fd5b83356125c88161238f565b925060208401356125d88161238f565b929592945050506040919091013590565b803563ffffffff811681146125fd57600080fd5b919050565b6000806040838503121561261557600080fd5b6123c2836125e9565b801515811461130757600080fd5b6000806040838503121561263f57600080fd5b82356001600160401b0381111561265557600080fd5b612661858286016122ab565b92505060208301356126728161261e565b809150509250929050565b815181526020808301519082015260408101610a77565b6000806000606084860312156126a957600080fd5b83356126b48161238f565b9250602084013591506126c9604085016125e9565b90509250925092565b6000806000606084860312156126e757600080fd5b83359250602084013591506126c9604085016125e9565b803561ffff811681146125fd57600080fd5b6000806040838503121561272357600080fd5b61272c836125e9565b915061273a602084016126fe565b90509250929050565b60006020828403121561275557600080fd5b8135610c388161238f565b60008060008060a0858703121561277657600080fd5b61278086866124b6565b935060608501356001600160401b0381111561279b57600080fd5b6127a7878288016124c8565b90945092505060808501356127bb8161238f565b939692955090935050565b6001600160401b038116811461130757600080fd5b6000602082840312156127ed57600080fd5b8135610c38816127c6565b60008083601f84011261280a57600080fd5b5081356001600160401b0381111561282157600080fd5b6020830191508360208260051b85010111156109ca57600080fd5b6000806020838503121561284f57600080fd5b82356001600160401b0381111561286557600080fd5b612871858286016127f8565b90969095509350505050565b60006020828403121561288f57600080fd5b610c38826125e9565b600080600080606085870312156128ae57600080fd5b6128b7856125e9565b93506128c5602086016126fe565b925060408501356001600160401b038111156128e057600080fd5b6128ec878288016124c8565b95989497509550505050565b6000806000838503608081121561290e57600080fd5b84356001600160401b0381111561292457600080fd5b612930878288016122ab565b9450506040601f198201121561294557600080fd5b50602084019150606084013561295a8161238f565b809150509250925092565b600060c082019050835182526001600160401b03602085015116602083015260408401516129a0604084018280518252602090810151910152565b5082516080830152602083015160a0830152610c38565b600080604083850312156129ca57600080fd5b82356129d58161238f565b915060208301356126728161238f565b6000606082840312156129f757600080fd5b610c3883836124b6565b600181811c90821680612a1557607f821691505b6020821081036122bd57634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b0381118282101715612a6d57612a6d612a35565b60405290565b604080519081016001600160401b0381118282101715612a6d57612a6d612a35565b604051601f8201601f191681016001600160401b0381118282101715612abd57612abd612a35565b604052919050565b60006001600160401b03821115612ade57612ade612a35565b50601f01601f191660200190565b60006001600160401b0380841115612b0657612b06612a35565b8360051b6020612b17818301612a95565b868152918501918181019036841115612b2f57600080fd5b865b84811015612bf557803586811115612b495760008081fd5b88016060368290031215612b5d5760008081fd5b612b65612a4b565b612b6e826125e9565b8152612b7b8683016126fe565b8682015260408083013589811115612b935760008081fd5b929092019136601f840112612ba85760008081fd5b8235612bbb612bb682612ac5565b612a95565b8181523689838701011115612bd05760008081fd5b818986018a830137600091810189019190915290820152845250918301918301612b31565b50979650505050505050565b60008085851115612c1157600080fd5b83861115612c1e57600080fd5b5050820193919092039150565b60008451612c3d818460208901612307565b8201838582376000930192835250909392505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b602081526000610cd3602083018486612c53565b634e487b7160e01b600052603260045260246000fd5b6000823561013e19833603018112612cbd57600080fd5b9190910192915050565b6000808335601e19843603018112612cde57600080fd5b8301803591506001600160401b03821115612cf857600080fd5b6020019150368190038213156109ca57600080fd5b63ffffffff612d1b896125e9565b1681526020880135602082015260006040890135612d38816127c6565b6001600160401b03811660408401525087606083015260e06080830152612d6360e083018789612c53565b6001600160a01b03861660a084015282810360c0840152612d85818587612c53565b9a9950505050505050505050565b600060208284031215612da557600080fd5b81516001600160401b03811115612dbb57600080fd5b8201601f81018413612dcc57600080fd5b8051612dda612bb682612ac5565b818152856020838501011115612def57600080fd5b6118b7826020830160208601612307565b600060208284031215612e1257600080fd5b8151610c388161261e565b634e487b7160e01b600052601160045260246000fd5b600082612e5057634e487b7160e01b600052601260045260246000fd5b500490565b60018060a01b038516815283602082015261ffff83166040820152608060608201526000610cb2608083018461232b565b6040815263ffffffff8351166040820152602083015160608201526000604084015160a06080840152612ebc60e084018261232b565b90506060850151603f198483030160a0850152612ed9828261232b565b60809690960151151560c08501525050506001600160a01b039190911660209091015290565b600060408284031215612f1157600080fd5b612f19612a73565b9050815181526020820151602082015292915050565b600060408284031215612f4157600080fd5b610c388383612eff565b8082028115828204841417610a7757610a77612e1d565b601f821115611470576000816000526020600020601f850160051c81016020861015612f8b5750805b601f850160051c820191505b81811015612faa57828155600101612f97565b505050505050565b81516001600160401b03811115612fcb57612fcb612a35565b612fdf81612fd98454612a01565b84612f62565b602080601f8311600181146130145760008415612ffc5750858301515b600019600386901b1c1916600185901b178555612faa565b600085815260208120601f198616915b8281101561304357888601518255948401946001909101908401613024565b50858210156130615787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b838110156130ee57888303603f190185528151805163ffffffff1684528781015161ffff168885015286015160608785018190526130da8186018361232b565b96890196945050509086019060010161309a565b509098975050505050505050565b60006040828403121561310e57600080fd5b613116612a73565b82358152602083013560208201528091505092915050565b8481526001600160401b0360c01b8460c01b16602082015282602882015260008251613161816048850160208701612307565b9190910160480195945050505050565b80356020831015610a7757600019602084900360031b1b1692915050565b6001600160c01b031981358181169160088510156131b75780818660080360031b1b83161692505b505092915050565b6001600160401b0360c01b8560c01b16815263ffffffff60e01b8460e01b16600882015282600c820152600082516131fe81602c850160208701612307565b91909101602c0195945050505050565b80820180821115610a7757610a77612e1d565b60006080828403121561323357600080fd5b61323b612a4b565b82518152602083015161324d816127c6565b602082015261325f8460408501612eff565b60408201529392505050565b60006020828403121561327d57600080fd5b8151610c388161238f56fea2646970667358221220c184047f55d32f63a680c09336614b1b1422300e42596cef498353ab916c762e64736f6c63430008160033", - "sourceMap": "273:1743:131:-:0;;;303:199;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;460:5;467:7;476:11;489:9;460:5;467:7;2780:2:112;823:11:65;836:9;823:11;836:9;823:11;836:9;445::131;-1:-1:-1;;;;;1273:26:107;;1269:95;;1322:31;;-1:-1:-1;;;1322:31:107;;1350:1;1322:31;;;2061:51:132;2034:18;;1322:31:107;;;;;;;1269:95;1373:32;1392:12;1373:18;:32::i;:::-;-1:-1:-1;;;;;;1047:42:51;;;;;1104:23;;1100:53;;1136:17;;-1:-1:-1;;;1136:17:51;;;;;;;;;;;1100:53;1163:8;;:31;;-1:-1:-1;;;1163:31:51;;-1:-1:-1;;;;;2079:32:132;;;1163:31:51;;;2061:51:132;1163:20:51;;;;;;2034:18:132;;1163:31:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;987:214;;965:83:50;;2757:16:66::1;:14;;;:16;;:::i;:::-;2740:33;;:14;:33;;;2736:68;;;2782:22;;-1:-1:-1::0;;;2782:22:66::1;;;;;;;;;;;2736:68;2845:33;4227:1:::0;2845:14;:33:::1;:::i;:::-;2838:41;::::0;:2:::1;:41;:::i;:::-;2814:65;::::0;-1:-1:-1;1667:5:112;;-1:-1:-1;1667:13:112;;-1:-1:-1;1675:5:112;1667;:13;:::i;:::-;-1:-1:-1;1690:7:112;:17;1700:7;1690;:17;:::i;:::-;;1601:113;;647:202:65;;;;303:199:131;;;;273:1743;;2912:187:107;2985:16;3004:6;;-1:-1:-1;;;;;3020:17:107;;;-1:-1:-1;;;;;;3020:17:107;;;;;;3052:40;;3004:6;;;;;;;3052:40;;2985:16;3052:40;2975:124;2912:187;:::o;4148:87:66:-;4227:1;;4148:87::o;14:127:132:-;75:10;70:3;66:20;63:1;56:31;106:4;103:1;96:15;130:4;127:1;120:15;146:844;200:5;253:3;246:4;238:6;234:17;230:27;220:55;;271:1;268;261:12;220:55;294:13;;-1:-1:-1;;;;;356:10:132;;;353:36;;;369:18;;:::i;:::-;444:2;438:9;412:2;498:13;;-1:-1:-1;;494:22:132;;;518:2;490:31;486:40;474:53;;;542:18;;;562:22;;;539:46;536:72;;;588:18;;:::i;:::-;628:10;624:2;617:22;663:2;655:6;648:18;685:4;675:14;;732:3;725:4;720:2;712:6;708:15;704:26;701:35;698:55;;;749:1;746;739:12;698:55;771:1;762:10;;781:133;795:2;792:1;789:9;781:133;;;883:14;;;879:23;;873:30;852:14;;;848:23;;841:63;806:10;;;;781:133;;;958:1;951:4;946:2;938:6;934:15;930:26;923:37;978:6;969:15;;;;;;146:844;;;;:::o;995:177::-;1074:13;;-1:-1:-1;;;;;1116:31:132;;1106:42;;1096:70;;1162:1;1159;1152:12;1096:70;995:177;;;:::o;1177:733::-;1294:6;1302;1310;1318;1371:3;1359:9;1350:7;1346:23;1342:33;1339:53;;;1388:1;1385;1378:12;1339:53;1415:16;;-1:-1:-1;;;;;1480:14:132;;;1477:34;;;1507:1;1504;1497:12;1477:34;1530:61;1583:7;1574:6;1563:9;1559:22;1530:61;:::i;:::-;1520:71;;1637:2;1626:9;1622:18;1616:25;1600:41;;1666:2;1656:8;1653:16;1650:36;;;1682:1;1679;1672:12;1650:36;;1705:63;1760:7;1749:8;1738:9;1734:24;1705:63;:::i;:::-;1695:73;;;1787:49;1832:2;1821:9;1817:18;1787:49;:::i;:::-;1777:59;;1855:49;1900:2;1889:9;1885:18;1855:49;:::i;:::-;1845:59;;1177:733;;;;;;;:::o;2123:127::-;2184:10;2179:3;2175:20;2172:1;2165:31;2215:4;2212:1;2205:15;2239:4;2236:1;2229:15;2255:151;2345:4;2338:12;;;2324;;;2320:31;;2363:14;;2360:40;;;2380:18;;:::i;:::-;2255:151;;;;:::o;2411:416::-;2500:1;2537:5;2500:1;2551:270;2572:7;2562:8;2559:21;2551:270;;;2631:4;2627:1;2623:6;2619:17;2613:4;2610:27;2607:53;;;2640:18;;:::i;:::-;2690:7;2680:8;2676:22;2673:55;;;2710:16;;;;2673:55;2789:22;;;;2749:15;;;;2551:270;;;2555:3;2411:416;;;;;:::o;2832:806::-;2881:5;2911:8;2901:80;;-1:-1:-1;2952:1:132;2966:5;;2901:80;3000:4;2990:76;;-1:-1:-1;3037:1:132;3051:5;;2990:76;3082:4;3100:1;3095:59;;;;3168:1;3163:130;;;;3075:218;;3095:59;3125:1;3116:10;;3139:5;;;3163:130;3200:3;3190:8;3187:17;3184:43;;;3207:18;;:::i;:::-;-1:-1:-1;;3263:1:132;3249:16;;3278:5;;3075:218;;3377:2;3367:8;3364:16;3358:3;3352:4;3349:13;3345:36;3339:2;3329:8;3326:16;3321:2;3315:4;3312:12;3308:35;3305:77;3302:159;;;-1:-1:-1;3414:19:132;;;3446:5;;3302:159;3493:34;3518:8;3512:4;3493:34;:::i;:::-;3563:6;3559:1;3555:6;3551:19;3542:7;3539:32;3536:58;;;3574:18;;:::i;:::-;3612:20;;2832:806;-1:-1:-1;;;2832:806:132:o;3643:140::-;3701:5;3730:47;3771:4;3761:8;3757:19;3751:4;3730:47;:::i;:::-;3721:56;3643:140;-1:-1:-1;;;3643:140:132:o;3788:380::-;3867:1;3863:12;;;;3910;;;3931:61;;3985:4;3977:6;3973:17;3963:27;;3931:61;4038:2;4030:6;4027:14;4007:18;4004:38;4001:161;;4084:10;4079:3;4075:20;4072:1;4065:31;4119:4;4116:1;4109:15;4147:4;4144:1;4137:15;4001:161;;3788:380;;;:::o;4299:543::-;4401:2;4396:3;4393:11;4390:446;;;4437:1;4461:5;4458:1;4451:16;4505:4;4502:1;4492:18;4575:2;4563:10;4559:19;4556:1;4552:27;4546:4;4542:38;4611:4;4599:10;4596:20;4593:47;;;-1:-1:-1;4634:4:132;4593:47;4689:2;4684:3;4680:12;4677:1;4673:20;4667:4;4663:31;4653:41;;4744:82;4762:2;4755:5;4752:13;4744:82;;;4807:17;;;4788:1;4777:13;4744:82;;;4748:3;;;4390:446;4299:543;;;:::o;5018:1345::-;5138:10;;-1:-1:-1;;;;;5160:30:132;;5157:56;;;5193:18;;:::i;:::-;5222:97;5312:6;5272:38;5304:4;5298:11;5272:38;:::i;:::-;5266:4;5222:97;:::i;:::-;5374:4;;5431:2;5420:14;;5448:1;5443:663;;;;6150:1;6167:6;6164:89;;;-1:-1:-1;6219:19:132;;;6213:26;6164:89;-1:-1:-1;;4975:1:132;4971:11;;;4967:24;4963:29;4953:40;4999:1;4995:11;;;4950:57;6266:81;;5413:944;;5443:663;4246:1;4239:14;;;4283:4;4270:18;;-1:-1:-1;;5479:20:132;;;5597:236;5611:7;5608:1;5605:14;5597:236;;;5700:19;;;5694:26;5679:42;;5792:27;;;;5760:1;5748:14;;;;5627:19;;5597:236;;;5601:3;5861:6;5852:7;5849:19;5846:201;;;5922:19;;;5916:26;-1:-1:-1;;6005:1:132;6001:14;;;6017:3;5997:24;5993:37;5989:42;5974:58;5959:74;;5846:201;-1:-1:-1;;;;;6093:1:132;6077:14;;;6073:22;6060:36;;-1:-1:-1;5018:1345:132:o;:::-;273:1743:131;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", - "linkReferences": {} - }, - "deployedBytecode": { - "object": "0x6080604052600436106102c95760003560e01c8063715018a611610175578063bb0b6a53116100dc578063d045a0dc11610095578063f01630231161006f578063f016302314610958578063f2fde38b14610978578063fc0c546a1461057f578063ff7bd03d1461099857600080fd5b8063d045a0dc146108df578063d4243885146108f2578063dd62ed3e1461091257600080fd5b8063bb0b6a531461081e578063bc70b3541461084b578063bd815db01461086b578063c07799881461087e578063c7c7f5b31461089e578063ca5eb5e1146108bf57600080fd5b8063963efcaa1161012e578063963efcaa146107565780639f68b9641461078a578063a9059cbb1461079e578063b3a5abeb146107be578063b731ea0a146107de578063b98bd070146107fe57600080fd5b8063715018a6146106a85780637d25a05e146106bd57806382413eac146106e0578063857749b01461070f5780638da5cb5b1461072357806395d89b411461074157600080fd5b806323b872dd1161023457806352ae2879116101ed5780635a0dfe4d116101c75780635a0dfe4d146105e75780635e280f111461061e5780636fc1b31e1461065257806370a082311461067257600080fd5b806352ae28791461057f57806354f52414146105925780635535d461146105c757600080fd5b806323b872dd146104b0578063313ce567146104d05780633400288b146104f25780633b6f743b1461051257806340c10f191461053f5780634dba701b1461055f57600080fd5b806313137d651161028657806313137d65146103f6578063134d4f251461040b578063156a0d0f1461043357806317442b701461045a57806318160ddd1461047c5780631f5e13341461049b57600080fd5b8063056d62de146102ce57806306fdde0314610305578063095ea7b3146103275780630d35b415146103575780630e78842c14610386578063111ecdad146103be575b600080fd5b3480156102da57600080fd5b506102ee6102e93660046122c3565b6109b8565b6040516102fc929190612357565b60405180910390f35b34801561031157600080fd5b5061031a6109d1565b6040516102fc919061237c565b34801561033357600080fd5b506103476103423660046123a4565b610a63565b60405190151581526020016102fc565b34801561036357600080fd5b506103776103723660046123d0565b610a7d565b6040516102fc93929190612404565b34801561039257600080fd5b506103a66103a136600461249d565b610b4e565b6040516001600160401b0390911681526020016102fc565b3480156103ca57600080fd5b506004546103de906001600160a01b031681565b6040516001600160a01b0390911681526020016102fc565b610409610404366004612509565b610b59565b005b34801561041757600080fd5b50610420600281565b60405161ffff90911681526020016102fc565b34801561043f57600080fd5b506040805162b9270b60e21b815260016020820152016102fc565b34801561046657600080fd5b50604080516001815260026020820152016102fc565b34801561048857600080fd5b506007545b6040519081526020016102fc565b3480156104a757600080fd5b50610420600181565b3480156104bc57600080fd5b506103476104cb3660046125a8565b610c19565b3480156104dc57600080fd5b5060125b60405160ff90911681526020016102fc565b3480156104fe57600080fd5b5061040961050d366004612602565b610c3f565b34801561051e57600080fd5b5061053261052d36600461262c565b610c55565b6040516102fc919061267d565b34801561054b57600080fd5b5061040961055a3660046123a4565b610cbc565b34801561056b57600080fd5b5061048d61057a366004612694565b610cc6565b34801561058b57600080fd5b50306103de565b34801561059e57600080fd5b506105b26105ad3660046126d2565b610cdb565b604080519283526020830191909152016102fc565b3480156105d357600080fd5b5061031a6105e2366004612710565b610cf7565b3480156105f357600080fd5b50610347610602366004612602565b63ffffffff919091166000908152600160205260409020541490565b34801561062a57600080fd5b506103de7f000000000000000000000000000000000000000000000000000000000000000081565b34801561065e57600080fd5b5061040961066d366004612743565b610d9c565b34801561067e57600080fd5b5061048d61068d366004612743565b6001600160a01b031660009081526005602052604090205490565b3480156106b457600080fd5b50610409610df9565b3480156106c957600080fd5b506103a66106d8366004612602565b600092915050565b3480156106ec57600080fd5b506103476106fb366004612760565b6001600160a01b0381163014949350505050565b34801561071b57600080fd5b5060066104e0565b34801561072f57600080fd5b506000546001600160a01b03166103de565b34801561074d57600080fd5b5061031a610e0d565b34801561076257600080fd5b5061048d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561079657600080fd5b506000610347565b3480156107aa57600080fd5b506103476107b93660046123a4565b610e1c565b3480156107ca57600080fd5b5061048d6107d93660046127db565b610e2a565b3480156107ea57600080fd5b506002546103de906001600160a01b031681565b34801561080a57600080fd5b5061040961081936600461283c565b610e35565b34801561082a57600080fd5b5061048d61083936600461287d565b60016020526000908152604090205481565b34801561085757600080fd5b5061031a610866366004612898565b610e4f565b61040961087936600461283c565b610ff7565b34801561088a57600080fd5b5061048d61089936600461249d565b611181565b6108b16108ac3660046128f8565b61118c565b6040516102fc929190612965565b3480156108cb57600080fd5b506104096108da366004612743565b6111b3565b6104096108ed366004612509565b611239565b3480156108fe57600080fd5b5061040961090d366004612743565b611268565b34801561091e57600080fd5b5061048d61092d3660046129b7565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b34801561096457600080fd5b506105b26109733660046126d2565b6112be565b34801561098457600080fd5b50610409610993366004612743565b6112cc565b3480156109a457600080fd5b506103476109b33660046129e5565b61130a565b6060806109c58484611340565b915091505b9250929050565b6060600880546109e090612a01565b80601f0160208091040260200160405190810160405280929190818152602001828054610a0c90612a01565b8015610a595780601f10610a2e57610100808354040283529160200191610a59565b820191906000526020600020905b815481529060010190602001808311610a3c57829003601f168201915b5050505050905090565b600033610a71818585611463565b60019150505b92915050565b60408051808201909152600080825260208201526060610ab0604051806040016040528060008152602001600081525090565b60408051808201825260008082526001600160401b03602080840182905284518381529081019094529195509182610b0b565b604080518082019091526000815260606020820152815260200190600190039081610ae35790505b509350600080610b30604089013560608a0135610b2b60208c018c61287d565b611475565b60408051808201909152918252602082015296989597505050505050565b6000610a77826114b1565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163314610ba9576040516391ac5e4f60e01b81523360048201526024015b60405180910390fd5b60208701803590610bc390610bbe908a61287d565b6114dd565b14610c0157610bd5602088018861287d565b60405163309afaf360e21b815263ffffffff909116600482015260208801356024820152604401610ba0565b610c1087878787878787611519565b50505050505050565b600033610c27858285611680565b610c328585856116fe565b60019150505b9392505050565b610c4761175d565b610c51828261178a565b5050565b60408051808201909152600080825260208201526000610c8560408501356060860135610b2b602088018861287d565b915050600080610c958684611340565b9092509050610cb2610caa602088018861287d565b8383886117df565b9695505050505050565b610c5182826118c0565b6000610cd38484846118f6565b949350505050565b600080610cea3386868661191e565b915091505b935093915050565b600360209081526000928352604080842090915290825290208054610d1b90612a01565b80601f0160208091040260200160405190810160405280929190818152602001828054610d4790612a01565b8015610d945780601f10610d6957610100808354040283529160200191610d94565b820191906000526020600020905b815481529060010190602001808311610d7757829003601f168201915b505050505081565b610da461175d565b600480546001600160a01b0319166001600160a01b0383169081179091556040519081527ff0be4f1e87349231d80c36b33f9e8639658eeaf474014dee15a3e6a4d4414197906020015b60405180910390a150565b610e0161175d565b610e0b6000611944565b565b6060600980546109e090612a01565b600033610a718185856116fe565b6000610a7782611994565b610e3d61175d565b610c51610e4a8284612aec565b6119c9565b63ffffffff8416600090815260036020908152604080832061ffff87168452909152812080546060929190610e8390612a01565b80601f0160208091040260200160405190810160405280929190818152602001828054610eaf90612a01565b8015610efc5780601f10610ed157610100808354040283529160200191610efc565b820191906000526020600020905b815481529060010190602001808311610edf57829003601f168201915b505050505090508051600003610f4c5783838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929450610cd39350505050565b6000839003610f5c579050610cd3565b60028310610fda57610fa384848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611ad092505050565b80610fb18460028188612c01565b604051602001610fc393929190612c2b565b604051602081830303815290604052915050610cd3565b8383604051639a6d49cd60e01b8152600401610ba0929190612c7c565b60005b81811015611100573683838381811061101557611015612c90565b90506020028101906110279190612ca6565b905061105a611039602083018361287d565b602083013563ffffffff919091166000908152600160205260409020541490565b61106457506110f8565b3063d045a0dc60c08301358360a0810135611083610100830183612cc7565b611094610100890160e08a01612743565b6110a26101208a018a612cc7565b6040518963ffffffff1660e01b81526004016110c49796959493929190612d0d565b6000604051808303818588803b1580156110dd57600080fd5b505af11580156110f1573d6000803e3d6000fd5b5050505050505b600101610ffa565b50336001600160a01b0316638e9e70996040518163ffffffff1660e01b8152600401600060405180830381865afa15801561113f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526111679190810190612d93565b604051638351eea760e01b8152600401610ba0919061237c565b6000610a7782611afc565b611194612264565b6040805180820190915260008082526020820152610cea858585611b33565b6111bb61175d565b60405163ca5eb5e160e01b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063ca5eb5e190602401600060405180830381600087803b15801561121e57600080fd5b505af1158015611232573d6000803e3d6000fd5b5050505050565b3330146112595760405163029a949d60e31b815260040160405180910390fd5b610c1087878787878787610c01565b61127061175d565b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527fd48d879cef83a1c0bdda516f27b13ddb1b3f8bbac1c9e1511bb2a659c242776090602001610dee565b600080610cea858585611475565b6112d461175d565b6001600160a01b0381166112fe57604051631e4fbdf760e01b815260006004820152602401610ba0565b61130781611944565b50565b6000602082018035906001908390611322908661287d565b63ffffffff1681526020810191909152604001600020541492915050565b606080600061139d8560200135611356866114b1565b61136360a0890189612cc7565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c2e92505050565b90935090506000816113b05760016113b3565b60025b90506113d36113c5602088018861287d565b8261086660808a018a612cc7565b6004549093506001600160a01b031680156114595760405163043a78eb60e01b81526001600160a01b0382169063043a78eb906114169088908890600401612357565b602060405180830381865afa158015611433573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114579190612e00565b505b5050509250929050565b6114708383836001611ca8565b505050565b60008061148185611afc565b915081905083811015610cef576040516371c4efed60e01b81526004810182905260248101859052604401610ba0565b6000610a777f000000000000000000000000000000000000000000000000000000000000000083612e33565b63ffffffff811660009081526001602052604081205480610a775760405163f6ff4fb760e01b815263ffffffff84166004820152602401610ba0565b600061152b6115288787611d7d565b90565b90506000611557826115456115408a8a611d95565b611994565b61155260208d018d61287d565b6118f6565b9050602886111561161e57600061159461157760608c0160408d016127db565b61158460208d018d61287d565b8461158f8c8c611db8565b611e03565b604051633e5ac80960e11b81529091506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690637cb59012906115ea9086908d906000908790600401612e55565b600060405180830381600087803b15801561160457600080fd5b505af1158015611618573d6000803e3d6000fd5b50505050505b6001600160a01b038216887fefed6d3500546b29533b128a29e3a94d70788727f0507505ac12eaf2e578fd9c61165760208d018d61287d565b6040805163ffffffff9092168252602082018690520160405180910390a3505050505050505050565b6001600160a01b0383811660009081526006602090815260408083209386168352929052205460001981146116f857818110156116e957604051637dc7a0d960e11b81526001600160a01b03841660048201526024810182905260448101839052606401610ba0565b6116f884848484036000611ca8565b50505050565b6001600160a01b03831661172857604051634b637e8f60e11b815260006004820152602401610ba0565b6001600160a01b0382166117525760405163ec442f0560e01b815260006004820152602401610ba0565b611470838383611e35565b6000546001600160a01b03163314610e0b5760405163118cdaa760e01b8152336004820152602401610ba0565b63ffffffff8216600081815260016020908152604091829020849055815192835282018390527f238399d427b947898edb290f5ff0f9109849b1c3ba196a42e35f00c50a54b98b910160405180910390a15050565b60408051808201909152600080825260208201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ddc28c586040518060a001604052808863ffffffff168152602001611842896114dd565b8152602001878152602001868152602001851515815250306040518363ffffffff1660e01b8152600401611877929190612e86565b6040805180830381865afa158015611893573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118b79190612f2f565b95945050505050565b6001600160a01b0382166118ea5760405163ec442f0560e01b815260006004820152602401610ba0565b610c5160008383611e35565b60006001600160a01b03841661190c5761dead93505b61191684846118c0565b509092915050565b60008061192c858585611475565b909250905061193b8683611f5f565b94509492505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000610a777f00000000000000000000000000000000000000000000000000000000000000006001600160401b038416612f4b565b60005b8151811015611aa0576119fb8282815181106119ea576119ea612c90565b602002602001015160400151611ad0565b818181518110611a0d57611a0d612c90565b60200260200101516040015160036000848481518110611a2f57611a2f612c90565b60200260200101516000015163ffffffff1663ffffffff1681526020019081526020016000206000848481518110611a6957611a69612c90565b60200260200101516020015161ffff1661ffff1681526020019081526020016000209081611a979190612fb2565b506001016119cc565b507fbe4864a8e820971c0247f5992e2da559595f7bf076a21cb5928d443d2a13b67481604051610dee9190613071565b600281015161ffff8116600314610c515781604051639a6d49cd60e01b8152600401610ba0919061237c565b60007f0000000000000000000000000000000000000000000000000000000000000000611b298184612e33565b610a779190612f4b565b611b3b612264565b6040805180820190915260008082526020820152600080611b7233604089013560608a0135611b6d60208c018c61287d565b61191e565b91509150600080611b838984611340565b9092509050611baf611b9860208b018b61287d565b8383611ba9368d90038d018d6130fc565b8b611f95565b60408051808201909152858152602080820186905282519298509096503391907f85496b760a4b7f8d66384b9df21b381f5d1b1e79f229a47aaf4c232edc2fe59a90611bfd908d018d61287d565b6040805163ffffffff909216825260208201899052810187905260600160405180910390a350505050935093915050565b8051606090151580611c77578484604051602001611c6392919091825260c01b6001600160c01b031916602082015260280190565b604051602081830303815290604052611c9e565b84843385604051602001611c8e949392919061312e565b6040516020818303038152906040525b9150935093915050565b6001600160a01b038416611cd25760405163e602df0560e01b815260006004820152602401610ba0565b6001600160a01b038316611cfc57604051634a1406b160e11b815260006004820152602401610ba0565b6001600160a01b03808516600090815260066020908152604080832093871683529290522082905580156116f857826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051611d6f91815260200190565b60405180910390a350505050565b6000611d8c6020828486612c01565b610c3891613171565b6000611da5602860208486612c01565b611dae9161318f565b60c01c9392505050565b6060611dc78260288186612c01565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929695505050505050565b606084848484604051602001611e1c94939291906131bf565b6040516020818303038152906040529050949350505050565b6001600160a01b038316611e60578060076000828254611e55919061320e565b90915550611ed29050565b6001600160a01b03831660009081526005602052604090205481811015611eb35760405163391434e360e21b81526001600160a01b03851660048201526024810182905260448101839052606401610ba0565b6001600160a01b03841660009081526005602052604090209082900390555b6001600160a01b038216611eee57600780548290039055611f0d565b6001600160a01b03821660009081526005602052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611f5291815260200190565b60405180910390a3505050565b6001600160a01b038216611f8957604051634b637e8f60e11b815260006004820152602401610ba0565b610c5182600083611e35565b611f9d612264565b6000611fac84600001516120a0565b602085015190915015611fc657611fc684602001516120c8565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632637a450826040518060a001604052808b63ffffffff1681526020016120168c6114dd565b81526020018a815260200189815260200160008960200151111515815250866040518463ffffffff1660e01b8152600401612052929190612e86565b60806040518083038185885af1158015612070573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906120959190613221565b979650505050505050565b60008134146120c4576040516304fb820960e51b8152346004820152602401610ba0565b5090565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e4fe1d946040518163ffffffff1660e01b8152600401602060405180830381865afa158015612128573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061214c919061326b565b90506001600160a01b038116612175576040516329b99a9560e11b815260040160405180910390fd5b6040805133602482018190527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0381811660448501526064808501889052855180860390910181526084909401909452602080840180516001600160e01b03166323b872dd60e01b1781528451610c519688169589936116f893889360009283929091839182885af180612216576040513d6000823e3d81fd5b50506000513d9150811561222e57806001141561223b565b6001600160a01b0384163b155b156116f857604051635274afe760e01b81526001600160a01b0385166004820152602401610ba0565b60405180606001604052806000801916815260200160006001600160401b031681526020016122a6604051806040016040528060008152602001600081525090565b905290565b600060e082840312156122bd57600080fd5b50919050565b600080604083850312156122d657600080fd5b82356001600160401b038111156122ec57600080fd5b6122f8858286016122ab565b95602094909401359450505050565b60005b8381101561232257818101518382015260200161230a565b50506000910152565b60008151808452612343816020860160208601612307565b601f01601f19169290920160200192915050565b60408152600061236a604083018561232b565b82810360208401526118b7818561232b565b602081526000610c38602083018461232b565b6001600160a01b038116811461130757600080fd5b600080604083850312156123b757600080fd5b82356123c28161238f565b946020939093013593505050565b6000602082840312156123e257600080fd5b81356001600160401b038111156123f857600080fd5b610cd3848285016122ab565b8351815260208085015190820152600060a08201604060a0604085015281865180845260c08601915060c08160051b8701019350602080890160005b8381101561247f5788870360bf1901855281518051885283015183880187905261246c8789018261232b565b9750509382019390820190600101612440565b50508751606088015250505060208501516080850152509050610cd3565b6000602082840312156124af57600080fd5b5035919050565b6000606082840312156122bd57600080fd5b60008083601f8401126124da57600080fd5b5081356001600160401b038111156124f157600080fd5b6020830191508360208285010111156109ca57600080fd5b600080600080600080600060e0888a03121561252457600080fd5b61252e89896124b6565b96506060880135955060808801356001600160401b038082111561255157600080fd5b61255d8b838c016124c8565b909750955060a08a013591506125728261238f565b90935060c0890135908082111561258857600080fd5b506125958a828b016124c8565b989b979a50959850939692959293505050565b6000806000606084860312156125bd57600080fd5b83356125c88161238f565b925060208401356125d88161238f565b929592945050506040919091013590565b803563ffffffff811681146125fd57600080fd5b919050565b6000806040838503121561261557600080fd5b6123c2836125e9565b801515811461130757600080fd5b6000806040838503121561263f57600080fd5b82356001600160401b0381111561265557600080fd5b612661858286016122ab565b92505060208301356126728161261e565b809150509250929050565b815181526020808301519082015260408101610a77565b6000806000606084860312156126a957600080fd5b83356126b48161238f565b9250602084013591506126c9604085016125e9565b90509250925092565b6000806000606084860312156126e757600080fd5b83359250602084013591506126c9604085016125e9565b803561ffff811681146125fd57600080fd5b6000806040838503121561272357600080fd5b61272c836125e9565b915061273a602084016126fe565b90509250929050565b60006020828403121561275557600080fd5b8135610c388161238f565b60008060008060a0858703121561277657600080fd5b61278086866124b6565b935060608501356001600160401b0381111561279b57600080fd5b6127a7878288016124c8565b90945092505060808501356127bb8161238f565b939692955090935050565b6001600160401b038116811461130757600080fd5b6000602082840312156127ed57600080fd5b8135610c38816127c6565b60008083601f84011261280a57600080fd5b5081356001600160401b0381111561282157600080fd5b6020830191508360208260051b85010111156109ca57600080fd5b6000806020838503121561284f57600080fd5b82356001600160401b0381111561286557600080fd5b612871858286016127f8565b90969095509350505050565b60006020828403121561288f57600080fd5b610c38826125e9565b600080600080606085870312156128ae57600080fd5b6128b7856125e9565b93506128c5602086016126fe565b925060408501356001600160401b038111156128e057600080fd5b6128ec878288016124c8565b95989497509550505050565b6000806000838503608081121561290e57600080fd5b84356001600160401b0381111561292457600080fd5b612930878288016122ab565b9450506040601f198201121561294557600080fd5b50602084019150606084013561295a8161238f565b809150509250925092565b600060c082019050835182526001600160401b03602085015116602083015260408401516129a0604084018280518252602090810151910152565b5082516080830152602083015160a0830152610c38565b600080604083850312156129ca57600080fd5b82356129d58161238f565b915060208301356126728161238f565b6000606082840312156129f757600080fd5b610c3883836124b6565b600181811c90821680612a1557607f821691505b6020821081036122bd57634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b0381118282101715612a6d57612a6d612a35565b60405290565b604080519081016001600160401b0381118282101715612a6d57612a6d612a35565b604051601f8201601f191681016001600160401b0381118282101715612abd57612abd612a35565b604052919050565b60006001600160401b03821115612ade57612ade612a35565b50601f01601f191660200190565b60006001600160401b0380841115612b0657612b06612a35565b8360051b6020612b17818301612a95565b868152918501918181019036841115612b2f57600080fd5b865b84811015612bf557803586811115612b495760008081fd5b88016060368290031215612b5d5760008081fd5b612b65612a4b565b612b6e826125e9565b8152612b7b8683016126fe565b8682015260408083013589811115612b935760008081fd5b929092019136601f840112612ba85760008081fd5b8235612bbb612bb682612ac5565b612a95565b8181523689838701011115612bd05760008081fd5b818986018a830137600091810189019190915290820152845250918301918301612b31565b50979650505050505050565b60008085851115612c1157600080fd5b83861115612c1e57600080fd5b5050820193919092039150565b60008451612c3d818460208901612307565b8201838582376000930192835250909392505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b602081526000610cd3602083018486612c53565b634e487b7160e01b600052603260045260246000fd5b6000823561013e19833603018112612cbd57600080fd5b9190910192915050565b6000808335601e19843603018112612cde57600080fd5b8301803591506001600160401b03821115612cf857600080fd5b6020019150368190038213156109ca57600080fd5b63ffffffff612d1b896125e9565b1681526020880135602082015260006040890135612d38816127c6565b6001600160401b03811660408401525087606083015260e06080830152612d6360e083018789612c53565b6001600160a01b03861660a084015282810360c0840152612d85818587612c53565b9a9950505050505050505050565b600060208284031215612da557600080fd5b81516001600160401b03811115612dbb57600080fd5b8201601f81018413612dcc57600080fd5b8051612dda612bb682612ac5565b818152856020838501011115612def57600080fd5b6118b7826020830160208601612307565b600060208284031215612e1257600080fd5b8151610c388161261e565b634e487b7160e01b600052601160045260246000fd5b600082612e5057634e487b7160e01b600052601260045260246000fd5b500490565b60018060a01b038516815283602082015261ffff83166040820152608060608201526000610cb2608083018461232b565b6040815263ffffffff8351166040820152602083015160608201526000604084015160a06080840152612ebc60e084018261232b565b90506060850151603f198483030160a0850152612ed9828261232b565b60809690960151151560c08501525050506001600160a01b039190911660209091015290565b600060408284031215612f1157600080fd5b612f19612a73565b9050815181526020820151602082015292915050565b600060408284031215612f4157600080fd5b610c388383612eff565b8082028115828204841417610a7757610a77612e1d565b601f821115611470576000816000526020600020601f850160051c81016020861015612f8b5750805b601f850160051c820191505b81811015612faa57828155600101612f97565b505050505050565b81516001600160401b03811115612fcb57612fcb612a35565b612fdf81612fd98454612a01565b84612f62565b602080601f8311600181146130145760008415612ffc5750858301515b600019600386901b1c1916600185901b178555612faa565b600085815260208120601f198616915b8281101561304357888601518255948401946001909101908401613024565b50858210156130615787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b838110156130ee57888303603f190185528151805163ffffffff1684528781015161ffff168885015286015160608785018190526130da8186018361232b565b96890196945050509086019060010161309a565b509098975050505050505050565b60006040828403121561310e57600080fd5b613116612a73565b82358152602083013560208201528091505092915050565b8481526001600160401b0360c01b8460c01b16602082015282602882015260008251613161816048850160208701612307565b9190910160480195945050505050565b80356020831015610a7757600019602084900360031b1b1692915050565b6001600160c01b031981358181169160088510156131b75780818660080360031b1b83161692505b505092915050565b6001600160401b0360c01b8560c01b16815263ffffffff60e01b8460e01b16600882015282600c820152600082516131fe81602c850160208701612307565b91909101602c0195945050505050565b80820180821115610a7757610a77612e1d565b60006080828403121561323357600080fd5b61323b612a4b565b82518152602083015161324d816127c6565b602082015261325f8460408501612eff565b60408201529392505050565b60006020828403121561327d57600080fd5b8151610c388161238f56fea2646970667358221220c184047f55d32f63a680c09336614b1b1422300e42596cef498353ab916c762e64736f6c63430008160033", - "sourceMap": "273:1743:131:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1767:247;;;;;;;;;;-1:-1:-1;1767:247:131;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;1779:89:112;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;3998:186::-;;;;;;;;;;-1:-1:-1;3998:186:112;;;;;:::i;:::-;;:::i;:::-;;;2368:14:132;;2361:22;2343:41;;2331:2;2316:18;3998:186:112;2203:187:132;5102:1258:66;;;;;;;;;;-1:-1:-1;5102:1258:66;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;1466:111:131:-;;;;;;;;;;-1:-1:-1;1466:111:131;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;4608:31:132;;;4590:50;;4578:2;4563:18;1466:111:131;4446:200:132;2256:27:66;;;;;;;;;;-1:-1:-1;2256:27:66;;;;-1:-1:-1;;;;;2256:27:66;;;;;;-1:-1:-1;;;;;4815:32:132;;;4797:51;;4785:2;4770:18;2256:27:66;4651:203:132;4368:708:52;;;;;;:::i;:::-;;:::i;:::-;;2130:40:66;;;;;;;;;;;;2169:1;2130:40;;;;;6597:6:132;6585:19;;;6567:38;;6555:2;6540:18;2130:40:66;6423:188:132;3401:140:66;;;;;;;;;;-1:-1:-1;3401:140:66;;;-1:-1:-1;;;6786:52:132;;3532:1:66;6869:2:132;6854:18;;6847:59;6759:18;3401:140:66;6616:296:132;1287:235:50;;;;;;;;;;-1:-1:-1;1287:235:50;;;843:1:53;7124:34:132;;678:1:52;7189:2:132;7174:18;;7167:43;7060:18;1287:235:50;6917:299:132;2849:97:112;;;;;;;;;;-1:-1:-1;2927:12:112;;2849:97;;;7367:25:132;;;7355:2;7340:18;2849:97:112;7221:177:132;2093:31:66;;;;;;;;;;;;2123:1;2093:31;;4776:244:112;;;;;;;;;;-1:-1:-1;4776:244:112;;;;;:::i;:::-;;:::i;2707:82::-;;;;;;;;;;-1:-1:-1;2780:2:112;2707:82;;;8036:4:132;8024:17;;;8006:36;;7994:2;7979:18;2707:82:112;7864:184:132;1724:108:51;;;;;;;;;;-1:-1:-1;1724:108:51;;;;;:::i;:::-;;:::i;6811:774:66:-;;;;;;;;;;-1:-1:-1;6811:774:66;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;508:87:131:-;;;;;;;;;;-1:-1:-1;508:87:131;;;;;:::i;:::-;;:::i;1583:178::-;;;;;;;;;;-1:-1:-1;1583:178:131;;;;;:::i;:::-;;:::i;875:93:61:-;;;;;;;;;;-1:-1:-1;956:4:61;875:93;;660:273:131;;;;;;;;;;-1:-1:-1;660:273:131;;;;;:::i;:::-;;:::i;:::-;;;;10249:25:132;;;10305:2;10290:18;;10283:34;;;;10222:18;660:273:131;10075:248:132;538:93:59;;;;;;;;;;-1:-1:-1;538:93:59;;;;;:::i;:::-;;:::i;16059:132:66:-;;;;;;;;;;-1:-1:-1;16059:132:66;;;;;:::i;:::-;16164:11;;;;;16141:4;16164:11;;;:5;:11;;;;;;:20;;16059:132;446:46:51;;;;;;;;;;;;;;;4583:163:66;;;;;;;;;;-1:-1:-1;4583:163:66;;;;;:::i;:::-;;:::i;3004:116:112:-;;;;;;;;;;-1:-1:-1;3004:116:112;;;;;:::i;:::-;-1:-1:-1;;;;;3095:18:112;3069:7;3095:18;;;:9;:18;;;;;;;3004:116;2293:101:107;;;;;;;;;;;;;:::i;3507:128:52:-;;;;;;;;;;-1:-1:-1;3507:128:52;;;;;:::i;:::-;3596:12;3507:128;;;;;2013:216;;;;;;;;;;-1:-1:-1;2013:216:52;;;;;:::i;:::-;-1:-1:-1;;;;;2198:24:52;;2217:4;2198:24;2013:216;;;;;;;4148:87:66;;;;;;;;;;-1:-1:-1;4227:1:66;4148:87;;1638:85:107;;;;;;;;;;-1:-1:-1;1684:7:107;1710:6;-1:-1:-1;;;;;1710:6:107;1638:85;;1981:93:112;;;;;;;;;;;;;:::i;1787:46:66:-;;;;;;;;;;;;;;;1460:94:65;;;;;;;;;;-1:-1:-1;1519:4:65;1460:94;;3315:178:112;;;;;;;;;;-1:-1:-1;3315:178:112;;;;;:::i;:::-;;:::i;1349:111:131:-;;;;;;;;;;-1:-1:-1;1349:111:131;;;;;:::i;:::-;;:::i;559:23:61:-;;;;;;;;;;-1:-1:-1;559:23:61;;;;-1:-1:-1;;;;;559:23:61;;;1391:156:59;;;;;;;;;;-1:-1:-1;1391:156:59;;;;;:::i;:::-;;:::i;569:48:51:-;;;;;;;;;;-1:-1:-1;569:48:51;;;;;:::i;:::-;;;;;;;;;;;;;;3510:981:59;;;;;;;;;;-1:-1:-1;3510:981:59;;;;;:::i;:::-;;:::i;1698:1333:61:-;;;;;;:::i;:::-;;:::i;1219:124:131:-;;;;;;;;;;-1:-1:-1;1219:124:131;;;;;:::i;:::-;;:::i;8273:290:66:-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;3252:105:51:-;;;;;;;;;;-1:-1:-1;3252:105:51;;;;;:::i;:::-;;:::i;3679:409:61:-;;;;;;:::i;:::-;;:::i;1100:139::-;;;;;;;;;;-1:-1:-1;1100:139:61;;;;;:::i;:::-;;:::i;3551:140:112:-;;;;;;;;;;-1:-1:-1;3551:140:112;;;;;:::i;:::-;-1:-1:-1;;;;;3657:18:112;;;3631:7;3657:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;3551:140;939:274:131;;;;;;;;;;-1:-1:-1;939:274:131;;;;;:::i;:::-;;:::i;2543:215:107:-;;;;;;;;;;-1:-1:-1;2543:215:107;;;;;:::i;:::-;;:::i;2771:149:52:-;;;;;;;;;;-1:-1:-1;2771:149:52;;;;;:::i;:::-;;:::i;1767:247:131:-;1896:20;1918;1957:50;1977:10;1989:17;1957:19;:50::i;:::-;1950:57;;;;1767:247;;;;;;:::o;1779:89:112:-;1824:13;1856:5;1849:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1779:89;:::o;3998:186::-;4071:4;735:10:117;4125:31:112;735:10:117;4141:7:112;4150:5;4125:8;:31::i;:::-;4173:4;4166:11;;;3998:186;;;;;:::o;5102:1258:66:-;-1:-1:-1;;;;;;;;;;;;;;;;;5254:35:66;5291:28;-1:-1:-1;;;;;;;;;;;;;;;;;;;5291:28:66;5509:34;;;;;;;;-1:-1:-1;5509:34:66;;;-1:-1:-1;;;;;5509:34:66;;;;;;;5660:21;;;;;;;;;;;5509:34;;-1:-1:-1;;;5660:21:66;;;-1:-1:-1;;;;;;;;;;;;;;;;;5660:21:66;;;;;;;;;;;;;;;-1:-1:-1;5644:37:66;-1:-1:-1;6118:20:66;;6168:120;6192:19;;;;6225:22;;;;6261:17;;;;6192:10;6261:17;:::i;:::-;6168:10;:120::i;:::-;6311:42;;;;;;;;;;;;;;;;5102:1258;;;;-1:-1:-1;;;;;;5102:1258:66:o;1466:111:131:-;1520:15;1554:16;1560:9;1554:5;:16::i;4368:708:52:-;4681:8;-1:-1:-1;;;;;4673:31:52;4694:10;4673:31;4669:68;;4713:24;;-1:-1:-1;;;4713:24:52;;4726:10;4713:24;;;4797:51:132;4770:18;;4713:24:52;;;;;;;;4669:68;4873:14;;;;;;4837:32;;4854:14;;4873:7;4854:14;:::i;:::-;4837:16;:32::i;:::-;:50;4833:103;;4905:14;;;;:7;:14;:::i;:::-;4896:40;;-1:-1:-1;;;4896:40:52;;17502:10:132;17490:23;;;4896:40:52;;;17472:42:132;4921:14:52;;;;17530:18:132;;;17523:34;17445:18;;4896:40:52;17300:263:132;4833:103:52;5010:59;5021:7;5030:5;5037:8;;5047:9;5058:10;;5010;:59::i;:::-;4368:708;;;;;;;:::o;4776:244:112:-;4863:4;735:10:117;4919:37:112;4935:4;735:10:117;4950:5:112;4919:15;:37::i;:::-;4966:26;4976:4;4982:2;4986:5;4966:9;:26::i;:::-;5009:4;5002:11;;;4776:244;;;;;;:::o;1724:108:51:-;1531:13:107;:11;:13::i;:::-;1804:21:51::1;1813:4;1819:5;1804:8;:21::i;:::-;1724:108:::0;;:::o;6811:774:66:-;-1:-1:-1;;;;;;;;;;;;;;;;;7145:24:66;7173:74;7184:19;;;;7205:22;;;;7229:17;;;;7184:10;7229:17;:::i;7173:74::-;7142:105;;;7336:20;7358;7382:49;7402:10;7414:16;7382:19;:49::i;:::-;7335:96;;-1:-1:-1;7335:96:66;-1:-1:-1;7520:58:66;7527:17;;;;:10;:17;:::i;:::-;7546:7;7555;7564:13;7520:6;:58::i;:::-;7513:65;6811:774;-1:-1:-1;;;;;;6811:774:66:o;508:87:131:-;569:19;575:3;580:7;569:5;:19::i;1583:178::-;1671:24;1714:40;1722:3;1727:17;1746:7;1714;:40::i;:::-;1707:47;1583:178;-1:-1:-1;;;;1583:178:131:o;660:273::-;792:23;817:24;860:66;867:10;879:15;896:20;918:7;860:6;:66::i;:::-;853:73;;;;660:273;;;;;;;:::o;538:93:59:-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;4583:163:66:-;1531:13:107;:11;:13::i;:::-;4666:12:66::1;:28:::0;;-1:-1:-1;;;;;;4666:28:66::1;-1:-1:-1::0;;;;;4666:28:66;::::1;::::0;;::::1;::::0;;;4709:30:::1;::::0;4797:51:132;;;4709:30:66::1;::::0;4785:2:132;4770:18;4709:30:66::1;;;;;;;;4583:163:::0;:::o;2293:101:107:-;1531:13;:11;:13::i;:::-;2357:30:::1;2384:1;2357:18;:30::i;:::-;2293:101::o:0;1981:93:112:-;2028:13;2060:7;2053:14;;;;;:::i;3315:178::-;3384:4;735:10:117;3438:27:112;735:10:117;3455:2:112;3459:5;3438:9;:27::i;1349:111:131:-;1402:16;1437;1443:9;1437:5;:16::i;1391:156:59:-;1531:13:107;:11;:13::i;:::-;1503:37:59::1;;1523:16:::0;;1503:37:::1;:::i;:::-;:19;:37::i;3510:981::-:0;3701:21;;;3677;3701;;;:15;:21;;;;;;;;:31;;;;;;;;;;3677:55;;3653:12;;3677:21;3701:31;3677:55;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3861:8;:15;3880:1;3861:20;3857:46;;3890:13;;3883:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3883:20:59;;-1:-1:-1;3883:20:59;;-1:-1:-1;;;;3883:20:59;3857:46;3988:1;3964:25;;;3960:46;;3998:8;-1:-1:-1;3991:15:59;;3960:46;4153:1;4129:25;;4125:267;;4170:34;4190:13;;4170:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4170:19:59;;-1:-1:-1;;;4170:34:59:i;:::-;4353:8;4363:17;:13;4377:1;4363:13;;:17;:::i;:::-;4340:41;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;4333:48;;;;;4125:267;4470:13;;4455:29;;-1:-1:-1;;;4455:29:59;;;;;;;;;:::i;1698:1333:61:-;1799:9;1794:1037;1814:19;;;1794:1037;;;1854:29;1886:8;;1895:1;1886:11;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;1854:43;-1:-1:-1;1980:50:61;1987:20;;;;1854:43;1987:20;:::i;:::-;2009;;;;16164:11:66;;;;;16141:4;16164:11;;;:5;:11;;;;;;:20;;16059:132;1980:50:61;1975:65;;2032:8;;;1975:65;2602:4;:22;2633:12;;;;:6;2696:11;;;;2725:14;;;;2633:6;2725:14;:::i;:::-;2757:15;;;;;;;;:::i;:::-;2790:16;;;;:6;:16;:::i;:::-;2602:218;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1840:991;1794:1037;1835:3;;1794:1037;;;;2988:10;-1:-1:-1;;;;;2978:43:61;;:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2978:45:61;;;;;;;;;;;;:::i;:::-;2961:63;;-1:-1:-1;;;2961:63:61;;;;;;;;:::i;1219:124:131:-;1279:16;1314:22;1326:9;1314:11;:22::i;8273:290:66:-;8434:34;;:::i;:::-;-1:-1:-1;;;;;;;;;;;;;;;;;8517:39:66;8523:10;8535:4;8541:14;8517:5;:39::i;3252:105:51:-;1531:13:107;:11;:13::i;:::-;3319:31:51::1;::::0;-1:-1:-1;;;3319:31:51;;-1:-1:-1;;;;;4815:32:132;;;3319:31:51::1;::::0;::::1;4797:51:132::0;3319:8:51::1;:20;::::0;::::1;::::0;4770:18:132;;3319:31:51::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;3252:105:::0;:::o;3679:409:61:-;3958:10;3980:4;3958:27;3954:50;;3994:10;;-1:-1:-1;;;3994:10:61;;;;;;;;;;;3954:50;4014:67;4033:7;4042:5;4049:8;;4059:9;4070:10;;4014:18;:67::i;1100:139::-;1531:13:107;:11;:13::i;:::-;1175:8:61::1;:20:::0;;-1:-1:-1;;;;;;1175:20:61::1;-1:-1:-1::0;;;;;1175:20:61;::::1;::::0;;::::1;::::0;;;1210:22:::1;::::0;4797:51:132;;;1210:22:61::1;::::0;4785:2:132;4770:18;1210:22:61::1;4651:203:132::0;939:274:131;1080:23;1105:24;1148:58;1159:15;1176:20;1198:7;1148:10;:58::i;2543:215:107:-;1531:13;:11;:13::i;:::-;-1:-1:-1;;;;;2627:22:107;::::1;2623:91;;2672:31;::::0;-1:-1:-1;;;2672:31:107;;2700:1:::1;2672:31;::::0;::::1;4797:51:132::0;4770:18;;2672:31:107::1;4651:203:132::0;2623:91:107::1;2723:28;2742:8;2723:18;:28::i;:::-;2543:215:::0;:::o;2771:149:52:-;2853:4;2900:13;;;;;;2876:5;;2853:4;;2882:13;;2900:6;2882:13;:::i;:::-;2876:20;;;;;;;;;;;;;-1:-1:-1;2876:20:52;;:37;;2771:149;-1:-1:-1;;2771:149:52:o;10898:1436:66:-;11030:20;11052;11084:15;11255:324;11287:10;:13;;;11314:16;11320:9;11314:5;:16::i;:::-;11548:21;;;;:10;:21;:::i;:::-;11255:324;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11255:18:66;;-1:-1:-1;;;11255:324:66:i;:::-;11231:348;;-1:-1:-1;11231:348:66;-1:-1:-1;11659:14:66;11231:348;11676:33;;2123:1;11676:33;;;2169:1;11676:33;11659:50;-1:-1:-1;11831:67:66;11846:17;;;;:10;:17;:::i;:::-;11865:7;11874:23;;;;:10;:23;:::i;11831:67::-;12156:12;;11821:77;;-1:-1:-1;;;;;;12156:12:66;12248:23;;12244:83;;12273:54;;-1:-1:-1;;;12273:54:66;;-1:-1:-1;;;;;12273:36:66;;;;;:54;;12310:7;;12319;;12273:54;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;12244:83;11074:1260;;;10898:1436;;;;;:::o;8726:128:112:-;8810:37;8819:5;8826:7;8835:5;8842:4;8810:8;:37::i;:::-;8726:128;;;:::o;18076:668:66:-;18218:20;18240:24;18414:22;18426:9;18414:11;:22::i;:::-;18399:37;;18562:12;18543:31;;18644:12;18625:16;:31;18621:117;;;18679:48;;-1:-1:-1;;;18679:48:66;;;;;10249:25:132;;;10290:18;;;10283:34;;;10222:18;;18679:48:66;10075:248:132;17344:147:66;17409:15;17450:33;17462:21;17450:9;:33;:::i;2718:196:51:-;2822:11;;;2788:7;2822:11;;;:5;:11;;;;;;;2843:43;;2874:12;;-1:-1:-1;;;2874:12:51;;25442:10:132;25430:23;;2874:12:51;;;25412:42:132;25385:18;;2874:12:51;25268:192:132;12852:1806:66;13329:17;13349:36;:17;:8;;:15;:17::i;:::-;2891:2:69;2780:123;13349:36:66;13329:56;;13518:24;13545:62;13553:9;13564:26;13570:19;:8;;:17;:19::i;:::-;13564:5;:26::i;:::-;13592:14;;;;:7;:14;:::i;:::-;13545:7;:62::i;:::-;13518:89;-1:-1:-1;243:2:69;-1:-1:-1;;13618:955:66;;;13722:23;13748:175;13791:13;;;;;;;;:::i;:::-;13822:14;;;;:7;:14;:::i;:::-;13854:16;13888:21;:8;;:19;:21::i;:::-;13748:25;:175::i;:::-;14470:92;;-1:-1:-1;;;14470:92:66;;13722:201;;-1:-1:-1;;;;;;14470:8:66;:20;;;;:92;;14491:9;;14502:5;;14509:1;;13722:201;;14470:92;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13645:928;13618:955;-1:-1:-1;;;;;14588:63:66;;14600:5;14588:63;14607:14;;;;:7;:14;:::i;:::-;14588:63;;;17502:10:132;17490:23;;;17472:42;;17545:2;17530:18;;17523:34;;;17445:18;14588:63:66;;;;;;;13155:1503;;12852:1806;;;;;;;:::o;10415:477:112:-;-1:-1:-1;;;;;3657:18:112;;;10514:24;3657:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;-1:-1:-1;;10580:37:112;;10576:310;;10656:5;10637:16;:24;10633:130;;;10688:60;;-1:-1:-1;;;10688:60:112;;-1:-1:-1;;;;;26436:32:132;;10688:60:112;;;26418:51:132;26485:18;;;26478:34;;;26528:18;;;26521:34;;;26391:18;;10688:60:112;26216:345:132;10633:130:112;10804:57;10813:5;10820:7;10848:5;10829:16;:24;10855:5;10804:8;:57::i;:::-;10504:388;10415:477;;;:::o;5393:300::-;-1:-1:-1;;;;;5476:18:112;;5472:86;;5517:30;;-1:-1:-1;;;5517:30:112;;5544:1;5517:30;;;4797:51:132;4770:18;;5517:30:112;4651:203:132;5472:86:112;-1:-1:-1;;;;;5571:16:112;;5567:86;;5610:32;;-1:-1:-1;;;5610:32:112;;5639:1;5610:32;;;4797:51:132;4770:18;;5610:32:112;4651:203:132;5567:86:112;5662:24;5670:4;5676:2;5680:5;5662:7;:24::i;1796:162:107:-;1684:7;1710:6;-1:-1:-1;;;;;1710:6:107;735:10:117;1855:23:107;1851:101;;1901:40;;-1:-1:-1;;;1901:40:107;;735:10:117;1901:40:107;;;4797:51:132;4770:18;;1901:40:107;4651:203:132;2286:134:51;2359:11;;;;;;;:5;:11;;;;;;;;;:19;;;2393:20;;17472:42:132;;;17530:18;;17523:34;;;2393:20:51;;17445:18:132;2393:20:51;;;;;;;2286:134;;:::o;2038:391:53:-;-1:-1:-1;;;;;;;;;;;;;;;;;2259:8:53;-1:-1:-1;;;;;2259:14:53;;2291:86;;;;;;;;2307:7;2291:86;;;;;;2316:25;2333:7;2316:16;:25::i;:::-;2291:86;;;;2343:8;2291:86;;;;2353:8;2291:86;;;;2363:13;2291:86;;;;;2403:4;2259:163;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2240:182;2038:391;-1:-1:-1;;;;;2038:391:53:o;7458:208:112:-;-1:-1:-1;;;;;7528:21:112;;7524:91;;7572:32;;-1:-1:-1;;;7572:32:112;;7601:1;7572:32;;;4797:51:132;4770:18;;7572:32:112;4651:203:132;7524:91:112;7624:35;7640:1;7644:7;7653:5;7624:7;:35::i;2939:462:65:-;3073:24;-1:-1:-1;;;;;3113:19:65;;3109:46;;3148:6;3134:21;;3109:46;3251:21;3257:3;3262:9;3251:5;:21::i;:::-;-1:-1:-1;3385:9:65;;2939:462;-1:-1:-1;;2939:462:65:o;2037:567::-;2198:20;2220:24;2291:44;2302:9;2313:12;2327:7;2291:10;:44::i;:::-;2256:79;;-1:-1:-1;2256:79:65;-1:-1:-1;2571:26:65;2577:5;2256:79;2571:5;:26::i;:::-;2037:567;;;;;;;:::o;2912:187:107:-;2985:16;3004:6;;-1:-1:-1;;;;;3020:17:107;;;-1:-1:-1;;;;;;3020:17:107;;;;;;3052:40;;3004:6;;;;;;;3052:40;;2985:16;3052:40;2975:124;2912:187;:::o;16981:139:66:-;17045:16;17080:33;17092:21;-1:-1:-1;;;;;17080:33:66;;;:::i;2237:514:59:-;2345:9;2340:354;2364:16;:23;2360:1;:27;2340:354;;;2522:48;2542:16;2559:1;2542:19;;;;;;;;:::i;:::-;;;;;;;:27;;;2522:19;:48::i;:::-;2656:16;2673:1;2656:19;;;;;;;;:::i;:::-;;;;;;;:27;;;2584:15;:40;2600:16;2617:1;2600:19;;;;;;;;:::i;:::-;;;;;;;:23;;;2584:40;;;;;;;;;;;;;;;:69;2625:16;2642:1;2625:19;;;;;;;;:::i;:::-;;;;;;;:27;;;2584:69;;;;;;;;;;;;;;;:99;;;;;;:::i;:::-;-1:-1:-1;2389:3:59;;2340:354;;;;2709:35;2727:16;2709:35;;;;;;:::i;4631:264::-;4801:1;4787:16;;4781:23;4827:28;;;463:1;4827:28;4823:65;;4879:8;4864:24;;-1:-1:-1;;;4864:24:59;;;;;;;;:::i;16585:172:66:-;16656:16;16729:21;16692:33;16729:21;16692:9;:33;:::i;:::-;16691:59;;;;:::i;9271:1333::-;9425:34;;:::i;:::-;-1:-1:-1;;;;;;;;;;;;;;;;;9823:20:66;;9873:140;9893:10;9917:19;;;;9950:22;;;;9986:17;;;;9917:10;9986:17;:::i;:::-;9873:6;:140::i;:::-;9822:191;;;;10102:20;10124;10148:49;10168:10;10180:16;10148:19;:49::i;:::-;10101:96;;-1:-1:-1;10101:96:66;-1:-1:-1;10320:66:66;10328:17;;;;:10;:17;:::i;:::-;10347:7;10356;10320:66;;;;;;;10365:4;10320:66;:::i;:::-;10371:14;10320:7;:66::i;:::-;10452:42;;;;;;;;;;;;;;;;;;;10518:15;;10307:79;;-1:-1:-1;10452:42:66;;-1:-1:-1;10554:10:66;;10518:15;10510:87;;10535:17;;;;:10;:17;:::i;:::-;10510:87;;;32128:10:132;32116:23;;;32098:42;;32171:2;32156:18;;32149:34;;;32199:18;;32192:34;;;32086:2;32071:18;10510:87:66;;;;;;;9491:1113;;;;9271:1333;;;;;;:::o;598:506:69:-;791:18;;732:17;;791:22;;;934:163;;1074:7;1083:13;1057:40;;;;;;;;32392:19:132;;;32467:3;32445:16;-1:-1:-1;;;;;;32441:51:132;32436:2;32427:12;;32420:73;32518:2;32509:12;;32237:290;1057:40:69;;;;;;;;;;;;;934:163;;;976:7;985:13;1017:10;1030:11;959:83;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;934:163;927:170;;598:506;;;;;;:::o;9701:432:112:-;-1:-1:-1;;;;;9813:19:112;;9809:89;;9855:32;;-1:-1:-1;;;9855:32:112;;9884:1;9855:32;;;4797:51:132;4770:18;;9855:32:112;4651:203:132;9809:89:112;-1:-1:-1;;;;;9911:21:112;;9907:90;;9955:31;;-1:-1:-1;;;9955:31:112;;9983:1;9955:31;;;4797:51:132;4770:18;;9955:31:112;4651:203:132;9907:90:112;-1:-1:-1;;;;;10006:18:112;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;:35;;;10051:76;;;;10101:7;-1:-1:-1;;;;;10085:31:112;10094:5;-1:-1:-1;;;;;10085:31:112;;10110:5;10085:31;;;;7367:25:132;;7355:2;7340:18;;7221:177;10085:31:112;;;;;;;;9701:432;;;;:::o;1573:123:69:-;1633:7;1667:21;188:2;1633:7;1667:4;;:21;:::i;:::-;1659:30;;;:::i;1874:152::-;1936:6;1975:42;243:2;188;1975:4;;:42;:::i;:::-;1968:50;;;:::i;:::-;1961:58;;;1874:152;-1:-1:-1;;;1874:152:69:o;2186:130::-;2250:12;2281:28;:4;243:2;2281:4;;:28;:::i;:::-;2274:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2274:35:69;;2186:130;-1:-1:-1;;;;;;2186:130:69:o;640:284:68:-;824:17;877:6;885:7;894:9;905:11;860:57;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;853:64;;640:284;;;;;;:::o;6008:1107:112:-;-1:-1:-1;;;;;6097:18:112;;6093:540;;6249:5;6233:12;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;6093:540:112;;-1:-1:-1;6093:540:112;;-1:-1:-1;;;;;6307:15:112;;6285:19;6307:15;;;:9;:15;;;;;;6340:19;;;6336:115;;;6386:50;;-1:-1:-1;;;6386:50:112;;-1:-1:-1;;;;;26436:32:132;;6386:50:112;;;26418:51:132;26485:18;;;26478:34;;;26528:18;;;26521:34;;;26391:18;;6386:50:112;26216:345:132;6336:115:112;-1:-1:-1;;;;;6571:15:112;;;;;;:9;:15;;;;;6589:19;;;;6571:37;;6093:540;-1:-1:-1;;;;;6647:16:112;;6643:425;;6810:12;:21;;;;;;;6643:425;;;-1:-1:-1;;;;;7021:13:112;;;;;;:9;:13;;;;;:22;;;;;;6643:425;7098:2;-1:-1:-1;;;;;7083:25:112;7092:4;-1:-1:-1;;;;;7083:25:112;;7102:5;7083:25;;;;7367::132;;7355:2;7340:18;;7221:177;7083:25:112;;;;;;;;6008:1107;;;:::o;7984:206::-;-1:-1:-1;;;;;8054:21:112;;8050:89;;8098:30;;-1:-1:-1;;;8098:30:112;;8125:1;8098:30;;;4797:51:132;4770:18;;8098:30:112;4651:203:132;8050:89:112;8148:35;8156:7;8173:1;8177:5;8148:7;:35::i;3188:766:53:-;3389:31;;:::i;:::-;3554:20;3577:26;3588:4;:14;;;3577:10;:26::i;:::-;3617:15;;;;3554:49;;-1:-1:-1;3617:19:53;3613:53;;3638:28;3650:4;:15;;;3638:11;:28::i;:::-;3755:8;-1:-1:-1;;;;;3755:13:53;;3777:12;3809:92;;;;;;;;3825:7;3809:92;;;;;;3834:25;3851:7;3834:16;:25::i;:::-;3809:92;;;;3861:8;3809:92;;;;3871:8;3809:92;;;;3899:1;3881:4;:15;;;:19;3809:92;;;;;3919:14;3755:192;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3677:270;3188:766;-1:-1:-1;;;;;;;3188:766:53:o;4650:191::-;4716:17;4762:10;4749:9;:23;4745:62;;4781:26;;-1:-1:-1;;;4781:26:53;;4797:9;4781:26;;;7367:25:132;7340:18;;4781:26:53;7221:177:132;4745:62:53;-1:-1:-1;4824:10:53;4650:191::o;5218:410::-;5371:15;5389:8;-1:-1:-1;;;;;5389:16:53;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5371:36;-1:-1:-1;;;;;;5421:21:53;;5417:54;;5451:20;;-1:-1:-1;;;5451:20:53;;;;;;;;;;;5417:54;1797:53:115;;;5578:10:53;1797:53:115;;;35394:34:132;;;5598:8:53;-1:-1:-1;;;;;35464:15:132;;;35444:18;;;35437:43;35496:18;;;;35489:34;;;1797:53:115;;;;;;;;;;35329:18:132;;;;1797:53:115;;;;;;;;;-1:-1:-1;;;;;1797:53:115;-1:-1:-1;;;1797:53:115;;;7968:11;;5545:76:53;;:32;;;5609:11;;1770:81:115;;5545:32:53;;-1:-1:-1;;;;1797:53:115;;-1:-1:-1;;;5545:32:53;7934:5:115;7929:60;8041:7;8031:176;;8085:4;8079:11;8130:16;8127:1;8122:3;8107:40;8176:16;8171:3;8164:29;8031:176;-1:-1:-1;;8284:1:115;8278:8;8234:16;;-1:-1:-1;8310:15:115;;:68;;8362:11;8377:1;8362:16;;8310:68;;;-1:-1:-1;;;;;8328:26:115;;;:31;8310:68;8306:146;;;8401:40;;-1:-1:-1;;;8401:40:115;;-1:-1:-1;;;;;4815:32:132;;8401:40:115;;;4797:51:132;4770:18;;8401:40:115;4651:203:132;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:158:132:-;76:5;121:3;112:6;107:3;103:16;99:26;96:46;;;138:1;135;128:12;96:46;-1:-1:-1;160:6:132;14:158;-1:-1:-1;14:158:132:o;177:429::-;275:6;283;336:2;324:9;315:7;311:23;307:32;304:52;;;352:1;349;342:12;304:52;392:9;379:23;-1:-1:-1;;;;;417:6:132;414:30;411:50;;;457:1;454;447:12;411:50;480:69;541:7;532:6;521:9;517:22;480:69;:::i;:::-;470:79;596:2;581:18;;;;568:32;;-1:-1:-1;;;;177:429:132:o;611:250::-;696:1;706:113;720:6;717:1;714:13;706:113;;;796:11;;;790:18;777:11;;;770:39;742:2;735:10;706:113;;;-1:-1:-1;;853:1:132;835:16;;828:27;611:250::o;866:270::-;907:3;945:5;939:12;972:6;967:3;960:19;988:76;1057:6;1050:4;1045:3;1041:14;1034:4;1027:5;1023:16;988:76;:::i;:::-;1118:2;1097:15;-1:-1:-1;;1093:29:132;1084:39;;;;1125:4;1080:50;;866:270;-1:-1:-1;;866:270:132:o;1141:377::-;1334:2;1323:9;1316:21;1297:4;1360:44;1400:2;1389:9;1385:18;1377:6;1360:44;:::i;:::-;1452:9;1444:6;1440:22;1435:2;1424:9;1420:18;1413:50;1480:32;1505:6;1497;1480:32;:::i;1523:219::-;1672:2;1661:9;1654:21;1635:4;1692:44;1732:2;1721:9;1717:18;1709:6;1692:44;:::i;1747:131::-;-1:-1:-1;;;;;1822:31:132;;1812:42;;1802:70;;1868:1;1865;1858:12;1883:315;1951:6;1959;2012:2;2000:9;1991:7;1987:23;1983:32;1980:52;;;2028:1;2025;2018:12;1980:52;2067:9;2054:23;2086:31;2111:5;2086:31;:::i;:::-;2136:5;2188:2;2173:18;;;;2160:32;;-1:-1:-1;;;1883:315:132:o;2395:361::-;2484:6;2537:2;2525:9;2516:7;2512:23;2508:32;2505:52;;;2553:1;2550;2543:12;2505:52;2593:9;2580:23;-1:-1:-1;;;;;2618:6:132;2615:30;2612:50;;;2658:1;2655;2648:12;2612:50;2681:69;2742:7;2733:6;2722:9;2718:22;2681:69;:::i;2915:1341::-;2835:12;;2823:25;;2897:4;2886:16;;;2880:23;2864:14;;;2857:47;3287:4;3335:3;3320:19;;3412:2;3450:3;3445:2;3434:9;3430:18;3423:31;3474:6;3509;3503:13;3540:6;3532;3525:22;3578:3;3567:9;3563:19;3556:26;;3641:3;3631:6;3628:1;3624:14;3613:9;3609:30;3605:40;3591:54;;3664:4;3703;3695:6;3691:17;3726:1;3736:428;3750:6;3747:1;3744:13;3736:428;;;3815:22;;;-1:-1:-1;;3811:37:132;3799:50;;3872:13;;3913:9;;3898:25;;3962:11;;3956:18;3994:15;;;3987:27;;;4037:47;4068:15;;;3956:18;4037:47;:::i;:::-;4027:57;-1:-1:-1;;4142:12:132;;;;4107:15;;;;3772:1;3765:9;3736:428;;;-1:-1:-1;;2835:12:132;;4246:2;4231:18;;2823:25;-1:-1:-1;;;2897:4:132;2886:16;;2880:23;2864:14;;;2857:47;-1:-1:-1;4181:6:132;-1:-1:-1;4196:54:132;2761:149;4261:180;4320:6;4373:2;4361:9;4352:7;4348:23;4344:32;4341:52;;;4389:1;4386;4379:12;4341:52;-1:-1:-1;4412:23:132;;4261:180;-1:-1:-1;4261:180:132:o;4859:154::-;4918:5;4963:2;4954:6;4949:3;4945:16;4941:25;4938:45;;;4979:1;4976;4969:12;5018:347;5069:8;5079:6;5133:3;5126:4;5118:6;5114:17;5110:27;5100:55;;5151:1;5148;5141:12;5100:55;-1:-1:-1;5174:20:132;;-1:-1:-1;;;;;5206:30:132;;5203:50;;;5249:1;5246;5239:12;5203:50;5286:4;5278:6;5274:17;5262:29;;5338:3;5331:4;5322:6;5314;5310:19;5306:30;5303:39;5300:59;;;5355:1;5352;5345:12;5370:1048;5513:6;5521;5529;5537;5545;5553;5561;5614:3;5602:9;5593:7;5589:23;5585:33;5582:53;;;5631:1;5628;5621:12;5582:53;5654;5699:7;5688:9;5654:53;:::i;:::-;5644:63;;5754:2;5743:9;5739:18;5726:32;5716:42;;5809:3;5798:9;5794:19;5781:33;-1:-1:-1;;;;;5874:2:132;5866:6;5863:14;5860:34;;;5890:1;5887;5880:12;5860:34;5929:58;5979:7;5970:6;5959:9;5955:22;5929:58;:::i;:::-;6006:8;;-1:-1:-1;5903:84:132;-1:-1:-1;6091:3:132;6076:19;;6063:33;;-1:-1:-1;6105:31:132;6063:33;6105:31;:::i;:::-;6155:5;;-1:-1:-1;6213:3:132;6198:19;;6185:33;;6230:16;;;6227:36;;;6259:1;6256;6249:12;6227:36;;6298:60;6350:7;6339:8;6328:9;6324:24;6298:60;:::i;:::-;5370:1048;;;;-1:-1:-1;5370:1048:132;;-1:-1:-1;5370:1048:132;;;;6272:86;;-1:-1:-1;;;5370:1048:132:o;7403:456::-;7480:6;7488;7496;7549:2;7537:9;7528:7;7524:23;7520:32;7517:52;;;7565:1;7562;7555:12;7517:52;7604:9;7591:23;7623:31;7648:5;7623:31;:::i;:::-;7673:5;-1:-1:-1;7730:2:132;7715:18;;7702:32;7743:33;7702:32;7743:33;:::i;:::-;7403:456;;7795:7;;-1:-1:-1;;;7849:2:132;7834:18;;;;7821:32;;7403:456::o;8053:163::-;8120:20;;8180:10;8169:22;;8159:33;;8149:61;;8206:1;8203;8196:12;8149:61;8053:163;;;:::o;8221:252::-;8288:6;8296;8349:2;8337:9;8328:7;8324:23;8320:32;8317:52;;;8365:1;8362;8355:12;8317:52;8388:28;8406:9;8388:28;:::i;8478:118::-;8564:5;8557:13;8550:21;8543:5;8540:32;8530:60;;8586:1;8583;8576:12;8601:490;8696:6;8704;8757:2;8745:9;8736:7;8732:23;8728:32;8725:52;;;8773:1;8770;8763:12;8725:52;8813:9;8800:23;-1:-1:-1;;;;;8838:6:132;8835:30;8832:50;;;8878:1;8875;8868:12;8832:50;8901:69;8962:7;8953:6;8942:9;8938:22;8901:69;:::i;:::-;8891:79;;;9020:2;9009:9;9005:18;8992:32;9033:28;9055:5;9033:28;:::i;:::-;9080:5;9070:15;;;8601:490;;;;;:::o;9096:257::-;2835:12;;2823:25;;2897:4;2886:16;;;2880:23;2864:14;;;2857:47;9290:2;9275:18;;9302:45;2761:149;9358:387;9434:6;9442;9450;9503:2;9491:9;9482:7;9478:23;9474:32;9471:52;;;9519:1;9516;9509:12;9471:52;9558:9;9545:23;9577:31;9602:5;9577:31;:::i;:::-;9627:5;-1:-1:-1;9679:2:132;9664:18;;9651:32;;-1:-1:-1;9702:37:132;9735:2;9720:18;;9702:37;:::i;:::-;9692:47;;9358:387;;;;;:::o;9750:320::-;9826:6;9834;9842;9895:2;9883:9;9874:7;9870:23;9866:32;9863:52;;;9911:1;9908;9901:12;9863:52;9947:9;9934:23;9924:33;;10004:2;9993:9;9989:18;9976:32;9966:42;;10027:37;10060:2;10049:9;10045:18;10027:37;:::i;10328:159::-;10395:20;;10455:6;10444:18;;10434:29;;10424:57;;10477:1;10474;10467:12;10492:256;10558:6;10566;10619:2;10607:9;10598:7;10594:23;10590:32;10587:52;;;10635:1;10632;10625:12;10587:52;10658:28;10676:9;10658:28;:::i;:::-;10648:38;;10705:37;10738:2;10727:9;10723:18;10705:37;:::i;:::-;10695:47;;10492:256;;;;;:::o;11212:247::-;11271:6;11324:2;11312:9;11303:7;11299:23;11295:32;11292:52;;;11340:1;11337;11330:12;11292:52;11379:9;11366:23;11398:31;11423:5;11398:31;:::i;11464:670::-;11578:6;11586;11594;11602;11655:3;11643:9;11634:7;11630:23;11626:33;11623:53;;;11672:1;11669;11662:12;11623:53;11695;11740:7;11729:9;11695:53;:::i;:::-;11685:63;;11799:2;11788:9;11784:18;11771:32;-1:-1:-1;;;;;11818:6:132;11815:30;11812:50;;;11858:1;11855;11848:12;11812:50;11897:58;11947:7;11938:6;11927:9;11923:22;11897:58;:::i;:::-;11974:8;;-1:-1:-1;11871:84:132;-1:-1:-1;;12059:3:132;12044:19;;12031:33;12073:31;12031:33;12073:31;:::i;:::-;11464:670;;;;-1:-1:-1;11464:670:132;;-1:-1:-1;;11464:670:132:o;12139:129::-;-1:-1:-1;;;;;12217:5:132;12213:30;12206:5;12203:41;12193:69;;12258:1;12255;12248:12;12273:245;12331:6;12384:2;12372:9;12363:7;12359:23;12355:32;12352:52;;;12400:1;12397;12390:12;12352:52;12439:9;12426:23;12458:30;12482:5;12458:30;:::i;12523:395::-;12614:8;12624:6;12678:3;12671:4;12663:6;12659:17;12655:27;12645:55;;12696:1;12693;12686:12;12645:55;-1:-1:-1;12719:20:132;;-1:-1:-1;;;;;12751:30:132;;12748:50;;;12794:1;12791;12784:12;12748:50;12831:4;12823:6;12819:17;12807:29;;12891:3;12884:4;12874:6;12871:1;12867:14;12859:6;12855:27;12851:38;12848:47;12845:67;;;12908:1;12905;12898:12;12923:505;13049:6;13057;13110:2;13098:9;13089:7;13085:23;13081:32;13078:52;;;13126:1;13123;13116:12;13078:52;13166:9;13153:23;-1:-1:-1;;;;;13191:6:132;13188:30;13185:50;;;13231:1;13228;13221:12;13185:50;13270:98;13360:7;13351:6;13340:9;13336:22;13270:98;:::i;:::-;13387:8;;13244:124;;-1:-1:-1;12923:505:132;-1:-1:-1;;;;12923:505:132:o;13433:184::-;13491:6;13544:2;13532:9;13523:7;13519:23;13515:32;13512:52;;;13560:1;13557;13550:12;13512:52;13583:28;13601:9;13583:28;:::i;13804:553::-;13890:6;13898;13906;13914;13967:2;13955:9;13946:7;13942:23;13938:32;13935:52;;;13983:1;13980;13973:12;13935:52;14006:28;14024:9;14006:28;:::i;:::-;13996:38;;14053:37;14086:2;14075:9;14071:18;14053:37;:::i;:::-;14043:47;;14141:2;14130:9;14126:18;14113:32;-1:-1:-1;;;;;14160:6:132;14157:30;14154:50;;;14200:1;14197;14190:12;14154:50;14239:58;14289:7;14280:6;14269:9;14265:22;14239:58;:::i;:::-;13804:553;;;;-1:-1:-1;14316:8:132;-1:-1:-1;;;;13804:553:132:o;14866:658::-;15005:6;15013;15021;15065:9;15056:7;15052:23;15095:3;15091:2;15087:12;15084:32;;;15112:1;15109;15102:12;15084:32;15152:9;15139:23;-1:-1:-1;;;;;15177:6:132;15174:30;15171:50;;;15217:1;15214;15207:12;15171:50;15240:69;15301:7;15292:6;15281:9;15277:22;15240:69;:::i;:::-;15230:79;-1:-1:-1;;15343:2:132;-1:-1:-1;;15325:16:132;;15321:25;15318:45;;;15359:1;15356;15349:12;15318:45;;15397:2;15386:9;15382:18;15372:28;;15450:2;15439:9;15435:18;15422:32;15463:31;15488:5;15463:31;:::i;:::-;15513:5;15503:15;;;14866:658;;;;;:::o;15529:615::-;15775:4;15817:3;15806:9;15802:19;15794:27;;15854:6;15848:13;15837:9;15830:32;-1:-1:-1;;;;;15922:4:132;15914:6;15910:17;15904:24;15900:49;15893:4;15882:9;15878:20;15871:79;15997:4;15989:6;15985:17;15979:24;16012:62;16068:4;16057:9;16053:20;16039:12;2835;;2823:25;;2897:4;2886:16;;;2880:23;2864:14;;2857:47;2761:149;16012:62;-1:-1:-1;2835:12:132;;16133:3;16118:19;;2823:25;2897:4;2886:16;;2880:23;2864:14;;;2857:47;16083:55;2761:149;16149:388;16217:6;16225;16278:2;16266:9;16257:7;16253:23;16249:32;16246:52;;;16294:1;16291;16284:12;16246:52;16333:9;16320:23;16352:31;16377:5;16352:31;:::i;:::-;16402:5;-1:-1:-1;16459:2:132;16444:18;;16431:32;16472:33;16431:32;16472:33;:::i;16542:236::-;16627:6;16680:2;16668:9;16659:7;16655:23;16651:32;16648:52;;;16696:1;16693;16686:12;16648:52;16719:53;16764:7;16753:9;16719:53;:::i;16783:380::-;16862:1;16858:12;;;;16905;;;16926:61;;16980:4;16972:6;16968:17;16958:27;;16926:61;17033:2;17025:6;17022:14;17002:18;16999:38;16996:161;;17079:10;17074:3;17070:20;17067:1;17060:31;17114:4;17111:1;17104:15;17142:4;17139:1;17132:15;17168:127;17229:10;17224:3;17220:20;17217:1;17210:31;17260:4;17257:1;17250:15;17284:4;17281:1;17274:15;17568:253;17640:2;17634:9;17682:4;17670:17;;-1:-1:-1;;;;;17702:34:132;;17738:22;;;17699:62;17696:88;;;17764:18;;:::i;:::-;17800:2;17793:22;17568:253;:::o;17826:257::-;17898:4;17892:11;;;17930:17;;-1:-1:-1;;;;;17962:34:132;;17998:22;;;17959:62;17956:88;;;18024:18;;:::i;18088:275::-;18159:2;18153:9;18224:2;18205:13;;-1:-1:-1;;18201:27:132;18189:40;;-1:-1:-1;;;;;18244:34:132;;18280:22;;;18241:62;18238:88;;;18306:18;;:::i;:::-;18342:2;18335:22;18088:275;;-1:-1:-1;18088:275:132:o;18368:186::-;18416:4;-1:-1:-1;;;;;18441:6:132;18438:30;18435:56;;;18471:18;;:::i;:::-;-1:-1:-1;18537:2:132;18516:15;-1:-1:-1;;18512:29:132;18543:4;18508:40;;18368:186::o;18559:2119::-;18753:9;-1:-1:-1;;;;;18828:2:132;18820:6;18817:14;18814:40;;;18834:18;;:::i;:::-;18880:6;18877:1;18873:14;18906:4;18930:28;18954:2;18950;18946:11;18930:28;:::i;:::-;18992:19;;;19062:14;;;;19027:12;;;;19099:14;19088:26;;19085:46;;;19127:1;19124;19117:12;19085:46;19151:5;19165:1480;19181:6;19176:3;19173:15;19165:1480;;;19267:3;19254:17;19303:2;19290:11;19287:19;19284:109;;;19347:1;19376:2;19372;19365:14;19284:109;19416:23;;19484:4;19463:14;19459:23;;;19455:34;19452:124;;;19530:1;19559:2;19555;19548:14;19452:124;19604:22;;:::i;:::-;19655:21;19673:2;19655:21;:::i;:::-;19646:7;19639:38;19715:30;19741:2;19737;19733:11;19715:30;:::i;:::-;19710:2;19701:7;19697:16;19690:56;19769:2;19819;19815;19811:11;19798:25;19850:2;19842:6;19839:14;19836:104;;;19894:1;19923:2;19919;19912:14;19836:104;19963:15;;;;;20020:14;20013:4;20005:13;;20001:34;19991:135;;20078:1;20108:3;20103;20096:16;19991:135;20163:2;20150:16;20192:49;20208:32;20236:3;20208:32;:::i;:::-;20192:49;:::i;:::-;20268:3;20261:5;20254:18;20314:14;20309:2;20303:3;20299:2;20295:12;20291:21;20288:41;20285:134;;;20371:1;20401:3;20396;20389:16;20285:134;20474:3;20469:2;20465;20461:11;20456:2;20449:5;20445:14;20432:46;20524:1;20502:15;;;20498:24;;20491:35;;;;20546:16;;;20539:31;20583:20;;-1:-1:-1;20623:12:132;;;;19198;;19165:1480;;;-1:-1:-1;20667:5:132;18559:2119;-1:-1:-1;;;;;;;18559:2119:132:o;20683:331::-;20788:9;20799;20841:8;20829:10;20826:24;20823:44;;;20863:1;20860;20853:12;20823:44;20892:6;20882:8;20879:20;20876:40;;;20912:1;20909;20902:12;20876:40;-1:-1:-1;;20938:23:132;;;20983:25;;;;;-1:-1:-1;20683:331:132:o;21019:476::-;21210:3;21248:6;21242:13;21264:66;21323:6;21318:3;21311:4;21303:6;21299:17;21264:66;:::i;:::-;21352:16;;21405:6;21397;21352:16;21377:35;21469:1;21431:18;;21458:13;;;-1:-1:-1;21431:18:132;;21019:476;-1:-1:-1;;;21019:476:132:o;21500:266::-;21588:6;21583:3;21576:19;21640:6;21633:5;21626:4;21621:3;21617:14;21604:43;-1:-1:-1;21692:1:132;21667:16;;;21685:4;21663:27;;;21656:38;;;;21748:2;21727:15;;;-1:-1:-1;;21723:29:132;21714:39;;;21710:50;;21500:266::o;21771:244::-;21928:2;21917:9;21910:21;21891:4;21948:61;22005:2;21994:9;21990:18;21982:6;21974;21948:61;:::i;22020:127::-;22081:10;22076:3;22072:20;22069:1;22062:31;22112:4;22109:1;22102:15;22136:4;22133:1;22126:15;22152:332;22252:4;22310:11;22297:25;22404:3;22400:8;22389;22373:14;22369:29;22365:44;22345:18;22341:69;22331:97;;22424:1;22421;22414:12;22331:97;22445:33;;;;;22152:332;-1:-1:-1;;22152:332:132:o;22489:521::-;22566:4;22572:6;22632:11;22619:25;22726:2;22722:7;22711:8;22695:14;22691:29;22687:43;22667:18;22663:68;22653:96;;22745:1;22742;22735:12;22653:96;22772:33;;22824:20;;;-1:-1:-1;;;;;;22856:30:132;;22853:50;;;22899:1;22896;22889:12;22853:50;22932:4;22920:17;;-1:-1:-1;22963:14:132;22959:27;;;22949:38;;22946:58;;;23000:1;22997;22990:12;23015:992;23393:10;23366:25;23384:6;23366:25;:::i;:::-;23362:42;23351:9;23344:61;23468:4;23460:6;23456:17;23443:31;23436:4;23425:9;23421:20;23414:61;23325:4;23522;23514:6;23510:17;23497:31;23537:30;23561:5;23537:30;:::i;:::-;-1:-1:-1;;;;;23609:5:132;23605:30;23598:4;23587:9;23583:20;23576:60;;23672:6;23667:2;23656:9;23652:18;23645:34;23716:3;23710;23699:9;23695:19;23688:32;23743:62;23800:3;23789:9;23785:19;23777:6;23769;23743:62;:::i;:::-;-1:-1:-1;;;;;23842:32:132;;23862:3;23821:19;;23814:61;23912:22;;;23906:3;23891:19;;23884:51;23952:49;23916:6;23986;23978;23952:49;:::i;:::-;23944:57;23015:992;-1:-1:-1;;;;;;;;;;23015:992:132:o;24012:647::-;24091:6;24144:2;24132:9;24123:7;24119:23;24115:32;24112:52;;;24160:1;24157;24150:12;24112:52;24193:9;24187:16;-1:-1:-1;;;;;24218:6:132;24215:30;24212:50;;;24258:1;24255;24248:12;24212:50;24281:22;;24334:4;24326:13;;24322:27;-1:-1:-1;24312:55:132;;24363:1;24360;24353:12;24312:55;24392:2;24386:9;24417:48;24433:31;24461:2;24433:31;:::i;24417:48::-;24488:2;24481:5;24474:17;24528:7;24523:2;24518;24514;24510:11;24506:20;24503:33;24500:53;;;24549:1;24546;24539:12;24500:53;24562:67;24626:2;24621;24614:5;24610:14;24605:2;24601;24597:11;24562:67;:::i;24664:245::-;24731:6;24784:2;24772:9;24763:7;24759:23;24755:32;24752:52;;;24800:1;24797;24790:12;24752:52;24832:9;24826:16;24851:28;24873:5;24851:28;:::i;24914:127::-;24975:10;24970:3;24966:20;24963:1;24956:31;25006:4;25003:1;24996:15;25030:4;25027:1;25020:15;25046:217;25086:1;25112;25102:132;;25156:10;25151:3;25147:20;25144:1;25137:31;25191:4;25188:1;25181:15;25219:4;25216:1;25209:15;25102:132;-1:-1:-1;25248:9:132;;25046:217::o;25465:478::-;25732:1;25728;25723:3;25719:11;25715:19;25707:6;25703:32;25692:9;25685:51;25772:6;25767:2;25756:9;25752:18;25745:34;25827:6;25819;25815:19;25810:2;25799:9;25795:18;25788:47;25871:3;25866:2;25855:9;25851:18;25844:31;25666:4;25892:45;25932:3;25921:9;25917:19;25909:6;25892:45;:::i;26566:889::-;26789:2;26778:9;26771:21;26847:10;26838:6;26832:13;26828:30;26823:2;26812:9;26808:18;26801:58;26913:4;26905:6;26901:17;26895:24;26890:2;26879:9;26875:18;26868:52;26752:4;26967:2;26959:6;26955:15;26949:22;27008:4;27002:3;26991:9;26987:19;26980:33;27036:51;27082:3;27071:9;27067:19;27053:12;27036:51;:::i;:::-;27022:65;;27136:2;27128:6;27124:15;27118:22;27210:2;27206:7;27194:9;27186:6;27182:22;27178:36;27171:4;27160:9;27156:20;27149:66;27238:40;27271:6;27255:14;27238:40;:::i;:::-;27347:3;27335:16;;;;27329:23;27322:31;27315:39;27309:3;27294:19;;27287:68;-1:-1:-1;;;;;;;;27416:32:132;;;;27409:4;27394:20;;;27387:62;27224:54;26566:889::o;27460:284::-;27530:5;27578:4;27566:9;27561:3;27557:19;27553:30;27550:50;;;27596:1;27593;27586:12;27550:50;27618:22;;:::i;:::-;27609:31;;27669:9;27663:16;27656:5;27649:31;27733:2;27722:9;27718:18;27712:25;27707:2;27700:5;27696:14;27689:49;27460:284;;;;:::o;27749:259::-;27849:6;27902:2;27890:9;27881:7;27877:23;27873:32;27870:52;;;27918:1;27915;27908:12;27870:52;27941:61;27994:7;27983:9;27941:61;:::i;28013:168::-;28086:9;;;28117;;28134:15;;;28128:22;;28114:37;28104:71;;28155:18;;:::i;28311:542::-;28412:2;28407:3;28404:11;28401:446;;;28448:1;28472:5;28469:1;28462:16;28516:4;28513:1;28503:18;28586:2;28574:10;28570:19;28567:1;28563:27;28557:4;28553:38;28622:4;28610:10;28607:20;28604:47;;;-1:-1:-1;28645:4:132;28604:47;28700:2;28695:3;28691:12;28688:1;28684:20;28678:4;28674:31;28664:41;;28755:82;28773:2;28766:5;28763:13;28755:82;;;28818:17;;;28799:1;28788:13;28755:82;;;28759:3;;;28311:542;;;:::o;29029:1341::-;29153:3;29147:10;-1:-1:-1;;;;;29172:6:132;29169:30;29166:56;;;29202:18;;:::i;:::-;29231:96;29320:6;29280:38;29312:4;29306:11;29280:38;:::i;:::-;29274:4;29231:96;:::i;:::-;29382:4;;29439:2;29428:14;;29456:1;29451:662;;;;30157:1;30174:6;30171:89;;;-1:-1:-1;30226:19:132;;;30220:26;30171:89;-1:-1:-1;;28986:1:132;28982:11;;;28978:24;28974:29;28964:40;29010:1;29006:11;;;28961:57;30273:81;;29421:943;;29451:662;28258:1;28251:14;;;28295:4;28282:18;;-1:-1:-1;;29487:20:132;;;29604:236;29618:7;29615:1;29612:14;29604:236;;;29707:19;;;29701:26;29686:42;;29799:27;;;;29767:1;29755:14;;;;29634:19;;29604:236;;;29608:3;29868:6;29859:7;29856:19;29853:201;;;29929:19;;;29923:26;-1:-1:-1;;30012:1:132;30008:14;;;30024:3;30004:24;30000:37;29996:42;29981:58;29966:74;;29853:201;-1:-1:-1;;;;;30100:1:132;30084:14;;;30080:22;30067:36;;-1:-1:-1;29029:1341:132:o;30375:1165::-;30593:4;30622:2;30662;30651:9;30647:18;30692:2;30681:9;30674:21;30715:6;30750;30744:13;30781:6;30773;30766:22;30807:2;30797:12;;30840:2;30829:9;30825:18;30818:25;;30902:2;30892:6;30889:1;30885:14;30874:9;30870:30;30866:39;30940:2;30932:6;30928:15;30961:1;30971:540;30985:6;30982:1;30979:13;30971:540;;;31050:22;;;-1:-1:-1;;31046:36:132;31034:49;;31106:13;;31178:9;;31189:10;31174:26;31159:42;;31248:11;;;31242:18;31262:6;31238:31;31221:15;;;31214:56;31309:11;;31303:18;31142:4;31341:15;;;31334:27;;;31384:47;31415:15;;;31303:18;31384:47;:::i;:::-;31489:12;;;;31374:57;-1:-1:-1;;;31454:15:132;;;;31007:1;31000:9;30971:540;;;-1:-1:-1;31528:6:132;;30375:1165;-1:-1:-1;;;;;;;;30375:1165:132:o;31545:348::-;31634:6;31687:2;31675:9;31666:7;31662:23;31658:32;31655:52;;;31703:1;31700;31693:12;31655:52;31729:22;;:::i;:::-;31787:9;31774:23;31767:5;31760:38;31858:2;31847:9;31843:18;31830:32;31825:2;31818:5;31814:14;31807:56;31882:5;31872:15;;;31545:348;;;;:::o;32532:532::-;32773:6;32768:3;32761:19;-1:-1:-1;;;;;32836:3:132;32832:28;32823:6;32818:3;32814:16;32810:51;32805:2;32800:3;32796:12;32789:73;32892:6;32887:2;32882:3;32878:12;32871:28;32743:3;32928:6;32922:13;32944:73;33010:6;33005:2;33000:3;32996:12;32991:2;32983:6;32979:15;32944:73;:::i;:::-;33037:16;;;;33055:2;33033:25;;32532:532;-1:-1:-1;;;;;32532:532:132:o;33069:255::-;33189:19;;33228:2;33220:11;;33217:101;;;-1:-1:-1;;33289:2:132;33285:12;;;33282:1;33278:20;33274:33;33263:45;33069:255;;;;:::o;33329:331::-;-1:-1:-1;;;;;;33449:19:132;;33533:11;;;;33564:1;33556:10;;33553:101;;;33641:2;33635;33628:3;33625:1;33621:11;33618:1;33614:19;33610:28;33606:2;33602:37;33598:46;33589:55;;33553:101;;;33329:331;;;;:::o;33665:568::-;-1:-1:-1;;;;;33930:3:132;33926:28;33917:6;33912:3;33908:16;33904:51;33899:3;33892:64;34016:10;34011:3;34007:20;33998:6;33993:3;33989:16;33985:43;33981:1;33976:3;33972:11;33965:64;34059:6;34054:2;34049:3;34045:12;34038:28;33874:3;34095:6;34089:13;34111:75;34179:6;34174:2;34169:3;34165:12;34158:4;34150:6;34146:17;34111:75;:::i;:::-;34206:16;;;;34224:2;34202:25;;33665:568;-1:-1:-1;;;;;33665:568:132:o;34238:125::-;34303:9;;;34324:10;;;34321:36;;;34337:18;;:::i;34368:525::-;34472:6;34525:3;34513:9;34504:7;34500:23;34496:33;34493:53;;;34542:1;34539;34532:12;34493:53;34568:22;;:::i;:::-;34619:9;34613:16;34606:5;34599:31;34675:2;34664:9;34660:18;34654:25;34688:32;34712:7;34688:32;:::i;:::-;34747:2;34736:14;;34729:31;34792:70;34854:7;34849:2;34834:18;;34792:70;:::i;:::-;34787:2;34776:14;;34769:94;34780:5;34368:525;-1:-1:-1;;;34368:525:132:o;34898:251::-;34968:6;35021:2;35009:9;35000:7;34996:23;34992:32;34989:52;;;35037:1;35034;35027:12;34989:52;35069:9;35063:16;35088:31;35113:5;35088:31;:::i", - "linkReferences": {}, - "immutableReferences": { - "10357": [ - { "start": 1584, "length": 32 }, - { "start": 2907, "length": 32 }, - { "start": 4570, "length": 32 }, - { "start": 5550, "length": 32 }, - { "start": 6133, "length": 32 }, - { "start": 8136, "length": 32 }, - { "start": 8396, "length": 32 }, - { "start": 8579, "length": 32 } - ], - "12163": [ - { "start": 1896, "length": 32 }, - { "start": 5304, "length": 32 }, - { "start": 6555, "length": 32 }, - { "start": 6912, "length": 32 } - ] - } - }, - "methodIdentifiers": { - "SEND()": "1f5e1334", - "SEND_AND_CALL()": "134d4f25", - "allowInitializePath((uint32,bytes32,uint64))": "ff7bd03d", - "allowance(address,address)": "dd62ed3e", - "approvalRequired()": "9f68b964", - "approve(address,uint256)": "095ea7b3", - "balanceOf(address)": "70a08231", - "buildMsgAndOptions((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),uint256)": "056d62de", - "combineOptions(uint32,uint16,bytes)": "bc70b354", - "credit(address,uint256,uint32)": "4dba701b", - "debit(uint256,uint256,uint32)": "54f52414", - "debitView(uint256,uint256,uint32)": "f0163023", - "decimalConversionRate()": "963efcaa", - "decimals()": "313ce567", - "endpoint()": "5e280f11", - "enforcedOptions(uint32,uint16)": "5535d461", - "isComposeMsgSender((uint32,bytes32,uint64),bytes,address)": "82413eac", - "isPeer(uint32,bytes32)": "5a0dfe4d", - "lzReceive((uint32,bytes32,uint64),bytes32,bytes,address,bytes)": "13137d65", - "lzReceiveAndRevert(((uint32,bytes32,uint64),uint32,address,bytes32,uint256,address,bytes,bytes)[])": "bd815db0", - "lzReceiveSimulate((uint32,bytes32,uint64),bytes32,bytes,address,bytes)": "d045a0dc", - "mint(address,uint256)": "40c10f19", - "msgInspector()": "111ecdad", - "name()": "06fdde03", - "nextNonce(uint32,bytes32)": "7d25a05e", - "oApp()": "52ae2879", - "oAppVersion()": "17442b70", - "oftVersion()": "156a0d0f", - "owner()": "8da5cb5b", - "peers(uint32)": "bb0b6a53", - "preCrime()": "b731ea0a", - "quoteOFT((uint32,bytes32,uint256,uint256,bytes,bytes,bytes))": "0d35b415", - "quoteSend((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),bool)": "3b6f743b", - "removeDust(uint256)": "c0779988", - "renounceOwnership()": "715018a6", - "send((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),(uint256,uint256),address)": "c7c7f5b3", - "setDelegate(address)": "ca5eb5e1", - "setEnforcedOptions((uint32,uint16,bytes)[])": "b98bd070", - "setMsgInspector(address)": "6fc1b31e", - "setPeer(uint32,bytes32)": "3400288b", - "setPreCrime(address)": "d4243885", - "sharedDecimals()": "857749b0", - "symbol()": "95d89b41", - "toLD(uint64)": "b3a5abeb", - "toSD(uint256)": "0e78842c", - "token()": "fc0c546a", - "totalSupply()": "18160ddd", - "transfer(address,uint256)": "a9059cbb", - "transferFrom(address,address,uint256)": "23b872dd", - "transferOwnership(address)": "f2fde38b" - }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"_lzEndpoint\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_delegate\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"allowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSpender\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidDelegate\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidEndpointCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidLocalDecimals\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"options\",\"type\":\"bytes\"}],\"name\":\"InvalidOptions\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LzTokenUnavailable\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"}],\"name\":\"NoPeer\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"msgValue\",\"type\":\"uint256\"}],\"name\":\"NotEnoughNative\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"OnlyEndpoint\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"}],\"name\":\"OnlyPeer\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlySelf\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"name\":\"SimulationResult\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountLD\",\"type\":\"uint256\"}],\"name\":\"SlippageExceeded\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"msgType\",\"type\":\"uint16\"},{\"internalType\":\"bytes\",\"name\":\"options\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"struct EnforcedOptionParam[]\",\"name\":\"_enforcedOptions\",\"type\":\"tuple[]\"}],\"name\":\"EnforcedOptionSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"inspector\",\"type\":\"address\"}],\"name\":\"MsgInspectorSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"toAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountReceivedLD\",\"type\":\"uint256\"}],\"name\":\"OFTReceived\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"fromAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountSentLD\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountReceivedLD\",\"type\":\"uint256\"}],\"name\":\"OFTSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"peer\",\"type\":\"bytes32\"}],\"name\":\"PeerSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"preCrimeAddress\",\"type\":\"address\"}],\"name\":\"PreCrimeSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"SEND\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SEND_AND_CALL\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"origin\",\"type\":\"tuple\"}],\"name\":\"allowInitializePath\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"approvalRequired\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"to\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"amountLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountLD\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"extraOptions\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"composeMsg\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"oftCmd\",\"type\":\"bytes\"}],\"internalType\":\"struct SendParam\",\"name\":\"_sendParam\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"_amountToCreditLD\",\"type\":\"uint256\"}],\"name\":\"buildMsgAndOptions\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"options\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"_msgType\",\"type\":\"uint16\"},{\"internalType\":\"bytes\",\"name\":\"_extraOptions\",\"type\":\"bytes\"}],\"name\":\"combineOptions\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amountToCreditLD\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"_srcEid\",\"type\":\"uint32\"}],\"name\":\"credit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountReceivedLD\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_amountToSendLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_minAmountToCreditLD\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"_dstEid\",\"type\":\"uint32\"}],\"name\":\"debit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountDebitedLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountToCreditLD\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_amountToSendLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_minAmountToCreditLD\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"_dstEid\",\"type\":\"uint32\"}],\"name\":\"debitView\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountDebitedLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountToCreditLD\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimalConversionRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"endpoint\",\"outputs\":[{\"internalType\":\"contract ILayerZeroEndpointV2\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"msgType\",\"type\":\"uint16\"}],\"name\":\"enforcedOptions\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"enforcedOption\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"}],\"name\":\"isComposeMsgSender\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_peer\",\"type\":\"bytes32\"}],\"name\":\"isPeer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"_origin\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"_guid\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"_executor\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"lzReceive\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"origin\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"executor\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"internalType\":\"struct InboundPacket[]\",\"name\":\"_packets\",\"type\":\"tuple[]\"}],\"name\":\"lzReceiveAndRevert\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"struct Origin\",\"name\":\"_origin\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"_guid\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"_executor\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"lzReceiveSimulate\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"msgInspector\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"nextNonce\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"oApp\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"oAppVersion\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"senderVersion\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"receiverVersion\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"oftVersion\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"},{\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"}],\"name\":\"peers\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"peer\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"preCrime\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"to\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"amountLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountLD\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"extraOptions\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"composeMsg\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"oftCmd\",\"type\":\"bytes\"}],\"internalType\":\"struct SendParam\",\"name\":\"_sendParam\",\"type\":\"tuple\"}],\"name\":\"quoteOFT\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"minAmountLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountLD\",\"type\":\"uint256\"}],\"internalType\":\"struct OFTLimit\",\"name\":\"oftLimit\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"int256\",\"name\":\"feeAmountLD\",\"type\":\"int256\"},{\"internalType\":\"string\",\"name\":\"description\",\"type\":\"string\"}],\"internalType\":\"struct OFTFeeDetail[]\",\"name\":\"oftFeeDetails\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"amountSentLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountReceivedLD\",\"type\":\"uint256\"}],\"internalType\":\"struct OFTReceipt\",\"name\":\"oftReceipt\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"to\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"amountLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountLD\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"extraOptions\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"composeMsg\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"oftCmd\",\"type\":\"bytes\"}],\"internalType\":\"struct SendParam\",\"name\":\"_sendParam\",\"type\":\"tuple\"},{\"internalType\":\"bool\",\"name\":\"_payInLzToken\",\"type\":\"bool\"}],\"name\":\"quoteSend\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nativeFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lzTokenFee\",\"type\":\"uint256\"}],\"internalType\":\"struct MessagingFee\",\"name\":\"msgFee\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_amountLD\",\"type\":\"uint256\"}],\"name\":\"removeDust\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountLD\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"to\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"amountLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountLD\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"extraOptions\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"composeMsg\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"oftCmd\",\"type\":\"bytes\"}],\"internalType\":\"struct SendParam\",\"name\":\"_sendParam\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nativeFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lzTokenFee\",\"type\":\"uint256\"}],\"internalType\":\"struct MessagingFee\",\"name\":\"_fee\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"_refundAddress\",\"type\":\"address\"}],\"name\":\"send\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nativeFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lzTokenFee\",\"type\":\"uint256\"}],\"internalType\":\"struct MessagingFee\",\"name\":\"fee\",\"type\":\"tuple\"}],\"internalType\":\"struct MessagingReceipt\",\"name\":\"msgReceipt\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"amountSentLD\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountReceivedLD\",\"type\":\"uint256\"}],\"internalType\":\"struct OFTReceipt\",\"name\":\"oftReceipt\",\"type\":\"tuple\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_delegate\",\"type\":\"address\"}],\"name\":\"setDelegate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"msgType\",\"type\":\"uint16\"},{\"internalType\":\"bytes\",\"name\":\"options\",\"type\":\"bytes\"}],\"internalType\":\"struct EnforcedOptionParam[]\",\"name\":\"_enforcedOptions\",\"type\":\"tuple[]\"}],\"name\":\"setEnforcedOptions\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_msgInspector\",\"type\":\"address\"}],\"name\":\"setMsgInspector\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_peer\",\"type\":\"bytes32\"}],\"name\":\"setPeer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_preCrime\",\"type\":\"address\"}],\"name\":\"setPreCrime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sharedDecimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_amountSD\",\"type\":\"uint64\"}],\"name\":\"toLD\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountLD\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_amountLD\",\"type\":\"uint256\"}],\"name\":\"toSD\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"amountSD\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"token\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"ERC20InsufficientAllowance(address,uint256,uint256)\":[{\"details\":\"Indicates a failure with the `spender`\\u2019s `allowance`. Used in transfers.\",\"params\":{\"allowance\":\"Amount of tokens a `spender` is allowed to operate with.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC20InsufficientBalance(address,uint256,uint256)\":[{\"details\":\"Indicates an error related to the current `balance` of a `sender`. Used in transfers.\",\"params\":{\"balance\":\"Current balance for the interacting account.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC20InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC20InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidSpender(address)\":[{\"details\":\"Indicates a failure with the `spender` to be approved. Used in approvals.\",\"params\":{\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}],\"SafeERC20FailedOperation(address)\":[{\"details\":\"An operation with an ERC-20 token failed.\"}]},\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"PreCrimeSet(address)\":{\"details\":\"Emitted when the preCrime contract address is set.\",\"params\":{\"preCrimeAddress\":\"The address of the preCrime contract.\"}},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowInitializePath((uint32,bytes32,uint64))\":{\"details\":\"This indicates to the endpoint that the OApp has enabled msgs for this particular path to be received.This defaults to assuming if a peer has been set, its initialized. Can be overridden by the OApp if there is other logic to determine this.\",\"params\":{\"origin\":\"The origin information containing the source endpoint and sender address.\"},\"returns\":{\"_0\":\"Whether the path has been initialized.\"}},\"allowance(address,address)\":{\"details\":\"See {IERC20-allowance}.\"},\"approvalRequired()\":{\"details\":\"In the case of OFT where the contract IS the token, approval is NOT required.\",\"returns\":{\"_0\":\"requiresApproval Needs approval of the underlying token implementation.\"}},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. NOTE: If `value` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"See {IERC20-balanceOf}.\"},\"combineOptions(uint32,uint16,bytes)\":{\"details\":\"If there is an enforced lzReceive option: - {gasLimit: 200k, msg.value: 1 ether} AND a caller supplies a lzReceive option: {gasLimit: 100k, msg.value: 0.5 ether} - The resulting options will be {gasLimit: 300k, msg.value: 1.5 ether} when the message is executed on the remote lzReceive() function.This presence of duplicated options is handled off-chain in the verifier/executor.\",\"params\":{\"_eid\":\"The endpoint ID.\",\"_extraOptions\":\"Additional options passed by the caller.\",\"_msgType\":\"The OAPP message type.\"},\"returns\":{\"_0\":\"options The combination of caller specified options AND enforced options.\"}},\"decimals()\":{\"details\":\"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the default value returned by this function, unless it's overridden. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.\"},\"isComposeMsgSender((uint32,bytes32,uint64),bytes,address)\":{\"details\":\"_origin The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message._message The lzReceive payload.Applications can optionally choose to implement separate composeMsg senders that are NOT the bridging layer.The default sender IS the OAppReceiver implementer.\",\"params\":{\"_sender\":\"The sender address.\"},\"returns\":{\"_0\":\"isSender Is a valid sender.\"}},\"isPeer(uint32,bytes32)\":{\"details\":\"Check if the peer is considered 'trusted' by the OApp.Enables OAppPreCrimeSimulator to check whether a potential Inbound Packet is from a trusted source.\",\"params\":{\"_eid\":\"The endpoint ID to check.\",\"_peer\":\"The peer to check.\"},\"returns\":{\"_0\":\"Whether the peer passed is considered 'trusted' by the OApp.\"}},\"lzReceive((uint32,bytes32,uint64),bytes32,bytes,address,bytes)\":{\"details\":\"Entry point for receiving messages or packets from the endpoint.Entry point for receiving msg/packet from the LayerZero endpoint.\",\"params\":{\"_executor\":\"The address of the executor for the received message.\",\"_extraData\":\"Additional arbitrary data provided by the corresponding executor.\",\"_guid\":\"The unique identifier for the received LayerZero message.\",\"_message\":\"The payload of the received message.\",\"_origin\":\"The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message.\"}},\"lzReceiveAndRevert(((uint32,bytes32,uint64),uint32,address,bytes32,uint256,address,bytes,bytes)[])\":{\"details\":\"Interface for pre-crime simulations. Always reverts at the end with the simulation results.WARNING: MUST revert at the end with the simulation results.Gives the preCrime implementation the ability to mock sending packets to the lzReceive function, WITHOUT actually executing them.\",\"params\":{\"_packets\":\"An array of InboundPacket objects representing received packets to be delivered.\"}},\"lzReceiveSimulate((uint32,bytes32,uint64),bytes32,bytes,address,bytes)\":{\"details\":\"Is effectively an internal function because msg.sender must be address(this). Allows resetting the call stack for 'internal' calls.\",\"params\":{\"_executor\":\"The executor address for the packet.\",\"_extraData\":\"Additional data for the packet.\",\"_guid\":\"The unique identifier of the packet.\",\"_message\":\"The message payload of the packet.\",\"_origin\":\"The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message.\"}},\"name()\":{\"details\":\"Returns the name of the token.\"},\"nextNonce(uint32,bytes32)\":{\"details\":\"_srcEid The source endpoint ID._sender The sender address.The path nonce starts from 1. If 0 is returned it means that there is NO nonce ordered enforcement.Is required by the off-chain executor to determine the OApp expects msg execution is ordered.This is also enforced by the OApp.By default this is NOT enabled. ie. nextNonce is hardcoded to return 0.\",\"returns\":{\"nonce\":\"The next nonce.\"}},\"oApp()\":{\"details\":\"Retrieves the address of the OApp contract.The simulator contract is the base contract for the OApp by default.If the simulator is a separate contract, override this function.\",\"returns\":{\"_0\":\"The address of the OApp contract.\"}},\"oAppVersion()\":{\"returns\":{\"receiverVersion\":\"The version of the OAppReceiver.sol implementation.\",\"senderVersion\":\"The version of the OAppSender.sol implementation.\"}},\"oftVersion()\":{\"details\":\"interfaceId: This specific interface ID is '0x02e49c2c'.version: Indicates a cross-chain compatible msg encoding with other OFTs.If a new feature is added to the OFT cross-chain msg encoding, the version will be incremented. ie. localOFT version(x,1) CAN send messages to remoteOFT version(x,1)\",\"returns\":{\"interfaceId\":\"The interface ID.\",\"version\":\"The version.\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"quoteOFT((uint32,bytes32,uint256,uint256,bytes,bytes,bytes))\":{\"params\":{\"_sendParam\":\"The parameters for the send operation.\"},\"returns\":{\"oftFeeDetails\":\"The details of OFT fees.\",\"oftLimit\":\"The OFT limit information.\",\"oftReceipt\":\"The OFT receipt information.\"}},\"quoteSend((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),bool)\":{\"details\":\"MessagingFee: LayerZero msg fee - nativeFee: The native fee. - lzTokenFee: The lzToken fee.\",\"params\":{\"_payInLzToken\":\"Flag indicating whether the caller is paying in the LZ token.\",\"_sendParam\":\"The parameters for the send() operation.\"},\"returns\":{\"msgFee\":\"The calculated LayerZero messaging fee from the send() operation.\"}},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"send((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),(uint256,uint256),address)\":{\"details\":\"Executes the send operation.MessagingReceipt: LayerZero msg receipt - guid: The unique identifier for the sent message. - nonce: The nonce of the sent message. - fee: The LayerZero fee incurred for the message.\",\"params\":{\"_fee\":\"The calculated fee for the send() operation. - nativeFee: The native fee. - lzTokenFee: The lzToken fee.\",\"_refundAddress\":\"The address to receive any excess funds.\",\"_sendParam\":\"The parameters for the send operation.\"},\"returns\":{\"msgReceipt\":\"The receipt for the send operation.\",\"oftReceipt\":\"The OFT receipt information.\"}},\"setDelegate(address)\":{\"details\":\"Only the owner/admin of the OApp can call this function.Provides the ability for a delegate to set configs, on behalf of the OApp, directly on the Endpoint contract.\",\"params\":{\"_delegate\":\"The address of the delegate to be set.\"}},\"setEnforcedOptions((uint32,uint16,bytes)[])\":{\"details\":\"Sets the enforced options for specific endpoint and message type combinations.Only the owner/admin of the OApp can call this function.Provides a way for the OApp to enforce things like paying for PreCrime, AND/OR minimum dst lzReceive gas amounts etc.These enforced options can vary as the potential options/execution on the remote may differ as per the msgType. eg. Amount of lzReceive() gas necessary to deliver a lzCompose() message adds overhead you dont want to pay if you are only making a standard LayerZero message ie. lzReceive() WITHOUT sendCompose().\",\"params\":{\"_enforcedOptions\":\"An array of EnforcedOptionParam structures specifying enforced options.\"}},\"setMsgInspector(address)\":{\"details\":\"Sets the message inspector address for the OFT.This is an optional contract that can be used to inspect both 'message' and 'options'.Set it to address(0) to disable it, or set it to a contract address to enable it.\",\"params\":{\"_msgInspector\":\"The address of the message inspector.\"}},\"setPeer(uint32,bytes32)\":{\"details\":\"Only the owner/admin of the OApp can call this function.Indicates that the peer is trusted to send LayerZero messages to this OApp.Set this to bytes32(0) to remove the peer address.Peer is a bytes32 to accommodate non-evm chains.\",\"params\":{\"_eid\":\"The endpoint ID.\",\"_peer\":\"The address of the peer to be associated with the corresponding endpoint.\"}},\"setPreCrime(address)\":{\"details\":\"Sets the preCrime contract address.\",\"params\":{\"_preCrime\":\"The address of the preCrime contract.\"}},\"sharedDecimals()\":{\"details\":\"Retrieves the shared decimals of the OFT.Sets an implicit cap on the amount of tokens, over uint64.max() will need some sort of outbound cap / totalSupply cap Lowest common decimal denominator between chains. Defaults to 6 decimal places to provide up to 18,446,744,073,709.551615 units (max uint64). For tokens exceeding this totalSupply(), they will need to override the sharedDecimals function with something smaller. ie. 4 sharedDecimals would be 1,844,674,407,370,955.1615\",\"returns\":{\"_0\":\"The shared decimals of the OFT.\"}},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"token()\":{\"details\":\"Retrieves the address of the underlying ERC20 implementation.In the case of OFT, address(this) and erc20 are the same contract.\",\"returns\":{\"_0\":\"The address of the OFT token.\"}},\"totalSupply()\":{\"details\":\"See {IERC20-totalSupply}.\"},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `value`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC20-transferFrom}. Skips emitting an {Approval} event indicating an allowance update. This is not required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve]. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `value`. - the caller must have allowance for ``from``'s tokens of at least `value`.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"allowInitializePath((uint32,bytes32,uint64))\":{\"notice\":\"Checks if the path initialization is allowed based on the provided origin.\"},\"approvalRequired()\":{\"notice\":\"Indicates whether the OFT contract requires approval of the 'token()' to send.\"},\"combineOptions(uint32,uint16,bytes)\":{\"notice\":\"Combines options for a given endpoint and message type.\"},\"endpoint()\":{\"notice\":\"Retrieves the LayerZero endpoint associated with the OApp.\"},\"isComposeMsgSender((uint32,bytes32,uint64),bytes,address)\":{\"notice\":\"Indicates whether an address is an approved composeMsg sender to the Endpoint.\"},\"nextNonce(uint32,bytes32)\":{\"notice\":\"Retrieves the next nonce for a given source endpoint and sender address.\"},\"oAppVersion()\":{\"notice\":\"Retrieves the OApp version information.\"},\"oftVersion()\":{\"notice\":\"Retrieves interfaceID and the version of the OFT.\"},\"peers(uint32)\":{\"notice\":\"Retrieves the peer (OApp) associated with a corresponding endpoint.\"},\"quoteOFT((uint32,bytes32,uint256,uint256,bytes,bytes,bytes))\":{\"notice\":\"Provides the fee breakdown and settings data for an OFT. Unused in the default implementation.\"},\"quoteSend((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),bool)\":{\"notice\":\"Provides a quote for the send() operation.\"},\"setDelegate(address)\":{\"notice\":\"Sets the delegate address for the OApp.\"},\"setPeer(uint32,bytes32)\":{\"notice\":\"Sets the peer address (OApp instance) for a corresponding endpoint.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"test/evm/mocks/OFTMock.sol\":\"OFTMock\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\":{\"keccak256\":\"0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bacc29fd3866af71e59cb0bdc1cf82c882a4a7f4e2652fd413c9f12649762083\",\"dweb:/ipfs/QmZh2toLnrQDWaNYhS5K4NoW7Vxd2GdZx9KA77vKEDLAqs\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol\":{\"keccak256\":\"0x9641abba8d53b08bb517d1b74801dd15ea7b84d77a6719085bd96c8ea94e3ca0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://77415ae0820859e0faf3fabdce683cce9fa03ea026ae0f6fe081ef1c9205f933\",\"dweb:/ipfs/QmXd7APqoCunQ2jYy73AHvi5gsZofLpm3SzM6FPo7zRPfL\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol\":{\"keccak256\":\"0x5cf5f24751b4e3ea1c9c5ded07cedfdfd62566b6daaffcc0144733859c9dba0c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cae7e35007a714f007ea08045ef7c0cfa6c91fd2425b5028b2d49abad357a5f0\",\"dweb:/ipfs/QmcDBs5tsiyB35b8cwzWQWNnpkawb3uuHRaqE77Hxm2tve\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol\":{\"keccak256\":\"0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d8ff6a8a89297fa127f86b54e0db3eba1d6a6eeb4f6398d3c84d569665ac8f1b\",\"dweb:/ipfs/QmVSwhw6xFDrLRAX4RXaCM47yBaBtac4wf36DYEq6KCTvT\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol\":{\"keccak256\":\"0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7e1b245d58221d16d8b5e0f01ef3e289a24a7df1ace3b94239e4d5b954ad5927\",\"dweb:/ipfs/Qmappsgp7PCY9rSSNE9Cdn4BTRX591WfCSEgq2HxhA3z6S\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol\":{\"keccak256\":\"0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b18b23a1643fc6636c4ad9d9023e2e6ca2d3c2a4a046482d4655bff09950598d\",\"dweb:/ipfs/Qma6G5SqiovwrMPfgqTrRngK1HWW373Wkf9c6YP2NhXpPk\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol\":{\"keccak256\":\"0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5173fc9143bea314b159ca5a9adb5626659ef763bc598e27de5fa46efe3291a6\",\"dweb:/ipfs/QmSLFeMFPmVeGxT4sxRPW28ictjAS22M8rLeYRu9TXkA6D\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol\":{\"keccak256\":\"0xf1c07bc61e7b1dce195ed12d50f87980fbf2d63cac1326fd28287f55fe0ba625\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://060f10ff7afc33c1c2f2b4b5ba29231fd3c943146488084d0e4ab99fce991d97\",\"dweb:/ipfs/QmaSsefAqqEqtf8FgFUmDYMwTsAty3X1pqDb6SiFvry6B3\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol\":{\"keccak256\":\"0x2ebbcaaab3554edcd41b581f1a72ac1806afbfb8047d0d47ff098f9af30d6deb\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://2d4b2cf5c3b16dc76c6767f285b57c0af917972327b2be3f7cba5825402f5fc1\",\"dweb:/ipfs/QmQQWiHE2jKEDbjzGutSoZwtApSXYfLqZt5CxEpFj8xyvT\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol\":{\"keccak256\":\"0xc84cf1bf785977fe1fbe7566eef902c2db68d0e163813ebe6c34921754802680\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://de686666fc16fa432d4208d85cec87dc952faf3e481b683b9adf4b4610db4b09\",\"dweb:/ipfs/QmdmQeopzmxqRzi9DNB4EJDrYUXFfD7fUhnGhSni4QejUW\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OApp.sol\":{\"keccak256\":\"0xac362c4c291fad2f1511a968424b2e78a5ad502d1c867bd31da04be742aca8c5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e1f8cf9f20a2b683a53c3883972aa0676af97a24c678f461fae08e1fb056df28\",\"dweb:/ipfs/QmPpKNqda3rgxDwnq3XiRTtT3NfWeqrCJT6LwmhYd2AoT2\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppCore.sol\":{\"keccak256\":\"0x13a9c2d1d2c1f086b8624f2e84c4a4702212daae36f701d92bb915b535cbe4cc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://606515dd9193551bd2c94ac8c304f3776fafcc70e544ebf441f334658b2fd5f0\",\"dweb:/ipfs/QmZ88ey7DdZqV5taAoebabvszX5kdPMSrQCAmTteVdDtcH\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppReceiver.sol\":{\"keccak256\":\"0x0174e9f1ec4cefe4b5adc26c392269c699b9ff75965364e5b7264426a462c70b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cd12bb4fe5802c53911b9a0081a2ea10639b1f99925d1e5c1b1421d1bdc17075\",\"dweb:/ipfs/QmZonarwbKiEwQ8qoASKur2bbMjusdy9pqK9RCR4P1YPtc\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppSender.sol\":{\"keccak256\":\"0x518cf4adca601923ed4baa6619846a253ea32b8d8775f8bc1faa3dfac7f67c20\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d42b471418efadcc3577ef3fa9f8f504e8bed7db90c3b0c862038d8b29529eb2\",\"dweb:/ipfs/QmZETDQiJN4U92fmLKo8T9ZbdDf7BNBUUvo9H7M7GqAyFU\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppCore.sol\":{\"keccak256\":\"0x40e49f2de74506e1da5dcaed53a39853f691647f4ceb0fccc8f49a68d3f47c58\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4a1deb2a6a3eb1fb83936c9578469142bff470295f403d7d07d955a76be3adbd\",\"dweb:/ipfs/QmS9bjSfBaE4YhQ1PCQ1TknbEPbNfRXzBK9E7SaPGyiZEv\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppMsgInspector.sol\":{\"keccak256\":\"0x339654e699043c400cad92de209aa23855ce10211c31cf4114042cc5224d3b7c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5222afde59bf086f67b39e0288ad36343f4f5ed683d250533f256a5db956f37e\",\"dweb:/ipfs/QmbEG9EMYsK3Y6Cz7QbNtkW4kHGzMuhp2y2seSoL8v1A5b\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppOptionsType3.sol\":{\"keccak256\":\"0x9fc08a51e9d7c9c710c4eb26f84fe77228305ad7da63fa486ff24ebf2f3bc461\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2e2eea8a93bb9fc3f629767118b362e9b4bda2443ff95eae21c6a894f3e334cc\",\"dweb:/ipfs/QmPRRNjAB4U19ke4gr3U7ZJGtdcVBxdXVBZ2BmB1riFkP7\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppReceiver.sol\":{\"keccak256\":\"0xd26135185e19b3732746d4a9e2923e896f28dec8664bab161faea2ee26fcdc3d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c236dfe386b508be33c3a1a74ae1d4fd64b8c77ae207767e9dbed0f2429518a2\",\"dweb:/ipfs/QmXVbZJjfryTRti98uN3BMh5qh4K7NuEs1RSCoBjRoYd4q\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/libs/OAppOptionsType3.sol\":{\"keccak256\":\"0x5275636cd47e660a2fdf6c7fe9d41ff3cc866b785cc8a9d88c1b8ca983509f01\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a59dd6e3cfcc332f45a13d44585eb228588c4b9d470cbb19852df5753a4571af\",\"dweb:/ipfs/QmQJF1QU3MKhvmw42eq61u9z3bzKJJKMsEdQVYyPyYgTVS\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/precrime/OAppPreCrimeSimulator.sol\":{\"keccak256\":\"0x205a0abfd8b3c9af2740769f251381b84999b8e9347f3cd50de3ef8290a17750\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d9778d7d5da941af2029410b6ac212f915ea1785573ae2865b0ed8f779fcca82\",\"dweb:/ipfs/QmNkVEkfecvgubgnMuaT5fEfSExd95vz8DQHhpZtMrVRjH\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IOAppPreCrimeSimulator.sol\":{\"keccak256\":\"0x5d24db150949ea8e6437178e65a942e8c8b7f332e5daf32750f56b23b35b5bb2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1b1dcea0267234654126f926a1b405743606d7b5e49185b621afb7bd94d18b9a\",\"dweb:/ipfs/QmZ9BXQmbWJcrhHKuBs4yhNtbCV5WUpUY3AXSX7rkWwX6y\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IPreCrime.sol\":{\"keccak256\":\"0xc8d869f27ef8ceb2e13fdf6a70682fd4dee3f90c4924eb8e125bc1e66cb6af84\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://66bf49d59c14832ea0ddddcd12d512d4f9bd0fd254a1368442587bf3e77fe73e\",\"dweb:/ipfs/QmYUAvsyuUPiSYjbL4zVo6ZtiRSLCUPDvCesqgdZWbSGDg\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/precrime/libs/Packet.sol\":{\"keccak256\":\"0xcb2fb1c5b2eb3731de78b479b9c2ab3bba326fe0b0b3a008590f18e881e457a6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f70724c61d226743c2bd8ba6c09758805e4339780978949ce5b333c106be4edc\",\"dweb:/ipfs/QmX5rV9K1N7RgTz9xtf8CDG8SrYiitGAzFh9ec2tbnEec4\"]},\"node_modules/@layerzerolabs/oft-evm/contracts/OFT.sol\":{\"keccak256\":\"0xdc3582e4a20e02a79050c17058a1f1f42a4335d1a70be06c0a52a3fb05d4c89a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://83c4bd42e68528246860a952a92a79e51e3a789dac79a0b62576ab2f609de9c7\",\"dweb:/ipfs/QmVj1x655j1cFTnPT8uBaM71TCSrhFVwPdoFkAkWhhadns\"]},\"node_modules/@layerzerolabs/oft-evm/contracts/OFTCore.sol\":{\"keccak256\":\"0x9ce49b83455df600b52538e42028c422a322643f7ffb4f2814c72c3b970ea7be\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2ebbf79612c3f6cd4e2754ba55519df6b89504ab5514e3517cbd286d87143997\",\"dweb:/ipfs/QmQZpSPhNhF4MESb2if2DbcjC75xfuoEzDGXmeJKYZtHZ5\"]},\"node_modules/@layerzerolabs/oft-evm/contracts/interfaces/IOFT.sol\":{\"keccak256\":\"0x7ba6bb62fba7ee83451cfb0e727ddeef0e96b4388bd4e9ff0fc6ce103e1101c8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cfbd447f2e8a730bd46a14c3c3e6a0b2bf7446145579603a9793ba5ac1dd38b4\",\"dweb:/ipfs/QmZ4nx4iGrFmBHvYFgki5TXFdCHz4Co38hgdgwpRaM7NLs\"]},\"node_modules/@layerzerolabs/oft-evm/contracts/libs/OFTComposeMsgCodec.sol\":{\"keccak256\":\"0xaae73d6eb8b9561c43f1802f3c416c00ccd35f172b711f9781ccdf1b25a40db5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7beda2d895ae9e15269dd261a492ce0a29b498e5bebf088ed6f2ae6a5185719e\",\"dweb:/ipfs/QmScog2tW1YVyEPLVcUVqGGc85ub46sA28nUKNzFEZcFdK\"]},\"node_modules/@layerzerolabs/oft-evm/contracts/libs/OFTMsgCodec.sol\":{\"keccak256\":\"0x5358948017669c03e157f871d8c38e988f9004dbd0801ad3119d2487f0d40b0b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c7d0f1bf32a80af9b99cd93fefa373dac5c27463351cc35f62b9c2439d5b9258\",\"dweb:/ipfs/Qmb81qoxzMwV3PkPANRvnXf4fJTsZ5sjJ8r2df9V2vhh6q\"]},\"node_modules/@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol\":{\"keccak256\":\"0x9b6b3e7803bc5f2f8cd7ad57db8ac1def61a9930a5a3107df4882e028a9605d7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://da62d6be1f5c6edf577f0cb45666a8aa9c2086a4bac87d95d65f02e2f4c36a4b\",\"dweb:/ipfs/QmNkpvBpoCMvX8JwAFNSc5XxJ2q5BXJpL5L1txb4QkqVFF\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC165.sol\":{\"keccak256\":\"0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://11fea9f8bc98949ac6709f0c1699db7430d2948137aa94d5a9e95a91f61a710a\",\"dweb:/ipfs/QmQdfRXxQjwP6yn3DVo1GHPpriKNcFghSPi94Z1oKEFUNS\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC20.sol\":{\"keccak256\":\"0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a2608291cb038b388d80b79a06b6118a42f7894ff67b7da10ec0dbbf5b2973ba\",\"dweb:/ipfs/QmWohqcBLbcxmA4eGPhZDXe5RYMMEEpFq22nfkaUMvTfw1\"]},\"node_modules/@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x880da465c203cec76b10d72dbd87c80f387df4102274f23eea1f9c9b0918792b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://399594cd8bb0143bc9e55e0f1d071d0d8c850a394fb7a319d50edd55d9ed822b\",\"dweb:/ipfs/QmbPZzgtT6LEm9CMqWfagQFwETbV1ztpECBB1DtQHrKiRz\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0xbf61ab2ae1d575a17ea58fbb99ca232baddcc4e0eeea180e84cbc74b0c348b31\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4e0968705bad99747a8e5288aa008678c2be2f471f919dce3925a3cc4f1dee09\",\"dweb:/ipfs/QmbAFnCQfo4tw6ssfQSjhA5LzwHWNNryXN8bX7ty8jiqqn\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db\",\"dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x70f2f713b13b7ce4610bcd0ac9fec0f3cc43693b043abcb8dc40a42a726eb330\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c13d13304ac79a83ab1c30168967d19e2203342ebbd6a9bbce4db7550522dcbf\",\"dweb:/ipfs/QmeN5jKMN2vw5bhacr6tkg78afbTTZUeaacNHqjWt4Ew1r\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0xca2ae13e0610f6a99238dd00b97bd786bc92732dae6d6b9d61f573ec51018310\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://75f8c71ce0c91c40dd5f249ace0b7d8270f8f1767231bcf71490f7157d6ba862\",\"dweb:/ipfs/QmYXgxeDyFHvz3JsXxLEYN6GNUR44ThHeFj5XkpkgMoG4w\"]},\"node_modules/@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0x9d8da059267bac779a2dbbb9a26c2acf00ca83085e105d62d5d4ef96054a47f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c78e2aa4313323cecd1ef12a8d6265b96beee1a199923abf55d9a2a9e291ad23\",\"dweb:/ipfs/QmUTs2KStXucZezzFo3EYeqYu47utu56qrF7jj1Gue65vb\"]},\"node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"node_modules/@openzeppelin/contracts/utils/Errors.sol\":{\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf\",\"dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB\"]},\"node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]},\"test/evm/mocks/OFTMock.sol\":{\"keccak256\":\"0xff3044b693ecca8da9ac6604ac2c4103980531ff3a04f35ffde5f80671d1a340\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://705441e8b86f606e1553d6f77483c3cddfc389a26136d48d1b3869f02575d703\",\"dweb:/ipfs/QmXLaXZh2DCGpsMymYb1kBQBbG3mTuDApDiNGUk2yHD219\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { - "inputs": [ - { "internalType": "string", "name": "_name", "type": "string" }, - { "internalType": "string", "name": "_symbol", "type": "string" }, - { - "internalType": "address", - "name": "_lzEndpoint", - "type": "address" - }, - { - "internalType": "address", - "name": "_delegate", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [ - { "internalType": "address", "name": "spender", "type": "address" }, - { - "internalType": "uint256", - "name": "allowance", - "type": "uint256" - }, - { "internalType": "uint256", "name": "needed", "type": "uint256" } - ], - "type": "error", - "name": "ERC20InsufficientAllowance" - }, - { - "inputs": [ - { "internalType": "address", "name": "sender", "type": "address" }, - { "internalType": "uint256", "name": "balance", "type": "uint256" }, - { "internalType": "uint256", "name": "needed", "type": "uint256" } - ], - "type": "error", - "name": "ERC20InsufficientBalance" - }, - { - "inputs": [ - { "internalType": "address", "name": "approver", "type": "address" } - ], - "type": "error", - "name": "ERC20InvalidApprover" - }, - { - "inputs": [ - { "internalType": "address", "name": "receiver", "type": "address" } - ], - "type": "error", - "name": "ERC20InvalidReceiver" - }, - { - "inputs": [ - { "internalType": "address", "name": "sender", "type": "address" } - ], - "type": "error", - "name": "ERC20InvalidSender" - }, - { - "inputs": [ - { "internalType": "address", "name": "spender", "type": "address" } - ], - "type": "error", - "name": "ERC20InvalidSpender" - }, - { "inputs": [], "type": "error", "name": "InvalidDelegate" }, - { "inputs": [], "type": "error", "name": "InvalidEndpointCall" }, - { "inputs": [], "type": "error", "name": "InvalidLocalDecimals" }, - { - "inputs": [ - { "internalType": "bytes", "name": "options", "type": "bytes" } - ], - "type": "error", - "name": "InvalidOptions" - }, - { "inputs": [], "type": "error", "name": "LzTokenUnavailable" }, - { - "inputs": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" } - ], - "type": "error", - "name": "NoPeer" - }, - { - "inputs": [ - { "internalType": "uint256", "name": "msgValue", "type": "uint256" } - ], - "type": "error", - "name": "NotEnoughNative" - }, - { - "inputs": [ - { "internalType": "address", "name": "addr", "type": "address" } - ], - "type": "error", - "name": "OnlyEndpoint" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" }, - { "internalType": "bytes32", "name": "sender", "type": "bytes32" } - ], - "type": "error", - "name": "OnlyPeer" - }, - { "inputs": [], "type": "error", "name": "OnlySelf" }, - { - "inputs": [ - { "internalType": "address", "name": "owner", "type": "address" } - ], - "type": "error", - "name": "OwnableInvalidOwner" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "type": "error", - "name": "OwnableUnauthorizedAccount" - }, - { - "inputs": [ - { "internalType": "address", "name": "token", "type": "address" } - ], - "type": "error", - "name": "SafeERC20FailedOperation" - }, - { - "inputs": [ - { "internalType": "bytes", "name": "result", "type": "bytes" } - ], - "type": "error", - "name": "SimulationResult" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "amountLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minAmountLD", - "type": "uint256" - } - ], - "type": "error", - "name": "SlippageExceeded" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address", - "indexed": true - }, - { - "internalType": "address", - "name": "spender", - "type": "address", - "indexed": true - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "Approval", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "struct EnforcedOptionParam[]", - "name": "_enforcedOptions", - "type": "tuple[]", - "components": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" }, - { - "internalType": "uint16", - "name": "msgType", - "type": "uint16" - }, - { "internalType": "bytes", "name": "options", "type": "bytes" } - ], - "indexed": false - } - ], - "type": "event", - "name": "EnforcedOptionSet", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "inspector", - "type": "address", - "indexed": false - } - ], - "type": "event", - "name": "MsgInspectorSet", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "guid", - "type": "bytes32", - "indexed": true - }, - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32", - "indexed": false - }, - { - "internalType": "address", - "name": "toAddress", - "type": "address", - "indexed": true - }, - { - "internalType": "uint256", - "name": "amountReceivedLD", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "OFTReceived", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "guid", - "type": "bytes32", - "indexed": true - }, - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32", - "indexed": false - }, - { - "internalType": "address", - "name": "fromAddress", - "type": "address", - "indexed": true - }, - { - "internalType": "uint256", - "name": "amountSentLD", - "type": "uint256", - "indexed": false - }, - { - "internalType": "uint256", - "name": "amountReceivedLD", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "OFTSent", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "previousOwner", - "type": "address", - "indexed": true - }, - { - "internalType": "address", - "name": "newOwner", - "type": "address", - "indexed": true - } - ], - "type": "event", - "name": "OwnershipTransferred", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "eid", - "type": "uint32", - "indexed": false - }, - { - "internalType": "bytes32", - "name": "peer", - "type": "bytes32", - "indexed": false - } - ], - "type": "event", - "name": "PeerSet", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "preCrimeAddress", - "type": "address", - "indexed": false - } - ], - "type": "event", - "name": "PreCrimeSet", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address", - "indexed": true - }, - { - "internalType": "address", - "name": "to", - "type": "address", - "indexed": true - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "Transfer", - "anonymous": false - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "SEND", - "outputs": [ - { "internalType": "uint16", "name": "", "type": "uint16" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "SEND_AND_CALL", - "outputs": [ - { "internalType": "uint16", "name": "", "type": "uint16" } - ] - }, - { - "inputs": [ - { - "internalType": "struct Origin", - "name": "origin", - "type": "tuple", - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { "internalType": "uint64", "name": "nonce", "type": "uint64" } - ] - } - ], - "stateMutability": "view", - "type": "function", - "name": "allowInitializePath", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "address", "name": "owner", "type": "address" }, - { "internalType": "address", "name": "spender", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "allowance", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ] - }, - { - "inputs": [], - "stateMutability": "pure", - "type": "function", - "name": "approvalRequired", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "address", "name": "spender", "type": "address" }, - { "internalType": "uint256", "name": "value", "type": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "approve", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "balanceOf", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ] - }, - { - "inputs": [ - { - "internalType": "struct SendParam", - "name": "_sendParam", - "type": "tuple", - "components": [ - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { "internalType": "bytes32", "name": "to", "type": "bytes32" }, - { - "internalType": "uint256", - "name": "amountLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minAmountLD", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "extraOptions", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "composeMsg", - "type": "bytes" - }, - { "internalType": "bytes", "name": "oftCmd", "type": "bytes" } - ] - }, - { - "internalType": "uint256", - "name": "_amountToCreditLD", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function", - "name": "buildMsgAndOptions", - "outputs": [ - { "internalType": "bytes", "name": "message", "type": "bytes" }, - { "internalType": "bytes", "name": "options", "type": "bytes" } - ] - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { "internalType": "uint16", "name": "_msgType", "type": "uint16" }, - { - "internalType": "bytes", - "name": "_extraOptions", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function", - "name": "combineOptions", - "outputs": [{ "internalType": "bytes", "name": "", "type": "bytes" }] - }, - { - "inputs": [ - { "internalType": "address", "name": "_to", "type": "address" }, - { - "internalType": "uint256", - "name": "_amountToCreditLD", - "type": "uint256" - }, - { "internalType": "uint32", "name": "_srcEid", "type": "uint32" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "credit", - "outputs": [ - { - "internalType": "uint256", - "name": "amountReceivedLD", - "type": "uint256" - } - ] - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_amountToSendLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_minAmountToCreditLD", - "type": "uint256" - }, - { "internalType": "uint32", "name": "_dstEid", "type": "uint32" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "debit", - "outputs": [ - { - "internalType": "uint256", - "name": "amountDebitedLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "amountToCreditLD", - "type": "uint256" - } - ] - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_amountToSendLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_minAmountToCreditLD", - "type": "uint256" - }, - { "internalType": "uint32", "name": "_dstEid", "type": "uint32" } - ], - "stateMutability": "view", - "type": "function", - "name": "debitView", - "outputs": [ - { - "internalType": "uint256", - "name": "amountDebitedLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "amountToCreditLD", - "type": "uint256" - } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "decimalConversionRate", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "decimals", - "outputs": [{ "internalType": "uint8", "name": "", "type": "uint8" }] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "endpoint", - "outputs": [ - { - "internalType": "contract ILayerZeroEndpointV2", - "name": "", - "type": "address" - } - ] - }, - { - "inputs": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" }, - { "internalType": "uint16", "name": "msgType", "type": "uint16" } - ], - "stateMutability": "view", - "type": "function", - "name": "enforcedOptions", - "outputs": [ - { - "internalType": "bytes", - "name": "enforcedOption", - "type": "bytes" - } - ] - }, - { - "inputs": [ - { - "internalType": "struct Origin", - "name": "", - "type": "tuple", - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { "internalType": "uint64", "name": "nonce", "type": "uint64" } - ] - }, - { "internalType": "bytes", "name": "", "type": "bytes" }, - { "internalType": "address", "name": "_sender", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "isComposeMsgSender", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { "internalType": "bytes32", "name": "_peer", "type": "bytes32" } - ], - "stateMutability": "view", - "type": "function", - "name": "isPeer", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { - "internalType": "struct Origin", - "name": "_origin", - "type": "tuple", - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { "internalType": "uint64", "name": "nonce", "type": "uint64" } - ] - }, - { "internalType": "bytes32", "name": "_guid", "type": "bytes32" }, - { "internalType": "bytes", "name": "_message", "type": "bytes" }, - { - "internalType": "address", - "name": "_executor", - "type": "address" - }, - { "internalType": "bytes", "name": "_extraData", "type": "bytes" } - ], - "stateMutability": "payable", - "type": "function", - "name": "lzReceive" - }, - { - "inputs": [ - { - "internalType": "struct InboundPacket[]", - "name": "_packets", - "type": "tuple[]", - "components": [ - { - "internalType": "struct Origin", - "name": "origin", - "type": "tuple", - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "nonce", - "type": "uint64" - } - ] - }, - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "guid", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "address", - "name": "executor", - "type": "address" - }, - { "internalType": "bytes", "name": "message", "type": "bytes" }, - { - "internalType": "bytes", - "name": "extraData", - "type": "bytes" - } - ] - } - ], - "stateMutability": "payable", - "type": "function", - "name": "lzReceiveAndRevert" - }, - { - "inputs": [ - { - "internalType": "struct Origin", - "name": "_origin", - "type": "tuple", - "components": [ - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "sender", - "type": "bytes32" - }, - { "internalType": "uint64", "name": "nonce", "type": "uint64" } - ] - }, - { "internalType": "bytes32", "name": "_guid", "type": "bytes32" }, - { "internalType": "bytes", "name": "_message", "type": "bytes" }, - { - "internalType": "address", - "name": "_executor", - "type": "address" - }, - { "internalType": "bytes", "name": "_extraData", "type": "bytes" } - ], - "stateMutability": "payable", - "type": "function", - "name": "lzReceiveSimulate" - }, - { - "inputs": [ - { "internalType": "address", "name": "_to", "type": "address" }, - { "internalType": "uint256", "name": "_amount", "type": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "mint" - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "msgInspector", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "name", - "outputs": [ - { "internalType": "string", "name": "", "type": "string" } - ] - }, - { - "inputs": [ - { "internalType": "uint32", "name": "", "type": "uint32" }, - { "internalType": "bytes32", "name": "", "type": "bytes32" } - ], - "stateMutability": "view", - "type": "function", - "name": "nextNonce", - "outputs": [ - { "internalType": "uint64", "name": "nonce", "type": "uint64" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "oApp", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ] - }, - { - "inputs": [], - "stateMutability": "pure", - "type": "function", - "name": "oAppVersion", - "outputs": [ - { - "internalType": "uint64", - "name": "senderVersion", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "receiverVersion", - "type": "uint64" - } - ] - }, - { - "inputs": [], - "stateMutability": "pure", - "type": "function", - "name": "oftVersion", - "outputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - }, - { "internalType": "uint64", "name": "version", "type": "uint64" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "owner", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ] - }, - { - "inputs": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" } - ], - "stateMutability": "view", - "type": "function", - "name": "peers", - "outputs": [ - { "internalType": "bytes32", "name": "peer", "type": "bytes32" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "preCrime", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ] - }, - { - "inputs": [ - { - "internalType": "struct SendParam", - "name": "_sendParam", - "type": "tuple", - "components": [ - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { "internalType": "bytes32", "name": "to", "type": "bytes32" }, - { - "internalType": "uint256", - "name": "amountLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minAmountLD", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "extraOptions", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "composeMsg", - "type": "bytes" - }, - { "internalType": "bytes", "name": "oftCmd", "type": "bytes" } - ] - } - ], - "stateMutability": "view", - "type": "function", - "name": "quoteOFT", - "outputs": [ - { - "internalType": "struct OFTLimit", - "name": "oftLimit", - "type": "tuple", - "components": [ - { - "internalType": "uint256", - "name": "minAmountLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "maxAmountLD", - "type": "uint256" - } - ] - }, - { - "internalType": "struct OFTFeeDetail[]", - "name": "oftFeeDetails", - "type": "tuple[]", - "components": [ - { - "internalType": "int256", - "name": "feeAmountLD", - "type": "int256" - }, - { - "internalType": "string", - "name": "description", - "type": "string" - } - ] - }, - { - "internalType": "struct OFTReceipt", - "name": "oftReceipt", - "type": "tuple", - "components": [ - { - "internalType": "uint256", - "name": "amountSentLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "amountReceivedLD", - "type": "uint256" - } - ] - } - ] - }, - { - "inputs": [ - { - "internalType": "struct SendParam", - "name": "_sendParam", - "type": "tuple", - "components": [ - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { "internalType": "bytes32", "name": "to", "type": "bytes32" }, - { - "internalType": "uint256", - "name": "amountLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minAmountLD", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "extraOptions", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "composeMsg", - "type": "bytes" - }, - { "internalType": "bytes", "name": "oftCmd", "type": "bytes" } - ] - }, - { "internalType": "bool", "name": "_payInLzToken", "type": "bool" } - ], - "stateMutability": "view", - "type": "function", - "name": "quoteSend", - "outputs": [ - { - "internalType": "struct MessagingFee", - "name": "msgFee", - "type": "tuple", - "components": [ - { - "internalType": "uint256", - "name": "nativeFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "lzTokenFee", - "type": "uint256" - } - ] - } - ] - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_amountLD", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function", - "name": "removeDust", - "outputs": [ - { "internalType": "uint256", "name": "amountLD", "type": "uint256" } - ] - }, - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "function", - "name": "renounceOwnership" - }, - { - "inputs": [ - { - "internalType": "struct SendParam", - "name": "_sendParam", - "type": "tuple", - "components": [ - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { "internalType": "bytes32", "name": "to", "type": "bytes32" }, - { - "internalType": "uint256", - "name": "amountLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minAmountLD", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "extraOptions", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "composeMsg", - "type": "bytes" - }, - { "internalType": "bytes", "name": "oftCmd", "type": "bytes" } - ] - }, - { - "internalType": "struct MessagingFee", - "name": "_fee", - "type": "tuple", - "components": [ - { - "internalType": "uint256", - "name": "nativeFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "lzTokenFee", - "type": "uint256" - } - ] - }, - { - "internalType": "address", - "name": "_refundAddress", - "type": "address" - } - ], - "stateMutability": "payable", - "type": "function", - "name": "send", - "outputs": [ - { - "internalType": "struct MessagingReceipt", - "name": "msgReceipt", - "type": "tuple", - "components": [ - { - "internalType": "bytes32", - "name": "guid", - "type": "bytes32" - }, - { "internalType": "uint64", "name": "nonce", "type": "uint64" }, - { - "internalType": "struct MessagingFee", - "name": "fee", - "type": "tuple", - "components": [ - { - "internalType": "uint256", - "name": "nativeFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "lzTokenFee", - "type": "uint256" - } - ] - } - ] - }, - { - "internalType": "struct OFTReceipt", - "name": "oftReceipt", - "type": "tuple", - "components": [ - { - "internalType": "uint256", - "name": "amountSentLD", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "amountReceivedLD", - "type": "uint256" - } - ] - } - ] - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_delegate", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setDelegate" - }, - { - "inputs": [ - { - "internalType": "struct EnforcedOptionParam[]", - "name": "_enforcedOptions", - "type": "tuple[]", - "components": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" }, - { - "internalType": "uint16", - "name": "msgType", - "type": "uint16" - }, - { "internalType": "bytes", "name": "options", "type": "bytes" } - ] - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setEnforcedOptions" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_msgInspector", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setMsgInspector" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { "internalType": "bytes32", "name": "_peer", "type": "bytes32" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setPeer" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_preCrime", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setPreCrime" - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "sharedDecimals", - "outputs": [{ "internalType": "uint8", "name": "", "type": "uint8" }] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "symbol", - "outputs": [ - { "internalType": "string", "name": "", "type": "string" } - ] - }, - { - "inputs": [ - { "internalType": "uint64", "name": "_amountSD", "type": "uint64" } - ], - "stateMutability": "view", - "type": "function", - "name": "toLD", - "outputs": [ - { "internalType": "uint256", "name": "amountLD", "type": "uint256" } - ] - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_amountLD", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function", - "name": "toSD", - "outputs": [ - { "internalType": "uint64", "name": "amountSD", "type": "uint64" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "token", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "totalSupply", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "to", "type": "address" }, - { "internalType": "uint256", "name": "value", "type": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "transfer", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "address", "name": "from", "type": "address" }, - { "internalType": "address", "name": "to", "type": "address" }, - { "internalType": "uint256", "name": "value", "type": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "transferFrom", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "address", "name": "newOwner", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "transferOwnership" - } - ], - "devdoc": { - "kind": "dev", - "methods": { - "allowInitializePath((uint32,bytes32,uint64))": { - "details": "This indicates to the endpoint that the OApp has enabled msgs for this particular path to be received.This defaults to assuming if a peer has been set, its initialized. Can be overridden by the OApp if there is other logic to determine this.", - "params": { - "origin": "The origin information containing the source endpoint and sender address." - }, - "returns": { "_0": "Whether the path has been initialized." } - }, - "allowance(address,address)": { - "details": "See {IERC20-allowance}." - }, - "approvalRequired()": { - "details": "In the case of OFT where the contract IS the token, approval is NOT required.", - "returns": { - "_0": "requiresApproval Needs approval of the underlying token implementation." - } - }, - "approve(address,uint256)": { - "details": "See {IERC20-approve}. NOTE: If `value` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address." - }, - "balanceOf(address)": { "details": "See {IERC20-balanceOf}." }, - "combineOptions(uint32,uint16,bytes)": { - "details": "If there is an enforced lzReceive option: - {gasLimit: 200k, msg.value: 1 ether} AND a caller supplies a lzReceive option: {gasLimit: 100k, msg.value: 0.5 ether} - The resulting options will be {gasLimit: 300k, msg.value: 1.5 ether} when the message is executed on the remote lzReceive() function.This presence of duplicated options is handled off-chain in the verifier/executor.", - "params": { - "_eid": "The endpoint ID.", - "_extraOptions": "Additional options passed by the caller.", - "_msgType": "The OAPP message type." - }, - "returns": { - "_0": "options The combination of caller specified options AND enforced options." - } - }, - "decimals()": { - "details": "Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the default value returned by this function, unless it's overridden. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}." - }, - "isComposeMsgSender((uint32,bytes32,uint64),bytes,address)": { - "details": "_origin The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message._message The lzReceive payload.Applications can optionally choose to implement separate composeMsg senders that are NOT the bridging layer.The default sender IS the OAppReceiver implementer.", - "params": { "_sender": "The sender address." }, - "returns": { "_0": "isSender Is a valid sender." } - }, - "isPeer(uint32,bytes32)": { - "details": "Check if the peer is considered 'trusted' by the OApp.Enables OAppPreCrimeSimulator to check whether a potential Inbound Packet is from a trusted source.", - "params": { - "_eid": "The endpoint ID to check.", - "_peer": "The peer to check." - }, - "returns": { - "_0": "Whether the peer passed is considered 'trusted' by the OApp." - } - }, - "lzReceive((uint32,bytes32,uint64),bytes32,bytes,address,bytes)": { - "details": "Entry point for receiving messages or packets from the endpoint.Entry point for receiving msg/packet from the LayerZero endpoint.", - "params": { - "_executor": "The address of the executor for the received message.", - "_extraData": "Additional arbitrary data provided by the corresponding executor.", - "_guid": "The unique identifier for the received LayerZero message.", - "_message": "The payload of the received message.", - "_origin": "The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message." - } - }, - "lzReceiveAndRevert(((uint32,bytes32,uint64),uint32,address,bytes32,uint256,address,bytes,bytes)[])": { - "details": "Interface for pre-crime simulations. Always reverts at the end with the simulation results.WARNING: MUST revert at the end with the simulation results.Gives the preCrime implementation the ability to mock sending packets to the lzReceive function, WITHOUT actually executing them.", - "params": { - "_packets": "An array of InboundPacket objects representing received packets to be delivered." - } - }, - "lzReceiveSimulate((uint32,bytes32,uint64),bytes32,bytes,address,bytes)": { - "details": "Is effectively an internal function because msg.sender must be address(this). Allows resetting the call stack for 'internal' calls.", - "params": { - "_executor": "The executor address for the packet.", - "_extraData": "Additional data for the packet.", - "_guid": "The unique identifier of the packet.", - "_message": "The message payload of the packet.", - "_origin": "The origin information containing the source endpoint and sender address. - srcEid: The source chain endpoint ID. - sender: The sender address on the src chain. - nonce: The nonce of the message." - } - }, - "name()": { "details": "Returns the name of the token." }, - "nextNonce(uint32,bytes32)": { - "details": "_srcEid The source endpoint ID._sender The sender address.The path nonce starts from 1. If 0 is returned it means that there is NO nonce ordered enforcement.Is required by the off-chain executor to determine the OApp expects msg execution is ordered.This is also enforced by the OApp.By default this is NOT enabled. ie. nextNonce is hardcoded to return 0.", - "returns": { "nonce": "The next nonce." } - }, - "oApp()": { - "details": "Retrieves the address of the OApp contract.The simulator contract is the base contract for the OApp by default.If the simulator is a separate contract, override this function.", - "returns": { "_0": "The address of the OApp contract." } - }, - "oAppVersion()": { - "returns": { - "receiverVersion": "The version of the OAppReceiver.sol implementation.", - "senderVersion": "The version of the OAppSender.sol implementation." - } - }, - "oftVersion()": { - "details": "interfaceId: This specific interface ID is '0x02e49c2c'.version: Indicates a cross-chain compatible msg encoding with other OFTs.If a new feature is added to the OFT cross-chain msg encoding, the version will be incremented. ie. localOFT version(x,1) CAN send messages to remoteOFT version(x,1)", - "returns": { - "interfaceId": "The interface ID.", - "version": "The version." - } - }, - "owner()": { "details": "Returns the address of the current owner." }, - "quoteOFT((uint32,bytes32,uint256,uint256,bytes,bytes,bytes))": { - "params": { - "_sendParam": "The parameters for the send operation." - }, - "returns": { - "oftFeeDetails": "The details of OFT fees.", - "oftLimit": "The OFT limit information.", - "oftReceipt": "The OFT receipt information." - } - }, - "quoteSend((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),bool)": { - "details": "MessagingFee: LayerZero msg fee - nativeFee: The native fee. - lzTokenFee: The lzToken fee.", - "params": { - "_payInLzToken": "Flag indicating whether the caller is paying in the LZ token.", - "_sendParam": "The parameters for the send() operation." - }, - "returns": { - "msgFee": "The calculated LayerZero messaging fee from the send() operation." - } - }, - "renounceOwnership()": { - "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner." - }, - "send((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),(uint256,uint256),address)": { - "details": "Executes the send operation.MessagingReceipt: LayerZero msg receipt - guid: The unique identifier for the sent message. - nonce: The nonce of the sent message. - fee: The LayerZero fee incurred for the message.", - "params": { - "_fee": "The calculated fee for the send() operation. - nativeFee: The native fee. - lzTokenFee: The lzToken fee.", - "_refundAddress": "The address to receive any excess funds.", - "_sendParam": "The parameters for the send operation." - }, - "returns": { - "msgReceipt": "The receipt for the send operation.", - "oftReceipt": "The OFT receipt information." - } - }, - "setDelegate(address)": { - "details": "Only the owner/admin of the OApp can call this function.Provides the ability for a delegate to set configs, on behalf of the OApp, directly on the Endpoint contract.", - "params": { "_delegate": "The address of the delegate to be set." } - }, - "setEnforcedOptions((uint32,uint16,bytes)[])": { - "details": "Sets the enforced options for specific endpoint and message type combinations.Only the owner/admin of the OApp can call this function.Provides a way for the OApp to enforce things like paying for PreCrime, AND/OR minimum dst lzReceive gas amounts etc.These enforced options can vary as the potential options/execution on the remote may differ as per the msgType. eg. Amount of lzReceive() gas necessary to deliver a lzCompose() message adds overhead you dont want to pay if you are only making a standard LayerZero message ie. lzReceive() WITHOUT sendCompose().", - "params": { - "_enforcedOptions": "An array of EnforcedOptionParam structures specifying enforced options." - } - }, - "setMsgInspector(address)": { - "details": "Sets the message inspector address for the OFT.This is an optional contract that can be used to inspect both 'message' and 'options'.Set it to address(0) to disable it, or set it to a contract address to enable it.", - "params": { - "_msgInspector": "The address of the message inspector." - } - }, - "setPeer(uint32,bytes32)": { - "details": "Only the owner/admin of the OApp can call this function.Indicates that the peer is trusted to send LayerZero messages to this OApp.Set this to bytes32(0) to remove the peer address.Peer is a bytes32 to accommodate non-evm chains.", - "params": { - "_eid": "The endpoint ID.", - "_peer": "The address of the peer to be associated with the corresponding endpoint." - } - }, - "setPreCrime(address)": { - "details": "Sets the preCrime contract address.", - "params": { "_preCrime": "The address of the preCrime contract." } - }, - "sharedDecimals()": { - "details": "Retrieves the shared decimals of the OFT.Sets an implicit cap on the amount of tokens, over uint64.max() will need some sort of outbound cap / totalSupply cap Lowest common decimal denominator between chains. Defaults to 6 decimal places to provide up to 18,446,744,073,709.551615 units (max uint64). For tokens exceeding this totalSupply(), they will need to override the sharedDecimals function with something smaller. ie. 4 sharedDecimals would be 1,844,674,407,370,955.1615", - "returns": { "_0": "The shared decimals of the OFT." } - }, - "symbol()": { - "details": "Returns the symbol of the token, usually a shorter version of the name." - }, - "token()": { - "details": "Retrieves the address of the underlying ERC20 implementation.In the case of OFT, address(this) and erc20 are the same contract.", - "returns": { "_0": "The address of the OFT token." } - }, - "totalSupply()": { "details": "See {IERC20-totalSupply}." }, - "transfer(address,uint256)": { - "details": "See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `value`." - }, - "transferFrom(address,address,uint256)": { - "details": "See {IERC20-transferFrom}. Skips emitting an {Approval} event indicating an allowance update. This is not required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve]. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `value`. - the caller must have allowance for ``from``'s tokens of at least `value`." - }, - "transferOwnership(address)": { - "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." - } - }, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": { - "allowInitializePath((uint32,bytes32,uint64))": { - "notice": "Checks if the path initialization is allowed based on the provided origin." - }, - "approvalRequired()": { - "notice": "Indicates whether the OFT contract requires approval of the 'token()' to send." - }, - "combineOptions(uint32,uint16,bytes)": { - "notice": "Combines options for a given endpoint and message type." - }, - "endpoint()": { - "notice": "Retrieves the LayerZero endpoint associated with the OApp." - }, - "isComposeMsgSender((uint32,bytes32,uint64),bytes,address)": { - "notice": "Indicates whether an address is an approved composeMsg sender to the Endpoint." - }, - "nextNonce(uint32,bytes32)": { - "notice": "Retrieves the next nonce for a given source endpoint and sender address." - }, - "oAppVersion()": { - "notice": "Retrieves the OApp version information." - }, - "oftVersion()": { - "notice": "Retrieves interfaceID and the version of the OFT." - }, - "peers(uint32)": { - "notice": "Retrieves the peer (OApp) associated with a corresponding endpoint." - }, - "quoteOFT((uint32,bytes32,uint256,uint256,bytes,bytes,bytes))": { - "notice": "Provides the fee breakdown and settings data for an OFT. Unused in the default implementation." - }, - "quoteSend((uint32,bytes32,uint256,uint256,bytes,bytes,bytes),bool)": { - "notice": "Provides a quote for the send() operation." - }, - "setDelegate(address)": { - "notice": "Sets the delegate address for the OApp." - }, - "setPeer(uint32,bytes32)": { - "notice": "Sets the peer address (OApp instance) for a corresponding endpoint." - } - }, - "version": 1 - } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { "test/evm/mocks/OFTMock.sol": "OFTMock" }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol": { - "keccak256": "0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3", - "urls": [ - "bzz-raw://bacc29fd3866af71e59cb0bdc1cf82c882a4a7f4e2652fd413c9f12649762083", - "dweb:/ipfs/QmZh2toLnrQDWaNYhS5K4NoW7Vxd2GdZx9KA77vKEDLAqs" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol": { - "keccak256": "0x9641abba8d53b08bb517d1b74801dd15ea7b84d77a6719085bd96c8ea94e3ca0", - "urls": [ - "bzz-raw://77415ae0820859e0faf3fabdce683cce9fa03ea026ae0f6fe081ef1c9205f933", - "dweb:/ipfs/QmXd7APqoCunQ2jYy73AHvi5gsZofLpm3SzM6FPo7zRPfL" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol": { - "keccak256": "0x5cf5f24751b4e3ea1c9c5ded07cedfdfd62566b6daaffcc0144733859c9dba0c", - "urls": [ - "bzz-raw://cae7e35007a714f007ea08045ef7c0cfa6c91fd2425b5028b2d49abad357a5f0", - "dweb:/ipfs/QmcDBs5tsiyB35b8cwzWQWNnpkawb3uuHRaqE77Hxm2tve" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol": { - "keccak256": "0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc", - "urls": [ - "bzz-raw://d8ff6a8a89297fa127f86b54e0db3eba1d6a6eeb4f6398d3c84d569665ac8f1b", - "dweb:/ipfs/QmVSwhw6xFDrLRAX4RXaCM47yBaBtac4wf36DYEq6KCTvT" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol": { - "keccak256": "0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972", - "urls": [ - "bzz-raw://7e1b245d58221d16d8b5e0f01ef3e289a24a7df1ace3b94239e4d5b954ad5927", - "dweb:/ipfs/Qmappsgp7PCY9rSSNE9Cdn4BTRX591WfCSEgq2HxhA3z6S" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol": { - "keccak256": "0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901", - "urls": [ - "bzz-raw://b18b23a1643fc6636c4ad9d9023e2e6ca2d3c2a4a046482d4655bff09950598d", - "dweb:/ipfs/Qma6G5SqiovwrMPfgqTrRngK1HWW373Wkf9c6YP2NhXpPk" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol": { - "keccak256": "0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e", - "urls": [ - "bzz-raw://5173fc9143bea314b159ca5a9adb5626659ef763bc598e27de5fa46efe3291a6", - "dweb:/ipfs/QmSLFeMFPmVeGxT4sxRPW28ictjAS22M8rLeYRu9TXkA6D" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol": { - "keccak256": "0xf1c07bc61e7b1dce195ed12d50f87980fbf2d63cac1326fd28287f55fe0ba625", - "urls": [ - "bzz-raw://060f10ff7afc33c1c2f2b4b5ba29231fd3c943146488084d0e4ab99fce991d97", - "dweb:/ipfs/QmaSsefAqqEqtf8FgFUmDYMwTsAty3X1pqDb6SiFvry6B3" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol": { - "keccak256": "0x2ebbcaaab3554edcd41b581f1a72ac1806afbfb8047d0d47ff098f9af30d6deb", - "urls": [ - "bzz-raw://2d4b2cf5c3b16dc76c6767f285b57c0af917972327b2be3f7cba5825402f5fc1", - "dweb:/ipfs/QmQQWiHE2jKEDbjzGutSoZwtApSXYfLqZt5CxEpFj8xyvT" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol": { - "keccak256": "0xc84cf1bf785977fe1fbe7566eef902c2db68d0e163813ebe6c34921754802680", - "urls": [ - "bzz-raw://de686666fc16fa432d4208d85cec87dc952faf3e481b683b9adf4b4610db4b09", - "dweb:/ipfs/QmdmQeopzmxqRzi9DNB4EJDrYUXFfD7fUhnGhSni4QejUW" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OApp.sol": { - "keccak256": "0xac362c4c291fad2f1511a968424b2e78a5ad502d1c867bd31da04be742aca8c5", - "urls": [ - "bzz-raw://e1f8cf9f20a2b683a53c3883972aa0676af97a24c678f461fae08e1fb056df28", - "dweb:/ipfs/QmPpKNqda3rgxDwnq3XiRTtT3NfWeqrCJT6LwmhYd2AoT2" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppCore.sol": { - "keccak256": "0x13a9c2d1d2c1f086b8624f2e84c4a4702212daae36f701d92bb915b535cbe4cc", - "urls": [ - "bzz-raw://606515dd9193551bd2c94ac8c304f3776fafcc70e544ebf441f334658b2fd5f0", - "dweb:/ipfs/QmZ88ey7DdZqV5taAoebabvszX5kdPMSrQCAmTteVdDtcH" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppReceiver.sol": { - "keccak256": "0x0174e9f1ec4cefe4b5adc26c392269c699b9ff75965364e5b7264426a462c70b", - "urls": [ - "bzz-raw://cd12bb4fe5802c53911b9a0081a2ea10639b1f99925d1e5c1b1421d1bdc17075", - "dweb:/ipfs/QmZonarwbKiEwQ8qoASKur2bbMjusdy9pqK9RCR4P1YPtc" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppSender.sol": { - "keccak256": "0x518cf4adca601923ed4baa6619846a253ea32b8d8775f8bc1faa3dfac7f67c20", - "urls": [ - "bzz-raw://d42b471418efadcc3577ef3fa9f8f504e8bed7db90c3b0c862038d8b29529eb2", - "dweb:/ipfs/QmZETDQiJN4U92fmLKo8T9ZbdDf7BNBUUvo9H7M7GqAyFU" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppCore.sol": { - "keccak256": "0x40e49f2de74506e1da5dcaed53a39853f691647f4ceb0fccc8f49a68d3f47c58", - "urls": [ - "bzz-raw://4a1deb2a6a3eb1fb83936c9578469142bff470295f403d7d07d955a76be3adbd", - "dweb:/ipfs/QmS9bjSfBaE4YhQ1PCQ1TknbEPbNfRXzBK9E7SaPGyiZEv" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppMsgInspector.sol": { - "keccak256": "0x339654e699043c400cad92de209aa23855ce10211c31cf4114042cc5224d3b7c", - "urls": [ - "bzz-raw://5222afde59bf086f67b39e0288ad36343f4f5ed683d250533f256a5db956f37e", - "dweb:/ipfs/QmbEG9EMYsK3Y6Cz7QbNtkW4kHGzMuhp2y2seSoL8v1A5b" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppOptionsType3.sol": { - "keccak256": "0x9fc08a51e9d7c9c710c4eb26f84fe77228305ad7da63fa486ff24ebf2f3bc461", - "urls": [ - "bzz-raw://2e2eea8a93bb9fc3f629767118b362e9b4bda2443ff95eae21c6a894f3e334cc", - "dweb:/ipfs/QmPRRNjAB4U19ke4gr3U7ZJGtdcVBxdXVBZ2BmB1riFkP7" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppReceiver.sol": { - "keccak256": "0xd26135185e19b3732746d4a9e2923e896f28dec8664bab161faea2ee26fcdc3d", - "urls": [ - "bzz-raw://c236dfe386b508be33c3a1a74ae1d4fd64b8c77ae207767e9dbed0f2429518a2", - "dweb:/ipfs/QmXVbZJjfryTRti98uN3BMh5qh4K7NuEs1RSCoBjRoYd4q" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/libs/OAppOptionsType3.sol": { - "keccak256": "0x5275636cd47e660a2fdf6c7fe9d41ff3cc866b785cc8a9d88c1b8ca983509f01", - "urls": [ - "bzz-raw://a59dd6e3cfcc332f45a13d44585eb228588c4b9d470cbb19852df5753a4571af", - "dweb:/ipfs/QmQJF1QU3MKhvmw42eq61u9z3bzKJJKMsEdQVYyPyYgTVS" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/precrime/OAppPreCrimeSimulator.sol": { - "keccak256": "0x205a0abfd8b3c9af2740769f251381b84999b8e9347f3cd50de3ef8290a17750", - "urls": [ - "bzz-raw://d9778d7d5da941af2029410b6ac212f915ea1785573ae2865b0ed8f779fcca82", - "dweb:/ipfs/QmNkVEkfecvgubgnMuaT5fEfSExd95vz8DQHhpZtMrVRjH" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IOAppPreCrimeSimulator.sol": { - "keccak256": "0x5d24db150949ea8e6437178e65a942e8c8b7f332e5daf32750f56b23b35b5bb2", - "urls": [ - "bzz-raw://1b1dcea0267234654126f926a1b405743606d7b5e49185b621afb7bd94d18b9a", - "dweb:/ipfs/QmZ9BXQmbWJcrhHKuBs4yhNtbCV5WUpUY3AXSX7rkWwX6y" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IPreCrime.sol": { - "keccak256": "0xc8d869f27ef8ceb2e13fdf6a70682fd4dee3f90c4924eb8e125bc1e66cb6af84", - "urls": [ - "bzz-raw://66bf49d59c14832ea0ddddcd12d512d4f9bd0fd254a1368442587bf3e77fe73e", - "dweb:/ipfs/QmYUAvsyuUPiSYjbL4zVo6ZtiRSLCUPDvCesqgdZWbSGDg" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/precrime/libs/Packet.sol": { - "keccak256": "0xcb2fb1c5b2eb3731de78b479b9c2ab3bba326fe0b0b3a008590f18e881e457a6", - "urls": [ - "bzz-raw://f70724c61d226743c2bd8ba6c09758805e4339780978949ce5b333c106be4edc", - "dweb:/ipfs/QmX5rV9K1N7RgTz9xtf8CDG8SrYiitGAzFh9ec2tbnEec4" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oft-evm/contracts/OFT.sol": { - "keccak256": "0xdc3582e4a20e02a79050c17058a1f1f42a4335d1a70be06c0a52a3fb05d4c89a", - "urls": [ - "bzz-raw://83c4bd42e68528246860a952a92a79e51e3a789dac79a0b62576ab2f609de9c7", - "dweb:/ipfs/QmVj1x655j1cFTnPT8uBaM71TCSrhFVwPdoFkAkWhhadns" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oft-evm/contracts/OFTCore.sol": { - "keccak256": "0x9ce49b83455df600b52538e42028c422a322643f7ffb4f2814c72c3b970ea7be", - "urls": [ - "bzz-raw://2ebbf79612c3f6cd4e2754ba55519df6b89504ab5514e3517cbd286d87143997", - "dweb:/ipfs/QmQZpSPhNhF4MESb2if2DbcjC75xfuoEzDGXmeJKYZtHZ5" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oft-evm/contracts/interfaces/IOFT.sol": { - "keccak256": "0x7ba6bb62fba7ee83451cfb0e727ddeef0e96b4388bd4e9ff0fc6ce103e1101c8", - "urls": [ - "bzz-raw://cfbd447f2e8a730bd46a14c3c3e6a0b2bf7446145579603a9793ba5ac1dd38b4", - "dweb:/ipfs/QmZ4nx4iGrFmBHvYFgki5TXFdCHz4Co38hgdgwpRaM7NLs" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oft-evm/contracts/libs/OFTComposeMsgCodec.sol": { - "keccak256": "0xaae73d6eb8b9561c43f1802f3c416c00ccd35f172b711f9781ccdf1b25a40db5", - "urls": [ - "bzz-raw://7beda2d895ae9e15269dd261a492ce0a29b498e5bebf088ed6f2ae6a5185719e", - "dweb:/ipfs/QmScog2tW1YVyEPLVcUVqGGc85ub46sA28nUKNzFEZcFdK" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oft-evm/contracts/libs/OFTMsgCodec.sol": { - "keccak256": "0x5358948017669c03e157f871d8c38e988f9004dbd0801ad3119d2487f0d40b0b", - "urls": [ - "bzz-raw://c7d0f1bf32a80af9b99cd93fefa373dac5c27463351cc35f62b9c2439d5b9258", - "dweb:/ipfs/Qmb81qoxzMwV3PkPANRvnXf4fJTsZ5sjJ8r2df9V2vhh6q" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/access/Ownable.sol": { - "keccak256": "0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb", - "urls": [ - "bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6", - "dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol": { - "keccak256": "0x9b6b3e7803bc5f2f8cd7ad57db8ac1def61a9930a5a3107df4882e028a9605d7", - "urls": [ - "bzz-raw://da62d6be1f5c6edf577f0cb45666a8aa9c2086a4bac87d95d65f02e2f4c36a4b", - "dweb:/ipfs/QmNkpvBpoCMvX8JwAFNSc5XxJ2q5BXJpL5L1txb4QkqVFF" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/interfaces/IERC165.sol": { - "keccak256": "0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724", - "urls": [ - "bzz-raw://11fea9f8bc98949ac6709f0c1699db7430d2948137aa94d5a9e95a91f61a710a", - "dweb:/ipfs/QmQdfRXxQjwP6yn3DVo1GHPpriKNcFghSPi94Z1oKEFUNS" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/interfaces/IERC20.sol": { - "keccak256": "0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c", - "urls": [ - "bzz-raw://a2608291cb038b388d80b79a06b6118a42f7894ff67b7da10ec0dbbf5b2973ba", - "dweb:/ipfs/QmWohqcBLbcxmA4eGPhZDXe5RYMMEEpFq22nfkaUMvTfw1" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/interfaces/draft-IERC6093.sol": { - "keccak256": "0x880da465c203cec76b10d72dbd87c80f387df4102274f23eea1f9c9b0918792b", - "urls": [ - "bzz-raw://399594cd8bb0143bc9e55e0f1d071d0d8c850a394fb7a319d50edd55d9ed822b", - "dweb:/ipfs/QmbPZzgtT6LEm9CMqWfagQFwETbV1ztpECBB1DtQHrKiRz" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/token/ERC20/ERC20.sol": { - "keccak256": "0xbf61ab2ae1d575a17ea58fbb99ca232baddcc4e0eeea180e84cbc74b0c348b31", - "urls": [ - "bzz-raw://4e0968705bad99747a8e5288aa008678c2be2f471f919dce3925a3cc4f1dee09", - "dweb:/ipfs/QmbAFnCQfo4tw6ssfQSjhA5LzwHWNNryXN8bX7ty8jiqqn" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol": { - "keccak256": "0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7", - "urls": [ - "bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db", - "dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol": { - "keccak256": "0x70f2f713b13b7ce4610bcd0ac9fec0f3cc43693b043abcb8dc40a42a726eb330", - "urls": [ - "bzz-raw://c13d13304ac79a83ab1c30168967d19e2203342ebbd6a9bbce4db7550522dcbf", - "dweb:/ipfs/QmeN5jKMN2vw5bhacr6tkg78afbTTZUeaacNHqjWt4Ew1r" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol": { - "keccak256": "0xca2ae13e0610f6a99238dd00b97bd786bc92732dae6d6b9d61f573ec51018310", - "urls": [ - "bzz-raw://75f8c71ce0c91c40dd5f249ace0b7d8270f8f1767231bcf71490f7157d6ba862", - "dweb:/ipfs/QmYXgxeDyFHvz3JsXxLEYN6GNUR44ThHeFj5XkpkgMoG4w" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Address.sol": { - "keccak256": "0x9d8da059267bac779a2dbbb9a26c2acf00ca83085e105d62d5d4ef96054a47f5", - "urls": [ - "bzz-raw://c78e2aa4313323cecd1ef12a8d6265b96beee1a199923abf55d9a2a9e291ad23", - "dweb:/ipfs/QmUTs2KStXucZezzFo3EYeqYu47utu56qrF7jj1Gue65vb" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Context.sol": { - "keccak256": "0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2", - "urls": [ - "bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12", - "dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Errors.sol": { - "keccak256": "0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123", - "urls": [ - "bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf", - "dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol": { - "keccak256": "0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8", - "urls": [ - "bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621", - "dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL" - ], - "license": "MIT" - }, - "test/evm/mocks/OFTMock.sol": { - "keccak256": "0xff3044b693ecca8da9ac6604ac2c4103980531ff3a04f35ffde5f80671d1a340", - "urls": [ - "bzz-raw://705441e8b86f606e1553d6f77483c3cddfc389a26136d48d1b3869f02575d703", - "dweb:/ipfs/QmXLaXZh2DCGpsMymYb1kBQBbG3mTuDApDiNGUk2yHD219" - ], - "license": "UNLICENSED" - } - }, - "version": 1 - }, - "id": 131 -} diff --git a/examples/oft-movement/out/OFTMsgCodec.sol/OFTMsgCodec.json b/examples/oft-movement/out/OFTMsgCodec.sol/OFTMsgCodec.json deleted file mode 100644 index eeead64b5..000000000 --- a/examples/oft-movement/out/OFTMsgCodec.sol/OFTMsgCodec.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "abi": [], - "bytecode": { - "object": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220bbf9248e7f48251629b4d978387b9a21cb561fec139609ecf0efa5d8eba3438864736f6c63430008160033", - "sourceMap": "59:2846:29:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;59:2846:29;;;;;;;;;;;;;;;;;", - "linkReferences": {} - }, - "deployedBytecode": { - "object": "0x73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220bbf9248e7f48251629b4d978387b9a21cb561fec139609ecf0efa5d8eba3438864736f6c63430008160033", - "sourceMap": "59:2846:29:-:0;;;;;;;;", - "linkReferences": {} - }, - "methodIdentifiers": {}, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/oft-evm/contracts/libs/OFTMsgCodec.sol\":\"OFTMsgCodec\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/oft-evm/contracts/libs/OFTMsgCodec.sol\":{\"keccak256\":\"0x5358948017669c03e157f871d8c38e988f9004dbd0801ad3119d2487f0d40b0b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c7d0f1bf32a80af9b99cd93fefa373dac5c27463351cc35f62b9c2439d5b9258\",\"dweb:/ipfs/Qmb81qoxzMwV3PkPANRvnXf4fJTsZ5sjJ8r2df9V2vhh6q\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/oft-evm/contracts/libs/OFTMsgCodec.sol": "OFTMsgCodec" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/oft-evm/contracts/libs/OFTMsgCodec.sol": { - "keccak256": "0x5358948017669c03e157f871d8c38e988f9004dbd0801ad3119d2487f0d40b0b", - "urls": [ - "bzz-raw://c7d0f1bf32a80af9b99cd93fefa373dac5c27463351cc35f62b9c2439d5b9258", - "dweb:/ipfs/Qmb81qoxzMwV3PkPANRvnXf4fJTsZ5sjJ8r2df9V2vhh6q" - ], - "license": "MIT" - } - }, - "version": 1 - }, - "id": 29 -} diff --git a/examples/oft-movement/out/OptionsBuilder.sol/OptionsBuilder.json b/examples/oft-movement/out/OptionsBuilder.sol/OptionsBuilder.json deleted file mode 100644 index a11dff987..000000000 --- a/examples/oft-movement/out/OptionsBuilder.sol/OptionsBuilder.json +++ /dev/null @@ -1,134 +0,0 @@ -{ - "abi": [ - { - "type": "error", - "name": "InvalidOptionType", - "inputs": [ - { "name": "optionType", "type": "uint16", "internalType": "uint16" } - ] - }, - { - "type": "error", - "name": "InvalidSize", - "inputs": [ - { "name": "max", "type": "uint256", "internalType": "uint256" }, - { "name": "actual", "type": "uint256", "internalType": "uint256" } - ] - } - ], - "bytecode": { - "object": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220771bfbbd3aef1a4b5679025d96607253a866fbd686d68976350682eacd35f38b64736f6c63430008160033", - "sourceMap": "515:8767:60:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;515:8767:60;;;;;;;;;;;;;;;;;", - "linkReferences": {} - }, - "deployedBytecode": { - "object": "0x73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220771bfbbd3aef1a4b5679025d96607253a866fbd686d68976350682eacd35f38b64736f6c63430008160033", - "sourceMap": "515:8767:60:-:0;;;;;;;;", - "linkReferences": {} - }, - "methodIdentifiers": {}, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"optionType\",\"type\":\"uint16\"}],\"name\":\"InvalidOptionType\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"max\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actual\",\"type\":\"uint256\"}],\"name\":\"InvalidSize\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Library for building and encoding various message options.\",\"kind\":\"dev\",\"methods\":{},\"title\":\"OptionsBuilder\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/libs/OptionsBuilder.sol\":\"OptionsBuilder\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/libs/ExecutorOptions.sol\":{\"keccak256\":\"0x441b723f2f597be2ec2bb361fcf3f11852c23534db1cfa7d2ffff7e61d228e3c\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://636817d20f90f75032e35376256cf5f4d2a047d6541b45f644d82a2e4dc8f1eb\",\"dweb:/ipfs/QmcEFRxCmmm9hKbqi7Powj6ATbw4JXXJW4rxfwMcxWsDnT\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/DVNOptions.sol\":{\"keccak256\":\"0x2beee03cdf59a9bc72e94d08b69cb2e908725f4ceabb48651494938100e21e35\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://d88e121a39e74309f3575417df2318e2d2ee8bc8314e68dbf78544a9c393b141\",\"dweb:/ipfs/QmRojBRAyENK21HnjevAWeoZZxtWkYZubB9Y78vCJPYeU6\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/CalldataBytesLib.sol\":{\"keccak256\":\"0x5c0db161cef6603c3b256d4220f489419e7478ef775e52a80056654129c61875\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://a33245d0fdd3992bb56b31d1840108d36bb46c8d617b659ef1af8dd7ed86302d\",\"dweb:/ipfs/QmWyBqT7Tdrfn5zz9xYM3V1PBtfAZAVwwCrrKwwfi3wMQK\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/BitMaps.sol\":{\"keccak256\":\"0xaad3c72ef43480d2253fd48b394e8fb7286d009991d2bc4e61be58ce48ac5ee9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b8c02b14f954416ba2148b389c87da8378ac8dd16ba3d458cbbfba8b0fd8639f\",\"dweb:/ipfs/Qmd2EEQhYL2VmgJi1V4uiHM2WcYxF9iBtxSgcFkbS21rQD\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/oapp/libs/OptionsBuilder.sol\":{\"keccak256\":\"0xd40d91e8173cdb5bb821b4594f806b99344d5fd605bc6f2cf0fb21d5ab2500e3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1278c26c077e3b1ee6a5f25385a3c00eaecc0efd7b622facac5569d1e47ac42e\",\"dweb:/ipfs/QmQZyrJV7UoUfdY1KYNJ2ru27Khtg4Z8v8XE9KNHFtsvA4\"]},\"node_modules/@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]},\"node_modules/solidity-bytes-utils/contracts/BytesLib.sol\":{\"keccak256\":\"0xa5b10f04797d5a10a9ba07855108b6bd695940e6a3d128927b2f74a0d359868a\",\"license\":\"Unlicense\",\"urls\":[\"bzz-raw://a38d7680aacbb18dae659876b396b73bcc8f759672213f8a0efc4129e2648535\",\"dweb:/ipfs/QmfKFnwpTEGAnbRnZxMuv3mRCG9S9WMjFhFL23bftBT2Jq\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { - "inputs": [ - { "internalType": "uint16", "name": "optionType", "type": "uint16" } - ], - "type": "error", - "name": "InvalidOptionType" - }, - { - "inputs": [ - { "internalType": "uint256", "name": "max", "type": "uint256" }, - { "internalType": "uint256", "name": "actual", "type": "uint256" } - ], - "type": "error", - "name": "InvalidSize" - } - ], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/libs/OptionsBuilder.sol": "OptionsBuilder" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/libs/ExecutorOptions.sol": { - "keccak256": "0x441b723f2f597be2ec2bb361fcf3f11852c23534db1cfa7d2ffff7e61d228e3c", - "urls": [ - "bzz-raw://636817d20f90f75032e35376256cf5f4d2a047d6541b45f644d82a2e4dc8f1eb", - "dweb:/ipfs/QmcEFRxCmmm9hKbqi7Powj6ATbw4JXXJW4rxfwMcxWsDnT" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/DVNOptions.sol": { - "keccak256": "0x2beee03cdf59a9bc72e94d08b69cb2e908725f4ceabb48651494938100e21e35", - "urls": [ - "bzz-raw://d88e121a39e74309f3575417df2318e2d2ee8bc8314e68dbf78544a9c393b141", - "dweb:/ipfs/QmRojBRAyENK21HnjevAWeoZZxtWkYZubB9Y78vCJPYeU6" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/CalldataBytesLib.sol": { - "keccak256": "0x5c0db161cef6603c3b256d4220f489419e7478ef775e52a80056654129c61875", - "urls": [ - "bzz-raw://a33245d0fdd3992bb56b31d1840108d36bb46c8d617b659ef1af8dd7ed86302d", - "dweb:/ipfs/QmWyBqT7Tdrfn5zz9xYM3V1PBtfAZAVwwCrrKwwfi3wMQK" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/BitMaps.sol": { - "keccak256": "0xaad3c72ef43480d2253fd48b394e8fb7286d009991d2bc4e61be58ce48ac5ee9", - "urls": [ - "bzz-raw://b8c02b14f954416ba2148b389c87da8378ac8dd16ba3d458cbbfba8b0fd8639f", - "dweb:/ipfs/Qmd2EEQhYL2VmgJi1V4uiHM2WcYxF9iBtxSgcFkbS21rQD" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/libs/OptionsBuilder.sol": { - "keccak256": "0xd40d91e8173cdb5bb821b4594f806b99344d5fd605bc6f2cf0fb21d5ab2500e3", - "urls": [ - "bzz-raw://1278c26c077e3b1ee6a5f25385a3c00eaecc0efd7b622facac5569d1e47ac42e", - "dweb:/ipfs/QmQZyrJV7UoUfdY1KYNJ2ru27Khtg4Z8v8XE9KNHFtsvA4" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/math/SafeCast.sol": { - "keccak256": "0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54", - "urls": [ - "bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8", - "dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy" - ], - "license": "MIT" - }, - "node_modules/solidity-bytes-utils/contracts/BytesLib.sol": { - "keccak256": "0xa5b10f04797d5a10a9ba07855108b6bd695940e6a3d128927b2f74a0d359868a", - "urls": [ - "bzz-raw://a38d7680aacbb18dae659876b396b73bcc8f759672213f8a0efc4129e2648535", - "dweb:/ipfs/QmfKFnwpTEGAnbRnZxMuv3mRCG9S9WMjFhFL23bftBT2Jq" - ], - "license": "Unlicense" - } - }, - "version": 1 - }, - "id": 60 -} diff --git a/examples/oft-movement/out/OptionsHelper.sol/OptionsHelper.json b/examples/oft-movement/out/OptionsHelper.sol/OptionsHelper.json deleted file mode 100644 index e8102949b..000000000 --- a/examples/oft-movement/out/OptionsHelper.sol/OptionsHelper.json +++ /dev/null @@ -1,290 +0,0 @@ -{ - "abi": [ - { - "type": "function", - "name": "decodeLzComposeOption", - "inputs": [ - { "name": "_option", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [ - { "name": "index", "type": "uint16", "internalType": "uint16" }, - { "name": "gas", "type": "uint128", "internalType": "uint128" }, - { "name": "value", "type": "uint128", "internalType": "uint128" } - ], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "decodeLzReadOption", - "inputs": [ - { "name": "_option", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [ - { "name": "gas", "type": "uint128", "internalType": "uint128" }, - { "name": "size", "type": "uint32", "internalType": "uint32" }, - { "name": "value", "type": "uint128", "internalType": "uint128" } - ], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "decodeLzReceiveOption", - "inputs": [ - { "name": "_option", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [ - { "name": "gas", "type": "uint128", "internalType": "uint128" }, - { "name": "value", "type": "uint128", "internalType": "uint128" } - ], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "decodeNativeDropOption", - "inputs": [ - { "name": "_option", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [ - { "name": "amount", "type": "uint128", "internalType": "uint128" }, - { "name": "receiver", "type": "bytes32", "internalType": "bytes32" } - ], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "nextExecutorOption", - "inputs": [ - { "name": "_options", "type": "bytes", "internalType": "bytes" }, - { "name": "_cursor", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [ - { "name": "optionType", "type": "uint8", "internalType": "uint8" }, - { "name": "option", "type": "bytes", "internalType": "bytes" }, - { "name": "cursor", "type": "uint256", "internalType": "uint256" } - ], - "stateMutability": "pure" - }, - { - "type": "error", - "name": "Executor_InvalidLzComposeOption", - "inputs": [] - }, - { "type": "error", "name": "Executor_InvalidLzReadOption", "inputs": [] }, - { - "type": "error", - "name": "Executor_InvalidLzReceiveOption", - "inputs": [] - }, - { - "type": "error", - "name": "Executor_InvalidNativeDropOption", - "inputs": [] - } - ], - "bytecode": { - "object": "0x60806040526040516100109061005f565b604051809103906000f08015801561002c573d6000803e3d6000fd5b50600080546001600160a01b0319166001600160a01b039290921691909117905534801561005957600080fd5b5061006c565b6107f28061072983390190565b6106ae8061007b6000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c8063518e8ab01461005c5780636e1775e31461009e5780639751ca86146100c1578063b954fdf614610103578063f93e1d6114610135575b600080fd5b61006f61006a3660046104b3565b610168565b6040805161ffff90941684526001600160801b0392831660208501529116908201526060015b60405180910390f35b6100b16100ac3660046104f5565b610184565b6040516100959493929190610541565b6100d46100cf3660046104b3565b6101a6565b604080516001600160801b03948516815263ffffffff9093166020840152921691810191909152606001610095565b6101166101113660046104b3565b6101b5565b604080516001600160801b039093168352602083019190915201610095565b6101486101433660046104b3565b6101ce565b604080516001600160801b03938416815292909116602083015201610095565b600080600061017785856101db565b9250925092509250925092565b60003660008061019587878761024f565b935093509350935093509350935093565b600080600061017785856102a5565b6000806101c28484610310565b915091505b9250929050565b6000806101c28484610357565b60008080601284148015906101f1575060228414155b1561020f57604051638b4aa70b60e01b815260040160405180910390fd5b61021b858560006103b3565b9250610229858560026103da565b91506022841461023a576000610246565b610246858560126103da565b90509250925092565b6000368160018401816102638888846103b3565b600292909201919050610277888884610401565b94506001820161ffff8216830161029081838b8d610584565b979b909a50969850505061ffff160193505050565b60008080601484148015906102bb575060248414155b156102d957604051636f5bff2160e11b815260040160405180910390fd5b6102e5858560006103da565b92506102f385856010610426565b915060248414610304576000610246565b610246858560146103da565b60008060308314610334576040516361d0c2c760e11b815260040160405180910390fd5b610340848460006103da565b915061034e8484601061044d565b90509250929050565b6000806010831480159061036c575060208314155b1561038a57604051634796aee160e01b815260040160405180910390fd5b610396848460006103da565b9150602083146103a757600061034e565b61034e848460106103da565b6000600282016103c581848688610584565b6103ce916105ae565b60f01c95945050505050565b6000601082016103ec81848688610584565b6103f5916105de565b60801c95945050505050565b600083838381811061041557610415610615565b919091013560f81c95945050505050565b60006004820161043881848688610584565b6104419161062b565b60e01c95945050505050565b60006020820161045f81848688610584565b61046891610659565b95945050505050565b60008083601f84011261048357600080fd5b50813567ffffffffffffffff81111561049b57600080fd5b6020830191508360208285010111156101c757600080fd5b600080602083850312156104c657600080fd5b823567ffffffffffffffff8111156104dd57600080fd5b6104e985828601610471565b90969095509350505050565b60008060006040848603121561050a57600080fd5b833567ffffffffffffffff81111561052157600080fd5b61052d86828701610471565b909790965060209590950135949350505050565b60ff85168152606060208201528260608201528284608083013760006080848301015260006080601f19601f860116830101905082604083015295945050505050565b6000808585111561059457600080fd5b838611156105a157600080fd5b5050820193919092039150565b6001600160f01b031981358181169160028510156105d65780818660020360031b1b83161692505b505092915050565b6fffffffffffffffffffffffffffffffff1981358181169160108510156105d65760109490940360031b84901b1690921692915050565b634e487b7160e01b600052603260045260246000fd5b6001600160e01b031981358181169160048510156105d65760049490940360031b84901b1690921692915050565b8035602083101561067257600019602084900360031b1b165b9291505056fea26469706673582212203cb9eef9871a2f9f7f7218b46fa538d2615771ad8522df40688d27aaf078107e64736f6c63430008160033608060405234801561001057600080fd5b506107d2806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063e5c5e9a314610030575b600080fd5b61004361003e366004610529565b61005a565b6040516100519291906105eb565b60405180910390f35b6060806100678484610072565b915091509250929050565b606080600283101561009f5760405163196499c760e21b8152600060048201526024015b60405180910390fd5b60006100ae6002828688610619565b6100b791610643565b60f01c90506002600219820161021f578060005b868310156101c45760006100e460018501858a8c610619565b6100ed91610673565b60f81c9050600081900361011757604051636780cfaf60e01b815260006004820152602401610096565b8160ff1660000361012a57809150610167565b8160ff168160ff16146101675736600061014686868c8e610619565b915091506101578989868585610236565b9099509750859450919250829150505b600184019360009061017e90600301868b8d610619565b61018791610643565b60f01c905060008190036101b15760405163196499c760e21b815260048101869052602401610096565b8060020161ffff168501945050506100cb565b8287146101e75760405163196499c760e21b815260048101849052602401610096565b6002871115610218573660006101ff85858b8d610619565b915091506102108888858585610236565b909850965050505b505061022d565b61022a828787610356565b93505b50509250929050565b60608060001960ff8616016102b35786511561027557868484604051602001610261939291906106a1565b6040516020818303038152906040526102ac565b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050505b965061034b565b60011960ff86160161032d578551156102ef578584846040516020016102db939291906106a1565b604051602081830303815290604052610326565b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050505b955061034b565b604051636780cfaf60e01b815260ff86166004820152602401610096565b509495939450505050565b606060001961ffff8516016103f65760228214610386576040516301b8ca5560e31b815260040160405180910390fd5b60006103a7610399602260028688610619565b6103a2916106c9565b6104e8565b604051600160f81b60208201819052601160f01b602183015260238201526001600160801b0319608083901b1660248201529091506034016040516020818303038152906040529150506104e1565b60011961ffff8516016104c2576042821115806104135750606282115b15610431576040516360493e2b60e11b815260040160405180910390fd5b6000610444610399602260028688610619565b90506000610459610399604260228789610619565b90506000604119850161046f866042818a610619565b610478916106c9565b60405160086020938403029190911c92506104a9916001916011918391889183916031916002918b918b91016106e8565b60405160208183030381529060405293505050506104e1565b604051630417051360e41b815261ffff85166004820152602401610096565b9392505050565b60006fffffffffffffffffffffffffffffffff821115610525576040516306dfcc6560e41b81526080600482015260248101839052604401610096565b5090565b6000806020838503121561053c57600080fd5b823567ffffffffffffffff8082111561055457600080fd5b818501915085601f83011261056857600080fd5b81358181111561057757600080fd5b86602082850101111561058957600080fd5b60209290920196919550909350505050565b60005b838110156105b657818101518382015260200161059e565b50506000910152565b600081518084526105d781602086016020860161059b565b601f01601f19169290920160200192915050565b6040815260006105fe60408301856105bf565b828103602084015261061081856105bf565b95945050505050565b6000808585111561062957600080fd5b8386111561063657600080fd5b5050820193919092039150565b6001600160f01b0319813581811691600285101561066b5780818660020360031b1b83161692505b505092915050565b6001600160f81b0319813581811691600185101561066b5760019490940360031b84901b1690921692915050565b600084516106b381846020890161059b565b8201838582376000930192835250909392505050565b803560208310156106e257600019602084900360031b1b165b92915050565b60f88a811b6001600160f81b0319908116835260f08b901b6001600160f01b031916600184015289821b81166003840152608089901b6001600160801b03191660048401529087901b1660148201526000610752601583018760f01b6001600160f01b0319169052565b61076b601783018660f81b6001600160f81b0319169052565b610784601883018560801b6001600160801b0319169052565b5060288101919091526048019897505050505050505056fea2646970667358221220994aaf0c18254f983fac2634c8bb3f9ecd3d5348f39af4ed525562428cb6fc4f64736f6c63430008160033", - "sourceMap": "521:5864:70:-:0;;;738:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;710:48:70;;;-1:-1:-1;;;;;;710:48:70;-1:-1:-1;;;;;710:48:70;;;;;;;;;;521:5864;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;", - "linkReferences": {} - }, - "deployedBytecode": { - "object": "0x608060405234801561001057600080fd5b50600436106100575760003560e01c8063518e8ab01461005c5780636e1775e31461009e5780639751ca86146100c1578063b954fdf614610103578063f93e1d6114610135575b600080fd5b61006f61006a3660046104b3565b610168565b6040805161ffff90941684526001600160801b0392831660208501529116908201526060015b60405180910390f35b6100b16100ac3660046104f5565b610184565b6040516100959493929190610541565b6100d46100cf3660046104b3565b6101a6565b604080516001600160801b03948516815263ffffffff9093166020840152921691810191909152606001610095565b6101166101113660046104b3565b6101b5565b604080516001600160801b039093168352602083019190915201610095565b6101486101433660046104b3565b6101ce565b604080516001600160801b03938416815292909116602083015201610095565b600080600061017785856101db565b9250925092509250925092565b60003660008061019587878761024f565b935093509350935093509350935093565b600080600061017785856102a5565b6000806101c28484610310565b915091505b9250929050565b6000806101c28484610357565b60008080601284148015906101f1575060228414155b1561020f57604051638b4aa70b60e01b815260040160405180910390fd5b61021b858560006103b3565b9250610229858560026103da565b91506022841461023a576000610246565b610246858560126103da565b90509250925092565b6000368160018401816102638888846103b3565b600292909201919050610277888884610401565b94506001820161ffff8216830161029081838b8d610584565b979b909a50969850505061ffff160193505050565b60008080601484148015906102bb575060248414155b156102d957604051636f5bff2160e11b815260040160405180910390fd5b6102e5858560006103da565b92506102f385856010610426565b915060248414610304576000610246565b610246858560146103da565b60008060308314610334576040516361d0c2c760e11b815260040160405180910390fd5b610340848460006103da565b915061034e8484601061044d565b90509250929050565b6000806010831480159061036c575060208314155b1561038a57604051634796aee160e01b815260040160405180910390fd5b610396848460006103da565b9150602083146103a757600061034e565b61034e848460106103da565b6000600282016103c581848688610584565b6103ce916105ae565b60f01c95945050505050565b6000601082016103ec81848688610584565b6103f5916105de565b60801c95945050505050565b600083838381811061041557610415610615565b919091013560f81c95945050505050565b60006004820161043881848688610584565b6104419161062b565b60e01c95945050505050565b60006020820161045f81848688610584565b61046891610659565b95945050505050565b60008083601f84011261048357600080fd5b50813567ffffffffffffffff81111561049b57600080fd5b6020830191508360208285010111156101c757600080fd5b600080602083850312156104c657600080fd5b823567ffffffffffffffff8111156104dd57600080fd5b6104e985828601610471565b90969095509350505050565b60008060006040848603121561050a57600080fd5b833567ffffffffffffffff81111561052157600080fd5b61052d86828701610471565b909790965060209590950135949350505050565b60ff85168152606060208201528260608201528284608083013760006080848301015260006080601f19601f860116830101905082604083015295945050505050565b6000808585111561059457600080fd5b838611156105a157600080fd5b5050820193919092039150565b6001600160f01b031981358181169160028510156105d65780818660020360031b1b83161692505b505092915050565b6fffffffffffffffffffffffffffffffff1981358181169160108510156105d65760109490940360031b84901b1690921692915050565b634e487b7160e01b600052603260045260246000fd5b6001600160e01b031981358181169160048510156105d65760049490940360031b84901b1690921692915050565b8035602083101561067257600019602084900360031b1b165b9291505056fea26469706673582212203cb9eef9871a2f9f7f7218b46fa538d2615771ad8522df40688d27aaf078107e64736f6c63430008160033", - "sourceMap": "521:5864:70:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5976:204;;;;;;:::i;:::-;;:::i;:::-;;;;1010:6:132;998:19;;;980:38;;-1:-1:-1;;;;;1107:15:132;;;1102:2;1087:18;;1080:43;1159:15;;1139:18;;;1132:43;968:2;953:18;5976:204:70;;;;;;;;5349:249;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;6186:197::-;;;;;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;2484:15:132;;;2466:34;;2548:10;2536:23;;;2531:2;2516:18;;2509:51;2596:15;;2576:18;;;2569:43;;;;2401:2;2386:18;6186:197:70;2213:405:132;5786:184:70;;;;;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;2815:47:132;;;2797:66;;2894:2;2879:18;;2872:34;;;;2770:18;5786:184:70;2623:289:132;5604:176:70;;;;;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;3162:15:132;;;3144:34;;3214:15;;;;3209:2;3194:18;;3187:43;3064:18;5604:176:70;2917:319:132;5976:204:70;6068:12;6082:11;6095:13;6127:46;6165:7;;6127:37;:46::i;:::-;6120:53;;;;;;5976:204;;;;;:::o;5349:249::-;5464:16;5482:21;;5505:14;5538:53;5573:8;;5583:7;5538:34;:53::i;:::-;5531:60;;;;;;;;5349:249;;;;;;;:::o;6186:197::-;6275:11;6288;6301:13;6333:43;6368:7;;6333:34;:43::i;5786:184::-;5865:14;5881:16;5916:47;5955:7;;5916:38;:47::i;:::-;5909:54;;;;5786:184;;;;;;:::o;5604:176::-;5682:11;5695:13;5727:46;5765:7;;5727:37;:46::i;2697:371:11:-;2789:12;;;2863:2;2845:20;;;;;:44;;-1:-1:-1;2887:2:11;2869:20;;;2845:44;2841:90;;;2898:33;;-1:-1:-1;;;2898:33:11;;;;;;;;;;;2841:90;2949:16;:7;;2963:1;2949:13;:16::i;:::-;2941:24;-1:-1:-1;2981:17:11;:7;;2996:1;2981:14;:17::i;:::-;2975:23;-1:-1:-1;3034:2:11;3016:20;;:45;;3060:1;3016:45;;;3039:18;:7;;3054:2;3039:14;:18::i;:::-;3008:53;;2697:371;;;;;:::o;1357:742::-;1472:16;1490:21;1472:16;1612:1;1602:11;;1472:16;1674:22;:8;;1602:11;1674:14;:22::i;:::-;1720:1;1710:11;;;;;1660:36;-1:-1:-1;1781:21:11;:8;;1710:11;1781:13;:21::i;:::-;1768:34;-1:-1:-1;1932:1:11;1923:10;;1987:13;;;;;2023:31;1987:13;1923:10;2023:8;;:31;:::i;:::-;1357:742;;2014:40;;-1:-1:-1;2014:40:11;;-1:-1:-1;;;2068:14:11;;;;-1:-1:-1;;;1357:742:11:o;3074:380::-;3163:11;;;3244:2;3226:20;;;;;:44;;-1:-1:-1;3268:2:11;3250:20;;;3226:44;3222:87;;;3279:30;;-1:-1:-1;;;3279:30:11;;;;;;;;;;;3222:87;3325:17;:7;;3340:1;3325:14;:17::i;:::-;3319:23;-1:-1:-1;3367:17:11;:7;;3381:2;3367:13;:17::i;:::-;3352:32;-1:-1:-1;3420:2:11;3402:20;;:45;;3446:1;3402:45;;;3425:18;:7;;3440:2;3425:14;:18::i;2420:271::-;2499:14;;2565:2;2547:20;;2543:67;;2576:34;;-1:-1:-1;;;2576:34:11;;;;;;;;;;;2543:67;2629:17;:7;;2644:1;2629:14;:17::i;:::-;2620:26;-1:-1:-1;2667:17:11;:7;;2681:2;2667:13;:17::i;:::-;2656:28;;2420:271;;;;;:::o;2105:309::-;2183:11;;2243:2;2225:20;;;;;:44;;-1:-1:-1;2267:2:11;2249:20;;;2225:44;2221:90;;;2278:33;;-1:-1:-1;;;2278:33:11;;;;;;;;;;;2221:90;2327:17;:7;;2342:1;2327:14;:17::i;:::-;2321:23;-1:-1:-1;2380:2:11;2362:20;;:45;;2406:1;2362:45;;;2385:18;:7;;2400:2;2385:14;:18::i;229:215:41:-;306:6;371:1;362:10;;407:18;362:10;:6;407;;:18;:::i;:::-;400:26;;;:::i;:::-;393:34;;;229:215;-1:-1:-1;;;;;229:215:41:o;892:220::-;970:7;1036:2;1027:11;;1075:18;1027:11;:6;1075;;:18;:::i;:::-;1067:27;;;:::i;:::-;1059:36;;;892:220;-1:-1:-1;;;;;892:220:41:o;95:128::-;171:5;201:6;;208;201:14;;;;;;;:::i;:::-;;;;;;;;;95:128;-1:-1:-1;;;;;95:128:41:o;450:215::-;527:6;592:1;583:10;;628:18;583:10;:6;628;;:18;:::i;:::-;621:26;;;:::i;:::-;614:34;;;450:215;-1:-1:-1;;;;;450:215:41:o;1570:210::-;1647:7;1713:2;1704:11;;1744:18;1704:11;:6;1744;;:18;:::i;:::-;1736:27;;;:::i;:::-;1729:34;1570:210;-1:-1:-1;;;;;1570:210:41:o;14:347:132:-;65:8;75:6;129:3;122:4;114:6;110:17;106:27;96:55;;147:1;144;137:12;96:55;-1:-1:-1;170:20:132;;213:18;202:30;;199:50;;;245:1;242;235:12;199:50;282:4;274:6;270:17;258:29;;334:3;327:4;318:6;310;306:19;302:30;299:39;296:59;;;351:1;348;341:12;366:409;436:6;444;497:2;485:9;476:7;472:23;468:32;465:52;;;513:1;510;503:12;465:52;553:9;540:23;586:18;578:6;575:30;572:50;;;618:1;615;608:12;572:50;657:58;707:7;698:6;687:9;683:22;657:58;:::i;:::-;734:8;;631:84;;-1:-1:-1;366:409:132;-1:-1:-1;;;;366:409:132:o;1186:477::-;1265:6;1273;1281;1334:2;1322:9;1313:7;1309:23;1305:32;1302:52;;;1350:1;1347;1340:12;1302:52;1390:9;1377:23;1423:18;1415:6;1412:30;1409:50;;;1455:1;1452;1445:12;1409:50;1494:58;1544:7;1535:6;1524:9;1520:22;1494:58;:::i;:::-;1571:8;;1468:84;;-1:-1:-1;1653:2:132;1638:18;;;;1625:32;;1186:477;-1:-1:-1;;;;1186:477:132:o;1668:540::-;1889:4;1881:6;1877:17;1866:9;1859:36;1931:2;1926;1915:9;1911:18;1904:30;1970:6;1965:2;1954:9;1950:18;1943:34;2028:6;2020;2014:3;2003:9;1999:19;1986:49;2085:1;2079:3;2070:6;2059:9;2055:22;2051:32;2044:43;1840:4;2155:3;2148:2;2144:7;2139:2;2131:6;2127:15;2123:29;2112:9;2108:45;2104:55;2096:63;;2195:6;2190:2;2179:9;2175:18;2168:34;1668:540;;;;;;;:::o;3241:331::-;3346:9;3357;3399:8;3387:10;3384:24;3381:44;;;3421:1;3418;3411:12;3381:44;3450:6;3440:8;3437:20;3434:40;;;3470:1;3467;3460:12;3434:40;-1:-1:-1;;3496:23:132;;;3541:25;;;;;-1:-1:-1;3241:331:132:o;3577:318::-;-1:-1:-1;;;;;;3697:19:132;;3768:11;;;;3799:1;3791:10;;3788:101;;;3876:2;3870;3863:3;3860:1;3856:11;3853:1;3849:19;3845:28;3841:2;3837:37;3833:46;3824:55;;3788:101;;;3577:318;;;;:::o;3900:345::-;-1:-1:-1;;4021:19:132;;4116:11;;;;4147:2;4139:11;;4136:103;;;4209:2;4205:12;;;;4202:1;4198:20;4194:29;;;4186:38;4182:47;;;;3900:345;-1:-1:-1;;3900:345:132:o;4250:127::-;4311:10;4306:3;4302:20;4299:1;4292:31;4342:4;4339:1;4332:15;4366:4;4363:1;4356:15;4382:323;-1:-1:-1;;;;;;4502:19:132;;4578:11;;;;4609:1;4601:10;;4598:101;;;4670:1;4666:11;;;;4663:1;4659:19;4655:28;;;4647:37;4643:46;;;;4382:323;-1:-1:-1;;4382:323:132:o;4710:255::-;4830:19;;4869:2;4861:11;;4858:101;;;-1:-1:-1;;4930:2:132;4926:12;;;4923:1;4919:20;4915:33;4904:45;4858:101;4710:255;;;;:::o", - "linkReferences": {} - }, - "methodIdentifiers": { - "decodeLzComposeOption(bytes)": "518e8ab0", - "decodeLzReadOption(bytes)": "9751ca86", - "decodeLzReceiveOption(bytes)": "f93e1d61", - "decodeNativeDropOption(bytes)": "b954fdf6", - "nextExecutorOption(bytes,uint256)": "6e1775e3" - }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"Executor_InvalidLzComposeOption\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Executor_InvalidLzReadOption\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Executor_InvalidLzReceiveOption\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Executor_InvalidNativeDropOption\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_option\",\"type\":\"bytes\"}],\"name\":\"decodeLzComposeOption\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"index\",\"type\":\"uint16\"},{\"internalType\":\"uint128\",\"name\":\"gas\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_option\",\"type\":\"bytes\"}],\"name\":\"decodeLzReadOption\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"gas\",\"type\":\"uint128\"},{\"internalType\":\"uint32\",\"name\":\"size\",\"type\":\"uint32\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_option\",\"type\":\"bytes\"}],\"name\":\"decodeLzReceiveOption\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"gas\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_option\",\"type\":\"bytes\"}],\"name\":\"decodeNativeDropOption\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"amount\",\"type\":\"uint128\"},{\"internalType\":\"bytes32\",\"name\":\"receiver\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_options\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_cursor\",\"type\":\"uint256\"}],\"name\":\"nextExecutorOption\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"optionType\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"option\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"cursor\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"stateVariables\":{\"ulnOptions\":{\"details\":\"For backwards compatibility reasons, we'll keep this initialization hereAny new tests should use the _setUpUlnOptions function below\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/OptionsHelper.sol\":\"OptionsHelper\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/libs/ExecutorOptions.sol\":{\"keccak256\":\"0x441b723f2f597be2ec2bb361fcf3f11852c23534db1cfa7d2ffff7e61d228e3c\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://636817d20f90f75032e35376256cf5f4d2a047d6541b45f644d82a2e4dc8f1eb\",\"dweb:/ipfs/QmcEFRxCmmm9hKbqi7Powj6ATbw4JXXJW4rxfwMcxWsDnT\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/DVNOptions.sol\":{\"keccak256\":\"0x2beee03cdf59a9bc72e94d08b69cb2e908725f4ceabb48651494938100e21e35\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://d88e121a39e74309f3575417df2318e2d2ee8bc8314e68dbf78544a9c393b141\",\"dweb:/ipfs/QmRojBRAyENK21HnjevAWeoZZxtWkYZubB9Y78vCJPYeU6\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/UlnOptions.sol\":{\"keccak256\":\"0x5df07fef16b20767f7524c367d90f696c12e8ce0e4fde7aecc9d83fb2b6b0e27\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://0997203f57d736e56ebb3d736550f1c7ff7950c8df0574c7abe95e22f847b850\",\"dweb:/ipfs/QmZBjkH1vaPLyN3Jx9kGfVZKuTdfVWJfJVLSPok8SpjGbT\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/CalldataBytesLib.sol\":{\"keccak256\":\"0x5c0db161cef6603c3b256d4220f489419e7478ef775e52a80056654129c61875\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://a33245d0fdd3992bb56b31d1840108d36bb46c8d617b659ef1af8dd7ed86302d\",\"dweb:/ipfs/QmWyBqT7Tdrfn5zz9xYM3V1PBtfAZAVwwCrrKwwfi3wMQK\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/BitMaps.sol\":{\"keccak256\":\"0xaad3c72ef43480d2253fd48b394e8fb7286d009991d2bc4e61be58ce48ac5ee9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b8c02b14f954416ba2148b389c87da8378ac8dd16ba3d458cbbfba8b0fd8639f\",\"dweb:/ipfs/Qmd2EEQhYL2VmgJi1V4uiHM2WcYxF9iBtxSgcFkbS21rQD\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/ExecutorOptions.sol\":{\"keccak256\":\"0x621c6090fc432f94a99f677a95d72b75f56db89ddc5fc870669777a313587c28\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://69086166f16d29e30c5eb9ca2f97afb27569afe619807d79736833a809a512d2\",\"dweb:/ipfs/QmcZqXjFuVdTrfbteKBF3GuEpjVFZ2YNZTa3J87dyLsqav\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/OptionsHelper.sol\":{\"keccak256\":\"0x729ce2290d16a45a16ad936263803db6a6bebcfba5c063ebe0f0fd284ba828c0\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://7494875394fc968684761b22bb5fe05789f8d84ba07b2e0ab579ce0afe7aa973\",\"dweb:/ipfs/QmZNrexRXL3ef3UnES5e8JcdyMJ5HVftwGKQjGC5CwNg9Q\"]},\"node_modules/@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]},\"node_modules/solidity-bytes-utils/contracts/BytesLib.sol\":{\"keccak256\":\"0xa5b10f04797d5a10a9ba07855108b6bd695940e6a3d128927b2f74a0d359868a\",\"license\":\"Unlicense\",\"urls\":[\"bzz-raw://a38d7680aacbb18dae659876b396b73bcc8f759672213f8a0efc4129e2648535\",\"dweb:/ipfs/QmfKFnwpTEGAnbRnZxMuv3mRCG9S9WMjFhFL23bftBT2Jq\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { - "inputs": [], - "type": "error", - "name": "Executor_InvalidLzComposeOption" - }, - { - "inputs": [], - "type": "error", - "name": "Executor_InvalidLzReadOption" - }, - { - "inputs": [], - "type": "error", - "name": "Executor_InvalidLzReceiveOption" - }, - { - "inputs": [], - "type": "error", - "name": "Executor_InvalidNativeDropOption" - }, - { - "inputs": [ - { "internalType": "bytes", "name": "_option", "type": "bytes" } - ], - "stateMutability": "pure", - "type": "function", - "name": "decodeLzComposeOption", - "outputs": [ - { "internalType": "uint16", "name": "index", "type": "uint16" }, - { "internalType": "uint128", "name": "gas", "type": "uint128" }, - { "internalType": "uint128", "name": "value", "type": "uint128" } - ] - }, - { - "inputs": [ - { "internalType": "bytes", "name": "_option", "type": "bytes" } - ], - "stateMutability": "pure", - "type": "function", - "name": "decodeLzReadOption", - "outputs": [ - { "internalType": "uint128", "name": "gas", "type": "uint128" }, - { "internalType": "uint32", "name": "size", "type": "uint32" }, - { "internalType": "uint128", "name": "value", "type": "uint128" } - ] - }, - { - "inputs": [ - { "internalType": "bytes", "name": "_option", "type": "bytes" } - ], - "stateMutability": "pure", - "type": "function", - "name": "decodeLzReceiveOption", - "outputs": [ - { "internalType": "uint128", "name": "gas", "type": "uint128" }, - { "internalType": "uint128", "name": "value", "type": "uint128" } - ] - }, - { - "inputs": [ - { "internalType": "bytes", "name": "_option", "type": "bytes" } - ], - "stateMutability": "pure", - "type": "function", - "name": "decodeNativeDropOption", - "outputs": [ - { "internalType": "uint128", "name": "amount", "type": "uint128" }, - { "internalType": "bytes32", "name": "receiver", "type": "bytes32" } - ] - }, - { - "inputs": [ - { "internalType": "bytes", "name": "_options", "type": "bytes" }, - { "internalType": "uint256", "name": "_cursor", "type": "uint256" } - ], - "stateMutability": "pure", - "type": "function", - "name": "nextExecutorOption", - "outputs": [ - { "internalType": "uint8", "name": "optionType", "type": "uint8" }, - { "internalType": "bytes", "name": "option", "type": "bytes" }, - { "internalType": "uint256", "name": "cursor", "type": "uint256" } - ] - } - ], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/OptionsHelper.sol": "OptionsHelper" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/libs/ExecutorOptions.sol": { - "keccak256": "0x441b723f2f597be2ec2bb361fcf3f11852c23534db1cfa7d2ffff7e61d228e3c", - "urls": [ - "bzz-raw://636817d20f90f75032e35376256cf5f4d2a047d6541b45f644d82a2e4dc8f1eb", - "dweb:/ipfs/QmcEFRxCmmm9hKbqi7Powj6ATbw4JXXJW4rxfwMcxWsDnT" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/DVNOptions.sol": { - "keccak256": "0x2beee03cdf59a9bc72e94d08b69cb2e908725f4ceabb48651494938100e21e35", - "urls": [ - "bzz-raw://d88e121a39e74309f3575417df2318e2d2ee8bc8314e68dbf78544a9c393b141", - "dweb:/ipfs/QmRojBRAyENK21HnjevAWeoZZxtWkYZubB9Y78vCJPYeU6" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/UlnOptions.sol": { - "keccak256": "0x5df07fef16b20767f7524c367d90f696c12e8ce0e4fde7aecc9d83fb2b6b0e27", - "urls": [ - "bzz-raw://0997203f57d736e56ebb3d736550f1c7ff7950c8df0574c7abe95e22f847b850", - "dweb:/ipfs/QmZBjkH1vaPLyN3Jx9kGfVZKuTdfVWJfJVLSPok8SpjGbT" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/CalldataBytesLib.sol": { - "keccak256": "0x5c0db161cef6603c3b256d4220f489419e7478ef775e52a80056654129c61875", - "urls": [ - "bzz-raw://a33245d0fdd3992bb56b31d1840108d36bb46c8d617b659ef1af8dd7ed86302d", - "dweb:/ipfs/QmWyBqT7Tdrfn5zz9xYM3V1PBtfAZAVwwCrrKwwfi3wMQK" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/BitMaps.sol": { - "keccak256": "0xaad3c72ef43480d2253fd48b394e8fb7286d009991d2bc4e61be58ce48ac5ee9", - "urls": [ - "bzz-raw://b8c02b14f954416ba2148b389c87da8378ac8dd16ba3d458cbbfba8b0fd8639f", - "dweb:/ipfs/Qmd2EEQhYL2VmgJi1V4uiHM2WcYxF9iBtxSgcFkbS21rQD" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/ExecutorOptions.sol": { - "keccak256": "0x621c6090fc432f94a99f677a95d72b75f56db89ddc5fc870669777a313587c28", - "urls": [ - "bzz-raw://69086166f16d29e30c5eb9ca2f97afb27569afe619807d79736833a809a512d2", - "dweb:/ipfs/QmcZqXjFuVdTrfbteKBF3GuEpjVFZ2YNZTa3J87dyLsqav" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/OptionsHelper.sol": { - "keccak256": "0x729ce2290d16a45a16ad936263803db6a6bebcfba5c063ebe0f0fd284ba828c0", - "urls": [ - "bzz-raw://7494875394fc968684761b22bb5fe05789f8d84ba07b2e0ab579ce0afe7aa973", - "dweb:/ipfs/QmZNrexRXL3ef3UnES5e8JcdyMJ5HVftwGKQjGC5CwNg9Q" - ], - "license": "UNLICENSED" - }, - "node_modules/@openzeppelin/contracts/utils/math/SafeCast.sol": { - "keccak256": "0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54", - "urls": [ - "bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8", - "dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy" - ], - "license": "MIT" - }, - "node_modules/solidity-bytes-utils/contracts/BytesLib.sol": { - "keccak256": "0xa5b10f04797d5a10a9ba07855108b6bd695940e6a3d128927b2f74a0d359868a", - "urls": [ - "bzz-raw://a38d7680aacbb18dae659876b396b73bcc8f759672213f8a0efc4129e2648535", - "dweb:/ipfs/QmfKFnwpTEGAnbRnZxMuv3mRCG9S9WMjFhFL23bftBT2Jq" - ], - "license": "Unlicense" - } - }, - "version": 1 - }, - "id": 70 -} diff --git a/examples/oft-movement/out/OptionsHelper.sol/UlnOptionsMock.json b/examples/oft-movement/out/OptionsHelper.sol/UlnOptionsMock.json deleted file mode 100644 index f1fe7fa18..000000000 --- a/examples/oft-movement/out/OptionsHelper.sol/UlnOptionsMock.json +++ /dev/null @@ -1,226 +0,0 @@ -{ - "abi": [ - { - "type": "function", - "name": "decode", - "inputs": [ - { "name": "_options", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [ - { "name": "executorOptions", "type": "bytes", "internalType": "bytes" }, - { "name": "dvnOptions", "type": "bytes", "internalType": "bytes" } - ], - "stateMutability": "pure" - }, - { - "type": "error", - "name": "LZ_ULN_InvalidLegacyType1Option", - "inputs": [] - }, - { - "type": "error", - "name": "LZ_ULN_InvalidLegacyType2Option", - "inputs": [] - }, - { - "type": "error", - "name": "LZ_ULN_InvalidWorkerId", - "inputs": [ - { "name": "workerId", "type": "uint8", "internalType": "uint8" } - ] - }, - { - "type": "error", - "name": "LZ_ULN_InvalidWorkerOptions", - "inputs": [ - { "name": "cursor", "type": "uint256", "internalType": "uint256" } - ] - }, - { - "type": "error", - "name": "LZ_ULN_UnsupportedOptionType", - "inputs": [ - { "name": "optionType", "type": "uint16", "internalType": "uint16" } - ] - }, - { - "type": "error", - "name": "SafeCastOverflowedUintDowncast", - "inputs": [ - { "name": "bits", "type": "uint8", "internalType": "uint8" }, - { "name": "value", "type": "uint256", "internalType": "uint256" } - ] - } - ], - "bytecode": { - "object": "0x608060405234801561001057600080fd5b506107d2806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063e5c5e9a314610030575b600080fd5b61004361003e366004610529565b61005a565b6040516100519291906105eb565b60405180910390f35b6060806100678484610072565b915091509250929050565b606080600283101561009f5760405163196499c760e21b8152600060048201526024015b60405180910390fd5b60006100ae6002828688610619565b6100b791610643565b60f01c90506002600219820161021f578060005b868310156101c45760006100e460018501858a8c610619565b6100ed91610673565b60f81c9050600081900361011757604051636780cfaf60e01b815260006004820152602401610096565b8160ff1660000361012a57809150610167565b8160ff168160ff16146101675736600061014686868c8e610619565b915091506101578989868585610236565b9099509750859450919250829150505b600184019360009061017e90600301868b8d610619565b61018791610643565b60f01c905060008190036101b15760405163196499c760e21b815260048101869052602401610096565b8060020161ffff168501945050506100cb565b8287146101e75760405163196499c760e21b815260048101849052602401610096565b6002871115610218573660006101ff85858b8d610619565b915091506102108888858585610236565b909850965050505b505061022d565b61022a828787610356565b93505b50509250929050565b60608060001960ff8616016102b35786511561027557868484604051602001610261939291906106a1565b6040516020818303038152906040526102ac565b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050505b965061034b565b60011960ff86160161032d578551156102ef578584846040516020016102db939291906106a1565b604051602081830303815290604052610326565b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050505b955061034b565b604051636780cfaf60e01b815260ff86166004820152602401610096565b509495939450505050565b606060001961ffff8516016103f65760228214610386576040516301b8ca5560e31b815260040160405180910390fd5b60006103a7610399602260028688610619565b6103a2916106c9565b6104e8565b604051600160f81b60208201819052601160f01b602183015260238201526001600160801b0319608083901b1660248201529091506034016040516020818303038152906040529150506104e1565b60011961ffff8516016104c2576042821115806104135750606282115b15610431576040516360493e2b60e11b815260040160405180910390fd5b6000610444610399602260028688610619565b90506000610459610399604260228789610619565b90506000604119850161046f866042818a610619565b610478916106c9565b60405160086020938403029190911c92506104a9916001916011918391889183916031916002918b918b91016106e8565b60405160208183030381529060405293505050506104e1565b604051630417051360e41b815261ffff85166004820152602401610096565b9392505050565b60006fffffffffffffffffffffffffffffffff821115610525576040516306dfcc6560e41b81526080600482015260248101839052604401610096565b5090565b6000806020838503121561053c57600080fd5b823567ffffffffffffffff8082111561055457600080fd5b818501915085601f83011261056857600080fd5b81358181111561057757600080fd5b86602082850101111561058957600080fd5b60209290920196919550909350505050565b60005b838110156105b657818101518382015260200161059e565b50506000910152565b600081518084526105d781602086016020860161059b565b601f01601f19169290920160200192915050565b6040815260006105fe60408301856105bf565b828103602084015261061081856105bf565b95945050505050565b6000808585111561062957600080fd5b8386111561063657600080fd5b5050820193919092039150565b6001600160f01b0319813581811691600285101561066b5780818660020360031b1b83161692505b505092915050565b6001600160f81b0319813581811691600185101561066b5760019490940360031b84901b1690921692915050565b600084516106b381846020890161059b565b8201838582376000930192835250909392505050565b803560208310156106e257600019602084900360031b1b165b92915050565b60f88a811b6001600160f81b0319908116835260f08b901b6001600160f01b031916600184015289821b81166003840152608089901b6001600160801b03191660048401529087901b1660148201526000610752601583018760f01b6001600160f01b0319169052565b61076b601783018660f81b6001600160f81b0319169052565b610784601883018560801b6001600160801b0319169052565b5060288101919091526048019897505050505050505056fea2646970667358221220994aaf0c18254f983fac2634c8bb3f9ecd3d5348f39af4ed525562428cb6fc4f64736f6c63430008160033", - "sourceMap": "272:247:70:-:0;;;;;;;;;;;;;;;;;;;", - "linkReferences": {} - }, - "deployedBytecode": { - "object": "0x608060405234801561001057600080fd5b506004361061002b5760003560e01c8063e5c5e9a314610030575b600080fd5b61004361003e366004610529565b61005a565b6040516100519291906105eb565b60405180910390f35b6060806100678484610072565b915091509250929050565b606080600283101561009f5760405163196499c760e21b8152600060048201526024015b60405180910390fd5b60006100ae6002828688610619565b6100b791610643565b60f01c90506002600219820161021f578060005b868310156101c45760006100e460018501858a8c610619565b6100ed91610673565b60f81c9050600081900361011757604051636780cfaf60e01b815260006004820152602401610096565b8160ff1660000361012a57809150610167565b8160ff168160ff16146101675736600061014686868c8e610619565b915091506101578989868585610236565b9099509750859450919250829150505b600184019360009061017e90600301868b8d610619565b61018791610643565b60f01c905060008190036101b15760405163196499c760e21b815260048101869052602401610096565b8060020161ffff168501945050506100cb565b8287146101e75760405163196499c760e21b815260048101849052602401610096565b6002871115610218573660006101ff85858b8d610619565b915091506102108888858585610236565b909850965050505b505061022d565b61022a828787610356565b93505b50509250929050565b60608060001960ff8616016102b35786511561027557868484604051602001610261939291906106a1565b6040516020818303038152906040526102ac565b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050505b965061034b565b60011960ff86160161032d578551156102ef578584846040516020016102db939291906106a1565b604051602081830303815290604052610326565b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050505b955061034b565b604051636780cfaf60e01b815260ff86166004820152602401610096565b509495939450505050565b606060001961ffff8516016103f65760228214610386576040516301b8ca5560e31b815260040160405180910390fd5b60006103a7610399602260028688610619565b6103a2916106c9565b6104e8565b604051600160f81b60208201819052601160f01b602183015260238201526001600160801b0319608083901b1660248201529091506034016040516020818303038152906040529150506104e1565b60011961ffff8516016104c2576042821115806104135750606282115b15610431576040516360493e2b60e11b815260040160405180910390fd5b6000610444610399602260028688610619565b90506000610459610399604260228789610619565b90506000604119850161046f866042818a610619565b610478916106c9565b60405160086020938403029190911c92506104a9916001916011918391889183916031916002918b918b91016106e8565b60405160208183030381529060405293505050506104e1565b604051630417051360e41b815261ffff85166004820152602401610096565b9392505050565b60006fffffffffffffffffffffffffffffffff821115610525576040516306dfcc6560e41b81526080600482015260248101839052604401610096565b5090565b6000806020838503121561053c57600080fd5b823567ffffffffffffffff8082111561055457600080fd5b818501915085601f83011261056857600080fd5b81358181111561057757600080fd5b86602082850101111561058957600080fd5b60209290920196919550909350505050565b60005b838110156105b657818101518382015260200161059e565b50506000910152565b600081518084526105d781602086016020860161059b565b601f01601f19169290920160200192915050565b6040815260006105fe60408301856105bf565b828103602084015261061081856105bf565b95945050505050565b6000808585111561062957600080fd5b8386111561063657600080fd5b5050820193919092039150565b6001600160f01b0319813581811691600285101561066b5780818660020360031b1b83161692505b505092915050565b6001600160f81b0319813581811691600185101561066b5760019490940360031b84901b1690921692915050565b600084516106b381846020890161059b565b8201838582376000930192835250909392505050565b803560208310156106e257600019602084900360031b1b165b92915050565b60f88a811b6001600160f81b0319908116835260f08b901b6001600160f01b031916600184015289821b81166003840152608089901b6001600160801b03191660048401529087901b1660148201526000610752601583018760f01b6001600160f01b0319169052565b61076b601783018660f81b6001600160f81b0319169052565b610784601883018560801b6001600160801b0319169052565b5060288101919091526048019897505050505050505056fea2646970667358221220994aaf0c18254f983fac2634c8bb3f9ecd3d5348f39af4ed525562428cb6fc4f64736f6c63430008160033", - "sourceMap": "272:247:70:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;335:182;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;411:28;441:23;483:27;501:8;;483:17;:27::i;:::-;476:34;;;;335:182;;;;;:::o;1135:3038:24:-;1213:28;;1373:1;1355:19;;1351:62;;;1383:30;;-1:-1:-1;;;1383:30:24;;1411:1;1383:30;;;1676:25:132;1649:18;;1383:30:24;;;;;;;;1351:62;1424:18;1459:13;1470:1;1424:18;1459:8;;:13;:::i;:::-;1452:21;;;:::i;:::-;1445:29;;;-1:-1:-1;1501:1:24;-1:-1:-1;;1700:21:24;;1696:2471;;1781:6;1765:13;2066:1412;2073:24;;;2066:1412;;;2121:14;2151:27;2176:1;2167:10;;2160:6;2151:8;;:27;:::i;:::-;2144:35;;;:::i;:::-;2138:42;;;-1:-1:-1;2218:1:24;2206:13;;;2202:51;;2228:25;;-1:-1:-1;;;2228:25:24;;2251:1;2228:25;;;2844:36:132;2817:18;;2228:25:24;2692:194:132;2202:51:24;2537:12;:17;;2553:1;2537:17;2533:681;;2597:8;2582:23;;2533:681;;;2650:12;2638:24;;:8;:24;;;2634:580;;2690:17;;2710:22;2725:6;2719:5;2710:8;;:22;:::i;:::-;2690:42;;;;2829:205;2879:15;2924:10;2964:12;3006:2;;2829:20;:205::i;:::-;2797:237;;-1:-1:-1;2797:237:24;-1:-1:-1;3136:6:24;;-1:-1:-1;3183:8:24;;-1:-1:-1;3183:8:24;;-1:-1:-1;;2634:580:24;3236:8;;;;3283:11;;3311:27;;3327:10;;3236:8;3311;;:27;:::i;:::-;3304:35;;;:::i;:::-;3297:43;;;-1:-1:-1;3374:1:24;3366:9;;;3362:57;;3384:35;;-1:-1:-1;;;3384:35:24;;;;;1676:25:132;;;1649:18;;3384:35:24;1522:185:132;3362:57:24;3451:4;3458:1;3451:8;3441:18;;;;;;2099:1379;;2066:1412;;;3580:25;;;3576:73;;3614:35;;-1:-1:-1;;;3614:35:24;;;;;1676:25:132;;;1649:18;;3614:35:24;1522:185:132;3576:73:24;3845:1;3827:19;;3823:229;;;3870:17;;3890:22;3905:6;3899:5;3890:8;;:22;:::i;:::-;3870:42;;;;3966:67;3987:15;4004:10;4016:12;4030:2;;3966:20;:67::i;:::-;3934:99;;-1:-1:-1;3934:99:24;-1:-1:-1;;;3823:229:24;1737:2329;;1696:2471;;;4114:42;4134:11;4147:8;;4114:19;:42::i;:::-;4096:60;;1696:2471;1268:2905;;1135:3038;;;;;:::o;4179:733::-;4371:12;;-1:-1:-1;;4413:38:24;;;;4409:449;;4486:23;;:28;:124;;4580:16;4598:11;;4563:47;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;4486:124;;;4533:11;;4486:124;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;4486:124:24;4467:143;;4409:449;;;-1:-1:-1;;4631:33:24;;;;4627:231;;4694:18;;:23;:82;;4751:11;4764;;4734:42;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;4694:82;;;4720:11;;4694:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;4694:82:24;4680:96;;4627:231;;;4814:33;;-1:-1:-1;;;4814:33:24;;2874:4:132;2862:17;;4814:33:24;;;2844:36:132;2817:18;;4814:33:24;2692:194:132;4627:231:24;-1:-1:-1;4875:16:24;;4893:11;;-1:-1:-1;;;;4179:733:24:o;5428:3052::-;5547:28;-1:-1:-1;;5591:21:24;;;;5587:2887;;5651:2;5632:21;;5628:67;;5662:33;;-1:-1:-1;;;5662:33:24;;;;;;;;;;;5628:67;5739:20;5762:48;5778:18;5789:6;5787:1;5778:8;;:18;:::i;:::-;5770:27;;;:::i;:::-;5762:46;:48::i;:::-;6205:239;;-1:-1:-1;;;6205:239:24;;;4596:38:132;;;-1:-1:-1;;;4650:11:132;;;4643:59;4718:11;;;4711:46;-1:-1:-1;;;;;;4794:3:132;4790:16;;;4786:62;4773:11;;;4766:83;5739:71:24;;-1:-1:-1;4865:12:132;;6205:239:24;;;;;;;;;;;;6187:257;;5614:841;5587:2887;;;-1:-1:-1;;6465:21:24;;;;6461:2013;;6560:2;6541:21;;;;:45;;-1:-1:-1;6584:2:24;6566:20;;6541:45;6537:91;;;6595:33;;-1:-1:-1;;;6595:33:24;;;;;;;;;;;6537:91;6672:20;6695:48;6711:18;6722:6;6720:1;6711:8;;:18;:::i;6695:48::-;6672:71;-1:-1:-1;6804:14:24;6821:50;6837:20;6849:7;6846:2;6837:8;;:20;:::i;6821:50::-;6804:67;-1:-1:-1;6902:16:24;-1:-1:-1;;6982:20:24;;7061:13;6982:8;7000:2;6982:8;;7061:13;:::i;:::-;7053:22;;;:::i;:::-;7909:475;;7117:1;7122:2;:16;;;7117:22;7104:36;;;;;-1:-1:-1;7909:475:24;;238:1:47;;7993:2:24;;238:1:47;;8122:12:24;;238:1:47;;8202:2:24;;351:1:47;;8338:6:24;;7104:36;;7909:475;;:::i;:::-;;;;;;;;;;;;;7891:493;;6488:1907;;;6461:2013;;;8422:41;;-1:-1:-1;;;8422:41:24;;5956:6:132;5944:19;;8422:41:24;;;5926:38:132;5899:18;;8422:41:24;5782:188:132;6461:2013:24;5428:3052;;;;;:::o;9264:218:125:-;9321:7;9352:17;9344:25;;9340:105;;;9392:42;;-1:-1:-1;;;9392:42:125;;9423:3;9392:42;;;6157:36:132;6209:18;;;6202:34;;;6130:18;;9392:42:125;5975:267:132;9340:105:125;-1:-1:-1;9469:5:125;9264:218::o;14:591:132:-;84:6;92;145:2;133:9;124:7;120:23;116:32;113:52;;;161:1;158;151:12;113:52;201:9;188:23;230:18;271:2;263:6;260:14;257:34;;;287:1;284;277:12;257:34;325:6;314:9;310:22;300:32;;370:7;363:4;359:2;355:13;351:27;341:55;;392:1;389;382:12;341:55;432:2;419:16;458:2;450:6;447:14;444:34;;;474:1;471;464:12;444:34;519:7;514:2;505:6;501:2;497:15;493:24;490:37;487:57;;;540:1;537;530:12;487:57;571:2;563:11;;;;;593:6;;-1:-1:-1;14:591:132;;-1:-1:-1;;;;14:591:132:o;610:250::-;695:1;705:113;719:6;716:1;713:13;705:113;;;795:11;;;789:18;776:11;;;769:39;741:2;734:10;705:113;;;-1:-1:-1;;852:1:132;834:16;;827:27;610:250::o;865:270::-;906:3;944:5;938:12;971:6;966:3;959:19;987:76;1056:6;1049:4;1044:3;1040:14;1033:4;1026:5;1022:16;987:76;:::i;:::-;1117:2;1096:15;-1:-1:-1;;1092:29:132;1083:39;;;;1124:4;1079:50;;865:270;-1:-1:-1;;865:270:132:o;1140:377::-;1333:2;1322:9;1315:21;1296:4;1359:44;1399:2;1388:9;1384:18;1376:6;1359:44;:::i;:::-;1451:9;1443:6;1439:22;1434:2;1423:9;1419:18;1412:50;1479:32;1504:6;1496;1479:32;:::i;:::-;1471:40;1140:377;-1:-1:-1;;;;;1140:377:132:o;1712:331::-;1817:9;1828;1870:8;1858:10;1855:24;1852:44;;;1892:1;1889;1882:12;1852:44;1921:6;1911:8;1908:20;1905:40;;;1941:1;1938;1931:12;1905:40;-1:-1:-1;;1967:23:132;;;2012:25;;;;;-1:-1:-1;1712:331:132:o;2048:318::-;-1:-1:-1;;;;;;2168:19:132;;2239:11;;;;2270:1;2262:10;;2259:101;;;2347:2;2341;2334:3;2331:1;2327:11;2324:1;2320:19;2316:28;2312:2;2308:37;2304:46;2295:55;;2259:101;;;2048:318;;;;:::o;2371:316::-;-1:-1:-1;;;;;;2491:19:132;;2560:11;;;;2591:1;2583:10;;2580:101;;;2652:1;2648:11;;;;2645:1;2641:19;2637:28;;;2629:37;2625:46;;;;2371:316;-1:-1:-1;;2371:316:132:o;3073:470::-;3258:3;3296:6;3290:13;3312:66;3371:6;3366:3;3359:4;3351:6;3347:17;3312:66;:::i;:::-;3400:16;;3453:6;3445;3400:16;3425:35;3517:1;3479:18;;3506:13;;;-1:-1:-1;3479:18:132;;3073:470;-1:-1:-1;;;3073:470:132:o;3737:255::-;3857:19;;3896:2;3888:11;;3885:101;;;-1:-1:-1;;3957:2:132;3953:12;;;3950:1;3946:20;3942:33;3931:45;3885:101;3737:255;;;;:::o;4888:889::-;5235:3;5269:16;;;-1:-1:-1;;;;;;5265:25:132;;;5253:38;;5346:3;5324:16;;;-1:-1:-1;;;;;;5320:38:132;5316:1;5307:11;;5300:59;5392:16;;;5388:25;;5384:1;5375:11;;5368:46;5451:3;5447:16;;;-1:-1:-1;;;;;;5443:62:132;5439:1;5430:11;;5423:83;5540:16;;;;5536:25;5531:2;5522:12;;5515:47;5203:3;5571:39;5606:2;5597:12;;5589:6;4198:3;4177:15;-1:-1:-1;;;;;;4173:37:132;4161:50;;4108:109;5571:39;5619:38;5653:2;5648:3;5644:12;5636:6;4086:3;4065:15;-1:-1:-1;;;;;;4061:35:132;4049:48;;3997:106;5619:38;5666:40;5702:2;5697:3;5693:12;5685:6;4296:3;4292:15;-1:-1:-1;;;;;;4288:61:132;4276:74;;4222:134;5666:40;-1:-1:-1;5731:2:132;5722:12;;5715:28;;;;5768:2;5759:12;;4888:889;-1:-1:-1;;;;;;;;4888:889:132:o", - "linkReferences": {} - }, - "methodIdentifiers": { "decode(bytes)": "e5c5e9a3" }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"LZ_ULN_InvalidLegacyType1Option\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_ULN_InvalidLegacyType2Option\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"workerId\",\"type\":\"uint8\"}],\"name\":\"LZ_ULN_InvalidWorkerId\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"cursor\",\"type\":\"uint256\"}],\"name\":\"LZ_ULN_InvalidWorkerOptions\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"optionType\",\"type\":\"uint16\"}],\"name\":\"LZ_ULN_UnsupportedOptionType\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"bits\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"SafeCastOverflowedUintDowncast\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_options\",\"type\":\"bytes\"}],\"name\":\"decode\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"executorOptions\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"dvnOptions\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"SafeCastOverflowedUintDowncast(uint8,uint256)\":[{\"details\":\"Value doesn't fit in an uint of `bits` size.\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/OptionsHelper.sol\":\"UlnOptionsMock\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/libs/ExecutorOptions.sol\":{\"keccak256\":\"0x441b723f2f597be2ec2bb361fcf3f11852c23534db1cfa7d2ffff7e61d228e3c\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://636817d20f90f75032e35376256cf5f4d2a047d6541b45f644d82a2e4dc8f1eb\",\"dweb:/ipfs/QmcEFRxCmmm9hKbqi7Powj6ATbw4JXXJW4rxfwMcxWsDnT\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/DVNOptions.sol\":{\"keccak256\":\"0x2beee03cdf59a9bc72e94d08b69cb2e908725f4ceabb48651494938100e21e35\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://d88e121a39e74309f3575417df2318e2d2ee8bc8314e68dbf78544a9c393b141\",\"dweb:/ipfs/QmRojBRAyENK21HnjevAWeoZZxtWkYZubB9Y78vCJPYeU6\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/UlnOptions.sol\":{\"keccak256\":\"0x5df07fef16b20767f7524c367d90f696c12e8ce0e4fde7aecc9d83fb2b6b0e27\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://0997203f57d736e56ebb3d736550f1c7ff7950c8df0574c7abe95e22f847b850\",\"dweb:/ipfs/QmZBjkH1vaPLyN3Jx9kGfVZKuTdfVWJfJVLSPok8SpjGbT\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/CalldataBytesLib.sol\":{\"keccak256\":\"0x5c0db161cef6603c3b256d4220f489419e7478ef775e52a80056654129c61875\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://a33245d0fdd3992bb56b31d1840108d36bb46c8d617b659ef1af8dd7ed86302d\",\"dweb:/ipfs/QmWyBqT7Tdrfn5zz9xYM3V1PBtfAZAVwwCrrKwwfi3wMQK\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/BitMaps.sol\":{\"keccak256\":\"0xaad3c72ef43480d2253fd48b394e8fb7286d009991d2bc4e61be58ce48ac5ee9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b8c02b14f954416ba2148b389c87da8378ac8dd16ba3d458cbbfba8b0fd8639f\",\"dweb:/ipfs/Qmd2EEQhYL2VmgJi1V4uiHM2WcYxF9iBtxSgcFkbS21rQD\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/ExecutorOptions.sol\":{\"keccak256\":\"0x621c6090fc432f94a99f677a95d72b75f56db89ddc5fc870669777a313587c28\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://69086166f16d29e30c5eb9ca2f97afb27569afe619807d79736833a809a512d2\",\"dweb:/ipfs/QmcZqXjFuVdTrfbteKBF3GuEpjVFZ2YNZTa3J87dyLsqav\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/OptionsHelper.sol\":{\"keccak256\":\"0x729ce2290d16a45a16ad936263803db6a6bebcfba5c063ebe0f0fd284ba828c0\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://7494875394fc968684761b22bb5fe05789f8d84ba07b2e0ab579ce0afe7aa973\",\"dweb:/ipfs/QmZNrexRXL3ef3UnES5e8JcdyMJ5HVftwGKQjGC5CwNg9Q\"]},\"node_modules/@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]},\"node_modules/solidity-bytes-utils/contracts/BytesLib.sol\":{\"keccak256\":\"0xa5b10f04797d5a10a9ba07855108b6bd695940e6a3d128927b2f74a0d359868a\",\"license\":\"Unlicense\",\"urls\":[\"bzz-raw://a38d7680aacbb18dae659876b396b73bcc8f759672213f8a0efc4129e2648535\",\"dweb:/ipfs/QmfKFnwpTEGAnbRnZxMuv3mRCG9S9WMjFhFL23bftBT2Jq\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { - "inputs": [], - "type": "error", - "name": "LZ_ULN_InvalidLegacyType1Option" - }, - { - "inputs": [], - "type": "error", - "name": "LZ_ULN_InvalidLegacyType2Option" - }, - { - "inputs": [ - { "internalType": "uint8", "name": "workerId", "type": "uint8" } - ], - "type": "error", - "name": "LZ_ULN_InvalidWorkerId" - }, - { - "inputs": [ - { "internalType": "uint256", "name": "cursor", "type": "uint256" } - ], - "type": "error", - "name": "LZ_ULN_InvalidWorkerOptions" - }, - { - "inputs": [ - { "internalType": "uint16", "name": "optionType", "type": "uint16" } - ], - "type": "error", - "name": "LZ_ULN_UnsupportedOptionType" - }, - { - "inputs": [ - { "internalType": "uint8", "name": "bits", "type": "uint8" }, - { "internalType": "uint256", "name": "value", "type": "uint256" } - ], - "type": "error", - "name": "SafeCastOverflowedUintDowncast" - }, - { - "inputs": [ - { "internalType": "bytes", "name": "_options", "type": "bytes" } - ], - "stateMutability": "pure", - "type": "function", - "name": "decode", - "outputs": [ - { - "internalType": "bytes", - "name": "executorOptions", - "type": "bytes" - }, - { "internalType": "bytes", "name": "dvnOptions", "type": "bytes" } - ] - } - ], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/OptionsHelper.sol": "UlnOptionsMock" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/libs/ExecutorOptions.sol": { - "keccak256": "0x441b723f2f597be2ec2bb361fcf3f11852c23534db1cfa7d2ffff7e61d228e3c", - "urls": [ - "bzz-raw://636817d20f90f75032e35376256cf5f4d2a047d6541b45f644d82a2e4dc8f1eb", - "dweb:/ipfs/QmcEFRxCmmm9hKbqi7Powj6ATbw4JXXJW4rxfwMcxWsDnT" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/DVNOptions.sol": { - "keccak256": "0x2beee03cdf59a9bc72e94d08b69cb2e908725f4ceabb48651494938100e21e35", - "urls": [ - "bzz-raw://d88e121a39e74309f3575417df2318e2d2ee8bc8314e68dbf78544a9c393b141", - "dweb:/ipfs/QmRojBRAyENK21HnjevAWeoZZxtWkYZubB9Y78vCJPYeU6" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/UlnOptions.sol": { - "keccak256": "0x5df07fef16b20767f7524c367d90f696c12e8ce0e4fde7aecc9d83fb2b6b0e27", - "urls": [ - "bzz-raw://0997203f57d736e56ebb3d736550f1c7ff7950c8df0574c7abe95e22f847b850", - "dweb:/ipfs/QmZBjkH1vaPLyN3Jx9kGfVZKuTdfVWJfJVLSPok8SpjGbT" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/CalldataBytesLib.sol": { - "keccak256": "0x5c0db161cef6603c3b256d4220f489419e7478ef775e52a80056654129c61875", - "urls": [ - "bzz-raw://a33245d0fdd3992bb56b31d1840108d36bb46c8d617b659ef1af8dd7ed86302d", - "dweb:/ipfs/QmWyBqT7Tdrfn5zz9xYM3V1PBtfAZAVwwCrrKwwfi3wMQK" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/BitMaps.sol": { - "keccak256": "0xaad3c72ef43480d2253fd48b394e8fb7286d009991d2bc4e61be58ce48ac5ee9", - "urls": [ - "bzz-raw://b8c02b14f954416ba2148b389c87da8378ac8dd16ba3d458cbbfba8b0fd8639f", - "dweb:/ipfs/Qmd2EEQhYL2VmgJi1V4uiHM2WcYxF9iBtxSgcFkbS21rQD" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/ExecutorOptions.sol": { - "keccak256": "0x621c6090fc432f94a99f677a95d72b75f56db89ddc5fc870669777a313587c28", - "urls": [ - "bzz-raw://69086166f16d29e30c5eb9ca2f97afb27569afe619807d79736833a809a512d2", - "dweb:/ipfs/QmcZqXjFuVdTrfbteKBF3GuEpjVFZ2YNZTa3J87dyLsqav" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/OptionsHelper.sol": { - "keccak256": "0x729ce2290d16a45a16ad936263803db6a6bebcfba5c063ebe0f0fd284ba828c0", - "urls": [ - "bzz-raw://7494875394fc968684761b22bb5fe05789f8d84ba07b2e0ab579ce0afe7aa973", - "dweb:/ipfs/QmZNrexRXL3ef3UnES5e8JcdyMJ5HVftwGKQjGC5CwNg9Q" - ], - "license": "UNLICENSED" - }, - "node_modules/@openzeppelin/contracts/utils/math/SafeCast.sol": { - "keccak256": "0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54", - "urls": [ - "bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8", - "dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy" - ], - "license": "MIT" - }, - "node_modules/solidity-bytes-utils/contracts/BytesLib.sol": { - "keccak256": "0xa5b10f04797d5a10a9ba07855108b6bd695940e6a3d128927b2f74a0d359868a", - "urls": [ - "bzz-raw://a38d7680aacbb18dae659876b396b73bcc8f759672213f8a0efc4129e2648535", - "dweb:/ipfs/QmfKFnwpTEGAnbRnZxMuv3mRCG9S9WMjFhFL23bftBT2Jq" - ], - "license": "Unlicense" - } - }, - "version": 1 - }, - "id": 70 -} diff --git a/examples/oft-movement/out/Ownable.sol/Ownable.json b/examples/oft-movement/out/Ownable.sol/Ownable.json deleted file mode 100644 index bacb6de1a..000000000 --- a/examples/oft-movement/out/Ownable.sol/Ownable.json +++ /dev/null @@ -1,187 +0,0 @@ -{ - "abi": [ - { - "type": "function", - "name": "owner", - "inputs": [], - "outputs": [{ "name": "", "type": "address", "internalType": "address" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "renounceOwnership", - "inputs": [], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "transferOwnership", - "inputs": [ - { "name": "newOwner", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "event", - "name": "OwnershipTransferred", - "inputs": [ - { - "name": "previousOwner", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "newOwner", - "type": "address", - "indexed": true, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "error", - "name": "OwnableInvalidOwner", - "inputs": [ - { "name": "owner", "type": "address", "internalType": "address" } - ] - }, - { - "type": "error", - "name": "OwnableUnauthorizedAccount", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ] - } - ], - "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "methodIdentifiers": { - "owner()": "8da5cb5b", - "renounceOwnership()": "715018a6", - "transferOwnership(address)": "f2fde38b" - }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Contract module which provides a basic access control mechanism, where there is an account (an owner) that can be granted exclusive access to specific functions. The initial owner is set to the address provided by the deployer. This can later be changed with {transferOwnership}. This module is used through inheritance. It will make available the modifier `onlyOwner`, which can be applied to your functions to restrict their use to the owner.\",\"errors\":{\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}]},\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Initializes the contract setting the address provided by the deployer as the initial owner.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@openzeppelin/contracts/access/Ownable.sol\":\"Ownable\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { - "inputs": [ - { "internalType": "address", "name": "owner", "type": "address" } - ], - "type": "error", - "name": "OwnableInvalidOwner" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "type": "error", - "name": "OwnableUnauthorizedAccount" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "previousOwner", - "type": "address", - "indexed": true - }, - { - "internalType": "address", - "name": "newOwner", - "type": "address", - "indexed": true - } - ], - "type": "event", - "name": "OwnershipTransferred", - "anonymous": false - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "owner", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ] - }, - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "function", - "name": "renounceOwnership" - }, - { - "inputs": [ - { "internalType": "address", "name": "newOwner", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "transferOwnership" - } - ], - "devdoc": { - "kind": "dev", - "methods": { - "constructor": { - "details": "Initializes the contract setting the address provided by the deployer as the initial owner." - }, - "owner()": { "details": "Returns the address of the current owner." }, - "renounceOwnership()": { - "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner." - }, - "transferOwnership(address)": { - "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." - } - }, - "version": 1 - }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@openzeppelin/contracts/access/Ownable.sol": "Ownable" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@openzeppelin/contracts/access/Ownable.sol": { - "keccak256": "0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb", - "urls": [ - "bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6", - "dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Context.sol": { - "keccak256": "0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2", - "urls": [ - "bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12", - "dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF" - ], - "license": "MIT" - } - }, - "version": 1 - }, - "id": 30 -} diff --git a/examples/oft-movement/out/Packet.sol/PacketDecoder.json b/examples/oft-movement/out/Packet.sol/PacketDecoder.json deleted file mode 100644 index eb4780010..000000000 --- a/examples/oft-movement/out/Packet.sol/PacketDecoder.json +++ /dev/null @@ -1,134 +0,0 @@ -{ - "abi": [], - "bytecode": { - "object": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212200f43df6d5d4d93a00beec2801c17e7625cd8c6f49b53a869e33f38d5a57d981f64736f6c63430008160033", - "sourceMap": "942:1527:24:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;942:1527:24;;;;;;;;;;;;;;;;;", - "linkReferences": {} - }, - "deployedBytecode": { - "object": "0x73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212200f43df6d5d4d93a00beec2801c17e7625cd8c6f49b53a869e33f38d5a57d981f64736f6c63430008160033", - "sourceMap": "942:1527:24:-:0;;;;;;;;", - "linkReferences": {} - }, - "methodIdentifiers": {}, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Library for decoding LayerZero packets.\",\"kind\":\"dev\",\"methods\":{},\"title\":\"PacketDecoder\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/oapp-evm/contracts/precrime/libs/Packet.sol\":\"PacketDecoder\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\":{\"keccak256\":\"0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bacc29fd3866af71e59cb0bdc1cf82c882a4a7f4e2652fd413c9f12649762083\",\"dweb:/ipfs/QmZh2toLnrQDWaNYhS5K4NoW7Vxd2GdZx9KA77vKEDLAqs\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol\":{\"keccak256\":\"0x5cf5f24751b4e3ea1c9c5ded07cedfdfd62566b6daaffcc0144733859c9dba0c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cae7e35007a714f007ea08045ef7c0cfa6c91fd2425b5028b2d49abad357a5f0\",\"dweb:/ipfs/QmcDBs5tsiyB35b8cwzWQWNnpkawb3uuHRaqE77Hxm2tve\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol\":{\"keccak256\":\"0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d8ff6a8a89297fa127f86b54e0db3eba1d6a6eeb4f6398d3c84d569665ac8f1b\",\"dweb:/ipfs/QmVSwhw6xFDrLRAX4RXaCM47yBaBtac4wf36DYEq6KCTvT\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol\":{\"keccak256\":\"0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7e1b245d58221d16d8b5e0f01ef3e289a24a7df1ace3b94239e4d5b954ad5927\",\"dweb:/ipfs/Qmappsgp7PCY9rSSNE9Cdn4BTRX591WfCSEgq2HxhA3z6S\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol\":{\"keccak256\":\"0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b18b23a1643fc6636c4ad9d9023e2e6ca2d3c2a4a046482d4655bff09950598d\",\"dweb:/ipfs/Qma6G5SqiovwrMPfgqTrRngK1HWW373Wkf9c6YP2NhXpPk\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol\":{\"keccak256\":\"0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5173fc9143bea314b159ca5a9adb5626659ef763bc598e27de5fa46efe3291a6\",\"dweb:/ipfs/QmSLFeMFPmVeGxT4sxRPW28ictjAS22M8rLeYRu9TXkA6D\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol\":{\"keccak256\":\"0xf1c07bc61e7b1dce195ed12d50f87980fbf2d63cac1326fd28287f55fe0ba625\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://060f10ff7afc33c1c2f2b4b5ba29231fd3c943146488084d0e4ab99fce991d97\",\"dweb:/ipfs/QmaSsefAqqEqtf8FgFUmDYMwTsAty3X1pqDb6SiFvry6B3\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol\":{\"keccak256\":\"0x2ebbcaaab3554edcd41b581f1a72ac1806afbfb8047d0d47ff098f9af30d6deb\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://2d4b2cf5c3b16dc76c6767f285b57c0af917972327b2be3f7cba5825402f5fc1\",\"dweb:/ipfs/QmQQWiHE2jKEDbjzGutSoZwtApSXYfLqZt5CxEpFj8xyvT\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol\":{\"keccak256\":\"0xc84cf1bf785977fe1fbe7566eef902c2db68d0e163813ebe6c34921754802680\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://de686666fc16fa432d4208d85cec87dc952faf3e481b683b9adf4b4610db4b09\",\"dweb:/ipfs/QmdmQeopzmxqRzi9DNB4EJDrYUXFfD7fUhnGhSni4QejUW\"]},\"node_modules/@layerzerolabs/oapp-evm/contracts/precrime/libs/Packet.sol\":{\"keccak256\":\"0xcb2fb1c5b2eb3731de78b479b9c2ab3bba326fe0b0b3a008590f18e881e457a6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f70724c61d226743c2bd8ba6c09758805e4339780978949ce5b333c106be4edc\",\"dweb:/ipfs/QmX5rV9K1N7RgTz9xtf8CDG8SrYiitGAzFh9ec2tbnEec4\"]},\"node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/oapp-evm/contracts/precrime/libs/Packet.sol": "PacketDecoder" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol": { - "keccak256": "0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3", - "urls": [ - "bzz-raw://bacc29fd3866af71e59cb0bdc1cf82c882a4a7f4e2652fd413c9f12649762083", - "dweb:/ipfs/QmZh2toLnrQDWaNYhS5K4NoW7Vxd2GdZx9KA77vKEDLAqs" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol": { - "keccak256": "0x5cf5f24751b4e3ea1c9c5ded07cedfdfd62566b6daaffcc0144733859c9dba0c", - "urls": [ - "bzz-raw://cae7e35007a714f007ea08045ef7c0cfa6c91fd2425b5028b2d49abad357a5f0", - "dweb:/ipfs/QmcDBs5tsiyB35b8cwzWQWNnpkawb3uuHRaqE77Hxm2tve" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol": { - "keccak256": "0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc", - "urls": [ - "bzz-raw://d8ff6a8a89297fa127f86b54e0db3eba1d6a6eeb4f6398d3c84d569665ac8f1b", - "dweb:/ipfs/QmVSwhw6xFDrLRAX4RXaCM47yBaBtac4wf36DYEq6KCTvT" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol": { - "keccak256": "0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972", - "urls": [ - "bzz-raw://7e1b245d58221d16d8b5e0f01ef3e289a24a7df1ace3b94239e4d5b954ad5927", - "dweb:/ipfs/Qmappsgp7PCY9rSSNE9Cdn4BTRX591WfCSEgq2HxhA3z6S" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol": { - "keccak256": "0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901", - "urls": [ - "bzz-raw://b18b23a1643fc6636c4ad9d9023e2e6ca2d3c2a4a046482d4655bff09950598d", - "dweb:/ipfs/Qma6G5SqiovwrMPfgqTrRngK1HWW373Wkf9c6YP2NhXpPk" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol": { - "keccak256": "0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e", - "urls": [ - "bzz-raw://5173fc9143bea314b159ca5a9adb5626659ef763bc598e27de5fa46efe3291a6", - "dweb:/ipfs/QmSLFeMFPmVeGxT4sxRPW28ictjAS22M8rLeYRu9TXkA6D" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol": { - "keccak256": "0xf1c07bc61e7b1dce195ed12d50f87980fbf2d63cac1326fd28287f55fe0ba625", - "urls": [ - "bzz-raw://060f10ff7afc33c1c2f2b4b5ba29231fd3c943146488084d0e4ab99fce991d97", - "dweb:/ipfs/QmaSsefAqqEqtf8FgFUmDYMwTsAty3X1pqDb6SiFvry6B3" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol": { - "keccak256": "0x2ebbcaaab3554edcd41b581f1a72ac1806afbfb8047d0d47ff098f9af30d6deb", - "urls": [ - "bzz-raw://2d4b2cf5c3b16dc76c6767f285b57c0af917972327b2be3f7cba5825402f5fc1", - "dweb:/ipfs/QmQQWiHE2jKEDbjzGutSoZwtApSXYfLqZt5CxEpFj8xyvT" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol": { - "keccak256": "0xc84cf1bf785977fe1fbe7566eef902c2db68d0e163813ebe6c34921754802680", - "urls": [ - "bzz-raw://de686666fc16fa432d4208d85cec87dc952faf3e481b683b9adf4b4610db4b09", - "dweb:/ipfs/QmdmQeopzmxqRzi9DNB4EJDrYUXFfD7fUhnGhSni4QejUW" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/oapp-evm/contracts/precrime/libs/Packet.sol": { - "keccak256": "0xcb2fb1c5b2eb3731de78b479b9c2ab3bba326fe0b0b3a008590f18e881e457a6", - "urls": [ - "bzz-raw://f70724c61d226743c2bd8ba6c09758805e4339780978949ce5b333c106be4edc", - "dweb:/ipfs/QmX5rV9K1N7RgTz9xtf8CDG8SrYiitGAzFh9ec2tbnEec4" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol": { - "keccak256": "0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8", - "urls": [ - "bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621", - "dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL" - ], - "license": "MIT" - } - }, - "version": 1 - }, - "id": 24 -} diff --git a/examples/oft-movement/out/PacketV1Codec.sol/PacketV1Codec.json b/examples/oft-movement/out/PacketV1Codec.sol/PacketV1Codec.json deleted file mode 100644 index 59b5322de..000000000 --- a/examples/oft-movement/out/PacketV1Codec.sol/PacketV1Codec.json +++ /dev/null @@ -1,126 +0,0 @@ -{ - "abi": [], - "bytecode": { - "object": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212206ecdf3f1fbaf9605bb5b7d461157c325184d7142df8dab4a86a62bb620ce313464736f6c63430008160033", - "sourceMap": "179:3486:11:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;179:3486:11;;;;;;;;;;;;;;;;;", - "linkReferences": {} - }, - "deployedBytecode": { - "object": "0x73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212206ecdf3f1fbaf9605bb5b7d461157c325184d7142df8dab4a86a62bb620ce313464736f6c63430008160033", - "sourceMap": "179:3486:11:-:0;;;;;;;;", - "linkReferences": {} - }, - "methodIdentifiers": {}, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol\":\"PacketV1Codec\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\":{\"keccak256\":\"0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bacc29fd3866af71e59cb0bdc1cf82c882a4a7f4e2652fd413c9f12649762083\",\"dweb:/ipfs/QmZh2toLnrQDWaNYhS5K4NoW7Vxd2GdZx9KA77vKEDLAqs\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol\":{\"keccak256\":\"0x5cf5f24751b4e3ea1c9c5ded07cedfdfd62566b6daaffcc0144733859c9dba0c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cae7e35007a714f007ea08045ef7c0cfa6c91fd2425b5028b2d49abad357a5f0\",\"dweb:/ipfs/QmcDBs5tsiyB35b8cwzWQWNnpkawb3uuHRaqE77Hxm2tve\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol\":{\"keccak256\":\"0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d8ff6a8a89297fa127f86b54e0db3eba1d6a6eeb4f6398d3c84d569665ac8f1b\",\"dweb:/ipfs/QmVSwhw6xFDrLRAX4RXaCM47yBaBtac4wf36DYEq6KCTvT\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol\":{\"keccak256\":\"0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7e1b245d58221d16d8b5e0f01ef3e289a24a7df1ace3b94239e4d5b954ad5927\",\"dweb:/ipfs/Qmappsgp7PCY9rSSNE9Cdn4BTRX591WfCSEgq2HxhA3z6S\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol\":{\"keccak256\":\"0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b18b23a1643fc6636c4ad9d9023e2e6ca2d3c2a4a046482d4655bff09950598d\",\"dweb:/ipfs/Qma6G5SqiovwrMPfgqTrRngK1HWW373Wkf9c6YP2NhXpPk\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol\":{\"keccak256\":\"0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5173fc9143bea314b159ca5a9adb5626659ef763bc598e27de5fa46efe3291a6\",\"dweb:/ipfs/QmSLFeMFPmVeGxT4sxRPW28ictjAS22M8rLeYRu9TXkA6D\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol\":{\"keccak256\":\"0xf1c07bc61e7b1dce195ed12d50f87980fbf2d63cac1326fd28287f55fe0ba625\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://060f10ff7afc33c1c2f2b4b5ba29231fd3c943146488084d0e4ab99fce991d97\",\"dweb:/ipfs/QmaSsefAqqEqtf8FgFUmDYMwTsAty3X1pqDb6SiFvry6B3\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol\":{\"keccak256\":\"0x2ebbcaaab3554edcd41b581f1a72ac1806afbfb8047d0d47ff098f9af30d6deb\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://2d4b2cf5c3b16dc76c6767f285b57c0af917972327b2be3f7cba5825402f5fc1\",\"dweb:/ipfs/QmQQWiHE2jKEDbjzGutSoZwtApSXYfLqZt5CxEpFj8xyvT\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol\":{\"keccak256\":\"0xc84cf1bf785977fe1fbe7566eef902c2db68d0e163813ebe6c34921754802680\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://de686666fc16fa432d4208d85cec87dc952faf3e481b683b9adf4b4610db4b09\",\"dweb:/ipfs/QmdmQeopzmxqRzi9DNB4EJDrYUXFfD7fUhnGhSni4QejUW\"]},\"node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol": "PacketV1Codec" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol": { - "keccak256": "0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3", - "urls": [ - "bzz-raw://bacc29fd3866af71e59cb0bdc1cf82c882a4a7f4e2652fd413c9f12649762083", - "dweb:/ipfs/QmZh2toLnrQDWaNYhS5K4NoW7Vxd2GdZx9KA77vKEDLAqs" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol": { - "keccak256": "0x5cf5f24751b4e3ea1c9c5ded07cedfdfd62566b6daaffcc0144733859c9dba0c", - "urls": [ - "bzz-raw://cae7e35007a714f007ea08045ef7c0cfa6c91fd2425b5028b2d49abad357a5f0", - "dweb:/ipfs/QmcDBs5tsiyB35b8cwzWQWNnpkawb3uuHRaqE77Hxm2tve" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol": { - "keccak256": "0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc", - "urls": [ - "bzz-raw://d8ff6a8a89297fa127f86b54e0db3eba1d6a6eeb4f6398d3c84d569665ac8f1b", - "dweb:/ipfs/QmVSwhw6xFDrLRAX4RXaCM47yBaBtac4wf36DYEq6KCTvT" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol": { - "keccak256": "0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972", - "urls": [ - "bzz-raw://7e1b245d58221d16d8b5e0f01ef3e289a24a7df1ace3b94239e4d5b954ad5927", - "dweb:/ipfs/Qmappsgp7PCY9rSSNE9Cdn4BTRX591WfCSEgq2HxhA3z6S" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol": { - "keccak256": "0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901", - "urls": [ - "bzz-raw://b18b23a1643fc6636c4ad9d9023e2e6ca2d3c2a4a046482d4655bff09950598d", - "dweb:/ipfs/Qma6G5SqiovwrMPfgqTrRngK1HWW373Wkf9c6YP2NhXpPk" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol": { - "keccak256": "0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e", - "urls": [ - "bzz-raw://5173fc9143bea314b159ca5a9adb5626659ef763bc598e27de5fa46efe3291a6", - "dweb:/ipfs/QmSLFeMFPmVeGxT4sxRPW28ictjAS22M8rLeYRu9TXkA6D" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol": { - "keccak256": "0xf1c07bc61e7b1dce195ed12d50f87980fbf2d63cac1326fd28287f55fe0ba625", - "urls": [ - "bzz-raw://060f10ff7afc33c1c2f2b4b5ba29231fd3c943146488084d0e4ab99fce991d97", - "dweb:/ipfs/QmaSsefAqqEqtf8FgFUmDYMwTsAty3X1pqDb6SiFvry6B3" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol": { - "keccak256": "0x2ebbcaaab3554edcd41b581f1a72ac1806afbfb8047d0d47ff098f9af30d6deb", - "urls": [ - "bzz-raw://2d4b2cf5c3b16dc76c6767f285b57c0af917972327b2be3f7cba5825402f5fc1", - "dweb:/ipfs/QmQQWiHE2jKEDbjzGutSoZwtApSXYfLqZt5CxEpFj8xyvT" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol": { - "keccak256": "0xc84cf1bf785977fe1fbe7566eef902c2db68d0e163813ebe6c34921754802680", - "urls": [ - "bzz-raw://de686666fc16fa432d4208d85cec87dc952faf3e481b683b9adf4b4610db4b09", - "dweb:/ipfs/QmdmQeopzmxqRzi9DNB4EJDrYUXFfD7fUhnGhSni4QejUW" - ], - "license": "LZBL-1.2" - }, - "node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol": { - "keccak256": "0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8", - "urls": [ - "bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621", - "dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL" - ], - "license": "MIT" - } - }, - "version": 1 - }, - "id": 11 -} diff --git a/examples/oft-movement/out/Panic.sol/Panic.json b/examples/oft-movement/out/Panic.sol/Panic.json deleted file mode 100644 index 3d71bdbf3..000000000 --- a/examples/oft-movement/out/Panic.sol/Panic.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "abi": [], - "bytecode": { - "object": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212206c88e0631e9765b30b0206b10d57b353a645192ef528100e767b78e65cb8b5bf64736f6c63430008160033", - "sourceMap": "657:1315:119:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;657:1315:119;;;;;;;;;;;;;;;;;", - "linkReferences": {} - }, - "deployedBytecode": { - "object": "0x73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212206c88e0631e9765b30b0206b10d57b353a645192ef528100e767b78e65cb8b5bf64736f6c63430008160033", - "sourceMap": "657:1315:119:-:0;;;;;;;;", - "linkReferences": {} - }, - "methodIdentifiers": {}, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Helper library for emitting standardized panic codes. ```solidity contract Example { using Panic for uint256; // Use any of the declared internal constants function foo() { Panic.GENERIC.panic(); } // Alternatively function foo() { Panic.panic(Panic.GENERIC); } } ``` Follows the list from https://github.com/ethereum/solidity/blob/v0.8.24/libsolutil/ErrorCodes.h[libsolutil]. _Available since v5.1._\",\"kind\":\"dev\",\"methods\":{},\"stateVariables\":{\"ARRAY_OUT_OF_BOUNDS\":{\"details\":\"array out of bounds access\"},\"ASSERT\":{\"details\":\"used by the assert() builtin\"},\"DIVISION_BY_ZERO\":{\"details\":\"division or modulo by zero\"},\"EMPTY_ARRAY_POP\":{\"details\":\"empty array pop\"},\"ENUM_CONVERSION_ERROR\":{\"details\":\"enum conversion error\"},\"GENERIC\":{\"details\":\"generic / unspecified error\"},\"INVALID_INTERNAL_FUNCTION\":{\"details\":\"calling invalid internal function\"},\"RESOURCE_ERROR\":{\"details\":\"resource error (too large allocation or too large array)\"},\"STORAGE_ENCODING_ERROR\":{\"details\":\"invalid encoding in storage\"},\"UNDER_OVERFLOW\":{\"details\":\"arithmetic underflow or overflow\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@openzeppelin/contracts/utils/Panic.sol\":\"Panic\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@openzeppelin/contracts/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@openzeppelin/contracts/utils/Panic.sol": "Panic" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@openzeppelin/contracts/utils/Panic.sol": { - "keccak256": "0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a", - "urls": [ - "bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a", - "dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG" - ], - "license": "MIT" - } - }, - "version": 1 - }, - "id": 119 -} diff --git a/examples/oft-movement/out/Pausable.sol/Pausable.json b/examples/oft-movement/out/Pausable.sol/Pausable.json deleted file mode 100644 index ed64bc52d..000000000 --- a/examples/oft-movement/out/Pausable.sol/Pausable.json +++ /dev/null @@ -1,137 +0,0 @@ -{ - "abi": [ - { - "type": "function", - "name": "paused", - "inputs": [], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "event", - "name": "Paused", - "inputs": [ - { - "name": "account", - "type": "address", - "indexed": false, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "Unpaused", - "inputs": [ - { - "name": "account", - "type": "address", - "indexed": false, - "internalType": "address" - } - ], - "anonymous": false - }, - { "type": "error", "name": "EnforcedPause", "inputs": [] }, - { "type": "error", "name": "ExpectedPause", "inputs": [] } - ], - "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "methodIdentifiers": { "paused()": "5c975abb" }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"EnforcedPause\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExpectedPause\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Contract module which allows children to implement an emergency stop mechanism that can be triggered by an authorized account. This module is used through inheritance. It will make available the modifiers `whenNotPaused` and `whenPaused`, which can be applied to the functions of your contract. Note that they will not be pausable by simply including this module, only once the modifiers are put in place.\",\"errors\":{\"EnforcedPause()\":[{\"details\":\"The operation failed because the contract is paused.\"}],\"ExpectedPause()\":[{\"details\":\"The operation failed because the contract is not paused.\"}]},\"events\":{\"Paused(address)\":{\"details\":\"Emitted when the pause is triggered by `account`.\"},\"Unpaused(address)\":{\"details\":\"Emitted when the pause is lifted by `account`.\"}},\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Initializes the contract in unpaused state.\"},\"paused()\":{\"details\":\"Returns true if the contract is paused, and false otherwise.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@openzeppelin/contracts/utils/Pausable.sol\":\"Pausable\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"node_modules/@openzeppelin/contracts/utils/Pausable.sol\":{\"keccak256\":\"0xb2e5f50762c27fb4b123e3619c3c02bdcba5e515309382e5bfb6f7d6486510bd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1a4b83328c98d518a2699c2cbe9e9b055e78aa57fa8639f1b88deb8b3750b5dc\",\"dweb:/ipfs/QmXdcYj5v7zQxXFPULShHkR5p4Wa2zYuupbHnFdV3cHYtc\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { "inputs": [], "type": "error", "name": "EnforcedPause" }, - { "inputs": [], "type": "error", "name": "ExpectedPause" }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address", - "indexed": false - } - ], - "type": "event", - "name": "Paused", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address", - "indexed": false - } - ], - "type": "event", - "name": "Unpaused", - "anonymous": false - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "paused", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - } - ], - "devdoc": { - "kind": "dev", - "methods": { - "constructor": { - "details": "Initializes the contract in unpaused state." - }, - "paused()": { - "details": "Returns true if the contract is paused, and false otherwise." - } - }, - "version": 1 - }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@openzeppelin/contracts/utils/Pausable.sol": "Pausable" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@openzeppelin/contracts/utils/Context.sol": { - "keccak256": "0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2", - "urls": [ - "bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12", - "dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Pausable.sol": { - "keccak256": "0xb2e5f50762c27fb4b123e3619c3c02bdcba5e515309382e5bfb6f7d6486510bd", - "urls": [ - "bzz-raw://1a4b83328c98d518a2699c2cbe9e9b055e78aa57fa8639f1b88deb8b3750b5dc", - "dweb:/ipfs/QmXdcYj5v7zQxXFPULShHkR5p4Wa2zYuupbHnFdV3cHYtc" - ], - "license": "MIT" - } - }, - "version": 1 - }, - "id": 120 -} diff --git a/examples/oft-movement/out/PriceFeedMock.sol/PriceFeedMock.json b/examples/oft-movement/out/PriceFeedMock.sol/PriceFeedMock.json deleted file mode 100644 index afa595280..000000000 --- a/examples/oft-movement/out/PriceFeedMock.sol/PriceFeedMock.json +++ /dev/null @@ -1,1142 +0,0 @@ -{ - "abi": [ - { - "type": "constructor", - "inputs": [ - { - "name": "_priceUpdater", - "type": "address", - "internalType": "address" - } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "ARBITRUM_COMPRESSION_PERCENT", - "inputs": [], - "outputs": [{ "name": "", "type": "uint128", "internalType": "uint128" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "arbitrumPriceExt", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "tuple", - "internalType": "struct ILayerZeroPriceFeed.ArbitrumPriceExt", - "components": [ - { - "name": "gasPerL2Tx", - "type": "uint64", - "internalType": "uint64" - }, - { - "name": "gasPerL1CallDataByte", - "type": "uint32", - "internalType": "uint32" - } - ] - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "endpoint", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "contract ILayerZeroEndpointV2" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "estimateFeeByChain", - "inputs": [ - { "name": "_dstEid", "type": "uint16", "internalType": "uint16" }, - { - "name": "_callDataSize", - "type": "uint256", - "internalType": "uint256" - }, - { "name": "_gas", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [ - { "name": "fee", "type": "uint256", "internalType": "uint256" }, - { "name": "priceRatio", "type": "uint128", "internalType": "uint128" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "estimateFeeByEid", - "inputs": [ - { "name": "_dstEid", "type": "uint32", "internalType": "uint32" }, - { - "name": "_callDataSize", - "type": "uint256", - "internalType": "uint256" - }, - { "name": "_gas", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [ - { "name": "", "type": "uint256", "internalType": "uint256" }, - { "name": "", "type": "uint128", "internalType": "uint128" }, - { "name": "", "type": "uint128", "internalType": "uint128" }, - { "name": "", "type": "uint128", "internalType": "uint128" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "estimateFeeOnSend", - "inputs": [ - { "name": "_dstEid", "type": "uint32", "internalType": "uint32" }, - { - "name": "_callDataSize", - "type": "uint256", - "internalType": "uint256" - }, - { "name": "_gas", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [ - { "name": "", "type": "uint256", "internalType": "uint256" }, - { "name": "", "type": "uint128", "internalType": "uint128" }, - { "name": "", "type": "uint128", "internalType": "uint128" }, - { "name": "", "type": "uint128", "internalType": "uint128" } - ], - "stateMutability": "payable" - }, - { - "type": "function", - "name": "getFee", - "inputs": [ - { "name": "", "type": "uint32", "internalType": "uint32" }, - { "name": "", "type": "uint256", "internalType": "uint256" }, - { "name": "", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "getPrice", - "inputs": [ - { "name": "_dstEid", "type": "uint32", "internalType": "uint32" } - ], - "outputs": [ - { - "name": "price", - "type": "tuple", - "internalType": "struct ILayerZeroPriceFeed.Price", - "components": [ - { - "name": "priceRatio", - "type": "uint128", - "internalType": "uint128" - }, - { - "name": "gasPriceInUnit", - "type": "uint64", - "internalType": "uint64" - }, - { "name": "gasPerByte", "type": "uint32", "internalType": "uint32" } - ] - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getPrice", - "inputs": [ - { "name": "_dstEid", "type": "uint16", "internalType": "uint16" } - ], - "outputs": [ - { - "name": "price", - "type": "tuple", - "internalType": "struct ILayerZeroPriceFeed.Price", - "components": [ - { - "name": "priceRatio", - "type": "uint128", - "internalType": "uint128" - }, - { - "name": "gasPriceInUnit", - "type": "uint64", - "internalType": "uint64" - }, - { "name": "gasPerByte", "type": "uint32", "internalType": "uint32" } - ] - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getPriceRatioDenominator", - "inputs": [], - "outputs": [{ "name": "", "type": "uint128", "internalType": "uint128" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "nativeTokenPriceUSD", - "inputs": [], - "outputs": [{ "name": "", "type": "uint128", "internalType": "uint128" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "owner", - "inputs": [], - "outputs": [{ "name": "", "type": "address", "internalType": "address" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "priceUpdater", - "inputs": [ - { "name": "updater", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "active", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "renounceOwnership", - "inputs": [], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setArbitrumCompressionPercent", - "inputs": [ - { - "name": "_compressionPercent", - "type": "uint128", - "internalType": "uint128" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setEndpoint", - "inputs": [ - { "name": "_endpoint", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setNativeTokenPriceUSD", - "inputs": [ - { - "name": "_nativeTokenPriceUSD", - "type": "uint128", - "internalType": "uint128" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setPrice", - "inputs": [ - { - "name": "_price", - "type": "tuple[]", - "internalType": "struct ILayerZeroPriceFeed.UpdatePrice[]", - "components": [ - { "name": "eid", "type": "uint32", "internalType": "uint32" }, - { - "name": "price", - "type": "tuple", - "internalType": "struct ILayerZeroPriceFeed.Price", - "components": [ - { - "name": "priceRatio", - "type": "uint128", - "internalType": "uint128" - }, - { - "name": "gasPriceInUnit", - "type": "uint64", - "internalType": "uint64" - }, - { - "name": "gasPerByte", - "type": "uint32", - "internalType": "uint32" - } - ] - } - ] - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setPriceForArbitrum", - "inputs": [ - { - "name": "_update", - "type": "tuple", - "internalType": "struct ILayerZeroPriceFeed.UpdatePriceExt", - "components": [ - { "name": "eid", "type": "uint32", "internalType": "uint32" }, - { - "name": "price", - "type": "tuple", - "internalType": "struct ILayerZeroPriceFeed.Price", - "components": [ - { - "name": "priceRatio", - "type": "uint128", - "internalType": "uint128" - }, - { - "name": "gasPriceInUnit", - "type": "uint64", - "internalType": "uint64" - }, - { - "name": "gasPerByte", - "type": "uint32", - "internalType": "uint32" - } - ] - }, - { - "name": "extend", - "type": "tuple", - "internalType": "struct ILayerZeroPriceFeed.ArbitrumPriceExt", - "components": [ - { - "name": "gasPerL2Tx", - "type": "uint64", - "internalType": "uint64" - }, - { - "name": "gasPerL1CallDataByte", - "type": "uint32", - "internalType": "uint32" - } - ] - } - ] - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setPriceRatioDenominator", - "inputs": [ - { "name": "_denominator", "type": "uint128", "internalType": "uint128" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setPriceUpdater", - "inputs": [ - { "name": "_addr", "type": "address", "internalType": "address" }, - { "name": "_active", "type": "bool", "internalType": "bool" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "transferOwnership", - "inputs": [ - { "name": "newOwner", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "withdrawFee", - "inputs": [ - { "name": "_to", "type": "address", "internalType": "address" }, - { "name": "_amount", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "event", - "name": "OwnershipTransferred", - "inputs": [ - { - "name": "previousOwner", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "newOwner", - "type": "address", - "indexed": true, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "error", - "name": "LZ_PriceFeed_InsufficientFee", - "inputs": [ - { "name": "provided", "type": "uint256", "internalType": "uint256" }, - { "name": "required", "type": "uint256", "internalType": "uint256" } - ] - }, - { - "type": "error", - "name": "LZ_PriceFeed_NotAnOPStack", - "inputs": [ - { "name": "l2Eid", "type": "uint32", "internalType": "uint32" } - ] - }, - { "type": "error", "name": "LZ_PriceFeed_OnlyPriceUpdater", "inputs": [] }, - { - "type": "error", - "name": "OwnableInvalidOwner", - "inputs": [ - { "name": "owner", "type": "address", "internalType": "address" } - ] - }, - { - "type": "error", - "name": "OwnableUnauthorizedAccount", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ] - }, - { - "type": "error", - "name": "Transfer_NativeFailed", - "inputs": [ - { "name": "_to", "type": "address", "internalType": "address" }, - { "name": "_value", "type": "uint256", "internalType": "uint256" } - ] - }, - { "type": "error", "name": "Transfer_ToAddressIsZero", "inputs": [] } - ], - "bytecode": { - "object": "0x608060405234801561001057600080fd5b506040516114d63803806114d683398101604081905261002f9161010a565b338061005557604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b61005e816100ba565b506001600160a01b03166000908152600260205260409020805460ff1916600190811790915580546001600160801b03191668056bc75e2d6310000017905560058054602f60801b6001600160801b039190911617905561013a565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561011c57600080fd5b81516001600160a01b038116811461013357600080fd5b9392505050565b61138d806101496000396000f3fe6080604052600436106101405760003560e01c80638ca2fb08116100b6578063d350ad251161006f578063d350ad2514610441578063da26663a14610461578063dbbb415514610522578063e0ad121a14610542578063f2fde38b146105cb578063fd9be522146105eb57600080fd5b80638ca2fb08146103595780638da5cb5b1461039957806392807f58146103b7578063c1723a1d146103e9578063c1840327146103fc578063cd68b79b1461041a57600080fd5b80635d6d7ccb116101085780635d6d7ccb146102405780635e280f1114610260578063715018a6146102985780637bc3c9ab146102ad5780637dc438a4146102ea57806388a4124c1461030a57600080fd5b806311f2c343146101455780632f7cb0b41461017c5780633161b7f61461019e57806336a5beba146101be57806352a7251014610220575b600080fd5b34801561015157600080fd5b5061016961016036600461100d565b60009392505050565b6040519081526020015b60405180910390f35b34801561018857600080fd5b5061019c610197366004611057565b61060b565b005b3480156101aa57600080fd5b5061019c6101b9366004611079565b610632565b3480156101ca57600080fd5b506040805180820182526000808252602091820152815180830183526004546001600160401b03811680835263ffffffff600160401b909204821692840192835284519081529151169181019190915201610173565b34801561022c57600080fd5b5061019c61023b366004611104565b610773565b34801561024c57600080fd5b5061019c61025b366004611057565b6107a6565b34801561026c57600080fd5b50600654610280906001600160a01b031681565b6040516001600160a01b039091168152602001610173565b3480156102a457600080fd5b5061019c610819565b3480156102b957600080fd5b506102cd6102c8366004611152565b61082d565b604080519283526001600160801b03909116602083015201610173565b3480156102f657600080fd5b5061019c610305366004611170565b6108c8565b34801561031657600080fd5b5061032a61032536600461100d565b610989565b604080519485526001600160801b03938416602086015291831691840191909152166060820152608001610173565b34801561036557600080fd5b50610389610374366004611188565b60026020526000908152604090205460ff1681565b6040519015158152602001610173565b3480156103a557600080fd5b506000546001600160a01b0316610280565b3480156103c357600080fd5b506005546001600160801b03165b6040516001600160801b039091168152602001610173565b61032a6103f736600461100d565b6109ab565b34801561040857600080fd5b506001546001600160801b03166103d1565b34801561042657600080fd5b506005546103d190600160801b90046001600160801b031681565b34801561044d57600080fd5b5061019c61045c366004611057565b6109dc565b34801561046d57600080fd5b506104e861047c3660046111a3565b60408051606080820183526000808352602080840182905292840181905263ffffffff94851681526003835283902083519182018452546001600160801b0381168252600160801b81046001600160401b031692820192909252600160c01b9091049092169082015290565b6040805182516001600160801b031681526020808401516001600160401b0316908201529181015163ffffffff1690820152606001610173565b34801561052e57600080fd5b5061019c61053d366004611188565b610a06565b34801561054e57600080fd5b506104e861055d3660046111be565b60408051606080820183526000808352602080840182905292840181905261ffff949094168452600382529282902082519384018352546001600160801b03811684526001600160401b03600160801b82041691840191909152600160c01b900463ffffffff169082015290565b3480156105d757600080fd5b5061019c6105e6366004611188565b610a30565b3480156105f757600080fd5b5061019c6106063660046111d9565b610a6e565b610613610a84565b600580546001600160801b03928316600160801b029216919091179055565b336106456000546001600160a01b031690565b6001600160a01b031614610683573360009081526002602052604090205460ff166106835760405163320ae52960e01b815260040160405180910390fd5b60005b8181101561076e57368383838181106106a1576106a1611203565b60800291909101915061076590506106bc60208301836111a3565b6106ce36849003840160208501611230565b805160208083015160409384015184516060810186526001600160801b0394851681526001600160401b0392831681850190815263ffffffff9283168288019081529783166000908152600390955295909320925183549551965194166001600160c01b031990951694909417600160801b95909116949094029390931763ffffffff60c01b1916600160c01b9190921602179055565b50600101610686565b505050565b61077b610a84565b6001600160a01b03919091166000908152600260205260409020805460ff1916911515919091179055565b336107b96000546001600160a01b031690565b6001600160a01b0316146107f7573360009081526002602052604090205460ff166107f75760405163320ae52960e01b815260040160405180910390fd5b600580546001600160801b0319166001600160801b0392909216919091179055565b610821610a84565b61082b6000610ab1565b565b6000808461ffff16606e148061084857508461ffff1661279f145b8061085857508461ffff16614eaf145b156108755761086c8561ffff168585610b01565b915091506108c0565b8461ffff16606f148061088d57508461ffff16612794145b8061089d57508461ffff16614ea4145b156108b15761086c8561ffff168585610c0e565b61086c8561ffff168585610d5e565b935093915050565b336108db6000546001600160a01b031690565b6001600160a01b031614610919573360009081526002602052604090205460ff166109195760405163320ae52960e01b815260040160405180910390fd5b6109296106bc60208301836111a3565b600061093b60a08301608084016112a9565b9050600061094f60c0840160a085016111a3565b6004805463ffffffff909216600160401b026bffffffffffffffffffffffff199092166001600160401b0390941693909317179091555050565b60008060008061099a878787610dfe565b935093509350935093509350935093565b6000808080806109bf565b60405180910390fd5b6109ca888888610dfe565b94509450945094505093509350935093565b6109e4610a84565b600180546001600160801b0319166001600160801b0392909216919091179055565b610a0e610a84565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b610a38610a84565b6001600160a01b038116610a6257604051631e4fbdf760e01b8152600060048201526024016109b6565b610a6b81610ab1565b50565b610a76610a84565b610a808282610ecc565b5050565b6000546001600160a01b0316331461082b5760405163118cdaa760e01b81523360048201526024016109b6565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b63ffffffff8381166000908152600360205260408120600454600554929384938492600160401b900490911690606490610b4b90600160801b90046001600160801b0316896112da565b610b55919061130d565b610b5f91906112da565b8254909150600090610b7e90600160c01b900463ffffffff16886112da565b83546004549192506000916001600160401b03600160801b90920482169184918691610bab91168b611321565b610bb59190611321565b610bbf9190611321565b610bc991906112da565b60015485549192506001600160801b0390811691610be89116836112da565b610bf2919061130d565b935493996001600160801b039094169850929650505050505050565b6000806000610c1c86610f79565b63ffffffff80821660009081526003602052604081208054939450929091610c4c91600160c01b900416886112da565b610c5890610c74611321565b8254909150600090610c7a90600160801b90046001600160401b0316836112da565b63ffffffff808b1660009081526003602052604081208054939450929091610caa91600160c01b9004168b6112da565b8254909150600090600160801b90046001600160401b0316610ccc8b84611321565b610cd691906112da565b60015487549192506000916001600160801b0391821691610cf89116876112da565b610d02919061130d565b60015485549192506000916001600160801b0391821691610d249116856112da565b610d2e919061130d565b90506000610d3c8284611321565b9554959f6001600160801b039096169e50949c50505050505050505050505050565b63ffffffff80841660009081526003602052604081208054919283928391610d8e91600160c01b900416876112da565b8254909150600090600160801b90046001600160401b0316610db08784611321565b610dba91906112da565b60015484549192506001600160801b0390811691610dd99116836112da565b610de3919061130d565b925492986001600160801b0390931697509195505050505050565b600080808080610e1061753089611334565b90508063ffffffff16606e1480610e2e57508063ffffffff1661279f145b80610e4057508063ffffffff16614eaf145b15610e5a57610e50818888610b01565b9095509350610ea9565b8063ffffffff16606f1480610e7657508063ffffffff16612794145b80610e8857508063ffffffff16614ea4145b15610e9857610e50818888610c0e565b610ea3818888610d5e565b90955093505b505060015460055493979296506001600160801b03908116955090921692509050565b6001600160a01b038216610ef3576040516306b7a93160e41b815260040160405180910390fd5b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114610f40576040519150601f19603f3d011682016040523d82523d6000602084013e610f45565b606091505b505090508061076e57604051631196f20d60e21b81526001600160a01b0384166004820152602481018390526044016109b6565b600080610f8861753084611334565b90508063ffffffff16606f03610fa15750606592915050565b8063ffffffff1661279403610fba575061278992915050565b8063ffffffff16614ea403610fd35750614e9992915050565b604051633d0b0cf760e21b815263ffffffff821660048201526024016109b6565b803563ffffffff8116811461100857600080fd5b919050565b60008060006060848603121561102257600080fd5b61102b84610ff4565b95602085013595506040909401359392505050565b80356001600160801b038116811461100857600080fd5b60006020828403121561106957600080fd5b61107282611040565b9392505050565b6000806020838503121561108c57600080fd5b82356001600160401b03808211156110a357600080fd5b818501915085601f8301126110b757600080fd5b8135818111156110c657600080fd5b8660208260071b85010111156110db57600080fd5b60209290920196919550909350505050565b80356001600160a01b038116811461100857600080fd5b6000806040838503121561111757600080fd5b611120836110ed565b91506020830135801515811461113557600080fd5b809150509250929050565b803561ffff8116811461100857600080fd5b60008060006060848603121561116757600080fd5b61102b84611140565b600060c0828403121561118257600080fd5b50919050565b60006020828403121561119a57600080fd5b611072826110ed565b6000602082840312156111b557600080fd5b61107282610ff4565b6000602082840312156111d057600080fd5b61107282611140565b600080604083850312156111ec57600080fd5b6111f5836110ed565b946020939093013593505050565b634e487b7160e01b600052603260045260246000fd5b80356001600160401b038116811461100857600080fd5b60006060828403121561124257600080fd5b604051606081018181106001600160401b038211171561127257634e487b7160e01b600052604160045260246000fd5b60405261127e83611040565b815261128c60208401611219565b602082015261129d60408401610ff4565b60408201529392505050565b6000602082840312156112bb57600080fd5b61107282611219565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176112f1576112f16112c4565b92915050565b634e487b7160e01b600052601260045260246000fd5b60008261131c5761131c6112f7565b500490565b808201808211156112f1576112f16112c4565b600063ffffffff8084168061134b5761134b6112f7565b9216919091069291505056fea2646970667358221220ff064bafdc05a2d85d9d93ddac0510aa9c8f276c4f57eefac742b7fc656acac564736f6c63430008160033", - "sourceMap": "619:9549:79:-:0;;;1325:189;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1368:10;;1269:95:107;;1322:31;;-1:-1:-1;;;1322:31:107;;1350:1;1322:31;;;455:51:132;428:18;;1322:31:107;;;;;;;1269:95;1373:32;1392:12;1373:18;:32::i;:::-;-1:-1:-1;;;;;;1390:27:79::1;;::::0;;;:12:::1;:27;::::0;;;;:34;;-1:-1:-1;;1390:34:79::1;1420:4;1390:34:::0;;::::1;::::0;;;1434:30;;-1:-1:-1;;;;;;1434:30:79::1;1460:4;1434:30;::::0;;1474:28:::1;:33:::0;;-1:-1:-1;;;;;;;;1474:33:79;;;::::1;;::::0;;619:9549;;2912:187:107;2985:16;3004:6;;-1:-1:-1;;;;;3020:17:107;;;-1:-1:-1;;;;;;3020:17:107;;;;;;3052:40;;3004:6;;;;;;;3052:40;;2985:16;3052:40;2975:124;2912:187;:::o;14:290:132:-;84:6;137:2;125:9;116:7;112:23;108:32;105:52;;;153:1;150;143:12;105:52;179:16;;-1:-1:-1;;;;;224:31:132;;214:42;;204:70;;270:1;267;260:12;204:70;293:5;14:290;-1:-1:-1;;;14:290:132:o;309:203::-;619:9549:79;;;;;;", - "linkReferences": {} - }, - "deployedBytecode": { - "object": "0x6080604052600436106101405760003560e01c80638ca2fb08116100b6578063d350ad251161006f578063d350ad2514610441578063da26663a14610461578063dbbb415514610522578063e0ad121a14610542578063f2fde38b146105cb578063fd9be522146105eb57600080fd5b80638ca2fb08146103595780638da5cb5b1461039957806392807f58146103b7578063c1723a1d146103e9578063c1840327146103fc578063cd68b79b1461041a57600080fd5b80635d6d7ccb116101085780635d6d7ccb146102405780635e280f1114610260578063715018a6146102985780637bc3c9ab146102ad5780637dc438a4146102ea57806388a4124c1461030a57600080fd5b806311f2c343146101455780632f7cb0b41461017c5780633161b7f61461019e57806336a5beba146101be57806352a7251014610220575b600080fd5b34801561015157600080fd5b5061016961016036600461100d565b60009392505050565b6040519081526020015b60405180910390f35b34801561018857600080fd5b5061019c610197366004611057565b61060b565b005b3480156101aa57600080fd5b5061019c6101b9366004611079565b610632565b3480156101ca57600080fd5b506040805180820182526000808252602091820152815180830183526004546001600160401b03811680835263ffffffff600160401b909204821692840192835284519081529151169181019190915201610173565b34801561022c57600080fd5b5061019c61023b366004611104565b610773565b34801561024c57600080fd5b5061019c61025b366004611057565b6107a6565b34801561026c57600080fd5b50600654610280906001600160a01b031681565b6040516001600160a01b039091168152602001610173565b3480156102a457600080fd5b5061019c610819565b3480156102b957600080fd5b506102cd6102c8366004611152565b61082d565b604080519283526001600160801b03909116602083015201610173565b3480156102f657600080fd5b5061019c610305366004611170565b6108c8565b34801561031657600080fd5b5061032a61032536600461100d565b610989565b604080519485526001600160801b03938416602086015291831691840191909152166060820152608001610173565b34801561036557600080fd5b50610389610374366004611188565b60026020526000908152604090205460ff1681565b6040519015158152602001610173565b3480156103a557600080fd5b506000546001600160a01b0316610280565b3480156103c357600080fd5b506005546001600160801b03165b6040516001600160801b039091168152602001610173565b61032a6103f736600461100d565b6109ab565b34801561040857600080fd5b506001546001600160801b03166103d1565b34801561042657600080fd5b506005546103d190600160801b90046001600160801b031681565b34801561044d57600080fd5b5061019c61045c366004611057565b6109dc565b34801561046d57600080fd5b506104e861047c3660046111a3565b60408051606080820183526000808352602080840182905292840181905263ffffffff94851681526003835283902083519182018452546001600160801b0381168252600160801b81046001600160401b031692820192909252600160c01b9091049092169082015290565b6040805182516001600160801b031681526020808401516001600160401b0316908201529181015163ffffffff1690820152606001610173565b34801561052e57600080fd5b5061019c61053d366004611188565b610a06565b34801561054e57600080fd5b506104e861055d3660046111be565b60408051606080820183526000808352602080840182905292840181905261ffff949094168452600382529282902082519384018352546001600160801b03811684526001600160401b03600160801b82041691840191909152600160c01b900463ffffffff169082015290565b3480156105d757600080fd5b5061019c6105e6366004611188565b610a30565b3480156105f757600080fd5b5061019c6106063660046111d9565b610a6e565b610613610a84565b600580546001600160801b03928316600160801b029216919091179055565b336106456000546001600160a01b031690565b6001600160a01b031614610683573360009081526002602052604090205460ff166106835760405163320ae52960e01b815260040160405180910390fd5b60005b8181101561076e57368383838181106106a1576106a1611203565b60800291909101915061076590506106bc60208301836111a3565b6106ce36849003840160208501611230565b805160208083015160409384015184516060810186526001600160801b0394851681526001600160401b0392831681850190815263ffffffff9283168288019081529783166000908152600390955295909320925183549551965194166001600160c01b031990951694909417600160801b95909116949094029390931763ffffffff60c01b1916600160c01b9190921602179055565b50600101610686565b505050565b61077b610a84565b6001600160a01b03919091166000908152600260205260409020805460ff1916911515919091179055565b336107b96000546001600160a01b031690565b6001600160a01b0316146107f7573360009081526002602052604090205460ff166107f75760405163320ae52960e01b815260040160405180910390fd5b600580546001600160801b0319166001600160801b0392909216919091179055565b610821610a84565b61082b6000610ab1565b565b6000808461ffff16606e148061084857508461ffff1661279f145b8061085857508461ffff16614eaf145b156108755761086c8561ffff168585610b01565b915091506108c0565b8461ffff16606f148061088d57508461ffff16612794145b8061089d57508461ffff16614ea4145b156108b15761086c8561ffff168585610c0e565b61086c8561ffff168585610d5e565b935093915050565b336108db6000546001600160a01b031690565b6001600160a01b031614610919573360009081526002602052604090205460ff166109195760405163320ae52960e01b815260040160405180910390fd5b6109296106bc60208301836111a3565b600061093b60a08301608084016112a9565b9050600061094f60c0840160a085016111a3565b6004805463ffffffff909216600160401b026bffffffffffffffffffffffff199092166001600160401b0390941693909317179091555050565b60008060008061099a878787610dfe565b935093509350935093509350935093565b6000808080806109bf565b60405180910390fd5b6109ca888888610dfe565b94509450945094505093509350935093565b6109e4610a84565b600180546001600160801b0319166001600160801b0392909216919091179055565b610a0e610a84565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b610a38610a84565b6001600160a01b038116610a6257604051631e4fbdf760e01b8152600060048201526024016109b6565b610a6b81610ab1565b50565b610a76610a84565b610a808282610ecc565b5050565b6000546001600160a01b0316331461082b5760405163118cdaa760e01b81523360048201526024016109b6565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b63ffffffff8381166000908152600360205260408120600454600554929384938492600160401b900490911690606490610b4b90600160801b90046001600160801b0316896112da565b610b55919061130d565b610b5f91906112da565b8254909150600090610b7e90600160c01b900463ffffffff16886112da565b83546004549192506000916001600160401b03600160801b90920482169184918691610bab91168b611321565b610bb59190611321565b610bbf9190611321565b610bc991906112da565b60015485549192506001600160801b0390811691610be89116836112da565b610bf2919061130d565b935493996001600160801b039094169850929650505050505050565b6000806000610c1c86610f79565b63ffffffff80821660009081526003602052604081208054939450929091610c4c91600160c01b900416886112da565b610c5890610c74611321565b8254909150600090610c7a90600160801b90046001600160401b0316836112da565b63ffffffff808b1660009081526003602052604081208054939450929091610caa91600160c01b9004168b6112da565b8254909150600090600160801b90046001600160401b0316610ccc8b84611321565b610cd691906112da565b60015487549192506000916001600160801b0391821691610cf89116876112da565b610d02919061130d565b60015485549192506000916001600160801b0391821691610d249116856112da565b610d2e919061130d565b90506000610d3c8284611321565b9554959f6001600160801b039096169e50949c50505050505050505050505050565b63ffffffff80841660009081526003602052604081208054919283928391610d8e91600160c01b900416876112da565b8254909150600090600160801b90046001600160401b0316610db08784611321565b610dba91906112da565b60015484549192506001600160801b0390811691610dd99116836112da565b610de3919061130d565b925492986001600160801b0390931697509195505050505050565b600080808080610e1061753089611334565b90508063ffffffff16606e1480610e2e57508063ffffffff1661279f145b80610e4057508063ffffffff16614eaf145b15610e5a57610e50818888610b01565b9095509350610ea9565b8063ffffffff16606f1480610e7657508063ffffffff16612794145b80610e8857508063ffffffff16614ea4145b15610e9857610e50818888610c0e565b610ea3818888610d5e565b90955093505b505060015460055493979296506001600160801b03908116955090921692509050565b6001600160a01b038216610ef3576040516306b7a93160e41b815260040160405180910390fd5b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114610f40576040519150601f19603f3d011682016040523d82523d6000602084013e610f45565b606091505b505090508061076e57604051631196f20d60e21b81526001600160a01b0384166004820152602481018390526044016109b6565b600080610f8861753084611334565b90508063ffffffff16606f03610fa15750606592915050565b8063ffffffff1661279403610fba575061278992915050565b8063ffffffff16614ea403610fd35750614e9992915050565b604051633d0b0cf760e21b815263ffffffff821660048201526024016109b6565b803563ffffffff8116811461100857600080fd5b919050565b60008060006060848603121561102257600080fd5b61102b84610ff4565b95602085013595506040909401359392505050565b80356001600160801b038116811461100857600080fd5b60006020828403121561106957600080fd5b61107282611040565b9392505050565b6000806020838503121561108c57600080fd5b82356001600160401b03808211156110a357600080fd5b818501915085601f8301126110b757600080fd5b8135818111156110c657600080fd5b8660208260071b85010111156110db57600080fd5b60209290920196919550909350505050565b80356001600160a01b038116811461100857600080fd5b6000806040838503121561111757600080fd5b611120836110ed565b91506020830135801515811461113557600080fd5b809150509250929050565b803561ffff8116811461100857600080fd5b60008060006060848603121561116757600080fd5b61102b84611140565b600060c0828403121561118257600080fd5b50919050565b60006020828403121561119a57600080fd5b611072826110ed565b6000602082840312156111b557600080fd5b61107282610ff4565b6000602082840312156111d057600080fd5b61107282611140565b600080604083850312156111ec57600080fd5b6111f5836110ed565b946020939093013593505050565b634e487b7160e01b600052603260045260246000fd5b80356001600160401b038116811461100857600080fd5b60006060828403121561124257600080fd5b604051606081018181106001600160401b038211171561127257634e487b7160e01b600052604160045260246000fd5b60405261127e83611040565b815261128c60208401611219565b602082015261129d60408401610ff4565b60408201529392505050565b6000602082840312156112bb57600080fd5b61107282611219565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176112f1576112f16112c4565b92915050565b634e487b7160e01b600052601260045260246000fd5b60008261131c5761131c6112f7565b500490565b808201808211156112f1576112f16112c4565b600063ffffffff8084168061134b5761134b6112f7565b9216919091069291505056fea2646970667358221220ff064bafdc05a2d85d9d93ddac0510aa9c8f276c4f57eefac742b7fc656acac564736f6c63430008160033", - "sourceMap": "619:9549:79:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4108:136;;;;;;;;;;-1:-1:-1;4108:136:79;;;;;:::i;:::-;4210:7;4108:136;;;;;;;;;653:25:132;;;641:2;626:18;4108:136:79;;;;;;;;2197:154;;;;;;;;;;-1:-1:-1;2197:154:79;;;;;:::i;:::-;;:::i;:::-;;2695:251;;;;;;;;;;-1:-1:-1;2695:251:79;;;;;:::i;:::-;;:::i;4599:117::-;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;4685:24:79;;;;;;;4692:17;4685:24;-1:-1:-1;;;;;4685:24:79;;;;;;-1:-1:-1;;;4685:24:79;;;;;;;;;;;4599:117;;1938:57:132;;;2037:24;;2033:41;2011:20;;;2004:71;;;;1911:18;4599:117:79;1724:357:132;1936:119:79;;;;;;;;;;-1:-1:-1;1936:119:79;;;;;:::i;:::-;;:::i;3354:143::-;;;;;;;;;;-1:-1:-1;3354:143:79;;;;;:::i;:::-;;:::i;1140:36::-;;;;;;;;;;-1:-1:-1;1140:36:79;;;;-1:-1:-1;;;;;1140:36:79;;;;;;-1:-1:-1;;;;;2809:32:132;;;2791:51;;2779:2;2764:18;1140:36:79;2616:232:132;2293:101:107;;;;;;;;;;;;;:::i;5539:587:79:-;;;;;;;;;;-1:-1:-1;5539:587:79;;;;;:::i;:::-;;:::i;:::-;;;;3516:25:132;;;-1:-1:-1;;;;;3577:47:132;;;3572:2;3557:18;;3550:75;3489:18;5539:587:79;3342:289:132;2952:396:79;;;;;;;;;;-1:-1:-1;2952:396:79;;;;;:::i;:::-;;:::i;4977:239::-;;;;;;;;;;-1:-1:-1;4977:239:79;;;;;:::i;:::-;;:::i;:::-;;;;4073:25:132;;;-1:-1:-1;;;;;4187:15:132;;;4182:2;4167:18;;4160:43;4239:15;;;4219:18;;;4212:43;;;;4291:15;4286:2;4271:18;;4264:43;4060:3;4045:19;4977:239:79;3842:471:132;747:59:79;;;;;;;;;;-1:-1:-1;747:59:79;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;4674:14:132;;4667:22;4649:41;;4637:2;4622:18;747:59:79;4509:187:132;1638:85:107;;;;;;;;;;-1:-1:-1;1684:7:107;1710:6;-1:-1:-1;;;;;1710:6:107;1638:85;;4431:102:79;;;;;;;;;;-1:-1:-1;4511:15:79;;-1:-1:-1;;;;;4511:15:79;4431:102;;;-1:-1:-1;;;;;5073:47:132;;;5055:66;;5043:2;5028:18;4431:102:79;4909:218:132;3587:385:79;;;;;;:::i;:::-;;:::i;4250:115::-;;;;;;;;;;-1:-1:-1;4335:23:79;;-1:-1:-1;;;;;4335:23:79;4250:115;;1090:43;;;;;;;;;;-1:-1:-1;1090:43:79;;;;-1:-1:-1;;;1090:43:79;;-1:-1:-1;;;;;1090:43:79;;;2061:130;;;;;;;;;;-1:-1:-1;2061:130:79;;;;;:::i;:::-;;:::i;4782:129::-;;;;;;;;;;-1:-1:-1;4782:129:79;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;4877:27:79;;;;;;:18;:27;;;;;4869:35;;;;;;;;-1:-1:-1;;;;;4869:35:79;;;;-1:-1:-1;;;4869:35:79;;-1:-1:-1;;;;;4869:35:79;;;;;;;;-1:-1:-1;;;4869:35:79;;;;;;;;;;;4782:129;;;;;5535:13:132;;-1:-1:-1;;;;;5531:54:132;5513:73;;5646:4;5634:17;;;5628:24;-1:-1:-1;;;;;5624:49:132;5602:20;;;5595:79;5722:17;;;5716:24;5742:10;5712:41;5690:20;;;5683:71;5501:2;5486:18;4782:129:79;5321:439:132;2357:118:79;;;;;;;;;;-1:-1:-1;2357:118:79;;;;;:::i;:::-;;:::i;5313:129::-;;;;;;;;;;-1:-1:-1;5313:129:79;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;5408:27:79;;;;;;;:18;:27;;;;;;5400:35;;;;;;;;-1:-1:-1;;;;;5400:35:79;;;;-1:-1:-1;;;;;;;;5400:35:79;;;;;;;;;;-1:-1:-1;;;5400:35:79;;5408:27;5400:35;;;;;;5313:129;2543:215:107;;;;;;;;;;-1:-1:-1;2543:215:107;;;;;:::i;:::-;;:::i;2481:116:79:-;;;;;;;;;;-1:-1:-1;2481:116:79;;;;;:::i;:::-;;:::i;2197:154::-;1531:13:107;:11;:13::i;:::-;2294:28:79::1;:50:::0;;-1:-1:-1;;;;;2294:50:79;;::::1;-1:-1:-1::0;;;2294:50:79::1;::::0;::::1;::::0;;;::::1;::::0;;2197:154::o;2695:251::-;1690:10;1679:7;1684::107;1710:6;-1:-1:-1;;;;;1710:6:107;;1638:85;1679:7:79;-1:-1:-1;;;;;1679:21:79;;1675:153;;1734:10;1721:24;;;;:12;:24;;;;;;;;1716:102;;1772:31;;-1:-1:-1;;;1772:31:79;;;;;;;;;;;1716:102;2785:9:::1;2780:160;2800:17:::0;;::::1;2780:160;;;2838:28;2869:6;;2876:1;2869:9;;;;;;;:::i;:::-;;;::::0;;;::::1;::::0;-1:-1:-1;2892:37:79::1;::::0;-1:-1:-1;2902:11:79::1;;::::0;::::1;2869:9:::0;2902:11:::1;:::i;:::-;2892:37;;::::0;;;;;2915:13:::1;::::0;::::1;2892:37;:::i;:::-;6317:17:::0;;6368:21;;;;;6419:17;;;;;6476:45;;;;;;;-1:-1:-1;;;;;6476:45:79;;;;;-1:-1:-1;;;;;6476:45:79;;;;;;;;;;;;;;;;;;;6446:27;;;-1:-1:-1;6446:27:79;;;:18;:27;;;;;;;:75;;;;;;;;;;-1:-1:-1;;;;;;6446:75:79;;;;;;;-1:-1:-1;;;6446:75:79;;;;;;;;;;;;-1:-1:-1;;;;6446:75:79;-1:-1:-1;;;6446:75:79;;;;;;;;6221:307;2892:37:::1;-1:-1:-1::0;2819:3:79::1;;2780:160;;;;2695:251:::0;;:::o;1936:119::-;1531:13:107;:11;:13::i;:::-;-1:-1:-1;;;;;2019:19:79;;;::::1;;::::0;;;:12:::1;:19;::::0;;;;:29;;-1:-1:-1;;2019:29:79::1;::::0;::::1;;::::0;;;::::1;::::0;;1936:119::o;3354:143::-;1690:10;1679:7;1684::107;1710:6;-1:-1:-1;;;;;1710:6:107;;1638:85;1679:7:79;-1:-1:-1;;;;;1679:21:79;;1675:153;;1734:10;1721:24;;;;:12;:24;;;;;;;;1716:102;;1772:31;;-1:-1:-1;;;1772:31:79;;;;;;;;;;;1716:102;3452:15:::1;:38:::0;;-1:-1:-1;;;;;;3452:38:79::1;-1:-1:-1::0;;;;;3452:38:79;;;::::1;::::0;;;::::1;::::0;;3354:143::o;2293:101:107:-;1531:13;:11;:13::i;:::-;2357:30:::1;2384:1;2357:18;:30::i;:::-;2293:101::o:0;5539:587:79:-;5673:11;5686:18;5720:7;:14;;5731:3;5720:14;:34;;;;5738:7;:16;;5749:5;5738:16;5720:34;:54;;;;5758:7;:16;;5769:5;5758:16;5720:54;5716:404;;;5797:59;5827:7;5797:59;;5836:13;5851:4;5797:29;:59::i;:::-;5790:66;;;;;;5716:404;5877:7;:14;;5888:3;5877:14;:34;;;;5895:7;:16;;5906:5;5895:16;5877:34;:54;;;;5915:7;:16;;5926:5;5915:16;5877:54;5873:247;;;5954:59;5984:7;5954:59;;5993:13;6008:4;5954:29;:59::i;5873:247::-;6051:58;6080:7;6051:58;;6089:13;6104:4;6051:28;:58::i;5873:247::-;5539:587;;;;;;:::o;2952:396::-;1690:10;1679:7;1684::107;1710:6;-1:-1:-1;;;;;1710:6:107;;1638:85;1679:7:79;-1:-1:-1;;;;;1679:21:79;;1675:153;;1734:10;1721:24;;;;:12;:24;;;;;;;;1716:102;;1772:31;;-1:-1:-1;;;1772:31:79;;;;;;;;;;;1716:102;3050:37:::1;3060:11;;::::0;::::1;:7:::0;:11:::1;:::i;3050:37::-;3098:17;3118:25;::::0;;;:14:::1;::::0;::::1;:25;:::i;:::-;3098:45:::0;-1:-1:-1;3153:27:79::1;3183:35;::::0;;;;;;::::1;:::i;:::-;3229:17;:41:::0;;3280:61:::1;::::0;;::::1;-1:-1:-1::0;;;3280:61:79::1;-1:-1:-1::0;;3280:61:79;;;-1:-1:-1;;;;;3229:41:79;;::::1;3280:61:::0;;;;::::1;::::0;;;-1:-1:-1;;2952:396:79:o;4977:239::-;5109:7;5118;5127;5136;5162:47;5180:7;5189:13;5204:4;5162:17;:47::i;:::-;5155:54;;;;;;;;4977:239;;;;;;;:::o;3587:385::-;3723:7;;;;;3829:72;;3857:44;;;;;;;;3829:72;3918:47;3936:7;3945:13;3960:4;3918:17;:47::i;:::-;3911:54;;;;;;;;;3587:385;;;;;;;:::o;2061:130::-;1531:13:107;:11;:13::i;:::-;2146:23:79::1;:38:::0;;-1:-1:-1;;;;;;2146:38:79::1;-1:-1:-1::0;;;;;2146:38:79;;;::::1;::::0;;;::::1;::::0;;2061:130::o;2357:118::-;1531:13:107;:11;:13::i;:::-;2426:8:79::1;:42:::0;;-1:-1:-1;;;;;;2426:42:79::1;-1:-1:-1::0;;;;;2426:42:79;;;::::1;::::0;;;::::1;::::0;;2357:118::o;2543:215:107:-;1531:13;:11;:13::i;:::-;-1:-1:-1;;;;;2627:22:107;::::1;2623:91;;2672:31;::::0;-1:-1:-1;;;2672:31:107;;2700:1:::1;2672:31;::::0;::::1;2791:51:132::0;2764:18;;2672:31:107::1;2616:232:132::0;2623:91:107::1;2723:28;2742:8;2723:18;:28::i;:::-;2543:215:::0;:::o;2481:116:79:-;1531:13:107;:11;:13::i;:::-;2561:29:79::1;2577:3;2582:7;2561:15;:29::i;:::-;2481:116:::0;;:::o;1796:162:107:-;1684:7;1710:6;-1:-1:-1;;;;;1710:6:107;735:10:117;1855:23:107;1851:101;;1901:40;;-1:-1:-1;;;1901:40:107;;735:10:117;1901:40:107;;;2791:51:132;2764:18;;1901:40:107;2616:232:132;2912:187:107;2985:16;3004:6;;-1:-1:-1;;;;;3020:17:107;;;-1:-1:-1;;;;;;3020:17:107;;;;;;3052:40;;3004:6;;;;;;;3052:40;;2985:16;3052:40;2975:124;2912:187;:::o;9404:762:79:-;9622:27;;;;9549:11;9622:27;;;:18;:27;;;;;9774:17;:38;9723:28;;9549:11;;;;;;-1:-1:-1;;;9774:38:79;;;;;;9755:3;;9707:44;;-1:-1:-1;;;9723:28:79;;-1:-1:-1;;;;;9723:28:79;9707:13;:44;:::i;:::-;9706:52;;;;:::i;:::-;9705:107;;;;:::i;:::-;9883:24;;9678:134;;-1:-1:-1;9840:24:79;;9867:40;;-1:-1:-1;;;9883:24:79;;;;9867:13;:40;:::i;:::-;10024:28;;9942:17;:28;9840:67;;-1:-1:-1;9917:14:79;;-1:-1:-1;;;;;;;;10024:28:79;;;;;;9840:67;;9973:16;;9935:35;;9942:28;9935:4;:35;:::i;:::-;:54;;;;:::i;:::-;:73;;;;:::i;:::-;9934:118;;;;:::i;:::-;10109:23;;10081:24;;9917:135;;-1:-1:-1;;;;;;10109:23:79;;;;10072:33;;10081:24;9917:135;10072:33;:::i;:::-;10071:61;;;;:::i;:::-;10134:24;;;;-1:-1:-1;;;;;10134:24:79;;;;-1:-1:-1;9404:762:79;;-1:-1:-1;;;;;;;9404:762:79:o;8345:1053::-;8490:11;8503:18;8533:17;8553:23;8568:7;8553:14;:23::i;:::-;8635:30;;;;8605:27;8635:30;;;:18;:30;;;;;8719:24;;8533:43;;-1:-1:-1;8635:30:79;8605:27;;8703:40;;-1:-1:-1;;;8719:24:79;;;8703:13;:40;:::i;:::-;8702:49;;8747:4;8702:49;:::i;:::-;8814:28;;8675:76;;-1:-1:-1;8779:13:79;;8795:47;;-1:-1:-1;;;8814:28:79;;-1:-1:-1;;;;;8814:28:79;8675:76;8795:47;:::i;:::-;8901:27;;;;8871;8901;;;:18;:27;;;;;8981:24;;8779:63;;-1:-1:-1;8901:27:79;8871;;8965:40;;-1:-1:-1;;;8981:24:79;;;8965:13;:40;:::i;:::-;9059:28;;8938:67;;-1:-1:-1;9015:13:79;;-1:-1:-1;;;9059:28:79;;-1:-1:-1;;;;;9059:28:79;9032:23;9051:4;8938:67;9032:23;:::i;:::-;9031:56;;;;:::i;:::-;9161:23;;9133:24;;9015:72;;-1:-1:-1;9098:23:79;;-1:-1:-1;;;;;9161:23:79;;;;9125:32;;9133:24;9125:5;:32;:::i;:::-;9124:60;;;;:::i;:::-;9257:23;;9229:24;;9098:86;;-1:-1:-1;9194:23:79;;-1:-1:-1;;;;;9257:23:79;;;;9221:32;;9229:24;9221:5;:32;:::i;:::-;9220:60;;;;:::i;:::-;9194:86;-1:-1:-1;9290:14:79;9307:33;9194:86;9307:15;:33;:::i;:::-;9366:24;;;;-1:-1:-1;;;;;9366:24:79;;;;-1:-1:-1;8345:1053:79;;-1:-1:-1;;;;;;;;;;;;;8345:1053:79:o;6932:601::-;7147:27;;;;7076:11;7147:27;;;:18;:27;;;;;7317:22;;7076:11;;;;;;7301:38;;-1:-1:-1;;;7317:22:79;;;7301:13;:38;:::i;:::-;7395:26;;7276:63;;-1:-1:-1;7349:17:79;;-1:-1:-1;;;7395:26:79;;-1:-1:-1;;;;;7395:26:79;7370:21;7387:4;7276:63;7370:21;:::i;:::-;7369:52;;;;:::i;:::-;7478:23;;7452:22;;7349:72;;-1:-1:-1;;;;;;7478:23:79;;;;7440:34;;7452:22;7349:72;7440:34;:::i;:::-;7439:62;;;;:::i;:::-;7503:22;;;;-1:-1:-1;;;;;7503:22:79;;;;-1:-1:-1;6932:601:79;;-1:-1:-1;;;;;;6932:601:79:o;7539:800::-;7672:11;;;;;7780:16;7790:6;7780:7;:16;:::i;:::-;7764:32;;7810:6;:13;;7820:3;7810:13;:32;;;;7827:6;:15;;7837:5;7827:15;7810:32;:51;;;;7846:6;:15;;7856:5;7846:15;7810:51;7806:434;;;7897:58;7927:6;7935:13;7950:4;7897:29;:58::i;:::-;7877:78;;-1:-1:-1;7877:78:79;-1:-1:-1;7806:434:79;;;7976:6;:13;;7986:3;7976:13;:32;;;;7993:6;:15;;8003:5;7993:15;7976:32;:51;;;;8012:6;:15;;8022:5;8012:15;7976:51;7972:268;;;8063:58;8093:6;8101:13;8116:4;8063:29;:58::i;7972:268::-;8172:57;8201:6;8209:13;8224:4;8172:28;:57::i;:::-;8152:77;;-1:-1:-1;8152:77:79;-1:-1:-1;7972:268:79;-1:-1:-1;;8273:23:79;;8317:15;;7539:800;;;;-1:-1:-1;;;;;;8273:23:79;;;;-1:-1:-1;8317:15:79;;;;-1:-1:-1;7539:800:79;-1:-1:-1;7539:800:79:o;438:252:44:-;-1:-1:-1;;;;;506:19:44;;502:58;;534:26;;-1:-1:-1;;;534:26:44;;;;;;;;;;;502:58;571:12;589:3;-1:-1:-1;;;;;589:8:44;606:6;589:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;570:48;;;633:7;628:55;;649:34;;-1:-1:-1;;;649:34:44;;-1:-1:-1;;;;;8931:32:132;;649:34:44;;;8913:51:132;8980:18;;;8973:34;;;8886:18;;649:34:44;8739:274:132;6534:392:79;6596:6;;6629:15;6638:6;6629;:15;:::i;:::-;6614:30;;6658:5;:12;;6667:3;6658:12;6654:217;;-1:-1:-1;6693:3:79;;6534:392;-1:-1:-1;;6534:392:79:o;6654:217::-;6717:5;:14;;6726:5;6717:14;6713:158;;-1:-1:-1;6754:5:79;;6534:392;-1:-1:-1;;6534:392:79:o;6713:158::-;6799:5;:14;;6808:5;6799:14;6795:76;;-1:-1:-1;6836:5:79;;6534:392;-1:-1:-1;;6534:392:79:o;6795:76::-;6887:32;;-1:-1:-1;;;6887:32:79;;9192:10:132;9180:23;;6887:32:79;;;9162:42:132;9135:18;;6887:32:79;9018:192:132;14:163;81:20;;141:10;130:22;;120:33;;110:61;;167:1;164;157:12;110:61;14:163;;;:::o;182:320::-;258:6;266;274;327:2;315:9;306:7;302:23;298:32;295:52;;;343:1;340;333:12;295:52;366:28;384:9;366:28;:::i;:::-;356:38;441:2;426:18;;413:32;;-1:-1:-1;492:2:132;477:18;;;464:32;;182:320;-1:-1:-1;;;182:320:132:o;689:188::-;757:20;;-1:-1:-1;;;;;806:46:132;;796:57;;786:85;;867:1;864;857:12;882:186;941:6;994:2;982:9;973:7;969:23;965:32;962:52;;;1010:1;1007;1000:12;962:52;1033:29;1052:9;1033:29;:::i;:::-;1023:39;882:186;-1:-1:-1;;;882:186:132:o;1073:646::-;1190:6;1198;1251:2;1239:9;1230:7;1226:23;1222:32;1219:52;;;1267:1;1264;1257:12;1219:52;1307:9;1294:23;-1:-1:-1;;;;;1377:2:132;1369:6;1366:14;1363:34;;;1393:1;1390;1383:12;1363:34;1431:6;1420:9;1416:22;1406:32;;1476:7;1469:4;1465:2;1461:13;1457:27;1447:55;;1498:1;1495;1488:12;1447:55;1538:2;1525:16;1564:2;1556:6;1553:14;1550:34;;;1580:1;1577;1570:12;1550:34;1633:7;1628:2;1618:6;1615:1;1611:14;1607:2;1603:23;1599:32;1596:45;1593:65;;;1654:1;1651;1644:12;1593:65;1685:2;1677:11;;;;;1707:6;;-1:-1:-1;1073:646:132;;-1:-1:-1;;;;1073:646:132:o;2086:173::-;2154:20;;-1:-1:-1;;;;;2203:31:132;;2193:42;;2183:70;;2249:1;2246;2239:12;2264:347;2329:6;2337;2390:2;2378:9;2369:7;2365:23;2361:32;2358:52;;;2406:1;2403;2396:12;2358:52;2429:29;2448:9;2429:29;:::i;:::-;2419:39;;2508:2;2497:9;2493:18;2480:32;2555:5;2548:13;2541:21;2534:5;2531:32;2521:60;;2577:1;2574;2567:12;2521:60;2600:5;2590:15;;;2264:347;;;;;:::o;2853:159::-;2920:20;;2980:6;2969:18;;2959:29;;2949:57;;3002:1;2999;2992:12;3017:320;3093:6;3101;3109;3162:2;3150:9;3141:7;3137:23;3133:32;3130:52;;;3178:1;3175;3168:12;3130:52;3201:28;3219:9;3201:28;:::i;3636:201::-;3729:6;3782:3;3770:9;3761:7;3757:23;3753:33;3750:53;;;3799:1;3796;3789:12;3750:53;-1:-1:-1;3822:9:132;3636:201;-1:-1:-1;3636:201:132:o;4318:186::-;4377:6;4430:2;4418:9;4409:7;4405:23;4401:32;4398:52;;;4446:1;4443;4436:12;4398:52;4469:29;4488:9;4469:29;:::i;5132:184::-;5190:6;5243:2;5231:9;5222:7;5218:23;5214:32;5211:52;;;5259:1;5256;5249:12;5211:52;5282:28;5300:9;5282:28;:::i;5765:184::-;5823:6;5876:2;5864:9;5855:7;5851:23;5847:32;5844:52;;;5892:1;5889;5882:12;5844:52;5915:28;5933:9;5915:28;:::i;5954:254::-;6022:6;6030;6083:2;6071:9;6062:7;6058:23;6054:32;6051:52;;;6099:1;6096;6089:12;6051:52;6122:29;6141:9;6122:29;:::i;:::-;6112:39;6198:2;6183:18;;;;6170:32;;-1:-1:-1;;;5954:254:132:o;6213:127::-;6274:10;6269:3;6265:20;6262:1;6255:31;6305:4;6302:1;6295:15;6329:4;6326:1;6319:15;6345:171;6412:20;;-1:-1:-1;;;;;6461:30:132;;6451:41;;6441:69;;6506:1;6503;6496:12;6521:681;6603:6;6656:2;6644:9;6635:7;6631:23;6627:32;6624:52;;;6672:1;6669;6662:12;6624:52;6705:2;6699:9;6747:2;6739:6;6735:15;6816:6;6804:10;6801:22;-1:-1:-1;;;;;6768:10:132;6765:34;6762:62;6759:185;;;6866:10;6861:3;6857:20;6854:1;6847:31;6901:4;6898:1;6891:15;6929:4;6926:1;6919:15;6759:185;6960:2;6953:22;6999:29;7018:9;6999:29;:::i;:::-;6991:6;6984:45;7062:37;7095:2;7084:9;7080:18;7062:37;:::i;:::-;7057:2;7049:6;7045:15;7038:62;7133:37;7166:2;7155:9;7151:18;7133:37;:::i;:::-;7128:2;7116:15;;7109:62;7120:6;6521:681;-1:-1:-1;;;6521:681:132:o;7207:184::-;7265:6;7318:2;7306:9;7297:7;7293:23;7289:32;7286:52;;;7334:1;7331;7324:12;7286:52;7357:28;7375:9;7357:28;:::i;7649:127::-;7710:10;7705:3;7701:20;7698:1;7691:31;7741:4;7738:1;7731:15;7765:4;7762:1;7755:15;7781:168;7854:9;;;7885;;7902:15;;;7896:22;;7882:37;7872:71;;7923:18;;:::i;:::-;7781:168;;;;:::o;7954:127::-;8015:10;8010:3;8006:20;8003:1;7996:31;8046:4;8043:1;8036:15;8070:4;8067:1;8060:15;8086:120;8126:1;8152;8142:35;;8157:18;;:::i;:::-;-1:-1:-1;8191:9:132;;8086:120::o;8211:125::-;8276:9;;;8297:10;;;8294:36;;;8310:18;;:::i;8341:183::-;8372:1;8398:10;8435:2;8432:1;8428:10;8457:3;8447:37;;8464:18;;:::i;:::-;8502:10;;8498:20;;;;;8341:183;-1:-1:-1;;8341:183:132:o", - "linkReferences": {} - }, - "methodIdentifiers": { - "ARBITRUM_COMPRESSION_PERCENT()": "cd68b79b", - "arbitrumPriceExt()": "36a5beba", - "endpoint()": "5e280f11", - "estimateFeeByChain(uint16,uint256,uint256)": "7bc3c9ab", - "estimateFeeByEid(uint32,uint256,uint256)": "88a4124c", - "estimateFeeOnSend(uint32,uint256,uint256)": "c1723a1d", - "getFee(uint32,uint256,uint256)": "11f2c343", - "getPrice(uint16)": "e0ad121a", - "getPrice(uint32)": "da26663a", - "getPriceRatioDenominator()": "c1840327", - "nativeTokenPriceUSD()": "92807f58", - "owner()": "8da5cb5b", - "priceUpdater(address)": "8ca2fb08", - "renounceOwnership()": "715018a6", - "setArbitrumCompressionPercent(uint128)": "2f7cb0b4", - "setEndpoint(address)": "dbbb4155", - "setNativeTokenPriceUSD(uint128)": "5d6d7ccb", - "setPrice((uint32,(uint128,uint64,uint32))[])": "3161b7f6", - "setPriceForArbitrum((uint32,(uint128,uint64,uint32),(uint64,uint32)))": "7dc438a4", - "setPriceRatioDenominator(uint128)": "d350ad25", - "setPriceUpdater(address,bool)": "52a72510", - "transferOwnership(address)": "f2fde38b", - "withdrawFee(address,uint256)": "fd9be522" - }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_priceUpdater\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"provided\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"required\",\"type\":\"uint256\"}],\"name\":\"LZ_PriceFeed_InsufficientFee\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"l2Eid\",\"type\":\"uint32\"}],\"name\":\"LZ_PriceFeed_NotAnOPStack\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_PriceFeed_OnlyPriceUpdater\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"Transfer_NativeFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Transfer_ToAddressIsZero\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ARBITRUM_COMPRESSION_PERCENT\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"arbitrumPriceExt\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"gasPerL2Tx\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"gasPerL1CallDataByte\",\"type\":\"uint32\"}],\"internalType\":\"struct ILayerZeroPriceFeed.ArbitrumPriceExt\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"endpoint\",\"outputs\":[{\"internalType\":\"contract ILayerZeroEndpointV2\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"_dstEid\",\"type\":\"uint16\"},{\"internalType\":\"uint256\",\"name\":\"_callDataSize\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_gas\",\"type\":\"uint256\"}],\"name\":\"estimateFeeByChain\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"},{\"internalType\":\"uint128\",\"name\":\"priceRatio\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_dstEid\",\"type\":\"uint32\"},{\"internalType\":\"uint256\",\"name\":\"_callDataSize\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_gas\",\"type\":\"uint256\"}],\"name\":\"estimateFeeByEid\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_dstEid\",\"type\":\"uint32\"},{\"internalType\":\"uint256\",\"name\":\"_callDataSize\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_gas\",\"type\":\"uint256\"}],\"name\":\"estimateFeeOnSend\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"getFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_dstEid\",\"type\":\"uint32\"}],\"name\":\"getPrice\",\"outputs\":[{\"components\":[{\"internalType\":\"uint128\",\"name\":\"priceRatio\",\"type\":\"uint128\"},{\"internalType\":\"uint64\",\"name\":\"gasPriceInUnit\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"gasPerByte\",\"type\":\"uint32\"}],\"internalType\":\"struct ILayerZeroPriceFeed.Price\",\"name\":\"price\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"_dstEid\",\"type\":\"uint16\"}],\"name\":\"getPrice\",\"outputs\":[{\"components\":[{\"internalType\":\"uint128\",\"name\":\"priceRatio\",\"type\":\"uint128\"},{\"internalType\":\"uint64\",\"name\":\"gasPriceInUnit\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"gasPerByte\",\"type\":\"uint32\"}],\"internalType\":\"struct ILayerZeroPriceFeed.Price\",\"name\":\"price\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPriceRatioDenominator\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nativeTokenPriceUSD\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"updater\",\"type\":\"address\"}],\"name\":\"priceUpdater\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"active\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint128\",\"name\":\"_compressionPercent\",\"type\":\"uint128\"}],\"name\":\"setArbitrumCompressionPercent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_endpoint\",\"type\":\"address\"}],\"name\":\"setEndpoint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint128\",\"name\":\"_nativeTokenPriceUSD\",\"type\":\"uint128\"}],\"name\":\"setNativeTokenPriceUSD\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"uint128\",\"name\":\"priceRatio\",\"type\":\"uint128\"},{\"internalType\":\"uint64\",\"name\":\"gasPriceInUnit\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"gasPerByte\",\"type\":\"uint32\"}],\"internalType\":\"struct ILayerZeroPriceFeed.Price\",\"name\":\"price\",\"type\":\"tuple\"}],\"internalType\":\"struct ILayerZeroPriceFeed.UpdatePrice[]\",\"name\":\"_price\",\"type\":\"tuple[]\"}],\"name\":\"setPrice\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"uint128\",\"name\":\"priceRatio\",\"type\":\"uint128\"},{\"internalType\":\"uint64\",\"name\":\"gasPriceInUnit\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"gasPerByte\",\"type\":\"uint32\"}],\"internalType\":\"struct ILayerZeroPriceFeed.Price\",\"name\":\"price\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"gasPerL2Tx\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"gasPerL1CallDataByte\",\"type\":\"uint32\"}],\"internalType\":\"struct ILayerZeroPriceFeed.ArbitrumPriceExt\",\"name\":\"extend\",\"type\":\"tuple\"}],\"internalType\":\"struct ILayerZeroPriceFeed.UpdatePriceExt\",\"name\":\"_update\",\"type\":\"tuple\"}],\"name\":\"setPriceForArbitrum\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint128\",\"name\":\"_denominator\",\"type\":\"uint128\"}],\"name\":\"setPriceRatioDenominator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_addr\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"_active\",\"type\":\"bool\"}],\"name\":\"setPriceUpdater\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"withdrawFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}]},\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/PriceFeedMock.sol\":\"PriceFeedMock\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroPriceFeed.sol\":{\"keccak256\":\"0xb4df72798a64f5ea44775b526e0c417c3de0ffc661659d7b31d5b28567c6fbcc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://30ca5fd5e3227a7bffc51654ee3bfebdd591a131f86846ac42dea8a40c5cf1d8\",\"dweb:/ipfs/QmXNmQCF8TZAFpUxgPa1rgWt4ktsBV38A8Hax7TiYLgybW\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\":{\"keccak256\":\"0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bacc29fd3866af71e59cb0bdc1cf82c882a4a7f4e2652fd413c9f12649762083\",\"dweb:/ipfs/QmZh2toLnrQDWaNYhS5K4NoW7Vxd2GdZx9KA77vKEDLAqs\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol\":{\"keccak256\":\"0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d8ff6a8a89297fa127f86b54e0db3eba1d6a6eeb4f6398d3c84d569665ac8f1b\",\"dweb:/ipfs/QmVSwhw6xFDrLRAX4RXaCM47yBaBtac4wf36DYEq6KCTvT\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol\":{\"keccak256\":\"0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7e1b245d58221d16d8b5e0f01ef3e289a24a7df1ace3b94239e4d5b954ad5927\",\"dweb:/ipfs/Qmappsgp7PCY9rSSNE9Cdn4BTRX591WfCSEgq2HxhA3z6S\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol\":{\"keccak256\":\"0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b18b23a1643fc6636c4ad9d9023e2e6ca2d3c2a4a046482d4655bff09950598d\",\"dweb:/ipfs/Qma6G5SqiovwrMPfgqTrRngK1HWW373Wkf9c6YP2NhXpPk\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol\":{\"keccak256\":\"0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5173fc9143bea314b159ca5a9adb5626659ef763bc598e27de5fa46efe3291a6\",\"dweb:/ipfs/QmSLFeMFPmVeGxT4sxRPW28ictjAS22M8rLeYRu9TXkA6D\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Transfer.sol\":{\"keccak256\":\"0x621d6dd5b8b7e827351459fff4ac87c16ba4656757592cf67de8b199aea4cf9a\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://345aa8c007ed8b96a74260d289545713f1d7180df270d67687e3a540a61fa5c0\",\"dweb:/ipfs/QmNWCvpqSuar6UGLDVshUc7shUv3pt1J5FTf9VyZZ13wXL\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/PriceFeedMock.sol\":{\"keccak256\":\"0xd8f419b25c648287b5b7f0923b069b2449c51e807c9153df39445f2f83e55f44\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://bb300a5bb62655073c7aa9cd2221e60e59ce904a0d73f7f5e06af7c9df3445ec\",\"dweb:/ipfs/QmcYb2qFevymfkWhTqGaNH5HwK9MMUixzAKJJAdNQHSCbw\"]},\"node_modules/@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol\":{\"keccak256\":\"0x9b6b3e7803bc5f2f8cd7ad57db8ac1def61a9930a5a3107df4882e028a9605d7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://da62d6be1f5c6edf577f0cb45666a8aa9c2086a4bac87d95d65f02e2f4c36a4b\",\"dweb:/ipfs/QmNkpvBpoCMvX8JwAFNSc5XxJ2q5BXJpL5L1txb4QkqVFF\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC165.sol\":{\"keccak256\":\"0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://11fea9f8bc98949ac6709f0c1699db7430d2948137aa94d5a9e95a91f61a710a\",\"dweb:/ipfs/QmQdfRXxQjwP6yn3DVo1GHPpriKNcFghSPi94Z1oKEFUNS\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC20.sol\":{\"keccak256\":\"0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a2608291cb038b388d80b79a06b6118a42f7894ff67b7da10ec0dbbf5b2973ba\",\"dweb:/ipfs/QmWohqcBLbcxmA4eGPhZDXe5RYMMEEpFq22nfkaUMvTfw1\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db\",\"dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0xca2ae13e0610f6a99238dd00b97bd786bc92732dae6d6b9d61f573ec51018310\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://75f8c71ce0c91c40dd5f249ace0b7d8270f8f1767231bcf71490f7157d6ba862\",\"dweb:/ipfs/QmYXgxeDyFHvz3JsXxLEYN6GNUR44ThHeFj5XkpkgMoG4w\"]},\"node_modules/@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0x9d8da059267bac779a2dbbb9a26c2acf00ca83085e105d62d5d4ef96054a47f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c78e2aa4313323cecd1ef12a8d6265b96beee1a199923abf55d9a2a9e291ad23\",\"dweb:/ipfs/QmUTs2KStXucZezzFo3EYeqYu47utu56qrF7jj1Gue65vb\"]},\"node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"node_modules/@openzeppelin/contracts/utils/Errors.sol\":{\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf\",\"dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB\"]},\"node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_priceUpdater", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "provided", - "type": "uint256" - }, - { "internalType": "uint256", "name": "required", "type": "uint256" } - ], - "type": "error", - "name": "LZ_PriceFeed_InsufficientFee" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "l2Eid", "type": "uint32" } - ], - "type": "error", - "name": "LZ_PriceFeed_NotAnOPStack" - }, - { - "inputs": [], - "type": "error", - "name": "LZ_PriceFeed_OnlyPriceUpdater" - }, - { - "inputs": [ - { "internalType": "address", "name": "owner", "type": "address" } - ], - "type": "error", - "name": "OwnableInvalidOwner" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "type": "error", - "name": "OwnableUnauthorizedAccount" - }, - { - "inputs": [ - { "internalType": "address", "name": "_to", "type": "address" }, - { "internalType": "uint256", "name": "_value", "type": "uint256" } - ], - "type": "error", - "name": "Transfer_NativeFailed" - }, - { "inputs": [], "type": "error", "name": "Transfer_ToAddressIsZero" }, - { - "inputs": [ - { - "internalType": "address", - "name": "previousOwner", - "type": "address", - "indexed": true - }, - { - "internalType": "address", - "name": "newOwner", - "type": "address", - "indexed": true - } - ], - "type": "event", - "name": "OwnershipTransferred", - "anonymous": false - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "ARBITRUM_COMPRESSION_PERCENT", - "outputs": [ - { "internalType": "uint128", "name": "", "type": "uint128" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "arbitrumPriceExt", - "outputs": [ - { - "internalType": "struct ILayerZeroPriceFeed.ArbitrumPriceExt", - "name": "", - "type": "tuple", - "components": [ - { - "internalType": "uint64", - "name": "gasPerL2Tx", - "type": "uint64" - }, - { - "internalType": "uint32", - "name": "gasPerL1CallDataByte", - "type": "uint32" - } - ] - } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "endpoint", - "outputs": [ - { - "internalType": "contract ILayerZeroEndpointV2", - "name": "", - "type": "address" - } - ] - }, - { - "inputs": [ - { "internalType": "uint16", "name": "_dstEid", "type": "uint16" }, - { - "internalType": "uint256", - "name": "_callDataSize", - "type": "uint256" - }, - { "internalType": "uint256", "name": "_gas", "type": "uint256" } - ], - "stateMutability": "view", - "type": "function", - "name": "estimateFeeByChain", - "outputs": [ - { "internalType": "uint256", "name": "fee", "type": "uint256" }, - { - "internalType": "uint128", - "name": "priceRatio", - "type": "uint128" - } - ] - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_dstEid", "type": "uint32" }, - { - "internalType": "uint256", - "name": "_callDataSize", - "type": "uint256" - }, - { "internalType": "uint256", "name": "_gas", "type": "uint256" } - ], - "stateMutability": "view", - "type": "function", - "name": "estimateFeeByEid", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" }, - { "internalType": "uint128", "name": "", "type": "uint128" }, - { "internalType": "uint128", "name": "", "type": "uint128" }, - { "internalType": "uint128", "name": "", "type": "uint128" } - ] - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_dstEid", "type": "uint32" }, - { - "internalType": "uint256", - "name": "_callDataSize", - "type": "uint256" - }, - { "internalType": "uint256", "name": "_gas", "type": "uint256" } - ], - "stateMutability": "payable", - "type": "function", - "name": "estimateFeeOnSend", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" }, - { "internalType": "uint128", "name": "", "type": "uint128" }, - { "internalType": "uint128", "name": "", "type": "uint128" }, - { "internalType": "uint128", "name": "", "type": "uint128" } - ] - }, - { - "inputs": [ - { "internalType": "uint32", "name": "", "type": "uint32" }, - { "internalType": "uint256", "name": "", "type": "uint256" }, - { "internalType": "uint256", "name": "", "type": "uint256" } - ], - "stateMutability": "pure", - "type": "function", - "name": "getFee", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ] - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_dstEid", "type": "uint32" } - ], - "stateMutability": "view", - "type": "function", - "name": "getPrice", - "outputs": [ - { - "internalType": "struct ILayerZeroPriceFeed.Price", - "name": "price", - "type": "tuple", - "components": [ - { - "internalType": "uint128", - "name": "priceRatio", - "type": "uint128" - }, - { - "internalType": "uint64", - "name": "gasPriceInUnit", - "type": "uint64" - }, - { - "internalType": "uint32", - "name": "gasPerByte", - "type": "uint32" - } - ] - } - ] - }, - { - "inputs": [ - { "internalType": "uint16", "name": "_dstEid", "type": "uint16" } - ], - "stateMutability": "view", - "type": "function", - "name": "getPrice", - "outputs": [ - { - "internalType": "struct ILayerZeroPriceFeed.Price", - "name": "price", - "type": "tuple", - "components": [ - { - "internalType": "uint128", - "name": "priceRatio", - "type": "uint128" - }, - { - "internalType": "uint64", - "name": "gasPriceInUnit", - "type": "uint64" - }, - { - "internalType": "uint32", - "name": "gasPerByte", - "type": "uint32" - } - ] - } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "getPriceRatioDenominator", - "outputs": [ - { "internalType": "uint128", "name": "", "type": "uint128" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "nativeTokenPriceUSD", - "outputs": [ - { "internalType": "uint128", "name": "", "type": "uint128" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "owner", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "updater", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "priceUpdater", - "outputs": [ - { "internalType": "bool", "name": "active", "type": "bool" } - ] - }, - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "function", - "name": "renounceOwnership" - }, - { - "inputs": [ - { - "internalType": "uint128", - "name": "_compressionPercent", - "type": "uint128" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setArbitrumCompressionPercent" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_endpoint", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setEndpoint" - }, - { - "inputs": [ - { - "internalType": "uint128", - "name": "_nativeTokenPriceUSD", - "type": "uint128" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setNativeTokenPriceUSD" - }, - { - "inputs": [ - { - "internalType": "struct ILayerZeroPriceFeed.UpdatePrice[]", - "name": "_price", - "type": "tuple[]", - "components": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" }, - { - "internalType": "struct ILayerZeroPriceFeed.Price", - "name": "price", - "type": "tuple", - "components": [ - { - "internalType": "uint128", - "name": "priceRatio", - "type": "uint128" - }, - { - "internalType": "uint64", - "name": "gasPriceInUnit", - "type": "uint64" - }, - { - "internalType": "uint32", - "name": "gasPerByte", - "type": "uint32" - } - ] - } - ] - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setPrice" - }, - { - "inputs": [ - { - "internalType": "struct ILayerZeroPriceFeed.UpdatePriceExt", - "name": "_update", - "type": "tuple", - "components": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" }, - { - "internalType": "struct ILayerZeroPriceFeed.Price", - "name": "price", - "type": "tuple", - "components": [ - { - "internalType": "uint128", - "name": "priceRatio", - "type": "uint128" - }, - { - "internalType": "uint64", - "name": "gasPriceInUnit", - "type": "uint64" - }, - { - "internalType": "uint32", - "name": "gasPerByte", - "type": "uint32" - } - ] - }, - { - "internalType": "struct ILayerZeroPriceFeed.ArbitrumPriceExt", - "name": "extend", - "type": "tuple", - "components": [ - { - "internalType": "uint64", - "name": "gasPerL2Tx", - "type": "uint64" - }, - { - "internalType": "uint32", - "name": "gasPerL1CallDataByte", - "type": "uint32" - } - ] - } - ] - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setPriceForArbitrum" - }, - { - "inputs": [ - { - "internalType": "uint128", - "name": "_denominator", - "type": "uint128" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setPriceRatioDenominator" - }, - { - "inputs": [ - { "internalType": "address", "name": "_addr", "type": "address" }, - { "internalType": "bool", "name": "_active", "type": "bool" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setPriceUpdater" - }, - { - "inputs": [ - { "internalType": "address", "name": "newOwner", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "transferOwnership" - }, - { - "inputs": [ - { "internalType": "address", "name": "_to", "type": "address" }, - { "internalType": "uint256", "name": "_amount", "type": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "withdrawFee" - } - ], - "devdoc": { - "kind": "dev", - "methods": { - "owner()": { "details": "Returns the address of the current owner." }, - "renounceOwnership()": { - "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner." - }, - "transferOwnership(address)": { - "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." - } - }, - "version": 1 - }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/PriceFeedMock.sol": "PriceFeedMock" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroPriceFeed.sol": { - "keccak256": "0xb4df72798a64f5ea44775b526e0c417c3de0ffc661659d7b31d5b28567c6fbcc", - "urls": [ - "bzz-raw://30ca5fd5e3227a7bffc51654ee3bfebdd591a131f86846ac42dea8a40c5cf1d8", - "dweb:/ipfs/QmXNmQCF8TZAFpUxgPa1rgWt4ktsBV38A8Hax7TiYLgybW" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol": { - "keccak256": "0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3", - "urls": [ - "bzz-raw://bacc29fd3866af71e59cb0bdc1cf82c882a4a7f4e2652fd413c9f12649762083", - "dweb:/ipfs/QmZh2toLnrQDWaNYhS5K4NoW7Vxd2GdZx9KA77vKEDLAqs" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol": { - "keccak256": "0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc", - "urls": [ - "bzz-raw://d8ff6a8a89297fa127f86b54e0db3eba1d6a6eeb4f6398d3c84d569665ac8f1b", - "dweb:/ipfs/QmVSwhw6xFDrLRAX4RXaCM47yBaBtac4wf36DYEq6KCTvT" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol": { - "keccak256": "0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972", - "urls": [ - "bzz-raw://7e1b245d58221d16d8b5e0f01ef3e289a24a7df1ace3b94239e4d5b954ad5927", - "dweb:/ipfs/Qmappsgp7PCY9rSSNE9Cdn4BTRX591WfCSEgq2HxhA3z6S" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol": { - "keccak256": "0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901", - "urls": [ - "bzz-raw://b18b23a1643fc6636c4ad9d9023e2e6ca2d3c2a4a046482d4655bff09950598d", - "dweb:/ipfs/Qma6G5SqiovwrMPfgqTrRngK1HWW373Wkf9c6YP2NhXpPk" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol": { - "keccak256": "0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e", - "urls": [ - "bzz-raw://5173fc9143bea314b159ca5a9adb5626659ef763bc598e27de5fa46efe3291a6", - "dweb:/ipfs/QmSLFeMFPmVeGxT4sxRPW28ictjAS22M8rLeYRu9TXkA6D" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Transfer.sol": { - "keccak256": "0x621d6dd5b8b7e827351459fff4ac87c16ba4656757592cf67de8b199aea4cf9a", - "urls": [ - "bzz-raw://345aa8c007ed8b96a74260d289545713f1d7180df270d67687e3a540a61fa5c0", - "dweb:/ipfs/QmNWCvpqSuar6UGLDVshUc7shUv3pt1J5FTf9VyZZ13wXL" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/PriceFeedMock.sol": { - "keccak256": "0xd8f419b25c648287b5b7f0923b069b2449c51e807c9153df39445f2f83e55f44", - "urls": [ - "bzz-raw://bb300a5bb62655073c7aa9cd2221e60e59ce904a0d73f7f5e06af7c9df3445ec", - "dweb:/ipfs/QmcYb2qFevymfkWhTqGaNH5HwK9MMUixzAKJJAdNQHSCbw" - ], - "license": "LZBL-1.2" - }, - "node_modules/@openzeppelin/contracts/access/Ownable.sol": { - "keccak256": "0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb", - "urls": [ - "bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6", - "dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol": { - "keccak256": "0x9b6b3e7803bc5f2f8cd7ad57db8ac1def61a9930a5a3107df4882e028a9605d7", - "urls": [ - "bzz-raw://da62d6be1f5c6edf577f0cb45666a8aa9c2086a4bac87d95d65f02e2f4c36a4b", - "dweb:/ipfs/QmNkpvBpoCMvX8JwAFNSc5XxJ2q5BXJpL5L1txb4QkqVFF" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/interfaces/IERC165.sol": { - "keccak256": "0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724", - "urls": [ - "bzz-raw://11fea9f8bc98949ac6709f0c1699db7430d2948137aa94d5a9e95a91f61a710a", - "dweb:/ipfs/QmQdfRXxQjwP6yn3DVo1GHPpriKNcFghSPi94Z1oKEFUNS" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/interfaces/IERC20.sol": { - "keccak256": "0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c", - "urls": [ - "bzz-raw://a2608291cb038b388d80b79a06b6118a42f7894ff67b7da10ec0dbbf5b2973ba", - "dweb:/ipfs/QmWohqcBLbcxmA4eGPhZDXe5RYMMEEpFq22nfkaUMvTfw1" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol": { - "keccak256": "0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7", - "urls": [ - "bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db", - "dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol": { - "keccak256": "0xca2ae13e0610f6a99238dd00b97bd786bc92732dae6d6b9d61f573ec51018310", - "urls": [ - "bzz-raw://75f8c71ce0c91c40dd5f249ace0b7d8270f8f1767231bcf71490f7157d6ba862", - "dweb:/ipfs/QmYXgxeDyFHvz3JsXxLEYN6GNUR44ThHeFj5XkpkgMoG4w" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Address.sol": { - "keccak256": "0x9d8da059267bac779a2dbbb9a26c2acf00ca83085e105d62d5d4ef96054a47f5", - "urls": [ - "bzz-raw://c78e2aa4313323cecd1ef12a8d6265b96beee1a199923abf55d9a2a9e291ad23", - "dweb:/ipfs/QmUTs2KStXucZezzFo3EYeqYu47utu56qrF7jj1Gue65vb" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Context.sol": { - "keccak256": "0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2", - "urls": [ - "bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12", - "dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Errors.sol": { - "keccak256": "0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123", - "urls": [ - "bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf", - "dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol": { - "keccak256": "0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8", - "urls": [ - "bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621", - "dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL" - ], - "license": "MIT" - } - }, - "version": 1 - }, - "id": 79 -} diff --git a/examples/oft-movement/out/ReadCmdCodecV1.sol/ReadCmdCodecV1.json b/examples/oft-movement/out/ReadCmdCodecV1.sol/ReadCmdCodecV1.json deleted file mode 100644 index a3417dcac..000000000 --- a/examples/oft-movement/out/ReadCmdCodecV1.sol/ReadCmdCodecV1.json +++ /dev/null @@ -1,78 +0,0 @@ -{ - "abi": [ - { "type": "error", "name": "InvalidCmd", "inputs": [] }, - { "type": "error", "name": "InvalidType", "inputs": [] }, - { "type": "error", "name": "InvalidVersion", "inputs": [] } - ], - "bytecode": { - "object": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122039fac10f4e4844697e11431da2fc0a99fded576c7516568b21bfe4514da0377e64736f6c63430008160033", - "sourceMap": "148:4751:22:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;148:4751:22;;;;;;;;;;;;;;;;;", - "linkReferences": {} - }, - "deployedBytecode": { - "object": "0x73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122039fac10f4e4844697e11431da2fc0a99fded576c7516568b21bfe4514da0377e64736f6c63430008160033", - "sourceMap": "148:4751:22:-:0;;;;;;;;", - "linkReferences": {} - }, - "methodIdentifiers": {}, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"InvalidCmd\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidType\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidVersion\",\"type\":\"error\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/ReadCmdCodecV1.sol\":\"ReadCmdCodecV1\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/ReadCmdCodecV1.sol\":{\"keccak256\":\"0x52fbab4a114ce9defb2ffd57c0a978eee438b2c232862f7e20475e0dcadd4eda\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://a4d5d4e186e3f2a916ea02c2d1d0761069ab1a5c0d6f74719bbf3501a7ccb899\",\"dweb:/ipfs/QmS2e12U9Fap2EK1CmSBTccL4PCKkHNdKJn2bXCqqKdbRn\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/SupportedCmdTypes.sol\":{\"keccak256\":\"0x6b2534522c163714e499041ecd06aaeb93857373cef82cf2752f162bb7c69f9a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bf6c3545c3b9505692dbfaa29b40cab5ed9dc9b65e5804b6f47b5a76596120e9\",\"dweb:/ipfs/QmNs98oRaMvpYhLCQ5yU256eYNEopFTrLRjjwm3gL4foQ3\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/BitMaps.sol\":{\"keccak256\":\"0xaad3c72ef43480d2253fd48b394e8fb7286d009991d2bc4e61be58ce48ac5ee9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b8c02b14f954416ba2148b389c87da8378ac8dd16ba3d458cbbfba8b0fd8639f\",\"dweb:/ipfs/Qmd2EEQhYL2VmgJi1V4uiHM2WcYxF9iBtxSgcFkbS21rQD\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { "inputs": [], "type": "error", "name": "InvalidCmd" }, - { "inputs": [], "type": "error", "name": "InvalidType" }, - { "inputs": [], "type": "error", "name": "InvalidVersion" } - ], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/ReadCmdCodecV1.sol": "ReadCmdCodecV1" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/ReadCmdCodecV1.sol": { - "keccak256": "0x52fbab4a114ce9defb2ffd57c0a978eee438b2c232862f7e20475e0dcadd4eda", - "urls": [ - "bzz-raw://a4d5d4e186e3f2a916ea02c2d1d0761069ab1a5c0d6f74719bbf3501a7ccb899", - "dweb:/ipfs/QmS2e12U9Fap2EK1CmSBTccL4PCKkHNdKJn2bXCqqKdbRn" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/SupportedCmdTypes.sol": { - "keccak256": "0x6b2534522c163714e499041ecd06aaeb93857373cef82cf2752f162bb7c69f9a", - "urls": [ - "bzz-raw://bf6c3545c3b9505692dbfaa29b40cab5ed9dc9b65e5804b6f47b5a76596120e9", - "dweb:/ipfs/QmNs98oRaMvpYhLCQ5yU256eYNEopFTrLRjjwm3gL4foQ3" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/BitMaps.sol": { - "keccak256": "0xaad3c72ef43480d2253fd48b394e8fb7286d009991d2bc4e61be58ce48ac5ee9", - "urls": [ - "bzz-raw://b8c02b14f954416ba2148b389c87da8378ac8dd16ba3d458cbbfba8b0fd8639f", - "dweb:/ipfs/Qmd2EEQhYL2VmgJi1V4uiHM2WcYxF9iBtxSgcFkbS21rQD" - ], - "license": "MIT" - } - }, - "version": 1 - }, - "id": 22 -} diff --git a/examples/oft-movement/out/ReadLib1002Mock.sol/ReadLib1002Mock.json b/examples/oft-movement/out/ReadLib1002Mock.sol/ReadLib1002Mock.json deleted file mode 100644 index 6a1c84217..000000000 --- a/examples/oft-movement/out/ReadLib1002Mock.sol/ReadLib1002Mock.json +++ /dev/null @@ -1,2941 +0,0 @@ -{ - "abi": [ - { - "type": "constructor", - "inputs": [ - { - "name": "_verifyHelper", - "type": "address", - "internalType": "address payable" - }, - { "name": "_endpoint", "type": "address", "internalType": "address" }, - { - "name": "_treasuryGasLimit", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "_treasuryGasForFeeCap", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "nonpayable" - }, - { "type": "receive", "stateMutability": "payable" }, - { - "type": "function", - "name": "cmdHashLookup", - "inputs": [ - { "name": "oapp", "type": "address", "internalType": "address" }, - { "name": "eid", "type": "uint32", "internalType": "uint32" }, - { "name": "nonce", "type": "uint64", "internalType": "uint64" } - ], - "outputs": [ - { "name": "cmdHash", "type": "bytes32", "internalType": "bytes32" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "commitVerification", - "inputs": [ - { "name": "_packetHeader", "type": "bytes", "internalType": "bytes" }, - { "name": "_cmdHash", "type": "bytes32", "internalType": "bytes32" }, - { "name": "_payloadHash", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "fees", - "inputs": [ - { "name": "worker", "type": "address", "internalType": "address" } - ], - "outputs": [ - { "name": "fee", "type": "uint256", "internalType": "uint256" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getAppReadLibConfig", - "inputs": [ - { "name": "_oapp", "type": "address", "internalType": "address" }, - { "name": "_remoteEid", "type": "uint32", "internalType": "uint32" } - ], - "outputs": [ - { - "name": "", - "type": "tuple", - "internalType": "struct ReadLibConfig", - "components": [ - { - "name": "executor", - "type": "address", - "internalType": "address" - }, - { - "name": "requiredDVNCount", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "optionalDVNCount", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "optionalDVNThreshold", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "requiredDVNs", - "type": "address[]", - "internalType": "address[]" - }, - { - "name": "optionalDVNs", - "type": "address[]", - "internalType": "address[]" - } - ] - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getConfig", - "inputs": [ - { "name": "_eid", "type": "uint32", "internalType": "uint32" }, - { "name": "_oapp", "type": "address", "internalType": "address" }, - { "name": "_configType", "type": "uint32", "internalType": "uint32" } - ], - "outputs": [{ "name": "", "type": "bytes", "internalType": "bytes" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getReadLibConfig", - "inputs": [ - { "name": "_oapp", "type": "address", "internalType": "address" }, - { "name": "_remoteEid", "type": "uint32", "internalType": "uint32" } - ], - "outputs": [ - { - "name": "rtnConfig", - "type": "tuple", - "internalType": "struct ReadLibConfig", - "components": [ - { - "name": "executor", - "type": "address", - "internalType": "address" - }, - { - "name": "requiredDVNCount", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "optionalDVNCount", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "optionalDVNThreshold", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "requiredDVNs", - "type": "address[]", - "internalType": "address[]" - }, - { - "name": "optionalDVNs", - "type": "address[]", - "internalType": "address[]" - } - ] - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getTreasuryAndNativeFeeCap", - "inputs": [], - "outputs": [ - { "name": "", "type": "address", "internalType": "address" }, - { "name": "", "type": "uint256", "internalType": "uint256" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "hashLookup", - "inputs": [ - { "name": "headerHash", "type": "bytes32", "internalType": "bytes32" }, - { "name": "cmdHash", "type": "bytes32", "internalType": "bytes32" }, - { "name": "dvn", "type": "address", "internalType": "address" } - ], - "outputs": [ - { "name": "payloadHash", "type": "bytes32", "internalType": "bytes32" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "isSupportedEid", - "inputs": [ - { "name": "_eid", "type": "uint32", "internalType": "uint32" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "messageLibType", - "inputs": [], - "outputs": [ - { "name": "", "type": "uint8", "internalType": "enum MessageLibType" } - ], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "owner", - "inputs": [], - "outputs": [{ "name": "", "type": "address", "internalType": "address" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "quote", - "inputs": [ - { - "name": "_packet", - "type": "tuple", - "internalType": "struct Packet", - "components": [ - { "name": "nonce", "type": "uint64", "internalType": "uint64" }, - { "name": "srcEid", "type": "uint32", "internalType": "uint32" }, - { "name": "sender", "type": "address", "internalType": "address" }, - { "name": "dstEid", "type": "uint32", "internalType": "uint32" }, - { - "name": "receiver", - "type": "bytes32", - "internalType": "bytes32" - }, - { "name": "guid", "type": "bytes32", "internalType": "bytes32" }, - { "name": "message", "type": "bytes", "internalType": "bytes" } - ] - }, - { "name": "_options", "type": "bytes", "internalType": "bytes" }, - { "name": "_payInLzToken", "type": "bool", "internalType": "bool" } - ], - "outputs": [ - { - "name": "", - "type": "tuple", - "internalType": "struct MessagingFee", - "components": [ - { - "name": "nativeFee", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "lzTokenFee", - "type": "uint256", - "internalType": "uint256" - } - ] - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "renounceOwnership", - "inputs": [], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "send", - "inputs": [ - { - "name": "_packet", - "type": "tuple", - "internalType": "struct Packet", - "components": [ - { "name": "nonce", "type": "uint64", "internalType": "uint64" }, - { "name": "srcEid", "type": "uint32", "internalType": "uint32" }, - { "name": "sender", "type": "address", "internalType": "address" }, - { "name": "dstEid", "type": "uint32", "internalType": "uint32" }, - { - "name": "receiver", - "type": "bytes32", - "internalType": "bytes32" - }, - { "name": "guid", "type": "bytes32", "internalType": "bytes32" }, - { "name": "message", "type": "bytes", "internalType": "bytes" } - ] - }, - { "name": "_options", "type": "bytes", "internalType": "bytes" }, - { "name": "_payInLzToken", "type": "bool", "internalType": "bool" } - ], - "outputs": [ - { - "name": "", - "type": "tuple", - "internalType": "struct MessagingFee", - "components": [ - { - "name": "nativeFee", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "lzTokenFee", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { "name": "", "type": "bytes", "internalType": "bytes" } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setConfig", - "inputs": [ - { "name": "_oapp", "type": "address", "internalType": "address" }, - { - "name": "_params", - "type": "tuple[]", - "internalType": "struct SetConfigParam[]", - "components": [ - { "name": "eid", "type": "uint32", "internalType": "uint32" }, - { - "name": "configType", - "type": "uint32", - "internalType": "uint32" - }, - { "name": "config", "type": "bytes", "internalType": "bytes" } - ] - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setDefaultReadLibConfigs", - "inputs": [ - { - "name": "_params", - "type": "tuple[]", - "internalType": "struct SetDefaultReadLibConfigParam[]", - "components": [ - { "name": "eid", "type": "uint32", "internalType": "uint32" }, - { - "name": "config", - "type": "tuple", - "internalType": "struct ReadLibConfig", - "components": [ - { - "name": "executor", - "type": "address", - "internalType": "address" - }, - { - "name": "requiredDVNCount", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "optionalDVNCount", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "optionalDVNThreshold", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "requiredDVNs", - "type": "address[]", - "internalType": "address[]" - }, - { - "name": "optionalDVNs", - "type": "address[]", - "internalType": "address[]" - } - ] - } - ] - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setTreasury", - "inputs": [ - { "name": "_treasury", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setTreasuryNativeFeeCap", - "inputs": [ - { - "name": "_newTreasuryNativeFeeCap", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "supportsInterface", - "inputs": [ - { "name": "_interfaceId", "type": "bytes4", "internalType": "bytes4" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "testHelper", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "contract TestHelperOz5" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "transferOwnership", - "inputs": [ - { "name": "newOwner", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "verifiable", - "inputs": [ - { - "name": "_config", - "type": "tuple", - "internalType": "struct ReadLibConfig", - "components": [ - { - "name": "executor", - "type": "address", - "internalType": "address" - }, - { - "name": "requiredDVNCount", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "optionalDVNCount", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "optionalDVNThreshold", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "requiredDVNs", - "type": "address[]", - "internalType": "address[]" - }, - { - "name": "optionalDVNs", - "type": "address[]", - "internalType": "address[]" - } - ] - }, - { "name": "_headerHash", "type": "bytes32", "internalType": "bytes32" }, - { "name": "_cmdHash", "type": "bytes32", "internalType": "bytes32" }, - { "name": "_payloadHash", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "verify", - "inputs": [ - { "name": "_packetHeader", "type": "bytes", "internalType": "bytes" }, - { "name": "_cmdHash", "type": "bytes32", "internalType": "bytes32" }, - { "name": "_payloadHash", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "version", - "inputs": [], - "outputs": [ - { "name": "major", "type": "uint64", "internalType": "uint64" }, - { "name": "minor", "type": "uint8", "internalType": "uint8" }, - { "name": "endpointVersion", "type": "uint8", "internalType": "uint8" } - ], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "withdrawFee", - "inputs": [ - { "name": "_to", "type": "address", "internalType": "address" }, - { "name": "_amount", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "withdrawLzTokenFee", - "inputs": [ - { "name": "_lzToken", "type": "address", "internalType": "address" }, - { "name": "_to", "type": "address", "internalType": "address" }, - { "name": "_amount", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "event", - "name": "DVNFeePaid", - "inputs": [ - { - "name": "requiredDVNs", - "type": "address[]", - "indexed": false, - "internalType": "address[]" - }, - { - "name": "optionalDVNs", - "type": "address[]", - "indexed": false, - "internalType": "address[]" - }, - { - "name": "fees", - "type": "uint256[]", - "indexed": false, - "internalType": "uint256[]" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "DefaultReadLibConfigsSet", - "inputs": [ - { - "name": "params", - "type": "tuple[]", - "indexed": false, - "internalType": "struct SetDefaultReadLibConfigParam[]", - "components": [ - { "name": "eid", "type": "uint32", "internalType": "uint32" }, - { - "name": "config", - "type": "tuple", - "internalType": "struct ReadLibConfig", - "components": [ - { - "name": "executor", - "type": "address", - "internalType": "address" - }, - { - "name": "requiredDVNCount", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "optionalDVNCount", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "optionalDVNThreshold", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "requiredDVNs", - "type": "address[]", - "internalType": "address[]" - }, - { - "name": "optionalDVNs", - "type": "address[]", - "internalType": "address[]" - } - ] - } - ] - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "ExecutorFeePaid", - "inputs": [ - { - "name": "executor", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "fee", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "LzTokenFeeWithdrawn", - "inputs": [ - { - "name": "lzToken", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "receiver", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "amount", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "NativeFeeWithdrawn", - "inputs": [ - { - "name": "worker", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "receiver", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "amount", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "OwnershipTransferred", - "inputs": [ - { - "name": "previousOwner", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "newOwner", - "type": "address", - "indexed": true, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "PayloadVerified", - "inputs": [ - { - "name": "dvn", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "header", - "type": "bytes", - "indexed": false, - "internalType": "bytes" - }, - { - "name": "cmdHash", - "type": "bytes32", - "indexed": false, - "internalType": "bytes32" - }, - { - "name": "payloadHash", - "type": "bytes32", - "indexed": false, - "internalType": "bytes32" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "ReadLibConfigSet", - "inputs": [ - { - "name": "oapp", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "eid", - "type": "uint32", - "indexed": false, - "internalType": "uint32" - }, - { - "name": "config", - "type": "tuple", - "indexed": false, - "internalType": "struct ReadLibConfig", - "components": [ - { - "name": "executor", - "type": "address", - "internalType": "address" - }, - { - "name": "requiredDVNCount", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "optionalDVNCount", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "optionalDVNThreshold", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "requiredDVNs", - "type": "address[]", - "internalType": "address[]" - }, - { - "name": "optionalDVNs", - "type": "address[]", - "internalType": "address[]" - } - ] - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "TreasuryNativeFeeCapSet", - "inputs": [ - { - "name": "newTreasuryNativeFeeCap", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "TreasurySet", - "inputs": [ - { - "name": "treasury", - "type": "address", - "indexed": false, - "internalType": "address" - } - ], - "anonymous": false - }, - { "type": "error", "name": "DVN_InvalidDVNIdx", "inputs": [] }, - { - "type": "error", - "name": "DVN_InvalidDVNOptions", - "inputs": [ - { "name": "cursor", "type": "uint256", "internalType": "uint256" } - ] - }, - { "type": "error", "name": "LZ_MessageLib_OnlyEndpoint", "inputs": [] }, - { "type": "error", "name": "LZ_RL_AtLeastOneDVN", "inputs": [] }, - { "type": "error", "name": "LZ_RL_CannotWithdrawAltToken", "inputs": [] }, - { - "type": "error", - "name": "LZ_RL_InvalidAmount", - "inputs": [ - { "name": "requested", "type": "uint256", "internalType": "uint256" }, - { "name": "available", "type": "uint256", "internalType": "uint256" } - ] - }, - { "type": "error", "name": "LZ_RL_InvalidCmdHash", "inputs": [] }, - { - "type": "error", - "name": "LZ_RL_InvalidConfigType", - "inputs": [ - { "name": "configType", "type": "uint32", "internalType": "uint32" } - ] - }, - { "type": "error", "name": "LZ_RL_InvalidEid", "inputs": [] }, - { "type": "error", "name": "LZ_RL_InvalidExecutor", "inputs": [] }, - { "type": "error", "name": "LZ_RL_InvalidOptionalDVNCount", "inputs": [] }, - { - "type": "error", - "name": "LZ_RL_InvalidOptionalDVNThreshold", - "inputs": [] - }, - { "type": "error", "name": "LZ_RL_InvalidPacketHeader", "inputs": [] }, - { "type": "error", "name": "LZ_RL_InvalidPacketVersion", "inputs": [] }, - { "type": "error", "name": "LZ_RL_InvalidReceiver", "inputs": [] }, - { "type": "error", "name": "LZ_RL_InvalidRequiredDVNCount", "inputs": [] }, - { "type": "error", "name": "LZ_RL_NotTreasury", "inputs": [] }, - { "type": "error", "name": "LZ_RL_Unsorted", "inputs": [] }, - { - "type": "error", - "name": "LZ_RL_UnsupportedEid", - "inputs": [{ "name": "eid", "type": "uint32", "internalType": "uint32" }] - }, - { "type": "error", "name": "LZ_RL_Verifying", "inputs": [] }, - { - "type": "error", - "name": "LZ_ULN_InvalidLegacyType1Option", - "inputs": [] - }, - { - "type": "error", - "name": "LZ_ULN_InvalidLegacyType2Option", - "inputs": [] - }, - { - "type": "error", - "name": "LZ_ULN_InvalidWorkerId", - "inputs": [ - { "name": "workerId", "type": "uint8", "internalType": "uint8" } - ] - }, - { - "type": "error", - "name": "LZ_ULN_InvalidWorkerOptions", - "inputs": [ - { "name": "cursor", "type": "uint256", "internalType": "uint256" } - ] - }, - { - "type": "error", - "name": "LZ_ULN_UnsupportedOptionType", - "inputs": [ - { "name": "optionType", "type": "uint16", "internalType": "uint16" } - ] - }, - { - "type": "error", - "name": "OwnableInvalidOwner", - "inputs": [ - { "name": "owner", "type": "address", "internalType": "address" } - ] - }, - { - "type": "error", - "name": "OwnableUnauthorizedAccount", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ] - }, - { - "type": "error", - "name": "SafeCastOverflowedUintDowncast", - "inputs": [ - { "name": "bits", "type": "uint8", "internalType": "uint8" }, - { "name": "value", "type": "uint256", "internalType": "uint256" } - ] - }, - { - "type": "error", - "name": "SafeERC20FailedOperation", - "inputs": [ - { "name": "token", "type": "address", "internalType": "address" } - ] - }, - { - "type": "error", - "name": "Transfer_NativeFailed", - "inputs": [ - { "name": "_to", "type": "address", "internalType": "address" }, - { "name": "_value", "type": "uint256", "internalType": "uint256" } - ] - }, - { "type": "error", "name": "Transfer_ToAddressIsZero", "inputs": [] } - ], - "bytecode": { - "object": "0x60e06040523480156200001157600080fd5b5060405162004c0738038062004c07833981016040819052620000349162000176565b82836001600160a01b031663416ecebf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000074573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200009a9190620001c3565b3380620000c157604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b620000cc816200010d565b506001600160a01b0391821660805263ffffffff1660a05260c092909252600655600280546001600160a01b031916939091169290921790915550620001f2565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146200017357600080fd5b50565b600080600080608085870312156200018d57600080fd5b84516200019a816200015d565b6020860151909450620001ad816200015d565b6040860151606090960151949790965092505050565b600060208284031215620001d657600080fd5b815163ffffffff81168114620001eb57600080fd5b9392505050565b60805160a05160c0516149c26200024560003960008181611b52015261262c01526000610be50152600081816106550152818161075a0152818161089801528181610d6d015261176101526149c26000f3fe6080604052600436106101855760003560e01c80637620fd01116100d1578063d15b0d491161008a578063f0f4426011610064578063f0f442601461051e578063f2fde38b1461053e578063faaebd211461055e578063fd9be5221461058b57600080fd5b8063d15b0d49146104b1578063d80e9bd9146104d1578063ea69d69d146104fe57600080fd5b80637620fd01146103b65780638da5cb5b146103f95780638eb0bf30146104175780639c33abf714610444578063ab750e7514610471578063c85f4b4e1461049157600080fd5b806320efd7221161013e57806354fd4d501161011857806354fd4d5014610334578063594924da146103615780636750cd4c14610381578063715018a6146103a157600080fd5b806320efd722146102a85780633c782a52146102c85780634389e58f1461030657600080fd5b806301ffc9a714610191578063052368ca146101c65780630e97289b146101e65780631881d94d1461021e5780631fb512251461023a578063200175f71461028657600080fd5b3661018c57005b600080fd5b34801561019d57600080fd5b506101b16101ac36600461389c565b6105ab565b60405190151581526020015b60405180910390f35b3480156101d257600080fd5b506101b16101e13660046138c6565b6105fd565b3480156101f257600080fd5b50600254610206906001600160a01b031681565b6040516001600160a01b0390911681526020016101bd565b34801561022a57600080fd5b5060026040516101bd919061391e565b34801561024657600080fd5b50610278610255366004613996565b600360209081526000938452604080852082529284528284209052825290205481565b6040519081526020016101bd565b34801561029257600080fd5b506102a66102a13660046139db565b61061e565b005b3480156102b457600080fd5b506102a66102c3366004613a67565b610758565b3480156102d457600080fd5b506102786102e3366004613abb565b600460209081526000938452604080852082529284528284209052825290205481565b34801561031257600080fd5b50610326610321366004613b35565b610880565b6040516101bd929190613c0d565b34801561034057600080fd5b5060408051600a8152600060208201526002918101919091526060016101bd565b34801561036d57600080fd5b506102a661037c366004613c31565b610b95565b34801561038d57600080fd5b506101b161039c366004613c81565b610dd6565b3480156103ad57600080fd5b506102a6610de1565b3480156103c257600080fd5b506103da6007546006546001600160a01b0390911691565b604080516001600160a01b0390931683526020830191909152016101bd565b34801561040557600080fd5b506000546001600160a01b0316610206565b34801561042357600080fd5b50610437610432366004613c9c565b610df5565b6040516101bd9190613d86565b34801561045057600080fd5b5061046461045f366004613d99565b6110ed565b6040516101bd9190613dd5565b34801561047d57600080fd5b506102a661048c366004613c31565b611156565b34801561049d57600080fd5b506102a66104ac366004613de8565b6111e1565b3480156104bd57600080fd5b506102a66104cc366004613e29565b611373565b3480156104dd57600080fd5b506104f16104ec366004613b35565b6113e8565b6040516101bd9190613e42565b34801561050a57600080fd5b50610437610519366004613c9c565b611534565b34801561052a57600080fd5b506102a6610539366004613e59565b61166b565b34801561054a57600080fd5b506102a6610559366004613e59565b6116c1565b34801561056a57600080fd5b50610278610579366004613e59565b60056020526000908152604090205481565b34801561059757600080fd5b506102a66105a6366004613e76565b6116ff565b60006001600160e01b031982166325fc096160e21b14806105dc57506001600160e01b0319821663b6e9ace360e01b145b806105f757506301ffc9a760e01b6001600160e01b03198316145b92915050565b600061061361060b8661407d565b858585611827565b90505b949350505050565b6007546001600160a01b0316331461064957604051634b41868f60e11b815260040160405180910390fd5b826001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e1758bd86040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106d59190614089565b6001600160a01b0316036106fc57604051632ddfd41160e21b815260040160405180910390fd5b610707838383611983565b604080516001600160a01b038086168252841660208201529081018290527fe081464b7278501267de69fa85b7b9560b0ae05d5fbfaab9b1986c70356e2efe906060015b60405180910390a1505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633146107a15760405163467409c360e01b815260040160405180910390fd5b60005b8181101561087a57368383838181106107bf576107bf6140a6565b90506020028101906107d191906140bc565b90506107e86107e36020830183613c81565b6119c3565b60016107fa6040830160208401613c81565b63ffffffff160361083a576108356108156020830183613c81565b8661082360408501856140dc565b8101906108309190614122565b6119f1565b610871565b61084a6040820160208301613c81565b60405163065c274160e11b815263ffffffff90911660048201526024015b60405180910390fd5b506001016107a4565b50505050565b604080518082019091526000808252602082015260607f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633146108df5760405163467409c360e01b815260040160405180910390fd5b60808601356109036108f76060890160408a01613e59565b6001600160a01b031690565b146109215760405163a4884a5960e01b815260040160405180910390fd5b60008061092f888888611a3a565b909250905060008061096161094a60608c0160408d01613e59565b61095a60808d0160608e01613c81565b858a611ac3565b9092509050610970828461416c565b925061097f60c08b018b6140dc565b60405161098d92919061417f565b6040518091039020600360008c60400160208101906109ac9190613e59565b6001600160a01b0316815260208101919091526040016000908120906109d860808e0160608f01613c81565b63ffffffff1681526020808201929092526040016000908120916109fe908e018e61418f565b6001600160401b03166001600160401b03168152602001908152602001600020819055506000610b0c6040518060e001604052808d6000016020810190610a45919061418f565b6001600160401b031681526020018d6060016020810190610a669190613c81565b63ffffffff1681526020018d6040016020810190610a849190613e59565b6001600160a01b031681526020018d6020016020810190610aa59190613c81565b63ffffffff16815260808e0135602082015260a08e01356040820152606001610ad160c08f018f6140dc565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050915250611bd1565b600254604051631f5dad8b60e31b81529192506001600160a01b03169063faed6c5890610b419084908e908e906004016141d3565b600060405180830381600087803b158015610b5b57600080fd5b505af1158015610b6f573d6000803e3d6000fd5b505060408051808201909152958652505050602083015250925090505b94509492505050565b60518314610bb65760405163864d08b360e01b815260040160405180910390fd5b6001610bc28585611c29565b60ff1614610be357604051637952a82f60e01b815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000063ffffffff16610c148585611c4b565b63ffffffff1614610c3857604051631f4b6f8b60e11b815260040160405180910390fd5b6000610c448585611c6e565b90506000610c528686611c80565b90506000610c608787611c90565b6001600160a01b038416600090815260036020908152604080832063ffffffff8716845282528083206001600160401b03851684529091529020549091508514610cbd576040516333074b7760e11b815260040160405180910390fd5b6000610cc98484610df5565b9050610cee818989604051610cdf92919061417f565b60405180910390208888611cb3565b600060405180606001604052808563ffffffff168152602001610d118b8b611e03565b81526001600160401b038581166020928301526040805163a825d74760e01b8152845163ffffffff1660048201529284015160248401528301511660448201526001600160a01b038781166064830152608482018990529192507f00000000000000000000000000000000000000000000000000000000000000009091169063a825d7479060a401600060405180830381600087803b158015610db357600080fd5b505af1158015610dc7573d6000803e3d6000fd5b50505050505050505050505050565b60006105f782611e1c565b610de9611e77565b610df36000611ea4565b565b610dfd6137e3565b63ffffffff821660008181527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49602090815260408083206001600160a01b03888116855260018452828520958552949092529091208054919290911680610e6e5782546001600160a01b0316610e70565b805b6001600160a01b031684528154600160a01b900460ff16610f15578254600160a01b900460ff1615610f105782600101805480602002602001604051908101604052809291908181526020018280548015610ef457602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610ed6575b505050505060808501528254600160a01b900460ff1660208501525b610f9c565b8154600160a01b900460ff90811614610f9c5781600101805480602002602001604051908101604052809291908181526020018280548015610f8057602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610f62575b505050505060808501528154600160a01b900460ff1660208501525b8154600160a81b900460ff16611045578254600160a81b900460ff1615611040578260020180548060200260200160405190810160405280929190818152602001828054801561101557602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610ff7575b505050505060a0850152825460ff600160a81b820481166040870152600160b01b9091041660608501525b6110db565b8154600160a81b900460ff908116146110db57816002018054806020026020016040519081016040528092919081815260200182805480156110b057602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611092575b505050505060a0850152815460ff600160a81b820481166040870152600160b01b9091041660608501525b6110e484611ef4565b50505092915050565b606060001963ffffffff83160161112e576111088385610df5565b6040516020016111189190613d86565b604051602081830303815290604052905061114f565b60405163065c274160e11b815263ffffffff83166004820152602401610868565b9392505050565b8060046000868660405161116b92919061417f565b60408051918290039091208252602080830193909352908101600090812086825283528181203380835293528190209290925590517f04708e5dfef6005d6d646eb761e3b9e412e1cc5749fc9d884bca441cc7a95258916111d3918790879087908790614203565b60405180910390a150505050565b6111e9611e77565b60005b818110156113355736838383818110611207576112076140a6565b9050602002810190611219919061423c565b905060ff61122a6020830183614252565b61123b906040810190602001614268565b60ff160361125c57604051632ad00e0160e11b815260040160405180910390fd5b60ff61126b6020830183614252565b61127c906060810190604001614268565b60ff160361129d576040516371aa1b6360e11b815260040160405180910390fd5b6112bb6112ad6020830183614252565b6112b69061407d565b611ef4565b60006112ca6020830183614252565b6112d8906020810190613e59565b6001600160a01b0316036112ff57604051633b6faad360e11b815260040160405180910390fd5b61132c60006113116020840184613c81565b61131e6020850185614252565b6113279061407d565b611f2c565b506001016111ec565b507f65edb7dc0f21ba15c998f8bd220ea9fec30757ff9fb07696c634bcce00ce6f348282604051611367929190614309565b60405180910390a15050565b61137b611e77565b6006548111156113ac5760065460405163b79d126360e01b8152610868918391600401918252602082015260400190565b60068190556040518181527f491ff913b5444f4136b0d4075f020cfe3a5f60de926ec0b091612401a22b7842906020015b60405180910390a150565b604080518082019091526000808252602082015260008061140986866121b5565b909250905060006114206060890160408a01613e59565b9050600061143460808a0160608b01613c81565b905060006114428383610df5565b90506000611472828561145c6114578f6144bc565b612374565b8e8060c0019061146c91906140dc565b8a6123ef565b825160405163c8f8dcd160e01b81529192506001600160a01b03169063c8f8dcd1906114a49087908a90600401614559565b602060405180830381865afa1580156114c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114e5919061457d565b6114ef908261416c565b90506000806115008686858d61259d565b909250905061150f828461416c565b6040805180820190915290815260208101919091529c9b505050505050505050505050565b61153c6137e3565b6001600160a01b03808416600090815260016020818152604080842063ffffffff88168552825292839020835160c0810185528154958616815260ff600160a01b8704811682850152600160a81b8704811682870152600160b01b909604909516606086015291820180548451818402810184019095528085529293608086019390928301828280156115f857602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116115da575b505050505081526020016002820180548060200260200160405190810160405280929190818152602001828054801561165a57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161163c575b505050505081525050905092915050565b611673611e77565b600780546001600160a01b0319166001600160a01b0383169081179091556040519081527f3c864541ef71378c6229510ed90f376565ee42d9c5e0904a984a9e863e6db44f906020016113dd565b6116c9611e77565b6001600160a01b0381166116f357604051631e4fbdf760e01b815260006004820152602401610868565b6116fc81611ea4565b50565b336000908152600560205260409020548082111561173a5760405163b79d126360e01b81526004810183905260248101829052604401610868565b33600090815260056020908152604080832085850390558051631c2eb17b60e31b815290517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169263e1758bd892600480820193918290030181865afa1580156117b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117d49190614089565b90506117e181858561266e565b604080513381526001600160a01b03861660208201529081018490527f820b7fd51bf79c54350bab98400651b3314ff6e79b33528821871d94a6669883906060016111d3565b602084015160009060ff16156118d35760005b856020015160ff168160ff1610156118bb576118a586608001518260ff1681518110611868576118686140a6565b602002602001015186868660009283526004602090815260408085209385529281528284206001600160a01b039095168452939093529020541490565b6118b3576000915050610616565b60010161183a565b50846040015160ff166000036118d357506001610616565b606085015160005b866040015160ff168160ff161015611976576119468760a001518260ff1681518110611909576119096140a6565b602002602001015187878760009283526004602090815260408085209385529281528284206001600160a01b039095168452939093529020541490565b1561196e578161195581614596565b9250508160ff1660000361196e57600192505050610616565b6001016118db565b5060009695505050505050565b6001600160a01b0382166119aa576040516306b7a93160e41b815260040160405180910390fd5b6119be6001600160a01b0384168383612691565b505050565b6119cc81611e1c565b6116fc576040516303fc0f9560e21b815263ffffffff82166004820152602401610868565b6119fc828483611f2c565b611a068284610df5565b507fe8e2a5b92fc69ac50188ea142042492be8e8c34febb10b2cd02983684336e14282848360405161074b939291906145b3565b60606000806000611a4b86866121b5565b90925090506000611a75611a6560608a0160408b01613e59565b61043260808b0160608c01613c81565b8051909150611a9490611a8e60608b0160408c01613e59565b856126e3565b9350600080611aa4838b866127d6565b9092509050611ab3828761416c565b909a909950975050505050505050565b60075460009081906001600160a01b031615610b8c576040516001600160a01b038716602482015263ffffffff8616604482015260648101859052831515608482015260009060a40160408051601f19818403018152919052602080820180516001600160e01b0316636a8e2a4360e11b1790526007549192506000918291611b7a916001600160a01b0316907f00000000000000000000000000000000000000000000000000000000000000009084908761289e565b91509150611b8a8787848461294e565b90955093508415611bc5576007546001600160a01b031660009081526005602052604081208054879290611bbf90849061416c565b90915550505b50505094509492505050565b8051602080830151604080850151606080870151608088015160a089015160c08a015195519398611c1398600198919791966001600160a01b031695016145e3565b6040516020818303038152906040529050919050565b6000611c38600182848661465e565b611c4191614688565b60f81c9392505050565b6000611c5b6031602d848661465e565b611c64916146b8565b60e01c9392505050565b600061114f611c7d84846129c9565b90565b6000611c5b600d6009848661465e565b6000611ca060096001848661465e565b611ca9916146e6565b60c01c9392505050565b611cbf84848484611827565b611cdc576040516328ca4b5160e01b815260040160405180910390fd5b602084015160ff1615611d6d5760005b846020015160ff168160ff161015611d6b57600084815260046020908152604080832086845290915281206080870151805191929160ff8516908110611d3457611d346140a6565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060009055806001019050611cec565b505b604084015160ff161561087a5760005b846040015160ff168160ff161015611dfc576000848152600460209081526040808320868452909152812060a0870151805191929160ff8516908110611dc557611dc56140a6565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060009055806001019050611d7d565b5050505050565b6000611e13602d600d848661465e565b61114f91614714565b63ffffffff811660009081527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49602052604081208054600160a01b900460ff1615158061114f575054600160b01b900460ff16151592915050565b6000546001600160a01b03163314610df35760405163118cdaa760e01b8152336004820152602401610868565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b602081015160ff16158015611f0e5750606081015160ff16155b156116fc57604051634dafcfbd60e11b815260040160405180910390fd5b602081015160ff9081161480611f475750602081015160ff16155b15611f755760808101515115611f7057604051632ad00e0160e11b815260040160405180910390fd5b611fdb565b806020015160ff16816080015151141580611fb057506002611f99600160ff614732565b611fa3919061474b565b60ff16816020015160ff16115b15611fce57604051632ad00e0160e11b815260040160405180910390fd5b611fdb81608001516129d9565b604081015160ff9081161480611ff65750604081015160ff16155b1561204a5760a0810151511561201f576040516371aa1b6360e11b815260040160405180910390fd5b606081015160ff161561204557604051637c94a05f60e11b815260040160405180910390fd5b6120ef565b806040015160ff168160a00151511415806120855750600261206e600160ff614732565b612078919061474b565b60ff16816040015160ff16115b156120a3576040516371aa1b6360e11b815260040160405180910390fd5b606081015160ff1615806120c45750806040015160ff16816060015160ff16115b156120e257604051637c94a05f60e11b815260040160405180910390fd5b6120ef8160a001516129d9565b6001600160a01b03838116600090815260016020818152604080842063ffffffff881685528252928390208551815487840151958801516060890151929097166001600160a81b031990911617600160a01b60ff968716021761ffff60a81b1916600160a81b9686169690960260ff60b01b191695909517600160b01b949095169390930293909317825560808401518051859461219193850192019061382b565b5060a082015180516121ad91600284019160209091019061382b565b505050505050565b60608060028310156121dd5760405163196499c760e21b815260006004820152602401610868565b60006121ec600282868861465e565b6121f59161477b565b60f01c90506002600219820161235d578060005b8683101561230257600061222260018501858a8c61465e565b61222b91614688565b60f81c9050600081900361225557604051636780cfaf60e01b815260006004820152602401610868565b8160ff16600003612268578091506122a5565b8160ff168160ff16146122a55736600061228486868c8e61465e565b915091506122958989868585612a40565b9099509750859450919250829150505b60018401936000906122bc90600301868b8d61465e565b6122c59161477b565b60f01c905060008190036122ef5760405163196499c760e21b815260048101869052602401610868565b8060020161ffff16850194505050612209565b8287146123255760405163196499c760e21b815260048101849052602401610868565b60028711156123565736600061233d85858b8d61465e565b9150915061234e8888858585612a40565b909850965050505b505061236b565b612368828787612b60565b93505b50509250929050565b805160208083015160408085015160608087015160808801519351600160f81b9681019690965260c09690961b6001600160c01b031916602186015260e093841b6001600160e01b031990811660298701526001600160a01b03909216602d8601529490921b909116604d8301526051820152607101611c13565b60008060006123fd84612ceb565b91509150600089604001518a6020015161241791906147a9565b905060005b8160ff168160ff16101561258f5760008b6020015160ff168260ff16106124715760a08c015160208d01516124519084614732565b60ff1681518110612464576124646140a6565b6020026020010151612493565b8b608001518260ff168151811061248a5761248a6140a6565b60200260200101515b60408051602081019091526000808252919250905b8551811015612500578360ff168682815181106124c7576124c76140a6565b602002602001015160ff16036124f8578681815181106124e9576124e96140a6565b60200260200101519150612500565b6001016124a8565b5060405163fdb9b0f160e01b81526001600160a01b0383169063fdb9b0f190612535908f908f908f908f9088906004016147c2565b602060405180830381865afa158015612552573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612576919061457d565b612580908861416c565b9650505080600101905061241c565b505050509695505050505050565b60075460009081906001600160a01b031615610b8c576040516001600160a01b038716602482015263ffffffff8616604482015260648101859052831515608482015260009060a40160408051601f19818403018152919052602080820180516001600160e01b031663d424422160e01b1790526007549192506000918291612652916001600160a01b0316907f00000000000000000000000000000000000000000000000000000000000000009086612f51565b915091506126628787848461294e565b94509450505050610b8c565b6001600160a01b038316612686576119be8282612ffd565b6119be838383611983565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526119be9084906130aa565b60405163c015bb7d60e01b81526000906001600160a01b0385169063c015bb7d906127149086908690600401614559565b6020604051808303816000875af1158015612733573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612757919061457d565b9050801561278d576001600160a01b0384166000908152600560205260408120805483929061278790849061416c565b90915550505b604080516001600160a01b0386168152602081018390527f61ed099e74a97a1d7f8bb0952a88ca8b7b8ebd00c126ea04671f92a81213318a910160405180910390a19392505050565b60006060816127e7611457866144bc565b905060006127fc6127f7876144bc565b61311b565b905060606128278861281389840160408b01613e59565b8561282160c08c018c6140dc565b8b613138565b604051919650915061283f9084908490602001614819565b60405160208183030381529060405293507f07ea52d82345d6e838192107d8fd7123d9c2ec8e916cd0aad13fd2b60db2464488608001518960a001518360405161288b93929190614848565b60405180910390a1505050935093915050565b60006060863b8083036128c557604080516000808252602082019092529250925050612944565b60008060008761ffff166001600160401b038111156128e6576128e6613ea2565b6040519080825280601f01601f191660200182016040528015612910576020820181803683370190505b509050600080885160208a018c8f8ff191503d925087831115612931578792505b828152826000602083013e909450925050505b9550959350505050565b60008083158061295f575082516020115b1561296f57506000905080610b8c565b600083806020019051810190612985919061457d565b90508515612995578091506129bf565b600060065488116129a8576006546129aa565b875b90508082116129b957816129bb565b805b9350505b5094509492505050565b6000611e1360516031848661465e565b6000805b82518110156119be5760008382815181106129fa576129fa6140a6565b60200260200101519050826001600160a01b0316816001600160a01b031611612a365760405163c0762a5d60e01b815260040160405180910390fd5b91506001016129dd565b60608060001960ff861601612abd57865115612a7f57868484604051602001612a6b939291906148a6565b604051602081830303815290604052612ab6565b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050505b9650612b55565b60011960ff861601612b3757855115612af957858484604051602001612ae5939291906148a6565b604051602081830303815290604052612b30565b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050505b9550612b55565b604051636780cfaf60e01b815260ff86166004820152602401610868565b509495939450505050565b606060001961ffff851601612c005760228214612b90576040516301b8ca5560e31b815260040160405180910390fd5b6000612bb1612ba360226002868861465e565b612bac91614714565b6133ec565b604051600160f81b60208201819052601160f01b602183015260238201526001600160801b0319608083901b16602482015290915060340160405160208183030381529060405291505061114f565b60011961ffff851601612ccc57604282111580612c1d5750606282115b15612c3b576040516360493e2b60e11b815260040160405180910390fd5b6000612c4e612ba360226002868861465e565b90506000612c63612ba360426022878961465e565b905060006041198501612c79866042818a61465e565b612c8291614714565b60405160086020938403029190911c9250612cb3916001916011918391889183916031916002918b918b91016148ce565b604051602081830303815290604052935050505061114f565b604051630417051360e41b815261ffff85166004820152602401610868565b6060808251600003612cfc57915091565b6000612d078461342d565b90508060ff16600103612db95760408051600180825281830190925290816020015b6060815260200190600190039081612d295790505092508383600081518110612d5457612d546140a6565b602090810291909101015260408051600180825281830190925290816020016020820280368337019050509150612d8c846003613507565b82600081518110612d9f57612d9f6140a6565b602002602001019060ff16908160ff168152505050915091565b8060ff166001600160401b03811115612dd457612dd4613ea2565b604051908082528060200260200182016040528015612dfd578160200160208202803683370190505b5091508060ff166001600160401b03811115612e1b57612e1b613ea2565b604051908082528060200260200182016040528015612e4e57816020015b6060815260200190600190039081612e395790505b50925060008060ff5b8651831015612ee4576001909201916000612e728885613563565b6002949094019390506000612e878986613507565b90508260ff1660ff03612e9c57809250612ed5565b8260ff168160ff1614612ed557600219848603016000612ebd8b87846135c0565b9050612ecb8a8a87846136cd565b5093909301929150815b5061ffff169290920191612e57565b8183036000612ef48985846135c0565b9050612f02888885846136cd565b60005b8660ff168160ff161015612f4557878160ff1681518110612f2857612f286140a6565b6020908102919091010180516000190160ff169052600101612f05565b50505050505050915091565b60006060853b808303612f7857604080516000808252602082019092529250925050610b8c565b60008060008761ffff166001600160401b03811115612f9957612f99613ea2565b6040519080825280601f01601f191660200182016040528015612fc3576020820181803683370190505b509050600080885160208a018d8dfa91503d925087831115612fe3578792505b828152826000602083013e90999098509650505050505050565b6001600160a01b038216613024576040516306b7a93160e41b815260040160405180910390fd5b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114613071576040519150601f19603f3d011682016040523d82523d6000602084013e613076565b606091505b50509050806119be57604051631196f20d60e21b81526001600160a01b038416600482015260248101839052604401610868565b600080602060008451602086016000885af1806130cd576040513d6000823e3d81fd5b50506000513d915081156130e55780600114156130f2565b6001600160a01b0384163b155b1561087a57604051635274afe760e01b81526001600160a01b0385166004820152602401610868565b60608160a001518260c00151604051602001611c13929190614966565b6000606060008061314885612ceb565b9150915060008a604001518b6020015161316291906147a9565b90508060ff166001600160401b0381111561317f5761317f613ea2565b6040519080825280602002602001820160405280156131a8578160200160208202803683370190505b50935060005b8160ff168160ff1610156133dd5760008c6020015160ff168260ff16106132035760a08d015160208e01516131e39084614732565b60ff16815181106131f6576131f66140a6565b6020026020010151613225565b8c608001518260ff168151811061321c5761321c6140a6565b60200260200101515b60408051602081019091526000808252919250905b8551811015613292578360ff16868281518110613259576132596140a6565b602002602001015160ff160361328a5786818151811061327b5761327b6140a6565b60200260200101519150613292565b60010161323a565b50816001600160a01b031663f42ed2ed8e8e8e8e866040518663ffffffff1660e01b81526004016132c79594939291906147c2565b6020604051808303816000875af11580156132e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061330a919061457d565b878460ff168151811061331f5761331f6140a6565b6020026020010181815250506000878460ff1681518110613342576133426140a6565b602002602001015111156133d357868360ff1681518110613365576133656140a6565b602002602001015160056000846001600160a01b03166001600160a01b0316815260200190815260200160002060008282546133a1919061416c565b92505081905550868360ff16815181106133bd576133bd6140a6565b6020026020010151886133d0919061416c565b97505b50506001016131ae565b50505050965096945050505050565b60006fffffffffffffffffffffffffffffffff821115613429576040516306dfcc6560e41b81526080600482015260248101839052604401610868565b5090565b600080805b83518210156134dc57600190910190600061344d8584613563565b905060028301925060028161ffff16101561347e5760405163013adb8360e21b815260048101849052602401610868565b600061348a8685613507565b90508060ff1660ff036134b0576040516334f4f66f60e21b815260040160405180910390fd5b600160ff82161b83166134cd5760019485019460ff82161b831792505b5061ffff169190910190613432565b835182146135005760405163013adb8360e21b815260048101839052602401610868565b5050919050565b600061351482600161416c565b8351101561355a5760405162461bcd60e51b8152602060048201526013602482015272746f55696e74385f6f75744f66426f756e647360681b6044820152606401610868565b50016001015190565b600061357082600261416c565b835110156135b75760405162461bcd60e51b8152602060048201526014602482015273746f55696e7431365f6f75744f66426f756e647360601b6044820152606401610868565b50016002015190565b6060816135ce81601f61416c565b101561360d5760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b6044820152606401610868565b613617828461416c565b8451101561365b5760405162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b6044820152606401610868565b60608215801561367a57604051915060008252602082016040526136c4565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156136b357805183526020928301920161369b565b5050858452601f01601f1916604052505b50949350505050565b8160ff1660ff036136f1576040516334f4f66f60e21b815260040160405180910390fd5b60006136fe8360016147a9565b905060005b84518110156121ad576000858281518110613720576137206140a6565b602002602001015190508060ff168360ff160361379557868281518110613749576137496140a6565b602002602001015184604051602001613763929190614819565b604051602081830303815290604052878381518110613784576137846140a6565b6020026020010181905250506121ad565b8060ff166000036137da57828683815181106137b3576137b36140a6565b602002602001019060ff16908160ff168152505083878381518110613784576137846140a6565b50600101613703565b6040518060c0016040528060006001600160a01b03168152602001600060ff168152602001600060ff168152602001600060ff16815260200160608152602001606081525090565b828054828255906000526020600020908101928215613880579160200282015b8281111561388057825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019061384b565b506134299291505b808211156134295760008155600101613888565b6000602082840312156138ae57600080fd5b81356001600160e01b03198116811461114f57600080fd5b600080600080608085870312156138dc57600080fd5b84356001600160401b038111156138f257600080fd5b850160c0818803121561390457600080fd5b966020860135965060408601359560600135945092505050565b602081016003831061394057634e487b7160e01b600052602160045260246000fd5b91905290565b6001600160a01b03811681146116fc57600080fd5b803561396681613946565b919050565b803563ffffffff8116811461396657600080fd5b80356001600160401b038116811461396657600080fd5b6000806000606084860312156139ab57600080fd5b83356139b681613946565b92506139c46020850161396b565b91506139d26040850161397f565b90509250925092565b6000806000606084860312156139f057600080fd5b83356139fb81613946565b92506020840135613a0b81613946565b929592945050506040919091013590565b60008083601f840112613a2e57600080fd5b5081356001600160401b03811115613a4557600080fd5b6020830191508360208260051b8501011115613a6057600080fd5b9250929050565b600080600060408486031215613a7c57600080fd5b8335613a8781613946565b925060208401356001600160401b03811115613aa257600080fd5b613aae86828701613a1c565b9497909650939450505050565b600080600060608486031215613ad057600080fd5b83359250602084013591506040840135613ae981613946565b809150509250925092565b60008083601f840112613b0657600080fd5b5081356001600160401b03811115613b1d57600080fd5b602083019150836020828501011115613a6057600080fd5b60008060008060608587031215613b4b57600080fd5b84356001600160401b0380821115613b6257600080fd5b9086019060e08289031215613b7657600080fd5b90945060208601359080821115613b8c57600080fd5b50613b9987828801613af4565b90945092505060408501358015158114613bb257600080fd5b939692955090935050565b60005b83811015613bd8578181015183820152602001613bc0565b50506000910152565b60008151808452613bf9816020860160208601613bbd565b601f01601f19169290920160200192915050565b82518152602080840151908201526060604082015260006106166060830184613be1565b60008060008060608587031215613c4757600080fd5b84356001600160401b03811115613c5d57600080fd5b613c6987828801613af4565b90989097506020870135966040013595509350505050565b600060208284031215613c9357600080fd5b61114f8261396b565b60008060408385031215613caf57600080fd5b8235613cba81613946565b9150613cc86020840161396b565b90509250929050565b60008151808452602080850194506020840160005b83811015613d0b5781516001600160a01b031687529582019590820190600101613ce6565b509495945050505050565b60018060a01b03815116825260ff602082015116602083015260ff604082015116604083015260ff60608201511660608301526000608082015160c06080850152613d6460c0850182613cd1565b905060a083015184820360a0860152613d7d8282613cd1565b95945050505050565b60208152600061114f6020830184613d16565b600080600060608486031215613dae57600080fd5b613db78461396b565b92506020840135613dc781613946565b91506139d26040850161396b565b60208152600061114f6020830184613be1565b60008060208385031215613dfb57600080fd5b82356001600160401b03811115613e1157600080fd5b613e1d85828601613a1c565b90969095509350505050565b600060208284031215613e3b57600080fd5b5035919050565b8151815260208083015190820152604081016105f7565b600060208284031215613e6b57600080fd5b813561114f81613946565b60008060408385031215613e8957600080fd5b8235613e9481613946565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b60405160c081016001600160401b0381118282101715613eda57613eda613ea2565b60405290565b60405160e081016001600160401b0381118282101715613eda57613eda613ea2565b604051601f8201601f191681016001600160401b0381118282101715613f2a57613f2a613ea2565b604052919050565b803560ff8116811461396657600080fd5b600082601f830112613f5457600080fd5b813560206001600160401b03821115613f6f57613f6f613ea2565b8160051b613f7e828201613f02565b9283528481018201928281019087851115613f9857600080fd5b83870192505b84831015613fc0578235613fb181613946565b82529183019190830190613f9e565b979650505050505050565b600060c08284031215613fdd57600080fd5b613fe5613eb8565b9050613ff08261395b565b8152613ffe60208301613f32565b602082015261400f60408301613f32565b604082015261402060608301613f32565b606082015260808201356001600160401b038082111561403f57600080fd5b61404b85838601613f43565b608084015260a084013591508082111561406457600080fd5b5061407184828501613f43565b60a08301525092915050565b60006105f73683613fcb565b60006020828403121561409b57600080fd5b815161114f81613946565b634e487b7160e01b600052603260045260246000fd5b60008235605e198336030181126140d257600080fd5b9190910192915050565b6000808335601e198436030181126140f357600080fd5b8301803591506001600160401b0382111561410d57600080fd5b602001915036819003821315613a6057600080fd5b60006020828403121561413457600080fd5b81356001600160401b0381111561414a57600080fd5b61061684828501613fcb565b634e487b7160e01b600052601160045260246000fd5b808201808211156105f7576105f7614156565b8183823760009101908152919050565b6000602082840312156141a157600080fd5b61114f8261397f565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6040815260006141e66040830186613be1565b82810360208401526141f98185876141aa565b9695505050505050565b6001600160a01b038616815260806020820181905260009061422890830186886141aa565b604083019490945250606001529392505050565b60008235603e198336030181126140d257600080fd5b6000823560be198336030181126140d257600080fd5b60006020828403121561427a57600080fd5b61114f82613f32565b6000808335601e1984360301811261429a57600080fd5b83016020810192503590506001600160401b038111156142b957600080fd5b8060051b3603821315613a6057600080fd5b8183526000602080850194508260005b85811015613d0b5781356142ee81613946565b6001600160a01b0316875295820195908201906001016142db565b60208082528181018390526000906040808401600586901b8501820187855b8881101561443f57603f19808985030185528235603e198c360301811261434e57600080fd5b8b0163ffffffff61435e8261396b565b1685528781013560be1982360301811261437757600080fd5b85890188905201803561438981613946565b6001600160a01b0316858801526143a1818901613f32565b606060ff808316828901526143b78a8501613f32565b92506080818416818a01526143cd838601613f32565b935060a09250818416838a01526143e681860186614283565b60c08b810152945091506144019050610100890184836142cb565b92505061441081840184614283565b93509050838783030160e08801526144298284836142cb565b978a019796505050928701925050600101614328565b509098975050505050505050565b600082601f83011261445e57600080fd5b81356001600160401b0381111561447757614477613ea2565b61448a601f8201601f1916602001613f02565b81815284602083860101111561449f57600080fd5b816020850160208301376000918101602001919091529392505050565b600060e082360312156144ce57600080fd5b6144d6613ee0565b6144df8361397f565b81526144ed6020840161396b565b60208201526144fe6040840161395b565b604082015261450f6060840161396b565b60608201526080830135608082015260a083013560a082015260c08301356001600160401b0381111561454157600080fd5b61454d3682860161444d565b60c08301525092915050565b6001600160a01b038316815260406020820181905260009061061690830184613be1565b60006020828403121561458f57600080fd5b5051919050565b600060ff8216806145a9576145a9614156565b6000190192915050565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009061061390830184613d16565b60ff60f81b8960f81b1681526001600160401b0360c01b8860c01b166001820152600063ffffffff60e01b808960e01b16600984015287600d840152808760e01b16602d84015250846031830152836051830152825161464a816071850160208701613bbd565b919091016071019998505050505050505050565b6000808585111561466e57600080fd5b8386111561467b57600080fd5b5050820193919092039150565b6001600160f81b031981358181169160018510156146b05780818660010360031b1b83161692505b505092915050565b6001600160e01b031981358181169160048510156146b05760049490940360031b84901b1690921692915050565b6001600160c01b031981358181169160088510156146b05760089490940360031b84901b1690921692915050565b803560208310156105f757600019602084900360031b1b1692915050565b60ff82811682821603908111156105f7576105f7614156565b600060ff83168061476c57634e487b7160e01b600052601260045260246000fd5b8060ff84160491505092915050565b6001600160f01b031981358181169160028510156146b05760029490940360031b84901b1690921692915050565b60ff81811683821601908111156105f7576105f7614156565b6001600160a01b03861681526080602082018190526000906147e690830187613be1565b82810360408401526147f98186886141aa565b9050828103606084015261480d8185613be1565b98975050505050505050565b6000835161482b818460208801613bbd565b83519083019061483f818360208801613bbd565b01949350505050565b60608152600061485b6060830186613cd1565b6020838203602085015261486f8287613cd1565b84810360408601528551808252602080880194509091019060005b8181101561443f5784518352938301939183019160010161488a565b600084516148b8818460208901613bbd565b8201838582376000930192835250909392505050565b60f88a811b6001600160f81b0319908116835260f08b811b6001600160f01b031990811660018601528b841b8316600386015260808b901b6001600160801b031916600486015289841b831660148601529088901b1660158401529085901b166017820152600061494e601883018560801b6001600160801b0319169052565b50602881019190915260480198975050505050505050565b8281526000825161497e816020850160208701613bbd565b91909101602001939250505056fea2646970667358221220aa3c2aa17972b91a5ad74e17a6fe1bc85298f9e147161924798ce8a3a1115efc64736f6c63430008160033", - "sourceMap": "1834:21083:80:-:0;;;3562:401;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3755:9;3787;-1:-1:-1;;;;;3766:35:80;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3728:10;;1269:95:107;;1322:31;;-1:-1:-1;;;1322:31:107;;1350:1;1322:31;;;1126:51:132;1099:18;;1322:31:107;;;;;;;1269:95;1373:32;1392:12;1373:18;:32::i;:::-;-1:-1:-1;;;;;;468:20:0;;;;;498;;;;3815:36:80::2;::::0;;;;3861:20:::2;:44:::0;3915:10:::2;:41:::0;;-1:-1:-1;;;;;;3915:41:80::2;::::0;;;::::2;::::0;;;::::2;::::0;;;-1:-1:-1;1834:21083:80;;2912:187:107;2985:16;3004:6;;-1:-1:-1;;;;;3020:17:107;;;-1:-1:-1;;;;;;3020:17:107;;;;;;3052:40;;3004:6;;;;;;;3052:40;;2985:16;3052:40;2975:124;2912:187;:::o;14:139:132:-;-1:-1:-1;;;;;97:31:132;;87:42;;77:70;;143:1;140;133:12;77:70;14:139;:::o;158:532::-;263:6;271;279;287;340:3;328:9;319:7;315:23;311:33;308:53;;;357:1;354;347:12;308:53;389:9;383:16;408:39;441:5;408:39;:::i;:::-;516:2;501:18;;495:25;466:5;;-1:-1:-1;529:41:132;495:25;529:41;:::i;:::-;636:2;621:18;;615:25;680:2;665:18;;;659:25;158:532;;589:7;;-1:-1:-1;158:532:132;-1:-1:-1;;;158:532:132:o;695:280::-;764:6;817:2;805:9;796:7;792:23;788:32;785:52;;;833:1;830;823:12;785:52;865:9;859:16;915:10;908:5;904:22;897:5;894:33;884:61;;941:1;938;931:12;884:61;964:5;695:280;-1:-1:-1;;;695:280:132:o;980:203::-;1834:21083:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", - "linkReferences": {} - }, - "deployedBytecode": { - "object": "0x6080604052600436106101855760003560e01c80637620fd01116100d1578063d15b0d491161008a578063f0f4426011610064578063f0f442601461051e578063f2fde38b1461053e578063faaebd211461055e578063fd9be5221461058b57600080fd5b8063d15b0d49146104b1578063d80e9bd9146104d1578063ea69d69d146104fe57600080fd5b80637620fd01146103b65780638da5cb5b146103f95780638eb0bf30146104175780639c33abf714610444578063ab750e7514610471578063c85f4b4e1461049157600080fd5b806320efd7221161013e57806354fd4d501161011857806354fd4d5014610334578063594924da146103615780636750cd4c14610381578063715018a6146103a157600080fd5b806320efd722146102a85780633c782a52146102c85780634389e58f1461030657600080fd5b806301ffc9a714610191578063052368ca146101c65780630e97289b146101e65780631881d94d1461021e5780631fb512251461023a578063200175f71461028657600080fd5b3661018c57005b600080fd5b34801561019d57600080fd5b506101b16101ac36600461389c565b6105ab565b60405190151581526020015b60405180910390f35b3480156101d257600080fd5b506101b16101e13660046138c6565b6105fd565b3480156101f257600080fd5b50600254610206906001600160a01b031681565b6040516001600160a01b0390911681526020016101bd565b34801561022a57600080fd5b5060026040516101bd919061391e565b34801561024657600080fd5b50610278610255366004613996565b600360209081526000938452604080852082529284528284209052825290205481565b6040519081526020016101bd565b34801561029257600080fd5b506102a66102a13660046139db565b61061e565b005b3480156102b457600080fd5b506102a66102c3366004613a67565b610758565b3480156102d457600080fd5b506102786102e3366004613abb565b600460209081526000938452604080852082529284528284209052825290205481565b34801561031257600080fd5b50610326610321366004613b35565b610880565b6040516101bd929190613c0d565b34801561034057600080fd5b5060408051600a8152600060208201526002918101919091526060016101bd565b34801561036d57600080fd5b506102a661037c366004613c31565b610b95565b34801561038d57600080fd5b506101b161039c366004613c81565b610dd6565b3480156103ad57600080fd5b506102a6610de1565b3480156103c257600080fd5b506103da6007546006546001600160a01b0390911691565b604080516001600160a01b0390931683526020830191909152016101bd565b34801561040557600080fd5b506000546001600160a01b0316610206565b34801561042357600080fd5b50610437610432366004613c9c565b610df5565b6040516101bd9190613d86565b34801561045057600080fd5b5061046461045f366004613d99565b6110ed565b6040516101bd9190613dd5565b34801561047d57600080fd5b506102a661048c366004613c31565b611156565b34801561049d57600080fd5b506102a66104ac366004613de8565b6111e1565b3480156104bd57600080fd5b506102a66104cc366004613e29565b611373565b3480156104dd57600080fd5b506104f16104ec366004613b35565b6113e8565b6040516101bd9190613e42565b34801561050a57600080fd5b50610437610519366004613c9c565b611534565b34801561052a57600080fd5b506102a6610539366004613e59565b61166b565b34801561054a57600080fd5b506102a6610559366004613e59565b6116c1565b34801561056a57600080fd5b50610278610579366004613e59565b60056020526000908152604090205481565b34801561059757600080fd5b506102a66105a6366004613e76565b6116ff565b60006001600160e01b031982166325fc096160e21b14806105dc57506001600160e01b0319821663b6e9ace360e01b145b806105f757506301ffc9a760e01b6001600160e01b03198316145b92915050565b600061061361060b8661407d565b858585611827565b90505b949350505050565b6007546001600160a01b0316331461064957604051634b41868f60e11b815260040160405180910390fd5b826001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e1758bd86040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106d59190614089565b6001600160a01b0316036106fc57604051632ddfd41160e21b815260040160405180910390fd5b610707838383611983565b604080516001600160a01b038086168252841660208201529081018290527fe081464b7278501267de69fa85b7b9560b0ae05d5fbfaab9b1986c70356e2efe906060015b60405180910390a1505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633146107a15760405163467409c360e01b815260040160405180910390fd5b60005b8181101561087a57368383838181106107bf576107bf6140a6565b90506020028101906107d191906140bc565b90506107e86107e36020830183613c81565b6119c3565b60016107fa6040830160208401613c81565b63ffffffff160361083a576108356108156020830183613c81565b8661082360408501856140dc565b8101906108309190614122565b6119f1565b610871565b61084a6040820160208301613c81565b60405163065c274160e11b815263ffffffff90911660048201526024015b60405180910390fd5b506001016107a4565b50505050565b604080518082019091526000808252602082015260607f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633146108df5760405163467409c360e01b815260040160405180910390fd5b60808601356109036108f76060890160408a01613e59565b6001600160a01b031690565b146109215760405163a4884a5960e01b815260040160405180910390fd5b60008061092f888888611a3a565b909250905060008061096161094a60608c0160408d01613e59565b61095a60808d0160608e01613c81565b858a611ac3565b9092509050610970828461416c565b925061097f60c08b018b6140dc565b60405161098d92919061417f565b6040518091039020600360008c60400160208101906109ac9190613e59565b6001600160a01b0316815260208101919091526040016000908120906109d860808e0160608f01613c81565b63ffffffff1681526020808201929092526040016000908120916109fe908e018e61418f565b6001600160401b03166001600160401b03168152602001908152602001600020819055506000610b0c6040518060e001604052808d6000016020810190610a45919061418f565b6001600160401b031681526020018d6060016020810190610a669190613c81565b63ffffffff1681526020018d6040016020810190610a849190613e59565b6001600160a01b031681526020018d6020016020810190610aa59190613c81565b63ffffffff16815260808e0135602082015260a08e01356040820152606001610ad160c08f018f6140dc565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050915250611bd1565b600254604051631f5dad8b60e31b81529192506001600160a01b03169063faed6c5890610b419084908e908e906004016141d3565b600060405180830381600087803b158015610b5b57600080fd5b505af1158015610b6f573d6000803e3d6000fd5b505060408051808201909152958652505050602083015250925090505b94509492505050565b60518314610bb65760405163864d08b360e01b815260040160405180910390fd5b6001610bc28585611c29565b60ff1614610be357604051637952a82f60e01b815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000063ffffffff16610c148585611c4b565b63ffffffff1614610c3857604051631f4b6f8b60e11b815260040160405180910390fd5b6000610c448585611c6e565b90506000610c528686611c80565b90506000610c608787611c90565b6001600160a01b038416600090815260036020908152604080832063ffffffff8716845282528083206001600160401b03851684529091529020549091508514610cbd576040516333074b7760e11b815260040160405180910390fd5b6000610cc98484610df5565b9050610cee818989604051610cdf92919061417f565b60405180910390208888611cb3565b600060405180606001604052808563ffffffff168152602001610d118b8b611e03565b81526001600160401b038581166020928301526040805163a825d74760e01b8152845163ffffffff1660048201529284015160248401528301511660448201526001600160a01b038781166064830152608482018990529192507f00000000000000000000000000000000000000000000000000000000000000009091169063a825d7479060a401600060405180830381600087803b158015610db357600080fd5b505af1158015610dc7573d6000803e3d6000fd5b50505050505050505050505050565b60006105f782611e1c565b610de9611e77565b610df36000611ea4565b565b610dfd6137e3565b63ffffffff821660008181527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49602090815260408083206001600160a01b03888116855260018452828520958552949092529091208054919290911680610e6e5782546001600160a01b0316610e70565b805b6001600160a01b031684528154600160a01b900460ff16610f15578254600160a01b900460ff1615610f105782600101805480602002602001604051908101604052809291908181526020018280548015610ef457602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610ed6575b505050505060808501528254600160a01b900460ff1660208501525b610f9c565b8154600160a01b900460ff90811614610f9c5781600101805480602002602001604051908101604052809291908181526020018280548015610f8057602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610f62575b505050505060808501528154600160a01b900460ff1660208501525b8154600160a81b900460ff16611045578254600160a81b900460ff1615611040578260020180548060200260200160405190810160405280929190818152602001828054801561101557602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610ff7575b505050505060a0850152825460ff600160a81b820481166040870152600160b01b9091041660608501525b6110db565b8154600160a81b900460ff908116146110db57816002018054806020026020016040519081016040528092919081815260200182805480156110b057602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611092575b505050505060a0850152815460ff600160a81b820481166040870152600160b01b9091041660608501525b6110e484611ef4565b50505092915050565b606060001963ffffffff83160161112e576111088385610df5565b6040516020016111189190613d86565b604051602081830303815290604052905061114f565b60405163065c274160e11b815263ffffffff83166004820152602401610868565b9392505050565b8060046000868660405161116b92919061417f565b60408051918290039091208252602080830193909352908101600090812086825283528181203380835293528190209290925590517f04708e5dfef6005d6d646eb761e3b9e412e1cc5749fc9d884bca441cc7a95258916111d3918790879087908790614203565b60405180910390a150505050565b6111e9611e77565b60005b818110156113355736838383818110611207576112076140a6565b9050602002810190611219919061423c565b905060ff61122a6020830183614252565b61123b906040810190602001614268565b60ff160361125c57604051632ad00e0160e11b815260040160405180910390fd5b60ff61126b6020830183614252565b61127c906060810190604001614268565b60ff160361129d576040516371aa1b6360e11b815260040160405180910390fd5b6112bb6112ad6020830183614252565b6112b69061407d565b611ef4565b60006112ca6020830183614252565b6112d8906020810190613e59565b6001600160a01b0316036112ff57604051633b6faad360e11b815260040160405180910390fd5b61132c60006113116020840184613c81565b61131e6020850185614252565b6113279061407d565b611f2c565b506001016111ec565b507f65edb7dc0f21ba15c998f8bd220ea9fec30757ff9fb07696c634bcce00ce6f348282604051611367929190614309565b60405180910390a15050565b61137b611e77565b6006548111156113ac5760065460405163b79d126360e01b8152610868918391600401918252602082015260400190565b60068190556040518181527f491ff913b5444f4136b0d4075f020cfe3a5f60de926ec0b091612401a22b7842906020015b60405180910390a150565b604080518082019091526000808252602082015260008061140986866121b5565b909250905060006114206060890160408a01613e59565b9050600061143460808a0160608b01613c81565b905060006114428383610df5565b90506000611472828561145c6114578f6144bc565b612374565b8e8060c0019061146c91906140dc565b8a6123ef565b825160405163c8f8dcd160e01b81529192506001600160a01b03169063c8f8dcd1906114a49087908a90600401614559565b602060405180830381865afa1580156114c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114e5919061457d565b6114ef908261416c565b90506000806115008686858d61259d565b909250905061150f828461416c565b6040805180820190915290815260208101919091529c9b505050505050505050505050565b61153c6137e3565b6001600160a01b03808416600090815260016020818152604080842063ffffffff88168552825292839020835160c0810185528154958616815260ff600160a01b8704811682850152600160a81b8704811682870152600160b01b909604909516606086015291820180548451818402810184019095528085529293608086019390928301828280156115f857602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116115da575b505050505081526020016002820180548060200260200160405190810160405280929190818152602001828054801561165a57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161163c575b505050505081525050905092915050565b611673611e77565b600780546001600160a01b0319166001600160a01b0383169081179091556040519081527f3c864541ef71378c6229510ed90f376565ee42d9c5e0904a984a9e863e6db44f906020016113dd565b6116c9611e77565b6001600160a01b0381166116f357604051631e4fbdf760e01b815260006004820152602401610868565b6116fc81611ea4565b50565b336000908152600560205260409020548082111561173a5760405163b79d126360e01b81526004810183905260248101829052604401610868565b33600090815260056020908152604080832085850390558051631c2eb17b60e31b815290517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169263e1758bd892600480820193918290030181865afa1580156117b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117d49190614089565b90506117e181858561266e565b604080513381526001600160a01b03861660208201529081018490527f820b7fd51bf79c54350bab98400651b3314ff6e79b33528821871d94a6669883906060016111d3565b602084015160009060ff16156118d35760005b856020015160ff168160ff1610156118bb576118a586608001518260ff1681518110611868576118686140a6565b602002602001015186868660009283526004602090815260408085209385529281528284206001600160a01b039095168452939093529020541490565b6118b3576000915050610616565b60010161183a565b50846040015160ff166000036118d357506001610616565b606085015160005b866040015160ff168160ff161015611976576119468760a001518260ff1681518110611909576119096140a6565b602002602001015187878760009283526004602090815260408085209385529281528284206001600160a01b039095168452939093529020541490565b1561196e578161195581614596565b9250508160ff1660000361196e57600192505050610616565b6001016118db565b5060009695505050505050565b6001600160a01b0382166119aa576040516306b7a93160e41b815260040160405180910390fd5b6119be6001600160a01b0384168383612691565b505050565b6119cc81611e1c565b6116fc576040516303fc0f9560e21b815263ffffffff82166004820152602401610868565b6119fc828483611f2c565b611a068284610df5565b507fe8e2a5b92fc69ac50188ea142042492be8e8c34febb10b2cd02983684336e14282848360405161074b939291906145b3565b60606000806000611a4b86866121b5565b90925090506000611a75611a6560608a0160408b01613e59565b61043260808b0160608c01613c81565b8051909150611a9490611a8e60608b0160408c01613e59565b856126e3565b9350600080611aa4838b866127d6565b9092509050611ab3828761416c565b909a909950975050505050505050565b60075460009081906001600160a01b031615610b8c576040516001600160a01b038716602482015263ffffffff8616604482015260648101859052831515608482015260009060a40160408051601f19818403018152919052602080820180516001600160e01b0316636a8e2a4360e11b1790526007549192506000918291611b7a916001600160a01b0316907f00000000000000000000000000000000000000000000000000000000000000009084908761289e565b91509150611b8a8787848461294e565b90955093508415611bc5576007546001600160a01b031660009081526005602052604081208054879290611bbf90849061416c565b90915550505b50505094509492505050565b8051602080830151604080850151606080870151608088015160a089015160c08a015195519398611c1398600198919791966001600160a01b031695016145e3565b6040516020818303038152906040529050919050565b6000611c38600182848661465e565b611c4191614688565b60f81c9392505050565b6000611c5b6031602d848661465e565b611c64916146b8565b60e01c9392505050565b600061114f611c7d84846129c9565b90565b6000611c5b600d6009848661465e565b6000611ca060096001848661465e565b611ca9916146e6565b60c01c9392505050565b611cbf84848484611827565b611cdc576040516328ca4b5160e01b815260040160405180910390fd5b602084015160ff1615611d6d5760005b846020015160ff168160ff161015611d6b57600084815260046020908152604080832086845290915281206080870151805191929160ff8516908110611d3457611d346140a6565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060009055806001019050611cec565b505b604084015160ff161561087a5760005b846040015160ff168160ff161015611dfc576000848152600460209081526040808320868452909152812060a0870151805191929160ff8516908110611dc557611dc56140a6565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060009055806001019050611d7d565b5050505050565b6000611e13602d600d848661465e565b61114f91614714565b63ffffffff811660009081527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49602052604081208054600160a01b900460ff1615158061114f575054600160b01b900460ff16151592915050565b6000546001600160a01b03163314610df35760405163118cdaa760e01b8152336004820152602401610868565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b602081015160ff16158015611f0e5750606081015160ff16155b156116fc57604051634dafcfbd60e11b815260040160405180910390fd5b602081015160ff9081161480611f475750602081015160ff16155b15611f755760808101515115611f7057604051632ad00e0160e11b815260040160405180910390fd5b611fdb565b806020015160ff16816080015151141580611fb057506002611f99600160ff614732565b611fa3919061474b565b60ff16816020015160ff16115b15611fce57604051632ad00e0160e11b815260040160405180910390fd5b611fdb81608001516129d9565b604081015160ff9081161480611ff65750604081015160ff16155b1561204a5760a0810151511561201f576040516371aa1b6360e11b815260040160405180910390fd5b606081015160ff161561204557604051637c94a05f60e11b815260040160405180910390fd5b6120ef565b806040015160ff168160a00151511415806120855750600261206e600160ff614732565b612078919061474b565b60ff16816040015160ff16115b156120a3576040516371aa1b6360e11b815260040160405180910390fd5b606081015160ff1615806120c45750806040015160ff16816060015160ff16115b156120e257604051637c94a05f60e11b815260040160405180910390fd5b6120ef8160a001516129d9565b6001600160a01b03838116600090815260016020818152604080842063ffffffff881685528252928390208551815487840151958801516060890151929097166001600160a81b031990911617600160a01b60ff968716021761ffff60a81b1916600160a81b9686169690960260ff60b01b191695909517600160b01b949095169390930293909317825560808401518051859461219193850192019061382b565b5060a082015180516121ad91600284019160209091019061382b565b505050505050565b60608060028310156121dd5760405163196499c760e21b815260006004820152602401610868565b60006121ec600282868861465e565b6121f59161477b565b60f01c90506002600219820161235d578060005b8683101561230257600061222260018501858a8c61465e565b61222b91614688565b60f81c9050600081900361225557604051636780cfaf60e01b815260006004820152602401610868565b8160ff16600003612268578091506122a5565b8160ff168160ff16146122a55736600061228486868c8e61465e565b915091506122958989868585612a40565b9099509750859450919250829150505b60018401936000906122bc90600301868b8d61465e565b6122c59161477b565b60f01c905060008190036122ef5760405163196499c760e21b815260048101869052602401610868565b8060020161ffff16850194505050612209565b8287146123255760405163196499c760e21b815260048101849052602401610868565b60028711156123565736600061233d85858b8d61465e565b9150915061234e8888858585612a40565b909850965050505b505061236b565b612368828787612b60565b93505b50509250929050565b805160208083015160408085015160608087015160808801519351600160f81b9681019690965260c09690961b6001600160c01b031916602186015260e093841b6001600160e01b031990811660298701526001600160a01b03909216602d8601529490921b909116604d8301526051820152607101611c13565b60008060006123fd84612ceb565b91509150600089604001518a6020015161241791906147a9565b905060005b8160ff168160ff16101561258f5760008b6020015160ff168260ff16106124715760a08c015160208d01516124519084614732565b60ff1681518110612464576124646140a6565b6020026020010151612493565b8b608001518260ff168151811061248a5761248a6140a6565b60200260200101515b60408051602081019091526000808252919250905b8551811015612500578360ff168682815181106124c7576124c76140a6565b602002602001015160ff16036124f8578681815181106124e9576124e96140a6565b60200260200101519150612500565b6001016124a8565b5060405163fdb9b0f160e01b81526001600160a01b0383169063fdb9b0f190612535908f908f908f908f9088906004016147c2565b602060405180830381865afa158015612552573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612576919061457d565b612580908861416c565b9650505080600101905061241c565b505050509695505050505050565b60075460009081906001600160a01b031615610b8c576040516001600160a01b038716602482015263ffffffff8616604482015260648101859052831515608482015260009060a40160408051601f19818403018152919052602080820180516001600160e01b031663d424422160e01b1790526007549192506000918291612652916001600160a01b0316907f00000000000000000000000000000000000000000000000000000000000000009086612f51565b915091506126628787848461294e565b94509450505050610b8c565b6001600160a01b038316612686576119be8282612ffd565b6119be838383611983565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526119be9084906130aa565b60405163c015bb7d60e01b81526000906001600160a01b0385169063c015bb7d906127149086908690600401614559565b6020604051808303816000875af1158015612733573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612757919061457d565b9050801561278d576001600160a01b0384166000908152600560205260408120805483929061278790849061416c565b90915550505b604080516001600160a01b0386168152602081018390527f61ed099e74a97a1d7f8bb0952a88ca8b7b8ebd00c126ea04671f92a81213318a910160405180910390a19392505050565b60006060816127e7611457866144bc565b905060006127fc6127f7876144bc565b61311b565b905060606128278861281389840160408b01613e59565b8561282160c08c018c6140dc565b8b613138565b604051919650915061283f9084908490602001614819565b60405160208183030381529060405293507f07ea52d82345d6e838192107d8fd7123d9c2ec8e916cd0aad13fd2b60db2464488608001518960a001518360405161288b93929190614848565b60405180910390a1505050935093915050565b60006060863b8083036128c557604080516000808252602082019092529250925050612944565b60008060008761ffff166001600160401b038111156128e6576128e6613ea2565b6040519080825280601f01601f191660200182016040528015612910576020820181803683370190505b509050600080885160208a018c8f8ff191503d925087831115612931578792505b828152826000602083013e909450925050505b9550959350505050565b60008083158061295f575082516020115b1561296f57506000905080610b8c565b600083806020019051810190612985919061457d565b90508515612995578091506129bf565b600060065488116129a8576006546129aa565b875b90508082116129b957816129bb565b805b9350505b5094509492505050565b6000611e1360516031848661465e565b6000805b82518110156119be5760008382815181106129fa576129fa6140a6565b60200260200101519050826001600160a01b0316816001600160a01b031611612a365760405163c0762a5d60e01b815260040160405180910390fd5b91506001016129dd565b60608060001960ff861601612abd57865115612a7f57868484604051602001612a6b939291906148a6565b604051602081830303815290604052612ab6565b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050505b9650612b55565b60011960ff861601612b3757855115612af957858484604051602001612ae5939291906148a6565b604051602081830303815290604052612b30565b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050505b9550612b55565b604051636780cfaf60e01b815260ff86166004820152602401610868565b509495939450505050565b606060001961ffff851601612c005760228214612b90576040516301b8ca5560e31b815260040160405180910390fd5b6000612bb1612ba360226002868861465e565b612bac91614714565b6133ec565b604051600160f81b60208201819052601160f01b602183015260238201526001600160801b0319608083901b16602482015290915060340160405160208183030381529060405291505061114f565b60011961ffff851601612ccc57604282111580612c1d5750606282115b15612c3b576040516360493e2b60e11b815260040160405180910390fd5b6000612c4e612ba360226002868861465e565b90506000612c63612ba360426022878961465e565b905060006041198501612c79866042818a61465e565b612c8291614714565b60405160086020938403029190911c9250612cb3916001916011918391889183916031916002918b918b91016148ce565b604051602081830303815290604052935050505061114f565b604051630417051360e41b815261ffff85166004820152602401610868565b6060808251600003612cfc57915091565b6000612d078461342d565b90508060ff16600103612db95760408051600180825281830190925290816020015b6060815260200190600190039081612d295790505092508383600081518110612d5457612d546140a6565b602090810291909101015260408051600180825281830190925290816020016020820280368337019050509150612d8c846003613507565b82600081518110612d9f57612d9f6140a6565b602002602001019060ff16908160ff168152505050915091565b8060ff166001600160401b03811115612dd457612dd4613ea2565b604051908082528060200260200182016040528015612dfd578160200160208202803683370190505b5091508060ff166001600160401b03811115612e1b57612e1b613ea2565b604051908082528060200260200182016040528015612e4e57816020015b6060815260200190600190039081612e395790505b50925060008060ff5b8651831015612ee4576001909201916000612e728885613563565b6002949094019390506000612e878986613507565b90508260ff1660ff03612e9c57809250612ed5565b8260ff168160ff1614612ed557600219848603016000612ebd8b87846135c0565b9050612ecb8a8a87846136cd565b5093909301929150815b5061ffff169290920191612e57565b8183036000612ef48985846135c0565b9050612f02888885846136cd565b60005b8660ff168160ff161015612f4557878160ff1681518110612f2857612f286140a6565b6020908102919091010180516000190160ff169052600101612f05565b50505050505050915091565b60006060853b808303612f7857604080516000808252602082019092529250925050610b8c565b60008060008761ffff166001600160401b03811115612f9957612f99613ea2565b6040519080825280601f01601f191660200182016040528015612fc3576020820181803683370190505b509050600080885160208a018d8dfa91503d925087831115612fe3578792505b828152826000602083013e90999098509650505050505050565b6001600160a01b038216613024576040516306b7a93160e41b815260040160405180910390fd5b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114613071576040519150601f19603f3d011682016040523d82523d6000602084013e613076565b606091505b50509050806119be57604051631196f20d60e21b81526001600160a01b038416600482015260248101839052604401610868565b600080602060008451602086016000885af1806130cd576040513d6000823e3d81fd5b50506000513d915081156130e55780600114156130f2565b6001600160a01b0384163b155b1561087a57604051635274afe760e01b81526001600160a01b0385166004820152602401610868565b60608160a001518260c00151604051602001611c13929190614966565b6000606060008061314885612ceb565b9150915060008a604001518b6020015161316291906147a9565b90508060ff166001600160401b0381111561317f5761317f613ea2565b6040519080825280602002602001820160405280156131a8578160200160208202803683370190505b50935060005b8160ff168160ff1610156133dd5760008c6020015160ff168260ff16106132035760a08d015160208e01516131e39084614732565b60ff16815181106131f6576131f66140a6565b6020026020010151613225565b8c608001518260ff168151811061321c5761321c6140a6565b60200260200101515b60408051602081019091526000808252919250905b8551811015613292578360ff16868281518110613259576132596140a6565b602002602001015160ff160361328a5786818151811061327b5761327b6140a6565b60200260200101519150613292565b60010161323a565b50816001600160a01b031663f42ed2ed8e8e8e8e866040518663ffffffff1660e01b81526004016132c79594939291906147c2565b6020604051808303816000875af11580156132e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061330a919061457d565b878460ff168151811061331f5761331f6140a6565b6020026020010181815250506000878460ff1681518110613342576133426140a6565b602002602001015111156133d357868360ff1681518110613365576133656140a6565b602002602001015160056000846001600160a01b03166001600160a01b0316815260200190815260200160002060008282546133a1919061416c565b92505081905550868360ff16815181106133bd576133bd6140a6565b6020026020010151886133d0919061416c565b97505b50506001016131ae565b50505050965096945050505050565b60006fffffffffffffffffffffffffffffffff821115613429576040516306dfcc6560e41b81526080600482015260248101839052604401610868565b5090565b600080805b83518210156134dc57600190910190600061344d8584613563565b905060028301925060028161ffff16101561347e5760405163013adb8360e21b815260048101849052602401610868565b600061348a8685613507565b90508060ff1660ff036134b0576040516334f4f66f60e21b815260040160405180910390fd5b600160ff82161b83166134cd5760019485019460ff82161b831792505b5061ffff169190910190613432565b835182146135005760405163013adb8360e21b815260048101839052602401610868565b5050919050565b600061351482600161416c565b8351101561355a5760405162461bcd60e51b8152602060048201526013602482015272746f55696e74385f6f75744f66426f756e647360681b6044820152606401610868565b50016001015190565b600061357082600261416c565b835110156135b75760405162461bcd60e51b8152602060048201526014602482015273746f55696e7431365f6f75744f66426f756e647360601b6044820152606401610868565b50016002015190565b6060816135ce81601f61416c565b101561360d5760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b6044820152606401610868565b613617828461416c565b8451101561365b5760405162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b6044820152606401610868565b60608215801561367a57604051915060008252602082016040526136c4565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156136b357805183526020928301920161369b565b5050858452601f01601f1916604052505b50949350505050565b8160ff1660ff036136f1576040516334f4f66f60e21b815260040160405180910390fd5b60006136fe8360016147a9565b905060005b84518110156121ad576000858281518110613720576137206140a6565b602002602001015190508060ff168360ff160361379557868281518110613749576137496140a6565b602002602001015184604051602001613763929190614819565b604051602081830303815290604052878381518110613784576137846140a6565b6020026020010181905250506121ad565b8060ff166000036137da57828683815181106137b3576137b36140a6565b602002602001019060ff16908160ff168152505083878381518110613784576137846140a6565b50600101613703565b6040518060c0016040528060006001600160a01b03168152602001600060ff168152602001600060ff168152602001600060ff16815260200160608152602001606081525090565b828054828255906000526020600020908101928215613880579160200282015b8281111561388057825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019061384b565b506134299291505b808211156134295760008155600101613888565b6000602082840312156138ae57600080fd5b81356001600160e01b03198116811461114f57600080fd5b600080600080608085870312156138dc57600080fd5b84356001600160401b038111156138f257600080fd5b850160c0818803121561390457600080fd5b966020860135965060408601359560600135945092505050565b602081016003831061394057634e487b7160e01b600052602160045260246000fd5b91905290565b6001600160a01b03811681146116fc57600080fd5b803561396681613946565b919050565b803563ffffffff8116811461396657600080fd5b80356001600160401b038116811461396657600080fd5b6000806000606084860312156139ab57600080fd5b83356139b681613946565b92506139c46020850161396b565b91506139d26040850161397f565b90509250925092565b6000806000606084860312156139f057600080fd5b83356139fb81613946565b92506020840135613a0b81613946565b929592945050506040919091013590565b60008083601f840112613a2e57600080fd5b5081356001600160401b03811115613a4557600080fd5b6020830191508360208260051b8501011115613a6057600080fd5b9250929050565b600080600060408486031215613a7c57600080fd5b8335613a8781613946565b925060208401356001600160401b03811115613aa257600080fd5b613aae86828701613a1c565b9497909650939450505050565b600080600060608486031215613ad057600080fd5b83359250602084013591506040840135613ae981613946565b809150509250925092565b60008083601f840112613b0657600080fd5b5081356001600160401b03811115613b1d57600080fd5b602083019150836020828501011115613a6057600080fd5b60008060008060608587031215613b4b57600080fd5b84356001600160401b0380821115613b6257600080fd5b9086019060e08289031215613b7657600080fd5b90945060208601359080821115613b8c57600080fd5b50613b9987828801613af4565b90945092505060408501358015158114613bb257600080fd5b939692955090935050565b60005b83811015613bd8578181015183820152602001613bc0565b50506000910152565b60008151808452613bf9816020860160208601613bbd565b601f01601f19169290920160200192915050565b82518152602080840151908201526060604082015260006106166060830184613be1565b60008060008060608587031215613c4757600080fd5b84356001600160401b03811115613c5d57600080fd5b613c6987828801613af4565b90989097506020870135966040013595509350505050565b600060208284031215613c9357600080fd5b61114f8261396b565b60008060408385031215613caf57600080fd5b8235613cba81613946565b9150613cc86020840161396b565b90509250929050565b60008151808452602080850194506020840160005b83811015613d0b5781516001600160a01b031687529582019590820190600101613ce6565b509495945050505050565b60018060a01b03815116825260ff602082015116602083015260ff604082015116604083015260ff60608201511660608301526000608082015160c06080850152613d6460c0850182613cd1565b905060a083015184820360a0860152613d7d8282613cd1565b95945050505050565b60208152600061114f6020830184613d16565b600080600060608486031215613dae57600080fd5b613db78461396b565b92506020840135613dc781613946565b91506139d26040850161396b565b60208152600061114f6020830184613be1565b60008060208385031215613dfb57600080fd5b82356001600160401b03811115613e1157600080fd5b613e1d85828601613a1c565b90969095509350505050565b600060208284031215613e3b57600080fd5b5035919050565b8151815260208083015190820152604081016105f7565b600060208284031215613e6b57600080fd5b813561114f81613946565b60008060408385031215613e8957600080fd5b8235613e9481613946565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b60405160c081016001600160401b0381118282101715613eda57613eda613ea2565b60405290565b60405160e081016001600160401b0381118282101715613eda57613eda613ea2565b604051601f8201601f191681016001600160401b0381118282101715613f2a57613f2a613ea2565b604052919050565b803560ff8116811461396657600080fd5b600082601f830112613f5457600080fd5b813560206001600160401b03821115613f6f57613f6f613ea2565b8160051b613f7e828201613f02565b9283528481018201928281019087851115613f9857600080fd5b83870192505b84831015613fc0578235613fb181613946565b82529183019190830190613f9e565b979650505050505050565b600060c08284031215613fdd57600080fd5b613fe5613eb8565b9050613ff08261395b565b8152613ffe60208301613f32565b602082015261400f60408301613f32565b604082015261402060608301613f32565b606082015260808201356001600160401b038082111561403f57600080fd5b61404b85838601613f43565b608084015260a084013591508082111561406457600080fd5b5061407184828501613f43565b60a08301525092915050565b60006105f73683613fcb565b60006020828403121561409b57600080fd5b815161114f81613946565b634e487b7160e01b600052603260045260246000fd5b60008235605e198336030181126140d257600080fd5b9190910192915050565b6000808335601e198436030181126140f357600080fd5b8301803591506001600160401b0382111561410d57600080fd5b602001915036819003821315613a6057600080fd5b60006020828403121561413457600080fd5b81356001600160401b0381111561414a57600080fd5b61061684828501613fcb565b634e487b7160e01b600052601160045260246000fd5b808201808211156105f7576105f7614156565b8183823760009101908152919050565b6000602082840312156141a157600080fd5b61114f8261397f565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6040815260006141e66040830186613be1565b82810360208401526141f98185876141aa565b9695505050505050565b6001600160a01b038616815260806020820181905260009061422890830186886141aa565b604083019490945250606001529392505050565b60008235603e198336030181126140d257600080fd5b6000823560be198336030181126140d257600080fd5b60006020828403121561427a57600080fd5b61114f82613f32565b6000808335601e1984360301811261429a57600080fd5b83016020810192503590506001600160401b038111156142b957600080fd5b8060051b3603821315613a6057600080fd5b8183526000602080850194508260005b85811015613d0b5781356142ee81613946565b6001600160a01b0316875295820195908201906001016142db565b60208082528181018390526000906040808401600586901b8501820187855b8881101561443f57603f19808985030185528235603e198c360301811261434e57600080fd5b8b0163ffffffff61435e8261396b565b1685528781013560be1982360301811261437757600080fd5b85890188905201803561438981613946565b6001600160a01b0316858801526143a1818901613f32565b606060ff808316828901526143b78a8501613f32565b92506080818416818a01526143cd838601613f32565b935060a09250818416838a01526143e681860186614283565b60c08b810152945091506144019050610100890184836142cb565b92505061441081840184614283565b93509050838783030160e08801526144298284836142cb565b978a019796505050928701925050600101614328565b509098975050505050505050565b600082601f83011261445e57600080fd5b81356001600160401b0381111561447757614477613ea2565b61448a601f8201601f1916602001613f02565b81815284602083860101111561449f57600080fd5b816020850160208301376000918101602001919091529392505050565b600060e082360312156144ce57600080fd5b6144d6613ee0565b6144df8361397f565b81526144ed6020840161396b565b60208201526144fe6040840161395b565b604082015261450f6060840161396b565b60608201526080830135608082015260a083013560a082015260c08301356001600160401b0381111561454157600080fd5b61454d3682860161444d565b60c08301525092915050565b6001600160a01b038316815260406020820181905260009061061690830184613be1565b60006020828403121561458f57600080fd5b5051919050565b600060ff8216806145a9576145a9614156565b6000190192915050565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009061061390830184613d16565b60ff60f81b8960f81b1681526001600160401b0360c01b8860c01b166001820152600063ffffffff60e01b808960e01b16600984015287600d840152808760e01b16602d84015250846031830152836051830152825161464a816071850160208701613bbd565b919091016071019998505050505050505050565b6000808585111561466e57600080fd5b8386111561467b57600080fd5b5050820193919092039150565b6001600160f81b031981358181169160018510156146b05780818660010360031b1b83161692505b505092915050565b6001600160e01b031981358181169160048510156146b05760049490940360031b84901b1690921692915050565b6001600160c01b031981358181169160088510156146b05760089490940360031b84901b1690921692915050565b803560208310156105f757600019602084900360031b1b1692915050565b60ff82811682821603908111156105f7576105f7614156565b600060ff83168061476c57634e487b7160e01b600052601260045260246000fd5b8060ff84160491505092915050565b6001600160f01b031981358181169160028510156146b05760029490940360031b84901b1690921692915050565b60ff81811683821601908111156105f7576105f7614156565b6001600160a01b03861681526080602082018190526000906147e690830187613be1565b82810360408401526147f98186886141aa565b9050828103606084015261480d8185613be1565b98975050505050505050565b6000835161482b818460208801613bbd565b83519083019061483f818360208801613bbd565b01949350505050565b60608152600061485b6060830186613cd1565b6020838203602085015261486f8287613cd1565b84810360408601528551808252602080880194509091019060005b8181101561443f5784518352938301939183019160010161488a565b600084516148b8818460208901613bbd565b8201838582376000930192835250909392505050565b60f88a811b6001600160f81b0319908116835260f08b811b6001600160f01b031990811660018601528b841b8316600386015260808b901b6001600160801b031916600486015289841b831660148601529088901b1660158401529085901b166017820152600061494e601883018560801b6001600160801b0319169052565b50602881019190915260480198975050505050505050565b8281526000825161497e816020850160208701613bbd565b91909101602001939250505056fea2646970667358221220aa3c2aa17972b91a5ad74e17a6fe1bc85298f9e147161924798ce8a3a1115efc64736f6c63430008160033", - "sourceMap": "1834:21083:80:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3969:293;;;;;;;;;;-1:-1:-1;3969:293:80;;;;;:::i;:::-;;:::i;:::-;;;470:14:132;;463:22;445:41;;433:2;418:18;3969:293:80;;;;;;;;11619:266;;;;;;;;;;-1:-1:-1;11619:266:80;;;;;:::i;:::-;;:::i;2015:31::-;;;;;;;;;;-1:-1:-1;2015:31:80;;;;-1:-1:-1;;;;;2015:31:80;;;;;;-1:-1:-1;;;;;1295:32:132;;;1277:51;;1265:2;1250:18;2015:31:80;1100:234:132;12470:118:80;;;;;;;;;;-1:-1:-1;12552:29:80;12470:118;;;;;;:::i;2220:109::-;;;;;;;;;;-1:-1:-1;2220:109:80;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2852:25:132;;;2840:2;2825:18;2220:109:80;2706:177:132;10080:433:80;;;;;;;;;;-1:-1:-1;10080:433:80;;;;;:::i;:::-;;:::i;:::-;;6536:527;;;;;;;;;;-1:-1:-1;6536:527:80;;;;;:::i;:::-;;:::i;2335:128::-;;;;;;;;;;-1:-1:-1;2335:128:80;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5091:1439;;;;;;;;;;-1:-1:-1;5091:1439:80;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;12594:126::-;;;;;;;;;;-1:-1:-1;12594:126:80;;;12704:2;7235:50:132;;12636:12:80;7316:2:132;7301:18;;7294:45;12711:1:80;7355:18:132;;;7348:45;;;;7223:2;7208:18;12594:126:80;7043:356:132;7564:1296:80;;;;;;;;;;-1:-1:-1;7564:1296:80;;;;;:::i;:::-;;:::i;12353:111::-;;;;;;;;;;-1:-1:-1;12353:111:80;;;;;:::i;:::-;;:::i;2293:101:107:-;;;;;;;;;;;;;:::i;12212:135:80:-;;;;;;;;;;;;12309:8;;12319:20;;-1:-1:-1;;;;;12309:8:80;;;;12212:135;;;;;-1:-1:-1;;;;;8335:32:132;;;8317:51;;8399:2;8384:18;;8377:34;;;;8290:18;12212:135:80;8143:274:132;1638:85:107;;;;;;;;;;-1:-1:-1;1684:7:107;1710:6;-1:-1:-1;;;;;1710:6:107;1638:85;;3557:1955:25;;;;;;;;;;-1:-1:-1;3557:1955:25;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;11891:315:80:-;;;;;;;;;;-1:-1:-1;11891:315:80;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;9086:266::-;;;;;;;;;;-1:-1:-1;9086:266:80;;;;;:::i;:::-;;:::i;2572:798:25:-;;;;;;;;;;-1:-1:-1;2572:798:25;;;;;:::i;:::-;;:::i;4571:428:80:-;;;;;;;;;;-1:-1:-1;4571:428:80;;;;;:::i;:::-;;:::i;10597:1016::-;;;;;;;;;;-1:-1:-1;10597:1016:80;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;5606:165:25:-;;;;;;;;;;-1:-1:-1;5606:165:25;;;;;:::i;:::-;;:::i;4351:133:80:-;;;;;;;;;;-1:-1:-1;4351:133:80;;;;;:::i;:::-;;:::i;2543:215:107:-;;;;;;;;;;-1:-1:-1;2543:215:107;;;;;:::i;:::-;;:::i;2519:50:80:-;;;;;;;;;;-1:-1:-1;2519:50:80;;;;;:::i;:::-;;;;;;;;;;;;;;9358:506;;;;;;;;;;-1:-1:-1;9358:506:80;;;;;:::i;:::-;;:::i;3969:293::-;4064:4;-1:-1:-1;;;;;;4099:45:80;;-1:-1:-1;;;4099:45:80;;:103;;-1:-1:-1;;;;;;;4160:42:80;;-1:-1:-1;;;4160:42:80;4099:103;:156;;;-1:-1:-1;;;;;;;;;;862:40:123;;;4218:37:80;4080:175;3969:293;-1:-1:-1;;3969:293:80:o;11619:266::-;11793:4;11816:62;;11833:7;11816:62;:::i;:::-;11842:11;11855:8;11865:12;11816:16;:62::i;:::-;11809:69;;11619:266;;;;;;;:::o;10080:433::-;10193:8;;-1:-1:-1;;;;;10193:8:80;10179:10;:22;10175:54;;10210:19;;-1:-1:-1;;;10210:19:80;;;;;;;;;;;10175:54;10351:8;-1:-1:-1;;;;;10303:56:80;10324:8;-1:-1:-1;;;;;10303:42:80;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;10303:56:80;;10299:99;;10368:30;;-1:-1:-1;;;10368:30:80;;;;;;;;;;;10299:99;10409:38;10424:8;10434:3;10439:7;10409:14;:38::i;:::-;10463:43;;;-1:-1:-1;;;;;16188:15:132;;;16170:34;;16240:15;;16235:2;16220:18;;16213:43;16272:18;;;16265:34;;;10463:43:80;;16120:2:132;16105:18;10463:43:80;;;;;;;;10080:433;;;:::o;6536:527::-;326:8:0;-1:-1:-1;;;;;326:22:0;338:10;326:22;322:63;;357:28;;-1:-1:-1;;;357:28:0;;;;;;;;;;;322:63;6642:9:80::1;6637:420;6657:18:::0;;::::1;6637:420;;;6696:29;6728:7;;6736:1;6728:10;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;6696:42:::0;-1:-1:-1;6752:30:80::1;6772:9;;::::0;::::1;6696:42:::0;6772:9:::1;:::i;:::-;6752:19;:30::i;:::-;2108:1;6800:16;::::0;;;::::1;::::0;::::1;;:::i;:::-;:47;;::::0;6796:251:::1;;6867:78;6885:9;;::::0;::::1;:5:::0;:9:::1;:::i;:::-;6896:5:::0;6914:12:::1;;::::0;::::1;:5:::0;:12:::1;:::i;:::-;6903:41;;;;;;;:::i;:::-;6867:17;:78::i;:::-;6796:251;;;7015:16;::::0;;;::::1;::::0;::::1;;:::i;:::-;6991:41;::::0;-1:-1:-1;;;6991:41:80;;17840:10:132;17828:23;;;6991:41:80::1;::::0;::::1;17810:42:132::0;17783:18;;6991:41:80::1;;;;;;;;6796:251;-1:-1:-1::0;6677:3:80::1;;6637:420;;;;6536:527:::0;;;:::o;5091:1439::-;-1:-1:-1;;;;;;;;;;;;;;;;;5257:12:80;326:8:0;-1:-1:-1;;;;;326:22:0;338:10;326:22;322:63;;357:28;;-1:-1:-1;;;357:28:0;;;;;;;;;;;322:63;5381:16:80::1;::::0;::::1;;5340:37;5362:14;::::0;;;::::1;::::0;::::1;;:::i;:::-;-1:-1:-1::0;;;;;630:26:40;;527:137;5340:37:80::1;:57;5336:93;;5406:23;;-1:-1:-1::0;;;5406:23:80::1;;;;;;;;;;;5336:93;5476:26;5504:22:::0;5530:30:::1;5542:7;5551:8;;5530:11;:30::i;:::-;5475:85:::0;;-1:-1:-1;5475:85:80;-1:-1:-1;5571:25:80::1;::::0;5620:133:::1;5646:14;::::0;;;::::1;::::0;::::1;;:::i;:::-;5674;::::0;;;::::1;::::0;::::1;;:::i;:::-;5702;5730:13;5620:12;:133::i;:::-;5570:183:::0;;-1:-1:-1;5570:183:80;-1:-1:-1;5763:35:80::1;5570:183:::0;5763:35;::::1;:::i;:::-;::::0;-1:-1:-1;5961:15:80::1;;::::0;::::1;:7:::0;:15:::1;:::i;:::-;5951:26;;;;;;;:::i;:::-;;;;;;;;5888:13;:29;5902:7;:14;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;5888:29:80::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;5888:29:80;;;;5918:14:::1;::::0;;;::::1;::::0;::::1;;:::i;:::-;5888:45;;::::0;;::::1;::::0;;::::1;::::0;;;;;;-1:-1:-1;5888:45:80;;;;5934:13:::1;::::0;;::::1;:7:::0;:13:::1;:::i;:::-;-1:-1:-1::0;;;;;5888:60:80::1;-1:-1:-1::0;;;;;5888:60:80::1;;;;;;;;;;;;:89;;;;6071:26;6100:288;6134:244;;;;;;;;6158:7;:13;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;6134:244:80::1;;;;;6189:7;:14;;;;;;;;;;:::i;:::-;6134:244;;;;;;6221:7;:14;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;6134:244:80::1;;;;;6253:7;:14;;;;;;;;;;:::i;:::-;6134:244;;::::0;;6285:16:::1;::::0;::::1;;6134:244;::::0;::::1;::::0;6319:12:::1;::::0;::::1;;6134:244:::0;;;;;;6349:15:::1;;::::0;::::1;6285:7:::0;6349:15:::1;:::i;:::-;6134:244;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;;;6134:244:80;;-1:-1:-1;6100:20:80::1;:288::i;:::-;6398:10;::::0;:50:::1;::::0;-1:-1:-1;;;6398:50:80;;6071:317;;-1:-1:-1;;;;;;6398:10:80::1;::::0;:25:::1;::::0;:50:::1;::::0;6071:317;;6439:8;;;;6398:50:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;6467:40:80::1;::::0;;;;::::1;::::0;;;;;;-1:-1:-1;;;6467:40:80::1;::::0;::::1;::::0;-1:-1:-1;6467:40:80;-1:-1:-1;6509:13:80;-1:-1:-1;395:1:0::1;5091:1439:80::0;;;;;;;:::o;7564:1296::-;7761:2;7737:26;;7733:66;;7772:27;;-1:-1:-1;;;7772:27:80;;;;;;;;;;;7733:66;319:1:48;7865:23:80;:13;;:21;:23::i;:::-;:55;;;7861:96;;7929:28;;-1:-1:-1;;;7929:28:80;;;;;;;;;;;7861:96;8047:8;8021:34;;:22;:13;;:20;:22::i;:::-;:34;;;8017:65;;8064:18;;-1:-1:-1;;;8064:18:80;;;;;;;;;;;8017:65;8135:16;8154:27;:13;;:25;:27::i;:::-;8135:46;;8191:13;8207:22;:13;;:20;:22::i;:::-;8191:38;;8253:12;8268:21;:13;;:19;:21::i;:::-;-1:-1:-1;;;;;8386:23:80;;;;;;:13;:23;;;;;;;;:31;;;;;;;;;;-1:-1:-1;;;;;8386:38:80;;;;;;;;;;8253:36;;-1:-1:-1;8386:50:80;;8382:85;;8445:22;;-1:-1:-1;;;8445:22:80;;;;;;;;;;;8382:85;8478:27;8508:34;8525:8;8535:6;8508:16;:34::i;:::-;8478:64;;8552:82;8577:6;8595:13;;8585:24;;;;;;;:::i;:::-;;;;;;;;8611:8;8621:12;8552:24;:82::i;:::-;8706:20;8729:45;;;;;;;;8736:6;8729:45;;;;;;8744:22;:13;;:20;:22::i;:::-;8729:45;;-1:-1:-1;;;;;8729:45:80;;;;;;;;8784:69;;;-1:-1:-1;;;8784:69:80;;19543:13:132;;19558:10;19539:30;8784:69:80;;;19521:49:132;19614:17;;;19608:24;19586:20;;;19579:54;19681:17;;19675:24;19671:49;19649:20;;;19642:79;-1:-1:-1;;;;;19757:32:132;;;19737:18;;;19730:60;19806:19;;;19799:35;;;8706:68:80;;-1:-1:-1;8805:8:80;8784:37;;;;;;19493:19:132;;8784:69:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7671:1189;;;;;7564:1296;;;;:::o;12353:111::-;12413:4;12436:21;12452:4;12436:15;:21::i;2293:101:107:-;1531:13;:11;:13::i;:::-;2357:30:::1;2384:1;2357:18;:30::i;:::-;2293:101::o:0;3557:1955:25:-;3638:30;;:::i;:::-;3718:42;;;3680:35;3718:42;;;:30;;:42;;;:30;:42;;;-1:-1:-1;;;;;3807:21:25;;;;;3718:14;3807:21;;;;;:33;;;;;;;;;;3870:21;;3718:42;;3807:33;;3870:21;;3922:60;;3960:22;;-1:-1:-1;;;;;3960:22:25;3922:60;;;3949:8;3922:60;-1:-1:-1;;;;;3901:81:25;;;3997:29;;-1:-1:-1;;;3997:29:25;;:40;:29;3993:604;;4057:30;;-1:-1:-1;;;4057:30:25;;;;:34;4053:253;;4188:13;:26;;4163:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4163:51:25;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4163:22:25;;;:51;4261:30;;-1:-1:-1;;;4261:30:25;;;;4232:26;;;:59;4053:253;3993:604;;;4360:29;;-1:-1:-1;;;4360:29:25;;1175:15;4360:29;;;:46;4356:211;;4451:12;:25;;4426:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4426:50:25;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4426:22:25;;;:50;4523:29;;-1:-1:-1;;;4523:29:25;;;;4494:26;;;:58;4356:211;4611:29;;-1:-1:-1;;;4611:29:25;;:40;:29;4607:733;;4671:30;;-1:-1:-1;;;4671:30:25;;;;:34;4667:338;;4802:13;:26;;4777:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4777:51:25;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4777:22:25;;;:51;4875:30;;;-1:-1:-1;;;4875:30:25;;;;4846:26;;;:59;-1:-1:-1;;;4956:34:25;;;;-1:-1:-1;4923:30:25;;:67;4667:338;4607:733;;;5039:29;;-1:-1:-1;;;5039:29:25;;1175:15;5039:29;;;:46;5035:295;;5130:12;:25;;5105:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5105:50:25;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5105:22:25;;;:50;5202:29;;;-1:-1:-1;;;5202:29:25;;;;5173:26;;;:58;-1:-1:-1;;;5282:33:25;;;;-1:-1:-1;5249:30:25;;:66;5035:295;5474:31;5495:9;5474:20;:31::i;:::-;3670:1842;;;3557:1955;;;;:::o;11891:315:80:-;11981:12;-1:-1:-1;;12009:42:80;;;;12005:195;;12085:29;12102:5;12109:4;12085:16;:29::i;:::-;12074:41;;;;;;;;:::i;:::-;;;;;;;;;;;;;12067:48;;;;12005:195;12153:36;;-1:-1:-1;;;12153:36:80;;17840:10:132;17828:23;;12153:36:80;;;17810:42:132;17783:18;;12153:36:80;17666:192:132;12005:195:80;11891:315;;;;;:::o;9086:266::-;9252:12;9191:10;:36;9212:13;;9202:24;;;;;;;:::i;:::-;;;;;;;;;;;9191:36;;;;;;;;;;;;;-1:-1:-1;9191:36:80;;;:46;;;;;;;;9238:10;9191:58;;;;;;;;:73;;;;9279:66;;;;;;9307:13;;;;9228:8;;9332:12;;9279:66;:::i;:::-;;;;;;;;9086:266;;;;:::o;2572:798:25:-;1531:13:107;:11;:13::i;:::-;2689:9:25::1;2684:632;2704:18:::0;;::::1;2684:632;;;2743:43;2789:7;;2797:1;2789:10;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;2743:56:::0;-1:-1:-1;1175:15:25::1;2854:12;;::::0;::::1;2743:56:::0;2854:12:::1;:::i;:::-;:29;::::0;;;;;::::1;;;:::i;:::-;:46;;::::0;2850:90:::1;;2909:31;;-1:-1:-1::0;;;2909:31:25::1;;;;;;;;;;;2850:90;1175:15;2958:12;;::::0;::::1;:5:::0;:12:::1;:::i;:::-;:29;::::0;;;;;::::1;;;:::i;:::-;:46;;::::0;2954:90:::1;;3013:31;;-1:-1:-1::0;;;3013:31:25::1;;;;;;;;;;;2954:90;3118:34;3139:12;;::::0;::::1;:5:::0;:12:::1;:::i;:::-;3118:34;;;:::i;:::-;:20;:34::i;:::-;3203:3;3170:12;;::::0;::::1;:5:::0;:12:::1;:::i;:::-;:21;::::0;::::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;;;;;3170:37:25::1;::::0;3166:73:::1;;3216:23;;-1:-1:-1::0;;;3216:23:25::1;;;;;;;;;;;3166:73;3254:51;1059:1;3281:9;;::::0;::::1;:5:::0;:9:::1;:::i;:::-;3292:12;;::::0;::::1;:5:::0;:12:::1;:::i;:::-;3254:51;;;:::i;:::-;:10;:51::i;:::-;-1:-1:-1::0;2724:3:25::1;;2684:632;;;;3330:33;3355:7;;3330:33;;;;;;;:::i;:::-;;;;;;;;2572:798:::0;;:::o;4571:428:80:-;1531:13:107;:11;:13::i;:::-;4763:20:80::1;;4736:24;:47;4732:139;;;4850:20;::::0;4804:67:::1;::::0;-1:-1:-1;;;4804:67:80;;::::1;::::0;4824:24;;4804:67:::1;;25077:25:132::0;;;25133:2;25118:18;;25111:34;25065:2;25050:18;;24903:248;4732:139:80::1;4881:20;:47:::0;;;4943:49:::1;::::0;2852:25:132;;;4943:49:80::1;::::0;2840:2:132;2825:18;4943:49:80::1;;;;;;;;4571:428:::0;:::o;10597:1016::-;-1:-1:-1;;;;;;;;;;;;;;;;;10800:28:80;10830:23;10857:27;10875:8;;10857:17;:27::i;:::-;10799:85;;-1:-1:-1;10799:85:80;-1:-1:-1;10895:14:80;10912;;;;;;;;:::i;:::-;10895:31;-1:-1:-1;10936:13:80;10952:14;;;;;;;;:::i;:::-;10936:30;;11016:27;11046:32;11063:6;11071;11046:16;:32::i;:::-;11016:62;-1:-1:-1;11088:17:80;11108:168;11016:62;11152:6;11172:41;;11205:7;11172:41;:::i;:::-;:32;:41::i;:::-;11227:7;:15;;;;;;;;:::i;:::-;11256:10;11108;:168::i;:::-;11322:15;;11299:71;;-1:-1:-1;;;11299:71:80;;11088:188;;-1:-1:-1;;;;;;11299:46:80;;;;:71;;11346:6;;11354:15;;11299:71;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11286:84;;;;:::i;:::-;;;11408:25;11435:18;11457:56;11472:6;11480;11488:9;11499:13;11457:14;:56::i;:::-;11407:106;;-1:-1:-1;11407:106:80;-1:-1:-1;11523:30:80;11407:106;11523:30;;:::i;:::-;11571:35;;;;;;;;;;;;;;;;;;;;10597:1016;-1:-1:-1;;;;;;;;;;;;10597:1016:80:o;5606:165:25:-;5692:20;;:::i;:::-;-1:-1:-1;;;;;5731:21:25;;;;;;;:14;:21;;;;;;;;:33;;;;;;;;;;;5724:40;;;;;;;;;;;;;;;-1:-1:-1;;;5724:40:25;;;;;;;;-1:-1:-1;;;5724:40:25;;;;;;;;-1:-1:-1;;;5724:40:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5731:33;;5724:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5724:40:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5724:40:25;;;;;;;;;;;;;;;;;;;;;;;;;;;5606:165;;;;:::o;4351:133:80:-;1531:13:107;:11;:13::i;:::-;4420:8:80::1;:20:::0;;-1:-1:-1;;;;;;4420:20:80::1;-1:-1:-1::0;;;;;4420:20:80;::::1;::::0;;::::1;::::0;;;4455:22:::1;::::0;1277:51:132;;;4455:22:80::1;::::0;1265:2:132;1250:18;4455:22:80::1;1100:234:132::0;2543:215:107;1531:13;:11;:13::i;:::-;-1:-1:-1;;;;;2627:22:107;::::1;2623:91;;2672:31;::::0;-1:-1:-1;;;2672:31:107;;2700:1:::1;2672:31;::::0;::::1;1277:51:132::0;1250:18;;2672:31:107::1;1100:234:132::0;2623:91:107::1;2723:28;2742:8;2723:18;:28::i;:::-;2543:215:::0;:::o;9358:506:80:-;9447:10;9428:11;9442:16;;;:4;:16;;;;;;9472:13;;;9468:59;;;9494:33;;-1:-1:-1;;;9494:33:80;;;;;25077:25:132;;;25118:18;;;25111:34;;;25050:18;;9494:33:80;24903:248:132;9468:59:80;9566:10;9561:16;;;;:4;:16;;;;;;;;9580:13;;;9561:32;;9695:44;;-1:-1:-1;;;9695:44:80;;;;9716:8;-1:-1:-1;;;;;9695:42:80;;;;:44;;;;;;;;;;;:42;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9673:66;;9749:49;9772:11;9785:3;9790:7;9749:22;:49::i;:::-;9813:44;;;9832:10;16170:34:132;;-1:-1:-1;;;;;16240:15:132;;16235:2;16220:18;;16213:43;16272:18;;;16265:34;;;9813:44:80;;16120:2:132;16105:18;9813:44:80;15930:375:132;20811:1390:80;21046:24;;;;20989:4;;21046:28;;;21042:536;;21095:7;21090:289;21112:7;:24;;;21108:28;;:1;:28;;;21090:289;;;21166:71;21176:7;:20;;;21197:1;21176:23;;;;;;;;;;:::i;:::-;;;;;;;21201:11;21214:8;21224:12;22370:13;22406:23;;;:10;:23;;;;;;;;:33;;;;;;;;;-1:-1:-1;;;;;22406:39:80;;;;;;;;;;;;:63;;22207:269;21166:71;21161:204;;21341:5;21334:12;;;;;21161:204;21138:3;;21090:289;;;;21396:7;:24;;;:29;;21424:1;21396:29;21392:176;;-1:-1:-1;21549:4:80;21542:11;;21392:176;21659:28;;;;21641:15;21697:436;21719:7;:24;;;21715:28;;:1;:28;;;21697:436;;;21768:71;21778:7;:20;;;21799:1;21778:23;;;;;;;;;;:::i;:::-;;;;;;;21803:11;21816:8;21826:12;22370:13;22406:23;;;:10;:23;;;;;;;;:33;;;;;;;;;-1:-1:-1;;;;;22406:39:80;;;;;;;;;;;;:63;;22207:269;21768:71;21764:359;;;21938:11;;;;:::i;:::-;;;;21971:9;:14;;21984:1;21971:14;21967:142;;22086:4;22079:11;;;;;;21967:142;21745:3;;21697:436;;;-1:-1:-1;22189:5:80;;20811:1390;-1:-1:-1;;;;;;20811:1390:80:o;696:194:44:-;-1:-1:-1;;;;;779:19:44;;775:58;;807:26;;-1:-1:-1;;;807:26:44;;;;;;;;;;;775:58;843:40;-1:-1:-1;;;;;843:27:44;;871:3;876:6;843:27;:40::i;:::-;696:194;;;:::o;6569:152:25:-;6646:27;6662:10;6646:15;:27::i;:::-;6641:73;;6682:32;;-1:-1:-1;;;6682:32:25;;17840:10:132;17828:23;;6682:32:25;;;17810:42:132;17783:18;;6682:32:25;17666:192:132;5858:338:25;5967:37;5978:5;5985:10;5997:6;5967:10;:37::i;:::-;6096:35;6113:5;6120:10;6096:16;:35::i;:::-;;6146:43;6163:5;6170:10;6182:6;6146:43;;;;;;;;:::i;12867:691:80:-;12978:26;13006:22;13074:28;13104:23;13131:27;13149:8;;13131:17;:27::i;:::-;13073:85;;-1:-1:-1;13073:85:80;-1:-1:-1;13196:27:80;13226:48;13243:14;;;;;;;;:::i;:::-;13259;;;;;;;;:::i;13226:48::-;13314:15;;13196:78;;-1:-1:-1;13301:62:80;;13331:14;;;;;;;;:::i;:::-;13347:15;13301:12;:62::i;:::-;13284:79;;13398:14;13414:24;13442:37;13451:6;13459:7;13468:10;13442:8;:37::i;:::-;13397:82;;-1:-1:-1;13397:82:80;-1:-1:-1;13489:24:80;13397:82;13489:24;;:::i;:::-;13540:11;;13489:24;;-1:-1:-1;12867:691:80;-1:-1:-1;;;;;;;;12867:691:80:o;16599:862::-;16816:8;;16755:25;;;;-1:-1:-1;;;;;16816:8:80;:24;16812:643;;16880:139;;-1:-1:-1;;;;;27938:32:132;;16880:139:80;;;27920:51:132;28019:10;28007:23;;27987:18;;;27980:51;28047:18;;;28040:34;;;28117:14;;28110:22;28090:18;;;28083:50;16856:21:80;;27892:19:132;;16880:139:80;;;-1:-1:-1;;16880:139:80;;;;;;;;;;;;;;;-1:-1:-1;;;;;16880:139:80;-1:-1:-1;;;16880:139:80;;;17071:8;;16880:139;;-1:-1:-1;;;;;17071:67:80;;-1:-1:-1;;;;;17071:8:80;;17089:16;;-1:-1:-1;;16880:139:80;17071:17;:67::i;:::-;17033:105;;;;17187:69;17208:15;17225:13;17240:7;17249:6;17187:20;:69::i;:::-;17153:103;;-1:-1:-1;17153:103:80;-1:-1:-1;17354:21:80;;17350:95;;17400:8;;-1:-1:-1;;;;;17400:8:80;17395:14;;;;:4;:14;;;;;:35;;17413:17;;17395:14;:35;;17413:17;;17395:35;:::i;:::-;;;;-1:-1:-1;;17350:95:80;16842:613;;;16599:862;;;;;;;:::o;872:385:48:-;1046:13;;1073:14;;;;;1101;;;;;934:26;1141:14;;;;1169:16;;;;1199:12;;;;1225:15;;;;988:262;;934:26;;988:262;;319:1;;1046:13;;1073:14;;-1:-1:-1;;;;;1101:24:48;;988:262;;:::i;:::-;;;;;;;;;;;;;972:278;;872:385;;;:::o;1919:153::-;1983:5;2020:43;493:1;1983:5;2020:7;;:43;:::i;:::-;2013:51;;;:::i;:::-;2007:58;;;1919:153;-1:-1:-1;;;1919:153:48:o;2671:150::-;2734:6;2773:39;706:2;655;2773:7;;:39;:::i;:::-;2766:47;;;:::i;:::-;2759:55;;;2671:150;-1:-1:-1;;;2671:150:48:o;2976:130::-;3044:7;3070:29;:17;3079:7;;3070:8;:17::i;:::-;1210:15:40;1084:151;2230:148:48;2293:6;2332:37;605:2;557:1;2332:7;;:37;:::i;2078:146::-;2140:6;2179:36;557:1;493;2179:7;;:36;:::i;:::-;2172:44;;;:::i;:::-;2165:52;;;2078:146;-1:-1:-1;;;2078:146:48:o;19863:818:80:-;20050:62;20067:7;20076:11;20089:8;20099:12;20050:16;:62::i;:::-;20045:118;;20135:17;;-1:-1:-1;;;20135:17:80;;;;;;;;;;;20045:118;20214:24;;;;:28;;;20210:209;;20263:7;20258:151;20280:7;:24;;;20276:28;;:1;:28;;;20258:151;;;20336:23;;;;:10;:23;;;;;;;;:33;;;;;;;;20370:20;;;;:23;;20336:33;;:23;20370;;;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;20336:58:80;-1:-1:-1;;;;;20336:58:80;;;;;;;;;;;;20329:65;;;20306:3;;;;;20258:151;;;;20210:209;20470:24;;;;:28;;;20466:209;;20519:7;20514:151;20536:7;:24;;;20532:28;;:1;:28;;;20514:151;;;20592:23;;;;:10;:23;;;;;;;;:33;;;;;;;;20626:20;;;;:23;;20592:33;;:23;20626;;;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;20592:58:80;-1:-1:-1;;;;;20592:58:80;;;;;;;;;;;;20585:65;;;20562:3;;;;;20514:151;;;;19863:818;;;;:::o;2384:142:48:-;2447:7;2481:37;655:2;605;2481:7;;:37;:::i;:::-;2473:46;;;:::i;6300:263:25:-;6421:42;;;6367:4;6421:42;;;:30;;:42;:30;:42;;6480:30;;-1:-1:-1;;;6480:30:25;;;;:34;;;:76;;-1:-1:-1;6518:34:25;-1:-1:-1;;;6518:34:25;;;;:38;;;;-1:-1:-1;;6300:263:25:o;1796:162:107:-;1684:7;1710:6;-1:-1:-1;;;;;1710:6:107;735:10:117;1855:23:107;1851:101;;1901:40;;-1:-1:-1;;;1901:40:107;;735:10:117;1901:40:107;;;1277:51:132;1250:18;;1901:40:107;1100:234:132;2912:187:107;2985:16;3004:6;;-1:-1:-1;;;;;3020:17:107;;;-1:-1:-1;;;;;;3020:17:107;;;;;;3052:40;;3004:6;;;;;;;3052:40;;2985:16;3052:40;2975:124;2912:187;:::o;6808:190:25:-;6895:24;;;;:29;;;:66;;;;-1:-1:-1;6928:28:25;;;;:33;;;6895:66;6891:100;;;6970:21;;-1:-1:-1;;;6970:21:25;;;;;;;;;;;7101:2124;7422:23;;;;1175:15;7422:40;;;;;:78;;-1:-1:-1;7466:23:25;;;;:34;;;7422:78;7418:421;;;7520:19;;;;:26;:31;7516:75;;7560:31;;-1:-1:-1;;;7560:31:25;;;;;;;;;;;7516:75;7418:421;;;7656:6;:23;;;7626:53;;:6;:19;;;:26;:53;;:92;;;-1:-1:-1;1419:1:25;1396:19;1414:1;1396:15;:19;:::i;:::-;1395:25;;;;:::i;:::-;7683:35;;:6;:23;;;:35;;;7626:92;7622:152;;;7743:31;;-1:-1:-1;;;7743:31:25;;;;;;;;;;;7622:152;7788:40;7808:6;:19;;;7788;:40::i;:::-;8398:23;;;;1175:15;8398:40;;;;;:78;;-1:-1:-1;8442:23:25;;;;:34;;;8398:78;8394:682;;;8496:19;;;;:26;:31;8492:75;;8536:31;;-1:-1:-1;;;8536:31:25;;;;;;;;;;;8492:75;8585:27;;;;:32;;;8581:80;;8626:35;;-1:-1:-1;;;8626:35:25;;;;;;;;;;;8581:80;8394:682;;;8726:6;:23;;;8696:53;;:6;:19;;;:26;:53;;:92;;;-1:-1:-1;1419:1:25;1396:19;1414:1;1396:15;:19;:::i;:::-;1395:25;;;;:::i;:::-;8753:35;;:6;:23;;;:35;;;8696:92;8692:152;;;8813:31;;-1:-1:-1;;;8813:31:25;;;;;;;;;;;8692:152;8862:27;;;;:32;;;;:89;;;8928:6;:23;;;8898:53;;:6;:27;;;:53;;;8862:89;8858:153;;;8976:35;;-1:-1:-1;;;8976:35:25;;;;;;;;;;;8858:153;9025:40;9045:6;:19;;;9025;:40::i;:::-;-1:-1:-1;;;;;9182:21:25;;;;;;;:14;:21;;;;;;;;:27;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;9182:36:25;;;;-1:-1:-1;;;9182:36:25;;;;;;-1:-1:-1;;;;9182:36:25;-1:-1:-1;;;9182:36:25;;;;;;;-1:-1:-1;;;;9182:36:25;;;;;-1:-1:-1;;;9182:36:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;9182:36:25;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;7101:2124:25:o;1135:3038:24:-;1213:28;;1373:1;1355:19;;1351:62;;;1383:30;;-1:-1:-1;;;1383:30:24;;1411:1;1383:30;;;2852:25:132;2825:18;;1383:30:24;2706:177:132;1351:62:24;1424:18;1459:13;1470:1;1424:18;1459:8;;:13;:::i;:::-;1452:21;;;:::i;:::-;1445:29;;;-1:-1:-1;1501:1:24;-1:-1:-1;;1700:21:24;;1696:2471;;1781:6;1765:13;2066:1412;2073:24;;;2066:1412;;;2121:14;2151:27;2176:1;2167:10;;2160:6;2151:8;;:27;:::i;:::-;2144:35;;;:::i;:::-;2138:42;;;-1:-1:-1;2218:1:24;2206:13;;;2202:51;;2228:25;;-1:-1:-1;;;2228:25:24;;2251:1;2228:25;;;31711:36:132;31684:18;;2228:25:24;31559:194:132;2202:51:24;2537:12;:17;;2553:1;2537:17;2533:681;;2597:8;2582:23;;2533:681;;;2650:12;2638:24;;:8;:24;;;2634:580;;2690:17;;2710:22;2725:6;2719:5;2710:8;;:22;:::i;:::-;2690:42;;;;2829:205;2879:15;2924:10;2964:12;3006:2;;2829:20;:205::i;:::-;2797:237;;-1:-1:-1;2797:237:24;-1:-1:-1;3136:6:24;;-1:-1:-1;3183:8:24;;-1:-1:-1;3183:8:24;;-1:-1:-1;;2634:580:24;3236:8;;;;3283:11;;3311:27;;3327:10;;3236:8;3311;;:27;:::i;:::-;3304:35;;;:::i;:::-;3297:43;;;-1:-1:-1;3374:1:24;3366:9;;;3362:57;;3384:35;;-1:-1:-1;;;3384:35:24;;;;;2852:25:132;;;2825:18;;3384:35:24;2706:177:132;3362:57:24;3451:4;3458:1;3451:8;3441:18;;;;;;2099:1379;;2066:1412;;;3580:25;;;3576:73;;3614:35;;-1:-1:-1;;;3614:35:24;;;;;2852:25:132;;;2825:18;;3614:35:24;2706:177:132;3576:73:24;3845:1;3827:19;;3823:229;;;3870:17;;3890:22;3905:6;3899:5;3890:8;;:22;:::i;:::-;3870:42;;;;3966:67;3987:15;4004:10;4016:12;4030:2;;3966:20;:67::i;:::-;3934:99;;-1:-1:-1;3934:99:24;-1:-1:-1;;;3823:229:24;1737:2329;;1696:2471;;;4114:42;4134:11;4147:8;;4114:19;:42::i;:::-;4096:60;;1696:2471;1268:2905;;1135:3038;;;;;:::o;1263:359:48:-;1446:13;;1477:14;;;;;1509;;;;;1337:12;1553:14;;;;1585:16;;;;1380:235;;-1:-1:-1;;;1380:235:48;;;32017:49:132;;;;32121:3;32099:16;;;;-1:-1:-1;;;;;;32095:51:132;32082:11;;;32075:72;32170:3;32219:16;;;-1:-1:-1;;;;;;32215:25:132;;;32202:11;;;32195:46;-1:-1:-1;;;;;1509:24:48;;;32257:12:132;;;32250:28;32312:16;;;;32308:25;;;32294:12;;;32287:47;32350:12;;;32343:28;32387:12;;1380:235:48;31758:647:132;15398:1195:80;15606:16;15635:27;15664:25;15693:41;15725:8;15693:31;:41::i;:::-;15634:100;;;;15845:16;15891:7;:24;;;15864:7;:24;;;:51;;;;:::i;:::-;15845:70;;15930:7;15925:662;15947:10;15943:14;;:1;:14;;;15925:662;;;15978:11;15996:7;:24;;;15992:28;;:1;:28;;;:139;;16081:20;;;;16106:24;;;;16102:28;;:1;:28;:::i;:::-;16081:50;;;;;;;;;;:::i;:::-;;;;;;;15992:139;;;16039:7;:20;;;16060:1;16039:23;;;;;;;;;;:::i;:::-;;;;;;;15992:139;16146:25;;;;;;;;;:20;:25;;;15978:153;;-1:-1:-1;16146:25:80;16286:197;16310:10;:17;16306:1;:21;16286:197;;;16373:1;16356:18;;:10;16367:1;16356:13;;;;;;;;:::i;:::-;;;;;;;:18;;;16352:117;;16408:12;16421:1;16408:15;;;;;;;;:::i;:::-;;;;;;;16398:25;;16445:5;;16352:117;16329:3;;16286:197;;;-1:-1:-1;16508:68:80;;-1:-1:-1;;;16508:68:80;;-1:-1:-1;;;;;16508:29:80;;;;;:68;;16538:7;;16547:13;;16562:4;;;;16568:7;;16508:68;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16496:80;;;;:::i;:::-;;;15964:623;;15959:3;;;;;15925:662;;;;15624:969;;;15398:1195;;;;;;;;:::o;17864:772::-;18141:8;;18027:17;;;;-1:-1:-1;;;;;18141:8:80;:24;18137:493;;18205:139;;-1:-1:-1;;;;;27938:32:132;;18205:139:80;;;27920:51:132;28019:10;28007:23;;27987:18;;;27980:51;28047:18;;;28040:34;;;28117:14;;28110:22;28090:18;;;28083:50;18181:21:80;;27892:19:132;;18205:139:80;;;-1:-1:-1;;18205:139:80;;;;;;;;;;;;;;;-1:-1:-1;;;;;18205:139:80;-1:-1:-1;;;18205:139:80;;;18396:8;;18205:139;;-1:-1:-1;;;;;18396:132:80;;-1:-1:-1;;;;;18396:8:80;;18437:16;;18205:139;18396:23;:132::i;:::-;18358:170;;;;18550:69;18571:15;18588:13;18603:7;18612:6;18550:20;:69::i;:::-;18543:76;;;;;;;;;896:222:44;-1:-1:-1;;;;;987:22:44;;983:129;;1025:19;1032:3;1037:6;1025;:19::i;983:129::-;1075:26;1081:6;1089:3;1094:6;1075:5;:26::i;1271:160:115:-;1380:43;;;-1:-1:-1;;;;;8335:32:132;;1380:43:115;;;8317:51:132;8384:18;;;;8377:34;;;1380:43:115;;;;;;;;;;8290:18:132;;;;1380:43:115;;;;;;;;-1:-1:-1;;;;;1380:43:115;-1:-1:-1;;;1380:43:115;;;1353:71;;1373:5;;1353:19;:71::i;22482:398:80:-;22664:70;;-1:-1:-1;;;22664:70:80;;22619:19;;-1:-1:-1;;;;;22664:43:80;;;;;:70;;22708:7;;22717:16;;22664:70;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22650:84;-1:-1:-1;22748:15:80;;22744:76;;-1:-1:-1;;;;;22779:15:80;;;;;;:4;:15;;;;;:30;;22798:11;;22779:15;:30;;22798:11;;22779:30;:::i;:::-;;;;-1:-1:-1;;22744:76:80;22834:39;;;-1:-1:-1;;;;;8335:32:132;;8317:51;;8399:2;8384:18;;8377:34;;;22834:39:80;;8290:18:132;22834:39:80;;;;;;;22482:398;;;;;:::o;13564:636::-;13708:16;13726:26;13708:16;13792:41;;13825:7;13792:41;:::i;:::-;13764:69;-1:-1:-1;13843:20:80;13866:36;;13894:7;13866:36;:::i;:::-;:27;:36::i;:::-;13843:59;-1:-1:-1;13913:24:80;13969:80;13984:7;13993:14;;;;;;;;:::i;:::-;14009:12;14023:15;;;;:7;:15;:::i;:::-;14040:8;13969:14;:80::i;:::-;14076:39;;13947:102;;-1:-1:-1;13947:102:80;-1:-1:-1;14076:39:80;;14093:12;;14107:7;;14076:39;;;:::i;:::-;;;;;;;;;;;;;14060:55;;14130:63;14141:7;:20;;;14163:7;:20;;;14185:7;14130:63;;;;;;;;:::i;:::-;;;;;;;;13754:446;;;13564:636;;;;;;:::o;770:1503:12:-;940:4;946:12;1058:20;;1101:9;;;1097:68;;1141:12;;;1134:5;1141:12;;;;;;;;;1126:28;;;;;;;1097:68;1211:15;1236:13;1259:24;1296:8;1286:19;;-1:-1:-1;;;;;1286:19:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1286:19:12;;1259:46;;1807:1;1778;1741:9;1735:16;1703:4;1692:9;1688:20;1649:6;1611:7;1582:4;1560:272;1548:284;;1899:16;1888:27;;1943:8;1934:7;1931:21;1928:76;;;1982:8;1971:19;;1928:76;2089:7;2076:11;2069:28;2209:7;2206:1;2199:4;2186:11;2182:22;2167:50;2244:8;;-1:-1:-1;2254:11:12;-1:-1:-1;;;770:1503:12;;;;;;;;;:::o;18642:1215:80:-;18815:17;18834:18;18905:8;18904:9;:47;;;-1:-1:-1;18917:14:80;;2161:2;-1:-1:-1;18904:47:80;18900:66;;;-1:-1:-1;18961:1:80;;-1:-1:-1;18961:1:80;18953:13;;18900:66;19005:24;19043:7;19032:30;;;;;;;;;;;;:::i;:::-;19005:57;;19076:13;19072:779;;;19118:16;19105:29;;19072:779;;;19594:20;19635;;19617:15;:38;:79;;19676:20;;19617:79;;;19658:15;19617:79;19594:102;;19794:12;19775:16;:31;:65;;19824:16;19775:65;;;19809:12;19775:65;19763:77;;19151:700;19072:779;18854:1003;18642:1215;;;;;;;:::o;2827:143:48:-;2892:7;2926:36;785:2;706;2926:7;;:36;:::i;9231:321:25:-;9307:15;9350:9;9345:201;9369:5;:12;9365:1;:16;9345:201;;;9402:11;9416:5;9422:1;9416:8;;;;;;;;:::i;:::-;;;;;;;9402:22;;9449:7;-1:-1:-1;;;;;9442:14:25;:3;-1:-1:-1;;;;;9442:14:25;;9438:43;;9465:16;;-1:-1:-1;;;9465:16:25;;;;;;;;;;;9438:43;9532:3;-1:-1:-1;9383:3:25;;9345:201;;4179:733:24;4371:12;;-1:-1:-1;;4413:38:24;;;;4409:449;;4486:23;;:28;:124;;4580:16;4598:11;;4563:47;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;4486:124;;;4533:11;;4486:124;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;4486:124:24;4467:143;;4409:449;;;-1:-1:-1;;4631:33:24;;;;4627:231;;4694:18;;:23;:82;;4751:11;4764;;4734:42;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;4694:82;;;4720:11;;4694:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;4694:82:24;4680:96;;4627:231;;;4814:33;;-1:-1:-1;;;4814:33:24;;31741:4:132;31729:17;;4814:33:24;;;31711:36:132;31684:18;;4814:33:24;31559:194:132;4627:231:24;-1:-1:-1;4875:16:24;;4893:11;;-1:-1:-1;;;;4179:733:24:o;5428:3052::-;5547:28;-1:-1:-1;;5591:21:24;;;;5587:2887;;5651:2;5632:21;;5628:67;;5662:33;;-1:-1:-1;;;5662:33:24;;;;;;;;;;;5628:67;5739:20;5762:48;5778:18;5789:6;5787:1;5778:8;;:18;:::i;:::-;5770:27;;;:::i;:::-;5762:46;:48::i;:::-;6205:239;;-1:-1:-1;;;6205:239:24;;;35779:38:132;;;-1:-1:-1;;;35833:11:132;;;35826:59;35901:11;;;35894:46;-1:-1:-1;;;;;;35977:3:132;35973:16;;;35969:62;35956:11;;;35949:83;5739:71:24;;-1:-1:-1;36048:12:132;;6205:239:24;;;;;;;;;;;;6187:257;;5614:841;5587:2887;;;-1:-1:-1;;6465:21:24;;;;6461:2013;;6560:2;6541:21;;;;:45;;-1:-1:-1;6584:2:24;6566:20;;6541:45;6537:91;;;6595:33;;-1:-1:-1;;;6595:33:24;;;;;;;;;;;6537:91;6672:20;6695:48;6711:18;6722:6;6720:1;6711:8;;:18;:::i;6695:48::-;6672:71;-1:-1:-1;6804:14:24;6821:50;6837:20;6849:7;6846:2;6837:8;;:20;:::i;6821:50::-;6804:67;-1:-1:-1;6902:16:24;-1:-1:-1;;6982:20:24;;7061:13;6982:8;7000:2;6982:8;;7061:13;:::i;:::-;7053:22;;;:::i;:::-;7909:475;;7117:1;7122:2;:16;;;7117:22;7104:36;;;;;-1:-1:-1;7909:475:24;;238:1:47;;7993:2:24;;238:1:47;;8122:12:24;;238:1:47;;8202:2:24;;351:1:47;;8338:6:24;;7104:36;;7909:475;;:::i;:::-;;;;;;;;;;;;;7891:493;;6488:1907;;;6461:2013;;;8422:41;;-1:-1:-1;;;8422:41:24;;37177:6:132;37165:19;;8422:41:24;;;37147:38:132;37120:18;;8422:41:24;37003:188:132;1107:2599:21;1197:25;1224;1265:8;:15;1284:1;1265:20;1261:57;;1107:2599;;;:::o;1261:57::-;1329:13;1345:20;1356:8;1345:10;:20::i;:::-;1329:36;;1452:7;:12;;1463:1;1452:12;1448:255;;1493:14;;;1505:1;1493:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1480:27;;1537:8;1521:10;1532:1;1521:13;;;;;;;;:::i;:::-;;;;;;;;;;:24;1573:14;;;1585:1;1573:14;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1560:27:21;-1:-1:-1;1617:19:21;:8;1634:1;1617:16;:19::i;:::-;1601:10;1612:1;1601:13;;;;;;;;:::i;:::-;;;;;;:35;;;;;;;;;;;1661:31;1107:2599;;;:::o;1448:255::-;1800:7;1788:20;;-1:-1:-1;;;;;1788:20:21;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1788:20:21;;1775:33;;1843:7;1831:20;;-1:-1:-1;;;;;1831:20:21;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1818:33:21;-1:-1:-1;1885:14:21;;1967:3;2014:1178;2030:8;:15;2021:6;:24;2014:1178;;;2065:8;;;;;2178:19;2200:25;:8;2065;2200:17;:25::i;:::-;2253:1;2243:11;;;;;2178:47;-1:-1:-1;2335:12:21;2350:24;:8;2243:11;2350:16;:24::i;:::-;2335:39;;2636:10;:17;;2650:3;2636:17;2632:505;;2690:6;2677:19;;2632:505;;;2735:10;2725:20;;:6;:20;;;2721:416;;-1:-1:-1;;2783:14:21;;;:18;2769:11;2882:26;:8;2792:5;2783:18;2882:14;:26::i;:::-;2863:45;;2930:58;2948:10;2960;2972;2984:3;2930:17;:58::i;:::-;-1:-1:-1;3065:12:21;;;;;3112:6;-1:-1:-1;3112:6:21;2721:416;-1:-1:-1;3155:22:21;;;;;;;2014:1178;;;3398:14;;;3383:12;3444:27;:8;3407:5;3398:14;3444;:27::i;:::-;3426:45;;3485:57;3503:10;3515;3527;3539:2;3485:17;:57::i;:::-;3611:7;3606:84;3628:7;3624:11;;:1;:11;;;3606:84;;;3662:10;3673:1;3662:13;;;;;;;;;;:::i;:::-;;;;;;;;;;3660:15;;-1:-1:-1;;3660:15:21;;;;;;3637:3;3606:84;;;;1861:1839;;;;;1251:2455;1107:2599;;;:::o;3183:1457:12:-;3340:4;3346:12;3458:20;;3501:9;;;3497:68;;3541:12;;;3534:5;3541:12;;;;;;;;;3526:28;;;;;;;3497:68;3611:15;3636:13;3659:24;3696:8;3686:19;;-1:-1:-1;;;;;3686:19:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3686:19:12;;3659:46;;4174:1;4145;4108:9;4102:16;4070:4;4059:9;4055:20;4017:7;3988:4;3960:239;3948:251;;4266:16;4255:27;;4310:8;4301:7;4298:21;4295:76;;;4349:8;4338:19;;4295:76;4456:7;4443:11;4436:28;4576:7;4573:1;4566:4;4553:11;4549:22;4534:50;4611:8;;;;-1:-1:-1;3183:1457:12;-1:-1:-1;;;;;;;3183:1457:12:o;438:252:44:-;-1:-1:-1;;;;;506:19:44;;502:58;;534:26;;-1:-1:-1;;;534:26:44;;;;;;;;;;;502:58;571:12;589:3;-1:-1:-1;;;;;589:8:44;606:6;589:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;570:48;;;633:7;628:55;;649:34;;-1:-1:-1;;;649:34:44;;-1:-1:-1;;;;;8335:32:132;;649:34:44;;;8317:51:132;8384:18;;;8377:34;;;8290:18;;649:34:44;8143:274:132;7738:720:115;7818:18;7846:19;7984:4;7981:1;7974:4;7968:11;7961:4;7955;7951:15;7948:1;7941:5;7934;7929:60;8041:7;8031:176;;8085:4;8079:11;8130:16;8127:1;8122:3;8107:40;8176:16;8171:3;8164:29;8031:176;-1:-1:-1;;8284:1:115;8278:8;8234:16;;-1:-1:-1;8310:15:115;;:68;;8362:11;8377:1;8362:16;;8310:68;;;-1:-1:-1;;;;;8328:26:115;;;:31;8310:68;8306:146;;;8401:40;;-1:-1:-1;;;8401:40:115;;-1:-1:-1;;;;;1295:32:132;;8401:40:115;;;1277:51:132;1250:18;;8401:40:115;1100:234:132;1628:154:48;1697:12;1745:7;:12;;;1759:7;:15;;;1728:47;;;;;;;;;:::i;14206:1186:80:-;14413:16;14431:24;14468:27;14497:21;14522:41;14554:8;14522:31;:41::i;:::-;14467:96;;;;14574:16;14620:7;:24;;;14593:7;:24;;;:51;;;;:::i;:::-;14574:70;;14678:10;14664:25;;-1:-1:-1;;;;;14664:25:80;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14664:25:80;;14654:35;;14704:7;14699:687;14721:10;14717:14;;:1;:14;;;14699:687;;;14752:11;14770:7;:24;;;14766:28;;:1;:28;;;:139;;14855:20;;;;14880:24;;;;14876:28;;:1;:28;:::i;:::-;14855:50;;;;;;;;;;:::i;:::-;;;;;;;14766:139;;;14813:7;:20;;;14834:1;14813:23;;;;;;;;;;:::i;:::-;;;;;;;14766:139;14920:25;;;;;;;;;:20;:25;;;14752:153;;-1:-1:-1;14920:25:80;14959:189;14983:6;:13;14979:1;:17;14959:189;;;15038:1;15025:14;;:6;15032:1;15025:9;;;;;;;;:::i;:::-;;;;;;;:14;;;15021:113;;15073:12;15086:1;15073:15;;;;;;;;:::i;:::-;;;;;;;15063:25;;15110:5;;15021:113;14998:3;;14959:189;;;;15193:3;-1:-1:-1;;;;;15175:32:80;;15208:7;15217:13;15232:4;;15238:7;15175:71;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15162:7;15170:1;15162:10;;;;;;;;;;:::i;:::-;;;;;;:84;;;;;15277:1;15264:7;15272:1;15264:10;;;;;;;;;;:::i;:::-;;;;;;;:14;15260:116;;;15311:7;15319:1;15311:10;;;;;;;;;;:::i;:::-;;;;;;;15298:4;:9;15303:3;-1:-1:-1;;;;;15298:9:80;-1:-1:-1;;;;;15298:9:80;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;;;;;;;15351:7;15359:1;15351:10;;;;;;;;;;:::i;:::-;;;;;;;15339:22;;;;;:::i;:::-;;;15260:116;-1:-1:-1;;14733:3:80;;14699:687;;;;14457:935;;;14206:1186;;;;;;;;;:::o;9264:218:125:-;9321:7;9352:17;9344:25;;9340:105;;;9392:42;;-1:-1:-1;;;9392:42:125;;9423:3;9392:42;;;37952:36:132;38004:18;;;37997:34;;;37925:18;;9392:42:125;37770:267:132;9340:105:125;-1:-1:-1;9469:5:125;9264:218::o;4741:1438:21:-;4807:13;;;4952:1134;4968:8;:15;4959:6;:24;4952:1134;;;5003:8;;;;;5048:19;5070:25;:8;5003;5070:17;:25::i;:::-;5048:47;;5123:1;5113:11;;;;5161:1;5146:12;:16;;;5142:58;;;5171:29;;-1:-1:-1;;;5171:29:21;;;;;2852:25:132;;;2825:18;;5171:29:21;2706:177:132;5142:58:21;5277:12;5292:24;:8;5309:6;5292:16;:24::i;:::-;5277:39;;5848:6;:13;;5858:3;5848:13;5844:45;;5870:19;;-1:-1:-1;;;5870:19:21;;;;;;;;;;;5844:45;435:1:46;:10;;;;462:31;;5907:124:21;;5954:9;;;;;667:10:46;;;;709:31;;5985:27:21;;5907:124;-1:-1:-1;6049:22:21;;;;;;;4952:1134;;;6119:8;:15;6109:6;:25;6105:67;;6143:29;;-1:-1:-1;;;6143:29:21;;;;;2852:25:132;;;2825:18;;6143:29:21;2706:177:132;6105:67:21;4822:1357;;4741:1438;;;:::o;12627:302:127:-;12704:5;12746:10;:6;12755:1;12746:10;:::i;:::-;12729:6;:13;:27;;12721:60;;;;-1:-1:-1;;;12721:60:127;;38244:2:132;12721:60:127;;;38226:21:132;38283:2;38263:18;;;38256:30;-1:-1:-1;;;38302:18:132;;;38295:49;38361:18;;12721:60:127;38042:343:132;12721:60:127;-1:-1:-1;12857:29:127;12873:3;12857:29;12851:36;;12627:302::o;12935:305::-;13013:6;13056:10;:6;13065:1;13056:10;:::i;:::-;13039:6;:13;:27;;13031:60;;;;-1:-1:-1;;;13031:60:127;;38592:2:132;13031:60:127;;;38574:21:132;38631:2;38611:18;;;38604:30;-1:-1:-1;;;38650:18:132;;;38643:50;38710:18;;13031:60:127;38390:344:132;13031:60:127;-1:-1:-1;13168:29:127;13184:3;13168:29;13162:36;;12935:305::o;9457:2804::-;9603:12;9655:7;9639:12;9655:7;9649:2;9639:12;:::i;:::-;:23;;9631:50;;;;-1:-1:-1;;;9631:50:127;;38941:2:132;9631:50:127;;;38923:21:132;38980:2;38960:18;;;38953:30;-1:-1:-1;;;38999:18:132;;;38992:44;39053:18;;9631:50:127;38739:338:132;9631:50:127;9716:16;9725:7;9716:6;:16;:::i;:::-;9699:6;:13;:33;;9691:63;;;;-1:-1:-1;;;9691:63:127;;39284:2:132;9691:63:127;;;39266:21:132;39323:2;39303:18;;;39296:30;-1:-1:-1;;;39342:18:132;;;39335:47;39399:18;;9691:63:127;39082:341:132;9691:63:127;9765:22;9828:15;;9856:1967;;;;11964:4;11958:11;11945:24;;12150:1;12139:9;12132:20;12198:4;12187:9;12183:20;12177:4;12170:34;9821:2397;;9856:1967;10038:4;10032:11;10019:24;;10697:2;10688:7;10684:16;11079:9;11072:17;11066:4;11062:28;11050:9;11039;11035:25;11031:60;11127:7;11123:2;11119:16;11379:6;11365:9;11358:17;11352:4;11348:28;11336:9;11328:6;11324:22;11320:57;11316:70;11153:425;11412:3;11408:2;11405:11;11153:425;;;11550:9;;11539:21;;11453:4;11445:13;;;;11485;11153:425;;;-1:-1:-1;;11596:26:127;;;11804:2;11787:11;-1:-1:-1;;11783:25:127;11777:4;11770:39;-1:-1:-1;9821:2397:127;-1:-1:-1;12245:9:127;9457:2804;-1:-1:-1;;;;9457:2804:127:o;3712:909:21:-;4037:7;:14;;4048:3;4037:14;4033:46;;4060:19;;-1:-1:-1;;;4060:19:21;;;;;;;;;;;4033:46;4089:15;4107:11;:7;4117:1;4107:11;:::i;:::-;4089:29;;4134:9;4129:486;4153:11;:18;4149:1;:22;4129:486;;;4192:11;4206;4218:1;4206:14;;;;;;;;:::i;:::-;;;;;;;4192:28;;4251:5;4238:18;;:9;:18;;;4234:371;;4310:11;4322:1;4310:14;;;;;;;;:::i;:::-;;;;;;;4326:11;4293:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;4276:11;4288:1;4276:14;;;;;;;;:::i;:::-;;;;;;:62;;;;4356:5;;;4234:371;4386:5;:10;;4395:1;4386:10;4382:223;;4512:9;4495:11;4507:1;4495:14;;;;;;;;:::i;:::-;;;;;;:26;;;;;;;;;;;4556:11;4539;4551:1;4539:14;;;;;;;;:::i;4382:223::-;-1:-1:-1;4173:3:21;;4129:486;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:286:132;72:6;125:2;113:9;104:7;100:23;96:32;93:52;;;141:1;138;131:12;93:52;167:23;;-1:-1:-1;;;;;;219:32:132;;209:43;;199:71;;266:1;263;256:12;497:598;616:6;624;632;640;693:3;681:9;672:7;668:23;664:33;661:53;;;710:1;707;700:12;661:53;750:9;737:23;-1:-1:-1;;;;;775:6:132;772:30;769:50;;;815:1;812;805:12;769:50;838:22;;894:3;876:16;;;872:26;869:46;;;911:1;908;901:12;869:46;934:2;983;968:18;;955:32;;-1:-1:-1;1034:2:132;1019:18;;1006:32;;1085:2;1070:18;1057:32;;-1:-1:-1;497:598:132;-1:-1:-1;;;497:598:132:o;1339:347::-;1490:2;1475:18;;1523:1;1512:13;;1502:144;;1568:10;1563:3;1559:20;1556:1;1549:31;1603:4;1600:1;1593:15;1631:4;1628:1;1621:15;1502:144;1655:25;;;1339:347;:::o;1691:131::-;-1:-1:-1;;;;;1766:31:132;;1756:42;;1746:70;;1812:1;1809;1802:12;1827:134;1895:20;;1924:31;1895:20;1924:31;:::i;:::-;1827:134;;;:::o;1966:163::-;2033:20;;2093:10;2082:22;;2072:33;;2062:61;;2119:1;2116;2109:12;2134:171;2201:20;;-1:-1:-1;;;;;2250:30:132;;2240:41;;2230:69;;2295:1;2292;2285:12;2310:391;2385:6;2393;2401;2454:2;2442:9;2433:7;2429:23;2425:32;2422:52;;;2470:1;2467;2460:12;2422:52;2509:9;2496:23;2528:31;2553:5;2528:31;:::i;:::-;2578:5;-1:-1:-1;2602:37:132;2635:2;2620:18;;2602:37;:::i;:::-;2592:47;;2658:37;2691:2;2680:9;2676:18;2658:37;:::i;:::-;2648:47;;2310:391;;;;;:::o;2888:456::-;2965:6;2973;2981;3034:2;3022:9;3013:7;3009:23;3005:32;3002:52;;;3050:1;3047;3040:12;3002:52;3089:9;3076:23;3108:31;3133:5;3108:31;:::i;:::-;3158:5;-1:-1:-1;3215:2:132;3200:18;;3187:32;3228:33;3187:32;3228:33;:::i;:::-;2888:456;;3280:7;;-1:-1:-1;;;3334:2:132;3319:18;;;;3306:32;;2888:456::o;3349:390::-;3435:8;3445:6;3499:3;3492:4;3484:6;3480:17;3476:27;3466:55;;3517:1;3514;3507:12;3466:55;-1:-1:-1;3540:20:132;;-1:-1:-1;;;;;3572:30:132;;3569:50;;;3615:1;3612;3605:12;3569:50;3652:4;3644:6;3640:17;3628:29;;3712:3;3705:4;3695:6;3692:1;3688:14;3680:6;3676:27;3672:38;3669:47;3666:67;;;3729:1;3726;3719:12;3666:67;3349:390;;;;;:::o;3744:629::-;3873:6;3881;3889;3942:2;3930:9;3921:7;3917:23;3913:32;3910:52;;;3958:1;3955;3948:12;3910:52;3997:9;3984:23;4016:31;4041:5;4016:31;:::i;:::-;4066:5;-1:-1:-1;4122:2:132;4107:18;;4094:32;-1:-1:-1;;;;;4138:30:132;;4135:50;;;4181:1;4178;4171:12;4135:50;4220:93;4305:7;4296:6;4285:9;4281:22;4220:93;:::i;:::-;3744:629;;4332:8;;-1:-1:-1;4194:119:132;;-1:-1:-1;;;;3744:629:132:o;4378:383::-;4455:6;4463;4471;4524:2;4512:9;4503:7;4499:23;4495:32;4492:52;;;4540:1;4537;4530:12;4492:52;4576:9;4563:23;4553:33;;4633:2;4622:9;4618:18;4605:32;4595:42;;4687:2;4676:9;4672:18;4659:32;4700:31;4725:5;4700:31;:::i;:::-;4750:5;4740:15;;;4378:383;;;;;:::o;4766:347::-;4817:8;4827:6;4881:3;4874:4;4866:6;4862:17;4858:27;4848:55;;4899:1;4896;4889:12;4848:55;-1:-1:-1;4922:20:132;;-1:-1:-1;;;;;4954:30:132;;4951:50;;;4997:1;4994;4987:12;4951:50;5034:4;5026:6;5022:17;5010:29;;5086:3;5079:4;5070:6;5062;5058:19;5054:30;5051:39;5048:59;;;5103:1;5100;5093:12;5118:855;5229:6;5237;5245;5253;5306:2;5294:9;5285:7;5281:23;5277:32;5274:52;;;5322:1;5319;5312:12;5274:52;5362:9;5349:23;-1:-1:-1;;;;;5432:2:132;5424:6;5421:14;5418:34;;;5448:1;5445;5438:12;5418:34;5471:22;;;;5527:3;5509:16;;;5505:26;5502:46;;;5544:1;5541;5534:12;5502:46;5567:2;;-1:-1:-1;5622:2:132;5607:18;;5594:32;;5638:16;;;5635:36;;;5667:1;5664;5657:12;5635:36;;5706:60;5758:7;5747:8;5736:9;5732:24;5706:60;:::i;:::-;5785:8;;-1:-1:-1;5680:86:132;-1:-1:-1;;5870:2:132;5855:18;;5842:32;5910:13;;5903:21;5893:32;;5883:60;;5939:1;5936;5929:12;5883:60;5118:855;;;;-1:-1:-1;5118:855:132;;-1:-1:-1;;5118:855:132:o;6136:250::-;6221:1;6231:113;6245:6;6242:1;6239:13;6231:113;;;6321:11;;;6315:18;6302:11;;;6295:39;6267:2;6260:10;6231:113;;;-1:-1:-1;;6378:1:132;6360:16;;6353:27;6136:250::o;6391:270::-;6432:3;6470:5;6464:12;6497:6;6492:3;6485:19;6513:76;6582:6;6575:4;6570:3;6566:14;6559:4;6552:5;6548:16;6513:76;:::i;:::-;6643:2;6622:15;-1:-1:-1;;6618:29:132;6609:39;;;;6650:4;6605:50;;6391:270;-1:-1:-1;;6391:270:132:o;6666:372::-;6056:12;;6044:25;;6118:4;6107:16;;;6101:23;6085:14;;;6078:47;6968:2;6963;6952:9;6948:18;6941:30;6864:4;6988:44;7028:2;7017:9;7013:18;7005:6;6988:44;:::i;7404:545::-;7492:6;7500;7508;7516;7569:2;7557:9;7548:7;7544:23;7540:32;7537:52;;;7585:1;7582;7575:12;7537:52;7625:9;7612:23;-1:-1:-1;;;;;7650:6:132;7647:30;7644:50;;;7690:1;7687;7680:12;7644:50;7729:58;7779:7;7770:6;7759:9;7755:22;7729:58;:::i;:::-;7806:8;;7703:84;;-1:-1:-1;7888:2:132;7873:18;;7860:32;;7939:2;7924:18;7911:32;;-1:-1:-1;7404:545:132;-1:-1:-1;;;;7404:545:132:o;7954:184::-;8012:6;8065:2;8053:9;8044:7;8040:23;8036:32;8033:52;;;8081:1;8078;8071:12;8033:52;8104:28;8122:9;8104:28;:::i;8630:319::-;8697:6;8705;8758:2;8746:9;8737:7;8733:23;8729:32;8726:52;;;8774:1;8771;8764:12;8726:52;8813:9;8800:23;8832:31;8857:5;8832:31;:::i;:::-;8882:5;-1:-1:-1;8906:37:132;8939:2;8924:18;;8906:37;:::i;:::-;8896:47;;8630:319;;;;;:::o;8954:465::-;9007:3;9045:5;9039:12;9072:6;9067:3;9060:19;9098:4;9127;9122:3;9118:14;9111:21;;9166:4;9159:5;9155:16;9189:1;9199:195;9213:6;9210:1;9207:13;9199:195;;;9278:13;;-1:-1:-1;;;;;9274:39:132;9262:52;;9334:12;;;;9369:15;;;;9310:1;9228:9;9199:195;;;-1:-1:-1;9410:3:132;;8954:465;-1:-1:-1;;;;;8954:465:132:o;9424:667::-;9545:1;9541;9536:3;9532:11;9528:19;9520:5;9514:12;9510:38;9505:3;9498:51;9610:4;9602;9595:5;9591:16;9585:23;9581:34;9574:4;9569:3;9565:14;9558:58;9677:4;9669;9662:5;9658:16;9652:23;9648:34;9641:4;9636:3;9632:14;9625:58;9744:4;9736;9729:5;9725:16;9719:23;9715:34;9708:4;9703:3;9699:14;9692:58;9480:3;9796:4;9789:5;9785:16;9779:23;9834:4;9827;9822:3;9818:14;9811:28;9860:58;9912:4;9907:3;9903:14;9889:12;9860:58;:::i;:::-;9848:70;;9966:4;9959:5;9955:16;9949:23;10014:3;10008:4;10004:14;9997:4;9992:3;9988:14;9981:38;10035:50;10080:4;10064:14;10035:50;:::i;:::-;10028:57;9424:667;-1:-1:-1;;;;;9424:667:132:o;10096:276::-;10287:2;10276:9;10269:21;10250:4;10307:59;10362:2;10351:9;10347:18;10339:6;10307:59;:::i;10377:391::-;10452:6;10460;10468;10521:2;10509:9;10500:7;10496:23;10492:32;10489:52;;;10537:1;10534;10527:12;10489:52;10560:28;10578:9;10560:28;:::i;:::-;10550:38;;10638:2;10627:9;10623:18;10610:32;10651:31;10676:5;10651:31;:::i;:::-;10701:5;-1:-1:-1;10725:37:132;10758:2;10743:18;;10725:37;:::i;10773:217::-;10920:2;10909:9;10902:21;10883:4;10940:44;10980:2;10969:9;10965:18;10957:6;10940:44;:::i;10995:508::-;11129:6;11137;11190:2;11178:9;11169:7;11165:23;11161:32;11158:52;;;11206:1;11203;11196:12;11158:52;11246:9;11233:23;-1:-1:-1;;;;;11271:6:132;11268:30;11265:50;;;11311:1;11308;11301:12;11265:50;11350:93;11435:7;11426:6;11415:9;11411:22;11350:93;:::i;:::-;11462:8;;11324:119;;-1:-1:-1;10995:508:132;-1:-1:-1;;;;10995:508:132:o;11508:180::-;11567:6;11620:2;11608:9;11599:7;11595:23;11591:32;11588:52;;;11636:1;11633;11626:12;11588:52;-1:-1:-1;11659:23:132;;11508:180;-1:-1:-1;11508:180:132:o;11693:261::-;6056:12;;6044:25;;6118:4;6107:16;;;6101:23;6085:14;;;6078:47;11887:2;11872:18;;11899:49;5978:153;11959:247;12018:6;12071:2;12059:9;12050:7;12046:23;12042:32;12039:52;;;12087:1;12084;12077:12;12039:52;12126:9;12113:23;12145:31;12170:5;12145:31;:::i;12393:315::-;12461:6;12469;12522:2;12510:9;12501:7;12497:23;12493:32;12490:52;;;12538:1;12535;12528:12;12490:52;12577:9;12564:23;12596:31;12621:5;12596:31;:::i;:::-;12646:5;12698:2;12683:18;;;;12670:32;;-1:-1:-1;;;12393:315:132:o;12713:127::-;12774:10;12769:3;12765:20;12762:1;12755:31;12805:4;12802:1;12795:15;12829:4;12826:1;12819:15;12845:253;12917:2;12911:9;12959:4;12947:17;;-1:-1:-1;;;;;12979:34:132;;13015:22;;;12976:62;12973:88;;;13041:18;;:::i;:::-;13077:2;13070:22;12845:253;:::o;13103:::-;13175:2;13169:9;13217:4;13205:17;;-1:-1:-1;;;;;13237:34:132;;13273:22;;;13234:62;13231:88;;;13299:18;;:::i;13361:275::-;13432:2;13426:9;13497:2;13478:13;;-1:-1:-1;;13474:27:132;13462:40;;-1:-1:-1;;;;;13517:34:132;;13553:22;;;13514:62;13511:88;;;13579:18;;:::i;:::-;13615:2;13608:22;13361:275;;-1:-1:-1;13361:275:132:o;13641:156::-;13707:20;;13767:4;13756:16;;13746:27;;13736:55;;13787:1;13784;13777:12;13802:787;13856:5;13909:3;13902:4;13894:6;13890:17;13886:27;13876:55;;13927:1;13924;13917:12;13876:55;13963:6;13950:20;13989:4;-1:-1:-1;;;;;14008:2:132;14005:26;14002:52;;;14034:18;;:::i;:::-;14080:2;14077:1;14073:10;14103:28;14127:2;14123;14119:11;14103:28;:::i;:::-;14165:15;;;14235;;;14231:24;;;14196:12;;;;14267:15;;;14264:35;;;14295:1;14292;14285:12;14264:35;14331:2;14323:6;14319:15;14308:26;;14343:217;14359:6;14354:3;14351:15;14343:217;;;14439:3;14426:17;14456:31;14481:5;14456:31;:::i;:::-;14500:18;;14376:12;;;;14538;;;;14343:217;;;14578:5;13802:787;-1:-1:-1;;;;;;;13802:787:132:o;14594:859::-;14654:5;14702:4;14690:9;14685:3;14681:19;14677:30;14674:50;;;14720:1;14717;14710:12;14674:50;14742:22;;:::i;:::-;14733:31;;14787:29;14806:9;14787:29;:::i;:::-;14780:5;14773:44;14849:36;14881:2;14870:9;14866:18;14849:36;:::i;:::-;14844:2;14837:5;14833:14;14826:60;14918:36;14950:2;14939:9;14935:18;14918:36;:::i;:::-;14913:2;14906:5;14902:14;14895:60;14987:36;15019:2;15008:9;15004:18;14987:36;:::i;:::-;14982:2;14975:5;14971:14;14964:60;15075:3;15064:9;15060:19;15047:33;-1:-1:-1;;;;;15140:2:132;15132:6;15129:14;15126:34;;;15156:1;15153;15146:12;15126:34;15193:57;15246:3;15237:6;15226:9;15222:22;15193:57;:::i;:::-;15187:3;15180:5;15176:15;15169:82;15304:3;15293:9;15289:19;15276:33;15260:49;;15334:2;15324:8;15321:16;15318:36;;;15350:1;15347;15340:12;15318:36;;15387:59;15442:3;15431:8;15420:9;15416:24;15387:59;:::i;:::-;15381:3;15374:5;15370:15;15363:84;;14594:859;;;;:::o;15458:211::-;15572:9;15609:54;15648:14;15641:5;15609:54;:::i;15674:251::-;15744:6;15797:2;15785:9;15776:7;15772:23;15768:32;15765:52;;;15813:1;15810;15803:12;15765:52;15845:9;15839:16;15864:31;15889:5;15864:31;:::i;16310:127::-;16371:10;16366:3;16362:20;16359:1;16352:31;16402:4;16399:1;16392:15;16426:4;16423:1;16416:15;16442:331;16542:4;16600:11;16587:25;16694:2;16690:7;16679:8;16663:14;16659:29;16655:43;16635:18;16631:68;16621:96;;16713:1;16710;16703:12;16621:96;16734:33;;;;;16442:331;-1:-1:-1;;16442:331:132:o;16778:521::-;16855:4;16861:6;16921:11;16908:25;17015:2;17011:7;17000:8;16984:14;16980:29;16976:43;16956:18;16952:68;16942:96;;17034:1;17031;17024:12;16942:96;17061:33;;17113:20;;;-1:-1:-1;;;;;;17145:30:132;;17142:50;;;17188:1;17185;17178:12;17142:50;17221:4;17209:17;;-1:-1:-1;17252:14:132;17248:27;;;17238:38;;17235:58;;;17289:1;17286;17279:12;17304:357;17394:6;17447:2;17435:9;17426:7;17422:23;17418:32;17415:52;;;17463:1;17460;17453:12;17415:52;17503:9;17490:23;-1:-1:-1;;;;;17528:6:132;17525:30;17522:50;;;17568:1;17565;17558:12;17522:50;17591:64;17647:7;17638:6;17627:9;17623:22;17591:64;:::i;17863:127::-;17924:10;17919:3;17915:20;17912:1;17905:31;17955:4;17952:1;17945:15;17979:4;17976:1;17969:15;17995:125;18060:9;;;18081:10;;;18078:36;;;18094:18;;:::i;18125:271::-;18308:6;18300;18295:3;18282:33;18264:3;18334:16;;18359:13;;;18334:16;18125:271;-1:-1:-1;18125:271:132:o;18401:184::-;18459:6;18512:2;18500:9;18491:7;18487:23;18483:32;18480:52;;;18528:1;18525;18518:12;18480:52;18551:28;18569:9;18551:28;:::i;18590:266::-;18678:6;18673:3;18666:19;18730:6;18723:5;18716:4;18711:3;18707:14;18694:43;-1:-1:-1;18782:1:132;18757:16;;;18775:4;18753:27;;;18746:38;;;;18838:2;18817:15;;;-1:-1:-1;;18813:29:132;18804:39;;;18800:50;;18590:266::o;18861:404::-;19064:2;19053:9;19046:21;19027:4;19090:44;19130:2;19119:9;19115:18;19107:6;19090:44;:::i;:::-;19182:9;19174:6;19170:22;19165:2;19154:9;19150:18;19143:50;19210:49;19252:6;19244;19236;19210:49;:::i;:::-;19202:57;18861:404;-1:-1:-1;;;;;;18861:404:132:o;19845:485::-;-1:-1:-1;;;;;20086:32:132;;20068:51;;20155:3;20150:2;20135:18;;20128:31;;;-1:-1:-1;;20176:62:132;;20218:19;;20210:6;20202;20176:62;:::i;:::-;20269:2;20254:18;;20247:34;;;;-1:-1:-1;20312:2:132;20297:18;20290:34;20168:70;19845:485;-1:-1:-1;;;19845:485:132:o;20335:345::-;20449:4;20507:11;20494:25;20601:2;20597:7;20586:8;20570:14;20566:29;20562:43;20542:18;20538:68;20528:96;;20620:1;20617;20610:12;20685:331;20784:4;20842:11;20829:25;20936:3;20932:8;20921;20905:14;20901:29;20897:44;20877:18;20873:69;20863:97;;20956:1;20953;20946:12;21021:182;21078:6;21131:2;21119:9;21110:7;21106:23;21102:32;21099:52;;;21147:1;21144;21137:12;21099:52;21170:27;21187:9;21170:27;:::i;21208:520::-;21278:5;21285:6;21345:3;21332:17;21431:2;21427:7;21416:8;21400:14;21396:29;21392:43;21372:18;21368:68;21358:96;;21450:1;21447;21440:12;21358:96;21478:33;;21582:4;21569:18;;;-1:-1:-1;21530:21:132;;-1:-1:-1;;;;;;21599:30:132;;21596:50;;;21642:1;21639;21632:12;21596:50;21696:6;21693:1;21689:14;21673;21669:35;21662:5;21658:47;21655:67;;;21718:1;21715;21708:12;21733:524;21833:6;21828:3;21821:19;21803:3;21859:4;21888;21883:3;21879:14;21872:21;;21916:5;21939:1;21949:283;21963:6;21960:1;21957:13;21949:283;;;22040:6;22027:20;22060:33;22085:7;22060:33;:::i;:::-;-1:-1:-1;;;;;22118:33:132;22106:46;;22172:12;;;;22207:15;;;;22148:1;21978:9;21949:283;;22262:2636;22537:2;22589:21;;;22562:18;;;22645:22;;;22508:4;;22686:2;22704:18;;;22768:1;22764:14;;;22749:30;;22745:39;;22807:6;22508:4;22841:2028;22855:6;22852:1;22849:13;22841:2028;;;22918:2;22914:7;22974:2;22962:9;22954:6;22950:22;22946:31;22941:3;22934:44;23030:6;23017:20;23121:2;23117:7;23108:6;23092:14;23088:27;23084:41;23064:18;23060:66;23050:94;;23140:1;23137;23130:12;23050:94;23170:31;;23259:10;23233:24;23170:31;23233:24;:::i;:::-;23229:41;23221:6;23214:57;23336:2;23329:5;23325:14;23312:28;23425:3;23421:8;23413:5;23397:14;23393:26;23389:41;23367:20;23363:68;23353:96;;23445:1;23442;23435:12;23353:96;23529:15;;;23522:27;;;23477:32;23577:21;;23611:33;23577:21;23611:33;:::i;:::-;-1:-1:-1;;;;;23681:33:132;23664:15;;;23657:58;23748:34;23765:16;;;23748:34;:::i;:::-;23805:2;23830:4;23889:2;23875:12;23871:21;23866:2;23858:6;23854:15;23847:46;23928:34;23958:2;23949:7;23945:16;23928:34;:::i;:::-;23906:56;;23985:3;24045:2;24029:14;24025:23;24020:2;24012:6;24008:15;24001:48;24084:34;24114:2;24105:7;24101:16;24084:34;:::i;:::-;24062:56;;24141:3;24131:13;;24201:2;24185:14;24181:23;24176:2;24168:6;24164:15;24157:48;24254:69;24319:2;24310:7;24306:16;24297:7;24254:69;:::i;:::-;24346:4;24370:15;;;24363:27;24218:105;-1:-1:-1;24218:105:132;-1:-1:-1;24417:85:132;;-1:-1:-1;24497:3:132;24485:16;;24218:105;;24417:85;:::i;:::-;24403:99;;;24553:69;24618:2;24609:7;24605:16;24596:7;24553:69;:::i;:::-;24515:107;;;;24685:2;24676:6;24668;24664:19;24660:28;24654:3;24646:6;24642:16;24635:54;24712:77;24782:6;24766:14;24750;24712:77;:::i;:::-;24847:12;;;;24702:87;-1:-1:-1;;;24812:15:132;;;;-1:-1:-1;;22877:1:132;22870:9;22841:2028;;;-1:-1:-1;24886:6:132;;22262:2636;-1:-1:-1;;;;;;;;22262:2636:132:o;25156:530::-;25198:5;25251:3;25244:4;25236:6;25232:17;25228:27;25218:55;;25269:1;25266;25259:12;25218:55;25305:6;25292:20;-1:-1:-1;;;;;25327:2:132;25324:26;25321:52;;;25353:18;;:::i;:::-;25397:55;25440:2;25421:13;;-1:-1:-1;;25417:27:132;25446:4;25413:38;25397:55;:::i;:::-;25477:2;25468:7;25461:19;25523:3;25516:4;25511:2;25503:6;25499:15;25495:26;25492:35;25489:55;;;25540:1;25537;25530:12;25489:55;25605:2;25598:4;25590:6;25586:17;25579:4;25570:7;25566:18;25553:55;25653:1;25628:16;;;25646:4;25624:27;25617:38;;;;25632:7;25156:530;-1:-1:-1;;;25156:530:132:o;25691:846::-;25791:9;25850:4;25842:5;25826:14;25822:26;25818:37;25815:57;;;25868:1;25865;25858:12;25815:57;25896:22;;:::i;:::-;25943:24;25961:5;25943:24;:::i;:::-;25934:7;25927:41;26002:33;26031:2;26024:5;26020:14;26002:33;:::i;:::-;25997:2;25988:7;25984:16;25977:59;26070:34;26100:2;26093:5;26089:14;26070:34;:::i;:::-;26065:2;26056:7;26052:16;26045:60;26139:33;26168:2;26161:5;26157:14;26139:33;:::i;:::-;26134:2;26125:7;26121:16;26114:59;26232:3;26225:5;26221:15;26208:29;26202:3;26193:7;26189:17;26182:56;26297:3;26290:5;26286:15;26273:29;26267:3;26258:7;26254:17;26247:56;26350:3;26343:5;26339:15;26326:29;-1:-1:-1;;;;;26370:6:132;26367:30;26364:50;;;26410:1;26407;26400:12;26364:50;26449:52;26486:14;26477:6;26470:5;26466:18;26449:52;:::i;:::-;26443:3;26430:17;;26423:79;-1:-1:-1;26434:7:132;25691:846;-1:-1:-1;;25691:846:132:o;26542:314::-;-1:-1:-1;;;;;26717:32:132;;26699:51;;26786:2;26781;26766:18;;26759:30;;;-1:-1:-1;;26806:44:132;;26831:18;;26823:6;26806:44;:::i;26861:184::-;26931:6;26984:2;26972:9;26963:7;26959:23;26955:32;26952:52;;;27000:1;26997;26990:12;26952:52;-1:-1:-1;27023:16:132;;26861:184;-1:-1:-1;26861:184:132:o;27050:178::-;27087:3;27131:4;27124:5;27120:16;27155:7;27145:41;;27166:18;;:::i;:::-;-1:-1:-1;;27202:20:132;;27050:178;-1:-1:-1;;27050:178:132:o;27233:459::-;-1:-1:-1;;;;;27478:32:132;;27460:51;;27559:10;27547:23;;27542:2;27527:18;;27520:51;27607:2;27602;27587:18;;27580:30;;;-1:-1:-1;;27627:59:132;;27667:18;;27659:6;27627:59;:::i;28144:893::-;28520:3;28515;28511:13;28502:6;28497:3;28493:16;28489:36;28484:3;28477:49;-1:-1:-1;;;;;28581:3:132;28577:28;28568:6;28563:3;28559:16;28555:51;28551:1;28546:3;28542:11;28535:72;28459:3;28635:10;28630:3;28626:20;28697:2;28688:6;28683:3;28679:16;28675:25;28671:1;28666:3;28662:11;28655:46;28731:6;28726:2;28721:3;28717:12;28710:28;28790:2;28781:6;28776:3;28772:16;28768:25;28763:2;28758:3;28754:12;28747:47;;28824:6;28819:2;28814:3;28810:12;28803:28;28861:6;28856:2;28851:3;28847:12;28840:28;28897:6;28891:13;28913:76;28982:6;28976:3;28971;28967:13;28960:4;28952:6;28948:17;28913:76;:::i;:::-;29009:16;;;;29027:3;29005:26;;28144:893;-1:-1:-1;;;;;;;;;28144:893:132:o;29042:331::-;29147:9;29158;29200:8;29188:10;29185:24;29182:44;;;29222:1;29219;29212:12;29182:44;29251:6;29241:8;29238:20;29235:40;;;29271:1;29268;29261:12;29235:40;-1:-1:-1;;29297:23:132;;;29342:25;;;;;-1:-1:-1;29042:331:132:o;29378:316::-;-1:-1:-1;;;;;;29498:19:132;;29567:11;;;;29598:1;29590:10;;29587:101;;;29675:2;29669;29662:3;29659:1;29655:11;29652:1;29648:19;29644:28;29640:2;29636:37;29632:46;29623:55;;29587:101;;;29378:316;;;;:::o;29699:323::-;-1:-1:-1;;;;;;29819:19:132;;29895:11;;;;29926:1;29918:10;;29915:101;;;29987:1;29983:11;;;;29980:1;29976:19;29972:28;;;29964:37;29960:46;;;;29699:323;-1:-1:-1;;29699:323:132:o;30027:331::-;-1:-1:-1;;;;;;30147:19:132;;30231:11;;;;30262:1;30254:10;;30251:101;;;30323:1;30319:11;;;;30316:1;30312:19;30308:28;;;30300:37;30296:46;;;;30027:331;-1:-1:-1;;30027:331:132:o;30363:255::-;30483:19;;30522:2;30514:11;;30511:101;;;-1:-1:-1;;30583:2:132;30579:12;;;30576:1;30572:20;30568:33;30557:45;30363:255;;;;:::o;30623:151::-;30713:4;30706:12;;;30692;;;30688:31;;30731:14;;30728:40;;;30748:18;;:::i;30779:262::-;30817:1;30851:4;30848:1;30844:12;30875:3;30865:134;;30921:10;30916:3;30912:20;30909:1;30902:31;30956:4;30953:1;30946:15;30984:4;30981:1;30974:15;30865:134;31031:3;31024:4;31021:1;31017:12;31013:22;31008:27;;;30779:262;;;;:::o;31236:318::-;-1:-1:-1;;;;;;31356:19:132;;31427:11;;;;31458:1;31450:10;;31447:101;;;31519:1;31515:11;;;;31512:1;31508:19;31504:28;;;31496:37;31492:46;;;;31236:318;-1:-1:-1;;31236:318:132:o;32410:148::-;32498:4;32477:12;;;32491;;;32473:31;;32516:13;;32513:39;;;32532:18;;:::i;32563:663::-;-1:-1:-1;;;;;32840:32:132;;32822:51;;32909:3;32904:2;32889:18;;32882:31;;;-1:-1:-1;;32936:45:132;;32961:19;;32953:6;32936:45;:::i;:::-;33029:9;33021:6;33017:22;33012:2;33001:9;32997:18;32990:50;33063:49;33105:6;33097;33089;33063:49;:::i;:::-;33049:63;;33160:9;33152:6;33148:22;33143:2;33132:9;33128:18;33121:50;33188:32;33213:6;33205;33188:32;:::i;:::-;33180:40;32563:663;-1:-1:-1;;;;;;;;32563:663:132:o;33231:492::-;33406:3;33444:6;33438:13;33460:66;33519:6;33514:3;33507:4;33499:6;33495:17;33460:66;:::i;:::-;33589:13;;33548:16;;;;33611:70;33589:13;33548:16;33658:4;33646:17;;33611:70;:::i;:::-;33697:20;;33231:492;-1:-1:-1;;;;33231:492:132:o;33728:1008::-;34063:2;34052:9;34045:21;34026:4;34089:56;34141:2;34130:9;34126:18;34118:6;34089:56;:::i;:::-;34164:2;34214:9;34206:6;34202:22;34197:2;34186:9;34182:18;34175:50;34248:44;34285:6;34277;34248:44;:::i;:::-;34328:22;;;34323:2;34308:18;;34301:50;34400:13;;34422:22;;;34472:2;34498:15;;;;-1:-1:-1;34460:15:132;;;;34531:1;34541:169;34555:6;34552:1;34549:13;34541:169;;;34616:13;;34604:26;;34685:15;;;;34650:12;;;;34577:1;34570:9;34541:169;;34741:470;34926:3;34964:6;34958:13;34980:66;35039:6;35034:3;35027:4;35019:6;35015:17;34980:66;:::i;:::-;35068:16;;35121:6;35113;35068:16;35093:35;35185:1;35147:18;;35174:13;;;-1:-1:-1;35147:18:132;;34741:470;-1:-1:-1;;;34741:470:132:o;36071:927::-;36418:3;36452:16;;;-1:-1:-1;;;;;;36448:25:132;;;36436:38;;36497:3;36541:16;;;-1:-1:-1;;;;;;36537:25:132;;;36533:1;36524:11;;36517:46;36596:16;;;36592:25;;36588:1;36579:11;;36572:46;36655:3;36651:16;;;-1:-1:-1;;;;;;36647:62:132;36643:1;36634:11;;36627:83;36744:16;;;36740:25;;36735:2;36726:12;;36719:47;36800:16;;;;36796:25;36791:2;36782:12;;36775:47;36856:16;;;;36852:25;36847:2;36838:12;;36831:47;36386:3;36887:40;36923:2;36914:12;;36906:6;35479:3;35475:15;-1:-1:-1;;;;;;35471:61:132;35459:74;;35405:134;36887:40;-1:-1:-1;36952:2:132;36943:12;;36936:28;;;;36989:2;36980:12;;36071:927;-1:-1:-1;;;;;;;;36071:927:132:o;37406:359::-;37593:6;37588:3;37581:19;37563:3;37629:6;37623:13;37645:73;37711:6;37706:2;37701:3;37697:12;37692:2;37684:6;37680:15;37645:73;:::i;:::-;37738:16;;;;37756:2;37734:25;;37406:359;-1:-1:-1;;;37406:359:132:o", - "linkReferences": {}, - "immutableReferences": { - "21756": [ - { "start": 6994, "length": 32 }, - { "start": 9772, "length": 32 } - ], - "4": [ - { "start": 1621, "length": 32 }, - { "start": 1882, "length": 32 }, - { "start": 2200, "length": 32 }, - { "start": 3437, "length": 32 }, - { "start": 5985, "length": 32 } - ], - "6": [{ "start": 3045, "length": 32 }] - } - }, - "methodIdentifiers": { - "cmdHashLookup(address,uint32,uint64)": "1fb51225", - "commitVerification(bytes,bytes32,bytes32)": "594924da", - "fees(address)": "faaebd21", - "getAppReadLibConfig(address,uint32)": "ea69d69d", - "getConfig(uint32,address,uint32)": "9c33abf7", - "getReadLibConfig(address,uint32)": "8eb0bf30", - "getTreasuryAndNativeFeeCap()": "7620fd01", - "hashLookup(bytes32,bytes32,address)": "3c782a52", - "isSupportedEid(uint32)": "6750cd4c", - "messageLibType()": "1881d94d", - "owner()": "8da5cb5b", - "quote((uint64,uint32,address,uint32,bytes32,bytes32,bytes),bytes,bool)": "d80e9bd9", - "renounceOwnership()": "715018a6", - "send((uint64,uint32,address,uint32,bytes32,bytes32,bytes),bytes,bool)": "4389e58f", - "setConfig(address,(uint32,uint32,bytes)[])": "20efd722", - "setDefaultReadLibConfigs((uint32,(address,uint8,uint8,uint8,address[],address[]))[])": "c85f4b4e", - "setTreasury(address)": "f0f44260", - "setTreasuryNativeFeeCap(uint256)": "d15b0d49", - "supportsInterface(bytes4)": "01ffc9a7", - "testHelper()": "0e97289b", - "transferOwnership(address)": "f2fde38b", - "verifiable((address,uint8,uint8,uint8,address[],address[]),bytes32,bytes32,bytes32)": "052368ca", - "verify(bytes,bytes32,bytes32)": "ab750e75", - "version()": "54fd4d50", - "withdrawFee(address,uint256)": "fd9be522", - "withdrawLzTokenFee(address,address,uint256)": "200175f7" - }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"_verifyHelper\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_endpoint\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_treasuryGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_treasuryGasForFeeCap\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"DVN_InvalidDVNIdx\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"cursor\",\"type\":\"uint256\"}],\"name\":\"DVN_InvalidDVNOptions\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_MessageLib_OnlyEndpoint\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_RL_AtLeastOneDVN\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_RL_CannotWithdrawAltToken\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"requested\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"available\",\"type\":\"uint256\"}],\"name\":\"LZ_RL_InvalidAmount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_RL_InvalidCmdHash\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"configType\",\"type\":\"uint32\"}],\"name\":\"LZ_RL_InvalidConfigType\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_RL_InvalidEid\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_RL_InvalidExecutor\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_RL_InvalidOptionalDVNCount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_RL_InvalidOptionalDVNThreshold\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_RL_InvalidPacketHeader\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_RL_InvalidPacketVersion\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_RL_InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_RL_InvalidRequiredDVNCount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_RL_NotTreasury\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_RL_Unsorted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"}],\"name\":\"LZ_RL_UnsupportedEid\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_RL_Verifying\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_ULN_InvalidLegacyType1Option\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_ULN_InvalidLegacyType2Option\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"workerId\",\"type\":\"uint8\"}],\"name\":\"LZ_ULN_InvalidWorkerId\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"cursor\",\"type\":\"uint256\"}],\"name\":\"LZ_ULN_InvalidWorkerOptions\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"optionType\",\"type\":\"uint16\"}],\"name\":\"LZ_ULN_UnsupportedOptionType\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"bits\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"SafeCastOverflowedUintDowncast\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"Transfer_NativeFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Transfer_ToAddressIsZero\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"requiredDVNs\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"optionalDVNs\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"fees\",\"type\":\"uint256[]\"}],\"name\":\"DVNFeePaid\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"executor\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"requiredDVNCount\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"optionalDVNCount\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"optionalDVNThreshold\",\"type\":\"uint8\"},{\"internalType\":\"address[]\",\"name\":\"requiredDVNs\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"optionalDVNs\",\"type\":\"address[]\"}],\"internalType\":\"struct ReadLibConfig\",\"name\":\"config\",\"type\":\"tuple\"}],\"indexed\":false,\"internalType\":\"struct SetDefaultReadLibConfigParam[]\",\"name\":\"params\",\"type\":\"tuple[]\"}],\"name\":\"DefaultReadLibConfigsSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"executor\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"}],\"name\":\"ExecutorFeePaid\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"lzToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"LzTokenFeeWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"worker\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"NativeFeeWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"dvn\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"header\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"cmdHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"payloadHash\",\"type\":\"bytes32\"}],\"name\":\"PayloadVerified\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oapp\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"executor\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"requiredDVNCount\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"optionalDVNCount\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"optionalDVNThreshold\",\"type\":\"uint8\"},{\"internalType\":\"address[]\",\"name\":\"requiredDVNs\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"optionalDVNs\",\"type\":\"address[]\"}],\"indexed\":false,\"internalType\":\"struct ReadLibConfig\",\"name\":\"config\",\"type\":\"tuple\"}],\"name\":\"ReadLibConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newTreasuryNativeFeeCap\",\"type\":\"uint256\"}],\"name\":\"TreasuryNativeFeeCapSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"treasury\",\"type\":\"address\"}],\"name\":\"TreasurySet\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"oapp\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"name\":\"cmdHashLookup\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"cmdHash\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_packetHeader\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"_cmdHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_payloadHash\",\"type\":\"bytes32\"}],\"name\":\"commitVerification\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"worker\",\"type\":\"address\"}],\"name\":\"fees\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_oapp\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_remoteEid\",\"type\":\"uint32\"}],\"name\":\"getAppReadLibConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"executor\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"requiredDVNCount\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"optionalDVNCount\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"optionalDVNThreshold\",\"type\":\"uint8\"},{\"internalType\":\"address[]\",\"name\":\"requiredDVNs\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"optionalDVNs\",\"type\":\"address[]\"}],\"internalType\":\"struct ReadLibConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"_oapp\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_configType\",\"type\":\"uint32\"}],\"name\":\"getConfig\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_oapp\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_remoteEid\",\"type\":\"uint32\"}],\"name\":\"getReadLibConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"executor\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"requiredDVNCount\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"optionalDVNCount\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"optionalDVNThreshold\",\"type\":\"uint8\"},{\"internalType\":\"address[]\",\"name\":\"requiredDVNs\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"optionalDVNs\",\"type\":\"address[]\"}],\"internalType\":\"struct ReadLibConfig\",\"name\":\"rtnConfig\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTreasuryAndNativeFeeCap\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"headerHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"cmdHash\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"dvn\",\"type\":\"address\"}],\"name\":\"hashLookup\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"payloadHash\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"}],\"name\":\"isSupportedEid\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"messageLibType\",\"outputs\":[{\"internalType\":\"enum MessageLibType\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"receiver\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"internalType\":\"struct Packet\",\"name\":\"_packet\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"_options\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"_payInLzToken\",\"type\":\"bool\"}],\"name\":\"quote\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nativeFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lzTokenFee\",\"type\":\"uint256\"}],\"internalType\":\"struct MessagingFee\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"receiver\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"internalType\":\"struct Packet\",\"name\":\"_packet\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"_options\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"_payInLzToken\",\"type\":\"bool\"}],\"name\":\"send\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nativeFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lzTokenFee\",\"type\":\"uint256\"}],\"internalType\":\"struct MessagingFee\",\"name\":\"\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_oapp\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"configType\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"config\",\"type\":\"bytes\"}],\"internalType\":\"struct SetConfigParam[]\",\"name\":\"_params\",\"type\":\"tuple[]\"}],\"name\":\"setConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"executor\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"requiredDVNCount\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"optionalDVNCount\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"optionalDVNThreshold\",\"type\":\"uint8\"},{\"internalType\":\"address[]\",\"name\":\"requiredDVNs\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"optionalDVNs\",\"type\":\"address[]\"}],\"internalType\":\"struct ReadLibConfig\",\"name\":\"config\",\"type\":\"tuple\"}],\"internalType\":\"struct SetDefaultReadLibConfigParam[]\",\"name\":\"_params\",\"type\":\"tuple[]\"}],\"name\":\"setDefaultReadLibConfigs\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_treasury\",\"type\":\"address\"}],\"name\":\"setTreasury\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newTreasuryNativeFeeCap\",\"type\":\"uint256\"}],\"name\":\"setTreasuryNativeFeeCap\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"_interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"testHelper\",\"outputs\":[{\"internalType\":\"contract TestHelperOz5\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"executor\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"requiredDVNCount\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"optionalDVNCount\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"optionalDVNThreshold\",\"type\":\"uint8\"},{\"internalType\":\"address[]\",\"name\":\"requiredDVNs\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"optionalDVNs\",\"type\":\"address[]\"}],\"internalType\":\"struct ReadLibConfig\",\"name\":\"_config\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"_headerHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_cmdHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_payloadHash\",\"type\":\"bytes32\"}],\"name\":\"verifiable\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_packetHeader\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"_cmdHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_payloadHash\",\"type\":\"bytes32\"}],\"name\":\"verify\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"major\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"minor\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"endpointVersion\",\"type\":\"uint8\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"withdrawFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_lzToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"withdrawLzTokenFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"errors\":{\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}],\"SafeCastOverflowedUintDowncast(uint8,uint256)\":[{\"details\":\"Value doesn't fit in an uint of `bits` size.\"}],\"SafeERC20FailedOperation(address)\":[{\"details\":\"An operation with an ERC-20 token failed.\"}]},\"kind\":\"dev\",\"methods\":{\"commitVerification(bytes,bytes32,bytes32)\":{\"details\":\"The verification will be done in the same chain where the packet is sent.dont need to check endpoint verifiable here to save gas, as it will reverts if not verifiable.\",\"params\":{\"_packetHeader\":\"- the srcEid should be the localEid and the dstEid should be the channel id. The original packet header in PacketSent event should be processed to flip the srcEid and dstEid.\"}},\"getAppReadLibConfig(address,uint32)\":{\"details\":\"Get the readLib config without the default config for the given remoteEid.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"setDefaultReadLibConfigs((uint32,(address,uint8,uint8,uint8,address[],address[]))[])\":{\"details\":\"about the DEFAULT ReadLib config 1) its values are all LITERAL (e.g. 0 is 0). whereas in the oapp ReadLib config, 0 (default value) points to the default ReadLib config this design enables the oapp to point to DEFAULT config without explicitly setting the config 2) its configuration is more restrictive than the oapp ReadLib config that a) it must not use NIL value, where NIL is used only by oapps to indicate the LITERAL 0 b) it must have at least one DVN and executor\"},\"setTreasuryNativeFeeCap(uint256)\":{\"details\":\"the new value can not be greater than the old value, i.e. down only\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"verify(bytes,bytes32,bytes32)\":{\"details\":\"DVN verifies the payload with the packet header and command hash\",\"params\":{\"_packetHeader\":\"- the packet header is needed for event only, which can be conveniently for off-chain to track the packet state.\"}},\"withdrawLzTokenFee(address,address,uint256)\":{\"details\":\"_lzToken is a user-supplied value because lzToken might change in the endpoint before all lzToken can be taken out\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ReadLib1002Mock.sol\":\"ReadLib1002Mock\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/MessageLibBase.sol\":{\"keccak256\":\"0x14899a4398251439938d6ef8a15ea8c6acdddc98a7b0066d7e63676192dea0d1\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://3998d03de7025c2c601a4fdcaf9475d12a1ef661fcf1a685ece84fdde6498cf9\",\"dweb:/ipfs/QmReknRbiGAiPqq9toKyXKo6hUKXrQPJyyS6LnTGjiDKoY\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/ReceiveLibBaseE2.sol\":{\"keccak256\":\"0x2fdbd1b13751a264cd6e7fac518a2685b15c968806c03f1d18b177fc0526e9a9\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://600af48bb67939b5f4a3a00c76863ee290a55325ea8697f7cc4b46321ab26ef2\",\"dweb:/ipfs/QmdRigYaB6TXczjtVkvwpUEBwvvvDuymFoViMCB6xQPYUU\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/SendLibBase.sol\":{\"keccak256\":\"0x400eaa11c7d50b4c25b7625290ff00937b6875ad3986b353c37a4e62b5a834b1\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://1f51eb0785d3630815a9d63de1c1331fe966df4c3f2fb6750b8da7be9e9743a4\",\"dweb:/ipfs/QmaAEf1kjhhff3AUhRiPm6ikpk2YMMrpKc2ccYzNs7waBy\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/SendLibBaseE2.sol\":{\"keccak256\":\"0x90ada11d0a330732c56b989e59c8272b70f956a5d7be2cf209d6d51a51d35a9e\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://0abc7a6d07ec40a3a922256ad05bdd6eca10550d85bfd2e67147473617bb0497\",\"dweb:/ipfs/QmRDphmFhx1scRJXcusg6pUhVQvp941oCJwnHGAPdrNY4T\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IExecutor.sol\":{\"keccak256\":\"0x2fd26e454b060ede7afa15f8bbc67bd43f9181b6405ca411d36c8b538be016af\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cf2142e83214bb392f69ed14266718cfd803f849a7239ee9a1950ddf66553696\",\"dweb:/ipfs/QmSZ2mPMZqWBetMU8VESKtxy7UdSThUVmJmTFMHEyKLTGZ\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IExecutorFeeLib.sol\":{\"keccak256\":\"0x801d12eca6d6b232fb91d949cdb70a4c547c5e27e73555f2f1eb9e757c639bcc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b61bdffe26ff3902edab3efb0b5af3808ec9e28d72db95b77128502b9bc7638d\",\"dweb:/ipfs/Qmcyf3npDDEq28b9XqmXgSGyQegj2cxUZQ3UekSNf34g8M\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroExecutor.sol\":{\"keccak256\":\"0x3647af317ee126b1247a782abb30e59ec5ab21b4945f1d3b4370d1fa3c1bf347\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5b51cd5e7347ee869a06bd57a698f40e4a901ec7fdcb27f0ef485e4a0e1e9be4\",\"dweb:/ipfs/QmP2Nc73veRzLGdUahkjhQAiKR9ZWYiUtSGwoMB1sPXxUp\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroPriceFeed.sol\":{\"keccak256\":\"0xb4df72798a64f5ea44775b526e0c417c3de0ffc661659d7b31d5b28567c6fbcc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://30ca5fd5e3227a7bffc51654ee3bfebdd591a131f86846ac42dea8a40c5cf1d8\",\"dweb:/ipfs/QmXNmQCF8TZAFpUxgPa1rgWt4ktsBV38A8Hax7TiYLgybW\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroReadExecutor.sol\":{\"keccak256\":\"0x360936885f173f816ffb47e555d480928e74eb1ad54a76af0f4595ecba2d5657\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://16b5095e6439b1e416eb70571a1dd8f4f21a0d77b19c9e510ca289d99e5e09ab\",\"dweb:/ipfs/QmZ2mjQDQ35gJseyzmQhik4cBgN2ESADzofFNVFvgS64hv\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroTreasury.sol\":{\"keccak256\":\"0x2aab2a3cf50e20af56d9204b1367d52a47abba0b0c7c21f304d413de1ced6345\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f8b603b5e5e62c621715f8449280af240a4add8721c4ae8f5e8e491507f6e4c5\",\"dweb:/ipfs/QmUQ7Ti7CPmKnRbQFN9TLvVbeZhsi1xUjqZPTJ36dCZ6y8\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IWorker.sol\":{\"keccak256\":\"0xa6b61913767305227576cc6da5067de4208f09a4f58bfbfe32beafdfae9869b1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7fce83bfb831f383606aee7f5ff68a330c8526bb1036f9ba0813d3e4fa8d534\",\"dweb:/ipfs/QmR7zAqJkmCgBj6sguS8t2WthY5k6FwsakgH4UY11uqD4n\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/libs/ExecutorOptions.sol\":{\"keccak256\":\"0x441b723f2f597be2ec2bb361fcf3f11852c23534db1cfa7d2ffff7e61d228e3c\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://636817d20f90f75032e35376256cf5f4d2a047d6541b45f644d82a2e4dc8f1eb\",\"dweb:/ipfs/QmcEFRxCmmm9hKbqi7Powj6ATbw4JXXJW4rxfwMcxWsDnT\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/libs/SafeCall.sol\":{\"keccak256\":\"0xc3b7b7927472f7c1ca9703af310e9050c798afaccf399ad0f131e179b8582c8d\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://e5be13af32ff6b371985d405bc6fe8ac2faf5445bd88fda2dab4b869f66e3f89\",\"dweb:/ipfs/Qmd21k4H2tAHKrpiuHUbH87eNtHLLJzHj9ZCrMh8AKfDHh\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/ReceiveUlnBase.sol\":{\"keccak256\":\"0x36c93de122bbb74ae31e3eacf567c0a3bc649ed3ebb2766c76dfa93aebcace44\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://e83bcaa80e2715e68818dd53e4dc6ad8e665b8249d69a08cf2d2635b9757fb79\",\"dweb:/ipfs/QmSKh6NgaTrTSa48gDzGGqGNAcs5jVEHgZSzZzbuJSEsxo\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/SendUlnBase.sol\":{\"keccak256\":\"0x6d9962ffa476ac2efb78f1415bb2f650a30eedeef2b75fdab0aeafaf3e8da6a5\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://21f32c56b67d2e770444b809c1a85a96627194c605ad317d482dfc5b6ce7e8c2\",\"dweb:/ipfs/QmP5tzoMDzTdduEcSpYHgg6WCHLQGuc1djDMFUBycJPLCU\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/UlnBase.sol\":{\"keccak256\":\"0xfdb1d04f4996c0a9d35abfbfcf10d978da638885eb77d0a9dc35cea5993074e3\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://776d58d88d13b058f236cf18c32b4b9718a021513fc4e198287f4fe18ec5aba4\",\"dweb:/ipfs/QmdNX8jJu2aXJ8Dpbt2ohfhT8RKQLuvh58sW6SAXcUTcV9\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IDVN.sol\":{\"keccak256\":\"0x6becdfab6c1fcaf98f402bee48495895e54825f9d6eef6e292dde0caed628284\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2273341033856737cd46704a1a769768feae696d0e7a912f5be9de8ffdd2180c\",\"dweb:/ipfs/QmY1xBAmMX9jND1HAb7tDyZNPgFReXMqs1vtmHbShKZFQY\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IDVNFeeLib.sol\":{\"keccak256\":\"0xed4a8e77148328132d8f4f2726c4aeec6b490cf03a1d5940bde0ab8d72954de9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7b07802ca32bf10f68e51da872fb358807446dc2242314374d226493a6e9e7dc\",\"dweb:/ipfs/QmfSwWPLgitDy2a9S3mCNBDk6kAcK9n186Dtvj7qg84i12\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/ILayerZeroDVN.sol\":{\"keccak256\":\"0x308e77078242fd5c5746ec29c12e618249134f9e4377c0028ab8f59c07a6014b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2f92cf397a8d26864ac92dfcd1b98e92a32c47f556a62c5e6dc1618734c1caa3\",\"dweb:/ipfs/QmXN3XJXEKq5djV6HeM6jrLycmJPFhMhecsYZ2TaRsQmhg\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/ILayerZeroReadDVN.sol\":{\"keccak256\":\"0x759a3ee7614c2de54b152b0278845f91ac9760d8c22045b2fee89e3e744402b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7a2dbf6bcf5bfab408f18c104b34c390e8bfabb0eeb1a10e3a9c0fb14c8c61d5\",\"dweb:/ipfs/QmWxmRbDBkbhGmNsRyXqQXB1QaWRS4qvh6a8achh8DQPKR\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IReceiveUlnE2.sol\":{\"keccak256\":\"0xcdf7e690e5d5c0a3ec26a0d7b1a7fe49c7d16a3634721c3944f77d13ff5d4a91\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bd32a05dde1b83be1ce64fcfb9495d8b9bf0c5b3a5b521ac6c214e87e32f3cdc\",\"dweb:/ipfs/QmcDKTor8EQf3cbiWYmeFb9qzUM8JGPzGGN9qJnYjP1nN7\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/DVNOptions.sol\":{\"keccak256\":\"0x2beee03cdf59a9bc72e94d08b69cb2e908725f4ceabb48651494938100e21e35\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://d88e121a39e74309f3575417df2318e2d2ee8bc8314e68dbf78544a9c393b141\",\"dweb:/ipfs/QmRojBRAyENK21HnjevAWeoZZxtWkYZubB9Y78vCJPYeU6\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/ReadCmdCodecV1.sol\":{\"keccak256\":\"0x52fbab4a114ce9defb2ffd57c0a978eee438b2c232862f7e20475e0dcadd4eda\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://a4d5d4e186e3f2a916ea02c2d1d0761069ab1a5c0d6f74719bbf3501a7ccb899\",\"dweb:/ipfs/QmS2e12U9Fap2EK1CmSBTccL4PCKkHNdKJn2bXCqqKdbRn\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/SupportedCmdTypes.sol\":{\"keccak256\":\"0x6b2534522c163714e499041ecd06aaeb93857373cef82cf2752f162bb7c69f9a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bf6c3545c3b9505692dbfaa29b40cab5ed9dc9b65e5804b6f47b5a76596120e9\",\"dweb:/ipfs/QmNs98oRaMvpYhLCQ5yU256eYNEopFTrLRjjwm3gL4foQ3\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/UlnOptions.sol\":{\"keccak256\":\"0x5df07fef16b20767f7524c367d90f696c12e8ce0e4fde7aecc9d83fb2b6b0e27\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://0997203f57d736e56ebb3d736550f1c7ff7950c8df0574c7abe95e22f847b850\",\"dweb:/ipfs/QmZBjkH1vaPLyN3Jx9kGfVZKuTdfVWJfJVLSPok8SpjGbT\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/readlib/ReadLibBase.sol\":{\"keccak256\":\"0x7d312ba1e6288cb201b211f58b814eaaa0b5993721475fbc64321b0e7a2c74d3\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://dfc0dce9362eca0f03b51e0e808389c8bf51fda901e6ca58da169f165e4fc3c8\",\"dweb:/ipfs/QmSXAQ3veWf6gPXcgpX1XLZW9SyLQjBjCSdsFiQTttLNac\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/uln301/interfaces/IUltraLightNode301.sol\":{\"keccak256\":\"0x47f8ebeaa7d96a6f337a18c46e3c532da578c7cb0a13fb6e6f014286b991902f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d51f208b931be54e0ae1801c71c0756251d8c26f8d9b7911be1ad57b3d4a5691\",\"dweb:/ipfs/QmWqjst7jnYtSXQ9pakYHutDvENKLyqNg9nPfMxTH8p2Ed\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessageLibManager.sol\":{\"keccak256\":\"0x64330e51de72e8d38cfc0eb5527d36baada46df4bc14233d3a8ecaf98098d69a\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://49aa45e5a26fc62e7af569cf915be8344adc78dceb6871c4c14bc5d115e59241\",\"dweb:/ipfs/QmbTuW7kzPDYForDEPnaNQi6ZrmWqDxGVnHFiugnvTyq9K\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingChannel.sol\":{\"keccak256\":\"0x8ab8cb12c8beba699c1a7f22ffa812ac553f7038326d0c0d0af77253005cfe73\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://7c7cba4ae16d0ca46ee0a365a204f7257ceaa892224604bf7c8e65c44737e46c\",\"dweb:/ipfs/QmbQX5hJDKMwKdoo6QkdcusXQXH54SVCPe5hM1ycJZsg7y\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingComposer.sol\":{\"keccak256\":\"0x20d36578e810e75346daf064813b76a177087214cae77628b1f9d43798cb52d1\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://475b6f3f1ba5d981d0c5f90b9e892d4f9f539f3b12196639b95770b5be4dbf6a\",\"dweb:/ipfs/QmYyGrnR3vDt8Dqa2paQwTG9qrD6anAGFrDZmMra8KGC6s\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingContext.sol\":{\"keccak256\":\"0x9616f3bd0d7293c9723f2ddf86f9f7030fbd99213c9748557eec8f6d13b25420\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://205e713f5af46f52799e51774ac74dbeee4056de6ddba3c4d78a327536426c54\",\"dweb:/ipfs/QmZ2ZqDwxdjpJbh91qwMfRhhQu4AMEsjUcsTEsdRV4NAys\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroComposer.sol\":{\"keccak256\":\"0xfaca7205d4211ee9208a7e59171e2301731f3d2a20c49b4a839821871f5fdd49\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f254bc60ac26687b5320a43a556e30777b0745abf7cd64d5f4720d9b1d1f7fdf\",\"dweb:/ipfs/QmRSJEZVgxaC3L2DdE6s8P5qkYfM3V5JMeseeFJJqGR4xz\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\":{\"keccak256\":\"0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bacc29fd3866af71e59cb0bdc1cf82c882a4a7f4e2652fd413c9f12649762083\",\"dweb:/ipfs/QmZh2toLnrQDWaNYhS5K4NoW7Vxd2GdZx9KA77vKEDLAqs\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol\":{\"keccak256\":\"0x9641abba8d53b08bb517d1b74801dd15ea7b84d77a6719085bd96c8ea94e3ca0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://77415ae0820859e0faf3fabdce683cce9fa03ea026ae0f6fe081ef1c9205f933\",\"dweb:/ipfs/QmXd7APqoCunQ2jYy73AHvi5gsZofLpm3SzM6FPo7zRPfL\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol\":{\"keccak256\":\"0x5cf5f24751b4e3ea1c9c5ded07cedfdfd62566b6daaffcc0144733859c9dba0c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cae7e35007a714f007ea08045ef7c0cfa6c91fd2425b5028b2d49abad357a5f0\",\"dweb:/ipfs/QmcDBs5tsiyB35b8cwzWQWNnpkawb3uuHRaqE77Hxm2tve\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol\":{\"keccak256\":\"0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d8ff6a8a89297fa127f86b54e0db3eba1d6a6eeb4f6398d3c84d569665ac8f1b\",\"dweb:/ipfs/QmVSwhw6xFDrLRAX4RXaCM47yBaBtac4wf36DYEq6KCTvT\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol\":{\"keccak256\":\"0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7e1b245d58221d16d8b5e0f01ef3e289a24a7df1ace3b94239e4d5b954ad5927\",\"dweb:/ipfs/Qmappsgp7PCY9rSSNE9Cdn4BTRX591WfCSEgq2HxhA3z6S\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol\":{\"keccak256\":\"0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b18b23a1643fc6636c4ad9d9023e2e6ca2d3c2a4a046482d4655bff09950598d\",\"dweb:/ipfs/Qma6G5SqiovwrMPfgqTrRngK1HWW373Wkf9c6YP2NhXpPk\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol\":{\"keccak256\":\"0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5173fc9143bea314b159ca5a9adb5626659ef763bc598e27de5fa46efe3291a6\",\"dweb:/ipfs/QmSLFeMFPmVeGxT4sxRPW28ictjAS22M8rLeYRu9TXkA6D\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol\":{\"keccak256\":\"0xf1c07bc61e7b1dce195ed12d50f87980fbf2d63cac1326fd28287f55fe0ba625\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://060f10ff7afc33c1c2f2b4b5ba29231fd3c943146488084d0e4ab99fce991d97\",\"dweb:/ipfs/QmaSsefAqqEqtf8FgFUmDYMwTsAty3X1pqDb6SiFvry6B3\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol\":{\"keccak256\":\"0x2ebbcaaab3554edcd41b581f1a72ac1806afbfb8047d0d47ff098f9af30d6deb\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://2d4b2cf5c3b16dc76c6767f285b57c0af917972327b2be3f7cba5825402f5fc1\",\"dweb:/ipfs/QmQQWiHE2jKEDbjzGutSoZwtApSXYfLqZt5CxEpFj8xyvT\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/CalldataBytesLib.sol\":{\"keccak256\":\"0x5c0db161cef6603c3b256d4220f489419e7478ef775e52a80056654129c61875\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://a33245d0fdd3992bb56b31d1840108d36bb46c8d617b659ef1af8dd7ed86302d\",\"dweb:/ipfs/QmWyBqT7Tdrfn5zz9xYM3V1PBtfAZAVwwCrrKwwfi3wMQK\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Errors.sol\":{\"keccak256\":\"0x35bcd6ca99c4c8d9f7d8413d1b92fb4a4d4a420ce3bf64b0fb01e68e6bcf2fa7\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://0ac14f98563f9c610c936c93e71eff657efaba1e1d892be6a215aa5cb1f63a24\",\"dweb:/ipfs/QmVZZ8owwfDGLQTAzQJJqmYY4KsrChDagh5GBK7rChT5wb\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/GUID.sol\":{\"keccak256\":\"0x8a44524af7deb96593f6b5606e9973654a113e1687809f2e45d4a91ba89862d5\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://32dd0b5d1946e0cd5c7b728086aafac50a62c061115afb8b41254589c8a6732b\",\"dweb:/ipfs/QmR9QqtiAUPRLaRVv5wnth3NGPhdWB8rJmWYfz3o5Z1mWj\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Transfer.sol\":{\"keccak256\":\"0x621d6dd5b8b7e827351459fff4ac87c16ba4656757592cf67de8b199aea4cf9a\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://345aa8c007ed8b96a74260d289545713f1d7180df270d67687e3a540a61fa5c0\",\"dweb:/ipfs/QmNWCvpqSuar6UGLDVshUc7shUv3pt1J5FTf9VyZZ13wXL\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/BlockedMessageLib.sol\":{\"keccak256\":\"0xb2b55968b26294139742adee6c155897c8334f4c6bf72f1940456cc84e6fbab9\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://e758a1fdcea4039b19f1252e4e2958f4a0e05517eb3e151784431533446c225f\",\"dweb:/ipfs/QmRBG345abgyUeTnSpuxdK1WbK5pvwhSmvBEgW1mnoYqTq\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/BitMaps.sol\":{\"keccak256\":\"0xaad3c72ef43480d2253fd48b394e8fb7286d009991d2bc4e61be58ce48ac5ee9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b8c02b14f954416ba2148b389c87da8378ac8dd16ba3d458cbbfba8b0fd8639f\",\"dweb:/ipfs/Qmd2EEQhYL2VmgJi1V4uiHM2WcYxF9iBtxSgcFkbS21rQD\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/ExecutorOptions.sol\":{\"keccak256\":\"0x621c6090fc432f94a99f677a95d72b75f56db89ddc5fc870669777a313587c28\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://69086166f16d29e30c5eb9ca2f97afb27569afe619807d79736833a809a512d2\",\"dweb:/ipfs/QmcZqXjFuVdTrfbteKBF3GuEpjVFZ2YNZTa3J87dyLsqav\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol\":{\"keccak256\":\"0xc84cf1bf785977fe1fbe7566eef902c2db68d0e163813ebe6c34921754802680\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://de686666fc16fa432d4208d85cec87dc952faf3e481b683b9adf4b4610db4b09\",\"dweb:/ipfs/QmdmQeopzmxqRzi9DNB4EJDrYUXFfD7fUhnGhSni4QejUW\"]},\"node_modules/@layerzerolabs/lz-evm-v1-0.7/contracts/interfaces/ILayerZeroUltraLightNodeV2.sol\":{\"keccak256\":\"0xf1f36bbbc40d03b96affa151affb47da75a1b69dc79f4b311841a072d12fdd22\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://9f4f188c2998ecbda28a389ad8038da15c2260b1df6a8d135b3d96422e292fda\",\"dweb:/ipfs/QmeThR83tcaM4CmxQ2AamTafsgjcbGMfZtYcDHqw2CcwKa\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/OptionsHelper.sol\":{\"keccak256\":\"0x729ce2290d16a45a16ad936263803db6a6bebcfba5c063ebe0f0fd284ba828c0\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://7494875394fc968684761b22bb5fe05789f8d84ba07b2e0ab579ce0afe7aa973\",\"dweb:/ipfs/QmZNrexRXL3ef3UnES5e8JcdyMJ5HVftwGKQjGC5CwNg9Q\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/TestHelperOz5.sol\":{\"keccak256\":\"0xe60b21a345bb1c2e9ee2fb7301398d342da0acc3a730b442106a2ad9478f7a63\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://ee7e0a47ae666a16e33a51f946da4fe549e8f4c6ea1f1978850515172c44656f\",\"dweb:/ipfs/QmR2AZ9pYiwMCV4wPPVaGGPRJEjuBoFjJEesHtbAYhNoFq\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/DVNFeeLibMock.sol\":{\"keccak256\":\"0x4c2e212f73a1c2a2989af947eef715ebacb11a80d55e5fd18a89a905790971b1\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://30eb29a81414780828903f5320367e89020af5a4055b768e2be08d43605b1688\",\"dweb:/ipfs/QmeC5bVtmaY6tn6Z2XpVFXAkxVWQCQUzKbP2V9nPdv3vCr\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/DVNMock.sol\":{\"keccak256\":\"0xdafd7da964b6ac8637d543c30370739bb805f7e10b42043444689240b5c27b3f\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://154067632b4799f49c0b3a8c5304499f60b2c232ebd17c21912efdb72421bdab\",\"dweb:/ipfs/QmUEr6VsNt2odnrL3xFrLKwZTVLkLXi8BDzpPWeiCxC63T\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/EndpointV2AltMock.sol\":{\"keccak256\":\"0x026b2f530b336ee237f37dde6f617acefbbf74d933d2a80da4216882f78be1a9\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://097a9fdd5a321e6e8455a1db00f2abda6e810c31ce47d1bced9e574be262a28b\",\"dweb:/ipfs/Qme17zGk93k5BghCWFXqeqppVahH4dHuw7U76K4EcJxsY1\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/EndpointV2Mock.sol\":{\"keccak256\":\"0xe9096c53611537a121589b56b882fc4dd797d5cac60def708f794a15e3ca98ff\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://4092d5dd582b48a5f703e4361fc5fb66050b5fe3253891175275dc832bc8e045\",\"dweb:/ipfs/QmXSTJJNx4rn2ByCaE6vxiHnkm366ZU7dScYH1JsUbVZ1V\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ExecutorFeeLibMock.sol\":{\"keccak256\":\"0x4a47aaf41049710d5f05fcc66885cacc0dabc1864778b56ac75a59b61eef5a01\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://c9b8c26b38cb138c3225efbab8b1d2e0f43343798658a0f2ed9669c16e5a97ff\",\"dweb:/ipfs/QmV21G7Qwoi9gXYT8bKXDwnQDvjdZCAo2M9MqTKq4nQU9U\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ExecutorMock.sol\":{\"keccak256\":\"0xbcdc4500270cd5496f10760ffe9e0444d23e454dd0ae2555e0661acf22fce96f\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://b816999bcfef5586b5e80bba21584b821fd7f7b32c276492adee530ffa83bb73\",\"dweb:/ipfs/QmXLV8ieYdrTBERajBCVuMzknFyPHJjnw7MGkzULAdjdt8\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/MultiSigMock.sol\":{\"keccak256\":\"0xc7c90e073e52af1da6c07e3d3f7477b064a89e78935c16e9872457df503c6830\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://cef1ae2d517e152616aea7f8f5c15fa1fbabbec8896a9c30a9eed35fb56b4f2f\",\"dweb:/ipfs/QmeitPMQht2WfbR9ZLzwKWgThamdsJkobeaWo6ojTCoQG5\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/PriceFeedMock.sol\":{\"keccak256\":\"0xd8f419b25c648287b5b7f0923b069b2449c51e807c9153df39445f2f83e55f44\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://bb300a5bb62655073c7aa9cd2221e60e59ce904a0d73f7f5e06af7c9df3445ec\",\"dweb:/ipfs/QmcYb2qFevymfkWhTqGaNH5HwK9MMUixzAKJJAdNQHSCbw\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ReadLib1002Mock.sol\":{\"keccak256\":\"0x1403b7a91b185fd8211f00fa380a0b8918e92e663c403a1dafa30f1667091fdc\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://7494444260a981ae9a9e11cd8981fad35a6b45a9c09cf72c05aad88ee191e7f0\",\"dweb:/ipfs/QmaTyujm37PsCobQ36ootD5xVgKyBYqeUTdTJij9x3oaN6\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ReceiveUln302Mock.sol\":{\"keccak256\":\"0x8e60b01e9bc801167b374dc119b41832d546afd43c143a0cd15ab1941198e121\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://bb1512762417dda9cd81fd9b41f590fd05888358fda1c2ab7e79e0cfabf61ec4\",\"dweb:/ipfs/QmPAgBwdjLz29vE5L1Jth1Wvx6TTM1ig97amVtAyDFF61Q\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/SendUln302Mock.sol\":{\"keccak256\":\"0x0c5cb54ec6b18e77aa653f7d774ac9d010684dafc96794d1d02f12b6885cc348\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://24c5a8ba8d92c16ec3047229167528f57b38cbd64882140014126ca51ab14574\",\"dweb:/ipfs/QmXQsMDtZ3qNmjnr2LYgctBpPKxffuC6EeWHvFUtLBS5st\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/SimpleMessageLibMock.sol\":{\"keccak256\":\"0xe6c93840c612592686732dd516550816eb77d6cde92514220eacb72443dcb9b9\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://a6a00fb60b7ac66e746f0471c2262fc98febafeb8acad8785d38ce1ddc4cc991\",\"dweb:/ipfs/QmboboJskbXBbsyAGGRbW4JQCPJo9WiLFy7nwQxGVS9UhZ\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/WorkerMock.sol\":{\"keccak256\":\"0x6c5bc31c117033dd35fa7ab3b13b1647a4b449c5f5b4cbff41bce8a63529ab97\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://01aa1d3f3b8e2fd4b544312d96916b16b97e01ab740e2bae1137723b2f1a31b1\",\"dweb:/ipfs/QmVMemJ4MSgi6y9NxDdSeB6QbJRtCWojJNxzs3CRLT56EA\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/test.sol\":{\"keccak256\":\"0x8758531bbac3972efcf1fa46383dbe1d276406fe527bc7abb2f236486278e83b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://1f64264d61506847acf8761e84aff690cebe830958eac00bac7924d8be569240\",\"dweb:/ipfs/QmSekDJvJ82MZAmr63n7YvfLzQ7gS4NLSHPmHL3GN3rw8k\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Base.sol\":{\"keccak256\":\"0x4ff1a785311017d1eedb1b4737956fa383067ad34eb439abfec1d989754dde1c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f553622969b9fdb930246704a4c10dfaee6b1a4468c142fa7eb9dc292a438224\",\"dweb:/ipfs/QmcxqHnqdQsMVtgsfH9VNLmZ3g7GhgNagfq7yvNCDcCHFK\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdAssertions.sol\":{\"keccak256\":\"0x1a0dee4d8b2c81e9318e87dd85ef009467ebf7dba6575530d1fce94d34dbae60\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ddd790c86ddde1013d1f7a552a80168eacf2e9244077f96799180644ad523a5b\",\"dweb:/ipfs/QmYinBFt9uEVFXP9ytT9CDoNpzWieQVgLWRFRNiypMzJaL\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdChains.sol\":{\"keccak256\":\"0x598b85609125830885b8fb54a18f447d04f8dd799aca3de81baef35eb6b783c0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c9c128aae4f5668d8c8f71e9e6d9379d8451b8713d139cb66a02d23bc1c75f69\",\"dweb:/ipfs/QmVRihXHWi2yg9CcAhzKf63Y7m6gWz4P1giGMhXUHT3DFu\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdCheats.sol\":{\"keccak256\":\"0xb72f3519e0bf7d31df5d68557525f4fc55d861c3fb3b0f7793144ef7c94cbeb7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f3456d0f78e6f61203fa7871ba2df0d35925f10db3baee14be623ce2a35b84e2\",\"dweb:/ipfs/QmWE6QQSBvJifHMraisBTrf1x4WCwrDoTPLX8UKajTiApc\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdError.sol\":{\"keccak256\":\"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6\",\"dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdInvariant.sol\":{\"keccak256\":\"0x67299bfacd77fddfa2a67b8e2b901e0e333618a4975fb94850b07475e51f6de6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1b61121d310f4053ce344b345b4a9ccf43b059daf9097ec2647f594beaca896d\",\"dweb:/ipfs/QmZUCoTtXBM9zfAZVbj2dFPPnKaV1CSZzXE7zictyg3Gfz\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdJson.sol\":{\"keccak256\":\"0x8f914dbd016bd0e318fe2b8bd556fbc8256c7cddc24e3e4fcb9f3c1c1935592d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://19e704df493dde38323303b07d18cadfeb4dcadf1ddc2301add4aea9474fbb5e\",\"dweb:/ipfs/QmZasuGiLK8LHwWtvpqEBxUR6QFY6GdzLMTJ9q7CMf8PNZ\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdMath.sol\":{\"keccak256\":\"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92\",\"dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdStorage.sol\":{\"keccak256\":\"0x4298f3f4cedaedb07029820b1daad2c03af45379559392201f7bf3ec71105811\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6e062f36d8d1ae3c383ef8975757926eaa9c4de3a92b5f1fe2d12748bcd8db32\",\"dweb:/ipfs/QmcWkv3ia5Ew4DZNcudMNSTNXZ3W2QiXTZunRd44e9BT8z\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdStyle.sol\":{\"keccak256\":\"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8\",\"dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdUtils.sol\":{\"keccak256\":\"0x502b18a4becda6ecd91fa8b419d8034946bfa80e6cc7f6497f51f8565bfadae0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bf499ee483a1dfd02023d4ce78ed4029a49794ccd5b849aaab912faea0d2ba61\",\"dweb:/ipfs/QmP6hwNZW7sYbQK9fBzuZWxfLm6Swx2nKzvZ54qWNqQkzX\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Test.sol\":{\"keccak256\":\"0x39b1729d5868c8e94ab8af16751eb500a17fe3870dc627d2b7ddcd5df18d7ad0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1568c82aff125cc4b0fc168be9d67ac313f469a3c7405c5493caecaaaecfb765\",\"dweb:/ipfs/QmXByuZReJsdu1jDcxj1FcmpcUnzoBcqybn9kWgDAECWri\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Vm.sol\":{\"keccak256\":\"0x87ba9f3edc254e529db9e3129c954391adcc7fc8574203767979d8d2f1e724b9\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://4d16c08d80d9f2869deb6350642cf5af624d21fce6b3b023abbcdedc62e195fe\",\"dweb:/ipfs/QmURpnnFECPKt3i7P7jQRZpr4ZBXjRGcZ9KzcbKzsgYR2W\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/console.sol\":{\"keccak256\":\"0x91d5413c2434ca58fd278b6e1e79fd98d10c83931cc2596a6038eee4daeb34ba\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://91ccea707361e48b9b7a161fe81f496b9932bc471e9c4e4e1e9c283f2453cc70\",\"dweb:/ipfs/QmcB66sZhQ6Kz7MUHcLE78YXRUZxoZnnxZjN6yATsbB2ec\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/console2.sol\":{\"keccak256\":\"0x954646445d1014c3cd85c7918f5e7adeeca5ee44b68c00bafa237e597a4e35ea\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://516fa3be52da4763147175bfba4be0aa011fadbb0c1afb01f97265bd4cee7973\",\"dweb:/ipfs/QmdixAyMJefx7qePChgdxcBH5MxhmN7vsqPuPLx3CgrVmF\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/interfaces/IMulticall3.sol\":{\"keccak256\":\"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0\",\"dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/mocks/MockERC20.sol\":{\"keccak256\":\"0xd8703f49411737ecf8d411f8fa66b2bf0ef972ba28b7a4adf1748c63df1bf682\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7c10a6b8112f6fe3cdccb6240ecd382765216b1a82e9a86a0fec8f5e09eadd1\",\"dweb:/ipfs/QmdRvPCU4RkjMHsTu3Ric1ZEF1AWDNLp78unFC5aWP17xq\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/mocks/MockERC721.sol\":{\"keccak256\":\"0xa24468244abb66e663fb7eee6463cb518eb9a7c14e1071548ff564cca825bbca\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://145585a2194aa6e2d30edfe709ef2814e20b1b4540469aa6a8f50c841fcb9070\",\"dweb:/ipfs/QmZrwbvtpbtTxqbW5phUrwb3F1tBiPSQc6jZJAXBfsBsAh\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/safeconsole.sol\":{\"keccak256\":\"0xbaf41fdc6c54297e7cd8250e48b0f20eaac918e342a1028cef3f9a52ac086381\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a500ad81dea226f9910e6b50f99a9ff930105e393a692cbfb2185e4cdb4424ae\",\"dweb:/ipfs/QmVbUQpXNMmMWRiy4FvBNczzq46BMGfUoBikvSHNiCxVTq\"]},\"node_modules/@openzeppelin/contracts/access/AccessControl.sol\":{\"keccak256\":\"0xa0e92d42942f4f57c5be50568dac11e9d00c93efcb458026e18d2d9b9b2e7308\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://46326c0bb1e296b67185e81c918e0b40501b8b6386165855df0a3f3c634b6a80\",\"dweb:/ipfs/QmTwyrDYtsxsk6pymJTK94PnEpzsmkpUxFuzEiakDopy4Z\"]},\"node_modules/@openzeppelin/contracts/access/IAccessControl.sol\":{\"keccak256\":\"0xc1c2a7f1563b77050dc6d507db9f4ada5d042c1f6a9ddbffdc49c77cdc0a1606\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fd54abb96a6156d9a761f6fdad1d3004bc48d2d4fce47f40a3f91a7ae83fc3a1\",\"dweb:/ipfs/QmUrFSGkTDJ7WaZ6qPVVe3Gn5uN2viPb7x7QQ35UX4DofX\"]},\"node_modules/@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol\":{\"keccak256\":\"0x9b6b3e7803bc5f2f8cd7ad57db8ac1def61a9930a5a3107df4882e028a9605d7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://da62d6be1f5c6edf577f0cb45666a8aa9c2086a4bac87d95d65f02e2f4c36a4b\",\"dweb:/ipfs/QmNkpvBpoCMvX8JwAFNSc5XxJ2q5BXJpL5L1txb4QkqVFF\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC165.sol\":{\"keccak256\":\"0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://11fea9f8bc98949ac6709f0c1699db7430d2948137aa94d5a9e95a91f61a710a\",\"dweb:/ipfs/QmQdfRXxQjwP6yn3DVo1GHPpriKNcFghSPi94Z1oKEFUNS\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC20.sol\":{\"keccak256\":\"0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a2608291cb038b388d80b79a06b6118a42f7894ff67b7da10ec0dbbf5b2973ba\",\"dweb:/ipfs/QmWohqcBLbcxmA4eGPhZDXe5RYMMEEpFq22nfkaUMvTfw1\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db\",\"dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0xca2ae13e0610f6a99238dd00b97bd786bc92732dae6d6b9d61f573ec51018310\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://75f8c71ce0c91c40dd5f249ace0b7d8270f8f1767231bcf71490f7157d6ba862\",\"dweb:/ipfs/QmYXgxeDyFHvz3JsXxLEYN6GNUR44ThHeFj5XkpkgMoG4w\"]},\"node_modules/@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0x9d8da059267bac779a2dbbb9a26c2acf00ca83085e105d62d5d4ef96054a47f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c78e2aa4313323cecd1ef12a8d6265b96beee1a199923abf55d9a2a9e291ad23\",\"dweb:/ipfs/QmUTs2KStXucZezzFo3EYeqYu47utu56qrF7jj1Gue65vb\"]},\"node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"node_modules/@openzeppelin/contracts/utils/Errors.sol\":{\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf\",\"dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB\"]},\"node_modules/@openzeppelin/contracts/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]},\"node_modules/@openzeppelin/contracts/utils/Pausable.sol\":{\"keccak256\":\"0xb2e5f50762c27fb4b123e3619c3c02bdcba5e515309382e5bfb6f7d6486510bd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1a4b83328c98d518a2699c2cbe9e9b055e78aa57fa8639f1b88deb8b3750b5dc\",\"dweb:/ipfs/QmXdcYj5v7zQxXFPULShHkR5p4Wa2zYuupbHnFdV3cHYtc\"]},\"node_modules/@openzeppelin/contracts/utils/ReentrancyGuard.sol\":{\"keccak256\":\"0x11a5a79827df29e915a12740caf62fe21ebe27c08c9ae3e09abe9ee3ba3866d3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3cf0c69ab827e3251db9ee6a50647d62c90ba580a4d7bbff21f2bea39e7b2f4a\",\"dweb:/ipfs/QmZiKwtKU1SBX4RGfQtY7PZfiapbbu6SZ9vizGQD9UHjRA\"]},\"node_modules/@openzeppelin/contracts/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0x69f54c02b7d81d505910ec198c11ed4c6a728418a868b906b4a0cf29946fda84\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8e25e4bdb7ae1f21d23bfee996e22736fc0ab44cfabedac82a757b1edc5623b9\",\"dweb:/ipfs/QmQdWQvB6JCP9ZMbzi8EvQ1PTETqkcTWrbcVurS7DKpa5n\"]},\"node_modules/@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0xddce8e17e3d3f9ed818b4f4c4478a8262aab8b11ed322f1bf5ed705bb4bd97fa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8084aa71a4cc7d2980972412a88fe4f114869faea3fefa5436431644eb5c0287\",\"dweb:/ipfs/Qmbqfs5dRdPvHVKY8kTaeyc65NdqXRQwRK7h9s5UJEhD1p\"]},\"node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]},\"node_modules/@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]},\"node_modules/@openzeppelin/contracts/utils/structs/DoubleEndedQueue.sol\":{\"keccak256\":\"0x1e1d74658d7f4eab3d4f8fb0c6c5953bc5f629d9425e978d557dabff7b58b217\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://be0175d00008d452d3d553890f73a3d5d51dff4372f720336c8b98f26822fcdb\",\"dweb:/ipfs/QmUkE8g5xPExWoSAKwdi5ww1qJJVtEWtjSF93G2LMQkgD3\"]},\"node_modules/solidity-bytes-utils/contracts/BytesLib.sol\":{\"keccak256\":\"0xa5b10f04797d5a10a9ba07855108b6bd695940e6a3d128927b2f74a0d359868a\",\"license\":\"Unlicense\",\"urls\":[\"bzz-raw://a38d7680aacbb18dae659876b396b73bcc8f759672213f8a0efc4129e2648535\",\"dweb:/ipfs/QmfKFnwpTEGAnbRnZxMuv3mRCG9S9WMjFhFL23bftBT2Jq\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { - "inputs": [ - { - "internalType": "address payable", - "name": "_verifyHelper", - "type": "address" - }, - { - "internalType": "address", - "name": "_endpoint", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_treasuryGasLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_treasuryGasForFeeCap", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { "inputs": [], "type": "error", "name": "DVN_InvalidDVNIdx" }, - { - "inputs": [ - { "internalType": "uint256", "name": "cursor", "type": "uint256" } - ], - "type": "error", - "name": "DVN_InvalidDVNOptions" - }, - { "inputs": [], "type": "error", "name": "LZ_MessageLib_OnlyEndpoint" }, - { "inputs": [], "type": "error", "name": "LZ_RL_AtLeastOneDVN" }, - { - "inputs": [], - "type": "error", - "name": "LZ_RL_CannotWithdrawAltToken" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "requested", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "available", - "type": "uint256" - } - ], - "type": "error", - "name": "LZ_RL_InvalidAmount" - }, - { "inputs": [], "type": "error", "name": "LZ_RL_InvalidCmdHash" }, - { - "inputs": [ - { "internalType": "uint32", "name": "configType", "type": "uint32" } - ], - "type": "error", - "name": "LZ_RL_InvalidConfigType" - }, - { "inputs": [], "type": "error", "name": "LZ_RL_InvalidEid" }, - { "inputs": [], "type": "error", "name": "LZ_RL_InvalidExecutor" }, - { - "inputs": [], - "type": "error", - "name": "LZ_RL_InvalidOptionalDVNCount" - }, - { - "inputs": [], - "type": "error", - "name": "LZ_RL_InvalidOptionalDVNThreshold" - }, - { "inputs": [], "type": "error", "name": "LZ_RL_InvalidPacketHeader" }, - { "inputs": [], "type": "error", "name": "LZ_RL_InvalidPacketVersion" }, - { "inputs": [], "type": "error", "name": "LZ_RL_InvalidReceiver" }, - { - "inputs": [], - "type": "error", - "name": "LZ_RL_InvalidRequiredDVNCount" - }, - { "inputs": [], "type": "error", "name": "LZ_RL_NotTreasury" }, - { "inputs": [], "type": "error", "name": "LZ_RL_Unsorted" }, - { - "inputs": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" } - ], - "type": "error", - "name": "LZ_RL_UnsupportedEid" - }, - { "inputs": [], "type": "error", "name": "LZ_RL_Verifying" }, - { - "inputs": [], - "type": "error", - "name": "LZ_ULN_InvalidLegacyType1Option" - }, - { - "inputs": [], - "type": "error", - "name": "LZ_ULN_InvalidLegacyType2Option" - }, - { - "inputs": [ - { "internalType": "uint8", "name": "workerId", "type": "uint8" } - ], - "type": "error", - "name": "LZ_ULN_InvalidWorkerId" - }, - { - "inputs": [ - { "internalType": "uint256", "name": "cursor", "type": "uint256" } - ], - "type": "error", - "name": "LZ_ULN_InvalidWorkerOptions" - }, - { - "inputs": [ - { "internalType": "uint16", "name": "optionType", "type": "uint16" } - ], - "type": "error", - "name": "LZ_ULN_UnsupportedOptionType" - }, - { - "inputs": [ - { "internalType": "address", "name": "owner", "type": "address" } - ], - "type": "error", - "name": "OwnableInvalidOwner" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "type": "error", - "name": "OwnableUnauthorizedAccount" - }, - { - "inputs": [ - { "internalType": "uint8", "name": "bits", "type": "uint8" }, - { "internalType": "uint256", "name": "value", "type": "uint256" } - ], - "type": "error", - "name": "SafeCastOverflowedUintDowncast" - }, - { - "inputs": [ - { "internalType": "address", "name": "token", "type": "address" } - ], - "type": "error", - "name": "SafeERC20FailedOperation" - }, - { - "inputs": [ - { "internalType": "address", "name": "_to", "type": "address" }, - { "internalType": "uint256", "name": "_value", "type": "uint256" } - ], - "type": "error", - "name": "Transfer_NativeFailed" - }, - { "inputs": [], "type": "error", "name": "Transfer_ToAddressIsZero" }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "requiredDVNs", - "type": "address[]", - "indexed": false - }, - { - "internalType": "address[]", - "name": "optionalDVNs", - "type": "address[]", - "indexed": false - }, - { - "internalType": "uint256[]", - "name": "fees", - "type": "uint256[]", - "indexed": false - } - ], - "type": "event", - "name": "DVNFeePaid", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "struct SetDefaultReadLibConfigParam[]", - "name": "params", - "type": "tuple[]", - "components": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" }, - { - "internalType": "struct ReadLibConfig", - "name": "config", - "type": "tuple", - "components": [ - { - "internalType": "address", - "name": "executor", - "type": "address" - }, - { - "internalType": "uint8", - "name": "requiredDVNCount", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "optionalDVNCount", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "optionalDVNThreshold", - "type": "uint8" - }, - { - "internalType": "address[]", - "name": "requiredDVNs", - "type": "address[]" - }, - { - "internalType": "address[]", - "name": "optionalDVNs", - "type": "address[]" - } - ] - } - ], - "indexed": false - } - ], - "type": "event", - "name": "DefaultReadLibConfigsSet", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "executor", - "type": "address", - "indexed": false - }, - { - "internalType": "uint256", - "name": "fee", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "ExecutorFeePaid", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "lzToken", - "type": "address", - "indexed": false - }, - { - "internalType": "address", - "name": "receiver", - "type": "address", - "indexed": false - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "LzTokenFeeWithdrawn", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "worker", - "type": "address", - "indexed": false - }, - { - "internalType": "address", - "name": "receiver", - "type": "address", - "indexed": false - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "NativeFeeWithdrawn", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "previousOwner", - "type": "address", - "indexed": true - }, - { - "internalType": "address", - "name": "newOwner", - "type": "address", - "indexed": true - } - ], - "type": "event", - "name": "OwnershipTransferred", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "dvn", - "type": "address", - "indexed": false - }, - { - "internalType": "bytes", - "name": "header", - "type": "bytes", - "indexed": false - }, - { - "internalType": "bytes32", - "name": "cmdHash", - "type": "bytes32", - "indexed": false - }, - { - "internalType": "bytes32", - "name": "payloadHash", - "type": "bytes32", - "indexed": false - } - ], - "type": "event", - "name": "PayloadVerified", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "oapp", - "type": "address", - "indexed": false - }, - { - "internalType": "uint32", - "name": "eid", - "type": "uint32", - "indexed": false - }, - { - "internalType": "struct ReadLibConfig", - "name": "config", - "type": "tuple", - "components": [ - { - "internalType": "address", - "name": "executor", - "type": "address" - }, - { - "internalType": "uint8", - "name": "requiredDVNCount", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "optionalDVNCount", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "optionalDVNThreshold", - "type": "uint8" - }, - { - "internalType": "address[]", - "name": "requiredDVNs", - "type": "address[]" - }, - { - "internalType": "address[]", - "name": "optionalDVNs", - "type": "address[]" - } - ], - "indexed": false - } - ], - "type": "event", - "name": "ReadLibConfigSet", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "newTreasuryNativeFeeCap", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "TreasuryNativeFeeCapSet", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "treasury", - "type": "address", - "indexed": false - } - ], - "type": "event", - "name": "TreasurySet", - "anonymous": false - }, - { - "inputs": [ - { "internalType": "address", "name": "oapp", "type": "address" }, - { "internalType": "uint32", "name": "eid", "type": "uint32" }, - { "internalType": "uint64", "name": "nonce", "type": "uint64" } - ], - "stateMutability": "view", - "type": "function", - "name": "cmdHashLookup", - "outputs": [ - { "internalType": "bytes32", "name": "cmdHash", "type": "bytes32" } - ] - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_packetHeader", - "type": "bytes" - }, - { - "internalType": "bytes32", - "name": "_cmdHash", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "_payloadHash", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "commitVerification" - }, - { - "inputs": [ - { "internalType": "address", "name": "worker", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "fees", - "outputs": [ - { "internalType": "uint256", "name": "fee", "type": "uint256" } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "_oapp", "type": "address" }, - { "internalType": "uint32", "name": "_remoteEid", "type": "uint32" } - ], - "stateMutability": "view", - "type": "function", - "name": "getAppReadLibConfig", - "outputs": [ - { - "internalType": "struct ReadLibConfig", - "name": "", - "type": "tuple", - "components": [ - { - "internalType": "address", - "name": "executor", - "type": "address" - }, - { - "internalType": "uint8", - "name": "requiredDVNCount", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "optionalDVNCount", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "optionalDVNThreshold", - "type": "uint8" - }, - { - "internalType": "address[]", - "name": "requiredDVNs", - "type": "address[]" - }, - { - "internalType": "address[]", - "name": "optionalDVNs", - "type": "address[]" - } - ] - } - ] - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { "internalType": "address", "name": "_oapp", "type": "address" }, - { - "internalType": "uint32", - "name": "_configType", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function", - "name": "getConfig", - "outputs": [{ "internalType": "bytes", "name": "", "type": "bytes" }] - }, - { - "inputs": [ - { "internalType": "address", "name": "_oapp", "type": "address" }, - { "internalType": "uint32", "name": "_remoteEid", "type": "uint32" } - ], - "stateMutability": "view", - "type": "function", - "name": "getReadLibConfig", - "outputs": [ - { - "internalType": "struct ReadLibConfig", - "name": "rtnConfig", - "type": "tuple", - "components": [ - { - "internalType": "address", - "name": "executor", - "type": "address" - }, - { - "internalType": "uint8", - "name": "requiredDVNCount", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "optionalDVNCount", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "optionalDVNThreshold", - "type": "uint8" - }, - { - "internalType": "address[]", - "name": "requiredDVNs", - "type": "address[]" - }, - { - "internalType": "address[]", - "name": "optionalDVNs", - "type": "address[]" - } - ] - } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "getTreasuryAndNativeFeeCap", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" }, - { "internalType": "uint256", "name": "", "type": "uint256" } - ] - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "headerHash", - "type": "bytes32" - }, - { "internalType": "bytes32", "name": "cmdHash", "type": "bytes32" }, - { "internalType": "address", "name": "dvn", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "hashLookup", - "outputs": [ - { - "internalType": "bytes32", - "name": "payloadHash", - "type": "bytes32" - } - ] - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" } - ], - "stateMutability": "view", - "type": "function", - "name": "isSupportedEid", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [], - "stateMutability": "pure", - "type": "function", - "name": "messageLibType", - "outputs": [ - { - "internalType": "enum MessageLibType", - "name": "", - "type": "uint8" - } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "owner", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ] - }, - { - "inputs": [ - { - "internalType": "struct Packet", - "name": "_packet", - "type": "tuple", - "components": [ - { "internalType": "uint64", "name": "nonce", "type": "uint64" }, - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "receiver", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "guid", - "type": "bytes32" - }, - { "internalType": "bytes", "name": "message", "type": "bytes" } - ] - }, - { "internalType": "bytes", "name": "_options", "type": "bytes" }, - { "internalType": "bool", "name": "_payInLzToken", "type": "bool" } - ], - "stateMutability": "view", - "type": "function", - "name": "quote", - "outputs": [ - { - "internalType": "struct MessagingFee", - "name": "", - "type": "tuple", - "components": [ - { - "internalType": "uint256", - "name": "nativeFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "lzTokenFee", - "type": "uint256" - } - ] - } - ] - }, - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "function", - "name": "renounceOwnership" - }, - { - "inputs": [ - { - "internalType": "struct Packet", - "name": "_packet", - "type": "tuple", - "components": [ - { "internalType": "uint64", "name": "nonce", "type": "uint64" }, - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "receiver", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "guid", - "type": "bytes32" - }, - { "internalType": "bytes", "name": "message", "type": "bytes" } - ] - }, - { "internalType": "bytes", "name": "_options", "type": "bytes" }, - { "internalType": "bool", "name": "_payInLzToken", "type": "bool" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "send", - "outputs": [ - { - "internalType": "struct MessagingFee", - "name": "", - "type": "tuple", - "components": [ - { - "internalType": "uint256", - "name": "nativeFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "lzTokenFee", - "type": "uint256" - } - ] - }, - { "internalType": "bytes", "name": "", "type": "bytes" } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "_oapp", "type": "address" }, - { - "internalType": "struct SetConfigParam[]", - "name": "_params", - "type": "tuple[]", - "components": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" }, - { - "internalType": "uint32", - "name": "configType", - "type": "uint32" - }, - { "internalType": "bytes", "name": "config", "type": "bytes" } - ] - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setConfig" - }, - { - "inputs": [ - { - "internalType": "struct SetDefaultReadLibConfigParam[]", - "name": "_params", - "type": "tuple[]", - "components": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" }, - { - "internalType": "struct ReadLibConfig", - "name": "config", - "type": "tuple", - "components": [ - { - "internalType": "address", - "name": "executor", - "type": "address" - }, - { - "internalType": "uint8", - "name": "requiredDVNCount", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "optionalDVNCount", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "optionalDVNThreshold", - "type": "uint8" - }, - { - "internalType": "address[]", - "name": "requiredDVNs", - "type": "address[]" - }, - { - "internalType": "address[]", - "name": "optionalDVNs", - "type": "address[]" - } - ] - } - ] - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setDefaultReadLibConfigs" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_treasury", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setTreasury" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_newTreasuryNativeFeeCap", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setTreasuryNativeFeeCap" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "_interfaceId", - "type": "bytes4" - } - ], - "stateMutability": "view", - "type": "function", - "name": "supportsInterface", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "testHelper", - "outputs": [ - { - "internalType": "contract TestHelperOz5", - "name": "", - "type": "address" - } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "newOwner", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "transferOwnership" - }, - { - "inputs": [ - { - "internalType": "struct ReadLibConfig", - "name": "_config", - "type": "tuple", - "components": [ - { - "internalType": "address", - "name": "executor", - "type": "address" - }, - { - "internalType": "uint8", - "name": "requiredDVNCount", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "optionalDVNCount", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "optionalDVNThreshold", - "type": "uint8" - }, - { - "internalType": "address[]", - "name": "requiredDVNs", - "type": "address[]" - }, - { - "internalType": "address[]", - "name": "optionalDVNs", - "type": "address[]" - } - ] - }, - { - "internalType": "bytes32", - "name": "_headerHash", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "_cmdHash", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "_payloadHash", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function", - "name": "verifiable", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_packetHeader", - "type": "bytes" - }, - { - "internalType": "bytes32", - "name": "_cmdHash", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "_payloadHash", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "verify" - }, - { - "inputs": [], - "stateMutability": "pure", - "type": "function", - "name": "version", - "outputs": [ - { "internalType": "uint64", "name": "major", "type": "uint64" }, - { "internalType": "uint8", "name": "minor", "type": "uint8" }, - { - "internalType": "uint8", - "name": "endpointVersion", - "type": "uint8" - } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "_to", "type": "address" }, - { "internalType": "uint256", "name": "_amount", "type": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "withdrawFee" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_lzToken", - "type": "address" - }, - { "internalType": "address", "name": "_to", "type": "address" }, - { "internalType": "uint256", "name": "_amount", "type": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "withdrawLzTokenFee" - }, - { "inputs": [], "stateMutability": "payable", "type": "receive" } - ], - "devdoc": { - "kind": "dev", - "methods": { - "commitVerification(bytes,bytes32,bytes32)": { - "details": "The verification will be done in the same chain where the packet is sent.dont need to check endpoint verifiable here to save gas, as it will reverts if not verifiable.", - "params": { - "_packetHeader": "- the srcEid should be the localEid and the dstEid should be the channel id. The original packet header in PacketSent event should be processed to flip the srcEid and dstEid." - } - }, - "getAppReadLibConfig(address,uint32)": { - "details": "Get the readLib config without the default config for the given remoteEid." - }, - "owner()": { "details": "Returns the address of the current owner." }, - "renounceOwnership()": { - "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner." - }, - "setDefaultReadLibConfigs((uint32,(address,uint8,uint8,uint8,address[],address[]))[])": { - "details": "about the DEFAULT ReadLib config 1) its values are all LITERAL (e.g. 0 is 0). whereas in the oapp ReadLib config, 0 (default value) points to the default ReadLib config this design enables the oapp to point to DEFAULT config without explicitly setting the config 2) its configuration is more restrictive than the oapp ReadLib config that a) it must not use NIL value, where NIL is used only by oapps to indicate the LITERAL 0 b) it must have at least one DVN and executor" - }, - "setTreasuryNativeFeeCap(uint256)": { - "details": "the new value can not be greater than the old value, i.e. down only" - }, - "transferOwnership(address)": { - "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." - }, - "verify(bytes,bytes32,bytes32)": { - "details": "DVN verifies the payload with the packet header and command hash", - "params": { - "_packetHeader": "- the packet header is needed for event only, which can be conveniently for off-chain to track the packet state." - } - }, - "withdrawLzTokenFee(address,address,uint256)": { - "details": "_lzToken is a user-supplied value because lzToken might change in the endpoint before all lzToken can be taken out" - } - }, - "version": 1 - }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ReadLib1002Mock.sol": "ReadLib1002Mock" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/MessageLibBase.sol": { - "keccak256": "0x14899a4398251439938d6ef8a15ea8c6acdddc98a7b0066d7e63676192dea0d1", - "urls": [ - "bzz-raw://3998d03de7025c2c601a4fdcaf9475d12a1ef661fcf1a685ece84fdde6498cf9", - "dweb:/ipfs/QmReknRbiGAiPqq9toKyXKo6hUKXrQPJyyS6LnTGjiDKoY" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/ReceiveLibBaseE2.sol": { - "keccak256": "0x2fdbd1b13751a264cd6e7fac518a2685b15c968806c03f1d18b177fc0526e9a9", - "urls": [ - "bzz-raw://600af48bb67939b5f4a3a00c76863ee290a55325ea8697f7cc4b46321ab26ef2", - "dweb:/ipfs/QmdRigYaB6TXczjtVkvwpUEBwvvvDuymFoViMCB6xQPYUU" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/SendLibBase.sol": { - "keccak256": "0x400eaa11c7d50b4c25b7625290ff00937b6875ad3986b353c37a4e62b5a834b1", - "urls": [ - "bzz-raw://1f51eb0785d3630815a9d63de1c1331fe966df4c3f2fb6750b8da7be9e9743a4", - "dweb:/ipfs/QmaAEf1kjhhff3AUhRiPm6ikpk2YMMrpKc2ccYzNs7waBy" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/SendLibBaseE2.sol": { - "keccak256": "0x90ada11d0a330732c56b989e59c8272b70f956a5d7be2cf209d6d51a51d35a9e", - "urls": [ - "bzz-raw://0abc7a6d07ec40a3a922256ad05bdd6eca10550d85bfd2e67147473617bb0497", - "dweb:/ipfs/QmRDphmFhx1scRJXcusg6pUhVQvp941oCJwnHGAPdrNY4T" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IExecutor.sol": { - "keccak256": "0x2fd26e454b060ede7afa15f8bbc67bd43f9181b6405ca411d36c8b538be016af", - "urls": [ - "bzz-raw://cf2142e83214bb392f69ed14266718cfd803f849a7239ee9a1950ddf66553696", - "dweb:/ipfs/QmSZ2mPMZqWBetMU8VESKtxy7UdSThUVmJmTFMHEyKLTGZ" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IExecutorFeeLib.sol": { - "keccak256": "0x801d12eca6d6b232fb91d949cdb70a4c547c5e27e73555f2f1eb9e757c639bcc", - "urls": [ - "bzz-raw://b61bdffe26ff3902edab3efb0b5af3808ec9e28d72db95b77128502b9bc7638d", - "dweb:/ipfs/Qmcyf3npDDEq28b9XqmXgSGyQegj2cxUZQ3UekSNf34g8M" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroExecutor.sol": { - "keccak256": "0x3647af317ee126b1247a782abb30e59ec5ab21b4945f1d3b4370d1fa3c1bf347", - "urls": [ - "bzz-raw://5b51cd5e7347ee869a06bd57a698f40e4a901ec7fdcb27f0ef485e4a0e1e9be4", - "dweb:/ipfs/QmP2Nc73veRzLGdUahkjhQAiKR9ZWYiUtSGwoMB1sPXxUp" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroPriceFeed.sol": { - "keccak256": "0xb4df72798a64f5ea44775b526e0c417c3de0ffc661659d7b31d5b28567c6fbcc", - "urls": [ - "bzz-raw://30ca5fd5e3227a7bffc51654ee3bfebdd591a131f86846ac42dea8a40c5cf1d8", - "dweb:/ipfs/QmXNmQCF8TZAFpUxgPa1rgWt4ktsBV38A8Hax7TiYLgybW" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroReadExecutor.sol": { - "keccak256": "0x360936885f173f816ffb47e555d480928e74eb1ad54a76af0f4595ecba2d5657", - "urls": [ - "bzz-raw://16b5095e6439b1e416eb70571a1dd8f4f21a0d77b19c9e510ca289d99e5e09ab", - "dweb:/ipfs/QmZ2mjQDQ35gJseyzmQhik4cBgN2ESADzofFNVFvgS64hv" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroTreasury.sol": { - "keccak256": "0x2aab2a3cf50e20af56d9204b1367d52a47abba0b0c7c21f304d413de1ced6345", - "urls": [ - "bzz-raw://f8b603b5e5e62c621715f8449280af240a4add8721c4ae8f5e8e491507f6e4c5", - "dweb:/ipfs/QmUQ7Ti7CPmKnRbQFN9TLvVbeZhsi1xUjqZPTJ36dCZ6y8" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IWorker.sol": { - "keccak256": "0xa6b61913767305227576cc6da5067de4208f09a4f58bfbfe32beafdfae9869b1", - "urls": [ - "bzz-raw://b7fce83bfb831f383606aee7f5ff68a330c8526bb1036f9ba0813d3e4fa8d534", - "dweb:/ipfs/QmR7zAqJkmCgBj6sguS8t2WthY5k6FwsakgH4UY11uqD4n" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/libs/ExecutorOptions.sol": { - "keccak256": "0x441b723f2f597be2ec2bb361fcf3f11852c23534db1cfa7d2ffff7e61d228e3c", - "urls": [ - "bzz-raw://636817d20f90f75032e35376256cf5f4d2a047d6541b45f644d82a2e4dc8f1eb", - "dweb:/ipfs/QmcEFRxCmmm9hKbqi7Powj6ATbw4JXXJW4rxfwMcxWsDnT" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/libs/SafeCall.sol": { - "keccak256": "0xc3b7b7927472f7c1ca9703af310e9050c798afaccf399ad0f131e179b8582c8d", - "urls": [ - "bzz-raw://e5be13af32ff6b371985d405bc6fe8ac2faf5445bd88fda2dab4b869f66e3f89", - "dweb:/ipfs/Qmd21k4H2tAHKrpiuHUbH87eNtHLLJzHj9ZCrMh8AKfDHh" - ], - "license": "MIT OR Apache-2.0" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/ReceiveUlnBase.sol": { - "keccak256": "0x36c93de122bbb74ae31e3eacf567c0a3bc649ed3ebb2766c76dfa93aebcace44", - "urls": [ - "bzz-raw://e83bcaa80e2715e68818dd53e4dc6ad8e665b8249d69a08cf2d2635b9757fb79", - "dweb:/ipfs/QmSKh6NgaTrTSa48gDzGGqGNAcs5jVEHgZSzZzbuJSEsxo" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/SendUlnBase.sol": { - "keccak256": "0x6d9962ffa476ac2efb78f1415bb2f650a30eedeef2b75fdab0aeafaf3e8da6a5", - "urls": [ - "bzz-raw://21f32c56b67d2e770444b809c1a85a96627194c605ad317d482dfc5b6ce7e8c2", - "dweb:/ipfs/QmP5tzoMDzTdduEcSpYHgg6WCHLQGuc1djDMFUBycJPLCU" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/UlnBase.sol": { - "keccak256": "0xfdb1d04f4996c0a9d35abfbfcf10d978da638885eb77d0a9dc35cea5993074e3", - "urls": [ - "bzz-raw://776d58d88d13b058f236cf18c32b4b9718a021513fc4e198287f4fe18ec5aba4", - "dweb:/ipfs/QmdNX8jJu2aXJ8Dpbt2ohfhT8RKQLuvh58sW6SAXcUTcV9" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IDVN.sol": { - "keccak256": "0x6becdfab6c1fcaf98f402bee48495895e54825f9d6eef6e292dde0caed628284", - "urls": [ - "bzz-raw://2273341033856737cd46704a1a769768feae696d0e7a912f5be9de8ffdd2180c", - "dweb:/ipfs/QmY1xBAmMX9jND1HAb7tDyZNPgFReXMqs1vtmHbShKZFQY" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IDVNFeeLib.sol": { - "keccak256": "0xed4a8e77148328132d8f4f2726c4aeec6b490cf03a1d5940bde0ab8d72954de9", - "urls": [ - "bzz-raw://7b07802ca32bf10f68e51da872fb358807446dc2242314374d226493a6e9e7dc", - "dweb:/ipfs/QmfSwWPLgitDy2a9S3mCNBDk6kAcK9n186Dtvj7qg84i12" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/ILayerZeroDVN.sol": { - "keccak256": "0x308e77078242fd5c5746ec29c12e618249134f9e4377c0028ab8f59c07a6014b", - "urls": [ - "bzz-raw://2f92cf397a8d26864ac92dfcd1b98e92a32c47f556a62c5e6dc1618734c1caa3", - "dweb:/ipfs/QmXN3XJXEKq5djV6HeM6jrLycmJPFhMhecsYZ2TaRsQmhg" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/ILayerZeroReadDVN.sol": { - "keccak256": "0x759a3ee7614c2de54b152b0278845f91ac9760d8c22045b2fee89e3e744402b8", - "urls": [ - "bzz-raw://7a2dbf6bcf5bfab408f18c104b34c390e8bfabb0eeb1a10e3a9c0fb14c8c61d5", - "dweb:/ipfs/QmWxmRbDBkbhGmNsRyXqQXB1QaWRS4qvh6a8achh8DQPKR" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IReceiveUlnE2.sol": { - "keccak256": "0xcdf7e690e5d5c0a3ec26a0d7b1a7fe49c7d16a3634721c3944f77d13ff5d4a91", - "urls": [ - "bzz-raw://bd32a05dde1b83be1ce64fcfb9495d8b9bf0c5b3a5b521ac6c214e87e32f3cdc", - "dweb:/ipfs/QmcDKTor8EQf3cbiWYmeFb9qzUM8JGPzGGN9qJnYjP1nN7" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/DVNOptions.sol": { - "keccak256": "0x2beee03cdf59a9bc72e94d08b69cb2e908725f4ceabb48651494938100e21e35", - "urls": [ - "bzz-raw://d88e121a39e74309f3575417df2318e2d2ee8bc8314e68dbf78544a9c393b141", - "dweb:/ipfs/QmRojBRAyENK21HnjevAWeoZZxtWkYZubB9Y78vCJPYeU6" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/ReadCmdCodecV1.sol": { - "keccak256": "0x52fbab4a114ce9defb2ffd57c0a978eee438b2c232862f7e20475e0dcadd4eda", - "urls": [ - "bzz-raw://a4d5d4e186e3f2a916ea02c2d1d0761069ab1a5c0d6f74719bbf3501a7ccb899", - "dweb:/ipfs/QmS2e12U9Fap2EK1CmSBTccL4PCKkHNdKJn2bXCqqKdbRn" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/SupportedCmdTypes.sol": { - "keccak256": "0x6b2534522c163714e499041ecd06aaeb93857373cef82cf2752f162bb7c69f9a", - "urls": [ - "bzz-raw://bf6c3545c3b9505692dbfaa29b40cab5ed9dc9b65e5804b6f47b5a76596120e9", - "dweb:/ipfs/QmNs98oRaMvpYhLCQ5yU256eYNEopFTrLRjjwm3gL4foQ3" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/UlnOptions.sol": { - "keccak256": "0x5df07fef16b20767f7524c367d90f696c12e8ce0e4fde7aecc9d83fb2b6b0e27", - "urls": [ - "bzz-raw://0997203f57d736e56ebb3d736550f1c7ff7950c8df0574c7abe95e22f847b850", - "dweb:/ipfs/QmZBjkH1vaPLyN3Jx9kGfVZKuTdfVWJfJVLSPok8SpjGbT" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/readlib/ReadLibBase.sol": { - "keccak256": "0x7d312ba1e6288cb201b211f58b814eaaa0b5993721475fbc64321b0e7a2c74d3", - "urls": [ - "bzz-raw://dfc0dce9362eca0f03b51e0e808389c8bf51fda901e6ca58da169f165e4fc3c8", - "dweb:/ipfs/QmSXAQ3veWf6gPXcgpX1XLZW9SyLQjBjCSdsFiQTttLNac" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/uln301/interfaces/IUltraLightNode301.sol": { - "keccak256": "0x47f8ebeaa7d96a6f337a18c46e3c532da578c7cb0a13fb6e6f014286b991902f", - "urls": [ - "bzz-raw://d51f208b931be54e0ae1801c71c0756251d8c26f8d9b7911be1ad57b3d4a5691", - "dweb:/ipfs/QmWqjst7jnYtSXQ9pakYHutDvENKLyqNg9nPfMxTH8p2Ed" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessageLibManager.sol": { - "keccak256": "0x64330e51de72e8d38cfc0eb5527d36baada46df4bc14233d3a8ecaf98098d69a", - "urls": [ - "bzz-raw://49aa45e5a26fc62e7af569cf915be8344adc78dceb6871c4c14bc5d115e59241", - "dweb:/ipfs/QmbTuW7kzPDYForDEPnaNQi6ZrmWqDxGVnHFiugnvTyq9K" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingChannel.sol": { - "keccak256": "0x8ab8cb12c8beba699c1a7f22ffa812ac553f7038326d0c0d0af77253005cfe73", - "urls": [ - "bzz-raw://7c7cba4ae16d0ca46ee0a365a204f7257ceaa892224604bf7c8e65c44737e46c", - "dweb:/ipfs/QmbQX5hJDKMwKdoo6QkdcusXQXH54SVCPe5hM1ycJZsg7y" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingComposer.sol": { - "keccak256": "0x20d36578e810e75346daf064813b76a177087214cae77628b1f9d43798cb52d1", - "urls": [ - "bzz-raw://475b6f3f1ba5d981d0c5f90b9e892d4f9f539f3b12196639b95770b5be4dbf6a", - "dweb:/ipfs/QmYyGrnR3vDt8Dqa2paQwTG9qrD6anAGFrDZmMra8KGC6s" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingContext.sol": { - "keccak256": "0x9616f3bd0d7293c9723f2ddf86f9f7030fbd99213c9748557eec8f6d13b25420", - "urls": [ - "bzz-raw://205e713f5af46f52799e51774ac74dbeee4056de6ddba3c4d78a327536426c54", - "dweb:/ipfs/QmZ2ZqDwxdjpJbh91qwMfRhhQu4AMEsjUcsTEsdRV4NAys" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroComposer.sol": { - "keccak256": "0xfaca7205d4211ee9208a7e59171e2301731f3d2a20c49b4a839821871f5fdd49", - "urls": [ - "bzz-raw://f254bc60ac26687b5320a43a556e30777b0745abf7cd64d5f4720d9b1d1f7fdf", - "dweb:/ipfs/QmRSJEZVgxaC3L2DdE6s8P5qkYfM3V5JMeseeFJJqGR4xz" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol": { - "keccak256": "0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3", - "urls": [ - "bzz-raw://bacc29fd3866af71e59cb0bdc1cf82c882a4a7f4e2652fd413c9f12649762083", - "dweb:/ipfs/QmZh2toLnrQDWaNYhS5K4NoW7Vxd2GdZx9KA77vKEDLAqs" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol": { - "keccak256": "0x9641abba8d53b08bb517d1b74801dd15ea7b84d77a6719085bd96c8ea94e3ca0", - "urls": [ - "bzz-raw://77415ae0820859e0faf3fabdce683cce9fa03ea026ae0f6fe081ef1c9205f933", - "dweb:/ipfs/QmXd7APqoCunQ2jYy73AHvi5gsZofLpm3SzM6FPo7zRPfL" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol": { - "keccak256": "0x5cf5f24751b4e3ea1c9c5ded07cedfdfd62566b6daaffcc0144733859c9dba0c", - "urls": [ - "bzz-raw://cae7e35007a714f007ea08045ef7c0cfa6c91fd2425b5028b2d49abad357a5f0", - "dweb:/ipfs/QmcDBs5tsiyB35b8cwzWQWNnpkawb3uuHRaqE77Hxm2tve" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol": { - "keccak256": "0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc", - "urls": [ - "bzz-raw://d8ff6a8a89297fa127f86b54e0db3eba1d6a6eeb4f6398d3c84d569665ac8f1b", - "dweb:/ipfs/QmVSwhw6xFDrLRAX4RXaCM47yBaBtac4wf36DYEq6KCTvT" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol": { - "keccak256": "0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972", - "urls": [ - "bzz-raw://7e1b245d58221d16d8b5e0f01ef3e289a24a7df1ace3b94239e4d5b954ad5927", - "dweb:/ipfs/Qmappsgp7PCY9rSSNE9Cdn4BTRX591WfCSEgq2HxhA3z6S" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol": { - "keccak256": "0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901", - "urls": [ - "bzz-raw://b18b23a1643fc6636c4ad9d9023e2e6ca2d3c2a4a046482d4655bff09950598d", - "dweb:/ipfs/Qma6G5SqiovwrMPfgqTrRngK1HWW373Wkf9c6YP2NhXpPk" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol": { - "keccak256": "0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e", - "urls": [ - "bzz-raw://5173fc9143bea314b159ca5a9adb5626659ef763bc598e27de5fa46efe3291a6", - "dweb:/ipfs/QmSLFeMFPmVeGxT4sxRPW28ictjAS22M8rLeYRu9TXkA6D" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol": { - "keccak256": "0xf1c07bc61e7b1dce195ed12d50f87980fbf2d63cac1326fd28287f55fe0ba625", - "urls": [ - "bzz-raw://060f10ff7afc33c1c2f2b4b5ba29231fd3c943146488084d0e4ab99fce991d97", - "dweb:/ipfs/QmaSsefAqqEqtf8FgFUmDYMwTsAty3X1pqDb6SiFvry6B3" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol": { - "keccak256": "0x2ebbcaaab3554edcd41b581f1a72ac1806afbfb8047d0d47ff098f9af30d6deb", - "urls": [ - "bzz-raw://2d4b2cf5c3b16dc76c6767f285b57c0af917972327b2be3f7cba5825402f5fc1", - "dweb:/ipfs/QmQQWiHE2jKEDbjzGutSoZwtApSXYfLqZt5CxEpFj8xyvT" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/CalldataBytesLib.sol": { - "keccak256": "0x5c0db161cef6603c3b256d4220f489419e7478ef775e52a80056654129c61875", - "urls": [ - "bzz-raw://a33245d0fdd3992bb56b31d1840108d36bb46c8d617b659ef1af8dd7ed86302d", - "dweb:/ipfs/QmWyBqT7Tdrfn5zz9xYM3V1PBtfAZAVwwCrrKwwfi3wMQK" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Errors.sol": { - "keccak256": "0x35bcd6ca99c4c8d9f7d8413d1b92fb4a4d4a420ce3bf64b0fb01e68e6bcf2fa7", - "urls": [ - "bzz-raw://0ac14f98563f9c610c936c93e71eff657efaba1e1d892be6a215aa5cb1f63a24", - "dweb:/ipfs/QmVZZ8owwfDGLQTAzQJJqmYY4KsrChDagh5GBK7rChT5wb" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/GUID.sol": { - "keccak256": "0x8a44524af7deb96593f6b5606e9973654a113e1687809f2e45d4a91ba89862d5", - "urls": [ - "bzz-raw://32dd0b5d1946e0cd5c7b728086aafac50a62c061115afb8b41254589c8a6732b", - "dweb:/ipfs/QmR9QqtiAUPRLaRVv5wnth3NGPhdWB8rJmWYfz3o5Z1mWj" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Transfer.sol": { - "keccak256": "0x621d6dd5b8b7e827351459fff4ac87c16ba4656757592cf67de8b199aea4cf9a", - "urls": [ - "bzz-raw://345aa8c007ed8b96a74260d289545713f1d7180df270d67687e3a540a61fa5c0", - "dweb:/ipfs/QmNWCvpqSuar6UGLDVshUc7shUv3pt1J5FTf9VyZZ13wXL" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/BlockedMessageLib.sol": { - "keccak256": "0xb2b55968b26294139742adee6c155897c8334f4c6bf72f1940456cc84e6fbab9", - "urls": [ - "bzz-raw://e758a1fdcea4039b19f1252e4e2958f4a0e05517eb3e151784431533446c225f", - "dweb:/ipfs/QmRBG345abgyUeTnSpuxdK1WbK5pvwhSmvBEgW1mnoYqTq" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/BitMaps.sol": { - "keccak256": "0xaad3c72ef43480d2253fd48b394e8fb7286d009991d2bc4e61be58ce48ac5ee9", - "urls": [ - "bzz-raw://b8c02b14f954416ba2148b389c87da8378ac8dd16ba3d458cbbfba8b0fd8639f", - "dweb:/ipfs/Qmd2EEQhYL2VmgJi1V4uiHM2WcYxF9iBtxSgcFkbS21rQD" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/ExecutorOptions.sol": { - "keccak256": "0x621c6090fc432f94a99f677a95d72b75f56db89ddc5fc870669777a313587c28", - "urls": [ - "bzz-raw://69086166f16d29e30c5eb9ca2f97afb27569afe619807d79736833a809a512d2", - "dweb:/ipfs/QmcZqXjFuVdTrfbteKBF3GuEpjVFZ2YNZTa3J87dyLsqav" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol": { - "keccak256": "0xc84cf1bf785977fe1fbe7566eef902c2db68d0e163813ebe6c34921754802680", - "urls": [ - "bzz-raw://de686666fc16fa432d4208d85cec87dc952faf3e481b683b9adf4b4610db4b09", - "dweb:/ipfs/QmdmQeopzmxqRzi9DNB4EJDrYUXFfD7fUhnGhSni4QejUW" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-v1-0.7/contracts/interfaces/ILayerZeroUltraLightNodeV2.sol": { - "keccak256": "0xf1f36bbbc40d03b96affa151affb47da75a1b69dc79f4b311841a072d12fdd22", - "urls": [ - "bzz-raw://9f4f188c2998ecbda28a389ad8038da15c2260b1df6a8d135b3d96422e292fda", - "dweb:/ipfs/QmeThR83tcaM4CmxQ2AamTafsgjcbGMfZtYcDHqw2CcwKa" - ], - "license": "BUSL-1.1" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/OptionsHelper.sol": { - "keccak256": "0x729ce2290d16a45a16ad936263803db6a6bebcfba5c063ebe0f0fd284ba828c0", - "urls": [ - "bzz-raw://7494875394fc968684761b22bb5fe05789f8d84ba07b2e0ab579ce0afe7aa973", - "dweb:/ipfs/QmZNrexRXL3ef3UnES5e8JcdyMJ5HVftwGKQjGC5CwNg9Q" - ], - "license": "UNLICENSED" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/TestHelperOz5.sol": { - "keccak256": "0xe60b21a345bb1c2e9ee2fb7301398d342da0acc3a730b442106a2ad9478f7a63", - "urls": [ - "bzz-raw://ee7e0a47ae666a16e33a51f946da4fe549e8f4c6ea1f1978850515172c44656f", - "dweb:/ipfs/QmR2AZ9pYiwMCV4wPPVaGGPRJEjuBoFjJEesHtbAYhNoFq" - ], - "license": "UNLICENSED" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/DVNFeeLibMock.sol": { - "keccak256": "0x4c2e212f73a1c2a2989af947eef715ebacb11a80d55e5fd18a89a905790971b1", - "urls": [ - "bzz-raw://30eb29a81414780828903f5320367e89020af5a4055b768e2be08d43605b1688", - "dweb:/ipfs/QmeC5bVtmaY6tn6Z2XpVFXAkxVWQCQUzKbP2V9nPdv3vCr" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/DVNMock.sol": { - "keccak256": "0xdafd7da964b6ac8637d543c30370739bb805f7e10b42043444689240b5c27b3f", - "urls": [ - "bzz-raw://154067632b4799f49c0b3a8c5304499f60b2c232ebd17c21912efdb72421bdab", - "dweb:/ipfs/QmUEr6VsNt2odnrL3xFrLKwZTVLkLXi8BDzpPWeiCxC63T" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/EndpointV2AltMock.sol": { - "keccak256": "0x026b2f530b336ee237f37dde6f617acefbbf74d933d2a80da4216882f78be1a9", - "urls": [ - "bzz-raw://097a9fdd5a321e6e8455a1db00f2abda6e810c31ce47d1bced9e574be262a28b", - "dweb:/ipfs/Qme17zGk93k5BghCWFXqeqppVahH4dHuw7U76K4EcJxsY1" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/EndpointV2Mock.sol": { - "keccak256": "0xe9096c53611537a121589b56b882fc4dd797d5cac60def708f794a15e3ca98ff", - "urls": [ - "bzz-raw://4092d5dd582b48a5f703e4361fc5fb66050b5fe3253891175275dc832bc8e045", - "dweb:/ipfs/QmXSTJJNx4rn2ByCaE6vxiHnkm366ZU7dScYH1JsUbVZ1V" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ExecutorFeeLibMock.sol": { - "keccak256": "0x4a47aaf41049710d5f05fcc66885cacc0dabc1864778b56ac75a59b61eef5a01", - "urls": [ - "bzz-raw://c9b8c26b38cb138c3225efbab8b1d2e0f43343798658a0f2ed9669c16e5a97ff", - "dweb:/ipfs/QmV21G7Qwoi9gXYT8bKXDwnQDvjdZCAo2M9MqTKq4nQU9U" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ExecutorMock.sol": { - "keccak256": "0xbcdc4500270cd5496f10760ffe9e0444d23e454dd0ae2555e0661acf22fce96f", - "urls": [ - "bzz-raw://b816999bcfef5586b5e80bba21584b821fd7f7b32c276492adee530ffa83bb73", - "dweb:/ipfs/QmXLV8ieYdrTBERajBCVuMzknFyPHJjnw7MGkzULAdjdt8" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/MultiSigMock.sol": { - "keccak256": "0xc7c90e073e52af1da6c07e3d3f7477b064a89e78935c16e9872457df503c6830", - "urls": [ - "bzz-raw://cef1ae2d517e152616aea7f8f5c15fa1fbabbec8896a9c30a9eed35fb56b4f2f", - "dweb:/ipfs/QmeitPMQht2WfbR9ZLzwKWgThamdsJkobeaWo6ojTCoQG5" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/PriceFeedMock.sol": { - "keccak256": "0xd8f419b25c648287b5b7f0923b069b2449c51e807c9153df39445f2f83e55f44", - "urls": [ - "bzz-raw://bb300a5bb62655073c7aa9cd2221e60e59ce904a0d73f7f5e06af7c9df3445ec", - "dweb:/ipfs/QmcYb2qFevymfkWhTqGaNH5HwK9MMUixzAKJJAdNQHSCbw" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ReadLib1002Mock.sol": { - "keccak256": "0x1403b7a91b185fd8211f00fa380a0b8918e92e663c403a1dafa30f1667091fdc", - "urls": [ - "bzz-raw://7494444260a981ae9a9e11cd8981fad35a6b45a9c09cf72c05aad88ee191e7f0", - "dweb:/ipfs/QmaTyujm37PsCobQ36ootD5xVgKyBYqeUTdTJij9x3oaN6" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ReceiveUln302Mock.sol": { - "keccak256": "0x8e60b01e9bc801167b374dc119b41832d546afd43c143a0cd15ab1941198e121", - "urls": [ - "bzz-raw://bb1512762417dda9cd81fd9b41f590fd05888358fda1c2ab7e79e0cfabf61ec4", - "dweb:/ipfs/QmPAgBwdjLz29vE5L1Jth1Wvx6TTM1ig97amVtAyDFF61Q" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/SendUln302Mock.sol": { - "keccak256": "0x0c5cb54ec6b18e77aa653f7d774ac9d010684dafc96794d1d02f12b6885cc348", - "urls": [ - "bzz-raw://24c5a8ba8d92c16ec3047229167528f57b38cbd64882140014126ca51ab14574", - "dweb:/ipfs/QmXQsMDtZ3qNmjnr2LYgctBpPKxffuC6EeWHvFUtLBS5st" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/SimpleMessageLibMock.sol": { - "keccak256": "0xe6c93840c612592686732dd516550816eb77d6cde92514220eacb72443dcb9b9", - "urls": [ - "bzz-raw://a6a00fb60b7ac66e746f0471c2262fc98febafeb8acad8785d38ce1ddc4cc991", - "dweb:/ipfs/QmboboJskbXBbsyAGGRbW4JQCPJo9WiLFy7nwQxGVS9UhZ" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/WorkerMock.sol": { - "keccak256": "0x6c5bc31c117033dd35fa7ab3b13b1647a4b449c5f5b4cbff41bce8a63529ab97", - "urls": [ - "bzz-raw://01aa1d3f3b8e2fd4b544312d96916b16b97e01ab740e2bae1137723b2f1a31b1", - "dweb:/ipfs/QmVMemJ4MSgi6y9NxDdSeB6QbJRtCWojJNxzs3CRLT56EA" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/test.sol": { - "keccak256": "0x8758531bbac3972efcf1fa46383dbe1d276406fe527bc7abb2f236486278e83b", - "urls": [ - "bzz-raw://1f64264d61506847acf8761e84aff690cebe830958eac00bac7924d8be569240", - "dweb:/ipfs/QmSekDJvJ82MZAmr63n7YvfLzQ7gS4NLSHPmHL3GN3rw8k" - ], - "license": "GPL-3.0-or-later" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Base.sol": { - "keccak256": "0x4ff1a785311017d1eedb1b4737956fa383067ad34eb439abfec1d989754dde1c", - "urls": [ - "bzz-raw://f553622969b9fdb930246704a4c10dfaee6b1a4468c142fa7eb9dc292a438224", - "dweb:/ipfs/QmcxqHnqdQsMVtgsfH9VNLmZ3g7GhgNagfq7yvNCDcCHFK" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdAssertions.sol": { - "keccak256": "0x1a0dee4d8b2c81e9318e87dd85ef009467ebf7dba6575530d1fce94d34dbae60", - "urls": [ - "bzz-raw://ddd790c86ddde1013d1f7a552a80168eacf2e9244077f96799180644ad523a5b", - "dweb:/ipfs/QmYinBFt9uEVFXP9ytT9CDoNpzWieQVgLWRFRNiypMzJaL" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdChains.sol": { - "keccak256": "0x598b85609125830885b8fb54a18f447d04f8dd799aca3de81baef35eb6b783c0", - "urls": [ - "bzz-raw://c9c128aae4f5668d8c8f71e9e6d9379d8451b8713d139cb66a02d23bc1c75f69", - "dweb:/ipfs/QmVRihXHWi2yg9CcAhzKf63Y7m6gWz4P1giGMhXUHT3DFu" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdCheats.sol": { - "keccak256": "0xb72f3519e0bf7d31df5d68557525f4fc55d861c3fb3b0f7793144ef7c94cbeb7", - "urls": [ - "bzz-raw://f3456d0f78e6f61203fa7871ba2df0d35925f10db3baee14be623ce2a35b84e2", - "dweb:/ipfs/QmWE6QQSBvJifHMraisBTrf1x4WCwrDoTPLX8UKajTiApc" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdError.sol": { - "keccak256": "0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77", - "urls": [ - "bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6", - "dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdInvariant.sol": { - "keccak256": "0x67299bfacd77fddfa2a67b8e2b901e0e333618a4975fb94850b07475e51f6de6", - "urls": [ - "bzz-raw://1b61121d310f4053ce344b345b4a9ccf43b059daf9097ec2647f594beaca896d", - "dweb:/ipfs/QmZUCoTtXBM9zfAZVbj2dFPPnKaV1CSZzXE7zictyg3Gfz" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdJson.sol": { - "keccak256": "0x8f914dbd016bd0e318fe2b8bd556fbc8256c7cddc24e3e4fcb9f3c1c1935592d", - "urls": [ - "bzz-raw://19e704df493dde38323303b07d18cadfeb4dcadf1ddc2301add4aea9474fbb5e", - "dweb:/ipfs/QmZasuGiLK8LHwWtvpqEBxUR6QFY6GdzLMTJ9q7CMf8PNZ" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdMath.sol": { - "keccak256": "0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2", - "urls": [ - "bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92", - "dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdStorage.sol": { - "keccak256": "0x4298f3f4cedaedb07029820b1daad2c03af45379559392201f7bf3ec71105811", - "urls": [ - "bzz-raw://6e062f36d8d1ae3c383ef8975757926eaa9c4de3a92b5f1fe2d12748bcd8db32", - "dweb:/ipfs/QmcWkv3ia5Ew4DZNcudMNSTNXZ3W2QiXTZunRd44e9BT8z" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdStyle.sol": { - "keccak256": "0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d", - "urls": [ - "bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8", - "dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdUtils.sol": { - "keccak256": "0x502b18a4becda6ecd91fa8b419d8034946bfa80e6cc7f6497f51f8565bfadae0", - "urls": [ - "bzz-raw://bf499ee483a1dfd02023d4ce78ed4029a49794ccd5b849aaab912faea0d2ba61", - "dweb:/ipfs/QmP6hwNZW7sYbQK9fBzuZWxfLm6Swx2nKzvZ54qWNqQkzX" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Test.sol": { - "keccak256": "0x39b1729d5868c8e94ab8af16751eb500a17fe3870dc627d2b7ddcd5df18d7ad0", - "urls": [ - "bzz-raw://1568c82aff125cc4b0fc168be9d67ac313f469a3c7405c5493caecaaaecfb765", - "dweb:/ipfs/QmXByuZReJsdu1jDcxj1FcmpcUnzoBcqybn9kWgDAECWri" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Vm.sol": { - "keccak256": "0x87ba9f3edc254e529db9e3129c954391adcc7fc8574203767979d8d2f1e724b9", - "urls": [ - "bzz-raw://4d16c08d80d9f2869deb6350642cf5af624d21fce6b3b023abbcdedc62e195fe", - "dweb:/ipfs/QmURpnnFECPKt3i7P7jQRZpr4ZBXjRGcZ9KzcbKzsgYR2W" - ], - "license": "MIT OR Apache-2.0" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/console.sol": { - "keccak256": "0x91d5413c2434ca58fd278b6e1e79fd98d10c83931cc2596a6038eee4daeb34ba", - "urls": [ - "bzz-raw://91ccea707361e48b9b7a161fe81f496b9932bc471e9c4e4e1e9c283f2453cc70", - "dweb:/ipfs/QmcB66sZhQ6Kz7MUHcLE78YXRUZxoZnnxZjN6yATsbB2ec" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/console2.sol": { - "keccak256": "0x954646445d1014c3cd85c7918f5e7adeeca5ee44b68c00bafa237e597a4e35ea", - "urls": [ - "bzz-raw://516fa3be52da4763147175bfba4be0aa011fadbb0c1afb01f97265bd4cee7973", - "dweb:/ipfs/QmdixAyMJefx7qePChgdxcBH5MxhmN7vsqPuPLx3CgrVmF" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/interfaces/IMulticall3.sol": { - "keccak256": "0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a", - "urls": [ - "bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0", - "dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/mocks/MockERC20.sol": { - "keccak256": "0xd8703f49411737ecf8d411f8fa66b2bf0ef972ba28b7a4adf1748c63df1bf682", - "urls": [ - "bzz-raw://b7c10a6b8112f6fe3cdccb6240ecd382765216b1a82e9a86a0fec8f5e09eadd1", - "dweb:/ipfs/QmdRvPCU4RkjMHsTu3Ric1ZEF1AWDNLp78unFC5aWP17xq" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/mocks/MockERC721.sol": { - "keccak256": "0xa24468244abb66e663fb7eee6463cb518eb9a7c14e1071548ff564cca825bbca", - "urls": [ - "bzz-raw://145585a2194aa6e2d30edfe709ef2814e20b1b4540469aa6a8f50c841fcb9070", - "dweb:/ipfs/QmZrwbvtpbtTxqbW5phUrwb3F1tBiPSQc6jZJAXBfsBsAh" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/safeconsole.sol": { - "keccak256": "0xbaf41fdc6c54297e7cd8250e48b0f20eaac918e342a1028cef3f9a52ac086381", - "urls": [ - "bzz-raw://a500ad81dea226f9910e6b50f99a9ff930105e393a692cbfb2185e4cdb4424ae", - "dweb:/ipfs/QmVbUQpXNMmMWRiy4FvBNczzq46BMGfUoBikvSHNiCxVTq" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/access/AccessControl.sol": { - "keccak256": "0xa0e92d42942f4f57c5be50568dac11e9d00c93efcb458026e18d2d9b9b2e7308", - "urls": [ - "bzz-raw://46326c0bb1e296b67185e81c918e0b40501b8b6386165855df0a3f3c634b6a80", - "dweb:/ipfs/QmTwyrDYtsxsk6pymJTK94PnEpzsmkpUxFuzEiakDopy4Z" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/access/IAccessControl.sol": { - "keccak256": "0xc1c2a7f1563b77050dc6d507db9f4ada5d042c1f6a9ddbffdc49c77cdc0a1606", - "urls": [ - "bzz-raw://fd54abb96a6156d9a761f6fdad1d3004bc48d2d4fce47f40a3f91a7ae83fc3a1", - "dweb:/ipfs/QmUrFSGkTDJ7WaZ6qPVVe3Gn5uN2viPb7x7QQ35UX4DofX" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/access/Ownable.sol": { - "keccak256": "0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb", - "urls": [ - "bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6", - "dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol": { - "keccak256": "0x9b6b3e7803bc5f2f8cd7ad57db8ac1def61a9930a5a3107df4882e028a9605d7", - "urls": [ - "bzz-raw://da62d6be1f5c6edf577f0cb45666a8aa9c2086a4bac87d95d65f02e2f4c36a4b", - "dweb:/ipfs/QmNkpvBpoCMvX8JwAFNSc5XxJ2q5BXJpL5L1txb4QkqVFF" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/interfaces/IERC165.sol": { - "keccak256": "0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724", - "urls": [ - "bzz-raw://11fea9f8bc98949ac6709f0c1699db7430d2948137aa94d5a9e95a91f61a710a", - "dweb:/ipfs/QmQdfRXxQjwP6yn3DVo1GHPpriKNcFghSPi94Z1oKEFUNS" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/interfaces/IERC20.sol": { - "keccak256": "0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c", - "urls": [ - "bzz-raw://a2608291cb038b388d80b79a06b6118a42f7894ff67b7da10ec0dbbf5b2973ba", - "dweb:/ipfs/QmWohqcBLbcxmA4eGPhZDXe5RYMMEEpFq22nfkaUMvTfw1" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol": { - "keccak256": "0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7", - "urls": [ - "bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db", - "dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol": { - "keccak256": "0xca2ae13e0610f6a99238dd00b97bd786bc92732dae6d6b9d61f573ec51018310", - "urls": [ - "bzz-raw://75f8c71ce0c91c40dd5f249ace0b7d8270f8f1767231bcf71490f7157d6ba862", - "dweb:/ipfs/QmYXgxeDyFHvz3JsXxLEYN6GNUR44ThHeFj5XkpkgMoG4w" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Address.sol": { - "keccak256": "0x9d8da059267bac779a2dbbb9a26c2acf00ca83085e105d62d5d4ef96054a47f5", - "urls": [ - "bzz-raw://c78e2aa4313323cecd1ef12a8d6265b96beee1a199923abf55d9a2a9e291ad23", - "dweb:/ipfs/QmUTs2KStXucZezzFo3EYeqYu47utu56qrF7jj1Gue65vb" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Context.sol": { - "keccak256": "0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2", - "urls": [ - "bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12", - "dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Errors.sol": { - "keccak256": "0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123", - "urls": [ - "bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf", - "dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Panic.sol": { - "keccak256": "0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a", - "urls": [ - "bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a", - "dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Pausable.sol": { - "keccak256": "0xb2e5f50762c27fb4b123e3619c3c02bdcba5e515309382e5bfb6f7d6486510bd", - "urls": [ - "bzz-raw://1a4b83328c98d518a2699c2cbe9e9b055e78aa57fa8639f1b88deb8b3750b5dc", - "dweb:/ipfs/QmXdcYj5v7zQxXFPULShHkR5p4Wa2zYuupbHnFdV3cHYtc" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/ReentrancyGuard.sol": { - "keccak256": "0x11a5a79827df29e915a12740caf62fe21ebe27c08c9ae3e09abe9ee3ba3866d3", - "urls": [ - "bzz-raw://3cf0c69ab827e3251db9ee6a50647d62c90ba580a4d7bbff21f2bea39e7b2f4a", - "dweb:/ipfs/QmZiKwtKU1SBX4RGfQtY7PZfiapbbu6SZ9vizGQD9UHjRA" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/cryptography/ECDSA.sol": { - "keccak256": "0x69f54c02b7d81d505910ec198c11ed4c6a728418a868b906b4a0cf29946fda84", - "urls": [ - "bzz-raw://8e25e4bdb7ae1f21d23bfee996e22736fc0ab44cfabedac82a757b1edc5623b9", - "dweb:/ipfs/QmQdWQvB6JCP9ZMbzi8EvQ1PTETqkcTWrbcVurS7DKpa5n" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/introspection/ERC165.sol": { - "keccak256": "0xddce8e17e3d3f9ed818b4f4c4478a8262aab8b11ed322f1bf5ed705bb4bd97fa", - "urls": [ - "bzz-raw://8084aa71a4cc7d2980972412a88fe4f114869faea3fefa5436431644eb5c0287", - "dweb:/ipfs/Qmbqfs5dRdPvHVKY8kTaeyc65NdqXRQwRK7h9s5UJEhD1p" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol": { - "keccak256": "0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8", - "urls": [ - "bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621", - "dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/math/SafeCast.sol": { - "keccak256": "0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54", - "urls": [ - "bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8", - "dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/structs/DoubleEndedQueue.sol": { - "keccak256": "0x1e1d74658d7f4eab3d4f8fb0c6c5953bc5f629d9425e978d557dabff7b58b217", - "urls": [ - "bzz-raw://be0175d00008d452d3d553890f73a3d5d51dff4372f720336c8b98f26822fcdb", - "dweb:/ipfs/QmUkE8g5xPExWoSAKwdi5ww1qJJVtEWtjSF93G2LMQkgD3" - ], - "license": "MIT" - }, - "node_modules/solidity-bytes-utils/contracts/BytesLib.sol": { - "keccak256": "0xa5b10f04797d5a10a9ba07855108b6bd695940e6a3d128927b2f74a0d359868a", - "urls": [ - "bzz-raw://a38d7680aacbb18dae659876b396b73bcc8f759672213f8a0efc4129e2648535", - "dweb:/ipfs/QmfKFnwpTEGAnbRnZxMuv3mRCG9S9WMjFhFL23bftBT2Jq" - ], - "license": "Unlicense" - } - }, - "version": 1 - }, - "id": 80 -} diff --git a/examples/oft-movement/out/ReadLibBase.sol/ReadLibBase.json b/examples/oft-movement/out/ReadLibBase.sol/ReadLibBase.json deleted file mode 100644 index 86dc82ee1..000000000 --- a/examples/oft-movement/out/ReadLibBase.sol/ReadLibBase.json +++ /dev/null @@ -1,758 +0,0 @@ -{ - "abi": [ - { - "type": "function", - "name": "getAppReadLibConfig", - "inputs": [ - { "name": "_oapp", "type": "address", "internalType": "address" }, - { "name": "_remoteEid", "type": "uint32", "internalType": "uint32" } - ], - "outputs": [ - { - "name": "", - "type": "tuple", - "internalType": "struct ReadLibConfig", - "components": [ - { - "name": "executor", - "type": "address", - "internalType": "address" - }, - { - "name": "requiredDVNCount", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "optionalDVNCount", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "optionalDVNThreshold", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "requiredDVNs", - "type": "address[]", - "internalType": "address[]" - }, - { - "name": "optionalDVNs", - "type": "address[]", - "internalType": "address[]" - } - ] - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getReadLibConfig", - "inputs": [ - { "name": "_oapp", "type": "address", "internalType": "address" }, - { "name": "_remoteEid", "type": "uint32", "internalType": "uint32" } - ], - "outputs": [ - { - "name": "rtnConfig", - "type": "tuple", - "internalType": "struct ReadLibConfig", - "components": [ - { - "name": "executor", - "type": "address", - "internalType": "address" - }, - { - "name": "requiredDVNCount", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "optionalDVNCount", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "optionalDVNThreshold", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "requiredDVNs", - "type": "address[]", - "internalType": "address[]" - }, - { - "name": "optionalDVNs", - "type": "address[]", - "internalType": "address[]" - } - ] - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "owner", - "inputs": [], - "outputs": [{ "name": "", "type": "address", "internalType": "address" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "renounceOwnership", - "inputs": [], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setDefaultReadLibConfigs", - "inputs": [ - { - "name": "_params", - "type": "tuple[]", - "internalType": "struct SetDefaultReadLibConfigParam[]", - "components": [ - { "name": "eid", "type": "uint32", "internalType": "uint32" }, - { - "name": "config", - "type": "tuple", - "internalType": "struct ReadLibConfig", - "components": [ - { - "name": "executor", - "type": "address", - "internalType": "address" - }, - { - "name": "requiredDVNCount", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "optionalDVNCount", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "optionalDVNThreshold", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "requiredDVNs", - "type": "address[]", - "internalType": "address[]" - }, - { - "name": "optionalDVNs", - "type": "address[]", - "internalType": "address[]" - } - ] - } - ] - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "transferOwnership", - "inputs": [ - { "name": "newOwner", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "event", - "name": "DefaultReadLibConfigsSet", - "inputs": [ - { - "name": "params", - "type": "tuple[]", - "indexed": false, - "internalType": "struct SetDefaultReadLibConfigParam[]", - "components": [ - { "name": "eid", "type": "uint32", "internalType": "uint32" }, - { - "name": "config", - "type": "tuple", - "internalType": "struct ReadLibConfig", - "components": [ - { - "name": "executor", - "type": "address", - "internalType": "address" - }, - { - "name": "requiredDVNCount", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "optionalDVNCount", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "optionalDVNThreshold", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "requiredDVNs", - "type": "address[]", - "internalType": "address[]" - }, - { - "name": "optionalDVNs", - "type": "address[]", - "internalType": "address[]" - } - ] - } - ] - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "OwnershipTransferred", - "inputs": [ - { - "name": "previousOwner", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "newOwner", - "type": "address", - "indexed": true, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "ReadLibConfigSet", - "inputs": [ - { - "name": "oapp", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "eid", - "type": "uint32", - "indexed": false, - "internalType": "uint32" - }, - { - "name": "config", - "type": "tuple", - "indexed": false, - "internalType": "struct ReadLibConfig", - "components": [ - { - "name": "executor", - "type": "address", - "internalType": "address" - }, - { - "name": "requiredDVNCount", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "optionalDVNCount", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "optionalDVNThreshold", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "requiredDVNs", - "type": "address[]", - "internalType": "address[]" - }, - { - "name": "optionalDVNs", - "type": "address[]", - "internalType": "address[]" - } - ] - } - ], - "anonymous": false - }, - { "type": "error", "name": "LZ_RL_AtLeastOneDVN", "inputs": [] }, - { "type": "error", "name": "LZ_RL_InvalidExecutor", "inputs": [] }, - { "type": "error", "name": "LZ_RL_InvalidOptionalDVNCount", "inputs": [] }, - { - "type": "error", - "name": "LZ_RL_InvalidOptionalDVNThreshold", - "inputs": [] - }, - { "type": "error", "name": "LZ_RL_InvalidRequiredDVNCount", "inputs": [] }, - { "type": "error", "name": "LZ_RL_Unsorted", "inputs": [] }, - { - "type": "error", - "name": "LZ_RL_UnsupportedEid", - "inputs": [{ "name": "eid", "type": "uint32", "internalType": "uint32" }] - }, - { - "type": "error", - "name": "OwnableInvalidOwner", - "inputs": [ - { "name": "owner", "type": "address", "internalType": "address" } - ] - }, - { - "type": "error", - "name": "OwnableUnauthorizedAccount", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ] - } - ], - "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "methodIdentifiers": { - "getAppReadLibConfig(address,uint32)": "ea69d69d", - "getReadLibConfig(address,uint32)": "8eb0bf30", - "owner()": "8da5cb5b", - "renounceOwnership()": "715018a6", - "setDefaultReadLibConfigs((uint32,(address,uint8,uint8,uint8,address[],address[]))[])": "c85f4b4e", - "transferOwnership(address)": "f2fde38b" - }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"LZ_RL_AtLeastOneDVN\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_RL_InvalidExecutor\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_RL_InvalidOptionalDVNCount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_RL_InvalidOptionalDVNThreshold\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_RL_InvalidRequiredDVNCount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_RL_Unsorted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"}],\"name\":\"LZ_RL_UnsupportedEid\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"executor\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"requiredDVNCount\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"optionalDVNCount\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"optionalDVNThreshold\",\"type\":\"uint8\"},{\"internalType\":\"address[]\",\"name\":\"requiredDVNs\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"optionalDVNs\",\"type\":\"address[]\"}],\"internalType\":\"struct ReadLibConfig\",\"name\":\"config\",\"type\":\"tuple\"}],\"indexed\":false,\"internalType\":\"struct SetDefaultReadLibConfigParam[]\",\"name\":\"params\",\"type\":\"tuple[]\"}],\"name\":\"DefaultReadLibConfigsSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oapp\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"executor\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"requiredDVNCount\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"optionalDVNCount\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"optionalDVNThreshold\",\"type\":\"uint8\"},{\"internalType\":\"address[]\",\"name\":\"requiredDVNs\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"optionalDVNs\",\"type\":\"address[]\"}],\"indexed\":false,\"internalType\":\"struct ReadLibConfig\",\"name\":\"config\",\"type\":\"tuple\"}],\"name\":\"ReadLibConfigSet\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_oapp\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_remoteEid\",\"type\":\"uint32\"}],\"name\":\"getAppReadLibConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"executor\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"requiredDVNCount\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"optionalDVNCount\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"optionalDVNThreshold\",\"type\":\"uint8\"},{\"internalType\":\"address[]\",\"name\":\"requiredDVNs\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"optionalDVNs\",\"type\":\"address[]\"}],\"internalType\":\"struct ReadLibConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_oapp\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_remoteEid\",\"type\":\"uint32\"}],\"name\":\"getReadLibConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"executor\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"requiredDVNCount\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"optionalDVNCount\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"optionalDVNThreshold\",\"type\":\"uint8\"},{\"internalType\":\"address[]\",\"name\":\"requiredDVNs\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"optionalDVNs\",\"type\":\"address[]\"}],\"internalType\":\"struct ReadLibConfig\",\"name\":\"rtnConfig\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"executor\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"requiredDVNCount\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"optionalDVNCount\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"optionalDVNThreshold\",\"type\":\"uint8\"},{\"internalType\":\"address[]\",\"name\":\"requiredDVNs\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"optionalDVNs\",\"type\":\"address[]\"}],\"internalType\":\"struct ReadLibConfig\",\"name\":\"config\",\"type\":\"tuple\"}],\"internalType\":\"struct SetDefaultReadLibConfigParam[]\",\"name\":\"_params\",\"type\":\"tuple[]\"}],\"name\":\"setDefaultReadLibConfigs\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"includes the utility functions for checking ReadLib states and logics\",\"errors\":{\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}]},\"kind\":\"dev\",\"methods\":{\"getAppReadLibConfig(address,uint32)\":{\"details\":\"Get the readLib config without the default config for the given remoteEid.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"setDefaultReadLibConfigs((uint32,(address,uint8,uint8,uint8,address[],address[]))[])\":{\"details\":\"about the DEFAULT ReadLib config 1) its values are all LITERAL (e.g. 0 is 0). whereas in the oapp ReadLib config, 0 (default value) points to the default ReadLib config this design enables the oapp to point to DEFAULT config without explicitly setting the config 2) its configuration is more restrictive than the oapp ReadLib config that a) it must not use NIL value, where NIL is used only by oapps to indicate the LITERAL 0 b) it must have at least one DVN and executor\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/readlib/ReadLibBase.sol\":\"ReadLibBase\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/readlib/ReadLibBase.sol\":{\"keccak256\":\"0x7d312ba1e6288cb201b211f58b814eaaa0b5993721475fbc64321b0e7a2c74d3\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://dfc0dce9362eca0f03b51e0e808389c8bf51fda901e6ca58da169f165e4fc3c8\",\"dweb:/ipfs/QmSXAQ3veWf6gPXcgpX1XLZW9SyLQjBjCSdsFiQTttLNac\"]},\"node_modules/@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { "inputs": [], "type": "error", "name": "LZ_RL_AtLeastOneDVN" }, - { "inputs": [], "type": "error", "name": "LZ_RL_InvalidExecutor" }, - { - "inputs": [], - "type": "error", - "name": "LZ_RL_InvalidOptionalDVNCount" - }, - { - "inputs": [], - "type": "error", - "name": "LZ_RL_InvalidOptionalDVNThreshold" - }, - { - "inputs": [], - "type": "error", - "name": "LZ_RL_InvalidRequiredDVNCount" - }, - { "inputs": [], "type": "error", "name": "LZ_RL_Unsorted" }, - { - "inputs": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" } - ], - "type": "error", - "name": "LZ_RL_UnsupportedEid" - }, - { - "inputs": [ - { "internalType": "address", "name": "owner", "type": "address" } - ], - "type": "error", - "name": "OwnableInvalidOwner" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "type": "error", - "name": "OwnableUnauthorizedAccount" - }, - { - "inputs": [ - { - "internalType": "struct SetDefaultReadLibConfigParam[]", - "name": "params", - "type": "tuple[]", - "components": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" }, - { - "internalType": "struct ReadLibConfig", - "name": "config", - "type": "tuple", - "components": [ - { - "internalType": "address", - "name": "executor", - "type": "address" - }, - { - "internalType": "uint8", - "name": "requiredDVNCount", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "optionalDVNCount", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "optionalDVNThreshold", - "type": "uint8" - }, - { - "internalType": "address[]", - "name": "requiredDVNs", - "type": "address[]" - }, - { - "internalType": "address[]", - "name": "optionalDVNs", - "type": "address[]" - } - ] - } - ], - "indexed": false - } - ], - "type": "event", - "name": "DefaultReadLibConfigsSet", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "previousOwner", - "type": "address", - "indexed": true - }, - { - "internalType": "address", - "name": "newOwner", - "type": "address", - "indexed": true - } - ], - "type": "event", - "name": "OwnershipTransferred", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "oapp", - "type": "address", - "indexed": false - }, - { - "internalType": "uint32", - "name": "eid", - "type": "uint32", - "indexed": false - }, - { - "internalType": "struct ReadLibConfig", - "name": "config", - "type": "tuple", - "components": [ - { - "internalType": "address", - "name": "executor", - "type": "address" - }, - { - "internalType": "uint8", - "name": "requiredDVNCount", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "optionalDVNCount", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "optionalDVNThreshold", - "type": "uint8" - }, - { - "internalType": "address[]", - "name": "requiredDVNs", - "type": "address[]" - }, - { - "internalType": "address[]", - "name": "optionalDVNs", - "type": "address[]" - } - ], - "indexed": false - } - ], - "type": "event", - "name": "ReadLibConfigSet", - "anonymous": false - }, - { - "inputs": [ - { "internalType": "address", "name": "_oapp", "type": "address" }, - { "internalType": "uint32", "name": "_remoteEid", "type": "uint32" } - ], - "stateMutability": "view", - "type": "function", - "name": "getAppReadLibConfig", - "outputs": [ - { - "internalType": "struct ReadLibConfig", - "name": "", - "type": "tuple", - "components": [ - { - "internalType": "address", - "name": "executor", - "type": "address" - }, - { - "internalType": "uint8", - "name": "requiredDVNCount", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "optionalDVNCount", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "optionalDVNThreshold", - "type": "uint8" - }, - { - "internalType": "address[]", - "name": "requiredDVNs", - "type": "address[]" - }, - { - "internalType": "address[]", - "name": "optionalDVNs", - "type": "address[]" - } - ] - } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "_oapp", "type": "address" }, - { "internalType": "uint32", "name": "_remoteEid", "type": "uint32" } - ], - "stateMutability": "view", - "type": "function", - "name": "getReadLibConfig", - "outputs": [ - { - "internalType": "struct ReadLibConfig", - "name": "rtnConfig", - "type": "tuple", - "components": [ - { - "internalType": "address", - "name": "executor", - "type": "address" - }, - { - "internalType": "uint8", - "name": "requiredDVNCount", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "optionalDVNCount", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "optionalDVNThreshold", - "type": "uint8" - }, - { - "internalType": "address[]", - "name": "requiredDVNs", - "type": "address[]" - }, - { - "internalType": "address[]", - "name": "optionalDVNs", - "type": "address[]" - } - ] - } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "owner", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ] - }, - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "function", - "name": "renounceOwnership" - }, - { - "inputs": [ - { - "internalType": "struct SetDefaultReadLibConfigParam[]", - "name": "_params", - "type": "tuple[]", - "components": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" }, - { - "internalType": "struct ReadLibConfig", - "name": "config", - "type": "tuple", - "components": [ - { - "internalType": "address", - "name": "executor", - "type": "address" - }, - { - "internalType": "uint8", - "name": "requiredDVNCount", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "optionalDVNCount", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "optionalDVNThreshold", - "type": "uint8" - }, - { - "internalType": "address[]", - "name": "requiredDVNs", - "type": "address[]" - }, - { - "internalType": "address[]", - "name": "optionalDVNs", - "type": "address[]" - } - ] - } - ] - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setDefaultReadLibConfigs" - }, - { - "inputs": [ - { "internalType": "address", "name": "newOwner", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "transferOwnership" - } - ], - "devdoc": { - "kind": "dev", - "methods": { - "getAppReadLibConfig(address,uint32)": { - "details": "Get the readLib config without the default config for the given remoteEid." - }, - "owner()": { "details": "Returns the address of the current owner." }, - "renounceOwnership()": { - "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner." - }, - "setDefaultReadLibConfigs((uint32,(address,uint8,uint8,uint8,address[],address[]))[])": { - "details": "about the DEFAULT ReadLib config 1) its values are all LITERAL (e.g. 0 is 0). whereas in the oapp ReadLib config, 0 (default value) points to the default ReadLib config this design enables the oapp to point to DEFAULT config without explicitly setting the config 2) its configuration is more restrictive than the oapp ReadLib config that a) it must not use NIL value, where NIL is used only by oapps to indicate the LITERAL 0 b) it must have at least one DVN and executor" - }, - "transferOwnership(address)": { - "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." - } - }, - "version": 1 - }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/readlib/ReadLibBase.sol": "ReadLibBase" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/readlib/ReadLibBase.sol": { - "keccak256": "0x7d312ba1e6288cb201b211f58b814eaaa0b5993721475fbc64321b0e7a2c74d3", - "urls": [ - "bzz-raw://dfc0dce9362eca0f03b51e0e808389c8bf51fda901e6ca58da169f165e4fc3c8", - "dweb:/ipfs/QmSXAQ3veWf6gPXcgpX1XLZW9SyLQjBjCSdsFiQTttLNac" - ], - "license": "LZBL-1.2" - }, - "node_modules/@openzeppelin/contracts/access/Ownable.sol": { - "keccak256": "0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb", - "urls": [ - "bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6", - "dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Context.sol": { - "keccak256": "0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2", - "urls": [ - "bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12", - "dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF" - ], - "license": "MIT" - } - }, - "version": 1 - }, - "id": 25 -} diff --git a/examples/oft-movement/out/ReceiveLibBaseE2.sol/ReceiveLibBaseE2.json b/examples/oft-movement/out/ReceiveLibBaseE2.sol/ReceiveLibBaseE2.json deleted file mode 100644 index e64624577..000000000 --- a/examples/oft-movement/out/ReceiveLibBaseE2.sol/ReceiveLibBaseE2.json +++ /dev/null @@ -1,316 +0,0 @@ -{ - "abi": [ - { - "type": "function", - "name": "getConfig", - "inputs": [ - { "name": "_eid", "type": "uint32", "internalType": "uint32" }, - { "name": "_oapp", "type": "address", "internalType": "address" }, - { "name": "_configType", "type": "uint32", "internalType": "uint32" } - ], - "outputs": [ - { "name": "config", "type": "bytes", "internalType": "bytes" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "isSupportedEid", - "inputs": [ - { "name": "_eid", "type": "uint32", "internalType": "uint32" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "messageLibType", - "inputs": [], - "outputs": [ - { "name": "", "type": "uint8", "internalType": "enum MessageLibType" } - ], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "setConfig", - "inputs": [ - { "name": "_oapp", "type": "address", "internalType": "address" }, - { - "name": "_config", - "type": "tuple[]", - "internalType": "struct SetConfigParam[]", - "components": [ - { "name": "eid", "type": "uint32", "internalType": "uint32" }, - { - "name": "configType", - "type": "uint32", - "internalType": "uint32" - }, - { "name": "config", "type": "bytes", "internalType": "bytes" } - ] - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "supportsInterface", - "inputs": [ - { "name": "_interfaceId", "type": "bytes4", "internalType": "bytes4" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "version", - "inputs": [], - "outputs": [ - { "name": "major", "type": "uint64", "internalType": "uint64" }, - { "name": "minor", "type": "uint8", "internalType": "uint8" }, - { "name": "endpointVersion", "type": "uint8", "internalType": "uint8" } - ], - "stateMutability": "view" - }, - { "type": "error", "name": "LZ_MessageLib_OnlyEndpoint", "inputs": [] } - ], - "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "methodIdentifiers": { - "getConfig(uint32,address,uint32)": "9c33abf7", - "isSupportedEid(uint32)": "6750cd4c", - "messageLibType()": "1881d94d", - "setConfig(address,(uint32,uint32,bytes)[])": "20efd722", - "supportsInterface(bytes4)": "01ffc9a7", - "version()": "54fd4d50" - }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"LZ_MessageLib_OnlyEndpoint\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"_oapp\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_configType\",\"type\":\"uint32\"}],\"name\":\"getConfig\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"config\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"}],\"name\":\"isSupportedEid\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"messageLibType\",\"outputs\":[{\"internalType\":\"enum MessageLibType\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_oapp\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"configType\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"config\",\"type\":\"bytes\"}],\"internalType\":\"struct SetConfigParam[]\",\"name\":\"_config\",\"type\":\"tuple[]\"}],\"name\":\"setConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"_interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"major\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"minor\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"endpointVersion\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"receive-side message library base contract on endpoint v2. it does not have the complication as the one of endpoint v1, such as nonce, executor whitelist, etc.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/ReceiveLibBaseE2.sol\":\"ReceiveLibBaseE2\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/MessageLibBase.sol\":{\"keccak256\":\"0x14899a4398251439938d6ef8a15ea8c6acdddc98a7b0066d7e63676192dea0d1\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://3998d03de7025c2c601a4fdcaf9475d12a1ef661fcf1a685ece84fdde6498cf9\",\"dweb:/ipfs/QmReknRbiGAiPqq9toKyXKo6hUKXrQPJyyS6LnTGjiDKoY\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/ReceiveLibBaseE2.sol\":{\"keccak256\":\"0x2fdbd1b13751a264cd6e7fac518a2685b15c968806c03f1d18b177fc0526e9a9\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://600af48bb67939b5f4a3a00c76863ee290a55325ea8697f7cc4b46321ab26ef2\",\"dweb:/ipfs/QmdRigYaB6TXczjtVkvwpUEBwvvvDuymFoViMCB6xQPYUU\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\":{\"keccak256\":\"0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bacc29fd3866af71e59cb0bdc1cf82c882a4a7f4e2652fd413c9f12649762083\",\"dweb:/ipfs/QmZh2toLnrQDWaNYhS5K4NoW7Vxd2GdZx9KA77vKEDLAqs\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol\":{\"keccak256\":\"0x5cf5f24751b4e3ea1c9c5ded07cedfdfd62566b6daaffcc0144733859c9dba0c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cae7e35007a714f007ea08045ef7c0cfa6c91fd2425b5028b2d49abad357a5f0\",\"dweb:/ipfs/QmcDBs5tsiyB35b8cwzWQWNnpkawb3uuHRaqE77Hxm2tve\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol\":{\"keccak256\":\"0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d8ff6a8a89297fa127f86b54e0db3eba1d6a6eeb4f6398d3c84d569665ac8f1b\",\"dweb:/ipfs/QmVSwhw6xFDrLRAX4RXaCM47yBaBtac4wf36DYEq6KCTvT\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol\":{\"keccak256\":\"0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7e1b245d58221d16d8b5e0f01ef3e289a24a7df1ace3b94239e4d5b954ad5927\",\"dweb:/ipfs/Qmappsgp7PCY9rSSNE9Cdn4BTRX591WfCSEgq2HxhA3z6S\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol\":{\"keccak256\":\"0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b18b23a1643fc6636c4ad9d9023e2e6ca2d3c2a4a046482d4655bff09950598d\",\"dweb:/ipfs/Qma6G5SqiovwrMPfgqTrRngK1HWW373Wkf9c6YP2NhXpPk\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol\":{\"keccak256\":\"0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5173fc9143bea314b159ca5a9adb5626659ef763bc598e27de5fa46efe3291a6\",\"dweb:/ipfs/QmSLFeMFPmVeGxT4sxRPW28ictjAS22M8rLeYRu9TXkA6D\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol\":{\"keccak256\":\"0xf1c07bc61e7b1dce195ed12d50f87980fbf2d63cac1326fd28287f55fe0ba625\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://060f10ff7afc33c1c2f2b4b5ba29231fd3c943146488084d0e4ab99fce991d97\",\"dweb:/ipfs/QmaSsefAqqEqtf8FgFUmDYMwTsAty3X1pqDb6SiFvry6B3\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol\":{\"keccak256\":\"0x2ebbcaaab3554edcd41b581f1a72ac1806afbfb8047d0d47ff098f9af30d6deb\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://2d4b2cf5c3b16dc76c6767f285b57c0af917972327b2be3f7cba5825402f5fc1\",\"dweb:/ipfs/QmQQWiHE2jKEDbjzGutSoZwtApSXYfLqZt5CxEpFj8xyvT\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol\":{\"keccak256\":\"0xc84cf1bf785977fe1fbe7566eef902c2db68d0e163813ebe6c34921754802680\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://de686666fc16fa432d4208d85cec87dc952faf3e481b683b9adf4b4610db4b09\",\"dweb:/ipfs/QmdmQeopzmxqRzi9DNB4EJDrYUXFfD7fUhnGhSni4QejUW\"]},\"node_modules/@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0xddce8e17e3d3f9ed818b4f4c4478a8262aab8b11ed322f1bf5ed705bb4bd97fa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8084aa71a4cc7d2980972412a88fe4f114869faea3fefa5436431644eb5c0287\",\"dweb:/ipfs/Qmbqfs5dRdPvHVKY8kTaeyc65NdqXRQwRK7h9s5UJEhD1p\"]},\"node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { "inputs": [], "type": "error", "name": "LZ_MessageLib_OnlyEndpoint" }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { "internalType": "address", "name": "_oapp", "type": "address" }, - { - "internalType": "uint32", - "name": "_configType", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function", - "name": "getConfig", - "outputs": [ - { "internalType": "bytes", "name": "config", "type": "bytes" } - ] - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" } - ], - "stateMutability": "view", - "type": "function", - "name": "isSupportedEid", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [], - "stateMutability": "pure", - "type": "function", - "name": "messageLibType", - "outputs": [ - { - "internalType": "enum MessageLibType", - "name": "", - "type": "uint8" - } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "_oapp", "type": "address" }, - { - "internalType": "struct SetConfigParam[]", - "name": "_config", - "type": "tuple[]", - "components": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" }, - { - "internalType": "uint32", - "name": "configType", - "type": "uint32" - }, - { "internalType": "bytes", "name": "config", "type": "bytes" } - ] - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setConfig" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "_interfaceId", - "type": "bytes4" - } - ], - "stateMutability": "view", - "type": "function", - "name": "supportsInterface", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "version", - "outputs": [ - { "internalType": "uint64", "name": "major", "type": "uint64" }, - { "internalType": "uint8", "name": "minor", "type": "uint8" }, - { - "internalType": "uint8", - "name": "endpointVersion", - "type": "uint8" - } - ] - } - ], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/ReceiveLibBaseE2.sol": "ReceiveLibBaseE2" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/MessageLibBase.sol": { - "keccak256": "0x14899a4398251439938d6ef8a15ea8c6acdddc98a7b0066d7e63676192dea0d1", - "urls": [ - "bzz-raw://3998d03de7025c2c601a4fdcaf9475d12a1ef661fcf1a685ece84fdde6498cf9", - "dweb:/ipfs/QmReknRbiGAiPqq9toKyXKo6hUKXrQPJyyS6LnTGjiDKoY" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/ReceiveLibBaseE2.sol": { - "keccak256": "0x2fdbd1b13751a264cd6e7fac518a2685b15c968806c03f1d18b177fc0526e9a9", - "urls": [ - "bzz-raw://600af48bb67939b5f4a3a00c76863ee290a55325ea8697f7cc4b46321ab26ef2", - "dweb:/ipfs/QmdRigYaB6TXczjtVkvwpUEBwvvvDuymFoViMCB6xQPYUU" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol": { - "keccak256": "0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3", - "urls": [ - "bzz-raw://bacc29fd3866af71e59cb0bdc1cf82c882a4a7f4e2652fd413c9f12649762083", - "dweb:/ipfs/QmZh2toLnrQDWaNYhS5K4NoW7Vxd2GdZx9KA77vKEDLAqs" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol": { - "keccak256": "0x5cf5f24751b4e3ea1c9c5ded07cedfdfd62566b6daaffcc0144733859c9dba0c", - "urls": [ - "bzz-raw://cae7e35007a714f007ea08045ef7c0cfa6c91fd2425b5028b2d49abad357a5f0", - "dweb:/ipfs/QmcDBs5tsiyB35b8cwzWQWNnpkawb3uuHRaqE77Hxm2tve" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol": { - "keccak256": "0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc", - "urls": [ - "bzz-raw://d8ff6a8a89297fa127f86b54e0db3eba1d6a6eeb4f6398d3c84d569665ac8f1b", - "dweb:/ipfs/QmVSwhw6xFDrLRAX4RXaCM47yBaBtac4wf36DYEq6KCTvT" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol": { - "keccak256": "0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972", - "urls": [ - "bzz-raw://7e1b245d58221d16d8b5e0f01ef3e289a24a7df1ace3b94239e4d5b954ad5927", - "dweb:/ipfs/Qmappsgp7PCY9rSSNE9Cdn4BTRX591WfCSEgq2HxhA3z6S" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol": { - "keccak256": "0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901", - "urls": [ - "bzz-raw://b18b23a1643fc6636c4ad9d9023e2e6ca2d3c2a4a046482d4655bff09950598d", - "dweb:/ipfs/Qma6G5SqiovwrMPfgqTrRngK1HWW373Wkf9c6YP2NhXpPk" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol": { - "keccak256": "0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e", - "urls": [ - "bzz-raw://5173fc9143bea314b159ca5a9adb5626659ef763bc598e27de5fa46efe3291a6", - "dweb:/ipfs/QmSLFeMFPmVeGxT4sxRPW28ictjAS22M8rLeYRu9TXkA6D" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol": { - "keccak256": "0xf1c07bc61e7b1dce195ed12d50f87980fbf2d63cac1326fd28287f55fe0ba625", - "urls": [ - "bzz-raw://060f10ff7afc33c1c2f2b4b5ba29231fd3c943146488084d0e4ab99fce991d97", - "dweb:/ipfs/QmaSsefAqqEqtf8FgFUmDYMwTsAty3X1pqDb6SiFvry6B3" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol": { - "keccak256": "0x2ebbcaaab3554edcd41b581f1a72ac1806afbfb8047d0d47ff098f9af30d6deb", - "urls": [ - "bzz-raw://2d4b2cf5c3b16dc76c6767f285b57c0af917972327b2be3f7cba5825402f5fc1", - "dweb:/ipfs/QmQQWiHE2jKEDbjzGutSoZwtApSXYfLqZt5CxEpFj8xyvT" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol": { - "keccak256": "0xc84cf1bf785977fe1fbe7566eef902c2db68d0e163813ebe6c34921754802680", - "urls": [ - "bzz-raw://de686666fc16fa432d4208d85cec87dc952faf3e481b683b9adf4b4610db4b09", - "dweb:/ipfs/QmdmQeopzmxqRzi9DNB4EJDrYUXFfD7fUhnGhSni4QejUW" - ], - "license": "LZBL-1.2" - }, - "node_modules/@openzeppelin/contracts/utils/introspection/ERC165.sol": { - "keccak256": "0xddce8e17e3d3f9ed818b4f4c4478a8262aab8b11ed322f1bf5ed705bb4bd97fa", - "urls": [ - "bzz-raw://8084aa71a4cc7d2980972412a88fe4f114869faea3fefa5436431644eb5c0287", - "dweb:/ipfs/Qmbqfs5dRdPvHVKY8kTaeyc65NdqXRQwRK7h9s5UJEhD1p" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol": { - "keccak256": "0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8", - "urls": [ - "bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621", - "dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL" - ], - "license": "MIT" - } - }, - "version": 1 - }, - "id": 1 -} diff --git a/examples/oft-movement/out/ReceiveUln302Mock.sol/ReceiveUln302Mock.json b/examples/oft-movement/out/ReceiveUln302Mock.sol/ReceiveUln302Mock.json deleted file mode 100644 index 35b03bbbc..000000000 --- a/examples/oft-movement/out/ReceiveUln302Mock.sol/ReceiveUln302Mock.json +++ /dev/null @@ -1,1418 +0,0 @@ -{ - "abi": [ - { - "type": "constructor", - "inputs": [ - { "name": "_endpoint", "type": "address", "internalType": "address" } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "assertHeader", - "inputs": [ - { "name": "_packetHeader", "type": "bytes", "internalType": "bytes" }, - { "name": "_localEid", "type": "uint32", "internalType": "uint32" } - ], - "outputs": [], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "commitVerification", - "inputs": [ - { "name": "_packetHeader", "type": "bytes", "internalType": "bytes" }, - { "name": "_payloadHash", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "getAppUlnConfig", - "inputs": [ - { "name": "_oapp", "type": "address", "internalType": "address" }, - { "name": "_remoteEid", "type": "uint32", "internalType": "uint32" } - ], - "outputs": [ - { - "name": "", - "type": "tuple", - "internalType": "struct UlnConfig", - "components": [ - { - "name": "confirmations", - "type": "uint64", - "internalType": "uint64" - }, - { - "name": "requiredDVNCount", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "optionalDVNCount", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "optionalDVNThreshold", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "requiredDVNs", - "type": "address[]", - "internalType": "address[]" - }, - { - "name": "optionalDVNs", - "type": "address[]", - "internalType": "address[]" - } - ] - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getConfig", - "inputs": [ - { "name": "_eid", "type": "uint32", "internalType": "uint32" }, - { "name": "_oapp", "type": "address", "internalType": "address" }, - { "name": "_configType", "type": "uint32", "internalType": "uint32" } - ], - "outputs": [{ "name": "", "type": "bytes", "internalType": "bytes" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getUlnConfig", - "inputs": [ - { "name": "_oapp", "type": "address", "internalType": "address" }, - { "name": "_remoteEid", "type": "uint32", "internalType": "uint32" } - ], - "outputs": [ - { - "name": "rtnConfig", - "type": "tuple", - "internalType": "struct UlnConfig", - "components": [ - { - "name": "confirmations", - "type": "uint64", - "internalType": "uint64" - }, - { - "name": "requiredDVNCount", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "optionalDVNCount", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "optionalDVNThreshold", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "requiredDVNs", - "type": "address[]", - "internalType": "address[]" - }, - { - "name": "optionalDVNs", - "type": "address[]", - "internalType": "address[]" - } - ] - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "hashLookup", - "inputs": [ - { "name": "headerHash", "type": "bytes32", "internalType": "bytes32" }, - { "name": "payloadHash", "type": "bytes32", "internalType": "bytes32" }, - { "name": "dvn", "type": "address", "internalType": "address" } - ], - "outputs": [ - { "name": "submitted", "type": "bool", "internalType": "bool" }, - { "name": "confirmations", "type": "uint64", "internalType": "uint64" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "isSupportedEid", - "inputs": [ - { "name": "_eid", "type": "uint32", "internalType": "uint32" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "messageLibType", - "inputs": [], - "outputs": [ - { "name": "", "type": "uint8", "internalType": "enum MessageLibType" } - ], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "owner", - "inputs": [], - "outputs": [{ "name": "", "type": "address", "internalType": "address" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "renounceOwnership", - "inputs": [], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setConfig", - "inputs": [ - { "name": "_oapp", "type": "address", "internalType": "address" }, - { - "name": "_params", - "type": "tuple[]", - "internalType": "struct SetConfigParam[]", - "components": [ - { "name": "eid", "type": "uint32", "internalType": "uint32" }, - { - "name": "configType", - "type": "uint32", - "internalType": "uint32" - }, - { "name": "config", "type": "bytes", "internalType": "bytes" } - ] - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setDefaultUlnConfigs", - "inputs": [ - { - "name": "_params", - "type": "tuple[]", - "internalType": "struct SetDefaultUlnConfigParam[]", - "components": [ - { "name": "eid", "type": "uint32", "internalType": "uint32" }, - { - "name": "config", - "type": "tuple", - "internalType": "struct UlnConfig", - "components": [ - { - "name": "confirmations", - "type": "uint64", - "internalType": "uint64" - }, - { - "name": "requiredDVNCount", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "optionalDVNCount", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "optionalDVNThreshold", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "requiredDVNs", - "type": "address[]", - "internalType": "address[]" - }, - { - "name": "optionalDVNs", - "type": "address[]", - "internalType": "address[]" - } - ] - } - ] - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "supportsInterface", - "inputs": [ - { "name": "_interfaceId", "type": "bytes4", "internalType": "bytes4" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "transferOwnership", - "inputs": [ - { "name": "newOwner", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "verifiable", - "inputs": [ - { - "name": "_config", - "type": "tuple", - "internalType": "struct UlnConfig", - "components": [ - { - "name": "confirmations", - "type": "uint64", - "internalType": "uint64" - }, - { - "name": "requiredDVNCount", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "optionalDVNCount", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "optionalDVNThreshold", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "requiredDVNs", - "type": "address[]", - "internalType": "address[]" - }, - { - "name": "optionalDVNs", - "type": "address[]", - "internalType": "address[]" - } - ] - }, - { "name": "_headerHash", "type": "bytes32", "internalType": "bytes32" }, - { "name": "_payloadHash", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "verify", - "inputs": [ - { "name": "_packetHeader", "type": "bytes", "internalType": "bytes" }, - { - "name": "_payloadHash", - "type": "bytes32", - "internalType": "bytes32" - }, - { "name": "_confirmations", "type": "uint64", "internalType": "uint64" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "version", - "inputs": [], - "outputs": [ - { "name": "major", "type": "uint64", "internalType": "uint64" }, - { "name": "minor", "type": "uint8", "internalType": "uint8" }, - { "name": "endpointVersion", "type": "uint8", "internalType": "uint8" } - ], - "stateMutability": "pure" - }, - { - "type": "event", - "name": "DefaultUlnConfigsSet", - "inputs": [ - { - "name": "params", - "type": "tuple[]", - "indexed": false, - "internalType": "struct SetDefaultUlnConfigParam[]", - "components": [ - { "name": "eid", "type": "uint32", "internalType": "uint32" }, - { - "name": "config", - "type": "tuple", - "internalType": "struct UlnConfig", - "components": [ - { - "name": "confirmations", - "type": "uint64", - "internalType": "uint64" - }, - { - "name": "requiredDVNCount", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "optionalDVNCount", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "optionalDVNThreshold", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "requiredDVNs", - "type": "address[]", - "internalType": "address[]" - }, - { - "name": "optionalDVNs", - "type": "address[]", - "internalType": "address[]" - } - ] - } - ] - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "OwnershipTransferred", - "inputs": [ - { - "name": "previousOwner", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "newOwner", - "type": "address", - "indexed": true, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "PayloadVerified", - "inputs": [ - { - "name": "dvn", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "header", - "type": "bytes", - "indexed": false, - "internalType": "bytes" - }, - { - "name": "confirmations", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - }, - { - "name": "proofHash", - "type": "bytes32", - "indexed": false, - "internalType": "bytes32" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "UlnConfigSet", - "inputs": [ - { - "name": "oapp", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "eid", - "type": "uint32", - "indexed": false, - "internalType": "uint32" - }, - { - "name": "config", - "type": "tuple", - "indexed": false, - "internalType": "struct UlnConfig", - "components": [ - { - "name": "confirmations", - "type": "uint64", - "internalType": "uint64" - }, - { - "name": "requiredDVNCount", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "optionalDVNCount", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "optionalDVNThreshold", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "requiredDVNs", - "type": "address[]", - "internalType": "address[]" - }, - { - "name": "optionalDVNs", - "type": "address[]", - "internalType": "address[]" - } - ] - } - ], - "anonymous": false - }, - { "type": "error", "name": "LZ_MessageLib_OnlyEndpoint", "inputs": [] }, - { "type": "error", "name": "LZ_ULN_AtLeastOneDVN", "inputs": [] }, - { - "type": "error", - "name": "LZ_ULN_InvalidConfigType", - "inputs": [ - { "name": "configType", "type": "uint32", "internalType": "uint32" } - ] - }, - { "type": "error", "name": "LZ_ULN_InvalidConfirmations", "inputs": [] }, - { "type": "error", "name": "LZ_ULN_InvalidEid", "inputs": [] }, - { "type": "error", "name": "LZ_ULN_InvalidOptionalDVNCount", "inputs": [] }, - { - "type": "error", - "name": "LZ_ULN_InvalidOptionalDVNThreshold", - "inputs": [] - }, - { "type": "error", "name": "LZ_ULN_InvalidPacketHeader", "inputs": [] }, - { "type": "error", "name": "LZ_ULN_InvalidPacketVersion", "inputs": [] }, - { "type": "error", "name": "LZ_ULN_InvalidRequiredDVNCount", "inputs": [] }, - { "type": "error", "name": "LZ_ULN_Unsorted", "inputs": [] }, - { - "type": "error", - "name": "LZ_ULN_UnsupportedEid", - "inputs": [{ "name": "eid", "type": "uint32", "internalType": "uint32" }] - }, - { "type": "error", "name": "LZ_ULN_Verifying", "inputs": [] }, - { - "type": "error", - "name": "OwnableInvalidOwner", - "inputs": [ - { "name": "owner", "type": "address", "internalType": "address" } - ] - }, - { - "type": "error", - "name": "OwnableUnauthorizedAccount", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ] - } - ], - "bytecode": { - "object": "0x60c06040523480156200001157600080fd5b50604051620024413803806200244183398101604081905262000034916200013e565b8080816001600160a01b031663416ecebf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000075573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200009b919062000170565b3380620000c257604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b620000cd81620000ee565b506001600160a01b0390911660805263ffffffff1660a05250620001989050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156200015157600080fd5b81516001600160a01b03811681146200016957600080fd5b9392505050565b6000602082840312156200018357600080fd5b815163ffffffff811681146200016957600080fd5b60805160a05161227c620001c5600039600061031e01526000818161041b0152610484015261227c6000f3fe608060405234801561001057600080fd5b506004361061010b5760003560e01c806343ea4fa9116100a25780638da5cb5b116100715780638da5cb5b146102665780639c33abf714610281578063c40ff835146102a1578063e084d952146102b4578063f2fde38b146102c757600080fd5b806343ea4fa91461021857806354fd4d501461022b5780636750cd4c1461024b578063715018a61461025e57600080fd5b806320efd722116100de57806320efd7221461016f57806329460b0b1461018257806339e3f938146101955780633c782a52146101b557600080fd5b806301ffc9a7146101105780630223536e146101385780630894edf11461014d5780631881d94d14610160575b600080fd5b61012361011e3660046116ed565b6102da565b60405190151581526020015b60405180910390f35b61014b61014636600461177b565b610305565b005b61014b61015b3660046117d7565b610317565b600160405161012f9190611822565b61014b61017d3660046118a5565b610482565b61014b6101903660046118f7565b6105a4565b6101a86101a336600461194c565b61073c565b60405161012f9190611a35565b6101f96101c3366004611a48565b600260209081526000938452604080852082529284528284209052825290205460ff81169061010090046001600160401b031682565b6040805192151583526001600160401b0390911660208301520161012f565b6101a861022636600461194c565b610877565b60408051600381526000602082015260029181019190915260600161012f565b610123610259366004611a7d565b610b83565b61014b610b8e565b6000546040516001600160a01b03909116815260200161012f565b61029461028f366004611a98565b610ba2565b60405161012f9190611ad2565b61014b6102af366004611b21565b610c0b565b6101236102c2366004611d10565b610c1b565b61014b6102d5366004611d5d565b610c30565b60006001600160e01b03198216630ab7be9f60e01b14806102ff57506102ff82610c6e565b92915050565b61031184848484610ca3565b50505050565b61034283837f0000000000000000000000000000000000000000000000000000000000000000610d89565b600061034e8484610e0c565b9050600061035c8585610e1e565b9050600061036a8383610877565b905061038e818787604051610380929190611d78565b604051809103902086610e41565b600060405180606001604052808463ffffffff1681526020016103b18989610f91565b81526020016103c08989610faa565b6001600160401b039081169091526040805163a825d74760e01b8152835163ffffffff166004820152602084015160248201529083015190911660448201526001600160a01b038681166064830152608482018890529192507f00000000000000000000000000000000000000000000000000000000000000009091169063a825d7479060a401600060405180830381600087803b15801561046157600080fd5b505af1158015610475573d6000803e3d6000fd5b5050505050505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633146104cb5760405163467409c360e01b815260040160405180910390fd5b60005b8181101561031157368383838181106104e9576104e9611d88565b90506020028101906104fb9190611d9e565b905061051261050d6020830183611a7d565b610fcd565b60026105246040830160208401611a7d565b63ffffffff16036105645761055f61053f6020830183611a7d565b8661054d6040850185611dbe565b81019061055a9190611e04565b610ffb565b61059b565b6105746040820160208301611a7d565b604051635d4be0fd60e11b815263ffffffff90911660048201526024015b60405180910390fd5b506001016104ce565b6105ac611051565b60005b818110156106fe57368383838181106105ca576105ca611d88565b90506020028101906105dc9190611e38565b905060ff6105ed6020830183611e4e565b6105fe906040810190602001611e64565b60ff160361061f576040516341d50bed60e11b815260040160405180910390fd5b60ff61062e6020830183611e4e565b61063f906060810190604001611e64565b60ff16036106605760405163211089b360e11b815260040160405180910390fd5b6001600160401b036106756020830183611e4e565b610683906020810190611e7f565b6001600160401b0316036106aa5760405163281b33d760e11b815260040160405180910390fd5b6106c86106ba6020830183611e4e565b6106c390611e9a565b61107e565b6106f560006106da6020840184611a7d565b6106e76020850185611e4e565b6106f090611e9a565b6110b6565b506001016105af565b507faaf3aaa0c11056e86ac56eb653e25b005ca1a7d4dcd21ba24647f7ab63f3b5608282604051610730929190611f2a565b60405180910390a15050565b61074461162b565b6001600160a01b038316600090815260016020818152604080842063ffffffff87168552825292839020835160c08101855281546001600160401b038116825260ff600160401b8204811683860152600160481b8204811683880152600160501b909104166060820152928101805485518185028101850190965280865293949193608086019383018282801561080457602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116107e6575b505050505081526020016002820180548060200260200160405190810160405280929190818152602001828054801561086657602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610848575b505050505081525050905092915050565b61087f61162b565b63ffffffff821660008181527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49602090815260408083206001600160a01b03881684526001835281842094845293909152902080546001600160401b0316806108f45782546001600160401b03168452610911565b6001600160401b0381811614610911576001600160401b03811684525b8154600160401b900460ff166109ab578254600160401b900460ff16156109a6578260010180548060200260200160405190810160405280929190818152602001828054801561098a57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161096c575b505050505060808501528254600160401b900460ff1660208501525b610a32565b8154600160401b900460ff90811614610a325781600101805480602002602001604051908101604052809291908181526020018280548015610a1657602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116109f8575b505050505060808501528154600160401b900460ff1660208501525b8154600160481b900460ff16610adb578254600160481b900460ff1615610ad65782600201805480602002602001604051908101604052809291908181526020018280548015610aab57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610a8d575b505050505060a0850152825460ff600160481b820481166040870152600160501b9091041660608501525b610b71565b8154600160481b900460ff90811614610b715781600201805480602002602001604051908101604052809291908181526020018280548015610b4657602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610b28575b505050505060a0850152815460ff600160481b820481166040870152600160501b9091041660608501525b610b7a8461107e565b50505092915050565b60006102ff8261134f565b610b96611051565b610ba060006113aa565b565b606060011963ffffffff831601610be357610bbd8385610877565b604051602001610bcd9190611a35565b6040516020818303038152906040529050610c04565b604051635d4be0fd60e11b815263ffffffff83166004820152602401610592565b9392505050565b610c16838383610d89565b505050565b6000610c288484846113fa565b949350505050565b610c38611051565b6001600160a01b038116610c6257604051631e4fbdf760e01b815260006004820152602401610592565b610c6b816113aa565b50565b60006001600160e01b031982166325fc096160e21b14806102ff57506301ffc9a760e01b6001600160e01b03198316146102ff565b604080518082018252600181526001600160401b03831660208201529051600290600090610cd49088908890611d78565b604080519182900390912082526020808301939093529081016000908120868252835281812033808352908452908290208451815495909401516001600160401b03166101000268ffffffffffffffff00199415159490941668ffffffffffffffffff19909516949094179290921790925590517f2cb0eed7538baeae4c6fde038c0fd0384d27de0dd55a228c65847bda6aa1ab5691610d7b91879087908690889061206c565b60405180910390a150505050565b60518214610daa5760405163c9bf37b760e01b815260040160405180910390fd5b6001610db68484611503565b60ff1614610dd757604051633a9ae7b960e01b815260040160405180910390fd5b8063ffffffff16610de88484611525565b63ffffffff1614610c165760405163216964bf60e11b815260040160405180910390fd5b6000610c04610e1b8484611535565b90565b6000610e2e600d600984866120c6565b610e37916120f0565b60e01c9392505050565b610e4c8383836113fa565b610e695760405163130c463560e21b815260040160405180910390fd5b602083015160ff1615610efe5760005b836020015160ff168160ff161015610efc57600083815260026020908152604080832085845290915281206080860151805191929160ff8516908110610ec157610ec1611d88565b6020908102919091018101516001600160a01b03168252810191909152604001600020805468ffffffffffffffffff19169055600101610e79565b505b604083015160ff1615610c165760005b836040015160ff168160ff161015610311576000838152600260209081526040808320858452909152812060a0860151805191929160ff8516908110610f5657610f56611d88565b6020908102919091018101516001600160a01b03168252810191909152604001600020805468ffffffffffffffffff19169055600101610f0e565b6000610fa1602d600d84866120c6565b610c0491612120565b6000610fba6009600184866120c6565b610fc39161213e565b60c01c9392505050565b610fd68161134f565b610c6b57604051633c30434160e21b815263ffffffff82166004820152602401610592565b6110068284836110b6565b6110108284610877565b507f82118522aa536ac0e96cc5c689407ae42b89d592aa133890a01f1509842f50818284836040516110449392919061216c565b60405180910390a1505050565b6000546001600160a01b03163314610ba05760405163118cdaa760e01b8152336004820152602401610592565b602081015160ff161580156110985750606081015160ff16155b15610c6b5760405163ce2c375160e01b815260040160405180910390fd5b602081015160ff90811614806110d15750602081015160ff16155b156110ff57608081015151156110fa576040516341d50bed60e11b815260040160405180910390fd5b611165565b806020015160ff1681608001515114158061113a57506002611123600160ff6121b2565b61112d91906121cb565b60ff16816020015160ff16115b15611158576040516341d50bed60e11b815260040160405180910390fd5b6111658160800151611545565b604081015160ff90811614806111805750604081015160ff16155b156111d45760a081015151156111a95760405163211089b360e11b815260040160405180910390fd5b606081015160ff16156111cf576040516338682fa960e01b815260040160405180910390fd5b611279565b806040015160ff168160a001515114158061120f575060026111f8600160ff6121b2565b61120291906121cb565b60ff16816040015160ff16115b1561122d5760405163211089b360e11b815260040160405180910390fd5b606081015160ff16158061124e5750806040015160ff16816060015160ff16115b1561126c576040516338682fa960e01b815260040160405180910390fd5b6112798160a00151611545565b6001600160a01b038316600090815260016020818152604080842063ffffffff8716855282529283902084518154868401519587015160608801516001600160401b0390931668ffffffffffffffffff1990921691909117600160401b60ff97881602176affff0000000000000000001916600160481b9187169190910260ff60501b191617600160501b95909116949094029390931783556080840151805185949361132b93908501920190611673565b5060a08201518051611347916002840191602090910190611673565b505050505050565b63ffffffff811660009081527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49602052604081208054600160401b900460ff16151580610c04575054600160501b900460ff16151592915050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b602083015160009060ff161561147d5760005b846020015160ff168160ff1610156114655761144f85608001518260ff168151811061143b5761143b611d88565b6020026020010151858588600001516115ac565b61145d576000915050610c04565b60010161140d565b50836040015160ff1660000361147d57506001610c04565b606084015160005b856040015160ff168160ff1610156114f7576114c78660a001518260ff16815181106114b3576114b3611d88565b6020026020010151868689600001516115ac565b156114ef57816114d6816121fb565b9250508160ff166000036114ef57600192505050610c04565b600101611485565b50600095945050505050565b600061151260018284866120c6565b61151b91612218565b60f81c9392505050565b6000610e2e6031602d84866120c6565b6000610fa16051603184866120c6565b6000805b8251811015610c1657600083828151811061156657611566611d88565b60200260200101519050826001600160a01b0316816001600160a01b0316116115a25760405163447516e160e01b815260040160405180910390fd5b9150600101611549565b600083815260026020908152604080832085845282528083206001600160a01b0388168452825280832081518083019092525460ff81161580158084526101009092046001600160401b03169383019390935290916116215750826001600160401b031681602001516001600160401b031610155b9695505050505050565b6040518060c0016040528060006001600160401b03168152602001600060ff168152602001600060ff168152602001600060ff16815260200160608152602001606081525090565b8280548282559060005260206000209081019282156116c8579160200282015b828111156116c857825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190611693565b506116d49291506116d8565b5090565b5b808211156116d457600081556001016116d9565b6000602082840312156116ff57600080fd5b81356001600160e01b031981168114610c0457600080fd5b60008083601f84011261172957600080fd5b5081356001600160401b0381111561174057600080fd5b60208301915083602082850101111561175857600080fd5b9250929050565b80356001600160401b038116811461177657600080fd5b919050565b6000806000806060858703121561179157600080fd5b84356001600160401b038111156117a757600080fd5b6117b387828801611717565b909550935050602085013591506117cc6040860161175f565b905092959194509250565b6000806000604084860312156117ec57600080fd5b83356001600160401b0381111561180257600080fd5b61180e86828701611717565b909790965060209590950135949350505050565b602081016003831061184457634e487b7160e01b600052602160045260246000fd5b91905290565b80356001600160a01b038116811461177657600080fd5b60008083601f84011261187357600080fd5b5081356001600160401b0381111561188a57600080fd5b6020830191508360208260051b850101111561175857600080fd5b6000806000604084860312156118ba57600080fd5b6118c38461184a565b925060208401356001600160401b038111156118de57600080fd5b6118ea86828701611861565b9497909650939450505050565b6000806020838503121561190a57600080fd5b82356001600160401b0381111561192057600080fd5b61192c85828601611861565b90969095509350505050565b803563ffffffff8116811461177657600080fd5b6000806040838503121561195f57600080fd5b6119688361184a565b915061197660208401611938565b90509250929050565b60008151808452602080850194506020840160005b838110156119b95781516001600160a01b031687529582019590820190600101611994565b509495945050505050565b6001600160401b03815116825260ff602082015116602083015260ff604082015116604083015260ff60608201511660608301526000608082015160c06080850152611a1360c085018261197f565b905060a083015184820360a0860152611a2c828261197f565b95945050505050565b602081526000610c0460208301846119c4565b600080600060608486031215611a5d57600080fd5b8335925060208401359150611a746040850161184a565b90509250925092565b600060208284031215611a8f57600080fd5b610c0482611938565b600080600060608486031215611aad57600080fd5b611ab684611938565b9250611ac46020850161184a565b9150611a7460408501611938565b60006020808352835180602085015260005b81811015611b0057858101830151858201604001528201611ae4565b506000604082860101526040601f19601f8301168501019250505092915050565b600080600060408486031215611b3657600080fd5b83356001600160401b03811115611b4c57600080fd5b611b5886828701611717565b9094509250611a74905060208501611938565b634e487b7160e01b600052604160045260246000fd5b60405160c081016001600160401b0381118282101715611ba357611ba3611b6b565b60405290565b803560ff8116811461177657600080fd5b600082601f830112611bcb57600080fd5b813560206001600160401b0380831115611be757611be7611b6b565b8260051b604051601f19603f83011681018181108482111715611c0c57611c0c611b6b565b6040529384526020818701810194908101925087851115611c2c57600080fd5b6020870191505b84821015611c5357611c448261184a565b83529183019190830190611c33565b979650505050505050565b600060c08284031215611c7057600080fd5b611c78611b81565b9050611c838261175f565b8152611c9160208301611ba9565b6020820152611ca260408301611ba9565b6040820152611cb360608301611ba9565b606082015260808201356001600160401b0380821115611cd257600080fd5b611cde85838601611bba565b608084015260a0840135915080821115611cf757600080fd5b50611d0484828501611bba565b60a08301525092915050565b600080600060608486031215611d2557600080fd5b83356001600160401b03811115611d3b57600080fd5b611d4786828701611c5e565b9660208601359650604090950135949350505050565b600060208284031215611d6f57600080fd5b610c048261184a565b8183823760009101908152919050565b634e487b7160e01b600052603260045260246000fd5b60008235605e19833603018112611db457600080fd5b9190910192915050565b6000808335601e19843603018112611dd557600080fd5b8301803591506001600160401b03821115611def57600080fd5b60200191503681900382131561175857600080fd5b600060208284031215611e1657600080fd5b81356001600160401b03811115611e2c57600080fd5b610c2884828501611c5e565b60008235603e19833603018112611db457600080fd5b6000823560be19833603018112611db457600080fd5b600060208284031215611e7657600080fd5b610c0482611ba9565b600060208284031215611e9157600080fd5b610c048261175f565b60006102ff3683611c5e565b6000808335601e19843603018112611ebd57600080fd5b83016020810192503590506001600160401b03811115611edc57600080fd5b8060051b360382131561175857600080fd5b8183526000602080850194508260005b858110156119b9576001600160a01b03611f178361184a565b1687529582019590820190600101611efe565b60208082528181018390526000906040808401600586901b8501820187855b8881101561205e57603f19808985030185528235603e198c3603018112611f6f57600080fd5b8b0163ffffffff611f7f82611938565b1685528781013560be19823603018112611f9857600080fd5b858901889052016001600160401b03611fb08261175f565b1687860152611fc0888201611ba9565b606060ff80831682890152611fd68a8501611ba9565b92506080818416818a0152611fec838601611ba9565b935060a09250818416838a015261200581860186611ea6565b60c08b81015294509150612020905061010089018483611eee565b92505061202f81840184611ea6565b93509050838783030160e0880152612048828483611eee565b978a019796505050928701925050600101611f49565b509098975050505050505050565b6001600160a01b03861681526080602082018190528101849052838560a0830137600060a08583010152600060a0601f19601f87011683010190506001600160401b03841660408301528260608301529695505050505050565b600080858511156120d657600080fd5b838611156120e357600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156121185780818660040360031b1b83161692505b505092915050565b803560208310156102ff57600019602084900360031b1b1692915050565b6001600160c01b031981358181169160088510156121185760089490940360031b84901b1690921692915050565b6001600160a01b038416815263ffffffff83166020820152606060408201819052600090611a2c908301846119c4565b634e487b7160e01b600052601160045260246000fd5b60ff82811682821603908111156102ff576102ff61219c565b600060ff8316806121ec57634e487b7160e01b600052601260045260246000fd5b8060ff84160491505092915050565b600060ff82168061220e5761220e61219c565b6000190192915050565b6001600160f81b031981358181169160018510156121185760019490940360031b84901b169092169291505056fea2646970667358221220f261181fa476bcf41c4bf04e3eda4bd6084e0edf3739fd077cfebd99f1f1561764736f6c63430008160033", - "sourceMap": "895:3062:81:-:0;;;1268:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1336:9;978::1;1010;-1:-1:-1;;;;;989:35:1;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1307:10:81;;1269:95:107;;1322:31;;-1:-1:-1;;;1322:31:107;;1350:1;1322:31;;;740:51:132;713:18;;1322:31:107;;;;;;;1269:95;1373:32;1392:12;1373:18;:32::i;:::-;-1:-1:-1;;;;;;468:20:0;;;;;498;;;;-1:-1:-1;895:3062:81;;-1:-1:-1;895:3062:81;2912:187:107;2985:16;3004:6;;-1:-1:-1;;;;;3020:17:107;;;-1:-1:-1;;;;;;3020:17:107;;;;;;3052:40;;3004:6;;;;;;;3052:40;;2985:16;3052:40;2975:124;2912:187;:::o;14:290:132:-;84:6;137:2;125:9;116:7;112:23;108:32;105:52;;;153:1;150;143:12;105:52;179:16;;-1:-1:-1;;;;;224:31:132;;214:42;;204:70;;270:1;267;260:12;204:70;293:5;14:290;-1:-1:-1;;;14:290:132:o;309:280::-;378:6;431:2;419:9;410:7;406:23;402:32;399:52;;;447:1;444;437:12;399:52;479:9;473:16;529:10;522:5;518:22;511:5;508:33;498:61;;555:1;552;545:12;594:203;895:3062:81;;;;;;;;;;;;;;;;;;;;;;;", - "linkReferences": {} - }, - "deployedBytecode": { - "object": "0x608060405234801561001057600080fd5b506004361061010b5760003560e01c806343ea4fa9116100a25780638da5cb5b116100715780638da5cb5b146102665780639c33abf714610281578063c40ff835146102a1578063e084d952146102b4578063f2fde38b146102c757600080fd5b806343ea4fa91461021857806354fd4d501461022b5780636750cd4c1461024b578063715018a61461025e57600080fd5b806320efd722116100de57806320efd7221461016f57806329460b0b1461018257806339e3f938146101955780633c782a52146101b557600080fd5b806301ffc9a7146101105780630223536e146101385780630894edf11461014d5780631881d94d14610160575b600080fd5b61012361011e3660046116ed565b6102da565b60405190151581526020015b60405180910390f35b61014b61014636600461177b565b610305565b005b61014b61015b3660046117d7565b610317565b600160405161012f9190611822565b61014b61017d3660046118a5565b610482565b61014b6101903660046118f7565b6105a4565b6101a86101a336600461194c565b61073c565b60405161012f9190611a35565b6101f96101c3366004611a48565b600260209081526000938452604080852082529284528284209052825290205460ff81169061010090046001600160401b031682565b6040805192151583526001600160401b0390911660208301520161012f565b6101a861022636600461194c565b610877565b60408051600381526000602082015260029181019190915260600161012f565b610123610259366004611a7d565b610b83565b61014b610b8e565b6000546040516001600160a01b03909116815260200161012f565b61029461028f366004611a98565b610ba2565b60405161012f9190611ad2565b61014b6102af366004611b21565b610c0b565b6101236102c2366004611d10565b610c1b565b61014b6102d5366004611d5d565b610c30565b60006001600160e01b03198216630ab7be9f60e01b14806102ff57506102ff82610c6e565b92915050565b61031184848484610ca3565b50505050565b61034283837f0000000000000000000000000000000000000000000000000000000000000000610d89565b600061034e8484610e0c565b9050600061035c8585610e1e565b9050600061036a8383610877565b905061038e818787604051610380929190611d78565b604051809103902086610e41565b600060405180606001604052808463ffffffff1681526020016103b18989610f91565b81526020016103c08989610faa565b6001600160401b039081169091526040805163a825d74760e01b8152835163ffffffff166004820152602084015160248201529083015190911660448201526001600160a01b038681166064830152608482018890529192507f00000000000000000000000000000000000000000000000000000000000000009091169063a825d7479060a401600060405180830381600087803b15801561046157600080fd5b505af1158015610475573d6000803e3d6000fd5b5050505050505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633146104cb5760405163467409c360e01b815260040160405180910390fd5b60005b8181101561031157368383838181106104e9576104e9611d88565b90506020028101906104fb9190611d9e565b905061051261050d6020830183611a7d565b610fcd565b60026105246040830160208401611a7d565b63ffffffff16036105645761055f61053f6020830183611a7d565b8661054d6040850185611dbe565b81019061055a9190611e04565b610ffb565b61059b565b6105746040820160208301611a7d565b604051635d4be0fd60e11b815263ffffffff90911660048201526024015b60405180910390fd5b506001016104ce565b6105ac611051565b60005b818110156106fe57368383838181106105ca576105ca611d88565b90506020028101906105dc9190611e38565b905060ff6105ed6020830183611e4e565b6105fe906040810190602001611e64565b60ff160361061f576040516341d50bed60e11b815260040160405180910390fd5b60ff61062e6020830183611e4e565b61063f906060810190604001611e64565b60ff16036106605760405163211089b360e11b815260040160405180910390fd5b6001600160401b036106756020830183611e4e565b610683906020810190611e7f565b6001600160401b0316036106aa5760405163281b33d760e11b815260040160405180910390fd5b6106c86106ba6020830183611e4e565b6106c390611e9a565b61107e565b6106f560006106da6020840184611a7d565b6106e76020850185611e4e565b6106f090611e9a565b6110b6565b506001016105af565b507faaf3aaa0c11056e86ac56eb653e25b005ca1a7d4dcd21ba24647f7ab63f3b5608282604051610730929190611f2a565b60405180910390a15050565b61074461162b565b6001600160a01b038316600090815260016020818152604080842063ffffffff87168552825292839020835160c08101855281546001600160401b038116825260ff600160401b8204811683860152600160481b8204811683880152600160501b909104166060820152928101805485518185028101850190965280865293949193608086019383018282801561080457602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116107e6575b505050505081526020016002820180548060200260200160405190810160405280929190818152602001828054801561086657602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610848575b505050505081525050905092915050565b61087f61162b565b63ffffffff821660008181527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49602090815260408083206001600160a01b03881684526001835281842094845293909152902080546001600160401b0316806108f45782546001600160401b03168452610911565b6001600160401b0381811614610911576001600160401b03811684525b8154600160401b900460ff166109ab578254600160401b900460ff16156109a6578260010180548060200260200160405190810160405280929190818152602001828054801561098a57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161096c575b505050505060808501528254600160401b900460ff1660208501525b610a32565b8154600160401b900460ff90811614610a325781600101805480602002602001604051908101604052809291908181526020018280548015610a1657602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116109f8575b505050505060808501528154600160401b900460ff1660208501525b8154600160481b900460ff16610adb578254600160481b900460ff1615610ad65782600201805480602002602001604051908101604052809291908181526020018280548015610aab57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610a8d575b505050505060a0850152825460ff600160481b820481166040870152600160501b9091041660608501525b610b71565b8154600160481b900460ff90811614610b715781600201805480602002602001604051908101604052809291908181526020018280548015610b4657602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610b28575b505050505060a0850152815460ff600160481b820481166040870152600160501b9091041660608501525b610b7a8461107e565b50505092915050565b60006102ff8261134f565b610b96611051565b610ba060006113aa565b565b606060011963ffffffff831601610be357610bbd8385610877565b604051602001610bcd9190611a35565b6040516020818303038152906040529050610c04565b604051635d4be0fd60e11b815263ffffffff83166004820152602401610592565b9392505050565b610c16838383610d89565b505050565b6000610c288484846113fa565b949350505050565b610c38611051565b6001600160a01b038116610c6257604051631e4fbdf760e01b815260006004820152602401610592565b610c6b816113aa565b50565b60006001600160e01b031982166325fc096160e21b14806102ff57506301ffc9a760e01b6001600160e01b03198316146102ff565b604080518082018252600181526001600160401b03831660208201529051600290600090610cd49088908890611d78565b604080519182900390912082526020808301939093529081016000908120868252835281812033808352908452908290208451815495909401516001600160401b03166101000268ffffffffffffffff00199415159490941668ffffffffffffffffff19909516949094179290921790925590517f2cb0eed7538baeae4c6fde038c0fd0384d27de0dd55a228c65847bda6aa1ab5691610d7b91879087908690889061206c565b60405180910390a150505050565b60518214610daa5760405163c9bf37b760e01b815260040160405180910390fd5b6001610db68484611503565b60ff1614610dd757604051633a9ae7b960e01b815260040160405180910390fd5b8063ffffffff16610de88484611525565b63ffffffff1614610c165760405163216964bf60e11b815260040160405180910390fd5b6000610c04610e1b8484611535565b90565b6000610e2e600d600984866120c6565b610e37916120f0565b60e01c9392505050565b610e4c8383836113fa565b610e695760405163130c463560e21b815260040160405180910390fd5b602083015160ff1615610efe5760005b836020015160ff168160ff161015610efc57600083815260026020908152604080832085845290915281206080860151805191929160ff8516908110610ec157610ec1611d88565b6020908102919091018101516001600160a01b03168252810191909152604001600020805468ffffffffffffffffff19169055600101610e79565b505b604083015160ff1615610c165760005b836040015160ff168160ff161015610311576000838152600260209081526040808320858452909152812060a0860151805191929160ff8516908110610f5657610f56611d88565b6020908102919091018101516001600160a01b03168252810191909152604001600020805468ffffffffffffffffff19169055600101610f0e565b6000610fa1602d600d84866120c6565b610c0491612120565b6000610fba6009600184866120c6565b610fc39161213e565b60c01c9392505050565b610fd68161134f565b610c6b57604051633c30434160e21b815263ffffffff82166004820152602401610592565b6110068284836110b6565b6110108284610877565b507f82118522aa536ac0e96cc5c689407ae42b89d592aa133890a01f1509842f50818284836040516110449392919061216c565b60405180910390a1505050565b6000546001600160a01b03163314610ba05760405163118cdaa760e01b8152336004820152602401610592565b602081015160ff161580156110985750606081015160ff16155b15610c6b5760405163ce2c375160e01b815260040160405180910390fd5b602081015160ff90811614806110d15750602081015160ff16155b156110ff57608081015151156110fa576040516341d50bed60e11b815260040160405180910390fd5b611165565b806020015160ff1681608001515114158061113a57506002611123600160ff6121b2565b61112d91906121cb565b60ff16816020015160ff16115b15611158576040516341d50bed60e11b815260040160405180910390fd5b6111658160800151611545565b604081015160ff90811614806111805750604081015160ff16155b156111d45760a081015151156111a95760405163211089b360e11b815260040160405180910390fd5b606081015160ff16156111cf576040516338682fa960e01b815260040160405180910390fd5b611279565b806040015160ff168160a001515114158061120f575060026111f8600160ff6121b2565b61120291906121cb565b60ff16816040015160ff16115b1561122d5760405163211089b360e11b815260040160405180910390fd5b606081015160ff16158061124e5750806040015160ff16816060015160ff16115b1561126c576040516338682fa960e01b815260040160405180910390fd5b6112798160a00151611545565b6001600160a01b038316600090815260016020818152604080842063ffffffff8716855282529283902084518154868401519587015160608801516001600160401b0390931668ffffffffffffffffff1990921691909117600160401b60ff97881602176affff0000000000000000001916600160481b9187169190910260ff60501b191617600160501b95909116949094029390931783556080840151805185949361132b93908501920190611673565b5060a08201518051611347916002840191602090910190611673565b505050505050565b63ffffffff811660009081527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49602052604081208054600160401b900460ff16151580610c04575054600160501b900460ff16151592915050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b602083015160009060ff161561147d5760005b846020015160ff168160ff1610156114655761144f85608001518260ff168151811061143b5761143b611d88565b6020026020010151858588600001516115ac565b61145d576000915050610c04565b60010161140d565b50836040015160ff1660000361147d57506001610c04565b606084015160005b856040015160ff168160ff1610156114f7576114c78660a001518260ff16815181106114b3576114b3611d88565b6020026020010151868689600001516115ac565b156114ef57816114d6816121fb565b9250508160ff166000036114ef57600192505050610c04565b600101611485565b50600095945050505050565b600061151260018284866120c6565b61151b91612218565b60f81c9392505050565b6000610e2e6031602d84866120c6565b6000610fa16051603184866120c6565b6000805b8251811015610c1657600083828151811061156657611566611d88565b60200260200101519050826001600160a01b0316816001600160a01b0316116115a25760405163447516e160e01b815260040160405180910390fd5b9150600101611549565b600083815260026020908152604080832085845282528083206001600160a01b0388168452825280832081518083019092525460ff81161580158084526101009092046001600160401b03169383019390935290916116215750826001600160401b031681602001516001600160401b031610155b9695505050505050565b6040518060c0016040528060006001600160401b03168152602001600060ff168152602001600060ff168152602001600060ff16815260200160608152602001606081525090565b8280548282559060005260206000209081019282156116c8579160200282015b828111156116c857825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190611693565b506116d49291506116d8565b5090565b5b808211156116d457600081556001016116d9565b6000602082840312156116ff57600080fd5b81356001600160e01b031981168114610c0457600080fd5b60008083601f84011261172957600080fd5b5081356001600160401b0381111561174057600080fd5b60208301915083602082850101111561175857600080fd5b9250929050565b80356001600160401b038116811461177657600080fd5b919050565b6000806000806060858703121561179157600080fd5b84356001600160401b038111156117a757600080fd5b6117b387828801611717565b909550935050602085013591506117cc6040860161175f565b905092959194509250565b6000806000604084860312156117ec57600080fd5b83356001600160401b0381111561180257600080fd5b61180e86828701611717565b909790965060209590950135949350505050565b602081016003831061184457634e487b7160e01b600052602160045260246000fd5b91905290565b80356001600160a01b038116811461177657600080fd5b60008083601f84011261187357600080fd5b5081356001600160401b0381111561188a57600080fd5b6020830191508360208260051b850101111561175857600080fd5b6000806000604084860312156118ba57600080fd5b6118c38461184a565b925060208401356001600160401b038111156118de57600080fd5b6118ea86828701611861565b9497909650939450505050565b6000806020838503121561190a57600080fd5b82356001600160401b0381111561192057600080fd5b61192c85828601611861565b90969095509350505050565b803563ffffffff8116811461177657600080fd5b6000806040838503121561195f57600080fd5b6119688361184a565b915061197660208401611938565b90509250929050565b60008151808452602080850194506020840160005b838110156119b95781516001600160a01b031687529582019590820190600101611994565b509495945050505050565b6001600160401b03815116825260ff602082015116602083015260ff604082015116604083015260ff60608201511660608301526000608082015160c06080850152611a1360c085018261197f565b905060a083015184820360a0860152611a2c828261197f565b95945050505050565b602081526000610c0460208301846119c4565b600080600060608486031215611a5d57600080fd5b8335925060208401359150611a746040850161184a565b90509250925092565b600060208284031215611a8f57600080fd5b610c0482611938565b600080600060608486031215611aad57600080fd5b611ab684611938565b9250611ac46020850161184a565b9150611a7460408501611938565b60006020808352835180602085015260005b81811015611b0057858101830151858201604001528201611ae4565b506000604082860101526040601f19601f8301168501019250505092915050565b600080600060408486031215611b3657600080fd5b83356001600160401b03811115611b4c57600080fd5b611b5886828701611717565b9094509250611a74905060208501611938565b634e487b7160e01b600052604160045260246000fd5b60405160c081016001600160401b0381118282101715611ba357611ba3611b6b565b60405290565b803560ff8116811461177657600080fd5b600082601f830112611bcb57600080fd5b813560206001600160401b0380831115611be757611be7611b6b565b8260051b604051601f19603f83011681018181108482111715611c0c57611c0c611b6b565b6040529384526020818701810194908101925087851115611c2c57600080fd5b6020870191505b84821015611c5357611c448261184a565b83529183019190830190611c33565b979650505050505050565b600060c08284031215611c7057600080fd5b611c78611b81565b9050611c838261175f565b8152611c9160208301611ba9565b6020820152611ca260408301611ba9565b6040820152611cb360608301611ba9565b606082015260808201356001600160401b0380821115611cd257600080fd5b611cde85838601611bba565b608084015260a0840135915080821115611cf757600080fd5b50611d0484828501611bba565b60a08301525092915050565b600080600060608486031215611d2557600080fd5b83356001600160401b03811115611d3b57600080fd5b611d4786828701611c5e565b9660208601359650604090950135949350505050565b600060208284031215611d6f57600080fd5b610c048261184a565b8183823760009101908152919050565b634e487b7160e01b600052603260045260246000fd5b60008235605e19833603018112611db457600080fd5b9190910192915050565b6000808335601e19843603018112611dd557600080fd5b8301803591506001600160401b03821115611def57600080fd5b60200191503681900382131561175857600080fd5b600060208284031215611e1657600080fd5b81356001600160401b03811115611e2c57600080fd5b610c2884828501611c5e565b60008235603e19833603018112611db457600080fd5b6000823560be19833603018112611db457600080fd5b600060208284031215611e7657600080fd5b610c0482611ba9565b600060208284031215611e9157600080fd5b610c048261175f565b60006102ff3683611c5e565b6000808335601e19843603018112611ebd57600080fd5b83016020810192503590506001600160401b03811115611edc57600080fd5b8060051b360382131561175857600080fd5b8183526000602080850194508260005b858110156119b9576001600160a01b03611f178361184a565b1687529582019590820190600101611efe565b60208082528181018390526000906040808401600586901b8501820187855b8881101561205e57603f19808985030185528235603e198c3603018112611f6f57600080fd5b8b0163ffffffff611f7f82611938565b1685528781013560be19823603018112611f9857600080fd5b858901889052016001600160401b03611fb08261175f565b1687860152611fc0888201611ba9565b606060ff80831682890152611fd68a8501611ba9565b92506080818416818a0152611fec838601611ba9565b935060a09250818416838a015261200581860186611ea6565b60c08b81015294509150612020905061010089018483611eee565b92505061202f81840184611ea6565b93509050838783030160e0880152612048828483611eee565b978a019796505050928701925050600101611f49565b509098975050505050505050565b6001600160a01b03861681526080602082018190528101849052838560a0830137600060a08583010152600060a0601f19601f87011683010190506001600160401b03841660408301528260608301529695505050505050565b600080858511156120d657600080fd5b838611156120e357600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156121185780818660040360031b1b83161692505b505092915050565b803560208310156102ff57600019602084900360031b1b1692915050565b6001600160c01b031981358181169160088510156121185760089490940360031b84901b1690921692915050565b6001600160a01b038416815263ffffffff83166020820152606060408201819052600090611a2c908301846119c4565b634e487b7160e01b600052601160045260246000fd5b60ff82811682821603908111156102ff576102ff61219c565b600060ff8316806121ec57634e487b7160e01b600052601260045260246000fd5b8060ff84160491505092915050565b600060ff82168061220e5761220e61219c565b6000190192915050565b6001600160f81b031981358181169160018510156121185760019490940360031b84901b169092169291505056fea2646970667358221220f261181fa476bcf41c4bf04e3eda4bd6084e0edf3739fd077cfebd99f1f1561764736f6c63430008160033", - "sourceMap": "895:3062:81:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1355:196;;;;;;:::i;:::-;;:::i;:::-;;;470:14:132;;463:22;445:41;;433:2;418:18;1355:196:81;;;;;;;;3127:169;;;;;;:::i;:::-;;:::i;:::-;;2403:675;;;;;;:::i;:::-;;:::i;1261:128:1:-;1360:22;1261:128;;;;;;:::i;1690:517:81:-;;;;;;:::i;:::-;;:::i;2638:787:15:-;;;;;;:::i;:::-;;:::i;5951:153::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;461:125:13:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;461:125:13;;;;;;;6423:14:132;;6416:22;6398:41;;-1:-1:-1;;;;;6475:31:132;;;6470:2;6455:18;;6448:59;6371:18;461:125:13;6232:281:132;3612:2249:15;;;;;;:::i;:::-;;:::i;3821:134:81:-;;;;3940:1;6710:50:132;;3872:12:81;6791:2:132;6776:18;;6769:45;3946:1:81;6830:18:132;;;6823:45;;;;6698:2;6683:18;3821:134:81;6518:356:132;3695:120:81;;;;;;:::i;:::-;;:::i;2293:101:107:-;;;:::i;1638:85::-;1684:7;1710:6;1638:85;;-1:-1:-1;;;;;1710:6:107;;;7214:51:132;;7202:2;7187:18;1638:85:107;7068:203:132;3380:309:81;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;1144:140:13:-;;;;;;:::i;:::-;;:::i;914:224::-;;;;;;:::i;:::-;;:::i;2543:215:107:-;;;;;;:::i;:::-;;:::i;1355:196:81:-;1433:4;-1:-1:-1;;;;;;1456:47:81;;-1:-1:-1;;;1456:47:81;;:88;;;1507:37;1531:12;1507:23;:37::i;:::-;1449:95;1355:196;-1:-1:-1;;1355:196:81:o;3127:169::-;3237:52;3245:13;;3260:12;3274:14;3237:7;:52::i;:::-;3127:169;;;;:::o;2403:675::-;2502:38;2516:13;;2531:8;2502:13;:38::i;:::-;2593:16;2612:27;:13;;:25;:27::i;:::-;2593:46;;2649:13;2665:22;:13;;:20;:22::i;:::-;2649:38;;2698:23;2724:30;2737:8;2747:6;2724:12;:30::i;:::-;2698:56;;2764:72;2789:6;2807:13;;2797:24;;;;;;;:::i;:::-;;;;;;;;2823:12;2764:24;:72::i;:::-;2847:20;2870:61;;;;;;;;2877:6;2870:61;;;;;;2885:22;:13;;:20;:22::i;:::-;2870:61;;;;2909:21;:13;;:19;:21::i;:::-;-1:-1:-1;;;;;2870:61:81;;;;;;3002:69;;;-1:-1:-1;;;3002:69:81;;12197:13:132;;12212:10;12193:30;3002:69:81;;;12175:49:132;12280:4;12268:17;;12262:24;12240:20;;;12233:54;12335:17;;;12329:24;12325:49;;;12303:20;;;12296:79;-1:-1:-1;;;;;12411:32:132;;;12391:18;;;12384:60;12460:19;;;12453:35;;;2847:84:81;;-1:-1:-1;3023:8:81;3002:37;;;;;;12147:19:132;;3002:69:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2492:586;;;;2403:675;;;:::o;1690:517::-;326:8:0;-1:-1:-1;;;;;326:22:0;338:10;326:22;322:63;;357:28;;-1:-1:-1;;;357:28:0;;;;;;;;;;;322:63;1805:9:81::1;1800:401;1820:18:::0;;::::1;1800:401;;;1859:29;1891:7;;1899:1;1891:10;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;1859:42:::0;-1:-1:-1;1915:30:81::1;1935:9;;::::0;::::1;1859:42:::0;1935:9:::1;:::i;:::-;1915:19;:30::i;:::-;1147:1;1963:16;::::0;;;::::1;::::0;::::1;;:::i;:::-;:35;;::::0;1959:232:::1;;2018:70;2032:9;;::::0;::::1;:5:::0;:9:::1;:::i;:::-;2043:5:::0;2061:12:::1;;::::0;::::1;:5:::0;:12:::1;:::i;:::-;2050:37;;;;;;;:::i;:::-;2018:13;:70::i;:::-;1959:232;;;2159:16;::::0;;;::::1;::::0;::::1;;:::i;:::-;2134:42;::::0;-1:-1:-1;;;2134:42:81;;14021:10:132;14009:23;;;2134:42:81::1;::::0;::::1;13991::132::0;13964:18;;2134:42:81::1;;;;;;;;1959:232;-1:-1:-1::0;1840:3:81::1;;1800:401;;2638:787:15::0;1531:13:107;:11;:13::i;:::-;2747:9:15::1;2742:633;2762:18:::0;;::::1;2742:633;;;2801:39;2843:7;;2851:1;2843:10;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;2801:52:::0;-1:-1:-1;1222:15:15::1;2908:12;;::::0;::::1;2801:52:::0;2908:12:::1;:::i;:::-;:29;::::0;;;;;::::1;;;:::i;:::-;:46;;::::0;2904:91:::1;;2963:32;;-1:-1:-1::0;;;2963:32:15::1;;;;;;;;;;;2904:91;1222:15;3013:12;;::::0;::::1;:5:::0;:12:::1;:::i;:::-;:29;::::0;;;;;::::1;;;:::i;:::-;:46;;::::0;3009:91:::1;;3068:32;;-1:-1:-1::0;;;3068:32:15::1;;;;;;;;;;;3009:91;-1:-1:-1::0;;;;;3118:12:15::1;;::::0;::::1;:5:::0;:12:::1;:::i;:::-;:26;::::0;::::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;;;;;3118:47:15::1;::::0;3114:89:::1;;3174:29;;-1:-1:-1::0;;;3174:29:15::1;;;;;;;;;;;3114:89;3264:34;3285:12;;::::0;::::1;:5:::0;:12:::1;:::i;:::-;3264:34;;;:::i;:::-;:20;:34::i;:::-;3313:51;1106:1;3340:9;;::::0;::::1;:5:::0;:9:::1;:::i;:::-;3351:12;;::::0;::::1;:5:::0;:12:::1;:::i;:::-;3313:51;;;:::i;:::-;:10;:51::i;:::-;-1:-1:-1::0;2782:3:15::1;;2742:633;;;;3389:29;3410:7;;3389:29;;;;;;;:::i;:::-;;;;;;;;2638:787:::0;;:::o;5951:153::-;6033:16;;:::i;:::-;-1:-1:-1;;;;;6068:17:15;;;;;;:10;:17;;;;;;;;:29;;;;;;;;;;;6061:36;;;;;;;;;-1:-1:-1;;;;;6061:36:15;;;;;-1:-1:-1;;;6061:36:15;;;;;;;;-1:-1:-1;;;6061:36:15;;;;;;;;-1:-1:-1;;;6061:36:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6068:29;;6061:36;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6061:36:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6061:36:15;;;;;;;;;;;;;;;;;;;;;;;;;;;5951:153;;;;:::o;3612:2249::-;3689:26;;:::i;:::-;3761:38;;;3727:31;3761:38;;;:26;;:38;;;:26;:38;;;-1:-1:-1;;;;;3842:17:15;;;;3761:10;3842:17;;;;;:29;;;;;;;;;3951:26;;-1:-1:-1;;;;;3951:26:15;;3987:297;;4057:27;;-1:-1:-1;;;;;4057:27:15;4031:53;;3987:297;;;-1:-1:-1;;;;;4105:34:15;;;;4101:183;;-1:-1:-1;;;;;4234:39:15;;;;4101:183;4346:29;;-1:-1:-1;;;4346:29:15;;:40;:29;4342:604;;4406:30;;-1:-1:-1;;;4406:30:15;;;;:34;4402:253;;4537:13;:26;;4512:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4512:51:15;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4512:22:15;;;:51;4610:30;;-1:-1:-1;;;4610:30:15;;;;4581:26;;;:59;4402:253;4342:604;;;4709:29;;-1:-1:-1;;;4709:29:15;;1222:15;4709:29;;;:46;4705:211;;4800:12;:25;;4775:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4775:50:15;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4775:22:15;;;:50;4872:29;;-1:-1:-1;;;4872:29:15;;;;4843:26;;;:58;4705:211;4960:29;;-1:-1:-1;;;4960:29:15;;:40;:29;4956:733;;5020:30;;-1:-1:-1;;;5020:30:15;;;;:34;5016:338;;5151:13;:26;;5126:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5126:51:15;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5126:22:15;;;:51;5224:30;;;-1:-1:-1;;;5224:30:15;;;;5195:26;;;:59;-1:-1:-1;;;5305:34:15;;;;-1:-1:-1;5272:30:15;;:67;5016:338;4956:733;;;5388:29;;-1:-1:-1;;;5388:29:15;;1222:15;5388:29;;;:46;5384:295;;5479:12;:25;;5454:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5454:50:15;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5454:22:15;;;:50;5551:29;;;-1:-1:-1;;;5551:29:15;;;;5522:26;;;:58;-1:-1:-1;;;5631:33:15;;;;-1:-1:-1;5598:30:15;;:66;5384:295;5823:31;5844:9;5823:20;:31::i;:::-;3717:2144;;;3612:2249;;;;:::o;3695:120:81:-;3764:4;3787:21;3803:4;3787:15;:21::i;2293:101:107:-;1531:13;:11;:13::i;:::-;2357:30:::1;2384:1;2357:18;:30::i;:::-;2293:101::o:0;3380:309:81:-;3479:12;-1:-1:-1;;3507:30:81;;;;3503:180;;3571:25;3584:5;3591:4;3571:12;:25::i;:::-;3560:37;;;;;;;;:::i;:::-;;;;;;;;;;;;;3553:44;;;;3503:180;3635:37;;-1:-1:-1;;;3635:37:81;;14021:10:132;14009:23;;3635:37:81;;;13991:42:132;13964:18;;3635:37:81;13847:192:132;3503:180:81;3380:309;;;;;:::o;1144:140:13:-;1238:39;1252:13;;1267:9;1238:13;:39::i;:::-;1144:140;;;:::o;914:224::-;1056:4;1079:52;1096:7;1105:11;1118:12;1079:16;:52::i;:::-;1072:59;914:224;-1:-1:-1;;;;914:224:13:o;2543:215:107:-;1531:13;:11;:13::i;:::-;-1:-1:-1;;;;;2627:22:107;::::1;2623:91;;2672:31;::::0;-1:-1:-1;;;2672:31:107;;2700:1:::1;2672:31;::::0;::::1;7214:51:132::0;7187:18;;2672:31:107::1;7068:203:132::0;2623:91:107::1;2723:28;2742:8;2723:18;:28::i;:::-;2543:215:::0;:::o;1036:219:1:-;1139:4;-1:-1:-1;;;;;;1162:45:1;;-1:-1:-1;;;1162:45:1;;:86;;-1:-1:-1;;;;;;;;;;862:40:123;;;1211:37:1;763:146:123;1409:304:13;1585:34;;;;;;;;1598:4;1585:34;;-1:-1:-1;;;;;1585:34:13;;;;;;1531:24;;1520:10;;-1:-1:-1;;1531:24:13;;1541:13;;;;1531:24;:::i;:::-;;;;;;;;;;;1520:36;;;;;;;;;;;;;-1:-1:-1;1520:36:13;;;:50;;;;;;;;1571:10;1520:62;;;;;;;;;;:99;;;;;;;;;-1:-1:-1;;;;;1520:99:13;;;-1:-1:-1;;1520:99:13;;;;;;;-1:-1:-1;;1520:99:13;;;;;;;;;;;;;;1634:72;;;;;;1662:13;;;;1677:14;;1557:12;;1634:72;:::i;:::-;;;;;;;;1409:304;;;;:::o;2929:514::-;3104:2;3080:26;;3076:67;;3115:28;;-1:-1:-1;;;3115:28:13;;;;;;;;;;;3076:67;319:1:48;3216:23:13;:13;;:21;:23::i;:::-;:55;;;3212:97;;3280:29;;-1:-1:-1;;;3280:29:13;;;;;;;;;;;3212:97;3399:9;3373:35;;:22;:13;;:20;:22::i;:::-;:35;;;3369:67;;3417:19;;-1:-1:-1;;;3417:19:13;;;;;;;;;;;2976:130:48;3044:7;3070:29;:17;3079:7;;3070:8;:17::i;:::-;1210:15:40;1084:151;2230:148:48;2293:6;2332:37;605:2;557:1;2332:7;;:37;:::i;:::-;2325:45;;;:::i;:::-;2318:53;;;2230:148;-1:-1:-1;;;2230:148:48:o;2166:757:13:-;2293:52;2310:7;2319:11;2332:12;2293:16;:52::i;:::-;2288:109;;2368:18;;-1:-1:-1;;;2368:18:13;;;;;;;;;;;2288:109;2448:24;;;;:28;;;2444:213;;2497:7;2492:155;2514:7;:24;;;2510:28;;:1;:28;;;2492:155;;;2570:23;;;;:10;:23;;;;;;;;:37;;;;;;;;2608:20;;;;:23;;2570:37;;:23;2608;;;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;2570:62:13;;;;;;;;;;;-1:-1:-1;2570:62:13;2563:69;;-1:-1:-1;;2563:69:13;;;;2540:3;2492:155;;;;2444:213;2708:24;;;;:28;;;2704:213;;2757:7;2752:155;2774:7;:24;;;2770:28;;:1;:28;;;2752:155;;;2830:23;;;;:10;:23;;;;;;;;:37;;;;;;;;2868:20;;;;:23;;2830:37;;:23;2868;;;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;2830:62:13;;;;;;;;;;;-1:-1:-1;2830:62:13;2823:69;;-1:-1:-1;;2823:69:13;;;;2800:3;2752:155;;2384:142:48;2447:7;2481:37;655:2;605;2481:7;;:37;:::i;:::-;2473:46;;;:::i;2078:146::-;2140:6;2179:36;557:1;493;2179:7;;:36;:::i;:::-;2172:44;;;:::i;:::-;2165:52;;;2078:146;-1:-1:-1;;;2078:146:48:o;6870:153:15:-;6947:27;6963:10;6947:15;:27::i;:::-;6942:74;;6983:33;;-1:-1:-1;;;6983:33:15;;14021:10:132;14009:23;;6983:33:15;;;13991:42:132;13964:18;;6983:33:15;13847:192:132;6191:318:15;6292:37;6303:5;6310:10;6322:6;6292:10;:37::i;:::-;6417:31;6430:5;6437:10;6417:12;:31::i;:::-;;6463:39;6476:5;6483:10;6495:6;6463:39;;;;;;;;:::i;:::-;;;;;;;;6191:318;;;:::o;1796:162:107:-;1684:7;1710:6;-1:-1:-1;;;;;1710:6:107;735:10:117;1855:23:107;1851:101;;1901:40;;-1:-1:-1;;;1901:40:107;;735:10:117;1901:40:107;;;7214:51:132;7187:18;;1901:40:107;7068:203:132;7110:187:15;7193:24;;;;:29;;;:66;;;;-1:-1:-1;7226:28:15;;;;:33;;;7193:66;7189:101;;;7268:22;;-1:-1:-1;;;7268:22:15;;;;;;;;;;;7392:2122;7709:23;;;;1222:15;7709:40;;;;;:78;;-1:-1:-1;7753:23:15;;;;:34;;;7709:78;7705:423;;;7807:19;;;;:26;:31;7803:76;;7847:32;;-1:-1:-1;;;7847:32:15;;;;;;;;;;;7803:76;7705:423;;;7944:6;:23;;;7914:53;;:6;:19;;;:26;:53;;:92;;;-1:-1:-1;1533:1:15;1510:19;1528:1;1510:15;:19;:::i;:::-;1509:25;;;;:::i;:::-;7971:35;;:6;:23;;;:35;;;7914:92;7910:153;;;8031:32;;-1:-1:-1;;;8031:32:15;;;;;;;;;;;7910:153;8077:40;8097:6;:19;;;8077;:40::i;:::-;8687:23;;;;1222:15;8687:40;;;;;:78;;-1:-1:-1;8731:23:15;;;;:34;;;8687:78;8683:686;;;8785:19;;;;:26;:31;8781:76;;8825:32;;-1:-1:-1;;;8825:32:15;;;;;;;;;;;8781:76;8875:27;;;;:32;;;8871:81;;8916:36;;-1:-1:-1;;;8916:36:15;;;;;;;;;;;8871:81;8683:686;;;9017:6;:23;;;8987:53;;:6;:19;;;:26;:53;;:92;;;-1:-1:-1;1533:1:15;1510:19;1528:1;1510:15;:19;:::i;:::-;1509:25;;;;:::i;:::-;9044:35;;:6;:23;;;:35;;;8987:92;8983:153;;;9104:32;;-1:-1:-1;;;9104:32:15;;;;;;;;;;;8983:153;9154:27;;;;:32;;;;:89;;;9220:6;:23;;;9190:53;;:6;:27;;;:53;;;9154:89;9150:154;;;9268:36;;-1:-1:-1;;;9268:36:15;;;;;;;;;;;9150:154;9318:40;9338:6;:19;;;9318;:40::i;:::-;-1:-1:-1;;;;;9475:17:15;;;;;;:10;:17;;;;;;;;:23;;;;;;;;;;;:32;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9475:32:15;;;-1:-1:-1;;9475:32:15;;;;;;;-1:-1:-1;;;9475:32:15;;;;;;-1:-1:-1;;9475:32:15;-1:-1:-1;;;9475:32:15;;;;;;;-1:-1:-1;;;;9475:32:15;;-1:-1:-1;;;9475:32:15;;;;;;;;;;;;;;;;;;;;;;:23;:32;;;;;;;;;:::i;:::-;-1:-1:-1;9475:32:15;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;7392:2122:15:o;6609:255::-;6726:38;;;6676:4;6726:38;;;:26;;:38;:26;:38;;6781:30;;-1:-1:-1;;;6781:30:15;;;;:34;;;:76;;-1:-1:-1;6819:34:15;-1:-1:-1;;;6819:34:15;;;;:38;;;;-1:-1:-1;;6609:255:15:o;2912:187:107:-;2985:16;3004:6;;-1:-1:-1;;;;;3020:17:107;;;-1:-1:-1;;;;;;3020:17:107;;;;;;3052:40;;3004:6;;;;;;;3052:40;;2985:16;3052:40;2975:124;2912:187;:::o;3573:1386:13:-;3778:24;;;;3721:4;;3778:28;;;3774:549;;3827:7;3822:302;3844:7;:24;;;3840:28;;:1;:28;;;3822:302;;;3898:84;3908:7;:20;;;3929:1;3908:23;;;;;;;;;;:::i;:::-;;;;;;;3933:11;3946:12;3960:7;:21;;;3898:9;:84::i;:::-;3893:217;;4086:5;4079:12;;;;;3893:217;3870:3;;3822:302;;;;4141:7;:24;;;:29;;4169:1;4141:29;4137:176;;-1:-1:-1;4294:4:13;4287:11;;4137:176;4404:28;;;;4386:15;4442:449;4464:7;:24;;;4460:28;;:1;:28;;;4442:449;;;4513:84;4523:7;:20;;;4544:1;4523:23;;;;;;;;;;:::i;:::-;;;;;;;4548:11;4561:12;4575:7;:21;;;4513:9;:84::i;:::-;4509:372;;;4696:11;;;;:::i;:::-;;;;4729:9;:14;;4742:1;4729:14;4725:142;;4844:4;4837:11;;;;;;4725:142;4490:3;;4442:449;;;-1:-1:-1;4947:5:13;;3573:1386;-1:-1:-1;;;;;3573:1386:13:o;1919:153:48:-;1983:5;2020:43;493:1;1983:5;2020:7;;:43;:::i;:::-;2013:51;;;:::i;:::-;2007:58;;;1919:153;-1:-1:-1;;;1919:153:48:o;2671:150::-;2734:6;2773:39;706:2;655;2773:7;;:39;:::i;2827:143::-;2892:7;2926:36;785:2;706;2926:7;;:36;:::i;9520:322:15:-;9596:15;9639:9;9634:202;9658:5;:12;9654:1;:16;9634:202;;;9691:11;9705:5;9711:1;9705:8;;;;;;;;:::i;:::-;;;;;;;9691:22;;9738:7;-1:-1:-1;;;;;9731:14:15;:3;-1:-1:-1;;;;;9731:14:15;;9727:44;;9754:17;;-1:-1:-1;;;9754:17:15;;;;;;;;;;;9727:44;9822:3;-1:-1:-1;9672:3:15;;9634:202;;1719:441:13;1886:13;1946:23;;;:10;:23;;;;;;;;:37;;;;;;;;-1:-1:-1;;;;;1946:43:13;;;;;;;;;1911:78;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1911:78:13;;;;;;;;;;2076:77;;;2132:21;-1:-1:-1;;;;;2102:51:13;:12;:26;;;-1:-1:-1;;;;;2102:51:13;;;2076:77;2065:88;1719:441;-1:-1:-1;;;;;;1719:441:13:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:286:132;72:6;125:2;113:9;104:7;100:23;96:32;93:52;;;141:1;138;131:12;93:52;167:23;;-1:-1:-1;;;;;;219:32:132;;209:43;;199:71;;266:1;263;256:12;497:347;548:8;558:6;612:3;605:4;597:6;593:17;589:27;579:55;;630:1;627;620:12;579:55;-1:-1:-1;653:20:132;;-1:-1:-1;;;;;685:30:132;;682:50;;;728:1;725;718:12;682:50;765:4;757:6;753:17;741:29;;817:3;810:4;801:6;793;789:19;785:30;782:39;779:59;;;834:1;831;824:12;779:59;497:347;;;;;:::o;849:171::-;916:20;;-1:-1:-1;;;;;965:30:132;;955:41;;945:69;;1010:1;1007;1000:12;945:69;849:171;;;:::o;1025:549::-;1112:6;1120;1128;1136;1189:2;1177:9;1168:7;1164:23;1160:32;1157:52;;;1205:1;1202;1195:12;1157:52;1245:9;1232:23;-1:-1:-1;;;;;1270:6:132;1267:30;1264:50;;;1310:1;1307;1300:12;1264:50;1349:58;1399:7;1390:6;1379:9;1375:22;1349:58;:::i;:::-;1426:8;;-1:-1:-1;1323:84:132;-1:-1:-1;;1508:2:132;1493:18;;1480:32;;-1:-1:-1;1531:37:132;1564:2;1549:18;;1531:37;:::i;:::-;1521:47;;1025:549;;;;;;;:::o;1579:477::-;1658:6;1666;1674;1727:2;1715:9;1706:7;1702:23;1698:32;1695:52;;;1743:1;1740;1733:12;1695:52;1783:9;1770:23;-1:-1:-1;;;;;1808:6:132;1805:30;1802:50;;;1848:1;1845;1838:12;1802:50;1887:58;1937:7;1928:6;1917:9;1913:22;1887:58;:::i;:::-;1964:8;;1861:84;;-1:-1:-1;2046:2:132;2031:18;;;;2018:32;;1579:477;-1:-1:-1;;;;1579:477:132:o;2061:347::-;2212:2;2197:18;;2245:1;2234:13;;2224:144;;2290:10;2285:3;2281:20;2278:1;2271:31;2325:4;2322:1;2315:15;2353:4;2350:1;2343:15;2224:144;2377:25;;;2061:347;:::o;2413:173::-;2481:20;;-1:-1:-1;;;;;2530:31:132;;2520:42;;2510:70;;2576:1;2573;2566:12;2591:390;2677:8;2687:6;2741:3;2734:4;2726:6;2722:17;2718:27;2708:55;;2759:1;2756;2749:12;2708:55;-1:-1:-1;2782:20:132;;-1:-1:-1;;;;;2814:30:132;;2811:50;;;2857:1;2854;2847:12;2811:50;2894:4;2886:6;2882:17;2870:29;;2954:3;2947:4;2937:6;2934:1;2930:14;2922:6;2918:27;2914:38;2911:47;2908:67;;;2971:1;2968;2961:12;2986:568;3115:6;3123;3131;3184:2;3172:9;3163:7;3159:23;3155:32;3152:52;;;3200:1;3197;3190:12;3152:52;3223:29;3242:9;3223:29;:::i;:::-;3213:39;;3303:2;3292:9;3288:18;3275:32;-1:-1:-1;;;;;3322:6:132;3319:30;3316:50;;;3362:1;3359;3352:12;3316:50;3401:93;3486:7;3477:6;3466:9;3462:22;3401:93;:::i;:::-;2986:568;;3513:8;;-1:-1:-1;3375:119:132;;-1:-1:-1;;;;2986:568:132:o;3559:504::-;3689:6;3697;3750:2;3738:9;3729:7;3725:23;3721:32;3718:52;;;3766:1;3763;3756:12;3718:52;3806:9;3793:23;-1:-1:-1;;;;;3831:6:132;3828:30;3825:50;;;3871:1;3868;3861:12;3825:50;3910:93;3995:7;3986:6;3975:9;3971:22;3910:93;:::i;:::-;4022:8;;3884:119;;-1:-1:-1;3559:504:132;-1:-1:-1;;;;3559:504:132:o;4068:163::-;4135:20;;4195:10;4184:22;;4174:33;;4164:61;;4221:1;4218;4211:12;4236:258;4303:6;4311;4364:2;4352:9;4343:7;4339:23;4335:32;4332:52;;;4380:1;4377;4370:12;4332:52;4403:29;4422:9;4403:29;:::i;:::-;4393:39;;4451:37;4484:2;4473:9;4469:18;4451:37;:::i;:::-;4441:47;;4236:258;;;;;:::o;4499:465::-;4552:3;4590:5;4584:12;4617:6;4612:3;4605:19;4643:4;4672;4667:3;4663:14;4656:21;;4711:4;4704:5;4700:16;4734:1;4744:195;4758:6;4755:1;4752:13;4744:195;;;4823:13;;-1:-1:-1;;;;;4819:39:132;4807:52;;4879:12;;;;4914:15;;;;4855:1;4773:9;4744:195;;;-1:-1:-1;4955:3:132;;4499:465;-1:-1:-1;;;;;4499:465:132:o;4969:662::-;-1:-1:-1;;;;;5061:5:132;5055:12;5051:37;5046:3;5039:50;5150:4;5142;5135:5;5131:16;5125:23;5121:34;5114:4;5109:3;5105:14;5098:58;5217:4;5209;5202:5;5198:16;5192:23;5188:34;5181:4;5176:3;5172:14;5165:58;5284:4;5276;5269:5;5265:16;5259:23;5255:34;5248:4;5243:3;5239:14;5232:58;5021:3;5336:4;5329:5;5325:16;5319:23;5374:4;5367;5362:3;5358:14;5351:28;5400:58;5452:4;5447:3;5443:14;5429:12;5400:58;:::i;:::-;5388:70;;5506:4;5499:5;5495:16;5489:23;5554:3;5548:4;5544:14;5537:4;5532:3;5528:14;5521:38;5575:50;5620:4;5604:14;5575:50;:::i;:::-;5568:57;4969:662;-1:-1:-1;;;;;4969:662:132:o;5636:264::-;5819:2;5808:9;5801:21;5782:4;5839:55;5890:2;5879:9;5875:18;5867:6;5839:55;:::i;5905:322::-;5982:6;5990;5998;6051:2;6039:9;6030:7;6026:23;6022:32;6019:52;;;6067:1;6064;6057:12;6019:52;6103:9;6090:23;6080:33;;6160:2;6149:9;6145:18;6132:32;6122:42;;6183:38;6217:2;6206:9;6202:18;6183:38;:::i;:::-;6173:48;;5905:322;;;;;:::o;6879:184::-;6937:6;6990:2;6978:9;6969:7;6965:23;6961:32;6958:52;;;7006:1;7003;6996:12;6958:52;7029:28;7047:9;7029:28;:::i;7276:330::-;7351:6;7359;7367;7420:2;7408:9;7399:7;7395:23;7391:32;7388:52;;;7436:1;7433;7426:12;7388:52;7459:28;7477:9;7459:28;:::i;:::-;7449:38;;7506;7540:2;7529:9;7525:18;7506:38;:::i;:::-;7496:48;;7563:37;7596:2;7585:9;7581:18;7563:37;:::i;7611:546::-;7721:4;7750:2;7779;7768:9;7761:21;7811:6;7805:13;7854:6;7849:2;7838:9;7834:18;7827:34;7879:1;7889:140;7903:6;7900:1;7897:13;7889:140;;;7998:14;;;7994:23;;7988:30;7964:17;;;7983:2;7960:26;7953:66;7918:10;;7889:140;;;7893:3;8078:1;8073:2;8064:6;8053:9;8049:22;8045:31;8038:42;8148:2;8141;8137:7;8132:2;8124:6;8120:15;8116:29;8105:9;8101:45;8097:54;8089:62;;;;7611:546;;;;:::o;8162:481::-;8240:6;8248;8256;8309:2;8297:9;8288:7;8284:23;8280:32;8277:52;;;8325:1;8322;8315:12;8277:52;8365:9;8352:23;-1:-1:-1;;;;;8390:6:132;8387:30;8384:50;;;8430:1;8427;8420:12;8384:50;8469:58;8519:7;8510:6;8499:9;8495:22;8469:58;:::i;:::-;8546:8;;-1:-1:-1;8443:84:132;-1:-1:-1;8600:37:132;;-1:-1:-1;8633:2:132;8618:18;;8600:37;:::i;8648:127::-;8709:10;8704:3;8700:20;8697:1;8690:31;8740:4;8737:1;8730:15;8764:4;8761:1;8754:15;8780:248;8847:2;8841:9;8889:4;8877:17;;-1:-1:-1;;;;;8909:34:132;;8945:22;;;8906:62;8903:88;;;8971:18;;:::i;:::-;9007:2;9000:22;8780:248;:::o;9033:156::-;9099:20;;9159:4;9148:16;;9138:27;;9128:55;;9179:1;9176;9169:12;9194:914;9248:5;9301:3;9294:4;9286:6;9282:17;9278:27;9268:55;;9319:1;9316;9309:12;9268:55;9355:6;9342:20;9381:4;-1:-1:-1;;;;;9441:2:132;9437;9434:10;9431:36;;;9447:18;;:::i;:::-;9493:2;9490:1;9486:10;9525:2;9519:9;9588:2;9584:7;9579:2;9575;9571:11;9567:25;9559:6;9555:38;9643:6;9631:10;9628:22;9623:2;9611:10;9608:18;9605:46;9602:72;;;9654:18;;:::i;:::-;9690:2;9683:22;9740:18;;;9786:4;9818:15;;;9814:26;;;9774:17;;;;-1:-1:-1;9852:15:132;;;9849:35;;;9880:1;9877;9870:12;9849:35;9916:4;9908:6;9904:17;9893:28;;9930:148;9946:6;9941:3;9938:15;9930:148;;;10012:23;10031:3;10012:23;:::i;:::-;10000:36;;10056:12;;;;9963;;;;9930:148;;;10096:6;9194:914;-1:-1:-1;;;;;;;9194:914:132:o;10113:849::-;10169:5;10217:4;10205:9;10200:3;10196:19;10192:30;10189:50;;;10235:1;10232;10225:12;10189:50;10257:17;;:::i;:::-;10248:26;;10297:28;10315:9;10297:28;:::i;:::-;10290:5;10283:43;10358:36;10390:2;10379:9;10375:18;10358:36;:::i;:::-;10353:2;10346:5;10342:14;10335:60;10427:36;10459:2;10448:9;10444:18;10427:36;:::i;:::-;10422:2;10415:5;10411:14;10404:60;10496:36;10528:2;10517:9;10513:18;10496:36;:::i;:::-;10491:2;10484:5;10480:14;10473:60;10584:3;10573:9;10569:19;10556:33;-1:-1:-1;;;;;10649:2:132;10641:6;10638:14;10635:34;;;10665:1;10662;10655:12;10635:34;10702:57;10755:3;10746:6;10735:9;10731:22;10702:57;:::i;:::-;10696:3;10689:5;10685:15;10678:82;10813:3;10802:9;10798:19;10785:33;10769:49;;10843:2;10833:8;10830:16;10827:36;;;10859:1;10856;10849:12;10827:36;;10896:59;10951:3;10940:8;10929:9;10925:24;10896:59;:::i;:::-;10890:3;10883:5;10879:15;10872:84;;10113:849;;;;:::o;10967:485::-;11071:6;11079;11087;11140:2;11128:9;11119:7;11115:23;11111:32;11108:52;;;11156:1;11153;11146:12;11108:52;11196:9;11183:23;-1:-1:-1;;;;;11221:6:132;11218:30;11215:50;;;11261:1;11258;11251:12;11215:50;11284:60;11336:7;11327:6;11316:9;11312:22;11284:60;:::i;:::-;11274:70;11391:2;11376:18;;11363:32;;-1:-1:-1;11442:2:132;11427:18;;;11414:32;;10967:485;-1:-1:-1;;;;10967:485:132:o;11457:186::-;11516:6;11569:2;11557:9;11548:7;11544:23;11540:32;11537:52;;;11585:1;11582;11575:12;11537:52;11608:29;11627:9;11608:29;:::i;11648:271::-;11831:6;11823;11818:3;11805:33;11787:3;11857:16;;11882:13;;;11857:16;11648:271;-1:-1:-1;11648:271:132:o;12499:127::-;12560:10;12555:3;12551:20;12548:1;12541:31;12591:4;12588:1;12581:15;12615:4;12612:1;12605:15;12631:331;12731:4;12789:11;12776:25;12883:2;12879:7;12868:8;12852:14;12848:29;12844:43;12824:18;12820:68;12810:96;;12902:1;12899;12892:12;12810:96;12923:33;;;;;12631:331;-1:-1:-1;;12631:331:132:o;12967:521::-;13044:4;13050:6;13110:11;13097:25;13204:2;13200:7;13189:8;13173:14;13169:29;13165:43;13145:18;13141:68;13131:96;;13223:1;13220;13213:12;13131:96;13250:33;;13302:20;;;-1:-1:-1;;;;;;13334:30:132;;13331:50;;;13377:1;13374;13367:12;13331:50;13410:4;13398:17;;-1:-1:-1;13441:14:132;13437:27;;;13427:38;;13424:58;;;13478:1;13475;13468:12;13493:349;13579:6;13632:2;13620:9;13611:7;13607:23;13603:32;13600:52;;;13648:1;13645;13638:12;13600:52;13688:9;13675:23;-1:-1:-1;;;;;13713:6:132;13710:30;13707:50;;;13753:1;13750;13743:12;13707:50;13776:60;13828:7;13819:6;13808:9;13804:22;13776:60;:::i;14044:341::-;14154:4;14212:11;14199:25;14306:2;14302:7;14291:8;14275:14;14271:29;14267:43;14247:18;14243:68;14233:96;;14325:1;14322;14315:12;14390:327;14485:4;14543:11;14530:25;14637:3;14633:8;14622;14606:14;14602:29;14598:44;14578:18;14574:69;14564:97;;14657:1;14654;14647:12;14722:182;14779:6;14832:2;14820:9;14811:7;14807:23;14803:32;14800:52;;;14848:1;14845;14838:12;14800:52;14871:27;14888:9;14871:27;:::i;14909:184::-;14967:6;15020:2;15008:9;14999:7;14995:23;14991:32;14988:52;;;15036:1;15033;15026:12;14988:52;15059:28;15077:9;15059:28;:::i;15098:199::-;15204:9;15241:50;15276:14;15269:5;15241:50;:::i;15302:520::-;15372:5;15379:6;15439:3;15426:17;15525:2;15521:7;15510:8;15494:14;15490:29;15486:43;15466:18;15462:68;15452:96;;15544:1;15541;15534:12;15452:96;15572:33;;15676:4;15663:18;;;-1:-1:-1;15624:21:132;;-1:-1:-1;;;;;;15693:30:132;;15690:50;;;15736:1;15733;15726:12;15690:50;15790:6;15787:1;15783:14;15767;15763:35;15756:5;15752:47;15749:67;;;15812:1;15809;15802:12;15827:449;15927:6;15922:3;15915:19;15897:3;15953:4;15982;15977:3;15973:14;15966:21;;16010:5;16033:1;16043:208;16057:6;16054:1;16051:13;16043:208;;;-1:-1:-1;;;;;16122:26:132;16141:6;16122:26;:::i;:::-;16118:52;16106:65;;16191:12;;;;16226:15;;;;16079:1;16072:9;16043:208;;16281:2551;16548:2;16600:21;;;16573:18;;;16656:22;;;16519:4;;16697:2;16715:18;;;16779:1;16775:14;;;16760:30;;16756:39;;16818:6;16519:4;16852:1951;16866:6;16863:1;16860:13;16852:1951;;;16929:2;16925:7;16985:2;16973:9;16965:6;16961:22;16957:31;16952:3;16945:44;17041:6;17028:20;17132:2;17128:7;17119:6;17103:14;17099:27;17095:41;17075:18;17071:66;17061:94;;17151:1;17148;17141:12;17061:94;17181:31;;17270:10;17244:24;17181:31;17244:24;:::i;:::-;17240:41;17232:6;17225:57;17347:2;17340:5;17336:14;17323:28;17436:3;17432:8;17424:5;17408:14;17404:26;17400:41;17378:20;17374:68;17364:96;;17456:1;17453;17446:12;17364:96;17540:15;;;17533:27;;;17488:32;-1:-1:-1;;;;;17601:26:132;17488:32;17601:26;:::i;:::-;17597:51;17592:2;17584:6;17580:15;17573:76;17682:34;17712:2;17703:7;17699:16;17682:34;:::i;:::-;17739:2;17764:4;17823:2;17809:12;17805:21;17800:2;17792:6;17788:15;17781:46;17862:34;17892:2;17883:7;17879:16;17862:34;:::i;:::-;17840:56;;17919:3;17979:2;17963:14;17959:23;17954:2;17946:6;17942:15;17935:48;18018:34;18048:2;18039:7;18035:16;18018:34;:::i;:::-;17996:56;;18075:3;18065:13;;18135:2;18119:14;18115:23;18110:2;18102:6;18098:15;18091:48;18188:69;18253:2;18244:7;18240:16;18231:7;18188:69;:::i;:::-;18280:4;18304:15;;;18297:27;18152:105;-1:-1:-1;18152:105:132;-1:-1:-1;18351:85:132;;-1:-1:-1;18431:3:132;18419:16;;18152:105;;18351:85;:::i;:::-;18337:99;;;18487:69;18552:2;18543:7;18539:16;18530:7;18487:69;:::i;:::-;18449:107;;;;18619:2;18610:6;18602;18598:19;18594:28;18588:3;18580:6;18576:16;18569:54;18646:77;18716:6;18700:14;18684;18646:77;:::i;:::-;18781:12;;;;18636:87;-1:-1:-1;;;18746:15:132;;;;-1:-1:-1;;16888:1:132;16881:9;16852:1951;;;-1:-1:-1;18820:6:132;;16281:2551;-1:-1:-1;;;;;;;;16281:2551:132:o;18837:656::-;-1:-1:-1;;;;;19077:32:132;;19059:51;;19146:3;19141:2;19126:18;;19119:31;;;19166:19;;19159:35;;;19187:6;19237;19097:3;19216:19;;19203:49;19302:1;19296:3;19287:6;19276:9;19272:22;19268:32;19261:43;19040:4;19372:3;19365:2;19361:7;19356:2;19348:6;19344:15;19340:29;19329:9;19325:45;19321:55;19313:63;;-1:-1:-1;;;;;19416:6:132;19412:31;19407:2;19396:9;19392:18;19385:59;19480:6;19475:2;19464:9;19460:18;19453:34;18837:656;;;;;;;;:::o;19498:331::-;19603:9;19614;19656:8;19644:10;19641:24;19638:44;;;19678:1;19675;19668:12;19638:44;19707:6;19697:8;19694:20;19691:40;;;19727:1;19724;19717:12;19691:40;-1:-1:-1;;19753:23:132;;;19798:25;;;;;-1:-1:-1;19498:331:132:o;19834:323::-;-1:-1:-1;;;;;;19954:19:132;;20030:11;;;;20061:1;20053:10;;20050:101;;;20138:2;20132;20125:3;20122:1;20118:11;20115:1;20111:19;20107:28;20103:2;20099:37;20095:46;20086:55;;20050:101;;;19834:323;;;;:::o;20162:255::-;20282:19;;20321:2;20313:11;;20310:101;;;-1:-1:-1;;20382:2:132;20378:12;;;20375:1;20371:20;20367:33;20356:45;20162:255;;;;:::o;20422:331::-;-1:-1:-1;;;;;;20542:19:132;;20626:11;;;;20657:1;20649:10;;20646:101;;;20718:1;20714:11;;;;20711:1;20707:19;20703:28;;;20695:37;20691:46;;;;20422:331;-1:-1:-1;;20422:331:132:o;20758:447::-;-1:-1:-1;;;;;20995:32:132;;20977:51;;21076:10;21064:23;;21059:2;21044:18;;21037:51;21124:2;21119;21104:18;;21097:30;;;-1:-1:-1;;21144:55:132;;21180:18;;21172:6;21144:55;:::i;21210:127::-;21271:10;21266:3;21262:20;21259:1;21252:31;21302:4;21299:1;21292:15;21326:4;21323:1;21316:15;21342:151;21432:4;21425:12;;;21411;;;21407:31;;21450:14;;21447:40;;;21467:18;;:::i;21498:262::-;21536:1;21570:4;21567:1;21563:12;21594:3;21584:134;;21640:10;21635:3;21631:20;21628:1;21621:31;21675:4;21672:1;21665:15;21703:4;21700:1;21693:15;21584:134;21750:3;21743:4;21740:1;21736:12;21732:22;21727:27;;;21498:262;;;;:::o;21765:178::-;21802:3;21846:4;21839:5;21835:16;21870:7;21860:41;;21881:18;;:::i;:::-;-1:-1:-1;;21917:20:132;;21765:178;-1:-1:-1;;21765:178:132:o;21948:316::-;-1:-1:-1;;;;;;22068:19:132;;22137:11;;;;22168:1;22160:10;;22157:101;;;22229:1;22225:11;;;;22222:1;22218:19;22214:28;;;22206:37;22202:46;;;;21948:316;-1:-1:-1;;21948:316:132:o", - "linkReferences": {}, - "immutableReferences": { - "4": [ - { "start": 1051, "length": 32 }, - { "start": 1156, "length": 32 } - ], - "6": [{ "start": 798, "length": 32 }] - } - }, - "methodIdentifiers": { - "assertHeader(bytes,uint32)": "c40ff835", - "commitVerification(bytes,bytes32)": "0894edf1", - "getAppUlnConfig(address,uint32)": "39e3f938", - "getConfig(uint32,address,uint32)": "9c33abf7", - "getUlnConfig(address,uint32)": "43ea4fa9", - "hashLookup(bytes32,bytes32,address)": "3c782a52", - "isSupportedEid(uint32)": "6750cd4c", - "messageLibType()": "1881d94d", - "owner()": "8da5cb5b", - "renounceOwnership()": "715018a6", - "setConfig(address,(uint32,uint32,bytes)[])": "20efd722", - "setDefaultUlnConfigs((uint32,(uint64,uint8,uint8,uint8,address[],address[]))[])": "29460b0b", - "supportsInterface(bytes4)": "01ffc9a7", - "transferOwnership(address)": "f2fde38b", - "verifiable((uint64,uint8,uint8,uint8,address[],address[]),bytes32,bytes32)": "e084d952", - "verify(bytes,bytes32,uint64)": "0223536e", - "version()": "54fd4d50" - }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_endpoint\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"LZ_MessageLib_OnlyEndpoint\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_ULN_AtLeastOneDVN\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"configType\",\"type\":\"uint32\"}],\"name\":\"LZ_ULN_InvalidConfigType\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_ULN_InvalidConfirmations\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_ULN_InvalidEid\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_ULN_InvalidOptionalDVNCount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_ULN_InvalidOptionalDVNThreshold\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_ULN_InvalidPacketHeader\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_ULN_InvalidPacketVersion\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_ULN_InvalidRequiredDVNCount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_ULN_Unsorted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"}],\"name\":\"LZ_ULN_UnsupportedEid\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_ULN_Verifying\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"confirmations\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"requiredDVNCount\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"optionalDVNCount\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"optionalDVNThreshold\",\"type\":\"uint8\"},{\"internalType\":\"address[]\",\"name\":\"requiredDVNs\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"optionalDVNs\",\"type\":\"address[]\"}],\"internalType\":\"struct UlnConfig\",\"name\":\"config\",\"type\":\"tuple\"}],\"indexed\":false,\"internalType\":\"struct SetDefaultUlnConfigParam[]\",\"name\":\"params\",\"type\":\"tuple[]\"}],\"name\":\"DefaultUlnConfigsSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"dvn\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"header\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"confirmations\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"proofHash\",\"type\":\"bytes32\"}],\"name\":\"PayloadVerified\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oapp\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"confirmations\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"requiredDVNCount\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"optionalDVNCount\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"optionalDVNThreshold\",\"type\":\"uint8\"},{\"internalType\":\"address[]\",\"name\":\"requiredDVNs\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"optionalDVNs\",\"type\":\"address[]\"}],\"indexed\":false,\"internalType\":\"struct UlnConfig\",\"name\":\"config\",\"type\":\"tuple\"}],\"name\":\"UlnConfigSet\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_packetHeader\",\"type\":\"bytes\"},{\"internalType\":\"uint32\",\"name\":\"_localEid\",\"type\":\"uint32\"}],\"name\":\"assertHeader\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_packetHeader\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"_payloadHash\",\"type\":\"bytes32\"}],\"name\":\"commitVerification\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_oapp\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_remoteEid\",\"type\":\"uint32\"}],\"name\":\"getAppUlnConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"confirmations\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"requiredDVNCount\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"optionalDVNCount\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"optionalDVNThreshold\",\"type\":\"uint8\"},{\"internalType\":\"address[]\",\"name\":\"requiredDVNs\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"optionalDVNs\",\"type\":\"address[]\"}],\"internalType\":\"struct UlnConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"_oapp\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_configType\",\"type\":\"uint32\"}],\"name\":\"getConfig\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_oapp\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_remoteEid\",\"type\":\"uint32\"}],\"name\":\"getUlnConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"confirmations\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"requiredDVNCount\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"optionalDVNCount\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"optionalDVNThreshold\",\"type\":\"uint8\"},{\"internalType\":\"address[]\",\"name\":\"requiredDVNs\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"optionalDVNs\",\"type\":\"address[]\"}],\"internalType\":\"struct UlnConfig\",\"name\":\"rtnConfig\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"headerHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"payloadHash\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"dvn\",\"type\":\"address\"}],\"name\":\"hashLookup\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"submitted\",\"type\":\"bool\"},{\"internalType\":\"uint64\",\"name\":\"confirmations\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"}],\"name\":\"isSupportedEid\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"messageLibType\",\"outputs\":[{\"internalType\":\"enum MessageLibType\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_oapp\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"configType\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"config\",\"type\":\"bytes\"}],\"internalType\":\"struct SetConfigParam[]\",\"name\":\"_params\",\"type\":\"tuple[]\"}],\"name\":\"setConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"confirmations\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"requiredDVNCount\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"optionalDVNCount\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"optionalDVNThreshold\",\"type\":\"uint8\"},{\"internalType\":\"address[]\",\"name\":\"requiredDVNs\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"optionalDVNs\",\"type\":\"address[]\"}],\"internalType\":\"struct UlnConfig\",\"name\":\"config\",\"type\":\"tuple\"}],\"internalType\":\"struct SetDefaultUlnConfigParam[]\",\"name\":\"_params\",\"type\":\"tuple[]\"}],\"name\":\"setDefaultUlnConfigs\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"_interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"confirmations\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"requiredDVNCount\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"optionalDVNCount\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"optionalDVNThreshold\",\"type\":\"uint8\"},{\"internalType\":\"address[]\",\"name\":\"requiredDVNs\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"optionalDVNs\",\"type\":\"address[]\"}],\"internalType\":\"struct UlnConfig\",\"name\":\"_config\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"_headerHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_payloadHash\",\"type\":\"bytes32\"}],\"name\":\"verifiable\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_packetHeader\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"_payloadHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"_confirmations\",\"type\":\"uint64\"}],\"name\":\"verify\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"major\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"minor\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"endpointVersion\",\"type\":\"uint8\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}]},\"kind\":\"dev\",\"methods\":{\"commitVerification(bytes,bytes32)\":{\"details\":\"dont need to check endpoint verifiable here to save gas, as it will reverts if not verifiable.\"},\"getAppUlnConfig(address,uint32)\":{\"details\":\"Get the uln config without the default config for the given remoteEid.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"setDefaultUlnConfigs((uint32,(uint64,uint8,uint8,uint8,address[],address[]))[])\":{\"details\":\"about the DEFAULT ULN config 1) its values are all LITERAL (e.g. 0 is 0). whereas in the oapp ULN config, 0 (default value) points to the default ULN config this design enables the oapp to point to DEFAULT config without explicitly setting the config 2) its configuration is more restrictive than the oapp ULN config that a) it must not use NIL value, where NIL is used only by oapps to indicate the LITERAL 0 b) it must have at least one DVN\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"verify(bytes,bytes32,uint64)\":{\"details\":\"for dvn to verify the payload\"}},\"stateVariables\":{\"CONFIG_TYPE_ULN\":{\"details\":\"CONFIG_TYPE_ULN=2 here to align with SendUln302/ReceiveUln302/ReceiveUln301\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ReceiveUln302Mock.sol\":\"ReceiveUln302Mock\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/MessageLibBase.sol\":{\"keccak256\":\"0x14899a4398251439938d6ef8a15ea8c6acdddc98a7b0066d7e63676192dea0d1\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://3998d03de7025c2c601a4fdcaf9475d12a1ef661fcf1a685ece84fdde6498cf9\",\"dweb:/ipfs/QmReknRbiGAiPqq9toKyXKo6hUKXrQPJyyS6LnTGjiDKoY\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/ReceiveLibBaseE2.sol\":{\"keccak256\":\"0x2fdbd1b13751a264cd6e7fac518a2685b15c968806c03f1d18b177fc0526e9a9\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://600af48bb67939b5f4a3a00c76863ee290a55325ea8697f7cc4b46321ab26ef2\",\"dweb:/ipfs/QmdRigYaB6TXczjtVkvwpUEBwvvvDuymFoViMCB6xQPYUU\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/ReceiveUlnBase.sol\":{\"keccak256\":\"0x36c93de122bbb74ae31e3eacf567c0a3bc649ed3ebb2766c76dfa93aebcace44\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://e83bcaa80e2715e68818dd53e4dc6ad8e665b8249d69a08cf2d2635b9757fb79\",\"dweb:/ipfs/QmSKh6NgaTrTSa48gDzGGqGNAcs5jVEHgZSzZzbuJSEsxo\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/UlnBase.sol\":{\"keccak256\":\"0xfdb1d04f4996c0a9d35abfbfcf10d978da638885eb77d0a9dc35cea5993074e3\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://776d58d88d13b058f236cf18c32b4b9718a021513fc4e198287f4fe18ec5aba4\",\"dweb:/ipfs/QmdNX8jJu2aXJ8Dpbt2ohfhT8RKQLuvh58sW6SAXcUTcV9\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IReceiveUlnE2.sol\":{\"keccak256\":\"0xcdf7e690e5d5c0a3ec26a0d7b1a7fe49c7d16a3634721c3944f77d13ff5d4a91\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bd32a05dde1b83be1ce64fcfb9495d8b9bf0c5b3a5b521ac6c214e87e32f3cdc\",\"dweb:/ipfs/QmcDKTor8EQf3cbiWYmeFb9qzUM8JGPzGGN9qJnYjP1nN7\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\":{\"keccak256\":\"0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bacc29fd3866af71e59cb0bdc1cf82c882a4a7f4e2652fd413c9f12649762083\",\"dweb:/ipfs/QmZh2toLnrQDWaNYhS5K4NoW7Vxd2GdZx9KA77vKEDLAqs\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol\":{\"keccak256\":\"0x5cf5f24751b4e3ea1c9c5ded07cedfdfd62566b6daaffcc0144733859c9dba0c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cae7e35007a714f007ea08045ef7c0cfa6c91fd2425b5028b2d49abad357a5f0\",\"dweb:/ipfs/QmcDBs5tsiyB35b8cwzWQWNnpkawb3uuHRaqE77Hxm2tve\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol\":{\"keccak256\":\"0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d8ff6a8a89297fa127f86b54e0db3eba1d6a6eeb4f6398d3c84d569665ac8f1b\",\"dweb:/ipfs/QmVSwhw6xFDrLRAX4RXaCM47yBaBtac4wf36DYEq6KCTvT\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol\":{\"keccak256\":\"0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7e1b245d58221d16d8b5e0f01ef3e289a24a7df1ace3b94239e4d5b954ad5927\",\"dweb:/ipfs/Qmappsgp7PCY9rSSNE9Cdn4BTRX591WfCSEgq2HxhA3z6S\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol\":{\"keccak256\":\"0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b18b23a1643fc6636c4ad9d9023e2e6ca2d3c2a4a046482d4655bff09950598d\",\"dweb:/ipfs/Qma6G5SqiovwrMPfgqTrRngK1HWW373Wkf9c6YP2NhXpPk\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol\":{\"keccak256\":\"0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5173fc9143bea314b159ca5a9adb5626659ef763bc598e27de5fa46efe3291a6\",\"dweb:/ipfs/QmSLFeMFPmVeGxT4sxRPW28ictjAS22M8rLeYRu9TXkA6D\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol\":{\"keccak256\":\"0xf1c07bc61e7b1dce195ed12d50f87980fbf2d63cac1326fd28287f55fe0ba625\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://060f10ff7afc33c1c2f2b4b5ba29231fd3c943146488084d0e4ab99fce991d97\",\"dweb:/ipfs/QmaSsefAqqEqtf8FgFUmDYMwTsAty3X1pqDb6SiFvry6B3\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol\":{\"keccak256\":\"0x2ebbcaaab3554edcd41b581f1a72ac1806afbfb8047d0d47ff098f9af30d6deb\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://2d4b2cf5c3b16dc76c6767f285b57c0af917972327b2be3f7cba5825402f5fc1\",\"dweb:/ipfs/QmQQWiHE2jKEDbjzGutSoZwtApSXYfLqZt5CxEpFj8xyvT\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol\":{\"keccak256\":\"0xc84cf1bf785977fe1fbe7566eef902c2db68d0e163813ebe6c34921754802680\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://de686666fc16fa432d4208d85cec87dc952faf3e481b683b9adf4b4610db4b09\",\"dweb:/ipfs/QmdmQeopzmxqRzi9DNB4EJDrYUXFfD7fUhnGhSni4QejUW\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ReceiveUln302Mock.sol\":{\"keccak256\":\"0x8e60b01e9bc801167b374dc119b41832d546afd43c143a0cd15ab1941198e121\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://bb1512762417dda9cd81fd9b41f590fd05888358fda1c2ab7e79e0cfabf61ec4\",\"dweb:/ipfs/QmPAgBwdjLz29vE5L1Jth1Wvx6TTM1ig97amVtAyDFF61Q\"]},\"node_modules/@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"node_modules/@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0xddce8e17e3d3f9ed818b4f4c4478a8262aab8b11ed322f1bf5ed705bb4bd97fa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8084aa71a4cc7d2980972412a88fe4f114869faea3fefa5436431644eb5c0287\",\"dweb:/ipfs/Qmbqfs5dRdPvHVKY8kTaeyc65NdqXRQwRK7h9s5UJEhD1p\"]},\"node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_endpoint", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { "inputs": [], "type": "error", "name": "LZ_MessageLib_OnlyEndpoint" }, - { "inputs": [], "type": "error", "name": "LZ_ULN_AtLeastOneDVN" }, - { - "inputs": [ - { "internalType": "uint32", "name": "configType", "type": "uint32" } - ], - "type": "error", - "name": "LZ_ULN_InvalidConfigType" - }, - { - "inputs": [], - "type": "error", - "name": "LZ_ULN_InvalidConfirmations" - }, - { "inputs": [], "type": "error", "name": "LZ_ULN_InvalidEid" }, - { - "inputs": [], - "type": "error", - "name": "LZ_ULN_InvalidOptionalDVNCount" - }, - { - "inputs": [], - "type": "error", - "name": "LZ_ULN_InvalidOptionalDVNThreshold" - }, - { "inputs": [], "type": "error", "name": "LZ_ULN_InvalidPacketHeader" }, - { - "inputs": [], - "type": "error", - "name": "LZ_ULN_InvalidPacketVersion" - }, - { - "inputs": [], - "type": "error", - "name": "LZ_ULN_InvalidRequiredDVNCount" - }, - { "inputs": [], "type": "error", "name": "LZ_ULN_Unsorted" }, - { - "inputs": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" } - ], - "type": "error", - "name": "LZ_ULN_UnsupportedEid" - }, - { "inputs": [], "type": "error", "name": "LZ_ULN_Verifying" }, - { - "inputs": [ - { "internalType": "address", "name": "owner", "type": "address" } - ], - "type": "error", - "name": "OwnableInvalidOwner" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "type": "error", - "name": "OwnableUnauthorizedAccount" - }, - { - "inputs": [ - { - "internalType": "struct SetDefaultUlnConfigParam[]", - "name": "params", - "type": "tuple[]", - "components": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" }, - { - "internalType": "struct UlnConfig", - "name": "config", - "type": "tuple", - "components": [ - { - "internalType": "uint64", - "name": "confirmations", - "type": "uint64" - }, - { - "internalType": "uint8", - "name": "requiredDVNCount", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "optionalDVNCount", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "optionalDVNThreshold", - "type": "uint8" - }, - { - "internalType": "address[]", - "name": "requiredDVNs", - "type": "address[]" - }, - { - "internalType": "address[]", - "name": "optionalDVNs", - "type": "address[]" - } - ] - } - ], - "indexed": false - } - ], - "type": "event", - "name": "DefaultUlnConfigsSet", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "previousOwner", - "type": "address", - "indexed": true - }, - { - "internalType": "address", - "name": "newOwner", - "type": "address", - "indexed": true - } - ], - "type": "event", - "name": "OwnershipTransferred", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "dvn", - "type": "address", - "indexed": false - }, - { - "internalType": "bytes", - "name": "header", - "type": "bytes", - "indexed": false - }, - { - "internalType": "uint256", - "name": "confirmations", - "type": "uint256", - "indexed": false - }, - { - "internalType": "bytes32", - "name": "proofHash", - "type": "bytes32", - "indexed": false - } - ], - "type": "event", - "name": "PayloadVerified", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "oapp", - "type": "address", - "indexed": false - }, - { - "internalType": "uint32", - "name": "eid", - "type": "uint32", - "indexed": false - }, - { - "internalType": "struct UlnConfig", - "name": "config", - "type": "tuple", - "components": [ - { - "internalType": "uint64", - "name": "confirmations", - "type": "uint64" - }, - { - "internalType": "uint8", - "name": "requiredDVNCount", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "optionalDVNCount", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "optionalDVNThreshold", - "type": "uint8" - }, - { - "internalType": "address[]", - "name": "requiredDVNs", - "type": "address[]" - }, - { - "internalType": "address[]", - "name": "optionalDVNs", - "type": "address[]" - } - ], - "indexed": false - } - ], - "type": "event", - "name": "UlnConfigSet", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_packetHeader", - "type": "bytes" - }, - { "internalType": "uint32", "name": "_localEid", "type": "uint32" } - ], - "stateMutability": "pure", - "type": "function", - "name": "assertHeader" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_packetHeader", - "type": "bytes" - }, - { - "internalType": "bytes32", - "name": "_payloadHash", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "commitVerification" - }, - { - "inputs": [ - { "internalType": "address", "name": "_oapp", "type": "address" }, - { "internalType": "uint32", "name": "_remoteEid", "type": "uint32" } - ], - "stateMutability": "view", - "type": "function", - "name": "getAppUlnConfig", - "outputs": [ - { - "internalType": "struct UlnConfig", - "name": "", - "type": "tuple", - "components": [ - { - "internalType": "uint64", - "name": "confirmations", - "type": "uint64" - }, - { - "internalType": "uint8", - "name": "requiredDVNCount", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "optionalDVNCount", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "optionalDVNThreshold", - "type": "uint8" - }, - { - "internalType": "address[]", - "name": "requiredDVNs", - "type": "address[]" - }, - { - "internalType": "address[]", - "name": "optionalDVNs", - "type": "address[]" - } - ] - } - ] - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { "internalType": "address", "name": "_oapp", "type": "address" }, - { - "internalType": "uint32", - "name": "_configType", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function", - "name": "getConfig", - "outputs": [{ "internalType": "bytes", "name": "", "type": "bytes" }] - }, - { - "inputs": [ - { "internalType": "address", "name": "_oapp", "type": "address" }, - { "internalType": "uint32", "name": "_remoteEid", "type": "uint32" } - ], - "stateMutability": "view", - "type": "function", - "name": "getUlnConfig", - "outputs": [ - { - "internalType": "struct UlnConfig", - "name": "rtnConfig", - "type": "tuple", - "components": [ - { - "internalType": "uint64", - "name": "confirmations", - "type": "uint64" - }, - { - "internalType": "uint8", - "name": "requiredDVNCount", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "optionalDVNCount", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "optionalDVNThreshold", - "type": "uint8" - }, - { - "internalType": "address[]", - "name": "requiredDVNs", - "type": "address[]" - }, - { - "internalType": "address[]", - "name": "optionalDVNs", - "type": "address[]" - } - ] - } - ] - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "headerHash", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "payloadHash", - "type": "bytes32" - }, - { "internalType": "address", "name": "dvn", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "hashLookup", - "outputs": [ - { "internalType": "bool", "name": "submitted", "type": "bool" }, - { - "internalType": "uint64", - "name": "confirmations", - "type": "uint64" - } - ] - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" } - ], - "stateMutability": "view", - "type": "function", - "name": "isSupportedEid", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [], - "stateMutability": "pure", - "type": "function", - "name": "messageLibType", - "outputs": [ - { - "internalType": "enum MessageLibType", - "name": "", - "type": "uint8" - } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "owner", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ] - }, - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "function", - "name": "renounceOwnership" - }, - { - "inputs": [ - { "internalType": "address", "name": "_oapp", "type": "address" }, - { - "internalType": "struct SetConfigParam[]", - "name": "_params", - "type": "tuple[]", - "components": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" }, - { - "internalType": "uint32", - "name": "configType", - "type": "uint32" - }, - { "internalType": "bytes", "name": "config", "type": "bytes" } - ] - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setConfig" - }, - { - "inputs": [ - { - "internalType": "struct SetDefaultUlnConfigParam[]", - "name": "_params", - "type": "tuple[]", - "components": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" }, - { - "internalType": "struct UlnConfig", - "name": "config", - "type": "tuple", - "components": [ - { - "internalType": "uint64", - "name": "confirmations", - "type": "uint64" - }, - { - "internalType": "uint8", - "name": "requiredDVNCount", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "optionalDVNCount", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "optionalDVNThreshold", - "type": "uint8" - }, - { - "internalType": "address[]", - "name": "requiredDVNs", - "type": "address[]" - }, - { - "internalType": "address[]", - "name": "optionalDVNs", - "type": "address[]" - } - ] - } - ] - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setDefaultUlnConfigs" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "_interfaceId", - "type": "bytes4" - } - ], - "stateMutability": "view", - "type": "function", - "name": "supportsInterface", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "address", "name": "newOwner", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "transferOwnership" - }, - { - "inputs": [ - { - "internalType": "struct UlnConfig", - "name": "_config", - "type": "tuple", - "components": [ - { - "internalType": "uint64", - "name": "confirmations", - "type": "uint64" - }, - { - "internalType": "uint8", - "name": "requiredDVNCount", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "optionalDVNCount", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "optionalDVNThreshold", - "type": "uint8" - }, - { - "internalType": "address[]", - "name": "requiredDVNs", - "type": "address[]" - }, - { - "internalType": "address[]", - "name": "optionalDVNs", - "type": "address[]" - } - ] - }, - { - "internalType": "bytes32", - "name": "_headerHash", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "_payloadHash", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function", - "name": "verifiable", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_packetHeader", - "type": "bytes" - }, - { - "internalType": "bytes32", - "name": "_payloadHash", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "_confirmations", - "type": "uint64" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "verify" - }, - { - "inputs": [], - "stateMutability": "pure", - "type": "function", - "name": "version", - "outputs": [ - { "internalType": "uint64", "name": "major", "type": "uint64" }, - { "internalType": "uint8", "name": "minor", "type": "uint8" }, - { - "internalType": "uint8", - "name": "endpointVersion", - "type": "uint8" - } - ] - } - ], - "devdoc": { - "kind": "dev", - "methods": { - "commitVerification(bytes,bytes32)": { - "details": "dont need to check endpoint verifiable here to save gas, as it will reverts if not verifiable." - }, - "getAppUlnConfig(address,uint32)": { - "details": "Get the uln config without the default config for the given remoteEid." - }, - "owner()": { "details": "Returns the address of the current owner." }, - "renounceOwnership()": { - "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner." - }, - "setDefaultUlnConfigs((uint32,(uint64,uint8,uint8,uint8,address[],address[]))[])": { - "details": "about the DEFAULT ULN config 1) its values are all LITERAL (e.g. 0 is 0). whereas in the oapp ULN config, 0 (default value) points to the default ULN config this design enables the oapp to point to DEFAULT config without explicitly setting the config 2) its configuration is more restrictive than the oapp ULN config that a) it must not use NIL value, where NIL is used only by oapps to indicate the LITERAL 0 b) it must have at least one DVN" - }, - "transferOwnership(address)": { - "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." - }, - "verify(bytes,bytes32,uint64)": { - "details": "for dvn to verify the payload" - } - }, - "version": 1 - }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ReceiveUln302Mock.sol": "ReceiveUln302Mock" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/MessageLibBase.sol": { - "keccak256": "0x14899a4398251439938d6ef8a15ea8c6acdddc98a7b0066d7e63676192dea0d1", - "urls": [ - "bzz-raw://3998d03de7025c2c601a4fdcaf9475d12a1ef661fcf1a685ece84fdde6498cf9", - "dweb:/ipfs/QmReknRbiGAiPqq9toKyXKo6hUKXrQPJyyS6LnTGjiDKoY" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/ReceiveLibBaseE2.sol": { - "keccak256": "0x2fdbd1b13751a264cd6e7fac518a2685b15c968806c03f1d18b177fc0526e9a9", - "urls": [ - "bzz-raw://600af48bb67939b5f4a3a00c76863ee290a55325ea8697f7cc4b46321ab26ef2", - "dweb:/ipfs/QmdRigYaB6TXczjtVkvwpUEBwvvvDuymFoViMCB6xQPYUU" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/ReceiveUlnBase.sol": { - "keccak256": "0x36c93de122bbb74ae31e3eacf567c0a3bc649ed3ebb2766c76dfa93aebcace44", - "urls": [ - "bzz-raw://e83bcaa80e2715e68818dd53e4dc6ad8e665b8249d69a08cf2d2635b9757fb79", - "dweb:/ipfs/QmSKh6NgaTrTSa48gDzGGqGNAcs5jVEHgZSzZzbuJSEsxo" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/UlnBase.sol": { - "keccak256": "0xfdb1d04f4996c0a9d35abfbfcf10d978da638885eb77d0a9dc35cea5993074e3", - "urls": [ - "bzz-raw://776d58d88d13b058f236cf18c32b4b9718a021513fc4e198287f4fe18ec5aba4", - "dweb:/ipfs/QmdNX8jJu2aXJ8Dpbt2ohfhT8RKQLuvh58sW6SAXcUTcV9" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IReceiveUlnE2.sol": { - "keccak256": "0xcdf7e690e5d5c0a3ec26a0d7b1a7fe49c7d16a3634721c3944f77d13ff5d4a91", - "urls": [ - "bzz-raw://bd32a05dde1b83be1ce64fcfb9495d8b9bf0c5b3a5b521ac6c214e87e32f3cdc", - "dweb:/ipfs/QmcDKTor8EQf3cbiWYmeFb9qzUM8JGPzGGN9qJnYjP1nN7" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol": { - "keccak256": "0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3", - "urls": [ - "bzz-raw://bacc29fd3866af71e59cb0bdc1cf82c882a4a7f4e2652fd413c9f12649762083", - "dweb:/ipfs/QmZh2toLnrQDWaNYhS5K4NoW7Vxd2GdZx9KA77vKEDLAqs" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol": { - "keccak256": "0x5cf5f24751b4e3ea1c9c5ded07cedfdfd62566b6daaffcc0144733859c9dba0c", - "urls": [ - "bzz-raw://cae7e35007a714f007ea08045ef7c0cfa6c91fd2425b5028b2d49abad357a5f0", - "dweb:/ipfs/QmcDBs5tsiyB35b8cwzWQWNnpkawb3uuHRaqE77Hxm2tve" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol": { - "keccak256": "0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc", - "urls": [ - "bzz-raw://d8ff6a8a89297fa127f86b54e0db3eba1d6a6eeb4f6398d3c84d569665ac8f1b", - "dweb:/ipfs/QmVSwhw6xFDrLRAX4RXaCM47yBaBtac4wf36DYEq6KCTvT" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol": { - "keccak256": "0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972", - "urls": [ - "bzz-raw://7e1b245d58221d16d8b5e0f01ef3e289a24a7df1ace3b94239e4d5b954ad5927", - "dweb:/ipfs/Qmappsgp7PCY9rSSNE9Cdn4BTRX591WfCSEgq2HxhA3z6S" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol": { - "keccak256": "0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901", - "urls": [ - "bzz-raw://b18b23a1643fc6636c4ad9d9023e2e6ca2d3c2a4a046482d4655bff09950598d", - "dweb:/ipfs/Qma6G5SqiovwrMPfgqTrRngK1HWW373Wkf9c6YP2NhXpPk" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol": { - "keccak256": "0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e", - "urls": [ - "bzz-raw://5173fc9143bea314b159ca5a9adb5626659ef763bc598e27de5fa46efe3291a6", - "dweb:/ipfs/QmSLFeMFPmVeGxT4sxRPW28ictjAS22M8rLeYRu9TXkA6D" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol": { - "keccak256": "0xf1c07bc61e7b1dce195ed12d50f87980fbf2d63cac1326fd28287f55fe0ba625", - "urls": [ - "bzz-raw://060f10ff7afc33c1c2f2b4b5ba29231fd3c943146488084d0e4ab99fce991d97", - "dweb:/ipfs/QmaSsefAqqEqtf8FgFUmDYMwTsAty3X1pqDb6SiFvry6B3" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol": { - "keccak256": "0x2ebbcaaab3554edcd41b581f1a72ac1806afbfb8047d0d47ff098f9af30d6deb", - "urls": [ - "bzz-raw://2d4b2cf5c3b16dc76c6767f285b57c0af917972327b2be3f7cba5825402f5fc1", - "dweb:/ipfs/QmQQWiHE2jKEDbjzGutSoZwtApSXYfLqZt5CxEpFj8xyvT" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol": { - "keccak256": "0xc84cf1bf785977fe1fbe7566eef902c2db68d0e163813ebe6c34921754802680", - "urls": [ - "bzz-raw://de686666fc16fa432d4208d85cec87dc952faf3e481b683b9adf4b4610db4b09", - "dweb:/ipfs/QmdmQeopzmxqRzi9DNB4EJDrYUXFfD7fUhnGhSni4QejUW" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ReceiveUln302Mock.sol": { - "keccak256": "0x8e60b01e9bc801167b374dc119b41832d546afd43c143a0cd15ab1941198e121", - "urls": [ - "bzz-raw://bb1512762417dda9cd81fd9b41f590fd05888358fda1c2ab7e79e0cfabf61ec4", - "dweb:/ipfs/QmPAgBwdjLz29vE5L1Jth1Wvx6TTM1ig97amVtAyDFF61Q" - ], - "license": "LZBL-1.2" - }, - "node_modules/@openzeppelin/contracts/access/Ownable.sol": { - "keccak256": "0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb", - "urls": [ - "bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6", - "dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Context.sol": { - "keccak256": "0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2", - "urls": [ - "bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12", - "dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/introspection/ERC165.sol": { - "keccak256": "0xddce8e17e3d3f9ed818b4f4c4478a8262aab8b11ed322f1bf5ed705bb4bd97fa", - "urls": [ - "bzz-raw://8084aa71a4cc7d2980972412a88fe4f114869faea3fefa5436431644eb5c0287", - "dweb:/ipfs/Qmbqfs5dRdPvHVKY8kTaeyc65NdqXRQwRK7h9s5UJEhD1p" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol": { - "keccak256": "0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8", - "urls": [ - "bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621", - "dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL" - ], - "license": "MIT" - } - }, - "version": 1 - }, - "id": 81 -} diff --git a/examples/oft-movement/out/ReceiveUlnBase.sol/ReceiveUlnBase.json b/examples/oft-movement/out/ReceiveUlnBase.sol/ReceiveUlnBase.json deleted file mode 100644 index d412ea3ee..000000000 --- a/examples/oft-movement/out/ReceiveUlnBase.sol/ReceiveUlnBase.json +++ /dev/null @@ -1,1092 +0,0 @@ -{ - "abi": [ - { - "type": "function", - "name": "assertHeader", - "inputs": [ - { "name": "_packetHeader", "type": "bytes", "internalType": "bytes" }, - { "name": "_localEid", "type": "uint32", "internalType": "uint32" } - ], - "outputs": [], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "getAppUlnConfig", - "inputs": [ - { "name": "_oapp", "type": "address", "internalType": "address" }, - { "name": "_remoteEid", "type": "uint32", "internalType": "uint32" } - ], - "outputs": [ - { - "name": "", - "type": "tuple", - "internalType": "struct UlnConfig", - "components": [ - { - "name": "confirmations", - "type": "uint64", - "internalType": "uint64" - }, - { - "name": "requiredDVNCount", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "optionalDVNCount", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "optionalDVNThreshold", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "requiredDVNs", - "type": "address[]", - "internalType": "address[]" - }, - { - "name": "optionalDVNs", - "type": "address[]", - "internalType": "address[]" - } - ] - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getUlnConfig", - "inputs": [ - { "name": "_oapp", "type": "address", "internalType": "address" }, - { "name": "_remoteEid", "type": "uint32", "internalType": "uint32" } - ], - "outputs": [ - { - "name": "rtnConfig", - "type": "tuple", - "internalType": "struct UlnConfig", - "components": [ - { - "name": "confirmations", - "type": "uint64", - "internalType": "uint64" - }, - { - "name": "requiredDVNCount", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "optionalDVNCount", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "optionalDVNThreshold", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "requiredDVNs", - "type": "address[]", - "internalType": "address[]" - }, - { - "name": "optionalDVNs", - "type": "address[]", - "internalType": "address[]" - } - ] - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "hashLookup", - "inputs": [ - { "name": "headerHash", "type": "bytes32", "internalType": "bytes32" }, - { "name": "payloadHash", "type": "bytes32", "internalType": "bytes32" }, - { "name": "dvn", "type": "address", "internalType": "address" } - ], - "outputs": [ - { "name": "submitted", "type": "bool", "internalType": "bool" }, - { "name": "confirmations", "type": "uint64", "internalType": "uint64" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "owner", - "inputs": [], - "outputs": [{ "name": "", "type": "address", "internalType": "address" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "renounceOwnership", - "inputs": [], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setDefaultUlnConfigs", - "inputs": [ - { - "name": "_params", - "type": "tuple[]", - "internalType": "struct SetDefaultUlnConfigParam[]", - "components": [ - { "name": "eid", "type": "uint32", "internalType": "uint32" }, - { - "name": "config", - "type": "tuple", - "internalType": "struct UlnConfig", - "components": [ - { - "name": "confirmations", - "type": "uint64", - "internalType": "uint64" - }, - { - "name": "requiredDVNCount", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "optionalDVNCount", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "optionalDVNThreshold", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "requiredDVNs", - "type": "address[]", - "internalType": "address[]" - }, - { - "name": "optionalDVNs", - "type": "address[]", - "internalType": "address[]" - } - ] - } - ] - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "transferOwnership", - "inputs": [ - { "name": "newOwner", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "verifiable", - "inputs": [ - { - "name": "_config", - "type": "tuple", - "internalType": "struct UlnConfig", - "components": [ - { - "name": "confirmations", - "type": "uint64", - "internalType": "uint64" - }, - { - "name": "requiredDVNCount", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "optionalDVNCount", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "optionalDVNThreshold", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "requiredDVNs", - "type": "address[]", - "internalType": "address[]" - }, - { - "name": "optionalDVNs", - "type": "address[]", - "internalType": "address[]" - } - ] - }, - { "name": "_headerHash", "type": "bytes32", "internalType": "bytes32" }, - { "name": "_payloadHash", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "event", - "name": "DefaultUlnConfigsSet", - "inputs": [ - { - "name": "params", - "type": "tuple[]", - "indexed": false, - "internalType": "struct SetDefaultUlnConfigParam[]", - "components": [ - { "name": "eid", "type": "uint32", "internalType": "uint32" }, - { - "name": "config", - "type": "tuple", - "internalType": "struct UlnConfig", - "components": [ - { - "name": "confirmations", - "type": "uint64", - "internalType": "uint64" - }, - { - "name": "requiredDVNCount", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "optionalDVNCount", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "optionalDVNThreshold", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "requiredDVNs", - "type": "address[]", - "internalType": "address[]" - }, - { - "name": "optionalDVNs", - "type": "address[]", - "internalType": "address[]" - } - ] - } - ] - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "OwnershipTransferred", - "inputs": [ - { - "name": "previousOwner", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "newOwner", - "type": "address", - "indexed": true, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "PayloadVerified", - "inputs": [ - { - "name": "dvn", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "header", - "type": "bytes", - "indexed": false, - "internalType": "bytes" - }, - { - "name": "confirmations", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - }, - { - "name": "proofHash", - "type": "bytes32", - "indexed": false, - "internalType": "bytes32" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "UlnConfigSet", - "inputs": [ - { - "name": "oapp", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "eid", - "type": "uint32", - "indexed": false, - "internalType": "uint32" - }, - { - "name": "config", - "type": "tuple", - "indexed": false, - "internalType": "struct UlnConfig", - "components": [ - { - "name": "confirmations", - "type": "uint64", - "internalType": "uint64" - }, - { - "name": "requiredDVNCount", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "optionalDVNCount", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "optionalDVNThreshold", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "requiredDVNs", - "type": "address[]", - "internalType": "address[]" - }, - { - "name": "optionalDVNs", - "type": "address[]", - "internalType": "address[]" - } - ] - } - ], - "anonymous": false - }, - { "type": "error", "name": "LZ_ULN_AtLeastOneDVN", "inputs": [] }, - { "type": "error", "name": "LZ_ULN_InvalidConfirmations", "inputs": [] }, - { "type": "error", "name": "LZ_ULN_InvalidEid", "inputs": [] }, - { "type": "error", "name": "LZ_ULN_InvalidOptionalDVNCount", "inputs": [] }, - { - "type": "error", - "name": "LZ_ULN_InvalidOptionalDVNThreshold", - "inputs": [] - }, - { "type": "error", "name": "LZ_ULN_InvalidPacketHeader", "inputs": [] }, - { "type": "error", "name": "LZ_ULN_InvalidPacketVersion", "inputs": [] }, - { "type": "error", "name": "LZ_ULN_InvalidRequiredDVNCount", "inputs": [] }, - { "type": "error", "name": "LZ_ULN_Unsorted", "inputs": [] }, - { - "type": "error", - "name": "LZ_ULN_UnsupportedEid", - "inputs": [{ "name": "eid", "type": "uint32", "internalType": "uint32" }] - }, - { "type": "error", "name": "LZ_ULN_Verifying", "inputs": [] }, - { - "type": "error", - "name": "OwnableInvalidOwner", - "inputs": [ - { "name": "owner", "type": "address", "internalType": "address" } - ] - }, - { - "type": "error", - "name": "OwnableUnauthorizedAccount", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ] - } - ], - "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "methodIdentifiers": { - "assertHeader(bytes,uint32)": "c40ff835", - "getAppUlnConfig(address,uint32)": "39e3f938", - "getUlnConfig(address,uint32)": "43ea4fa9", - "hashLookup(bytes32,bytes32,address)": "3c782a52", - "owner()": "8da5cb5b", - "renounceOwnership()": "715018a6", - "setDefaultUlnConfigs((uint32,(uint64,uint8,uint8,uint8,address[],address[]))[])": "29460b0b", - "transferOwnership(address)": "f2fde38b", - "verifiable((uint64,uint8,uint8,uint8,address[],address[]),bytes32,bytes32)": "e084d952" - }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"LZ_ULN_AtLeastOneDVN\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_ULN_InvalidConfirmations\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_ULN_InvalidEid\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_ULN_InvalidOptionalDVNCount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_ULN_InvalidOptionalDVNThreshold\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_ULN_InvalidPacketHeader\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_ULN_InvalidPacketVersion\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_ULN_InvalidRequiredDVNCount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_ULN_Unsorted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"}],\"name\":\"LZ_ULN_UnsupportedEid\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_ULN_Verifying\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"confirmations\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"requiredDVNCount\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"optionalDVNCount\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"optionalDVNThreshold\",\"type\":\"uint8\"},{\"internalType\":\"address[]\",\"name\":\"requiredDVNs\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"optionalDVNs\",\"type\":\"address[]\"}],\"internalType\":\"struct UlnConfig\",\"name\":\"config\",\"type\":\"tuple\"}],\"indexed\":false,\"internalType\":\"struct SetDefaultUlnConfigParam[]\",\"name\":\"params\",\"type\":\"tuple[]\"}],\"name\":\"DefaultUlnConfigsSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"dvn\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"header\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"confirmations\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"proofHash\",\"type\":\"bytes32\"}],\"name\":\"PayloadVerified\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oapp\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"confirmations\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"requiredDVNCount\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"optionalDVNCount\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"optionalDVNThreshold\",\"type\":\"uint8\"},{\"internalType\":\"address[]\",\"name\":\"requiredDVNs\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"optionalDVNs\",\"type\":\"address[]\"}],\"indexed\":false,\"internalType\":\"struct UlnConfig\",\"name\":\"config\",\"type\":\"tuple\"}],\"name\":\"UlnConfigSet\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_packetHeader\",\"type\":\"bytes\"},{\"internalType\":\"uint32\",\"name\":\"_localEid\",\"type\":\"uint32\"}],\"name\":\"assertHeader\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_oapp\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_remoteEid\",\"type\":\"uint32\"}],\"name\":\"getAppUlnConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"confirmations\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"requiredDVNCount\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"optionalDVNCount\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"optionalDVNThreshold\",\"type\":\"uint8\"},{\"internalType\":\"address[]\",\"name\":\"requiredDVNs\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"optionalDVNs\",\"type\":\"address[]\"}],\"internalType\":\"struct UlnConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_oapp\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_remoteEid\",\"type\":\"uint32\"}],\"name\":\"getUlnConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"confirmations\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"requiredDVNCount\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"optionalDVNCount\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"optionalDVNThreshold\",\"type\":\"uint8\"},{\"internalType\":\"address[]\",\"name\":\"requiredDVNs\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"optionalDVNs\",\"type\":\"address[]\"}],\"internalType\":\"struct UlnConfig\",\"name\":\"rtnConfig\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"headerHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"payloadHash\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"dvn\",\"type\":\"address\"}],\"name\":\"hashLookup\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"submitted\",\"type\":\"bool\"},{\"internalType\":\"uint64\",\"name\":\"confirmations\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"confirmations\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"requiredDVNCount\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"optionalDVNCount\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"optionalDVNThreshold\",\"type\":\"uint8\"},{\"internalType\":\"address[]\",\"name\":\"requiredDVNs\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"optionalDVNs\",\"type\":\"address[]\"}],\"internalType\":\"struct UlnConfig\",\"name\":\"config\",\"type\":\"tuple\"}],\"internalType\":\"struct SetDefaultUlnConfigParam[]\",\"name\":\"_params\",\"type\":\"tuple[]\"}],\"name\":\"setDefaultUlnConfigs\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"confirmations\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"requiredDVNCount\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"optionalDVNCount\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"optionalDVNThreshold\",\"type\":\"uint8\"},{\"internalType\":\"address[]\",\"name\":\"requiredDVNs\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"optionalDVNs\",\"type\":\"address[]\"}],\"internalType\":\"struct UlnConfig\",\"name\":\"_config\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"_headerHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_payloadHash\",\"type\":\"bytes32\"}],\"name\":\"verifiable\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"includes the utility functions for checking ULN states and logics\",\"errors\":{\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}]},\"kind\":\"dev\",\"methods\":{\"getAppUlnConfig(address,uint32)\":{\"details\":\"Get the uln config without the default config for the given remoteEid.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"setDefaultUlnConfigs((uint32,(uint64,uint8,uint8,uint8,address[],address[]))[])\":{\"details\":\"about the DEFAULT ULN config 1) its values are all LITERAL (e.g. 0 is 0). whereas in the oapp ULN config, 0 (default value) points to the default ULN config this design enables the oapp to point to DEFAULT config without explicitly setting the config 2) its configuration is more restrictive than the oapp ULN config that a) it must not use NIL value, where NIL is used only by oapps to indicate the LITERAL 0 b) it must have at least one DVN\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/ReceiveUlnBase.sol\":\"ReceiveUlnBase\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/ReceiveUlnBase.sol\":{\"keccak256\":\"0x36c93de122bbb74ae31e3eacf567c0a3bc649ed3ebb2766c76dfa93aebcace44\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://e83bcaa80e2715e68818dd53e4dc6ad8e665b8249d69a08cf2d2635b9757fb79\",\"dweb:/ipfs/QmSKh6NgaTrTSa48gDzGGqGNAcs5jVEHgZSzZzbuJSEsxo\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/UlnBase.sol\":{\"keccak256\":\"0xfdb1d04f4996c0a9d35abfbfcf10d978da638885eb77d0a9dc35cea5993074e3\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://776d58d88d13b058f236cf18c32b4b9718a021513fc4e198287f4fe18ec5aba4\",\"dweb:/ipfs/QmdNX8jJu2aXJ8Dpbt2ohfhT8RKQLuvh58sW6SAXcUTcV9\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\":{\"keccak256\":\"0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bacc29fd3866af71e59cb0bdc1cf82c882a4a7f4e2652fd413c9f12649762083\",\"dweb:/ipfs/QmZh2toLnrQDWaNYhS5K4NoW7Vxd2GdZx9KA77vKEDLAqs\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol\":{\"keccak256\":\"0x5cf5f24751b4e3ea1c9c5ded07cedfdfd62566b6daaffcc0144733859c9dba0c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cae7e35007a714f007ea08045ef7c0cfa6c91fd2425b5028b2d49abad357a5f0\",\"dweb:/ipfs/QmcDBs5tsiyB35b8cwzWQWNnpkawb3uuHRaqE77Hxm2tve\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol\":{\"keccak256\":\"0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d8ff6a8a89297fa127f86b54e0db3eba1d6a6eeb4f6398d3c84d569665ac8f1b\",\"dweb:/ipfs/QmVSwhw6xFDrLRAX4RXaCM47yBaBtac4wf36DYEq6KCTvT\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol\":{\"keccak256\":\"0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7e1b245d58221d16d8b5e0f01ef3e289a24a7df1ace3b94239e4d5b954ad5927\",\"dweb:/ipfs/Qmappsgp7PCY9rSSNE9Cdn4BTRX591WfCSEgq2HxhA3z6S\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol\":{\"keccak256\":\"0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b18b23a1643fc6636c4ad9d9023e2e6ca2d3c2a4a046482d4655bff09950598d\",\"dweb:/ipfs/Qma6G5SqiovwrMPfgqTrRngK1HWW373Wkf9c6YP2NhXpPk\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol\":{\"keccak256\":\"0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5173fc9143bea314b159ca5a9adb5626659ef763bc598e27de5fa46efe3291a6\",\"dweb:/ipfs/QmSLFeMFPmVeGxT4sxRPW28ictjAS22M8rLeYRu9TXkA6D\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol\":{\"keccak256\":\"0xf1c07bc61e7b1dce195ed12d50f87980fbf2d63cac1326fd28287f55fe0ba625\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://060f10ff7afc33c1c2f2b4b5ba29231fd3c943146488084d0e4ab99fce991d97\",\"dweb:/ipfs/QmaSsefAqqEqtf8FgFUmDYMwTsAty3X1pqDb6SiFvry6B3\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol\":{\"keccak256\":\"0x2ebbcaaab3554edcd41b581f1a72ac1806afbfb8047d0d47ff098f9af30d6deb\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://2d4b2cf5c3b16dc76c6767f285b57c0af917972327b2be3f7cba5825402f5fc1\",\"dweb:/ipfs/QmQQWiHE2jKEDbjzGutSoZwtApSXYfLqZt5CxEpFj8xyvT\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol\":{\"keccak256\":\"0xc84cf1bf785977fe1fbe7566eef902c2db68d0e163813ebe6c34921754802680\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://de686666fc16fa432d4208d85cec87dc952faf3e481b683b9adf4b4610db4b09\",\"dweb:/ipfs/QmdmQeopzmxqRzi9DNB4EJDrYUXFfD7fUhnGhSni4QejUW\"]},\"node_modules/@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { "inputs": [], "type": "error", "name": "LZ_ULN_AtLeastOneDVN" }, - { - "inputs": [], - "type": "error", - "name": "LZ_ULN_InvalidConfirmations" - }, - { "inputs": [], "type": "error", "name": "LZ_ULN_InvalidEid" }, - { - "inputs": [], - "type": "error", - "name": "LZ_ULN_InvalidOptionalDVNCount" - }, - { - "inputs": [], - "type": "error", - "name": "LZ_ULN_InvalidOptionalDVNThreshold" - }, - { "inputs": [], "type": "error", "name": "LZ_ULN_InvalidPacketHeader" }, - { - "inputs": [], - "type": "error", - "name": "LZ_ULN_InvalidPacketVersion" - }, - { - "inputs": [], - "type": "error", - "name": "LZ_ULN_InvalidRequiredDVNCount" - }, - { "inputs": [], "type": "error", "name": "LZ_ULN_Unsorted" }, - { - "inputs": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" } - ], - "type": "error", - "name": "LZ_ULN_UnsupportedEid" - }, - { "inputs": [], "type": "error", "name": "LZ_ULN_Verifying" }, - { - "inputs": [ - { "internalType": "address", "name": "owner", "type": "address" } - ], - "type": "error", - "name": "OwnableInvalidOwner" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "type": "error", - "name": "OwnableUnauthorizedAccount" - }, - { - "inputs": [ - { - "internalType": "struct SetDefaultUlnConfigParam[]", - "name": "params", - "type": "tuple[]", - "components": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" }, - { - "internalType": "struct UlnConfig", - "name": "config", - "type": "tuple", - "components": [ - { - "internalType": "uint64", - "name": "confirmations", - "type": "uint64" - }, - { - "internalType": "uint8", - "name": "requiredDVNCount", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "optionalDVNCount", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "optionalDVNThreshold", - "type": "uint8" - }, - { - "internalType": "address[]", - "name": "requiredDVNs", - "type": "address[]" - }, - { - "internalType": "address[]", - "name": "optionalDVNs", - "type": "address[]" - } - ] - } - ], - "indexed": false - } - ], - "type": "event", - "name": "DefaultUlnConfigsSet", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "previousOwner", - "type": "address", - "indexed": true - }, - { - "internalType": "address", - "name": "newOwner", - "type": "address", - "indexed": true - } - ], - "type": "event", - "name": "OwnershipTransferred", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "dvn", - "type": "address", - "indexed": false - }, - { - "internalType": "bytes", - "name": "header", - "type": "bytes", - "indexed": false - }, - { - "internalType": "uint256", - "name": "confirmations", - "type": "uint256", - "indexed": false - }, - { - "internalType": "bytes32", - "name": "proofHash", - "type": "bytes32", - "indexed": false - } - ], - "type": "event", - "name": "PayloadVerified", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "oapp", - "type": "address", - "indexed": false - }, - { - "internalType": "uint32", - "name": "eid", - "type": "uint32", - "indexed": false - }, - { - "internalType": "struct UlnConfig", - "name": "config", - "type": "tuple", - "components": [ - { - "internalType": "uint64", - "name": "confirmations", - "type": "uint64" - }, - { - "internalType": "uint8", - "name": "requiredDVNCount", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "optionalDVNCount", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "optionalDVNThreshold", - "type": "uint8" - }, - { - "internalType": "address[]", - "name": "requiredDVNs", - "type": "address[]" - }, - { - "internalType": "address[]", - "name": "optionalDVNs", - "type": "address[]" - } - ], - "indexed": false - } - ], - "type": "event", - "name": "UlnConfigSet", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_packetHeader", - "type": "bytes" - }, - { "internalType": "uint32", "name": "_localEid", "type": "uint32" } - ], - "stateMutability": "pure", - "type": "function", - "name": "assertHeader" - }, - { - "inputs": [ - { "internalType": "address", "name": "_oapp", "type": "address" }, - { "internalType": "uint32", "name": "_remoteEid", "type": "uint32" } - ], - "stateMutability": "view", - "type": "function", - "name": "getAppUlnConfig", - "outputs": [ - { - "internalType": "struct UlnConfig", - "name": "", - "type": "tuple", - "components": [ - { - "internalType": "uint64", - "name": "confirmations", - "type": "uint64" - }, - { - "internalType": "uint8", - "name": "requiredDVNCount", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "optionalDVNCount", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "optionalDVNThreshold", - "type": "uint8" - }, - { - "internalType": "address[]", - "name": "requiredDVNs", - "type": "address[]" - }, - { - "internalType": "address[]", - "name": "optionalDVNs", - "type": "address[]" - } - ] - } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "_oapp", "type": "address" }, - { "internalType": "uint32", "name": "_remoteEid", "type": "uint32" } - ], - "stateMutability": "view", - "type": "function", - "name": "getUlnConfig", - "outputs": [ - { - "internalType": "struct UlnConfig", - "name": "rtnConfig", - "type": "tuple", - "components": [ - { - "internalType": "uint64", - "name": "confirmations", - "type": "uint64" - }, - { - "internalType": "uint8", - "name": "requiredDVNCount", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "optionalDVNCount", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "optionalDVNThreshold", - "type": "uint8" - }, - { - "internalType": "address[]", - "name": "requiredDVNs", - "type": "address[]" - }, - { - "internalType": "address[]", - "name": "optionalDVNs", - "type": "address[]" - } - ] - } - ] - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "headerHash", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "payloadHash", - "type": "bytes32" - }, - { "internalType": "address", "name": "dvn", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "hashLookup", - "outputs": [ - { "internalType": "bool", "name": "submitted", "type": "bool" }, - { - "internalType": "uint64", - "name": "confirmations", - "type": "uint64" - } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "owner", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ] - }, - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "function", - "name": "renounceOwnership" - }, - { - "inputs": [ - { - "internalType": "struct SetDefaultUlnConfigParam[]", - "name": "_params", - "type": "tuple[]", - "components": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" }, - { - "internalType": "struct UlnConfig", - "name": "config", - "type": "tuple", - "components": [ - { - "internalType": "uint64", - "name": "confirmations", - "type": "uint64" - }, - { - "internalType": "uint8", - "name": "requiredDVNCount", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "optionalDVNCount", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "optionalDVNThreshold", - "type": "uint8" - }, - { - "internalType": "address[]", - "name": "requiredDVNs", - "type": "address[]" - }, - { - "internalType": "address[]", - "name": "optionalDVNs", - "type": "address[]" - } - ] - } - ] - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setDefaultUlnConfigs" - }, - { - "inputs": [ - { "internalType": "address", "name": "newOwner", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "transferOwnership" - }, - { - "inputs": [ - { - "internalType": "struct UlnConfig", - "name": "_config", - "type": "tuple", - "components": [ - { - "internalType": "uint64", - "name": "confirmations", - "type": "uint64" - }, - { - "internalType": "uint8", - "name": "requiredDVNCount", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "optionalDVNCount", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "optionalDVNThreshold", - "type": "uint8" - }, - { - "internalType": "address[]", - "name": "requiredDVNs", - "type": "address[]" - }, - { - "internalType": "address[]", - "name": "optionalDVNs", - "type": "address[]" - } - ] - }, - { - "internalType": "bytes32", - "name": "_headerHash", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "_payloadHash", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function", - "name": "verifiable", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - } - ], - "devdoc": { - "kind": "dev", - "methods": { - "getAppUlnConfig(address,uint32)": { - "details": "Get the uln config without the default config for the given remoteEid." - }, - "owner()": { "details": "Returns the address of the current owner." }, - "renounceOwnership()": { - "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner." - }, - "setDefaultUlnConfigs((uint32,(uint64,uint8,uint8,uint8,address[],address[]))[])": { - "details": "about the DEFAULT ULN config 1) its values are all LITERAL (e.g. 0 is 0). whereas in the oapp ULN config, 0 (default value) points to the default ULN config this design enables the oapp to point to DEFAULT config without explicitly setting the config 2) its configuration is more restrictive than the oapp ULN config that a) it must not use NIL value, where NIL is used only by oapps to indicate the LITERAL 0 b) it must have at least one DVN" - }, - "transferOwnership(address)": { - "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." - } - }, - "version": 1 - }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/ReceiveUlnBase.sol": "ReceiveUlnBase" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/ReceiveUlnBase.sol": { - "keccak256": "0x36c93de122bbb74ae31e3eacf567c0a3bc649ed3ebb2766c76dfa93aebcace44", - "urls": [ - "bzz-raw://e83bcaa80e2715e68818dd53e4dc6ad8e665b8249d69a08cf2d2635b9757fb79", - "dweb:/ipfs/QmSKh6NgaTrTSa48gDzGGqGNAcs5jVEHgZSzZzbuJSEsxo" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/UlnBase.sol": { - "keccak256": "0xfdb1d04f4996c0a9d35abfbfcf10d978da638885eb77d0a9dc35cea5993074e3", - "urls": [ - "bzz-raw://776d58d88d13b058f236cf18c32b4b9718a021513fc4e198287f4fe18ec5aba4", - "dweb:/ipfs/QmdNX8jJu2aXJ8Dpbt2ohfhT8RKQLuvh58sW6SAXcUTcV9" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol": { - "keccak256": "0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3", - "urls": [ - "bzz-raw://bacc29fd3866af71e59cb0bdc1cf82c882a4a7f4e2652fd413c9f12649762083", - "dweb:/ipfs/QmZh2toLnrQDWaNYhS5K4NoW7Vxd2GdZx9KA77vKEDLAqs" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol": { - "keccak256": "0x5cf5f24751b4e3ea1c9c5ded07cedfdfd62566b6daaffcc0144733859c9dba0c", - "urls": [ - "bzz-raw://cae7e35007a714f007ea08045ef7c0cfa6c91fd2425b5028b2d49abad357a5f0", - "dweb:/ipfs/QmcDBs5tsiyB35b8cwzWQWNnpkawb3uuHRaqE77Hxm2tve" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol": { - "keccak256": "0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc", - "urls": [ - "bzz-raw://d8ff6a8a89297fa127f86b54e0db3eba1d6a6eeb4f6398d3c84d569665ac8f1b", - "dweb:/ipfs/QmVSwhw6xFDrLRAX4RXaCM47yBaBtac4wf36DYEq6KCTvT" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol": { - "keccak256": "0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972", - "urls": [ - "bzz-raw://7e1b245d58221d16d8b5e0f01ef3e289a24a7df1ace3b94239e4d5b954ad5927", - "dweb:/ipfs/Qmappsgp7PCY9rSSNE9Cdn4BTRX591WfCSEgq2HxhA3z6S" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol": { - "keccak256": "0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901", - "urls": [ - "bzz-raw://b18b23a1643fc6636c4ad9d9023e2e6ca2d3c2a4a046482d4655bff09950598d", - "dweb:/ipfs/Qma6G5SqiovwrMPfgqTrRngK1HWW373Wkf9c6YP2NhXpPk" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol": { - "keccak256": "0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e", - "urls": [ - "bzz-raw://5173fc9143bea314b159ca5a9adb5626659ef763bc598e27de5fa46efe3291a6", - "dweb:/ipfs/QmSLFeMFPmVeGxT4sxRPW28ictjAS22M8rLeYRu9TXkA6D" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol": { - "keccak256": "0xf1c07bc61e7b1dce195ed12d50f87980fbf2d63cac1326fd28287f55fe0ba625", - "urls": [ - "bzz-raw://060f10ff7afc33c1c2f2b4b5ba29231fd3c943146488084d0e4ab99fce991d97", - "dweb:/ipfs/QmaSsefAqqEqtf8FgFUmDYMwTsAty3X1pqDb6SiFvry6B3" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol": { - "keccak256": "0x2ebbcaaab3554edcd41b581f1a72ac1806afbfb8047d0d47ff098f9af30d6deb", - "urls": [ - "bzz-raw://2d4b2cf5c3b16dc76c6767f285b57c0af917972327b2be3f7cba5825402f5fc1", - "dweb:/ipfs/QmQQWiHE2jKEDbjzGutSoZwtApSXYfLqZt5CxEpFj8xyvT" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol": { - "keccak256": "0xc84cf1bf785977fe1fbe7566eef902c2db68d0e163813ebe6c34921754802680", - "urls": [ - "bzz-raw://de686666fc16fa432d4208d85cec87dc952faf3e481b683b9adf4b4610db4b09", - "dweb:/ipfs/QmdmQeopzmxqRzi9DNB4EJDrYUXFfD7fUhnGhSni4QejUW" - ], - "license": "LZBL-1.2" - }, - "node_modules/@openzeppelin/contracts/access/Ownable.sol": { - "keccak256": "0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb", - "urls": [ - "bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6", - "dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Context.sol": { - "keccak256": "0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2", - "urls": [ - "bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12", - "dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol": { - "keccak256": "0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8", - "urls": [ - "bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621", - "dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL" - ], - "license": "MIT" - } - }, - "version": 1 - }, - "id": 13 -} diff --git a/examples/oft-movement/out/ReentrancyGuard.sol/ReentrancyGuard.json b/examples/oft-movement/out/ReentrancyGuard.sol/ReentrancyGuard.json deleted file mode 100644 index 0a10d675b..000000000 --- a/examples/oft-movement/out/ReentrancyGuard.sol/ReentrancyGuard.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "abi": [ - { "type": "error", "name": "ReentrancyGuardReentrantCall", "inputs": [] } - ], - "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "methodIdentifiers": {}, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Contract module that helps prevent reentrant calls to a function. Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier available, which can be applied to functions to make sure there are no nested (reentrant) calls to them. Note that because there is a single `nonReentrant` guard, functions marked as `nonReentrant` may not call one another. This can be worked around by making those functions `private`, and then adding `external` `nonReentrant` entry points to them. TIP: If EIP-1153 (transient storage) is available on the chain you're deploying at, consider using {ReentrancyGuardTransient} instead. TIP: If you would like to learn more about reentrancy and alternative ways to protect against it, check out our blog post https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\",\"errors\":{\"ReentrancyGuardReentrantCall()\":[{\"details\":\"Unauthorized reentrant call.\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@openzeppelin/contracts/utils/ReentrancyGuard.sol\":\"ReentrancyGuard\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@openzeppelin/contracts/utils/ReentrancyGuard.sol\":{\"keccak256\":\"0x11a5a79827df29e915a12740caf62fe21ebe27c08c9ae3e09abe9ee3ba3866d3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3cf0c69ab827e3251db9ee6a50647d62c90ba580a4d7bbff21f2bea39e7b2f4a\",\"dweb:/ipfs/QmZiKwtKU1SBX4RGfQtY7PZfiapbbu6SZ9vizGQD9UHjRA\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { - "inputs": [], - "type": "error", - "name": "ReentrancyGuardReentrantCall" - } - ], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@openzeppelin/contracts/utils/ReentrancyGuard.sol": "ReentrancyGuard" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@openzeppelin/contracts/utils/ReentrancyGuard.sol": { - "keccak256": "0x11a5a79827df29e915a12740caf62fe21ebe27c08c9ae3e09abe9ee3ba3866d3", - "urls": [ - "bzz-raw://3cf0c69ab827e3251db9ee6a50647d62c90ba580a4d7bbff21f2bea39e7b2f4a", - "dweb:/ipfs/QmZiKwtKU1SBX4RGfQtY7PZfiapbbu6SZ9vizGQD9UHjRA" - ], - "license": "MIT" - } - }, - "version": 1 - }, - "id": 121 -} diff --git a/examples/oft-movement/out/SafeCall.sol/SafeCall.json b/examples/oft-movement/out/SafeCall.sol/SafeCall.json deleted file mode 100644 index 848b74b17..000000000 --- a/examples/oft-movement/out/SafeCall.sol/SafeCall.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "abi": [], - "bytecode": { - "object": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122007e1fe2083eda9087d41f9cd249b43ae5fff5f1a7e3b4fab12292ffd20a1614864736f6c63430008160033", - "sourceMap": "182:4460:12:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;182:4460:12;;;;;;;;;;;;;;;;;", - "linkReferences": {} - }, - "deployedBytecode": { - "object": "0x73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122007e1fe2083eda9087d41f9cd249b43ae5fff5f1a7e3b4fab12292ffd20a1614864736f6c63430008160033", - "sourceMap": "182:4460:12:-:0;;;;;;;;", - "linkReferences": {} - }, - "methodIdentifiers": {}, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"copied from https://github.com/nomad-xyz/ExcessivelySafeCall/blob/main/src/ExcessivelySafeCall.sol.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/libs/SafeCall.sol\":\"SafeCall\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/libs/SafeCall.sol\":{\"keccak256\":\"0xc3b7b7927472f7c1ca9703af310e9050c798afaccf399ad0f131e179b8582c8d\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://e5be13af32ff6b371985d405bc6fe8ac2faf5445bd88fda2dab4b869f66e3f89\",\"dweb:/ipfs/Qmd21k4H2tAHKrpiuHUbH87eNtHLLJzHj9ZCrMh8AKfDHh\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/libs/SafeCall.sol": "SafeCall" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/libs/SafeCall.sol": { - "keccak256": "0xc3b7b7927472f7c1ca9703af310e9050c798afaccf399ad0f131e179b8582c8d", - "urls": [ - "bzz-raw://e5be13af32ff6b371985d405bc6fe8ac2faf5445bd88fda2dab4b869f66e3f89", - "dweb:/ipfs/Qmd21k4H2tAHKrpiuHUbH87eNtHLLJzHj9ZCrMh8AKfDHh" - ], - "license": "MIT OR Apache-2.0" - } - }, - "version": 1 - }, - "id": 12 -} diff --git a/examples/oft-movement/out/SafeCast.sol/SafeCast.json b/examples/oft-movement/out/SafeCast.sol/SafeCast.json deleted file mode 100644 index 450e3e796..000000000 --- a/examples/oft-movement/out/SafeCast.sol/SafeCast.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "abi": [ - { - "type": "error", - "name": "SafeCastOverflowedIntDowncast", - "inputs": [ - { "name": "bits", "type": "uint8", "internalType": "uint8" }, - { "name": "value", "type": "int256", "internalType": "int256" } - ] - }, - { - "type": "error", - "name": "SafeCastOverflowedIntToUint", - "inputs": [ - { "name": "value", "type": "int256", "internalType": "int256" } - ] - }, - { - "type": "error", - "name": "SafeCastOverflowedUintDowncast", - "inputs": [ - { "name": "bits", "type": "uint8", "internalType": "uint8" }, - { "name": "value", "type": "uint256", "internalType": "uint256" } - ] - }, - { - "type": "error", - "name": "SafeCastOverflowedUintToInt", - "inputs": [ - { "name": "value", "type": "uint256", "internalType": "uint256" } - ] - } - ], - "bytecode": { - "object": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220c9711714b9cce3ff042dab68c417b5a619ceb7d5bfdf5130c5d1c73b3a57146d64736f6c63430008160033", - "sourceMap": "769:34173:125:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;769:34173:125;;;;;;;;;;;;;;;;;", - "linkReferences": {} - }, - "deployedBytecode": { - "object": "0x73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220c9711714b9cce3ff042dab68c417b5a619ceb7d5bfdf5130c5d1c73b3a57146d64736f6c63430008160033", - "sourceMap": "769:34173:125:-:0;;;;;;;;", - "linkReferences": {} - }, - "methodIdentifiers": {}, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"bits\",\"type\":\"uint8\"},{\"internalType\":\"int256\",\"name\":\"value\",\"type\":\"int256\"}],\"name\":\"SafeCastOverflowedIntDowncast\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"value\",\"type\":\"int256\"}],\"name\":\"SafeCastOverflowedIntToUint\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"bits\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"SafeCastOverflowedUintDowncast\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"SafeCastOverflowedUintToInt\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Wrappers over Solidity's uintXX/intXX/bool casting operators with added overflow checks. Downcasting from uint256/int256 in Solidity does not revert on overflow. This can easily result in undesired exploitation or bugs, since developers usually assume that overflows raise errors. `SafeCast` restores this intuition by reverting the transaction when such an operation overflows. Using this library instead of the unchecked operations eliminates an entire class of bugs, so it's recommended to use it always.\",\"errors\":{\"SafeCastOverflowedIntDowncast(uint8,int256)\":[{\"details\":\"Value doesn't fit in an int of `bits` size.\"}],\"SafeCastOverflowedIntToUint(int256)\":[{\"details\":\"An int value doesn't fit in an uint of `bits` size.\"}],\"SafeCastOverflowedUintDowncast(uint8,uint256)\":[{\"details\":\"Value doesn't fit in an uint of `bits` size.\"}],\"SafeCastOverflowedUintToInt(uint256)\":[{\"details\":\"An uint value doesn't fit in an int of `bits` size.\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@openzeppelin/contracts/utils/math/SafeCast.sol\":\"SafeCast\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { - "inputs": [ - { "internalType": "uint8", "name": "bits", "type": "uint8" }, - { "internalType": "int256", "name": "value", "type": "int256" } - ], - "type": "error", - "name": "SafeCastOverflowedIntDowncast" - }, - { - "inputs": [ - { "internalType": "int256", "name": "value", "type": "int256" } - ], - "type": "error", - "name": "SafeCastOverflowedIntToUint" - }, - { - "inputs": [ - { "internalType": "uint8", "name": "bits", "type": "uint8" }, - { "internalType": "uint256", "name": "value", "type": "uint256" } - ], - "type": "error", - "name": "SafeCastOverflowedUintDowncast" - }, - { - "inputs": [ - { "internalType": "uint256", "name": "value", "type": "uint256" } - ], - "type": "error", - "name": "SafeCastOverflowedUintToInt" - } - ], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@openzeppelin/contracts/utils/math/SafeCast.sol": "SafeCast" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@openzeppelin/contracts/utils/math/SafeCast.sol": { - "keccak256": "0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54", - "urls": [ - "bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8", - "dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy" - ], - "license": "MIT" - } - }, - "version": 1 - }, - "id": 125 -} diff --git a/examples/oft-movement/out/SafeERC20.sol/SafeERC20.json b/examples/oft-movement/out/SafeERC20.sol/SafeERC20.json deleted file mode 100644 index 190222c7a..000000000 --- a/examples/oft-movement/out/SafeERC20.sol/SafeERC20.json +++ /dev/null @@ -1,160 +0,0 @@ -{ - "abi": [ - { - "type": "error", - "name": "SafeERC20FailedDecreaseAllowance", - "inputs": [ - { "name": "spender", "type": "address", "internalType": "address" }, - { - "name": "currentAllowance", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "requestedDecrease", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "error", - "name": "SafeERC20FailedOperation", - "inputs": [ - { "name": "token", "type": "address", "internalType": "address" } - ] - } - ], - "bytecode": { - "object": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220bc4eecb67f8e83825606d2c4202d8526ca5b5f3979c9aede6c9ceab45865466d64736f6c63430008160033", - "sourceMap": "750:8692:38:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;750:8692:38;;;;;;;;;;;;;;;;;", - "linkReferences": {} - }, - "deployedBytecode": { - "object": "0x73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220bc4eecb67f8e83825606d2c4202d8526ca5b5f3979c9aede6c9ceab45865466d64736f6c63430008160033", - "sourceMap": "750:8692:38:-:0;;;;;;;;", - "linkReferences": {} - }, - "methodIdentifiers": {}, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"currentAllowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requestedDecrease\",\"type\":\"uint256\"}],\"name\":\"SafeERC20FailedDecreaseAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Wrappers around ERC-20 operations that throw on failure (when the token contract returns false). Tokens that return no value (and instead revert or throw on failure) are also supported, non-reverting calls are assumed to be successful. To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\",\"errors\":{\"SafeERC20FailedDecreaseAllowance(address,uint256,uint256)\":[{\"details\":\"Indicates a failed `decreaseAllowance` request.\"}],\"SafeERC20FailedOperation(address)\":[{\"details\":\"An operation with an ERC-20 token failed.\"}]},\"kind\":\"dev\",\"methods\":{},\"title\":\"SafeERC20\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":\"SafeERC20\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol\":{\"keccak256\":\"0x9b6b3e7803bc5f2f8cd7ad57db8ac1def61a9930a5a3107df4882e028a9605d7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://da62d6be1f5c6edf577f0cb45666a8aa9c2086a4bac87d95d65f02e2f4c36a4b\",\"dweb:/ipfs/QmNkpvBpoCMvX8JwAFNSc5XxJ2q5BXJpL5L1txb4QkqVFF\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC165.sol\":{\"keccak256\":\"0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://11fea9f8bc98949ac6709f0c1699db7430d2948137aa94d5a9e95a91f61a710a\",\"dweb:/ipfs/QmQdfRXxQjwP6yn3DVo1GHPpriKNcFghSPi94Z1oKEFUNS\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC20.sol\":{\"keccak256\":\"0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a2608291cb038b388d80b79a06b6118a42f7894ff67b7da10ec0dbbf5b2973ba\",\"dweb:/ipfs/QmWohqcBLbcxmA4eGPhZDXe5RYMMEEpFq22nfkaUMvTfw1\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db\",\"dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0xca2ae13e0610f6a99238dd00b97bd786bc92732dae6d6b9d61f573ec51018310\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://75f8c71ce0c91c40dd5f249ace0b7d8270f8f1767231bcf71490f7157d6ba862\",\"dweb:/ipfs/QmYXgxeDyFHvz3JsXxLEYN6GNUR44ThHeFj5XkpkgMoG4w\"]},\"node_modules/@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0x9d8da059267bac779a2dbbb9a26c2acf00ca83085e105d62d5d4ef96054a47f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c78e2aa4313323cecd1ef12a8d6265b96beee1a199923abf55d9a2a9e291ad23\",\"dweb:/ipfs/QmUTs2KStXucZezzFo3EYeqYu47utu56qrF7jj1Gue65vb\"]},\"node_modules/@openzeppelin/contracts/utils/Errors.sol\":{\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf\",\"dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB\"]},\"node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { - "inputs": [ - { "internalType": "address", "name": "spender", "type": "address" }, - { - "internalType": "uint256", - "name": "currentAllowance", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "requestedDecrease", - "type": "uint256" - } - ], - "type": "error", - "name": "SafeERC20FailedDecreaseAllowance" - }, - { - "inputs": [ - { "internalType": "address", "name": "token", "type": "address" } - ], - "type": "error", - "name": "SafeERC20FailedOperation" - } - ], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol": "SafeERC20" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol": { - "keccak256": "0x9b6b3e7803bc5f2f8cd7ad57db8ac1def61a9930a5a3107df4882e028a9605d7", - "urls": [ - "bzz-raw://da62d6be1f5c6edf577f0cb45666a8aa9c2086a4bac87d95d65f02e2f4c36a4b", - "dweb:/ipfs/QmNkpvBpoCMvX8JwAFNSc5XxJ2q5BXJpL5L1txb4QkqVFF" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/interfaces/IERC165.sol": { - "keccak256": "0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724", - "urls": [ - "bzz-raw://11fea9f8bc98949ac6709f0c1699db7430d2948137aa94d5a9e95a91f61a710a", - "dweb:/ipfs/QmQdfRXxQjwP6yn3DVo1GHPpriKNcFghSPi94Z1oKEFUNS" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/interfaces/IERC20.sol": { - "keccak256": "0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c", - "urls": [ - "bzz-raw://a2608291cb038b388d80b79a06b6118a42f7894ff67b7da10ec0dbbf5b2973ba", - "dweb:/ipfs/QmWohqcBLbcxmA4eGPhZDXe5RYMMEEpFq22nfkaUMvTfw1" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol": { - "keccak256": "0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7", - "urls": [ - "bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db", - "dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol": { - "keccak256": "0xca2ae13e0610f6a99238dd00b97bd786bc92732dae6d6b9d61f573ec51018310", - "urls": [ - "bzz-raw://75f8c71ce0c91c40dd5f249ace0b7d8270f8f1767231bcf71490f7157d6ba862", - "dweb:/ipfs/QmYXgxeDyFHvz3JsXxLEYN6GNUR44ThHeFj5XkpkgMoG4w" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Address.sol": { - "keccak256": "0x9d8da059267bac779a2dbbb9a26c2acf00ca83085e105d62d5d4ef96054a47f5", - "urls": [ - "bzz-raw://c78e2aa4313323cecd1ef12a8d6265b96beee1a199923abf55d9a2a9e291ad23", - "dweb:/ipfs/QmUTs2KStXucZezzFo3EYeqYu47utu56qrF7jj1Gue65vb" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Errors.sol": { - "keccak256": "0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123", - "urls": [ - "bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf", - "dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol": { - "keccak256": "0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8", - "urls": [ - "bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621", - "dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL" - ], - "license": "MIT" - } - }, - "version": 1 - }, - "id": 38 -} diff --git a/examples/oft-movement/out/SendLibBase.sol/SendLibBase.json b/examples/oft-movement/out/SendLibBase.sol/SendLibBase.json deleted file mode 100644 index 57962c9ca..000000000 --- a/examples/oft-movement/out/SendLibBase.sol/SendLibBase.json +++ /dev/null @@ -1,803 +0,0 @@ -{ - "abi": [ - { - "type": "function", - "name": "executorConfigs", - "inputs": [ - { "name": "oapp", "type": "address", "internalType": "address" }, - { "name": "eid", "type": "uint32", "internalType": "uint32" } - ], - "outputs": [ - { - "name": "maxMessageSize", - "type": "uint32", - "internalType": "uint32" - }, - { "name": "executor", "type": "address", "internalType": "address" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "fees", - "inputs": [ - { "name": "worker", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getExecutorConfig", - "inputs": [ - { "name": "_oapp", "type": "address", "internalType": "address" }, - { "name": "_remoteEid", "type": "uint32", "internalType": "uint32" } - ], - "outputs": [ - { - "name": "rtnConfig", - "type": "tuple", - "internalType": "struct ExecutorConfig", - "components": [ - { - "name": "maxMessageSize", - "type": "uint32", - "internalType": "uint32" - }, - { "name": "executor", "type": "address", "internalType": "address" } - ] - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "owner", - "inputs": [], - "outputs": [{ "name": "", "type": "address", "internalType": "address" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "renounceOwnership", - "inputs": [], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setDefaultExecutorConfigs", - "inputs": [ - { - "name": "_params", - "type": "tuple[]", - "internalType": "struct SetDefaultExecutorConfigParam[]", - "components": [ - { "name": "eid", "type": "uint32", "internalType": "uint32" }, - { - "name": "config", - "type": "tuple", - "internalType": "struct ExecutorConfig", - "components": [ - { - "name": "maxMessageSize", - "type": "uint32", - "internalType": "uint32" - }, - { - "name": "executor", - "type": "address", - "internalType": "address" - } - ] - } - ] - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setTreasuryNativeFeeCap", - "inputs": [ - { - "name": "_newTreasuryNativeFeeCap", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "transferOwnership", - "inputs": [ - { "name": "newOwner", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "treasury", - "inputs": [], - "outputs": [{ "name": "", "type": "address", "internalType": "address" }], - "stateMutability": "view" - }, - { - "type": "event", - "name": "DefaultExecutorConfigsSet", - "inputs": [ - { - "name": "params", - "type": "tuple[]", - "indexed": false, - "internalType": "struct SetDefaultExecutorConfigParam[]", - "components": [ - { "name": "eid", "type": "uint32", "internalType": "uint32" }, - { - "name": "config", - "type": "tuple", - "internalType": "struct ExecutorConfig", - "components": [ - { - "name": "maxMessageSize", - "type": "uint32", - "internalType": "uint32" - }, - { - "name": "executor", - "type": "address", - "internalType": "address" - } - ] - } - ] - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "ExecutorConfigSet", - "inputs": [ - { - "name": "oapp", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "eid", - "type": "uint32", - "indexed": false, - "internalType": "uint32" - }, - { - "name": "config", - "type": "tuple", - "indexed": false, - "internalType": "struct ExecutorConfig", - "components": [ - { - "name": "maxMessageSize", - "type": "uint32", - "internalType": "uint32" - }, - { "name": "executor", "type": "address", "internalType": "address" } - ] - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "ExecutorFeePaid", - "inputs": [ - { - "name": "executor", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "fee", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "OwnershipTransferred", - "inputs": [ - { - "name": "previousOwner", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "newOwner", - "type": "address", - "indexed": true, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "TreasuryNativeFeeCapSet", - "inputs": [ - { - "name": "newTreasuryNativeFeeCap", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "TreasurySet", - "inputs": [ - { - "name": "treasury", - "type": "address", - "indexed": false, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "error", - "name": "LZ_MessageLib_InvalidAmount", - "inputs": [ - { "name": "requested", "type": "uint256", "internalType": "uint256" }, - { "name": "available", "type": "uint256", "internalType": "uint256" } - ] - }, - { "type": "error", "name": "LZ_MessageLib_InvalidExecutor", "inputs": [] }, - { - "type": "error", - "name": "LZ_MessageLib_InvalidMessageSize", - "inputs": [ - { "name": "actual", "type": "uint256", "internalType": "uint256" }, - { "name": "max", "type": "uint256", "internalType": "uint256" } - ] - }, - { "type": "error", "name": "LZ_MessageLib_OnlyEndpoint", "inputs": [] }, - { "type": "error", "name": "LZ_MessageLib_TransferFailed", "inputs": [] }, - { "type": "error", "name": "LZ_MessageLib_ZeroMessageSize", "inputs": [] }, - { - "type": "error", - "name": "OwnableInvalidOwner", - "inputs": [ - { "name": "owner", "type": "address", "internalType": "address" } - ] - }, - { - "type": "error", - "name": "OwnableUnauthorizedAccount", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ] - } - ], - "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "methodIdentifiers": { - "executorConfigs(address,uint32)": "4d963200", - "fees(address)": "faaebd21", - "getExecutorConfig(address,uint32)": "188183f4", - "owner()": "8da5cb5b", - "renounceOwnership()": "715018a6", - "setDefaultExecutorConfigs((uint32,(uint32,address))[])": "c14c4349", - "setTreasuryNativeFeeCap(uint256)": "d15b0d49", - "transferOwnership(address)": "f2fde38b", - "treasury()": "61d027b3" - }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"requested\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"available\",\"type\":\"uint256\"}],\"name\":\"LZ_MessageLib_InvalidAmount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_MessageLib_InvalidExecutor\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"actual\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"max\",\"type\":\"uint256\"}],\"name\":\"LZ_MessageLib_InvalidMessageSize\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_MessageLib_OnlyEndpoint\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_MessageLib_TransferFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_MessageLib_ZeroMessageSize\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"maxMessageSize\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"executor\",\"type\":\"address\"}],\"internalType\":\"struct ExecutorConfig\",\"name\":\"config\",\"type\":\"tuple\"}],\"indexed\":false,\"internalType\":\"struct SetDefaultExecutorConfigParam[]\",\"name\":\"params\",\"type\":\"tuple[]\"}],\"name\":\"DefaultExecutorConfigsSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oapp\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"maxMessageSize\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"executor\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"struct ExecutorConfig\",\"name\":\"config\",\"type\":\"tuple\"}],\"name\":\"ExecutorConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"executor\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"}],\"name\":\"ExecutorFeePaid\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newTreasuryNativeFeeCap\",\"type\":\"uint256\"}],\"name\":\"TreasuryNativeFeeCapSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"treasury\",\"type\":\"address\"}],\"name\":\"TreasurySet\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"oapp\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"}],\"name\":\"executorConfigs\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"maxMessageSize\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"executor\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"worker\",\"type\":\"address\"}],\"name\":\"fees\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_oapp\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_remoteEid\",\"type\":\"uint32\"}],\"name\":\"getExecutorConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"maxMessageSize\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"executor\",\"type\":\"address\"}],\"internalType\":\"struct ExecutorConfig\",\"name\":\"rtnConfig\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"maxMessageSize\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"executor\",\"type\":\"address\"}],\"internalType\":\"struct ExecutorConfig\",\"name\":\"config\",\"type\":\"tuple\"}],\"internalType\":\"struct SetDefaultExecutorConfigParam[]\",\"name\":\"_params\",\"type\":\"tuple[]\"}],\"name\":\"setDefaultExecutorConfigs\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newTreasuryNativeFeeCap\",\"type\":\"uint256\"}],\"name\":\"setTreasuryNativeFeeCap\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"treasury\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"base contract for both SendLibBaseE1 and SendLibBaseE2\",\"errors\":{\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}]},\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"setTreasuryNativeFeeCap(uint256)\":{\"details\":\"the new value can not be greater than the old value, i.e. down only\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/SendLibBase.sol\":\"SendLibBase\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/MessageLibBase.sol\":{\"keccak256\":\"0x14899a4398251439938d6ef8a15ea8c6acdddc98a7b0066d7e63676192dea0d1\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://3998d03de7025c2c601a4fdcaf9475d12a1ef661fcf1a685ece84fdde6498cf9\",\"dweb:/ipfs/QmReknRbiGAiPqq9toKyXKo6hUKXrQPJyyS6LnTGjiDKoY\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/SendLibBase.sol\":{\"keccak256\":\"0x400eaa11c7d50b4c25b7625290ff00937b6875ad3986b353c37a4e62b5a834b1\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://1f51eb0785d3630815a9d63de1c1331fe966df4c3f2fb6750b8da7be9e9743a4\",\"dweb:/ipfs/QmaAEf1kjhhff3AUhRiPm6ikpk2YMMrpKc2ccYzNs7waBy\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroExecutor.sol\":{\"keccak256\":\"0x3647af317ee126b1247a782abb30e59ec5ab21b4945f1d3b4370d1fa3c1bf347\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5b51cd5e7347ee869a06bd57a698f40e4a901ec7fdcb27f0ef485e4a0e1e9be4\",\"dweb:/ipfs/QmP2Nc73veRzLGdUahkjhQAiKR9ZWYiUtSGwoMB1sPXxUp\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroTreasury.sol\":{\"keccak256\":\"0x2aab2a3cf50e20af56d9204b1367d52a47abba0b0c7c21f304d413de1ced6345\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f8b603b5e5e62c621715f8449280af240a4add8721c4ae8f5e8e491507f6e4c5\",\"dweb:/ipfs/QmUQ7Ti7CPmKnRbQFN9TLvVbeZhsi1xUjqZPTJ36dCZ6y8\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/libs/SafeCall.sol\":{\"keccak256\":\"0xc3b7b7927472f7c1ca9703af310e9050c798afaccf399ad0f131e179b8582c8d\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://e5be13af32ff6b371985d405bc6fe8ac2faf5445bd88fda2dab4b869f66e3f89\",\"dweb:/ipfs/Qmd21k4H2tAHKrpiuHUbH87eNtHLLJzHj9ZCrMh8AKfDHh\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Transfer.sol\":{\"keccak256\":\"0x621d6dd5b8b7e827351459fff4ac87c16ba4656757592cf67de8b199aea4cf9a\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://345aa8c007ed8b96a74260d289545713f1d7180df270d67687e3a540a61fa5c0\",\"dweb:/ipfs/QmNWCvpqSuar6UGLDVshUc7shUv3pt1J5FTf9VyZZ13wXL\"]},\"node_modules/@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol\":{\"keccak256\":\"0x9b6b3e7803bc5f2f8cd7ad57db8ac1def61a9930a5a3107df4882e028a9605d7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://da62d6be1f5c6edf577f0cb45666a8aa9c2086a4bac87d95d65f02e2f4c36a4b\",\"dweb:/ipfs/QmNkpvBpoCMvX8JwAFNSc5XxJ2q5BXJpL5L1txb4QkqVFF\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC165.sol\":{\"keccak256\":\"0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://11fea9f8bc98949ac6709f0c1699db7430d2948137aa94d5a9e95a91f61a710a\",\"dweb:/ipfs/QmQdfRXxQjwP6yn3DVo1GHPpriKNcFghSPi94Z1oKEFUNS\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC20.sol\":{\"keccak256\":\"0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a2608291cb038b388d80b79a06b6118a42f7894ff67b7da10ec0dbbf5b2973ba\",\"dweb:/ipfs/QmWohqcBLbcxmA4eGPhZDXe5RYMMEEpFq22nfkaUMvTfw1\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db\",\"dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0xca2ae13e0610f6a99238dd00b97bd786bc92732dae6d6b9d61f573ec51018310\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://75f8c71ce0c91c40dd5f249ace0b7d8270f8f1767231bcf71490f7157d6ba862\",\"dweb:/ipfs/QmYXgxeDyFHvz3JsXxLEYN6GNUR44ThHeFj5XkpkgMoG4w\"]},\"node_modules/@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0x9d8da059267bac779a2dbbb9a26c2acf00ca83085e105d62d5d4ef96054a47f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c78e2aa4313323cecd1ef12a8d6265b96beee1a199923abf55d9a2a9e291ad23\",\"dweb:/ipfs/QmUTs2KStXucZezzFo3EYeqYu47utu56qrF7jj1Gue65vb\"]},\"node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"node_modules/@openzeppelin/contracts/utils/Errors.sol\":{\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf\",\"dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB\"]},\"node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { - "inputs": [ - { - "internalType": "uint256", - "name": "requested", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "available", - "type": "uint256" - } - ], - "type": "error", - "name": "LZ_MessageLib_InvalidAmount" - }, - { - "inputs": [], - "type": "error", - "name": "LZ_MessageLib_InvalidExecutor" - }, - { - "inputs": [ - { "internalType": "uint256", "name": "actual", "type": "uint256" }, - { "internalType": "uint256", "name": "max", "type": "uint256" } - ], - "type": "error", - "name": "LZ_MessageLib_InvalidMessageSize" - }, - { "inputs": [], "type": "error", "name": "LZ_MessageLib_OnlyEndpoint" }, - { - "inputs": [], - "type": "error", - "name": "LZ_MessageLib_TransferFailed" - }, - { - "inputs": [], - "type": "error", - "name": "LZ_MessageLib_ZeroMessageSize" - }, - { - "inputs": [ - { "internalType": "address", "name": "owner", "type": "address" } - ], - "type": "error", - "name": "OwnableInvalidOwner" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "type": "error", - "name": "OwnableUnauthorizedAccount" - }, - { - "inputs": [ - { - "internalType": "struct SetDefaultExecutorConfigParam[]", - "name": "params", - "type": "tuple[]", - "components": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" }, - { - "internalType": "struct ExecutorConfig", - "name": "config", - "type": "tuple", - "components": [ - { - "internalType": "uint32", - "name": "maxMessageSize", - "type": "uint32" - }, - { - "internalType": "address", - "name": "executor", - "type": "address" - } - ] - } - ], - "indexed": false - } - ], - "type": "event", - "name": "DefaultExecutorConfigsSet", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "oapp", - "type": "address", - "indexed": false - }, - { - "internalType": "uint32", - "name": "eid", - "type": "uint32", - "indexed": false - }, - { - "internalType": "struct ExecutorConfig", - "name": "config", - "type": "tuple", - "components": [ - { - "internalType": "uint32", - "name": "maxMessageSize", - "type": "uint32" - }, - { - "internalType": "address", - "name": "executor", - "type": "address" - } - ], - "indexed": false - } - ], - "type": "event", - "name": "ExecutorConfigSet", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "executor", - "type": "address", - "indexed": false - }, - { - "internalType": "uint256", - "name": "fee", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "ExecutorFeePaid", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "previousOwner", - "type": "address", - "indexed": true - }, - { - "internalType": "address", - "name": "newOwner", - "type": "address", - "indexed": true - } - ], - "type": "event", - "name": "OwnershipTransferred", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "newTreasuryNativeFeeCap", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "TreasuryNativeFeeCapSet", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "treasury", - "type": "address", - "indexed": false - } - ], - "type": "event", - "name": "TreasurySet", - "anonymous": false - }, - { - "inputs": [ - { "internalType": "address", "name": "oapp", "type": "address" }, - { "internalType": "uint32", "name": "eid", "type": "uint32" } - ], - "stateMutability": "view", - "type": "function", - "name": "executorConfigs", - "outputs": [ - { - "internalType": "uint32", - "name": "maxMessageSize", - "type": "uint32" - }, - { "internalType": "address", "name": "executor", "type": "address" } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "worker", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "fees", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "_oapp", "type": "address" }, - { "internalType": "uint32", "name": "_remoteEid", "type": "uint32" } - ], - "stateMutability": "view", - "type": "function", - "name": "getExecutorConfig", - "outputs": [ - { - "internalType": "struct ExecutorConfig", - "name": "rtnConfig", - "type": "tuple", - "components": [ - { - "internalType": "uint32", - "name": "maxMessageSize", - "type": "uint32" - }, - { - "internalType": "address", - "name": "executor", - "type": "address" - } - ] - } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "owner", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ] - }, - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "function", - "name": "renounceOwnership" - }, - { - "inputs": [ - { - "internalType": "struct SetDefaultExecutorConfigParam[]", - "name": "_params", - "type": "tuple[]", - "components": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" }, - { - "internalType": "struct ExecutorConfig", - "name": "config", - "type": "tuple", - "components": [ - { - "internalType": "uint32", - "name": "maxMessageSize", - "type": "uint32" - }, - { - "internalType": "address", - "name": "executor", - "type": "address" - } - ] - } - ] - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setDefaultExecutorConfigs" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_newTreasuryNativeFeeCap", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setTreasuryNativeFeeCap" - }, - { - "inputs": [ - { "internalType": "address", "name": "newOwner", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "transferOwnership" - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "treasury", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ] - } - ], - "devdoc": { - "kind": "dev", - "methods": { - "owner()": { "details": "Returns the address of the current owner." }, - "renounceOwnership()": { - "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner." - }, - "setTreasuryNativeFeeCap(uint256)": { - "details": "the new value can not be greater than the old value, i.e. down only" - }, - "transferOwnership(address)": { - "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." - } - }, - "version": 1 - }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/SendLibBase.sol": "SendLibBase" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/MessageLibBase.sol": { - "keccak256": "0x14899a4398251439938d6ef8a15ea8c6acdddc98a7b0066d7e63676192dea0d1", - "urls": [ - "bzz-raw://3998d03de7025c2c601a4fdcaf9475d12a1ef661fcf1a685ece84fdde6498cf9", - "dweb:/ipfs/QmReknRbiGAiPqq9toKyXKo6hUKXrQPJyyS6LnTGjiDKoY" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/SendLibBase.sol": { - "keccak256": "0x400eaa11c7d50b4c25b7625290ff00937b6875ad3986b353c37a4e62b5a834b1", - "urls": [ - "bzz-raw://1f51eb0785d3630815a9d63de1c1331fe966df4c3f2fb6750b8da7be9e9743a4", - "dweb:/ipfs/QmaAEf1kjhhff3AUhRiPm6ikpk2YMMrpKc2ccYzNs7waBy" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroExecutor.sol": { - "keccak256": "0x3647af317ee126b1247a782abb30e59ec5ab21b4945f1d3b4370d1fa3c1bf347", - "urls": [ - "bzz-raw://5b51cd5e7347ee869a06bd57a698f40e4a901ec7fdcb27f0ef485e4a0e1e9be4", - "dweb:/ipfs/QmP2Nc73veRzLGdUahkjhQAiKR9ZWYiUtSGwoMB1sPXxUp" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroTreasury.sol": { - "keccak256": "0x2aab2a3cf50e20af56d9204b1367d52a47abba0b0c7c21f304d413de1ced6345", - "urls": [ - "bzz-raw://f8b603b5e5e62c621715f8449280af240a4add8721c4ae8f5e8e491507f6e4c5", - "dweb:/ipfs/QmUQ7Ti7CPmKnRbQFN9TLvVbeZhsi1xUjqZPTJ36dCZ6y8" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/libs/SafeCall.sol": { - "keccak256": "0xc3b7b7927472f7c1ca9703af310e9050c798afaccf399ad0f131e179b8582c8d", - "urls": [ - "bzz-raw://e5be13af32ff6b371985d405bc6fe8ac2faf5445bd88fda2dab4b869f66e3f89", - "dweb:/ipfs/Qmd21k4H2tAHKrpiuHUbH87eNtHLLJzHj9ZCrMh8AKfDHh" - ], - "license": "MIT OR Apache-2.0" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Transfer.sol": { - "keccak256": "0x621d6dd5b8b7e827351459fff4ac87c16ba4656757592cf67de8b199aea4cf9a", - "urls": [ - "bzz-raw://345aa8c007ed8b96a74260d289545713f1d7180df270d67687e3a540a61fa5c0", - "dweb:/ipfs/QmNWCvpqSuar6UGLDVshUc7shUv3pt1J5FTf9VyZZ13wXL" - ], - "license": "LZBL-1.2" - }, - "node_modules/@openzeppelin/contracts/access/Ownable.sol": { - "keccak256": "0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb", - "urls": [ - "bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6", - "dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol": { - "keccak256": "0x9b6b3e7803bc5f2f8cd7ad57db8ac1def61a9930a5a3107df4882e028a9605d7", - "urls": [ - "bzz-raw://da62d6be1f5c6edf577f0cb45666a8aa9c2086a4bac87d95d65f02e2f4c36a4b", - "dweb:/ipfs/QmNkpvBpoCMvX8JwAFNSc5XxJ2q5BXJpL5L1txb4QkqVFF" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/interfaces/IERC165.sol": { - "keccak256": "0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724", - "urls": [ - "bzz-raw://11fea9f8bc98949ac6709f0c1699db7430d2948137aa94d5a9e95a91f61a710a", - "dweb:/ipfs/QmQdfRXxQjwP6yn3DVo1GHPpriKNcFghSPi94Z1oKEFUNS" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/interfaces/IERC20.sol": { - "keccak256": "0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c", - "urls": [ - "bzz-raw://a2608291cb038b388d80b79a06b6118a42f7894ff67b7da10ec0dbbf5b2973ba", - "dweb:/ipfs/QmWohqcBLbcxmA4eGPhZDXe5RYMMEEpFq22nfkaUMvTfw1" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol": { - "keccak256": "0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7", - "urls": [ - "bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db", - "dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol": { - "keccak256": "0xca2ae13e0610f6a99238dd00b97bd786bc92732dae6d6b9d61f573ec51018310", - "urls": [ - "bzz-raw://75f8c71ce0c91c40dd5f249ace0b7d8270f8f1767231bcf71490f7157d6ba862", - "dweb:/ipfs/QmYXgxeDyFHvz3JsXxLEYN6GNUR44ThHeFj5XkpkgMoG4w" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Address.sol": { - "keccak256": "0x9d8da059267bac779a2dbbb9a26c2acf00ca83085e105d62d5d4ef96054a47f5", - "urls": [ - "bzz-raw://c78e2aa4313323cecd1ef12a8d6265b96beee1a199923abf55d9a2a9e291ad23", - "dweb:/ipfs/QmUTs2KStXucZezzFo3EYeqYu47utu56qrF7jj1Gue65vb" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Context.sol": { - "keccak256": "0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2", - "urls": [ - "bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12", - "dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Errors.sol": { - "keccak256": "0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123", - "urls": [ - "bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf", - "dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol": { - "keccak256": "0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8", - "urls": [ - "bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621", - "dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL" - ], - "license": "MIT" - } - }, - "version": 1 - }, - "id": 2 -} diff --git a/examples/oft-movement/out/SendLibBaseE2.sol/SendLibBaseE2.json b/examples/oft-movement/out/SendLibBaseE2.sol/SendLibBaseE2.json deleted file mode 100644 index c94a219f5..000000000 --- a/examples/oft-movement/out/SendLibBaseE2.sol/SendLibBaseE2.json +++ /dev/null @@ -1,1482 +0,0 @@ -{ - "abi": [ - { "type": "receive", "stateMutability": "payable" }, - { - "type": "function", - "name": "executorConfigs", - "inputs": [ - { "name": "oapp", "type": "address", "internalType": "address" }, - { "name": "eid", "type": "uint32", "internalType": "uint32" } - ], - "outputs": [ - { - "name": "maxMessageSize", - "type": "uint32", - "internalType": "uint32" - }, - { "name": "executor", "type": "address", "internalType": "address" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "fees", - "inputs": [ - { "name": "worker", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getConfig", - "inputs": [ - { "name": "_eid", "type": "uint32", "internalType": "uint32" }, - { "name": "_oapp", "type": "address", "internalType": "address" }, - { "name": "_configType", "type": "uint32", "internalType": "uint32" } - ], - "outputs": [ - { "name": "config", "type": "bytes", "internalType": "bytes" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getExecutorConfig", - "inputs": [ - { "name": "_oapp", "type": "address", "internalType": "address" }, - { "name": "_remoteEid", "type": "uint32", "internalType": "uint32" } - ], - "outputs": [ - { - "name": "rtnConfig", - "type": "tuple", - "internalType": "struct ExecutorConfig", - "components": [ - { - "name": "maxMessageSize", - "type": "uint32", - "internalType": "uint32" - }, - { "name": "executor", "type": "address", "internalType": "address" } - ] - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "isSupportedEid", - "inputs": [ - { "name": "_eid", "type": "uint32", "internalType": "uint32" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "messageLibType", - "inputs": [], - "outputs": [ - { "name": "", "type": "uint8", "internalType": "enum MessageLibType" } - ], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "owner", - "inputs": [], - "outputs": [{ "name": "", "type": "address", "internalType": "address" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "quote", - "inputs": [ - { - "name": "_packet", - "type": "tuple", - "internalType": "struct Packet", - "components": [ - { "name": "nonce", "type": "uint64", "internalType": "uint64" }, - { "name": "srcEid", "type": "uint32", "internalType": "uint32" }, - { "name": "sender", "type": "address", "internalType": "address" }, - { "name": "dstEid", "type": "uint32", "internalType": "uint32" }, - { - "name": "receiver", - "type": "bytes32", - "internalType": "bytes32" - }, - { "name": "guid", "type": "bytes32", "internalType": "bytes32" }, - { "name": "message", "type": "bytes", "internalType": "bytes" } - ] - }, - { "name": "_options", "type": "bytes", "internalType": "bytes" }, - { "name": "_payInLzToken", "type": "bool", "internalType": "bool" } - ], - "outputs": [ - { - "name": "", - "type": "tuple", - "internalType": "struct MessagingFee", - "components": [ - { - "name": "nativeFee", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "lzTokenFee", - "type": "uint256", - "internalType": "uint256" - } - ] - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "renounceOwnership", - "inputs": [], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "send", - "inputs": [ - { - "name": "_packet", - "type": "tuple", - "internalType": "struct Packet", - "components": [ - { "name": "nonce", "type": "uint64", "internalType": "uint64" }, - { "name": "srcEid", "type": "uint32", "internalType": "uint32" }, - { "name": "sender", "type": "address", "internalType": "address" }, - { "name": "dstEid", "type": "uint32", "internalType": "uint32" }, - { - "name": "receiver", - "type": "bytes32", - "internalType": "bytes32" - }, - { "name": "guid", "type": "bytes32", "internalType": "bytes32" }, - { "name": "message", "type": "bytes", "internalType": "bytes" } - ] - }, - { "name": "_options", "type": "bytes", "internalType": "bytes" }, - { "name": "_payInLzToken", "type": "bool", "internalType": "bool" } - ], - "outputs": [ - { - "name": "", - "type": "tuple", - "internalType": "struct MessagingFee", - "components": [ - { - "name": "nativeFee", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "lzTokenFee", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { "name": "", "type": "bytes", "internalType": "bytes" } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setConfig", - "inputs": [ - { "name": "_oapp", "type": "address", "internalType": "address" }, - { - "name": "_config", - "type": "tuple[]", - "internalType": "struct SetConfigParam[]", - "components": [ - { "name": "eid", "type": "uint32", "internalType": "uint32" }, - { - "name": "configType", - "type": "uint32", - "internalType": "uint32" - }, - { "name": "config", "type": "bytes", "internalType": "bytes" } - ] - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setDefaultExecutorConfigs", - "inputs": [ - { - "name": "_params", - "type": "tuple[]", - "internalType": "struct SetDefaultExecutorConfigParam[]", - "components": [ - { "name": "eid", "type": "uint32", "internalType": "uint32" }, - { - "name": "config", - "type": "tuple", - "internalType": "struct ExecutorConfig", - "components": [ - { - "name": "maxMessageSize", - "type": "uint32", - "internalType": "uint32" - }, - { - "name": "executor", - "type": "address", - "internalType": "address" - } - ] - } - ] - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setTreasury", - "inputs": [ - { "name": "_treasury", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setTreasuryNativeFeeCap", - "inputs": [ - { - "name": "_newTreasuryNativeFeeCap", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "supportsInterface", - "inputs": [ - { "name": "_interfaceId", "type": "bytes4", "internalType": "bytes4" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "transferOwnership", - "inputs": [ - { "name": "newOwner", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "treasury", - "inputs": [], - "outputs": [{ "name": "", "type": "address", "internalType": "address" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "version", - "inputs": [], - "outputs": [ - { "name": "major", "type": "uint64", "internalType": "uint64" }, - { "name": "minor", "type": "uint8", "internalType": "uint8" }, - { "name": "endpointVersion", "type": "uint8", "internalType": "uint8" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "withdrawFee", - "inputs": [ - { "name": "_to", "type": "address", "internalType": "address" }, - { "name": "_amount", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "withdrawLzTokenFee", - "inputs": [ - { "name": "_lzToken", "type": "address", "internalType": "address" }, - { "name": "_to", "type": "address", "internalType": "address" }, - { "name": "_amount", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "event", - "name": "DefaultExecutorConfigsSet", - "inputs": [ - { - "name": "params", - "type": "tuple[]", - "indexed": false, - "internalType": "struct SetDefaultExecutorConfigParam[]", - "components": [ - { "name": "eid", "type": "uint32", "internalType": "uint32" }, - { - "name": "config", - "type": "tuple", - "internalType": "struct ExecutorConfig", - "components": [ - { - "name": "maxMessageSize", - "type": "uint32", - "internalType": "uint32" - }, - { - "name": "executor", - "type": "address", - "internalType": "address" - } - ] - } - ] - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "ExecutorConfigSet", - "inputs": [ - { - "name": "oapp", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "eid", - "type": "uint32", - "indexed": false, - "internalType": "uint32" - }, - { - "name": "config", - "type": "tuple", - "indexed": false, - "internalType": "struct ExecutorConfig", - "components": [ - { - "name": "maxMessageSize", - "type": "uint32", - "internalType": "uint32" - }, - { "name": "executor", "type": "address", "internalType": "address" } - ] - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "ExecutorFeePaid", - "inputs": [ - { - "name": "executor", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "fee", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "LzTokenFeeWithdrawn", - "inputs": [ - { - "name": "lzToken", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "receiver", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "amount", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "NativeFeeWithdrawn", - "inputs": [ - { - "name": "worker", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "receiver", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "amount", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "OwnershipTransferred", - "inputs": [ - { - "name": "previousOwner", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "newOwner", - "type": "address", - "indexed": true, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "TreasuryNativeFeeCapSet", - "inputs": [ - { - "name": "newTreasuryNativeFeeCap", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "TreasurySet", - "inputs": [ - { - "name": "treasury", - "type": "address", - "indexed": false, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "error", - "name": "LZ_MessageLib_CannotWithdrawAltToken", - "inputs": [] - }, - { - "type": "error", - "name": "LZ_MessageLib_InvalidAmount", - "inputs": [ - { "name": "requested", "type": "uint256", "internalType": "uint256" }, - { "name": "available", "type": "uint256", "internalType": "uint256" } - ] - }, - { "type": "error", "name": "LZ_MessageLib_InvalidExecutor", "inputs": [] }, - { - "type": "error", - "name": "LZ_MessageLib_InvalidMessageSize", - "inputs": [ - { "name": "actual", "type": "uint256", "internalType": "uint256" }, - { "name": "max", "type": "uint256", "internalType": "uint256" } - ] - }, - { "type": "error", "name": "LZ_MessageLib_NotTreasury", "inputs": [] }, - { "type": "error", "name": "LZ_MessageLib_OnlyEndpoint", "inputs": [] }, - { "type": "error", "name": "LZ_MessageLib_TransferFailed", "inputs": [] }, - { "type": "error", "name": "LZ_MessageLib_ZeroMessageSize", "inputs": [] }, - { - "type": "error", - "name": "OwnableInvalidOwner", - "inputs": [ - { "name": "owner", "type": "address", "internalType": "address" } - ] - }, - { - "type": "error", - "name": "OwnableUnauthorizedAccount", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ] - }, - { - "type": "error", - "name": "SafeERC20FailedOperation", - "inputs": [ - { "name": "token", "type": "address", "internalType": "address" } - ] - }, - { - "type": "error", - "name": "Transfer_NativeFailed", - "inputs": [ - { "name": "_to", "type": "address", "internalType": "address" }, - { "name": "_value", "type": "uint256", "internalType": "uint256" } - ] - }, - { "type": "error", "name": "Transfer_ToAddressIsZero", "inputs": [] } - ], - "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "methodIdentifiers": { - "executorConfigs(address,uint32)": "4d963200", - "fees(address)": "faaebd21", - "getConfig(uint32,address,uint32)": "9c33abf7", - "getExecutorConfig(address,uint32)": "188183f4", - "isSupportedEid(uint32)": "6750cd4c", - "messageLibType()": "1881d94d", - "owner()": "8da5cb5b", - "quote((uint64,uint32,address,uint32,bytes32,bytes32,bytes),bytes,bool)": "d80e9bd9", - "renounceOwnership()": "715018a6", - "send((uint64,uint32,address,uint32,bytes32,bytes32,bytes),bytes,bool)": "4389e58f", - "setConfig(address,(uint32,uint32,bytes)[])": "20efd722", - "setDefaultExecutorConfigs((uint32,(uint32,address))[])": "c14c4349", - "setTreasury(address)": "f0f44260", - "setTreasuryNativeFeeCap(uint256)": "d15b0d49", - "supportsInterface(bytes4)": "01ffc9a7", - "transferOwnership(address)": "f2fde38b", - "treasury()": "61d027b3", - "version()": "54fd4d50", - "withdrawFee(address,uint256)": "fd9be522", - "withdrawLzTokenFee(address,address,uint256)": "200175f7" - }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"LZ_MessageLib_CannotWithdrawAltToken\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"requested\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"available\",\"type\":\"uint256\"}],\"name\":\"LZ_MessageLib_InvalidAmount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_MessageLib_InvalidExecutor\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"actual\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"max\",\"type\":\"uint256\"}],\"name\":\"LZ_MessageLib_InvalidMessageSize\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_MessageLib_NotTreasury\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_MessageLib_OnlyEndpoint\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_MessageLib_TransferFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_MessageLib_ZeroMessageSize\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"Transfer_NativeFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Transfer_ToAddressIsZero\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"maxMessageSize\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"executor\",\"type\":\"address\"}],\"internalType\":\"struct ExecutorConfig\",\"name\":\"config\",\"type\":\"tuple\"}],\"indexed\":false,\"internalType\":\"struct SetDefaultExecutorConfigParam[]\",\"name\":\"params\",\"type\":\"tuple[]\"}],\"name\":\"DefaultExecutorConfigsSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oapp\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"maxMessageSize\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"executor\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"struct ExecutorConfig\",\"name\":\"config\",\"type\":\"tuple\"}],\"name\":\"ExecutorConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"executor\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"}],\"name\":\"ExecutorFeePaid\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"lzToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"LzTokenFeeWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"worker\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"NativeFeeWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newTreasuryNativeFeeCap\",\"type\":\"uint256\"}],\"name\":\"TreasuryNativeFeeCapSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"treasury\",\"type\":\"address\"}],\"name\":\"TreasurySet\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"oapp\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"}],\"name\":\"executorConfigs\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"maxMessageSize\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"executor\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"worker\",\"type\":\"address\"}],\"name\":\"fees\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"_oapp\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_configType\",\"type\":\"uint32\"}],\"name\":\"getConfig\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"config\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_oapp\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_remoteEid\",\"type\":\"uint32\"}],\"name\":\"getExecutorConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"maxMessageSize\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"executor\",\"type\":\"address\"}],\"internalType\":\"struct ExecutorConfig\",\"name\":\"rtnConfig\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"}],\"name\":\"isSupportedEid\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"messageLibType\",\"outputs\":[{\"internalType\":\"enum MessageLibType\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"receiver\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"internalType\":\"struct Packet\",\"name\":\"_packet\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"_options\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"_payInLzToken\",\"type\":\"bool\"}],\"name\":\"quote\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nativeFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lzTokenFee\",\"type\":\"uint256\"}],\"internalType\":\"struct MessagingFee\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"receiver\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"internalType\":\"struct Packet\",\"name\":\"_packet\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"_options\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"_payInLzToken\",\"type\":\"bool\"}],\"name\":\"send\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nativeFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lzTokenFee\",\"type\":\"uint256\"}],\"internalType\":\"struct MessagingFee\",\"name\":\"\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_oapp\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"configType\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"config\",\"type\":\"bytes\"}],\"internalType\":\"struct SetConfigParam[]\",\"name\":\"_config\",\"type\":\"tuple[]\"}],\"name\":\"setConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"maxMessageSize\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"executor\",\"type\":\"address\"}],\"internalType\":\"struct ExecutorConfig\",\"name\":\"config\",\"type\":\"tuple\"}],\"internalType\":\"struct SetDefaultExecutorConfigParam[]\",\"name\":\"_params\",\"type\":\"tuple[]\"}],\"name\":\"setDefaultExecutorConfigs\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_treasury\",\"type\":\"address\"}],\"name\":\"setTreasury\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newTreasuryNativeFeeCap\",\"type\":\"uint256\"}],\"name\":\"setTreasuryNativeFeeCap\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"_interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"treasury\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"major\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"minor\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"endpointVersion\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"withdrawFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_lzToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"withdrawLzTokenFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"send-side message library base contract on endpoint v2. design: the high level logic is the same as SendLibBaseE1 1/ with added interfaces 2/ adapt the functions to the new types, like uint32 for eid, address for sender.\",\"errors\":{\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}],\"SafeERC20FailedOperation(address)\":[{\"details\":\"An operation with an ERC-20 token failed.\"}]},\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"setTreasuryNativeFeeCap(uint256)\":{\"details\":\"the new value can not be greater than the old value, i.e. down only\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"withdrawFee(address,uint256)\":{\"details\":\"E2 only\"},\"withdrawLzTokenFee(address,address,uint256)\":{\"details\":\"_lzToken is a user-supplied value because lzToken might change in the endpoint before all lzToken can be taken outE2 onlytreasury only function\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/SendLibBaseE2.sol\":\"SendLibBaseE2\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/MessageLibBase.sol\":{\"keccak256\":\"0x14899a4398251439938d6ef8a15ea8c6acdddc98a7b0066d7e63676192dea0d1\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://3998d03de7025c2c601a4fdcaf9475d12a1ef661fcf1a685ece84fdde6498cf9\",\"dweb:/ipfs/QmReknRbiGAiPqq9toKyXKo6hUKXrQPJyyS6LnTGjiDKoY\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/SendLibBase.sol\":{\"keccak256\":\"0x400eaa11c7d50b4c25b7625290ff00937b6875ad3986b353c37a4e62b5a834b1\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://1f51eb0785d3630815a9d63de1c1331fe966df4c3f2fb6750b8da7be9e9743a4\",\"dweb:/ipfs/QmaAEf1kjhhff3AUhRiPm6ikpk2YMMrpKc2ccYzNs7waBy\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/SendLibBaseE2.sol\":{\"keccak256\":\"0x90ada11d0a330732c56b989e59c8272b70f956a5d7be2cf209d6d51a51d35a9e\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://0abc7a6d07ec40a3a922256ad05bdd6eca10550d85bfd2e67147473617bb0497\",\"dweb:/ipfs/QmRDphmFhx1scRJXcusg6pUhVQvp941oCJwnHGAPdrNY4T\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroExecutor.sol\":{\"keccak256\":\"0x3647af317ee126b1247a782abb30e59ec5ab21b4945f1d3b4370d1fa3c1bf347\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5b51cd5e7347ee869a06bd57a698f40e4a901ec7fdcb27f0ef485e4a0e1e9be4\",\"dweb:/ipfs/QmP2Nc73veRzLGdUahkjhQAiKR9ZWYiUtSGwoMB1sPXxUp\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroTreasury.sol\":{\"keccak256\":\"0x2aab2a3cf50e20af56d9204b1367d52a47abba0b0c7c21f304d413de1ced6345\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f8b603b5e5e62c621715f8449280af240a4add8721c4ae8f5e8e491507f6e4c5\",\"dweb:/ipfs/QmUQ7Ti7CPmKnRbQFN9TLvVbeZhsi1xUjqZPTJ36dCZ6y8\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/libs/SafeCall.sol\":{\"keccak256\":\"0xc3b7b7927472f7c1ca9703af310e9050c798afaccf399ad0f131e179b8582c8d\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://e5be13af32ff6b371985d405bc6fe8ac2faf5445bd88fda2dab4b869f66e3f89\",\"dweb:/ipfs/Qmd21k4H2tAHKrpiuHUbH87eNtHLLJzHj9ZCrMh8AKfDHh\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\":{\"keccak256\":\"0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bacc29fd3866af71e59cb0bdc1cf82c882a4a7f4e2652fd413c9f12649762083\",\"dweb:/ipfs/QmZh2toLnrQDWaNYhS5K4NoW7Vxd2GdZx9KA77vKEDLAqs\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol\":{\"keccak256\":\"0x5cf5f24751b4e3ea1c9c5ded07cedfdfd62566b6daaffcc0144733859c9dba0c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cae7e35007a714f007ea08045ef7c0cfa6c91fd2425b5028b2d49abad357a5f0\",\"dweb:/ipfs/QmcDBs5tsiyB35b8cwzWQWNnpkawb3uuHRaqE77Hxm2tve\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol\":{\"keccak256\":\"0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d8ff6a8a89297fa127f86b54e0db3eba1d6a6eeb4f6398d3c84d569665ac8f1b\",\"dweb:/ipfs/QmVSwhw6xFDrLRAX4RXaCM47yBaBtac4wf36DYEq6KCTvT\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol\":{\"keccak256\":\"0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7e1b245d58221d16d8b5e0f01ef3e289a24a7df1ace3b94239e4d5b954ad5927\",\"dweb:/ipfs/Qmappsgp7PCY9rSSNE9Cdn4BTRX591WfCSEgq2HxhA3z6S\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol\":{\"keccak256\":\"0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b18b23a1643fc6636c4ad9d9023e2e6ca2d3c2a4a046482d4655bff09950598d\",\"dweb:/ipfs/Qma6G5SqiovwrMPfgqTrRngK1HWW373Wkf9c6YP2NhXpPk\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol\":{\"keccak256\":\"0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5173fc9143bea314b159ca5a9adb5626659ef763bc598e27de5fa46efe3291a6\",\"dweb:/ipfs/QmSLFeMFPmVeGxT4sxRPW28ictjAS22M8rLeYRu9TXkA6D\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol\":{\"keccak256\":\"0xf1c07bc61e7b1dce195ed12d50f87980fbf2d63cac1326fd28287f55fe0ba625\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://060f10ff7afc33c1c2f2b4b5ba29231fd3c943146488084d0e4ab99fce991d97\",\"dweb:/ipfs/QmaSsefAqqEqtf8FgFUmDYMwTsAty3X1pqDb6SiFvry6B3\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Transfer.sol\":{\"keccak256\":\"0x621d6dd5b8b7e827351459fff4ac87c16ba4656757592cf67de8b199aea4cf9a\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://345aa8c007ed8b96a74260d289545713f1d7180df270d67687e3a540a61fa5c0\",\"dweb:/ipfs/QmNWCvpqSuar6UGLDVshUc7shUv3pt1J5FTf9VyZZ13wXL\"]},\"node_modules/@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol\":{\"keccak256\":\"0x9b6b3e7803bc5f2f8cd7ad57db8ac1def61a9930a5a3107df4882e028a9605d7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://da62d6be1f5c6edf577f0cb45666a8aa9c2086a4bac87d95d65f02e2f4c36a4b\",\"dweb:/ipfs/QmNkpvBpoCMvX8JwAFNSc5XxJ2q5BXJpL5L1txb4QkqVFF\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC165.sol\":{\"keccak256\":\"0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://11fea9f8bc98949ac6709f0c1699db7430d2948137aa94d5a9e95a91f61a710a\",\"dweb:/ipfs/QmQdfRXxQjwP6yn3DVo1GHPpriKNcFghSPi94Z1oKEFUNS\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC20.sol\":{\"keccak256\":\"0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a2608291cb038b388d80b79a06b6118a42f7894ff67b7da10ec0dbbf5b2973ba\",\"dweb:/ipfs/QmWohqcBLbcxmA4eGPhZDXe5RYMMEEpFq22nfkaUMvTfw1\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db\",\"dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0xca2ae13e0610f6a99238dd00b97bd786bc92732dae6d6b9d61f573ec51018310\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://75f8c71ce0c91c40dd5f249ace0b7d8270f8f1767231bcf71490f7157d6ba862\",\"dweb:/ipfs/QmYXgxeDyFHvz3JsXxLEYN6GNUR44ThHeFj5XkpkgMoG4w\"]},\"node_modules/@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0x9d8da059267bac779a2dbbb9a26c2acf00ca83085e105d62d5d4ef96054a47f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c78e2aa4313323cecd1ef12a8d6265b96beee1a199923abf55d9a2a9e291ad23\",\"dweb:/ipfs/QmUTs2KStXucZezzFo3EYeqYu47utu56qrF7jj1Gue65vb\"]},\"node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"node_modules/@openzeppelin/contracts/utils/Errors.sol\":{\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf\",\"dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB\"]},\"node_modules/@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0xddce8e17e3d3f9ed818b4f4c4478a8262aab8b11ed322f1bf5ed705bb4bd97fa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8084aa71a4cc7d2980972412a88fe4f114869faea3fefa5436431644eb5c0287\",\"dweb:/ipfs/Qmbqfs5dRdPvHVKY8kTaeyc65NdqXRQwRK7h9s5UJEhD1p\"]},\"node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { - "inputs": [], - "type": "error", - "name": "LZ_MessageLib_CannotWithdrawAltToken" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "requested", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "available", - "type": "uint256" - } - ], - "type": "error", - "name": "LZ_MessageLib_InvalidAmount" - }, - { - "inputs": [], - "type": "error", - "name": "LZ_MessageLib_InvalidExecutor" - }, - { - "inputs": [ - { "internalType": "uint256", "name": "actual", "type": "uint256" }, - { "internalType": "uint256", "name": "max", "type": "uint256" } - ], - "type": "error", - "name": "LZ_MessageLib_InvalidMessageSize" - }, - { "inputs": [], "type": "error", "name": "LZ_MessageLib_NotTreasury" }, - { "inputs": [], "type": "error", "name": "LZ_MessageLib_OnlyEndpoint" }, - { - "inputs": [], - "type": "error", - "name": "LZ_MessageLib_TransferFailed" - }, - { - "inputs": [], - "type": "error", - "name": "LZ_MessageLib_ZeroMessageSize" - }, - { - "inputs": [ - { "internalType": "address", "name": "owner", "type": "address" } - ], - "type": "error", - "name": "OwnableInvalidOwner" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "type": "error", - "name": "OwnableUnauthorizedAccount" - }, - { - "inputs": [ - { "internalType": "address", "name": "token", "type": "address" } - ], - "type": "error", - "name": "SafeERC20FailedOperation" - }, - { - "inputs": [ - { "internalType": "address", "name": "_to", "type": "address" }, - { "internalType": "uint256", "name": "_value", "type": "uint256" } - ], - "type": "error", - "name": "Transfer_NativeFailed" - }, - { "inputs": [], "type": "error", "name": "Transfer_ToAddressIsZero" }, - { - "inputs": [ - { - "internalType": "struct SetDefaultExecutorConfigParam[]", - "name": "params", - "type": "tuple[]", - "components": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" }, - { - "internalType": "struct ExecutorConfig", - "name": "config", - "type": "tuple", - "components": [ - { - "internalType": "uint32", - "name": "maxMessageSize", - "type": "uint32" - }, - { - "internalType": "address", - "name": "executor", - "type": "address" - } - ] - } - ], - "indexed": false - } - ], - "type": "event", - "name": "DefaultExecutorConfigsSet", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "oapp", - "type": "address", - "indexed": false - }, - { - "internalType": "uint32", - "name": "eid", - "type": "uint32", - "indexed": false - }, - { - "internalType": "struct ExecutorConfig", - "name": "config", - "type": "tuple", - "components": [ - { - "internalType": "uint32", - "name": "maxMessageSize", - "type": "uint32" - }, - { - "internalType": "address", - "name": "executor", - "type": "address" - } - ], - "indexed": false - } - ], - "type": "event", - "name": "ExecutorConfigSet", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "executor", - "type": "address", - "indexed": false - }, - { - "internalType": "uint256", - "name": "fee", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "ExecutorFeePaid", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "lzToken", - "type": "address", - "indexed": false - }, - { - "internalType": "address", - "name": "receiver", - "type": "address", - "indexed": false - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "LzTokenFeeWithdrawn", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "worker", - "type": "address", - "indexed": false - }, - { - "internalType": "address", - "name": "receiver", - "type": "address", - "indexed": false - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "NativeFeeWithdrawn", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "previousOwner", - "type": "address", - "indexed": true - }, - { - "internalType": "address", - "name": "newOwner", - "type": "address", - "indexed": true - } - ], - "type": "event", - "name": "OwnershipTransferred", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "newTreasuryNativeFeeCap", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "TreasuryNativeFeeCapSet", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "treasury", - "type": "address", - "indexed": false - } - ], - "type": "event", - "name": "TreasurySet", - "anonymous": false - }, - { - "inputs": [ - { "internalType": "address", "name": "oapp", "type": "address" }, - { "internalType": "uint32", "name": "eid", "type": "uint32" } - ], - "stateMutability": "view", - "type": "function", - "name": "executorConfigs", - "outputs": [ - { - "internalType": "uint32", - "name": "maxMessageSize", - "type": "uint32" - }, - { "internalType": "address", "name": "executor", "type": "address" } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "worker", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "fees", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ] - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { "internalType": "address", "name": "_oapp", "type": "address" }, - { - "internalType": "uint32", - "name": "_configType", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function", - "name": "getConfig", - "outputs": [ - { "internalType": "bytes", "name": "config", "type": "bytes" } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "_oapp", "type": "address" }, - { "internalType": "uint32", "name": "_remoteEid", "type": "uint32" } - ], - "stateMutability": "view", - "type": "function", - "name": "getExecutorConfig", - "outputs": [ - { - "internalType": "struct ExecutorConfig", - "name": "rtnConfig", - "type": "tuple", - "components": [ - { - "internalType": "uint32", - "name": "maxMessageSize", - "type": "uint32" - }, - { - "internalType": "address", - "name": "executor", - "type": "address" - } - ] - } - ] - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" } - ], - "stateMutability": "view", - "type": "function", - "name": "isSupportedEid", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [], - "stateMutability": "pure", - "type": "function", - "name": "messageLibType", - "outputs": [ - { - "internalType": "enum MessageLibType", - "name": "", - "type": "uint8" - } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "owner", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ] - }, - { - "inputs": [ - { - "internalType": "struct Packet", - "name": "_packet", - "type": "tuple", - "components": [ - { "internalType": "uint64", "name": "nonce", "type": "uint64" }, - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "receiver", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "guid", - "type": "bytes32" - }, - { "internalType": "bytes", "name": "message", "type": "bytes" } - ] - }, - { "internalType": "bytes", "name": "_options", "type": "bytes" }, - { "internalType": "bool", "name": "_payInLzToken", "type": "bool" } - ], - "stateMutability": "view", - "type": "function", - "name": "quote", - "outputs": [ - { - "internalType": "struct MessagingFee", - "name": "", - "type": "tuple", - "components": [ - { - "internalType": "uint256", - "name": "nativeFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "lzTokenFee", - "type": "uint256" - } - ] - } - ] - }, - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "function", - "name": "renounceOwnership" - }, - { - "inputs": [ - { - "internalType": "struct Packet", - "name": "_packet", - "type": "tuple", - "components": [ - { "internalType": "uint64", "name": "nonce", "type": "uint64" }, - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "receiver", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "guid", - "type": "bytes32" - }, - { "internalType": "bytes", "name": "message", "type": "bytes" } - ] - }, - { "internalType": "bytes", "name": "_options", "type": "bytes" }, - { "internalType": "bool", "name": "_payInLzToken", "type": "bool" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "send", - "outputs": [ - { - "internalType": "struct MessagingFee", - "name": "", - "type": "tuple", - "components": [ - { - "internalType": "uint256", - "name": "nativeFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "lzTokenFee", - "type": "uint256" - } - ] - }, - { "internalType": "bytes", "name": "", "type": "bytes" } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "_oapp", "type": "address" }, - { - "internalType": "struct SetConfigParam[]", - "name": "_config", - "type": "tuple[]", - "components": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" }, - { - "internalType": "uint32", - "name": "configType", - "type": "uint32" - }, - { "internalType": "bytes", "name": "config", "type": "bytes" } - ] - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setConfig" - }, - { - "inputs": [ - { - "internalType": "struct SetDefaultExecutorConfigParam[]", - "name": "_params", - "type": "tuple[]", - "components": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" }, - { - "internalType": "struct ExecutorConfig", - "name": "config", - "type": "tuple", - "components": [ - { - "internalType": "uint32", - "name": "maxMessageSize", - "type": "uint32" - }, - { - "internalType": "address", - "name": "executor", - "type": "address" - } - ] - } - ] - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setDefaultExecutorConfigs" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_treasury", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setTreasury" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_newTreasuryNativeFeeCap", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setTreasuryNativeFeeCap" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "_interfaceId", - "type": "bytes4" - } - ], - "stateMutability": "view", - "type": "function", - "name": "supportsInterface", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "address", "name": "newOwner", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "transferOwnership" - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "treasury", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "version", - "outputs": [ - { "internalType": "uint64", "name": "major", "type": "uint64" }, - { "internalType": "uint8", "name": "minor", "type": "uint8" }, - { - "internalType": "uint8", - "name": "endpointVersion", - "type": "uint8" - } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "_to", "type": "address" }, - { "internalType": "uint256", "name": "_amount", "type": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "withdrawFee" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_lzToken", - "type": "address" - }, - { "internalType": "address", "name": "_to", "type": "address" }, - { "internalType": "uint256", "name": "_amount", "type": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "withdrawLzTokenFee" - }, - { "inputs": [], "stateMutability": "payable", "type": "receive" } - ], - "devdoc": { - "kind": "dev", - "methods": { - "owner()": { "details": "Returns the address of the current owner." }, - "renounceOwnership()": { - "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner." - }, - "setTreasuryNativeFeeCap(uint256)": { - "details": "the new value can not be greater than the old value, i.e. down only" - }, - "transferOwnership(address)": { - "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." - }, - "withdrawFee(address,uint256)": { "details": "E2 only" }, - "withdrawLzTokenFee(address,address,uint256)": { - "details": "_lzToken is a user-supplied value because lzToken might change in the endpoint before all lzToken can be taken outE2 onlytreasury only function" - } - }, - "version": 1 - }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/SendLibBaseE2.sol": "SendLibBaseE2" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/MessageLibBase.sol": { - "keccak256": "0x14899a4398251439938d6ef8a15ea8c6acdddc98a7b0066d7e63676192dea0d1", - "urls": [ - "bzz-raw://3998d03de7025c2c601a4fdcaf9475d12a1ef661fcf1a685ece84fdde6498cf9", - "dweb:/ipfs/QmReknRbiGAiPqq9toKyXKo6hUKXrQPJyyS6LnTGjiDKoY" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/SendLibBase.sol": { - "keccak256": "0x400eaa11c7d50b4c25b7625290ff00937b6875ad3986b353c37a4e62b5a834b1", - "urls": [ - "bzz-raw://1f51eb0785d3630815a9d63de1c1331fe966df4c3f2fb6750b8da7be9e9743a4", - "dweb:/ipfs/QmaAEf1kjhhff3AUhRiPm6ikpk2YMMrpKc2ccYzNs7waBy" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/SendLibBaseE2.sol": { - "keccak256": "0x90ada11d0a330732c56b989e59c8272b70f956a5d7be2cf209d6d51a51d35a9e", - "urls": [ - "bzz-raw://0abc7a6d07ec40a3a922256ad05bdd6eca10550d85bfd2e67147473617bb0497", - "dweb:/ipfs/QmRDphmFhx1scRJXcusg6pUhVQvp941oCJwnHGAPdrNY4T" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroExecutor.sol": { - "keccak256": "0x3647af317ee126b1247a782abb30e59ec5ab21b4945f1d3b4370d1fa3c1bf347", - "urls": [ - "bzz-raw://5b51cd5e7347ee869a06bd57a698f40e4a901ec7fdcb27f0ef485e4a0e1e9be4", - "dweb:/ipfs/QmP2Nc73veRzLGdUahkjhQAiKR9ZWYiUtSGwoMB1sPXxUp" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroTreasury.sol": { - "keccak256": "0x2aab2a3cf50e20af56d9204b1367d52a47abba0b0c7c21f304d413de1ced6345", - "urls": [ - "bzz-raw://f8b603b5e5e62c621715f8449280af240a4add8721c4ae8f5e8e491507f6e4c5", - "dweb:/ipfs/QmUQ7Ti7CPmKnRbQFN9TLvVbeZhsi1xUjqZPTJ36dCZ6y8" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/libs/SafeCall.sol": { - "keccak256": "0xc3b7b7927472f7c1ca9703af310e9050c798afaccf399ad0f131e179b8582c8d", - "urls": [ - "bzz-raw://e5be13af32ff6b371985d405bc6fe8ac2faf5445bd88fda2dab4b869f66e3f89", - "dweb:/ipfs/Qmd21k4H2tAHKrpiuHUbH87eNtHLLJzHj9ZCrMh8AKfDHh" - ], - "license": "MIT OR Apache-2.0" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol": { - "keccak256": "0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3", - "urls": [ - "bzz-raw://bacc29fd3866af71e59cb0bdc1cf82c882a4a7f4e2652fd413c9f12649762083", - "dweb:/ipfs/QmZh2toLnrQDWaNYhS5K4NoW7Vxd2GdZx9KA77vKEDLAqs" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol": { - "keccak256": "0x5cf5f24751b4e3ea1c9c5ded07cedfdfd62566b6daaffcc0144733859c9dba0c", - "urls": [ - "bzz-raw://cae7e35007a714f007ea08045ef7c0cfa6c91fd2425b5028b2d49abad357a5f0", - "dweb:/ipfs/QmcDBs5tsiyB35b8cwzWQWNnpkawb3uuHRaqE77Hxm2tve" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol": { - "keccak256": "0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc", - "urls": [ - "bzz-raw://d8ff6a8a89297fa127f86b54e0db3eba1d6a6eeb4f6398d3c84d569665ac8f1b", - "dweb:/ipfs/QmVSwhw6xFDrLRAX4RXaCM47yBaBtac4wf36DYEq6KCTvT" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol": { - "keccak256": "0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972", - "urls": [ - "bzz-raw://7e1b245d58221d16d8b5e0f01ef3e289a24a7df1ace3b94239e4d5b954ad5927", - "dweb:/ipfs/Qmappsgp7PCY9rSSNE9Cdn4BTRX591WfCSEgq2HxhA3z6S" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol": { - "keccak256": "0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901", - "urls": [ - "bzz-raw://b18b23a1643fc6636c4ad9d9023e2e6ca2d3c2a4a046482d4655bff09950598d", - "dweb:/ipfs/Qma6G5SqiovwrMPfgqTrRngK1HWW373Wkf9c6YP2NhXpPk" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol": { - "keccak256": "0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e", - "urls": [ - "bzz-raw://5173fc9143bea314b159ca5a9adb5626659ef763bc598e27de5fa46efe3291a6", - "dweb:/ipfs/QmSLFeMFPmVeGxT4sxRPW28ictjAS22M8rLeYRu9TXkA6D" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol": { - "keccak256": "0xf1c07bc61e7b1dce195ed12d50f87980fbf2d63cac1326fd28287f55fe0ba625", - "urls": [ - "bzz-raw://060f10ff7afc33c1c2f2b4b5ba29231fd3c943146488084d0e4ab99fce991d97", - "dweb:/ipfs/QmaSsefAqqEqtf8FgFUmDYMwTsAty3X1pqDb6SiFvry6B3" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Transfer.sol": { - "keccak256": "0x621d6dd5b8b7e827351459fff4ac87c16ba4656757592cf67de8b199aea4cf9a", - "urls": [ - "bzz-raw://345aa8c007ed8b96a74260d289545713f1d7180df270d67687e3a540a61fa5c0", - "dweb:/ipfs/QmNWCvpqSuar6UGLDVshUc7shUv3pt1J5FTf9VyZZ13wXL" - ], - "license": "LZBL-1.2" - }, - "node_modules/@openzeppelin/contracts/access/Ownable.sol": { - "keccak256": "0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb", - "urls": [ - "bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6", - "dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol": { - "keccak256": "0x9b6b3e7803bc5f2f8cd7ad57db8ac1def61a9930a5a3107df4882e028a9605d7", - "urls": [ - "bzz-raw://da62d6be1f5c6edf577f0cb45666a8aa9c2086a4bac87d95d65f02e2f4c36a4b", - "dweb:/ipfs/QmNkpvBpoCMvX8JwAFNSc5XxJ2q5BXJpL5L1txb4QkqVFF" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/interfaces/IERC165.sol": { - "keccak256": "0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724", - "urls": [ - "bzz-raw://11fea9f8bc98949ac6709f0c1699db7430d2948137aa94d5a9e95a91f61a710a", - "dweb:/ipfs/QmQdfRXxQjwP6yn3DVo1GHPpriKNcFghSPi94Z1oKEFUNS" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/interfaces/IERC20.sol": { - "keccak256": "0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c", - "urls": [ - "bzz-raw://a2608291cb038b388d80b79a06b6118a42f7894ff67b7da10ec0dbbf5b2973ba", - "dweb:/ipfs/QmWohqcBLbcxmA4eGPhZDXe5RYMMEEpFq22nfkaUMvTfw1" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol": { - "keccak256": "0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7", - "urls": [ - "bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db", - "dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol": { - "keccak256": "0xca2ae13e0610f6a99238dd00b97bd786bc92732dae6d6b9d61f573ec51018310", - "urls": [ - "bzz-raw://75f8c71ce0c91c40dd5f249ace0b7d8270f8f1767231bcf71490f7157d6ba862", - "dweb:/ipfs/QmYXgxeDyFHvz3JsXxLEYN6GNUR44ThHeFj5XkpkgMoG4w" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Address.sol": { - "keccak256": "0x9d8da059267bac779a2dbbb9a26c2acf00ca83085e105d62d5d4ef96054a47f5", - "urls": [ - "bzz-raw://c78e2aa4313323cecd1ef12a8d6265b96beee1a199923abf55d9a2a9e291ad23", - "dweb:/ipfs/QmUTs2KStXucZezzFo3EYeqYu47utu56qrF7jj1Gue65vb" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Context.sol": { - "keccak256": "0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2", - "urls": [ - "bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12", - "dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Errors.sol": { - "keccak256": "0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123", - "urls": [ - "bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf", - "dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/introspection/ERC165.sol": { - "keccak256": "0xddce8e17e3d3f9ed818b4f4c4478a8262aab8b11ed322f1bf5ed705bb4bd97fa", - "urls": [ - "bzz-raw://8084aa71a4cc7d2980972412a88fe4f114869faea3fefa5436431644eb5c0287", - "dweb:/ipfs/Qmbqfs5dRdPvHVKY8kTaeyc65NdqXRQwRK7h9s5UJEhD1p" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol": { - "keccak256": "0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8", - "urls": [ - "bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621", - "dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL" - ], - "license": "MIT" - } - }, - "version": 1 - }, - "id": 3 -} diff --git a/examples/oft-movement/out/SendUln302Mock.sol/SendUln302Mock.json b/examples/oft-movement/out/SendUln302Mock.sol/SendUln302Mock.json deleted file mode 100644 index a309fcbcc..000000000 --- a/examples/oft-movement/out/SendUln302Mock.sol/SendUln302Mock.json +++ /dev/null @@ -1,2945 +0,0 @@ -{ - "abi": [ - { - "type": "constructor", - "inputs": [ - { - "name": "_verifyHelper", - "type": "address", - "internalType": "address payable" - }, - { "name": "_endpoint", "type": "address", "internalType": "address" }, - { - "name": "_treasuryGasCap", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "_treasuryGasForFeeCap", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "nonpayable" - }, - { "type": "receive", "stateMutability": "payable" }, - { - "type": "function", - "name": "executorConfigs", - "inputs": [ - { "name": "oapp", "type": "address", "internalType": "address" }, - { "name": "eid", "type": "uint32", "internalType": "uint32" } - ], - "outputs": [ - { - "name": "maxMessageSize", - "type": "uint32", - "internalType": "uint32" - }, - { "name": "executor", "type": "address", "internalType": "address" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "fees", - "inputs": [ - { "name": "worker", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getAppUlnConfig", - "inputs": [ - { "name": "_oapp", "type": "address", "internalType": "address" }, - { "name": "_remoteEid", "type": "uint32", "internalType": "uint32" } - ], - "outputs": [ - { - "name": "", - "type": "tuple", - "internalType": "struct UlnConfig", - "components": [ - { - "name": "confirmations", - "type": "uint64", - "internalType": "uint64" - }, - { - "name": "requiredDVNCount", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "optionalDVNCount", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "optionalDVNThreshold", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "requiredDVNs", - "type": "address[]", - "internalType": "address[]" - }, - { - "name": "optionalDVNs", - "type": "address[]", - "internalType": "address[]" - } - ] - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getConfig", - "inputs": [ - { "name": "_eid", "type": "uint32", "internalType": "uint32" }, - { "name": "_oapp", "type": "address", "internalType": "address" }, - { "name": "_configType", "type": "uint32", "internalType": "uint32" } - ], - "outputs": [{ "name": "", "type": "bytes", "internalType": "bytes" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getExecutorConfig", - "inputs": [ - { "name": "_oapp", "type": "address", "internalType": "address" }, - { "name": "_remoteEid", "type": "uint32", "internalType": "uint32" } - ], - "outputs": [ - { - "name": "rtnConfig", - "type": "tuple", - "internalType": "struct ExecutorConfig", - "components": [ - { - "name": "maxMessageSize", - "type": "uint32", - "internalType": "uint32" - }, - { "name": "executor", "type": "address", "internalType": "address" } - ] - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getUlnConfig", - "inputs": [ - { "name": "_oapp", "type": "address", "internalType": "address" }, - { "name": "_remoteEid", "type": "uint32", "internalType": "uint32" } - ], - "outputs": [ - { - "name": "rtnConfig", - "type": "tuple", - "internalType": "struct UlnConfig", - "components": [ - { - "name": "confirmations", - "type": "uint64", - "internalType": "uint64" - }, - { - "name": "requiredDVNCount", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "optionalDVNCount", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "optionalDVNThreshold", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "requiredDVNs", - "type": "address[]", - "internalType": "address[]" - }, - { - "name": "optionalDVNs", - "type": "address[]", - "internalType": "address[]" - } - ] - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "isSupportedEid", - "inputs": [ - { "name": "_eid", "type": "uint32", "internalType": "uint32" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "messageLibType", - "inputs": [], - "outputs": [ - { "name": "", "type": "uint8", "internalType": "enum MessageLibType" } - ], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "owner", - "inputs": [], - "outputs": [{ "name": "", "type": "address", "internalType": "address" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "quote", - "inputs": [ - { - "name": "_packet", - "type": "tuple", - "internalType": "struct Packet", - "components": [ - { "name": "nonce", "type": "uint64", "internalType": "uint64" }, - { "name": "srcEid", "type": "uint32", "internalType": "uint32" }, - { "name": "sender", "type": "address", "internalType": "address" }, - { "name": "dstEid", "type": "uint32", "internalType": "uint32" }, - { - "name": "receiver", - "type": "bytes32", - "internalType": "bytes32" - }, - { "name": "guid", "type": "bytes32", "internalType": "bytes32" }, - { "name": "message", "type": "bytes", "internalType": "bytes" } - ] - }, - { "name": "_options", "type": "bytes", "internalType": "bytes" }, - { "name": "_payInLzToken", "type": "bool", "internalType": "bool" } - ], - "outputs": [ - { - "name": "", - "type": "tuple", - "internalType": "struct MessagingFee", - "components": [ - { - "name": "nativeFee", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "lzTokenFee", - "type": "uint256", - "internalType": "uint256" - } - ] - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "renounceOwnership", - "inputs": [], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "send", - "inputs": [ - { - "name": "_packet", - "type": "tuple", - "internalType": "struct Packet", - "components": [ - { "name": "nonce", "type": "uint64", "internalType": "uint64" }, - { "name": "srcEid", "type": "uint32", "internalType": "uint32" }, - { "name": "sender", "type": "address", "internalType": "address" }, - { "name": "dstEid", "type": "uint32", "internalType": "uint32" }, - { - "name": "receiver", - "type": "bytes32", - "internalType": "bytes32" - }, - { "name": "guid", "type": "bytes32", "internalType": "bytes32" }, - { "name": "message", "type": "bytes", "internalType": "bytes" } - ] - }, - { "name": "_options", "type": "bytes", "internalType": "bytes" }, - { "name": "_payInLzToken", "type": "bool", "internalType": "bool" } - ], - "outputs": [ - { - "name": "fee", - "type": "tuple", - "internalType": "struct MessagingFee", - "components": [ - { - "name": "nativeFee", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "lzTokenFee", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { "name": "encodedPacket", "type": "bytes", "internalType": "bytes" } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setConfig", - "inputs": [ - { "name": "_oapp", "type": "address", "internalType": "address" }, - { - "name": "_params", - "type": "tuple[]", - "internalType": "struct SetConfigParam[]", - "components": [ - { "name": "eid", "type": "uint32", "internalType": "uint32" }, - { - "name": "configType", - "type": "uint32", - "internalType": "uint32" - }, - { "name": "config", "type": "bytes", "internalType": "bytes" } - ] - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setDefaultExecutorConfigs", - "inputs": [ - { - "name": "_params", - "type": "tuple[]", - "internalType": "struct SetDefaultExecutorConfigParam[]", - "components": [ - { "name": "eid", "type": "uint32", "internalType": "uint32" }, - { - "name": "config", - "type": "tuple", - "internalType": "struct ExecutorConfig", - "components": [ - { - "name": "maxMessageSize", - "type": "uint32", - "internalType": "uint32" - }, - { - "name": "executor", - "type": "address", - "internalType": "address" - } - ] - } - ] - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setDefaultUlnConfigs", - "inputs": [ - { - "name": "_params", - "type": "tuple[]", - "internalType": "struct SetDefaultUlnConfigParam[]", - "components": [ - { "name": "eid", "type": "uint32", "internalType": "uint32" }, - { - "name": "config", - "type": "tuple", - "internalType": "struct UlnConfig", - "components": [ - { - "name": "confirmations", - "type": "uint64", - "internalType": "uint64" - }, - { - "name": "requiredDVNCount", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "optionalDVNCount", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "optionalDVNThreshold", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "requiredDVNs", - "type": "address[]", - "internalType": "address[]" - }, - { - "name": "optionalDVNs", - "type": "address[]", - "internalType": "address[]" - } - ] - } - ] - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setTreasury", - "inputs": [ - { "name": "_treasury", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setTreasuryNativeFeeCap", - "inputs": [ - { - "name": "_newTreasuryNativeFeeCap", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "supportsInterface", - "inputs": [ - { "name": "_interfaceId", "type": "bytes4", "internalType": "bytes4" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "testHelper", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "contract TestHelperOz5" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "transferOwnership", - "inputs": [ - { "name": "newOwner", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "treasury", - "inputs": [], - "outputs": [{ "name": "", "type": "address", "internalType": "address" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "version", - "inputs": [], - "outputs": [ - { "name": "major", "type": "uint64", "internalType": "uint64" }, - { "name": "minor", "type": "uint8", "internalType": "uint8" }, - { "name": "endpointVersion", "type": "uint8", "internalType": "uint8" } - ], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "withdrawFee", - "inputs": [ - { "name": "_to", "type": "address", "internalType": "address" }, - { "name": "_amount", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "withdrawLzTokenFee", - "inputs": [ - { "name": "_lzToken", "type": "address", "internalType": "address" }, - { "name": "_to", "type": "address", "internalType": "address" }, - { "name": "_amount", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "event", - "name": "DVNFeePaid", - "inputs": [ - { - "name": "requiredDVNs", - "type": "address[]", - "indexed": false, - "internalType": "address[]" - }, - { - "name": "optionalDVNs", - "type": "address[]", - "indexed": false, - "internalType": "address[]" - }, - { - "name": "fees", - "type": "uint256[]", - "indexed": false, - "internalType": "uint256[]" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "DefaultExecutorConfigsSet", - "inputs": [ - { - "name": "params", - "type": "tuple[]", - "indexed": false, - "internalType": "struct SetDefaultExecutorConfigParam[]", - "components": [ - { "name": "eid", "type": "uint32", "internalType": "uint32" }, - { - "name": "config", - "type": "tuple", - "internalType": "struct ExecutorConfig", - "components": [ - { - "name": "maxMessageSize", - "type": "uint32", - "internalType": "uint32" - }, - { - "name": "executor", - "type": "address", - "internalType": "address" - } - ] - } - ] - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "DefaultUlnConfigsSet", - "inputs": [ - { - "name": "params", - "type": "tuple[]", - "indexed": false, - "internalType": "struct SetDefaultUlnConfigParam[]", - "components": [ - { "name": "eid", "type": "uint32", "internalType": "uint32" }, - { - "name": "config", - "type": "tuple", - "internalType": "struct UlnConfig", - "components": [ - { - "name": "confirmations", - "type": "uint64", - "internalType": "uint64" - }, - { - "name": "requiredDVNCount", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "optionalDVNCount", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "optionalDVNThreshold", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "requiredDVNs", - "type": "address[]", - "internalType": "address[]" - }, - { - "name": "optionalDVNs", - "type": "address[]", - "internalType": "address[]" - } - ] - } - ] - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "ExecutorConfigSet", - "inputs": [ - { - "name": "oapp", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "eid", - "type": "uint32", - "indexed": false, - "internalType": "uint32" - }, - { - "name": "config", - "type": "tuple", - "indexed": false, - "internalType": "struct ExecutorConfig", - "components": [ - { - "name": "maxMessageSize", - "type": "uint32", - "internalType": "uint32" - }, - { "name": "executor", "type": "address", "internalType": "address" } - ] - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "ExecutorFeePaid", - "inputs": [ - { - "name": "executor", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "fee", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "LzTokenFeeWithdrawn", - "inputs": [ - { - "name": "lzToken", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "receiver", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "amount", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "NativeFeeWithdrawn", - "inputs": [ - { - "name": "worker", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "receiver", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "amount", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "OwnershipTransferred", - "inputs": [ - { - "name": "previousOwner", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "newOwner", - "type": "address", - "indexed": true, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "TreasuryNativeFeeCapSet", - "inputs": [ - { - "name": "newTreasuryNativeFeeCap", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "TreasurySet", - "inputs": [ - { - "name": "treasury", - "type": "address", - "indexed": false, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "UlnConfigSet", - "inputs": [ - { - "name": "oapp", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "eid", - "type": "uint32", - "indexed": false, - "internalType": "uint32" - }, - { - "name": "config", - "type": "tuple", - "indexed": false, - "internalType": "struct UlnConfig", - "components": [ - { - "name": "confirmations", - "type": "uint64", - "internalType": "uint64" - }, - { - "name": "requiredDVNCount", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "optionalDVNCount", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "optionalDVNThreshold", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "requiredDVNs", - "type": "address[]", - "internalType": "address[]" - }, - { - "name": "optionalDVNs", - "type": "address[]", - "internalType": "address[]" - } - ] - } - ], - "anonymous": false - }, - { "type": "error", "name": "DVN_InvalidDVNIdx", "inputs": [] }, - { - "type": "error", - "name": "DVN_InvalidDVNOptions", - "inputs": [ - { "name": "cursor", "type": "uint256", "internalType": "uint256" } - ] - }, - { - "type": "error", - "name": "LZ_MessageLib_CannotWithdrawAltToken", - "inputs": [] - }, - { - "type": "error", - "name": "LZ_MessageLib_InvalidAmount", - "inputs": [ - { "name": "requested", "type": "uint256", "internalType": "uint256" }, - { "name": "available", "type": "uint256", "internalType": "uint256" } - ] - }, - { "type": "error", "name": "LZ_MessageLib_InvalidExecutor", "inputs": [] }, - { - "type": "error", - "name": "LZ_MessageLib_InvalidMessageSize", - "inputs": [ - { "name": "actual", "type": "uint256", "internalType": "uint256" }, - { "name": "max", "type": "uint256", "internalType": "uint256" } - ] - }, - { "type": "error", "name": "LZ_MessageLib_NotTreasury", "inputs": [] }, - { "type": "error", "name": "LZ_MessageLib_OnlyEndpoint", "inputs": [] }, - { "type": "error", "name": "LZ_MessageLib_TransferFailed", "inputs": [] }, - { "type": "error", "name": "LZ_MessageLib_ZeroMessageSize", "inputs": [] }, - { "type": "error", "name": "LZ_ULN_AtLeastOneDVN", "inputs": [] }, - { - "type": "error", - "name": "LZ_ULN_InvalidConfigType", - "inputs": [ - { "name": "configType", "type": "uint32", "internalType": "uint32" } - ] - }, - { "type": "error", "name": "LZ_ULN_InvalidConfirmations", "inputs": [] }, - { - "type": "error", - "name": "LZ_ULN_InvalidLegacyType1Option", - "inputs": [] - }, - { - "type": "error", - "name": "LZ_ULN_InvalidLegacyType2Option", - "inputs": [] - }, - { "type": "error", "name": "LZ_ULN_InvalidOptionalDVNCount", "inputs": [] }, - { - "type": "error", - "name": "LZ_ULN_InvalidOptionalDVNThreshold", - "inputs": [] - }, - { "type": "error", "name": "LZ_ULN_InvalidRequiredDVNCount", "inputs": [] }, - { - "type": "error", - "name": "LZ_ULN_InvalidWorkerId", - "inputs": [ - { "name": "workerId", "type": "uint8", "internalType": "uint8" } - ] - }, - { - "type": "error", - "name": "LZ_ULN_InvalidWorkerOptions", - "inputs": [ - { "name": "cursor", "type": "uint256", "internalType": "uint256" } - ] - }, - { "type": "error", "name": "LZ_ULN_Unsorted", "inputs": [] }, - { - "type": "error", - "name": "LZ_ULN_UnsupportedEid", - "inputs": [{ "name": "eid", "type": "uint32", "internalType": "uint32" }] - }, - { - "type": "error", - "name": "LZ_ULN_UnsupportedOptionType", - "inputs": [ - { "name": "optionType", "type": "uint16", "internalType": "uint16" } - ] - }, - { - "type": "error", - "name": "OwnableInvalidOwner", - "inputs": [ - { "name": "owner", "type": "address", "internalType": "address" } - ] - }, - { - "type": "error", - "name": "OwnableUnauthorizedAccount", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ] - }, - { - "type": "error", - "name": "SafeCastOverflowedUintDowncast", - "inputs": [ - { "name": "bits", "type": "uint8", "internalType": "uint8" }, - { "name": "value", "type": "uint256", "internalType": "uint256" } - ] - }, - { - "type": "error", - "name": "SafeERC20FailedOperation", - "inputs": [ - { "name": "token", "type": "address", "internalType": "address" } - ] - }, - { - "type": "error", - "name": "Transfer_NativeFailed", - "inputs": [ - { "name": "_to", "type": "address", "internalType": "address" }, - { "name": "_value", "type": "uint256", "internalType": "uint256" } - ] - }, - { "type": "error", "name": "Transfer_ToAddressIsZero", "inputs": [] } - ], - "bytecode": { - "object": "0x60e06040523480156200001157600080fd5b50604051620049703803806200497083398101604081905262000034916200018b565b82828282836001600160a01b031663416ecebf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000077573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200009d9190620001d8565b6001600160a01b03821660805263ffffffff811660a05283833380620000dd57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b620000e88162000122565b5060c0919091526002555050600680546001600160a01b0319166001600160a01b0398909816979097179096555062000207945050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146200018857600080fd5b50565b60008060008060808587031215620001a257600080fd5b8451620001af8162000172565b6020860151909450620001c28162000172565b6040860151606090960151949790965092505050565b600060208284031215620001eb57600080fd5b815163ffffffff811681146200020057600080fd5b9392505050565b60805160a05160c0516147206200025060003960008181611d100152611e730152600050506000818161069a0152818161079f015281816112b101526117d901526147206000f3fe60806040526004361061014f5760003560e01c806361d027b3116100b6578063d15b0d491161006f578063d15b0d4914610450578063d80e9bd914610470578063f0f442601461049d578063f2fde38b146104bd578063faaebd21146104dd578063fd9be5221461051857600080fd5b806361d027b3146103905780636750cd4c146103b0578063715018a6146103d05780638da5cb5b146103e55780639c33abf714610403578063c14c43491461043057600080fd5b806329460b0b1161010857806329460b0b1461025357806339e3f938146102735780634389e58f146102a057806343ea4fa9146102ce5780634d963200146102ee57806354fd4d501461036357600080fd5b806301ffc9a71461015b5780630e97289b14610190578063188183f4146101c85780631881d94d146101f5578063200175f71461021157806320efd7221461023357600080fd5b3661015657005b600080fd5b34801561016757600080fd5b5061017b6101763660046135db565b610538565b60405190151581526020015b60405180910390f35b34801561019c57600080fd5b506006546101b0906001600160a01b031681565b6040516001600160a01b039091168152602001610187565b3480156101d457600080fd5b506101e86101e3366004613647565b61058a565b6040516101879190613680565b34801561020157600080fd5b50600060405161018791906136a6565b34801561021d57600080fd5b5061023161022c3660046136ce565b610663565b005b34801561023f57600080fd5b5061023161024e366004613753565b61079d565b34801561025f57600080fd5b5061023161026e3660046137a7565b610912565b34801561027f57600080fd5b5061029361028e366004613647565b610aaa565b604051610187919061389e565b3480156102ac57600080fd5b506102c06102bb3660046138c1565b610be5565b6040516101879291906139c0565b3480156102da57600080fd5b506102936102e9366004613647565b610c7a565b3480156102fa57600080fd5b5061033f610309366004613647565b600460209081526000928352604080842090915290825290205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b03909116602083015201610187565b34801561036f57600080fd5b50604080516003815260006020820152600291810191909152606001610187565b34801561039c57600080fd5b506003546101b0906001600160a01b031681565b3480156103bc57600080fd5b5061017b6103cb3660046139e4565b610f86565b3480156103dc57600080fd5b50610231610f91565b3480156103f157600080fd5b506000546001600160a01b03166101b0565b34801561040f57600080fd5b5061042361041e366004613a01565b610fa5565b6040516101879190613a4c565b34801561043c57600080fd5b5061023161044b366004613a5f565b611037565b34801561045c57600080fd5b5061023161046b366004613ad3565b611170565b34801561047c57600080fd5b5061049061048b3660046138c1565b6111e5565b6040516101879190613aec565b3480156104a957600080fd5b506102316104b8366004613b03565b611255565b3480156104c957600080fd5b506102316104d8366004613b03565b611269565b3480156104e957600080fd5b5061050a6104f8366004613b03565b60056020526000908152604090205481565b604051908152602001610187565b34801561052457600080fd5b50610231610533366004613b20565b6112a4565b60006001600160e01b031982166325fc096160e21b148061056957506001600160e01b0319821663b6e9ace360e01b145b8061058457506301ffc9a760e01b6001600160e01b03198316145b92915050565b604080518082019091526000808252602082015263ffffffff80831660008181527f17ef568e3e12ab5b9c7254a8d58478811de00f9e6eb34345acd53bf8fd09d3ec602090815260408083206001600160a01b038916845260048352818420948452939091528120805492939092169081900361060e57825463ffffffff16610610565b805b63ffffffff168452815464010000000090046001600160a01b03168061064857835464010000000090046001600160a01b031661064a565b805b6001600160a01b03166020860152509295945050505050565b6003546001600160a01b0316331461068e5760405163885762a760e01b815260040160405180910390fd5b826001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e1758bd86040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061071a9190613b4c565b6001600160a01b031603610741576040516339a5741160e21b815260040160405180910390fd5b61074c838383611384565b604080516001600160a01b038086168252841660208201529081018290527fe081464b7278501267de69fa85b7b9560b0ae05d5fbfaab9b1986c70356e2efe906060015b60405180910390a1505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633146107e65760405163467409c360e01b815260040160405180910390fd5b60005b8181101561090c573683838381811061080457610804613b69565b90506020028101906108169190613b7f565b905061082d61082860208301836139e4565b6113c4565b600161083f60408301602084016139e4565b63ffffffff160361087f5761087a61085a60208301836139e4565b866108686040850185613b9f565b8101906108759190613c75565b6113f2565b610903565b600261089160408301602084016139e4565b63ffffffff16036108cc5761087a6108ac60208301836139e4565b866108ba6040850185613b9f565b8101906108c79190613e35565b61147a565b6108dc60408201602083016139e4565b604051635d4be0fd60e11b815263ffffffff90911660048201526024015b60405180910390fd5b506001016107e9565b50505050565b61091a6114c3565b60005b81811015610a6c573683838381811061093857610938613b69565b905060200281019061094a9190613e69565b905060ff61095b6020830183613e7f565b61096c906040810190602001613e95565b60ff160361098d576040516341d50bed60e11b815260040160405180910390fd5b60ff61099c6020830183613e7f565b6109ad906060810190604001613e95565b60ff16036109ce5760405163211089b360e11b815260040160405180910390fd5b6001600160401b036109e36020830183613e7f565b6109f1906020810190613eb0565b6001600160401b031603610a185760405163281b33d760e11b815260040160405180910390fd5b610a36610a286020830183613e7f565b610a3190613ecb565b6114f0565b610a636000610a4860208401846139e4565b610a556020850185613e7f565b610a5e90613ecb565b611528565b5060010161091d565b507faaf3aaa0c11056e86ac56eb653e25b005ca1a7d4dcd21ba24647f7ab63f3b5608282604051610a9e929190613f5d565b60405180910390a15050565b610ab2613522565b6001600160a01b038316600090815260016020818152604080842063ffffffff87168552825292839020835160c08101855281546001600160401b038116825260ff600160401b8204811683860152600160481b8204811683880152600160501b9091041660608201529281018054855181850281018501909652808652939491936080860193830182828015610b7257602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610b54575b5050505050815260200160028201805480602002602001604051908101604052809291908181526020018280548015610bd457602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610bb6575b505050505081525050905092915050565b60408051808201909152600080825260208201526060610c07868686866117c1565b600654604051631f5dad8b60e31b81529294509092506001600160a01b03169063faed6c5890610c3f908490899089906004016140a2565b600060405180830381600087803b158015610c5957600080fd5b505af1158015610c6d573d6000803e3d6000fd5b5050505094509492505050565b610c82613522565b63ffffffff821660008181527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49602090815260408083206001600160a01b03881684526001835281842094845293909152902080546001600160401b031680610cf75782546001600160401b03168452610d14565b6001600160401b0381811614610d14576001600160401b03811684525b8154600160401b900460ff16610dae578254600160401b900460ff1615610da95782600101805480602002602001604051908101604052809291908181526020018280548015610d8d57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610d6f575b505050505060808501528254600160401b900460ff1660208501525b610e35565b8154600160401b900460ff90811614610e355781600101805480602002602001604051908101604052809291908181526020018280548015610e1957602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610dfb575b505050505060808501528154600160401b900460ff1660208501525b8154600160481b900460ff16610ede578254600160481b900460ff1615610ed95782600201805480602002602001604051908101604052809291908181526020018280548015610eae57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610e90575b505050505060a0850152825460ff600160481b820481166040870152600160501b9091041660608501525b610f74565b8154600160481b900460ff90811614610f745781600201805480602002602001604051908101604052809291908181526020018280548015610f4957602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610f2b575b505050505060a0850152815460ff600160481b820481166040870152600160501b9091041660608501525b610f7d846114f0565b50505092915050565b600061058482611895565b610f996114c3565b610fa360006118f0565b565b606060001963ffffffff831601610fe657610fc0838561058a565b604051602001610fd09190613680565b6040516020818303038152906040529050611030565b60011963ffffffff83160161100f57610fff8385610c7a565b604051602001610fd0919061389e565b604051635d4be0fd60e11b815263ffffffff831660048201526024016108fa565b9392505050565b61103f6114c3565b60005b8181101561113e573683838381811061105d5761105d613b69565b606090810292909201925060009161107b9150830160408401613b03565b6001600160a01b0316036110a257604051631074e82d60e11b815260040160405180910390fd5b6110b260408201602083016139e4565b63ffffffff166000036110d8576040516349cfac4360e01b815260040160405180910390fd5b6000808052600460209081528201907f17ef568e3e12ab5b9c7254a8d58478811de00f9e6eb34345acd53bf8fd09d3ec9061111383856139e4565b63ffffffff168152602081019190915260400160002061113382826140e8565b505050600101611042565b507f2b001e1c6683bf79cc52891bd7215b204c787d18134fc7f3d21b4f32a49e47de8282604051610a9e929190614141565b6111786114c3565b6002548111156111a95760025460405163068109f760e31b81526108fa918391600401918252602082015260400190565b60028190556040518181527f491ff913b5444f4136b0d4075f020cfe3a5f60de926ec0b091612401a22b7842906020015b60405180910390a150565b604080518082019091526000808252602082015260008061123661120f6060890160408a01613b03565b61121f60808a0160608b016139e4565b61122c60c08b018b613b9f565b9050878a8a611940565b604080518082019091529182526020820152925050505b949350505050565b61125d6114c3565b61126681611a39565b50565b6112716114c3565b6001600160a01b03811661129b57604051631e4fbdf760e01b8152600060048201526024016108fa565b611266816118f0565b6112ad81611a87565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e1758bd86040518163ffffffff1660e01b8152600401602060405180830381865afa15801561130d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113319190613b4c565b905061133e818484611ad8565b604080513381526001600160a01b03851660208201529081018390527f820b7fd51bf79c54350bab98400651b3314ff6e79b33528821871d94a666988390606001610790565b6001600160a01b0382166113ab576040516306b7a93160e41b815260040160405180910390fd5b6113bf6001600160a01b0384168383611afb565b505050565b6113cd81611895565b61126657604051633c30434160e21b815263ffffffff821660048201526024016108fa565b6001600160a01b03808316600090815260046020908152604080832063ffffffff8089168552908352928190208551815493870151909516640100000000026001600160c01b03199093169490931693909317179055517f779cb2dd9d2bb1be1737d05435d744facbfb84a2a4912e21379d39beddcdc80590610790908490869085906141c1565b611485828483611528565b61148f8284610c7a565b507f82118522aa536ac0e96cc5c689407ae42b89d592aa133890a01f1509842f508182848360405161079093929190614203565b6000546001600160a01b03163314610fa35760405163118cdaa760e01b81523360048201526024016108fa565b602081015160ff1615801561150a5750606081015160ff16155b156112665760405163ce2c375160e01b815260040160405180910390fd5b602081015160ff90811614806115435750602081015160ff16155b15611571576080810151511561156c576040516341d50bed60e11b815260040160405180910390fd5b6115d7565b806020015160ff168160800151511415806115ac57506002611595600160ff614249565b61159f9190614262565b60ff16816020015160ff16115b156115ca576040516341d50bed60e11b815260040160405180910390fd5b6115d78160800151611b4d565b604081015160ff90811614806115f25750604081015160ff16155b156116465760a0810151511561161b5760405163211089b360e11b815260040160405180910390fd5b606081015160ff1615611641576040516338682fa960e01b815260040160405180910390fd5b6116eb565b806040015160ff168160a00151511415806116815750600261166a600160ff614249565b6116749190614262565b60ff16816040015160ff16115b1561169f5760405163211089b360e11b815260040160405180910390fd5b606081015160ff1615806116c05750806040015160ff16816060015160ff16115b156116de576040516338682fa960e01b815260040160405180910390fd5b6116eb8160a00151611b4d565b6001600160a01b038316600090815260016020818152604080842063ffffffff8716855282529283902084518154868401519587015160608801516001600160401b0390931668ffffffffffffffffff1990921691909117600160401b60ff97881602176affff0000000000000000001916600160481b9187169190910260ff60501b191617600160501b95909116949094029390931783556080840151805185949361179d9390850192019061356a565b5060a082015180516117b991600284019160209091019061356a565b505050505050565b604080518082019091526000808252602082015260607f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633146118205760405163467409c360e01b815260040160405180910390fd5b60008061182e888888611bb4565b909250905060008061186061184960608c0160408d01613b03565b61185960808d0160608e016139e4565b858a611c81565b909250905061186f8284614292565b604080518082019091529081526020810191909152945091925050505b94509492505050565b63ffffffff811660009081527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49602052604081208054600160401b900460ff16151580611030575054600160501b900460ff16151592915050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000806000806119508686611d8f565b9150915060006119618b8b84611da8565b9050600061196f8c8c61058a565b90506119858a826000015163ffffffff16611db5565b80602001516001600160a01b031663709eb6648c8e8d886040518563ffffffff1660e01b81526004016119bb94939291906142a5565b602060405180830381865afa1580156119d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119fc91906142e2565b611a069083614292565b9150600080611a178e8e868e611de4565b9092509050611a268285614292565b9e909d509b505050505050505050505050565b600380546001600160a01b0319166001600160a01b0383169081179091556040519081527f3c864541ef71378c6229510ed90f376565ee42d9c5e0904a984a9e863e6db44f906020016111da565b3360009081526005602052604090205480821115611ac25760405163068109f760e31b815260048101839052602481018290526044016108fa565b3360009081526005602052604090209190039055565b6001600160a01b038316611af0576113bf8282611eb5565b6113bf838383611384565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526113bf908490611f62565b6000805b82518110156113bf576000838281518110611b6e57611b6e613b69565b60200260200101519050826001600160a01b0316816001600160a01b031611611baa5760405163447516e160e01b815260040160405180910390fd5b9150600101611b51565b60606000806000611bc58686611d8f565b90925090506000611bef611bdf60608a0160408b01613b03565b6101e360808b0160608c016139e4565b90506000611c0060c08a018a613b9f565b90509050611c1881836000015163ffffffff16611db5565b6020820151611c4890611c3160808c0160608d016139e4565b611c4160608d0160408e01613b03565b8488611fd3565b611c529086614292565b9450600080611c618b866120cc565b9092509050611c708288614292565b909b909a5098505050505050505050565b60035460009081906001600160a01b03161561188c576040516001600160a01b038716602482015263ffffffff8616604482015260648101859052831515608482015260009060a40160408051601f19818403018152919052602080820180516001600160e01b0316636a8e2a4360e11b1790526003549192506000918291611d38916001600160a01b0316907f0000000000000000000000000000000000000000000000000000000000000000908490876120ef565b91509150611d488787848461219f565b90955093508415611d83576003546001600160a01b031660009081526005602052604081208054879290611d7d908490614292565b90915550505b50505094509492505050565b606080611d9c848461221a565b915091505b9250929050565b600061124d848484612307565b80821115611de057604051636333d79f60e11b815260048101839052602481018290526044016108fa565b5050565b60035460009081906001600160a01b03161561188c576040516001600160a01b038716602482015263ffffffff8616604482015260648101859052831515608482015260009060a40160408051601f19818403018152919052602080820180516001600160e01b031663d424422160e01b1790526003549192506000918291611e99916001600160a01b0316907f00000000000000000000000000000000000000000000000000000000000000009086612381565b91509150611ea98787848461219f565b9450945050505061188c565b6001600160a01b038216611edc576040516306b7a93160e41b815260040160405180910390fd5b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611f29576040519150601f19603f3d011682016040523d82523d6000602084013e611f2e565b606091505b50509050806113bf57604051631196f20d60e21b81526001600160a01b0384166004820152602481018390526044016108fa565b600080602060008451602086016000885af180611f85576040513d6000823e3d81fd5b50506000513d91508115611f9d578060011415611faa565b6001600160a01b0384163b155b1561090c57604051635274afe760e01b81526001600160a01b03851660048201526024016108fa565b6040516338bf452160e11b81526000906001600160a01b0387169063717e8a42906120089088908890889088906004016142a5565b6020604051808303816000875af1158015612027573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061204b91906142e2565b90508015612081576001600160a01b0386166000908152600560205260408120805483929061207b908490614292565b90915550505b604080516001600160a01b0388168152602081018390527f61ed099e74a97a1d7f8bb0952a88ca8b7b8ebd00c126ea04671f92a81213318a910160405180910390a195945050505050565b600060606120e460056120de8661436a565b8561242d565b909590945092505050565b60006060863b80830361211657604080516000808252602082019092529250925050612195565b60008060008761ffff166001600160401b0381111561213757612137613be5565b6040519080825280601f01601f191660200182016040528015612161576020820181803683370190505b509050600080885160208a018c8f8ff191503d925087831115612182578792505b828152826000602083013e909450925050505b9550959350505050565b6000808315806121b0575082516020115b156121c05750600090508061188c565b6000838060200190518101906121d691906142e2565b905085156121e657809150612210565b600060025488116121f9576002546121fb565b875b905080821161220a578161220c565b805b9350505b5094509492505050565b60608060008061222a868661257b565b91509150805160000361228257604080516000808252602082019092528391612276565b60408051808201909152600081526060602082015281526020019060019003908161224e5790505b50935093505050611da1565b604080516001808252818301909252600091816020015b6040805180820190915260008152606060208201528152602001906001900390816122995790505090506040518060400160405280600260ff16815260200183815250816000815181106122ef576122ef613b69565b60209081029190910101529196919550909350505050565b6000806123148585610c7a565b905060008351600014612345578360008151811061233457612334613b69565b602002602001015160200151612356565b604051806020016040528060008152505b90506000806123648361273a565b9150915061237584888a85856129a0565b98975050505050505050565b60006060853b8083036123a85760408051600080825260208201909252925092505061188c565b60008060008761ffff166001600160401b038111156123c9576123c9613be5565b6040519080825280601f01601f1916602001820160405280156123f3576020820181803683370190505b509050600080885160208a018d8dfa91503d925087831115612413578792505b828152826000602083013e90999098509650505050505050565b60006060600061243c85612b38565b9050600061244986612bc5565b80516020820120606088015160408901519293509091600061246b8284610c7a565b90506000895160001461249c578960008151811061248b5761248b613b69565b6020026020010151602001516124ad565b604051806020016040528060008152505b905060606124ff8d846040518060a001604052808963ffffffff1681526020018c81526020018a815260200187600001516001600160401b03168152602001886001600160a01b031681525085612be2565b604051919b5091506125179089908990602001614407565b60405160208183030381529060405298507f07ea52d82345d6e838192107d8fd7123d9c2ec8e916cd0aad13fd2b60db2464483608001518460a001518360405161256393929190614436565b60405180910390a15050505050505050935093915050565b60608060028310156125a35760405163196499c760e21b8152600060048201526024016108fa565b60006125b26002828688614494565b6125bb916144be565b60f01c905060026002198201612723578060005b868310156126c85760006125e860018501858a8c614494565b6125f1916144ee565b60f81c9050600081900361261b57604051636780cfaf60e01b8152600060048201526024016108fa565b8160ff1660000361262e5780915061266b565b8160ff168160ff161461266b5736600061264a86868c8e614494565b9150915061265b8989868585612e80565b9099509750859450919250829150505b600184019360009061268290600301868b8d614494565b61268b916144be565b60f01c905060008190036126b55760405163196499c760e21b8152600481018690526024016108fa565b8060020161ffff168501945050506125cf565b8287146126eb5760405163196499c760e21b8152600481018490526024016108fa565b600287111561271c5736600061270385858b8d614494565b915091506127148888858585612e80565b909850965050505b5050612731565b61272e828787612fa0565b93505b50509250929050565b606080825160000361274b57915091565b60006127568461312b565b90508060ff166001036128085760408051600180825281830190925290816020015b606081526020019060019003908161277857905050925083836000815181106127a3576127a3613b69565b6020908102919091010152604080516001808252818301909252908160200160208202803683370190505091506127db846003613205565b826000815181106127ee576127ee613b69565b602002602001019060ff16908160ff168152505050915091565b8060ff166001600160401b0381111561282357612823613be5565b60405190808252806020026020018201604052801561284c578160200160208202803683370190505b5091508060ff166001600160401b0381111561286a5761286a613be5565b60405190808252806020026020018201604052801561289d57816020015b60608152602001906001900390816128885790505b50925060008060ff5b86518310156129335760019092019160006128c18885613261565b60029490940193905060006128d68986613205565b90508260ff1660ff036128eb57809250612924565b8260ff168160ff16146129245760021984860301600061290c8b87846132be565b905061291a8a8a87846133cb565b5093909301929150815b5061ffff1692909201916128a6565b81830360006129438985846132be565b9050612951888885846133cb565b60005b8660ff168160ff16101561299457878160ff168151811061297757612977613b69565b6020908102919091010180516000190160ff169052600101612954565b50505050505050915091565b600080866040015187602001516129b7919061451c565b905060005b8160ff168160ff161015612b2d576000886020015160ff168260ff1610612a115760a089015160208a01516129f19084614249565b60ff1681518110612a0457612a04613b69565b6020026020010151612a33565b88608001518260ff1681518110612a2a57612a2a613b69565b60200260200101515b60408051602081019091526000808252919250905b8651811015612aa0578360ff16878281518110612a6757612a67613b69565b602002602001015160ff1603612a9857878181518110612a8957612a89613b69565b60200260200101519150612aa0565b600101612a48565b508951604051630c2eceab60e21b81526001600160a01b038416916330bb3aac91612ad3918d918d908790600401614535565b602060405180830381865afa158015612af0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b1491906142e2565b612b1e9086614292565b945050508060010190506129bc565b505095945050505050565b805160208083015160408085015160608087015160808801519351600160f81b9681019690965260c09690961b6001600160c01b031916602186015260e093841b6001600160e01b031990811660298701526001600160a01b03909216602d8601529490921b909116604d83015260518201526071015b6040516020818303038152906040529050919050565b60608160a001518260c00151604051602001612baf929190614574565b60006060600080612bf28561273a565b91509150600087604001518860200151612c0c919061451c565b90508060ff166001600160401b03811115612c2957612c29613be5565b604051908082528060200260200182016040528015612c52578160200160208202803683370190505b50935060005b8160ff168160ff161015610c6d576000896020015160ff168260ff1610612cad5760a08a015160208b0151612c8d9084614249565b60ff1681518110612ca057612ca0613b69565b6020026020010151612ccf565b89608001518260ff1681518110612cc657612cc6613b69565b60200260200101515b60408051602081019091526000808252919250905b8551811015612d3c578360ff16868281518110612d0357612d03613b69565b602002602001015160ff1603612d3457868181518110612d2557612d25613b69565b60200260200101519150612d3c565b600101612ce4565b506040516395d376d760e01b81526001600160a01b038316906395d376d790612d6b908d90859060040161459a565b6020604051808303816000875af1158015612d8a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dae91906142e2565b878460ff1681518110612dc357612dc3613b69565b6020026020010181815250506000878460ff1681518110612de657612de6613b69565b60200260200101511115612e7657868360ff1681518110612e0957612e09613b69565b60200260200101518c6000846001600160a01b03166001600160a01b031681526020019081526020016000206000828254612e449190614292565b92505081905550868360ff1681518110612e6057612e60613b69565b602002602001015188612e739190614292565b97505b5050600101612c58565b60608060001960ff861601612efd57865115612ebf57868484604051602001612eab9392919061460c565b604051602081830303815290604052612ef6565b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050505b9650612f95565b60011960ff861601612f7757855115612f3957858484604051602001612f259392919061460c565b604051602081830303815290604052612f70565b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050505b9550612f95565b604051636780cfaf60e01b815260ff861660048201526024016108fa565b509495939450505050565b606060001961ffff8516016130405760228214612fd0576040516301b8ca5560e31b815260040160405180910390fd5b6000612ff1612fe3602260028688614494565b612fec91614634565b6134e1565b604051600160f81b60208201819052601160f01b602183015260238201526001600160801b0319608083901b166024820152909150603401604051602081830303815290604052915050611030565b60011961ffff85160161310c5760428211158061305d5750606282115b1561307b576040516360493e2b60e11b815260040160405180910390fd5b600061308e612fe3602260028688614494565b905060006130a3612fe3604260228789614494565b9050600060411985016130b9866042818a614494565b6130c291614634565b60405160086020938403029190911c92506130f3916001916011918391889183916031916002918b918b9101614652565b6040516020818303038152906040529350505050611030565b604051630417051360e41b815261ffff851660048201526024016108fa565b600080805b83518210156131da57600190910190600061314b8584613261565b905060028301925060028161ffff16101561317c5760405163013adb8360e21b8152600481018490526024016108fa565b60006131888685613205565b90508060ff1660ff036131ae576040516334f4f66f60e21b815260040160405180910390fd5b600160ff82161b83166131cb5760019485019460ff82161b831792505b5061ffff169190910190613130565b835182146131fe5760405163013adb8360e21b8152600481018390526024016108fa565b5050919050565b6000613212826001614292565b835110156132585760405162461bcd60e51b8152602060048201526013602482015272746f55696e74385f6f75744f66426f756e647360681b60448201526064016108fa565b50016001015190565b600061326e826002614292565b835110156132b55760405162461bcd60e51b8152602060048201526014602482015273746f55696e7431365f6f75744f66426f756e647360601b60448201526064016108fa565b50016002015190565b6060816132cc81601f614292565b101561330b5760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b60448201526064016108fa565b6133158284614292565b845110156133595760405162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b60448201526064016108fa565b60608215801561337857604051915060008252602082016040526133c2565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156133b1578051835260209283019201613399565b5050858452601f01601f1916604052505b50949350505050565b8160ff1660ff036133ef576040516334f4f66f60e21b815260040160405180910390fd5b60006133fc83600161451c565b905060005b84518110156117b957600085828151811061341e5761341e613b69565b602002602001015190508060ff168360ff16036134935786828151811061344757613447613b69565b602002602001015184604051602001613461929190614407565b60405160208183030381529060405287838151811061348257613482613b69565b6020026020010181905250506117b9565b8060ff166000036134d857828683815181106134b1576134b1613b69565b602002602001019060ff16908160ff16815250508387838151811061348257613482613b69565b50600101613401565b60006fffffffffffffffffffffffffffffffff82111561351e576040516306dfcc6560e41b815260806004820152602481018390526044016108fa565b5090565b6040518060c0016040528060006001600160401b03168152602001600060ff168152602001600060ff168152602001600060ff16815260200160608152602001606081525090565b8280548282559060005260206000209081019282156135bf579160200282015b828111156135bf57825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019061358a565b5061351e9291505b8082111561351e57600081556001016135c7565b6000602082840312156135ed57600080fd5b81356001600160e01b03198116811461103057600080fd5b6001600160a01b038116811461126657600080fd5b803561362581613605565b919050565b63ffffffff8116811461126657600080fd5b80356136258161362a565b6000806040838503121561365a57600080fd5b823561366581613605565b915060208301356136758161362a565b809150509250929050565b815163ffffffff1681526020808301516001600160a01b03169082015260408101610584565b60208101600383106136c857634e487b7160e01b600052602160045260246000fd5b91905290565b6000806000606084860312156136e357600080fd5b83356136ee81613605565b925060208401356136fe81613605565b929592945050506040919091013590565b60008083601f84011261372157600080fd5b5081356001600160401b0381111561373857600080fd5b6020830191508360208260051b8501011115611da157600080fd5b60008060006040848603121561376857600080fd5b833561377381613605565b925060208401356001600160401b0381111561378e57600080fd5b61379a8682870161370f565b9497909650939450505050565b600080602083850312156137ba57600080fd5b82356001600160401b038111156137d057600080fd5b6137dc8582860161370f565b90969095509350505050565b60008151808452602080850194506020840160005b838110156138225781516001600160a01b0316875295820195908201906001016137fd565b509495945050505050565b6001600160401b03815116825260ff602082015116602083015260ff604082015116604083015260ff60608201511660608301526000608082015160c0608085015261387c60c08501826137e8565b905060a083015184820360a086015261389582826137e8565b95945050505050565b602081526000611030602083018461382d565b8035801515811461362557600080fd5b600080600080606085870312156138d757600080fd5b84356001600160401b03808211156138ee57600080fd5b9086019060e0828903121561390257600080fd5b9094506020860135908082111561391857600080fd5b818701915087601f83011261392c57600080fd5b81358181111561393b57600080fd5b88602082850101111561394d57600080fd5b602083019550809450505050613965604086016138b1565b905092959194509250565b60005b8381101561398b578181015183820152602001613973565b50506000910152565b600081518084526139ac816020860160208601613970565b601f01601f19169290920160200192915050565b825181526020808401519082015260606040820152600061124d6060830184613994565b6000602082840312156139f657600080fd5b81356110308161362a565b600080600060608486031215613a1657600080fd5b8335613a218161362a565b92506020840135613a3181613605565b91506040840135613a418161362a565b809150509250925092565b6020815260006110306020830184613994565b60008060208385031215613a7257600080fd5b82356001600160401b0380821115613a8957600080fd5b818501915085601f830112613a9d57600080fd5b813581811115613aac57600080fd5b866020606083028501011115613ac157600080fd5b60209290920196919550909350505050565b600060208284031215613ae557600080fd5b5035919050565b815181526020808301519082015260408101610584565b600060208284031215613b1557600080fd5b813561103081613605565b60008060408385031215613b3357600080fd5b8235613b3e81613605565b946020939093013593505050565b600060208284031215613b5e57600080fd5b815161103081613605565b634e487b7160e01b600052603260045260246000fd5b60008235605e19833603018112613b9557600080fd5b9190910192915050565b6000808335601e19843603018112613bb657600080fd5b8301803591506001600160401b03821115613bd057600080fd5b602001915036819003821315611da157600080fd5b634e487b7160e01b600052604160045260246000fd5b60405160c081016001600160401b0381118282101715613c1d57613c1d613be5565b60405290565b60405160e081016001600160401b0381118282101715613c1d57613c1d613be5565b604051601f8201601f191681016001600160401b0381118282101715613c6d57613c6d613be5565b604052919050565b600060408284031215613c8757600080fd5b604051604081018181106001600160401b0382111715613ca957613ca9613be5565b6040528235613cb78161362a565b81526020830135613cc781613605565b60208201529392505050565b80356001600160401b038116811461362557600080fd5b803560ff8116811461362557600080fd5b600082601f830112613d0c57600080fd5b813560206001600160401b03821115613d2757613d27613be5565b8160051b613d36828201613c45565b9283528481018201928281019087851115613d5057600080fd5b83870192505b84831015613d78578235613d6981613605565b82529183019190830190613d56565b979650505050505050565b600060c08284031215613d9557600080fd5b613d9d613bfb565b9050613da882613cd3565b8152613db660208301613cea565b6020820152613dc760408301613cea565b6040820152613dd860608301613cea565b606082015260808201356001600160401b0380821115613df757600080fd5b613e0385838601613cfb565b608084015260a0840135915080821115613e1c57600080fd5b50613e2984828501613cfb565b60a08301525092915050565b600060208284031215613e4757600080fd5b81356001600160401b03811115613e5d57600080fd5b61124d84828501613d83565b60008235603e19833603018112613b9557600080fd5b6000823560be19833603018112613b9557600080fd5b600060208284031215613ea757600080fd5b61103082613cea565b600060208284031215613ec257600080fd5b61103082613cd3565b60006105843683613d83565b6000808335601e19843603018112613eee57600080fd5b83016020810192503590506001600160401b03811115613f0d57600080fd5b8060051b3603821315611da157600080fd5b8183526000602080850194508260005b85811015613822578135613f4281613605565b6001600160a01b031687529582019590820190600101613f2f565b60208082528181018390526000906040808401600586901b8501820187855b8881101561409457603f19808985030185528235603e198c3603018112613fa257600080fd5b8b018035613faf8161362a565b63ffffffff168552808801353682900360be19018112613fce57600080fd5b858901889052016001600160401b03613fe682613cd3565b1687860152613ff6888201613cea565b606060ff8083168289015261400c8a8501613cea565b92506080818416818a0152614022838601613cea565b935060a09250818416838a015261403b81860186613ed7565b60c08b81015294509150614056905061010089018483613f1f565b92505061406581840184613ed7565b93509050838783030160e088015261407e828483613f1f565b978a019796505050928701925050600101613f7c565b509098975050505050505050565b6040815260006140b56040830186613994565b8281036020840152838152838560208301376000602085830101526020601f19601f860116820101915050949350505050565b81356140f38161362a565b63ffffffff8116905081548163ffffffff198216178355602084013561411881613605565b6001600160c01b03199190911690911760209190911b640100000000600160c01b031617905550565b6020808252818101839052600090604080840186845b878110156141b457813561416a8161362a565b63ffffffff908116845282860135906141828261362a565b16838601528184013561419481613605565b6001600160a01b0316838501526060928301929190910190600101614157565b5090979650505050505050565b6001600160a01b038416815263ffffffff831660208201526080810161124d6040830184805163ffffffff1682526020908101516001600160a01b0316910152565b6001600160a01b038416815263ffffffff831660208201526060604082018190526000906138959083018461382d565b634e487b7160e01b600052601160045260246000fd5b60ff828116828216039081111561058457610584614233565b600060ff83168061428357634e487b7160e01b600052601260045260246000fd5b8060ff84160491505092915050565b8082018082111561058457610584614233565b63ffffffff8516815260018060a01b03841660208201528260408201526080606082015260006142d86080830184613994565b9695505050505050565b6000602082840312156142f457600080fd5b5051919050565b600082601f83011261430c57600080fd5b81356001600160401b0381111561432557614325613be5565b614338601f8201601f1916602001613c45565b81815284602083860101111561434d57600080fd5b816020850160208301376000918101602001919091529392505050565b600060e0823603121561437c57600080fd5b614384613c23565b61438d83613cd3565b815261439b6020840161363c565b60208201526143ac6040840161361a565b60408201526143bd6060840161363c565b60608201526080830135608082015260a083013560a082015260c08301356001600160401b038111156143ef57600080fd5b6143fb368286016142fb565b60c08301525092915050565b60008351614419818460208801613970565b83519083019061442d818360208801613970565b01949350505050565b60608152600061444960608301866137e8565b6020838203602085015261445d82876137e8565b84810360408601528551808252602080880194509091019060005b8181101561409457845183529383019391830191600101614478565b600080858511156144a457600080fd5b838611156144b157600080fd5b5050820193919092039150565b6001600160f01b031981358181169160028510156144e65780818660020360031b1b83161692505b505092915050565b6001600160f81b031981358181169160018510156144e65760019490940360031b84901b1690921692915050565b60ff818116838216019081111561058457610584614233565b63ffffffff851681526001600160401b03841660208201526001600160a01b03831660408201526080606082018190526000906142d890830184613994565b8281526000825161458c816020850160208701613970565b919091016020019392505050565b6040815263ffffffff83511660408201526000602084015160a060608401526145c660e0840182613994565b604086015160808581019190915260608701516001600160401b031660a08601528601516001600160a01b031660c0850152838103602085015290506138958185613994565b6000845161461e818460208901613970565b8201838582376000930192835250909392505050565b8035602083101561058457600019602084900360031b1b1692915050565b60f88a811b6001600160f81b0319908116835260f08b811b6001600160f01b031990811660018601528b841b8316600386015260808b901b6001600160801b031916600486015289841b831660148601529088901b1660158401529085901b16601782015260006146d2601883018560801b6001600160801b0319169052565b5060288101919091526048019897505050505050505056fea2646970667358221220d9784bfc6a1a26f66ca9108192fade74e4e3799cd23fe6424871d62320841a2464736f6c63430008160033", - "sourceMap": "982:3336:82:-:0;;;1275:299;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1465:9;1476:15;1493:21;1454:9:3;1486;-1:-1:-1;;;;;1465:35:3;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;468:20:0;;;;498;;;;;1504:17:3;1523:21;1439:10:82;;1269:95:107;;1322:31;;-1:-1:-1;;;1322:31:107;;1350:1;1322:31;;;1126:51:132;1099:18;;1322:31:107;;;;;;;1269:95;1373:32;1392:12;1373:18;:32::i;:::-;-1:-1:-1;2099:36:2::1;::::0;;;;2145:20:::1;:44:::0;-1:-1:-1;;1526:10:82::2;:41:::0;;-1:-1:-1;;;;;;1526:41:82::2;-1:-1:-1::0;;;;;1526:41:82;;;::::2;::::0;;;::::2;::::0;;;-1:-1:-1;982:3336:82;;-1:-1:-1;;;;;982:3336:82;2912:187:107;2985:16;3004:6;;-1:-1:-1;;;;;3020:17:107;;;-1:-1:-1;;;;;;3020:17:107;;;;;;3052:40;;3004:6;;;;;;;3052:40;;2985:16;3052:40;2975:124;2912:187;:::o;14:139:132:-;-1:-1:-1;;;;;97:31:132;;87:42;;77:70;;143:1;140;133:12;77:70;14:139;:::o;158:532::-;263:6;271;279;287;340:3;328:9;319:7;315:23;311:33;308:53;;;357:1;354;347:12;308:53;389:9;383:16;408:39;441:5;408:39;:::i;:::-;516:2;501:18;;495:25;466:5;;-1:-1:-1;529:41:132;495:25;529:41;:::i;:::-;636:2;621:18;;615:25;680:2;665:18;;;659:25;158:532;;589:7;;-1:-1:-1;158:532:132;-1:-1:-1;;;158:532:132:o;695:280::-;764:6;817:2;805:9;796:7;792:23;788:32;785:52;;;833:1;830;823:12;785:52;865:9;859:16;915:10;908:5;904:22;897:5;894:33;884:61;;941:1;938;931:12;884:61;964:5;695:280;-1:-1:-1;;;695:280:132:o;980:203::-;982:3336:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", - "linkReferences": {} - }, - "deployedBytecode": { - "object": "0x60806040526004361061014f5760003560e01c806361d027b3116100b6578063d15b0d491161006f578063d15b0d4914610450578063d80e9bd914610470578063f0f442601461049d578063f2fde38b146104bd578063faaebd21146104dd578063fd9be5221461051857600080fd5b806361d027b3146103905780636750cd4c146103b0578063715018a6146103d05780638da5cb5b146103e55780639c33abf714610403578063c14c43491461043057600080fd5b806329460b0b1161010857806329460b0b1461025357806339e3f938146102735780634389e58f146102a057806343ea4fa9146102ce5780634d963200146102ee57806354fd4d501461036357600080fd5b806301ffc9a71461015b5780630e97289b14610190578063188183f4146101c85780631881d94d146101f5578063200175f71461021157806320efd7221461023357600080fd5b3661015657005b600080fd5b34801561016757600080fd5b5061017b6101763660046135db565b610538565b60405190151581526020015b60405180910390f35b34801561019c57600080fd5b506006546101b0906001600160a01b031681565b6040516001600160a01b039091168152602001610187565b3480156101d457600080fd5b506101e86101e3366004613647565b61058a565b6040516101879190613680565b34801561020157600080fd5b50600060405161018791906136a6565b34801561021d57600080fd5b5061023161022c3660046136ce565b610663565b005b34801561023f57600080fd5b5061023161024e366004613753565b61079d565b34801561025f57600080fd5b5061023161026e3660046137a7565b610912565b34801561027f57600080fd5b5061029361028e366004613647565b610aaa565b604051610187919061389e565b3480156102ac57600080fd5b506102c06102bb3660046138c1565b610be5565b6040516101879291906139c0565b3480156102da57600080fd5b506102936102e9366004613647565b610c7a565b3480156102fa57600080fd5b5061033f610309366004613647565b600460209081526000928352604080842090915290825290205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b03909116602083015201610187565b34801561036f57600080fd5b50604080516003815260006020820152600291810191909152606001610187565b34801561039c57600080fd5b506003546101b0906001600160a01b031681565b3480156103bc57600080fd5b5061017b6103cb3660046139e4565b610f86565b3480156103dc57600080fd5b50610231610f91565b3480156103f157600080fd5b506000546001600160a01b03166101b0565b34801561040f57600080fd5b5061042361041e366004613a01565b610fa5565b6040516101879190613a4c565b34801561043c57600080fd5b5061023161044b366004613a5f565b611037565b34801561045c57600080fd5b5061023161046b366004613ad3565b611170565b34801561047c57600080fd5b5061049061048b3660046138c1565b6111e5565b6040516101879190613aec565b3480156104a957600080fd5b506102316104b8366004613b03565b611255565b3480156104c957600080fd5b506102316104d8366004613b03565b611269565b3480156104e957600080fd5b5061050a6104f8366004613b03565b60056020526000908152604090205481565b604051908152602001610187565b34801561052457600080fd5b50610231610533366004613b20565b6112a4565b60006001600160e01b031982166325fc096160e21b148061056957506001600160e01b0319821663b6e9ace360e01b145b8061058457506301ffc9a760e01b6001600160e01b03198316145b92915050565b604080518082019091526000808252602082015263ffffffff80831660008181527f17ef568e3e12ab5b9c7254a8d58478811de00f9e6eb34345acd53bf8fd09d3ec602090815260408083206001600160a01b038916845260048352818420948452939091528120805492939092169081900361060e57825463ffffffff16610610565b805b63ffffffff168452815464010000000090046001600160a01b03168061064857835464010000000090046001600160a01b031661064a565b805b6001600160a01b03166020860152509295945050505050565b6003546001600160a01b0316331461068e5760405163885762a760e01b815260040160405180910390fd5b826001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e1758bd86040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061071a9190613b4c565b6001600160a01b031603610741576040516339a5741160e21b815260040160405180910390fd5b61074c838383611384565b604080516001600160a01b038086168252841660208201529081018290527fe081464b7278501267de69fa85b7b9560b0ae05d5fbfaab9b1986c70356e2efe906060015b60405180910390a1505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633146107e65760405163467409c360e01b815260040160405180910390fd5b60005b8181101561090c573683838381811061080457610804613b69565b90506020028101906108169190613b7f565b905061082d61082860208301836139e4565b6113c4565b600161083f60408301602084016139e4565b63ffffffff160361087f5761087a61085a60208301836139e4565b866108686040850185613b9f565b8101906108759190613c75565b6113f2565b610903565b600261089160408301602084016139e4565b63ffffffff16036108cc5761087a6108ac60208301836139e4565b866108ba6040850185613b9f565b8101906108c79190613e35565b61147a565b6108dc60408201602083016139e4565b604051635d4be0fd60e11b815263ffffffff90911660048201526024015b60405180910390fd5b506001016107e9565b50505050565b61091a6114c3565b60005b81811015610a6c573683838381811061093857610938613b69565b905060200281019061094a9190613e69565b905060ff61095b6020830183613e7f565b61096c906040810190602001613e95565b60ff160361098d576040516341d50bed60e11b815260040160405180910390fd5b60ff61099c6020830183613e7f565b6109ad906060810190604001613e95565b60ff16036109ce5760405163211089b360e11b815260040160405180910390fd5b6001600160401b036109e36020830183613e7f565b6109f1906020810190613eb0565b6001600160401b031603610a185760405163281b33d760e11b815260040160405180910390fd5b610a36610a286020830183613e7f565b610a3190613ecb565b6114f0565b610a636000610a4860208401846139e4565b610a556020850185613e7f565b610a5e90613ecb565b611528565b5060010161091d565b507faaf3aaa0c11056e86ac56eb653e25b005ca1a7d4dcd21ba24647f7ab63f3b5608282604051610a9e929190613f5d565b60405180910390a15050565b610ab2613522565b6001600160a01b038316600090815260016020818152604080842063ffffffff87168552825292839020835160c08101855281546001600160401b038116825260ff600160401b8204811683860152600160481b8204811683880152600160501b9091041660608201529281018054855181850281018501909652808652939491936080860193830182828015610b7257602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610b54575b5050505050815260200160028201805480602002602001604051908101604052809291908181526020018280548015610bd457602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610bb6575b505050505081525050905092915050565b60408051808201909152600080825260208201526060610c07868686866117c1565b600654604051631f5dad8b60e31b81529294509092506001600160a01b03169063faed6c5890610c3f908490899089906004016140a2565b600060405180830381600087803b158015610c5957600080fd5b505af1158015610c6d573d6000803e3d6000fd5b5050505094509492505050565b610c82613522565b63ffffffff821660008181527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49602090815260408083206001600160a01b03881684526001835281842094845293909152902080546001600160401b031680610cf75782546001600160401b03168452610d14565b6001600160401b0381811614610d14576001600160401b03811684525b8154600160401b900460ff16610dae578254600160401b900460ff1615610da95782600101805480602002602001604051908101604052809291908181526020018280548015610d8d57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610d6f575b505050505060808501528254600160401b900460ff1660208501525b610e35565b8154600160401b900460ff90811614610e355781600101805480602002602001604051908101604052809291908181526020018280548015610e1957602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610dfb575b505050505060808501528154600160401b900460ff1660208501525b8154600160481b900460ff16610ede578254600160481b900460ff1615610ed95782600201805480602002602001604051908101604052809291908181526020018280548015610eae57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610e90575b505050505060a0850152825460ff600160481b820481166040870152600160501b9091041660608501525b610f74565b8154600160481b900460ff90811614610f745781600201805480602002602001604051908101604052809291908181526020018280548015610f4957602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610f2b575b505050505060a0850152815460ff600160481b820481166040870152600160501b9091041660608501525b610f7d846114f0565b50505092915050565b600061058482611895565b610f996114c3565b610fa360006118f0565b565b606060001963ffffffff831601610fe657610fc0838561058a565b604051602001610fd09190613680565b6040516020818303038152906040529050611030565b60011963ffffffff83160161100f57610fff8385610c7a565b604051602001610fd0919061389e565b604051635d4be0fd60e11b815263ffffffff831660048201526024016108fa565b9392505050565b61103f6114c3565b60005b8181101561113e573683838381811061105d5761105d613b69565b606090810292909201925060009161107b9150830160408401613b03565b6001600160a01b0316036110a257604051631074e82d60e11b815260040160405180910390fd5b6110b260408201602083016139e4565b63ffffffff166000036110d8576040516349cfac4360e01b815260040160405180910390fd5b6000808052600460209081528201907f17ef568e3e12ab5b9c7254a8d58478811de00f9e6eb34345acd53bf8fd09d3ec9061111383856139e4565b63ffffffff168152602081019190915260400160002061113382826140e8565b505050600101611042565b507f2b001e1c6683bf79cc52891bd7215b204c787d18134fc7f3d21b4f32a49e47de8282604051610a9e929190614141565b6111786114c3565b6002548111156111a95760025460405163068109f760e31b81526108fa918391600401918252602082015260400190565b60028190556040518181527f491ff913b5444f4136b0d4075f020cfe3a5f60de926ec0b091612401a22b7842906020015b60405180910390a150565b604080518082019091526000808252602082015260008061123661120f6060890160408a01613b03565b61121f60808a0160608b016139e4565b61122c60c08b018b613b9f565b9050878a8a611940565b604080518082019091529182526020820152925050505b949350505050565b61125d6114c3565b61126681611a39565b50565b6112716114c3565b6001600160a01b03811661129b57604051631e4fbdf760e01b8152600060048201526024016108fa565b611266816118f0565b6112ad81611a87565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e1758bd86040518163ffffffff1660e01b8152600401602060405180830381865afa15801561130d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113319190613b4c565b905061133e818484611ad8565b604080513381526001600160a01b03851660208201529081018390527f820b7fd51bf79c54350bab98400651b3314ff6e79b33528821871d94a666988390606001610790565b6001600160a01b0382166113ab576040516306b7a93160e41b815260040160405180910390fd5b6113bf6001600160a01b0384168383611afb565b505050565b6113cd81611895565b61126657604051633c30434160e21b815263ffffffff821660048201526024016108fa565b6001600160a01b03808316600090815260046020908152604080832063ffffffff8089168552908352928190208551815493870151909516640100000000026001600160c01b03199093169490931693909317179055517f779cb2dd9d2bb1be1737d05435d744facbfb84a2a4912e21379d39beddcdc80590610790908490869085906141c1565b611485828483611528565b61148f8284610c7a565b507f82118522aa536ac0e96cc5c689407ae42b89d592aa133890a01f1509842f508182848360405161079093929190614203565b6000546001600160a01b03163314610fa35760405163118cdaa760e01b81523360048201526024016108fa565b602081015160ff1615801561150a5750606081015160ff16155b156112665760405163ce2c375160e01b815260040160405180910390fd5b602081015160ff90811614806115435750602081015160ff16155b15611571576080810151511561156c576040516341d50bed60e11b815260040160405180910390fd5b6115d7565b806020015160ff168160800151511415806115ac57506002611595600160ff614249565b61159f9190614262565b60ff16816020015160ff16115b156115ca576040516341d50bed60e11b815260040160405180910390fd5b6115d78160800151611b4d565b604081015160ff90811614806115f25750604081015160ff16155b156116465760a0810151511561161b5760405163211089b360e11b815260040160405180910390fd5b606081015160ff1615611641576040516338682fa960e01b815260040160405180910390fd5b6116eb565b806040015160ff168160a00151511415806116815750600261166a600160ff614249565b6116749190614262565b60ff16816040015160ff16115b1561169f5760405163211089b360e11b815260040160405180910390fd5b606081015160ff1615806116c05750806040015160ff16816060015160ff16115b156116de576040516338682fa960e01b815260040160405180910390fd5b6116eb8160a00151611b4d565b6001600160a01b038316600090815260016020818152604080842063ffffffff8716855282529283902084518154868401519587015160608801516001600160401b0390931668ffffffffffffffffff1990921691909117600160401b60ff97881602176affff0000000000000000001916600160481b9187169190910260ff60501b191617600160501b95909116949094029390931783556080840151805185949361179d9390850192019061356a565b5060a082015180516117b991600284019160209091019061356a565b505050505050565b604080518082019091526000808252602082015260607f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633146118205760405163467409c360e01b815260040160405180910390fd5b60008061182e888888611bb4565b909250905060008061186061184960608c0160408d01613b03565b61185960808d0160608e016139e4565b858a611c81565b909250905061186f8284614292565b604080518082019091529081526020810191909152945091925050505b94509492505050565b63ffffffff811660009081527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49602052604081208054600160401b900460ff16151580611030575054600160501b900460ff16151592915050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000806000806119508686611d8f565b9150915060006119618b8b84611da8565b9050600061196f8c8c61058a565b90506119858a826000015163ffffffff16611db5565b80602001516001600160a01b031663709eb6648c8e8d886040518563ffffffff1660e01b81526004016119bb94939291906142a5565b602060405180830381865afa1580156119d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119fc91906142e2565b611a069083614292565b9150600080611a178e8e868e611de4565b9092509050611a268285614292565b9e909d509b505050505050505050505050565b600380546001600160a01b0319166001600160a01b0383169081179091556040519081527f3c864541ef71378c6229510ed90f376565ee42d9c5e0904a984a9e863e6db44f906020016111da565b3360009081526005602052604090205480821115611ac25760405163068109f760e31b815260048101839052602481018290526044016108fa565b3360009081526005602052604090209190039055565b6001600160a01b038316611af0576113bf8282611eb5565b6113bf838383611384565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526113bf908490611f62565b6000805b82518110156113bf576000838281518110611b6e57611b6e613b69565b60200260200101519050826001600160a01b0316816001600160a01b031611611baa5760405163447516e160e01b815260040160405180910390fd5b9150600101611b51565b60606000806000611bc58686611d8f565b90925090506000611bef611bdf60608a0160408b01613b03565b6101e360808b0160608c016139e4565b90506000611c0060c08a018a613b9f565b90509050611c1881836000015163ffffffff16611db5565b6020820151611c4890611c3160808c0160608d016139e4565b611c4160608d0160408e01613b03565b8488611fd3565b611c529086614292565b9450600080611c618b866120cc565b9092509050611c708288614292565b909b909a5098505050505050505050565b60035460009081906001600160a01b03161561188c576040516001600160a01b038716602482015263ffffffff8616604482015260648101859052831515608482015260009060a40160408051601f19818403018152919052602080820180516001600160e01b0316636a8e2a4360e11b1790526003549192506000918291611d38916001600160a01b0316907f0000000000000000000000000000000000000000000000000000000000000000908490876120ef565b91509150611d488787848461219f565b90955093508415611d83576003546001600160a01b031660009081526005602052604081208054879290611d7d908490614292565b90915550505b50505094509492505050565b606080611d9c848461221a565b915091505b9250929050565b600061124d848484612307565b80821115611de057604051636333d79f60e11b815260048101839052602481018290526044016108fa565b5050565b60035460009081906001600160a01b03161561188c576040516001600160a01b038716602482015263ffffffff8616604482015260648101859052831515608482015260009060a40160408051601f19818403018152919052602080820180516001600160e01b031663d424422160e01b1790526003549192506000918291611e99916001600160a01b0316907f00000000000000000000000000000000000000000000000000000000000000009086612381565b91509150611ea98787848461219f565b9450945050505061188c565b6001600160a01b038216611edc576040516306b7a93160e41b815260040160405180910390fd5b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611f29576040519150601f19603f3d011682016040523d82523d6000602084013e611f2e565b606091505b50509050806113bf57604051631196f20d60e21b81526001600160a01b0384166004820152602481018390526044016108fa565b600080602060008451602086016000885af180611f85576040513d6000823e3d81fd5b50506000513d91508115611f9d578060011415611faa565b6001600160a01b0384163b155b1561090c57604051635274afe760e01b81526001600160a01b03851660048201526024016108fa565b6040516338bf452160e11b81526000906001600160a01b0387169063717e8a42906120089088908890889088906004016142a5565b6020604051808303816000875af1158015612027573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061204b91906142e2565b90508015612081576001600160a01b0386166000908152600560205260408120805483929061207b908490614292565b90915550505b604080516001600160a01b0388168152602081018390527f61ed099e74a97a1d7f8bb0952a88ca8b7b8ebd00c126ea04671f92a81213318a910160405180910390a195945050505050565b600060606120e460056120de8661436a565b8561242d565b909590945092505050565b60006060863b80830361211657604080516000808252602082019092529250925050612195565b60008060008761ffff166001600160401b0381111561213757612137613be5565b6040519080825280601f01601f191660200182016040528015612161576020820181803683370190505b509050600080885160208a018c8f8ff191503d925087831115612182578792505b828152826000602083013e909450925050505b9550959350505050565b6000808315806121b0575082516020115b156121c05750600090508061188c565b6000838060200190518101906121d691906142e2565b905085156121e657809150612210565b600060025488116121f9576002546121fb565b875b905080821161220a578161220c565b805b9350505b5094509492505050565b60608060008061222a868661257b565b91509150805160000361228257604080516000808252602082019092528391612276565b60408051808201909152600081526060602082015281526020019060019003908161224e5790505b50935093505050611da1565b604080516001808252818301909252600091816020015b6040805180820190915260008152606060208201528152602001906001900390816122995790505090506040518060400160405280600260ff16815260200183815250816000815181106122ef576122ef613b69565b60209081029190910101529196919550909350505050565b6000806123148585610c7a565b905060008351600014612345578360008151811061233457612334613b69565b602002602001015160200151612356565b604051806020016040528060008152505b90506000806123648361273a565b9150915061237584888a85856129a0565b98975050505050505050565b60006060853b8083036123a85760408051600080825260208201909252925092505061188c565b60008060008761ffff166001600160401b038111156123c9576123c9613be5565b6040519080825280601f01601f1916602001820160405280156123f3576020820181803683370190505b509050600080885160208a018d8dfa91503d925087831115612413578792505b828152826000602083013e90999098509650505050505050565b60006060600061243c85612b38565b9050600061244986612bc5565b80516020820120606088015160408901519293509091600061246b8284610c7a565b90506000895160001461249c578960008151811061248b5761248b613b69565b6020026020010151602001516124ad565b604051806020016040528060008152505b905060606124ff8d846040518060a001604052808963ffffffff1681526020018c81526020018a815260200187600001516001600160401b03168152602001886001600160a01b031681525085612be2565b604051919b5091506125179089908990602001614407565b60405160208183030381529060405298507f07ea52d82345d6e838192107d8fd7123d9c2ec8e916cd0aad13fd2b60db2464483608001518460a001518360405161256393929190614436565b60405180910390a15050505050505050935093915050565b60608060028310156125a35760405163196499c760e21b8152600060048201526024016108fa565b60006125b26002828688614494565b6125bb916144be565b60f01c905060026002198201612723578060005b868310156126c85760006125e860018501858a8c614494565b6125f1916144ee565b60f81c9050600081900361261b57604051636780cfaf60e01b8152600060048201526024016108fa565b8160ff1660000361262e5780915061266b565b8160ff168160ff161461266b5736600061264a86868c8e614494565b9150915061265b8989868585612e80565b9099509750859450919250829150505b600184019360009061268290600301868b8d614494565b61268b916144be565b60f01c905060008190036126b55760405163196499c760e21b8152600481018690526024016108fa565b8060020161ffff168501945050506125cf565b8287146126eb5760405163196499c760e21b8152600481018490526024016108fa565b600287111561271c5736600061270385858b8d614494565b915091506127148888858585612e80565b909850965050505b5050612731565b61272e828787612fa0565b93505b50509250929050565b606080825160000361274b57915091565b60006127568461312b565b90508060ff166001036128085760408051600180825281830190925290816020015b606081526020019060019003908161277857905050925083836000815181106127a3576127a3613b69565b6020908102919091010152604080516001808252818301909252908160200160208202803683370190505091506127db846003613205565b826000815181106127ee576127ee613b69565b602002602001019060ff16908160ff168152505050915091565b8060ff166001600160401b0381111561282357612823613be5565b60405190808252806020026020018201604052801561284c578160200160208202803683370190505b5091508060ff166001600160401b0381111561286a5761286a613be5565b60405190808252806020026020018201604052801561289d57816020015b60608152602001906001900390816128885790505b50925060008060ff5b86518310156129335760019092019160006128c18885613261565b60029490940193905060006128d68986613205565b90508260ff1660ff036128eb57809250612924565b8260ff168160ff16146129245760021984860301600061290c8b87846132be565b905061291a8a8a87846133cb565b5093909301929150815b5061ffff1692909201916128a6565b81830360006129438985846132be565b9050612951888885846133cb565b60005b8660ff168160ff16101561299457878160ff168151811061297757612977613b69565b6020908102919091010180516000190160ff169052600101612954565b50505050505050915091565b600080866040015187602001516129b7919061451c565b905060005b8160ff168160ff161015612b2d576000886020015160ff168260ff1610612a115760a089015160208a01516129f19084614249565b60ff1681518110612a0457612a04613b69565b6020026020010151612a33565b88608001518260ff1681518110612a2a57612a2a613b69565b60200260200101515b60408051602081019091526000808252919250905b8651811015612aa0578360ff16878281518110612a6757612a67613b69565b602002602001015160ff1603612a9857878181518110612a8957612a89613b69565b60200260200101519150612aa0565b600101612a48565b508951604051630c2eceab60e21b81526001600160a01b038416916330bb3aac91612ad3918d918d908790600401614535565b602060405180830381865afa158015612af0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b1491906142e2565b612b1e9086614292565b945050508060010190506129bc565b505095945050505050565b805160208083015160408085015160608087015160808801519351600160f81b9681019690965260c09690961b6001600160c01b031916602186015260e093841b6001600160e01b031990811660298701526001600160a01b03909216602d8601529490921b909116604d83015260518201526071015b6040516020818303038152906040529050919050565b60608160a001518260c00151604051602001612baf929190614574565b60006060600080612bf28561273a565b91509150600087604001518860200151612c0c919061451c565b90508060ff166001600160401b03811115612c2957612c29613be5565b604051908082528060200260200182016040528015612c52578160200160208202803683370190505b50935060005b8160ff168160ff161015610c6d576000896020015160ff168260ff1610612cad5760a08a015160208b0151612c8d9084614249565b60ff1681518110612ca057612ca0613b69565b6020026020010151612ccf565b89608001518260ff1681518110612cc657612cc6613b69565b60200260200101515b60408051602081019091526000808252919250905b8551811015612d3c578360ff16868281518110612d0357612d03613b69565b602002602001015160ff1603612d3457868181518110612d2557612d25613b69565b60200260200101519150612d3c565b600101612ce4565b506040516395d376d760e01b81526001600160a01b038316906395d376d790612d6b908d90859060040161459a565b6020604051808303816000875af1158015612d8a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dae91906142e2565b878460ff1681518110612dc357612dc3613b69565b6020026020010181815250506000878460ff1681518110612de657612de6613b69565b60200260200101511115612e7657868360ff1681518110612e0957612e09613b69565b60200260200101518c6000846001600160a01b03166001600160a01b031681526020019081526020016000206000828254612e449190614292565b92505081905550868360ff1681518110612e6057612e60613b69565b602002602001015188612e739190614292565b97505b5050600101612c58565b60608060001960ff861601612efd57865115612ebf57868484604051602001612eab9392919061460c565b604051602081830303815290604052612ef6565b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050505b9650612f95565b60011960ff861601612f7757855115612f3957858484604051602001612f259392919061460c565b604051602081830303815290604052612f70565b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050505b9550612f95565b604051636780cfaf60e01b815260ff861660048201526024016108fa565b509495939450505050565b606060001961ffff8516016130405760228214612fd0576040516301b8ca5560e31b815260040160405180910390fd5b6000612ff1612fe3602260028688614494565b612fec91614634565b6134e1565b604051600160f81b60208201819052601160f01b602183015260238201526001600160801b0319608083901b166024820152909150603401604051602081830303815290604052915050611030565b60011961ffff85160161310c5760428211158061305d5750606282115b1561307b576040516360493e2b60e11b815260040160405180910390fd5b600061308e612fe3602260028688614494565b905060006130a3612fe3604260228789614494565b9050600060411985016130b9866042818a614494565b6130c291614634565b60405160086020938403029190911c92506130f3916001916011918391889183916031916002918b918b9101614652565b6040516020818303038152906040529350505050611030565b604051630417051360e41b815261ffff851660048201526024016108fa565b600080805b83518210156131da57600190910190600061314b8584613261565b905060028301925060028161ffff16101561317c5760405163013adb8360e21b8152600481018490526024016108fa565b60006131888685613205565b90508060ff1660ff036131ae576040516334f4f66f60e21b815260040160405180910390fd5b600160ff82161b83166131cb5760019485019460ff82161b831792505b5061ffff169190910190613130565b835182146131fe5760405163013adb8360e21b8152600481018390526024016108fa565b5050919050565b6000613212826001614292565b835110156132585760405162461bcd60e51b8152602060048201526013602482015272746f55696e74385f6f75744f66426f756e647360681b60448201526064016108fa565b50016001015190565b600061326e826002614292565b835110156132b55760405162461bcd60e51b8152602060048201526014602482015273746f55696e7431365f6f75744f66426f756e647360601b60448201526064016108fa565b50016002015190565b6060816132cc81601f614292565b101561330b5760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b60448201526064016108fa565b6133158284614292565b845110156133595760405162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b60448201526064016108fa565b60608215801561337857604051915060008252602082016040526133c2565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156133b1578051835260209283019201613399565b5050858452601f01601f1916604052505b50949350505050565b8160ff1660ff036133ef576040516334f4f66f60e21b815260040160405180910390fd5b60006133fc83600161451c565b905060005b84518110156117b957600085828151811061341e5761341e613b69565b602002602001015190508060ff168360ff16036134935786828151811061344757613447613b69565b602002602001015184604051602001613461929190614407565b60405160208183030381529060405287838151811061348257613482613b69565b6020026020010181905250506117b9565b8060ff166000036134d857828683815181106134b1576134b1613b69565b602002602001019060ff16908160ff16815250508387838151811061348257613482613b69565b50600101613401565b60006fffffffffffffffffffffffffffffffff82111561351e576040516306dfcc6560e41b815260806004820152602481018390526044016108fa565b5090565b6040518060c0016040528060006001600160401b03168152602001600060ff168152602001600060ff168152602001600060ff16815260200160608152602001606081525090565b8280548282559060005260206000209081019282156135bf579160200282015b828111156135bf57825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019061358a565b5061351e9291505b8082111561351e57600081556001016135c7565b6000602082840312156135ed57600080fd5b81356001600160e01b03198116811461103057600080fd5b6001600160a01b038116811461126657600080fd5b803561362581613605565b919050565b63ffffffff8116811461126657600080fd5b80356136258161362a565b6000806040838503121561365a57600080fd5b823561366581613605565b915060208301356136758161362a565b809150509250929050565b815163ffffffff1681526020808301516001600160a01b03169082015260408101610584565b60208101600383106136c857634e487b7160e01b600052602160045260246000fd5b91905290565b6000806000606084860312156136e357600080fd5b83356136ee81613605565b925060208401356136fe81613605565b929592945050506040919091013590565b60008083601f84011261372157600080fd5b5081356001600160401b0381111561373857600080fd5b6020830191508360208260051b8501011115611da157600080fd5b60008060006040848603121561376857600080fd5b833561377381613605565b925060208401356001600160401b0381111561378e57600080fd5b61379a8682870161370f565b9497909650939450505050565b600080602083850312156137ba57600080fd5b82356001600160401b038111156137d057600080fd5b6137dc8582860161370f565b90969095509350505050565b60008151808452602080850194506020840160005b838110156138225781516001600160a01b0316875295820195908201906001016137fd565b509495945050505050565b6001600160401b03815116825260ff602082015116602083015260ff604082015116604083015260ff60608201511660608301526000608082015160c0608085015261387c60c08501826137e8565b905060a083015184820360a086015261389582826137e8565b95945050505050565b602081526000611030602083018461382d565b8035801515811461362557600080fd5b600080600080606085870312156138d757600080fd5b84356001600160401b03808211156138ee57600080fd5b9086019060e0828903121561390257600080fd5b9094506020860135908082111561391857600080fd5b818701915087601f83011261392c57600080fd5b81358181111561393b57600080fd5b88602082850101111561394d57600080fd5b602083019550809450505050613965604086016138b1565b905092959194509250565b60005b8381101561398b578181015183820152602001613973565b50506000910152565b600081518084526139ac816020860160208601613970565b601f01601f19169290920160200192915050565b825181526020808401519082015260606040820152600061124d6060830184613994565b6000602082840312156139f657600080fd5b81356110308161362a565b600080600060608486031215613a1657600080fd5b8335613a218161362a565b92506020840135613a3181613605565b91506040840135613a418161362a565b809150509250925092565b6020815260006110306020830184613994565b60008060208385031215613a7257600080fd5b82356001600160401b0380821115613a8957600080fd5b818501915085601f830112613a9d57600080fd5b813581811115613aac57600080fd5b866020606083028501011115613ac157600080fd5b60209290920196919550909350505050565b600060208284031215613ae557600080fd5b5035919050565b815181526020808301519082015260408101610584565b600060208284031215613b1557600080fd5b813561103081613605565b60008060408385031215613b3357600080fd5b8235613b3e81613605565b946020939093013593505050565b600060208284031215613b5e57600080fd5b815161103081613605565b634e487b7160e01b600052603260045260246000fd5b60008235605e19833603018112613b9557600080fd5b9190910192915050565b6000808335601e19843603018112613bb657600080fd5b8301803591506001600160401b03821115613bd057600080fd5b602001915036819003821315611da157600080fd5b634e487b7160e01b600052604160045260246000fd5b60405160c081016001600160401b0381118282101715613c1d57613c1d613be5565b60405290565b60405160e081016001600160401b0381118282101715613c1d57613c1d613be5565b604051601f8201601f191681016001600160401b0381118282101715613c6d57613c6d613be5565b604052919050565b600060408284031215613c8757600080fd5b604051604081018181106001600160401b0382111715613ca957613ca9613be5565b6040528235613cb78161362a565b81526020830135613cc781613605565b60208201529392505050565b80356001600160401b038116811461362557600080fd5b803560ff8116811461362557600080fd5b600082601f830112613d0c57600080fd5b813560206001600160401b03821115613d2757613d27613be5565b8160051b613d36828201613c45565b9283528481018201928281019087851115613d5057600080fd5b83870192505b84831015613d78578235613d6981613605565b82529183019190830190613d56565b979650505050505050565b600060c08284031215613d9557600080fd5b613d9d613bfb565b9050613da882613cd3565b8152613db660208301613cea565b6020820152613dc760408301613cea565b6040820152613dd860608301613cea565b606082015260808201356001600160401b0380821115613df757600080fd5b613e0385838601613cfb565b608084015260a0840135915080821115613e1c57600080fd5b50613e2984828501613cfb565b60a08301525092915050565b600060208284031215613e4757600080fd5b81356001600160401b03811115613e5d57600080fd5b61124d84828501613d83565b60008235603e19833603018112613b9557600080fd5b6000823560be19833603018112613b9557600080fd5b600060208284031215613ea757600080fd5b61103082613cea565b600060208284031215613ec257600080fd5b61103082613cd3565b60006105843683613d83565b6000808335601e19843603018112613eee57600080fd5b83016020810192503590506001600160401b03811115613f0d57600080fd5b8060051b3603821315611da157600080fd5b8183526000602080850194508260005b85811015613822578135613f4281613605565b6001600160a01b031687529582019590820190600101613f2f565b60208082528181018390526000906040808401600586901b8501820187855b8881101561409457603f19808985030185528235603e198c3603018112613fa257600080fd5b8b018035613faf8161362a565b63ffffffff168552808801353682900360be19018112613fce57600080fd5b858901889052016001600160401b03613fe682613cd3565b1687860152613ff6888201613cea565b606060ff8083168289015261400c8a8501613cea565b92506080818416818a0152614022838601613cea565b935060a09250818416838a015261403b81860186613ed7565b60c08b81015294509150614056905061010089018483613f1f565b92505061406581840184613ed7565b93509050838783030160e088015261407e828483613f1f565b978a019796505050928701925050600101613f7c565b509098975050505050505050565b6040815260006140b56040830186613994565b8281036020840152838152838560208301376000602085830101526020601f19601f860116820101915050949350505050565b81356140f38161362a565b63ffffffff8116905081548163ffffffff198216178355602084013561411881613605565b6001600160c01b03199190911690911760209190911b640100000000600160c01b031617905550565b6020808252818101839052600090604080840186845b878110156141b457813561416a8161362a565b63ffffffff908116845282860135906141828261362a565b16838601528184013561419481613605565b6001600160a01b0316838501526060928301929190910190600101614157565b5090979650505050505050565b6001600160a01b038416815263ffffffff831660208201526080810161124d6040830184805163ffffffff1682526020908101516001600160a01b0316910152565b6001600160a01b038416815263ffffffff831660208201526060604082018190526000906138959083018461382d565b634e487b7160e01b600052601160045260246000fd5b60ff828116828216039081111561058457610584614233565b600060ff83168061428357634e487b7160e01b600052601260045260246000fd5b8060ff84160491505092915050565b8082018082111561058457610584614233565b63ffffffff8516815260018060a01b03841660208201528260408201526080606082015260006142d86080830184613994565b9695505050505050565b6000602082840312156142f457600080fd5b5051919050565b600082601f83011261430c57600080fd5b81356001600160401b0381111561432557614325613be5565b614338601f8201601f1916602001613c45565b81815284602083860101111561434d57600080fd5b816020850160208301376000918101602001919091529392505050565b600060e0823603121561437c57600080fd5b614384613c23565b61438d83613cd3565b815261439b6020840161363c565b60208201526143ac6040840161361a565b60408201526143bd6060840161363c565b60608201526080830135608082015260a083013560a082015260c08301356001600160401b038111156143ef57600080fd5b6143fb368286016142fb565b60c08301525092915050565b60008351614419818460208801613970565b83519083019061442d818360208801613970565b01949350505050565b60608152600061444960608301866137e8565b6020838203602085015261445d82876137e8565b84810360408601528551808252602080880194509091019060005b8181101561409457845183529383019391830191600101614478565b600080858511156144a457600080fd5b838611156144b157600080fd5b5050820193919092039150565b6001600160f01b031981358181169160028510156144e65780818660020360031b1b83161692505b505092915050565b6001600160f81b031981358181169160018510156144e65760019490940360031b84901b1690921692915050565b60ff818116838216019081111561058457610584614233565b63ffffffff851681526001600160401b03841660208201526001600160a01b03831660408201526080606082018190526000906142d890830184613994565b8281526000825161458c816020850160208701613970565b919091016020019392505050565b6040815263ffffffff83511660408201526000602084015160a060608401526145c660e0840182613994565b604086015160808581019190915260608701516001600160401b031660a08601528601516001600160a01b031660c0850152838103602085015290506138958185613994565b6000845161461e818460208901613970565b8201838582376000930192835250909392505050565b8035602083101561058457600019602084900360031b1b1692915050565b60f88a811b6001600160f81b0319908116835260f08b811b6001600160f01b031990811660018601528b841b8316600386015260808b901b6001600160801b031916600486015289841b831660148601529088901b1660158401529085901b16601782015260006146d2601883018560801b6001600160801b0319169052565b5060288101919091526048019897505050505050505056fea2646970667358221220d9784bfc6a1a26f66ca9108192fade74e4e3799cd23fe6424871d62320841a2464736f6c63430008160033", - "sourceMap": "982:3336:82:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1554:301:3;;;;;;;;;;-1:-1:-1;1554:301:3;;;;;:::i;:::-;;:::i;:::-;;;470:14:132;;463:22;445:41;;433:2;418:18;1554:301:3;;;;;;;;1075:31:82;;;;;;;;;;-1:-1:-1;1075:31:82;;;;-1:-1:-1;;;;;1075:31:82;;;;;;-1:-1:-1;;;;;692:32:132;;;674:51;;662:2;647:18;1075:31:82;497:234:132;3440:604:2;;;;;;;;;;-1:-1:-1;3440:604:2;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;4373:125:3:-;;;;;;;;;;-1:-1:-1;4439:14:3;4373:125;;;;;;:::i;3421:449::-;;;;;;;;;;-1:-1:-1;3421:449:3;;;;;:::i;:::-;;:::i;:::-;;1740:682:82;;;;;;;;;;-1:-1:-1;1740:682:82;;;;;:::i;:::-;;:::i;2638:787:15:-;;;;;;;;;;-1:-1:-1;2638:787:15;;;;;:::i;:::-;;:::i;5951:153::-;;;;;;;;;;-1:-1:-1;5951:153:15;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;3980:336:82:-;;;;;;;;;;-1:-1:-1;3980:336:82;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;3612:2249:15:-;;;;;;;;;;-1:-1:-1;3612:2249:15;;;;;:::i;:::-;;:::i;1111:85:2:-;;;;;;;;;;-1:-1:-1;1111:85:2;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1111:85:2;;;;;;;8288:10:132;8276:23;;;8258:42;;-1:-1:-1;;;;;8336:32:132;;;8331:2;8316:18;;8309:60;8231:18;1111:85:2;8086:289:132;2942:134:82;;;;;;;;;;-1:-1:-1;2942:134:82;;;3061:1;8572:50:132;;2993:12:82;8653:2:132;8638:18;;8631:45;3067:1:82;8692:18:132;;;8685:45;;;;8560:2;8545:18;2942:134:82;8380:356:132;1082:23:2;;;;;;;;;;-1:-1:-1;1082:23:2;;;;-1:-1:-1;;;;;1082:23:2;;;3082:120:82;;;;;;;;;;-1:-1:-1;3082:120:82;;;;;:::i;:::-;;:::i;2293:101:107:-;;;;;;;;;;;;;:::i;1638:85::-;;;;;;;;;;-1:-1:-1;1684:7:107;1710:6;-1:-1:-1;;;;;1710:6:107;1638:85;;2506:430:82;;;;;;;;;;-1:-1:-1;2506:430:82;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;2202:554:2:-;;;;;;;;;;-1:-1:-1;2202:554:2;;;;;:::i;:::-;;:::i;2843:436::-;;;;;;;;;;-1:-1:-1;2843:436:2;;;;;:::i;:::-;;:::i;3940:427:3:-;;;;;;;;;;-1:-1:-1;3940:427:3;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;2688:99::-;;;;;;;;;;-1:-1:-1;2688:99:3;;;;;:::i;:::-;;:::i;2543:215:107:-;;;;;;;;;;-1:-1:-1;2543:215:107;;;;;:::i;:::-;;:::i;1252:46:2:-;;;;;;;;;;-1:-1:-1;1252:46:2;;;;;:::i;:::-;;;;;;;;;;;;;;;;;11471:25:132;;;11459:2;11444:18;1252:46:2;11325:177:132;2882:348:3;;;;;;;;;;-1:-1:-1;2882:348:3;;;;;:::i;:::-;;:::i;1554:301::-;1657:4;-1:-1:-1;;;;;;1692:45:3;;-1:-1:-1;;;1692:45:3;;:103;;-1:-1:-1;;;;;;;1753:42:3;;-1:-1:-1;;;1753:42:3;1692:103;:156;;;-1:-1:-1;;;;;;;;;;862:40:123;;;1811:37:3;1673:175;1554:301;-1:-1:-1;;1554:301:3:o;3440:604:2:-;-1:-1:-1;;;;;;;;;;;;;;;;;3604:43:2;;;;3565:36;3604:43;;;:31;;:43;;;:31;:43;;;-1:-1:-1;;;;;3695:22:2;;;;3604:15;3695:22;;;;;:34;;;;;;;;;3764:27;;3604:43;;3695:34;;3764:27;;3828:19;;;:67;;3867:28;;;;3828:67;;;3850:14;3828:67;3801:94;;;;3925:21;;;;;-1:-1:-1;;;;;3925:21:2;;3977:60;;4015:22;;;;;-1:-1:-1;;;;;4015:22:2;3977:60;;;4004:8;3977:60;-1:-1:-1;;;;;3956:81:2;:18;;;:81;-1:-1:-1;3956:9:2;;3440:604;-1:-1:-1;;;;;3440:604:2:o;3421:449:3:-;3534:8;;-1:-1:-1;;;;;3534:8:3;3520:10;:22;3516:62;;3551:27;;-1:-1:-1;;;3551:27:3;;;;;;;;;;;3516:62;3700:8;-1:-1:-1;;;;;3652:56:3;3673:8;-1:-1:-1;;;;;3652:42:3;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;3652:56:3;;3648:107;;3717:38;;-1:-1:-1;;;3717:38:3;;;;;;;;;;;3648:107;3766:38;3781:8;3791:3;3796:7;3766:14;:38::i;:::-;3820:43;;;-1:-1:-1;;;;;12341:15:132;;;12323:34;;12393:15;;12388:2;12373:18;;12366:43;12425:18;;;12418:34;;;3820:43:3;;12273:2:132;12258:18;3820:43:3;;;;;;;;3421:449;;;:::o;1740:682:82:-;326:8:0;-1:-1:-1;;;;;326:22:0;338:10;326:22;322:63;;357:28;;-1:-1:-1;;;357:28:0;;;;;;;;;;;322:63;1855:9:82::1;1850:566;1870:18:::0;;::::1;1850:566;;;1909:29;1941:7;;1949:1;1941:10;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;1909:42:::0;-1:-1:-1;1965:30:82::1;1985:9;;::::0;::::1;1909:42:::0;1985:9:::1;:::i;:::-;1965:19;:30::i;:::-;1161:1;2013:16;::::0;;;::::1;::::0;::::1;;:::i;:::-;:40;;::::0;2009:397:::1;;2073:80;2092:9;;::::0;::::1;:5:::0;:9:::1;:::i;:::-;2103:5:::0;2121:12:::1;;::::0;::::1;:5:::0;:12:::1;:::i;:::-;2110:42;;;;;;;:::i;:::-;2073:18;:80::i;:::-;2009:397;;;1211:1;2178:16;::::0;;;::::1;::::0;::::1;;:::i;:::-;:35;;::::0;2174:232:::1;;2233:70;2247:9;;::::0;::::1;:5:::0;:9:::1;:::i;:::-;2258:5:::0;2276:12:::1;;::::0;::::1;:5:::0;:12:::1;:::i;:::-;2265:37;;;;;;;:::i;:::-;2233:13;:70::i;2174:232::-;2374:16;::::0;;;::::1;::::0;::::1;;:::i;:::-;2349:42;::::0;-1:-1:-1;;;2349:42:82;;17555:10:132;17543:23;;;2349:42:82::1;::::0;::::1;17525::132::0;17498:18;;2349:42:82::1;;;;;;;;2174:232;-1:-1:-1::0;1890:3:82::1;;1850:566;;;;1740:682:::0;;;:::o;2638:787:15:-;1531:13:107;:11;:13::i;:::-;2747:9:15::1;2742:633;2762:18:::0;;::::1;2742:633;;;2801:39;2843:7;;2851:1;2843:10;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;2801:52:::0;-1:-1:-1;1222:15:15::1;2908:12;;::::0;::::1;2801:52:::0;2908:12:::1;:::i;:::-;:29;::::0;;;;;::::1;;;:::i;:::-;:46;;::::0;2904:91:::1;;2963:32;;-1:-1:-1::0;;;2963:32:15::1;;;;;;;;;;;2904:91;1222:15;3013:12;;::::0;::::1;:5:::0;:12:::1;:::i;:::-;:29;::::0;;;;;::::1;;;:::i;:::-;:46;;::::0;3009:91:::1;;3068:32;;-1:-1:-1::0;;;3068:32:15::1;;;;;;;;;;;3009:91;-1:-1:-1::0;;;;;3118:12:15::1;;::::0;::::1;:5:::0;:12:::1;:::i;:::-;:26;::::0;::::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;;;;;3118:47:15::1;::::0;3114:89:::1;;3174:29;;-1:-1:-1::0;;;3174:29:15::1;;;;;;;;;;;3114:89;3264:34;3285:12;;::::0;::::1;:5:::0;:12:::1;:::i;:::-;3264:34;;;:::i;:::-;:20;:34::i;:::-;3313:51;1106:1;3340:9;;::::0;::::1;:5:::0;:9:::1;:::i;:::-;3351:12;;::::0;::::1;:5:::0;:12:::1;:::i;:::-;3313:51;;;:::i;:::-;:10;:51::i;:::-;-1:-1:-1::0;2782:3:15::1;;2742:633;;;;3389:29;3410:7;;3389:29;;;;;;;:::i;:::-;;;;;;;;2638:787:::0;;:::o;5951:153::-;6033:16;;:::i;:::-;-1:-1:-1;;;;;6068:17:15;;;;;;:10;:17;;;;;;;;:29;;;;;;;;;;;6061:36;;;;;;;;;-1:-1:-1;;;;;6061:36:15;;;;;-1:-1:-1;;;6061:36:15;;;;;;;;-1:-1:-1;;;6061:36:15;;;;;;;;-1:-1:-1;;;6061:36:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6068:29;;6061:36;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6061:36:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6061:36:15;;;;;;;;;;;;;;;;;;;;;;;;;;;5951:153;;;;:::o;3980:336:82:-;-1:-1:-1;;;;;;;;;;;;;;;;;4144:26:82;4205:44;4216:7;4225:8;;4235:13;4205:10;:44::i;:::-;4259:10;;:50;;-1:-1:-1;;;4259:50:82;;4182:67;;-1:-1:-1;4182:67:82;;-1:-1:-1;;;;;;4259:10:82;;:25;;:50;;4182:67;;4300:8;;;;4259:50;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3980:336;;;;;;;:::o;3612:2249:15:-;3689:26;;:::i;:::-;3761:38;;;3727:31;3761:38;;;:26;;:38;;;:26;:38;;;-1:-1:-1;;;;;3842:17:15;;;;3761:10;3842:17;;;;;:29;;;;;;;;;3951:26;;-1:-1:-1;;;;;3951:26:15;;3987:297;;4057:27;;-1:-1:-1;;;;;4057:27:15;4031:53;;3987:297;;;-1:-1:-1;;;;;4105:34:15;;;;4101:183;;-1:-1:-1;;;;;4234:39:15;;;;4101:183;4346:29;;-1:-1:-1;;;4346:29:15;;:40;:29;4342:604;;4406:30;;-1:-1:-1;;;4406:30:15;;;;:34;4402:253;;4537:13;:26;;4512:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4512:51:15;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4512:22:15;;;:51;4610:30;;-1:-1:-1;;;4610:30:15;;;;4581:26;;;:59;4402:253;4342:604;;;4709:29;;-1:-1:-1;;;4709:29:15;;1222:15;4709:29;;;:46;4705:211;;4800:12;:25;;4775:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4775:50:15;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4775:22:15;;;:50;4872:29;;-1:-1:-1;;;4872:29:15;;;;4843:26;;;:58;4705:211;4960:29;;-1:-1:-1;;;4960:29:15;;:40;:29;4956:733;;5020:30;;-1:-1:-1;;;5020:30:15;;;;:34;5016:338;;5151:13;:26;;5126:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5126:51:15;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5126:22:15;;;:51;5224:30;;;-1:-1:-1;;;5224:30:15;;;;5195:26;;;:59;-1:-1:-1;;;5305:34:15;;;;-1:-1:-1;5272:30:15;;:67;5016:338;4956:733;;;5388:29;;-1:-1:-1;;;5388:29:15;;1222:15;5388:29;;;:46;5384:295;;5479:12;:25;;5454:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5454:50:15;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5454:22:15;;;:50;5551:29;;;-1:-1:-1;;;5551:29:15;;;;5522:26;;;:58;-1:-1:-1;;;5631:33:15;;;;-1:-1:-1;5598:30:15;;:66;5384:295;5823:31;5844:9;5823:20;:31::i;:::-;3717:2144;;;3612:2249;;;;:::o;3082:120:82:-;3151:4;3174:21;3190:4;3174:15;:21::i;2293:101:107:-;1531:13;:11;:13::i;:::-;2357:30:::1;2384:1;2357:18;:30::i;:::-;2293:101::o:0;2506:430:82:-;2605:12;-1:-1:-1;;2633:35:82;;;;2629:301;;2702:30;2720:5;2727:4;2702:17;:30::i;:::-;2691:42;;;;;;;;:::i;:::-;;;;;;;;;;;;;2684:49;;;;2629:301;-1:-1:-1;;2754:30:82;;;;2750:180;;2818:25;2831:5;2838:4;2818:12;:25::i;:::-;2807:37;;;;;;;;:::i;2750:180::-;2882:37;;-1:-1:-1;;;2882:37:82;;17555:10:132;17543:23;;2882:37:82;;;17525:42:132;17498:18;;2882:37:82;17381:192:132;2750:180:82;2506:430;;;;;:::o;2202:554:2:-;1531:13:107;:11;:13::i;:::-;2321:9:2::1;2316:385;2336:18:::0;;::::1;2316:385;;;2375:44;2422:7;;2430:1;2422:10;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;::::1;::::0;-1:-1:-1;2484:3:2::1;::::0;2451:21:::1;::::0;-1:-1:-1;2451:21:2;;;;;::::1;:::i;:::-;-1:-1:-1::0;;;;;2451:37:2::1;::::0;2447:81:::1;;2497:31;;-1:-1:-1::0;;;2497:31:2::1;;;;;;;;;;;2447:81;2546:27;::::0;;;:12:::1;::::0;::::1;:27;:::i;:::-;:32;;2577:1;2546:32:::0;2542:76:::1;;2587:31;;-1:-1:-1::0;;;2587:31:2::1;;;;;;;;;;;2542:76;2633:31;::::0;;;:15:::1;2678:12;2633:31:::0;;;2678:12;::::1;::::0;2633:31;;2665:9:::1;2678:12:::0;:5;2665:9:::1;:::i;:::-;2633:42;;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;2633:42:2;:57:::1;::::0;:42;:57:::1;:::i;:::-;-1:-1:-1::0;;;2356:3:2::1;;2316:385;;;;2715:34;2741:7;;2715:34;;;;;;;:::i;2843:436::-:0;1531:13:107;:11;:13::i;:::-;3035:20:2::1;;3008:24;:47;3004:147;;;3130:20;::::0;3076:75:::1;::::0;-1:-1:-1;;;3076:75:2;;::::1;::::0;3104:24;;3076:75:::1;;25014:25:132::0;;;25070:2;25055:18;;25048:34;25002:2;24987:18;;24840:248;3004:147:2::1;3161:20;:47:::0;;;3223:49:::1;::::0;11471:25:132;;;3223:49:2::1;::::0;11459:2:132;11444:18;3223:49:2::1;;;;;;;;2843:436:::0;:::o;3940:427:3:-;-1:-1:-1;;;;;;;;;;;;;;;;;4110:17:3;;4151:157;4171:14;;;;;;;;:::i;:::-;4199;;;;;;;;:::i;:::-;4227:15;;;;:7;:15;:::i;:::-;:22;;4263:13;4290:8;;4151:6;:157::i;:::-;4325:35;;;;;;;;;;;;;;;;;-1:-1:-1;;;3940:427:3;;;;;;;:::o;2688:99::-;1531:13:107;:11;:13::i;:::-;2757:23:3::1;2770:9;2757:12;:23::i;:::-;2688:99:::0;:::o;2543:215:107:-;1531:13;:11;:13::i;:::-;-1:-1:-1;;;;;2627:22:107;::::1;2623:91;;2672:31;::::0;-1:-1:-1;;;2672:31:107;;2700:1:::1;2672:31;::::0;::::1;674:51:132::0;647:18;;2672:31:107::1;497:234:132::0;2623:91:107::1;2723:28;2742:8;2723:18;:28::i;2882:348:3:-:0;2952:18;2962:7;2952:9;:18::i;:::-;2980:19;3023:8;-1:-1:-1;;;;;3002:42:3;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2980:66;;3115:49;3138:11;3151:3;3156:7;3115:22;:49::i;:::-;3179:44;;;3198:10;12323:34:132;;-1:-1:-1;;;;;12393:15:132;;12388:2;12373:18;;12366:43;12425:18;;;12418:34;;;3179:44:3;;12273:2:132;12258:18;3179:44:3;12083:375:132;696:194:44;-1:-1:-1;;;;;779:19:44;;775:58;;807:26;;-1:-1:-1;;;807:26:44;;;;;;;;;;;775:58;843:40;-1:-1:-1;;;;;843:27:44;;871:3;876:6;843:27;:40::i;:::-;696:194;;;:::o;6870:153:15:-;6947:27;6963:10;6947:15;:27::i;:::-;6942:74;;6983:33;;-1:-1:-1;;;6983:33:15;;17555:10:132;17543:23;;6983:33:15;;;17525:42:132;17498:18;;6983:33:15;17381:192:132;9691:223:2;-1:-1:-1;;;;;9803:22:2;;;;;;;:15;:22;;;;;;;;:34;;;;;;;;;;;;;:44;;;;;;;;;;;;;-1:-1:-1;;;;;;9803:44:2;;;;;;;;;;;;;;9862:45;;;;;9819:5;;9826:10;;9840:7;;9862:45;:::i;6191:318:15:-;6292:37;6303:5;6310:10;6322:6;6292:10;:37::i;:::-;6417:31;6430:5;6437:10;6417:12;:31::i;:::-;;6463:39;6476:5;6483:10;6495:6;6463:39;;;;;;;;:::i;1796:162:107:-;1684:7;1710:6;-1:-1:-1;;;;;1710:6:107;735:10:117;1855:23:107;1851:101;;1901:40;;-1:-1:-1;;;1901:40:107;;735:10:117;1901:40:107;;;674:51:132;647:18;;1901:40:107;497:234:132;7110:187:15;7193:24;;;;:29;;;:66;;;;-1:-1:-1;7226:28:15;;;;:33;;;7193:66;7189:101;;;7268:22;;-1:-1:-1;;;7268:22:15;;;;;;;;;;;7392:2122;7709:23;;;;1222:15;7709:40;;;;;:78;;-1:-1:-1;7753:23:15;;;;:34;;;7709:78;7705:423;;;7807:19;;;;:26;:31;7803:76;;7847:32;;-1:-1:-1;;;7847:32:15;;;;;;;;;;;7803:76;7705:423;;;7944:6;:23;;;7914:53;;:6;:19;;;:26;:53;;:92;;;-1:-1:-1;1533:1:15;1510:19;1528:1;1510:15;:19;:::i;:::-;1509:25;;;;:::i;:::-;7971:35;;:6;:23;;;:35;;;7914:92;7910:153;;;8031:32;;-1:-1:-1;;;8031:32:15;;;;;;;;;;;7910:153;8077:40;8097:6;:19;;;8077;:40::i;:::-;8687:23;;;;1222:15;8687:40;;;;;:78;;-1:-1:-1;8731:23:15;;;;:34;;;8687:78;8683:686;;;8785:19;;;;:26;:31;8781:76;;8825:32;;-1:-1:-1;;;8825:32:15;;;;;;;;;;;8781:76;8875:27;;;;:32;;;8871:81;;8916:36;;-1:-1:-1;;;8916:36:15;;;;;;;;;;;8871:81;8683:686;;;9017:6;:23;;;8987:53;;:6;:19;;;:26;:53;;:92;;;-1:-1:-1;1533:1:15;1510:19;1528:1;1510:15;:19;:::i;:::-;1509:25;;;;:::i;:::-;9044:35;;:6;:23;;;:35;;;8987:92;8983:153;;;9104:32;;-1:-1:-1;;;9104:32:15;;;;;;;;;;;8983:153;9154:27;;;;:32;;;;:89;;;9220:6;:23;;;9190:53;;:6;:27;;;:53;;;9154:89;9150:154;;;9268:36;;-1:-1:-1;;;9268:36:15;;;;;;;;;;;9150:154;9318:40;9338:6;:19;;;9318;:40::i;:::-;-1:-1:-1;;;;;9475:17:15;;;;;;:10;:17;;;;;;;;:23;;;;;;;;;;;:32;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9475:32:15;;;-1:-1:-1;;9475:32:15;;;;;;;-1:-1:-1;;;9475:32:15;;;;;;-1:-1:-1;;9475:32:15;-1:-1:-1;;;9475:32:15;;;;;;;-1:-1:-1;;;;9475:32:15;;-1:-1:-1;;;9475:32:15;;;;;;;;;;;;;;;;;;;;;;:23;:32;;;;;;;;;:::i;:::-;-1:-1:-1;9475:32:15;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;7392:2122:15:o;2011:602:3:-;-1:-1:-1;;;;;;;;;;;;;;;;;2183:12:3;326:8:0;-1:-1:-1;;;;;326:22:0;338:10;326:22;322:63;;357:28;;-1:-1:-1;;;357:28:0;;;;;;;;;;;322:63;2208:26:3::1;2236:22:::0;2262:30:::1;2274:7;2283:8;;2262:11;:30::i;:::-;2207:85:::0;;-1:-1:-1;2207:85:3;-1:-1:-1;2304:25:3::1;::::0;2353:133:::1;2379:14;::::0;;;::::1;::::0;::::1;;:::i;:::-;2407;::::0;;;::::1;::::0;::::1;;:::i;:::-;2435;2463:13;2353:12;:133::i;:::-;2303:183:::0;;-1:-1:-1;2303:183:3;-1:-1:-1;2496:35:3::1;2303:183:::0;2496:35;::::1;:::i;:::-;2550:40;::::0;;;;::::1;::::0;;;;;;::::1;::::0;::::1;::::0;;;;;-1:-1:-1;2592:13:3;;-1:-1:-1;;;395:1:0::1;2011:602:3::0;;;;;;;:::o;6609:255:15:-;6726:38;;;6676:4;6726:38;;;:26;;:38;:26;:38;;6781:30;;-1:-1:-1;;;6781:30:15;;;;:34;;;:76;;-1:-1:-1;6819:34:15;-1:-1:-1;;;6819:34:15;;;;:38;;;;-1:-1:-1;;6609:255:15:o;2912:187:107:-;2985:16;3004:6;;-1:-1:-1;;;;;3020:17:107;;;-1:-1:-1;;;;;;3020:17:107;;;;;;3052:40;;3004:6;;;;;;;3052:40;;2985:16;3052:40;2975:124;2912:187;:::o;5857:1005:2:-;6038:7;6047;6067:28;6097:40;6141:23;6155:8;;6141:13;:23::i;:::-;6066:98;;;;6256:17;6276:51;6291:7;6300;6309:17;6276:14;:51::i;:::-;6256:71;;6364:28;6395:35;6413:7;6422;6395:17;:35::i;:::-;6364:66;;6467:51;6486:8;6496:6;:21;;;6467:51;;:18;:51::i;:::-;6561:6;:15;;;-1:-1:-1;;;;;6542:42:2;;6585:7;6594;6603:8;6613:15;6542:87;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6529:100;;;;:::i;:::-;;;6667:25;6694:18;6716:58;6731:7;6740;6749:9;6760:13;6716:14;:58::i;:::-;6666:108;;-1:-1:-1;6666:108:2;-1:-1:-1;6784:30:2;6666:108;6784:30;;:::i;:::-;;6844:10;;-1:-1:-1;5857:1005:2;-1:-1:-1;;;;;;;;;;;;5857:1005:2:o;9561:124::-;9621:8;:20;;-1:-1:-1;;;;;;9621:20:2;-1:-1:-1;;;;;9621:20:2;;;;;;;;9656:22;;674:51:132;;;9656:22:2;;662:2:132;647:18;9656:22:2;497:234:132;9310:245:2;9384:10;9365:11;9379:16;;;:4;:16;;;;;;9409:13;;;9405:67;;;9431:41;;-1:-1:-1;;;9431:41:2;;;;;25014:25:132;;;25055:18;;;25048:34;;;24987:18;;9431:41:2;24840:248:132;9405:67:2;9511:10;9506:16;;;;:4;:16;;;;;9525:13;;;9506:32;;9310:245::o;896:222:44:-;-1:-1:-1;;;;;987:22:44;;983:129;;1025:19;1032:3;1037:6;1025;:19::i;983:129::-;1075:26;1081:6;1089:3;1094:6;1075:5;:26::i;1271:160:115:-;1380:43;;;-1:-1:-1;;;;;27543:32:132;;1380:43:115;;;27525:51:132;27592:18;;;;27585:34;;;1380:43:115;;;;;;;;;;27498:18:132;;;;1380:43:115;;;;;;;;-1:-1:-1;;;;;1380:43:115;-1:-1:-1;;;1380:43:115;;;1353:71;;1373:5;;1353:19;:71::i;9520:322:15:-;9596:15;9639:9;9634:202;9658:5;:12;9654:1;:16;9634:202;;;9691:11;9705:5;9711:1;9705:8;;;;;;;;:::i;:::-;;;;;;;9691:22;;9738:7;-1:-1:-1;;;;;9731:14:15;:3;-1:-1:-1;;;;;9731:14:15;;9727:44;;9754:17;;-1:-1:-1;;;9754:17:15;;;;;;;;;;;9727:44;9822:3;-1:-1:-1;9672:3:15;;9634:202;;4631:891:3;4742:26;4770:22;4838:28;4868:40;4912:23;4926:8;;4912:13;:23::i;:::-;4837:98;;-1:-1:-1;4837:98:3;-1:-1:-1;4973:28:3;5004:49;5022:14;;;;;;;;:::i;:::-;5038;;;;;;;;:::i;5004:49::-;4973:80;-1:-1:-1;5063:15:3;5081;;;;:7;:15;:::i;:::-;:22;;5063:40;;5113:50;5132:7;5141:6;:21;;;5113:50;;:18;:50::i;:::-;5204:15;;;;5191:87;;5221:14;;;;;;;;:::i;:::-;5237;;;;;;;;:::i;:::-;5253:7;5262:15;5191:12;:87::i;:::-;5173:105;;;;:::i;:::-;;;5322:19;5343:24;5371:40;5384:7;5393:17;5371:12;:40::i;:::-;5321:90;;-1:-1:-1;5321:90:3;-1:-1:-1;5448:29:3;5321:90;5448:29;;:::i;:::-;5504:11;;5448:29;;-1:-1:-1;4631:891:3;-1:-1:-1;;;;;;;;;4631:891:3:o;4753:862:2:-;4970:8;;4909:25;;;;-1:-1:-1;;;;;4970:8:2;:24;4966:643;;5034:139;;-1:-1:-1;;;;;27871:32:132;;5034:139:2;;;27853:51:132;27952:10;27940:23;;27920:18;;;27913:51;27980:18;;;27973:34;;;28050:14;;28043:22;28023:18;;;28016:50;5010:21:2;;27825:19:132;;5034:139:2;;;-1:-1:-1;;5034:139:2;;;;;;;;;;;;;;;-1:-1:-1;;;;;5034:139:2;-1:-1:-1;;;5034:139:2;;;5225:8;;5034:139;;-1:-1:-1;;;;;5225:67:2;;-1:-1:-1;;;;;5225:8:2;;5243:16;;-1:-1:-1;;5034:139:2;5225:17;:67::i;:::-;5187:105;;;;5341:69;5362:15;5379:13;5394:7;5403:6;5341:20;:69::i;:::-;5307:103;;-1:-1:-1;5307:103:2;-1:-1:-1;5508:21:2;;5504:95;;5554:8;;-1:-1:-1;;;;;5554:8:2;5549:14;;;;:4;:14;;;;;:35;;5567:17;;5549:14;:35;;5567:17;;5549:35;:::i;:::-;;;;-1:-1:-1;;5504:95:2;4996:613;;;4753:862;;;;;;;:::o;3792:182:82:-;3886:12;3900:22;3941:26;3958:8;;3941:16;:26::i;:::-;3934:33;;;;3792:182;;;;;;:::o;3290:223::-;3442:7;3468:38;3479:7;3488;3497:8;3468:10;:38::i;4114:164:2:-;4211:4;4201:7;:14;4197:74;;;4224:47;;-1:-1:-1;;;4224:47:2;;;;;25014:25:132;;;25055:18;;;25048:34;;;24987:18;;4224:47:2;24840:248:132;4197:74:2;4114:164;;:::o;7265:772::-;7542:8;;7428:17;;;;-1:-1:-1;;;;;7542:8:2;:24;7538:493;;7606:139;;-1:-1:-1;;;;;27871:32:132;;7606:139:2;;;27853:51:132;27952:10;27940:23;;27920:18;;;27913:51;27980:18;;;27973:34;;;28050:14;;28043:22;28023:18;;;28016:50;7582:21:2;;27825:19:132;;7606:139:2;;;-1:-1:-1;;7606:139:2;;;;;;;;;;;;;;;-1:-1:-1;;;;;7606:139:2;-1:-1:-1;;;7606:139:2;;;7797:8;;7606:139;;-1:-1:-1;;;;;7797:132:2;;-1:-1:-1;;;;;7797:8:2;;7838:16;;7606:139;7797:23;:132::i;:::-;7759:170;;;;7951:69;7972:15;7989:13;8004:7;8013:6;7951:20;:69::i;:::-;7944:76;;;;;;;;;438:252:44;-1:-1:-1;;;;;506:19:44;;502:58;;534:26;;-1:-1:-1;;;534:26:44;;;;;;;;;;;502:58;571:12;589:3;-1:-1:-1;;;;;589:8:44;606:6;589:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;570:48;;;633:7;628:55;;649:34;;-1:-1:-1;;;649:34:44;;-1:-1:-1;;;;;27543:32:132;;649:34:44;;;27525:51:132;27592:18;;;27585:34;;;27498:18;;649:34:44;27351:274:132;7738:720:115;7818:18;7846:19;7984:4;7981:1;7974:4;7968:11;7961:4;7955;7951:15;7948:1;7941:5;7934;7929:60;8041:7;8031:176;;8085:4;8079:11;8130:16;8127:1;8122:3;8107:40;8176:16;8171:3;8164:29;8031:176;-1:-1:-1;;8284:1:115;8278:8;8234:16;;-1:-1:-1;8310:15:115;;:68;;8362:11;8377:1;8362:16;;8310:68;;;-1:-1:-1;;;;;8328:26:115;;;:31;8310:68;8306:146;;;8401:40;;-1:-1:-1;;;8401:40:115;;-1:-1:-1;;;;;692:32:132;;8401:40:115;;;674:51:132;647:18;;8401:40:115;497:234:132;4284:463:2;4516:85;;-1:-1:-1;;;4516:85:2;;4471:19;;-1:-1:-1;;;;;4516:39:2;;;;;:85;;4556:7;;4565;;4574:8;;4584:16;;4516:85;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4502:99;-1:-1:-1;4615:15:2;;4611:76;;-1:-1:-1;;;;;4646:15:2;;;;;;:4;:15;;;;;:30;;4665:11;;4646:15;:30;;4665:11;;4646:30;:::i;:::-;;;;-1:-1:-1;;4611:76:2;4701:39;;;-1:-1:-1;;;;;27543:32:132;;27525:51;;27607:2;27592:18;;27585:34;;;4701:39:2;;27498:18:132;4701:39:2;;;;;;;4284:463;;;;;;;:::o;3519:267:82:-;3648:23;3673:26;3746:33;3755:4;3746:33;3761:7;3746:33;:::i;:::-;3770:8;3746;:33::i;:::-;3711:68;;;;-1:-1:-1;3519:267:82;-1:-1:-1;;;3519:267:82:o;770:1503:12:-;940:4;946:12;1058:20;;1101:9;;;1097:68;;1141:12;;;1134:5;1141:12;;;;;;;;;1126:28;;;;;;;1097:68;1211:15;1236:13;1259:24;1296:8;1286:19;;-1:-1:-1;;;;;1286:19:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1286:19:12;;1259:46;;1807:1;1778;1741:9;1735:16;1703:4;1692:9;1688:20;1649:6;1611:7;1582:4;1560:272;1548:284;;1899:16;1888:27;;1943:8;1934:7;1931:21;1928:76;;;1982:8;1971:19;;1928:76;2089:7;2076:11;2069:28;2209:7;2206:1;2199:4;2186:11;2182:22;2167:50;2244:8;;-1:-1:-1;2254:11:12;-1:-1:-1;;;770:1503:12;;;;;;;;;:::o;8043:1215:2:-;8216:17;8235:18;8306:8;8305:9;:47;;;-1:-1:-1;8318:14:2;;966:2;-1:-1:-1;8305:47:2;8301:66;;;-1:-1:-1;8362:1:2;;-1:-1:-1;8362:1:2;8354:13;;8301:66;8406:24;8444:7;8433:30;;;;;;;;;;;;:::i;:::-;8406:57;;8477:13;8473:779;;;8519:16;8506:29;;8473:779;;;8995:20;9036;;9018:15;:38;:79;;9077:20;;9018:79;;;9059:15;9018:79;8995:102;;9195:12;9176:16;:31;:65;;9225:16;9176:65;;;9210:12;9176:65;9164:77;;8552:700;8473:779;8255:1003;8043:1215;;;;;;;:::o;752:495:14:-;826:12;840:22;875:25;902:20;926:27;944:8;;926:17;:27::i;:::-;874:79;;;;968:7;:14;986:1;968:19;964:95;;1025:22;;;1045:1;1025:22;;;;;;;;;1011:12;;1025:22;;;-1:-1:-1;;;;;;;;;;;;;;;;;1025:22:14;;;;;;;;;;;;;;;;1003:45;;;;;;;;964:95;1105:22;;;1125:1;1105:22;;;;;;;;;1069:33;;1105:22;;;;-1:-1:-1;;;;;;;;;;;;;;;;;1105:22:14;;;;;;;;;;;;;;;1069:58;;1153:44;;;;;;;;475:1:21;1153:44:14;;;;;;1189:7;1153:44;;;1137:10;1148:1;1137:13;;;;;;;;:::i;:::-;;;;;;;;;;:60;1215:12;;;;-1:-1:-1;752:495:14;;-1:-1:-1;;;;752:495:14:o;3654:574::-;3793:16;3821:23;3847:30;3860:7;3869;3847:12;:30::i;:::-;3821:56;;3947:23;3973:8;:15;3992:1;3973:20;:54;;4008:8;4017:1;4008:11;;;;;;;;:::i;:::-;;;;;;;:19;;;3973:54;;;3996:9;;;;;;;;;;;;3973:54;3947:80;;4038:27;4067:25;4096:43;4128:10;4096:31;:43::i;:::-;4037:102;;;;4161:60;4170:6;4178:7;4187;4196:12;4210:10;4161:8;:60::i;:::-;4150:71;3654:574;-1:-1:-1;;;;;;;;3654:574:14:o;3183:1457:12:-;3340:4;3346:12;3458:20;;3501:9;;;3497:68;;3541:12;;;3534:5;3541:12;;;;;;;;;3526:28;;;;;;;3497:68;3611:15;3636:13;3659:24;3696:8;3686:19;;-1:-1:-1;;;;;3686:19:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3686:19:12;;3659:46;;4174:1;4145;4108:9;4102:16;4070:4;4059:9;4055:20;4017:7;3988:4;3960:239;3948:251;;4266:16;4255:27;;4310:8;4301:7;4298:21;4295:76;;;4349:8;4338:19;;4295:76;4456:7;4443:11;4436:28;4576:7;4573:1;4566:4;4553:11;4549:22;4534:50;4611:8;;;;-1:-1:-1;3183:1457:12;-1:-1:-1;;;;;;;3183:1457:12:o;1304:1110:14:-;1469:16;1487:26;1525:25;1553:41;1586:7;1553:32;:41::i;:::-;1525:69;;1604:20;1627:36;1655:7;1627:27;:36::i;:::-;1695:18;;;;;;1739:14;;;;1780;;;;1604:59;;-1:-1:-1;1695:18:14;;1673:19;1830:28;1780:14;1739;1830:12;:28::i;:::-;1804:54;;1928:23;1954:8;:15;1973:1;1954:20;:54;;1989:8;1998:1;1989:11;;;;;;;;:::i;:::-;;;;;;;:19;;;1954:54;;;1977:9;;;;;;;;;;;;1954:54;1928:80;;2018:24;2074:191;2099:5;2118:6;2138:93;;;;;;;;2167:6;2138:93;;;;;;2175:12;2138:93;;;;2189:11;2138:93;;;;2202:6;:20;;;-1:-1:-1;;;;;2138:93:14;;;;;2224:6;-1:-1:-1;;;;;2138:93:14;;;;2245:10;2074:11;:191::i;:::-;2291:39;;2052:213;;-1:-1:-1;2052:213:14;-1:-1:-1;2291:39:14;;2308:12;;2322:7;;2291:39;;;:::i;:::-;;;;;;;;;;;;;2275:55;;2346:61;2357:6;:19;;;2378:6;:19;;;2399:7;2346:61;;;;;;;;:::i;:::-;;;;;;;;1515:899;;;;;;;;1304:1110;;;;;;:::o;1135:3038:24:-;1213:28;;1373:1;1355:19;;1351:62;;;1383:30;;-1:-1:-1;;;1383:30:24;;1411:1;1383:30;;;11471:25:132;11444:18;;1383:30:24;11325:177:132;1351:62:24;1424:18;1459:13;1470:1;1424:18;1459:8;;:13;:::i;:::-;1452:21;;;:::i;:::-;1445:29;;;-1:-1:-1;1501:1:24;-1:-1:-1;;1700:21:24;;1696:2471;;1781:6;1765:13;2066:1412;2073:24;;;2066:1412;;;2121:14;2151:27;2176:1;2167:10;;2160:6;2151:8;;:27;:::i;:::-;2144:35;;;:::i;:::-;2138:42;;;-1:-1:-1;2218:1:24;2206:13;;;2202:51;;2228:25;;-1:-1:-1;;;2228:25:24;;2251:1;2228:25;;;32975:36:132;32948:18;;2228:25:24;32823:194:132;2202:51:24;2537:12;:17;;2553:1;2537:17;2533:681;;2597:8;2582:23;;2533:681;;;2650:12;2638:24;;:8;:24;;;2634:580;;2690:17;;2710:22;2725:6;2719:5;2710:8;;:22;:::i;:::-;2690:42;;;;2829:205;2879:15;2924:10;2964:12;3006:2;;2829:20;:205::i;:::-;2797:237;;-1:-1:-1;2797:237:24;-1:-1:-1;3136:6:24;;-1:-1:-1;3183:8:24;;-1:-1:-1;3183:8:24;;-1:-1:-1;;2634:580:24;3236:8;;;;3283:11;;3311:27;;3327:10;;3236:8;3311;;:27;:::i;:::-;3304:35;;;:::i;:::-;3297:43;;;-1:-1:-1;3374:1:24;3366:9;;;3362:57;;3384:35;;-1:-1:-1;;;3384:35:24;;;;;11471:25:132;;;11444:18;;3384:35:24;11325:177:132;3362:57:24;3451:4;3458:1;3451:8;3441:18;;;;;;2099:1379;;2066:1412;;;3580:25;;;3576:73;;3614:35;;-1:-1:-1;;;3614:35:24;;;;;11471:25:132;;;11444:18;;3614:35:24;11325:177:132;3576:73:24;3845:1;3827:19;;3823:229;;;3870:17;;3890:22;3905:6;3899:5;3890:8;;:22;:::i;:::-;3870:42;;;;3966:67;3987:15;4004:10;4016:12;4030:2;;3966:20;:67::i;:::-;3934:99;;-1:-1:-1;3934:99:24;-1:-1:-1;;;3823:229:24;1737:2329;;1696:2471;;;4114:42;4134:11;4147:8;;4114:19;:42::i;:::-;4096:60;;1696:2471;1268:2905;;1135:3038;;;;;:::o;1107:2599:21:-;1197:25;1224;1265:8;:15;1284:1;1265:20;1261:57;;1107:2599;;;:::o;1261:57::-;1329:13;1345:20;1356:8;1345:10;:20::i;:::-;1329:36;;1452:7;:12;;1463:1;1452:12;1448:255;;1493:14;;;1505:1;1493:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1480:27;;1537:8;1521:10;1532:1;1521:13;;;;;;;;:::i;:::-;;;;;;;;;;:24;1573:14;;;1585:1;1573:14;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1560:27:21;-1:-1:-1;1617:19:21;:8;1634:1;1617:16;:19::i;:::-;1601:10;1612:1;1601:13;;;;;;;;:::i;:::-;;;;;;:35;;;;;;;;;;;1661:31;1107:2599;;;:::o;1448:255::-;1800:7;1788:20;;-1:-1:-1;;;;;1788:20:21;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1788:20:21;;1775:33;;1843:7;1831:20;;-1:-1:-1;;;;;1831:20:21;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1818:33:21;-1:-1:-1;1885:14:21;;1967:3;2014:1178;2030:8;:15;2021:6;:24;2014:1178;;;2065:8;;;;;2178:19;2200:25;:8;2065;2200:17;:25::i;:::-;2253:1;2243:11;;;;;2178:47;-1:-1:-1;2335:12:21;2350:24;:8;2243:11;2350:16;:24::i;:::-;2335:39;;2636:10;:17;;2650:3;2636:17;2632:505;;2690:6;2677:19;;2632:505;;;2735:10;2725:20;;:6;:20;;;2721:416;;-1:-1:-1;;2783:14:21;;;:18;2769:11;2882:26;:8;2792:5;2783:18;2882:14;:26::i;:::-;2863:45;;2930:58;2948:10;2960;2972;2984:3;2930:17;:58::i;:::-;-1:-1:-1;3065:12:21;;;;;3112:6;-1:-1:-1;3112:6:21;2721:416;-1:-1:-1;3155:22:21;;;;;;;2014:1178;;;3398:14;;;3383:12;3444:27;:8;3407:5;3398:14;3444;:27::i;:::-;3426:45;;3485:57;3503:10;3515;3527;3539:2;3485:17;:57::i;:::-;3611:7;3606:84;3628:7;3624:11;;:1;:11;;;3606:84;;;3662:10;3673:1;3662:13;;;;;;;;;;:::i;:::-;;;;;;;;;;3660:15;;-1:-1:-1;;3660:15:21;;;;;;3637:3;3606:84;;;;1861:1839;;;;;1251:2455;1107:2599;;;:::o;4234:1078:14:-;4434:16;4562;4608:7;:24;;;4581:7;:24;;;:51;;;;:::i;:::-;4562:70;;4647:7;4642:664;4664:10;4660:14;;:1;:14;;;4642:664;;;4695:11;4713:7;:24;;;4709:28;;:1;:28;;;:139;;4798:20;;;;4823:24;;;;4819:28;;:1;:28;:::i;:::-;4798:50;;;;;;;;;;:::i;:::-;;;;;;;4709:139;;;4756:7;:20;;;4777:1;4756:23;;;;;;;;;;:::i;:::-;;;;;;;4709:139;4863:25;;;;;;;;;:20;:25;;;4695:153;;-1:-1:-1;4863:25:14;5003:192;5027:7;:14;5023:1;:18;5003:192;;;5084:1;5070:15;;:7;5078:1;5070:10;;;;;;;;:::i;:::-;;;;;;;:15;;;5066:115;;5119:13;5133:1;5119:16;;;;;;;;:::i;:::-;;;;;;;5109:26;;5157:5;;5066:115;5043:3;;5003:192;;;-1:-1:-1;5255:21:14;;5220:75;;-1:-1:-1;;;5220:75:14;;-1:-1:-1;;;;;5220:25:14;;;;;:75;;5246:7;;5278;;5287;;5220:75;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5208:87;;;;:::i;:::-;;;4681:625;;4676:3;;;;;4642:664;;;;4452:860;4234:1078;;;;;;;:::o;1263:359:48:-;1446:13;;1477:14;;;;;1509;;;;;1337:12;1553:14;;;;1585:16;;;;1380:235;;-1:-1:-1;;;1380:235:48;;;33935:49:132;;;;34039:3;34017:16;;;;-1:-1:-1;;;;;;34013:51:132;34000:11;;;33993:72;34088:3;34137:16;;;-1:-1:-1;;;;;;34133:25:132;;;34120:11;;;34113:46;-1:-1:-1;;;;;1509:24:48;;;34175:12:132;;;34168:28;34230:16;;;;34226:25;;;34212:12;;;34205:47;34268:12;;;34261:28;34305:12;;1380:235:48;;;;;;;;;;;;;1361:254;;1263:359;;;:::o;1628:154::-;1697:12;1745:7;:12;;;1759:7;:15;;;1728:47;;;;;;;;;:::i;2420:1192:14:-;2638:16;2656:24;2693:27;2722:21;2747:43;2779:10;2747:31;:43::i;:::-;2692:98;;;;2801:16;2850:10;:27;;;2820:10;:27;;;:57;;;;:::i;:::-;2801:76;;2911:10;2897:25;;-1:-1:-1;;;;;2897:25:14;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2897:25:14;;2887:35;;2937:7;2932:674;2954:10;2950:14;;:1;:14;;;2932:674;;;2985:11;3003:10;:27;;;2999:31;;:1;:31;;;:151;;3094:23;;;;3122:27;;;;3118:31;;:1;:31;:::i;:::-;3094:56;;;;;;;;;;:::i;:::-;;;;;;;2999:151;;;3049:10;:23;;;3073:1;3049:26;;;;;;;;;;:::i;:::-;;;;;;;2999:151;3165:25;;;;;;;;;:20;:25;;;2985:165;;-1:-1:-1;3165:25:14;3204:189;3228:6;:13;3224:1;:17;3204:189;;;3283:1;3270:14;;:6;3277:1;3270:9;;;;;;;;:::i;:::-;;;;;;;:14;;;3266:113;;3318:12;3331:1;3318:15;;;;;;;;:::i;:::-;;;;;;;3308:25;;3355:5;;3266:113;3243:3;;3204:189;;;-1:-1:-1;3420:45:14;;-1:-1:-1;;;3420:45:14;;-1:-1:-1;;;;;3420:28:14;;;;;:45;;3449:6;;3457:7;;3420:45;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3407:7;3415:1;3407:10;;;;;;;;;;:::i;:::-;;;;;;:58;;;;;3496:1;3483:7;3491:1;3483:10;;;;;;;;;;:::i;:::-;;;;;;;:14;3479:117;;;3531:7;3539:1;3531:10;;;;;;;;;;:::i;:::-;;;;;;;3517:5;:10;3523:3;-1:-1:-1;;;;;3517:10:14;-1:-1:-1;;;;;3517:10:14;;;;;;;;;;;;;:24;;;;;;;:::i;:::-;;;;;;;;3571:7;3579:1;3571:10;;;;;;;;;;:::i;:::-;;;;;;;3559:22;;;;;:::i;:::-;;;3479:117;-1:-1:-1;;2966:3:14;;2932:674;;4179:733:24;4371:12;;-1:-1:-1;;4413:38:24;;;;4409:449;;4486:23;;:28;:124;;4580:16;4598:11;;4563:47;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;4486:124;;;4533:11;;4486:124;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;4486:124:24;4467:143;;4409:449;;;-1:-1:-1;;4631:33:24;;;;4627:231;;4694:18;;:23;:82;;4751:11;4764;;4734:42;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;4694:82;;;4720:11;;4694:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;4694:82:24;4680:96;;4627:231;;;4814:33;;-1:-1:-1;;;4814:33:24;;33005:4:132;32993:17;;4814:33:24;;;32975:36:132;32948:18;;4814:33:24;32823:194:132;4627:231:24;-1:-1:-1;4875:16:24;;4893:11;;-1:-1:-1;;;;4179:733:24:o;5428:3052::-;5547:28;-1:-1:-1;;5591:21:24;;;;5587:2887;;5651:2;5632:21;;5628:67;;5662:33;;-1:-1:-1;;;5662:33:24;;;;;;;;;;;5628:67;5739:20;5762:48;5778:18;5789:6;5787:1;5778:8;;:18;:::i;:::-;5770:27;;;:::i;:::-;5762:46;:48::i;:::-;6205:239;;-1:-1:-1;;;6205:239:24;;;36821:38:132;;;-1:-1:-1;;;36875:11:132;;;36868:59;36943:11;;;36936:46;-1:-1:-1;;;;;;37019:3:132;37015:16;;;37011:62;36998:11;;;36991:83;5739:71:24;;-1:-1:-1;37090:12:132;;6205:239:24;;;;;;;;;;;;6187:257;;5614:841;5587:2887;;;-1:-1:-1;;6465:21:24;;;;6461:2013;;6560:2;6541:21;;;;:45;;-1:-1:-1;6584:2:24;6566:20;;6541:45;6537:91;;;6595:33;;-1:-1:-1;;;6595:33:24;;;;;;;;;;;6537:91;6672:20;6695:48;6711:18;6722:6;6720:1;6711:8;;:18;:::i;6695:48::-;6672:71;-1:-1:-1;6804:14:24;6821:50;6837:20;6849:7;6846:2;6837:8;;:20;:::i;6821:50::-;6804:67;-1:-1:-1;6902:16:24;-1:-1:-1;;6982:20:24;;7061:13;6982:8;7000:2;6982:8;;7061:13;:::i;:::-;7053:22;;;:::i;:::-;7909:475;;7117:1;7122:2;:16;;;7117:22;7104:36;;;;;-1:-1:-1;7909:475:24;;238:1:47;;7993:2:24;;238:1:47;;8122:12:24;;238:1:47;;8202:2:24;;351:1:47;;8338:6:24;;7104:36;;7909:475;;:::i;:::-;;;;;;;;;;;;;7891:493;;6488:1907;;;6461:2013;;;8422:41;;-1:-1:-1;;;8422:41:24;;38219:6:132;38207:19;;8422:41:24;;;38189:38:132;38162:18;;8422:41:24;38045:188:132;4741:1438:21;4807:13;;;4952:1134;4968:8;:15;4959:6;:24;4952:1134;;;5003:8;;;;;5048:19;5070:25;:8;5003;5070:17;:25::i;:::-;5048:47;;5123:1;5113:11;;;;5161:1;5146:12;:16;;;5142:58;;;5171:29;;-1:-1:-1;;;5171:29:21;;;;;11471:25:132;;;11444:18;;5171:29:21;11325:177:132;5142:58:21;5277:12;5292:24;:8;5309:6;5292:16;:24::i;:::-;5277:39;;5848:6;:13;;5858:3;5848:13;5844:45;;5870:19;;-1:-1:-1;;;5870:19:21;;;;;;;;;;;5844:45;435:1:46;:10;;;;462:31;;5907:124:21;;5954:9;;;;;667:10:46;;;;709:31;;5985:27:21;;5907:124;-1:-1:-1;6049:22:21;;;;;;;4952:1134;;;6119:8;:15;6109:6;:25;6105:67;;6143:29;;-1:-1:-1;;;6143:29:21;;;;;11471:25:132;;;11444:18;;6143:29:21;11325:177:132;6105:67:21;4822:1357;;4741:1438;;;:::o;12627:302:127:-;12704:5;12746:10;:6;12755:1;12746:10;:::i;:::-;12729:6;:13;:27;;12721:60;;;;-1:-1:-1;;;12721:60:127;;38440:2:132;12721:60:127;;;38422:21:132;38479:2;38459:18;;;38452:30;-1:-1:-1;;;38498:18:132;;;38491:49;38557:18;;12721:60:127;38238:343:132;12721:60:127;-1:-1:-1;12857:29:127;12873:3;12857:29;12851:36;;12627:302::o;12935:305::-;13013:6;13056:10;:6;13065:1;13056:10;:::i;:::-;13039:6;:13;:27;;13031:60;;;;-1:-1:-1;;;13031:60:127;;38788:2:132;13031:60:127;;;38770:21:132;38827:2;38807:18;;;38800:30;-1:-1:-1;;;38846:18:132;;;38839:50;38906:18;;13031:60:127;38586:344:132;13031:60:127;-1:-1:-1;13168:29:127;13184:3;13168:29;13162:36;;12935:305::o;9457:2804::-;9603:12;9655:7;9639:12;9655:7;9649:2;9639:12;:::i;:::-;:23;;9631:50;;;;-1:-1:-1;;;9631:50:127;;39137:2:132;9631:50:127;;;39119:21:132;39176:2;39156:18;;;39149:30;-1:-1:-1;;;39195:18:132;;;39188:44;39249:18;;9631:50:127;38935:338:132;9631:50:127;9716:16;9725:7;9716:6;:16;:::i;:::-;9699:6;:13;:33;;9691:63;;;;-1:-1:-1;;;9691:63:127;;39480:2:132;9691:63:127;;;39462:21:132;39519:2;39499:18;;;39492:30;-1:-1:-1;;;39538:18:132;;;39531:47;39595:18;;9691:63:127;39278:341:132;9691:63:127;9765:22;9828:15;;9856:1967;;;;11964:4;11958:11;11945:24;;12150:1;12139:9;12132:20;12198:4;12187:9;12183:20;12177:4;12170:34;9821:2397;;9856:1967;10038:4;10032:11;10019:24;;10697:2;10688:7;10684:16;11079:9;11072:17;11066:4;11062:28;11050:9;11039;11035:25;11031:60;11127:7;11123:2;11119:16;11379:6;11365:9;11358:17;11352:4;11348:28;11336:9;11328:6;11324:22;11320:57;11316:70;11153:425;11412:3;11408:2;11405:11;11153:425;;;11550:9;;11539:21;;11453:4;11445:13;;;;11485;11153:425;;;-1:-1:-1;;11596:26:127;;;11804:2;11787:11;-1:-1:-1;;11783:25:127;11777:4;11770:39;-1:-1:-1;9821:2397:127;-1:-1:-1;12245:9:127;9457:2804;-1:-1:-1;;;;9457:2804:127:o;3712:909:21:-;4037:7;:14;;4048:3;4037:14;4033:46;;4060:19;;-1:-1:-1;;;4060:19:21;;;;;;;;;;;4033:46;4089:15;4107:11;:7;4117:1;4107:11;:::i;:::-;4089:29;;4134:9;4129:486;4153:11;:18;4149:1;:22;4129:486;;;4192:11;4206;4218:1;4206:14;;;;;;;;:::i;:::-;;;;;;;4192:28;;4251:5;4238:18;;:9;:18;;;4234:371;;4310:11;4322:1;4310:14;;;;;;;;:::i;:::-;;;;;;;4326:11;4293:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;4276:11;4288:1;4276:14;;;;;;;;:::i;:::-;;;;;;:62;;;;4356:5;;;4234:371;4386:5;:10;;4395:1;4386:10;4382:223;;4512:9;4495:11;4507:1;4495:14;;;;;;;;:::i;:::-;;;;;;:26;;;;;;;;;;;4556:11;4539;4551:1;4539:14;;;;;;;;:::i;4382:223::-;-1:-1:-1;4173:3:21;;4129:486;;9264:218:125;9321:7;9352:17;9344:25;;9340:105;;;9392:42;;-1:-1:-1;;;9392:42:125;;9423:3;9392:42;;;39806:36:132;39858:18;;;39851:34;;;39779:18;;9392:42:125;39624:267:132;9340:105:125;-1:-1:-1;9469:5:125;9264:218::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:286:132;72:6;125:2;113:9;104:7;100:23;96:32;93:52;;;141:1;138;131:12;93:52;167:23;;-1:-1:-1;;;;;;219:32:132;;209:43;;199:71;;266:1;263;256:12;736:131;-1:-1:-1;;;;;811:31:132;;801:42;;791:70;;857:1;854;847:12;872:134;940:20;;969:31;940:20;969:31;:::i;:::-;872:134;;;:::o;1011:121::-;1096:10;1089:5;1085:22;1078:5;1075:33;1065:61;;1122:1;1119;1112:12;1137:132;1204:20;;1233:30;1204:20;1233:30;:::i;1274:386::-;1341:6;1349;1402:2;1390:9;1381:7;1377:23;1373:32;1370:52;;;1418:1;1415;1408:12;1370:52;1457:9;1444:23;1476:31;1501:5;1476:31;:::i;:::-;1526:5;-1:-1:-1;1583:2:132;1568:18;;1555:32;1596;1555;1596;:::i;:::-;1647:7;1637:17;;;1274:386;;;;;:::o;1868:265::-;1749:12;;1763:10;1745:29;1733:42;;1828:4;1817:16;;;1811:23;-1:-1:-1;;;;;1807:49:132;1791:14;;;1784:73;2064:2;2049:18;;2076:51;1665:198;2138:347;2289:2;2274:18;;2322:1;2311:13;;2301:144;;2367:10;2362:3;2358:20;2355:1;2348:31;2402:4;2399:1;2392:15;2430:4;2427:1;2420:15;2301:144;2454:25;;;2138:347;:::o;2490:456::-;2567:6;2575;2583;2636:2;2624:9;2615:7;2611:23;2607:32;2604:52;;;2652:1;2649;2642:12;2604:52;2691:9;2678:23;2710:31;2735:5;2710:31;:::i;:::-;2760:5;-1:-1:-1;2817:2:132;2802:18;;2789:32;2830:33;2789:32;2830:33;:::i;:::-;2490:456;;2882:7;;-1:-1:-1;;;2936:2:132;2921:18;;;;2908:32;;2490:456::o;2951:390::-;3037:8;3047:6;3101:3;3094:4;3086:6;3082:17;3078:27;3068:55;;3119:1;3116;3109:12;3068:55;-1:-1:-1;3142:20:132;;-1:-1:-1;;;;;3174:30:132;;3171:50;;;3217:1;3214;3207:12;3171:50;3254:4;3246:6;3242:17;3230:29;;3314:3;3307:4;3297:6;3294:1;3290:14;3282:6;3278:27;3274:38;3271:47;3268:67;;;3331:1;3328;3321:12;3346:629;3475:6;3483;3491;3544:2;3532:9;3523:7;3519:23;3515:32;3512:52;;;3560:1;3557;3550:12;3512:52;3599:9;3586:23;3618:31;3643:5;3618:31;:::i;:::-;3668:5;-1:-1:-1;3724:2:132;3709:18;;3696:32;-1:-1:-1;;;;;3740:30:132;;3737:50;;;3783:1;3780;3773:12;3737:50;3822:93;3907:7;3898:6;3887:9;3883:22;3822:93;:::i;:::-;3346:629;;3934:8;;-1:-1:-1;3796:119:132;;-1:-1:-1;;;;3346:629:132:o;3980:504::-;4110:6;4118;4171:2;4159:9;4150:7;4146:23;4142:32;4139:52;;;4187:1;4184;4177:12;4139:52;4227:9;4214:23;-1:-1:-1;;;;;4252:6:132;4249:30;4246:50;;;4292:1;4289;4282:12;4246:50;4331:93;4416:7;4407:6;4396:9;4392:22;4331:93;:::i;:::-;4443:8;;4305:119;;-1:-1:-1;3980:504:132;-1:-1:-1;;;;3980:504:132:o;4489:476::-;4553:3;4591:5;4585:12;4618:6;4613:3;4606:19;4644:4;4673;4668:3;4664:14;4657:21;;4712:4;4705:5;4701:16;4735:1;4745:195;4759:6;4756:1;4753:13;4745:195;;;4824:13;;-1:-1:-1;;;;;4820:39:132;4808:52;;4880:12;;;;4915:15;;;;4856:1;4774:9;4745:195;;;-1:-1:-1;4956:3:132;;4489:476;-1:-1:-1;;;;;4489:476:132:o;4970:684::-;-1:-1:-1;;;;;5062:5:132;5056:12;5052:37;5047:3;5040:50;5151:4;5143;5136:5;5132:16;5126:23;5122:34;5115:4;5110:3;5106:14;5099:58;5218:4;5210;5203:5;5199:16;5193:23;5189:34;5182:4;5177:3;5173:14;5166:58;5285:4;5277;5270:5;5266:16;5260:23;5256:34;5249:4;5244:3;5240:14;5233:58;5022:3;5337:4;5330:5;5326:16;5320:23;5375:4;5368;5363:3;5359:14;5352:28;5401:69;5464:4;5459:3;5455:14;5441:12;5401:69;:::i;:::-;5389:81;;5518:4;5511:5;5507:16;5501:23;5566:3;5560:4;5556:14;5549:4;5544:3;5540:14;5533:38;5587:61;5643:4;5627:14;5587:61;:::i;:::-;5580:68;4970:684;-1:-1:-1;;;;;4970:684:132:o;5659:264::-;5842:2;5831:9;5824:21;5805:4;5862:55;5913:2;5902:9;5898:18;5890:6;5862:55;:::i;5928:160::-;5993:20;;6049:13;;6042:21;6032:32;;6022:60;;6078:1;6075;6068:12;6093:923;6204:6;6212;6220;6228;6281:2;6269:9;6260:7;6256:23;6252:32;6249:52;;;6297:1;6294;6287:12;6249:52;6337:9;6324:23;-1:-1:-1;;;;;6407:2:132;6399:6;6396:14;6393:34;;;6423:1;6420;6413:12;6393:34;6446:22;;;;6502:3;6484:16;;;6480:26;6477:46;;;6519:1;6516;6509:12;6477:46;6542:2;;-1:-1:-1;6597:2:132;6582:18;;6569:32;;6613:16;;;6610:36;;;6642:1;6639;6632:12;6610:36;6680:8;6669:9;6665:24;6655:34;;6727:7;6720:4;6716:2;6712:13;6708:27;6698:55;;6749:1;6746;6739:12;6698:55;6789:2;6776:16;6815:2;6807:6;6804:14;6801:34;;;6831:1;6828;6821:12;6801:34;6876:7;6871:2;6862:6;6858:2;6854:15;6850:24;6847:37;6844:57;;;6897:1;6894;6887:12;6844:57;6928:2;6924;6920:11;6910:21;;6950:6;6940:16;;;;;6975:35;7006:2;6995:9;6991:18;6975:35;:::i;:::-;6965:45;;6093:923;;;;;;;:::o;7179:250::-;7264:1;7274:113;7288:6;7285:1;7282:13;7274:113;;;7364:11;;;7358:18;7345:11;;;7338:39;7310:2;7303:10;7274:113;;;-1:-1:-1;;7421:1:132;7403:16;;7396:27;7179:250::o;7434:270::-;7475:3;7513:5;7507:12;7540:6;7535:3;7528:19;7556:76;7625:6;7618:4;7613:3;7609:14;7602:4;7595:5;7591:16;7556:76;:::i;:::-;7686:2;7665:15;-1:-1:-1;;7661:29:132;7652:39;;;;7693:4;7648:50;;7434:270;-1:-1:-1;;7434:270:132:o;7709:372::-;7099:12;;7087:25;;7161:4;7150:16;;;7144:23;7128:14;;;7121:47;8011:2;8006;7995:9;7991:18;7984:30;7907:4;8031:44;8071:2;8060:9;8056:18;8048:6;8031:44;:::i;8949:245::-;9007:6;9060:2;9048:9;9039:7;9035:23;9031:32;9028:52;;;9076:1;9073;9066:12;9028:52;9115:9;9102:23;9134:30;9158:5;9134:30;:::i;9199:525::-;9274:6;9282;9290;9343:2;9331:9;9322:7;9318:23;9314:32;9311:52;;;9359:1;9356;9349:12;9311:52;9398:9;9385:23;9417:30;9441:5;9417:30;:::i;:::-;9466:5;-1:-1:-1;9523:2:132;9508:18;;9495:32;9536:33;9495:32;9536:33;:::i;:::-;9588:7;-1:-1:-1;9647:2:132;9632:18;;9619:32;9660;9619;9660;:::i;:::-;9711:7;9701:17;;;9199:525;;;;;:::o;9729:217::-;9876:2;9865:9;9858:21;9839:4;9896:44;9936:2;9925:9;9921:18;9913:6;9896:44;:::i;9951:666::-;10085:6;10093;10146:2;10134:9;10125:7;10121:23;10117:32;10114:52;;;10162:1;10159;10152:12;10114:52;10202:9;10189:23;-1:-1:-1;;;;;10272:2:132;10264:6;10261:14;10258:34;;;10288:1;10285;10278:12;10258:34;10326:6;10315:9;10311:22;10301:32;;10371:7;10364:4;10360:2;10356:13;10352:27;10342:55;;10393:1;10390;10383:12;10342:55;10433:2;10420:16;10459:2;10451:6;10448:14;10445:34;;;10475:1;10472;10465:12;10445:34;10531:7;10526:2;10518:4;10510:6;10506:17;10502:2;10498:26;10494:35;10491:48;10488:68;;;10552:1;10549;10542:12;10488:68;10583:2;10575:11;;;;;10605:6;;-1:-1:-1;9951:666:132;;-1:-1:-1;;;;9951:666:132:o;10622:180::-;10681:6;10734:2;10722:9;10713:7;10709:23;10705:32;10702:52;;;10750:1;10747;10740:12;10702:52;-1:-1:-1;10773:23:132;;10622:180;-1:-1:-1;10622:180:132:o;10807:261::-;7099:12;;7087:25;;7161:4;7150:16;;;7144:23;7128:14;;;7121:47;11001:2;10986:18;;11013:49;7021:153;11073:247;11132:6;11185:2;11173:9;11164:7;11160:23;11156:32;11153:52;;;11201:1;11198;11191:12;11153:52;11240:9;11227:23;11259:31;11284:5;11259:31;:::i;11507:315::-;11575:6;11583;11636:2;11624:9;11615:7;11611:23;11607:32;11604:52;;;11652:1;11649;11642:12;11604:52;11691:9;11678:23;11710:31;11735:5;11710:31;:::i;:::-;11760:5;11812:2;11797:18;;;;11784:32;;-1:-1:-1;;;11507:315:132:o;11827:251::-;11897:6;11950:2;11938:9;11929:7;11925:23;11921:32;11918:52;;;11966:1;11963;11956:12;11918:52;11998:9;11992:16;12017:31;12042:5;12017:31;:::i;12463:127::-;12524:10;12519:3;12515:20;12512:1;12505:31;12555:4;12552:1;12545:15;12579:4;12576:1;12569:15;12595:331;12695:4;12753:11;12740:25;12847:2;12843:7;12832:8;12816:14;12812:29;12808:43;12788:18;12784:68;12774:96;;12866:1;12863;12856:12;12774:96;12887:33;;;;;12595:331;-1:-1:-1;;12595:331:132:o;12931:521::-;13008:4;13014:6;13074:11;13061:25;13168:2;13164:7;13153:8;13137:14;13133:29;13129:43;13109:18;13105:68;13095:96;;13187:1;13184;13177:12;13095:96;13214:33;;13266:20;;;-1:-1:-1;;;;;;13298:30:132;;13295:50;;;13341:1;13338;13331:12;13295:50;13374:4;13362:17;;-1:-1:-1;13405:14:132;13401:27;;;13391:38;;13388:58;;;13442:1;13439;13432:12;13457:127;13518:10;13513:3;13509:20;13506:1;13499:31;13549:4;13546:1;13539:15;13573:4;13570:1;13563:15;13589:253;13661:2;13655:9;13703:4;13691:17;;-1:-1:-1;;;;;13723:34:132;;13759:22;;;13720:62;13717:88;;;13785:18;;:::i;:::-;13821:2;13814:22;13589:253;:::o;13847:::-;13919:2;13913:9;13961:4;13949:17;;-1:-1:-1;;;;;13981:34:132;;14017:22;;;13978:62;13975:88;;;14043:18;;:::i;14105:275::-;14176:2;14170:9;14241:2;14222:13;;-1:-1:-1;;14218:27:132;14206:40;;-1:-1:-1;;;;;14261:34:132;;14297:22;;;14258:62;14255:88;;;14323:18;;:::i;:::-;14359:2;14352:22;14105:275;;-1:-1:-1;14105:275:132:o;14385:649::-;14475:6;14528:2;14516:9;14507:7;14503:23;14499:32;14496:52;;;14544:1;14541;14534:12;14496:52;14577:2;14571:9;14619:2;14611:6;14607:15;14688:6;14676:10;14673:22;-1:-1:-1;;;;;14640:10:132;14637:34;14634:62;14631:88;;;14699:18;;:::i;:::-;14735:2;14728:22;14772:23;;14804:30;14772:23;14804:30;:::i;:::-;14843:21;;14916:2;14901:18;;14888:32;14929:33;14888:32;14929:33;:::i;:::-;14990:2;14978:15;;14971:32;14982:6;14385:649;-1:-1:-1;;;14385:649:132:o;15039:171::-;15106:20;;-1:-1:-1;;;;;15155:30:132;;15145:41;;15135:69;;15200:1;15197;15190:12;15215:156;15281:20;;15341:4;15330:16;;15320:27;;15310:55;;15361:1;15358;15351:12;15376:787;15430:5;15483:3;15476:4;15468:6;15464:17;15460:27;15450:55;;15501:1;15498;15491:12;15450:55;15537:6;15524:20;15563:4;-1:-1:-1;;;;;15582:2:132;15579:26;15576:52;;;15608:18;;:::i;:::-;15654:2;15651:1;15647:10;15677:28;15701:2;15697;15693:11;15677:28;:::i;:::-;15739:15;;;15809;;;15805:24;;;15770:12;;;;15841:15;;;15838:35;;;15869:1;15866;15859:12;15838:35;15905:2;15897:6;15893:15;15882:26;;15917:217;15933:6;15928:3;15925:15;15917:217;;;16013:3;16000:17;16030:31;16055:5;16030:31;:::i;:::-;16074:18;;15950:12;;;;16112;;;;15917:217;;;16152:5;15376:787;-1:-1:-1;;;;;;;15376:787:132:o;16168:854::-;16224:5;16272:4;16260:9;16255:3;16251:19;16247:30;16244:50;;;16290:1;16287;16280:12;16244:50;16312:22;;:::i;:::-;16303:31;;16357:28;16375:9;16357:28;:::i;:::-;16350:5;16343:43;16418:36;16450:2;16439:9;16435:18;16418:36;:::i;:::-;16413:2;16406:5;16402:14;16395:60;16487:36;16519:2;16508:9;16504:18;16487:36;:::i;:::-;16482:2;16475:5;16471:14;16464:60;16556:36;16588:2;16577:9;16573:18;16556:36;:::i;:::-;16551:2;16544:5;16540:14;16533:60;16644:3;16633:9;16629:19;16616:33;-1:-1:-1;;;;;16709:2:132;16701:6;16698:14;16695:34;;;16725:1;16722;16715:12;16695:34;16762:57;16815:3;16806:6;16795:9;16791:22;16762:57;:::i;:::-;16756:3;16749:5;16745:15;16738:82;16873:3;16862:9;16858:19;16845:33;16829:49;;16903:2;16893:8;16890:16;16887:36;;;16919:1;16916;16909:12;16887:36;;16956:59;17011:3;17000:8;16989:9;16985:24;16956:59;:::i;:::-;16950:3;16943:5;16939:15;16932:84;;16168:854;;;;:::o;17027:349::-;17113:6;17166:2;17154:9;17145:7;17141:23;17137:32;17134:52;;;17182:1;17179;17172:12;17134:52;17222:9;17209:23;-1:-1:-1;;;;;17247:6:132;17244:30;17241:50;;;17287:1;17284;17277:12;17241:50;17310:60;17362:7;17353:6;17342:9;17338:22;17310:60;:::i;17578:341::-;17688:4;17746:11;17733:25;17840:2;17836:7;17825:8;17809:14;17805:29;17801:43;17781:18;17777:68;17767:96;;17859:1;17856;17849:12;17924:327;18019:4;18077:11;18064:25;18171:3;18167:8;18156;18140:14;18136:29;18132:44;18112:18;18108:69;18098:97;;18191:1;18188;18181:12;18256:182;18313:6;18366:2;18354:9;18345:7;18341:23;18337:32;18334:52;;;18382:1;18379;18372:12;18334:52;18405:27;18422:9;18405:27;:::i;18443:184::-;18501:6;18554:2;18542:9;18533:7;18529:23;18525:32;18522:52;;;18570:1;18567;18560:12;18522:52;18593:28;18611:9;18593:28;:::i;18632:199::-;18738:9;18775:50;18810:14;18803:5;18775:50;:::i;18836:520::-;18906:5;18913:6;18973:3;18960:17;19059:2;19055:7;19044:8;19028:14;19024:29;19020:43;19000:18;18996:68;18986:96;;19078:1;19075;19068:12;18986:96;19106:33;;19210:4;19197:18;;;-1:-1:-1;19158:21:132;;-1:-1:-1;;;;;;19227:30:132;;19224:50;;;19270:1;19267;19260:12;19224:50;19324:6;19321:1;19317:14;19301;19297:35;19290:5;19286:47;19283:67;;;19346:1;19343;19336:12;19361:524;19461:6;19456:3;19449:19;19431:3;19487:4;19516;19511:3;19507:14;19500:21;;19544:5;19567:1;19577:283;19591:6;19588:1;19585:13;19577:283;;;19668:6;19655:20;19688:33;19713:7;19688:33;:::i;:::-;-1:-1:-1;;;;;19746:33:132;19734:46;;19800:12;;;;19835:15;;;;19776:1;19606:9;19577:283;;19890:2626;20157:2;20209:21;;;20182:18;;;20265:22;;;20128:4;;20306:2;20324:18;;;20388:1;20384:14;;;20369:30;;20365:39;;20427:6;20128:4;20461:2026;20475:6;20472:1;20469:13;20461:2026;;;20538:2;20534:7;20594:2;20582:9;20574:6;20570:22;20566:31;20561:3;20554:44;20650:6;20637:20;20741:2;20737:7;20728:6;20712:14;20708:27;20704:41;20684:18;20680:66;20670:94;;20760:1;20757;20750:12;20670:94;20790:31;;20849:19;;20881:32;20849:19;20881:32;:::i;:::-;20954:10;20941:24;20926:40;;21020:14;;;21007:28;21092:14;21088:26;;;-1:-1:-1;;21084:41:132;21058:68;;21048:96;;21140:1;21137;21130:12;21048:96;21224:15;;;21217:27;;;21172:32;-1:-1:-1;;;;;21285:26:132;21172:32;21285:26;:::i;:::-;21281:51;21276:2;21268:6;21264:15;21257:76;21366:34;21396:2;21387:7;21383:16;21366:34;:::i;:::-;21423:2;21448:4;21507:2;21493:12;21489:21;21484:2;21476:6;21472:15;21465:46;21546:34;21576:2;21567:7;21563:16;21546:34;:::i;:::-;21524:56;;21603:3;21663:2;21647:14;21643:23;21638:2;21630:6;21626:15;21619:48;21702:34;21732:2;21723:7;21719:16;21702:34;:::i;:::-;21680:56;;21759:3;21749:13;;21819:2;21803:14;21799:23;21794:2;21786:6;21782:15;21775:48;21872:69;21937:2;21928:7;21924:16;21915:7;21872:69;:::i;:::-;21964:4;21988:15;;;21981:27;21836:105;-1:-1:-1;21836:105:132;-1:-1:-1;22035:85:132;;-1:-1:-1;22115:3:132;22103:16;;21836:105;;22035:85;:::i;:::-;22021:99;;;22171:69;22236:2;22227:7;22223:16;22214:7;22171:69;:::i;:::-;22133:107;;;;22303:2;22294:6;22286;22282:19;22278:28;22272:3;22264:6;22260:16;22253:54;22330:77;22400:6;22384:14;22368;22330:77;:::i;:::-;22465:12;;;;22320:87;-1:-1:-1;;;22430:15:132;;;;-1:-1:-1;;20497:1:132;20490:9;20461:2026;;;-1:-1:-1;22504:6:132;;19890:2626;-1:-1:-1;;;;;;;;19890:2626:132:o;22521:539::-;22724:2;22713:9;22706:21;22687:4;22750:44;22790:2;22779:9;22775:18;22767:6;22750:44;:::i;:::-;22842:9;22834:6;22830:22;22825:2;22814:9;22810:18;22803:50;22877:6;22869;22862:22;22931:6;22923;22918:2;22910:6;22906:15;22893:45;22984:1;22979:2;22970:6;22962;22958:19;22954:28;22947:39;23051:2;23044;23040:7;23035:2;23027:6;23023:15;23019:29;23011:6;23007:42;23003:51;22995:59;;;22521:539;;;;;;:::o;23065:579::-;23242:5;23229:19;23257:32;23281:7;23257:32;:::i;:::-;23321:10;23312:7;23308:24;23298:34;;23357:4;23351:11;23413:2;23399:10;23395:15;23391:2;23387:24;23384:32;23378:4;23371:46;23465:2;23458:5;23454:14;23441:28;23478:33;23503:7;23478:33;:::i;:::-;-1:-1:-1;;;;;;23539:37:132;;;;23536:45;;;23591:2;23587:16;;;;-1:-1:-1;;;;;23583:53:132;23533:104;23520:118;;-1:-1:-1;23065:579:132:o;23649:1186::-;23924:2;23976:21;;;23949:18;;;24032:22;;;23895:4;;24073:2;24091:18;;;24132:6;23895:4;24166:643;24180:6;24177:1;24174:13;24166:643;;;24255:6;24242:20;24275:30;24299:5;24275:30;:::i;:::-;24328:10;24363:14;;;24351:27;;24419:15;;;24406:29;;24448:32;24406:29;24448:32;:::i;:::-;24514:16;24500:12;;;24493:38;24572:15;;;24559:29;24601:33;24559:29;24601:33;:::i;:::-;-1:-1:-1;;;;;24668:33:132;24654:12;;;24647:55;24725:4;24749:12;;;;24784:15;;;;;24698:1;24195:9;24166:643;;;-1:-1:-1;24826:3:132;;23649:1186;-1:-1:-1;;;;;;;23649:1186:132:o;25093:449::-;-1:-1:-1;;;;;25374:32:132;;25356:51;;25455:10;25443:23;;25438:2;25423:18;;25416:51;25343:3;25328:19;;25476:60;25532:2;25517:18;;25509:6;1749:12;;1763:10;1745:29;1733:42;;1828:4;1817:16;;;1811:23;-1:-1:-1;;;;;1807:49:132;1791:14;;1784:73;1665:198;25547:447;-1:-1:-1;;;;;25784:32:132;;25766:51;;25865:10;25853:23;;25848:2;25833:18;;25826:51;25913:2;25908;25893:18;;25886:30;;;-1:-1:-1;;25933:55:132;;25969:18;;25961:6;25933:55;:::i;25999:127::-;26060:10;26055:3;26051:20;26048:1;26041:31;26091:4;26088:1;26081:15;26115:4;26112:1;26105:15;26131:151;26221:4;26214:12;;;26200;;;26196:31;;26239:14;;26236:40;;;26256:18;;:::i;26287:262::-;26325:1;26359:4;26356:1;26352:12;26383:3;26373:134;;26429:10;26424:3;26420:20;26417:1;26410:31;26464:4;26461:1;26454:15;26492:4;26489:1;26482:15;26373:134;26539:3;26532:4;26529:1;26525:12;26521:22;26516:27;;;26287:262;;;;:::o;26554:125::-;26619:9;;;26640:10;;;26637:36;;;26653:18;;:::i;26684:473::-;26925:10;26917:6;26913:23;26902:9;26895:42;27002:1;26998;26993:3;26989:11;26985:19;26977:6;26973:32;26968:2;26957:9;26953:18;26946:60;27042:6;27037:2;27026:9;27022:18;27015:34;27085:3;27080:2;27069:9;27065:18;27058:31;26876:4;27106:45;27146:3;27135:9;27131:19;27123:6;27106:45;:::i;:::-;27098:53;26684:473;-1:-1:-1;;;;;;26684:473:132:o;27162:184::-;27232:6;27285:2;27273:9;27264:7;27260:23;27256:32;27253:52;;;27301:1;27298;27291:12;27253:52;-1:-1:-1;27324:16:132;;27162:184;-1:-1:-1;27162:184:132:o;28287:530::-;28329:5;28382:3;28375:4;28367:6;28363:17;28359:27;28349:55;;28400:1;28397;28390:12;28349:55;28436:6;28423:20;-1:-1:-1;;;;;28458:2:132;28455:26;28452:52;;;28484:18;;:::i;:::-;28528:55;28571:2;28552:13;;-1:-1:-1;;28548:27:132;28577:4;28544:38;28528:55;:::i;:::-;28608:2;28599:7;28592:19;28654:3;28647:4;28642:2;28634:6;28630:15;28626:26;28623:35;28620:55;;;28671:1;28668;28661:12;28620:55;28736:2;28729:4;28721:6;28717:17;28710:4;28701:7;28697:18;28684:55;28784:1;28759:16;;;28777:4;28755:27;28748:38;;;;28763:7;28287:530;-1:-1:-1;;;28287:530:132:o;28822:846::-;28922:9;28981:4;28973:5;28957:14;28953:26;28949:37;28946:57;;;28999:1;28996;28989:12;28946:57;29027:22;;:::i;:::-;29074:24;29092:5;29074:24;:::i;:::-;29065:7;29058:41;29133:33;29162:2;29155:5;29151:14;29133:33;:::i;:::-;29128:2;29119:7;29115:16;29108:59;29201:34;29231:2;29224:5;29220:14;29201:34;:::i;:::-;29196:2;29187:7;29183:16;29176:60;29270:33;29299:2;29292:5;29288:14;29270:33;:::i;:::-;29265:2;29256:7;29252:16;29245:59;29363:3;29356:5;29352:15;29339:29;29333:3;29324:7;29320:17;29313:56;29428:3;29421:5;29417:15;29404:29;29398:3;29389:7;29385:17;29378:56;29481:3;29474:5;29470:15;29457:29;-1:-1:-1;;;;;29501:6:132;29498:30;29495:50;;;29541:1;29538;29531:12;29495:50;29580:52;29617:14;29608:6;29601:5;29597:18;29580:52;:::i;:::-;29574:3;29561:17;;29554:79;-1:-1:-1;29565:7:132;28822:846;-1:-1:-1;;28822:846:132:o;29673:492::-;29848:3;29886:6;29880:13;29902:66;29961:6;29956:3;29949:4;29941:6;29937:17;29902:66;:::i;:::-;30031:13;;29990:16;;;;30053:70;30031:13;29990:16;30100:4;30088:17;;30053:70;:::i;:::-;30139:20;;29673:492;-1:-1:-1;;;;29673:492:132:o;30640:1008::-;30975:2;30964:9;30957:21;30938:4;31001:56;31053:2;31042:9;31038:18;31030:6;31001:56;:::i;:::-;31076:2;31126:9;31118:6;31114:22;31109:2;31098:9;31094:18;31087:50;31160:44;31197:6;31189;31160:44;:::i;:::-;31240:22;;;31235:2;31220:18;;31213:50;31312:13;;31334:22;;;31384:2;31410:15;;;;-1:-1:-1;31372:15:132;;;;31443:1;31453:169;31467:6;31464:1;31461:13;31453:169;;;31528:13;;31516:26;;31597:15;;;;31562:12;;;;31489:1;31482:9;31453:169;;31843:331;31948:9;31959;32001:8;31989:10;31986:24;31983:44;;;32023:1;32020;32013:12;31983:44;32052:6;32042:8;32039:20;32036:40;;;32072:1;32069;32062:12;32036:40;-1:-1:-1;;32098:23:132;;;32143:25;;;;;-1:-1:-1;31843:331:132:o;32179:318::-;-1:-1:-1;;;;;;32299:19:132;;32370:11;;;;32401:1;32393:10;;32390:101;;;32478:2;32472;32465:3;32462:1;32458:11;32455:1;32451:19;32447:28;32443:2;32439:37;32435:46;32426:55;;32390:101;;;32179:318;;;;:::o;32502:316::-;-1:-1:-1;;;;;;32622:19:132;;32691:11;;;;32722:1;32714:10;;32711:101;;;32783:1;32779:11;;;;32776:1;32772:19;32768:28;;;32760:37;32756:46;;;;32502:316;-1:-1:-1;;32502:316:132:o;33022:148::-;33110:4;33089:12;;;33103;;;33085:31;;33128:13;;33125:39;;;33144:18;;:::i;33175:496::-;33414:10;33402:23;;33384:42;;-1:-1:-1;;;;;33462:31:132;;33457:2;33442:18;;33435:59;-1:-1:-1;;;;;33530:32:132;;33525:2;33510:18;;33503:60;33599:3;33594:2;33579:18;;33572:31;;;-1:-1:-1;;33620:45:132;;33645:19;;33637:6;33620:45;:::i;34328:359::-;34515:6;34510:3;34503:19;34485:3;34551:6;34545:13;34567:73;34633:6;34628:2;34623:3;34619:12;34614:2;34606:6;34602:15;34567:73;:::i;:::-;34660:16;;;;34678:2;34656:25;;34328:359;-1:-1:-1;;;34328:359:132:o;34692:826::-;34931:2;34920:9;34913:21;34989:10;34980:6;34974:13;34970:30;34965:2;34954:9;34950:18;34943:58;34894:4;35048;35040:6;35036:17;35030:24;35090:4;35085:2;35074:9;35070:18;35063:32;35118:51;35164:3;35153:9;35149:19;35135:12;35118:51;:::i;:::-;35224:2;35212:15;;35206:22;35200:3;35185:19;;;35178:51;;;;35289:2;35277:15;;35271:22;-1:-1:-1;;;;;35267:47:132;35260:4;35245:20;;35238:77;35362:16;;35356:23;-1:-1:-1;;;;;35352:49:132;35346:3;35331:19;;35324:78;35440:22;;;35433:4;35418:20;;35411:52;35104:65;-1:-1:-1;35480:32:132;35104:65;35497:6;35480:32;:::i;35523:470::-;35708:3;35746:6;35740:13;35762:66;35821:6;35816:3;35809:4;35801:6;35797:17;35762:66;:::i;:::-;35850:16;;35903:6;35895;35850:16;35875:35;35967:1;35929:18;;35956:13;;;-1:-1:-1;35929:18:132;;35523:470;-1:-1:-1;;;35523:470:132:o;36187:255::-;36307:19;;36346:2;36338:11;;36335:101;;;-1:-1:-1;;36407:2:132;36403:12;;;36400:1;36396:20;36392:33;36381:45;36187:255;;;;:::o;37113:927::-;37460:3;37494:16;;;-1:-1:-1;;;;;;37490:25:132;;;37478:38;;37539:3;37583:16;;;-1:-1:-1;;;;;;37579:25:132;;;37575:1;37566:11;;37559:46;37638:16;;;37634:25;;37630:1;37621:11;;37614:46;37697:3;37693:16;;;-1:-1:-1;;;;;;37689:62:132;37685:1;37676:11;;37669:83;37786:16;;;37782:25;;37777:2;37768:12;;37761:47;37842:16;;;;37838:25;37833:2;37824:12;;37817:47;37898:16;;;;37894:25;37889:2;37880:12;;37873:47;37428:3;37929:40;37965:2;37956:12;;37948:6;36521:3;36517:15;-1:-1:-1;;;;;;36513:61:132;36501:74;;36447:134;37929:40;-1:-1:-1;37994:2:132;37985:12;;37978:28;;;;38031:2;38022:12;;37113:927;-1:-1:-1;;;;;;;;37113:927:132:o", - "linkReferences": {}, - "immutableReferences": { - "161": [ - { "start": 7440, "length": 32 }, - { "start": 7795, "length": 32 } - ], - "4": [ - { "start": 1690, "length": 32 }, - { "start": 1951, "length": 32 }, - { "start": 4785, "length": 32 }, - { "start": 6105, "length": 32 } - ] - } - }, - "methodIdentifiers": { - "executorConfigs(address,uint32)": "4d963200", - "fees(address)": "faaebd21", - "getAppUlnConfig(address,uint32)": "39e3f938", - "getConfig(uint32,address,uint32)": "9c33abf7", - "getExecutorConfig(address,uint32)": "188183f4", - "getUlnConfig(address,uint32)": "43ea4fa9", - "isSupportedEid(uint32)": "6750cd4c", - "messageLibType()": "1881d94d", - "owner()": "8da5cb5b", - "quote((uint64,uint32,address,uint32,bytes32,bytes32,bytes),bytes,bool)": "d80e9bd9", - "renounceOwnership()": "715018a6", - "send((uint64,uint32,address,uint32,bytes32,bytes32,bytes),bytes,bool)": "4389e58f", - "setConfig(address,(uint32,uint32,bytes)[])": "20efd722", - "setDefaultExecutorConfigs((uint32,(uint32,address))[])": "c14c4349", - "setDefaultUlnConfigs((uint32,(uint64,uint8,uint8,uint8,address[],address[]))[])": "29460b0b", - "setTreasury(address)": "f0f44260", - "setTreasuryNativeFeeCap(uint256)": "d15b0d49", - "supportsInterface(bytes4)": "01ffc9a7", - "testHelper()": "0e97289b", - "transferOwnership(address)": "f2fde38b", - "treasury()": "61d027b3", - "version()": "54fd4d50", - "withdrawFee(address,uint256)": "fd9be522", - "withdrawLzTokenFee(address,address,uint256)": "200175f7" - }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"_verifyHelper\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_endpoint\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_treasuryGasCap\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_treasuryGasForFeeCap\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"DVN_InvalidDVNIdx\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"cursor\",\"type\":\"uint256\"}],\"name\":\"DVN_InvalidDVNOptions\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_MessageLib_CannotWithdrawAltToken\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"requested\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"available\",\"type\":\"uint256\"}],\"name\":\"LZ_MessageLib_InvalidAmount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_MessageLib_InvalidExecutor\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"actual\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"max\",\"type\":\"uint256\"}],\"name\":\"LZ_MessageLib_InvalidMessageSize\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_MessageLib_NotTreasury\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_MessageLib_OnlyEndpoint\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_MessageLib_TransferFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_MessageLib_ZeroMessageSize\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_ULN_AtLeastOneDVN\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"configType\",\"type\":\"uint32\"}],\"name\":\"LZ_ULN_InvalidConfigType\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_ULN_InvalidConfirmations\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_ULN_InvalidLegacyType1Option\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_ULN_InvalidLegacyType2Option\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_ULN_InvalidOptionalDVNCount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_ULN_InvalidOptionalDVNThreshold\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_ULN_InvalidRequiredDVNCount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"workerId\",\"type\":\"uint8\"}],\"name\":\"LZ_ULN_InvalidWorkerId\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"cursor\",\"type\":\"uint256\"}],\"name\":\"LZ_ULN_InvalidWorkerOptions\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_ULN_Unsorted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"}],\"name\":\"LZ_ULN_UnsupportedEid\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"optionType\",\"type\":\"uint16\"}],\"name\":\"LZ_ULN_UnsupportedOptionType\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"bits\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"SafeCastOverflowedUintDowncast\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"Transfer_NativeFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Transfer_ToAddressIsZero\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"requiredDVNs\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"optionalDVNs\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"fees\",\"type\":\"uint256[]\"}],\"name\":\"DVNFeePaid\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"maxMessageSize\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"executor\",\"type\":\"address\"}],\"internalType\":\"struct ExecutorConfig\",\"name\":\"config\",\"type\":\"tuple\"}],\"indexed\":false,\"internalType\":\"struct SetDefaultExecutorConfigParam[]\",\"name\":\"params\",\"type\":\"tuple[]\"}],\"name\":\"DefaultExecutorConfigsSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"confirmations\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"requiredDVNCount\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"optionalDVNCount\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"optionalDVNThreshold\",\"type\":\"uint8\"},{\"internalType\":\"address[]\",\"name\":\"requiredDVNs\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"optionalDVNs\",\"type\":\"address[]\"}],\"internalType\":\"struct UlnConfig\",\"name\":\"config\",\"type\":\"tuple\"}],\"indexed\":false,\"internalType\":\"struct SetDefaultUlnConfigParam[]\",\"name\":\"params\",\"type\":\"tuple[]\"}],\"name\":\"DefaultUlnConfigsSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oapp\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"maxMessageSize\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"executor\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"struct ExecutorConfig\",\"name\":\"config\",\"type\":\"tuple\"}],\"name\":\"ExecutorConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"executor\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"}],\"name\":\"ExecutorFeePaid\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"lzToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"LzTokenFeeWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"worker\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"NativeFeeWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newTreasuryNativeFeeCap\",\"type\":\"uint256\"}],\"name\":\"TreasuryNativeFeeCapSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"treasury\",\"type\":\"address\"}],\"name\":\"TreasurySet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oapp\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"confirmations\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"requiredDVNCount\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"optionalDVNCount\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"optionalDVNThreshold\",\"type\":\"uint8\"},{\"internalType\":\"address[]\",\"name\":\"requiredDVNs\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"optionalDVNs\",\"type\":\"address[]\"}],\"indexed\":false,\"internalType\":\"struct UlnConfig\",\"name\":\"config\",\"type\":\"tuple\"}],\"name\":\"UlnConfigSet\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"oapp\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"}],\"name\":\"executorConfigs\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"maxMessageSize\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"executor\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"worker\",\"type\":\"address\"}],\"name\":\"fees\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_oapp\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_remoteEid\",\"type\":\"uint32\"}],\"name\":\"getAppUlnConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"confirmations\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"requiredDVNCount\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"optionalDVNCount\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"optionalDVNThreshold\",\"type\":\"uint8\"},{\"internalType\":\"address[]\",\"name\":\"requiredDVNs\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"optionalDVNs\",\"type\":\"address[]\"}],\"internalType\":\"struct UlnConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"_oapp\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_configType\",\"type\":\"uint32\"}],\"name\":\"getConfig\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_oapp\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_remoteEid\",\"type\":\"uint32\"}],\"name\":\"getExecutorConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"maxMessageSize\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"executor\",\"type\":\"address\"}],\"internalType\":\"struct ExecutorConfig\",\"name\":\"rtnConfig\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_oapp\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_remoteEid\",\"type\":\"uint32\"}],\"name\":\"getUlnConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"confirmations\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"requiredDVNCount\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"optionalDVNCount\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"optionalDVNThreshold\",\"type\":\"uint8\"},{\"internalType\":\"address[]\",\"name\":\"requiredDVNs\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"optionalDVNs\",\"type\":\"address[]\"}],\"internalType\":\"struct UlnConfig\",\"name\":\"rtnConfig\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"}],\"name\":\"isSupportedEid\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"messageLibType\",\"outputs\":[{\"internalType\":\"enum MessageLibType\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"receiver\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"internalType\":\"struct Packet\",\"name\":\"_packet\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"_options\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"_payInLzToken\",\"type\":\"bool\"}],\"name\":\"quote\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nativeFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lzTokenFee\",\"type\":\"uint256\"}],\"internalType\":\"struct MessagingFee\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"receiver\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"internalType\":\"struct Packet\",\"name\":\"_packet\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"_options\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"_payInLzToken\",\"type\":\"bool\"}],\"name\":\"send\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nativeFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lzTokenFee\",\"type\":\"uint256\"}],\"internalType\":\"struct MessagingFee\",\"name\":\"fee\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"encodedPacket\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_oapp\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"configType\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"config\",\"type\":\"bytes\"}],\"internalType\":\"struct SetConfigParam[]\",\"name\":\"_params\",\"type\":\"tuple[]\"}],\"name\":\"setConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"maxMessageSize\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"executor\",\"type\":\"address\"}],\"internalType\":\"struct ExecutorConfig\",\"name\":\"config\",\"type\":\"tuple\"}],\"internalType\":\"struct SetDefaultExecutorConfigParam[]\",\"name\":\"_params\",\"type\":\"tuple[]\"}],\"name\":\"setDefaultExecutorConfigs\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"confirmations\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"requiredDVNCount\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"optionalDVNCount\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"optionalDVNThreshold\",\"type\":\"uint8\"},{\"internalType\":\"address[]\",\"name\":\"requiredDVNs\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"optionalDVNs\",\"type\":\"address[]\"}],\"internalType\":\"struct UlnConfig\",\"name\":\"config\",\"type\":\"tuple\"}],\"internalType\":\"struct SetDefaultUlnConfigParam[]\",\"name\":\"_params\",\"type\":\"tuple[]\"}],\"name\":\"setDefaultUlnConfigs\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_treasury\",\"type\":\"address\"}],\"name\":\"setTreasury\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newTreasuryNativeFeeCap\",\"type\":\"uint256\"}],\"name\":\"setTreasuryNativeFeeCap\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"_interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"testHelper\",\"outputs\":[{\"internalType\":\"contract TestHelperOz5\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"treasury\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"major\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"minor\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"endpointVersion\",\"type\":\"uint8\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"withdrawFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_lzToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"withdrawLzTokenFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"errors\":{\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}],\"SafeCastOverflowedUintDowncast(uint8,uint256)\":[{\"details\":\"Value doesn't fit in an uint of `bits` size.\"}],\"SafeERC20FailedOperation(address)\":[{\"details\":\"An operation with an ERC-20 token failed.\"}]},\"kind\":\"dev\",\"methods\":{\"getAppUlnConfig(address,uint32)\":{\"details\":\"Get the uln config without the default config for the given remoteEid.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"setDefaultUlnConfigs((uint32,(uint64,uint8,uint8,uint8,address[],address[]))[])\":{\"details\":\"about the DEFAULT ULN config 1) its values are all LITERAL (e.g. 0 is 0). whereas in the oapp ULN config, 0 (default value) points to the default ULN config this design enables the oapp to point to DEFAULT config without explicitly setting the config 2) its configuration is more restrictive than the oapp ULN config that a) it must not use NIL value, where NIL is used only by oapps to indicate the LITERAL 0 b) it must have at least one DVN\"},\"setTreasuryNativeFeeCap(uint256)\":{\"details\":\"the new value can not be greater than the old value, i.e. down only\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"withdrawFee(address,uint256)\":{\"details\":\"E2 only\"},\"withdrawLzTokenFee(address,address,uint256)\":{\"details\":\"_lzToken is a user-supplied value because lzToken might change in the endpoint before all lzToken can be taken outE2 onlytreasury only function\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/SendUln302Mock.sol\":\"SendUln302Mock\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/MessageLibBase.sol\":{\"keccak256\":\"0x14899a4398251439938d6ef8a15ea8c6acdddc98a7b0066d7e63676192dea0d1\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://3998d03de7025c2c601a4fdcaf9475d12a1ef661fcf1a685ece84fdde6498cf9\",\"dweb:/ipfs/QmReknRbiGAiPqq9toKyXKo6hUKXrQPJyyS6LnTGjiDKoY\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/ReceiveLibBaseE2.sol\":{\"keccak256\":\"0x2fdbd1b13751a264cd6e7fac518a2685b15c968806c03f1d18b177fc0526e9a9\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://600af48bb67939b5f4a3a00c76863ee290a55325ea8697f7cc4b46321ab26ef2\",\"dweb:/ipfs/QmdRigYaB6TXczjtVkvwpUEBwvvvDuymFoViMCB6xQPYUU\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/SendLibBase.sol\":{\"keccak256\":\"0x400eaa11c7d50b4c25b7625290ff00937b6875ad3986b353c37a4e62b5a834b1\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://1f51eb0785d3630815a9d63de1c1331fe966df4c3f2fb6750b8da7be9e9743a4\",\"dweb:/ipfs/QmaAEf1kjhhff3AUhRiPm6ikpk2YMMrpKc2ccYzNs7waBy\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/SendLibBaseE2.sol\":{\"keccak256\":\"0x90ada11d0a330732c56b989e59c8272b70f956a5d7be2cf209d6d51a51d35a9e\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://0abc7a6d07ec40a3a922256ad05bdd6eca10550d85bfd2e67147473617bb0497\",\"dweb:/ipfs/QmRDphmFhx1scRJXcusg6pUhVQvp941oCJwnHGAPdrNY4T\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IExecutor.sol\":{\"keccak256\":\"0x2fd26e454b060ede7afa15f8bbc67bd43f9181b6405ca411d36c8b538be016af\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cf2142e83214bb392f69ed14266718cfd803f849a7239ee9a1950ddf66553696\",\"dweb:/ipfs/QmSZ2mPMZqWBetMU8VESKtxy7UdSThUVmJmTFMHEyKLTGZ\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IExecutorFeeLib.sol\":{\"keccak256\":\"0x801d12eca6d6b232fb91d949cdb70a4c547c5e27e73555f2f1eb9e757c639bcc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b61bdffe26ff3902edab3efb0b5af3808ec9e28d72db95b77128502b9bc7638d\",\"dweb:/ipfs/Qmcyf3npDDEq28b9XqmXgSGyQegj2cxUZQ3UekSNf34g8M\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroExecutor.sol\":{\"keccak256\":\"0x3647af317ee126b1247a782abb30e59ec5ab21b4945f1d3b4370d1fa3c1bf347\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5b51cd5e7347ee869a06bd57a698f40e4a901ec7fdcb27f0ef485e4a0e1e9be4\",\"dweb:/ipfs/QmP2Nc73veRzLGdUahkjhQAiKR9ZWYiUtSGwoMB1sPXxUp\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroPriceFeed.sol\":{\"keccak256\":\"0xb4df72798a64f5ea44775b526e0c417c3de0ffc661659d7b31d5b28567c6fbcc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://30ca5fd5e3227a7bffc51654ee3bfebdd591a131f86846ac42dea8a40c5cf1d8\",\"dweb:/ipfs/QmXNmQCF8TZAFpUxgPa1rgWt4ktsBV38A8Hax7TiYLgybW\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroReadExecutor.sol\":{\"keccak256\":\"0x360936885f173f816ffb47e555d480928e74eb1ad54a76af0f4595ecba2d5657\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://16b5095e6439b1e416eb70571a1dd8f4f21a0d77b19c9e510ca289d99e5e09ab\",\"dweb:/ipfs/QmZ2mjQDQ35gJseyzmQhik4cBgN2ESADzofFNVFvgS64hv\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroTreasury.sol\":{\"keccak256\":\"0x2aab2a3cf50e20af56d9204b1367d52a47abba0b0c7c21f304d413de1ced6345\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f8b603b5e5e62c621715f8449280af240a4add8721c4ae8f5e8e491507f6e4c5\",\"dweb:/ipfs/QmUQ7Ti7CPmKnRbQFN9TLvVbeZhsi1xUjqZPTJ36dCZ6y8\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IWorker.sol\":{\"keccak256\":\"0xa6b61913767305227576cc6da5067de4208f09a4f58bfbfe32beafdfae9869b1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7fce83bfb831f383606aee7f5ff68a330c8526bb1036f9ba0813d3e4fa8d534\",\"dweb:/ipfs/QmR7zAqJkmCgBj6sguS8t2WthY5k6FwsakgH4UY11uqD4n\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/libs/ExecutorOptions.sol\":{\"keccak256\":\"0x441b723f2f597be2ec2bb361fcf3f11852c23534db1cfa7d2ffff7e61d228e3c\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://636817d20f90f75032e35376256cf5f4d2a047d6541b45f644d82a2e4dc8f1eb\",\"dweb:/ipfs/QmcEFRxCmmm9hKbqi7Powj6ATbw4JXXJW4rxfwMcxWsDnT\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/libs/SafeCall.sol\":{\"keccak256\":\"0xc3b7b7927472f7c1ca9703af310e9050c798afaccf399ad0f131e179b8582c8d\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://e5be13af32ff6b371985d405bc6fe8ac2faf5445bd88fda2dab4b869f66e3f89\",\"dweb:/ipfs/Qmd21k4H2tAHKrpiuHUbH87eNtHLLJzHj9ZCrMh8AKfDHh\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/ReceiveUlnBase.sol\":{\"keccak256\":\"0x36c93de122bbb74ae31e3eacf567c0a3bc649ed3ebb2766c76dfa93aebcace44\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://e83bcaa80e2715e68818dd53e4dc6ad8e665b8249d69a08cf2d2635b9757fb79\",\"dweb:/ipfs/QmSKh6NgaTrTSa48gDzGGqGNAcs5jVEHgZSzZzbuJSEsxo\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/SendUlnBase.sol\":{\"keccak256\":\"0x6d9962ffa476ac2efb78f1415bb2f650a30eedeef2b75fdab0aeafaf3e8da6a5\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://21f32c56b67d2e770444b809c1a85a96627194c605ad317d482dfc5b6ce7e8c2\",\"dweb:/ipfs/QmP5tzoMDzTdduEcSpYHgg6WCHLQGuc1djDMFUBycJPLCU\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/UlnBase.sol\":{\"keccak256\":\"0xfdb1d04f4996c0a9d35abfbfcf10d978da638885eb77d0a9dc35cea5993074e3\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://776d58d88d13b058f236cf18c32b4b9718a021513fc4e198287f4fe18ec5aba4\",\"dweb:/ipfs/QmdNX8jJu2aXJ8Dpbt2ohfhT8RKQLuvh58sW6SAXcUTcV9\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IDVN.sol\":{\"keccak256\":\"0x6becdfab6c1fcaf98f402bee48495895e54825f9d6eef6e292dde0caed628284\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2273341033856737cd46704a1a769768feae696d0e7a912f5be9de8ffdd2180c\",\"dweb:/ipfs/QmY1xBAmMX9jND1HAb7tDyZNPgFReXMqs1vtmHbShKZFQY\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IDVNFeeLib.sol\":{\"keccak256\":\"0xed4a8e77148328132d8f4f2726c4aeec6b490cf03a1d5940bde0ab8d72954de9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7b07802ca32bf10f68e51da872fb358807446dc2242314374d226493a6e9e7dc\",\"dweb:/ipfs/QmfSwWPLgitDy2a9S3mCNBDk6kAcK9n186Dtvj7qg84i12\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/ILayerZeroDVN.sol\":{\"keccak256\":\"0x308e77078242fd5c5746ec29c12e618249134f9e4377c0028ab8f59c07a6014b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2f92cf397a8d26864ac92dfcd1b98e92a32c47f556a62c5e6dc1618734c1caa3\",\"dweb:/ipfs/QmXN3XJXEKq5djV6HeM6jrLycmJPFhMhecsYZ2TaRsQmhg\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/ILayerZeroReadDVN.sol\":{\"keccak256\":\"0x759a3ee7614c2de54b152b0278845f91ac9760d8c22045b2fee89e3e744402b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7a2dbf6bcf5bfab408f18c104b34c390e8bfabb0eeb1a10e3a9c0fb14c8c61d5\",\"dweb:/ipfs/QmWxmRbDBkbhGmNsRyXqQXB1QaWRS4qvh6a8achh8DQPKR\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IReceiveUlnE2.sol\":{\"keccak256\":\"0xcdf7e690e5d5c0a3ec26a0d7b1a7fe49c7d16a3634721c3944f77d13ff5d4a91\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bd32a05dde1b83be1ce64fcfb9495d8b9bf0c5b3a5b521ac6c214e87e32f3cdc\",\"dweb:/ipfs/QmcDKTor8EQf3cbiWYmeFb9qzUM8JGPzGGN9qJnYjP1nN7\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/DVNOptions.sol\":{\"keccak256\":\"0x2beee03cdf59a9bc72e94d08b69cb2e908725f4ceabb48651494938100e21e35\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://d88e121a39e74309f3575417df2318e2d2ee8bc8314e68dbf78544a9c393b141\",\"dweb:/ipfs/QmRojBRAyENK21HnjevAWeoZZxtWkYZubB9Y78vCJPYeU6\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/ReadCmdCodecV1.sol\":{\"keccak256\":\"0x52fbab4a114ce9defb2ffd57c0a978eee438b2c232862f7e20475e0dcadd4eda\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://a4d5d4e186e3f2a916ea02c2d1d0761069ab1a5c0d6f74719bbf3501a7ccb899\",\"dweb:/ipfs/QmS2e12U9Fap2EK1CmSBTccL4PCKkHNdKJn2bXCqqKdbRn\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/SupportedCmdTypes.sol\":{\"keccak256\":\"0x6b2534522c163714e499041ecd06aaeb93857373cef82cf2752f162bb7c69f9a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bf6c3545c3b9505692dbfaa29b40cab5ed9dc9b65e5804b6f47b5a76596120e9\",\"dweb:/ipfs/QmNs98oRaMvpYhLCQ5yU256eYNEopFTrLRjjwm3gL4foQ3\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/UlnOptions.sol\":{\"keccak256\":\"0x5df07fef16b20767f7524c367d90f696c12e8ce0e4fde7aecc9d83fb2b6b0e27\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://0997203f57d736e56ebb3d736550f1c7ff7950c8df0574c7abe95e22f847b850\",\"dweb:/ipfs/QmZBjkH1vaPLyN3Jx9kGfVZKuTdfVWJfJVLSPok8SpjGbT\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/readlib/ReadLibBase.sol\":{\"keccak256\":\"0x7d312ba1e6288cb201b211f58b814eaaa0b5993721475fbc64321b0e7a2c74d3\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://dfc0dce9362eca0f03b51e0e808389c8bf51fda901e6ca58da169f165e4fc3c8\",\"dweb:/ipfs/QmSXAQ3veWf6gPXcgpX1XLZW9SyLQjBjCSdsFiQTttLNac\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/uln301/interfaces/IUltraLightNode301.sol\":{\"keccak256\":\"0x47f8ebeaa7d96a6f337a18c46e3c532da578c7cb0a13fb6e6f014286b991902f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d51f208b931be54e0ae1801c71c0756251d8c26f8d9b7911be1ad57b3d4a5691\",\"dweb:/ipfs/QmWqjst7jnYtSXQ9pakYHutDvENKLyqNg9nPfMxTH8p2Ed\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessageLibManager.sol\":{\"keccak256\":\"0x64330e51de72e8d38cfc0eb5527d36baada46df4bc14233d3a8ecaf98098d69a\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://49aa45e5a26fc62e7af569cf915be8344adc78dceb6871c4c14bc5d115e59241\",\"dweb:/ipfs/QmbTuW7kzPDYForDEPnaNQi6ZrmWqDxGVnHFiugnvTyq9K\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingChannel.sol\":{\"keccak256\":\"0x8ab8cb12c8beba699c1a7f22ffa812ac553f7038326d0c0d0af77253005cfe73\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://7c7cba4ae16d0ca46ee0a365a204f7257ceaa892224604bf7c8e65c44737e46c\",\"dweb:/ipfs/QmbQX5hJDKMwKdoo6QkdcusXQXH54SVCPe5hM1ycJZsg7y\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingComposer.sol\":{\"keccak256\":\"0x20d36578e810e75346daf064813b76a177087214cae77628b1f9d43798cb52d1\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://475b6f3f1ba5d981d0c5f90b9e892d4f9f539f3b12196639b95770b5be4dbf6a\",\"dweb:/ipfs/QmYyGrnR3vDt8Dqa2paQwTG9qrD6anAGFrDZmMra8KGC6s\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingContext.sol\":{\"keccak256\":\"0x9616f3bd0d7293c9723f2ddf86f9f7030fbd99213c9748557eec8f6d13b25420\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://205e713f5af46f52799e51774ac74dbeee4056de6ddba3c4d78a327536426c54\",\"dweb:/ipfs/QmZ2ZqDwxdjpJbh91qwMfRhhQu4AMEsjUcsTEsdRV4NAys\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroComposer.sol\":{\"keccak256\":\"0xfaca7205d4211ee9208a7e59171e2301731f3d2a20c49b4a839821871f5fdd49\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f254bc60ac26687b5320a43a556e30777b0745abf7cd64d5f4720d9b1d1f7fdf\",\"dweb:/ipfs/QmRSJEZVgxaC3L2DdE6s8P5qkYfM3V5JMeseeFJJqGR4xz\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\":{\"keccak256\":\"0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bacc29fd3866af71e59cb0bdc1cf82c882a4a7f4e2652fd413c9f12649762083\",\"dweb:/ipfs/QmZh2toLnrQDWaNYhS5K4NoW7Vxd2GdZx9KA77vKEDLAqs\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol\":{\"keccak256\":\"0x9641abba8d53b08bb517d1b74801dd15ea7b84d77a6719085bd96c8ea94e3ca0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://77415ae0820859e0faf3fabdce683cce9fa03ea026ae0f6fe081ef1c9205f933\",\"dweb:/ipfs/QmXd7APqoCunQ2jYy73AHvi5gsZofLpm3SzM6FPo7zRPfL\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol\":{\"keccak256\":\"0x5cf5f24751b4e3ea1c9c5ded07cedfdfd62566b6daaffcc0144733859c9dba0c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cae7e35007a714f007ea08045ef7c0cfa6c91fd2425b5028b2d49abad357a5f0\",\"dweb:/ipfs/QmcDBs5tsiyB35b8cwzWQWNnpkawb3uuHRaqE77Hxm2tve\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol\":{\"keccak256\":\"0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d8ff6a8a89297fa127f86b54e0db3eba1d6a6eeb4f6398d3c84d569665ac8f1b\",\"dweb:/ipfs/QmVSwhw6xFDrLRAX4RXaCM47yBaBtac4wf36DYEq6KCTvT\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol\":{\"keccak256\":\"0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7e1b245d58221d16d8b5e0f01ef3e289a24a7df1ace3b94239e4d5b954ad5927\",\"dweb:/ipfs/Qmappsgp7PCY9rSSNE9Cdn4BTRX591WfCSEgq2HxhA3z6S\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol\":{\"keccak256\":\"0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b18b23a1643fc6636c4ad9d9023e2e6ca2d3c2a4a046482d4655bff09950598d\",\"dweb:/ipfs/Qma6G5SqiovwrMPfgqTrRngK1HWW373Wkf9c6YP2NhXpPk\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol\":{\"keccak256\":\"0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5173fc9143bea314b159ca5a9adb5626659ef763bc598e27de5fa46efe3291a6\",\"dweb:/ipfs/QmSLFeMFPmVeGxT4sxRPW28ictjAS22M8rLeYRu9TXkA6D\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol\":{\"keccak256\":\"0xf1c07bc61e7b1dce195ed12d50f87980fbf2d63cac1326fd28287f55fe0ba625\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://060f10ff7afc33c1c2f2b4b5ba29231fd3c943146488084d0e4ab99fce991d97\",\"dweb:/ipfs/QmaSsefAqqEqtf8FgFUmDYMwTsAty3X1pqDb6SiFvry6B3\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol\":{\"keccak256\":\"0x2ebbcaaab3554edcd41b581f1a72ac1806afbfb8047d0d47ff098f9af30d6deb\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://2d4b2cf5c3b16dc76c6767f285b57c0af917972327b2be3f7cba5825402f5fc1\",\"dweb:/ipfs/QmQQWiHE2jKEDbjzGutSoZwtApSXYfLqZt5CxEpFj8xyvT\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/CalldataBytesLib.sol\":{\"keccak256\":\"0x5c0db161cef6603c3b256d4220f489419e7478ef775e52a80056654129c61875\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://a33245d0fdd3992bb56b31d1840108d36bb46c8d617b659ef1af8dd7ed86302d\",\"dweb:/ipfs/QmWyBqT7Tdrfn5zz9xYM3V1PBtfAZAVwwCrrKwwfi3wMQK\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Errors.sol\":{\"keccak256\":\"0x35bcd6ca99c4c8d9f7d8413d1b92fb4a4d4a420ce3bf64b0fb01e68e6bcf2fa7\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://0ac14f98563f9c610c936c93e71eff657efaba1e1d892be6a215aa5cb1f63a24\",\"dweb:/ipfs/QmVZZ8owwfDGLQTAzQJJqmYY4KsrChDagh5GBK7rChT5wb\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/GUID.sol\":{\"keccak256\":\"0x8a44524af7deb96593f6b5606e9973654a113e1687809f2e45d4a91ba89862d5\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://32dd0b5d1946e0cd5c7b728086aafac50a62c061115afb8b41254589c8a6732b\",\"dweb:/ipfs/QmR9QqtiAUPRLaRVv5wnth3NGPhdWB8rJmWYfz3o5Z1mWj\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Transfer.sol\":{\"keccak256\":\"0x621d6dd5b8b7e827351459fff4ac87c16ba4656757592cf67de8b199aea4cf9a\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://345aa8c007ed8b96a74260d289545713f1d7180df270d67687e3a540a61fa5c0\",\"dweb:/ipfs/QmNWCvpqSuar6UGLDVshUc7shUv3pt1J5FTf9VyZZ13wXL\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/BlockedMessageLib.sol\":{\"keccak256\":\"0xb2b55968b26294139742adee6c155897c8334f4c6bf72f1940456cc84e6fbab9\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://e758a1fdcea4039b19f1252e4e2958f4a0e05517eb3e151784431533446c225f\",\"dweb:/ipfs/QmRBG345abgyUeTnSpuxdK1WbK5pvwhSmvBEgW1mnoYqTq\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/BitMaps.sol\":{\"keccak256\":\"0xaad3c72ef43480d2253fd48b394e8fb7286d009991d2bc4e61be58ce48ac5ee9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b8c02b14f954416ba2148b389c87da8378ac8dd16ba3d458cbbfba8b0fd8639f\",\"dweb:/ipfs/Qmd2EEQhYL2VmgJi1V4uiHM2WcYxF9iBtxSgcFkbS21rQD\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/ExecutorOptions.sol\":{\"keccak256\":\"0x621c6090fc432f94a99f677a95d72b75f56db89ddc5fc870669777a313587c28\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://69086166f16d29e30c5eb9ca2f97afb27569afe619807d79736833a809a512d2\",\"dweb:/ipfs/QmcZqXjFuVdTrfbteKBF3GuEpjVFZ2YNZTa3J87dyLsqav\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol\":{\"keccak256\":\"0xc84cf1bf785977fe1fbe7566eef902c2db68d0e163813ebe6c34921754802680\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://de686666fc16fa432d4208d85cec87dc952faf3e481b683b9adf4b4610db4b09\",\"dweb:/ipfs/QmdmQeopzmxqRzi9DNB4EJDrYUXFfD7fUhnGhSni4QejUW\"]},\"node_modules/@layerzerolabs/lz-evm-v1-0.7/contracts/interfaces/ILayerZeroUltraLightNodeV2.sol\":{\"keccak256\":\"0xf1f36bbbc40d03b96affa151affb47da75a1b69dc79f4b311841a072d12fdd22\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://9f4f188c2998ecbda28a389ad8038da15c2260b1df6a8d135b3d96422e292fda\",\"dweb:/ipfs/QmeThR83tcaM4CmxQ2AamTafsgjcbGMfZtYcDHqw2CcwKa\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/OptionsHelper.sol\":{\"keccak256\":\"0x729ce2290d16a45a16ad936263803db6a6bebcfba5c063ebe0f0fd284ba828c0\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://7494875394fc968684761b22bb5fe05789f8d84ba07b2e0ab579ce0afe7aa973\",\"dweb:/ipfs/QmZNrexRXL3ef3UnES5e8JcdyMJ5HVftwGKQjGC5CwNg9Q\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/TestHelperOz5.sol\":{\"keccak256\":\"0xe60b21a345bb1c2e9ee2fb7301398d342da0acc3a730b442106a2ad9478f7a63\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://ee7e0a47ae666a16e33a51f946da4fe549e8f4c6ea1f1978850515172c44656f\",\"dweb:/ipfs/QmR2AZ9pYiwMCV4wPPVaGGPRJEjuBoFjJEesHtbAYhNoFq\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/DVNFeeLibMock.sol\":{\"keccak256\":\"0x4c2e212f73a1c2a2989af947eef715ebacb11a80d55e5fd18a89a905790971b1\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://30eb29a81414780828903f5320367e89020af5a4055b768e2be08d43605b1688\",\"dweb:/ipfs/QmeC5bVtmaY6tn6Z2XpVFXAkxVWQCQUzKbP2V9nPdv3vCr\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/DVNMock.sol\":{\"keccak256\":\"0xdafd7da964b6ac8637d543c30370739bb805f7e10b42043444689240b5c27b3f\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://154067632b4799f49c0b3a8c5304499f60b2c232ebd17c21912efdb72421bdab\",\"dweb:/ipfs/QmUEr6VsNt2odnrL3xFrLKwZTVLkLXi8BDzpPWeiCxC63T\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/EndpointV2AltMock.sol\":{\"keccak256\":\"0x026b2f530b336ee237f37dde6f617acefbbf74d933d2a80da4216882f78be1a9\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://097a9fdd5a321e6e8455a1db00f2abda6e810c31ce47d1bced9e574be262a28b\",\"dweb:/ipfs/Qme17zGk93k5BghCWFXqeqppVahH4dHuw7U76K4EcJxsY1\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/EndpointV2Mock.sol\":{\"keccak256\":\"0xe9096c53611537a121589b56b882fc4dd797d5cac60def708f794a15e3ca98ff\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://4092d5dd582b48a5f703e4361fc5fb66050b5fe3253891175275dc832bc8e045\",\"dweb:/ipfs/QmXSTJJNx4rn2ByCaE6vxiHnkm366ZU7dScYH1JsUbVZ1V\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ExecutorFeeLibMock.sol\":{\"keccak256\":\"0x4a47aaf41049710d5f05fcc66885cacc0dabc1864778b56ac75a59b61eef5a01\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://c9b8c26b38cb138c3225efbab8b1d2e0f43343798658a0f2ed9669c16e5a97ff\",\"dweb:/ipfs/QmV21G7Qwoi9gXYT8bKXDwnQDvjdZCAo2M9MqTKq4nQU9U\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ExecutorMock.sol\":{\"keccak256\":\"0xbcdc4500270cd5496f10760ffe9e0444d23e454dd0ae2555e0661acf22fce96f\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://b816999bcfef5586b5e80bba21584b821fd7f7b32c276492adee530ffa83bb73\",\"dweb:/ipfs/QmXLV8ieYdrTBERajBCVuMzknFyPHJjnw7MGkzULAdjdt8\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/MultiSigMock.sol\":{\"keccak256\":\"0xc7c90e073e52af1da6c07e3d3f7477b064a89e78935c16e9872457df503c6830\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://cef1ae2d517e152616aea7f8f5c15fa1fbabbec8896a9c30a9eed35fb56b4f2f\",\"dweb:/ipfs/QmeitPMQht2WfbR9ZLzwKWgThamdsJkobeaWo6ojTCoQG5\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/PriceFeedMock.sol\":{\"keccak256\":\"0xd8f419b25c648287b5b7f0923b069b2449c51e807c9153df39445f2f83e55f44\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://bb300a5bb62655073c7aa9cd2221e60e59ce904a0d73f7f5e06af7c9df3445ec\",\"dweb:/ipfs/QmcYb2qFevymfkWhTqGaNH5HwK9MMUixzAKJJAdNQHSCbw\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ReadLib1002Mock.sol\":{\"keccak256\":\"0x1403b7a91b185fd8211f00fa380a0b8918e92e663c403a1dafa30f1667091fdc\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://7494444260a981ae9a9e11cd8981fad35a6b45a9c09cf72c05aad88ee191e7f0\",\"dweb:/ipfs/QmaTyujm37PsCobQ36ootD5xVgKyBYqeUTdTJij9x3oaN6\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ReceiveUln302Mock.sol\":{\"keccak256\":\"0x8e60b01e9bc801167b374dc119b41832d546afd43c143a0cd15ab1941198e121\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://bb1512762417dda9cd81fd9b41f590fd05888358fda1c2ab7e79e0cfabf61ec4\",\"dweb:/ipfs/QmPAgBwdjLz29vE5L1Jth1Wvx6TTM1ig97amVtAyDFF61Q\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/SendUln302Mock.sol\":{\"keccak256\":\"0x0c5cb54ec6b18e77aa653f7d774ac9d010684dafc96794d1d02f12b6885cc348\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://24c5a8ba8d92c16ec3047229167528f57b38cbd64882140014126ca51ab14574\",\"dweb:/ipfs/QmXQsMDtZ3qNmjnr2LYgctBpPKxffuC6EeWHvFUtLBS5st\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/SimpleMessageLibMock.sol\":{\"keccak256\":\"0xe6c93840c612592686732dd516550816eb77d6cde92514220eacb72443dcb9b9\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://a6a00fb60b7ac66e746f0471c2262fc98febafeb8acad8785d38ce1ddc4cc991\",\"dweb:/ipfs/QmboboJskbXBbsyAGGRbW4JQCPJo9WiLFy7nwQxGVS9UhZ\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/WorkerMock.sol\":{\"keccak256\":\"0x6c5bc31c117033dd35fa7ab3b13b1647a4b449c5f5b4cbff41bce8a63529ab97\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://01aa1d3f3b8e2fd4b544312d96916b16b97e01ab740e2bae1137723b2f1a31b1\",\"dweb:/ipfs/QmVMemJ4MSgi6y9NxDdSeB6QbJRtCWojJNxzs3CRLT56EA\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/test.sol\":{\"keccak256\":\"0x8758531bbac3972efcf1fa46383dbe1d276406fe527bc7abb2f236486278e83b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://1f64264d61506847acf8761e84aff690cebe830958eac00bac7924d8be569240\",\"dweb:/ipfs/QmSekDJvJ82MZAmr63n7YvfLzQ7gS4NLSHPmHL3GN3rw8k\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Base.sol\":{\"keccak256\":\"0x4ff1a785311017d1eedb1b4737956fa383067ad34eb439abfec1d989754dde1c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f553622969b9fdb930246704a4c10dfaee6b1a4468c142fa7eb9dc292a438224\",\"dweb:/ipfs/QmcxqHnqdQsMVtgsfH9VNLmZ3g7GhgNagfq7yvNCDcCHFK\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdAssertions.sol\":{\"keccak256\":\"0x1a0dee4d8b2c81e9318e87dd85ef009467ebf7dba6575530d1fce94d34dbae60\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ddd790c86ddde1013d1f7a552a80168eacf2e9244077f96799180644ad523a5b\",\"dweb:/ipfs/QmYinBFt9uEVFXP9ytT9CDoNpzWieQVgLWRFRNiypMzJaL\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdChains.sol\":{\"keccak256\":\"0x598b85609125830885b8fb54a18f447d04f8dd799aca3de81baef35eb6b783c0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c9c128aae4f5668d8c8f71e9e6d9379d8451b8713d139cb66a02d23bc1c75f69\",\"dweb:/ipfs/QmVRihXHWi2yg9CcAhzKf63Y7m6gWz4P1giGMhXUHT3DFu\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdCheats.sol\":{\"keccak256\":\"0xb72f3519e0bf7d31df5d68557525f4fc55d861c3fb3b0f7793144ef7c94cbeb7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f3456d0f78e6f61203fa7871ba2df0d35925f10db3baee14be623ce2a35b84e2\",\"dweb:/ipfs/QmWE6QQSBvJifHMraisBTrf1x4WCwrDoTPLX8UKajTiApc\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdError.sol\":{\"keccak256\":\"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6\",\"dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdInvariant.sol\":{\"keccak256\":\"0x67299bfacd77fddfa2a67b8e2b901e0e333618a4975fb94850b07475e51f6de6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1b61121d310f4053ce344b345b4a9ccf43b059daf9097ec2647f594beaca896d\",\"dweb:/ipfs/QmZUCoTtXBM9zfAZVbj2dFPPnKaV1CSZzXE7zictyg3Gfz\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdJson.sol\":{\"keccak256\":\"0x8f914dbd016bd0e318fe2b8bd556fbc8256c7cddc24e3e4fcb9f3c1c1935592d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://19e704df493dde38323303b07d18cadfeb4dcadf1ddc2301add4aea9474fbb5e\",\"dweb:/ipfs/QmZasuGiLK8LHwWtvpqEBxUR6QFY6GdzLMTJ9q7CMf8PNZ\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdMath.sol\":{\"keccak256\":\"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92\",\"dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdStorage.sol\":{\"keccak256\":\"0x4298f3f4cedaedb07029820b1daad2c03af45379559392201f7bf3ec71105811\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6e062f36d8d1ae3c383ef8975757926eaa9c4de3a92b5f1fe2d12748bcd8db32\",\"dweb:/ipfs/QmcWkv3ia5Ew4DZNcudMNSTNXZ3W2QiXTZunRd44e9BT8z\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdStyle.sol\":{\"keccak256\":\"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8\",\"dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdUtils.sol\":{\"keccak256\":\"0x502b18a4becda6ecd91fa8b419d8034946bfa80e6cc7f6497f51f8565bfadae0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bf499ee483a1dfd02023d4ce78ed4029a49794ccd5b849aaab912faea0d2ba61\",\"dweb:/ipfs/QmP6hwNZW7sYbQK9fBzuZWxfLm6Swx2nKzvZ54qWNqQkzX\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Test.sol\":{\"keccak256\":\"0x39b1729d5868c8e94ab8af16751eb500a17fe3870dc627d2b7ddcd5df18d7ad0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1568c82aff125cc4b0fc168be9d67ac313f469a3c7405c5493caecaaaecfb765\",\"dweb:/ipfs/QmXByuZReJsdu1jDcxj1FcmpcUnzoBcqybn9kWgDAECWri\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Vm.sol\":{\"keccak256\":\"0x87ba9f3edc254e529db9e3129c954391adcc7fc8574203767979d8d2f1e724b9\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://4d16c08d80d9f2869deb6350642cf5af624d21fce6b3b023abbcdedc62e195fe\",\"dweb:/ipfs/QmURpnnFECPKt3i7P7jQRZpr4ZBXjRGcZ9KzcbKzsgYR2W\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/console.sol\":{\"keccak256\":\"0x91d5413c2434ca58fd278b6e1e79fd98d10c83931cc2596a6038eee4daeb34ba\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://91ccea707361e48b9b7a161fe81f496b9932bc471e9c4e4e1e9c283f2453cc70\",\"dweb:/ipfs/QmcB66sZhQ6Kz7MUHcLE78YXRUZxoZnnxZjN6yATsbB2ec\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/console2.sol\":{\"keccak256\":\"0x954646445d1014c3cd85c7918f5e7adeeca5ee44b68c00bafa237e597a4e35ea\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://516fa3be52da4763147175bfba4be0aa011fadbb0c1afb01f97265bd4cee7973\",\"dweb:/ipfs/QmdixAyMJefx7qePChgdxcBH5MxhmN7vsqPuPLx3CgrVmF\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/interfaces/IMulticall3.sol\":{\"keccak256\":\"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0\",\"dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/mocks/MockERC20.sol\":{\"keccak256\":\"0xd8703f49411737ecf8d411f8fa66b2bf0ef972ba28b7a4adf1748c63df1bf682\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7c10a6b8112f6fe3cdccb6240ecd382765216b1a82e9a86a0fec8f5e09eadd1\",\"dweb:/ipfs/QmdRvPCU4RkjMHsTu3Ric1ZEF1AWDNLp78unFC5aWP17xq\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/mocks/MockERC721.sol\":{\"keccak256\":\"0xa24468244abb66e663fb7eee6463cb518eb9a7c14e1071548ff564cca825bbca\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://145585a2194aa6e2d30edfe709ef2814e20b1b4540469aa6a8f50c841fcb9070\",\"dweb:/ipfs/QmZrwbvtpbtTxqbW5phUrwb3F1tBiPSQc6jZJAXBfsBsAh\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/safeconsole.sol\":{\"keccak256\":\"0xbaf41fdc6c54297e7cd8250e48b0f20eaac918e342a1028cef3f9a52ac086381\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a500ad81dea226f9910e6b50f99a9ff930105e393a692cbfb2185e4cdb4424ae\",\"dweb:/ipfs/QmVbUQpXNMmMWRiy4FvBNczzq46BMGfUoBikvSHNiCxVTq\"]},\"node_modules/@openzeppelin/contracts/access/AccessControl.sol\":{\"keccak256\":\"0xa0e92d42942f4f57c5be50568dac11e9d00c93efcb458026e18d2d9b9b2e7308\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://46326c0bb1e296b67185e81c918e0b40501b8b6386165855df0a3f3c634b6a80\",\"dweb:/ipfs/QmTwyrDYtsxsk6pymJTK94PnEpzsmkpUxFuzEiakDopy4Z\"]},\"node_modules/@openzeppelin/contracts/access/IAccessControl.sol\":{\"keccak256\":\"0xc1c2a7f1563b77050dc6d507db9f4ada5d042c1f6a9ddbffdc49c77cdc0a1606\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fd54abb96a6156d9a761f6fdad1d3004bc48d2d4fce47f40a3f91a7ae83fc3a1\",\"dweb:/ipfs/QmUrFSGkTDJ7WaZ6qPVVe3Gn5uN2viPb7x7QQ35UX4DofX\"]},\"node_modules/@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol\":{\"keccak256\":\"0x9b6b3e7803bc5f2f8cd7ad57db8ac1def61a9930a5a3107df4882e028a9605d7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://da62d6be1f5c6edf577f0cb45666a8aa9c2086a4bac87d95d65f02e2f4c36a4b\",\"dweb:/ipfs/QmNkpvBpoCMvX8JwAFNSc5XxJ2q5BXJpL5L1txb4QkqVFF\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC165.sol\":{\"keccak256\":\"0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://11fea9f8bc98949ac6709f0c1699db7430d2948137aa94d5a9e95a91f61a710a\",\"dweb:/ipfs/QmQdfRXxQjwP6yn3DVo1GHPpriKNcFghSPi94Z1oKEFUNS\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC20.sol\":{\"keccak256\":\"0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a2608291cb038b388d80b79a06b6118a42f7894ff67b7da10ec0dbbf5b2973ba\",\"dweb:/ipfs/QmWohqcBLbcxmA4eGPhZDXe5RYMMEEpFq22nfkaUMvTfw1\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db\",\"dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0xca2ae13e0610f6a99238dd00b97bd786bc92732dae6d6b9d61f573ec51018310\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://75f8c71ce0c91c40dd5f249ace0b7d8270f8f1767231bcf71490f7157d6ba862\",\"dweb:/ipfs/QmYXgxeDyFHvz3JsXxLEYN6GNUR44ThHeFj5XkpkgMoG4w\"]},\"node_modules/@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0x9d8da059267bac779a2dbbb9a26c2acf00ca83085e105d62d5d4ef96054a47f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c78e2aa4313323cecd1ef12a8d6265b96beee1a199923abf55d9a2a9e291ad23\",\"dweb:/ipfs/QmUTs2KStXucZezzFo3EYeqYu47utu56qrF7jj1Gue65vb\"]},\"node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"node_modules/@openzeppelin/contracts/utils/Errors.sol\":{\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf\",\"dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB\"]},\"node_modules/@openzeppelin/contracts/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]},\"node_modules/@openzeppelin/contracts/utils/Pausable.sol\":{\"keccak256\":\"0xb2e5f50762c27fb4b123e3619c3c02bdcba5e515309382e5bfb6f7d6486510bd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1a4b83328c98d518a2699c2cbe9e9b055e78aa57fa8639f1b88deb8b3750b5dc\",\"dweb:/ipfs/QmXdcYj5v7zQxXFPULShHkR5p4Wa2zYuupbHnFdV3cHYtc\"]},\"node_modules/@openzeppelin/contracts/utils/ReentrancyGuard.sol\":{\"keccak256\":\"0x11a5a79827df29e915a12740caf62fe21ebe27c08c9ae3e09abe9ee3ba3866d3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3cf0c69ab827e3251db9ee6a50647d62c90ba580a4d7bbff21f2bea39e7b2f4a\",\"dweb:/ipfs/QmZiKwtKU1SBX4RGfQtY7PZfiapbbu6SZ9vizGQD9UHjRA\"]},\"node_modules/@openzeppelin/contracts/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0x69f54c02b7d81d505910ec198c11ed4c6a728418a868b906b4a0cf29946fda84\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8e25e4bdb7ae1f21d23bfee996e22736fc0ab44cfabedac82a757b1edc5623b9\",\"dweb:/ipfs/QmQdWQvB6JCP9ZMbzi8EvQ1PTETqkcTWrbcVurS7DKpa5n\"]},\"node_modules/@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0xddce8e17e3d3f9ed818b4f4c4478a8262aab8b11ed322f1bf5ed705bb4bd97fa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8084aa71a4cc7d2980972412a88fe4f114869faea3fefa5436431644eb5c0287\",\"dweb:/ipfs/Qmbqfs5dRdPvHVKY8kTaeyc65NdqXRQwRK7h9s5UJEhD1p\"]},\"node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]},\"node_modules/@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]},\"node_modules/@openzeppelin/contracts/utils/structs/DoubleEndedQueue.sol\":{\"keccak256\":\"0x1e1d74658d7f4eab3d4f8fb0c6c5953bc5f629d9425e978d557dabff7b58b217\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://be0175d00008d452d3d553890f73a3d5d51dff4372f720336c8b98f26822fcdb\",\"dweb:/ipfs/QmUkE8g5xPExWoSAKwdi5ww1qJJVtEWtjSF93G2LMQkgD3\"]},\"node_modules/solidity-bytes-utils/contracts/BytesLib.sol\":{\"keccak256\":\"0xa5b10f04797d5a10a9ba07855108b6bd695940e6a3d128927b2f74a0d359868a\",\"license\":\"Unlicense\",\"urls\":[\"bzz-raw://a38d7680aacbb18dae659876b396b73bcc8f759672213f8a0efc4129e2648535\",\"dweb:/ipfs/QmfKFnwpTEGAnbRnZxMuv3mRCG9S9WMjFhFL23bftBT2Jq\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { - "inputs": [ - { - "internalType": "address payable", - "name": "_verifyHelper", - "type": "address" - }, - { - "internalType": "address", - "name": "_endpoint", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_treasuryGasCap", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_treasuryGasForFeeCap", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { "inputs": [], "type": "error", "name": "DVN_InvalidDVNIdx" }, - { - "inputs": [ - { "internalType": "uint256", "name": "cursor", "type": "uint256" } - ], - "type": "error", - "name": "DVN_InvalidDVNOptions" - }, - { - "inputs": [], - "type": "error", - "name": "LZ_MessageLib_CannotWithdrawAltToken" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "requested", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "available", - "type": "uint256" - } - ], - "type": "error", - "name": "LZ_MessageLib_InvalidAmount" - }, - { - "inputs": [], - "type": "error", - "name": "LZ_MessageLib_InvalidExecutor" - }, - { - "inputs": [ - { "internalType": "uint256", "name": "actual", "type": "uint256" }, - { "internalType": "uint256", "name": "max", "type": "uint256" } - ], - "type": "error", - "name": "LZ_MessageLib_InvalidMessageSize" - }, - { "inputs": [], "type": "error", "name": "LZ_MessageLib_NotTreasury" }, - { "inputs": [], "type": "error", "name": "LZ_MessageLib_OnlyEndpoint" }, - { - "inputs": [], - "type": "error", - "name": "LZ_MessageLib_TransferFailed" - }, - { - "inputs": [], - "type": "error", - "name": "LZ_MessageLib_ZeroMessageSize" - }, - { "inputs": [], "type": "error", "name": "LZ_ULN_AtLeastOneDVN" }, - { - "inputs": [ - { "internalType": "uint32", "name": "configType", "type": "uint32" } - ], - "type": "error", - "name": "LZ_ULN_InvalidConfigType" - }, - { - "inputs": [], - "type": "error", - "name": "LZ_ULN_InvalidConfirmations" - }, - { - "inputs": [], - "type": "error", - "name": "LZ_ULN_InvalidLegacyType1Option" - }, - { - "inputs": [], - "type": "error", - "name": "LZ_ULN_InvalidLegacyType2Option" - }, - { - "inputs": [], - "type": "error", - "name": "LZ_ULN_InvalidOptionalDVNCount" - }, - { - "inputs": [], - "type": "error", - "name": "LZ_ULN_InvalidOptionalDVNThreshold" - }, - { - "inputs": [], - "type": "error", - "name": "LZ_ULN_InvalidRequiredDVNCount" - }, - { - "inputs": [ - { "internalType": "uint8", "name": "workerId", "type": "uint8" } - ], - "type": "error", - "name": "LZ_ULN_InvalidWorkerId" - }, - { - "inputs": [ - { "internalType": "uint256", "name": "cursor", "type": "uint256" } - ], - "type": "error", - "name": "LZ_ULN_InvalidWorkerOptions" - }, - { "inputs": [], "type": "error", "name": "LZ_ULN_Unsorted" }, - { - "inputs": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" } - ], - "type": "error", - "name": "LZ_ULN_UnsupportedEid" - }, - { - "inputs": [ - { "internalType": "uint16", "name": "optionType", "type": "uint16" } - ], - "type": "error", - "name": "LZ_ULN_UnsupportedOptionType" - }, - { - "inputs": [ - { "internalType": "address", "name": "owner", "type": "address" } - ], - "type": "error", - "name": "OwnableInvalidOwner" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "type": "error", - "name": "OwnableUnauthorizedAccount" - }, - { - "inputs": [ - { "internalType": "uint8", "name": "bits", "type": "uint8" }, - { "internalType": "uint256", "name": "value", "type": "uint256" } - ], - "type": "error", - "name": "SafeCastOverflowedUintDowncast" - }, - { - "inputs": [ - { "internalType": "address", "name": "token", "type": "address" } - ], - "type": "error", - "name": "SafeERC20FailedOperation" - }, - { - "inputs": [ - { "internalType": "address", "name": "_to", "type": "address" }, - { "internalType": "uint256", "name": "_value", "type": "uint256" } - ], - "type": "error", - "name": "Transfer_NativeFailed" - }, - { "inputs": [], "type": "error", "name": "Transfer_ToAddressIsZero" }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "requiredDVNs", - "type": "address[]", - "indexed": false - }, - { - "internalType": "address[]", - "name": "optionalDVNs", - "type": "address[]", - "indexed": false - }, - { - "internalType": "uint256[]", - "name": "fees", - "type": "uint256[]", - "indexed": false - } - ], - "type": "event", - "name": "DVNFeePaid", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "struct SetDefaultExecutorConfigParam[]", - "name": "params", - "type": "tuple[]", - "components": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" }, - { - "internalType": "struct ExecutorConfig", - "name": "config", - "type": "tuple", - "components": [ - { - "internalType": "uint32", - "name": "maxMessageSize", - "type": "uint32" - }, - { - "internalType": "address", - "name": "executor", - "type": "address" - } - ] - } - ], - "indexed": false - } - ], - "type": "event", - "name": "DefaultExecutorConfigsSet", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "struct SetDefaultUlnConfigParam[]", - "name": "params", - "type": "tuple[]", - "components": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" }, - { - "internalType": "struct UlnConfig", - "name": "config", - "type": "tuple", - "components": [ - { - "internalType": "uint64", - "name": "confirmations", - "type": "uint64" - }, - { - "internalType": "uint8", - "name": "requiredDVNCount", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "optionalDVNCount", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "optionalDVNThreshold", - "type": "uint8" - }, - { - "internalType": "address[]", - "name": "requiredDVNs", - "type": "address[]" - }, - { - "internalType": "address[]", - "name": "optionalDVNs", - "type": "address[]" - } - ] - } - ], - "indexed": false - } - ], - "type": "event", - "name": "DefaultUlnConfigsSet", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "oapp", - "type": "address", - "indexed": false - }, - { - "internalType": "uint32", - "name": "eid", - "type": "uint32", - "indexed": false - }, - { - "internalType": "struct ExecutorConfig", - "name": "config", - "type": "tuple", - "components": [ - { - "internalType": "uint32", - "name": "maxMessageSize", - "type": "uint32" - }, - { - "internalType": "address", - "name": "executor", - "type": "address" - } - ], - "indexed": false - } - ], - "type": "event", - "name": "ExecutorConfigSet", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "executor", - "type": "address", - "indexed": false - }, - { - "internalType": "uint256", - "name": "fee", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "ExecutorFeePaid", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "lzToken", - "type": "address", - "indexed": false - }, - { - "internalType": "address", - "name": "receiver", - "type": "address", - "indexed": false - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "LzTokenFeeWithdrawn", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "worker", - "type": "address", - "indexed": false - }, - { - "internalType": "address", - "name": "receiver", - "type": "address", - "indexed": false - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "NativeFeeWithdrawn", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "previousOwner", - "type": "address", - "indexed": true - }, - { - "internalType": "address", - "name": "newOwner", - "type": "address", - "indexed": true - } - ], - "type": "event", - "name": "OwnershipTransferred", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "newTreasuryNativeFeeCap", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "TreasuryNativeFeeCapSet", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "treasury", - "type": "address", - "indexed": false - } - ], - "type": "event", - "name": "TreasurySet", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "oapp", - "type": "address", - "indexed": false - }, - { - "internalType": "uint32", - "name": "eid", - "type": "uint32", - "indexed": false - }, - { - "internalType": "struct UlnConfig", - "name": "config", - "type": "tuple", - "components": [ - { - "internalType": "uint64", - "name": "confirmations", - "type": "uint64" - }, - { - "internalType": "uint8", - "name": "requiredDVNCount", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "optionalDVNCount", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "optionalDVNThreshold", - "type": "uint8" - }, - { - "internalType": "address[]", - "name": "requiredDVNs", - "type": "address[]" - }, - { - "internalType": "address[]", - "name": "optionalDVNs", - "type": "address[]" - } - ], - "indexed": false - } - ], - "type": "event", - "name": "UlnConfigSet", - "anonymous": false - }, - { - "inputs": [ - { "internalType": "address", "name": "oapp", "type": "address" }, - { "internalType": "uint32", "name": "eid", "type": "uint32" } - ], - "stateMutability": "view", - "type": "function", - "name": "executorConfigs", - "outputs": [ - { - "internalType": "uint32", - "name": "maxMessageSize", - "type": "uint32" - }, - { "internalType": "address", "name": "executor", "type": "address" } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "worker", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "fees", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "_oapp", "type": "address" }, - { "internalType": "uint32", "name": "_remoteEid", "type": "uint32" } - ], - "stateMutability": "view", - "type": "function", - "name": "getAppUlnConfig", - "outputs": [ - { - "internalType": "struct UlnConfig", - "name": "", - "type": "tuple", - "components": [ - { - "internalType": "uint64", - "name": "confirmations", - "type": "uint64" - }, - { - "internalType": "uint8", - "name": "requiredDVNCount", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "optionalDVNCount", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "optionalDVNThreshold", - "type": "uint8" - }, - { - "internalType": "address[]", - "name": "requiredDVNs", - "type": "address[]" - }, - { - "internalType": "address[]", - "name": "optionalDVNs", - "type": "address[]" - } - ] - } - ] - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { "internalType": "address", "name": "_oapp", "type": "address" }, - { - "internalType": "uint32", - "name": "_configType", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function", - "name": "getConfig", - "outputs": [{ "internalType": "bytes", "name": "", "type": "bytes" }] - }, - { - "inputs": [ - { "internalType": "address", "name": "_oapp", "type": "address" }, - { "internalType": "uint32", "name": "_remoteEid", "type": "uint32" } - ], - "stateMutability": "view", - "type": "function", - "name": "getExecutorConfig", - "outputs": [ - { - "internalType": "struct ExecutorConfig", - "name": "rtnConfig", - "type": "tuple", - "components": [ - { - "internalType": "uint32", - "name": "maxMessageSize", - "type": "uint32" - }, - { - "internalType": "address", - "name": "executor", - "type": "address" - } - ] - } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "_oapp", "type": "address" }, - { "internalType": "uint32", "name": "_remoteEid", "type": "uint32" } - ], - "stateMutability": "view", - "type": "function", - "name": "getUlnConfig", - "outputs": [ - { - "internalType": "struct UlnConfig", - "name": "rtnConfig", - "type": "tuple", - "components": [ - { - "internalType": "uint64", - "name": "confirmations", - "type": "uint64" - }, - { - "internalType": "uint8", - "name": "requiredDVNCount", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "optionalDVNCount", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "optionalDVNThreshold", - "type": "uint8" - }, - { - "internalType": "address[]", - "name": "requiredDVNs", - "type": "address[]" - }, - { - "internalType": "address[]", - "name": "optionalDVNs", - "type": "address[]" - } - ] - } - ] - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" } - ], - "stateMutability": "view", - "type": "function", - "name": "isSupportedEid", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [], - "stateMutability": "pure", - "type": "function", - "name": "messageLibType", - "outputs": [ - { - "internalType": "enum MessageLibType", - "name": "", - "type": "uint8" - } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "owner", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ] - }, - { - "inputs": [ - { - "internalType": "struct Packet", - "name": "_packet", - "type": "tuple", - "components": [ - { "internalType": "uint64", "name": "nonce", "type": "uint64" }, - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "receiver", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "guid", - "type": "bytes32" - }, - { "internalType": "bytes", "name": "message", "type": "bytes" } - ] - }, - { "internalType": "bytes", "name": "_options", "type": "bytes" }, - { "internalType": "bool", "name": "_payInLzToken", "type": "bool" } - ], - "stateMutability": "view", - "type": "function", - "name": "quote", - "outputs": [ - { - "internalType": "struct MessagingFee", - "name": "", - "type": "tuple", - "components": [ - { - "internalType": "uint256", - "name": "nativeFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "lzTokenFee", - "type": "uint256" - } - ] - } - ] - }, - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "function", - "name": "renounceOwnership" - }, - { - "inputs": [ - { - "internalType": "struct Packet", - "name": "_packet", - "type": "tuple", - "components": [ - { "internalType": "uint64", "name": "nonce", "type": "uint64" }, - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "receiver", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "guid", - "type": "bytes32" - }, - { "internalType": "bytes", "name": "message", "type": "bytes" } - ] - }, - { "internalType": "bytes", "name": "_options", "type": "bytes" }, - { "internalType": "bool", "name": "_payInLzToken", "type": "bool" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "send", - "outputs": [ - { - "internalType": "struct MessagingFee", - "name": "fee", - "type": "tuple", - "components": [ - { - "internalType": "uint256", - "name": "nativeFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "lzTokenFee", - "type": "uint256" - } - ] - }, - { - "internalType": "bytes", - "name": "encodedPacket", - "type": "bytes" - } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "_oapp", "type": "address" }, - { - "internalType": "struct SetConfigParam[]", - "name": "_params", - "type": "tuple[]", - "components": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" }, - { - "internalType": "uint32", - "name": "configType", - "type": "uint32" - }, - { "internalType": "bytes", "name": "config", "type": "bytes" } - ] - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setConfig" - }, - { - "inputs": [ - { - "internalType": "struct SetDefaultExecutorConfigParam[]", - "name": "_params", - "type": "tuple[]", - "components": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" }, - { - "internalType": "struct ExecutorConfig", - "name": "config", - "type": "tuple", - "components": [ - { - "internalType": "uint32", - "name": "maxMessageSize", - "type": "uint32" - }, - { - "internalType": "address", - "name": "executor", - "type": "address" - } - ] - } - ] - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setDefaultExecutorConfigs" - }, - { - "inputs": [ - { - "internalType": "struct SetDefaultUlnConfigParam[]", - "name": "_params", - "type": "tuple[]", - "components": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" }, - { - "internalType": "struct UlnConfig", - "name": "config", - "type": "tuple", - "components": [ - { - "internalType": "uint64", - "name": "confirmations", - "type": "uint64" - }, - { - "internalType": "uint8", - "name": "requiredDVNCount", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "optionalDVNCount", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "optionalDVNThreshold", - "type": "uint8" - }, - { - "internalType": "address[]", - "name": "requiredDVNs", - "type": "address[]" - }, - { - "internalType": "address[]", - "name": "optionalDVNs", - "type": "address[]" - } - ] - } - ] - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setDefaultUlnConfigs" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_treasury", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setTreasury" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_newTreasuryNativeFeeCap", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setTreasuryNativeFeeCap" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "_interfaceId", - "type": "bytes4" - } - ], - "stateMutability": "view", - "type": "function", - "name": "supportsInterface", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "testHelper", - "outputs": [ - { - "internalType": "contract TestHelperOz5", - "name": "", - "type": "address" - } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "newOwner", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "transferOwnership" - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "treasury", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ] - }, - { - "inputs": [], - "stateMutability": "pure", - "type": "function", - "name": "version", - "outputs": [ - { "internalType": "uint64", "name": "major", "type": "uint64" }, - { "internalType": "uint8", "name": "minor", "type": "uint8" }, - { - "internalType": "uint8", - "name": "endpointVersion", - "type": "uint8" - } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "_to", "type": "address" }, - { "internalType": "uint256", "name": "_amount", "type": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "withdrawFee" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_lzToken", - "type": "address" - }, - { "internalType": "address", "name": "_to", "type": "address" }, - { "internalType": "uint256", "name": "_amount", "type": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "withdrawLzTokenFee" - }, - { "inputs": [], "stateMutability": "payable", "type": "receive" } - ], - "devdoc": { - "kind": "dev", - "methods": { - "getAppUlnConfig(address,uint32)": { - "details": "Get the uln config without the default config for the given remoteEid." - }, - "owner()": { "details": "Returns the address of the current owner." }, - "renounceOwnership()": { - "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner." - }, - "setDefaultUlnConfigs((uint32,(uint64,uint8,uint8,uint8,address[],address[]))[])": { - "details": "about the DEFAULT ULN config 1) its values are all LITERAL (e.g. 0 is 0). whereas in the oapp ULN config, 0 (default value) points to the default ULN config this design enables the oapp to point to DEFAULT config without explicitly setting the config 2) its configuration is more restrictive than the oapp ULN config that a) it must not use NIL value, where NIL is used only by oapps to indicate the LITERAL 0 b) it must have at least one DVN" - }, - "setTreasuryNativeFeeCap(uint256)": { - "details": "the new value can not be greater than the old value, i.e. down only" - }, - "transferOwnership(address)": { - "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." - }, - "withdrawFee(address,uint256)": { "details": "E2 only" }, - "withdrawLzTokenFee(address,address,uint256)": { - "details": "_lzToken is a user-supplied value because lzToken might change in the endpoint before all lzToken can be taken outE2 onlytreasury only function" - } - }, - "version": 1 - }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/SendUln302Mock.sol": "SendUln302Mock" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/MessageLibBase.sol": { - "keccak256": "0x14899a4398251439938d6ef8a15ea8c6acdddc98a7b0066d7e63676192dea0d1", - "urls": [ - "bzz-raw://3998d03de7025c2c601a4fdcaf9475d12a1ef661fcf1a685ece84fdde6498cf9", - "dweb:/ipfs/QmReknRbiGAiPqq9toKyXKo6hUKXrQPJyyS6LnTGjiDKoY" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/ReceiveLibBaseE2.sol": { - "keccak256": "0x2fdbd1b13751a264cd6e7fac518a2685b15c968806c03f1d18b177fc0526e9a9", - "urls": [ - "bzz-raw://600af48bb67939b5f4a3a00c76863ee290a55325ea8697f7cc4b46321ab26ef2", - "dweb:/ipfs/QmdRigYaB6TXczjtVkvwpUEBwvvvDuymFoViMCB6xQPYUU" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/SendLibBase.sol": { - "keccak256": "0x400eaa11c7d50b4c25b7625290ff00937b6875ad3986b353c37a4e62b5a834b1", - "urls": [ - "bzz-raw://1f51eb0785d3630815a9d63de1c1331fe966df4c3f2fb6750b8da7be9e9743a4", - "dweb:/ipfs/QmaAEf1kjhhff3AUhRiPm6ikpk2YMMrpKc2ccYzNs7waBy" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/SendLibBaseE2.sol": { - "keccak256": "0x90ada11d0a330732c56b989e59c8272b70f956a5d7be2cf209d6d51a51d35a9e", - "urls": [ - "bzz-raw://0abc7a6d07ec40a3a922256ad05bdd6eca10550d85bfd2e67147473617bb0497", - "dweb:/ipfs/QmRDphmFhx1scRJXcusg6pUhVQvp941oCJwnHGAPdrNY4T" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IExecutor.sol": { - "keccak256": "0x2fd26e454b060ede7afa15f8bbc67bd43f9181b6405ca411d36c8b538be016af", - "urls": [ - "bzz-raw://cf2142e83214bb392f69ed14266718cfd803f849a7239ee9a1950ddf66553696", - "dweb:/ipfs/QmSZ2mPMZqWBetMU8VESKtxy7UdSThUVmJmTFMHEyKLTGZ" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IExecutorFeeLib.sol": { - "keccak256": "0x801d12eca6d6b232fb91d949cdb70a4c547c5e27e73555f2f1eb9e757c639bcc", - "urls": [ - "bzz-raw://b61bdffe26ff3902edab3efb0b5af3808ec9e28d72db95b77128502b9bc7638d", - "dweb:/ipfs/Qmcyf3npDDEq28b9XqmXgSGyQegj2cxUZQ3UekSNf34g8M" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroExecutor.sol": { - "keccak256": "0x3647af317ee126b1247a782abb30e59ec5ab21b4945f1d3b4370d1fa3c1bf347", - "urls": [ - "bzz-raw://5b51cd5e7347ee869a06bd57a698f40e4a901ec7fdcb27f0ef485e4a0e1e9be4", - "dweb:/ipfs/QmP2Nc73veRzLGdUahkjhQAiKR9ZWYiUtSGwoMB1sPXxUp" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroPriceFeed.sol": { - "keccak256": "0xb4df72798a64f5ea44775b526e0c417c3de0ffc661659d7b31d5b28567c6fbcc", - "urls": [ - "bzz-raw://30ca5fd5e3227a7bffc51654ee3bfebdd591a131f86846ac42dea8a40c5cf1d8", - "dweb:/ipfs/QmXNmQCF8TZAFpUxgPa1rgWt4ktsBV38A8Hax7TiYLgybW" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroReadExecutor.sol": { - "keccak256": "0x360936885f173f816ffb47e555d480928e74eb1ad54a76af0f4595ecba2d5657", - "urls": [ - "bzz-raw://16b5095e6439b1e416eb70571a1dd8f4f21a0d77b19c9e510ca289d99e5e09ab", - "dweb:/ipfs/QmZ2mjQDQ35gJseyzmQhik4cBgN2ESADzofFNVFvgS64hv" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroTreasury.sol": { - "keccak256": "0x2aab2a3cf50e20af56d9204b1367d52a47abba0b0c7c21f304d413de1ced6345", - "urls": [ - "bzz-raw://f8b603b5e5e62c621715f8449280af240a4add8721c4ae8f5e8e491507f6e4c5", - "dweb:/ipfs/QmUQ7Ti7CPmKnRbQFN9TLvVbeZhsi1xUjqZPTJ36dCZ6y8" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IWorker.sol": { - "keccak256": "0xa6b61913767305227576cc6da5067de4208f09a4f58bfbfe32beafdfae9869b1", - "urls": [ - "bzz-raw://b7fce83bfb831f383606aee7f5ff68a330c8526bb1036f9ba0813d3e4fa8d534", - "dweb:/ipfs/QmR7zAqJkmCgBj6sguS8t2WthY5k6FwsakgH4UY11uqD4n" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/libs/ExecutorOptions.sol": { - "keccak256": "0x441b723f2f597be2ec2bb361fcf3f11852c23534db1cfa7d2ffff7e61d228e3c", - "urls": [ - "bzz-raw://636817d20f90f75032e35376256cf5f4d2a047d6541b45f644d82a2e4dc8f1eb", - "dweb:/ipfs/QmcEFRxCmmm9hKbqi7Powj6ATbw4JXXJW4rxfwMcxWsDnT" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/libs/SafeCall.sol": { - "keccak256": "0xc3b7b7927472f7c1ca9703af310e9050c798afaccf399ad0f131e179b8582c8d", - "urls": [ - "bzz-raw://e5be13af32ff6b371985d405bc6fe8ac2faf5445bd88fda2dab4b869f66e3f89", - "dweb:/ipfs/Qmd21k4H2tAHKrpiuHUbH87eNtHLLJzHj9ZCrMh8AKfDHh" - ], - "license": "MIT OR Apache-2.0" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/ReceiveUlnBase.sol": { - "keccak256": "0x36c93de122bbb74ae31e3eacf567c0a3bc649ed3ebb2766c76dfa93aebcace44", - "urls": [ - "bzz-raw://e83bcaa80e2715e68818dd53e4dc6ad8e665b8249d69a08cf2d2635b9757fb79", - "dweb:/ipfs/QmSKh6NgaTrTSa48gDzGGqGNAcs5jVEHgZSzZzbuJSEsxo" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/SendUlnBase.sol": { - "keccak256": "0x6d9962ffa476ac2efb78f1415bb2f650a30eedeef2b75fdab0aeafaf3e8da6a5", - "urls": [ - "bzz-raw://21f32c56b67d2e770444b809c1a85a96627194c605ad317d482dfc5b6ce7e8c2", - "dweb:/ipfs/QmP5tzoMDzTdduEcSpYHgg6WCHLQGuc1djDMFUBycJPLCU" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/UlnBase.sol": { - "keccak256": "0xfdb1d04f4996c0a9d35abfbfcf10d978da638885eb77d0a9dc35cea5993074e3", - "urls": [ - "bzz-raw://776d58d88d13b058f236cf18c32b4b9718a021513fc4e198287f4fe18ec5aba4", - "dweb:/ipfs/QmdNX8jJu2aXJ8Dpbt2ohfhT8RKQLuvh58sW6SAXcUTcV9" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IDVN.sol": { - "keccak256": "0x6becdfab6c1fcaf98f402bee48495895e54825f9d6eef6e292dde0caed628284", - "urls": [ - "bzz-raw://2273341033856737cd46704a1a769768feae696d0e7a912f5be9de8ffdd2180c", - "dweb:/ipfs/QmY1xBAmMX9jND1HAb7tDyZNPgFReXMqs1vtmHbShKZFQY" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IDVNFeeLib.sol": { - "keccak256": "0xed4a8e77148328132d8f4f2726c4aeec6b490cf03a1d5940bde0ab8d72954de9", - "urls": [ - "bzz-raw://7b07802ca32bf10f68e51da872fb358807446dc2242314374d226493a6e9e7dc", - "dweb:/ipfs/QmfSwWPLgitDy2a9S3mCNBDk6kAcK9n186Dtvj7qg84i12" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/ILayerZeroDVN.sol": { - "keccak256": "0x308e77078242fd5c5746ec29c12e618249134f9e4377c0028ab8f59c07a6014b", - "urls": [ - "bzz-raw://2f92cf397a8d26864ac92dfcd1b98e92a32c47f556a62c5e6dc1618734c1caa3", - "dweb:/ipfs/QmXN3XJXEKq5djV6HeM6jrLycmJPFhMhecsYZ2TaRsQmhg" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/ILayerZeroReadDVN.sol": { - "keccak256": "0x759a3ee7614c2de54b152b0278845f91ac9760d8c22045b2fee89e3e744402b8", - "urls": [ - "bzz-raw://7a2dbf6bcf5bfab408f18c104b34c390e8bfabb0eeb1a10e3a9c0fb14c8c61d5", - "dweb:/ipfs/QmWxmRbDBkbhGmNsRyXqQXB1QaWRS4qvh6a8achh8DQPKR" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IReceiveUlnE2.sol": { - "keccak256": "0xcdf7e690e5d5c0a3ec26a0d7b1a7fe49c7d16a3634721c3944f77d13ff5d4a91", - "urls": [ - "bzz-raw://bd32a05dde1b83be1ce64fcfb9495d8b9bf0c5b3a5b521ac6c214e87e32f3cdc", - "dweb:/ipfs/QmcDKTor8EQf3cbiWYmeFb9qzUM8JGPzGGN9qJnYjP1nN7" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/DVNOptions.sol": { - "keccak256": "0x2beee03cdf59a9bc72e94d08b69cb2e908725f4ceabb48651494938100e21e35", - "urls": [ - "bzz-raw://d88e121a39e74309f3575417df2318e2d2ee8bc8314e68dbf78544a9c393b141", - "dweb:/ipfs/QmRojBRAyENK21HnjevAWeoZZxtWkYZubB9Y78vCJPYeU6" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/ReadCmdCodecV1.sol": { - "keccak256": "0x52fbab4a114ce9defb2ffd57c0a978eee438b2c232862f7e20475e0dcadd4eda", - "urls": [ - "bzz-raw://a4d5d4e186e3f2a916ea02c2d1d0761069ab1a5c0d6f74719bbf3501a7ccb899", - "dweb:/ipfs/QmS2e12U9Fap2EK1CmSBTccL4PCKkHNdKJn2bXCqqKdbRn" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/SupportedCmdTypes.sol": { - "keccak256": "0x6b2534522c163714e499041ecd06aaeb93857373cef82cf2752f162bb7c69f9a", - "urls": [ - "bzz-raw://bf6c3545c3b9505692dbfaa29b40cab5ed9dc9b65e5804b6f47b5a76596120e9", - "dweb:/ipfs/QmNs98oRaMvpYhLCQ5yU256eYNEopFTrLRjjwm3gL4foQ3" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/UlnOptions.sol": { - "keccak256": "0x5df07fef16b20767f7524c367d90f696c12e8ce0e4fde7aecc9d83fb2b6b0e27", - "urls": [ - "bzz-raw://0997203f57d736e56ebb3d736550f1c7ff7950c8df0574c7abe95e22f847b850", - "dweb:/ipfs/QmZBjkH1vaPLyN3Jx9kGfVZKuTdfVWJfJVLSPok8SpjGbT" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/readlib/ReadLibBase.sol": { - "keccak256": "0x7d312ba1e6288cb201b211f58b814eaaa0b5993721475fbc64321b0e7a2c74d3", - "urls": [ - "bzz-raw://dfc0dce9362eca0f03b51e0e808389c8bf51fda901e6ca58da169f165e4fc3c8", - "dweb:/ipfs/QmSXAQ3veWf6gPXcgpX1XLZW9SyLQjBjCSdsFiQTttLNac" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/uln301/interfaces/IUltraLightNode301.sol": { - "keccak256": "0x47f8ebeaa7d96a6f337a18c46e3c532da578c7cb0a13fb6e6f014286b991902f", - "urls": [ - "bzz-raw://d51f208b931be54e0ae1801c71c0756251d8c26f8d9b7911be1ad57b3d4a5691", - "dweb:/ipfs/QmWqjst7jnYtSXQ9pakYHutDvENKLyqNg9nPfMxTH8p2Ed" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessageLibManager.sol": { - "keccak256": "0x64330e51de72e8d38cfc0eb5527d36baada46df4bc14233d3a8ecaf98098d69a", - "urls": [ - "bzz-raw://49aa45e5a26fc62e7af569cf915be8344adc78dceb6871c4c14bc5d115e59241", - "dweb:/ipfs/QmbTuW7kzPDYForDEPnaNQi6ZrmWqDxGVnHFiugnvTyq9K" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingChannel.sol": { - "keccak256": "0x8ab8cb12c8beba699c1a7f22ffa812ac553f7038326d0c0d0af77253005cfe73", - "urls": [ - "bzz-raw://7c7cba4ae16d0ca46ee0a365a204f7257ceaa892224604bf7c8e65c44737e46c", - "dweb:/ipfs/QmbQX5hJDKMwKdoo6QkdcusXQXH54SVCPe5hM1ycJZsg7y" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingComposer.sol": { - "keccak256": "0x20d36578e810e75346daf064813b76a177087214cae77628b1f9d43798cb52d1", - "urls": [ - "bzz-raw://475b6f3f1ba5d981d0c5f90b9e892d4f9f539f3b12196639b95770b5be4dbf6a", - "dweb:/ipfs/QmYyGrnR3vDt8Dqa2paQwTG9qrD6anAGFrDZmMra8KGC6s" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingContext.sol": { - "keccak256": "0x9616f3bd0d7293c9723f2ddf86f9f7030fbd99213c9748557eec8f6d13b25420", - "urls": [ - "bzz-raw://205e713f5af46f52799e51774ac74dbeee4056de6ddba3c4d78a327536426c54", - "dweb:/ipfs/QmZ2ZqDwxdjpJbh91qwMfRhhQu4AMEsjUcsTEsdRV4NAys" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroComposer.sol": { - "keccak256": "0xfaca7205d4211ee9208a7e59171e2301731f3d2a20c49b4a839821871f5fdd49", - "urls": [ - "bzz-raw://f254bc60ac26687b5320a43a556e30777b0745abf7cd64d5f4720d9b1d1f7fdf", - "dweb:/ipfs/QmRSJEZVgxaC3L2DdE6s8P5qkYfM3V5JMeseeFJJqGR4xz" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol": { - "keccak256": "0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3", - "urls": [ - "bzz-raw://bacc29fd3866af71e59cb0bdc1cf82c882a4a7f4e2652fd413c9f12649762083", - "dweb:/ipfs/QmZh2toLnrQDWaNYhS5K4NoW7Vxd2GdZx9KA77vKEDLAqs" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol": { - "keccak256": "0x9641abba8d53b08bb517d1b74801dd15ea7b84d77a6719085bd96c8ea94e3ca0", - "urls": [ - "bzz-raw://77415ae0820859e0faf3fabdce683cce9fa03ea026ae0f6fe081ef1c9205f933", - "dweb:/ipfs/QmXd7APqoCunQ2jYy73AHvi5gsZofLpm3SzM6FPo7zRPfL" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol": { - "keccak256": "0x5cf5f24751b4e3ea1c9c5ded07cedfdfd62566b6daaffcc0144733859c9dba0c", - "urls": [ - "bzz-raw://cae7e35007a714f007ea08045ef7c0cfa6c91fd2425b5028b2d49abad357a5f0", - "dweb:/ipfs/QmcDBs5tsiyB35b8cwzWQWNnpkawb3uuHRaqE77Hxm2tve" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol": { - "keccak256": "0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc", - "urls": [ - "bzz-raw://d8ff6a8a89297fa127f86b54e0db3eba1d6a6eeb4f6398d3c84d569665ac8f1b", - "dweb:/ipfs/QmVSwhw6xFDrLRAX4RXaCM47yBaBtac4wf36DYEq6KCTvT" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol": { - "keccak256": "0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972", - "urls": [ - "bzz-raw://7e1b245d58221d16d8b5e0f01ef3e289a24a7df1ace3b94239e4d5b954ad5927", - "dweb:/ipfs/Qmappsgp7PCY9rSSNE9Cdn4BTRX591WfCSEgq2HxhA3z6S" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol": { - "keccak256": "0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901", - "urls": [ - "bzz-raw://b18b23a1643fc6636c4ad9d9023e2e6ca2d3c2a4a046482d4655bff09950598d", - "dweb:/ipfs/Qma6G5SqiovwrMPfgqTrRngK1HWW373Wkf9c6YP2NhXpPk" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol": { - "keccak256": "0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e", - "urls": [ - "bzz-raw://5173fc9143bea314b159ca5a9adb5626659ef763bc598e27de5fa46efe3291a6", - "dweb:/ipfs/QmSLFeMFPmVeGxT4sxRPW28ictjAS22M8rLeYRu9TXkA6D" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol": { - "keccak256": "0xf1c07bc61e7b1dce195ed12d50f87980fbf2d63cac1326fd28287f55fe0ba625", - "urls": [ - "bzz-raw://060f10ff7afc33c1c2f2b4b5ba29231fd3c943146488084d0e4ab99fce991d97", - "dweb:/ipfs/QmaSsefAqqEqtf8FgFUmDYMwTsAty3X1pqDb6SiFvry6B3" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol": { - "keccak256": "0x2ebbcaaab3554edcd41b581f1a72ac1806afbfb8047d0d47ff098f9af30d6deb", - "urls": [ - "bzz-raw://2d4b2cf5c3b16dc76c6767f285b57c0af917972327b2be3f7cba5825402f5fc1", - "dweb:/ipfs/QmQQWiHE2jKEDbjzGutSoZwtApSXYfLqZt5CxEpFj8xyvT" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/CalldataBytesLib.sol": { - "keccak256": "0x5c0db161cef6603c3b256d4220f489419e7478ef775e52a80056654129c61875", - "urls": [ - "bzz-raw://a33245d0fdd3992bb56b31d1840108d36bb46c8d617b659ef1af8dd7ed86302d", - "dweb:/ipfs/QmWyBqT7Tdrfn5zz9xYM3V1PBtfAZAVwwCrrKwwfi3wMQK" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Errors.sol": { - "keccak256": "0x35bcd6ca99c4c8d9f7d8413d1b92fb4a4d4a420ce3bf64b0fb01e68e6bcf2fa7", - "urls": [ - "bzz-raw://0ac14f98563f9c610c936c93e71eff657efaba1e1d892be6a215aa5cb1f63a24", - "dweb:/ipfs/QmVZZ8owwfDGLQTAzQJJqmYY4KsrChDagh5GBK7rChT5wb" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/GUID.sol": { - "keccak256": "0x8a44524af7deb96593f6b5606e9973654a113e1687809f2e45d4a91ba89862d5", - "urls": [ - "bzz-raw://32dd0b5d1946e0cd5c7b728086aafac50a62c061115afb8b41254589c8a6732b", - "dweb:/ipfs/QmR9QqtiAUPRLaRVv5wnth3NGPhdWB8rJmWYfz3o5Z1mWj" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Transfer.sol": { - "keccak256": "0x621d6dd5b8b7e827351459fff4ac87c16ba4656757592cf67de8b199aea4cf9a", - "urls": [ - "bzz-raw://345aa8c007ed8b96a74260d289545713f1d7180df270d67687e3a540a61fa5c0", - "dweb:/ipfs/QmNWCvpqSuar6UGLDVshUc7shUv3pt1J5FTf9VyZZ13wXL" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/BlockedMessageLib.sol": { - "keccak256": "0xb2b55968b26294139742adee6c155897c8334f4c6bf72f1940456cc84e6fbab9", - "urls": [ - "bzz-raw://e758a1fdcea4039b19f1252e4e2958f4a0e05517eb3e151784431533446c225f", - "dweb:/ipfs/QmRBG345abgyUeTnSpuxdK1WbK5pvwhSmvBEgW1mnoYqTq" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/BitMaps.sol": { - "keccak256": "0xaad3c72ef43480d2253fd48b394e8fb7286d009991d2bc4e61be58ce48ac5ee9", - "urls": [ - "bzz-raw://b8c02b14f954416ba2148b389c87da8378ac8dd16ba3d458cbbfba8b0fd8639f", - "dweb:/ipfs/Qmd2EEQhYL2VmgJi1V4uiHM2WcYxF9iBtxSgcFkbS21rQD" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/ExecutorOptions.sol": { - "keccak256": "0x621c6090fc432f94a99f677a95d72b75f56db89ddc5fc870669777a313587c28", - "urls": [ - "bzz-raw://69086166f16d29e30c5eb9ca2f97afb27569afe619807d79736833a809a512d2", - "dweb:/ipfs/QmcZqXjFuVdTrfbteKBF3GuEpjVFZ2YNZTa3J87dyLsqav" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol": { - "keccak256": "0xc84cf1bf785977fe1fbe7566eef902c2db68d0e163813ebe6c34921754802680", - "urls": [ - "bzz-raw://de686666fc16fa432d4208d85cec87dc952faf3e481b683b9adf4b4610db4b09", - "dweb:/ipfs/QmdmQeopzmxqRzi9DNB4EJDrYUXFfD7fUhnGhSni4QejUW" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-v1-0.7/contracts/interfaces/ILayerZeroUltraLightNodeV2.sol": { - "keccak256": "0xf1f36bbbc40d03b96affa151affb47da75a1b69dc79f4b311841a072d12fdd22", - "urls": [ - "bzz-raw://9f4f188c2998ecbda28a389ad8038da15c2260b1df6a8d135b3d96422e292fda", - "dweb:/ipfs/QmeThR83tcaM4CmxQ2AamTafsgjcbGMfZtYcDHqw2CcwKa" - ], - "license": "BUSL-1.1" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/OptionsHelper.sol": { - "keccak256": "0x729ce2290d16a45a16ad936263803db6a6bebcfba5c063ebe0f0fd284ba828c0", - "urls": [ - "bzz-raw://7494875394fc968684761b22bb5fe05789f8d84ba07b2e0ab579ce0afe7aa973", - "dweb:/ipfs/QmZNrexRXL3ef3UnES5e8JcdyMJ5HVftwGKQjGC5CwNg9Q" - ], - "license": "UNLICENSED" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/TestHelperOz5.sol": { - "keccak256": "0xe60b21a345bb1c2e9ee2fb7301398d342da0acc3a730b442106a2ad9478f7a63", - "urls": [ - "bzz-raw://ee7e0a47ae666a16e33a51f946da4fe549e8f4c6ea1f1978850515172c44656f", - "dweb:/ipfs/QmR2AZ9pYiwMCV4wPPVaGGPRJEjuBoFjJEesHtbAYhNoFq" - ], - "license": "UNLICENSED" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/DVNFeeLibMock.sol": { - "keccak256": "0x4c2e212f73a1c2a2989af947eef715ebacb11a80d55e5fd18a89a905790971b1", - "urls": [ - "bzz-raw://30eb29a81414780828903f5320367e89020af5a4055b768e2be08d43605b1688", - "dweb:/ipfs/QmeC5bVtmaY6tn6Z2XpVFXAkxVWQCQUzKbP2V9nPdv3vCr" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/DVNMock.sol": { - "keccak256": "0xdafd7da964b6ac8637d543c30370739bb805f7e10b42043444689240b5c27b3f", - "urls": [ - "bzz-raw://154067632b4799f49c0b3a8c5304499f60b2c232ebd17c21912efdb72421bdab", - "dweb:/ipfs/QmUEr6VsNt2odnrL3xFrLKwZTVLkLXi8BDzpPWeiCxC63T" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/EndpointV2AltMock.sol": { - "keccak256": "0x026b2f530b336ee237f37dde6f617acefbbf74d933d2a80da4216882f78be1a9", - "urls": [ - "bzz-raw://097a9fdd5a321e6e8455a1db00f2abda6e810c31ce47d1bced9e574be262a28b", - "dweb:/ipfs/Qme17zGk93k5BghCWFXqeqppVahH4dHuw7U76K4EcJxsY1" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/EndpointV2Mock.sol": { - "keccak256": "0xe9096c53611537a121589b56b882fc4dd797d5cac60def708f794a15e3ca98ff", - "urls": [ - "bzz-raw://4092d5dd582b48a5f703e4361fc5fb66050b5fe3253891175275dc832bc8e045", - "dweb:/ipfs/QmXSTJJNx4rn2ByCaE6vxiHnkm366ZU7dScYH1JsUbVZ1V" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ExecutorFeeLibMock.sol": { - "keccak256": "0x4a47aaf41049710d5f05fcc66885cacc0dabc1864778b56ac75a59b61eef5a01", - "urls": [ - "bzz-raw://c9b8c26b38cb138c3225efbab8b1d2e0f43343798658a0f2ed9669c16e5a97ff", - "dweb:/ipfs/QmV21G7Qwoi9gXYT8bKXDwnQDvjdZCAo2M9MqTKq4nQU9U" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ExecutorMock.sol": { - "keccak256": "0xbcdc4500270cd5496f10760ffe9e0444d23e454dd0ae2555e0661acf22fce96f", - "urls": [ - "bzz-raw://b816999bcfef5586b5e80bba21584b821fd7f7b32c276492adee530ffa83bb73", - "dweb:/ipfs/QmXLV8ieYdrTBERajBCVuMzknFyPHJjnw7MGkzULAdjdt8" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/MultiSigMock.sol": { - "keccak256": "0xc7c90e073e52af1da6c07e3d3f7477b064a89e78935c16e9872457df503c6830", - "urls": [ - "bzz-raw://cef1ae2d517e152616aea7f8f5c15fa1fbabbec8896a9c30a9eed35fb56b4f2f", - "dweb:/ipfs/QmeitPMQht2WfbR9ZLzwKWgThamdsJkobeaWo6ojTCoQG5" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/PriceFeedMock.sol": { - "keccak256": "0xd8f419b25c648287b5b7f0923b069b2449c51e807c9153df39445f2f83e55f44", - "urls": [ - "bzz-raw://bb300a5bb62655073c7aa9cd2221e60e59ce904a0d73f7f5e06af7c9df3445ec", - "dweb:/ipfs/QmcYb2qFevymfkWhTqGaNH5HwK9MMUixzAKJJAdNQHSCbw" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ReadLib1002Mock.sol": { - "keccak256": "0x1403b7a91b185fd8211f00fa380a0b8918e92e663c403a1dafa30f1667091fdc", - "urls": [ - "bzz-raw://7494444260a981ae9a9e11cd8981fad35a6b45a9c09cf72c05aad88ee191e7f0", - "dweb:/ipfs/QmaTyujm37PsCobQ36ootD5xVgKyBYqeUTdTJij9x3oaN6" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ReceiveUln302Mock.sol": { - "keccak256": "0x8e60b01e9bc801167b374dc119b41832d546afd43c143a0cd15ab1941198e121", - "urls": [ - "bzz-raw://bb1512762417dda9cd81fd9b41f590fd05888358fda1c2ab7e79e0cfabf61ec4", - "dweb:/ipfs/QmPAgBwdjLz29vE5L1Jth1Wvx6TTM1ig97amVtAyDFF61Q" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/SendUln302Mock.sol": { - "keccak256": "0x0c5cb54ec6b18e77aa653f7d774ac9d010684dafc96794d1d02f12b6885cc348", - "urls": [ - "bzz-raw://24c5a8ba8d92c16ec3047229167528f57b38cbd64882140014126ca51ab14574", - "dweb:/ipfs/QmXQsMDtZ3qNmjnr2LYgctBpPKxffuC6EeWHvFUtLBS5st" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/SimpleMessageLibMock.sol": { - "keccak256": "0xe6c93840c612592686732dd516550816eb77d6cde92514220eacb72443dcb9b9", - "urls": [ - "bzz-raw://a6a00fb60b7ac66e746f0471c2262fc98febafeb8acad8785d38ce1ddc4cc991", - "dweb:/ipfs/QmboboJskbXBbsyAGGRbW4JQCPJo9WiLFy7nwQxGVS9UhZ" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/WorkerMock.sol": { - "keccak256": "0x6c5bc31c117033dd35fa7ab3b13b1647a4b449c5f5b4cbff41bce8a63529ab97", - "urls": [ - "bzz-raw://01aa1d3f3b8e2fd4b544312d96916b16b97e01ab740e2bae1137723b2f1a31b1", - "dweb:/ipfs/QmVMemJ4MSgi6y9NxDdSeB6QbJRtCWojJNxzs3CRLT56EA" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/test.sol": { - "keccak256": "0x8758531bbac3972efcf1fa46383dbe1d276406fe527bc7abb2f236486278e83b", - "urls": [ - "bzz-raw://1f64264d61506847acf8761e84aff690cebe830958eac00bac7924d8be569240", - "dweb:/ipfs/QmSekDJvJ82MZAmr63n7YvfLzQ7gS4NLSHPmHL3GN3rw8k" - ], - "license": "GPL-3.0-or-later" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Base.sol": { - "keccak256": "0x4ff1a785311017d1eedb1b4737956fa383067ad34eb439abfec1d989754dde1c", - "urls": [ - "bzz-raw://f553622969b9fdb930246704a4c10dfaee6b1a4468c142fa7eb9dc292a438224", - "dweb:/ipfs/QmcxqHnqdQsMVtgsfH9VNLmZ3g7GhgNagfq7yvNCDcCHFK" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdAssertions.sol": { - "keccak256": "0x1a0dee4d8b2c81e9318e87dd85ef009467ebf7dba6575530d1fce94d34dbae60", - "urls": [ - "bzz-raw://ddd790c86ddde1013d1f7a552a80168eacf2e9244077f96799180644ad523a5b", - "dweb:/ipfs/QmYinBFt9uEVFXP9ytT9CDoNpzWieQVgLWRFRNiypMzJaL" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdChains.sol": { - "keccak256": "0x598b85609125830885b8fb54a18f447d04f8dd799aca3de81baef35eb6b783c0", - "urls": [ - "bzz-raw://c9c128aae4f5668d8c8f71e9e6d9379d8451b8713d139cb66a02d23bc1c75f69", - "dweb:/ipfs/QmVRihXHWi2yg9CcAhzKf63Y7m6gWz4P1giGMhXUHT3DFu" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdCheats.sol": { - "keccak256": "0xb72f3519e0bf7d31df5d68557525f4fc55d861c3fb3b0f7793144ef7c94cbeb7", - "urls": [ - "bzz-raw://f3456d0f78e6f61203fa7871ba2df0d35925f10db3baee14be623ce2a35b84e2", - "dweb:/ipfs/QmWE6QQSBvJifHMraisBTrf1x4WCwrDoTPLX8UKajTiApc" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdError.sol": { - "keccak256": "0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77", - "urls": [ - "bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6", - "dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdInvariant.sol": { - "keccak256": "0x67299bfacd77fddfa2a67b8e2b901e0e333618a4975fb94850b07475e51f6de6", - "urls": [ - "bzz-raw://1b61121d310f4053ce344b345b4a9ccf43b059daf9097ec2647f594beaca896d", - "dweb:/ipfs/QmZUCoTtXBM9zfAZVbj2dFPPnKaV1CSZzXE7zictyg3Gfz" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdJson.sol": { - "keccak256": "0x8f914dbd016bd0e318fe2b8bd556fbc8256c7cddc24e3e4fcb9f3c1c1935592d", - "urls": [ - "bzz-raw://19e704df493dde38323303b07d18cadfeb4dcadf1ddc2301add4aea9474fbb5e", - "dweb:/ipfs/QmZasuGiLK8LHwWtvpqEBxUR6QFY6GdzLMTJ9q7CMf8PNZ" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdMath.sol": { - "keccak256": "0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2", - "urls": [ - "bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92", - "dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdStorage.sol": { - "keccak256": "0x4298f3f4cedaedb07029820b1daad2c03af45379559392201f7bf3ec71105811", - "urls": [ - "bzz-raw://6e062f36d8d1ae3c383ef8975757926eaa9c4de3a92b5f1fe2d12748bcd8db32", - "dweb:/ipfs/QmcWkv3ia5Ew4DZNcudMNSTNXZ3W2QiXTZunRd44e9BT8z" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdStyle.sol": { - "keccak256": "0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d", - "urls": [ - "bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8", - "dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdUtils.sol": { - "keccak256": "0x502b18a4becda6ecd91fa8b419d8034946bfa80e6cc7f6497f51f8565bfadae0", - "urls": [ - "bzz-raw://bf499ee483a1dfd02023d4ce78ed4029a49794ccd5b849aaab912faea0d2ba61", - "dweb:/ipfs/QmP6hwNZW7sYbQK9fBzuZWxfLm6Swx2nKzvZ54qWNqQkzX" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Test.sol": { - "keccak256": "0x39b1729d5868c8e94ab8af16751eb500a17fe3870dc627d2b7ddcd5df18d7ad0", - "urls": [ - "bzz-raw://1568c82aff125cc4b0fc168be9d67ac313f469a3c7405c5493caecaaaecfb765", - "dweb:/ipfs/QmXByuZReJsdu1jDcxj1FcmpcUnzoBcqybn9kWgDAECWri" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Vm.sol": { - "keccak256": "0x87ba9f3edc254e529db9e3129c954391adcc7fc8574203767979d8d2f1e724b9", - "urls": [ - "bzz-raw://4d16c08d80d9f2869deb6350642cf5af624d21fce6b3b023abbcdedc62e195fe", - "dweb:/ipfs/QmURpnnFECPKt3i7P7jQRZpr4ZBXjRGcZ9KzcbKzsgYR2W" - ], - "license": "MIT OR Apache-2.0" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/console.sol": { - "keccak256": "0x91d5413c2434ca58fd278b6e1e79fd98d10c83931cc2596a6038eee4daeb34ba", - "urls": [ - "bzz-raw://91ccea707361e48b9b7a161fe81f496b9932bc471e9c4e4e1e9c283f2453cc70", - "dweb:/ipfs/QmcB66sZhQ6Kz7MUHcLE78YXRUZxoZnnxZjN6yATsbB2ec" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/console2.sol": { - "keccak256": "0x954646445d1014c3cd85c7918f5e7adeeca5ee44b68c00bafa237e597a4e35ea", - "urls": [ - "bzz-raw://516fa3be52da4763147175bfba4be0aa011fadbb0c1afb01f97265bd4cee7973", - "dweb:/ipfs/QmdixAyMJefx7qePChgdxcBH5MxhmN7vsqPuPLx3CgrVmF" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/interfaces/IMulticall3.sol": { - "keccak256": "0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a", - "urls": [ - "bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0", - "dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/mocks/MockERC20.sol": { - "keccak256": "0xd8703f49411737ecf8d411f8fa66b2bf0ef972ba28b7a4adf1748c63df1bf682", - "urls": [ - "bzz-raw://b7c10a6b8112f6fe3cdccb6240ecd382765216b1a82e9a86a0fec8f5e09eadd1", - "dweb:/ipfs/QmdRvPCU4RkjMHsTu3Ric1ZEF1AWDNLp78unFC5aWP17xq" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/mocks/MockERC721.sol": { - "keccak256": "0xa24468244abb66e663fb7eee6463cb518eb9a7c14e1071548ff564cca825bbca", - "urls": [ - "bzz-raw://145585a2194aa6e2d30edfe709ef2814e20b1b4540469aa6a8f50c841fcb9070", - "dweb:/ipfs/QmZrwbvtpbtTxqbW5phUrwb3F1tBiPSQc6jZJAXBfsBsAh" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/safeconsole.sol": { - "keccak256": "0xbaf41fdc6c54297e7cd8250e48b0f20eaac918e342a1028cef3f9a52ac086381", - "urls": [ - "bzz-raw://a500ad81dea226f9910e6b50f99a9ff930105e393a692cbfb2185e4cdb4424ae", - "dweb:/ipfs/QmVbUQpXNMmMWRiy4FvBNczzq46BMGfUoBikvSHNiCxVTq" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/access/AccessControl.sol": { - "keccak256": "0xa0e92d42942f4f57c5be50568dac11e9d00c93efcb458026e18d2d9b9b2e7308", - "urls": [ - "bzz-raw://46326c0bb1e296b67185e81c918e0b40501b8b6386165855df0a3f3c634b6a80", - "dweb:/ipfs/QmTwyrDYtsxsk6pymJTK94PnEpzsmkpUxFuzEiakDopy4Z" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/access/IAccessControl.sol": { - "keccak256": "0xc1c2a7f1563b77050dc6d507db9f4ada5d042c1f6a9ddbffdc49c77cdc0a1606", - "urls": [ - "bzz-raw://fd54abb96a6156d9a761f6fdad1d3004bc48d2d4fce47f40a3f91a7ae83fc3a1", - "dweb:/ipfs/QmUrFSGkTDJ7WaZ6qPVVe3Gn5uN2viPb7x7QQ35UX4DofX" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/access/Ownable.sol": { - "keccak256": "0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb", - "urls": [ - "bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6", - "dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol": { - "keccak256": "0x9b6b3e7803bc5f2f8cd7ad57db8ac1def61a9930a5a3107df4882e028a9605d7", - "urls": [ - "bzz-raw://da62d6be1f5c6edf577f0cb45666a8aa9c2086a4bac87d95d65f02e2f4c36a4b", - "dweb:/ipfs/QmNkpvBpoCMvX8JwAFNSc5XxJ2q5BXJpL5L1txb4QkqVFF" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/interfaces/IERC165.sol": { - "keccak256": "0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724", - "urls": [ - "bzz-raw://11fea9f8bc98949ac6709f0c1699db7430d2948137aa94d5a9e95a91f61a710a", - "dweb:/ipfs/QmQdfRXxQjwP6yn3DVo1GHPpriKNcFghSPi94Z1oKEFUNS" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/interfaces/IERC20.sol": { - "keccak256": "0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c", - "urls": [ - "bzz-raw://a2608291cb038b388d80b79a06b6118a42f7894ff67b7da10ec0dbbf5b2973ba", - "dweb:/ipfs/QmWohqcBLbcxmA4eGPhZDXe5RYMMEEpFq22nfkaUMvTfw1" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol": { - "keccak256": "0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7", - "urls": [ - "bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db", - "dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol": { - "keccak256": "0xca2ae13e0610f6a99238dd00b97bd786bc92732dae6d6b9d61f573ec51018310", - "urls": [ - "bzz-raw://75f8c71ce0c91c40dd5f249ace0b7d8270f8f1767231bcf71490f7157d6ba862", - "dweb:/ipfs/QmYXgxeDyFHvz3JsXxLEYN6GNUR44ThHeFj5XkpkgMoG4w" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Address.sol": { - "keccak256": "0x9d8da059267bac779a2dbbb9a26c2acf00ca83085e105d62d5d4ef96054a47f5", - "urls": [ - "bzz-raw://c78e2aa4313323cecd1ef12a8d6265b96beee1a199923abf55d9a2a9e291ad23", - "dweb:/ipfs/QmUTs2KStXucZezzFo3EYeqYu47utu56qrF7jj1Gue65vb" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Context.sol": { - "keccak256": "0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2", - "urls": [ - "bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12", - "dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Errors.sol": { - "keccak256": "0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123", - "urls": [ - "bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf", - "dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Panic.sol": { - "keccak256": "0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a", - "urls": [ - "bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a", - "dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Pausable.sol": { - "keccak256": "0xb2e5f50762c27fb4b123e3619c3c02bdcba5e515309382e5bfb6f7d6486510bd", - "urls": [ - "bzz-raw://1a4b83328c98d518a2699c2cbe9e9b055e78aa57fa8639f1b88deb8b3750b5dc", - "dweb:/ipfs/QmXdcYj5v7zQxXFPULShHkR5p4Wa2zYuupbHnFdV3cHYtc" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/ReentrancyGuard.sol": { - "keccak256": "0x11a5a79827df29e915a12740caf62fe21ebe27c08c9ae3e09abe9ee3ba3866d3", - "urls": [ - "bzz-raw://3cf0c69ab827e3251db9ee6a50647d62c90ba580a4d7bbff21f2bea39e7b2f4a", - "dweb:/ipfs/QmZiKwtKU1SBX4RGfQtY7PZfiapbbu6SZ9vizGQD9UHjRA" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/cryptography/ECDSA.sol": { - "keccak256": "0x69f54c02b7d81d505910ec198c11ed4c6a728418a868b906b4a0cf29946fda84", - "urls": [ - "bzz-raw://8e25e4bdb7ae1f21d23bfee996e22736fc0ab44cfabedac82a757b1edc5623b9", - "dweb:/ipfs/QmQdWQvB6JCP9ZMbzi8EvQ1PTETqkcTWrbcVurS7DKpa5n" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/introspection/ERC165.sol": { - "keccak256": "0xddce8e17e3d3f9ed818b4f4c4478a8262aab8b11ed322f1bf5ed705bb4bd97fa", - "urls": [ - "bzz-raw://8084aa71a4cc7d2980972412a88fe4f114869faea3fefa5436431644eb5c0287", - "dweb:/ipfs/Qmbqfs5dRdPvHVKY8kTaeyc65NdqXRQwRK7h9s5UJEhD1p" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol": { - "keccak256": "0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8", - "urls": [ - "bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621", - "dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/math/SafeCast.sol": { - "keccak256": "0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54", - "urls": [ - "bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8", - "dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/structs/DoubleEndedQueue.sol": { - "keccak256": "0x1e1d74658d7f4eab3d4f8fb0c6c5953bc5f629d9425e978d557dabff7b58b217", - "urls": [ - "bzz-raw://be0175d00008d452d3d553890f73a3d5d51dff4372f720336c8b98f26822fcdb", - "dweb:/ipfs/QmUkE8g5xPExWoSAKwdi5ww1qJJVtEWtjSF93G2LMQkgD3" - ], - "license": "MIT" - }, - "node_modules/solidity-bytes-utils/contracts/BytesLib.sol": { - "keccak256": "0xa5b10f04797d5a10a9ba07855108b6bd695940e6a3d128927b2f74a0d359868a", - "urls": [ - "bzz-raw://a38d7680aacbb18dae659876b396b73bcc8f759672213f8a0efc4129e2648535", - "dweb:/ipfs/QmfKFnwpTEGAnbRnZxMuv3mRCG9S9WMjFhFL23bftBT2Jq" - ], - "license": "Unlicense" - } - }, - "version": 1 - }, - "id": 82 -} diff --git a/examples/oft-movement/out/SendUlnBase.sol/SendUlnBase.json b/examples/oft-movement/out/SendUlnBase.sol/SendUlnBase.json deleted file mode 100644 index 1fab03217..000000000 --- a/examples/oft-movement/out/SendUlnBase.sol/SendUlnBase.json +++ /dev/null @@ -1,1068 +0,0 @@ -{ - "abi": [ - { - "type": "function", - "name": "getAppUlnConfig", - "inputs": [ - { "name": "_oapp", "type": "address", "internalType": "address" }, - { "name": "_remoteEid", "type": "uint32", "internalType": "uint32" } - ], - "outputs": [ - { - "name": "", - "type": "tuple", - "internalType": "struct UlnConfig", - "components": [ - { - "name": "confirmations", - "type": "uint64", - "internalType": "uint64" - }, - { - "name": "requiredDVNCount", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "optionalDVNCount", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "optionalDVNThreshold", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "requiredDVNs", - "type": "address[]", - "internalType": "address[]" - }, - { - "name": "optionalDVNs", - "type": "address[]", - "internalType": "address[]" - } - ] - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getUlnConfig", - "inputs": [ - { "name": "_oapp", "type": "address", "internalType": "address" }, - { "name": "_remoteEid", "type": "uint32", "internalType": "uint32" } - ], - "outputs": [ - { - "name": "rtnConfig", - "type": "tuple", - "internalType": "struct UlnConfig", - "components": [ - { - "name": "confirmations", - "type": "uint64", - "internalType": "uint64" - }, - { - "name": "requiredDVNCount", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "optionalDVNCount", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "optionalDVNThreshold", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "requiredDVNs", - "type": "address[]", - "internalType": "address[]" - }, - { - "name": "optionalDVNs", - "type": "address[]", - "internalType": "address[]" - } - ] - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "owner", - "inputs": [], - "outputs": [{ "name": "", "type": "address", "internalType": "address" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "renounceOwnership", - "inputs": [], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setDefaultUlnConfigs", - "inputs": [ - { - "name": "_params", - "type": "tuple[]", - "internalType": "struct SetDefaultUlnConfigParam[]", - "components": [ - { "name": "eid", "type": "uint32", "internalType": "uint32" }, - { - "name": "config", - "type": "tuple", - "internalType": "struct UlnConfig", - "components": [ - { - "name": "confirmations", - "type": "uint64", - "internalType": "uint64" - }, - { - "name": "requiredDVNCount", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "optionalDVNCount", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "optionalDVNThreshold", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "requiredDVNs", - "type": "address[]", - "internalType": "address[]" - }, - { - "name": "optionalDVNs", - "type": "address[]", - "internalType": "address[]" - } - ] - } - ] - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "transferOwnership", - "inputs": [ - { "name": "newOwner", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "event", - "name": "DVNFeePaid", - "inputs": [ - { - "name": "requiredDVNs", - "type": "address[]", - "indexed": false, - "internalType": "address[]" - }, - { - "name": "optionalDVNs", - "type": "address[]", - "indexed": false, - "internalType": "address[]" - }, - { - "name": "fees", - "type": "uint256[]", - "indexed": false, - "internalType": "uint256[]" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "DefaultUlnConfigsSet", - "inputs": [ - { - "name": "params", - "type": "tuple[]", - "indexed": false, - "internalType": "struct SetDefaultUlnConfigParam[]", - "components": [ - { "name": "eid", "type": "uint32", "internalType": "uint32" }, - { - "name": "config", - "type": "tuple", - "internalType": "struct UlnConfig", - "components": [ - { - "name": "confirmations", - "type": "uint64", - "internalType": "uint64" - }, - { - "name": "requiredDVNCount", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "optionalDVNCount", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "optionalDVNThreshold", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "requiredDVNs", - "type": "address[]", - "internalType": "address[]" - }, - { - "name": "optionalDVNs", - "type": "address[]", - "internalType": "address[]" - } - ] - } - ] - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "OwnershipTransferred", - "inputs": [ - { - "name": "previousOwner", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "newOwner", - "type": "address", - "indexed": true, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "UlnConfigSet", - "inputs": [ - { - "name": "oapp", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "eid", - "type": "uint32", - "indexed": false, - "internalType": "uint32" - }, - { - "name": "config", - "type": "tuple", - "indexed": false, - "internalType": "struct UlnConfig", - "components": [ - { - "name": "confirmations", - "type": "uint64", - "internalType": "uint64" - }, - { - "name": "requiredDVNCount", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "optionalDVNCount", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "optionalDVNThreshold", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "requiredDVNs", - "type": "address[]", - "internalType": "address[]" - }, - { - "name": "optionalDVNs", - "type": "address[]", - "internalType": "address[]" - } - ] - } - ], - "anonymous": false - }, - { "type": "error", "name": "LZ_ULN_AtLeastOneDVN", "inputs": [] }, - { "type": "error", "name": "LZ_ULN_InvalidConfirmations", "inputs": [] }, - { "type": "error", "name": "LZ_ULN_InvalidOptionalDVNCount", "inputs": [] }, - { - "type": "error", - "name": "LZ_ULN_InvalidOptionalDVNThreshold", - "inputs": [] - }, - { "type": "error", "name": "LZ_ULN_InvalidRequiredDVNCount", "inputs": [] }, - { "type": "error", "name": "LZ_ULN_Unsorted", "inputs": [] }, - { - "type": "error", - "name": "LZ_ULN_UnsupportedEid", - "inputs": [{ "name": "eid", "type": "uint32", "internalType": "uint32" }] - }, - { - "type": "error", - "name": "OwnableInvalidOwner", - "inputs": [ - { "name": "owner", "type": "address", "internalType": "address" } - ] - }, - { - "type": "error", - "name": "OwnableUnauthorizedAccount", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ] - } - ], - "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "methodIdentifiers": { - "getAppUlnConfig(address,uint32)": "39e3f938", - "getUlnConfig(address,uint32)": "43ea4fa9", - "owner()": "8da5cb5b", - "renounceOwnership()": "715018a6", - "setDefaultUlnConfigs((uint32,(uint64,uint8,uint8,uint8,address[],address[]))[])": "29460b0b", - "transferOwnership(address)": "f2fde38b" - }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"LZ_ULN_AtLeastOneDVN\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_ULN_InvalidConfirmations\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_ULN_InvalidOptionalDVNCount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_ULN_InvalidOptionalDVNThreshold\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_ULN_InvalidRequiredDVNCount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_ULN_Unsorted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"}],\"name\":\"LZ_ULN_UnsupportedEid\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"requiredDVNs\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"optionalDVNs\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"fees\",\"type\":\"uint256[]\"}],\"name\":\"DVNFeePaid\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"confirmations\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"requiredDVNCount\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"optionalDVNCount\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"optionalDVNThreshold\",\"type\":\"uint8\"},{\"internalType\":\"address[]\",\"name\":\"requiredDVNs\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"optionalDVNs\",\"type\":\"address[]\"}],\"internalType\":\"struct UlnConfig\",\"name\":\"config\",\"type\":\"tuple\"}],\"indexed\":false,\"internalType\":\"struct SetDefaultUlnConfigParam[]\",\"name\":\"params\",\"type\":\"tuple[]\"}],\"name\":\"DefaultUlnConfigsSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oapp\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"confirmations\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"requiredDVNCount\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"optionalDVNCount\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"optionalDVNThreshold\",\"type\":\"uint8\"},{\"internalType\":\"address[]\",\"name\":\"requiredDVNs\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"optionalDVNs\",\"type\":\"address[]\"}],\"indexed\":false,\"internalType\":\"struct UlnConfig\",\"name\":\"config\",\"type\":\"tuple\"}],\"name\":\"UlnConfigSet\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_oapp\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_remoteEid\",\"type\":\"uint32\"}],\"name\":\"getAppUlnConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"confirmations\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"requiredDVNCount\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"optionalDVNCount\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"optionalDVNThreshold\",\"type\":\"uint8\"},{\"internalType\":\"address[]\",\"name\":\"requiredDVNs\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"optionalDVNs\",\"type\":\"address[]\"}],\"internalType\":\"struct UlnConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_oapp\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_remoteEid\",\"type\":\"uint32\"}],\"name\":\"getUlnConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"confirmations\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"requiredDVNCount\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"optionalDVNCount\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"optionalDVNThreshold\",\"type\":\"uint8\"},{\"internalType\":\"address[]\",\"name\":\"requiredDVNs\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"optionalDVNs\",\"type\":\"address[]\"}],\"internalType\":\"struct UlnConfig\",\"name\":\"rtnConfig\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"confirmations\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"requiredDVNCount\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"optionalDVNCount\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"optionalDVNThreshold\",\"type\":\"uint8\"},{\"internalType\":\"address[]\",\"name\":\"requiredDVNs\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"optionalDVNs\",\"type\":\"address[]\"}],\"internalType\":\"struct UlnConfig\",\"name\":\"config\",\"type\":\"tuple\"}],\"internalType\":\"struct SetDefaultUlnConfigParam[]\",\"name\":\"_params\",\"type\":\"tuple[]\"}],\"name\":\"setDefaultUlnConfigs\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"includes the utility functions for checking ULN states and logics\",\"errors\":{\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}]},\"kind\":\"dev\",\"methods\":{\"getAppUlnConfig(address,uint32)\":{\"details\":\"Get the uln config without the default config for the given remoteEid.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"setDefaultUlnConfigs((uint32,(uint64,uint8,uint8,uint8,address[],address[]))[])\":{\"details\":\"about the DEFAULT ULN config 1) its values are all LITERAL (e.g. 0 is 0). whereas in the oapp ULN config, 0 (default value) points to the default ULN config this design enables the oapp to point to DEFAULT config without explicitly setting the config 2) its configuration is more restrictive than the oapp ULN config that a) it must not use NIL value, where NIL is used only by oapps to indicate the LITERAL 0 b) it must have at least one DVN\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/SendUlnBase.sol\":\"SendUlnBase\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/MessageLibBase.sol\":{\"keccak256\":\"0x14899a4398251439938d6ef8a15ea8c6acdddc98a7b0066d7e63676192dea0d1\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://3998d03de7025c2c601a4fdcaf9475d12a1ef661fcf1a685ece84fdde6498cf9\",\"dweb:/ipfs/QmReknRbiGAiPqq9toKyXKo6hUKXrQPJyyS6LnTGjiDKoY\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/SendLibBase.sol\":{\"keccak256\":\"0x400eaa11c7d50b4c25b7625290ff00937b6875ad3986b353c37a4e62b5a834b1\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://1f51eb0785d3630815a9d63de1c1331fe966df4c3f2fb6750b8da7be9e9743a4\",\"dweb:/ipfs/QmaAEf1kjhhff3AUhRiPm6ikpk2YMMrpKc2ccYzNs7waBy\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroExecutor.sol\":{\"keccak256\":\"0x3647af317ee126b1247a782abb30e59ec5ab21b4945f1d3b4370d1fa3c1bf347\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5b51cd5e7347ee869a06bd57a698f40e4a901ec7fdcb27f0ef485e4a0e1e9be4\",\"dweb:/ipfs/QmP2Nc73veRzLGdUahkjhQAiKR9ZWYiUtSGwoMB1sPXxUp\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroTreasury.sol\":{\"keccak256\":\"0x2aab2a3cf50e20af56d9204b1367d52a47abba0b0c7c21f304d413de1ced6345\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f8b603b5e5e62c621715f8449280af240a4add8721c4ae8f5e8e491507f6e4c5\",\"dweb:/ipfs/QmUQ7Ti7CPmKnRbQFN9TLvVbeZhsi1xUjqZPTJ36dCZ6y8\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/libs/SafeCall.sol\":{\"keccak256\":\"0xc3b7b7927472f7c1ca9703af310e9050c798afaccf399ad0f131e179b8582c8d\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://e5be13af32ff6b371985d405bc6fe8ac2faf5445bd88fda2dab4b869f66e3f89\",\"dweb:/ipfs/Qmd21k4H2tAHKrpiuHUbH87eNtHLLJzHj9ZCrMh8AKfDHh\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/SendUlnBase.sol\":{\"keccak256\":\"0x6d9962ffa476ac2efb78f1415bb2f650a30eedeef2b75fdab0aeafaf3e8da6a5\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://21f32c56b67d2e770444b809c1a85a96627194c605ad317d482dfc5b6ce7e8c2\",\"dweb:/ipfs/QmP5tzoMDzTdduEcSpYHgg6WCHLQGuc1djDMFUBycJPLCU\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/UlnBase.sol\":{\"keccak256\":\"0xfdb1d04f4996c0a9d35abfbfcf10d978da638885eb77d0a9dc35cea5993074e3\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://776d58d88d13b058f236cf18c32b4b9718a021513fc4e198287f4fe18ec5aba4\",\"dweb:/ipfs/QmdNX8jJu2aXJ8Dpbt2ohfhT8RKQLuvh58sW6SAXcUTcV9\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/ILayerZeroDVN.sol\":{\"keccak256\":\"0x308e77078242fd5c5746ec29c12e618249134f9e4377c0028ab8f59c07a6014b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2f92cf397a8d26864ac92dfcd1b98e92a32c47f556a62c5e6dc1618734c1caa3\",\"dweb:/ipfs/QmXN3XJXEKq5djV6HeM6jrLycmJPFhMhecsYZ2TaRsQmhg\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/DVNOptions.sol\":{\"keccak256\":\"0x2beee03cdf59a9bc72e94d08b69cb2e908725f4ceabb48651494938100e21e35\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://d88e121a39e74309f3575417df2318e2d2ee8bc8314e68dbf78544a9c393b141\",\"dweb:/ipfs/QmRojBRAyENK21HnjevAWeoZZxtWkYZubB9Y78vCJPYeU6\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/UlnOptions.sol\":{\"keccak256\":\"0x5df07fef16b20767f7524c367d90f696c12e8ce0e4fde7aecc9d83fb2b6b0e27\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://0997203f57d736e56ebb3d736550f1c7ff7950c8df0574c7abe95e22f847b850\",\"dweb:/ipfs/QmZBjkH1vaPLyN3Jx9kGfVZKuTdfVWJfJVLSPok8SpjGbT\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\":{\"keccak256\":\"0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bacc29fd3866af71e59cb0bdc1cf82c882a4a7f4e2652fd413c9f12649762083\",\"dweb:/ipfs/QmZh2toLnrQDWaNYhS5K4NoW7Vxd2GdZx9KA77vKEDLAqs\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol\":{\"keccak256\":\"0x5cf5f24751b4e3ea1c9c5ded07cedfdfd62566b6daaffcc0144733859c9dba0c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cae7e35007a714f007ea08045ef7c0cfa6c91fd2425b5028b2d49abad357a5f0\",\"dweb:/ipfs/QmcDBs5tsiyB35b8cwzWQWNnpkawb3uuHRaqE77Hxm2tve\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol\":{\"keccak256\":\"0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d8ff6a8a89297fa127f86b54e0db3eba1d6a6eeb4f6398d3c84d569665ac8f1b\",\"dweb:/ipfs/QmVSwhw6xFDrLRAX4RXaCM47yBaBtac4wf36DYEq6KCTvT\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol\":{\"keccak256\":\"0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7e1b245d58221d16d8b5e0f01ef3e289a24a7df1ace3b94239e4d5b954ad5927\",\"dweb:/ipfs/Qmappsgp7PCY9rSSNE9Cdn4BTRX591WfCSEgq2HxhA3z6S\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol\":{\"keccak256\":\"0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b18b23a1643fc6636c4ad9d9023e2e6ca2d3c2a4a046482d4655bff09950598d\",\"dweb:/ipfs/Qma6G5SqiovwrMPfgqTrRngK1HWW373Wkf9c6YP2NhXpPk\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol\":{\"keccak256\":\"0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5173fc9143bea314b159ca5a9adb5626659ef763bc598e27de5fa46efe3291a6\",\"dweb:/ipfs/QmSLFeMFPmVeGxT4sxRPW28ictjAS22M8rLeYRu9TXkA6D\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol\":{\"keccak256\":\"0xf1c07bc61e7b1dce195ed12d50f87980fbf2d63cac1326fd28287f55fe0ba625\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://060f10ff7afc33c1c2f2b4b5ba29231fd3c943146488084d0e4ab99fce991d97\",\"dweb:/ipfs/QmaSsefAqqEqtf8FgFUmDYMwTsAty3X1pqDb6SiFvry6B3\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol\":{\"keccak256\":\"0x2ebbcaaab3554edcd41b581f1a72ac1806afbfb8047d0d47ff098f9af30d6deb\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://2d4b2cf5c3b16dc76c6767f285b57c0af917972327b2be3f7cba5825402f5fc1\",\"dweb:/ipfs/QmQQWiHE2jKEDbjzGutSoZwtApSXYfLqZt5CxEpFj8xyvT\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/CalldataBytesLib.sol\":{\"keccak256\":\"0x5c0db161cef6603c3b256d4220f489419e7478ef775e52a80056654129c61875\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://a33245d0fdd3992bb56b31d1840108d36bb46c8d617b659ef1af8dd7ed86302d\",\"dweb:/ipfs/QmWyBqT7Tdrfn5zz9xYM3V1PBtfAZAVwwCrrKwwfi3wMQK\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Transfer.sol\":{\"keccak256\":\"0x621d6dd5b8b7e827351459fff4ac87c16ba4656757592cf67de8b199aea4cf9a\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://345aa8c007ed8b96a74260d289545713f1d7180df270d67687e3a540a61fa5c0\",\"dweb:/ipfs/QmNWCvpqSuar6UGLDVshUc7shUv3pt1J5FTf9VyZZ13wXL\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/BitMaps.sol\":{\"keccak256\":\"0xaad3c72ef43480d2253fd48b394e8fb7286d009991d2bc4e61be58ce48ac5ee9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b8c02b14f954416ba2148b389c87da8378ac8dd16ba3d458cbbfba8b0fd8639f\",\"dweb:/ipfs/Qmd2EEQhYL2VmgJi1V4uiHM2WcYxF9iBtxSgcFkbS21rQD\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/ExecutorOptions.sol\":{\"keccak256\":\"0x621c6090fc432f94a99f677a95d72b75f56db89ddc5fc870669777a313587c28\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://69086166f16d29e30c5eb9ca2f97afb27569afe619807d79736833a809a512d2\",\"dweb:/ipfs/QmcZqXjFuVdTrfbteKBF3GuEpjVFZ2YNZTa3J87dyLsqav\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol\":{\"keccak256\":\"0xc84cf1bf785977fe1fbe7566eef902c2db68d0e163813ebe6c34921754802680\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://de686666fc16fa432d4208d85cec87dc952faf3e481b683b9adf4b4610db4b09\",\"dweb:/ipfs/QmdmQeopzmxqRzi9DNB4EJDrYUXFfD7fUhnGhSni4QejUW\"]},\"node_modules/@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol\":{\"keccak256\":\"0x9b6b3e7803bc5f2f8cd7ad57db8ac1def61a9930a5a3107df4882e028a9605d7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://da62d6be1f5c6edf577f0cb45666a8aa9c2086a4bac87d95d65f02e2f4c36a4b\",\"dweb:/ipfs/QmNkpvBpoCMvX8JwAFNSc5XxJ2q5BXJpL5L1txb4QkqVFF\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC165.sol\":{\"keccak256\":\"0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://11fea9f8bc98949ac6709f0c1699db7430d2948137aa94d5a9e95a91f61a710a\",\"dweb:/ipfs/QmQdfRXxQjwP6yn3DVo1GHPpriKNcFghSPi94Z1oKEFUNS\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC20.sol\":{\"keccak256\":\"0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a2608291cb038b388d80b79a06b6118a42f7894ff67b7da10ec0dbbf5b2973ba\",\"dweb:/ipfs/QmWohqcBLbcxmA4eGPhZDXe5RYMMEEpFq22nfkaUMvTfw1\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db\",\"dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0xca2ae13e0610f6a99238dd00b97bd786bc92732dae6d6b9d61f573ec51018310\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://75f8c71ce0c91c40dd5f249ace0b7d8270f8f1767231bcf71490f7157d6ba862\",\"dweb:/ipfs/QmYXgxeDyFHvz3JsXxLEYN6GNUR44ThHeFj5XkpkgMoG4w\"]},\"node_modules/@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0x9d8da059267bac779a2dbbb9a26c2acf00ca83085e105d62d5d4ef96054a47f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c78e2aa4313323cecd1ef12a8d6265b96beee1a199923abf55d9a2a9e291ad23\",\"dweb:/ipfs/QmUTs2KStXucZezzFo3EYeqYu47utu56qrF7jj1Gue65vb\"]},\"node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"node_modules/@openzeppelin/contracts/utils/Errors.sol\":{\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf\",\"dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB\"]},\"node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]},\"node_modules/@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]},\"node_modules/solidity-bytes-utils/contracts/BytesLib.sol\":{\"keccak256\":\"0xa5b10f04797d5a10a9ba07855108b6bd695940e6a3d128927b2f74a0d359868a\",\"license\":\"Unlicense\",\"urls\":[\"bzz-raw://a38d7680aacbb18dae659876b396b73bcc8f759672213f8a0efc4129e2648535\",\"dweb:/ipfs/QmfKFnwpTEGAnbRnZxMuv3mRCG9S9WMjFhFL23bftBT2Jq\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { "inputs": [], "type": "error", "name": "LZ_ULN_AtLeastOneDVN" }, - { - "inputs": [], - "type": "error", - "name": "LZ_ULN_InvalidConfirmations" - }, - { - "inputs": [], - "type": "error", - "name": "LZ_ULN_InvalidOptionalDVNCount" - }, - { - "inputs": [], - "type": "error", - "name": "LZ_ULN_InvalidOptionalDVNThreshold" - }, - { - "inputs": [], - "type": "error", - "name": "LZ_ULN_InvalidRequiredDVNCount" - }, - { "inputs": [], "type": "error", "name": "LZ_ULN_Unsorted" }, - { - "inputs": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" } - ], - "type": "error", - "name": "LZ_ULN_UnsupportedEid" - }, - { - "inputs": [ - { "internalType": "address", "name": "owner", "type": "address" } - ], - "type": "error", - "name": "OwnableInvalidOwner" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "type": "error", - "name": "OwnableUnauthorizedAccount" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "requiredDVNs", - "type": "address[]", - "indexed": false - }, - { - "internalType": "address[]", - "name": "optionalDVNs", - "type": "address[]", - "indexed": false - }, - { - "internalType": "uint256[]", - "name": "fees", - "type": "uint256[]", - "indexed": false - } - ], - "type": "event", - "name": "DVNFeePaid", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "struct SetDefaultUlnConfigParam[]", - "name": "params", - "type": "tuple[]", - "components": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" }, - { - "internalType": "struct UlnConfig", - "name": "config", - "type": "tuple", - "components": [ - { - "internalType": "uint64", - "name": "confirmations", - "type": "uint64" - }, - { - "internalType": "uint8", - "name": "requiredDVNCount", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "optionalDVNCount", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "optionalDVNThreshold", - "type": "uint8" - }, - { - "internalType": "address[]", - "name": "requiredDVNs", - "type": "address[]" - }, - { - "internalType": "address[]", - "name": "optionalDVNs", - "type": "address[]" - } - ] - } - ], - "indexed": false - } - ], - "type": "event", - "name": "DefaultUlnConfigsSet", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "previousOwner", - "type": "address", - "indexed": true - }, - { - "internalType": "address", - "name": "newOwner", - "type": "address", - "indexed": true - } - ], - "type": "event", - "name": "OwnershipTransferred", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "oapp", - "type": "address", - "indexed": false - }, - { - "internalType": "uint32", - "name": "eid", - "type": "uint32", - "indexed": false - }, - { - "internalType": "struct UlnConfig", - "name": "config", - "type": "tuple", - "components": [ - { - "internalType": "uint64", - "name": "confirmations", - "type": "uint64" - }, - { - "internalType": "uint8", - "name": "requiredDVNCount", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "optionalDVNCount", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "optionalDVNThreshold", - "type": "uint8" - }, - { - "internalType": "address[]", - "name": "requiredDVNs", - "type": "address[]" - }, - { - "internalType": "address[]", - "name": "optionalDVNs", - "type": "address[]" - } - ], - "indexed": false - } - ], - "type": "event", - "name": "UlnConfigSet", - "anonymous": false - }, - { - "inputs": [ - { "internalType": "address", "name": "_oapp", "type": "address" }, - { "internalType": "uint32", "name": "_remoteEid", "type": "uint32" } - ], - "stateMutability": "view", - "type": "function", - "name": "getAppUlnConfig", - "outputs": [ - { - "internalType": "struct UlnConfig", - "name": "", - "type": "tuple", - "components": [ - { - "internalType": "uint64", - "name": "confirmations", - "type": "uint64" - }, - { - "internalType": "uint8", - "name": "requiredDVNCount", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "optionalDVNCount", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "optionalDVNThreshold", - "type": "uint8" - }, - { - "internalType": "address[]", - "name": "requiredDVNs", - "type": "address[]" - }, - { - "internalType": "address[]", - "name": "optionalDVNs", - "type": "address[]" - } - ] - } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "_oapp", "type": "address" }, - { "internalType": "uint32", "name": "_remoteEid", "type": "uint32" } - ], - "stateMutability": "view", - "type": "function", - "name": "getUlnConfig", - "outputs": [ - { - "internalType": "struct UlnConfig", - "name": "rtnConfig", - "type": "tuple", - "components": [ - { - "internalType": "uint64", - "name": "confirmations", - "type": "uint64" - }, - { - "internalType": "uint8", - "name": "requiredDVNCount", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "optionalDVNCount", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "optionalDVNThreshold", - "type": "uint8" - }, - { - "internalType": "address[]", - "name": "requiredDVNs", - "type": "address[]" - }, - { - "internalType": "address[]", - "name": "optionalDVNs", - "type": "address[]" - } - ] - } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "owner", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ] - }, - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "function", - "name": "renounceOwnership" - }, - { - "inputs": [ - { - "internalType": "struct SetDefaultUlnConfigParam[]", - "name": "_params", - "type": "tuple[]", - "components": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" }, - { - "internalType": "struct UlnConfig", - "name": "config", - "type": "tuple", - "components": [ - { - "internalType": "uint64", - "name": "confirmations", - "type": "uint64" - }, - { - "internalType": "uint8", - "name": "requiredDVNCount", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "optionalDVNCount", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "optionalDVNThreshold", - "type": "uint8" - }, - { - "internalType": "address[]", - "name": "requiredDVNs", - "type": "address[]" - }, - { - "internalType": "address[]", - "name": "optionalDVNs", - "type": "address[]" - } - ] - } - ] - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setDefaultUlnConfigs" - }, - { - "inputs": [ - { "internalType": "address", "name": "newOwner", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "transferOwnership" - } - ], - "devdoc": { - "kind": "dev", - "methods": { - "getAppUlnConfig(address,uint32)": { - "details": "Get the uln config without the default config for the given remoteEid." - }, - "owner()": { "details": "Returns the address of the current owner." }, - "renounceOwnership()": { - "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner." - }, - "setDefaultUlnConfigs((uint32,(uint64,uint8,uint8,uint8,address[],address[]))[])": { - "details": "about the DEFAULT ULN config 1) its values are all LITERAL (e.g. 0 is 0). whereas in the oapp ULN config, 0 (default value) points to the default ULN config this design enables the oapp to point to DEFAULT config without explicitly setting the config 2) its configuration is more restrictive than the oapp ULN config that a) it must not use NIL value, where NIL is used only by oapps to indicate the LITERAL 0 b) it must have at least one DVN" - }, - "transferOwnership(address)": { - "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." - } - }, - "version": 1 - }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/SendUlnBase.sol": "SendUlnBase" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/MessageLibBase.sol": { - "keccak256": "0x14899a4398251439938d6ef8a15ea8c6acdddc98a7b0066d7e63676192dea0d1", - "urls": [ - "bzz-raw://3998d03de7025c2c601a4fdcaf9475d12a1ef661fcf1a685ece84fdde6498cf9", - "dweb:/ipfs/QmReknRbiGAiPqq9toKyXKo6hUKXrQPJyyS6LnTGjiDKoY" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/SendLibBase.sol": { - "keccak256": "0x400eaa11c7d50b4c25b7625290ff00937b6875ad3986b353c37a4e62b5a834b1", - "urls": [ - "bzz-raw://1f51eb0785d3630815a9d63de1c1331fe966df4c3f2fb6750b8da7be9e9743a4", - "dweb:/ipfs/QmaAEf1kjhhff3AUhRiPm6ikpk2YMMrpKc2ccYzNs7waBy" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroExecutor.sol": { - "keccak256": "0x3647af317ee126b1247a782abb30e59ec5ab21b4945f1d3b4370d1fa3c1bf347", - "urls": [ - "bzz-raw://5b51cd5e7347ee869a06bd57a698f40e4a901ec7fdcb27f0ef485e4a0e1e9be4", - "dweb:/ipfs/QmP2Nc73veRzLGdUahkjhQAiKR9ZWYiUtSGwoMB1sPXxUp" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroTreasury.sol": { - "keccak256": "0x2aab2a3cf50e20af56d9204b1367d52a47abba0b0c7c21f304d413de1ced6345", - "urls": [ - "bzz-raw://f8b603b5e5e62c621715f8449280af240a4add8721c4ae8f5e8e491507f6e4c5", - "dweb:/ipfs/QmUQ7Ti7CPmKnRbQFN9TLvVbeZhsi1xUjqZPTJ36dCZ6y8" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/libs/SafeCall.sol": { - "keccak256": "0xc3b7b7927472f7c1ca9703af310e9050c798afaccf399ad0f131e179b8582c8d", - "urls": [ - "bzz-raw://e5be13af32ff6b371985d405bc6fe8ac2faf5445bd88fda2dab4b869f66e3f89", - "dweb:/ipfs/Qmd21k4H2tAHKrpiuHUbH87eNtHLLJzHj9ZCrMh8AKfDHh" - ], - "license": "MIT OR Apache-2.0" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/SendUlnBase.sol": { - "keccak256": "0x6d9962ffa476ac2efb78f1415bb2f650a30eedeef2b75fdab0aeafaf3e8da6a5", - "urls": [ - "bzz-raw://21f32c56b67d2e770444b809c1a85a96627194c605ad317d482dfc5b6ce7e8c2", - "dweb:/ipfs/QmP5tzoMDzTdduEcSpYHgg6WCHLQGuc1djDMFUBycJPLCU" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/UlnBase.sol": { - "keccak256": "0xfdb1d04f4996c0a9d35abfbfcf10d978da638885eb77d0a9dc35cea5993074e3", - "urls": [ - "bzz-raw://776d58d88d13b058f236cf18c32b4b9718a021513fc4e198287f4fe18ec5aba4", - "dweb:/ipfs/QmdNX8jJu2aXJ8Dpbt2ohfhT8RKQLuvh58sW6SAXcUTcV9" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/ILayerZeroDVN.sol": { - "keccak256": "0x308e77078242fd5c5746ec29c12e618249134f9e4377c0028ab8f59c07a6014b", - "urls": [ - "bzz-raw://2f92cf397a8d26864ac92dfcd1b98e92a32c47f556a62c5e6dc1618734c1caa3", - "dweb:/ipfs/QmXN3XJXEKq5djV6HeM6jrLycmJPFhMhecsYZ2TaRsQmhg" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/DVNOptions.sol": { - "keccak256": "0x2beee03cdf59a9bc72e94d08b69cb2e908725f4ceabb48651494938100e21e35", - "urls": [ - "bzz-raw://d88e121a39e74309f3575417df2318e2d2ee8bc8314e68dbf78544a9c393b141", - "dweb:/ipfs/QmRojBRAyENK21HnjevAWeoZZxtWkYZubB9Y78vCJPYeU6" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/UlnOptions.sol": { - "keccak256": "0x5df07fef16b20767f7524c367d90f696c12e8ce0e4fde7aecc9d83fb2b6b0e27", - "urls": [ - "bzz-raw://0997203f57d736e56ebb3d736550f1c7ff7950c8df0574c7abe95e22f847b850", - "dweb:/ipfs/QmZBjkH1vaPLyN3Jx9kGfVZKuTdfVWJfJVLSPok8SpjGbT" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol": { - "keccak256": "0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3", - "urls": [ - "bzz-raw://bacc29fd3866af71e59cb0bdc1cf82c882a4a7f4e2652fd413c9f12649762083", - "dweb:/ipfs/QmZh2toLnrQDWaNYhS5K4NoW7Vxd2GdZx9KA77vKEDLAqs" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol": { - "keccak256": "0x5cf5f24751b4e3ea1c9c5ded07cedfdfd62566b6daaffcc0144733859c9dba0c", - "urls": [ - "bzz-raw://cae7e35007a714f007ea08045ef7c0cfa6c91fd2425b5028b2d49abad357a5f0", - "dweb:/ipfs/QmcDBs5tsiyB35b8cwzWQWNnpkawb3uuHRaqE77Hxm2tve" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol": { - "keccak256": "0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc", - "urls": [ - "bzz-raw://d8ff6a8a89297fa127f86b54e0db3eba1d6a6eeb4f6398d3c84d569665ac8f1b", - "dweb:/ipfs/QmVSwhw6xFDrLRAX4RXaCM47yBaBtac4wf36DYEq6KCTvT" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol": { - "keccak256": "0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972", - "urls": [ - "bzz-raw://7e1b245d58221d16d8b5e0f01ef3e289a24a7df1ace3b94239e4d5b954ad5927", - "dweb:/ipfs/Qmappsgp7PCY9rSSNE9Cdn4BTRX591WfCSEgq2HxhA3z6S" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol": { - "keccak256": "0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901", - "urls": [ - "bzz-raw://b18b23a1643fc6636c4ad9d9023e2e6ca2d3c2a4a046482d4655bff09950598d", - "dweb:/ipfs/Qma6G5SqiovwrMPfgqTrRngK1HWW373Wkf9c6YP2NhXpPk" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol": { - "keccak256": "0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e", - "urls": [ - "bzz-raw://5173fc9143bea314b159ca5a9adb5626659ef763bc598e27de5fa46efe3291a6", - "dweb:/ipfs/QmSLFeMFPmVeGxT4sxRPW28ictjAS22M8rLeYRu9TXkA6D" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol": { - "keccak256": "0xf1c07bc61e7b1dce195ed12d50f87980fbf2d63cac1326fd28287f55fe0ba625", - "urls": [ - "bzz-raw://060f10ff7afc33c1c2f2b4b5ba29231fd3c943146488084d0e4ab99fce991d97", - "dweb:/ipfs/QmaSsefAqqEqtf8FgFUmDYMwTsAty3X1pqDb6SiFvry6B3" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol": { - "keccak256": "0x2ebbcaaab3554edcd41b581f1a72ac1806afbfb8047d0d47ff098f9af30d6deb", - "urls": [ - "bzz-raw://2d4b2cf5c3b16dc76c6767f285b57c0af917972327b2be3f7cba5825402f5fc1", - "dweb:/ipfs/QmQQWiHE2jKEDbjzGutSoZwtApSXYfLqZt5CxEpFj8xyvT" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/CalldataBytesLib.sol": { - "keccak256": "0x5c0db161cef6603c3b256d4220f489419e7478ef775e52a80056654129c61875", - "urls": [ - "bzz-raw://a33245d0fdd3992bb56b31d1840108d36bb46c8d617b659ef1af8dd7ed86302d", - "dweb:/ipfs/QmWyBqT7Tdrfn5zz9xYM3V1PBtfAZAVwwCrrKwwfi3wMQK" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Transfer.sol": { - "keccak256": "0x621d6dd5b8b7e827351459fff4ac87c16ba4656757592cf67de8b199aea4cf9a", - "urls": [ - "bzz-raw://345aa8c007ed8b96a74260d289545713f1d7180df270d67687e3a540a61fa5c0", - "dweb:/ipfs/QmNWCvpqSuar6UGLDVshUc7shUv3pt1J5FTf9VyZZ13wXL" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/BitMaps.sol": { - "keccak256": "0xaad3c72ef43480d2253fd48b394e8fb7286d009991d2bc4e61be58ce48ac5ee9", - "urls": [ - "bzz-raw://b8c02b14f954416ba2148b389c87da8378ac8dd16ba3d458cbbfba8b0fd8639f", - "dweb:/ipfs/Qmd2EEQhYL2VmgJi1V4uiHM2WcYxF9iBtxSgcFkbS21rQD" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/ExecutorOptions.sol": { - "keccak256": "0x621c6090fc432f94a99f677a95d72b75f56db89ddc5fc870669777a313587c28", - "urls": [ - "bzz-raw://69086166f16d29e30c5eb9ca2f97afb27569afe619807d79736833a809a512d2", - "dweb:/ipfs/QmcZqXjFuVdTrfbteKBF3GuEpjVFZ2YNZTa3J87dyLsqav" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol": { - "keccak256": "0xc84cf1bf785977fe1fbe7566eef902c2db68d0e163813ebe6c34921754802680", - "urls": [ - "bzz-raw://de686666fc16fa432d4208d85cec87dc952faf3e481b683b9adf4b4610db4b09", - "dweb:/ipfs/QmdmQeopzmxqRzi9DNB4EJDrYUXFfD7fUhnGhSni4QejUW" - ], - "license": "LZBL-1.2" - }, - "node_modules/@openzeppelin/contracts/access/Ownable.sol": { - "keccak256": "0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb", - "urls": [ - "bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6", - "dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol": { - "keccak256": "0x9b6b3e7803bc5f2f8cd7ad57db8ac1def61a9930a5a3107df4882e028a9605d7", - "urls": [ - "bzz-raw://da62d6be1f5c6edf577f0cb45666a8aa9c2086a4bac87d95d65f02e2f4c36a4b", - "dweb:/ipfs/QmNkpvBpoCMvX8JwAFNSc5XxJ2q5BXJpL5L1txb4QkqVFF" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/interfaces/IERC165.sol": { - "keccak256": "0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724", - "urls": [ - "bzz-raw://11fea9f8bc98949ac6709f0c1699db7430d2948137aa94d5a9e95a91f61a710a", - "dweb:/ipfs/QmQdfRXxQjwP6yn3DVo1GHPpriKNcFghSPi94Z1oKEFUNS" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/interfaces/IERC20.sol": { - "keccak256": "0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c", - "urls": [ - "bzz-raw://a2608291cb038b388d80b79a06b6118a42f7894ff67b7da10ec0dbbf5b2973ba", - "dweb:/ipfs/QmWohqcBLbcxmA4eGPhZDXe5RYMMEEpFq22nfkaUMvTfw1" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol": { - "keccak256": "0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7", - "urls": [ - "bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db", - "dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol": { - "keccak256": "0xca2ae13e0610f6a99238dd00b97bd786bc92732dae6d6b9d61f573ec51018310", - "urls": [ - "bzz-raw://75f8c71ce0c91c40dd5f249ace0b7d8270f8f1767231bcf71490f7157d6ba862", - "dweb:/ipfs/QmYXgxeDyFHvz3JsXxLEYN6GNUR44ThHeFj5XkpkgMoG4w" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Address.sol": { - "keccak256": "0x9d8da059267bac779a2dbbb9a26c2acf00ca83085e105d62d5d4ef96054a47f5", - "urls": [ - "bzz-raw://c78e2aa4313323cecd1ef12a8d6265b96beee1a199923abf55d9a2a9e291ad23", - "dweb:/ipfs/QmUTs2KStXucZezzFo3EYeqYu47utu56qrF7jj1Gue65vb" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Context.sol": { - "keccak256": "0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2", - "urls": [ - "bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12", - "dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Errors.sol": { - "keccak256": "0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123", - "urls": [ - "bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf", - "dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol": { - "keccak256": "0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8", - "urls": [ - "bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621", - "dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/math/SafeCast.sol": { - "keccak256": "0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54", - "urls": [ - "bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8", - "dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy" - ], - "license": "MIT" - }, - "node_modules/solidity-bytes-utils/contracts/BytesLib.sol": { - "keccak256": "0xa5b10f04797d5a10a9ba07855108b6bd695940e6a3d128927b2f74a0d359868a", - "urls": [ - "bzz-raw://a38d7680aacbb18dae659876b396b73bcc8f759672213f8a0efc4129e2648535", - "dweb:/ipfs/QmfKFnwpTEGAnbRnZxMuv3mRCG9S9WMjFhFL23bftBT2Jq" - ], - "license": "Unlicense" - } - }, - "version": 1 - }, - "id": 14 -} diff --git a/examples/oft-movement/out/SimpleMessageLibMock.sol/SimpleMessageLibMock.json b/examples/oft-movement/out/SimpleMessageLibMock.sol/SimpleMessageLibMock.json deleted file mode 100644 index 03c5cb43e..000000000 --- a/examples/oft-movement/out/SimpleMessageLibMock.sol/SimpleMessageLibMock.json +++ /dev/null @@ -1,1735 +0,0 @@ -{ - "abi": [ - { - "type": "constructor", - "inputs": [ - { - "name": "_verifyHelper", - "type": "address", - "internalType": "address payable" - }, - { "name": "_endpoint", "type": "address", "internalType": "address" } - ], - "stateMutability": "nonpayable" - }, - { "type": "fallback", "stateMutability": "payable" }, - { "type": "receive", "stateMutability": "payable" }, - { - "type": "function", - "name": "PACKET_VERSION", - "inputs": [], - "outputs": [{ "name": "", "type": "uint8", "internalType": "uint8" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "defaultOption", - "inputs": [], - "outputs": [{ "name": "", "type": "bytes", "internalType": "bytes" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "endpoint", - "inputs": [], - "outputs": [{ "name": "", "type": "address", "internalType": "address" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "isSupportedEid", - "inputs": [{ "name": "", "type": "uint32", "internalType": "uint32" }], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "localEid", - "inputs": [], - "outputs": [{ "name": "", "type": "uint32", "internalType": "uint32" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "lzTokenFee", - "inputs": [], - "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "messageLibType", - "inputs": [], - "outputs": [ - { "name": "", "type": "uint8", "internalType": "enum MessageLibType" } - ], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "nativeFee", - "inputs": [], - "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "owner", - "inputs": [], - "outputs": [{ "name": "", "type": "address", "internalType": "address" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "quote", - "inputs": [ - { - "name": "", - "type": "tuple", - "internalType": "struct Packet", - "components": [ - { "name": "nonce", "type": "uint64", "internalType": "uint64" }, - { "name": "srcEid", "type": "uint32", "internalType": "uint32" }, - { "name": "sender", "type": "address", "internalType": "address" }, - { "name": "dstEid", "type": "uint32", "internalType": "uint32" }, - { - "name": "receiver", - "type": "bytes32", - "internalType": "bytes32" - }, - { "name": "guid", "type": "bytes32", "internalType": "bytes32" }, - { "name": "message", "type": "bytes", "internalType": "bytes" } - ] - }, - { "name": "", "type": "bytes", "internalType": "bytes" }, - { "name": "_payInLzToken", "type": "bool", "internalType": "bool" } - ], - "outputs": [ - { - "name": "", - "type": "tuple", - "internalType": "struct MessagingFee", - "components": [ - { - "name": "nativeFee", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "lzTokenFee", - "type": "uint256", - "internalType": "uint256" - } - ] - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "renounceOwnership", - "inputs": [], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "send", - "inputs": [ - { - "name": "_packet", - "type": "tuple", - "internalType": "struct Packet", - "components": [ - { "name": "nonce", "type": "uint64", "internalType": "uint64" }, - { "name": "srcEid", "type": "uint32", "internalType": "uint32" }, - { "name": "sender", "type": "address", "internalType": "address" }, - { "name": "dstEid", "type": "uint32", "internalType": "uint32" }, - { - "name": "receiver", - "type": "bytes32", - "internalType": "bytes32" - }, - { "name": "guid", "type": "bytes32", "internalType": "bytes32" }, - { "name": "message", "type": "bytes", "internalType": "bytes" } - ] - }, - { "name": "_options", "type": "bytes", "internalType": "bytes" }, - { "name": "_payInLzToken", "type": "bool", "internalType": "bool" } - ], - "outputs": [ - { - "name": "fee", - "type": "tuple", - "internalType": "struct MessagingFee", - "components": [ - { - "name": "nativeFee", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "lzTokenFee", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { "name": "encodedPacket", "type": "bytes", "internalType": "bytes" }, - { "name": "options", "type": "bytes", "internalType": "bytes" } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setDefaultOption", - "inputs": [ - { "name": "_defaultOption", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setMessagingFee", - "inputs": [ - { "name": "_nativeFee", "type": "uint256", "internalType": "uint256" }, - { "name": "_lzTokenFee", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setWhitelistCaller", - "inputs": [ - { - "name": "_whitelistCaller", - "type": "address", - "internalType": "address" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "supportsInterface", - "inputs": [ - { "name": "interfaceId", "type": "bytes4", "internalType": "bytes4" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "testHelper", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "contract TestHelperOz5" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "transferOwnership", - "inputs": [ - { "name": "newOwner", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "treasury", - "inputs": [], - "outputs": [{ "name": "", "type": "address", "internalType": "address" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "validatePacket", - "inputs": [ - { "name": "packetBytes", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "version", - "inputs": [], - "outputs": [ - { "name": "major", "type": "uint64", "internalType": "uint64" }, - { "name": "minor", "type": "uint8", "internalType": "uint8" }, - { "name": "endpointVersion", "type": "uint8", "internalType": "uint8" } - ], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "whitelistCaller", - "inputs": [], - "outputs": [{ "name": "", "type": "address", "internalType": "address" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "withdrawFee", - "inputs": [ - { "name": "_to", "type": "address", "internalType": "address" }, - { "name": "_amount", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "withdrawLzTokenFee", - "inputs": [ - { "name": "_to", "type": "address", "internalType": "address" }, - { "name": "_amount", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "event", - "name": "OwnershipTransferred", - "inputs": [ - { - "name": "previousOwner", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "newOwner", - "type": "address", - "indexed": true, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "error", - "name": "InvalidEndpoint", - "inputs": [ - { "name": "expected", "type": "address", "internalType": "address" }, - { "name": "actual", "type": "address", "internalType": "address" } - ] - }, - { "type": "error", "name": "LZ_NotImplemented", "inputs": [] }, - { "type": "error", "name": "LzTokenIsAddressZero", "inputs": [] }, - { "type": "error", "name": "OnlyEndpoint", "inputs": [] }, - { "type": "error", "name": "OnlyWhitelistCaller", "inputs": [] }, - { - "type": "error", - "name": "OwnableInvalidOwner", - "inputs": [ - { "name": "owner", "type": "address", "internalType": "address" } - ] - }, - { - "type": "error", - "name": "OwnableUnauthorizedAccount", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ] - }, - { - "type": "error", - "name": "SafeERC20FailedOperation", - "inputs": [ - { "name": "token", "type": "address", "internalType": "address" } - ] - }, - { "type": "error", "name": "ToIsAddressZero", "inputs": [] }, - { "type": "error", "name": "TransferFailed", "inputs": [] }, - { - "type": "error", - "name": "Transfer_NativeFailed", - "inputs": [ - { "name": "_to", "type": "address", "internalType": "address" }, - { "name": "_value", "type": "uint256", "internalType": "uint256" } - ] - }, - { "type": "error", "name": "Transfer_ToAddressIsZero", "inputs": [] } - ], - "bytecode": { - "object": "0x60e06040523480156200001157600080fd5b506040516200191f3803806200191f833981016040819052620000349162000179565b33806200005b57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b620000668162000110565b50600180546001600160a01b0319166001600160a01b038481169190911790915581166080819052600060a0526040805163416ecebf60e01b8152905163416ecebf916004808201926020929091908290030181865afa158015620000cf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000f59190620001b8565b63ffffffff1660c052505060636003556064600455620001e7565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146200017657600080fd5b50565b600080604083850312156200018d57600080fd5b82516200019a8162000160565b6020840151909250620001ad8162000160565b809150509250929050565b600060208284031215620001cb57600080fd5b815163ffffffff81168114620001e057600080fd5b9392505050565b60805160a05160c0516116ec62000233600039600061038c015260006102fb0152600081816102c7015281816105d6015281816106df015281816108e50152610aa101526116ec6000f3fe60806040526004361061014f5760003560e01c8063715018a6116100b6578063996f79c01161006f578063996f79c014610447578063aec336e61461045d578063d80e9bd91461047d578063dabca063146104aa578063f2fde38b146104ca578063fd9be522146104ea57610156565b8063715018a614610365578063726075371461037a57806372d71322146103c35780638da5cb5b146103e55780638f58aa7a14610403578063909532381461042357610156565b80634389e58f116101085780634389e58f1461025a57806354fd4d50146102895780635e280f11146102b557806361d027b3146102e95780636251b6371461031d5780636750cd4c1461034457610156565b806301ffc9a71461016f5780630e97289b146101a457806312cc947f146101dc5780631881d94d146101fe5780631c7c294e1461021a578063334993ff1461023a57610156565b3661015657005b604051632657b6c360e01b815260040160405180910390fd5b34801561017b57600080fd5b5061018f61018a366004610ee3565b61050a565b60405190151581526020015b60405180910390f35b3480156101b057600080fd5b506001546101c4906001600160a01b031681565b6040516001600160a01b03909116815260200161019b565b3480156101e857600080fd5b506101fc6101f7366004610f4e565b610541565b005b34801561020a57600080fd5b50600260405161019b9190610f8f565b34801561022657600080fd5b506002546101c4906001600160a01b031681565b34801561024657600080fd5b506101fc610255366004610fb7565b6106b3565b34801561026657600080fd5b5061027a6102753660046110d0565b6106c6565b60405161019b93929190611193565b34801561029557600080fd5b50604080516000808252602082015260029181019190915260600161019b565b3480156102c157600080fd5b506101c47f000000000000000000000000000000000000000000000000000000000000000081565b3480156102f557600080fd5b506101c47f000000000000000000000000000000000000000000000000000000000000000081565b34801561032957600080fd5b50610332600181565b60405160ff909116815260200161019b565b34801561035057600080fd5b5061018f61035f3660046111e7565b50600190565b34801561037157600080fd5b506101fc610810565b34801561038657600080fd5b506103ae7f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff909116815260200161019b565b3480156103cf57600080fd5b506103d8610824565b60405161019b9190611202565b3480156103f157600080fd5b506000546001600160a01b03166101c4565b34801561040f57600080fd5b506101fc61041e366004611235565b6108b2565b34801561042f57600080fd5b5061043960035481565b60405190815260200161019b565b34801561045357600080fd5b5061043960045481565b34801561046957600080fd5b506101fc610478366004611261565b6109a7565b34801561048957600080fd5b5061049d61049836600461127e565b6109d1565b60405161019b91906112f8565b3480156104b657600080fd5b506101fc6104c536600461130f565b610a13565b3480156104d657600080fd5b506101fc6104e5366004611261565b610a2b565b3480156104f657600080fd5b506101fc610505366004611235565b610a6e565b60006001600160e01b031982166325fc096160e21b148061053b57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6002546001600160a01b03161580159061056657506002546001600160a01b03163314155b1561058457604051631c2c85bb60e21b815260040160405180910390fd5b6000604051806060016040528061059b8585610b2e565b63ffffffff1681526020016105b08585610b51565b81526020016105bf8585610b71565b6001600160401b0316905290506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663a825d747826106068686610b94565b6106108787610ba6565b60405161061e92919061134b565b6040805191829003822060e086901b6001600160e01b0319168352845163ffffffff166004840152602085015160248401529301516001600160401b031660448201526001600160a01b039091166064820152608481019190915260a401600060405180830381600087803b15801561069657600080fd5b505af11580156106aa573d6000803e3d6000fd5b50505050505050565b6106bb610bc2565b600491909155600355565b60408051808201909152600080825260208201526060807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316331461072657604051630fd72cd960e31b815260040160405180910390fd5b61073761073287611372565b610bef565b9150845160001461074857846107d4565b600580546107559061140f565b80601f01602080910402602001604051908101604052809291908181526020018280546107819061140f565b80156107ce5780601f106107a3576101008083540402835291602001916107ce565b820191906000526020600020905b8154815290600101906020018083116107b157829003601f168201915b50505050505b90506107e08282610c47565b60405180604001604052806004548152602001856107ff576000610803565b6003545b9052969195509350915050565b610818610bc2565b6108226000610caf565b565b600580546108319061140f565b80601f016020809104026020016040519081016040528092919081815260200182805461085d9061140f565b80156108aa5780601f1061087f576101008083540402835291602001916108aa565b820191906000526020600020905b81548152906001019060200180831161088d57829003601f168201915b505050505081565b6108ba610bc2565b6001600160a01b0382166108e157604051633d3496e160e01b815260040160405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e4fe1d946040518163ffffffff1660e01b8152600401602060405180830381865afa158015610941573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109659190611443565b90506001600160a01b03811661098e576040516354c1781b60e01b815260040160405180910390fd5b6109a26001600160a01b0382168484610cff565b505050565b6109af610bc2565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b60408051808201909152600080825260208201526040518060400160405280600454815260200183610a04576000610a08565b6003545b905295945050505050565b610a1b610bc2565b6005610a2782826114a8565b5050565b610a33610bc2565b6001600160a01b038116610a6257604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b610a6b81610caf565b50565b610a76610bc2565b6001600160a01b038216610a9d57604051633d3496e160e01b815260040160405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e1758bd86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610afd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b219190611443565b90506109a2818484610d51565b6000610b3e600d60098486611567565b610b4791611591565b60e01c9392505050565b6000610b61602d600d8486611567565b610b6a916115c1565b9392505050565b6000610b81600960018486611567565b610b8a916115df565b60c01c9392505050565b6000610b6a610ba38484610d74565b90565b366000610bb68360518187611567565b915091505b9250929050565b6000546001600160a01b031633146108225760405163118cdaa760e01b8152336004820152602401610a59565b8051602080830151604080850151606080870151608088015160a089015160c08a015195519398610c3198600198919791966001600160a01b0316950161160d565b6040516020818303038152906040529050919050565b600154604051631f5dad8b60e31b81526001600160a01b039091169063faed6c5890610c799085908590600401611688565b600060405180830381600087803b158015610c9357600080fd5b505af1158015610ca7573d6000803e3d6000fd5b505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526109a2908490610d84565b6001600160a01b038316610d69576109a28282610dfb565b6109a2838383610ea8565b6000610b61605160318486611567565b600080602060008451602086016000885af180610da7576040513d6000823e3d81fd5b50506000513d91508115610dbf578060011415610dcc565b6001600160a01b0384163b155b15610df557604051635274afe760e01b81526001600160a01b0385166004820152602401610a59565b50505050565b6001600160a01b038216610e22576040516306b7a93160e41b815260040160405180910390fd5b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114610e6f576040519150601f19603f3d011682016040523d82523d6000602084013e610e74565b606091505b50509050806109a257604051631196f20d60e21b81526001600160a01b038416600482015260248101839052604401610a59565b6001600160a01b038216610ecf576040516306b7a93160e41b815260040160405180910390fd5b6109a26001600160a01b0384168383610cff565b600060208284031215610ef557600080fd5b81356001600160e01b031981168114610b6a57600080fd5b60008083601f840112610f1f57600080fd5b5081356001600160401b03811115610f3657600080fd5b602083019150836020828501011115610bbb57600080fd5b60008060208385031215610f6157600080fd5b82356001600160401b03811115610f7757600080fd5b610f8385828601610f0d565b90969095509350505050565b6020810160038310610fb157634e487b7160e01b600052602160045260246000fd5b91905290565b60008060408385031215610fca57600080fd5b50508035926020909101359150565b600060e08284031215610feb57600080fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b60405160e081016001600160401b038111828210171561102957611029610ff1565b60405290565b600082601f83011261104057600080fd5b81356001600160401b038082111561105a5761105a610ff1565b604051601f8301601f19908116603f0116810190828211818310171561108257611082610ff1565b8160405283815286602085880101111561109b57600080fd5b836020870160208301376000602085830101528094505050505092915050565b803580151581146110cb57600080fd5b919050565b6000806000606084860312156110e557600080fd5b83356001600160401b03808211156110fc57600080fd5b61110887838801610fd9565b9450602086013591508082111561111e57600080fd5b5061112b8682870161102f565b92505061113a604085016110bb565b90509250925092565b60005b8381101561115e578181015183820152602001611146565b50506000910152565b6000815180845261117f816020860160208601611143565b601f01601f19169290920160200192915050565b83518152602080850151908201526080604082015260006111b76080830185611167565b82810360608401526111c98185611167565b9695505050505050565b803563ffffffff811681146110cb57600080fd5b6000602082840312156111f957600080fd5b610b6a826111d3565b602081526000610b6a6020830184611167565b6001600160a01b0381168114610a6b57600080fd5b80356110cb81611215565b6000806040838503121561124857600080fd5b823561125381611215565b946020939093013593505050565b60006020828403121561127357600080fd5b8135610b6a81611215565b6000806000806060858703121561129457600080fd5b84356001600160401b03808211156112ab57600080fd5b6112b788838901610fd9565b955060208701359150808211156112cd57600080fd5b506112da87828801610f0d565b90945092506112ed9050604086016110bb565b905092959194509250565b81518152602080830151908201526040810161053b565b60006020828403121561132157600080fd5b81356001600160401b0381111561133757600080fd5b6113438482850161102f565b949350505050565b8183823760009101908152919050565b80356001600160401b03811681146110cb57600080fd5b600060e0823603121561138457600080fd5b61138c611007565b6113958361135b565b81526113a3602084016111d3565b60208201526113b46040840161122a565b60408201526113c5606084016111d3565b60608201526080830135608082015260a083013560a082015260c08301356001600160401b038111156113f757600080fd5b6114033682860161102f565b60c08301525092915050565b600181811c9082168061142357607f821691505b602082108103610feb57634e487b7160e01b600052602260045260246000fd5b60006020828403121561145557600080fd5b8151610b6a81611215565b601f8211156109a2576000816000526020600020601f850160051c810160208610156114895750805b601f850160051c820191505b81811015610ca757828155600101611495565b81516001600160401b038111156114c1576114c1610ff1565b6114d5816114cf845461140f565b84611460565b602080601f83116001811461150a57600084156114f25750858301515b600019600386901b1c1916600185901b178555610ca7565b600085815260208120601f198616915b828110156115395788860151825594840194600190910190840161151a565b50858210156115575787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000808585111561157757600080fd5b8386111561158457600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156115b95780818660040360031b1b83161692505b505092915050565b8035602083101561053b57600019602084900360031b1b1692915050565b6001600160c01b031981358181169160088510156115b95760089490940360031b84901b1690921692915050565b60ff60f81b8960f81b1681526001600160401b0360c01b8860c01b166001820152600063ffffffff60e01b808960e01b16600984015287600d840152808760e01b16602d840152508460318301528360518301528251611674816071850160208701611143565b919091016071019998505050505050505050565b60408152600061169b6040830185611167565b82810360208401526116ad8185611167565b9594505050505056fea2646970667358221220c3e86e5a7f47955117c968f35183229c2a822980b5af2d2973f411f36b4f38a564736f6c63430008160033", - "sourceMap": "1070:4885:83:-:0;;;2016:387;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2086:10;;1269:95:107;;1322:31;;-1:-1:-1;;;1322:31:107;;1350:1;1322:31;;;718:51:132;691:18;;1322:31:107;;;;;;;1269:95;1373:32;1392:12;1373:18;:32::i;:::-;-1:-1:-1;2108:10:83::1;:41:::0;;-1:-1:-1;;;;;;2108:41:83::1;-1:-1:-1::0;;;;;2108:41:83;;::::1;::::0;;;::::1;::::0;;;2159:20;::::1;;::::0;;;-1:-1:-1;2189:23:83::1;::::0;2233:37:::1;::::0;;-1:-1:-1;;;2233:37:83;;;;:35:::1;::::0;:37:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;2159:20;2233:37:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2222:48;;;::::0;-1:-1:-1;;2293:2:83::1;2280:10;:15:::0;2317:3:::1;2305:9;:15:::0;1070:4885;;2912:187:107;2985:16;3004:6;;-1:-1:-1;;;;;3020:17:107;;;-1:-1:-1;;;;;;3020:17:107;;;;;;3052:40;;3004:6;;;;;;;3052:40;;2985:16;3052:40;2975:124;2912:187;:::o;14:139:132:-;-1:-1:-1;;;;;97:31:132;;87:42;;77:70;;143:1;140;133:12;77:70;14:139;:::o;158:409::-;245:6;253;306:2;294:9;285:7;281:23;277:32;274:52;;;322:1;319;312:12;274:52;354:9;348:16;373:39;406:5;373:39;:::i;:::-;481:2;466:18;;460:25;431:5;;-1:-1:-1;494:41:132;460:25;494:41;:::i;:::-;554:7;544:17;;;158:409;;;;;:::o;780:280::-;849:6;902:2;890:9;881:7;877:23;873:32;870:52;;;918:1;915;908:12;870:52;950:9;944:16;1000:10;993:5;989:22;982:5;979:33;969:61;;1026:1;1023;1016:12;969:61;1049:5;780:280;-1:-1:-1;;;780:280:132:o;:::-;1070:4885:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", - "linkReferences": {} - }, - "deployedBytecode": { - "object": "0x60806040526004361061014f5760003560e01c8063715018a6116100b6578063996f79c01161006f578063996f79c014610447578063aec336e61461045d578063d80e9bd91461047d578063dabca063146104aa578063f2fde38b146104ca578063fd9be522146104ea57610156565b8063715018a614610365578063726075371461037a57806372d71322146103c35780638da5cb5b146103e55780638f58aa7a14610403578063909532381461042357610156565b80634389e58f116101085780634389e58f1461025a57806354fd4d50146102895780635e280f11146102b557806361d027b3146102e95780636251b6371461031d5780636750cd4c1461034457610156565b806301ffc9a71461016f5780630e97289b146101a457806312cc947f146101dc5780631881d94d146101fe5780631c7c294e1461021a578063334993ff1461023a57610156565b3661015657005b604051632657b6c360e01b815260040160405180910390fd5b34801561017b57600080fd5b5061018f61018a366004610ee3565b61050a565b60405190151581526020015b60405180910390f35b3480156101b057600080fd5b506001546101c4906001600160a01b031681565b6040516001600160a01b03909116815260200161019b565b3480156101e857600080fd5b506101fc6101f7366004610f4e565b610541565b005b34801561020a57600080fd5b50600260405161019b9190610f8f565b34801561022657600080fd5b506002546101c4906001600160a01b031681565b34801561024657600080fd5b506101fc610255366004610fb7565b6106b3565b34801561026657600080fd5b5061027a6102753660046110d0565b6106c6565b60405161019b93929190611193565b34801561029557600080fd5b50604080516000808252602082015260029181019190915260600161019b565b3480156102c157600080fd5b506101c47f000000000000000000000000000000000000000000000000000000000000000081565b3480156102f557600080fd5b506101c47f000000000000000000000000000000000000000000000000000000000000000081565b34801561032957600080fd5b50610332600181565b60405160ff909116815260200161019b565b34801561035057600080fd5b5061018f61035f3660046111e7565b50600190565b34801561037157600080fd5b506101fc610810565b34801561038657600080fd5b506103ae7f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff909116815260200161019b565b3480156103cf57600080fd5b506103d8610824565b60405161019b9190611202565b3480156103f157600080fd5b506000546001600160a01b03166101c4565b34801561040f57600080fd5b506101fc61041e366004611235565b6108b2565b34801561042f57600080fd5b5061043960035481565b60405190815260200161019b565b34801561045357600080fd5b5061043960045481565b34801561046957600080fd5b506101fc610478366004611261565b6109a7565b34801561048957600080fd5b5061049d61049836600461127e565b6109d1565b60405161019b91906112f8565b3480156104b657600080fd5b506101fc6104c536600461130f565b610a13565b3480156104d657600080fd5b506101fc6104e5366004611261565b610a2b565b3480156104f657600080fd5b506101fc610505366004611235565b610a6e565b60006001600160e01b031982166325fc096160e21b148061053b57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6002546001600160a01b03161580159061056657506002546001600160a01b03163314155b1561058457604051631c2c85bb60e21b815260040160405180910390fd5b6000604051806060016040528061059b8585610b2e565b63ffffffff1681526020016105b08585610b51565b81526020016105bf8585610b71565b6001600160401b0316905290506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663a825d747826106068686610b94565b6106108787610ba6565b60405161061e92919061134b565b6040805191829003822060e086901b6001600160e01b0319168352845163ffffffff166004840152602085015160248401529301516001600160401b031660448201526001600160a01b039091166064820152608481019190915260a401600060405180830381600087803b15801561069657600080fd5b505af11580156106aa573d6000803e3d6000fd5b50505050505050565b6106bb610bc2565b600491909155600355565b60408051808201909152600080825260208201526060807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316331461072657604051630fd72cd960e31b815260040160405180910390fd5b61073761073287611372565b610bef565b9150845160001461074857846107d4565b600580546107559061140f565b80601f01602080910402602001604051908101604052809291908181526020018280546107819061140f565b80156107ce5780601f106107a3576101008083540402835291602001916107ce565b820191906000526020600020905b8154815290600101906020018083116107b157829003601f168201915b50505050505b90506107e08282610c47565b60405180604001604052806004548152602001856107ff576000610803565b6003545b9052969195509350915050565b610818610bc2565b6108226000610caf565b565b600580546108319061140f565b80601f016020809104026020016040519081016040528092919081815260200182805461085d9061140f565b80156108aa5780601f1061087f576101008083540402835291602001916108aa565b820191906000526020600020905b81548152906001019060200180831161088d57829003601f168201915b505050505081565b6108ba610bc2565b6001600160a01b0382166108e157604051633d3496e160e01b815260040160405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e4fe1d946040518163ffffffff1660e01b8152600401602060405180830381865afa158015610941573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109659190611443565b90506001600160a01b03811661098e576040516354c1781b60e01b815260040160405180910390fd5b6109a26001600160a01b0382168484610cff565b505050565b6109af610bc2565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b60408051808201909152600080825260208201526040518060400160405280600454815260200183610a04576000610a08565b6003545b905295945050505050565b610a1b610bc2565b6005610a2782826114a8565b5050565b610a33610bc2565b6001600160a01b038116610a6257604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b610a6b81610caf565b50565b610a76610bc2565b6001600160a01b038216610a9d57604051633d3496e160e01b815260040160405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e1758bd86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610afd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b219190611443565b90506109a2818484610d51565b6000610b3e600d60098486611567565b610b4791611591565b60e01c9392505050565b6000610b61602d600d8486611567565b610b6a916115c1565b9392505050565b6000610b81600960018486611567565b610b8a916115df565b60c01c9392505050565b6000610b6a610ba38484610d74565b90565b366000610bb68360518187611567565b915091505b9250929050565b6000546001600160a01b031633146108225760405163118cdaa760e01b8152336004820152602401610a59565b8051602080830151604080850151606080870151608088015160a089015160c08a015195519398610c3198600198919791966001600160a01b0316950161160d565b6040516020818303038152906040529050919050565b600154604051631f5dad8b60e31b81526001600160a01b039091169063faed6c5890610c799085908590600401611688565b600060405180830381600087803b158015610c9357600080fd5b505af1158015610ca7573d6000803e3d6000fd5b505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526109a2908490610d84565b6001600160a01b038316610d69576109a28282610dfb565b6109a2838383610ea8565b6000610b61605160318486611567565b600080602060008451602086016000885af180610da7576040513d6000823e3d81fd5b50506000513d91508115610dbf578060011415610dcc565b6001600160a01b0384163b155b15610df557604051635274afe760e01b81526001600160a01b0385166004820152602401610a59565b50505050565b6001600160a01b038216610e22576040516306b7a93160e41b815260040160405180910390fd5b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114610e6f576040519150601f19603f3d011682016040523d82523d6000602084013e610e74565b606091505b50509050806109a257604051631196f20d60e21b81526001600160a01b038416600482015260248101839052604401610a59565b6001600160a01b038216610ecf576040516306b7a93160e41b815260040160405180910390fd5b6109a26001600160a01b0384168383610cff565b600060208284031215610ef557600080fd5b81356001600160e01b031981168114610b6a57600080fd5b60008083601f840112610f1f57600080fd5b5081356001600160401b03811115610f3657600080fd5b602083019150836020828501011115610bbb57600080fd5b60008060208385031215610f6157600080fd5b82356001600160401b03811115610f7757600080fd5b610f8385828601610f0d565b90969095509350505050565b6020810160038310610fb157634e487b7160e01b600052602160045260246000fd5b91905290565b60008060408385031215610fca57600080fd5b50508035926020909101359150565b600060e08284031215610feb57600080fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b60405160e081016001600160401b038111828210171561102957611029610ff1565b60405290565b600082601f83011261104057600080fd5b81356001600160401b038082111561105a5761105a610ff1565b604051601f8301601f19908116603f0116810190828211818310171561108257611082610ff1565b8160405283815286602085880101111561109b57600080fd5b836020870160208301376000602085830101528094505050505092915050565b803580151581146110cb57600080fd5b919050565b6000806000606084860312156110e557600080fd5b83356001600160401b03808211156110fc57600080fd5b61110887838801610fd9565b9450602086013591508082111561111e57600080fd5b5061112b8682870161102f565b92505061113a604085016110bb565b90509250925092565b60005b8381101561115e578181015183820152602001611146565b50506000910152565b6000815180845261117f816020860160208601611143565b601f01601f19169290920160200192915050565b83518152602080850151908201526080604082015260006111b76080830185611167565b82810360608401526111c98185611167565b9695505050505050565b803563ffffffff811681146110cb57600080fd5b6000602082840312156111f957600080fd5b610b6a826111d3565b602081526000610b6a6020830184611167565b6001600160a01b0381168114610a6b57600080fd5b80356110cb81611215565b6000806040838503121561124857600080fd5b823561125381611215565b946020939093013593505050565b60006020828403121561127357600080fd5b8135610b6a81611215565b6000806000806060858703121561129457600080fd5b84356001600160401b03808211156112ab57600080fd5b6112b788838901610fd9565b955060208701359150808211156112cd57600080fd5b506112da87828801610f0d565b90945092506112ed9050604086016110bb565b905092959194509250565b81518152602080830151908201526040810161053b565b60006020828403121561132157600080fd5b81356001600160401b0381111561133757600080fd5b6113438482850161102f565b949350505050565b8183823760009101908152919050565b80356001600160401b03811681146110cb57600080fd5b600060e0823603121561138457600080fd5b61138c611007565b6113958361135b565b81526113a3602084016111d3565b60208201526113b46040840161122a565b60408201526113c5606084016111d3565b60608201526080830135608082015260a083013560a082015260c08301356001600160401b038111156113f757600080fd5b6114033682860161102f565b60c08301525092915050565b600181811c9082168061142357607f821691505b602082108103610feb57634e487b7160e01b600052602260045260246000fd5b60006020828403121561145557600080fd5b8151610b6a81611215565b601f8211156109a2576000816000526020600020601f850160051c810160208610156114895750805b601f850160051c820191505b81811015610ca757828155600101611495565b81516001600160401b038111156114c1576114c1610ff1565b6114d5816114cf845461140f565b84611460565b602080601f83116001811461150a57600084156114f25750858301515b600019600386901b1c1916600185901b178555610ca7565b600085815260208120601f198616915b828110156115395788860151825594840194600190910190840161151a565b50858210156115575787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000808585111561157757600080fd5b8386111561158457600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156115b95780818660040360031b1b83161692505b505092915050565b8035602083101561053b57600019602084900360031b1b1692915050565b6001600160c01b031981358181169160088510156115b95760089490940360031b84901b1690921692915050565b60ff60f81b8960f81b1681526001600160401b0360c01b8860c01b166001820152600063ffffffff60e01b808960e01b16600984015287600d840152808760e01b16602d840152508460318301528360518301528251611674816071850160208701611143565b919091016071019998505050505050505050565b60408152600061169b6040830185611167565b82810360208401526116ad8185611167565b9594505050505056fea2646970667358221220c3e86e5a7f47955117c968f35183229c2a822980b5af2d2973f411f36b4f38a564736f6c63430008160033", - "sourceMap": "1070:4885:83:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5885:26;;-1:-1:-1;;;5885:26:83;;;;;;;;;;;2409:191;;;;;;;;;;-1:-1:-1;2409:191:83;;;;;:::i;:::-;;:::i;:::-;;;470:14:132;;463:22;445:41;;433:2;418:18;2409:191:83;;;;;;;;1158:31;;;;;;;;;;-1:-1:-1;1158:31:83;;;;-1:-1:-1;;;;;1158:31:83;;;;;;-1:-1:-1;;;;;692:32:132;;;674:51;;662:2;647:18;1158:31:83;497:234:132;2640:420:83;;;;;;;;;;-1:-1:-1;2640:420:83;;;;;:::i;:::-;;:::i;:::-;;5364:118;;;;;;;;;;-1:-1:-1;5446:29:83;5364:118;;;;;;:::i;1427:30::-;;;;;;;;;;-1:-1:-1;1427:30:83;;;;-1:-1:-1;;;;;1427:30:83;;;3792:158;;;;;;;;;;-1:-1:-1;3792:158:83;;;;;:::i;:::-;;:::i;3124:480::-;;;;;;;;;;-1:-1:-1;3124:480:83;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;5233:125::-;;;;;;;;;;-1:-1:-1;5233:125:83;;;5275:12;5813:50:132;;;5894:2;5879:18;;5872:45;5349:1:83;5933:18:132;;;5926:45;;;;5801:2;5786:18;5233:125:83;5621:356:132;1264:33:83;;;;;;;;;;;;;;;1303;;;;;;;;;;;;;;;1380:40;;;;;;;;;;;;1419:1;1380:40;;;;;6154:4:132;6142:17;;;6124:36;;6112:2;6097:18;1380:40:83;5982:184:132;5138:89:83;;;;;;;;;;-1:-1:-1;5138:89:83;;;;;:::i;:::-;-1:-1:-1;5216:4:83;;5138:89;2293:101:107;;;;;;;;;;;;;:::i;1342:32:83:-;;;;;;;;;;;;;;;;;;6702:10:132;6690:23;;;6672:42;;6660:2;6645:18;1342:32:83;6528:192:132;1526:26:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;1638:85:107:-;;;;;;;;;;-1:-1:-1;1684:7:107;1710:6;-1:-1:-1;;;;;1710:6:107;1638:85;;4451:379:83;;;;;;;;;;-1:-1:-1;4451:379:83;;;;;:::i;:::-;;:::i;1464:25::-;;;;;;;;;;;;;;;;;;;7688::132;;;7676:2;7661:18;1464:25:83;7542:177:132;1495:24:83;;;;;;;;;;;;;;;;3956:124;;;;;;;;;;-1:-1:-1;3956:124:83;;;;;:::i;:::-;;:::i;4886:246::-;;;;;;;;;;-1:-1:-1;4886:246:83;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;3665:121::-;;;;;;;;;;-1:-1:-1;3665:121:83;;;;;:::i;:::-;;:::i;2543:215:107:-;;;;;;;;;;-1:-1:-1;2543:215:107;;;;;:::i;:::-;;:::i;4086:359:83:-;;;;;;;;;;-1:-1:-1;4086:359:83;;;;;:::i;:::-;;:::i;2409:191::-;2486:4;-1:-1:-1;;;;;;2509:44:83;;-1:-1:-1;;;2509:44:83;;:84;;-1:-1:-1;;;;;;;;;;862:40:123;;;2557:36:83;2502:91;2409:191;-1:-1:-1;;2409:191:83:o;2640:420::-;2715:15;;-1:-1:-1;;;;;2715:15:83;:31;;;;:64;;-1:-1:-1;2764:15:83;;-1:-1:-1;;;;;2764:15:83;2750:10;:29;;2715:64;2711:123;;;2802:21;;-1:-1:-1;;;2802:21:83;;;;;;;;;;;2711:123;2843:20;2866:71;;;;;;;;2873:20;:11;;:18;:20::i;:::-;2866:71;;;;;;2895:20;:11;;:18;:20::i;:::-;2866:71;;;;2917:19;:11;;:17;:19::i;:::-;-1:-1:-1;;;;;2866:71:83;;;2843:94;-1:-1:-1;;;;;;2968:8:83;2947:37;;2843:94;2993:25;:11;;:23;:25::i;:::-;3030:21;:11;;:19;:21::i;:::-;3020:32;;;;;;;:::i;:::-;;;;;;;;;;2947:106;;;;-1:-1:-1;;;;;;2947:106:83;;;9851:13:132;;9866:10;9847:30;2947:106:83;;;9829:49:132;9934:4;9922:17;;9916:24;9894:20;;;9887:54;9989:17;;9983:24;-1:-1:-1;;;;;9979:49:132;9957:20;;;9950:79;-1:-1:-1;;;;;10065:32:132;;;10045:18;;;10038:60;10114:19;;;10107:35;;;;9801:19;;2947:106:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2701:359;2640:420;;:::o;3792:158::-;1531:13:107;:11;:13::i;:::-;3887:9:83::1;:22:::0;;;;3919:10:::1;:24:::0;3792:158::o;3124:480::-;-1:-1:-1;;;;;;;;;;;;;;;;;3292:26:83;;1866:8;-1:-1:-1;;;;;1866:22:83;1878:10;1866:22;1862:74;;1911:14;;-1:-1:-1;;;1911:14:83;;;;;;;;;;;1862:74;3368:29:::1;;3389:7:::0;3368:29:::1;:::i;:::-;:20;:29::i;:::-;3352:45;;3418:8;:15;3437:1;3418:20;:47;;3457:8;3418:47;;;3441:13;3418:47;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3408:57;;3475:50;3502:13;3517:7;3475:26;:50::i;:::-;3542:55;;;;;;;;3555:9;;3542:55;;;;3566:13;:30;;3595:1;3566:30;;;3582:10;;3566:30;3542:55:::0;;3536:61;3124:480;;-1:-1:-1;3124:480:83;-1:-1:-1;3124:480:83;-1:-1:-1;;3124:480:83:o;2293:101:107:-;1531:13;:11;:13::i;:::-;2357:30:::1;2384:1;2357:18;:30::i;:::-;2293:101::o:0;1526:26:83:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;4451:379::-;1531:13:107;:11;:13::i;:::-;-1:-1:-1;;;;;4542:19:83;::::1;4538:74;;4584:17;;-1:-1:-1::0;;;4584:17:83::1;;;;;;;;;;;4538:74;4621:15;4660:8;-1:-1:-1::0;;;;;4639:38:83::1;;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4621:58:::0;-1:-1:-1;;;;;;4693:23:83;::::1;4689:83;;4739:22;;-1:-1:-1::0;;;4739:22:83::1;;;;;;;;;;;4689:83;4781:42;-1:-1:-1::0;;;;;4781:28:83;::::1;4810:3:::0;4815:7;4781:28:::1;:42::i;:::-;4528:302;4451:379:::0;;:::o;3956:124::-;1531:13:107;:11;:13::i;:::-;4039:15:83::1;:34:::0;;-1:-1:-1;;;;;;4039:34:83::1;-1:-1:-1::0;;;;;4039:34:83;;;::::1;::::0;;;::::1;::::0;;3956:124::o;4886:246::-;-1:-1:-1;;;;;;;;;;;;;;;;;5070:55:83;;;;;;;;5083:9;;5070:55;;;;5094:13;:30;;5123:1;5094:30;;;5110:10;;5094:30;5070:55;;5063:62;4886:246;-1:-1:-1;;;;;4886:246:83:o;3665:121::-;1531:13:107;:11;:13::i;:::-;3749::83::1;:30;3765:14:::0;3749:13;:30:::1;:::i;:::-;;3665:121:::0;:::o;2543:215:107:-;1531:13;:11;:13::i;:::-;-1:-1:-1;;;;;2627:22:107;::::1;2623:91;;2672:31;::::0;-1:-1:-1;;;2672:31:107;;2700:1:::1;2672:31;::::0;::::1;674:51:132::0;647:18;;2672:31:107::1;;;;;;;;2623:91;2723:28;2742:8;2723:18;:28::i;:::-;2543:215:::0;:::o;4086:359:83:-;1531:13:107;:11;:13::i;:::-;-1:-1:-1;;;;;4170:19:83;::::1;4166:74;;4212:17;;-1:-1:-1::0;;;4212:17:83::1;;;;;;;;;;;4166:74;4250:20;4294:8;-1:-1:-1::0;;;;;4273:42:83::1;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4250:67;;4388:50;4411:12;4425:3;4430:7;4388:22;:50::i;2230:148:48:-:0;2293:6;2332:37;605:2;557:1;2332:7;;:37;:::i;:::-;2325:45;;;:::i;:::-;2318:53;;;2230:148;-1:-1:-1;;;2230:148:48:o;2384:142::-;2447:7;2481:37;655:2;605;2481:7;;:37;:::i;:::-;2473:46;;;:::i;:::-;2466:53;2384:142;-1:-1:-1;;;2384:142:48:o;2078:146::-;2140:6;2179:36;557:1;493;2179:7;;:36;:::i;:::-;2172:44;;;:::i;:::-;2165:52;;;2078:146;-1:-1:-1;;;2078:146:48:o;2976:130::-;3044:7;3070:29;:17;3079:7;;3070:8;:17::i;:::-;1210:15:40;1084:151;3397:132:48;3461:14;;3500:21;:7;785:2;3500:7;;:21;:::i;:::-;3487:35;;;;3397:132;;;;;;:::o;1796:162:107:-;1684:7;1710:6;-1:-1:-1;;;;;1710:6:107;735:10:117;1855:23:107;1851:101;;1901:40;;-1:-1:-1;;;1901:40:107;;735:10:117;1901:40:107;;;674:51:132;647:18;;1901:40:107;497:234:132;872:385:48;1046:13;;1073:14;;;;;1101;;;;;934:26;1141:14;;;;1169:16;;;;1199:12;;;;1225:15;;;;988:262;;934:26;;988:262;;319:1;;1046:13;;1073:14;;-1:-1:-1;;;;;1101:24:48;;988:262;;:::i;:::-;;;;;;;;;;;;;972:278;;872:385;;;:::o;5661:173:83:-;5776:10;;:51;;-1:-1:-1;;;5776:51:83;;-1:-1:-1;;;;;5776:10:83;;;;:25;;:51;;5802:14;;5818:8;;5776:51;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5661:173;;:::o;2912:187:107:-;2985:16;3004:6;;-1:-1:-1;;;;;3020:17:107;;;-1:-1:-1;;;;;;3020:17:107;;;;;;3052:40;;3004:6;;;;;;;3052:40;;2985:16;3052:40;2975:124;2912:187;:::o;1271:160:115:-;1380:43;;;-1:-1:-1;;;;;16737:32:132;;1380:43:115;;;16719:51:132;16786:18;;;;16779:34;;;1380:43:115;;;;;;;;;;16692:18:132;;;;1380:43:115;;;;;;;;-1:-1:-1;;;;;1380:43:115;-1:-1:-1;;;1380:43:115;;;1353:71;;1373:5;;1353:19;:71::i;896:222:44:-;-1:-1:-1;;;;;987:22:44;;983:129;;1025:19;1032:3;1037:6;1025;:19::i;983:129::-;1075:26;1081:6;1089:3;1094:6;1075:5;:26::i;2827:143:48:-;2892:7;2926:36;785:2;706;2926:7;;:36;:::i;7738:720:115:-;7818:18;7846:19;7984:4;7981:1;7974:4;7968:11;7961:4;7955;7951:15;7948:1;7941:5;7934;7929:60;8041:7;8031:176;;8085:4;8079:11;8130:16;8127:1;8122:3;8107:40;8176:16;8171:3;8164:29;8031:176;-1:-1:-1;;8284:1:115;8278:8;8234:16;;-1:-1:-1;8310:15:115;;:68;;8362:11;8377:1;8362:16;;8310:68;;;-1:-1:-1;;;;;8328:26:115;;;:31;8310:68;8306:146;;;8401:40;;-1:-1:-1;;;8401:40:115;;-1:-1:-1;;;;;692:32:132;;8401:40:115;;;674:51:132;647:18;;8401:40:115;497:234:132;8306:146:115;7808:650;;7738:720;;:::o;438:252:44:-;-1:-1:-1;;;;;506:19:44;;502:58;;534:26;;-1:-1:-1;;;534:26:44;;;;;;;;;;;502:58;571:12;589:3;-1:-1:-1;;;;;589:8:44;606:6;589:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;570:48;;;633:7;628:55;;649:34;;-1:-1:-1;;;649:34:44;;-1:-1:-1;;;;;16737:32:132;;649:34:44;;;16719:51:132;16786:18;;;16779:34;;;16692:18;;649:34:44;16545:274:132;696:194:44;-1:-1:-1;;;;;779:19:44;;775:58;;807:26;;-1:-1:-1;;;807:26:44;;;;;;;;;;;775:58;843:40;-1:-1:-1;;;;;843:27:44;;871:3;876:6;843:27;:40::i;14:286:132:-;72:6;125:2;113:9;104:7;100:23;96:32;93:52;;;141:1;138;131:12;93:52;167:23;;-1:-1:-1;;;;;;219:32:132;;209:43;;199:71;;266:1;263;256:12;736:347;787:8;797:6;851:3;844:4;836:6;832:17;828:27;818:55;;869:1;866;859:12;818:55;-1:-1:-1;892:20:132;;-1:-1:-1;;;;;924:30:132;;921:50;;;967:1;964;957:12;921:50;1004:4;996:6;992:17;980:29;;1056:3;1049:4;1040:6;1032;1028:19;1024:30;1021:39;1018:59;;;1073:1;1070;1063:12;1088:409;1158:6;1166;1219:2;1207:9;1198:7;1194:23;1190:32;1187:52;;;1235:1;1232;1225:12;1187:52;1275:9;1262:23;-1:-1:-1;;;;;1300:6:132;1297:30;1294:50;;;1340:1;1337;1330:12;1294:50;1379:58;1429:7;1420:6;1409:9;1405:22;1379:58;:::i;:::-;1456:8;;1353:84;;-1:-1:-1;1088:409:132;-1:-1:-1;;;;1088:409:132:o;1502:347::-;1653:2;1638:18;;1686:1;1675:13;;1665:144;;1731:10;1726:3;1722:20;1719:1;1712:31;1766:4;1763:1;1756:15;1794:4;1791:1;1784:15;1665:144;1818:25;;;1502:347;:::o;2062:248::-;2130:6;2138;2191:2;2179:9;2170:7;2166:23;2162:32;2159:52;;;2207:1;2204;2197:12;2159:52;-1:-1:-1;;2230:23:132;;;2300:2;2285:18;;;2272:32;;-1:-1:-1;2062:248:132:o;2315:155::-;2374:5;2419:3;2410:6;2405:3;2401:16;2397:26;2394:46;;;2436:1;2433;2426:12;2394:46;-1:-1:-1;2458:6:132;2315:155;-1:-1:-1;2315:155:132:o;2475:127::-;2536:10;2531:3;2527:20;2524:1;2517:31;2567:4;2564:1;2557:15;2591:4;2588:1;2581:15;2607:248;2674:2;2668:9;2716:4;2704:17;;-1:-1:-1;;;;;2736:34:132;;2772:22;;;2733:62;2730:88;;;2798:18;;:::i;:::-;2834:2;2827:22;2607:248;:::o;2860:718::-;2902:5;2955:3;2948:4;2940:6;2936:17;2932:27;2922:55;;2973:1;2970;2963:12;2922:55;3009:6;2996:20;-1:-1:-1;;;;;3072:2:132;3068;3065:10;3062:36;;;3078:18;;:::i;:::-;3153:2;3147:9;3121:2;3207:13;;-1:-1:-1;;3203:22:132;;;3227:2;3199:31;3195:40;3183:53;;;3251:18;;;3271:22;;;3248:46;3245:72;;;3297:18;;:::i;:::-;3337:10;3333:2;3326:22;3372:2;3364:6;3357:18;3418:3;3411:4;3406:2;3398:6;3394:15;3390:26;3387:35;3384:55;;;3435:1;3432;3425:12;3384:55;3499:2;3492:4;3484:6;3480:17;3473:4;3465:6;3461:17;3448:54;3546:1;3539:4;3534:2;3526:6;3522:15;3518:26;3511:37;3566:6;3557:15;;;;;;2860:718;;;;:::o;3583:160::-;3648:20;;3704:13;;3697:21;3687:32;;3677:60;;3733:1;3730;3723:12;3677:60;3583:160;;;:::o;3748:641::-;3857:6;3865;3873;3926:2;3914:9;3905:7;3901:23;3897:32;3894:52;;;3942:1;3939;3932:12;3894:52;3982:9;3969:23;-1:-1:-1;;;;;4052:2:132;4044:6;4041:14;4038:34;;;4068:1;4065;4058:12;4038:34;4091:66;4149:7;4140:6;4129:9;4125:22;4091:66;:::i;:::-;4081:76;;4210:2;4199:9;4195:18;4182:32;4166:48;;4239:2;4229:8;4226:16;4223:36;;;4255:1;4252;4245:12;4223:36;;4278:51;4321:7;4310:8;4299:9;4295:24;4278:51;:::i;:::-;4268:61;;;4348:35;4379:2;4368:9;4364:18;4348:35;:::i;:::-;4338:45;;3748:641;;;;;:::o;4552:250::-;4637:1;4647:113;4661:6;4658:1;4655:13;4647:113;;;4737:11;;;4731:18;4718:11;;;4711:39;4683:2;4676:10;4647:113;;;-1:-1:-1;;4794:1:132;4776:16;;4769:27;4552:250::o;4807:270::-;4848:3;4886:5;4880:12;4913:6;4908:3;4901:19;4929:76;4998:6;4991:4;4986:3;4982:14;4975:4;4968:5;4964:16;4929:76;:::i;:::-;5059:2;5038:15;-1:-1:-1;;5034:29:132;5025:39;;;;5066:4;5021:50;;4807:270;-1:-1:-1;;4807:270:132:o;5082:534::-;4472:12;;4460:25;;4534:4;4523:16;;;4517:23;4501:14;;;4494:47;5430:3;5425:2;5414:9;5410:18;5403:31;5326:4;5457:45;5497:3;5486:9;5482:19;5474:6;5457:45;:::i;:::-;5550:9;5542:6;5538:22;5533:2;5522:9;5518:18;5511:50;5578:32;5603:6;5595;5578:32;:::i;:::-;5570:40;5082:534;-1:-1:-1;;;;;;5082:534:132:o;6171:163::-;6238:20;;6298:10;6287:22;;6277:33;;6267:61;;6324:1;6321;6314:12;6339:184;6397:6;6450:2;6438:9;6429:7;6425:23;6421:32;6418:52;;;6466:1;6463;6456:12;6418:52;6489:28;6507:9;6489:28;:::i;6725:217::-;6872:2;6861:9;6854:21;6835:4;6892:44;6932:2;6921:9;6917:18;6909:6;6892:44;:::i;6947:131::-;-1:-1:-1;;;;;7022:31:132;;7012:42;;7002:70;;7068:1;7065;7058:12;7083:134;7151:20;;7180:31;7151:20;7180:31;:::i;7222:315::-;7290:6;7298;7351:2;7339:9;7330:7;7326:23;7322:32;7319:52;;;7367:1;7364;7357:12;7319:52;7406:9;7393:23;7425:31;7450:5;7425:31;:::i;:::-;7475:5;7527:2;7512:18;;;;7499:32;;-1:-1:-1;;;7222:315:132:o;7724:247::-;7783:6;7836:2;7824:9;7815:7;7811:23;7807:32;7804:52;;;7852:1;7849;7842:12;7804:52;7891:9;7878:23;7910:31;7935:5;7910:31;:::i;7976:730::-;8087:6;8095;8103;8111;8164:2;8152:9;8143:7;8139:23;8135:32;8132:52;;;8180:1;8177;8170:12;8132:52;8220:9;8207:23;-1:-1:-1;;;;;8290:2:132;8282:6;8279:14;8276:34;;;8306:1;8303;8296:12;8276:34;8329:66;8387:7;8378:6;8367:9;8363:22;8329:66;:::i;:::-;8319:76;;8448:2;8437:9;8433:18;8420:32;8404:48;;8477:2;8467:8;8464:16;8461:36;;;8493:1;8490;8483:12;8461:36;;8532:60;8584:7;8573:8;8562:9;8558:24;8532:60;:::i;:::-;8611:8;;-1:-1:-1;8506:86:132;-1:-1:-1;8665:35:132;;-1:-1:-1;8696:2:132;8681:18;;8665:35;:::i;:::-;8655:45;;7976:730;;;;;;;:::o;8711:261::-;4472:12;;4460:25;;4534:4;4523:16;;;4517:23;4501:14;;;4494:47;8905:2;8890:18;;8917:49;4394:153;8977:320;9045:6;9098:2;9086:9;9077:7;9073:23;9069:32;9066:52;;;9114:1;9111;9104:12;9066:52;9154:9;9141:23;-1:-1:-1;;;;;9179:6:132;9176:30;9173:50;;;9219:1;9216;9209:12;9173:50;9242:49;9283:7;9274:6;9263:9;9259:22;9242:49;:::i;:::-;9232:59;8977:320;-1:-1:-1;;;;8977:320:132:o;9302:271::-;9485:6;9477;9472:3;9459:33;9441:3;9511:16;;9536:13;;;9511:16;9302:271;-1:-1:-1;9302:271:132:o;10153:171::-;10220:20;;-1:-1:-1;;;;;10269:30:132;;10259:41;;10249:69;;10314:1;10311;10304:12;10329:841;10429:9;10488:4;10480:5;10464:14;10460:26;10456:37;10453:57;;;10506:1;10503;10496:12;10453:57;10534:17;;:::i;:::-;10576:24;10594:5;10576:24;:::i;:::-;10567:7;10560:41;10635:33;10664:2;10657:5;10653:14;10635:33;:::i;:::-;10630:2;10621:7;10617:16;10610:59;10703:34;10733:2;10726:5;10722:14;10703:34;:::i;:::-;10698:2;10689:7;10685:16;10678:60;10772:33;10801:2;10794:5;10790:14;10772:33;:::i;:::-;10767:2;10758:7;10754:16;10747:59;10865:3;10858:5;10854:15;10841:29;10835:3;10826:7;10822:17;10815:56;10930:3;10923:5;10919:15;10906:29;10900:3;10891:7;10887:17;10880:56;10983:3;10976:5;10972:15;10959:29;-1:-1:-1;;;;;11003:6:132;11000:30;10997:50;;;11043:1;11040;11033:12;10997:50;11082:52;11119:14;11110:6;11103:5;11099:18;11082:52;:::i;:::-;11076:3;11063:17;;11056:79;-1:-1:-1;11067:7:132;10329:841;-1:-1:-1;;10329:841:132:o;11175:380::-;11254:1;11250:12;;;;11297;;;11318:61;;11372:4;11364:6;11360:17;11350:27;;11318:61;11425:2;11417:6;11414:14;11394:18;11391:38;11388:161;;11471:10;11466:3;11462:20;11459:1;11452:31;11506:4;11503:1;11496:15;11534:4;11531:1;11524:15;11560:251;11630:6;11683:2;11671:9;11662:7;11658:23;11654:32;11651:52;;;11699:1;11696;11689:12;11651:52;11731:9;11725:16;11750:31;11775:5;11750:31;:::i;11941:542::-;12042:2;12037:3;12034:11;12031:446;;;12078:1;12102:5;12099:1;12092:16;12146:4;12143:1;12133:18;12216:2;12204:10;12200:19;12197:1;12193:27;12187:4;12183:38;12252:4;12240:10;12237:20;12234:47;;;-1:-1:-1;12275:4:132;12234:47;12330:2;12325:3;12321:12;12318:1;12314:20;12308:4;12304:31;12294:41;;12385:82;12403:2;12396:5;12393:13;12385:82;;;12448:17;;;12429:1;12418:13;12385:82;;12659:1341;12783:3;12777:10;-1:-1:-1;;;;;12802:6:132;12799:30;12796:56;;;12832:18;;:::i;:::-;12861:96;12950:6;12910:38;12942:4;12936:11;12910:38;:::i;:::-;12904:4;12861:96;:::i;:::-;13012:4;;13069:2;13058:14;;13086:1;13081:662;;;;13787:1;13804:6;13801:89;;;-1:-1:-1;13856:19:132;;;13850:26;13801:89;-1:-1:-1;;12616:1:132;12612:11;;;12608:24;12604:29;12594:40;12640:1;12636:11;;;12591:57;13903:81;;13051:943;;13081:662;11888:1;11881:14;;;11925:4;11912:18;;-1:-1:-1;;13117:20:132;;;13234:236;13248:7;13245:1;13242:14;13234:236;;;13337:19;;;13331:26;13316:42;;13429:27;;;;13397:1;13385:14;;;;13264:19;;13234:236;;;13238:3;13498:6;13489:7;13486:19;13483:201;;;13559:19;;;13553:26;-1:-1:-1;;13642:1:132;13638:14;;;13654:3;13634:24;13630:37;13626:42;13611:58;13596:74;;13483:201;-1:-1:-1;;;;;13730:1:132;13714:14;;;13710:22;13697:36;;-1:-1:-1;12659:1341:132:o;14005:331::-;14110:9;14121;14163:8;14151:10;14148:24;14145:44;;;14185:1;14182;14175:12;14145:44;14214:6;14204:8;14201:20;14198:40;;;14234:1;14231;14224:12;14198:40;-1:-1:-1;;14260:23:132;;;14305:25;;;;;-1:-1:-1;14005:331:132:o;14341:323::-;-1:-1:-1;;;;;;14461:19:132;;14537:11;;;;14568:1;14560:10;;14557:101;;;14645:2;14639;14632:3;14629:1;14625:11;14622:1;14618:19;14614:28;14610:2;14606:37;14602:46;14593:55;;14557:101;;;14341:323;;;;:::o;14669:255::-;14789:19;;14828:2;14820:11;;14817:101;;;-1:-1:-1;;14889:2:132;14885:12;;;14882:1;14878:20;14874:33;14863:45;14669:255;;;;:::o;14929:331::-;-1:-1:-1;;;;;;15049:19:132;;15133:11;;;;15164:1;15156:10;;15153:101;;;15225:1;15221:11;;;;15218:1;15214:19;15210:28;;;15202:37;15198:46;;;;14929:331;-1:-1:-1;;14929:331:132:o;15265:893::-;15641:3;15636;15632:13;15623:6;15618:3;15614:16;15610:36;15605:3;15598:49;-1:-1:-1;;;;;15702:3:132;15698:28;15689:6;15684:3;15680:16;15676:51;15672:1;15667:3;15663:11;15656:72;15580:3;15756:10;15751:3;15747:20;15818:2;15809:6;15804:3;15800:16;15796:25;15792:1;15787:3;15783:11;15776:46;15852:6;15847:2;15842:3;15838:12;15831:28;15911:2;15902:6;15897:3;15893:16;15889:25;15884:2;15879:3;15875:12;15868:47;;15945:6;15940:2;15935:3;15931:12;15924:28;15982:6;15977:2;15972:3;15968:12;15961:28;16018:6;16012:13;16034:76;16103:6;16097:3;16092;16088:13;16081:4;16073:6;16069:17;16034:76;:::i;:::-;16130:16;;;;16148:3;16126:26;;15265:893;-1:-1:-1;;;;;;;;;15265:893:132:o;16163:377::-;16356:2;16345:9;16338:21;16319:4;16382:44;16422:2;16411:9;16407:18;16399:6;16382:44;:::i;:::-;16474:9;16466:6;16462:22;16457:2;16446:9;16442:18;16435:50;16502:32;16527:6;16519;16502:32;:::i;:::-;16494:40;16163:377;-1:-1:-1;;;;;16163:377:132:o", - "linkReferences": {}, - "immutableReferences": { - "24031": [ - { "start": 711, "length": 32 }, - { "start": 1494, "length": 32 }, - { "start": 1759, "length": 32 }, - { "start": 2277, "length": 32 }, - { "start": 2721, "length": 32 } - ], - "24033": [{ "start": 763, "length": 32 }], - "24035": [{ "start": 908, "length": 32 }] - } - }, - "methodIdentifiers": { - "PACKET_VERSION()": "6251b637", - "defaultOption()": "72d71322", - "endpoint()": "5e280f11", - "isSupportedEid(uint32)": "6750cd4c", - "localEid()": "72607537", - "lzTokenFee()": "90953238", - "messageLibType()": "1881d94d", - "nativeFee()": "996f79c0", - "owner()": "8da5cb5b", - "quote((uint64,uint32,address,uint32,bytes32,bytes32,bytes),bytes,bool)": "d80e9bd9", - "renounceOwnership()": "715018a6", - "send((uint64,uint32,address,uint32,bytes32,bytes32,bytes),bytes,bool)": "4389e58f", - "setDefaultOption(bytes)": "dabca063", - "setMessagingFee(uint256,uint256)": "334993ff", - "setWhitelistCaller(address)": "aec336e6", - "supportsInterface(bytes4)": "01ffc9a7", - "testHelper()": "0e97289b", - "transferOwnership(address)": "f2fde38b", - "treasury()": "61d027b3", - "validatePacket(bytes)": "12cc947f", - "version()": "54fd4d50", - "whitelistCaller()": "1c7c294e", - "withdrawFee(address,uint256)": "fd9be522", - "withdrawLzTokenFee(address,uint256)": "8f58aa7a" - }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"_verifyHelper\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_endpoint\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"expected\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"actual\",\"type\":\"address\"}],\"name\":\"InvalidEndpoint\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_NotImplemented\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LzTokenIsAddressZero\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyEndpoint\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyWhitelistCaller\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ToIsAddressZero\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TransferFailed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"Transfer_NativeFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Transfer_ToAddressIsZero\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"PACKET_VERSION\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"defaultOption\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"endpoint\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"name\":\"isSupportedEid\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"localEid\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lzTokenFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"messageLibType\",\"outputs\":[{\"internalType\":\"enum MessageLibType\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nativeFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"receiver\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"internalType\":\"struct Packet\",\"name\":\"\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"_payInLzToken\",\"type\":\"bool\"}],\"name\":\"quote\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nativeFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lzTokenFee\",\"type\":\"uint256\"}],\"internalType\":\"struct MessagingFee\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"srcEid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"receiver\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"internalType\":\"struct Packet\",\"name\":\"_packet\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"_options\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"_payInLzToken\",\"type\":\"bool\"}],\"name\":\"send\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nativeFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lzTokenFee\",\"type\":\"uint256\"}],\"internalType\":\"struct MessagingFee\",\"name\":\"fee\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"encodedPacket\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"options\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_defaultOption\",\"type\":\"bytes\"}],\"name\":\"setDefaultOption\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_nativeFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_lzTokenFee\",\"type\":\"uint256\"}],\"name\":\"setMessagingFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_whitelistCaller\",\"type\":\"address\"}],\"name\":\"setWhitelistCaller\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"testHelper\",\"outputs\":[{\"internalType\":\"contract TestHelperOz5\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"treasury\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"packetBytes\",\"type\":\"bytes\"}],\"name\":\"validatePacket\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"major\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"minor\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"endpointVersion\",\"type\":\"uint8\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"whitelistCaller\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"withdrawFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"withdrawLzTokenFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"errors\":{\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}],\"SafeERC20FailedOperation(address)\":[{\"details\":\"An operation with an ERC-20 token failed.\"}]},\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/SimpleMessageLibMock.sol\":\"SimpleMessageLibMock\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/MessageLibBase.sol\":{\"keccak256\":\"0x14899a4398251439938d6ef8a15ea8c6acdddc98a7b0066d7e63676192dea0d1\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://3998d03de7025c2c601a4fdcaf9475d12a1ef661fcf1a685ece84fdde6498cf9\",\"dweb:/ipfs/QmReknRbiGAiPqq9toKyXKo6hUKXrQPJyyS6LnTGjiDKoY\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/ReceiveLibBaseE2.sol\":{\"keccak256\":\"0x2fdbd1b13751a264cd6e7fac518a2685b15c968806c03f1d18b177fc0526e9a9\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://600af48bb67939b5f4a3a00c76863ee290a55325ea8697f7cc4b46321ab26ef2\",\"dweb:/ipfs/QmdRigYaB6TXczjtVkvwpUEBwvvvDuymFoViMCB6xQPYUU\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/SendLibBase.sol\":{\"keccak256\":\"0x400eaa11c7d50b4c25b7625290ff00937b6875ad3986b353c37a4e62b5a834b1\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://1f51eb0785d3630815a9d63de1c1331fe966df4c3f2fb6750b8da7be9e9743a4\",\"dweb:/ipfs/QmaAEf1kjhhff3AUhRiPm6ikpk2YMMrpKc2ccYzNs7waBy\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/SendLibBaseE2.sol\":{\"keccak256\":\"0x90ada11d0a330732c56b989e59c8272b70f956a5d7be2cf209d6d51a51d35a9e\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://0abc7a6d07ec40a3a922256ad05bdd6eca10550d85bfd2e67147473617bb0497\",\"dweb:/ipfs/QmRDphmFhx1scRJXcusg6pUhVQvp941oCJwnHGAPdrNY4T\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IExecutor.sol\":{\"keccak256\":\"0x2fd26e454b060ede7afa15f8bbc67bd43f9181b6405ca411d36c8b538be016af\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cf2142e83214bb392f69ed14266718cfd803f849a7239ee9a1950ddf66553696\",\"dweb:/ipfs/QmSZ2mPMZqWBetMU8VESKtxy7UdSThUVmJmTFMHEyKLTGZ\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IExecutorFeeLib.sol\":{\"keccak256\":\"0x801d12eca6d6b232fb91d949cdb70a4c547c5e27e73555f2f1eb9e757c639bcc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b61bdffe26ff3902edab3efb0b5af3808ec9e28d72db95b77128502b9bc7638d\",\"dweb:/ipfs/Qmcyf3npDDEq28b9XqmXgSGyQegj2cxUZQ3UekSNf34g8M\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroExecutor.sol\":{\"keccak256\":\"0x3647af317ee126b1247a782abb30e59ec5ab21b4945f1d3b4370d1fa3c1bf347\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5b51cd5e7347ee869a06bd57a698f40e4a901ec7fdcb27f0ef485e4a0e1e9be4\",\"dweb:/ipfs/QmP2Nc73veRzLGdUahkjhQAiKR9ZWYiUtSGwoMB1sPXxUp\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroPriceFeed.sol\":{\"keccak256\":\"0xb4df72798a64f5ea44775b526e0c417c3de0ffc661659d7b31d5b28567c6fbcc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://30ca5fd5e3227a7bffc51654ee3bfebdd591a131f86846ac42dea8a40c5cf1d8\",\"dweb:/ipfs/QmXNmQCF8TZAFpUxgPa1rgWt4ktsBV38A8Hax7TiYLgybW\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroReadExecutor.sol\":{\"keccak256\":\"0x360936885f173f816ffb47e555d480928e74eb1ad54a76af0f4595ecba2d5657\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://16b5095e6439b1e416eb70571a1dd8f4f21a0d77b19c9e510ca289d99e5e09ab\",\"dweb:/ipfs/QmZ2mjQDQ35gJseyzmQhik4cBgN2ESADzofFNVFvgS64hv\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroTreasury.sol\":{\"keccak256\":\"0x2aab2a3cf50e20af56d9204b1367d52a47abba0b0c7c21f304d413de1ced6345\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f8b603b5e5e62c621715f8449280af240a4add8721c4ae8f5e8e491507f6e4c5\",\"dweb:/ipfs/QmUQ7Ti7CPmKnRbQFN9TLvVbeZhsi1xUjqZPTJ36dCZ6y8\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IWorker.sol\":{\"keccak256\":\"0xa6b61913767305227576cc6da5067de4208f09a4f58bfbfe32beafdfae9869b1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7fce83bfb831f383606aee7f5ff68a330c8526bb1036f9ba0813d3e4fa8d534\",\"dweb:/ipfs/QmR7zAqJkmCgBj6sguS8t2WthY5k6FwsakgH4UY11uqD4n\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/libs/ExecutorOptions.sol\":{\"keccak256\":\"0x441b723f2f597be2ec2bb361fcf3f11852c23534db1cfa7d2ffff7e61d228e3c\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://636817d20f90f75032e35376256cf5f4d2a047d6541b45f644d82a2e4dc8f1eb\",\"dweb:/ipfs/QmcEFRxCmmm9hKbqi7Powj6ATbw4JXXJW4rxfwMcxWsDnT\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/libs/SafeCall.sol\":{\"keccak256\":\"0xc3b7b7927472f7c1ca9703af310e9050c798afaccf399ad0f131e179b8582c8d\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://e5be13af32ff6b371985d405bc6fe8ac2faf5445bd88fda2dab4b869f66e3f89\",\"dweb:/ipfs/Qmd21k4H2tAHKrpiuHUbH87eNtHLLJzHj9ZCrMh8AKfDHh\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/ReceiveUlnBase.sol\":{\"keccak256\":\"0x36c93de122bbb74ae31e3eacf567c0a3bc649ed3ebb2766c76dfa93aebcace44\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://e83bcaa80e2715e68818dd53e4dc6ad8e665b8249d69a08cf2d2635b9757fb79\",\"dweb:/ipfs/QmSKh6NgaTrTSa48gDzGGqGNAcs5jVEHgZSzZzbuJSEsxo\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/SendUlnBase.sol\":{\"keccak256\":\"0x6d9962ffa476ac2efb78f1415bb2f650a30eedeef2b75fdab0aeafaf3e8da6a5\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://21f32c56b67d2e770444b809c1a85a96627194c605ad317d482dfc5b6ce7e8c2\",\"dweb:/ipfs/QmP5tzoMDzTdduEcSpYHgg6WCHLQGuc1djDMFUBycJPLCU\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/UlnBase.sol\":{\"keccak256\":\"0xfdb1d04f4996c0a9d35abfbfcf10d978da638885eb77d0a9dc35cea5993074e3\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://776d58d88d13b058f236cf18c32b4b9718a021513fc4e198287f4fe18ec5aba4\",\"dweb:/ipfs/QmdNX8jJu2aXJ8Dpbt2ohfhT8RKQLuvh58sW6SAXcUTcV9\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IDVN.sol\":{\"keccak256\":\"0x6becdfab6c1fcaf98f402bee48495895e54825f9d6eef6e292dde0caed628284\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2273341033856737cd46704a1a769768feae696d0e7a912f5be9de8ffdd2180c\",\"dweb:/ipfs/QmY1xBAmMX9jND1HAb7tDyZNPgFReXMqs1vtmHbShKZFQY\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IDVNFeeLib.sol\":{\"keccak256\":\"0xed4a8e77148328132d8f4f2726c4aeec6b490cf03a1d5940bde0ab8d72954de9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7b07802ca32bf10f68e51da872fb358807446dc2242314374d226493a6e9e7dc\",\"dweb:/ipfs/QmfSwWPLgitDy2a9S3mCNBDk6kAcK9n186Dtvj7qg84i12\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/ILayerZeroDVN.sol\":{\"keccak256\":\"0x308e77078242fd5c5746ec29c12e618249134f9e4377c0028ab8f59c07a6014b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2f92cf397a8d26864ac92dfcd1b98e92a32c47f556a62c5e6dc1618734c1caa3\",\"dweb:/ipfs/QmXN3XJXEKq5djV6HeM6jrLycmJPFhMhecsYZ2TaRsQmhg\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/ILayerZeroReadDVN.sol\":{\"keccak256\":\"0x759a3ee7614c2de54b152b0278845f91ac9760d8c22045b2fee89e3e744402b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7a2dbf6bcf5bfab408f18c104b34c390e8bfabb0eeb1a10e3a9c0fb14c8c61d5\",\"dweb:/ipfs/QmWxmRbDBkbhGmNsRyXqQXB1QaWRS4qvh6a8achh8DQPKR\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IReceiveUlnE2.sol\":{\"keccak256\":\"0xcdf7e690e5d5c0a3ec26a0d7b1a7fe49c7d16a3634721c3944f77d13ff5d4a91\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bd32a05dde1b83be1ce64fcfb9495d8b9bf0c5b3a5b521ac6c214e87e32f3cdc\",\"dweb:/ipfs/QmcDKTor8EQf3cbiWYmeFb9qzUM8JGPzGGN9qJnYjP1nN7\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/DVNOptions.sol\":{\"keccak256\":\"0x2beee03cdf59a9bc72e94d08b69cb2e908725f4ceabb48651494938100e21e35\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://d88e121a39e74309f3575417df2318e2d2ee8bc8314e68dbf78544a9c393b141\",\"dweb:/ipfs/QmRojBRAyENK21HnjevAWeoZZxtWkYZubB9Y78vCJPYeU6\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/ReadCmdCodecV1.sol\":{\"keccak256\":\"0x52fbab4a114ce9defb2ffd57c0a978eee438b2c232862f7e20475e0dcadd4eda\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://a4d5d4e186e3f2a916ea02c2d1d0761069ab1a5c0d6f74719bbf3501a7ccb899\",\"dweb:/ipfs/QmS2e12U9Fap2EK1CmSBTccL4PCKkHNdKJn2bXCqqKdbRn\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/SupportedCmdTypes.sol\":{\"keccak256\":\"0x6b2534522c163714e499041ecd06aaeb93857373cef82cf2752f162bb7c69f9a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bf6c3545c3b9505692dbfaa29b40cab5ed9dc9b65e5804b6f47b5a76596120e9\",\"dweb:/ipfs/QmNs98oRaMvpYhLCQ5yU256eYNEopFTrLRjjwm3gL4foQ3\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/UlnOptions.sol\":{\"keccak256\":\"0x5df07fef16b20767f7524c367d90f696c12e8ce0e4fde7aecc9d83fb2b6b0e27\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://0997203f57d736e56ebb3d736550f1c7ff7950c8df0574c7abe95e22f847b850\",\"dweb:/ipfs/QmZBjkH1vaPLyN3Jx9kGfVZKuTdfVWJfJVLSPok8SpjGbT\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/readlib/ReadLibBase.sol\":{\"keccak256\":\"0x7d312ba1e6288cb201b211f58b814eaaa0b5993721475fbc64321b0e7a2c74d3\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://dfc0dce9362eca0f03b51e0e808389c8bf51fda901e6ca58da169f165e4fc3c8\",\"dweb:/ipfs/QmSXAQ3veWf6gPXcgpX1XLZW9SyLQjBjCSdsFiQTttLNac\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/uln301/interfaces/IUltraLightNode301.sol\":{\"keccak256\":\"0x47f8ebeaa7d96a6f337a18c46e3c532da578c7cb0a13fb6e6f014286b991902f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d51f208b931be54e0ae1801c71c0756251d8c26f8d9b7911be1ad57b3d4a5691\",\"dweb:/ipfs/QmWqjst7jnYtSXQ9pakYHutDvENKLyqNg9nPfMxTH8p2Ed\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessageLibManager.sol\":{\"keccak256\":\"0x64330e51de72e8d38cfc0eb5527d36baada46df4bc14233d3a8ecaf98098d69a\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://49aa45e5a26fc62e7af569cf915be8344adc78dceb6871c4c14bc5d115e59241\",\"dweb:/ipfs/QmbTuW7kzPDYForDEPnaNQi6ZrmWqDxGVnHFiugnvTyq9K\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingChannel.sol\":{\"keccak256\":\"0x8ab8cb12c8beba699c1a7f22ffa812ac553f7038326d0c0d0af77253005cfe73\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://7c7cba4ae16d0ca46ee0a365a204f7257ceaa892224604bf7c8e65c44737e46c\",\"dweb:/ipfs/QmbQX5hJDKMwKdoo6QkdcusXQXH54SVCPe5hM1ycJZsg7y\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingComposer.sol\":{\"keccak256\":\"0x20d36578e810e75346daf064813b76a177087214cae77628b1f9d43798cb52d1\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://475b6f3f1ba5d981d0c5f90b9e892d4f9f539f3b12196639b95770b5be4dbf6a\",\"dweb:/ipfs/QmYyGrnR3vDt8Dqa2paQwTG9qrD6anAGFrDZmMra8KGC6s\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingContext.sol\":{\"keccak256\":\"0x9616f3bd0d7293c9723f2ddf86f9f7030fbd99213c9748557eec8f6d13b25420\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://205e713f5af46f52799e51774ac74dbeee4056de6ddba3c4d78a327536426c54\",\"dweb:/ipfs/QmZ2ZqDwxdjpJbh91qwMfRhhQu4AMEsjUcsTEsdRV4NAys\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroComposer.sol\":{\"keccak256\":\"0xfaca7205d4211ee9208a7e59171e2301731f3d2a20c49b4a839821871f5fdd49\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f254bc60ac26687b5320a43a556e30777b0745abf7cd64d5f4720d9b1d1f7fdf\",\"dweb:/ipfs/QmRSJEZVgxaC3L2DdE6s8P5qkYfM3V5JMeseeFJJqGR4xz\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\":{\"keccak256\":\"0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bacc29fd3866af71e59cb0bdc1cf82c882a4a7f4e2652fd413c9f12649762083\",\"dweb:/ipfs/QmZh2toLnrQDWaNYhS5K4NoW7Vxd2GdZx9KA77vKEDLAqs\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol\":{\"keccak256\":\"0x9641abba8d53b08bb517d1b74801dd15ea7b84d77a6719085bd96c8ea94e3ca0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://77415ae0820859e0faf3fabdce683cce9fa03ea026ae0f6fe081ef1c9205f933\",\"dweb:/ipfs/QmXd7APqoCunQ2jYy73AHvi5gsZofLpm3SzM6FPo7zRPfL\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol\":{\"keccak256\":\"0x5cf5f24751b4e3ea1c9c5ded07cedfdfd62566b6daaffcc0144733859c9dba0c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cae7e35007a714f007ea08045ef7c0cfa6c91fd2425b5028b2d49abad357a5f0\",\"dweb:/ipfs/QmcDBs5tsiyB35b8cwzWQWNnpkawb3uuHRaqE77Hxm2tve\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol\":{\"keccak256\":\"0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d8ff6a8a89297fa127f86b54e0db3eba1d6a6eeb4f6398d3c84d569665ac8f1b\",\"dweb:/ipfs/QmVSwhw6xFDrLRAX4RXaCM47yBaBtac4wf36DYEq6KCTvT\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol\":{\"keccak256\":\"0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7e1b245d58221d16d8b5e0f01ef3e289a24a7df1ace3b94239e4d5b954ad5927\",\"dweb:/ipfs/Qmappsgp7PCY9rSSNE9Cdn4BTRX591WfCSEgq2HxhA3z6S\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol\":{\"keccak256\":\"0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b18b23a1643fc6636c4ad9d9023e2e6ca2d3c2a4a046482d4655bff09950598d\",\"dweb:/ipfs/Qma6G5SqiovwrMPfgqTrRngK1HWW373Wkf9c6YP2NhXpPk\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol\":{\"keccak256\":\"0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5173fc9143bea314b159ca5a9adb5626659ef763bc598e27de5fa46efe3291a6\",\"dweb:/ipfs/QmSLFeMFPmVeGxT4sxRPW28ictjAS22M8rLeYRu9TXkA6D\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol\":{\"keccak256\":\"0xf1c07bc61e7b1dce195ed12d50f87980fbf2d63cac1326fd28287f55fe0ba625\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://060f10ff7afc33c1c2f2b4b5ba29231fd3c943146488084d0e4ab99fce991d97\",\"dweb:/ipfs/QmaSsefAqqEqtf8FgFUmDYMwTsAty3X1pqDb6SiFvry6B3\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol\":{\"keccak256\":\"0x2ebbcaaab3554edcd41b581f1a72ac1806afbfb8047d0d47ff098f9af30d6deb\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://2d4b2cf5c3b16dc76c6767f285b57c0af917972327b2be3f7cba5825402f5fc1\",\"dweb:/ipfs/QmQQWiHE2jKEDbjzGutSoZwtApSXYfLqZt5CxEpFj8xyvT\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/CalldataBytesLib.sol\":{\"keccak256\":\"0x5c0db161cef6603c3b256d4220f489419e7478ef775e52a80056654129c61875\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://a33245d0fdd3992bb56b31d1840108d36bb46c8d617b659ef1af8dd7ed86302d\",\"dweb:/ipfs/QmWyBqT7Tdrfn5zz9xYM3V1PBtfAZAVwwCrrKwwfi3wMQK\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Errors.sol\":{\"keccak256\":\"0x35bcd6ca99c4c8d9f7d8413d1b92fb4a4d4a420ce3bf64b0fb01e68e6bcf2fa7\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://0ac14f98563f9c610c936c93e71eff657efaba1e1d892be6a215aa5cb1f63a24\",\"dweb:/ipfs/QmVZZ8owwfDGLQTAzQJJqmYY4KsrChDagh5GBK7rChT5wb\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/GUID.sol\":{\"keccak256\":\"0x8a44524af7deb96593f6b5606e9973654a113e1687809f2e45d4a91ba89862d5\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://32dd0b5d1946e0cd5c7b728086aafac50a62c061115afb8b41254589c8a6732b\",\"dweb:/ipfs/QmR9QqtiAUPRLaRVv5wnth3NGPhdWB8rJmWYfz3o5Z1mWj\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Transfer.sol\":{\"keccak256\":\"0x621d6dd5b8b7e827351459fff4ac87c16ba4656757592cf67de8b199aea4cf9a\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://345aa8c007ed8b96a74260d289545713f1d7180df270d67687e3a540a61fa5c0\",\"dweb:/ipfs/QmNWCvpqSuar6UGLDVshUc7shUv3pt1J5FTf9VyZZ13wXL\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/BlockedMessageLib.sol\":{\"keccak256\":\"0xb2b55968b26294139742adee6c155897c8334f4c6bf72f1940456cc84e6fbab9\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://e758a1fdcea4039b19f1252e4e2958f4a0e05517eb3e151784431533446c225f\",\"dweb:/ipfs/QmRBG345abgyUeTnSpuxdK1WbK5pvwhSmvBEgW1mnoYqTq\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/BitMaps.sol\":{\"keccak256\":\"0xaad3c72ef43480d2253fd48b394e8fb7286d009991d2bc4e61be58ce48ac5ee9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b8c02b14f954416ba2148b389c87da8378ac8dd16ba3d458cbbfba8b0fd8639f\",\"dweb:/ipfs/Qmd2EEQhYL2VmgJi1V4uiHM2WcYxF9iBtxSgcFkbS21rQD\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/ExecutorOptions.sol\":{\"keccak256\":\"0x621c6090fc432f94a99f677a95d72b75f56db89ddc5fc870669777a313587c28\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://69086166f16d29e30c5eb9ca2f97afb27569afe619807d79736833a809a512d2\",\"dweb:/ipfs/QmcZqXjFuVdTrfbteKBF3GuEpjVFZ2YNZTa3J87dyLsqav\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol\":{\"keccak256\":\"0xc84cf1bf785977fe1fbe7566eef902c2db68d0e163813ebe6c34921754802680\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://de686666fc16fa432d4208d85cec87dc952faf3e481b683b9adf4b4610db4b09\",\"dweb:/ipfs/QmdmQeopzmxqRzi9DNB4EJDrYUXFfD7fUhnGhSni4QejUW\"]},\"node_modules/@layerzerolabs/lz-evm-v1-0.7/contracts/interfaces/ILayerZeroUltraLightNodeV2.sol\":{\"keccak256\":\"0xf1f36bbbc40d03b96affa151affb47da75a1b69dc79f4b311841a072d12fdd22\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://9f4f188c2998ecbda28a389ad8038da15c2260b1df6a8d135b3d96422e292fda\",\"dweb:/ipfs/QmeThR83tcaM4CmxQ2AamTafsgjcbGMfZtYcDHqw2CcwKa\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/OptionsHelper.sol\":{\"keccak256\":\"0x729ce2290d16a45a16ad936263803db6a6bebcfba5c063ebe0f0fd284ba828c0\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://7494875394fc968684761b22bb5fe05789f8d84ba07b2e0ab579ce0afe7aa973\",\"dweb:/ipfs/QmZNrexRXL3ef3UnES5e8JcdyMJ5HVftwGKQjGC5CwNg9Q\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/TestHelperOz5.sol\":{\"keccak256\":\"0xe60b21a345bb1c2e9ee2fb7301398d342da0acc3a730b442106a2ad9478f7a63\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://ee7e0a47ae666a16e33a51f946da4fe549e8f4c6ea1f1978850515172c44656f\",\"dweb:/ipfs/QmR2AZ9pYiwMCV4wPPVaGGPRJEjuBoFjJEesHtbAYhNoFq\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/DVNFeeLibMock.sol\":{\"keccak256\":\"0x4c2e212f73a1c2a2989af947eef715ebacb11a80d55e5fd18a89a905790971b1\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://30eb29a81414780828903f5320367e89020af5a4055b768e2be08d43605b1688\",\"dweb:/ipfs/QmeC5bVtmaY6tn6Z2XpVFXAkxVWQCQUzKbP2V9nPdv3vCr\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/DVNMock.sol\":{\"keccak256\":\"0xdafd7da964b6ac8637d543c30370739bb805f7e10b42043444689240b5c27b3f\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://154067632b4799f49c0b3a8c5304499f60b2c232ebd17c21912efdb72421bdab\",\"dweb:/ipfs/QmUEr6VsNt2odnrL3xFrLKwZTVLkLXi8BDzpPWeiCxC63T\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/EndpointV2AltMock.sol\":{\"keccak256\":\"0x026b2f530b336ee237f37dde6f617acefbbf74d933d2a80da4216882f78be1a9\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://097a9fdd5a321e6e8455a1db00f2abda6e810c31ce47d1bced9e574be262a28b\",\"dweb:/ipfs/Qme17zGk93k5BghCWFXqeqppVahH4dHuw7U76K4EcJxsY1\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/EndpointV2Mock.sol\":{\"keccak256\":\"0xe9096c53611537a121589b56b882fc4dd797d5cac60def708f794a15e3ca98ff\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://4092d5dd582b48a5f703e4361fc5fb66050b5fe3253891175275dc832bc8e045\",\"dweb:/ipfs/QmXSTJJNx4rn2ByCaE6vxiHnkm366ZU7dScYH1JsUbVZ1V\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ExecutorFeeLibMock.sol\":{\"keccak256\":\"0x4a47aaf41049710d5f05fcc66885cacc0dabc1864778b56ac75a59b61eef5a01\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://c9b8c26b38cb138c3225efbab8b1d2e0f43343798658a0f2ed9669c16e5a97ff\",\"dweb:/ipfs/QmV21G7Qwoi9gXYT8bKXDwnQDvjdZCAo2M9MqTKq4nQU9U\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ExecutorMock.sol\":{\"keccak256\":\"0xbcdc4500270cd5496f10760ffe9e0444d23e454dd0ae2555e0661acf22fce96f\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://b816999bcfef5586b5e80bba21584b821fd7f7b32c276492adee530ffa83bb73\",\"dweb:/ipfs/QmXLV8ieYdrTBERajBCVuMzknFyPHJjnw7MGkzULAdjdt8\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/MultiSigMock.sol\":{\"keccak256\":\"0xc7c90e073e52af1da6c07e3d3f7477b064a89e78935c16e9872457df503c6830\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://cef1ae2d517e152616aea7f8f5c15fa1fbabbec8896a9c30a9eed35fb56b4f2f\",\"dweb:/ipfs/QmeitPMQht2WfbR9ZLzwKWgThamdsJkobeaWo6ojTCoQG5\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/PriceFeedMock.sol\":{\"keccak256\":\"0xd8f419b25c648287b5b7f0923b069b2449c51e807c9153df39445f2f83e55f44\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://bb300a5bb62655073c7aa9cd2221e60e59ce904a0d73f7f5e06af7c9df3445ec\",\"dweb:/ipfs/QmcYb2qFevymfkWhTqGaNH5HwK9MMUixzAKJJAdNQHSCbw\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ReadLib1002Mock.sol\":{\"keccak256\":\"0x1403b7a91b185fd8211f00fa380a0b8918e92e663c403a1dafa30f1667091fdc\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://7494444260a981ae9a9e11cd8981fad35a6b45a9c09cf72c05aad88ee191e7f0\",\"dweb:/ipfs/QmaTyujm37PsCobQ36ootD5xVgKyBYqeUTdTJij9x3oaN6\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ReceiveUln302Mock.sol\":{\"keccak256\":\"0x8e60b01e9bc801167b374dc119b41832d546afd43c143a0cd15ab1941198e121\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://bb1512762417dda9cd81fd9b41f590fd05888358fda1c2ab7e79e0cfabf61ec4\",\"dweb:/ipfs/QmPAgBwdjLz29vE5L1Jth1Wvx6TTM1ig97amVtAyDFF61Q\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/SendUln302Mock.sol\":{\"keccak256\":\"0x0c5cb54ec6b18e77aa653f7d774ac9d010684dafc96794d1d02f12b6885cc348\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://24c5a8ba8d92c16ec3047229167528f57b38cbd64882140014126ca51ab14574\",\"dweb:/ipfs/QmXQsMDtZ3qNmjnr2LYgctBpPKxffuC6EeWHvFUtLBS5st\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/SimpleMessageLibMock.sol\":{\"keccak256\":\"0xe6c93840c612592686732dd516550816eb77d6cde92514220eacb72443dcb9b9\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://a6a00fb60b7ac66e746f0471c2262fc98febafeb8acad8785d38ce1ddc4cc991\",\"dweb:/ipfs/QmboboJskbXBbsyAGGRbW4JQCPJo9WiLFy7nwQxGVS9UhZ\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/WorkerMock.sol\":{\"keccak256\":\"0x6c5bc31c117033dd35fa7ab3b13b1647a4b449c5f5b4cbff41bce8a63529ab97\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://01aa1d3f3b8e2fd4b544312d96916b16b97e01ab740e2bae1137723b2f1a31b1\",\"dweb:/ipfs/QmVMemJ4MSgi6y9NxDdSeB6QbJRtCWojJNxzs3CRLT56EA\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/test.sol\":{\"keccak256\":\"0x8758531bbac3972efcf1fa46383dbe1d276406fe527bc7abb2f236486278e83b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://1f64264d61506847acf8761e84aff690cebe830958eac00bac7924d8be569240\",\"dweb:/ipfs/QmSekDJvJ82MZAmr63n7YvfLzQ7gS4NLSHPmHL3GN3rw8k\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Base.sol\":{\"keccak256\":\"0x4ff1a785311017d1eedb1b4737956fa383067ad34eb439abfec1d989754dde1c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f553622969b9fdb930246704a4c10dfaee6b1a4468c142fa7eb9dc292a438224\",\"dweb:/ipfs/QmcxqHnqdQsMVtgsfH9VNLmZ3g7GhgNagfq7yvNCDcCHFK\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdAssertions.sol\":{\"keccak256\":\"0x1a0dee4d8b2c81e9318e87dd85ef009467ebf7dba6575530d1fce94d34dbae60\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ddd790c86ddde1013d1f7a552a80168eacf2e9244077f96799180644ad523a5b\",\"dweb:/ipfs/QmYinBFt9uEVFXP9ytT9CDoNpzWieQVgLWRFRNiypMzJaL\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdChains.sol\":{\"keccak256\":\"0x598b85609125830885b8fb54a18f447d04f8dd799aca3de81baef35eb6b783c0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c9c128aae4f5668d8c8f71e9e6d9379d8451b8713d139cb66a02d23bc1c75f69\",\"dweb:/ipfs/QmVRihXHWi2yg9CcAhzKf63Y7m6gWz4P1giGMhXUHT3DFu\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdCheats.sol\":{\"keccak256\":\"0xb72f3519e0bf7d31df5d68557525f4fc55d861c3fb3b0f7793144ef7c94cbeb7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f3456d0f78e6f61203fa7871ba2df0d35925f10db3baee14be623ce2a35b84e2\",\"dweb:/ipfs/QmWE6QQSBvJifHMraisBTrf1x4WCwrDoTPLX8UKajTiApc\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdError.sol\":{\"keccak256\":\"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6\",\"dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdInvariant.sol\":{\"keccak256\":\"0x67299bfacd77fddfa2a67b8e2b901e0e333618a4975fb94850b07475e51f6de6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1b61121d310f4053ce344b345b4a9ccf43b059daf9097ec2647f594beaca896d\",\"dweb:/ipfs/QmZUCoTtXBM9zfAZVbj2dFPPnKaV1CSZzXE7zictyg3Gfz\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdJson.sol\":{\"keccak256\":\"0x8f914dbd016bd0e318fe2b8bd556fbc8256c7cddc24e3e4fcb9f3c1c1935592d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://19e704df493dde38323303b07d18cadfeb4dcadf1ddc2301add4aea9474fbb5e\",\"dweb:/ipfs/QmZasuGiLK8LHwWtvpqEBxUR6QFY6GdzLMTJ9q7CMf8PNZ\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdMath.sol\":{\"keccak256\":\"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92\",\"dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdStorage.sol\":{\"keccak256\":\"0x4298f3f4cedaedb07029820b1daad2c03af45379559392201f7bf3ec71105811\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6e062f36d8d1ae3c383ef8975757926eaa9c4de3a92b5f1fe2d12748bcd8db32\",\"dweb:/ipfs/QmcWkv3ia5Ew4DZNcudMNSTNXZ3W2QiXTZunRd44e9BT8z\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdStyle.sol\":{\"keccak256\":\"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8\",\"dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdUtils.sol\":{\"keccak256\":\"0x502b18a4becda6ecd91fa8b419d8034946bfa80e6cc7f6497f51f8565bfadae0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bf499ee483a1dfd02023d4ce78ed4029a49794ccd5b849aaab912faea0d2ba61\",\"dweb:/ipfs/QmP6hwNZW7sYbQK9fBzuZWxfLm6Swx2nKzvZ54qWNqQkzX\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Test.sol\":{\"keccak256\":\"0x39b1729d5868c8e94ab8af16751eb500a17fe3870dc627d2b7ddcd5df18d7ad0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1568c82aff125cc4b0fc168be9d67ac313f469a3c7405c5493caecaaaecfb765\",\"dweb:/ipfs/QmXByuZReJsdu1jDcxj1FcmpcUnzoBcqybn9kWgDAECWri\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Vm.sol\":{\"keccak256\":\"0x87ba9f3edc254e529db9e3129c954391adcc7fc8574203767979d8d2f1e724b9\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://4d16c08d80d9f2869deb6350642cf5af624d21fce6b3b023abbcdedc62e195fe\",\"dweb:/ipfs/QmURpnnFECPKt3i7P7jQRZpr4ZBXjRGcZ9KzcbKzsgYR2W\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/console.sol\":{\"keccak256\":\"0x91d5413c2434ca58fd278b6e1e79fd98d10c83931cc2596a6038eee4daeb34ba\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://91ccea707361e48b9b7a161fe81f496b9932bc471e9c4e4e1e9c283f2453cc70\",\"dweb:/ipfs/QmcB66sZhQ6Kz7MUHcLE78YXRUZxoZnnxZjN6yATsbB2ec\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/console2.sol\":{\"keccak256\":\"0x954646445d1014c3cd85c7918f5e7adeeca5ee44b68c00bafa237e597a4e35ea\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://516fa3be52da4763147175bfba4be0aa011fadbb0c1afb01f97265bd4cee7973\",\"dweb:/ipfs/QmdixAyMJefx7qePChgdxcBH5MxhmN7vsqPuPLx3CgrVmF\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/interfaces/IMulticall3.sol\":{\"keccak256\":\"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0\",\"dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/mocks/MockERC20.sol\":{\"keccak256\":\"0xd8703f49411737ecf8d411f8fa66b2bf0ef972ba28b7a4adf1748c63df1bf682\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7c10a6b8112f6fe3cdccb6240ecd382765216b1a82e9a86a0fec8f5e09eadd1\",\"dweb:/ipfs/QmdRvPCU4RkjMHsTu3Ric1ZEF1AWDNLp78unFC5aWP17xq\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/mocks/MockERC721.sol\":{\"keccak256\":\"0xa24468244abb66e663fb7eee6463cb518eb9a7c14e1071548ff564cca825bbca\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://145585a2194aa6e2d30edfe709ef2814e20b1b4540469aa6a8f50c841fcb9070\",\"dweb:/ipfs/QmZrwbvtpbtTxqbW5phUrwb3F1tBiPSQc6jZJAXBfsBsAh\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/safeconsole.sol\":{\"keccak256\":\"0xbaf41fdc6c54297e7cd8250e48b0f20eaac918e342a1028cef3f9a52ac086381\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a500ad81dea226f9910e6b50f99a9ff930105e393a692cbfb2185e4cdb4424ae\",\"dweb:/ipfs/QmVbUQpXNMmMWRiy4FvBNczzq46BMGfUoBikvSHNiCxVTq\"]},\"node_modules/@openzeppelin/contracts/access/AccessControl.sol\":{\"keccak256\":\"0xa0e92d42942f4f57c5be50568dac11e9d00c93efcb458026e18d2d9b9b2e7308\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://46326c0bb1e296b67185e81c918e0b40501b8b6386165855df0a3f3c634b6a80\",\"dweb:/ipfs/QmTwyrDYtsxsk6pymJTK94PnEpzsmkpUxFuzEiakDopy4Z\"]},\"node_modules/@openzeppelin/contracts/access/IAccessControl.sol\":{\"keccak256\":\"0xc1c2a7f1563b77050dc6d507db9f4ada5d042c1f6a9ddbffdc49c77cdc0a1606\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fd54abb96a6156d9a761f6fdad1d3004bc48d2d4fce47f40a3f91a7ae83fc3a1\",\"dweb:/ipfs/QmUrFSGkTDJ7WaZ6qPVVe3Gn5uN2viPb7x7QQ35UX4DofX\"]},\"node_modules/@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol\":{\"keccak256\":\"0x9b6b3e7803bc5f2f8cd7ad57db8ac1def61a9930a5a3107df4882e028a9605d7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://da62d6be1f5c6edf577f0cb45666a8aa9c2086a4bac87d95d65f02e2f4c36a4b\",\"dweb:/ipfs/QmNkpvBpoCMvX8JwAFNSc5XxJ2q5BXJpL5L1txb4QkqVFF\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC165.sol\":{\"keccak256\":\"0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://11fea9f8bc98949ac6709f0c1699db7430d2948137aa94d5a9e95a91f61a710a\",\"dweb:/ipfs/QmQdfRXxQjwP6yn3DVo1GHPpriKNcFghSPi94Z1oKEFUNS\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC20.sol\":{\"keccak256\":\"0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a2608291cb038b388d80b79a06b6118a42f7894ff67b7da10ec0dbbf5b2973ba\",\"dweb:/ipfs/QmWohqcBLbcxmA4eGPhZDXe5RYMMEEpFq22nfkaUMvTfw1\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db\",\"dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0xca2ae13e0610f6a99238dd00b97bd786bc92732dae6d6b9d61f573ec51018310\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://75f8c71ce0c91c40dd5f249ace0b7d8270f8f1767231bcf71490f7157d6ba862\",\"dweb:/ipfs/QmYXgxeDyFHvz3JsXxLEYN6GNUR44ThHeFj5XkpkgMoG4w\"]},\"node_modules/@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0x9d8da059267bac779a2dbbb9a26c2acf00ca83085e105d62d5d4ef96054a47f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c78e2aa4313323cecd1ef12a8d6265b96beee1a199923abf55d9a2a9e291ad23\",\"dweb:/ipfs/QmUTs2KStXucZezzFo3EYeqYu47utu56qrF7jj1Gue65vb\"]},\"node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"node_modules/@openzeppelin/contracts/utils/Errors.sol\":{\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf\",\"dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB\"]},\"node_modules/@openzeppelin/contracts/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]},\"node_modules/@openzeppelin/contracts/utils/Pausable.sol\":{\"keccak256\":\"0xb2e5f50762c27fb4b123e3619c3c02bdcba5e515309382e5bfb6f7d6486510bd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1a4b83328c98d518a2699c2cbe9e9b055e78aa57fa8639f1b88deb8b3750b5dc\",\"dweb:/ipfs/QmXdcYj5v7zQxXFPULShHkR5p4Wa2zYuupbHnFdV3cHYtc\"]},\"node_modules/@openzeppelin/contracts/utils/ReentrancyGuard.sol\":{\"keccak256\":\"0x11a5a79827df29e915a12740caf62fe21ebe27c08c9ae3e09abe9ee3ba3866d3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3cf0c69ab827e3251db9ee6a50647d62c90ba580a4d7bbff21f2bea39e7b2f4a\",\"dweb:/ipfs/QmZiKwtKU1SBX4RGfQtY7PZfiapbbu6SZ9vizGQD9UHjRA\"]},\"node_modules/@openzeppelin/contracts/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0x69f54c02b7d81d505910ec198c11ed4c6a728418a868b906b4a0cf29946fda84\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8e25e4bdb7ae1f21d23bfee996e22736fc0ab44cfabedac82a757b1edc5623b9\",\"dweb:/ipfs/QmQdWQvB6JCP9ZMbzi8EvQ1PTETqkcTWrbcVurS7DKpa5n\"]},\"node_modules/@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0xddce8e17e3d3f9ed818b4f4c4478a8262aab8b11ed322f1bf5ed705bb4bd97fa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8084aa71a4cc7d2980972412a88fe4f114869faea3fefa5436431644eb5c0287\",\"dweb:/ipfs/Qmbqfs5dRdPvHVKY8kTaeyc65NdqXRQwRK7h9s5UJEhD1p\"]},\"node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]},\"node_modules/@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]},\"node_modules/@openzeppelin/contracts/utils/structs/DoubleEndedQueue.sol\":{\"keccak256\":\"0x1e1d74658d7f4eab3d4f8fb0c6c5953bc5f629d9425e978d557dabff7b58b217\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://be0175d00008d452d3d553890f73a3d5d51dff4372f720336c8b98f26822fcdb\",\"dweb:/ipfs/QmUkE8g5xPExWoSAKwdi5ww1qJJVtEWtjSF93G2LMQkgD3\"]},\"node_modules/solidity-bytes-utils/contracts/BytesLib.sol\":{\"keccak256\":\"0xa5b10f04797d5a10a9ba07855108b6bd695940e6a3d128927b2f74a0d359868a\",\"license\":\"Unlicense\",\"urls\":[\"bzz-raw://a38d7680aacbb18dae659876b396b73bcc8f759672213f8a0efc4129e2648535\",\"dweb:/ipfs/QmfKFnwpTEGAnbRnZxMuv3mRCG9S9WMjFhFL23bftBT2Jq\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { - "inputs": [ - { - "internalType": "address payable", - "name": "_verifyHelper", - "type": "address" - }, - { - "internalType": "address", - "name": "_endpoint", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "expected", - "type": "address" - }, - { "internalType": "address", "name": "actual", "type": "address" } - ], - "type": "error", - "name": "InvalidEndpoint" - }, - { "inputs": [], "type": "error", "name": "LZ_NotImplemented" }, - { "inputs": [], "type": "error", "name": "LzTokenIsAddressZero" }, - { "inputs": [], "type": "error", "name": "OnlyEndpoint" }, - { "inputs": [], "type": "error", "name": "OnlyWhitelistCaller" }, - { - "inputs": [ - { "internalType": "address", "name": "owner", "type": "address" } - ], - "type": "error", - "name": "OwnableInvalidOwner" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "type": "error", - "name": "OwnableUnauthorizedAccount" - }, - { - "inputs": [ - { "internalType": "address", "name": "token", "type": "address" } - ], - "type": "error", - "name": "SafeERC20FailedOperation" - }, - { "inputs": [], "type": "error", "name": "ToIsAddressZero" }, - { "inputs": [], "type": "error", "name": "TransferFailed" }, - { - "inputs": [ - { "internalType": "address", "name": "_to", "type": "address" }, - { "internalType": "uint256", "name": "_value", "type": "uint256" } - ], - "type": "error", - "name": "Transfer_NativeFailed" - }, - { "inputs": [], "type": "error", "name": "Transfer_ToAddressIsZero" }, - { - "inputs": [ - { - "internalType": "address", - "name": "previousOwner", - "type": "address", - "indexed": true - }, - { - "internalType": "address", - "name": "newOwner", - "type": "address", - "indexed": true - } - ], - "type": "event", - "name": "OwnershipTransferred", - "anonymous": false - }, - { "inputs": [], "stateMutability": "payable", "type": "fallback" }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "PACKET_VERSION", - "outputs": [{ "internalType": "uint8", "name": "", "type": "uint8" }] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "defaultOption", - "outputs": [{ "internalType": "bytes", "name": "", "type": "bytes" }] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "endpoint", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ] - }, - { - "inputs": [ - { "internalType": "uint32", "name": "", "type": "uint32" } - ], - "stateMutability": "pure", - "type": "function", - "name": "isSupportedEid", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "localEid", - "outputs": [ - { "internalType": "uint32", "name": "", "type": "uint32" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "lzTokenFee", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ] - }, - { - "inputs": [], - "stateMutability": "pure", - "type": "function", - "name": "messageLibType", - "outputs": [ - { - "internalType": "enum MessageLibType", - "name": "", - "type": "uint8" - } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "nativeFee", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "owner", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ] - }, - { - "inputs": [ - { - "internalType": "struct Packet", - "name": "", - "type": "tuple", - "components": [ - { "internalType": "uint64", "name": "nonce", "type": "uint64" }, - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "receiver", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "guid", - "type": "bytes32" - }, - { "internalType": "bytes", "name": "message", "type": "bytes" } - ] - }, - { "internalType": "bytes", "name": "", "type": "bytes" }, - { "internalType": "bool", "name": "_payInLzToken", "type": "bool" } - ], - "stateMutability": "view", - "type": "function", - "name": "quote", - "outputs": [ - { - "internalType": "struct MessagingFee", - "name": "", - "type": "tuple", - "components": [ - { - "internalType": "uint256", - "name": "nativeFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "lzTokenFee", - "type": "uint256" - } - ] - } - ] - }, - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "function", - "name": "renounceOwnership" - }, - { - "inputs": [ - { - "internalType": "struct Packet", - "name": "_packet", - "type": "tuple", - "components": [ - { "internalType": "uint64", "name": "nonce", "type": "uint64" }, - { - "internalType": "uint32", - "name": "srcEid", - "type": "uint32" - }, - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32" - }, - { - "internalType": "bytes32", - "name": "receiver", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "guid", - "type": "bytes32" - }, - { "internalType": "bytes", "name": "message", "type": "bytes" } - ] - }, - { "internalType": "bytes", "name": "_options", "type": "bytes" }, - { "internalType": "bool", "name": "_payInLzToken", "type": "bool" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "send", - "outputs": [ - { - "internalType": "struct MessagingFee", - "name": "fee", - "type": "tuple", - "components": [ - { - "internalType": "uint256", - "name": "nativeFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "lzTokenFee", - "type": "uint256" - } - ] - }, - { - "internalType": "bytes", - "name": "encodedPacket", - "type": "bytes" - }, - { "internalType": "bytes", "name": "options", "type": "bytes" } - ] - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_defaultOption", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setDefaultOption" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_nativeFee", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_lzTokenFee", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setMessagingFee" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_whitelistCaller", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setWhitelistCaller" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "stateMutability": "view", - "type": "function", - "name": "supportsInterface", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "testHelper", - "outputs": [ - { - "internalType": "contract TestHelperOz5", - "name": "", - "type": "address" - } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "newOwner", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "transferOwnership" - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "treasury", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ] - }, - { - "inputs": [ - { "internalType": "bytes", "name": "packetBytes", "type": "bytes" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "validatePacket" - }, - { - "inputs": [], - "stateMutability": "pure", - "type": "function", - "name": "version", - "outputs": [ - { "internalType": "uint64", "name": "major", "type": "uint64" }, - { "internalType": "uint8", "name": "minor", "type": "uint8" }, - { - "internalType": "uint8", - "name": "endpointVersion", - "type": "uint8" - } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "whitelistCaller", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "_to", "type": "address" }, - { "internalType": "uint256", "name": "_amount", "type": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "withdrawFee" - }, - { - "inputs": [ - { "internalType": "address", "name": "_to", "type": "address" }, - { "internalType": "uint256", "name": "_amount", "type": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "withdrawLzTokenFee" - }, - { "inputs": [], "stateMutability": "payable", "type": "receive" } - ], - "devdoc": { - "kind": "dev", - "methods": { - "owner()": { "details": "Returns the address of the current owner." }, - "renounceOwnership()": { - "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner." - }, - "supportsInterface(bytes4)": { - "details": "See {IERC165-supportsInterface}." - }, - "transferOwnership(address)": { - "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." - } - }, - "version": 1 - }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/SimpleMessageLibMock.sol": "SimpleMessageLibMock" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/MessageLibBase.sol": { - "keccak256": "0x14899a4398251439938d6ef8a15ea8c6acdddc98a7b0066d7e63676192dea0d1", - "urls": [ - "bzz-raw://3998d03de7025c2c601a4fdcaf9475d12a1ef661fcf1a685ece84fdde6498cf9", - "dweb:/ipfs/QmReknRbiGAiPqq9toKyXKo6hUKXrQPJyyS6LnTGjiDKoY" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/ReceiveLibBaseE2.sol": { - "keccak256": "0x2fdbd1b13751a264cd6e7fac518a2685b15c968806c03f1d18b177fc0526e9a9", - "urls": [ - "bzz-raw://600af48bb67939b5f4a3a00c76863ee290a55325ea8697f7cc4b46321ab26ef2", - "dweb:/ipfs/QmdRigYaB6TXczjtVkvwpUEBwvvvDuymFoViMCB6xQPYUU" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/SendLibBase.sol": { - "keccak256": "0x400eaa11c7d50b4c25b7625290ff00937b6875ad3986b353c37a4e62b5a834b1", - "urls": [ - "bzz-raw://1f51eb0785d3630815a9d63de1c1331fe966df4c3f2fb6750b8da7be9e9743a4", - "dweb:/ipfs/QmaAEf1kjhhff3AUhRiPm6ikpk2YMMrpKc2ccYzNs7waBy" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/SendLibBaseE2.sol": { - "keccak256": "0x90ada11d0a330732c56b989e59c8272b70f956a5d7be2cf209d6d51a51d35a9e", - "urls": [ - "bzz-raw://0abc7a6d07ec40a3a922256ad05bdd6eca10550d85bfd2e67147473617bb0497", - "dweb:/ipfs/QmRDphmFhx1scRJXcusg6pUhVQvp941oCJwnHGAPdrNY4T" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IExecutor.sol": { - "keccak256": "0x2fd26e454b060ede7afa15f8bbc67bd43f9181b6405ca411d36c8b538be016af", - "urls": [ - "bzz-raw://cf2142e83214bb392f69ed14266718cfd803f849a7239ee9a1950ddf66553696", - "dweb:/ipfs/QmSZ2mPMZqWBetMU8VESKtxy7UdSThUVmJmTFMHEyKLTGZ" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IExecutorFeeLib.sol": { - "keccak256": "0x801d12eca6d6b232fb91d949cdb70a4c547c5e27e73555f2f1eb9e757c639bcc", - "urls": [ - "bzz-raw://b61bdffe26ff3902edab3efb0b5af3808ec9e28d72db95b77128502b9bc7638d", - "dweb:/ipfs/Qmcyf3npDDEq28b9XqmXgSGyQegj2cxUZQ3UekSNf34g8M" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroExecutor.sol": { - "keccak256": "0x3647af317ee126b1247a782abb30e59ec5ab21b4945f1d3b4370d1fa3c1bf347", - "urls": [ - "bzz-raw://5b51cd5e7347ee869a06bd57a698f40e4a901ec7fdcb27f0ef485e4a0e1e9be4", - "dweb:/ipfs/QmP2Nc73veRzLGdUahkjhQAiKR9ZWYiUtSGwoMB1sPXxUp" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroPriceFeed.sol": { - "keccak256": "0xb4df72798a64f5ea44775b526e0c417c3de0ffc661659d7b31d5b28567c6fbcc", - "urls": [ - "bzz-raw://30ca5fd5e3227a7bffc51654ee3bfebdd591a131f86846ac42dea8a40c5cf1d8", - "dweb:/ipfs/QmXNmQCF8TZAFpUxgPa1rgWt4ktsBV38A8Hax7TiYLgybW" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroReadExecutor.sol": { - "keccak256": "0x360936885f173f816ffb47e555d480928e74eb1ad54a76af0f4595ecba2d5657", - "urls": [ - "bzz-raw://16b5095e6439b1e416eb70571a1dd8f4f21a0d77b19c9e510ca289d99e5e09ab", - "dweb:/ipfs/QmZ2mjQDQ35gJseyzmQhik4cBgN2ESADzofFNVFvgS64hv" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroTreasury.sol": { - "keccak256": "0x2aab2a3cf50e20af56d9204b1367d52a47abba0b0c7c21f304d413de1ced6345", - "urls": [ - "bzz-raw://f8b603b5e5e62c621715f8449280af240a4add8721c4ae8f5e8e491507f6e4c5", - "dweb:/ipfs/QmUQ7Ti7CPmKnRbQFN9TLvVbeZhsi1xUjqZPTJ36dCZ6y8" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IWorker.sol": { - "keccak256": "0xa6b61913767305227576cc6da5067de4208f09a4f58bfbfe32beafdfae9869b1", - "urls": [ - "bzz-raw://b7fce83bfb831f383606aee7f5ff68a330c8526bb1036f9ba0813d3e4fa8d534", - "dweb:/ipfs/QmR7zAqJkmCgBj6sguS8t2WthY5k6FwsakgH4UY11uqD4n" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/libs/ExecutorOptions.sol": { - "keccak256": "0x441b723f2f597be2ec2bb361fcf3f11852c23534db1cfa7d2ffff7e61d228e3c", - "urls": [ - "bzz-raw://636817d20f90f75032e35376256cf5f4d2a047d6541b45f644d82a2e4dc8f1eb", - "dweb:/ipfs/QmcEFRxCmmm9hKbqi7Powj6ATbw4JXXJW4rxfwMcxWsDnT" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/libs/SafeCall.sol": { - "keccak256": "0xc3b7b7927472f7c1ca9703af310e9050c798afaccf399ad0f131e179b8582c8d", - "urls": [ - "bzz-raw://e5be13af32ff6b371985d405bc6fe8ac2faf5445bd88fda2dab4b869f66e3f89", - "dweb:/ipfs/Qmd21k4H2tAHKrpiuHUbH87eNtHLLJzHj9ZCrMh8AKfDHh" - ], - "license": "MIT OR Apache-2.0" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/ReceiveUlnBase.sol": { - "keccak256": "0x36c93de122bbb74ae31e3eacf567c0a3bc649ed3ebb2766c76dfa93aebcace44", - "urls": [ - "bzz-raw://e83bcaa80e2715e68818dd53e4dc6ad8e665b8249d69a08cf2d2635b9757fb79", - "dweb:/ipfs/QmSKh6NgaTrTSa48gDzGGqGNAcs5jVEHgZSzZzbuJSEsxo" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/SendUlnBase.sol": { - "keccak256": "0x6d9962ffa476ac2efb78f1415bb2f650a30eedeef2b75fdab0aeafaf3e8da6a5", - "urls": [ - "bzz-raw://21f32c56b67d2e770444b809c1a85a96627194c605ad317d482dfc5b6ce7e8c2", - "dweb:/ipfs/QmP5tzoMDzTdduEcSpYHgg6WCHLQGuc1djDMFUBycJPLCU" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/UlnBase.sol": { - "keccak256": "0xfdb1d04f4996c0a9d35abfbfcf10d978da638885eb77d0a9dc35cea5993074e3", - "urls": [ - "bzz-raw://776d58d88d13b058f236cf18c32b4b9718a021513fc4e198287f4fe18ec5aba4", - "dweb:/ipfs/QmdNX8jJu2aXJ8Dpbt2ohfhT8RKQLuvh58sW6SAXcUTcV9" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IDVN.sol": { - "keccak256": "0x6becdfab6c1fcaf98f402bee48495895e54825f9d6eef6e292dde0caed628284", - "urls": [ - "bzz-raw://2273341033856737cd46704a1a769768feae696d0e7a912f5be9de8ffdd2180c", - "dweb:/ipfs/QmY1xBAmMX9jND1HAb7tDyZNPgFReXMqs1vtmHbShKZFQY" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IDVNFeeLib.sol": { - "keccak256": "0xed4a8e77148328132d8f4f2726c4aeec6b490cf03a1d5940bde0ab8d72954de9", - "urls": [ - "bzz-raw://7b07802ca32bf10f68e51da872fb358807446dc2242314374d226493a6e9e7dc", - "dweb:/ipfs/QmfSwWPLgitDy2a9S3mCNBDk6kAcK9n186Dtvj7qg84i12" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/ILayerZeroDVN.sol": { - "keccak256": "0x308e77078242fd5c5746ec29c12e618249134f9e4377c0028ab8f59c07a6014b", - "urls": [ - "bzz-raw://2f92cf397a8d26864ac92dfcd1b98e92a32c47f556a62c5e6dc1618734c1caa3", - "dweb:/ipfs/QmXN3XJXEKq5djV6HeM6jrLycmJPFhMhecsYZ2TaRsQmhg" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/ILayerZeroReadDVN.sol": { - "keccak256": "0x759a3ee7614c2de54b152b0278845f91ac9760d8c22045b2fee89e3e744402b8", - "urls": [ - "bzz-raw://7a2dbf6bcf5bfab408f18c104b34c390e8bfabb0eeb1a10e3a9c0fb14c8c61d5", - "dweb:/ipfs/QmWxmRbDBkbhGmNsRyXqQXB1QaWRS4qvh6a8achh8DQPKR" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IReceiveUlnE2.sol": { - "keccak256": "0xcdf7e690e5d5c0a3ec26a0d7b1a7fe49c7d16a3634721c3944f77d13ff5d4a91", - "urls": [ - "bzz-raw://bd32a05dde1b83be1ce64fcfb9495d8b9bf0c5b3a5b521ac6c214e87e32f3cdc", - "dweb:/ipfs/QmcDKTor8EQf3cbiWYmeFb9qzUM8JGPzGGN9qJnYjP1nN7" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/DVNOptions.sol": { - "keccak256": "0x2beee03cdf59a9bc72e94d08b69cb2e908725f4ceabb48651494938100e21e35", - "urls": [ - "bzz-raw://d88e121a39e74309f3575417df2318e2d2ee8bc8314e68dbf78544a9c393b141", - "dweb:/ipfs/QmRojBRAyENK21HnjevAWeoZZxtWkYZubB9Y78vCJPYeU6" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/ReadCmdCodecV1.sol": { - "keccak256": "0x52fbab4a114ce9defb2ffd57c0a978eee438b2c232862f7e20475e0dcadd4eda", - "urls": [ - "bzz-raw://a4d5d4e186e3f2a916ea02c2d1d0761069ab1a5c0d6f74719bbf3501a7ccb899", - "dweb:/ipfs/QmS2e12U9Fap2EK1CmSBTccL4PCKkHNdKJn2bXCqqKdbRn" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/SupportedCmdTypes.sol": { - "keccak256": "0x6b2534522c163714e499041ecd06aaeb93857373cef82cf2752f162bb7c69f9a", - "urls": [ - "bzz-raw://bf6c3545c3b9505692dbfaa29b40cab5ed9dc9b65e5804b6f47b5a76596120e9", - "dweb:/ipfs/QmNs98oRaMvpYhLCQ5yU256eYNEopFTrLRjjwm3gL4foQ3" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/UlnOptions.sol": { - "keccak256": "0x5df07fef16b20767f7524c367d90f696c12e8ce0e4fde7aecc9d83fb2b6b0e27", - "urls": [ - "bzz-raw://0997203f57d736e56ebb3d736550f1c7ff7950c8df0574c7abe95e22f847b850", - "dweb:/ipfs/QmZBjkH1vaPLyN3Jx9kGfVZKuTdfVWJfJVLSPok8SpjGbT" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/readlib/ReadLibBase.sol": { - "keccak256": "0x7d312ba1e6288cb201b211f58b814eaaa0b5993721475fbc64321b0e7a2c74d3", - "urls": [ - "bzz-raw://dfc0dce9362eca0f03b51e0e808389c8bf51fda901e6ca58da169f165e4fc3c8", - "dweb:/ipfs/QmSXAQ3veWf6gPXcgpX1XLZW9SyLQjBjCSdsFiQTttLNac" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/uln301/interfaces/IUltraLightNode301.sol": { - "keccak256": "0x47f8ebeaa7d96a6f337a18c46e3c532da578c7cb0a13fb6e6f014286b991902f", - "urls": [ - "bzz-raw://d51f208b931be54e0ae1801c71c0756251d8c26f8d9b7911be1ad57b3d4a5691", - "dweb:/ipfs/QmWqjst7jnYtSXQ9pakYHutDvENKLyqNg9nPfMxTH8p2Ed" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessageLibManager.sol": { - "keccak256": "0x64330e51de72e8d38cfc0eb5527d36baada46df4bc14233d3a8ecaf98098d69a", - "urls": [ - "bzz-raw://49aa45e5a26fc62e7af569cf915be8344adc78dceb6871c4c14bc5d115e59241", - "dweb:/ipfs/QmbTuW7kzPDYForDEPnaNQi6ZrmWqDxGVnHFiugnvTyq9K" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingChannel.sol": { - "keccak256": "0x8ab8cb12c8beba699c1a7f22ffa812ac553f7038326d0c0d0af77253005cfe73", - "urls": [ - "bzz-raw://7c7cba4ae16d0ca46ee0a365a204f7257ceaa892224604bf7c8e65c44737e46c", - "dweb:/ipfs/QmbQX5hJDKMwKdoo6QkdcusXQXH54SVCPe5hM1ycJZsg7y" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingComposer.sol": { - "keccak256": "0x20d36578e810e75346daf064813b76a177087214cae77628b1f9d43798cb52d1", - "urls": [ - "bzz-raw://475b6f3f1ba5d981d0c5f90b9e892d4f9f539f3b12196639b95770b5be4dbf6a", - "dweb:/ipfs/QmYyGrnR3vDt8Dqa2paQwTG9qrD6anAGFrDZmMra8KGC6s" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingContext.sol": { - "keccak256": "0x9616f3bd0d7293c9723f2ddf86f9f7030fbd99213c9748557eec8f6d13b25420", - "urls": [ - "bzz-raw://205e713f5af46f52799e51774ac74dbeee4056de6ddba3c4d78a327536426c54", - "dweb:/ipfs/QmZ2ZqDwxdjpJbh91qwMfRhhQu4AMEsjUcsTEsdRV4NAys" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroComposer.sol": { - "keccak256": "0xfaca7205d4211ee9208a7e59171e2301731f3d2a20c49b4a839821871f5fdd49", - "urls": [ - "bzz-raw://f254bc60ac26687b5320a43a556e30777b0745abf7cd64d5f4720d9b1d1f7fdf", - "dweb:/ipfs/QmRSJEZVgxaC3L2DdE6s8P5qkYfM3V5JMeseeFJJqGR4xz" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol": { - "keccak256": "0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3", - "urls": [ - "bzz-raw://bacc29fd3866af71e59cb0bdc1cf82c882a4a7f4e2652fd413c9f12649762083", - "dweb:/ipfs/QmZh2toLnrQDWaNYhS5K4NoW7Vxd2GdZx9KA77vKEDLAqs" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol": { - "keccak256": "0x9641abba8d53b08bb517d1b74801dd15ea7b84d77a6719085bd96c8ea94e3ca0", - "urls": [ - "bzz-raw://77415ae0820859e0faf3fabdce683cce9fa03ea026ae0f6fe081ef1c9205f933", - "dweb:/ipfs/QmXd7APqoCunQ2jYy73AHvi5gsZofLpm3SzM6FPo7zRPfL" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol": { - "keccak256": "0x5cf5f24751b4e3ea1c9c5ded07cedfdfd62566b6daaffcc0144733859c9dba0c", - "urls": [ - "bzz-raw://cae7e35007a714f007ea08045ef7c0cfa6c91fd2425b5028b2d49abad357a5f0", - "dweb:/ipfs/QmcDBs5tsiyB35b8cwzWQWNnpkawb3uuHRaqE77Hxm2tve" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol": { - "keccak256": "0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc", - "urls": [ - "bzz-raw://d8ff6a8a89297fa127f86b54e0db3eba1d6a6eeb4f6398d3c84d569665ac8f1b", - "dweb:/ipfs/QmVSwhw6xFDrLRAX4RXaCM47yBaBtac4wf36DYEq6KCTvT" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol": { - "keccak256": "0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972", - "urls": [ - "bzz-raw://7e1b245d58221d16d8b5e0f01ef3e289a24a7df1ace3b94239e4d5b954ad5927", - "dweb:/ipfs/Qmappsgp7PCY9rSSNE9Cdn4BTRX591WfCSEgq2HxhA3z6S" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol": { - "keccak256": "0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901", - "urls": [ - "bzz-raw://b18b23a1643fc6636c4ad9d9023e2e6ca2d3c2a4a046482d4655bff09950598d", - "dweb:/ipfs/Qma6G5SqiovwrMPfgqTrRngK1HWW373Wkf9c6YP2NhXpPk" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol": { - "keccak256": "0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e", - "urls": [ - "bzz-raw://5173fc9143bea314b159ca5a9adb5626659ef763bc598e27de5fa46efe3291a6", - "dweb:/ipfs/QmSLFeMFPmVeGxT4sxRPW28ictjAS22M8rLeYRu9TXkA6D" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol": { - "keccak256": "0xf1c07bc61e7b1dce195ed12d50f87980fbf2d63cac1326fd28287f55fe0ba625", - "urls": [ - "bzz-raw://060f10ff7afc33c1c2f2b4b5ba29231fd3c943146488084d0e4ab99fce991d97", - "dweb:/ipfs/QmaSsefAqqEqtf8FgFUmDYMwTsAty3X1pqDb6SiFvry6B3" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol": { - "keccak256": "0x2ebbcaaab3554edcd41b581f1a72ac1806afbfb8047d0d47ff098f9af30d6deb", - "urls": [ - "bzz-raw://2d4b2cf5c3b16dc76c6767f285b57c0af917972327b2be3f7cba5825402f5fc1", - "dweb:/ipfs/QmQQWiHE2jKEDbjzGutSoZwtApSXYfLqZt5CxEpFj8xyvT" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/CalldataBytesLib.sol": { - "keccak256": "0x5c0db161cef6603c3b256d4220f489419e7478ef775e52a80056654129c61875", - "urls": [ - "bzz-raw://a33245d0fdd3992bb56b31d1840108d36bb46c8d617b659ef1af8dd7ed86302d", - "dweb:/ipfs/QmWyBqT7Tdrfn5zz9xYM3V1PBtfAZAVwwCrrKwwfi3wMQK" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Errors.sol": { - "keccak256": "0x35bcd6ca99c4c8d9f7d8413d1b92fb4a4d4a420ce3bf64b0fb01e68e6bcf2fa7", - "urls": [ - "bzz-raw://0ac14f98563f9c610c936c93e71eff657efaba1e1d892be6a215aa5cb1f63a24", - "dweb:/ipfs/QmVZZ8owwfDGLQTAzQJJqmYY4KsrChDagh5GBK7rChT5wb" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/GUID.sol": { - "keccak256": "0x8a44524af7deb96593f6b5606e9973654a113e1687809f2e45d4a91ba89862d5", - "urls": [ - "bzz-raw://32dd0b5d1946e0cd5c7b728086aafac50a62c061115afb8b41254589c8a6732b", - "dweb:/ipfs/QmR9QqtiAUPRLaRVv5wnth3NGPhdWB8rJmWYfz3o5Z1mWj" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Transfer.sol": { - "keccak256": "0x621d6dd5b8b7e827351459fff4ac87c16ba4656757592cf67de8b199aea4cf9a", - "urls": [ - "bzz-raw://345aa8c007ed8b96a74260d289545713f1d7180df270d67687e3a540a61fa5c0", - "dweb:/ipfs/QmNWCvpqSuar6UGLDVshUc7shUv3pt1J5FTf9VyZZ13wXL" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/BlockedMessageLib.sol": { - "keccak256": "0xb2b55968b26294139742adee6c155897c8334f4c6bf72f1940456cc84e6fbab9", - "urls": [ - "bzz-raw://e758a1fdcea4039b19f1252e4e2958f4a0e05517eb3e151784431533446c225f", - "dweb:/ipfs/QmRBG345abgyUeTnSpuxdK1WbK5pvwhSmvBEgW1mnoYqTq" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/BitMaps.sol": { - "keccak256": "0xaad3c72ef43480d2253fd48b394e8fb7286d009991d2bc4e61be58ce48ac5ee9", - "urls": [ - "bzz-raw://b8c02b14f954416ba2148b389c87da8378ac8dd16ba3d458cbbfba8b0fd8639f", - "dweb:/ipfs/Qmd2EEQhYL2VmgJi1V4uiHM2WcYxF9iBtxSgcFkbS21rQD" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/ExecutorOptions.sol": { - "keccak256": "0x621c6090fc432f94a99f677a95d72b75f56db89ddc5fc870669777a313587c28", - "urls": [ - "bzz-raw://69086166f16d29e30c5eb9ca2f97afb27569afe619807d79736833a809a512d2", - "dweb:/ipfs/QmcZqXjFuVdTrfbteKBF3GuEpjVFZ2YNZTa3J87dyLsqav" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol": { - "keccak256": "0xc84cf1bf785977fe1fbe7566eef902c2db68d0e163813ebe6c34921754802680", - "urls": [ - "bzz-raw://de686666fc16fa432d4208d85cec87dc952faf3e481b683b9adf4b4610db4b09", - "dweb:/ipfs/QmdmQeopzmxqRzi9DNB4EJDrYUXFfD7fUhnGhSni4QejUW" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-v1-0.7/contracts/interfaces/ILayerZeroUltraLightNodeV2.sol": { - "keccak256": "0xf1f36bbbc40d03b96affa151affb47da75a1b69dc79f4b311841a072d12fdd22", - "urls": [ - "bzz-raw://9f4f188c2998ecbda28a389ad8038da15c2260b1df6a8d135b3d96422e292fda", - "dweb:/ipfs/QmeThR83tcaM4CmxQ2AamTafsgjcbGMfZtYcDHqw2CcwKa" - ], - "license": "BUSL-1.1" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/OptionsHelper.sol": { - "keccak256": "0x729ce2290d16a45a16ad936263803db6a6bebcfba5c063ebe0f0fd284ba828c0", - "urls": [ - "bzz-raw://7494875394fc968684761b22bb5fe05789f8d84ba07b2e0ab579ce0afe7aa973", - "dweb:/ipfs/QmZNrexRXL3ef3UnES5e8JcdyMJ5HVftwGKQjGC5CwNg9Q" - ], - "license": "UNLICENSED" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/TestHelperOz5.sol": { - "keccak256": "0xe60b21a345bb1c2e9ee2fb7301398d342da0acc3a730b442106a2ad9478f7a63", - "urls": [ - "bzz-raw://ee7e0a47ae666a16e33a51f946da4fe549e8f4c6ea1f1978850515172c44656f", - "dweb:/ipfs/QmR2AZ9pYiwMCV4wPPVaGGPRJEjuBoFjJEesHtbAYhNoFq" - ], - "license": "UNLICENSED" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/DVNFeeLibMock.sol": { - "keccak256": "0x4c2e212f73a1c2a2989af947eef715ebacb11a80d55e5fd18a89a905790971b1", - "urls": [ - "bzz-raw://30eb29a81414780828903f5320367e89020af5a4055b768e2be08d43605b1688", - "dweb:/ipfs/QmeC5bVtmaY6tn6Z2XpVFXAkxVWQCQUzKbP2V9nPdv3vCr" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/DVNMock.sol": { - "keccak256": "0xdafd7da964b6ac8637d543c30370739bb805f7e10b42043444689240b5c27b3f", - "urls": [ - "bzz-raw://154067632b4799f49c0b3a8c5304499f60b2c232ebd17c21912efdb72421bdab", - "dweb:/ipfs/QmUEr6VsNt2odnrL3xFrLKwZTVLkLXi8BDzpPWeiCxC63T" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/EndpointV2AltMock.sol": { - "keccak256": "0x026b2f530b336ee237f37dde6f617acefbbf74d933d2a80da4216882f78be1a9", - "urls": [ - "bzz-raw://097a9fdd5a321e6e8455a1db00f2abda6e810c31ce47d1bced9e574be262a28b", - "dweb:/ipfs/Qme17zGk93k5BghCWFXqeqppVahH4dHuw7U76K4EcJxsY1" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/EndpointV2Mock.sol": { - "keccak256": "0xe9096c53611537a121589b56b882fc4dd797d5cac60def708f794a15e3ca98ff", - "urls": [ - "bzz-raw://4092d5dd582b48a5f703e4361fc5fb66050b5fe3253891175275dc832bc8e045", - "dweb:/ipfs/QmXSTJJNx4rn2ByCaE6vxiHnkm366ZU7dScYH1JsUbVZ1V" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ExecutorFeeLibMock.sol": { - "keccak256": "0x4a47aaf41049710d5f05fcc66885cacc0dabc1864778b56ac75a59b61eef5a01", - "urls": [ - "bzz-raw://c9b8c26b38cb138c3225efbab8b1d2e0f43343798658a0f2ed9669c16e5a97ff", - "dweb:/ipfs/QmV21G7Qwoi9gXYT8bKXDwnQDvjdZCAo2M9MqTKq4nQU9U" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ExecutorMock.sol": { - "keccak256": "0xbcdc4500270cd5496f10760ffe9e0444d23e454dd0ae2555e0661acf22fce96f", - "urls": [ - "bzz-raw://b816999bcfef5586b5e80bba21584b821fd7f7b32c276492adee530ffa83bb73", - "dweb:/ipfs/QmXLV8ieYdrTBERajBCVuMzknFyPHJjnw7MGkzULAdjdt8" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/MultiSigMock.sol": { - "keccak256": "0xc7c90e073e52af1da6c07e3d3f7477b064a89e78935c16e9872457df503c6830", - "urls": [ - "bzz-raw://cef1ae2d517e152616aea7f8f5c15fa1fbabbec8896a9c30a9eed35fb56b4f2f", - "dweb:/ipfs/QmeitPMQht2WfbR9ZLzwKWgThamdsJkobeaWo6ojTCoQG5" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/PriceFeedMock.sol": { - "keccak256": "0xd8f419b25c648287b5b7f0923b069b2449c51e807c9153df39445f2f83e55f44", - "urls": [ - "bzz-raw://bb300a5bb62655073c7aa9cd2221e60e59ce904a0d73f7f5e06af7c9df3445ec", - "dweb:/ipfs/QmcYb2qFevymfkWhTqGaNH5HwK9MMUixzAKJJAdNQHSCbw" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ReadLib1002Mock.sol": { - "keccak256": "0x1403b7a91b185fd8211f00fa380a0b8918e92e663c403a1dafa30f1667091fdc", - "urls": [ - "bzz-raw://7494444260a981ae9a9e11cd8981fad35a6b45a9c09cf72c05aad88ee191e7f0", - "dweb:/ipfs/QmaTyujm37PsCobQ36ootD5xVgKyBYqeUTdTJij9x3oaN6" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ReceiveUln302Mock.sol": { - "keccak256": "0x8e60b01e9bc801167b374dc119b41832d546afd43c143a0cd15ab1941198e121", - "urls": [ - "bzz-raw://bb1512762417dda9cd81fd9b41f590fd05888358fda1c2ab7e79e0cfabf61ec4", - "dweb:/ipfs/QmPAgBwdjLz29vE5L1Jth1Wvx6TTM1ig97amVtAyDFF61Q" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/SendUln302Mock.sol": { - "keccak256": "0x0c5cb54ec6b18e77aa653f7d774ac9d010684dafc96794d1d02f12b6885cc348", - "urls": [ - "bzz-raw://24c5a8ba8d92c16ec3047229167528f57b38cbd64882140014126ca51ab14574", - "dweb:/ipfs/QmXQsMDtZ3qNmjnr2LYgctBpPKxffuC6EeWHvFUtLBS5st" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/SimpleMessageLibMock.sol": { - "keccak256": "0xe6c93840c612592686732dd516550816eb77d6cde92514220eacb72443dcb9b9", - "urls": [ - "bzz-raw://a6a00fb60b7ac66e746f0471c2262fc98febafeb8acad8785d38ce1ddc4cc991", - "dweb:/ipfs/QmboboJskbXBbsyAGGRbW4JQCPJo9WiLFy7nwQxGVS9UhZ" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/WorkerMock.sol": { - "keccak256": "0x6c5bc31c117033dd35fa7ab3b13b1647a4b449c5f5b4cbff41bce8a63529ab97", - "urls": [ - "bzz-raw://01aa1d3f3b8e2fd4b544312d96916b16b97e01ab740e2bae1137723b2f1a31b1", - "dweb:/ipfs/QmVMemJ4MSgi6y9NxDdSeB6QbJRtCWojJNxzs3CRLT56EA" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/test.sol": { - "keccak256": "0x8758531bbac3972efcf1fa46383dbe1d276406fe527bc7abb2f236486278e83b", - "urls": [ - "bzz-raw://1f64264d61506847acf8761e84aff690cebe830958eac00bac7924d8be569240", - "dweb:/ipfs/QmSekDJvJ82MZAmr63n7YvfLzQ7gS4NLSHPmHL3GN3rw8k" - ], - "license": "GPL-3.0-or-later" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Base.sol": { - "keccak256": "0x4ff1a785311017d1eedb1b4737956fa383067ad34eb439abfec1d989754dde1c", - "urls": [ - "bzz-raw://f553622969b9fdb930246704a4c10dfaee6b1a4468c142fa7eb9dc292a438224", - "dweb:/ipfs/QmcxqHnqdQsMVtgsfH9VNLmZ3g7GhgNagfq7yvNCDcCHFK" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdAssertions.sol": { - "keccak256": "0x1a0dee4d8b2c81e9318e87dd85ef009467ebf7dba6575530d1fce94d34dbae60", - "urls": [ - "bzz-raw://ddd790c86ddde1013d1f7a552a80168eacf2e9244077f96799180644ad523a5b", - "dweb:/ipfs/QmYinBFt9uEVFXP9ytT9CDoNpzWieQVgLWRFRNiypMzJaL" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdChains.sol": { - "keccak256": "0x598b85609125830885b8fb54a18f447d04f8dd799aca3de81baef35eb6b783c0", - "urls": [ - "bzz-raw://c9c128aae4f5668d8c8f71e9e6d9379d8451b8713d139cb66a02d23bc1c75f69", - "dweb:/ipfs/QmVRihXHWi2yg9CcAhzKf63Y7m6gWz4P1giGMhXUHT3DFu" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdCheats.sol": { - "keccak256": "0xb72f3519e0bf7d31df5d68557525f4fc55d861c3fb3b0f7793144ef7c94cbeb7", - "urls": [ - "bzz-raw://f3456d0f78e6f61203fa7871ba2df0d35925f10db3baee14be623ce2a35b84e2", - "dweb:/ipfs/QmWE6QQSBvJifHMraisBTrf1x4WCwrDoTPLX8UKajTiApc" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdError.sol": { - "keccak256": "0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77", - "urls": [ - "bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6", - "dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdInvariant.sol": { - "keccak256": "0x67299bfacd77fddfa2a67b8e2b901e0e333618a4975fb94850b07475e51f6de6", - "urls": [ - "bzz-raw://1b61121d310f4053ce344b345b4a9ccf43b059daf9097ec2647f594beaca896d", - "dweb:/ipfs/QmZUCoTtXBM9zfAZVbj2dFPPnKaV1CSZzXE7zictyg3Gfz" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdJson.sol": { - "keccak256": "0x8f914dbd016bd0e318fe2b8bd556fbc8256c7cddc24e3e4fcb9f3c1c1935592d", - "urls": [ - "bzz-raw://19e704df493dde38323303b07d18cadfeb4dcadf1ddc2301add4aea9474fbb5e", - "dweb:/ipfs/QmZasuGiLK8LHwWtvpqEBxUR6QFY6GdzLMTJ9q7CMf8PNZ" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdMath.sol": { - "keccak256": "0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2", - "urls": [ - "bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92", - "dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdStorage.sol": { - "keccak256": "0x4298f3f4cedaedb07029820b1daad2c03af45379559392201f7bf3ec71105811", - "urls": [ - "bzz-raw://6e062f36d8d1ae3c383ef8975757926eaa9c4de3a92b5f1fe2d12748bcd8db32", - "dweb:/ipfs/QmcWkv3ia5Ew4DZNcudMNSTNXZ3W2QiXTZunRd44e9BT8z" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdStyle.sol": { - "keccak256": "0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d", - "urls": [ - "bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8", - "dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdUtils.sol": { - "keccak256": "0x502b18a4becda6ecd91fa8b419d8034946bfa80e6cc7f6497f51f8565bfadae0", - "urls": [ - "bzz-raw://bf499ee483a1dfd02023d4ce78ed4029a49794ccd5b849aaab912faea0d2ba61", - "dweb:/ipfs/QmP6hwNZW7sYbQK9fBzuZWxfLm6Swx2nKzvZ54qWNqQkzX" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Test.sol": { - "keccak256": "0x39b1729d5868c8e94ab8af16751eb500a17fe3870dc627d2b7ddcd5df18d7ad0", - "urls": [ - "bzz-raw://1568c82aff125cc4b0fc168be9d67ac313f469a3c7405c5493caecaaaecfb765", - "dweb:/ipfs/QmXByuZReJsdu1jDcxj1FcmpcUnzoBcqybn9kWgDAECWri" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Vm.sol": { - "keccak256": "0x87ba9f3edc254e529db9e3129c954391adcc7fc8574203767979d8d2f1e724b9", - "urls": [ - "bzz-raw://4d16c08d80d9f2869deb6350642cf5af624d21fce6b3b023abbcdedc62e195fe", - "dweb:/ipfs/QmURpnnFECPKt3i7P7jQRZpr4ZBXjRGcZ9KzcbKzsgYR2W" - ], - "license": "MIT OR Apache-2.0" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/console.sol": { - "keccak256": "0x91d5413c2434ca58fd278b6e1e79fd98d10c83931cc2596a6038eee4daeb34ba", - "urls": [ - "bzz-raw://91ccea707361e48b9b7a161fe81f496b9932bc471e9c4e4e1e9c283f2453cc70", - "dweb:/ipfs/QmcB66sZhQ6Kz7MUHcLE78YXRUZxoZnnxZjN6yATsbB2ec" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/console2.sol": { - "keccak256": "0x954646445d1014c3cd85c7918f5e7adeeca5ee44b68c00bafa237e597a4e35ea", - "urls": [ - "bzz-raw://516fa3be52da4763147175bfba4be0aa011fadbb0c1afb01f97265bd4cee7973", - "dweb:/ipfs/QmdixAyMJefx7qePChgdxcBH5MxhmN7vsqPuPLx3CgrVmF" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/interfaces/IMulticall3.sol": { - "keccak256": "0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a", - "urls": [ - "bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0", - "dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/mocks/MockERC20.sol": { - "keccak256": "0xd8703f49411737ecf8d411f8fa66b2bf0ef972ba28b7a4adf1748c63df1bf682", - "urls": [ - "bzz-raw://b7c10a6b8112f6fe3cdccb6240ecd382765216b1a82e9a86a0fec8f5e09eadd1", - "dweb:/ipfs/QmdRvPCU4RkjMHsTu3Ric1ZEF1AWDNLp78unFC5aWP17xq" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/mocks/MockERC721.sol": { - "keccak256": "0xa24468244abb66e663fb7eee6463cb518eb9a7c14e1071548ff564cca825bbca", - "urls": [ - "bzz-raw://145585a2194aa6e2d30edfe709ef2814e20b1b4540469aa6a8f50c841fcb9070", - "dweb:/ipfs/QmZrwbvtpbtTxqbW5phUrwb3F1tBiPSQc6jZJAXBfsBsAh" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/safeconsole.sol": { - "keccak256": "0xbaf41fdc6c54297e7cd8250e48b0f20eaac918e342a1028cef3f9a52ac086381", - "urls": [ - "bzz-raw://a500ad81dea226f9910e6b50f99a9ff930105e393a692cbfb2185e4cdb4424ae", - "dweb:/ipfs/QmVbUQpXNMmMWRiy4FvBNczzq46BMGfUoBikvSHNiCxVTq" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/access/AccessControl.sol": { - "keccak256": "0xa0e92d42942f4f57c5be50568dac11e9d00c93efcb458026e18d2d9b9b2e7308", - "urls": [ - "bzz-raw://46326c0bb1e296b67185e81c918e0b40501b8b6386165855df0a3f3c634b6a80", - "dweb:/ipfs/QmTwyrDYtsxsk6pymJTK94PnEpzsmkpUxFuzEiakDopy4Z" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/access/IAccessControl.sol": { - "keccak256": "0xc1c2a7f1563b77050dc6d507db9f4ada5d042c1f6a9ddbffdc49c77cdc0a1606", - "urls": [ - "bzz-raw://fd54abb96a6156d9a761f6fdad1d3004bc48d2d4fce47f40a3f91a7ae83fc3a1", - "dweb:/ipfs/QmUrFSGkTDJ7WaZ6qPVVe3Gn5uN2viPb7x7QQ35UX4DofX" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/access/Ownable.sol": { - "keccak256": "0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb", - "urls": [ - "bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6", - "dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol": { - "keccak256": "0x9b6b3e7803bc5f2f8cd7ad57db8ac1def61a9930a5a3107df4882e028a9605d7", - "urls": [ - "bzz-raw://da62d6be1f5c6edf577f0cb45666a8aa9c2086a4bac87d95d65f02e2f4c36a4b", - "dweb:/ipfs/QmNkpvBpoCMvX8JwAFNSc5XxJ2q5BXJpL5L1txb4QkqVFF" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/interfaces/IERC165.sol": { - "keccak256": "0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724", - "urls": [ - "bzz-raw://11fea9f8bc98949ac6709f0c1699db7430d2948137aa94d5a9e95a91f61a710a", - "dweb:/ipfs/QmQdfRXxQjwP6yn3DVo1GHPpriKNcFghSPi94Z1oKEFUNS" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/interfaces/IERC20.sol": { - "keccak256": "0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c", - "urls": [ - "bzz-raw://a2608291cb038b388d80b79a06b6118a42f7894ff67b7da10ec0dbbf5b2973ba", - "dweb:/ipfs/QmWohqcBLbcxmA4eGPhZDXe5RYMMEEpFq22nfkaUMvTfw1" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol": { - "keccak256": "0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7", - "urls": [ - "bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db", - "dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol": { - "keccak256": "0xca2ae13e0610f6a99238dd00b97bd786bc92732dae6d6b9d61f573ec51018310", - "urls": [ - "bzz-raw://75f8c71ce0c91c40dd5f249ace0b7d8270f8f1767231bcf71490f7157d6ba862", - "dweb:/ipfs/QmYXgxeDyFHvz3JsXxLEYN6GNUR44ThHeFj5XkpkgMoG4w" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Address.sol": { - "keccak256": "0x9d8da059267bac779a2dbbb9a26c2acf00ca83085e105d62d5d4ef96054a47f5", - "urls": [ - "bzz-raw://c78e2aa4313323cecd1ef12a8d6265b96beee1a199923abf55d9a2a9e291ad23", - "dweb:/ipfs/QmUTs2KStXucZezzFo3EYeqYu47utu56qrF7jj1Gue65vb" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Context.sol": { - "keccak256": "0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2", - "urls": [ - "bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12", - "dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Errors.sol": { - "keccak256": "0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123", - "urls": [ - "bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf", - "dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Panic.sol": { - "keccak256": "0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a", - "urls": [ - "bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a", - "dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Pausable.sol": { - "keccak256": "0xb2e5f50762c27fb4b123e3619c3c02bdcba5e515309382e5bfb6f7d6486510bd", - "urls": [ - "bzz-raw://1a4b83328c98d518a2699c2cbe9e9b055e78aa57fa8639f1b88deb8b3750b5dc", - "dweb:/ipfs/QmXdcYj5v7zQxXFPULShHkR5p4Wa2zYuupbHnFdV3cHYtc" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/ReentrancyGuard.sol": { - "keccak256": "0x11a5a79827df29e915a12740caf62fe21ebe27c08c9ae3e09abe9ee3ba3866d3", - "urls": [ - "bzz-raw://3cf0c69ab827e3251db9ee6a50647d62c90ba580a4d7bbff21f2bea39e7b2f4a", - "dweb:/ipfs/QmZiKwtKU1SBX4RGfQtY7PZfiapbbu6SZ9vizGQD9UHjRA" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/cryptography/ECDSA.sol": { - "keccak256": "0x69f54c02b7d81d505910ec198c11ed4c6a728418a868b906b4a0cf29946fda84", - "urls": [ - "bzz-raw://8e25e4bdb7ae1f21d23bfee996e22736fc0ab44cfabedac82a757b1edc5623b9", - "dweb:/ipfs/QmQdWQvB6JCP9ZMbzi8EvQ1PTETqkcTWrbcVurS7DKpa5n" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/introspection/ERC165.sol": { - "keccak256": "0xddce8e17e3d3f9ed818b4f4c4478a8262aab8b11ed322f1bf5ed705bb4bd97fa", - "urls": [ - "bzz-raw://8084aa71a4cc7d2980972412a88fe4f114869faea3fefa5436431644eb5c0287", - "dweb:/ipfs/Qmbqfs5dRdPvHVKY8kTaeyc65NdqXRQwRK7h9s5UJEhD1p" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol": { - "keccak256": "0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8", - "urls": [ - "bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621", - "dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/math/SafeCast.sol": { - "keccak256": "0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54", - "urls": [ - "bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8", - "dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/structs/DoubleEndedQueue.sol": { - "keccak256": "0x1e1d74658d7f4eab3d4f8fb0c6c5953bc5f629d9425e978d557dabff7b58b217", - "urls": [ - "bzz-raw://be0175d00008d452d3d553890f73a3d5d51dff4372f720336c8b98f26822fcdb", - "dweb:/ipfs/QmUkE8g5xPExWoSAKwdi5ww1qJJVtEWtjSF93G2LMQkgD3" - ], - "license": "MIT" - }, - "node_modules/solidity-bytes-utils/contracts/BytesLib.sol": { - "keccak256": "0xa5b10f04797d5a10a9ba07855108b6bd695940e6a3d128927b2f74a0d359868a", - "urls": [ - "bzz-raw://a38d7680aacbb18dae659876b396b73bcc8f759672213f8a0efc4129e2648535", - "dweb:/ipfs/QmfKFnwpTEGAnbRnZxMuv3mRCG9S9WMjFhFL23bftBT2Jq" - ], - "license": "Unlicense" - } - }, - "version": 1 - }, - "id": 83 -} diff --git a/examples/oft-movement/out/StdAssertions.sol/StdAssertions.json b/examples/oft-movement/out/StdAssertions.sol/StdAssertions.json deleted file mode 100644 index ad87c9945..000000000 --- a/examples/oft-movement/out/StdAssertions.sol/StdAssertions.json +++ /dev/null @@ -1,820 +0,0 @@ -{ - "abi": [ - { - "type": "function", - "name": "IS_TEST", - "inputs": [], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "failed", - "inputs": [], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "nonpayable" - }, - { - "type": "event", - "name": "log", - "inputs": [ - { - "name": "", - "type": "string", - "indexed": false, - "internalType": "string" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "log_address", - "inputs": [ - { - "name": "", - "type": "address", - "indexed": false, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "log_array", - "inputs": [ - { - "name": "val", - "type": "uint256[]", - "indexed": false, - "internalType": "uint256[]" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "log_array", - "inputs": [ - { - "name": "val", - "type": "int256[]", - "indexed": false, - "internalType": "int256[]" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "log_array", - "inputs": [ - { - "name": "val", - "type": "address[]", - "indexed": false, - "internalType": "address[]" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "log_bytes", - "inputs": [ - { - "name": "", - "type": "bytes", - "indexed": false, - "internalType": "bytes" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "log_bytes32", - "inputs": [ - { - "name": "", - "type": "bytes32", - "indexed": false, - "internalType": "bytes32" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "log_int", - "inputs": [ - { - "name": "", - "type": "int256", - "indexed": false, - "internalType": "int256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "log_named_address", - "inputs": [ - { - "name": "key", - "type": "string", - "indexed": false, - "internalType": "string" - }, - { - "name": "val", - "type": "address", - "indexed": false, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "log_named_array", - "inputs": [ - { - "name": "key", - "type": "string", - "indexed": false, - "internalType": "string" - }, - { - "name": "val", - "type": "uint256[]", - "indexed": false, - "internalType": "uint256[]" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "log_named_array", - "inputs": [ - { - "name": "key", - "type": "string", - "indexed": false, - "internalType": "string" - }, - { - "name": "val", - "type": "int256[]", - "indexed": false, - "internalType": "int256[]" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "log_named_array", - "inputs": [ - { - "name": "key", - "type": "string", - "indexed": false, - "internalType": "string" - }, - { - "name": "val", - "type": "address[]", - "indexed": false, - "internalType": "address[]" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "log_named_bytes", - "inputs": [ - { - "name": "key", - "type": "string", - "indexed": false, - "internalType": "string" - }, - { - "name": "val", - "type": "bytes", - "indexed": false, - "internalType": "bytes" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "log_named_bytes32", - "inputs": [ - { - "name": "key", - "type": "string", - "indexed": false, - "internalType": "string" - }, - { - "name": "val", - "type": "bytes32", - "indexed": false, - "internalType": "bytes32" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "log_named_decimal_int", - "inputs": [ - { - "name": "key", - "type": "string", - "indexed": false, - "internalType": "string" - }, - { - "name": "val", - "type": "int256", - "indexed": false, - "internalType": "int256" - }, - { - "name": "decimals", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "log_named_decimal_uint", - "inputs": [ - { - "name": "key", - "type": "string", - "indexed": false, - "internalType": "string" - }, - { - "name": "val", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - }, - { - "name": "decimals", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "log_named_int", - "inputs": [ - { - "name": "key", - "type": "string", - "indexed": false, - "internalType": "string" - }, - { - "name": "val", - "type": "int256", - "indexed": false, - "internalType": "int256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "log_named_string", - "inputs": [ - { - "name": "key", - "type": "string", - "indexed": false, - "internalType": "string" - }, - { - "name": "val", - "type": "string", - "indexed": false, - "internalType": "string" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "log_named_uint", - "inputs": [ - { - "name": "key", - "type": "string", - "indexed": false, - "internalType": "string" - }, - { - "name": "val", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "log_string", - "inputs": [ - { - "name": "", - "type": "string", - "indexed": false, - "internalType": "string" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "log_uint", - "inputs": [ - { - "name": "", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "logs", - "inputs": [ - { - "name": "", - "type": "bytes", - "indexed": false, - "internalType": "bytes" - } - ], - "anonymous": false - } - ], - "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "methodIdentifiers": { "IS_TEST()": "fa7626d4", "failed()": "ba414fa6" }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"name\":\"log\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"log_address\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"val\",\"type\":\"uint256[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"int256[]\",\"name\":\"val\",\"type\":\"int256[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"val\",\"type\":\"address[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"log_bytes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"log_bytes32\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"name\":\"log_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"val\",\"type\":\"address\"}],\"name\":\"log_named_address\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"val\",\"type\":\"uint256[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256[]\",\"name\":\"val\",\"type\":\"int256[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"val\",\"type\":\"address[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"val\",\"type\":\"bytes\"}],\"name\":\"log_named_bytes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"val\",\"type\":\"bytes32\"}],\"name\":\"log_named_bytes32\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"val\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"log_named_decimal_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"val\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"log_named_decimal_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"val\",\"type\":\"int256\"}],\"name\":\"log_named_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"val\",\"type\":\"string\"}],\"name\":\"log_named_string\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"val\",\"type\":\"uint256\"}],\"name\":\"log_named_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"name\":\"log_string\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"log_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"logs\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"IS_TEST\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"failed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdAssertions.sol\":\"StdAssertions\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/test.sol\":{\"keccak256\":\"0x8758531bbac3972efcf1fa46383dbe1d276406fe527bc7abb2f236486278e83b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://1f64264d61506847acf8761e84aff690cebe830958eac00bac7924d8be569240\",\"dweb:/ipfs/QmSekDJvJ82MZAmr63n7YvfLzQ7gS4NLSHPmHL3GN3rw8k\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdAssertions.sol\":{\"keccak256\":\"0x1a0dee4d8b2c81e9318e87dd85ef009467ebf7dba6575530d1fce94d34dbae60\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ddd790c86ddde1013d1f7a552a80168eacf2e9244077f96799180644ad523a5b\",\"dweb:/ipfs/QmYinBFt9uEVFXP9ytT9CDoNpzWieQVgLWRFRNiypMzJaL\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdMath.sol\":{\"keccak256\":\"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92\",\"dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { - "inputs": [ - { - "internalType": "string", - "name": "", - "type": "string", - "indexed": false - } - ], - "type": "event", - "name": "log", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address", - "indexed": false - } - ], - "type": "event", - "name": "log_address", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "uint256[]", - "name": "val", - "type": "uint256[]", - "indexed": false - } - ], - "type": "event", - "name": "log_array", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "int256[]", - "name": "val", - "type": "int256[]", - "indexed": false - } - ], - "type": "event", - "name": "log_array", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "val", - "type": "address[]", - "indexed": false - } - ], - "type": "event", - "name": "log_array", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes", - "indexed": false - } - ], - "type": "event", - "name": "log_bytes", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32", - "indexed": false - } - ], - "type": "event", - "name": "log_bytes32", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "int256", - "name": "", - "type": "int256", - "indexed": false - } - ], - "type": "event", - "name": "log_int", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "string", - "name": "key", - "type": "string", - "indexed": false - }, - { - "internalType": "address", - "name": "val", - "type": "address", - "indexed": false - } - ], - "type": "event", - "name": "log_named_address", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "string", - "name": "key", - "type": "string", - "indexed": false - }, - { - "internalType": "uint256[]", - "name": "val", - "type": "uint256[]", - "indexed": false - } - ], - "type": "event", - "name": "log_named_array", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "string", - "name": "key", - "type": "string", - "indexed": false - }, - { - "internalType": "int256[]", - "name": "val", - "type": "int256[]", - "indexed": false - } - ], - "type": "event", - "name": "log_named_array", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "string", - "name": "key", - "type": "string", - "indexed": false - }, - { - "internalType": "address[]", - "name": "val", - "type": "address[]", - "indexed": false - } - ], - "type": "event", - "name": "log_named_array", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "string", - "name": "key", - "type": "string", - "indexed": false - }, - { - "internalType": "bytes", - "name": "val", - "type": "bytes", - "indexed": false - } - ], - "type": "event", - "name": "log_named_bytes", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "string", - "name": "key", - "type": "string", - "indexed": false - }, - { - "internalType": "bytes32", - "name": "val", - "type": "bytes32", - "indexed": false - } - ], - "type": "event", - "name": "log_named_bytes32", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "string", - "name": "key", - "type": "string", - "indexed": false - }, - { - "internalType": "int256", - "name": "val", - "type": "int256", - "indexed": false - }, - { - "internalType": "uint256", - "name": "decimals", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "log_named_decimal_int", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "string", - "name": "key", - "type": "string", - "indexed": false - }, - { - "internalType": "uint256", - "name": "val", - "type": "uint256", - "indexed": false - }, - { - "internalType": "uint256", - "name": "decimals", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "log_named_decimal_uint", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "string", - "name": "key", - "type": "string", - "indexed": false - }, - { - "internalType": "int256", - "name": "val", - "type": "int256", - "indexed": false - } - ], - "type": "event", - "name": "log_named_int", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "string", - "name": "key", - "type": "string", - "indexed": false - }, - { - "internalType": "string", - "name": "val", - "type": "string", - "indexed": false - } - ], - "type": "event", - "name": "log_named_string", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "string", - "name": "key", - "type": "string", - "indexed": false - }, - { - "internalType": "uint256", - "name": "val", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "log_named_uint", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "string", - "name": "", - "type": "string", - "indexed": false - } - ], - "type": "event", - "name": "log_string", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "log_uint", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes", - "indexed": false - } - ], - "type": "event", - "name": "logs", - "anonymous": false - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "IS_TEST", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "function", - "name": "failed", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - } - ], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdAssertions.sol": "StdAssertions" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/test.sol": { - "keccak256": "0x8758531bbac3972efcf1fa46383dbe1d276406fe527bc7abb2f236486278e83b", - "urls": [ - "bzz-raw://1f64264d61506847acf8761e84aff690cebe830958eac00bac7924d8be569240", - "dweb:/ipfs/QmSekDJvJ82MZAmr63n7YvfLzQ7gS4NLSHPmHL3GN3rw8k" - ], - "license": "GPL-3.0-or-later" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdAssertions.sol": { - "keccak256": "0x1a0dee4d8b2c81e9318e87dd85ef009467ebf7dba6575530d1fce94d34dbae60", - "urls": [ - "bzz-raw://ddd790c86ddde1013d1f7a552a80168eacf2e9244077f96799180644ad523a5b", - "dweb:/ipfs/QmYinBFt9uEVFXP9ytT9CDoNpzWieQVgLWRFRNiypMzJaL" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdMath.sol": { - "keccak256": "0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2", - "urls": [ - "bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92", - "dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC" - ], - "license": "MIT" - } - }, - "version": 1 - }, - "id": 87 -} diff --git a/examples/oft-movement/out/StdChains.sol/StdChains.json b/examples/oft-movement/out/StdChains.sol/StdChains.json deleted file mode 100644 index a39c547bf..000000000 --- a/examples/oft-movement/out/StdChains.sol/StdChains.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "abi": [], - "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "methodIdentifiers": {}, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"StdChains provides information about EVM compatible chains that can be used in scripts/tests. For each chain, the chain's name, chain ID, and a default RPC URL are provided. Chains are identified by their alias, which is the same as the alias in the `[rpc_endpoints]` section of the `foundry.toml` file. For best UX, ensure the alias in the `foundry.toml` file match the alias used in this contract, which can be found as the first argument to the `setChainWithDefaultRpcUrl` call in the `initializeStdChains` function. There are two main ways to use this contract: 1. Set a chain with `setChain(string memory chainAlias, ChainData memory chain)` or `setChain(string memory chainAlias, Chain memory chain)` 2. Get a chain with `getChain(string memory chainAlias)` or `getChain(uint256 chainId)`. The first time either of those are used, chains are initialized with the default set of RPC URLs. This is done in `initializeStdChains`, which uses `setChainWithDefaultRpcUrl`. Defaults are recorded in `defaultRpcUrls`. The `setChain` function is straightforward, and it simply saves off the given chain data. The `getChain` methods use `getChainWithUpdatedRpcUrl` to return a chain. For example, let's say we want to retrieve the RPC URL for `mainnet`: - If you have specified data with `setChain`, it will return that. - If you have configured a mainnet RPC URL in `foundry.toml`, it will return the URL, provided it is valid (e.g. a URL is specified, or an environment variable is given and exists). - If neither of the above conditions is met, the default data is returned. Summarizing the above, the prioritization hierarchy is `setChain` -> `foundry.toml` -> environment variable -> defaults.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdChains.sol\":\"StdChains\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdChains.sol\":{\"keccak256\":\"0x598b85609125830885b8fb54a18f447d04f8dd799aca3de81baef35eb6b783c0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c9c128aae4f5668d8c8f71e9e6d9379d8451b8713d139cb66a02d23bc1c75f69\",\"dweb:/ipfs/QmVRihXHWi2yg9CcAhzKf63Y7m6gWz4P1giGMhXUHT3DFu\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Vm.sol\":{\"keccak256\":\"0x87ba9f3edc254e529db9e3129c954391adcc7fc8574203767979d8d2f1e724b9\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://4d16c08d80d9f2869deb6350642cf5af624d21fce6b3b023abbcdedc62e195fe\",\"dweb:/ipfs/QmURpnnFECPKt3i7P7jQRZpr4ZBXjRGcZ9KzcbKzsgYR2W\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdChains.sol": "StdChains" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdChains.sol": { - "keccak256": "0x598b85609125830885b8fb54a18f447d04f8dd799aca3de81baef35eb6b783c0", - "urls": [ - "bzz-raw://c9c128aae4f5668d8c8f71e9e6d9379d8451b8713d139cb66a02d23bc1c75f69", - "dweb:/ipfs/QmVRihXHWi2yg9CcAhzKf63Y7m6gWz4P1giGMhXUHT3DFu" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Vm.sol": { - "keccak256": "0x87ba9f3edc254e529db9e3129c954391adcc7fc8574203767979d8d2f1e724b9", - "urls": [ - "bzz-raw://4d16c08d80d9f2869deb6350642cf5af624d21fce6b3b023abbcdedc62e195fe", - "dweb:/ipfs/QmURpnnFECPKt3i7P7jQRZpr4ZBXjRGcZ9KzcbKzsgYR2W" - ], - "license": "MIT OR Apache-2.0" - } - }, - "version": 1 - }, - "id": 88 -} diff --git a/examples/oft-movement/out/StdCheats.sol/StdCheats.json b/examples/oft-movement/out/StdCheats.sol/StdCheats.json deleted file mode 100644 index 7ad732f7c..000000000 --- a/examples/oft-movement/out/StdCheats.sol/StdCheats.json +++ /dev/null @@ -1,70 +0,0 @@ -{ - "abi": [], - "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "methodIdentifiers": {}, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdCheats.sol\":\"StdCheats\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdCheats.sol\":{\"keccak256\":\"0xb72f3519e0bf7d31df5d68557525f4fc55d861c3fb3b0f7793144ef7c94cbeb7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f3456d0f78e6f61203fa7871ba2df0d35925f10db3baee14be623ce2a35b84e2\",\"dweb:/ipfs/QmWE6QQSBvJifHMraisBTrf1x4WCwrDoTPLX8UKajTiApc\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdStorage.sol\":{\"keccak256\":\"0x4298f3f4cedaedb07029820b1daad2c03af45379559392201f7bf3ec71105811\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6e062f36d8d1ae3c383ef8975757926eaa9c4de3a92b5f1fe2d12748bcd8db32\",\"dweb:/ipfs/QmcWkv3ia5Ew4DZNcudMNSTNXZ3W2QiXTZunRd44e9BT8z\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Vm.sol\":{\"keccak256\":\"0x87ba9f3edc254e529db9e3129c954391adcc7fc8574203767979d8d2f1e724b9\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://4d16c08d80d9f2869deb6350642cf5af624d21fce6b3b023abbcdedc62e195fe\",\"dweb:/ipfs/QmURpnnFECPKt3i7P7jQRZpr4ZBXjRGcZ9KzcbKzsgYR2W\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/console2.sol\":{\"keccak256\":\"0x954646445d1014c3cd85c7918f5e7adeeca5ee44b68c00bafa237e597a4e35ea\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://516fa3be52da4763147175bfba4be0aa011fadbb0c1afb01f97265bd4cee7973\",\"dweb:/ipfs/QmdixAyMJefx7qePChgdxcBH5MxhmN7vsqPuPLx3CgrVmF\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdCheats.sol": "StdCheats" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdCheats.sol": { - "keccak256": "0xb72f3519e0bf7d31df5d68557525f4fc55d861c3fb3b0f7793144ef7c94cbeb7", - "urls": [ - "bzz-raw://f3456d0f78e6f61203fa7871ba2df0d35925f10db3baee14be623ce2a35b84e2", - "dweb:/ipfs/QmWE6QQSBvJifHMraisBTrf1x4WCwrDoTPLX8UKajTiApc" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdStorage.sol": { - "keccak256": "0x4298f3f4cedaedb07029820b1daad2c03af45379559392201f7bf3ec71105811", - "urls": [ - "bzz-raw://6e062f36d8d1ae3c383ef8975757926eaa9c4de3a92b5f1fe2d12748bcd8db32", - "dweb:/ipfs/QmcWkv3ia5Ew4DZNcudMNSTNXZ3W2QiXTZunRd44e9BT8z" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Vm.sol": { - "keccak256": "0x87ba9f3edc254e529db9e3129c954391adcc7fc8574203767979d8d2f1e724b9", - "urls": [ - "bzz-raw://4d16c08d80d9f2869deb6350642cf5af624d21fce6b3b023abbcdedc62e195fe", - "dweb:/ipfs/QmURpnnFECPKt3i7P7jQRZpr4ZBXjRGcZ9KzcbKzsgYR2W" - ], - "license": "MIT OR Apache-2.0" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/console2.sol": { - "keccak256": "0x954646445d1014c3cd85c7918f5e7adeeca5ee44b68c00bafa237e597a4e35ea", - "urls": [ - "bzz-raw://516fa3be52da4763147175bfba4be0aa011fadbb0c1afb01f97265bd4cee7973", - "dweb:/ipfs/QmdixAyMJefx7qePChgdxcBH5MxhmN7vsqPuPLx3CgrVmF" - ], - "license": "MIT" - } - }, - "version": 1 - }, - "id": 89 -} diff --git a/examples/oft-movement/out/StdCheats.sol/StdCheatsSafe.json b/examples/oft-movement/out/StdCheats.sol/StdCheatsSafe.json deleted file mode 100644 index 4099aad41..000000000 --- a/examples/oft-movement/out/StdCheats.sol/StdCheatsSafe.json +++ /dev/null @@ -1,70 +0,0 @@ -{ - "abi": [], - "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "methodIdentifiers": {}, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdCheats.sol\":\"StdCheatsSafe\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdCheats.sol\":{\"keccak256\":\"0xb72f3519e0bf7d31df5d68557525f4fc55d861c3fb3b0f7793144ef7c94cbeb7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f3456d0f78e6f61203fa7871ba2df0d35925f10db3baee14be623ce2a35b84e2\",\"dweb:/ipfs/QmWE6QQSBvJifHMraisBTrf1x4WCwrDoTPLX8UKajTiApc\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdStorage.sol\":{\"keccak256\":\"0x4298f3f4cedaedb07029820b1daad2c03af45379559392201f7bf3ec71105811\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6e062f36d8d1ae3c383ef8975757926eaa9c4de3a92b5f1fe2d12748bcd8db32\",\"dweb:/ipfs/QmcWkv3ia5Ew4DZNcudMNSTNXZ3W2QiXTZunRd44e9BT8z\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Vm.sol\":{\"keccak256\":\"0x87ba9f3edc254e529db9e3129c954391adcc7fc8574203767979d8d2f1e724b9\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://4d16c08d80d9f2869deb6350642cf5af624d21fce6b3b023abbcdedc62e195fe\",\"dweb:/ipfs/QmURpnnFECPKt3i7P7jQRZpr4ZBXjRGcZ9KzcbKzsgYR2W\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/console2.sol\":{\"keccak256\":\"0x954646445d1014c3cd85c7918f5e7adeeca5ee44b68c00bafa237e597a4e35ea\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://516fa3be52da4763147175bfba4be0aa011fadbb0c1afb01f97265bd4cee7973\",\"dweb:/ipfs/QmdixAyMJefx7qePChgdxcBH5MxhmN7vsqPuPLx3CgrVmF\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdCheats.sol": "StdCheatsSafe" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdCheats.sol": { - "keccak256": "0xb72f3519e0bf7d31df5d68557525f4fc55d861c3fb3b0f7793144ef7c94cbeb7", - "urls": [ - "bzz-raw://f3456d0f78e6f61203fa7871ba2df0d35925f10db3baee14be623ce2a35b84e2", - "dweb:/ipfs/QmWE6QQSBvJifHMraisBTrf1x4WCwrDoTPLX8UKajTiApc" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdStorage.sol": { - "keccak256": "0x4298f3f4cedaedb07029820b1daad2c03af45379559392201f7bf3ec71105811", - "urls": [ - "bzz-raw://6e062f36d8d1ae3c383ef8975757926eaa9c4de3a92b5f1fe2d12748bcd8db32", - "dweb:/ipfs/QmcWkv3ia5Ew4DZNcudMNSTNXZ3W2QiXTZunRd44e9BT8z" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Vm.sol": { - "keccak256": "0x87ba9f3edc254e529db9e3129c954391adcc7fc8574203767979d8d2f1e724b9", - "urls": [ - "bzz-raw://4d16c08d80d9f2869deb6350642cf5af624d21fce6b3b023abbcdedc62e195fe", - "dweb:/ipfs/QmURpnnFECPKt3i7P7jQRZpr4ZBXjRGcZ9KzcbKzsgYR2W" - ], - "license": "MIT OR Apache-2.0" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/console2.sol": { - "keccak256": "0x954646445d1014c3cd85c7918f5e7adeeca5ee44b68c00bafa237e597a4e35ea", - "urls": [ - "bzz-raw://516fa3be52da4763147175bfba4be0aa011fadbb0c1afb01f97265bd4cee7973", - "dweb:/ipfs/QmdixAyMJefx7qePChgdxcBH5MxhmN7vsqPuPLx3CgrVmF" - ], - "license": "MIT" - } - }, - "version": 1 - }, - "id": 89 -} diff --git a/examples/oft-movement/out/StdError.sol/stdError.json b/examples/oft-movement/out/StdError.sol/stdError.json deleted file mode 100644 index 69b6b311b..000000000 --- a/examples/oft-movement/out/StdError.sol/stdError.json +++ /dev/null @@ -1,192 +0,0 @@ -{ - "abi": [ - { - "type": "function", - "name": "arithmeticError", - "inputs": [], - "outputs": [{ "name": "", "type": "bytes", "internalType": "bytes" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "assertionError", - "inputs": [], - "outputs": [{ "name": "", "type": "bytes", "internalType": "bytes" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "divisionError", - "inputs": [], - "outputs": [{ "name": "", "type": "bytes", "internalType": "bytes" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "encodeStorageError", - "inputs": [], - "outputs": [{ "name": "", "type": "bytes", "internalType": "bytes" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "enumConversionError", - "inputs": [], - "outputs": [{ "name": "", "type": "bytes", "internalType": "bytes" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "indexOOBError", - "inputs": [], - "outputs": [{ "name": "", "type": "bytes", "internalType": "bytes" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "memOverflowError", - "inputs": [], - "outputs": [{ "name": "", "type": "bytes", "internalType": "bytes" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "popError", - "inputs": [], - "outputs": [{ "name": "", "type": "bytes", "internalType": "bytes" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "zeroVarError", - "inputs": [], - "outputs": [{ "name": "", "type": "bytes", "internalType": "bytes" }], - "stateMutability": "view" - } - ], - "bytecode": { - "object": "0x61025061003a600b82828239805160001a60731461002d57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe730000000000000000000000000000000000000000301460806040526004361061009d5760003560e01c8063986c5f6811610070578063986c5f68146100d8578063b22dc54d146100e0578063b67689da146100e8578063d160e4de146100f0578063fa784a44146100f857600080fd5b806305ee8612146100a257806310332977146100c05780631de45560146100c85780638995290f146100d0575b600080fd5b6100aa610100565b6040516100b791906101cb565b60405180910390f35b6100aa61013b565b6100aa61014d565b6100aa61015f565b6100aa610171565b6100aa610183565b6100aa610195565b6100aa6101a7565b6100aa6101b9565b604051603260248201526044015b60408051601f198184030181529190526020810180516001600160e01b0316634e487b7160e01b17905281565b6040516001602482015260440161010e565b6040516021602482015260440161010e565b6040516011602482015260440161010e565b6040516041602482015260440161010e565b6040516031602482015260440161010e565b6040516051602482015260440161010e565b6040516022602482015260440161010e565b6040516012602482015260440161010e565b60006020808352835180602085015260005b818110156101f9578581018301518582016040015282016101dd565b506000604082860101526040601f19601f830116850101925050509291505056fea2646970667358221220398b0b003b60198aac25a7ccf1ec30c7ae55fc37f8c034df92e4b495410a3d7a64736f6c63430008160033", - "sourceMap": "162:850:90:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;162:850:90;;;;;;;;;;;;;;;;;", - "linkReferences": {} - }, - "deployedBytecode": { - "object": "0x730000000000000000000000000000000000000000301460806040526004361061009d5760003560e01c8063986c5f6811610070578063986c5f68146100d8578063b22dc54d146100e0578063b67689da146100e8578063d160e4de146100f0578063fa784a44146100f857600080fd5b806305ee8612146100a257806310332977146100c05780631de45560146100c85780638995290f146100d0575b600080fd5b6100aa610100565b6040516100b791906101cb565b60405180910390f35b6100aa61013b565b6100aa61014d565b6100aa61015f565b6100aa610171565b6100aa610183565b6100aa610195565b6100aa6101a7565b6100aa6101b9565b604051603260248201526044015b60408051601f198184030181529190526020810180516001600160e01b0316634e487b7160e01b17905281565b6040516001602482015260440161010e565b6040516021602482015260440161010e565b6040516011602482015260440161010e565b6040516041602482015260440161010e565b6040516031602482015260440161010e565b6040516051602482015260440161010e565b6040516022602482015260440161010e565b6040516012602482015260440161010e565b60006020808352835180602085015260005b818110156101f9578581018301518582016040015282016101dd565b506000604082860101526040601f19601f830116850101925050509291505056fea2646970667358221220398b0b003b60198aac25a7ccf1ec30c7ae55fc37f8c034df92e4b495410a3d7a64736f6c63430008160033", - "sourceMap": "162:850:90:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;740:85;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;185:86;;;:::i;461:91::-;;;:::i;277:87::-;;;:::i;831:88::-;;;:::i;654:80::-;;;:::i;925:84::-;;;:::i;558:90::-;;;:::i;370:85::-;;;:::i;740:::-;778:47;;820:4;778:47;;;726:36:132;699:18;;778:47:90;;;;-1:-1:-1;;778:47:90;;;;;;;;;;;;;;-1:-1:-1;;;;;778:47:90;-1:-1:-1;;;778:47:90;;;740:85;:::o;185:86::-;224:47;;266:4;224:47;;;726:36:132;699:18;;224:47:90;573:195:132;461:91:90;505:47;;547:4;505:47;;;726:36:132;699:18;;505:47:90;573:195:132;277:87:90;317:47;;359:4;317:47;;;726:36:132;699:18;;317:47:90;573:195:132;831:88:90;872:47;;914:4;872:47;;;726:36:132;699:18;;872:47:90;573:195:132;654:80:90;687:47;;729:4;687:47;;;726:36:132;699:18;;687:47:90;573:195:132;925:84:90;962:47;;1004:4;962:47;;;726:36:132;699:18;;962:47:90;573:195:132;558:90:90;601:47;;643:4;601:47;;;726:36:132;699:18;;601:47:90;573:195:132;370:85:90;408:47;;450:4;408:47;;;726:36:132;699:18;;408:47:90;573:195:132;14:554;132:4;161:2;190;179:9;172:21;222:6;216:13;265:6;260:2;249:9;245:18;238:34;290:1;300:140;314:6;311:1;308:13;300:140;;;409:14;;;405:23;;399:30;375:17;;;394:2;371:26;364:66;329:10;;300:140;;;304:3;489:1;484:2;475:6;464:9;460:22;456:31;449:42;559:2;552;548:7;543:2;535:6;531:15;527:29;516:9;512:45;508:54;500:62;;;;14:554;;;;:::o", - "linkReferences": {} - }, - "methodIdentifiers": { - "arithmeticError()": "8995290f", - "assertionError()": "10332977", - "divisionError()": "fa784a44", - "encodeStorageError()": "d160e4de", - "enumConversionError()": "1de45560", - "indexOOBError()": "05ee8612", - "memOverflowError()": "986c5f68", - "popError()": "b22dc54d", - "zeroVarError()": "b67689da" - }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"arithmeticError\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"assertionError\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"divisionError\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"encodeStorageError\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"enumConversionError\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"indexOOBError\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"memOverflowError\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"popError\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"zeroVarError\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdError.sol\":\"stdError\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdError.sol\":{\"keccak256\":\"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6\",\"dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "arithmeticError", - "outputs": [{ "internalType": "bytes", "name": "", "type": "bytes" }] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "assertionError", - "outputs": [{ "internalType": "bytes", "name": "", "type": "bytes" }] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "divisionError", - "outputs": [{ "internalType": "bytes", "name": "", "type": "bytes" }] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "encodeStorageError", - "outputs": [{ "internalType": "bytes", "name": "", "type": "bytes" }] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "enumConversionError", - "outputs": [{ "internalType": "bytes", "name": "", "type": "bytes" }] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "indexOOBError", - "outputs": [{ "internalType": "bytes", "name": "", "type": "bytes" }] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "memOverflowError", - "outputs": [{ "internalType": "bytes", "name": "", "type": "bytes" }] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "popError", - "outputs": [{ "internalType": "bytes", "name": "", "type": "bytes" }] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "zeroVarError", - "outputs": [{ "internalType": "bytes", "name": "", "type": "bytes" }] - } - ], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdError.sol": "stdError" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdError.sol": { - "keccak256": "0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77", - "urls": [ - "bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6", - "dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj" - ], - "license": "MIT" - } - }, - "version": 1 - }, - "id": 90 -} diff --git a/examples/oft-movement/out/StdInvariant.sol/StdInvariant.json b/examples/oft-movement/out/StdInvariant.sol/StdInvariant.json deleted file mode 100644 index 787e3089b..000000000 --- a/examples/oft-movement/out/StdInvariant.sol/StdInvariant.json +++ /dev/null @@ -1,352 +0,0 @@ -{ - "abi": [ - { - "type": "function", - "name": "excludeArtifacts", - "inputs": [], - "outputs": [ - { - "name": "excludedArtifacts_", - "type": "string[]", - "internalType": "string[]" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "excludeContracts", - "inputs": [], - "outputs": [ - { - "name": "excludedContracts_", - "type": "address[]", - "internalType": "address[]" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "excludeSenders", - "inputs": [], - "outputs": [ - { - "name": "excludedSenders_", - "type": "address[]", - "internalType": "address[]" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "targetArtifactSelectors", - "inputs": [], - "outputs": [ - { - "name": "targetedArtifactSelectors_", - "type": "tuple[]", - "internalType": "struct StdInvariant.FuzzSelector[]", - "components": [ - { "name": "addr", "type": "address", "internalType": "address" }, - { - "name": "selectors", - "type": "bytes4[]", - "internalType": "bytes4[]" - } - ] - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "targetArtifacts", - "inputs": [], - "outputs": [ - { - "name": "targetedArtifacts_", - "type": "string[]", - "internalType": "string[]" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "targetContracts", - "inputs": [], - "outputs": [ - { - "name": "targetedContracts_", - "type": "address[]", - "internalType": "address[]" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "targetInterfaces", - "inputs": [], - "outputs": [ - { - "name": "targetedInterfaces_", - "type": "tuple[]", - "internalType": "struct StdInvariant.FuzzInterface[]", - "components": [ - { "name": "addr", "type": "address", "internalType": "address" }, - { - "name": "artifacts", - "type": "string[]", - "internalType": "string[]" - } - ] - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "targetSelectors", - "inputs": [], - "outputs": [ - { - "name": "targetedSelectors_", - "type": "tuple[]", - "internalType": "struct StdInvariant.FuzzSelector[]", - "components": [ - { "name": "addr", "type": "address", "internalType": "address" }, - { - "name": "selectors", - "type": "bytes4[]", - "internalType": "bytes4[]" - } - ] - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "targetSenders", - "inputs": [], - "outputs": [ - { - "name": "targetedSenders_", - "type": "address[]", - "internalType": "address[]" - } - ], - "stateMutability": "view" - } - ], - "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "methodIdentifiers": { - "excludeArtifacts()": "b5508aa9", - "excludeContracts()": "e20c9f71", - "excludeSenders()": "1ed7831c", - "targetArtifactSelectors()": "66d9a9a0", - "targetArtifacts()": "85226c81", - "targetContracts()": "3f7286f4", - "targetInterfaces()": "2ade3880", - "targetSelectors()": "916a17c6", - "targetSenders()": "3e5e3c23" - }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"excludeArtifacts\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"excludedArtifacts_\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeContracts\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"excludedContracts_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeSenders\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"excludedSenders_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetArtifactSelectors\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct StdInvariant.FuzzSelector[]\",\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetArtifacts\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"targetedArtifacts_\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetContracts\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"targetedContracts_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetInterfaces\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"string[]\",\"name\":\"artifacts\",\"type\":\"string[]\"}],\"internalType\":\"struct StdInvariant.FuzzInterface[]\",\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetSelectors\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct StdInvariant.FuzzSelector[]\",\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetSenders\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"targetedSenders_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdInvariant.sol\":\"StdInvariant\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdInvariant.sol\":{\"keccak256\":\"0x67299bfacd77fddfa2a67b8e2b901e0e333618a4975fb94850b07475e51f6de6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1b61121d310f4053ce344b345b4a9ccf43b059daf9097ec2647f594beaca896d\",\"dweb:/ipfs/QmZUCoTtXBM9zfAZVbj2dFPPnKaV1CSZzXE7zictyg3Gfz\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "excludeArtifacts", - "outputs": [ - { - "internalType": "string[]", - "name": "excludedArtifacts_", - "type": "string[]" - } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "excludeContracts", - "outputs": [ - { - "internalType": "address[]", - "name": "excludedContracts_", - "type": "address[]" - } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "excludeSenders", - "outputs": [ - { - "internalType": "address[]", - "name": "excludedSenders_", - "type": "address[]" - } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "targetArtifactSelectors", - "outputs": [ - { - "internalType": "struct StdInvariant.FuzzSelector[]", - "name": "targetedArtifactSelectors_", - "type": "tuple[]", - "components": [ - { - "internalType": "address", - "name": "addr", - "type": "address" - }, - { - "internalType": "bytes4[]", - "name": "selectors", - "type": "bytes4[]" - } - ] - } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "targetArtifacts", - "outputs": [ - { - "internalType": "string[]", - "name": "targetedArtifacts_", - "type": "string[]" - } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "targetContracts", - "outputs": [ - { - "internalType": "address[]", - "name": "targetedContracts_", - "type": "address[]" - } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "targetInterfaces", - "outputs": [ - { - "internalType": "struct StdInvariant.FuzzInterface[]", - "name": "targetedInterfaces_", - "type": "tuple[]", - "components": [ - { - "internalType": "address", - "name": "addr", - "type": "address" - }, - { - "internalType": "string[]", - "name": "artifacts", - "type": "string[]" - } - ] - } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "targetSelectors", - "outputs": [ - { - "internalType": "struct StdInvariant.FuzzSelector[]", - "name": "targetedSelectors_", - "type": "tuple[]", - "components": [ - { - "internalType": "address", - "name": "addr", - "type": "address" - }, - { - "internalType": "bytes4[]", - "name": "selectors", - "type": "bytes4[]" - } - ] - } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "targetSenders", - "outputs": [ - { - "internalType": "address[]", - "name": "targetedSenders_", - "type": "address[]" - } - ] - } - ], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdInvariant.sol": "StdInvariant" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdInvariant.sol": { - "keccak256": "0x67299bfacd77fddfa2a67b8e2b901e0e333618a4975fb94850b07475e51f6de6", - "urls": [ - "bzz-raw://1b61121d310f4053ce344b345b4a9ccf43b059daf9097ec2647f594beaca896d", - "dweb:/ipfs/QmZUCoTtXBM9zfAZVbj2dFPPnKaV1CSZzXE7zictyg3Gfz" - ], - "license": "MIT" - } - }, - "version": 1 - }, - "id": 91 -} diff --git a/examples/oft-movement/out/StdJson.sol/stdJson.json b/examples/oft-movement/out/StdJson.sol/stdJson.json deleted file mode 100644 index 1d76c2a83..000000000 --- a/examples/oft-movement/out/StdJson.sol/stdJson.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "abi": [], - "bytecode": { - "object": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212209c6e13a6f90c400a2b2ae81cb29c3e1af08787adc55697209fc2ff8b71410b6a64736f6c63430008160033", - "sourceMap": "830:5612:92:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;830:5612:92;;;;;;;;;;;;;;;;;", - "linkReferences": {} - }, - "deployedBytecode": { - "object": "0x73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212209c6e13a6f90c400a2b2ae81cb29c3e1af08787adc55697209fc2ff8b71410b6a64736f6c63430008160033", - "sourceMap": "830:5612:92:-:0;;;;;;;;", - "linkReferences": {} - }, - "methodIdentifiers": {}, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdJson.sol\":\"stdJson\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdJson.sol\":{\"keccak256\":\"0x8f914dbd016bd0e318fe2b8bd556fbc8256c7cddc24e3e4fcb9f3c1c1935592d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://19e704df493dde38323303b07d18cadfeb4dcadf1ddc2301add4aea9474fbb5e\",\"dweb:/ipfs/QmZasuGiLK8LHwWtvpqEBxUR6QFY6GdzLMTJ9q7CMf8PNZ\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Vm.sol\":{\"keccak256\":\"0x87ba9f3edc254e529db9e3129c954391adcc7fc8574203767979d8d2f1e724b9\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://4d16c08d80d9f2869deb6350642cf5af624d21fce6b3b023abbcdedc62e195fe\",\"dweb:/ipfs/QmURpnnFECPKt3i7P7jQRZpr4ZBXjRGcZ9KzcbKzsgYR2W\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdJson.sol": "stdJson" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdJson.sol": { - "keccak256": "0x8f914dbd016bd0e318fe2b8bd556fbc8256c7cddc24e3e4fcb9f3c1c1935592d", - "urls": [ - "bzz-raw://19e704df493dde38323303b07d18cadfeb4dcadf1ddc2301add4aea9474fbb5e", - "dweb:/ipfs/QmZasuGiLK8LHwWtvpqEBxUR6QFY6GdzLMTJ9q7CMf8PNZ" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Vm.sol": { - "keccak256": "0x87ba9f3edc254e529db9e3129c954391adcc7fc8574203767979d8d2f1e724b9", - "urls": [ - "bzz-raw://4d16c08d80d9f2869deb6350642cf5af624d21fce6b3b023abbcdedc62e195fe", - "dweb:/ipfs/QmURpnnFECPKt3i7P7jQRZpr4ZBXjRGcZ9KzcbKzsgYR2W" - ], - "license": "MIT OR Apache-2.0" - } - }, - "version": 1 - }, - "id": 92 -} diff --git a/examples/oft-movement/out/StdMath.sol/stdMath.json b/examples/oft-movement/out/StdMath.sol/stdMath.json deleted file mode 100644 index ecd01083d..000000000 --- a/examples/oft-movement/out/StdMath.sol/stdMath.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "abi": [], - "bytecode": { - "object": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220b54977757a63bed583bf905f5b15542c977e53b0f758cb125c6a09efbe38ee2d64736f6c63430008160033", - "sourceMap": "65:1294:93:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;65:1294:93;;;;;;;;;;;;;;;;;", - "linkReferences": {} - }, - "deployedBytecode": { - "object": "0x73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220b54977757a63bed583bf905f5b15542c977e53b0f758cb125c6a09efbe38ee2d64736f6c63430008160033", - "sourceMap": "65:1294:93:-:0;;;;;;;;", - "linkReferences": {} - }, - "methodIdentifiers": {}, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdMath.sol\":\"stdMath\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdMath.sol\":{\"keccak256\":\"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92\",\"dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdMath.sol": "stdMath" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdMath.sol": { - "keccak256": "0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2", - "urls": [ - "bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92", - "dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC" - ], - "license": "MIT" - } - }, - "version": 1 - }, - "id": 93 -} diff --git a/examples/oft-movement/out/StdStorage.sol/stdStorage.json b/examples/oft-movement/out/StdStorage.sol/stdStorage.json deleted file mode 100644 index 83a0622a8..000000000 --- a/examples/oft-movement/out/StdStorage.sol/stdStorage.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "abi": [], - "bytecode": { - "object": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220ec1561e45cd6ec7dd1ca99d653c69b842b3e8e2071405452deb927089bab096b64736f6c63430008160033", - "sourceMap": "8870:4920:94:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;8870:4920:94;;;;;;;;;;;;;;;;;", - "linkReferences": {} - }, - "deployedBytecode": { - "object": "0x73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220ec1561e45cd6ec7dd1ca99d653c69b842b3e8e2071405452deb927089bab096b64736f6c63430008160033", - "sourceMap": "8870:4920:94:-:0;;;;;;;;", - "linkReferences": {} - }, - "methodIdentifiers": {}, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdStorage.sol\":\"stdStorage\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdStorage.sol\":{\"keccak256\":\"0x4298f3f4cedaedb07029820b1daad2c03af45379559392201f7bf3ec71105811\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6e062f36d8d1ae3c383ef8975757926eaa9c4de3a92b5f1fe2d12748bcd8db32\",\"dweb:/ipfs/QmcWkv3ia5Ew4DZNcudMNSTNXZ3W2QiXTZunRd44e9BT8z\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Vm.sol\":{\"keccak256\":\"0x87ba9f3edc254e529db9e3129c954391adcc7fc8574203767979d8d2f1e724b9\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://4d16c08d80d9f2869deb6350642cf5af624d21fce6b3b023abbcdedc62e195fe\",\"dweb:/ipfs/QmURpnnFECPKt3i7P7jQRZpr4ZBXjRGcZ9KzcbKzsgYR2W\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdStorage.sol": "stdStorage" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdStorage.sol": { - "keccak256": "0x4298f3f4cedaedb07029820b1daad2c03af45379559392201f7bf3ec71105811", - "urls": [ - "bzz-raw://6e062f36d8d1ae3c383ef8975757926eaa9c4de3a92b5f1fe2d12748bcd8db32", - "dweb:/ipfs/QmcWkv3ia5Ew4DZNcudMNSTNXZ3W2QiXTZunRd44e9BT8z" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Vm.sol": { - "keccak256": "0x87ba9f3edc254e529db9e3129c954391adcc7fc8574203767979d8d2f1e724b9", - "urls": [ - "bzz-raw://4d16c08d80d9f2869deb6350642cf5af624d21fce6b3b023abbcdedc62e195fe", - "dweb:/ipfs/QmURpnnFECPKt3i7P7jQRZpr4ZBXjRGcZ9KzcbKzsgYR2W" - ], - "license": "MIT OR Apache-2.0" - } - }, - "version": 1 - }, - "id": 94 -} diff --git a/examples/oft-movement/out/StdStorage.sol/stdStorageSafe.json b/examples/oft-movement/out/StdStorage.sol/stdStorageSafe.json deleted file mode 100644 index f7f66ae47..000000000 --- a/examples/oft-movement/out/StdStorage.sol/stdStorageSafe.json +++ /dev/null @@ -1,164 +0,0 @@ -{ - "abi": [ - { - "type": "event", - "name": "SlotFound", - "inputs": [ - { - "name": "who", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "fsig", - "type": "bytes4", - "indexed": false, - "internalType": "bytes4" - }, - { - "name": "keysHash", - "type": "bytes32", - "indexed": false, - "internalType": "bytes32" - }, - { - "name": "slot", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "WARNING_UninitedSlot", - "inputs": [ - { - "name": "who", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "slot", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - } - ], - "bytecode": { - "object": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212207f764e45ecb293c888a575d2bc2634530324688ab6862883e3153c7dfb4a8ba164736f6c63430008160033", - "sourceMap": "368:8500:94:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;368:8500:94;;;;;;;;;;;;;;;;;", - "linkReferences": {} - }, - "deployedBytecode": { - "object": "0x73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212207f764e45ecb293c888a575d2bc2634530324688ab6862883e3153c7dfb4a8ba164736f6c63430008160033", - "sourceMap": "368:8500:94:-:0;;;;;;;;", - "linkReferences": {} - }, - "methodIdentifiers": {}, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"who\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes4\",\"name\":\"fsig\",\"type\":\"bytes4\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"keysHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"slot\",\"type\":\"uint256\"}],\"name\":\"SlotFound\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"who\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"slot\",\"type\":\"uint256\"}],\"name\":\"WARNING_UninitedSlot\",\"type\":\"event\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdStorage.sol\":\"stdStorageSafe\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdStorage.sol\":{\"keccak256\":\"0x4298f3f4cedaedb07029820b1daad2c03af45379559392201f7bf3ec71105811\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6e062f36d8d1ae3c383ef8975757926eaa9c4de3a92b5f1fe2d12748bcd8db32\",\"dweb:/ipfs/QmcWkv3ia5Ew4DZNcudMNSTNXZ3W2QiXTZunRd44e9BT8z\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Vm.sol\":{\"keccak256\":\"0x87ba9f3edc254e529db9e3129c954391adcc7fc8574203767979d8d2f1e724b9\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://4d16c08d80d9f2869deb6350642cf5af624d21fce6b3b023abbcdedc62e195fe\",\"dweb:/ipfs/QmURpnnFECPKt3i7P7jQRZpr4ZBXjRGcZ9KzcbKzsgYR2W\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "who", - "type": "address", - "indexed": false - }, - { - "internalType": "bytes4", - "name": "fsig", - "type": "bytes4", - "indexed": false - }, - { - "internalType": "bytes32", - "name": "keysHash", - "type": "bytes32", - "indexed": false - }, - { - "internalType": "uint256", - "name": "slot", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "SlotFound", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "who", - "type": "address", - "indexed": false - }, - { - "internalType": "uint256", - "name": "slot", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "WARNING_UninitedSlot", - "anonymous": false - } - ], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdStorage.sol": "stdStorageSafe" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdStorage.sol": { - "keccak256": "0x4298f3f4cedaedb07029820b1daad2c03af45379559392201f7bf3ec71105811", - "urls": [ - "bzz-raw://6e062f36d8d1ae3c383ef8975757926eaa9c4de3a92b5f1fe2d12748bcd8db32", - "dweb:/ipfs/QmcWkv3ia5Ew4DZNcudMNSTNXZ3W2QiXTZunRd44e9BT8z" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Vm.sol": { - "keccak256": "0x87ba9f3edc254e529db9e3129c954391adcc7fc8574203767979d8d2f1e724b9", - "urls": [ - "bzz-raw://4d16c08d80d9f2869deb6350642cf5af624d21fce6b3b023abbcdedc62e195fe", - "dweb:/ipfs/QmURpnnFECPKt3i7P7jQRZpr4ZBXjRGcZ9KzcbKzsgYR2W" - ], - "license": "MIT OR Apache-2.0" - } - }, - "version": 1 - }, - "id": 94 -} diff --git a/examples/oft-movement/out/StdStyle.sol/StdStyle.json b/examples/oft-movement/out/StdStyle.sol/StdStyle.json deleted file mode 100644 index 44c88e9fb..000000000 --- a/examples/oft-movement/out/StdStyle.sol/StdStyle.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "abi": [], - "bytecode": { - "object": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122003693fb684ee8d5c80833ef46380757d912cd8cf2100ed3c5b71bbe680d4f2fa64736f6c63430008160033", - "sourceMap": "100:10361:95:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;100:10361:95;;;;;;;;;;;;;;;;;", - "linkReferences": {} - }, - "deployedBytecode": { - "object": "0x73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122003693fb684ee8d5c80833ef46380757d912cd8cf2100ed3c5b71bbe680d4f2fa64736f6c63430008160033", - "sourceMap": "100:10361:95:-:0;;;;;;;;", - "linkReferences": {} - }, - "methodIdentifiers": {}, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdStyle.sol\":\"StdStyle\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdStyle.sol\":{\"keccak256\":\"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8\",\"dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Vm.sol\":{\"keccak256\":\"0x87ba9f3edc254e529db9e3129c954391adcc7fc8574203767979d8d2f1e724b9\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://4d16c08d80d9f2869deb6350642cf5af624d21fce6b3b023abbcdedc62e195fe\",\"dweb:/ipfs/QmURpnnFECPKt3i7P7jQRZpr4ZBXjRGcZ9KzcbKzsgYR2W\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdStyle.sol": "StdStyle" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdStyle.sol": { - "keccak256": "0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d", - "urls": [ - "bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8", - "dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Vm.sol": { - "keccak256": "0x87ba9f3edc254e529db9e3129c954391adcc7fc8574203767979d8d2f1e724b9", - "urls": [ - "bzz-raw://4d16c08d80d9f2869deb6350642cf5af624d21fce6b3b023abbcdedc62e195fe", - "dweb:/ipfs/QmURpnnFECPKt3i7P7jQRZpr4ZBXjRGcZ9KzcbKzsgYR2W" - ], - "license": "MIT OR Apache-2.0" - } - }, - "version": 1 - }, - "id": 95 -} diff --git a/examples/oft-movement/out/StdUtils.sol/StdUtils.json b/examples/oft-movement/out/StdUtils.sol/StdUtils.json deleted file mode 100644 index 5318f7b18..000000000 --- a/examples/oft-movement/out/StdUtils.sol/StdUtils.json +++ /dev/null @@ -1,78 +0,0 @@ -{ - "abi": [], - "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "methodIdentifiers": {}, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdUtils.sol\":\"StdUtils\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdUtils.sol\":{\"keccak256\":\"0x502b18a4becda6ecd91fa8b419d8034946bfa80e6cc7f6497f51f8565bfadae0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bf499ee483a1dfd02023d4ce78ed4029a49794ccd5b849aaab912faea0d2ba61\",\"dweb:/ipfs/QmP6hwNZW7sYbQK9fBzuZWxfLm6Swx2nKzvZ54qWNqQkzX\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Vm.sol\":{\"keccak256\":\"0x87ba9f3edc254e529db9e3129c954391adcc7fc8574203767979d8d2f1e724b9\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://4d16c08d80d9f2869deb6350642cf5af624d21fce6b3b023abbcdedc62e195fe\",\"dweb:/ipfs/QmURpnnFECPKt3i7P7jQRZpr4ZBXjRGcZ9KzcbKzsgYR2W\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/interfaces/IMulticall3.sol\":{\"keccak256\":\"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0\",\"dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/mocks/MockERC20.sol\":{\"keccak256\":\"0xd8703f49411737ecf8d411f8fa66b2bf0ef972ba28b7a4adf1748c63df1bf682\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7c10a6b8112f6fe3cdccb6240ecd382765216b1a82e9a86a0fec8f5e09eadd1\",\"dweb:/ipfs/QmdRvPCU4RkjMHsTu3Ric1ZEF1AWDNLp78unFC5aWP17xq\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/mocks/MockERC721.sol\":{\"keccak256\":\"0xa24468244abb66e663fb7eee6463cb518eb9a7c14e1071548ff564cca825bbca\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://145585a2194aa6e2d30edfe709ef2814e20b1b4540469aa6a8f50c841fcb9070\",\"dweb:/ipfs/QmZrwbvtpbtTxqbW5phUrwb3F1tBiPSQc6jZJAXBfsBsAh\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdUtils.sol": "StdUtils" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdUtils.sol": { - "keccak256": "0x502b18a4becda6ecd91fa8b419d8034946bfa80e6cc7f6497f51f8565bfadae0", - "urls": [ - "bzz-raw://bf499ee483a1dfd02023d4ce78ed4029a49794ccd5b849aaab912faea0d2ba61", - "dweb:/ipfs/QmP6hwNZW7sYbQK9fBzuZWxfLm6Swx2nKzvZ54qWNqQkzX" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Vm.sol": { - "keccak256": "0x87ba9f3edc254e529db9e3129c954391adcc7fc8574203767979d8d2f1e724b9", - "urls": [ - "bzz-raw://4d16c08d80d9f2869deb6350642cf5af624d21fce6b3b023abbcdedc62e195fe", - "dweb:/ipfs/QmURpnnFECPKt3i7P7jQRZpr4ZBXjRGcZ9KzcbKzsgYR2W" - ], - "license": "MIT OR Apache-2.0" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/interfaces/IMulticall3.sol": { - "keccak256": "0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a", - "urls": [ - "bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0", - "dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/mocks/MockERC20.sol": { - "keccak256": "0xd8703f49411737ecf8d411f8fa66b2bf0ef972ba28b7a4adf1748c63df1bf682", - "urls": [ - "bzz-raw://b7c10a6b8112f6fe3cdccb6240ecd382765216b1a82e9a86a0fec8f5e09eadd1", - "dweb:/ipfs/QmdRvPCU4RkjMHsTu3Ric1ZEF1AWDNLp78unFC5aWP17xq" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/mocks/MockERC721.sol": { - "keccak256": "0xa24468244abb66e663fb7eee6463cb518eb9a7c14e1071548ff564cca825bbca", - "urls": [ - "bzz-raw://145585a2194aa6e2d30edfe709ef2814e20b1b4540469aa6a8f50c841fcb9070", - "dweb:/ipfs/QmZrwbvtpbtTxqbW5phUrwb3F1tBiPSQc6jZJAXBfsBsAh" - ], - "license": "MIT" - } - }, - "version": 1 - }, - "id": 96 -} diff --git a/examples/oft-movement/out/SupportedCmdTypes.sol/SupportedCmdTypesLib.json b/examples/oft-movement/out/SupportedCmdTypes.sol/SupportedCmdTypesLib.json deleted file mode 100644 index 6b545e4ad..000000000 --- a/examples/oft-movement/out/SupportedCmdTypes.sol/SupportedCmdTypesLib.json +++ /dev/null @@ -1,64 +0,0 @@ -{ - "abi": [{ "type": "error", "name": "UnsupportedTargetEid", "inputs": [] }], - "bytecode": { - "object": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212208db10195099bca3c1ca814323d30268e601a65f7ae4177824177b3982cd539fc64736f6c63430008160033", - "sourceMap": "311:804:23:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;311:804:23;;;;;;;;;;;;;;;;;", - "linkReferences": {} - }, - "deployedBytecode": { - "object": "0x73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212208db10195099bca3c1ca814323d30268e601a65f7ae4177824177b3982cd539fc64736f6c63430008160033", - "sourceMap": "311:804:23:-:0;;;;;;;;", - "linkReferences": {} - }, - "methodIdentifiers": {}, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"UnsupportedTargetEid\",\"type\":\"error\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/SupportedCmdTypes.sol\":\"SupportedCmdTypesLib\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/SupportedCmdTypes.sol\":{\"keccak256\":\"0x6b2534522c163714e499041ecd06aaeb93857373cef82cf2752f162bb7c69f9a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bf6c3545c3b9505692dbfaa29b40cab5ed9dc9b65e5804b6f47b5a76596120e9\",\"dweb:/ipfs/QmNs98oRaMvpYhLCQ5yU256eYNEopFTrLRjjwm3gL4foQ3\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/BitMaps.sol\":{\"keccak256\":\"0xaad3c72ef43480d2253fd48b394e8fb7286d009991d2bc4e61be58ce48ac5ee9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b8c02b14f954416ba2148b389c87da8378ac8dd16ba3d458cbbfba8b0fd8639f\",\"dweb:/ipfs/Qmd2EEQhYL2VmgJi1V4uiHM2WcYxF9iBtxSgcFkbS21rQD\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { "inputs": [], "type": "error", "name": "UnsupportedTargetEid" } - ], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/SupportedCmdTypes.sol": "SupportedCmdTypesLib" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/SupportedCmdTypes.sol": { - "keccak256": "0x6b2534522c163714e499041ecd06aaeb93857373cef82cf2752f162bb7c69f9a", - "urls": [ - "bzz-raw://bf6c3545c3b9505692dbfaa29b40cab5ed9dc9b65e5804b6f47b5a76596120e9", - "dweb:/ipfs/QmNs98oRaMvpYhLCQ5yU256eYNEopFTrLRjjwm3gL4foQ3" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/BitMaps.sol": { - "keccak256": "0xaad3c72ef43480d2253fd48b394e8fb7286d009991d2bc4e61be58ce48ac5ee9", - "urls": [ - "bzz-raw://b8c02b14f954416ba2148b389c87da8378ac8dd16ba3d458cbbfba8b0fd8639f", - "dweb:/ipfs/Qmd2EEQhYL2VmgJi1V4uiHM2WcYxF9iBtxSgcFkbS21rQD" - ], - "license": "MIT" - } - }, - "version": 1 - }, - "id": 23 -} diff --git a/examples/oft-movement/out/Test.sol/Test.json b/examples/oft-movement/out/Test.sol/Test.json deleted file mode 100644 index 6747ae602..000000000 --- a/examples/oft-movement/out/Test.sol/Test.json +++ /dev/null @@ -1,1262 +0,0 @@ -{ - "abi": [ - { - "type": "function", - "name": "IS_TEST", - "inputs": [], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "excludeArtifacts", - "inputs": [], - "outputs": [ - { - "name": "excludedArtifacts_", - "type": "string[]", - "internalType": "string[]" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "excludeContracts", - "inputs": [], - "outputs": [ - { - "name": "excludedContracts_", - "type": "address[]", - "internalType": "address[]" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "excludeSenders", - "inputs": [], - "outputs": [ - { - "name": "excludedSenders_", - "type": "address[]", - "internalType": "address[]" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "failed", - "inputs": [], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "targetArtifactSelectors", - "inputs": [], - "outputs": [ - { - "name": "targetedArtifactSelectors_", - "type": "tuple[]", - "internalType": "struct StdInvariant.FuzzSelector[]", - "components": [ - { "name": "addr", "type": "address", "internalType": "address" }, - { - "name": "selectors", - "type": "bytes4[]", - "internalType": "bytes4[]" - } - ] - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "targetArtifacts", - "inputs": [], - "outputs": [ - { - "name": "targetedArtifacts_", - "type": "string[]", - "internalType": "string[]" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "targetContracts", - "inputs": [], - "outputs": [ - { - "name": "targetedContracts_", - "type": "address[]", - "internalType": "address[]" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "targetInterfaces", - "inputs": [], - "outputs": [ - { - "name": "targetedInterfaces_", - "type": "tuple[]", - "internalType": "struct StdInvariant.FuzzInterface[]", - "components": [ - { "name": "addr", "type": "address", "internalType": "address" }, - { - "name": "artifacts", - "type": "string[]", - "internalType": "string[]" - } - ] - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "targetSelectors", - "inputs": [], - "outputs": [ - { - "name": "targetedSelectors_", - "type": "tuple[]", - "internalType": "struct StdInvariant.FuzzSelector[]", - "components": [ - { "name": "addr", "type": "address", "internalType": "address" }, - { - "name": "selectors", - "type": "bytes4[]", - "internalType": "bytes4[]" - } - ] - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "targetSenders", - "inputs": [], - "outputs": [ - { - "name": "targetedSenders_", - "type": "address[]", - "internalType": "address[]" - } - ], - "stateMutability": "view" - }, - { - "type": "event", - "name": "log", - "inputs": [ - { - "name": "", - "type": "string", - "indexed": false, - "internalType": "string" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "log_address", - "inputs": [ - { - "name": "", - "type": "address", - "indexed": false, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "log_array", - "inputs": [ - { - "name": "val", - "type": "uint256[]", - "indexed": false, - "internalType": "uint256[]" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "log_array", - "inputs": [ - { - "name": "val", - "type": "int256[]", - "indexed": false, - "internalType": "int256[]" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "log_array", - "inputs": [ - { - "name": "val", - "type": "address[]", - "indexed": false, - "internalType": "address[]" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "log_bytes", - "inputs": [ - { - "name": "", - "type": "bytes", - "indexed": false, - "internalType": "bytes" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "log_bytes32", - "inputs": [ - { - "name": "", - "type": "bytes32", - "indexed": false, - "internalType": "bytes32" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "log_int", - "inputs": [ - { - "name": "", - "type": "int256", - "indexed": false, - "internalType": "int256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "log_named_address", - "inputs": [ - { - "name": "key", - "type": "string", - "indexed": false, - "internalType": "string" - }, - { - "name": "val", - "type": "address", - "indexed": false, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "log_named_array", - "inputs": [ - { - "name": "key", - "type": "string", - "indexed": false, - "internalType": "string" - }, - { - "name": "val", - "type": "uint256[]", - "indexed": false, - "internalType": "uint256[]" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "log_named_array", - "inputs": [ - { - "name": "key", - "type": "string", - "indexed": false, - "internalType": "string" - }, - { - "name": "val", - "type": "int256[]", - "indexed": false, - "internalType": "int256[]" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "log_named_array", - "inputs": [ - { - "name": "key", - "type": "string", - "indexed": false, - "internalType": "string" - }, - { - "name": "val", - "type": "address[]", - "indexed": false, - "internalType": "address[]" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "log_named_bytes", - "inputs": [ - { - "name": "key", - "type": "string", - "indexed": false, - "internalType": "string" - }, - { - "name": "val", - "type": "bytes", - "indexed": false, - "internalType": "bytes" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "log_named_bytes32", - "inputs": [ - { - "name": "key", - "type": "string", - "indexed": false, - "internalType": "string" - }, - { - "name": "val", - "type": "bytes32", - "indexed": false, - "internalType": "bytes32" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "log_named_decimal_int", - "inputs": [ - { - "name": "key", - "type": "string", - "indexed": false, - "internalType": "string" - }, - { - "name": "val", - "type": "int256", - "indexed": false, - "internalType": "int256" - }, - { - "name": "decimals", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "log_named_decimal_uint", - "inputs": [ - { - "name": "key", - "type": "string", - "indexed": false, - "internalType": "string" - }, - { - "name": "val", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - }, - { - "name": "decimals", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "log_named_int", - "inputs": [ - { - "name": "key", - "type": "string", - "indexed": false, - "internalType": "string" - }, - { - "name": "val", - "type": "int256", - "indexed": false, - "internalType": "int256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "log_named_string", - "inputs": [ - { - "name": "key", - "type": "string", - "indexed": false, - "internalType": "string" - }, - { - "name": "val", - "type": "string", - "indexed": false, - "internalType": "string" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "log_named_uint", - "inputs": [ - { - "name": "key", - "type": "string", - "indexed": false, - "internalType": "string" - }, - { - "name": "val", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "log_string", - "inputs": [ - { - "name": "", - "type": "string", - "indexed": false, - "internalType": "string" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "log_uint", - "inputs": [ - { - "name": "", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "logs", - "inputs": [ - { - "name": "", - "type": "bytes", - "indexed": false, - "internalType": "bytes" - } - ], - "anonymous": false - } - ], - "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "methodIdentifiers": { - "IS_TEST()": "fa7626d4", - "excludeArtifacts()": "b5508aa9", - "excludeContracts()": "e20c9f71", - "excludeSenders()": "1ed7831c", - "failed()": "ba414fa6", - "targetArtifactSelectors()": "66d9a9a0", - "targetArtifacts()": "85226c81", - "targetContracts()": "3f7286f4", - "targetInterfaces()": "2ade3880", - "targetSelectors()": "916a17c6", - "targetSenders()": "3e5e3c23" - }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"name\":\"log\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"log_address\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"val\",\"type\":\"uint256[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"int256[]\",\"name\":\"val\",\"type\":\"int256[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"val\",\"type\":\"address[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"log_bytes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"log_bytes32\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"name\":\"log_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"val\",\"type\":\"address\"}],\"name\":\"log_named_address\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"val\",\"type\":\"uint256[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256[]\",\"name\":\"val\",\"type\":\"int256[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"val\",\"type\":\"address[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"val\",\"type\":\"bytes\"}],\"name\":\"log_named_bytes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"val\",\"type\":\"bytes32\"}],\"name\":\"log_named_bytes32\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"val\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"log_named_decimal_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"val\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"log_named_decimal_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"val\",\"type\":\"int256\"}],\"name\":\"log_named_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"val\",\"type\":\"string\"}],\"name\":\"log_named_string\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"val\",\"type\":\"uint256\"}],\"name\":\"log_named_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"name\":\"log_string\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"log_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"logs\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"IS_TEST\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeArtifacts\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"excludedArtifacts_\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeContracts\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"excludedContracts_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeSenders\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"excludedSenders_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"failed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetArtifactSelectors\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct StdInvariant.FuzzSelector[]\",\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetArtifacts\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"targetedArtifacts_\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetContracts\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"targetedContracts_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetInterfaces\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"string[]\",\"name\":\"artifacts\",\"type\":\"string[]\"}],\"internalType\":\"struct StdInvariant.FuzzInterface[]\",\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetSelectors\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct StdInvariant.FuzzSelector[]\",\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetSenders\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"targetedSenders_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Test.sol\":\"Test\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/test.sol\":{\"keccak256\":\"0x8758531bbac3972efcf1fa46383dbe1d276406fe527bc7abb2f236486278e83b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://1f64264d61506847acf8761e84aff690cebe830958eac00bac7924d8be569240\",\"dweb:/ipfs/QmSekDJvJ82MZAmr63n7YvfLzQ7gS4NLSHPmHL3GN3rw8k\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Base.sol\":{\"keccak256\":\"0x4ff1a785311017d1eedb1b4737956fa383067ad34eb439abfec1d989754dde1c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f553622969b9fdb930246704a4c10dfaee6b1a4468c142fa7eb9dc292a438224\",\"dweb:/ipfs/QmcxqHnqdQsMVtgsfH9VNLmZ3g7GhgNagfq7yvNCDcCHFK\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdAssertions.sol\":{\"keccak256\":\"0x1a0dee4d8b2c81e9318e87dd85ef009467ebf7dba6575530d1fce94d34dbae60\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ddd790c86ddde1013d1f7a552a80168eacf2e9244077f96799180644ad523a5b\",\"dweb:/ipfs/QmYinBFt9uEVFXP9ytT9CDoNpzWieQVgLWRFRNiypMzJaL\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdChains.sol\":{\"keccak256\":\"0x598b85609125830885b8fb54a18f447d04f8dd799aca3de81baef35eb6b783c0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c9c128aae4f5668d8c8f71e9e6d9379d8451b8713d139cb66a02d23bc1c75f69\",\"dweb:/ipfs/QmVRihXHWi2yg9CcAhzKf63Y7m6gWz4P1giGMhXUHT3DFu\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdCheats.sol\":{\"keccak256\":\"0xb72f3519e0bf7d31df5d68557525f4fc55d861c3fb3b0f7793144ef7c94cbeb7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f3456d0f78e6f61203fa7871ba2df0d35925f10db3baee14be623ce2a35b84e2\",\"dweb:/ipfs/QmWE6QQSBvJifHMraisBTrf1x4WCwrDoTPLX8UKajTiApc\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdError.sol\":{\"keccak256\":\"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6\",\"dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdInvariant.sol\":{\"keccak256\":\"0x67299bfacd77fddfa2a67b8e2b901e0e333618a4975fb94850b07475e51f6de6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1b61121d310f4053ce344b345b4a9ccf43b059daf9097ec2647f594beaca896d\",\"dweb:/ipfs/QmZUCoTtXBM9zfAZVbj2dFPPnKaV1CSZzXE7zictyg3Gfz\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdJson.sol\":{\"keccak256\":\"0x8f914dbd016bd0e318fe2b8bd556fbc8256c7cddc24e3e4fcb9f3c1c1935592d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://19e704df493dde38323303b07d18cadfeb4dcadf1ddc2301add4aea9474fbb5e\",\"dweb:/ipfs/QmZasuGiLK8LHwWtvpqEBxUR6QFY6GdzLMTJ9q7CMf8PNZ\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdMath.sol\":{\"keccak256\":\"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92\",\"dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdStorage.sol\":{\"keccak256\":\"0x4298f3f4cedaedb07029820b1daad2c03af45379559392201f7bf3ec71105811\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6e062f36d8d1ae3c383ef8975757926eaa9c4de3a92b5f1fe2d12748bcd8db32\",\"dweb:/ipfs/QmcWkv3ia5Ew4DZNcudMNSTNXZ3W2QiXTZunRd44e9BT8z\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdStyle.sol\":{\"keccak256\":\"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8\",\"dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdUtils.sol\":{\"keccak256\":\"0x502b18a4becda6ecd91fa8b419d8034946bfa80e6cc7f6497f51f8565bfadae0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bf499ee483a1dfd02023d4ce78ed4029a49794ccd5b849aaab912faea0d2ba61\",\"dweb:/ipfs/QmP6hwNZW7sYbQK9fBzuZWxfLm6Swx2nKzvZ54qWNqQkzX\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Test.sol\":{\"keccak256\":\"0x39b1729d5868c8e94ab8af16751eb500a17fe3870dc627d2b7ddcd5df18d7ad0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1568c82aff125cc4b0fc168be9d67ac313f469a3c7405c5493caecaaaecfb765\",\"dweb:/ipfs/QmXByuZReJsdu1jDcxj1FcmpcUnzoBcqybn9kWgDAECWri\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Vm.sol\":{\"keccak256\":\"0x87ba9f3edc254e529db9e3129c954391adcc7fc8574203767979d8d2f1e724b9\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://4d16c08d80d9f2869deb6350642cf5af624d21fce6b3b023abbcdedc62e195fe\",\"dweb:/ipfs/QmURpnnFECPKt3i7P7jQRZpr4ZBXjRGcZ9KzcbKzsgYR2W\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/console.sol\":{\"keccak256\":\"0x91d5413c2434ca58fd278b6e1e79fd98d10c83931cc2596a6038eee4daeb34ba\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://91ccea707361e48b9b7a161fe81f496b9932bc471e9c4e4e1e9c283f2453cc70\",\"dweb:/ipfs/QmcB66sZhQ6Kz7MUHcLE78YXRUZxoZnnxZjN6yATsbB2ec\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/console2.sol\":{\"keccak256\":\"0x954646445d1014c3cd85c7918f5e7adeeca5ee44b68c00bafa237e597a4e35ea\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://516fa3be52da4763147175bfba4be0aa011fadbb0c1afb01f97265bd4cee7973\",\"dweb:/ipfs/QmdixAyMJefx7qePChgdxcBH5MxhmN7vsqPuPLx3CgrVmF\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/interfaces/IMulticall3.sol\":{\"keccak256\":\"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0\",\"dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/mocks/MockERC20.sol\":{\"keccak256\":\"0xd8703f49411737ecf8d411f8fa66b2bf0ef972ba28b7a4adf1748c63df1bf682\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7c10a6b8112f6fe3cdccb6240ecd382765216b1a82e9a86a0fec8f5e09eadd1\",\"dweb:/ipfs/QmdRvPCU4RkjMHsTu3Ric1ZEF1AWDNLp78unFC5aWP17xq\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/mocks/MockERC721.sol\":{\"keccak256\":\"0xa24468244abb66e663fb7eee6463cb518eb9a7c14e1071548ff564cca825bbca\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://145585a2194aa6e2d30edfe709ef2814e20b1b4540469aa6a8f50c841fcb9070\",\"dweb:/ipfs/QmZrwbvtpbtTxqbW5phUrwb3F1tBiPSQc6jZJAXBfsBsAh\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/safeconsole.sol\":{\"keccak256\":\"0xbaf41fdc6c54297e7cd8250e48b0f20eaac918e342a1028cef3f9a52ac086381\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a500ad81dea226f9910e6b50f99a9ff930105e393a692cbfb2185e4cdb4424ae\",\"dweb:/ipfs/QmVbUQpXNMmMWRiy4FvBNczzq46BMGfUoBikvSHNiCxVTq\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { - "inputs": [ - { - "internalType": "string", - "name": "", - "type": "string", - "indexed": false - } - ], - "type": "event", - "name": "log", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address", - "indexed": false - } - ], - "type": "event", - "name": "log_address", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "uint256[]", - "name": "val", - "type": "uint256[]", - "indexed": false - } - ], - "type": "event", - "name": "log_array", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "int256[]", - "name": "val", - "type": "int256[]", - "indexed": false - } - ], - "type": "event", - "name": "log_array", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "val", - "type": "address[]", - "indexed": false - } - ], - "type": "event", - "name": "log_array", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes", - "indexed": false - } - ], - "type": "event", - "name": "log_bytes", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32", - "indexed": false - } - ], - "type": "event", - "name": "log_bytes32", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "int256", - "name": "", - "type": "int256", - "indexed": false - } - ], - "type": "event", - "name": "log_int", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "string", - "name": "key", - "type": "string", - "indexed": false - }, - { - "internalType": "address", - "name": "val", - "type": "address", - "indexed": false - } - ], - "type": "event", - "name": "log_named_address", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "string", - "name": "key", - "type": "string", - "indexed": false - }, - { - "internalType": "uint256[]", - "name": "val", - "type": "uint256[]", - "indexed": false - } - ], - "type": "event", - "name": "log_named_array", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "string", - "name": "key", - "type": "string", - "indexed": false - }, - { - "internalType": "int256[]", - "name": "val", - "type": "int256[]", - "indexed": false - } - ], - "type": "event", - "name": "log_named_array", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "string", - "name": "key", - "type": "string", - "indexed": false - }, - { - "internalType": "address[]", - "name": "val", - "type": "address[]", - "indexed": false - } - ], - "type": "event", - "name": "log_named_array", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "string", - "name": "key", - "type": "string", - "indexed": false - }, - { - "internalType": "bytes", - "name": "val", - "type": "bytes", - "indexed": false - } - ], - "type": "event", - "name": "log_named_bytes", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "string", - "name": "key", - "type": "string", - "indexed": false - }, - { - "internalType": "bytes32", - "name": "val", - "type": "bytes32", - "indexed": false - } - ], - "type": "event", - "name": "log_named_bytes32", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "string", - "name": "key", - "type": "string", - "indexed": false - }, - { - "internalType": "int256", - "name": "val", - "type": "int256", - "indexed": false - }, - { - "internalType": "uint256", - "name": "decimals", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "log_named_decimal_int", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "string", - "name": "key", - "type": "string", - "indexed": false - }, - { - "internalType": "uint256", - "name": "val", - "type": "uint256", - "indexed": false - }, - { - "internalType": "uint256", - "name": "decimals", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "log_named_decimal_uint", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "string", - "name": "key", - "type": "string", - "indexed": false - }, - { - "internalType": "int256", - "name": "val", - "type": "int256", - "indexed": false - } - ], - "type": "event", - "name": "log_named_int", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "string", - "name": "key", - "type": "string", - "indexed": false - }, - { - "internalType": "string", - "name": "val", - "type": "string", - "indexed": false - } - ], - "type": "event", - "name": "log_named_string", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "string", - "name": "key", - "type": "string", - "indexed": false - }, - { - "internalType": "uint256", - "name": "val", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "log_named_uint", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "string", - "name": "", - "type": "string", - "indexed": false - } - ], - "type": "event", - "name": "log_string", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "log_uint", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes", - "indexed": false - } - ], - "type": "event", - "name": "logs", - "anonymous": false - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "IS_TEST", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "excludeArtifacts", - "outputs": [ - { - "internalType": "string[]", - "name": "excludedArtifacts_", - "type": "string[]" - } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "excludeContracts", - "outputs": [ - { - "internalType": "address[]", - "name": "excludedContracts_", - "type": "address[]" - } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "excludeSenders", - "outputs": [ - { - "internalType": "address[]", - "name": "excludedSenders_", - "type": "address[]" - } - ] - }, - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "function", - "name": "failed", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "targetArtifactSelectors", - "outputs": [ - { - "internalType": "struct StdInvariant.FuzzSelector[]", - "name": "targetedArtifactSelectors_", - "type": "tuple[]", - "components": [ - { - "internalType": "address", - "name": "addr", - "type": "address" - }, - { - "internalType": "bytes4[]", - "name": "selectors", - "type": "bytes4[]" - } - ] - } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "targetArtifacts", - "outputs": [ - { - "internalType": "string[]", - "name": "targetedArtifacts_", - "type": "string[]" - } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "targetContracts", - "outputs": [ - { - "internalType": "address[]", - "name": "targetedContracts_", - "type": "address[]" - } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "targetInterfaces", - "outputs": [ - { - "internalType": "struct StdInvariant.FuzzInterface[]", - "name": "targetedInterfaces_", - "type": "tuple[]", - "components": [ - { - "internalType": "address", - "name": "addr", - "type": "address" - }, - { - "internalType": "string[]", - "name": "artifacts", - "type": "string[]" - } - ] - } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "targetSelectors", - "outputs": [ - { - "internalType": "struct StdInvariant.FuzzSelector[]", - "name": "targetedSelectors_", - "type": "tuple[]", - "components": [ - { - "internalType": "address", - "name": "addr", - "type": "address" - }, - { - "internalType": "bytes4[]", - "name": "selectors", - "type": "bytes4[]" - } - ] - } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "targetSenders", - "outputs": [ - { - "internalType": "address[]", - "name": "targetedSenders_", - "type": "address[]" - } - ] - } - ], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Test.sol": "Test" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/test.sol": { - "keccak256": "0x8758531bbac3972efcf1fa46383dbe1d276406fe527bc7abb2f236486278e83b", - "urls": [ - "bzz-raw://1f64264d61506847acf8761e84aff690cebe830958eac00bac7924d8be569240", - "dweb:/ipfs/QmSekDJvJ82MZAmr63n7YvfLzQ7gS4NLSHPmHL3GN3rw8k" - ], - "license": "GPL-3.0-or-later" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Base.sol": { - "keccak256": "0x4ff1a785311017d1eedb1b4737956fa383067ad34eb439abfec1d989754dde1c", - "urls": [ - "bzz-raw://f553622969b9fdb930246704a4c10dfaee6b1a4468c142fa7eb9dc292a438224", - "dweb:/ipfs/QmcxqHnqdQsMVtgsfH9VNLmZ3g7GhgNagfq7yvNCDcCHFK" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdAssertions.sol": { - "keccak256": "0x1a0dee4d8b2c81e9318e87dd85ef009467ebf7dba6575530d1fce94d34dbae60", - "urls": [ - "bzz-raw://ddd790c86ddde1013d1f7a552a80168eacf2e9244077f96799180644ad523a5b", - "dweb:/ipfs/QmYinBFt9uEVFXP9ytT9CDoNpzWieQVgLWRFRNiypMzJaL" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdChains.sol": { - "keccak256": "0x598b85609125830885b8fb54a18f447d04f8dd799aca3de81baef35eb6b783c0", - "urls": [ - "bzz-raw://c9c128aae4f5668d8c8f71e9e6d9379d8451b8713d139cb66a02d23bc1c75f69", - "dweb:/ipfs/QmVRihXHWi2yg9CcAhzKf63Y7m6gWz4P1giGMhXUHT3DFu" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdCheats.sol": { - "keccak256": "0xb72f3519e0bf7d31df5d68557525f4fc55d861c3fb3b0f7793144ef7c94cbeb7", - "urls": [ - "bzz-raw://f3456d0f78e6f61203fa7871ba2df0d35925f10db3baee14be623ce2a35b84e2", - "dweb:/ipfs/QmWE6QQSBvJifHMraisBTrf1x4WCwrDoTPLX8UKajTiApc" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdError.sol": { - "keccak256": "0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77", - "urls": [ - "bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6", - "dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdInvariant.sol": { - "keccak256": "0x67299bfacd77fddfa2a67b8e2b901e0e333618a4975fb94850b07475e51f6de6", - "urls": [ - "bzz-raw://1b61121d310f4053ce344b345b4a9ccf43b059daf9097ec2647f594beaca896d", - "dweb:/ipfs/QmZUCoTtXBM9zfAZVbj2dFPPnKaV1CSZzXE7zictyg3Gfz" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdJson.sol": { - "keccak256": "0x8f914dbd016bd0e318fe2b8bd556fbc8256c7cddc24e3e4fcb9f3c1c1935592d", - "urls": [ - "bzz-raw://19e704df493dde38323303b07d18cadfeb4dcadf1ddc2301add4aea9474fbb5e", - "dweb:/ipfs/QmZasuGiLK8LHwWtvpqEBxUR6QFY6GdzLMTJ9q7CMf8PNZ" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdMath.sol": { - "keccak256": "0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2", - "urls": [ - "bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92", - "dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdStorage.sol": { - "keccak256": "0x4298f3f4cedaedb07029820b1daad2c03af45379559392201f7bf3ec71105811", - "urls": [ - "bzz-raw://6e062f36d8d1ae3c383ef8975757926eaa9c4de3a92b5f1fe2d12748bcd8db32", - "dweb:/ipfs/QmcWkv3ia5Ew4DZNcudMNSTNXZ3W2QiXTZunRd44e9BT8z" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdStyle.sol": { - "keccak256": "0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d", - "urls": [ - "bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8", - "dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdUtils.sol": { - "keccak256": "0x502b18a4becda6ecd91fa8b419d8034946bfa80e6cc7f6497f51f8565bfadae0", - "urls": [ - "bzz-raw://bf499ee483a1dfd02023d4ce78ed4029a49794ccd5b849aaab912faea0d2ba61", - "dweb:/ipfs/QmP6hwNZW7sYbQK9fBzuZWxfLm6Swx2nKzvZ54qWNqQkzX" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Test.sol": { - "keccak256": "0x39b1729d5868c8e94ab8af16751eb500a17fe3870dc627d2b7ddcd5df18d7ad0", - "urls": [ - "bzz-raw://1568c82aff125cc4b0fc168be9d67ac313f469a3c7405c5493caecaaaecfb765", - "dweb:/ipfs/QmXByuZReJsdu1jDcxj1FcmpcUnzoBcqybn9kWgDAECWri" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Vm.sol": { - "keccak256": "0x87ba9f3edc254e529db9e3129c954391adcc7fc8574203767979d8d2f1e724b9", - "urls": [ - "bzz-raw://4d16c08d80d9f2869deb6350642cf5af624d21fce6b3b023abbcdedc62e195fe", - "dweb:/ipfs/QmURpnnFECPKt3i7P7jQRZpr4ZBXjRGcZ9KzcbKzsgYR2W" - ], - "license": "MIT OR Apache-2.0" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/console.sol": { - "keccak256": "0x91d5413c2434ca58fd278b6e1e79fd98d10c83931cc2596a6038eee4daeb34ba", - "urls": [ - "bzz-raw://91ccea707361e48b9b7a161fe81f496b9932bc471e9c4e4e1e9c283f2453cc70", - "dweb:/ipfs/QmcB66sZhQ6Kz7MUHcLE78YXRUZxoZnnxZjN6yATsbB2ec" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/console2.sol": { - "keccak256": "0x954646445d1014c3cd85c7918f5e7adeeca5ee44b68c00bafa237e597a4e35ea", - "urls": [ - "bzz-raw://516fa3be52da4763147175bfba4be0aa011fadbb0c1afb01f97265bd4cee7973", - "dweb:/ipfs/QmdixAyMJefx7qePChgdxcBH5MxhmN7vsqPuPLx3CgrVmF" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/interfaces/IMulticall3.sol": { - "keccak256": "0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a", - "urls": [ - "bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0", - "dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/mocks/MockERC20.sol": { - "keccak256": "0xd8703f49411737ecf8d411f8fa66b2bf0ef972ba28b7a4adf1748c63df1bf682", - "urls": [ - "bzz-raw://b7c10a6b8112f6fe3cdccb6240ecd382765216b1a82e9a86a0fec8f5e09eadd1", - "dweb:/ipfs/QmdRvPCU4RkjMHsTu3Ric1ZEF1AWDNLp78unFC5aWP17xq" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/mocks/MockERC721.sol": { - "keccak256": "0xa24468244abb66e663fb7eee6463cb518eb9a7c14e1071548ff564cca825bbca", - "urls": [ - "bzz-raw://145585a2194aa6e2d30edfe709ef2814e20b1b4540469aa6a8f50c841fcb9070", - "dweb:/ipfs/QmZrwbvtpbtTxqbW5phUrwb3F1tBiPSQc6jZJAXBfsBsAh" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/safeconsole.sol": { - "keccak256": "0xbaf41fdc6c54297e7cd8250e48b0f20eaac918e342a1028cef3f9a52ac086381", - "urls": [ - "bzz-raw://a500ad81dea226f9910e6b50f99a9ff930105e393a692cbfb2185e4cdb4424ae", - "dweb:/ipfs/QmVbUQpXNMmMWRiy4FvBNczzq46BMGfUoBikvSHNiCxVTq" - ], - "license": "MIT" - } - }, - "version": 1 - }, - "id": 97 -} diff --git a/examples/oft-movement/out/TestHelperOz5.sol/IOAppSetPeer.json b/examples/oft-movement/out/TestHelperOz5.sol/IOAppSetPeer.json deleted file mode 100644 index 3fdb046aa..000000000 --- a/examples/oft-movement/out/TestHelperOz5.sol/IOAppSetPeer.json +++ /dev/null @@ -1,928 +0,0 @@ -{ - "abi": [ - { - "type": "function", - "name": "endpoint", - "inputs": [], - "outputs": [ - { - "name": "iEndpoint", - "type": "address", - "internalType": "contract ILayerZeroEndpointV2" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "setPeer", - "inputs": [ - { "name": "_eid", "type": "uint32", "internalType": "uint32" }, - { "name": "_peer", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [], - "stateMutability": "nonpayable" - } - ], - "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "methodIdentifiers": { - "endpoint()": "5e280f11", - "setPeer(uint32,bytes32)": "3400288b" - }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"endpoint\",\"outputs\":[{\"internalType\":\"contract ILayerZeroEndpointV2\",\"name\":\"iEndpoint\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_peer\",\"type\":\"bytes32\"}],\"name\":\"setPeer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/TestHelperOz5.sol\":\"IOAppSetPeer\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/MessageLibBase.sol\":{\"keccak256\":\"0x14899a4398251439938d6ef8a15ea8c6acdddc98a7b0066d7e63676192dea0d1\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://3998d03de7025c2c601a4fdcaf9475d12a1ef661fcf1a685ece84fdde6498cf9\",\"dweb:/ipfs/QmReknRbiGAiPqq9toKyXKo6hUKXrQPJyyS6LnTGjiDKoY\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/ReceiveLibBaseE2.sol\":{\"keccak256\":\"0x2fdbd1b13751a264cd6e7fac518a2685b15c968806c03f1d18b177fc0526e9a9\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://600af48bb67939b5f4a3a00c76863ee290a55325ea8697f7cc4b46321ab26ef2\",\"dweb:/ipfs/QmdRigYaB6TXczjtVkvwpUEBwvvvDuymFoViMCB6xQPYUU\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/SendLibBase.sol\":{\"keccak256\":\"0x400eaa11c7d50b4c25b7625290ff00937b6875ad3986b353c37a4e62b5a834b1\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://1f51eb0785d3630815a9d63de1c1331fe966df4c3f2fb6750b8da7be9e9743a4\",\"dweb:/ipfs/QmaAEf1kjhhff3AUhRiPm6ikpk2YMMrpKc2ccYzNs7waBy\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/SendLibBaseE2.sol\":{\"keccak256\":\"0x90ada11d0a330732c56b989e59c8272b70f956a5d7be2cf209d6d51a51d35a9e\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://0abc7a6d07ec40a3a922256ad05bdd6eca10550d85bfd2e67147473617bb0497\",\"dweb:/ipfs/QmRDphmFhx1scRJXcusg6pUhVQvp941oCJwnHGAPdrNY4T\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IExecutor.sol\":{\"keccak256\":\"0x2fd26e454b060ede7afa15f8bbc67bd43f9181b6405ca411d36c8b538be016af\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cf2142e83214bb392f69ed14266718cfd803f849a7239ee9a1950ddf66553696\",\"dweb:/ipfs/QmSZ2mPMZqWBetMU8VESKtxy7UdSThUVmJmTFMHEyKLTGZ\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IExecutorFeeLib.sol\":{\"keccak256\":\"0x801d12eca6d6b232fb91d949cdb70a4c547c5e27e73555f2f1eb9e757c639bcc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b61bdffe26ff3902edab3efb0b5af3808ec9e28d72db95b77128502b9bc7638d\",\"dweb:/ipfs/Qmcyf3npDDEq28b9XqmXgSGyQegj2cxUZQ3UekSNf34g8M\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroExecutor.sol\":{\"keccak256\":\"0x3647af317ee126b1247a782abb30e59ec5ab21b4945f1d3b4370d1fa3c1bf347\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5b51cd5e7347ee869a06bd57a698f40e4a901ec7fdcb27f0ef485e4a0e1e9be4\",\"dweb:/ipfs/QmP2Nc73veRzLGdUahkjhQAiKR9ZWYiUtSGwoMB1sPXxUp\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroPriceFeed.sol\":{\"keccak256\":\"0xb4df72798a64f5ea44775b526e0c417c3de0ffc661659d7b31d5b28567c6fbcc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://30ca5fd5e3227a7bffc51654ee3bfebdd591a131f86846ac42dea8a40c5cf1d8\",\"dweb:/ipfs/QmXNmQCF8TZAFpUxgPa1rgWt4ktsBV38A8Hax7TiYLgybW\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroReadExecutor.sol\":{\"keccak256\":\"0x360936885f173f816ffb47e555d480928e74eb1ad54a76af0f4595ecba2d5657\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://16b5095e6439b1e416eb70571a1dd8f4f21a0d77b19c9e510ca289d99e5e09ab\",\"dweb:/ipfs/QmZ2mjQDQ35gJseyzmQhik4cBgN2ESADzofFNVFvgS64hv\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroTreasury.sol\":{\"keccak256\":\"0x2aab2a3cf50e20af56d9204b1367d52a47abba0b0c7c21f304d413de1ced6345\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f8b603b5e5e62c621715f8449280af240a4add8721c4ae8f5e8e491507f6e4c5\",\"dweb:/ipfs/QmUQ7Ti7CPmKnRbQFN9TLvVbeZhsi1xUjqZPTJ36dCZ6y8\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IWorker.sol\":{\"keccak256\":\"0xa6b61913767305227576cc6da5067de4208f09a4f58bfbfe32beafdfae9869b1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7fce83bfb831f383606aee7f5ff68a330c8526bb1036f9ba0813d3e4fa8d534\",\"dweb:/ipfs/QmR7zAqJkmCgBj6sguS8t2WthY5k6FwsakgH4UY11uqD4n\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/libs/ExecutorOptions.sol\":{\"keccak256\":\"0x441b723f2f597be2ec2bb361fcf3f11852c23534db1cfa7d2ffff7e61d228e3c\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://636817d20f90f75032e35376256cf5f4d2a047d6541b45f644d82a2e4dc8f1eb\",\"dweb:/ipfs/QmcEFRxCmmm9hKbqi7Powj6ATbw4JXXJW4rxfwMcxWsDnT\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/libs/SafeCall.sol\":{\"keccak256\":\"0xc3b7b7927472f7c1ca9703af310e9050c798afaccf399ad0f131e179b8582c8d\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://e5be13af32ff6b371985d405bc6fe8ac2faf5445bd88fda2dab4b869f66e3f89\",\"dweb:/ipfs/Qmd21k4H2tAHKrpiuHUbH87eNtHLLJzHj9ZCrMh8AKfDHh\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/ReceiveUlnBase.sol\":{\"keccak256\":\"0x36c93de122bbb74ae31e3eacf567c0a3bc649ed3ebb2766c76dfa93aebcace44\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://e83bcaa80e2715e68818dd53e4dc6ad8e665b8249d69a08cf2d2635b9757fb79\",\"dweb:/ipfs/QmSKh6NgaTrTSa48gDzGGqGNAcs5jVEHgZSzZzbuJSEsxo\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/SendUlnBase.sol\":{\"keccak256\":\"0x6d9962ffa476ac2efb78f1415bb2f650a30eedeef2b75fdab0aeafaf3e8da6a5\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://21f32c56b67d2e770444b809c1a85a96627194c605ad317d482dfc5b6ce7e8c2\",\"dweb:/ipfs/QmP5tzoMDzTdduEcSpYHgg6WCHLQGuc1djDMFUBycJPLCU\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/UlnBase.sol\":{\"keccak256\":\"0xfdb1d04f4996c0a9d35abfbfcf10d978da638885eb77d0a9dc35cea5993074e3\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://776d58d88d13b058f236cf18c32b4b9718a021513fc4e198287f4fe18ec5aba4\",\"dweb:/ipfs/QmdNX8jJu2aXJ8Dpbt2ohfhT8RKQLuvh58sW6SAXcUTcV9\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IDVN.sol\":{\"keccak256\":\"0x6becdfab6c1fcaf98f402bee48495895e54825f9d6eef6e292dde0caed628284\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2273341033856737cd46704a1a769768feae696d0e7a912f5be9de8ffdd2180c\",\"dweb:/ipfs/QmY1xBAmMX9jND1HAb7tDyZNPgFReXMqs1vtmHbShKZFQY\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IDVNFeeLib.sol\":{\"keccak256\":\"0xed4a8e77148328132d8f4f2726c4aeec6b490cf03a1d5940bde0ab8d72954de9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7b07802ca32bf10f68e51da872fb358807446dc2242314374d226493a6e9e7dc\",\"dweb:/ipfs/QmfSwWPLgitDy2a9S3mCNBDk6kAcK9n186Dtvj7qg84i12\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/ILayerZeroDVN.sol\":{\"keccak256\":\"0x308e77078242fd5c5746ec29c12e618249134f9e4377c0028ab8f59c07a6014b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2f92cf397a8d26864ac92dfcd1b98e92a32c47f556a62c5e6dc1618734c1caa3\",\"dweb:/ipfs/QmXN3XJXEKq5djV6HeM6jrLycmJPFhMhecsYZ2TaRsQmhg\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/ILayerZeroReadDVN.sol\":{\"keccak256\":\"0x759a3ee7614c2de54b152b0278845f91ac9760d8c22045b2fee89e3e744402b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7a2dbf6bcf5bfab408f18c104b34c390e8bfabb0eeb1a10e3a9c0fb14c8c61d5\",\"dweb:/ipfs/QmWxmRbDBkbhGmNsRyXqQXB1QaWRS4qvh6a8achh8DQPKR\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IReceiveUlnE2.sol\":{\"keccak256\":\"0xcdf7e690e5d5c0a3ec26a0d7b1a7fe49c7d16a3634721c3944f77d13ff5d4a91\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bd32a05dde1b83be1ce64fcfb9495d8b9bf0c5b3a5b521ac6c214e87e32f3cdc\",\"dweb:/ipfs/QmcDKTor8EQf3cbiWYmeFb9qzUM8JGPzGGN9qJnYjP1nN7\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/DVNOptions.sol\":{\"keccak256\":\"0x2beee03cdf59a9bc72e94d08b69cb2e908725f4ceabb48651494938100e21e35\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://d88e121a39e74309f3575417df2318e2d2ee8bc8314e68dbf78544a9c393b141\",\"dweb:/ipfs/QmRojBRAyENK21HnjevAWeoZZxtWkYZubB9Y78vCJPYeU6\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/ReadCmdCodecV1.sol\":{\"keccak256\":\"0x52fbab4a114ce9defb2ffd57c0a978eee438b2c232862f7e20475e0dcadd4eda\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://a4d5d4e186e3f2a916ea02c2d1d0761069ab1a5c0d6f74719bbf3501a7ccb899\",\"dweb:/ipfs/QmS2e12U9Fap2EK1CmSBTccL4PCKkHNdKJn2bXCqqKdbRn\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/SupportedCmdTypes.sol\":{\"keccak256\":\"0x6b2534522c163714e499041ecd06aaeb93857373cef82cf2752f162bb7c69f9a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bf6c3545c3b9505692dbfaa29b40cab5ed9dc9b65e5804b6f47b5a76596120e9\",\"dweb:/ipfs/QmNs98oRaMvpYhLCQ5yU256eYNEopFTrLRjjwm3gL4foQ3\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/UlnOptions.sol\":{\"keccak256\":\"0x5df07fef16b20767f7524c367d90f696c12e8ce0e4fde7aecc9d83fb2b6b0e27\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://0997203f57d736e56ebb3d736550f1c7ff7950c8df0574c7abe95e22f847b850\",\"dweb:/ipfs/QmZBjkH1vaPLyN3Jx9kGfVZKuTdfVWJfJVLSPok8SpjGbT\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/readlib/ReadLibBase.sol\":{\"keccak256\":\"0x7d312ba1e6288cb201b211f58b814eaaa0b5993721475fbc64321b0e7a2c74d3\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://dfc0dce9362eca0f03b51e0e808389c8bf51fda901e6ca58da169f165e4fc3c8\",\"dweb:/ipfs/QmSXAQ3veWf6gPXcgpX1XLZW9SyLQjBjCSdsFiQTttLNac\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/uln301/interfaces/IUltraLightNode301.sol\":{\"keccak256\":\"0x47f8ebeaa7d96a6f337a18c46e3c532da578c7cb0a13fb6e6f014286b991902f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d51f208b931be54e0ae1801c71c0756251d8c26f8d9b7911be1ad57b3d4a5691\",\"dweb:/ipfs/QmWqjst7jnYtSXQ9pakYHutDvENKLyqNg9nPfMxTH8p2Ed\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessageLibManager.sol\":{\"keccak256\":\"0x64330e51de72e8d38cfc0eb5527d36baada46df4bc14233d3a8ecaf98098d69a\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://49aa45e5a26fc62e7af569cf915be8344adc78dceb6871c4c14bc5d115e59241\",\"dweb:/ipfs/QmbTuW7kzPDYForDEPnaNQi6ZrmWqDxGVnHFiugnvTyq9K\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingChannel.sol\":{\"keccak256\":\"0x8ab8cb12c8beba699c1a7f22ffa812ac553f7038326d0c0d0af77253005cfe73\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://7c7cba4ae16d0ca46ee0a365a204f7257ceaa892224604bf7c8e65c44737e46c\",\"dweb:/ipfs/QmbQX5hJDKMwKdoo6QkdcusXQXH54SVCPe5hM1ycJZsg7y\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingComposer.sol\":{\"keccak256\":\"0x20d36578e810e75346daf064813b76a177087214cae77628b1f9d43798cb52d1\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://475b6f3f1ba5d981d0c5f90b9e892d4f9f539f3b12196639b95770b5be4dbf6a\",\"dweb:/ipfs/QmYyGrnR3vDt8Dqa2paQwTG9qrD6anAGFrDZmMra8KGC6s\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingContext.sol\":{\"keccak256\":\"0x9616f3bd0d7293c9723f2ddf86f9f7030fbd99213c9748557eec8f6d13b25420\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://205e713f5af46f52799e51774ac74dbeee4056de6ddba3c4d78a327536426c54\",\"dweb:/ipfs/QmZ2ZqDwxdjpJbh91qwMfRhhQu4AMEsjUcsTEsdRV4NAys\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroComposer.sol\":{\"keccak256\":\"0xfaca7205d4211ee9208a7e59171e2301731f3d2a20c49b4a839821871f5fdd49\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f254bc60ac26687b5320a43a556e30777b0745abf7cd64d5f4720d9b1d1f7fdf\",\"dweb:/ipfs/QmRSJEZVgxaC3L2DdE6s8P5qkYfM3V5JMeseeFJJqGR4xz\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\":{\"keccak256\":\"0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bacc29fd3866af71e59cb0bdc1cf82c882a4a7f4e2652fd413c9f12649762083\",\"dweb:/ipfs/QmZh2toLnrQDWaNYhS5K4NoW7Vxd2GdZx9KA77vKEDLAqs\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol\":{\"keccak256\":\"0x9641abba8d53b08bb517d1b74801dd15ea7b84d77a6719085bd96c8ea94e3ca0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://77415ae0820859e0faf3fabdce683cce9fa03ea026ae0f6fe081ef1c9205f933\",\"dweb:/ipfs/QmXd7APqoCunQ2jYy73AHvi5gsZofLpm3SzM6FPo7zRPfL\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol\":{\"keccak256\":\"0x5cf5f24751b4e3ea1c9c5ded07cedfdfd62566b6daaffcc0144733859c9dba0c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cae7e35007a714f007ea08045ef7c0cfa6c91fd2425b5028b2d49abad357a5f0\",\"dweb:/ipfs/QmcDBs5tsiyB35b8cwzWQWNnpkawb3uuHRaqE77Hxm2tve\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol\":{\"keccak256\":\"0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d8ff6a8a89297fa127f86b54e0db3eba1d6a6eeb4f6398d3c84d569665ac8f1b\",\"dweb:/ipfs/QmVSwhw6xFDrLRAX4RXaCM47yBaBtac4wf36DYEq6KCTvT\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol\":{\"keccak256\":\"0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7e1b245d58221d16d8b5e0f01ef3e289a24a7df1ace3b94239e4d5b954ad5927\",\"dweb:/ipfs/Qmappsgp7PCY9rSSNE9Cdn4BTRX591WfCSEgq2HxhA3z6S\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol\":{\"keccak256\":\"0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b18b23a1643fc6636c4ad9d9023e2e6ca2d3c2a4a046482d4655bff09950598d\",\"dweb:/ipfs/Qma6G5SqiovwrMPfgqTrRngK1HWW373Wkf9c6YP2NhXpPk\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol\":{\"keccak256\":\"0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5173fc9143bea314b159ca5a9adb5626659ef763bc598e27de5fa46efe3291a6\",\"dweb:/ipfs/QmSLFeMFPmVeGxT4sxRPW28ictjAS22M8rLeYRu9TXkA6D\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol\":{\"keccak256\":\"0xf1c07bc61e7b1dce195ed12d50f87980fbf2d63cac1326fd28287f55fe0ba625\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://060f10ff7afc33c1c2f2b4b5ba29231fd3c943146488084d0e4ab99fce991d97\",\"dweb:/ipfs/QmaSsefAqqEqtf8FgFUmDYMwTsAty3X1pqDb6SiFvry6B3\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol\":{\"keccak256\":\"0x2ebbcaaab3554edcd41b581f1a72ac1806afbfb8047d0d47ff098f9af30d6deb\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://2d4b2cf5c3b16dc76c6767f285b57c0af917972327b2be3f7cba5825402f5fc1\",\"dweb:/ipfs/QmQQWiHE2jKEDbjzGutSoZwtApSXYfLqZt5CxEpFj8xyvT\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/CalldataBytesLib.sol\":{\"keccak256\":\"0x5c0db161cef6603c3b256d4220f489419e7478ef775e52a80056654129c61875\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://a33245d0fdd3992bb56b31d1840108d36bb46c8d617b659ef1af8dd7ed86302d\",\"dweb:/ipfs/QmWyBqT7Tdrfn5zz9xYM3V1PBtfAZAVwwCrrKwwfi3wMQK\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Errors.sol\":{\"keccak256\":\"0x35bcd6ca99c4c8d9f7d8413d1b92fb4a4d4a420ce3bf64b0fb01e68e6bcf2fa7\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://0ac14f98563f9c610c936c93e71eff657efaba1e1d892be6a215aa5cb1f63a24\",\"dweb:/ipfs/QmVZZ8owwfDGLQTAzQJJqmYY4KsrChDagh5GBK7rChT5wb\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/GUID.sol\":{\"keccak256\":\"0x8a44524af7deb96593f6b5606e9973654a113e1687809f2e45d4a91ba89862d5\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://32dd0b5d1946e0cd5c7b728086aafac50a62c061115afb8b41254589c8a6732b\",\"dweb:/ipfs/QmR9QqtiAUPRLaRVv5wnth3NGPhdWB8rJmWYfz3o5Z1mWj\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Transfer.sol\":{\"keccak256\":\"0x621d6dd5b8b7e827351459fff4ac87c16ba4656757592cf67de8b199aea4cf9a\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://345aa8c007ed8b96a74260d289545713f1d7180df270d67687e3a540a61fa5c0\",\"dweb:/ipfs/QmNWCvpqSuar6UGLDVshUc7shUv3pt1J5FTf9VyZZ13wXL\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/BlockedMessageLib.sol\":{\"keccak256\":\"0xb2b55968b26294139742adee6c155897c8334f4c6bf72f1940456cc84e6fbab9\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://e758a1fdcea4039b19f1252e4e2958f4a0e05517eb3e151784431533446c225f\",\"dweb:/ipfs/QmRBG345abgyUeTnSpuxdK1WbK5pvwhSmvBEgW1mnoYqTq\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/BitMaps.sol\":{\"keccak256\":\"0xaad3c72ef43480d2253fd48b394e8fb7286d009991d2bc4e61be58ce48ac5ee9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b8c02b14f954416ba2148b389c87da8378ac8dd16ba3d458cbbfba8b0fd8639f\",\"dweb:/ipfs/Qmd2EEQhYL2VmgJi1V4uiHM2WcYxF9iBtxSgcFkbS21rQD\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/ExecutorOptions.sol\":{\"keccak256\":\"0x621c6090fc432f94a99f677a95d72b75f56db89ddc5fc870669777a313587c28\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://69086166f16d29e30c5eb9ca2f97afb27569afe619807d79736833a809a512d2\",\"dweb:/ipfs/QmcZqXjFuVdTrfbteKBF3GuEpjVFZ2YNZTa3J87dyLsqav\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol\":{\"keccak256\":\"0xc84cf1bf785977fe1fbe7566eef902c2db68d0e163813ebe6c34921754802680\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://de686666fc16fa432d4208d85cec87dc952faf3e481b683b9adf4b4610db4b09\",\"dweb:/ipfs/QmdmQeopzmxqRzi9DNB4EJDrYUXFfD7fUhnGhSni4QejUW\"]},\"node_modules/@layerzerolabs/lz-evm-v1-0.7/contracts/interfaces/ILayerZeroUltraLightNodeV2.sol\":{\"keccak256\":\"0xf1f36bbbc40d03b96affa151affb47da75a1b69dc79f4b311841a072d12fdd22\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://9f4f188c2998ecbda28a389ad8038da15c2260b1df6a8d135b3d96422e292fda\",\"dweb:/ipfs/QmeThR83tcaM4CmxQ2AamTafsgjcbGMfZtYcDHqw2CcwKa\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/OptionsHelper.sol\":{\"keccak256\":\"0x729ce2290d16a45a16ad936263803db6a6bebcfba5c063ebe0f0fd284ba828c0\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://7494875394fc968684761b22bb5fe05789f8d84ba07b2e0ab579ce0afe7aa973\",\"dweb:/ipfs/QmZNrexRXL3ef3UnES5e8JcdyMJ5HVftwGKQjGC5CwNg9Q\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/TestHelperOz5.sol\":{\"keccak256\":\"0xe60b21a345bb1c2e9ee2fb7301398d342da0acc3a730b442106a2ad9478f7a63\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://ee7e0a47ae666a16e33a51f946da4fe549e8f4c6ea1f1978850515172c44656f\",\"dweb:/ipfs/QmR2AZ9pYiwMCV4wPPVaGGPRJEjuBoFjJEesHtbAYhNoFq\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/DVNFeeLibMock.sol\":{\"keccak256\":\"0x4c2e212f73a1c2a2989af947eef715ebacb11a80d55e5fd18a89a905790971b1\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://30eb29a81414780828903f5320367e89020af5a4055b768e2be08d43605b1688\",\"dweb:/ipfs/QmeC5bVtmaY6tn6Z2XpVFXAkxVWQCQUzKbP2V9nPdv3vCr\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/DVNMock.sol\":{\"keccak256\":\"0xdafd7da964b6ac8637d543c30370739bb805f7e10b42043444689240b5c27b3f\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://154067632b4799f49c0b3a8c5304499f60b2c232ebd17c21912efdb72421bdab\",\"dweb:/ipfs/QmUEr6VsNt2odnrL3xFrLKwZTVLkLXi8BDzpPWeiCxC63T\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/EndpointV2AltMock.sol\":{\"keccak256\":\"0x026b2f530b336ee237f37dde6f617acefbbf74d933d2a80da4216882f78be1a9\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://097a9fdd5a321e6e8455a1db00f2abda6e810c31ce47d1bced9e574be262a28b\",\"dweb:/ipfs/Qme17zGk93k5BghCWFXqeqppVahH4dHuw7U76K4EcJxsY1\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/EndpointV2Mock.sol\":{\"keccak256\":\"0xe9096c53611537a121589b56b882fc4dd797d5cac60def708f794a15e3ca98ff\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://4092d5dd582b48a5f703e4361fc5fb66050b5fe3253891175275dc832bc8e045\",\"dweb:/ipfs/QmXSTJJNx4rn2ByCaE6vxiHnkm366ZU7dScYH1JsUbVZ1V\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ExecutorFeeLibMock.sol\":{\"keccak256\":\"0x4a47aaf41049710d5f05fcc66885cacc0dabc1864778b56ac75a59b61eef5a01\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://c9b8c26b38cb138c3225efbab8b1d2e0f43343798658a0f2ed9669c16e5a97ff\",\"dweb:/ipfs/QmV21G7Qwoi9gXYT8bKXDwnQDvjdZCAo2M9MqTKq4nQU9U\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ExecutorMock.sol\":{\"keccak256\":\"0xbcdc4500270cd5496f10760ffe9e0444d23e454dd0ae2555e0661acf22fce96f\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://b816999bcfef5586b5e80bba21584b821fd7f7b32c276492adee530ffa83bb73\",\"dweb:/ipfs/QmXLV8ieYdrTBERajBCVuMzknFyPHJjnw7MGkzULAdjdt8\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/MultiSigMock.sol\":{\"keccak256\":\"0xc7c90e073e52af1da6c07e3d3f7477b064a89e78935c16e9872457df503c6830\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://cef1ae2d517e152616aea7f8f5c15fa1fbabbec8896a9c30a9eed35fb56b4f2f\",\"dweb:/ipfs/QmeitPMQht2WfbR9ZLzwKWgThamdsJkobeaWo6ojTCoQG5\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/PriceFeedMock.sol\":{\"keccak256\":\"0xd8f419b25c648287b5b7f0923b069b2449c51e807c9153df39445f2f83e55f44\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://bb300a5bb62655073c7aa9cd2221e60e59ce904a0d73f7f5e06af7c9df3445ec\",\"dweb:/ipfs/QmcYb2qFevymfkWhTqGaNH5HwK9MMUixzAKJJAdNQHSCbw\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ReadLib1002Mock.sol\":{\"keccak256\":\"0x1403b7a91b185fd8211f00fa380a0b8918e92e663c403a1dafa30f1667091fdc\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://7494444260a981ae9a9e11cd8981fad35a6b45a9c09cf72c05aad88ee191e7f0\",\"dweb:/ipfs/QmaTyujm37PsCobQ36ootD5xVgKyBYqeUTdTJij9x3oaN6\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ReceiveUln302Mock.sol\":{\"keccak256\":\"0x8e60b01e9bc801167b374dc119b41832d546afd43c143a0cd15ab1941198e121\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://bb1512762417dda9cd81fd9b41f590fd05888358fda1c2ab7e79e0cfabf61ec4\",\"dweb:/ipfs/QmPAgBwdjLz29vE5L1Jth1Wvx6TTM1ig97amVtAyDFF61Q\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/SendUln302Mock.sol\":{\"keccak256\":\"0x0c5cb54ec6b18e77aa653f7d774ac9d010684dafc96794d1d02f12b6885cc348\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://24c5a8ba8d92c16ec3047229167528f57b38cbd64882140014126ca51ab14574\",\"dweb:/ipfs/QmXQsMDtZ3qNmjnr2LYgctBpPKxffuC6EeWHvFUtLBS5st\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/SimpleMessageLibMock.sol\":{\"keccak256\":\"0xe6c93840c612592686732dd516550816eb77d6cde92514220eacb72443dcb9b9\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://a6a00fb60b7ac66e746f0471c2262fc98febafeb8acad8785d38ce1ddc4cc991\",\"dweb:/ipfs/QmboboJskbXBbsyAGGRbW4JQCPJo9WiLFy7nwQxGVS9UhZ\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/WorkerMock.sol\":{\"keccak256\":\"0x6c5bc31c117033dd35fa7ab3b13b1647a4b449c5f5b4cbff41bce8a63529ab97\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://01aa1d3f3b8e2fd4b544312d96916b16b97e01ab740e2bae1137723b2f1a31b1\",\"dweb:/ipfs/QmVMemJ4MSgi6y9NxDdSeB6QbJRtCWojJNxzs3CRLT56EA\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/test.sol\":{\"keccak256\":\"0x8758531bbac3972efcf1fa46383dbe1d276406fe527bc7abb2f236486278e83b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://1f64264d61506847acf8761e84aff690cebe830958eac00bac7924d8be569240\",\"dweb:/ipfs/QmSekDJvJ82MZAmr63n7YvfLzQ7gS4NLSHPmHL3GN3rw8k\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Base.sol\":{\"keccak256\":\"0x4ff1a785311017d1eedb1b4737956fa383067ad34eb439abfec1d989754dde1c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f553622969b9fdb930246704a4c10dfaee6b1a4468c142fa7eb9dc292a438224\",\"dweb:/ipfs/QmcxqHnqdQsMVtgsfH9VNLmZ3g7GhgNagfq7yvNCDcCHFK\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdAssertions.sol\":{\"keccak256\":\"0x1a0dee4d8b2c81e9318e87dd85ef009467ebf7dba6575530d1fce94d34dbae60\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ddd790c86ddde1013d1f7a552a80168eacf2e9244077f96799180644ad523a5b\",\"dweb:/ipfs/QmYinBFt9uEVFXP9ytT9CDoNpzWieQVgLWRFRNiypMzJaL\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdChains.sol\":{\"keccak256\":\"0x598b85609125830885b8fb54a18f447d04f8dd799aca3de81baef35eb6b783c0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c9c128aae4f5668d8c8f71e9e6d9379d8451b8713d139cb66a02d23bc1c75f69\",\"dweb:/ipfs/QmVRihXHWi2yg9CcAhzKf63Y7m6gWz4P1giGMhXUHT3DFu\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdCheats.sol\":{\"keccak256\":\"0xb72f3519e0bf7d31df5d68557525f4fc55d861c3fb3b0f7793144ef7c94cbeb7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f3456d0f78e6f61203fa7871ba2df0d35925f10db3baee14be623ce2a35b84e2\",\"dweb:/ipfs/QmWE6QQSBvJifHMraisBTrf1x4WCwrDoTPLX8UKajTiApc\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdError.sol\":{\"keccak256\":\"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6\",\"dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdInvariant.sol\":{\"keccak256\":\"0x67299bfacd77fddfa2a67b8e2b901e0e333618a4975fb94850b07475e51f6de6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1b61121d310f4053ce344b345b4a9ccf43b059daf9097ec2647f594beaca896d\",\"dweb:/ipfs/QmZUCoTtXBM9zfAZVbj2dFPPnKaV1CSZzXE7zictyg3Gfz\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdJson.sol\":{\"keccak256\":\"0x8f914dbd016bd0e318fe2b8bd556fbc8256c7cddc24e3e4fcb9f3c1c1935592d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://19e704df493dde38323303b07d18cadfeb4dcadf1ddc2301add4aea9474fbb5e\",\"dweb:/ipfs/QmZasuGiLK8LHwWtvpqEBxUR6QFY6GdzLMTJ9q7CMf8PNZ\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdMath.sol\":{\"keccak256\":\"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92\",\"dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdStorage.sol\":{\"keccak256\":\"0x4298f3f4cedaedb07029820b1daad2c03af45379559392201f7bf3ec71105811\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6e062f36d8d1ae3c383ef8975757926eaa9c4de3a92b5f1fe2d12748bcd8db32\",\"dweb:/ipfs/QmcWkv3ia5Ew4DZNcudMNSTNXZ3W2QiXTZunRd44e9BT8z\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdStyle.sol\":{\"keccak256\":\"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8\",\"dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdUtils.sol\":{\"keccak256\":\"0x502b18a4becda6ecd91fa8b419d8034946bfa80e6cc7f6497f51f8565bfadae0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bf499ee483a1dfd02023d4ce78ed4029a49794ccd5b849aaab912faea0d2ba61\",\"dweb:/ipfs/QmP6hwNZW7sYbQK9fBzuZWxfLm6Swx2nKzvZ54qWNqQkzX\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Test.sol\":{\"keccak256\":\"0x39b1729d5868c8e94ab8af16751eb500a17fe3870dc627d2b7ddcd5df18d7ad0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1568c82aff125cc4b0fc168be9d67ac313f469a3c7405c5493caecaaaecfb765\",\"dweb:/ipfs/QmXByuZReJsdu1jDcxj1FcmpcUnzoBcqybn9kWgDAECWri\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Vm.sol\":{\"keccak256\":\"0x87ba9f3edc254e529db9e3129c954391adcc7fc8574203767979d8d2f1e724b9\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://4d16c08d80d9f2869deb6350642cf5af624d21fce6b3b023abbcdedc62e195fe\",\"dweb:/ipfs/QmURpnnFECPKt3i7P7jQRZpr4ZBXjRGcZ9KzcbKzsgYR2W\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/console.sol\":{\"keccak256\":\"0x91d5413c2434ca58fd278b6e1e79fd98d10c83931cc2596a6038eee4daeb34ba\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://91ccea707361e48b9b7a161fe81f496b9932bc471e9c4e4e1e9c283f2453cc70\",\"dweb:/ipfs/QmcB66sZhQ6Kz7MUHcLE78YXRUZxoZnnxZjN6yATsbB2ec\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/console2.sol\":{\"keccak256\":\"0x954646445d1014c3cd85c7918f5e7adeeca5ee44b68c00bafa237e597a4e35ea\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://516fa3be52da4763147175bfba4be0aa011fadbb0c1afb01f97265bd4cee7973\",\"dweb:/ipfs/QmdixAyMJefx7qePChgdxcBH5MxhmN7vsqPuPLx3CgrVmF\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/interfaces/IMulticall3.sol\":{\"keccak256\":\"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0\",\"dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/mocks/MockERC20.sol\":{\"keccak256\":\"0xd8703f49411737ecf8d411f8fa66b2bf0ef972ba28b7a4adf1748c63df1bf682\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7c10a6b8112f6fe3cdccb6240ecd382765216b1a82e9a86a0fec8f5e09eadd1\",\"dweb:/ipfs/QmdRvPCU4RkjMHsTu3Ric1ZEF1AWDNLp78unFC5aWP17xq\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/mocks/MockERC721.sol\":{\"keccak256\":\"0xa24468244abb66e663fb7eee6463cb518eb9a7c14e1071548ff564cca825bbca\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://145585a2194aa6e2d30edfe709ef2814e20b1b4540469aa6a8f50c841fcb9070\",\"dweb:/ipfs/QmZrwbvtpbtTxqbW5phUrwb3F1tBiPSQc6jZJAXBfsBsAh\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/safeconsole.sol\":{\"keccak256\":\"0xbaf41fdc6c54297e7cd8250e48b0f20eaac918e342a1028cef3f9a52ac086381\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a500ad81dea226f9910e6b50f99a9ff930105e393a692cbfb2185e4cdb4424ae\",\"dweb:/ipfs/QmVbUQpXNMmMWRiy4FvBNczzq46BMGfUoBikvSHNiCxVTq\"]},\"node_modules/@openzeppelin/contracts/access/AccessControl.sol\":{\"keccak256\":\"0xa0e92d42942f4f57c5be50568dac11e9d00c93efcb458026e18d2d9b9b2e7308\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://46326c0bb1e296b67185e81c918e0b40501b8b6386165855df0a3f3c634b6a80\",\"dweb:/ipfs/QmTwyrDYtsxsk6pymJTK94PnEpzsmkpUxFuzEiakDopy4Z\"]},\"node_modules/@openzeppelin/contracts/access/IAccessControl.sol\":{\"keccak256\":\"0xc1c2a7f1563b77050dc6d507db9f4ada5d042c1f6a9ddbffdc49c77cdc0a1606\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fd54abb96a6156d9a761f6fdad1d3004bc48d2d4fce47f40a3f91a7ae83fc3a1\",\"dweb:/ipfs/QmUrFSGkTDJ7WaZ6qPVVe3Gn5uN2viPb7x7QQ35UX4DofX\"]},\"node_modules/@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol\":{\"keccak256\":\"0x9b6b3e7803bc5f2f8cd7ad57db8ac1def61a9930a5a3107df4882e028a9605d7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://da62d6be1f5c6edf577f0cb45666a8aa9c2086a4bac87d95d65f02e2f4c36a4b\",\"dweb:/ipfs/QmNkpvBpoCMvX8JwAFNSc5XxJ2q5BXJpL5L1txb4QkqVFF\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC165.sol\":{\"keccak256\":\"0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://11fea9f8bc98949ac6709f0c1699db7430d2948137aa94d5a9e95a91f61a710a\",\"dweb:/ipfs/QmQdfRXxQjwP6yn3DVo1GHPpriKNcFghSPi94Z1oKEFUNS\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC20.sol\":{\"keccak256\":\"0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a2608291cb038b388d80b79a06b6118a42f7894ff67b7da10ec0dbbf5b2973ba\",\"dweb:/ipfs/QmWohqcBLbcxmA4eGPhZDXe5RYMMEEpFq22nfkaUMvTfw1\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db\",\"dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0xca2ae13e0610f6a99238dd00b97bd786bc92732dae6d6b9d61f573ec51018310\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://75f8c71ce0c91c40dd5f249ace0b7d8270f8f1767231bcf71490f7157d6ba862\",\"dweb:/ipfs/QmYXgxeDyFHvz3JsXxLEYN6GNUR44ThHeFj5XkpkgMoG4w\"]},\"node_modules/@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0x9d8da059267bac779a2dbbb9a26c2acf00ca83085e105d62d5d4ef96054a47f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c78e2aa4313323cecd1ef12a8d6265b96beee1a199923abf55d9a2a9e291ad23\",\"dweb:/ipfs/QmUTs2KStXucZezzFo3EYeqYu47utu56qrF7jj1Gue65vb\"]},\"node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"node_modules/@openzeppelin/contracts/utils/Errors.sol\":{\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf\",\"dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB\"]},\"node_modules/@openzeppelin/contracts/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]},\"node_modules/@openzeppelin/contracts/utils/Pausable.sol\":{\"keccak256\":\"0xb2e5f50762c27fb4b123e3619c3c02bdcba5e515309382e5bfb6f7d6486510bd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1a4b83328c98d518a2699c2cbe9e9b055e78aa57fa8639f1b88deb8b3750b5dc\",\"dweb:/ipfs/QmXdcYj5v7zQxXFPULShHkR5p4Wa2zYuupbHnFdV3cHYtc\"]},\"node_modules/@openzeppelin/contracts/utils/ReentrancyGuard.sol\":{\"keccak256\":\"0x11a5a79827df29e915a12740caf62fe21ebe27c08c9ae3e09abe9ee3ba3866d3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3cf0c69ab827e3251db9ee6a50647d62c90ba580a4d7bbff21f2bea39e7b2f4a\",\"dweb:/ipfs/QmZiKwtKU1SBX4RGfQtY7PZfiapbbu6SZ9vizGQD9UHjRA\"]},\"node_modules/@openzeppelin/contracts/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0x69f54c02b7d81d505910ec198c11ed4c6a728418a868b906b4a0cf29946fda84\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8e25e4bdb7ae1f21d23bfee996e22736fc0ab44cfabedac82a757b1edc5623b9\",\"dweb:/ipfs/QmQdWQvB6JCP9ZMbzi8EvQ1PTETqkcTWrbcVurS7DKpa5n\"]},\"node_modules/@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0xddce8e17e3d3f9ed818b4f4c4478a8262aab8b11ed322f1bf5ed705bb4bd97fa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8084aa71a4cc7d2980972412a88fe4f114869faea3fefa5436431644eb5c0287\",\"dweb:/ipfs/Qmbqfs5dRdPvHVKY8kTaeyc65NdqXRQwRK7h9s5UJEhD1p\"]},\"node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]},\"node_modules/@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]},\"node_modules/@openzeppelin/contracts/utils/structs/DoubleEndedQueue.sol\":{\"keccak256\":\"0x1e1d74658d7f4eab3d4f8fb0c6c5953bc5f629d9425e978d557dabff7b58b217\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://be0175d00008d452d3d553890f73a3d5d51dff4372f720336c8b98f26822fcdb\",\"dweb:/ipfs/QmUkE8g5xPExWoSAKwdi5ww1qJJVtEWtjSF93G2LMQkgD3\"]},\"node_modules/solidity-bytes-utils/contracts/BytesLib.sol\":{\"keccak256\":\"0xa5b10f04797d5a10a9ba07855108b6bd695940e6a3d128927b2f74a0d359868a\",\"license\":\"Unlicense\",\"urls\":[\"bzz-raw://a38d7680aacbb18dae659876b396b73bcc8f759672213f8a0efc4129e2648535\",\"dweb:/ipfs/QmfKFnwpTEGAnbRnZxMuv3mRCG9S9WMjFhFL23bftBT2Jq\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "endpoint", - "outputs": [ - { - "internalType": "contract ILayerZeroEndpointV2", - "name": "iEndpoint", - "type": "address" - } - ] - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { "internalType": "bytes32", "name": "_peer", "type": "bytes32" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setPeer" - } - ], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/TestHelperOz5.sol": "IOAppSetPeer" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/MessageLibBase.sol": { - "keccak256": "0x14899a4398251439938d6ef8a15ea8c6acdddc98a7b0066d7e63676192dea0d1", - "urls": [ - "bzz-raw://3998d03de7025c2c601a4fdcaf9475d12a1ef661fcf1a685ece84fdde6498cf9", - "dweb:/ipfs/QmReknRbiGAiPqq9toKyXKo6hUKXrQPJyyS6LnTGjiDKoY" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/ReceiveLibBaseE2.sol": { - "keccak256": "0x2fdbd1b13751a264cd6e7fac518a2685b15c968806c03f1d18b177fc0526e9a9", - "urls": [ - "bzz-raw://600af48bb67939b5f4a3a00c76863ee290a55325ea8697f7cc4b46321ab26ef2", - "dweb:/ipfs/QmdRigYaB6TXczjtVkvwpUEBwvvvDuymFoViMCB6xQPYUU" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/SendLibBase.sol": { - "keccak256": "0x400eaa11c7d50b4c25b7625290ff00937b6875ad3986b353c37a4e62b5a834b1", - "urls": [ - "bzz-raw://1f51eb0785d3630815a9d63de1c1331fe966df4c3f2fb6750b8da7be9e9743a4", - "dweb:/ipfs/QmaAEf1kjhhff3AUhRiPm6ikpk2YMMrpKc2ccYzNs7waBy" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/SendLibBaseE2.sol": { - "keccak256": "0x90ada11d0a330732c56b989e59c8272b70f956a5d7be2cf209d6d51a51d35a9e", - "urls": [ - "bzz-raw://0abc7a6d07ec40a3a922256ad05bdd6eca10550d85bfd2e67147473617bb0497", - "dweb:/ipfs/QmRDphmFhx1scRJXcusg6pUhVQvp941oCJwnHGAPdrNY4T" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IExecutor.sol": { - "keccak256": "0x2fd26e454b060ede7afa15f8bbc67bd43f9181b6405ca411d36c8b538be016af", - "urls": [ - "bzz-raw://cf2142e83214bb392f69ed14266718cfd803f849a7239ee9a1950ddf66553696", - "dweb:/ipfs/QmSZ2mPMZqWBetMU8VESKtxy7UdSThUVmJmTFMHEyKLTGZ" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IExecutorFeeLib.sol": { - "keccak256": "0x801d12eca6d6b232fb91d949cdb70a4c547c5e27e73555f2f1eb9e757c639bcc", - "urls": [ - "bzz-raw://b61bdffe26ff3902edab3efb0b5af3808ec9e28d72db95b77128502b9bc7638d", - "dweb:/ipfs/Qmcyf3npDDEq28b9XqmXgSGyQegj2cxUZQ3UekSNf34g8M" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroExecutor.sol": { - "keccak256": "0x3647af317ee126b1247a782abb30e59ec5ab21b4945f1d3b4370d1fa3c1bf347", - "urls": [ - "bzz-raw://5b51cd5e7347ee869a06bd57a698f40e4a901ec7fdcb27f0ef485e4a0e1e9be4", - "dweb:/ipfs/QmP2Nc73veRzLGdUahkjhQAiKR9ZWYiUtSGwoMB1sPXxUp" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroPriceFeed.sol": { - "keccak256": "0xb4df72798a64f5ea44775b526e0c417c3de0ffc661659d7b31d5b28567c6fbcc", - "urls": [ - "bzz-raw://30ca5fd5e3227a7bffc51654ee3bfebdd591a131f86846ac42dea8a40c5cf1d8", - "dweb:/ipfs/QmXNmQCF8TZAFpUxgPa1rgWt4ktsBV38A8Hax7TiYLgybW" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroReadExecutor.sol": { - "keccak256": "0x360936885f173f816ffb47e555d480928e74eb1ad54a76af0f4595ecba2d5657", - "urls": [ - "bzz-raw://16b5095e6439b1e416eb70571a1dd8f4f21a0d77b19c9e510ca289d99e5e09ab", - "dweb:/ipfs/QmZ2mjQDQ35gJseyzmQhik4cBgN2ESADzofFNVFvgS64hv" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroTreasury.sol": { - "keccak256": "0x2aab2a3cf50e20af56d9204b1367d52a47abba0b0c7c21f304d413de1ced6345", - "urls": [ - "bzz-raw://f8b603b5e5e62c621715f8449280af240a4add8721c4ae8f5e8e491507f6e4c5", - "dweb:/ipfs/QmUQ7Ti7CPmKnRbQFN9TLvVbeZhsi1xUjqZPTJ36dCZ6y8" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IWorker.sol": { - "keccak256": "0xa6b61913767305227576cc6da5067de4208f09a4f58bfbfe32beafdfae9869b1", - "urls": [ - "bzz-raw://b7fce83bfb831f383606aee7f5ff68a330c8526bb1036f9ba0813d3e4fa8d534", - "dweb:/ipfs/QmR7zAqJkmCgBj6sguS8t2WthY5k6FwsakgH4UY11uqD4n" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/libs/ExecutorOptions.sol": { - "keccak256": "0x441b723f2f597be2ec2bb361fcf3f11852c23534db1cfa7d2ffff7e61d228e3c", - "urls": [ - "bzz-raw://636817d20f90f75032e35376256cf5f4d2a047d6541b45f644d82a2e4dc8f1eb", - "dweb:/ipfs/QmcEFRxCmmm9hKbqi7Powj6ATbw4JXXJW4rxfwMcxWsDnT" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/libs/SafeCall.sol": { - "keccak256": "0xc3b7b7927472f7c1ca9703af310e9050c798afaccf399ad0f131e179b8582c8d", - "urls": [ - "bzz-raw://e5be13af32ff6b371985d405bc6fe8ac2faf5445bd88fda2dab4b869f66e3f89", - "dweb:/ipfs/Qmd21k4H2tAHKrpiuHUbH87eNtHLLJzHj9ZCrMh8AKfDHh" - ], - "license": "MIT OR Apache-2.0" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/ReceiveUlnBase.sol": { - "keccak256": "0x36c93de122bbb74ae31e3eacf567c0a3bc649ed3ebb2766c76dfa93aebcace44", - "urls": [ - "bzz-raw://e83bcaa80e2715e68818dd53e4dc6ad8e665b8249d69a08cf2d2635b9757fb79", - "dweb:/ipfs/QmSKh6NgaTrTSa48gDzGGqGNAcs5jVEHgZSzZzbuJSEsxo" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/SendUlnBase.sol": { - "keccak256": "0x6d9962ffa476ac2efb78f1415bb2f650a30eedeef2b75fdab0aeafaf3e8da6a5", - "urls": [ - "bzz-raw://21f32c56b67d2e770444b809c1a85a96627194c605ad317d482dfc5b6ce7e8c2", - "dweb:/ipfs/QmP5tzoMDzTdduEcSpYHgg6WCHLQGuc1djDMFUBycJPLCU" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/UlnBase.sol": { - "keccak256": "0xfdb1d04f4996c0a9d35abfbfcf10d978da638885eb77d0a9dc35cea5993074e3", - "urls": [ - "bzz-raw://776d58d88d13b058f236cf18c32b4b9718a021513fc4e198287f4fe18ec5aba4", - "dweb:/ipfs/QmdNX8jJu2aXJ8Dpbt2ohfhT8RKQLuvh58sW6SAXcUTcV9" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IDVN.sol": { - "keccak256": "0x6becdfab6c1fcaf98f402bee48495895e54825f9d6eef6e292dde0caed628284", - "urls": [ - "bzz-raw://2273341033856737cd46704a1a769768feae696d0e7a912f5be9de8ffdd2180c", - "dweb:/ipfs/QmY1xBAmMX9jND1HAb7tDyZNPgFReXMqs1vtmHbShKZFQY" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IDVNFeeLib.sol": { - "keccak256": "0xed4a8e77148328132d8f4f2726c4aeec6b490cf03a1d5940bde0ab8d72954de9", - "urls": [ - "bzz-raw://7b07802ca32bf10f68e51da872fb358807446dc2242314374d226493a6e9e7dc", - "dweb:/ipfs/QmfSwWPLgitDy2a9S3mCNBDk6kAcK9n186Dtvj7qg84i12" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/ILayerZeroDVN.sol": { - "keccak256": "0x308e77078242fd5c5746ec29c12e618249134f9e4377c0028ab8f59c07a6014b", - "urls": [ - "bzz-raw://2f92cf397a8d26864ac92dfcd1b98e92a32c47f556a62c5e6dc1618734c1caa3", - "dweb:/ipfs/QmXN3XJXEKq5djV6HeM6jrLycmJPFhMhecsYZ2TaRsQmhg" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/ILayerZeroReadDVN.sol": { - "keccak256": "0x759a3ee7614c2de54b152b0278845f91ac9760d8c22045b2fee89e3e744402b8", - "urls": [ - "bzz-raw://7a2dbf6bcf5bfab408f18c104b34c390e8bfabb0eeb1a10e3a9c0fb14c8c61d5", - "dweb:/ipfs/QmWxmRbDBkbhGmNsRyXqQXB1QaWRS4qvh6a8achh8DQPKR" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IReceiveUlnE2.sol": { - "keccak256": "0xcdf7e690e5d5c0a3ec26a0d7b1a7fe49c7d16a3634721c3944f77d13ff5d4a91", - "urls": [ - "bzz-raw://bd32a05dde1b83be1ce64fcfb9495d8b9bf0c5b3a5b521ac6c214e87e32f3cdc", - "dweb:/ipfs/QmcDKTor8EQf3cbiWYmeFb9qzUM8JGPzGGN9qJnYjP1nN7" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/DVNOptions.sol": { - "keccak256": "0x2beee03cdf59a9bc72e94d08b69cb2e908725f4ceabb48651494938100e21e35", - "urls": [ - "bzz-raw://d88e121a39e74309f3575417df2318e2d2ee8bc8314e68dbf78544a9c393b141", - "dweb:/ipfs/QmRojBRAyENK21HnjevAWeoZZxtWkYZubB9Y78vCJPYeU6" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/ReadCmdCodecV1.sol": { - "keccak256": "0x52fbab4a114ce9defb2ffd57c0a978eee438b2c232862f7e20475e0dcadd4eda", - "urls": [ - "bzz-raw://a4d5d4e186e3f2a916ea02c2d1d0761069ab1a5c0d6f74719bbf3501a7ccb899", - "dweb:/ipfs/QmS2e12U9Fap2EK1CmSBTccL4PCKkHNdKJn2bXCqqKdbRn" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/SupportedCmdTypes.sol": { - "keccak256": "0x6b2534522c163714e499041ecd06aaeb93857373cef82cf2752f162bb7c69f9a", - "urls": [ - "bzz-raw://bf6c3545c3b9505692dbfaa29b40cab5ed9dc9b65e5804b6f47b5a76596120e9", - "dweb:/ipfs/QmNs98oRaMvpYhLCQ5yU256eYNEopFTrLRjjwm3gL4foQ3" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/UlnOptions.sol": { - "keccak256": "0x5df07fef16b20767f7524c367d90f696c12e8ce0e4fde7aecc9d83fb2b6b0e27", - "urls": [ - "bzz-raw://0997203f57d736e56ebb3d736550f1c7ff7950c8df0574c7abe95e22f847b850", - "dweb:/ipfs/QmZBjkH1vaPLyN3Jx9kGfVZKuTdfVWJfJVLSPok8SpjGbT" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/readlib/ReadLibBase.sol": { - "keccak256": "0x7d312ba1e6288cb201b211f58b814eaaa0b5993721475fbc64321b0e7a2c74d3", - "urls": [ - "bzz-raw://dfc0dce9362eca0f03b51e0e808389c8bf51fda901e6ca58da169f165e4fc3c8", - "dweb:/ipfs/QmSXAQ3veWf6gPXcgpX1XLZW9SyLQjBjCSdsFiQTttLNac" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/uln301/interfaces/IUltraLightNode301.sol": { - "keccak256": "0x47f8ebeaa7d96a6f337a18c46e3c532da578c7cb0a13fb6e6f014286b991902f", - "urls": [ - "bzz-raw://d51f208b931be54e0ae1801c71c0756251d8c26f8d9b7911be1ad57b3d4a5691", - "dweb:/ipfs/QmWqjst7jnYtSXQ9pakYHutDvENKLyqNg9nPfMxTH8p2Ed" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessageLibManager.sol": { - "keccak256": "0x64330e51de72e8d38cfc0eb5527d36baada46df4bc14233d3a8ecaf98098d69a", - "urls": [ - "bzz-raw://49aa45e5a26fc62e7af569cf915be8344adc78dceb6871c4c14bc5d115e59241", - "dweb:/ipfs/QmbTuW7kzPDYForDEPnaNQi6ZrmWqDxGVnHFiugnvTyq9K" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingChannel.sol": { - "keccak256": "0x8ab8cb12c8beba699c1a7f22ffa812ac553f7038326d0c0d0af77253005cfe73", - "urls": [ - "bzz-raw://7c7cba4ae16d0ca46ee0a365a204f7257ceaa892224604bf7c8e65c44737e46c", - "dweb:/ipfs/QmbQX5hJDKMwKdoo6QkdcusXQXH54SVCPe5hM1ycJZsg7y" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingComposer.sol": { - "keccak256": "0x20d36578e810e75346daf064813b76a177087214cae77628b1f9d43798cb52d1", - "urls": [ - "bzz-raw://475b6f3f1ba5d981d0c5f90b9e892d4f9f539f3b12196639b95770b5be4dbf6a", - "dweb:/ipfs/QmYyGrnR3vDt8Dqa2paQwTG9qrD6anAGFrDZmMra8KGC6s" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingContext.sol": { - "keccak256": "0x9616f3bd0d7293c9723f2ddf86f9f7030fbd99213c9748557eec8f6d13b25420", - "urls": [ - "bzz-raw://205e713f5af46f52799e51774ac74dbeee4056de6ddba3c4d78a327536426c54", - "dweb:/ipfs/QmZ2ZqDwxdjpJbh91qwMfRhhQu4AMEsjUcsTEsdRV4NAys" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroComposer.sol": { - "keccak256": "0xfaca7205d4211ee9208a7e59171e2301731f3d2a20c49b4a839821871f5fdd49", - "urls": [ - "bzz-raw://f254bc60ac26687b5320a43a556e30777b0745abf7cd64d5f4720d9b1d1f7fdf", - "dweb:/ipfs/QmRSJEZVgxaC3L2DdE6s8P5qkYfM3V5JMeseeFJJqGR4xz" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol": { - "keccak256": "0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3", - "urls": [ - "bzz-raw://bacc29fd3866af71e59cb0bdc1cf82c882a4a7f4e2652fd413c9f12649762083", - "dweb:/ipfs/QmZh2toLnrQDWaNYhS5K4NoW7Vxd2GdZx9KA77vKEDLAqs" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol": { - "keccak256": "0x9641abba8d53b08bb517d1b74801dd15ea7b84d77a6719085bd96c8ea94e3ca0", - "urls": [ - "bzz-raw://77415ae0820859e0faf3fabdce683cce9fa03ea026ae0f6fe081ef1c9205f933", - "dweb:/ipfs/QmXd7APqoCunQ2jYy73AHvi5gsZofLpm3SzM6FPo7zRPfL" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol": { - "keccak256": "0x5cf5f24751b4e3ea1c9c5ded07cedfdfd62566b6daaffcc0144733859c9dba0c", - "urls": [ - "bzz-raw://cae7e35007a714f007ea08045ef7c0cfa6c91fd2425b5028b2d49abad357a5f0", - "dweb:/ipfs/QmcDBs5tsiyB35b8cwzWQWNnpkawb3uuHRaqE77Hxm2tve" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol": { - "keccak256": "0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc", - "urls": [ - "bzz-raw://d8ff6a8a89297fa127f86b54e0db3eba1d6a6eeb4f6398d3c84d569665ac8f1b", - "dweb:/ipfs/QmVSwhw6xFDrLRAX4RXaCM47yBaBtac4wf36DYEq6KCTvT" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol": { - "keccak256": "0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972", - "urls": [ - "bzz-raw://7e1b245d58221d16d8b5e0f01ef3e289a24a7df1ace3b94239e4d5b954ad5927", - "dweb:/ipfs/Qmappsgp7PCY9rSSNE9Cdn4BTRX591WfCSEgq2HxhA3z6S" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol": { - "keccak256": "0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901", - "urls": [ - "bzz-raw://b18b23a1643fc6636c4ad9d9023e2e6ca2d3c2a4a046482d4655bff09950598d", - "dweb:/ipfs/Qma6G5SqiovwrMPfgqTrRngK1HWW373Wkf9c6YP2NhXpPk" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol": { - "keccak256": "0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e", - "urls": [ - "bzz-raw://5173fc9143bea314b159ca5a9adb5626659ef763bc598e27de5fa46efe3291a6", - "dweb:/ipfs/QmSLFeMFPmVeGxT4sxRPW28ictjAS22M8rLeYRu9TXkA6D" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol": { - "keccak256": "0xf1c07bc61e7b1dce195ed12d50f87980fbf2d63cac1326fd28287f55fe0ba625", - "urls": [ - "bzz-raw://060f10ff7afc33c1c2f2b4b5ba29231fd3c943146488084d0e4ab99fce991d97", - "dweb:/ipfs/QmaSsefAqqEqtf8FgFUmDYMwTsAty3X1pqDb6SiFvry6B3" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol": { - "keccak256": "0x2ebbcaaab3554edcd41b581f1a72ac1806afbfb8047d0d47ff098f9af30d6deb", - "urls": [ - "bzz-raw://2d4b2cf5c3b16dc76c6767f285b57c0af917972327b2be3f7cba5825402f5fc1", - "dweb:/ipfs/QmQQWiHE2jKEDbjzGutSoZwtApSXYfLqZt5CxEpFj8xyvT" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/CalldataBytesLib.sol": { - "keccak256": "0x5c0db161cef6603c3b256d4220f489419e7478ef775e52a80056654129c61875", - "urls": [ - "bzz-raw://a33245d0fdd3992bb56b31d1840108d36bb46c8d617b659ef1af8dd7ed86302d", - "dweb:/ipfs/QmWyBqT7Tdrfn5zz9xYM3V1PBtfAZAVwwCrrKwwfi3wMQK" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Errors.sol": { - "keccak256": "0x35bcd6ca99c4c8d9f7d8413d1b92fb4a4d4a420ce3bf64b0fb01e68e6bcf2fa7", - "urls": [ - "bzz-raw://0ac14f98563f9c610c936c93e71eff657efaba1e1d892be6a215aa5cb1f63a24", - "dweb:/ipfs/QmVZZ8owwfDGLQTAzQJJqmYY4KsrChDagh5GBK7rChT5wb" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/GUID.sol": { - "keccak256": "0x8a44524af7deb96593f6b5606e9973654a113e1687809f2e45d4a91ba89862d5", - "urls": [ - "bzz-raw://32dd0b5d1946e0cd5c7b728086aafac50a62c061115afb8b41254589c8a6732b", - "dweb:/ipfs/QmR9QqtiAUPRLaRVv5wnth3NGPhdWB8rJmWYfz3o5Z1mWj" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Transfer.sol": { - "keccak256": "0x621d6dd5b8b7e827351459fff4ac87c16ba4656757592cf67de8b199aea4cf9a", - "urls": [ - "bzz-raw://345aa8c007ed8b96a74260d289545713f1d7180df270d67687e3a540a61fa5c0", - "dweb:/ipfs/QmNWCvpqSuar6UGLDVshUc7shUv3pt1J5FTf9VyZZ13wXL" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/BlockedMessageLib.sol": { - "keccak256": "0xb2b55968b26294139742adee6c155897c8334f4c6bf72f1940456cc84e6fbab9", - "urls": [ - "bzz-raw://e758a1fdcea4039b19f1252e4e2958f4a0e05517eb3e151784431533446c225f", - "dweb:/ipfs/QmRBG345abgyUeTnSpuxdK1WbK5pvwhSmvBEgW1mnoYqTq" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/BitMaps.sol": { - "keccak256": "0xaad3c72ef43480d2253fd48b394e8fb7286d009991d2bc4e61be58ce48ac5ee9", - "urls": [ - "bzz-raw://b8c02b14f954416ba2148b389c87da8378ac8dd16ba3d458cbbfba8b0fd8639f", - "dweb:/ipfs/Qmd2EEQhYL2VmgJi1V4uiHM2WcYxF9iBtxSgcFkbS21rQD" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/ExecutorOptions.sol": { - "keccak256": "0x621c6090fc432f94a99f677a95d72b75f56db89ddc5fc870669777a313587c28", - "urls": [ - "bzz-raw://69086166f16d29e30c5eb9ca2f97afb27569afe619807d79736833a809a512d2", - "dweb:/ipfs/QmcZqXjFuVdTrfbteKBF3GuEpjVFZ2YNZTa3J87dyLsqav" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol": { - "keccak256": "0xc84cf1bf785977fe1fbe7566eef902c2db68d0e163813ebe6c34921754802680", - "urls": [ - "bzz-raw://de686666fc16fa432d4208d85cec87dc952faf3e481b683b9adf4b4610db4b09", - "dweb:/ipfs/QmdmQeopzmxqRzi9DNB4EJDrYUXFfD7fUhnGhSni4QejUW" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-v1-0.7/contracts/interfaces/ILayerZeroUltraLightNodeV2.sol": { - "keccak256": "0xf1f36bbbc40d03b96affa151affb47da75a1b69dc79f4b311841a072d12fdd22", - "urls": [ - "bzz-raw://9f4f188c2998ecbda28a389ad8038da15c2260b1df6a8d135b3d96422e292fda", - "dweb:/ipfs/QmeThR83tcaM4CmxQ2AamTafsgjcbGMfZtYcDHqw2CcwKa" - ], - "license": "BUSL-1.1" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/OptionsHelper.sol": { - "keccak256": "0x729ce2290d16a45a16ad936263803db6a6bebcfba5c063ebe0f0fd284ba828c0", - "urls": [ - "bzz-raw://7494875394fc968684761b22bb5fe05789f8d84ba07b2e0ab579ce0afe7aa973", - "dweb:/ipfs/QmZNrexRXL3ef3UnES5e8JcdyMJ5HVftwGKQjGC5CwNg9Q" - ], - "license": "UNLICENSED" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/TestHelperOz5.sol": { - "keccak256": "0xe60b21a345bb1c2e9ee2fb7301398d342da0acc3a730b442106a2ad9478f7a63", - "urls": [ - "bzz-raw://ee7e0a47ae666a16e33a51f946da4fe549e8f4c6ea1f1978850515172c44656f", - "dweb:/ipfs/QmR2AZ9pYiwMCV4wPPVaGGPRJEjuBoFjJEesHtbAYhNoFq" - ], - "license": "UNLICENSED" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/DVNFeeLibMock.sol": { - "keccak256": "0x4c2e212f73a1c2a2989af947eef715ebacb11a80d55e5fd18a89a905790971b1", - "urls": [ - "bzz-raw://30eb29a81414780828903f5320367e89020af5a4055b768e2be08d43605b1688", - "dweb:/ipfs/QmeC5bVtmaY6tn6Z2XpVFXAkxVWQCQUzKbP2V9nPdv3vCr" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/DVNMock.sol": { - "keccak256": "0xdafd7da964b6ac8637d543c30370739bb805f7e10b42043444689240b5c27b3f", - "urls": [ - "bzz-raw://154067632b4799f49c0b3a8c5304499f60b2c232ebd17c21912efdb72421bdab", - "dweb:/ipfs/QmUEr6VsNt2odnrL3xFrLKwZTVLkLXi8BDzpPWeiCxC63T" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/EndpointV2AltMock.sol": { - "keccak256": "0x026b2f530b336ee237f37dde6f617acefbbf74d933d2a80da4216882f78be1a9", - "urls": [ - "bzz-raw://097a9fdd5a321e6e8455a1db00f2abda6e810c31ce47d1bced9e574be262a28b", - "dweb:/ipfs/Qme17zGk93k5BghCWFXqeqppVahH4dHuw7U76K4EcJxsY1" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/EndpointV2Mock.sol": { - "keccak256": "0xe9096c53611537a121589b56b882fc4dd797d5cac60def708f794a15e3ca98ff", - "urls": [ - "bzz-raw://4092d5dd582b48a5f703e4361fc5fb66050b5fe3253891175275dc832bc8e045", - "dweb:/ipfs/QmXSTJJNx4rn2ByCaE6vxiHnkm366ZU7dScYH1JsUbVZ1V" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ExecutorFeeLibMock.sol": { - "keccak256": "0x4a47aaf41049710d5f05fcc66885cacc0dabc1864778b56ac75a59b61eef5a01", - "urls": [ - "bzz-raw://c9b8c26b38cb138c3225efbab8b1d2e0f43343798658a0f2ed9669c16e5a97ff", - "dweb:/ipfs/QmV21G7Qwoi9gXYT8bKXDwnQDvjdZCAo2M9MqTKq4nQU9U" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ExecutorMock.sol": { - "keccak256": "0xbcdc4500270cd5496f10760ffe9e0444d23e454dd0ae2555e0661acf22fce96f", - "urls": [ - "bzz-raw://b816999bcfef5586b5e80bba21584b821fd7f7b32c276492adee530ffa83bb73", - "dweb:/ipfs/QmXLV8ieYdrTBERajBCVuMzknFyPHJjnw7MGkzULAdjdt8" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/MultiSigMock.sol": { - "keccak256": "0xc7c90e073e52af1da6c07e3d3f7477b064a89e78935c16e9872457df503c6830", - "urls": [ - "bzz-raw://cef1ae2d517e152616aea7f8f5c15fa1fbabbec8896a9c30a9eed35fb56b4f2f", - "dweb:/ipfs/QmeitPMQht2WfbR9ZLzwKWgThamdsJkobeaWo6ojTCoQG5" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/PriceFeedMock.sol": { - "keccak256": "0xd8f419b25c648287b5b7f0923b069b2449c51e807c9153df39445f2f83e55f44", - "urls": [ - "bzz-raw://bb300a5bb62655073c7aa9cd2221e60e59ce904a0d73f7f5e06af7c9df3445ec", - "dweb:/ipfs/QmcYb2qFevymfkWhTqGaNH5HwK9MMUixzAKJJAdNQHSCbw" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ReadLib1002Mock.sol": { - "keccak256": "0x1403b7a91b185fd8211f00fa380a0b8918e92e663c403a1dafa30f1667091fdc", - "urls": [ - "bzz-raw://7494444260a981ae9a9e11cd8981fad35a6b45a9c09cf72c05aad88ee191e7f0", - "dweb:/ipfs/QmaTyujm37PsCobQ36ootD5xVgKyBYqeUTdTJij9x3oaN6" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ReceiveUln302Mock.sol": { - "keccak256": "0x8e60b01e9bc801167b374dc119b41832d546afd43c143a0cd15ab1941198e121", - "urls": [ - "bzz-raw://bb1512762417dda9cd81fd9b41f590fd05888358fda1c2ab7e79e0cfabf61ec4", - "dweb:/ipfs/QmPAgBwdjLz29vE5L1Jth1Wvx6TTM1ig97amVtAyDFF61Q" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/SendUln302Mock.sol": { - "keccak256": "0x0c5cb54ec6b18e77aa653f7d774ac9d010684dafc96794d1d02f12b6885cc348", - "urls": [ - "bzz-raw://24c5a8ba8d92c16ec3047229167528f57b38cbd64882140014126ca51ab14574", - "dweb:/ipfs/QmXQsMDtZ3qNmjnr2LYgctBpPKxffuC6EeWHvFUtLBS5st" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/SimpleMessageLibMock.sol": { - "keccak256": "0xe6c93840c612592686732dd516550816eb77d6cde92514220eacb72443dcb9b9", - "urls": [ - "bzz-raw://a6a00fb60b7ac66e746f0471c2262fc98febafeb8acad8785d38ce1ddc4cc991", - "dweb:/ipfs/QmboboJskbXBbsyAGGRbW4JQCPJo9WiLFy7nwQxGVS9UhZ" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/WorkerMock.sol": { - "keccak256": "0x6c5bc31c117033dd35fa7ab3b13b1647a4b449c5f5b4cbff41bce8a63529ab97", - "urls": [ - "bzz-raw://01aa1d3f3b8e2fd4b544312d96916b16b97e01ab740e2bae1137723b2f1a31b1", - "dweb:/ipfs/QmVMemJ4MSgi6y9NxDdSeB6QbJRtCWojJNxzs3CRLT56EA" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/test.sol": { - "keccak256": "0x8758531bbac3972efcf1fa46383dbe1d276406fe527bc7abb2f236486278e83b", - "urls": [ - "bzz-raw://1f64264d61506847acf8761e84aff690cebe830958eac00bac7924d8be569240", - "dweb:/ipfs/QmSekDJvJ82MZAmr63n7YvfLzQ7gS4NLSHPmHL3GN3rw8k" - ], - "license": "GPL-3.0-or-later" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Base.sol": { - "keccak256": "0x4ff1a785311017d1eedb1b4737956fa383067ad34eb439abfec1d989754dde1c", - "urls": [ - "bzz-raw://f553622969b9fdb930246704a4c10dfaee6b1a4468c142fa7eb9dc292a438224", - "dweb:/ipfs/QmcxqHnqdQsMVtgsfH9VNLmZ3g7GhgNagfq7yvNCDcCHFK" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdAssertions.sol": { - "keccak256": "0x1a0dee4d8b2c81e9318e87dd85ef009467ebf7dba6575530d1fce94d34dbae60", - "urls": [ - "bzz-raw://ddd790c86ddde1013d1f7a552a80168eacf2e9244077f96799180644ad523a5b", - "dweb:/ipfs/QmYinBFt9uEVFXP9ytT9CDoNpzWieQVgLWRFRNiypMzJaL" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdChains.sol": { - "keccak256": "0x598b85609125830885b8fb54a18f447d04f8dd799aca3de81baef35eb6b783c0", - "urls": [ - "bzz-raw://c9c128aae4f5668d8c8f71e9e6d9379d8451b8713d139cb66a02d23bc1c75f69", - "dweb:/ipfs/QmVRihXHWi2yg9CcAhzKf63Y7m6gWz4P1giGMhXUHT3DFu" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdCheats.sol": { - "keccak256": "0xb72f3519e0bf7d31df5d68557525f4fc55d861c3fb3b0f7793144ef7c94cbeb7", - "urls": [ - "bzz-raw://f3456d0f78e6f61203fa7871ba2df0d35925f10db3baee14be623ce2a35b84e2", - "dweb:/ipfs/QmWE6QQSBvJifHMraisBTrf1x4WCwrDoTPLX8UKajTiApc" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdError.sol": { - "keccak256": "0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77", - "urls": [ - "bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6", - "dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdInvariant.sol": { - "keccak256": "0x67299bfacd77fddfa2a67b8e2b901e0e333618a4975fb94850b07475e51f6de6", - "urls": [ - "bzz-raw://1b61121d310f4053ce344b345b4a9ccf43b059daf9097ec2647f594beaca896d", - "dweb:/ipfs/QmZUCoTtXBM9zfAZVbj2dFPPnKaV1CSZzXE7zictyg3Gfz" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdJson.sol": { - "keccak256": "0x8f914dbd016bd0e318fe2b8bd556fbc8256c7cddc24e3e4fcb9f3c1c1935592d", - "urls": [ - "bzz-raw://19e704df493dde38323303b07d18cadfeb4dcadf1ddc2301add4aea9474fbb5e", - "dweb:/ipfs/QmZasuGiLK8LHwWtvpqEBxUR6QFY6GdzLMTJ9q7CMf8PNZ" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdMath.sol": { - "keccak256": "0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2", - "urls": [ - "bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92", - "dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdStorage.sol": { - "keccak256": "0x4298f3f4cedaedb07029820b1daad2c03af45379559392201f7bf3ec71105811", - "urls": [ - "bzz-raw://6e062f36d8d1ae3c383ef8975757926eaa9c4de3a92b5f1fe2d12748bcd8db32", - "dweb:/ipfs/QmcWkv3ia5Ew4DZNcudMNSTNXZ3W2QiXTZunRd44e9BT8z" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdStyle.sol": { - "keccak256": "0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d", - "urls": [ - "bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8", - "dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdUtils.sol": { - "keccak256": "0x502b18a4becda6ecd91fa8b419d8034946bfa80e6cc7f6497f51f8565bfadae0", - "urls": [ - "bzz-raw://bf499ee483a1dfd02023d4ce78ed4029a49794ccd5b849aaab912faea0d2ba61", - "dweb:/ipfs/QmP6hwNZW7sYbQK9fBzuZWxfLm6Swx2nKzvZ54qWNqQkzX" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Test.sol": { - "keccak256": "0x39b1729d5868c8e94ab8af16751eb500a17fe3870dc627d2b7ddcd5df18d7ad0", - "urls": [ - "bzz-raw://1568c82aff125cc4b0fc168be9d67ac313f469a3c7405c5493caecaaaecfb765", - "dweb:/ipfs/QmXByuZReJsdu1jDcxj1FcmpcUnzoBcqybn9kWgDAECWri" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Vm.sol": { - "keccak256": "0x87ba9f3edc254e529db9e3129c954391adcc7fc8574203767979d8d2f1e724b9", - "urls": [ - "bzz-raw://4d16c08d80d9f2869deb6350642cf5af624d21fce6b3b023abbcdedc62e195fe", - "dweb:/ipfs/QmURpnnFECPKt3i7P7jQRZpr4ZBXjRGcZ9KzcbKzsgYR2W" - ], - "license": "MIT OR Apache-2.0" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/console.sol": { - "keccak256": "0x91d5413c2434ca58fd278b6e1e79fd98d10c83931cc2596a6038eee4daeb34ba", - "urls": [ - "bzz-raw://91ccea707361e48b9b7a161fe81f496b9932bc471e9c4e4e1e9c283f2453cc70", - "dweb:/ipfs/QmcB66sZhQ6Kz7MUHcLE78YXRUZxoZnnxZjN6yATsbB2ec" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/console2.sol": { - "keccak256": "0x954646445d1014c3cd85c7918f5e7adeeca5ee44b68c00bafa237e597a4e35ea", - "urls": [ - "bzz-raw://516fa3be52da4763147175bfba4be0aa011fadbb0c1afb01f97265bd4cee7973", - "dweb:/ipfs/QmdixAyMJefx7qePChgdxcBH5MxhmN7vsqPuPLx3CgrVmF" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/interfaces/IMulticall3.sol": { - "keccak256": "0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a", - "urls": [ - "bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0", - "dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/mocks/MockERC20.sol": { - "keccak256": "0xd8703f49411737ecf8d411f8fa66b2bf0ef972ba28b7a4adf1748c63df1bf682", - "urls": [ - "bzz-raw://b7c10a6b8112f6fe3cdccb6240ecd382765216b1a82e9a86a0fec8f5e09eadd1", - "dweb:/ipfs/QmdRvPCU4RkjMHsTu3Ric1ZEF1AWDNLp78unFC5aWP17xq" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/mocks/MockERC721.sol": { - "keccak256": "0xa24468244abb66e663fb7eee6463cb518eb9a7c14e1071548ff564cca825bbca", - "urls": [ - "bzz-raw://145585a2194aa6e2d30edfe709ef2814e20b1b4540469aa6a8f50c841fcb9070", - "dweb:/ipfs/QmZrwbvtpbtTxqbW5phUrwb3F1tBiPSQc6jZJAXBfsBsAh" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/safeconsole.sol": { - "keccak256": "0xbaf41fdc6c54297e7cd8250e48b0f20eaac918e342a1028cef3f9a52ac086381", - "urls": [ - "bzz-raw://a500ad81dea226f9910e6b50f99a9ff930105e393a692cbfb2185e4cdb4424ae", - "dweb:/ipfs/QmVbUQpXNMmMWRiy4FvBNczzq46BMGfUoBikvSHNiCxVTq" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/access/AccessControl.sol": { - "keccak256": "0xa0e92d42942f4f57c5be50568dac11e9d00c93efcb458026e18d2d9b9b2e7308", - "urls": [ - "bzz-raw://46326c0bb1e296b67185e81c918e0b40501b8b6386165855df0a3f3c634b6a80", - "dweb:/ipfs/QmTwyrDYtsxsk6pymJTK94PnEpzsmkpUxFuzEiakDopy4Z" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/access/IAccessControl.sol": { - "keccak256": "0xc1c2a7f1563b77050dc6d507db9f4ada5d042c1f6a9ddbffdc49c77cdc0a1606", - "urls": [ - "bzz-raw://fd54abb96a6156d9a761f6fdad1d3004bc48d2d4fce47f40a3f91a7ae83fc3a1", - "dweb:/ipfs/QmUrFSGkTDJ7WaZ6qPVVe3Gn5uN2viPb7x7QQ35UX4DofX" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/access/Ownable.sol": { - "keccak256": "0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb", - "urls": [ - "bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6", - "dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol": { - "keccak256": "0x9b6b3e7803bc5f2f8cd7ad57db8ac1def61a9930a5a3107df4882e028a9605d7", - "urls": [ - "bzz-raw://da62d6be1f5c6edf577f0cb45666a8aa9c2086a4bac87d95d65f02e2f4c36a4b", - "dweb:/ipfs/QmNkpvBpoCMvX8JwAFNSc5XxJ2q5BXJpL5L1txb4QkqVFF" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/interfaces/IERC165.sol": { - "keccak256": "0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724", - "urls": [ - "bzz-raw://11fea9f8bc98949ac6709f0c1699db7430d2948137aa94d5a9e95a91f61a710a", - "dweb:/ipfs/QmQdfRXxQjwP6yn3DVo1GHPpriKNcFghSPi94Z1oKEFUNS" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/interfaces/IERC20.sol": { - "keccak256": "0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c", - "urls": [ - "bzz-raw://a2608291cb038b388d80b79a06b6118a42f7894ff67b7da10ec0dbbf5b2973ba", - "dweb:/ipfs/QmWohqcBLbcxmA4eGPhZDXe5RYMMEEpFq22nfkaUMvTfw1" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol": { - "keccak256": "0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7", - "urls": [ - "bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db", - "dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol": { - "keccak256": "0xca2ae13e0610f6a99238dd00b97bd786bc92732dae6d6b9d61f573ec51018310", - "urls": [ - "bzz-raw://75f8c71ce0c91c40dd5f249ace0b7d8270f8f1767231bcf71490f7157d6ba862", - "dweb:/ipfs/QmYXgxeDyFHvz3JsXxLEYN6GNUR44ThHeFj5XkpkgMoG4w" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Address.sol": { - "keccak256": "0x9d8da059267bac779a2dbbb9a26c2acf00ca83085e105d62d5d4ef96054a47f5", - "urls": [ - "bzz-raw://c78e2aa4313323cecd1ef12a8d6265b96beee1a199923abf55d9a2a9e291ad23", - "dweb:/ipfs/QmUTs2KStXucZezzFo3EYeqYu47utu56qrF7jj1Gue65vb" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Context.sol": { - "keccak256": "0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2", - "urls": [ - "bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12", - "dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Errors.sol": { - "keccak256": "0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123", - "urls": [ - "bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf", - "dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Panic.sol": { - "keccak256": "0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a", - "urls": [ - "bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a", - "dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Pausable.sol": { - "keccak256": "0xb2e5f50762c27fb4b123e3619c3c02bdcba5e515309382e5bfb6f7d6486510bd", - "urls": [ - "bzz-raw://1a4b83328c98d518a2699c2cbe9e9b055e78aa57fa8639f1b88deb8b3750b5dc", - "dweb:/ipfs/QmXdcYj5v7zQxXFPULShHkR5p4Wa2zYuupbHnFdV3cHYtc" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/ReentrancyGuard.sol": { - "keccak256": "0x11a5a79827df29e915a12740caf62fe21ebe27c08c9ae3e09abe9ee3ba3866d3", - "urls": [ - "bzz-raw://3cf0c69ab827e3251db9ee6a50647d62c90ba580a4d7bbff21f2bea39e7b2f4a", - "dweb:/ipfs/QmZiKwtKU1SBX4RGfQtY7PZfiapbbu6SZ9vizGQD9UHjRA" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/cryptography/ECDSA.sol": { - "keccak256": "0x69f54c02b7d81d505910ec198c11ed4c6a728418a868b906b4a0cf29946fda84", - "urls": [ - "bzz-raw://8e25e4bdb7ae1f21d23bfee996e22736fc0ab44cfabedac82a757b1edc5623b9", - "dweb:/ipfs/QmQdWQvB6JCP9ZMbzi8EvQ1PTETqkcTWrbcVurS7DKpa5n" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/introspection/ERC165.sol": { - "keccak256": "0xddce8e17e3d3f9ed818b4f4c4478a8262aab8b11ed322f1bf5ed705bb4bd97fa", - "urls": [ - "bzz-raw://8084aa71a4cc7d2980972412a88fe4f114869faea3fefa5436431644eb5c0287", - "dweb:/ipfs/Qmbqfs5dRdPvHVKY8kTaeyc65NdqXRQwRK7h9s5UJEhD1p" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol": { - "keccak256": "0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8", - "urls": [ - "bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621", - "dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/math/SafeCast.sol": { - "keccak256": "0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54", - "urls": [ - "bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8", - "dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/structs/DoubleEndedQueue.sol": { - "keccak256": "0x1e1d74658d7f4eab3d4f8fb0c6c5953bc5f629d9425e978d557dabff7b58b217", - "urls": [ - "bzz-raw://be0175d00008d452d3d553890f73a3d5d51dff4372f720336c8b98f26822fcdb", - "dweb:/ipfs/QmUkE8g5xPExWoSAKwdi5ww1qJJVtEWtjSF93G2LMQkgD3" - ], - "license": "MIT" - }, - "node_modules/solidity-bytes-utils/contracts/BytesLib.sol": { - "keccak256": "0xa5b10f04797d5a10a9ba07855108b6bd695940e6a3d128927b2f74a0d359868a", - "urls": [ - "bzz-raw://a38d7680aacbb18dae659876b396b73bcc8f759672213f8a0efc4129e2648535", - "dweb:/ipfs/QmfKFnwpTEGAnbRnZxMuv3mRCG9S9WMjFhFL23bftBT2Jq" - ], - "license": "Unlicense" - } - }, - "version": 1 - }, - "id": 71 -} diff --git a/examples/oft-movement/out/TestHelperOz5.sol/IOAppSetReadChannel.json b/examples/oft-movement/out/TestHelperOz5.sol/IOAppSetReadChannel.json deleted file mode 100644 index 36ccd9537..000000000 --- a/examples/oft-movement/out/TestHelperOz5.sol/IOAppSetReadChannel.json +++ /dev/null @@ -1,932 +0,0 @@ -{ - "abi": [ - { - "type": "function", - "name": "endpoint", - "inputs": [], - "outputs": [ - { - "name": "iEndpoint", - "type": "address", - "internalType": "contract ILayerZeroEndpointV2" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "setReadChannel", - "inputs": [ - { "name": "_channelId", "type": "uint32", "internalType": "uint32" }, - { "name": "_active", "type": "bool", "internalType": "bool" } - ], - "outputs": [], - "stateMutability": "nonpayable" - } - ], - "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "methodIdentifiers": { - "endpoint()": "5e280f11", - "setReadChannel(uint32,bool)": "f0a9e481" - }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"endpoint\",\"outputs\":[{\"internalType\":\"contract ILayerZeroEndpointV2\",\"name\":\"iEndpoint\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_channelId\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"_active\",\"type\":\"bool\"}],\"name\":\"setReadChannel\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/TestHelperOz5.sol\":\"IOAppSetReadChannel\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/MessageLibBase.sol\":{\"keccak256\":\"0x14899a4398251439938d6ef8a15ea8c6acdddc98a7b0066d7e63676192dea0d1\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://3998d03de7025c2c601a4fdcaf9475d12a1ef661fcf1a685ece84fdde6498cf9\",\"dweb:/ipfs/QmReknRbiGAiPqq9toKyXKo6hUKXrQPJyyS6LnTGjiDKoY\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/ReceiveLibBaseE2.sol\":{\"keccak256\":\"0x2fdbd1b13751a264cd6e7fac518a2685b15c968806c03f1d18b177fc0526e9a9\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://600af48bb67939b5f4a3a00c76863ee290a55325ea8697f7cc4b46321ab26ef2\",\"dweb:/ipfs/QmdRigYaB6TXczjtVkvwpUEBwvvvDuymFoViMCB6xQPYUU\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/SendLibBase.sol\":{\"keccak256\":\"0x400eaa11c7d50b4c25b7625290ff00937b6875ad3986b353c37a4e62b5a834b1\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://1f51eb0785d3630815a9d63de1c1331fe966df4c3f2fb6750b8da7be9e9743a4\",\"dweb:/ipfs/QmaAEf1kjhhff3AUhRiPm6ikpk2YMMrpKc2ccYzNs7waBy\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/SendLibBaseE2.sol\":{\"keccak256\":\"0x90ada11d0a330732c56b989e59c8272b70f956a5d7be2cf209d6d51a51d35a9e\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://0abc7a6d07ec40a3a922256ad05bdd6eca10550d85bfd2e67147473617bb0497\",\"dweb:/ipfs/QmRDphmFhx1scRJXcusg6pUhVQvp941oCJwnHGAPdrNY4T\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IExecutor.sol\":{\"keccak256\":\"0x2fd26e454b060ede7afa15f8bbc67bd43f9181b6405ca411d36c8b538be016af\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cf2142e83214bb392f69ed14266718cfd803f849a7239ee9a1950ddf66553696\",\"dweb:/ipfs/QmSZ2mPMZqWBetMU8VESKtxy7UdSThUVmJmTFMHEyKLTGZ\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IExecutorFeeLib.sol\":{\"keccak256\":\"0x801d12eca6d6b232fb91d949cdb70a4c547c5e27e73555f2f1eb9e757c639bcc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b61bdffe26ff3902edab3efb0b5af3808ec9e28d72db95b77128502b9bc7638d\",\"dweb:/ipfs/Qmcyf3npDDEq28b9XqmXgSGyQegj2cxUZQ3UekSNf34g8M\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroExecutor.sol\":{\"keccak256\":\"0x3647af317ee126b1247a782abb30e59ec5ab21b4945f1d3b4370d1fa3c1bf347\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5b51cd5e7347ee869a06bd57a698f40e4a901ec7fdcb27f0ef485e4a0e1e9be4\",\"dweb:/ipfs/QmP2Nc73veRzLGdUahkjhQAiKR9ZWYiUtSGwoMB1sPXxUp\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroPriceFeed.sol\":{\"keccak256\":\"0xb4df72798a64f5ea44775b526e0c417c3de0ffc661659d7b31d5b28567c6fbcc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://30ca5fd5e3227a7bffc51654ee3bfebdd591a131f86846ac42dea8a40c5cf1d8\",\"dweb:/ipfs/QmXNmQCF8TZAFpUxgPa1rgWt4ktsBV38A8Hax7TiYLgybW\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroReadExecutor.sol\":{\"keccak256\":\"0x360936885f173f816ffb47e555d480928e74eb1ad54a76af0f4595ecba2d5657\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://16b5095e6439b1e416eb70571a1dd8f4f21a0d77b19c9e510ca289d99e5e09ab\",\"dweb:/ipfs/QmZ2mjQDQ35gJseyzmQhik4cBgN2ESADzofFNVFvgS64hv\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroTreasury.sol\":{\"keccak256\":\"0x2aab2a3cf50e20af56d9204b1367d52a47abba0b0c7c21f304d413de1ced6345\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f8b603b5e5e62c621715f8449280af240a4add8721c4ae8f5e8e491507f6e4c5\",\"dweb:/ipfs/QmUQ7Ti7CPmKnRbQFN9TLvVbeZhsi1xUjqZPTJ36dCZ6y8\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IWorker.sol\":{\"keccak256\":\"0xa6b61913767305227576cc6da5067de4208f09a4f58bfbfe32beafdfae9869b1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7fce83bfb831f383606aee7f5ff68a330c8526bb1036f9ba0813d3e4fa8d534\",\"dweb:/ipfs/QmR7zAqJkmCgBj6sguS8t2WthY5k6FwsakgH4UY11uqD4n\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/libs/ExecutorOptions.sol\":{\"keccak256\":\"0x441b723f2f597be2ec2bb361fcf3f11852c23534db1cfa7d2ffff7e61d228e3c\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://636817d20f90f75032e35376256cf5f4d2a047d6541b45f644d82a2e4dc8f1eb\",\"dweb:/ipfs/QmcEFRxCmmm9hKbqi7Powj6ATbw4JXXJW4rxfwMcxWsDnT\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/libs/SafeCall.sol\":{\"keccak256\":\"0xc3b7b7927472f7c1ca9703af310e9050c798afaccf399ad0f131e179b8582c8d\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://e5be13af32ff6b371985d405bc6fe8ac2faf5445bd88fda2dab4b869f66e3f89\",\"dweb:/ipfs/Qmd21k4H2tAHKrpiuHUbH87eNtHLLJzHj9ZCrMh8AKfDHh\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/ReceiveUlnBase.sol\":{\"keccak256\":\"0x36c93de122bbb74ae31e3eacf567c0a3bc649ed3ebb2766c76dfa93aebcace44\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://e83bcaa80e2715e68818dd53e4dc6ad8e665b8249d69a08cf2d2635b9757fb79\",\"dweb:/ipfs/QmSKh6NgaTrTSa48gDzGGqGNAcs5jVEHgZSzZzbuJSEsxo\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/SendUlnBase.sol\":{\"keccak256\":\"0x6d9962ffa476ac2efb78f1415bb2f650a30eedeef2b75fdab0aeafaf3e8da6a5\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://21f32c56b67d2e770444b809c1a85a96627194c605ad317d482dfc5b6ce7e8c2\",\"dweb:/ipfs/QmP5tzoMDzTdduEcSpYHgg6WCHLQGuc1djDMFUBycJPLCU\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/UlnBase.sol\":{\"keccak256\":\"0xfdb1d04f4996c0a9d35abfbfcf10d978da638885eb77d0a9dc35cea5993074e3\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://776d58d88d13b058f236cf18c32b4b9718a021513fc4e198287f4fe18ec5aba4\",\"dweb:/ipfs/QmdNX8jJu2aXJ8Dpbt2ohfhT8RKQLuvh58sW6SAXcUTcV9\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IDVN.sol\":{\"keccak256\":\"0x6becdfab6c1fcaf98f402bee48495895e54825f9d6eef6e292dde0caed628284\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2273341033856737cd46704a1a769768feae696d0e7a912f5be9de8ffdd2180c\",\"dweb:/ipfs/QmY1xBAmMX9jND1HAb7tDyZNPgFReXMqs1vtmHbShKZFQY\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IDVNFeeLib.sol\":{\"keccak256\":\"0xed4a8e77148328132d8f4f2726c4aeec6b490cf03a1d5940bde0ab8d72954de9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7b07802ca32bf10f68e51da872fb358807446dc2242314374d226493a6e9e7dc\",\"dweb:/ipfs/QmfSwWPLgitDy2a9S3mCNBDk6kAcK9n186Dtvj7qg84i12\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/ILayerZeroDVN.sol\":{\"keccak256\":\"0x308e77078242fd5c5746ec29c12e618249134f9e4377c0028ab8f59c07a6014b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2f92cf397a8d26864ac92dfcd1b98e92a32c47f556a62c5e6dc1618734c1caa3\",\"dweb:/ipfs/QmXN3XJXEKq5djV6HeM6jrLycmJPFhMhecsYZ2TaRsQmhg\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/ILayerZeroReadDVN.sol\":{\"keccak256\":\"0x759a3ee7614c2de54b152b0278845f91ac9760d8c22045b2fee89e3e744402b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7a2dbf6bcf5bfab408f18c104b34c390e8bfabb0eeb1a10e3a9c0fb14c8c61d5\",\"dweb:/ipfs/QmWxmRbDBkbhGmNsRyXqQXB1QaWRS4qvh6a8achh8DQPKR\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IReceiveUlnE2.sol\":{\"keccak256\":\"0xcdf7e690e5d5c0a3ec26a0d7b1a7fe49c7d16a3634721c3944f77d13ff5d4a91\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bd32a05dde1b83be1ce64fcfb9495d8b9bf0c5b3a5b521ac6c214e87e32f3cdc\",\"dweb:/ipfs/QmcDKTor8EQf3cbiWYmeFb9qzUM8JGPzGGN9qJnYjP1nN7\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/DVNOptions.sol\":{\"keccak256\":\"0x2beee03cdf59a9bc72e94d08b69cb2e908725f4ceabb48651494938100e21e35\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://d88e121a39e74309f3575417df2318e2d2ee8bc8314e68dbf78544a9c393b141\",\"dweb:/ipfs/QmRojBRAyENK21HnjevAWeoZZxtWkYZubB9Y78vCJPYeU6\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/ReadCmdCodecV1.sol\":{\"keccak256\":\"0x52fbab4a114ce9defb2ffd57c0a978eee438b2c232862f7e20475e0dcadd4eda\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://a4d5d4e186e3f2a916ea02c2d1d0761069ab1a5c0d6f74719bbf3501a7ccb899\",\"dweb:/ipfs/QmS2e12U9Fap2EK1CmSBTccL4PCKkHNdKJn2bXCqqKdbRn\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/SupportedCmdTypes.sol\":{\"keccak256\":\"0x6b2534522c163714e499041ecd06aaeb93857373cef82cf2752f162bb7c69f9a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bf6c3545c3b9505692dbfaa29b40cab5ed9dc9b65e5804b6f47b5a76596120e9\",\"dweb:/ipfs/QmNs98oRaMvpYhLCQ5yU256eYNEopFTrLRjjwm3gL4foQ3\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/UlnOptions.sol\":{\"keccak256\":\"0x5df07fef16b20767f7524c367d90f696c12e8ce0e4fde7aecc9d83fb2b6b0e27\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://0997203f57d736e56ebb3d736550f1c7ff7950c8df0574c7abe95e22f847b850\",\"dweb:/ipfs/QmZBjkH1vaPLyN3Jx9kGfVZKuTdfVWJfJVLSPok8SpjGbT\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/readlib/ReadLibBase.sol\":{\"keccak256\":\"0x7d312ba1e6288cb201b211f58b814eaaa0b5993721475fbc64321b0e7a2c74d3\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://dfc0dce9362eca0f03b51e0e808389c8bf51fda901e6ca58da169f165e4fc3c8\",\"dweb:/ipfs/QmSXAQ3veWf6gPXcgpX1XLZW9SyLQjBjCSdsFiQTttLNac\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/uln301/interfaces/IUltraLightNode301.sol\":{\"keccak256\":\"0x47f8ebeaa7d96a6f337a18c46e3c532da578c7cb0a13fb6e6f014286b991902f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d51f208b931be54e0ae1801c71c0756251d8c26f8d9b7911be1ad57b3d4a5691\",\"dweb:/ipfs/QmWqjst7jnYtSXQ9pakYHutDvENKLyqNg9nPfMxTH8p2Ed\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessageLibManager.sol\":{\"keccak256\":\"0x64330e51de72e8d38cfc0eb5527d36baada46df4bc14233d3a8ecaf98098d69a\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://49aa45e5a26fc62e7af569cf915be8344adc78dceb6871c4c14bc5d115e59241\",\"dweb:/ipfs/QmbTuW7kzPDYForDEPnaNQi6ZrmWqDxGVnHFiugnvTyq9K\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingChannel.sol\":{\"keccak256\":\"0x8ab8cb12c8beba699c1a7f22ffa812ac553f7038326d0c0d0af77253005cfe73\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://7c7cba4ae16d0ca46ee0a365a204f7257ceaa892224604bf7c8e65c44737e46c\",\"dweb:/ipfs/QmbQX5hJDKMwKdoo6QkdcusXQXH54SVCPe5hM1ycJZsg7y\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingComposer.sol\":{\"keccak256\":\"0x20d36578e810e75346daf064813b76a177087214cae77628b1f9d43798cb52d1\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://475b6f3f1ba5d981d0c5f90b9e892d4f9f539f3b12196639b95770b5be4dbf6a\",\"dweb:/ipfs/QmYyGrnR3vDt8Dqa2paQwTG9qrD6anAGFrDZmMra8KGC6s\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingContext.sol\":{\"keccak256\":\"0x9616f3bd0d7293c9723f2ddf86f9f7030fbd99213c9748557eec8f6d13b25420\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://205e713f5af46f52799e51774ac74dbeee4056de6ddba3c4d78a327536426c54\",\"dweb:/ipfs/QmZ2ZqDwxdjpJbh91qwMfRhhQu4AMEsjUcsTEsdRV4NAys\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroComposer.sol\":{\"keccak256\":\"0xfaca7205d4211ee9208a7e59171e2301731f3d2a20c49b4a839821871f5fdd49\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f254bc60ac26687b5320a43a556e30777b0745abf7cd64d5f4720d9b1d1f7fdf\",\"dweb:/ipfs/QmRSJEZVgxaC3L2DdE6s8P5qkYfM3V5JMeseeFJJqGR4xz\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\":{\"keccak256\":\"0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bacc29fd3866af71e59cb0bdc1cf82c882a4a7f4e2652fd413c9f12649762083\",\"dweb:/ipfs/QmZh2toLnrQDWaNYhS5K4NoW7Vxd2GdZx9KA77vKEDLAqs\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol\":{\"keccak256\":\"0x9641abba8d53b08bb517d1b74801dd15ea7b84d77a6719085bd96c8ea94e3ca0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://77415ae0820859e0faf3fabdce683cce9fa03ea026ae0f6fe081ef1c9205f933\",\"dweb:/ipfs/QmXd7APqoCunQ2jYy73AHvi5gsZofLpm3SzM6FPo7zRPfL\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol\":{\"keccak256\":\"0x5cf5f24751b4e3ea1c9c5ded07cedfdfd62566b6daaffcc0144733859c9dba0c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cae7e35007a714f007ea08045ef7c0cfa6c91fd2425b5028b2d49abad357a5f0\",\"dweb:/ipfs/QmcDBs5tsiyB35b8cwzWQWNnpkawb3uuHRaqE77Hxm2tve\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol\":{\"keccak256\":\"0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d8ff6a8a89297fa127f86b54e0db3eba1d6a6eeb4f6398d3c84d569665ac8f1b\",\"dweb:/ipfs/QmVSwhw6xFDrLRAX4RXaCM47yBaBtac4wf36DYEq6KCTvT\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol\":{\"keccak256\":\"0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7e1b245d58221d16d8b5e0f01ef3e289a24a7df1ace3b94239e4d5b954ad5927\",\"dweb:/ipfs/Qmappsgp7PCY9rSSNE9Cdn4BTRX591WfCSEgq2HxhA3z6S\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol\":{\"keccak256\":\"0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b18b23a1643fc6636c4ad9d9023e2e6ca2d3c2a4a046482d4655bff09950598d\",\"dweb:/ipfs/Qma6G5SqiovwrMPfgqTrRngK1HWW373Wkf9c6YP2NhXpPk\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol\":{\"keccak256\":\"0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5173fc9143bea314b159ca5a9adb5626659ef763bc598e27de5fa46efe3291a6\",\"dweb:/ipfs/QmSLFeMFPmVeGxT4sxRPW28ictjAS22M8rLeYRu9TXkA6D\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol\":{\"keccak256\":\"0xf1c07bc61e7b1dce195ed12d50f87980fbf2d63cac1326fd28287f55fe0ba625\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://060f10ff7afc33c1c2f2b4b5ba29231fd3c943146488084d0e4ab99fce991d97\",\"dweb:/ipfs/QmaSsefAqqEqtf8FgFUmDYMwTsAty3X1pqDb6SiFvry6B3\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol\":{\"keccak256\":\"0x2ebbcaaab3554edcd41b581f1a72ac1806afbfb8047d0d47ff098f9af30d6deb\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://2d4b2cf5c3b16dc76c6767f285b57c0af917972327b2be3f7cba5825402f5fc1\",\"dweb:/ipfs/QmQQWiHE2jKEDbjzGutSoZwtApSXYfLqZt5CxEpFj8xyvT\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/CalldataBytesLib.sol\":{\"keccak256\":\"0x5c0db161cef6603c3b256d4220f489419e7478ef775e52a80056654129c61875\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://a33245d0fdd3992bb56b31d1840108d36bb46c8d617b659ef1af8dd7ed86302d\",\"dweb:/ipfs/QmWyBqT7Tdrfn5zz9xYM3V1PBtfAZAVwwCrrKwwfi3wMQK\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Errors.sol\":{\"keccak256\":\"0x35bcd6ca99c4c8d9f7d8413d1b92fb4a4d4a420ce3bf64b0fb01e68e6bcf2fa7\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://0ac14f98563f9c610c936c93e71eff657efaba1e1d892be6a215aa5cb1f63a24\",\"dweb:/ipfs/QmVZZ8owwfDGLQTAzQJJqmYY4KsrChDagh5GBK7rChT5wb\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/GUID.sol\":{\"keccak256\":\"0x8a44524af7deb96593f6b5606e9973654a113e1687809f2e45d4a91ba89862d5\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://32dd0b5d1946e0cd5c7b728086aafac50a62c061115afb8b41254589c8a6732b\",\"dweb:/ipfs/QmR9QqtiAUPRLaRVv5wnth3NGPhdWB8rJmWYfz3o5Z1mWj\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Transfer.sol\":{\"keccak256\":\"0x621d6dd5b8b7e827351459fff4ac87c16ba4656757592cf67de8b199aea4cf9a\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://345aa8c007ed8b96a74260d289545713f1d7180df270d67687e3a540a61fa5c0\",\"dweb:/ipfs/QmNWCvpqSuar6UGLDVshUc7shUv3pt1J5FTf9VyZZ13wXL\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/BlockedMessageLib.sol\":{\"keccak256\":\"0xb2b55968b26294139742adee6c155897c8334f4c6bf72f1940456cc84e6fbab9\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://e758a1fdcea4039b19f1252e4e2958f4a0e05517eb3e151784431533446c225f\",\"dweb:/ipfs/QmRBG345abgyUeTnSpuxdK1WbK5pvwhSmvBEgW1mnoYqTq\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/BitMaps.sol\":{\"keccak256\":\"0xaad3c72ef43480d2253fd48b394e8fb7286d009991d2bc4e61be58ce48ac5ee9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b8c02b14f954416ba2148b389c87da8378ac8dd16ba3d458cbbfba8b0fd8639f\",\"dweb:/ipfs/Qmd2EEQhYL2VmgJi1V4uiHM2WcYxF9iBtxSgcFkbS21rQD\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/ExecutorOptions.sol\":{\"keccak256\":\"0x621c6090fc432f94a99f677a95d72b75f56db89ddc5fc870669777a313587c28\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://69086166f16d29e30c5eb9ca2f97afb27569afe619807d79736833a809a512d2\",\"dweb:/ipfs/QmcZqXjFuVdTrfbteKBF3GuEpjVFZ2YNZTa3J87dyLsqav\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol\":{\"keccak256\":\"0xc84cf1bf785977fe1fbe7566eef902c2db68d0e163813ebe6c34921754802680\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://de686666fc16fa432d4208d85cec87dc952faf3e481b683b9adf4b4610db4b09\",\"dweb:/ipfs/QmdmQeopzmxqRzi9DNB4EJDrYUXFfD7fUhnGhSni4QejUW\"]},\"node_modules/@layerzerolabs/lz-evm-v1-0.7/contracts/interfaces/ILayerZeroUltraLightNodeV2.sol\":{\"keccak256\":\"0xf1f36bbbc40d03b96affa151affb47da75a1b69dc79f4b311841a072d12fdd22\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://9f4f188c2998ecbda28a389ad8038da15c2260b1df6a8d135b3d96422e292fda\",\"dweb:/ipfs/QmeThR83tcaM4CmxQ2AamTafsgjcbGMfZtYcDHqw2CcwKa\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/OptionsHelper.sol\":{\"keccak256\":\"0x729ce2290d16a45a16ad936263803db6a6bebcfba5c063ebe0f0fd284ba828c0\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://7494875394fc968684761b22bb5fe05789f8d84ba07b2e0ab579ce0afe7aa973\",\"dweb:/ipfs/QmZNrexRXL3ef3UnES5e8JcdyMJ5HVftwGKQjGC5CwNg9Q\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/TestHelperOz5.sol\":{\"keccak256\":\"0xe60b21a345bb1c2e9ee2fb7301398d342da0acc3a730b442106a2ad9478f7a63\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://ee7e0a47ae666a16e33a51f946da4fe549e8f4c6ea1f1978850515172c44656f\",\"dweb:/ipfs/QmR2AZ9pYiwMCV4wPPVaGGPRJEjuBoFjJEesHtbAYhNoFq\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/DVNFeeLibMock.sol\":{\"keccak256\":\"0x4c2e212f73a1c2a2989af947eef715ebacb11a80d55e5fd18a89a905790971b1\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://30eb29a81414780828903f5320367e89020af5a4055b768e2be08d43605b1688\",\"dweb:/ipfs/QmeC5bVtmaY6tn6Z2XpVFXAkxVWQCQUzKbP2V9nPdv3vCr\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/DVNMock.sol\":{\"keccak256\":\"0xdafd7da964b6ac8637d543c30370739bb805f7e10b42043444689240b5c27b3f\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://154067632b4799f49c0b3a8c5304499f60b2c232ebd17c21912efdb72421bdab\",\"dweb:/ipfs/QmUEr6VsNt2odnrL3xFrLKwZTVLkLXi8BDzpPWeiCxC63T\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/EndpointV2AltMock.sol\":{\"keccak256\":\"0x026b2f530b336ee237f37dde6f617acefbbf74d933d2a80da4216882f78be1a9\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://097a9fdd5a321e6e8455a1db00f2abda6e810c31ce47d1bced9e574be262a28b\",\"dweb:/ipfs/Qme17zGk93k5BghCWFXqeqppVahH4dHuw7U76K4EcJxsY1\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/EndpointV2Mock.sol\":{\"keccak256\":\"0xe9096c53611537a121589b56b882fc4dd797d5cac60def708f794a15e3ca98ff\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://4092d5dd582b48a5f703e4361fc5fb66050b5fe3253891175275dc832bc8e045\",\"dweb:/ipfs/QmXSTJJNx4rn2ByCaE6vxiHnkm366ZU7dScYH1JsUbVZ1V\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ExecutorFeeLibMock.sol\":{\"keccak256\":\"0x4a47aaf41049710d5f05fcc66885cacc0dabc1864778b56ac75a59b61eef5a01\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://c9b8c26b38cb138c3225efbab8b1d2e0f43343798658a0f2ed9669c16e5a97ff\",\"dweb:/ipfs/QmV21G7Qwoi9gXYT8bKXDwnQDvjdZCAo2M9MqTKq4nQU9U\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ExecutorMock.sol\":{\"keccak256\":\"0xbcdc4500270cd5496f10760ffe9e0444d23e454dd0ae2555e0661acf22fce96f\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://b816999bcfef5586b5e80bba21584b821fd7f7b32c276492adee530ffa83bb73\",\"dweb:/ipfs/QmXLV8ieYdrTBERajBCVuMzknFyPHJjnw7MGkzULAdjdt8\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/MultiSigMock.sol\":{\"keccak256\":\"0xc7c90e073e52af1da6c07e3d3f7477b064a89e78935c16e9872457df503c6830\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://cef1ae2d517e152616aea7f8f5c15fa1fbabbec8896a9c30a9eed35fb56b4f2f\",\"dweb:/ipfs/QmeitPMQht2WfbR9ZLzwKWgThamdsJkobeaWo6ojTCoQG5\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/PriceFeedMock.sol\":{\"keccak256\":\"0xd8f419b25c648287b5b7f0923b069b2449c51e807c9153df39445f2f83e55f44\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://bb300a5bb62655073c7aa9cd2221e60e59ce904a0d73f7f5e06af7c9df3445ec\",\"dweb:/ipfs/QmcYb2qFevymfkWhTqGaNH5HwK9MMUixzAKJJAdNQHSCbw\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ReadLib1002Mock.sol\":{\"keccak256\":\"0x1403b7a91b185fd8211f00fa380a0b8918e92e663c403a1dafa30f1667091fdc\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://7494444260a981ae9a9e11cd8981fad35a6b45a9c09cf72c05aad88ee191e7f0\",\"dweb:/ipfs/QmaTyujm37PsCobQ36ootD5xVgKyBYqeUTdTJij9x3oaN6\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ReceiveUln302Mock.sol\":{\"keccak256\":\"0x8e60b01e9bc801167b374dc119b41832d546afd43c143a0cd15ab1941198e121\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://bb1512762417dda9cd81fd9b41f590fd05888358fda1c2ab7e79e0cfabf61ec4\",\"dweb:/ipfs/QmPAgBwdjLz29vE5L1Jth1Wvx6TTM1ig97amVtAyDFF61Q\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/SendUln302Mock.sol\":{\"keccak256\":\"0x0c5cb54ec6b18e77aa653f7d774ac9d010684dafc96794d1d02f12b6885cc348\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://24c5a8ba8d92c16ec3047229167528f57b38cbd64882140014126ca51ab14574\",\"dweb:/ipfs/QmXQsMDtZ3qNmjnr2LYgctBpPKxffuC6EeWHvFUtLBS5st\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/SimpleMessageLibMock.sol\":{\"keccak256\":\"0xe6c93840c612592686732dd516550816eb77d6cde92514220eacb72443dcb9b9\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://a6a00fb60b7ac66e746f0471c2262fc98febafeb8acad8785d38ce1ddc4cc991\",\"dweb:/ipfs/QmboboJskbXBbsyAGGRbW4JQCPJo9WiLFy7nwQxGVS9UhZ\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/WorkerMock.sol\":{\"keccak256\":\"0x6c5bc31c117033dd35fa7ab3b13b1647a4b449c5f5b4cbff41bce8a63529ab97\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://01aa1d3f3b8e2fd4b544312d96916b16b97e01ab740e2bae1137723b2f1a31b1\",\"dweb:/ipfs/QmVMemJ4MSgi6y9NxDdSeB6QbJRtCWojJNxzs3CRLT56EA\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/test.sol\":{\"keccak256\":\"0x8758531bbac3972efcf1fa46383dbe1d276406fe527bc7abb2f236486278e83b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://1f64264d61506847acf8761e84aff690cebe830958eac00bac7924d8be569240\",\"dweb:/ipfs/QmSekDJvJ82MZAmr63n7YvfLzQ7gS4NLSHPmHL3GN3rw8k\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Base.sol\":{\"keccak256\":\"0x4ff1a785311017d1eedb1b4737956fa383067ad34eb439abfec1d989754dde1c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f553622969b9fdb930246704a4c10dfaee6b1a4468c142fa7eb9dc292a438224\",\"dweb:/ipfs/QmcxqHnqdQsMVtgsfH9VNLmZ3g7GhgNagfq7yvNCDcCHFK\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdAssertions.sol\":{\"keccak256\":\"0x1a0dee4d8b2c81e9318e87dd85ef009467ebf7dba6575530d1fce94d34dbae60\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ddd790c86ddde1013d1f7a552a80168eacf2e9244077f96799180644ad523a5b\",\"dweb:/ipfs/QmYinBFt9uEVFXP9ytT9CDoNpzWieQVgLWRFRNiypMzJaL\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdChains.sol\":{\"keccak256\":\"0x598b85609125830885b8fb54a18f447d04f8dd799aca3de81baef35eb6b783c0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c9c128aae4f5668d8c8f71e9e6d9379d8451b8713d139cb66a02d23bc1c75f69\",\"dweb:/ipfs/QmVRihXHWi2yg9CcAhzKf63Y7m6gWz4P1giGMhXUHT3DFu\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdCheats.sol\":{\"keccak256\":\"0xb72f3519e0bf7d31df5d68557525f4fc55d861c3fb3b0f7793144ef7c94cbeb7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f3456d0f78e6f61203fa7871ba2df0d35925f10db3baee14be623ce2a35b84e2\",\"dweb:/ipfs/QmWE6QQSBvJifHMraisBTrf1x4WCwrDoTPLX8UKajTiApc\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdError.sol\":{\"keccak256\":\"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6\",\"dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdInvariant.sol\":{\"keccak256\":\"0x67299bfacd77fddfa2a67b8e2b901e0e333618a4975fb94850b07475e51f6de6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1b61121d310f4053ce344b345b4a9ccf43b059daf9097ec2647f594beaca896d\",\"dweb:/ipfs/QmZUCoTtXBM9zfAZVbj2dFPPnKaV1CSZzXE7zictyg3Gfz\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdJson.sol\":{\"keccak256\":\"0x8f914dbd016bd0e318fe2b8bd556fbc8256c7cddc24e3e4fcb9f3c1c1935592d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://19e704df493dde38323303b07d18cadfeb4dcadf1ddc2301add4aea9474fbb5e\",\"dweb:/ipfs/QmZasuGiLK8LHwWtvpqEBxUR6QFY6GdzLMTJ9q7CMf8PNZ\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdMath.sol\":{\"keccak256\":\"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92\",\"dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdStorage.sol\":{\"keccak256\":\"0x4298f3f4cedaedb07029820b1daad2c03af45379559392201f7bf3ec71105811\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6e062f36d8d1ae3c383ef8975757926eaa9c4de3a92b5f1fe2d12748bcd8db32\",\"dweb:/ipfs/QmcWkv3ia5Ew4DZNcudMNSTNXZ3W2QiXTZunRd44e9BT8z\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdStyle.sol\":{\"keccak256\":\"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8\",\"dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdUtils.sol\":{\"keccak256\":\"0x502b18a4becda6ecd91fa8b419d8034946bfa80e6cc7f6497f51f8565bfadae0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bf499ee483a1dfd02023d4ce78ed4029a49794ccd5b849aaab912faea0d2ba61\",\"dweb:/ipfs/QmP6hwNZW7sYbQK9fBzuZWxfLm6Swx2nKzvZ54qWNqQkzX\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Test.sol\":{\"keccak256\":\"0x39b1729d5868c8e94ab8af16751eb500a17fe3870dc627d2b7ddcd5df18d7ad0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1568c82aff125cc4b0fc168be9d67ac313f469a3c7405c5493caecaaaecfb765\",\"dweb:/ipfs/QmXByuZReJsdu1jDcxj1FcmpcUnzoBcqybn9kWgDAECWri\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Vm.sol\":{\"keccak256\":\"0x87ba9f3edc254e529db9e3129c954391adcc7fc8574203767979d8d2f1e724b9\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://4d16c08d80d9f2869deb6350642cf5af624d21fce6b3b023abbcdedc62e195fe\",\"dweb:/ipfs/QmURpnnFECPKt3i7P7jQRZpr4ZBXjRGcZ9KzcbKzsgYR2W\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/console.sol\":{\"keccak256\":\"0x91d5413c2434ca58fd278b6e1e79fd98d10c83931cc2596a6038eee4daeb34ba\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://91ccea707361e48b9b7a161fe81f496b9932bc471e9c4e4e1e9c283f2453cc70\",\"dweb:/ipfs/QmcB66sZhQ6Kz7MUHcLE78YXRUZxoZnnxZjN6yATsbB2ec\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/console2.sol\":{\"keccak256\":\"0x954646445d1014c3cd85c7918f5e7adeeca5ee44b68c00bafa237e597a4e35ea\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://516fa3be52da4763147175bfba4be0aa011fadbb0c1afb01f97265bd4cee7973\",\"dweb:/ipfs/QmdixAyMJefx7qePChgdxcBH5MxhmN7vsqPuPLx3CgrVmF\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/interfaces/IMulticall3.sol\":{\"keccak256\":\"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0\",\"dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/mocks/MockERC20.sol\":{\"keccak256\":\"0xd8703f49411737ecf8d411f8fa66b2bf0ef972ba28b7a4adf1748c63df1bf682\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7c10a6b8112f6fe3cdccb6240ecd382765216b1a82e9a86a0fec8f5e09eadd1\",\"dweb:/ipfs/QmdRvPCU4RkjMHsTu3Ric1ZEF1AWDNLp78unFC5aWP17xq\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/mocks/MockERC721.sol\":{\"keccak256\":\"0xa24468244abb66e663fb7eee6463cb518eb9a7c14e1071548ff564cca825bbca\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://145585a2194aa6e2d30edfe709ef2814e20b1b4540469aa6a8f50c841fcb9070\",\"dweb:/ipfs/QmZrwbvtpbtTxqbW5phUrwb3F1tBiPSQc6jZJAXBfsBsAh\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/safeconsole.sol\":{\"keccak256\":\"0xbaf41fdc6c54297e7cd8250e48b0f20eaac918e342a1028cef3f9a52ac086381\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a500ad81dea226f9910e6b50f99a9ff930105e393a692cbfb2185e4cdb4424ae\",\"dweb:/ipfs/QmVbUQpXNMmMWRiy4FvBNczzq46BMGfUoBikvSHNiCxVTq\"]},\"node_modules/@openzeppelin/contracts/access/AccessControl.sol\":{\"keccak256\":\"0xa0e92d42942f4f57c5be50568dac11e9d00c93efcb458026e18d2d9b9b2e7308\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://46326c0bb1e296b67185e81c918e0b40501b8b6386165855df0a3f3c634b6a80\",\"dweb:/ipfs/QmTwyrDYtsxsk6pymJTK94PnEpzsmkpUxFuzEiakDopy4Z\"]},\"node_modules/@openzeppelin/contracts/access/IAccessControl.sol\":{\"keccak256\":\"0xc1c2a7f1563b77050dc6d507db9f4ada5d042c1f6a9ddbffdc49c77cdc0a1606\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fd54abb96a6156d9a761f6fdad1d3004bc48d2d4fce47f40a3f91a7ae83fc3a1\",\"dweb:/ipfs/QmUrFSGkTDJ7WaZ6qPVVe3Gn5uN2viPb7x7QQ35UX4DofX\"]},\"node_modules/@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol\":{\"keccak256\":\"0x9b6b3e7803bc5f2f8cd7ad57db8ac1def61a9930a5a3107df4882e028a9605d7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://da62d6be1f5c6edf577f0cb45666a8aa9c2086a4bac87d95d65f02e2f4c36a4b\",\"dweb:/ipfs/QmNkpvBpoCMvX8JwAFNSc5XxJ2q5BXJpL5L1txb4QkqVFF\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC165.sol\":{\"keccak256\":\"0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://11fea9f8bc98949ac6709f0c1699db7430d2948137aa94d5a9e95a91f61a710a\",\"dweb:/ipfs/QmQdfRXxQjwP6yn3DVo1GHPpriKNcFghSPi94Z1oKEFUNS\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC20.sol\":{\"keccak256\":\"0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a2608291cb038b388d80b79a06b6118a42f7894ff67b7da10ec0dbbf5b2973ba\",\"dweb:/ipfs/QmWohqcBLbcxmA4eGPhZDXe5RYMMEEpFq22nfkaUMvTfw1\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db\",\"dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0xca2ae13e0610f6a99238dd00b97bd786bc92732dae6d6b9d61f573ec51018310\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://75f8c71ce0c91c40dd5f249ace0b7d8270f8f1767231bcf71490f7157d6ba862\",\"dweb:/ipfs/QmYXgxeDyFHvz3JsXxLEYN6GNUR44ThHeFj5XkpkgMoG4w\"]},\"node_modules/@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0x9d8da059267bac779a2dbbb9a26c2acf00ca83085e105d62d5d4ef96054a47f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c78e2aa4313323cecd1ef12a8d6265b96beee1a199923abf55d9a2a9e291ad23\",\"dweb:/ipfs/QmUTs2KStXucZezzFo3EYeqYu47utu56qrF7jj1Gue65vb\"]},\"node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"node_modules/@openzeppelin/contracts/utils/Errors.sol\":{\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf\",\"dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB\"]},\"node_modules/@openzeppelin/contracts/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]},\"node_modules/@openzeppelin/contracts/utils/Pausable.sol\":{\"keccak256\":\"0xb2e5f50762c27fb4b123e3619c3c02bdcba5e515309382e5bfb6f7d6486510bd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1a4b83328c98d518a2699c2cbe9e9b055e78aa57fa8639f1b88deb8b3750b5dc\",\"dweb:/ipfs/QmXdcYj5v7zQxXFPULShHkR5p4Wa2zYuupbHnFdV3cHYtc\"]},\"node_modules/@openzeppelin/contracts/utils/ReentrancyGuard.sol\":{\"keccak256\":\"0x11a5a79827df29e915a12740caf62fe21ebe27c08c9ae3e09abe9ee3ba3866d3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3cf0c69ab827e3251db9ee6a50647d62c90ba580a4d7bbff21f2bea39e7b2f4a\",\"dweb:/ipfs/QmZiKwtKU1SBX4RGfQtY7PZfiapbbu6SZ9vizGQD9UHjRA\"]},\"node_modules/@openzeppelin/contracts/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0x69f54c02b7d81d505910ec198c11ed4c6a728418a868b906b4a0cf29946fda84\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8e25e4bdb7ae1f21d23bfee996e22736fc0ab44cfabedac82a757b1edc5623b9\",\"dweb:/ipfs/QmQdWQvB6JCP9ZMbzi8EvQ1PTETqkcTWrbcVurS7DKpa5n\"]},\"node_modules/@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0xddce8e17e3d3f9ed818b4f4c4478a8262aab8b11ed322f1bf5ed705bb4bd97fa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8084aa71a4cc7d2980972412a88fe4f114869faea3fefa5436431644eb5c0287\",\"dweb:/ipfs/Qmbqfs5dRdPvHVKY8kTaeyc65NdqXRQwRK7h9s5UJEhD1p\"]},\"node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]},\"node_modules/@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]},\"node_modules/@openzeppelin/contracts/utils/structs/DoubleEndedQueue.sol\":{\"keccak256\":\"0x1e1d74658d7f4eab3d4f8fb0c6c5953bc5f629d9425e978d557dabff7b58b217\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://be0175d00008d452d3d553890f73a3d5d51dff4372f720336c8b98f26822fcdb\",\"dweb:/ipfs/QmUkE8g5xPExWoSAKwdi5ww1qJJVtEWtjSF93G2LMQkgD3\"]},\"node_modules/solidity-bytes-utils/contracts/BytesLib.sol\":{\"keccak256\":\"0xa5b10f04797d5a10a9ba07855108b6bd695940e6a3d128927b2f74a0d359868a\",\"license\":\"Unlicense\",\"urls\":[\"bzz-raw://a38d7680aacbb18dae659876b396b73bcc8f759672213f8a0efc4129e2648535\",\"dweb:/ipfs/QmfKFnwpTEGAnbRnZxMuv3mRCG9S9WMjFhFL23bftBT2Jq\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "endpoint", - "outputs": [ - { - "internalType": "contract ILayerZeroEndpointV2", - "name": "iEndpoint", - "type": "address" - } - ] - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_channelId", - "type": "uint32" - }, - { "internalType": "bool", "name": "_active", "type": "bool" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setReadChannel" - } - ], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/TestHelperOz5.sol": "IOAppSetReadChannel" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/MessageLibBase.sol": { - "keccak256": "0x14899a4398251439938d6ef8a15ea8c6acdddc98a7b0066d7e63676192dea0d1", - "urls": [ - "bzz-raw://3998d03de7025c2c601a4fdcaf9475d12a1ef661fcf1a685ece84fdde6498cf9", - "dweb:/ipfs/QmReknRbiGAiPqq9toKyXKo6hUKXrQPJyyS6LnTGjiDKoY" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/ReceiveLibBaseE2.sol": { - "keccak256": "0x2fdbd1b13751a264cd6e7fac518a2685b15c968806c03f1d18b177fc0526e9a9", - "urls": [ - "bzz-raw://600af48bb67939b5f4a3a00c76863ee290a55325ea8697f7cc4b46321ab26ef2", - "dweb:/ipfs/QmdRigYaB6TXczjtVkvwpUEBwvvvDuymFoViMCB6xQPYUU" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/SendLibBase.sol": { - "keccak256": "0x400eaa11c7d50b4c25b7625290ff00937b6875ad3986b353c37a4e62b5a834b1", - "urls": [ - "bzz-raw://1f51eb0785d3630815a9d63de1c1331fe966df4c3f2fb6750b8da7be9e9743a4", - "dweb:/ipfs/QmaAEf1kjhhff3AUhRiPm6ikpk2YMMrpKc2ccYzNs7waBy" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/SendLibBaseE2.sol": { - "keccak256": "0x90ada11d0a330732c56b989e59c8272b70f956a5d7be2cf209d6d51a51d35a9e", - "urls": [ - "bzz-raw://0abc7a6d07ec40a3a922256ad05bdd6eca10550d85bfd2e67147473617bb0497", - "dweb:/ipfs/QmRDphmFhx1scRJXcusg6pUhVQvp941oCJwnHGAPdrNY4T" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IExecutor.sol": { - "keccak256": "0x2fd26e454b060ede7afa15f8bbc67bd43f9181b6405ca411d36c8b538be016af", - "urls": [ - "bzz-raw://cf2142e83214bb392f69ed14266718cfd803f849a7239ee9a1950ddf66553696", - "dweb:/ipfs/QmSZ2mPMZqWBetMU8VESKtxy7UdSThUVmJmTFMHEyKLTGZ" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IExecutorFeeLib.sol": { - "keccak256": "0x801d12eca6d6b232fb91d949cdb70a4c547c5e27e73555f2f1eb9e757c639bcc", - "urls": [ - "bzz-raw://b61bdffe26ff3902edab3efb0b5af3808ec9e28d72db95b77128502b9bc7638d", - "dweb:/ipfs/Qmcyf3npDDEq28b9XqmXgSGyQegj2cxUZQ3UekSNf34g8M" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroExecutor.sol": { - "keccak256": "0x3647af317ee126b1247a782abb30e59ec5ab21b4945f1d3b4370d1fa3c1bf347", - "urls": [ - "bzz-raw://5b51cd5e7347ee869a06bd57a698f40e4a901ec7fdcb27f0ef485e4a0e1e9be4", - "dweb:/ipfs/QmP2Nc73veRzLGdUahkjhQAiKR9ZWYiUtSGwoMB1sPXxUp" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroPriceFeed.sol": { - "keccak256": "0xb4df72798a64f5ea44775b526e0c417c3de0ffc661659d7b31d5b28567c6fbcc", - "urls": [ - "bzz-raw://30ca5fd5e3227a7bffc51654ee3bfebdd591a131f86846ac42dea8a40c5cf1d8", - "dweb:/ipfs/QmXNmQCF8TZAFpUxgPa1rgWt4ktsBV38A8Hax7TiYLgybW" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroReadExecutor.sol": { - "keccak256": "0x360936885f173f816ffb47e555d480928e74eb1ad54a76af0f4595ecba2d5657", - "urls": [ - "bzz-raw://16b5095e6439b1e416eb70571a1dd8f4f21a0d77b19c9e510ca289d99e5e09ab", - "dweb:/ipfs/QmZ2mjQDQ35gJseyzmQhik4cBgN2ESADzofFNVFvgS64hv" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroTreasury.sol": { - "keccak256": "0x2aab2a3cf50e20af56d9204b1367d52a47abba0b0c7c21f304d413de1ced6345", - "urls": [ - "bzz-raw://f8b603b5e5e62c621715f8449280af240a4add8721c4ae8f5e8e491507f6e4c5", - "dweb:/ipfs/QmUQ7Ti7CPmKnRbQFN9TLvVbeZhsi1xUjqZPTJ36dCZ6y8" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IWorker.sol": { - "keccak256": "0xa6b61913767305227576cc6da5067de4208f09a4f58bfbfe32beafdfae9869b1", - "urls": [ - "bzz-raw://b7fce83bfb831f383606aee7f5ff68a330c8526bb1036f9ba0813d3e4fa8d534", - "dweb:/ipfs/QmR7zAqJkmCgBj6sguS8t2WthY5k6FwsakgH4UY11uqD4n" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/libs/ExecutorOptions.sol": { - "keccak256": "0x441b723f2f597be2ec2bb361fcf3f11852c23534db1cfa7d2ffff7e61d228e3c", - "urls": [ - "bzz-raw://636817d20f90f75032e35376256cf5f4d2a047d6541b45f644d82a2e4dc8f1eb", - "dweb:/ipfs/QmcEFRxCmmm9hKbqi7Powj6ATbw4JXXJW4rxfwMcxWsDnT" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/libs/SafeCall.sol": { - "keccak256": "0xc3b7b7927472f7c1ca9703af310e9050c798afaccf399ad0f131e179b8582c8d", - "urls": [ - "bzz-raw://e5be13af32ff6b371985d405bc6fe8ac2faf5445bd88fda2dab4b869f66e3f89", - "dweb:/ipfs/Qmd21k4H2tAHKrpiuHUbH87eNtHLLJzHj9ZCrMh8AKfDHh" - ], - "license": "MIT OR Apache-2.0" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/ReceiveUlnBase.sol": { - "keccak256": "0x36c93de122bbb74ae31e3eacf567c0a3bc649ed3ebb2766c76dfa93aebcace44", - "urls": [ - "bzz-raw://e83bcaa80e2715e68818dd53e4dc6ad8e665b8249d69a08cf2d2635b9757fb79", - "dweb:/ipfs/QmSKh6NgaTrTSa48gDzGGqGNAcs5jVEHgZSzZzbuJSEsxo" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/SendUlnBase.sol": { - "keccak256": "0x6d9962ffa476ac2efb78f1415bb2f650a30eedeef2b75fdab0aeafaf3e8da6a5", - "urls": [ - "bzz-raw://21f32c56b67d2e770444b809c1a85a96627194c605ad317d482dfc5b6ce7e8c2", - "dweb:/ipfs/QmP5tzoMDzTdduEcSpYHgg6WCHLQGuc1djDMFUBycJPLCU" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/UlnBase.sol": { - "keccak256": "0xfdb1d04f4996c0a9d35abfbfcf10d978da638885eb77d0a9dc35cea5993074e3", - "urls": [ - "bzz-raw://776d58d88d13b058f236cf18c32b4b9718a021513fc4e198287f4fe18ec5aba4", - "dweb:/ipfs/QmdNX8jJu2aXJ8Dpbt2ohfhT8RKQLuvh58sW6SAXcUTcV9" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IDVN.sol": { - "keccak256": "0x6becdfab6c1fcaf98f402bee48495895e54825f9d6eef6e292dde0caed628284", - "urls": [ - "bzz-raw://2273341033856737cd46704a1a769768feae696d0e7a912f5be9de8ffdd2180c", - "dweb:/ipfs/QmY1xBAmMX9jND1HAb7tDyZNPgFReXMqs1vtmHbShKZFQY" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IDVNFeeLib.sol": { - "keccak256": "0xed4a8e77148328132d8f4f2726c4aeec6b490cf03a1d5940bde0ab8d72954de9", - "urls": [ - "bzz-raw://7b07802ca32bf10f68e51da872fb358807446dc2242314374d226493a6e9e7dc", - "dweb:/ipfs/QmfSwWPLgitDy2a9S3mCNBDk6kAcK9n186Dtvj7qg84i12" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/ILayerZeroDVN.sol": { - "keccak256": "0x308e77078242fd5c5746ec29c12e618249134f9e4377c0028ab8f59c07a6014b", - "urls": [ - "bzz-raw://2f92cf397a8d26864ac92dfcd1b98e92a32c47f556a62c5e6dc1618734c1caa3", - "dweb:/ipfs/QmXN3XJXEKq5djV6HeM6jrLycmJPFhMhecsYZ2TaRsQmhg" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/ILayerZeroReadDVN.sol": { - "keccak256": "0x759a3ee7614c2de54b152b0278845f91ac9760d8c22045b2fee89e3e744402b8", - "urls": [ - "bzz-raw://7a2dbf6bcf5bfab408f18c104b34c390e8bfabb0eeb1a10e3a9c0fb14c8c61d5", - "dweb:/ipfs/QmWxmRbDBkbhGmNsRyXqQXB1QaWRS4qvh6a8achh8DQPKR" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IReceiveUlnE2.sol": { - "keccak256": "0xcdf7e690e5d5c0a3ec26a0d7b1a7fe49c7d16a3634721c3944f77d13ff5d4a91", - "urls": [ - "bzz-raw://bd32a05dde1b83be1ce64fcfb9495d8b9bf0c5b3a5b521ac6c214e87e32f3cdc", - "dweb:/ipfs/QmcDKTor8EQf3cbiWYmeFb9qzUM8JGPzGGN9qJnYjP1nN7" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/DVNOptions.sol": { - "keccak256": "0x2beee03cdf59a9bc72e94d08b69cb2e908725f4ceabb48651494938100e21e35", - "urls": [ - "bzz-raw://d88e121a39e74309f3575417df2318e2d2ee8bc8314e68dbf78544a9c393b141", - "dweb:/ipfs/QmRojBRAyENK21HnjevAWeoZZxtWkYZubB9Y78vCJPYeU6" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/ReadCmdCodecV1.sol": { - "keccak256": "0x52fbab4a114ce9defb2ffd57c0a978eee438b2c232862f7e20475e0dcadd4eda", - "urls": [ - "bzz-raw://a4d5d4e186e3f2a916ea02c2d1d0761069ab1a5c0d6f74719bbf3501a7ccb899", - "dweb:/ipfs/QmS2e12U9Fap2EK1CmSBTccL4PCKkHNdKJn2bXCqqKdbRn" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/SupportedCmdTypes.sol": { - "keccak256": "0x6b2534522c163714e499041ecd06aaeb93857373cef82cf2752f162bb7c69f9a", - "urls": [ - "bzz-raw://bf6c3545c3b9505692dbfaa29b40cab5ed9dc9b65e5804b6f47b5a76596120e9", - "dweb:/ipfs/QmNs98oRaMvpYhLCQ5yU256eYNEopFTrLRjjwm3gL4foQ3" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/UlnOptions.sol": { - "keccak256": "0x5df07fef16b20767f7524c367d90f696c12e8ce0e4fde7aecc9d83fb2b6b0e27", - "urls": [ - "bzz-raw://0997203f57d736e56ebb3d736550f1c7ff7950c8df0574c7abe95e22f847b850", - "dweb:/ipfs/QmZBjkH1vaPLyN3Jx9kGfVZKuTdfVWJfJVLSPok8SpjGbT" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/readlib/ReadLibBase.sol": { - "keccak256": "0x7d312ba1e6288cb201b211f58b814eaaa0b5993721475fbc64321b0e7a2c74d3", - "urls": [ - "bzz-raw://dfc0dce9362eca0f03b51e0e808389c8bf51fda901e6ca58da169f165e4fc3c8", - "dweb:/ipfs/QmSXAQ3veWf6gPXcgpX1XLZW9SyLQjBjCSdsFiQTttLNac" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/uln301/interfaces/IUltraLightNode301.sol": { - "keccak256": "0x47f8ebeaa7d96a6f337a18c46e3c532da578c7cb0a13fb6e6f014286b991902f", - "urls": [ - "bzz-raw://d51f208b931be54e0ae1801c71c0756251d8c26f8d9b7911be1ad57b3d4a5691", - "dweb:/ipfs/QmWqjst7jnYtSXQ9pakYHutDvENKLyqNg9nPfMxTH8p2Ed" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessageLibManager.sol": { - "keccak256": "0x64330e51de72e8d38cfc0eb5527d36baada46df4bc14233d3a8ecaf98098d69a", - "urls": [ - "bzz-raw://49aa45e5a26fc62e7af569cf915be8344adc78dceb6871c4c14bc5d115e59241", - "dweb:/ipfs/QmbTuW7kzPDYForDEPnaNQi6ZrmWqDxGVnHFiugnvTyq9K" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingChannel.sol": { - "keccak256": "0x8ab8cb12c8beba699c1a7f22ffa812ac553f7038326d0c0d0af77253005cfe73", - "urls": [ - "bzz-raw://7c7cba4ae16d0ca46ee0a365a204f7257ceaa892224604bf7c8e65c44737e46c", - "dweb:/ipfs/QmbQX5hJDKMwKdoo6QkdcusXQXH54SVCPe5hM1ycJZsg7y" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingComposer.sol": { - "keccak256": "0x20d36578e810e75346daf064813b76a177087214cae77628b1f9d43798cb52d1", - "urls": [ - "bzz-raw://475b6f3f1ba5d981d0c5f90b9e892d4f9f539f3b12196639b95770b5be4dbf6a", - "dweb:/ipfs/QmYyGrnR3vDt8Dqa2paQwTG9qrD6anAGFrDZmMra8KGC6s" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingContext.sol": { - "keccak256": "0x9616f3bd0d7293c9723f2ddf86f9f7030fbd99213c9748557eec8f6d13b25420", - "urls": [ - "bzz-raw://205e713f5af46f52799e51774ac74dbeee4056de6ddba3c4d78a327536426c54", - "dweb:/ipfs/QmZ2ZqDwxdjpJbh91qwMfRhhQu4AMEsjUcsTEsdRV4NAys" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroComposer.sol": { - "keccak256": "0xfaca7205d4211ee9208a7e59171e2301731f3d2a20c49b4a839821871f5fdd49", - "urls": [ - "bzz-raw://f254bc60ac26687b5320a43a556e30777b0745abf7cd64d5f4720d9b1d1f7fdf", - "dweb:/ipfs/QmRSJEZVgxaC3L2DdE6s8P5qkYfM3V5JMeseeFJJqGR4xz" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol": { - "keccak256": "0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3", - "urls": [ - "bzz-raw://bacc29fd3866af71e59cb0bdc1cf82c882a4a7f4e2652fd413c9f12649762083", - "dweb:/ipfs/QmZh2toLnrQDWaNYhS5K4NoW7Vxd2GdZx9KA77vKEDLAqs" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol": { - "keccak256": "0x9641abba8d53b08bb517d1b74801dd15ea7b84d77a6719085bd96c8ea94e3ca0", - "urls": [ - "bzz-raw://77415ae0820859e0faf3fabdce683cce9fa03ea026ae0f6fe081ef1c9205f933", - "dweb:/ipfs/QmXd7APqoCunQ2jYy73AHvi5gsZofLpm3SzM6FPo7zRPfL" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol": { - "keccak256": "0x5cf5f24751b4e3ea1c9c5ded07cedfdfd62566b6daaffcc0144733859c9dba0c", - "urls": [ - "bzz-raw://cae7e35007a714f007ea08045ef7c0cfa6c91fd2425b5028b2d49abad357a5f0", - "dweb:/ipfs/QmcDBs5tsiyB35b8cwzWQWNnpkawb3uuHRaqE77Hxm2tve" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol": { - "keccak256": "0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc", - "urls": [ - "bzz-raw://d8ff6a8a89297fa127f86b54e0db3eba1d6a6eeb4f6398d3c84d569665ac8f1b", - "dweb:/ipfs/QmVSwhw6xFDrLRAX4RXaCM47yBaBtac4wf36DYEq6KCTvT" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol": { - "keccak256": "0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972", - "urls": [ - "bzz-raw://7e1b245d58221d16d8b5e0f01ef3e289a24a7df1ace3b94239e4d5b954ad5927", - "dweb:/ipfs/Qmappsgp7PCY9rSSNE9Cdn4BTRX591WfCSEgq2HxhA3z6S" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol": { - "keccak256": "0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901", - "urls": [ - "bzz-raw://b18b23a1643fc6636c4ad9d9023e2e6ca2d3c2a4a046482d4655bff09950598d", - "dweb:/ipfs/Qma6G5SqiovwrMPfgqTrRngK1HWW373Wkf9c6YP2NhXpPk" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol": { - "keccak256": "0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e", - "urls": [ - "bzz-raw://5173fc9143bea314b159ca5a9adb5626659ef763bc598e27de5fa46efe3291a6", - "dweb:/ipfs/QmSLFeMFPmVeGxT4sxRPW28ictjAS22M8rLeYRu9TXkA6D" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol": { - "keccak256": "0xf1c07bc61e7b1dce195ed12d50f87980fbf2d63cac1326fd28287f55fe0ba625", - "urls": [ - "bzz-raw://060f10ff7afc33c1c2f2b4b5ba29231fd3c943146488084d0e4ab99fce991d97", - "dweb:/ipfs/QmaSsefAqqEqtf8FgFUmDYMwTsAty3X1pqDb6SiFvry6B3" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol": { - "keccak256": "0x2ebbcaaab3554edcd41b581f1a72ac1806afbfb8047d0d47ff098f9af30d6deb", - "urls": [ - "bzz-raw://2d4b2cf5c3b16dc76c6767f285b57c0af917972327b2be3f7cba5825402f5fc1", - "dweb:/ipfs/QmQQWiHE2jKEDbjzGutSoZwtApSXYfLqZt5CxEpFj8xyvT" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/CalldataBytesLib.sol": { - "keccak256": "0x5c0db161cef6603c3b256d4220f489419e7478ef775e52a80056654129c61875", - "urls": [ - "bzz-raw://a33245d0fdd3992bb56b31d1840108d36bb46c8d617b659ef1af8dd7ed86302d", - "dweb:/ipfs/QmWyBqT7Tdrfn5zz9xYM3V1PBtfAZAVwwCrrKwwfi3wMQK" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Errors.sol": { - "keccak256": "0x35bcd6ca99c4c8d9f7d8413d1b92fb4a4d4a420ce3bf64b0fb01e68e6bcf2fa7", - "urls": [ - "bzz-raw://0ac14f98563f9c610c936c93e71eff657efaba1e1d892be6a215aa5cb1f63a24", - "dweb:/ipfs/QmVZZ8owwfDGLQTAzQJJqmYY4KsrChDagh5GBK7rChT5wb" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/GUID.sol": { - "keccak256": "0x8a44524af7deb96593f6b5606e9973654a113e1687809f2e45d4a91ba89862d5", - "urls": [ - "bzz-raw://32dd0b5d1946e0cd5c7b728086aafac50a62c061115afb8b41254589c8a6732b", - "dweb:/ipfs/QmR9QqtiAUPRLaRVv5wnth3NGPhdWB8rJmWYfz3o5Z1mWj" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Transfer.sol": { - "keccak256": "0x621d6dd5b8b7e827351459fff4ac87c16ba4656757592cf67de8b199aea4cf9a", - "urls": [ - "bzz-raw://345aa8c007ed8b96a74260d289545713f1d7180df270d67687e3a540a61fa5c0", - "dweb:/ipfs/QmNWCvpqSuar6UGLDVshUc7shUv3pt1J5FTf9VyZZ13wXL" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/BlockedMessageLib.sol": { - "keccak256": "0xb2b55968b26294139742adee6c155897c8334f4c6bf72f1940456cc84e6fbab9", - "urls": [ - "bzz-raw://e758a1fdcea4039b19f1252e4e2958f4a0e05517eb3e151784431533446c225f", - "dweb:/ipfs/QmRBG345abgyUeTnSpuxdK1WbK5pvwhSmvBEgW1mnoYqTq" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/BitMaps.sol": { - "keccak256": "0xaad3c72ef43480d2253fd48b394e8fb7286d009991d2bc4e61be58ce48ac5ee9", - "urls": [ - "bzz-raw://b8c02b14f954416ba2148b389c87da8378ac8dd16ba3d458cbbfba8b0fd8639f", - "dweb:/ipfs/Qmd2EEQhYL2VmgJi1V4uiHM2WcYxF9iBtxSgcFkbS21rQD" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/ExecutorOptions.sol": { - "keccak256": "0x621c6090fc432f94a99f677a95d72b75f56db89ddc5fc870669777a313587c28", - "urls": [ - "bzz-raw://69086166f16d29e30c5eb9ca2f97afb27569afe619807d79736833a809a512d2", - "dweb:/ipfs/QmcZqXjFuVdTrfbteKBF3GuEpjVFZ2YNZTa3J87dyLsqav" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol": { - "keccak256": "0xc84cf1bf785977fe1fbe7566eef902c2db68d0e163813ebe6c34921754802680", - "urls": [ - "bzz-raw://de686666fc16fa432d4208d85cec87dc952faf3e481b683b9adf4b4610db4b09", - "dweb:/ipfs/QmdmQeopzmxqRzi9DNB4EJDrYUXFfD7fUhnGhSni4QejUW" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-v1-0.7/contracts/interfaces/ILayerZeroUltraLightNodeV2.sol": { - "keccak256": "0xf1f36bbbc40d03b96affa151affb47da75a1b69dc79f4b311841a072d12fdd22", - "urls": [ - "bzz-raw://9f4f188c2998ecbda28a389ad8038da15c2260b1df6a8d135b3d96422e292fda", - "dweb:/ipfs/QmeThR83tcaM4CmxQ2AamTafsgjcbGMfZtYcDHqw2CcwKa" - ], - "license": "BUSL-1.1" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/OptionsHelper.sol": { - "keccak256": "0x729ce2290d16a45a16ad936263803db6a6bebcfba5c063ebe0f0fd284ba828c0", - "urls": [ - "bzz-raw://7494875394fc968684761b22bb5fe05789f8d84ba07b2e0ab579ce0afe7aa973", - "dweb:/ipfs/QmZNrexRXL3ef3UnES5e8JcdyMJ5HVftwGKQjGC5CwNg9Q" - ], - "license": "UNLICENSED" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/TestHelperOz5.sol": { - "keccak256": "0xe60b21a345bb1c2e9ee2fb7301398d342da0acc3a730b442106a2ad9478f7a63", - "urls": [ - "bzz-raw://ee7e0a47ae666a16e33a51f946da4fe549e8f4c6ea1f1978850515172c44656f", - "dweb:/ipfs/QmR2AZ9pYiwMCV4wPPVaGGPRJEjuBoFjJEesHtbAYhNoFq" - ], - "license": "UNLICENSED" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/DVNFeeLibMock.sol": { - "keccak256": "0x4c2e212f73a1c2a2989af947eef715ebacb11a80d55e5fd18a89a905790971b1", - "urls": [ - "bzz-raw://30eb29a81414780828903f5320367e89020af5a4055b768e2be08d43605b1688", - "dweb:/ipfs/QmeC5bVtmaY6tn6Z2XpVFXAkxVWQCQUzKbP2V9nPdv3vCr" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/DVNMock.sol": { - "keccak256": "0xdafd7da964b6ac8637d543c30370739bb805f7e10b42043444689240b5c27b3f", - "urls": [ - "bzz-raw://154067632b4799f49c0b3a8c5304499f60b2c232ebd17c21912efdb72421bdab", - "dweb:/ipfs/QmUEr6VsNt2odnrL3xFrLKwZTVLkLXi8BDzpPWeiCxC63T" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/EndpointV2AltMock.sol": { - "keccak256": "0x026b2f530b336ee237f37dde6f617acefbbf74d933d2a80da4216882f78be1a9", - "urls": [ - "bzz-raw://097a9fdd5a321e6e8455a1db00f2abda6e810c31ce47d1bced9e574be262a28b", - "dweb:/ipfs/Qme17zGk93k5BghCWFXqeqppVahH4dHuw7U76K4EcJxsY1" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/EndpointV2Mock.sol": { - "keccak256": "0xe9096c53611537a121589b56b882fc4dd797d5cac60def708f794a15e3ca98ff", - "urls": [ - "bzz-raw://4092d5dd582b48a5f703e4361fc5fb66050b5fe3253891175275dc832bc8e045", - "dweb:/ipfs/QmXSTJJNx4rn2ByCaE6vxiHnkm366ZU7dScYH1JsUbVZ1V" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ExecutorFeeLibMock.sol": { - "keccak256": "0x4a47aaf41049710d5f05fcc66885cacc0dabc1864778b56ac75a59b61eef5a01", - "urls": [ - "bzz-raw://c9b8c26b38cb138c3225efbab8b1d2e0f43343798658a0f2ed9669c16e5a97ff", - "dweb:/ipfs/QmV21G7Qwoi9gXYT8bKXDwnQDvjdZCAo2M9MqTKq4nQU9U" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ExecutorMock.sol": { - "keccak256": "0xbcdc4500270cd5496f10760ffe9e0444d23e454dd0ae2555e0661acf22fce96f", - "urls": [ - "bzz-raw://b816999bcfef5586b5e80bba21584b821fd7f7b32c276492adee530ffa83bb73", - "dweb:/ipfs/QmXLV8ieYdrTBERajBCVuMzknFyPHJjnw7MGkzULAdjdt8" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/MultiSigMock.sol": { - "keccak256": "0xc7c90e073e52af1da6c07e3d3f7477b064a89e78935c16e9872457df503c6830", - "urls": [ - "bzz-raw://cef1ae2d517e152616aea7f8f5c15fa1fbabbec8896a9c30a9eed35fb56b4f2f", - "dweb:/ipfs/QmeitPMQht2WfbR9ZLzwKWgThamdsJkobeaWo6ojTCoQG5" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/PriceFeedMock.sol": { - "keccak256": "0xd8f419b25c648287b5b7f0923b069b2449c51e807c9153df39445f2f83e55f44", - "urls": [ - "bzz-raw://bb300a5bb62655073c7aa9cd2221e60e59ce904a0d73f7f5e06af7c9df3445ec", - "dweb:/ipfs/QmcYb2qFevymfkWhTqGaNH5HwK9MMUixzAKJJAdNQHSCbw" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ReadLib1002Mock.sol": { - "keccak256": "0x1403b7a91b185fd8211f00fa380a0b8918e92e663c403a1dafa30f1667091fdc", - "urls": [ - "bzz-raw://7494444260a981ae9a9e11cd8981fad35a6b45a9c09cf72c05aad88ee191e7f0", - "dweb:/ipfs/QmaTyujm37PsCobQ36ootD5xVgKyBYqeUTdTJij9x3oaN6" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ReceiveUln302Mock.sol": { - "keccak256": "0x8e60b01e9bc801167b374dc119b41832d546afd43c143a0cd15ab1941198e121", - "urls": [ - "bzz-raw://bb1512762417dda9cd81fd9b41f590fd05888358fda1c2ab7e79e0cfabf61ec4", - "dweb:/ipfs/QmPAgBwdjLz29vE5L1Jth1Wvx6TTM1ig97amVtAyDFF61Q" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/SendUln302Mock.sol": { - "keccak256": "0x0c5cb54ec6b18e77aa653f7d774ac9d010684dafc96794d1d02f12b6885cc348", - "urls": [ - "bzz-raw://24c5a8ba8d92c16ec3047229167528f57b38cbd64882140014126ca51ab14574", - "dweb:/ipfs/QmXQsMDtZ3qNmjnr2LYgctBpPKxffuC6EeWHvFUtLBS5st" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/SimpleMessageLibMock.sol": { - "keccak256": "0xe6c93840c612592686732dd516550816eb77d6cde92514220eacb72443dcb9b9", - "urls": [ - "bzz-raw://a6a00fb60b7ac66e746f0471c2262fc98febafeb8acad8785d38ce1ddc4cc991", - "dweb:/ipfs/QmboboJskbXBbsyAGGRbW4JQCPJo9WiLFy7nwQxGVS9UhZ" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/WorkerMock.sol": { - "keccak256": "0x6c5bc31c117033dd35fa7ab3b13b1647a4b449c5f5b4cbff41bce8a63529ab97", - "urls": [ - "bzz-raw://01aa1d3f3b8e2fd4b544312d96916b16b97e01ab740e2bae1137723b2f1a31b1", - "dweb:/ipfs/QmVMemJ4MSgi6y9NxDdSeB6QbJRtCWojJNxzs3CRLT56EA" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/test.sol": { - "keccak256": "0x8758531bbac3972efcf1fa46383dbe1d276406fe527bc7abb2f236486278e83b", - "urls": [ - "bzz-raw://1f64264d61506847acf8761e84aff690cebe830958eac00bac7924d8be569240", - "dweb:/ipfs/QmSekDJvJ82MZAmr63n7YvfLzQ7gS4NLSHPmHL3GN3rw8k" - ], - "license": "GPL-3.0-or-later" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Base.sol": { - "keccak256": "0x4ff1a785311017d1eedb1b4737956fa383067ad34eb439abfec1d989754dde1c", - "urls": [ - "bzz-raw://f553622969b9fdb930246704a4c10dfaee6b1a4468c142fa7eb9dc292a438224", - "dweb:/ipfs/QmcxqHnqdQsMVtgsfH9VNLmZ3g7GhgNagfq7yvNCDcCHFK" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdAssertions.sol": { - "keccak256": "0x1a0dee4d8b2c81e9318e87dd85ef009467ebf7dba6575530d1fce94d34dbae60", - "urls": [ - "bzz-raw://ddd790c86ddde1013d1f7a552a80168eacf2e9244077f96799180644ad523a5b", - "dweb:/ipfs/QmYinBFt9uEVFXP9ytT9CDoNpzWieQVgLWRFRNiypMzJaL" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdChains.sol": { - "keccak256": "0x598b85609125830885b8fb54a18f447d04f8dd799aca3de81baef35eb6b783c0", - "urls": [ - "bzz-raw://c9c128aae4f5668d8c8f71e9e6d9379d8451b8713d139cb66a02d23bc1c75f69", - "dweb:/ipfs/QmVRihXHWi2yg9CcAhzKf63Y7m6gWz4P1giGMhXUHT3DFu" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdCheats.sol": { - "keccak256": "0xb72f3519e0bf7d31df5d68557525f4fc55d861c3fb3b0f7793144ef7c94cbeb7", - "urls": [ - "bzz-raw://f3456d0f78e6f61203fa7871ba2df0d35925f10db3baee14be623ce2a35b84e2", - "dweb:/ipfs/QmWE6QQSBvJifHMraisBTrf1x4WCwrDoTPLX8UKajTiApc" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdError.sol": { - "keccak256": "0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77", - "urls": [ - "bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6", - "dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdInvariant.sol": { - "keccak256": "0x67299bfacd77fddfa2a67b8e2b901e0e333618a4975fb94850b07475e51f6de6", - "urls": [ - "bzz-raw://1b61121d310f4053ce344b345b4a9ccf43b059daf9097ec2647f594beaca896d", - "dweb:/ipfs/QmZUCoTtXBM9zfAZVbj2dFPPnKaV1CSZzXE7zictyg3Gfz" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdJson.sol": { - "keccak256": "0x8f914dbd016bd0e318fe2b8bd556fbc8256c7cddc24e3e4fcb9f3c1c1935592d", - "urls": [ - "bzz-raw://19e704df493dde38323303b07d18cadfeb4dcadf1ddc2301add4aea9474fbb5e", - "dweb:/ipfs/QmZasuGiLK8LHwWtvpqEBxUR6QFY6GdzLMTJ9q7CMf8PNZ" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdMath.sol": { - "keccak256": "0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2", - "urls": [ - "bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92", - "dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdStorage.sol": { - "keccak256": "0x4298f3f4cedaedb07029820b1daad2c03af45379559392201f7bf3ec71105811", - "urls": [ - "bzz-raw://6e062f36d8d1ae3c383ef8975757926eaa9c4de3a92b5f1fe2d12748bcd8db32", - "dweb:/ipfs/QmcWkv3ia5Ew4DZNcudMNSTNXZ3W2QiXTZunRd44e9BT8z" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdStyle.sol": { - "keccak256": "0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d", - "urls": [ - "bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8", - "dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdUtils.sol": { - "keccak256": "0x502b18a4becda6ecd91fa8b419d8034946bfa80e6cc7f6497f51f8565bfadae0", - "urls": [ - "bzz-raw://bf499ee483a1dfd02023d4ce78ed4029a49794ccd5b849aaab912faea0d2ba61", - "dweb:/ipfs/QmP6hwNZW7sYbQK9fBzuZWxfLm6Swx2nKzvZ54qWNqQkzX" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Test.sol": { - "keccak256": "0x39b1729d5868c8e94ab8af16751eb500a17fe3870dc627d2b7ddcd5df18d7ad0", - "urls": [ - "bzz-raw://1568c82aff125cc4b0fc168be9d67ac313f469a3c7405c5493caecaaaecfb765", - "dweb:/ipfs/QmXByuZReJsdu1jDcxj1FcmpcUnzoBcqybn9kWgDAECWri" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Vm.sol": { - "keccak256": "0x87ba9f3edc254e529db9e3129c954391adcc7fc8574203767979d8d2f1e724b9", - "urls": [ - "bzz-raw://4d16c08d80d9f2869deb6350642cf5af624d21fce6b3b023abbcdedc62e195fe", - "dweb:/ipfs/QmURpnnFECPKt3i7P7jQRZpr4ZBXjRGcZ9KzcbKzsgYR2W" - ], - "license": "MIT OR Apache-2.0" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/console.sol": { - "keccak256": "0x91d5413c2434ca58fd278b6e1e79fd98d10c83931cc2596a6038eee4daeb34ba", - "urls": [ - "bzz-raw://91ccea707361e48b9b7a161fe81f496b9932bc471e9c4e4e1e9c283f2453cc70", - "dweb:/ipfs/QmcB66sZhQ6Kz7MUHcLE78YXRUZxoZnnxZjN6yATsbB2ec" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/console2.sol": { - "keccak256": "0x954646445d1014c3cd85c7918f5e7adeeca5ee44b68c00bafa237e597a4e35ea", - "urls": [ - "bzz-raw://516fa3be52da4763147175bfba4be0aa011fadbb0c1afb01f97265bd4cee7973", - "dweb:/ipfs/QmdixAyMJefx7qePChgdxcBH5MxhmN7vsqPuPLx3CgrVmF" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/interfaces/IMulticall3.sol": { - "keccak256": "0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a", - "urls": [ - "bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0", - "dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/mocks/MockERC20.sol": { - "keccak256": "0xd8703f49411737ecf8d411f8fa66b2bf0ef972ba28b7a4adf1748c63df1bf682", - "urls": [ - "bzz-raw://b7c10a6b8112f6fe3cdccb6240ecd382765216b1a82e9a86a0fec8f5e09eadd1", - "dweb:/ipfs/QmdRvPCU4RkjMHsTu3Ric1ZEF1AWDNLp78unFC5aWP17xq" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/mocks/MockERC721.sol": { - "keccak256": "0xa24468244abb66e663fb7eee6463cb518eb9a7c14e1071548ff564cca825bbca", - "urls": [ - "bzz-raw://145585a2194aa6e2d30edfe709ef2814e20b1b4540469aa6a8f50c841fcb9070", - "dweb:/ipfs/QmZrwbvtpbtTxqbW5phUrwb3F1tBiPSQc6jZJAXBfsBsAh" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/safeconsole.sol": { - "keccak256": "0xbaf41fdc6c54297e7cd8250e48b0f20eaac918e342a1028cef3f9a52ac086381", - "urls": [ - "bzz-raw://a500ad81dea226f9910e6b50f99a9ff930105e393a692cbfb2185e4cdb4424ae", - "dweb:/ipfs/QmVbUQpXNMmMWRiy4FvBNczzq46BMGfUoBikvSHNiCxVTq" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/access/AccessControl.sol": { - "keccak256": "0xa0e92d42942f4f57c5be50568dac11e9d00c93efcb458026e18d2d9b9b2e7308", - "urls": [ - "bzz-raw://46326c0bb1e296b67185e81c918e0b40501b8b6386165855df0a3f3c634b6a80", - "dweb:/ipfs/QmTwyrDYtsxsk6pymJTK94PnEpzsmkpUxFuzEiakDopy4Z" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/access/IAccessControl.sol": { - "keccak256": "0xc1c2a7f1563b77050dc6d507db9f4ada5d042c1f6a9ddbffdc49c77cdc0a1606", - "urls": [ - "bzz-raw://fd54abb96a6156d9a761f6fdad1d3004bc48d2d4fce47f40a3f91a7ae83fc3a1", - "dweb:/ipfs/QmUrFSGkTDJ7WaZ6qPVVe3Gn5uN2viPb7x7QQ35UX4DofX" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/access/Ownable.sol": { - "keccak256": "0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb", - "urls": [ - "bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6", - "dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol": { - "keccak256": "0x9b6b3e7803bc5f2f8cd7ad57db8ac1def61a9930a5a3107df4882e028a9605d7", - "urls": [ - "bzz-raw://da62d6be1f5c6edf577f0cb45666a8aa9c2086a4bac87d95d65f02e2f4c36a4b", - "dweb:/ipfs/QmNkpvBpoCMvX8JwAFNSc5XxJ2q5BXJpL5L1txb4QkqVFF" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/interfaces/IERC165.sol": { - "keccak256": "0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724", - "urls": [ - "bzz-raw://11fea9f8bc98949ac6709f0c1699db7430d2948137aa94d5a9e95a91f61a710a", - "dweb:/ipfs/QmQdfRXxQjwP6yn3DVo1GHPpriKNcFghSPi94Z1oKEFUNS" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/interfaces/IERC20.sol": { - "keccak256": "0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c", - "urls": [ - "bzz-raw://a2608291cb038b388d80b79a06b6118a42f7894ff67b7da10ec0dbbf5b2973ba", - "dweb:/ipfs/QmWohqcBLbcxmA4eGPhZDXe5RYMMEEpFq22nfkaUMvTfw1" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol": { - "keccak256": "0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7", - "urls": [ - "bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db", - "dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol": { - "keccak256": "0xca2ae13e0610f6a99238dd00b97bd786bc92732dae6d6b9d61f573ec51018310", - "urls": [ - "bzz-raw://75f8c71ce0c91c40dd5f249ace0b7d8270f8f1767231bcf71490f7157d6ba862", - "dweb:/ipfs/QmYXgxeDyFHvz3JsXxLEYN6GNUR44ThHeFj5XkpkgMoG4w" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Address.sol": { - "keccak256": "0x9d8da059267bac779a2dbbb9a26c2acf00ca83085e105d62d5d4ef96054a47f5", - "urls": [ - "bzz-raw://c78e2aa4313323cecd1ef12a8d6265b96beee1a199923abf55d9a2a9e291ad23", - "dweb:/ipfs/QmUTs2KStXucZezzFo3EYeqYu47utu56qrF7jj1Gue65vb" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Context.sol": { - "keccak256": "0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2", - "urls": [ - "bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12", - "dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Errors.sol": { - "keccak256": "0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123", - "urls": [ - "bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf", - "dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Panic.sol": { - "keccak256": "0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a", - "urls": [ - "bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a", - "dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Pausable.sol": { - "keccak256": "0xb2e5f50762c27fb4b123e3619c3c02bdcba5e515309382e5bfb6f7d6486510bd", - "urls": [ - "bzz-raw://1a4b83328c98d518a2699c2cbe9e9b055e78aa57fa8639f1b88deb8b3750b5dc", - "dweb:/ipfs/QmXdcYj5v7zQxXFPULShHkR5p4Wa2zYuupbHnFdV3cHYtc" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/ReentrancyGuard.sol": { - "keccak256": "0x11a5a79827df29e915a12740caf62fe21ebe27c08c9ae3e09abe9ee3ba3866d3", - "urls": [ - "bzz-raw://3cf0c69ab827e3251db9ee6a50647d62c90ba580a4d7bbff21f2bea39e7b2f4a", - "dweb:/ipfs/QmZiKwtKU1SBX4RGfQtY7PZfiapbbu6SZ9vizGQD9UHjRA" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/cryptography/ECDSA.sol": { - "keccak256": "0x69f54c02b7d81d505910ec198c11ed4c6a728418a868b906b4a0cf29946fda84", - "urls": [ - "bzz-raw://8e25e4bdb7ae1f21d23bfee996e22736fc0ab44cfabedac82a757b1edc5623b9", - "dweb:/ipfs/QmQdWQvB6JCP9ZMbzi8EvQ1PTETqkcTWrbcVurS7DKpa5n" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/introspection/ERC165.sol": { - "keccak256": "0xddce8e17e3d3f9ed818b4f4c4478a8262aab8b11ed322f1bf5ed705bb4bd97fa", - "urls": [ - "bzz-raw://8084aa71a4cc7d2980972412a88fe4f114869faea3fefa5436431644eb5c0287", - "dweb:/ipfs/Qmbqfs5dRdPvHVKY8kTaeyc65NdqXRQwRK7h9s5UJEhD1p" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol": { - "keccak256": "0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8", - "urls": [ - "bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621", - "dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/math/SafeCast.sol": { - "keccak256": "0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54", - "urls": [ - "bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8", - "dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/structs/DoubleEndedQueue.sol": { - "keccak256": "0x1e1d74658d7f4eab3d4f8fb0c6c5953bc5f629d9425e978d557dabff7b58b217", - "urls": [ - "bzz-raw://be0175d00008d452d3d553890f73a3d5d51dff4372f720336c8b98f26822fcdb", - "dweb:/ipfs/QmUkE8g5xPExWoSAKwdi5ww1qJJVtEWtjSF93G2LMQkgD3" - ], - "license": "MIT" - }, - "node_modules/solidity-bytes-utils/contracts/BytesLib.sol": { - "keccak256": "0xa5b10f04797d5a10a9ba07855108b6bd695940e6a3d128927b2f74a0d359868a", - "urls": [ - "bzz-raw://a38d7680aacbb18dae659876b396b73bcc8f759672213f8a0efc4129e2648535", - "dweb:/ipfs/QmfKFnwpTEGAnbRnZxMuv3mRCG9S9WMjFhFL23bftBT2Jq" - ], - "license": "Unlicense" - } - }, - "version": 1 - }, - "id": 71 -} diff --git a/examples/oft-movement/out/TestHelperOz5.sol/TestHelperOz5.json b/examples/oft-movement/out/TestHelperOz5.sol/TestHelperOz5.json deleted file mode 100644 index 09ae39df0..000000000 --- a/examples/oft-movement/out/TestHelperOz5.sol/TestHelperOz5.json +++ /dev/null @@ -1,2925 +0,0 @@ -{ - "abi": [ - { "type": "receive", "stateMutability": "payable" }, - { - "type": "function", - "name": "DEFAULT_CHANNEL_ID", - "inputs": [], - "outputs": [{ "name": "", "type": "uint32", "internalType": "uint32" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "EVM_COMPUTE_MAP_BPS", - "inputs": [], - "outputs": [{ "name": "", "type": "uint16", "internalType": "uint16" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "EVM_COMPUTE_REDUCE_FEE_USD", - "inputs": [], - "outputs": [{ "name": "", "type": "uint120", "internalType": "uint120" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "EVM_REQUEST_FEE_USD", - "inputs": [], - "outputs": [{ "name": "", "type": "uint120", "internalType": "uint120" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "IS_TEST", - "inputs": [], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "MAP_REDUCE_COMPUTE_TYPES", - "inputs": [], - "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "NATIVE_TOKEN_PRICE_USD", - "inputs": [], - "outputs": [{ "name": "", "type": "uint128", "internalType": "uint128" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "TREASURY_GAS_CAP", - "inputs": [], - "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "TREASURY_GAS_FOR_FEE_CAP", - "inputs": [], - "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "assertGuid", - "inputs": [ - { "name": "packetBytes", "type": "bytes", "internalType": "bytes" }, - { "name": "guid", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "createEndpoints", - "inputs": [ - { "name": "_endpointNum", "type": "uint8", "internalType": "uint8" }, - { - "name": "_libraryType", - "type": "uint8", - "internalType": "enum TestHelperOz5.LibraryType" - }, - { - "name": "nativeTokenAddresses", - "type": "address[]", - "internalType": "address[]" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "decodeLzComposeOption", - "inputs": [ - { "name": "_option", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [ - { "name": "index", "type": "uint16", "internalType": "uint16" }, - { "name": "gas", "type": "uint128", "internalType": "uint128" }, - { "name": "value", "type": "uint128", "internalType": "uint128" } - ], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "decodeLzReadOption", - "inputs": [ - { "name": "_option", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [ - { "name": "gas", "type": "uint128", "internalType": "uint128" }, - { "name": "size", "type": "uint32", "internalType": "uint32" }, - { "name": "value", "type": "uint128", "internalType": "uint128" } - ], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "decodeLzReceiveOption", - "inputs": [ - { "name": "_option", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [ - { "name": "gas", "type": "uint128", "internalType": "uint128" }, - { "name": "value", "type": "uint128", "internalType": "uint128" } - ], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "decodeNativeDropOption", - "inputs": [ - { "name": "_option", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [ - { "name": "amount", "type": "uint128", "internalType": "uint128" }, - { "name": "receiver", "type": "bytes32", "internalType": "bytes32" } - ], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "excludeArtifacts", - "inputs": [], - "outputs": [ - { - "name": "excludedArtifacts_", - "type": "string[]", - "internalType": "string[]" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "excludeContracts", - "inputs": [], - "outputs": [ - { - "name": "excludedContracts_", - "type": "address[]", - "internalType": "address[]" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "excludeSenders", - "inputs": [], - "outputs": [ - { - "name": "excludedSenders_", - "type": "address[]", - "internalType": "address[]" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "executorValueCap", - "inputs": [], - "outputs": [{ "name": "", "type": "uint128", "internalType": "uint128" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "failed", - "inputs": [], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "getNextInflightPacket", - "inputs": [ - { "name": "_dstEid", "type": "uint16", "internalType": "uint16" }, - { "name": "_dstAddress", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [ - { "name": "packetBytes", "type": "bytes", "internalType": "bytes" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "hasPendingPackets", - "inputs": [ - { "name": "_dstEid", "type": "uint16", "internalType": "uint16" }, - { "name": "_dstAddress", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [{ "name": "flag", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "lzCompose", - "inputs": [ - { "name": "_dstEid", "type": "uint32", "internalType": "uint32" }, - { "name": "_from", "type": "address", "internalType": "address" }, - { "name": "_options", "type": "bytes", "internalType": "bytes" }, - { "name": "_guid", "type": "bytes32", "internalType": "bytes32" }, - { "name": "_to", "type": "address", "internalType": "address" }, - { "name": "_composerMsg", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [], - "stateMutability": "payable" - }, - { - "type": "function", - "name": "lzCompose", - "inputs": [ - { "name": "_packetBytes", "type": "bytes", "internalType": "bytes" }, - { "name": "_options", "type": "bytes", "internalType": "bytes" }, - { "name": "_guid", "type": "bytes32", "internalType": "bytes32" }, - { "name": "_composer", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "payable" - }, - { - "type": "function", - "name": "lzReadReceive", - "inputs": [ - { "name": "_packetBytes", "type": "bytes", "internalType": "bytes" }, - { "name": "_options", "type": "bytes", "internalType": "bytes" }, - { "name": "_resolvedPayload", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [], - "stateMutability": "payable" - }, - { - "type": "function", - "name": "lzReceive", - "inputs": [ - { "name": "_packetBytes", "type": "bytes", "internalType": "bytes" }, - { "name": "_options", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [], - "stateMutability": "payable" - }, - { - "type": "function", - "name": "nextExecutorOption", - "inputs": [ - { "name": "_options", "type": "bytes", "internalType": "bytes" }, - { "name": "_cursor", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [ - { "name": "optionType", "type": "uint8", "internalType": "uint8" }, - { "name": "option", "type": "bytes", "internalType": "bytes" }, - { "name": "cursor", "type": "uint256", "internalType": "uint256" } - ], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "registerEndpoint", - "inputs": [ - { - "name": "endpoint", - "type": "address", - "internalType": "contract EndpointV2Mock" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "schedulePacket", - "inputs": [ - { "name": "_packetBytes", "type": "bytes", "internalType": "bytes" }, - { "name": "_options", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setExecutorValueCap", - "inputs": [ - { "name": "_valueCap", "type": "uint128", "internalType": "uint128" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setUp", - "inputs": [], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setUpEndpoints", - "inputs": [ - { "name": "_endpointNum", "type": "uint8", "internalType": "uint8" }, - { - "name": "_libraryType", - "type": "uint8", - "internalType": "enum TestHelperOz5.LibraryType" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setupOApps", - "inputs": [ - { - "name": "_oappCreationCode", - "type": "bytes", - "internalType": "bytes" - }, - { "name": "_startEid", "type": "uint8", "internalType": "uint8" }, - { "name": "_oappNum", "type": "uint8", "internalType": "uint8" } - ], - "outputs": [ - { "name": "oapps", "type": "address[]", "internalType": "address[]" } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "targetArtifactSelectors", - "inputs": [], - "outputs": [ - { - "name": "targetedArtifactSelectors_", - "type": "tuple[]", - "internalType": "struct StdInvariant.FuzzSelector[]", - "components": [ - { "name": "addr", "type": "address", "internalType": "address" }, - { - "name": "selectors", - "type": "bytes4[]", - "internalType": "bytes4[]" - } - ] - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "targetArtifacts", - "inputs": [], - "outputs": [ - { - "name": "targetedArtifacts_", - "type": "string[]", - "internalType": "string[]" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "targetContracts", - "inputs": [], - "outputs": [ - { - "name": "targetedContracts_", - "type": "address[]", - "internalType": "address[]" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "targetInterfaces", - "inputs": [], - "outputs": [ - { - "name": "targetedInterfaces_", - "type": "tuple[]", - "internalType": "struct StdInvariant.FuzzInterface[]", - "components": [ - { "name": "addr", "type": "address", "internalType": "address" }, - { - "name": "artifacts", - "type": "string[]", - "internalType": "string[]" - } - ] - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "targetSelectors", - "inputs": [], - "outputs": [ - { - "name": "targetedSelectors_", - "type": "tuple[]", - "internalType": "struct StdInvariant.FuzzSelector[]", - "components": [ - { "name": "addr", "type": "address", "internalType": "address" }, - { - "name": "selectors", - "type": "bytes4[]", - "internalType": "bytes4[]" - } - ] - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "targetSenders", - "inputs": [], - "outputs": [ - { - "name": "targetedSenders_", - "type": "address[]", - "internalType": "address[]" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "validatePacket", - "inputs": [ - { "name": "_packetBytes", "type": "bytes", "internalType": "bytes" }, - { "name": "_resolvedPayload", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "verifyPackets", - "inputs": [ - { "name": "_dstEid", "type": "uint32", "internalType": "uint32" }, - { "name": "_dstAddress", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "verifyPackets", - "inputs": [ - { "name": "_dstEid", "type": "uint32", "internalType": "uint32" }, - { "name": "_dstAddress", "type": "bytes32", "internalType": "bytes32" }, - { - "name": "_packetAmount", - "type": "uint256", - "internalType": "uint256" - }, - { "name": "_composer", "type": "address", "internalType": "address" }, - { "name": "_resolvedPayload", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "verifyPackets", - "inputs": [ - { "name": "_dstEid", "type": "uint32", "internalType": "uint32" }, - { "name": "_dstAddress", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "wireOApps", - "inputs": [ - { "name": "oapps", "type": "address[]", "internalType": "address[]" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "wireReadOApps", - "inputs": [ - { "name": "oapps", "type": "address[]", "internalType": "address[]" }, - { "name": "channels", "type": "uint32[]", "internalType": "uint32[]" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "event", - "name": "log", - "inputs": [ - { - "name": "", - "type": "string", - "indexed": false, - "internalType": "string" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "log_address", - "inputs": [ - { - "name": "", - "type": "address", - "indexed": false, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "log_array", - "inputs": [ - { - "name": "val", - "type": "uint256[]", - "indexed": false, - "internalType": "uint256[]" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "log_array", - "inputs": [ - { - "name": "val", - "type": "int256[]", - "indexed": false, - "internalType": "int256[]" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "log_array", - "inputs": [ - { - "name": "val", - "type": "address[]", - "indexed": false, - "internalType": "address[]" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "log_bytes", - "inputs": [ - { - "name": "", - "type": "bytes", - "indexed": false, - "internalType": "bytes" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "log_bytes32", - "inputs": [ - { - "name": "", - "type": "bytes32", - "indexed": false, - "internalType": "bytes32" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "log_int", - "inputs": [ - { - "name": "", - "type": "int256", - "indexed": false, - "internalType": "int256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "log_named_address", - "inputs": [ - { - "name": "key", - "type": "string", - "indexed": false, - "internalType": "string" - }, - { - "name": "val", - "type": "address", - "indexed": false, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "log_named_array", - "inputs": [ - { - "name": "key", - "type": "string", - "indexed": false, - "internalType": "string" - }, - { - "name": "val", - "type": "uint256[]", - "indexed": false, - "internalType": "uint256[]" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "log_named_array", - "inputs": [ - { - "name": "key", - "type": "string", - "indexed": false, - "internalType": "string" - }, - { - "name": "val", - "type": "int256[]", - "indexed": false, - "internalType": "int256[]" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "log_named_array", - "inputs": [ - { - "name": "key", - "type": "string", - "indexed": false, - "internalType": "string" - }, - { - "name": "val", - "type": "address[]", - "indexed": false, - "internalType": "address[]" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "log_named_bytes", - "inputs": [ - { - "name": "key", - "type": "string", - "indexed": false, - "internalType": "string" - }, - { - "name": "val", - "type": "bytes", - "indexed": false, - "internalType": "bytes" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "log_named_bytes32", - "inputs": [ - { - "name": "key", - "type": "string", - "indexed": false, - "internalType": "string" - }, - { - "name": "val", - "type": "bytes32", - "indexed": false, - "internalType": "bytes32" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "log_named_decimal_int", - "inputs": [ - { - "name": "key", - "type": "string", - "indexed": false, - "internalType": "string" - }, - { - "name": "val", - "type": "int256", - "indexed": false, - "internalType": "int256" - }, - { - "name": "decimals", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "log_named_decimal_uint", - "inputs": [ - { - "name": "key", - "type": "string", - "indexed": false, - "internalType": "string" - }, - { - "name": "val", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - }, - { - "name": "decimals", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "log_named_int", - "inputs": [ - { - "name": "key", - "type": "string", - "indexed": false, - "internalType": "string" - }, - { - "name": "val", - "type": "int256", - "indexed": false, - "internalType": "int256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "log_named_string", - "inputs": [ - { - "name": "key", - "type": "string", - "indexed": false, - "internalType": "string" - }, - { - "name": "val", - "type": "string", - "indexed": false, - "internalType": "string" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "log_named_uint", - "inputs": [ - { - "name": "key", - "type": "string", - "indexed": false, - "internalType": "string" - }, - { - "name": "val", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "log_string", - "inputs": [ - { - "name": "", - "type": "string", - "indexed": false, - "internalType": "string" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "log_uint", - "inputs": [ - { - "name": "", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "logs", - "inputs": [ - { - "name": "", - "type": "bytes", - "indexed": false, - "internalType": "bytes" - } - ], - "anonymous": false - }, - { - "type": "error", - "name": "Executor_InvalidLzComposeOption", - "inputs": [] - }, - { "type": "error", "name": "Executor_InvalidLzReadOption", "inputs": [] }, - { - "type": "error", - "name": "Executor_InvalidLzReceiveOption", - "inputs": [] - }, - { - "type": "error", - "name": "Executor_InvalidNativeDropOption", - "inputs": [] - } - ], - "bytecode": { - "object": "0x6080604081905260078054600160ff199182168117909255600b805490911690911790556200002e906200009c565b604051809103906000f0801580156200004b573d6000803e3d6000fd5b50601c80546001600160a01b03929092166001600160a01b0319909216919091179055602180546001600160801b03191667016345785d8a00001790553480156200009557600080fd5b50620000aa565b6107f2806202bc4183390190565b6202bb8680620000bb6000396000f3fe608060405260043610620002ab5760003560e01c80637982cf42116200016b578063b752b72a11620000d1578063defd9da61162000084578063defd9da6146200089f578063e20c9f7114620008e0578063ec53eaa014620008f8578063f93e1d61146200090f578063fa7626d41462000955578063faed6c58146200097157600080fd5b8063b752b72a14620007c6578063b76bada514620007eb578063b954fdf61462000802578063ba414fa61462000847578063baead19c146200085f578063d6d62497146200087a57600080fd5b80639751ca86116200012a5780639751ca8614620006d0578063997cff1b1462000725578063a29c8984146200074a578063ae6ce4001462000761578063b1dcf5c81462000786578063b5508aa914620007ae57600080fd5b80637982cf42146200063857806382411c77146200033e578063834bd159146200066c57806385226c811462000691578063916a17c614620006b857600080fd5b80633e5e3c2311620002115780636019788911620001d057806360197889146200054c57806365449eb0146200057157806366d9a9a01462000596578063699cbade14620005bd5780636e1775e314620005dc578063703ca254146200061357600080fd5b80633e5e3c2314620004675780633f7286f4146200047f578063518e8ab0146200049757806351aa318b14620004e75780635ea0fefe146200051657600080fd5b80631cc46525116200026a5780631cc46525146200037d5780631ed7831c14620003a25780632113ce6214620003c95780632a35d25014620004045780632ade388014620004295780633bbd6a94146200045057600080fd5b8063090852b614620002b85780630a69faa914620002df5780630a9254e414620002f65780630afba868146200030e5780631766f5a4146200033e57600080fd5b36620002b357005b600080fd5b348015620002c557600080fd5b50620002dd620002d73660046200607b565b62000996565b005b620002dd620002f0366004620061f7565b620009c5565b3480156200030357600080fd5b50620002dd62000b03565b3480156200031b57600080fd5b506200032661271081565b60405161ffff90911681526020015b60405180910390f35b3480156200034b57600080fd5b506200035c670de0b6b3a764000081565b6040516effffffffffffffffffffffffffffff909116815260200162000335565b3480156200038a57600080fd5b50620002dd6200039c366004620062ae565b62000b0f565b348015620003af57600080fd5b50620003ba62000b64565b60405162000335919062006326565b348015620003d657600080fd5b50602154620003eb906001600160801b031681565b6040516001600160801b03909116815260200162000335565b3480156200041157600080fd5b50620003ba620004233660046200633b565b62000bc8565b3480156200043657600080fd5b506200044162000cdf565b60405162000335919062006458565b620002dd62000461366004620064db565b62000e2d565b3480156200047457600080fd5b50620003ba62000eed565b3480156200048c57600080fd5b50620003ba62000f4f565b348015620004a457600080fd5b50620004bc620004b636600462006595565b62000fb1565b6040805161ffff90941684526001600160801b03928316602085015291169082015260600162000335565b348015620004f457600080fd5b50620005006201117181565b60405163ffffffff909116815260200162000335565b3480156200052357600080fd5b506200053b62000535366004620065eb565b62000fcf565b604051901515815260200162000335565b3480156200055957600080fd5b50620002dd6200056b3660046200661a565b62001004565b3480156200057e57600080fd5b50620002dd620005903660046200672b565b62001c0a565b348015620005a357600080fd5b50620005ae62001cf0565b604051620003359190620067fc565b348015620005ca57600080fd5b50620003eb68056bc75e2d6310000081565b348015620005e957600080fd5b5062000601620005fb366004620068b5565b62001dda565b6040516200033594939291906200692d565b3480156200062057600080fd5b50620002dd620006323660046200695d565b62001dfe565b3480156200064557600080fd5b506200065d62000657366004620065eb565b62001fc5565b6040516200033591906200699d565b3480156200067957600080fd5b50620002dd6200068b366004620069b2565b620020b3565b3480156200069e57600080fd5b50620006a9620025de565b60405162000335919062006a2f565b348015620006c557600080fd5b50620005ae620026b8565b348015620006dd57600080fd5b50620006f5620006ef36600462006595565b620027a2565b604080516001600160801b03948516815263ffffffff909316602084015292169181019190915260600162000335565b3480156200073257600080fd5b50620002dd62000744366004620068b5565b620027b3565b620002dd6200075b36600462006a44565b6200280b565b3480156200076e57600080fd5b50620002dd6200078036600462006ad4565b62002897565b3480156200079357600080fd5b506200079f620186a081565b60405190815260200162000335565b348015620007bb57600080fd5b50620006a962002938565b348015620007d357600080fd5b50620002dd620007e536600462006af4565b62002a12565b348015620007f857600080fd5b506200079f600381565b3480156200080f57600080fd5b50620008276200082136600462006595565b62002a31565b604080516001600160801b03909316835260208301919091520162000335565b3480156200085457600080fd5b506200053b62002a4c565b3480156200086c57600080fd5b506200079f64e8d4a5100081565b3480156200088757600080fd5b50620002dd6200089936600462006b15565b62002b83565b348015620008ac57600080fd5b50620002dd620008be36600462006b88565b602180546001600160801b0319166001600160801b0392909216919091179055565b348015620008ed57600080fd5b50620003ba62004b53565b620002dd620009093660046200661a565b62004bb5565b3480156200091c57600080fd5b50620009346200092e36600462006595565b62004cf0565b604080516001600160801b0393841681529290911660208301520162000335565b3480156200096257600080fd5b506007546200053b9060ff1681565b3480156200097e57600080fd5b50620002dd6200099036600462006ba8565b62004cff565b620009c182826001600160a01b031660001b60008060405180602001604052806000815250620020b3565b5050565b600060206000620009d7878762004d91565b63ffffffff16815260208101919091526040016000908120546001600160a01b031691508062000a078562004db8565b92505091506000604051806060016040528062000a258a8a62004ea7565b63ffffffff16815260200162000a3c8a8a62004eb9565b815260200162000a4d8a8a62004ed6565b6001600160401b0316905290506001600160a01b038416630c0c389e6001600160801b038581169085168462000a848d8d62004efd565b62000a908e8e62004f12565b604080516020810182526000815290516001600160e01b031960e089901b16815262000ac4949392918e9160040162006c1a565b6000604051808303818589803b15801562000ade57600080fd5b5088f115801562000af3573d6000803e3d6000fd5b5050505050505050505050505050565b62000b0d62004f24565b565b620009c182828460ff166001600160401b0381111562000b335762000b33620060fd565b60405190808252806020026020018201604052801562000b5d578160200160208202803683370190505b5062002b83565b6060601480548060200260200160405190810160405280929190818152602001828054801562000bbe57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831162000b9f575b5050505050905090565b60608160ff166001600160401b0381111562000be85762000be8620060fd565b60405190808252806020026020018201604052801562000c12578160200160208202803683370190505b509050825b62000c23838562006ca3565b60ff168160ff16101562000ccc5760ff81166000908152602080805260408083205481516001600160a01b039091169281019290925230908201526001606082015262000c8490879060800160405160208183030381529060405262004f72565b9050808362000c94878562006cbf565b60ff168151811062000caa5762000caa62006cdb565b6001600160a01b03909216602092830291909101909101525060010162000c17565b5062000cd88162001dfe565b9392505050565b6060601b805480602002602001604051908101604052809291908181526020016000905b8282101562000e2457600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b8282101562000e0c57838290600052602060002001805462000d789062006cf1565b80601f016020809104026020016040519081016040528092919081815260200182805462000da69062006cf1565b801562000df75780601f1062000dcb5761010080835404028352916020019162000df7565b820191906000526020600020905b81548152906001019060200180831162000dd957829003601f168201915b50505050508152602001906001019062000d56565b50505050815250508152602001906001019062000d03565b50505050905090565b63ffffffff871660009081526020805260408120546001600160a01b031690808062000e598962004fd1565b925092509250836001600160a01b03166391d20fa18284908d8b8d898d8d604051806020016040528060008152506040518a63ffffffff1660e01b815260040162000eab979695949392919062006d2d565b6000604051808303818589803b15801562000ec557600080fd5b5088f115801562000eda573d6000803e3d6000fd5b5050505050505050505050505050505050565b6060601680548060200260200160405190810160405280929190818152602001828054801562000bbe576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831162000b9f575050505050905090565b6060601580548060200260200160405190810160405280929190818152602001828054801562000bbe576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831162000b9f575050505050905090565b600080600062000fc28585620050ce565b9250925092509250925092565b61ffff82166000908152601d6020908152604080832084845290915281208162000ff9826200514c565b119150505b92915050565b600062001012848462004d91565b63ffffffff811660009081526020805260408120549192506001600160a01b03909116908163402f846862001048888862004efd565b62001054898962004ea7565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015263ffffffff1660248201526044016040805180830381865afa158015620010a3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620010c9919062006dad565b5090506000620010da87876200516a565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052506040805163054fd4d560e41b8152905195965090946001600160a01b03881694506354fd4d509350600480830193506060928290030181865afa15801562001156573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200117c919062006e03565b50509050806001600160401b031660030362001652578260006001600160a01b038216639c33abf7620011b08c8c62004ea7565b620011bc8d8d62004efd565b6040516001600160e01b031960e085901b16815263ffffffff9290921660048301526001600160a01b0316602482015260026044820152606401600060405180830381865afa15801562001214573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200123e919081019062006e95565b905060008180602001905181019062001258919062006f3e565b6080015160008151811062001271576200127162006cdb565b602002602001015190506000620012898c8c6200517c565b6040516200129992919062007025565b6040518091039020905060606000630223536e60e01b88846064604051602401620012c79392919062007035565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152905060006001600160a01b03851663f010cb238d89856200131d426103e862007063565b6040518563ffffffff1660e01b81526004016200133e949392919062007079565b602060405180830381865afa1580156200135c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620013829190620070bc565b90506200138f816200518e565b60408051600180825281830190925291945060009250816020015b620013b462005d25565b815260200190600190039081620013aa5790505090506040518060a001604052808d63ffffffff168152602001886001600160a01b03168152602001838152602001426103e862001406919062007063565b8152602001848152508160008151811062001425576200142562006cdb565b602090810291909101015260405163b143044b60e01b81526001600160a01b0386169063b143044b906200145e908490600401620070d6565b600060405180830381600087803b1580156200147957600080fd5b505af11580156200148e573d6000803e3d6000fd5b505050506000630894edf160e01b8a86604051602401620014b192919062007188565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152905060006001600160a01b03871663f010cb238f8b8562001507426103e862007063565b6040518563ffffffff1660e01b815260040162001528949392919062007079565b602060405180830381865afa15801562001546573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200156c9190620070bc565b905062001579816200518e565b9450506040518060a001604052808e63ffffffff168152602001896001600160a01b03168152602001828152602001426103e8620015b8919062007063565b81526020018581525082600081518110620015d757620015d762006cdb565b602090810291909101015260405163b143044b60e01b81526001600160a01b0387169063b143044b9062001610908590600401620070d6565b600060405180830381600087803b1580156200162b57600080fd5b505af115801562001640573d6000803e3d6000fd5b50505050505050505050505062001c00565b806001600160401b0316600a0362001b9b578260006001600160a01b038216639c33abf7620016828c8c62004ea7565b6200168e8d8d62004efd565b6040516001600160e01b031960e085901b16815263ffffffff9290921660048301526001600160a01b0316602482015260016044820152606401600060405180830381865afa158015620016e6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262001710919081019062006e95565b90506000818060200190518101906200172a9190620071ac565b6080015160008151811062001743576200174362006cdb565b6020026020010151905060006200175b8c8c620052a8565b6040516200176b92919062007025565b604051809103902090506000620017838d8d62004f12565b8b6040516020016200179792919062007201565b6040516020818303038152906040528051906020012090506060600063ab750e7560e01b898585604051602401620017d29392919062007229565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152905060006001600160a01b03861663f010cb238e8a8562001828426103e862007063565b6040518563ffffffff1660e01b815260040162001849949392919062007079565b602060405180830381865afa15801562001867573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200188d9190620070bc565b90506200189a816200518e565b60408051600180825281830190925291945060009190816020015b620018bf62005d25565b815260200190600190039081620018b55790505090506040518060a001604052808f63ffffffff1681526020018a6001600160a01b03168152602001848152602001426103e862001911919062007063565b8152602001858152508160008151811062001930576200193062006cdb565b602090810291909101015260405163b143044b60e01b81526001600160a01b0388169063b143044b9062001969908490600401620070d6565b600060405180830381600087803b1580156200198457600080fd5b505af115801562001999573d6000803e3d6000fd5b50505050505050600063594924da60e01b898585604051602401620019c19392919062007229565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152905060006001600160a01b03861663f010cb238e8a8562001a17426103e862007063565b6040518563ffffffff1660e01b815260040162001a38949392919062007079565b602060405180830381865afa15801562001a56573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001a7c9190620070bc565b905062001a89816200518e565b60408051600180825281830190925291945060009190816020015b62001aae62005d25565b81526020019060019003908162001aa45790505090506040518060a001604052808f63ffffffff1681526020018a6001600160a01b03168152602001848152602001426103e862001b00919062007063565b8152602001858152508160008151811062001b1f5762001b1f62006cdb565b602090810291909101015260405163b143044b60e01b81526001600160a01b0388169063b143044b9062001b58908490600401620070d6565b600060405180830381600087803b15801562001b7357600080fd5b505af115801562001b88573d6000803e3d6000fd5b5050505050505050505050505062001c00565b6040516312cc947f60e01b81526001600160a01b038416906312cc947f9062001bcb908b908b9060040162007250565b600060405180830381600087803b15801562001be657600080fd5b505af115801562001bfb573d6000803e3d6000fd5b505050505b5050505050505050565b60005b825181101562001ceb57600083828151811062001c2e5762001c2e62006cdb565b6020026020010151905060005b835181101562001ce057816001600160a01b031663f0a9e48185838151811062001c695762001c6962006cdb565b60209081029190910101516040516001600160e01b031960e084901b16815263ffffffff909116600482015260016024820152604401600060405180830381600087803b15801562001cba57600080fd5b505af115801562001ccf573d6000803e3d6000fd5b50506001909201915062001c3b9050565b505060010162001c0d565b505050565b60606019805480602002602001604051908101604052809291908181526020016000905b8282101562000e245760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801562001dc157602002820191906000526020600020906000905b82829054906101000a900460e01b6001600160e01b0319168152602001906004019060208260030104928301926001038202915080841162001d825790505b5050505050815250508152602001906001019062001d14565b60003660008062001ded878787620052ba565b935093509350935093509350935093565b805160005b8181101562001ceb57600083828151811062001e235762001e2362006cdb565b6020026020010151905060005b8381101562001fba5782811462001fb157600085828151811062001e585762001e5862006cdb565b602002602001015190506000816001600160a01b0316635e280f116040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001ea3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001ec9919062007266565b6001600160a01b031663416ecebf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001f07573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001f2d919062007286565b9050836001600160a01b0316633400288b8262001f50856001600160a01b031690565b6040516001600160e01b031960e085901b16815263ffffffff9290921660048301526024820152604401600060405180830381600087803b15801562001f9557600080fd5b505af115801562001faa573d6000803e3d6000fd5b5050505050505b60010162001e30565b505060010162001e03565b61ffff82166000908152601d60209081526040808320848452909152812060609162001ff1826200514c565b1115620020ac576000620020058262005316565b6000818152601e60205260409020805491925090620020249062006cf1565b80601f0160208091040260200160405190810160405280929190818152602001828054620020529062006cf1565b8015620020a35780601f106200207757610100808354040283529160200191620020a3565b820191906000526020600020905b8154815290600101906020018083116200208557829003601f168201915b50505050509250505b5092915050565b63ffffffff851660009081526020805260409020546001600160a01b0316620021235760405162461bcd60e51b815260206004820152601b60248201527f656e64706f696e74206e6f74207965742072656769737465726564000000000060448201526064015b60405180910390fd5b63ffffffff85166000908152601d602090815260408083208784529091528120906200214f826200514c565b90506000856000036200216f5762002167836200514c565b905062002183565b8582116200217e578162002180565b855b90505b801562001c0057806200219681620072a6565b9150506000620021a68462005377565b6000818152601e6020526040812080549293509091620021c69062006cf1565b80601f0160208091040260200160405190810160405280929190818152602001828054620021f49062006cf1565b8015620022455780601f10620022195761010080835404028352916020019162002245565b820191906000526020600020905b8154815290600101906020018083116200222757829003601f168201915b505060405163997cff1b60e01b8152939450309363997cff1b9350620022749250859150869060040162007188565b60006040518083038186803b1580156200228d57600080fd5b505afa158015620022a2573d6000803e3d6000fd5b5050604051636019788960e01b815230925063601978899150620022cd9084908a90600401620072c0565b600060405180830381600087803b158015620022e857600080fd5b505af1158015620022fd573d6000803e3d6000fd5b5050506000838152601f602052604081208054919250906200231f9062006cf1565b80601f01602080910402602001604051908101604052809291908181526020018280546200234d9062006cf1565b80156200239e5780601f1062002372576101008083540402835291602001916200239e565b820191906000526020600020905b8154815290600101906020018083116200238057829003601f168201915b50505050509050620023b2816002620053db565b156200246e57600080620023c683620053f1565b604051919350915081906000906001600160a01b0383169085908381818185875af1925050503d80600081146200241a576040519150601f19603f3d011682016040523d82523d6000602084013e6200241f565b606091505b5050905080620024695760405162461bcd60e51b81526020600482015260146024820152732330b4b632b2103a379039b2b7321022ba3432b960611b60448201526064016200211a565b505050505b6200247b816001620053db565b15620024dd576040516307629f5560e51b8152309063ec53eaa090620024a89085908590600401620072c0565b600060405180830381600087803b158015620024c357600080fd5b505af1158015620024d8573d6000803e3d6000fd5b505050505b620024ea816005620053db565b156200254e57604051630a69faa960e01b81523090630a69faa9906200251990859085908c90600401620072e9565b600060405180830381600087803b1580156200253457600080fd5b505af115801562002549573d6000803e3d6000fd5b505050505b6001600160a01b038816158015906200256f57506200256f816003620053db565b15620025d5576040516328a7226160e21b8152309063a29c898490620025a0908590859088908e9060040162007332565b600060405180830381600087803b158015620025bb57600080fd5b505af1158015620025d0573d6000803e3d6000fd5b505050505b50505062002183565b60606018805480602002602001604051908101604052809291908181526020016000905b8282101562000e24578382906000526020600020018054620026249062006cf1565b80601f0160208091040260200160405190810160405280929190818152602001828054620026529062006cf1565b8015620026a35780601f106200267757610100808354040283529160200191620026a3565b820191906000526020600020905b8154815290600101906020018083116200268557829003601f168201915b50505050508152602001906001019062002602565b6060601a805480602002602001604051908101604052809291908181526020016000905b8282101562000e245760008481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156200278957602002820191906000526020600020906000905b82829054906101000a900460e01b6001600160e01b031916815260200190600401906020826003010492830192600103820291508084116200274a5790505b50505050508152505081526020019060010190620026dc565b600080600062000fc28585620054e8565b6000620027c1848462004f12565b9050818114620028055760405162461bcd60e51b815260206004820152600e60248201526d0ceead2c840dcdee840dac2e8c6d60931b60448201526064016200211a565b50505050565b30633bbd6a946200281d878762004d91565b62002829888862004efd565b868686620028388c8c620052a8565b6040518863ffffffff1660e01b81526004016200285c97969594939291906200737d565b600060405180830381600087803b1580156200287757600080fd5b505af11580156200288c573d6000803e3d6000fd5b505050505050505050565b8060206000836001600160a01b031663416ecebf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620028db573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002901919062007286565b63ffffffff168152602081019190915260400160002080546001600160a01b0319166001600160a01b039290921691909117905550565b60606017805480602002602001604051908101604052809291908181526020016000905b8282101562000e245783829060005260206000200180546200297e9062006cf1565b80601f0160208091040260200160405190810160405280929190818152602001828054620029ac9062006cf1565b8015620029fd5780601f10620029d157610100808354040283529160200191620029fd565b820191906000526020600020905b815481529060010190602001808311620029df57829003601f168201915b5050505050815260200190600101906200295c565b620009c1828260008060405180602001604052806000815250620020b3565b60008062002a4084846200555d565b915091505b9250929050565b600754600090610100900460ff161562002a6f5750600754610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1562002b7e5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190526519985a5b195960d21b8284015282518083038401815260608301909352600092909162002b00917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc491608001620073df565b60408051601f198184030181529082905262002b1c9162007412565b6000604051808303816000865af19150503d806000811462002b5b576040519150601f19603f3d011682016040523d82523d6000602084013e62002b60565b606091505b509150508080602001905181019062002b7a919062007430565b9150505b919050565b8260ff166001600160401b0381111562002ba15762002ba1620060fd565b60405190808252806020026020018201604052801562002bcb578160200160208202803683370190505b50805162002be29160229160209091019062005d63565b508260ff166001600160401b0381111562002c015762002c01620060fd565b60405190808252806020026020018201604052801562002c2b578160200160208202803683370190505b50805162002c429160239160209091019062005dcd565b508260ff166001600160401b0381111562002c615762002c61620060fd565b60405190808252806020026020018201604052801562002c8b578160200160208202803683370190505b50805162002ca29160249160209091019062005d63565b508260ff166001600160401b0381111562002cc15762002cc1620060fd565b60405190808252806020026020018201604052801562002ceb578160200160208202803683370190505b50805162002d029160259160209091019062005d63565b508260ff166001600160401b0381111562002d215762002d21620060fd565b60405190808252806020026020018201604052801562002d4b578160200160208202803683370190505b50805162002d629160269160209091019062005d63565b5060408051600180825281830190925290602080830190803683375050815162002d9492602792506020019062005d63565b506040516001625e79b760e01b0319815260016004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ffa1864990602401602060405180830381865afa15801562002de9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002e0f919062007266565b6027805460009062002e255762002e2562006cdb565b6000918252602082200180546001600160a01b0319166001600160a01b0393909316929092179091555b8360ff168160ff1610156200307957600062002e6d82600162006ca3565b60ff1690506000838360ff168151811062002e8c5762002e8c62006cdb565b602002602001015190508160226001018460ff168154811062002eb35762002eb362006cdb565b90600052602060002090600891828204019190066004026101000a81548163ffffffff021916908363ffffffff16021790555060006001600160a01b0316816001600160a01b03160362002f9857813060405162002f119062005e7e565b63ffffffff90921682526001600160a01b03166020820152604001604051809103906000f08015801562002f49573d6000803e3d6000fd5b506022805460ff861690811062002f645762002f6462006cdb565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555062003033565b81308260405162002fa99062005e8c565b63ffffffff90931683526001600160a01b039182166020840152166040820152606001604051809103906000f08015801562002fe9573d6000803e3d6000fd5b506022805460ff861690811062003004576200300462006cdb565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b6200306e60226000018460ff168154811062003053576200305362006cdb565b6000918252602090912001546001600160a01b031662002897565b505060010162002e4f565b5030604051620030899062005e9a565b6001600160a01b039091168152602001604051809103906000f080158015620030b6573d6000803e3d6000fd5b50602880546001600160a01b0319166001600160a01b039290921691909117905560005b8360ff168160ff161015620048245760008360018111156200310057620031006200744e565b036200461f57600060226000018260ff168154811062003124576200312462006cdb565b9060005260206000200160009054906101000a90046001600160a01b03169050308164e8d4a51000620186a06040516200315e9062005ea8565b6001600160a01b03948516815293909216602084015260408301526060820152608001604051809103906000f0801580156200319e573d6000803e3d6000fd5b50602980546001600160a01b0319166001600160a01b03929092169190911790556040518190620031cf9062005eb6565b6001600160a01b039091168152602001604051809103906000f080158015620031fc573d6000803e3d6000fd5b50602960010160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550308164e8d4a51000620186a0604051620032409062005ec4565b6001600160a01b03948516815293909216602084015260408301526060820152608001604051809103906000f08015801562003280573d6000803e3d6000fd5b50602b80546001600160a01b0319166001600160a01b03929092169190911790556022805460ff8416908110620032bb57620032bb62006cdb565b60009182526020909120015460295460405163e8964e8160e01b81526001600160a01b03918216600482015291169063e8964e8190602401600060405180830381600087803b1580156200330e57600080fd5b505af115801562003323573d6000803e3d6000fd5b5050505060226000018260ff168154811062003343576200334362006cdb565b600091825260209091200154602a5460405163e8964e8160e01b81526001600160a01b03918216600482015291169063e8964e8190602401600060405180830381600087803b1580156200339657600080fd5b505af1158015620033ab573d6000803e3d6000fd5b5050505060226000018260ff1681548110620033cb57620033cb62006cdb565b600091825260209091200154602b5460405163e8964e8160e01b81526001600160a01b03918216600482015291169063e8964e8190602401600060405180830381600087803b1580156200341e57600080fd5b505af115801562003433573d6000803e3d6000fd5b5050602954602480546001600160a01b039092169350915060ff851690811062003461576200346162006cdb565b600091825260209091200180546001600160a01b0319166001600160a01b03928316179055602a546025805491909216919060ff8516908110620034a957620034a962006cdb565b600091825260209091200180546001600160a01b0319166001600160a01b03928316179055602b546026805491909216919060ff8516908110620034f157620034f162006cdb565b6000918252602082200180546001600160a01b03939093166001600160a01b03199093169290921790915560408051600180825281830190925290816020016020820280368337019050509050308160008151811062003555576200355562006cdb565b6001600160a01b0392909216602092830291909101820152604080516003808252608082019092526000929091908201606080368337505060295482519293506001600160a01b031691839150600090620035b457620035b462006cdb565b6001600160a01b039283166020918202929092010152602a54825191169082906001908110620035e857620035e862006cdb565b6001600160a01b039283166020918202929092010152602b548251911690829060029081106200361c576200361c62006cdb565b6001600160a01b0392831660209182029290920101526028546040518592600092859291169030908790620036519062005ed2565b620036629695949392919062007464565b604051809103906000f0801580156200367f573d6000803e3d6000fd5b50602c80546001600160a01b0319166001600160a01b03929092169190911790556023805460ff8616908110620036ba57620036ba62006cdb565b90600052602060002090600891828204019190066004029054906101000a900463ffffffff16604051620036ee9062005ee0565b63ffffffff9091168152602001604051809103906000f08015801562003718573d6000803e3d6000fd5b50602e80546001600160a01b0319166001600160a01b03928316908117909155602c5460405163c7b2370b60e01b815260048101929092529091169063c7b2370b90602401600060405180830381600087803b1580156200377857600080fd5b505af11580156200378d573d6000803e3d6000fd5b5050505060226001018460ff1681548110620037ad57620037ad62006cdb565b6000918252602090912060088204015460079091166004026101000a900463ffffffff16620037de85600162006ca3565b60285460405184916001600160a01b0316906027906001908890620038039062005eee565b620038159796959493929190620074b4565b604051809103906000f08015801562003832573d6000803e3d6000fd5b50602d80546001600160a01b0319166001600160a01b03929092169190911790556023805460ff86169081106200386d576200386d62006cdb565b90600052602060002090600891828204019190066004029054906101000a900463ffffffff16670de0b6b3a7640000604051620038aa9062005efc565b63ffffffff90921682526020820152604001604051809103906000f080158015620038d9573d6000803e3d6000fd5b50602f80546001600160a01b0319166001600160a01b03929092169182179055604051630e7c9b7f60e21b8152670de0b6b3a764000060048201819052602482015261271060448201526339f26dfc90606401600060405180830381600087803b1580156200394757600080fd5b505af11580156200395c573d6000803e3d6000fd5b5050602d54602f5460405163c7b2370b60e01b81526001600160a01b0391821660048201529116925063c7b2370b9150602401600060405180830381600087803b158015620039aa57600080fd5b505af1158015620039bf573d6000803e3d6000fd5b505050505050620039ea60405180606001604052806060815260200160608152602001606081525090565b620039f786600162006ca3565b60ff166001600160401b0381111562003a145762003a14620060fd565b60405190808252806020026020018201604052801562003a7657816020015b6040805160c08101825260008082526020808301829052928201819052606082018190526080820181905260a0820152825260001990920191018162003a335790505b50815262003a8686600162006ca3565b60ff166001600160401b0381111562003aa35762003aa3620060fd565b60405190808252806020026020018201604052801562003af757816020015b60408051608081018252600080825260208083018290529282018190526060820152825260001990920191018162003ac25790505b50602082015262003b0a86600162006ca3565b60ff166001600160401b0381111562003b275762003b27620060fd565b60405190808252806020026020018201604052801562003b6e57816020015b604080518082019091526000808252602082015281526020019060019003908162003b465790505b506040828101919091528051600180825281830190925260009160208083019080368337505060408051600080825260208201909252602d54845194955090936001600160a01b03909116925084919062003bcd5762003bcd62006cdb565b60200260200101906001600160a01b031690816001600160a01b03168152505060005b8860ff168160ff1610156200420d578060ff168660ff1603156200420457600062003c1d82600162006ca3565b60408051600180825281830190925260ff92909216925060009190816020015b62003c4762005f0a565b81526020019060019003908162003c3d57905050905060006040518060c0016040528060646001600160401b03168152602001875160ff168152602001865160ff168152602001600060ff16815260200187815260200186815250905060405180604001604052808463ffffffff168152602001828152508260008151811062003cd55762003cd562006cdb565b60209081029190910101526029546040516329460b0b60e01b81526001600160a01b03909116906329460b0b9062003d1290859060040162007562565b600060405180830381600087803b15801562003d2d57600080fd5b505af115801562003d42573d6000803e3d6000fd5b5050602a546040516329460b0b60e01b81526001600160a01b0390911692506329460b0b915062003d7890859060040162007562565b600060405180830381600087803b15801562003d9357600080fd5b505af115801562003da8573d6000803e3d6000fd5b50600092506001915062003db99050565b60405190808252806020026020018201604052801562003df657816020015b62003de262005f73565b81526020019060019003908162003dd85790505b506040805180820182526127108152602c546001600160a01b0316602080830191909152825180840190935263ffffffff881683528201819052825192935091839060009062003e4a5762003e4a62006cdb565b602090810291909101015260295460405163c14c434960e01b81526001600160a01b039091169063c14c43499062003e8790859060040162007640565b600060405180830381600087803b15801562003ea257600080fd5b505af115801562003eb7573d6000803e3d6000fd5b50506040805160c08101825263ffffffff89168152611388602082018190529181019190915261271060608201526402540be40060808201526021546001600160801b031660a08201528b518051919550935060ff891692508210905062003f235762003f2362006cdb565b602002602001018190525060405180608001604052808463ffffffff1681526020016113886001600160401b0316815260200161271061ffff1681526020016402540be4006001600160801b031681525087602001518560ff168151811062003f905762003f9062006cdb565b602002602001018190525060405180604001604052808463ffffffff168152602001600381525087604001518560ff168151811062003fd35762003fd362006cdb565b60200260200101819052506000602260060160009054906101000a90046001600160a01b03166001600160a01b031663c18403276040518163ffffffff1660e01b8152600401602060405180830381865afa15801562004037573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200405d9190620076b1565b60408051600180825281830190925291925060009190816020015b620040ac60408051808201825260008082528251606081018452818152602081810183905293810191909152909182015290565b8152602001906001900390816200407857905050905060405180604001604052808663ffffffff1681526020016040518060600160405280856001620040f39190620076d1565b6001600160801b0316815260016020820181905260409091015290528151829060009062004125576200412562006cdb565b60209081029190910101526028546040516318b0dbfb60e11b81526001600160a01b0390911690633161b7f69062004162908490600401620076ff565b600060405180830381600087803b1580156200417d57600080fd5b505af115801562004192573d6000803e3d6000fd5b5050602854604051635d6d7ccb60e01b815268056bc75e2d6310000060048201526001600160a01b039091169250635d6d7ccb9150602401600060405180830381600087803b158015620041e557600080fd5b505af1158015620041fa573d6000803e3d6000fd5b5050505050505050505b60010162003bf0565b50604080516001808252818301909252600091816020015b6200422f62005fb8565b815260200190600190039081620042255750506040805160c081018252602c546001600160a01b03168152855160ff9081166020808401919091528651909116828401526000606083018190526080830188905260a08301879052835180850190945262011171845290830182905283519394509092849190620042b757620042b762006cdb565b6020908102919091010152602b5460405163642fa5a760e11b81526001600160a01b039091169063c85f4b4e90620042f490859060040162007773565b600060405180830381600087803b1580156200430f57600080fd5b505af115801562004324573d6000803e3d6000fd5b5050505050506040518060c0016040528060226001018760ff168154811062004351576200435162006cdb565b600091825260209182902060088204015460079091166004026101000a900463ffffffff168252611388908201819052604082015261271060608201526402540be40060808201526021546001600160801b031660a0909101528351805160ff8b16908110620043c557620043c562006cdb565b6020026020010181905250604051806080016040528060226001018760ff1681548110620043f757620043f762006cdb565b600091825260209182902060088204015460079091166004026101000a900463ffffffff1682526113888282015261271060408301526402540be400606090920191909152840151805160ff8b1690811062004457576200445762006cdb565b6020026020010181905250604051806040016040528060226001018760ff168154811062004489576200448962006cdb565b600091825260209182902060088204015460079091166004026101000a900463ffffffff16825260039101526040840151805160ff8b16908110620044d257620044d262006cdb565b6020908102919091010152602c548351604051633d85ac3360e01b81526001600160a01b0390921691633d85ac33916200450f9160040162007851565b600060405180830381600087803b1580156200452a57600080fd5b505af11580156200453f573d6000803e3d6000fd5b5050602d5460208601516040516352d3b87160e01b81526001600160a01b0390921693506352d3b87192506200457891600401620078e3565b600060405180830381600087803b1580156200459357600080fd5b505af1158015620045a8573d6000803e3d6000fd5b5050602f54604080870151905163f5ff608f60e01b81526001600160a01b03909216935063f5ff608f9250620045e19160040162007958565b600060405180830381600087803b158015620045fc57600080fd5b505af115801562004611573d6000803e3d6000fd5b50505050505050506200481b565b60018360018111156200463657620046366200744e565b03620047db5760003060226000018360ff16815481106200465b576200465b62006cdb565b6000918252602090912001546040516001600160a01b039091169062004681906200601c565b6001600160a01b03928316815291166020820152604001604051809103906000f080158015620046b5573d6000803e3d6000fd5b50905060226000018260ff1681548110620046d457620046d462006cdb565b60009182526020909120015460405163e8964e8160e01b81526001600160a01b0383811660048301529091169063e8964e8190602401600060405180830381600087803b1580156200472557600080fd5b505af11580156200473a573d6000803e3d6000fd5b505050508060226002018360ff16815481106200475b576200475b62006cdb565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055508060226003018360ff1681548110620047a657620047a662006cdb565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550506200481b565b60405162461bcd60e51b8152602060048201526014602482015273696e76616c6964206c696272617279207479706560601b60448201526064016200211a565b600101620030da565b5060005b8360ff168160ff1610156200280557600060226000018260ff168154811062004855576200485562006cdb565b60009182526020822001546001600160a01b031691508460018111156200488057620048806200744e565b03620049cd57806001600160a01b031663aafea3126201117160226004018560ff1681548110620048b557620048b562006cdb565b60009182526020909120015460405160e084901b6001600160e01b031916815263ffffffff90921660048301526001600160a01b03166024820152604401600060405180830381600087803b1580156200490e57600080fd5b505af115801562004923573d6000803e3d6000fd5b50505050806001600160a01b031663a718531b6201117160226004018560ff168154811062004956576200495662006cdb565b600091825260208220015460405160e085901b6001600160e01b031916815263ffffffff90931660048401526001600160a01b031660248301526044820152606401600060405180830381600087803b158015620049b357600080fd5b505af1158015620049c8573d6000803e3d6000fd5b505050505b60005b8560ff168160ff16101562004b48578060ff168360ff16031562004b3f576001600160a01b03821663aafea31262004a0a83600162006ca3565b6024805460ff881690811062004a245762004a2462006cdb565b60009182526020909120015460405160e084901b6001600160e01b031916815260ff90921660048301526001600160a01b03166024820152604401600060405180830381600087803b15801562004a7a57600080fd5b505af115801562004a8f573d6000803e3d6000fd5b50505050816001600160a01b031663a718531b82600162004ab1919062006ca3565b6025805460ff881690811062004acb5762004acb62006cdb565b600091825260208220015460405160e085901b6001600160e01b031916815260ff90931660048401526001600160a01b031660248301526044820152606401600060405180830381600087803b15801562004b2557600080fd5b505af115801562004b3a573d6000803e3d6000fd5b505050505b600101620049d0565b505060010162004828565b6060601380548060200260200160405190810160405280929190818152602001828054801562000bbe576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831162000b9f575050505050905090565b60006020600062004bc7868662004d91565b63ffffffff16815260208101919091526040016000908120546001600160a01b031691508062004bf784620055a9565b915091506000604051806060016040528062004c14898962004ea7565b63ffffffff16815260200162004c2b898962004eb9565b815260200162004c3c898962004ed6565b6001600160401b0316905290506001600160a01b038416630c0c389e84848462004c678c8c62004efd565b62004c738d8d62004f12565b62004c7f8e8e620052a8565b604051806020016040528060008152506040518963ffffffff1660e01b815260040162004cb296959493929190620079a2565b6000604051808303818589803b15801562004ccc57600080fd5b5088f115801562004ce1573d6000803e3d6000fd5b50505050505050505050505050565b60008062002a408484620056a0565b600062004d0d858562004d91565b9050600062004d1d868662005704565b63ffffffff83166000908152601d60209081526040808320848452909152812091925062004d4c888862004f12565b905062004d5a828262005716565b6000818152601e6020526040902062004d75888a8362007a6b565b506000818152601f602052604090206200288c86888362007a6b565b600062004da36031602d848662007b38565b62004dae9162007b64565b60e01c9392505050565b600080600080600062004dcd86600562005774565b915091508162004e2f5760405162461bcd60e51b815260206004820152602660248201527f4f7074696f6e7348656c7065723a206c7a52656164206f7074696f6e206e6f7460448201526508199bdd5b9960d21b60648201526084016200211a565b604051634ba8e54360e11b81523090639751ca869062004e549084906004016200699d565b606060405180830381865afa15801562004e72573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062004e98919062007b93565b94509450945050509193909250565b600062004da3600d6009848662007b38565b600062004ecb602d600d848662007b38565b62000cd89162007bdc565b600062004ee860096001848662007b38565b62004ef39162007bfb565b60c01c9392505050565b600062000cd862004f0f848462005704565b90565b600062004ecb60716051848662007b38565b60405162004f32906200602a565b604051809103906000f08015801562004f4f573d6000803e3d6000fd5b50601c80546001600160a01b0319166001600160a01b0392909216919091179055565b6000808360405160200162004f88919062007412565b60408051601f198184030181529082905262004fa991859060200162007c2a565b60405160208183030381529060405290508051602082016000f09150813b620020ac57600080fd5b600080600080600062004fe686600362005774565b91509150816200504b5760405162461bcd60e51b815260206004820152602960248201527f4f7074696f6e7348656c7065723a206c7a436f6d706f7365206f7074696f6e206044820152681b9bdd08199bdd5b9960ba1b60648201526084016200211a565b604051630518e8ab60e41b8152309063518e8ab090620050709084906004016200699d565b606060405180830381865afa1580156200508e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620050b4919062007c5d565b91986001600160801b039182169850911695509350505050565b6000808060128414801590620050e5575060228414155b156200510457604051638b4aa70b60e01b815260040160405180910390fd5b620051128585600062005c42565b9250620051228585600262005c6d565b9150602284146200513557600062005143565b620051438585601262005c6d565b90509250925092565b546001600160801b03808216600160801b9092048116919091031690565b36600062002a40605182858762007b38565b36600062002a40836051818762007b38565b6040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052606090600090605c0160408051808303601f190181529082905280516020909101206338d07aa960e21b82526001600483015260248201819052915060009081908190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063e341eaa490604401606060405180830381865afa1580156200523e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062005264919062007c93565b6040805160208101939093528281019190915260f89290921b6001600160f81b03191660608201528151604181830301815260619091019091529695505050505050565b36600062002a40836071818762007b38565b600036816001840181620052d088888462005c42565b600292909201919050620052e688888462005c98565b94506001820161ffff821683016200530181838b8d62007b38565b979b909a50969850505061ffff160193505050565b6000620053368254600160801b81046001600160801b0390811691161490565b15620053485762005348603262005cc0565b5080546000196001600160801b03600160801b9092048216011660009081526001909101602052604090205490565b80546000906001600160801b03600160801b8204811691168103620053a257620053a2603162005cc0565b600019016001600160801b039081166000818152600185016020526040812080549190558454909216600160801b909102179092555090565b6000620053e9838362005774565b509392505050565b6000806000806200540485600262005774565b91509150816200546a5760405162461bcd60e51b815260206004820152602a60248201527f4f7074696f6e7348656c7065723a206e617469766544726f70206f7074696f6e604482015269081b9bdd08199bdd5b9960b21b60648201526084016200211a565b604051635caa7efb60e11b8152309063b954fdf6906200548f9084906004016200699d565b6040805180830381865afa158015620054ac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620054d2919062007ccd565b6001600160801b03909116969095509350505050565b6000808060148414801590620054ff575060248414155b156200551e57604051636f5bff2160e11b815260040160405180910390fd5b6200552c8585600062005c6d565b92506200553c8585601062005cd2565b9150602484146200554f57600062005143565b620051438585601462005c6d565b6000806030831462005582576040516361d0c2c760e11b815260040160405180910390fd5b620055908484600062005c6d565b9150620055a08484601062005cfd565b90509250929050565b600080600080620055bc85600162005774565b9150915081620056215760405162461bcd60e51b815260206004820152602960248201527f4f7074696f6e7348656c7065723a206c7a52656365697665206f7074696f6e206044820152681b9bdd08199bdd5b9960ba1b60648201526084016200211a565b60405163f93e1d6160e01b8152309063f93e1d6190620056469084906004016200699d565b6040805180830381865afa15801562005663573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062005689919062007cfe565b6001600160801b0391821697911695509350505050565b60008060108314801590620056b6575060208314155b15620056d557604051634796aee160e01b815260040160405180910390fd5b620056e38484600062005c6d565b915060208314620056f6576000620055a0565b620055a08484601062005c6d565b600062004ecb60516031848662007b38565b81546001600160801b038082166000190191600160801b9004811690821603620057465762005746604162005cc0565b6001600160801b0316600081815260018401602052604090209190915581546001600160801b031916179055565b601c5460405163e5c5e9a360e01b815260009160609183916001600160a01b03169063e5c5e9a390620057ac9088906004016200699d565b600060405180830381865afa158015620057ca573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620057f4919081019062007d32565b5060408051600080825260208201909252919250908190819081905b855185101562005c1557604051636e1775e360e01b8152600090819081903090636e1775e39062005848908c908c9060040162007188565b600060405180830381865afa15801562005866573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262005890919081019062007d9c565b9250925092508b60ff168360ff160362005c0a5760008080808060001960ff891601620059895760405163f93e1d6160e01b8152309063f93e1d6190620058dc908a906004016200699d565b6040805180830381865afa158015620058f9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200591f919062007cfe565b909550935062005930858d62007dfb565b9b506200593e848c62007dfb565b9a508b8b60405160200162005972929190608092831b6001600160801b031990811682529190921b16601082015260200190565b604051602081830303815290604052985062005c04565b60011960ff89160162005a3957604051635caa7efb60e11b8152309063b954fdf690620059bb908a906004016200699d565b6040805180830381865afa158015620059d8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620059fe919062007ccd565b909450925062005a0f848c62007dfb565b6040516001600160801b0319608083901b16602082015260308101859052909b5060500162005972565b60021960ff89160162005b1157604051630518e8ab60e41b8152309063518e8ab09062005a6b908a906004016200699d565b606060405180830381865afa15801562005a89573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062005aaf919062007c5d565b9096509450915062005ac2858d62007dfb565b9b5062005ad0848c62007dfb565b6040516001600160f01b031960f085901b1660208201526001600160801b031960808f811b8216602284015283901b166032820152909b5060420162005972565b60041960ff89160162005c0457604051634ba8e54360e11b81523090639751ca869062005b43908a906004016200699d565b606060405180830381865afa15801562005b61573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062005b87919062007b93565b919650909450905062005b9b848c62007dfb565b9a5062005ba9858d62007dfb565b9b5062005bb7818b62007e1e565b6040516001600160801b031960808f811b821660208401526001600160e01b031960e085901b1660308401528e901b166034820152909a5060440160405160208183030381529060405298505b50505050505b965062005810915050565b805160000362005c315760009750955062002a45945050505050565b60019a909950975050505050505050565b60006002820162005c568184868862007b38565b62005c619162007e3e565b60f01c95945050505050565b60006010820162005c818184868862007b38565b62005c8c9162007e6d565b60801c95945050505050565b600083838381811062005caf5762005caf62006cdb565b919091013560f81c95945050505050565b634e487b71600052806020526024601cfd5b60006004820162005ce68184868862007b38565b62005cf19162007b64565b60e01c95945050505050565b60006020820162005d118184868862007b38565b62005d1c9162007bdc565b95945050505050565b6040518060a00160405280600063ffffffff16815260200160006001600160a01b031681526020016060815260200160008152602001606081525090565b82805482825590600052602060002090810192821562005dbb579160200282015b8281111562005dbb57825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019062005d84565b5062005dc992915062006038565b5090565b8280548282559060005260206000209060070160089004810192821562005dbb5791602002820160005b8382111562005e3d57835183826101000a81548163ffffffff021916908363ffffffff160217905550926020019260040160208160030104928301926001030262005df7565b801562005e6f5782816101000a81549063ffffffff021916905560040160208160030104928301926001030262005e3d565b505062005dc992915062006038565b6154bf8062007e9d83390190565b615649806200d35c83390190565b6114d680620129a583390190565b6149708062013e7b83390190565b61244180620187eb83390190565b614c07806201ac2c83390190565b61313b806201f83383390190565b611625806202296e83390190565b613bf78062023f9383390190565b611eb68062027b8a83390190565b6040518060400160405280600063ffffffff16815260200162005f6e6040518060c0016040528060006001600160401b03168152602001600060ff168152602001600060ff168152602001600060ff16815260200160608152602001606081525090565b905290565b6040518060400160405280600063ffffffff16815260200162005f6e6040518060400160405280600063ffffffff16815260200160006001600160a01b031681525090565b6040518060400160405280600063ffffffff16815260200162005f6e6040518060c0016040528060006001600160a01b03168152602001600060ff168152602001600060ff168152602001600060ff16815260200160608152602001606081525090565b61191f8062029a4083390190565b6107f2806202b35f83390190565b5b8082111562005dc9576000815560010162006039565b63ffffffff811681146200606257600080fd5b50565b6001600160a01b03811681146200606257600080fd5b600080604083850312156200608f57600080fd5b82356200609c816200604f565b91506020830135620060ae8162006065565b809150509250929050565b60008083601f840112620060cc57600080fd5b5081356001600160401b03811115620060e457600080fd5b60208301915083602082850101111562002a4557600080fd5b634e487b7160e01b600052604160045260246000fd5b60405160c081016001600160401b0381118282101715620061385762006138620060fd565b60405290565b604051601f8201601f191681016001600160401b0381118282101715620061695762006169620060fd565b604052919050565b60006001600160401b038211156200618d576200618d620060fd565b50601f01601f191660200190565b600082601f830112620061ad57600080fd5b8135620061c4620061be8262006171565b6200613e565b818152846020838601011115620061da57600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080606085870312156200620e57600080fd5b84356001600160401b03808211156200622657600080fd5b6200623488838901620060b9565b909650945060208701359150808211156200624e57600080fd5b6200625c888389016200619b565b935060408701359150808211156200627357600080fd5b5062006282878288016200619b565b91505092959194509250565b60ff811681146200606257600080fd5b80356002811062002b7e57600080fd5b60008060408385031215620062c257600080fd5b8235620062cf816200628e565b9150620055a0602084016200629e565b60008151808452602080850194506020840160005b838110156200631b5781516001600160a01b031687529582019590820190600101620062f4565b509495945050505050565b60208152600062000cd86020830184620062df565b6000806000606084860312156200635157600080fd5b83356001600160401b038111156200636857600080fd5b62006376868287016200619b565b935050602084013562006389816200628e565b915060408401356200639b816200628e565b809150509250925092565b60005b83811015620063c3578181015183820152602001620063a9565b50506000910152565b60008151808452620063e6816020860160208601620063a6565b601f01601f19169290920160200192915050565b60008282518085526020808601955060208260051b8401016020860160005b848110156200644b57601f1986840301895262006438838351620063cc565b9884019892509083019060010162006419565b5090979650505050505050565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b83811015620064cd57888303603f19018552815180516001600160a01b03168452870151878401879052620064b987850182620063fa565b958801959350509086019060010162006481565b509098975050505050505050565b600080600080600080600060c0888a031215620064f757600080fd5b873562006504816200604f565b96506020880135620065168162006065565b955060408801356001600160401b03808211156200653357600080fd5b620065418b838c016200619b565b965060608a0135955060808a013591506200655c8262006065565b90935060a089013590808211156200657357600080fd5b50620065828a828b01620060b9565b989b979a50959850939692959293505050565b60008060208385031215620065a957600080fd5b82356001600160401b03811115620065c057600080fd5b620065ce85828601620060b9565b90969095509350505050565b61ffff811681146200606257600080fd5b60008060408385031215620065ff57600080fd5b82356200660c81620065da565b946020939093013593505050565b6000806000604084860312156200663057600080fd5b83356001600160401b03808211156200664857600080fd5b6200665687838801620060b9565b909550935060208601359150808211156200667057600080fd5b506200667f868287016200619b565b9150509250925092565b60006001600160401b03821115620066a557620066a5620060fd565b5060051b60200190565b600082601f830112620066c157600080fd5b81356020620066d4620061be8362006689565b8083825260208201915060208460051b870101935086841115620066f757600080fd5b602086015b8481101562006720578035620067128162006065565b8352918301918301620066fc565b509695505050505050565b600080604083850312156200673f57600080fd5b82356001600160401b03808211156200675757600080fd5b6200676586838701620066af565b93506020915081850135818111156200677d57600080fd5b85019050601f810186136200679157600080fd5b8035620067a2620061be8262006689565b81815260059190911b82018301908381019088831115620067c257600080fd5b928401925b82841015620067ed578335620067dd816200604f565b82529284019290840190620067c7565b80955050505050509250929050565b600060208083018184528085518083526040925060408601915060408160051b8701018488016000805b84811015620068a657898403603f19018652825180516001600160a01b03168552880151888501889052805188860181905290890190839060608701905b80831015620068905783516001600160e01b0319168252928b019260019290920191908b019062006864565b50978a0197955050509187019160010162006826565b50919998505050505050505050565b600080600060408486031215620068cb57600080fd5b83356001600160401b03811115620068e257600080fd5b620068f086828701620060b9565b909790965060209590950135949350505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60ff851681526060602082015260006200694c60608301858762006904565b905082604083015295945050505050565b6000602082840312156200697057600080fd5b81356001600160401b038111156200698757600080fd5b6200699584828501620066af565b949350505050565b60208152600062000cd86020830184620063cc565b600080600080600060a08688031215620069cb57600080fd5b8535620069d8816200604f565b945060208601359350604086013592506060860135620069f88162006065565b915060808601356001600160401b0381111562006a1457600080fd5b62006a22888289016200619b565b9150509295509295909350565b60208152600062000cd86020830184620063fa565b60008060008060006080868803121562006a5d57600080fd5b85356001600160401b038082111562006a7557600080fd5b62006a8389838a01620060b9565b9097509550602088013591508082111562006a9d57600080fd5b5062006aac888289016200619b565b93505060408601359150606086013562006ac68162006065565b809150509295509295909350565b60006020828403121562006ae757600080fd5b813562000cd88162006065565b6000806040838503121562006b0857600080fd5b82356200660c816200604f565b60008060006060848603121562006b2b57600080fd5b833562006b38816200628e565b925062006b48602085016200629e565b915060408401356001600160401b0381111562006b6457600080fd5b6200667f86828701620066af565b6001600160801b03811681146200606257600080fd5b60006020828403121562006b9b57600080fd5b813562000cd88162006b72565b6000806000806040858703121562006bbf57600080fd5b84356001600160401b038082111562006bd757600080fd5b62006be588838901620060b9565b9096509450602087013591508082111562006bff57600080fd5b5062006c0e87828801620060b9565b95989497509550505050565b855163ffffffff168152602080870151908201526040808701516001600160401b03169082015260018060a01b038516606082015283608082015260e060a0820152600062006c6d60e0830185620063cc565b82810360c084015262006c818185620063cc565b98975050505050505050565b634e487b7160e01b600052601160045260246000fd5b60ff818116838216019081111562000ffe5762000ffe62006c8d565b60ff828116828216039081111562000ffe5762000ffe62006c8d565b634e487b7160e01b600052603260045260246000fd5b600181811c9082168062006d0657607f821691505b60208210810362006d2757634e487b7160e01b600052602260045260246000fd5b50919050565b6001600160a01b038881168252871660208201526040810186905261ffff8516606082015260c06080820181905260009062006d6d908301858762006904565b82810360a084015262006d818185620063cc565b9a9950505050505050505050565b805162002b7e8162006065565b8051801515811462002b7e57600080fd5b6000806040838503121562006dc157600080fd5b825162006dce8162006065565b9150620055a06020840162006d9c565b80516001600160401b038116811462002b7e57600080fd5b805162002b7e816200628e565b60008060006060848603121562006e1957600080fd5b62006e248462006dde565b9250602084015162006e36816200628e565b60408501519092506200639b816200628e565b600082601f83011262006e5b57600080fd5b815162006e6c620061be8262006171565b81815284602083860101111562006e8257600080fd5b62006995826020830160208701620063a6565b60006020828403121562006ea857600080fd5b81516001600160401b0381111562006ebf57600080fd5b620069958482850162006e49565b600082601f83011262006edf57600080fd5b8151602062006ef2620061be8362006689565b8083825260208201915060208460051b87010193508684111562006f1557600080fd5b602086015b848110156200672057805162006f308162006065565b835291830191830162006f1a565b60006020828403121562006f5157600080fd5b81516001600160401b038082111562006f6957600080fd5b9083019060c0828603121562006f7e57600080fd5b62006f8862006113565b62006f938362006dde565b815262006fa36020840162006df6565b602082015262006fb66040840162006df6565b604082015262006fc96060840162006df6565b606082015260808301518281111562006fe157600080fd5b62006fef8782860162006ecd565b60808301525060a0830151828111156200700857600080fd5b620070168782860162006ecd565b60a08301525095945050505050565b8183823760009101908152919050565b6060815260006200704a6060830186620063cc565b905083602083015260ff83166040830152949350505050565b8082018082111562000ffe5762000ffe62006c8d565b63ffffffff851681526001600160a01b0384166020820152608060408201819052600090620070ab90830185620063cc565b905082606083015295945050505050565b600060208284031215620070cf57600080fd5b5051919050565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b83811015620064cd57888303603f190185528151805163ffffffff168452878101516001600160a01b0316888501528681015160a0888601819052906200714982870182620063cc565b915050606080830151818701525060808083015192508582038187015250620071738183620063cc565b968901969450505090860190600101620070ff565b6040815260006200719d6040830185620063cc565b90508260208301529392505050565b600060208284031215620071bf57600080fd5b81516001600160401b0380821115620071d757600080fd5b9083019060c08286031215620071ec57600080fd5b620071f662006113565b62006f938362006d8f565b828152600082516200721b816020850160208701620063a6565b919091016020019392505050565b6060815260006200723e6060830186620063cc565b60208301949094525060400152919050565b6020815260006200699560208301848662006904565b6000602082840312156200727957600080fd5b815162000cd88162006065565b6000602082840312156200729957600080fd5b815162000cd8816200604f565b600081620072b857620072b862006c8d565b506000190190565b604081526000620072d56040830185620063cc565b828103602084015262005d1c8185620063cc565b606081526000620072fe6060830186620063cc565b8281036020840152620073128186620063cc565b90508281036040840152620073288185620063cc565b9695505050505050565b608081526000620073476080830187620063cc565b82810360208401526200735b8187620063cc565b604084019590955250506001600160a01b039190911660609091015292915050565b63ffffffff88168152600060018060a01b03808916602084015260c06040840152620073ad60c0840189620063cc565b876060850152818716608085015283810360a0850152620073d081868862006904565b9b9a5050505050505050505050565b6001600160e01b031983168152815160009062007404816004850160208701620063a6565b919091016004019392505050565b6000825162007426818460208701620063a6565b9190910192915050565b6000602082840312156200744357600080fd5b62000cd88262006d9c565b634e487b7160e01b600052602160045260246000fd5b600060018060a01b038089168352808816602084015260c060408401526200749060c0840188620062df565b8187166060850152818616608085015283810360a085015262006d818186620062df565b63ffffffff881681526000602060ff8916602084015260e06040840152620074e060e0840189620062df565b6001600160a01b0388811660608601528482036080860152875480835260008981526020808220940191905b818110156200752c5784548416835260019485019492860192016200750c565b50506001600160401b03881660a087015285810360c0870152620075518188620062df565b9d9c50505050505050505050505050565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b83811015620064cd57603f19898403810186528251805163ffffffff16855288015188850188905280516001600160401b0316888601528089015160ff9081166060808801919091528983015182166080808901919091529083015190911660a0808801919091529082015160c080880152906200760e610100880183620062df565b920151868303840160e08801529190506200762a8183620062df565b978a01979550505091870191506001016200758b565b602080825282518282018190526000919060409081850190868401855b82811015620076a4578151805163ffffffff9081168652908701518051909116878601528601516001600160a01b031685850152606090930192908501906001016200765d565b5091979650505050505050565b600060208284031215620076c457600080fd5b815162000cd88162006b72565b6001600160801b03818116838216028082169190828114620076f757620076f762006c8d565b505092915050565b602080825282518282018190526000919060409081850190868401855b82811015620076a4578151805163ffffffff90811686529087015180516001600160801b031688870152808801516001600160401b031687870152860151166060850152608090930192908501906001016200771c565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b83811015620064cd57603f19898403810186528251805163ffffffff16855288015188850188905280516001600160a01b0316888601528089015160ff9081166060808801919091528983015182166080808901919091529083015190911660a0808801919091529082015160c080880152906200781f610100880183620062df565b920151868303840160e08801529190506200783b8183620062df565b978a01979550505091870191506001016200779c565b602080825282518282018190526000919060409081850190868401855b82811015620076a4578151805163ffffffff168552868101516001600160401b039081168887015286820151168686015260608082015161ffff16908601526080808201516001600160801b039081169187019190915260a091820151169085015260c090930192908501906001016200786e565b602080825282518282018190526000919060409081850190868401855b82811015620076a4578151805163ffffffff168552868101516001600160401b0316878601528581015161ffff16868601526060908101516001600160801b0316908501526080909301929085019060010162007900565b602080825282518282018190526000919060409081850190868401855b82811015620076a4578151805163ffffffff16855286015186850152928401929085019060010162007975565b865163ffffffff168152602080880151908201526040808801516001600160401b03169082015260018060a01b038616606082015284608082015260e060a08201526000620079f660e08301858762006904565b82810360c084015262007a0a8185620063cc565b9998505050505050505050565b601f82111562001ceb576000816000526020600020601f850160051c8101602086101562007a425750805b601f850160051c820191505b8181101562007a635782815560010162007a4e565b505050505050565b6001600160401b0383111562007a855762007a85620060fd565b62007a9d8362007a96835462006cf1565b8362007a17565b6000601f84116001811462007ad4576000851562007abb5750838201355b600019600387901b1c1916600186901b17835562007b31565b600083815260209020601f19861690835b8281101562007b07578685013582556020948501946001909201910162007ae5565b508682101562007b255760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b6000808585111562007b4957600080fd5b8386111562007b5757600080fd5b5050820193919092039150565b6001600160e01b03198135818116916004851015620076f75760049490940360031b84901b1690921692915050565b60008060006060848603121562007ba957600080fd5b835162007bb68162006b72565b602085015190935062007bc9816200604f565b60408501519092506200639b8162006b72565b8035602083101562000ffe57600019602084900360031b1b1692915050565b6001600160c01b03198135818116916008851015620076f75760089490940360031b84901b1690921692915050565b6000835162007c3e818460208801620063a6565b83519083019062007c54818360208801620063a6565b01949350505050565b60008060006060848603121562007c7357600080fd5b835162007c8081620065da565b602085015190935062007bc98162006b72565b60008060006060848603121562007ca957600080fd5b835162007cb6816200628e565b602085015160409095015190969495509392505050565b6000806040838503121562007ce157600080fd5b825162007cee8162006b72565b6020939093015192949293505050565b6000806040838503121562007d1257600080fd5b825162007d1f8162006b72565b6020840151909250620060ae8162006b72565b6000806040838503121562007d4657600080fd5b82516001600160401b038082111562007d5e57600080fd5b62007d6c8683870162006e49565b9350602085015191508082111562007d8357600080fd5b5062007d928582860162006e49565b9150509250929050565b60008060006060848603121562007db257600080fd5b835162007dbf816200628e565b60208501519093506001600160401b0381111562007ddc57600080fd5b62007dea8682870162006e49565b925050604084015190509250925092565b6001600160801b03818116838216019080821115620020ac57620020ac62006c8d565b63ffffffff818116838216019080821115620020ac57620020ac62006c8d565b6001600160f01b03198135818116916002851015620076f75760029490940360031b84901b1690921692915050565b6001600160801b03198135818116916010851015620076f75760109490940360031b84901b169092169291505056fe60c06040526001600d553480156200001657600080fd5b50604051620054bf380380620054bf8339810160408190526200003991620002cd565b81816001600160a01b0381166200006b57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6200007681620000cd565b5063ffffffff166080526040516200008e90620002bf565b604051809103906000f080158015620000ab573d6000803e3d6000fd5b506001600160a01b031660a0819052620000c5906200011d565b50506200034a565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b620001276200028e565b6040516301ffc9a760e01b81526325fc096160e21b60048201526001600160a01b038216906301ffc9a790602401602060405180830381865afa15801562000173573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200019991906200031f565b620001b75760405163eb64f35d60e01b815260040160405180910390fd5b6001600160a01b03811660009081526005602052604090205460ff1615620001f25760405163457517f360e11b815260040160405180910390fd5b6001600160a01b0381166000818152600560209081526040808320805460ff191660019081179091556004805491820181559093527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b90920180546001600160a01b0319168417905590519182527f6b374d56679ca9463f27c85c6311e2bb7fde69bf201d3da39d53f10bd9d78af5910160405180910390a150565b6000546001600160a01b03163314620002bd5760405163118cdaa760e01b815233600482015260240162000062565b565b6101e380620052dc83390190565b60008060408385031215620002e157600080fd5b825163ffffffff81168114620002f657600080fd5b60208401519092506001600160a01b03811681146200031457600080fd5b809150509250929050565b6000602082840312156200033257600080fd5b815180151581146200034357600080fd5b9392505050565b60805160a051614f496200039360003960006107810152600081816105310152818161278901528181612f7b01528181612fe20152818161355301526135ba0152614f496000f3fe6080604052600436106103505760003560e01c80639132e5c3116101c6578063c9fc7bcd116100f7578063ddc28c5811610095578063e8964e811161006f578063e8964e8114610b8f578063ef667aa114610baf578063f2fde38b14610bfa578063f64be4c714610c1a57600080fd5b8063ddc28c5814610b2e578063e1758bd814610b5b578063e4fe1d9414610b6f57600080fd5b8063d4b4ec8f116100d1578063d4b4ec8f14610a72578063d70b890214610a92578063dc706a6214610ab2578063dc93c8a214610ae257600080fd5b8063c9fc7bcd146109f6578063ca5eb5e114610a3d578063cb5026b914610a5d57600080fd5b8063a7229fd911610164578063aafea3121161013e578063aafea31214610976578063b96a277f14610996578063c28e0eed146109b6578063c9a54a99146109d657600080fd5b8063a7229fd914610916578063a825d74714610936578063aafe5e071461095657600080fd5b80639c6d7340116101a05780639c6d73401461086f5780639d7f9775146108b6578063a0dd43fc146108d6578063a718531b146108f657600080fd5b80639132e5c31461081a57806391d20fa11461083c5780639535ff301461084f57600080fd5b80635b17bb70116102a05780636f50a8031161023e57806379624ca91161021857806379624ca9146107a35780637cb59012146107bc578063861e1ca5146107dc5780638da5cb5b146107fc57600080fd5b80636f50a80314610724578063715018a61461075a578063733180911461076f57600080fd5b80636a14d7151161027a5780636a14d715146106655780636bf73fa3146106855780636dbd9f90146106a55780636e83f5bb146106c557600080fd5b80635b17bb70146105b65780636750cd4c14610615578063697fe6b61461064557600080fd5b80632baf0be71161030d578063402f8468116102e7578063402f8468146104c057806340f80683146104ff578063416ecebf1461051f578063587cde1e1461056857600080fd5b80632baf0be7146104355780632e80fbf31461045957806335d330b01461047957600080fd5b80630c0c389e1461035557806314f651a91461036a578063183c834f146103a85780632637a450146103c85780632a56c1b0146103e85780632b3197b914610408575b600080fd5b610368610363366004613e11565b610c50565b005b34801561037657600080fd5b5061037f610d4e565b6040805163ffffffff90931683526001600160a01b039091166020830152015b60405180910390f35b3480156103b457600080fd5b506103686103c3366004613ec0565b610d80565b6103db6103d6366004613f0b565b611027565b60405161039f9190613f5d565b3480156103f457600080fd5b50610368610403366004613f9f565b61114d565b34801561041457600080fd5b5061042861042336600461400e565b6111ed565b60405161039f91906140b2565b34801561044157600080fd5b5061044b60001981565b60405190815260200161039f565b34801561046557600080fd5b506103686104743660046140dc565b6112b8565b34801561048557600080fd5b5061044b610494366004614143565b600c60209081526000948552604080862082529385528385208152918452828420909152825290205481565b3480156104cc57600080fd5b506104e06104db366004614185565b611427565b604080516001600160a01b03909316835290151560208301520161039f565b34801561050b57600080fd5b5061036861051a3660046140dc565b6114a5565b34801561052b57600080fd5b506105537f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff909116815260200161039f565b34801561057457600080fd5b5061059e6105833660046141af565b600f602052600090815260409020546001600160a01b031681565b6040516001600160a01b03909116815260200161039f565b3480156105c257600080fd5b506105fd6105d13660046141ca565b60016020908152600093845260408085208252928452828420905282529020546001600160401b031681565b6040516001600160401b03909116815260200161039f565b34801561062157600080fd5b50610635610630366004614206565b61160b565b604051901515815260200161039f565b34801561065157600080fd5b50610368610660366004614221565b61165b565b34801561067157600080fd5b50610368610680366004613ec0565b6116d0565b34801561069157600080fd5b506103686106a036600461431c565b611aae565b3480156106b157600080fd5b506103686106c03660046143ff565b611b18565b3480156106d157600080fd5b506107056106e0366004614206565b600b60205260009081526040902080546001909101546001600160a01b039091169082565b604080516001600160a01b03909316835260208301919091520161039f565b34801561073057600080fd5b5061059e61073f366004614206565b600a602052600090815260409020546001600160a01b031681565b34801561076657600080fd5b50610368611bba565b34801561077b57600080fd5b5061059e7f000000000000000000000000000000000000000000000000000000000000000081565b3480156107af57600080fd5b50600d5460011415610635565b3480156107c857600080fd5b506103686107d736600461448f565b611bce565b3480156107e857600080fd5b506106356107f73660046144e0565b611cba565b34801561080857600080fd5b506000546001600160a01b031661059e565b34801561082657600080fd5b5061082f611d26565b60405161039f919061450b565b61036861084a366004614558565b611d88565b34801561085b57600080fd5b5061036861086a366004614602565b611f18565b34801561087b57600080fd5b506105fd61088a3660046141ca565b60036020908152600093845260408085208252928452828420905282529020546001600160401b031681565b3480156108c257600080fd5b506106356108d1366004614602565b61217c565b3480156108e257600080fd5b506105fd6108f13660046141ca565b612256565b34801561090257600080fd5b50610368610911366004614645565b6122b6565b34801561092257600080fd5b50610368610931366004614671565b6125d6565b34801561094257600080fd5b5061036861095136600461468f565b6125ee565b34801561096257600080fd5b5061044b6109713660046141ca565b612739565b34801561098257600080fd5b506103686109913660046146cc565b6127b9565b3480156109a257600080fd5b5061059e6109b1366004614185565b6129e2565b3480156109c257600080fd5b506103686109d13660046141af565b612a51565b3480156109e257600080fd5b506106356109f13660046144e0565b612aae565b348015610a0257600080fd5b5061044b610a113660046146e8565b600260209081526000948552604080862082529385528385208152918452828420909152825290205481565b348015610a4957600080fd5b50610368610a583660046141af565b612b13565b348015610a6957600080fd5b5061044b600081565b348015610a7e57600080fd5b50610368610a8d366004614645565b612b73565b348015610a9e57600080fd5b50610368610aad3660046146e8565b612db1565b348015610abe57600080fd5b50610635610acd3660046141af565b60056020526000908152604090205460ff1681565b348015610aee57600080fd5b50610635610afd366004614185565b6001600160a01b03918216600090815260066020908152604080832063ffffffff9490941683529290522054161590565b348015610b3a57600080fd5b50610b4e610b49366004613f0b565b612ea0565b60405161039f919061472a565b348015610b6757600080fd5b50600061059e565b348015610b7b57600080fd5b50600e5461059e906001600160a01b031681565b348015610b9b57600080fd5b50610368610baa3660046141af565b61310c565b348015610bbb57600080fd5b50610705610bca366004614185565b6008602090815260009283526040808420909152908252902080546001909101546001600160a01b039091169082565b348015610c0657600080fd5b50610368610c153660046141af565b613270565b348015610c2657600080fd5b5061059e610c35366004614206565b6009602052600090815260409020546001600160a01b031681565b610c9f86610c6160208a018a614206565b60208a0135610c7660608c0160408d01614741565b898989604051602001610c8b9392919061475c565b6040516020818303038152906040526132ae565b506040516313137d6560e01b81526001600160a01b038716906313137d65903490610cda908b908a908a908a9033908b908b906004016147d8565b6000604051808303818588803b158015610cf357600080fd5b505af1158015610d07573d6000803e3d6000fd5b50505050507f3cd5e48f9730b129dc7550f0fcea9c767b7be37837cd10e55eb35f734f4bca048787604051610d3d92919061482f565b60405180910390a150505050505050565b600080610d5e600d546001141590565b610d6a57600080610d78565b610d78600d5460a081901c91565b915091509091565b6001600160a01b038216600090815260056020526040902054829060ff16610dbb57604051631bc58ef360e11b815260040160405180910390fd5b826001600160a01b03811615610e5e576000816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e2f919061486b565b6002811115610e4057610e40614855565b03610e5e576040516342756b1b60e11b815260040160405180910390fd5b83856001600160a01b03821615610efa576040516319d4335360e21b815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015610eb9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610edd919061489a565b610efa57604051630e476aa960e21b815260040160405180910390fd5b610f0388613469565b6000610f0f8989611427565b9150508015610f3157604051633c075f7560e01b815260040160405180910390fd5b85600003610f79576001600160a01b038916600090815260086020908152604080832063ffffffff8c168452909152812080546001600160a01b031916815560010155610fdf565b438611610f99576040516302efcf9160e11b815260040160405180910390fd5b6001600160a01b03898116600090815260086020908152604080832063ffffffff8d168452909152902080546001600160a01b0319169189169190911781556001018690555b7f4e0a5bbfa0c11a64effb1ada324b5437a17272e1aed9320398715ef71bb209288989898960405161101494939291906148b7565b60405180910390a1505050505050505050565b61102f613d5a565b61103c6020840184614206565b336001600d54146110605760405163ee120b0960e01b815260040160405180910390fd5b63ffffffff60a01b60a083811b919091166001600160a01b03831617600d5561108e908601608087016148e7565b80156110a35750600e546001600160a01b0316155b156110c157604051632d7b695560e11b815260040160405180910390fd5b6000806110ce33886134ba565b9150915060006110db3490565b905060006110f76110f260a08b0160808c016148e7565b613766565b905061110884604001518383613802565b600e5460408501516020015161112a916001600160a01b03169083868c613850565b60408401515161113c9083858b61387d565b50506001600d555095945050505050565b61115685613469565b600083838360405160200161116d9392919061475c565b60408051601f1981840301815291905290506111ab866111906020880188614206565b60208801356111a560608a0160408b01614741565b856132ae565b507f3cd5e48f9730b129dc7550f0fcea9c767b7be37837cd10e55eb35f734f4bca0485876040516111dd92919061482f565b60405180910390a1505050505050565b6001600160a01b038316600090815260056020526040902054606090849060ff1661122b57604051631bc58ef360e11b815260040160405180910390fd5b604051639c33abf760e01b815263ffffffff80861660048301526001600160a01b0388811660248401529085166044830152861690639c33abf790606401600060405180830381865afa158015611286573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526112ae9190810190614997565b9695505050505050565b6112c185613469565b6001600160a01b038516600090815260026020908152604080832063ffffffff88168452825280832086845282528083206001600160401b038616845290915290205481811461133357604051637182306f60e01b815260048101829052602481018390526044015b60405180910390fd5b6001600160a01b038616600090815260016020908152604080832063ffffffff8916845282528083208784529091529020546001600160401b039081169084161180159061137f575080155b156113a857604051630c09b63560e41b81526001600160401b038416600482015260240161132a565b6001600160a01b038616600090815260026020908152604080832063ffffffff89168452825280832087845282528083206001600160401b0387168452909152908190206000199055517faf0450c392c4f702515a457a362328c8aa21916048ca6d0419e248b30cb55292906111dd90879087908a90889088906149cb565b6001600160a01b03808316600090815260076020908152604080832063ffffffff86168452909152812054909116908161149e5763ffffffff83166000908152600a60205260409020546001600160a01b031691508161149a57604051633c74268360e11b815260040160405180910390fd5b5060015b9250929050565b6114ae85613469565b6001600160a01b038516600090815260026020908152604080832063ffffffff88168452825280832086845282528083206001600160401b038616845290915290205481811461151b57604051637182306f60e01b8152600481018290526024810183905260440161132a565b80158061156557506001600160a01b038616600090815260016020908152604080832063ffffffff8916845282528083208784529091529020546001600160401b03908116908416115b1561158e57604051630c09b63560e41b81526001600160401b038416600482015260240161132a565b6001600160a01b038616600090815260026020908152604080832063ffffffff89168452825280832087845282528083206001600160401b038716845290915280822091909155517f7f68a37a6e69a0de35024a234558f9efe4b33b58657753d21eaaa82d51c3510e906111dd90879087908a90889088906149cb565b63ffffffff81166000908152600960205260408120546001600160a01b031615801590611655575063ffffffff82166000908152600a60205260409020546001600160a01b031615155b92915050565b336001600160a01b03168b6001600160a01b03168d6001600160a01b03167f8a0b1dce321c5c5fb42349bce46d18087c04140de520917661fb923e44a904b98d8d8d8d8d8d8d8d8d8d6040516116ba9a99989796959493929190614a08565b60405180910390a4505050505050505050505050565b6001600160a01b038216600090815260056020526040902054829060ff1615801561170357506001600160a01b03811615155b156117215760405163a4ff2ec360e01b815260040160405180910390fd5b826001600160a01b038116156117c4576000816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611771573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611795919061486b565b60028111156117a6576117a6614855565b036117c4576040516342756b1b60e11b815260040160405180910390fd5b83856001600160a01b03821615611860576040516319d4335360e21b815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa15801561181f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611843919061489a565b61186057604051630e476aa960e21b815260040160405180910390fd5b61186988613469565b6001600160a01b03808916600090815260076020908152604080832063ffffffff8c168452909152902054811690871681036118b85760405163d0ecb66b60e01b815260040160405180910390fd5b6001600160a01b03898116600081815260076020908152604080832063ffffffff8e168085529083529281902080546001600160a01b031916958d1695861790558051938452908301919091528101919091527fcd6f92f5ac6185a5acfa02c92090746cec64d777269cbcd0ed031e396657a1c29060600160405180910390a18515611a32576001600160a01b038116158061195b57506001600160a01b038716155b1561197957604051633c075f7560e01b815260040160405180910390fd5b60006040518060400160405280836001600160a01b0316815260200188436119a19190614a87565b90526001600160a01b038b8116600090815260086020908152604080832063ffffffff8f168452825291829020845181546001600160a01b03191694169390931783558301516001909201829055519192507f4e0a5bbfa0c11a64effb1ada324b5437a17272e1aed9320398715ef71bb2092891611a24918d918d9187916148b7565b60405180910390a150611aa3565b6001600160a01b038916600090815260086020908152604080832063ffffffff8c16845290915280822080546001600160a01b0319168155600101829055517f4e0a5bbfa0c11a64effb1ada324b5437a17272e1aed9320398715ef71bb2092891611014918c918c918691906148b7565b505050505050505050565b336001600160a01b03168a6001600160a01b03167f7edfa10fe10193301ad8a8bea7e968c7bcabcc64981f368e3aeada40ce26ae2c8d8c8c8c8c8c8c8c8c8c604051611b039a99989796959493929190614a9a565b60405180910390a35050505050505050505050565b6001600160a01b038316600090815260056020526040902054839060ff16611b5357604051631bc58ef360e11b815260040160405180910390fd5b611b5c85613469565b604051631077eb9160e11b81526001600160a01b038516906320efd72290611b8c90889087908790600401614af9565b600060405180830381600087803b158015611ba657600080fd5b505af1158015611aa3573d6000803e3d6000fd5b611bc26138a7565b611bcc60006138d4565b565b336000908152600c602090815260408083206001600160a01b03891684528252808320878452825280832061ffff8716845290915290205415611c2457604051630542086560e21b815260040160405180910390fd5b8181604051611c34929190614bec565b60408051918290038220336000818152600c60209081528482206001600160a01b038c16835281528482208a8352815284822061ffff8a168352905292909220557f3d52ff888d033fd3dd1d8057da59e850c91d91a72c41dfa445b247dfedeb6dc191611cab919088908890889088908890614bfc565b60405180910390a15050505050565b6001600160a01b03811660009081526001602090815260408220611d1f91859185918590611cea90850185614206565b63ffffffff168152602080820192909252604090810160009081208984013582529092529020546001600160401b0316613924565b9392505050565b60606004805480602002602001604051908101604052809291908181526020018280548015611d7e57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611d60575b5050505050905090565b6001600160a01b038089166000908152600c60209081526040808320938b168352928152828220898352815282822061ffff891683529052818120549151611dd39087908790614bec565b60405180910390209050808214611e07576040516335ca595f60e01b8152600481018390526024810182905260440161132a565b6001600160a01b03808b166000908152600c60209081526040808320938d168084529382528083208c8452825280832061ffff8c168452909152908190206001905551630685081360e51b815263d0a10260903490611e76908e908d908c908c9033908d908d90600401614c46565b6000604051808303818588803b158015611e8f57600080fd5b505af1158015611ea3573d6000803e3d6000fd5b50505050507e36c98efcf9e6641dfbc9051f66f405253e8e0c2ab4a24dccda15595b7378c88a8a8a8a604051611f0494939291906001600160a01b039485168152929093166020830152604082015261ffff91909116606082015260800190565b60405180910390a150505050505050505050565b6001600160a01b038116600090815260056020526040902054819060ff16158015611f4b57506001600160a01b03811615155b15611f695760405163a4ff2ec360e01b815260040160405180910390fd5b816001600160a01b0381161561200c576001816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611fb9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fdd919061486b565b6002811115611fee57611fee614855565b0361200c57604051633d00f6f160e11b815260040160405180910390fd5b82846001600160a01b038216156120a8576040516319d4335360e21b815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015612067573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061208b919061489a565b6120a857604051630e476aa960e21b815260040160405180910390fd5b6120b187613469565b6001600160a01b03878116600090815260066020908152604080832063ffffffff8b1684529091529020548187169116036120ff5760405163d0ecb66b60e01b815260040160405180910390fd5b6001600160a01b03878116600081815260066020908152604080832063ffffffff8c168085529083529281902080546001600160a01b031916958b1695861790558051938452908301919091528101919091527f4cff966ebee29a156dcb34cf72c1d06231fb1777f6bdf6e8089819232f002b1c90606001610d3d565b600080600061218b8686611427565b91509150816001600160a01b0316846001600160a01b0316036121b357600192505050611d1f565b6000816121e8576001600160a01b038716600090815260086020908152604080832063ffffffff8a16845290915290206121fe565b63ffffffff86166000908152600b602052604090205b6040805180820190915281546001600160a01b03908116808352600190930154602083015290925086161480156122385750438160200151115b156122495760019350505050611d1f565b5060009695505050505050565b6001600160a01b038316600090815260016020908152604080832063ffffffff8616845282528083208484529091528120546001600160401b03165b6122a1858585846001016139a8565b156122ae57600101612292565b949350505050565b6122be6138a7565b6001600160a01b038216600090815260056020526040902054829060ff166122f957604051631bc58ef360e11b815260040160405180910390fd5b826001600160a01b0381161561239c576000816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612349573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061236d919061486b565b600281111561237e5761237e614855565b0361239c576040516342756b1b60e11b815260040160405180910390fd5b83856001600160a01b03821615612438576040516319d4335360e21b815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa1580156123f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061241b919061489a565b61243857604051630e476aa960e21b815260040160405180910390fd5b63ffffffff87166000908152600a60205260409020546001600160a01b03908116908716810361247b5760405163d0ecb66b60e01b815260040160405180910390fd5b63ffffffff88166000818152600a602090815260409182902080546001600160a01b0319166001600160a01b038c169081179091558251938452908301527fc16891855cffb4a5ac51ac11864a3f3c96ba816cc45fe686c987ae36277de5ec910160405180910390a185156125695763ffffffff88166000908152600b6020526040902080546001600160a01b0319166001600160a01b0383161781556125228743614a87565b600182018190556040517f55b28633cdb29709386f555dfc54418592ad475ce7a65a78ac5928af60ffb8f89161255b918c918691614c99565b60405180910390a1506125cc565b63ffffffff88166000908152600b602052604080822080546001600160a01b0319168155600101829055517f55b28633cdb29709386f555dfc54418592ad475ce7a65a78ac5928af60ffb8f8916125c3918b918591614c99565b60405180910390a15b5050505050505050565b6125de6138a7565b6125e98383836139f5565b505050565b612605826125ff6020860186614206565b3361217c565b612622576040516313e9bb2b60e21b815260040160405180910390fd5b6001600160a01b0382166000908152600160209081526040822090829061264b90870187614206565b63ffffffff168152602080820192909252604090810160009081208784013582529092529020546001600160401b03169050612688848483613924565b6126a55760405163751cb20f60e01b815260040160405180910390fd5b6126b0848483613a18565b6126cc5760405162bbf0e560e11b815260040160405180910390fd5b6126f8836126dd6020870187614206565b60208701356126f26060890160408a01614741565b86613ad5565b7f0d87345f3d1c929caba93e1c3821b54ff3512e12b66aa3cfe54b6bcbc17e59b484848460405161272b93929190614cc0565b60405180910390a150505050565b6001600160a01b038316600090815260036020908152604080832063ffffffff8616845282528083208484529091528120548190612781906001600160401b03166001614ce8565b90506127b0817f0000000000000000000000000000000000000000000000000000000000000000878787613b3b565b95945050505050565b6127c16138a7565b6001600160a01b038116600090815260056020526040902054819060ff166127fc57604051631bc58ef360e11b815260040160405180910390fd5b816001600160a01b0381161561289f576001816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561284c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612870919061486b565b600281111561288157612881614855565b0361289f57604051633d00f6f160e11b815260040160405180910390fd5b82846001600160a01b0382161561293b576040516319d4335360e21b815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa1580156128fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061291e919061489a565b61293b57604051630e476aa960e21b815260040160405180910390fd5b63ffffffff86166000908152600960205260409020546001600160a01b0380871691160361297c5760405163d0ecb66b60e01b815260040160405180910390fd5b63ffffffff861660008181526009602090815260409182902080546001600160a01b0319166001600160a01b038a169081179091558251938452908301527f16aa0f528038ab41019e95bae5b418a50ba8532c5800e3b7ea2f517d3fa625f591016111dd565b6001600160a01b03808316600090815260066020908152604080832063ffffffff861684529091529020541680611655575063ffffffff81166000908152600960205260409020546001600160a01b03168061165557604051636c1ccdb560e01b815260040160405180910390fd5b612a596138a7565b600e80546001600160a01b0319166001600160a01b0383169081179091556040519081527fd476ec5ec1ac11cec3714d41e7ea49419471aceb9bd0dff1becfc3e363a62396906020015b60405180910390a150565b6001600160a01b03811660009081526001602090815260408220611d1f91859185918590612ade90850185614206565b63ffffffff168152602080820192909252604090810160009081208984013582529092529020546001600160401b0316613a18565b336000818152600f602090815260409182902080546001600160a01b0319166001600160a01b0386169081179091558251938452908301527f6ee10e9ed4d6ce9742703a498707862f4b00f1396a87195eb93267b3d79839819101612aa3565b6001600160a01b038216600090815260056020526040902054829060ff16612bae57604051631bc58ef360e11b815260040160405180910390fd5b826001600160a01b03811615612c51576000816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612bfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c22919061486b565b6002811115612c3357612c33614855565b03612c51576040516342756b1b60e11b815260040160405180910390fd5b83856001600160a01b03821615612ced576040516319d4335360e21b815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015612cac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cd0919061489a565b612ced57604051630e476aa960e21b815260040160405180910390fd5b612cf56138a7565b84600003612d295763ffffffff87166000908152600b6020526040812080546001600160a01b031916815560010155612d7e565b438511612d49576040516302efcf9160e11b815260040160405180910390fd5b63ffffffff87166000908152600b6020526040902080546001600160a01b0319166001600160a01b0388161781556001018590555b7f55b28633cdb29709386f555dfc54418592ad475ce7a65a78ac5928af60ffb8f8878787604051610d3d93929190614c99565b612dba84613469565b612dc5848484612256565b612dd0906001614ce8565b6001600160401b0316816001600160401b031614612e0c57604051630c09b63560e41b81526001600160401b038216600482015260240161132a565b6001600160a01b038416600081815260016020908152604080832063ffffffff8816808552908352818420878552835292819020805467ffffffffffffffff19166001600160401b038716908117909155815193845291830186905282019290925260608101919091527f28f40053783033ef755556a0c3315379141f51a33aed8334174ffbadd90bde489060800161272b565b6040805180820190915260008082526020820152612ec460a08401608085016148e7565b8015612ed95750600e546001600160a01b0316155b15612ef757604051632d7b695560e11b815260040160405180910390fd5b6001600160a01b03821660009081526003602090815260408220908290612f2090870187614206565b63ffffffff16815260208082019290925260409081016000908120878401358252909252902054612f5b906001600160401b03166001614ce8565b905060006040518060e00160405280836001600160401b031681526020017f000000000000000000000000000000000000000000000000000000000000000063ffffffff168152602001856001600160a01b03168152602001866000016020810190612fc79190614206565b63ffffffff1681526020018660200135815260200161301f847f0000000000000000000000000000000000000000000000000000000000000000888a60000160208101906130159190614206565b8b60200135613b3b565b81526020016130316040880188614d08565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509390945250929350915061307e9050856109b16020890189614206565b90506001600160a01b03811663d80e9bd98361309d60608a018a614d08565b6130ad60a08c0160808d016148e7565b6040518563ffffffff1660e01b81526004016130cc9493929190614d4e565b6040805180830381865afa1580156130e8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ae9190614e42565b6131146138a7565b6040516301ffc9a760e01b81526325fc096160e21b60048201526001600160a01b038216906301ffc9a790602401602060405180830381865afa15801561315f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613183919061489a565b6131a05760405163eb64f35d60e01b815260040160405180910390fd5b6001600160a01b03811660009081526005602052604090205460ff16156131da5760405163457517f360e11b815260040160405180910390fd5b6001600160a01b0381166000818152600560209081526040808320805460ff191660019081179091556004805491820181559093527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b90920180546001600160a01b0319168417905590519182527f6b374d56679ca9463f27c85c6311e2bb7fde69bf201d3da39d53f10bd9d78af59101612aa3565b6132786138a7565b6001600160a01b0381166132a257604051631e4fbdf760e01b81526000600482015260240161132a565b6132ab816138d4565b50565b6001600160a01b038516600090815260016020908152604080832063ffffffff8816845282528083208684529091528120546001600160401b0390811690841681101561339c57600181015b846001600160401b0316816001600160401b03161161334f5761331f888888846139a8565b61334757604051630c09b63560e41b81526001600160401b038216600482015260240161132a565b6001016132fa565b506001600160a01b038716600090815260016020908152604080832063ffffffff8a16845282528083208884529091529020805467ffffffffffffffff19166001600160401b0386161790555b82516020808501919091206001600160a01b038916600090815260028352604080822063ffffffff8b168352845280822089835284528082206001600160401b0389168352909352919091205490925080831461341657604051637182306f60e01b8152600481018290526024810184905260440161132a565b50506001600160a01b03909516600090815260026020908152604080832063ffffffff90971683529581528582209482529384528481206001600160401b03909316815291909252918220919091555090565b336001600160a01b0382161480159061349c57506001600160a01b038181166000908152600f6020526040902054163314155b156132ab5760405163c4c5259360e01b815260040160405180910390fd5b6134c2613d5a565b600080613533856134d66020870187614206565b6001600160a01b0391909116600090815260036020908152604080832063ffffffff949094168352928152828220818901358352905220805467ffffffffffffffff19811660016001600160401b03928316019182161790915590565b905060006040518060e00160405280836001600160401b031681526020017f000000000000000000000000000000000000000000000000000000000000000063ffffffff168152602001876001600160a01b0316815260200186600001602081019061359f9190614206565b63ffffffff168152602001866020013581526020016135ed847f00000000000000000000000000000000000000000000000000000000000000008a8a60000160208101906130159190614206565b81526020016135ff6040880188614d08565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509390945250929350915061364c9050876109b16020890189614206565b90506000806001600160a01b038316634389e58f8561366e60608c018c614d08565b61367e60a08e0160808f016148e7565b6040518563ffffffff1660e01b815260040161369d9493929190614d4e565b6000604051808303816000875af11580156136bc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526136e49190810190614e5e565b90925090507f1ab700d4ced0c005b164c0f789fd09fcbb0156d4c2041b8a3bfbcd961cd1567f8161371860608b018b614d08565b866040516137299493929190614eac565b60405180910390a1506040805160608101825260a09094015184526001600160401b03909416602084015292820192909252925090509250929050565b600081156137fd57600e546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa1580156137b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137da9190614eec565b9050806000036137fd57604051631775123760e01b815260040160405180910390fd5b919050565b82518210806138145750808360200151115b156125e95782516020840151604051634f3ec0d360e01b815260048101929092526024820184905260448201526064810182905260840161132a565b831561386157613861858386613bb4565b82841015613876576138768582868603613bb4565b5050505050565b831561388d5761388d8285613bef565b828410156138a1576138a181858503613bef565b50505050565b6000546001600160a01b03163314611bcc5760405163118cdaa760e01b815233600482015260240161132a565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600080826001600160401b031611806122ae5750604051600162842fc360e01b031981526001600160a01b0384169063ff7bd03d90613967908790600401614f05565b602060405180830381865afa158015613984573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122ae919061489a565b6001600160a01b038416600090815260026020908152604080832063ffffffff87168452825280832085845282528083206001600160401b03851684529091529020541515949350505050565b6001600160a01b038316613a0d576125e98282613bef565b6125e9838383613bb4565b60006001600160401b038216613a346060860160408701614741565b6001600160401b031611806122ae57506001600160a01b03831660009081526002602090815260408220908290613a6d90880188614206565b63ffffffff1663ffffffff1681526020019081526020016000206000866020013581526020019081526020016000206000866040016020810190613ab19190614741565b6001600160401b031681526020810191909152604001600020541415949350505050565b80613af3576040516304df7fdb60e11b815260040160405180910390fd5b6001600160a01b03909416600090815260026020908152604080832063ffffffff90961683529481528482209382529283528381206001600160401b03909216815291522055565b600085856001600160a01b03861660405160c09390931b6001600160c01b031916602084015260e091821b6001600160e01b03199081166028850152602c8401919091529085901b16604c8201526050810183905260700160405160208183030381529060405280519060200120905095945050505050565b6001600160a01b038216613bdb576040516306b7a93160e41b815260040160405180910390fd5b6125e96001600160a01b0384168383613c9c565b6001600160a01b038216613c16576040516306b7a93160e41b815260040160405180910390fd5b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114613c63576040519150601f19603f3d011682016040523d82523d6000602084013e613c68565b606091505b50509050806125e957604051631196f20d60e21b81526001600160a01b03841660048201526024810183905260440161132a565b604080516001600160a01b03841660248201526044808201849052825180830390910181526064909101909152602080820180516001600160e01b031663a9059cbb60e01b17815282516125e9938793909260009283929183919082885af180613d0c576040513d6000823e3d81fd5b50506000513d91508115613d24578060011415613d31565b6001600160a01b0384163b155b156138a157604051635274afe760e01b81526001600160a01b038516600482015260240161132a565b60405180606001604052806000801916815260200160006001600160401b03168152602001613d9c604051806040016040528060008152602001600081525090565b905290565b600060608284031215613db357600080fd5b50919050565b80356001600160a01b03811681146137fd57600080fd5b60008083601f840112613de257600080fd5b5081356001600160401b03811115613df957600080fd5b60208301915083602082850101111561149e57600080fd5b600080600080600080600060e0888a031215613e2c57600080fd5b613e368989613da1565b9650613e4460608901613db9565b95506080880135945060a08801356001600160401b0380821115613e6757600080fd5b613e738b838c01613dd0565b909650945060c08a0135915080821115613e8c57600080fd5b50613e998a828b01613dd0565b989b979a50959850939692959293505050565b803563ffffffff811681146137fd57600080fd5b60008060008060808587031215613ed657600080fd5b613edf85613db9565b9350613eed60208601613eac565b9250613efb60408601613db9565b9396929550929360600135925050565b60008060408385031215613f1e57600080fd5b82356001600160401b03811115613f3457600080fd5b830160a08186031215613f4657600080fd5b9150613f5460208401613db9565b90509250929050565b6000608082019050825182526001600160401b0360208401511660208301526040830151613f98604084018280518252602090810151910152565b5092915050565b600080600080600060c08688031215613fb757600080fd5b613fc086613db9565b9450613fcf8760208801613da1565b93506080860135925060a08601356001600160401b03811115613ff157600080fd5b613ffd88828901613dd0565b969995985093965092949392505050565b6000806000806080858703121561402457600080fd5b61402d85613db9565b935061403b60208601613db9565b925061404960408601613eac565b915061405760608601613eac565b905092959194509250565b60005b8381101561407d578181015183820152602001614065565b50506000910152565b6000815180845261409e816020860160208601614062565b601f01601f19169290920160200192915050565b602081526000611d1f6020830184614086565b80356001600160401b03811681146137fd57600080fd5b600080600080600060a086880312156140f457600080fd5b6140fd86613db9565b945061410b60208701613eac565b935060408601359250614120606087016140c5565b949793965091946080013592915050565b803561ffff811681146137fd57600080fd5b6000806000806080858703121561415957600080fd5b61416285613db9565b935061417060208601613db9565b92506040850135915061405760608601614131565b6000806040838503121561419857600080fd5b6141a183613db9565b9150613f5460208401613eac565b6000602082840312156141c157600080fd5b611d1f82613db9565b6000806000606084860312156141df57600080fd5b6141e884613db9565b92506141f660208501613eac565b9150604084013590509250925092565b60006020828403121561421857600080fd5b611d1f82613eac565b6000806000806000806000806000806000806101208d8f03121561424457600080fd5b61424d8d613db9565b9b5061425b60208e01613db9565b9a5060408d0135995061427060608e01614131565b985060808d0135975060a08d013596506001600160401b0360c08e0135111561429857600080fd5b6142a88e60c08f01358f01613dd0565b90965094506001600160401b0360e08e013511156142c557600080fd5b6142d58e60e08f01358f01613dd0565b90945092506001600160401b036101008e013511156142f357600080fd5b6143048e6101008f01358f01613dd0565b81935080925050509295989b509295989b509295989b565b60008060008060008060008060008060006101408c8e03121561433e57600080fd5b6143488d8d613da1565b9a5061435660608d01613db9565b995060808c0135985060a08c0135975060c08c013596506001600160401b038060e08e0135111561438657600080fd5b6143968e60e08f01358f01613dd0565b90975095506101008d01358110156143ad57600080fd5b6143be8e6101008f01358f01613dd0565b90955093506101208d01358110156143d557600080fd5b506143e78d6101208e01358e01613dd0565b81935080925050509295989b509295989b9093969950565b6000806000806060858703121561441557600080fd5b61441e85613db9565b935061442c60208601613db9565b925060408501356001600160401b038082111561444857600080fd5b818701915087601f83011261445c57600080fd5b81358181111561446b57600080fd5b8860208260051b850101111561448057600080fd5b95989497505060200194505050565b6000806000806000608086880312156144a757600080fd5b6144b086613db9565b9450602086013593506144c560408701614131565b925060608601356001600160401b03811115613ff157600080fd5b600080608083850312156144f357600080fd5b6144fd8484613da1565b9150613f5460608401613db9565b6020808252825182820181905260009190848201906040850190845b8181101561454c5783516001600160a01b031683529284019291840191600101614527565b50909695505050505050565b60008060008060008060008060c0898b03121561457457600080fd5b61457d89613db9565b975061458b60208a01613db9565b9650604089013595506145a060608a01614131565b945060808901356001600160401b03808211156145bc57600080fd5b6145c88c838d01613dd0565b909650945060a08b01359150808211156145e157600080fd5b506145ee8b828c01613dd0565b999c989b5096995094979396929594505050565b60008060006060848603121561461757600080fd5b61462084613db9565b925061462e60208501613eac565b915061463c60408501613db9565b90509250925092565b60008060006060848603121561465a57600080fd5b61466384613eac565b92506141f660208501613db9565b60008060006060848603121561468657600080fd5b61466384613db9565b600080600060a084860312156146a457600080fd5b6146ae8585613da1565b92506146bc60608501613db9565b9150608084013590509250925092565b600080604083850312156146df57600080fd5b613f4683613eac565b600080600080608085870312156146fe57600080fd5b61470785613db9565b935061471560208601613eac565b925060408501359150614057606086016140c5565b815181526020808301519082015260408101611655565b60006020828403121561475357600080fd5b611d1f826140c5565b838152818360208301376000910160200190815292915050565b63ffffffff61478482613eac565b168252602081013560208301526001600160401b036147a5604083016140c5565b1660408301525050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6147e28189614776565b86606082015260e0608082015260006147ff60e0830187896147af565b6001600160a01b03861660a084015282810360c08401526148218185876147af565b9a9950505050505050505050565b6080810161483d8285614776565b6001600160a01b039290921660609190910152919050565b634e487b7160e01b600052602160045260246000fd5b60006020828403121561487d57600080fd5b815160038110611d1f57600080fd5b80151581146132ab57600080fd5b6000602082840312156148ac57600080fd5b8151611d1f8161488c565b6001600160a01b03948516815263ffffffff93909316602084015292166040820152606081019190915260800190565b6000602082840312156148f957600080fd5b8135611d1f8161488c565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261492b57600080fd5b81516001600160401b038082111561494557614945614904565b604051601f8301601f19908116603f0116810190828211818310171561496d5761496d614904565b8160405283815286602085880101111561498657600080fd5b6112ae846020830160208901614062565b6000602082840312156149a957600080fd5b81516001600160401b038111156149bf57600080fd5b6122ae8482850161491a565b63ffffffff95909516855260208501939093526001600160a01b039190911660408401526001600160401b03166060830152608082015260a00190565b8a815261ffff8a16602082015288604082015287606082015260e060808201526000614a3860e08301888a6147af565b82810360a0840152614a4b8187896147af565b905082810360c0840152614a608185876147af565b9d9c50505050505050505050505050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561165557611655614a71565b6000610120614aa9838e614776565b8b60608401528a60808401528960a08401528060c0840152614ace818401898b6147af565b905082810360e0840152614ae38187896147af565b9050828103610100840152614a608185876147af565b6001600160a01b03841681526040602080830182905282820184905260009190606090818501600587901b8601830188865b89811015614bdc57888303605f190184528135368c9003605e19018112614b5157600080fd5b8b0163ffffffff80614b6283613eac565b16855280614b71888401613eac565b16878601525087810135601e19823603018112614b8d57600080fd5b0185810190356001600160401b03811115614ba757600080fd5b803603821315614bb657600080fd5b8789860152614bc888860182846147af565b958701959450505090840190600101614b2b565b50909a9950505050505050505050565b8183823760009101908152919050565b6001600160a01b038781168252861660208201526040810185905261ffff8416606082015260a060808201819052600090614c3a90830184866147af565b98975050505050505050565b600060018060a01b03808a16835288602084015260a06040840152614c6f60a08401888a6147af565b81871660608501528381036080850152614c8a8186886147af565b9b9a5050505050505050505050565b63ffffffff9390931683526001600160a01b03919091166020830152604082015260600190565b60a08101614cce8286614776565b6001600160a01b0393909316606082015260800152919050565b6001600160401b03818116838216019080821115613f9857613f98614a71565b6000808335601e19843603018112614d1f57600080fd5b8301803591506001600160401b03821115614d3957600080fd5b60200191503681900382131561149e57600080fd5b606080825285516001600160401b031682820152602086015163ffffffff16608083015260408601516001600160a01b031660a0830152850151600090614d9d60c084018263ffffffff169052565b50608086015160e083015260a086015161010083015260c086015160e0610120840152614dce610140840182614086565b90508281036020840152614de38186886147af565b9150506127b0604083018415159052565b600060408284031215614e0657600080fd5b604051604081018181106001600160401b0382111715614e2857614e28614904565b604052825181526020928301519281019290925250919050565b600060408284031215614e5457600080fd5b611d1f8383614df4565b60008060608385031215614e7157600080fd5b614e7b8484614df4565b915060408301516001600160401b03811115614e9657600080fd5b614ea28582860161491a565b9150509250929050565b606081526000614ebf6060830187614086565b8281036020840152614ed28186886147af565b91505060018060a01b038316604083015295945050505050565b600060208284031215614efe57600080fd5b5051919050565b60608101611655828461477656fea264697066735822122051f9eb00fad53055a1c5087afa544b196a11f671f631975a7c4baa38e5aeab2064736f6c63430008160033608060405234801561001057600080fd5b506101c3806100206000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806301ffc9a7146100655780631881d94d1461008d57806354fd4d501461009c5780636750cd4c146100c3575b604051632657b6c360e01b815260040160405180910390fd5b61007861007336600461010e565b6100d7565b60405190151581526020015b60405180910390f35b6002604051610084919061013f565b6040805167ffffffffffffffff815260ff6020820152600291810191909152606001610084565b6100786100d1366004610167565b50600190565b60006001600160e01b031982166325fc096160e21b148061010857506301ffc9a760e01b6001600160e01b03198316145b92915050565b60006020828403121561012057600080fd5b81356001600160e01b03198116811461013857600080fd5b9392505050565b602081016003831061016157634e487b7160e01b600052602160045260246000fd5b91905290565b60006020828403121561017957600080fd5b813563ffffffff8116811461013857600080fdfea2646970667358221220b5a5c043a377444c26f6a8e7dd680ec55e20f7abeec109769ef20ff322bd379164736f6c6343000816003360e06040526001600d553480156200001657600080fd5b5060405162005649380380620056498339810160408190526200003991620002fb565b828281816001600160a01b0381166200006d57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6200007881620000de565b5063ffffffff166080526040516200009090620002d0565b604051809103906000f080158015620000ad573d6000803e3d6000fd5b506001600160a01b031660a0819052620000c7906200012e565b50506001600160a01b031660c052506200037a9050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b620001386200029f565b6040516301ffc9a760e01b81526325fc096160e21b60048201526001600160a01b038216906301ffc9a790602401602060405180830381865afa15801562000184573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001aa91906200034f565b620001c85760405163eb64f35d60e01b815260040160405180910390fd5b6001600160a01b03811660009081526005602052604090205460ff1615620002035760405163457517f360e11b815260040160405180910390fd5b6001600160a01b0381166000818152600560209081526040808320805460ff191660019081179091556004805491820181559093527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b90920180546001600160a01b0319168417905590519182527f6b374d56679ca9463f27c85c6311e2bb7fde69bf201d3da39d53f10bd9d78af5910160405180910390a150565b6000546001600160a01b03163314620002ce5760405163118cdaa760e01b815233600482015260240162000064565b565b6101e3806200546683390190565b80516001600160a01b0381168114620002f657600080fd5b919050565b6000806000606084860312156200031157600080fd5b835163ffffffff811681146200032657600080fd5b92506200033660208501620002de565b91506200034660408501620002de565b90509250925092565b6000602082840312156200036257600080fd5b815180151581146200037357600080fd5b9392505050565b60805160a05160c051615084620003e260003960008181610b6a01528181612a7b015281816137ab015261395e01526000610781015260008181610531015281816127a901528181612fab015281816130120152818161358001526135e701526150846000f3fe6080604052600436106103505760003560e01c80639132e5c3116101c6578063c9fc7bcd116100f7578063ddc28c5811610095578063e8964e811161006f578063e8964e8114610bae578063ef667aa114610bce578063f2fde38b14610c19578063f64be4c714610c3957600080fd5b8063ddc28c5814610b2e578063e1758bd814610b5b578063e4fe1d9414610b8e57600080fd5b8063d4b4ec8f116100d1578063d4b4ec8f14610a72578063d70b890214610a92578063dc706a6214610ab2578063dc93c8a214610ae257600080fd5b8063c9fc7bcd146109f6578063ca5eb5e114610a3d578063cb5026b914610a5d57600080fd5b8063a7229fd911610164578063aafea3121161013e578063aafea31214610976578063b96a277f14610996578063c28e0eed146109b6578063c9a54a99146109d657600080fd5b8063a7229fd914610916578063a825d74714610936578063aafe5e071461095657600080fd5b80639c6d7340116101a05780639c6d73401461086f5780639d7f9775146108b6578063a0dd43fc146108d6578063a718531b146108f657600080fd5b80639132e5c31461081a57806391d20fa11461083c5780639535ff301461084f57600080fd5b80635b17bb70116102a05780636f50a8031161023e57806379624ca91161021857806379624ca9146107a35780637cb59012146107bc578063861e1ca5146107dc5780638da5cb5b146107fc57600080fd5b80636f50a80314610724578063715018a61461075a578063733180911461076f57600080fd5b80636a14d7151161027a5780636a14d715146106655780636bf73fa3146106855780636dbd9f90146106a55780636e83f5bb146106c557600080fd5b80635b17bb70146105b65780636750cd4c14610615578063697fe6b61461064557600080fd5b80632baf0be71161030d578063402f8468116102e7578063402f8468146104c057806340f80683146104ff578063416ecebf1461051f578063587cde1e1461056857600080fd5b80632baf0be7146104355780632e80fbf31461045957806335d330b01461047957600080fd5b80630c0c389e1461035557806314f651a91461036a578063183c834f146103a85780632637a450146103c85780632a56c1b0146103e85780632b3197b914610408575b600080fd5b610368610363366004613f4c565b610c6f565b005b34801561037657600080fd5b5061037f610d6d565b6040805163ffffffff90931683526001600160a01b039091166020830152015b60405180910390f35b3480156103b457600080fd5b506103686103c3366004613ffb565b610d9f565b6103db6103d6366004614046565b611046565b60405161039f9190614098565b3480156103f457600080fd5b506103686104033660046140da565b61116d565b34801561041457600080fd5b50610428610423366004614149565b61120d565b60405161039f91906141ed565b34801561044157600080fd5b5061044b60001981565b60405190815260200161039f565b34801561046557600080fd5b50610368610474366004614217565b6112d8565b34801561048557600080fd5b5061044b61049436600461427e565b600c60209081526000948552604080862082529385528385208152918452828420909152825290205481565b3480156104cc57600080fd5b506104e06104db3660046142c0565b611447565b604080516001600160a01b03909316835290151560208301520161039f565b34801561050b57600080fd5b5061036861051a366004614217565b6114c5565b34801561052b57600080fd5b506105537f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff909116815260200161039f565b34801561057457600080fd5b5061059e6105833660046142ea565b600f602052600090815260409020546001600160a01b031681565b6040516001600160a01b03909116815260200161039f565b3480156105c257600080fd5b506105fd6105d1366004614305565b60016020908152600093845260408085208252928452828420905282529020546001600160401b031681565b6040516001600160401b03909116815260200161039f565b34801561062157600080fd5b50610635610630366004614341565b61162b565b604051901515815260200161039f565b34801561065157600080fd5b5061036861066036600461435c565b61167b565b34801561067157600080fd5b50610368610680366004613ffb565b6116f0565b34801561069157600080fd5b506103686106a0366004614457565b611ace565b3480156106b157600080fd5b506103686106c036600461453a565b611b38565b3480156106d157600080fd5b506107056106e0366004614341565b600b60205260009081526040902080546001909101546001600160a01b039091169082565b604080516001600160a01b03909316835260208301919091520161039f565b34801561073057600080fd5b5061059e61073f366004614341565b600a602052600090815260409020546001600160a01b031681565b34801561076657600080fd5b50610368611bda565b34801561077b57600080fd5b5061059e7f000000000000000000000000000000000000000000000000000000000000000081565b3480156107af57600080fd5b50600d5460011415610635565b3480156107c857600080fd5b506103686107d73660046145ca565b611bee565b3480156107e857600080fd5b506106356107f736600461461b565b611cda565b34801561080857600080fd5b506000546001600160a01b031661059e565b34801561082657600080fd5b5061082f611d46565b60405161039f9190614646565b61036861084a366004614693565b611da8565b34801561085b57600080fd5b5061036861086a36600461473d565b611f38565b34801561087b57600080fd5b506105fd61088a366004614305565b60036020908152600093845260408085208252928452828420905282529020546001600160401b031681565b3480156108c257600080fd5b506106356108d136600461473d565b61219c565b3480156108e257600080fd5b506105fd6108f1366004614305565b612276565b34801561090257600080fd5b50610368610911366004614780565b6122d6565b34801561092257600080fd5b506103686109313660046147ac565b6125f6565b34801561094257600080fd5b506103686109513660046147ca565b61260e565b34801561096257600080fd5b5061044b610971366004614305565b612759565b34801561098257600080fd5b50610368610991366004614807565b6127d9565b3480156109a257600080fd5b5061059e6109b13660046142c0565b612a02565b3480156109c257600080fd5b506103686109d13660046142ea565b612a71565b3480156109e257600080fd5b506106356109f136600461461b565b612ad7565b348015610a0257600080fd5b5061044b610a11366004614823565b600260209081526000948552604080862082529385528385208152918452828420909152825290205481565b348015610a4957600080fd5b50610368610a583660046142ea565b612b3c565b348015610a6957600080fd5b5061044b600081565b348015610a7e57600080fd5b50610368610a8d366004614780565b612ba3565b348015610a9e57600080fd5b50610368610aad366004614823565b612de1565b348015610abe57600080fd5b50610635610acd3660046142ea565b60056020526000908152604090205460ff1681565b348015610aee57600080fd5b50610635610afd3660046142c0565b6001600160a01b03918216600090815260066020908152604080832063ffffffff9490941683529290522054161590565b348015610b3a57600080fd5b50610b4e610b49366004614046565b612ed0565b60405161039f9190614865565b348015610b6757600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061059e565b348015610b9a57600080fd5b50600e5461059e906001600160a01b031681565b348015610bba57600080fd5b50610368610bc93660046142ea565b61313c565b348015610bda57600080fd5b50610705610be93660046142c0565b6008602090815260009283526040808420909152908252902080546001909101546001600160a01b039091169082565b348015610c2557600080fd5b50610368610c343660046142ea565b6132a0565b348015610c4557600080fd5b5061059e610c54366004614341565b6009602052600090815260409020546001600160a01b031681565b610cbe86610c8060208a018a614341565b60208a0135610c9560608c0160408d0161487c565b898989604051602001610caa93929190614897565b6040516020818303038152906040526132db565b506040516313137d6560e01b81526001600160a01b038716906313137d65903490610cf9908b908a908a908a9033908b908b90600401614913565b6000604051808303818588803b158015610d1257600080fd5b505af1158015610d26573d6000803e3d6000fd5b50505050507f3cd5e48f9730b129dc7550f0fcea9c767b7be37837cd10e55eb35f734f4bca048787604051610d5c92919061496a565b60405180910390a150505050505050565b600080610d7d600d546001141590565b610d8957600080610d97565b610d97600d5460a081901c91565b915091509091565b6001600160a01b038216600090815260056020526040902054829060ff16610dda57604051631bc58ef360e11b815260040160405180910390fd5b826001600160a01b03811615610e7d576000816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e4e91906149a6565b6002811115610e5f57610e5f614990565b03610e7d576040516342756b1b60e11b815260040160405180910390fd5b83856001600160a01b03821615610f19576040516319d4335360e21b815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015610ed8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610efc91906149d5565b610f1957604051630e476aa960e21b815260040160405180910390fd5b610f2288613496565b6000610f2e8989611447565b9150508015610f5057604051633c075f7560e01b815260040160405180910390fd5b85600003610f98576001600160a01b038916600090815260086020908152604080832063ffffffff8c168452909152812080546001600160a01b031916815560010155610ffe565b438611610fb8576040516302efcf9160e11b815260040160405180910390fd5b6001600160a01b03898116600090815260086020908152604080832063ffffffff8d168452909152902080546001600160a01b0319169189169190911781556001018690555b7f4e0a5bbfa0c11a64effb1ada324b5437a17272e1aed9320398715ef71bb209288989898960405161103394939291906149f2565b60405180910390a1505050505050505050565b61104e613e95565b61105b6020840184614341565b336001600d541461107f5760405163ee120b0960e01b815260040160405180910390fd5b63ffffffff60a01b60a083811b919091166001600160a01b03831617600d556110ad90860160808701614a22565b80156110c25750600e546001600160a01b0316155b156110e057604051632d7b695560e11b815260040160405180910390fd5b6000806110ed33886134e7565b9150915060006110fb613793565b9050600061111761111260a08b0160808c01614a22565b613823565b9050611128846040015183836138bf565b600e5460408501516020015161114a916001600160a01b03169083868c61390d565b60408401515161115c9083858b61393a565b50506001600d555095945050505050565b61117685613496565b600083838360405160200161118d93929190614897565b60408051601f1981840301815291905290506111cb866111b06020880188614341565b60208801356111c560608a0160408b0161487c565b856132db565b507f3cd5e48f9730b129dc7550f0fcea9c767b7be37837cd10e55eb35f734f4bca0485876040516111fd92919061496a565b60405180910390a1505050505050565b6001600160a01b038316600090815260056020526040902054606090849060ff1661124b57604051631bc58ef360e11b815260040160405180910390fd5b604051639c33abf760e01b815263ffffffff80861660048301526001600160a01b0388811660248401529085166044830152861690639c33abf790606401600060405180830381865afa1580156112a6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526112ce9190810190614ad2565b9695505050505050565b6112e185613496565b6001600160a01b038516600090815260026020908152604080832063ffffffff88168452825280832086845282528083206001600160401b038616845290915290205481811461135357604051637182306f60e01b815260048101829052602481018390526044015b60405180910390fd5b6001600160a01b038616600090815260016020908152604080832063ffffffff8916845282528083208784529091529020546001600160401b039081169084161180159061139f575080155b156113c857604051630c09b63560e41b81526001600160401b038416600482015260240161134a565b6001600160a01b038616600090815260026020908152604080832063ffffffff89168452825280832087845282528083206001600160401b0387168452909152908190206000199055517faf0450c392c4f702515a457a362328c8aa21916048ca6d0419e248b30cb55292906111fd90879087908a9088908890614b06565b6001600160a01b03808316600090815260076020908152604080832063ffffffff8616845290915281205490911690816114be5763ffffffff83166000908152600a60205260409020546001600160a01b03169150816114ba57604051633c74268360e11b815260040160405180910390fd5b5060015b9250929050565b6114ce85613496565b6001600160a01b038516600090815260026020908152604080832063ffffffff88168452825280832086845282528083206001600160401b038616845290915290205481811461153b57604051637182306f60e01b8152600481018290526024810183905260440161134a565b80158061158557506001600160a01b038616600090815260016020908152604080832063ffffffff8916845282528083208784529091529020546001600160401b03908116908416115b156115ae57604051630c09b63560e41b81526001600160401b038416600482015260240161134a565b6001600160a01b038616600090815260026020908152604080832063ffffffff89168452825280832087845282528083206001600160401b038716845290915280822091909155517f7f68a37a6e69a0de35024a234558f9efe4b33b58657753d21eaaa82d51c3510e906111fd90879087908a9088908890614b06565b63ffffffff81166000908152600960205260408120546001600160a01b031615801590611675575063ffffffff82166000908152600a60205260409020546001600160a01b031615155b92915050565b336001600160a01b03168b6001600160a01b03168d6001600160a01b03167f8a0b1dce321c5c5fb42349bce46d18087c04140de520917661fb923e44a904b98d8d8d8d8d8d8d8d8d8d6040516116da9a99989796959493929190614b43565b60405180910390a4505050505050505050505050565b6001600160a01b038216600090815260056020526040902054829060ff1615801561172357506001600160a01b03811615155b156117415760405163a4ff2ec360e01b815260040160405180910390fd5b826001600160a01b038116156117e4576000816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611791573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117b591906149a6565b60028111156117c6576117c6614990565b036117e4576040516342756b1b60e11b815260040160405180910390fd5b83856001600160a01b03821615611880576040516319d4335360e21b815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa15801561183f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186391906149d5565b61188057604051630e476aa960e21b815260040160405180910390fd5b61188988613496565b6001600160a01b03808916600090815260076020908152604080832063ffffffff8c168452909152902054811690871681036118d85760405163d0ecb66b60e01b815260040160405180910390fd5b6001600160a01b03898116600081815260076020908152604080832063ffffffff8e168085529083529281902080546001600160a01b031916958d1695861790558051938452908301919091528101919091527fcd6f92f5ac6185a5acfa02c92090746cec64d777269cbcd0ed031e396657a1c29060600160405180910390a18515611a52576001600160a01b038116158061197b57506001600160a01b038716155b1561199957604051633c075f7560e01b815260040160405180910390fd5b60006040518060400160405280836001600160a01b0316815260200188436119c19190614bc2565b90526001600160a01b038b8116600090815260086020908152604080832063ffffffff8f168452825291829020845181546001600160a01b03191694169390931783558301516001909201829055519192507f4e0a5bbfa0c11a64effb1ada324b5437a17272e1aed9320398715ef71bb2092891611a44918d918d9187916149f2565b60405180910390a150611ac3565b6001600160a01b038916600090815260086020908152604080832063ffffffff8c16845290915280822080546001600160a01b0319168155600101829055517f4e0a5bbfa0c11a64effb1ada324b5437a17272e1aed9320398715ef71bb2092891611033918c918c918691906149f2565b505050505050505050565b336001600160a01b03168a6001600160a01b03167f7edfa10fe10193301ad8a8bea7e968c7bcabcc64981f368e3aeada40ce26ae2c8d8c8c8c8c8c8c8c8c8c604051611b239a99989796959493929190614bd5565b60405180910390a35050505050505050505050565b6001600160a01b038316600090815260056020526040902054839060ff16611b7357604051631bc58ef360e11b815260040160405180910390fd5b611b7c85613496565b604051631077eb9160e11b81526001600160a01b038516906320efd72290611bac90889087908790600401614c34565b600060405180830381600087803b158015611bc657600080fd5b505af1158015611ac3573d6000803e3d6000fd5b611be261398c565b611bec60006139b9565b565b336000908152600c602090815260408083206001600160a01b03891684528252808320878452825280832061ffff8716845290915290205415611c4457604051630542086560e21b815260040160405180910390fd5b8181604051611c54929190614d27565b60408051918290038220336000818152600c60209081528482206001600160a01b038c16835281528482208a8352815284822061ffff8a168352905292909220557f3d52ff888d033fd3dd1d8057da59e850c91d91a72c41dfa445b247dfedeb6dc191611ccb919088908890889088908890614d37565b60405180910390a15050505050565b6001600160a01b03811660009081526001602090815260408220611d3f91859185918590611d0a90850185614341565b63ffffffff168152602080820192909252604090810160009081208984013582529092529020546001600160401b0316613a09565b9392505050565b60606004805480602002602001604051908101604052809291908181526020018280548015611d9e57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611d80575b5050505050905090565b6001600160a01b038089166000908152600c60209081526040808320938b168352928152828220898352815282822061ffff891683529052818120549151611df39087908790614d27565b60405180910390209050808214611e27576040516335ca595f60e01b8152600481018390526024810182905260440161134a565b6001600160a01b03808b166000908152600c60209081526040808320938d168084529382528083208c8452825280832061ffff8c168452909152908190206001905551630685081360e51b815263d0a10260903490611e96908e908d908c908c9033908d908d90600401614d81565b6000604051808303818588803b158015611eaf57600080fd5b505af1158015611ec3573d6000803e3d6000fd5b50505050507e36c98efcf9e6641dfbc9051f66f405253e8e0c2ab4a24dccda15595b7378c88a8a8a8a604051611f2494939291906001600160a01b039485168152929093166020830152604082015261ffff91909116606082015260800190565b60405180910390a150505050505050505050565b6001600160a01b038116600090815260056020526040902054819060ff16158015611f6b57506001600160a01b03811615155b15611f895760405163a4ff2ec360e01b815260040160405180910390fd5b816001600160a01b0381161561202c576001816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611fd9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ffd91906149a6565b600281111561200e5761200e614990565b0361202c57604051633d00f6f160e11b815260040160405180910390fd5b82846001600160a01b038216156120c8576040516319d4335360e21b815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015612087573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120ab91906149d5565b6120c857604051630e476aa960e21b815260040160405180910390fd5b6120d187613496565b6001600160a01b03878116600090815260066020908152604080832063ffffffff8b16845290915290205481871691160361211f5760405163d0ecb66b60e01b815260040160405180910390fd5b6001600160a01b03878116600081815260066020908152604080832063ffffffff8c168085529083529281902080546001600160a01b031916958b1695861790558051938452908301919091528101919091527f4cff966ebee29a156dcb34cf72c1d06231fb1777f6bdf6e8089819232f002b1c90606001610d5c565b60008060006121ab8686611447565b91509150816001600160a01b0316846001600160a01b0316036121d357600192505050611d3f565b600081612208576001600160a01b038716600090815260086020908152604080832063ffffffff8a168452909152902061221e565b63ffffffff86166000908152600b602052604090205b6040805180820190915281546001600160a01b03908116808352600190930154602083015290925086161480156122585750438160200151115b156122695760019350505050611d3f565b5060009695505050505050565b6001600160a01b038316600090815260016020908152604080832063ffffffff8616845282528083208484529091528120546001600160401b03165b6122c185858584600101613a8d565b156122ce576001016122b2565b949350505050565b6122de61398c565b6001600160a01b038216600090815260056020526040902054829060ff1661231957604051631bc58ef360e11b815260040160405180910390fd5b826001600160a01b038116156123bc576000816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612369573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061238d91906149a6565b600281111561239e5761239e614990565b036123bc576040516342756b1b60e11b815260040160405180910390fd5b83856001600160a01b03821615612458576040516319d4335360e21b815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015612417573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061243b91906149d5565b61245857604051630e476aa960e21b815260040160405180910390fd5b63ffffffff87166000908152600a60205260409020546001600160a01b03908116908716810361249b5760405163d0ecb66b60e01b815260040160405180910390fd5b63ffffffff88166000818152600a602090815260409182902080546001600160a01b0319166001600160a01b038c169081179091558251938452908301527fc16891855cffb4a5ac51ac11864a3f3c96ba816cc45fe686c987ae36277de5ec910160405180910390a185156125895763ffffffff88166000908152600b6020526040902080546001600160a01b0319166001600160a01b0383161781556125428743614bc2565b600182018190556040517f55b28633cdb29709386f555dfc54418592ad475ce7a65a78ac5928af60ffb8f89161257b918c918691614dd4565b60405180910390a1506125ec565b63ffffffff88166000908152600b602052604080822080546001600160a01b0319168155600101829055517f55b28633cdb29709386f555dfc54418592ad475ce7a65a78ac5928af60ffb8f8916125e3918b918591614dd4565b60405180910390a15b5050505050505050565b6125fe61398c565b612609838383613ada565b505050565b6126258261261f6020860186614341565b3361219c565b612642576040516313e9bb2b60e21b815260040160405180910390fd5b6001600160a01b0382166000908152600160209081526040822090829061266b90870187614341565b63ffffffff168152602080820192909252604090810160009081208784013582529092529020546001600160401b031690506126a8848483613a09565b6126c55760405163751cb20f60e01b815260040160405180910390fd5b6126d0848483613afd565b6126ec5760405162bbf0e560e11b815260040160405180910390fd5b612718836126fd6020870187614341565b60208701356127126060890160408a0161487c565b86613bba565b7f0d87345f3d1c929caba93e1c3821b54ff3512e12b66aa3cfe54b6bcbc17e59b484848460405161274b93929190614dfb565b60405180910390a150505050565b6001600160a01b038316600090815260036020908152604080832063ffffffff86168452825280832084845290915281205481906127a1906001600160401b03166001614e23565b90506127d0817f0000000000000000000000000000000000000000000000000000000000000000878787613c20565b95945050505050565b6127e161398c565b6001600160a01b038116600090815260056020526040902054819060ff1661281c57604051631bc58ef360e11b815260040160405180910390fd5b816001600160a01b038116156128bf576001816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561286c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061289091906149a6565b60028111156128a1576128a1614990565b036128bf57604051633d00f6f160e11b815260040160405180910390fd5b82846001600160a01b0382161561295b576040516319d4335360e21b815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa15801561291a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061293e91906149d5565b61295b57604051630e476aa960e21b815260040160405180910390fd5b63ffffffff86166000908152600960205260409020546001600160a01b0380871691160361299c5760405163d0ecb66b60e01b815260040160405180910390fd5b63ffffffff861660008181526009602090815260409182902080546001600160a01b0319166001600160a01b038a169081179091558251938452908301527f16aa0f528038ab41019e95bae5b418a50ba8532c5800e3b7ea2f517d3fa625f591016111fd565b6001600160a01b03808316600090815260066020908152604080832063ffffffff861684529091529020541680611675575063ffffffff81166000908152600960205260409020546001600160a01b03168061167557604051636c1ccdb560e01b815260040160405180910390fd5b612a7961398c565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b031603612acb576040516310647d0b60e01b815260040160405180910390fd5b612ad481613c99565b50565b6001600160a01b03811660009081526001602090815260408220611d3f91859185918590612b0790850185614341565b63ffffffff168152602080820192909252604090810160009081208984013582529092529020546001600160401b0316613afd565b336000818152600f602090815260409182902080546001600160a01b0319166001600160a01b0386169081179091558251938452908301527f6ee10e9ed4d6ce9742703a498707862f4b00f1396a87195eb93267b3d798398191015b60405180910390a150565b6001600160a01b038216600090815260056020526040902054829060ff16612bde57604051631bc58ef360e11b815260040160405180910390fd5b826001600160a01b03811615612c81576000816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c5291906149a6565b6002811115612c6357612c63614990565b03612c81576040516342756b1b60e11b815260040160405180910390fd5b83856001600160a01b03821615612d1d576040516319d4335360e21b815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015612cdc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d0091906149d5565b612d1d57604051630e476aa960e21b815260040160405180910390fd5b612d2561398c565b84600003612d595763ffffffff87166000908152600b6020526040812080546001600160a01b031916815560010155612dae565b438511612d79576040516302efcf9160e11b815260040160405180910390fd5b63ffffffff87166000908152600b6020526040902080546001600160a01b0319166001600160a01b0388161781556001018590555b7f55b28633cdb29709386f555dfc54418592ad475ce7a65a78ac5928af60ffb8f8878787604051610d5c93929190614dd4565b612dea84613496565b612df5848484612276565b612e00906001614e23565b6001600160401b0316816001600160401b031614612e3c57604051630c09b63560e41b81526001600160401b038216600482015260240161134a565b6001600160a01b038416600081815260016020908152604080832063ffffffff8816808552908352818420878552835292819020805467ffffffffffffffff19166001600160401b038716908117909155815193845291830186905282019290925260608101919091527f28f40053783033ef755556a0c3315379141f51a33aed8334174ffbadd90bde489060800161274b565b6040805180820190915260008082526020820152612ef460a0840160808501614a22565b8015612f095750600e546001600160a01b0316155b15612f2757604051632d7b695560e11b815260040160405180910390fd5b6001600160a01b03821660009081526003602090815260408220908290612f5090870187614341565b63ffffffff16815260208082019290925260409081016000908120878401358252909252902054612f8b906001600160401b03166001614e23565b905060006040518060e00160405280836001600160401b031681526020017f000000000000000000000000000000000000000000000000000000000000000063ffffffff168152602001856001600160a01b03168152602001866000016020810190612ff79190614341565b63ffffffff1681526020018660200135815260200161304f847f0000000000000000000000000000000000000000000000000000000000000000888a60000160208101906130459190614341565b8b60200135613c20565b81526020016130616040880188614e43565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525092935091506130ae9050856109b16020890189614341565b90506001600160a01b03811663d80e9bd9836130cd60608a018a614e43565b6130dd60a08c0160808d01614a22565b6040518563ffffffff1660e01b81526004016130fc9493929190614e89565b6040805180830381865afa158015613118573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ce9190614f7d565b61314461398c565b6040516301ffc9a760e01b81526325fc096160e21b60048201526001600160a01b038216906301ffc9a790602401602060405180830381865afa15801561318f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131b391906149d5565b6131d05760405163eb64f35d60e01b815260040160405180910390fd5b6001600160a01b03811660009081526005602052604090205460ff161561320a5760405163457517f360e11b815260040160405180910390fd5b6001600160a01b0381166000818152600560209081526040808320805460ff191660019081179091556004805491820181559093527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b90920180546001600160a01b0319168417905590519182527f6b374d56679ca9463f27c85c6311e2bb7fde69bf201d3da39d53f10bd9d78af59101612b98565b6132a861398c565b6001600160a01b0381166132d257604051631e4fbdf760e01b81526000600482015260240161134a565b612ad4816139b9565b6001600160a01b038516600090815260016020908152604080832063ffffffff8816845282528083208684529091528120546001600160401b039081169084168110156133c957600181015b846001600160401b0316816001600160401b03161161337c5761334c88888884613a8d565b61337457604051630c09b63560e41b81526001600160401b038216600482015260240161134a565b600101613327565b506001600160a01b038716600090815260016020908152604080832063ffffffff8a16845282528083208884529091529020805467ffffffffffffffff19166001600160401b0386161790555b82516020808501919091206001600160a01b038916600090815260028352604080822063ffffffff8b168352845280822089835284528082206001600160401b0389168352909352919091205490925080831461344357604051637182306f60e01b8152600481018290526024810184905260440161134a565b50506001600160a01b03909516600090815260026020908152604080832063ffffffff90971683529581528582209482529384528481206001600160401b03909316815291909252918220919091555090565b336001600160a01b038216148015906134c957506001600160a01b038181166000908152600f6020526040902054163314155b15612ad45760405163c4c5259360e01b815260040160405180910390fd5b6134ef613e95565b600080613560856135036020870187614341565b6001600160a01b0391909116600090815260036020908152604080832063ffffffff949094168352928152828220818901358352905220805467ffffffffffffffff19811660016001600160401b03928316019182161790915590565b905060006040518060e00160405280836001600160401b031681526020017f000000000000000000000000000000000000000000000000000000000000000063ffffffff168152602001876001600160a01b031681526020018660000160208101906135cc9190614341565b63ffffffff1681526020018660200135815260200161361a847f00000000000000000000000000000000000000000000000000000000000000008a8a60000160208101906130459190614341565b815260200161362c6040880188614e43565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525092935091506136799050876109b16020890189614341565b90506000806001600160a01b038316634389e58f8561369b60608c018c614e43565b6136ab60a08e0160808f01614a22565b6040518563ffffffff1660e01b81526004016136ca9493929190614e89565b6000604051808303816000875af11580156136e9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526137119190810190614f99565b90925090507f1ab700d4ced0c005b164c0f789fd09fcbb0156d4c2041b8a3bfbcd961cd1567f8161374560608b018b614e43565b866040516137569493929190614fe7565b60405180910390a1506040805160608101825260a09094015184526001600160401b03909416602084015292820192909252925090509250929050565b6040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa1580156137fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061381e9190615027565b905090565b600081156138ba57600e546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015613873573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138979190615027565b9050806000036138ba57604051631775123760e01b815260040160405180910390fd5b919050565b82518210806138d15750808360200151115b156126095782516020840151604051634f3ec0d360e01b815260048101929092526024820184905260448201526064810182905260840161134a565b831561391e5761391e858386613cef565b82841015613933576139338582868603613cef565b5050505050565b341561395957604051634d18bd2960e11b815260040160405180910390fd5b6139867f00000000000000000000000000000000000000000000000000000000000000008585858561390d565b50505050565b6000546001600160a01b03163314611bec5760405163118cdaa760e01b815233600482015260240161134a565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600080826001600160401b031611806122ce5750604051600162842fc360e01b031981526001600160a01b0384169063ff7bd03d90613a4c908790600401615040565b602060405180830381865afa158015613a69573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122ce91906149d5565b6001600160a01b038416600090815260026020908152604080832063ffffffff87168452825280832085845282528083206001600160401b03851684529091529020541515949350505050565b6001600160a01b038316613af2576126098282613d2a565b612609838383613cef565b60006001600160401b038216613b19606086016040870161487c565b6001600160401b031611806122ce57506001600160a01b03831660009081526002602090815260408220908290613b5290880188614341565b63ffffffff1663ffffffff1681526020019081526020016000206000866020013581526020019081526020016000206000866040016020810190613b96919061487c565b6001600160401b031681526020810191909152604001600020541415949350505050565b80613bd8576040516304df7fdb60e11b815260040160405180910390fd5b6001600160a01b03909416600090815260026020908152604080832063ffffffff90961683529481528482209382529283528381206001600160401b03909216815291522055565b600085856001600160a01b03861660405160c09390931b6001600160c01b031916602084015260e091821b6001600160e01b03199081166028850152602c8401919091529085901b16604c8201526050810183905260700160405160208183030381529060405280519060200120905095945050505050565b613ca161398c565b600e80546001600160a01b0319166001600160a01b0383169081179091556040519081527fd476ec5ec1ac11cec3714d41e7ea49419471aceb9bd0dff1becfc3e363a6239690602001612b98565b6001600160a01b038216613d16576040516306b7a93160e41b815260040160405180910390fd5b6126096001600160a01b0384168383613dd7565b6001600160a01b038216613d51576040516306b7a93160e41b815260040160405180910390fd5b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114613d9e576040519150601f19603f3d011682016040523d82523d6000602084013e613da3565b606091505b505090508061260957604051631196f20d60e21b81526001600160a01b03841660048201526024810183905260440161134a565b604080516001600160a01b03841660248201526044808201849052825180830390910181526064909101909152602080820180516001600160e01b031663a9059cbb60e01b1781528251612609938793909260009283929183919082885af180613e47576040513d6000823e3d81fd5b50506000513d91508115613e5f578060011415613e6c565b6001600160a01b0384163b155b1561398657604051635274afe760e01b81526001600160a01b038516600482015260240161134a565b60405180606001604052806000801916815260200160006001600160401b03168152602001613ed7604051806040016040528060008152602001600081525090565b905290565b600060608284031215613eee57600080fd5b50919050565b80356001600160a01b03811681146138ba57600080fd5b60008083601f840112613f1d57600080fd5b5081356001600160401b03811115613f3457600080fd5b6020830191508360208285010111156114be57600080fd5b600080600080600080600060e0888a031215613f6757600080fd5b613f718989613edc565b9650613f7f60608901613ef4565b95506080880135945060a08801356001600160401b0380821115613fa257600080fd5b613fae8b838c01613f0b565b909650945060c08a0135915080821115613fc757600080fd5b50613fd48a828b01613f0b565b989b979a50959850939692959293505050565b803563ffffffff811681146138ba57600080fd5b6000806000806080858703121561401157600080fd5b61401a85613ef4565b935061402860208601613fe7565b925061403660408601613ef4565b9396929550929360600135925050565b6000806040838503121561405957600080fd5b82356001600160401b0381111561406f57600080fd5b830160a0818603121561408157600080fd5b915061408f60208401613ef4565b90509250929050565b6000608082019050825182526001600160401b03602084015116602083015260408301516140d3604084018280518252602090810151910152565b5092915050565b600080600080600060c086880312156140f257600080fd5b6140fb86613ef4565b945061410a8760208801613edc565b93506080860135925060a08601356001600160401b0381111561412c57600080fd5b61413888828901613f0b565b969995985093965092949392505050565b6000806000806080858703121561415f57600080fd5b61416885613ef4565b935061417660208601613ef4565b925061418460408601613fe7565b915061419260608601613fe7565b905092959194509250565b60005b838110156141b85781810151838201526020016141a0565b50506000910152565b600081518084526141d981602086016020860161419d565b601f01601f19169290920160200192915050565b602081526000611d3f60208301846141c1565b80356001600160401b03811681146138ba57600080fd5b600080600080600060a0868803121561422f57600080fd5b61423886613ef4565b945061424660208701613fe7565b93506040860135925061425b60608701614200565b949793965091946080013592915050565b803561ffff811681146138ba57600080fd5b6000806000806080858703121561429457600080fd5b61429d85613ef4565b93506142ab60208601613ef4565b9250604085013591506141926060860161426c565b600080604083850312156142d357600080fd5b6142dc83613ef4565b915061408f60208401613fe7565b6000602082840312156142fc57600080fd5b611d3f82613ef4565b60008060006060848603121561431a57600080fd5b61432384613ef4565b925061433160208501613fe7565b9150604084013590509250925092565b60006020828403121561435357600080fd5b611d3f82613fe7565b6000806000806000806000806000806000806101208d8f03121561437f57600080fd5b6143888d613ef4565b9b5061439660208e01613ef4565b9a5060408d013599506143ab60608e0161426c565b985060808d0135975060a08d013596506001600160401b0360c08e013511156143d357600080fd5b6143e38e60c08f01358f01613f0b565b90965094506001600160401b0360e08e0135111561440057600080fd5b6144108e60e08f01358f01613f0b565b90945092506001600160401b036101008e0135111561442e57600080fd5b61443f8e6101008f01358f01613f0b565b81935080925050509295989b509295989b509295989b565b60008060008060008060008060008060006101408c8e03121561447957600080fd5b6144838d8d613edc565b9a5061449160608d01613ef4565b995060808c0135985060a08c0135975060c08c013596506001600160401b038060e08e013511156144c157600080fd5b6144d18e60e08f01358f01613f0b565b90975095506101008d01358110156144e857600080fd5b6144f98e6101008f01358f01613f0b565b90955093506101208d013581101561451057600080fd5b506145228d6101208e01358e01613f0b565b81935080925050509295989b509295989b9093969950565b6000806000806060858703121561455057600080fd5b61455985613ef4565b935061456760208601613ef4565b925060408501356001600160401b038082111561458357600080fd5b818701915087601f83011261459757600080fd5b8135818111156145a657600080fd5b8860208260051b85010111156145bb57600080fd5b95989497505060200194505050565b6000806000806000608086880312156145e257600080fd5b6145eb86613ef4565b9450602086013593506146006040870161426c565b925060608601356001600160401b0381111561412c57600080fd5b6000806080838503121561462e57600080fd5b6146388484613edc565b915061408f60608401613ef4565b6020808252825182820181905260009190848201906040850190845b818110156146875783516001600160a01b031683529284019291840191600101614662565b50909695505050505050565b60008060008060008060008060c0898b0312156146af57600080fd5b6146b889613ef4565b97506146c660208a01613ef4565b9650604089013595506146db60608a0161426c565b945060808901356001600160401b03808211156146f757600080fd5b6147038c838d01613f0b565b909650945060a08b013591508082111561471c57600080fd5b506147298b828c01613f0b565b999c989b5096995094979396929594505050565b60008060006060848603121561475257600080fd5b61475b84613ef4565b925061476960208501613fe7565b915061477760408501613ef4565b90509250925092565b60008060006060848603121561479557600080fd5b61479e84613fe7565b925061433160208501613ef4565b6000806000606084860312156147c157600080fd5b61479e84613ef4565b600080600060a084860312156147df57600080fd5b6147e98585613edc565b92506147f760608501613ef4565b9150608084013590509250925092565b6000806040838503121561481a57600080fd5b61408183613fe7565b6000806000806080858703121561483957600080fd5b61484285613ef4565b935061485060208601613fe7565b92506040850135915061419260608601614200565b815181526020808301519082015260408101611675565b60006020828403121561488e57600080fd5b611d3f82614200565b838152818360208301376000910160200190815292915050565b63ffffffff6148bf82613fe7565b168252602081013560208301526001600160401b036148e060408301614200565b1660408301525050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b61491d81896148b1565b86606082015260e06080820152600061493a60e0830187896148ea565b6001600160a01b03861660a084015282810360c084015261495c8185876148ea565b9a9950505050505050505050565b6080810161497882856148b1565b6001600160a01b039290921660609190910152919050565b634e487b7160e01b600052602160045260246000fd5b6000602082840312156149b857600080fd5b815160038110611d3f57600080fd5b8015158114612ad457600080fd5b6000602082840312156149e757600080fd5b8151611d3f816149c7565b6001600160a01b03948516815263ffffffff93909316602084015292166040820152606081019190915260800190565b600060208284031215614a3457600080fd5b8135611d3f816149c7565b634e487b7160e01b600052604160045260246000fd5b600082601f830112614a6657600080fd5b81516001600160401b0380821115614a8057614a80614a3f565b604051601f8301601f19908116603f01168101908282118183101715614aa857614aa8614a3f565b81604052838152866020858801011115614ac157600080fd5b6112ce84602083016020890161419d565b600060208284031215614ae457600080fd5b81516001600160401b03811115614afa57600080fd5b6122ce84828501614a55565b63ffffffff95909516855260208501939093526001600160a01b039190911660408401526001600160401b03166060830152608082015260a00190565b8a815261ffff8a16602082015288604082015287606082015260e060808201526000614b7360e08301888a6148ea565b82810360a0840152614b868187896148ea565b905082810360c0840152614b9b8185876148ea565b9d9c50505050505050505050505050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561167557611675614bac565b6000610120614be4838e6148b1565b8b60608401528a60808401528960a08401528060c0840152614c09818401898b6148ea565b905082810360e0840152614c1e8187896148ea565b9050828103610100840152614b9b8185876148ea565b6001600160a01b03841681526040602080830182905282820184905260009190606090818501600587901b8601830188865b89811015614d1757888303605f190184528135368c9003605e19018112614c8c57600080fd5b8b0163ffffffff80614c9d83613fe7565b16855280614cac888401613fe7565b16878601525087810135601e19823603018112614cc857600080fd5b0185810190356001600160401b03811115614ce257600080fd5b803603821315614cf157600080fd5b8789860152614d0388860182846148ea565b958701959450505090840190600101614c66565b50909a9950505050505050505050565b8183823760009101908152919050565b6001600160a01b038781168252861660208201526040810185905261ffff8416606082015260a060808201819052600090614d7590830184866148ea565b98975050505050505050565b600060018060a01b03808a16835288602084015260a06040840152614daa60a08401888a6148ea565b81871660608501528381036080850152614dc58186886148ea565b9b9a5050505050505050505050565b63ffffffff9390931683526001600160a01b03919091166020830152604082015260600190565b60a08101614e0982866148b1565b6001600160a01b0393909316606082015260800152919050565b6001600160401b038181168382160190808211156140d3576140d3614bac565b6000808335601e19843603018112614e5a57600080fd5b8301803591506001600160401b03821115614e7457600080fd5b6020019150368190038213156114be57600080fd5b606080825285516001600160401b031682820152602086015163ffffffff16608083015260408601516001600160a01b031660a0830152850151600090614ed860c084018263ffffffff169052565b50608086015160e083015260a086015161010083015260c086015160e0610120840152614f096101408401826141c1565b90508281036020840152614f1e8186886148ea565b9150506127d0604083018415159052565b600060408284031215614f4157600080fd5b604051604081018181106001600160401b0382111715614f6357614f63614a3f565b604052825181526020928301519281019290925250919050565b600060408284031215614f8f57600080fd5b611d3f8383614f2f565b60008060608385031215614fac57600080fd5b614fb68484614f2f565b915060408301516001600160401b03811115614fd157600080fd5b614fdd85828601614a55565b9150509250929050565b606081526000614ffa60608301876141c1565b828103602084015261500d8186886148ea565b91505060018060a01b038316604083015295945050505050565b60006020828403121561503957600080fd5b5051919050565b6060810161167582846148b156fea264697066735822122090f702bc055b3c8606fe084619d87bdcfb9298de28d91daac921e84b5c1160f264736f6c63430008160033608060405234801561001057600080fd5b506101c3806100206000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806301ffc9a7146100655780631881d94d1461008d57806354fd4d501461009c5780636750cd4c146100c3575b604051632657b6c360e01b815260040160405180910390fd5b61007861007336600461010e565b6100d7565b60405190151581526020015b60405180910390f35b6002604051610084919061013f565b6040805167ffffffffffffffff815260ff6020820152600291810191909152606001610084565b6100786100d1366004610167565b50600190565b60006001600160e01b031982166325fc096160e21b148061010857506301ffc9a760e01b6001600160e01b03198316145b92915050565b60006020828403121561012057600080fd5b81356001600160e01b03198116811461013857600080fd5b9392505050565b602081016003831061016157634e487b7160e01b600052602160045260246000fd5b91905290565b60006020828403121561017957600080fd5b813563ffffffff8116811461013857600080fdfea2646970667358221220b5a5c043a377444c26f6a8e7dd680ec55e20f7abeec109769ef20ff322bd379164736f6c63430008160033608060405234801561001057600080fd5b506040516114d63803806114d683398101604081905261002f9161010a565b338061005557604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b61005e816100ba565b506001600160a01b03166000908152600260205260409020805460ff1916600190811790915580546001600160801b03191668056bc75e2d6310000017905560058054602f60801b6001600160801b039190911617905561013a565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561011c57600080fd5b81516001600160a01b038116811461013357600080fd5b9392505050565b61138d806101496000396000f3fe6080604052600436106101405760003560e01c80638ca2fb08116100b6578063d350ad251161006f578063d350ad2514610441578063da26663a14610461578063dbbb415514610522578063e0ad121a14610542578063f2fde38b146105cb578063fd9be522146105eb57600080fd5b80638ca2fb08146103595780638da5cb5b1461039957806392807f58146103b7578063c1723a1d146103e9578063c1840327146103fc578063cd68b79b1461041a57600080fd5b80635d6d7ccb116101085780635d6d7ccb146102405780635e280f1114610260578063715018a6146102985780637bc3c9ab146102ad5780637dc438a4146102ea57806388a4124c1461030a57600080fd5b806311f2c343146101455780632f7cb0b41461017c5780633161b7f61461019e57806336a5beba146101be57806352a7251014610220575b600080fd5b34801561015157600080fd5b5061016961016036600461100d565b60009392505050565b6040519081526020015b60405180910390f35b34801561018857600080fd5b5061019c610197366004611057565b61060b565b005b3480156101aa57600080fd5b5061019c6101b9366004611079565b610632565b3480156101ca57600080fd5b506040805180820182526000808252602091820152815180830183526004546001600160401b03811680835263ffffffff600160401b909204821692840192835284519081529151169181019190915201610173565b34801561022c57600080fd5b5061019c61023b366004611104565b610773565b34801561024c57600080fd5b5061019c61025b366004611057565b6107a6565b34801561026c57600080fd5b50600654610280906001600160a01b031681565b6040516001600160a01b039091168152602001610173565b3480156102a457600080fd5b5061019c610819565b3480156102b957600080fd5b506102cd6102c8366004611152565b61082d565b604080519283526001600160801b03909116602083015201610173565b3480156102f657600080fd5b5061019c610305366004611170565b6108c8565b34801561031657600080fd5b5061032a61032536600461100d565b610989565b604080519485526001600160801b03938416602086015291831691840191909152166060820152608001610173565b34801561036557600080fd5b50610389610374366004611188565b60026020526000908152604090205460ff1681565b6040519015158152602001610173565b3480156103a557600080fd5b506000546001600160a01b0316610280565b3480156103c357600080fd5b506005546001600160801b03165b6040516001600160801b039091168152602001610173565b61032a6103f736600461100d565b6109ab565b34801561040857600080fd5b506001546001600160801b03166103d1565b34801561042657600080fd5b506005546103d190600160801b90046001600160801b031681565b34801561044d57600080fd5b5061019c61045c366004611057565b6109dc565b34801561046d57600080fd5b506104e861047c3660046111a3565b60408051606080820183526000808352602080840182905292840181905263ffffffff94851681526003835283902083519182018452546001600160801b0381168252600160801b81046001600160401b031692820192909252600160c01b9091049092169082015290565b6040805182516001600160801b031681526020808401516001600160401b0316908201529181015163ffffffff1690820152606001610173565b34801561052e57600080fd5b5061019c61053d366004611188565b610a06565b34801561054e57600080fd5b506104e861055d3660046111be565b60408051606080820183526000808352602080840182905292840181905261ffff949094168452600382529282902082519384018352546001600160801b03811684526001600160401b03600160801b82041691840191909152600160c01b900463ffffffff169082015290565b3480156105d757600080fd5b5061019c6105e6366004611188565b610a30565b3480156105f757600080fd5b5061019c6106063660046111d9565b610a6e565b610613610a84565b600580546001600160801b03928316600160801b029216919091179055565b336106456000546001600160a01b031690565b6001600160a01b031614610683573360009081526002602052604090205460ff166106835760405163320ae52960e01b815260040160405180910390fd5b60005b8181101561076e57368383838181106106a1576106a1611203565b60800291909101915061076590506106bc60208301836111a3565b6106ce36849003840160208501611230565b805160208083015160409384015184516060810186526001600160801b0394851681526001600160401b0392831681850190815263ffffffff9283168288019081529783166000908152600390955295909320925183549551965194166001600160c01b031990951694909417600160801b95909116949094029390931763ffffffff60c01b1916600160c01b9190921602179055565b50600101610686565b505050565b61077b610a84565b6001600160a01b03919091166000908152600260205260409020805460ff1916911515919091179055565b336107b96000546001600160a01b031690565b6001600160a01b0316146107f7573360009081526002602052604090205460ff166107f75760405163320ae52960e01b815260040160405180910390fd5b600580546001600160801b0319166001600160801b0392909216919091179055565b610821610a84565b61082b6000610ab1565b565b6000808461ffff16606e148061084857508461ffff1661279f145b8061085857508461ffff16614eaf145b156108755761086c8561ffff168585610b01565b915091506108c0565b8461ffff16606f148061088d57508461ffff16612794145b8061089d57508461ffff16614ea4145b156108b15761086c8561ffff168585610c0e565b61086c8561ffff168585610d5e565b935093915050565b336108db6000546001600160a01b031690565b6001600160a01b031614610919573360009081526002602052604090205460ff166109195760405163320ae52960e01b815260040160405180910390fd5b6109296106bc60208301836111a3565b600061093b60a08301608084016112a9565b9050600061094f60c0840160a085016111a3565b6004805463ffffffff909216600160401b026bffffffffffffffffffffffff199092166001600160401b0390941693909317179091555050565b60008060008061099a878787610dfe565b935093509350935093509350935093565b6000808080806109bf565b60405180910390fd5b6109ca888888610dfe565b94509450945094505093509350935093565b6109e4610a84565b600180546001600160801b0319166001600160801b0392909216919091179055565b610a0e610a84565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b610a38610a84565b6001600160a01b038116610a6257604051631e4fbdf760e01b8152600060048201526024016109b6565b610a6b81610ab1565b50565b610a76610a84565b610a808282610ecc565b5050565b6000546001600160a01b0316331461082b5760405163118cdaa760e01b81523360048201526024016109b6565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b63ffffffff8381166000908152600360205260408120600454600554929384938492600160401b900490911690606490610b4b90600160801b90046001600160801b0316896112da565b610b55919061130d565b610b5f91906112da565b8254909150600090610b7e90600160c01b900463ffffffff16886112da565b83546004549192506000916001600160401b03600160801b90920482169184918691610bab91168b611321565b610bb59190611321565b610bbf9190611321565b610bc991906112da565b60015485549192506001600160801b0390811691610be89116836112da565b610bf2919061130d565b935493996001600160801b039094169850929650505050505050565b6000806000610c1c86610f79565b63ffffffff80821660009081526003602052604081208054939450929091610c4c91600160c01b900416886112da565b610c5890610c74611321565b8254909150600090610c7a90600160801b90046001600160401b0316836112da565b63ffffffff808b1660009081526003602052604081208054939450929091610caa91600160c01b9004168b6112da565b8254909150600090600160801b90046001600160401b0316610ccc8b84611321565b610cd691906112da565b60015487549192506000916001600160801b0391821691610cf89116876112da565b610d02919061130d565b60015485549192506000916001600160801b0391821691610d249116856112da565b610d2e919061130d565b90506000610d3c8284611321565b9554959f6001600160801b039096169e50949c50505050505050505050505050565b63ffffffff80841660009081526003602052604081208054919283928391610d8e91600160c01b900416876112da565b8254909150600090600160801b90046001600160401b0316610db08784611321565b610dba91906112da565b60015484549192506001600160801b0390811691610dd99116836112da565b610de3919061130d565b925492986001600160801b0390931697509195505050505050565b600080808080610e1061753089611334565b90508063ffffffff16606e1480610e2e57508063ffffffff1661279f145b80610e4057508063ffffffff16614eaf145b15610e5a57610e50818888610b01565b9095509350610ea9565b8063ffffffff16606f1480610e7657508063ffffffff16612794145b80610e8857508063ffffffff16614ea4145b15610e9857610e50818888610c0e565b610ea3818888610d5e565b90955093505b505060015460055493979296506001600160801b03908116955090921692509050565b6001600160a01b038216610ef3576040516306b7a93160e41b815260040160405180910390fd5b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114610f40576040519150601f19603f3d011682016040523d82523d6000602084013e610f45565b606091505b505090508061076e57604051631196f20d60e21b81526001600160a01b0384166004820152602481018390526044016109b6565b600080610f8861753084611334565b90508063ffffffff16606f03610fa15750606592915050565b8063ffffffff1661279403610fba575061278992915050565b8063ffffffff16614ea403610fd35750614e9992915050565b604051633d0b0cf760e21b815263ffffffff821660048201526024016109b6565b803563ffffffff8116811461100857600080fd5b919050565b60008060006060848603121561102257600080fd5b61102b84610ff4565b95602085013595506040909401359392505050565b80356001600160801b038116811461100857600080fd5b60006020828403121561106957600080fd5b61107282611040565b9392505050565b6000806020838503121561108c57600080fd5b82356001600160401b03808211156110a357600080fd5b818501915085601f8301126110b757600080fd5b8135818111156110c657600080fd5b8660208260071b85010111156110db57600080fd5b60209290920196919550909350505050565b80356001600160a01b038116811461100857600080fd5b6000806040838503121561111757600080fd5b611120836110ed565b91506020830135801515811461113557600080fd5b809150509250929050565b803561ffff8116811461100857600080fd5b60008060006060848603121561116757600080fd5b61102b84611140565b600060c0828403121561118257600080fd5b50919050565b60006020828403121561119a57600080fd5b611072826110ed565b6000602082840312156111b557600080fd5b61107282610ff4565b6000602082840312156111d057600080fd5b61107282611140565b600080604083850312156111ec57600080fd5b6111f5836110ed565b946020939093013593505050565b634e487b7160e01b600052603260045260246000fd5b80356001600160401b038116811461100857600080fd5b60006060828403121561124257600080fd5b604051606081018181106001600160401b038211171561127257634e487b7160e01b600052604160045260246000fd5b60405261127e83611040565b815261128c60208401611219565b602082015261129d60408401610ff4565b60408201529392505050565b6000602082840312156112bb57600080fd5b61107282611219565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176112f1576112f16112c4565b92915050565b634e487b7160e01b600052601260045260246000fd5b60008261131c5761131c6112f7565b500490565b808201808211156112f1576112f16112c4565b600063ffffffff8084168061134b5761134b6112f7565b9216919091069291505056fea2646970667358221220ff064bafdc05a2d85d9d93ddac0510aa9c8f276c4f57eefac742b7fc656acac564736f6c6343000816003360e06040523480156200001157600080fd5b50604051620049703803806200497083398101604081905262000034916200018b565b82828282836001600160a01b031663416ecebf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000077573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200009d9190620001d8565b6001600160a01b03821660805263ffffffff811660a05283833380620000dd57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b620000e88162000122565b5060c0919091526002555050600680546001600160a01b0319166001600160a01b0398909816979097179096555062000207945050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146200018857600080fd5b50565b60008060008060808587031215620001a257600080fd5b8451620001af8162000172565b6020860151909450620001c28162000172565b6040860151606090960151949790965092505050565b600060208284031215620001eb57600080fd5b815163ffffffff811681146200020057600080fd5b9392505050565b60805160a05160c0516147206200025060003960008181611d100152611e730152600050506000818161069a0152818161079f015281816112b101526117d901526147206000f3fe60806040526004361061014f5760003560e01c806361d027b3116100b6578063d15b0d491161006f578063d15b0d4914610450578063d80e9bd914610470578063f0f442601461049d578063f2fde38b146104bd578063faaebd21146104dd578063fd9be5221461051857600080fd5b806361d027b3146103905780636750cd4c146103b0578063715018a6146103d05780638da5cb5b146103e55780639c33abf714610403578063c14c43491461043057600080fd5b806329460b0b1161010857806329460b0b1461025357806339e3f938146102735780634389e58f146102a057806343ea4fa9146102ce5780634d963200146102ee57806354fd4d501461036357600080fd5b806301ffc9a71461015b5780630e97289b14610190578063188183f4146101c85780631881d94d146101f5578063200175f71461021157806320efd7221461023357600080fd5b3661015657005b600080fd5b34801561016757600080fd5b5061017b6101763660046135db565b610538565b60405190151581526020015b60405180910390f35b34801561019c57600080fd5b506006546101b0906001600160a01b031681565b6040516001600160a01b039091168152602001610187565b3480156101d457600080fd5b506101e86101e3366004613647565b61058a565b6040516101879190613680565b34801561020157600080fd5b50600060405161018791906136a6565b34801561021d57600080fd5b5061023161022c3660046136ce565b610663565b005b34801561023f57600080fd5b5061023161024e366004613753565b61079d565b34801561025f57600080fd5b5061023161026e3660046137a7565b610912565b34801561027f57600080fd5b5061029361028e366004613647565b610aaa565b604051610187919061389e565b3480156102ac57600080fd5b506102c06102bb3660046138c1565b610be5565b6040516101879291906139c0565b3480156102da57600080fd5b506102936102e9366004613647565b610c7a565b3480156102fa57600080fd5b5061033f610309366004613647565b600460209081526000928352604080842090915290825290205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b03909116602083015201610187565b34801561036f57600080fd5b50604080516003815260006020820152600291810191909152606001610187565b34801561039c57600080fd5b506003546101b0906001600160a01b031681565b3480156103bc57600080fd5b5061017b6103cb3660046139e4565b610f86565b3480156103dc57600080fd5b50610231610f91565b3480156103f157600080fd5b506000546001600160a01b03166101b0565b34801561040f57600080fd5b5061042361041e366004613a01565b610fa5565b6040516101879190613a4c565b34801561043c57600080fd5b5061023161044b366004613a5f565b611037565b34801561045c57600080fd5b5061023161046b366004613ad3565b611170565b34801561047c57600080fd5b5061049061048b3660046138c1565b6111e5565b6040516101879190613aec565b3480156104a957600080fd5b506102316104b8366004613b03565b611255565b3480156104c957600080fd5b506102316104d8366004613b03565b611269565b3480156104e957600080fd5b5061050a6104f8366004613b03565b60056020526000908152604090205481565b604051908152602001610187565b34801561052457600080fd5b50610231610533366004613b20565b6112a4565b60006001600160e01b031982166325fc096160e21b148061056957506001600160e01b0319821663b6e9ace360e01b145b8061058457506301ffc9a760e01b6001600160e01b03198316145b92915050565b604080518082019091526000808252602082015263ffffffff80831660008181527f17ef568e3e12ab5b9c7254a8d58478811de00f9e6eb34345acd53bf8fd09d3ec602090815260408083206001600160a01b038916845260048352818420948452939091528120805492939092169081900361060e57825463ffffffff16610610565b805b63ffffffff168452815464010000000090046001600160a01b03168061064857835464010000000090046001600160a01b031661064a565b805b6001600160a01b03166020860152509295945050505050565b6003546001600160a01b0316331461068e5760405163885762a760e01b815260040160405180910390fd5b826001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e1758bd86040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061071a9190613b4c565b6001600160a01b031603610741576040516339a5741160e21b815260040160405180910390fd5b61074c838383611384565b604080516001600160a01b038086168252841660208201529081018290527fe081464b7278501267de69fa85b7b9560b0ae05d5fbfaab9b1986c70356e2efe906060015b60405180910390a1505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633146107e65760405163467409c360e01b815260040160405180910390fd5b60005b8181101561090c573683838381811061080457610804613b69565b90506020028101906108169190613b7f565b905061082d61082860208301836139e4565b6113c4565b600161083f60408301602084016139e4565b63ffffffff160361087f5761087a61085a60208301836139e4565b866108686040850185613b9f565b8101906108759190613c75565b6113f2565b610903565b600261089160408301602084016139e4565b63ffffffff16036108cc5761087a6108ac60208301836139e4565b866108ba6040850185613b9f565b8101906108c79190613e35565b61147a565b6108dc60408201602083016139e4565b604051635d4be0fd60e11b815263ffffffff90911660048201526024015b60405180910390fd5b506001016107e9565b50505050565b61091a6114c3565b60005b81811015610a6c573683838381811061093857610938613b69565b905060200281019061094a9190613e69565b905060ff61095b6020830183613e7f565b61096c906040810190602001613e95565b60ff160361098d576040516341d50bed60e11b815260040160405180910390fd5b60ff61099c6020830183613e7f565b6109ad906060810190604001613e95565b60ff16036109ce5760405163211089b360e11b815260040160405180910390fd5b6001600160401b036109e36020830183613e7f565b6109f1906020810190613eb0565b6001600160401b031603610a185760405163281b33d760e11b815260040160405180910390fd5b610a36610a286020830183613e7f565b610a3190613ecb565b6114f0565b610a636000610a4860208401846139e4565b610a556020850185613e7f565b610a5e90613ecb565b611528565b5060010161091d565b507faaf3aaa0c11056e86ac56eb653e25b005ca1a7d4dcd21ba24647f7ab63f3b5608282604051610a9e929190613f5d565b60405180910390a15050565b610ab2613522565b6001600160a01b038316600090815260016020818152604080842063ffffffff87168552825292839020835160c08101855281546001600160401b038116825260ff600160401b8204811683860152600160481b8204811683880152600160501b9091041660608201529281018054855181850281018501909652808652939491936080860193830182828015610b7257602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610b54575b5050505050815260200160028201805480602002602001604051908101604052809291908181526020018280548015610bd457602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610bb6575b505050505081525050905092915050565b60408051808201909152600080825260208201526060610c07868686866117c1565b600654604051631f5dad8b60e31b81529294509092506001600160a01b03169063faed6c5890610c3f908490899089906004016140a2565b600060405180830381600087803b158015610c5957600080fd5b505af1158015610c6d573d6000803e3d6000fd5b5050505094509492505050565b610c82613522565b63ffffffff821660008181527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49602090815260408083206001600160a01b03881684526001835281842094845293909152902080546001600160401b031680610cf75782546001600160401b03168452610d14565b6001600160401b0381811614610d14576001600160401b03811684525b8154600160401b900460ff16610dae578254600160401b900460ff1615610da95782600101805480602002602001604051908101604052809291908181526020018280548015610d8d57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610d6f575b505050505060808501528254600160401b900460ff1660208501525b610e35565b8154600160401b900460ff90811614610e355781600101805480602002602001604051908101604052809291908181526020018280548015610e1957602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610dfb575b505050505060808501528154600160401b900460ff1660208501525b8154600160481b900460ff16610ede578254600160481b900460ff1615610ed95782600201805480602002602001604051908101604052809291908181526020018280548015610eae57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610e90575b505050505060a0850152825460ff600160481b820481166040870152600160501b9091041660608501525b610f74565b8154600160481b900460ff90811614610f745781600201805480602002602001604051908101604052809291908181526020018280548015610f4957602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610f2b575b505050505060a0850152815460ff600160481b820481166040870152600160501b9091041660608501525b610f7d846114f0565b50505092915050565b600061058482611895565b610f996114c3565b610fa360006118f0565b565b606060001963ffffffff831601610fe657610fc0838561058a565b604051602001610fd09190613680565b6040516020818303038152906040529050611030565b60011963ffffffff83160161100f57610fff8385610c7a565b604051602001610fd0919061389e565b604051635d4be0fd60e11b815263ffffffff831660048201526024016108fa565b9392505050565b61103f6114c3565b60005b8181101561113e573683838381811061105d5761105d613b69565b606090810292909201925060009161107b9150830160408401613b03565b6001600160a01b0316036110a257604051631074e82d60e11b815260040160405180910390fd5b6110b260408201602083016139e4565b63ffffffff166000036110d8576040516349cfac4360e01b815260040160405180910390fd5b6000808052600460209081528201907f17ef568e3e12ab5b9c7254a8d58478811de00f9e6eb34345acd53bf8fd09d3ec9061111383856139e4565b63ffffffff168152602081019190915260400160002061113382826140e8565b505050600101611042565b507f2b001e1c6683bf79cc52891bd7215b204c787d18134fc7f3d21b4f32a49e47de8282604051610a9e929190614141565b6111786114c3565b6002548111156111a95760025460405163068109f760e31b81526108fa918391600401918252602082015260400190565b60028190556040518181527f491ff913b5444f4136b0d4075f020cfe3a5f60de926ec0b091612401a22b7842906020015b60405180910390a150565b604080518082019091526000808252602082015260008061123661120f6060890160408a01613b03565b61121f60808a0160608b016139e4565b61122c60c08b018b613b9f565b9050878a8a611940565b604080518082019091529182526020820152925050505b949350505050565b61125d6114c3565b61126681611a39565b50565b6112716114c3565b6001600160a01b03811661129b57604051631e4fbdf760e01b8152600060048201526024016108fa565b611266816118f0565b6112ad81611a87565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e1758bd86040518163ffffffff1660e01b8152600401602060405180830381865afa15801561130d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113319190613b4c565b905061133e818484611ad8565b604080513381526001600160a01b03851660208201529081018390527f820b7fd51bf79c54350bab98400651b3314ff6e79b33528821871d94a666988390606001610790565b6001600160a01b0382166113ab576040516306b7a93160e41b815260040160405180910390fd5b6113bf6001600160a01b0384168383611afb565b505050565b6113cd81611895565b61126657604051633c30434160e21b815263ffffffff821660048201526024016108fa565b6001600160a01b03808316600090815260046020908152604080832063ffffffff8089168552908352928190208551815493870151909516640100000000026001600160c01b03199093169490931693909317179055517f779cb2dd9d2bb1be1737d05435d744facbfb84a2a4912e21379d39beddcdc80590610790908490869085906141c1565b611485828483611528565b61148f8284610c7a565b507f82118522aa536ac0e96cc5c689407ae42b89d592aa133890a01f1509842f508182848360405161079093929190614203565b6000546001600160a01b03163314610fa35760405163118cdaa760e01b81523360048201526024016108fa565b602081015160ff1615801561150a5750606081015160ff16155b156112665760405163ce2c375160e01b815260040160405180910390fd5b602081015160ff90811614806115435750602081015160ff16155b15611571576080810151511561156c576040516341d50bed60e11b815260040160405180910390fd5b6115d7565b806020015160ff168160800151511415806115ac57506002611595600160ff614249565b61159f9190614262565b60ff16816020015160ff16115b156115ca576040516341d50bed60e11b815260040160405180910390fd5b6115d78160800151611b4d565b604081015160ff90811614806115f25750604081015160ff16155b156116465760a0810151511561161b5760405163211089b360e11b815260040160405180910390fd5b606081015160ff1615611641576040516338682fa960e01b815260040160405180910390fd5b6116eb565b806040015160ff168160a00151511415806116815750600261166a600160ff614249565b6116749190614262565b60ff16816040015160ff16115b1561169f5760405163211089b360e11b815260040160405180910390fd5b606081015160ff1615806116c05750806040015160ff16816060015160ff16115b156116de576040516338682fa960e01b815260040160405180910390fd5b6116eb8160a00151611b4d565b6001600160a01b038316600090815260016020818152604080842063ffffffff8716855282529283902084518154868401519587015160608801516001600160401b0390931668ffffffffffffffffff1990921691909117600160401b60ff97881602176affff0000000000000000001916600160481b9187169190910260ff60501b191617600160501b95909116949094029390931783556080840151805185949361179d9390850192019061356a565b5060a082015180516117b991600284019160209091019061356a565b505050505050565b604080518082019091526000808252602082015260607f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633146118205760405163467409c360e01b815260040160405180910390fd5b60008061182e888888611bb4565b909250905060008061186061184960608c0160408d01613b03565b61185960808d0160608e016139e4565b858a611c81565b909250905061186f8284614292565b604080518082019091529081526020810191909152945091925050505b94509492505050565b63ffffffff811660009081527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49602052604081208054600160401b900460ff16151580611030575054600160501b900460ff16151592915050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000806000806119508686611d8f565b9150915060006119618b8b84611da8565b9050600061196f8c8c61058a565b90506119858a826000015163ffffffff16611db5565b80602001516001600160a01b031663709eb6648c8e8d886040518563ffffffff1660e01b81526004016119bb94939291906142a5565b602060405180830381865afa1580156119d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119fc91906142e2565b611a069083614292565b9150600080611a178e8e868e611de4565b9092509050611a268285614292565b9e909d509b505050505050505050505050565b600380546001600160a01b0319166001600160a01b0383169081179091556040519081527f3c864541ef71378c6229510ed90f376565ee42d9c5e0904a984a9e863e6db44f906020016111da565b3360009081526005602052604090205480821115611ac25760405163068109f760e31b815260048101839052602481018290526044016108fa565b3360009081526005602052604090209190039055565b6001600160a01b038316611af0576113bf8282611eb5565b6113bf838383611384565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526113bf908490611f62565b6000805b82518110156113bf576000838281518110611b6e57611b6e613b69565b60200260200101519050826001600160a01b0316816001600160a01b031611611baa5760405163447516e160e01b815260040160405180910390fd5b9150600101611b51565b60606000806000611bc58686611d8f565b90925090506000611bef611bdf60608a0160408b01613b03565b6101e360808b0160608c016139e4565b90506000611c0060c08a018a613b9f565b90509050611c1881836000015163ffffffff16611db5565b6020820151611c4890611c3160808c0160608d016139e4565b611c4160608d0160408e01613b03565b8488611fd3565b611c529086614292565b9450600080611c618b866120cc565b9092509050611c708288614292565b909b909a5098505050505050505050565b60035460009081906001600160a01b03161561188c576040516001600160a01b038716602482015263ffffffff8616604482015260648101859052831515608482015260009060a40160408051601f19818403018152919052602080820180516001600160e01b0316636a8e2a4360e11b1790526003549192506000918291611d38916001600160a01b0316907f0000000000000000000000000000000000000000000000000000000000000000908490876120ef565b91509150611d488787848461219f565b90955093508415611d83576003546001600160a01b031660009081526005602052604081208054879290611d7d908490614292565b90915550505b50505094509492505050565b606080611d9c848461221a565b915091505b9250929050565b600061124d848484612307565b80821115611de057604051636333d79f60e11b815260048101839052602481018290526044016108fa565b5050565b60035460009081906001600160a01b03161561188c576040516001600160a01b038716602482015263ffffffff8616604482015260648101859052831515608482015260009060a40160408051601f19818403018152919052602080820180516001600160e01b031663d424422160e01b1790526003549192506000918291611e99916001600160a01b0316907f00000000000000000000000000000000000000000000000000000000000000009086612381565b91509150611ea98787848461219f565b9450945050505061188c565b6001600160a01b038216611edc576040516306b7a93160e41b815260040160405180910390fd5b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611f29576040519150601f19603f3d011682016040523d82523d6000602084013e611f2e565b606091505b50509050806113bf57604051631196f20d60e21b81526001600160a01b0384166004820152602481018390526044016108fa565b600080602060008451602086016000885af180611f85576040513d6000823e3d81fd5b50506000513d91508115611f9d578060011415611faa565b6001600160a01b0384163b155b1561090c57604051635274afe760e01b81526001600160a01b03851660048201526024016108fa565b6040516338bf452160e11b81526000906001600160a01b0387169063717e8a42906120089088908890889088906004016142a5565b6020604051808303816000875af1158015612027573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061204b91906142e2565b90508015612081576001600160a01b0386166000908152600560205260408120805483929061207b908490614292565b90915550505b604080516001600160a01b0388168152602081018390527f61ed099e74a97a1d7f8bb0952a88ca8b7b8ebd00c126ea04671f92a81213318a910160405180910390a195945050505050565b600060606120e460056120de8661436a565b8561242d565b909590945092505050565b60006060863b80830361211657604080516000808252602082019092529250925050612195565b60008060008761ffff166001600160401b0381111561213757612137613be5565b6040519080825280601f01601f191660200182016040528015612161576020820181803683370190505b509050600080885160208a018c8f8ff191503d925087831115612182578792505b828152826000602083013e909450925050505b9550959350505050565b6000808315806121b0575082516020115b156121c05750600090508061188c565b6000838060200190518101906121d691906142e2565b905085156121e657809150612210565b600060025488116121f9576002546121fb565b875b905080821161220a578161220c565b805b9350505b5094509492505050565b60608060008061222a868661257b565b91509150805160000361228257604080516000808252602082019092528391612276565b60408051808201909152600081526060602082015281526020019060019003908161224e5790505b50935093505050611da1565b604080516001808252818301909252600091816020015b6040805180820190915260008152606060208201528152602001906001900390816122995790505090506040518060400160405280600260ff16815260200183815250816000815181106122ef576122ef613b69565b60209081029190910101529196919550909350505050565b6000806123148585610c7a565b905060008351600014612345578360008151811061233457612334613b69565b602002602001015160200151612356565b604051806020016040528060008152505b90506000806123648361273a565b9150915061237584888a85856129a0565b98975050505050505050565b60006060853b8083036123a85760408051600080825260208201909252925092505061188c565b60008060008761ffff166001600160401b038111156123c9576123c9613be5565b6040519080825280601f01601f1916602001820160405280156123f3576020820181803683370190505b509050600080885160208a018d8dfa91503d925087831115612413578792505b828152826000602083013e90999098509650505050505050565b60006060600061243c85612b38565b9050600061244986612bc5565b80516020820120606088015160408901519293509091600061246b8284610c7a565b90506000895160001461249c578960008151811061248b5761248b613b69565b6020026020010151602001516124ad565b604051806020016040528060008152505b905060606124ff8d846040518060a001604052808963ffffffff1681526020018c81526020018a815260200187600001516001600160401b03168152602001886001600160a01b031681525085612be2565b604051919b5091506125179089908990602001614407565b60405160208183030381529060405298507f07ea52d82345d6e838192107d8fd7123d9c2ec8e916cd0aad13fd2b60db2464483608001518460a001518360405161256393929190614436565b60405180910390a15050505050505050935093915050565b60608060028310156125a35760405163196499c760e21b8152600060048201526024016108fa565b60006125b26002828688614494565b6125bb916144be565b60f01c905060026002198201612723578060005b868310156126c85760006125e860018501858a8c614494565b6125f1916144ee565b60f81c9050600081900361261b57604051636780cfaf60e01b8152600060048201526024016108fa565b8160ff1660000361262e5780915061266b565b8160ff168160ff161461266b5736600061264a86868c8e614494565b9150915061265b8989868585612e80565b9099509750859450919250829150505b600184019360009061268290600301868b8d614494565b61268b916144be565b60f01c905060008190036126b55760405163196499c760e21b8152600481018690526024016108fa565b8060020161ffff168501945050506125cf565b8287146126eb5760405163196499c760e21b8152600481018490526024016108fa565b600287111561271c5736600061270385858b8d614494565b915091506127148888858585612e80565b909850965050505b5050612731565b61272e828787612fa0565b93505b50509250929050565b606080825160000361274b57915091565b60006127568461312b565b90508060ff166001036128085760408051600180825281830190925290816020015b606081526020019060019003908161277857905050925083836000815181106127a3576127a3613b69565b6020908102919091010152604080516001808252818301909252908160200160208202803683370190505091506127db846003613205565b826000815181106127ee576127ee613b69565b602002602001019060ff16908160ff168152505050915091565b8060ff166001600160401b0381111561282357612823613be5565b60405190808252806020026020018201604052801561284c578160200160208202803683370190505b5091508060ff166001600160401b0381111561286a5761286a613be5565b60405190808252806020026020018201604052801561289d57816020015b60608152602001906001900390816128885790505b50925060008060ff5b86518310156129335760019092019160006128c18885613261565b60029490940193905060006128d68986613205565b90508260ff1660ff036128eb57809250612924565b8260ff168160ff16146129245760021984860301600061290c8b87846132be565b905061291a8a8a87846133cb565b5093909301929150815b5061ffff1692909201916128a6565b81830360006129438985846132be565b9050612951888885846133cb565b60005b8660ff168160ff16101561299457878160ff168151811061297757612977613b69565b6020908102919091010180516000190160ff169052600101612954565b50505050505050915091565b600080866040015187602001516129b7919061451c565b905060005b8160ff168160ff161015612b2d576000886020015160ff168260ff1610612a115760a089015160208a01516129f19084614249565b60ff1681518110612a0457612a04613b69565b6020026020010151612a33565b88608001518260ff1681518110612a2a57612a2a613b69565b60200260200101515b60408051602081019091526000808252919250905b8651811015612aa0578360ff16878281518110612a6757612a67613b69565b602002602001015160ff1603612a9857878181518110612a8957612a89613b69565b60200260200101519150612aa0565b600101612a48565b508951604051630c2eceab60e21b81526001600160a01b038416916330bb3aac91612ad3918d918d908790600401614535565b602060405180830381865afa158015612af0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b1491906142e2565b612b1e9086614292565b945050508060010190506129bc565b505095945050505050565b805160208083015160408085015160608087015160808801519351600160f81b9681019690965260c09690961b6001600160c01b031916602186015260e093841b6001600160e01b031990811660298701526001600160a01b03909216602d8601529490921b909116604d83015260518201526071015b6040516020818303038152906040529050919050565b60608160a001518260c00151604051602001612baf929190614574565b60006060600080612bf28561273a565b91509150600087604001518860200151612c0c919061451c565b90508060ff166001600160401b03811115612c2957612c29613be5565b604051908082528060200260200182016040528015612c52578160200160208202803683370190505b50935060005b8160ff168160ff161015610c6d576000896020015160ff168260ff1610612cad5760a08a015160208b0151612c8d9084614249565b60ff1681518110612ca057612ca0613b69565b6020026020010151612ccf565b89608001518260ff1681518110612cc657612cc6613b69565b60200260200101515b60408051602081019091526000808252919250905b8551811015612d3c578360ff16868281518110612d0357612d03613b69565b602002602001015160ff1603612d3457868181518110612d2557612d25613b69565b60200260200101519150612d3c565b600101612ce4565b506040516395d376d760e01b81526001600160a01b038316906395d376d790612d6b908d90859060040161459a565b6020604051808303816000875af1158015612d8a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dae91906142e2565b878460ff1681518110612dc357612dc3613b69565b6020026020010181815250506000878460ff1681518110612de657612de6613b69565b60200260200101511115612e7657868360ff1681518110612e0957612e09613b69565b60200260200101518c6000846001600160a01b03166001600160a01b031681526020019081526020016000206000828254612e449190614292565b92505081905550868360ff1681518110612e6057612e60613b69565b602002602001015188612e739190614292565b97505b5050600101612c58565b60608060001960ff861601612efd57865115612ebf57868484604051602001612eab9392919061460c565b604051602081830303815290604052612ef6565b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050505b9650612f95565b60011960ff861601612f7757855115612f3957858484604051602001612f259392919061460c565b604051602081830303815290604052612f70565b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050505b9550612f95565b604051636780cfaf60e01b815260ff861660048201526024016108fa565b509495939450505050565b606060001961ffff8516016130405760228214612fd0576040516301b8ca5560e31b815260040160405180910390fd5b6000612ff1612fe3602260028688614494565b612fec91614634565b6134e1565b604051600160f81b60208201819052601160f01b602183015260238201526001600160801b0319608083901b166024820152909150603401604051602081830303815290604052915050611030565b60011961ffff85160161310c5760428211158061305d5750606282115b1561307b576040516360493e2b60e11b815260040160405180910390fd5b600061308e612fe3602260028688614494565b905060006130a3612fe3604260228789614494565b9050600060411985016130b9866042818a614494565b6130c291614634565b60405160086020938403029190911c92506130f3916001916011918391889183916031916002918b918b9101614652565b6040516020818303038152906040529350505050611030565b604051630417051360e41b815261ffff851660048201526024016108fa565b600080805b83518210156131da57600190910190600061314b8584613261565b905060028301925060028161ffff16101561317c5760405163013adb8360e21b8152600481018490526024016108fa565b60006131888685613205565b90508060ff1660ff036131ae576040516334f4f66f60e21b815260040160405180910390fd5b600160ff82161b83166131cb5760019485019460ff82161b831792505b5061ffff169190910190613130565b835182146131fe5760405163013adb8360e21b8152600481018390526024016108fa565b5050919050565b6000613212826001614292565b835110156132585760405162461bcd60e51b8152602060048201526013602482015272746f55696e74385f6f75744f66426f756e647360681b60448201526064016108fa565b50016001015190565b600061326e826002614292565b835110156132b55760405162461bcd60e51b8152602060048201526014602482015273746f55696e7431365f6f75744f66426f756e647360601b60448201526064016108fa565b50016002015190565b6060816132cc81601f614292565b101561330b5760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b60448201526064016108fa565b6133158284614292565b845110156133595760405162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b60448201526064016108fa565b60608215801561337857604051915060008252602082016040526133c2565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156133b1578051835260209283019201613399565b5050858452601f01601f1916604052505b50949350505050565b8160ff1660ff036133ef576040516334f4f66f60e21b815260040160405180910390fd5b60006133fc83600161451c565b905060005b84518110156117b957600085828151811061341e5761341e613b69565b602002602001015190508060ff168360ff16036134935786828151811061344757613447613b69565b602002602001015184604051602001613461929190614407565b60405160208183030381529060405287838151811061348257613482613b69565b6020026020010181905250506117b9565b8060ff166000036134d857828683815181106134b1576134b1613b69565b602002602001019060ff16908160ff16815250508387838151811061348257613482613b69565b50600101613401565b60006fffffffffffffffffffffffffffffffff82111561351e576040516306dfcc6560e41b815260806004820152602481018390526044016108fa565b5090565b6040518060c0016040528060006001600160401b03168152602001600060ff168152602001600060ff168152602001600060ff16815260200160608152602001606081525090565b8280548282559060005260206000209081019282156135bf579160200282015b828111156135bf57825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019061358a565b5061351e9291505b8082111561351e57600081556001016135c7565b6000602082840312156135ed57600080fd5b81356001600160e01b03198116811461103057600080fd5b6001600160a01b038116811461126657600080fd5b803561362581613605565b919050565b63ffffffff8116811461126657600080fd5b80356136258161362a565b6000806040838503121561365a57600080fd5b823561366581613605565b915060208301356136758161362a565b809150509250929050565b815163ffffffff1681526020808301516001600160a01b03169082015260408101610584565b60208101600383106136c857634e487b7160e01b600052602160045260246000fd5b91905290565b6000806000606084860312156136e357600080fd5b83356136ee81613605565b925060208401356136fe81613605565b929592945050506040919091013590565b60008083601f84011261372157600080fd5b5081356001600160401b0381111561373857600080fd5b6020830191508360208260051b8501011115611da157600080fd5b60008060006040848603121561376857600080fd5b833561377381613605565b925060208401356001600160401b0381111561378e57600080fd5b61379a8682870161370f565b9497909650939450505050565b600080602083850312156137ba57600080fd5b82356001600160401b038111156137d057600080fd5b6137dc8582860161370f565b90969095509350505050565b60008151808452602080850194506020840160005b838110156138225781516001600160a01b0316875295820195908201906001016137fd565b509495945050505050565b6001600160401b03815116825260ff602082015116602083015260ff604082015116604083015260ff60608201511660608301526000608082015160c0608085015261387c60c08501826137e8565b905060a083015184820360a086015261389582826137e8565b95945050505050565b602081526000611030602083018461382d565b8035801515811461362557600080fd5b600080600080606085870312156138d757600080fd5b84356001600160401b03808211156138ee57600080fd5b9086019060e0828903121561390257600080fd5b9094506020860135908082111561391857600080fd5b818701915087601f83011261392c57600080fd5b81358181111561393b57600080fd5b88602082850101111561394d57600080fd5b602083019550809450505050613965604086016138b1565b905092959194509250565b60005b8381101561398b578181015183820152602001613973565b50506000910152565b600081518084526139ac816020860160208601613970565b601f01601f19169290920160200192915050565b825181526020808401519082015260606040820152600061124d6060830184613994565b6000602082840312156139f657600080fd5b81356110308161362a565b600080600060608486031215613a1657600080fd5b8335613a218161362a565b92506020840135613a3181613605565b91506040840135613a418161362a565b809150509250925092565b6020815260006110306020830184613994565b60008060208385031215613a7257600080fd5b82356001600160401b0380821115613a8957600080fd5b818501915085601f830112613a9d57600080fd5b813581811115613aac57600080fd5b866020606083028501011115613ac157600080fd5b60209290920196919550909350505050565b600060208284031215613ae557600080fd5b5035919050565b815181526020808301519082015260408101610584565b600060208284031215613b1557600080fd5b813561103081613605565b60008060408385031215613b3357600080fd5b8235613b3e81613605565b946020939093013593505050565b600060208284031215613b5e57600080fd5b815161103081613605565b634e487b7160e01b600052603260045260246000fd5b60008235605e19833603018112613b9557600080fd5b9190910192915050565b6000808335601e19843603018112613bb657600080fd5b8301803591506001600160401b03821115613bd057600080fd5b602001915036819003821315611da157600080fd5b634e487b7160e01b600052604160045260246000fd5b60405160c081016001600160401b0381118282101715613c1d57613c1d613be5565b60405290565b60405160e081016001600160401b0381118282101715613c1d57613c1d613be5565b604051601f8201601f191681016001600160401b0381118282101715613c6d57613c6d613be5565b604052919050565b600060408284031215613c8757600080fd5b604051604081018181106001600160401b0382111715613ca957613ca9613be5565b6040528235613cb78161362a565b81526020830135613cc781613605565b60208201529392505050565b80356001600160401b038116811461362557600080fd5b803560ff8116811461362557600080fd5b600082601f830112613d0c57600080fd5b813560206001600160401b03821115613d2757613d27613be5565b8160051b613d36828201613c45565b9283528481018201928281019087851115613d5057600080fd5b83870192505b84831015613d78578235613d6981613605565b82529183019190830190613d56565b979650505050505050565b600060c08284031215613d9557600080fd5b613d9d613bfb565b9050613da882613cd3565b8152613db660208301613cea565b6020820152613dc760408301613cea565b6040820152613dd860608301613cea565b606082015260808201356001600160401b0380821115613df757600080fd5b613e0385838601613cfb565b608084015260a0840135915080821115613e1c57600080fd5b50613e2984828501613cfb565b60a08301525092915050565b600060208284031215613e4757600080fd5b81356001600160401b03811115613e5d57600080fd5b61124d84828501613d83565b60008235603e19833603018112613b9557600080fd5b6000823560be19833603018112613b9557600080fd5b600060208284031215613ea757600080fd5b61103082613cea565b600060208284031215613ec257600080fd5b61103082613cd3565b60006105843683613d83565b6000808335601e19843603018112613eee57600080fd5b83016020810192503590506001600160401b03811115613f0d57600080fd5b8060051b3603821315611da157600080fd5b8183526000602080850194508260005b85811015613822578135613f4281613605565b6001600160a01b031687529582019590820190600101613f2f565b60208082528181018390526000906040808401600586901b8501820187855b8881101561409457603f19808985030185528235603e198c3603018112613fa257600080fd5b8b018035613faf8161362a565b63ffffffff168552808801353682900360be19018112613fce57600080fd5b858901889052016001600160401b03613fe682613cd3565b1687860152613ff6888201613cea565b606060ff8083168289015261400c8a8501613cea565b92506080818416818a0152614022838601613cea565b935060a09250818416838a015261403b81860186613ed7565b60c08b81015294509150614056905061010089018483613f1f565b92505061406581840184613ed7565b93509050838783030160e088015261407e828483613f1f565b978a019796505050928701925050600101613f7c565b509098975050505050505050565b6040815260006140b56040830186613994565b8281036020840152838152838560208301376000602085830101526020601f19601f860116820101915050949350505050565b81356140f38161362a565b63ffffffff8116905081548163ffffffff198216178355602084013561411881613605565b6001600160c01b03199190911690911760209190911b640100000000600160c01b031617905550565b6020808252818101839052600090604080840186845b878110156141b457813561416a8161362a565b63ffffffff908116845282860135906141828261362a565b16838601528184013561419481613605565b6001600160a01b0316838501526060928301929190910190600101614157565b5090979650505050505050565b6001600160a01b038416815263ffffffff831660208201526080810161124d6040830184805163ffffffff1682526020908101516001600160a01b0316910152565b6001600160a01b038416815263ffffffff831660208201526060604082018190526000906138959083018461382d565b634e487b7160e01b600052601160045260246000fd5b60ff828116828216039081111561058457610584614233565b600060ff83168061428357634e487b7160e01b600052601260045260246000fd5b8060ff84160491505092915050565b8082018082111561058457610584614233565b63ffffffff8516815260018060a01b03841660208201528260408201526080606082015260006142d86080830184613994565b9695505050505050565b6000602082840312156142f457600080fd5b5051919050565b600082601f83011261430c57600080fd5b81356001600160401b0381111561432557614325613be5565b614338601f8201601f1916602001613c45565b81815284602083860101111561434d57600080fd5b816020850160208301376000918101602001919091529392505050565b600060e0823603121561437c57600080fd5b614384613c23565b61438d83613cd3565b815261439b6020840161363c565b60208201526143ac6040840161361a565b60408201526143bd6060840161363c565b60608201526080830135608082015260a083013560a082015260c08301356001600160401b038111156143ef57600080fd5b6143fb368286016142fb565b60c08301525092915050565b60008351614419818460208801613970565b83519083019061442d818360208801613970565b01949350505050565b60608152600061444960608301866137e8565b6020838203602085015261445d82876137e8565b84810360408601528551808252602080880194509091019060005b8181101561409457845183529383019391830191600101614478565b600080858511156144a457600080fd5b838611156144b157600080fd5b5050820193919092039150565b6001600160f01b031981358181169160028510156144e65780818660020360031b1b83161692505b505092915050565b6001600160f81b031981358181169160018510156144e65760019490940360031b84901b1690921692915050565b60ff818116838216019081111561058457610584614233565b63ffffffff851681526001600160401b03841660208201526001600160a01b03831660408201526080606082018190526000906142d890830184613994565b8281526000825161458c816020850160208701613970565b919091016020019392505050565b6040815263ffffffff83511660408201526000602084015160a060608401526145c660e0840182613994565b604086015160808581019190915260608701516001600160401b031660a08601528601516001600160a01b031660c0850152838103602085015290506138958185613994565b6000845161461e818460208901613970565b8201838582376000930192835250909392505050565b8035602083101561058457600019602084900360031b1b1692915050565b60f88a811b6001600160f81b0319908116835260f08b811b6001600160f01b031990811660018601528b841b8316600386015260808b901b6001600160801b031916600486015289841b831660148601529088901b1660158401529085901b16601782015260006146d2601883018560801b6001600160801b0319169052565b5060288101919091526048019897505050505050505056fea2646970667358221220d9784bfc6a1a26f66ca9108192fade74e4e3799cd23fe6424871d62320841a2464736f6c6343000816003360c06040523480156200001157600080fd5b50604051620024413803806200244183398101604081905262000034916200013e565b8080816001600160a01b031663416ecebf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000075573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200009b919062000170565b3380620000c257604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b620000cd81620000ee565b506001600160a01b0390911660805263ffffffff1660a05250620001989050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156200015157600080fd5b81516001600160a01b03811681146200016957600080fd5b9392505050565b6000602082840312156200018357600080fd5b815163ffffffff811681146200016957600080fd5b60805160a05161227c620001c5600039600061031e01526000818161041b0152610484015261227c6000f3fe608060405234801561001057600080fd5b506004361061010b5760003560e01c806343ea4fa9116100a25780638da5cb5b116100715780638da5cb5b146102665780639c33abf714610281578063c40ff835146102a1578063e084d952146102b4578063f2fde38b146102c757600080fd5b806343ea4fa91461021857806354fd4d501461022b5780636750cd4c1461024b578063715018a61461025e57600080fd5b806320efd722116100de57806320efd7221461016f57806329460b0b1461018257806339e3f938146101955780633c782a52146101b557600080fd5b806301ffc9a7146101105780630223536e146101385780630894edf11461014d5780631881d94d14610160575b600080fd5b61012361011e3660046116ed565b6102da565b60405190151581526020015b60405180910390f35b61014b61014636600461177b565b610305565b005b61014b61015b3660046117d7565b610317565b600160405161012f9190611822565b61014b61017d3660046118a5565b610482565b61014b6101903660046118f7565b6105a4565b6101a86101a336600461194c565b61073c565b60405161012f9190611a35565b6101f96101c3366004611a48565b600260209081526000938452604080852082529284528284209052825290205460ff81169061010090046001600160401b031682565b6040805192151583526001600160401b0390911660208301520161012f565b6101a861022636600461194c565b610877565b60408051600381526000602082015260029181019190915260600161012f565b610123610259366004611a7d565b610b83565b61014b610b8e565b6000546040516001600160a01b03909116815260200161012f565b61029461028f366004611a98565b610ba2565b60405161012f9190611ad2565b61014b6102af366004611b21565b610c0b565b6101236102c2366004611d10565b610c1b565b61014b6102d5366004611d5d565b610c30565b60006001600160e01b03198216630ab7be9f60e01b14806102ff57506102ff82610c6e565b92915050565b61031184848484610ca3565b50505050565b61034283837f0000000000000000000000000000000000000000000000000000000000000000610d89565b600061034e8484610e0c565b9050600061035c8585610e1e565b9050600061036a8383610877565b905061038e818787604051610380929190611d78565b604051809103902086610e41565b600060405180606001604052808463ffffffff1681526020016103b18989610f91565b81526020016103c08989610faa565b6001600160401b039081169091526040805163a825d74760e01b8152835163ffffffff166004820152602084015160248201529083015190911660448201526001600160a01b038681166064830152608482018890529192507f00000000000000000000000000000000000000000000000000000000000000009091169063a825d7479060a401600060405180830381600087803b15801561046157600080fd5b505af1158015610475573d6000803e3d6000fd5b5050505050505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633146104cb5760405163467409c360e01b815260040160405180910390fd5b60005b8181101561031157368383838181106104e9576104e9611d88565b90506020028101906104fb9190611d9e565b905061051261050d6020830183611a7d565b610fcd565b60026105246040830160208401611a7d565b63ffffffff16036105645761055f61053f6020830183611a7d565b8661054d6040850185611dbe565b81019061055a9190611e04565b610ffb565b61059b565b6105746040820160208301611a7d565b604051635d4be0fd60e11b815263ffffffff90911660048201526024015b60405180910390fd5b506001016104ce565b6105ac611051565b60005b818110156106fe57368383838181106105ca576105ca611d88565b90506020028101906105dc9190611e38565b905060ff6105ed6020830183611e4e565b6105fe906040810190602001611e64565b60ff160361061f576040516341d50bed60e11b815260040160405180910390fd5b60ff61062e6020830183611e4e565b61063f906060810190604001611e64565b60ff16036106605760405163211089b360e11b815260040160405180910390fd5b6001600160401b036106756020830183611e4e565b610683906020810190611e7f565b6001600160401b0316036106aa5760405163281b33d760e11b815260040160405180910390fd5b6106c86106ba6020830183611e4e565b6106c390611e9a565b61107e565b6106f560006106da6020840184611a7d565b6106e76020850185611e4e565b6106f090611e9a565b6110b6565b506001016105af565b507faaf3aaa0c11056e86ac56eb653e25b005ca1a7d4dcd21ba24647f7ab63f3b5608282604051610730929190611f2a565b60405180910390a15050565b61074461162b565b6001600160a01b038316600090815260016020818152604080842063ffffffff87168552825292839020835160c08101855281546001600160401b038116825260ff600160401b8204811683860152600160481b8204811683880152600160501b909104166060820152928101805485518185028101850190965280865293949193608086019383018282801561080457602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116107e6575b505050505081526020016002820180548060200260200160405190810160405280929190818152602001828054801561086657602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610848575b505050505081525050905092915050565b61087f61162b565b63ffffffff821660008181527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49602090815260408083206001600160a01b03881684526001835281842094845293909152902080546001600160401b0316806108f45782546001600160401b03168452610911565b6001600160401b0381811614610911576001600160401b03811684525b8154600160401b900460ff166109ab578254600160401b900460ff16156109a6578260010180548060200260200160405190810160405280929190818152602001828054801561098a57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161096c575b505050505060808501528254600160401b900460ff1660208501525b610a32565b8154600160401b900460ff90811614610a325781600101805480602002602001604051908101604052809291908181526020018280548015610a1657602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116109f8575b505050505060808501528154600160401b900460ff1660208501525b8154600160481b900460ff16610adb578254600160481b900460ff1615610ad65782600201805480602002602001604051908101604052809291908181526020018280548015610aab57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610a8d575b505050505060a0850152825460ff600160481b820481166040870152600160501b9091041660608501525b610b71565b8154600160481b900460ff90811614610b715781600201805480602002602001604051908101604052809291908181526020018280548015610b4657602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610b28575b505050505060a0850152815460ff600160481b820481166040870152600160501b9091041660608501525b610b7a8461107e565b50505092915050565b60006102ff8261134f565b610b96611051565b610ba060006113aa565b565b606060011963ffffffff831601610be357610bbd8385610877565b604051602001610bcd9190611a35565b6040516020818303038152906040529050610c04565b604051635d4be0fd60e11b815263ffffffff83166004820152602401610592565b9392505050565b610c16838383610d89565b505050565b6000610c288484846113fa565b949350505050565b610c38611051565b6001600160a01b038116610c6257604051631e4fbdf760e01b815260006004820152602401610592565b610c6b816113aa565b50565b60006001600160e01b031982166325fc096160e21b14806102ff57506301ffc9a760e01b6001600160e01b03198316146102ff565b604080518082018252600181526001600160401b03831660208201529051600290600090610cd49088908890611d78565b604080519182900390912082526020808301939093529081016000908120868252835281812033808352908452908290208451815495909401516001600160401b03166101000268ffffffffffffffff00199415159490941668ffffffffffffffffff19909516949094179290921790925590517f2cb0eed7538baeae4c6fde038c0fd0384d27de0dd55a228c65847bda6aa1ab5691610d7b91879087908690889061206c565b60405180910390a150505050565b60518214610daa5760405163c9bf37b760e01b815260040160405180910390fd5b6001610db68484611503565b60ff1614610dd757604051633a9ae7b960e01b815260040160405180910390fd5b8063ffffffff16610de88484611525565b63ffffffff1614610c165760405163216964bf60e11b815260040160405180910390fd5b6000610c04610e1b8484611535565b90565b6000610e2e600d600984866120c6565b610e37916120f0565b60e01c9392505050565b610e4c8383836113fa565b610e695760405163130c463560e21b815260040160405180910390fd5b602083015160ff1615610efe5760005b836020015160ff168160ff161015610efc57600083815260026020908152604080832085845290915281206080860151805191929160ff8516908110610ec157610ec1611d88565b6020908102919091018101516001600160a01b03168252810191909152604001600020805468ffffffffffffffffff19169055600101610e79565b505b604083015160ff1615610c165760005b836040015160ff168160ff161015610311576000838152600260209081526040808320858452909152812060a0860151805191929160ff8516908110610f5657610f56611d88565b6020908102919091018101516001600160a01b03168252810191909152604001600020805468ffffffffffffffffff19169055600101610f0e565b6000610fa1602d600d84866120c6565b610c0491612120565b6000610fba6009600184866120c6565b610fc39161213e565b60c01c9392505050565b610fd68161134f565b610c6b57604051633c30434160e21b815263ffffffff82166004820152602401610592565b6110068284836110b6565b6110108284610877565b507f82118522aa536ac0e96cc5c689407ae42b89d592aa133890a01f1509842f50818284836040516110449392919061216c565b60405180910390a1505050565b6000546001600160a01b03163314610ba05760405163118cdaa760e01b8152336004820152602401610592565b602081015160ff161580156110985750606081015160ff16155b15610c6b5760405163ce2c375160e01b815260040160405180910390fd5b602081015160ff90811614806110d15750602081015160ff16155b156110ff57608081015151156110fa576040516341d50bed60e11b815260040160405180910390fd5b611165565b806020015160ff1681608001515114158061113a57506002611123600160ff6121b2565b61112d91906121cb565b60ff16816020015160ff16115b15611158576040516341d50bed60e11b815260040160405180910390fd5b6111658160800151611545565b604081015160ff90811614806111805750604081015160ff16155b156111d45760a081015151156111a95760405163211089b360e11b815260040160405180910390fd5b606081015160ff16156111cf576040516338682fa960e01b815260040160405180910390fd5b611279565b806040015160ff168160a001515114158061120f575060026111f8600160ff6121b2565b61120291906121cb565b60ff16816040015160ff16115b1561122d5760405163211089b360e11b815260040160405180910390fd5b606081015160ff16158061124e5750806040015160ff16816060015160ff16115b1561126c576040516338682fa960e01b815260040160405180910390fd5b6112798160a00151611545565b6001600160a01b038316600090815260016020818152604080842063ffffffff8716855282529283902084518154868401519587015160608801516001600160401b0390931668ffffffffffffffffff1990921691909117600160401b60ff97881602176affff0000000000000000001916600160481b9187169190910260ff60501b191617600160501b95909116949094029390931783556080840151805185949361132b93908501920190611673565b5060a08201518051611347916002840191602090910190611673565b505050505050565b63ffffffff811660009081527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49602052604081208054600160401b900460ff16151580610c04575054600160501b900460ff16151592915050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b602083015160009060ff161561147d5760005b846020015160ff168160ff1610156114655761144f85608001518260ff168151811061143b5761143b611d88565b6020026020010151858588600001516115ac565b61145d576000915050610c04565b60010161140d565b50836040015160ff1660000361147d57506001610c04565b606084015160005b856040015160ff168160ff1610156114f7576114c78660a001518260ff16815181106114b3576114b3611d88565b6020026020010151868689600001516115ac565b156114ef57816114d6816121fb565b9250508160ff166000036114ef57600192505050610c04565b600101611485565b50600095945050505050565b600061151260018284866120c6565b61151b91612218565b60f81c9392505050565b6000610e2e6031602d84866120c6565b6000610fa16051603184866120c6565b6000805b8251811015610c1657600083828151811061156657611566611d88565b60200260200101519050826001600160a01b0316816001600160a01b0316116115a25760405163447516e160e01b815260040160405180910390fd5b9150600101611549565b600083815260026020908152604080832085845282528083206001600160a01b0388168452825280832081518083019092525460ff81161580158084526101009092046001600160401b03169383019390935290916116215750826001600160401b031681602001516001600160401b031610155b9695505050505050565b6040518060c0016040528060006001600160401b03168152602001600060ff168152602001600060ff168152602001600060ff16815260200160608152602001606081525090565b8280548282559060005260206000209081019282156116c8579160200282015b828111156116c857825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190611693565b506116d49291506116d8565b5090565b5b808211156116d457600081556001016116d9565b6000602082840312156116ff57600080fd5b81356001600160e01b031981168114610c0457600080fd5b60008083601f84011261172957600080fd5b5081356001600160401b0381111561174057600080fd5b60208301915083602082850101111561175857600080fd5b9250929050565b80356001600160401b038116811461177657600080fd5b919050565b6000806000806060858703121561179157600080fd5b84356001600160401b038111156117a757600080fd5b6117b387828801611717565b909550935050602085013591506117cc6040860161175f565b905092959194509250565b6000806000604084860312156117ec57600080fd5b83356001600160401b0381111561180257600080fd5b61180e86828701611717565b909790965060209590950135949350505050565b602081016003831061184457634e487b7160e01b600052602160045260246000fd5b91905290565b80356001600160a01b038116811461177657600080fd5b60008083601f84011261187357600080fd5b5081356001600160401b0381111561188a57600080fd5b6020830191508360208260051b850101111561175857600080fd5b6000806000604084860312156118ba57600080fd5b6118c38461184a565b925060208401356001600160401b038111156118de57600080fd5b6118ea86828701611861565b9497909650939450505050565b6000806020838503121561190a57600080fd5b82356001600160401b0381111561192057600080fd5b61192c85828601611861565b90969095509350505050565b803563ffffffff8116811461177657600080fd5b6000806040838503121561195f57600080fd5b6119688361184a565b915061197660208401611938565b90509250929050565b60008151808452602080850194506020840160005b838110156119b95781516001600160a01b031687529582019590820190600101611994565b509495945050505050565b6001600160401b03815116825260ff602082015116602083015260ff604082015116604083015260ff60608201511660608301526000608082015160c06080850152611a1360c085018261197f565b905060a083015184820360a0860152611a2c828261197f565b95945050505050565b602081526000610c0460208301846119c4565b600080600060608486031215611a5d57600080fd5b8335925060208401359150611a746040850161184a565b90509250925092565b600060208284031215611a8f57600080fd5b610c0482611938565b600080600060608486031215611aad57600080fd5b611ab684611938565b9250611ac46020850161184a565b9150611a7460408501611938565b60006020808352835180602085015260005b81811015611b0057858101830151858201604001528201611ae4565b506000604082860101526040601f19601f8301168501019250505092915050565b600080600060408486031215611b3657600080fd5b83356001600160401b03811115611b4c57600080fd5b611b5886828701611717565b9094509250611a74905060208501611938565b634e487b7160e01b600052604160045260246000fd5b60405160c081016001600160401b0381118282101715611ba357611ba3611b6b565b60405290565b803560ff8116811461177657600080fd5b600082601f830112611bcb57600080fd5b813560206001600160401b0380831115611be757611be7611b6b565b8260051b604051601f19603f83011681018181108482111715611c0c57611c0c611b6b565b6040529384526020818701810194908101925087851115611c2c57600080fd5b6020870191505b84821015611c5357611c448261184a565b83529183019190830190611c33565b979650505050505050565b600060c08284031215611c7057600080fd5b611c78611b81565b9050611c838261175f565b8152611c9160208301611ba9565b6020820152611ca260408301611ba9565b6040820152611cb360608301611ba9565b606082015260808201356001600160401b0380821115611cd257600080fd5b611cde85838601611bba565b608084015260a0840135915080821115611cf757600080fd5b50611d0484828501611bba565b60a08301525092915050565b600080600060608486031215611d2557600080fd5b83356001600160401b03811115611d3b57600080fd5b611d4786828701611c5e565b9660208601359650604090950135949350505050565b600060208284031215611d6f57600080fd5b610c048261184a565b8183823760009101908152919050565b634e487b7160e01b600052603260045260246000fd5b60008235605e19833603018112611db457600080fd5b9190910192915050565b6000808335601e19843603018112611dd557600080fd5b8301803591506001600160401b03821115611def57600080fd5b60200191503681900382131561175857600080fd5b600060208284031215611e1657600080fd5b81356001600160401b03811115611e2c57600080fd5b610c2884828501611c5e565b60008235603e19833603018112611db457600080fd5b6000823560be19833603018112611db457600080fd5b600060208284031215611e7657600080fd5b610c0482611ba9565b600060208284031215611e9157600080fd5b610c048261175f565b60006102ff3683611c5e565b6000808335601e19843603018112611ebd57600080fd5b83016020810192503590506001600160401b03811115611edc57600080fd5b8060051b360382131561175857600080fd5b8183526000602080850194508260005b858110156119b9576001600160a01b03611f178361184a565b1687529582019590820190600101611efe565b60208082528181018390526000906040808401600586901b8501820187855b8881101561205e57603f19808985030185528235603e198c3603018112611f6f57600080fd5b8b0163ffffffff611f7f82611938565b1685528781013560be19823603018112611f9857600080fd5b858901889052016001600160401b03611fb08261175f565b1687860152611fc0888201611ba9565b606060ff80831682890152611fd68a8501611ba9565b92506080818416818a0152611fec838601611ba9565b935060a09250818416838a015261200581860186611ea6565b60c08b81015294509150612020905061010089018483611eee565b92505061202f81840184611ea6565b93509050838783030160e0880152612048828483611eee565b978a019796505050928701925050600101611f49565b509098975050505050505050565b6001600160a01b03861681526080602082018190528101849052838560a0830137600060a08583010152600060a0601f19601f87011683010190506001600160401b03841660408301528260608301529695505050505050565b600080858511156120d657600080fd5b838611156120e357600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156121185780818660040360031b1b83161692505b505092915050565b803560208310156102ff57600019602084900360031b1b1692915050565b6001600160c01b031981358181169160088510156121185760089490940360031b84901b1690921692915050565b6001600160a01b038416815263ffffffff83166020820152606060408201819052600090611a2c908301846119c4565b634e487b7160e01b600052601160045260246000fd5b60ff82811682821603908111156102ff576102ff61219c565b600060ff8316806121ec57634e487b7160e01b600052601260045260246000fd5b8060ff84160491505092915050565b600060ff82168061220e5761220e61219c565b6000190192915050565b6001600160f81b031981358181169160018510156121185760019490940360031b84901b169092169291505056fea2646970667358221220f261181fa476bcf41c4bf04e3eda4bd6084e0edf3739fd077cfebd99f1f1561764736f6c6343000816003360e06040523480156200001157600080fd5b5060405162004c0738038062004c07833981016040819052620000349162000176565b82836001600160a01b031663416ecebf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000074573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200009a9190620001c3565b3380620000c157604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b620000cc816200010d565b506001600160a01b0391821660805263ffffffff1660a05260c092909252600655600280546001600160a01b031916939091169290921790915550620001f2565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146200017357600080fd5b50565b600080600080608085870312156200018d57600080fd5b84516200019a816200015d565b6020860151909450620001ad816200015d565b6040860151606090960151949790965092505050565b600060208284031215620001d657600080fd5b815163ffffffff81168114620001eb57600080fd5b9392505050565b60805160a05160c0516149c26200024560003960008181611b52015261262c01526000610be50152600081816106550152818161075a0152818161089801528181610d6d015261176101526149c26000f3fe6080604052600436106101855760003560e01c80637620fd01116100d1578063d15b0d491161008a578063f0f4426011610064578063f0f442601461051e578063f2fde38b1461053e578063faaebd211461055e578063fd9be5221461058b57600080fd5b8063d15b0d49146104b1578063d80e9bd9146104d1578063ea69d69d146104fe57600080fd5b80637620fd01146103b65780638da5cb5b146103f95780638eb0bf30146104175780639c33abf714610444578063ab750e7514610471578063c85f4b4e1461049157600080fd5b806320efd7221161013e57806354fd4d501161011857806354fd4d5014610334578063594924da146103615780636750cd4c14610381578063715018a6146103a157600080fd5b806320efd722146102a85780633c782a52146102c85780634389e58f1461030657600080fd5b806301ffc9a714610191578063052368ca146101c65780630e97289b146101e65780631881d94d1461021e5780631fb512251461023a578063200175f71461028657600080fd5b3661018c57005b600080fd5b34801561019d57600080fd5b506101b16101ac36600461389c565b6105ab565b60405190151581526020015b60405180910390f35b3480156101d257600080fd5b506101b16101e13660046138c6565b6105fd565b3480156101f257600080fd5b50600254610206906001600160a01b031681565b6040516001600160a01b0390911681526020016101bd565b34801561022a57600080fd5b5060026040516101bd919061391e565b34801561024657600080fd5b50610278610255366004613996565b600360209081526000938452604080852082529284528284209052825290205481565b6040519081526020016101bd565b34801561029257600080fd5b506102a66102a13660046139db565b61061e565b005b3480156102b457600080fd5b506102a66102c3366004613a67565b610758565b3480156102d457600080fd5b506102786102e3366004613abb565b600460209081526000938452604080852082529284528284209052825290205481565b34801561031257600080fd5b50610326610321366004613b35565b610880565b6040516101bd929190613c0d565b34801561034057600080fd5b5060408051600a8152600060208201526002918101919091526060016101bd565b34801561036d57600080fd5b506102a661037c366004613c31565b610b95565b34801561038d57600080fd5b506101b161039c366004613c81565b610dd6565b3480156103ad57600080fd5b506102a6610de1565b3480156103c257600080fd5b506103da6007546006546001600160a01b0390911691565b604080516001600160a01b0390931683526020830191909152016101bd565b34801561040557600080fd5b506000546001600160a01b0316610206565b34801561042357600080fd5b50610437610432366004613c9c565b610df5565b6040516101bd9190613d86565b34801561045057600080fd5b5061046461045f366004613d99565b6110ed565b6040516101bd9190613dd5565b34801561047d57600080fd5b506102a661048c366004613c31565b611156565b34801561049d57600080fd5b506102a66104ac366004613de8565b6111e1565b3480156104bd57600080fd5b506102a66104cc366004613e29565b611373565b3480156104dd57600080fd5b506104f16104ec366004613b35565b6113e8565b6040516101bd9190613e42565b34801561050a57600080fd5b50610437610519366004613c9c565b611534565b34801561052a57600080fd5b506102a6610539366004613e59565b61166b565b34801561054a57600080fd5b506102a6610559366004613e59565b6116c1565b34801561056a57600080fd5b50610278610579366004613e59565b60056020526000908152604090205481565b34801561059757600080fd5b506102a66105a6366004613e76565b6116ff565b60006001600160e01b031982166325fc096160e21b14806105dc57506001600160e01b0319821663b6e9ace360e01b145b806105f757506301ffc9a760e01b6001600160e01b03198316145b92915050565b600061061361060b8661407d565b858585611827565b90505b949350505050565b6007546001600160a01b0316331461064957604051634b41868f60e11b815260040160405180910390fd5b826001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e1758bd86040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106d59190614089565b6001600160a01b0316036106fc57604051632ddfd41160e21b815260040160405180910390fd5b610707838383611983565b604080516001600160a01b038086168252841660208201529081018290527fe081464b7278501267de69fa85b7b9560b0ae05d5fbfaab9b1986c70356e2efe906060015b60405180910390a1505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633146107a15760405163467409c360e01b815260040160405180910390fd5b60005b8181101561087a57368383838181106107bf576107bf6140a6565b90506020028101906107d191906140bc565b90506107e86107e36020830183613c81565b6119c3565b60016107fa6040830160208401613c81565b63ffffffff160361083a576108356108156020830183613c81565b8661082360408501856140dc565b8101906108309190614122565b6119f1565b610871565b61084a6040820160208301613c81565b60405163065c274160e11b815263ffffffff90911660048201526024015b60405180910390fd5b506001016107a4565b50505050565b604080518082019091526000808252602082015260607f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633146108df5760405163467409c360e01b815260040160405180910390fd5b60808601356109036108f76060890160408a01613e59565b6001600160a01b031690565b146109215760405163a4884a5960e01b815260040160405180910390fd5b60008061092f888888611a3a565b909250905060008061096161094a60608c0160408d01613e59565b61095a60808d0160608e01613c81565b858a611ac3565b9092509050610970828461416c565b925061097f60c08b018b6140dc565b60405161098d92919061417f565b6040518091039020600360008c60400160208101906109ac9190613e59565b6001600160a01b0316815260208101919091526040016000908120906109d860808e0160608f01613c81565b63ffffffff1681526020808201929092526040016000908120916109fe908e018e61418f565b6001600160401b03166001600160401b03168152602001908152602001600020819055506000610b0c6040518060e001604052808d6000016020810190610a45919061418f565b6001600160401b031681526020018d6060016020810190610a669190613c81565b63ffffffff1681526020018d6040016020810190610a849190613e59565b6001600160a01b031681526020018d6020016020810190610aa59190613c81565b63ffffffff16815260808e0135602082015260a08e01356040820152606001610ad160c08f018f6140dc565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050915250611bd1565b600254604051631f5dad8b60e31b81529192506001600160a01b03169063faed6c5890610b419084908e908e906004016141d3565b600060405180830381600087803b158015610b5b57600080fd5b505af1158015610b6f573d6000803e3d6000fd5b505060408051808201909152958652505050602083015250925090505b94509492505050565b60518314610bb65760405163864d08b360e01b815260040160405180910390fd5b6001610bc28585611c29565b60ff1614610be357604051637952a82f60e01b815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000063ffffffff16610c148585611c4b565b63ffffffff1614610c3857604051631f4b6f8b60e11b815260040160405180910390fd5b6000610c448585611c6e565b90506000610c528686611c80565b90506000610c608787611c90565b6001600160a01b038416600090815260036020908152604080832063ffffffff8716845282528083206001600160401b03851684529091529020549091508514610cbd576040516333074b7760e11b815260040160405180910390fd5b6000610cc98484610df5565b9050610cee818989604051610cdf92919061417f565b60405180910390208888611cb3565b600060405180606001604052808563ffffffff168152602001610d118b8b611e03565b81526001600160401b038581166020928301526040805163a825d74760e01b8152845163ffffffff1660048201529284015160248401528301511660448201526001600160a01b038781166064830152608482018990529192507f00000000000000000000000000000000000000000000000000000000000000009091169063a825d7479060a401600060405180830381600087803b158015610db357600080fd5b505af1158015610dc7573d6000803e3d6000fd5b50505050505050505050505050565b60006105f782611e1c565b610de9611e77565b610df36000611ea4565b565b610dfd6137e3565b63ffffffff821660008181527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49602090815260408083206001600160a01b03888116855260018452828520958552949092529091208054919290911680610e6e5782546001600160a01b0316610e70565b805b6001600160a01b031684528154600160a01b900460ff16610f15578254600160a01b900460ff1615610f105782600101805480602002602001604051908101604052809291908181526020018280548015610ef457602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610ed6575b505050505060808501528254600160a01b900460ff1660208501525b610f9c565b8154600160a01b900460ff90811614610f9c5781600101805480602002602001604051908101604052809291908181526020018280548015610f8057602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610f62575b505050505060808501528154600160a01b900460ff1660208501525b8154600160a81b900460ff16611045578254600160a81b900460ff1615611040578260020180548060200260200160405190810160405280929190818152602001828054801561101557602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610ff7575b505050505060a0850152825460ff600160a81b820481166040870152600160b01b9091041660608501525b6110db565b8154600160a81b900460ff908116146110db57816002018054806020026020016040519081016040528092919081815260200182805480156110b057602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611092575b505050505060a0850152815460ff600160a81b820481166040870152600160b01b9091041660608501525b6110e484611ef4565b50505092915050565b606060001963ffffffff83160161112e576111088385610df5565b6040516020016111189190613d86565b604051602081830303815290604052905061114f565b60405163065c274160e11b815263ffffffff83166004820152602401610868565b9392505050565b8060046000868660405161116b92919061417f565b60408051918290039091208252602080830193909352908101600090812086825283528181203380835293528190209290925590517f04708e5dfef6005d6d646eb761e3b9e412e1cc5749fc9d884bca441cc7a95258916111d3918790879087908790614203565b60405180910390a150505050565b6111e9611e77565b60005b818110156113355736838383818110611207576112076140a6565b9050602002810190611219919061423c565b905060ff61122a6020830183614252565b61123b906040810190602001614268565b60ff160361125c57604051632ad00e0160e11b815260040160405180910390fd5b60ff61126b6020830183614252565b61127c906060810190604001614268565b60ff160361129d576040516371aa1b6360e11b815260040160405180910390fd5b6112bb6112ad6020830183614252565b6112b69061407d565b611ef4565b60006112ca6020830183614252565b6112d8906020810190613e59565b6001600160a01b0316036112ff57604051633b6faad360e11b815260040160405180910390fd5b61132c60006113116020840184613c81565b61131e6020850185614252565b6113279061407d565b611f2c565b506001016111ec565b507f65edb7dc0f21ba15c998f8bd220ea9fec30757ff9fb07696c634bcce00ce6f348282604051611367929190614309565b60405180910390a15050565b61137b611e77565b6006548111156113ac5760065460405163b79d126360e01b8152610868918391600401918252602082015260400190565b60068190556040518181527f491ff913b5444f4136b0d4075f020cfe3a5f60de926ec0b091612401a22b7842906020015b60405180910390a150565b604080518082019091526000808252602082015260008061140986866121b5565b909250905060006114206060890160408a01613e59565b9050600061143460808a0160608b01613c81565b905060006114428383610df5565b90506000611472828561145c6114578f6144bc565b612374565b8e8060c0019061146c91906140dc565b8a6123ef565b825160405163c8f8dcd160e01b81529192506001600160a01b03169063c8f8dcd1906114a49087908a90600401614559565b602060405180830381865afa1580156114c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114e5919061457d565b6114ef908261416c565b90506000806115008686858d61259d565b909250905061150f828461416c565b6040805180820190915290815260208101919091529c9b505050505050505050505050565b61153c6137e3565b6001600160a01b03808416600090815260016020818152604080842063ffffffff88168552825292839020835160c0810185528154958616815260ff600160a01b8704811682850152600160a81b8704811682870152600160b01b909604909516606086015291820180548451818402810184019095528085529293608086019390928301828280156115f857602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116115da575b505050505081526020016002820180548060200260200160405190810160405280929190818152602001828054801561165a57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161163c575b505050505081525050905092915050565b611673611e77565b600780546001600160a01b0319166001600160a01b0383169081179091556040519081527f3c864541ef71378c6229510ed90f376565ee42d9c5e0904a984a9e863e6db44f906020016113dd565b6116c9611e77565b6001600160a01b0381166116f357604051631e4fbdf760e01b815260006004820152602401610868565b6116fc81611ea4565b50565b336000908152600560205260409020548082111561173a5760405163b79d126360e01b81526004810183905260248101829052604401610868565b33600090815260056020908152604080832085850390558051631c2eb17b60e31b815290517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169263e1758bd892600480820193918290030181865afa1580156117b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117d49190614089565b90506117e181858561266e565b604080513381526001600160a01b03861660208201529081018490527f820b7fd51bf79c54350bab98400651b3314ff6e79b33528821871d94a6669883906060016111d3565b602084015160009060ff16156118d35760005b856020015160ff168160ff1610156118bb576118a586608001518260ff1681518110611868576118686140a6565b602002602001015186868660009283526004602090815260408085209385529281528284206001600160a01b039095168452939093529020541490565b6118b3576000915050610616565b60010161183a565b50846040015160ff166000036118d357506001610616565b606085015160005b866040015160ff168160ff161015611976576119468760a001518260ff1681518110611909576119096140a6565b602002602001015187878760009283526004602090815260408085209385529281528284206001600160a01b039095168452939093529020541490565b1561196e578161195581614596565b9250508160ff1660000361196e57600192505050610616565b6001016118db565b5060009695505050505050565b6001600160a01b0382166119aa576040516306b7a93160e41b815260040160405180910390fd5b6119be6001600160a01b0384168383612691565b505050565b6119cc81611e1c565b6116fc576040516303fc0f9560e21b815263ffffffff82166004820152602401610868565b6119fc828483611f2c565b611a068284610df5565b507fe8e2a5b92fc69ac50188ea142042492be8e8c34febb10b2cd02983684336e14282848360405161074b939291906145b3565b60606000806000611a4b86866121b5565b90925090506000611a75611a6560608a0160408b01613e59565b61043260808b0160608c01613c81565b8051909150611a9490611a8e60608b0160408c01613e59565b856126e3565b9350600080611aa4838b866127d6565b9092509050611ab3828761416c565b909a909950975050505050505050565b60075460009081906001600160a01b031615610b8c576040516001600160a01b038716602482015263ffffffff8616604482015260648101859052831515608482015260009060a40160408051601f19818403018152919052602080820180516001600160e01b0316636a8e2a4360e11b1790526007549192506000918291611b7a916001600160a01b0316907f00000000000000000000000000000000000000000000000000000000000000009084908761289e565b91509150611b8a8787848461294e565b90955093508415611bc5576007546001600160a01b031660009081526005602052604081208054879290611bbf90849061416c565b90915550505b50505094509492505050565b8051602080830151604080850151606080870151608088015160a089015160c08a015195519398611c1398600198919791966001600160a01b031695016145e3565b6040516020818303038152906040529050919050565b6000611c38600182848661465e565b611c4191614688565b60f81c9392505050565b6000611c5b6031602d848661465e565b611c64916146b8565b60e01c9392505050565b600061114f611c7d84846129c9565b90565b6000611c5b600d6009848661465e565b6000611ca060096001848661465e565b611ca9916146e6565b60c01c9392505050565b611cbf84848484611827565b611cdc576040516328ca4b5160e01b815260040160405180910390fd5b602084015160ff1615611d6d5760005b846020015160ff168160ff161015611d6b57600084815260046020908152604080832086845290915281206080870151805191929160ff8516908110611d3457611d346140a6565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060009055806001019050611cec565b505b604084015160ff161561087a5760005b846040015160ff168160ff161015611dfc576000848152600460209081526040808320868452909152812060a0870151805191929160ff8516908110611dc557611dc56140a6565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060009055806001019050611d7d565b5050505050565b6000611e13602d600d848661465e565b61114f91614714565b63ffffffff811660009081527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49602052604081208054600160a01b900460ff1615158061114f575054600160b01b900460ff16151592915050565b6000546001600160a01b03163314610df35760405163118cdaa760e01b8152336004820152602401610868565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b602081015160ff16158015611f0e5750606081015160ff16155b156116fc57604051634dafcfbd60e11b815260040160405180910390fd5b602081015160ff9081161480611f475750602081015160ff16155b15611f755760808101515115611f7057604051632ad00e0160e11b815260040160405180910390fd5b611fdb565b806020015160ff16816080015151141580611fb057506002611f99600160ff614732565b611fa3919061474b565b60ff16816020015160ff16115b15611fce57604051632ad00e0160e11b815260040160405180910390fd5b611fdb81608001516129d9565b604081015160ff9081161480611ff65750604081015160ff16155b1561204a5760a0810151511561201f576040516371aa1b6360e11b815260040160405180910390fd5b606081015160ff161561204557604051637c94a05f60e11b815260040160405180910390fd5b6120ef565b806040015160ff168160a00151511415806120855750600261206e600160ff614732565b612078919061474b565b60ff16816040015160ff16115b156120a3576040516371aa1b6360e11b815260040160405180910390fd5b606081015160ff1615806120c45750806040015160ff16816060015160ff16115b156120e257604051637c94a05f60e11b815260040160405180910390fd5b6120ef8160a001516129d9565b6001600160a01b03838116600090815260016020818152604080842063ffffffff881685528252928390208551815487840151958801516060890151929097166001600160a81b031990911617600160a01b60ff968716021761ffff60a81b1916600160a81b9686169690960260ff60b01b191695909517600160b01b949095169390930293909317825560808401518051859461219193850192019061382b565b5060a082015180516121ad91600284019160209091019061382b565b505050505050565b60608060028310156121dd5760405163196499c760e21b815260006004820152602401610868565b60006121ec600282868861465e565b6121f59161477b565b60f01c90506002600219820161235d578060005b8683101561230257600061222260018501858a8c61465e565b61222b91614688565b60f81c9050600081900361225557604051636780cfaf60e01b815260006004820152602401610868565b8160ff16600003612268578091506122a5565b8160ff168160ff16146122a55736600061228486868c8e61465e565b915091506122958989868585612a40565b9099509750859450919250829150505b60018401936000906122bc90600301868b8d61465e565b6122c59161477b565b60f01c905060008190036122ef5760405163196499c760e21b815260048101869052602401610868565b8060020161ffff16850194505050612209565b8287146123255760405163196499c760e21b815260048101849052602401610868565b60028711156123565736600061233d85858b8d61465e565b9150915061234e8888858585612a40565b909850965050505b505061236b565b612368828787612b60565b93505b50509250929050565b805160208083015160408085015160608087015160808801519351600160f81b9681019690965260c09690961b6001600160c01b031916602186015260e093841b6001600160e01b031990811660298701526001600160a01b03909216602d8601529490921b909116604d8301526051820152607101611c13565b60008060006123fd84612ceb565b91509150600089604001518a6020015161241791906147a9565b905060005b8160ff168160ff16101561258f5760008b6020015160ff168260ff16106124715760a08c015160208d01516124519084614732565b60ff1681518110612464576124646140a6565b6020026020010151612493565b8b608001518260ff168151811061248a5761248a6140a6565b60200260200101515b60408051602081019091526000808252919250905b8551811015612500578360ff168682815181106124c7576124c76140a6565b602002602001015160ff16036124f8578681815181106124e9576124e96140a6565b60200260200101519150612500565b6001016124a8565b5060405163fdb9b0f160e01b81526001600160a01b0383169063fdb9b0f190612535908f908f908f908f9088906004016147c2565b602060405180830381865afa158015612552573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612576919061457d565b612580908861416c565b9650505080600101905061241c565b505050509695505050505050565b60075460009081906001600160a01b031615610b8c576040516001600160a01b038716602482015263ffffffff8616604482015260648101859052831515608482015260009060a40160408051601f19818403018152919052602080820180516001600160e01b031663d424422160e01b1790526007549192506000918291612652916001600160a01b0316907f00000000000000000000000000000000000000000000000000000000000000009086612f51565b915091506126628787848461294e565b94509450505050610b8c565b6001600160a01b038316612686576119be8282612ffd565b6119be838383611983565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526119be9084906130aa565b60405163c015bb7d60e01b81526000906001600160a01b0385169063c015bb7d906127149086908690600401614559565b6020604051808303816000875af1158015612733573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612757919061457d565b9050801561278d576001600160a01b0384166000908152600560205260408120805483929061278790849061416c565b90915550505b604080516001600160a01b0386168152602081018390527f61ed099e74a97a1d7f8bb0952a88ca8b7b8ebd00c126ea04671f92a81213318a910160405180910390a19392505050565b60006060816127e7611457866144bc565b905060006127fc6127f7876144bc565b61311b565b905060606128278861281389840160408b01613e59565b8561282160c08c018c6140dc565b8b613138565b604051919650915061283f9084908490602001614819565b60405160208183030381529060405293507f07ea52d82345d6e838192107d8fd7123d9c2ec8e916cd0aad13fd2b60db2464488608001518960a001518360405161288b93929190614848565b60405180910390a1505050935093915050565b60006060863b8083036128c557604080516000808252602082019092529250925050612944565b60008060008761ffff166001600160401b038111156128e6576128e6613ea2565b6040519080825280601f01601f191660200182016040528015612910576020820181803683370190505b509050600080885160208a018c8f8ff191503d925087831115612931578792505b828152826000602083013e909450925050505b9550959350505050565b60008083158061295f575082516020115b1561296f57506000905080610b8c565b600083806020019051810190612985919061457d565b90508515612995578091506129bf565b600060065488116129a8576006546129aa565b875b90508082116129b957816129bb565b805b9350505b5094509492505050565b6000611e1360516031848661465e565b6000805b82518110156119be5760008382815181106129fa576129fa6140a6565b60200260200101519050826001600160a01b0316816001600160a01b031611612a365760405163c0762a5d60e01b815260040160405180910390fd5b91506001016129dd565b60608060001960ff861601612abd57865115612a7f57868484604051602001612a6b939291906148a6565b604051602081830303815290604052612ab6565b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050505b9650612b55565b60011960ff861601612b3757855115612af957858484604051602001612ae5939291906148a6565b604051602081830303815290604052612b30565b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050505b9550612b55565b604051636780cfaf60e01b815260ff86166004820152602401610868565b509495939450505050565b606060001961ffff851601612c005760228214612b90576040516301b8ca5560e31b815260040160405180910390fd5b6000612bb1612ba360226002868861465e565b612bac91614714565b6133ec565b604051600160f81b60208201819052601160f01b602183015260238201526001600160801b0319608083901b16602482015290915060340160405160208183030381529060405291505061114f565b60011961ffff851601612ccc57604282111580612c1d5750606282115b15612c3b576040516360493e2b60e11b815260040160405180910390fd5b6000612c4e612ba360226002868861465e565b90506000612c63612ba360426022878961465e565b905060006041198501612c79866042818a61465e565b612c8291614714565b60405160086020938403029190911c9250612cb3916001916011918391889183916031916002918b918b91016148ce565b604051602081830303815290604052935050505061114f565b604051630417051360e41b815261ffff85166004820152602401610868565b6060808251600003612cfc57915091565b6000612d078461342d565b90508060ff16600103612db95760408051600180825281830190925290816020015b6060815260200190600190039081612d295790505092508383600081518110612d5457612d546140a6565b602090810291909101015260408051600180825281830190925290816020016020820280368337019050509150612d8c846003613507565b82600081518110612d9f57612d9f6140a6565b602002602001019060ff16908160ff168152505050915091565b8060ff166001600160401b03811115612dd457612dd4613ea2565b604051908082528060200260200182016040528015612dfd578160200160208202803683370190505b5091508060ff166001600160401b03811115612e1b57612e1b613ea2565b604051908082528060200260200182016040528015612e4e57816020015b6060815260200190600190039081612e395790505b50925060008060ff5b8651831015612ee4576001909201916000612e728885613563565b6002949094019390506000612e878986613507565b90508260ff1660ff03612e9c57809250612ed5565b8260ff168160ff1614612ed557600219848603016000612ebd8b87846135c0565b9050612ecb8a8a87846136cd565b5093909301929150815b5061ffff169290920191612e57565b8183036000612ef48985846135c0565b9050612f02888885846136cd565b60005b8660ff168160ff161015612f4557878160ff1681518110612f2857612f286140a6565b6020908102919091010180516000190160ff169052600101612f05565b50505050505050915091565b60006060853b808303612f7857604080516000808252602082019092529250925050610b8c565b60008060008761ffff166001600160401b03811115612f9957612f99613ea2565b6040519080825280601f01601f191660200182016040528015612fc3576020820181803683370190505b509050600080885160208a018d8dfa91503d925087831115612fe3578792505b828152826000602083013e90999098509650505050505050565b6001600160a01b038216613024576040516306b7a93160e41b815260040160405180910390fd5b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114613071576040519150601f19603f3d011682016040523d82523d6000602084013e613076565b606091505b50509050806119be57604051631196f20d60e21b81526001600160a01b038416600482015260248101839052604401610868565b600080602060008451602086016000885af1806130cd576040513d6000823e3d81fd5b50506000513d915081156130e55780600114156130f2565b6001600160a01b0384163b155b1561087a57604051635274afe760e01b81526001600160a01b0385166004820152602401610868565b60608160a001518260c00151604051602001611c13929190614966565b6000606060008061314885612ceb565b9150915060008a604001518b6020015161316291906147a9565b90508060ff166001600160401b0381111561317f5761317f613ea2565b6040519080825280602002602001820160405280156131a8578160200160208202803683370190505b50935060005b8160ff168160ff1610156133dd5760008c6020015160ff168260ff16106132035760a08d015160208e01516131e39084614732565b60ff16815181106131f6576131f66140a6565b6020026020010151613225565b8c608001518260ff168151811061321c5761321c6140a6565b60200260200101515b60408051602081019091526000808252919250905b8551811015613292578360ff16868281518110613259576132596140a6565b602002602001015160ff160361328a5786818151811061327b5761327b6140a6565b60200260200101519150613292565b60010161323a565b50816001600160a01b031663f42ed2ed8e8e8e8e866040518663ffffffff1660e01b81526004016132c79594939291906147c2565b6020604051808303816000875af11580156132e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061330a919061457d565b878460ff168151811061331f5761331f6140a6565b6020026020010181815250506000878460ff1681518110613342576133426140a6565b602002602001015111156133d357868360ff1681518110613365576133656140a6565b602002602001015160056000846001600160a01b03166001600160a01b0316815260200190815260200160002060008282546133a1919061416c565b92505081905550868360ff16815181106133bd576133bd6140a6565b6020026020010151886133d0919061416c565b97505b50506001016131ae565b50505050965096945050505050565b60006fffffffffffffffffffffffffffffffff821115613429576040516306dfcc6560e41b81526080600482015260248101839052604401610868565b5090565b600080805b83518210156134dc57600190910190600061344d8584613563565b905060028301925060028161ffff16101561347e5760405163013adb8360e21b815260048101849052602401610868565b600061348a8685613507565b90508060ff1660ff036134b0576040516334f4f66f60e21b815260040160405180910390fd5b600160ff82161b83166134cd5760019485019460ff82161b831792505b5061ffff169190910190613432565b835182146135005760405163013adb8360e21b815260048101839052602401610868565b5050919050565b600061351482600161416c565b8351101561355a5760405162461bcd60e51b8152602060048201526013602482015272746f55696e74385f6f75744f66426f756e647360681b6044820152606401610868565b50016001015190565b600061357082600261416c565b835110156135b75760405162461bcd60e51b8152602060048201526014602482015273746f55696e7431365f6f75744f66426f756e647360601b6044820152606401610868565b50016002015190565b6060816135ce81601f61416c565b101561360d5760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b6044820152606401610868565b613617828461416c565b8451101561365b5760405162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b6044820152606401610868565b60608215801561367a57604051915060008252602082016040526136c4565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156136b357805183526020928301920161369b565b5050858452601f01601f1916604052505b50949350505050565b8160ff1660ff036136f1576040516334f4f66f60e21b815260040160405180910390fd5b60006136fe8360016147a9565b905060005b84518110156121ad576000858281518110613720576137206140a6565b602002602001015190508060ff168360ff160361379557868281518110613749576137496140a6565b602002602001015184604051602001613763929190614819565b604051602081830303815290604052878381518110613784576137846140a6565b6020026020010181905250506121ad565b8060ff166000036137da57828683815181106137b3576137b36140a6565b602002602001019060ff16908160ff168152505083878381518110613784576137846140a6565b50600101613703565b6040518060c0016040528060006001600160a01b03168152602001600060ff168152602001600060ff168152602001600060ff16815260200160608152602001606081525090565b828054828255906000526020600020908101928215613880579160200282015b8281111561388057825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019061384b565b506134299291505b808211156134295760008155600101613888565b6000602082840312156138ae57600080fd5b81356001600160e01b03198116811461114f57600080fd5b600080600080608085870312156138dc57600080fd5b84356001600160401b038111156138f257600080fd5b850160c0818803121561390457600080fd5b966020860135965060408601359560600135945092505050565b602081016003831061394057634e487b7160e01b600052602160045260246000fd5b91905290565b6001600160a01b03811681146116fc57600080fd5b803561396681613946565b919050565b803563ffffffff8116811461396657600080fd5b80356001600160401b038116811461396657600080fd5b6000806000606084860312156139ab57600080fd5b83356139b681613946565b92506139c46020850161396b565b91506139d26040850161397f565b90509250925092565b6000806000606084860312156139f057600080fd5b83356139fb81613946565b92506020840135613a0b81613946565b929592945050506040919091013590565b60008083601f840112613a2e57600080fd5b5081356001600160401b03811115613a4557600080fd5b6020830191508360208260051b8501011115613a6057600080fd5b9250929050565b600080600060408486031215613a7c57600080fd5b8335613a8781613946565b925060208401356001600160401b03811115613aa257600080fd5b613aae86828701613a1c565b9497909650939450505050565b600080600060608486031215613ad057600080fd5b83359250602084013591506040840135613ae981613946565b809150509250925092565b60008083601f840112613b0657600080fd5b5081356001600160401b03811115613b1d57600080fd5b602083019150836020828501011115613a6057600080fd5b60008060008060608587031215613b4b57600080fd5b84356001600160401b0380821115613b6257600080fd5b9086019060e08289031215613b7657600080fd5b90945060208601359080821115613b8c57600080fd5b50613b9987828801613af4565b90945092505060408501358015158114613bb257600080fd5b939692955090935050565b60005b83811015613bd8578181015183820152602001613bc0565b50506000910152565b60008151808452613bf9816020860160208601613bbd565b601f01601f19169290920160200192915050565b82518152602080840151908201526060604082015260006106166060830184613be1565b60008060008060608587031215613c4757600080fd5b84356001600160401b03811115613c5d57600080fd5b613c6987828801613af4565b90989097506020870135966040013595509350505050565b600060208284031215613c9357600080fd5b61114f8261396b565b60008060408385031215613caf57600080fd5b8235613cba81613946565b9150613cc86020840161396b565b90509250929050565b60008151808452602080850194506020840160005b83811015613d0b5781516001600160a01b031687529582019590820190600101613ce6565b509495945050505050565b60018060a01b03815116825260ff602082015116602083015260ff604082015116604083015260ff60608201511660608301526000608082015160c06080850152613d6460c0850182613cd1565b905060a083015184820360a0860152613d7d8282613cd1565b95945050505050565b60208152600061114f6020830184613d16565b600080600060608486031215613dae57600080fd5b613db78461396b565b92506020840135613dc781613946565b91506139d26040850161396b565b60208152600061114f6020830184613be1565b60008060208385031215613dfb57600080fd5b82356001600160401b03811115613e1157600080fd5b613e1d85828601613a1c565b90969095509350505050565b600060208284031215613e3b57600080fd5b5035919050565b8151815260208083015190820152604081016105f7565b600060208284031215613e6b57600080fd5b813561114f81613946565b60008060408385031215613e8957600080fd5b8235613e9481613946565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b60405160c081016001600160401b0381118282101715613eda57613eda613ea2565b60405290565b60405160e081016001600160401b0381118282101715613eda57613eda613ea2565b604051601f8201601f191681016001600160401b0381118282101715613f2a57613f2a613ea2565b604052919050565b803560ff8116811461396657600080fd5b600082601f830112613f5457600080fd5b813560206001600160401b03821115613f6f57613f6f613ea2565b8160051b613f7e828201613f02565b9283528481018201928281019087851115613f9857600080fd5b83870192505b84831015613fc0578235613fb181613946565b82529183019190830190613f9e565b979650505050505050565b600060c08284031215613fdd57600080fd5b613fe5613eb8565b9050613ff08261395b565b8152613ffe60208301613f32565b602082015261400f60408301613f32565b604082015261402060608301613f32565b606082015260808201356001600160401b038082111561403f57600080fd5b61404b85838601613f43565b608084015260a084013591508082111561406457600080fd5b5061407184828501613f43565b60a08301525092915050565b60006105f73683613fcb565b60006020828403121561409b57600080fd5b815161114f81613946565b634e487b7160e01b600052603260045260246000fd5b60008235605e198336030181126140d257600080fd5b9190910192915050565b6000808335601e198436030181126140f357600080fd5b8301803591506001600160401b0382111561410d57600080fd5b602001915036819003821315613a6057600080fd5b60006020828403121561413457600080fd5b81356001600160401b0381111561414a57600080fd5b61061684828501613fcb565b634e487b7160e01b600052601160045260246000fd5b808201808211156105f7576105f7614156565b8183823760009101908152919050565b6000602082840312156141a157600080fd5b61114f8261397f565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6040815260006141e66040830186613be1565b82810360208401526141f98185876141aa565b9695505050505050565b6001600160a01b038616815260806020820181905260009061422890830186886141aa565b604083019490945250606001529392505050565b60008235603e198336030181126140d257600080fd5b6000823560be198336030181126140d257600080fd5b60006020828403121561427a57600080fd5b61114f82613f32565b6000808335601e1984360301811261429a57600080fd5b83016020810192503590506001600160401b038111156142b957600080fd5b8060051b3603821315613a6057600080fd5b8183526000602080850194508260005b85811015613d0b5781356142ee81613946565b6001600160a01b0316875295820195908201906001016142db565b60208082528181018390526000906040808401600586901b8501820187855b8881101561443f57603f19808985030185528235603e198c360301811261434e57600080fd5b8b0163ffffffff61435e8261396b565b1685528781013560be1982360301811261437757600080fd5b85890188905201803561438981613946565b6001600160a01b0316858801526143a1818901613f32565b606060ff808316828901526143b78a8501613f32565b92506080818416818a01526143cd838601613f32565b935060a09250818416838a01526143e681860186614283565b60c08b810152945091506144019050610100890184836142cb565b92505061441081840184614283565b93509050838783030160e08801526144298284836142cb565b978a019796505050928701925050600101614328565b509098975050505050505050565b600082601f83011261445e57600080fd5b81356001600160401b0381111561447757614477613ea2565b61448a601f8201601f1916602001613f02565b81815284602083860101111561449f57600080fd5b816020850160208301376000918101602001919091529392505050565b600060e082360312156144ce57600080fd5b6144d6613ee0565b6144df8361397f565b81526144ed6020840161396b565b60208201526144fe6040840161395b565b604082015261450f6060840161396b565b60608201526080830135608082015260a083013560a082015260c08301356001600160401b0381111561454157600080fd5b61454d3682860161444d565b60c08301525092915050565b6001600160a01b038316815260406020820181905260009061061690830184613be1565b60006020828403121561458f57600080fd5b5051919050565b600060ff8216806145a9576145a9614156565b6000190192915050565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009061061390830184613d16565b60ff60f81b8960f81b1681526001600160401b0360c01b8860c01b166001820152600063ffffffff60e01b808960e01b16600984015287600d840152808760e01b16602d84015250846031830152836051830152825161464a816071850160208701613bbd565b919091016071019998505050505050505050565b6000808585111561466e57600080fd5b8386111561467b57600080fd5b5050820193919092039150565b6001600160f81b031981358181169160018510156146b05780818660010360031b1b83161692505b505092915050565b6001600160e01b031981358181169160048510156146b05760049490940360031b84901b1690921692915050565b6001600160c01b031981358181169160088510156146b05760089490940360031b84901b1690921692915050565b803560208310156105f757600019602084900360031b1b1692915050565b60ff82811682821603908111156105f7576105f7614156565b600060ff83168061476c57634e487b7160e01b600052601260045260246000fd5b8060ff84160491505092915050565b6001600160f01b031981358181169160028510156146b05760029490940360031b84901b1690921692915050565b60ff81811683821601908111156105f7576105f7614156565b6001600160a01b03861681526080602082018190526000906147e690830187613be1565b82810360408401526147f98186886141aa565b9050828103606084015261480d8185613be1565b98975050505050505050565b6000835161482b818460208801613bbd565b83519083019061483f818360208801613bbd565b01949350505050565b60608152600061485b6060830186613cd1565b6020838203602085015261486f8287613cd1565b84810360408601528551808252602080880194509091019060005b8181101561443f5784518352938301939183019160010161488a565b600084516148b8818460208901613bbd565b8201838582376000930192835250909392505050565b60f88a811b6001600160f81b0319908116835260f08b811b6001600160f01b031990811660018601528b841b8316600386015260808b901b6001600160801b031916600486015289841b831660148601529088901b1660158401529085901b166017820152600061494e601883018560801b6001600160801b0319169052565b50602881019190915260480198975050505050505050565b8281526000825161497e816020850160208701613bbd565b91909101602001939250505056fea2646970667358221220aa3c2aa17972b91a5ad74e17a6fe1bc85298f9e147161924798ce8a3a1115efc64736f6c6343000816003360806040523480156200001157600080fd5b506040516200313b3803806200313b83398101604081905262000034916200046f565b6001805460ff61ffff60e81b01191661017760ed1b179055600280546001600160a01b0319166001600160a01b038581169190911790915584908490612ee090859085908216156200008f576200008d60008362000226565b505b60005b8551811015620000f457620000ea7f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de878381518110620000d657620000d662000523565b60200260200101516200022660201b60201c565b5060010162000092565b5060005b815181101562000146576200013c7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775838381518110620000d657620000d662000523565b50600101620000f8565b505060016004908155600680546001600160a01b0319166001600160a01b038d169081179091556040805163416ecebf60e01b8152905191965063416ecebf95508083019450602093509091908290030181865afa158015620001ad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001d3919062000539565b6006805463ffffffff92909216600160a01b0263ffffffff60a01b199092169190911790555050600780546001600160a01b039094166001600160a01b03199094169390931790925550620005a5915050565b60007f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca831480156200027957506000838152602081815260408083206001600160a01b038616845290915290205460ff16155b15620002c65760018054601590620002a190600160a81b90046001600160401b031662000568565b91906101000a8154816001600160401b0302191690836001600160401b031602179055505b620002d28383620002de565b50600190505b92915050565b6000828152602081815260408083206001600160a01b038516845290915281205460ff1662000383576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556200033a3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001620002d8565b506000620002d8565b80516001600160a01b0381168114620003a457600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620003d157600080fd5b815160206001600160401b0380831115620003f057620003f0620003a9565b8260051b604051601f19603f83011681018181108482111715620004185762000418620003a9565b60405293845260208187018101949081019250878511156200043957600080fd5b6020870191505b84821015620004645762000454826200038c565b8352918301919083019062000440565b979650505050505050565b60008060008060008060c087890312156200048957600080fd5b62000494876200038c565b9550620004a4602088016200038c565b60408801519095506001600160401b0380821115620004c257600080fd5b620004d08a838b01620003bf565b9550620004e060608a016200038c565b9450620004f060808a016200038c565b935060a08901519150808211156200050757600080fd5b506200051689828a01620003bf565b9150509295509295509295565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156200054c57600080fd5b815163ffffffff811681146200056157600080fd5b9392505050565b60006001600160401b038281166002600160401b031981016200059b57634e487b7160e01b600052601160045260246000fd5b6001019392505050565b612b8680620005b56000396000f3fe60806040526004361061020e5760003560e01c8063724e78da11610118578063c358de0a116100a0578063cd88b9031161006f578063cd88b903146106af578063cfc32570146106cf578063d2ae2104146106e2578063d547741f14610721578063e395eb5c1461074157600080fd5b8063c358de0a1461062a578063c416aa511461064a578063c7b2370b1461066f578063c8f8dcd11461068f57600080fd5b806391d14854116100e757806391d14854146105065780639e94496514610526578063a217fddf146105d5578063c015bb7d146105ea578063c2803b2c1461060a57600080fd5b8063724e78da146104a0578063741bef1a146104c05780637cd44734146104e05780638624ba07146104f357600080fd5b80633146646a1161019b578063475b6d9e1161016a578063475b6d9e146103fd5780635c975abb146104105780635e280f1114610428578063709eb66414610460578063717e8a421461048057600080fd5b80633146646a1461038a57806336568abe146103aa5780633927c075146103ca5780633d85ac33146103dd57600080fd5b806316c38b3c116101e257806316c38b3c146102bf578063248a9ca3146102df57806326e67a371461031d5780632de113761461034a5780632f2ff15d1461036a57600080fd5b8062bf2e801461021357806301e336671461024d57806301ffc9a71461026f5780631095b6d71461029f575b600080fd5b34801561021f57600080fd5b5060015461023590600160e81b900461ffff1681565b60405161ffff90911681526020015b60405180910390f35b34801561025957600080fd5b5061026d610268366004611dca565b61077a565b005b34801561027b57600080fd5b5061028f61028a366004611e06565b6107a3565b6040519015158152602001610244565b3480156102ab57600080fd5b5061026d6102ba366004611dca565b6107da565b3480156102cb57600080fd5b5061026d6102da366004611e30565b6108ed565b3480156102eb57600080fd5b5061030f6102fa366004611e52565b60009081526020819052604090206001015490565b604051908152602001610244565b34801561032957600080fd5b5061033d610338366004611e7f565b610912565b6040516102449190611e9a565b34801561035657600080fd5b5061028f610365366004611ee1565b610999565b34801561037657600080fd5b5061026d610385366004611efc565b610a30565b34801561039657600080fd5b5061026d6103a5366004611f70565b610a55565b3480156103b657600080fd5b5061026d6103c5366004611efc565b610ae5565b61026d6103d8366004612017565b610afe565b3480156103e957600080fd5b5061026d6103f8366004612158565b610bb9565b61026d61040b366004612273565b610d30565b34801561041c57600080fd5b5060015460ff1661028f565b34801561043457600080fd5b50600654610448906001600160a01b031681565b6040516001600160a01b039091168152602001610244565b34801561046c57600080fd5b5061030f61047b3660046122f1565b610d72565b34801561048c57600080fd5b5061030f61049b3660046122f1565b610e79565b3480156104ac57600080fd5b5061026d6104bb366004611ee1565b610fa5565b3480156104cc57600080fd5b50600254610448906001600160a01b031681565b61026d6104ee36600461235f565b61100b565b61026d610501366004612424565b6110b6565b34801561051257600080fd5b5061028f610521366004611efc565b6111c1565b34801561053257600080fd5b50610592610541366004611e7f565b600560205260009081526040902080546001909101546001600160401b038083169261ffff600160401b820416926001600160801b03600160501b90920482169291811691600160801b9091041685565b604080516001600160401b03968716815261ffff90951660208601526001600160801b03938416908501529116606083015291909116608082015260a001610244565b3480156105e157600080fd5b5061030f600081565b3480156105f657600080fd5b5061030f610605366004612496565b6111ea565b34801561061657600080fd5b50600754610448906001600160a01b031681565b34801561063657600080fd5b5061026d6106453660046124e8565b611312565b34801561065657600080fd5b506001546104489061010090046001600160a01b031681565b34801561067b57600080fd5b5061026d61068a366004611ee1565b61137a565b34801561069b57600080fd5b5061030f6106aa366004612496565b6113e8565b3480156106bb57600080fd5b5061026d6106ca366004612503565b6114e3565b61026d6106dd366004612588565b61151b565b3480156106ee57600080fd5b5060015461070990600160a81b90046001600160401b031681565b6040516001600160401b039091168152602001610244565b34801561072d57600080fd5b5061026d61073c366004611efc565b6115de565b34801561074d57600080fd5b5060065461076590600160a01b900463ffffffff1681565b60405163ffffffff9091168152602001610244565b600080516020612b3183398151915261079281611603565b61079d848484611610565b50505050565b60006001600160e01b03198216637965db0b60e01b14806107d457506301ffc9a760e01b6001600160e01b03198316145b92915050565b600080516020612b318339815191526107f281611603565b61081c7f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de856111c1565b61083957604051635ee08b9760e01b815260040160405180910390fd5b604051637ecdf29160e11b81526001600160a01b0384811660048301526024820184905285169063fd9be52290604401600060405180830381600087803b15801561088357600080fd5b505af1158015610897573d6000803e3d6000fd5b5050604080516001600160a01b038089168252871660208201529081018590527f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb9250606001905060405180910390a150505050565b60006108f881611603565b811561090a57610906611638565b5050565b61090661168c565b63ffffffff811660009081526003602090815260409182902080548351818402810184019094528084526060939283018282801561098d57602002820191906000526020600020906000905b825461010083900a900460ff1681526020600192830181810494850194909303909202910180841161095e5790505b50505050509050919050565b60006109c57f4270fae16c6d150d00e80b689daca99e8073b1838ff2b6063a37be9d851283e4836111c1565b156109d257506000919050565b600154600160a81b90046001600160401b03161580610a165750610a167f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca836111c1565b15610a2357506001919050565b506000919050565b919050565b600082815260208190526040902060010154610a4b81611603565b61079d83836116c5565b600080516020612b31833981519152610a6d81611603565b610a7561175b565b600754604051631cca20df60e31b81526001600160a01b039091169063e65106f890610aa9908790879087906004016125ed565b600060405180830381600087803b158015610ac357600080fd5b505af1158015610ad7573d6000803e3d6000fd5b5050505061079d6001600455565b60405163dec9f03160e01b815260040160405180910390fd5b600080516020612b31833981519152610b1681611603565b610b1e61175b565b610b3e88610b2c8686611785565b610b3687876117a8565b8a8a8a6117c1565b50600754604051631cca20df60e31b81526001600160a01b039091169063e65106f890610b73908790879087906004016125ed565b600060405180830381600087803b158015610b8d57600080fd5b505af1158015610ba1573d6000803e3d6000fd5b50505050610baf6001600455565b5050505050505050565b600080516020612b31833981519152610bd181611603565b60005b8251811015610cf4576000838281518110610bf157610bf1612611565b6020908102919091018101516040805160a08082018352838501516001600160401b03908116835260608086015161ffff9081168589019081526080808901516001600160801b03908116888a01908152968a01518116948801948552888a01518616918801918252985163ffffffff1660009081526005909a529690982094518554985194518816600160501b026fffffffffffffffffffffffffffffffff60501b1995909216600160401b0269ffffffffffffffffffff1990991690841617979097179290921695909517825551600191820180549351909516600160801b026001600160c01b031990931693169290921717909155919091019050610bd4565b507fb99f6de5e22c60c178b03bfacf2daeb4b6089f5b37e0fe2c48a5d5141191fc5382604051610d249190612627565b60405180910390a15050565b600080516020612b31833981519152610d4881611603565b610d5061175b565b610d5e8787878787876117c1565b50610d696001600455565b50505050505050565b600084610d7e81610999565b610d9b57604051634ab5ebcd60e01b815260040160405180910390fd5b610da3611928565b6040805160a0810182526002546001600160a01b03908116825263ffffffff8a1660208084018290528a831684860152606084018a905260015461ffff600160e81b8204166080860152600092835260059091529084902093516321a7700b60e11b815292936101009091049091169163434ee01691610e2c918591908a908a90600401612714565b602060405180830381865afa158015610e49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e6d919061277c565b98975050505050505050565b60007f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de610ea581611603565b85610eaf81610999565b610ecc57604051634ab5ebcd60e01b815260040160405180910390fd5b6040805160a0810182526002546001600160a01b03908116825263ffffffff8b1660208084018290528b831684860152606084018b905260015461ffff600160e81b820416608086015260009283526005909152908490209351632b377bb160e11b815292936101009091049091169163566ef76291610f55918591908b908b90600401612714565b6020604051808303816000875af1158015610f74573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f98919061277c565b9998505050505050505050565b600080516020612b31833981519152610fbd81611603565b600280546001600160a01b0319166001600160a01b0384169081179091556040519081527ff724a45d041687842411f2b977ef22ab8f43c8f1104f4592b42a00f9b34a643d90602001610d24565b600080516020612b3183398151915261102381611603565b61102b61175b565b6006546040516391d20fa160e01b81526001600160a01b03909116906391d20fa1908490349061106d908f908f908f908f908f908f908f908f90600401612795565b6000604051808303818589803b15801561108657600080fd5b5088f115801561109a573d6000803e3d6000fd5b5050505050506110aa6001600455565b50505050505050505050565b600080516020612b318339815191526110ce81611603565b6110d661175b565b600654600090611104906020850190600160a01b900463ffffffff166110fc8287611ee1565b8989896117c1565b90506000611112823461280b565b6006549091506001600160a01b0316630c0c389e60e0860135836020880161113a818a611ee1565b60808a013561114c60a08c018c61281e565b61115960c08e018e61281e565b6040518a63ffffffff1660e01b815260040161117b979695949392919061289d565b6000604051808303818589803b15801561119457600080fd5b5088f11580156111a8573d6000803e3d6000fd5b50505050505050506111ba6001600455565b5050505050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b60007f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de61121681611603565b8461122081610999565b61123d57604051634ab5ebcd60e01b815260040160405180910390fd5b604080516060810182526002546001600160a01b039081168252888116602080840191909152600154600160e81b810461ffff1684860152600654600160a01b900463ffffffff16600090815260059092529084902093516319400de160e21b81529293610100909104909116916365003784916112c4918591908b908b906004016128f3565b6020604051808303816000875af11580156112e3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611307919061277c565b979650505050505050565b600080516020612b3183398151915261132a81611603565b6001805461ffff60e81b1916600160e81b61ffff8516908102919091179091556040519081527f7af0ac740036ffb1c97b03697859d729e80a44ae5030543d64971c313565ab4d90602001610d24565b600080516020612b3183398151915261139281611603565b60018054610100600160a81b0319166101006001600160a01b038516908102919091179091556040519081527f1399be28223800f8669b3ba5f8721d9fc16fc4e8d0bbf98378791c8c5a3015e090602001610d24565b6000836113f481610999565b61141157604051634ab5ebcd60e01b815260040160405180910390fd5b604080516060810182526002546001600160a01b039081168252878116602080840191909152600154600160e81b810461ffff1684860152600654600160a01b900463ffffffff16600090815260059092529084902093516319be3d4f60e11b815292936101009091049091169163337c7a9e91611498918591908a908a906004016128f3565b602060405180830381865afa1580156114b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114d9919061277c565b9695505050505050565b600080516020612b318339815191526114fb81611603565b63ffffffff841660009081526003602052604090206111ba908484611cf5565b600080516020612b3183398151915261153381611603565b61153b61175b565b6006546001600160a01b0316630c0c389e60e084013534602086016115608188611ee1565b608088013561157260a08a018a61281e565b61157f60c08c018c61281e565b6040518a63ffffffff1660e01b81526004016115a1979695949392919061289d565b6000604051808303818589803b1580156115ba57600080fd5b5088f11580156115ce573d6000803e3d6000fd5b5050505050506109066001600455565b6000828152602081905260409020600101546115f981611603565b61079d838361194e565b61160d81336119d8565b50565b6001600160a01b03831661162d576116288282611a16565b505050565b611628838383611ac3565b611640611928565b6001805460ff1916811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b6040516001600160a01b03909116815260200160405180910390a1565b611694611afe565b6001805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa3361166f565b60007f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca831480156116fd57506116fb83836111c1565b155b15611747576001805460159061172290600160a81b90046001600160401b0316612943565b91906101000a8154816001600160401b0302191690836001600160401b031602179055505b6117518383611b21565b5060019392505050565b60026004540361177e57604051633ee5aeb560e01b815260040160405180910390fd5b6002600455565b60006117956031602d8486612969565b61179e91612993565b60e01c9392505050565b60006117ba6117b78484611bb3565b90565b9392505050565b600080836001600160401b038111156117dc576117dc6120aa565b604051908082528060200260200182016040528015611805578160200160208202803683370190505b50905060005b848110156118db57600086868381811061182757611827612611565b90506040020180360381019061183d91906129c3565b9050600081600001516001600160a01b031682602001518790604051600060405180830381858888f193505050503d8060008114611897576040519150601f19603f3d011682016040523d82523d6000602084013e61189c565b606091505b50509050808484815181106118b3576118b3612611565b9115156020928302919091018201528201516118cf9086612a19565b9450505060010161180b565b507f1f48172553121d8bf273ce457a5a3dd180d464e0add3e0143045b7fa039c346888888888888660405161191596959493929190612a6a565b60405180910390a1509695505050505050565b60015460ff161561194c5760405163d93c066560e01b815260040160405180910390fd5b565b60007f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca83148015611984575061198483836111c1565b156119ce57600180546015906119a990600160a81b90046001600160401b0316612aef565b91906101000a8154816001600160401b0302191690836001600160401b031602179055505b6117518383611bcc565b6119e282826111c1565b6109065760405163e2517d3f60e01b81526001600160a01b0382166004820152602481018390526044015b60405180910390fd5b6001600160a01b038216611a3d576040516306b7a93160e41b815260040160405180910390fd5b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611a8a576040519150601f19603f3d011682016040523d82523d6000602084013e611a8f565b606091505b505090508061162857604051631196f20d60e21b81526001600160a01b038416600482015260248101839052604401611a0d565b6001600160a01b038216611aea576040516306b7a93160e41b815260040160405180910390fd5b6116286001600160a01b0384168383611c37565b60015460ff1661194c57604051638dfc202b60e01b815260040160405180910390fd5b6000611b2d83836111c1565b611bab576000838152602081815260408083206001600160a01b03861684529091529020805460ff19166001179055611b633390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016107d4565b5060006107d4565b6000611bc3605160318486612969565b6117ba91612b12565b6000611bd883836111c1565b15611bab576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016107d4565b604080516001600160a01b03841660248201526044808201849052825180830390910181526064909101909152602080820180516001600160e01b031663a9059cbb60e01b1781528251611628938793909260009283929183919082885af180611ca7576040513d6000823e3d81fd5b50506000513d91508115611cbf578060011415611ccc565b6001600160a01b0384163b155b1561079d57604051635274afe760e01b81526001600160a01b0385166004820152602401611a0d565b82805482825590600052602060002090601f01602090048101928215611d8e5791602002820160005b83821115611d5f57833560ff1683826101000a81548160ff021916908360ff1602179055509260200192600101602081600001049283019260010302611d1e565b8015611d8c5782816101000a81549060ff0219169055600101602081600001049283019260010302611d5f565b505b50611d9a929150611d9e565b5090565b5b80821115611d9a5760008155600101611d9f565b80356001600160a01b0381168114610a2b57600080fd5b600080600060608486031215611ddf57600080fd5b611de884611db3565b9250611df660208501611db3565b9150604084013590509250925092565b600060208284031215611e1857600080fd5b81356001600160e01b0319811681146117ba57600080fd5b600060208284031215611e4257600080fd5b813580151581146117ba57600080fd5b600060208284031215611e6457600080fd5b5035919050565b803563ffffffff81168114610a2b57600080fd5b600060208284031215611e9157600080fd5b6117ba82611e6b565b6020808252825182820181905260009190848201906040850190845b81811015611ed557835160ff1683529284019291840191600101611eb6565b50909695505050505050565b600060208284031215611ef357600080fd5b6117ba82611db3565b60008060408385031215611f0f57600080fd5b82359150611f1f60208401611db3565b90509250929050565b60008083601f840112611f3a57600080fd5b5081356001600160401b03811115611f5157600080fd5b602083019150836020828501011115611f6957600080fd5b9250929050565b600080600060408486031215611f8557600080fd5b83356001600160401b03811115611f9b57600080fd5b611fa786828701611f28565b909790965060209590950135949350505050565b600060608284031215611fcd57600080fd5b50919050565b60008083601f840112611fe557600080fd5b5081356001600160401b03811115611ffc57600080fd5b6020830191508360208260061b8501011115611f6957600080fd5b600080600080600080600060e0888a03121561203257600080fd5b61203c8989611fbb565b965060608801356001600160401b038082111561205857600080fd5b6120648b838c01611fd3565b909850965060808a0135955060a08a013591508082111561208457600080fd5b506120918a828b01611f28565b989b979a5095989497959660c090950135949350505050565b634e487b7160e01b600052604160045260246000fd5b60405160c081016001600160401b03811182821017156120e2576120e26120aa565b60405290565b604051601f8201601f191681016001600160401b0381118282101715612110576121106120aa565b604052919050565b80356001600160401b0381168114610a2b57600080fd5b803561ffff81168114610a2b57600080fd5b80356001600160801b0381168114610a2b57600080fd5b6000602080838503121561216b57600080fd5b82356001600160401b038082111561218257600080fd5b818501915085601f83011261219657600080fd5b8135818111156121a8576121a86120aa565b6121b6848260051b016120e8565b818152848101925060c09182028401850191888311156121d557600080fd5b938501935b828510156122675780858a0312156121f25760008081fd5b6121fa6120c0565b61220386611e6b565b8152612210878701612118565b878201526040612221818801612118565b90820152606061223287820161212f565b908201526080612243878201612141565b9082015260a0612254878201612141565b90820152845293840193928501926121da565b50979650505050505050565b60008060008060008060e0878903121561228c57600080fd5b6122968888611fbb565b95506122a460608801611e6b565b94506122b260808801611db3565b935060a08701356001600160401b038111156122cd57600080fd5b6122d989828a01611fd3565b979a969950949794969560c090950135949350505050565b60008060008060006080868803121561230957600080fd5b61231286611e6b565b945061232060208701611db3565b93506040860135925060608601356001600160401b0381111561234257600080fd5b61234e88828901611f28565b969995985093965092949392505050565b600080600080600080600080600060e08a8c03121561237d57600080fd5b6123868a611db3565b985061239460208b01611db3565b975060408a013596506123a960608b0161212f565b955060808a01356001600160401b03808211156123c557600080fd5b6123d18d838e01611f28565b909750955060a08c01359150808211156123ea57600080fd5b506123f78c828d01611f28565b9a9d999c50979a9699959894979660c00135949350505050565b60006101008284031215611fcd57600080fd5b6000806000806060858703121561243a57600080fd5b84356001600160401b038082111561245157600080fd5b61245d88838901611fd3565b909650945060208701359350604087013591508082111561247d57600080fd5b5061248a87828801612411565b91505092959194509250565b6000806000604084860312156124ab57600080fd5b6124b484611db3565b925060208401356001600160401b038111156124cf57600080fd5b6124db86828701611f28565b9497909650939450505050565b6000602082840312156124fa57600080fd5b6117ba8261212f565b60008060006040848603121561251857600080fd5b61252184611e6b565b925060208401356001600160401b038082111561253d57600080fd5b818601915086601f83011261255157600080fd5b81358181111561256057600080fd5b8760208260051b850101111561257557600080fd5b6020830194508093505050509250925092565b60006020828403121561259a57600080fd5b81356001600160401b038111156125b057600080fd5b6125bc84828501612411565b949350505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6040815260006126016040830185876125c4565b9050826020830152949350505050565b634e487b7160e01b600052603260045260246000fd5b602080825282518282018190526000919060409081850190868401855b828110156126b7578151805163ffffffff168552868101516001600160401b039081168887015286820151168686015260608082015161ffff16908601526080808201516001600160801b039081169187019190915260a091820151169085015260c09093019290850190600101612644565b5091979650505050505050565b80546001600160401b03808216845261ffff8260401c1660208501526001600160801b03808360501c16604086015260018401549250808316606086015250808260801c16608085015250505050565b600061016060018060a01b0380885116845263ffffffff6020890151166020850152806040890151166040850152506060870151606084015261ffff608088015116608084015261276860a08401876126c4565b8061014084015261130781840185876125c4565b60006020828403121561278e57600080fd5b5051919050565b6001600160a01b038981168252881660208201526040810187905261ffff8616606082015260c0608082018190526000906127d390830186886125c4565b82810360a08401526127e68185876125c4565b9b9a5050505050505050505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156107d4576107d46127f5565b6000808335601e1984360301811261283557600080fd5b8301803591506001600160401b0382111561284f57600080fd5b602001915036819003821315611f6957600080fd5b63ffffffff61287282611e6b565b168252602081013560208301526001600160401b0361289360408301612118565b1660408301525050565b6128a78189612864565b60018060a01b038716606082015285608082015260e060a082015260006128d260e0830186886125c4565b82810360c08401526128e58185876125c4565b9a9950505050505050505050565b84516001600160a01b0390811682526020808701519091169082015260408086015161ffff1690820152600061012061292f60608401876126c4565b8061010084015261130781840185876125c4565b60006001600160401b0380831681810361295f5761295f6127f5565b6001019392505050565b6000808585111561297957600080fd5b8386111561298657600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156129bb5780818660040360031b1b83161692505b505092915050565b6000604082840312156129d557600080fd5b604051604081018181106001600160401b03821117156129f7576129f76120aa565b604052612a0383611db3565b8152602083013560208201528091505092915050565b808201808211156107d4576107d46127f5565b60008151808452602080850194506020840160005b83811015612a5f578151151587529582019590820190600101612a41565b509495945050505050565b600060e08201612a7a838a612864565b63ffffffff881660608401526001600160a01b03878116608085015260e060a0850152908590528590610100840160005b87811015612adc5782612abd85611db3565b1682526020848101359083015260409384019390910190600101612aab565b5084810360c08601526127e68187612a2c565b60006001600160401b03821680612b0857612b086127f5565b6000190192915050565b803560208310156107d457600019602084900360031b1b169291505056fea49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775a264697066735822122003e7fb8f464aa4a064aa9568ebbe17fdc3d0618228d79d9a1ced9212fb3e0e6b64736f6c6343000816003360c060405234801561001057600080fd5b5060405161162538038061162583398101604081905261002f916100c9565b338061005557604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b61005e81610079565b5063ffffffff1660a052670de0b6b3a76400006080526100f6565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100db57600080fd5b815163ffffffff811681146100ef57600080fd5b9392505050565b60805160a0516115036101226000396000818161021501526102b20152600061075501526115036000f3fe60806040526004361061008a5760003560e01c8063566ef76211610059578063566ef7621461012c578063650037841461014c578063715018a61461016c5780638da5cb5b14610181578063f2fde38b146101a957600080fd5b806301e3366714610096578063337c7a9e146100b8578063434ee016146100eb57806354fd4d501461010b57600080fd5b3661009157005b600080fd5b3480156100a257600080fd5b506100b66100b13660046110c2565b6101c9565b005b3480156100c457600080fd5b506100d86100d336600461115f565b6101e1565b6040519081526020015b60405180910390f35b3480156100f757600080fd5b506100d86101063660046111cb565b6103c1565b34801561011757600080fd5b506040805160018082526020820152016100e2565b34801561013857600080fd5b506100d86101473660046111cb565b61058c565b34801561015857600080fd5b506100d861016736600461115f565b6105a3565b34801561017857600080fd5b506100b66105b1565b34801561018d57600080fd5b506000546040516001600160a01b0390911681526020016100e2565b3480156101b557600080fd5b506100b66101c4366004611218565b6105c5565b6101d1610603565b6101dc838383610630565b505050565b60006101f0602085018561123a565b67ffffffffffffffff166000036102475760405163c3baa0b760e01b815263ffffffff7f00000000000000000000000000000000000000000000000000000000000000001660048201526024015b60405180910390fd5b6000808061028560018261025e60208b018b61123a565b61026e60a08c0160808d0161123a565b61027e60808d0160608e01611279565b8b8b610653565b91945092509050600080808061029e60208d018d611218565b604051632229049360e21b815263ffffffff7f00000000000000000000000000000000000000000000000000000000000000008116600483015287166024820152604481018890526001600160a01b0391909116906388a4124c90606401608060405180830381865afa158015610319573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061033d9190611296565b929650909450925090506103878461035b60408e0160208f016112eb565b8e604001602081019061036e91906112eb565b8e60400160208101906103819190611279565b856106e5565b97506103a78784848f60400160208101906103a291906112eb565b6107ba565b6103b19089611325565b9c9b505050505050505050505050565b60006103d0602085018561123a565b67ffffffffffffffff16600003610413576103f1604086016020870161133e565b60405163c3baa0b760e01b815263ffffffff909116600482015260240161023e565b6000806104678161043361042d60408b0160208c0161133e565b50600090565b61044060208a018a61123a565b61045060a08b0160808c0161123a565b61046060808c0160608d01611279565b8a8a610653565b509092509050600080808061047f60208c018c611218565b6001600160a01b03166388a4124c61049d60408e0160208f0161133e565b6040516001600160e01b031960e084901b16815263ffffffff91909116600482015260608e0135602482015260448101889052606401608060405180830381865afa1580156104f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105149190611296565b929650909450925090506105588461053260408d0160208e016112eb565b8d608001602081019061054591906112eb565b8d60400160208101906103819190611279565b96506105738684848e60800160208101906103a291906112eb565b61057d9088611325565b9b9a5050505050505050505050565b600061059a858585856103c1565b95945050505050565b600061059a858585856101e1565b6105b9610603565b6105c3600061080f565b565b6105cd610603565b6001600160a01b0381166105f757604051631e4fbdf760e01b81526000600482015260240161023e565b6106008161080f565b50565b6000546001600160a01b031633146105c35760405163118cdaa760e01b815233600482015260240161023e565b6001600160a01b038316610648576101dc828261085f565b6101dc83838361090c565b60008060008061066686868d8d8b610947565b805160608201516080830151919650935090915061068e9067ffffffffffffffff8a16611364565b60208201516106a79067ffffffffffffffff8c16611325565b6106b19190611325565b92508060400151156106d75760646106ca846066611364565b6106d4919061137b565b92505b509750975097945050505050565b60008061ffff8616156106f857856106fa565b845b9050600061271061070f61ffff84168a611364565b610719919061137b565b90506001600160801b038416158061073857506001600160801b038516155b1561074657915061059a9050565b600088856001600160801b03167f0000000000000000000000000000000000000000000000000000000000000000886001600160801b03166107889190611364565b610792919061137b565b61079c9190611325565b90508181116107ab57816107ad565b805b9998505050505050505050565b60008415610807576127108261ffff16846001600160801b0316866001600160801b0316886107e99190611364565b6107f3919061137b565b6107fd9190611364565b61059a919061137b565b949350505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038216610886576040516306b7a93160e41b815260040160405180910390fd5b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146108d3576040519150601f19603f3d011682016040523d82523d6000602084013e6108d8565b606091505b50509050806101dc57604051631196f20d60e21b81526001600160a01b03841660048201526024810183905260440161023e565b6001600160a01b038216610933576040516306b7a93160e41b815260040160405180910390fd5b6101dc6001600160a01b0384168383610d50565b6109816040518060a001604052806000815260200160008152602001600015158152602001600063ffffffff168152602001600081525090565b60008590036109a25760405162575ea160e01b815260040160405180910390fd5b600080805b87831015610c725760003681806109bf8d8d89610da2565b99509195509350915086905060001960ff851601610a7f578a156109fb5760405163052e551560e01b815260ff8516600482015260240161023e565b600080610a088585610df8565b915091508b8015610a2257506000816001600160801b0316115b15610a455760405163052e551560e01b815260ff8716600482015260240161023e565b806001600160801b03168a600001818151610a609190611325565b905250610a766001600160801b03831689611325565b97505050610c69565b60011960ff851601610ae3578a15610aaf5760405163052e551560e01b815260ff8516600482015260240161023e565b6000610abb8484610e5d565b509050806001600160801b031689600001818151610ad99190611325565b905250610c699050565b60021960ff851601610ba8578915610b135760405163052e551560e01b815260ff8516600482015260240161023e565b600080610b208585610e9b565b9250925050816001600160801b0316600003610b4f5760405163a169d0e160e01b815260040160405180910390fd5b806001600160801b03168a600001818151610b6a9190611325565b90525060208a0180516001600160801b0384169190610b8a908390611325565b90525060808a01805190610b9d8261139d565b815250505050610c69565b60031960ff851601610bc05760016040890152610c69565b60041960ff851601610c4b578a610bef5760405163052e551560e01b815260ff8516600482015260240161023e565b6000806000610bfe8686610f0f565b925092509250806001600160801b03168b600001818151610c1f9190611325565b905250610c356001600160801b0384168a611325565b9850610c4182896113b6565b9750505050610c69565b60405163052e551560e01b815260ff8516600482015260240161023e565b505050506109a7565b828814610c9557604051634c83bb7560e11b81526004810184905260240161023e565b83516001600160801b0386161015610cd45783516040516242670160e11b815260048101919091526001600160801b038616602482015260440161023e565b81600003610cf557604051630e5eb8f360e41b815260040160405180910390fd5b868015610d06575063ffffffff8116155b15610d24576040516336619f8360e11b815260040160405180910390fd5b8184602001818151610d369190611325565b90525063ffffffff16606084015250909695505050505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526101dc908490610f7a565b600036816001840181610db6888884610ff1565b600292909201919050610dca888884611018565b94506001820161ffff82168301610de381838b8d6113da565b979b909a50969850505061ffff160193505050565b60008060108314801590610e0d575060208314155b15610e2b57604051634796aee160e01b815260040160405180910390fd5b610e378484600061103d565b915060208314610e48576000610e54565b610e548484601061103d565b90509250929050565b60008060308314610e81576040516361d0c2c760e11b815260040160405180910390fd5b610e8d8484600061103d565b9150610e5484846010611064565b6000808060128414801590610eb1575060228414155b15610ecf57604051638b4aa70b60e01b815260040160405180910390fd5b610edb85856000610ff1565b9250610ee98585600261103d565b915060228414610efa576000610f06565b610f068585601261103d565b90509250925092565b6000808060148414801590610f25575060248414155b15610f4357604051636f5bff2160e11b815260040160405180910390fd5b610f4f8585600061103d565b9250610f5d8585601061107f565b915060248414610f6e576000610f06565b610f068585601461103d565b600080602060008451602086016000885af180610f9d576040513d6000823e3d81fd5b50506000513d91508115610fb5578060011415610fc2565b6001600160a01b0384163b155b15610feb57604051635274afe760e01b81526001600160a01b038516600482015260240161023e565b50505050565b600060028201611003818486886113da565b61100c91611404565b60f01c95945050505050565b600083838381811061102c5761102c611434565b919091013560f81c95945050505050565b60006010820161104f818486886113da565b6110589161144a565b60801c95945050505050565b600060208201611076818486886113da565b61059a91611481565b600060048201611091818486886113da565b61109a9161149f565b60e01c95945050505050565b80356001600160a01b03811681146110bd57600080fd5b919050565b6000806000606084860312156110d757600080fd5b6110e0846110a6565b92506110ee602085016110a6565b9150604084013590509250925092565b600060a0828403121561111057600080fd5b50919050565b60008083601f84011261112857600080fd5b50813567ffffffffffffffff81111561114057600080fd5b60208301915083602082850101111561115857600080fd5b9250929050565b60008060008084860361012081121561117757600080fd5b606081121561118557600080fd5b5084935061119686606087016110fe565b925061010085013567ffffffffffffffff8111156111b357600080fd5b6111bf87828801611116565b95989497509550505050565b60008060008061016085870312156111e257600080fd5b6111ec86866110fe565b93506111fb8660a087016110fe565b925061014085013567ffffffffffffffff8111156111b357600080fd5b60006020828403121561122a57600080fd5b611233826110a6565b9392505050565b60006020828403121561124c57600080fd5b813567ffffffffffffffff8116811461123357600080fd5b6001600160801b038116811461060057600080fd5b60006020828403121561128b57600080fd5b813561123381611264565b600080600080608085870312156112ac57600080fd5b8451935060208501516112be81611264565b60408601519093506112cf81611264565b60608601519092506112e081611264565b939692955090935050565b6000602082840312156112fd57600080fd5b813561ffff8116811461123357600080fd5b634e487b7160e01b600052601160045260246000fd5b808201808211156113385761133861130f565b92915050565b60006020828403121561135057600080fd5b813563ffffffff8116811461123357600080fd5b80820281158282048414176113385761133861130f565b60008261139857634e487b7160e01b600052601260045260246000fd5b500490565b6000600182016113af576113af61130f565b5060010190565b63ffffffff8181168382160190808211156113d3576113d361130f565b5092915050565b600080858511156113ea57600080fd5b838611156113f757600080fd5b5050820193919092039150565b6001600160f01b0319813581811691600285101561142c5780818660020360031b1b83161692505b505092915050565b634e487b7160e01b600052603260045260246000fd5b6fffffffffffffffffffffffffffffffff19813581811691601085101561142c5760109490940360031b84901b1690921692915050565b8035602083101561133857600019602084900360031b1b1692915050565b6001600160e01b0319813581811691600485101561142c5760049490940360031b84901b169092169291505056fea26469706673582212204c4f5a98e90d6be97596e1e9898b33b6b2d63dca8ef38882eb89a478158f7b6b64736f6c6343000816003360c06040523480156200001157600080fd5b5060405162003bf738038062003bf78339810160408190526200003491620004de565b6001805460ff61ffff60e81b01191661017760ed1b179055600280546001600160a01b0319166001600160a01b03861617905582828686612ee060008660005b8551811015620000d657620000cc7f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de878381518110620000b857620000b8620005c2565b60200260200101516200028060201b60201c565b5060010162000074565b5060005b815181101562000128576200011e7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775838381518110620000b857620000b8620005c2565b50600101620000da565b505050505050806001600160401b03166000036200015957604051635f86e17760e01b815260040160405180910390fd5b806001600160401b0316825110156200019f5781516040516378e2c15760e11b81526001600160401b039182166004820152908216602482015260440160405180910390fd5b6000805b835181101562000231576000848281518110620001c457620001c4620005c2565b60200260200101519050826001600160a01b0316816001600160a01b03161162000201576040516305fa937f60e11b815260040160405180910390fd5b6001600160a01b0381166000908152600460205260409020805460ff1916600190811790915590925001620001a3565b50509051600580546001600160401b0393841668010000000000000000026001600160801b0319909116939092169290921717905550505063ffffffff92831660805250501660a05262000615565b60007f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca83148015620002d357506000838152602081815260408083206001600160a01b038616845290915290205460ff16155b15620003205760018054601590620002fb90600160a81b90046001600160401b0316620005d8565b91906101000a8154816001600160401b0302191690836001600160401b031602179055505b6200032c838362000338565b50600190505b92915050565b6000828152602081815260408083206001600160a01b038516845290915281205460ff16620003dd576000838152602081815260408083206001600160a01b03861684529091529020805460ff19166001179055620003943390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600162000332565b50600062000332565b805163ffffffff81168114620003fb57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b80516001600160a01b0381168114620003fb57600080fd5b600082601f8301126200044057600080fd5b815160206001600160401b03808311156200045f576200045f62000400565b8260051b604051601f19603f8301168101818110848211171562000487576200048762000400565b6040529384526020818701810194908101925087851115620004a857600080fd5b6020870191505b84821015620004d357620004c38262000416565b83529183019190830190620004af565b979650505050505050565b600080600080600080600060e0888a031215620004fa57600080fd5b6200050588620003e6565b96506200051560208901620003e6565b60408901519096506001600160401b03808211156200053357600080fd5b620005418b838c016200042e565b96506200055160608b0162000416565b955060808a01519150808211156200056857600080fd5b620005768b838c016200042e565b945060a08a0151915080821682146200058e57600080fd5b60c08a015191935080821115620005a457600080fd5b50620005b38a828b016200042e565b91505092959891949750929550565b634e487b7160e01b600052603260045260246000fd5b60006001600160401b038281166002600160401b031981016200060b57634e487b7160e01b600052601160045260246000fd5b6001019392505050565b60805160a0516135a0620006576000396000818161081d01528181611d5a0152611e8f01526000818161076d015281816112b00152611b9801526135a06000f3fe6080604052600436106102505760003560e01c806395d376d711610139578063cd88b903116100b6578063e395eb5c1161007a578063e395eb5c1461080b578063f010cb231461083f578063f3b4ebd01461085f578063f42ed2ed1461087f578063fd62e75014610892578063fdb9b0f1146108b257600080fd5b8063cd88b9031461073b578063cf34c7681461075b578063d2ae2104146107a4578063d547741f146107cb578063dafe0ccc146107eb57600080fd5b8063c358de0a116100fd578063c358de0a14610688578063c416aa51146106a8578063c5e193cd146106cd578063c7a823e0146106ed578063c7b2370b1461071b57600080fd5b806395d376d71461058b5780639e9449651461059e578063a217fddf14610623578063aef18bf714610638578063b143044b1461066857600080fd5b806330bb3aac116101d25780635c975abb116101965780635c975abb146104ab578063724e78da146104c3578063736c0d5b146104e3578063741bef1a146105135780638585c9451461054b57806391d148541461056b57600080fd5b806330bb3aac1461040b57806331cb61051461042b57806336568abe1461044b57806352d3b8711461046b5780635553fb8e1461048b57600080fd5b80631703a018116102195780631703a01814610321578063248a9ca31461036057806326e67a371461039e5780632de11376146103cb5780632f2ff15d146103eb57600080fd5b8062bf2e801461025557806301e336671461028f57806301ffc9a7146102b15780631095b6d7146102e157806316c38b3c14610301575b600080fd5b34801561026157600080fd5b5060015461027790600160e81b900461ffff1681565b60405161ffff90911681526020015b60405180910390f35b34801561029b57600080fd5b506102af6102aa366004612893565b6108d2565b005b3480156102bd57600080fd5b506102d16102cc3660046128d4565b6108fb565b6040519015158152602001610286565b3480156102ed57600080fd5b506102af6102fc366004612893565b610932565b34801561030d57600080fd5b506102af61031c366004612915565b610a34565b34801561032d57600080fd5b5060055461034890600160401b90046001600160401b031681565b6040516001600160401b039091168152602001610286565b34801561036c57600080fd5b5061039061037b366004612930565b60009081526020819052604090206001015490565b604051908152602001610286565b3480156103aa57600080fd5b506103be6103b936600461295d565b610a59565b6040516102869190612978565b3480156103d757600080fd5b506102d16103e63660046129bf565b610ae0565b3480156103f757600080fd5b506102af6104063660046129dc565b610b65565b34801561041757600080fd5b50610390610426366004612a6b565b610c3a565b34801561043757600080fd5b506102af610446366004612ae2565b610d52565b34801561045757600080fd5b506102af6104663660046129dc565b610d7c565b34801561047757600080fd5b506102af610486366004612b17565b610d95565b34801561049757600080fd5b506103906104a6366004612b9d565b610f0e565b3480156104b757600080fd5b5060015460ff166102d1565b3480156104cf57600080fd5b506102af6104de3660046129bf565b611026565b3480156104ef57600080fd5b506102d16104fe3660046129bf565b60046020526000908152604090205460ff1681565b34801561051f57600080fd5b50600254610533906001600160a01b031681565b6040516001600160a01b039091168152602001610286565b34801561055757600080fd5b506102af610566366004612bf3565b611094565b34801561057757600080fd5b506102d16105863660046129dc565b6110c0565b610390610599366004612c26565b6110e9565b3480156105aa57600080fd5b506105f26105b936600461295d565b6006602052600090815260409020546001600160401b03811690600160401b810461ffff1690600160501b90046001600160801b031683565b604080516001600160401b03909416845261ffff90921660208401526001600160801b031690820152606001610286565b34801561062f57600080fd5b50610390600081565b34801561064457600080fd5b506102d1610653366004612930565b60076020526000908152604090205460ff1681565b34801561067457600080fd5b506102af610683366004612cd2565b61125f565b34801561069457600080fd5b506102af6106a3366004612d13565b611514565b3480156106b457600080fd5b506001546105339061010090046001600160a01b031681565b3480156106d957600080fd5b506103906106e8366004612b9d565b61157c565b3480156106f957600080fd5b5061070d610708366004612d2e565b6116e9565b604051610286929190612d82565b34801561072757600080fd5b506102af6107363660046129bf565b6118c7565b34801561074757600080fd5b506102af610756366004612db6565b611935565b34801561076757600080fd5b5061078f7f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff9091168152602001610286565b3480156107b057600080fd5b5060015461034890600160a81b90046001600160401b031681565b3480156107d757600080fd5b506102af6107e63660046129dc565b611974565b3480156107f757600080fd5b506102af610806366004612893565b611a28565b34801561081757600080fd5b5061078f7f000000000000000000000000000000000000000000000000000000000000000081565b34801561084b57600080fd5b5061039061085a366004612dfb565b611add565b34801561086b57600080fd5b506102af61087a366004612e65565b611b19565b61039061088d366004612ea1565b611cc7565b34801561089e57600080fd5b50600554610348906001600160401b031681565b3480156108be57600080fd5b506103906108cd366004612ea1565b611e14565b60008051602061352b8339815191526108ea81611f45565b6108f5848484611f4f565b50505050565b60006001600160e01b03198216637965db0b60e01b148061092c57506301ffc9a760e01b6001600160e01b03198316145b92915050565b60008051602061352b83398151915261094a81611f45565b61096260008051602061350b833981519152856110c0565b61097f57604051635ee08b9760e01b815260040160405180910390fd5b604051637ecdf29160e11b81526001600160a01b0384811660048301526024820184905285169063fd9be52290604401600060405180830381600087803b1580156109c957600080fd5b505af11580156109dd573d6000803e3d6000fd5b5050604080516001600160a01b038089168252871660208201529081018590527f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb925060600190505b60405180910390a150505050565b6000610a3f81611f45565b8115610a5157610a4d611f77565b5050565b610a4d611fcb565b63ffffffff8116600090815260036020908152604091829020805483518184028101840190945280845260609392830182828015610ad457602002820191906000526020600020906000905b825461010083900a900460ff16815260206001928301818104948501949093039092029101808411610aa55790505b50505050509050919050565b6000610b0c7f4270fae16c6d150d00e80b689daca99e8073b1838ff2b6063a37be9d851283e4836110c0565b15610b1957506000919050565b600154600160a81b90046001600160401b03161580610b4b5750610b4b60008051602061354b833981519152836110c0565b15610b5857506001919050565b506000919050565b919050565b8160008051602061354b833981519152811480610ba157507f4270fae16c6d150d00e80b689daca99e8073b1838ff2b6063a37be9d851283e481145b80610bb9575060008051602061350b83398151915281145b15610be357303314610bde57604051637d5d391d60e11b815260040160405180910390fd5b610c30565b60008051602061352b8339815191528103610c0f57610bde60008051602061352b833981519152611f45565b604051634a7ee1b960e11b8152600481018290526024015b60405180910390fd5b6108f58383612004565b600083610c4681610ae0565b610c6357604051634ab5ebcd60e01b815260040160405180910390fd5b6040805160c0810182526002546001600160a01b03908116825263ffffffff8a1660208084018290526001600160401b03808c16858701528a84166060860152600554600160401b900416608085015260015461ffff600160e81b82041660a086015260009283526006909152908490209351637bfa20a960e01b8152929361010090910490911691637bfa20a991610d05918591908a908a90600401613004565b602060405180830381865afa158015610d22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d469190613034565b98975050505050505050565b303314610d7257604051637d5d391d60e11b815260040160405180910390fd5b610a4d8282612088565b60405163dec9f03160e01b815260040160405180910390fd5b60008051602061352b833981519152610dad81611f45565b60005b82811015610ecf5736848483818110610dcb57610dcb61304d565b90506080020190506040518060600160405280826020016020810190610df19190612bf3565b6001600160401b03168152602001610e0f6060840160408501612d13565b61ffff168152602001610e28608084016060850161307a565b6001600160801b0316905260066000610e44602085018561295d565b63ffffffff1681526020808201929092526040908101600020835181549385015194909201516001600160801b0316600160501b026fffffffffffffffffffffffffffffffff60501b1961ffff909516600160401b0269ffffffffffffffffffff199094166001600160401b0390931692909217929092179290921691909117905550600101610db0565b507f7dd21e42791b013d1929e86f0c59085e4fca24251f0f1aa81917b3b1611766e08383604051610f01929190613095565b60405180910390a1505050565b600081610f1a81610ae0565b610f3757604051634ab5ebcd60e01b815260040160405180910390fd5b6040805160c0810182526002546001600160a01b03908116825261ffff808a1660208085018290526001600160401b03808b16868801528985166060870152600554600160401b9004166080860152600154600160e81b810490931660a0860152600091825260068152858220865191820187529181529451637bfa20a960e01b8152939461010090920490921692637bfa20a992610fda92869260040161316f565b602060405180830381865afa158015610ff7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061101b9190613034565b979650505050505050565b60008051602061352b83398151915261103e81611f45565b600280546001600160a01b0319166001600160a01b0384169081179091556040519081527ff724a45d041687842411f2b977ef22ab8f43c8f1104f4592b42a00f9b34a643d906020015b60405180910390a15050565b3033146110b457604051637d5d391d60e11b815260040160405180910390fd5b6110bd816121e3565b50565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b600060008051602061350b83398151915261110381611f45565b61111360a08601608087016129bf565b61111c81610ae0565b61113957604051634ab5ebcd60e01b815260040160405180910390fd5b6040805160c081019091526002546001600160a01b03168152600090602080820190611167908a018a61295d565b63ffffffff16815260200161118260808a0160608b01612bf3565b6001600160401b031681526020016111a060a08a0160808b016129bf565b6001600160a01b039081168252600554600160401b90046001600160401b0316602080840191909152600154600160e81b810461ffff16604090940193909352929350610100909104169063df2b057e908390600690600090611205908d018d61295d565b63ffffffff1663ffffffff16815260200190815260200160002089896040518563ffffffff1660e01b81526004016112409493929190613004565b6020604051808303816000875af1158015610ff7573d6000803e3d6000fd5b60008051602061352b83398151915261127781611f45565b60005b828110156108f557368484838181106112955761129561304d565b90506020028101906112a791906131a8565b905063ffffffff7f0000000000000000000000000000000000000000000000000000000000000000166112dd602083018361295d565b63ffffffff16146112ee575061150c565b428160600135116112ff575061150c565b6000611338611311602084018461295d565b61132160408501602086016129bf565b61132e60408601866131c8565b8660600135611add565b9050600061134d8261070860808601866131c8565b50905080611390576040518481527fd6d90193101048cc1b6edcdc2348f5acf7a4a4a97d3e7b668b74cb7602ab3ebc9060200160405180910390a150505061150c565b60006113b06113a260408601866131c8565b6113ab9161320e565b6122b1565b9050801561142b5760008381526007602052604090205460ff1615611411577f9bb9bddbdf537a2104255307230b323d7982f4512ee8e5bd15df62ddca50ab978484604051611400929190613283565b60405180910390a15050505061150c565b6000838152600760205260409020805460ff191660011790555b60008061143e60408701602088016129bf565b6001600160a01b031661145460408801886131c8565b60405161146292919061331e565b6000604051808303816000865af19150503d806000811461149f576040519150601f19603f3d011682016040523d82523d6000602084013e6114a4565b606091505b5091509150816115055782156114cb576000858152600760205260409020805460ff191690555b7fdc8cdd96296241bbefda4a8e18ad2e0985a8da6495b34d409cfc4c886ee3b0cf87826040516114fc92919061332e565b60405180910390a15b5050505050505b60010161127a565b60008051602061352b83398151915261152c81611f45565b6001805461ffff60e81b1916600160e81b61ffff8516908102919091179091556040519081527f7af0ac740036ffb1c97b03697859d729e80a44ae5030543d64971c313565ab4d90602001611088565b600060008051602061350b83398151915261159681611f45565b826115a081610ae0565b6115bd57604051634ab5ebcd60e01b815260040160405180910390fd5b6040805160c0810182526002546001600160a01b03908116825261ffff808b1660208085018290526001600160401b03808c16868801528a85166060870152600554600160401b9004166080860152600154600160e81b810490931660a0860152600091825260068152858220865191820187529181529451636f9582bf60e11b815293946101009092049092169263df2b057e9261166092869260040161316f565b6020604051808303816000875af115801561167f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116a39190613034565b93507f87e46b0a6199bc734632187269a103c05714ee0adae5b28f30723955724f37ef846040516116d691815260200190565b60405180910390a1505050949350505050565b600554600090819061170c90600160401b90046001600160401b0316604161335d565b831461171e57506000905060016118bf565b6000611777866040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b90506000805b600554600160401b90046001600160401b03168110156118b35736600088886117a785604161335d565b906117b3866001613374565b6117be90604161335d565b926117cb93929190613387565b915091506000806118128785858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061230792505050565b509092509050600081600381111561182c5761182c612d6c565b14611845576000600198509850505050505050506118bf565b856001600160a01b0316826001600160a01b031611611872576000600298509850505050505050506118bf565b6001600160a01b03821660009081526004602052604090205460ff166118a6576000600398509850505050505050506118bf565b509350505060010161177d565b50600160009350935050505b935093915050565b60008051602061352b8339815191526118df81611f45565b60018054610100600160a81b0319166101006001600160a01b038516908102919091179091556040519081527f1399be28223800f8669b3ba5f8721d9fc16fc4e8d0bbf98378791c8c5a3015e090602001611088565b60008051602061352b83398151915261194d81611f45565b63ffffffff8416600090815260036020526040902061196d9084846127c0565b5050505050565b8160008051602061354b8339815191528114806119b057507f4270fae16c6d150d00e80b689daca99e8073b1838ff2b6063a37be9d851283e481145b806119c8575060008051602061350b83398151915281145b156119f2573033146119ed57604051637d5d391d60e11b815260040160405180910390fd5b611a1e565b60008051602061352b8339815191528103610c0f576119ed60008051602061352b833981519152611f45565b6108f58383612354565b60008051602061352b833981519152611a4081611f45565b611a5860008051602061350b833981519152856110c0565b611a7557604051635ee08b9760e01b815260040160405180910390fd5b6040516303d8c5ef60e11b81526001600160a01b038481166004830152602482018490528516906307b18bde90604401600060405180830381600087803b158015611abf57600080fd5b505af1158015611ad3573d6000803e3d6000fd5b5050505050505050565b60008585838686604051602001611af89594939291906133b1565b60405160208183030381529060405280519060200120905095945050505050565b42816060013511611b3d57604051630bbaf26360e01b815260040160405180910390fd5b30611b4e60408301602084016129bf565b6001600160a01b031614611b9157611b6c60408201602083016129bf565b604051631ce0bfcd60e01b81526001600160a01b039091166004820152602401610c27565b63ffffffff7f000000000000000000000000000000000000000000000000000000000000000016611bc5602083018361295d565b63ffffffff1614611bff57611bdd602082018261295d565b60405163134bf0e160e11b815263ffffffff9091166004820152602401610c27565b6000611c11611311602084018461295d565b90506000611c268261070860808601866131c8565b50905080611c4757604051630af656f760e11b815260040160405180910390fd5b60008281526007602052604090205460ff1615611c7a57604051634eb522d360e11b815260048101839052602401610c27565b60008281526007602052604090819020805460ff191660011790556108f59060008051602061352b83398151915290611cb5908601866131c8565b810190611cc291906129bf565b612004565b600060008051602061350b833981519152611ce181611f45565b88611ceb81610ae0565b611d0857604051634ab5ebcd60e01b815260040160405180910390fd5b604080516080810182526002546001600160a01b0390811682528c8116602080840191909152600554600160401b90046001600160401b031683850152600154600160e81b810461ffff1660608501527f000000000000000000000000000000000000000000000000000000000000000063ffffffff166000908152600690925290849020935163bbc5a33b60e01b815292936101009091049091169163bbc5a33b91611dc2918591908d908d908d908d906004016133f7565b6020604051808303816000875af1158015611de1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e059190613034565b9b9a5050505050505050505050565b600087611e2081610ae0565b611e3d57604051634ab5ebcd60e01b815260040160405180910390fd5b604080516080810182526002546001600160a01b0390811682528b8116602080840191909152600554600160401b90046001600160401b031683850152600154600160e81b810461ffff1660608501527f000000000000000000000000000000000000000000000000000000000000000063ffffffff166000908152600690925290849020935162d358b360e81b815292936101009091049091169163d358b30091611ef6918591908c908c908c908c906004016133f7565b602060405180830381865afa158015611f13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f379190613034565b9a9950505050505050505050565b6110bd81336123cc565b6001600160a01b038316611f6c57611f678282612405565b505050565b611f678383836124b2565b611f7f6124ed565b6001805460ff1916811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b6040516001600160a01b03909116815260200160405180910390a1565b611fd3612513565b6001805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33611fae565b600060008051602061354b8339815191528314801561202a575061202883836110c0565b155b15612074576001805460159061204f90600160a81b90046001600160401b031661347a565b91906101000a8154816001600160401b0302191690836001600160401b031602179055505b61207e8383612536565b5060019392505050565b6001600160a01b03821660009081526004602052604090205481151560ff9091161515036120dc576040516302c6469560e51b81526001600160a01b03831660048201528115156024820152604401610c27565b6001600160a01b0382166000908152600460205260408120805460ff1916831515179055816121225760055461211d906001906001600160401b03166134a0565b612139565b600554612139906001600160401b031660016134c7565b6005549091506001600160401b03600160401b9091048116908216811115612187576040516378e2c15760e11b81526001600160401b03808416600483015282166024820152604401610c27565b6005805467ffffffffffffffff19166001600160401b038416179055604080516001600160a01b038616815284151560208201527f863d338cad74814b108a06288ad5e0e80d56495e0332238b1d2cdcfa0ca8e5ce9101610a26565b806001600160401b031660000361220d57604051635f86e17760e01b815260040160405180910390fd5b6005546001600160401b03908116908216811015612251576040516378e2c15760e11b81526001600160401b03808316600483015283166024820152604401610c27565b600580546fffffffffffffffff00000000000000001916600160401b6001600160401b038516908102919091179091556040519081527fb600f3cf7f38a4b49bb0c75f722ef69f7e3e39ef3bb4aa8207fd86e724a2324990602001611088565b60006001600160e01b03198216630111a9b760e11b148015906122e557506001600160e01b0319821663ab750e7560e01b14155b801561092c57506001600160e01b0319821663704316e560e01b141592915050565b600080600083516041036123415760208401516040850151606086015160001a612333888285856125c8565b95509550955050505061234d565b50508151600091506002905b9250925092565b600060008051602061354b83398151915283148015612378575061237883836110c0565b156123c2576001805460159061239d90600160a81b90046001600160401b03166134e7565b91906101000a8154816001600160401b0302191690836001600160401b031602179055505b61207e8383612697565b6123d682826110c0565b610a4d5760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401610c27565b6001600160a01b03821661242c576040516306b7a93160e41b815260040160405180910390fd5b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612479576040519150601f19603f3d011682016040523d82523d6000602084013e61247e565b606091505b5050905080611f6757604051631196f20d60e21b81526001600160a01b038416600482015260248101839052604401610c27565b6001600160a01b0382166124d9576040516306b7a93160e41b815260040160405180910390fd5b611f676001600160a01b0384168383612702565b60015460ff16156125115760405163d93c066560e01b815260040160405180910390fd5b565b60015460ff1661251157604051638dfc202b60e01b815260040160405180910390fd5b600061254283836110c0565b6125c0576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556125783390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161092c565b50600061092c565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115612603575060009150600390508261268d565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015612657573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166126835750600092506001915082905061268d565b9250600091508190505b9450945094915050565b60006126a383836110c0565b156125c0576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161092c565b604080516001600160a01b03841660248201526044808201849052825180830390910181526064909101909152602080820180516001600160e01b031663a9059cbb60e01b1781528251611f67938793909260009283929183919082885af180612772576040513d6000823e3d81fd5b50506000513d9150811561278a578060011415612797565b6001600160a01b0384163b155b156108f557604051635274afe760e01b81526001600160a01b0385166004820152602401610c27565b82805482825590600052602060002090601f016020900481019282156128595791602002820160005b8382111561282a57833560ff1683826101000a81548160ff021916908360ff16021790555092602001926001016020816000010492830192600103026127e9565b80156128575782816101000a81549060ff021916905560010160208160000104928301926001030261282a565b505b50612865929150612869565b5090565b5b80821115612865576000815560010161286a565b6001600160a01b03811681146110bd57600080fd5b6000806000606084860312156128a857600080fd5b83356128b38161287e565b925060208401356128c38161287e565b929592945050506040919091013590565b6000602082840312156128e657600080fd5b81356001600160e01b0319811681146128fe57600080fd5b9392505050565b80358015158114610b6057600080fd5b60006020828403121561292757600080fd5b6128fe82612905565b60006020828403121561294257600080fd5b5035919050565b803563ffffffff81168114610b6057600080fd5b60006020828403121561296f57600080fd5b6128fe82612949565b6020808252825182820181905260009190848201906040850190845b818110156129b357835160ff1683529284019291840191600101612994565b50909695505050505050565b6000602082840312156129d157600080fd5b81356128fe8161287e565b600080604083850312156129ef57600080fd5b823591506020830135612a018161287e565b809150509250929050565b80356001600160401b0381168114610b6057600080fd5b60008083601f840112612a3557600080fd5b5081356001600160401b03811115612a4c57600080fd5b602083019150836020828501011115612a6457600080fd5b9250929050565b600080600080600060808688031215612a8357600080fd5b612a8c86612949565b9450612a9a60208701612a0c565b93506040860135612aaa8161287e565b925060608601356001600160401b03811115612ac557600080fd5b612ad188828901612a23565b969995985093965092949392505050565b60008060408385031215612af557600080fd5b8235612b008161287e565b9150612b0e60208401612905565b90509250929050565b60008060208385031215612b2a57600080fd5b82356001600160401b0380821115612b4157600080fd5b818501915085601f830112612b5557600080fd5b813581811115612b6457600080fd5b8660208260071b8501011115612b7957600080fd5b60209290920196919550909350505050565b803561ffff81168114610b6057600080fd5b60008060008060808587031215612bb357600080fd5b612bbc85612b8b565b9350612bca60208601612b8b565b9250612bd860408601612a0c565b91506060850135612be88161287e565b939692955090935050565b600060208284031215612c0557600080fd5b6128fe82612a0c565b600060a08284031215612c2057600080fd5b50919050565b600080600060408486031215612c3b57600080fd5b83356001600160401b0380821115612c5257600080fd5b612c5e87838801612c0e565b94506020860135915080821115612c7457600080fd5b50612c8186828701612a23565b9497909650939450505050565b60008083601f840112612ca057600080fd5b5081356001600160401b03811115612cb757600080fd5b6020830191508360208260051b8501011115612a6457600080fd5b60008060208385031215612ce557600080fd5b82356001600160401b03811115612cfb57600080fd5b612d0785828601612c8e565b90969095509350505050565b600060208284031215612d2557600080fd5b6128fe82612b8b565b600080600060408486031215612d4357600080fd5b8335925060208401356001600160401b03811115612d6057600080fd5b612c8186828701612a23565b634e487b7160e01b600052602160045260246000fd5b82151581526040810160048310612da957634e487b7160e01b600052602160045260246000fd5b8260208301529392505050565b600080600060408486031215612dcb57600080fd5b612dd484612949565b925060208401356001600160401b03811115612def57600080fd5b612c8186828701612c8e565b600080600080600060808688031215612e1357600080fd5b612e1c86612949565b94506020860135612e2c8161287e565b935060408601356001600160401b03811115612e4757600080fd5b612e5388828901612a23565b96999598509660600135949350505050565b600060208284031215612e7757600080fd5b81356001600160401b03811115612e8d57600080fd5b612e9984828501612c0e565b949350505050565b60008060008060008060006080888a031215612ebc57600080fd5b8735612ec78161287e565b965060208801356001600160401b0380821115612ee357600080fd5b612eef8b838c01612a23565b909850965060408a0135915080821115612f0857600080fd5b612f148b838c01612a23565b909650945060608a0135915080821115612f2d57600080fd5b50612f3a8a828b01612a23565b989b979a50959850939692959293505050565b60018060a01b0380825116835263ffffffff602083015116602084015260408201516001600160401b03808216604086015282606085015116606086015280608085015116608086015250505061ffff60a08201511660a08301525050565b546001600160401b0381168252604081811c61ffff16602084015260509190911c6001600160801b0316910152565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60006101406130138388612f4d565b61302060c0840187612fac565b8061012084015261101b8184018587612fdb565b60006020828403121561304657600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b80356001600160801b0381168114610b6057600080fd5b60006020828403121561308c57600080fd5b6128fe82613063565b6020808252818101839052600090604080840186845b8781101561311c5763ffffffff6130c183612949565b1683526001600160401b036130d7868401612a0c565b168584015261ffff6130ea858401612b8b565b168484015260606001600160801b03613104828501613063565b169084015260809283019291909101906001016130ab565b5090979650505050505050565b6000815180845260005b8181101561314f57602081850181015186830182015201613133565b506000602082860101526020601f19601f83011685010191505092915050565b600061014061317e8387612f4d565b61318b60c0840186612fac565b8061012084015261319e81840185613129565b9695505050505050565b60008235609e198336030181126131be57600080fd5b9190910192915050565b6000808335601e198436030181126131df57600080fd5b8301803591506001600160401b038211156131f957600080fd5b602001915036819003821315612a6457600080fd5b6001600160e01b031981358181169160048510156132365780818660040360031b1b83161692505b505092915050565b6000808335601e1984360301811261325557600080fd5b83016020810192503590506001600160401b0381111561327457600080fd5b803603821315612a6457600080fd5b6040815263ffffffff61329584612949565b166040820152600060208401356132ab8161287e565b6001600160a01b031660608301526132c6604085018561323e565b60a060808501526132db60e085018284612fdb565b915050606085013560a08401526132f5608086018661323e565b848303603f190160c086015261330c838284612fdb565b93505050508260208301529392505050565b8183823760009101908152919050565b828152604060208201526000612e996040830184613129565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761092c5761092c613347565b8082018082111561092c5761092c613347565b6000808585111561339757600080fd5b838611156133a457600080fd5b5050820193919092039150565b63ffffffff60e01b8660e01b1681526bffffffffffffffffffffffff198560601b1660048201528360188201528183603883013760009101603801908152949350505050565b600061012060018060a01b03808a511684528060208b0151166020850152506001600160401b0360408a015116604084015261ffff60608a01511660608401526134446080840189612fac565b8060e08401526134578184018789612fdb565b905082810361010084015261346d818587612fdb565b9998505050505050505050565b60006001600160401b0380831681810361349657613496613347565b6001019392505050565b6001600160401b038281168282160390808211156134c0576134c0613347565b5092915050565b6001600160401b038181168382160190808211156134c0576134c0613347565b60006001600160401b0382168061350057613500613347565b600019019291505056fe724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19dea49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177574845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bcaa264697066735822122024327161ffb7d62bcb3e3b78be45b9ccbc1a11373295fe0f97bd10b71bcadb8164736f6c6343000816003360c06040523480156200001157600080fd5b5060405162001eb638038062001eb68339810160408190526200003491620000cb565b33806200005b57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b62000066816200007b565b5063ffffffff90911660a05260805262000104565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008060408385031215620000df57600080fd5b825163ffffffff81168114620000f457600080fd5b6020939093015192949293505050565b60805160a051611d7e620001386000396000818161069001526106ff0152600081816107cd0152610ab80152611d7e6000f3fe6080604052600436106100ec5760003560e01c80638da5cb5b1161008a578063de0a93c311610059578063de0a93c3146102f7578063df2b057e1461033d578063f2fde38b14610350578063f5ff608f1461037057600080fd5b80638da5cb5b1461027c5780639ac23d28146102a4578063bbc5a33b146102c4578063d358b300146102d757600080fd5b806339f26dfc116100c657806339f26dfc1461020657806354fd4d5014610226578063715018a6146102475780637bfa20a91461025c57600080fd5b806301e33667146100f857806310b65f761461011a5780632565c2451461016057600080fd5b366100f357005b600080fd5b34801561010457600080fd5b506101186101133660046115c3565b610390565b005b34801561012657600080fd5b5061014d610135366004611611565b63ffffffff1660009081526001602052604090205490565b6040519081526020015b60405180910390f35b34801561016c57600080fd5b506101c761017b366004611611565b60036020526000908152604090205463ffffffff808216916001600160401b036401000000008204811692600160601b830490911691600160a01b8104821691600160c01b9091041685565b6040805163ffffffff96871681526001600160401b0395861660208201529390941693830193909352831660608201529116608082015260a001610157565b34801561021257600080fd5b5061011861022136600461165e565b6103a8565b34801561023257600080fd5b50604080516001808252602082015201610157565b34801561025357600080fd5b506101186103fa565b34801561026857600080fd5b5061014d610277366004611701565b61040e565b34801561028857600080fd5b506000546040516001600160a01b039091168152602001610157565b3480156102b057600080fd5b506101186102bf36600461176c565b61059b565b61014d6102d2366004611833565b610642565b3480156102e357600080fd5b5061014d6102f2366004611833565b61065d565b34801561030357600080fd5b50600254604080516001600160781b038084168252600160781b8404166020820152600160f01b90920461ffff1690820152606001610157565b61014d61034b366004611701565b610857565b34801561035c57600080fd5b5061011861036b3660046118ce565b61086e565b34801561037c57600080fd5b5061011861038b3660046118e9565b6108ac565b610398610929565b6103a3838383610956565b505050565b6103b0610929565b6002805461ffff909216600160f01b026001600160f01b036001600160781b03948516600160781b026001600160f01b031990941694909516939093179190911792909216179055565b610402610929565b61040c6000610979565b565b600061041d6020850185611972565b6001600160401b03166000036104645761043d6040860160208701611611565b60405163680489c560e11b815263ffffffff90911660048201526024015b60405180910390fd5b61046e83836109c9565b50600061049261048460a0880160808901611972565b6001600160401b0316610a3b565b90506000806104a460208901896118ce565b6001600160a01b03166388a4124c6104c260408b0160208c01611611565b856104d060208c018c611972565b6040516001600160e01b031960e086901b16815263ffffffff93909316600484015260248301919091526001600160401b03166044820152606401608060405180830381865afa158015610528573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061054c91906119a4565b93505050915061058f8288602001602081019061056991906119f9565b61057960c08c0160a08d016119f9565b61058960608c0160408d01611a14565b85610a49565b98975050505050505050565b6105a3610929565b8281146105c3576040516316a9d98760e31b815260040160405180910390fd5b60005b8381101561063b578282828181106105e0576105e0611a31565b905060a00201600360008787858181106105fc576105fc611a31565b90506020020160208101906106119190611611565b63ffffffff16815260208101919091526040016000206106318282611a54565b50506001016105c6565b5050505050565b600061065287878787878761065d565b979650505050505050565b600061066c6020870187611972565b6001600160401b03166000036106bd5760405163680489c560e11b815263ffffffff7f000000000000000000000000000000000000000000000000000000000000000016600482015260240161045b565b6106c783836109c9565b5060006106dd61048460608a0160408b01611972565b90506000806106ef60208b018b6118ce565b6001600160a01b03166388a4124c7f00000000000000000000000000000000000000000000000000000000000000008561072c60208e018e611972565b6040516001600160e01b031960e086901b16815263ffffffff93909316600484015260248301919091526001600160401b03166044820152606401608060405180830381865afa158015610784573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107a891906119a4565b93505050915060006107ba8989610b1d565b905060006001600160801b0383166107f27f000000000000000000000000000000000000000000000000000000000000000084611b65565b6107fc9190611b92565b905061084761080b8286611ba6565b61081b60408e0160208f016119f9565b8e606001602081019061082e91906119f9565b8e60400160208101906108419190611a14565b87610a49565b9c9b505050505050505050505050565b60006108658585858561040e565b95945050505050565b610876610929565b6001600160a01b0381166108a057604051631e4fbdf760e01b81526000600482015260240161045b565b6108a981610979565b50565b6108b4610929565b60005b818110156103a3578282828181106108d1576108d1611a31565b90506040020160200135600160000160008585858181106108f4576108f4611a31565b61090a9260206040909202019081019150611611565b63ffffffff1681526020810191909152604001600020556001016108b7565b6000546001600160a01b0316331461040c5760405163118cdaa760e01b815233600482015260240161045b565b6001600160a01b03831661096e576103a38282610bc7565b6103a3838383610c74565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000808215610a0c576000806109e0868685610caf565b604051637085244b60e01b815260ff85166004820152909650929450859350506024909101905061045b565b808314610a2f5760405163013adb8360e21b81526004810182905260240161045b565b60009150505b92915050565b6000610a3582610120610d09565b60008061ffff861615610a5c5785610a5e565b845b90506000612710610a7361ffff84168a611b65565b610a7d9190611b92565b90506001600160801b0384161580610a9c57506001600160801b038516155b15610aaa5791506108659050565b6000846001600160801b03167f0000000000000000000000000000000000000000000000000000000000000000876001600160801b0316610aeb9190611b65565b610af59190611b92565b610aff908a611ba6565b9050818111610b0e5781610b10565b805b9998505050505050505050565b600080610b2d8484610d6e610f31565b6002548151919250610b4e916001600160781b039091169061ffff16611bb9565b6001600160781b03169150806020015115610b965760025461271090610b7f90600160f01b900461ffff1684611b65565b610b899190611b92565b610b939083611ba6565b91505b806040015115610bc057600254610bbd90600160781b90046001600160781b031683611ba6565b91505b5092915050565b6001600160a01b038216610bee576040516306b7a93160e41b815260040160405180910390fd5b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114610c3b576040519150601f19603f3d011682016040523d82523d6000602084013e610c40565b606091505b50509050806103a357604051631196f20d60e21b81526001600160a01b03841660048201526024810183905260440161045b565b6001600160a01b038216610c9b576040516306b7a93160e41b815260040160405180910390fd5b6103a36001600160a01b0384168383611433565b600036816001840181610cc3888884611485565b6002830192909150610cdb90899089906003016114ac565b94506002820161ffff82168301610cf481838b8d611be4565b979b909a50969850505061ffff160193505050565b600080610d17604185611b65565b9050610d24602082611c0e565b15610d4c57610d34602082611c0e565b610d3e9082611c22565b610d49906020611ba6565b90505b80610d5984610104611ba6565b610d639190611ba6565b610bbd906020611ba6565b610d7a600185836114d1565b610d8760018560026114f9565b15610f2b5763ffffffff808516600090815260036020908152604091829020825160a081018452905480851682526001600160401b036401000000008204811693830193909352600160601b810490921692810192909252600160a01b810483166060830152600160c01b90049091166080820152828415610eab5781602001516001600160401b0316846001600160401b03161115610e6757815160208301516103e89163ffffffff1690610e3d9087611c35565b610e479190611c55565b610e519190611c78565b8260400151610e609190611c9e565b9050610eab565b6103e8826000015163ffffffff16858460200151610e859190611c35565b610e8f9190611c55565b610e999190611c78565b8260400151610ea89190611c35565b90505b42826060015163ffffffff1682610ec29190611c9e565b6001600160401b03161080610ef357506080820151610ee79063ffffffff1642611ba6565b816001600160401b0316115b15610f2857604051630c5a8d2360e01b815263ffffffff871660048201526001600160401b038216602482015260440161045b565b50505b50505050565b604080516060810182526000808252602082018190529181018290529080858186610f5d826002611ba6565b92610f6a93929190611be4565b610f7391611cbe565b60f01c9050610f83600283611ba6565b915061ffff8116600114610faa5760405163a9146eeb60e01b815260040160405180910390fd5b610fb5600283611ba6565b91506000868387610fc7826002611ba6565b92610fd493929190611be4565b610fdd91611cbe565b60f01c9050610fed600284611ba6565b92508061ffff16600003611014576040516387a7f37960e01b815260040160405180910390fd5b61ffff1683525060005b826000015161ffff168161ffff16101561121d57600086868481811061104657611046611a31565b919091013560f81c915061105d9050600184611ba6565b925060ff81166001146110835760405163a9146eeb60e01b815260040160405180910390fd5b61108e600284611ba6565b925060008784886110a0826002611ba6565b926110ad93929190611be4565b6110b691611cbe565b60f01c90506110c6600285611ba6565b935060001961ffff8216016111fa5760008885896110e5826002611ba6565b926110f293929190611be4565b6110fb91611cbe565b60f01c905061110b600286611ba6565b94508460008a828b61111e826004611ba6565b9261112b93929190611be4565b61113491611cec565b60e01c9050611144600483611ba6565b915060008b8b8481811061115a5761115a611a31565b600192013560f81c8214925061117291905084611ba6565b925060008c848d611184826008611ba6565b9261119193929190611be4565b61119a91611d1a565b60c01c90506111b083838360008f63ffffffff16565b508a92506111c591505061ffff831687611ba6565b11156111e4576040516387a7f37960e01b815260040160405180910390fd5b6111f261ffff821686611ba6565b945050611213565b60405163b968846160e01b815260040160405180910390fd5b505060010161101e565b508381101561140b57600085858381811061123a5761123a611a31565b919091013560f81c91506112519050600183611ba6565b915060ff81166001146112775760405163a9146eeb60e01b815260040160405180910390fd5b6000868387611287826002611ba6565b9261129493929190611be4565b61129d91611cbe565b60f01c90506112ad600284611ba6565b925061ffff81166001146112d45760405163b968846160e01b815260040160405180910390fd5b60008787858181106112e8576112e8611a31565b919091013560f81c91506112ff9050600185611ba6565b935060ff81166113155760016020860152611348565b60001960ff82160161132d5760016040860152611348565b60011960ff8216016111fa5760016020860181905260408601525b6000888589611358826004611ba6565b9261136593929190611be4565b61136e91611cec565b60e01c905061137e600486611ba6565b9450600089898781811061139457611394611a31565b600192013560f81c821492506113ac91905087611ba6565b955060008a878b6113be826008611ba6565b926113cb93929190611be4565b6113d491611d1a565b60c01c90506113e4600888611ba6565b96506113f783838360018d63ffffffff16565b611402601688611ba6565b96505050505050505b80841461142b576040516387a7f37960e01b815260040160405180910390fd5b509392505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526103a3908490611527565b60006002820161149781848688611be4565b6114a091611cbe565b60f01c95945050505050565b60008383838181106114c0576114c0611a31565b919091013560f81c95945050505050565b6114dc8383836114f9565b6103a3576040516350fae9eb60e01b815260040160405180910390fd5b63ffffffff808316600090815260208590526040812054909161151f9190849061159816565b949350505050565b600080602060008451602086016000885af18061154a576040513d6000823e3d81fd5b50506000513d9150811561156257806001141561156f565b6001600160a01b0384163b155b15610f2b57604051635274afe760e01b81526001600160a01b038516600482015260240161045b565b600160ff919091161b16151590565b80356001600160a01b03811681146115be57600080fd5b919050565b6000806000606084860312156115d857600080fd5b6115e1846115a7565b92506115ef602085016115a7565b9150604084013590509250925092565b63ffffffff811681146108a957600080fd5b60006020828403121561162357600080fd5b813561162e816115ff565b9392505050565b80356001600160781b03811681146115be57600080fd5b803561ffff811681146115be57600080fd5b60008060006060848603121561167357600080fd5b61167c84611635565b925061168a60208501611635565b91506116986040850161164c565b90509250925092565b6000606082840312156116b357600080fd5b50919050565b60008083601f8401126116cb57600080fd5b5081356001600160401b038111156116e257600080fd5b6020830191508360208285010111156116fa57600080fd5b9250929050565b60008060008084860361014081121561171957600080fd5b60c081121561172757600080fd5b508493506117388660c087016116a1565b92506101208501356001600160401b0381111561175457600080fd5b611760878288016116b9565b95989497509550505050565b6000806000806040858703121561178257600080fd5b84356001600160401b038082111561179957600080fd5b818701915087601f8301126117ad57600080fd5b8135818111156117bc57600080fd5b8860208260051b85010111156117d157600080fd5b6020928301965094509086013590808211156117ec57600080fd5b818701915087601f83011261180057600080fd5b81358181111561180f57600080fd5b88602060a08302850101111561182457600080fd5b95989497505060200194505050565b60008060008060008086880361012081121561184e57600080fd5b608081121561185c57600080fd5b5086955061186d88608089016116a1565b945060e08701356001600160401b038082111561188957600080fd5b6118958a838b016116b9565b90965094506101008901359150808211156118af57600080fd5b506118bc89828a016116b9565b979a9699509497509295939492505050565b6000602082840312156118e057600080fd5b61162e826115a7565b600080602083850312156118fc57600080fd5b82356001600160401b038082111561191357600080fd5b818501915085601f83011261192757600080fd5b81358181111561193657600080fd5b8660208260061b850101111561194b57600080fd5b60209290920196919550909350505050565b6001600160401b03811681146108a957600080fd5b60006020828403121561198457600080fd5b813561162e8161195d565b6001600160801b03811681146108a957600080fd5b600080600080608085870312156119ba57600080fd5b8451935060208501516119cc8161198f565b60408601519093506119dd8161198f565b60608601519092506119ee8161198f565b939692955090935050565b600060208284031215611a0b57600080fd5b61162e8261164c565b600060208284031215611a2657600080fd5b813561162e8161198f565b634e487b7160e01b600052603260045260246000fd5b60008135610a35816115ff565b8135611a5f816115ff565b63ffffffff8116905081548163ffffffff1982161783556020840135611a848161195d565b6bffffffffffffffff000000008160201b16905080836bffffffffffffffffffffffff198416171784556040850135611abc8161195d565b67ffffffffffffffff60601b606091821b166001600160a01b03199390931693909317808217831785559285013591611af4836115ff565b63ffffffff60a01b1993909316179190911760a09190911b63ffffffff60a01b16178155611b4b611b2760808401611a47565b82805463ffffffff60c01b191660c09290921b63ffffffff60c01b16919091179055565b5050565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610a3557610a35611b4f565b634e487b7160e01b600052601260045260246000fd5b600082611ba157611ba1611b7c565b500490565b80820180821115610a3557610a35611b4f565b6001600160781b03818116838216028082169190828114611bdc57611bdc611b4f565b505092915050565b60008085851115611bf457600080fd5b83861115611c0157600080fd5b5050820193919092039150565b600082611c1d57611c1d611b7c565b500690565b81810381811115610a3557610a35611b4f565b6001600160401b03828116828216039080821115610bc057610bc0611b4f565b6001600160401b03818116838216028082169190828114611bdc57611bdc611b4f565b60006001600160401b0380841680611c9257611c92611b7c565b92169190910492915050565b6001600160401b03818116838216019080821115610bc057610bc0611b4f565b6001600160f01b03198135818116916002851015611bdc5760029490940360031b84901b1690921692915050565b6001600160e01b03198135818116916004851015611bdc5760049490940360031b84901b1690921692915050565b6001600160c01b03198135818116916008851015611bdc5760089490940360031b84901b169092169291505056fea2646970667358221220d34b7cf3109d1a09d2ef9d6586b9648c558d96c099d9868a56aea4afa7c4f88e64736f6c6343000816003360e06040523480156200001157600080fd5b506040516200191f3803806200191f833981016040819052620000349162000179565b33806200005b57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b620000668162000110565b50600180546001600160a01b0319166001600160a01b038481169190911790915581166080819052600060a0526040805163416ecebf60e01b8152905163416ecebf916004808201926020929091908290030181865afa158015620000cf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000f59190620001b8565b63ffffffff1660c052505060636003556064600455620001e7565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146200017657600080fd5b50565b600080604083850312156200018d57600080fd5b82516200019a8162000160565b6020840151909250620001ad8162000160565b809150509250929050565b600060208284031215620001cb57600080fd5b815163ffffffff81168114620001e057600080fd5b9392505050565b60805160a05160c0516116ec62000233600039600061038c015260006102fb0152600081816102c7015281816105d6015281816106df015281816108e50152610aa101526116ec6000f3fe60806040526004361061014f5760003560e01c8063715018a6116100b6578063996f79c01161006f578063996f79c014610447578063aec336e61461045d578063d80e9bd91461047d578063dabca063146104aa578063f2fde38b146104ca578063fd9be522146104ea57610156565b8063715018a614610365578063726075371461037a57806372d71322146103c35780638da5cb5b146103e55780638f58aa7a14610403578063909532381461042357610156565b80634389e58f116101085780634389e58f1461025a57806354fd4d50146102895780635e280f11146102b557806361d027b3146102e95780636251b6371461031d5780636750cd4c1461034457610156565b806301ffc9a71461016f5780630e97289b146101a457806312cc947f146101dc5780631881d94d146101fe5780631c7c294e1461021a578063334993ff1461023a57610156565b3661015657005b604051632657b6c360e01b815260040160405180910390fd5b34801561017b57600080fd5b5061018f61018a366004610ee3565b61050a565b60405190151581526020015b60405180910390f35b3480156101b057600080fd5b506001546101c4906001600160a01b031681565b6040516001600160a01b03909116815260200161019b565b3480156101e857600080fd5b506101fc6101f7366004610f4e565b610541565b005b34801561020a57600080fd5b50600260405161019b9190610f8f565b34801561022657600080fd5b506002546101c4906001600160a01b031681565b34801561024657600080fd5b506101fc610255366004610fb7565b6106b3565b34801561026657600080fd5b5061027a6102753660046110d0565b6106c6565b60405161019b93929190611193565b34801561029557600080fd5b50604080516000808252602082015260029181019190915260600161019b565b3480156102c157600080fd5b506101c47f000000000000000000000000000000000000000000000000000000000000000081565b3480156102f557600080fd5b506101c47f000000000000000000000000000000000000000000000000000000000000000081565b34801561032957600080fd5b50610332600181565b60405160ff909116815260200161019b565b34801561035057600080fd5b5061018f61035f3660046111e7565b50600190565b34801561037157600080fd5b506101fc610810565b34801561038657600080fd5b506103ae7f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff909116815260200161019b565b3480156103cf57600080fd5b506103d8610824565b60405161019b9190611202565b3480156103f157600080fd5b506000546001600160a01b03166101c4565b34801561040f57600080fd5b506101fc61041e366004611235565b6108b2565b34801561042f57600080fd5b5061043960035481565b60405190815260200161019b565b34801561045357600080fd5b5061043960045481565b34801561046957600080fd5b506101fc610478366004611261565b6109a7565b34801561048957600080fd5b5061049d61049836600461127e565b6109d1565b60405161019b91906112f8565b3480156104b657600080fd5b506101fc6104c536600461130f565b610a13565b3480156104d657600080fd5b506101fc6104e5366004611261565b610a2b565b3480156104f657600080fd5b506101fc610505366004611235565b610a6e565b60006001600160e01b031982166325fc096160e21b148061053b57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6002546001600160a01b03161580159061056657506002546001600160a01b03163314155b1561058457604051631c2c85bb60e21b815260040160405180910390fd5b6000604051806060016040528061059b8585610b2e565b63ffffffff1681526020016105b08585610b51565b81526020016105bf8585610b71565b6001600160401b0316905290506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663a825d747826106068686610b94565b6106108787610ba6565b60405161061e92919061134b565b6040805191829003822060e086901b6001600160e01b0319168352845163ffffffff166004840152602085015160248401529301516001600160401b031660448201526001600160a01b039091166064820152608481019190915260a401600060405180830381600087803b15801561069657600080fd5b505af11580156106aa573d6000803e3d6000fd5b50505050505050565b6106bb610bc2565b600491909155600355565b60408051808201909152600080825260208201526060807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316331461072657604051630fd72cd960e31b815260040160405180910390fd5b61073761073287611372565b610bef565b9150845160001461074857846107d4565b600580546107559061140f565b80601f01602080910402602001604051908101604052809291908181526020018280546107819061140f565b80156107ce5780601f106107a3576101008083540402835291602001916107ce565b820191906000526020600020905b8154815290600101906020018083116107b157829003601f168201915b50505050505b90506107e08282610c47565b60405180604001604052806004548152602001856107ff576000610803565b6003545b9052969195509350915050565b610818610bc2565b6108226000610caf565b565b600580546108319061140f565b80601f016020809104026020016040519081016040528092919081815260200182805461085d9061140f565b80156108aa5780601f1061087f576101008083540402835291602001916108aa565b820191906000526020600020905b81548152906001019060200180831161088d57829003601f168201915b505050505081565b6108ba610bc2565b6001600160a01b0382166108e157604051633d3496e160e01b815260040160405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e4fe1d946040518163ffffffff1660e01b8152600401602060405180830381865afa158015610941573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109659190611443565b90506001600160a01b03811661098e576040516354c1781b60e01b815260040160405180910390fd5b6109a26001600160a01b0382168484610cff565b505050565b6109af610bc2565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b60408051808201909152600080825260208201526040518060400160405280600454815260200183610a04576000610a08565b6003545b905295945050505050565b610a1b610bc2565b6005610a2782826114a8565b5050565b610a33610bc2565b6001600160a01b038116610a6257604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b610a6b81610caf565b50565b610a76610bc2565b6001600160a01b038216610a9d57604051633d3496e160e01b815260040160405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e1758bd86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610afd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b219190611443565b90506109a2818484610d51565b6000610b3e600d60098486611567565b610b4791611591565b60e01c9392505050565b6000610b61602d600d8486611567565b610b6a916115c1565b9392505050565b6000610b81600960018486611567565b610b8a916115df565b60c01c9392505050565b6000610b6a610ba38484610d74565b90565b366000610bb68360518187611567565b915091505b9250929050565b6000546001600160a01b031633146108225760405163118cdaa760e01b8152336004820152602401610a59565b8051602080830151604080850151606080870151608088015160a089015160c08a015195519398610c3198600198919791966001600160a01b0316950161160d565b6040516020818303038152906040529050919050565b600154604051631f5dad8b60e31b81526001600160a01b039091169063faed6c5890610c799085908590600401611688565b600060405180830381600087803b158015610c9357600080fd5b505af1158015610ca7573d6000803e3d6000fd5b505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526109a2908490610d84565b6001600160a01b038316610d69576109a28282610dfb565b6109a2838383610ea8565b6000610b61605160318486611567565b600080602060008451602086016000885af180610da7576040513d6000823e3d81fd5b50506000513d91508115610dbf578060011415610dcc565b6001600160a01b0384163b155b15610df557604051635274afe760e01b81526001600160a01b0385166004820152602401610a59565b50505050565b6001600160a01b038216610e22576040516306b7a93160e41b815260040160405180910390fd5b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114610e6f576040519150601f19603f3d011682016040523d82523d6000602084013e610e74565b606091505b50509050806109a257604051631196f20d60e21b81526001600160a01b038416600482015260248101839052604401610a59565b6001600160a01b038216610ecf576040516306b7a93160e41b815260040160405180910390fd5b6109a26001600160a01b0384168383610cff565b600060208284031215610ef557600080fd5b81356001600160e01b031981168114610b6a57600080fd5b60008083601f840112610f1f57600080fd5b5081356001600160401b03811115610f3657600080fd5b602083019150836020828501011115610bbb57600080fd5b60008060208385031215610f6157600080fd5b82356001600160401b03811115610f7757600080fd5b610f8385828601610f0d565b90969095509350505050565b6020810160038310610fb157634e487b7160e01b600052602160045260246000fd5b91905290565b60008060408385031215610fca57600080fd5b50508035926020909101359150565b600060e08284031215610feb57600080fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b60405160e081016001600160401b038111828210171561102957611029610ff1565b60405290565b600082601f83011261104057600080fd5b81356001600160401b038082111561105a5761105a610ff1565b604051601f8301601f19908116603f0116810190828211818310171561108257611082610ff1565b8160405283815286602085880101111561109b57600080fd5b836020870160208301376000602085830101528094505050505092915050565b803580151581146110cb57600080fd5b919050565b6000806000606084860312156110e557600080fd5b83356001600160401b03808211156110fc57600080fd5b61110887838801610fd9565b9450602086013591508082111561111e57600080fd5b5061112b8682870161102f565b92505061113a604085016110bb565b90509250925092565b60005b8381101561115e578181015183820152602001611146565b50506000910152565b6000815180845261117f816020860160208601611143565b601f01601f19169290920160200192915050565b83518152602080850151908201526080604082015260006111b76080830185611167565b82810360608401526111c98185611167565b9695505050505050565b803563ffffffff811681146110cb57600080fd5b6000602082840312156111f957600080fd5b610b6a826111d3565b602081526000610b6a6020830184611167565b6001600160a01b0381168114610a6b57600080fd5b80356110cb81611215565b6000806040838503121561124857600080fd5b823561125381611215565b946020939093013593505050565b60006020828403121561127357600080fd5b8135610b6a81611215565b6000806000806060858703121561129457600080fd5b84356001600160401b03808211156112ab57600080fd5b6112b788838901610fd9565b955060208701359150808211156112cd57600080fd5b506112da87828801610f0d565b90945092506112ed9050604086016110bb565b905092959194509250565b81518152602080830151908201526040810161053b565b60006020828403121561132157600080fd5b81356001600160401b0381111561133757600080fd5b6113438482850161102f565b949350505050565b8183823760009101908152919050565b80356001600160401b03811681146110cb57600080fd5b600060e0823603121561138457600080fd5b61138c611007565b6113958361135b565b81526113a3602084016111d3565b60208201526113b46040840161122a565b60408201526113c5606084016111d3565b60608201526080830135608082015260a083013560a082015260c08301356001600160401b038111156113f757600080fd5b6114033682860161102f565b60c08301525092915050565b600181811c9082168061142357607f821691505b602082108103610feb57634e487b7160e01b600052602260045260246000fd5b60006020828403121561145557600080fd5b8151610b6a81611215565b601f8211156109a2576000816000526020600020601f850160051c810160208610156114895750805b601f850160051c820191505b81811015610ca757828155600101611495565b81516001600160401b038111156114c1576114c1610ff1565b6114d5816114cf845461140f565b84611460565b602080601f83116001811461150a57600084156114f25750858301515b600019600386901b1c1916600185901b178555610ca7565b600085815260208120601f198616915b828110156115395788860151825594840194600190910190840161151a565b50858210156115575787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000808585111561157757600080fd5b8386111561158457600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156115b95780818660040360031b1b83161692505b505092915050565b8035602083101561053b57600019602084900360031b1b1692915050565b6001600160c01b031981358181169160088510156115b95760089490940360031b84901b1690921692915050565b60ff60f81b8960f81b1681526001600160401b0360c01b8860c01b166001820152600063ffffffff60e01b808960e01b16600984015287600d840152808760e01b16602d840152508460318301528360518301528251611674816071850160208701611143565b919091016071019998505050505050505050565b60408152600061169b6040830185611167565b82810360208401526116ad8185611167565b9594505050505056fea2646970667358221220c3e86e5a7f47955117c968f35183229c2a822980b5af2d2973f411f36b4f38a564736f6c63430008160033608060405234801561001057600080fd5b506107d2806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063e5c5e9a314610030575b600080fd5b61004361003e366004610529565b61005a565b6040516100519291906105eb565b60405180910390f35b6060806100678484610072565b915091509250929050565b606080600283101561009f5760405163196499c760e21b8152600060048201526024015b60405180910390fd5b60006100ae6002828688610619565b6100b791610643565b60f01c90506002600219820161021f578060005b868310156101c45760006100e460018501858a8c610619565b6100ed91610673565b60f81c9050600081900361011757604051636780cfaf60e01b815260006004820152602401610096565b8160ff1660000361012a57809150610167565b8160ff168160ff16146101675736600061014686868c8e610619565b915091506101578989868585610236565b9099509750859450919250829150505b600184019360009061017e90600301868b8d610619565b61018791610643565b60f01c905060008190036101b15760405163196499c760e21b815260048101869052602401610096565b8060020161ffff168501945050506100cb565b8287146101e75760405163196499c760e21b815260048101849052602401610096565b6002871115610218573660006101ff85858b8d610619565b915091506102108888858585610236565b909850965050505b505061022d565b61022a828787610356565b93505b50509250929050565b60608060001960ff8616016102b35786511561027557868484604051602001610261939291906106a1565b6040516020818303038152906040526102ac565b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050505b965061034b565b60011960ff86160161032d578551156102ef578584846040516020016102db939291906106a1565b604051602081830303815290604052610326565b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050505b955061034b565b604051636780cfaf60e01b815260ff86166004820152602401610096565b509495939450505050565b606060001961ffff8516016103f65760228214610386576040516301b8ca5560e31b815260040160405180910390fd5b60006103a7610399602260028688610619565b6103a2916106c9565b6104e8565b604051600160f81b60208201819052601160f01b602183015260238201526001600160801b0319608083901b1660248201529091506034016040516020818303038152906040529150506104e1565b60011961ffff8516016104c2576042821115806104135750606282115b15610431576040516360493e2b60e11b815260040160405180910390fd5b6000610444610399602260028688610619565b90506000610459610399604260228789610619565b90506000604119850161046f866042818a610619565b610478916106c9565b60405160086020938403029190911c92506104a9916001916011918391889183916031916002918b918b91016106e8565b60405160208183030381529060405293505050506104e1565b604051630417051360e41b815261ffff85166004820152602401610096565b9392505050565b60006fffffffffffffffffffffffffffffffff821115610525576040516306dfcc6560e41b81526080600482015260248101839052604401610096565b5090565b6000806020838503121561053c57600080fd5b823567ffffffffffffffff8082111561055457600080fd5b818501915085601f83011261056857600080fd5b81358181111561057757600080fd5b86602082850101111561058957600080fd5b60209290920196919550909350505050565b60005b838110156105b657818101518382015260200161059e565b50506000910152565b600081518084526105d781602086016020860161059b565b601f01601f19169290920160200192915050565b6040815260006105fe60408301856105bf565b828103602084015261061081856105bf565b95945050505050565b6000808585111561062957600080fd5b8386111561063657600080fd5b5050820193919092039150565b6001600160f01b0319813581811691600285101561066b5780818660020360031b1b83161692505b505092915050565b6001600160f81b0319813581811691600185101561066b5760019490940360031b84901b1690921692915050565b600084516106b381846020890161059b565b8201838582376000930192835250909392505050565b803560208310156106e257600019602084900360031b1b165b92915050565b60f88a811b6001600160f81b0319908116835260f08b901b6001600160f01b031916600184015289821b81166003840152608089901b6001600160801b03191660048401529087901b1660148201526000610752601583018760f01b6001600160f01b0319169052565b61076b601783018660f81b6001600160f81b0319169052565b610784601883018560801b6001600160801b0319169052565b5060288101919091526048019897505050505050505056fea2646970667358221220994aaf0c18254f983fac2634c8bb3f9ecd3d5348f39af4ed525562428cb6fc4f64736f6c63430008160033a2646970667358221220f816db6b22b5b243c29227006d163edcd50ab724067341f5bdea55a24992a23e64736f6c63430008160033608060405234801561001057600080fd5b506107d2806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063e5c5e9a314610030575b600080fd5b61004361003e366004610529565b61005a565b6040516100519291906105eb565b60405180910390f35b6060806100678484610072565b915091509250929050565b606080600283101561009f5760405163196499c760e21b8152600060048201526024015b60405180910390fd5b60006100ae6002828688610619565b6100b791610643565b60f01c90506002600219820161021f578060005b868310156101c45760006100e460018501858a8c610619565b6100ed91610673565b60f81c9050600081900361011757604051636780cfaf60e01b815260006004820152602401610096565b8160ff1660000361012a57809150610167565b8160ff168160ff16146101675736600061014686868c8e610619565b915091506101578989868585610236565b9099509750859450919250829150505b600184019360009061017e90600301868b8d610619565b61018791610643565b60f01c905060008190036101b15760405163196499c760e21b815260048101869052602401610096565b8060020161ffff168501945050506100cb565b8287146101e75760405163196499c760e21b815260048101849052602401610096565b6002871115610218573660006101ff85858b8d610619565b915091506102108888858585610236565b909850965050505b505061022d565b61022a828787610356565b93505b50509250929050565b60608060001960ff8616016102b35786511561027557868484604051602001610261939291906106a1565b6040516020818303038152906040526102ac565b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050505b965061034b565b60011960ff86160161032d578551156102ef578584846040516020016102db939291906106a1565b604051602081830303815290604052610326565b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050505b955061034b565b604051636780cfaf60e01b815260ff86166004820152602401610096565b509495939450505050565b606060001961ffff8516016103f65760228214610386576040516301b8ca5560e31b815260040160405180910390fd5b60006103a7610399602260028688610619565b6103a2916106c9565b6104e8565b604051600160f81b60208201819052601160f01b602183015260238201526001600160801b0319608083901b1660248201529091506034016040516020818303038152906040529150506104e1565b60011961ffff8516016104c2576042821115806104135750606282115b15610431576040516360493e2b60e11b815260040160405180910390fd5b6000610444610399602260028688610619565b90506000610459610399604260228789610619565b90506000604119850161046f866042818a610619565b610478916106c9565b60405160086020938403029190911c92506104a9916001916011918391889183916031916002918b918b91016106e8565b60405160208183030381529060405293505050506104e1565b604051630417051360e41b815261ffff85166004820152602401610096565b9392505050565b60006fffffffffffffffffffffffffffffffff821115610525576040516306dfcc6560e41b81526080600482015260248101839052604401610096565b5090565b6000806020838503121561053c57600080fd5b823567ffffffffffffffff8082111561055457600080fd5b818501915085601f83011261056857600080fd5b81358181111561057757600080fd5b86602082850101111561058957600080fd5b60209290920196919550909350505050565b60005b838110156105b657818101518382015260200161059e565b50506000910152565b600081518084526105d781602086016020860161059b565b601f01601f19169290920160200192915050565b6040815260006105fe60408301856105bf565b828103602084015261061081856105bf565b95945050505050565b6000808585111561062957600080fd5b8386111561063657600080fd5b5050820193919092039150565b6001600160f01b0319813581811691600285101561066b5780818660020360031b1b83161692505b505092915050565b6001600160f81b0319813581811691600185101561066b5760019490940360031b84901b1690921692915050565b600084516106b381846020890161059b565b8201838582376000930192835250909392505050565b803560208310156106e257600019602084900360031b1b165b92915050565b60f88a811b6001600160f81b0319908116835260f08b901b6001600160f01b031916600184015289821b81166003840152608089901b6001600160801b03191660048401529087901b1660148201526000610752601583018760f01b6001600160f01b0319169052565b61076b601783018660f81b6001600160f81b0319169052565b610784601883018560801b6001600160801b0319169052565b5060288101919091526048019897505050505050505056fea2646970667358221220994aaf0c18254f983fac2634c8bb3f9ecd3d5348f39af4ed525562428cb6fc4f64736f6c63430008160033", - "sourceMap": "2890:28294:71:-:0;;;;;1572:26:85;;;1594:4;-1:-1:-1;;1572:26:85;;;;;;;;3126:44:88;;;;;;;;;;;738:20:70;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;710:48:70;;;-1:-1:-1;;;;;710:48:70;;;;-1:-1:-1;;;;;;710:48:70;;;;;;;;;4586:43:71;;;-1:-1:-1;;;;;;4586:43:71;4620:9;4586:43;;;2890:28294;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;", - "linkReferences": {} - }, - "deployedBytecode": { - "object": "0x608060405260043610620002ab5760003560e01c80637982cf42116200016b578063b752b72a11620000d1578063defd9da61162000084578063defd9da6146200089f578063e20c9f7114620008e0578063ec53eaa014620008f8578063f93e1d61146200090f578063fa7626d41462000955578063faed6c58146200097157600080fd5b8063b752b72a14620007c6578063b76bada514620007eb578063b954fdf61462000802578063ba414fa61462000847578063baead19c146200085f578063d6d62497146200087a57600080fd5b80639751ca86116200012a5780639751ca8614620006d0578063997cff1b1462000725578063a29c8984146200074a578063ae6ce4001462000761578063b1dcf5c81462000786578063b5508aa914620007ae57600080fd5b80637982cf42146200063857806382411c77146200033e578063834bd159146200066c57806385226c811462000691578063916a17c614620006b857600080fd5b80633e5e3c2311620002115780636019788911620001d057806360197889146200054c57806365449eb0146200057157806366d9a9a01462000596578063699cbade14620005bd5780636e1775e314620005dc578063703ca254146200061357600080fd5b80633e5e3c2314620004675780633f7286f4146200047f578063518e8ab0146200049757806351aa318b14620004e75780635ea0fefe146200051657600080fd5b80631cc46525116200026a5780631cc46525146200037d5780631ed7831c14620003a25780632113ce6214620003c95780632a35d25014620004045780632ade388014620004295780633bbd6a94146200045057600080fd5b8063090852b614620002b85780630a69faa914620002df5780630a9254e414620002f65780630afba868146200030e5780631766f5a4146200033e57600080fd5b36620002b357005b600080fd5b348015620002c557600080fd5b50620002dd620002d73660046200607b565b62000996565b005b620002dd620002f0366004620061f7565b620009c5565b3480156200030357600080fd5b50620002dd62000b03565b3480156200031b57600080fd5b506200032661271081565b60405161ffff90911681526020015b60405180910390f35b3480156200034b57600080fd5b506200035c670de0b6b3a764000081565b6040516effffffffffffffffffffffffffffff909116815260200162000335565b3480156200038a57600080fd5b50620002dd6200039c366004620062ae565b62000b0f565b348015620003af57600080fd5b50620003ba62000b64565b60405162000335919062006326565b348015620003d657600080fd5b50602154620003eb906001600160801b031681565b6040516001600160801b03909116815260200162000335565b3480156200041157600080fd5b50620003ba620004233660046200633b565b62000bc8565b3480156200043657600080fd5b506200044162000cdf565b60405162000335919062006458565b620002dd62000461366004620064db565b62000e2d565b3480156200047457600080fd5b50620003ba62000eed565b3480156200048c57600080fd5b50620003ba62000f4f565b348015620004a457600080fd5b50620004bc620004b636600462006595565b62000fb1565b6040805161ffff90941684526001600160801b03928316602085015291169082015260600162000335565b348015620004f457600080fd5b50620005006201117181565b60405163ffffffff909116815260200162000335565b3480156200052357600080fd5b506200053b62000535366004620065eb565b62000fcf565b604051901515815260200162000335565b3480156200055957600080fd5b50620002dd6200056b3660046200661a565b62001004565b3480156200057e57600080fd5b50620002dd620005903660046200672b565b62001c0a565b348015620005a357600080fd5b50620005ae62001cf0565b604051620003359190620067fc565b348015620005ca57600080fd5b50620003eb68056bc75e2d6310000081565b348015620005e957600080fd5b5062000601620005fb366004620068b5565b62001dda565b6040516200033594939291906200692d565b3480156200062057600080fd5b50620002dd620006323660046200695d565b62001dfe565b3480156200064557600080fd5b506200065d62000657366004620065eb565b62001fc5565b6040516200033591906200699d565b3480156200067957600080fd5b50620002dd6200068b366004620069b2565b620020b3565b3480156200069e57600080fd5b50620006a9620025de565b60405162000335919062006a2f565b348015620006c557600080fd5b50620005ae620026b8565b348015620006dd57600080fd5b50620006f5620006ef36600462006595565b620027a2565b604080516001600160801b03948516815263ffffffff909316602084015292169181019190915260600162000335565b3480156200073257600080fd5b50620002dd62000744366004620068b5565b620027b3565b620002dd6200075b36600462006a44565b6200280b565b3480156200076e57600080fd5b50620002dd6200078036600462006ad4565b62002897565b3480156200079357600080fd5b506200079f620186a081565b60405190815260200162000335565b348015620007bb57600080fd5b50620006a962002938565b348015620007d357600080fd5b50620002dd620007e536600462006af4565b62002a12565b348015620007f857600080fd5b506200079f600381565b3480156200080f57600080fd5b50620008276200082136600462006595565b62002a31565b604080516001600160801b03909316835260208301919091520162000335565b3480156200085457600080fd5b506200053b62002a4c565b3480156200086c57600080fd5b506200079f64e8d4a5100081565b3480156200088757600080fd5b50620002dd6200089936600462006b15565b62002b83565b348015620008ac57600080fd5b50620002dd620008be36600462006b88565b602180546001600160801b0319166001600160801b0392909216919091179055565b348015620008ed57600080fd5b50620003ba62004b53565b620002dd620009093660046200661a565b62004bb5565b3480156200091c57600080fd5b50620009346200092e36600462006595565b62004cf0565b604080516001600160801b0393841681529290911660208301520162000335565b3480156200096257600080fd5b506007546200053b9060ff1681565b3480156200097e57600080fd5b50620002dd6200099036600462006ba8565b62004cff565b620009c182826001600160a01b031660001b60008060405180602001604052806000815250620020b3565b5050565b600060206000620009d7878762004d91565b63ffffffff16815260208101919091526040016000908120546001600160a01b031691508062000a078562004db8565b92505091506000604051806060016040528062000a258a8a62004ea7565b63ffffffff16815260200162000a3c8a8a62004eb9565b815260200162000a4d8a8a62004ed6565b6001600160401b0316905290506001600160a01b038416630c0c389e6001600160801b038581169085168462000a848d8d62004efd565b62000a908e8e62004f12565b604080516020810182526000815290516001600160e01b031960e089901b16815262000ac4949392918e9160040162006c1a565b6000604051808303818589803b15801562000ade57600080fd5b5088f115801562000af3573d6000803e3d6000fd5b5050505050505050505050505050565b62000b0d62004f24565b565b620009c182828460ff166001600160401b0381111562000b335762000b33620060fd565b60405190808252806020026020018201604052801562000b5d578160200160208202803683370190505b5062002b83565b6060601480548060200260200160405190810160405280929190818152602001828054801562000bbe57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831162000b9f575b5050505050905090565b60608160ff166001600160401b0381111562000be85762000be8620060fd565b60405190808252806020026020018201604052801562000c12578160200160208202803683370190505b509050825b62000c23838562006ca3565b60ff168160ff16101562000ccc5760ff81166000908152602080805260408083205481516001600160a01b039091169281019290925230908201526001606082015262000c8490879060800160405160208183030381529060405262004f72565b9050808362000c94878562006cbf565b60ff168151811062000caa5762000caa62006cdb565b6001600160a01b03909216602092830291909101909101525060010162000c17565b5062000cd88162001dfe565b9392505050565b6060601b805480602002602001604051908101604052809291908181526020016000905b8282101562000e2457600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b8282101562000e0c57838290600052602060002001805462000d789062006cf1565b80601f016020809104026020016040519081016040528092919081815260200182805462000da69062006cf1565b801562000df75780601f1062000dcb5761010080835404028352916020019162000df7565b820191906000526020600020905b81548152906001019060200180831162000dd957829003601f168201915b50505050508152602001906001019062000d56565b50505050815250508152602001906001019062000d03565b50505050905090565b63ffffffff871660009081526020805260408120546001600160a01b031690808062000e598962004fd1565b925092509250836001600160a01b03166391d20fa18284908d8b8d898d8d604051806020016040528060008152506040518a63ffffffff1660e01b815260040162000eab979695949392919062006d2d565b6000604051808303818589803b15801562000ec557600080fd5b5088f115801562000eda573d6000803e3d6000fd5b5050505050505050505050505050505050565b6060601680548060200260200160405190810160405280929190818152602001828054801562000bbe576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831162000b9f575050505050905090565b6060601580548060200260200160405190810160405280929190818152602001828054801562000bbe576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831162000b9f575050505050905090565b600080600062000fc28585620050ce565b9250925092509250925092565b61ffff82166000908152601d6020908152604080832084845290915281208162000ff9826200514c565b119150505b92915050565b600062001012848462004d91565b63ffffffff811660009081526020805260408120549192506001600160a01b03909116908163402f846862001048888862004efd565b62001054898962004ea7565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015263ffffffff1660248201526044016040805180830381865afa158015620010a3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620010c9919062006dad565b5090506000620010da87876200516a565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052506040805163054fd4d560e41b8152905195965090946001600160a01b03881694506354fd4d509350600480830193506060928290030181865afa15801562001156573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200117c919062006e03565b50509050806001600160401b031660030362001652578260006001600160a01b038216639c33abf7620011b08c8c62004ea7565b620011bc8d8d62004efd565b6040516001600160e01b031960e085901b16815263ffffffff9290921660048301526001600160a01b0316602482015260026044820152606401600060405180830381865afa15801562001214573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200123e919081019062006e95565b905060008180602001905181019062001258919062006f3e565b6080015160008151811062001271576200127162006cdb565b602002602001015190506000620012898c8c6200517c565b6040516200129992919062007025565b6040518091039020905060606000630223536e60e01b88846064604051602401620012c79392919062007035565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152905060006001600160a01b03851663f010cb238d89856200131d426103e862007063565b6040518563ffffffff1660e01b81526004016200133e949392919062007079565b602060405180830381865afa1580156200135c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620013829190620070bc565b90506200138f816200518e565b60408051600180825281830190925291945060009250816020015b620013b462005d25565b815260200190600190039081620013aa5790505090506040518060a001604052808d63ffffffff168152602001886001600160a01b03168152602001838152602001426103e862001406919062007063565b8152602001848152508160008151811062001425576200142562006cdb565b602090810291909101015260405163b143044b60e01b81526001600160a01b0386169063b143044b906200145e908490600401620070d6565b600060405180830381600087803b1580156200147957600080fd5b505af11580156200148e573d6000803e3d6000fd5b505050506000630894edf160e01b8a86604051602401620014b192919062007188565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152905060006001600160a01b03871663f010cb238f8b8562001507426103e862007063565b6040518563ffffffff1660e01b815260040162001528949392919062007079565b602060405180830381865afa15801562001546573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200156c9190620070bc565b905062001579816200518e565b9450506040518060a001604052808e63ffffffff168152602001896001600160a01b03168152602001828152602001426103e8620015b8919062007063565b81526020018581525082600081518110620015d757620015d762006cdb565b602090810291909101015260405163b143044b60e01b81526001600160a01b0387169063b143044b9062001610908590600401620070d6565b600060405180830381600087803b1580156200162b57600080fd5b505af115801562001640573d6000803e3d6000fd5b50505050505050505050505062001c00565b806001600160401b0316600a0362001b9b578260006001600160a01b038216639c33abf7620016828c8c62004ea7565b6200168e8d8d62004efd565b6040516001600160e01b031960e085901b16815263ffffffff9290921660048301526001600160a01b0316602482015260016044820152606401600060405180830381865afa158015620016e6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262001710919081019062006e95565b90506000818060200190518101906200172a9190620071ac565b6080015160008151811062001743576200174362006cdb565b6020026020010151905060006200175b8c8c620052a8565b6040516200176b92919062007025565b604051809103902090506000620017838d8d62004f12565b8b6040516020016200179792919062007201565b6040516020818303038152906040528051906020012090506060600063ab750e7560e01b898585604051602401620017d29392919062007229565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152905060006001600160a01b03861663f010cb238e8a8562001828426103e862007063565b6040518563ffffffff1660e01b815260040162001849949392919062007079565b602060405180830381865afa15801562001867573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200188d9190620070bc565b90506200189a816200518e565b60408051600180825281830190925291945060009190816020015b620018bf62005d25565b815260200190600190039081620018b55790505090506040518060a001604052808f63ffffffff1681526020018a6001600160a01b03168152602001848152602001426103e862001911919062007063565b8152602001858152508160008151811062001930576200193062006cdb565b602090810291909101015260405163b143044b60e01b81526001600160a01b0388169063b143044b9062001969908490600401620070d6565b600060405180830381600087803b1580156200198457600080fd5b505af115801562001999573d6000803e3d6000fd5b50505050505050600063594924da60e01b898585604051602401620019c19392919062007229565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152905060006001600160a01b03861663f010cb238e8a8562001a17426103e862007063565b6040518563ffffffff1660e01b815260040162001a38949392919062007079565b602060405180830381865afa15801562001a56573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001a7c9190620070bc565b905062001a89816200518e565b60408051600180825281830190925291945060009190816020015b62001aae62005d25565b81526020019060019003908162001aa45790505090506040518060a001604052808f63ffffffff1681526020018a6001600160a01b03168152602001848152602001426103e862001b00919062007063565b8152602001858152508160008151811062001b1f5762001b1f62006cdb565b602090810291909101015260405163b143044b60e01b81526001600160a01b0388169063b143044b9062001b58908490600401620070d6565b600060405180830381600087803b15801562001b7357600080fd5b505af115801562001b88573d6000803e3d6000fd5b5050505050505050505050505062001c00565b6040516312cc947f60e01b81526001600160a01b038416906312cc947f9062001bcb908b908b9060040162007250565b600060405180830381600087803b15801562001be657600080fd5b505af115801562001bfb573d6000803e3d6000fd5b505050505b5050505050505050565b60005b825181101562001ceb57600083828151811062001c2e5762001c2e62006cdb565b6020026020010151905060005b835181101562001ce057816001600160a01b031663f0a9e48185838151811062001c695762001c6962006cdb565b60209081029190910101516040516001600160e01b031960e084901b16815263ffffffff909116600482015260016024820152604401600060405180830381600087803b15801562001cba57600080fd5b505af115801562001ccf573d6000803e3d6000fd5b50506001909201915062001c3b9050565b505060010162001c0d565b505050565b60606019805480602002602001604051908101604052809291908181526020016000905b8282101562000e245760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801562001dc157602002820191906000526020600020906000905b82829054906101000a900460e01b6001600160e01b0319168152602001906004019060208260030104928301926001038202915080841162001d825790505b5050505050815250508152602001906001019062001d14565b60003660008062001ded878787620052ba565b935093509350935093509350935093565b805160005b8181101562001ceb57600083828151811062001e235762001e2362006cdb565b6020026020010151905060005b8381101562001fba5782811462001fb157600085828151811062001e585762001e5862006cdb565b602002602001015190506000816001600160a01b0316635e280f116040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001ea3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001ec9919062007266565b6001600160a01b031663416ecebf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001f07573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001f2d919062007286565b9050836001600160a01b0316633400288b8262001f50856001600160a01b031690565b6040516001600160e01b031960e085901b16815263ffffffff9290921660048301526024820152604401600060405180830381600087803b15801562001f9557600080fd5b505af115801562001faa573d6000803e3d6000fd5b5050505050505b60010162001e30565b505060010162001e03565b61ffff82166000908152601d60209081526040808320848452909152812060609162001ff1826200514c565b1115620020ac576000620020058262005316565b6000818152601e60205260409020805491925090620020249062006cf1565b80601f0160208091040260200160405190810160405280929190818152602001828054620020529062006cf1565b8015620020a35780601f106200207757610100808354040283529160200191620020a3565b820191906000526020600020905b8154815290600101906020018083116200208557829003601f168201915b50505050509250505b5092915050565b63ffffffff851660009081526020805260409020546001600160a01b0316620021235760405162461bcd60e51b815260206004820152601b60248201527f656e64706f696e74206e6f74207965742072656769737465726564000000000060448201526064015b60405180910390fd5b63ffffffff85166000908152601d602090815260408083208784529091528120906200214f826200514c565b90506000856000036200216f5762002167836200514c565b905062002183565b8582116200217e578162002180565b855b90505b801562001c0057806200219681620072a6565b9150506000620021a68462005377565b6000818152601e6020526040812080549293509091620021c69062006cf1565b80601f0160208091040260200160405190810160405280929190818152602001828054620021f49062006cf1565b8015620022455780601f10620022195761010080835404028352916020019162002245565b820191906000526020600020905b8154815290600101906020018083116200222757829003601f168201915b505060405163997cff1b60e01b8152939450309363997cff1b9350620022749250859150869060040162007188565b60006040518083038186803b1580156200228d57600080fd5b505afa158015620022a2573d6000803e3d6000fd5b5050604051636019788960e01b815230925063601978899150620022cd9084908a90600401620072c0565b600060405180830381600087803b158015620022e857600080fd5b505af1158015620022fd573d6000803e3d6000fd5b5050506000838152601f602052604081208054919250906200231f9062006cf1565b80601f01602080910402602001604051908101604052809291908181526020018280546200234d9062006cf1565b80156200239e5780601f1062002372576101008083540402835291602001916200239e565b820191906000526020600020905b8154815290600101906020018083116200238057829003601f168201915b50505050509050620023b2816002620053db565b156200246e57600080620023c683620053f1565b604051919350915081906000906001600160a01b0383169085908381818185875af1925050503d80600081146200241a576040519150601f19603f3d011682016040523d82523d6000602084013e6200241f565b606091505b5050905080620024695760405162461bcd60e51b81526020600482015260146024820152732330b4b632b2103a379039b2b7321022ba3432b960611b60448201526064016200211a565b505050505b6200247b816001620053db565b15620024dd576040516307629f5560e51b8152309063ec53eaa090620024a89085908590600401620072c0565b600060405180830381600087803b158015620024c357600080fd5b505af1158015620024d8573d6000803e3d6000fd5b505050505b620024ea816005620053db565b156200254e57604051630a69faa960e01b81523090630a69faa9906200251990859085908c90600401620072e9565b600060405180830381600087803b1580156200253457600080fd5b505af115801562002549573d6000803e3d6000fd5b505050505b6001600160a01b038816158015906200256f57506200256f816003620053db565b15620025d5576040516328a7226160e21b8152309063a29c898490620025a0908590859088908e9060040162007332565b600060405180830381600087803b158015620025bb57600080fd5b505af1158015620025d0573d6000803e3d6000fd5b505050505b50505062002183565b60606018805480602002602001604051908101604052809291908181526020016000905b8282101562000e24578382906000526020600020018054620026249062006cf1565b80601f0160208091040260200160405190810160405280929190818152602001828054620026529062006cf1565b8015620026a35780601f106200267757610100808354040283529160200191620026a3565b820191906000526020600020905b8154815290600101906020018083116200268557829003601f168201915b50505050508152602001906001019062002602565b6060601a805480602002602001604051908101604052809291908181526020016000905b8282101562000e245760008481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156200278957602002820191906000526020600020906000905b82829054906101000a900460e01b6001600160e01b031916815260200190600401906020826003010492830192600103820291508084116200274a5790505b50505050508152505081526020019060010190620026dc565b600080600062000fc28585620054e8565b6000620027c1848462004f12565b9050818114620028055760405162461bcd60e51b815260206004820152600e60248201526d0ceead2c840dcdee840dac2e8c6d60931b60448201526064016200211a565b50505050565b30633bbd6a946200281d878762004d91565b62002829888862004efd565b868686620028388c8c620052a8565b6040518863ffffffff1660e01b81526004016200285c97969594939291906200737d565b600060405180830381600087803b1580156200287757600080fd5b505af11580156200288c573d6000803e3d6000fd5b505050505050505050565b8060206000836001600160a01b031663416ecebf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620028db573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002901919062007286565b63ffffffff168152602081019190915260400160002080546001600160a01b0319166001600160a01b039290921691909117905550565b60606017805480602002602001604051908101604052809291908181526020016000905b8282101562000e245783829060005260206000200180546200297e9062006cf1565b80601f0160208091040260200160405190810160405280929190818152602001828054620029ac9062006cf1565b8015620029fd5780601f10620029d157610100808354040283529160200191620029fd565b820191906000526020600020905b815481529060010190602001808311620029df57829003601f168201915b5050505050815260200190600101906200295c565b620009c1828260008060405180602001604052806000815250620020b3565b60008062002a4084846200555d565b915091505b9250929050565b600754600090610100900460ff161562002a6f5750600754610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1562002b7e5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190526519985a5b195960d21b8284015282518083038401815260608301909352600092909162002b00917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc491608001620073df565b60408051601f198184030181529082905262002b1c9162007412565b6000604051808303816000865af19150503d806000811462002b5b576040519150601f19603f3d011682016040523d82523d6000602084013e62002b60565b606091505b509150508080602001905181019062002b7a919062007430565b9150505b919050565b8260ff166001600160401b0381111562002ba15762002ba1620060fd565b60405190808252806020026020018201604052801562002bcb578160200160208202803683370190505b50805162002be29160229160209091019062005d63565b508260ff166001600160401b0381111562002c015762002c01620060fd565b60405190808252806020026020018201604052801562002c2b578160200160208202803683370190505b50805162002c429160239160209091019062005dcd565b508260ff166001600160401b0381111562002c615762002c61620060fd565b60405190808252806020026020018201604052801562002c8b578160200160208202803683370190505b50805162002ca29160249160209091019062005d63565b508260ff166001600160401b0381111562002cc15762002cc1620060fd565b60405190808252806020026020018201604052801562002ceb578160200160208202803683370190505b50805162002d029160259160209091019062005d63565b508260ff166001600160401b0381111562002d215762002d21620060fd565b60405190808252806020026020018201604052801562002d4b578160200160208202803683370190505b50805162002d629160269160209091019062005d63565b5060408051600180825281830190925290602080830190803683375050815162002d9492602792506020019062005d63565b506040516001625e79b760e01b0319815260016004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ffa1864990602401602060405180830381865afa15801562002de9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002e0f919062007266565b6027805460009062002e255762002e2562006cdb565b6000918252602082200180546001600160a01b0319166001600160a01b0393909316929092179091555b8360ff168160ff1610156200307957600062002e6d82600162006ca3565b60ff1690506000838360ff168151811062002e8c5762002e8c62006cdb565b602002602001015190508160226001018460ff168154811062002eb35762002eb362006cdb565b90600052602060002090600891828204019190066004026101000a81548163ffffffff021916908363ffffffff16021790555060006001600160a01b0316816001600160a01b03160362002f9857813060405162002f119062005e7e565b63ffffffff90921682526001600160a01b03166020820152604001604051809103906000f08015801562002f49573d6000803e3d6000fd5b506022805460ff861690811062002f645762002f6462006cdb565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555062003033565b81308260405162002fa99062005e8c565b63ffffffff90931683526001600160a01b039182166020840152166040820152606001604051809103906000f08015801562002fe9573d6000803e3d6000fd5b506022805460ff861690811062003004576200300462006cdb565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b6200306e60226000018460ff168154811062003053576200305362006cdb565b6000918252602090912001546001600160a01b031662002897565b505060010162002e4f565b5030604051620030899062005e9a565b6001600160a01b039091168152602001604051809103906000f080158015620030b6573d6000803e3d6000fd5b50602880546001600160a01b0319166001600160a01b039290921691909117905560005b8360ff168160ff161015620048245760008360018111156200310057620031006200744e565b036200461f57600060226000018260ff168154811062003124576200312462006cdb565b9060005260206000200160009054906101000a90046001600160a01b03169050308164e8d4a51000620186a06040516200315e9062005ea8565b6001600160a01b03948516815293909216602084015260408301526060820152608001604051809103906000f0801580156200319e573d6000803e3d6000fd5b50602980546001600160a01b0319166001600160a01b03929092169190911790556040518190620031cf9062005eb6565b6001600160a01b039091168152602001604051809103906000f080158015620031fc573d6000803e3d6000fd5b50602960010160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550308164e8d4a51000620186a0604051620032409062005ec4565b6001600160a01b03948516815293909216602084015260408301526060820152608001604051809103906000f08015801562003280573d6000803e3d6000fd5b50602b80546001600160a01b0319166001600160a01b03929092169190911790556022805460ff8416908110620032bb57620032bb62006cdb565b60009182526020909120015460295460405163e8964e8160e01b81526001600160a01b03918216600482015291169063e8964e8190602401600060405180830381600087803b1580156200330e57600080fd5b505af115801562003323573d6000803e3d6000fd5b5050505060226000018260ff168154811062003343576200334362006cdb565b600091825260209091200154602a5460405163e8964e8160e01b81526001600160a01b03918216600482015291169063e8964e8190602401600060405180830381600087803b1580156200339657600080fd5b505af1158015620033ab573d6000803e3d6000fd5b5050505060226000018260ff1681548110620033cb57620033cb62006cdb565b600091825260209091200154602b5460405163e8964e8160e01b81526001600160a01b03918216600482015291169063e8964e8190602401600060405180830381600087803b1580156200341e57600080fd5b505af115801562003433573d6000803e3d6000fd5b5050602954602480546001600160a01b039092169350915060ff851690811062003461576200346162006cdb565b600091825260209091200180546001600160a01b0319166001600160a01b03928316179055602a546025805491909216919060ff8516908110620034a957620034a962006cdb565b600091825260209091200180546001600160a01b0319166001600160a01b03928316179055602b546026805491909216919060ff8516908110620034f157620034f162006cdb565b6000918252602082200180546001600160a01b03939093166001600160a01b03199093169290921790915560408051600180825281830190925290816020016020820280368337019050509050308160008151811062003555576200355562006cdb565b6001600160a01b0392909216602092830291909101820152604080516003808252608082019092526000929091908201606080368337505060295482519293506001600160a01b031691839150600090620035b457620035b462006cdb565b6001600160a01b039283166020918202929092010152602a54825191169082906001908110620035e857620035e862006cdb565b6001600160a01b039283166020918202929092010152602b548251911690829060029081106200361c576200361c62006cdb565b6001600160a01b0392831660209182029290920101526028546040518592600092859291169030908790620036519062005ed2565b620036629695949392919062007464565b604051809103906000f0801580156200367f573d6000803e3d6000fd5b50602c80546001600160a01b0319166001600160a01b03929092169190911790556023805460ff8616908110620036ba57620036ba62006cdb565b90600052602060002090600891828204019190066004029054906101000a900463ffffffff16604051620036ee9062005ee0565b63ffffffff9091168152602001604051809103906000f08015801562003718573d6000803e3d6000fd5b50602e80546001600160a01b0319166001600160a01b03928316908117909155602c5460405163c7b2370b60e01b815260048101929092529091169063c7b2370b90602401600060405180830381600087803b1580156200377857600080fd5b505af11580156200378d573d6000803e3d6000fd5b5050505060226001018460ff1681548110620037ad57620037ad62006cdb565b6000918252602090912060088204015460079091166004026101000a900463ffffffff16620037de85600162006ca3565b60285460405184916001600160a01b0316906027906001908890620038039062005eee565b620038159796959493929190620074b4565b604051809103906000f08015801562003832573d6000803e3d6000fd5b50602d80546001600160a01b0319166001600160a01b03929092169190911790556023805460ff86169081106200386d576200386d62006cdb565b90600052602060002090600891828204019190066004029054906101000a900463ffffffff16670de0b6b3a7640000604051620038aa9062005efc565b63ffffffff90921682526020820152604001604051809103906000f080158015620038d9573d6000803e3d6000fd5b50602f80546001600160a01b0319166001600160a01b03929092169182179055604051630e7c9b7f60e21b8152670de0b6b3a764000060048201819052602482015261271060448201526339f26dfc90606401600060405180830381600087803b1580156200394757600080fd5b505af11580156200395c573d6000803e3d6000fd5b5050602d54602f5460405163c7b2370b60e01b81526001600160a01b0391821660048201529116925063c7b2370b9150602401600060405180830381600087803b158015620039aa57600080fd5b505af1158015620039bf573d6000803e3d6000fd5b505050505050620039ea60405180606001604052806060815260200160608152602001606081525090565b620039f786600162006ca3565b60ff166001600160401b0381111562003a145762003a14620060fd565b60405190808252806020026020018201604052801562003a7657816020015b6040805160c08101825260008082526020808301829052928201819052606082018190526080820181905260a0820152825260001990920191018162003a335790505b50815262003a8686600162006ca3565b60ff166001600160401b0381111562003aa35762003aa3620060fd565b60405190808252806020026020018201604052801562003af757816020015b60408051608081018252600080825260208083018290529282018190526060820152825260001990920191018162003ac25790505b50602082015262003b0a86600162006ca3565b60ff166001600160401b0381111562003b275762003b27620060fd565b60405190808252806020026020018201604052801562003b6e57816020015b604080518082019091526000808252602082015281526020019060019003908162003b465790505b506040828101919091528051600180825281830190925260009160208083019080368337505060408051600080825260208201909252602d54845194955090936001600160a01b03909116925084919062003bcd5762003bcd62006cdb565b60200260200101906001600160a01b031690816001600160a01b03168152505060005b8860ff168160ff1610156200420d578060ff168660ff1603156200420457600062003c1d82600162006ca3565b60408051600180825281830190925260ff92909216925060009190816020015b62003c4762005f0a565b81526020019060019003908162003c3d57905050905060006040518060c0016040528060646001600160401b03168152602001875160ff168152602001865160ff168152602001600060ff16815260200187815260200186815250905060405180604001604052808463ffffffff168152602001828152508260008151811062003cd55762003cd562006cdb565b60209081029190910101526029546040516329460b0b60e01b81526001600160a01b03909116906329460b0b9062003d1290859060040162007562565b600060405180830381600087803b15801562003d2d57600080fd5b505af115801562003d42573d6000803e3d6000fd5b5050602a546040516329460b0b60e01b81526001600160a01b0390911692506329460b0b915062003d7890859060040162007562565b600060405180830381600087803b15801562003d9357600080fd5b505af115801562003da8573d6000803e3d6000fd5b50600092506001915062003db99050565b60405190808252806020026020018201604052801562003df657816020015b62003de262005f73565b81526020019060019003908162003dd85790505b506040805180820182526127108152602c546001600160a01b0316602080830191909152825180840190935263ffffffff881683528201819052825192935091839060009062003e4a5762003e4a62006cdb565b602090810291909101015260295460405163c14c434960e01b81526001600160a01b039091169063c14c43499062003e8790859060040162007640565b600060405180830381600087803b15801562003ea257600080fd5b505af115801562003eb7573d6000803e3d6000fd5b50506040805160c08101825263ffffffff89168152611388602082018190529181019190915261271060608201526402540be40060808201526021546001600160801b031660a08201528b518051919550935060ff891692508210905062003f235762003f2362006cdb565b602002602001018190525060405180608001604052808463ffffffff1681526020016113886001600160401b0316815260200161271061ffff1681526020016402540be4006001600160801b031681525087602001518560ff168151811062003f905762003f9062006cdb565b602002602001018190525060405180604001604052808463ffffffff168152602001600381525087604001518560ff168151811062003fd35762003fd362006cdb565b60200260200101819052506000602260060160009054906101000a90046001600160a01b03166001600160a01b031663c18403276040518163ffffffff1660e01b8152600401602060405180830381865afa15801562004037573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200405d9190620076b1565b60408051600180825281830190925291925060009190816020015b620040ac60408051808201825260008082528251606081018452818152602081810183905293810191909152909182015290565b8152602001906001900390816200407857905050905060405180604001604052808663ffffffff1681526020016040518060600160405280856001620040f39190620076d1565b6001600160801b0316815260016020820181905260409091015290528151829060009062004125576200412562006cdb565b60209081029190910101526028546040516318b0dbfb60e11b81526001600160a01b0390911690633161b7f69062004162908490600401620076ff565b600060405180830381600087803b1580156200417d57600080fd5b505af115801562004192573d6000803e3d6000fd5b5050602854604051635d6d7ccb60e01b815268056bc75e2d6310000060048201526001600160a01b039091169250635d6d7ccb9150602401600060405180830381600087803b158015620041e557600080fd5b505af1158015620041fa573d6000803e3d6000fd5b5050505050505050505b60010162003bf0565b50604080516001808252818301909252600091816020015b6200422f62005fb8565b815260200190600190039081620042255750506040805160c081018252602c546001600160a01b03168152855160ff9081166020808401919091528651909116828401526000606083018190526080830188905260a08301879052835180850190945262011171845290830182905283519394509092849190620042b757620042b762006cdb565b6020908102919091010152602b5460405163642fa5a760e11b81526001600160a01b039091169063c85f4b4e90620042f490859060040162007773565b600060405180830381600087803b1580156200430f57600080fd5b505af115801562004324573d6000803e3d6000fd5b5050505050506040518060c0016040528060226001018760ff168154811062004351576200435162006cdb565b600091825260209182902060088204015460079091166004026101000a900463ffffffff168252611388908201819052604082015261271060608201526402540be40060808201526021546001600160801b031660a0909101528351805160ff8b16908110620043c557620043c562006cdb565b6020026020010181905250604051806080016040528060226001018760ff1681548110620043f757620043f762006cdb565b600091825260209182902060088204015460079091166004026101000a900463ffffffff1682526113888282015261271060408301526402540be400606090920191909152840151805160ff8b1690811062004457576200445762006cdb565b6020026020010181905250604051806040016040528060226001018760ff168154811062004489576200448962006cdb565b600091825260209182902060088204015460079091166004026101000a900463ffffffff16825260039101526040840151805160ff8b16908110620044d257620044d262006cdb565b6020908102919091010152602c548351604051633d85ac3360e01b81526001600160a01b0390921691633d85ac33916200450f9160040162007851565b600060405180830381600087803b1580156200452a57600080fd5b505af11580156200453f573d6000803e3d6000fd5b5050602d5460208601516040516352d3b87160e01b81526001600160a01b0390921693506352d3b87192506200457891600401620078e3565b600060405180830381600087803b1580156200459357600080fd5b505af1158015620045a8573d6000803e3d6000fd5b5050602f54604080870151905163f5ff608f60e01b81526001600160a01b03909216935063f5ff608f9250620045e19160040162007958565b600060405180830381600087803b158015620045fc57600080fd5b505af115801562004611573d6000803e3d6000fd5b50505050505050506200481b565b60018360018111156200463657620046366200744e565b03620047db5760003060226000018360ff16815481106200465b576200465b62006cdb565b6000918252602090912001546040516001600160a01b039091169062004681906200601c565b6001600160a01b03928316815291166020820152604001604051809103906000f080158015620046b5573d6000803e3d6000fd5b50905060226000018260ff1681548110620046d457620046d462006cdb565b60009182526020909120015460405163e8964e8160e01b81526001600160a01b0383811660048301529091169063e8964e8190602401600060405180830381600087803b1580156200472557600080fd5b505af11580156200473a573d6000803e3d6000fd5b505050508060226002018360ff16815481106200475b576200475b62006cdb565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055508060226003018360ff1681548110620047a657620047a662006cdb565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550506200481b565b60405162461bcd60e51b8152602060048201526014602482015273696e76616c6964206c696272617279207479706560601b60448201526064016200211a565b600101620030da565b5060005b8360ff168160ff1610156200280557600060226000018260ff168154811062004855576200485562006cdb565b60009182526020822001546001600160a01b031691508460018111156200488057620048806200744e565b03620049cd57806001600160a01b031663aafea3126201117160226004018560ff1681548110620048b557620048b562006cdb565b60009182526020909120015460405160e084901b6001600160e01b031916815263ffffffff90921660048301526001600160a01b03166024820152604401600060405180830381600087803b1580156200490e57600080fd5b505af115801562004923573d6000803e3d6000fd5b50505050806001600160a01b031663a718531b6201117160226004018560ff168154811062004956576200495662006cdb565b600091825260208220015460405160e085901b6001600160e01b031916815263ffffffff90931660048401526001600160a01b031660248301526044820152606401600060405180830381600087803b158015620049b357600080fd5b505af1158015620049c8573d6000803e3d6000fd5b505050505b60005b8560ff168160ff16101562004b48578060ff168360ff16031562004b3f576001600160a01b03821663aafea31262004a0a83600162006ca3565b6024805460ff881690811062004a245762004a2462006cdb565b60009182526020909120015460405160e084901b6001600160e01b031916815260ff90921660048301526001600160a01b03166024820152604401600060405180830381600087803b15801562004a7a57600080fd5b505af115801562004a8f573d6000803e3d6000fd5b50505050816001600160a01b031663a718531b82600162004ab1919062006ca3565b6025805460ff881690811062004acb5762004acb62006cdb565b600091825260208220015460405160e085901b6001600160e01b031916815260ff90931660048401526001600160a01b031660248301526044820152606401600060405180830381600087803b15801562004b2557600080fd5b505af115801562004b3a573d6000803e3d6000fd5b505050505b600101620049d0565b505060010162004828565b6060601380548060200260200160405190810160405280929190818152602001828054801562000bbe576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831162000b9f575050505050905090565b60006020600062004bc7868662004d91565b63ffffffff16815260208101919091526040016000908120546001600160a01b031691508062004bf784620055a9565b915091506000604051806060016040528062004c14898962004ea7565b63ffffffff16815260200162004c2b898962004eb9565b815260200162004c3c898962004ed6565b6001600160401b0316905290506001600160a01b038416630c0c389e84848462004c678c8c62004efd565b62004c738d8d62004f12565b62004c7f8e8e620052a8565b604051806020016040528060008152506040518963ffffffff1660e01b815260040162004cb296959493929190620079a2565b6000604051808303818589803b15801562004ccc57600080fd5b5088f115801562004ce1573d6000803e3d6000fd5b50505050505050505050505050565b60008062002a408484620056a0565b600062004d0d858562004d91565b9050600062004d1d868662005704565b63ffffffff83166000908152601d60209081526040808320848452909152812091925062004d4c888862004f12565b905062004d5a828262005716565b6000818152601e6020526040902062004d75888a8362007a6b565b506000818152601f602052604090206200288c86888362007a6b565b600062004da36031602d848662007b38565b62004dae9162007b64565b60e01c9392505050565b600080600080600062004dcd86600562005774565b915091508162004e2f5760405162461bcd60e51b815260206004820152602660248201527f4f7074696f6e7348656c7065723a206c7a52656164206f7074696f6e206e6f7460448201526508199bdd5b9960d21b60648201526084016200211a565b604051634ba8e54360e11b81523090639751ca869062004e549084906004016200699d565b606060405180830381865afa15801562004e72573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062004e98919062007b93565b94509450945050509193909250565b600062004da3600d6009848662007b38565b600062004ecb602d600d848662007b38565b62000cd89162007bdc565b600062004ee860096001848662007b38565b62004ef39162007bfb565b60c01c9392505050565b600062000cd862004f0f848462005704565b90565b600062004ecb60716051848662007b38565b60405162004f32906200602a565b604051809103906000f08015801562004f4f573d6000803e3d6000fd5b50601c80546001600160a01b0319166001600160a01b0392909216919091179055565b6000808360405160200162004f88919062007412565b60408051601f198184030181529082905262004fa991859060200162007c2a565b60405160208183030381529060405290508051602082016000f09150813b620020ac57600080fd5b600080600080600062004fe686600362005774565b91509150816200504b5760405162461bcd60e51b815260206004820152602960248201527f4f7074696f6e7348656c7065723a206c7a436f6d706f7365206f7074696f6e206044820152681b9bdd08199bdd5b9960ba1b60648201526084016200211a565b604051630518e8ab60e41b8152309063518e8ab090620050709084906004016200699d565b606060405180830381865afa1580156200508e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620050b4919062007c5d565b91986001600160801b039182169850911695509350505050565b6000808060128414801590620050e5575060228414155b156200510457604051638b4aa70b60e01b815260040160405180910390fd5b620051128585600062005c42565b9250620051228585600262005c6d565b9150602284146200513557600062005143565b620051438585601262005c6d565b90509250925092565b546001600160801b03808216600160801b9092048116919091031690565b36600062002a40605182858762007b38565b36600062002a40836051818762007b38565b6040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052606090600090605c0160408051808303601f190181529082905280516020909101206338d07aa960e21b82526001600483015260248201819052915060009081908190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063e341eaa490604401606060405180830381865afa1580156200523e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062005264919062007c93565b6040805160208101939093528281019190915260f89290921b6001600160f81b03191660608201528151604181830301815260619091019091529695505050505050565b36600062002a40836071818762007b38565b600036816001840181620052d088888462005c42565b600292909201919050620052e688888462005c98565b94506001820161ffff821683016200530181838b8d62007b38565b979b909a50969850505061ffff160193505050565b6000620053368254600160801b81046001600160801b0390811691161490565b15620053485762005348603262005cc0565b5080546000196001600160801b03600160801b9092048216011660009081526001909101602052604090205490565b80546000906001600160801b03600160801b8204811691168103620053a257620053a2603162005cc0565b600019016001600160801b039081166000818152600185016020526040812080549190558454909216600160801b909102179092555090565b6000620053e9838362005774565b509392505050565b6000806000806200540485600262005774565b91509150816200546a5760405162461bcd60e51b815260206004820152602a60248201527f4f7074696f6e7348656c7065723a206e617469766544726f70206f7074696f6e604482015269081b9bdd08199bdd5b9960b21b60648201526084016200211a565b604051635caa7efb60e11b8152309063b954fdf6906200548f9084906004016200699d565b6040805180830381865afa158015620054ac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620054d2919062007ccd565b6001600160801b03909116969095509350505050565b6000808060148414801590620054ff575060248414155b156200551e57604051636f5bff2160e11b815260040160405180910390fd5b6200552c8585600062005c6d565b92506200553c8585601062005cd2565b9150602484146200554f57600062005143565b620051438585601462005c6d565b6000806030831462005582576040516361d0c2c760e11b815260040160405180910390fd5b620055908484600062005c6d565b9150620055a08484601062005cfd565b90509250929050565b600080600080620055bc85600162005774565b9150915081620056215760405162461bcd60e51b815260206004820152602960248201527f4f7074696f6e7348656c7065723a206c7a52656365697665206f7074696f6e206044820152681b9bdd08199bdd5b9960ba1b60648201526084016200211a565b60405163f93e1d6160e01b8152309063f93e1d6190620056469084906004016200699d565b6040805180830381865afa15801562005663573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062005689919062007cfe565b6001600160801b0391821697911695509350505050565b60008060108314801590620056b6575060208314155b15620056d557604051634796aee160e01b815260040160405180910390fd5b620056e38484600062005c6d565b915060208314620056f6576000620055a0565b620055a08484601062005c6d565b600062004ecb60516031848662007b38565b81546001600160801b038082166000190191600160801b9004811690821603620057465762005746604162005cc0565b6001600160801b0316600081815260018401602052604090209190915581546001600160801b031916179055565b601c5460405163e5c5e9a360e01b815260009160609183916001600160a01b03169063e5c5e9a390620057ac9088906004016200699d565b600060405180830381865afa158015620057ca573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620057f4919081019062007d32565b5060408051600080825260208201909252919250908190819081905b855185101562005c1557604051636e1775e360e01b8152600090819081903090636e1775e39062005848908c908c9060040162007188565b600060405180830381865afa15801562005866573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262005890919081019062007d9c565b9250925092508b60ff168360ff160362005c0a5760008080808060001960ff891601620059895760405163f93e1d6160e01b8152309063f93e1d6190620058dc908a906004016200699d565b6040805180830381865afa158015620058f9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200591f919062007cfe565b909550935062005930858d62007dfb565b9b506200593e848c62007dfb565b9a508b8b60405160200162005972929190608092831b6001600160801b031990811682529190921b16601082015260200190565b604051602081830303815290604052985062005c04565b60011960ff89160162005a3957604051635caa7efb60e11b8152309063b954fdf690620059bb908a906004016200699d565b6040805180830381865afa158015620059d8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620059fe919062007ccd565b909450925062005a0f848c62007dfb565b6040516001600160801b0319608083901b16602082015260308101859052909b5060500162005972565b60021960ff89160162005b1157604051630518e8ab60e41b8152309063518e8ab09062005a6b908a906004016200699d565b606060405180830381865afa15801562005a89573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062005aaf919062007c5d565b9096509450915062005ac2858d62007dfb565b9b5062005ad0848c62007dfb565b6040516001600160f01b031960f085901b1660208201526001600160801b031960808f811b8216602284015283901b166032820152909b5060420162005972565b60041960ff89160162005c0457604051634ba8e54360e11b81523090639751ca869062005b43908a906004016200699d565b606060405180830381865afa15801562005b61573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062005b87919062007b93565b919650909450905062005b9b848c62007dfb565b9a5062005ba9858d62007dfb565b9b5062005bb7818b62007e1e565b6040516001600160801b031960808f811b821660208401526001600160e01b031960e085901b1660308401528e901b166034820152909a5060440160405160208183030381529060405298505b50505050505b965062005810915050565b805160000362005c315760009750955062002a45945050505050565b60019a909950975050505050505050565b60006002820162005c568184868862007b38565b62005c619162007e3e565b60f01c95945050505050565b60006010820162005c818184868862007b38565b62005c8c9162007e6d565b60801c95945050505050565b600083838381811062005caf5762005caf62006cdb565b919091013560f81c95945050505050565b634e487b71600052806020526024601cfd5b60006004820162005ce68184868862007b38565b62005cf19162007b64565b60e01c95945050505050565b60006020820162005d118184868862007b38565b62005d1c9162007bdc565b95945050505050565b6040518060a00160405280600063ffffffff16815260200160006001600160a01b031681526020016060815260200160008152602001606081525090565b82805482825590600052602060002090810192821562005dbb579160200282015b8281111562005dbb57825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019062005d84565b5062005dc992915062006038565b5090565b8280548282559060005260206000209060070160089004810192821562005dbb5791602002820160005b8382111562005e3d57835183826101000a81548163ffffffff021916908363ffffffff160217905550926020019260040160208160030104928301926001030262005df7565b801562005e6f5782816101000a81549063ffffffff021916905560040160208160030104928301926001030262005e3d565b505062005dc992915062006038565b6154bf8062007e9d83390190565b615649806200d35c83390190565b6114d680620129a583390190565b6149708062013e7b83390190565b61244180620187eb83390190565b614c07806201ac2c83390190565b61313b806201f83383390190565b611625806202296e83390190565b613bf78062023f9383390190565b611eb68062027b8a83390190565b6040518060400160405280600063ffffffff16815260200162005f6e6040518060c0016040528060006001600160401b03168152602001600060ff168152602001600060ff168152602001600060ff16815260200160608152602001606081525090565b905290565b6040518060400160405280600063ffffffff16815260200162005f6e6040518060400160405280600063ffffffff16815260200160006001600160a01b031681525090565b6040518060400160405280600063ffffffff16815260200162005f6e6040518060c0016040528060006001600160a01b03168152602001600060ff168152602001600060ff168152602001600060ff16815260200160608152602001606081525090565b61191f8062029a4083390190565b6107f2806202b35f83390190565b5b8082111562005dc9576000815560010162006039565b63ffffffff811681146200606257600080fd5b50565b6001600160a01b03811681146200606257600080fd5b600080604083850312156200608f57600080fd5b82356200609c816200604f565b91506020830135620060ae8162006065565b809150509250929050565b60008083601f840112620060cc57600080fd5b5081356001600160401b03811115620060e457600080fd5b60208301915083602082850101111562002a4557600080fd5b634e487b7160e01b600052604160045260246000fd5b60405160c081016001600160401b0381118282101715620061385762006138620060fd565b60405290565b604051601f8201601f191681016001600160401b0381118282101715620061695762006169620060fd565b604052919050565b60006001600160401b038211156200618d576200618d620060fd565b50601f01601f191660200190565b600082601f830112620061ad57600080fd5b8135620061c4620061be8262006171565b6200613e565b818152846020838601011115620061da57600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080606085870312156200620e57600080fd5b84356001600160401b03808211156200622657600080fd5b6200623488838901620060b9565b909650945060208701359150808211156200624e57600080fd5b6200625c888389016200619b565b935060408701359150808211156200627357600080fd5b5062006282878288016200619b565b91505092959194509250565b60ff811681146200606257600080fd5b80356002811062002b7e57600080fd5b60008060408385031215620062c257600080fd5b8235620062cf816200628e565b9150620055a0602084016200629e565b60008151808452602080850194506020840160005b838110156200631b5781516001600160a01b031687529582019590820190600101620062f4565b509495945050505050565b60208152600062000cd86020830184620062df565b6000806000606084860312156200635157600080fd5b83356001600160401b038111156200636857600080fd5b62006376868287016200619b565b935050602084013562006389816200628e565b915060408401356200639b816200628e565b809150509250925092565b60005b83811015620063c3578181015183820152602001620063a9565b50506000910152565b60008151808452620063e6816020860160208601620063a6565b601f01601f19169290920160200192915050565b60008282518085526020808601955060208260051b8401016020860160005b848110156200644b57601f1986840301895262006438838351620063cc565b9884019892509083019060010162006419565b5090979650505050505050565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b83811015620064cd57888303603f19018552815180516001600160a01b03168452870151878401879052620064b987850182620063fa565b958801959350509086019060010162006481565b509098975050505050505050565b600080600080600080600060c0888a031215620064f757600080fd5b873562006504816200604f565b96506020880135620065168162006065565b955060408801356001600160401b03808211156200653357600080fd5b620065418b838c016200619b565b965060608a0135955060808a013591506200655c8262006065565b90935060a089013590808211156200657357600080fd5b50620065828a828b01620060b9565b989b979a50959850939692959293505050565b60008060208385031215620065a957600080fd5b82356001600160401b03811115620065c057600080fd5b620065ce85828601620060b9565b90969095509350505050565b61ffff811681146200606257600080fd5b60008060408385031215620065ff57600080fd5b82356200660c81620065da565b946020939093013593505050565b6000806000604084860312156200663057600080fd5b83356001600160401b03808211156200664857600080fd5b6200665687838801620060b9565b909550935060208601359150808211156200667057600080fd5b506200667f868287016200619b565b9150509250925092565b60006001600160401b03821115620066a557620066a5620060fd565b5060051b60200190565b600082601f830112620066c157600080fd5b81356020620066d4620061be8362006689565b8083825260208201915060208460051b870101935086841115620066f757600080fd5b602086015b8481101562006720578035620067128162006065565b8352918301918301620066fc565b509695505050505050565b600080604083850312156200673f57600080fd5b82356001600160401b03808211156200675757600080fd5b6200676586838701620066af565b93506020915081850135818111156200677d57600080fd5b85019050601f810186136200679157600080fd5b8035620067a2620061be8262006689565b81815260059190911b82018301908381019088831115620067c257600080fd5b928401925b82841015620067ed578335620067dd816200604f565b82529284019290840190620067c7565b80955050505050509250929050565b600060208083018184528085518083526040925060408601915060408160051b8701018488016000805b84811015620068a657898403603f19018652825180516001600160a01b03168552880151888501889052805188860181905290890190839060608701905b80831015620068905783516001600160e01b0319168252928b019260019290920191908b019062006864565b50978a0197955050509187019160010162006826565b50919998505050505050505050565b600080600060408486031215620068cb57600080fd5b83356001600160401b03811115620068e257600080fd5b620068f086828701620060b9565b909790965060209590950135949350505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60ff851681526060602082015260006200694c60608301858762006904565b905082604083015295945050505050565b6000602082840312156200697057600080fd5b81356001600160401b038111156200698757600080fd5b6200699584828501620066af565b949350505050565b60208152600062000cd86020830184620063cc565b600080600080600060a08688031215620069cb57600080fd5b8535620069d8816200604f565b945060208601359350604086013592506060860135620069f88162006065565b915060808601356001600160401b0381111562006a1457600080fd5b62006a22888289016200619b565b9150509295509295909350565b60208152600062000cd86020830184620063fa565b60008060008060006080868803121562006a5d57600080fd5b85356001600160401b038082111562006a7557600080fd5b62006a8389838a01620060b9565b9097509550602088013591508082111562006a9d57600080fd5b5062006aac888289016200619b565b93505060408601359150606086013562006ac68162006065565b809150509295509295909350565b60006020828403121562006ae757600080fd5b813562000cd88162006065565b6000806040838503121562006b0857600080fd5b82356200660c816200604f565b60008060006060848603121562006b2b57600080fd5b833562006b38816200628e565b925062006b48602085016200629e565b915060408401356001600160401b0381111562006b6457600080fd5b6200667f86828701620066af565b6001600160801b03811681146200606257600080fd5b60006020828403121562006b9b57600080fd5b813562000cd88162006b72565b6000806000806040858703121562006bbf57600080fd5b84356001600160401b038082111562006bd757600080fd5b62006be588838901620060b9565b9096509450602087013591508082111562006bff57600080fd5b5062006c0e87828801620060b9565b95989497509550505050565b855163ffffffff168152602080870151908201526040808701516001600160401b03169082015260018060a01b038516606082015283608082015260e060a0820152600062006c6d60e0830185620063cc565b82810360c084015262006c818185620063cc565b98975050505050505050565b634e487b7160e01b600052601160045260246000fd5b60ff818116838216019081111562000ffe5762000ffe62006c8d565b60ff828116828216039081111562000ffe5762000ffe62006c8d565b634e487b7160e01b600052603260045260246000fd5b600181811c9082168062006d0657607f821691505b60208210810362006d2757634e487b7160e01b600052602260045260246000fd5b50919050565b6001600160a01b038881168252871660208201526040810186905261ffff8516606082015260c06080820181905260009062006d6d908301858762006904565b82810360a084015262006d818185620063cc565b9a9950505050505050505050565b805162002b7e8162006065565b8051801515811462002b7e57600080fd5b6000806040838503121562006dc157600080fd5b825162006dce8162006065565b9150620055a06020840162006d9c565b80516001600160401b038116811462002b7e57600080fd5b805162002b7e816200628e565b60008060006060848603121562006e1957600080fd5b62006e248462006dde565b9250602084015162006e36816200628e565b60408501519092506200639b816200628e565b600082601f83011262006e5b57600080fd5b815162006e6c620061be8262006171565b81815284602083860101111562006e8257600080fd5b62006995826020830160208701620063a6565b60006020828403121562006ea857600080fd5b81516001600160401b0381111562006ebf57600080fd5b620069958482850162006e49565b600082601f83011262006edf57600080fd5b8151602062006ef2620061be8362006689565b8083825260208201915060208460051b87010193508684111562006f1557600080fd5b602086015b848110156200672057805162006f308162006065565b835291830191830162006f1a565b60006020828403121562006f5157600080fd5b81516001600160401b038082111562006f6957600080fd5b9083019060c0828603121562006f7e57600080fd5b62006f8862006113565b62006f938362006dde565b815262006fa36020840162006df6565b602082015262006fb66040840162006df6565b604082015262006fc96060840162006df6565b606082015260808301518281111562006fe157600080fd5b62006fef8782860162006ecd565b60808301525060a0830151828111156200700857600080fd5b620070168782860162006ecd565b60a08301525095945050505050565b8183823760009101908152919050565b6060815260006200704a6060830186620063cc565b905083602083015260ff83166040830152949350505050565b8082018082111562000ffe5762000ffe62006c8d565b63ffffffff851681526001600160a01b0384166020820152608060408201819052600090620070ab90830185620063cc565b905082606083015295945050505050565b600060208284031215620070cf57600080fd5b5051919050565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b83811015620064cd57888303603f190185528151805163ffffffff168452878101516001600160a01b0316888501528681015160a0888601819052906200714982870182620063cc565b915050606080830151818701525060808083015192508582038187015250620071738183620063cc565b968901969450505090860190600101620070ff565b6040815260006200719d6040830185620063cc565b90508260208301529392505050565b600060208284031215620071bf57600080fd5b81516001600160401b0380821115620071d757600080fd5b9083019060c08286031215620071ec57600080fd5b620071f662006113565b62006f938362006d8f565b828152600082516200721b816020850160208701620063a6565b919091016020019392505050565b6060815260006200723e6060830186620063cc565b60208301949094525060400152919050565b6020815260006200699560208301848662006904565b6000602082840312156200727957600080fd5b815162000cd88162006065565b6000602082840312156200729957600080fd5b815162000cd8816200604f565b600081620072b857620072b862006c8d565b506000190190565b604081526000620072d56040830185620063cc565b828103602084015262005d1c8185620063cc565b606081526000620072fe6060830186620063cc565b8281036020840152620073128186620063cc565b90508281036040840152620073288185620063cc565b9695505050505050565b608081526000620073476080830187620063cc565b82810360208401526200735b8187620063cc565b604084019590955250506001600160a01b039190911660609091015292915050565b63ffffffff88168152600060018060a01b03808916602084015260c06040840152620073ad60c0840189620063cc565b876060850152818716608085015283810360a0850152620073d081868862006904565b9b9a5050505050505050505050565b6001600160e01b031983168152815160009062007404816004850160208701620063a6565b919091016004019392505050565b6000825162007426818460208701620063a6565b9190910192915050565b6000602082840312156200744357600080fd5b62000cd88262006d9c565b634e487b7160e01b600052602160045260246000fd5b600060018060a01b038089168352808816602084015260c060408401526200749060c0840188620062df565b8187166060850152818616608085015283810360a085015262006d818186620062df565b63ffffffff881681526000602060ff8916602084015260e06040840152620074e060e0840189620062df565b6001600160a01b0388811660608601528482036080860152875480835260008981526020808220940191905b818110156200752c5784548416835260019485019492860192016200750c565b50506001600160401b03881660a087015285810360c0870152620075518188620062df565b9d9c50505050505050505050505050565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b83811015620064cd57603f19898403810186528251805163ffffffff16855288015188850188905280516001600160401b0316888601528089015160ff9081166060808801919091528983015182166080808901919091529083015190911660a0808801919091529082015160c080880152906200760e610100880183620062df565b920151868303840160e08801529190506200762a8183620062df565b978a01979550505091870191506001016200758b565b602080825282518282018190526000919060409081850190868401855b82811015620076a4578151805163ffffffff9081168652908701518051909116878601528601516001600160a01b031685850152606090930192908501906001016200765d565b5091979650505050505050565b600060208284031215620076c457600080fd5b815162000cd88162006b72565b6001600160801b03818116838216028082169190828114620076f757620076f762006c8d565b505092915050565b602080825282518282018190526000919060409081850190868401855b82811015620076a4578151805163ffffffff90811686529087015180516001600160801b031688870152808801516001600160401b031687870152860151166060850152608090930192908501906001016200771c565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b83811015620064cd57603f19898403810186528251805163ffffffff16855288015188850188905280516001600160a01b0316888601528089015160ff9081166060808801919091528983015182166080808901919091529083015190911660a0808801919091529082015160c080880152906200781f610100880183620062df565b920151868303840160e08801529190506200783b8183620062df565b978a01979550505091870191506001016200779c565b602080825282518282018190526000919060409081850190868401855b82811015620076a4578151805163ffffffff168552868101516001600160401b039081168887015286820151168686015260608082015161ffff16908601526080808201516001600160801b039081169187019190915260a091820151169085015260c090930192908501906001016200786e565b602080825282518282018190526000919060409081850190868401855b82811015620076a4578151805163ffffffff168552868101516001600160401b0316878601528581015161ffff16868601526060908101516001600160801b0316908501526080909301929085019060010162007900565b602080825282518282018190526000919060409081850190868401855b82811015620076a4578151805163ffffffff16855286015186850152928401929085019060010162007975565b865163ffffffff168152602080880151908201526040808801516001600160401b03169082015260018060a01b038616606082015284608082015260e060a08201526000620079f660e08301858762006904565b82810360c084015262007a0a8185620063cc565b9998505050505050505050565b601f82111562001ceb576000816000526020600020601f850160051c8101602086101562007a425750805b601f850160051c820191505b8181101562007a635782815560010162007a4e565b505050505050565b6001600160401b0383111562007a855762007a85620060fd565b62007a9d8362007a96835462006cf1565b8362007a17565b6000601f84116001811462007ad4576000851562007abb5750838201355b600019600387901b1c1916600186901b17835562007b31565b600083815260209020601f19861690835b8281101562007b07578685013582556020948501946001909201910162007ae5565b508682101562007b255760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b6000808585111562007b4957600080fd5b8386111562007b5757600080fd5b5050820193919092039150565b6001600160e01b03198135818116916004851015620076f75760049490940360031b84901b1690921692915050565b60008060006060848603121562007ba957600080fd5b835162007bb68162006b72565b602085015190935062007bc9816200604f565b60408501519092506200639b8162006b72565b8035602083101562000ffe57600019602084900360031b1b1692915050565b6001600160c01b03198135818116916008851015620076f75760089490940360031b84901b1690921692915050565b6000835162007c3e818460208801620063a6565b83519083019062007c54818360208801620063a6565b01949350505050565b60008060006060848603121562007c7357600080fd5b835162007c8081620065da565b602085015190935062007bc98162006b72565b60008060006060848603121562007ca957600080fd5b835162007cb6816200628e565b602085015160409095015190969495509392505050565b6000806040838503121562007ce157600080fd5b825162007cee8162006b72565b6020939093015192949293505050565b6000806040838503121562007d1257600080fd5b825162007d1f8162006b72565b6020840151909250620060ae8162006b72565b6000806040838503121562007d4657600080fd5b82516001600160401b038082111562007d5e57600080fd5b62007d6c8683870162006e49565b9350602085015191508082111562007d8357600080fd5b5062007d928582860162006e49565b9150509250929050565b60008060006060848603121562007db257600080fd5b835162007dbf816200628e565b60208501519093506001600160401b0381111562007ddc57600080fd5b62007dea8682870162006e49565b925050604084015190509250925092565b6001600160801b03818116838216019080821115620020ac57620020ac62006c8d565b63ffffffff818116838216019080821115620020ac57620020ac62006c8d565b6001600160f01b03198135818116916002851015620076f75760029490940360031b84901b1690921692915050565b6001600160801b03198135818116916010851015620076f75760109490940360031b84901b169092169291505056fe60c06040526001600d553480156200001657600080fd5b50604051620054bf380380620054bf8339810160408190526200003991620002cd565b81816001600160a01b0381166200006b57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6200007681620000cd565b5063ffffffff166080526040516200008e90620002bf565b604051809103906000f080158015620000ab573d6000803e3d6000fd5b506001600160a01b031660a0819052620000c5906200011d565b50506200034a565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b620001276200028e565b6040516301ffc9a760e01b81526325fc096160e21b60048201526001600160a01b038216906301ffc9a790602401602060405180830381865afa15801562000173573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200019991906200031f565b620001b75760405163eb64f35d60e01b815260040160405180910390fd5b6001600160a01b03811660009081526005602052604090205460ff1615620001f25760405163457517f360e11b815260040160405180910390fd5b6001600160a01b0381166000818152600560209081526040808320805460ff191660019081179091556004805491820181559093527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b90920180546001600160a01b0319168417905590519182527f6b374d56679ca9463f27c85c6311e2bb7fde69bf201d3da39d53f10bd9d78af5910160405180910390a150565b6000546001600160a01b03163314620002bd5760405163118cdaa760e01b815233600482015260240162000062565b565b6101e380620052dc83390190565b60008060408385031215620002e157600080fd5b825163ffffffff81168114620002f657600080fd5b60208401519092506001600160a01b03811681146200031457600080fd5b809150509250929050565b6000602082840312156200033257600080fd5b815180151581146200034357600080fd5b9392505050565b60805160a051614f496200039360003960006107810152600081816105310152818161278901528181612f7b01528181612fe20152818161355301526135ba0152614f496000f3fe6080604052600436106103505760003560e01c80639132e5c3116101c6578063c9fc7bcd116100f7578063ddc28c5811610095578063e8964e811161006f578063e8964e8114610b8f578063ef667aa114610baf578063f2fde38b14610bfa578063f64be4c714610c1a57600080fd5b8063ddc28c5814610b2e578063e1758bd814610b5b578063e4fe1d9414610b6f57600080fd5b8063d4b4ec8f116100d1578063d4b4ec8f14610a72578063d70b890214610a92578063dc706a6214610ab2578063dc93c8a214610ae257600080fd5b8063c9fc7bcd146109f6578063ca5eb5e114610a3d578063cb5026b914610a5d57600080fd5b8063a7229fd911610164578063aafea3121161013e578063aafea31214610976578063b96a277f14610996578063c28e0eed146109b6578063c9a54a99146109d657600080fd5b8063a7229fd914610916578063a825d74714610936578063aafe5e071461095657600080fd5b80639c6d7340116101a05780639c6d73401461086f5780639d7f9775146108b6578063a0dd43fc146108d6578063a718531b146108f657600080fd5b80639132e5c31461081a57806391d20fa11461083c5780639535ff301461084f57600080fd5b80635b17bb70116102a05780636f50a8031161023e57806379624ca91161021857806379624ca9146107a35780637cb59012146107bc578063861e1ca5146107dc5780638da5cb5b146107fc57600080fd5b80636f50a80314610724578063715018a61461075a578063733180911461076f57600080fd5b80636a14d7151161027a5780636a14d715146106655780636bf73fa3146106855780636dbd9f90146106a55780636e83f5bb146106c557600080fd5b80635b17bb70146105b65780636750cd4c14610615578063697fe6b61461064557600080fd5b80632baf0be71161030d578063402f8468116102e7578063402f8468146104c057806340f80683146104ff578063416ecebf1461051f578063587cde1e1461056857600080fd5b80632baf0be7146104355780632e80fbf31461045957806335d330b01461047957600080fd5b80630c0c389e1461035557806314f651a91461036a578063183c834f146103a85780632637a450146103c85780632a56c1b0146103e85780632b3197b914610408575b600080fd5b610368610363366004613e11565b610c50565b005b34801561037657600080fd5b5061037f610d4e565b6040805163ffffffff90931683526001600160a01b039091166020830152015b60405180910390f35b3480156103b457600080fd5b506103686103c3366004613ec0565b610d80565b6103db6103d6366004613f0b565b611027565b60405161039f9190613f5d565b3480156103f457600080fd5b50610368610403366004613f9f565b61114d565b34801561041457600080fd5b5061042861042336600461400e565b6111ed565b60405161039f91906140b2565b34801561044157600080fd5b5061044b60001981565b60405190815260200161039f565b34801561046557600080fd5b506103686104743660046140dc565b6112b8565b34801561048557600080fd5b5061044b610494366004614143565b600c60209081526000948552604080862082529385528385208152918452828420909152825290205481565b3480156104cc57600080fd5b506104e06104db366004614185565b611427565b604080516001600160a01b03909316835290151560208301520161039f565b34801561050b57600080fd5b5061036861051a3660046140dc565b6114a5565b34801561052b57600080fd5b506105537f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff909116815260200161039f565b34801561057457600080fd5b5061059e6105833660046141af565b600f602052600090815260409020546001600160a01b031681565b6040516001600160a01b03909116815260200161039f565b3480156105c257600080fd5b506105fd6105d13660046141ca565b60016020908152600093845260408085208252928452828420905282529020546001600160401b031681565b6040516001600160401b03909116815260200161039f565b34801561062157600080fd5b50610635610630366004614206565b61160b565b604051901515815260200161039f565b34801561065157600080fd5b50610368610660366004614221565b61165b565b34801561067157600080fd5b50610368610680366004613ec0565b6116d0565b34801561069157600080fd5b506103686106a036600461431c565b611aae565b3480156106b157600080fd5b506103686106c03660046143ff565b611b18565b3480156106d157600080fd5b506107056106e0366004614206565b600b60205260009081526040902080546001909101546001600160a01b039091169082565b604080516001600160a01b03909316835260208301919091520161039f565b34801561073057600080fd5b5061059e61073f366004614206565b600a602052600090815260409020546001600160a01b031681565b34801561076657600080fd5b50610368611bba565b34801561077b57600080fd5b5061059e7f000000000000000000000000000000000000000000000000000000000000000081565b3480156107af57600080fd5b50600d5460011415610635565b3480156107c857600080fd5b506103686107d736600461448f565b611bce565b3480156107e857600080fd5b506106356107f73660046144e0565b611cba565b34801561080857600080fd5b506000546001600160a01b031661059e565b34801561082657600080fd5b5061082f611d26565b60405161039f919061450b565b61036861084a366004614558565b611d88565b34801561085b57600080fd5b5061036861086a366004614602565b611f18565b34801561087b57600080fd5b506105fd61088a3660046141ca565b60036020908152600093845260408085208252928452828420905282529020546001600160401b031681565b3480156108c257600080fd5b506106356108d1366004614602565b61217c565b3480156108e257600080fd5b506105fd6108f13660046141ca565b612256565b34801561090257600080fd5b50610368610911366004614645565b6122b6565b34801561092257600080fd5b50610368610931366004614671565b6125d6565b34801561094257600080fd5b5061036861095136600461468f565b6125ee565b34801561096257600080fd5b5061044b6109713660046141ca565b612739565b34801561098257600080fd5b506103686109913660046146cc565b6127b9565b3480156109a257600080fd5b5061059e6109b1366004614185565b6129e2565b3480156109c257600080fd5b506103686109d13660046141af565b612a51565b3480156109e257600080fd5b506106356109f13660046144e0565b612aae565b348015610a0257600080fd5b5061044b610a113660046146e8565b600260209081526000948552604080862082529385528385208152918452828420909152825290205481565b348015610a4957600080fd5b50610368610a583660046141af565b612b13565b348015610a6957600080fd5b5061044b600081565b348015610a7e57600080fd5b50610368610a8d366004614645565b612b73565b348015610a9e57600080fd5b50610368610aad3660046146e8565b612db1565b348015610abe57600080fd5b50610635610acd3660046141af565b60056020526000908152604090205460ff1681565b348015610aee57600080fd5b50610635610afd366004614185565b6001600160a01b03918216600090815260066020908152604080832063ffffffff9490941683529290522054161590565b348015610b3a57600080fd5b50610b4e610b49366004613f0b565b612ea0565b60405161039f919061472a565b348015610b6757600080fd5b50600061059e565b348015610b7b57600080fd5b50600e5461059e906001600160a01b031681565b348015610b9b57600080fd5b50610368610baa3660046141af565b61310c565b348015610bbb57600080fd5b50610705610bca366004614185565b6008602090815260009283526040808420909152908252902080546001909101546001600160a01b039091169082565b348015610c0657600080fd5b50610368610c153660046141af565b613270565b348015610c2657600080fd5b5061059e610c35366004614206565b6009602052600090815260409020546001600160a01b031681565b610c9f86610c6160208a018a614206565b60208a0135610c7660608c0160408d01614741565b898989604051602001610c8b9392919061475c565b6040516020818303038152906040526132ae565b506040516313137d6560e01b81526001600160a01b038716906313137d65903490610cda908b908a908a908a9033908b908b906004016147d8565b6000604051808303818588803b158015610cf357600080fd5b505af1158015610d07573d6000803e3d6000fd5b50505050507f3cd5e48f9730b129dc7550f0fcea9c767b7be37837cd10e55eb35f734f4bca048787604051610d3d92919061482f565b60405180910390a150505050505050565b600080610d5e600d546001141590565b610d6a57600080610d78565b610d78600d5460a081901c91565b915091509091565b6001600160a01b038216600090815260056020526040902054829060ff16610dbb57604051631bc58ef360e11b815260040160405180910390fd5b826001600160a01b03811615610e5e576000816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e2f919061486b565b6002811115610e4057610e40614855565b03610e5e576040516342756b1b60e11b815260040160405180910390fd5b83856001600160a01b03821615610efa576040516319d4335360e21b815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015610eb9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610edd919061489a565b610efa57604051630e476aa960e21b815260040160405180910390fd5b610f0388613469565b6000610f0f8989611427565b9150508015610f3157604051633c075f7560e01b815260040160405180910390fd5b85600003610f79576001600160a01b038916600090815260086020908152604080832063ffffffff8c168452909152812080546001600160a01b031916815560010155610fdf565b438611610f99576040516302efcf9160e11b815260040160405180910390fd5b6001600160a01b03898116600090815260086020908152604080832063ffffffff8d168452909152902080546001600160a01b0319169189169190911781556001018690555b7f4e0a5bbfa0c11a64effb1ada324b5437a17272e1aed9320398715ef71bb209288989898960405161101494939291906148b7565b60405180910390a1505050505050505050565b61102f613d5a565b61103c6020840184614206565b336001600d54146110605760405163ee120b0960e01b815260040160405180910390fd5b63ffffffff60a01b60a083811b919091166001600160a01b03831617600d5561108e908601608087016148e7565b80156110a35750600e546001600160a01b0316155b156110c157604051632d7b695560e11b815260040160405180910390fd5b6000806110ce33886134ba565b9150915060006110db3490565b905060006110f76110f260a08b0160808c016148e7565b613766565b905061110884604001518383613802565b600e5460408501516020015161112a916001600160a01b03169083868c613850565b60408401515161113c9083858b61387d565b50506001600d555095945050505050565b61115685613469565b600083838360405160200161116d9392919061475c565b60408051601f1981840301815291905290506111ab866111906020880188614206565b60208801356111a560608a0160408b01614741565b856132ae565b507f3cd5e48f9730b129dc7550f0fcea9c767b7be37837cd10e55eb35f734f4bca0485876040516111dd92919061482f565b60405180910390a1505050505050565b6001600160a01b038316600090815260056020526040902054606090849060ff1661122b57604051631bc58ef360e11b815260040160405180910390fd5b604051639c33abf760e01b815263ffffffff80861660048301526001600160a01b0388811660248401529085166044830152861690639c33abf790606401600060405180830381865afa158015611286573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526112ae9190810190614997565b9695505050505050565b6112c185613469565b6001600160a01b038516600090815260026020908152604080832063ffffffff88168452825280832086845282528083206001600160401b038616845290915290205481811461133357604051637182306f60e01b815260048101829052602481018390526044015b60405180910390fd5b6001600160a01b038616600090815260016020908152604080832063ffffffff8916845282528083208784529091529020546001600160401b039081169084161180159061137f575080155b156113a857604051630c09b63560e41b81526001600160401b038416600482015260240161132a565b6001600160a01b038616600090815260026020908152604080832063ffffffff89168452825280832087845282528083206001600160401b0387168452909152908190206000199055517faf0450c392c4f702515a457a362328c8aa21916048ca6d0419e248b30cb55292906111dd90879087908a90889088906149cb565b6001600160a01b03808316600090815260076020908152604080832063ffffffff86168452909152812054909116908161149e5763ffffffff83166000908152600a60205260409020546001600160a01b031691508161149a57604051633c74268360e11b815260040160405180910390fd5b5060015b9250929050565b6114ae85613469565b6001600160a01b038516600090815260026020908152604080832063ffffffff88168452825280832086845282528083206001600160401b038616845290915290205481811461151b57604051637182306f60e01b8152600481018290526024810183905260440161132a565b80158061156557506001600160a01b038616600090815260016020908152604080832063ffffffff8916845282528083208784529091529020546001600160401b03908116908416115b1561158e57604051630c09b63560e41b81526001600160401b038416600482015260240161132a565b6001600160a01b038616600090815260026020908152604080832063ffffffff89168452825280832087845282528083206001600160401b038716845290915280822091909155517f7f68a37a6e69a0de35024a234558f9efe4b33b58657753d21eaaa82d51c3510e906111dd90879087908a90889088906149cb565b63ffffffff81166000908152600960205260408120546001600160a01b031615801590611655575063ffffffff82166000908152600a60205260409020546001600160a01b031615155b92915050565b336001600160a01b03168b6001600160a01b03168d6001600160a01b03167f8a0b1dce321c5c5fb42349bce46d18087c04140de520917661fb923e44a904b98d8d8d8d8d8d8d8d8d8d6040516116ba9a99989796959493929190614a08565b60405180910390a4505050505050505050505050565b6001600160a01b038216600090815260056020526040902054829060ff1615801561170357506001600160a01b03811615155b156117215760405163a4ff2ec360e01b815260040160405180910390fd5b826001600160a01b038116156117c4576000816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611771573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611795919061486b565b60028111156117a6576117a6614855565b036117c4576040516342756b1b60e11b815260040160405180910390fd5b83856001600160a01b03821615611860576040516319d4335360e21b815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa15801561181f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611843919061489a565b61186057604051630e476aa960e21b815260040160405180910390fd5b61186988613469565b6001600160a01b03808916600090815260076020908152604080832063ffffffff8c168452909152902054811690871681036118b85760405163d0ecb66b60e01b815260040160405180910390fd5b6001600160a01b03898116600081815260076020908152604080832063ffffffff8e168085529083529281902080546001600160a01b031916958d1695861790558051938452908301919091528101919091527fcd6f92f5ac6185a5acfa02c92090746cec64d777269cbcd0ed031e396657a1c29060600160405180910390a18515611a32576001600160a01b038116158061195b57506001600160a01b038716155b1561197957604051633c075f7560e01b815260040160405180910390fd5b60006040518060400160405280836001600160a01b0316815260200188436119a19190614a87565b90526001600160a01b038b8116600090815260086020908152604080832063ffffffff8f168452825291829020845181546001600160a01b03191694169390931783558301516001909201829055519192507f4e0a5bbfa0c11a64effb1ada324b5437a17272e1aed9320398715ef71bb2092891611a24918d918d9187916148b7565b60405180910390a150611aa3565b6001600160a01b038916600090815260086020908152604080832063ffffffff8c16845290915280822080546001600160a01b0319168155600101829055517f4e0a5bbfa0c11a64effb1ada324b5437a17272e1aed9320398715ef71bb2092891611014918c918c918691906148b7565b505050505050505050565b336001600160a01b03168a6001600160a01b03167f7edfa10fe10193301ad8a8bea7e968c7bcabcc64981f368e3aeada40ce26ae2c8d8c8c8c8c8c8c8c8c8c604051611b039a99989796959493929190614a9a565b60405180910390a35050505050505050505050565b6001600160a01b038316600090815260056020526040902054839060ff16611b5357604051631bc58ef360e11b815260040160405180910390fd5b611b5c85613469565b604051631077eb9160e11b81526001600160a01b038516906320efd72290611b8c90889087908790600401614af9565b600060405180830381600087803b158015611ba657600080fd5b505af1158015611aa3573d6000803e3d6000fd5b611bc26138a7565b611bcc60006138d4565b565b336000908152600c602090815260408083206001600160a01b03891684528252808320878452825280832061ffff8716845290915290205415611c2457604051630542086560e21b815260040160405180910390fd5b8181604051611c34929190614bec565b60408051918290038220336000818152600c60209081528482206001600160a01b038c16835281528482208a8352815284822061ffff8a168352905292909220557f3d52ff888d033fd3dd1d8057da59e850c91d91a72c41dfa445b247dfedeb6dc191611cab919088908890889088908890614bfc565b60405180910390a15050505050565b6001600160a01b03811660009081526001602090815260408220611d1f91859185918590611cea90850185614206565b63ffffffff168152602080820192909252604090810160009081208984013582529092529020546001600160401b0316613924565b9392505050565b60606004805480602002602001604051908101604052809291908181526020018280548015611d7e57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611d60575b5050505050905090565b6001600160a01b038089166000908152600c60209081526040808320938b168352928152828220898352815282822061ffff891683529052818120549151611dd39087908790614bec565b60405180910390209050808214611e07576040516335ca595f60e01b8152600481018390526024810182905260440161132a565b6001600160a01b03808b166000908152600c60209081526040808320938d168084529382528083208c8452825280832061ffff8c168452909152908190206001905551630685081360e51b815263d0a10260903490611e76908e908d908c908c9033908d908d90600401614c46565b6000604051808303818588803b158015611e8f57600080fd5b505af1158015611ea3573d6000803e3d6000fd5b50505050507e36c98efcf9e6641dfbc9051f66f405253e8e0c2ab4a24dccda15595b7378c88a8a8a8a604051611f0494939291906001600160a01b039485168152929093166020830152604082015261ffff91909116606082015260800190565b60405180910390a150505050505050505050565b6001600160a01b038116600090815260056020526040902054819060ff16158015611f4b57506001600160a01b03811615155b15611f695760405163a4ff2ec360e01b815260040160405180910390fd5b816001600160a01b0381161561200c576001816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611fb9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fdd919061486b565b6002811115611fee57611fee614855565b0361200c57604051633d00f6f160e11b815260040160405180910390fd5b82846001600160a01b038216156120a8576040516319d4335360e21b815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015612067573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061208b919061489a565b6120a857604051630e476aa960e21b815260040160405180910390fd5b6120b187613469565b6001600160a01b03878116600090815260066020908152604080832063ffffffff8b1684529091529020548187169116036120ff5760405163d0ecb66b60e01b815260040160405180910390fd5b6001600160a01b03878116600081815260066020908152604080832063ffffffff8c168085529083529281902080546001600160a01b031916958b1695861790558051938452908301919091528101919091527f4cff966ebee29a156dcb34cf72c1d06231fb1777f6bdf6e8089819232f002b1c90606001610d3d565b600080600061218b8686611427565b91509150816001600160a01b0316846001600160a01b0316036121b357600192505050611d1f565b6000816121e8576001600160a01b038716600090815260086020908152604080832063ffffffff8a16845290915290206121fe565b63ffffffff86166000908152600b602052604090205b6040805180820190915281546001600160a01b03908116808352600190930154602083015290925086161480156122385750438160200151115b156122495760019350505050611d1f565b5060009695505050505050565b6001600160a01b038316600090815260016020908152604080832063ffffffff8616845282528083208484529091528120546001600160401b03165b6122a1858585846001016139a8565b156122ae57600101612292565b949350505050565b6122be6138a7565b6001600160a01b038216600090815260056020526040902054829060ff166122f957604051631bc58ef360e11b815260040160405180910390fd5b826001600160a01b0381161561239c576000816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612349573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061236d919061486b565b600281111561237e5761237e614855565b0361239c576040516342756b1b60e11b815260040160405180910390fd5b83856001600160a01b03821615612438576040516319d4335360e21b815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa1580156123f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061241b919061489a565b61243857604051630e476aa960e21b815260040160405180910390fd5b63ffffffff87166000908152600a60205260409020546001600160a01b03908116908716810361247b5760405163d0ecb66b60e01b815260040160405180910390fd5b63ffffffff88166000818152600a602090815260409182902080546001600160a01b0319166001600160a01b038c169081179091558251938452908301527fc16891855cffb4a5ac51ac11864a3f3c96ba816cc45fe686c987ae36277de5ec910160405180910390a185156125695763ffffffff88166000908152600b6020526040902080546001600160a01b0319166001600160a01b0383161781556125228743614a87565b600182018190556040517f55b28633cdb29709386f555dfc54418592ad475ce7a65a78ac5928af60ffb8f89161255b918c918691614c99565b60405180910390a1506125cc565b63ffffffff88166000908152600b602052604080822080546001600160a01b0319168155600101829055517f55b28633cdb29709386f555dfc54418592ad475ce7a65a78ac5928af60ffb8f8916125c3918b918591614c99565b60405180910390a15b5050505050505050565b6125de6138a7565b6125e98383836139f5565b505050565b612605826125ff6020860186614206565b3361217c565b612622576040516313e9bb2b60e21b815260040160405180910390fd5b6001600160a01b0382166000908152600160209081526040822090829061264b90870187614206565b63ffffffff168152602080820192909252604090810160009081208784013582529092529020546001600160401b03169050612688848483613924565b6126a55760405163751cb20f60e01b815260040160405180910390fd5b6126b0848483613a18565b6126cc5760405162bbf0e560e11b815260040160405180910390fd5b6126f8836126dd6020870187614206565b60208701356126f26060890160408a01614741565b86613ad5565b7f0d87345f3d1c929caba93e1c3821b54ff3512e12b66aa3cfe54b6bcbc17e59b484848460405161272b93929190614cc0565b60405180910390a150505050565b6001600160a01b038316600090815260036020908152604080832063ffffffff8616845282528083208484529091528120548190612781906001600160401b03166001614ce8565b90506127b0817f0000000000000000000000000000000000000000000000000000000000000000878787613b3b565b95945050505050565b6127c16138a7565b6001600160a01b038116600090815260056020526040902054819060ff166127fc57604051631bc58ef360e11b815260040160405180910390fd5b816001600160a01b0381161561289f576001816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561284c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612870919061486b565b600281111561288157612881614855565b0361289f57604051633d00f6f160e11b815260040160405180910390fd5b82846001600160a01b0382161561293b576040516319d4335360e21b815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa1580156128fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061291e919061489a565b61293b57604051630e476aa960e21b815260040160405180910390fd5b63ffffffff86166000908152600960205260409020546001600160a01b0380871691160361297c5760405163d0ecb66b60e01b815260040160405180910390fd5b63ffffffff861660008181526009602090815260409182902080546001600160a01b0319166001600160a01b038a169081179091558251938452908301527f16aa0f528038ab41019e95bae5b418a50ba8532c5800e3b7ea2f517d3fa625f591016111dd565b6001600160a01b03808316600090815260066020908152604080832063ffffffff861684529091529020541680611655575063ffffffff81166000908152600960205260409020546001600160a01b03168061165557604051636c1ccdb560e01b815260040160405180910390fd5b612a596138a7565b600e80546001600160a01b0319166001600160a01b0383169081179091556040519081527fd476ec5ec1ac11cec3714d41e7ea49419471aceb9bd0dff1becfc3e363a62396906020015b60405180910390a150565b6001600160a01b03811660009081526001602090815260408220611d1f91859185918590612ade90850185614206565b63ffffffff168152602080820192909252604090810160009081208984013582529092529020546001600160401b0316613a18565b336000818152600f602090815260409182902080546001600160a01b0319166001600160a01b0386169081179091558251938452908301527f6ee10e9ed4d6ce9742703a498707862f4b00f1396a87195eb93267b3d79839819101612aa3565b6001600160a01b038216600090815260056020526040902054829060ff16612bae57604051631bc58ef360e11b815260040160405180910390fd5b826001600160a01b03811615612c51576000816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612bfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c22919061486b565b6002811115612c3357612c33614855565b03612c51576040516342756b1b60e11b815260040160405180910390fd5b83856001600160a01b03821615612ced576040516319d4335360e21b815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015612cac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cd0919061489a565b612ced57604051630e476aa960e21b815260040160405180910390fd5b612cf56138a7565b84600003612d295763ffffffff87166000908152600b6020526040812080546001600160a01b031916815560010155612d7e565b438511612d49576040516302efcf9160e11b815260040160405180910390fd5b63ffffffff87166000908152600b6020526040902080546001600160a01b0319166001600160a01b0388161781556001018590555b7f55b28633cdb29709386f555dfc54418592ad475ce7a65a78ac5928af60ffb8f8878787604051610d3d93929190614c99565b612dba84613469565b612dc5848484612256565b612dd0906001614ce8565b6001600160401b0316816001600160401b031614612e0c57604051630c09b63560e41b81526001600160401b038216600482015260240161132a565b6001600160a01b038416600081815260016020908152604080832063ffffffff8816808552908352818420878552835292819020805467ffffffffffffffff19166001600160401b038716908117909155815193845291830186905282019290925260608101919091527f28f40053783033ef755556a0c3315379141f51a33aed8334174ffbadd90bde489060800161272b565b6040805180820190915260008082526020820152612ec460a08401608085016148e7565b8015612ed95750600e546001600160a01b0316155b15612ef757604051632d7b695560e11b815260040160405180910390fd5b6001600160a01b03821660009081526003602090815260408220908290612f2090870187614206565b63ffffffff16815260208082019290925260409081016000908120878401358252909252902054612f5b906001600160401b03166001614ce8565b905060006040518060e00160405280836001600160401b031681526020017f000000000000000000000000000000000000000000000000000000000000000063ffffffff168152602001856001600160a01b03168152602001866000016020810190612fc79190614206565b63ffffffff1681526020018660200135815260200161301f847f0000000000000000000000000000000000000000000000000000000000000000888a60000160208101906130159190614206565b8b60200135613b3b565b81526020016130316040880188614d08565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509390945250929350915061307e9050856109b16020890189614206565b90506001600160a01b03811663d80e9bd98361309d60608a018a614d08565b6130ad60a08c0160808d016148e7565b6040518563ffffffff1660e01b81526004016130cc9493929190614d4e565b6040805180830381865afa1580156130e8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ae9190614e42565b6131146138a7565b6040516301ffc9a760e01b81526325fc096160e21b60048201526001600160a01b038216906301ffc9a790602401602060405180830381865afa15801561315f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613183919061489a565b6131a05760405163eb64f35d60e01b815260040160405180910390fd5b6001600160a01b03811660009081526005602052604090205460ff16156131da5760405163457517f360e11b815260040160405180910390fd5b6001600160a01b0381166000818152600560209081526040808320805460ff191660019081179091556004805491820181559093527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b90920180546001600160a01b0319168417905590519182527f6b374d56679ca9463f27c85c6311e2bb7fde69bf201d3da39d53f10bd9d78af59101612aa3565b6132786138a7565b6001600160a01b0381166132a257604051631e4fbdf760e01b81526000600482015260240161132a565b6132ab816138d4565b50565b6001600160a01b038516600090815260016020908152604080832063ffffffff8816845282528083208684529091528120546001600160401b0390811690841681101561339c57600181015b846001600160401b0316816001600160401b03161161334f5761331f888888846139a8565b61334757604051630c09b63560e41b81526001600160401b038216600482015260240161132a565b6001016132fa565b506001600160a01b038716600090815260016020908152604080832063ffffffff8a16845282528083208884529091529020805467ffffffffffffffff19166001600160401b0386161790555b82516020808501919091206001600160a01b038916600090815260028352604080822063ffffffff8b168352845280822089835284528082206001600160401b0389168352909352919091205490925080831461341657604051637182306f60e01b8152600481018290526024810184905260440161132a565b50506001600160a01b03909516600090815260026020908152604080832063ffffffff90971683529581528582209482529384528481206001600160401b03909316815291909252918220919091555090565b336001600160a01b0382161480159061349c57506001600160a01b038181166000908152600f6020526040902054163314155b156132ab5760405163c4c5259360e01b815260040160405180910390fd5b6134c2613d5a565b600080613533856134d66020870187614206565b6001600160a01b0391909116600090815260036020908152604080832063ffffffff949094168352928152828220818901358352905220805467ffffffffffffffff19811660016001600160401b03928316019182161790915590565b905060006040518060e00160405280836001600160401b031681526020017f000000000000000000000000000000000000000000000000000000000000000063ffffffff168152602001876001600160a01b0316815260200186600001602081019061359f9190614206565b63ffffffff168152602001866020013581526020016135ed847f00000000000000000000000000000000000000000000000000000000000000008a8a60000160208101906130159190614206565b81526020016135ff6040880188614d08565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509390945250929350915061364c9050876109b16020890189614206565b90506000806001600160a01b038316634389e58f8561366e60608c018c614d08565b61367e60a08e0160808f016148e7565b6040518563ffffffff1660e01b815260040161369d9493929190614d4e565b6000604051808303816000875af11580156136bc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526136e49190810190614e5e565b90925090507f1ab700d4ced0c005b164c0f789fd09fcbb0156d4c2041b8a3bfbcd961cd1567f8161371860608b018b614d08565b866040516137299493929190614eac565b60405180910390a1506040805160608101825260a09094015184526001600160401b03909416602084015292820192909252925090509250929050565b600081156137fd57600e546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa1580156137b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137da9190614eec565b9050806000036137fd57604051631775123760e01b815260040160405180910390fd5b919050565b82518210806138145750808360200151115b156125e95782516020840151604051634f3ec0d360e01b815260048101929092526024820184905260448201526064810182905260840161132a565b831561386157613861858386613bb4565b82841015613876576138768582868603613bb4565b5050505050565b831561388d5761388d8285613bef565b828410156138a1576138a181858503613bef565b50505050565b6000546001600160a01b03163314611bcc5760405163118cdaa760e01b815233600482015260240161132a565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600080826001600160401b031611806122ae5750604051600162842fc360e01b031981526001600160a01b0384169063ff7bd03d90613967908790600401614f05565b602060405180830381865afa158015613984573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122ae919061489a565b6001600160a01b038416600090815260026020908152604080832063ffffffff87168452825280832085845282528083206001600160401b03851684529091529020541515949350505050565b6001600160a01b038316613a0d576125e98282613bef565b6125e9838383613bb4565b60006001600160401b038216613a346060860160408701614741565b6001600160401b031611806122ae57506001600160a01b03831660009081526002602090815260408220908290613a6d90880188614206565b63ffffffff1663ffffffff1681526020019081526020016000206000866020013581526020019081526020016000206000866040016020810190613ab19190614741565b6001600160401b031681526020810191909152604001600020541415949350505050565b80613af3576040516304df7fdb60e11b815260040160405180910390fd5b6001600160a01b03909416600090815260026020908152604080832063ffffffff90961683529481528482209382529283528381206001600160401b03909216815291522055565b600085856001600160a01b03861660405160c09390931b6001600160c01b031916602084015260e091821b6001600160e01b03199081166028850152602c8401919091529085901b16604c8201526050810183905260700160405160208183030381529060405280519060200120905095945050505050565b6001600160a01b038216613bdb576040516306b7a93160e41b815260040160405180910390fd5b6125e96001600160a01b0384168383613c9c565b6001600160a01b038216613c16576040516306b7a93160e41b815260040160405180910390fd5b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114613c63576040519150601f19603f3d011682016040523d82523d6000602084013e613c68565b606091505b50509050806125e957604051631196f20d60e21b81526001600160a01b03841660048201526024810183905260440161132a565b604080516001600160a01b03841660248201526044808201849052825180830390910181526064909101909152602080820180516001600160e01b031663a9059cbb60e01b17815282516125e9938793909260009283929183919082885af180613d0c576040513d6000823e3d81fd5b50506000513d91508115613d24578060011415613d31565b6001600160a01b0384163b155b156138a157604051635274afe760e01b81526001600160a01b038516600482015260240161132a565b60405180606001604052806000801916815260200160006001600160401b03168152602001613d9c604051806040016040528060008152602001600081525090565b905290565b600060608284031215613db357600080fd5b50919050565b80356001600160a01b03811681146137fd57600080fd5b60008083601f840112613de257600080fd5b5081356001600160401b03811115613df957600080fd5b60208301915083602082850101111561149e57600080fd5b600080600080600080600060e0888a031215613e2c57600080fd5b613e368989613da1565b9650613e4460608901613db9565b95506080880135945060a08801356001600160401b0380821115613e6757600080fd5b613e738b838c01613dd0565b909650945060c08a0135915080821115613e8c57600080fd5b50613e998a828b01613dd0565b989b979a50959850939692959293505050565b803563ffffffff811681146137fd57600080fd5b60008060008060808587031215613ed657600080fd5b613edf85613db9565b9350613eed60208601613eac565b9250613efb60408601613db9565b9396929550929360600135925050565b60008060408385031215613f1e57600080fd5b82356001600160401b03811115613f3457600080fd5b830160a08186031215613f4657600080fd5b9150613f5460208401613db9565b90509250929050565b6000608082019050825182526001600160401b0360208401511660208301526040830151613f98604084018280518252602090810151910152565b5092915050565b600080600080600060c08688031215613fb757600080fd5b613fc086613db9565b9450613fcf8760208801613da1565b93506080860135925060a08601356001600160401b03811115613ff157600080fd5b613ffd88828901613dd0565b969995985093965092949392505050565b6000806000806080858703121561402457600080fd5b61402d85613db9565b935061403b60208601613db9565b925061404960408601613eac565b915061405760608601613eac565b905092959194509250565b60005b8381101561407d578181015183820152602001614065565b50506000910152565b6000815180845261409e816020860160208601614062565b601f01601f19169290920160200192915050565b602081526000611d1f6020830184614086565b80356001600160401b03811681146137fd57600080fd5b600080600080600060a086880312156140f457600080fd5b6140fd86613db9565b945061410b60208701613eac565b935060408601359250614120606087016140c5565b949793965091946080013592915050565b803561ffff811681146137fd57600080fd5b6000806000806080858703121561415957600080fd5b61416285613db9565b935061417060208601613db9565b92506040850135915061405760608601614131565b6000806040838503121561419857600080fd5b6141a183613db9565b9150613f5460208401613eac565b6000602082840312156141c157600080fd5b611d1f82613db9565b6000806000606084860312156141df57600080fd5b6141e884613db9565b92506141f660208501613eac565b9150604084013590509250925092565b60006020828403121561421857600080fd5b611d1f82613eac565b6000806000806000806000806000806000806101208d8f03121561424457600080fd5b61424d8d613db9565b9b5061425b60208e01613db9565b9a5060408d0135995061427060608e01614131565b985060808d0135975060a08d013596506001600160401b0360c08e0135111561429857600080fd5b6142a88e60c08f01358f01613dd0565b90965094506001600160401b0360e08e013511156142c557600080fd5b6142d58e60e08f01358f01613dd0565b90945092506001600160401b036101008e013511156142f357600080fd5b6143048e6101008f01358f01613dd0565b81935080925050509295989b509295989b509295989b565b60008060008060008060008060008060006101408c8e03121561433e57600080fd5b6143488d8d613da1565b9a5061435660608d01613db9565b995060808c0135985060a08c0135975060c08c013596506001600160401b038060e08e0135111561438657600080fd5b6143968e60e08f01358f01613dd0565b90975095506101008d01358110156143ad57600080fd5b6143be8e6101008f01358f01613dd0565b90955093506101208d01358110156143d557600080fd5b506143e78d6101208e01358e01613dd0565b81935080925050509295989b509295989b9093969950565b6000806000806060858703121561441557600080fd5b61441e85613db9565b935061442c60208601613db9565b925060408501356001600160401b038082111561444857600080fd5b818701915087601f83011261445c57600080fd5b81358181111561446b57600080fd5b8860208260051b850101111561448057600080fd5b95989497505060200194505050565b6000806000806000608086880312156144a757600080fd5b6144b086613db9565b9450602086013593506144c560408701614131565b925060608601356001600160401b03811115613ff157600080fd5b600080608083850312156144f357600080fd5b6144fd8484613da1565b9150613f5460608401613db9565b6020808252825182820181905260009190848201906040850190845b8181101561454c5783516001600160a01b031683529284019291840191600101614527565b50909695505050505050565b60008060008060008060008060c0898b03121561457457600080fd5b61457d89613db9565b975061458b60208a01613db9565b9650604089013595506145a060608a01614131565b945060808901356001600160401b03808211156145bc57600080fd5b6145c88c838d01613dd0565b909650945060a08b01359150808211156145e157600080fd5b506145ee8b828c01613dd0565b999c989b5096995094979396929594505050565b60008060006060848603121561461757600080fd5b61462084613db9565b925061462e60208501613eac565b915061463c60408501613db9565b90509250925092565b60008060006060848603121561465a57600080fd5b61466384613eac565b92506141f660208501613db9565b60008060006060848603121561468657600080fd5b61466384613db9565b600080600060a084860312156146a457600080fd5b6146ae8585613da1565b92506146bc60608501613db9565b9150608084013590509250925092565b600080604083850312156146df57600080fd5b613f4683613eac565b600080600080608085870312156146fe57600080fd5b61470785613db9565b935061471560208601613eac565b925060408501359150614057606086016140c5565b815181526020808301519082015260408101611655565b60006020828403121561475357600080fd5b611d1f826140c5565b838152818360208301376000910160200190815292915050565b63ffffffff61478482613eac565b168252602081013560208301526001600160401b036147a5604083016140c5565b1660408301525050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6147e28189614776565b86606082015260e0608082015260006147ff60e0830187896147af565b6001600160a01b03861660a084015282810360c08401526148218185876147af565b9a9950505050505050505050565b6080810161483d8285614776565b6001600160a01b039290921660609190910152919050565b634e487b7160e01b600052602160045260246000fd5b60006020828403121561487d57600080fd5b815160038110611d1f57600080fd5b80151581146132ab57600080fd5b6000602082840312156148ac57600080fd5b8151611d1f8161488c565b6001600160a01b03948516815263ffffffff93909316602084015292166040820152606081019190915260800190565b6000602082840312156148f957600080fd5b8135611d1f8161488c565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261492b57600080fd5b81516001600160401b038082111561494557614945614904565b604051601f8301601f19908116603f0116810190828211818310171561496d5761496d614904565b8160405283815286602085880101111561498657600080fd5b6112ae846020830160208901614062565b6000602082840312156149a957600080fd5b81516001600160401b038111156149bf57600080fd5b6122ae8482850161491a565b63ffffffff95909516855260208501939093526001600160a01b039190911660408401526001600160401b03166060830152608082015260a00190565b8a815261ffff8a16602082015288604082015287606082015260e060808201526000614a3860e08301888a6147af565b82810360a0840152614a4b8187896147af565b905082810360c0840152614a608185876147af565b9d9c50505050505050505050505050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561165557611655614a71565b6000610120614aa9838e614776565b8b60608401528a60808401528960a08401528060c0840152614ace818401898b6147af565b905082810360e0840152614ae38187896147af565b9050828103610100840152614a608185876147af565b6001600160a01b03841681526040602080830182905282820184905260009190606090818501600587901b8601830188865b89811015614bdc57888303605f190184528135368c9003605e19018112614b5157600080fd5b8b0163ffffffff80614b6283613eac565b16855280614b71888401613eac565b16878601525087810135601e19823603018112614b8d57600080fd5b0185810190356001600160401b03811115614ba757600080fd5b803603821315614bb657600080fd5b8789860152614bc888860182846147af565b958701959450505090840190600101614b2b565b50909a9950505050505050505050565b8183823760009101908152919050565b6001600160a01b038781168252861660208201526040810185905261ffff8416606082015260a060808201819052600090614c3a90830184866147af565b98975050505050505050565b600060018060a01b03808a16835288602084015260a06040840152614c6f60a08401888a6147af565b81871660608501528381036080850152614c8a8186886147af565b9b9a5050505050505050505050565b63ffffffff9390931683526001600160a01b03919091166020830152604082015260600190565b60a08101614cce8286614776565b6001600160a01b0393909316606082015260800152919050565b6001600160401b03818116838216019080821115613f9857613f98614a71565b6000808335601e19843603018112614d1f57600080fd5b8301803591506001600160401b03821115614d3957600080fd5b60200191503681900382131561149e57600080fd5b606080825285516001600160401b031682820152602086015163ffffffff16608083015260408601516001600160a01b031660a0830152850151600090614d9d60c084018263ffffffff169052565b50608086015160e083015260a086015161010083015260c086015160e0610120840152614dce610140840182614086565b90508281036020840152614de38186886147af565b9150506127b0604083018415159052565b600060408284031215614e0657600080fd5b604051604081018181106001600160401b0382111715614e2857614e28614904565b604052825181526020928301519281019290925250919050565b600060408284031215614e5457600080fd5b611d1f8383614df4565b60008060608385031215614e7157600080fd5b614e7b8484614df4565b915060408301516001600160401b03811115614e9657600080fd5b614ea28582860161491a565b9150509250929050565b606081526000614ebf6060830187614086565b8281036020840152614ed28186886147af565b91505060018060a01b038316604083015295945050505050565b600060208284031215614efe57600080fd5b5051919050565b60608101611655828461477656fea264697066735822122051f9eb00fad53055a1c5087afa544b196a11f671f631975a7c4baa38e5aeab2064736f6c63430008160033608060405234801561001057600080fd5b506101c3806100206000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806301ffc9a7146100655780631881d94d1461008d57806354fd4d501461009c5780636750cd4c146100c3575b604051632657b6c360e01b815260040160405180910390fd5b61007861007336600461010e565b6100d7565b60405190151581526020015b60405180910390f35b6002604051610084919061013f565b6040805167ffffffffffffffff815260ff6020820152600291810191909152606001610084565b6100786100d1366004610167565b50600190565b60006001600160e01b031982166325fc096160e21b148061010857506301ffc9a760e01b6001600160e01b03198316145b92915050565b60006020828403121561012057600080fd5b81356001600160e01b03198116811461013857600080fd5b9392505050565b602081016003831061016157634e487b7160e01b600052602160045260246000fd5b91905290565b60006020828403121561017957600080fd5b813563ffffffff8116811461013857600080fdfea2646970667358221220b5a5c043a377444c26f6a8e7dd680ec55e20f7abeec109769ef20ff322bd379164736f6c6343000816003360e06040526001600d553480156200001657600080fd5b5060405162005649380380620056498339810160408190526200003991620002fb565b828281816001600160a01b0381166200006d57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6200007881620000de565b5063ffffffff166080526040516200009090620002d0565b604051809103906000f080158015620000ad573d6000803e3d6000fd5b506001600160a01b031660a0819052620000c7906200012e565b50506001600160a01b031660c052506200037a9050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b620001386200029f565b6040516301ffc9a760e01b81526325fc096160e21b60048201526001600160a01b038216906301ffc9a790602401602060405180830381865afa15801562000184573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001aa91906200034f565b620001c85760405163eb64f35d60e01b815260040160405180910390fd5b6001600160a01b03811660009081526005602052604090205460ff1615620002035760405163457517f360e11b815260040160405180910390fd5b6001600160a01b0381166000818152600560209081526040808320805460ff191660019081179091556004805491820181559093527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b90920180546001600160a01b0319168417905590519182527f6b374d56679ca9463f27c85c6311e2bb7fde69bf201d3da39d53f10bd9d78af5910160405180910390a150565b6000546001600160a01b03163314620002ce5760405163118cdaa760e01b815233600482015260240162000064565b565b6101e3806200546683390190565b80516001600160a01b0381168114620002f657600080fd5b919050565b6000806000606084860312156200031157600080fd5b835163ffffffff811681146200032657600080fd5b92506200033660208501620002de565b91506200034660408501620002de565b90509250925092565b6000602082840312156200036257600080fd5b815180151581146200037357600080fd5b9392505050565b60805160a05160c051615084620003e260003960008181610b6a01528181612a7b015281816137ab015261395e01526000610781015260008181610531015281816127a901528181612fab015281816130120152818161358001526135e701526150846000f3fe6080604052600436106103505760003560e01c80639132e5c3116101c6578063c9fc7bcd116100f7578063ddc28c5811610095578063e8964e811161006f578063e8964e8114610bae578063ef667aa114610bce578063f2fde38b14610c19578063f64be4c714610c3957600080fd5b8063ddc28c5814610b2e578063e1758bd814610b5b578063e4fe1d9414610b8e57600080fd5b8063d4b4ec8f116100d1578063d4b4ec8f14610a72578063d70b890214610a92578063dc706a6214610ab2578063dc93c8a214610ae257600080fd5b8063c9fc7bcd146109f6578063ca5eb5e114610a3d578063cb5026b914610a5d57600080fd5b8063a7229fd911610164578063aafea3121161013e578063aafea31214610976578063b96a277f14610996578063c28e0eed146109b6578063c9a54a99146109d657600080fd5b8063a7229fd914610916578063a825d74714610936578063aafe5e071461095657600080fd5b80639c6d7340116101a05780639c6d73401461086f5780639d7f9775146108b6578063a0dd43fc146108d6578063a718531b146108f657600080fd5b80639132e5c31461081a57806391d20fa11461083c5780639535ff301461084f57600080fd5b80635b17bb70116102a05780636f50a8031161023e57806379624ca91161021857806379624ca9146107a35780637cb59012146107bc578063861e1ca5146107dc5780638da5cb5b146107fc57600080fd5b80636f50a80314610724578063715018a61461075a578063733180911461076f57600080fd5b80636a14d7151161027a5780636a14d715146106655780636bf73fa3146106855780636dbd9f90146106a55780636e83f5bb146106c557600080fd5b80635b17bb70146105b65780636750cd4c14610615578063697fe6b61461064557600080fd5b80632baf0be71161030d578063402f8468116102e7578063402f8468146104c057806340f80683146104ff578063416ecebf1461051f578063587cde1e1461056857600080fd5b80632baf0be7146104355780632e80fbf31461045957806335d330b01461047957600080fd5b80630c0c389e1461035557806314f651a91461036a578063183c834f146103a85780632637a450146103c85780632a56c1b0146103e85780632b3197b914610408575b600080fd5b610368610363366004613f4c565b610c6f565b005b34801561037657600080fd5b5061037f610d6d565b6040805163ffffffff90931683526001600160a01b039091166020830152015b60405180910390f35b3480156103b457600080fd5b506103686103c3366004613ffb565b610d9f565b6103db6103d6366004614046565b611046565b60405161039f9190614098565b3480156103f457600080fd5b506103686104033660046140da565b61116d565b34801561041457600080fd5b50610428610423366004614149565b61120d565b60405161039f91906141ed565b34801561044157600080fd5b5061044b60001981565b60405190815260200161039f565b34801561046557600080fd5b50610368610474366004614217565b6112d8565b34801561048557600080fd5b5061044b61049436600461427e565b600c60209081526000948552604080862082529385528385208152918452828420909152825290205481565b3480156104cc57600080fd5b506104e06104db3660046142c0565b611447565b604080516001600160a01b03909316835290151560208301520161039f565b34801561050b57600080fd5b5061036861051a366004614217565b6114c5565b34801561052b57600080fd5b506105537f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff909116815260200161039f565b34801561057457600080fd5b5061059e6105833660046142ea565b600f602052600090815260409020546001600160a01b031681565b6040516001600160a01b03909116815260200161039f565b3480156105c257600080fd5b506105fd6105d1366004614305565b60016020908152600093845260408085208252928452828420905282529020546001600160401b031681565b6040516001600160401b03909116815260200161039f565b34801561062157600080fd5b50610635610630366004614341565b61162b565b604051901515815260200161039f565b34801561065157600080fd5b5061036861066036600461435c565b61167b565b34801561067157600080fd5b50610368610680366004613ffb565b6116f0565b34801561069157600080fd5b506103686106a0366004614457565b611ace565b3480156106b157600080fd5b506103686106c036600461453a565b611b38565b3480156106d157600080fd5b506107056106e0366004614341565b600b60205260009081526040902080546001909101546001600160a01b039091169082565b604080516001600160a01b03909316835260208301919091520161039f565b34801561073057600080fd5b5061059e61073f366004614341565b600a602052600090815260409020546001600160a01b031681565b34801561076657600080fd5b50610368611bda565b34801561077b57600080fd5b5061059e7f000000000000000000000000000000000000000000000000000000000000000081565b3480156107af57600080fd5b50600d5460011415610635565b3480156107c857600080fd5b506103686107d73660046145ca565b611bee565b3480156107e857600080fd5b506106356107f736600461461b565b611cda565b34801561080857600080fd5b506000546001600160a01b031661059e565b34801561082657600080fd5b5061082f611d46565b60405161039f9190614646565b61036861084a366004614693565b611da8565b34801561085b57600080fd5b5061036861086a36600461473d565b611f38565b34801561087b57600080fd5b506105fd61088a366004614305565b60036020908152600093845260408085208252928452828420905282529020546001600160401b031681565b3480156108c257600080fd5b506106356108d136600461473d565b61219c565b3480156108e257600080fd5b506105fd6108f1366004614305565b612276565b34801561090257600080fd5b50610368610911366004614780565b6122d6565b34801561092257600080fd5b506103686109313660046147ac565b6125f6565b34801561094257600080fd5b506103686109513660046147ca565b61260e565b34801561096257600080fd5b5061044b610971366004614305565b612759565b34801561098257600080fd5b50610368610991366004614807565b6127d9565b3480156109a257600080fd5b5061059e6109b13660046142c0565b612a02565b3480156109c257600080fd5b506103686109d13660046142ea565b612a71565b3480156109e257600080fd5b506106356109f136600461461b565b612ad7565b348015610a0257600080fd5b5061044b610a11366004614823565b600260209081526000948552604080862082529385528385208152918452828420909152825290205481565b348015610a4957600080fd5b50610368610a583660046142ea565b612b3c565b348015610a6957600080fd5b5061044b600081565b348015610a7e57600080fd5b50610368610a8d366004614780565b612ba3565b348015610a9e57600080fd5b50610368610aad366004614823565b612de1565b348015610abe57600080fd5b50610635610acd3660046142ea565b60056020526000908152604090205460ff1681565b348015610aee57600080fd5b50610635610afd3660046142c0565b6001600160a01b03918216600090815260066020908152604080832063ffffffff9490941683529290522054161590565b348015610b3a57600080fd5b50610b4e610b49366004614046565b612ed0565b60405161039f9190614865565b348015610b6757600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061059e565b348015610b9a57600080fd5b50600e5461059e906001600160a01b031681565b348015610bba57600080fd5b50610368610bc93660046142ea565b61313c565b348015610bda57600080fd5b50610705610be93660046142c0565b6008602090815260009283526040808420909152908252902080546001909101546001600160a01b039091169082565b348015610c2557600080fd5b50610368610c343660046142ea565b6132a0565b348015610c4557600080fd5b5061059e610c54366004614341565b6009602052600090815260409020546001600160a01b031681565b610cbe86610c8060208a018a614341565b60208a0135610c9560608c0160408d0161487c565b898989604051602001610caa93929190614897565b6040516020818303038152906040526132db565b506040516313137d6560e01b81526001600160a01b038716906313137d65903490610cf9908b908a908a908a9033908b908b90600401614913565b6000604051808303818588803b158015610d1257600080fd5b505af1158015610d26573d6000803e3d6000fd5b50505050507f3cd5e48f9730b129dc7550f0fcea9c767b7be37837cd10e55eb35f734f4bca048787604051610d5c92919061496a565b60405180910390a150505050505050565b600080610d7d600d546001141590565b610d8957600080610d97565b610d97600d5460a081901c91565b915091509091565b6001600160a01b038216600090815260056020526040902054829060ff16610dda57604051631bc58ef360e11b815260040160405180910390fd5b826001600160a01b03811615610e7d576000816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e4e91906149a6565b6002811115610e5f57610e5f614990565b03610e7d576040516342756b1b60e11b815260040160405180910390fd5b83856001600160a01b03821615610f19576040516319d4335360e21b815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015610ed8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610efc91906149d5565b610f1957604051630e476aa960e21b815260040160405180910390fd5b610f2288613496565b6000610f2e8989611447565b9150508015610f5057604051633c075f7560e01b815260040160405180910390fd5b85600003610f98576001600160a01b038916600090815260086020908152604080832063ffffffff8c168452909152812080546001600160a01b031916815560010155610ffe565b438611610fb8576040516302efcf9160e11b815260040160405180910390fd5b6001600160a01b03898116600090815260086020908152604080832063ffffffff8d168452909152902080546001600160a01b0319169189169190911781556001018690555b7f4e0a5bbfa0c11a64effb1ada324b5437a17272e1aed9320398715ef71bb209288989898960405161103394939291906149f2565b60405180910390a1505050505050505050565b61104e613e95565b61105b6020840184614341565b336001600d541461107f5760405163ee120b0960e01b815260040160405180910390fd5b63ffffffff60a01b60a083811b919091166001600160a01b03831617600d556110ad90860160808701614a22565b80156110c25750600e546001600160a01b0316155b156110e057604051632d7b695560e11b815260040160405180910390fd5b6000806110ed33886134e7565b9150915060006110fb613793565b9050600061111761111260a08b0160808c01614a22565b613823565b9050611128846040015183836138bf565b600e5460408501516020015161114a916001600160a01b03169083868c61390d565b60408401515161115c9083858b61393a565b50506001600d555095945050505050565b61117685613496565b600083838360405160200161118d93929190614897565b60408051601f1981840301815291905290506111cb866111b06020880188614341565b60208801356111c560608a0160408b0161487c565b856132db565b507f3cd5e48f9730b129dc7550f0fcea9c767b7be37837cd10e55eb35f734f4bca0485876040516111fd92919061496a565b60405180910390a1505050505050565b6001600160a01b038316600090815260056020526040902054606090849060ff1661124b57604051631bc58ef360e11b815260040160405180910390fd5b604051639c33abf760e01b815263ffffffff80861660048301526001600160a01b0388811660248401529085166044830152861690639c33abf790606401600060405180830381865afa1580156112a6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526112ce9190810190614ad2565b9695505050505050565b6112e185613496565b6001600160a01b038516600090815260026020908152604080832063ffffffff88168452825280832086845282528083206001600160401b038616845290915290205481811461135357604051637182306f60e01b815260048101829052602481018390526044015b60405180910390fd5b6001600160a01b038616600090815260016020908152604080832063ffffffff8916845282528083208784529091529020546001600160401b039081169084161180159061139f575080155b156113c857604051630c09b63560e41b81526001600160401b038416600482015260240161134a565b6001600160a01b038616600090815260026020908152604080832063ffffffff89168452825280832087845282528083206001600160401b0387168452909152908190206000199055517faf0450c392c4f702515a457a362328c8aa21916048ca6d0419e248b30cb55292906111fd90879087908a9088908890614b06565b6001600160a01b03808316600090815260076020908152604080832063ffffffff8616845290915281205490911690816114be5763ffffffff83166000908152600a60205260409020546001600160a01b03169150816114ba57604051633c74268360e11b815260040160405180910390fd5b5060015b9250929050565b6114ce85613496565b6001600160a01b038516600090815260026020908152604080832063ffffffff88168452825280832086845282528083206001600160401b038616845290915290205481811461153b57604051637182306f60e01b8152600481018290526024810183905260440161134a565b80158061158557506001600160a01b038616600090815260016020908152604080832063ffffffff8916845282528083208784529091529020546001600160401b03908116908416115b156115ae57604051630c09b63560e41b81526001600160401b038416600482015260240161134a565b6001600160a01b038616600090815260026020908152604080832063ffffffff89168452825280832087845282528083206001600160401b038716845290915280822091909155517f7f68a37a6e69a0de35024a234558f9efe4b33b58657753d21eaaa82d51c3510e906111fd90879087908a9088908890614b06565b63ffffffff81166000908152600960205260408120546001600160a01b031615801590611675575063ffffffff82166000908152600a60205260409020546001600160a01b031615155b92915050565b336001600160a01b03168b6001600160a01b03168d6001600160a01b03167f8a0b1dce321c5c5fb42349bce46d18087c04140de520917661fb923e44a904b98d8d8d8d8d8d8d8d8d8d6040516116da9a99989796959493929190614b43565b60405180910390a4505050505050505050505050565b6001600160a01b038216600090815260056020526040902054829060ff1615801561172357506001600160a01b03811615155b156117415760405163a4ff2ec360e01b815260040160405180910390fd5b826001600160a01b038116156117e4576000816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611791573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117b591906149a6565b60028111156117c6576117c6614990565b036117e4576040516342756b1b60e11b815260040160405180910390fd5b83856001600160a01b03821615611880576040516319d4335360e21b815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa15801561183f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186391906149d5565b61188057604051630e476aa960e21b815260040160405180910390fd5b61188988613496565b6001600160a01b03808916600090815260076020908152604080832063ffffffff8c168452909152902054811690871681036118d85760405163d0ecb66b60e01b815260040160405180910390fd5b6001600160a01b03898116600081815260076020908152604080832063ffffffff8e168085529083529281902080546001600160a01b031916958d1695861790558051938452908301919091528101919091527fcd6f92f5ac6185a5acfa02c92090746cec64d777269cbcd0ed031e396657a1c29060600160405180910390a18515611a52576001600160a01b038116158061197b57506001600160a01b038716155b1561199957604051633c075f7560e01b815260040160405180910390fd5b60006040518060400160405280836001600160a01b0316815260200188436119c19190614bc2565b90526001600160a01b038b8116600090815260086020908152604080832063ffffffff8f168452825291829020845181546001600160a01b03191694169390931783558301516001909201829055519192507f4e0a5bbfa0c11a64effb1ada324b5437a17272e1aed9320398715ef71bb2092891611a44918d918d9187916149f2565b60405180910390a150611ac3565b6001600160a01b038916600090815260086020908152604080832063ffffffff8c16845290915280822080546001600160a01b0319168155600101829055517f4e0a5bbfa0c11a64effb1ada324b5437a17272e1aed9320398715ef71bb2092891611033918c918c918691906149f2565b505050505050505050565b336001600160a01b03168a6001600160a01b03167f7edfa10fe10193301ad8a8bea7e968c7bcabcc64981f368e3aeada40ce26ae2c8d8c8c8c8c8c8c8c8c8c604051611b239a99989796959493929190614bd5565b60405180910390a35050505050505050505050565b6001600160a01b038316600090815260056020526040902054839060ff16611b7357604051631bc58ef360e11b815260040160405180910390fd5b611b7c85613496565b604051631077eb9160e11b81526001600160a01b038516906320efd72290611bac90889087908790600401614c34565b600060405180830381600087803b158015611bc657600080fd5b505af1158015611ac3573d6000803e3d6000fd5b611be261398c565b611bec60006139b9565b565b336000908152600c602090815260408083206001600160a01b03891684528252808320878452825280832061ffff8716845290915290205415611c4457604051630542086560e21b815260040160405180910390fd5b8181604051611c54929190614d27565b60408051918290038220336000818152600c60209081528482206001600160a01b038c16835281528482208a8352815284822061ffff8a168352905292909220557f3d52ff888d033fd3dd1d8057da59e850c91d91a72c41dfa445b247dfedeb6dc191611ccb919088908890889088908890614d37565b60405180910390a15050505050565b6001600160a01b03811660009081526001602090815260408220611d3f91859185918590611d0a90850185614341565b63ffffffff168152602080820192909252604090810160009081208984013582529092529020546001600160401b0316613a09565b9392505050565b60606004805480602002602001604051908101604052809291908181526020018280548015611d9e57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611d80575b5050505050905090565b6001600160a01b038089166000908152600c60209081526040808320938b168352928152828220898352815282822061ffff891683529052818120549151611df39087908790614d27565b60405180910390209050808214611e27576040516335ca595f60e01b8152600481018390526024810182905260440161134a565b6001600160a01b03808b166000908152600c60209081526040808320938d168084529382528083208c8452825280832061ffff8c168452909152908190206001905551630685081360e51b815263d0a10260903490611e96908e908d908c908c9033908d908d90600401614d81565b6000604051808303818588803b158015611eaf57600080fd5b505af1158015611ec3573d6000803e3d6000fd5b50505050507e36c98efcf9e6641dfbc9051f66f405253e8e0c2ab4a24dccda15595b7378c88a8a8a8a604051611f2494939291906001600160a01b039485168152929093166020830152604082015261ffff91909116606082015260800190565b60405180910390a150505050505050505050565b6001600160a01b038116600090815260056020526040902054819060ff16158015611f6b57506001600160a01b03811615155b15611f895760405163a4ff2ec360e01b815260040160405180910390fd5b816001600160a01b0381161561202c576001816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611fd9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ffd91906149a6565b600281111561200e5761200e614990565b0361202c57604051633d00f6f160e11b815260040160405180910390fd5b82846001600160a01b038216156120c8576040516319d4335360e21b815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015612087573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120ab91906149d5565b6120c857604051630e476aa960e21b815260040160405180910390fd5b6120d187613496565b6001600160a01b03878116600090815260066020908152604080832063ffffffff8b16845290915290205481871691160361211f5760405163d0ecb66b60e01b815260040160405180910390fd5b6001600160a01b03878116600081815260066020908152604080832063ffffffff8c168085529083529281902080546001600160a01b031916958b1695861790558051938452908301919091528101919091527f4cff966ebee29a156dcb34cf72c1d06231fb1777f6bdf6e8089819232f002b1c90606001610d5c565b60008060006121ab8686611447565b91509150816001600160a01b0316846001600160a01b0316036121d357600192505050611d3f565b600081612208576001600160a01b038716600090815260086020908152604080832063ffffffff8a168452909152902061221e565b63ffffffff86166000908152600b602052604090205b6040805180820190915281546001600160a01b03908116808352600190930154602083015290925086161480156122585750438160200151115b156122695760019350505050611d3f565b5060009695505050505050565b6001600160a01b038316600090815260016020908152604080832063ffffffff8616845282528083208484529091528120546001600160401b03165b6122c185858584600101613a8d565b156122ce576001016122b2565b949350505050565b6122de61398c565b6001600160a01b038216600090815260056020526040902054829060ff1661231957604051631bc58ef360e11b815260040160405180910390fd5b826001600160a01b038116156123bc576000816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612369573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061238d91906149a6565b600281111561239e5761239e614990565b036123bc576040516342756b1b60e11b815260040160405180910390fd5b83856001600160a01b03821615612458576040516319d4335360e21b815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015612417573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061243b91906149d5565b61245857604051630e476aa960e21b815260040160405180910390fd5b63ffffffff87166000908152600a60205260409020546001600160a01b03908116908716810361249b5760405163d0ecb66b60e01b815260040160405180910390fd5b63ffffffff88166000818152600a602090815260409182902080546001600160a01b0319166001600160a01b038c169081179091558251938452908301527fc16891855cffb4a5ac51ac11864a3f3c96ba816cc45fe686c987ae36277de5ec910160405180910390a185156125895763ffffffff88166000908152600b6020526040902080546001600160a01b0319166001600160a01b0383161781556125428743614bc2565b600182018190556040517f55b28633cdb29709386f555dfc54418592ad475ce7a65a78ac5928af60ffb8f89161257b918c918691614dd4565b60405180910390a1506125ec565b63ffffffff88166000908152600b602052604080822080546001600160a01b0319168155600101829055517f55b28633cdb29709386f555dfc54418592ad475ce7a65a78ac5928af60ffb8f8916125e3918b918591614dd4565b60405180910390a15b5050505050505050565b6125fe61398c565b612609838383613ada565b505050565b6126258261261f6020860186614341565b3361219c565b612642576040516313e9bb2b60e21b815260040160405180910390fd5b6001600160a01b0382166000908152600160209081526040822090829061266b90870187614341565b63ffffffff168152602080820192909252604090810160009081208784013582529092529020546001600160401b031690506126a8848483613a09565b6126c55760405163751cb20f60e01b815260040160405180910390fd5b6126d0848483613afd565b6126ec5760405162bbf0e560e11b815260040160405180910390fd5b612718836126fd6020870187614341565b60208701356127126060890160408a0161487c565b86613bba565b7f0d87345f3d1c929caba93e1c3821b54ff3512e12b66aa3cfe54b6bcbc17e59b484848460405161274b93929190614dfb565b60405180910390a150505050565b6001600160a01b038316600090815260036020908152604080832063ffffffff86168452825280832084845290915281205481906127a1906001600160401b03166001614e23565b90506127d0817f0000000000000000000000000000000000000000000000000000000000000000878787613c20565b95945050505050565b6127e161398c565b6001600160a01b038116600090815260056020526040902054819060ff1661281c57604051631bc58ef360e11b815260040160405180910390fd5b816001600160a01b038116156128bf576001816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561286c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061289091906149a6565b60028111156128a1576128a1614990565b036128bf57604051633d00f6f160e11b815260040160405180910390fd5b82846001600160a01b0382161561295b576040516319d4335360e21b815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa15801561291a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061293e91906149d5565b61295b57604051630e476aa960e21b815260040160405180910390fd5b63ffffffff86166000908152600960205260409020546001600160a01b0380871691160361299c5760405163d0ecb66b60e01b815260040160405180910390fd5b63ffffffff861660008181526009602090815260409182902080546001600160a01b0319166001600160a01b038a169081179091558251938452908301527f16aa0f528038ab41019e95bae5b418a50ba8532c5800e3b7ea2f517d3fa625f591016111fd565b6001600160a01b03808316600090815260066020908152604080832063ffffffff861684529091529020541680611675575063ffffffff81166000908152600960205260409020546001600160a01b03168061167557604051636c1ccdb560e01b815260040160405180910390fd5b612a7961398c565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b031603612acb576040516310647d0b60e01b815260040160405180910390fd5b612ad481613c99565b50565b6001600160a01b03811660009081526001602090815260408220611d3f91859185918590612b0790850185614341565b63ffffffff168152602080820192909252604090810160009081208984013582529092529020546001600160401b0316613afd565b336000818152600f602090815260409182902080546001600160a01b0319166001600160a01b0386169081179091558251938452908301527f6ee10e9ed4d6ce9742703a498707862f4b00f1396a87195eb93267b3d798398191015b60405180910390a150565b6001600160a01b038216600090815260056020526040902054829060ff16612bde57604051631bc58ef360e11b815260040160405180910390fd5b826001600160a01b03811615612c81576000816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c5291906149a6565b6002811115612c6357612c63614990565b03612c81576040516342756b1b60e11b815260040160405180910390fd5b83856001600160a01b03821615612d1d576040516319d4335360e21b815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015612cdc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d0091906149d5565b612d1d57604051630e476aa960e21b815260040160405180910390fd5b612d2561398c565b84600003612d595763ffffffff87166000908152600b6020526040812080546001600160a01b031916815560010155612dae565b438511612d79576040516302efcf9160e11b815260040160405180910390fd5b63ffffffff87166000908152600b6020526040902080546001600160a01b0319166001600160a01b0388161781556001018590555b7f55b28633cdb29709386f555dfc54418592ad475ce7a65a78ac5928af60ffb8f8878787604051610d5c93929190614dd4565b612dea84613496565b612df5848484612276565b612e00906001614e23565b6001600160401b0316816001600160401b031614612e3c57604051630c09b63560e41b81526001600160401b038216600482015260240161134a565b6001600160a01b038416600081815260016020908152604080832063ffffffff8816808552908352818420878552835292819020805467ffffffffffffffff19166001600160401b038716908117909155815193845291830186905282019290925260608101919091527f28f40053783033ef755556a0c3315379141f51a33aed8334174ffbadd90bde489060800161274b565b6040805180820190915260008082526020820152612ef460a0840160808501614a22565b8015612f095750600e546001600160a01b0316155b15612f2757604051632d7b695560e11b815260040160405180910390fd5b6001600160a01b03821660009081526003602090815260408220908290612f5090870187614341565b63ffffffff16815260208082019290925260409081016000908120878401358252909252902054612f8b906001600160401b03166001614e23565b905060006040518060e00160405280836001600160401b031681526020017f000000000000000000000000000000000000000000000000000000000000000063ffffffff168152602001856001600160a01b03168152602001866000016020810190612ff79190614341565b63ffffffff1681526020018660200135815260200161304f847f0000000000000000000000000000000000000000000000000000000000000000888a60000160208101906130459190614341565b8b60200135613c20565b81526020016130616040880188614e43565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525092935091506130ae9050856109b16020890189614341565b90506001600160a01b03811663d80e9bd9836130cd60608a018a614e43565b6130dd60a08c0160808d01614a22565b6040518563ffffffff1660e01b81526004016130fc9493929190614e89565b6040805180830381865afa158015613118573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ce9190614f7d565b61314461398c565b6040516301ffc9a760e01b81526325fc096160e21b60048201526001600160a01b038216906301ffc9a790602401602060405180830381865afa15801561318f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131b391906149d5565b6131d05760405163eb64f35d60e01b815260040160405180910390fd5b6001600160a01b03811660009081526005602052604090205460ff161561320a5760405163457517f360e11b815260040160405180910390fd5b6001600160a01b0381166000818152600560209081526040808320805460ff191660019081179091556004805491820181559093527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b90920180546001600160a01b0319168417905590519182527f6b374d56679ca9463f27c85c6311e2bb7fde69bf201d3da39d53f10bd9d78af59101612b98565b6132a861398c565b6001600160a01b0381166132d257604051631e4fbdf760e01b81526000600482015260240161134a565b612ad4816139b9565b6001600160a01b038516600090815260016020908152604080832063ffffffff8816845282528083208684529091528120546001600160401b039081169084168110156133c957600181015b846001600160401b0316816001600160401b03161161337c5761334c88888884613a8d565b61337457604051630c09b63560e41b81526001600160401b038216600482015260240161134a565b600101613327565b506001600160a01b038716600090815260016020908152604080832063ffffffff8a16845282528083208884529091529020805467ffffffffffffffff19166001600160401b0386161790555b82516020808501919091206001600160a01b038916600090815260028352604080822063ffffffff8b168352845280822089835284528082206001600160401b0389168352909352919091205490925080831461344357604051637182306f60e01b8152600481018290526024810184905260440161134a565b50506001600160a01b03909516600090815260026020908152604080832063ffffffff90971683529581528582209482529384528481206001600160401b03909316815291909252918220919091555090565b336001600160a01b038216148015906134c957506001600160a01b038181166000908152600f6020526040902054163314155b15612ad45760405163c4c5259360e01b815260040160405180910390fd5b6134ef613e95565b600080613560856135036020870187614341565b6001600160a01b0391909116600090815260036020908152604080832063ffffffff949094168352928152828220818901358352905220805467ffffffffffffffff19811660016001600160401b03928316019182161790915590565b905060006040518060e00160405280836001600160401b031681526020017f000000000000000000000000000000000000000000000000000000000000000063ffffffff168152602001876001600160a01b031681526020018660000160208101906135cc9190614341565b63ffffffff1681526020018660200135815260200161361a847f00000000000000000000000000000000000000000000000000000000000000008a8a60000160208101906130459190614341565b815260200161362c6040880188614e43565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525092935091506136799050876109b16020890189614341565b90506000806001600160a01b038316634389e58f8561369b60608c018c614e43565b6136ab60a08e0160808f01614a22565b6040518563ffffffff1660e01b81526004016136ca9493929190614e89565b6000604051808303816000875af11580156136e9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526137119190810190614f99565b90925090507f1ab700d4ced0c005b164c0f789fd09fcbb0156d4c2041b8a3bfbcd961cd1567f8161374560608b018b614e43565b866040516137569493929190614fe7565b60405180910390a1506040805160608101825260a09094015184526001600160401b03909416602084015292820192909252925090509250929050565b6040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa1580156137fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061381e9190615027565b905090565b600081156138ba57600e546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015613873573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138979190615027565b9050806000036138ba57604051631775123760e01b815260040160405180910390fd5b919050565b82518210806138d15750808360200151115b156126095782516020840151604051634f3ec0d360e01b815260048101929092526024820184905260448201526064810182905260840161134a565b831561391e5761391e858386613cef565b82841015613933576139338582868603613cef565b5050505050565b341561395957604051634d18bd2960e11b815260040160405180910390fd5b6139867f00000000000000000000000000000000000000000000000000000000000000008585858561390d565b50505050565b6000546001600160a01b03163314611bec5760405163118cdaa760e01b815233600482015260240161134a565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600080826001600160401b031611806122ce5750604051600162842fc360e01b031981526001600160a01b0384169063ff7bd03d90613a4c908790600401615040565b602060405180830381865afa158015613a69573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122ce91906149d5565b6001600160a01b038416600090815260026020908152604080832063ffffffff87168452825280832085845282528083206001600160401b03851684529091529020541515949350505050565b6001600160a01b038316613af2576126098282613d2a565b612609838383613cef565b60006001600160401b038216613b19606086016040870161487c565b6001600160401b031611806122ce57506001600160a01b03831660009081526002602090815260408220908290613b5290880188614341565b63ffffffff1663ffffffff1681526020019081526020016000206000866020013581526020019081526020016000206000866040016020810190613b96919061487c565b6001600160401b031681526020810191909152604001600020541415949350505050565b80613bd8576040516304df7fdb60e11b815260040160405180910390fd5b6001600160a01b03909416600090815260026020908152604080832063ffffffff90961683529481528482209382529283528381206001600160401b03909216815291522055565b600085856001600160a01b03861660405160c09390931b6001600160c01b031916602084015260e091821b6001600160e01b03199081166028850152602c8401919091529085901b16604c8201526050810183905260700160405160208183030381529060405280519060200120905095945050505050565b613ca161398c565b600e80546001600160a01b0319166001600160a01b0383169081179091556040519081527fd476ec5ec1ac11cec3714d41e7ea49419471aceb9bd0dff1becfc3e363a6239690602001612b98565b6001600160a01b038216613d16576040516306b7a93160e41b815260040160405180910390fd5b6126096001600160a01b0384168383613dd7565b6001600160a01b038216613d51576040516306b7a93160e41b815260040160405180910390fd5b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114613d9e576040519150601f19603f3d011682016040523d82523d6000602084013e613da3565b606091505b505090508061260957604051631196f20d60e21b81526001600160a01b03841660048201526024810183905260440161134a565b604080516001600160a01b03841660248201526044808201849052825180830390910181526064909101909152602080820180516001600160e01b031663a9059cbb60e01b1781528251612609938793909260009283929183919082885af180613e47576040513d6000823e3d81fd5b50506000513d91508115613e5f578060011415613e6c565b6001600160a01b0384163b155b1561398657604051635274afe760e01b81526001600160a01b038516600482015260240161134a565b60405180606001604052806000801916815260200160006001600160401b03168152602001613ed7604051806040016040528060008152602001600081525090565b905290565b600060608284031215613eee57600080fd5b50919050565b80356001600160a01b03811681146138ba57600080fd5b60008083601f840112613f1d57600080fd5b5081356001600160401b03811115613f3457600080fd5b6020830191508360208285010111156114be57600080fd5b600080600080600080600060e0888a031215613f6757600080fd5b613f718989613edc565b9650613f7f60608901613ef4565b95506080880135945060a08801356001600160401b0380821115613fa257600080fd5b613fae8b838c01613f0b565b909650945060c08a0135915080821115613fc757600080fd5b50613fd48a828b01613f0b565b989b979a50959850939692959293505050565b803563ffffffff811681146138ba57600080fd5b6000806000806080858703121561401157600080fd5b61401a85613ef4565b935061402860208601613fe7565b925061403660408601613ef4565b9396929550929360600135925050565b6000806040838503121561405957600080fd5b82356001600160401b0381111561406f57600080fd5b830160a0818603121561408157600080fd5b915061408f60208401613ef4565b90509250929050565b6000608082019050825182526001600160401b03602084015116602083015260408301516140d3604084018280518252602090810151910152565b5092915050565b600080600080600060c086880312156140f257600080fd5b6140fb86613ef4565b945061410a8760208801613edc565b93506080860135925060a08601356001600160401b0381111561412c57600080fd5b61413888828901613f0b565b969995985093965092949392505050565b6000806000806080858703121561415f57600080fd5b61416885613ef4565b935061417660208601613ef4565b925061418460408601613fe7565b915061419260608601613fe7565b905092959194509250565b60005b838110156141b85781810151838201526020016141a0565b50506000910152565b600081518084526141d981602086016020860161419d565b601f01601f19169290920160200192915050565b602081526000611d3f60208301846141c1565b80356001600160401b03811681146138ba57600080fd5b600080600080600060a0868803121561422f57600080fd5b61423886613ef4565b945061424660208701613fe7565b93506040860135925061425b60608701614200565b949793965091946080013592915050565b803561ffff811681146138ba57600080fd5b6000806000806080858703121561429457600080fd5b61429d85613ef4565b93506142ab60208601613ef4565b9250604085013591506141926060860161426c565b600080604083850312156142d357600080fd5b6142dc83613ef4565b915061408f60208401613fe7565b6000602082840312156142fc57600080fd5b611d3f82613ef4565b60008060006060848603121561431a57600080fd5b61432384613ef4565b925061433160208501613fe7565b9150604084013590509250925092565b60006020828403121561435357600080fd5b611d3f82613fe7565b6000806000806000806000806000806000806101208d8f03121561437f57600080fd5b6143888d613ef4565b9b5061439660208e01613ef4565b9a5060408d013599506143ab60608e0161426c565b985060808d0135975060a08d013596506001600160401b0360c08e013511156143d357600080fd5b6143e38e60c08f01358f01613f0b565b90965094506001600160401b0360e08e0135111561440057600080fd5b6144108e60e08f01358f01613f0b565b90945092506001600160401b036101008e0135111561442e57600080fd5b61443f8e6101008f01358f01613f0b565b81935080925050509295989b509295989b509295989b565b60008060008060008060008060008060006101408c8e03121561447957600080fd5b6144838d8d613edc565b9a5061449160608d01613ef4565b995060808c0135985060a08c0135975060c08c013596506001600160401b038060e08e013511156144c157600080fd5b6144d18e60e08f01358f01613f0b565b90975095506101008d01358110156144e857600080fd5b6144f98e6101008f01358f01613f0b565b90955093506101208d013581101561451057600080fd5b506145228d6101208e01358e01613f0b565b81935080925050509295989b509295989b9093969950565b6000806000806060858703121561455057600080fd5b61455985613ef4565b935061456760208601613ef4565b925060408501356001600160401b038082111561458357600080fd5b818701915087601f83011261459757600080fd5b8135818111156145a657600080fd5b8860208260051b85010111156145bb57600080fd5b95989497505060200194505050565b6000806000806000608086880312156145e257600080fd5b6145eb86613ef4565b9450602086013593506146006040870161426c565b925060608601356001600160401b0381111561412c57600080fd5b6000806080838503121561462e57600080fd5b6146388484613edc565b915061408f60608401613ef4565b6020808252825182820181905260009190848201906040850190845b818110156146875783516001600160a01b031683529284019291840191600101614662565b50909695505050505050565b60008060008060008060008060c0898b0312156146af57600080fd5b6146b889613ef4565b97506146c660208a01613ef4565b9650604089013595506146db60608a0161426c565b945060808901356001600160401b03808211156146f757600080fd5b6147038c838d01613f0b565b909650945060a08b013591508082111561471c57600080fd5b506147298b828c01613f0b565b999c989b5096995094979396929594505050565b60008060006060848603121561475257600080fd5b61475b84613ef4565b925061476960208501613fe7565b915061477760408501613ef4565b90509250925092565b60008060006060848603121561479557600080fd5b61479e84613fe7565b925061433160208501613ef4565b6000806000606084860312156147c157600080fd5b61479e84613ef4565b600080600060a084860312156147df57600080fd5b6147e98585613edc565b92506147f760608501613ef4565b9150608084013590509250925092565b6000806040838503121561481a57600080fd5b61408183613fe7565b6000806000806080858703121561483957600080fd5b61484285613ef4565b935061485060208601613fe7565b92506040850135915061419260608601614200565b815181526020808301519082015260408101611675565b60006020828403121561488e57600080fd5b611d3f82614200565b838152818360208301376000910160200190815292915050565b63ffffffff6148bf82613fe7565b168252602081013560208301526001600160401b036148e060408301614200565b1660408301525050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b61491d81896148b1565b86606082015260e06080820152600061493a60e0830187896148ea565b6001600160a01b03861660a084015282810360c084015261495c8185876148ea565b9a9950505050505050505050565b6080810161497882856148b1565b6001600160a01b039290921660609190910152919050565b634e487b7160e01b600052602160045260246000fd5b6000602082840312156149b857600080fd5b815160038110611d3f57600080fd5b8015158114612ad457600080fd5b6000602082840312156149e757600080fd5b8151611d3f816149c7565b6001600160a01b03948516815263ffffffff93909316602084015292166040820152606081019190915260800190565b600060208284031215614a3457600080fd5b8135611d3f816149c7565b634e487b7160e01b600052604160045260246000fd5b600082601f830112614a6657600080fd5b81516001600160401b0380821115614a8057614a80614a3f565b604051601f8301601f19908116603f01168101908282118183101715614aa857614aa8614a3f565b81604052838152866020858801011115614ac157600080fd5b6112ce84602083016020890161419d565b600060208284031215614ae457600080fd5b81516001600160401b03811115614afa57600080fd5b6122ce84828501614a55565b63ffffffff95909516855260208501939093526001600160a01b039190911660408401526001600160401b03166060830152608082015260a00190565b8a815261ffff8a16602082015288604082015287606082015260e060808201526000614b7360e08301888a6148ea565b82810360a0840152614b868187896148ea565b905082810360c0840152614b9b8185876148ea565b9d9c50505050505050505050505050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561167557611675614bac565b6000610120614be4838e6148b1565b8b60608401528a60808401528960a08401528060c0840152614c09818401898b6148ea565b905082810360e0840152614c1e8187896148ea565b9050828103610100840152614b9b8185876148ea565b6001600160a01b03841681526040602080830182905282820184905260009190606090818501600587901b8601830188865b89811015614d1757888303605f190184528135368c9003605e19018112614c8c57600080fd5b8b0163ffffffff80614c9d83613fe7565b16855280614cac888401613fe7565b16878601525087810135601e19823603018112614cc857600080fd5b0185810190356001600160401b03811115614ce257600080fd5b803603821315614cf157600080fd5b8789860152614d0388860182846148ea565b958701959450505090840190600101614c66565b50909a9950505050505050505050565b8183823760009101908152919050565b6001600160a01b038781168252861660208201526040810185905261ffff8416606082015260a060808201819052600090614d7590830184866148ea565b98975050505050505050565b600060018060a01b03808a16835288602084015260a06040840152614daa60a08401888a6148ea565b81871660608501528381036080850152614dc58186886148ea565b9b9a5050505050505050505050565b63ffffffff9390931683526001600160a01b03919091166020830152604082015260600190565b60a08101614e0982866148b1565b6001600160a01b0393909316606082015260800152919050565b6001600160401b038181168382160190808211156140d3576140d3614bac565b6000808335601e19843603018112614e5a57600080fd5b8301803591506001600160401b03821115614e7457600080fd5b6020019150368190038213156114be57600080fd5b606080825285516001600160401b031682820152602086015163ffffffff16608083015260408601516001600160a01b031660a0830152850151600090614ed860c084018263ffffffff169052565b50608086015160e083015260a086015161010083015260c086015160e0610120840152614f096101408401826141c1565b90508281036020840152614f1e8186886148ea565b9150506127d0604083018415159052565b600060408284031215614f4157600080fd5b604051604081018181106001600160401b0382111715614f6357614f63614a3f565b604052825181526020928301519281019290925250919050565b600060408284031215614f8f57600080fd5b611d3f8383614f2f565b60008060608385031215614fac57600080fd5b614fb68484614f2f565b915060408301516001600160401b03811115614fd157600080fd5b614fdd85828601614a55565b9150509250929050565b606081526000614ffa60608301876141c1565b828103602084015261500d8186886148ea565b91505060018060a01b038316604083015295945050505050565b60006020828403121561503957600080fd5b5051919050565b6060810161167582846148b156fea264697066735822122090f702bc055b3c8606fe084619d87bdcfb9298de28d91daac921e84b5c1160f264736f6c63430008160033608060405234801561001057600080fd5b506101c3806100206000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806301ffc9a7146100655780631881d94d1461008d57806354fd4d501461009c5780636750cd4c146100c3575b604051632657b6c360e01b815260040160405180910390fd5b61007861007336600461010e565b6100d7565b60405190151581526020015b60405180910390f35b6002604051610084919061013f565b6040805167ffffffffffffffff815260ff6020820152600291810191909152606001610084565b6100786100d1366004610167565b50600190565b60006001600160e01b031982166325fc096160e21b148061010857506301ffc9a760e01b6001600160e01b03198316145b92915050565b60006020828403121561012057600080fd5b81356001600160e01b03198116811461013857600080fd5b9392505050565b602081016003831061016157634e487b7160e01b600052602160045260246000fd5b91905290565b60006020828403121561017957600080fd5b813563ffffffff8116811461013857600080fdfea2646970667358221220b5a5c043a377444c26f6a8e7dd680ec55e20f7abeec109769ef20ff322bd379164736f6c63430008160033608060405234801561001057600080fd5b506040516114d63803806114d683398101604081905261002f9161010a565b338061005557604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b61005e816100ba565b506001600160a01b03166000908152600260205260409020805460ff1916600190811790915580546001600160801b03191668056bc75e2d6310000017905560058054602f60801b6001600160801b039190911617905561013a565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561011c57600080fd5b81516001600160a01b038116811461013357600080fd5b9392505050565b61138d806101496000396000f3fe6080604052600436106101405760003560e01c80638ca2fb08116100b6578063d350ad251161006f578063d350ad2514610441578063da26663a14610461578063dbbb415514610522578063e0ad121a14610542578063f2fde38b146105cb578063fd9be522146105eb57600080fd5b80638ca2fb08146103595780638da5cb5b1461039957806392807f58146103b7578063c1723a1d146103e9578063c1840327146103fc578063cd68b79b1461041a57600080fd5b80635d6d7ccb116101085780635d6d7ccb146102405780635e280f1114610260578063715018a6146102985780637bc3c9ab146102ad5780637dc438a4146102ea57806388a4124c1461030a57600080fd5b806311f2c343146101455780632f7cb0b41461017c5780633161b7f61461019e57806336a5beba146101be57806352a7251014610220575b600080fd5b34801561015157600080fd5b5061016961016036600461100d565b60009392505050565b6040519081526020015b60405180910390f35b34801561018857600080fd5b5061019c610197366004611057565b61060b565b005b3480156101aa57600080fd5b5061019c6101b9366004611079565b610632565b3480156101ca57600080fd5b506040805180820182526000808252602091820152815180830183526004546001600160401b03811680835263ffffffff600160401b909204821692840192835284519081529151169181019190915201610173565b34801561022c57600080fd5b5061019c61023b366004611104565b610773565b34801561024c57600080fd5b5061019c61025b366004611057565b6107a6565b34801561026c57600080fd5b50600654610280906001600160a01b031681565b6040516001600160a01b039091168152602001610173565b3480156102a457600080fd5b5061019c610819565b3480156102b957600080fd5b506102cd6102c8366004611152565b61082d565b604080519283526001600160801b03909116602083015201610173565b3480156102f657600080fd5b5061019c610305366004611170565b6108c8565b34801561031657600080fd5b5061032a61032536600461100d565b610989565b604080519485526001600160801b03938416602086015291831691840191909152166060820152608001610173565b34801561036557600080fd5b50610389610374366004611188565b60026020526000908152604090205460ff1681565b6040519015158152602001610173565b3480156103a557600080fd5b506000546001600160a01b0316610280565b3480156103c357600080fd5b506005546001600160801b03165b6040516001600160801b039091168152602001610173565b61032a6103f736600461100d565b6109ab565b34801561040857600080fd5b506001546001600160801b03166103d1565b34801561042657600080fd5b506005546103d190600160801b90046001600160801b031681565b34801561044d57600080fd5b5061019c61045c366004611057565b6109dc565b34801561046d57600080fd5b506104e861047c3660046111a3565b60408051606080820183526000808352602080840182905292840181905263ffffffff94851681526003835283902083519182018452546001600160801b0381168252600160801b81046001600160401b031692820192909252600160c01b9091049092169082015290565b6040805182516001600160801b031681526020808401516001600160401b0316908201529181015163ffffffff1690820152606001610173565b34801561052e57600080fd5b5061019c61053d366004611188565b610a06565b34801561054e57600080fd5b506104e861055d3660046111be565b60408051606080820183526000808352602080840182905292840181905261ffff949094168452600382529282902082519384018352546001600160801b03811684526001600160401b03600160801b82041691840191909152600160c01b900463ffffffff169082015290565b3480156105d757600080fd5b5061019c6105e6366004611188565b610a30565b3480156105f757600080fd5b5061019c6106063660046111d9565b610a6e565b610613610a84565b600580546001600160801b03928316600160801b029216919091179055565b336106456000546001600160a01b031690565b6001600160a01b031614610683573360009081526002602052604090205460ff166106835760405163320ae52960e01b815260040160405180910390fd5b60005b8181101561076e57368383838181106106a1576106a1611203565b60800291909101915061076590506106bc60208301836111a3565b6106ce36849003840160208501611230565b805160208083015160409384015184516060810186526001600160801b0394851681526001600160401b0392831681850190815263ffffffff9283168288019081529783166000908152600390955295909320925183549551965194166001600160c01b031990951694909417600160801b95909116949094029390931763ffffffff60c01b1916600160c01b9190921602179055565b50600101610686565b505050565b61077b610a84565b6001600160a01b03919091166000908152600260205260409020805460ff1916911515919091179055565b336107b96000546001600160a01b031690565b6001600160a01b0316146107f7573360009081526002602052604090205460ff166107f75760405163320ae52960e01b815260040160405180910390fd5b600580546001600160801b0319166001600160801b0392909216919091179055565b610821610a84565b61082b6000610ab1565b565b6000808461ffff16606e148061084857508461ffff1661279f145b8061085857508461ffff16614eaf145b156108755761086c8561ffff168585610b01565b915091506108c0565b8461ffff16606f148061088d57508461ffff16612794145b8061089d57508461ffff16614ea4145b156108b15761086c8561ffff168585610c0e565b61086c8561ffff168585610d5e565b935093915050565b336108db6000546001600160a01b031690565b6001600160a01b031614610919573360009081526002602052604090205460ff166109195760405163320ae52960e01b815260040160405180910390fd5b6109296106bc60208301836111a3565b600061093b60a08301608084016112a9565b9050600061094f60c0840160a085016111a3565b6004805463ffffffff909216600160401b026bffffffffffffffffffffffff199092166001600160401b0390941693909317179091555050565b60008060008061099a878787610dfe565b935093509350935093509350935093565b6000808080806109bf565b60405180910390fd5b6109ca888888610dfe565b94509450945094505093509350935093565b6109e4610a84565b600180546001600160801b0319166001600160801b0392909216919091179055565b610a0e610a84565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b610a38610a84565b6001600160a01b038116610a6257604051631e4fbdf760e01b8152600060048201526024016109b6565b610a6b81610ab1565b50565b610a76610a84565b610a808282610ecc565b5050565b6000546001600160a01b0316331461082b5760405163118cdaa760e01b81523360048201526024016109b6565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b63ffffffff8381166000908152600360205260408120600454600554929384938492600160401b900490911690606490610b4b90600160801b90046001600160801b0316896112da565b610b55919061130d565b610b5f91906112da565b8254909150600090610b7e90600160c01b900463ffffffff16886112da565b83546004549192506000916001600160401b03600160801b90920482169184918691610bab91168b611321565b610bb59190611321565b610bbf9190611321565b610bc991906112da565b60015485549192506001600160801b0390811691610be89116836112da565b610bf2919061130d565b935493996001600160801b039094169850929650505050505050565b6000806000610c1c86610f79565b63ffffffff80821660009081526003602052604081208054939450929091610c4c91600160c01b900416886112da565b610c5890610c74611321565b8254909150600090610c7a90600160801b90046001600160401b0316836112da565b63ffffffff808b1660009081526003602052604081208054939450929091610caa91600160c01b9004168b6112da565b8254909150600090600160801b90046001600160401b0316610ccc8b84611321565b610cd691906112da565b60015487549192506000916001600160801b0391821691610cf89116876112da565b610d02919061130d565b60015485549192506000916001600160801b0391821691610d249116856112da565b610d2e919061130d565b90506000610d3c8284611321565b9554959f6001600160801b039096169e50949c50505050505050505050505050565b63ffffffff80841660009081526003602052604081208054919283928391610d8e91600160c01b900416876112da565b8254909150600090600160801b90046001600160401b0316610db08784611321565b610dba91906112da565b60015484549192506001600160801b0390811691610dd99116836112da565b610de3919061130d565b925492986001600160801b0390931697509195505050505050565b600080808080610e1061753089611334565b90508063ffffffff16606e1480610e2e57508063ffffffff1661279f145b80610e4057508063ffffffff16614eaf145b15610e5a57610e50818888610b01565b9095509350610ea9565b8063ffffffff16606f1480610e7657508063ffffffff16612794145b80610e8857508063ffffffff16614ea4145b15610e9857610e50818888610c0e565b610ea3818888610d5e565b90955093505b505060015460055493979296506001600160801b03908116955090921692509050565b6001600160a01b038216610ef3576040516306b7a93160e41b815260040160405180910390fd5b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114610f40576040519150601f19603f3d011682016040523d82523d6000602084013e610f45565b606091505b505090508061076e57604051631196f20d60e21b81526001600160a01b0384166004820152602481018390526044016109b6565b600080610f8861753084611334565b90508063ffffffff16606f03610fa15750606592915050565b8063ffffffff1661279403610fba575061278992915050565b8063ffffffff16614ea403610fd35750614e9992915050565b604051633d0b0cf760e21b815263ffffffff821660048201526024016109b6565b803563ffffffff8116811461100857600080fd5b919050565b60008060006060848603121561102257600080fd5b61102b84610ff4565b95602085013595506040909401359392505050565b80356001600160801b038116811461100857600080fd5b60006020828403121561106957600080fd5b61107282611040565b9392505050565b6000806020838503121561108c57600080fd5b82356001600160401b03808211156110a357600080fd5b818501915085601f8301126110b757600080fd5b8135818111156110c657600080fd5b8660208260071b85010111156110db57600080fd5b60209290920196919550909350505050565b80356001600160a01b038116811461100857600080fd5b6000806040838503121561111757600080fd5b611120836110ed565b91506020830135801515811461113557600080fd5b809150509250929050565b803561ffff8116811461100857600080fd5b60008060006060848603121561116757600080fd5b61102b84611140565b600060c0828403121561118257600080fd5b50919050565b60006020828403121561119a57600080fd5b611072826110ed565b6000602082840312156111b557600080fd5b61107282610ff4565b6000602082840312156111d057600080fd5b61107282611140565b600080604083850312156111ec57600080fd5b6111f5836110ed565b946020939093013593505050565b634e487b7160e01b600052603260045260246000fd5b80356001600160401b038116811461100857600080fd5b60006060828403121561124257600080fd5b604051606081018181106001600160401b038211171561127257634e487b7160e01b600052604160045260246000fd5b60405261127e83611040565b815261128c60208401611219565b602082015261129d60408401610ff4565b60408201529392505050565b6000602082840312156112bb57600080fd5b61107282611219565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176112f1576112f16112c4565b92915050565b634e487b7160e01b600052601260045260246000fd5b60008261131c5761131c6112f7565b500490565b808201808211156112f1576112f16112c4565b600063ffffffff8084168061134b5761134b6112f7565b9216919091069291505056fea2646970667358221220ff064bafdc05a2d85d9d93ddac0510aa9c8f276c4f57eefac742b7fc656acac564736f6c6343000816003360e06040523480156200001157600080fd5b50604051620049703803806200497083398101604081905262000034916200018b565b82828282836001600160a01b031663416ecebf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000077573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200009d9190620001d8565b6001600160a01b03821660805263ffffffff811660a05283833380620000dd57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b620000e88162000122565b5060c0919091526002555050600680546001600160a01b0319166001600160a01b0398909816979097179096555062000207945050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146200018857600080fd5b50565b60008060008060808587031215620001a257600080fd5b8451620001af8162000172565b6020860151909450620001c28162000172565b6040860151606090960151949790965092505050565b600060208284031215620001eb57600080fd5b815163ffffffff811681146200020057600080fd5b9392505050565b60805160a05160c0516147206200025060003960008181611d100152611e730152600050506000818161069a0152818161079f015281816112b101526117d901526147206000f3fe60806040526004361061014f5760003560e01c806361d027b3116100b6578063d15b0d491161006f578063d15b0d4914610450578063d80e9bd914610470578063f0f442601461049d578063f2fde38b146104bd578063faaebd21146104dd578063fd9be5221461051857600080fd5b806361d027b3146103905780636750cd4c146103b0578063715018a6146103d05780638da5cb5b146103e55780639c33abf714610403578063c14c43491461043057600080fd5b806329460b0b1161010857806329460b0b1461025357806339e3f938146102735780634389e58f146102a057806343ea4fa9146102ce5780634d963200146102ee57806354fd4d501461036357600080fd5b806301ffc9a71461015b5780630e97289b14610190578063188183f4146101c85780631881d94d146101f5578063200175f71461021157806320efd7221461023357600080fd5b3661015657005b600080fd5b34801561016757600080fd5b5061017b6101763660046135db565b610538565b60405190151581526020015b60405180910390f35b34801561019c57600080fd5b506006546101b0906001600160a01b031681565b6040516001600160a01b039091168152602001610187565b3480156101d457600080fd5b506101e86101e3366004613647565b61058a565b6040516101879190613680565b34801561020157600080fd5b50600060405161018791906136a6565b34801561021d57600080fd5b5061023161022c3660046136ce565b610663565b005b34801561023f57600080fd5b5061023161024e366004613753565b61079d565b34801561025f57600080fd5b5061023161026e3660046137a7565b610912565b34801561027f57600080fd5b5061029361028e366004613647565b610aaa565b604051610187919061389e565b3480156102ac57600080fd5b506102c06102bb3660046138c1565b610be5565b6040516101879291906139c0565b3480156102da57600080fd5b506102936102e9366004613647565b610c7a565b3480156102fa57600080fd5b5061033f610309366004613647565b600460209081526000928352604080842090915290825290205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b03909116602083015201610187565b34801561036f57600080fd5b50604080516003815260006020820152600291810191909152606001610187565b34801561039c57600080fd5b506003546101b0906001600160a01b031681565b3480156103bc57600080fd5b5061017b6103cb3660046139e4565b610f86565b3480156103dc57600080fd5b50610231610f91565b3480156103f157600080fd5b506000546001600160a01b03166101b0565b34801561040f57600080fd5b5061042361041e366004613a01565b610fa5565b6040516101879190613a4c565b34801561043c57600080fd5b5061023161044b366004613a5f565b611037565b34801561045c57600080fd5b5061023161046b366004613ad3565b611170565b34801561047c57600080fd5b5061049061048b3660046138c1565b6111e5565b6040516101879190613aec565b3480156104a957600080fd5b506102316104b8366004613b03565b611255565b3480156104c957600080fd5b506102316104d8366004613b03565b611269565b3480156104e957600080fd5b5061050a6104f8366004613b03565b60056020526000908152604090205481565b604051908152602001610187565b34801561052457600080fd5b50610231610533366004613b20565b6112a4565b60006001600160e01b031982166325fc096160e21b148061056957506001600160e01b0319821663b6e9ace360e01b145b8061058457506301ffc9a760e01b6001600160e01b03198316145b92915050565b604080518082019091526000808252602082015263ffffffff80831660008181527f17ef568e3e12ab5b9c7254a8d58478811de00f9e6eb34345acd53bf8fd09d3ec602090815260408083206001600160a01b038916845260048352818420948452939091528120805492939092169081900361060e57825463ffffffff16610610565b805b63ffffffff168452815464010000000090046001600160a01b03168061064857835464010000000090046001600160a01b031661064a565b805b6001600160a01b03166020860152509295945050505050565b6003546001600160a01b0316331461068e5760405163885762a760e01b815260040160405180910390fd5b826001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e1758bd86040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061071a9190613b4c565b6001600160a01b031603610741576040516339a5741160e21b815260040160405180910390fd5b61074c838383611384565b604080516001600160a01b038086168252841660208201529081018290527fe081464b7278501267de69fa85b7b9560b0ae05d5fbfaab9b1986c70356e2efe906060015b60405180910390a1505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633146107e65760405163467409c360e01b815260040160405180910390fd5b60005b8181101561090c573683838381811061080457610804613b69565b90506020028101906108169190613b7f565b905061082d61082860208301836139e4565b6113c4565b600161083f60408301602084016139e4565b63ffffffff160361087f5761087a61085a60208301836139e4565b866108686040850185613b9f565b8101906108759190613c75565b6113f2565b610903565b600261089160408301602084016139e4565b63ffffffff16036108cc5761087a6108ac60208301836139e4565b866108ba6040850185613b9f565b8101906108c79190613e35565b61147a565b6108dc60408201602083016139e4565b604051635d4be0fd60e11b815263ffffffff90911660048201526024015b60405180910390fd5b506001016107e9565b50505050565b61091a6114c3565b60005b81811015610a6c573683838381811061093857610938613b69565b905060200281019061094a9190613e69565b905060ff61095b6020830183613e7f565b61096c906040810190602001613e95565b60ff160361098d576040516341d50bed60e11b815260040160405180910390fd5b60ff61099c6020830183613e7f565b6109ad906060810190604001613e95565b60ff16036109ce5760405163211089b360e11b815260040160405180910390fd5b6001600160401b036109e36020830183613e7f565b6109f1906020810190613eb0565b6001600160401b031603610a185760405163281b33d760e11b815260040160405180910390fd5b610a36610a286020830183613e7f565b610a3190613ecb565b6114f0565b610a636000610a4860208401846139e4565b610a556020850185613e7f565b610a5e90613ecb565b611528565b5060010161091d565b507faaf3aaa0c11056e86ac56eb653e25b005ca1a7d4dcd21ba24647f7ab63f3b5608282604051610a9e929190613f5d565b60405180910390a15050565b610ab2613522565b6001600160a01b038316600090815260016020818152604080842063ffffffff87168552825292839020835160c08101855281546001600160401b038116825260ff600160401b8204811683860152600160481b8204811683880152600160501b9091041660608201529281018054855181850281018501909652808652939491936080860193830182828015610b7257602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610b54575b5050505050815260200160028201805480602002602001604051908101604052809291908181526020018280548015610bd457602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610bb6575b505050505081525050905092915050565b60408051808201909152600080825260208201526060610c07868686866117c1565b600654604051631f5dad8b60e31b81529294509092506001600160a01b03169063faed6c5890610c3f908490899089906004016140a2565b600060405180830381600087803b158015610c5957600080fd5b505af1158015610c6d573d6000803e3d6000fd5b5050505094509492505050565b610c82613522565b63ffffffff821660008181527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49602090815260408083206001600160a01b03881684526001835281842094845293909152902080546001600160401b031680610cf75782546001600160401b03168452610d14565b6001600160401b0381811614610d14576001600160401b03811684525b8154600160401b900460ff16610dae578254600160401b900460ff1615610da95782600101805480602002602001604051908101604052809291908181526020018280548015610d8d57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610d6f575b505050505060808501528254600160401b900460ff1660208501525b610e35565b8154600160401b900460ff90811614610e355781600101805480602002602001604051908101604052809291908181526020018280548015610e1957602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610dfb575b505050505060808501528154600160401b900460ff1660208501525b8154600160481b900460ff16610ede578254600160481b900460ff1615610ed95782600201805480602002602001604051908101604052809291908181526020018280548015610eae57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610e90575b505050505060a0850152825460ff600160481b820481166040870152600160501b9091041660608501525b610f74565b8154600160481b900460ff90811614610f745781600201805480602002602001604051908101604052809291908181526020018280548015610f4957602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610f2b575b505050505060a0850152815460ff600160481b820481166040870152600160501b9091041660608501525b610f7d846114f0565b50505092915050565b600061058482611895565b610f996114c3565b610fa360006118f0565b565b606060001963ffffffff831601610fe657610fc0838561058a565b604051602001610fd09190613680565b6040516020818303038152906040529050611030565b60011963ffffffff83160161100f57610fff8385610c7a565b604051602001610fd0919061389e565b604051635d4be0fd60e11b815263ffffffff831660048201526024016108fa565b9392505050565b61103f6114c3565b60005b8181101561113e573683838381811061105d5761105d613b69565b606090810292909201925060009161107b9150830160408401613b03565b6001600160a01b0316036110a257604051631074e82d60e11b815260040160405180910390fd5b6110b260408201602083016139e4565b63ffffffff166000036110d8576040516349cfac4360e01b815260040160405180910390fd5b6000808052600460209081528201907f17ef568e3e12ab5b9c7254a8d58478811de00f9e6eb34345acd53bf8fd09d3ec9061111383856139e4565b63ffffffff168152602081019190915260400160002061113382826140e8565b505050600101611042565b507f2b001e1c6683bf79cc52891bd7215b204c787d18134fc7f3d21b4f32a49e47de8282604051610a9e929190614141565b6111786114c3565b6002548111156111a95760025460405163068109f760e31b81526108fa918391600401918252602082015260400190565b60028190556040518181527f491ff913b5444f4136b0d4075f020cfe3a5f60de926ec0b091612401a22b7842906020015b60405180910390a150565b604080518082019091526000808252602082015260008061123661120f6060890160408a01613b03565b61121f60808a0160608b016139e4565b61122c60c08b018b613b9f565b9050878a8a611940565b604080518082019091529182526020820152925050505b949350505050565b61125d6114c3565b61126681611a39565b50565b6112716114c3565b6001600160a01b03811661129b57604051631e4fbdf760e01b8152600060048201526024016108fa565b611266816118f0565b6112ad81611a87565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e1758bd86040518163ffffffff1660e01b8152600401602060405180830381865afa15801561130d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113319190613b4c565b905061133e818484611ad8565b604080513381526001600160a01b03851660208201529081018390527f820b7fd51bf79c54350bab98400651b3314ff6e79b33528821871d94a666988390606001610790565b6001600160a01b0382166113ab576040516306b7a93160e41b815260040160405180910390fd5b6113bf6001600160a01b0384168383611afb565b505050565b6113cd81611895565b61126657604051633c30434160e21b815263ffffffff821660048201526024016108fa565b6001600160a01b03808316600090815260046020908152604080832063ffffffff8089168552908352928190208551815493870151909516640100000000026001600160c01b03199093169490931693909317179055517f779cb2dd9d2bb1be1737d05435d744facbfb84a2a4912e21379d39beddcdc80590610790908490869085906141c1565b611485828483611528565b61148f8284610c7a565b507f82118522aa536ac0e96cc5c689407ae42b89d592aa133890a01f1509842f508182848360405161079093929190614203565b6000546001600160a01b03163314610fa35760405163118cdaa760e01b81523360048201526024016108fa565b602081015160ff1615801561150a5750606081015160ff16155b156112665760405163ce2c375160e01b815260040160405180910390fd5b602081015160ff90811614806115435750602081015160ff16155b15611571576080810151511561156c576040516341d50bed60e11b815260040160405180910390fd5b6115d7565b806020015160ff168160800151511415806115ac57506002611595600160ff614249565b61159f9190614262565b60ff16816020015160ff16115b156115ca576040516341d50bed60e11b815260040160405180910390fd5b6115d78160800151611b4d565b604081015160ff90811614806115f25750604081015160ff16155b156116465760a0810151511561161b5760405163211089b360e11b815260040160405180910390fd5b606081015160ff1615611641576040516338682fa960e01b815260040160405180910390fd5b6116eb565b806040015160ff168160a00151511415806116815750600261166a600160ff614249565b6116749190614262565b60ff16816040015160ff16115b1561169f5760405163211089b360e11b815260040160405180910390fd5b606081015160ff1615806116c05750806040015160ff16816060015160ff16115b156116de576040516338682fa960e01b815260040160405180910390fd5b6116eb8160a00151611b4d565b6001600160a01b038316600090815260016020818152604080842063ffffffff8716855282529283902084518154868401519587015160608801516001600160401b0390931668ffffffffffffffffff1990921691909117600160401b60ff97881602176affff0000000000000000001916600160481b9187169190910260ff60501b191617600160501b95909116949094029390931783556080840151805185949361179d9390850192019061356a565b5060a082015180516117b991600284019160209091019061356a565b505050505050565b604080518082019091526000808252602082015260607f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633146118205760405163467409c360e01b815260040160405180910390fd5b60008061182e888888611bb4565b909250905060008061186061184960608c0160408d01613b03565b61185960808d0160608e016139e4565b858a611c81565b909250905061186f8284614292565b604080518082019091529081526020810191909152945091925050505b94509492505050565b63ffffffff811660009081527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49602052604081208054600160401b900460ff16151580611030575054600160501b900460ff16151592915050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000806000806119508686611d8f565b9150915060006119618b8b84611da8565b9050600061196f8c8c61058a565b90506119858a826000015163ffffffff16611db5565b80602001516001600160a01b031663709eb6648c8e8d886040518563ffffffff1660e01b81526004016119bb94939291906142a5565b602060405180830381865afa1580156119d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119fc91906142e2565b611a069083614292565b9150600080611a178e8e868e611de4565b9092509050611a268285614292565b9e909d509b505050505050505050505050565b600380546001600160a01b0319166001600160a01b0383169081179091556040519081527f3c864541ef71378c6229510ed90f376565ee42d9c5e0904a984a9e863e6db44f906020016111da565b3360009081526005602052604090205480821115611ac25760405163068109f760e31b815260048101839052602481018290526044016108fa565b3360009081526005602052604090209190039055565b6001600160a01b038316611af0576113bf8282611eb5565b6113bf838383611384565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526113bf908490611f62565b6000805b82518110156113bf576000838281518110611b6e57611b6e613b69565b60200260200101519050826001600160a01b0316816001600160a01b031611611baa5760405163447516e160e01b815260040160405180910390fd5b9150600101611b51565b60606000806000611bc58686611d8f565b90925090506000611bef611bdf60608a0160408b01613b03565b6101e360808b0160608c016139e4565b90506000611c0060c08a018a613b9f565b90509050611c1881836000015163ffffffff16611db5565b6020820151611c4890611c3160808c0160608d016139e4565b611c4160608d0160408e01613b03565b8488611fd3565b611c529086614292565b9450600080611c618b866120cc565b9092509050611c708288614292565b909b909a5098505050505050505050565b60035460009081906001600160a01b03161561188c576040516001600160a01b038716602482015263ffffffff8616604482015260648101859052831515608482015260009060a40160408051601f19818403018152919052602080820180516001600160e01b0316636a8e2a4360e11b1790526003549192506000918291611d38916001600160a01b0316907f0000000000000000000000000000000000000000000000000000000000000000908490876120ef565b91509150611d488787848461219f565b90955093508415611d83576003546001600160a01b031660009081526005602052604081208054879290611d7d908490614292565b90915550505b50505094509492505050565b606080611d9c848461221a565b915091505b9250929050565b600061124d848484612307565b80821115611de057604051636333d79f60e11b815260048101839052602481018290526044016108fa565b5050565b60035460009081906001600160a01b03161561188c576040516001600160a01b038716602482015263ffffffff8616604482015260648101859052831515608482015260009060a40160408051601f19818403018152919052602080820180516001600160e01b031663d424422160e01b1790526003549192506000918291611e99916001600160a01b0316907f00000000000000000000000000000000000000000000000000000000000000009086612381565b91509150611ea98787848461219f565b9450945050505061188c565b6001600160a01b038216611edc576040516306b7a93160e41b815260040160405180910390fd5b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611f29576040519150601f19603f3d011682016040523d82523d6000602084013e611f2e565b606091505b50509050806113bf57604051631196f20d60e21b81526001600160a01b0384166004820152602481018390526044016108fa565b600080602060008451602086016000885af180611f85576040513d6000823e3d81fd5b50506000513d91508115611f9d578060011415611faa565b6001600160a01b0384163b155b1561090c57604051635274afe760e01b81526001600160a01b03851660048201526024016108fa565b6040516338bf452160e11b81526000906001600160a01b0387169063717e8a42906120089088908890889088906004016142a5565b6020604051808303816000875af1158015612027573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061204b91906142e2565b90508015612081576001600160a01b0386166000908152600560205260408120805483929061207b908490614292565b90915550505b604080516001600160a01b0388168152602081018390527f61ed099e74a97a1d7f8bb0952a88ca8b7b8ebd00c126ea04671f92a81213318a910160405180910390a195945050505050565b600060606120e460056120de8661436a565b8561242d565b909590945092505050565b60006060863b80830361211657604080516000808252602082019092529250925050612195565b60008060008761ffff166001600160401b0381111561213757612137613be5565b6040519080825280601f01601f191660200182016040528015612161576020820181803683370190505b509050600080885160208a018c8f8ff191503d925087831115612182578792505b828152826000602083013e909450925050505b9550959350505050565b6000808315806121b0575082516020115b156121c05750600090508061188c565b6000838060200190518101906121d691906142e2565b905085156121e657809150612210565b600060025488116121f9576002546121fb565b875b905080821161220a578161220c565b805b9350505b5094509492505050565b60608060008061222a868661257b565b91509150805160000361228257604080516000808252602082019092528391612276565b60408051808201909152600081526060602082015281526020019060019003908161224e5790505b50935093505050611da1565b604080516001808252818301909252600091816020015b6040805180820190915260008152606060208201528152602001906001900390816122995790505090506040518060400160405280600260ff16815260200183815250816000815181106122ef576122ef613b69565b60209081029190910101529196919550909350505050565b6000806123148585610c7a565b905060008351600014612345578360008151811061233457612334613b69565b602002602001015160200151612356565b604051806020016040528060008152505b90506000806123648361273a565b9150915061237584888a85856129a0565b98975050505050505050565b60006060853b8083036123a85760408051600080825260208201909252925092505061188c565b60008060008761ffff166001600160401b038111156123c9576123c9613be5565b6040519080825280601f01601f1916602001820160405280156123f3576020820181803683370190505b509050600080885160208a018d8dfa91503d925087831115612413578792505b828152826000602083013e90999098509650505050505050565b60006060600061243c85612b38565b9050600061244986612bc5565b80516020820120606088015160408901519293509091600061246b8284610c7a565b90506000895160001461249c578960008151811061248b5761248b613b69565b6020026020010151602001516124ad565b604051806020016040528060008152505b905060606124ff8d846040518060a001604052808963ffffffff1681526020018c81526020018a815260200187600001516001600160401b03168152602001886001600160a01b031681525085612be2565b604051919b5091506125179089908990602001614407565b60405160208183030381529060405298507f07ea52d82345d6e838192107d8fd7123d9c2ec8e916cd0aad13fd2b60db2464483608001518460a001518360405161256393929190614436565b60405180910390a15050505050505050935093915050565b60608060028310156125a35760405163196499c760e21b8152600060048201526024016108fa565b60006125b26002828688614494565b6125bb916144be565b60f01c905060026002198201612723578060005b868310156126c85760006125e860018501858a8c614494565b6125f1916144ee565b60f81c9050600081900361261b57604051636780cfaf60e01b8152600060048201526024016108fa565b8160ff1660000361262e5780915061266b565b8160ff168160ff161461266b5736600061264a86868c8e614494565b9150915061265b8989868585612e80565b9099509750859450919250829150505b600184019360009061268290600301868b8d614494565b61268b916144be565b60f01c905060008190036126b55760405163196499c760e21b8152600481018690526024016108fa565b8060020161ffff168501945050506125cf565b8287146126eb5760405163196499c760e21b8152600481018490526024016108fa565b600287111561271c5736600061270385858b8d614494565b915091506127148888858585612e80565b909850965050505b5050612731565b61272e828787612fa0565b93505b50509250929050565b606080825160000361274b57915091565b60006127568461312b565b90508060ff166001036128085760408051600180825281830190925290816020015b606081526020019060019003908161277857905050925083836000815181106127a3576127a3613b69565b6020908102919091010152604080516001808252818301909252908160200160208202803683370190505091506127db846003613205565b826000815181106127ee576127ee613b69565b602002602001019060ff16908160ff168152505050915091565b8060ff166001600160401b0381111561282357612823613be5565b60405190808252806020026020018201604052801561284c578160200160208202803683370190505b5091508060ff166001600160401b0381111561286a5761286a613be5565b60405190808252806020026020018201604052801561289d57816020015b60608152602001906001900390816128885790505b50925060008060ff5b86518310156129335760019092019160006128c18885613261565b60029490940193905060006128d68986613205565b90508260ff1660ff036128eb57809250612924565b8260ff168160ff16146129245760021984860301600061290c8b87846132be565b905061291a8a8a87846133cb565b5093909301929150815b5061ffff1692909201916128a6565b81830360006129438985846132be565b9050612951888885846133cb565b60005b8660ff168160ff16101561299457878160ff168151811061297757612977613b69565b6020908102919091010180516000190160ff169052600101612954565b50505050505050915091565b600080866040015187602001516129b7919061451c565b905060005b8160ff168160ff161015612b2d576000886020015160ff168260ff1610612a115760a089015160208a01516129f19084614249565b60ff1681518110612a0457612a04613b69565b6020026020010151612a33565b88608001518260ff1681518110612a2a57612a2a613b69565b60200260200101515b60408051602081019091526000808252919250905b8651811015612aa0578360ff16878281518110612a6757612a67613b69565b602002602001015160ff1603612a9857878181518110612a8957612a89613b69565b60200260200101519150612aa0565b600101612a48565b508951604051630c2eceab60e21b81526001600160a01b038416916330bb3aac91612ad3918d918d908790600401614535565b602060405180830381865afa158015612af0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b1491906142e2565b612b1e9086614292565b945050508060010190506129bc565b505095945050505050565b805160208083015160408085015160608087015160808801519351600160f81b9681019690965260c09690961b6001600160c01b031916602186015260e093841b6001600160e01b031990811660298701526001600160a01b03909216602d8601529490921b909116604d83015260518201526071015b6040516020818303038152906040529050919050565b60608160a001518260c00151604051602001612baf929190614574565b60006060600080612bf28561273a565b91509150600087604001518860200151612c0c919061451c565b90508060ff166001600160401b03811115612c2957612c29613be5565b604051908082528060200260200182016040528015612c52578160200160208202803683370190505b50935060005b8160ff168160ff161015610c6d576000896020015160ff168260ff1610612cad5760a08a015160208b0151612c8d9084614249565b60ff1681518110612ca057612ca0613b69565b6020026020010151612ccf565b89608001518260ff1681518110612cc657612cc6613b69565b60200260200101515b60408051602081019091526000808252919250905b8551811015612d3c578360ff16868281518110612d0357612d03613b69565b602002602001015160ff1603612d3457868181518110612d2557612d25613b69565b60200260200101519150612d3c565b600101612ce4565b506040516395d376d760e01b81526001600160a01b038316906395d376d790612d6b908d90859060040161459a565b6020604051808303816000875af1158015612d8a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dae91906142e2565b878460ff1681518110612dc357612dc3613b69565b6020026020010181815250506000878460ff1681518110612de657612de6613b69565b60200260200101511115612e7657868360ff1681518110612e0957612e09613b69565b60200260200101518c6000846001600160a01b03166001600160a01b031681526020019081526020016000206000828254612e449190614292565b92505081905550868360ff1681518110612e6057612e60613b69565b602002602001015188612e739190614292565b97505b5050600101612c58565b60608060001960ff861601612efd57865115612ebf57868484604051602001612eab9392919061460c565b604051602081830303815290604052612ef6565b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050505b9650612f95565b60011960ff861601612f7757855115612f3957858484604051602001612f259392919061460c565b604051602081830303815290604052612f70565b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050505b9550612f95565b604051636780cfaf60e01b815260ff861660048201526024016108fa565b509495939450505050565b606060001961ffff8516016130405760228214612fd0576040516301b8ca5560e31b815260040160405180910390fd5b6000612ff1612fe3602260028688614494565b612fec91614634565b6134e1565b604051600160f81b60208201819052601160f01b602183015260238201526001600160801b0319608083901b166024820152909150603401604051602081830303815290604052915050611030565b60011961ffff85160161310c5760428211158061305d5750606282115b1561307b576040516360493e2b60e11b815260040160405180910390fd5b600061308e612fe3602260028688614494565b905060006130a3612fe3604260228789614494565b9050600060411985016130b9866042818a614494565b6130c291614634565b60405160086020938403029190911c92506130f3916001916011918391889183916031916002918b918b9101614652565b6040516020818303038152906040529350505050611030565b604051630417051360e41b815261ffff851660048201526024016108fa565b600080805b83518210156131da57600190910190600061314b8584613261565b905060028301925060028161ffff16101561317c5760405163013adb8360e21b8152600481018490526024016108fa565b60006131888685613205565b90508060ff1660ff036131ae576040516334f4f66f60e21b815260040160405180910390fd5b600160ff82161b83166131cb5760019485019460ff82161b831792505b5061ffff169190910190613130565b835182146131fe5760405163013adb8360e21b8152600481018390526024016108fa565b5050919050565b6000613212826001614292565b835110156132585760405162461bcd60e51b8152602060048201526013602482015272746f55696e74385f6f75744f66426f756e647360681b60448201526064016108fa565b50016001015190565b600061326e826002614292565b835110156132b55760405162461bcd60e51b8152602060048201526014602482015273746f55696e7431365f6f75744f66426f756e647360601b60448201526064016108fa565b50016002015190565b6060816132cc81601f614292565b101561330b5760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b60448201526064016108fa565b6133158284614292565b845110156133595760405162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b60448201526064016108fa565b60608215801561337857604051915060008252602082016040526133c2565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156133b1578051835260209283019201613399565b5050858452601f01601f1916604052505b50949350505050565b8160ff1660ff036133ef576040516334f4f66f60e21b815260040160405180910390fd5b60006133fc83600161451c565b905060005b84518110156117b957600085828151811061341e5761341e613b69565b602002602001015190508060ff168360ff16036134935786828151811061344757613447613b69565b602002602001015184604051602001613461929190614407565b60405160208183030381529060405287838151811061348257613482613b69565b6020026020010181905250506117b9565b8060ff166000036134d857828683815181106134b1576134b1613b69565b602002602001019060ff16908160ff16815250508387838151811061348257613482613b69565b50600101613401565b60006fffffffffffffffffffffffffffffffff82111561351e576040516306dfcc6560e41b815260806004820152602481018390526044016108fa565b5090565b6040518060c0016040528060006001600160401b03168152602001600060ff168152602001600060ff168152602001600060ff16815260200160608152602001606081525090565b8280548282559060005260206000209081019282156135bf579160200282015b828111156135bf57825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019061358a565b5061351e9291505b8082111561351e57600081556001016135c7565b6000602082840312156135ed57600080fd5b81356001600160e01b03198116811461103057600080fd5b6001600160a01b038116811461126657600080fd5b803561362581613605565b919050565b63ffffffff8116811461126657600080fd5b80356136258161362a565b6000806040838503121561365a57600080fd5b823561366581613605565b915060208301356136758161362a565b809150509250929050565b815163ffffffff1681526020808301516001600160a01b03169082015260408101610584565b60208101600383106136c857634e487b7160e01b600052602160045260246000fd5b91905290565b6000806000606084860312156136e357600080fd5b83356136ee81613605565b925060208401356136fe81613605565b929592945050506040919091013590565b60008083601f84011261372157600080fd5b5081356001600160401b0381111561373857600080fd5b6020830191508360208260051b8501011115611da157600080fd5b60008060006040848603121561376857600080fd5b833561377381613605565b925060208401356001600160401b0381111561378e57600080fd5b61379a8682870161370f565b9497909650939450505050565b600080602083850312156137ba57600080fd5b82356001600160401b038111156137d057600080fd5b6137dc8582860161370f565b90969095509350505050565b60008151808452602080850194506020840160005b838110156138225781516001600160a01b0316875295820195908201906001016137fd565b509495945050505050565b6001600160401b03815116825260ff602082015116602083015260ff604082015116604083015260ff60608201511660608301526000608082015160c0608085015261387c60c08501826137e8565b905060a083015184820360a086015261389582826137e8565b95945050505050565b602081526000611030602083018461382d565b8035801515811461362557600080fd5b600080600080606085870312156138d757600080fd5b84356001600160401b03808211156138ee57600080fd5b9086019060e0828903121561390257600080fd5b9094506020860135908082111561391857600080fd5b818701915087601f83011261392c57600080fd5b81358181111561393b57600080fd5b88602082850101111561394d57600080fd5b602083019550809450505050613965604086016138b1565b905092959194509250565b60005b8381101561398b578181015183820152602001613973565b50506000910152565b600081518084526139ac816020860160208601613970565b601f01601f19169290920160200192915050565b825181526020808401519082015260606040820152600061124d6060830184613994565b6000602082840312156139f657600080fd5b81356110308161362a565b600080600060608486031215613a1657600080fd5b8335613a218161362a565b92506020840135613a3181613605565b91506040840135613a418161362a565b809150509250925092565b6020815260006110306020830184613994565b60008060208385031215613a7257600080fd5b82356001600160401b0380821115613a8957600080fd5b818501915085601f830112613a9d57600080fd5b813581811115613aac57600080fd5b866020606083028501011115613ac157600080fd5b60209290920196919550909350505050565b600060208284031215613ae557600080fd5b5035919050565b815181526020808301519082015260408101610584565b600060208284031215613b1557600080fd5b813561103081613605565b60008060408385031215613b3357600080fd5b8235613b3e81613605565b946020939093013593505050565b600060208284031215613b5e57600080fd5b815161103081613605565b634e487b7160e01b600052603260045260246000fd5b60008235605e19833603018112613b9557600080fd5b9190910192915050565b6000808335601e19843603018112613bb657600080fd5b8301803591506001600160401b03821115613bd057600080fd5b602001915036819003821315611da157600080fd5b634e487b7160e01b600052604160045260246000fd5b60405160c081016001600160401b0381118282101715613c1d57613c1d613be5565b60405290565b60405160e081016001600160401b0381118282101715613c1d57613c1d613be5565b604051601f8201601f191681016001600160401b0381118282101715613c6d57613c6d613be5565b604052919050565b600060408284031215613c8757600080fd5b604051604081018181106001600160401b0382111715613ca957613ca9613be5565b6040528235613cb78161362a565b81526020830135613cc781613605565b60208201529392505050565b80356001600160401b038116811461362557600080fd5b803560ff8116811461362557600080fd5b600082601f830112613d0c57600080fd5b813560206001600160401b03821115613d2757613d27613be5565b8160051b613d36828201613c45565b9283528481018201928281019087851115613d5057600080fd5b83870192505b84831015613d78578235613d6981613605565b82529183019190830190613d56565b979650505050505050565b600060c08284031215613d9557600080fd5b613d9d613bfb565b9050613da882613cd3565b8152613db660208301613cea565b6020820152613dc760408301613cea565b6040820152613dd860608301613cea565b606082015260808201356001600160401b0380821115613df757600080fd5b613e0385838601613cfb565b608084015260a0840135915080821115613e1c57600080fd5b50613e2984828501613cfb565b60a08301525092915050565b600060208284031215613e4757600080fd5b81356001600160401b03811115613e5d57600080fd5b61124d84828501613d83565b60008235603e19833603018112613b9557600080fd5b6000823560be19833603018112613b9557600080fd5b600060208284031215613ea757600080fd5b61103082613cea565b600060208284031215613ec257600080fd5b61103082613cd3565b60006105843683613d83565b6000808335601e19843603018112613eee57600080fd5b83016020810192503590506001600160401b03811115613f0d57600080fd5b8060051b3603821315611da157600080fd5b8183526000602080850194508260005b85811015613822578135613f4281613605565b6001600160a01b031687529582019590820190600101613f2f565b60208082528181018390526000906040808401600586901b8501820187855b8881101561409457603f19808985030185528235603e198c3603018112613fa257600080fd5b8b018035613faf8161362a565b63ffffffff168552808801353682900360be19018112613fce57600080fd5b858901889052016001600160401b03613fe682613cd3565b1687860152613ff6888201613cea565b606060ff8083168289015261400c8a8501613cea565b92506080818416818a0152614022838601613cea565b935060a09250818416838a015261403b81860186613ed7565b60c08b81015294509150614056905061010089018483613f1f565b92505061406581840184613ed7565b93509050838783030160e088015261407e828483613f1f565b978a019796505050928701925050600101613f7c565b509098975050505050505050565b6040815260006140b56040830186613994565b8281036020840152838152838560208301376000602085830101526020601f19601f860116820101915050949350505050565b81356140f38161362a565b63ffffffff8116905081548163ffffffff198216178355602084013561411881613605565b6001600160c01b03199190911690911760209190911b640100000000600160c01b031617905550565b6020808252818101839052600090604080840186845b878110156141b457813561416a8161362a565b63ffffffff908116845282860135906141828261362a565b16838601528184013561419481613605565b6001600160a01b0316838501526060928301929190910190600101614157565b5090979650505050505050565b6001600160a01b038416815263ffffffff831660208201526080810161124d6040830184805163ffffffff1682526020908101516001600160a01b0316910152565b6001600160a01b038416815263ffffffff831660208201526060604082018190526000906138959083018461382d565b634e487b7160e01b600052601160045260246000fd5b60ff828116828216039081111561058457610584614233565b600060ff83168061428357634e487b7160e01b600052601260045260246000fd5b8060ff84160491505092915050565b8082018082111561058457610584614233565b63ffffffff8516815260018060a01b03841660208201528260408201526080606082015260006142d86080830184613994565b9695505050505050565b6000602082840312156142f457600080fd5b5051919050565b600082601f83011261430c57600080fd5b81356001600160401b0381111561432557614325613be5565b614338601f8201601f1916602001613c45565b81815284602083860101111561434d57600080fd5b816020850160208301376000918101602001919091529392505050565b600060e0823603121561437c57600080fd5b614384613c23565b61438d83613cd3565b815261439b6020840161363c565b60208201526143ac6040840161361a565b60408201526143bd6060840161363c565b60608201526080830135608082015260a083013560a082015260c08301356001600160401b038111156143ef57600080fd5b6143fb368286016142fb565b60c08301525092915050565b60008351614419818460208801613970565b83519083019061442d818360208801613970565b01949350505050565b60608152600061444960608301866137e8565b6020838203602085015261445d82876137e8565b84810360408601528551808252602080880194509091019060005b8181101561409457845183529383019391830191600101614478565b600080858511156144a457600080fd5b838611156144b157600080fd5b5050820193919092039150565b6001600160f01b031981358181169160028510156144e65780818660020360031b1b83161692505b505092915050565b6001600160f81b031981358181169160018510156144e65760019490940360031b84901b1690921692915050565b60ff818116838216019081111561058457610584614233565b63ffffffff851681526001600160401b03841660208201526001600160a01b03831660408201526080606082018190526000906142d890830184613994565b8281526000825161458c816020850160208701613970565b919091016020019392505050565b6040815263ffffffff83511660408201526000602084015160a060608401526145c660e0840182613994565b604086015160808581019190915260608701516001600160401b031660a08601528601516001600160a01b031660c0850152838103602085015290506138958185613994565b6000845161461e818460208901613970565b8201838582376000930192835250909392505050565b8035602083101561058457600019602084900360031b1b1692915050565b60f88a811b6001600160f81b0319908116835260f08b811b6001600160f01b031990811660018601528b841b8316600386015260808b901b6001600160801b031916600486015289841b831660148601529088901b1660158401529085901b16601782015260006146d2601883018560801b6001600160801b0319169052565b5060288101919091526048019897505050505050505056fea2646970667358221220d9784bfc6a1a26f66ca9108192fade74e4e3799cd23fe6424871d62320841a2464736f6c6343000816003360c06040523480156200001157600080fd5b50604051620024413803806200244183398101604081905262000034916200013e565b8080816001600160a01b031663416ecebf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000075573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200009b919062000170565b3380620000c257604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b620000cd81620000ee565b506001600160a01b0390911660805263ffffffff1660a05250620001989050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156200015157600080fd5b81516001600160a01b03811681146200016957600080fd5b9392505050565b6000602082840312156200018357600080fd5b815163ffffffff811681146200016957600080fd5b60805160a05161227c620001c5600039600061031e01526000818161041b0152610484015261227c6000f3fe608060405234801561001057600080fd5b506004361061010b5760003560e01c806343ea4fa9116100a25780638da5cb5b116100715780638da5cb5b146102665780639c33abf714610281578063c40ff835146102a1578063e084d952146102b4578063f2fde38b146102c757600080fd5b806343ea4fa91461021857806354fd4d501461022b5780636750cd4c1461024b578063715018a61461025e57600080fd5b806320efd722116100de57806320efd7221461016f57806329460b0b1461018257806339e3f938146101955780633c782a52146101b557600080fd5b806301ffc9a7146101105780630223536e146101385780630894edf11461014d5780631881d94d14610160575b600080fd5b61012361011e3660046116ed565b6102da565b60405190151581526020015b60405180910390f35b61014b61014636600461177b565b610305565b005b61014b61015b3660046117d7565b610317565b600160405161012f9190611822565b61014b61017d3660046118a5565b610482565b61014b6101903660046118f7565b6105a4565b6101a86101a336600461194c565b61073c565b60405161012f9190611a35565b6101f96101c3366004611a48565b600260209081526000938452604080852082529284528284209052825290205460ff81169061010090046001600160401b031682565b6040805192151583526001600160401b0390911660208301520161012f565b6101a861022636600461194c565b610877565b60408051600381526000602082015260029181019190915260600161012f565b610123610259366004611a7d565b610b83565b61014b610b8e565b6000546040516001600160a01b03909116815260200161012f565b61029461028f366004611a98565b610ba2565b60405161012f9190611ad2565b61014b6102af366004611b21565b610c0b565b6101236102c2366004611d10565b610c1b565b61014b6102d5366004611d5d565b610c30565b60006001600160e01b03198216630ab7be9f60e01b14806102ff57506102ff82610c6e565b92915050565b61031184848484610ca3565b50505050565b61034283837f0000000000000000000000000000000000000000000000000000000000000000610d89565b600061034e8484610e0c565b9050600061035c8585610e1e565b9050600061036a8383610877565b905061038e818787604051610380929190611d78565b604051809103902086610e41565b600060405180606001604052808463ffffffff1681526020016103b18989610f91565b81526020016103c08989610faa565b6001600160401b039081169091526040805163a825d74760e01b8152835163ffffffff166004820152602084015160248201529083015190911660448201526001600160a01b038681166064830152608482018890529192507f00000000000000000000000000000000000000000000000000000000000000009091169063a825d7479060a401600060405180830381600087803b15801561046157600080fd5b505af1158015610475573d6000803e3d6000fd5b5050505050505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633146104cb5760405163467409c360e01b815260040160405180910390fd5b60005b8181101561031157368383838181106104e9576104e9611d88565b90506020028101906104fb9190611d9e565b905061051261050d6020830183611a7d565b610fcd565b60026105246040830160208401611a7d565b63ffffffff16036105645761055f61053f6020830183611a7d565b8661054d6040850185611dbe565b81019061055a9190611e04565b610ffb565b61059b565b6105746040820160208301611a7d565b604051635d4be0fd60e11b815263ffffffff90911660048201526024015b60405180910390fd5b506001016104ce565b6105ac611051565b60005b818110156106fe57368383838181106105ca576105ca611d88565b90506020028101906105dc9190611e38565b905060ff6105ed6020830183611e4e565b6105fe906040810190602001611e64565b60ff160361061f576040516341d50bed60e11b815260040160405180910390fd5b60ff61062e6020830183611e4e565b61063f906060810190604001611e64565b60ff16036106605760405163211089b360e11b815260040160405180910390fd5b6001600160401b036106756020830183611e4e565b610683906020810190611e7f565b6001600160401b0316036106aa5760405163281b33d760e11b815260040160405180910390fd5b6106c86106ba6020830183611e4e565b6106c390611e9a565b61107e565b6106f560006106da6020840184611a7d565b6106e76020850185611e4e565b6106f090611e9a565b6110b6565b506001016105af565b507faaf3aaa0c11056e86ac56eb653e25b005ca1a7d4dcd21ba24647f7ab63f3b5608282604051610730929190611f2a565b60405180910390a15050565b61074461162b565b6001600160a01b038316600090815260016020818152604080842063ffffffff87168552825292839020835160c08101855281546001600160401b038116825260ff600160401b8204811683860152600160481b8204811683880152600160501b909104166060820152928101805485518185028101850190965280865293949193608086019383018282801561080457602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116107e6575b505050505081526020016002820180548060200260200160405190810160405280929190818152602001828054801561086657602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610848575b505050505081525050905092915050565b61087f61162b565b63ffffffff821660008181527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49602090815260408083206001600160a01b03881684526001835281842094845293909152902080546001600160401b0316806108f45782546001600160401b03168452610911565b6001600160401b0381811614610911576001600160401b03811684525b8154600160401b900460ff166109ab578254600160401b900460ff16156109a6578260010180548060200260200160405190810160405280929190818152602001828054801561098a57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161096c575b505050505060808501528254600160401b900460ff1660208501525b610a32565b8154600160401b900460ff90811614610a325781600101805480602002602001604051908101604052809291908181526020018280548015610a1657602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116109f8575b505050505060808501528154600160401b900460ff1660208501525b8154600160481b900460ff16610adb578254600160481b900460ff1615610ad65782600201805480602002602001604051908101604052809291908181526020018280548015610aab57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610a8d575b505050505060a0850152825460ff600160481b820481166040870152600160501b9091041660608501525b610b71565b8154600160481b900460ff90811614610b715781600201805480602002602001604051908101604052809291908181526020018280548015610b4657602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610b28575b505050505060a0850152815460ff600160481b820481166040870152600160501b9091041660608501525b610b7a8461107e565b50505092915050565b60006102ff8261134f565b610b96611051565b610ba060006113aa565b565b606060011963ffffffff831601610be357610bbd8385610877565b604051602001610bcd9190611a35565b6040516020818303038152906040529050610c04565b604051635d4be0fd60e11b815263ffffffff83166004820152602401610592565b9392505050565b610c16838383610d89565b505050565b6000610c288484846113fa565b949350505050565b610c38611051565b6001600160a01b038116610c6257604051631e4fbdf760e01b815260006004820152602401610592565b610c6b816113aa565b50565b60006001600160e01b031982166325fc096160e21b14806102ff57506301ffc9a760e01b6001600160e01b03198316146102ff565b604080518082018252600181526001600160401b03831660208201529051600290600090610cd49088908890611d78565b604080519182900390912082526020808301939093529081016000908120868252835281812033808352908452908290208451815495909401516001600160401b03166101000268ffffffffffffffff00199415159490941668ffffffffffffffffff19909516949094179290921790925590517f2cb0eed7538baeae4c6fde038c0fd0384d27de0dd55a228c65847bda6aa1ab5691610d7b91879087908690889061206c565b60405180910390a150505050565b60518214610daa5760405163c9bf37b760e01b815260040160405180910390fd5b6001610db68484611503565b60ff1614610dd757604051633a9ae7b960e01b815260040160405180910390fd5b8063ffffffff16610de88484611525565b63ffffffff1614610c165760405163216964bf60e11b815260040160405180910390fd5b6000610c04610e1b8484611535565b90565b6000610e2e600d600984866120c6565b610e37916120f0565b60e01c9392505050565b610e4c8383836113fa565b610e695760405163130c463560e21b815260040160405180910390fd5b602083015160ff1615610efe5760005b836020015160ff168160ff161015610efc57600083815260026020908152604080832085845290915281206080860151805191929160ff8516908110610ec157610ec1611d88565b6020908102919091018101516001600160a01b03168252810191909152604001600020805468ffffffffffffffffff19169055600101610e79565b505b604083015160ff1615610c165760005b836040015160ff168160ff161015610311576000838152600260209081526040808320858452909152812060a0860151805191929160ff8516908110610f5657610f56611d88565b6020908102919091018101516001600160a01b03168252810191909152604001600020805468ffffffffffffffffff19169055600101610f0e565b6000610fa1602d600d84866120c6565b610c0491612120565b6000610fba6009600184866120c6565b610fc39161213e565b60c01c9392505050565b610fd68161134f565b610c6b57604051633c30434160e21b815263ffffffff82166004820152602401610592565b6110068284836110b6565b6110108284610877565b507f82118522aa536ac0e96cc5c689407ae42b89d592aa133890a01f1509842f50818284836040516110449392919061216c565b60405180910390a1505050565b6000546001600160a01b03163314610ba05760405163118cdaa760e01b8152336004820152602401610592565b602081015160ff161580156110985750606081015160ff16155b15610c6b5760405163ce2c375160e01b815260040160405180910390fd5b602081015160ff90811614806110d15750602081015160ff16155b156110ff57608081015151156110fa576040516341d50bed60e11b815260040160405180910390fd5b611165565b806020015160ff1681608001515114158061113a57506002611123600160ff6121b2565b61112d91906121cb565b60ff16816020015160ff16115b15611158576040516341d50bed60e11b815260040160405180910390fd5b6111658160800151611545565b604081015160ff90811614806111805750604081015160ff16155b156111d45760a081015151156111a95760405163211089b360e11b815260040160405180910390fd5b606081015160ff16156111cf576040516338682fa960e01b815260040160405180910390fd5b611279565b806040015160ff168160a001515114158061120f575060026111f8600160ff6121b2565b61120291906121cb565b60ff16816040015160ff16115b1561122d5760405163211089b360e11b815260040160405180910390fd5b606081015160ff16158061124e5750806040015160ff16816060015160ff16115b1561126c576040516338682fa960e01b815260040160405180910390fd5b6112798160a00151611545565b6001600160a01b038316600090815260016020818152604080842063ffffffff8716855282529283902084518154868401519587015160608801516001600160401b0390931668ffffffffffffffffff1990921691909117600160401b60ff97881602176affff0000000000000000001916600160481b9187169190910260ff60501b191617600160501b95909116949094029390931783556080840151805185949361132b93908501920190611673565b5060a08201518051611347916002840191602090910190611673565b505050505050565b63ffffffff811660009081527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49602052604081208054600160401b900460ff16151580610c04575054600160501b900460ff16151592915050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b602083015160009060ff161561147d5760005b846020015160ff168160ff1610156114655761144f85608001518260ff168151811061143b5761143b611d88565b6020026020010151858588600001516115ac565b61145d576000915050610c04565b60010161140d565b50836040015160ff1660000361147d57506001610c04565b606084015160005b856040015160ff168160ff1610156114f7576114c78660a001518260ff16815181106114b3576114b3611d88565b6020026020010151868689600001516115ac565b156114ef57816114d6816121fb565b9250508160ff166000036114ef57600192505050610c04565b600101611485565b50600095945050505050565b600061151260018284866120c6565b61151b91612218565b60f81c9392505050565b6000610e2e6031602d84866120c6565b6000610fa16051603184866120c6565b6000805b8251811015610c1657600083828151811061156657611566611d88565b60200260200101519050826001600160a01b0316816001600160a01b0316116115a25760405163447516e160e01b815260040160405180910390fd5b9150600101611549565b600083815260026020908152604080832085845282528083206001600160a01b0388168452825280832081518083019092525460ff81161580158084526101009092046001600160401b03169383019390935290916116215750826001600160401b031681602001516001600160401b031610155b9695505050505050565b6040518060c0016040528060006001600160401b03168152602001600060ff168152602001600060ff168152602001600060ff16815260200160608152602001606081525090565b8280548282559060005260206000209081019282156116c8579160200282015b828111156116c857825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190611693565b506116d49291506116d8565b5090565b5b808211156116d457600081556001016116d9565b6000602082840312156116ff57600080fd5b81356001600160e01b031981168114610c0457600080fd5b60008083601f84011261172957600080fd5b5081356001600160401b0381111561174057600080fd5b60208301915083602082850101111561175857600080fd5b9250929050565b80356001600160401b038116811461177657600080fd5b919050565b6000806000806060858703121561179157600080fd5b84356001600160401b038111156117a757600080fd5b6117b387828801611717565b909550935050602085013591506117cc6040860161175f565b905092959194509250565b6000806000604084860312156117ec57600080fd5b83356001600160401b0381111561180257600080fd5b61180e86828701611717565b909790965060209590950135949350505050565b602081016003831061184457634e487b7160e01b600052602160045260246000fd5b91905290565b80356001600160a01b038116811461177657600080fd5b60008083601f84011261187357600080fd5b5081356001600160401b0381111561188a57600080fd5b6020830191508360208260051b850101111561175857600080fd5b6000806000604084860312156118ba57600080fd5b6118c38461184a565b925060208401356001600160401b038111156118de57600080fd5b6118ea86828701611861565b9497909650939450505050565b6000806020838503121561190a57600080fd5b82356001600160401b0381111561192057600080fd5b61192c85828601611861565b90969095509350505050565b803563ffffffff8116811461177657600080fd5b6000806040838503121561195f57600080fd5b6119688361184a565b915061197660208401611938565b90509250929050565b60008151808452602080850194506020840160005b838110156119b95781516001600160a01b031687529582019590820190600101611994565b509495945050505050565b6001600160401b03815116825260ff602082015116602083015260ff604082015116604083015260ff60608201511660608301526000608082015160c06080850152611a1360c085018261197f565b905060a083015184820360a0860152611a2c828261197f565b95945050505050565b602081526000610c0460208301846119c4565b600080600060608486031215611a5d57600080fd5b8335925060208401359150611a746040850161184a565b90509250925092565b600060208284031215611a8f57600080fd5b610c0482611938565b600080600060608486031215611aad57600080fd5b611ab684611938565b9250611ac46020850161184a565b9150611a7460408501611938565b60006020808352835180602085015260005b81811015611b0057858101830151858201604001528201611ae4565b506000604082860101526040601f19601f8301168501019250505092915050565b600080600060408486031215611b3657600080fd5b83356001600160401b03811115611b4c57600080fd5b611b5886828701611717565b9094509250611a74905060208501611938565b634e487b7160e01b600052604160045260246000fd5b60405160c081016001600160401b0381118282101715611ba357611ba3611b6b565b60405290565b803560ff8116811461177657600080fd5b600082601f830112611bcb57600080fd5b813560206001600160401b0380831115611be757611be7611b6b565b8260051b604051601f19603f83011681018181108482111715611c0c57611c0c611b6b565b6040529384526020818701810194908101925087851115611c2c57600080fd5b6020870191505b84821015611c5357611c448261184a565b83529183019190830190611c33565b979650505050505050565b600060c08284031215611c7057600080fd5b611c78611b81565b9050611c838261175f565b8152611c9160208301611ba9565b6020820152611ca260408301611ba9565b6040820152611cb360608301611ba9565b606082015260808201356001600160401b0380821115611cd257600080fd5b611cde85838601611bba565b608084015260a0840135915080821115611cf757600080fd5b50611d0484828501611bba565b60a08301525092915050565b600080600060608486031215611d2557600080fd5b83356001600160401b03811115611d3b57600080fd5b611d4786828701611c5e565b9660208601359650604090950135949350505050565b600060208284031215611d6f57600080fd5b610c048261184a565b8183823760009101908152919050565b634e487b7160e01b600052603260045260246000fd5b60008235605e19833603018112611db457600080fd5b9190910192915050565b6000808335601e19843603018112611dd557600080fd5b8301803591506001600160401b03821115611def57600080fd5b60200191503681900382131561175857600080fd5b600060208284031215611e1657600080fd5b81356001600160401b03811115611e2c57600080fd5b610c2884828501611c5e565b60008235603e19833603018112611db457600080fd5b6000823560be19833603018112611db457600080fd5b600060208284031215611e7657600080fd5b610c0482611ba9565b600060208284031215611e9157600080fd5b610c048261175f565b60006102ff3683611c5e565b6000808335601e19843603018112611ebd57600080fd5b83016020810192503590506001600160401b03811115611edc57600080fd5b8060051b360382131561175857600080fd5b8183526000602080850194508260005b858110156119b9576001600160a01b03611f178361184a565b1687529582019590820190600101611efe565b60208082528181018390526000906040808401600586901b8501820187855b8881101561205e57603f19808985030185528235603e198c3603018112611f6f57600080fd5b8b0163ffffffff611f7f82611938565b1685528781013560be19823603018112611f9857600080fd5b858901889052016001600160401b03611fb08261175f565b1687860152611fc0888201611ba9565b606060ff80831682890152611fd68a8501611ba9565b92506080818416818a0152611fec838601611ba9565b935060a09250818416838a015261200581860186611ea6565b60c08b81015294509150612020905061010089018483611eee565b92505061202f81840184611ea6565b93509050838783030160e0880152612048828483611eee565b978a019796505050928701925050600101611f49565b509098975050505050505050565b6001600160a01b03861681526080602082018190528101849052838560a0830137600060a08583010152600060a0601f19601f87011683010190506001600160401b03841660408301528260608301529695505050505050565b600080858511156120d657600080fd5b838611156120e357600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156121185780818660040360031b1b83161692505b505092915050565b803560208310156102ff57600019602084900360031b1b1692915050565b6001600160c01b031981358181169160088510156121185760089490940360031b84901b1690921692915050565b6001600160a01b038416815263ffffffff83166020820152606060408201819052600090611a2c908301846119c4565b634e487b7160e01b600052601160045260246000fd5b60ff82811682821603908111156102ff576102ff61219c565b600060ff8316806121ec57634e487b7160e01b600052601260045260246000fd5b8060ff84160491505092915050565b600060ff82168061220e5761220e61219c565b6000190192915050565b6001600160f81b031981358181169160018510156121185760019490940360031b84901b169092169291505056fea2646970667358221220f261181fa476bcf41c4bf04e3eda4bd6084e0edf3739fd077cfebd99f1f1561764736f6c6343000816003360e06040523480156200001157600080fd5b5060405162004c0738038062004c07833981016040819052620000349162000176565b82836001600160a01b031663416ecebf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000074573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200009a9190620001c3565b3380620000c157604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b620000cc816200010d565b506001600160a01b0391821660805263ffffffff1660a05260c092909252600655600280546001600160a01b031916939091169290921790915550620001f2565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146200017357600080fd5b50565b600080600080608085870312156200018d57600080fd5b84516200019a816200015d565b6020860151909450620001ad816200015d565b6040860151606090960151949790965092505050565b600060208284031215620001d657600080fd5b815163ffffffff81168114620001eb57600080fd5b9392505050565b60805160a05160c0516149c26200024560003960008181611b52015261262c01526000610be50152600081816106550152818161075a0152818161089801528181610d6d015261176101526149c26000f3fe6080604052600436106101855760003560e01c80637620fd01116100d1578063d15b0d491161008a578063f0f4426011610064578063f0f442601461051e578063f2fde38b1461053e578063faaebd211461055e578063fd9be5221461058b57600080fd5b8063d15b0d49146104b1578063d80e9bd9146104d1578063ea69d69d146104fe57600080fd5b80637620fd01146103b65780638da5cb5b146103f95780638eb0bf30146104175780639c33abf714610444578063ab750e7514610471578063c85f4b4e1461049157600080fd5b806320efd7221161013e57806354fd4d501161011857806354fd4d5014610334578063594924da146103615780636750cd4c14610381578063715018a6146103a157600080fd5b806320efd722146102a85780633c782a52146102c85780634389e58f1461030657600080fd5b806301ffc9a714610191578063052368ca146101c65780630e97289b146101e65780631881d94d1461021e5780631fb512251461023a578063200175f71461028657600080fd5b3661018c57005b600080fd5b34801561019d57600080fd5b506101b16101ac36600461389c565b6105ab565b60405190151581526020015b60405180910390f35b3480156101d257600080fd5b506101b16101e13660046138c6565b6105fd565b3480156101f257600080fd5b50600254610206906001600160a01b031681565b6040516001600160a01b0390911681526020016101bd565b34801561022a57600080fd5b5060026040516101bd919061391e565b34801561024657600080fd5b50610278610255366004613996565b600360209081526000938452604080852082529284528284209052825290205481565b6040519081526020016101bd565b34801561029257600080fd5b506102a66102a13660046139db565b61061e565b005b3480156102b457600080fd5b506102a66102c3366004613a67565b610758565b3480156102d457600080fd5b506102786102e3366004613abb565b600460209081526000938452604080852082529284528284209052825290205481565b34801561031257600080fd5b50610326610321366004613b35565b610880565b6040516101bd929190613c0d565b34801561034057600080fd5b5060408051600a8152600060208201526002918101919091526060016101bd565b34801561036d57600080fd5b506102a661037c366004613c31565b610b95565b34801561038d57600080fd5b506101b161039c366004613c81565b610dd6565b3480156103ad57600080fd5b506102a6610de1565b3480156103c257600080fd5b506103da6007546006546001600160a01b0390911691565b604080516001600160a01b0390931683526020830191909152016101bd565b34801561040557600080fd5b506000546001600160a01b0316610206565b34801561042357600080fd5b50610437610432366004613c9c565b610df5565b6040516101bd9190613d86565b34801561045057600080fd5b5061046461045f366004613d99565b6110ed565b6040516101bd9190613dd5565b34801561047d57600080fd5b506102a661048c366004613c31565b611156565b34801561049d57600080fd5b506102a66104ac366004613de8565b6111e1565b3480156104bd57600080fd5b506102a66104cc366004613e29565b611373565b3480156104dd57600080fd5b506104f16104ec366004613b35565b6113e8565b6040516101bd9190613e42565b34801561050a57600080fd5b50610437610519366004613c9c565b611534565b34801561052a57600080fd5b506102a6610539366004613e59565b61166b565b34801561054a57600080fd5b506102a6610559366004613e59565b6116c1565b34801561056a57600080fd5b50610278610579366004613e59565b60056020526000908152604090205481565b34801561059757600080fd5b506102a66105a6366004613e76565b6116ff565b60006001600160e01b031982166325fc096160e21b14806105dc57506001600160e01b0319821663b6e9ace360e01b145b806105f757506301ffc9a760e01b6001600160e01b03198316145b92915050565b600061061361060b8661407d565b858585611827565b90505b949350505050565b6007546001600160a01b0316331461064957604051634b41868f60e11b815260040160405180910390fd5b826001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e1758bd86040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106d59190614089565b6001600160a01b0316036106fc57604051632ddfd41160e21b815260040160405180910390fd5b610707838383611983565b604080516001600160a01b038086168252841660208201529081018290527fe081464b7278501267de69fa85b7b9560b0ae05d5fbfaab9b1986c70356e2efe906060015b60405180910390a1505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633146107a15760405163467409c360e01b815260040160405180910390fd5b60005b8181101561087a57368383838181106107bf576107bf6140a6565b90506020028101906107d191906140bc565b90506107e86107e36020830183613c81565b6119c3565b60016107fa6040830160208401613c81565b63ffffffff160361083a576108356108156020830183613c81565b8661082360408501856140dc565b8101906108309190614122565b6119f1565b610871565b61084a6040820160208301613c81565b60405163065c274160e11b815263ffffffff90911660048201526024015b60405180910390fd5b506001016107a4565b50505050565b604080518082019091526000808252602082015260607f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633146108df5760405163467409c360e01b815260040160405180910390fd5b60808601356109036108f76060890160408a01613e59565b6001600160a01b031690565b146109215760405163a4884a5960e01b815260040160405180910390fd5b60008061092f888888611a3a565b909250905060008061096161094a60608c0160408d01613e59565b61095a60808d0160608e01613c81565b858a611ac3565b9092509050610970828461416c565b925061097f60c08b018b6140dc565b60405161098d92919061417f565b6040518091039020600360008c60400160208101906109ac9190613e59565b6001600160a01b0316815260208101919091526040016000908120906109d860808e0160608f01613c81565b63ffffffff1681526020808201929092526040016000908120916109fe908e018e61418f565b6001600160401b03166001600160401b03168152602001908152602001600020819055506000610b0c6040518060e001604052808d6000016020810190610a45919061418f565b6001600160401b031681526020018d6060016020810190610a669190613c81565b63ffffffff1681526020018d6040016020810190610a849190613e59565b6001600160a01b031681526020018d6020016020810190610aa59190613c81565b63ffffffff16815260808e0135602082015260a08e01356040820152606001610ad160c08f018f6140dc565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050915250611bd1565b600254604051631f5dad8b60e31b81529192506001600160a01b03169063faed6c5890610b419084908e908e906004016141d3565b600060405180830381600087803b158015610b5b57600080fd5b505af1158015610b6f573d6000803e3d6000fd5b505060408051808201909152958652505050602083015250925090505b94509492505050565b60518314610bb65760405163864d08b360e01b815260040160405180910390fd5b6001610bc28585611c29565b60ff1614610be357604051637952a82f60e01b815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000063ffffffff16610c148585611c4b565b63ffffffff1614610c3857604051631f4b6f8b60e11b815260040160405180910390fd5b6000610c448585611c6e565b90506000610c528686611c80565b90506000610c608787611c90565b6001600160a01b038416600090815260036020908152604080832063ffffffff8716845282528083206001600160401b03851684529091529020549091508514610cbd576040516333074b7760e11b815260040160405180910390fd5b6000610cc98484610df5565b9050610cee818989604051610cdf92919061417f565b60405180910390208888611cb3565b600060405180606001604052808563ffffffff168152602001610d118b8b611e03565b81526001600160401b038581166020928301526040805163a825d74760e01b8152845163ffffffff1660048201529284015160248401528301511660448201526001600160a01b038781166064830152608482018990529192507f00000000000000000000000000000000000000000000000000000000000000009091169063a825d7479060a401600060405180830381600087803b158015610db357600080fd5b505af1158015610dc7573d6000803e3d6000fd5b50505050505050505050505050565b60006105f782611e1c565b610de9611e77565b610df36000611ea4565b565b610dfd6137e3565b63ffffffff821660008181527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49602090815260408083206001600160a01b03888116855260018452828520958552949092529091208054919290911680610e6e5782546001600160a01b0316610e70565b805b6001600160a01b031684528154600160a01b900460ff16610f15578254600160a01b900460ff1615610f105782600101805480602002602001604051908101604052809291908181526020018280548015610ef457602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610ed6575b505050505060808501528254600160a01b900460ff1660208501525b610f9c565b8154600160a01b900460ff90811614610f9c5781600101805480602002602001604051908101604052809291908181526020018280548015610f8057602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610f62575b505050505060808501528154600160a01b900460ff1660208501525b8154600160a81b900460ff16611045578254600160a81b900460ff1615611040578260020180548060200260200160405190810160405280929190818152602001828054801561101557602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610ff7575b505050505060a0850152825460ff600160a81b820481166040870152600160b01b9091041660608501525b6110db565b8154600160a81b900460ff908116146110db57816002018054806020026020016040519081016040528092919081815260200182805480156110b057602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611092575b505050505060a0850152815460ff600160a81b820481166040870152600160b01b9091041660608501525b6110e484611ef4565b50505092915050565b606060001963ffffffff83160161112e576111088385610df5565b6040516020016111189190613d86565b604051602081830303815290604052905061114f565b60405163065c274160e11b815263ffffffff83166004820152602401610868565b9392505050565b8060046000868660405161116b92919061417f565b60408051918290039091208252602080830193909352908101600090812086825283528181203380835293528190209290925590517f04708e5dfef6005d6d646eb761e3b9e412e1cc5749fc9d884bca441cc7a95258916111d3918790879087908790614203565b60405180910390a150505050565b6111e9611e77565b60005b818110156113355736838383818110611207576112076140a6565b9050602002810190611219919061423c565b905060ff61122a6020830183614252565b61123b906040810190602001614268565b60ff160361125c57604051632ad00e0160e11b815260040160405180910390fd5b60ff61126b6020830183614252565b61127c906060810190604001614268565b60ff160361129d576040516371aa1b6360e11b815260040160405180910390fd5b6112bb6112ad6020830183614252565b6112b69061407d565b611ef4565b60006112ca6020830183614252565b6112d8906020810190613e59565b6001600160a01b0316036112ff57604051633b6faad360e11b815260040160405180910390fd5b61132c60006113116020840184613c81565b61131e6020850185614252565b6113279061407d565b611f2c565b506001016111ec565b507f65edb7dc0f21ba15c998f8bd220ea9fec30757ff9fb07696c634bcce00ce6f348282604051611367929190614309565b60405180910390a15050565b61137b611e77565b6006548111156113ac5760065460405163b79d126360e01b8152610868918391600401918252602082015260400190565b60068190556040518181527f491ff913b5444f4136b0d4075f020cfe3a5f60de926ec0b091612401a22b7842906020015b60405180910390a150565b604080518082019091526000808252602082015260008061140986866121b5565b909250905060006114206060890160408a01613e59565b9050600061143460808a0160608b01613c81565b905060006114428383610df5565b90506000611472828561145c6114578f6144bc565b612374565b8e8060c0019061146c91906140dc565b8a6123ef565b825160405163c8f8dcd160e01b81529192506001600160a01b03169063c8f8dcd1906114a49087908a90600401614559565b602060405180830381865afa1580156114c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114e5919061457d565b6114ef908261416c565b90506000806115008686858d61259d565b909250905061150f828461416c565b6040805180820190915290815260208101919091529c9b505050505050505050505050565b61153c6137e3565b6001600160a01b03808416600090815260016020818152604080842063ffffffff88168552825292839020835160c0810185528154958616815260ff600160a01b8704811682850152600160a81b8704811682870152600160b01b909604909516606086015291820180548451818402810184019095528085529293608086019390928301828280156115f857602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116115da575b505050505081526020016002820180548060200260200160405190810160405280929190818152602001828054801561165a57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161163c575b505050505081525050905092915050565b611673611e77565b600780546001600160a01b0319166001600160a01b0383169081179091556040519081527f3c864541ef71378c6229510ed90f376565ee42d9c5e0904a984a9e863e6db44f906020016113dd565b6116c9611e77565b6001600160a01b0381166116f357604051631e4fbdf760e01b815260006004820152602401610868565b6116fc81611ea4565b50565b336000908152600560205260409020548082111561173a5760405163b79d126360e01b81526004810183905260248101829052604401610868565b33600090815260056020908152604080832085850390558051631c2eb17b60e31b815290517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169263e1758bd892600480820193918290030181865afa1580156117b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117d49190614089565b90506117e181858561266e565b604080513381526001600160a01b03861660208201529081018490527f820b7fd51bf79c54350bab98400651b3314ff6e79b33528821871d94a6669883906060016111d3565b602084015160009060ff16156118d35760005b856020015160ff168160ff1610156118bb576118a586608001518260ff1681518110611868576118686140a6565b602002602001015186868660009283526004602090815260408085209385529281528284206001600160a01b039095168452939093529020541490565b6118b3576000915050610616565b60010161183a565b50846040015160ff166000036118d357506001610616565b606085015160005b866040015160ff168160ff161015611976576119468760a001518260ff1681518110611909576119096140a6565b602002602001015187878760009283526004602090815260408085209385529281528284206001600160a01b039095168452939093529020541490565b1561196e578161195581614596565b9250508160ff1660000361196e57600192505050610616565b6001016118db565b5060009695505050505050565b6001600160a01b0382166119aa576040516306b7a93160e41b815260040160405180910390fd5b6119be6001600160a01b0384168383612691565b505050565b6119cc81611e1c565b6116fc576040516303fc0f9560e21b815263ffffffff82166004820152602401610868565b6119fc828483611f2c565b611a068284610df5565b507fe8e2a5b92fc69ac50188ea142042492be8e8c34febb10b2cd02983684336e14282848360405161074b939291906145b3565b60606000806000611a4b86866121b5565b90925090506000611a75611a6560608a0160408b01613e59565b61043260808b0160608c01613c81565b8051909150611a9490611a8e60608b0160408c01613e59565b856126e3565b9350600080611aa4838b866127d6565b9092509050611ab3828761416c565b909a909950975050505050505050565b60075460009081906001600160a01b031615610b8c576040516001600160a01b038716602482015263ffffffff8616604482015260648101859052831515608482015260009060a40160408051601f19818403018152919052602080820180516001600160e01b0316636a8e2a4360e11b1790526007549192506000918291611b7a916001600160a01b0316907f00000000000000000000000000000000000000000000000000000000000000009084908761289e565b91509150611b8a8787848461294e565b90955093508415611bc5576007546001600160a01b031660009081526005602052604081208054879290611bbf90849061416c565b90915550505b50505094509492505050565b8051602080830151604080850151606080870151608088015160a089015160c08a015195519398611c1398600198919791966001600160a01b031695016145e3565b6040516020818303038152906040529050919050565b6000611c38600182848661465e565b611c4191614688565b60f81c9392505050565b6000611c5b6031602d848661465e565b611c64916146b8565b60e01c9392505050565b600061114f611c7d84846129c9565b90565b6000611c5b600d6009848661465e565b6000611ca060096001848661465e565b611ca9916146e6565b60c01c9392505050565b611cbf84848484611827565b611cdc576040516328ca4b5160e01b815260040160405180910390fd5b602084015160ff1615611d6d5760005b846020015160ff168160ff161015611d6b57600084815260046020908152604080832086845290915281206080870151805191929160ff8516908110611d3457611d346140a6565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060009055806001019050611cec565b505b604084015160ff161561087a5760005b846040015160ff168160ff161015611dfc576000848152600460209081526040808320868452909152812060a0870151805191929160ff8516908110611dc557611dc56140a6565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060009055806001019050611d7d565b5050505050565b6000611e13602d600d848661465e565b61114f91614714565b63ffffffff811660009081527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49602052604081208054600160a01b900460ff1615158061114f575054600160b01b900460ff16151592915050565b6000546001600160a01b03163314610df35760405163118cdaa760e01b8152336004820152602401610868565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b602081015160ff16158015611f0e5750606081015160ff16155b156116fc57604051634dafcfbd60e11b815260040160405180910390fd5b602081015160ff9081161480611f475750602081015160ff16155b15611f755760808101515115611f7057604051632ad00e0160e11b815260040160405180910390fd5b611fdb565b806020015160ff16816080015151141580611fb057506002611f99600160ff614732565b611fa3919061474b565b60ff16816020015160ff16115b15611fce57604051632ad00e0160e11b815260040160405180910390fd5b611fdb81608001516129d9565b604081015160ff9081161480611ff65750604081015160ff16155b1561204a5760a0810151511561201f576040516371aa1b6360e11b815260040160405180910390fd5b606081015160ff161561204557604051637c94a05f60e11b815260040160405180910390fd5b6120ef565b806040015160ff168160a00151511415806120855750600261206e600160ff614732565b612078919061474b565b60ff16816040015160ff16115b156120a3576040516371aa1b6360e11b815260040160405180910390fd5b606081015160ff1615806120c45750806040015160ff16816060015160ff16115b156120e257604051637c94a05f60e11b815260040160405180910390fd5b6120ef8160a001516129d9565b6001600160a01b03838116600090815260016020818152604080842063ffffffff881685528252928390208551815487840151958801516060890151929097166001600160a81b031990911617600160a01b60ff968716021761ffff60a81b1916600160a81b9686169690960260ff60b01b191695909517600160b01b949095169390930293909317825560808401518051859461219193850192019061382b565b5060a082015180516121ad91600284019160209091019061382b565b505050505050565b60608060028310156121dd5760405163196499c760e21b815260006004820152602401610868565b60006121ec600282868861465e565b6121f59161477b565b60f01c90506002600219820161235d578060005b8683101561230257600061222260018501858a8c61465e565b61222b91614688565b60f81c9050600081900361225557604051636780cfaf60e01b815260006004820152602401610868565b8160ff16600003612268578091506122a5565b8160ff168160ff16146122a55736600061228486868c8e61465e565b915091506122958989868585612a40565b9099509750859450919250829150505b60018401936000906122bc90600301868b8d61465e565b6122c59161477b565b60f01c905060008190036122ef5760405163196499c760e21b815260048101869052602401610868565b8060020161ffff16850194505050612209565b8287146123255760405163196499c760e21b815260048101849052602401610868565b60028711156123565736600061233d85858b8d61465e565b9150915061234e8888858585612a40565b909850965050505b505061236b565b612368828787612b60565b93505b50509250929050565b805160208083015160408085015160608087015160808801519351600160f81b9681019690965260c09690961b6001600160c01b031916602186015260e093841b6001600160e01b031990811660298701526001600160a01b03909216602d8601529490921b909116604d8301526051820152607101611c13565b60008060006123fd84612ceb565b91509150600089604001518a6020015161241791906147a9565b905060005b8160ff168160ff16101561258f5760008b6020015160ff168260ff16106124715760a08c015160208d01516124519084614732565b60ff1681518110612464576124646140a6565b6020026020010151612493565b8b608001518260ff168151811061248a5761248a6140a6565b60200260200101515b60408051602081019091526000808252919250905b8551811015612500578360ff168682815181106124c7576124c76140a6565b602002602001015160ff16036124f8578681815181106124e9576124e96140a6565b60200260200101519150612500565b6001016124a8565b5060405163fdb9b0f160e01b81526001600160a01b0383169063fdb9b0f190612535908f908f908f908f9088906004016147c2565b602060405180830381865afa158015612552573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612576919061457d565b612580908861416c565b9650505080600101905061241c565b505050509695505050505050565b60075460009081906001600160a01b031615610b8c576040516001600160a01b038716602482015263ffffffff8616604482015260648101859052831515608482015260009060a40160408051601f19818403018152919052602080820180516001600160e01b031663d424422160e01b1790526007549192506000918291612652916001600160a01b0316907f00000000000000000000000000000000000000000000000000000000000000009086612f51565b915091506126628787848461294e565b94509450505050610b8c565b6001600160a01b038316612686576119be8282612ffd565b6119be838383611983565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526119be9084906130aa565b60405163c015bb7d60e01b81526000906001600160a01b0385169063c015bb7d906127149086908690600401614559565b6020604051808303816000875af1158015612733573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612757919061457d565b9050801561278d576001600160a01b0384166000908152600560205260408120805483929061278790849061416c565b90915550505b604080516001600160a01b0386168152602081018390527f61ed099e74a97a1d7f8bb0952a88ca8b7b8ebd00c126ea04671f92a81213318a910160405180910390a19392505050565b60006060816127e7611457866144bc565b905060006127fc6127f7876144bc565b61311b565b905060606128278861281389840160408b01613e59565b8561282160c08c018c6140dc565b8b613138565b604051919650915061283f9084908490602001614819565b60405160208183030381529060405293507f07ea52d82345d6e838192107d8fd7123d9c2ec8e916cd0aad13fd2b60db2464488608001518960a001518360405161288b93929190614848565b60405180910390a1505050935093915050565b60006060863b8083036128c557604080516000808252602082019092529250925050612944565b60008060008761ffff166001600160401b038111156128e6576128e6613ea2565b6040519080825280601f01601f191660200182016040528015612910576020820181803683370190505b509050600080885160208a018c8f8ff191503d925087831115612931578792505b828152826000602083013e909450925050505b9550959350505050565b60008083158061295f575082516020115b1561296f57506000905080610b8c565b600083806020019051810190612985919061457d565b90508515612995578091506129bf565b600060065488116129a8576006546129aa565b875b90508082116129b957816129bb565b805b9350505b5094509492505050565b6000611e1360516031848661465e565b6000805b82518110156119be5760008382815181106129fa576129fa6140a6565b60200260200101519050826001600160a01b0316816001600160a01b031611612a365760405163c0762a5d60e01b815260040160405180910390fd5b91506001016129dd565b60608060001960ff861601612abd57865115612a7f57868484604051602001612a6b939291906148a6565b604051602081830303815290604052612ab6565b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050505b9650612b55565b60011960ff861601612b3757855115612af957858484604051602001612ae5939291906148a6565b604051602081830303815290604052612b30565b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050505b9550612b55565b604051636780cfaf60e01b815260ff86166004820152602401610868565b509495939450505050565b606060001961ffff851601612c005760228214612b90576040516301b8ca5560e31b815260040160405180910390fd5b6000612bb1612ba360226002868861465e565b612bac91614714565b6133ec565b604051600160f81b60208201819052601160f01b602183015260238201526001600160801b0319608083901b16602482015290915060340160405160208183030381529060405291505061114f565b60011961ffff851601612ccc57604282111580612c1d5750606282115b15612c3b576040516360493e2b60e11b815260040160405180910390fd5b6000612c4e612ba360226002868861465e565b90506000612c63612ba360426022878961465e565b905060006041198501612c79866042818a61465e565b612c8291614714565b60405160086020938403029190911c9250612cb3916001916011918391889183916031916002918b918b91016148ce565b604051602081830303815290604052935050505061114f565b604051630417051360e41b815261ffff85166004820152602401610868565b6060808251600003612cfc57915091565b6000612d078461342d565b90508060ff16600103612db95760408051600180825281830190925290816020015b6060815260200190600190039081612d295790505092508383600081518110612d5457612d546140a6565b602090810291909101015260408051600180825281830190925290816020016020820280368337019050509150612d8c846003613507565b82600081518110612d9f57612d9f6140a6565b602002602001019060ff16908160ff168152505050915091565b8060ff166001600160401b03811115612dd457612dd4613ea2565b604051908082528060200260200182016040528015612dfd578160200160208202803683370190505b5091508060ff166001600160401b03811115612e1b57612e1b613ea2565b604051908082528060200260200182016040528015612e4e57816020015b6060815260200190600190039081612e395790505b50925060008060ff5b8651831015612ee4576001909201916000612e728885613563565b6002949094019390506000612e878986613507565b90508260ff1660ff03612e9c57809250612ed5565b8260ff168160ff1614612ed557600219848603016000612ebd8b87846135c0565b9050612ecb8a8a87846136cd565b5093909301929150815b5061ffff169290920191612e57565b8183036000612ef48985846135c0565b9050612f02888885846136cd565b60005b8660ff168160ff161015612f4557878160ff1681518110612f2857612f286140a6565b6020908102919091010180516000190160ff169052600101612f05565b50505050505050915091565b60006060853b808303612f7857604080516000808252602082019092529250925050610b8c565b60008060008761ffff166001600160401b03811115612f9957612f99613ea2565b6040519080825280601f01601f191660200182016040528015612fc3576020820181803683370190505b509050600080885160208a018d8dfa91503d925087831115612fe3578792505b828152826000602083013e90999098509650505050505050565b6001600160a01b038216613024576040516306b7a93160e41b815260040160405180910390fd5b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114613071576040519150601f19603f3d011682016040523d82523d6000602084013e613076565b606091505b50509050806119be57604051631196f20d60e21b81526001600160a01b038416600482015260248101839052604401610868565b600080602060008451602086016000885af1806130cd576040513d6000823e3d81fd5b50506000513d915081156130e55780600114156130f2565b6001600160a01b0384163b155b1561087a57604051635274afe760e01b81526001600160a01b0385166004820152602401610868565b60608160a001518260c00151604051602001611c13929190614966565b6000606060008061314885612ceb565b9150915060008a604001518b6020015161316291906147a9565b90508060ff166001600160401b0381111561317f5761317f613ea2565b6040519080825280602002602001820160405280156131a8578160200160208202803683370190505b50935060005b8160ff168160ff1610156133dd5760008c6020015160ff168260ff16106132035760a08d015160208e01516131e39084614732565b60ff16815181106131f6576131f66140a6565b6020026020010151613225565b8c608001518260ff168151811061321c5761321c6140a6565b60200260200101515b60408051602081019091526000808252919250905b8551811015613292578360ff16868281518110613259576132596140a6565b602002602001015160ff160361328a5786818151811061327b5761327b6140a6565b60200260200101519150613292565b60010161323a565b50816001600160a01b031663f42ed2ed8e8e8e8e866040518663ffffffff1660e01b81526004016132c79594939291906147c2565b6020604051808303816000875af11580156132e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061330a919061457d565b878460ff168151811061331f5761331f6140a6565b6020026020010181815250506000878460ff1681518110613342576133426140a6565b602002602001015111156133d357868360ff1681518110613365576133656140a6565b602002602001015160056000846001600160a01b03166001600160a01b0316815260200190815260200160002060008282546133a1919061416c565b92505081905550868360ff16815181106133bd576133bd6140a6565b6020026020010151886133d0919061416c565b97505b50506001016131ae565b50505050965096945050505050565b60006fffffffffffffffffffffffffffffffff821115613429576040516306dfcc6560e41b81526080600482015260248101839052604401610868565b5090565b600080805b83518210156134dc57600190910190600061344d8584613563565b905060028301925060028161ffff16101561347e5760405163013adb8360e21b815260048101849052602401610868565b600061348a8685613507565b90508060ff1660ff036134b0576040516334f4f66f60e21b815260040160405180910390fd5b600160ff82161b83166134cd5760019485019460ff82161b831792505b5061ffff169190910190613432565b835182146135005760405163013adb8360e21b815260048101839052602401610868565b5050919050565b600061351482600161416c565b8351101561355a5760405162461bcd60e51b8152602060048201526013602482015272746f55696e74385f6f75744f66426f756e647360681b6044820152606401610868565b50016001015190565b600061357082600261416c565b835110156135b75760405162461bcd60e51b8152602060048201526014602482015273746f55696e7431365f6f75744f66426f756e647360601b6044820152606401610868565b50016002015190565b6060816135ce81601f61416c565b101561360d5760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b6044820152606401610868565b613617828461416c565b8451101561365b5760405162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b6044820152606401610868565b60608215801561367a57604051915060008252602082016040526136c4565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156136b357805183526020928301920161369b565b5050858452601f01601f1916604052505b50949350505050565b8160ff1660ff036136f1576040516334f4f66f60e21b815260040160405180910390fd5b60006136fe8360016147a9565b905060005b84518110156121ad576000858281518110613720576137206140a6565b602002602001015190508060ff168360ff160361379557868281518110613749576137496140a6565b602002602001015184604051602001613763929190614819565b604051602081830303815290604052878381518110613784576137846140a6565b6020026020010181905250506121ad565b8060ff166000036137da57828683815181106137b3576137b36140a6565b602002602001019060ff16908160ff168152505083878381518110613784576137846140a6565b50600101613703565b6040518060c0016040528060006001600160a01b03168152602001600060ff168152602001600060ff168152602001600060ff16815260200160608152602001606081525090565b828054828255906000526020600020908101928215613880579160200282015b8281111561388057825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019061384b565b506134299291505b808211156134295760008155600101613888565b6000602082840312156138ae57600080fd5b81356001600160e01b03198116811461114f57600080fd5b600080600080608085870312156138dc57600080fd5b84356001600160401b038111156138f257600080fd5b850160c0818803121561390457600080fd5b966020860135965060408601359560600135945092505050565b602081016003831061394057634e487b7160e01b600052602160045260246000fd5b91905290565b6001600160a01b03811681146116fc57600080fd5b803561396681613946565b919050565b803563ffffffff8116811461396657600080fd5b80356001600160401b038116811461396657600080fd5b6000806000606084860312156139ab57600080fd5b83356139b681613946565b92506139c46020850161396b565b91506139d26040850161397f565b90509250925092565b6000806000606084860312156139f057600080fd5b83356139fb81613946565b92506020840135613a0b81613946565b929592945050506040919091013590565b60008083601f840112613a2e57600080fd5b5081356001600160401b03811115613a4557600080fd5b6020830191508360208260051b8501011115613a6057600080fd5b9250929050565b600080600060408486031215613a7c57600080fd5b8335613a8781613946565b925060208401356001600160401b03811115613aa257600080fd5b613aae86828701613a1c565b9497909650939450505050565b600080600060608486031215613ad057600080fd5b83359250602084013591506040840135613ae981613946565b809150509250925092565b60008083601f840112613b0657600080fd5b5081356001600160401b03811115613b1d57600080fd5b602083019150836020828501011115613a6057600080fd5b60008060008060608587031215613b4b57600080fd5b84356001600160401b0380821115613b6257600080fd5b9086019060e08289031215613b7657600080fd5b90945060208601359080821115613b8c57600080fd5b50613b9987828801613af4565b90945092505060408501358015158114613bb257600080fd5b939692955090935050565b60005b83811015613bd8578181015183820152602001613bc0565b50506000910152565b60008151808452613bf9816020860160208601613bbd565b601f01601f19169290920160200192915050565b82518152602080840151908201526060604082015260006106166060830184613be1565b60008060008060608587031215613c4757600080fd5b84356001600160401b03811115613c5d57600080fd5b613c6987828801613af4565b90989097506020870135966040013595509350505050565b600060208284031215613c9357600080fd5b61114f8261396b565b60008060408385031215613caf57600080fd5b8235613cba81613946565b9150613cc86020840161396b565b90509250929050565b60008151808452602080850194506020840160005b83811015613d0b5781516001600160a01b031687529582019590820190600101613ce6565b509495945050505050565b60018060a01b03815116825260ff602082015116602083015260ff604082015116604083015260ff60608201511660608301526000608082015160c06080850152613d6460c0850182613cd1565b905060a083015184820360a0860152613d7d8282613cd1565b95945050505050565b60208152600061114f6020830184613d16565b600080600060608486031215613dae57600080fd5b613db78461396b565b92506020840135613dc781613946565b91506139d26040850161396b565b60208152600061114f6020830184613be1565b60008060208385031215613dfb57600080fd5b82356001600160401b03811115613e1157600080fd5b613e1d85828601613a1c565b90969095509350505050565b600060208284031215613e3b57600080fd5b5035919050565b8151815260208083015190820152604081016105f7565b600060208284031215613e6b57600080fd5b813561114f81613946565b60008060408385031215613e8957600080fd5b8235613e9481613946565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b60405160c081016001600160401b0381118282101715613eda57613eda613ea2565b60405290565b60405160e081016001600160401b0381118282101715613eda57613eda613ea2565b604051601f8201601f191681016001600160401b0381118282101715613f2a57613f2a613ea2565b604052919050565b803560ff8116811461396657600080fd5b600082601f830112613f5457600080fd5b813560206001600160401b03821115613f6f57613f6f613ea2565b8160051b613f7e828201613f02565b9283528481018201928281019087851115613f9857600080fd5b83870192505b84831015613fc0578235613fb181613946565b82529183019190830190613f9e565b979650505050505050565b600060c08284031215613fdd57600080fd5b613fe5613eb8565b9050613ff08261395b565b8152613ffe60208301613f32565b602082015261400f60408301613f32565b604082015261402060608301613f32565b606082015260808201356001600160401b038082111561403f57600080fd5b61404b85838601613f43565b608084015260a084013591508082111561406457600080fd5b5061407184828501613f43565b60a08301525092915050565b60006105f73683613fcb565b60006020828403121561409b57600080fd5b815161114f81613946565b634e487b7160e01b600052603260045260246000fd5b60008235605e198336030181126140d257600080fd5b9190910192915050565b6000808335601e198436030181126140f357600080fd5b8301803591506001600160401b0382111561410d57600080fd5b602001915036819003821315613a6057600080fd5b60006020828403121561413457600080fd5b81356001600160401b0381111561414a57600080fd5b61061684828501613fcb565b634e487b7160e01b600052601160045260246000fd5b808201808211156105f7576105f7614156565b8183823760009101908152919050565b6000602082840312156141a157600080fd5b61114f8261397f565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6040815260006141e66040830186613be1565b82810360208401526141f98185876141aa565b9695505050505050565b6001600160a01b038616815260806020820181905260009061422890830186886141aa565b604083019490945250606001529392505050565b60008235603e198336030181126140d257600080fd5b6000823560be198336030181126140d257600080fd5b60006020828403121561427a57600080fd5b61114f82613f32565b6000808335601e1984360301811261429a57600080fd5b83016020810192503590506001600160401b038111156142b957600080fd5b8060051b3603821315613a6057600080fd5b8183526000602080850194508260005b85811015613d0b5781356142ee81613946565b6001600160a01b0316875295820195908201906001016142db565b60208082528181018390526000906040808401600586901b8501820187855b8881101561443f57603f19808985030185528235603e198c360301811261434e57600080fd5b8b0163ffffffff61435e8261396b565b1685528781013560be1982360301811261437757600080fd5b85890188905201803561438981613946565b6001600160a01b0316858801526143a1818901613f32565b606060ff808316828901526143b78a8501613f32565b92506080818416818a01526143cd838601613f32565b935060a09250818416838a01526143e681860186614283565b60c08b810152945091506144019050610100890184836142cb565b92505061441081840184614283565b93509050838783030160e08801526144298284836142cb565b978a019796505050928701925050600101614328565b509098975050505050505050565b600082601f83011261445e57600080fd5b81356001600160401b0381111561447757614477613ea2565b61448a601f8201601f1916602001613f02565b81815284602083860101111561449f57600080fd5b816020850160208301376000918101602001919091529392505050565b600060e082360312156144ce57600080fd5b6144d6613ee0565b6144df8361397f565b81526144ed6020840161396b565b60208201526144fe6040840161395b565b604082015261450f6060840161396b565b60608201526080830135608082015260a083013560a082015260c08301356001600160401b0381111561454157600080fd5b61454d3682860161444d565b60c08301525092915050565b6001600160a01b038316815260406020820181905260009061061690830184613be1565b60006020828403121561458f57600080fd5b5051919050565b600060ff8216806145a9576145a9614156565b6000190192915050565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009061061390830184613d16565b60ff60f81b8960f81b1681526001600160401b0360c01b8860c01b166001820152600063ffffffff60e01b808960e01b16600984015287600d840152808760e01b16602d84015250846031830152836051830152825161464a816071850160208701613bbd565b919091016071019998505050505050505050565b6000808585111561466e57600080fd5b8386111561467b57600080fd5b5050820193919092039150565b6001600160f81b031981358181169160018510156146b05780818660010360031b1b83161692505b505092915050565b6001600160e01b031981358181169160048510156146b05760049490940360031b84901b1690921692915050565b6001600160c01b031981358181169160088510156146b05760089490940360031b84901b1690921692915050565b803560208310156105f757600019602084900360031b1b1692915050565b60ff82811682821603908111156105f7576105f7614156565b600060ff83168061476c57634e487b7160e01b600052601260045260246000fd5b8060ff84160491505092915050565b6001600160f01b031981358181169160028510156146b05760029490940360031b84901b1690921692915050565b60ff81811683821601908111156105f7576105f7614156565b6001600160a01b03861681526080602082018190526000906147e690830187613be1565b82810360408401526147f98186886141aa565b9050828103606084015261480d8185613be1565b98975050505050505050565b6000835161482b818460208801613bbd565b83519083019061483f818360208801613bbd565b01949350505050565b60608152600061485b6060830186613cd1565b6020838203602085015261486f8287613cd1565b84810360408601528551808252602080880194509091019060005b8181101561443f5784518352938301939183019160010161488a565b600084516148b8818460208901613bbd565b8201838582376000930192835250909392505050565b60f88a811b6001600160f81b0319908116835260f08b811b6001600160f01b031990811660018601528b841b8316600386015260808b901b6001600160801b031916600486015289841b831660148601529088901b1660158401529085901b166017820152600061494e601883018560801b6001600160801b0319169052565b50602881019190915260480198975050505050505050565b8281526000825161497e816020850160208701613bbd565b91909101602001939250505056fea2646970667358221220aa3c2aa17972b91a5ad74e17a6fe1bc85298f9e147161924798ce8a3a1115efc64736f6c6343000816003360806040523480156200001157600080fd5b506040516200313b3803806200313b83398101604081905262000034916200046f565b6001805460ff61ffff60e81b01191661017760ed1b179055600280546001600160a01b0319166001600160a01b038581169190911790915584908490612ee090859085908216156200008f576200008d60008362000226565b505b60005b8551811015620000f457620000ea7f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de878381518110620000d657620000d662000523565b60200260200101516200022660201b60201c565b5060010162000092565b5060005b815181101562000146576200013c7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775838381518110620000d657620000d662000523565b50600101620000f8565b505060016004908155600680546001600160a01b0319166001600160a01b038d169081179091556040805163416ecebf60e01b8152905191965063416ecebf95508083019450602093509091908290030181865afa158015620001ad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001d3919062000539565b6006805463ffffffff92909216600160a01b0263ffffffff60a01b199092169190911790555050600780546001600160a01b039094166001600160a01b03199094169390931790925550620005a5915050565b60007f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca831480156200027957506000838152602081815260408083206001600160a01b038616845290915290205460ff16155b15620002c65760018054601590620002a190600160a81b90046001600160401b031662000568565b91906101000a8154816001600160401b0302191690836001600160401b031602179055505b620002d28383620002de565b50600190505b92915050565b6000828152602081815260408083206001600160a01b038516845290915281205460ff1662000383576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556200033a3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001620002d8565b506000620002d8565b80516001600160a01b0381168114620003a457600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620003d157600080fd5b815160206001600160401b0380831115620003f057620003f0620003a9565b8260051b604051601f19603f83011681018181108482111715620004185762000418620003a9565b60405293845260208187018101949081019250878511156200043957600080fd5b6020870191505b84821015620004645762000454826200038c565b8352918301919083019062000440565b979650505050505050565b60008060008060008060c087890312156200048957600080fd5b62000494876200038c565b9550620004a4602088016200038c565b60408801519095506001600160401b0380821115620004c257600080fd5b620004d08a838b01620003bf565b9550620004e060608a016200038c565b9450620004f060808a016200038c565b935060a08901519150808211156200050757600080fd5b506200051689828a01620003bf565b9150509295509295509295565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156200054c57600080fd5b815163ffffffff811681146200056157600080fd5b9392505050565b60006001600160401b038281166002600160401b031981016200059b57634e487b7160e01b600052601160045260246000fd5b6001019392505050565b612b8680620005b56000396000f3fe60806040526004361061020e5760003560e01c8063724e78da11610118578063c358de0a116100a0578063cd88b9031161006f578063cd88b903146106af578063cfc32570146106cf578063d2ae2104146106e2578063d547741f14610721578063e395eb5c1461074157600080fd5b8063c358de0a1461062a578063c416aa511461064a578063c7b2370b1461066f578063c8f8dcd11461068f57600080fd5b806391d14854116100e757806391d14854146105065780639e94496514610526578063a217fddf146105d5578063c015bb7d146105ea578063c2803b2c1461060a57600080fd5b8063724e78da146104a0578063741bef1a146104c05780637cd44734146104e05780638624ba07146104f357600080fd5b80633146646a1161019b578063475b6d9e1161016a578063475b6d9e146103fd5780635c975abb146104105780635e280f1114610428578063709eb66414610460578063717e8a421461048057600080fd5b80633146646a1461038a57806336568abe146103aa5780633927c075146103ca5780633d85ac33146103dd57600080fd5b806316c38b3c116101e257806316c38b3c146102bf578063248a9ca3146102df57806326e67a371461031d5780632de113761461034a5780632f2ff15d1461036a57600080fd5b8062bf2e801461021357806301e336671461024d57806301ffc9a71461026f5780631095b6d71461029f575b600080fd5b34801561021f57600080fd5b5060015461023590600160e81b900461ffff1681565b60405161ffff90911681526020015b60405180910390f35b34801561025957600080fd5b5061026d610268366004611dca565b61077a565b005b34801561027b57600080fd5b5061028f61028a366004611e06565b6107a3565b6040519015158152602001610244565b3480156102ab57600080fd5b5061026d6102ba366004611dca565b6107da565b3480156102cb57600080fd5b5061026d6102da366004611e30565b6108ed565b3480156102eb57600080fd5b5061030f6102fa366004611e52565b60009081526020819052604090206001015490565b604051908152602001610244565b34801561032957600080fd5b5061033d610338366004611e7f565b610912565b6040516102449190611e9a565b34801561035657600080fd5b5061028f610365366004611ee1565b610999565b34801561037657600080fd5b5061026d610385366004611efc565b610a30565b34801561039657600080fd5b5061026d6103a5366004611f70565b610a55565b3480156103b657600080fd5b5061026d6103c5366004611efc565b610ae5565b61026d6103d8366004612017565b610afe565b3480156103e957600080fd5b5061026d6103f8366004612158565b610bb9565b61026d61040b366004612273565b610d30565b34801561041c57600080fd5b5060015460ff1661028f565b34801561043457600080fd5b50600654610448906001600160a01b031681565b6040516001600160a01b039091168152602001610244565b34801561046c57600080fd5b5061030f61047b3660046122f1565b610d72565b34801561048c57600080fd5b5061030f61049b3660046122f1565b610e79565b3480156104ac57600080fd5b5061026d6104bb366004611ee1565b610fa5565b3480156104cc57600080fd5b50600254610448906001600160a01b031681565b61026d6104ee36600461235f565b61100b565b61026d610501366004612424565b6110b6565b34801561051257600080fd5b5061028f610521366004611efc565b6111c1565b34801561053257600080fd5b50610592610541366004611e7f565b600560205260009081526040902080546001909101546001600160401b038083169261ffff600160401b820416926001600160801b03600160501b90920482169291811691600160801b9091041685565b604080516001600160401b03968716815261ffff90951660208601526001600160801b03938416908501529116606083015291909116608082015260a001610244565b3480156105e157600080fd5b5061030f600081565b3480156105f657600080fd5b5061030f610605366004612496565b6111ea565b34801561061657600080fd5b50600754610448906001600160a01b031681565b34801561063657600080fd5b5061026d6106453660046124e8565b611312565b34801561065657600080fd5b506001546104489061010090046001600160a01b031681565b34801561067b57600080fd5b5061026d61068a366004611ee1565b61137a565b34801561069b57600080fd5b5061030f6106aa366004612496565b6113e8565b3480156106bb57600080fd5b5061026d6106ca366004612503565b6114e3565b61026d6106dd366004612588565b61151b565b3480156106ee57600080fd5b5060015461070990600160a81b90046001600160401b031681565b6040516001600160401b039091168152602001610244565b34801561072d57600080fd5b5061026d61073c366004611efc565b6115de565b34801561074d57600080fd5b5060065461076590600160a01b900463ffffffff1681565b60405163ffffffff9091168152602001610244565b600080516020612b3183398151915261079281611603565b61079d848484611610565b50505050565b60006001600160e01b03198216637965db0b60e01b14806107d457506301ffc9a760e01b6001600160e01b03198316145b92915050565b600080516020612b318339815191526107f281611603565b61081c7f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de856111c1565b61083957604051635ee08b9760e01b815260040160405180910390fd5b604051637ecdf29160e11b81526001600160a01b0384811660048301526024820184905285169063fd9be52290604401600060405180830381600087803b15801561088357600080fd5b505af1158015610897573d6000803e3d6000fd5b5050604080516001600160a01b038089168252871660208201529081018590527f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb9250606001905060405180910390a150505050565b60006108f881611603565b811561090a57610906611638565b5050565b61090661168c565b63ffffffff811660009081526003602090815260409182902080548351818402810184019094528084526060939283018282801561098d57602002820191906000526020600020906000905b825461010083900a900460ff1681526020600192830181810494850194909303909202910180841161095e5790505b50505050509050919050565b60006109c57f4270fae16c6d150d00e80b689daca99e8073b1838ff2b6063a37be9d851283e4836111c1565b156109d257506000919050565b600154600160a81b90046001600160401b03161580610a165750610a167f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca836111c1565b15610a2357506001919050565b506000919050565b919050565b600082815260208190526040902060010154610a4b81611603565b61079d83836116c5565b600080516020612b31833981519152610a6d81611603565b610a7561175b565b600754604051631cca20df60e31b81526001600160a01b039091169063e65106f890610aa9908790879087906004016125ed565b600060405180830381600087803b158015610ac357600080fd5b505af1158015610ad7573d6000803e3d6000fd5b5050505061079d6001600455565b60405163dec9f03160e01b815260040160405180910390fd5b600080516020612b31833981519152610b1681611603565b610b1e61175b565b610b3e88610b2c8686611785565b610b3687876117a8565b8a8a8a6117c1565b50600754604051631cca20df60e31b81526001600160a01b039091169063e65106f890610b73908790879087906004016125ed565b600060405180830381600087803b158015610b8d57600080fd5b505af1158015610ba1573d6000803e3d6000fd5b50505050610baf6001600455565b5050505050505050565b600080516020612b31833981519152610bd181611603565b60005b8251811015610cf4576000838281518110610bf157610bf1612611565b6020908102919091018101516040805160a08082018352838501516001600160401b03908116835260608086015161ffff9081168589019081526080808901516001600160801b03908116888a01908152968a01518116948801948552888a01518616918801918252985163ffffffff1660009081526005909a529690982094518554985194518816600160501b026fffffffffffffffffffffffffffffffff60501b1995909216600160401b0269ffffffffffffffffffff1990991690841617979097179290921695909517825551600191820180549351909516600160801b026001600160c01b031990931693169290921717909155919091019050610bd4565b507fb99f6de5e22c60c178b03bfacf2daeb4b6089f5b37e0fe2c48a5d5141191fc5382604051610d249190612627565b60405180910390a15050565b600080516020612b31833981519152610d4881611603565b610d5061175b565b610d5e8787878787876117c1565b50610d696001600455565b50505050505050565b600084610d7e81610999565b610d9b57604051634ab5ebcd60e01b815260040160405180910390fd5b610da3611928565b6040805160a0810182526002546001600160a01b03908116825263ffffffff8a1660208084018290528a831684860152606084018a905260015461ffff600160e81b8204166080860152600092835260059091529084902093516321a7700b60e11b815292936101009091049091169163434ee01691610e2c918591908a908a90600401612714565b602060405180830381865afa158015610e49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e6d919061277c565b98975050505050505050565b60007f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de610ea581611603565b85610eaf81610999565b610ecc57604051634ab5ebcd60e01b815260040160405180910390fd5b6040805160a0810182526002546001600160a01b03908116825263ffffffff8b1660208084018290528b831684860152606084018b905260015461ffff600160e81b820416608086015260009283526005909152908490209351632b377bb160e11b815292936101009091049091169163566ef76291610f55918591908b908b90600401612714565b6020604051808303816000875af1158015610f74573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f98919061277c565b9998505050505050505050565b600080516020612b31833981519152610fbd81611603565b600280546001600160a01b0319166001600160a01b0384169081179091556040519081527ff724a45d041687842411f2b977ef22ab8f43c8f1104f4592b42a00f9b34a643d90602001610d24565b600080516020612b3183398151915261102381611603565b61102b61175b565b6006546040516391d20fa160e01b81526001600160a01b03909116906391d20fa1908490349061106d908f908f908f908f908f908f908f908f90600401612795565b6000604051808303818589803b15801561108657600080fd5b5088f115801561109a573d6000803e3d6000fd5b5050505050506110aa6001600455565b50505050505050505050565b600080516020612b318339815191526110ce81611603565b6110d661175b565b600654600090611104906020850190600160a01b900463ffffffff166110fc8287611ee1565b8989896117c1565b90506000611112823461280b565b6006549091506001600160a01b0316630c0c389e60e0860135836020880161113a818a611ee1565b60808a013561114c60a08c018c61281e565b61115960c08e018e61281e565b6040518a63ffffffff1660e01b815260040161117b979695949392919061289d565b6000604051808303818589803b15801561119457600080fd5b5088f11580156111a8573d6000803e3d6000fd5b50505050505050506111ba6001600455565b5050505050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b60007f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de61121681611603565b8461122081610999565b61123d57604051634ab5ebcd60e01b815260040160405180910390fd5b604080516060810182526002546001600160a01b039081168252888116602080840191909152600154600160e81b810461ffff1684860152600654600160a01b900463ffffffff16600090815260059092529084902093516319400de160e21b81529293610100909104909116916365003784916112c4918591908b908b906004016128f3565b6020604051808303816000875af11580156112e3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611307919061277c565b979650505050505050565b600080516020612b3183398151915261132a81611603565b6001805461ffff60e81b1916600160e81b61ffff8516908102919091179091556040519081527f7af0ac740036ffb1c97b03697859d729e80a44ae5030543d64971c313565ab4d90602001610d24565b600080516020612b3183398151915261139281611603565b60018054610100600160a81b0319166101006001600160a01b038516908102919091179091556040519081527f1399be28223800f8669b3ba5f8721d9fc16fc4e8d0bbf98378791c8c5a3015e090602001610d24565b6000836113f481610999565b61141157604051634ab5ebcd60e01b815260040160405180910390fd5b604080516060810182526002546001600160a01b039081168252878116602080840191909152600154600160e81b810461ffff1684860152600654600160a01b900463ffffffff16600090815260059092529084902093516319be3d4f60e11b815292936101009091049091169163337c7a9e91611498918591908a908a906004016128f3565b602060405180830381865afa1580156114b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114d9919061277c565b9695505050505050565b600080516020612b318339815191526114fb81611603565b63ffffffff841660009081526003602052604090206111ba908484611cf5565b600080516020612b3183398151915261153381611603565b61153b61175b565b6006546001600160a01b0316630c0c389e60e084013534602086016115608188611ee1565b608088013561157260a08a018a61281e565b61157f60c08c018c61281e565b6040518a63ffffffff1660e01b81526004016115a1979695949392919061289d565b6000604051808303818589803b1580156115ba57600080fd5b5088f11580156115ce573d6000803e3d6000fd5b5050505050506109066001600455565b6000828152602081905260409020600101546115f981611603565b61079d838361194e565b61160d81336119d8565b50565b6001600160a01b03831661162d576116288282611a16565b505050565b611628838383611ac3565b611640611928565b6001805460ff1916811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b6040516001600160a01b03909116815260200160405180910390a1565b611694611afe565b6001805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa3361166f565b60007f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca831480156116fd57506116fb83836111c1565b155b15611747576001805460159061172290600160a81b90046001600160401b0316612943565b91906101000a8154816001600160401b0302191690836001600160401b031602179055505b6117518383611b21565b5060019392505050565b60026004540361177e57604051633ee5aeb560e01b815260040160405180910390fd5b6002600455565b60006117956031602d8486612969565b61179e91612993565b60e01c9392505050565b60006117ba6117b78484611bb3565b90565b9392505050565b600080836001600160401b038111156117dc576117dc6120aa565b604051908082528060200260200182016040528015611805578160200160208202803683370190505b50905060005b848110156118db57600086868381811061182757611827612611565b90506040020180360381019061183d91906129c3565b9050600081600001516001600160a01b031682602001518790604051600060405180830381858888f193505050503d8060008114611897576040519150601f19603f3d011682016040523d82523d6000602084013e61189c565b606091505b50509050808484815181106118b3576118b3612611565b9115156020928302919091018201528201516118cf9086612a19565b9450505060010161180b565b507f1f48172553121d8bf273ce457a5a3dd180d464e0add3e0143045b7fa039c346888888888888660405161191596959493929190612a6a565b60405180910390a1509695505050505050565b60015460ff161561194c5760405163d93c066560e01b815260040160405180910390fd5b565b60007f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca83148015611984575061198483836111c1565b156119ce57600180546015906119a990600160a81b90046001600160401b0316612aef565b91906101000a8154816001600160401b0302191690836001600160401b031602179055505b6117518383611bcc565b6119e282826111c1565b6109065760405163e2517d3f60e01b81526001600160a01b0382166004820152602481018390526044015b60405180910390fd5b6001600160a01b038216611a3d576040516306b7a93160e41b815260040160405180910390fd5b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611a8a576040519150601f19603f3d011682016040523d82523d6000602084013e611a8f565b606091505b505090508061162857604051631196f20d60e21b81526001600160a01b038416600482015260248101839052604401611a0d565b6001600160a01b038216611aea576040516306b7a93160e41b815260040160405180910390fd5b6116286001600160a01b0384168383611c37565b60015460ff1661194c57604051638dfc202b60e01b815260040160405180910390fd5b6000611b2d83836111c1565b611bab576000838152602081815260408083206001600160a01b03861684529091529020805460ff19166001179055611b633390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016107d4565b5060006107d4565b6000611bc3605160318486612969565b6117ba91612b12565b6000611bd883836111c1565b15611bab576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016107d4565b604080516001600160a01b03841660248201526044808201849052825180830390910181526064909101909152602080820180516001600160e01b031663a9059cbb60e01b1781528251611628938793909260009283929183919082885af180611ca7576040513d6000823e3d81fd5b50506000513d91508115611cbf578060011415611ccc565b6001600160a01b0384163b155b1561079d57604051635274afe760e01b81526001600160a01b0385166004820152602401611a0d565b82805482825590600052602060002090601f01602090048101928215611d8e5791602002820160005b83821115611d5f57833560ff1683826101000a81548160ff021916908360ff1602179055509260200192600101602081600001049283019260010302611d1e565b8015611d8c5782816101000a81549060ff0219169055600101602081600001049283019260010302611d5f565b505b50611d9a929150611d9e565b5090565b5b80821115611d9a5760008155600101611d9f565b80356001600160a01b0381168114610a2b57600080fd5b600080600060608486031215611ddf57600080fd5b611de884611db3565b9250611df660208501611db3565b9150604084013590509250925092565b600060208284031215611e1857600080fd5b81356001600160e01b0319811681146117ba57600080fd5b600060208284031215611e4257600080fd5b813580151581146117ba57600080fd5b600060208284031215611e6457600080fd5b5035919050565b803563ffffffff81168114610a2b57600080fd5b600060208284031215611e9157600080fd5b6117ba82611e6b565b6020808252825182820181905260009190848201906040850190845b81811015611ed557835160ff1683529284019291840191600101611eb6565b50909695505050505050565b600060208284031215611ef357600080fd5b6117ba82611db3565b60008060408385031215611f0f57600080fd5b82359150611f1f60208401611db3565b90509250929050565b60008083601f840112611f3a57600080fd5b5081356001600160401b03811115611f5157600080fd5b602083019150836020828501011115611f6957600080fd5b9250929050565b600080600060408486031215611f8557600080fd5b83356001600160401b03811115611f9b57600080fd5b611fa786828701611f28565b909790965060209590950135949350505050565b600060608284031215611fcd57600080fd5b50919050565b60008083601f840112611fe557600080fd5b5081356001600160401b03811115611ffc57600080fd5b6020830191508360208260061b8501011115611f6957600080fd5b600080600080600080600060e0888a03121561203257600080fd5b61203c8989611fbb565b965060608801356001600160401b038082111561205857600080fd5b6120648b838c01611fd3565b909850965060808a0135955060a08a013591508082111561208457600080fd5b506120918a828b01611f28565b989b979a5095989497959660c090950135949350505050565b634e487b7160e01b600052604160045260246000fd5b60405160c081016001600160401b03811182821017156120e2576120e26120aa565b60405290565b604051601f8201601f191681016001600160401b0381118282101715612110576121106120aa565b604052919050565b80356001600160401b0381168114610a2b57600080fd5b803561ffff81168114610a2b57600080fd5b80356001600160801b0381168114610a2b57600080fd5b6000602080838503121561216b57600080fd5b82356001600160401b038082111561218257600080fd5b818501915085601f83011261219657600080fd5b8135818111156121a8576121a86120aa565b6121b6848260051b016120e8565b818152848101925060c09182028401850191888311156121d557600080fd5b938501935b828510156122675780858a0312156121f25760008081fd5b6121fa6120c0565b61220386611e6b565b8152612210878701612118565b878201526040612221818801612118565b90820152606061223287820161212f565b908201526080612243878201612141565b9082015260a0612254878201612141565b90820152845293840193928501926121da565b50979650505050505050565b60008060008060008060e0878903121561228c57600080fd5b6122968888611fbb565b95506122a460608801611e6b565b94506122b260808801611db3565b935060a08701356001600160401b038111156122cd57600080fd5b6122d989828a01611fd3565b979a969950949794969560c090950135949350505050565b60008060008060006080868803121561230957600080fd5b61231286611e6b565b945061232060208701611db3565b93506040860135925060608601356001600160401b0381111561234257600080fd5b61234e88828901611f28565b969995985093965092949392505050565b600080600080600080600080600060e08a8c03121561237d57600080fd5b6123868a611db3565b985061239460208b01611db3565b975060408a013596506123a960608b0161212f565b955060808a01356001600160401b03808211156123c557600080fd5b6123d18d838e01611f28565b909750955060a08c01359150808211156123ea57600080fd5b506123f78c828d01611f28565b9a9d999c50979a9699959894979660c00135949350505050565b60006101008284031215611fcd57600080fd5b6000806000806060858703121561243a57600080fd5b84356001600160401b038082111561245157600080fd5b61245d88838901611fd3565b909650945060208701359350604087013591508082111561247d57600080fd5b5061248a87828801612411565b91505092959194509250565b6000806000604084860312156124ab57600080fd5b6124b484611db3565b925060208401356001600160401b038111156124cf57600080fd5b6124db86828701611f28565b9497909650939450505050565b6000602082840312156124fa57600080fd5b6117ba8261212f565b60008060006040848603121561251857600080fd5b61252184611e6b565b925060208401356001600160401b038082111561253d57600080fd5b818601915086601f83011261255157600080fd5b81358181111561256057600080fd5b8760208260051b850101111561257557600080fd5b6020830194508093505050509250925092565b60006020828403121561259a57600080fd5b81356001600160401b038111156125b057600080fd5b6125bc84828501612411565b949350505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6040815260006126016040830185876125c4565b9050826020830152949350505050565b634e487b7160e01b600052603260045260246000fd5b602080825282518282018190526000919060409081850190868401855b828110156126b7578151805163ffffffff168552868101516001600160401b039081168887015286820151168686015260608082015161ffff16908601526080808201516001600160801b039081169187019190915260a091820151169085015260c09093019290850190600101612644565b5091979650505050505050565b80546001600160401b03808216845261ffff8260401c1660208501526001600160801b03808360501c16604086015260018401549250808316606086015250808260801c16608085015250505050565b600061016060018060a01b0380885116845263ffffffff6020890151166020850152806040890151166040850152506060870151606084015261ffff608088015116608084015261276860a08401876126c4565b8061014084015261130781840185876125c4565b60006020828403121561278e57600080fd5b5051919050565b6001600160a01b038981168252881660208201526040810187905261ffff8616606082015260c0608082018190526000906127d390830186886125c4565b82810360a08401526127e68185876125c4565b9b9a5050505050505050505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156107d4576107d46127f5565b6000808335601e1984360301811261283557600080fd5b8301803591506001600160401b0382111561284f57600080fd5b602001915036819003821315611f6957600080fd5b63ffffffff61287282611e6b565b168252602081013560208301526001600160401b0361289360408301612118565b1660408301525050565b6128a78189612864565b60018060a01b038716606082015285608082015260e060a082015260006128d260e0830186886125c4565b82810360c08401526128e58185876125c4565b9a9950505050505050505050565b84516001600160a01b0390811682526020808701519091169082015260408086015161ffff1690820152600061012061292f60608401876126c4565b8061010084015261130781840185876125c4565b60006001600160401b0380831681810361295f5761295f6127f5565b6001019392505050565b6000808585111561297957600080fd5b8386111561298657600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156129bb5780818660040360031b1b83161692505b505092915050565b6000604082840312156129d557600080fd5b604051604081018181106001600160401b03821117156129f7576129f76120aa565b604052612a0383611db3565b8152602083013560208201528091505092915050565b808201808211156107d4576107d46127f5565b60008151808452602080850194506020840160005b83811015612a5f578151151587529582019590820190600101612a41565b509495945050505050565b600060e08201612a7a838a612864565b63ffffffff881660608401526001600160a01b03878116608085015260e060a0850152908590528590610100840160005b87811015612adc5782612abd85611db3565b1682526020848101359083015260409384019390910190600101612aab565b5084810360c08601526127e68187612a2c565b60006001600160401b03821680612b0857612b086127f5565b6000190192915050565b803560208310156107d457600019602084900360031b1b169291505056fea49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775a264697066735822122003e7fb8f464aa4a064aa9568ebbe17fdc3d0618228d79d9a1ced9212fb3e0e6b64736f6c6343000816003360c060405234801561001057600080fd5b5060405161162538038061162583398101604081905261002f916100c9565b338061005557604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b61005e81610079565b5063ffffffff1660a052670de0b6b3a76400006080526100f6565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100db57600080fd5b815163ffffffff811681146100ef57600080fd5b9392505050565b60805160a0516115036101226000396000818161021501526102b20152600061075501526115036000f3fe60806040526004361061008a5760003560e01c8063566ef76211610059578063566ef7621461012c578063650037841461014c578063715018a61461016c5780638da5cb5b14610181578063f2fde38b146101a957600080fd5b806301e3366714610096578063337c7a9e146100b8578063434ee016146100eb57806354fd4d501461010b57600080fd5b3661009157005b600080fd5b3480156100a257600080fd5b506100b66100b13660046110c2565b6101c9565b005b3480156100c457600080fd5b506100d86100d336600461115f565b6101e1565b6040519081526020015b60405180910390f35b3480156100f757600080fd5b506100d86101063660046111cb565b6103c1565b34801561011757600080fd5b506040805160018082526020820152016100e2565b34801561013857600080fd5b506100d86101473660046111cb565b61058c565b34801561015857600080fd5b506100d861016736600461115f565b6105a3565b34801561017857600080fd5b506100b66105b1565b34801561018d57600080fd5b506000546040516001600160a01b0390911681526020016100e2565b3480156101b557600080fd5b506100b66101c4366004611218565b6105c5565b6101d1610603565b6101dc838383610630565b505050565b60006101f0602085018561123a565b67ffffffffffffffff166000036102475760405163c3baa0b760e01b815263ffffffff7f00000000000000000000000000000000000000000000000000000000000000001660048201526024015b60405180910390fd5b6000808061028560018261025e60208b018b61123a565b61026e60a08c0160808d0161123a565b61027e60808d0160608e01611279565b8b8b610653565b91945092509050600080808061029e60208d018d611218565b604051632229049360e21b815263ffffffff7f00000000000000000000000000000000000000000000000000000000000000008116600483015287166024820152604481018890526001600160a01b0391909116906388a4124c90606401608060405180830381865afa158015610319573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061033d9190611296565b929650909450925090506103878461035b60408e0160208f016112eb565b8e604001602081019061036e91906112eb565b8e60400160208101906103819190611279565b856106e5565b97506103a78784848f60400160208101906103a291906112eb565b6107ba565b6103b19089611325565b9c9b505050505050505050505050565b60006103d0602085018561123a565b67ffffffffffffffff16600003610413576103f1604086016020870161133e565b60405163c3baa0b760e01b815263ffffffff909116600482015260240161023e565b6000806104678161043361042d60408b0160208c0161133e565b50600090565b61044060208a018a61123a565b61045060a08b0160808c0161123a565b61046060808c0160608d01611279565b8a8a610653565b509092509050600080808061047f60208c018c611218565b6001600160a01b03166388a4124c61049d60408e0160208f0161133e565b6040516001600160e01b031960e084901b16815263ffffffff91909116600482015260608e0135602482015260448101889052606401608060405180830381865afa1580156104f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105149190611296565b929650909450925090506105588461053260408d0160208e016112eb565b8d608001602081019061054591906112eb565b8d60400160208101906103819190611279565b96506105738684848e60800160208101906103a291906112eb565b61057d9088611325565b9b9a5050505050505050505050565b600061059a858585856103c1565b95945050505050565b600061059a858585856101e1565b6105b9610603565b6105c3600061080f565b565b6105cd610603565b6001600160a01b0381166105f757604051631e4fbdf760e01b81526000600482015260240161023e565b6106008161080f565b50565b6000546001600160a01b031633146105c35760405163118cdaa760e01b815233600482015260240161023e565b6001600160a01b038316610648576101dc828261085f565b6101dc83838361090c565b60008060008061066686868d8d8b610947565b805160608201516080830151919650935090915061068e9067ffffffffffffffff8a16611364565b60208201516106a79067ffffffffffffffff8c16611325565b6106b19190611325565b92508060400151156106d75760646106ca846066611364565b6106d4919061137b565b92505b509750975097945050505050565b60008061ffff8616156106f857856106fa565b845b9050600061271061070f61ffff84168a611364565b610719919061137b565b90506001600160801b038416158061073857506001600160801b038516155b1561074657915061059a9050565b600088856001600160801b03167f0000000000000000000000000000000000000000000000000000000000000000886001600160801b03166107889190611364565b610792919061137b565b61079c9190611325565b90508181116107ab57816107ad565b805b9998505050505050505050565b60008415610807576127108261ffff16846001600160801b0316866001600160801b0316886107e99190611364565b6107f3919061137b565b6107fd9190611364565b61059a919061137b565b949350505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038216610886576040516306b7a93160e41b815260040160405180910390fd5b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146108d3576040519150601f19603f3d011682016040523d82523d6000602084013e6108d8565b606091505b50509050806101dc57604051631196f20d60e21b81526001600160a01b03841660048201526024810183905260440161023e565b6001600160a01b038216610933576040516306b7a93160e41b815260040160405180910390fd5b6101dc6001600160a01b0384168383610d50565b6109816040518060a001604052806000815260200160008152602001600015158152602001600063ffffffff168152602001600081525090565b60008590036109a25760405162575ea160e01b815260040160405180910390fd5b600080805b87831015610c725760003681806109bf8d8d89610da2565b99509195509350915086905060001960ff851601610a7f578a156109fb5760405163052e551560e01b815260ff8516600482015260240161023e565b600080610a088585610df8565b915091508b8015610a2257506000816001600160801b0316115b15610a455760405163052e551560e01b815260ff8716600482015260240161023e565b806001600160801b03168a600001818151610a609190611325565b905250610a766001600160801b03831689611325565b97505050610c69565b60011960ff851601610ae3578a15610aaf5760405163052e551560e01b815260ff8516600482015260240161023e565b6000610abb8484610e5d565b509050806001600160801b031689600001818151610ad99190611325565b905250610c699050565b60021960ff851601610ba8578915610b135760405163052e551560e01b815260ff8516600482015260240161023e565b600080610b208585610e9b565b9250925050816001600160801b0316600003610b4f5760405163a169d0e160e01b815260040160405180910390fd5b806001600160801b03168a600001818151610b6a9190611325565b90525060208a0180516001600160801b0384169190610b8a908390611325565b90525060808a01805190610b9d8261139d565b815250505050610c69565b60031960ff851601610bc05760016040890152610c69565b60041960ff851601610c4b578a610bef5760405163052e551560e01b815260ff8516600482015260240161023e565b6000806000610bfe8686610f0f565b925092509250806001600160801b03168b600001818151610c1f9190611325565b905250610c356001600160801b0384168a611325565b9850610c4182896113b6565b9750505050610c69565b60405163052e551560e01b815260ff8516600482015260240161023e565b505050506109a7565b828814610c9557604051634c83bb7560e11b81526004810184905260240161023e565b83516001600160801b0386161015610cd45783516040516242670160e11b815260048101919091526001600160801b038616602482015260440161023e565b81600003610cf557604051630e5eb8f360e41b815260040160405180910390fd5b868015610d06575063ffffffff8116155b15610d24576040516336619f8360e11b815260040160405180910390fd5b8184602001818151610d369190611325565b90525063ffffffff16606084015250909695505050505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526101dc908490610f7a565b600036816001840181610db6888884610ff1565b600292909201919050610dca888884611018565b94506001820161ffff82168301610de381838b8d6113da565b979b909a50969850505061ffff160193505050565b60008060108314801590610e0d575060208314155b15610e2b57604051634796aee160e01b815260040160405180910390fd5b610e378484600061103d565b915060208314610e48576000610e54565b610e548484601061103d565b90509250929050565b60008060308314610e81576040516361d0c2c760e11b815260040160405180910390fd5b610e8d8484600061103d565b9150610e5484846010611064565b6000808060128414801590610eb1575060228414155b15610ecf57604051638b4aa70b60e01b815260040160405180910390fd5b610edb85856000610ff1565b9250610ee98585600261103d565b915060228414610efa576000610f06565b610f068585601261103d565b90509250925092565b6000808060148414801590610f25575060248414155b15610f4357604051636f5bff2160e11b815260040160405180910390fd5b610f4f8585600061103d565b9250610f5d8585601061107f565b915060248414610f6e576000610f06565b610f068585601461103d565b600080602060008451602086016000885af180610f9d576040513d6000823e3d81fd5b50506000513d91508115610fb5578060011415610fc2565b6001600160a01b0384163b155b15610feb57604051635274afe760e01b81526001600160a01b038516600482015260240161023e565b50505050565b600060028201611003818486886113da565b61100c91611404565b60f01c95945050505050565b600083838381811061102c5761102c611434565b919091013560f81c95945050505050565b60006010820161104f818486886113da565b6110589161144a565b60801c95945050505050565b600060208201611076818486886113da565b61059a91611481565b600060048201611091818486886113da565b61109a9161149f565b60e01c95945050505050565b80356001600160a01b03811681146110bd57600080fd5b919050565b6000806000606084860312156110d757600080fd5b6110e0846110a6565b92506110ee602085016110a6565b9150604084013590509250925092565b600060a0828403121561111057600080fd5b50919050565b60008083601f84011261112857600080fd5b50813567ffffffffffffffff81111561114057600080fd5b60208301915083602082850101111561115857600080fd5b9250929050565b60008060008084860361012081121561117757600080fd5b606081121561118557600080fd5b5084935061119686606087016110fe565b925061010085013567ffffffffffffffff8111156111b357600080fd5b6111bf87828801611116565b95989497509550505050565b60008060008061016085870312156111e257600080fd5b6111ec86866110fe565b93506111fb8660a087016110fe565b925061014085013567ffffffffffffffff8111156111b357600080fd5b60006020828403121561122a57600080fd5b611233826110a6565b9392505050565b60006020828403121561124c57600080fd5b813567ffffffffffffffff8116811461123357600080fd5b6001600160801b038116811461060057600080fd5b60006020828403121561128b57600080fd5b813561123381611264565b600080600080608085870312156112ac57600080fd5b8451935060208501516112be81611264565b60408601519093506112cf81611264565b60608601519092506112e081611264565b939692955090935050565b6000602082840312156112fd57600080fd5b813561ffff8116811461123357600080fd5b634e487b7160e01b600052601160045260246000fd5b808201808211156113385761133861130f565b92915050565b60006020828403121561135057600080fd5b813563ffffffff8116811461123357600080fd5b80820281158282048414176113385761133861130f565b60008261139857634e487b7160e01b600052601260045260246000fd5b500490565b6000600182016113af576113af61130f565b5060010190565b63ffffffff8181168382160190808211156113d3576113d361130f565b5092915050565b600080858511156113ea57600080fd5b838611156113f757600080fd5b5050820193919092039150565b6001600160f01b0319813581811691600285101561142c5780818660020360031b1b83161692505b505092915050565b634e487b7160e01b600052603260045260246000fd5b6fffffffffffffffffffffffffffffffff19813581811691601085101561142c5760109490940360031b84901b1690921692915050565b8035602083101561133857600019602084900360031b1b1692915050565b6001600160e01b0319813581811691600485101561142c5760049490940360031b84901b169092169291505056fea26469706673582212204c4f5a98e90d6be97596e1e9898b33b6b2d63dca8ef38882eb89a478158f7b6b64736f6c6343000816003360c06040523480156200001157600080fd5b5060405162003bf738038062003bf78339810160408190526200003491620004de565b6001805460ff61ffff60e81b01191661017760ed1b179055600280546001600160a01b0319166001600160a01b03861617905582828686612ee060008660005b8551811015620000d657620000cc7f724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19de878381518110620000b857620000b8620005c2565b60200260200101516200028060201b60201c565b5060010162000074565b5060005b815181101562000128576200011e7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775838381518110620000b857620000b8620005c2565b50600101620000da565b505050505050806001600160401b03166000036200015957604051635f86e17760e01b815260040160405180910390fd5b806001600160401b0316825110156200019f5781516040516378e2c15760e11b81526001600160401b039182166004820152908216602482015260440160405180910390fd5b6000805b835181101562000231576000848281518110620001c457620001c4620005c2565b60200260200101519050826001600160a01b0316816001600160a01b03161162000201576040516305fa937f60e11b815260040160405180910390fd5b6001600160a01b0381166000908152600460205260409020805460ff1916600190811790915590925001620001a3565b50509051600580546001600160401b0393841668010000000000000000026001600160801b0319909116939092169290921717905550505063ffffffff92831660805250501660a05262000615565b60007f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca83148015620002d357506000838152602081815260408083206001600160a01b038616845290915290205460ff16155b15620003205760018054601590620002fb90600160a81b90046001600160401b0316620005d8565b91906101000a8154816001600160401b0302191690836001600160401b031602179055505b6200032c838362000338565b50600190505b92915050565b6000828152602081815260408083206001600160a01b038516845290915281205460ff16620003dd576000838152602081815260408083206001600160a01b03861684529091529020805460ff19166001179055620003943390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600162000332565b50600062000332565b805163ffffffff81168114620003fb57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b80516001600160a01b0381168114620003fb57600080fd5b600082601f8301126200044057600080fd5b815160206001600160401b03808311156200045f576200045f62000400565b8260051b604051601f19603f8301168101818110848211171562000487576200048762000400565b6040529384526020818701810194908101925087851115620004a857600080fd5b6020870191505b84821015620004d357620004c38262000416565b83529183019190830190620004af565b979650505050505050565b600080600080600080600060e0888a031215620004fa57600080fd5b6200050588620003e6565b96506200051560208901620003e6565b60408901519096506001600160401b03808211156200053357600080fd5b620005418b838c016200042e565b96506200055160608b0162000416565b955060808a01519150808211156200056857600080fd5b620005768b838c016200042e565b945060a08a0151915080821682146200058e57600080fd5b60c08a015191935080821115620005a457600080fd5b50620005b38a828b016200042e565b91505092959891949750929550565b634e487b7160e01b600052603260045260246000fd5b60006001600160401b038281166002600160401b031981016200060b57634e487b7160e01b600052601160045260246000fd5b6001019392505050565b60805160a0516135a0620006576000396000818161081d01528181611d5a0152611e8f01526000818161076d015281816112b00152611b9801526135a06000f3fe6080604052600436106102505760003560e01c806395d376d711610139578063cd88b903116100b6578063e395eb5c1161007a578063e395eb5c1461080b578063f010cb231461083f578063f3b4ebd01461085f578063f42ed2ed1461087f578063fd62e75014610892578063fdb9b0f1146108b257600080fd5b8063cd88b9031461073b578063cf34c7681461075b578063d2ae2104146107a4578063d547741f146107cb578063dafe0ccc146107eb57600080fd5b8063c358de0a116100fd578063c358de0a14610688578063c416aa51146106a8578063c5e193cd146106cd578063c7a823e0146106ed578063c7b2370b1461071b57600080fd5b806395d376d71461058b5780639e9449651461059e578063a217fddf14610623578063aef18bf714610638578063b143044b1461066857600080fd5b806330bb3aac116101d25780635c975abb116101965780635c975abb146104ab578063724e78da146104c3578063736c0d5b146104e3578063741bef1a146105135780638585c9451461054b57806391d148541461056b57600080fd5b806330bb3aac1461040b57806331cb61051461042b57806336568abe1461044b57806352d3b8711461046b5780635553fb8e1461048b57600080fd5b80631703a018116102195780631703a01814610321578063248a9ca31461036057806326e67a371461039e5780632de11376146103cb5780632f2ff15d146103eb57600080fd5b8062bf2e801461025557806301e336671461028f57806301ffc9a7146102b15780631095b6d7146102e157806316c38b3c14610301575b600080fd5b34801561026157600080fd5b5060015461027790600160e81b900461ffff1681565b60405161ffff90911681526020015b60405180910390f35b34801561029b57600080fd5b506102af6102aa366004612893565b6108d2565b005b3480156102bd57600080fd5b506102d16102cc3660046128d4565b6108fb565b6040519015158152602001610286565b3480156102ed57600080fd5b506102af6102fc366004612893565b610932565b34801561030d57600080fd5b506102af61031c366004612915565b610a34565b34801561032d57600080fd5b5060055461034890600160401b90046001600160401b031681565b6040516001600160401b039091168152602001610286565b34801561036c57600080fd5b5061039061037b366004612930565b60009081526020819052604090206001015490565b604051908152602001610286565b3480156103aa57600080fd5b506103be6103b936600461295d565b610a59565b6040516102869190612978565b3480156103d757600080fd5b506102d16103e63660046129bf565b610ae0565b3480156103f757600080fd5b506102af6104063660046129dc565b610b65565b34801561041757600080fd5b50610390610426366004612a6b565b610c3a565b34801561043757600080fd5b506102af610446366004612ae2565b610d52565b34801561045757600080fd5b506102af6104663660046129dc565b610d7c565b34801561047757600080fd5b506102af610486366004612b17565b610d95565b34801561049757600080fd5b506103906104a6366004612b9d565b610f0e565b3480156104b757600080fd5b5060015460ff166102d1565b3480156104cf57600080fd5b506102af6104de3660046129bf565b611026565b3480156104ef57600080fd5b506102d16104fe3660046129bf565b60046020526000908152604090205460ff1681565b34801561051f57600080fd5b50600254610533906001600160a01b031681565b6040516001600160a01b039091168152602001610286565b34801561055757600080fd5b506102af610566366004612bf3565b611094565b34801561057757600080fd5b506102d16105863660046129dc565b6110c0565b610390610599366004612c26565b6110e9565b3480156105aa57600080fd5b506105f26105b936600461295d565b6006602052600090815260409020546001600160401b03811690600160401b810461ffff1690600160501b90046001600160801b031683565b604080516001600160401b03909416845261ffff90921660208401526001600160801b031690820152606001610286565b34801561062f57600080fd5b50610390600081565b34801561064457600080fd5b506102d1610653366004612930565b60076020526000908152604090205460ff1681565b34801561067457600080fd5b506102af610683366004612cd2565b61125f565b34801561069457600080fd5b506102af6106a3366004612d13565b611514565b3480156106b457600080fd5b506001546105339061010090046001600160a01b031681565b3480156106d957600080fd5b506103906106e8366004612b9d565b61157c565b3480156106f957600080fd5b5061070d610708366004612d2e565b6116e9565b604051610286929190612d82565b34801561072757600080fd5b506102af6107363660046129bf565b6118c7565b34801561074757600080fd5b506102af610756366004612db6565b611935565b34801561076757600080fd5b5061078f7f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff9091168152602001610286565b3480156107b057600080fd5b5060015461034890600160a81b90046001600160401b031681565b3480156107d757600080fd5b506102af6107e63660046129dc565b611974565b3480156107f757600080fd5b506102af610806366004612893565b611a28565b34801561081757600080fd5b5061078f7f000000000000000000000000000000000000000000000000000000000000000081565b34801561084b57600080fd5b5061039061085a366004612dfb565b611add565b34801561086b57600080fd5b506102af61087a366004612e65565b611b19565b61039061088d366004612ea1565b611cc7565b34801561089e57600080fd5b50600554610348906001600160401b031681565b3480156108be57600080fd5b506103906108cd366004612ea1565b611e14565b60008051602061352b8339815191526108ea81611f45565b6108f5848484611f4f565b50505050565b60006001600160e01b03198216637965db0b60e01b148061092c57506301ffc9a760e01b6001600160e01b03198316145b92915050565b60008051602061352b83398151915261094a81611f45565b61096260008051602061350b833981519152856110c0565b61097f57604051635ee08b9760e01b815260040160405180910390fd5b604051637ecdf29160e11b81526001600160a01b0384811660048301526024820184905285169063fd9be52290604401600060405180830381600087803b1580156109c957600080fd5b505af11580156109dd573d6000803e3d6000fd5b5050604080516001600160a01b038089168252871660208201529081018590527f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb925060600190505b60405180910390a150505050565b6000610a3f81611f45565b8115610a5157610a4d611f77565b5050565b610a4d611fcb565b63ffffffff8116600090815260036020908152604091829020805483518184028101840190945280845260609392830182828015610ad457602002820191906000526020600020906000905b825461010083900a900460ff16815260206001928301818104948501949093039092029101808411610aa55790505b50505050509050919050565b6000610b0c7f4270fae16c6d150d00e80b689daca99e8073b1838ff2b6063a37be9d851283e4836110c0565b15610b1957506000919050565b600154600160a81b90046001600160401b03161580610b4b5750610b4b60008051602061354b833981519152836110c0565b15610b5857506001919050565b506000919050565b919050565b8160008051602061354b833981519152811480610ba157507f4270fae16c6d150d00e80b689daca99e8073b1838ff2b6063a37be9d851283e481145b80610bb9575060008051602061350b83398151915281145b15610be357303314610bde57604051637d5d391d60e11b815260040160405180910390fd5b610c30565b60008051602061352b8339815191528103610c0f57610bde60008051602061352b833981519152611f45565b604051634a7ee1b960e11b8152600481018290526024015b60405180910390fd5b6108f58383612004565b600083610c4681610ae0565b610c6357604051634ab5ebcd60e01b815260040160405180910390fd5b6040805160c0810182526002546001600160a01b03908116825263ffffffff8a1660208084018290526001600160401b03808c16858701528a84166060860152600554600160401b900416608085015260015461ffff600160e81b82041660a086015260009283526006909152908490209351637bfa20a960e01b8152929361010090910490911691637bfa20a991610d05918591908a908a90600401613004565b602060405180830381865afa158015610d22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d469190613034565b98975050505050505050565b303314610d7257604051637d5d391d60e11b815260040160405180910390fd5b610a4d8282612088565b60405163dec9f03160e01b815260040160405180910390fd5b60008051602061352b833981519152610dad81611f45565b60005b82811015610ecf5736848483818110610dcb57610dcb61304d565b90506080020190506040518060600160405280826020016020810190610df19190612bf3565b6001600160401b03168152602001610e0f6060840160408501612d13565b61ffff168152602001610e28608084016060850161307a565b6001600160801b0316905260066000610e44602085018561295d565b63ffffffff1681526020808201929092526040908101600020835181549385015194909201516001600160801b0316600160501b026fffffffffffffffffffffffffffffffff60501b1961ffff909516600160401b0269ffffffffffffffffffff199094166001600160401b0390931692909217929092179290921691909117905550600101610db0565b507f7dd21e42791b013d1929e86f0c59085e4fca24251f0f1aa81917b3b1611766e08383604051610f01929190613095565b60405180910390a1505050565b600081610f1a81610ae0565b610f3757604051634ab5ebcd60e01b815260040160405180910390fd5b6040805160c0810182526002546001600160a01b03908116825261ffff808a1660208085018290526001600160401b03808b16868801528985166060870152600554600160401b9004166080860152600154600160e81b810490931660a0860152600091825260068152858220865191820187529181529451637bfa20a960e01b8152939461010090920490921692637bfa20a992610fda92869260040161316f565b602060405180830381865afa158015610ff7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061101b9190613034565b979650505050505050565b60008051602061352b83398151915261103e81611f45565b600280546001600160a01b0319166001600160a01b0384169081179091556040519081527ff724a45d041687842411f2b977ef22ab8f43c8f1104f4592b42a00f9b34a643d906020015b60405180910390a15050565b3033146110b457604051637d5d391d60e11b815260040160405180910390fd5b6110bd816121e3565b50565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b600060008051602061350b83398151915261110381611f45565b61111360a08601608087016129bf565b61111c81610ae0565b61113957604051634ab5ebcd60e01b815260040160405180910390fd5b6040805160c081019091526002546001600160a01b03168152600090602080820190611167908a018a61295d565b63ffffffff16815260200161118260808a0160608b01612bf3565b6001600160401b031681526020016111a060a08a0160808b016129bf565b6001600160a01b039081168252600554600160401b90046001600160401b0316602080840191909152600154600160e81b810461ffff16604090940193909352929350610100909104169063df2b057e908390600690600090611205908d018d61295d565b63ffffffff1663ffffffff16815260200190815260200160002089896040518563ffffffff1660e01b81526004016112409493929190613004565b6020604051808303816000875af1158015610ff7573d6000803e3d6000fd5b60008051602061352b83398151915261127781611f45565b60005b828110156108f557368484838181106112955761129561304d565b90506020028101906112a791906131a8565b905063ffffffff7f0000000000000000000000000000000000000000000000000000000000000000166112dd602083018361295d565b63ffffffff16146112ee575061150c565b428160600135116112ff575061150c565b6000611338611311602084018461295d565b61132160408501602086016129bf565b61132e60408601866131c8565b8660600135611add565b9050600061134d8261070860808601866131c8565b50905080611390576040518481527fd6d90193101048cc1b6edcdc2348f5acf7a4a4a97d3e7b668b74cb7602ab3ebc9060200160405180910390a150505061150c565b60006113b06113a260408601866131c8565b6113ab9161320e565b6122b1565b9050801561142b5760008381526007602052604090205460ff1615611411577f9bb9bddbdf537a2104255307230b323d7982f4512ee8e5bd15df62ddca50ab978484604051611400929190613283565b60405180910390a15050505061150c565b6000838152600760205260409020805460ff191660011790555b60008061143e60408701602088016129bf565b6001600160a01b031661145460408801886131c8565b60405161146292919061331e565b6000604051808303816000865af19150503d806000811461149f576040519150601f19603f3d011682016040523d82523d6000602084013e6114a4565b606091505b5091509150816115055782156114cb576000858152600760205260409020805460ff191690555b7fdc8cdd96296241bbefda4a8e18ad2e0985a8da6495b34d409cfc4c886ee3b0cf87826040516114fc92919061332e565b60405180910390a15b5050505050505b60010161127a565b60008051602061352b83398151915261152c81611f45565b6001805461ffff60e81b1916600160e81b61ffff8516908102919091179091556040519081527f7af0ac740036ffb1c97b03697859d729e80a44ae5030543d64971c313565ab4d90602001611088565b600060008051602061350b83398151915261159681611f45565b826115a081610ae0565b6115bd57604051634ab5ebcd60e01b815260040160405180910390fd5b6040805160c0810182526002546001600160a01b03908116825261ffff808b1660208085018290526001600160401b03808c16868801528a85166060870152600554600160401b9004166080860152600154600160e81b810490931660a0860152600091825260068152858220865191820187529181529451636f9582bf60e11b815293946101009092049092169263df2b057e9261166092869260040161316f565b6020604051808303816000875af115801561167f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116a39190613034565b93507f87e46b0a6199bc734632187269a103c05714ee0adae5b28f30723955724f37ef846040516116d691815260200190565b60405180910390a1505050949350505050565b600554600090819061170c90600160401b90046001600160401b0316604161335d565b831461171e57506000905060016118bf565b6000611777866040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b90506000805b600554600160401b90046001600160401b03168110156118b35736600088886117a785604161335d565b906117b3866001613374565b6117be90604161335d565b926117cb93929190613387565b915091506000806118128785858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061230792505050565b509092509050600081600381111561182c5761182c612d6c565b14611845576000600198509850505050505050506118bf565b856001600160a01b0316826001600160a01b031611611872576000600298509850505050505050506118bf565b6001600160a01b03821660009081526004602052604090205460ff166118a6576000600398509850505050505050506118bf565b509350505060010161177d565b50600160009350935050505b935093915050565b60008051602061352b8339815191526118df81611f45565b60018054610100600160a81b0319166101006001600160a01b038516908102919091179091556040519081527f1399be28223800f8669b3ba5f8721d9fc16fc4e8d0bbf98378791c8c5a3015e090602001611088565b60008051602061352b83398151915261194d81611f45565b63ffffffff8416600090815260036020526040902061196d9084846127c0565b5050505050565b8160008051602061354b8339815191528114806119b057507f4270fae16c6d150d00e80b689daca99e8073b1838ff2b6063a37be9d851283e481145b806119c8575060008051602061350b83398151915281145b156119f2573033146119ed57604051637d5d391d60e11b815260040160405180910390fd5b611a1e565b60008051602061352b8339815191528103610c0f576119ed60008051602061352b833981519152611f45565b6108f58383612354565b60008051602061352b833981519152611a4081611f45565b611a5860008051602061350b833981519152856110c0565b611a7557604051635ee08b9760e01b815260040160405180910390fd5b6040516303d8c5ef60e11b81526001600160a01b038481166004830152602482018490528516906307b18bde90604401600060405180830381600087803b158015611abf57600080fd5b505af1158015611ad3573d6000803e3d6000fd5b5050505050505050565b60008585838686604051602001611af89594939291906133b1565b60405160208183030381529060405280519060200120905095945050505050565b42816060013511611b3d57604051630bbaf26360e01b815260040160405180910390fd5b30611b4e60408301602084016129bf565b6001600160a01b031614611b9157611b6c60408201602083016129bf565b604051631ce0bfcd60e01b81526001600160a01b039091166004820152602401610c27565b63ffffffff7f000000000000000000000000000000000000000000000000000000000000000016611bc5602083018361295d565b63ffffffff1614611bff57611bdd602082018261295d565b60405163134bf0e160e11b815263ffffffff9091166004820152602401610c27565b6000611c11611311602084018461295d565b90506000611c268261070860808601866131c8565b50905080611c4757604051630af656f760e11b815260040160405180910390fd5b60008281526007602052604090205460ff1615611c7a57604051634eb522d360e11b815260048101839052602401610c27565b60008281526007602052604090819020805460ff191660011790556108f59060008051602061352b83398151915290611cb5908601866131c8565b810190611cc291906129bf565b612004565b600060008051602061350b833981519152611ce181611f45565b88611ceb81610ae0565b611d0857604051634ab5ebcd60e01b815260040160405180910390fd5b604080516080810182526002546001600160a01b0390811682528c8116602080840191909152600554600160401b90046001600160401b031683850152600154600160e81b810461ffff1660608501527f000000000000000000000000000000000000000000000000000000000000000063ffffffff166000908152600690925290849020935163bbc5a33b60e01b815292936101009091049091169163bbc5a33b91611dc2918591908d908d908d908d906004016133f7565b6020604051808303816000875af1158015611de1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e059190613034565b9b9a5050505050505050505050565b600087611e2081610ae0565b611e3d57604051634ab5ebcd60e01b815260040160405180910390fd5b604080516080810182526002546001600160a01b0390811682528b8116602080840191909152600554600160401b90046001600160401b031683850152600154600160e81b810461ffff1660608501527f000000000000000000000000000000000000000000000000000000000000000063ffffffff166000908152600690925290849020935162d358b360e81b815292936101009091049091169163d358b30091611ef6918591908c908c908c908c906004016133f7565b602060405180830381865afa158015611f13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f379190613034565b9a9950505050505050505050565b6110bd81336123cc565b6001600160a01b038316611f6c57611f678282612405565b505050565b611f678383836124b2565b611f7f6124ed565b6001805460ff1916811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b6040516001600160a01b03909116815260200160405180910390a1565b611fd3612513565b6001805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33611fae565b600060008051602061354b8339815191528314801561202a575061202883836110c0565b155b15612074576001805460159061204f90600160a81b90046001600160401b031661347a565b91906101000a8154816001600160401b0302191690836001600160401b031602179055505b61207e8383612536565b5060019392505050565b6001600160a01b03821660009081526004602052604090205481151560ff9091161515036120dc576040516302c6469560e51b81526001600160a01b03831660048201528115156024820152604401610c27565b6001600160a01b0382166000908152600460205260408120805460ff1916831515179055816121225760055461211d906001906001600160401b03166134a0565b612139565b600554612139906001600160401b031660016134c7565b6005549091506001600160401b03600160401b9091048116908216811115612187576040516378e2c15760e11b81526001600160401b03808416600483015282166024820152604401610c27565b6005805467ffffffffffffffff19166001600160401b038416179055604080516001600160a01b038616815284151560208201527f863d338cad74814b108a06288ad5e0e80d56495e0332238b1d2cdcfa0ca8e5ce9101610a26565b806001600160401b031660000361220d57604051635f86e17760e01b815260040160405180910390fd5b6005546001600160401b03908116908216811015612251576040516378e2c15760e11b81526001600160401b03808316600483015283166024820152604401610c27565b600580546fffffffffffffffff00000000000000001916600160401b6001600160401b038516908102919091179091556040519081527fb600f3cf7f38a4b49bb0c75f722ef69f7e3e39ef3bb4aa8207fd86e724a2324990602001611088565b60006001600160e01b03198216630111a9b760e11b148015906122e557506001600160e01b0319821663ab750e7560e01b14155b801561092c57506001600160e01b0319821663704316e560e01b141592915050565b600080600083516041036123415760208401516040850151606086015160001a612333888285856125c8565b95509550955050505061234d565b50508151600091506002905b9250925092565b600060008051602061354b83398151915283148015612378575061237883836110c0565b156123c2576001805460159061239d90600160a81b90046001600160401b03166134e7565b91906101000a8154816001600160401b0302191690836001600160401b031602179055505b61207e8383612697565b6123d682826110c0565b610a4d5760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401610c27565b6001600160a01b03821661242c576040516306b7a93160e41b815260040160405180910390fd5b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612479576040519150601f19603f3d011682016040523d82523d6000602084013e61247e565b606091505b5050905080611f6757604051631196f20d60e21b81526001600160a01b038416600482015260248101839052604401610c27565b6001600160a01b0382166124d9576040516306b7a93160e41b815260040160405180910390fd5b611f676001600160a01b0384168383612702565b60015460ff16156125115760405163d93c066560e01b815260040160405180910390fd5b565b60015460ff1661251157604051638dfc202b60e01b815260040160405180910390fd5b600061254283836110c0565b6125c0576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556125783390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161092c565b50600061092c565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115612603575060009150600390508261268d565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015612657573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166126835750600092506001915082905061268d565b9250600091508190505b9450945094915050565b60006126a383836110c0565b156125c0576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161092c565b604080516001600160a01b03841660248201526044808201849052825180830390910181526064909101909152602080820180516001600160e01b031663a9059cbb60e01b1781528251611f67938793909260009283929183919082885af180612772576040513d6000823e3d81fd5b50506000513d9150811561278a578060011415612797565b6001600160a01b0384163b155b156108f557604051635274afe760e01b81526001600160a01b0385166004820152602401610c27565b82805482825590600052602060002090601f016020900481019282156128595791602002820160005b8382111561282a57833560ff1683826101000a81548160ff021916908360ff16021790555092602001926001016020816000010492830192600103026127e9565b80156128575782816101000a81549060ff021916905560010160208160000104928301926001030261282a565b505b50612865929150612869565b5090565b5b80821115612865576000815560010161286a565b6001600160a01b03811681146110bd57600080fd5b6000806000606084860312156128a857600080fd5b83356128b38161287e565b925060208401356128c38161287e565b929592945050506040919091013590565b6000602082840312156128e657600080fd5b81356001600160e01b0319811681146128fe57600080fd5b9392505050565b80358015158114610b6057600080fd5b60006020828403121561292757600080fd5b6128fe82612905565b60006020828403121561294257600080fd5b5035919050565b803563ffffffff81168114610b6057600080fd5b60006020828403121561296f57600080fd5b6128fe82612949565b6020808252825182820181905260009190848201906040850190845b818110156129b357835160ff1683529284019291840191600101612994565b50909695505050505050565b6000602082840312156129d157600080fd5b81356128fe8161287e565b600080604083850312156129ef57600080fd5b823591506020830135612a018161287e565b809150509250929050565b80356001600160401b0381168114610b6057600080fd5b60008083601f840112612a3557600080fd5b5081356001600160401b03811115612a4c57600080fd5b602083019150836020828501011115612a6457600080fd5b9250929050565b600080600080600060808688031215612a8357600080fd5b612a8c86612949565b9450612a9a60208701612a0c565b93506040860135612aaa8161287e565b925060608601356001600160401b03811115612ac557600080fd5b612ad188828901612a23565b969995985093965092949392505050565b60008060408385031215612af557600080fd5b8235612b008161287e565b9150612b0e60208401612905565b90509250929050565b60008060208385031215612b2a57600080fd5b82356001600160401b0380821115612b4157600080fd5b818501915085601f830112612b5557600080fd5b813581811115612b6457600080fd5b8660208260071b8501011115612b7957600080fd5b60209290920196919550909350505050565b803561ffff81168114610b6057600080fd5b60008060008060808587031215612bb357600080fd5b612bbc85612b8b565b9350612bca60208601612b8b565b9250612bd860408601612a0c565b91506060850135612be88161287e565b939692955090935050565b600060208284031215612c0557600080fd5b6128fe82612a0c565b600060a08284031215612c2057600080fd5b50919050565b600080600060408486031215612c3b57600080fd5b83356001600160401b0380821115612c5257600080fd5b612c5e87838801612c0e565b94506020860135915080821115612c7457600080fd5b50612c8186828701612a23565b9497909650939450505050565b60008083601f840112612ca057600080fd5b5081356001600160401b03811115612cb757600080fd5b6020830191508360208260051b8501011115612a6457600080fd5b60008060208385031215612ce557600080fd5b82356001600160401b03811115612cfb57600080fd5b612d0785828601612c8e565b90969095509350505050565b600060208284031215612d2557600080fd5b6128fe82612b8b565b600080600060408486031215612d4357600080fd5b8335925060208401356001600160401b03811115612d6057600080fd5b612c8186828701612a23565b634e487b7160e01b600052602160045260246000fd5b82151581526040810160048310612da957634e487b7160e01b600052602160045260246000fd5b8260208301529392505050565b600080600060408486031215612dcb57600080fd5b612dd484612949565b925060208401356001600160401b03811115612def57600080fd5b612c8186828701612c8e565b600080600080600060808688031215612e1357600080fd5b612e1c86612949565b94506020860135612e2c8161287e565b935060408601356001600160401b03811115612e4757600080fd5b612e5388828901612a23565b96999598509660600135949350505050565b600060208284031215612e7757600080fd5b81356001600160401b03811115612e8d57600080fd5b612e9984828501612c0e565b949350505050565b60008060008060008060006080888a031215612ebc57600080fd5b8735612ec78161287e565b965060208801356001600160401b0380821115612ee357600080fd5b612eef8b838c01612a23565b909850965060408a0135915080821115612f0857600080fd5b612f148b838c01612a23565b909650945060608a0135915080821115612f2d57600080fd5b50612f3a8a828b01612a23565b989b979a50959850939692959293505050565b60018060a01b0380825116835263ffffffff602083015116602084015260408201516001600160401b03808216604086015282606085015116606086015280608085015116608086015250505061ffff60a08201511660a08301525050565b546001600160401b0381168252604081811c61ffff16602084015260509190911c6001600160801b0316910152565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60006101406130138388612f4d565b61302060c0840187612fac565b8061012084015261101b8184018587612fdb565b60006020828403121561304657600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b80356001600160801b0381168114610b6057600080fd5b60006020828403121561308c57600080fd5b6128fe82613063565b6020808252818101839052600090604080840186845b8781101561311c5763ffffffff6130c183612949565b1683526001600160401b036130d7868401612a0c565b168584015261ffff6130ea858401612b8b565b168484015260606001600160801b03613104828501613063565b169084015260809283019291909101906001016130ab565b5090979650505050505050565b6000815180845260005b8181101561314f57602081850181015186830182015201613133565b506000602082860101526020601f19601f83011685010191505092915050565b600061014061317e8387612f4d565b61318b60c0840186612fac565b8061012084015261319e81840185613129565b9695505050505050565b60008235609e198336030181126131be57600080fd5b9190910192915050565b6000808335601e198436030181126131df57600080fd5b8301803591506001600160401b038211156131f957600080fd5b602001915036819003821315612a6457600080fd5b6001600160e01b031981358181169160048510156132365780818660040360031b1b83161692505b505092915050565b6000808335601e1984360301811261325557600080fd5b83016020810192503590506001600160401b0381111561327457600080fd5b803603821315612a6457600080fd5b6040815263ffffffff61329584612949565b166040820152600060208401356132ab8161287e565b6001600160a01b031660608301526132c6604085018561323e565b60a060808501526132db60e085018284612fdb565b915050606085013560a08401526132f5608086018661323e565b848303603f190160c086015261330c838284612fdb565b93505050508260208301529392505050565b8183823760009101908152919050565b828152604060208201526000612e996040830184613129565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761092c5761092c613347565b8082018082111561092c5761092c613347565b6000808585111561339757600080fd5b838611156133a457600080fd5b5050820193919092039150565b63ffffffff60e01b8660e01b1681526bffffffffffffffffffffffff198560601b1660048201528360188201528183603883013760009101603801908152949350505050565b600061012060018060a01b03808a511684528060208b0151166020850152506001600160401b0360408a015116604084015261ffff60608a01511660608401526134446080840189612fac565b8060e08401526134578184018789612fdb565b905082810361010084015261346d818587612fdb565b9998505050505050505050565b60006001600160401b0380831681810361349657613496613347565b6001019392505050565b6001600160401b038281168282160390808211156134c0576134c0613347565b5092915050565b6001600160401b038181168382160190808211156134c0576134c0613347565b60006001600160401b0382168061350057613500613347565b600019019291505056fe724aface199fe5bed93ae8508474576a9adf3dc443b2c451842a2242919f19dea49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177574845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bcaa264697066735822122024327161ffb7d62bcb3e3b78be45b9ccbc1a11373295fe0f97bd10b71bcadb8164736f6c6343000816003360c06040523480156200001157600080fd5b5060405162001eb638038062001eb68339810160408190526200003491620000cb565b33806200005b57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b62000066816200007b565b5063ffffffff90911660a05260805262000104565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008060408385031215620000df57600080fd5b825163ffffffff81168114620000f457600080fd5b6020939093015192949293505050565b60805160a051611d7e620001386000396000818161069001526106ff0152600081816107cd0152610ab80152611d7e6000f3fe6080604052600436106100ec5760003560e01c80638da5cb5b1161008a578063de0a93c311610059578063de0a93c3146102f7578063df2b057e1461033d578063f2fde38b14610350578063f5ff608f1461037057600080fd5b80638da5cb5b1461027c5780639ac23d28146102a4578063bbc5a33b146102c4578063d358b300146102d757600080fd5b806339f26dfc116100c657806339f26dfc1461020657806354fd4d5014610226578063715018a6146102475780637bfa20a91461025c57600080fd5b806301e33667146100f857806310b65f761461011a5780632565c2451461016057600080fd5b366100f357005b600080fd5b34801561010457600080fd5b506101186101133660046115c3565b610390565b005b34801561012657600080fd5b5061014d610135366004611611565b63ffffffff1660009081526001602052604090205490565b6040519081526020015b60405180910390f35b34801561016c57600080fd5b506101c761017b366004611611565b60036020526000908152604090205463ffffffff808216916001600160401b036401000000008204811692600160601b830490911691600160a01b8104821691600160c01b9091041685565b6040805163ffffffff96871681526001600160401b0395861660208201529390941693830193909352831660608201529116608082015260a001610157565b34801561021257600080fd5b5061011861022136600461165e565b6103a8565b34801561023257600080fd5b50604080516001808252602082015201610157565b34801561025357600080fd5b506101186103fa565b34801561026857600080fd5b5061014d610277366004611701565b61040e565b34801561028857600080fd5b506000546040516001600160a01b039091168152602001610157565b3480156102b057600080fd5b506101186102bf36600461176c565b61059b565b61014d6102d2366004611833565b610642565b3480156102e357600080fd5b5061014d6102f2366004611833565b61065d565b34801561030357600080fd5b50600254604080516001600160781b038084168252600160781b8404166020820152600160f01b90920461ffff1690820152606001610157565b61014d61034b366004611701565b610857565b34801561035c57600080fd5b5061011861036b3660046118ce565b61086e565b34801561037c57600080fd5b5061011861038b3660046118e9565b6108ac565b610398610929565b6103a3838383610956565b505050565b6103b0610929565b6002805461ffff909216600160f01b026001600160f01b036001600160781b03948516600160781b026001600160f01b031990941694909516939093179190911792909216179055565b610402610929565b61040c6000610979565b565b600061041d6020850185611972565b6001600160401b03166000036104645761043d6040860160208701611611565b60405163680489c560e11b815263ffffffff90911660048201526024015b60405180910390fd5b61046e83836109c9565b50600061049261048460a0880160808901611972565b6001600160401b0316610a3b565b90506000806104a460208901896118ce565b6001600160a01b03166388a4124c6104c260408b0160208c01611611565b856104d060208c018c611972565b6040516001600160e01b031960e086901b16815263ffffffff93909316600484015260248301919091526001600160401b03166044820152606401608060405180830381865afa158015610528573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061054c91906119a4565b93505050915061058f8288602001602081019061056991906119f9565b61057960c08c0160a08d016119f9565b61058960608c0160408d01611a14565b85610a49565b98975050505050505050565b6105a3610929565b8281146105c3576040516316a9d98760e31b815260040160405180910390fd5b60005b8381101561063b578282828181106105e0576105e0611a31565b905060a00201600360008787858181106105fc576105fc611a31565b90506020020160208101906106119190611611565b63ffffffff16815260208101919091526040016000206106318282611a54565b50506001016105c6565b5050505050565b600061065287878787878761065d565b979650505050505050565b600061066c6020870187611972565b6001600160401b03166000036106bd5760405163680489c560e11b815263ffffffff7f000000000000000000000000000000000000000000000000000000000000000016600482015260240161045b565b6106c783836109c9565b5060006106dd61048460608a0160408b01611972565b90506000806106ef60208b018b6118ce565b6001600160a01b03166388a4124c7f00000000000000000000000000000000000000000000000000000000000000008561072c60208e018e611972565b6040516001600160e01b031960e086901b16815263ffffffff93909316600484015260248301919091526001600160401b03166044820152606401608060405180830381865afa158015610784573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107a891906119a4565b93505050915060006107ba8989610b1d565b905060006001600160801b0383166107f27f000000000000000000000000000000000000000000000000000000000000000084611b65565b6107fc9190611b92565b905061084761080b8286611ba6565b61081b60408e0160208f016119f9565b8e606001602081019061082e91906119f9565b8e60400160208101906108419190611a14565b87610a49565b9c9b505050505050505050505050565b60006108658585858561040e565b95945050505050565b610876610929565b6001600160a01b0381166108a057604051631e4fbdf760e01b81526000600482015260240161045b565b6108a981610979565b50565b6108b4610929565b60005b818110156103a3578282828181106108d1576108d1611a31565b90506040020160200135600160000160008585858181106108f4576108f4611a31565b61090a9260206040909202019081019150611611565b63ffffffff1681526020810191909152604001600020556001016108b7565b6000546001600160a01b0316331461040c5760405163118cdaa760e01b815233600482015260240161045b565b6001600160a01b03831661096e576103a38282610bc7565b6103a3838383610c74565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000808215610a0c576000806109e0868685610caf565b604051637085244b60e01b815260ff85166004820152909650929450859350506024909101905061045b565b808314610a2f5760405163013adb8360e21b81526004810182905260240161045b565b60009150505b92915050565b6000610a3582610120610d09565b60008061ffff861615610a5c5785610a5e565b845b90506000612710610a7361ffff84168a611b65565b610a7d9190611b92565b90506001600160801b0384161580610a9c57506001600160801b038516155b15610aaa5791506108659050565b6000846001600160801b03167f0000000000000000000000000000000000000000000000000000000000000000876001600160801b0316610aeb9190611b65565b610af59190611b92565b610aff908a611ba6565b9050818111610b0e5781610b10565b805b9998505050505050505050565b600080610b2d8484610d6e610f31565b6002548151919250610b4e916001600160781b039091169061ffff16611bb9565b6001600160781b03169150806020015115610b965760025461271090610b7f90600160f01b900461ffff1684611b65565b610b899190611b92565b610b939083611ba6565b91505b806040015115610bc057600254610bbd90600160781b90046001600160781b031683611ba6565b91505b5092915050565b6001600160a01b038216610bee576040516306b7a93160e41b815260040160405180910390fd5b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114610c3b576040519150601f19603f3d011682016040523d82523d6000602084013e610c40565b606091505b50509050806103a357604051631196f20d60e21b81526001600160a01b03841660048201526024810183905260440161045b565b6001600160a01b038216610c9b576040516306b7a93160e41b815260040160405180910390fd5b6103a36001600160a01b0384168383611433565b600036816001840181610cc3888884611485565b6002830192909150610cdb90899089906003016114ac565b94506002820161ffff82168301610cf481838b8d611be4565b979b909a50969850505061ffff160193505050565b600080610d17604185611b65565b9050610d24602082611c0e565b15610d4c57610d34602082611c0e565b610d3e9082611c22565b610d49906020611ba6565b90505b80610d5984610104611ba6565b610d639190611ba6565b610bbd906020611ba6565b610d7a600185836114d1565b610d8760018560026114f9565b15610f2b5763ffffffff808516600090815260036020908152604091829020825160a081018452905480851682526001600160401b036401000000008204811693830193909352600160601b810490921692810192909252600160a01b810483166060830152600160c01b90049091166080820152828415610eab5781602001516001600160401b0316846001600160401b03161115610e6757815160208301516103e89163ffffffff1690610e3d9087611c35565b610e479190611c55565b610e519190611c78565b8260400151610e609190611c9e565b9050610eab565b6103e8826000015163ffffffff16858460200151610e859190611c35565b610e8f9190611c55565b610e999190611c78565b8260400151610ea89190611c35565b90505b42826060015163ffffffff1682610ec29190611c9e565b6001600160401b03161080610ef357506080820151610ee79063ffffffff1642611ba6565b816001600160401b0316115b15610f2857604051630c5a8d2360e01b815263ffffffff871660048201526001600160401b038216602482015260440161045b565b50505b50505050565b604080516060810182526000808252602082018190529181018290529080858186610f5d826002611ba6565b92610f6a93929190611be4565b610f7391611cbe565b60f01c9050610f83600283611ba6565b915061ffff8116600114610faa5760405163a9146eeb60e01b815260040160405180910390fd5b610fb5600283611ba6565b91506000868387610fc7826002611ba6565b92610fd493929190611be4565b610fdd91611cbe565b60f01c9050610fed600284611ba6565b92508061ffff16600003611014576040516387a7f37960e01b815260040160405180910390fd5b61ffff1683525060005b826000015161ffff168161ffff16101561121d57600086868481811061104657611046611a31565b919091013560f81c915061105d9050600184611ba6565b925060ff81166001146110835760405163a9146eeb60e01b815260040160405180910390fd5b61108e600284611ba6565b925060008784886110a0826002611ba6565b926110ad93929190611be4565b6110b691611cbe565b60f01c90506110c6600285611ba6565b935060001961ffff8216016111fa5760008885896110e5826002611ba6565b926110f293929190611be4565b6110fb91611cbe565b60f01c905061110b600286611ba6565b94508460008a828b61111e826004611ba6565b9261112b93929190611be4565b61113491611cec565b60e01c9050611144600483611ba6565b915060008b8b8481811061115a5761115a611a31565b600192013560f81c8214925061117291905084611ba6565b925060008c848d611184826008611ba6565b9261119193929190611be4565b61119a91611d1a565b60c01c90506111b083838360008f63ffffffff16565b508a92506111c591505061ffff831687611ba6565b11156111e4576040516387a7f37960e01b815260040160405180910390fd5b6111f261ffff821686611ba6565b945050611213565b60405163b968846160e01b815260040160405180910390fd5b505060010161101e565b508381101561140b57600085858381811061123a5761123a611a31565b919091013560f81c91506112519050600183611ba6565b915060ff81166001146112775760405163a9146eeb60e01b815260040160405180910390fd5b6000868387611287826002611ba6565b9261129493929190611be4565b61129d91611cbe565b60f01c90506112ad600284611ba6565b925061ffff81166001146112d45760405163b968846160e01b815260040160405180910390fd5b60008787858181106112e8576112e8611a31565b919091013560f81c91506112ff9050600185611ba6565b935060ff81166113155760016020860152611348565b60001960ff82160161132d5760016040860152611348565b60011960ff8216016111fa5760016020860181905260408601525b6000888589611358826004611ba6565b9261136593929190611be4565b61136e91611cec565b60e01c905061137e600486611ba6565b9450600089898781811061139457611394611a31565b600192013560f81c821492506113ac91905087611ba6565b955060008a878b6113be826008611ba6565b926113cb93929190611be4565b6113d491611d1a565b60c01c90506113e4600888611ba6565b96506113f783838360018d63ffffffff16565b611402601688611ba6565b96505050505050505b80841461142b576040516387a7f37960e01b815260040160405180910390fd5b509392505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526103a3908490611527565b60006002820161149781848688611be4565b6114a091611cbe565b60f01c95945050505050565b60008383838181106114c0576114c0611a31565b919091013560f81c95945050505050565b6114dc8383836114f9565b6103a3576040516350fae9eb60e01b815260040160405180910390fd5b63ffffffff808316600090815260208590526040812054909161151f9190849061159816565b949350505050565b600080602060008451602086016000885af18061154a576040513d6000823e3d81fd5b50506000513d9150811561156257806001141561156f565b6001600160a01b0384163b155b15610f2b57604051635274afe760e01b81526001600160a01b038516600482015260240161045b565b600160ff919091161b16151590565b80356001600160a01b03811681146115be57600080fd5b919050565b6000806000606084860312156115d857600080fd5b6115e1846115a7565b92506115ef602085016115a7565b9150604084013590509250925092565b63ffffffff811681146108a957600080fd5b60006020828403121561162357600080fd5b813561162e816115ff565b9392505050565b80356001600160781b03811681146115be57600080fd5b803561ffff811681146115be57600080fd5b60008060006060848603121561167357600080fd5b61167c84611635565b925061168a60208501611635565b91506116986040850161164c565b90509250925092565b6000606082840312156116b357600080fd5b50919050565b60008083601f8401126116cb57600080fd5b5081356001600160401b038111156116e257600080fd5b6020830191508360208285010111156116fa57600080fd5b9250929050565b60008060008084860361014081121561171957600080fd5b60c081121561172757600080fd5b508493506117388660c087016116a1565b92506101208501356001600160401b0381111561175457600080fd5b611760878288016116b9565b95989497509550505050565b6000806000806040858703121561178257600080fd5b84356001600160401b038082111561179957600080fd5b818701915087601f8301126117ad57600080fd5b8135818111156117bc57600080fd5b8860208260051b85010111156117d157600080fd5b6020928301965094509086013590808211156117ec57600080fd5b818701915087601f83011261180057600080fd5b81358181111561180f57600080fd5b88602060a08302850101111561182457600080fd5b95989497505060200194505050565b60008060008060008086880361012081121561184e57600080fd5b608081121561185c57600080fd5b5086955061186d88608089016116a1565b945060e08701356001600160401b038082111561188957600080fd5b6118958a838b016116b9565b90965094506101008901359150808211156118af57600080fd5b506118bc89828a016116b9565b979a9699509497509295939492505050565b6000602082840312156118e057600080fd5b61162e826115a7565b600080602083850312156118fc57600080fd5b82356001600160401b038082111561191357600080fd5b818501915085601f83011261192757600080fd5b81358181111561193657600080fd5b8660208260061b850101111561194b57600080fd5b60209290920196919550909350505050565b6001600160401b03811681146108a957600080fd5b60006020828403121561198457600080fd5b813561162e8161195d565b6001600160801b03811681146108a957600080fd5b600080600080608085870312156119ba57600080fd5b8451935060208501516119cc8161198f565b60408601519093506119dd8161198f565b60608601519092506119ee8161198f565b939692955090935050565b600060208284031215611a0b57600080fd5b61162e8261164c565b600060208284031215611a2657600080fd5b813561162e8161198f565b634e487b7160e01b600052603260045260246000fd5b60008135610a35816115ff565b8135611a5f816115ff565b63ffffffff8116905081548163ffffffff1982161783556020840135611a848161195d565b6bffffffffffffffff000000008160201b16905080836bffffffffffffffffffffffff198416171784556040850135611abc8161195d565b67ffffffffffffffff60601b606091821b166001600160a01b03199390931693909317808217831785559285013591611af4836115ff565b63ffffffff60a01b1993909316179190911760a09190911b63ffffffff60a01b16178155611b4b611b2760808401611a47565b82805463ffffffff60c01b191660c09290921b63ffffffff60c01b16919091179055565b5050565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610a3557610a35611b4f565b634e487b7160e01b600052601260045260246000fd5b600082611ba157611ba1611b7c565b500490565b80820180821115610a3557610a35611b4f565b6001600160781b03818116838216028082169190828114611bdc57611bdc611b4f565b505092915050565b60008085851115611bf457600080fd5b83861115611c0157600080fd5b5050820193919092039150565b600082611c1d57611c1d611b7c565b500690565b81810381811115610a3557610a35611b4f565b6001600160401b03828116828216039080821115610bc057610bc0611b4f565b6001600160401b03818116838216028082169190828114611bdc57611bdc611b4f565b60006001600160401b0380841680611c9257611c92611b7c565b92169190910492915050565b6001600160401b03818116838216019080821115610bc057610bc0611b4f565b6001600160f01b03198135818116916002851015611bdc5760029490940360031b84901b1690921692915050565b6001600160e01b03198135818116916004851015611bdc5760049490940360031b84901b1690921692915050565b6001600160c01b03198135818116916008851015611bdc5760089490940360031b84901b169092169291505056fea2646970667358221220d34b7cf3109d1a09d2ef9d6586b9648c558d96c099d9868a56aea4afa7c4f88e64736f6c6343000816003360e06040523480156200001157600080fd5b506040516200191f3803806200191f833981016040819052620000349162000179565b33806200005b57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b620000668162000110565b50600180546001600160a01b0319166001600160a01b038481169190911790915581166080819052600060a0526040805163416ecebf60e01b8152905163416ecebf916004808201926020929091908290030181865afa158015620000cf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000f59190620001b8565b63ffffffff1660c052505060636003556064600455620001e7565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146200017657600080fd5b50565b600080604083850312156200018d57600080fd5b82516200019a8162000160565b6020840151909250620001ad8162000160565b809150509250929050565b600060208284031215620001cb57600080fd5b815163ffffffff81168114620001e057600080fd5b9392505050565b60805160a05160c0516116ec62000233600039600061038c015260006102fb0152600081816102c7015281816105d6015281816106df015281816108e50152610aa101526116ec6000f3fe60806040526004361061014f5760003560e01c8063715018a6116100b6578063996f79c01161006f578063996f79c014610447578063aec336e61461045d578063d80e9bd91461047d578063dabca063146104aa578063f2fde38b146104ca578063fd9be522146104ea57610156565b8063715018a614610365578063726075371461037a57806372d71322146103c35780638da5cb5b146103e55780638f58aa7a14610403578063909532381461042357610156565b80634389e58f116101085780634389e58f1461025a57806354fd4d50146102895780635e280f11146102b557806361d027b3146102e95780636251b6371461031d5780636750cd4c1461034457610156565b806301ffc9a71461016f5780630e97289b146101a457806312cc947f146101dc5780631881d94d146101fe5780631c7c294e1461021a578063334993ff1461023a57610156565b3661015657005b604051632657b6c360e01b815260040160405180910390fd5b34801561017b57600080fd5b5061018f61018a366004610ee3565b61050a565b60405190151581526020015b60405180910390f35b3480156101b057600080fd5b506001546101c4906001600160a01b031681565b6040516001600160a01b03909116815260200161019b565b3480156101e857600080fd5b506101fc6101f7366004610f4e565b610541565b005b34801561020a57600080fd5b50600260405161019b9190610f8f565b34801561022657600080fd5b506002546101c4906001600160a01b031681565b34801561024657600080fd5b506101fc610255366004610fb7565b6106b3565b34801561026657600080fd5b5061027a6102753660046110d0565b6106c6565b60405161019b93929190611193565b34801561029557600080fd5b50604080516000808252602082015260029181019190915260600161019b565b3480156102c157600080fd5b506101c47f000000000000000000000000000000000000000000000000000000000000000081565b3480156102f557600080fd5b506101c47f000000000000000000000000000000000000000000000000000000000000000081565b34801561032957600080fd5b50610332600181565b60405160ff909116815260200161019b565b34801561035057600080fd5b5061018f61035f3660046111e7565b50600190565b34801561037157600080fd5b506101fc610810565b34801561038657600080fd5b506103ae7f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff909116815260200161019b565b3480156103cf57600080fd5b506103d8610824565b60405161019b9190611202565b3480156103f157600080fd5b506000546001600160a01b03166101c4565b34801561040f57600080fd5b506101fc61041e366004611235565b6108b2565b34801561042f57600080fd5b5061043960035481565b60405190815260200161019b565b34801561045357600080fd5b5061043960045481565b34801561046957600080fd5b506101fc610478366004611261565b6109a7565b34801561048957600080fd5b5061049d61049836600461127e565b6109d1565b60405161019b91906112f8565b3480156104b657600080fd5b506101fc6104c536600461130f565b610a13565b3480156104d657600080fd5b506101fc6104e5366004611261565b610a2b565b3480156104f657600080fd5b506101fc610505366004611235565b610a6e565b60006001600160e01b031982166325fc096160e21b148061053b57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6002546001600160a01b03161580159061056657506002546001600160a01b03163314155b1561058457604051631c2c85bb60e21b815260040160405180910390fd5b6000604051806060016040528061059b8585610b2e565b63ffffffff1681526020016105b08585610b51565b81526020016105bf8585610b71565b6001600160401b0316905290506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663a825d747826106068686610b94565b6106108787610ba6565b60405161061e92919061134b565b6040805191829003822060e086901b6001600160e01b0319168352845163ffffffff166004840152602085015160248401529301516001600160401b031660448201526001600160a01b039091166064820152608481019190915260a401600060405180830381600087803b15801561069657600080fd5b505af11580156106aa573d6000803e3d6000fd5b50505050505050565b6106bb610bc2565b600491909155600355565b60408051808201909152600080825260208201526060807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316331461072657604051630fd72cd960e31b815260040160405180910390fd5b61073761073287611372565b610bef565b9150845160001461074857846107d4565b600580546107559061140f565b80601f01602080910402602001604051908101604052809291908181526020018280546107819061140f565b80156107ce5780601f106107a3576101008083540402835291602001916107ce565b820191906000526020600020905b8154815290600101906020018083116107b157829003601f168201915b50505050505b90506107e08282610c47565b60405180604001604052806004548152602001856107ff576000610803565b6003545b9052969195509350915050565b610818610bc2565b6108226000610caf565b565b600580546108319061140f565b80601f016020809104026020016040519081016040528092919081815260200182805461085d9061140f565b80156108aa5780601f1061087f576101008083540402835291602001916108aa565b820191906000526020600020905b81548152906001019060200180831161088d57829003601f168201915b505050505081565b6108ba610bc2565b6001600160a01b0382166108e157604051633d3496e160e01b815260040160405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e4fe1d946040518163ffffffff1660e01b8152600401602060405180830381865afa158015610941573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109659190611443565b90506001600160a01b03811661098e576040516354c1781b60e01b815260040160405180910390fd5b6109a26001600160a01b0382168484610cff565b505050565b6109af610bc2565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b60408051808201909152600080825260208201526040518060400160405280600454815260200183610a04576000610a08565b6003545b905295945050505050565b610a1b610bc2565b6005610a2782826114a8565b5050565b610a33610bc2565b6001600160a01b038116610a6257604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b610a6b81610caf565b50565b610a76610bc2565b6001600160a01b038216610a9d57604051633d3496e160e01b815260040160405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e1758bd86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610afd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b219190611443565b90506109a2818484610d51565b6000610b3e600d60098486611567565b610b4791611591565b60e01c9392505050565b6000610b61602d600d8486611567565b610b6a916115c1565b9392505050565b6000610b81600960018486611567565b610b8a916115df565b60c01c9392505050565b6000610b6a610ba38484610d74565b90565b366000610bb68360518187611567565b915091505b9250929050565b6000546001600160a01b031633146108225760405163118cdaa760e01b8152336004820152602401610a59565b8051602080830151604080850151606080870151608088015160a089015160c08a015195519398610c3198600198919791966001600160a01b0316950161160d565b6040516020818303038152906040529050919050565b600154604051631f5dad8b60e31b81526001600160a01b039091169063faed6c5890610c799085908590600401611688565b600060405180830381600087803b158015610c9357600080fd5b505af1158015610ca7573d6000803e3d6000fd5b505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526109a2908490610d84565b6001600160a01b038316610d69576109a28282610dfb565b6109a2838383610ea8565b6000610b61605160318486611567565b600080602060008451602086016000885af180610da7576040513d6000823e3d81fd5b50506000513d91508115610dbf578060011415610dcc565b6001600160a01b0384163b155b15610df557604051635274afe760e01b81526001600160a01b0385166004820152602401610a59565b50505050565b6001600160a01b038216610e22576040516306b7a93160e41b815260040160405180910390fd5b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114610e6f576040519150601f19603f3d011682016040523d82523d6000602084013e610e74565b606091505b50509050806109a257604051631196f20d60e21b81526001600160a01b038416600482015260248101839052604401610a59565b6001600160a01b038216610ecf576040516306b7a93160e41b815260040160405180910390fd5b6109a26001600160a01b0384168383610cff565b600060208284031215610ef557600080fd5b81356001600160e01b031981168114610b6a57600080fd5b60008083601f840112610f1f57600080fd5b5081356001600160401b03811115610f3657600080fd5b602083019150836020828501011115610bbb57600080fd5b60008060208385031215610f6157600080fd5b82356001600160401b03811115610f7757600080fd5b610f8385828601610f0d565b90969095509350505050565b6020810160038310610fb157634e487b7160e01b600052602160045260246000fd5b91905290565b60008060408385031215610fca57600080fd5b50508035926020909101359150565b600060e08284031215610feb57600080fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b60405160e081016001600160401b038111828210171561102957611029610ff1565b60405290565b600082601f83011261104057600080fd5b81356001600160401b038082111561105a5761105a610ff1565b604051601f8301601f19908116603f0116810190828211818310171561108257611082610ff1565b8160405283815286602085880101111561109b57600080fd5b836020870160208301376000602085830101528094505050505092915050565b803580151581146110cb57600080fd5b919050565b6000806000606084860312156110e557600080fd5b83356001600160401b03808211156110fc57600080fd5b61110887838801610fd9565b9450602086013591508082111561111e57600080fd5b5061112b8682870161102f565b92505061113a604085016110bb565b90509250925092565b60005b8381101561115e578181015183820152602001611146565b50506000910152565b6000815180845261117f816020860160208601611143565b601f01601f19169290920160200192915050565b83518152602080850151908201526080604082015260006111b76080830185611167565b82810360608401526111c98185611167565b9695505050505050565b803563ffffffff811681146110cb57600080fd5b6000602082840312156111f957600080fd5b610b6a826111d3565b602081526000610b6a6020830184611167565b6001600160a01b0381168114610a6b57600080fd5b80356110cb81611215565b6000806040838503121561124857600080fd5b823561125381611215565b946020939093013593505050565b60006020828403121561127357600080fd5b8135610b6a81611215565b6000806000806060858703121561129457600080fd5b84356001600160401b03808211156112ab57600080fd5b6112b788838901610fd9565b955060208701359150808211156112cd57600080fd5b506112da87828801610f0d565b90945092506112ed9050604086016110bb565b905092959194509250565b81518152602080830151908201526040810161053b565b60006020828403121561132157600080fd5b81356001600160401b0381111561133757600080fd5b6113438482850161102f565b949350505050565b8183823760009101908152919050565b80356001600160401b03811681146110cb57600080fd5b600060e0823603121561138457600080fd5b61138c611007565b6113958361135b565b81526113a3602084016111d3565b60208201526113b46040840161122a565b60408201526113c5606084016111d3565b60608201526080830135608082015260a083013560a082015260c08301356001600160401b038111156113f757600080fd5b6114033682860161102f565b60c08301525092915050565b600181811c9082168061142357607f821691505b602082108103610feb57634e487b7160e01b600052602260045260246000fd5b60006020828403121561145557600080fd5b8151610b6a81611215565b601f8211156109a2576000816000526020600020601f850160051c810160208610156114895750805b601f850160051c820191505b81811015610ca757828155600101611495565b81516001600160401b038111156114c1576114c1610ff1565b6114d5816114cf845461140f565b84611460565b602080601f83116001811461150a57600084156114f25750858301515b600019600386901b1c1916600185901b178555610ca7565b600085815260208120601f198616915b828110156115395788860151825594840194600190910190840161151a565b50858210156115575787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000808585111561157757600080fd5b8386111561158457600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156115b95780818660040360031b1b83161692505b505092915050565b8035602083101561053b57600019602084900360031b1b1692915050565b6001600160c01b031981358181169160088510156115b95760089490940360031b84901b1690921692915050565b60ff60f81b8960f81b1681526001600160401b0360c01b8860c01b166001820152600063ffffffff60e01b808960e01b16600984015287600d840152808760e01b16602d840152508460318301528360518301528251611674816071850160208701611143565b919091016071019998505050505050505050565b60408152600061169b6040830185611167565b82810360208401526116ad8185611167565b9594505050505056fea2646970667358221220c3e86e5a7f47955117c968f35183229c2a822980b5af2d2973f411f36b4f38a564736f6c63430008160033608060405234801561001057600080fd5b506107d2806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063e5c5e9a314610030575b600080fd5b61004361003e366004610529565b61005a565b6040516100519291906105eb565b60405180910390f35b6060806100678484610072565b915091509250929050565b606080600283101561009f5760405163196499c760e21b8152600060048201526024015b60405180910390fd5b60006100ae6002828688610619565b6100b791610643565b60f01c90506002600219820161021f578060005b868310156101c45760006100e460018501858a8c610619565b6100ed91610673565b60f81c9050600081900361011757604051636780cfaf60e01b815260006004820152602401610096565b8160ff1660000361012a57809150610167565b8160ff168160ff16146101675736600061014686868c8e610619565b915091506101578989868585610236565b9099509750859450919250829150505b600184019360009061017e90600301868b8d610619565b61018791610643565b60f01c905060008190036101b15760405163196499c760e21b815260048101869052602401610096565b8060020161ffff168501945050506100cb565b8287146101e75760405163196499c760e21b815260048101849052602401610096565b6002871115610218573660006101ff85858b8d610619565b915091506102108888858585610236565b909850965050505b505061022d565b61022a828787610356565b93505b50509250929050565b60608060001960ff8616016102b35786511561027557868484604051602001610261939291906106a1565b6040516020818303038152906040526102ac565b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050505b965061034b565b60011960ff86160161032d578551156102ef578584846040516020016102db939291906106a1565b604051602081830303815290604052610326565b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050505b955061034b565b604051636780cfaf60e01b815260ff86166004820152602401610096565b509495939450505050565b606060001961ffff8516016103f65760228214610386576040516301b8ca5560e31b815260040160405180910390fd5b60006103a7610399602260028688610619565b6103a2916106c9565b6104e8565b604051600160f81b60208201819052601160f01b602183015260238201526001600160801b0319608083901b1660248201529091506034016040516020818303038152906040529150506104e1565b60011961ffff8516016104c2576042821115806104135750606282115b15610431576040516360493e2b60e11b815260040160405180910390fd5b6000610444610399602260028688610619565b90506000610459610399604260228789610619565b90506000604119850161046f866042818a610619565b610478916106c9565b60405160086020938403029190911c92506104a9916001916011918391889183916031916002918b918b91016106e8565b60405160208183030381529060405293505050506104e1565b604051630417051360e41b815261ffff85166004820152602401610096565b9392505050565b60006fffffffffffffffffffffffffffffffff821115610525576040516306dfcc6560e41b81526080600482015260248101839052604401610096565b5090565b6000806020838503121561053c57600080fd5b823567ffffffffffffffff8082111561055457600080fd5b818501915085601f83011261056857600080fd5b81358181111561057757600080fd5b86602082850101111561058957600080fd5b60209290920196919550909350505050565b60005b838110156105b657818101518382015260200161059e565b50506000910152565b600081518084526105d781602086016020860161059b565b601f01601f19169290920160200192915050565b6040815260006105fe60408301856105bf565b828103602084015261061081856105bf565b95945050505050565b6000808585111561062957600080fd5b8386111561063657600080fd5b5050820193919092039150565b6001600160f01b0319813581811691600285101561066b5780818660020360031b1b83161692505b505092915050565b6001600160f81b0319813581811691600185101561066b5760019490940360031b84901b1690921692915050565b600084516106b381846020890161059b565b8201838582376000930192835250909392505050565b803560208310156106e257600019602084900360031b1b165b92915050565b60f88a811b6001600160f81b0319908116835260f08b901b6001600160f01b031916600184015289821b81166003840152608089901b6001600160801b03191660048401529087901b1660148201526000610752601583018760f01b6001600160f01b0319169052565b61076b601783018660f81b6001600160f81b0319169052565b610784601883018560801b6001600160801b0319169052565b5060288101919091526048019897505050505050505056fea2646970667358221220994aaf0c18254f983fac2634c8bb3f9ecd3d5348f39af4ed525562428cb6fc4f64736f6c63430008160033a2646970667358221220f816db6b22b5b243c29227006d163edcd50ab724067341f5bdea55a24992a23e64736f6c63430008160033", - "sourceMap": "2890:28294:71:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21149:174;;;;;;;;;;-1:-1:-1;21149:174:71;;;;;:::i;:::-;;:::i;:::-;;23482:633;;;;;;:::i;:::-;;:::i;4800:67::-;;;;;;;;;;;;;:::i;4416:50::-;;;;;;;;;;;;4461:5;4416:50;;;;;3353:6:132;3341:19;;;3323:38;;3311:2;3296:18;4416:50:71;;;;;;;;4297;;;;;;;;;;;;4343:4;4297:50;;;;;3548:32:132;3536:45;;;3518:64;;3506:2;3491:18;4297:50:71;3372:216:132;5226:166:71;;;;;;;;;;-1:-1:-1;5226:166:71;;;;;:::i;:::-;;:::i;2452:134:91:-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;4586:43:71:-;;;;;;;;;;-1:-1:-1;4586:43:71;;;;-1:-1:-1;;;;;4586:43:71;;;;;;-1:-1:-1;;;;;5117:47:132;;;5099:66;;5087:2;5072:18;4586:43:71;4953:218:132;16845:490:71;;;;;;;;;;-1:-1:-1;16845:490:71;;;;;:::i;:::-;;:::i;3360:151:91:-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;25280:469:71:-;;;;;;:::i;:::-;;:::i;3221:133:91:-;;;;;;;;;;;;;:::i;2922:141::-;;;;;;;;;;;;;:::i;5976:204:70:-;;;;;;;;;;-1:-1:-1;5976:204:70;;;;;:::i;:::-;;:::i;:::-;;;;9748:6:132;9736:19;;;9718:38;;-1:-1:-1;;;;;9845:15:132;;;9840:2;9825:18;;9818:43;9897:15;;9877:18;;;9870:43;9706:2;9691:18;5976:204:70;9518:401:132;4530:49:71;;;;;;;;;;;;4574:5;4530:49;;;;;10098:10:132;10086:23;;;10068:42;;10056:2;10041:18;4530:49:71;9924:192:132;30440:228:71;;;;;;;;;;-1:-1:-1;30440:228:71;;;;;:::i;:::-;;:::i;:::-;;;10726:14:132;;10719:22;10701:41;;10689:2;10674:18;30440:228:71;10561:187:132;26061:4058:71;;;;;;;;;;-1:-1:-1;26061:4058:71;;;;;:::i;:::-;;:::i;18447:360::-;;;;;;;;;;-1:-1:-1;18447:360:71;;;;;:::i;:::-;;:::i;2738:178:91:-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;4229:53:71:-;;;;;;;;;;;;4278:4;4229:53;;5349:249:70;;;;;;;;;;-1:-1:-1;5349:249:70;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;17605:528:71:-;;;;;;;;;;-1:-1:-1;17605:528:71;;;;;:::i;:::-;;:::i;30674:338::-;;;;;;;;;;-1:-1:-1;30674:338:71;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;21518:1958::-;;;;;;;;;;-1:-1:-1;21518:1958:71;;;;;:::i;:::-;;:::i;2592:140:91:-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;3069:146::-;;;;;;;;;;;;;:::i;6186:197:70:-;;;;;;;;;;-1:-1:-1;6186:197:70;;;;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;18132:15:132;;;18114:34;;18196:10;18184:23;;;18179:2;18164:18;;18157:51;18244:15;;18224:18;;;18217:43;;;;18049:2;18034:18;6186:197:70;17861:405:132;30125:187:71;;;;;;;;;;-1:-1:-1;30125:187:71;;;;;:::i;:::-;;:::i;24702:376::-;;;;;;:::i;:::-;;:::i;30318:116::-;;;;;;;;;;-1:-1:-1;30318:116:71;;;;;:::i;:::-;;:::i;4166:57::-;;;;;;;;;;;;4217:6;4166:57;;;;;20012:25:132;;;20000:2;19985:18;4166:57:71;19866:177:132;2157:141:91;;;;;;;;;;;;;:::i;20814:147:71:-;;;;;;;;;;-1:-1:-1;20814:147:71;;;;;:::i;:::-;;:::i;4472:52::-;;;;;;;;;;;;4523:1;4472:52;;5786:184:70;;;;;;;;;;-1:-1:-1;5786:184:70;;;;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;20558:47:132;;;20540:66;;20637:2;20622:18;;20615:34;;;;20513:18;5786:184:70;20366:289:132;1819:584:85;;;;;;;;;;;;;:::i;4104:56:71:-;;;;;;;;;;;;4147:13;4104:56;;5621:10886;;;;;;;;;;-1:-1:-1;5621:10886:71;;;;;:::i;:::-;;:::i;5120:100::-;;;;;;;;;;-1:-1:-1;5120:100:71;;;;;:::i;:::-;5185:16;:28;;-1:-1:-1;;;;;;5185:28:71;-1:-1:-1;;;;;5185:28:71;;;;;;;;;;5120:100;2304:142:91;;;;;;;;;;;;;:::i;24121:575:71:-;;;;;;:::i;:::-;;:::i;5604:176:70:-;;;;;;;;;;-1:-1:-1;5604:176:70;;;;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;21892:15:132;;;21874:34;;21944:15;;;;21939:2;21924:18;;21917:43;21794:18;5604:176:70;21647:319:132;1572:26:85;;;;;;;;;;-1:-1:-1;1572:26:85;;;;;;;;19989:464:71;;;;;;;;;;-1:-1:-1;19989:464:71;;;;;:::i;:::-;;:::i;21149:174::-;21226:90;21240:7;21273:11;-1:-1:-1;;;;;21257:29:71;21249:38;;21289:1;21300:3;21306:9;;;;;;;;;;;;21226:13;:90::i;:::-;21149:174;;:::o;23482:633::-;23645:19;23678:9;:32;23688:21;:12;;:19;:21::i;:::-;23678:32;;;;;;;;;;;;;-1:-1:-1;23678:32:71;;;;-1:-1:-1;;;;;23678:32:71;;-1:-1:-1;;23754:36:71;23781:8;23754:26;:36::i;:::-;23721:69;;;;;23801:20;23824:74;;;;;;;;23831:21;:12;;:19;:21::i;:::-;23824:74;;;;;;23854:21;:12;;:19;:21::i;:::-;23824:74;;;;23877:20;:12;;:18;:20::i;:::-;-1:-1:-1;;;;;23824:74:71;;;23801:97;-1:-1:-1;;;;;;23908:18:71;;;-1:-1:-1;;;;;23908:200:71;;;;;;23801:97;23986:26;:12;;:24;:26::i;:::-;24026:19;:12;;:17;:19::i;:::-;24089:9;;;;;;;;-1:-1:-1;24089:9:71;;23908:200;;-1:-1:-1;;;;;;23908:200:71;;;;;;;;;;;;24059:16;;23908:200;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23635:480;;;;23482:633;;;;:::o;4800:67::-;4842:18;:16;:18::i;:::-;4800:67::o;5226:166::-;5313:72;5329:12;5343;5371;5357:27;;-1:-1:-1;;;;;5357:27:71;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5357:27:71;;5313:15;:72::i;2452:134:91:-;2499:33;2563:16;2544:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2544:35:91;;;;;;;;;;;;;;;;;;;;;;;2452:134;:::o;16845:490:71:-;16976:22;17032:8;17018:23;;-1:-1:-1;;;;;17018:23:71;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17018:23:71;-1:-1:-1;17010:31:71;-1:-1:-1;17068:9:71;17051:234;17085:20;17097:8;17085:9;:20;:::i;:::-;17079:26;;:3;:26;;;17051:234;;;17193:14;;;17128:12;17193:14;;;:9;:14;;;;;;;;17174:56;;-1:-1:-1;;;;;17193:14:71;;;17174:56;;;24263:34:132;;;;17218:4:71;24313:18:132;;;24306:43;17193:14:71;24365:18:132;;;24358:50;17143:88:71;;17155:17;;24198:18:132;;17174:56:71;;;;;;;;;;;;17143:11;:88::i;:::-;17128:103;-1:-1:-1;17128:103:71;17245:5;17251:15;17257:9;17251:3;:15;:::i;:::-;17245:22;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;17245:29:71;;;:22;;;;;;;;;;;:29;-1:-1:-1;17107:5:71;;17051:234;;;;17312:16;17322:5;17312:9;:16::i;:::-;16845:490;;;;;:::o;3360:151:91:-;3409:42;3485:19;3463:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3463:41:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3360:151;:::o;25280:469:71:-;25524:18;;;25491:19;25524:18;;;:9;:18;;;;;;-1:-1:-1;;;;;25524:18:71;;25491:19;;25598:39;25628:8;25598:29;:39::i;:::-;25553:84;;;;;;25647:8;-1:-1:-1;;;;;25647:18:71;;25674:5;25686:3;25647:95;25692:5;25699:3;25704:5;25711;25718:12;;25732:9;;;;;;;;;;;;25647:95;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25481:268;;;;25280:469;;;;;;;:::o;3221:133:91:-;3267:33;3331:16;3312:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3312:35:91;;;;;;;;;;;;;;;;;;;;;;3221:133;:::o;2922:141::-;2970:35;3038:18;3017:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3017:39:91;;;;;;;;;;;;;;;;;;;;;;2922:141;:::o;5976:204:70:-;6068:12;6082:11;6095:13;6127:46;6165:7;;6127:37;:46::i;:::-;6120:53;;;;;;5976:204;;;;;:::o;30440:228:71:-;30592:21;;;30525:9;30592:21;;;:12;:21;;;;;;;;:34;;;;;;;;30525:9;30643:14;30592:34;30643:12;:14::i;:::-;:18;30636:25;;;30440:228;;;;;:::o;26061:4058::-;26164:13;26180:21;:12;;:19;:21::i;:::-;26244:17;;;26211:19;26244:17;;;:9;:17;;;;;;26164:37;;-1:-1:-1;;;;;;26244:17:71;;;;;26297:26;26324;:12;;:24;:26::i;:::-;26352:21;:12;;:19;:21::i;:::-;26297:77;;-1:-1:-1;;;;;;26297:77:71;;;;;;;-1:-1:-1;;;;;26047:32:132;;;26297:77:71;;;26029:51:132;26297:77:71;26116:23:132;26096:18;;;26089:51;26002:18;;26297:77:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26272:102;;;26384:25;26412:21;:12;;:19;:21::i;:::-;26384:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26465:33:71;;;-1:-1:-1;;;26465:33:71;;;;26384:49;;-1:-1:-1;26384:49:71;;-1:-1:-1;;;;;26465:31:71;;;-1:-1:-1;26465:31:71;;-1:-1:-1;26465:33:71;;;;;-1:-1:-1;26465:33:71;;;;;;;:31;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26444:54;;;;26512:5;-1:-1:-1;;;;;26512:10:71;26521:1;26512:10;26508:3605;;26613:10;26576:20;-1:-1:-1;;;;;26660:16:71;;;26677:21;:12;;:19;:21::i;:::-;26700:26;:12;;:24;:26::i;:::-;26660:70;;-1:-1:-1;;;;;;26660:70:71;;;;;;;;27836:15:132;;;;26660:70:71;;;27818:34:132;-1:-1:-1;;;;;27888:32:132;27868:18;;;27861:60;26728:1:71;27937:18:132;;;27930:43;27762:18;;26660:70:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;26660:70:71;;;;;;;;;;;;:::i;:::-;26638:92;;26763:7;26788:6;26777:31;;;;;;;;;;;;:::i;:::-;:44;;;26822:1;26777:47;;;;;;;;:::i;:::-;;;;;;;26763:62;;26840:19;26872:22;:12;;:20;:22::i;:::-;26862:33;;;;;;;:::i;:::-;;;;;;;;26840:55;;26930:23;26967:27;27037:29;;;27084:12;27114:11;27143:3;26997:163;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;26997:163:71;;;;;;;;;;;;;;-1:-1:-1;;;;;26997:163:71;-1:-1:-1;;;;;;26997:163:71;;;;;;;;;;;-1:-1:-1;;;;;;;27207:16:71;;;27224:6;27240;26997:163;27265:22;:15;27283:4;27265:22;:::i;:::-;27207:81;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27192:96;;27319:10;27324:4;27319;:10::i;:::-;27388:21;;;27407:1;27388:21;;;;;;;;;27306:23;;-1:-1:-1;27357:28:71;;-1:-1:-1;27388:21:71;;;;;;:::i;:::-;;;;;;;;;;;;;;;;27357:52;;27435:89;;;;;;;;27448:6;27435:89;;;;;;27464:6;-1:-1:-1;;;;;27435:89:71;;;;;27473:14;27435:89;;;;27489:15;27507:4;27489:22;;;;:::i;:::-;27435:89;;;;27513:10;27435:89;;;27423:6;27430:1;27423:9;;;;;;;;:::i;:::-;;;;;;;;;;:101;27538:19;;-1:-1:-1;;;27538:19:71;;-1:-1:-1;;;;;27538:11:71;;;;;:19;;27550:6;;27538:19;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27607:21;27671:41;;;27730:12;27760:11;27631:154;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;27631:154:71;;;;;;;;;;;;;;-1:-1:-1;;;;;27631:154:71;-1:-1:-1;;;;;;27631:154:71;;;;;;;;;;;-1:-1:-1;;;;;;;27832:16:71;;;27849:6;27865;27631:154;27884:22;:15;27902:4;27884:22;:::i;:::-;27832:75;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27817:90;;27938:10;27943:4;27938;:10::i;:::-;27925:23;;27799:164;27988:83;;;;;;;;28001:6;27988:83;;;;;;28017:6;-1:-1:-1;;;;;27988:83:71;;;;;28026:8;27988:83;;;;28036:15;28054:4;28036:22;;;;:::i;:::-;27988:83;;;;28060:10;27988:83;;;27976:6;27983:1;27976:9;;;;;;;;:::i;:::-;;;;;;;;;;:95;28085:19;;-1:-1:-1;;;28085:19:71;;-1:-1:-1;;;;;28085:11:71;;;;;:19;;28097:6;;28085:19;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26524:1591;;;;;;;;26508:3605;;;28125:5;-1:-1:-1;;;;;28125:11:71;28134:2;28125:11;28121:1992;;28193:10;28152:18;-1:-1:-1;;;;;28241:16:71;;;28258:21;:12;;:19;:21::i;:::-;28281:26;:12;;:24;:26::i;:::-;28241:70;;-1:-1:-1;;;;;;28241:70:71;;;;;;;;27836:15:132;;;;28241:70:71;;;27818:34:132;-1:-1:-1;;;;;27888:32:132;27868:18;;;27861:60;28309:1:71;27937:18:132;;;27930:43;27762:18;;28241:70:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;28241:70:71;;;;;;;;;;;;:::i;:::-;28219:92;;28355:7;28380:6;28369:35;;;;;;;;;;;;:::i;:::-;:48;;;28418:1;28369:51;;;;;;;;:::i;:::-;;;;;;;28355:66;;28436:19;28468:22;:12;;:20;:22::i;:::-;28458:33;;;;;;;:::i;:::-;;;;;;;;28436:55;;28505:27;28562:19;:12;;:17;:19::i;:::-;28583:16;28545:55;;;;;;;;;:::i;:::-;;;;;;;;;;;;;28535:66;;;;;;28505:96;;28615:23;28671:27;28745;;;28794:12;28828:11;28861:19;28701:197;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;28701:197:71;;;;;;;;;;;;;;-1:-1:-1;;;;;28701:197:71;-1:-1:-1;;;;;;28701:197:71;;;;;;;;;;;-1:-1:-1;;;;;;;28937:16:71;;;28954:6;28970;28701:197;28995:22;:15;29013:4;28995:22;:::i;:::-;28937:81;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28916:102;;29049:16;29054:10;29049:4;:16::i;:::-;29114:21;;;29133:1;29114:21;;;;;;;;;29036:29;;-1:-1:-1;29083:28:71;;29114:21;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;29083:52;;29165:89;;;;;;;;29178:6;29165:89;;;;;;29194:6;-1:-1:-1;;;;;29165:89:71;;;;;29203:14;29165:89;;;;29219:15;29237:4;29219:22;;;;:::i;:::-;29165:89;;;;29243:10;29165:89;;;29153:6;29160:1;29153:9;;;;;;;;:::i;:::-;;;;;;;;;;:101;29272:19;;-1:-1:-1;;;29272:19:71;;-1:-1:-1;;;;;29272:11:71;;;;;:19;;29284:6;;29272:19;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28653:653;;;29373:21;29441:39;;;29502:12;29536:11;29569:19;29397:209;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;29397:209:71;;;;;;;;;;;;;;-1:-1:-1;;;;;29397:209:71;-1:-1:-1;;;;;;29397:209:71;;;;;;;;;;;-1:-1:-1;;;;;;;29645:16:71;;;29662:6;29678;29397:209;29697:22;:15;29715:4;29697:22;:::i;:::-;29645:75;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29624:96;;29751:16;29756:10;29751:4;:16::i;:::-;29816:21;;;29835:1;29816:21;;;;;;;;;29738:29;;-1:-1:-1;29785:28:71;;29816:21;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;29785:52;;29867:83;;;;;;;;29880:6;29867:83;;;;;;29896:6;-1:-1:-1;;;;;29867:83:71;;;;;29905:8;29867:83;;;;29915:15;29933:4;29915:22;;;;:::i;:::-;29867:83;;;;29939:10;29867:83;;;29855:6;29862:1;29855:9;;;;;;;;:::i;:::-;;;;;;;;;;:95;29968:19;;-1:-1:-1;;;29968:19:71;;-1:-1:-1;;;;;29968:11:71;;;;;:19;;29980:6;;29968:19;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29355:647;;;28138:1874;;;;;;28121:1992;;;30032:70;;-1:-1:-1;;;30032:70:71;;-1:-1:-1;;;;;30032:56:71;;;;;:70;;30089:12;;;;30032:70;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28121:1992;26154:3965;;;;;26061:4058;;;:::o;18447:360::-;18542:9;18537:264;18561:5;:12;18557:1;:16;18537:264;;;18594:29;18646:5;18652:1;18646:8;;;;;;;;:::i;:::-;;;;;;;18594:61;;18674:9;18669:122;18693:8;:15;18689:1;:19;18669:122;;;18733:9;-1:-1:-1;;;;;18733:24:71;;18758:8;18767:1;18758:11;;;;;;;;:::i;:::-;;;;;;;;;;;18733:43;;-1:-1:-1;;;;;;18733:43:71;;;;;;;;36536:23:132;;;18733:43:71;;;36518:42:132;18771:4:71;36576:18:132;;;36569:50;36491:18;;18733:43:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;18710:3:71;;;;;-1:-1:-1;18669:122:71;;-1:-1:-1;18669:122:71;;-1:-1:-1;;18575:3:71;;18537:264;;;;18447:360;;:::o;2738:178:91:-;2794:48;2883:26;2854:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2854:55:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2854:55:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5349:249:70;5464:16;5482:21;;5505:14;5538:53;5573:8;;5583:7;5538:34;:53::i;:::-;5531:60;;;;;;;;5349:249;;;;;;;:::o;17605:528:71:-;17680:12;;17665;17702:425;17726:4;17722:1;:8;17702:425;;;17751:22;17789:5;17795:1;17789:8;;;;;;;;:::i;:::-;;;;;;;17751:47;;17817:9;17812:305;17836:4;17832:1;:8;17812:305;;;17865:20;;;17877:8;17865:20;17903:23;17942:5;17948:1;17942:8;;;;;;;;:::i;:::-;;;;;;;17903:48;;17969:16;17989:10;-1:-1:-1;;;;;17989:19:71;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;17988:27:71;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17969:48;;18035:9;-1:-1:-1;;;;;18035:17:71;;18053:9;18064:37;18089:10;-1:-1:-1;;;;;31116:23:71;;31018:129;18064:37;18035:67;;-1:-1:-1;;;;;;18035:67:71;;;;;;;;37359:23:132;;;;18035:67:71;;;37341:42:132;37399:18;;;37392:34;37314:18;;18035:67:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17847:270;;17812:305;17842:3;;17812:305;;;-1:-1:-1;;17732:3:71;;17702:425;;30674:338;30845:21;;;30799:43;30845:21;;;:12;:21;;;;;;;;:34;;;;;;;;30763:24;;30893:14;30845:34;30893:12;:14::i;:::-;:18;30889:117;;;30927:12;30942;:5;:10;:12::i;:::-;30982:13;;;;:7;:13;;;;;30968:27;;30927;;-1:-1:-1;30982:13:71;30968:27;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30913:93;30889:117;30789:223;30674:338;;;;:::o;21518:1958::-;21722:18;;;21752:1;21722:18;;;:9;:18;;;;;;-1:-1:-1;;;;;21722:18:71;21714:72;;;;-1:-1:-1;;;21714:72:71;;37639:2:132;21714:72:71;;;37621:21:132;37678:2;37658:18;;;37651:30;37717:29;37697:18;;;37690:57;37764:18;;21714:72:71;;;;;;;;;21843:21;;;21797:43;21843:21;;;:12;:21;;;;;;;;:34;;;;;;;;;21916:14;21843:34;21916:12;:14::i;:::-;21887:43;;21940:23;21977:13;21994:1;21977:18;21973:201;;22029:14;:5;:12;:14::i;:::-;22011:32;;21973:201;;;22113:13;22092:18;:34;:71;;22145:18;22092:71;;;22129:13;22092:71;22074:89;;21973:201;22190:19;;22183:1287;;22225:17;;;;:::i;:::-;;;;22290:12;22305:15;:5;:13;:15::i;:::-;22334:24;22361:13;;;:7;:13;;;;;22334:40;;22290:30;;-1:-1:-1;22334:24:71;;:40;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;22388:34:71;;-1:-1:-1;;;22388:34:71;;22334:40;;-1:-1:-1;22388:4:71;;:15;;-1:-1:-1;22388:34:71;;-1:-1:-1;22334:40:71;;-1:-1:-1;22417:4:71;;22388:34;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;22436:50:71;;-1:-1:-1;;;22436:50:71;;:4;;-1:-1:-1;22436:19:71;;-1:-1:-1;22436:50:71;;22456:11;;22469:16;;22436:50;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;22501:20:71;22524:19;;;:13;:19;;;;;22501:42;;:20;;-1:-1:-1;22524:19:71;22501:42;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22561:71;22583:7;363:1:11;22561:21:71;:71::i;:::-;22557:369;;;22653:14;22669:16;22689:39;22720:7;22689:30;:39::i;:::-;22828:28;;22652:76;;-1:-1:-1;22652:76:71;-1:-1:-1;22652:76:71;;22746:10;;-1:-1:-1;;;;;22828:7:71;;;22652:76;;22746:10;22828:28;22746:10;22828:28;22652:76;22828:7;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22812:44;;;22882:4;22874:37;;;;-1:-1:-1;;;22874:37:71;;38730:2:132;22874:37:71;;;38712:21:132;38769:2;38749:18;;;38742:30;-1:-1:-1;;;38788:18:132;;;38781:50;38848:18;;22874:37:71;38528:344:132;22874:37:71;22634:292;;;;22557:369;22943:69;22965:7;306:1:11;22943:21:71;:69::i;:::-;22939:144;;;23032:36;;-1:-1:-1;;;23032:36:71;;:4;;:14;;:36;;23047:11;;23060:7;;23032:36;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22939:144;23100:66;23122:7;533:1:11;23100:21:71;:66::i;:::-;23096:163;;;23186:58;;-1:-1:-1;;;23186:58:71;;:4;;:18;;:58;;23205:11;;23218:7;;23227:16;;23186:58;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23096:163;-1:-1:-1;;;;;23276:23:71;;;;;;:96;;;23303:69;23325:7;418:1:11;23303:21:71;:69::i;:::-;23272:188;;;23392:53;;-1:-1:-1;;;23392:53:71;;:4;;:14;;:53;;23407:11;;23420:7;;23429:4;;23435:9;;23392:53;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23272:188;22211:1259;;;22183:1287;;2592:140:91;2640:34;2707:18;2686:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3069:146;3117:40;3190:18;3169:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3169:39:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3169:39:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6186:197:70;6275:11;6288;6301:13;6333:43;6368:7;;6333:34;:43::i;30125:187:71:-;30211:18;30232;:11;;:16;:18::i;:::-;30211:39;;30282:4;30268:10;:18;30260:45;;;;-1:-1:-1;;;30260:45:71;;40178:2:132;30260:45:71;;;40160:21:132;40217:2;40197:18;;;40190:30;-1:-1:-1;;;40236:18:132;;;40229:44;40290:18;;30260:45:71;39976:338:132;30260:45:71;30201:111;30125:187;;;:::o;24702:376::-;24872:4;:14;24900:21;:12;;:19;:21::i;:::-;24935:26;:12;;:24;:26::i;:::-;24975:8;24997:5;25016:9;25039:22;:12;;:20;:22::i;:::-;24872:199;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24702:376;;;;;:::o;30318:116::-;30418:8;30382:9;:25;30392:8;-1:-1:-1;;;;;30392:12:71;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30382:25;;;;;;;;;;;;;-1:-1:-1;30382:25:71;:45;;-1:-1:-1;;;;;;30382:45:71;-1:-1:-1;;;;;30382:45:71;;;;;;;;;;-1:-1:-1;30318:116:71:o;2157:141:91:-;2206:34;2273:18;2252:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20814:147:71;20891:63;20905:7;20914:11;20927:1;20938:3;20944:9;;;;;;;;;;;;20891:13;:63::i;5786:184:70:-;5865:14;5881:16;5916:47;5955:7;;5916:38;:47::i;:::-;5909:54;;;;5786:184;;;;;;:::o;1819:584:85:-;1873:7;;1853:4;;1873:7;;;;;1869:528;;;-1:-1:-1;1903:7:85;;;;;;;;1819:584::o;1869:528::-;1941:17;2997:42;2985:55;3066:16;1980:374;;2196:43;;;1671:64;2196:43;;;41262:51:132;;;-1:-1:-1;;;41329:18:132;;;41322:34;2196:43:85;;;;;;;;;41235:18:132;;;2196:43:85;;;-1:-1:-1;;1671:64:85;;2086:175;;2135:34;;2086:175;;;:::i;:::-;;;;-1:-1:-1;;2086:175:85;;;;;;;;;;2047:232;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2020:259;;;2323:7;2312:27;;;;;;;;;;;;:::i;:::-;2297:42;;2002:352;1980:374;2374:12;1819:584;-1:-1:-1;1819:584:85:o;5621:10886:71:-;5824:12;5807:30;;-1:-1:-1;;;;;5807:30:71;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5807:30:71;-1:-1:-1;5778:59:71;;;;:13;;:59;;;;;;:::i;:::-;;5884:12;5871:26;;-1:-1:-1;;;;;5871:26:71;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5871:26:71;-1:-1:-1;5847:50:71;;;;:21;;:50;;;;;;:::i;:::-;;5946:12;5932:27;;-1:-1:-1;;;;;5932:27:71;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5932:27:71;-1:-1:-1;5907:52:71;;;;:22;;:52;;;;;;:::i;:::-;;6011:12;5997:27;;-1:-1:-1;;;;;5997:27:71;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5997:27:71;-1:-1:-1;5969:55:71;;;;:25;;:55;;;;;;:::i;:::-;;6073:12;6059:27;;-1:-1:-1;;;;;6059:27:71;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6059:27:71;-1:-1:-1;6034:52:71;;;;:22;;:52;;;;;;:::i;:::-;-1:-1:-1;6120:16:71;;;6134:1;6120:16;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6096:40:71;;;;:21;;-1:-1:-1;6096:40:71;;;;:::i;:::-;-1:-1:-1;6173:10:71;;-1:-1:-1;;;;;;6173:10:71;;6181:1;6173:10;;;20012:25:132;6173:7:71;;;;19985:18:132;;6173:10:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6146:21;:24;;6168:1;;6146:24;;;;:::i;:::-;;;;;;;;;:37;;-1:-1:-1;;;;;;6146:37:71;-1:-1:-1;;;;;6146:37:71;;;;;;;;;;;6240:552;6262:12;6258:16;;:1;:16;;;6240:552;;;6299:10;6312:5;:1;6316;6312:5;:::i;:::-;6299:18;;;;6335:19;6357:20;6378:1;6357:23;;;;;;;;;;:::i;:::-;;;;;;;6335:45;;6425:3;6398:13;:21;;6420:1;6398:24;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;6473:1;-1:-1:-1;;;;;6450:25:71;:11;-1:-1:-1;;;;;6450:25:71;;6446:267;;6546:3;6559:4;6531:34;;;;;:::i;:::-;42903:10:132;42891:23;;;42873:42;;-1:-1:-1;;;;;42951:32:132;42946:2;42931:18;;42924:60;42861:2;42846:18;6531:34:71;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6499:13:71;:29;;;;;;;;;;;;:::i;:::-;;;;;;;;;:66;;;;;-1:-1:-1;;;;;6499:66:71;;;;;-1:-1:-1;;;;;6499:66:71;;;;;;6446:267;;;6662:3;6675:4;6682:11;6644:50;;;;;:::i;:::-;43225:10:132;43213:23;;;43195:42;;-1:-1:-1;;;;;43311:15:132;;;43306:2;43291:18;;43284:43;43363:15;43358:2;43343:18;;43336:43;43183:2;43168:18;6644:50:71;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6612:13:71;:29;;;;;;;;;;;;:::i;:::-;;;;;;;;;:82;;;;;-1:-1:-1;;;;;6612:82:71;;;;;-1:-1:-1;;;;;6612:82:71;;;;;;6446:267;6730:47;6747:13;:26;;6774:1;6747:29;;;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;6747:29:71;6730:16;:47::i;:::-;-1:-1:-1;;6276:3:71;;6240:552;;;;6918:4;6896:28;;;;;:::i;:::-;-1:-1:-1;;;;;43554:32:132;;;43536:51;;43524:2;43509:18;6896:28:71;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6870:23:71;:54;;-1:-1:-1;;;;;;6870:54:71;-1:-1:-1;;;;;6870:54:71;;;;;;;;;;-1:-1:-1;6935:8866:71;6957:12;6953:16;;:1;:16;;;6935:8866;;;7010:26;6994:12;:42;;;;;;;;:::i;:::-;;6990:8801;;7056:20;7087:13;:26;;7114:1;7087:29;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7087:29:71;7056:61;;7199:4;7226:12;4147:13;4217:6;7155:185;;;;;:::i;:::-;-1:-1:-1;;;;;44033:15:132;;;44015:34;;44085:15;;;;44080:2;44065:18;;44058:43;44132:2;44117:18;;44110:34;44175:2;44160:18;;44153:34;43964:3;43949:19;7155:185:71;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7136:8:71;:204;;-1:-1:-1;;;;;;7136:204:71;-1:-1:-1;;;;;7136:204:71;;;;;;;;;;7380:31;;7398:12;;7380:31;;;:::i;:::-;-1:-1:-1;;;;;43554:32:132;;;43536:51;;43524:2;43509:18;7380:31:71;;;;;;;;;;;;;;;;;;;;;;;7358:8;:19;;;:53;;;;;-1:-1:-1;;;;;7358:53:71;;;;;-1:-1:-1;;;;;7358:53:71;;;;;;7493:4;7520:12;4147:13;4217:6;7448:186;;;;;:::i;:::-;-1:-1:-1;;;;;44033:15:132;;;44015:34;;44085:15;;;;44080:2;44065:18;;44058:43;44132:2;44117:18;;44110:34;44175:2;44160:18;;44153:34;43964:3;43949:19;7448:186:71;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7429:16:71;:205;;-1:-1:-1;;;;;;7429:205:71;-1:-1:-1;;;;;7429:205:71;;;;;;;;;;7652:13;:29;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;7706:8;:16;7652:72;;-1:-1:-1;;;7652:72:71;;-1:-1:-1;;;;;7706:16:71;;;7652:72;;;43536:51:132;7652:29:71;;;:45;;43509:18:132;;7652:72:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7742:13;:26;;7769:1;7742:29;;;;;;;;;;:::i;:::-;;;;;;;;;;;7796:19;;7742:75;;-1:-1:-1;;;7742:75:71;;-1:-1:-1;;;;;7796:19:71;;;7742:75;;;43536:51:132;7742:29:71;;;:45;;43509:18:132;;7742:75:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7835:13;:26;;7862:1;7835:29;;;;;;;;;;:::i;:::-;;;;;;;;;;;7889:16;;7835:72;;-1:-1:-1;;;7835:72:71;;-1:-1:-1;;;;;7889:16:71;;;7835:72;;;43536:51:132;7835:29:71;;;:45;;43509:18:132;;7835:72:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;7961:8:71;:16;7925:22;:25;;-1:-1:-1;;;;;7961:16:71;;;;-1:-1:-1;7925:22:71;-1:-1:-1;7925:25:71;;;;;;;;;;:::i;:::-;;;;;;;;;;:53;;-1:-1:-1;;;;;;7925:53:71;-1:-1:-1;;;;;7925:53:71;;;;;;8035:19;;7996:25;:28;;8035:19;;;;;7996:25;:28;;;;;;;;;;:::i;:::-;;;;;;;;;;:59;;-1:-1:-1;;;;;;7996:59:71;-1:-1:-1;;;;;7996:59:71;;;;;;8109:16;;8073:22;:25;;8109:16;;;;;8073:22;:25;;;;;;;;;;:::i;:::-;;;;;;;;;:53;;-1:-1:-1;;;;;8073:53:71;;;;-1:-1:-1;;;;;;8073:53:71;;;;;;;;;;8193:16;;;-1:-1:-1;8193:16:71;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8193:16:71;8167:42;;8251:4;8231:6;8238:1;8231:9;;;;;;;;:::i;:::-;-1:-1:-1;;;;;8231:25:71;;;;:9;;;;;;;;;;:25;8310:16;;;8324:1;8310:16;;;;;;;;;8279:28;;8310:16;;8324:1;8310:16;;;;;;;-1:-1:-1;;8373:8:71;:16;8348:14;;;;-1:-1:-1;;;;;;8373:16:71;;8348:14;;-1:-1:-1;8373:16:71;;8348:14;;;;:::i;:::-;-1:-1:-1;;;;;8348:42:71;;;:14;;;;;;;;;:42;8437:19;;8412:14;;8437:19;;;8412:11;;8437:19;;8412:14;;;;;;:::i;:::-;-1:-1:-1;;;;;8412:45:71;;;:14;;;;;;;;;:45;8504:16;;8479:14;;8504:16;;;8479:11;;8504:16;;8479:14;;;;;;:::i;:::-;-1:-1:-1;;;;;8479:42:71;;;:14;;;;;;;;;:42;8723:23;;8564:276;;8602:12;;8648:3;;8678:11;;8723:23;;;8781:4;;8812:6;;8564:276;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8544:17:71;:296;;-1:-1:-1;;;;;;8544:296:71;-1:-1:-1;;;;;8544:296:71;;;;;;;;;;8905:21;:24;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;8886:44;;;;;:::i;:::-;10098:10:132;10086:23;;;10068:42;;10056:2;10041:18;8886:44:71;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8863:20:71;:67;;-1:-1:-1;;;;;;8863:67:71;-1:-1:-1;;;;;8863:67:71;;;;;;;;;8952:17;;:64;;-1:-1:-1;;;8952:64:71;;;;;43536:51:132;;;;8952:17:71;;;;:33;;43509:18:132;;8952:64:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9087:13;:21;;9109:1;9087:24;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;9137:5;:1;9141;9137:5;:::i;:::-;9213:23;;9054:311;;9168:11;;-1:-1:-1;;;;;9213:23:71;;9263:21;;9213:23;;9337:6;;9054:311;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9039:12:71;:326;;-1:-1:-1;;;;;;9039:326:71;-1:-1:-1;;;;;9039:326:71;;;;;;;;;;9419:21;:24;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;9445:4;9405:45;;;;;:::i;:::-;37371:10:132;37359:23;;;37341:42;;37414:2;37399:18;;37392:34;37329:2;37314:18;9405:45:71;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9387:15:71;:63;;-1:-1:-1;;;;;;9387:63:71;-1:-1:-1;;;;;9387:63:71;;;;;;;;;9472:96;;-1:-1:-1;;;9472:96:71;;4343:4;9472:96;;;47102:34:132;;;47152:18;;;47145:43;4461:5:71;47204:18:132;;;47197:47;9472:26:71;;47024:18:132;;9472:96:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;9590:12:71;;9627:15;;9590:54;;-1:-1:-1;;;9590:54:71;;-1:-1:-1;;;;;9627:15:71;;;9590:12;:54;;43536:51:132;9590:12:71;;;-1:-1:-1;9590:28:71;;-1:-1:-1;43509:18:132;;9590:54:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8145:1518;;9681:32;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;9681:32:71;9798:16;:12;9813:1;9798:16;:::i;:::-;9767:48;;-1:-1:-1;;;;;9767:48:71;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9767:48:71;;-1:-1:-1;;9767:48:71;;;;;;;;;;;-1:-1:-1;9731:84:71;;9890:16;:12;9905:1;9890:16;:::i;:::-;9864:43;;-1:-1:-1;;;;;9864:43:71;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9864:43:71;;-1:-1:-1;;9864:43:71;;;;;;;;;;;-1:-1:-1;9833:28:71;;;:74;10004:16;:12;10019:1;10004:16;:::i;:::-;9962:59;;-1:-1:-1;;;;;9962:59:71;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;9962:59:71;;;;;;;;;;;;;;;-1:-1:-1;9925:34:71;;;;:96;;;;10071:16;;10085:1;10071:16;;;;;;;;;10040:28;;10071:16;;;;;;;;;-1:-1:-1;;10137:16:71;;;10105:29;10137:16;;;;;;;;;10196:12;;10171:14;;10040:47;;-1:-1:-1;10137:16:71;;-1:-1:-1;;;;;10196:12:71;;;;-1:-1:-1;10040:47:71;;10105:29;10171:14;;;;:::i;:::-;;;;;;:38;-1:-1:-1;;;;;10171:38:71;;;-1:-1:-1;;;;;10171:38:71;;;;;10233:7;10228:2850;10250:12;10246:16;;:1;:16;;;10228:2850;;;10300:1;10295:6;;:1;:6;;;10291:20;10303:8;10291:20;10333:13;10349:5;:1;10353;10349:5;:::i;:::-;10423:33;;;10454:1;10423:33;;;;;;;;;10333:21;;;;;;-1:-1:-1;10377:43:71;;10423:33;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;10377:79;;10478:26;10507:265;;;;;;;;10542:3;-1:-1:-1;;;;;10507:265:71;;;;;10577:11;:18;10507:265;;;;;;10628:12;:19;10507:265;;;;;;10674:1;10507:265;;;;;;10701:11;10507:265;;;;10738:12;10507:265;;;10478:294;;10836:43;;;;;;;;10861:6;10836:43;;;;;;10869:9;10836:43;;;10821:9;10831:1;10821:12;;;;;;;;:::i;:::-;;;;;;;;;;:58;10905:8;:16;:48;;-1:-1:-1;;;10905:48:71;;-1:-1:-1;;;;;10905:16:71;;;;:37;;:48;;10943:9;;10905:48;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;10979:19:71;;:51;;-1:-1:-1;;;10979:51:71;;-1:-1:-1;;;;;10979:19:71;;;;-1:-1:-1;10979:40:71;;-1:-1:-1;10979:51:71;;11020:9;;10979:51;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11101:49:71;;-1:-1:-1;11189:1:71;;-1:-1:-1;11153:38:71;;-1:-1:-1;11153:38:71;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;11252:49:71;;;;;;;;11267:5;11252:49;;11282:17;;-1:-1:-1;;;;;11282:17:71;11252:49;;;;;;;;11343;;;;;;;;11252;11343;;;;;;;;;11327:13;;11101:90;;-1:-1:-1;11252:49:71;11101:90;;11217:32;;11327:13;;;;:::i;:::-;;;;;;;;;;:65;11418:8;:16;:54;;-1:-1:-1;;;11418:54:71;;-1:-1:-1;;;;;11418:16:71;;;;:42;;:54;;11461:10;;11418:54;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;11595:329:71;;;;;;;;;;;;;11704:4;11595:329;;;;;;;;;;;;;11797:5;11595:329;;;;11844:4;11595:329;;;;11885:16;;-1:-1:-1;;;;;11885:16:71;11595:329;;;;11556:33;;:36;;11595:329;;-1:-1:-1;11556:33:71;-1:-1:-1;11556:36:71;;;;-1:-1:-1;11556:36:71;;;-1:-1:-1;11556:36:71;;;;:::i;:::-;;;;;;:368;;;;12015:210;;;;;;;;12069:6;12015:210;;;;;;12106:4;-1:-1:-1;;;;;12015:210:71;;;;;12151:5;12015:210;;;;;;12198:4;-1:-1:-1;;;;;12015:210:71;;;;11981:12;:28;;;12010:1;11981:31;;;;;;;;;;:::i;:::-;;;;;;:244;;;;12330:175;;;;;;;;12403:6;12330:175;;;;;;4523:1;12330:175;;;12290:12;:34;;;12325:1;12290:37;;;;;;;;;;:::i;:::-;;;;;;:215;;;;12528:19;12550:13;:23;;;;;;;;;;-1:-1:-1;;;;;12550:23:71;-1:-1:-1;;;;;12550:48:71;;:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12672:40;;;12710:1;12672:40;;;;;;;;;12528:72;;-1:-1:-1;12622:47:71;;12672:40;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12672:40:71;;;;;;;;;;;;;;;;12622:90;;12746:159;;;;;;;;12803:6;12746:159;;;;;;12835:48;;;;;;;;12865:11;12861:1;:15;;;;:::i;:::-;-1:-1:-1;;;;;12835:48:71;;;12878:1;12835:48;;;;;;;;;;;12746:159;;12734:9;;:6;;-1:-1:-1;;12734:9:71;;;;:::i;:::-;;;;;;;;;;:171;12927:23;;:40;;-1:-1:-1;;;12927:40:71;;-1:-1:-1;;;;;12927:23:71;;;;:32;;:40;;12960:6;;12927:40;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;12989:23:71;;:70;;-1:-1:-1;;;12989:70:71;;4278:4;12989:70;;;5099:66:132;-1:-1:-1;;;;;12989:23:71;;;;-1:-1:-1;12989:46:71;;-1:-1:-1;5072:18:132;;12989:70:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10269:2809;;;;;10228:2850;10264:3;;10228:2850;;;-1:-1:-1;13234:37:71;;;13269:1;13234:37;;;;;;;;;13180:51;;13234:37;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;13334:320:71;;;;;;;;13385:17;;-1:-1:-1;;;;;13385:17:71;13334:320;;13439:18;;13334:320;;;;;;;;;;;;13494:19;;13334:320;;;;;;;-1:-1:-1;13334:320:71;;;;;;;;;;;;;;;;;;13699:63;;;;;;;;4574:5;13699:63;;;;;;;;13680:16;;;;-1:-1:-1;13334:320:71;;13680:16;;-1:-1:-1;13680:16:71;;;;:::i;:::-;;;;;;;;;;:82;13788:16;;:56;;-1:-1:-1;;;13788:56:71;;-1:-1:-1;;;;;13788:16:71;;;;:41;;:56;;13830:13;;13788:56;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13154:713;;13965:375;;;;;;;;14028:13;:21;;14050:1;14028:24;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;13965:375;;14100:4;13965:375;;;;;;;;;;14201:5;13965:375;;;;14252:4;13965:375;;;;14297:16;;-1:-1:-1;;;;;14297:16:71;13965:375;;;;;13915:33;;:47;;;;;;;;;;;;:::i;:::-;;;;;;:425;;;;14412:248;;;;;;;;14470:13;:21;;14492:1;14470:24;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;14412:248;;14529:4;14412:248;;;;14578:5;14412:248;;;;14629:4;14412:248;;;;;;;;14367:28;;;:42;;;;;;;;;;;;:::i;:::-;;;;;;:293;;;;14738:205;;;;;;;;14815:13;:21;;14837:1;14815:24;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;14738:205;;4523:1;14738:205;;;14687:34;;;;:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:256;15002:17;;15033:33;;15002:65;;-1:-1:-1;;;15002:65:71;;-1:-1:-1;;;;;15002:17:71;;;;:30;;:65;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;15085:12:71;;15111:28;;;;15085:55;;-1:-1:-1;;;15085:55:71;;-1:-1:-1;;;;;15085:12:71;;;;-1:-1:-1;15085:25:71;;-1:-1:-1;15085:55:71;;:12;:55;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;15158:15:71;;15195:34;;;;;15158:72;;-1:-1:-1;;;15158:72:71;;-1:-1:-1;;;;;15158:15:71;;;;-1:-1:-1;15158:36:71;;-1:-1:-1;15158:72:71;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7038:8207;;;;6990:8801;;;15271:28;15255:12;:44;;;;;;;;:::i;:::-;;15251:540;;15319:31;15407:4;15442:13;:26;;15469:1;15442:29;;;;;;;;;;:::i;:::-;;;;;;;;;;;15353:137;;-1:-1:-1;;;;;15442:29:71;;;;15353:137;;;:::i;:::-;-1:-1:-1;;;;;57981:15:132;;;57963:34;;58033:15;;58028:2;58013:18;;58006:43;57913:2;57898:18;15353:137:71;;;;;;;;;;;;;;;;;;;;;;;15319:171;;15508:13;:26;;15535:1;15508:29;;;;;;;;;;:::i;:::-;;;;;;;;;;;:66;;-1:-1:-1;;;15508:66:71;;-1:-1:-1;;;;;43554:32:132;;;15508:66:71;;;43536:51:132;15508:29:71;;;;:45;;43509:18:132;;15508:66:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15628:10;15592:13;:22;;15615:1;15592:25;;;;;;;;;;:::i;:::-;;;;;;;;;:47;;;;;-1:-1:-1;;;;;15592:47:71;;;;;-1:-1:-1;;;;;15592:47:71;;;;;;15696:10;15657:13;:25;;15683:1;15657:28;;;;;;;;;;:::i;:::-;;;;;;;;;:50;;;;;-1:-1:-1;;;;;15657:50:71;;;;;-1:-1:-1;;;;;15657:50:71;;;;;;15301:421;15251:540;;;15746:30;;-1:-1:-1;;;15746:30:71;;58262:2:132;15746:30:71;;;58244:21:132;58301:2;58281:18;;;58274:30;-1:-1:-1;;;58320:18:132;;;58313:50;58380:18;;15746:30:71;58060:344:132;15251:540:71;6971:3;;6935:8866;;;;15837:7;15832:669;15854:12;15850:16;;:1;:16;;;15832:669;;;15887:19;15909:13;:26;;15936:1;15909:29;;;;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;;;;15909:29:71;;-1:-1:-1;15956:12:71;:42;;;;;;;;:::i;:::-;;15952:259;;16018:8;-1:-1:-1;;;;;16018:30:71;;4574:5;16069:13;:22;;16092:1;16069:25;;;;;;;;;;:::i;:::-;;;;;;;;;;;16018:77;;;;;;-1:-1:-1;;;;;;16018:77:71;;;42903:10:132;42891:23;;;16018:77:71;;;42873:42:132;-1:-1:-1;;;;;16069:25:71;42931:18:132;;;42924:60;42846:18;;16018:77:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16113:8;-1:-1:-1;;;;;16113:33:71;;4574:5;16167:13;:22;;16190:1;16167:25;;;;;;;;;;:::i;:::-;;;;;;;;;;16113:83;;;;;;-1:-1:-1;;;;;;16113:83:71;;;58647:10:132;58635:23;;;16113:83:71;;;58617:42:132;-1:-1:-1;;;;;16167:25:71;58675:18:132;;;58668:60;58744:18;;;58737:34;58590:18;;16113:83:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15952:259;16229:7;16224:267;16246:12;16242:16;;:1;:16;;;16224:267;;;16292:1;16287:6;;:1;:6;;;16283:20;16295:8;16283:20;-1:-1:-1;;;;;16321:30:71;;;16352:5;:1;16356;16352:5;:::i;:::-;16359:22;:25;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;16321:64;;;;;;-1:-1:-1;;;;;;16321:64:71;;;58983:4:132;58971:17;;;16321:64:71;;;58953:36:132;-1:-1:-1;;;;;16359:25:71;59005:18:132;;;58998:60;58926:18;;16321:64:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16403:8;-1:-1:-1;;;;;16403:33:71;;16437:1;16441;16437:5;;;;:::i;:::-;16444:25;:28;;;;;;;;;;;;:::i;:::-;;;;;;;;;;16403:73;;;;;;-1:-1:-1;;;;;;16403:73:71;;;59306:4:132;59294:17;;;16403:73:71;;;59276:36:132;-1:-1:-1;;;;;16444:28:71;59328:18:132;;;59321:60;59397:18;;;59390:34;59249:18;;16403:73:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16224:267;16260:3;;16224:267;;;-1:-1:-1;;15868:3:71;;15832:669;;2304:142:91;2353:35;2421:18;2400:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2400:39:91;;;;;;;;;;;;;;;;;;;;;;2304:142;:::o;24121:575:71:-;24219:19;24252:9;:32;24262:21;:12;;:19;:21::i;:::-;24252:32;;;;;;;;;;;;;-1:-1:-1;24252:32:71;;;;-1:-1:-1;;;;;24252:32:71;;-1:-1:-1;;24326:39:71;24356:8;24326:29;:39::i;:::-;24295:70;;;;24376:20;24399:74;;;;;;;;24406:21;:12;;:19;:21::i;:::-;24399:74;;;;;;24429:21;:12;;:19;:21::i;:::-;24399:74;;;;24452:20;:12;;:18;:20::i;:::-;-1:-1:-1;;;;;24399:74:71;;;24376:97;-1:-1:-1;;;;;;24483:18:71;;;24522:3;24510:5;24376:97;24561:26;:12;;:24;:26::i;:::-;24601:19;:12;;:17;:19::i;:::-;24634:22;:12;;:20;:22::i;:::-;24670:9;;;;;;;;;;;;24483:206;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24209:487;;;;24121:575;;;:::o;5604:176:70:-;5682:11;5695:13;5727:46;5765:7;;5727:37;:46::i;19989:464:71:-;20084:13;20100:21;:12;;:19;:21::i;:::-;20084:37;;20131:18;20152:23;:12;;:21;:23::i;:::-;20231:20;;;20185:43;20231:20;;;:12;:20;;;;;;;;:32;;;;;;;;20131:44;;-1:-1:-1;20318:19:71;:12;;:17;:19::i;:::-;20303:34;-1:-1:-1;20347:21:71;:5;20303:34;20347:15;:21::i;:::-;20378:13;;;;:7;:13;;;;;:28;20394:12;;20378:13;:28;:::i;:::-;-1:-1:-1;20416:19:71;;;;:13;:19;;;;;:30;20438:8;;20416:19;:30;:::i;2671:150:48:-;2734:6;2773:39;706:2;655;2773:7;;:39;:::i;:::-;2766:47;;;:::i;:::-;2759:55;;;2671:150;-1:-1:-1;;;2671:150:48:o;2148:414:70:-;2244:11;2257;2270:13;2296:10;2308:19;2331:110;2375:8;533:1:11;2331:30:70;:110::i;:::-;2295:146;;;;2459:5;2451:56;;;;-1:-1:-1;;;2451:56:70;;62958:2:132;2451:56:70;;;62940:21:132;62997:2;62977:18;;;62970:30;63036:34;63016:18;;;63009:62;-1:-1:-1;;;63087:18:132;;;63080:36;63133:19;;2451:56:70;62756:402:132;2451:56:70;2524:31;;-1:-1:-1;;;2524:31:70;;:4;;:23;;:31;;2548:6;;2524:31;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2517:38;;;;;;;;2148:414;;;;;:::o;2230:148:48:-;2293:6;2332:37;605:2;557:1;2332:7;;:37;:::i;2384:142::-;2447:7;2481:37;655:2;605;2481:7;;:37;:::i;:::-;2473:46;;;:::i;2078:146::-;2140:6;2179:36;557:1;493;2179:7;;:36;:::i;:::-;2172:44;;;:::i;:::-;2165:52;;;2078:146;-1:-1:-1;;;2078:146:48:o;2976:130::-;3044:7;3070:29;:17;3079:7;;3070:8;:17::i;:::-;1210:15:40;1084:151;3112:138:48;3173:7;3207:35;862:3;785:2;3207:7;;:35;:::i;765:87:70:-;825:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;812:10:70;:33;;-1:-1:-1;;;;;;812:33:70;-1:-1:-1;;;;;812:33:70;;;;;;;;;;765:87::o;19244:399:71:-;19342:12;19366:21;19420:13;19403:31;;;;;;;;:::i;:::-;;;;-1:-1:-1;;19403:31:71;;;;;;;;;;19390:63;;19436:16;;19403:31;19390:63;;:::i;:::-;;;;;;;;;;;;;19366:87;;19531:8;19525:15;19518:4;19508:8;19504:19;19501:1;19494:47;19486:55;;19576:4;19564:17;19554:73;;19611:1;19608;19601:12;1715:427:70;1814:12;1828:11;1841:13;1867:10;1879:19;1902:113;1946:8;418:1:11;1902:30:70;:113::i;:::-;1866:149;;;;2033:5;2025:59;;;;-1:-1:-1;;;2025:59:70;;64980:2:132;2025:59:70;;;64962:21:132;65019:2;64999:18;;;64992:30;65058:34;65038:18;;;65031:62;-1:-1:-1;;;65109:18:132;;;65102:39;65158:19;;2025:59:70;64778:405:132;2025:59:70;2101:34;;-1:-1:-1;;;2101:34:70;;:4;;:26;;:34;;2128:6;;2101:34;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2094:41;;-1:-1:-1;;;;;2094:41:70;;;;-1:-1:-1;2094:41:70;;;-1:-1:-1;1715:427:70;-1:-1:-1;;;;1715:427:70:o;2697:371:11:-;2789:12;;;2863:2;2845:20;;;;;:44;;-1:-1:-1;2887:2:11;2869:20;;;2845:44;2841:90;;;2898:33;;-1:-1:-1;;;2898:33:11;;;;;;;;;;;2841:90;2949:16;:7;;2963:1;2949:13;:16::i;:::-;2941:24;-1:-1:-1;2981:17:11;:7;;2996:1;2981:14;:17::i;:::-;2975:23;-1:-1:-1;3034:2:11;3016:20;;:45;;3060:1;3016:45;;;3039:18;:7;;3054:2;3039:14;:18::i;:::-;3008:53;;2697:371;;;;;:::o;5326:168:126:-;5464:12;-1:-1:-1;;;;;5464:12:126;;;-1:-1:-1;;;5451:10:126;;;;;:25;;;;5443:34;;5326:168::o;1788:125:48:-;1851:14;;1884:22;785:2;1851:14;1884:7;;:22;:::i;3397:132::-;3461:14;;3500:21;:7;785:2;3500:7;;:21;:::i;25755:300:71:-;25871:58;;65952:66:132;25871:58:71;;;65940:79:132;66035:12;;;66028:28;;;25806:12:71;;25830:28;;66072:12:132;;25871:58:71;;;;;;-1:-1:-1;;25871:58:71;;;;;;;25861:69;;25871:58;25861:69;;;;-1:-1:-1;;;25974:32:71;;25982:1;25974:32;;;66277:25:132;66318:18;;;66311:34;;;25861:69:71;-1:-1:-1;25941:7:71;;;;;;25974;;;;66250:18:132;;25974:32:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26023:25;;;;;;66911:19:132;;;;66946:12;;;66939:28;;;;67023:3;67001:16;;;;-1:-1:-1;;;;;;66997:36:132;66983:12;;;66976:58;26023:25:71;;;;;;;;;67050:12:132;;;;26023:25:71;;;;25755:300;-1:-1:-1;;;;;;25755:300:71:o;3256:135:48:-;3320:14;;3359:24;:7;862:3;3359:7;;:24;:::i;1357:742:11:-;1472:16;1490:21;1472:16;1612:1;1602:11;;1472:16;1674:22;:8;;1602:11;1674:14;:22::i;:::-;1720:1;1710:11;;;;;1660:36;-1:-1:-1;1781:21:11;:8;;1710:11;1781:13;:21::i;:::-;1768:34;-1:-1:-1;1932:1:11;1923:10;;1987:13;;;;;2023:31;1987:13;1923:10;2023:8;;:31;:::i;:::-;1357:742;;2014:40;;-1:-1:-1;2014:40:11;;-1:-1:-1;;;2068:14:11;;;;-1:-1:-1;;;1357:742:11:o;4032:231:126:-;4097:13;4126:12;4132:5;5667:12;-1:-1:-1;;;5653:10:126;;-1:-1:-1;;;;;5653:10:126;;;5667:12;;5653:26;;5564:122;4126:12;4122:56;;;4140:38;1413:4:119;4140:11:126;:38::i;:::-;-1:-1:-1;4231:10:126;;-1:-1:-1;;;;;;;;;;4231:10:126;;;;;:14;4219:27;;;;;:11;;;;:27;;;;;;;4032:231::o;2119:386::-;2251:10;;2182:13;;-1:-1:-1;;;;;;;;2251:10:126;;;;;2292:12;2279:25;;2275:65;;2306:34;1315:4:119;2306:11:126;:34::i;:::-;-1:-1:-1;;2354:11:126;-1:-1:-1;;;;;2387:22:126;;;;;;;2354:11;2387;;:22;;;;;;;2423:29;;;2466:22;;;;;-1:-1:-1;;;2466:22:126;;;;;;;-1:-1:-1;2387:22:126;2119:386::o;2568:228:70:-;2694:10;2728:61;2759:8;2769:19;2728:30;:61::i;:::-;-1:-1:-1;2716:73:70;2568:228;-1:-1:-1;;;2568:228:70:o;1271:438::-;1371:14;1387:16;1416:10;1428:19;1451:115;1495:8;363:1:11;1451:30:70;:115::i;:::-;1415:151;;;;1584:5;1576:60;;;;-1:-1:-1;;;1576:60:70;;67275:2:132;1576:60:70;;;67257:21:132;67314:2;67294:18;;;67287:30;67353:34;67333:18;;;67326:62;-1:-1:-1;;;67404:18:132;;;67397:40;67454:19;;1576:60:70;67073:406:132;1576:60:70;1667:35;;-1:-1:-1;;;1667:35:70;;:4;;:27;;:35;;1695:6;;1667:35;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1646:56:70;;;;;;-1:-1:-1;1271:438:70;-1:-1:-1;;;;1271:438:70:o;3074:380:11:-;3163:11;;;3244:2;3226:20;;;;;:44;;-1:-1:-1;3268:2:11;3250:20;;;3226:44;3222:87;;;3279:30;;-1:-1:-1;;;3279:30:11;;;;;;;;;;;3222:87;3325:17;:7;;3340:1;3325:14;:17::i;:::-;3319:23;-1:-1:-1;3367:17:11;:7;;3381:2;3367:13;:17::i;:::-;3352:32;-1:-1:-1;3420:2:11;3402:20;;:45;;3446:1;3402:45;;;3425:18;:7;;3440:2;3425:14;:18::i;2420:271::-;2499:14;;2565:2;2547:20;;2543:67;;2576:34;;-1:-1:-1;;;2576:34:11;;;;;;;;;;;2543:67;2629:17;:7;;2644:1;2629:14;:17::i;:::-;2620:26;-1:-1:-1;2667:17:11;:7;;2681:2;2667:13;:17::i;:::-;2656:28;;2420:271;;;;;:::o;858:407:70:-;943:11;956:13;982:10;994:19;1017:113;1061:8;306:1:11;1017:30:70;:113::i;:::-;981:149;;;;1148:5;1140:59;;;;-1:-1:-1;;;1140:59:70;;68003:2:132;1140:59:70;;;67985:21:132;68042:2;68022:18;;;68015:30;68081:34;68061:18;;;68054:62;-1:-1:-1;;;68132:18:132;;;68125:39;68181:19;;1140:59:70;67801:405:132;1140:59:70;1224:34;;-1:-1:-1;;;1224:34:70;;:4;;:26;;:34;;1251:6;;1224:34;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1209:49:70;;;;;;;-1:-1:-1;858:407:70;-1:-1:-1;;;;858:407:70:o;2105:309:11:-;2183:11;;2243:2;2225:20;;;;;:44;;-1:-1:-1;2267:2:11;2249:20;;;2225:44;2221:90;;;2278:33;;-1:-1:-1;;;2278:33:11;;;;;;;;;;;2221:90;2327:17;:7;;2342:1;2327:14;:17::i;:::-;2321:23;-1:-1:-1;2380:2:11;2362:20;;:45;;2406:1;2362:45;;;2385:18;:7;;2400:2;2385:14;:18::i;2827:143:48:-;2892:7;2926:36;785:2;706;2926:7;;:36;:::i;2658:320:126:-;2784:12;;-1:-1:-1;;;;;2784:12:126;;;-1:-1:-1;;2784:16:126;;-1:-1:-1;;;2832:10:126;;;;2818:24;;;;2814:63;;2844:33;1536:4:119;2844:11:126;:33::i;:::-;-1:-1:-1;;;;;2891:23:126;;;;;:11;;;:23;;;;;:31;;;;2936:25;;-1:-1:-1;;;;;;2936:25:126;;;;2658:320::o;2802:2541:70:-;3012:10;;:27;;-1:-1:-1;;;3012:27:70;;2937:10;;2949:19;;2937:10;;-1:-1:-1;;;;;3012:10:70;;:17;;:27;;3030:8;;3012:27;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3012:27:70;;;;;;;;;;;;:::i;:::-;-1:-1:-1;3306:12:70;;;3050:14;3306:12;;;;;;;;;2980:59;;-1:-1:-1;3050:14:70;;;;;;;3329:1893;3345:12;:19;3336:6;:28;3329:1893;;;3438:45;;-1:-1:-1;;;3438:45:70;;3381:16;;;;;;3438:4;;:23;;:45;;3462:12;;3476:6;;3438:45;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3438:45:70;;;;;;;;;;;;:::i;:::-;3380:103;;;;;;3606:19;3592:33;;:10;:33;;;3588:1591;;3645:11;;;;;-1:-1:-1;;3802:51:70;;;;3798:1367;;3892:30;;-1:-1:-1;;;3892:30:70;;:4;;:26;;:30;;3919:2;;3892:30;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3877:45;;-1:-1:-1;3877:45:70;-1:-1:-1;3944:18:70;3877:45;3944:18;;:::i;:::-;;-1:-1:-1;3984:22:70;4001:5;3984:22;;:::i;:::-;;;4055:11;4068:13;4038:44;;;;;;;;70420:3:132;70416:16;;;-1:-1:-1;;;;;;70412:25:132;;;70400:38;;70472:16;;;;70468:25;70463:2;70454:12;;70447:47;70519:2;70510:12;;70185:343;4038:44:70;;;;;;;;;;;;;4028:54;;3798:1367;;;-1:-1:-1;;4111:53:70;;;;4107:1058;;4311:31;;-1:-1:-1;;;4311:31:70;;:4;;:27;;:31;;4339:2;;4311:31;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4291:51;;-1:-1:-1;4291:51:70;-1:-1:-1;4364:22:70;4291:51;4364:22;;:::i;:::-;4418:41;;-1:-1:-1;;;;;;70710:3:132;70706:16;;;70702:62;4418:41:70;;;70690:75:132;70781:12;;;70774:28;;;4364:22:70;;-1:-1:-1;70818:12:132;;4418:41:70;70533:303:132;4107:1058:70;-1:-1:-1;;4488:51:70;;;;4484:681;;4585:30;;-1:-1:-1;;;4585:30:70;;:4;;:26;;:30;;4612:2;;4585:30;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4563:52;;-1:-1:-1;4563:52:70;-1:-1:-1;4563:52:70;-1:-1:-1;4637:18:70;4563:52;4637:18;;:::i;:::-;;-1:-1:-1;4677:22:70;4694:5;4677:22;;:::i;:::-;4731:51;;-1:-1:-1;;;;;;71062:3:132;71040:16;;;71036:38;4731:51:70;;;71024::132;-1:-1:-1;;;;;;71170:3:132;71166:16;;;71162:25;;71149:11;;;71142:46;71222:16;;;71218:25;71204:12;;;71197:47;4677:22:70;;-1:-1:-1;71260:12:132;;4731:51:70;70841:437:132;4484:681:70;-1:-1:-1;;4811:48:70;;;;4807:358;;4904:27;;-1:-1:-1;;;4904:27:70;;:4;;:23;;:27;;4928:2;;4904:27;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4883:48;;-1:-1:-1;4883:48:70;;-1:-1:-1;4883:48:70;-1:-1:-1;4953:22:70;4883:48;4953:22;;:::i;:::-;;-1:-1:-1;4997:18:70;5012:3;4997:18;;:::i;:::-;;-1:-1:-1;5037:20:70;5053:4;5037:20;;:::i;:::-;5089:57;;-1:-1:-1;;;;;;71721:3:132;71717:16;;;71713:25;;5089:57:70;;;71701:38:132;-1:-1:-1;;;;;;71795:3:132;71773:16;;;71769:43;71755:12;;;71748:65;71847:16;;;71843:25;71829:12;;;71822:47;5037:20:70;;-1:-1:-1;71885:12:132;;5089:57:70;;;;;;;;;;;;5079:67;;4807:358;3627:1552;;;;;3588:1591;5201:10;-1:-1:-1;3329:1893:70;;-1:-1:-1;;3329:1893:70;;5236:7;:14;5254:1;5236:19;5232:73;;5279:5;;-1:-1:-1;5286:7:70;-1:-1:-1;5271:23:70;;-1:-1:-1;;;;;5271:23:70;5232:73;5322:4;;5328:7;;-1:-1:-1;2802:2541:70;-1:-1:-1;;;;;;;;2802:2541:70:o;229:215:41:-;306:6;371:1;362:10;;407:18;362:10;:6;407;;:18;:::i;:::-;400:26;;;:::i;:::-;393:34;;;229:215;-1:-1:-1;;;;;229:215:41:o;892:220::-;970:7;1036:2;1027:11;;1075:18;1027:11;:6;1075;;:18;:::i;:::-;1067:27;;;:::i;:::-;1059:36;;;892:220;-1:-1:-1;;;;;892:220:41:o;95:128::-;171:5;201:6;;208;201:14;;;;;;;:::i;:::-;;;;;;;;;95:128;-1:-1:-1;;;;;95:128:41:o;1776:194:119:-;1881:10;1875:4;1868:24;1918:4;1912;1905:18;1949:4;1943;1936:18;450:215:41;527:6;592:1;583:10;;628:18;583:10;:6;628;;:18;:::i;:::-;621:26;;;:::i;:::-;614:34;;;450:215;-1:-1:-1;;;;;450:215:41:o;1570:210::-;1647:7;1713:2;1704:11;;1744:18;1704:11;:6;1744;;:18;:::i;:::-;1736:27;;;:::i;:::-;1729:34;1570:210;-1:-1:-1;;;;;1570:210:41:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;14:121:132;99:10;92:5;88:22;81:5;78:33;68:61;;125:1;122;115:12;68:61;14:121;:::o;140:131::-;-1:-1:-1;;;;;215:31:132;;205:42;;195:70;;261:1;258;251:12;276:386;343:6;351;404:2;392:9;383:7;379:23;375:32;372:52;;;420:1;417;410:12;372:52;459:9;446:23;478:30;502:5;478:30;:::i;:::-;527:5;-1:-1:-1;584:2:132;569:18;;556:32;597:33;556:32;597:33;:::i;:::-;649:7;639:17;;;276:386;;;;;:::o;667:347::-;718:8;728:6;782:3;775:4;767:6;763:17;759:27;749:55;;800:1;797;790:12;749:55;-1:-1:-1;823:20:132;;-1:-1:-1;;;;;855:30:132;;852:50;;;898:1;895;888:12;852:50;935:4;927:6;923:17;911:29;;987:3;980:4;971:6;963;959:19;955:30;952:39;949:59;;;1004:1;1001;994:12;1019:127;1080:10;1075:3;1071:20;1068:1;1061:31;1111:4;1108:1;1101:15;1135:4;1132:1;1125:15;1151:254;1224:2;1218:9;1266:4;1254:17;;-1:-1:-1;;;;;1286:34:132;;1322:22;;;1283:62;1280:88;;;1348:18;;:::i;:::-;1384:2;1377:22;1151:254;:::o;1410:275::-;1481:2;1475:9;1546:2;1527:13;;-1:-1:-1;;1523:27:132;1511:40;;-1:-1:-1;;;;;1566:34:132;;1602:22;;;1563:62;1560:88;;;1628:18;;:::i;:::-;1664:2;1657:22;1410:275;;-1:-1:-1;1410:275:132:o;1690:186::-;1738:4;-1:-1:-1;;;;;1763:6:132;1760:30;1757:56;;;1793:18;;:::i;:::-;-1:-1:-1;1859:2:132;1838:15;-1:-1:-1;;1834:29:132;1865:4;1830:40;;1690:186::o;1881:462::-;1923:5;1976:3;1969:4;1961:6;1957:17;1953:27;1943:55;;1994:1;1991;1984:12;1943:55;2030:6;2017:20;2061:48;2077:31;2105:2;2077:31;:::i;:::-;2061:48;:::i;:::-;2134:2;2125:7;2118:19;2180:3;2173:4;2168:2;2160:6;2156:15;2152:26;2149:35;2146:55;;;2197:1;2194;2187:12;2146:55;2262:2;2255:4;2247:6;2243:17;2236:4;2227:7;2223:18;2210:55;2310:1;2285:16;;;2303:4;2281:27;2274:38;;;;2289:7;1881:462;-1:-1:-1;;;1881:462:132:o;2348:826::-;2454:6;2462;2470;2478;2531:2;2519:9;2510:7;2506:23;2502:32;2499:52;;;2547:1;2544;2537:12;2499:52;2587:9;2574:23;-1:-1:-1;;;;;2657:2:132;2649:6;2646:14;2643:34;;;2673:1;2670;2663:12;2643:34;2712:58;2762:7;2753:6;2742:9;2738:22;2712:58;:::i;:::-;2789:8;;-1:-1:-1;2686:84:132;-1:-1:-1;2877:2:132;2862:18;;2849:32;;-1:-1:-1;2893:16:132;;;2890:36;;;2922:1;2919;2912:12;2890:36;2945:51;2988:7;2977:8;2966:9;2962:24;2945:51;:::i;:::-;2935:61;;3049:2;3038:9;3034:18;3021:32;3005:48;;3078:2;3068:8;3065:16;3062:36;;;3094:1;3091;3084:12;3062:36;;3117:51;3160:7;3149:8;3138:9;3134:24;3117:51;:::i;:::-;3107:61;;;2348:826;;;;;;;:::o;3593:114::-;3677:4;3670:5;3666:16;3659:5;3656:27;3646:55;;3697:1;3694;3687:12;3712:152;3789:20;;3838:1;3828:12;;3818:40;;3854:1;3851;3844:12;3869:343;3952:6;3960;4013:2;4001:9;3992:7;3988:23;3984:32;3981:52;;;4029:1;4026;4019:12;3981:52;4068:9;4055:23;4087:29;4110:5;4087:29;:::i;:::-;4135:5;-1:-1:-1;4159:47:132;4202:2;4187:18;;4159:47;:::i;4217:465::-;4270:3;4308:5;4302:12;4335:6;4330:3;4323:19;4361:4;4390;4385:3;4381:14;4374:21;;4429:4;4422:5;4418:16;4452:1;4462:195;4476:6;4473:1;4470:13;4462:195;;;4541:13;;-1:-1:-1;;;;;4537:39:132;4525:52;;4597:12;;;;4632:15;;;;4573:1;4491:9;4462:195;;;-1:-1:-1;4673:3:132;;4217:465;-1:-1:-1;;;;;4217:465:132:o;4687:261::-;4866:2;4855:9;4848:21;4829:4;4886:56;4938:2;4927:9;4923:18;4915:6;4886:56;:::i;5176:588::-;5258:6;5266;5274;5327:2;5315:9;5306:7;5302:23;5298:32;5295:52;;;5343:1;5340;5333:12;5295:52;5383:9;5370:23;-1:-1:-1;;;;;5408:6:132;5405:30;5402:50;;;5448:1;5445;5438:12;5402:50;5471:49;5512:7;5503:6;5492:9;5488:22;5471:49;:::i;:::-;5461:59;;;5570:2;5559:9;5555:18;5542:32;5583:29;5606:5;5583:29;:::i;:::-;5631:5;-1:-1:-1;5688:2:132;5673:18;;5660:32;5701:31;5660:32;5701:31;:::i;:::-;5751:7;5741:17;;;5176:588;;;;;:::o;5769:250::-;5854:1;5864:113;5878:6;5875:1;5872:13;5864:113;;;5954:11;;;5948:18;5935:11;;;5928:39;5900:2;5893:10;5864:113;;;-1:-1:-1;;6011:1:132;5993:16;;5986:27;5769:250::o;6024:271::-;6066:3;6104:5;6098:12;6131:6;6126:3;6119:19;6147:76;6216:6;6209:4;6204:3;6200:14;6193:4;6186:5;6182:16;6147:76;:::i;:::-;6277:2;6256:15;-1:-1:-1;;6252:29:132;6243:39;;;;6284:4;6239:50;;6024:271;-1:-1:-1;;6024:271:132:o;6300:598::-;6352:3;6383;6415:5;6409:12;6442:6;6437:3;6430:19;6468:4;6497;6492:3;6488:14;6481:21;;6555:4;6545:6;6542:1;6538:14;6531:5;6527:26;6523:37;6594:4;6587:5;6583:16;6617:1;6627:245;6641:6;6638:1;6635:13;6627:245;;;6728:2;6724:7;6716:5;6710:4;6706:16;6702:30;6697:3;6690:43;6754:38;6787:4;6778:6;6772:13;6754:38;:::i;:::-;6850:12;;;;6746:46;-1:-1:-1;6815:15:132;;;;6663:1;6656:9;6627:245;;;-1:-1:-1;6888:4:132;;6300:598;-1:-1:-1;;;;;;;6300:598:132:o;6903:1077::-;7109:4;7138:2;7178;7167:9;7163:18;7208:2;7197:9;7190:21;7231:6;7266;7260:13;7297:6;7289;7282:22;7323:2;7313:12;;7356:2;7345:9;7341:18;7334:25;;7418:2;7408:6;7405:1;7401:14;7390:9;7386:30;7382:39;7456:2;7448:6;7444:15;7477:1;7487:464;7501:6;7498:1;7495:13;7487:464;;;7566:22;;;-1:-1:-1;;7562:36:132;7550:49;;7622:13;;7667:9;;-1:-1:-1;;;;;7663:35:132;7648:51;;7738:11;;7732:18;7770:15;;;7763:27;;;7813:58;7855:15;;;7732:18;7813:58;:::i;:::-;7929:12;;;;7803:68;-1:-1:-1;;7894:15:132;;;;7523:1;7516:9;7487:464;;;-1:-1:-1;7968:6:132;;6903:1077;-1:-1:-1;;;;;;;;6903:1077:132:o;7985:1114::-;8108:6;8116;8124;8132;8140;8148;8156;8209:3;8197:9;8188:7;8184:23;8180:33;8177:53;;;8226:1;8223;8216:12;8177:53;8265:9;8252:23;8284:30;8308:5;8284:30;:::i;:::-;8333:5;-1:-1:-1;8390:2:132;8375:18;;8362:32;8403:33;8362:32;8403:33;:::i;:::-;8455:7;-1:-1:-1;8513:2:132;8498:18;;8485:32;-1:-1:-1;;;;;8566:14:132;;;8563:34;;;8593:1;8590;8583:12;8563:34;8616:49;8657:7;8648:6;8637:9;8633:22;8616:49;:::i;:::-;8606:59;;8712:2;8701:9;8697:18;8684:32;8674:42;;8768:3;8757:9;8753:19;8740:33;8725:48;;8782:33;8807:7;8782:33;:::i;:::-;8834:7;;-1:-1:-1;8894:3:132;8879:19;;8866:33;;8911:16;;;8908:36;;;8940:1;8937;8930:12;8908:36;;8979:60;9031:7;9020:8;9009:9;9005:24;8979:60;:::i;:::-;7985:1114;;;;-1:-1:-1;7985:1114:132;;-1:-1:-1;7985:1114:132;;;;8953:86;;-1:-1:-1;;;7985:1114:132:o;9104:409::-;9174:6;9182;9235:2;9223:9;9214:7;9210:23;9206:32;9203:52;;;9251:1;9248;9241:12;9203:52;9291:9;9278:23;-1:-1:-1;;;;;9316:6:132;9313:30;9310:50;;;9356:1;9353;9346:12;9310:50;9395:58;9445:7;9436:6;9425:9;9421:22;9395:58;:::i;:::-;9472:8;;9369:84;;-1:-1:-1;9104:409:132;-1:-1:-1;;;;9104:409:132:o;10121:117::-;10206:6;10199:5;10195:18;10188:5;10185:29;10175:57;;10228:1;10225;10218:12;10243:313;10310:6;10318;10371:2;10359:9;10350:7;10346:23;10342:32;10339:52;;;10387:1;10384;10377:12;10339:52;10426:9;10413:23;10445:30;10469:5;10445:30;:::i;:::-;10494:5;10546:2;10531:18;;;;10518:32;;-1:-1:-1;;;10243:313:132:o;10753:628::-;10841:6;10849;10857;10910:2;10898:9;10889:7;10885:23;10881:32;10878:52;;;10926:1;10923;10916:12;10878:52;10966:9;10953:23;-1:-1:-1;;;;;11036:2:132;11028:6;11025:14;11022:34;;;11052:1;11049;11042:12;11022:34;11091:58;11141:7;11132:6;11121:9;11117:22;11091:58;:::i;:::-;11168:8;;-1:-1:-1;11065:84:132;-1:-1:-1;11256:2:132;11241:18;;11228:32;;-1:-1:-1;11272:16:132;;;11269:36;;;11301:1;11298;11291:12;11269:36;;11324:51;11367:7;11356:8;11345:9;11341:24;11324:51;:::i;:::-;11314:61;;;10753:628;;;;;:::o;11386:183::-;11446:4;-1:-1:-1;;;;;11471:6:132;11468:30;11465:56;;;11501:18;;:::i;:::-;-1:-1:-1;11546:1:132;11542:14;11558:4;11538:25;;11386:183::o;11574:743::-;11628:5;11681:3;11674:4;11666:6;11662:17;11658:27;11648:55;;11699:1;11696;11689:12;11648:55;11735:6;11722:20;11761:4;11785:60;11801:43;11841:2;11801:43;:::i;11785:60::-;11867:3;11891:2;11886:3;11879:15;11919:4;11914:3;11910:14;11903:21;;11976:4;11970:2;11967:1;11963:10;11955:6;11951:23;11947:34;11933:48;;12004:3;11996:6;11993:15;11990:35;;;12021:1;12018;12011:12;11990:35;12057:4;12049:6;12045:17;12071:217;12087:6;12082:3;12079:15;12071:217;;;12167:3;12154:17;12184:31;12209:5;12184:31;:::i;:::-;12228:18;;12266:12;;;;12104;;12071:217;;;-1:-1:-1;12306:5:132;11574:743;-1:-1:-1;;;;;;11574:743:132:o;12322:1211::-;12439:6;12447;12500:2;12488:9;12479:7;12475:23;12471:32;12468:52;;;12516:1;12513;12506:12;12468:52;12556:9;12543:23;-1:-1:-1;;;;;12626:2:132;12618:6;12615:14;12612:34;;;12642:1;12639;12632:12;12612:34;12665:61;12718:7;12709:6;12698:9;12694:22;12665:61;:::i;:::-;12655:71;;12745:2;12735:12;;12800:2;12789:9;12785:18;12772:32;12829:2;12819:8;12816:16;12813:36;;;12845:1;12842;12835:12;12813:36;12868:24;;;-1:-1:-1;12923:4:132;12915:13;;12911:27;-1:-1:-1;12901:55:132;;12952:1;12949;12942:12;12901:55;12988:2;12975:16;13011:60;13027:43;13067:2;13027:43;:::i;13011:60::-;13105:15;;;13187:1;13183:10;;;;13175:19;;13171:28;;;13136:12;;;;13211:19;;;13208:39;;;13243:1;13240;13233:12;13208:39;13267:11;;;;13287:216;13303:6;13298:3;13295:15;13287:216;;;13383:3;13370:17;13400:30;13424:5;13400:30;:::i;:::-;13443:18;;13320:12;;;;13481;;;;13287:216;;;13522:5;13512:15;;;;;;;12322:1211;;;;;:::o;13538:1569::-;13742:4;13771:2;13811;13800:9;13796:18;13841:2;13830:9;13823:21;13864:6;13899;13893:13;13930:6;13922;13915:22;13956:2;13946:12;;13989:2;13978:9;13974:18;13967:25;;14051:2;14041:6;14038:1;14034:14;14023:9;14019:30;14015:39;14089:2;14081:6;14077:15;14110:1;14131;14141:937;14157:6;14152:3;14149:15;14141:937;;;14226:22;;;-1:-1:-1;;14222:36:132;14210:49;;14282:13;;14369:9;;-1:-1:-1;;;;;14365:35:132;14350:51;;14440:11;;14434:18;14472:15;;;14465:27;;;14553:19;;14322:15;;;14585:24;;;14675:21;;;;14720:1;;14643:2;14631:15;;;14734:236;14750:8;14745:3;14742:17;14734:236;;;14831:15;;-1:-1:-1;;;;;;14827:42:132;14813:57;;14939:17;;;;14778:1;14769:11;;;;;14896:14;;;;14734:236;;;-1:-1:-1;15056:12:132;;;;14993:5;-1:-1:-1;;;15021:15:132;;;;14183:1;14174:11;14141:937;;;-1:-1:-1;15095:6:132;;13538:1569;-1:-1:-1;;;;;;;;;13538:1569:132:o;15112:477::-;15191:6;15199;15207;15260:2;15248:9;15239:7;15235:23;15231:32;15228:52;;;15276:1;15273;15266:12;15228:52;15316:9;15303:23;-1:-1:-1;;;;;15341:6:132;15338:30;15335:50;;;15381:1;15378;15371:12;15335:50;15420:58;15470:7;15461:6;15450:9;15446:22;15420:58;:::i;:::-;15497:8;;15394:84;;-1:-1:-1;15579:2:132;15564:18;;;;15551:32;;15112:477;-1:-1:-1;;;;15112:477:132:o;15594:266::-;15682:6;15677:3;15670:19;15734:6;15727:5;15720:4;15715:3;15711:14;15698:43;-1:-1:-1;15786:1:132;15761:16;;;15779:4;15757:27;;;15750:38;;;;15842:2;15821:15;;;-1:-1:-1;;15817:29:132;15808:39;;;15804:50;;15594:266::o;15865:393::-;16086:4;16078:6;16074:17;16063:9;16056:36;16128:2;16123;16112:9;16108:18;16101:30;16037:4;16148:61;16205:2;16194:9;16190:18;16182:6;16174;16148:61;:::i;:::-;16140:69;;16245:6;16240:2;16229:9;16225:18;16218:34;15865:393;;;;;;;:::o;16263:348::-;16347:6;16400:2;16388:9;16379:7;16375:23;16371:32;16368:52;;;16416:1;16413;16406:12;16368:52;16456:9;16443:23;-1:-1:-1;;;;;16481:6:132;16478:30;16475:50;;;16521:1;16518;16511:12;16475:50;16544:61;16597:7;16588:6;16577:9;16573:22;16544:61;:::i;:::-;16534:71;16263:348;-1:-1:-1;;;;16263:348:132:o;16616:218::-;16763:2;16752:9;16745:21;16726:4;16783:45;16824:2;16813:9;16809:18;16801:6;16783:45;:::i;16839:732::-;16942:6;16950;16958;16966;16974;17027:3;17015:9;17006:7;17002:23;16998:33;16995:53;;;17044:1;17041;17034:12;16995:53;17083:9;17070:23;17102:30;17126:5;17102:30;:::i;:::-;17151:5;-1:-1:-1;17203:2:132;17188:18;;17175:32;;-1:-1:-1;17254:2:132;17239:18;;17226:32;;-1:-1:-1;17310:2:132;17295:18;;17282:32;17323:33;17282:32;17323:33;:::i;:::-;17375:7;-1:-1:-1;17433:3:132;17418:19;;17405:33;-1:-1:-1;;;;;17450:30:132;;17447:50;;;17493:1;17490;17483:12;17447:50;17516:49;17557:7;17548:6;17537:9;17533:22;17516:49;:::i;:::-;17506:59;;;16839:732;;;;;;;;:::o;17576:280::-;17775:2;17764:9;17757:21;17738:4;17795:55;17846:2;17835:9;17831:18;17823:6;17795:55;:::i;18753:832::-;18859:6;18867;18875;18883;18891;18944:3;18932:9;18923:7;18919:23;18915:33;18912:53;;;18961:1;18958;18951:12;18912:53;19001:9;18988:23;-1:-1:-1;;;;;19071:2:132;19063:6;19060:14;19057:34;;;19087:1;19084;19077:12;19057:34;19126:58;19176:7;19167:6;19156:9;19152:22;19126:58;:::i;:::-;19203:8;;-1:-1:-1;19100:84:132;-1:-1:-1;19291:2:132;19276:18;;19263:32;;-1:-1:-1;19307:16:132;;;19304:36;;;19336:1;19333;19326:12;19304:36;;19359:51;19402:7;19391:8;19380:9;19376:24;19359:51;:::i;:::-;19349:61;;;19457:2;19446:9;19442:18;19429:32;19419:42;;19511:2;19500:9;19496:18;19483:32;19524:31;19549:5;19524:31;:::i;:::-;19574:5;19564:15;;;18753:832;;;;;;;;:::o;19590:271::-;19673:6;19726:2;19714:9;19705:7;19701:23;19697:32;19694:52;;;19742:1;19739;19732:12;19694:52;19781:9;19768:23;19800:31;19825:5;19800:31;:::i;20048:313::-;20115:6;20123;20176:2;20164:9;20155:7;20151:23;20147:32;20144:52;;;20192:1;20189;20182:12;20144:52;20231:9;20218:23;20250:30;20274:5;20250:30;:::i;20660:579::-;20777:6;20785;20793;20846:2;20834:9;20825:7;20821:23;20817:32;20814:52;;;20862:1;20859;20852:12;20814:52;20901:9;20888:23;20920:29;20943:5;20920:29;:::i;:::-;20968:5;-1:-1:-1;20992:47:132;21035:2;21020:18;;20992:47;:::i;:::-;20982:57;;21090:2;21079:9;21075:18;21062:32;-1:-1:-1;;;;;21109:6:132;21106:30;21103:50;;;21149:1;21146;21139:12;21103:50;21172:61;21225:7;21216:6;21205:9;21201:22;21172:61;:::i;21244:146::-;-1:-1:-1;;;;;21323:5:132;21319:46;21312:5;21309:57;21299:85;;21380:1;21377;21370:12;21395:247;21454:6;21507:2;21495:9;21486:7;21482:23;21478:32;21475:52;;;21523:1;21520;21513:12;21475:52;21562:9;21549:23;21581:31;21606:5;21581:31;:::i;21971:717::-;22061:6;22069;22077;22085;22138:2;22126:9;22117:7;22113:23;22109:32;22106:52;;;22154:1;22151;22144:12;22106:52;22194:9;22181:23;-1:-1:-1;;;;;22264:2:132;22256:6;22253:14;22250:34;;;22280:1;22277;22270:12;22250:34;22319:58;22369:7;22360:6;22349:9;22345:22;22319:58;:::i;:::-;22396:8;;-1:-1:-1;22293:84:132;-1:-1:-1;22484:2:132;22469:18;;22456:32;;-1:-1:-1;22500:16:132;;;22497:36;;;22529:1;22526;22519:12;22497:36;;22568:60;22620:7;22609:8;22598:9;22594:24;22568:60;:::i;:::-;21971:717;;;;-1:-1:-1;22647:8:132;-1:-1:-1;;;;21971:717:132:o;23050:689::-;22876:12;;22890:10;22872:29;22860:42;;22951:4;22940:16;;;22934:23;22918:14;;;22911:47;23011:4;23000:16;;;22994:23;-1:-1:-1;;;;;22990:48:132;22974:14;;;22967:72;23465:1;23461;23456:3;23452:11;23448:19;23440:6;23436:32;23431:2;23420:9;23416:18;23409:60;23506:6;23500:3;23489:9;23485:19;23478:35;23550:3;23544;23533:9;23529:19;23522:32;23338:4;23577:46;23618:3;23607:9;23603:19;23595:6;23577:46;:::i;:::-;23672:9;23664:6;23660:22;23654:3;23643:9;23639:19;23632:51;23700:33;23726:6;23718;23700:33;:::i;:::-;23692:41;23050:689;-1:-1:-1;;;;;;;;23050:689:132:o;23744:127::-;23805:10;23800:3;23796:20;23793:1;23786:31;23836:4;23833:1;23826:15;23860:4;23857:1;23850:15;23876:148;23964:4;23943:12;;;23957;;;23939:31;;23982:13;;23979:39;;;23998:18;;:::i;24419:151::-;24509:4;24502:12;;;24488;;;24484:31;;24527:14;;24524:40;;;24544:18;;:::i;24575:127::-;24636:10;24631:3;24627:20;24624:1;24617:31;24667:4;24664:1;24657:15;24691:4;24688:1;24681:15;24707:380;24786:1;24782:12;;;;24829;;;24850:61;;24904:4;24896:6;24892:17;24882:27;;24850:61;24957:2;24949:6;24946:14;24926:18;24923:38;24920:161;;25003:10;24998:3;24994:20;24991:1;24984:31;25038:4;25035:1;25028:15;25066:4;25063:1;25056:15;24920:161;;24707:380;;;:::o;25092:760::-;-1:-1:-1;;;;;25443:15:132;;;25425:34;;25495:15;;25490:2;25475:18;;25468:43;25542:2;25527:18;;25520:34;;;25602:6;25590:19;;25585:2;25570:18;;25563:47;25647:3;25641;25626:19;;25619:32;;;25368:4;;25674:62;;25716:19;;25708:6;25700;25674:62;:::i;:::-;25785:9;25777:6;25773:22;25767:3;25756:9;25752:19;25745:51;25813:33;25839:6;25831;25813:33;:::i;:::-;25805:41;25092:760;-1:-1:-1;;;;;;;;;;25092:760:132:o;26151:138::-;26230:13;;26252:31;26230:13;26252:31;:::i;26294:164::-;26370:13;;26419;;26412:21;26402:32;;26392:60;;26448:1;26445;26438:12;26463:330;26539:6;26547;26600:2;26588:9;26579:7;26575:23;26571:32;26568:52;;;26616:1;26613;26606:12;26568:52;26648:9;26642:16;26667:31;26692:5;26667:31;:::i;:::-;26717:5;-1:-1:-1;26741:46:132;26783:2;26768:18;;26741:46;:::i;26798:175::-;26876:13;;-1:-1:-1;;;;;26918:30:132;;26908:41;;26898:69;;26963:1;26960;26953:12;26978:134;27055:13;;27077:29;27055:13;27077:29;:::i;27117:460::-;27200:6;27208;27216;27269:2;27257:9;27248:7;27244:23;27240:32;27237:52;;;27285:1;27282;27275:12;27237:52;27308:39;27337:9;27308:39;:::i;:::-;27298:49;;27390:2;27379:9;27375:18;27369:25;27403:29;27426:5;27403:29;:::i;:::-;27501:2;27486:18;;27480:25;27451:5;;-1:-1:-1;27514:31:132;27480:25;27514:31;:::i;27984:441::-;28037:5;28090:3;28083:4;28075:6;28071:17;28067:27;28057:55;;28108:1;28105;28098:12;28057:55;28137:6;28131:13;28168:48;28184:31;28212:2;28184:31;:::i;28168:48::-;28241:2;28232:7;28225:19;28287:3;28280:4;28275:2;28267:6;28263:15;28259:26;28256:35;28253:55;;;28304:1;28301;28294:12;28253:55;28317:77;28391:2;28384:4;28375:7;28371:18;28364:4;28356:6;28352:17;28317:77;:::i;28430:335::-;28509:6;28562:2;28550:9;28541:7;28537:23;28533:32;28530:52;;;28578:1;28575;28568:12;28530:52;28611:9;28605:16;-1:-1:-1;;;;;28636:6:132;28633:30;28630:50;;;28676:1;28673;28666:12;28630:50;28699:60;28751:7;28742:6;28731:9;28727:22;28699:60;:::i;28770:740::-;28835:5;28888:3;28881:4;28873:6;28869:17;28865:27;28855:55;;28906:1;28903;28896:12;28855:55;28935:6;28929:13;28961:4;28985:60;29001:43;29041:2;29001:43;:::i;28985:60::-;29067:3;29091:2;29086:3;29079:15;29119:4;29114:3;29110:14;29103:21;;29176:4;29170:2;29167:1;29163:10;29155:6;29151:23;29147:34;29133:48;;29204:3;29196:6;29193:15;29190:35;;;29221:1;29218;29211:12;29190:35;29257:4;29249:6;29245:17;29271:210;29287:6;29282:3;29279:15;29271:210;;;29360:3;29354:10;29377:31;29402:5;29377:31;:::i;:::-;29421:18;;29459:12;;;;29304;;29271:210;;29515:1116;29612:6;29665:2;29653:9;29644:7;29640:23;29636:32;29633:52;;;29681:1;29678;29671:12;29633:52;29714:9;29708:16;-1:-1:-1;;;;;29784:2:132;29776:6;29773:14;29770:34;;;29800:1;29797;29790:12;29770:34;29823:22;;;;29879:4;29861:16;;;29857:27;29854:47;;;29897:1;29894;29887:12;29854:47;29923:23;;:::i;:::-;29969:32;29998:2;29969:32;:::i;:::-;29962:5;29955:47;30034:40;30070:2;30066;30062:11;30034:40;:::i;:::-;30029:2;30022:5;30018:14;30011:64;30107:40;30143:2;30139;30135:11;30107:40;:::i;:::-;30102:2;30095:5;30091:14;30084:64;30180:40;30216:2;30212;30208:11;30180:40;:::i;:::-;30175:2;30168:5;30164:14;30157:64;30260:3;30256:2;30252:12;30246:19;30290:2;30280:8;30277:16;30274:36;;;30306:1;30303;30296:12;30274:36;30343:67;30402:7;30391:8;30387:2;30383:17;30343:67;:::i;:::-;30337:3;30330:5;30326:15;30319:92;;30450:3;30446:2;30442:12;30436:19;30480:2;30470:8;30467:16;30464:36;;;30496:1;30493;30486:12;30464:36;30533:67;30592:7;30581:8;30577:2;30573:17;30533:67;:::i;:::-;30527:3;30516:15;;30509:92;-1:-1:-1;30520:5:132;29515:1116;-1:-1:-1;;;;;29515:1116:132:o;30636:271::-;30819:6;30811;30806:3;30793:33;30775:3;30845:16;;30870:13;;;30845:16;30636:271;-1:-1:-1;30636:271:132:o;30912:379::-;31123:2;31112:9;31105:21;31086:4;31143:45;31184:2;31173:9;31169:18;31161:6;31143:45;:::i;:::-;31135:53;;31224:6;31219:2;31208:9;31204:18;31197:34;31279:4;31271:6;31267:17;31262:2;31251:9;31247:18;31240:45;30912:379;;;;;;:::o;31296:125::-;31361:9;;;31382:10;;;31379:36;;;31395:18;;:::i;31426:474::-;31667:10;31655:23;;31637:42;;-1:-1:-1;;;;;31715:32:132;;31710:2;31695:18;;31688:60;31784:3;31779:2;31764:18;;31757:31;;;-1:-1:-1;;31805:46:132;;31831:19;;31823:6;31805:46;:::i;:::-;31797:54;;31887:6;31882:2;31871:9;31867:18;31860:34;31426:474;;;;;;;:::o;31905:184::-;31975:6;32028:2;32016:9;32007:7;32003:23;31999:32;31996:52;;;32044:1;32041;32034:12;31996:52;-1:-1:-1;32067:16:132;;31905:184;-1:-1:-1;31905:184:132:o;32094:1453::-;32298:4;32327:2;32367;32356:9;32352:18;32397:2;32386:9;32379:21;32420:6;32455;32449:13;32486:6;32478;32471:22;32512:2;32502:12;;32545:2;32534:9;32530:18;32523:25;;32607:2;32597:6;32594:1;32590:14;32579:9;32575:30;32571:39;32645:2;32637:6;32633:15;32666:1;32676:842;32690:6;32687:1;32684:13;32676:842;;;32755:22;;;-1:-1:-1;;32751:36:132;32739:49;;32811:13;;32883:9;;32894:10;32879:26;32864:42;;32953:11;;;32947:18;-1:-1:-1;;;;;32943:44:132;32926:15;;;32919:69;33027:11;;;33021:18;32847:4;33059:15;;;33052:27;;;32847:4;33106:48;33138:15;;;33021:18;33106:48;:::i;:::-;33092:62;;;33177:4;33232:2;33228;33224:11;33218:18;33213:2;33205:6;33201:15;33194:43;;33260:4;33313:2;33309;33305:11;33299:18;33277:40;;33366:6;33358;33354:19;33349:2;33341:6;33337:15;33330:44;;33397:41;33431:6;33415:14;33397:41;:::i;:::-;33496:12;;;;33387:51;-1:-1:-1;;;33461:15:132;;;;32712:1;32705:9;32676:842;;33552:289;33727:2;33716:9;33709:21;33690:4;33747:45;33788:2;33777:9;33773:18;33765:6;33747:45;:::i;:::-;33739:53;;33828:6;33823:2;33812:9;33808:18;33801:34;33552:289;;;;;:::o;34248:1121::-;34349:6;34402:2;34390:9;34381:7;34377:23;34373:32;34370:52;;;34418:1;34415;34408:12;34370:52;34451:9;34445:16;-1:-1:-1;;;;;34521:2:132;34513:6;34510:14;34507:34;;;34537:1;34534;34527:12;34507:34;34560:22;;;;34616:4;34598:16;;;34594:27;34591:47;;;34634:1;34631;34624:12;34591:47;34660:23;;:::i;:::-;34706:33;34736:2;34706:33;:::i;35374:359::-;35561:6;35556:3;35549:19;35531:3;35597:6;35591:13;35613:73;35679:6;35674:2;35669:3;35665:12;35660:2;35652:6;35648:15;35613:73;:::i;:::-;35706:16;;;;35724:2;35702:25;;35374:359;-1:-1:-1;;;35374:359:132:o;35738:360::-;35941:2;35930:9;35923:21;35904:4;35961:45;36002:2;35991:9;35987:18;35979:6;35961:45;:::i;:::-;36037:2;36022:18;;36015:34;;;;-1:-1:-1;36080:2:132;36065:18;36058:34;35953:53;35738:360;-1:-1:-1;35738:360:132:o;36103:244::-;36260:2;36249:9;36242:21;36223:4;36280:61;36337:2;36326:9;36322:18;36314:6;36306;36280:61;:::i;36630:280::-;36729:6;36782:2;36770:9;36761:7;36757:23;36753:32;36750:52;;;36798:1;36795;36788:12;36750:52;36830:9;36824:16;36849:31;36874:5;36849:31;:::i;36915:249::-;36984:6;37037:2;37025:9;37016:7;37012:23;37008:32;37005:52;;;37053:1;37050;37043:12;37005:52;37085:9;37079:16;37104:30;37128:5;37104:30;:::i;37793:136::-;37832:3;37860:5;37850:39;;37869:18;;:::i;:::-;-1:-1:-1;;;37905:18:132;;37793:136::o;37934:379::-;38127:2;38116:9;38109:21;38090:4;38153:45;38194:2;38183:9;38179:18;38171:6;38153:45;:::i;:::-;38246:9;38238:6;38234:22;38229:2;38218:9;38214:18;38207:50;38274:33;38300:6;38292;38274:33;:::i;38877:540::-;39116:2;39105:9;39098:21;39079:4;39142:45;39183:2;39172:9;39168:18;39160:6;39142:45;:::i;:::-;39235:9;39227:6;39223:22;39218:2;39207:9;39203:18;39196:50;39269:33;39295:6;39287;39269:33;:::i;:::-;39255:47;;39350:9;39342:6;39338:22;39333:2;39322:9;39318:18;39311:50;39378:33;39404:6;39396;39378:33;:::i;:::-;39370:41;38877:540;-1:-1:-1;;;;;;38877:540:132:o;39422:549::-;39671:3;39660:9;39653:22;39634:4;39698:46;39739:3;39728:9;39724:19;39716:6;39698:46;:::i;:::-;39792:9;39784:6;39780:22;39775:2;39764:9;39760:18;39753:50;39820:33;39846:6;39838;39820:33;:::i;:::-;39884:2;39869:18;;39862:34;;;;-1:-1:-1;;;;;;;39932:32:132;;;;39927:2;39912:18;;;39905:60;39812:41;39422:549;-1:-1:-1;;39422:549:132:o;40319:764::-;40644:10;40636:6;40632:23;40621:9;40614:42;40595:4;40692:1;40688;40683:3;40679:11;40675:19;40742:2;40734:6;40730:15;40725:2;40714:9;40710:18;40703:43;40782:3;40777:2;40766:9;40762:18;40755:31;40809:46;40850:3;40839:9;40835:19;40827:6;40809:46;:::i;:::-;40891:6;40886:2;40875:9;40871:18;40864:34;40947:2;40939:6;40935:15;40929:3;40918:9;40914:19;40907:44;41000:9;40992:6;40988:22;40982:3;40971:9;40967:19;40960:51;41028:49;41070:6;41062;41054;41028:49;:::i;:::-;41020:57;40319:764;-1:-1:-1;;;;;;;;;;;40319:764:132:o;41367:384::-;-1:-1:-1;;;;;;41552:33:132;;41540:46;;41609:13;;41522:3;;41631:74;41609:13;41694:1;41685:11;;41678:4;41666:17;;41631:74;:::i;:::-;41725:16;;;;41743:1;41721:24;;41367:384;-1:-1:-1;;;41367:384:132:o;41756:287::-;41885:3;41923:6;41917:13;41939:66;41998:6;41993:3;41986:4;41978:6;41974:17;41939:66;:::i;:::-;42021:16;;;;;41756:287;-1:-1:-1;;41756:287:132:o;42048:202::-;42115:6;42168:2;42156:9;42147:7;42143:23;42139:32;42136:52;;;42184:1;42181;42174:12;42136:52;42207:37;42234:9;42207:37;:::i;43598:127::-;43659:10;43654:3;43650:20;43647:1;43640:31;43690:4;43687:1;43680:15;43714:4;43711:1;43704:15;44198:827;44530:4;44576:1;44572;44567:3;44563:11;44559:19;44617:2;44609:6;44605:15;44594:9;44587:34;44669:2;44661:6;44657:15;44652:2;44641:9;44637:18;44630:43;44709:3;44704:2;44693:9;44689:18;44682:31;44736:57;44788:3;44777:9;44773:19;44765:6;44736:57;:::i;:::-;44841:2;44833:6;44829:15;44824:2;44813:9;44809:18;44802:43;44894:2;44886:6;44882:15;44876:3;44865:9;44861:19;44854:44;44947:9;44939:6;44935:22;44929:3;44918:9;44914:19;44907:51;44975:44;45012:6;45004;44975:44;:::i;45167:1385::-;45625:10;45617:6;45613:23;45602:9;45595:42;45576:4;45656:2;45706:4;45698:6;45694:17;45689:2;45678:9;45674:18;45667:45;45748:3;45743:2;45732:9;45728:18;45721:31;45775:57;45827:3;45816:9;45812:19;45804:6;45775:57;:::i;:::-;-1:-1:-1;;;;;45906:15:132;;;45901:2;45886:18;;45879:43;45959:22;;;45953:3;45938:19;;45931:51;46031:13;;46053:22;;;-1:-1:-1;46115:17:132;;;46103:2;46155:16;;;;46091:15;;46031:13;46199:177;46213:6;46210:1;46207:13;46199:177;;;46278:13;;46274:22;;46262:35;;46364:1;46352:14;;;;46317:12;;;;46228:9;46199:177;;;-1:-1:-1;;;;;;;22758:30:132;;46426:3;46411:19;;22746:43;46477:9;46472:3;46468:19;46462:3;46451:9;46447:19;46440:48;46505:41;46542:3;46534:6;46505:41;:::i;:::-;46497:49;45167:1385;-1:-1:-1;;;;;;;;;;;;;45167:1385:132:o;47736:2036::-;47962:4;47991:2;48031;48020:9;48016:18;48061:2;48050:9;48043:21;48084:6;48119;48113:13;48150:6;48142;48135:22;48176:2;48166:12;;48209:2;48198:9;48194:18;48187:25;;48271:2;48261:6;48258:1;48254:14;48243:9;48239:30;48235:39;48309:2;48301:6;48297:15;48330:1;48340:1403;48354:6;48351:1;48348:13;48340:1403;;;-1:-1:-1;;48449:22:132;;;48445:31;;48433:44;;48500:13;;48545:9;;48556:10;48541:26;48526:42;;48607:11;;48601:18;48639:15;;;48632:27;;;48700:19;;-1:-1:-1;;;;;48696:44:132;48679:15;;;48672:69;48782:21;;;48776:28;48852:4;48893:23;;;48827:2;48876:15;;;48869:48;;;;48958:21;;;48952:28;49043:23;;49003:3;49026:15;;;49019:48;;;;49108:21;;;49102:28;49193:23;;;49153:3;49176:15;;;49169:48;;;;49258:21;;;49252:28;49303:4;49327:15;;;49320:27;49252:28;49374:73;49442:3;49430:16;;49252:28;49374:73;:::i;:::-;49488:21;;49482:28;49552:19;;;49548:28;;49542:3;49530:16;;49523:54;49482:28;49360:87;-1:-1:-1;49600:63:132;49360:87;49482:28;49600:63;:::i;:::-;49721:12;;;;49590:73;-1:-1:-1;;;49686:15:132;;;;-1:-1:-1;48376:1:132;48369:9;48340:1403;;49777:1024;50040:2;50092:21;;;50162:13;;50065:18;;;50184:22;;;50011:4;;50040:2;50225;;50243:18;;;;50284:15;;;50011:4;50327:448;50341:6;50338:1;50335:13;50327:448;;;50400:13;;50475:9;;50436:10;50471:18;;;50459:31;;50529:11;;;50523:18;50579:19;;50575:28;;;50561:12;;;50554:50;50648:21;;50642:28;-1:-1:-1;;;;;50638:54:132;50624:12;;;50617:76;50722:4;50713:14;;;;50750:15;;;;50689:1;50356:9;50327:448;;;-1:-1:-1;50792:3:132;;49777:1024;-1:-1:-1;;;;;;;49777:1024:132:o;50806:251::-;50876:6;50929:2;50917:9;50908:7;50904:23;50900:32;50897:52;;;50945:1;50942;50935:12;50897:52;50977:9;50971:16;50996:31;51021:5;50996:31;:::i;51062:274::-;-1:-1:-1;;;;;51200:10:132;;;51212;;;51196:27;51243:20;;;;51134:34;51282:24;;;51272:58;;51310:18;;:::i;:::-;51272:58;;51062:274;;;;:::o;51341:1093::-;51570:2;51622:21;;;51692:13;;51595:18;;;51714:22;;;51541:4;;51570:2;51755;;51773:18;;;;51814:15;;;51541:4;51857:551;51871:6;51868:1;51865:13;51857:551;;;51930:13;;52005:9;;51966:10;52001:18;;;51989:31;;52059:11;;;52053:18;52109:19;;-1:-1:-1;;;;;52105:60:132;52091:12;;;52084:82;52210:21;;;52204:28;-1:-1:-1;;;;;52200:53:132;52186:12;;;52179:75;52298:21;;52292:28;52288:37;52283:2;52274:12;;52267:59;52355:4;52346:14;;;;52383:15;;;;51893:1;51886:9;51857:551;;52439:2045;52673:4;52702:2;52742;52731:9;52727:18;52772:2;52761:9;52754:21;52795:6;52830;52824:13;52861:6;52853;52846:22;52887:2;52877:12;;52920:2;52909:9;52905:18;52898:25;;52982:2;52972:6;52969:1;52965:14;52954:9;52950:30;52946:39;53020:2;53012:6;53008:15;53041:1;53051:1404;53065:6;53062:1;53059:13;53051:1404;;;-1:-1:-1;;53160:22:132;;;53156:31;;53144:44;;53211:13;;53256:9;;53267:10;53252:26;53237:42;;53318:11;;53312:18;53350:15;;;53343:27;;;53411:19;;-1:-1:-1;;;;;53407:45:132;53390:15;;;53383:70;53494:21;;;53488:28;53564:4;53605:23;;;53539:2;53588:15;;;53581:48;;;;53670:21;;;53664:28;53755:23;;53715:3;53738:15;;;53731:48;;;;53820:21;;;53814:28;53905:23;;;53440:3;53888:15;;;53881:48;;;;53970:21;;;53964:28;54015:4;54039:15;;;54032:27;53964:28;54086:73;54154:3;54142:16;;53964:28;54086:73;:::i;:::-;54200:21;;54194:28;54264:19;;;54260:28;;54254:3;54242:16;;54235:54;54194:28;54072:87;-1:-1:-1;54312:63:132;54072:87;54194:28;54312:63;:::i;:::-;54433:12;;;;54302:73;-1:-1:-1;;;54398:15:132;;;;-1:-1:-1;53087:1:132;53080:9;53051:1404;;54489:1355;54724:2;54776:21;;;54846:13;;54749:18;;;54868:22;;;54695:4;;54724:2;54909;;54927:18;;;;54968:15;;;54695:4;55011:807;55025:6;55022:1;55019:13;55011:807;;;55084:13;;55126:9;;55137:10;55122:26;55110:39;;55188:11;;;55182:18;-1:-1:-1;;;;;55275:21:132;;;55261:12;;;55254:43;55341:11;;;55335:18;55331:27;55317:12;;;55310:49;55382:4;55430:11;;;55424:18;55444:6;55420:31;55406:12;;;55399:53;55475:4;55520:11;;;55514:18;-1:-1:-1;;;;;55623:23:132;;;55609:12;;;55602:45;;;;55670:4;55718:11;;;55712:18;55708:27;55694:12;;;55687:49;55765:4;55756:14;;;;55793:15;;;;55047:1;55040:9;55011:807;;55849:1033;56084:2;56136:21;;;56206:13;;56109:18;;;56228:22;;;56055:4;;56084:2;56269;;56287:18;;;;56328:15;;;56055:4;56371:485;56385:6;56382:1;56379:13;56371:485;;;56444:13;;56486:9;;56497:10;56482:26;56470:39;;56553:11;;;56547:18;-1:-1:-1;;;;;56543:43:132;56529:12;;;56522:65;56631:11;;;56625:18;56645:6;56621:31;56607:12;;;56600:53;56676:4;56724:11;;;56718:18;-1:-1:-1;;;;;56714:59:132;56700:12;;;56693:81;56803:4;56794:14;;;;56831:15;;;;56407:1;56400:9;56371:485;;56887:843;57146:2;57198:21;;;57268:13;;57171:18;;;57290:22;;;57117:4;;57146:2;57331;;57349:18;;;;57390:15;;;57117:4;57433:271;57447:6;57444:1;57441:13;57433:271;;;57506:13;;57548:9;;57559:10;57544:26;57532:39;;57611:11;;57605:18;57591:12;;;57584:40;57644:12;;;;57679:15;;;;57469:1;57462:9;57433:271;;59435:715;22876:12;;22890:10;22872:29;22860:42;;22951:4;22940:16;;;22934:23;22918:14;;;22911:47;23011:4;23000:16;;;22994:23;-1:-1:-1;;;;;22990:48:132;22974:14;;;22967:72;59860:1;59856;59851:3;59847:11;59843:19;59835:6;59831:32;59826:2;59815:9;59811:18;59804:60;59901:6;59895:3;59884:9;59880:19;59873:35;59945:3;59939;59928:9;59924:19;59917:32;59733:4;59972:62;60029:3;60018:9;60014:19;60006:6;59998;59972:62;:::i;:::-;60083:9;60075:6;60071:22;60065:3;60054:9;60050:19;60043:51;60111:33;60137:6;60129;60111:33;:::i;:::-;60103:41;59435:715;-1:-1:-1;;;;;;;;;59435:715:132:o;60155:542::-;60256:2;60251:3;60248:11;60245:446;;;60292:1;60316:5;60313:1;60306:16;60360:4;60357:1;60347:18;60430:2;60418:10;60414:19;60411:1;60407:27;60401:4;60397:38;60466:4;60454:10;60451:20;60448:47;;;-1:-1:-1;60489:4:132;60448:47;60544:2;60539:3;60535:12;60532:1;60528:20;60522:4;60518:31;60508:41;;60599:82;60617:2;60610:5;60607:13;60599:82;;;60662:17;;;60643:1;60632:13;60599:82;;;60603:3;;;60155:542;;;:::o;60873:1214::-;-1:-1:-1;;;;;60990:3:132;60987:27;60984:53;;;61017:18;;:::i;:::-;61046:93;61135:3;61095:38;61127:4;61121:11;61095:38;:::i;:::-;61089:4;61046:93;:::i;:::-;61165:1;61190:2;61185:3;61182:11;61207:1;61202:627;;;;61873:1;61890:3;61887:93;;;-1:-1:-1;61946:19:132;;;61933:33;61887:93;-1:-1:-1;;60830:1:132;60826:11;;;60822:24;60818:29;60808:40;60854:1;60850:11;;;60805:57;61993:78;;61175:906;;61202:627;45114:1;45107:14;;;45151:4;45138:18;;-1:-1:-1;;61238:17:132;;;61350:9;61372:229;61386:7;61383:1;61380:14;61372:229;;;61475:19;;;61462:33;61447:49;;61582:4;61567:20;;;;61535:1;61523:14;;;;61402:12;61372:229;;;61376:3;61629;61620:7;61617:16;61614:159;;;61753:1;61749:6;61743:3;61737;61734:1;61730:11;61726:21;61722:34;61718:39;61705:9;61700:3;61696:19;61683:33;61679:79;61671:6;61664:95;61614:159;;;61816:1;61810:3;61807:1;61803:11;61799:19;61793:4;61786:33;61175:906;;;60873:1214;;;:::o;62092:331::-;62197:9;62208;62250:8;62238:10;62235:24;62232:44;;;62272:1;62269;62262:12;62232:44;62301:6;62291:8;62288:20;62285:40;;;62321:1;62318;62311:12;62285:40;-1:-1:-1;;62347:23:132;;;62392:25;;;;;-1:-1:-1;62092:331:132:o;62428:323::-;-1:-1:-1;;;;;;62548:19:132;;62624:11;;;;62655:1;62647:10;;62644:101;;;62716:1;62712:11;;;;62709:1;62705:19;62701:28;;;62693:37;62689:46;;;;62428:323;-1:-1:-1;;62428:323:132:o;63163:517::-;63250:6;63258;63266;63319:2;63307:9;63298:7;63294:23;63290:32;63287:52;;;63335:1;63332;63325:12;63287:52;63367:9;63361:16;63386:31;63411:5;63386:31;:::i;:::-;63486:2;63471:18;;63465:25;63436:5;;-1:-1:-1;63499:32:132;63465:25;63499:32;:::i;:::-;63602:2;63587:18;;63581:25;63550:7;;-1:-1:-1;63615:33:132;63581:25;63615:33;:::i;63685:255::-;63805:19;;63844:2;63836:11;;63833:101;;;-1:-1:-1;;63905:2:132;63901:12;;;63898:1;63894:20;63890:33;63879:45;63685:255;;;;:::o;63945:331::-;-1:-1:-1;;;;;;64065:19:132;;64149:11;;;;64180:1;64172:10;;64169:101;;;64241:1;64237:11;;;;64234:1;64230:19;64226:28;;;64218:37;64214:46;;;;63945:331;-1:-1:-1;;63945:331:132:o;64281:492::-;64456:3;64494:6;64488:13;64510:66;64569:6;64564:3;64557:4;64549:6;64545:17;64510:66;:::i;:::-;64639:13;;64598:16;;;;64661:70;64639:13;64598:16;64708:4;64696:17;;64661:70;:::i;:::-;64747:20;;64281:492;-1:-1:-1;;;;64281:492:132:o;65188:517::-;65275:6;65283;65291;65344:2;65332:9;65323:7;65319:23;65315:32;65312:52;;;65360:1;65357;65350:12;65312:52;65392:9;65386:16;65411:30;65435:5;65411:30;:::i;:::-;65510:2;65495:18;;65489:25;65460:5;;-1:-1:-1;65523:33:132;65489:25;65523:33;:::i;66356:369::-;66442:6;66450;66458;66511:2;66499:9;66490:7;66486:23;66482:32;66479:52;;;66527:1;66524;66517:12;66479:52;66559:9;66553:16;66578:29;66601:5;66578:29;:::i;:::-;66671:2;66656:18;;66650:25;66715:2;66700:18;;;66694:25;66626:5;;66650:25;;-1:-1:-1;66694:25:132;66356:369;-1:-1:-1;;;66356:369:132:o;67484:312::-;67563:6;67571;67624:2;67612:9;67603:7;67599:23;67595:32;67592:52;;;67640:1;67637;67630:12;67592:52;67672:9;67666:16;67691:31;67716:5;67691:31;:::i;:::-;67786:2;67771:18;;;;67765:25;67741:5;;67765:25;;-1:-1:-1;;;67484:312:132:o;68211:385::-;68290:6;68298;68351:2;68339:9;68330:7;68326:23;68322:32;68319:52;;;68367:1;68364;68357:12;68319:52;68399:9;68393:16;68418:31;68443:5;68418:31;:::i;:::-;68518:2;68503:18;;68497:25;68468:5;;-1:-1:-1;68531:33:132;68497:25;68531:33;:::i;68601:558::-;68698:6;68706;68759:2;68747:9;68738:7;68734:23;68730:32;68727:52;;;68775:1;68772;68765:12;68727:52;68808:9;68802:16;-1:-1:-1;;;;;68878:2:132;68870:6;68867:14;68864:34;;;68894:1;68891;68884:12;68864:34;68917:60;68969:7;68960:6;68949:9;68945:22;68917:60;:::i;:::-;68907:70;;69023:2;69012:9;69008:18;69002:25;68986:41;;69052:2;69042:8;69039:16;69036:36;;;69068:1;69065;69058:12;69036:36;;69091:62;69145:7;69134:8;69123:9;69119:24;69091:62;:::i;:::-;69081:72;;;68601:558;;;;;:::o;69458:520::-;69553:6;69561;69569;69622:2;69610:9;69601:7;69597:23;69593:32;69590:52;;;69638:1;69635;69628:12;69590:52;69670:9;69664:16;69689:29;69712:5;69689:29;:::i;:::-;69786:2;69771:18;;69765:25;69737:5;;-1:-1:-1;;;;;;69802:30:132;;69799:50;;;69845:1;69842;69835:12;69799:50;69868:60;69920:7;69911:6;69900:9;69896:22;69868:60;:::i;:::-;69858:70;;;69968:2;69957:9;69953:18;69947:25;69937:35;;69458:520;;;;;:::o;69983:197::-;-1:-1:-1;;;;;70105:10:132;;;70117;;;70101:27;;70140:11;;;70137:37;;;70154:18;;:::i;71283:172::-;71350:10;71380;;;71392;;;71376:27;;71415:11;;;71412:37;;;71429:18;;:::i;71908:318::-;-1:-1:-1;;;;;;72028:19:132;;72099:11;;;;72130:1;72122:10;;72119:101;;;72191:1;72187:11;;;;72184:1;72180:19;72176:28;;;72168:37;72164:46;;;;71908:318;-1:-1:-1;;71908:318:132:o;72231:345::-;-1:-1:-1;;;;;;72352:19:132;;72447:11;;;;72478:2;72470:11;;72467:103;;;72540:2;72536:12;;;;72533:1;72529:20;72525:29;;;72517:38;72513:47;;;;72231:345;-1:-1:-1;;72231:345:132:o", - "linkReferences": {} - }, - "methodIdentifiers": { - "DEFAULT_CHANNEL_ID()": "51aa318b", - "EVM_COMPUTE_MAP_BPS()": "0afba868", - "EVM_COMPUTE_REDUCE_FEE_USD()": "82411c77", - "EVM_REQUEST_FEE_USD()": "1766f5a4", - "IS_TEST()": "fa7626d4", - "MAP_REDUCE_COMPUTE_TYPES()": "b76bada5", - "NATIVE_TOKEN_PRICE_USD()": "699cbade", - "TREASURY_GAS_CAP()": "baead19c", - "TREASURY_GAS_FOR_FEE_CAP()": "b1dcf5c8", - "assertGuid(bytes,bytes32)": "997cff1b", - "createEndpoints(uint8,uint8,address[])": "d6d62497", - "decodeLzComposeOption(bytes)": "518e8ab0", - "decodeLzReadOption(bytes)": "9751ca86", - "decodeLzReceiveOption(bytes)": "f93e1d61", - "decodeNativeDropOption(bytes)": "b954fdf6", - "excludeArtifacts()": "b5508aa9", - "excludeContracts()": "e20c9f71", - "excludeSenders()": "1ed7831c", - "executorValueCap()": "2113ce62", - "failed()": "ba414fa6", - "getNextInflightPacket(uint16,bytes32)": "7982cf42", - "hasPendingPackets(uint16,bytes32)": "5ea0fefe", - "lzCompose(bytes,bytes,bytes32,address)": "a29c8984", - "lzCompose(uint32,address,bytes,bytes32,address,bytes)": "3bbd6a94", - "lzReadReceive(bytes,bytes,bytes)": "0a69faa9", - "lzReceive(bytes,bytes)": "ec53eaa0", - "nextExecutorOption(bytes,uint256)": "6e1775e3", - "registerEndpoint(address)": "ae6ce400", - "schedulePacket(bytes,bytes)": "faed6c58", - "setExecutorValueCap(uint128)": "defd9da6", - "setUp()": "0a9254e4", - "setUpEndpoints(uint8,uint8)": "1cc46525", - "setupOApps(bytes,uint8,uint8)": "2a35d250", - "targetArtifactSelectors()": "66d9a9a0", - "targetArtifacts()": "85226c81", - "targetContracts()": "3f7286f4", - "targetInterfaces()": "2ade3880", - "targetSelectors()": "916a17c6", - "targetSenders()": "3e5e3c23", - "validatePacket(bytes,bytes)": "60197889", - "verifyPackets(uint32,address)": "090852b6", - "verifyPackets(uint32,bytes32)": "b752b72a", - "verifyPackets(uint32,bytes32,uint256,address,bytes)": "834bd159", - "wireOApps(address[])": "703ca254", - "wireReadOApps(address[],uint32[])": "65449eb0" - }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"Executor_InvalidLzComposeOption\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Executor_InvalidLzReadOption\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Executor_InvalidLzReceiveOption\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Executor_InvalidNativeDropOption\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"name\":\"log\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"log_address\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"val\",\"type\":\"uint256[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"int256[]\",\"name\":\"val\",\"type\":\"int256[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"val\",\"type\":\"address[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"log_bytes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"log_bytes32\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"name\":\"log_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"val\",\"type\":\"address\"}],\"name\":\"log_named_address\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"val\",\"type\":\"uint256[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256[]\",\"name\":\"val\",\"type\":\"int256[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"val\",\"type\":\"address[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"val\",\"type\":\"bytes\"}],\"name\":\"log_named_bytes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"val\",\"type\":\"bytes32\"}],\"name\":\"log_named_bytes32\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"val\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"log_named_decimal_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"val\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"log_named_decimal_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"val\",\"type\":\"int256\"}],\"name\":\"log_named_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"val\",\"type\":\"string\"}],\"name\":\"log_named_string\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"val\",\"type\":\"uint256\"}],\"name\":\"log_named_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"name\":\"log_string\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"log_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"logs\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DEFAULT_CHANNEL_ID\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"EVM_COMPUTE_MAP_BPS\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"EVM_COMPUTE_REDUCE_FEE_USD\",\"outputs\":[{\"internalType\":\"uint120\",\"name\":\"\",\"type\":\"uint120\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"EVM_REQUEST_FEE_USD\",\"outputs\":[{\"internalType\":\"uint120\",\"name\":\"\",\"type\":\"uint120\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"IS_TEST\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAP_REDUCE_COMPUTE_TYPES\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"NATIVE_TOKEN_PRICE_USD\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"TREASURY_GAS_CAP\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"TREASURY_GAS_FOR_FEE_CAP\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"packetBytes\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"guid\",\"type\":\"bytes32\"}],\"name\":\"assertGuid\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"_endpointNum\",\"type\":\"uint8\"},{\"internalType\":\"enum TestHelperOz5.LibraryType\",\"name\":\"_libraryType\",\"type\":\"uint8\"},{\"internalType\":\"address[]\",\"name\":\"nativeTokenAddresses\",\"type\":\"address[]\"}],\"name\":\"createEndpoints\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_option\",\"type\":\"bytes\"}],\"name\":\"decodeLzComposeOption\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"index\",\"type\":\"uint16\"},{\"internalType\":\"uint128\",\"name\":\"gas\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_option\",\"type\":\"bytes\"}],\"name\":\"decodeLzReadOption\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"gas\",\"type\":\"uint128\"},{\"internalType\":\"uint32\",\"name\":\"size\",\"type\":\"uint32\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_option\",\"type\":\"bytes\"}],\"name\":\"decodeLzReceiveOption\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"gas\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"value\",\"type\":\"uint128\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_option\",\"type\":\"bytes\"}],\"name\":\"decodeNativeDropOption\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"amount\",\"type\":\"uint128\"},{\"internalType\":\"bytes32\",\"name\":\"receiver\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeArtifacts\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"excludedArtifacts_\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeContracts\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"excludedContracts_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeSenders\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"excludedSenders_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"executorValueCap\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"failed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"_dstEid\",\"type\":\"uint16\"},{\"internalType\":\"bytes32\",\"name\":\"_dstAddress\",\"type\":\"bytes32\"}],\"name\":\"getNextInflightPacket\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"packetBytes\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"_dstEid\",\"type\":\"uint16\"},{\"internalType\":\"bytes32\",\"name\":\"_dstAddress\",\"type\":\"bytes32\"}],\"name\":\"hasPendingPackets\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"flag\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_dstEid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_options\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"_guid\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_composerMsg\",\"type\":\"bytes\"}],\"name\":\"lzCompose\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_packetBytes\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_options\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"_guid\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"_composer\",\"type\":\"address\"}],\"name\":\"lzCompose\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_packetBytes\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_options\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_resolvedPayload\",\"type\":\"bytes\"}],\"name\":\"lzReadReceive\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_packetBytes\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_options\",\"type\":\"bytes\"}],\"name\":\"lzReceive\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_options\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_cursor\",\"type\":\"uint256\"}],\"name\":\"nextExecutorOption\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"optionType\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"option\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"cursor\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract EndpointV2Mock\",\"name\":\"endpoint\",\"type\":\"address\"}],\"name\":\"registerEndpoint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_packetBytes\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_options\",\"type\":\"bytes\"}],\"name\":\"schedulePacket\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint128\",\"name\":\"_valueCap\",\"type\":\"uint128\"}],\"name\":\"setExecutorValueCap\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"setUp\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"_endpointNum\",\"type\":\"uint8\"},{\"internalType\":\"enum TestHelperOz5.LibraryType\",\"name\":\"_libraryType\",\"type\":\"uint8\"}],\"name\":\"setUpEndpoints\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_oappCreationCode\",\"type\":\"bytes\"},{\"internalType\":\"uint8\",\"name\":\"_startEid\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"_oappNum\",\"type\":\"uint8\"}],\"name\":\"setupOApps\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"oapps\",\"type\":\"address[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetArtifactSelectors\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct StdInvariant.FuzzSelector[]\",\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetArtifacts\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"targetedArtifacts_\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetContracts\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"targetedContracts_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetInterfaces\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"string[]\",\"name\":\"artifacts\",\"type\":\"string[]\"}],\"internalType\":\"struct StdInvariant.FuzzInterface[]\",\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetSelectors\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct StdInvariant.FuzzSelector[]\",\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetSenders\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"targetedSenders_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_packetBytes\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_resolvedPayload\",\"type\":\"bytes\"}],\"name\":\"validatePacket\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_dstEid\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"_dstAddress\",\"type\":\"address\"}],\"name\":\"verifyPackets\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_dstAddress\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_packetAmount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_composer\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_resolvedPayload\",\"type\":\"bytes\"}],\"name\":\"verifyPackets\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_dstEid\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_dstAddress\",\"type\":\"bytes32\"}],\"name\":\"verifyPackets\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"oapps\",\"type\":\"address[]\"}],\"name\":\"wireOApps\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"oapps\",\"type\":\"address[]\"},{\"internalType\":\"uint32[]\",\"name\":\"channels\",\"type\":\"uint32[]\"}],\"name\":\"wireReadOApps\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"Extends Foundry's Test contract and provides utility functions for setting up mock endpoints and OApps.\",\"kind\":\"dev\",\"methods\":{\"createEndpoints(uint8,uint8,address[])\":{\"params\":{\"_endpointNum\":\"The number of endpoints to create.\",\"_libraryType\":\"The type of message library to use (UltraLightNode or SimpleMessageLib).\"}},\"schedulePacket(bytes,bytes)\":{\"details\":\"Adds the packet to the front of the queue and stores its options for later retrieval.\",\"params\":{\"_options\":\"The options associated with the packet, used during delivery.\",\"_packetBytes\":\"The packet data to be scheduled.\"}},\"setExecutorValueCap(uint128)\":{\"details\":\"set executorValueCap if more than 0.1 ether is necessarythis must be called prior to setUpEndpoints() if the value is to be used\",\"params\":{\"_valueCap\":\"amount executor can pass as msg.value to lzReceive()\"}},\"setUp()\":{\"details\":\"Initializes test environment setup, to be overridden by specific tests.\"},\"setupOApps(bytes,uint8,uint8)\":{\"params\":{\"_oappCreationCode\":\"The bytecode for creating OApp contracts.\",\"_oappNum\":\"The number of OApps to set up.\",\"_startEid\":\"The starting endpoint ID for OApp setup.\"},\"returns\":{\"oapps\":\"An array of addresses for the deployed OApps.\"}},\"verifyPackets(uint32,address)\":{\"details\":\"verify packets to destination chain's OApp address.\",\"params\":{\"_dstAddress\":\"The destination address.\",\"_dstEid\":\"The destination endpoint ID.\"}},\"verifyPackets(uint32,bytes32)\":{\"details\":\"Calls an overloaded version of verifyPackets with default values for packet amount and composer address.\",\"params\":{\"_dstAddress\":\"The destination address in bytes32 format.\",\"_dstEid\":\"The destination chain's endpoint ID.\"}},\"verifyPackets(uint32,bytes32,uint256,address,bytes)\":{\"details\":\"dst UA receive/execute packetswill NOT work calling this directly with composer IF the composed payload is different from the lzReceive msg payload\"},\"wireOApps(address[])\":{\"details\":\"Sets each OApp as a peer to every other OApp in the provided array, except itself.\",\"params\":{\"oapps\":\"An array of addresses representing the deployed OApp instances.\"}},\"wireReadOApps(address[],uint32[])\":{\"details\":\"Sets each OApp to read from the provided channels.\",\"params\":{\"channels\":\"An array of channel IDs to set as read channels.\",\"oapps\":\"An array of addresses representing the deployed OApp instances.\"}}},\"title\":\"TestHelperOz5\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"createEndpoints(uint8,uint8,address[])\":{\"notice\":\"Sets up endpoints for testing.\"},\"schedulePacket(bytes,bytes)\":{\"notice\":\"Schedules a packet for delivery, storing it in the packets queue.\"},\"setupOApps(bytes,uint8,uint8)\":{\"notice\":\"Sets up mock OApp contracts for testing.\"},\"verifyPackets(uint32,bytes32)\":{\"notice\":\"Verifies and processes packets destined for a specific chain and user address.\"},\"wireOApps(address[])\":{\"notice\":\"Configures the peers between multiple OApp instances.\"},\"wireReadOApps(address[],uint32[])\":{\"notice\":\"Configures the read channels for multiple OApp instances.\"}},\"notice\":\"Helper contract for setting up and managing LayerZero test environments.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/TestHelperOz5.sol\":\"TestHelperOz5\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/MessageLibBase.sol\":{\"keccak256\":\"0x14899a4398251439938d6ef8a15ea8c6acdddc98a7b0066d7e63676192dea0d1\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://3998d03de7025c2c601a4fdcaf9475d12a1ef661fcf1a685ece84fdde6498cf9\",\"dweb:/ipfs/QmReknRbiGAiPqq9toKyXKo6hUKXrQPJyyS6LnTGjiDKoY\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/ReceiveLibBaseE2.sol\":{\"keccak256\":\"0x2fdbd1b13751a264cd6e7fac518a2685b15c968806c03f1d18b177fc0526e9a9\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://600af48bb67939b5f4a3a00c76863ee290a55325ea8697f7cc4b46321ab26ef2\",\"dweb:/ipfs/QmdRigYaB6TXczjtVkvwpUEBwvvvDuymFoViMCB6xQPYUU\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/SendLibBase.sol\":{\"keccak256\":\"0x400eaa11c7d50b4c25b7625290ff00937b6875ad3986b353c37a4e62b5a834b1\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://1f51eb0785d3630815a9d63de1c1331fe966df4c3f2fb6750b8da7be9e9743a4\",\"dweb:/ipfs/QmaAEf1kjhhff3AUhRiPm6ikpk2YMMrpKc2ccYzNs7waBy\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/SendLibBaseE2.sol\":{\"keccak256\":\"0x90ada11d0a330732c56b989e59c8272b70f956a5d7be2cf209d6d51a51d35a9e\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://0abc7a6d07ec40a3a922256ad05bdd6eca10550d85bfd2e67147473617bb0497\",\"dweb:/ipfs/QmRDphmFhx1scRJXcusg6pUhVQvp941oCJwnHGAPdrNY4T\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IExecutor.sol\":{\"keccak256\":\"0x2fd26e454b060ede7afa15f8bbc67bd43f9181b6405ca411d36c8b538be016af\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cf2142e83214bb392f69ed14266718cfd803f849a7239ee9a1950ddf66553696\",\"dweb:/ipfs/QmSZ2mPMZqWBetMU8VESKtxy7UdSThUVmJmTFMHEyKLTGZ\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IExecutorFeeLib.sol\":{\"keccak256\":\"0x801d12eca6d6b232fb91d949cdb70a4c547c5e27e73555f2f1eb9e757c639bcc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b61bdffe26ff3902edab3efb0b5af3808ec9e28d72db95b77128502b9bc7638d\",\"dweb:/ipfs/Qmcyf3npDDEq28b9XqmXgSGyQegj2cxUZQ3UekSNf34g8M\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroExecutor.sol\":{\"keccak256\":\"0x3647af317ee126b1247a782abb30e59ec5ab21b4945f1d3b4370d1fa3c1bf347\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5b51cd5e7347ee869a06bd57a698f40e4a901ec7fdcb27f0ef485e4a0e1e9be4\",\"dweb:/ipfs/QmP2Nc73veRzLGdUahkjhQAiKR9ZWYiUtSGwoMB1sPXxUp\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroPriceFeed.sol\":{\"keccak256\":\"0xb4df72798a64f5ea44775b526e0c417c3de0ffc661659d7b31d5b28567c6fbcc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://30ca5fd5e3227a7bffc51654ee3bfebdd591a131f86846ac42dea8a40c5cf1d8\",\"dweb:/ipfs/QmXNmQCF8TZAFpUxgPa1rgWt4ktsBV38A8Hax7TiYLgybW\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroReadExecutor.sol\":{\"keccak256\":\"0x360936885f173f816ffb47e555d480928e74eb1ad54a76af0f4595ecba2d5657\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://16b5095e6439b1e416eb70571a1dd8f4f21a0d77b19c9e510ca289d99e5e09ab\",\"dweb:/ipfs/QmZ2mjQDQ35gJseyzmQhik4cBgN2ESADzofFNVFvgS64hv\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroTreasury.sol\":{\"keccak256\":\"0x2aab2a3cf50e20af56d9204b1367d52a47abba0b0c7c21f304d413de1ced6345\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f8b603b5e5e62c621715f8449280af240a4add8721c4ae8f5e8e491507f6e4c5\",\"dweb:/ipfs/QmUQ7Ti7CPmKnRbQFN9TLvVbeZhsi1xUjqZPTJ36dCZ6y8\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IWorker.sol\":{\"keccak256\":\"0xa6b61913767305227576cc6da5067de4208f09a4f58bfbfe32beafdfae9869b1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7fce83bfb831f383606aee7f5ff68a330c8526bb1036f9ba0813d3e4fa8d534\",\"dweb:/ipfs/QmR7zAqJkmCgBj6sguS8t2WthY5k6FwsakgH4UY11uqD4n\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/libs/ExecutorOptions.sol\":{\"keccak256\":\"0x441b723f2f597be2ec2bb361fcf3f11852c23534db1cfa7d2ffff7e61d228e3c\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://636817d20f90f75032e35376256cf5f4d2a047d6541b45f644d82a2e4dc8f1eb\",\"dweb:/ipfs/QmcEFRxCmmm9hKbqi7Powj6ATbw4JXXJW4rxfwMcxWsDnT\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/libs/SafeCall.sol\":{\"keccak256\":\"0xc3b7b7927472f7c1ca9703af310e9050c798afaccf399ad0f131e179b8582c8d\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://e5be13af32ff6b371985d405bc6fe8ac2faf5445bd88fda2dab4b869f66e3f89\",\"dweb:/ipfs/Qmd21k4H2tAHKrpiuHUbH87eNtHLLJzHj9ZCrMh8AKfDHh\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/ReceiveUlnBase.sol\":{\"keccak256\":\"0x36c93de122bbb74ae31e3eacf567c0a3bc649ed3ebb2766c76dfa93aebcace44\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://e83bcaa80e2715e68818dd53e4dc6ad8e665b8249d69a08cf2d2635b9757fb79\",\"dweb:/ipfs/QmSKh6NgaTrTSa48gDzGGqGNAcs5jVEHgZSzZzbuJSEsxo\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/SendUlnBase.sol\":{\"keccak256\":\"0x6d9962ffa476ac2efb78f1415bb2f650a30eedeef2b75fdab0aeafaf3e8da6a5\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://21f32c56b67d2e770444b809c1a85a96627194c605ad317d482dfc5b6ce7e8c2\",\"dweb:/ipfs/QmP5tzoMDzTdduEcSpYHgg6WCHLQGuc1djDMFUBycJPLCU\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/UlnBase.sol\":{\"keccak256\":\"0xfdb1d04f4996c0a9d35abfbfcf10d978da638885eb77d0a9dc35cea5993074e3\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://776d58d88d13b058f236cf18c32b4b9718a021513fc4e198287f4fe18ec5aba4\",\"dweb:/ipfs/QmdNX8jJu2aXJ8Dpbt2ohfhT8RKQLuvh58sW6SAXcUTcV9\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IDVN.sol\":{\"keccak256\":\"0x6becdfab6c1fcaf98f402bee48495895e54825f9d6eef6e292dde0caed628284\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2273341033856737cd46704a1a769768feae696d0e7a912f5be9de8ffdd2180c\",\"dweb:/ipfs/QmY1xBAmMX9jND1HAb7tDyZNPgFReXMqs1vtmHbShKZFQY\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IDVNFeeLib.sol\":{\"keccak256\":\"0xed4a8e77148328132d8f4f2726c4aeec6b490cf03a1d5940bde0ab8d72954de9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7b07802ca32bf10f68e51da872fb358807446dc2242314374d226493a6e9e7dc\",\"dweb:/ipfs/QmfSwWPLgitDy2a9S3mCNBDk6kAcK9n186Dtvj7qg84i12\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/ILayerZeroDVN.sol\":{\"keccak256\":\"0x308e77078242fd5c5746ec29c12e618249134f9e4377c0028ab8f59c07a6014b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2f92cf397a8d26864ac92dfcd1b98e92a32c47f556a62c5e6dc1618734c1caa3\",\"dweb:/ipfs/QmXN3XJXEKq5djV6HeM6jrLycmJPFhMhecsYZ2TaRsQmhg\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/ILayerZeroReadDVN.sol\":{\"keccak256\":\"0x759a3ee7614c2de54b152b0278845f91ac9760d8c22045b2fee89e3e744402b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7a2dbf6bcf5bfab408f18c104b34c390e8bfabb0eeb1a10e3a9c0fb14c8c61d5\",\"dweb:/ipfs/QmWxmRbDBkbhGmNsRyXqQXB1QaWRS4qvh6a8achh8DQPKR\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IReceiveUlnE2.sol\":{\"keccak256\":\"0xcdf7e690e5d5c0a3ec26a0d7b1a7fe49c7d16a3634721c3944f77d13ff5d4a91\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bd32a05dde1b83be1ce64fcfb9495d8b9bf0c5b3a5b521ac6c214e87e32f3cdc\",\"dweb:/ipfs/QmcDKTor8EQf3cbiWYmeFb9qzUM8JGPzGGN9qJnYjP1nN7\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/DVNOptions.sol\":{\"keccak256\":\"0x2beee03cdf59a9bc72e94d08b69cb2e908725f4ceabb48651494938100e21e35\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://d88e121a39e74309f3575417df2318e2d2ee8bc8314e68dbf78544a9c393b141\",\"dweb:/ipfs/QmRojBRAyENK21HnjevAWeoZZxtWkYZubB9Y78vCJPYeU6\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/ReadCmdCodecV1.sol\":{\"keccak256\":\"0x52fbab4a114ce9defb2ffd57c0a978eee438b2c232862f7e20475e0dcadd4eda\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://a4d5d4e186e3f2a916ea02c2d1d0761069ab1a5c0d6f74719bbf3501a7ccb899\",\"dweb:/ipfs/QmS2e12U9Fap2EK1CmSBTccL4PCKkHNdKJn2bXCqqKdbRn\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/SupportedCmdTypes.sol\":{\"keccak256\":\"0x6b2534522c163714e499041ecd06aaeb93857373cef82cf2752f162bb7c69f9a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bf6c3545c3b9505692dbfaa29b40cab5ed9dc9b65e5804b6f47b5a76596120e9\",\"dweb:/ipfs/QmNs98oRaMvpYhLCQ5yU256eYNEopFTrLRjjwm3gL4foQ3\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/UlnOptions.sol\":{\"keccak256\":\"0x5df07fef16b20767f7524c367d90f696c12e8ce0e4fde7aecc9d83fb2b6b0e27\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://0997203f57d736e56ebb3d736550f1c7ff7950c8df0574c7abe95e22f847b850\",\"dweb:/ipfs/QmZBjkH1vaPLyN3Jx9kGfVZKuTdfVWJfJVLSPok8SpjGbT\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/readlib/ReadLibBase.sol\":{\"keccak256\":\"0x7d312ba1e6288cb201b211f58b814eaaa0b5993721475fbc64321b0e7a2c74d3\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://dfc0dce9362eca0f03b51e0e808389c8bf51fda901e6ca58da169f165e4fc3c8\",\"dweb:/ipfs/QmSXAQ3veWf6gPXcgpX1XLZW9SyLQjBjCSdsFiQTttLNac\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/uln301/interfaces/IUltraLightNode301.sol\":{\"keccak256\":\"0x47f8ebeaa7d96a6f337a18c46e3c532da578c7cb0a13fb6e6f014286b991902f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d51f208b931be54e0ae1801c71c0756251d8c26f8d9b7911be1ad57b3d4a5691\",\"dweb:/ipfs/QmWqjst7jnYtSXQ9pakYHutDvENKLyqNg9nPfMxTH8p2Ed\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessageLibManager.sol\":{\"keccak256\":\"0x64330e51de72e8d38cfc0eb5527d36baada46df4bc14233d3a8ecaf98098d69a\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://49aa45e5a26fc62e7af569cf915be8344adc78dceb6871c4c14bc5d115e59241\",\"dweb:/ipfs/QmbTuW7kzPDYForDEPnaNQi6ZrmWqDxGVnHFiugnvTyq9K\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingChannel.sol\":{\"keccak256\":\"0x8ab8cb12c8beba699c1a7f22ffa812ac553f7038326d0c0d0af77253005cfe73\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://7c7cba4ae16d0ca46ee0a365a204f7257ceaa892224604bf7c8e65c44737e46c\",\"dweb:/ipfs/QmbQX5hJDKMwKdoo6QkdcusXQXH54SVCPe5hM1ycJZsg7y\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingComposer.sol\":{\"keccak256\":\"0x20d36578e810e75346daf064813b76a177087214cae77628b1f9d43798cb52d1\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://475b6f3f1ba5d981d0c5f90b9e892d4f9f539f3b12196639b95770b5be4dbf6a\",\"dweb:/ipfs/QmYyGrnR3vDt8Dqa2paQwTG9qrD6anAGFrDZmMra8KGC6s\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingContext.sol\":{\"keccak256\":\"0x9616f3bd0d7293c9723f2ddf86f9f7030fbd99213c9748557eec8f6d13b25420\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://205e713f5af46f52799e51774ac74dbeee4056de6ddba3c4d78a327536426c54\",\"dweb:/ipfs/QmZ2ZqDwxdjpJbh91qwMfRhhQu4AMEsjUcsTEsdRV4NAys\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroComposer.sol\":{\"keccak256\":\"0xfaca7205d4211ee9208a7e59171e2301731f3d2a20c49b4a839821871f5fdd49\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f254bc60ac26687b5320a43a556e30777b0745abf7cd64d5f4720d9b1d1f7fdf\",\"dweb:/ipfs/QmRSJEZVgxaC3L2DdE6s8P5qkYfM3V5JMeseeFJJqGR4xz\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\":{\"keccak256\":\"0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bacc29fd3866af71e59cb0bdc1cf82c882a4a7f4e2652fd413c9f12649762083\",\"dweb:/ipfs/QmZh2toLnrQDWaNYhS5K4NoW7Vxd2GdZx9KA77vKEDLAqs\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol\":{\"keccak256\":\"0x9641abba8d53b08bb517d1b74801dd15ea7b84d77a6719085bd96c8ea94e3ca0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://77415ae0820859e0faf3fabdce683cce9fa03ea026ae0f6fe081ef1c9205f933\",\"dweb:/ipfs/QmXd7APqoCunQ2jYy73AHvi5gsZofLpm3SzM6FPo7zRPfL\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol\":{\"keccak256\":\"0x5cf5f24751b4e3ea1c9c5ded07cedfdfd62566b6daaffcc0144733859c9dba0c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cae7e35007a714f007ea08045ef7c0cfa6c91fd2425b5028b2d49abad357a5f0\",\"dweb:/ipfs/QmcDBs5tsiyB35b8cwzWQWNnpkawb3uuHRaqE77Hxm2tve\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol\":{\"keccak256\":\"0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d8ff6a8a89297fa127f86b54e0db3eba1d6a6eeb4f6398d3c84d569665ac8f1b\",\"dweb:/ipfs/QmVSwhw6xFDrLRAX4RXaCM47yBaBtac4wf36DYEq6KCTvT\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol\":{\"keccak256\":\"0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7e1b245d58221d16d8b5e0f01ef3e289a24a7df1ace3b94239e4d5b954ad5927\",\"dweb:/ipfs/Qmappsgp7PCY9rSSNE9Cdn4BTRX591WfCSEgq2HxhA3z6S\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol\":{\"keccak256\":\"0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b18b23a1643fc6636c4ad9d9023e2e6ca2d3c2a4a046482d4655bff09950598d\",\"dweb:/ipfs/Qma6G5SqiovwrMPfgqTrRngK1HWW373Wkf9c6YP2NhXpPk\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol\":{\"keccak256\":\"0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5173fc9143bea314b159ca5a9adb5626659ef763bc598e27de5fa46efe3291a6\",\"dweb:/ipfs/QmSLFeMFPmVeGxT4sxRPW28ictjAS22M8rLeYRu9TXkA6D\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol\":{\"keccak256\":\"0xf1c07bc61e7b1dce195ed12d50f87980fbf2d63cac1326fd28287f55fe0ba625\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://060f10ff7afc33c1c2f2b4b5ba29231fd3c943146488084d0e4ab99fce991d97\",\"dweb:/ipfs/QmaSsefAqqEqtf8FgFUmDYMwTsAty3X1pqDb6SiFvry6B3\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol\":{\"keccak256\":\"0x2ebbcaaab3554edcd41b581f1a72ac1806afbfb8047d0d47ff098f9af30d6deb\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://2d4b2cf5c3b16dc76c6767f285b57c0af917972327b2be3f7cba5825402f5fc1\",\"dweb:/ipfs/QmQQWiHE2jKEDbjzGutSoZwtApSXYfLqZt5CxEpFj8xyvT\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/CalldataBytesLib.sol\":{\"keccak256\":\"0x5c0db161cef6603c3b256d4220f489419e7478ef775e52a80056654129c61875\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://a33245d0fdd3992bb56b31d1840108d36bb46c8d617b659ef1af8dd7ed86302d\",\"dweb:/ipfs/QmWyBqT7Tdrfn5zz9xYM3V1PBtfAZAVwwCrrKwwfi3wMQK\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Errors.sol\":{\"keccak256\":\"0x35bcd6ca99c4c8d9f7d8413d1b92fb4a4d4a420ce3bf64b0fb01e68e6bcf2fa7\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://0ac14f98563f9c610c936c93e71eff657efaba1e1d892be6a215aa5cb1f63a24\",\"dweb:/ipfs/QmVZZ8owwfDGLQTAzQJJqmYY4KsrChDagh5GBK7rChT5wb\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/GUID.sol\":{\"keccak256\":\"0x8a44524af7deb96593f6b5606e9973654a113e1687809f2e45d4a91ba89862d5\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://32dd0b5d1946e0cd5c7b728086aafac50a62c061115afb8b41254589c8a6732b\",\"dweb:/ipfs/QmR9QqtiAUPRLaRVv5wnth3NGPhdWB8rJmWYfz3o5Z1mWj\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Transfer.sol\":{\"keccak256\":\"0x621d6dd5b8b7e827351459fff4ac87c16ba4656757592cf67de8b199aea4cf9a\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://345aa8c007ed8b96a74260d289545713f1d7180df270d67687e3a540a61fa5c0\",\"dweb:/ipfs/QmNWCvpqSuar6UGLDVshUc7shUv3pt1J5FTf9VyZZ13wXL\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/BlockedMessageLib.sol\":{\"keccak256\":\"0xb2b55968b26294139742adee6c155897c8334f4c6bf72f1940456cc84e6fbab9\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://e758a1fdcea4039b19f1252e4e2958f4a0e05517eb3e151784431533446c225f\",\"dweb:/ipfs/QmRBG345abgyUeTnSpuxdK1WbK5pvwhSmvBEgW1mnoYqTq\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/BitMaps.sol\":{\"keccak256\":\"0xaad3c72ef43480d2253fd48b394e8fb7286d009991d2bc4e61be58ce48ac5ee9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b8c02b14f954416ba2148b389c87da8378ac8dd16ba3d458cbbfba8b0fd8639f\",\"dweb:/ipfs/Qmd2EEQhYL2VmgJi1V4uiHM2WcYxF9iBtxSgcFkbS21rQD\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/ExecutorOptions.sol\":{\"keccak256\":\"0x621c6090fc432f94a99f677a95d72b75f56db89ddc5fc870669777a313587c28\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://69086166f16d29e30c5eb9ca2f97afb27569afe619807d79736833a809a512d2\",\"dweb:/ipfs/QmcZqXjFuVdTrfbteKBF3GuEpjVFZ2YNZTa3J87dyLsqav\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol\":{\"keccak256\":\"0xc84cf1bf785977fe1fbe7566eef902c2db68d0e163813ebe6c34921754802680\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://de686666fc16fa432d4208d85cec87dc952faf3e481b683b9adf4b4610db4b09\",\"dweb:/ipfs/QmdmQeopzmxqRzi9DNB4EJDrYUXFfD7fUhnGhSni4QejUW\"]},\"node_modules/@layerzerolabs/lz-evm-v1-0.7/contracts/interfaces/ILayerZeroUltraLightNodeV2.sol\":{\"keccak256\":\"0xf1f36bbbc40d03b96affa151affb47da75a1b69dc79f4b311841a072d12fdd22\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://9f4f188c2998ecbda28a389ad8038da15c2260b1df6a8d135b3d96422e292fda\",\"dweb:/ipfs/QmeThR83tcaM4CmxQ2AamTafsgjcbGMfZtYcDHqw2CcwKa\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/OptionsHelper.sol\":{\"keccak256\":\"0x729ce2290d16a45a16ad936263803db6a6bebcfba5c063ebe0f0fd284ba828c0\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://7494875394fc968684761b22bb5fe05789f8d84ba07b2e0ab579ce0afe7aa973\",\"dweb:/ipfs/QmZNrexRXL3ef3UnES5e8JcdyMJ5HVftwGKQjGC5CwNg9Q\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/TestHelperOz5.sol\":{\"keccak256\":\"0xe60b21a345bb1c2e9ee2fb7301398d342da0acc3a730b442106a2ad9478f7a63\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://ee7e0a47ae666a16e33a51f946da4fe549e8f4c6ea1f1978850515172c44656f\",\"dweb:/ipfs/QmR2AZ9pYiwMCV4wPPVaGGPRJEjuBoFjJEesHtbAYhNoFq\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/DVNFeeLibMock.sol\":{\"keccak256\":\"0x4c2e212f73a1c2a2989af947eef715ebacb11a80d55e5fd18a89a905790971b1\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://30eb29a81414780828903f5320367e89020af5a4055b768e2be08d43605b1688\",\"dweb:/ipfs/QmeC5bVtmaY6tn6Z2XpVFXAkxVWQCQUzKbP2V9nPdv3vCr\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/DVNMock.sol\":{\"keccak256\":\"0xdafd7da964b6ac8637d543c30370739bb805f7e10b42043444689240b5c27b3f\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://154067632b4799f49c0b3a8c5304499f60b2c232ebd17c21912efdb72421bdab\",\"dweb:/ipfs/QmUEr6VsNt2odnrL3xFrLKwZTVLkLXi8BDzpPWeiCxC63T\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/EndpointV2AltMock.sol\":{\"keccak256\":\"0x026b2f530b336ee237f37dde6f617acefbbf74d933d2a80da4216882f78be1a9\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://097a9fdd5a321e6e8455a1db00f2abda6e810c31ce47d1bced9e574be262a28b\",\"dweb:/ipfs/Qme17zGk93k5BghCWFXqeqppVahH4dHuw7U76K4EcJxsY1\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/EndpointV2Mock.sol\":{\"keccak256\":\"0xe9096c53611537a121589b56b882fc4dd797d5cac60def708f794a15e3ca98ff\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://4092d5dd582b48a5f703e4361fc5fb66050b5fe3253891175275dc832bc8e045\",\"dweb:/ipfs/QmXSTJJNx4rn2ByCaE6vxiHnkm366ZU7dScYH1JsUbVZ1V\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ExecutorFeeLibMock.sol\":{\"keccak256\":\"0x4a47aaf41049710d5f05fcc66885cacc0dabc1864778b56ac75a59b61eef5a01\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://c9b8c26b38cb138c3225efbab8b1d2e0f43343798658a0f2ed9669c16e5a97ff\",\"dweb:/ipfs/QmV21G7Qwoi9gXYT8bKXDwnQDvjdZCAo2M9MqTKq4nQU9U\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ExecutorMock.sol\":{\"keccak256\":\"0xbcdc4500270cd5496f10760ffe9e0444d23e454dd0ae2555e0661acf22fce96f\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://b816999bcfef5586b5e80bba21584b821fd7f7b32c276492adee530ffa83bb73\",\"dweb:/ipfs/QmXLV8ieYdrTBERajBCVuMzknFyPHJjnw7MGkzULAdjdt8\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/MultiSigMock.sol\":{\"keccak256\":\"0xc7c90e073e52af1da6c07e3d3f7477b064a89e78935c16e9872457df503c6830\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://cef1ae2d517e152616aea7f8f5c15fa1fbabbec8896a9c30a9eed35fb56b4f2f\",\"dweb:/ipfs/QmeitPMQht2WfbR9ZLzwKWgThamdsJkobeaWo6ojTCoQG5\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/PriceFeedMock.sol\":{\"keccak256\":\"0xd8f419b25c648287b5b7f0923b069b2449c51e807c9153df39445f2f83e55f44\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://bb300a5bb62655073c7aa9cd2221e60e59ce904a0d73f7f5e06af7c9df3445ec\",\"dweb:/ipfs/QmcYb2qFevymfkWhTqGaNH5HwK9MMUixzAKJJAdNQHSCbw\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ReadLib1002Mock.sol\":{\"keccak256\":\"0x1403b7a91b185fd8211f00fa380a0b8918e92e663c403a1dafa30f1667091fdc\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://7494444260a981ae9a9e11cd8981fad35a6b45a9c09cf72c05aad88ee191e7f0\",\"dweb:/ipfs/QmaTyujm37PsCobQ36ootD5xVgKyBYqeUTdTJij9x3oaN6\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ReceiveUln302Mock.sol\":{\"keccak256\":\"0x8e60b01e9bc801167b374dc119b41832d546afd43c143a0cd15ab1941198e121\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://bb1512762417dda9cd81fd9b41f590fd05888358fda1c2ab7e79e0cfabf61ec4\",\"dweb:/ipfs/QmPAgBwdjLz29vE5L1Jth1Wvx6TTM1ig97amVtAyDFF61Q\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/SendUln302Mock.sol\":{\"keccak256\":\"0x0c5cb54ec6b18e77aa653f7d774ac9d010684dafc96794d1d02f12b6885cc348\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://24c5a8ba8d92c16ec3047229167528f57b38cbd64882140014126ca51ab14574\",\"dweb:/ipfs/QmXQsMDtZ3qNmjnr2LYgctBpPKxffuC6EeWHvFUtLBS5st\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/SimpleMessageLibMock.sol\":{\"keccak256\":\"0xe6c93840c612592686732dd516550816eb77d6cde92514220eacb72443dcb9b9\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://a6a00fb60b7ac66e746f0471c2262fc98febafeb8acad8785d38ce1ddc4cc991\",\"dweb:/ipfs/QmboboJskbXBbsyAGGRbW4JQCPJo9WiLFy7nwQxGVS9UhZ\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/WorkerMock.sol\":{\"keccak256\":\"0x6c5bc31c117033dd35fa7ab3b13b1647a4b449c5f5b4cbff41bce8a63529ab97\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://01aa1d3f3b8e2fd4b544312d96916b16b97e01ab740e2bae1137723b2f1a31b1\",\"dweb:/ipfs/QmVMemJ4MSgi6y9NxDdSeB6QbJRtCWojJNxzs3CRLT56EA\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/test.sol\":{\"keccak256\":\"0x8758531bbac3972efcf1fa46383dbe1d276406fe527bc7abb2f236486278e83b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://1f64264d61506847acf8761e84aff690cebe830958eac00bac7924d8be569240\",\"dweb:/ipfs/QmSekDJvJ82MZAmr63n7YvfLzQ7gS4NLSHPmHL3GN3rw8k\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Base.sol\":{\"keccak256\":\"0x4ff1a785311017d1eedb1b4737956fa383067ad34eb439abfec1d989754dde1c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f553622969b9fdb930246704a4c10dfaee6b1a4468c142fa7eb9dc292a438224\",\"dweb:/ipfs/QmcxqHnqdQsMVtgsfH9VNLmZ3g7GhgNagfq7yvNCDcCHFK\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdAssertions.sol\":{\"keccak256\":\"0x1a0dee4d8b2c81e9318e87dd85ef009467ebf7dba6575530d1fce94d34dbae60\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ddd790c86ddde1013d1f7a552a80168eacf2e9244077f96799180644ad523a5b\",\"dweb:/ipfs/QmYinBFt9uEVFXP9ytT9CDoNpzWieQVgLWRFRNiypMzJaL\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdChains.sol\":{\"keccak256\":\"0x598b85609125830885b8fb54a18f447d04f8dd799aca3de81baef35eb6b783c0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c9c128aae4f5668d8c8f71e9e6d9379d8451b8713d139cb66a02d23bc1c75f69\",\"dweb:/ipfs/QmVRihXHWi2yg9CcAhzKf63Y7m6gWz4P1giGMhXUHT3DFu\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdCheats.sol\":{\"keccak256\":\"0xb72f3519e0bf7d31df5d68557525f4fc55d861c3fb3b0f7793144ef7c94cbeb7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f3456d0f78e6f61203fa7871ba2df0d35925f10db3baee14be623ce2a35b84e2\",\"dweb:/ipfs/QmWE6QQSBvJifHMraisBTrf1x4WCwrDoTPLX8UKajTiApc\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdError.sol\":{\"keccak256\":\"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6\",\"dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdInvariant.sol\":{\"keccak256\":\"0x67299bfacd77fddfa2a67b8e2b901e0e333618a4975fb94850b07475e51f6de6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1b61121d310f4053ce344b345b4a9ccf43b059daf9097ec2647f594beaca896d\",\"dweb:/ipfs/QmZUCoTtXBM9zfAZVbj2dFPPnKaV1CSZzXE7zictyg3Gfz\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdJson.sol\":{\"keccak256\":\"0x8f914dbd016bd0e318fe2b8bd556fbc8256c7cddc24e3e4fcb9f3c1c1935592d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://19e704df493dde38323303b07d18cadfeb4dcadf1ddc2301add4aea9474fbb5e\",\"dweb:/ipfs/QmZasuGiLK8LHwWtvpqEBxUR6QFY6GdzLMTJ9q7CMf8PNZ\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdMath.sol\":{\"keccak256\":\"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92\",\"dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdStorage.sol\":{\"keccak256\":\"0x4298f3f4cedaedb07029820b1daad2c03af45379559392201f7bf3ec71105811\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6e062f36d8d1ae3c383ef8975757926eaa9c4de3a92b5f1fe2d12748bcd8db32\",\"dweb:/ipfs/QmcWkv3ia5Ew4DZNcudMNSTNXZ3W2QiXTZunRd44e9BT8z\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdStyle.sol\":{\"keccak256\":\"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8\",\"dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdUtils.sol\":{\"keccak256\":\"0x502b18a4becda6ecd91fa8b419d8034946bfa80e6cc7f6497f51f8565bfadae0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bf499ee483a1dfd02023d4ce78ed4029a49794ccd5b849aaab912faea0d2ba61\",\"dweb:/ipfs/QmP6hwNZW7sYbQK9fBzuZWxfLm6Swx2nKzvZ54qWNqQkzX\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Test.sol\":{\"keccak256\":\"0x39b1729d5868c8e94ab8af16751eb500a17fe3870dc627d2b7ddcd5df18d7ad0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1568c82aff125cc4b0fc168be9d67ac313f469a3c7405c5493caecaaaecfb765\",\"dweb:/ipfs/QmXByuZReJsdu1jDcxj1FcmpcUnzoBcqybn9kWgDAECWri\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Vm.sol\":{\"keccak256\":\"0x87ba9f3edc254e529db9e3129c954391adcc7fc8574203767979d8d2f1e724b9\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://4d16c08d80d9f2869deb6350642cf5af624d21fce6b3b023abbcdedc62e195fe\",\"dweb:/ipfs/QmURpnnFECPKt3i7P7jQRZpr4ZBXjRGcZ9KzcbKzsgYR2W\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/console.sol\":{\"keccak256\":\"0x91d5413c2434ca58fd278b6e1e79fd98d10c83931cc2596a6038eee4daeb34ba\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://91ccea707361e48b9b7a161fe81f496b9932bc471e9c4e4e1e9c283f2453cc70\",\"dweb:/ipfs/QmcB66sZhQ6Kz7MUHcLE78YXRUZxoZnnxZjN6yATsbB2ec\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/console2.sol\":{\"keccak256\":\"0x954646445d1014c3cd85c7918f5e7adeeca5ee44b68c00bafa237e597a4e35ea\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://516fa3be52da4763147175bfba4be0aa011fadbb0c1afb01f97265bd4cee7973\",\"dweb:/ipfs/QmdixAyMJefx7qePChgdxcBH5MxhmN7vsqPuPLx3CgrVmF\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/interfaces/IMulticall3.sol\":{\"keccak256\":\"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0\",\"dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/mocks/MockERC20.sol\":{\"keccak256\":\"0xd8703f49411737ecf8d411f8fa66b2bf0ef972ba28b7a4adf1748c63df1bf682\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7c10a6b8112f6fe3cdccb6240ecd382765216b1a82e9a86a0fec8f5e09eadd1\",\"dweb:/ipfs/QmdRvPCU4RkjMHsTu3Ric1ZEF1AWDNLp78unFC5aWP17xq\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/mocks/MockERC721.sol\":{\"keccak256\":\"0xa24468244abb66e663fb7eee6463cb518eb9a7c14e1071548ff564cca825bbca\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://145585a2194aa6e2d30edfe709ef2814e20b1b4540469aa6a8f50c841fcb9070\",\"dweb:/ipfs/QmZrwbvtpbtTxqbW5phUrwb3F1tBiPSQc6jZJAXBfsBsAh\"]},\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/safeconsole.sol\":{\"keccak256\":\"0xbaf41fdc6c54297e7cd8250e48b0f20eaac918e342a1028cef3f9a52ac086381\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a500ad81dea226f9910e6b50f99a9ff930105e393a692cbfb2185e4cdb4424ae\",\"dweb:/ipfs/QmVbUQpXNMmMWRiy4FvBNczzq46BMGfUoBikvSHNiCxVTq\"]},\"node_modules/@openzeppelin/contracts/access/AccessControl.sol\":{\"keccak256\":\"0xa0e92d42942f4f57c5be50568dac11e9d00c93efcb458026e18d2d9b9b2e7308\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://46326c0bb1e296b67185e81c918e0b40501b8b6386165855df0a3f3c634b6a80\",\"dweb:/ipfs/QmTwyrDYtsxsk6pymJTK94PnEpzsmkpUxFuzEiakDopy4Z\"]},\"node_modules/@openzeppelin/contracts/access/IAccessControl.sol\":{\"keccak256\":\"0xc1c2a7f1563b77050dc6d507db9f4ada5d042c1f6a9ddbffdc49c77cdc0a1606\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fd54abb96a6156d9a761f6fdad1d3004bc48d2d4fce47f40a3f91a7ae83fc3a1\",\"dweb:/ipfs/QmUrFSGkTDJ7WaZ6qPVVe3Gn5uN2viPb7x7QQ35UX4DofX\"]},\"node_modules/@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol\":{\"keccak256\":\"0x9b6b3e7803bc5f2f8cd7ad57db8ac1def61a9930a5a3107df4882e028a9605d7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://da62d6be1f5c6edf577f0cb45666a8aa9c2086a4bac87d95d65f02e2f4c36a4b\",\"dweb:/ipfs/QmNkpvBpoCMvX8JwAFNSc5XxJ2q5BXJpL5L1txb4QkqVFF\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC165.sol\":{\"keccak256\":\"0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://11fea9f8bc98949ac6709f0c1699db7430d2948137aa94d5a9e95a91f61a710a\",\"dweb:/ipfs/QmQdfRXxQjwP6yn3DVo1GHPpriKNcFghSPi94Z1oKEFUNS\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC20.sol\":{\"keccak256\":\"0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a2608291cb038b388d80b79a06b6118a42f7894ff67b7da10ec0dbbf5b2973ba\",\"dweb:/ipfs/QmWohqcBLbcxmA4eGPhZDXe5RYMMEEpFq22nfkaUMvTfw1\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db\",\"dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0xca2ae13e0610f6a99238dd00b97bd786bc92732dae6d6b9d61f573ec51018310\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://75f8c71ce0c91c40dd5f249ace0b7d8270f8f1767231bcf71490f7157d6ba862\",\"dweb:/ipfs/QmYXgxeDyFHvz3JsXxLEYN6GNUR44ThHeFj5XkpkgMoG4w\"]},\"node_modules/@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0x9d8da059267bac779a2dbbb9a26c2acf00ca83085e105d62d5d4ef96054a47f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c78e2aa4313323cecd1ef12a8d6265b96beee1a199923abf55d9a2a9e291ad23\",\"dweb:/ipfs/QmUTs2KStXucZezzFo3EYeqYu47utu56qrF7jj1Gue65vb\"]},\"node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"node_modules/@openzeppelin/contracts/utils/Errors.sol\":{\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf\",\"dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB\"]},\"node_modules/@openzeppelin/contracts/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]},\"node_modules/@openzeppelin/contracts/utils/Pausable.sol\":{\"keccak256\":\"0xb2e5f50762c27fb4b123e3619c3c02bdcba5e515309382e5bfb6f7d6486510bd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1a4b83328c98d518a2699c2cbe9e9b055e78aa57fa8639f1b88deb8b3750b5dc\",\"dweb:/ipfs/QmXdcYj5v7zQxXFPULShHkR5p4Wa2zYuupbHnFdV3cHYtc\"]},\"node_modules/@openzeppelin/contracts/utils/ReentrancyGuard.sol\":{\"keccak256\":\"0x11a5a79827df29e915a12740caf62fe21ebe27c08c9ae3e09abe9ee3ba3866d3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3cf0c69ab827e3251db9ee6a50647d62c90ba580a4d7bbff21f2bea39e7b2f4a\",\"dweb:/ipfs/QmZiKwtKU1SBX4RGfQtY7PZfiapbbu6SZ9vizGQD9UHjRA\"]},\"node_modules/@openzeppelin/contracts/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0x69f54c02b7d81d505910ec198c11ed4c6a728418a868b906b4a0cf29946fda84\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8e25e4bdb7ae1f21d23bfee996e22736fc0ab44cfabedac82a757b1edc5623b9\",\"dweb:/ipfs/QmQdWQvB6JCP9ZMbzi8EvQ1PTETqkcTWrbcVurS7DKpa5n\"]},\"node_modules/@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0xddce8e17e3d3f9ed818b4f4c4478a8262aab8b11ed322f1bf5ed705bb4bd97fa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8084aa71a4cc7d2980972412a88fe4f114869faea3fefa5436431644eb5c0287\",\"dweb:/ipfs/Qmbqfs5dRdPvHVKY8kTaeyc65NdqXRQwRK7h9s5UJEhD1p\"]},\"node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]},\"node_modules/@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]},\"node_modules/@openzeppelin/contracts/utils/structs/DoubleEndedQueue.sol\":{\"keccak256\":\"0x1e1d74658d7f4eab3d4f8fb0c6c5953bc5f629d9425e978d557dabff7b58b217\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://be0175d00008d452d3d553890f73a3d5d51dff4372f720336c8b98f26822fcdb\",\"dweb:/ipfs/QmUkE8g5xPExWoSAKwdi5ww1qJJVtEWtjSF93G2LMQkgD3\"]},\"node_modules/solidity-bytes-utils/contracts/BytesLib.sol\":{\"keccak256\":\"0xa5b10f04797d5a10a9ba07855108b6bd695940e6a3d128927b2f74a0d359868a\",\"license\":\"Unlicense\",\"urls\":[\"bzz-raw://a38d7680aacbb18dae659876b396b73bcc8f759672213f8a0efc4129e2648535\",\"dweb:/ipfs/QmfKFnwpTEGAnbRnZxMuv3mRCG9S9WMjFhFL23bftBT2Jq\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { - "inputs": [], - "type": "error", - "name": "Executor_InvalidLzComposeOption" - }, - { - "inputs": [], - "type": "error", - "name": "Executor_InvalidLzReadOption" - }, - { - "inputs": [], - "type": "error", - "name": "Executor_InvalidLzReceiveOption" - }, - { - "inputs": [], - "type": "error", - "name": "Executor_InvalidNativeDropOption" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "", - "type": "string", - "indexed": false - } - ], - "type": "event", - "name": "log", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address", - "indexed": false - } - ], - "type": "event", - "name": "log_address", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "uint256[]", - "name": "val", - "type": "uint256[]", - "indexed": false - } - ], - "type": "event", - "name": "log_array", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "int256[]", - "name": "val", - "type": "int256[]", - "indexed": false - } - ], - "type": "event", - "name": "log_array", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "val", - "type": "address[]", - "indexed": false - } - ], - "type": "event", - "name": "log_array", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes", - "indexed": false - } - ], - "type": "event", - "name": "log_bytes", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32", - "indexed": false - } - ], - "type": "event", - "name": "log_bytes32", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "int256", - "name": "", - "type": "int256", - "indexed": false - } - ], - "type": "event", - "name": "log_int", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "string", - "name": "key", - "type": "string", - "indexed": false - }, - { - "internalType": "address", - "name": "val", - "type": "address", - "indexed": false - } - ], - "type": "event", - "name": "log_named_address", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "string", - "name": "key", - "type": "string", - "indexed": false - }, - { - "internalType": "uint256[]", - "name": "val", - "type": "uint256[]", - "indexed": false - } - ], - "type": "event", - "name": "log_named_array", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "string", - "name": "key", - "type": "string", - "indexed": false - }, - { - "internalType": "int256[]", - "name": "val", - "type": "int256[]", - "indexed": false - } - ], - "type": "event", - "name": "log_named_array", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "string", - "name": "key", - "type": "string", - "indexed": false - }, - { - "internalType": "address[]", - "name": "val", - "type": "address[]", - "indexed": false - } - ], - "type": "event", - "name": "log_named_array", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "string", - "name": "key", - "type": "string", - "indexed": false - }, - { - "internalType": "bytes", - "name": "val", - "type": "bytes", - "indexed": false - } - ], - "type": "event", - "name": "log_named_bytes", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "string", - "name": "key", - "type": "string", - "indexed": false - }, - { - "internalType": "bytes32", - "name": "val", - "type": "bytes32", - "indexed": false - } - ], - "type": "event", - "name": "log_named_bytes32", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "string", - "name": "key", - "type": "string", - "indexed": false - }, - { - "internalType": "int256", - "name": "val", - "type": "int256", - "indexed": false - }, - { - "internalType": "uint256", - "name": "decimals", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "log_named_decimal_int", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "string", - "name": "key", - "type": "string", - "indexed": false - }, - { - "internalType": "uint256", - "name": "val", - "type": "uint256", - "indexed": false - }, - { - "internalType": "uint256", - "name": "decimals", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "log_named_decimal_uint", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "string", - "name": "key", - "type": "string", - "indexed": false - }, - { - "internalType": "int256", - "name": "val", - "type": "int256", - "indexed": false - } - ], - "type": "event", - "name": "log_named_int", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "string", - "name": "key", - "type": "string", - "indexed": false - }, - { - "internalType": "string", - "name": "val", - "type": "string", - "indexed": false - } - ], - "type": "event", - "name": "log_named_string", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "string", - "name": "key", - "type": "string", - "indexed": false - }, - { - "internalType": "uint256", - "name": "val", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "log_named_uint", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "string", - "name": "", - "type": "string", - "indexed": false - } - ], - "type": "event", - "name": "log_string", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "log_uint", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes", - "indexed": false - } - ], - "type": "event", - "name": "logs", - "anonymous": false - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "DEFAULT_CHANNEL_ID", - "outputs": [ - { "internalType": "uint32", "name": "", "type": "uint32" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "EVM_COMPUTE_MAP_BPS", - "outputs": [ - { "internalType": "uint16", "name": "", "type": "uint16" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "EVM_COMPUTE_REDUCE_FEE_USD", - "outputs": [ - { "internalType": "uint120", "name": "", "type": "uint120" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "EVM_REQUEST_FEE_USD", - "outputs": [ - { "internalType": "uint120", "name": "", "type": "uint120" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "IS_TEST", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "MAP_REDUCE_COMPUTE_TYPES", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "NATIVE_TOKEN_PRICE_USD", - "outputs": [ - { "internalType": "uint128", "name": "", "type": "uint128" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "TREASURY_GAS_CAP", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "TREASURY_GAS_FOR_FEE_CAP", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ] - }, - { - "inputs": [ - { "internalType": "bytes", "name": "packetBytes", "type": "bytes" }, - { "internalType": "bytes32", "name": "guid", "type": "bytes32" } - ], - "stateMutability": "pure", - "type": "function", - "name": "assertGuid" - }, - { - "inputs": [ - { - "internalType": "uint8", - "name": "_endpointNum", - "type": "uint8" - }, - { - "internalType": "enum TestHelperOz5.LibraryType", - "name": "_libraryType", - "type": "uint8" - }, - { - "internalType": "address[]", - "name": "nativeTokenAddresses", - "type": "address[]" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "createEndpoints" - }, - { - "inputs": [ - { "internalType": "bytes", "name": "_option", "type": "bytes" } - ], - "stateMutability": "pure", - "type": "function", - "name": "decodeLzComposeOption", - "outputs": [ - { "internalType": "uint16", "name": "index", "type": "uint16" }, - { "internalType": "uint128", "name": "gas", "type": "uint128" }, - { "internalType": "uint128", "name": "value", "type": "uint128" } - ] - }, - { - "inputs": [ - { "internalType": "bytes", "name": "_option", "type": "bytes" } - ], - "stateMutability": "pure", - "type": "function", - "name": "decodeLzReadOption", - "outputs": [ - { "internalType": "uint128", "name": "gas", "type": "uint128" }, - { "internalType": "uint32", "name": "size", "type": "uint32" }, - { "internalType": "uint128", "name": "value", "type": "uint128" } - ] - }, - { - "inputs": [ - { "internalType": "bytes", "name": "_option", "type": "bytes" } - ], - "stateMutability": "pure", - "type": "function", - "name": "decodeLzReceiveOption", - "outputs": [ - { "internalType": "uint128", "name": "gas", "type": "uint128" }, - { "internalType": "uint128", "name": "value", "type": "uint128" } - ] - }, - { - "inputs": [ - { "internalType": "bytes", "name": "_option", "type": "bytes" } - ], - "stateMutability": "pure", - "type": "function", - "name": "decodeNativeDropOption", - "outputs": [ - { "internalType": "uint128", "name": "amount", "type": "uint128" }, - { "internalType": "bytes32", "name": "receiver", "type": "bytes32" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "excludeArtifacts", - "outputs": [ - { - "internalType": "string[]", - "name": "excludedArtifacts_", - "type": "string[]" - } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "excludeContracts", - "outputs": [ - { - "internalType": "address[]", - "name": "excludedContracts_", - "type": "address[]" - } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "excludeSenders", - "outputs": [ - { - "internalType": "address[]", - "name": "excludedSenders_", - "type": "address[]" - } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "executorValueCap", - "outputs": [ - { "internalType": "uint128", "name": "", "type": "uint128" } - ] - }, - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "function", - "name": "failed", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "uint16", "name": "_dstEid", "type": "uint16" }, - { - "internalType": "bytes32", - "name": "_dstAddress", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function", - "name": "getNextInflightPacket", - "outputs": [ - { "internalType": "bytes", "name": "packetBytes", "type": "bytes" } - ] - }, - { - "inputs": [ - { "internalType": "uint16", "name": "_dstEid", "type": "uint16" }, - { - "internalType": "bytes32", - "name": "_dstAddress", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function", - "name": "hasPendingPackets", - "outputs": [ - { "internalType": "bool", "name": "flag", "type": "bool" } - ] - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_dstEid", "type": "uint32" }, - { "internalType": "address", "name": "_from", "type": "address" }, - { "internalType": "bytes", "name": "_options", "type": "bytes" }, - { "internalType": "bytes32", "name": "_guid", "type": "bytes32" }, - { "internalType": "address", "name": "_to", "type": "address" }, - { "internalType": "bytes", "name": "_composerMsg", "type": "bytes" } - ], - "stateMutability": "payable", - "type": "function", - "name": "lzCompose" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_packetBytes", - "type": "bytes" - }, - { "internalType": "bytes", "name": "_options", "type": "bytes" }, - { "internalType": "bytes32", "name": "_guid", "type": "bytes32" }, - { - "internalType": "address", - "name": "_composer", - "type": "address" - } - ], - "stateMutability": "payable", - "type": "function", - "name": "lzCompose" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_packetBytes", - "type": "bytes" - }, - { "internalType": "bytes", "name": "_options", "type": "bytes" }, - { - "internalType": "bytes", - "name": "_resolvedPayload", - "type": "bytes" - } - ], - "stateMutability": "payable", - "type": "function", - "name": "lzReadReceive" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_packetBytes", - "type": "bytes" - }, - { "internalType": "bytes", "name": "_options", "type": "bytes" } - ], - "stateMutability": "payable", - "type": "function", - "name": "lzReceive" - }, - { - "inputs": [ - { "internalType": "bytes", "name": "_options", "type": "bytes" }, - { "internalType": "uint256", "name": "_cursor", "type": "uint256" } - ], - "stateMutability": "pure", - "type": "function", - "name": "nextExecutorOption", - "outputs": [ - { "internalType": "uint8", "name": "optionType", "type": "uint8" }, - { "internalType": "bytes", "name": "option", "type": "bytes" }, - { "internalType": "uint256", "name": "cursor", "type": "uint256" } - ] - }, - { - "inputs": [ - { - "internalType": "contract EndpointV2Mock", - "name": "endpoint", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "registerEndpoint" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_packetBytes", - "type": "bytes" - }, - { "internalType": "bytes", "name": "_options", "type": "bytes" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "schedulePacket" - }, - { - "inputs": [ - { - "internalType": "uint128", - "name": "_valueCap", - "type": "uint128" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setExecutorValueCap" - }, - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "function", - "name": "setUp" - }, - { - "inputs": [ - { - "internalType": "uint8", - "name": "_endpointNum", - "type": "uint8" - }, - { - "internalType": "enum TestHelperOz5.LibraryType", - "name": "_libraryType", - "type": "uint8" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setUpEndpoints" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_oappCreationCode", - "type": "bytes" - }, - { "internalType": "uint8", "name": "_startEid", "type": "uint8" }, - { "internalType": "uint8", "name": "_oappNum", "type": "uint8" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setupOApps", - "outputs": [ - { - "internalType": "address[]", - "name": "oapps", - "type": "address[]" - } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "targetArtifactSelectors", - "outputs": [ - { - "internalType": "struct StdInvariant.FuzzSelector[]", - "name": "targetedArtifactSelectors_", - "type": "tuple[]", - "components": [ - { - "internalType": "address", - "name": "addr", - "type": "address" - }, - { - "internalType": "bytes4[]", - "name": "selectors", - "type": "bytes4[]" - } - ] - } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "targetArtifacts", - "outputs": [ - { - "internalType": "string[]", - "name": "targetedArtifacts_", - "type": "string[]" - } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "targetContracts", - "outputs": [ - { - "internalType": "address[]", - "name": "targetedContracts_", - "type": "address[]" - } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "targetInterfaces", - "outputs": [ - { - "internalType": "struct StdInvariant.FuzzInterface[]", - "name": "targetedInterfaces_", - "type": "tuple[]", - "components": [ - { - "internalType": "address", - "name": "addr", - "type": "address" - }, - { - "internalType": "string[]", - "name": "artifacts", - "type": "string[]" - } - ] - } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "targetSelectors", - "outputs": [ - { - "internalType": "struct StdInvariant.FuzzSelector[]", - "name": "targetedSelectors_", - "type": "tuple[]", - "components": [ - { - "internalType": "address", - "name": "addr", - "type": "address" - }, - { - "internalType": "bytes4[]", - "name": "selectors", - "type": "bytes4[]" - } - ] - } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "targetSenders", - "outputs": [ - { - "internalType": "address[]", - "name": "targetedSenders_", - "type": "address[]" - } - ] - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_packetBytes", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "_resolvedPayload", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "validatePacket" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_dstEid", "type": "uint32" }, - { - "internalType": "address", - "name": "_dstAddress", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "verifyPackets" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_dstEid", "type": "uint32" }, - { - "internalType": "bytes32", - "name": "_dstAddress", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "_packetAmount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_composer", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_resolvedPayload", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "verifyPackets" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_dstEid", "type": "uint32" }, - { - "internalType": "bytes32", - "name": "_dstAddress", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "verifyPackets" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "oapps", - "type": "address[]" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "wireOApps" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "oapps", - "type": "address[]" - }, - { - "internalType": "uint32[]", - "name": "channels", - "type": "uint32[]" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "wireReadOApps" - }, - { "inputs": [], "stateMutability": "payable", "type": "receive" } - ], - "devdoc": { - "kind": "dev", - "methods": { - "createEndpoints(uint8,uint8,address[])": { - "params": { - "_endpointNum": "The number of endpoints to create.", - "_libraryType": "The type of message library to use (UltraLightNode or SimpleMessageLib)." - } - }, - "schedulePacket(bytes,bytes)": { - "details": "Adds the packet to the front of the queue and stores its options for later retrieval.", - "params": { - "_options": "The options associated with the packet, used during delivery.", - "_packetBytes": "The packet data to be scheduled." - } - }, - "setExecutorValueCap(uint128)": { - "details": "set executorValueCap if more than 0.1 ether is necessarythis must be called prior to setUpEndpoints() if the value is to be used", - "params": { - "_valueCap": "amount executor can pass as msg.value to lzReceive()" - } - }, - "setUp()": { - "details": "Initializes test environment setup, to be overridden by specific tests." - }, - "setupOApps(bytes,uint8,uint8)": { - "params": { - "_oappCreationCode": "The bytecode for creating OApp contracts.", - "_oappNum": "The number of OApps to set up.", - "_startEid": "The starting endpoint ID for OApp setup." - }, - "returns": { - "oapps": "An array of addresses for the deployed OApps." - } - }, - "verifyPackets(uint32,address)": { - "details": "verify packets to destination chain's OApp address.", - "params": { - "_dstAddress": "The destination address.", - "_dstEid": "The destination endpoint ID." - } - }, - "verifyPackets(uint32,bytes32)": { - "details": "Calls an overloaded version of verifyPackets with default values for packet amount and composer address.", - "params": { - "_dstAddress": "The destination address in bytes32 format.", - "_dstEid": "The destination chain's endpoint ID." - } - }, - "verifyPackets(uint32,bytes32,uint256,address,bytes)": { - "details": "dst UA receive/execute packetswill NOT work calling this directly with composer IF the composed payload is different from the lzReceive msg payload" - }, - "wireOApps(address[])": { - "details": "Sets each OApp as a peer to every other OApp in the provided array, except itself.", - "params": { - "oapps": "An array of addresses representing the deployed OApp instances." - } - }, - "wireReadOApps(address[],uint32[])": { - "details": "Sets each OApp to read from the provided channels.", - "params": { - "channels": "An array of channel IDs to set as read channels.", - "oapps": "An array of addresses representing the deployed OApp instances." - } - } - }, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": { - "createEndpoints(uint8,uint8,address[])": { - "notice": "Sets up endpoints for testing." - }, - "schedulePacket(bytes,bytes)": { - "notice": "Schedules a packet for delivery, storing it in the packets queue." - }, - "setupOApps(bytes,uint8,uint8)": { - "notice": "Sets up mock OApp contracts for testing." - }, - "verifyPackets(uint32,bytes32)": { - "notice": "Verifies and processes packets destined for a specific chain and user address." - }, - "wireOApps(address[])": { - "notice": "Configures the peers between multiple OApp instances." - }, - "wireReadOApps(address[],uint32[])": { - "notice": "Configures the read channels for multiple OApp instances." - } - }, - "version": 1 - } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/TestHelperOz5.sol": "TestHelperOz5" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/MessageLibBase.sol": { - "keccak256": "0x14899a4398251439938d6ef8a15ea8c6acdddc98a7b0066d7e63676192dea0d1", - "urls": [ - "bzz-raw://3998d03de7025c2c601a4fdcaf9475d12a1ef661fcf1a685ece84fdde6498cf9", - "dweb:/ipfs/QmReknRbiGAiPqq9toKyXKo6hUKXrQPJyyS6LnTGjiDKoY" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/ReceiveLibBaseE2.sol": { - "keccak256": "0x2fdbd1b13751a264cd6e7fac518a2685b15c968806c03f1d18b177fc0526e9a9", - "urls": [ - "bzz-raw://600af48bb67939b5f4a3a00c76863ee290a55325ea8697f7cc4b46321ab26ef2", - "dweb:/ipfs/QmdRigYaB6TXczjtVkvwpUEBwvvvDuymFoViMCB6xQPYUU" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/SendLibBase.sol": { - "keccak256": "0x400eaa11c7d50b4c25b7625290ff00937b6875ad3986b353c37a4e62b5a834b1", - "urls": [ - "bzz-raw://1f51eb0785d3630815a9d63de1c1331fe966df4c3f2fb6750b8da7be9e9743a4", - "dweb:/ipfs/QmaAEf1kjhhff3AUhRiPm6ikpk2YMMrpKc2ccYzNs7waBy" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/SendLibBaseE2.sol": { - "keccak256": "0x90ada11d0a330732c56b989e59c8272b70f956a5d7be2cf209d6d51a51d35a9e", - "urls": [ - "bzz-raw://0abc7a6d07ec40a3a922256ad05bdd6eca10550d85bfd2e67147473617bb0497", - "dweb:/ipfs/QmRDphmFhx1scRJXcusg6pUhVQvp941oCJwnHGAPdrNY4T" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IExecutor.sol": { - "keccak256": "0x2fd26e454b060ede7afa15f8bbc67bd43f9181b6405ca411d36c8b538be016af", - "urls": [ - "bzz-raw://cf2142e83214bb392f69ed14266718cfd803f849a7239ee9a1950ddf66553696", - "dweb:/ipfs/QmSZ2mPMZqWBetMU8VESKtxy7UdSThUVmJmTFMHEyKLTGZ" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IExecutorFeeLib.sol": { - "keccak256": "0x801d12eca6d6b232fb91d949cdb70a4c547c5e27e73555f2f1eb9e757c639bcc", - "urls": [ - "bzz-raw://b61bdffe26ff3902edab3efb0b5af3808ec9e28d72db95b77128502b9bc7638d", - "dweb:/ipfs/Qmcyf3npDDEq28b9XqmXgSGyQegj2cxUZQ3UekSNf34g8M" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroExecutor.sol": { - "keccak256": "0x3647af317ee126b1247a782abb30e59ec5ab21b4945f1d3b4370d1fa3c1bf347", - "urls": [ - "bzz-raw://5b51cd5e7347ee869a06bd57a698f40e4a901ec7fdcb27f0ef485e4a0e1e9be4", - "dweb:/ipfs/QmP2Nc73veRzLGdUahkjhQAiKR9ZWYiUtSGwoMB1sPXxUp" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroPriceFeed.sol": { - "keccak256": "0xb4df72798a64f5ea44775b526e0c417c3de0ffc661659d7b31d5b28567c6fbcc", - "urls": [ - "bzz-raw://30ca5fd5e3227a7bffc51654ee3bfebdd591a131f86846ac42dea8a40c5cf1d8", - "dweb:/ipfs/QmXNmQCF8TZAFpUxgPa1rgWt4ktsBV38A8Hax7TiYLgybW" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroReadExecutor.sol": { - "keccak256": "0x360936885f173f816ffb47e555d480928e74eb1ad54a76af0f4595ecba2d5657", - "urls": [ - "bzz-raw://16b5095e6439b1e416eb70571a1dd8f4f21a0d77b19c9e510ca289d99e5e09ab", - "dweb:/ipfs/QmZ2mjQDQ35gJseyzmQhik4cBgN2ESADzofFNVFvgS64hv" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroTreasury.sol": { - "keccak256": "0x2aab2a3cf50e20af56d9204b1367d52a47abba0b0c7c21f304d413de1ced6345", - "urls": [ - "bzz-raw://f8b603b5e5e62c621715f8449280af240a4add8721c4ae8f5e8e491507f6e4c5", - "dweb:/ipfs/QmUQ7Ti7CPmKnRbQFN9TLvVbeZhsi1xUjqZPTJ36dCZ6y8" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IWorker.sol": { - "keccak256": "0xa6b61913767305227576cc6da5067de4208f09a4f58bfbfe32beafdfae9869b1", - "urls": [ - "bzz-raw://b7fce83bfb831f383606aee7f5ff68a330c8526bb1036f9ba0813d3e4fa8d534", - "dweb:/ipfs/QmR7zAqJkmCgBj6sguS8t2WthY5k6FwsakgH4UY11uqD4n" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/libs/ExecutorOptions.sol": { - "keccak256": "0x441b723f2f597be2ec2bb361fcf3f11852c23534db1cfa7d2ffff7e61d228e3c", - "urls": [ - "bzz-raw://636817d20f90f75032e35376256cf5f4d2a047d6541b45f644d82a2e4dc8f1eb", - "dweb:/ipfs/QmcEFRxCmmm9hKbqi7Powj6ATbw4JXXJW4rxfwMcxWsDnT" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/libs/SafeCall.sol": { - "keccak256": "0xc3b7b7927472f7c1ca9703af310e9050c798afaccf399ad0f131e179b8582c8d", - "urls": [ - "bzz-raw://e5be13af32ff6b371985d405bc6fe8ac2faf5445bd88fda2dab4b869f66e3f89", - "dweb:/ipfs/Qmd21k4H2tAHKrpiuHUbH87eNtHLLJzHj9ZCrMh8AKfDHh" - ], - "license": "MIT OR Apache-2.0" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/ReceiveUlnBase.sol": { - "keccak256": "0x36c93de122bbb74ae31e3eacf567c0a3bc649ed3ebb2766c76dfa93aebcace44", - "urls": [ - "bzz-raw://e83bcaa80e2715e68818dd53e4dc6ad8e665b8249d69a08cf2d2635b9757fb79", - "dweb:/ipfs/QmSKh6NgaTrTSa48gDzGGqGNAcs5jVEHgZSzZzbuJSEsxo" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/SendUlnBase.sol": { - "keccak256": "0x6d9962ffa476ac2efb78f1415bb2f650a30eedeef2b75fdab0aeafaf3e8da6a5", - "urls": [ - "bzz-raw://21f32c56b67d2e770444b809c1a85a96627194c605ad317d482dfc5b6ce7e8c2", - "dweb:/ipfs/QmP5tzoMDzTdduEcSpYHgg6WCHLQGuc1djDMFUBycJPLCU" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/UlnBase.sol": { - "keccak256": "0xfdb1d04f4996c0a9d35abfbfcf10d978da638885eb77d0a9dc35cea5993074e3", - "urls": [ - "bzz-raw://776d58d88d13b058f236cf18c32b4b9718a021513fc4e198287f4fe18ec5aba4", - "dweb:/ipfs/QmdNX8jJu2aXJ8Dpbt2ohfhT8RKQLuvh58sW6SAXcUTcV9" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IDVN.sol": { - "keccak256": "0x6becdfab6c1fcaf98f402bee48495895e54825f9d6eef6e292dde0caed628284", - "urls": [ - "bzz-raw://2273341033856737cd46704a1a769768feae696d0e7a912f5be9de8ffdd2180c", - "dweb:/ipfs/QmY1xBAmMX9jND1HAb7tDyZNPgFReXMqs1vtmHbShKZFQY" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IDVNFeeLib.sol": { - "keccak256": "0xed4a8e77148328132d8f4f2726c4aeec6b490cf03a1d5940bde0ab8d72954de9", - "urls": [ - "bzz-raw://7b07802ca32bf10f68e51da872fb358807446dc2242314374d226493a6e9e7dc", - "dweb:/ipfs/QmfSwWPLgitDy2a9S3mCNBDk6kAcK9n186Dtvj7qg84i12" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/ILayerZeroDVN.sol": { - "keccak256": "0x308e77078242fd5c5746ec29c12e618249134f9e4377c0028ab8f59c07a6014b", - "urls": [ - "bzz-raw://2f92cf397a8d26864ac92dfcd1b98e92a32c47f556a62c5e6dc1618734c1caa3", - "dweb:/ipfs/QmXN3XJXEKq5djV6HeM6jrLycmJPFhMhecsYZ2TaRsQmhg" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/ILayerZeroReadDVN.sol": { - "keccak256": "0x759a3ee7614c2de54b152b0278845f91ac9760d8c22045b2fee89e3e744402b8", - "urls": [ - "bzz-raw://7a2dbf6bcf5bfab408f18c104b34c390e8bfabb0eeb1a10e3a9c0fb14c8c61d5", - "dweb:/ipfs/QmWxmRbDBkbhGmNsRyXqQXB1QaWRS4qvh6a8achh8DQPKR" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IReceiveUlnE2.sol": { - "keccak256": "0xcdf7e690e5d5c0a3ec26a0d7b1a7fe49c7d16a3634721c3944f77d13ff5d4a91", - "urls": [ - "bzz-raw://bd32a05dde1b83be1ce64fcfb9495d8b9bf0c5b3a5b521ac6c214e87e32f3cdc", - "dweb:/ipfs/QmcDKTor8EQf3cbiWYmeFb9qzUM8JGPzGGN9qJnYjP1nN7" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/DVNOptions.sol": { - "keccak256": "0x2beee03cdf59a9bc72e94d08b69cb2e908725f4ceabb48651494938100e21e35", - "urls": [ - "bzz-raw://d88e121a39e74309f3575417df2318e2d2ee8bc8314e68dbf78544a9c393b141", - "dweb:/ipfs/QmRojBRAyENK21HnjevAWeoZZxtWkYZubB9Y78vCJPYeU6" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/ReadCmdCodecV1.sol": { - "keccak256": "0x52fbab4a114ce9defb2ffd57c0a978eee438b2c232862f7e20475e0dcadd4eda", - "urls": [ - "bzz-raw://a4d5d4e186e3f2a916ea02c2d1d0761069ab1a5c0d6f74719bbf3501a7ccb899", - "dweb:/ipfs/QmS2e12U9Fap2EK1CmSBTccL4PCKkHNdKJn2bXCqqKdbRn" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/SupportedCmdTypes.sol": { - "keccak256": "0x6b2534522c163714e499041ecd06aaeb93857373cef82cf2752f162bb7c69f9a", - "urls": [ - "bzz-raw://bf6c3545c3b9505692dbfaa29b40cab5ed9dc9b65e5804b6f47b5a76596120e9", - "dweb:/ipfs/QmNs98oRaMvpYhLCQ5yU256eYNEopFTrLRjjwm3gL4foQ3" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/UlnOptions.sol": { - "keccak256": "0x5df07fef16b20767f7524c367d90f696c12e8ce0e4fde7aecc9d83fb2b6b0e27", - "urls": [ - "bzz-raw://0997203f57d736e56ebb3d736550f1c7ff7950c8df0574c7abe95e22f847b850", - "dweb:/ipfs/QmZBjkH1vaPLyN3Jx9kGfVZKuTdfVWJfJVLSPok8SpjGbT" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/readlib/ReadLibBase.sol": { - "keccak256": "0x7d312ba1e6288cb201b211f58b814eaaa0b5993721475fbc64321b0e7a2c74d3", - "urls": [ - "bzz-raw://dfc0dce9362eca0f03b51e0e808389c8bf51fda901e6ca58da169f165e4fc3c8", - "dweb:/ipfs/QmSXAQ3veWf6gPXcgpX1XLZW9SyLQjBjCSdsFiQTttLNac" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/uln301/interfaces/IUltraLightNode301.sol": { - "keccak256": "0x47f8ebeaa7d96a6f337a18c46e3c532da578c7cb0a13fb6e6f014286b991902f", - "urls": [ - "bzz-raw://d51f208b931be54e0ae1801c71c0756251d8c26f8d9b7911be1ad57b3d4a5691", - "dweb:/ipfs/QmWqjst7jnYtSXQ9pakYHutDvENKLyqNg9nPfMxTH8p2Ed" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessageLibManager.sol": { - "keccak256": "0x64330e51de72e8d38cfc0eb5527d36baada46df4bc14233d3a8ecaf98098d69a", - "urls": [ - "bzz-raw://49aa45e5a26fc62e7af569cf915be8344adc78dceb6871c4c14bc5d115e59241", - "dweb:/ipfs/QmbTuW7kzPDYForDEPnaNQi6ZrmWqDxGVnHFiugnvTyq9K" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingChannel.sol": { - "keccak256": "0x8ab8cb12c8beba699c1a7f22ffa812ac553f7038326d0c0d0af77253005cfe73", - "urls": [ - "bzz-raw://7c7cba4ae16d0ca46ee0a365a204f7257ceaa892224604bf7c8e65c44737e46c", - "dweb:/ipfs/QmbQX5hJDKMwKdoo6QkdcusXQXH54SVCPe5hM1ycJZsg7y" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingComposer.sol": { - "keccak256": "0x20d36578e810e75346daf064813b76a177087214cae77628b1f9d43798cb52d1", - "urls": [ - "bzz-raw://475b6f3f1ba5d981d0c5f90b9e892d4f9f539f3b12196639b95770b5be4dbf6a", - "dweb:/ipfs/QmYyGrnR3vDt8Dqa2paQwTG9qrD6anAGFrDZmMra8KGC6s" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingContext.sol": { - "keccak256": "0x9616f3bd0d7293c9723f2ddf86f9f7030fbd99213c9748557eec8f6d13b25420", - "urls": [ - "bzz-raw://205e713f5af46f52799e51774ac74dbeee4056de6ddba3c4d78a327536426c54", - "dweb:/ipfs/QmZ2ZqDwxdjpJbh91qwMfRhhQu4AMEsjUcsTEsdRV4NAys" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroComposer.sol": { - "keccak256": "0xfaca7205d4211ee9208a7e59171e2301731f3d2a20c49b4a839821871f5fdd49", - "urls": [ - "bzz-raw://f254bc60ac26687b5320a43a556e30777b0745abf7cd64d5f4720d9b1d1f7fdf", - "dweb:/ipfs/QmRSJEZVgxaC3L2DdE6s8P5qkYfM3V5JMeseeFJJqGR4xz" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol": { - "keccak256": "0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3", - "urls": [ - "bzz-raw://bacc29fd3866af71e59cb0bdc1cf82c882a4a7f4e2652fd413c9f12649762083", - "dweb:/ipfs/QmZh2toLnrQDWaNYhS5K4NoW7Vxd2GdZx9KA77vKEDLAqs" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol": { - "keccak256": "0x9641abba8d53b08bb517d1b74801dd15ea7b84d77a6719085bd96c8ea94e3ca0", - "urls": [ - "bzz-raw://77415ae0820859e0faf3fabdce683cce9fa03ea026ae0f6fe081ef1c9205f933", - "dweb:/ipfs/QmXd7APqoCunQ2jYy73AHvi5gsZofLpm3SzM6FPo7zRPfL" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol": { - "keccak256": "0x5cf5f24751b4e3ea1c9c5ded07cedfdfd62566b6daaffcc0144733859c9dba0c", - "urls": [ - "bzz-raw://cae7e35007a714f007ea08045ef7c0cfa6c91fd2425b5028b2d49abad357a5f0", - "dweb:/ipfs/QmcDBs5tsiyB35b8cwzWQWNnpkawb3uuHRaqE77Hxm2tve" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol": { - "keccak256": "0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc", - "urls": [ - "bzz-raw://d8ff6a8a89297fa127f86b54e0db3eba1d6a6eeb4f6398d3c84d569665ac8f1b", - "dweb:/ipfs/QmVSwhw6xFDrLRAX4RXaCM47yBaBtac4wf36DYEq6KCTvT" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol": { - "keccak256": "0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972", - "urls": [ - "bzz-raw://7e1b245d58221d16d8b5e0f01ef3e289a24a7df1ace3b94239e4d5b954ad5927", - "dweb:/ipfs/Qmappsgp7PCY9rSSNE9Cdn4BTRX591WfCSEgq2HxhA3z6S" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol": { - "keccak256": "0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901", - "urls": [ - "bzz-raw://b18b23a1643fc6636c4ad9d9023e2e6ca2d3c2a4a046482d4655bff09950598d", - "dweb:/ipfs/Qma6G5SqiovwrMPfgqTrRngK1HWW373Wkf9c6YP2NhXpPk" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol": { - "keccak256": "0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e", - "urls": [ - "bzz-raw://5173fc9143bea314b159ca5a9adb5626659ef763bc598e27de5fa46efe3291a6", - "dweb:/ipfs/QmSLFeMFPmVeGxT4sxRPW28ictjAS22M8rLeYRu9TXkA6D" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol": { - "keccak256": "0xf1c07bc61e7b1dce195ed12d50f87980fbf2d63cac1326fd28287f55fe0ba625", - "urls": [ - "bzz-raw://060f10ff7afc33c1c2f2b4b5ba29231fd3c943146488084d0e4ab99fce991d97", - "dweb:/ipfs/QmaSsefAqqEqtf8FgFUmDYMwTsAty3X1pqDb6SiFvry6B3" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol": { - "keccak256": "0x2ebbcaaab3554edcd41b581f1a72ac1806afbfb8047d0d47ff098f9af30d6deb", - "urls": [ - "bzz-raw://2d4b2cf5c3b16dc76c6767f285b57c0af917972327b2be3f7cba5825402f5fc1", - "dweb:/ipfs/QmQQWiHE2jKEDbjzGutSoZwtApSXYfLqZt5CxEpFj8xyvT" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/CalldataBytesLib.sol": { - "keccak256": "0x5c0db161cef6603c3b256d4220f489419e7478ef775e52a80056654129c61875", - "urls": [ - "bzz-raw://a33245d0fdd3992bb56b31d1840108d36bb46c8d617b659ef1af8dd7ed86302d", - "dweb:/ipfs/QmWyBqT7Tdrfn5zz9xYM3V1PBtfAZAVwwCrrKwwfi3wMQK" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Errors.sol": { - "keccak256": "0x35bcd6ca99c4c8d9f7d8413d1b92fb4a4d4a420ce3bf64b0fb01e68e6bcf2fa7", - "urls": [ - "bzz-raw://0ac14f98563f9c610c936c93e71eff657efaba1e1d892be6a215aa5cb1f63a24", - "dweb:/ipfs/QmVZZ8owwfDGLQTAzQJJqmYY4KsrChDagh5GBK7rChT5wb" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/GUID.sol": { - "keccak256": "0x8a44524af7deb96593f6b5606e9973654a113e1687809f2e45d4a91ba89862d5", - "urls": [ - "bzz-raw://32dd0b5d1946e0cd5c7b728086aafac50a62c061115afb8b41254589c8a6732b", - "dweb:/ipfs/QmR9QqtiAUPRLaRVv5wnth3NGPhdWB8rJmWYfz3o5Z1mWj" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Transfer.sol": { - "keccak256": "0x621d6dd5b8b7e827351459fff4ac87c16ba4656757592cf67de8b199aea4cf9a", - "urls": [ - "bzz-raw://345aa8c007ed8b96a74260d289545713f1d7180df270d67687e3a540a61fa5c0", - "dweb:/ipfs/QmNWCvpqSuar6UGLDVshUc7shUv3pt1J5FTf9VyZZ13wXL" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/BlockedMessageLib.sol": { - "keccak256": "0xb2b55968b26294139742adee6c155897c8334f4c6bf72f1940456cc84e6fbab9", - "urls": [ - "bzz-raw://e758a1fdcea4039b19f1252e4e2958f4a0e05517eb3e151784431533446c225f", - "dweb:/ipfs/QmRBG345abgyUeTnSpuxdK1WbK5pvwhSmvBEgW1mnoYqTq" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/BitMaps.sol": { - "keccak256": "0xaad3c72ef43480d2253fd48b394e8fb7286d009991d2bc4e61be58ce48ac5ee9", - "urls": [ - "bzz-raw://b8c02b14f954416ba2148b389c87da8378ac8dd16ba3d458cbbfba8b0fd8639f", - "dweb:/ipfs/Qmd2EEQhYL2VmgJi1V4uiHM2WcYxF9iBtxSgcFkbS21rQD" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/ExecutorOptions.sol": { - "keccak256": "0x621c6090fc432f94a99f677a95d72b75f56db89ddc5fc870669777a313587c28", - "urls": [ - "bzz-raw://69086166f16d29e30c5eb9ca2f97afb27569afe619807d79736833a809a512d2", - "dweb:/ipfs/QmcZqXjFuVdTrfbteKBF3GuEpjVFZ2YNZTa3J87dyLsqav" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol": { - "keccak256": "0xc84cf1bf785977fe1fbe7566eef902c2db68d0e163813ebe6c34921754802680", - "urls": [ - "bzz-raw://de686666fc16fa432d4208d85cec87dc952faf3e481b683b9adf4b4610db4b09", - "dweb:/ipfs/QmdmQeopzmxqRzi9DNB4EJDrYUXFfD7fUhnGhSni4QejUW" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-v1-0.7/contracts/interfaces/ILayerZeroUltraLightNodeV2.sol": { - "keccak256": "0xf1f36bbbc40d03b96affa151affb47da75a1b69dc79f4b311841a072d12fdd22", - "urls": [ - "bzz-raw://9f4f188c2998ecbda28a389ad8038da15c2260b1df6a8d135b3d96422e292fda", - "dweb:/ipfs/QmeThR83tcaM4CmxQ2AamTafsgjcbGMfZtYcDHqw2CcwKa" - ], - "license": "BUSL-1.1" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/OptionsHelper.sol": { - "keccak256": "0x729ce2290d16a45a16ad936263803db6a6bebcfba5c063ebe0f0fd284ba828c0", - "urls": [ - "bzz-raw://7494875394fc968684761b22bb5fe05789f8d84ba07b2e0ab579ce0afe7aa973", - "dweb:/ipfs/QmZNrexRXL3ef3UnES5e8JcdyMJ5HVftwGKQjGC5CwNg9Q" - ], - "license": "UNLICENSED" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/TestHelperOz5.sol": { - "keccak256": "0xe60b21a345bb1c2e9ee2fb7301398d342da0acc3a730b442106a2ad9478f7a63", - "urls": [ - "bzz-raw://ee7e0a47ae666a16e33a51f946da4fe549e8f4c6ea1f1978850515172c44656f", - "dweb:/ipfs/QmR2AZ9pYiwMCV4wPPVaGGPRJEjuBoFjJEesHtbAYhNoFq" - ], - "license": "UNLICENSED" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/DVNFeeLibMock.sol": { - "keccak256": "0x4c2e212f73a1c2a2989af947eef715ebacb11a80d55e5fd18a89a905790971b1", - "urls": [ - "bzz-raw://30eb29a81414780828903f5320367e89020af5a4055b768e2be08d43605b1688", - "dweb:/ipfs/QmeC5bVtmaY6tn6Z2XpVFXAkxVWQCQUzKbP2V9nPdv3vCr" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/DVNMock.sol": { - "keccak256": "0xdafd7da964b6ac8637d543c30370739bb805f7e10b42043444689240b5c27b3f", - "urls": [ - "bzz-raw://154067632b4799f49c0b3a8c5304499f60b2c232ebd17c21912efdb72421bdab", - "dweb:/ipfs/QmUEr6VsNt2odnrL3xFrLKwZTVLkLXi8BDzpPWeiCxC63T" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/EndpointV2AltMock.sol": { - "keccak256": "0x026b2f530b336ee237f37dde6f617acefbbf74d933d2a80da4216882f78be1a9", - "urls": [ - "bzz-raw://097a9fdd5a321e6e8455a1db00f2abda6e810c31ce47d1bced9e574be262a28b", - "dweb:/ipfs/Qme17zGk93k5BghCWFXqeqppVahH4dHuw7U76K4EcJxsY1" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/EndpointV2Mock.sol": { - "keccak256": "0xe9096c53611537a121589b56b882fc4dd797d5cac60def708f794a15e3ca98ff", - "urls": [ - "bzz-raw://4092d5dd582b48a5f703e4361fc5fb66050b5fe3253891175275dc832bc8e045", - "dweb:/ipfs/QmXSTJJNx4rn2ByCaE6vxiHnkm366ZU7dScYH1JsUbVZ1V" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ExecutorFeeLibMock.sol": { - "keccak256": "0x4a47aaf41049710d5f05fcc66885cacc0dabc1864778b56ac75a59b61eef5a01", - "urls": [ - "bzz-raw://c9b8c26b38cb138c3225efbab8b1d2e0f43343798658a0f2ed9669c16e5a97ff", - "dweb:/ipfs/QmV21G7Qwoi9gXYT8bKXDwnQDvjdZCAo2M9MqTKq4nQU9U" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ExecutorMock.sol": { - "keccak256": "0xbcdc4500270cd5496f10760ffe9e0444d23e454dd0ae2555e0661acf22fce96f", - "urls": [ - "bzz-raw://b816999bcfef5586b5e80bba21584b821fd7f7b32c276492adee530ffa83bb73", - "dweb:/ipfs/QmXLV8ieYdrTBERajBCVuMzknFyPHJjnw7MGkzULAdjdt8" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/MultiSigMock.sol": { - "keccak256": "0xc7c90e073e52af1da6c07e3d3f7477b064a89e78935c16e9872457df503c6830", - "urls": [ - "bzz-raw://cef1ae2d517e152616aea7f8f5c15fa1fbabbec8896a9c30a9eed35fb56b4f2f", - "dweb:/ipfs/QmeitPMQht2WfbR9ZLzwKWgThamdsJkobeaWo6ojTCoQG5" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/PriceFeedMock.sol": { - "keccak256": "0xd8f419b25c648287b5b7f0923b069b2449c51e807c9153df39445f2f83e55f44", - "urls": [ - "bzz-raw://bb300a5bb62655073c7aa9cd2221e60e59ce904a0d73f7f5e06af7c9df3445ec", - "dweb:/ipfs/QmcYb2qFevymfkWhTqGaNH5HwK9MMUixzAKJJAdNQHSCbw" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ReadLib1002Mock.sol": { - "keccak256": "0x1403b7a91b185fd8211f00fa380a0b8918e92e663c403a1dafa30f1667091fdc", - "urls": [ - "bzz-raw://7494444260a981ae9a9e11cd8981fad35a6b45a9c09cf72c05aad88ee191e7f0", - "dweb:/ipfs/QmaTyujm37PsCobQ36ootD5xVgKyBYqeUTdTJij9x3oaN6" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ReceiveUln302Mock.sol": { - "keccak256": "0x8e60b01e9bc801167b374dc119b41832d546afd43c143a0cd15ab1941198e121", - "urls": [ - "bzz-raw://bb1512762417dda9cd81fd9b41f590fd05888358fda1c2ab7e79e0cfabf61ec4", - "dweb:/ipfs/QmPAgBwdjLz29vE5L1Jth1Wvx6TTM1ig97amVtAyDFF61Q" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/SendUln302Mock.sol": { - "keccak256": "0x0c5cb54ec6b18e77aa653f7d774ac9d010684dafc96794d1d02f12b6885cc348", - "urls": [ - "bzz-raw://24c5a8ba8d92c16ec3047229167528f57b38cbd64882140014126ca51ab14574", - "dweb:/ipfs/QmXQsMDtZ3qNmjnr2LYgctBpPKxffuC6EeWHvFUtLBS5st" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/SimpleMessageLibMock.sol": { - "keccak256": "0xe6c93840c612592686732dd516550816eb77d6cde92514220eacb72443dcb9b9", - "urls": [ - "bzz-raw://a6a00fb60b7ac66e746f0471c2262fc98febafeb8acad8785d38ce1ddc4cc991", - "dweb:/ipfs/QmboboJskbXBbsyAGGRbW4JQCPJo9WiLFy7nwQxGVS9UhZ" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/WorkerMock.sol": { - "keccak256": "0x6c5bc31c117033dd35fa7ab3b13b1647a4b449c5f5b4cbff41bce8a63529ab97", - "urls": [ - "bzz-raw://01aa1d3f3b8e2fd4b544312d96916b16b97e01ab740e2bae1137723b2f1a31b1", - "dweb:/ipfs/QmVMemJ4MSgi6y9NxDdSeB6QbJRtCWojJNxzs3CRLT56EA" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/test.sol": { - "keccak256": "0x8758531bbac3972efcf1fa46383dbe1d276406fe527bc7abb2f236486278e83b", - "urls": [ - "bzz-raw://1f64264d61506847acf8761e84aff690cebe830958eac00bac7924d8be569240", - "dweb:/ipfs/QmSekDJvJ82MZAmr63n7YvfLzQ7gS4NLSHPmHL3GN3rw8k" - ], - "license": "GPL-3.0-or-later" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Base.sol": { - "keccak256": "0x4ff1a785311017d1eedb1b4737956fa383067ad34eb439abfec1d989754dde1c", - "urls": [ - "bzz-raw://f553622969b9fdb930246704a4c10dfaee6b1a4468c142fa7eb9dc292a438224", - "dweb:/ipfs/QmcxqHnqdQsMVtgsfH9VNLmZ3g7GhgNagfq7yvNCDcCHFK" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdAssertions.sol": { - "keccak256": "0x1a0dee4d8b2c81e9318e87dd85ef009467ebf7dba6575530d1fce94d34dbae60", - "urls": [ - "bzz-raw://ddd790c86ddde1013d1f7a552a80168eacf2e9244077f96799180644ad523a5b", - "dweb:/ipfs/QmYinBFt9uEVFXP9ytT9CDoNpzWieQVgLWRFRNiypMzJaL" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdChains.sol": { - "keccak256": "0x598b85609125830885b8fb54a18f447d04f8dd799aca3de81baef35eb6b783c0", - "urls": [ - "bzz-raw://c9c128aae4f5668d8c8f71e9e6d9379d8451b8713d139cb66a02d23bc1c75f69", - "dweb:/ipfs/QmVRihXHWi2yg9CcAhzKf63Y7m6gWz4P1giGMhXUHT3DFu" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdCheats.sol": { - "keccak256": "0xb72f3519e0bf7d31df5d68557525f4fc55d861c3fb3b0f7793144ef7c94cbeb7", - "urls": [ - "bzz-raw://f3456d0f78e6f61203fa7871ba2df0d35925f10db3baee14be623ce2a35b84e2", - "dweb:/ipfs/QmWE6QQSBvJifHMraisBTrf1x4WCwrDoTPLX8UKajTiApc" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdError.sol": { - "keccak256": "0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77", - "urls": [ - "bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6", - "dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdInvariant.sol": { - "keccak256": "0x67299bfacd77fddfa2a67b8e2b901e0e333618a4975fb94850b07475e51f6de6", - "urls": [ - "bzz-raw://1b61121d310f4053ce344b345b4a9ccf43b059daf9097ec2647f594beaca896d", - "dweb:/ipfs/QmZUCoTtXBM9zfAZVbj2dFPPnKaV1CSZzXE7zictyg3Gfz" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdJson.sol": { - "keccak256": "0x8f914dbd016bd0e318fe2b8bd556fbc8256c7cddc24e3e4fcb9f3c1c1935592d", - "urls": [ - "bzz-raw://19e704df493dde38323303b07d18cadfeb4dcadf1ddc2301add4aea9474fbb5e", - "dweb:/ipfs/QmZasuGiLK8LHwWtvpqEBxUR6QFY6GdzLMTJ9q7CMf8PNZ" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdMath.sol": { - "keccak256": "0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2", - "urls": [ - "bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92", - "dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdStorage.sol": { - "keccak256": "0x4298f3f4cedaedb07029820b1daad2c03af45379559392201f7bf3ec71105811", - "urls": [ - "bzz-raw://6e062f36d8d1ae3c383ef8975757926eaa9c4de3a92b5f1fe2d12748bcd8db32", - "dweb:/ipfs/QmcWkv3ia5Ew4DZNcudMNSTNXZ3W2QiXTZunRd44e9BT8z" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdStyle.sol": { - "keccak256": "0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d", - "urls": [ - "bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8", - "dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdUtils.sol": { - "keccak256": "0x502b18a4becda6ecd91fa8b419d8034946bfa80e6cc7f6497f51f8565bfadae0", - "urls": [ - "bzz-raw://bf499ee483a1dfd02023d4ce78ed4029a49794ccd5b849aaab912faea0d2ba61", - "dweb:/ipfs/QmP6hwNZW7sYbQK9fBzuZWxfLm6Swx2nKzvZ54qWNqQkzX" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Test.sol": { - "keccak256": "0x39b1729d5868c8e94ab8af16751eb500a17fe3870dc627d2b7ddcd5df18d7ad0", - "urls": [ - "bzz-raw://1568c82aff125cc4b0fc168be9d67ac313f469a3c7405c5493caecaaaecfb765", - "dweb:/ipfs/QmXByuZReJsdu1jDcxj1FcmpcUnzoBcqybn9kWgDAECWri" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Vm.sol": { - "keccak256": "0x87ba9f3edc254e529db9e3129c954391adcc7fc8574203767979d8d2f1e724b9", - "urls": [ - "bzz-raw://4d16c08d80d9f2869deb6350642cf5af624d21fce6b3b023abbcdedc62e195fe", - "dweb:/ipfs/QmURpnnFECPKt3i7P7jQRZpr4ZBXjRGcZ9KzcbKzsgYR2W" - ], - "license": "MIT OR Apache-2.0" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/console.sol": { - "keccak256": "0x91d5413c2434ca58fd278b6e1e79fd98d10c83931cc2596a6038eee4daeb34ba", - "urls": [ - "bzz-raw://91ccea707361e48b9b7a161fe81f496b9932bc471e9c4e4e1e9c283f2453cc70", - "dweb:/ipfs/QmcB66sZhQ6Kz7MUHcLE78YXRUZxoZnnxZjN6yATsbB2ec" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/console2.sol": { - "keccak256": "0x954646445d1014c3cd85c7918f5e7adeeca5ee44b68c00bafa237e597a4e35ea", - "urls": [ - "bzz-raw://516fa3be52da4763147175bfba4be0aa011fadbb0c1afb01f97265bd4cee7973", - "dweb:/ipfs/QmdixAyMJefx7qePChgdxcBH5MxhmN7vsqPuPLx3CgrVmF" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/interfaces/IMulticall3.sol": { - "keccak256": "0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a", - "urls": [ - "bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0", - "dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/mocks/MockERC20.sol": { - "keccak256": "0xd8703f49411737ecf8d411f8fa66b2bf0ef972ba28b7a4adf1748c63df1bf682", - "urls": [ - "bzz-raw://b7c10a6b8112f6fe3cdccb6240ecd382765216b1a82e9a86a0fec8f5e09eadd1", - "dweb:/ipfs/QmdRvPCU4RkjMHsTu3Ric1ZEF1AWDNLp78unFC5aWP17xq" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/mocks/MockERC721.sol": { - "keccak256": "0xa24468244abb66e663fb7eee6463cb518eb9a7c14e1071548ff564cca825bbca", - "urls": [ - "bzz-raw://145585a2194aa6e2d30edfe709ef2814e20b1b4540469aa6a8f50c841fcb9070", - "dweb:/ipfs/QmZrwbvtpbtTxqbW5phUrwb3F1tBiPSQc6jZJAXBfsBsAh" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/safeconsole.sol": { - "keccak256": "0xbaf41fdc6c54297e7cd8250e48b0f20eaac918e342a1028cef3f9a52ac086381", - "urls": [ - "bzz-raw://a500ad81dea226f9910e6b50f99a9ff930105e393a692cbfb2185e4cdb4424ae", - "dweb:/ipfs/QmVbUQpXNMmMWRiy4FvBNczzq46BMGfUoBikvSHNiCxVTq" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/access/AccessControl.sol": { - "keccak256": "0xa0e92d42942f4f57c5be50568dac11e9d00c93efcb458026e18d2d9b9b2e7308", - "urls": [ - "bzz-raw://46326c0bb1e296b67185e81c918e0b40501b8b6386165855df0a3f3c634b6a80", - "dweb:/ipfs/QmTwyrDYtsxsk6pymJTK94PnEpzsmkpUxFuzEiakDopy4Z" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/access/IAccessControl.sol": { - "keccak256": "0xc1c2a7f1563b77050dc6d507db9f4ada5d042c1f6a9ddbffdc49c77cdc0a1606", - "urls": [ - "bzz-raw://fd54abb96a6156d9a761f6fdad1d3004bc48d2d4fce47f40a3f91a7ae83fc3a1", - "dweb:/ipfs/QmUrFSGkTDJ7WaZ6qPVVe3Gn5uN2viPb7x7QQ35UX4DofX" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/access/Ownable.sol": { - "keccak256": "0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb", - "urls": [ - "bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6", - "dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol": { - "keccak256": "0x9b6b3e7803bc5f2f8cd7ad57db8ac1def61a9930a5a3107df4882e028a9605d7", - "urls": [ - "bzz-raw://da62d6be1f5c6edf577f0cb45666a8aa9c2086a4bac87d95d65f02e2f4c36a4b", - "dweb:/ipfs/QmNkpvBpoCMvX8JwAFNSc5XxJ2q5BXJpL5L1txb4QkqVFF" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/interfaces/IERC165.sol": { - "keccak256": "0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724", - "urls": [ - "bzz-raw://11fea9f8bc98949ac6709f0c1699db7430d2948137aa94d5a9e95a91f61a710a", - "dweb:/ipfs/QmQdfRXxQjwP6yn3DVo1GHPpriKNcFghSPi94Z1oKEFUNS" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/interfaces/IERC20.sol": { - "keccak256": "0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c", - "urls": [ - "bzz-raw://a2608291cb038b388d80b79a06b6118a42f7894ff67b7da10ec0dbbf5b2973ba", - "dweb:/ipfs/QmWohqcBLbcxmA4eGPhZDXe5RYMMEEpFq22nfkaUMvTfw1" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol": { - "keccak256": "0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7", - "urls": [ - "bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db", - "dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol": { - "keccak256": "0xca2ae13e0610f6a99238dd00b97bd786bc92732dae6d6b9d61f573ec51018310", - "urls": [ - "bzz-raw://75f8c71ce0c91c40dd5f249ace0b7d8270f8f1767231bcf71490f7157d6ba862", - "dweb:/ipfs/QmYXgxeDyFHvz3JsXxLEYN6GNUR44ThHeFj5XkpkgMoG4w" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Address.sol": { - "keccak256": "0x9d8da059267bac779a2dbbb9a26c2acf00ca83085e105d62d5d4ef96054a47f5", - "urls": [ - "bzz-raw://c78e2aa4313323cecd1ef12a8d6265b96beee1a199923abf55d9a2a9e291ad23", - "dweb:/ipfs/QmUTs2KStXucZezzFo3EYeqYu47utu56qrF7jj1Gue65vb" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Context.sol": { - "keccak256": "0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2", - "urls": [ - "bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12", - "dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Errors.sol": { - "keccak256": "0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123", - "urls": [ - "bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf", - "dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Panic.sol": { - "keccak256": "0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a", - "urls": [ - "bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a", - "dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Pausable.sol": { - "keccak256": "0xb2e5f50762c27fb4b123e3619c3c02bdcba5e515309382e5bfb6f7d6486510bd", - "urls": [ - "bzz-raw://1a4b83328c98d518a2699c2cbe9e9b055e78aa57fa8639f1b88deb8b3750b5dc", - "dweb:/ipfs/QmXdcYj5v7zQxXFPULShHkR5p4Wa2zYuupbHnFdV3cHYtc" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/ReentrancyGuard.sol": { - "keccak256": "0x11a5a79827df29e915a12740caf62fe21ebe27c08c9ae3e09abe9ee3ba3866d3", - "urls": [ - "bzz-raw://3cf0c69ab827e3251db9ee6a50647d62c90ba580a4d7bbff21f2bea39e7b2f4a", - "dweb:/ipfs/QmZiKwtKU1SBX4RGfQtY7PZfiapbbu6SZ9vizGQD9UHjRA" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/cryptography/ECDSA.sol": { - "keccak256": "0x69f54c02b7d81d505910ec198c11ed4c6a728418a868b906b4a0cf29946fda84", - "urls": [ - "bzz-raw://8e25e4bdb7ae1f21d23bfee996e22736fc0ab44cfabedac82a757b1edc5623b9", - "dweb:/ipfs/QmQdWQvB6JCP9ZMbzi8EvQ1PTETqkcTWrbcVurS7DKpa5n" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/introspection/ERC165.sol": { - "keccak256": "0xddce8e17e3d3f9ed818b4f4c4478a8262aab8b11ed322f1bf5ed705bb4bd97fa", - "urls": [ - "bzz-raw://8084aa71a4cc7d2980972412a88fe4f114869faea3fefa5436431644eb5c0287", - "dweb:/ipfs/Qmbqfs5dRdPvHVKY8kTaeyc65NdqXRQwRK7h9s5UJEhD1p" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol": { - "keccak256": "0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8", - "urls": [ - "bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621", - "dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/math/SafeCast.sol": { - "keccak256": "0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54", - "urls": [ - "bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8", - "dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/structs/DoubleEndedQueue.sol": { - "keccak256": "0x1e1d74658d7f4eab3d4f8fb0c6c5953bc5f629d9425e978d557dabff7b58b217", - "urls": [ - "bzz-raw://be0175d00008d452d3d553890f73a3d5d51dff4372f720336c8b98f26822fcdb", - "dweb:/ipfs/QmUkE8g5xPExWoSAKwdi5ww1qJJVtEWtjSF93G2LMQkgD3" - ], - "license": "MIT" - }, - "node_modules/solidity-bytes-utils/contracts/BytesLib.sol": { - "keccak256": "0xa5b10f04797d5a10a9ba07855108b6bd695940e6a3d128927b2f74a0d359868a", - "urls": [ - "bzz-raw://a38d7680aacbb18dae659876b396b73bcc8f759672213f8a0efc4129e2648535", - "dweb:/ipfs/QmfKFnwpTEGAnbRnZxMuv3mRCG9S9WMjFhFL23bftBT2Jq" - ], - "license": "Unlicense" - } - }, - "version": 1 - }, - "id": 71 -} diff --git a/examples/oft-movement/out/Transfer.sol/Transfer.json b/examples/oft-movement/out/Transfer.sol/Transfer.json deleted file mode 100644 index 6405fb103..000000000 --- a/examples/oft-movement/out/Transfer.sol/Transfer.json +++ /dev/null @@ -1,138 +0,0 @@ -{ - "abi": [ - { - "type": "error", - "name": "Transfer_NativeFailed", - "inputs": [ - { "name": "_to", "type": "address", "internalType": "address" }, - { "name": "_value", "type": "uint256", "internalType": "uint256" } - ] - }, - { "type": "error", "name": "Transfer_ToAddressIsZero", "inputs": [] } - ], - "bytecode": { - "object": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220d388d26504a83b5d4c9dbf273a17e45a2ee3c2c6bc93c17252e14fa7b059f09e64736f6c63430008160033", - "sourceMap": "223:897:44:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;223:897:44;;;;;;;;;;;;;;;;;", - "linkReferences": {} - }, - "deployedBytecode": { - "object": "0x73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220d388d26504a83b5d4c9dbf273a17e45a2ee3c2c6bc93c17252e14fa7b059f09e64736f6c63430008160033", - "sourceMap": "223:897:44:-:0;;;;;;;;", - "linkReferences": {} - }, - "methodIdentifiers": {}, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"Transfer_NativeFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Transfer_ToAddressIsZero\",\"type\":\"error\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Transfer.sol\":\"Transfer\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Transfer.sol\":{\"keccak256\":\"0x621d6dd5b8b7e827351459fff4ac87c16ba4656757592cf67de8b199aea4cf9a\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://345aa8c007ed8b96a74260d289545713f1d7180df270d67687e3a540a61fa5c0\",\"dweb:/ipfs/QmNWCvpqSuar6UGLDVshUc7shUv3pt1J5FTf9VyZZ13wXL\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol\":{\"keccak256\":\"0x9b6b3e7803bc5f2f8cd7ad57db8ac1def61a9930a5a3107df4882e028a9605d7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://da62d6be1f5c6edf577f0cb45666a8aa9c2086a4bac87d95d65f02e2f4c36a4b\",\"dweb:/ipfs/QmNkpvBpoCMvX8JwAFNSc5XxJ2q5BXJpL5L1txb4QkqVFF\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC165.sol\":{\"keccak256\":\"0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://11fea9f8bc98949ac6709f0c1699db7430d2948137aa94d5a9e95a91f61a710a\",\"dweb:/ipfs/QmQdfRXxQjwP6yn3DVo1GHPpriKNcFghSPi94Z1oKEFUNS\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC20.sol\":{\"keccak256\":\"0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a2608291cb038b388d80b79a06b6118a42f7894ff67b7da10ec0dbbf5b2973ba\",\"dweb:/ipfs/QmWohqcBLbcxmA4eGPhZDXe5RYMMEEpFq22nfkaUMvTfw1\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db\",\"dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0xca2ae13e0610f6a99238dd00b97bd786bc92732dae6d6b9d61f573ec51018310\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://75f8c71ce0c91c40dd5f249ace0b7d8270f8f1767231bcf71490f7157d6ba862\",\"dweb:/ipfs/QmYXgxeDyFHvz3JsXxLEYN6GNUR44ThHeFj5XkpkgMoG4w\"]},\"node_modules/@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0x9d8da059267bac779a2dbbb9a26c2acf00ca83085e105d62d5d4ef96054a47f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c78e2aa4313323cecd1ef12a8d6265b96beee1a199923abf55d9a2a9e291ad23\",\"dweb:/ipfs/QmUTs2KStXucZezzFo3EYeqYu47utu56qrF7jj1Gue65vb\"]},\"node_modules/@openzeppelin/contracts/utils/Errors.sol\":{\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf\",\"dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB\"]},\"node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { - "inputs": [ - { "internalType": "address", "name": "_to", "type": "address" }, - { "internalType": "uint256", "name": "_value", "type": "uint256" } - ], - "type": "error", - "name": "Transfer_NativeFailed" - }, - { "inputs": [], "type": "error", "name": "Transfer_ToAddressIsZero" } - ], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Transfer.sol": "Transfer" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Transfer.sol": { - "keccak256": "0x621d6dd5b8b7e827351459fff4ac87c16ba4656757592cf67de8b199aea4cf9a", - "urls": [ - "bzz-raw://345aa8c007ed8b96a74260d289545713f1d7180df270d67687e3a540a61fa5c0", - "dweb:/ipfs/QmNWCvpqSuar6UGLDVshUc7shUv3pt1J5FTf9VyZZ13wXL" - ], - "license": "LZBL-1.2" - }, - "node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol": { - "keccak256": "0x9b6b3e7803bc5f2f8cd7ad57db8ac1def61a9930a5a3107df4882e028a9605d7", - "urls": [ - "bzz-raw://da62d6be1f5c6edf577f0cb45666a8aa9c2086a4bac87d95d65f02e2f4c36a4b", - "dweb:/ipfs/QmNkpvBpoCMvX8JwAFNSc5XxJ2q5BXJpL5L1txb4QkqVFF" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/interfaces/IERC165.sol": { - "keccak256": "0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724", - "urls": [ - "bzz-raw://11fea9f8bc98949ac6709f0c1699db7430d2948137aa94d5a9e95a91f61a710a", - "dweb:/ipfs/QmQdfRXxQjwP6yn3DVo1GHPpriKNcFghSPi94Z1oKEFUNS" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/interfaces/IERC20.sol": { - "keccak256": "0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c", - "urls": [ - "bzz-raw://a2608291cb038b388d80b79a06b6118a42f7894ff67b7da10ec0dbbf5b2973ba", - "dweb:/ipfs/QmWohqcBLbcxmA4eGPhZDXe5RYMMEEpFq22nfkaUMvTfw1" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol": { - "keccak256": "0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7", - "urls": [ - "bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db", - "dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol": { - "keccak256": "0xca2ae13e0610f6a99238dd00b97bd786bc92732dae6d6b9d61f573ec51018310", - "urls": [ - "bzz-raw://75f8c71ce0c91c40dd5f249ace0b7d8270f8f1767231bcf71490f7157d6ba862", - "dweb:/ipfs/QmYXgxeDyFHvz3JsXxLEYN6GNUR44ThHeFj5XkpkgMoG4w" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Address.sol": { - "keccak256": "0x9d8da059267bac779a2dbbb9a26c2acf00ca83085e105d62d5d4ef96054a47f5", - "urls": [ - "bzz-raw://c78e2aa4313323cecd1ef12a8d6265b96beee1a199923abf55d9a2a9e291ad23", - "dweb:/ipfs/QmUTs2KStXucZezzFo3EYeqYu47utu56qrF7jj1Gue65vb" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Errors.sol": { - "keccak256": "0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123", - "urls": [ - "bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf", - "dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol": { - "keccak256": "0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8", - "urls": [ - "bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621", - "dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL" - ], - "license": "MIT" - } - }, - "version": 1 - }, - "id": 44 -} diff --git a/examples/oft-movement/out/UlnBase.sol/UlnBase.json b/examples/oft-movement/out/UlnBase.sol/UlnBase.json deleted file mode 100644 index 356aef511..000000000 --- a/examples/oft-movement/out/UlnBase.sol/UlnBase.json +++ /dev/null @@ -1,762 +0,0 @@ -{ - "abi": [ - { - "type": "function", - "name": "getAppUlnConfig", - "inputs": [ - { "name": "_oapp", "type": "address", "internalType": "address" }, - { "name": "_remoteEid", "type": "uint32", "internalType": "uint32" } - ], - "outputs": [ - { - "name": "", - "type": "tuple", - "internalType": "struct UlnConfig", - "components": [ - { - "name": "confirmations", - "type": "uint64", - "internalType": "uint64" - }, - { - "name": "requiredDVNCount", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "optionalDVNCount", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "optionalDVNThreshold", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "requiredDVNs", - "type": "address[]", - "internalType": "address[]" - }, - { - "name": "optionalDVNs", - "type": "address[]", - "internalType": "address[]" - } - ] - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getUlnConfig", - "inputs": [ - { "name": "_oapp", "type": "address", "internalType": "address" }, - { "name": "_remoteEid", "type": "uint32", "internalType": "uint32" } - ], - "outputs": [ - { - "name": "rtnConfig", - "type": "tuple", - "internalType": "struct UlnConfig", - "components": [ - { - "name": "confirmations", - "type": "uint64", - "internalType": "uint64" - }, - { - "name": "requiredDVNCount", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "optionalDVNCount", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "optionalDVNThreshold", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "requiredDVNs", - "type": "address[]", - "internalType": "address[]" - }, - { - "name": "optionalDVNs", - "type": "address[]", - "internalType": "address[]" - } - ] - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "owner", - "inputs": [], - "outputs": [{ "name": "", "type": "address", "internalType": "address" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "renounceOwnership", - "inputs": [], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setDefaultUlnConfigs", - "inputs": [ - { - "name": "_params", - "type": "tuple[]", - "internalType": "struct SetDefaultUlnConfigParam[]", - "components": [ - { "name": "eid", "type": "uint32", "internalType": "uint32" }, - { - "name": "config", - "type": "tuple", - "internalType": "struct UlnConfig", - "components": [ - { - "name": "confirmations", - "type": "uint64", - "internalType": "uint64" - }, - { - "name": "requiredDVNCount", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "optionalDVNCount", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "optionalDVNThreshold", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "requiredDVNs", - "type": "address[]", - "internalType": "address[]" - }, - { - "name": "optionalDVNs", - "type": "address[]", - "internalType": "address[]" - } - ] - } - ] - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "transferOwnership", - "inputs": [ - { "name": "newOwner", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "event", - "name": "DefaultUlnConfigsSet", - "inputs": [ - { - "name": "params", - "type": "tuple[]", - "indexed": false, - "internalType": "struct SetDefaultUlnConfigParam[]", - "components": [ - { "name": "eid", "type": "uint32", "internalType": "uint32" }, - { - "name": "config", - "type": "tuple", - "internalType": "struct UlnConfig", - "components": [ - { - "name": "confirmations", - "type": "uint64", - "internalType": "uint64" - }, - { - "name": "requiredDVNCount", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "optionalDVNCount", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "optionalDVNThreshold", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "requiredDVNs", - "type": "address[]", - "internalType": "address[]" - }, - { - "name": "optionalDVNs", - "type": "address[]", - "internalType": "address[]" - } - ] - } - ] - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "OwnershipTransferred", - "inputs": [ - { - "name": "previousOwner", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "newOwner", - "type": "address", - "indexed": true, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "UlnConfigSet", - "inputs": [ - { - "name": "oapp", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "eid", - "type": "uint32", - "indexed": false, - "internalType": "uint32" - }, - { - "name": "config", - "type": "tuple", - "indexed": false, - "internalType": "struct UlnConfig", - "components": [ - { - "name": "confirmations", - "type": "uint64", - "internalType": "uint64" - }, - { - "name": "requiredDVNCount", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "optionalDVNCount", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "optionalDVNThreshold", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "requiredDVNs", - "type": "address[]", - "internalType": "address[]" - }, - { - "name": "optionalDVNs", - "type": "address[]", - "internalType": "address[]" - } - ] - } - ], - "anonymous": false - }, - { "type": "error", "name": "LZ_ULN_AtLeastOneDVN", "inputs": [] }, - { "type": "error", "name": "LZ_ULN_InvalidConfirmations", "inputs": [] }, - { "type": "error", "name": "LZ_ULN_InvalidOptionalDVNCount", "inputs": [] }, - { - "type": "error", - "name": "LZ_ULN_InvalidOptionalDVNThreshold", - "inputs": [] - }, - { "type": "error", "name": "LZ_ULN_InvalidRequiredDVNCount", "inputs": [] }, - { "type": "error", "name": "LZ_ULN_Unsorted", "inputs": [] }, - { - "type": "error", - "name": "LZ_ULN_UnsupportedEid", - "inputs": [{ "name": "eid", "type": "uint32", "internalType": "uint32" }] - }, - { - "type": "error", - "name": "OwnableInvalidOwner", - "inputs": [ - { "name": "owner", "type": "address", "internalType": "address" } - ] - }, - { - "type": "error", - "name": "OwnableUnauthorizedAccount", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ] - } - ], - "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "methodIdentifiers": { - "getAppUlnConfig(address,uint32)": "39e3f938", - "getUlnConfig(address,uint32)": "43ea4fa9", - "owner()": "8da5cb5b", - "renounceOwnership()": "715018a6", - "setDefaultUlnConfigs((uint32,(uint64,uint8,uint8,uint8,address[],address[]))[])": "29460b0b", - "transferOwnership(address)": "f2fde38b" - }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"LZ_ULN_AtLeastOneDVN\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_ULN_InvalidConfirmations\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_ULN_InvalidOptionalDVNCount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_ULN_InvalidOptionalDVNThreshold\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_ULN_InvalidRequiredDVNCount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_ULN_Unsorted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"}],\"name\":\"LZ_ULN_UnsupportedEid\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"confirmations\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"requiredDVNCount\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"optionalDVNCount\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"optionalDVNThreshold\",\"type\":\"uint8\"},{\"internalType\":\"address[]\",\"name\":\"requiredDVNs\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"optionalDVNs\",\"type\":\"address[]\"}],\"internalType\":\"struct UlnConfig\",\"name\":\"config\",\"type\":\"tuple\"}],\"indexed\":false,\"internalType\":\"struct SetDefaultUlnConfigParam[]\",\"name\":\"params\",\"type\":\"tuple[]\"}],\"name\":\"DefaultUlnConfigsSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oapp\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"confirmations\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"requiredDVNCount\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"optionalDVNCount\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"optionalDVNThreshold\",\"type\":\"uint8\"},{\"internalType\":\"address[]\",\"name\":\"requiredDVNs\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"optionalDVNs\",\"type\":\"address[]\"}],\"indexed\":false,\"internalType\":\"struct UlnConfig\",\"name\":\"config\",\"type\":\"tuple\"}],\"name\":\"UlnConfigSet\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_oapp\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_remoteEid\",\"type\":\"uint32\"}],\"name\":\"getAppUlnConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"confirmations\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"requiredDVNCount\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"optionalDVNCount\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"optionalDVNThreshold\",\"type\":\"uint8\"},{\"internalType\":\"address[]\",\"name\":\"requiredDVNs\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"optionalDVNs\",\"type\":\"address[]\"}],\"internalType\":\"struct UlnConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_oapp\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_remoteEid\",\"type\":\"uint32\"}],\"name\":\"getUlnConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"confirmations\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"requiredDVNCount\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"optionalDVNCount\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"optionalDVNThreshold\",\"type\":\"uint8\"},{\"internalType\":\"address[]\",\"name\":\"requiredDVNs\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"optionalDVNs\",\"type\":\"address[]\"}],\"internalType\":\"struct UlnConfig\",\"name\":\"rtnConfig\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"eid\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"confirmations\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"requiredDVNCount\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"optionalDVNCount\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"optionalDVNThreshold\",\"type\":\"uint8\"},{\"internalType\":\"address[]\",\"name\":\"requiredDVNs\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"optionalDVNs\",\"type\":\"address[]\"}],\"internalType\":\"struct UlnConfig\",\"name\":\"config\",\"type\":\"tuple\"}],\"internalType\":\"struct SetDefaultUlnConfigParam[]\",\"name\":\"_params\",\"type\":\"tuple[]\"}],\"name\":\"setDefaultUlnConfigs\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"includes the utility functions for checking ULN states and logics\",\"errors\":{\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}]},\"kind\":\"dev\",\"methods\":{\"getAppUlnConfig(address,uint32)\":{\"details\":\"Get the uln config without the default config for the given remoteEid.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"setDefaultUlnConfigs((uint32,(uint64,uint8,uint8,uint8,address[],address[]))[])\":{\"details\":\"about the DEFAULT ULN config 1) its values are all LITERAL (e.g. 0 is 0). whereas in the oapp ULN config, 0 (default value) points to the default ULN config this design enables the oapp to point to DEFAULT config without explicitly setting the config 2) its configuration is more restrictive than the oapp ULN config that a) it must not use NIL value, where NIL is used only by oapps to indicate the LITERAL 0 b) it must have at least one DVN\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/UlnBase.sol\":\"UlnBase\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/UlnBase.sol\":{\"keccak256\":\"0xfdb1d04f4996c0a9d35abfbfcf10d978da638885eb77d0a9dc35cea5993074e3\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://776d58d88d13b058f236cf18c32b4b9718a021513fc4e198287f4fe18ec5aba4\",\"dweb:/ipfs/QmdNX8jJu2aXJ8Dpbt2ohfhT8RKQLuvh58sW6SAXcUTcV9\"]},\"node_modules/@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { "inputs": [], "type": "error", "name": "LZ_ULN_AtLeastOneDVN" }, - { - "inputs": [], - "type": "error", - "name": "LZ_ULN_InvalidConfirmations" - }, - { - "inputs": [], - "type": "error", - "name": "LZ_ULN_InvalidOptionalDVNCount" - }, - { - "inputs": [], - "type": "error", - "name": "LZ_ULN_InvalidOptionalDVNThreshold" - }, - { - "inputs": [], - "type": "error", - "name": "LZ_ULN_InvalidRequiredDVNCount" - }, - { "inputs": [], "type": "error", "name": "LZ_ULN_Unsorted" }, - { - "inputs": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" } - ], - "type": "error", - "name": "LZ_ULN_UnsupportedEid" - }, - { - "inputs": [ - { "internalType": "address", "name": "owner", "type": "address" } - ], - "type": "error", - "name": "OwnableInvalidOwner" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "type": "error", - "name": "OwnableUnauthorizedAccount" - }, - { - "inputs": [ - { - "internalType": "struct SetDefaultUlnConfigParam[]", - "name": "params", - "type": "tuple[]", - "components": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" }, - { - "internalType": "struct UlnConfig", - "name": "config", - "type": "tuple", - "components": [ - { - "internalType": "uint64", - "name": "confirmations", - "type": "uint64" - }, - { - "internalType": "uint8", - "name": "requiredDVNCount", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "optionalDVNCount", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "optionalDVNThreshold", - "type": "uint8" - }, - { - "internalType": "address[]", - "name": "requiredDVNs", - "type": "address[]" - }, - { - "internalType": "address[]", - "name": "optionalDVNs", - "type": "address[]" - } - ] - } - ], - "indexed": false - } - ], - "type": "event", - "name": "DefaultUlnConfigsSet", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "previousOwner", - "type": "address", - "indexed": true - }, - { - "internalType": "address", - "name": "newOwner", - "type": "address", - "indexed": true - } - ], - "type": "event", - "name": "OwnershipTransferred", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "oapp", - "type": "address", - "indexed": false - }, - { - "internalType": "uint32", - "name": "eid", - "type": "uint32", - "indexed": false - }, - { - "internalType": "struct UlnConfig", - "name": "config", - "type": "tuple", - "components": [ - { - "internalType": "uint64", - "name": "confirmations", - "type": "uint64" - }, - { - "internalType": "uint8", - "name": "requiredDVNCount", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "optionalDVNCount", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "optionalDVNThreshold", - "type": "uint8" - }, - { - "internalType": "address[]", - "name": "requiredDVNs", - "type": "address[]" - }, - { - "internalType": "address[]", - "name": "optionalDVNs", - "type": "address[]" - } - ], - "indexed": false - } - ], - "type": "event", - "name": "UlnConfigSet", - "anonymous": false - }, - { - "inputs": [ - { "internalType": "address", "name": "_oapp", "type": "address" }, - { "internalType": "uint32", "name": "_remoteEid", "type": "uint32" } - ], - "stateMutability": "view", - "type": "function", - "name": "getAppUlnConfig", - "outputs": [ - { - "internalType": "struct UlnConfig", - "name": "", - "type": "tuple", - "components": [ - { - "internalType": "uint64", - "name": "confirmations", - "type": "uint64" - }, - { - "internalType": "uint8", - "name": "requiredDVNCount", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "optionalDVNCount", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "optionalDVNThreshold", - "type": "uint8" - }, - { - "internalType": "address[]", - "name": "requiredDVNs", - "type": "address[]" - }, - { - "internalType": "address[]", - "name": "optionalDVNs", - "type": "address[]" - } - ] - } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "_oapp", "type": "address" }, - { "internalType": "uint32", "name": "_remoteEid", "type": "uint32" } - ], - "stateMutability": "view", - "type": "function", - "name": "getUlnConfig", - "outputs": [ - { - "internalType": "struct UlnConfig", - "name": "rtnConfig", - "type": "tuple", - "components": [ - { - "internalType": "uint64", - "name": "confirmations", - "type": "uint64" - }, - { - "internalType": "uint8", - "name": "requiredDVNCount", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "optionalDVNCount", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "optionalDVNThreshold", - "type": "uint8" - }, - { - "internalType": "address[]", - "name": "requiredDVNs", - "type": "address[]" - }, - { - "internalType": "address[]", - "name": "optionalDVNs", - "type": "address[]" - } - ] - } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "owner", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ] - }, - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "function", - "name": "renounceOwnership" - }, - { - "inputs": [ - { - "internalType": "struct SetDefaultUlnConfigParam[]", - "name": "_params", - "type": "tuple[]", - "components": [ - { "internalType": "uint32", "name": "eid", "type": "uint32" }, - { - "internalType": "struct UlnConfig", - "name": "config", - "type": "tuple", - "components": [ - { - "internalType": "uint64", - "name": "confirmations", - "type": "uint64" - }, - { - "internalType": "uint8", - "name": "requiredDVNCount", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "optionalDVNCount", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "optionalDVNThreshold", - "type": "uint8" - }, - { - "internalType": "address[]", - "name": "requiredDVNs", - "type": "address[]" - }, - { - "internalType": "address[]", - "name": "optionalDVNs", - "type": "address[]" - } - ] - } - ] - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setDefaultUlnConfigs" - }, - { - "inputs": [ - { "internalType": "address", "name": "newOwner", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "transferOwnership" - } - ], - "devdoc": { - "kind": "dev", - "methods": { - "getAppUlnConfig(address,uint32)": { - "details": "Get the uln config without the default config for the given remoteEid." - }, - "owner()": { "details": "Returns the address of the current owner." }, - "renounceOwnership()": { - "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner." - }, - "setDefaultUlnConfigs((uint32,(uint64,uint8,uint8,uint8,address[],address[]))[])": { - "details": "about the DEFAULT ULN config 1) its values are all LITERAL (e.g. 0 is 0). whereas in the oapp ULN config, 0 (default value) points to the default ULN config this design enables the oapp to point to DEFAULT config without explicitly setting the config 2) its configuration is more restrictive than the oapp ULN config that a) it must not use NIL value, where NIL is used only by oapps to indicate the LITERAL 0 b) it must have at least one DVN" - }, - "transferOwnership(address)": { - "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." - } - }, - "version": 1 - }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/UlnBase.sol": "UlnBase" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/UlnBase.sol": { - "keccak256": "0xfdb1d04f4996c0a9d35abfbfcf10d978da638885eb77d0a9dc35cea5993074e3", - "urls": [ - "bzz-raw://776d58d88d13b058f236cf18c32b4b9718a021513fc4e198287f4fe18ec5aba4", - "dweb:/ipfs/QmdNX8jJu2aXJ8Dpbt2ohfhT8RKQLuvh58sW6SAXcUTcV9" - ], - "license": "LZBL-1.2" - }, - "node_modules/@openzeppelin/contracts/access/Ownable.sol": { - "keccak256": "0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb", - "urls": [ - "bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6", - "dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Context.sol": { - "keccak256": "0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2", - "urls": [ - "bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12", - "dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF" - ], - "license": "MIT" - } - }, - "version": 1 - }, - "id": 15 -} diff --git a/examples/oft-movement/out/UlnOptions.sol/UlnOptions.json b/examples/oft-movement/out/UlnOptions.sol/UlnOptions.json deleted file mode 100644 index 402b42649..000000000 --- a/examples/oft-movement/out/UlnOptions.sol/UlnOptions.json +++ /dev/null @@ -1,166 +0,0 @@ -{ - "abi": [ - { - "type": "error", - "name": "LZ_ULN_InvalidLegacyType1Option", - "inputs": [] - }, - { - "type": "error", - "name": "LZ_ULN_InvalidLegacyType2Option", - "inputs": [] - }, - { - "type": "error", - "name": "LZ_ULN_InvalidWorkerId", - "inputs": [ - { "name": "workerId", "type": "uint8", "internalType": "uint8" } - ] - }, - { - "type": "error", - "name": "LZ_ULN_InvalidWorkerOptions", - "inputs": [ - { "name": "cursor", "type": "uint256", "internalType": "uint256" } - ] - }, - { - "type": "error", - "name": "LZ_ULN_UnsupportedOptionType", - "inputs": [ - { "name": "optionType", "type": "uint16", "internalType": "uint16" } - ] - } - ], - "bytecode": { - "object": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212206dc32231264c1aa12f05e620eabce1f796b220f402cd96a1449ca813e4b2ab3b64736f6c63430008160033", - "sourceMap": "305:8177:24:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;305:8177:24;;;;;;;;;;;;;;;;;", - "linkReferences": {} - }, - "deployedBytecode": { - "object": "0x73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212206dc32231264c1aa12f05e620eabce1f796b220f402cd96a1449ca813e4b2ab3b64736f6c63430008160033", - "sourceMap": "305:8177:24:-:0;;;;;;;;", - "linkReferences": {} - }, - "methodIdentifiers": {}, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"LZ_ULN_InvalidLegacyType1Option\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_ULN_InvalidLegacyType2Option\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"workerId\",\"type\":\"uint8\"}],\"name\":\"LZ_ULN_InvalidWorkerId\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"cursor\",\"type\":\"uint256\"}],\"name\":\"LZ_ULN_InvalidWorkerOptions\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"optionType\",\"type\":\"uint16\"}],\"name\":\"LZ_ULN_UnsupportedOptionType\",\"type\":\"error\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/UlnOptions.sol\":\"UlnOptions\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/DVNOptions.sol\":{\"keccak256\":\"0x2beee03cdf59a9bc72e94d08b69cb2e908725f4ceabb48651494938100e21e35\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://d88e121a39e74309f3575417df2318e2d2ee8bc8314e68dbf78544a9c393b141\",\"dweb:/ipfs/QmRojBRAyENK21HnjevAWeoZZxtWkYZubB9Y78vCJPYeU6\"]},\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/UlnOptions.sol\":{\"keccak256\":\"0x5df07fef16b20767f7524c367d90f696c12e8ce0e4fde7aecc9d83fb2b6b0e27\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://0997203f57d736e56ebb3d736550f1c7ff7950c8df0574c7abe95e22f847b850\",\"dweb:/ipfs/QmZBjkH1vaPLyN3Jx9kGfVZKuTdfVWJfJVLSPok8SpjGbT\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/CalldataBytesLib.sol\":{\"keccak256\":\"0x5c0db161cef6603c3b256d4220f489419e7478ef775e52a80056654129c61875\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://a33245d0fdd3992bb56b31d1840108d36bb46c8d617b659ef1af8dd7ed86302d\",\"dweb:/ipfs/QmWyBqT7Tdrfn5zz9xYM3V1PBtfAZAVwwCrrKwwfi3wMQK\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/BitMaps.sol\":{\"keccak256\":\"0xaad3c72ef43480d2253fd48b394e8fb7286d009991d2bc4e61be58ce48ac5ee9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b8c02b14f954416ba2148b389c87da8378ac8dd16ba3d458cbbfba8b0fd8639f\",\"dweb:/ipfs/Qmd2EEQhYL2VmgJi1V4uiHM2WcYxF9iBtxSgcFkbS21rQD\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/ExecutorOptions.sol\":{\"keccak256\":\"0x621c6090fc432f94a99f677a95d72b75f56db89ddc5fc870669777a313587c28\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://69086166f16d29e30c5eb9ca2f97afb27569afe619807d79736833a809a512d2\",\"dweb:/ipfs/QmcZqXjFuVdTrfbteKBF3GuEpjVFZ2YNZTa3J87dyLsqav\"]},\"node_modules/@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]},\"node_modules/solidity-bytes-utils/contracts/BytesLib.sol\":{\"keccak256\":\"0xa5b10f04797d5a10a9ba07855108b6bd695940e6a3d128927b2f74a0d359868a\",\"license\":\"Unlicense\",\"urls\":[\"bzz-raw://a38d7680aacbb18dae659876b396b73bcc8f759672213f8a0efc4129e2648535\",\"dweb:/ipfs/QmfKFnwpTEGAnbRnZxMuv3mRCG9S9WMjFhFL23bftBT2Jq\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { - "inputs": [], - "type": "error", - "name": "LZ_ULN_InvalidLegacyType1Option" - }, - { - "inputs": [], - "type": "error", - "name": "LZ_ULN_InvalidLegacyType2Option" - }, - { - "inputs": [ - { "internalType": "uint8", "name": "workerId", "type": "uint8" } - ], - "type": "error", - "name": "LZ_ULN_InvalidWorkerId" - }, - { - "inputs": [ - { "internalType": "uint256", "name": "cursor", "type": "uint256" } - ], - "type": "error", - "name": "LZ_ULN_InvalidWorkerOptions" - }, - { - "inputs": [ - { "internalType": "uint16", "name": "optionType", "type": "uint16" } - ], - "type": "error", - "name": "LZ_ULN_UnsupportedOptionType" - } - ], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/UlnOptions.sol": "UlnOptions" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/DVNOptions.sol": { - "keccak256": "0x2beee03cdf59a9bc72e94d08b69cb2e908725f4ceabb48651494938100e21e35", - "urls": [ - "bzz-raw://d88e121a39e74309f3575417df2318e2d2ee8bc8314e68dbf78544a9c393b141", - "dweb:/ipfs/QmRojBRAyENK21HnjevAWeoZZxtWkYZubB9Y78vCJPYeU6" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/UlnOptions.sol": { - "keccak256": "0x5df07fef16b20767f7524c367d90f696c12e8ce0e4fde7aecc9d83fb2b6b0e27", - "urls": [ - "bzz-raw://0997203f57d736e56ebb3d736550f1c7ff7950c8df0574c7abe95e22f847b850", - "dweb:/ipfs/QmZBjkH1vaPLyN3Jx9kGfVZKuTdfVWJfJVLSPok8SpjGbT" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/CalldataBytesLib.sol": { - "keccak256": "0x5c0db161cef6603c3b256d4220f489419e7478ef775e52a80056654129c61875", - "urls": [ - "bzz-raw://a33245d0fdd3992bb56b31d1840108d36bb46c8d617b659ef1af8dd7ed86302d", - "dweb:/ipfs/QmWyBqT7Tdrfn5zz9xYM3V1PBtfAZAVwwCrrKwwfi3wMQK" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/BitMaps.sol": { - "keccak256": "0xaad3c72ef43480d2253fd48b394e8fb7286d009991d2bc4e61be58ce48ac5ee9", - "urls": [ - "bzz-raw://b8c02b14f954416ba2148b389c87da8378ac8dd16ba3d458cbbfba8b0fd8639f", - "dweb:/ipfs/Qmd2EEQhYL2VmgJi1V4uiHM2WcYxF9iBtxSgcFkbS21rQD" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/ExecutorOptions.sol": { - "keccak256": "0x621c6090fc432f94a99f677a95d72b75f56db89ddc5fc870669777a313587c28", - "urls": [ - "bzz-raw://69086166f16d29e30c5eb9ca2f97afb27569afe619807d79736833a809a512d2", - "dweb:/ipfs/QmcZqXjFuVdTrfbteKBF3GuEpjVFZ2YNZTa3J87dyLsqav" - ], - "license": "LZBL-1.2" - }, - "node_modules/@openzeppelin/contracts/utils/math/SafeCast.sol": { - "keccak256": "0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54", - "urls": [ - "bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8", - "dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy" - ], - "license": "MIT" - }, - "node_modules/solidity-bytes-utils/contracts/BytesLib.sol": { - "keccak256": "0xa5b10f04797d5a10a9ba07855108b6bd695940e6a3d128927b2f74a0d359868a", - "urls": [ - "bzz-raw://a38d7680aacbb18dae659876b396b73bcc8f759672213f8a0efc4129e2648535", - "dweb:/ipfs/QmfKFnwpTEGAnbRnZxMuv3mRCG9S9WMjFhFL23bftBT2Jq" - ], - "license": "Unlicense" - } - }, - "version": 1 - }, - "id": 24 -} diff --git a/examples/oft-movement/out/Vm.sol/Vm.json b/examples/oft-movement/out/Vm.sol/Vm.json deleted file mode 100644 index 0ca85725a..000000000 --- a/examples/oft-movement/out/Vm.sol/Vm.json +++ /dev/null @@ -1,7014 +0,0 @@ -{ - "abi": [ - { - "type": "function", - "name": "accesses", - "inputs": [ - { "name": "target", "type": "address", "internalType": "address" } - ], - "outputs": [ - { - "name": "readSlots", - "type": "bytes32[]", - "internalType": "bytes32[]" - }, - { - "name": "writeSlots", - "type": "bytes32[]", - "internalType": "bytes32[]" - } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "activeFork", - "inputs": [], - "outputs": [ - { "name": "forkId", "type": "uint256", "internalType": "uint256" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "addr", - "inputs": [ - { "name": "privateKey", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [ - { "name": "keyAddr", "type": "address", "internalType": "address" } - ], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "allowCheatcodes", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "assume", - "inputs": [ - { "name": "condition", "type": "bool", "internalType": "bool" } - ], - "outputs": [], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "breakpoint", - "inputs": [ - { "name": "char", "type": "string", "internalType": "string" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "breakpoint", - "inputs": [ - { "name": "char", "type": "string", "internalType": "string" }, - { "name": "value", "type": "bool", "internalType": "bool" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "broadcast", - "inputs": [], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "broadcast", - "inputs": [ - { "name": "signer", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "broadcast", - "inputs": [ - { "name": "privateKey", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "chainId", - "inputs": [ - { "name": "newChainId", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "clearMockedCalls", - "inputs": [], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "closeFile", - "inputs": [ - { "name": "path", "type": "string", "internalType": "string" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "coinbase", - "inputs": [ - { "name": "newCoinbase", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "computeCreate2Address", - "inputs": [ - { "name": "salt", "type": "bytes32", "internalType": "bytes32" }, - { "name": "initCodeHash", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [{ "name": "", "type": "address", "internalType": "address" }], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "computeCreate2Address", - "inputs": [ - { "name": "salt", "type": "bytes32", "internalType": "bytes32" }, - { - "name": "initCodeHash", - "type": "bytes32", - "internalType": "bytes32" - }, - { "name": "deployer", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "", "type": "address", "internalType": "address" }], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "computeCreateAddress", - "inputs": [ - { "name": "deployer", "type": "address", "internalType": "address" }, - { "name": "nonce", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [{ "name": "", "type": "address", "internalType": "address" }], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "copyFile", - "inputs": [ - { "name": "from", "type": "string", "internalType": "string" }, - { "name": "to", "type": "string", "internalType": "string" } - ], - "outputs": [ - { "name": "copied", "type": "uint64", "internalType": "uint64" } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "createDir", - "inputs": [ - { "name": "path", "type": "string", "internalType": "string" }, - { "name": "recursive", "type": "bool", "internalType": "bool" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "createFork", - "inputs": [ - { "name": "urlOrAlias", "type": "string", "internalType": "string" } - ], - "outputs": [ - { "name": "forkId", "type": "uint256", "internalType": "uint256" } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "createFork", - "inputs": [ - { "name": "urlOrAlias", "type": "string", "internalType": "string" }, - { "name": "blockNumber", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [ - { "name": "forkId", "type": "uint256", "internalType": "uint256" } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "createFork", - "inputs": [ - { "name": "urlOrAlias", "type": "string", "internalType": "string" }, - { "name": "txHash", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [ - { "name": "forkId", "type": "uint256", "internalType": "uint256" } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "createSelectFork", - "inputs": [ - { "name": "urlOrAlias", "type": "string", "internalType": "string" }, - { "name": "blockNumber", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [ - { "name": "forkId", "type": "uint256", "internalType": "uint256" } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "createSelectFork", - "inputs": [ - { "name": "urlOrAlias", "type": "string", "internalType": "string" }, - { "name": "txHash", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [ - { "name": "forkId", "type": "uint256", "internalType": "uint256" } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "createSelectFork", - "inputs": [ - { "name": "urlOrAlias", "type": "string", "internalType": "string" } - ], - "outputs": [ - { "name": "forkId", "type": "uint256", "internalType": "uint256" } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "createWallet", - "inputs": [ - { "name": "walletLabel", "type": "string", "internalType": "string" } - ], - "outputs": [ - { - "name": "wallet", - "type": "tuple", - "internalType": "struct VmSafe.Wallet", - "components": [ - { "name": "addr", "type": "address", "internalType": "address" }, - { - "name": "publicKeyX", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "publicKeyY", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "privateKey", - "type": "uint256", - "internalType": "uint256" - } - ] - } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "createWallet", - "inputs": [ - { "name": "privateKey", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [ - { - "name": "wallet", - "type": "tuple", - "internalType": "struct VmSafe.Wallet", - "components": [ - { "name": "addr", "type": "address", "internalType": "address" }, - { - "name": "publicKeyX", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "publicKeyY", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "privateKey", - "type": "uint256", - "internalType": "uint256" - } - ] - } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "createWallet", - "inputs": [ - { "name": "privateKey", "type": "uint256", "internalType": "uint256" }, - { "name": "walletLabel", "type": "string", "internalType": "string" } - ], - "outputs": [ - { - "name": "wallet", - "type": "tuple", - "internalType": "struct VmSafe.Wallet", - "components": [ - { "name": "addr", "type": "address", "internalType": "address" }, - { - "name": "publicKeyX", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "publicKeyY", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "privateKey", - "type": "uint256", - "internalType": "uint256" - } - ] - } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "deal", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" }, - { "name": "newBalance", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "deleteSnapshot", - "inputs": [ - { "name": "snapshotId", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [ - { "name": "success", "type": "bool", "internalType": "bool" } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "deleteSnapshots", - "inputs": [], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "deriveKey", - "inputs": [ - { "name": "mnemonic", "type": "string", "internalType": "string" }, - { - "name": "derivationPath", - "type": "string", - "internalType": "string" - }, - { "name": "index", "type": "uint32", "internalType": "uint32" }, - { "name": "language", "type": "string", "internalType": "string" } - ], - "outputs": [ - { "name": "privateKey", "type": "uint256", "internalType": "uint256" } - ], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "deriveKey", - "inputs": [ - { "name": "mnemonic", "type": "string", "internalType": "string" }, - { "name": "index", "type": "uint32", "internalType": "uint32" }, - { "name": "language", "type": "string", "internalType": "string" } - ], - "outputs": [ - { "name": "privateKey", "type": "uint256", "internalType": "uint256" } - ], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "deriveKey", - "inputs": [ - { "name": "mnemonic", "type": "string", "internalType": "string" }, - { "name": "index", "type": "uint32", "internalType": "uint32" } - ], - "outputs": [ - { "name": "privateKey", "type": "uint256", "internalType": "uint256" } - ], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "deriveKey", - "inputs": [ - { "name": "mnemonic", "type": "string", "internalType": "string" }, - { - "name": "derivationPath", - "type": "string", - "internalType": "string" - }, - { "name": "index", "type": "uint32", "internalType": "uint32" } - ], - "outputs": [ - { "name": "privateKey", "type": "uint256", "internalType": "uint256" } - ], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "difficulty", - "inputs": [ - { - "name": "newDifficulty", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "dumpState", - "inputs": [ - { - "name": "pathToStateJson", - "type": "string", - "internalType": "string" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "envAddress", - "inputs": [ - { "name": "name", "type": "string", "internalType": "string" } - ], - "outputs": [ - { "name": "value", "type": "address", "internalType": "address" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "envAddress", - "inputs": [ - { "name": "name", "type": "string", "internalType": "string" }, - { "name": "delim", "type": "string", "internalType": "string" } - ], - "outputs": [ - { "name": "value", "type": "address[]", "internalType": "address[]" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "envBool", - "inputs": [ - { "name": "name", "type": "string", "internalType": "string" } - ], - "outputs": [{ "name": "value", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "envBool", - "inputs": [ - { "name": "name", "type": "string", "internalType": "string" }, - { "name": "delim", "type": "string", "internalType": "string" } - ], - "outputs": [ - { "name": "value", "type": "bool[]", "internalType": "bool[]" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "envBytes", - "inputs": [ - { "name": "name", "type": "string", "internalType": "string" } - ], - "outputs": [ - { "name": "value", "type": "bytes", "internalType": "bytes" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "envBytes", - "inputs": [ - { "name": "name", "type": "string", "internalType": "string" }, - { "name": "delim", "type": "string", "internalType": "string" } - ], - "outputs": [ - { "name": "value", "type": "bytes[]", "internalType": "bytes[]" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "envBytes32", - "inputs": [ - { "name": "name", "type": "string", "internalType": "string" }, - { "name": "delim", "type": "string", "internalType": "string" } - ], - "outputs": [ - { "name": "value", "type": "bytes32[]", "internalType": "bytes32[]" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "envBytes32", - "inputs": [ - { "name": "name", "type": "string", "internalType": "string" } - ], - "outputs": [ - { "name": "value", "type": "bytes32", "internalType": "bytes32" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "envInt", - "inputs": [ - { "name": "name", "type": "string", "internalType": "string" }, - { "name": "delim", "type": "string", "internalType": "string" } - ], - "outputs": [ - { "name": "value", "type": "int256[]", "internalType": "int256[]" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "envInt", - "inputs": [ - { "name": "name", "type": "string", "internalType": "string" } - ], - "outputs": [ - { "name": "value", "type": "int256", "internalType": "int256" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "envOr", - "inputs": [ - { "name": "name", "type": "string", "internalType": "string" }, - { "name": "delim", "type": "string", "internalType": "string" }, - { - "name": "defaultValue", - "type": "bytes32[]", - "internalType": "bytes32[]" - } - ], - "outputs": [ - { "name": "value", "type": "bytes32[]", "internalType": "bytes32[]" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "envOr", - "inputs": [ - { "name": "name", "type": "string", "internalType": "string" }, - { "name": "delim", "type": "string", "internalType": "string" }, - { - "name": "defaultValue", - "type": "int256[]", - "internalType": "int256[]" - } - ], - "outputs": [ - { "name": "value", "type": "int256[]", "internalType": "int256[]" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "envOr", - "inputs": [ - { "name": "name", "type": "string", "internalType": "string" }, - { "name": "defaultValue", "type": "bool", "internalType": "bool" } - ], - "outputs": [{ "name": "value", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "envOr", - "inputs": [ - { "name": "name", "type": "string", "internalType": "string" }, - { "name": "defaultValue", "type": "address", "internalType": "address" } - ], - "outputs": [ - { "name": "value", "type": "address", "internalType": "address" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "envOr", - "inputs": [ - { "name": "name", "type": "string", "internalType": "string" }, - { "name": "defaultValue", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [ - { "name": "value", "type": "uint256", "internalType": "uint256" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "envOr", - "inputs": [ - { "name": "name", "type": "string", "internalType": "string" }, - { "name": "delim", "type": "string", "internalType": "string" }, - { "name": "defaultValue", "type": "bytes[]", "internalType": "bytes[]" } - ], - "outputs": [ - { "name": "value", "type": "bytes[]", "internalType": "bytes[]" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "envOr", - "inputs": [ - { "name": "name", "type": "string", "internalType": "string" }, - { "name": "delim", "type": "string", "internalType": "string" }, - { - "name": "defaultValue", - "type": "uint256[]", - "internalType": "uint256[]" - } - ], - "outputs": [ - { "name": "value", "type": "uint256[]", "internalType": "uint256[]" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "envOr", - "inputs": [ - { "name": "name", "type": "string", "internalType": "string" }, - { "name": "delim", "type": "string", "internalType": "string" }, - { - "name": "defaultValue", - "type": "string[]", - "internalType": "string[]" - } - ], - "outputs": [ - { "name": "value", "type": "string[]", "internalType": "string[]" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "envOr", - "inputs": [ - { "name": "name", "type": "string", "internalType": "string" }, - { "name": "defaultValue", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [ - { "name": "value", "type": "bytes", "internalType": "bytes" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "envOr", - "inputs": [ - { "name": "name", "type": "string", "internalType": "string" }, - { "name": "defaultValue", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [ - { "name": "value", "type": "bytes32", "internalType": "bytes32" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "envOr", - "inputs": [ - { "name": "name", "type": "string", "internalType": "string" }, - { "name": "defaultValue", "type": "int256", "internalType": "int256" } - ], - "outputs": [ - { "name": "value", "type": "int256", "internalType": "int256" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "envOr", - "inputs": [ - { "name": "name", "type": "string", "internalType": "string" }, - { "name": "delim", "type": "string", "internalType": "string" }, - { - "name": "defaultValue", - "type": "address[]", - "internalType": "address[]" - } - ], - "outputs": [ - { "name": "value", "type": "address[]", "internalType": "address[]" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "envOr", - "inputs": [ - { "name": "name", "type": "string", "internalType": "string" }, - { "name": "defaultValue", "type": "string", "internalType": "string" } - ], - "outputs": [ - { "name": "value", "type": "string", "internalType": "string" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "envOr", - "inputs": [ - { "name": "name", "type": "string", "internalType": "string" }, - { "name": "delim", "type": "string", "internalType": "string" }, - { "name": "defaultValue", "type": "bool[]", "internalType": "bool[]" } - ], - "outputs": [ - { "name": "value", "type": "bool[]", "internalType": "bool[]" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "envString", - "inputs": [ - { "name": "name", "type": "string", "internalType": "string" }, - { "name": "delim", "type": "string", "internalType": "string" } - ], - "outputs": [ - { "name": "value", "type": "string[]", "internalType": "string[]" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "envString", - "inputs": [ - { "name": "name", "type": "string", "internalType": "string" } - ], - "outputs": [ - { "name": "value", "type": "string", "internalType": "string" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "envUint", - "inputs": [ - { "name": "name", "type": "string", "internalType": "string" } - ], - "outputs": [ - { "name": "value", "type": "uint256", "internalType": "uint256" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "envUint", - "inputs": [ - { "name": "name", "type": "string", "internalType": "string" }, - { "name": "delim", "type": "string", "internalType": "string" } - ], - "outputs": [ - { "name": "value", "type": "uint256[]", "internalType": "uint256[]" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "etch", - "inputs": [ - { "name": "target", "type": "address", "internalType": "address" }, - { - "name": "newRuntimeBytecode", - "type": "bytes", - "internalType": "bytes" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "eth_getLogs", - "inputs": [ - { "name": "fromBlock", "type": "uint256", "internalType": "uint256" }, - { "name": "toBlock", "type": "uint256", "internalType": "uint256" }, - { "name": "target", "type": "address", "internalType": "address" }, - { "name": "topics", "type": "bytes32[]", "internalType": "bytes32[]" } - ], - "outputs": [ - { - "name": "logs", - "type": "tuple[]", - "internalType": "struct VmSafe.EthGetLogs[]", - "components": [ - { "name": "emitter", "type": "address", "internalType": "address" }, - { - "name": "topics", - "type": "bytes32[]", - "internalType": "bytes32[]" - }, - { "name": "data", "type": "bytes", "internalType": "bytes" }, - { - "name": "blockHash", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "blockNumber", - "type": "uint64", - "internalType": "uint64" - }, - { - "name": "transactionHash", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "transactionIndex", - "type": "uint64", - "internalType": "uint64" - }, - { - "name": "logIndex", - "type": "uint256", - "internalType": "uint256" - }, - { "name": "removed", "type": "bool", "internalType": "bool" } - ] - } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "exists", - "inputs": [ - { "name": "path", "type": "string", "internalType": "string" } - ], - "outputs": [{ "name": "result", "type": "bool", "internalType": "bool" }], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "expectCall", - "inputs": [ - { "name": "callee", "type": "address", "internalType": "address" }, - { "name": "msgValue", "type": "uint256", "internalType": "uint256" }, - { "name": "gas", "type": "uint64", "internalType": "uint64" }, - { "name": "data", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "expectCall", - "inputs": [ - { "name": "callee", "type": "address", "internalType": "address" }, - { "name": "msgValue", "type": "uint256", "internalType": "uint256" }, - { "name": "gas", "type": "uint64", "internalType": "uint64" }, - { "name": "data", "type": "bytes", "internalType": "bytes" }, - { "name": "count", "type": "uint64", "internalType": "uint64" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "expectCall", - "inputs": [ - { "name": "callee", "type": "address", "internalType": "address" }, - { "name": "msgValue", "type": "uint256", "internalType": "uint256" }, - { "name": "data", "type": "bytes", "internalType": "bytes" }, - { "name": "count", "type": "uint64", "internalType": "uint64" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "expectCall", - "inputs": [ - { "name": "callee", "type": "address", "internalType": "address" }, - { "name": "data", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "expectCall", - "inputs": [ - { "name": "callee", "type": "address", "internalType": "address" }, - { "name": "data", "type": "bytes", "internalType": "bytes" }, - { "name": "count", "type": "uint64", "internalType": "uint64" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "expectCall", - "inputs": [ - { "name": "callee", "type": "address", "internalType": "address" }, - { "name": "msgValue", "type": "uint256", "internalType": "uint256" }, - { "name": "data", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "expectCallMinGas", - "inputs": [ - { "name": "callee", "type": "address", "internalType": "address" }, - { "name": "msgValue", "type": "uint256", "internalType": "uint256" }, - { "name": "minGas", "type": "uint64", "internalType": "uint64" }, - { "name": "data", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "expectCallMinGas", - "inputs": [ - { "name": "callee", "type": "address", "internalType": "address" }, - { "name": "msgValue", "type": "uint256", "internalType": "uint256" }, - { "name": "minGas", "type": "uint64", "internalType": "uint64" }, - { "name": "data", "type": "bytes", "internalType": "bytes" }, - { "name": "count", "type": "uint64", "internalType": "uint64" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "expectEmit", - "inputs": [], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "expectEmit", - "inputs": [ - { "name": "checkTopic1", "type": "bool", "internalType": "bool" }, - { "name": "checkTopic2", "type": "bool", "internalType": "bool" }, - { "name": "checkTopic3", "type": "bool", "internalType": "bool" }, - { "name": "checkData", "type": "bool", "internalType": "bool" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "expectEmit", - "inputs": [ - { "name": "checkTopic1", "type": "bool", "internalType": "bool" }, - { "name": "checkTopic2", "type": "bool", "internalType": "bool" }, - { "name": "checkTopic3", "type": "bool", "internalType": "bool" }, - { "name": "checkData", "type": "bool", "internalType": "bool" }, - { "name": "emitter", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "expectEmit", - "inputs": [ - { "name": "emitter", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "expectRevert", - "inputs": [ - { "name": "revertData", "type": "bytes4", "internalType": "bytes4" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "expectRevert", - "inputs": [ - { "name": "revertData", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "expectRevert", - "inputs": [], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "expectSafeMemory", - "inputs": [ - { "name": "min", "type": "uint64", "internalType": "uint64" }, - { "name": "max", "type": "uint64", "internalType": "uint64" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "expectSafeMemoryCall", - "inputs": [ - { "name": "min", "type": "uint64", "internalType": "uint64" }, - { "name": "max", "type": "uint64", "internalType": "uint64" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "fee", - "inputs": [ - { "name": "newBasefee", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "ffi", - "inputs": [ - { - "name": "commandInput", - "type": "string[]", - "internalType": "string[]" - } - ], - "outputs": [ - { "name": "result", "type": "bytes", "internalType": "bytes" } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "fsMetadata", - "inputs": [ - { "name": "path", "type": "string", "internalType": "string" } - ], - "outputs": [ - { - "name": "metadata", - "type": "tuple", - "internalType": "struct VmSafe.FsMetadata", - "components": [ - { "name": "isDir", "type": "bool", "internalType": "bool" }, - { "name": "isSymlink", "type": "bool", "internalType": "bool" }, - { "name": "length", "type": "uint256", "internalType": "uint256" }, - { "name": "readOnly", "type": "bool", "internalType": "bool" }, - { - "name": "modified", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "accessed", - "type": "uint256", - "internalType": "uint256" - }, - { "name": "created", "type": "uint256", "internalType": "uint256" } - ] - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getBlockNumber", - "inputs": [], - "outputs": [ - { "name": "height", "type": "uint256", "internalType": "uint256" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getBlockTimestamp", - "inputs": [], - "outputs": [ - { "name": "timestamp", "type": "uint256", "internalType": "uint256" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getCode", - "inputs": [ - { "name": "artifactPath", "type": "string", "internalType": "string" } - ], - "outputs": [ - { "name": "creationBytecode", "type": "bytes", "internalType": "bytes" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getDeployedCode", - "inputs": [ - { "name": "artifactPath", "type": "string", "internalType": "string" } - ], - "outputs": [ - { "name": "runtimeBytecode", "type": "bytes", "internalType": "bytes" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getLabel", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [ - { "name": "currentLabel", "type": "string", "internalType": "string" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getMappingKeyAndParentOf", - "inputs": [ - { "name": "target", "type": "address", "internalType": "address" }, - { "name": "elementSlot", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [ - { "name": "found", "type": "bool", "internalType": "bool" }, - { "name": "key", "type": "bytes32", "internalType": "bytes32" }, - { "name": "parent", "type": "bytes32", "internalType": "bytes32" } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "getMappingLength", - "inputs": [ - { "name": "target", "type": "address", "internalType": "address" }, - { "name": "mappingSlot", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [ - { "name": "length", "type": "uint256", "internalType": "uint256" } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "getMappingSlotAt", - "inputs": [ - { "name": "target", "type": "address", "internalType": "address" }, - { "name": "mappingSlot", "type": "bytes32", "internalType": "bytes32" }, - { "name": "idx", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [ - { "name": "value", "type": "bytes32", "internalType": "bytes32" } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "getNonce", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [ - { "name": "nonce", "type": "uint64", "internalType": "uint64" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getNonce", - "inputs": [ - { - "name": "wallet", - "type": "tuple", - "internalType": "struct VmSafe.Wallet", - "components": [ - { "name": "addr", "type": "address", "internalType": "address" }, - { - "name": "publicKeyX", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "publicKeyY", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "privateKey", - "type": "uint256", - "internalType": "uint256" - } - ] - } - ], - "outputs": [ - { "name": "nonce", "type": "uint64", "internalType": "uint64" } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "getRecordedLogs", - "inputs": [], - "outputs": [ - { - "name": "logs", - "type": "tuple[]", - "internalType": "struct VmSafe.Log[]", - "components": [ - { - "name": "topics", - "type": "bytes32[]", - "internalType": "bytes32[]" - }, - { "name": "data", "type": "bytes", "internalType": "bytes" }, - { "name": "emitter", "type": "address", "internalType": "address" } - ] - } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "isDir", - "inputs": [ - { "name": "path", "type": "string", "internalType": "string" } - ], - "outputs": [{ "name": "result", "type": "bool", "internalType": "bool" }], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "isFile", - "inputs": [ - { "name": "path", "type": "string", "internalType": "string" } - ], - "outputs": [{ "name": "result", "type": "bool", "internalType": "bool" }], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "isPersistent", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [ - { "name": "persistent", "type": "bool", "internalType": "bool" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "keyExists", - "inputs": [ - { "name": "json", "type": "string", "internalType": "string" }, - { "name": "key", "type": "string", "internalType": "string" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "label", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" }, - { "name": "newLabel", "type": "string", "internalType": "string" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "load", - "inputs": [ - { "name": "target", "type": "address", "internalType": "address" }, - { "name": "slot", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [ - { "name": "data", "type": "bytes32", "internalType": "bytes32" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "loadAllocs", - "inputs": [ - { - "name": "pathToAllocsJson", - "type": "string", - "internalType": "string" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "makePersistent", - "inputs": [ - { "name": "accounts", "type": "address[]", "internalType": "address[]" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "makePersistent", - "inputs": [ - { "name": "account0", "type": "address", "internalType": "address" }, - { "name": "account1", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "makePersistent", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "makePersistent", - "inputs": [ - { "name": "account0", "type": "address", "internalType": "address" }, - { "name": "account1", "type": "address", "internalType": "address" }, - { "name": "account2", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "mockCall", - "inputs": [ - { "name": "callee", "type": "address", "internalType": "address" }, - { "name": "msgValue", "type": "uint256", "internalType": "uint256" }, - { "name": "data", "type": "bytes", "internalType": "bytes" }, - { "name": "returnData", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "mockCall", - "inputs": [ - { "name": "callee", "type": "address", "internalType": "address" }, - { "name": "data", "type": "bytes", "internalType": "bytes" }, - { "name": "returnData", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "mockCallRevert", - "inputs": [ - { "name": "callee", "type": "address", "internalType": "address" }, - { "name": "msgValue", "type": "uint256", "internalType": "uint256" }, - { "name": "data", "type": "bytes", "internalType": "bytes" }, - { "name": "revertData", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "mockCallRevert", - "inputs": [ - { "name": "callee", "type": "address", "internalType": "address" }, - { "name": "data", "type": "bytes", "internalType": "bytes" }, - { "name": "revertData", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "parseAddress", - "inputs": [ - { - "name": "stringifiedValue", - "type": "string", - "internalType": "string" - } - ], - "outputs": [ - { "name": "parsedValue", "type": "address", "internalType": "address" } - ], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "parseBool", - "inputs": [ - { - "name": "stringifiedValue", - "type": "string", - "internalType": "string" - } - ], - "outputs": [ - { "name": "parsedValue", "type": "bool", "internalType": "bool" } - ], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "parseBytes", - "inputs": [ - { - "name": "stringifiedValue", - "type": "string", - "internalType": "string" - } - ], - "outputs": [ - { "name": "parsedValue", "type": "bytes", "internalType": "bytes" } - ], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "parseBytes32", - "inputs": [ - { - "name": "stringifiedValue", - "type": "string", - "internalType": "string" - } - ], - "outputs": [ - { "name": "parsedValue", "type": "bytes32", "internalType": "bytes32" } - ], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "parseInt", - "inputs": [ - { - "name": "stringifiedValue", - "type": "string", - "internalType": "string" - } - ], - "outputs": [ - { "name": "parsedValue", "type": "int256", "internalType": "int256" } - ], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "parseJson", - "inputs": [ - { "name": "json", "type": "string", "internalType": "string" } - ], - "outputs": [ - { "name": "abiEncodedData", "type": "bytes", "internalType": "bytes" } - ], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "parseJson", - "inputs": [ - { "name": "json", "type": "string", "internalType": "string" }, - { "name": "key", "type": "string", "internalType": "string" } - ], - "outputs": [ - { "name": "abiEncodedData", "type": "bytes", "internalType": "bytes" } - ], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "parseJsonAddress", - "inputs": [ - { "name": "json", "type": "string", "internalType": "string" }, - { "name": "key", "type": "string", "internalType": "string" } - ], - "outputs": [{ "name": "", "type": "address", "internalType": "address" }], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "parseJsonAddressArray", - "inputs": [ - { "name": "json", "type": "string", "internalType": "string" }, - { "name": "key", "type": "string", "internalType": "string" } - ], - "outputs": [ - { "name": "", "type": "address[]", "internalType": "address[]" } - ], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "parseJsonBool", - "inputs": [ - { "name": "json", "type": "string", "internalType": "string" }, - { "name": "key", "type": "string", "internalType": "string" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "parseJsonBoolArray", - "inputs": [ - { "name": "json", "type": "string", "internalType": "string" }, - { "name": "key", "type": "string", "internalType": "string" } - ], - "outputs": [{ "name": "", "type": "bool[]", "internalType": "bool[]" }], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "parseJsonBytes", - "inputs": [ - { "name": "json", "type": "string", "internalType": "string" }, - { "name": "key", "type": "string", "internalType": "string" } - ], - "outputs": [{ "name": "", "type": "bytes", "internalType": "bytes" }], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "parseJsonBytes32", - "inputs": [ - { "name": "json", "type": "string", "internalType": "string" }, - { "name": "key", "type": "string", "internalType": "string" } - ], - "outputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "parseJsonBytes32Array", - "inputs": [ - { "name": "json", "type": "string", "internalType": "string" }, - { "name": "key", "type": "string", "internalType": "string" } - ], - "outputs": [ - { "name": "", "type": "bytes32[]", "internalType": "bytes32[]" } - ], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "parseJsonBytesArray", - "inputs": [ - { "name": "json", "type": "string", "internalType": "string" }, - { "name": "key", "type": "string", "internalType": "string" } - ], - "outputs": [{ "name": "", "type": "bytes[]", "internalType": "bytes[]" }], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "parseJsonInt", - "inputs": [ - { "name": "json", "type": "string", "internalType": "string" }, - { "name": "key", "type": "string", "internalType": "string" } - ], - "outputs": [{ "name": "", "type": "int256", "internalType": "int256" }], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "parseJsonIntArray", - "inputs": [ - { "name": "json", "type": "string", "internalType": "string" }, - { "name": "key", "type": "string", "internalType": "string" } - ], - "outputs": [ - { "name": "", "type": "int256[]", "internalType": "int256[]" } - ], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "parseJsonKeys", - "inputs": [ - { "name": "json", "type": "string", "internalType": "string" }, - { "name": "key", "type": "string", "internalType": "string" } - ], - "outputs": [ - { "name": "keys", "type": "string[]", "internalType": "string[]" } - ], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "parseJsonString", - "inputs": [ - { "name": "json", "type": "string", "internalType": "string" }, - { "name": "key", "type": "string", "internalType": "string" } - ], - "outputs": [{ "name": "", "type": "string", "internalType": "string" }], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "parseJsonStringArray", - "inputs": [ - { "name": "json", "type": "string", "internalType": "string" }, - { "name": "key", "type": "string", "internalType": "string" } - ], - "outputs": [ - { "name": "", "type": "string[]", "internalType": "string[]" } - ], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "parseJsonUint", - "inputs": [ - { "name": "json", "type": "string", "internalType": "string" }, - { "name": "key", "type": "string", "internalType": "string" } - ], - "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "parseJsonUintArray", - "inputs": [ - { "name": "json", "type": "string", "internalType": "string" }, - { "name": "key", "type": "string", "internalType": "string" } - ], - "outputs": [ - { "name": "", "type": "uint256[]", "internalType": "uint256[]" } - ], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "parseUint", - "inputs": [ - { - "name": "stringifiedValue", - "type": "string", - "internalType": "string" - } - ], - "outputs": [ - { "name": "parsedValue", "type": "uint256", "internalType": "uint256" } - ], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "pauseGasMetering", - "inputs": [], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "prank", - "inputs": [ - { "name": "msgSender", "type": "address", "internalType": "address" }, - { "name": "txOrigin", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "prank", - "inputs": [ - { "name": "msgSender", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "prevrandao", - "inputs": [ - { - "name": "newPrevrandao", - "type": "bytes32", - "internalType": "bytes32" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "projectRoot", - "inputs": [], - "outputs": [ - { "name": "path", "type": "string", "internalType": "string" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "readCallers", - "inputs": [], - "outputs": [ - { - "name": "callerMode", - "type": "uint8", - "internalType": "enum VmSafe.CallerMode" - }, - { "name": "msgSender", "type": "address", "internalType": "address" }, - { "name": "txOrigin", "type": "address", "internalType": "address" } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "readDir", - "inputs": [ - { "name": "path", "type": "string", "internalType": "string" }, - { "name": "maxDepth", "type": "uint64", "internalType": "uint64" } - ], - "outputs": [ - { - "name": "entries", - "type": "tuple[]", - "internalType": "struct VmSafe.DirEntry[]", - "components": [ - { - "name": "errorMessage", - "type": "string", - "internalType": "string" - }, - { "name": "path", "type": "string", "internalType": "string" }, - { "name": "depth", "type": "uint64", "internalType": "uint64" }, - { "name": "isDir", "type": "bool", "internalType": "bool" }, - { "name": "isSymlink", "type": "bool", "internalType": "bool" } - ] - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "readDir", - "inputs": [ - { "name": "path", "type": "string", "internalType": "string" }, - { "name": "maxDepth", "type": "uint64", "internalType": "uint64" }, - { "name": "followLinks", "type": "bool", "internalType": "bool" } - ], - "outputs": [ - { - "name": "entries", - "type": "tuple[]", - "internalType": "struct VmSafe.DirEntry[]", - "components": [ - { - "name": "errorMessage", - "type": "string", - "internalType": "string" - }, - { "name": "path", "type": "string", "internalType": "string" }, - { "name": "depth", "type": "uint64", "internalType": "uint64" }, - { "name": "isDir", "type": "bool", "internalType": "bool" }, - { "name": "isSymlink", "type": "bool", "internalType": "bool" } - ] - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "readDir", - "inputs": [ - { "name": "path", "type": "string", "internalType": "string" } - ], - "outputs": [ - { - "name": "entries", - "type": "tuple[]", - "internalType": "struct VmSafe.DirEntry[]", - "components": [ - { - "name": "errorMessage", - "type": "string", - "internalType": "string" - }, - { "name": "path", "type": "string", "internalType": "string" }, - { "name": "depth", "type": "uint64", "internalType": "uint64" }, - { "name": "isDir", "type": "bool", "internalType": "bool" }, - { "name": "isSymlink", "type": "bool", "internalType": "bool" } - ] - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "readFile", - "inputs": [ - { "name": "path", "type": "string", "internalType": "string" } - ], - "outputs": [ - { "name": "data", "type": "string", "internalType": "string" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "readFileBinary", - "inputs": [ - { "name": "path", "type": "string", "internalType": "string" } - ], - "outputs": [{ "name": "data", "type": "bytes", "internalType": "bytes" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "readLine", - "inputs": [ - { "name": "path", "type": "string", "internalType": "string" } - ], - "outputs": [ - { "name": "line", "type": "string", "internalType": "string" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "readLink", - "inputs": [ - { "name": "linkPath", "type": "string", "internalType": "string" } - ], - "outputs": [ - { "name": "targetPath", "type": "string", "internalType": "string" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "record", - "inputs": [], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "recordLogs", - "inputs": [], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "rememberKey", - "inputs": [ - { "name": "privateKey", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [ - { "name": "keyAddr", "type": "address", "internalType": "address" } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "removeDir", - "inputs": [ - { "name": "path", "type": "string", "internalType": "string" }, - { "name": "recursive", "type": "bool", "internalType": "bool" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "removeFile", - "inputs": [ - { "name": "path", "type": "string", "internalType": "string" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "resetNonce", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "resumeGasMetering", - "inputs": [], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "revertTo", - "inputs": [ - { "name": "snapshotId", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [ - { "name": "success", "type": "bool", "internalType": "bool" } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "revertToAndDelete", - "inputs": [ - { "name": "snapshotId", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [ - { "name": "success", "type": "bool", "internalType": "bool" } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "revokePersistent", - "inputs": [ - { "name": "accounts", "type": "address[]", "internalType": "address[]" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "revokePersistent", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "roll", - "inputs": [ - { "name": "newHeight", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "rollFork", - "inputs": [ - { "name": "txHash", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "rollFork", - "inputs": [ - { "name": "forkId", "type": "uint256", "internalType": "uint256" }, - { "name": "blockNumber", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "rollFork", - "inputs": [ - { "name": "blockNumber", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "rollFork", - "inputs": [ - { "name": "forkId", "type": "uint256", "internalType": "uint256" }, - { "name": "txHash", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "rpc", - "inputs": [ - { "name": "method", "type": "string", "internalType": "string" }, - { "name": "params", "type": "string", "internalType": "string" } - ], - "outputs": [{ "name": "data", "type": "bytes", "internalType": "bytes" }], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "rpcUrl", - "inputs": [ - { "name": "rpcAlias", "type": "string", "internalType": "string" } - ], - "outputs": [ - { "name": "json", "type": "string", "internalType": "string" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "rpcUrlStructs", - "inputs": [], - "outputs": [ - { - "name": "urls", - "type": "tuple[]", - "internalType": "struct VmSafe.Rpc[]", - "components": [ - { "name": "key", "type": "string", "internalType": "string" }, - { "name": "url", "type": "string", "internalType": "string" } - ] - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "rpcUrls", - "inputs": [], - "outputs": [ - { "name": "urls", "type": "string[2][]", "internalType": "string[2][]" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "selectFork", - "inputs": [ - { "name": "forkId", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "serializeAddress", - "inputs": [ - { "name": "objectKey", "type": "string", "internalType": "string" }, - { "name": "valueKey", "type": "string", "internalType": "string" }, - { "name": "values", "type": "address[]", "internalType": "address[]" } - ], - "outputs": [ - { "name": "json", "type": "string", "internalType": "string" } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "serializeAddress", - "inputs": [ - { "name": "objectKey", "type": "string", "internalType": "string" }, - { "name": "valueKey", "type": "string", "internalType": "string" }, - { "name": "value", "type": "address", "internalType": "address" } - ], - "outputs": [ - { "name": "json", "type": "string", "internalType": "string" } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "serializeBool", - "inputs": [ - { "name": "objectKey", "type": "string", "internalType": "string" }, - { "name": "valueKey", "type": "string", "internalType": "string" }, - { "name": "values", "type": "bool[]", "internalType": "bool[]" } - ], - "outputs": [ - { "name": "json", "type": "string", "internalType": "string" } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "serializeBool", - "inputs": [ - { "name": "objectKey", "type": "string", "internalType": "string" }, - { "name": "valueKey", "type": "string", "internalType": "string" }, - { "name": "value", "type": "bool", "internalType": "bool" } - ], - "outputs": [ - { "name": "json", "type": "string", "internalType": "string" } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "serializeBytes", - "inputs": [ - { "name": "objectKey", "type": "string", "internalType": "string" }, - { "name": "valueKey", "type": "string", "internalType": "string" }, - { "name": "values", "type": "bytes[]", "internalType": "bytes[]" } - ], - "outputs": [ - { "name": "json", "type": "string", "internalType": "string" } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "serializeBytes", - "inputs": [ - { "name": "objectKey", "type": "string", "internalType": "string" }, - { "name": "valueKey", "type": "string", "internalType": "string" }, - { "name": "value", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [ - { "name": "json", "type": "string", "internalType": "string" } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "serializeBytes32", - "inputs": [ - { "name": "objectKey", "type": "string", "internalType": "string" }, - { "name": "valueKey", "type": "string", "internalType": "string" }, - { "name": "values", "type": "bytes32[]", "internalType": "bytes32[]" } - ], - "outputs": [ - { "name": "json", "type": "string", "internalType": "string" } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "serializeBytes32", - "inputs": [ - { "name": "objectKey", "type": "string", "internalType": "string" }, - { "name": "valueKey", "type": "string", "internalType": "string" }, - { "name": "value", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [ - { "name": "json", "type": "string", "internalType": "string" } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "serializeInt", - "inputs": [ - { "name": "objectKey", "type": "string", "internalType": "string" }, - { "name": "valueKey", "type": "string", "internalType": "string" }, - { "name": "value", "type": "int256", "internalType": "int256" } - ], - "outputs": [ - { "name": "json", "type": "string", "internalType": "string" } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "serializeInt", - "inputs": [ - { "name": "objectKey", "type": "string", "internalType": "string" }, - { "name": "valueKey", "type": "string", "internalType": "string" }, - { "name": "values", "type": "int256[]", "internalType": "int256[]" } - ], - "outputs": [ - { "name": "json", "type": "string", "internalType": "string" } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "serializeJson", - "inputs": [ - { "name": "objectKey", "type": "string", "internalType": "string" }, - { "name": "value", "type": "string", "internalType": "string" } - ], - "outputs": [ - { "name": "json", "type": "string", "internalType": "string" } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "serializeString", - "inputs": [ - { "name": "objectKey", "type": "string", "internalType": "string" }, - { "name": "valueKey", "type": "string", "internalType": "string" }, - { "name": "values", "type": "string[]", "internalType": "string[]" } - ], - "outputs": [ - { "name": "json", "type": "string", "internalType": "string" } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "serializeString", - "inputs": [ - { "name": "objectKey", "type": "string", "internalType": "string" }, - { "name": "valueKey", "type": "string", "internalType": "string" }, - { "name": "value", "type": "string", "internalType": "string" } - ], - "outputs": [ - { "name": "json", "type": "string", "internalType": "string" } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "serializeUint", - "inputs": [ - { "name": "objectKey", "type": "string", "internalType": "string" }, - { "name": "valueKey", "type": "string", "internalType": "string" }, - { "name": "value", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [ - { "name": "json", "type": "string", "internalType": "string" } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "serializeUint", - "inputs": [ - { "name": "objectKey", "type": "string", "internalType": "string" }, - { "name": "valueKey", "type": "string", "internalType": "string" }, - { "name": "values", "type": "uint256[]", "internalType": "uint256[]" } - ], - "outputs": [ - { "name": "json", "type": "string", "internalType": "string" } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setEnv", - "inputs": [ - { "name": "name", "type": "string", "internalType": "string" }, - { "name": "value", "type": "string", "internalType": "string" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setNonce", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" }, - { "name": "newNonce", "type": "uint64", "internalType": "uint64" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setNonceUnsafe", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" }, - { "name": "newNonce", "type": "uint64", "internalType": "uint64" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "sign", - "inputs": [ - { - "name": "wallet", - "type": "tuple", - "internalType": "struct VmSafe.Wallet", - "components": [ - { "name": "addr", "type": "address", "internalType": "address" }, - { - "name": "publicKeyX", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "publicKeyY", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "privateKey", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { "name": "digest", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [ - { "name": "v", "type": "uint8", "internalType": "uint8" }, - { "name": "r", "type": "bytes32", "internalType": "bytes32" }, - { "name": "s", "type": "bytes32", "internalType": "bytes32" } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "sign", - "inputs": [ - { "name": "privateKey", "type": "uint256", "internalType": "uint256" }, - { "name": "digest", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [ - { "name": "v", "type": "uint8", "internalType": "uint8" }, - { "name": "r", "type": "bytes32", "internalType": "bytes32" }, - { "name": "s", "type": "bytes32", "internalType": "bytes32" } - ], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "signP256", - "inputs": [ - { "name": "privateKey", "type": "uint256", "internalType": "uint256" }, - { "name": "digest", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [ - { "name": "r", "type": "bytes32", "internalType": "bytes32" }, - { "name": "s", "type": "bytes32", "internalType": "bytes32" } - ], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "skip", - "inputs": [ - { "name": "skipTest", "type": "bool", "internalType": "bool" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "sleep", - "inputs": [ - { "name": "duration", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "snapshot", - "inputs": [], - "outputs": [ - { "name": "snapshotId", "type": "uint256", "internalType": "uint256" } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "startBroadcast", - "inputs": [], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "startBroadcast", - "inputs": [ - { "name": "signer", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "startBroadcast", - "inputs": [ - { "name": "privateKey", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "startMappingRecording", - "inputs": [], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "startPrank", - "inputs": [ - { "name": "msgSender", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "startPrank", - "inputs": [ - { "name": "msgSender", "type": "address", "internalType": "address" }, - { "name": "txOrigin", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "startStateDiffRecording", - "inputs": [], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "stopAndReturnStateDiff", - "inputs": [], - "outputs": [ - { - "name": "accountAccesses", - "type": "tuple[]", - "internalType": "struct VmSafe.AccountAccess[]", - "components": [ - { - "name": "chainInfo", - "type": "tuple", - "internalType": "struct VmSafe.ChainInfo", - "components": [ - { - "name": "forkId", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "chainId", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "name": "kind", - "type": "uint8", - "internalType": "enum VmSafe.AccountAccessKind" - }, - { "name": "account", "type": "address", "internalType": "address" }, - { - "name": "accessor", - "type": "address", - "internalType": "address" - }, - { "name": "initialized", "type": "bool", "internalType": "bool" }, - { - "name": "oldBalance", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "newBalance", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "deployedCode", - "type": "bytes", - "internalType": "bytes" - }, - { "name": "value", "type": "uint256", "internalType": "uint256" }, - { "name": "data", "type": "bytes", "internalType": "bytes" }, - { "name": "reverted", "type": "bool", "internalType": "bool" }, - { - "name": "storageAccesses", - "type": "tuple[]", - "internalType": "struct VmSafe.StorageAccess[]", - "components": [ - { - "name": "account", - "type": "address", - "internalType": "address" - }, - { - "name": "slot", - "type": "bytes32", - "internalType": "bytes32" - }, - { "name": "isWrite", "type": "bool", "internalType": "bool" }, - { - "name": "previousValue", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "newValue", - "type": "bytes32", - "internalType": "bytes32" - }, - { "name": "reverted", "type": "bool", "internalType": "bool" } - ] - } - ] - } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "stopBroadcast", - "inputs": [], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "stopMappingRecording", - "inputs": [], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "stopPrank", - "inputs": [], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "store", - "inputs": [ - { "name": "target", "type": "address", "internalType": "address" }, - { "name": "slot", "type": "bytes32", "internalType": "bytes32" }, - { "name": "value", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "toBase64", - "inputs": [ - { "name": "data", "type": "string", "internalType": "string" } - ], - "outputs": [{ "name": "", "type": "string", "internalType": "string" }], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "toBase64", - "inputs": [{ "name": "data", "type": "bytes", "internalType": "bytes" }], - "outputs": [{ "name": "", "type": "string", "internalType": "string" }], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "toBase64URL", - "inputs": [ - { "name": "data", "type": "string", "internalType": "string" } - ], - "outputs": [{ "name": "", "type": "string", "internalType": "string" }], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "toBase64URL", - "inputs": [{ "name": "data", "type": "bytes", "internalType": "bytes" }], - "outputs": [{ "name": "", "type": "string", "internalType": "string" }], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "toString", - "inputs": [ - { "name": "value", "type": "address", "internalType": "address" } - ], - "outputs": [ - { - "name": "stringifiedValue", - "type": "string", - "internalType": "string" - } - ], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "toString", - "inputs": [ - { "name": "value", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [ - { - "name": "stringifiedValue", - "type": "string", - "internalType": "string" - } - ], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "toString", - "inputs": [{ "name": "value", "type": "bytes", "internalType": "bytes" }], - "outputs": [ - { - "name": "stringifiedValue", - "type": "string", - "internalType": "string" - } - ], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "toString", - "inputs": [{ "name": "value", "type": "bool", "internalType": "bool" }], - "outputs": [ - { - "name": "stringifiedValue", - "type": "string", - "internalType": "string" - } - ], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "toString", - "inputs": [ - { "name": "value", "type": "int256", "internalType": "int256" } - ], - "outputs": [ - { - "name": "stringifiedValue", - "type": "string", - "internalType": "string" - } - ], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "toString", - "inputs": [ - { "name": "value", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [ - { - "name": "stringifiedValue", - "type": "string", - "internalType": "string" - } - ], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "transact", - "inputs": [ - { "name": "forkId", "type": "uint256", "internalType": "uint256" }, - { "name": "txHash", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "transact", - "inputs": [ - { "name": "txHash", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "tryFfi", - "inputs": [ - { - "name": "commandInput", - "type": "string[]", - "internalType": "string[]" - } - ], - "outputs": [ - { - "name": "result", - "type": "tuple", - "internalType": "struct VmSafe.FfiResult", - "components": [ - { "name": "exitCode", "type": "int32", "internalType": "int32" }, - { "name": "stdout", "type": "bytes", "internalType": "bytes" }, - { "name": "stderr", "type": "bytes", "internalType": "bytes" } - ] - } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "txGasPrice", - "inputs": [ - { "name": "newGasPrice", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "unixTime", - "inputs": [], - "outputs": [ - { "name": "milliseconds", "type": "uint256", "internalType": "uint256" } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "warp", - "inputs": [ - { "name": "newTimestamp", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "writeFile", - "inputs": [ - { "name": "path", "type": "string", "internalType": "string" }, - { "name": "data", "type": "string", "internalType": "string" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "writeFileBinary", - "inputs": [ - { "name": "path", "type": "string", "internalType": "string" }, - { "name": "data", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "writeJson", - "inputs": [ - { "name": "json", "type": "string", "internalType": "string" }, - { "name": "path", "type": "string", "internalType": "string" }, - { "name": "valueKey", "type": "string", "internalType": "string" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "writeJson", - "inputs": [ - { "name": "json", "type": "string", "internalType": "string" }, - { "name": "path", "type": "string", "internalType": "string" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "writeLine", - "inputs": [ - { "name": "path", "type": "string", "internalType": "string" }, - { "name": "data", "type": "string", "internalType": "string" } - ], - "outputs": [], - "stateMutability": "nonpayable" - } - ], - "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "methodIdentifiers": { - "accesses(address)": "65bc9481", - "activeFork()": "2f103f22", - "addr(uint256)": "ffa18649", - "allowCheatcodes(address)": "ea060291", - "assume(bool)": "4c63e562", - "breakpoint(string)": "f0259e92", - "breakpoint(string,bool)": "f7d39a8d", - "broadcast()": "afc98040", - "broadcast(address)": "e6962cdb", - "broadcast(uint256)": "f67a965b", - "chainId(uint256)": "4049ddd2", - "clearMockedCalls()": "3fdf4e15", - "closeFile(string)": "48c3241f", - "coinbase(address)": "ff483c54", - "computeCreate2Address(bytes32,bytes32)": "890c283b", - "computeCreate2Address(bytes32,bytes32,address)": "d323826a", - "computeCreateAddress(address,uint256)": "74637a7a", - "copyFile(string,string)": "a54a87d8", - "createDir(string,bool)": "168b64d3", - "createFork(string)": "31ba3498", - "createFork(string,bytes32)": "7ca29682", - "createFork(string,uint256)": "6ba3ba2b", - "createSelectFork(string)": "98680034", - "createSelectFork(string,bytes32)": "84d52b7a", - "createSelectFork(string,uint256)": "71ee464d", - "createWallet(string)": "7404f1d2", - "createWallet(uint256)": "7a675bb6", - "createWallet(uint256,string)": "ed7c5462", - "deal(address,uint256)": "c88a5e6d", - "deleteSnapshot(uint256)": "a6368557", - "deleteSnapshots()": "421ae469", - "deriveKey(string,string,uint32)": "6bcb2c1b", - "deriveKey(string,string,uint32,string)": "29233b1f", - "deriveKey(string,uint32)": "6229498b", - "deriveKey(string,uint32,string)": "32c8176d", - "difficulty(uint256)": "46cc92d9", - "dumpState(string)": "709ecd3f", - "envAddress(string)": "350d56bf", - "envAddress(string,string)": "ad31b9fa", - "envBool(string)": "7ed1ec7d", - "envBool(string,string)": "aaaddeaf", - "envBytes(string)": "4d7baf06", - "envBytes(string,string)": "ddc2651b", - "envBytes32(string)": "97949042", - "envBytes32(string,string)": "5af231c1", - "envInt(string)": "892a0c61", - "envInt(string,string)": "42181150", - "envOr(string,address)": "561fe540", - "envOr(string,bool)": "4777f3cf", - "envOr(string,bytes)": "b3e47705", - "envOr(string,bytes32)": "b4a85892", - "envOr(string,int256)": "bbcb713e", - "envOr(string,string)": "d145736c", - "envOr(string,string,address[])": "c74e9deb", - "envOr(string,string,bool[])": "eb85e83b", - "envOr(string,string,bytes32[])": "2281f367", - "envOr(string,string,bytes[])": "64bc3e64", - "envOr(string,string,int256[])": "4700d74b", - "envOr(string,string,string[])": "859216bc", - "envOr(string,string,uint256[])": "74318528", - "envOr(string,uint256)": "5e97348f", - "envString(string)": "f877cb19", - "envString(string,string)": "14b02bc9", - "envUint(string)": "c1978d1f", - "envUint(string,string)": "f3dec099", - "etch(address,bytes)": "b4d6c782", - "eth_getLogs(uint256,uint256,address,bytes32[])": "35e1349b", - "exists(string)": "261a323e", - "expectCall(address,bytes)": "bd6af434", - "expectCall(address,bytes,uint64)": "c1adbbff", - "expectCall(address,uint256,bytes)": "f30c7ba3", - "expectCall(address,uint256,bytes,uint64)": "a2b1a1ae", - "expectCall(address,uint256,uint64,bytes)": "23361207", - "expectCall(address,uint256,uint64,bytes,uint64)": "65b7b7cc", - "expectCallMinGas(address,uint256,uint64,bytes)": "08e4e116", - "expectCallMinGas(address,uint256,uint64,bytes,uint64)": "e13a1834", - "expectEmit()": "440ed10d", - "expectEmit(address)": "86b9620d", - "expectEmit(bool,bool,bool,bool)": "491cc7c2", - "expectEmit(bool,bool,bool,bool,address)": "81bad6f3", - "expectRevert()": "f4844814", - "expectRevert(bytes)": "f28dceb3", - "expectRevert(bytes4)": "c31eb0e0", - "expectSafeMemory(uint64,uint64)": "6d016688", - "expectSafeMemoryCall(uint64,uint64)": "05838bf4", - "fee(uint256)": "39b37ab0", - "ffi(string[])": "89160467", - "fsMetadata(string)": "af368a08", - "getBlockNumber()": "42cbb15c", - "getBlockTimestamp()": "796b89b9", - "getCode(string)": "8d1cc925", - "getDeployedCode(string)": "3ebf73b4", - "getLabel(address)": "28a249b0", - "getMappingKeyAndParentOf(address,bytes32)": "876e24e6", - "getMappingLength(address,bytes32)": "2f2fd63f", - "getMappingSlotAt(address,bytes32,uint256)": "ebc73ab4", - "getNonce((address,uint256,uint256,uint256))": "a5748aad", - "getNonce(address)": "2d0335ab", - "getRecordedLogs()": "191553a4", - "isDir(string)": "7d15d019", - "isFile(string)": "e0eb04d4", - "isPersistent(address)": "d92d8efd", - "keyExists(string,string)": "528a683c", - "label(address,string)": "c657c718", - "load(address,bytes32)": "667f9d70", - "loadAllocs(string)": "b3a056d7", - "makePersistent(address)": "57e22dde", - "makePersistent(address,address)": "4074e0a8", - "makePersistent(address,address,address)": "efb77a75", - "makePersistent(address[])": "1d9e269e", - "mockCall(address,bytes,bytes)": "b96213e4", - "mockCall(address,uint256,bytes,bytes)": "81409b91", - "mockCallRevert(address,bytes,bytes)": "dbaad147", - "mockCallRevert(address,uint256,bytes,bytes)": "d23cd037", - "parseAddress(string)": "c6ce059d", - "parseBool(string)": "974ef924", - "parseBytes(string)": "8f5d232d", - "parseBytes32(string)": "087e6e81", - "parseInt(string)": "42346c5e", - "parseJson(string)": "6a82600a", - "parseJson(string,string)": "85940ef1", - "parseJsonAddress(string,string)": "1e19e657", - "parseJsonAddressArray(string,string)": "2fce7883", - "parseJsonBool(string,string)": "9f86dc91", - "parseJsonBoolArray(string,string)": "91f3b94f", - "parseJsonBytes(string,string)": "fd921be8", - "parseJsonBytes32(string,string)": "1777e59d", - "parseJsonBytes32Array(string,string)": "91c75bc3", - "parseJsonBytesArray(string,string)": "6631aa99", - "parseJsonInt(string,string)": "7b048ccd", - "parseJsonIntArray(string,string)": "9983c28a", - "parseJsonKeys(string,string)": "213e4198", - "parseJsonString(string,string)": "49c4fac8", - "parseJsonStringArray(string,string)": "498fdcf4", - "parseJsonUint(string,string)": "addde2b6", - "parseJsonUintArray(string,string)": "522074ab", - "parseUint(string)": "fa91454d", - "pauseGasMetering()": "d1a5b36f", - "prank(address)": "ca669fa7", - "prank(address,address)": "47e50cce", - "prevrandao(bytes32)": "3b925549", - "projectRoot()": "d930a0e6", - "readCallers()": "4ad0bac9", - "readDir(string)": "c4bc59e0", - "readDir(string,uint64)": "1497876c", - "readDir(string,uint64,bool)": "8102d70d", - "readFile(string)": "60f9bb11", - "readFileBinary(string)": "16ed7bc4", - "readLine(string)": "70f55728", - "readLink(string)": "9f5684a2", - "record()": "266cf109", - "recordLogs()": "41af2f52", - "rememberKey(uint256)": "22100064", - "removeDir(string,bool)": "45c62011", - "removeFile(string)": "f1afe04d", - "resetNonce(address)": "1c72346d", - "resumeGasMetering()": "2bcd50e0", - "revertTo(uint256)": "44d7f0a4", - "revertToAndDelete(uint256)": "03e0aca9", - "revokePersistent(address)": "997a0222", - "revokePersistent(address[])": "3ce969e6", - "roll(uint256)": "1f7b4f30", - "rollFork(bytes32)": "0f29772b", - "rollFork(uint256)": "d9bbf3a1", - "rollFork(uint256,bytes32)": "f2830f7b", - "rollFork(uint256,uint256)": "d74c83a4", - "rpc(string,string)": "1206c8a8", - "rpcUrl(string)": "975a6ce9", - "rpcUrlStructs()": "9d2ad72a", - "rpcUrls()": "a85a8418", - "selectFork(uint256)": "9ebf6827", - "serializeAddress(string,string,address)": "972c6062", - "serializeAddress(string,string,address[])": "1e356e1a", - "serializeBool(string,string,bool)": "ac22e971", - "serializeBool(string,string,bool[])": "92925aa1", - "serializeBytes(string,string,bytes)": "f21d52c7", - "serializeBytes(string,string,bytes[])": "9884b232", - "serializeBytes32(string,string,bytes32)": "2d812b44", - "serializeBytes32(string,string,bytes32[])": "201e43e2", - "serializeInt(string,string,int256)": "3f33db60", - "serializeInt(string,string,int256[])": "7676e127", - "serializeJson(string,string)": "9b3358b0", - "serializeString(string,string,string)": "88da6d35", - "serializeString(string,string,string[])": "561cd6f3", - "serializeUint(string,string,uint256)": "129e9002", - "serializeUint(string,string,uint256[])": "fee9a469", - "setEnv(string,string)": "3d5923ee", - "setNonce(address,uint64)": "f8e18b57", - "setNonceUnsafe(address,uint64)": "9b67b21c", - "sign((address,uint256,uint256,uint256),bytes32)": "b25c5a25", - "sign(uint256,bytes32)": "e341eaa4", - "signP256(uint256,bytes32)": "83211b40", - "skip(bool)": "dd82d13e", - "sleep(uint256)": "fa9d8713", - "snapshot()": "9711715a", - "startBroadcast()": "7fb5297f", - "startBroadcast(address)": "7fec2a8d", - "startBroadcast(uint256)": "ce817d47", - "startMappingRecording()": "3e9705c0", - "startPrank(address)": "06447d56", - "startPrank(address,address)": "45b56078", - "startStateDiffRecording()": "cf22e3c9", - "stopAndReturnStateDiff()": "aa5cf90e", - "stopBroadcast()": "76eadd36", - "stopMappingRecording()": "0d4aae9b", - "stopPrank()": "90c5013b", - "store(address,bytes32,bytes32)": "70ca10bb", - "toBase64(bytes)": "a5cbfe65", - "toBase64(string)": "3f8be2c8", - "toBase64URL(bytes)": "c8bd0e4a", - "toBase64URL(string)": "ae3165b3", - "toString(address)": "56ca623e", - "toString(bool)": "71dce7da", - "toString(bytes)": "71aad10d", - "toString(bytes32)": "b11a19e8", - "toString(int256)": "a322c40e", - "toString(uint256)": "6900a3ae", - "transact(bytes32)": "be646da1", - "transact(uint256,bytes32)": "4d8abc4b", - "tryFfi(string[])": "f45c1ce7", - "txGasPrice(uint256)": "48f50c0f", - "unixTime()": "625387dc", - "warp(uint256)": "e5d6bf02", - "writeFile(string,string)": "897e0a97", - "writeFileBinary(string,bytes)": "1f21fc80", - "writeJson(string,string)": "e23cd19f", - "writeJson(string,string,string)": "35d6ad46", - "writeLine(string,string)": "619d897f" - }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"accesses\",\"outputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"readSlots\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32[]\",\"name\":\"writeSlots\",\"type\":\"bytes32[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"activeFork\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"forkId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"privateKey\",\"type\":\"uint256\"}],\"name\":\"addr\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"keyAddr\",\"type\":\"address\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"allowCheatcodes\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"condition\",\"type\":\"bool\"}],\"name\":\"assume\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"char\",\"type\":\"string\"}],\"name\":\"breakpoint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"char\",\"type\":\"string\"},{\"internalType\":\"bool\",\"name\":\"value\",\"type\":\"bool\"}],\"name\":\"breakpoint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"broadcast\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"}],\"name\":\"broadcast\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"privateKey\",\"type\":\"uint256\"}],\"name\":\"broadcast\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newChainId\",\"type\":\"uint256\"}],\"name\":\"chainId\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"clearMockedCalls\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"path\",\"type\":\"string\"}],\"name\":\"closeFile\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newCoinbase\",\"type\":\"address\"}],\"name\":\"coinbase\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"initCodeHash\",\"type\":\"bytes32\"}],\"name\":\"computeCreate2Address\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"initCodeHash\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"deployer\",\"type\":\"address\"}],\"name\":\"computeCreate2Address\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"deployer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"}],\"name\":\"computeCreateAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"from\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"to\",\"type\":\"string\"}],\"name\":\"copyFile\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"copied\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"path\",\"type\":\"string\"},{\"internalType\":\"bool\",\"name\":\"recursive\",\"type\":\"bool\"}],\"name\":\"createDir\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"urlOrAlias\",\"type\":\"string\"}],\"name\":\"createFork\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"forkId\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"urlOrAlias\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"blockNumber\",\"type\":\"uint256\"}],\"name\":\"createFork\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"forkId\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"urlOrAlias\",\"type\":\"string\"},{\"internalType\":\"bytes32\",\"name\":\"txHash\",\"type\":\"bytes32\"}],\"name\":\"createFork\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"forkId\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"urlOrAlias\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"blockNumber\",\"type\":\"uint256\"}],\"name\":\"createSelectFork\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"forkId\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"urlOrAlias\",\"type\":\"string\"},{\"internalType\":\"bytes32\",\"name\":\"txHash\",\"type\":\"bytes32\"}],\"name\":\"createSelectFork\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"forkId\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"urlOrAlias\",\"type\":\"string\"}],\"name\":\"createSelectFork\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"forkId\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"walletLabel\",\"type\":\"string\"}],\"name\":\"createWallet\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"publicKeyX\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"publicKeyY\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"privateKey\",\"type\":\"uint256\"}],\"internalType\":\"struct VmSafe.Wallet\",\"name\":\"wallet\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"privateKey\",\"type\":\"uint256\"}],\"name\":\"createWallet\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"publicKeyX\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"publicKeyY\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"privateKey\",\"type\":\"uint256\"}],\"internalType\":\"struct VmSafe.Wallet\",\"name\":\"wallet\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"privateKey\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"walletLabel\",\"type\":\"string\"}],\"name\":\"createWallet\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"publicKeyX\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"publicKeyY\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"privateKey\",\"type\":\"uint256\"}],\"internalType\":\"struct VmSafe.Wallet\",\"name\":\"wallet\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newBalance\",\"type\":\"uint256\"}],\"name\":\"deal\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"snapshotId\",\"type\":\"uint256\"}],\"name\":\"deleteSnapshot\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"deleteSnapshots\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"mnemonic\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"derivationPath\",\"type\":\"string\"},{\"internalType\":\"uint32\",\"name\":\"index\",\"type\":\"uint32\"},{\"internalType\":\"string\",\"name\":\"language\",\"type\":\"string\"}],\"name\":\"deriveKey\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"privateKey\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"mnemonic\",\"type\":\"string\"},{\"internalType\":\"uint32\",\"name\":\"index\",\"type\":\"uint32\"},{\"internalType\":\"string\",\"name\":\"language\",\"type\":\"string\"}],\"name\":\"deriveKey\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"privateKey\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"mnemonic\",\"type\":\"string\"},{\"internalType\":\"uint32\",\"name\":\"index\",\"type\":\"uint32\"}],\"name\":\"deriveKey\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"privateKey\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"mnemonic\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"derivationPath\",\"type\":\"string\"},{\"internalType\":\"uint32\",\"name\":\"index\",\"type\":\"uint32\"}],\"name\":\"deriveKey\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"privateKey\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newDifficulty\",\"type\":\"uint256\"}],\"name\":\"difficulty\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"pathToStateJson\",\"type\":\"string\"}],\"name\":\"dumpState\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"envAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"value\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"delim\",\"type\":\"string\"}],\"name\":\"envAddress\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"value\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"envBool\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"value\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"delim\",\"type\":\"string\"}],\"name\":\"envBool\",\"outputs\":[{\"internalType\":\"bool[]\",\"name\":\"value\",\"type\":\"bool[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"envBytes\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"value\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"delim\",\"type\":\"string\"}],\"name\":\"envBytes\",\"outputs\":[{\"internalType\":\"bytes[]\",\"name\":\"value\",\"type\":\"bytes[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"delim\",\"type\":\"string\"}],\"name\":\"envBytes32\",\"outputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"value\",\"type\":\"bytes32[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"envBytes32\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"value\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"delim\",\"type\":\"string\"}],\"name\":\"envInt\",\"outputs\":[{\"internalType\":\"int256[]\",\"name\":\"value\",\"type\":\"int256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"envInt\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"value\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"delim\",\"type\":\"string\"},{\"internalType\":\"bytes32[]\",\"name\":\"defaultValue\",\"type\":\"bytes32[]\"}],\"name\":\"envOr\",\"outputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"value\",\"type\":\"bytes32[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"delim\",\"type\":\"string\"},{\"internalType\":\"int256[]\",\"name\":\"defaultValue\",\"type\":\"int256[]\"}],\"name\":\"envOr\",\"outputs\":[{\"internalType\":\"int256[]\",\"name\":\"value\",\"type\":\"int256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"bool\",\"name\":\"defaultValue\",\"type\":\"bool\"}],\"name\":\"envOr\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"value\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"defaultValue\",\"type\":\"address\"}],\"name\":\"envOr\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"value\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"defaultValue\",\"type\":\"uint256\"}],\"name\":\"envOr\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"delim\",\"type\":\"string\"},{\"internalType\":\"bytes[]\",\"name\":\"defaultValue\",\"type\":\"bytes[]\"}],\"name\":\"envOr\",\"outputs\":[{\"internalType\":\"bytes[]\",\"name\":\"value\",\"type\":\"bytes[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"delim\",\"type\":\"string\"},{\"internalType\":\"uint256[]\",\"name\":\"defaultValue\",\"type\":\"uint256[]\"}],\"name\":\"envOr\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"value\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"delim\",\"type\":\"string\"},{\"internalType\":\"string[]\",\"name\":\"defaultValue\",\"type\":\"string[]\"}],\"name\":\"envOr\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"value\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"defaultValue\",\"type\":\"bytes\"}],\"name\":\"envOr\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"value\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"bytes32\",\"name\":\"defaultValue\",\"type\":\"bytes32\"}],\"name\":\"envOr\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"value\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"int256\",\"name\":\"defaultValue\",\"type\":\"int256\"}],\"name\":\"envOr\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"value\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"delim\",\"type\":\"string\"},{\"internalType\":\"address[]\",\"name\":\"defaultValue\",\"type\":\"address[]\"}],\"name\":\"envOr\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"value\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"defaultValue\",\"type\":\"string\"}],\"name\":\"envOr\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"value\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"delim\",\"type\":\"string\"},{\"internalType\":\"bool[]\",\"name\":\"defaultValue\",\"type\":\"bool[]\"}],\"name\":\"envOr\",\"outputs\":[{\"internalType\":\"bool[]\",\"name\":\"value\",\"type\":\"bool[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"delim\",\"type\":\"string\"}],\"name\":\"envString\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"value\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"envString\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"value\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"envUint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"delim\",\"type\":\"string\"}],\"name\":\"envUint\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"value\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"newRuntimeBytecode\",\"type\":\"bytes\"}],\"name\":\"etch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"fromBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"toBlock\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes32[]\",\"name\":\"topics\",\"type\":\"bytes32[]\"}],\"name\":\"eth_getLogs\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"emitter\",\"type\":\"address\"},{\"internalType\":\"bytes32[]\",\"name\":\"topics\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"blockNumber\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"transactionHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"transactionIndex\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"logIndex\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"removed\",\"type\":\"bool\"}],\"internalType\":\"struct VmSafe.EthGetLogs[]\",\"name\":\"logs\",\"type\":\"tuple[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"path\",\"type\":\"string\"}],\"name\":\"exists\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"result\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"callee\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"msgValue\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"gas\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"expectCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"callee\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"msgValue\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"gas\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"count\",\"type\":\"uint64\"}],\"name\":\"expectCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"callee\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"msgValue\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"count\",\"type\":\"uint64\"}],\"name\":\"expectCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"callee\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"expectCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"callee\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"count\",\"type\":\"uint64\"}],\"name\":\"expectCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"callee\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"msgValue\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"expectCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"callee\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"msgValue\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"minGas\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"expectCallMinGas\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"callee\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"msgValue\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"minGas\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"count\",\"type\":\"uint64\"}],\"name\":\"expectCallMinGas\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"expectEmit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"checkTopic1\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"checkTopic2\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"checkTopic3\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"checkData\",\"type\":\"bool\"}],\"name\":\"expectEmit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"checkTopic1\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"checkTopic2\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"checkTopic3\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"checkData\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"emitter\",\"type\":\"address\"}],\"name\":\"expectEmit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"emitter\",\"type\":\"address\"}],\"name\":\"expectEmit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"revertData\",\"type\":\"bytes4\"}],\"name\":\"expectRevert\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"revertData\",\"type\":\"bytes\"}],\"name\":\"expectRevert\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"expectRevert\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"min\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"max\",\"type\":\"uint64\"}],\"name\":\"expectSafeMemory\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"min\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"max\",\"type\":\"uint64\"}],\"name\":\"expectSafeMemoryCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newBasefee\",\"type\":\"uint256\"}],\"name\":\"fee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string[]\",\"name\":\"commandInput\",\"type\":\"string[]\"}],\"name\":\"ffi\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"path\",\"type\":\"string\"}],\"name\":\"fsMetadata\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"isDir\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isSymlink\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"readOnly\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"modified\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"accessed\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"created\",\"type\":\"uint256\"}],\"internalType\":\"struct VmSafe.FsMetadata\",\"name\":\"metadata\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBlockNumber\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBlockTimestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"artifactPath\",\"type\":\"string\"}],\"name\":\"getCode\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"creationBytecode\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"artifactPath\",\"type\":\"string\"}],\"name\":\"getDeployedCode\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"runtimeBytecode\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"getLabel\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"currentLabel\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"elementSlot\",\"type\":\"bytes32\"}],\"name\":\"getMappingKeyAndParentOf\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"found\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"parent\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"mappingSlot\",\"type\":\"bytes32\"}],\"name\":\"getMappingLength\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"mappingSlot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"idx\",\"type\":\"uint256\"}],\"name\":\"getMappingSlotAt\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"value\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"getNonce\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"publicKeyX\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"publicKeyY\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"privateKey\",\"type\":\"uint256\"}],\"internalType\":\"struct VmSafe.Wallet\",\"name\":\"wallet\",\"type\":\"tuple\"}],\"name\":\"getNonce\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRecordedLogs\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32[]\",\"name\":\"topics\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"emitter\",\"type\":\"address\"}],\"internalType\":\"struct VmSafe.Log[]\",\"name\":\"logs\",\"type\":\"tuple[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"path\",\"type\":\"string\"}],\"name\":\"isDir\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"result\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"path\",\"type\":\"string\"}],\"name\":\"isFile\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"result\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isPersistent\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"persistent\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"}],\"name\":\"keyExists\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"newLabel\",\"type\":\"string\"}],\"name\":\"label\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"slot\",\"type\":\"bytes32\"}],\"name\":\"load\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"data\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"pathToAllocsJson\",\"type\":\"string\"}],\"name\":\"loadAllocs\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"accounts\",\"type\":\"address[]\"}],\"name\":\"makePersistent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account0\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"account1\",\"type\":\"address\"}],\"name\":\"makePersistent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"makePersistent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account0\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"account1\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"account2\",\"type\":\"address\"}],\"name\":\"makePersistent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"callee\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"msgValue\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"name\":\"mockCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"callee\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"name\":\"mockCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"callee\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"msgValue\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"revertData\",\"type\":\"bytes\"}],\"name\":\"mockCallRevert\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"callee\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"revertData\",\"type\":\"bytes\"}],\"name\":\"mockCallRevert\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"stringifiedValue\",\"type\":\"string\"}],\"name\":\"parseAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"parsedValue\",\"type\":\"address\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"stringifiedValue\",\"type\":\"string\"}],\"name\":\"parseBool\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"parsedValue\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"stringifiedValue\",\"type\":\"string\"}],\"name\":\"parseBytes\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"parsedValue\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"stringifiedValue\",\"type\":\"string\"}],\"name\":\"parseBytes32\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"parsedValue\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"stringifiedValue\",\"type\":\"string\"}],\"name\":\"parseInt\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"parsedValue\",\"type\":\"int256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"}],\"name\":\"parseJson\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"abiEncodedData\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"}],\"name\":\"parseJson\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"abiEncodedData\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"}],\"name\":\"parseJsonAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"}],\"name\":\"parseJsonAddressArray\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"}],\"name\":\"parseJsonBool\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"}],\"name\":\"parseJsonBoolArray\",\"outputs\":[{\"internalType\":\"bool[]\",\"name\":\"\",\"type\":\"bool[]\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"}],\"name\":\"parseJsonBytes\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"}],\"name\":\"parseJsonBytes32\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"}],\"name\":\"parseJsonBytes32Array\",\"outputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"\",\"type\":\"bytes32[]\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"}],\"name\":\"parseJsonBytesArray\",\"outputs\":[{\"internalType\":\"bytes[]\",\"name\":\"\",\"type\":\"bytes[]\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"}],\"name\":\"parseJsonInt\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"}],\"name\":\"parseJsonIntArray\",\"outputs\":[{\"internalType\":\"int256[]\",\"name\":\"\",\"type\":\"int256[]\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"}],\"name\":\"parseJsonKeys\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"keys\",\"type\":\"string[]\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"}],\"name\":\"parseJsonString\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"}],\"name\":\"parseJsonStringArray\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"\",\"type\":\"string[]\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"}],\"name\":\"parseJsonUint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"}],\"name\":\"parseJsonUintArray\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"stringifiedValue\",\"type\":\"string\"}],\"name\":\"parseUint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"parsedValue\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauseGasMetering\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"msgSender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"txOrigin\",\"type\":\"address\"}],\"name\":\"prank\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"msgSender\",\"type\":\"address\"}],\"name\":\"prank\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"newPrevrandao\",\"type\":\"bytes32\"}],\"name\":\"prevrandao\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"projectRoot\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"path\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"readCallers\",\"outputs\":[{\"internalType\":\"enum VmSafe.CallerMode\",\"name\":\"callerMode\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"msgSender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"txOrigin\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"path\",\"type\":\"string\"},{\"internalType\":\"uint64\",\"name\":\"maxDepth\",\"type\":\"uint64\"}],\"name\":\"readDir\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"errorMessage\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"path\",\"type\":\"string\"},{\"internalType\":\"uint64\",\"name\":\"depth\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"isDir\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isSymlink\",\"type\":\"bool\"}],\"internalType\":\"struct VmSafe.DirEntry[]\",\"name\":\"entries\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"path\",\"type\":\"string\"},{\"internalType\":\"uint64\",\"name\":\"maxDepth\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"followLinks\",\"type\":\"bool\"}],\"name\":\"readDir\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"errorMessage\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"path\",\"type\":\"string\"},{\"internalType\":\"uint64\",\"name\":\"depth\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"isDir\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isSymlink\",\"type\":\"bool\"}],\"internalType\":\"struct VmSafe.DirEntry[]\",\"name\":\"entries\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"path\",\"type\":\"string\"}],\"name\":\"readDir\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"errorMessage\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"path\",\"type\":\"string\"},{\"internalType\":\"uint64\",\"name\":\"depth\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"isDir\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isSymlink\",\"type\":\"bool\"}],\"internalType\":\"struct VmSafe.DirEntry[]\",\"name\":\"entries\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"path\",\"type\":\"string\"}],\"name\":\"readFile\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"data\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"path\",\"type\":\"string\"}],\"name\":\"readFileBinary\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"path\",\"type\":\"string\"}],\"name\":\"readLine\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"line\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"linkPath\",\"type\":\"string\"}],\"name\":\"readLink\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"targetPath\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"record\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"recordLogs\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"privateKey\",\"type\":\"uint256\"}],\"name\":\"rememberKey\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"keyAddr\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"path\",\"type\":\"string\"},{\"internalType\":\"bool\",\"name\":\"recursive\",\"type\":\"bool\"}],\"name\":\"removeDir\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"path\",\"type\":\"string\"}],\"name\":\"removeFile\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"resetNonce\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"resumeGasMetering\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"snapshotId\",\"type\":\"uint256\"}],\"name\":\"revertTo\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"snapshotId\",\"type\":\"uint256\"}],\"name\":\"revertToAndDelete\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"accounts\",\"type\":\"address[]\"}],\"name\":\"revokePersistent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokePersistent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newHeight\",\"type\":\"uint256\"}],\"name\":\"roll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"txHash\",\"type\":\"bytes32\"}],\"name\":\"rollFork\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"forkId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"blockNumber\",\"type\":\"uint256\"}],\"name\":\"rollFork\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"blockNumber\",\"type\":\"uint256\"}],\"name\":\"rollFork\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"forkId\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"txHash\",\"type\":\"bytes32\"}],\"name\":\"rollFork\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"method\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"params\",\"type\":\"string\"}],\"name\":\"rpc\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"rpcAlias\",\"type\":\"string\"}],\"name\":\"rpcUrl\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rpcUrlStructs\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"url\",\"type\":\"string\"}],\"internalType\":\"struct VmSafe.Rpc[]\",\"name\":\"urls\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rpcUrls\",\"outputs\":[{\"internalType\":\"string[2][]\",\"name\":\"urls\",\"type\":\"string[2][]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"forkId\",\"type\":\"uint256\"}],\"name\":\"selectFork\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"objectKey\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"valueKey\",\"type\":\"string\"},{\"internalType\":\"address[]\",\"name\":\"values\",\"type\":\"address[]\"}],\"name\":\"serializeAddress\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"objectKey\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"valueKey\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"value\",\"type\":\"address\"}],\"name\":\"serializeAddress\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"objectKey\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"valueKey\",\"type\":\"string\"},{\"internalType\":\"bool[]\",\"name\":\"values\",\"type\":\"bool[]\"}],\"name\":\"serializeBool\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"objectKey\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"valueKey\",\"type\":\"string\"},{\"internalType\":\"bool\",\"name\":\"value\",\"type\":\"bool\"}],\"name\":\"serializeBool\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"objectKey\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"valueKey\",\"type\":\"string\"},{\"internalType\":\"bytes[]\",\"name\":\"values\",\"type\":\"bytes[]\"}],\"name\":\"serializeBytes\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"objectKey\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"valueKey\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"value\",\"type\":\"bytes\"}],\"name\":\"serializeBytes\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"objectKey\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"valueKey\",\"type\":\"string\"},{\"internalType\":\"bytes32[]\",\"name\":\"values\",\"type\":\"bytes32[]\"}],\"name\":\"serializeBytes32\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"objectKey\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"valueKey\",\"type\":\"string\"},{\"internalType\":\"bytes32\",\"name\":\"value\",\"type\":\"bytes32\"}],\"name\":\"serializeBytes32\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"objectKey\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"valueKey\",\"type\":\"string\"},{\"internalType\":\"int256\",\"name\":\"value\",\"type\":\"int256\"}],\"name\":\"serializeInt\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"objectKey\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"valueKey\",\"type\":\"string\"},{\"internalType\":\"int256[]\",\"name\":\"values\",\"type\":\"int256[]\"}],\"name\":\"serializeInt\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"objectKey\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"value\",\"type\":\"string\"}],\"name\":\"serializeJson\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"objectKey\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"valueKey\",\"type\":\"string\"},{\"internalType\":\"string[]\",\"name\":\"values\",\"type\":\"string[]\"}],\"name\":\"serializeString\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"objectKey\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"valueKey\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"value\",\"type\":\"string\"}],\"name\":\"serializeString\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"objectKey\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"valueKey\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"serializeUint\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"objectKey\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"valueKey\",\"type\":\"string\"},{\"internalType\":\"uint256[]\",\"name\":\"values\",\"type\":\"uint256[]\"}],\"name\":\"serializeUint\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"value\",\"type\":\"string\"}],\"name\":\"setEnv\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"newNonce\",\"type\":\"uint64\"}],\"name\":\"setNonce\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"newNonce\",\"type\":\"uint64\"}],\"name\":\"setNonceUnsafe\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"publicKeyX\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"publicKeyY\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"privateKey\",\"type\":\"uint256\"}],\"internalType\":\"struct VmSafe.Wallet\",\"name\":\"wallet\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"}],\"name\":\"sign\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"privateKey\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"}],\"name\":\"sign\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"privateKey\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"}],\"name\":\"signP256\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"skipTest\",\"type\":\"bool\"}],\"name\":\"skip\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"}],\"name\":\"sleep\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"snapshot\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"snapshotId\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"startBroadcast\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"}],\"name\":\"startBroadcast\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"privateKey\",\"type\":\"uint256\"}],\"name\":\"startBroadcast\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"startMappingRecording\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"msgSender\",\"type\":\"address\"}],\"name\":\"startPrank\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"msgSender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"txOrigin\",\"type\":\"address\"}],\"name\":\"startPrank\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"startStateDiffRecording\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stopAndReturnStateDiff\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"forkId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"}],\"internalType\":\"struct VmSafe.ChainInfo\",\"name\":\"chainInfo\",\"type\":\"tuple\"},{\"internalType\":\"enum VmSafe.AccountAccessKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"accessor\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"initialized\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"oldBalance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"newBalance\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"deployedCode\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"reverted\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"slot\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"isWrite\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"previousValue\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"newValue\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"reverted\",\"type\":\"bool\"}],\"internalType\":\"struct VmSafe.StorageAccess[]\",\"name\":\"storageAccesses\",\"type\":\"tuple[]\"}],\"internalType\":\"struct VmSafe.AccountAccess[]\",\"name\":\"accountAccesses\",\"type\":\"tuple[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stopBroadcast\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stopMappingRecording\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stopPrank\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"slot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"value\",\"type\":\"bytes32\"}],\"name\":\"store\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"data\",\"type\":\"string\"}],\"name\":\"toBase64\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"toBase64\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"data\",\"type\":\"string\"}],\"name\":\"toBase64URL\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"toBase64URL\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"value\",\"type\":\"address\"}],\"name\":\"toString\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"stringifiedValue\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"toString\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"stringifiedValue\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"value\",\"type\":\"bytes\"}],\"name\":\"toString\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"stringifiedValue\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"value\",\"type\":\"bool\"}],\"name\":\"toString\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"stringifiedValue\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"value\",\"type\":\"int256\"}],\"name\":\"toString\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"stringifiedValue\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"value\",\"type\":\"bytes32\"}],\"name\":\"toString\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"stringifiedValue\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"forkId\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"txHash\",\"type\":\"bytes32\"}],\"name\":\"transact\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"txHash\",\"type\":\"bytes32\"}],\"name\":\"transact\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string[]\",\"name\":\"commandInput\",\"type\":\"string[]\"}],\"name\":\"tryFfi\",\"outputs\":[{\"components\":[{\"internalType\":\"int32\",\"name\":\"exitCode\",\"type\":\"int32\"},{\"internalType\":\"bytes\",\"name\":\"stdout\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"stderr\",\"type\":\"bytes\"}],\"internalType\":\"struct VmSafe.FfiResult\",\"name\":\"result\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newGasPrice\",\"type\":\"uint256\"}],\"name\":\"txGasPrice\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unixTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"milliseconds\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newTimestamp\",\"type\":\"uint256\"}],\"name\":\"warp\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"path\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"data\",\"type\":\"string\"}],\"name\":\"writeFile\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"path\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"writeFileBinary\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"path\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"valueKey\",\"type\":\"string\"}],\"name\":\"writeJson\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"path\",\"type\":\"string\"}],\"name\":\"writeJson\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"path\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"data\",\"type\":\"string\"}],\"name\":\"writeLine\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"accesses(address)\":{\"notice\":\"Gets all accessed reads and write slot from a `vm.record` session, for a given address.\"},\"activeFork()\":{\"notice\":\"Returns the identifier of the currently active fork. Reverts if no fork is currently active.\"},\"addr(uint256)\":{\"notice\":\"Gets the address for a given private key.\"},\"allowCheatcodes(address)\":{\"notice\":\"In forking mode, explicitly grant the given address cheatcode access.\"},\"assume(bool)\":{\"notice\":\"If the condition is false, discard this run's fuzz inputs and generate new ones.\"},\"breakpoint(string)\":{\"notice\":\"Writes a breakpoint to jump to in the debugger.\"},\"breakpoint(string,bool)\":{\"notice\":\"Writes a conditional breakpoint to jump to in the debugger.\"},\"broadcast()\":{\"notice\":\"Using the address that calls the test contract, has the next call (at this call depth only) create a transaction that can later be signed and sent onchain.\"},\"broadcast(address)\":{\"notice\":\"Has the next call (at this call depth only) create a transaction with the address provided as the sender that can later be signed and sent onchain.\"},\"broadcast(uint256)\":{\"notice\":\"Has the next call (at this call depth only) create a transaction with the private key provided as the sender that can later be signed and sent onchain.\"},\"chainId(uint256)\":{\"notice\":\"Sets `block.chainid`.\"},\"clearMockedCalls()\":{\"notice\":\"Clears all mocked calls.\"},\"closeFile(string)\":{\"notice\":\"Closes file for reading, resetting the offset and allowing to read it from beginning with readLine. `path` is relative to the project root.\"},\"coinbase(address)\":{\"notice\":\"Sets `block.coinbase`.\"},\"computeCreate2Address(bytes32,bytes32)\":{\"notice\":\"Compute the address of a contract created with CREATE2 using the default CREATE2 deployer.\"},\"computeCreate2Address(bytes32,bytes32,address)\":{\"notice\":\"Compute the address of a contract created with CREATE2 using the given CREATE2 deployer.\"},\"computeCreateAddress(address,uint256)\":{\"notice\":\"Compute the address a contract will be deployed at for a given deployer address and nonce.\"},\"copyFile(string,string)\":{\"notice\":\"Copies the contents of one file to another. This function will **overwrite** the contents of `to`. On success, the total number of bytes copied is returned and it is equal to the length of the `to` file as reported by `metadata`. Both `from` and `to` are relative to the project root.\"},\"createDir(string,bool)\":{\"notice\":\"Creates a new, empty directory at the provided path. This cheatcode will revert in the following situations, but is not limited to just these cases: - User lacks permissions to modify `path`. - A parent of the given path doesn't exist and `recursive` is false. - `path` already exists and `recursive` is false. `path` is relative to the project root.\"},\"createFork(string)\":{\"notice\":\"Creates a new fork with the given endpoint and the _latest_ block and returns the identifier of the fork.\"},\"createFork(string,bytes32)\":{\"notice\":\"Creates a new fork with the given endpoint and at the block the given transaction was mined in, replays all transaction mined in the block before the transaction, and returns the identifier of the fork.\"},\"createFork(string,uint256)\":{\"notice\":\"Creates a new fork with the given endpoint and block and returns the identifier of the fork.\"},\"createSelectFork(string)\":{\"notice\":\"Creates and also selects a new fork with the given endpoint and the latest block and returns the identifier of the fork.\"},\"createSelectFork(string,bytes32)\":{\"notice\":\"Creates and also selects new fork with the given endpoint and at the block the given transaction was mined in, replays all transaction mined in the block before the transaction, returns the identifier of the fork.\"},\"createSelectFork(string,uint256)\":{\"notice\":\"Creates and also selects a new fork with the given endpoint and block and returns the identifier of the fork.\"},\"createWallet(string)\":{\"notice\":\"Derives a private key from the name, labels the account with that name, and returns the wallet.\"},\"createWallet(uint256)\":{\"notice\":\"Generates a wallet from the private key and returns the wallet.\"},\"createWallet(uint256,string)\":{\"notice\":\"Generates a wallet from the private key, labels the account with that name, and returns the wallet.\"},\"deal(address,uint256)\":{\"notice\":\"Sets an address' balance.\"},\"deleteSnapshot(uint256)\":{\"notice\":\"Removes the snapshot with the given ID created by `snapshot`. Takes the snapshot ID to delete. Returns `true` if the snapshot was successfully deleted. Returns `false` if the snapshot does not exist.\"},\"deleteSnapshots()\":{\"notice\":\"Removes _all_ snapshots previously created by `snapshot`.\"},\"deriveKey(string,string,uint32)\":{\"notice\":\"Derive a private key from a provided mnenomic string (or mnenomic file path) at `{derivationPath}{index}`.\"},\"deriveKey(string,string,uint32,string)\":{\"notice\":\"Derive a private key from a provided mnenomic string (or mnenomic file path) in the specified language at `{derivationPath}{index}`.\"},\"deriveKey(string,uint32)\":{\"notice\":\"Derive a private key from a provided mnenomic string (or mnenomic file path) at the derivation path `m/44'/60'/0'/0/{index}`.\"},\"deriveKey(string,uint32,string)\":{\"notice\":\"Derive a private key from a provided mnenomic string (or mnenomic file path) in the specified language at the derivation path `m/44'/60'/0'/0/{index}`.\"},\"difficulty(uint256)\":{\"notice\":\"Sets `block.difficulty`. Not available on EVM versions from Paris onwards. Use `prevrandao` instead. Reverts if used on unsupported EVM versions.\"},\"dumpState(string)\":{\"notice\":\"Dump a genesis JSON file's `allocs` to disk.\"},\"envAddress(string)\":{\"notice\":\"Gets the environment variable `name` and parses it as `address`. Reverts if the variable was not found or could not be parsed.\"},\"envAddress(string,string)\":{\"notice\":\"Gets the environment variable `name` and parses it as an array of `address`, delimited by `delim`. Reverts if the variable was not found or could not be parsed.\"},\"envBool(string)\":{\"notice\":\"Gets the environment variable `name` and parses it as `bool`. Reverts if the variable was not found or could not be parsed.\"},\"envBool(string,string)\":{\"notice\":\"Gets the environment variable `name` and parses it as an array of `bool`, delimited by `delim`. Reverts if the variable was not found or could not be parsed.\"},\"envBytes(string)\":{\"notice\":\"Gets the environment variable `name` and parses it as `bytes`. Reverts if the variable was not found or could not be parsed.\"},\"envBytes(string,string)\":{\"notice\":\"Gets the environment variable `name` and parses it as an array of `bytes`, delimited by `delim`. Reverts if the variable was not found or could not be parsed.\"},\"envBytes32(string)\":{\"notice\":\"Gets the environment variable `name` and parses it as `bytes32`. Reverts if the variable was not found or could not be parsed.\"},\"envBytes32(string,string)\":{\"notice\":\"Gets the environment variable `name` and parses it as an array of `bytes32`, delimited by `delim`. Reverts if the variable was not found or could not be parsed.\"},\"envInt(string)\":{\"notice\":\"Gets the environment variable `name` and parses it as `int256`. Reverts if the variable was not found or could not be parsed.\"},\"envInt(string,string)\":{\"notice\":\"Gets the environment variable `name` and parses it as an array of `int256`, delimited by `delim`. Reverts if the variable was not found or could not be parsed.\"},\"envOr(string,address)\":{\"notice\":\"Gets the environment variable `name` and parses it as `address`. Reverts if the variable could not be parsed. Returns `defaultValue` if the variable was not found.\"},\"envOr(string,bool)\":{\"notice\":\"Gets the environment variable `name` and parses it as `bool`. Reverts if the variable could not be parsed. Returns `defaultValue` if the variable was not found.\"},\"envOr(string,bytes)\":{\"notice\":\"Gets the environment variable `name` and parses it as `bytes`. Reverts if the variable could not be parsed. Returns `defaultValue` if the variable was not found.\"},\"envOr(string,bytes32)\":{\"notice\":\"Gets the environment variable `name` and parses it as `bytes32`. Reverts if the variable could not be parsed. Returns `defaultValue` if the variable was not found.\"},\"envOr(string,int256)\":{\"notice\":\"Gets the environment variable `name` and parses it as `int256`. Reverts if the variable could not be parsed. Returns `defaultValue` if the variable was not found.\"},\"envOr(string,string)\":{\"notice\":\"Gets the environment variable `name` and parses it as `string`. Reverts if the variable could not be parsed. Returns `defaultValue` if the variable was not found.\"},\"envOr(string,string,address[])\":{\"notice\":\"Gets the environment variable `name` and parses it as an array of `address`, delimited by `delim`. Reverts if the variable could not be parsed. Returns `defaultValue` if the variable was not found.\"},\"envOr(string,string,bool[])\":{\"notice\":\"Gets the environment variable `name` and parses it as an array of `bool`, delimited by `delim`. Reverts if the variable could not be parsed. Returns `defaultValue` if the variable was not found.\"},\"envOr(string,string,bytes32[])\":{\"notice\":\"Gets the environment variable `name` and parses it as an array of `bytes32`, delimited by `delim`. Reverts if the variable could not be parsed. Returns `defaultValue` if the variable was not found.\"},\"envOr(string,string,bytes[])\":{\"notice\":\"Gets the environment variable `name` and parses it as an array of `bytes`, delimited by `delim`. Reverts if the variable could not be parsed. Returns `defaultValue` if the variable was not found.\"},\"envOr(string,string,int256[])\":{\"notice\":\"Gets the environment variable `name` and parses it as an array of `int256`, delimited by `delim`. Reverts if the variable could not be parsed. Returns `defaultValue` if the variable was not found.\"},\"envOr(string,string,string[])\":{\"notice\":\"Gets the environment variable `name` and parses it as an array of `string`, delimited by `delim`. Reverts if the variable could not be parsed. Returns `defaultValue` if the variable was not found.\"},\"envOr(string,string,uint256[])\":{\"notice\":\"Gets the environment variable `name` and parses it as an array of `uint256`, delimited by `delim`. Reverts if the variable could not be parsed. Returns `defaultValue` if the variable was not found.\"},\"envOr(string,uint256)\":{\"notice\":\"Gets the environment variable `name` and parses it as `uint256`. Reverts if the variable could not be parsed. Returns `defaultValue` if the variable was not found.\"},\"envString(string)\":{\"notice\":\"Gets the environment variable `name` and parses it as `string`. Reverts if the variable was not found or could not be parsed.\"},\"envString(string,string)\":{\"notice\":\"Gets the environment variable `name` and parses it as an array of `string`, delimited by `delim`. Reverts if the variable was not found or could not be parsed.\"},\"envUint(string)\":{\"notice\":\"Gets the environment variable `name` and parses it as `uint256`. Reverts if the variable was not found or could not be parsed.\"},\"envUint(string,string)\":{\"notice\":\"Gets the environment variable `name` and parses it as an array of `uint256`, delimited by `delim`. Reverts if the variable was not found or could not be parsed.\"},\"etch(address,bytes)\":{\"notice\":\"Sets an address' code.\"},\"eth_getLogs(uint256,uint256,address,bytes32[])\":{\"notice\":\"Gets all the logs according to specified filter.\"},\"exists(string)\":{\"notice\":\"Returns true if the given path points to an existing entity, else returns false.\"},\"expectCall(address,bytes)\":{\"notice\":\"Expects a call to an address with the specified calldata. Calldata can either be a strict or a partial match.\"},\"expectCall(address,bytes,uint64)\":{\"notice\":\"Expects given number of calls to an address with the specified calldata.\"},\"expectCall(address,uint256,bytes)\":{\"notice\":\"Expects a call to an address with the specified `msg.value` and calldata.\"},\"expectCall(address,uint256,bytes,uint64)\":{\"notice\":\"Expects given number of calls to an address with the specified `msg.value` and calldata.\"},\"expectCall(address,uint256,uint64,bytes)\":{\"notice\":\"Expect a call to an address with the specified `msg.value`, gas, and calldata.\"},\"expectCall(address,uint256,uint64,bytes,uint64)\":{\"notice\":\"Expects given number of calls to an address with the specified `msg.value`, gas, and calldata.\"},\"expectCallMinGas(address,uint256,uint64,bytes)\":{\"notice\":\"Expect a call to an address with the specified `msg.value` and calldata, and a *minimum* amount of gas.\"},\"expectCallMinGas(address,uint256,uint64,bytes,uint64)\":{\"notice\":\"Expect given number of calls to an address with the specified `msg.value` and calldata, and a *minimum* amount of gas.\"},\"expectEmit()\":{\"notice\":\"Prepare an expected log with all topic and data checks enabled. Call this function, then emit an event, then call a function. Internally after the call, we check if logs were emitted in the expected order with the expected topics and data.\"},\"expectEmit(address)\":{\"notice\":\"Same as the previous method, but also checks supplied address against emitting contract.\"},\"expectEmit(bool,bool,bool,bool)\":{\"notice\":\"Prepare an expected log with (bool checkTopic1, bool checkTopic2, bool checkTopic3, bool checkData.). Call this function, then emit an event, then call a function. Internally after the call, we check if logs were emitted in the expected order with the expected topics and data (as specified by the booleans).\"},\"expectEmit(bool,bool,bool,bool,address)\":{\"notice\":\"Same as the previous method, but also checks supplied address against emitting contract.\"},\"expectRevert()\":{\"notice\":\"Expects an error on next call with any revert data.\"},\"expectRevert(bytes)\":{\"notice\":\"Expects an error on next call that exactly matches the revert data.\"},\"expectRevert(bytes4)\":{\"notice\":\"Expects an error on next call that starts with the revert data.\"},\"expectSafeMemory(uint64,uint64)\":{\"notice\":\"Only allows memory writes to offsets [0x00, 0x60) \\u222a [min, max) in the current subcontext. If any other memory is written to, the test will fail. Can be called multiple times to add more ranges to the set.\"},\"expectSafeMemoryCall(uint64,uint64)\":{\"notice\":\"Only allows memory writes to offsets [0x00, 0x60) \\u222a [min, max) in the next created subcontext. If any other memory is written to, the test will fail. Can be called multiple times to add more ranges to the set.\"},\"fee(uint256)\":{\"notice\":\"Sets `block.basefee`.\"},\"ffi(string[])\":{\"notice\":\"Performs a foreign function call via the terminal.\"},\"fsMetadata(string)\":{\"notice\":\"Given a path, query the file system to get information about a file, directory, etc.\"},\"getBlockNumber()\":{\"notice\":\"Gets the current `block.number`. You should use this instead of `block.number` if you use `vm.roll`, as `block.number` is assumed to be constant across a transaction, and as a result will get optimized out by the compiler. See https://github.com/foundry-rs/foundry/issues/6180\"},\"getBlockTimestamp()\":{\"notice\":\"Gets the current `block.timestamp`. You should use this instead of `block.timestamp` if you use `vm.warp`, as `block.timestamp` is assumed to be constant across a transaction, and as a result will get optimized out by the compiler. See https://github.com/foundry-rs/foundry/issues/6180\"},\"getCode(string)\":{\"notice\":\"Gets the creation bytecode from an artifact file. Takes in the relative path to the json file.\"},\"getDeployedCode(string)\":{\"notice\":\"Gets the deployed bytecode from an artifact file. Takes in the relative path to the json file.\"},\"getLabel(address)\":{\"notice\":\"Gets the label for the specified address.\"},\"getMappingKeyAndParentOf(address,bytes32)\":{\"notice\":\"Gets the map key and parent of a mapping at a given slot, for a given address.\"},\"getMappingLength(address,bytes32)\":{\"notice\":\"Gets the number of elements in the mapping at the given slot, for a given address.\"},\"getMappingSlotAt(address,bytes32,uint256)\":{\"notice\":\"Gets the elements at index idx of the mapping at the given slot, for a given address. The index must be less than the length of the mapping (i.e. the number of keys in the mapping).\"},\"getNonce((address,uint256,uint256,uint256))\":{\"notice\":\"Get a `Wallet`'s nonce.\"},\"getNonce(address)\":{\"notice\":\"Gets the nonce of an account.\"},\"getRecordedLogs()\":{\"notice\":\"Gets all the recorded logs.\"},\"isDir(string)\":{\"notice\":\"Returns true if the path exists on disk and is pointing at a directory, else returns false.\"},\"isFile(string)\":{\"notice\":\"Returns true if the path exists on disk and is pointing at a regular file, else returns false.\"},\"isPersistent(address)\":{\"notice\":\"Returns true if the account is marked as persistent.\"},\"keyExists(string,string)\":{\"notice\":\"Checks if `key` exists in a JSON object.\"},\"label(address,string)\":{\"notice\":\"Labels an address in call traces.\"},\"load(address,bytes32)\":{\"notice\":\"Loads a storage slot from an address.\"},\"loadAllocs(string)\":{\"notice\":\"Load a genesis JSON file's `allocs` into the in-memory revm state.\"},\"makePersistent(address)\":{\"notice\":\"Marks that the account(s) should use persistent storage across fork swaps in a multifork setup Meaning, changes made to the state of this account will be kept when switching forks.\"},\"makePersistent(address,address)\":{\"notice\":\"See `makePersistent(address)`.\"},\"makePersistent(address,address,address)\":{\"notice\":\"See `makePersistent(address)`.\"},\"makePersistent(address[])\":{\"notice\":\"See `makePersistent(address)`.\"},\"mockCall(address,bytes,bytes)\":{\"notice\":\"Mocks a call to an address, returning specified data. Calldata can either be strict or a partial match, e.g. if you only pass a Solidity selector to the expected calldata, then the entire Solidity function will be mocked.\"},\"mockCall(address,uint256,bytes,bytes)\":{\"notice\":\"Mocks a call to an address with a specific `msg.value`, returning specified data. Calldata match takes precedence over `msg.value` in case of ambiguity.\"},\"mockCallRevert(address,bytes,bytes)\":{\"notice\":\"Reverts a call to an address with specified revert data.\"},\"mockCallRevert(address,uint256,bytes,bytes)\":{\"notice\":\"Reverts a call to an address with a specific `msg.value`, with specified revert data.\"},\"parseAddress(string)\":{\"notice\":\"Parses the given `string` into an `address`.\"},\"parseBool(string)\":{\"notice\":\"Parses the given `string` into a `bool`.\"},\"parseBytes(string)\":{\"notice\":\"Parses the given `string` into `bytes`.\"},\"parseBytes32(string)\":{\"notice\":\"Parses the given `string` into a `bytes32`.\"},\"parseInt(string)\":{\"notice\":\"Parses the given `string` into a `int256`.\"},\"parseJson(string)\":{\"notice\":\"ABI-encodes a JSON object.\"},\"parseJson(string,string)\":{\"notice\":\"ABI-encodes a JSON object at `key`.\"},\"parseJsonAddress(string,string)\":{\"notice\":\"Parses a string of JSON data at `key` and coerces it to `address`.\"},\"parseJsonAddressArray(string,string)\":{\"notice\":\"Parses a string of JSON data at `key` and coerces it to `address[]`.\"},\"parseJsonBool(string,string)\":{\"notice\":\"Parses a string of JSON data at `key` and coerces it to `bool`.\"},\"parseJsonBoolArray(string,string)\":{\"notice\":\"Parses a string of JSON data at `key` and coerces it to `bool[]`.\"},\"parseJsonBytes(string,string)\":{\"notice\":\"Parses a string of JSON data at `key` and coerces it to `bytes`.\"},\"parseJsonBytes32(string,string)\":{\"notice\":\"Parses a string of JSON data at `key` and coerces it to `bytes32`.\"},\"parseJsonBytes32Array(string,string)\":{\"notice\":\"Parses a string of JSON data at `key` and coerces it to `bytes32[]`.\"},\"parseJsonBytesArray(string,string)\":{\"notice\":\"Parses a string of JSON data at `key` and coerces it to `bytes[]`.\"},\"parseJsonInt(string,string)\":{\"notice\":\"Parses a string of JSON data at `key` and coerces it to `int256`.\"},\"parseJsonIntArray(string,string)\":{\"notice\":\"Parses a string of JSON data at `key` and coerces it to `int256[]`.\"},\"parseJsonKeys(string,string)\":{\"notice\":\"Returns an array of all the keys in a JSON object.\"},\"parseJsonString(string,string)\":{\"notice\":\"Parses a string of JSON data at `key` and coerces it to `string`.\"},\"parseJsonStringArray(string,string)\":{\"notice\":\"Parses a string of JSON data at `key` and coerces it to `string[]`.\"},\"parseJsonUint(string,string)\":{\"notice\":\"Parses a string of JSON data at `key` and coerces it to `uint256`.\"},\"parseJsonUintArray(string,string)\":{\"notice\":\"Parses a string of JSON data at `key` and coerces it to `uint256[]`.\"},\"parseUint(string)\":{\"notice\":\"Parses the given `string` into a `uint256`.\"},\"pauseGasMetering()\":{\"notice\":\"Pauses gas metering (i.e. gas usage is not counted). Noop if already paused.\"},\"prank(address)\":{\"notice\":\"Sets the *next* call's `msg.sender` to be the input address.\"},\"prank(address,address)\":{\"notice\":\"Sets the *next* call's `msg.sender` to be the input address, and the `tx.origin` to be the second input.\"},\"prevrandao(bytes32)\":{\"notice\":\"Sets `block.prevrandao`. Not available on EVM versions before Paris. Use `difficulty` instead. If used on unsupported EVM versions it will revert.\"},\"projectRoot()\":{\"notice\":\"Get the path of the current project root.\"},\"readCallers()\":{\"notice\":\"Reads the current `msg.sender` and `tx.origin` from state and reports if there is any active caller modification.\"},\"readDir(string)\":{\"notice\":\"Reads the directory at the given path recursively, up to `maxDepth`. `maxDepth` defaults to 1, meaning only the direct children of the given directory will be returned. Follows symbolic links if `followLinks` is true.\"},\"readDir(string,uint64)\":{\"notice\":\"See `readDir(string)`.\"},\"readDir(string,uint64,bool)\":{\"notice\":\"See `readDir(string)`.\"},\"readFile(string)\":{\"notice\":\"Reads the entire content of file to string. `path` is relative to the project root.\"},\"readFileBinary(string)\":{\"notice\":\"Reads the entire content of file as binary. `path` is relative to the project root.\"},\"readLine(string)\":{\"notice\":\"Reads next line of file to string.\"},\"readLink(string)\":{\"notice\":\"Reads a symbolic link, returning the path that the link points to. This cheatcode will revert in the following situations, but is not limited to just these cases: - `path` is not a symbolic link. - `path` does not exist.\"},\"record()\":{\"notice\":\"Records all storage reads and writes.\"},\"recordLogs()\":{\"notice\":\"Record all the transaction logs.\"},\"rememberKey(uint256)\":{\"notice\":\"Adds a private key to the local forge wallet and returns the address.\"},\"removeDir(string,bool)\":{\"notice\":\"Removes a directory at the provided path. This cheatcode will revert in the following situations, but is not limited to just these cases: - `path` doesn't exist. - `path` isn't a directory. - User lacks permissions to modify `path`. - The directory is not empty and `recursive` is false. `path` is relative to the project root.\"},\"removeFile(string)\":{\"notice\":\"Removes a file from the filesystem. This cheatcode will revert in the following situations, but is not limited to just these cases: - `path` points to a directory. - The file doesn't exist. - The user lacks permissions to remove the file. `path` is relative to the project root.\"},\"resetNonce(address)\":{\"notice\":\"Resets the nonce of an account to 0 for EOAs and 1 for contract accounts.\"},\"resumeGasMetering()\":{\"notice\":\"Resumes gas metering (i.e. gas usage is counted again). Noop if already on.\"},\"revertTo(uint256)\":{\"notice\":\"Revert the state of the EVM to a previous snapshot Takes the snapshot ID to revert to. Returns `true` if the snapshot was successfully reverted. Returns `false` if the snapshot does not exist. **Note:** This does not automatically delete the snapshot. To delete the snapshot use `deleteSnapshot`.\"},\"revertToAndDelete(uint256)\":{\"notice\":\"Revert the state of the EVM to a previous snapshot and automatically deletes the snapshots Takes the snapshot ID to revert to. Returns `true` if the snapshot was successfully reverted and deleted. Returns `false` if the snapshot does not exist.\"},\"revokePersistent(address)\":{\"notice\":\"Revokes persistent status from the address, previously added via `makePersistent`.\"},\"revokePersistent(address[])\":{\"notice\":\"See `revokePersistent(address)`.\"},\"roll(uint256)\":{\"notice\":\"Sets `block.height`.\"},\"rollFork(bytes32)\":{\"notice\":\"Updates the currently active fork to given transaction. This will `rollFork` with the number of the block the transaction was mined in and replays all transaction mined before it in the block.\"},\"rollFork(uint256)\":{\"notice\":\"Updates the currently active fork to given block number This is similar to `roll` but for the currently active fork.\"},\"rollFork(uint256,bytes32)\":{\"notice\":\"Updates the given fork to block number of the given transaction and replays all transaction mined before it in the block.\"},\"rollFork(uint256,uint256)\":{\"notice\":\"Updates the given fork to given block number.\"},\"rpc(string,string)\":{\"notice\":\"Performs an Ethereum JSON-RPC request to the current fork URL.\"},\"rpcUrl(string)\":{\"notice\":\"Returns the RPC url for the given alias.\"},\"rpcUrlStructs()\":{\"notice\":\"Returns all rpc urls and their aliases as structs.\"},\"rpcUrls()\":{\"notice\":\"Returns all rpc urls and their aliases `[alias, url][]`.\"},\"selectFork(uint256)\":{\"notice\":\"Takes a fork identifier created by `createFork` and sets the corresponding forked state as active.\"},\"serializeAddress(string,string,address)\":{\"notice\":\"See `serializeJson`.\"},\"serializeAddress(string,string,address[])\":{\"notice\":\"See `serializeJson`.\"},\"serializeBool(string,string,bool)\":{\"notice\":\"See `serializeJson`.\"},\"serializeBool(string,string,bool[])\":{\"notice\":\"See `serializeJson`.\"},\"serializeBytes(string,string,bytes)\":{\"notice\":\"See `serializeJson`.\"},\"serializeBytes(string,string,bytes[])\":{\"notice\":\"See `serializeJson`.\"},\"serializeBytes32(string,string,bytes32)\":{\"notice\":\"See `serializeJson`.\"},\"serializeBytes32(string,string,bytes32[])\":{\"notice\":\"See `serializeJson`.\"},\"serializeInt(string,string,int256)\":{\"notice\":\"See `serializeJson`.\"},\"serializeInt(string,string,int256[])\":{\"notice\":\"See `serializeJson`.\"},\"serializeJson(string,string)\":{\"notice\":\"Serializes a key and value to a JSON object stored in-memory that can be later written to a file. Returns the stringified version of the specific JSON file up to that moment.\"},\"serializeString(string,string,string)\":{\"notice\":\"See `serializeJson`.\"},\"serializeString(string,string,string[])\":{\"notice\":\"See `serializeJson`.\"},\"serializeUint(string,string,uint256)\":{\"notice\":\"See `serializeJson`.\"},\"serializeUint(string,string,uint256[])\":{\"notice\":\"See `serializeJson`.\"},\"setEnv(string,string)\":{\"notice\":\"Sets environment variables.\"},\"setNonce(address,uint64)\":{\"notice\":\"Sets the nonce of an account. Must be higher than the current nonce of the account.\"},\"setNonceUnsafe(address,uint64)\":{\"notice\":\"Sets the nonce of an account to an arbitrary value.\"},\"sign((address,uint256,uint256,uint256),bytes32)\":{\"notice\":\"Signs data with a `Wallet`.\"},\"sign(uint256,bytes32)\":{\"notice\":\"Signs `digest` with `privateKey` using the secp256k1 curve.\"},\"signP256(uint256,bytes32)\":{\"notice\":\"Signs `digest` with `privateKey` using the secp256r1 curve.\"},\"skip(bool)\":{\"notice\":\"Marks a test as skipped. Must be called at the top of the test.\"},\"sleep(uint256)\":{\"notice\":\"Suspends execution of the main thread for `duration` milliseconds.\"},\"snapshot()\":{\"notice\":\"Snapshot the current state of the evm. Returns the ID of the snapshot that was created. To revert a snapshot use `revertTo`.\"},\"startBroadcast()\":{\"notice\":\"Using the address that calls the test contract, has all subsequent calls (at this call depth only) create transactions that can later be signed and sent onchain.\"},\"startBroadcast(address)\":{\"notice\":\"Has all subsequent calls (at this call depth only) create transactions with the address provided that can later be signed and sent onchain.\"},\"startBroadcast(uint256)\":{\"notice\":\"Has all subsequent calls (at this call depth only) create transactions with the private key provided that can later be signed and sent onchain.\"},\"startMappingRecording()\":{\"notice\":\"Starts recording all map SSTOREs for later retrieval.\"},\"startPrank(address)\":{\"notice\":\"Sets all subsequent calls' `msg.sender` to be the input address until `stopPrank` is called.\"},\"startPrank(address,address)\":{\"notice\":\"Sets all subsequent calls' `msg.sender` to be the input address until `stopPrank` is called, and the `tx.origin` to be the second input.\"},\"startStateDiffRecording()\":{\"notice\":\"Record all account accesses as part of CREATE, CALL or SELFDESTRUCT opcodes in order, along with the context of the calls\"},\"stopAndReturnStateDiff()\":{\"notice\":\"Returns an ordered array of all account accesses from a `vm.startStateDiffRecording` session.\"},\"stopBroadcast()\":{\"notice\":\"Stops collecting onchain transactions.\"},\"stopMappingRecording()\":{\"notice\":\"Stops recording all map SSTOREs for later retrieval and clears the recorded data.\"},\"stopPrank()\":{\"notice\":\"Resets subsequent calls' `msg.sender` to be `address(this)`.\"},\"store(address,bytes32,bytes32)\":{\"notice\":\"Stores a value to an address' storage slot.\"},\"toBase64(bytes)\":{\"notice\":\"Encodes a `bytes` value to a base64 string.\"},\"toBase64(string)\":{\"notice\":\"Encodes a `string` value to a base64 string.\"},\"toBase64URL(bytes)\":{\"notice\":\"Encodes a `bytes` value to a base64url string.\"},\"toBase64URL(string)\":{\"notice\":\"Encodes a `string` value to a base64url string.\"},\"toString(address)\":{\"notice\":\"Converts the given value to a `string`.\"},\"toString(bool)\":{\"notice\":\"Converts the given value to a `string`.\"},\"toString(bytes)\":{\"notice\":\"Converts the given value to a `string`.\"},\"toString(bytes32)\":{\"notice\":\"Converts the given value to a `string`.\"},\"toString(int256)\":{\"notice\":\"Converts the given value to a `string`.\"},\"toString(uint256)\":{\"notice\":\"Converts the given value to a `string`.\"},\"transact(bytes32)\":{\"notice\":\"Fetches the given transaction from the active fork and executes it on the current state.\"},\"transact(uint256,bytes32)\":{\"notice\":\"Fetches the given transaction from the given fork and executes it on the current state.\"},\"tryFfi(string[])\":{\"notice\":\"Performs a foreign function call via terminal and returns the exit code, stdout, and stderr.\"},\"txGasPrice(uint256)\":{\"notice\":\"Sets `tx.gasprice`.\"},\"unixTime()\":{\"notice\":\"Returns the time since unix epoch in milliseconds.\"},\"warp(uint256)\":{\"notice\":\"Sets `block.timestamp`.\"},\"writeFile(string,string)\":{\"notice\":\"Writes data to file, creating a file if it does not exist, and entirely replacing its contents if it does. `path` is relative to the project root.\"},\"writeFileBinary(string,bytes)\":{\"notice\":\"Writes binary data to a file, creating a file if it does not exist, and entirely replacing its contents if it does. `path` is relative to the project root.\"},\"writeJson(string,string)\":{\"notice\":\"Write a serialized JSON object to a file. If the file exists, it will be overwritten.\"},\"writeJson(string,string,string)\":{\"notice\":\"Write a serialized JSON object to an **existing** JSON file, replacing a value with key = This is useful to replace a specific value of a JSON file, without having to parse the entire thing.\"},\"writeLine(string,string)\":{\"notice\":\"Writes line to file, creating a file if it does not exist. `path` is relative to the project root.\"}},\"notice\":\"The `Vm` interface does allow manipulation of the EVM state. These are all intended to be used in tests, but it is not recommended to use these cheats in scripts.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Vm.sol\":\"Vm\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Vm.sol\":{\"keccak256\":\"0x87ba9f3edc254e529db9e3129c954391adcc7fc8574203767979d8d2f1e724b9\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://4d16c08d80d9f2869deb6350642cf5af624d21fce6b3b023abbcdedc62e195fe\",\"dweb:/ipfs/QmURpnnFECPKt3i7P7jQRZpr4ZBXjRGcZ9KzcbKzsgYR2W\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { - "inputs": [ - { "internalType": "address", "name": "target", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "accesses", - "outputs": [ - { - "internalType": "bytes32[]", - "name": "readSlots", - "type": "bytes32[]" - }, - { - "internalType": "bytes32[]", - "name": "writeSlots", - "type": "bytes32[]" - } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "activeFork", - "outputs": [ - { "internalType": "uint256", "name": "forkId", "type": "uint256" } - ] - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "privateKey", - "type": "uint256" - } - ], - "stateMutability": "pure", - "type": "function", - "name": "addr", - "outputs": [ - { "internalType": "address", "name": "keyAddr", "type": "address" } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "allowCheatcodes" - }, - { - "inputs": [ - { "internalType": "bool", "name": "condition", "type": "bool" } - ], - "stateMutability": "pure", - "type": "function", - "name": "assume" - }, - { - "inputs": [ - { "internalType": "string", "name": "char", "type": "string" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "breakpoint" - }, - { - "inputs": [ - { "internalType": "string", "name": "char", "type": "string" }, - { "internalType": "bool", "name": "value", "type": "bool" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "breakpoint" - }, - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "function", - "name": "broadcast" - }, - { - "inputs": [ - { "internalType": "address", "name": "signer", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "broadcast" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "privateKey", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "broadcast" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "newChainId", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "chainId" - }, - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "function", - "name": "clearMockedCalls" - }, - { - "inputs": [ - { "internalType": "string", "name": "path", "type": "string" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "closeFile" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newCoinbase", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "coinbase" - }, - { - "inputs": [ - { "internalType": "bytes32", "name": "salt", "type": "bytes32" }, - { - "internalType": "bytes32", - "name": "initCodeHash", - "type": "bytes32" - } - ], - "stateMutability": "pure", - "type": "function", - "name": "computeCreate2Address", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ] - }, - { - "inputs": [ - { "internalType": "bytes32", "name": "salt", "type": "bytes32" }, - { - "internalType": "bytes32", - "name": "initCodeHash", - "type": "bytes32" - }, - { "internalType": "address", "name": "deployer", "type": "address" } - ], - "stateMutability": "pure", - "type": "function", - "name": "computeCreate2Address", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ] - }, - { - "inputs": [ - { - "internalType": "address", - "name": "deployer", - "type": "address" - }, - { "internalType": "uint256", "name": "nonce", "type": "uint256" } - ], - "stateMutability": "pure", - "type": "function", - "name": "computeCreateAddress", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "from", "type": "string" }, - { "internalType": "string", "name": "to", "type": "string" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "copyFile", - "outputs": [ - { "internalType": "uint64", "name": "copied", "type": "uint64" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "path", "type": "string" }, - { "internalType": "bool", "name": "recursive", "type": "bool" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "createDir" - }, - { - "inputs": [ - { "internalType": "string", "name": "urlOrAlias", "type": "string" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "createFork", - "outputs": [ - { "internalType": "uint256", "name": "forkId", "type": "uint256" } - ] - }, - { - "inputs": [ - { - "internalType": "string", - "name": "urlOrAlias", - "type": "string" - }, - { - "internalType": "uint256", - "name": "blockNumber", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "createFork", - "outputs": [ - { "internalType": "uint256", "name": "forkId", "type": "uint256" } - ] - }, - { - "inputs": [ - { - "internalType": "string", - "name": "urlOrAlias", - "type": "string" - }, - { "internalType": "bytes32", "name": "txHash", "type": "bytes32" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "createFork", - "outputs": [ - { "internalType": "uint256", "name": "forkId", "type": "uint256" } - ] - }, - { - "inputs": [ - { - "internalType": "string", - "name": "urlOrAlias", - "type": "string" - }, - { - "internalType": "uint256", - "name": "blockNumber", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "createSelectFork", - "outputs": [ - { "internalType": "uint256", "name": "forkId", "type": "uint256" } - ] - }, - { - "inputs": [ - { - "internalType": "string", - "name": "urlOrAlias", - "type": "string" - }, - { "internalType": "bytes32", "name": "txHash", "type": "bytes32" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "createSelectFork", - "outputs": [ - { "internalType": "uint256", "name": "forkId", "type": "uint256" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "urlOrAlias", "type": "string" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "createSelectFork", - "outputs": [ - { "internalType": "uint256", "name": "forkId", "type": "uint256" } - ] - }, - { - "inputs": [ - { - "internalType": "string", - "name": "walletLabel", - "type": "string" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "createWallet", - "outputs": [ - { - "internalType": "struct VmSafe.Wallet", - "name": "wallet", - "type": "tuple", - "components": [ - { - "internalType": "address", - "name": "addr", - "type": "address" - }, - { - "internalType": "uint256", - "name": "publicKeyX", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "publicKeyY", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "privateKey", - "type": "uint256" - } - ] - } - ] - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "privateKey", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "createWallet", - "outputs": [ - { - "internalType": "struct VmSafe.Wallet", - "name": "wallet", - "type": "tuple", - "components": [ - { - "internalType": "address", - "name": "addr", - "type": "address" - }, - { - "internalType": "uint256", - "name": "publicKeyX", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "publicKeyY", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "privateKey", - "type": "uint256" - } - ] - } - ] - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "privateKey", - "type": "uint256" - }, - { - "internalType": "string", - "name": "walletLabel", - "type": "string" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "createWallet", - "outputs": [ - { - "internalType": "struct VmSafe.Wallet", - "name": "wallet", - "type": "tuple", - "components": [ - { - "internalType": "address", - "name": "addr", - "type": "address" - }, - { - "internalType": "uint256", - "name": "publicKeyX", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "publicKeyY", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "privateKey", - "type": "uint256" - } - ] - } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" }, - { - "internalType": "uint256", - "name": "newBalance", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "deal" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "snapshotId", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "deleteSnapshot", - "outputs": [ - { "internalType": "bool", "name": "success", "type": "bool" } - ] - }, - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "function", - "name": "deleteSnapshots" - }, - { - "inputs": [ - { "internalType": "string", "name": "mnemonic", "type": "string" }, - { - "internalType": "string", - "name": "derivationPath", - "type": "string" - }, - { "internalType": "uint32", "name": "index", "type": "uint32" }, - { "internalType": "string", "name": "language", "type": "string" } - ], - "stateMutability": "pure", - "type": "function", - "name": "deriveKey", - "outputs": [ - { - "internalType": "uint256", - "name": "privateKey", - "type": "uint256" - } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "mnemonic", "type": "string" }, - { "internalType": "uint32", "name": "index", "type": "uint32" }, - { "internalType": "string", "name": "language", "type": "string" } - ], - "stateMutability": "pure", - "type": "function", - "name": "deriveKey", - "outputs": [ - { - "internalType": "uint256", - "name": "privateKey", - "type": "uint256" - } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "mnemonic", "type": "string" }, - { "internalType": "uint32", "name": "index", "type": "uint32" } - ], - "stateMutability": "pure", - "type": "function", - "name": "deriveKey", - "outputs": [ - { - "internalType": "uint256", - "name": "privateKey", - "type": "uint256" - } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "mnemonic", "type": "string" }, - { - "internalType": "string", - "name": "derivationPath", - "type": "string" - }, - { "internalType": "uint32", "name": "index", "type": "uint32" } - ], - "stateMutability": "pure", - "type": "function", - "name": "deriveKey", - "outputs": [ - { - "internalType": "uint256", - "name": "privateKey", - "type": "uint256" - } - ] - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "newDifficulty", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "difficulty" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "pathToStateJson", - "type": "string" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "dumpState" - }, - { - "inputs": [ - { "internalType": "string", "name": "name", "type": "string" } - ], - "stateMutability": "view", - "type": "function", - "name": "envAddress", - "outputs": [ - { "internalType": "address", "name": "value", "type": "address" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "name", "type": "string" }, - { "internalType": "string", "name": "delim", "type": "string" } - ], - "stateMutability": "view", - "type": "function", - "name": "envAddress", - "outputs": [ - { - "internalType": "address[]", - "name": "value", - "type": "address[]" - } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "name", "type": "string" } - ], - "stateMutability": "view", - "type": "function", - "name": "envBool", - "outputs": [ - { "internalType": "bool", "name": "value", "type": "bool" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "name", "type": "string" }, - { "internalType": "string", "name": "delim", "type": "string" } - ], - "stateMutability": "view", - "type": "function", - "name": "envBool", - "outputs": [ - { "internalType": "bool[]", "name": "value", "type": "bool[]" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "name", "type": "string" } - ], - "stateMutability": "view", - "type": "function", - "name": "envBytes", - "outputs": [ - { "internalType": "bytes", "name": "value", "type": "bytes" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "name", "type": "string" }, - { "internalType": "string", "name": "delim", "type": "string" } - ], - "stateMutability": "view", - "type": "function", - "name": "envBytes", - "outputs": [ - { "internalType": "bytes[]", "name": "value", "type": "bytes[]" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "name", "type": "string" }, - { "internalType": "string", "name": "delim", "type": "string" } - ], - "stateMutability": "view", - "type": "function", - "name": "envBytes32", - "outputs": [ - { - "internalType": "bytes32[]", - "name": "value", - "type": "bytes32[]" - } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "name", "type": "string" } - ], - "stateMutability": "view", - "type": "function", - "name": "envBytes32", - "outputs": [ - { "internalType": "bytes32", "name": "value", "type": "bytes32" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "name", "type": "string" }, - { "internalType": "string", "name": "delim", "type": "string" } - ], - "stateMutability": "view", - "type": "function", - "name": "envInt", - "outputs": [ - { "internalType": "int256[]", "name": "value", "type": "int256[]" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "name", "type": "string" } - ], - "stateMutability": "view", - "type": "function", - "name": "envInt", - "outputs": [ - { "internalType": "int256", "name": "value", "type": "int256" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "name", "type": "string" }, - { "internalType": "string", "name": "delim", "type": "string" }, - { - "internalType": "bytes32[]", - "name": "defaultValue", - "type": "bytes32[]" - } - ], - "stateMutability": "view", - "type": "function", - "name": "envOr", - "outputs": [ - { - "internalType": "bytes32[]", - "name": "value", - "type": "bytes32[]" - } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "name", "type": "string" }, - { "internalType": "string", "name": "delim", "type": "string" }, - { - "internalType": "int256[]", - "name": "defaultValue", - "type": "int256[]" - } - ], - "stateMutability": "view", - "type": "function", - "name": "envOr", - "outputs": [ - { "internalType": "int256[]", "name": "value", "type": "int256[]" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "name", "type": "string" }, - { "internalType": "bool", "name": "defaultValue", "type": "bool" } - ], - "stateMutability": "view", - "type": "function", - "name": "envOr", - "outputs": [ - { "internalType": "bool", "name": "value", "type": "bool" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "name", "type": "string" }, - { - "internalType": "address", - "name": "defaultValue", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function", - "name": "envOr", - "outputs": [ - { "internalType": "address", "name": "value", "type": "address" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "name", "type": "string" }, - { - "internalType": "uint256", - "name": "defaultValue", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function", - "name": "envOr", - "outputs": [ - { "internalType": "uint256", "name": "value", "type": "uint256" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "name", "type": "string" }, - { "internalType": "string", "name": "delim", "type": "string" }, - { - "internalType": "bytes[]", - "name": "defaultValue", - "type": "bytes[]" - } - ], - "stateMutability": "view", - "type": "function", - "name": "envOr", - "outputs": [ - { "internalType": "bytes[]", "name": "value", "type": "bytes[]" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "name", "type": "string" }, - { "internalType": "string", "name": "delim", "type": "string" }, - { - "internalType": "uint256[]", - "name": "defaultValue", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function", - "name": "envOr", - "outputs": [ - { - "internalType": "uint256[]", - "name": "value", - "type": "uint256[]" - } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "name", "type": "string" }, - { "internalType": "string", "name": "delim", "type": "string" }, - { - "internalType": "string[]", - "name": "defaultValue", - "type": "string[]" - } - ], - "stateMutability": "view", - "type": "function", - "name": "envOr", - "outputs": [ - { "internalType": "string[]", "name": "value", "type": "string[]" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "name", "type": "string" }, - { "internalType": "bytes", "name": "defaultValue", "type": "bytes" } - ], - "stateMutability": "view", - "type": "function", - "name": "envOr", - "outputs": [ - { "internalType": "bytes", "name": "value", "type": "bytes" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "name", "type": "string" }, - { - "internalType": "bytes32", - "name": "defaultValue", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function", - "name": "envOr", - "outputs": [ - { "internalType": "bytes32", "name": "value", "type": "bytes32" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "name", "type": "string" }, - { - "internalType": "int256", - "name": "defaultValue", - "type": "int256" - } - ], - "stateMutability": "view", - "type": "function", - "name": "envOr", - "outputs": [ - { "internalType": "int256", "name": "value", "type": "int256" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "name", "type": "string" }, - { "internalType": "string", "name": "delim", "type": "string" }, - { - "internalType": "address[]", - "name": "defaultValue", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function", - "name": "envOr", - "outputs": [ - { - "internalType": "address[]", - "name": "value", - "type": "address[]" - } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "name", "type": "string" }, - { - "internalType": "string", - "name": "defaultValue", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function", - "name": "envOr", - "outputs": [ - { "internalType": "string", "name": "value", "type": "string" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "name", "type": "string" }, - { "internalType": "string", "name": "delim", "type": "string" }, - { - "internalType": "bool[]", - "name": "defaultValue", - "type": "bool[]" - } - ], - "stateMutability": "view", - "type": "function", - "name": "envOr", - "outputs": [ - { "internalType": "bool[]", "name": "value", "type": "bool[]" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "name", "type": "string" }, - { "internalType": "string", "name": "delim", "type": "string" } - ], - "stateMutability": "view", - "type": "function", - "name": "envString", - "outputs": [ - { "internalType": "string[]", "name": "value", "type": "string[]" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "name", "type": "string" } - ], - "stateMutability": "view", - "type": "function", - "name": "envString", - "outputs": [ - { "internalType": "string", "name": "value", "type": "string" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "name", "type": "string" } - ], - "stateMutability": "view", - "type": "function", - "name": "envUint", - "outputs": [ - { "internalType": "uint256", "name": "value", "type": "uint256" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "name", "type": "string" }, - { "internalType": "string", "name": "delim", "type": "string" } - ], - "stateMutability": "view", - "type": "function", - "name": "envUint", - "outputs": [ - { - "internalType": "uint256[]", - "name": "value", - "type": "uint256[]" - } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "target", "type": "address" }, - { - "internalType": "bytes", - "name": "newRuntimeBytecode", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "etch" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "fromBlock", - "type": "uint256" - }, - { "internalType": "uint256", "name": "toBlock", "type": "uint256" }, - { "internalType": "address", "name": "target", "type": "address" }, - { - "internalType": "bytes32[]", - "name": "topics", - "type": "bytes32[]" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "eth_getLogs", - "outputs": [ - { - "internalType": "struct VmSafe.EthGetLogs[]", - "name": "logs", - "type": "tuple[]", - "components": [ - { - "internalType": "address", - "name": "emitter", - "type": "address" - }, - { - "internalType": "bytes32[]", - "name": "topics", - "type": "bytes32[]" - }, - { "internalType": "bytes", "name": "data", "type": "bytes" }, - { - "internalType": "bytes32", - "name": "blockHash", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "blockNumber", - "type": "uint64" - }, - { - "internalType": "bytes32", - "name": "transactionHash", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "transactionIndex", - "type": "uint64" - }, - { - "internalType": "uint256", - "name": "logIndex", - "type": "uint256" - }, - { "internalType": "bool", "name": "removed", "type": "bool" } - ] - } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "path", "type": "string" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "exists", - "outputs": [ - { "internalType": "bool", "name": "result", "type": "bool" } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "callee", "type": "address" }, - { - "internalType": "uint256", - "name": "msgValue", - "type": "uint256" - }, - { "internalType": "uint64", "name": "gas", "type": "uint64" }, - { "internalType": "bytes", "name": "data", "type": "bytes" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "expectCall" - }, - { - "inputs": [ - { "internalType": "address", "name": "callee", "type": "address" }, - { - "internalType": "uint256", - "name": "msgValue", - "type": "uint256" - }, - { "internalType": "uint64", "name": "gas", "type": "uint64" }, - { "internalType": "bytes", "name": "data", "type": "bytes" }, - { "internalType": "uint64", "name": "count", "type": "uint64" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "expectCall" - }, - { - "inputs": [ - { "internalType": "address", "name": "callee", "type": "address" }, - { - "internalType": "uint256", - "name": "msgValue", - "type": "uint256" - }, - { "internalType": "bytes", "name": "data", "type": "bytes" }, - { "internalType": "uint64", "name": "count", "type": "uint64" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "expectCall" - }, - { - "inputs": [ - { "internalType": "address", "name": "callee", "type": "address" }, - { "internalType": "bytes", "name": "data", "type": "bytes" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "expectCall" - }, - { - "inputs": [ - { "internalType": "address", "name": "callee", "type": "address" }, - { "internalType": "bytes", "name": "data", "type": "bytes" }, - { "internalType": "uint64", "name": "count", "type": "uint64" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "expectCall" - }, - { - "inputs": [ - { "internalType": "address", "name": "callee", "type": "address" }, - { - "internalType": "uint256", - "name": "msgValue", - "type": "uint256" - }, - { "internalType": "bytes", "name": "data", "type": "bytes" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "expectCall" - }, - { - "inputs": [ - { "internalType": "address", "name": "callee", "type": "address" }, - { - "internalType": "uint256", - "name": "msgValue", - "type": "uint256" - }, - { "internalType": "uint64", "name": "minGas", "type": "uint64" }, - { "internalType": "bytes", "name": "data", "type": "bytes" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "expectCallMinGas" - }, - { - "inputs": [ - { "internalType": "address", "name": "callee", "type": "address" }, - { - "internalType": "uint256", - "name": "msgValue", - "type": "uint256" - }, - { "internalType": "uint64", "name": "minGas", "type": "uint64" }, - { "internalType": "bytes", "name": "data", "type": "bytes" }, - { "internalType": "uint64", "name": "count", "type": "uint64" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "expectCallMinGas" - }, - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "function", - "name": "expectEmit" - }, - { - "inputs": [ - { "internalType": "bool", "name": "checkTopic1", "type": "bool" }, - { "internalType": "bool", "name": "checkTopic2", "type": "bool" }, - { "internalType": "bool", "name": "checkTopic3", "type": "bool" }, - { "internalType": "bool", "name": "checkData", "type": "bool" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "expectEmit" - }, - { - "inputs": [ - { "internalType": "bool", "name": "checkTopic1", "type": "bool" }, - { "internalType": "bool", "name": "checkTopic2", "type": "bool" }, - { "internalType": "bool", "name": "checkTopic3", "type": "bool" }, - { "internalType": "bool", "name": "checkData", "type": "bool" }, - { "internalType": "address", "name": "emitter", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "expectEmit" - }, - { - "inputs": [ - { "internalType": "address", "name": "emitter", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "expectEmit" - }, - { - "inputs": [ - { "internalType": "bytes4", "name": "revertData", "type": "bytes4" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "expectRevert" - }, - { - "inputs": [ - { "internalType": "bytes", "name": "revertData", "type": "bytes" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "expectRevert" - }, - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "function", - "name": "expectRevert" - }, - { - "inputs": [ - { "internalType": "uint64", "name": "min", "type": "uint64" }, - { "internalType": "uint64", "name": "max", "type": "uint64" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "expectSafeMemory" - }, - { - "inputs": [ - { "internalType": "uint64", "name": "min", "type": "uint64" }, - { "internalType": "uint64", "name": "max", "type": "uint64" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "expectSafeMemoryCall" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "newBasefee", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "fee" - }, - { - "inputs": [ - { - "internalType": "string[]", - "name": "commandInput", - "type": "string[]" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "ffi", - "outputs": [ - { "internalType": "bytes", "name": "result", "type": "bytes" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "path", "type": "string" } - ], - "stateMutability": "view", - "type": "function", - "name": "fsMetadata", - "outputs": [ - { - "internalType": "struct VmSafe.FsMetadata", - "name": "metadata", - "type": "tuple", - "components": [ - { "internalType": "bool", "name": "isDir", "type": "bool" }, - { "internalType": "bool", "name": "isSymlink", "type": "bool" }, - { - "internalType": "uint256", - "name": "length", - "type": "uint256" - }, - { "internalType": "bool", "name": "readOnly", "type": "bool" }, - { - "internalType": "uint256", - "name": "modified", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "accessed", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "created", - "type": "uint256" - } - ] - } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "getBlockNumber", - "outputs": [ - { "internalType": "uint256", "name": "height", "type": "uint256" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "getBlockTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "timestamp", - "type": "uint256" - } - ] - }, - { - "inputs": [ - { - "internalType": "string", - "name": "artifactPath", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function", - "name": "getCode", - "outputs": [ - { - "internalType": "bytes", - "name": "creationBytecode", - "type": "bytes" - } - ] - }, - { - "inputs": [ - { - "internalType": "string", - "name": "artifactPath", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function", - "name": "getDeployedCode", - "outputs": [ - { - "internalType": "bytes", - "name": "runtimeBytecode", - "type": "bytes" - } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "getLabel", - "outputs": [ - { - "internalType": "string", - "name": "currentLabel", - "type": "string" - } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "target", "type": "address" }, - { - "internalType": "bytes32", - "name": "elementSlot", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "getMappingKeyAndParentOf", - "outputs": [ - { "internalType": "bool", "name": "found", "type": "bool" }, - { "internalType": "bytes32", "name": "key", "type": "bytes32" }, - { "internalType": "bytes32", "name": "parent", "type": "bytes32" } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "target", "type": "address" }, - { - "internalType": "bytes32", - "name": "mappingSlot", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "getMappingLength", - "outputs": [ - { "internalType": "uint256", "name": "length", "type": "uint256" } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "target", "type": "address" }, - { - "internalType": "bytes32", - "name": "mappingSlot", - "type": "bytes32" - }, - { "internalType": "uint256", "name": "idx", "type": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "getMappingSlotAt", - "outputs": [ - { "internalType": "bytes32", "name": "value", "type": "bytes32" } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "getNonce", - "outputs": [ - { "internalType": "uint64", "name": "nonce", "type": "uint64" } - ] - }, - { - "inputs": [ - { - "internalType": "struct VmSafe.Wallet", - "name": "wallet", - "type": "tuple", - "components": [ - { - "internalType": "address", - "name": "addr", - "type": "address" - }, - { - "internalType": "uint256", - "name": "publicKeyX", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "publicKeyY", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "privateKey", - "type": "uint256" - } - ] - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "getNonce", - "outputs": [ - { "internalType": "uint64", "name": "nonce", "type": "uint64" } - ] - }, - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "function", - "name": "getRecordedLogs", - "outputs": [ - { - "internalType": "struct VmSafe.Log[]", - "name": "logs", - "type": "tuple[]", - "components": [ - { - "internalType": "bytes32[]", - "name": "topics", - "type": "bytes32[]" - }, - { "internalType": "bytes", "name": "data", "type": "bytes" }, - { - "internalType": "address", - "name": "emitter", - "type": "address" - } - ] - } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "path", "type": "string" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "isDir", - "outputs": [ - { "internalType": "bool", "name": "result", "type": "bool" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "path", "type": "string" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "isFile", - "outputs": [ - { "internalType": "bool", "name": "result", "type": "bool" } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "isPersistent", - "outputs": [ - { "internalType": "bool", "name": "persistent", "type": "bool" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "json", "type": "string" }, - { "internalType": "string", "name": "key", "type": "string" } - ], - "stateMutability": "view", - "type": "function", - "name": "keyExists", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" }, - { "internalType": "string", "name": "newLabel", "type": "string" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "label" - }, - { - "inputs": [ - { "internalType": "address", "name": "target", "type": "address" }, - { "internalType": "bytes32", "name": "slot", "type": "bytes32" } - ], - "stateMutability": "view", - "type": "function", - "name": "load", - "outputs": [ - { "internalType": "bytes32", "name": "data", "type": "bytes32" } - ] - }, - { - "inputs": [ - { - "internalType": "string", - "name": "pathToAllocsJson", - "type": "string" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "loadAllocs" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "accounts", - "type": "address[]" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "makePersistent" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account0", - "type": "address" - }, - { "internalType": "address", "name": "account1", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "makePersistent" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "makePersistent" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account0", - "type": "address" - }, - { - "internalType": "address", - "name": "account1", - "type": "address" - }, - { "internalType": "address", "name": "account2", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "makePersistent" - }, - { - "inputs": [ - { "internalType": "address", "name": "callee", "type": "address" }, - { - "internalType": "uint256", - "name": "msgValue", - "type": "uint256" - }, - { "internalType": "bytes", "name": "data", "type": "bytes" }, - { "internalType": "bytes", "name": "returnData", "type": "bytes" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "mockCall" - }, - { - "inputs": [ - { "internalType": "address", "name": "callee", "type": "address" }, - { "internalType": "bytes", "name": "data", "type": "bytes" }, - { "internalType": "bytes", "name": "returnData", "type": "bytes" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "mockCall" - }, - { - "inputs": [ - { "internalType": "address", "name": "callee", "type": "address" }, - { - "internalType": "uint256", - "name": "msgValue", - "type": "uint256" - }, - { "internalType": "bytes", "name": "data", "type": "bytes" }, - { "internalType": "bytes", "name": "revertData", "type": "bytes" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "mockCallRevert" - }, - { - "inputs": [ - { "internalType": "address", "name": "callee", "type": "address" }, - { "internalType": "bytes", "name": "data", "type": "bytes" }, - { "internalType": "bytes", "name": "revertData", "type": "bytes" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "mockCallRevert" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "stringifiedValue", - "type": "string" - } - ], - "stateMutability": "pure", - "type": "function", - "name": "parseAddress", - "outputs": [ - { - "internalType": "address", - "name": "parsedValue", - "type": "address" - } - ] - }, - { - "inputs": [ - { - "internalType": "string", - "name": "stringifiedValue", - "type": "string" - } - ], - "stateMutability": "pure", - "type": "function", - "name": "parseBool", - "outputs": [ - { "internalType": "bool", "name": "parsedValue", "type": "bool" } - ] - }, - { - "inputs": [ - { - "internalType": "string", - "name": "stringifiedValue", - "type": "string" - } - ], - "stateMutability": "pure", - "type": "function", - "name": "parseBytes", - "outputs": [ - { "internalType": "bytes", "name": "parsedValue", "type": "bytes" } - ] - }, - { - "inputs": [ - { - "internalType": "string", - "name": "stringifiedValue", - "type": "string" - } - ], - "stateMutability": "pure", - "type": "function", - "name": "parseBytes32", - "outputs": [ - { - "internalType": "bytes32", - "name": "parsedValue", - "type": "bytes32" - } - ] - }, - { - "inputs": [ - { - "internalType": "string", - "name": "stringifiedValue", - "type": "string" - } - ], - "stateMutability": "pure", - "type": "function", - "name": "parseInt", - "outputs": [ - { - "internalType": "int256", - "name": "parsedValue", - "type": "int256" - } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "json", "type": "string" } - ], - "stateMutability": "pure", - "type": "function", - "name": "parseJson", - "outputs": [ - { - "internalType": "bytes", - "name": "abiEncodedData", - "type": "bytes" - } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "json", "type": "string" }, - { "internalType": "string", "name": "key", "type": "string" } - ], - "stateMutability": "pure", - "type": "function", - "name": "parseJson", - "outputs": [ - { - "internalType": "bytes", - "name": "abiEncodedData", - "type": "bytes" - } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "json", "type": "string" }, - { "internalType": "string", "name": "key", "type": "string" } - ], - "stateMutability": "pure", - "type": "function", - "name": "parseJsonAddress", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "json", "type": "string" }, - { "internalType": "string", "name": "key", "type": "string" } - ], - "stateMutability": "pure", - "type": "function", - "name": "parseJsonAddressArray", - "outputs": [ - { "internalType": "address[]", "name": "", "type": "address[]" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "json", "type": "string" }, - { "internalType": "string", "name": "key", "type": "string" } - ], - "stateMutability": "pure", - "type": "function", - "name": "parseJsonBool", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "string", "name": "json", "type": "string" }, - { "internalType": "string", "name": "key", "type": "string" } - ], - "stateMutability": "pure", - "type": "function", - "name": "parseJsonBoolArray", - "outputs": [ - { "internalType": "bool[]", "name": "", "type": "bool[]" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "json", "type": "string" }, - { "internalType": "string", "name": "key", "type": "string" } - ], - "stateMutability": "pure", - "type": "function", - "name": "parseJsonBytes", - "outputs": [{ "internalType": "bytes", "name": "", "type": "bytes" }] - }, - { - "inputs": [ - { "internalType": "string", "name": "json", "type": "string" }, - { "internalType": "string", "name": "key", "type": "string" } - ], - "stateMutability": "pure", - "type": "function", - "name": "parseJsonBytes32", - "outputs": [ - { "internalType": "bytes32", "name": "", "type": "bytes32" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "json", "type": "string" }, - { "internalType": "string", "name": "key", "type": "string" } - ], - "stateMutability": "pure", - "type": "function", - "name": "parseJsonBytes32Array", - "outputs": [ - { "internalType": "bytes32[]", "name": "", "type": "bytes32[]" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "json", "type": "string" }, - { "internalType": "string", "name": "key", "type": "string" } - ], - "stateMutability": "pure", - "type": "function", - "name": "parseJsonBytesArray", - "outputs": [ - { "internalType": "bytes[]", "name": "", "type": "bytes[]" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "json", "type": "string" }, - { "internalType": "string", "name": "key", "type": "string" } - ], - "stateMutability": "pure", - "type": "function", - "name": "parseJsonInt", - "outputs": [ - { "internalType": "int256", "name": "", "type": "int256" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "json", "type": "string" }, - { "internalType": "string", "name": "key", "type": "string" } - ], - "stateMutability": "pure", - "type": "function", - "name": "parseJsonIntArray", - "outputs": [ - { "internalType": "int256[]", "name": "", "type": "int256[]" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "json", "type": "string" }, - { "internalType": "string", "name": "key", "type": "string" } - ], - "stateMutability": "pure", - "type": "function", - "name": "parseJsonKeys", - "outputs": [ - { "internalType": "string[]", "name": "keys", "type": "string[]" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "json", "type": "string" }, - { "internalType": "string", "name": "key", "type": "string" } - ], - "stateMutability": "pure", - "type": "function", - "name": "parseJsonString", - "outputs": [ - { "internalType": "string", "name": "", "type": "string" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "json", "type": "string" }, - { "internalType": "string", "name": "key", "type": "string" } - ], - "stateMutability": "pure", - "type": "function", - "name": "parseJsonStringArray", - "outputs": [ - { "internalType": "string[]", "name": "", "type": "string[]" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "json", "type": "string" }, - { "internalType": "string", "name": "key", "type": "string" } - ], - "stateMutability": "pure", - "type": "function", - "name": "parseJsonUint", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "json", "type": "string" }, - { "internalType": "string", "name": "key", "type": "string" } - ], - "stateMutability": "pure", - "type": "function", - "name": "parseJsonUintArray", - "outputs": [ - { "internalType": "uint256[]", "name": "", "type": "uint256[]" } - ] - }, - { - "inputs": [ - { - "internalType": "string", - "name": "stringifiedValue", - "type": "string" - } - ], - "stateMutability": "pure", - "type": "function", - "name": "parseUint", - "outputs": [ - { - "internalType": "uint256", - "name": "parsedValue", - "type": "uint256" - } - ] - }, - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "function", - "name": "pauseGasMetering" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "msgSender", - "type": "address" - }, - { "internalType": "address", "name": "txOrigin", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "prank" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "msgSender", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "prank" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "newPrevrandao", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "prevrandao" - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "projectRoot", - "outputs": [ - { "internalType": "string", "name": "path", "type": "string" } - ] - }, - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "function", - "name": "readCallers", - "outputs": [ - { - "internalType": "enum VmSafe.CallerMode", - "name": "callerMode", - "type": "uint8" - }, - { - "internalType": "address", - "name": "msgSender", - "type": "address" - }, - { "internalType": "address", "name": "txOrigin", "type": "address" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "path", "type": "string" }, - { "internalType": "uint64", "name": "maxDepth", "type": "uint64" } - ], - "stateMutability": "view", - "type": "function", - "name": "readDir", - "outputs": [ - { - "internalType": "struct VmSafe.DirEntry[]", - "name": "entries", - "type": "tuple[]", - "components": [ - { - "internalType": "string", - "name": "errorMessage", - "type": "string" - }, - { "internalType": "string", "name": "path", "type": "string" }, - { "internalType": "uint64", "name": "depth", "type": "uint64" }, - { "internalType": "bool", "name": "isDir", "type": "bool" }, - { "internalType": "bool", "name": "isSymlink", "type": "bool" } - ] - } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "path", "type": "string" }, - { "internalType": "uint64", "name": "maxDepth", "type": "uint64" }, - { "internalType": "bool", "name": "followLinks", "type": "bool" } - ], - "stateMutability": "view", - "type": "function", - "name": "readDir", - "outputs": [ - { - "internalType": "struct VmSafe.DirEntry[]", - "name": "entries", - "type": "tuple[]", - "components": [ - { - "internalType": "string", - "name": "errorMessage", - "type": "string" - }, - { "internalType": "string", "name": "path", "type": "string" }, - { "internalType": "uint64", "name": "depth", "type": "uint64" }, - { "internalType": "bool", "name": "isDir", "type": "bool" }, - { "internalType": "bool", "name": "isSymlink", "type": "bool" } - ] - } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "path", "type": "string" } - ], - "stateMutability": "view", - "type": "function", - "name": "readDir", - "outputs": [ - { - "internalType": "struct VmSafe.DirEntry[]", - "name": "entries", - "type": "tuple[]", - "components": [ - { - "internalType": "string", - "name": "errorMessage", - "type": "string" - }, - { "internalType": "string", "name": "path", "type": "string" }, - { "internalType": "uint64", "name": "depth", "type": "uint64" }, - { "internalType": "bool", "name": "isDir", "type": "bool" }, - { "internalType": "bool", "name": "isSymlink", "type": "bool" } - ] - } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "path", "type": "string" } - ], - "stateMutability": "view", - "type": "function", - "name": "readFile", - "outputs": [ - { "internalType": "string", "name": "data", "type": "string" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "path", "type": "string" } - ], - "stateMutability": "view", - "type": "function", - "name": "readFileBinary", - "outputs": [ - { "internalType": "bytes", "name": "data", "type": "bytes" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "path", "type": "string" } - ], - "stateMutability": "view", - "type": "function", - "name": "readLine", - "outputs": [ - { "internalType": "string", "name": "line", "type": "string" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "linkPath", "type": "string" } - ], - "stateMutability": "view", - "type": "function", - "name": "readLink", - "outputs": [ - { "internalType": "string", "name": "targetPath", "type": "string" } - ] - }, - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "function", - "name": "record" - }, - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "function", - "name": "recordLogs" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "privateKey", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "rememberKey", - "outputs": [ - { "internalType": "address", "name": "keyAddr", "type": "address" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "path", "type": "string" }, - { "internalType": "bool", "name": "recursive", "type": "bool" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "removeDir" - }, - { - "inputs": [ - { "internalType": "string", "name": "path", "type": "string" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "removeFile" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "resetNonce" - }, - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "function", - "name": "resumeGasMetering" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "snapshotId", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "revertTo", - "outputs": [ - { "internalType": "bool", "name": "success", "type": "bool" } - ] - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "snapshotId", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "revertToAndDelete", - "outputs": [ - { "internalType": "bool", "name": "success", "type": "bool" } - ] - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "accounts", - "type": "address[]" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "revokePersistent" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "revokePersistent" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "newHeight", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "roll" - }, - { - "inputs": [ - { "internalType": "bytes32", "name": "txHash", "type": "bytes32" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "rollFork" - }, - { - "inputs": [ - { "internalType": "uint256", "name": "forkId", "type": "uint256" }, - { - "internalType": "uint256", - "name": "blockNumber", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "rollFork" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "blockNumber", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "rollFork" - }, - { - "inputs": [ - { "internalType": "uint256", "name": "forkId", "type": "uint256" }, - { "internalType": "bytes32", "name": "txHash", "type": "bytes32" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "rollFork" - }, - { - "inputs": [ - { "internalType": "string", "name": "method", "type": "string" }, - { "internalType": "string", "name": "params", "type": "string" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "rpc", - "outputs": [ - { "internalType": "bytes", "name": "data", "type": "bytes" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "rpcAlias", "type": "string" } - ], - "stateMutability": "view", - "type": "function", - "name": "rpcUrl", - "outputs": [ - { "internalType": "string", "name": "json", "type": "string" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "rpcUrlStructs", - "outputs": [ - { - "internalType": "struct VmSafe.Rpc[]", - "name": "urls", - "type": "tuple[]", - "components": [ - { "internalType": "string", "name": "key", "type": "string" }, - { "internalType": "string", "name": "url", "type": "string" } - ] - } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "rpcUrls", - "outputs": [ - { - "internalType": "string[2][]", - "name": "urls", - "type": "string[2][]" - } - ] - }, - { - "inputs": [ - { "internalType": "uint256", "name": "forkId", "type": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "selectFork" - }, - { - "inputs": [ - { "internalType": "string", "name": "objectKey", "type": "string" }, - { "internalType": "string", "name": "valueKey", "type": "string" }, - { - "internalType": "address[]", - "name": "values", - "type": "address[]" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "serializeAddress", - "outputs": [ - { "internalType": "string", "name": "json", "type": "string" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "objectKey", "type": "string" }, - { "internalType": "string", "name": "valueKey", "type": "string" }, - { "internalType": "address", "name": "value", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "serializeAddress", - "outputs": [ - { "internalType": "string", "name": "json", "type": "string" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "objectKey", "type": "string" }, - { "internalType": "string", "name": "valueKey", "type": "string" }, - { "internalType": "bool[]", "name": "values", "type": "bool[]" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "serializeBool", - "outputs": [ - { "internalType": "string", "name": "json", "type": "string" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "objectKey", "type": "string" }, - { "internalType": "string", "name": "valueKey", "type": "string" }, - { "internalType": "bool", "name": "value", "type": "bool" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "serializeBool", - "outputs": [ - { "internalType": "string", "name": "json", "type": "string" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "objectKey", "type": "string" }, - { "internalType": "string", "name": "valueKey", "type": "string" }, - { "internalType": "bytes[]", "name": "values", "type": "bytes[]" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "serializeBytes", - "outputs": [ - { "internalType": "string", "name": "json", "type": "string" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "objectKey", "type": "string" }, - { "internalType": "string", "name": "valueKey", "type": "string" }, - { "internalType": "bytes", "name": "value", "type": "bytes" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "serializeBytes", - "outputs": [ - { "internalType": "string", "name": "json", "type": "string" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "objectKey", "type": "string" }, - { "internalType": "string", "name": "valueKey", "type": "string" }, - { - "internalType": "bytes32[]", - "name": "values", - "type": "bytes32[]" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "serializeBytes32", - "outputs": [ - { "internalType": "string", "name": "json", "type": "string" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "objectKey", "type": "string" }, - { "internalType": "string", "name": "valueKey", "type": "string" }, - { "internalType": "bytes32", "name": "value", "type": "bytes32" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "serializeBytes32", - "outputs": [ - { "internalType": "string", "name": "json", "type": "string" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "objectKey", "type": "string" }, - { "internalType": "string", "name": "valueKey", "type": "string" }, - { "internalType": "int256", "name": "value", "type": "int256" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "serializeInt", - "outputs": [ - { "internalType": "string", "name": "json", "type": "string" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "objectKey", "type": "string" }, - { "internalType": "string", "name": "valueKey", "type": "string" }, - { "internalType": "int256[]", "name": "values", "type": "int256[]" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "serializeInt", - "outputs": [ - { "internalType": "string", "name": "json", "type": "string" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "objectKey", "type": "string" }, - { "internalType": "string", "name": "value", "type": "string" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "serializeJson", - "outputs": [ - { "internalType": "string", "name": "json", "type": "string" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "objectKey", "type": "string" }, - { "internalType": "string", "name": "valueKey", "type": "string" }, - { "internalType": "string[]", "name": "values", "type": "string[]" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "serializeString", - "outputs": [ - { "internalType": "string", "name": "json", "type": "string" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "objectKey", "type": "string" }, - { "internalType": "string", "name": "valueKey", "type": "string" }, - { "internalType": "string", "name": "value", "type": "string" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "serializeString", - "outputs": [ - { "internalType": "string", "name": "json", "type": "string" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "objectKey", "type": "string" }, - { "internalType": "string", "name": "valueKey", "type": "string" }, - { "internalType": "uint256", "name": "value", "type": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "serializeUint", - "outputs": [ - { "internalType": "string", "name": "json", "type": "string" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "objectKey", "type": "string" }, - { "internalType": "string", "name": "valueKey", "type": "string" }, - { - "internalType": "uint256[]", - "name": "values", - "type": "uint256[]" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "serializeUint", - "outputs": [ - { "internalType": "string", "name": "json", "type": "string" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "name", "type": "string" }, - { "internalType": "string", "name": "value", "type": "string" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setEnv" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" }, - { "internalType": "uint64", "name": "newNonce", "type": "uint64" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setNonce" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" }, - { "internalType": "uint64", "name": "newNonce", "type": "uint64" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setNonceUnsafe" - }, - { - "inputs": [ - { - "internalType": "struct VmSafe.Wallet", - "name": "wallet", - "type": "tuple", - "components": [ - { - "internalType": "address", - "name": "addr", - "type": "address" - }, - { - "internalType": "uint256", - "name": "publicKeyX", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "publicKeyY", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "privateKey", - "type": "uint256" - } - ] - }, - { "internalType": "bytes32", "name": "digest", "type": "bytes32" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "sign", - "outputs": [ - { "internalType": "uint8", "name": "v", "type": "uint8" }, - { "internalType": "bytes32", "name": "r", "type": "bytes32" }, - { "internalType": "bytes32", "name": "s", "type": "bytes32" } - ] - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "privateKey", - "type": "uint256" - }, - { "internalType": "bytes32", "name": "digest", "type": "bytes32" } - ], - "stateMutability": "pure", - "type": "function", - "name": "sign", - "outputs": [ - { "internalType": "uint8", "name": "v", "type": "uint8" }, - { "internalType": "bytes32", "name": "r", "type": "bytes32" }, - { "internalType": "bytes32", "name": "s", "type": "bytes32" } - ] - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "privateKey", - "type": "uint256" - }, - { "internalType": "bytes32", "name": "digest", "type": "bytes32" } - ], - "stateMutability": "pure", - "type": "function", - "name": "signP256", - "outputs": [ - { "internalType": "bytes32", "name": "r", "type": "bytes32" }, - { "internalType": "bytes32", "name": "s", "type": "bytes32" } - ] - }, - { - "inputs": [ - { "internalType": "bool", "name": "skipTest", "type": "bool" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "skip" - }, - { - "inputs": [ - { "internalType": "uint256", "name": "duration", "type": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "sleep" - }, - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "function", - "name": "snapshot", - "outputs": [ - { - "internalType": "uint256", - "name": "snapshotId", - "type": "uint256" - } - ] - }, - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "function", - "name": "startBroadcast" - }, - { - "inputs": [ - { "internalType": "address", "name": "signer", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "startBroadcast" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "privateKey", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "startBroadcast" - }, - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "function", - "name": "startMappingRecording" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "msgSender", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "startPrank" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "msgSender", - "type": "address" - }, - { "internalType": "address", "name": "txOrigin", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "startPrank" - }, - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "function", - "name": "startStateDiffRecording" - }, - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "function", - "name": "stopAndReturnStateDiff", - "outputs": [ - { - "internalType": "struct VmSafe.AccountAccess[]", - "name": "accountAccesses", - "type": "tuple[]", - "components": [ - { - "internalType": "struct VmSafe.ChainInfo", - "name": "chainInfo", - "type": "tuple", - "components": [ - { - "internalType": "uint256", - "name": "forkId", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "chainId", - "type": "uint256" - } - ] - }, - { - "internalType": "enum VmSafe.AccountAccessKind", - "name": "kind", - "type": "uint8" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "address", - "name": "accessor", - "type": "address" - }, - { - "internalType": "bool", - "name": "initialized", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "oldBalance", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "newBalance", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "deployedCode", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { "internalType": "bytes", "name": "data", "type": "bytes" }, - { "internalType": "bool", "name": "reverted", "type": "bool" }, - { - "internalType": "struct VmSafe.StorageAccess[]", - "name": "storageAccesses", - "type": "tuple[]", - "components": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "slot", - "type": "bytes32" - }, - { - "internalType": "bool", - "name": "isWrite", - "type": "bool" - }, - { - "internalType": "bytes32", - "name": "previousValue", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "newValue", - "type": "bytes32" - }, - { - "internalType": "bool", - "name": "reverted", - "type": "bool" - } - ] - } - ] - } - ] - }, - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "function", - "name": "stopBroadcast" - }, - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "function", - "name": "stopMappingRecording" - }, - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "function", - "name": "stopPrank" - }, - { - "inputs": [ - { "internalType": "address", "name": "target", "type": "address" }, - { "internalType": "bytes32", "name": "slot", "type": "bytes32" }, - { "internalType": "bytes32", "name": "value", "type": "bytes32" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "store" - }, - { - "inputs": [ - { "internalType": "string", "name": "data", "type": "string" } - ], - "stateMutability": "pure", - "type": "function", - "name": "toBase64", - "outputs": [ - { "internalType": "string", "name": "", "type": "string" } - ] - }, - { - "inputs": [ - { "internalType": "bytes", "name": "data", "type": "bytes" } - ], - "stateMutability": "pure", - "type": "function", - "name": "toBase64", - "outputs": [ - { "internalType": "string", "name": "", "type": "string" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "data", "type": "string" } - ], - "stateMutability": "pure", - "type": "function", - "name": "toBase64URL", - "outputs": [ - { "internalType": "string", "name": "", "type": "string" } - ] - }, - { - "inputs": [ - { "internalType": "bytes", "name": "data", "type": "bytes" } - ], - "stateMutability": "pure", - "type": "function", - "name": "toBase64URL", - "outputs": [ - { "internalType": "string", "name": "", "type": "string" } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "value", "type": "address" } - ], - "stateMutability": "pure", - "type": "function", - "name": "toString", - "outputs": [ - { - "internalType": "string", - "name": "stringifiedValue", - "type": "string" - } - ] - }, - { - "inputs": [ - { "internalType": "uint256", "name": "value", "type": "uint256" } - ], - "stateMutability": "pure", - "type": "function", - "name": "toString", - "outputs": [ - { - "internalType": "string", - "name": "stringifiedValue", - "type": "string" - } - ] - }, - { - "inputs": [ - { "internalType": "bytes", "name": "value", "type": "bytes" } - ], - "stateMutability": "pure", - "type": "function", - "name": "toString", - "outputs": [ - { - "internalType": "string", - "name": "stringifiedValue", - "type": "string" - } - ] - }, - { - "inputs": [ - { "internalType": "bool", "name": "value", "type": "bool" } - ], - "stateMutability": "pure", - "type": "function", - "name": "toString", - "outputs": [ - { - "internalType": "string", - "name": "stringifiedValue", - "type": "string" - } - ] - }, - { - "inputs": [ - { "internalType": "int256", "name": "value", "type": "int256" } - ], - "stateMutability": "pure", - "type": "function", - "name": "toString", - "outputs": [ - { - "internalType": "string", - "name": "stringifiedValue", - "type": "string" - } - ] - }, - { - "inputs": [ - { "internalType": "bytes32", "name": "value", "type": "bytes32" } - ], - "stateMutability": "pure", - "type": "function", - "name": "toString", - "outputs": [ - { - "internalType": "string", - "name": "stringifiedValue", - "type": "string" - } - ] - }, - { - "inputs": [ - { "internalType": "uint256", "name": "forkId", "type": "uint256" }, - { "internalType": "bytes32", "name": "txHash", "type": "bytes32" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "transact" - }, - { - "inputs": [ - { "internalType": "bytes32", "name": "txHash", "type": "bytes32" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "transact" - }, - { - "inputs": [ - { - "internalType": "string[]", - "name": "commandInput", - "type": "string[]" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "tryFfi", - "outputs": [ - { - "internalType": "struct VmSafe.FfiResult", - "name": "result", - "type": "tuple", - "components": [ - { - "internalType": "int32", - "name": "exitCode", - "type": "int32" - }, - { "internalType": "bytes", "name": "stdout", "type": "bytes" }, - { "internalType": "bytes", "name": "stderr", "type": "bytes" } - ] - } - ] - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "newGasPrice", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "txGasPrice" - }, - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "function", - "name": "unixTime", - "outputs": [ - { - "internalType": "uint256", - "name": "milliseconds", - "type": "uint256" - } - ] - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "newTimestamp", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "warp" - }, - { - "inputs": [ - { "internalType": "string", "name": "path", "type": "string" }, - { "internalType": "string", "name": "data", "type": "string" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "writeFile" - }, - { - "inputs": [ - { "internalType": "string", "name": "path", "type": "string" }, - { "internalType": "bytes", "name": "data", "type": "bytes" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "writeFileBinary" - }, - { - "inputs": [ - { "internalType": "string", "name": "json", "type": "string" }, - { "internalType": "string", "name": "path", "type": "string" }, - { "internalType": "string", "name": "valueKey", "type": "string" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "writeJson" - }, - { - "inputs": [ - { "internalType": "string", "name": "json", "type": "string" }, - { "internalType": "string", "name": "path", "type": "string" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "writeJson" - }, - { - "inputs": [ - { "internalType": "string", "name": "path", "type": "string" }, - { "internalType": "string", "name": "data", "type": "string" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "writeLine" - } - ], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "userdoc": { - "kind": "user", - "methods": { - "accesses(address)": { - "notice": "Gets all accessed reads and write slot from a `vm.record` session, for a given address." - }, - "activeFork()": { - "notice": "Returns the identifier of the currently active fork. Reverts if no fork is currently active." - }, - "addr(uint256)": { - "notice": "Gets the address for a given private key." - }, - "allowCheatcodes(address)": { - "notice": "In forking mode, explicitly grant the given address cheatcode access." - }, - "assume(bool)": { - "notice": "If the condition is false, discard this run's fuzz inputs and generate new ones." - }, - "breakpoint(string)": { - "notice": "Writes a breakpoint to jump to in the debugger." - }, - "breakpoint(string,bool)": { - "notice": "Writes a conditional breakpoint to jump to in the debugger." - }, - "broadcast()": { - "notice": "Using the address that calls the test contract, has the next call (at this call depth only) create a transaction that can later be signed and sent onchain." - }, - "broadcast(address)": { - "notice": "Has the next call (at this call depth only) create a transaction with the address provided as the sender that can later be signed and sent onchain." - }, - "broadcast(uint256)": { - "notice": "Has the next call (at this call depth only) create a transaction with the private key provided as the sender that can later be signed and sent onchain." - }, - "chainId(uint256)": { "notice": "Sets `block.chainid`." }, - "clearMockedCalls()": { "notice": "Clears all mocked calls." }, - "closeFile(string)": { - "notice": "Closes file for reading, resetting the offset and allowing to read it from beginning with readLine. `path` is relative to the project root." - }, - "coinbase(address)": { "notice": "Sets `block.coinbase`." }, - "computeCreate2Address(bytes32,bytes32)": { - "notice": "Compute the address of a contract created with CREATE2 using the default CREATE2 deployer." - }, - "computeCreate2Address(bytes32,bytes32,address)": { - "notice": "Compute the address of a contract created with CREATE2 using the given CREATE2 deployer." - }, - "computeCreateAddress(address,uint256)": { - "notice": "Compute the address a contract will be deployed at for a given deployer address and nonce." - }, - "copyFile(string,string)": { - "notice": "Copies the contents of one file to another. This function will **overwrite** the contents of `to`. On success, the total number of bytes copied is returned and it is equal to the length of the `to` file as reported by `metadata`. Both `from` and `to` are relative to the project root." - }, - "createDir(string,bool)": { - "notice": "Creates a new, empty directory at the provided path. This cheatcode will revert in the following situations, but is not limited to just these cases: - User lacks permissions to modify `path`. - A parent of the given path doesn't exist and `recursive` is false. - `path` already exists and `recursive` is false. `path` is relative to the project root." - }, - "createFork(string)": { - "notice": "Creates a new fork with the given endpoint and the _latest_ block and returns the identifier of the fork." - }, - "createFork(string,bytes32)": { - "notice": "Creates a new fork with the given endpoint and at the block the given transaction was mined in, replays all transaction mined in the block before the transaction, and returns the identifier of the fork." - }, - "createFork(string,uint256)": { - "notice": "Creates a new fork with the given endpoint and block and returns the identifier of the fork." - }, - "createSelectFork(string)": { - "notice": "Creates and also selects a new fork with the given endpoint and the latest block and returns the identifier of the fork." - }, - "createSelectFork(string,bytes32)": { - "notice": "Creates and also selects new fork with the given endpoint and at the block the given transaction was mined in, replays all transaction mined in the block before the transaction, returns the identifier of the fork." - }, - "createSelectFork(string,uint256)": { - "notice": "Creates and also selects a new fork with the given endpoint and block and returns the identifier of the fork." - }, - "createWallet(string)": { - "notice": "Derives a private key from the name, labels the account with that name, and returns the wallet." - }, - "createWallet(uint256)": { - "notice": "Generates a wallet from the private key and returns the wallet." - }, - "createWallet(uint256,string)": { - "notice": "Generates a wallet from the private key, labels the account with that name, and returns the wallet." - }, - "deal(address,uint256)": { "notice": "Sets an address' balance." }, - "deleteSnapshot(uint256)": { - "notice": "Removes the snapshot with the given ID created by `snapshot`. Takes the snapshot ID to delete. Returns `true` if the snapshot was successfully deleted. Returns `false` if the snapshot does not exist." - }, - "deleteSnapshots()": { - "notice": "Removes _all_ snapshots previously created by `snapshot`." - }, - "deriveKey(string,string,uint32)": { - "notice": "Derive a private key from a provided mnenomic string (or mnenomic file path) at `{derivationPath}{index}`." - }, - "deriveKey(string,string,uint32,string)": { - "notice": "Derive a private key from a provided mnenomic string (or mnenomic file path) in the specified language at `{derivationPath}{index}`." - }, - "deriveKey(string,uint32)": { - "notice": "Derive a private key from a provided mnenomic string (or mnenomic file path) at the derivation path `m/44'/60'/0'/0/{index}`." - }, - "deriveKey(string,uint32,string)": { - "notice": "Derive a private key from a provided mnenomic string (or mnenomic file path) in the specified language at the derivation path `m/44'/60'/0'/0/{index}`." - }, - "difficulty(uint256)": { - "notice": "Sets `block.difficulty`. Not available on EVM versions from Paris onwards. Use `prevrandao` instead. Reverts if used on unsupported EVM versions." - }, - "dumpState(string)": { - "notice": "Dump a genesis JSON file's `allocs` to disk." - }, - "envAddress(string)": { - "notice": "Gets the environment variable `name` and parses it as `address`. Reverts if the variable was not found or could not be parsed." - }, - "envAddress(string,string)": { - "notice": "Gets the environment variable `name` and parses it as an array of `address`, delimited by `delim`. Reverts if the variable was not found or could not be parsed." - }, - "envBool(string)": { - "notice": "Gets the environment variable `name` and parses it as `bool`. Reverts if the variable was not found or could not be parsed." - }, - "envBool(string,string)": { - "notice": "Gets the environment variable `name` and parses it as an array of `bool`, delimited by `delim`. Reverts if the variable was not found or could not be parsed." - }, - "envBytes(string)": { - "notice": "Gets the environment variable `name` and parses it as `bytes`. Reverts if the variable was not found or could not be parsed." - }, - "envBytes(string,string)": { - "notice": "Gets the environment variable `name` and parses it as an array of `bytes`, delimited by `delim`. Reverts if the variable was not found or could not be parsed." - }, - "envBytes32(string)": { - "notice": "Gets the environment variable `name` and parses it as `bytes32`. Reverts if the variable was not found or could not be parsed." - }, - "envBytes32(string,string)": { - "notice": "Gets the environment variable `name` and parses it as an array of `bytes32`, delimited by `delim`. Reverts if the variable was not found or could not be parsed." - }, - "envInt(string)": { - "notice": "Gets the environment variable `name` and parses it as `int256`. Reverts if the variable was not found or could not be parsed." - }, - "envInt(string,string)": { - "notice": "Gets the environment variable `name` and parses it as an array of `int256`, delimited by `delim`. Reverts if the variable was not found or could not be parsed." - }, - "envOr(string,address)": { - "notice": "Gets the environment variable `name` and parses it as `address`. Reverts if the variable could not be parsed. Returns `defaultValue` if the variable was not found." - }, - "envOr(string,bool)": { - "notice": "Gets the environment variable `name` and parses it as `bool`. Reverts if the variable could not be parsed. Returns `defaultValue` if the variable was not found." - }, - "envOr(string,bytes)": { - "notice": "Gets the environment variable `name` and parses it as `bytes`. Reverts if the variable could not be parsed. Returns `defaultValue` if the variable was not found." - }, - "envOr(string,bytes32)": { - "notice": "Gets the environment variable `name` and parses it as `bytes32`. Reverts if the variable could not be parsed. Returns `defaultValue` if the variable was not found." - }, - "envOr(string,int256)": { - "notice": "Gets the environment variable `name` and parses it as `int256`. Reverts if the variable could not be parsed. Returns `defaultValue` if the variable was not found." - }, - "envOr(string,string)": { - "notice": "Gets the environment variable `name` and parses it as `string`. Reverts if the variable could not be parsed. Returns `defaultValue` if the variable was not found." - }, - "envOr(string,string,address[])": { - "notice": "Gets the environment variable `name` and parses it as an array of `address`, delimited by `delim`. Reverts if the variable could not be parsed. Returns `defaultValue` if the variable was not found." - }, - "envOr(string,string,bool[])": { - "notice": "Gets the environment variable `name` and parses it as an array of `bool`, delimited by `delim`. Reverts if the variable could not be parsed. Returns `defaultValue` if the variable was not found." - }, - "envOr(string,string,bytes32[])": { - "notice": "Gets the environment variable `name` and parses it as an array of `bytes32`, delimited by `delim`. Reverts if the variable could not be parsed. Returns `defaultValue` if the variable was not found." - }, - "envOr(string,string,bytes[])": { - "notice": "Gets the environment variable `name` and parses it as an array of `bytes`, delimited by `delim`. Reverts if the variable could not be parsed. Returns `defaultValue` if the variable was not found." - }, - "envOr(string,string,int256[])": { - "notice": "Gets the environment variable `name` and parses it as an array of `int256`, delimited by `delim`. Reverts if the variable could not be parsed. Returns `defaultValue` if the variable was not found." - }, - "envOr(string,string,string[])": { - "notice": "Gets the environment variable `name` and parses it as an array of `string`, delimited by `delim`. Reverts if the variable could not be parsed. Returns `defaultValue` if the variable was not found." - }, - "envOr(string,string,uint256[])": { - "notice": "Gets the environment variable `name` and parses it as an array of `uint256`, delimited by `delim`. Reverts if the variable could not be parsed. Returns `defaultValue` if the variable was not found." - }, - "envOr(string,uint256)": { - "notice": "Gets the environment variable `name` and parses it as `uint256`. Reverts if the variable could not be parsed. Returns `defaultValue` if the variable was not found." - }, - "envString(string)": { - "notice": "Gets the environment variable `name` and parses it as `string`. Reverts if the variable was not found or could not be parsed." - }, - "envString(string,string)": { - "notice": "Gets the environment variable `name` and parses it as an array of `string`, delimited by `delim`. Reverts if the variable was not found or could not be parsed." - }, - "envUint(string)": { - "notice": "Gets the environment variable `name` and parses it as `uint256`. Reverts if the variable was not found or could not be parsed." - }, - "envUint(string,string)": { - "notice": "Gets the environment variable `name` and parses it as an array of `uint256`, delimited by `delim`. Reverts if the variable was not found or could not be parsed." - }, - "etch(address,bytes)": { "notice": "Sets an address' code." }, - "eth_getLogs(uint256,uint256,address,bytes32[])": { - "notice": "Gets all the logs according to specified filter." - }, - "exists(string)": { - "notice": "Returns true if the given path points to an existing entity, else returns false." - }, - "expectCall(address,bytes)": { - "notice": "Expects a call to an address with the specified calldata. Calldata can either be a strict or a partial match." - }, - "expectCall(address,bytes,uint64)": { - "notice": "Expects given number of calls to an address with the specified calldata." - }, - "expectCall(address,uint256,bytes)": { - "notice": "Expects a call to an address with the specified `msg.value` and calldata." - }, - "expectCall(address,uint256,bytes,uint64)": { - "notice": "Expects given number of calls to an address with the specified `msg.value` and calldata." - }, - "expectCall(address,uint256,uint64,bytes)": { - "notice": "Expect a call to an address with the specified `msg.value`, gas, and calldata." - }, - "expectCall(address,uint256,uint64,bytes,uint64)": { - "notice": "Expects given number of calls to an address with the specified `msg.value`, gas, and calldata." - }, - "expectCallMinGas(address,uint256,uint64,bytes)": { - "notice": "Expect a call to an address with the specified `msg.value` and calldata, and a *minimum* amount of gas." - }, - "expectCallMinGas(address,uint256,uint64,bytes,uint64)": { - "notice": "Expect given number of calls to an address with the specified `msg.value` and calldata, and a *minimum* amount of gas." - }, - "expectEmit()": { - "notice": "Prepare an expected log with all topic and data checks enabled. Call this function, then emit an event, then call a function. Internally after the call, we check if logs were emitted in the expected order with the expected topics and data." - }, - "expectEmit(address)": { - "notice": "Same as the previous method, but also checks supplied address against emitting contract." - }, - "expectEmit(bool,bool,bool,bool)": { - "notice": "Prepare an expected log with (bool checkTopic1, bool checkTopic2, bool checkTopic3, bool checkData.). Call this function, then emit an event, then call a function. Internally after the call, we check if logs were emitted in the expected order with the expected topics and data (as specified by the booleans)." - }, - "expectEmit(bool,bool,bool,bool,address)": { - "notice": "Same as the previous method, but also checks supplied address against emitting contract." - }, - "expectRevert()": { - "notice": "Expects an error on next call with any revert data." - }, - "expectRevert(bytes)": { - "notice": "Expects an error on next call that exactly matches the revert data." - }, - "expectRevert(bytes4)": { - "notice": "Expects an error on next call that starts with the revert data." - }, - "expectSafeMemory(uint64,uint64)": { - "notice": "Only allows memory writes to offsets [0x00, 0x60) ∪ [min, max) in the current subcontext. If any other memory is written to, the test will fail. Can be called multiple times to add more ranges to the set." - }, - "expectSafeMemoryCall(uint64,uint64)": { - "notice": "Only allows memory writes to offsets [0x00, 0x60) ∪ [min, max) in the next created subcontext. If any other memory is written to, the test will fail. Can be called multiple times to add more ranges to the set." - }, - "fee(uint256)": { "notice": "Sets `block.basefee`." }, - "ffi(string[])": { - "notice": "Performs a foreign function call via the terminal." - }, - "fsMetadata(string)": { - "notice": "Given a path, query the file system to get information about a file, directory, etc." - }, - "getBlockNumber()": { - "notice": "Gets the current `block.number`. You should use this instead of `block.number` if you use `vm.roll`, as `block.number` is assumed to be constant across a transaction, and as a result will get optimized out by the compiler. See https://github.com/foundry-rs/foundry/issues/6180" - }, - "getBlockTimestamp()": { - "notice": "Gets the current `block.timestamp`. You should use this instead of `block.timestamp` if you use `vm.warp`, as `block.timestamp` is assumed to be constant across a transaction, and as a result will get optimized out by the compiler. See https://github.com/foundry-rs/foundry/issues/6180" - }, - "getCode(string)": { - "notice": "Gets the creation bytecode from an artifact file. Takes in the relative path to the json file." - }, - "getDeployedCode(string)": { - "notice": "Gets the deployed bytecode from an artifact file. Takes in the relative path to the json file." - }, - "getLabel(address)": { - "notice": "Gets the label for the specified address." - }, - "getMappingKeyAndParentOf(address,bytes32)": { - "notice": "Gets the map key and parent of a mapping at a given slot, for a given address." - }, - "getMappingLength(address,bytes32)": { - "notice": "Gets the number of elements in the mapping at the given slot, for a given address." - }, - "getMappingSlotAt(address,bytes32,uint256)": { - "notice": "Gets the elements at index idx of the mapping at the given slot, for a given address. The index must be less than the length of the mapping (i.e. the number of keys in the mapping)." - }, - "getNonce((address,uint256,uint256,uint256))": { - "notice": "Get a `Wallet`'s nonce." - }, - "getNonce(address)": { "notice": "Gets the nonce of an account." }, - "getRecordedLogs()": { "notice": "Gets all the recorded logs." }, - "isDir(string)": { - "notice": "Returns true if the path exists on disk and is pointing at a directory, else returns false." - }, - "isFile(string)": { - "notice": "Returns true if the path exists on disk and is pointing at a regular file, else returns false." - }, - "isPersistent(address)": { - "notice": "Returns true if the account is marked as persistent." - }, - "keyExists(string,string)": { - "notice": "Checks if `key` exists in a JSON object." - }, - "label(address,string)": { - "notice": "Labels an address in call traces." - }, - "load(address,bytes32)": { - "notice": "Loads a storage slot from an address." - }, - "loadAllocs(string)": { - "notice": "Load a genesis JSON file's `allocs` into the in-memory revm state." - }, - "makePersistent(address)": { - "notice": "Marks that the account(s) should use persistent storage across fork swaps in a multifork setup Meaning, changes made to the state of this account will be kept when switching forks." - }, - "makePersistent(address,address)": { - "notice": "See `makePersistent(address)`." - }, - "makePersistent(address,address,address)": { - "notice": "See `makePersistent(address)`." - }, - "makePersistent(address[])": { - "notice": "See `makePersistent(address)`." - }, - "mockCall(address,bytes,bytes)": { - "notice": "Mocks a call to an address, returning specified data. Calldata can either be strict or a partial match, e.g. if you only pass a Solidity selector to the expected calldata, then the entire Solidity function will be mocked." - }, - "mockCall(address,uint256,bytes,bytes)": { - "notice": "Mocks a call to an address with a specific `msg.value`, returning specified data. Calldata match takes precedence over `msg.value` in case of ambiguity." - }, - "mockCallRevert(address,bytes,bytes)": { - "notice": "Reverts a call to an address with specified revert data." - }, - "mockCallRevert(address,uint256,bytes,bytes)": { - "notice": "Reverts a call to an address with a specific `msg.value`, with specified revert data." - }, - "parseAddress(string)": { - "notice": "Parses the given `string` into an `address`." - }, - "parseBool(string)": { - "notice": "Parses the given `string` into a `bool`." - }, - "parseBytes(string)": { - "notice": "Parses the given `string` into `bytes`." - }, - "parseBytes32(string)": { - "notice": "Parses the given `string` into a `bytes32`." - }, - "parseInt(string)": { - "notice": "Parses the given `string` into a `int256`." - }, - "parseJson(string)": { "notice": "ABI-encodes a JSON object." }, - "parseJson(string,string)": { - "notice": "ABI-encodes a JSON object at `key`." - }, - "parseJsonAddress(string,string)": { - "notice": "Parses a string of JSON data at `key` and coerces it to `address`." - }, - "parseJsonAddressArray(string,string)": { - "notice": "Parses a string of JSON data at `key` and coerces it to `address[]`." - }, - "parseJsonBool(string,string)": { - "notice": "Parses a string of JSON data at `key` and coerces it to `bool`." - }, - "parseJsonBoolArray(string,string)": { - "notice": "Parses a string of JSON data at `key` and coerces it to `bool[]`." - }, - "parseJsonBytes(string,string)": { - "notice": "Parses a string of JSON data at `key` and coerces it to `bytes`." - }, - "parseJsonBytes32(string,string)": { - "notice": "Parses a string of JSON data at `key` and coerces it to `bytes32`." - }, - "parseJsonBytes32Array(string,string)": { - "notice": "Parses a string of JSON data at `key` and coerces it to `bytes32[]`." - }, - "parseJsonBytesArray(string,string)": { - "notice": "Parses a string of JSON data at `key` and coerces it to `bytes[]`." - }, - "parseJsonInt(string,string)": { - "notice": "Parses a string of JSON data at `key` and coerces it to `int256`." - }, - "parseJsonIntArray(string,string)": { - "notice": "Parses a string of JSON data at `key` and coerces it to `int256[]`." - }, - "parseJsonKeys(string,string)": { - "notice": "Returns an array of all the keys in a JSON object." - }, - "parseJsonString(string,string)": { - "notice": "Parses a string of JSON data at `key` and coerces it to `string`." - }, - "parseJsonStringArray(string,string)": { - "notice": "Parses a string of JSON data at `key` and coerces it to `string[]`." - }, - "parseJsonUint(string,string)": { - "notice": "Parses a string of JSON data at `key` and coerces it to `uint256`." - }, - "parseJsonUintArray(string,string)": { - "notice": "Parses a string of JSON data at `key` and coerces it to `uint256[]`." - }, - "parseUint(string)": { - "notice": "Parses the given `string` into a `uint256`." - }, - "pauseGasMetering()": { - "notice": "Pauses gas metering (i.e. gas usage is not counted). Noop if already paused." - }, - "prank(address)": { - "notice": "Sets the *next* call's `msg.sender` to be the input address." - }, - "prank(address,address)": { - "notice": "Sets the *next* call's `msg.sender` to be the input address, and the `tx.origin` to be the second input." - }, - "prevrandao(bytes32)": { - "notice": "Sets `block.prevrandao`. Not available on EVM versions before Paris. Use `difficulty` instead. If used on unsupported EVM versions it will revert." - }, - "projectRoot()": { - "notice": "Get the path of the current project root." - }, - "readCallers()": { - "notice": "Reads the current `msg.sender` and `tx.origin` from state and reports if there is any active caller modification." - }, - "readDir(string)": { - "notice": "Reads the directory at the given path recursively, up to `maxDepth`. `maxDepth` defaults to 1, meaning only the direct children of the given directory will be returned. Follows symbolic links if `followLinks` is true." - }, - "readDir(string,uint64)": { "notice": "See `readDir(string)`." }, - "readDir(string,uint64,bool)": { "notice": "See `readDir(string)`." }, - "readFile(string)": { - "notice": "Reads the entire content of file to string. `path` is relative to the project root." - }, - "readFileBinary(string)": { - "notice": "Reads the entire content of file as binary. `path` is relative to the project root." - }, - "readLine(string)": { - "notice": "Reads next line of file to string." - }, - "readLink(string)": { - "notice": "Reads a symbolic link, returning the path that the link points to. This cheatcode will revert in the following situations, but is not limited to just these cases: - `path` is not a symbolic link. - `path` does not exist." - }, - "record()": { "notice": "Records all storage reads and writes." }, - "recordLogs()": { "notice": "Record all the transaction logs." }, - "rememberKey(uint256)": { - "notice": "Adds a private key to the local forge wallet and returns the address." - }, - "removeDir(string,bool)": { - "notice": "Removes a directory at the provided path. This cheatcode will revert in the following situations, but is not limited to just these cases: - `path` doesn't exist. - `path` isn't a directory. - User lacks permissions to modify `path`. - The directory is not empty and `recursive` is false. `path` is relative to the project root." - }, - "removeFile(string)": { - "notice": "Removes a file from the filesystem. This cheatcode will revert in the following situations, but is not limited to just these cases: - `path` points to a directory. - The file doesn't exist. - The user lacks permissions to remove the file. `path` is relative to the project root." - }, - "resetNonce(address)": { - "notice": "Resets the nonce of an account to 0 for EOAs and 1 for contract accounts." - }, - "resumeGasMetering()": { - "notice": "Resumes gas metering (i.e. gas usage is counted again). Noop if already on." - }, - "revertTo(uint256)": { - "notice": "Revert the state of the EVM to a previous snapshot Takes the snapshot ID to revert to. Returns `true` if the snapshot was successfully reverted. Returns `false` if the snapshot does not exist. **Note:** This does not automatically delete the snapshot. To delete the snapshot use `deleteSnapshot`." - }, - "revertToAndDelete(uint256)": { - "notice": "Revert the state of the EVM to a previous snapshot and automatically deletes the snapshots Takes the snapshot ID to revert to. Returns `true` if the snapshot was successfully reverted and deleted. Returns `false` if the snapshot does not exist." - }, - "revokePersistent(address)": { - "notice": "Revokes persistent status from the address, previously added via `makePersistent`." - }, - "revokePersistent(address[])": { - "notice": "See `revokePersistent(address)`." - }, - "roll(uint256)": { "notice": "Sets `block.height`." }, - "rollFork(bytes32)": { - "notice": "Updates the currently active fork to given transaction. This will `rollFork` with the number of the block the transaction was mined in and replays all transaction mined before it in the block." - }, - "rollFork(uint256)": { - "notice": "Updates the currently active fork to given block number This is similar to `roll` but for the currently active fork." - }, - "rollFork(uint256,bytes32)": { - "notice": "Updates the given fork to block number of the given transaction and replays all transaction mined before it in the block." - }, - "rollFork(uint256,uint256)": { - "notice": "Updates the given fork to given block number." - }, - "rpc(string,string)": { - "notice": "Performs an Ethereum JSON-RPC request to the current fork URL." - }, - "rpcUrl(string)": { - "notice": "Returns the RPC url for the given alias." - }, - "rpcUrlStructs()": { - "notice": "Returns all rpc urls and their aliases as structs." - }, - "rpcUrls()": { - "notice": "Returns all rpc urls and their aliases `[alias, url][]`." - }, - "selectFork(uint256)": { - "notice": "Takes a fork identifier created by `createFork` and sets the corresponding forked state as active." - }, - "serializeAddress(string,string,address)": { - "notice": "See `serializeJson`." - }, - "serializeAddress(string,string,address[])": { - "notice": "See `serializeJson`." - }, - "serializeBool(string,string,bool)": { - "notice": "See `serializeJson`." - }, - "serializeBool(string,string,bool[])": { - "notice": "See `serializeJson`." - }, - "serializeBytes(string,string,bytes)": { - "notice": "See `serializeJson`." - }, - "serializeBytes(string,string,bytes[])": { - "notice": "See `serializeJson`." - }, - "serializeBytes32(string,string,bytes32)": { - "notice": "See `serializeJson`." - }, - "serializeBytes32(string,string,bytes32[])": { - "notice": "See `serializeJson`." - }, - "serializeInt(string,string,int256)": { - "notice": "See `serializeJson`." - }, - "serializeInt(string,string,int256[])": { - "notice": "See `serializeJson`." - }, - "serializeJson(string,string)": { - "notice": "Serializes a key and value to a JSON object stored in-memory that can be later written to a file. Returns the stringified version of the specific JSON file up to that moment." - }, - "serializeString(string,string,string)": { - "notice": "See `serializeJson`." - }, - "serializeString(string,string,string[])": { - "notice": "See `serializeJson`." - }, - "serializeUint(string,string,uint256)": { - "notice": "See `serializeJson`." - }, - "serializeUint(string,string,uint256[])": { - "notice": "See `serializeJson`." - }, - "setEnv(string,string)": { "notice": "Sets environment variables." }, - "setNonce(address,uint64)": { - "notice": "Sets the nonce of an account. Must be higher than the current nonce of the account." - }, - "setNonceUnsafe(address,uint64)": { - "notice": "Sets the nonce of an account to an arbitrary value." - }, - "sign((address,uint256,uint256,uint256),bytes32)": { - "notice": "Signs data with a `Wallet`." - }, - "sign(uint256,bytes32)": { - "notice": "Signs `digest` with `privateKey` using the secp256k1 curve." - }, - "signP256(uint256,bytes32)": { - "notice": "Signs `digest` with `privateKey` using the secp256r1 curve." - }, - "skip(bool)": { - "notice": "Marks a test as skipped. Must be called at the top of the test." - }, - "sleep(uint256)": { - "notice": "Suspends execution of the main thread for `duration` milliseconds." - }, - "snapshot()": { - "notice": "Snapshot the current state of the evm. Returns the ID of the snapshot that was created. To revert a snapshot use `revertTo`." - }, - "startBroadcast()": { - "notice": "Using the address that calls the test contract, has all subsequent calls (at this call depth only) create transactions that can later be signed and sent onchain." - }, - "startBroadcast(address)": { - "notice": "Has all subsequent calls (at this call depth only) create transactions with the address provided that can later be signed and sent onchain." - }, - "startBroadcast(uint256)": { - "notice": "Has all subsequent calls (at this call depth only) create transactions with the private key provided that can later be signed and sent onchain." - }, - "startMappingRecording()": { - "notice": "Starts recording all map SSTOREs for later retrieval." - }, - "startPrank(address)": { - "notice": "Sets all subsequent calls' `msg.sender` to be the input address until `stopPrank` is called." - }, - "startPrank(address,address)": { - "notice": "Sets all subsequent calls' `msg.sender` to be the input address until `stopPrank` is called, and the `tx.origin` to be the second input." - }, - "startStateDiffRecording()": { - "notice": "Record all account accesses as part of CREATE, CALL or SELFDESTRUCT opcodes in order, along with the context of the calls" - }, - "stopAndReturnStateDiff()": { - "notice": "Returns an ordered array of all account accesses from a `vm.startStateDiffRecording` session." - }, - "stopBroadcast()": { - "notice": "Stops collecting onchain transactions." - }, - "stopMappingRecording()": { - "notice": "Stops recording all map SSTOREs for later retrieval and clears the recorded data." - }, - "stopPrank()": { - "notice": "Resets subsequent calls' `msg.sender` to be `address(this)`." - }, - "store(address,bytes32,bytes32)": { - "notice": "Stores a value to an address' storage slot." - }, - "toBase64(bytes)": { - "notice": "Encodes a `bytes` value to a base64 string." - }, - "toBase64(string)": { - "notice": "Encodes a `string` value to a base64 string." - }, - "toBase64URL(bytes)": { - "notice": "Encodes a `bytes` value to a base64url string." - }, - "toBase64URL(string)": { - "notice": "Encodes a `string` value to a base64url string." - }, - "toString(address)": { - "notice": "Converts the given value to a `string`." - }, - "toString(bool)": { - "notice": "Converts the given value to a `string`." - }, - "toString(bytes)": { - "notice": "Converts the given value to a `string`." - }, - "toString(bytes32)": { - "notice": "Converts the given value to a `string`." - }, - "toString(int256)": { - "notice": "Converts the given value to a `string`." - }, - "toString(uint256)": { - "notice": "Converts the given value to a `string`." - }, - "transact(bytes32)": { - "notice": "Fetches the given transaction from the active fork and executes it on the current state." - }, - "transact(uint256,bytes32)": { - "notice": "Fetches the given transaction from the given fork and executes it on the current state." - }, - "tryFfi(string[])": { - "notice": "Performs a foreign function call via terminal and returns the exit code, stdout, and stderr." - }, - "txGasPrice(uint256)": { "notice": "Sets `tx.gasprice`." }, - "unixTime()": { - "notice": "Returns the time since unix epoch in milliseconds." - }, - "warp(uint256)": { "notice": "Sets `block.timestamp`." }, - "writeFile(string,string)": { - "notice": "Writes data to file, creating a file if it does not exist, and entirely replacing its contents if it does. `path` is relative to the project root." - }, - "writeFileBinary(string,bytes)": { - "notice": "Writes binary data to a file, creating a file if it does not exist, and entirely replacing its contents if it does. `path` is relative to the project root." - }, - "writeJson(string,string)": { - "notice": "Write a serialized JSON object to a file. If the file exists, it will be overwritten." - }, - "writeJson(string,string,string)": { - "notice": "Write a serialized JSON object to an **existing** JSON file, replacing a value with key = This is useful to replace a specific value of a JSON file, without having to parse the entire thing." - }, - "writeLine(string,string)": { - "notice": "Writes line to file, creating a file if it does not exist. `path` is relative to the project root." - } - }, - "version": 1 - } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Vm.sol": "Vm" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Vm.sol": { - "keccak256": "0x87ba9f3edc254e529db9e3129c954391adcc7fc8574203767979d8d2f1e724b9", - "urls": [ - "bzz-raw://4d16c08d80d9f2869deb6350642cf5af624d21fce6b3b023abbcdedc62e195fe", - "dweb:/ipfs/QmURpnnFECPKt3i7P7jQRZpr4ZBXjRGcZ9KzcbKzsgYR2W" - ], - "license": "MIT OR Apache-2.0" - } - }, - "version": 1 - }, - "id": 98 -} diff --git a/examples/oft-movement/out/Vm.sol/VmSafe.json b/examples/oft-movement/out/Vm.sol/VmSafe.json deleted file mode 100644 index 923c23164..000000000 --- a/examples/oft-movement/out/Vm.sol/VmSafe.json +++ /dev/null @@ -1,5169 +0,0 @@ -{ - "abi": [ - { - "type": "function", - "name": "accesses", - "inputs": [ - { "name": "target", "type": "address", "internalType": "address" } - ], - "outputs": [ - { - "name": "readSlots", - "type": "bytes32[]", - "internalType": "bytes32[]" - }, - { - "name": "writeSlots", - "type": "bytes32[]", - "internalType": "bytes32[]" - } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "addr", - "inputs": [ - { "name": "privateKey", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [ - { "name": "keyAddr", "type": "address", "internalType": "address" } - ], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "assume", - "inputs": [ - { "name": "condition", "type": "bool", "internalType": "bool" } - ], - "outputs": [], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "breakpoint", - "inputs": [ - { "name": "char", "type": "string", "internalType": "string" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "breakpoint", - "inputs": [ - { "name": "char", "type": "string", "internalType": "string" }, - { "name": "value", "type": "bool", "internalType": "bool" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "broadcast", - "inputs": [], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "broadcast", - "inputs": [ - { "name": "signer", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "broadcast", - "inputs": [ - { "name": "privateKey", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "closeFile", - "inputs": [ - { "name": "path", "type": "string", "internalType": "string" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "computeCreate2Address", - "inputs": [ - { "name": "salt", "type": "bytes32", "internalType": "bytes32" }, - { "name": "initCodeHash", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [{ "name": "", "type": "address", "internalType": "address" }], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "computeCreate2Address", - "inputs": [ - { "name": "salt", "type": "bytes32", "internalType": "bytes32" }, - { - "name": "initCodeHash", - "type": "bytes32", - "internalType": "bytes32" - }, - { "name": "deployer", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "", "type": "address", "internalType": "address" }], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "computeCreateAddress", - "inputs": [ - { "name": "deployer", "type": "address", "internalType": "address" }, - { "name": "nonce", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [{ "name": "", "type": "address", "internalType": "address" }], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "copyFile", - "inputs": [ - { "name": "from", "type": "string", "internalType": "string" }, - { "name": "to", "type": "string", "internalType": "string" } - ], - "outputs": [ - { "name": "copied", "type": "uint64", "internalType": "uint64" } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "createDir", - "inputs": [ - { "name": "path", "type": "string", "internalType": "string" }, - { "name": "recursive", "type": "bool", "internalType": "bool" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "createWallet", - "inputs": [ - { "name": "walletLabel", "type": "string", "internalType": "string" } - ], - "outputs": [ - { - "name": "wallet", - "type": "tuple", - "internalType": "struct VmSafe.Wallet", - "components": [ - { "name": "addr", "type": "address", "internalType": "address" }, - { - "name": "publicKeyX", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "publicKeyY", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "privateKey", - "type": "uint256", - "internalType": "uint256" - } - ] - } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "createWallet", - "inputs": [ - { "name": "privateKey", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [ - { - "name": "wallet", - "type": "tuple", - "internalType": "struct VmSafe.Wallet", - "components": [ - { "name": "addr", "type": "address", "internalType": "address" }, - { - "name": "publicKeyX", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "publicKeyY", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "privateKey", - "type": "uint256", - "internalType": "uint256" - } - ] - } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "createWallet", - "inputs": [ - { "name": "privateKey", "type": "uint256", "internalType": "uint256" }, - { "name": "walletLabel", "type": "string", "internalType": "string" } - ], - "outputs": [ - { - "name": "wallet", - "type": "tuple", - "internalType": "struct VmSafe.Wallet", - "components": [ - { "name": "addr", "type": "address", "internalType": "address" }, - { - "name": "publicKeyX", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "publicKeyY", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "privateKey", - "type": "uint256", - "internalType": "uint256" - } - ] - } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "deriveKey", - "inputs": [ - { "name": "mnemonic", "type": "string", "internalType": "string" }, - { - "name": "derivationPath", - "type": "string", - "internalType": "string" - }, - { "name": "index", "type": "uint32", "internalType": "uint32" }, - { "name": "language", "type": "string", "internalType": "string" } - ], - "outputs": [ - { "name": "privateKey", "type": "uint256", "internalType": "uint256" } - ], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "deriveKey", - "inputs": [ - { "name": "mnemonic", "type": "string", "internalType": "string" }, - { "name": "index", "type": "uint32", "internalType": "uint32" }, - { "name": "language", "type": "string", "internalType": "string" } - ], - "outputs": [ - { "name": "privateKey", "type": "uint256", "internalType": "uint256" } - ], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "deriveKey", - "inputs": [ - { "name": "mnemonic", "type": "string", "internalType": "string" }, - { "name": "index", "type": "uint32", "internalType": "uint32" } - ], - "outputs": [ - { "name": "privateKey", "type": "uint256", "internalType": "uint256" } - ], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "deriveKey", - "inputs": [ - { "name": "mnemonic", "type": "string", "internalType": "string" }, - { - "name": "derivationPath", - "type": "string", - "internalType": "string" - }, - { "name": "index", "type": "uint32", "internalType": "uint32" } - ], - "outputs": [ - { "name": "privateKey", "type": "uint256", "internalType": "uint256" } - ], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "envAddress", - "inputs": [ - { "name": "name", "type": "string", "internalType": "string" } - ], - "outputs": [ - { "name": "value", "type": "address", "internalType": "address" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "envAddress", - "inputs": [ - { "name": "name", "type": "string", "internalType": "string" }, - { "name": "delim", "type": "string", "internalType": "string" } - ], - "outputs": [ - { "name": "value", "type": "address[]", "internalType": "address[]" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "envBool", - "inputs": [ - { "name": "name", "type": "string", "internalType": "string" } - ], - "outputs": [{ "name": "value", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "envBool", - "inputs": [ - { "name": "name", "type": "string", "internalType": "string" }, - { "name": "delim", "type": "string", "internalType": "string" } - ], - "outputs": [ - { "name": "value", "type": "bool[]", "internalType": "bool[]" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "envBytes", - "inputs": [ - { "name": "name", "type": "string", "internalType": "string" } - ], - "outputs": [ - { "name": "value", "type": "bytes", "internalType": "bytes" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "envBytes", - "inputs": [ - { "name": "name", "type": "string", "internalType": "string" }, - { "name": "delim", "type": "string", "internalType": "string" } - ], - "outputs": [ - { "name": "value", "type": "bytes[]", "internalType": "bytes[]" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "envBytes32", - "inputs": [ - { "name": "name", "type": "string", "internalType": "string" }, - { "name": "delim", "type": "string", "internalType": "string" } - ], - "outputs": [ - { "name": "value", "type": "bytes32[]", "internalType": "bytes32[]" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "envBytes32", - "inputs": [ - { "name": "name", "type": "string", "internalType": "string" } - ], - "outputs": [ - { "name": "value", "type": "bytes32", "internalType": "bytes32" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "envInt", - "inputs": [ - { "name": "name", "type": "string", "internalType": "string" }, - { "name": "delim", "type": "string", "internalType": "string" } - ], - "outputs": [ - { "name": "value", "type": "int256[]", "internalType": "int256[]" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "envInt", - "inputs": [ - { "name": "name", "type": "string", "internalType": "string" } - ], - "outputs": [ - { "name": "value", "type": "int256", "internalType": "int256" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "envOr", - "inputs": [ - { "name": "name", "type": "string", "internalType": "string" }, - { "name": "delim", "type": "string", "internalType": "string" }, - { - "name": "defaultValue", - "type": "bytes32[]", - "internalType": "bytes32[]" - } - ], - "outputs": [ - { "name": "value", "type": "bytes32[]", "internalType": "bytes32[]" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "envOr", - "inputs": [ - { "name": "name", "type": "string", "internalType": "string" }, - { "name": "delim", "type": "string", "internalType": "string" }, - { - "name": "defaultValue", - "type": "int256[]", - "internalType": "int256[]" - } - ], - "outputs": [ - { "name": "value", "type": "int256[]", "internalType": "int256[]" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "envOr", - "inputs": [ - { "name": "name", "type": "string", "internalType": "string" }, - { "name": "defaultValue", "type": "bool", "internalType": "bool" } - ], - "outputs": [{ "name": "value", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "envOr", - "inputs": [ - { "name": "name", "type": "string", "internalType": "string" }, - { "name": "defaultValue", "type": "address", "internalType": "address" } - ], - "outputs": [ - { "name": "value", "type": "address", "internalType": "address" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "envOr", - "inputs": [ - { "name": "name", "type": "string", "internalType": "string" }, - { "name": "defaultValue", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [ - { "name": "value", "type": "uint256", "internalType": "uint256" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "envOr", - "inputs": [ - { "name": "name", "type": "string", "internalType": "string" }, - { "name": "delim", "type": "string", "internalType": "string" }, - { "name": "defaultValue", "type": "bytes[]", "internalType": "bytes[]" } - ], - "outputs": [ - { "name": "value", "type": "bytes[]", "internalType": "bytes[]" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "envOr", - "inputs": [ - { "name": "name", "type": "string", "internalType": "string" }, - { "name": "delim", "type": "string", "internalType": "string" }, - { - "name": "defaultValue", - "type": "uint256[]", - "internalType": "uint256[]" - } - ], - "outputs": [ - { "name": "value", "type": "uint256[]", "internalType": "uint256[]" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "envOr", - "inputs": [ - { "name": "name", "type": "string", "internalType": "string" }, - { "name": "delim", "type": "string", "internalType": "string" }, - { - "name": "defaultValue", - "type": "string[]", - "internalType": "string[]" - } - ], - "outputs": [ - { "name": "value", "type": "string[]", "internalType": "string[]" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "envOr", - "inputs": [ - { "name": "name", "type": "string", "internalType": "string" }, - { "name": "defaultValue", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [ - { "name": "value", "type": "bytes", "internalType": "bytes" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "envOr", - "inputs": [ - { "name": "name", "type": "string", "internalType": "string" }, - { "name": "defaultValue", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [ - { "name": "value", "type": "bytes32", "internalType": "bytes32" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "envOr", - "inputs": [ - { "name": "name", "type": "string", "internalType": "string" }, - { "name": "defaultValue", "type": "int256", "internalType": "int256" } - ], - "outputs": [ - { "name": "value", "type": "int256", "internalType": "int256" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "envOr", - "inputs": [ - { "name": "name", "type": "string", "internalType": "string" }, - { "name": "delim", "type": "string", "internalType": "string" }, - { - "name": "defaultValue", - "type": "address[]", - "internalType": "address[]" - } - ], - "outputs": [ - { "name": "value", "type": "address[]", "internalType": "address[]" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "envOr", - "inputs": [ - { "name": "name", "type": "string", "internalType": "string" }, - { "name": "defaultValue", "type": "string", "internalType": "string" } - ], - "outputs": [ - { "name": "value", "type": "string", "internalType": "string" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "envOr", - "inputs": [ - { "name": "name", "type": "string", "internalType": "string" }, - { "name": "delim", "type": "string", "internalType": "string" }, - { "name": "defaultValue", "type": "bool[]", "internalType": "bool[]" } - ], - "outputs": [ - { "name": "value", "type": "bool[]", "internalType": "bool[]" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "envString", - "inputs": [ - { "name": "name", "type": "string", "internalType": "string" }, - { "name": "delim", "type": "string", "internalType": "string" } - ], - "outputs": [ - { "name": "value", "type": "string[]", "internalType": "string[]" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "envString", - "inputs": [ - { "name": "name", "type": "string", "internalType": "string" } - ], - "outputs": [ - { "name": "value", "type": "string", "internalType": "string" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "envUint", - "inputs": [ - { "name": "name", "type": "string", "internalType": "string" } - ], - "outputs": [ - { "name": "value", "type": "uint256", "internalType": "uint256" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "envUint", - "inputs": [ - { "name": "name", "type": "string", "internalType": "string" }, - { "name": "delim", "type": "string", "internalType": "string" } - ], - "outputs": [ - { "name": "value", "type": "uint256[]", "internalType": "uint256[]" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "eth_getLogs", - "inputs": [ - { "name": "fromBlock", "type": "uint256", "internalType": "uint256" }, - { "name": "toBlock", "type": "uint256", "internalType": "uint256" }, - { "name": "target", "type": "address", "internalType": "address" }, - { "name": "topics", "type": "bytes32[]", "internalType": "bytes32[]" } - ], - "outputs": [ - { - "name": "logs", - "type": "tuple[]", - "internalType": "struct VmSafe.EthGetLogs[]", - "components": [ - { "name": "emitter", "type": "address", "internalType": "address" }, - { - "name": "topics", - "type": "bytes32[]", - "internalType": "bytes32[]" - }, - { "name": "data", "type": "bytes", "internalType": "bytes" }, - { - "name": "blockHash", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "blockNumber", - "type": "uint64", - "internalType": "uint64" - }, - { - "name": "transactionHash", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "transactionIndex", - "type": "uint64", - "internalType": "uint64" - }, - { - "name": "logIndex", - "type": "uint256", - "internalType": "uint256" - }, - { "name": "removed", "type": "bool", "internalType": "bool" } - ] - } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "exists", - "inputs": [ - { "name": "path", "type": "string", "internalType": "string" } - ], - "outputs": [{ "name": "result", "type": "bool", "internalType": "bool" }], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "ffi", - "inputs": [ - { - "name": "commandInput", - "type": "string[]", - "internalType": "string[]" - } - ], - "outputs": [ - { "name": "result", "type": "bytes", "internalType": "bytes" } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "fsMetadata", - "inputs": [ - { "name": "path", "type": "string", "internalType": "string" } - ], - "outputs": [ - { - "name": "metadata", - "type": "tuple", - "internalType": "struct VmSafe.FsMetadata", - "components": [ - { "name": "isDir", "type": "bool", "internalType": "bool" }, - { "name": "isSymlink", "type": "bool", "internalType": "bool" }, - { "name": "length", "type": "uint256", "internalType": "uint256" }, - { "name": "readOnly", "type": "bool", "internalType": "bool" }, - { - "name": "modified", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "accessed", - "type": "uint256", - "internalType": "uint256" - }, - { "name": "created", "type": "uint256", "internalType": "uint256" } - ] - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getBlockNumber", - "inputs": [], - "outputs": [ - { "name": "height", "type": "uint256", "internalType": "uint256" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getBlockTimestamp", - "inputs": [], - "outputs": [ - { "name": "timestamp", "type": "uint256", "internalType": "uint256" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getCode", - "inputs": [ - { "name": "artifactPath", "type": "string", "internalType": "string" } - ], - "outputs": [ - { "name": "creationBytecode", "type": "bytes", "internalType": "bytes" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getDeployedCode", - "inputs": [ - { "name": "artifactPath", "type": "string", "internalType": "string" } - ], - "outputs": [ - { "name": "runtimeBytecode", "type": "bytes", "internalType": "bytes" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getLabel", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [ - { "name": "currentLabel", "type": "string", "internalType": "string" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getMappingKeyAndParentOf", - "inputs": [ - { "name": "target", "type": "address", "internalType": "address" }, - { "name": "elementSlot", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [ - { "name": "found", "type": "bool", "internalType": "bool" }, - { "name": "key", "type": "bytes32", "internalType": "bytes32" }, - { "name": "parent", "type": "bytes32", "internalType": "bytes32" } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "getMappingLength", - "inputs": [ - { "name": "target", "type": "address", "internalType": "address" }, - { "name": "mappingSlot", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [ - { "name": "length", "type": "uint256", "internalType": "uint256" } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "getMappingSlotAt", - "inputs": [ - { "name": "target", "type": "address", "internalType": "address" }, - { "name": "mappingSlot", "type": "bytes32", "internalType": "bytes32" }, - { "name": "idx", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [ - { "name": "value", "type": "bytes32", "internalType": "bytes32" } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "getNonce", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [ - { "name": "nonce", "type": "uint64", "internalType": "uint64" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getNonce", - "inputs": [ - { - "name": "wallet", - "type": "tuple", - "internalType": "struct VmSafe.Wallet", - "components": [ - { "name": "addr", "type": "address", "internalType": "address" }, - { - "name": "publicKeyX", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "publicKeyY", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "privateKey", - "type": "uint256", - "internalType": "uint256" - } - ] - } - ], - "outputs": [ - { "name": "nonce", "type": "uint64", "internalType": "uint64" } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "getRecordedLogs", - "inputs": [], - "outputs": [ - { - "name": "logs", - "type": "tuple[]", - "internalType": "struct VmSafe.Log[]", - "components": [ - { - "name": "topics", - "type": "bytes32[]", - "internalType": "bytes32[]" - }, - { "name": "data", "type": "bytes", "internalType": "bytes" }, - { "name": "emitter", "type": "address", "internalType": "address" } - ] - } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "isDir", - "inputs": [ - { "name": "path", "type": "string", "internalType": "string" } - ], - "outputs": [{ "name": "result", "type": "bool", "internalType": "bool" }], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "isFile", - "inputs": [ - { "name": "path", "type": "string", "internalType": "string" } - ], - "outputs": [{ "name": "result", "type": "bool", "internalType": "bool" }], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "keyExists", - "inputs": [ - { "name": "json", "type": "string", "internalType": "string" }, - { "name": "key", "type": "string", "internalType": "string" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "label", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" }, - { "name": "newLabel", "type": "string", "internalType": "string" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "load", - "inputs": [ - { "name": "target", "type": "address", "internalType": "address" }, - { "name": "slot", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [ - { "name": "data", "type": "bytes32", "internalType": "bytes32" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "parseAddress", - "inputs": [ - { - "name": "stringifiedValue", - "type": "string", - "internalType": "string" - } - ], - "outputs": [ - { "name": "parsedValue", "type": "address", "internalType": "address" } - ], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "parseBool", - "inputs": [ - { - "name": "stringifiedValue", - "type": "string", - "internalType": "string" - } - ], - "outputs": [ - { "name": "parsedValue", "type": "bool", "internalType": "bool" } - ], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "parseBytes", - "inputs": [ - { - "name": "stringifiedValue", - "type": "string", - "internalType": "string" - } - ], - "outputs": [ - { "name": "parsedValue", "type": "bytes", "internalType": "bytes" } - ], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "parseBytes32", - "inputs": [ - { - "name": "stringifiedValue", - "type": "string", - "internalType": "string" - } - ], - "outputs": [ - { "name": "parsedValue", "type": "bytes32", "internalType": "bytes32" } - ], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "parseInt", - "inputs": [ - { - "name": "stringifiedValue", - "type": "string", - "internalType": "string" - } - ], - "outputs": [ - { "name": "parsedValue", "type": "int256", "internalType": "int256" } - ], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "parseJson", - "inputs": [ - { "name": "json", "type": "string", "internalType": "string" } - ], - "outputs": [ - { "name": "abiEncodedData", "type": "bytes", "internalType": "bytes" } - ], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "parseJson", - "inputs": [ - { "name": "json", "type": "string", "internalType": "string" }, - { "name": "key", "type": "string", "internalType": "string" } - ], - "outputs": [ - { "name": "abiEncodedData", "type": "bytes", "internalType": "bytes" } - ], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "parseJsonAddress", - "inputs": [ - { "name": "json", "type": "string", "internalType": "string" }, - { "name": "key", "type": "string", "internalType": "string" } - ], - "outputs": [{ "name": "", "type": "address", "internalType": "address" }], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "parseJsonAddressArray", - "inputs": [ - { "name": "json", "type": "string", "internalType": "string" }, - { "name": "key", "type": "string", "internalType": "string" } - ], - "outputs": [ - { "name": "", "type": "address[]", "internalType": "address[]" } - ], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "parseJsonBool", - "inputs": [ - { "name": "json", "type": "string", "internalType": "string" }, - { "name": "key", "type": "string", "internalType": "string" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "parseJsonBoolArray", - "inputs": [ - { "name": "json", "type": "string", "internalType": "string" }, - { "name": "key", "type": "string", "internalType": "string" } - ], - "outputs": [{ "name": "", "type": "bool[]", "internalType": "bool[]" }], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "parseJsonBytes", - "inputs": [ - { "name": "json", "type": "string", "internalType": "string" }, - { "name": "key", "type": "string", "internalType": "string" } - ], - "outputs": [{ "name": "", "type": "bytes", "internalType": "bytes" }], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "parseJsonBytes32", - "inputs": [ - { "name": "json", "type": "string", "internalType": "string" }, - { "name": "key", "type": "string", "internalType": "string" } - ], - "outputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "parseJsonBytes32Array", - "inputs": [ - { "name": "json", "type": "string", "internalType": "string" }, - { "name": "key", "type": "string", "internalType": "string" } - ], - "outputs": [ - { "name": "", "type": "bytes32[]", "internalType": "bytes32[]" } - ], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "parseJsonBytesArray", - "inputs": [ - { "name": "json", "type": "string", "internalType": "string" }, - { "name": "key", "type": "string", "internalType": "string" } - ], - "outputs": [{ "name": "", "type": "bytes[]", "internalType": "bytes[]" }], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "parseJsonInt", - "inputs": [ - { "name": "json", "type": "string", "internalType": "string" }, - { "name": "key", "type": "string", "internalType": "string" } - ], - "outputs": [{ "name": "", "type": "int256", "internalType": "int256" }], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "parseJsonIntArray", - "inputs": [ - { "name": "json", "type": "string", "internalType": "string" }, - { "name": "key", "type": "string", "internalType": "string" } - ], - "outputs": [ - { "name": "", "type": "int256[]", "internalType": "int256[]" } - ], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "parseJsonKeys", - "inputs": [ - { "name": "json", "type": "string", "internalType": "string" }, - { "name": "key", "type": "string", "internalType": "string" } - ], - "outputs": [ - { "name": "keys", "type": "string[]", "internalType": "string[]" } - ], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "parseJsonString", - "inputs": [ - { "name": "json", "type": "string", "internalType": "string" }, - { "name": "key", "type": "string", "internalType": "string" } - ], - "outputs": [{ "name": "", "type": "string", "internalType": "string" }], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "parseJsonStringArray", - "inputs": [ - { "name": "json", "type": "string", "internalType": "string" }, - { "name": "key", "type": "string", "internalType": "string" } - ], - "outputs": [ - { "name": "", "type": "string[]", "internalType": "string[]" } - ], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "parseJsonUint", - "inputs": [ - { "name": "json", "type": "string", "internalType": "string" }, - { "name": "key", "type": "string", "internalType": "string" } - ], - "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "parseJsonUintArray", - "inputs": [ - { "name": "json", "type": "string", "internalType": "string" }, - { "name": "key", "type": "string", "internalType": "string" } - ], - "outputs": [ - { "name": "", "type": "uint256[]", "internalType": "uint256[]" } - ], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "parseUint", - "inputs": [ - { - "name": "stringifiedValue", - "type": "string", - "internalType": "string" - } - ], - "outputs": [ - { "name": "parsedValue", "type": "uint256", "internalType": "uint256" } - ], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "pauseGasMetering", - "inputs": [], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "projectRoot", - "inputs": [], - "outputs": [ - { "name": "path", "type": "string", "internalType": "string" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "readDir", - "inputs": [ - { "name": "path", "type": "string", "internalType": "string" }, - { "name": "maxDepth", "type": "uint64", "internalType": "uint64" } - ], - "outputs": [ - { - "name": "entries", - "type": "tuple[]", - "internalType": "struct VmSafe.DirEntry[]", - "components": [ - { - "name": "errorMessage", - "type": "string", - "internalType": "string" - }, - { "name": "path", "type": "string", "internalType": "string" }, - { "name": "depth", "type": "uint64", "internalType": "uint64" }, - { "name": "isDir", "type": "bool", "internalType": "bool" }, - { "name": "isSymlink", "type": "bool", "internalType": "bool" } - ] - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "readDir", - "inputs": [ - { "name": "path", "type": "string", "internalType": "string" }, - { "name": "maxDepth", "type": "uint64", "internalType": "uint64" }, - { "name": "followLinks", "type": "bool", "internalType": "bool" } - ], - "outputs": [ - { - "name": "entries", - "type": "tuple[]", - "internalType": "struct VmSafe.DirEntry[]", - "components": [ - { - "name": "errorMessage", - "type": "string", - "internalType": "string" - }, - { "name": "path", "type": "string", "internalType": "string" }, - { "name": "depth", "type": "uint64", "internalType": "uint64" }, - { "name": "isDir", "type": "bool", "internalType": "bool" }, - { "name": "isSymlink", "type": "bool", "internalType": "bool" } - ] - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "readDir", - "inputs": [ - { "name": "path", "type": "string", "internalType": "string" } - ], - "outputs": [ - { - "name": "entries", - "type": "tuple[]", - "internalType": "struct VmSafe.DirEntry[]", - "components": [ - { - "name": "errorMessage", - "type": "string", - "internalType": "string" - }, - { "name": "path", "type": "string", "internalType": "string" }, - { "name": "depth", "type": "uint64", "internalType": "uint64" }, - { "name": "isDir", "type": "bool", "internalType": "bool" }, - { "name": "isSymlink", "type": "bool", "internalType": "bool" } - ] - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "readFile", - "inputs": [ - { "name": "path", "type": "string", "internalType": "string" } - ], - "outputs": [ - { "name": "data", "type": "string", "internalType": "string" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "readFileBinary", - "inputs": [ - { "name": "path", "type": "string", "internalType": "string" } - ], - "outputs": [{ "name": "data", "type": "bytes", "internalType": "bytes" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "readLine", - "inputs": [ - { "name": "path", "type": "string", "internalType": "string" } - ], - "outputs": [ - { "name": "line", "type": "string", "internalType": "string" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "readLink", - "inputs": [ - { "name": "linkPath", "type": "string", "internalType": "string" } - ], - "outputs": [ - { "name": "targetPath", "type": "string", "internalType": "string" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "record", - "inputs": [], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "recordLogs", - "inputs": [], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "rememberKey", - "inputs": [ - { "name": "privateKey", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [ - { "name": "keyAddr", "type": "address", "internalType": "address" } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "removeDir", - "inputs": [ - { "name": "path", "type": "string", "internalType": "string" }, - { "name": "recursive", "type": "bool", "internalType": "bool" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "removeFile", - "inputs": [ - { "name": "path", "type": "string", "internalType": "string" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "resumeGasMetering", - "inputs": [], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "rpc", - "inputs": [ - { "name": "method", "type": "string", "internalType": "string" }, - { "name": "params", "type": "string", "internalType": "string" } - ], - "outputs": [{ "name": "data", "type": "bytes", "internalType": "bytes" }], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "rpcUrl", - "inputs": [ - { "name": "rpcAlias", "type": "string", "internalType": "string" } - ], - "outputs": [ - { "name": "json", "type": "string", "internalType": "string" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "rpcUrlStructs", - "inputs": [], - "outputs": [ - { - "name": "urls", - "type": "tuple[]", - "internalType": "struct VmSafe.Rpc[]", - "components": [ - { "name": "key", "type": "string", "internalType": "string" }, - { "name": "url", "type": "string", "internalType": "string" } - ] - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "rpcUrls", - "inputs": [], - "outputs": [ - { "name": "urls", "type": "string[2][]", "internalType": "string[2][]" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "serializeAddress", - "inputs": [ - { "name": "objectKey", "type": "string", "internalType": "string" }, - { "name": "valueKey", "type": "string", "internalType": "string" }, - { "name": "values", "type": "address[]", "internalType": "address[]" } - ], - "outputs": [ - { "name": "json", "type": "string", "internalType": "string" } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "serializeAddress", - "inputs": [ - { "name": "objectKey", "type": "string", "internalType": "string" }, - { "name": "valueKey", "type": "string", "internalType": "string" }, - { "name": "value", "type": "address", "internalType": "address" } - ], - "outputs": [ - { "name": "json", "type": "string", "internalType": "string" } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "serializeBool", - "inputs": [ - { "name": "objectKey", "type": "string", "internalType": "string" }, - { "name": "valueKey", "type": "string", "internalType": "string" }, - { "name": "values", "type": "bool[]", "internalType": "bool[]" } - ], - "outputs": [ - { "name": "json", "type": "string", "internalType": "string" } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "serializeBool", - "inputs": [ - { "name": "objectKey", "type": "string", "internalType": "string" }, - { "name": "valueKey", "type": "string", "internalType": "string" }, - { "name": "value", "type": "bool", "internalType": "bool" } - ], - "outputs": [ - { "name": "json", "type": "string", "internalType": "string" } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "serializeBytes", - "inputs": [ - { "name": "objectKey", "type": "string", "internalType": "string" }, - { "name": "valueKey", "type": "string", "internalType": "string" }, - { "name": "values", "type": "bytes[]", "internalType": "bytes[]" } - ], - "outputs": [ - { "name": "json", "type": "string", "internalType": "string" } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "serializeBytes", - "inputs": [ - { "name": "objectKey", "type": "string", "internalType": "string" }, - { "name": "valueKey", "type": "string", "internalType": "string" }, - { "name": "value", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [ - { "name": "json", "type": "string", "internalType": "string" } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "serializeBytes32", - "inputs": [ - { "name": "objectKey", "type": "string", "internalType": "string" }, - { "name": "valueKey", "type": "string", "internalType": "string" }, - { "name": "values", "type": "bytes32[]", "internalType": "bytes32[]" } - ], - "outputs": [ - { "name": "json", "type": "string", "internalType": "string" } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "serializeBytes32", - "inputs": [ - { "name": "objectKey", "type": "string", "internalType": "string" }, - { "name": "valueKey", "type": "string", "internalType": "string" }, - { "name": "value", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [ - { "name": "json", "type": "string", "internalType": "string" } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "serializeInt", - "inputs": [ - { "name": "objectKey", "type": "string", "internalType": "string" }, - { "name": "valueKey", "type": "string", "internalType": "string" }, - { "name": "value", "type": "int256", "internalType": "int256" } - ], - "outputs": [ - { "name": "json", "type": "string", "internalType": "string" } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "serializeInt", - "inputs": [ - { "name": "objectKey", "type": "string", "internalType": "string" }, - { "name": "valueKey", "type": "string", "internalType": "string" }, - { "name": "values", "type": "int256[]", "internalType": "int256[]" } - ], - "outputs": [ - { "name": "json", "type": "string", "internalType": "string" } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "serializeJson", - "inputs": [ - { "name": "objectKey", "type": "string", "internalType": "string" }, - { "name": "value", "type": "string", "internalType": "string" } - ], - "outputs": [ - { "name": "json", "type": "string", "internalType": "string" } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "serializeString", - "inputs": [ - { "name": "objectKey", "type": "string", "internalType": "string" }, - { "name": "valueKey", "type": "string", "internalType": "string" }, - { "name": "values", "type": "string[]", "internalType": "string[]" } - ], - "outputs": [ - { "name": "json", "type": "string", "internalType": "string" } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "serializeString", - "inputs": [ - { "name": "objectKey", "type": "string", "internalType": "string" }, - { "name": "valueKey", "type": "string", "internalType": "string" }, - { "name": "value", "type": "string", "internalType": "string" } - ], - "outputs": [ - { "name": "json", "type": "string", "internalType": "string" } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "serializeUint", - "inputs": [ - { "name": "objectKey", "type": "string", "internalType": "string" }, - { "name": "valueKey", "type": "string", "internalType": "string" }, - { "name": "value", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [ - { "name": "json", "type": "string", "internalType": "string" } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "serializeUint", - "inputs": [ - { "name": "objectKey", "type": "string", "internalType": "string" }, - { "name": "valueKey", "type": "string", "internalType": "string" }, - { "name": "values", "type": "uint256[]", "internalType": "uint256[]" } - ], - "outputs": [ - { "name": "json", "type": "string", "internalType": "string" } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setEnv", - "inputs": [ - { "name": "name", "type": "string", "internalType": "string" }, - { "name": "value", "type": "string", "internalType": "string" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "sign", - "inputs": [ - { - "name": "wallet", - "type": "tuple", - "internalType": "struct VmSafe.Wallet", - "components": [ - { "name": "addr", "type": "address", "internalType": "address" }, - { - "name": "publicKeyX", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "publicKeyY", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "privateKey", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { "name": "digest", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [ - { "name": "v", "type": "uint8", "internalType": "uint8" }, - { "name": "r", "type": "bytes32", "internalType": "bytes32" }, - { "name": "s", "type": "bytes32", "internalType": "bytes32" } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "sign", - "inputs": [ - { "name": "privateKey", "type": "uint256", "internalType": "uint256" }, - { "name": "digest", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [ - { "name": "v", "type": "uint8", "internalType": "uint8" }, - { "name": "r", "type": "bytes32", "internalType": "bytes32" }, - { "name": "s", "type": "bytes32", "internalType": "bytes32" } - ], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "signP256", - "inputs": [ - { "name": "privateKey", "type": "uint256", "internalType": "uint256" }, - { "name": "digest", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [ - { "name": "r", "type": "bytes32", "internalType": "bytes32" }, - { "name": "s", "type": "bytes32", "internalType": "bytes32" } - ], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "sleep", - "inputs": [ - { "name": "duration", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "startBroadcast", - "inputs": [], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "startBroadcast", - "inputs": [ - { "name": "signer", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "startBroadcast", - "inputs": [ - { "name": "privateKey", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "startMappingRecording", - "inputs": [], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "startStateDiffRecording", - "inputs": [], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "stopAndReturnStateDiff", - "inputs": [], - "outputs": [ - { - "name": "accountAccesses", - "type": "tuple[]", - "internalType": "struct VmSafe.AccountAccess[]", - "components": [ - { - "name": "chainInfo", - "type": "tuple", - "internalType": "struct VmSafe.ChainInfo", - "components": [ - { - "name": "forkId", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "chainId", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "name": "kind", - "type": "uint8", - "internalType": "enum VmSafe.AccountAccessKind" - }, - { "name": "account", "type": "address", "internalType": "address" }, - { - "name": "accessor", - "type": "address", - "internalType": "address" - }, - { "name": "initialized", "type": "bool", "internalType": "bool" }, - { - "name": "oldBalance", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "newBalance", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "deployedCode", - "type": "bytes", - "internalType": "bytes" - }, - { "name": "value", "type": "uint256", "internalType": "uint256" }, - { "name": "data", "type": "bytes", "internalType": "bytes" }, - { "name": "reverted", "type": "bool", "internalType": "bool" }, - { - "name": "storageAccesses", - "type": "tuple[]", - "internalType": "struct VmSafe.StorageAccess[]", - "components": [ - { - "name": "account", - "type": "address", - "internalType": "address" - }, - { - "name": "slot", - "type": "bytes32", - "internalType": "bytes32" - }, - { "name": "isWrite", "type": "bool", "internalType": "bool" }, - { - "name": "previousValue", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "newValue", - "type": "bytes32", - "internalType": "bytes32" - }, - { "name": "reverted", "type": "bool", "internalType": "bool" } - ] - } - ] - } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "stopBroadcast", - "inputs": [], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "stopMappingRecording", - "inputs": [], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "toBase64", - "inputs": [ - { "name": "data", "type": "string", "internalType": "string" } - ], - "outputs": [{ "name": "", "type": "string", "internalType": "string" }], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "toBase64", - "inputs": [{ "name": "data", "type": "bytes", "internalType": "bytes" }], - "outputs": [{ "name": "", "type": "string", "internalType": "string" }], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "toBase64URL", - "inputs": [ - { "name": "data", "type": "string", "internalType": "string" } - ], - "outputs": [{ "name": "", "type": "string", "internalType": "string" }], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "toBase64URL", - "inputs": [{ "name": "data", "type": "bytes", "internalType": "bytes" }], - "outputs": [{ "name": "", "type": "string", "internalType": "string" }], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "toString", - "inputs": [ - { "name": "value", "type": "address", "internalType": "address" } - ], - "outputs": [ - { - "name": "stringifiedValue", - "type": "string", - "internalType": "string" - } - ], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "toString", - "inputs": [ - { "name": "value", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [ - { - "name": "stringifiedValue", - "type": "string", - "internalType": "string" - } - ], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "toString", - "inputs": [{ "name": "value", "type": "bytes", "internalType": "bytes" }], - "outputs": [ - { - "name": "stringifiedValue", - "type": "string", - "internalType": "string" - } - ], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "toString", - "inputs": [{ "name": "value", "type": "bool", "internalType": "bool" }], - "outputs": [ - { - "name": "stringifiedValue", - "type": "string", - "internalType": "string" - } - ], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "toString", - "inputs": [ - { "name": "value", "type": "int256", "internalType": "int256" } - ], - "outputs": [ - { - "name": "stringifiedValue", - "type": "string", - "internalType": "string" - } - ], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "toString", - "inputs": [ - { "name": "value", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [ - { - "name": "stringifiedValue", - "type": "string", - "internalType": "string" - } - ], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "tryFfi", - "inputs": [ - { - "name": "commandInput", - "type": "string[]", - "internalType": "string[]" - } - ], - "outputs": [ - { - "name": "result", - "type": "tuple", - "internalType": "struct VmSafe.FfiResult", - "components": [ - { "name": "exitCode", "type": "int32", "internalType": "int32" }, - { "name": "stdout", "type": "bytes", "internalType": "bytes" }, - { "name": "stderr", "type": "bytes", "internalType": "bytes" } - ] - } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "unixTime", - "inputs": [], - "outputs": [ - { "name": "milliseconds", "type": "uint256", "internalType": "uint256" } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "writeFile", - "inputs": [ - { "name": "path", "type": "string", "internalType": "string" }, - { "name": "data", "type": "string", "internalType": "string" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "writeFileBinary", - "inputs": [ - { "name": "path", "type": "string", "internalType": "string" }, - { "name": "data", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "writeJson", - "inputs": [ - { "name": "json", "type": "string", "internalType": "string" }, - { "name": "path", "type": "string", "internalType": "string" }, - { "name": "valueKey", "type": "string", "internalType": "string" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "writeJson", - "inputs": [ - { "name": "json", "type": "string", "internalType": "string" }, - { "name": "path", "type": "string", "internalType": "string" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "writeLine", - "inputs": [ - { "name": "path", "type": "string", "internalType": "string" }, - { "name": "data", "type": "string", "internalType": "string" } - ], - "outputs": [], - "stateMutability": "nonpayable" - } - ], - "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "methodIdentifiers": { - "accesses(address)": "65bc9481", - "addr(uint256)": "ffa18649", - "assume(bool)": "4c63e562", - "breakpoint(string)": "f0259e92", - "breakpoint(string,bool)": "f7d39a8d", - "broadcast()": "afc98040", - "broadcast(address)": "e6962cdb", - "broadcast(uint256)": "f67a965b", - "closeFile(string)": "48c3241f", - "computeCreate2Address(bytes32,bytes32)": "890c283b", - "computeCreate2Address(bytes32,bytes32,address)": "d323826a", - "computeCreateAddress(address,uint256)": "74637a7a", - "copyFile(string,string)": "a54a87d8", - "createDir(string,bool)": "168b64d3", - "createWallet(string)": "7404f1d2", - "createWallet(uint256)": "7a675bb6", - "createWallet(uint256,string)": "ed7c5462", - "deriveKey(string,string,uint32)": "6bcb2c1b", - "deriveKey(string,string,uint32,string)": "29233b1f", - "deriveKey(string,uint32)": "6229498b", - "deriveKey(string,uint32,string)": "32c8176d", - "envAddress(string)": "350d56bf", - "envAddress(string,string)": "ad31b9fa", - "envBool(string)": "7ed1ec7d", - "envBool(string,string)": "aaaddeaf", - "envBytes(string)": "4d7baf06", - "envBytes(string,string)": "ddc2651b", - "envBytes32(string)": "97949042", - "envBytes32(string,string)": "5af231c1", - "envInt(string)": "892a0c61", - "envInt(string,string)": "42181150", - "envOr(string,address)": "561fe540", - "envOr(string,bool)": "4777f3cf", - "envOr(string,bytes)": "b3e47705", - "envOr(string,bytes32)": "b4a85892", - "envOr(string,int256)": "bbcb713e", - "envOr(string,string)": "d145736c", - "envOr(string,string,address[])": "c74e9deb", - "envOr(string,string,bool[])": "eb85e83b", - "envOr(string,string,bytes32[])": "2281f367", - "envOr(string,string,bytes[])": "64bc3e64", - "envOr(string,string,int256[])": "4700d74b", - "envOr(string,string,string[])": "859216bc", - "envOr(string,string,uint256[])": "74318528", - "envOr(string,uint256)": "5e97348f", - "envString(string)": "f877cb19", - "envString(string,string)": "14b02bc9", - "envUint(string)": "c1978d1f", - "envUint(string,string)": "f3dec099", - "eth_getLogs(uint256,uint256,address,bytes32[])": "35e1349b", - "exists(string)": "261a323e", - "ffi(string[])": "89160467", - "fsMetadata(string)": "af368a08", - "getBlockNumber()": "42cbb15c", - "getBlockTimestamp()": "796b89b9", - "getCode(string)": "8d1cc925", - "getDeployedCode(string)": "3ebf73b4", - "getLabel(address)": "28a249b0", - "getMappingKeyAndParentOf(address,bytes32)": "876e24e6", - "getMappingLength(address,bytes32)": "2f2fd63f", - "getMappingSlotAt(address,bytes32,uint256)": "ebc73ab4", - "getNonce((address,uint256,uint256,uint256))": "a5748aad", - "getNonce(address)": "2d0335ab", - "getRecordedLogs()": "191553a4", - "isDir(string)": "7d15d019", - "isFile(string)": "e0eb04d4", - "keyExists(string,string)": "528a683c", - "label(address,string)": "c657c718", - "load(address,bytes32)": "667f9d70", - "parseAddress(string)": "c6ce059d", - "parseBool(string)": "974ef924", - "parseBytes(string)": "8f5d232d", - "parseBytes32(string)": "087e6e81", - "parseInt(string)": "42346c5e", - "parseJson(string)": "6a82600a", - "parseJson(string,string)": "85940ef1", - "parseJsonAddress(string,string)": "1e19e657", - "parseJsonAddressArray(string,string)": "2fce7883", - "parseJsonBool(string,string)": "9f86dc91", - "parseJsonBoolArray(string,string)": "91f3b94f", - "parseJsonBytes(string,string)": "fd921be8", - "parseJsonBytes32(string,string)": "1777e59d", - "parseJsonBytes32Array(string,string)": "91c75bc3", - "parseJsonBytesArray(string,string)": "6631aa99", - "parseJsonInt(string,string)": "7b048ccd", - "parseJsonIntArray(string,string)": "9983c28a", - "parseJsonKeys(string,string)": "213e4198", - "parseJsonString(string,string)": "49c4fac8", - "parseJsonStringArray(string,string)": "498fdcf4", - "parseJsonUint(string,string)": "addde2b6", - "parseJsonUintArray(string,string)": "522074ab", - "parseUint(string)": "fa91454d", - "pauseGasMetering()": "d1a5b36f", - "projectRoot()": "d930a0e6", - "readDir(string)": "c4bc59e0", - "readDir(string,uint64)": "1497876c", - "readDir(string,uint64,bool)": "8102d70d", - "readFile(string)": "60f9bb11", - "readFileBinary(string)": "16ed7bc4", - "readLine(string)": "70f55728", - "readLink(string)": "9f5684a2", - "record()": "266cf109", - "recordLogs()": "41af2f52", - "rememberKey(uint256)": "22100064", - "removeDir(string,bool)": "45c62011", - "removeFile(string)": "f1afe04d", - "resumeGasMetering()": "2bcd50e0", - "rpc(string,string)": "1206c8a8", - "rpcUrl(string)": "975a6ce9", - "rpcUrlStructs()": "9d2ad72a", - "rpcUrls()": "a85a8418", - "serializeAddress(string,string,address)": "972c6062", - "serializeAddress(string,string,address[])": "1e356e1a", - "serializeBool(string,string,bool)": "ac22e971", - "serializeBool(string,string,bool[])": "92925aa1", - "serializeBytes(string,string,bytes)": "f21d52c7", - "serializeBytes(string,string,bytes[])": "9884b232", - "serializeBytes32(string,string,bytes32)": "2d812b44", - "serializeBytes32(string,string,bytes32[])": "201e43e2", - "serializeInt(string,string,int256)": "3f33db60", - "serializeInt(string,string,int256[])": "7676e127", - "serializeJson(string,string)": "9b3358b0", - "serializeString(string,string,string)": "88da6d35", - "serializeString(string,string,string[])": "561cd6f3", - "serializeUint(string,string,uint256)": "129e9002", - "serializeUint(string,string,uint256[])": "fee9a469", - "setEnv(string,string)": "3d5923ee", - "sign((address,uint256,uint256,uint256),bytes32)": "b25c5a25", - "sign(uint256,bytes32)": "e341eaa4", - "signP256(uint256,bytes32)": "83211b40", - "sleep(uint256)": "fa9d8713", - "startBroadcast()": "7fb5297f", - "startBroadcast(address)": "7fec2a8d", - "startBroadcast(uint256)": "ce817d47", - "startMappingRecording()": "3e9705c0", - "startStateDiffRecording()": "cf22e3c9", - "stopAndReturnStateDiff()": "aa5cf90e", - "stopBroadcast()": "76eadd36", - "stopMappingRecording()": "0d4aae9b", - "toBase64(bytes)": "a5cbfe65", - "toBase64(string)": "3f8be2c8", - "toBase64URL(bytes)": "c8bd0e4a", - "toBase64URL(string)": "ae3165b3", - "toString(address)": "56ca623e", - "toString(bool)": "71dce7da", - "toString(bytes)": "71aad10d", - "toString(bytes32)": "b11a19e8", - "toString(int256)": "a322c40e", - "toString(uint256)": "6900a3ae", - "tryFfi(string[])": "f45c1ce7", - "unixTime()": "625387dc", - "writeFile(string,string)": "897e0a97", - "writeFileBinary(string,bytes)": "1f21fc80", - "writeJson(string,string)": "e23cd19f", - "writeJson(string,string,string)": "35d6ad46", - "writeLine(string,string)": "619d897f" - }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"accesses\",\"outputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"readSlots\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32[]\",\"name\":\"writeSlots\",\"type\":\"bytes32[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"privateKey\",\"type\":\"uint256\"}],\"name\":\"addr\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"keyAddr\",\"type\":\"address\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"condition\",\"type\":\"bool\"}],\"name\":\"assume\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"char\",\"type\":\"string\"}],\"name\":\"breakpoint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"char\",\"type\":\"string\"},{\"internalType\":\"bool\",\"name\":\"value\",\"type\":\"bool\"}],\"name\":\"breakpoint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"broadcast\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"}],\"name\":\"broadcast\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"privateKey\",\"type\":\"uint256\"}],\"name\":\"broadcast\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"path\",\"type\":\"string\"}],\"name\":\"closeFile\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"initCodeHash\",\"type\":\"bytes32\"}],\"name\":\"computeCreate2Address\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"initCodeHash\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"deployer\",\"type\":\"address\"}],\"name\":\"computeCreate2Address\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"deployer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"}],\"name\":\"computeCreateAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"from\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"to\",\"type\":\"string\"}],\"name\":\"copyFile\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"copied\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"path\",\"type\":\"string\"},{\"internalType\":\"bool\",\"name\":\"recursive\",\"type\":\"bool\"}],\"name\":\"createDir\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"walletLabel\",\"type\":\"string\"}],\"name\":\"createWallet\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"publicKeyX\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"publicKeyY\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"privateKey\",\"type\":\"uint256\"}],\"internalType\":\"struct VmSafe.Wallet\",\"name\":\"wallet\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"privateKey\",\"type\":\"uint256\"}],\"name\":\"createWallet\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"publicKeyX\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"publicKeyY\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"privateKey\",\"type\":\"uint256\"}],\"internalType\":\"struct VmSafe.Wallet\",\"name\":\"wallet\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"privateKey\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"walletLabel\",\"type\":\"string\"}],\"name\":\"createWallet\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"publicKeyX\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"publicKeyY\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"privateKey\",\"type\":\"uint256\"}],\"internalType\":\"struct VmSafe.Wallet\",\"name\":\"wallet\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"mnemonic\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"derivationPath\",\"type\":\"string\"},{\"internalType\":\"uint32\",\"name\":\"index\",\"type\":\"uint32\"},{\"internalType\":\"string\",\"name\":\"language\",\"type\":\"string\"}],\"name\":\"deriveKey\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"privateKey\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"mnemonic\",\"type\":\"string\"},{\"internalType\":\"uint32\",\"name\":\"index\",\"type\":\"uint32\"},{\"internalType\":\"string\",\"name\":\"language\",\"type\":\"string\"}],\"name\":\"deriveKey\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"privateKey\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"mnemonic\",\"type\":\"string\"},{\"internalType\":\"uint32\",\"name\":\"index\",\"type\":\"uint32\"}],\"name\":\"deriveKey\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"privateKey\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"mnemonic\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"derivationPath\",\"type\":\"string\"},{\"internalType\":\"uint32\",\"name\":\"index\",\"type\":\"uint32\"}],\"name\":\"deriveKey\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"privateKey\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"envAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"value\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"delim\",\"type\":\"string\"}],\"name\":\"envAddress\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"value\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"envBool\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"value\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"delim\",\"type\":\"string\"}],\"name\":\"envBool\",\"outputs\":[{\"internalType\":\"bool[]\",\"name\":\"value\",\"type\":\"bool[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"envBytes\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"value\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"delim\",\"type\":\"string\"}],\"name\":\"envBytes\",\"outputs\":[{\"internalType\":\"bytes[]\",\"name\":\"value\",\"type\":\"bytes[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"delim\",\"type\":\"string\"}],\"name\":\"envBytes32\",\"outputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"value\",\"type\":\"bytes32[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"envBytes32\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"value\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"delim\",\"type\":\"string\"}],\"name\":\"envInt\",\"outputs\":[{\"internalType\":\"int256[]\",\"name\":\"value\",\"type\":\"int256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"envInt\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"value\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"delim\",\"type\":\"string\"},{\"internalType\":\"bytes32[]\",\"name\":\"defaultValue\",\"type\":\"bytes32[]\"}],\"name\":\"envOr\",\"outputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"value\",\"type\":\"bytes32[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"delim\",\"type\":\"string\"},{\"internalType\":\"int256[]\",\"name\":\"defaultValue\",\"type\":\"int256[]\"}],\"name\":\"envOr\",\"outputs\":[{\"internalType\":\"int256[]\",\"name\":\"value\",\"type\":\"int256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"bool\",\"name\":\"defaultValue\",\"type\":\"bool\"}],\"name\":\"envOr\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"value\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"defaultValue\",\"type\":\"address\"}],\"name\":\"envOr\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"value\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"defaultValue\",\"type\":\"uint256\"}],\"name\":\"envOr\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"delim\",\"type\":\"string\"},{\"internalType\":\"bytes[]\",\"name\":\"defaultValue\",\"type\":\"bytes[]\"}],\"name\":\"envOr\",\"outputs\":[{\"internalType\":\"bytes[]\",\"name\":\"value\",\"type\":\"bytes[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"delim\",\"type\":\"string\"},{\"internalType\":\"uint256[]\",\"name\":\"defaultValue\",\"type\":\"uint256[]\"}],\"name\":\"envOr\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"value\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"delim\",\"type\":\"string\"},{\"internalType\":\"string[]\",\"name\":\"defaultValue\",\"type\":\"string[]\"}],\"name\":\"envOr\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"value\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"defaultValue\",\"type\":\"bytes\"}],\"name\":\"envOr\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"value\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"bytes32\",\"name\":\"defaultValue\",\"type\":\"bytes32\"}],\"name\":\"envOr\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"value\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"int256\",\"name\":\"defaultValue\",\"type\":\"int256\"}],\"name\":\"envOr\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"value\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"delim\",\"type\":\"string\"},{\"internalType\":\"address[]\",\"name\":\"defaultValue\",\"type\":\"address[]\"}],\"name\":\"envOr\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"value\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"defaultValue\",\"type\":\"string\"}],\"name\":\"envOr\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"value\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"delim\",\"type\":\"string\"},{\"internalType\":\"bool[]\",\"name\":\"defaultValue\",\"type\":\"bool[]\"}],\"name\":\"envOr\",\"outputs\":[{\"internalType\":\"bool[]\",\"name\":\"value\",\"type\":\"bool[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"delim\",\"type\":\"string\"}],\"name\":\"envString\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"value\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"envString\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"value\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"envUint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"delim\",\"type\":\"string\"}],\"name\":\"envUint\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"value\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"fromBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"toBlock\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes32[]\",\"name\":\"topics\",\"type\":\"bytes32[]\"}],\"name\":\"eth_getLogs\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"emitter\",\"type\":\"address\"},{\"internalType\":\"bytes32[]\",\"name\":\"topics\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"blockNumber\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"transactionHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"transactionIndex\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"logIndex\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"removed\",\"type\":\"bool\"}],\"internalType\":\"struct VmSafe.EthGetLogs[]\",\"name\":\"logs\",\"type\":\"tuple[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"path\",\"type\":\"string\"}],\"name\":\"exists\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"result\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string[]\",\"name\":\"commandInput\",\"type\":\"string[]\"}],\"name\":\"ffi\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"path\",\"type\":\"string\"}],\"name\":\"fsMetadata\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"isDir\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isSymlink\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"readOnly\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"modified\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"accessed\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"created\",\"type\":\"uint256\"}],\"internalType\":\"struct VmSafe.FsMetadata\",\"name\":\"metadata\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBlockNumber\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBlockTimestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"artifactPath\",\"type\":\"string\"}],\"name\":\"getCode\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"creationBytecode\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"artifactPath\",\"type\":\"string\"}],\"name\":\"getDeployedCode\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"runtimeBytecode\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"getLabel\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"currentLabel\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"elementSlot\",\"type\":\"bytes32\"}],\"name\":\"getMappingKeyAndParentOf\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"found\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"parent\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"mappingSlot\",\"type\":\"bytes32\"}],\"name\":\"getMappingLength\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"mappingSlot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"idx\",\"type\":\"uint256\"}],\"name\":\"getMappingSlotAt\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"value\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"getNonce\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"publicKeyX\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"publicKeyY\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"privateKey\",\"type\":\"uint256\"}],\"internalType\":\"struct VmSafe.Wallet\",\"name\":\"wallet\",\"type\":\"tuple\"}],\"name\":\"getNonce\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRecordedLogs\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32[]\",\"name\":\"topics\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"emitter\",\"type\":\"address\"}],\"internalType\":\"struct VmSafe.Log[]\",\"name\":\"logs\",\"type\":\"tuple[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"path\",\"type\":\"string\"}],\"name\":\"isDir\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"result\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"path\",\"type\":\"string\"}],\"name\":\"isFile\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"result\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"}],\"name\":\"keyExists\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"newLabel\",\"type\":\"string\"}],\"name\":\"label\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"slot\",\"type\":\"bytes32\"}],\"name\":\"load\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"data\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"stringifiedValue\",\"type\":\"string\"}],\"name\":\"parseAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"parsedValue\",\"type\":\"address\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"stringifiedValue\",\"type\":\"string\"}],\"name\":\"parseBool\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"parsedValue\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"stringifiedValue\",\"type\":\"string\"}],\"name\":\"parseBytes\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"parsedValue\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"stringifiedValue\",\"type\":\"string\"}],\"name\":\"parseBytes32\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"parsedValue\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"stringifiedValue\",\"type\":\"string\"}],\"name\":\"parseInt\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"parsedValue\",\"type\":\"int256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"}],\"name\":\"parseJson\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"abiEncodedData\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"}],\"name\":\"parseJson\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"abiEncodedData\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"}],\"name\":\"parseJsonAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"}],\"name\":\"parseJsonAddressArray\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"}],\"name\":\"parseJsonBool\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"}],\"name\":\"parseJsonBoolArray\",\"outputs\":[{\"internalType\":\"bool[]\",\"name\":\"\",\"type\":\"bool[]\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"}],\"name\":\"parseJsonBytes\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"}],\"name\":\"parseJsonBytes32\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"}],\"name\":\"parseJsonBytes32Array\",\"outputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"\",\"type\":\"bytes32[]\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"}],\"name\":\"parseJsonBytesArray\",\"outputs\":[{\"internalType\":\"bytes[]\",\"name\":\"\",\"type\":\"bytes[]\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"}],\"name\":\"parseJsonInt\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"}],\"name\":\"parseJsonIntArray\",\"outputs\":[{\"internalType\":\"int256[]\",\"name\":\"\",\"type\":\"int256[]\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"}],\"name\":\"parseJsonKeys\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"keys\",\"type\":\"string[]\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"}],\"name\":\"parseJsonString\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"}],\"name\":\"parseJsonStringArray\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"\",\"type\":\"string[]\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"}],\"name\":\"parseJsonUint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"}],\"name\":\"parseJsonUintArray\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"stringifiedValue\",\"type\":\"string\"}],\"name\":\"parseUint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"parsedValue\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauseGasMetering\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"projectRoot\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"path\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"path\",\"type\":\"string\"},{\"internalType\":\"uint64\",\"name\":\"maxDepth\",\"type\":\"uint64\"}],\"name\":\"readDir\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"errorMessage\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"path\",\"type\":\"string\"},{\"internalType\":\"uint64\",\"name\":\"depth\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"isDir\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isSymlink\",\"type\":\"bool\"}],\"internalType\":\"struct VmSafe.DirEntry[]\",\"name\":\"entries\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"path\",\"type\":\"string\"},{\"internalType\":\"uint64\",\"name\":\"maxDepth\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"followLinks\",\"type\":\"bool\"}],\"name\":\"readDir\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"errorMessage\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"path\",\"type\":\"string\"},{\"internalType\":\"uint64\",\"name\":\"depth\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"isDir\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isSymlink\",\"type\":\"bool\"}],\"internalType\":\"struct VmSafe.DirEntry[]\",\"name\":\"entries\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"path\",\"type\":\"string\"}],\"name\":\"readDir\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"errorMessage\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"path\",\"type\":\"string\"},{\"internalType\":\"uint64\",\"name\":\"depth\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"isDir\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isSymlink\",\"type\":\"bool\"}],\"internalType\":\"struct VmSafe.DirEntry[]\",\"name\":\"entries\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"path\",\"type\":\"string\"}],\"name\":\"readFile\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"data\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"path\",\"type\":\"string\"}],\"name\":\"readFileBinary\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"path\",\"type\":\"string\"}],\"name\":\"readLine\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"line\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"linkPath\",\"type\":\"string\"}],\"name\":\"readLink\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"targetPath\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"record\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"recordLogs\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"privateKey\",\"type\":\"uint256\"}],\"name\":\"rememberKey\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"keyAddr\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"path\",\"type\":\"string\"},{\"internalType\":\"bool\",\"name\":\"recursive\",\"type\":\"bool\"}],\"name\":\"removeDir\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"path\",\"type\":\"string\"}],\"name\":\"removeFile\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"resumeGasMetering\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"method\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"params\",\"type\":\"string\"}],\"name\":\"rpc\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"rpcAlias\",\"type\":\"string\"}],\"name\":\"rpcUrl\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rpcUrlStructs\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"url\",\"type\":\"string\"}],\"internalType\":\"struct VmSafe.Rpc[]\",\"name\":\"urls\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rpcUrls\",\"outputs\":[{\"internalType\":\"string[2][]\",\"name\":\"urls\",\"type\":\"string[2][]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"objectKey\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"valueKey\",\"type\":\"string\"},{\"internalType\":\"address[]\",\"name\":\"values\",\"type\":\"address[]\"}],\"name\":\"serializeAddress\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"objectKey\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"valueKey\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"value\",\"type\":\"address\"}],\"name\":\"serializeAddress\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"objectKey\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"valueKey\",\"type\":\"string\"},{\"internalType\":\"bool[]\",\"name\":\"values\",\"type\":\"bool[]\"}],\"name\":\"serializeBool\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"objectKey\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"valueKey\",\"type\":\"string\"},{\"internalType\":\"bool\",\"name\":\"value\",\"type\":\"bool\"}],\"name\":\"serializeBool\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"objectKey\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"valueKey\",\"type\":\"string\"},{\"internalType\":\"bytes[]\",\"name\":\"values\",\"type\":\"bytes[]\"}],\"name\":\"serializeBytes\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"objectKey\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"valueKey\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"value\",\"type\":\"bytes\"}],\"name\":\"serializeBytes\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"objectKey\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"valueKey\",\"type\":\"string\"},{\"internalType\":\"bytes32[]\",\"name\":\"values\",\"type\":\"bytes32[]\"}],\"name\":\"serializeBytes32\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"objectKey\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"valueKey\",\"type\":\"string\"},{\"internalType\":\"bytes32\",\"name\":\"value\",\"type\":\"bytes32\"}],\"name\":\"serializeBytes32\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"objectKey\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"valueKey\",\"type\":\"string\"},{\"internalType\":\"int256\",\"name\":\"value\",\"type\":\"int256\"}],\"name\":\"serializeInt\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"objectKey\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"valueKey\",\"type\":\"string\"},{\"internalType\":\"int256[]\",\"name\":\"values\",\"type\":\"int256[]\"}],\"name\":\"serializeInt\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"objectKey\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"value\",\"type\":\"string\"}],\"name\":\"serializeJson\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"objectKey\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"valueKey\",\"type\":\"string\"},{\"internalType\":\"string[]\",\"name\":\"values\",\"type\":\"string[]\"}],\"name\":\"serializeString\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"objectKey\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"valueKey\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"value\",\"type\":\"string\"}],\"name\":\"serializeString\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"objectKey\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"valueKey\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"serializeUint\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"objectKey\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"valueKey\",\"type\":\"string\"},{\"internalType\":\"uint256[]\",\"name\":\"values\",\"type\":\"uint256[]\"}],\"name\":\"serializeUint\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"value\",\"type\":\"string\"}],\"name\":\"setEnv\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"publicKeyX\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"publicKeyY\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"privateKey\",\"type\":\"uint256\"}],\"internalType\":\"struct VmSafe.Wallet\",\"name\":\"wallet\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"}],\"name\":\"sign\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"privateKey\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"}],\"name\":\"sign\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"privateKey\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"}],\"name\":\"signP256\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"}],\"name\":\"sleep\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"startBroadcast\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"}],\"name\":\"startBroadcast\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"privateKey\",\"type\":\"uint256\"}],\"name\":\"startBroadcast\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"startMappingRecording\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"startStateDiffRecording\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stopAndReturnStateDiff\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"forkId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"}],\"internalType\":\"struct VmSafe.ChainInfo\",\"name\":\"chainInfo\",\"type\":\"tuple\"},{\"internalType\":\"enum VmSafe.AccountAccessKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"accessor\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"initialized\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"oldBalance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"newBalance\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"deployedCode\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"reverted\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"slot\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"isWrite\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"previousValue\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"newValue\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"reverted\",\"type\":\"bool\"}],\"internalType\":\"struct VmSafe.StorageAccess[]\",\"name\":\"storageAccesses\",\"type\":\"tuple[]\"}],\"internalType\":\"struct VmSafe.AccountAccess[]\",\"name\":\"accountAccesses\",\"type\":\"tuple[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stopBroadcast\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stopMappingRecording\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"data\",\"type\":\"string\"}],\"name\":\"toBase64\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"toBase64\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"data\",\"type\":\"string\"}],\"name\":\"toBase64URL\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"toBase64URL\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"value\",\"type\":\"address\"}],\"name\":\"toString\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"stringifiedValue\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"toString\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"stringifiedValue\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"value\",\"type\":\"bytes\"}],\"name\":\"toString\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"stringifiedValue\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"value\",\"type\":\"bool\"}],\"name\":\"toString\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"stringifiedValue\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"value\",\"type\":\"int256\"}],\"name\":\"toString\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"stringifiedValue\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"value\",\"type\":\"bytes32\"}],\"name\":\"toString\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"stringifiedValue\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string[]\",\"name\":\"commandInput\",\"type\":\"string[]\"}],\"name\":\"tryFfi\",\"outputs\":[{\"components\":[{\"internalType\":\"int32\",\"name\":\"exitCode\",\"type\":\"int32\"},{\"internalType\":\"bytes\",\"name\":\"stdout\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"stderr\",\"type\":\"bytes\"}],\"internalType\":\"struct VmSafe.FfiResult\",\"name\":\"result\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unixTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"milliseconds\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"path\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"data\",\"type\":\"string\"}],\"name\":\"writeFile\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"path\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"writeFileBinary\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"path\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"valueKey\",\"type\":\"string\"}],\"name\":\"writeJson\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"path\",\"type\":\"string\"}],\"name\":\"writeJson\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"path\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"data\",\"type\":\"string\"}],\"name\":\"writeLine\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"accesses(address)\":{\"notice\":\"Gets all accessed reads and write slot from a `vm.record` session, for a given address.\"},\"addr(uint256)\":{\"notice\":\"Gets the address for a given private key.\"},\"assume(bool)\":{\"notice\":\"If the condition is false, discard this run's fuzz inputs and generate new ones.\"},\"breakpoint(string)\":{\"notice\":\"Writes a breakpoint to jump to in the debugger.\"},\"breakpoint(string,bool)\":{\"notice\":\"Writes a conditional breakpoint to jump to in the debugger.\"},\"broadcast()\":{\"notice\":\"Using the address that calls the test contract, has the next call (at this call depth only) create a transaction that can later be signed and sent onchain.\"},\"broadcast(address)\":{\"notice\":\"Has the next call (at this call depth only) create a transaction with the address provided as the sender that can later be signed and sent onchain.\"},\"broadcast(uint256)\":{\"notice\":\"Has the next call (at this call depth only) create a transaction with the private key provided as the sender that can later be signed and sent onchain.\"},\"closeFile(string)\":{\"notice\":\"Closes file for reading, resetting the offset and allowing to read it from beginning with readLine. `path` is relative to the project root.\"},\"computeCreate2Address(bytes32,bytes32)\":{\"notice\":\"Compute the address of a contract created with CREATE2 using the default CREATE2 deployer.\"},\"computeCreate2Address(bytes32,bytes32,address)\":{\"notice\":\"Compute the address of a contract created with CREATE2 using the given CREATE2 deployer.\"},\"computeCreateAddress(address,uint256)\":{\"notice\":\"Compute the address a contract will be deployed at for a given deployer address and nonce.\"},\"copyFile(string,string)\":{\"notice\":\"Copies the contents of one file to another. This function will **overwrite** the contents of `to`. On success, the total number of bytes copied is returned and it is equal to the length of the `to` file as reported by `metadata`. Both `from` and `to` are relative to the project root.\"},\"createDir(string,bool)\":{\"notice\":\"Creates a new, empty directory at the provided path. This cheatcode will revert in the following situations, but is not limited to just these cases: - User lacks permissions to modify `path`. - A parent of the given path doesn't exist and `recursive` is false. - `path` already exists and `recursive` is false. `path` is relative to the project root.\"},\"createWallet(string)\":{\"notice\":\"Derives a private key from the name, labels the account with that name, and returns the wallet.\"},\"createWallet(uint256)\":{\"notice\":\"Generates a wallet from the private key and returns the wallet.\"},\"createWallet(uint256,string)\":{\"notice\":\"Generates a wallet from the private key, labels the account with that name, and returns the wallet.\"},\"deriveKey(string,string,uint32)\":{\"notice\":\"Derive a private key from a provided mnenomic string (or mnenomic file path) at `{derivationPath}{index}`.\"},\"deriveKey(string,string,uint32,string)\":{\"notice\":\"Derive a private key from a provided mnenomic string (or mnenomic file path) in the specified language at `{derivationPath}{index}`.\"},\"deriveKey(string,uint32)\":{\"notice\":\"Derive a private key from a provided mnenomic string (or mnenomic file path) at the derivation path `m/44'/60'/0'/0/{index}`.\"},\"deriveKey(string,uint32,string)\":{\"notice\":\"Derive a private key from a provided mnenomic string (or mnenomic file path) in the specified language at the derivation path `m/44'/60'/0'/0/{index}`.\"},\"envAddress(string)\":{\"notice\":\"Gets the environment variable `name` and parses it as `address`. Reverts if the variable was not found or could not be parsed.\"},\"envAddress(string,string)\":{\"notice\":\"Gets the environment variable `name` and parses it as an array of `address`, delimited by `delim`. Reverts if the variable was not found or could not be parsed.\"},\"envBool(string)\":{\"notice\":\"Gets the environment variable `name` and parses it as `bool`. Reverts if the variable was not found or could not be parsed.\"},\"envBool(string,string)\":{\"notice\":\"Gets the environment variable `name` and parses it as an array of `bool`, delimited by `delim`. Reverts if the variable was not found or could not be parsed.\"},\"envBytes(string)\":{\"notice\":\"Gets the environment variable `name` and parses it as `bytes`. Reverts if the variable was not found or could not be parsed.\"},\"envBytes(string,string)\":{\"notice\":\"Gets the environment variable `name` and parses it as an array of `bytes`, delimited by `delim`. Reverts if the variable was not found or could not be parsed.\"},\"envBytes32(string)\":{\"notice\":\"Gets the environment variable `name` and parses it as `bytes32`. Reverts if the variable was not found or could not be parsed.\"},\"envBytes32(string,string)\":{\"notice\":\"Gets the environment variable `name` and parses it as an array of `bytes32`, delimited by `delim`. Reverts if the variable was not found or could not be parsed.\"},\"envInt(string)\":{\"notice\":\"Gets the environment variable `name` and parses it as `int256`. Reverts if the variable was not found or could not be parsed.\"},\"envInt(string,string)\":{\"notice\":\"Gets the environment variable `name` and parses it as an array of `int256`, delimited by `delim`. Reverts if the variable was not found or could not be parsed.\"},\"envOr(string,address)\":{\"notice\":\"Gets the environment variable `name` and parses it as `address`. Reverts if the variable could not be parsed. Returns `defaultValue` if the variable was not found.\"},\"envOr(string,bool)\":{\"notice\":\"Gets the environment variable `name` and parses it as `bool`. Reverts if the variable could not be parsed. Returns `defaultValue` if the variable was not found.\"},\"envOr(string,bytes)\":{\"notice\":\"Gets the environment variable `name` and parses it as `bytes`. Reverts if the variable could not be parsed. Returns `defaultValue` if the variable was not found.\"},\"envOr(string,bytes32)\":{\"notice\":\"Gets the environment variable `name` and parses it as `bytes32`. Reverts if the variable could not be parsed. Returns `defaultValue` if the variable was not found.\"},\"envOr(string,int256)\":{\"notice\":\"Gets the environment variable `name` and parses it as `int256`. Reverts if the variable could not be parsed. Returns `defaultValue` if the variable was not found.\"},\"envOr(string,string)\":{\"notice\":\"Gets the environment variable `name` and parses it as `string`. Reverts if the variable could not be parsed. Returns `defaultValue` if the variable was not found.\"},\"envOr(string,string,address[])\":{\"notice\":\"Gets the environment variable `name` and parses it as an array of `address`, delimited by `delim`. Reverts if the variable could not be parsed. Returns `defaultValue` if the variable was not found.\"},\"envOr(string,string,bool[])\":{\"notice\":\"Gets the environment variable `name` and parses it as an array of `bool`, delimited by `delim`. Reverts if the variable could not be parsed. Returns `defaultValue` if the variable was not found.\"},\"envOr(string,string,bytes32[])\":{\"notice\":\"Gets the environment variable `name` and parses it as an array of `bytes32`, delimited by `delim`. Reverts if the variable could not be parsed. Returns `defaultValue` if the variable was not found.\"},\"envOr(string,string,bytes[])\":{\"notice\":\"Gets the environment variable `name` and parses it as an array of `bytes`, delimited by `delim`. Reverts if the variable could not be parsed. Returns `defaultValue` if the variable was not found.\"},\"envOr(string,string,int256[])\":{\"notice\":\"Gets the environment variable `name` and parses it as an array of `int256`, delimited by `delim`. Reverts if the variable could not be parsed. Returns `defaultValue` if the variable was not found.\"},\"envOr(string,string,string[])\":{\"notice\":\"Gets the environment variable `name` and parses it as an array of `string`, delimited by `delim`. Reverts if the variable could not be parsed. Returns `defaultValue` if the variable was not found.\"},\"envOr(string,string,uint256[])\":{\"notice\":\"Gets the environment variable `name` and parses it as an array of `uint256`, delimited by `delim`. Reverts if the variable could not be parsed. Returns `defaultValue` if the variable was not found.\"},\"envOr(string,uint256)\":{\"notice\":\"Gets the environment variable `name` and parses it as `uint256`. Reverts if the variable could not be parsed. Returns `defaultValue` if the variable was not found.\"},\"envString(string)\":{\"notice\":\"Gets the environment variable `name` and parses it as `string`. Reverts if the variable was not found or could not be parsed.\"},\"envString(string,string)\":{\"notice\":\"Gets the environment variable `name` and parses it as an array of `string`, delimited by `delim`. Reverts if the variable was not found or could not be parsed.\"},\"envUint(string)\":{\"notice\":\"Gets the environment variable `name` and parses it as `uint256`. Reverts if the variable was not found or could not be parsed.\"},\"envUint(string,string)\":{\"notice\":\"Gets the environment variable `name` and parses it as an array of `uint256`, delimited by `delim`. Reverts if the variable was not found or could not be parsed.\"},\"eth_getLogs(uint256,uint256,address,bytes32[])\":{\"notice\":\"Gets all the logs according to specified filter.\"},\"exists(string)\":{\"notice\":\"Returns true if the given path points to an existing entity, else returns false.\"},\"ffi(string[])\":{\"notice\":\"Performs a foreign function call via the terminal.\"},\"fsMetadata(string)\":{\"notice\":\"Given a path, query the file system to get information about a file, directory, etc.\"},\"getBlockNumber()\":{\"notice\":\"Gets the current `block.number`. You should use this instead of `block.number` if you use `vm.roll`, as `block.number` is assumed to be constant across a transaction, and as a result will get optimized out by the compiler. See https://github.com/foundry-rs/foundry/issues/6180\"},\"getBlockTimestamp()\":{\"notice\":\"Gets the current `block.timestamp`. You should use this instead of `block.timestamp` if you use `vm.warp`, as `block.timestamp` is assumed to be constant across a transaction, and as a result will get optimized out by the compiler. See https://github.com/foundry-rs/foundry/issues/6180\"},\"getCode(string)\":{\"notice\":\"Gets the creation bytecode from an artifact file. Takes in the relative path to the json file.\"},\"getDeployedCode(string)\":{\"notice\":\"Gets the deployed bytecode from an artifact file. Takes in the relative path to the json file.\"},\"getLabel(address)\":{\"notice\":\"Gets the label for the specified address.\"},\"getMappingKeyAndParentOf(address,bytes32)\":{\"notice\":\"Gets the map key and parent of a mapping at a given slot, for a given address.\"},\"getMappingLength(address,bytes32)\":{\"notice\":\"Gets the number of elements in the mapping at the given slot, for a given address.\"},\"getMappingSlotAt(address,bytes32,uint256)\":{\"notice\":\"Gets the elements at index idx of the mapping at the given slot, for a given address. The index must be less than the length of the mapping (i.e. the number of keys in the mapping).\"},\"getNonce((address,uint256,uint256,uint256))\":{\"notice\":\"Get a `Wallet`'s nonce.\"},\"getNonce(address)\":{\"notice\":\"Gets the nonce of an account.\"},\"getRecordedLogs()\":{\"notice\":\"Gets all the recorded logs.\"},\"isDir(string)\":{\"notice\":\"Returns true if the path exists on disk and is pointing at a directory, else returns false.\"},\"isFile(string)\":{\"notice\":\"Returns true if the path exists on disk and is pointing at a regular file, else returns false.\"},\"keyExists(string,string)\":{\"notice\":\"Checks if `key` exists in a JSON object.\"},\"label(address,string)\":{\"notice\":\"Labels an address in call traces.\"},\"load(address,bytes32)\":{\"notice\":\"Loads a storage slot from an address.\"},\"parseAddress(string)\":{\"notice\":\"Parses the given `string` into an `address`.\"},\"parseBool(string)\":{\"notice\":\"Parses the given `string` into a `bool`.\"},\"parseBytes(string)\":{\"notice\":\"Parses the given `string` into `bytes`.\"},\"parseBytes32(string)\":{\"notice\":\"Parses the given `string` into a `bytes32`.\"},\"parseInt(string)\":{\"notice\":\"Parses the given `string` into a `int256`.\"},\"parseJson(string)\":{\"notice\":\"ABI-encodes a JSON object.\"},\"parseJson(string,string)\":{\"notice\":\"ABI-encodes a JSON object at `key`.\"},\"parseJsonAddress(string,string)\":{\"notice\":\"Parses a string of JSON data at `key` and coerces it to `address`.\"},\"parseJsonAddressArray(string,string)\":{\"notice\":\"Parses a string of JSON data at `key` and coerces it to `address[]`.\"},\"parseJsonBool(string,string)\":{\"notice\":\"Parses a string of JSON data at `key` and coerces it to `bool`.\"},\"parseJsonBoolArray(string,string)\":{\"notice\":\"Parses a string of JSON data at `key` and coerces it to `bool[]`.\"},\"parseJsonBytes(string,string)\":{\"notice\":\"Parses a string of JSON data at `key` and coerces it to `bytes`.\"},\"parseJsonBytes32(string,string)\":{\"notice\":\"Parses a string of JSON data at `key` and coerces it to `bytes32`.\"},\"parseJsonBytes32Array(string,string)\":{\"notice\":\"Parses a string of JSON data at `key` and coerces it to `bytes32[]`.\"},\"parseJsonBytesArray(string,string)\":{\"notice\":\"Parses a string of JSON data at `key` and coerces it to `bytes[]`.\"},\"parseJsonInt(string,string)\":{\"notice\":\"Parses a string of JSON data at `key` and coerces it to `int256`.\"},\"parseJsonIntArray(string,string)\":{\"notice\":\"Parses a string of JSON data at `key` and coerces it to `int256[]`.\"},\"parseJsonKeys(string,string)\":{\"notice\":\"Returns an array of all the keys in a JSON object.\"},\"parseJsonString(string,string)\":{\"notice\":\"Parses a string of JSON data at `key` and coerces it to `string`.\"},\"parseJsonStringArray(string,string)\":{\"notice\":\"Parses a string of JSON data at `key` and coerces it to `string[]`.\"},\"parseJsonUint(string,string)\":{\"notice\":\"Parses a string of JSON data at `key` and coerces it to `uint256`.\"},\"parseJsonUintArray(string,string)\":{\"notice\":\"Parses a string of JSON data at `key` and coerces it to `uint256[]`.\"},\"parseUint(string)\":{\"notice\":\"Parses the given `string` into a `uint256`.\"},\"pauseGasMetering()\":{\"notice\":\"Pauses gas metering (i.e. gas usage is not counted). Noop if already paused.\"},\"projectRoot()\":{\"notice\":\"Get the path of the current project root.\"},\"readDir(string)\":{\"notice\":\"Reads the directory at the given path recursively, up to `maxDepth`. `maxDepth` defaults to 1, meaning only the direct children of the given directory will be returned. Follows symbolic links if `followLinks` is true.\"},\"readDir(string,uint64)\":{\"notice\":\"See `readDir(string)`.\"},\"readDir(string,uint64,bool)\":{\"notice\":\"See `readDir(string)`.\"},\"readFile(string)\":{\"notice\":\"Reads the entire content of file to string. `path` is relative to the project root.\"},\"readFileBinary(string)\":{\"notice\":\"Reads the entire content of file as binary. `path` is relative to the project root.\"},\"readLine(string)\":{\"notice\":\"Reads next line of file to string.\"},\"readLink(string)\":{\"notice\":\"Reads a symbolic link, returning the path that the link points to. This cheatcode will revert in the following situations, but is not limited to just these cases: - `path` is not a symbolic link. - `path` does not exist.\"},\"record()\":{\"notice\":\"Records all storage reads and writes.\"},\"recordLogs()\":{\"notice\":\"Record all the transaction logs.\"},\"rememberKey(uint256)\":{\"notice\":\"Adds a private key to the local forge wallet and returns the address.\"},\"removeDir(string,bool)\":{\"notice\":\"Removes a directory at the provided path. This cheatcode will revert in the following situations, but is not limited to just these cases: - `path` doesn't exist. - `path` isn't a directory. - User lacks permissions to modify `path`. - The directory is not empty and `recursive` is false. `path` is relative to the project root.\"},\"removeFile(string)\":{\"notice\":\"Removes a file from the filesystem. This cheatcode will revert in the following situations, but is not limited to just these cases: - `path` points to a directory. - The file doesn't exist. - The user lacks permissions to remove the file. `path` is relative to the project root.\"},\"resumeGasMetering()\":{\"notice\":\"Resumes gas metering (i.e. gas usage is counted again). Noop if already on.\"},\"rpc(string,string)\":{\"notice\":\"Performs an Ethereum JSON-RPC request to the current fork URL.\"},\"rpcUrl(string)\":{\"notice\":\"Returns the RPC url for the given alias.\"},\"rpcUrlStructs()\":{\"notice\":\"Returns all rpc urls and their aliases as structs.\"},\"rpcUrls()\":{\"notice\":\"Returns all rpc urls and their aliases `[alias, url][]`.\"},\"serializeAddress(string,string,address)\":{\"notice\":\"See `serializeJson`.\"},\"serializeAddress(string,string,address[])\":{\"notice\":\"See `serializeJson`.\"},\"serializeBool(string,string,bool)\":{\"notice\":\"See `serializeJson`.\"},\"serializeBool(string,string,bool[])\":{\"notice\":\"See `serializeJson`.\"},\"serializeBytes(string,string,bytes)\":{\"notice\":\"See `serializeJson`.\"},\"serializeBytes(string,string,bytes[])\":{\"notice\":\"See `serializeJson`.\"},\"serializeBytes32(string,string,bytes32)\":{\"notice\":\"See `serializeJson`.\"},\"serializeBytes32(string,string,bytes32[])\":{\"notice\":\"See `serializeJson`.\"},\"serializeInt(string,string,int256)\":{\"notice\":\"See `serializeJson`.\"},\"serializeInt(string,string,int256[])\":{\"notice\":\"See `serializeJson`.\"},\"serializeJson(string,string)\":{\"notice\":\"Serializes a key and value to a JSON object stored in-memory that can be later written to a file. Returns the stringified version of the specific JSON file up to that moment.\"},\"serializeString(string,string,string)\":{\"notice\":\"See `serializeJson`.\"},\"serializeString(string,string,string[])\":{\"notice\":\"See `serializeJson`.\"},\"serializeUint(string,string,uint256)\":{\"notice\":\"See `serializeJson`.\"},\"serializeUint(string,string,uint256[])\":{\"notice\":\"See `serializeJson`.\"},\"setEnv(string,string)\":{\"notice\":\"Sets environment variables.\"},\"sign((address,uint256,uint256,uint256),bytes32)\":{\"notice\":\"Signs data with a `Wallet`.\"},\"sign(uint256,bytes32)\":{\"notice\":\"Signs `digest` with `privateKey` using the secp256k1 curve.\"},\"signP256(uint256,bytes32)\":{\"notice\":\"Signs `digest` with `privateKey` using the secp256r1 curve.\"},\"sleep(uint256)\":{\"notice\":\"Suspends execution of the main thread for `duration` milliseconds.\"},\"startBroadcast()\":{\"notice\":\"Using the address that calls the test contract, has all subsequent calls (at this call depth only) create transactions that can later be signed and sent onchain.\"},\"startBroadcast(address)\":{\"notice\":\"Has all subsequent calls (at this call depth only) create transactions with the address provided that can later be signed and sent onchain.\"},\"startBroadcast(uint256)\":{\"notice\":\"Has all subsequent calls (at this call depth only) create transactions with the private key provided that can later be signed and sent onchain.\"},\"startMappingRecording()\":{\"notice\":\"Starts recording all map SSTOREs for later retrieval.\"},\"startStateDiffRecording()\":{\"notice\":\"Record all account accesses as part of CREATE, CALL or SELFDESTRUCT opcodes in order, along with the context of the calls\"},\"stopAndReturnStateDiff()\":{\"notice\":\"Returns an ordered array of all account accesses from a `vm.startStateDiffRecording` session.\"},\"stopBroadcast()\":{\"notice\":\"Stops collecting onchain transactions.\"},\"stopMappingRecording()\":{\"notice\":\"Stops recording all map SSTOREs for later retrieval and clears the recorded data.\"},\"toBase64(bytes)\":{\"notice\":\"Encodes a `bytes` value to a base64 string.\"},\"toBase64(string)\":{\"notice\":\"Encodes a `string` value to a base64 string.\"},\"toBase64URL(bytes)\":{\"notice\":\"Encodes a `bytes` value to a base64url string.\"},\"toBase64URL(string)\":{\"notice\":\"Encodes a `string` value to a base64url string.\"},\"toString(address)\":{\"notice\":\"Converts the given value to a `string`.\"},\"toString(bool)\":{\"notice\":\"Converts the given value to a `string`.\"},\"toString(bytes)\":{\"notice\":\"Converts the given value to a `string`.\"},\"toString(bytes32)\":{\"notice\":\"Converts the given value to a `string`.\"},\"toString(int256)\":{\"notice\":\"Converts the given value to a `string`.\"},\"toString(uint256)\":{\"notice\":\"Converts the given value to a `string`.\"},\"tryFfi(string[])\":{\"notice\":\"Performs a foreign function call via terminal and returns the exit code, stdout, and stderr.\"},\"unixTime()\":{\"notice\":\"Returns the time since unix epoch in milliseconds.\"},\"writeFile(string,string)\":{\"notice\":\"Writes data to file, creating a file if it does not exist, and entirely replacing its contents if it does. `path` is relative to the project root.\"},\"writeFileBinary(string,bytes)\":{\"notice\":\"Writes binary data to a file, creating a file if it does not exist, and entirely replacing its contents if it does. `path` is relative to the project root.\"},\"writeJson(string,string)\":{\"notice\":\"Write a serialized JSON object to a file. If the file exists, it will be overwritten.\"},\"writeJson(string,string,string)\":{\"notice\":\"Write a serialized JSON object to an **existing** JSON file, replacing a value with key = This is useful to replace a specific value of a JSON file, without having to parse the entire thing.\"},\"writeLine(string,string)\":{\"notice\":\"Writes line to file, creating a file if it does not exist. `path` is relative to the project root.\"}},\"notice\":\"The `VmSafe` interface does not allow manipulation of the EVM state or other actions that may result in Script simulations differing from on-chain execution. It is recommended to only use these cheats in scripts.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Vm.sol\":\"VmSafe\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Vm.sol\":{\"keccak256\":\"0x87ba9f3edc254e529db9e3129c954391adcc7fc8574203767979d8d2f1e724b9\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://4d16c08d80d9f2869deb6350642cf5af624d21fce6b3b023abbcdedc62e195fe\",\"dweb:/ipfs/QmURpnnFECPKt3i7P7jQRZpr4ZBXjRGcZ9KzcbKzsgYR2W\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { - "inputs": [ - { "internalType": "address", "name": "target", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "accesses", - "outputs": [ - { - "internalType": "bytes32[]", - "name": "readSlots", - "type": "bytes32[]" - }, - { - "internalType": "bytes32[]", - "name": "writeSlots", - "type": "bytes32[]" - } - ] - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "privateKey", - "type": "uint256" - } - ], - "stateMutability": "pure", - "type": "function", - "name": "addr", - "outputs": [ - { "internalType": "address", "name": "keyAddr", "type": "address" } - ] - }, - { - "inputs": [ - { "internalType": "bool", "name": "condition", "type": "bool" } - ], - "stateMutability": "pure", - "type": "function", - "name": "assume" - }, - { - "inputs": [ - { "internalType": "string", "name": "char", "type": "string" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "breakpoint" - }, - { - "inputs": [ - { "internalType": "string", "name": "char", "type": "string" }, - { "internalType": "bool", "name": "value", "type": "bool" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "breakpoint" - }, - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "function", - "name": "broadcast" - }, - { - "inputs": [ - { "internalType": "address", "name": "signer", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "broadcast" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "privateKey", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "broadcast" - }, - { - "inputs": [ - { "internalType": "string", "name": "path", "type": "string" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "closeFile" - }, - { - "inputs": [ - { "internalType": "bytes32", "name": "salt", "type": "bytes32" }, - { - "internalType": "bytes32", - "name": "initCodeHash", - "type": "bytes32" - } - ], - "stateMutability": "pure", - "type": "function", - "name": "computeCreate2Address", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ] - }, - { - "inputs": [ - { "internalType": "bytes32", "name": "salt", "type": "bytes32" }, - { - "internalType": "bytes32", - "name": "initCodeHash", - "type": "bytes32" - }, - { "internalType": "address", "name": "deployer", "type": "address" } - ], - "stateMutability": "pure", - "type": "function", - "name": "computeCreate2Address", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ] - }, - { - "inputs": [ - { - "internalType": "address", - "name": "deployer", - "type": "address" - }, - { "internalType": "uint256", "name": "nonce", "type": "uint256" } - ], - "stateMutability": "pure", - "type": "function", - "name": "computeCreateAddress", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "from", "type": "string" }, - { "internalType": "string", "name": "to", "type": "string" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "copyFile", - "outputs": [ - { "internalType": "uint64", "name": "copied", "type": "uint64" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "path", "type": "string" }, - { "internalType": "bool", "name": "recursive", "type": "bool" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "createDir" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "walletLabel", - "type": "string" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "createWallet", - "outputs": [ - { - "internalType": "struct VmSafe.Wallet", - "name": "wallet", - "type": "tuple", - "components": [ - { - "internalType": "address", - "name": "addr", - "type": "address" - }, - { - "internalType": "uint256", - "name": "publicKeyX", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "publicKeyY", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "privateKey", - "type": "uint256" - } - ] - } - ] - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "privateKey", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "createWallet", - "outputs": [ - { - "internalType": "struct VmSafe.Wallet", - "name": "wallet", - "type": "tuple", - "components": [ - { - "internalType": "address", - "name": "addr", - "type": "address" - }, - { - "internalType": "uint256", - "name": "publicKeyX", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "publicKeyY", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "privateKey", - "type": "uint256" - } - ] - } - ] - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "privateKey", - "type": "uint256" - }, - { - "internalType": "string", - "name": "walletLabel", - "type": "string" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "createWallet", - "outputs": [ - { - "internalType": "struct VmSafe.Wallet", - "name": "wallet", - "type": "tuple", - "components": [ - { - "internalType": "address", - "name": "addr", - "type": "address" - }, - { - "internalType": "uint256", - "name": "publicKeyX", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "publicKeyY", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "privateKey", - "type": "uint256" - } - ] - } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "mnemonic", "type": "string" }, - { - "internalType": "string", - "name": "derivationPath", - "type": "string" - }, - { "internalType": "uint32", "name": "index", "type": "uint32" }, - { "internalType": "string", "name": "language", "type": "string" } - ], - "stateMutability": "pure", - "type": "function", - "name": "deriveKey", - "outputs": [ - { - "internalType": "uint256", - "name": "privateKey", - "type": "uint256" - } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "mnemonic", "type": "string" }, - { "internalType": "uint32", "name": "index", "type": "uint32" }, - { "internalType": "string", "name": "language", "type": "string" } - ], - "stateMutability": "pure", - "type": "function", - "name": "deriveKey", - "outputs": [ - { - "internalType": "uint256", - "name": "privateKey", - "type": "uint256" - } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "mnemonic", "type": "string" }, - { "internalType": "uint32", "name": "index", "type": "uint32" } - ], - "stateMutability": "pure", - "type": "function", - "name": "deriveKey", - "outputs": [ - { - "internalType": "uint256", - "name": "privateKey", - "type": "uint256" - } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "mnemonic", "type": "string" }, - { - "internalType": "string", - "name": "derivationPath", - "type": "string" - }, - { "internalType": "uint32", "name": "index", "type": "uint32" } - ], - "stateMutability": "pure", - "type": "function", - "name": "deriveKey", - "outputs": [ - { - "internalType": "uint256", - "name": "privateKey", - "type": "uint256" - } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "name", "type": "string" } - ], - "stateMutability": "view", - "type": "function", - "name": "envAddress", - "outputs": [ - { "internalType": "address", "name": "value", "type": "address" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "name", "type": "string" }, - { "internalType": "string", "name": "delim", "type": "string" } - ], - "stateMutability": "view", - "type": "function", - "name": "envAddress", - "outputs": [ - { - "internalType": "address[]", - "name": "value", - "type": "address[]" - } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "name", "type": "string" } - ], - "stateMutability": "view", - "type": "function", - "name": "envBool", - "outputs": [ - { "internalType": "bool", "name": "value", "type": "bool" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "name", "type": "string" }, - { "internalType": "string", "name": "delim", "type": "string" } - ], - "stateMutability": "view", - "type": "function", - "name": "envBool", - "outputs": [ - { "internalType": "bool[]", "name": "value", "type": "bool[]" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "name", "type": "string" } - ], - "stateMutability": "view", - "type": "function", - "name": "envBytes", - "outputs": [ - { "internalType": "bytes", "name": "value", "type": "bytes" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "name", "type": "string" }, - { "internalType": "string", "name": "delim", "type": "string" } - ], - "stateMutability": "view", - "type": "function", - "name": "envBytes", - "outputs": [ - { "internalType": "bytes[]", "name": "value", "type": "bytes[]" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "name", "type": "string" }, - { "internalType": "string", "name": "delim", "type": "string" } - ], - "stateMutability": "view", - "type": "function", - "name": "envBytes32", - "outputs": [ - { - "internalType": "bytes32[]", - "name": "value", - "type": "bytes32[]" - } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "name", "type": "string" } - ], - "stateMutability": "view", - "type": "function", - "name": "envBytes32", - "outputs": [ - { "internalType": "bytes32", "name": "value", "type": "bytes32" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "name", "type": "string" }, - { "internalType": "string", "name": "delim", "type": "string" } - ], - "stateMutability": "view", - "type": "function", - "name": "envInt", - "outputs": [ - { "internalType": "int256[]", "name": "value", "type": "int256[]" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "name", "type": "string" } - ], - "stateMutability": "view", - "type": "function", - "name": "envInt", - "outputs": [ - { "internalType": "int256", "name": "value", "type": "int256" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "name", "type": "string" }, - { "internalType": "string", "name": "delim", "type": "string" }, - { - "internalType": "bytes32[]", - "name": "defaultValue", - "type": "bytes32[]" - } - ], - "stateMutability": "view", - "type": "function", - "name": "envOr", - "outputs": [ - { - "internalType": "bytes32[]", - "name": "value", - "type": "bytes32[]" - } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "name", "type": "string" }, - { "internalType": "string", "name": "delim", "type": "string" }, - { - "internalType": "int256[]", - "name": "defaultValue", - "type": "int256[]" - } - ], - "stateMutability": "view", - "type": "function", - "name": "envOr", - "outputs": [ - { "internalType": "int256[]", "name": "value", "type": "int256[]" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "name", "type": "string" }, - { "internalType": "bool", "name": "defaultValue", "type": "bool" } - ], - "stateMutability": "view", - "type": "function", - "name": "envOr", - "outputs": [ - { "internalType": "bool", "name": "value", "type": "bool" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "name", "type": "string" }, - { - "internalType": "address", - "name": "defaultValue", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function", - "name": "envOr", - "outputs": [ - { "internalType": "address", "name": "value", "type": "address" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "name", "type": "string" }, - { - "internalType": "uint256", - "name": "defaultValue", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function", - "name": "envOr", - "outputs": [ - { "internalType": "uint256", "name": "value", "type": "uint256" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "name", "type": "string" }, - { "internalType": "string", "name": "delim", "type": "string" }, - { - "internalType": "bytes[]", - "name": "defaultValue", - "type": "bytes[]" - } - ], - "stateMutability": "view", - "type": "function", - "name": "envOr", - "outputs": [ - { "internalType": "bytes[]", "name": "value", "type": "bytes[]" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "name", "type": "string" }, - { "internalType": "string", "name": "delim", "type": "string" }, - { - "internalType": "uint256[]", - "name": "defaultValue", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function", - "name": "envOr", - "outputs": [ - { - "internalType": "uint256[]", - "name": "value", - "type": "uint256[]" - } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "name", "type": "string" }, - { "internalType": "string", "name": "delim", "type": "string" }, - { - "internalType": "string[]", - "name": "defaultValue", - "type": "string[]" - } - ], - "stateMutability": "view", - "type": "function", - "name": "envOr", - "outputs": [ - { "internalType": "string[]", "name": "value", "type": "string[]" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "name", "type": "string" }, - { "internalType": "bytes", "name": "defaultValue", "type": "bytes" } - ], - "stateMutability": "view", - "type": "function", - "name": "envOr", - "outputs": [ - { "internalType": "bytes", "name": "value", "type": "bytes" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "name", "type": "string" }, - { - "internalType": "bytes32", - "name": "defaultValue", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function", - "name": "envOr", - "outputs": [ - { "internalType": "bytes32", "name": "value", "type": "bytes32" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "name", "type": "string" }, - { - "internalType": "int256", - "name": "defaultValue", - "type": "int256" - } - ], - "stateMutability": "view", - "type": "function", - "name": "envOr", - "outputs": [ - { "internalType": "int256", "name": "value", "type": "int256" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "name", "type": "string" }, - { "internalType": "string", "name": "delim", "type": "string" }, - { - "internalType": "address[]", - "name": "defaultValue", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function", - "name": "envOr", - "outputs": [ - { - "internalType": "address[]", - "name": "value", - "type": "address[]" - } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "name", "type": "string" }, - { - "internalType": "string", - "name": "defaultValue", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function", - "name": "envOr", - "outputs": [ - { "internalType": "string", "name": "value", "type": "string" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "name", "type": "string" }, - { "internalType": "string", "name": "delim", "type": "string" }, - { - "internalType": "bool[]", - "name": "defaultValue", - "type": "bool[]" - } - ], - "stateMutability": "view", - "type": "function", - "name": "envOr", - "outputs": [ - { "internalType": "bool[]", "name": "value", "type": "bool[]" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "name", "type": "string" }, - { "internalType": "string", "name": "delim", "type": "string" } - ], - "stateMutability": "view", - "type": "function", - "name": "envString", - "outputs": [ - { "internalType": "string[]", "name": "value", "type": "string[]" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "name", "type": "string" } - ], - "stateMutability": "view", - "type": "function", - "name": "envString", - "outputs": [ - { "internalType": "string", "name": "value", "type": "string" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "name", "type": "string" } - ], - "stateMutability": "view", - "type": "function", - "name": "envUint", - "outputs": [ - { "internalType": "uint256", "name": "value", "type": "uint256" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "name", "type": "string" }, - { "internalType": "string", "name": "delim", "type": "string" } - ], - "stateMutability": "view", - "type": "function", - "name": "envUint", - "outputs": [ - { - "internalType": "uint256[]", - "name": "value", - "type": "uint256[]" - } - ] - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "fromBlock", - "type": "uint256" - }, - { "internalType": "uint256", "name": "toBlock", "type": "uint256" }, - { "internalType": "address", "name": "target", "type": "address" }, - { - "internalType": "bytes32[]", - "name": "topics", - "type": "bytes32[]" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "eth_getLogs", - "outputs": [ - { - "internalType": "struct VmSafe.EthGetLogs[]", - "name": "logs", - "type": "tuple[]", - "components": [ - { - "internalType": "address", - "name": "emitter", - "type": "address" - }, - { - "internalType": "bytes32[]", - "name": "topics", - "type": "bytes32[]" - }, - { "internalType": "bytes", "name": "data", "type": "bytes" }, - { - "internalType": "bytes32", - "name": "blockHash", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "blockNumber", - "type": "uint64" - }, - { - "internalType": "bytes32", - "name": "transactionHash", - "type": "bytes32" - }, - { - "internalType": "uint64", - "name": "transactionIndex", - "type": "uint64" - }, - { - "internalType": "uint256", - "name": "logIndex", - "type": "uint256" - }, - { "internalType": "bool", "name": "removed", "type": "bool" } - ] - } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "path", "type": "string" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "exists", - "outputs": [ - { "internalType": "bool", "name": "result", "type": "bool" } - ] - }, - { - "inputs": [ - { - "internalType": "string[]", - "name": "commandInput", - "type": "string[]" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "ffi", - "outputs": [ - { "internalType": "bytes", "name": "result", "type": "bytes" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "path", "type": "string" } - ], - "stateMutability": "view", - "type": "function", - "name": "fsMetadata", - "outputs": [ - { - "internalType": "struct VmSafe.FsMetadata", - "name": "metadata", - "type": "tuple", - "components": [ - { "internalType": "bool", "name": "isDir", "type": "bool" }, - { "internalType": "bool", "name": "isSymlink", "type": "bool" }, - { - "internalType": "uint256", - "name": "length", - "type": "uint256" - }, - { "internalType": "bool", "name": "readOnly", "type": "bool" }, - { - "internalType": "uint256", - "name": "modified", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "accessed", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "created", - "type": "uint256" - } - ] - } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "getBlockNumber", - "outputs": [ - { "internalType": "uint256", "name": "height", "type": "uint256" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "getBlockTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "timestamp", - "type": "uint256" - } - ] - }, - { - "inputs": [ - { - "internalType": "string", - "name": "artifactPath", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function", - "name": "getCode", - "outputs": [ - { - "internalType": "bytes", - "name": "creationBytecode", - "type": "bytes" - } - ] - }, - { - "inputs": [ - { - "internalType": "string", - "name": "artifactPath", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function", - "name": "getDeployedCode", - "outputs": [ - { - "internalType": "bytes", - "name": "runtimeBytecode", - "type": "bytes" - } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "getLabel", - "outputs": [ - { - "internalType": "string", - "name": "currentLabel", - "type": "string" - } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "target", "type": "address" }, - { - "internalType": "bytes32", - "name": "elementSlot", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "getMappingKeyAndParentOf", - "outputs": [ - { "internalType": "bool", "name": "found", "type": "bool" }, - { "internalType": "bytes32", "name": "key", "type": "bytes32" }, - { "internalType": "bytes32", "name": "parent", "type": "bytes32" } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "target", "type": "address" }, - { - "internalType": "bytes32", - "name": "mappingSlot", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "getMappingLength", - "outputs": [ - { "internalType": "uint256", "name": "length", "type": "uint256" } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "target", "type": "address" }, - { - "internalType": "bytes32", - "name": "mappingSlot", - "type": "bytes32" - }, - { "internalType": "uint256", "name": "idx", "type": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "getMappingSlotAt", - "outputs": [ - { "internalType": "bytes32", "name": "value", "type": "bytes32" } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "getNonce", - "outputs": [ - { "internalType": "uint64", "name": "nonce", "type": "uint64" } - ] - }, - { - "inputs": [ - { - "internalType": "struct VmSafe.Wallet", - "name": "wallet", - "type": "tuple", - "components": [ - { - "internalType": "address", - "name": "addr", - "type": "address" - }, - { - "internalType": "uint256", - "name": "publicKeyX", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "publicKeyY", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "privateKey", - "type": "uint256" - } - ] - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "getNonce", - "outputs": [ - { "internalType": "uint64", "name": "nonce", "type": "uint64" } - ] - }, - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "function", - "name": "getRecordedLogs", - "outputs": [ - { - "internalType": "struct VmSafe.Log[]", - "name": "logs", - "type": "tuple[]", - "components": [ - { - "internalType": "bytes32[]", - "name": "topics", - "type": "bytes32[]" - }, - { "internalType": "bytes", "name": "data", "type": "bytes" }, - { - "internalType": "address", - "name": "emitter", - "type": "address" - } - ] - } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "path", "type": "string" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "isDir", - "outputs": [ - { "internalType": "bool", "name": "result", "type": "bool" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "path", "type": "string" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "isFile", - "outputs": [ - { "internalType": "bool", "name": "result", "type": "bool" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "json", "type": "string" }, - { "internalType": "string", "name": "key", "type": "string" } - ], - "stateMutability": "view", - "type": "function", - "name": "keyExists", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" }, - { "internalType": "string", "name": "newLabel", "type": "string" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "label" - }, - { - "inputs": [ - { "internalType": "address", "name": "target", "type": "address" }, - { "internalType": "bytes32", "name": "slot", "type": "bytes32" } - ], - "stateMutability": "view", - "type": "function", - "name": "load", - "outputs": [ - { "internalType": "bytes32", "name": "data", "type": "bytes32" } - ] - }, - { - "inputs": [ - { - "internalType": "string", - "name": "stringifiedValue", - "type": "string" - } - ], - "stateMutability": "pure", - "type": "function", - "name": "parseAddress", - "outputs": [ - { - "internalType": "address", - "name": "parsedValue", - "type": "address" - } - ] - }, - { - "inputs": [ - { - "internalType": "string", - "name": "stringifiedValue", - "type": "string" - } - ], - "stateMutability": "pure", - "type": "function", - "name": "parseBool", - "outputs": [ - { "internalType": "bool", "name": "parsedValue", "type": "bool" } - ] - }, - { - "inputs": [ - { - "internalType": "string", - "name": "stringifiedValue", - "type": "string" - } - ], - "stateMutability": "pure", - "type": "function", - "name": "parseBytes", - "outputs": [ - { "internalType": "bytes", "name": "parsedValue", "type": "bytes" } - ] - }, - { - "inputs": [ - { - "internalType": "string", - "name": "stringifiedValue", - "type": "string" - } - ], - "stateMutability": "pure", - "type": "function", - "name": "parseBytes32", - "outputs": [ - { - "internalType": "bytes32", - "name": "parsedValue", - "type": "bytes32" - } - ] - }, - { - "inputs": [ - { - "internalType": "string", - "name": "stringifiedValue", - "type": "string" - } - ], - "stateMutability": "pure", - "type": "function", - "name": "parseInt", - "outputs": [ - { - "internalType": "int256", - "name": "parsedValue", - "type": "int256" - } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "json", "type": "string" } - ], - "stateMutability": "pure", - "type": "function", - "name": "parseJson", - "outputs": [ - { - "internalType": "bytes", - "name": "abiEncodedData", - "type": "bytes" - } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "json", "type": "string" }, - { "internalType": "string", "name": "key", "type": "string" } - ], - "stateMutability": "pure", - "type": "function", - "name": "parseJson", - "outputs": [ - { - "internalType": "bytes", - "name": "abiEncodedData", - "type": "bytes" - } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "json", "type": "string" }, - { "internalType": "string", "name": "key", "type": "string" } - ], - "stateMutability": "pure", - "type": "function", - "name": "parseJsonAddress", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "json", "type": "string" }, - { "internalType": "string", "name": "key", "type": "string" } - ], - "stateMutability": "pure", - "type": "function", - "name": "parseJsonAddressArray", - "outputs": [ - { "internalType": "address[]", "name": "", "type": "address[]" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "json", "type": "string" }, - { "internalType": "string", "name": "key", "type": "string" } - ], - "stateMutability": "pure", - "type": "function", - "name": "parseJsonBool", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "string", "name": "json", "type": "string" }, - { "internalType": "string", "name": "key", "type": "string" } - ], - "stateMutability": "pure", - "type": "function", - "name": "parseJsonBoolArray", - "outputs": [ - { "internalType": "bool[]", "name": "", "type": "bool[]" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "json", "type": "string" }, - { "internalType": "string", "name": "key", "type": "string" } - ], - "stateMutability": "pure", - "type": "function", - "name": "parseJsonBytes", - "outputs": [{ "internalType": "bytes", "name": "", "type": "bytes" }] - }, - { - "inputs": [ - { "internalType": "string", "name": "json", "type": "string" }, - { "internalType": "string", "name": "key", "type": "string" } - ], - "stateMutability": "pure", - "type": "function", - "name": "parseJsonBytes32", - "outputs": [ - { "internalType": "bytes32", "name": "", "type": "bytes32" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "json", "type": "string" }, - { "internalType": "string", "name": "key", "type": "string" } - ], - "stateMutability": "pure", - "type": "function", - "name": "parseJsonBytes32Array", - "outputs": [ - { "internalType": "bytes32[]", "name": "", "type": "bytes32[]" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "json", "type": "string" }, - { "internalType": "string", "name": "key", "type": "string" } - ], - "stateMutability": "pure", - "type": "function", - "name": "parseJsonBytesArray", - "outputs": [ - { "internalType": "bytes[]", "name": "", "type": "bytes[]" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "json", "type": "string" }, - { "internalType": "string", "name": "key", "type": "string" } - ], - "stateMutability": "pure", - "type": "function", - "name": "parseJsonInt", - "outputs": [ - { "internalType": "int256", "name": "", "type": "int256" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "json", "type": "string" }, - { "internalType": "string", "name": "key", "type": "string" } - ], - "stateMutability": "pure", - "type": "function", - "name": "parseJsonIntArray", - "outputs": [ - { "internalType": "int256[]", "name": "", "type": "int256[]" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "json", "type": "string" }, - { "internalType": "string", "name": "key", "type": "string" } - ], - "stateMutability": "pure", - "type": "function", - "name": "parseJsonKeys", - "outputs": [ - { "internalType": "string[]", "name": "keys", "type": "string[]" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "json", "type": "string" }, - { "internalType": "string", "name": "key", "type": "string" } - ], - "stateMutability": "pure", - "type": "function", - "name": "parseJsonString", - "outputs": [ - { "internalType": "string", "name": "", "type": "string" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "json", "type": "string" }, - { "internalType": "string", "name": "key", "type": "string" } - ], - "stateMutability": "pure", - "type": "function", - "name": "parseJsonStringArray", - "outputs": [ - { "internalType": "string[]", "name": "", "type": "string[]" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "json", "type": "string" }, - { "internalType": "string", "name": "key", "type": "string" } - ], - "stateMutability": "pure", - "type": "function", - "name": "parseJsonUint", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "json", "type": "string" }, - { "internalType": "string", "name": "key", "type": "string" } - ], - "stateMutability": "pure", - "type": "function", - "name": "parseJsonUintArray", - "outputs": [ - { "internalType": "uint256[]", "name": "", "type": "uint256[]" } - ] - }, - { - "inputs": [ - { - "internalType": "string", - "name": "stringifiedValue", - "type": "string" - } - ], - "stateMutability": "pure", - "type": "function", - "name": "parseUint", - "outputs": [ - { - "internalType": "uint256", - "name": "parsedValue", - "type": "uint256" - } - ] - }, - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "function", - "name": "pauseGasMetering" - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "projectRoot", - "outputs": [ - { "internalType": "string", "name": "path", "type": "string" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "path", "type": "string" }, - { "internalType": "uint64", "name": "maxDepth", "type": "uint64" } - ], - "stateMutability": "view", - "type": "function", - "name": "readDir", - "outputs": [ - { - "internalType": "struct VmSafe.DirEntry[]", - "name": "entries", - "type": "tuple[]", - "components": [ - { - "internalType": "string", - "name": "errorMessage", - "type": "string" - }, - { "internalType": "string", "name": "path", "type": "string" }, - { "internalType": "uint64", "name": "depth", "type": "uint64" }, - { "internalType": "bool", "name": "isDir", "type": "bool" }, - { "internalType": "bool", "name": "isSymlink", "type": "bool" } - ] - } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "path", "type": "string" }, - { "internalType": "uint64", "name": "maxDepth", "type": "uint64" }, - { "internalType": "bool", "name": "followLinks", "type": "bool" } - ], - "stateMutability": "view", - "type": "function", - "name": "readDir", - "outputs": [ - { - "internalType": "struct VmSafe.DirEntry[]", - "name": "entries", - "type": "tuple[]", - "components": [ - { - "internalType": "string", - "name": "errorMessage", - "type": "string" - }, - { "internalType": "string", "name": "path", "type": "string" }, - { "internalType": "uint64", "name": "depth", "type": "uint64" }, - { "internalType": "bool", "name": "isDir", "type": "bool" }, - { "internalType": "bool", "name": "isSymlink", "type": "bool" } - ] - } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "path", "type": "string" } - ], - "stateMutability": "view", - "type": "function", - "name": "readDir", - "outputs": [ - { - "internalType": "struct VmSafe.DirEntry[]", - "name": "entries", - "type": "tuple[]", - "components": [ - { - "internalType": "string", - "name": "errorMessage", - "type": "string" - }, - { "internalType": "string", "name": "path", "type": "string" }, - { "internalType": "uint64", "name": "depth", "type": "uint64" }, - { "internalType": "bool", "name": "isDir", "type": "bool" }, - { "internalType": "bool", "name": "isSymlink", "type": "bool" } - ] - } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "path", "type": "string" } - ], - "stateMutability": "view", - "type": "function", - "name": "readFile", - "outputs": [ - { "internalType": "string", "name": "data", "type": "string" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "path", "type": "string" } - ], - "stateMutability": "view", - "type": "function", - "name": "readFileBinary", - "outputs": [ - { "internalType": "bytes", "name": "data", "type": "bytes" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "path", "type": "string" } - ], - "stateMutability": "view", - "type": "function", - "name": "readLine", - "outputs": [ - { "internalType": "string", "name": "line", "type": "string" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "linkPath", "type": "string" } - ], - "stateMutability": "view", - "type": "function", - "name": "readLink", - "outputs": [ - { "internalType": "string", "name": "targetPath", "type": "string" } - ] - }, - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "function", - "name": "record" - }, - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "function", - "name": "recordLogs" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "privateKey", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "rememberKey", - "outputs": [ - { "internalType": "address", "name": "keyAddr", "type": "address" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "path", "type": "string" }, - { "internalType": "bool", "name": "recursive", "type": "bool" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "removeDir" - }, - { - "inputs": [ - { "internalType": "string", "name": "path", "type": "string" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "removeFile" - }, - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "function", - "name": "resumeGasMetering" - }, - { - "inputs": [ - { "internalType": "string", "name": "method", "type": "string" }, - { "internalType": "string", "name": "params", "type": "string" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "rpc", - "outputs": [ - { "internalType": "bytes", "name": "data", "type": "bytes" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "rpcAlias", "type": "string" } - ], - "stateMutability": "view", - "type": "function", - "name": "rpcUrl", - "outputs": [ - { "internalType": "string", "name": "json", "type": "string" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "rpcUrlStructs", - "outputs": [ - { - "internalType": "struct VmSafe.Rpc[]", - "name": "urls", - "type": "tuple[]", - "components": [ - { "internalType": "string", "name": "key", "type": "string" }, - { "internalType": "string", "name": "url", "type": "string" } - ] - } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "rpcUrls", - "outputs": [ - { - "internalType": "string[2][]", - "name": "urls", - "type": "string[2][]" - } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "objectKey", "type": "string" }, - { "internalType": "string", "name": "valueKey", "type": "string" }, - { - "internalType": "address[]", - "name": "values", - "type": "address[]" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "serializeAddress", - "outputs": [ - { "internalType": "string", "name": "json", "type": "string" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "objectKey", "type": "string" }, - { "internalType": "string", "name": "valueKey", "type": "string" }, - { "internalType": "address", "name": "value", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "serializeAddress", - "outputs": [ - { "internalType": "string", "name": "json", "type": "string" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "objectKey", "type": "string" }, - { "internalType": "string", "name": "valueKey", "type": "string" }, - { "internalType": "bool[]", "name": "values", "type": "bool[]" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "serializeBool", - "outputs": [ - { "internalType": "string", "name": "json", "type": "string" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "objectKey", "type": "string" }, - { "internalType": "string", "name": "valueKey", "type": "string" }, - { "internalType": "bool", "name": "value", "type": "bool" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "serializeBool", - "outputs": [ - { "internalType": "string", "name": "json", "type": "string" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "objectKey", "type": "string" }, - { "internalType": "string", "name": "valueKey", "type": "string" }, - { "internalType": "bytes[]", "name": "values", "type": "bytes[]" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "serializeBytes", - "outputs": [ - { "internalType": "string", "name": "json", "type": "string" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "objectKey", "type": "string" }, - { "internalType": "string", "name": "valueKey", "type": "string" }, - { "internalType": "bytes", "name": "value", "type": "bytes" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "serializeBytes", - "outputs": [ - { "internalType": "string", "name": "json", "type": "string" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "objectKey", "type": "string" }, - { "internalType": "string", "name": "valueKey", "type": "string" }, - { - "internalType": "bytes32[]", - "name": "values", - "type": "bytes32[]" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "serializeBytes32", - "outputs": [ - { "internalType": "string", "name": "json", "type": "string" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "objectKey", "type": "string" }, - { "internalType": "string", "name": "valueKey", "type": "string" }, - { "internalType": "bytes32", "name": "value", "type": "bytes32" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "serializeBytes32", - "outputs": [ - { "internalType": "string", "name": "json", "type": "string" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "objectKey", "type": "string" }, - { "internalType": "string", "name": "valueKey", "type": "string" }, - { "internalType": "int256", "name": "value", "type": "int256" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "serializeInt", - "outputs": [ - { "internalType": "string", "name": "json", "type": "string" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "objectKey", "type": "string" }, - { "internalType": "string", "name": "valueKey", "type": "string" }, - { "internalType": "int256[]", "name": "values", "type": "int256[]" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "serializeInt", - "outputs": [ - { "internalType": "string", "name": "json", "type": "string" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "objectKey", "type": "string" }, - { "internalType": "string", "name": "value", "type": "string" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "serializeJson", - "outputs": [ - { "internalType": "string", "name": "json", "type": "string" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "objectKey", "type": "string" }, - { "internalType": "string", "name": "valueKey", "type": "string" }, - { "internalType": "string[]", "name": "values", "type": "string[]" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "serializeString", - "outputs": [ - { "internalType": "string", "name": "json", "type": "string" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "objectKey", "type": "string" }, - { "internalType": "string", "name": "valueKey", "type": "string" }, - { "internalType": "string", "name": "value", "type": "string" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "serializeString", - "outputs": [ - { "internalType": "string", "name": "json", "type": "string" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "objectKey", "type": "string" }, - { "internalType": "string", "name": "valueKey", "type": "string" }, - { "internalType": "uint256", "name": "value", "type": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "serializeUint", - "outputs": [ - { "internalType": "string", "name": "json", "type": "string" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "objectKey", "type": "string" }, - { "internalType": "string", "name": "valueKey", "type": "string" }, - { - "internalType": "uint256[]", - "name": "values", - "type": "uint256[]" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "serializeUint", - "outputs": [ - { "internalType": "string", "name": "json", "type": "string" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "name", "type": "string" }, - { "internalType": "string", "name": "value", "type": "string" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setEnv" - }, - { - "inputs": [ - { - "internalType": "struct VmSafe.Wallet", - "name": "wallet", - "type": "tuple", - "components": [ - { - "internalType": "address", - "name": "addr", - "type": "address" - }, - { - "internalType": "uint256", - "name": "publicKeyX", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "publicKeyY", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "privateKey", - "type": "uint256" - } - ] - }, - { "internalType": "bytes32", "name": "digest", "type": "bytes32" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "sign", - "outputs": [ - { "internalType": "uint8", "name": "v", "type": "uint8" }, - { "internalType": "bytes32", "name": "r", "type": "bytes32" }, - { "internalType": "bytes32", "name": "s", "type": "bytes32" } - ] - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "privateKey", - "type": "uint256" - }, - { "internalType": "bytes32", "name": "digest", "type": "bytes32" } - ], - "stateMutability": "pure", - "type": "function", - "name": "sign", - "outputs": [ - { "internalType": "uint8", "name": "v", "type": "uint8" }, - { "internalType": "bytes32", "name": "r", "type": "bytes32" }, - { "internalType": "bytes32", "name": "s", "type": "bytes32" } - ] - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "privateKey", - "type": "uint256" - }, - { "internalType": "bytes32", "name": "digest", "type": "bytes32" } - ], - "stateMutability": "pure", - "type": "function", - "name": "signP256", - "outputs": [ - { "internalType": "bytes32", "name": "r", "type": "bytes32" }, - { "internalType": "bytes32", "name": "s", "type": "bytes32" } - ] - }, - { - "inputs": [ - { "internalType": "uint256", "name": "duration", "type": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "sleep" - }, - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "function", - "name": "startBroadcast" - }, - { - "inputs": [ - { "internalType": "address", "name": "signer", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "startBroadcast" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "privateKey", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "startBroadcast" - }, - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "function", - "name": "startMappingRecording" - }, - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "function", - "name": "startStateDiffRecording" - }, - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "function", - "name": "stopAndReturnStateDiff", - "outputs": [ - { - "internalType": "struct VmSafe.AccountAccess[]", - "name": "accountAccesses", - "type": "tuple[]", - "components": [ - { - "internalType": "struct VmSafe.ChainInfo", - "name": "chainInfo", - "type": "tuple", - "components": [ - { - "internalType": "uint256", - "name": "forkId", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "chainId", - "type": "uint256" - } - ] - }, - { - "internalType": "enum VmSafe.AccountAccessKind", - "name": "kind", - "type": "uint8" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "address", - "name": "accessor", - "type": "address" - }, - { - "internalType": "bool", - "name": "initialized", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "oldBalance", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "newBalance", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "deployedCode", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { "internalType": "bytes", "name": "data", "type": "bytes" }, - { "internalType": "bool", "name": "reverted", "type": "bool" }, - { - "internalType": "struct VmSafe.StorageAccess[]", - "name": "storageAccesses", - "type": "tuple[]", - "components": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "slot", - "type": "bytes32" - }, - { - "internalType": "bool", - "name": "isWrite", - "type": "bool" - }, - { - "internalType": "bytes32", - "name": "previousValue", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "newValue", - "type": "bytes32" - }, - { - "internalType": "bool", - "name": "reverted", - "type": "bool" - } - ] - } - ] - } - ] - }, - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "function", - "name": "stopBroadcast" - }, - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "function", - "name": "stopMappingRecording" - }, - { - "inputs": [ - { "internalType": "string", "name": "data", "type": "string" } - ], - "stateMutability": "pure", - "type": "function", - "name": "toBase64", - "outputs": [ - { "internalType": "string", "name": "", "type": "string" } - ] - }, - { - "inputs": [ - { "internalType": "bytes", "name": "data", "type": "bytes" } - ], - "stateMutability": "pure", - "type": "function", - "name": "toBase64", - "outputs": [ - { "internalType": "string", "name": "", "type": "string" } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "data", "type": "string" } - ], - "stateMutability": "pure", - "type": "function", - "name": "toBase64URL", - "outputs": [ - { "internalType": "string", "name": "", "type": "string" } - ] - }, - { - "inputs": [ - { "internalType": "bytes", "name": "data", "type": "bytes" } - ], - "stateMutability": "pure", - "type": "function", - "name": "toBase64URL", - "outputs": [ - { "internalType": "string", "name": "", "type": "string" } - ] - }, - { - "inputs": [ - { "internalType": "address", "name": "value", "type": "address" } - ], - "stateMutability": "pure", - "type": "function", - "name": "toString", - "outputs": [ - { - "internalType": "string", - "name": "stringifiedValue", - "type": "string" - } - ] - }, - { - "inputs": [ - { "internalType": "uint256", "name": "value", "type": "uint256" } - ], - "stateMutability": "pure", - "type": "function", - "name": "toString", - "outputs": [ - { - "internalType": "string", - "name": "stringifiedValue", - "type": "string" - } - ] - }, - { - "inputs": [ - { "internalType": "bytes", "name": "value", "type": "bytes" } - ], - "stateMutability": "pure", - "type": "function", - "name": "toString", - "outputs": [ - { - "internalType": "string", - "name": "stringifiedValue", - "type": "string" - } - ] - }, - { - "inputs": [ - { "internalType": "bool", "name": "value", "type": "bool" } - ], - "stateMutability": "pure", - "type": "function", - "name": "toString", - "outputs": [ - { - "internalType": "string", - "name": "stringifiedValue", - "type": "string" - } - ] - }, - { - "inputs": [ - { "internalType": "int256", "name": "value", "type": "int256" } - ], - "stateMutability": "pure", - "type": "function", - "name": "toString", - "outputs": [ - { - "internalType": "string", - "name": "stringifiedValue", - "type": "string" - } - ] - }, - { - "inputs": [ - { "internalType": "bytes32", "name": "value", "type": "bytes32" } - ], - "stateMutability": "pure", - "type": "function", - "name": "toString", - "outputs": [ - { - "internalType": "string", - "name": "stringifiedValue", - "type": "string" - } - ] - }, - { - "inputs": [ - { - "internalType": "string[]", - "name": "commandInput", - "type": "string[]" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "tryFfi", - "outputs": [ - { - "internalType": "struct VmSafe.FfiResult", - "name": "result", - "type": "tuple", - "components": [ - { - "internalType": "int32", - "name": "exitCode", - "type": "int32" - }, - { "internalType": "bytes", "name": "stdout", "type": "bytes" }, - { "internalType": "bytes", "name": "stderr", "type": "bytes" } - ] - } - ] - }, - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "function", - "name": "unixTime", - "outputs": [ - { - "internalType": "uint256", - "name": "milliseconds", - "type": "uint256" - } - ] - }, - { - "inputs": [ - { "internalType": "string", "name": "path", "type": "string" }, - { "internalType": "string", "name": "data", "type": "string" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "writeFile" - }, - { - "inputs": [ - { "internalType": "string", "name": "path", "type": "string" }, - { "internalType": "bytes", "name": "data", "type": "bytes" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "writeFileBinary" - }, - { - "inputs": [ - { "internalType": "string", "name": "json", "type": "string" }, - { "internalType": "string", "name": "path", "type": "string" }, - { "internalType": "string", "name": "valueKey", "type": "string" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "writeJson" - }, - { - "inputs": [ - { "internalType": "string", "name": "json", "type": "string" }, - { "internalType": "string", "name": "path", "type": "string" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "writeJson" - }, - { - "inputs": [ - { "internalType": "string", "name": "path", "type": "string" }, - { "internalType": "string", "name": "data", "type": "string" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "writeLine" - } - ], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "userdoc": { - "kind": "user", - "methods": { - "accesses(address)": { - "notice": "Gets all accessed reads and write slot from a `vm.record` session, for a given address." - }, - "addr(uint256)": { - "notice": "Gets the address for a given private key." - }, - "assume(bool)": { - "notice": "If the condition is false, discard this run's fuzz inputs and generate new ones." - }, - "breakpoint(string)": { - "notice": "Writes a breakpoint to jump to in the debugger." - }, - "breakpoint(string,bool)": { - "notice": "Writes a conditional breakpoint to jump to in the debugger." - }, - "broadcast()": { - "notice": "Using the address that calls the test contract, has the next call (at this call depth only) create a transaction that can later be signed and sent onchain." - }, - "broadcast(address)": { - "notice": "Has the next call (at this call depth only) create a transaction with the address provided as the sender that can later be signed and sent onchain." - }, - "broadcast(uint256)": { - "notice": "Has the next call (at this call depth only) create a transaction with the private key provided as the sender that can later be signed and sent onchain." - }, - "closeFile(string)": { - "notice": "Closes file for reading, resetting the offset and allowing to read it from beginning with readLine. `path` is relative to the project root." - }, - "computeCreate2Address(bytes32,bytes32)": { - "notice": "Compute the address of a contract created with CREATE2 using the default CREATE2 deployer." - }, - "computeCreate2Address(bytes32,bytes32,address)": { - "notice": "Compute the address of a contract created with CREATE2 using the given CREATE2 deployer." - }, - "computeCreateAddress(address,uint256)": { - "notice": "Compute the address a contract will be deployed at for a given deployer address and nonce." - }, - "copyFile(string,string)": { - "notice": "Copies the contents of one file to another. This function will **overwrite** the contents of `to`. On success, the total number of bytes copied is returned and it is equal to the length of the `to` file as reported by `metadata`. Both `from` and `to` are relative to the project root." - }, - "createDir(string,bool)": { - "notice": "Creates a new, empty directory at the provided path. This cheatcode will revert in the following situations, but is not limited to just these cases: - User lacks permissions to modify `path`. - A parent of the given path doesn't exist and `recursive` is false. - `path` already exists and `recursive` is false. `path` is relative to the project root." - }, - "createWallet(string)": { - "notice": "Derives a private key from the name, labels the account with that name, and returns the wallet." - }, - "createWallet(uint256)": { - "notice": "Generates a wallet from the private key and returns the wallet." - }, - "createWallet(uint256,string)": { - "notice": "Generates a wallet from the private key, labels the account with that name, and returns the wallet." - }, - "deriveKey(string,string,uint32)": { - "notice": "Derive a private key from a provided mnenomic string (or mnenomic file path) at `{derivationPath}{index}`." - }, - "deriveKey(string,string,uint32,string)": { - "notice": "Derive a private key from a provided mnenomic string (or mnenomic file path) in the specified language at `{derivationPath}{index}`." - }, - "deriveKey(string,uint32)": { - "notice": "Derive a private key from a provided mnenomic string (or mnenomic file path) at the derivation path `m/44'/60'/0'/0/{index}`." - }, - "deriveKey(string,uint32,string)": { - "notice": "Derive a private key from a provided mnenomic string (or mnenomic file path) in the specified language at the derivation path `m/44'/60'/0'/0/{index}`." - }, - "envAddress(string)": { - "notice": "Gets the environment variable `name` and parses it as `address`. Reverts if the variable was not found or could not be parsed." - }, - "envAddress(string,string)": { - "notice": "Gets the environment variable `name` and parses it as an array of `address`, delimited by `delim`. Reverts if the variable was not found or could not be parsed." - }, - "envBool(string)": { - "notice": "Gets the environment variable `name` and parses it as `bool`. Reverts if the variable was not found or could not be parsed." - }, - "envBool(string,string)": { - "notice": "Gets the environment variable `name` and parses it as an array of `bool`, delimited by `delim`. Reverts if the variable was not found or could not be parsed." - }, - "envBytes(string)": { - "notice": "Gets the environment variable `name` and parses it as `bytes`. Reverts if the variable was not found or could not be parsed." - }, - "envBytes(string,string)": { - "notice": "Gets the environment variable `name` and parses it as an array of `bytes`, delimited by `delim`. Reverts if the variable was not found or could not be parsed." - }, - "envBytes32(string)": { - "notice": "Gets the environment variable `name` and parses it as `bytes32`. Reverts if the variable was not found or could not be parsed." - }, - "envBytes32(string,string)": { - "notice": "Gets the environment variable `name` and parses it as an array of `bytes32`, delimited by `delim`. Reverts if the variable was not found or could not be parsed." - }, - "envInt(string)": { - "notice": "Gets the environment variable `name` and parses it as `int256`. Reverts if the variable was not found or could not be parsed." - }, - "envInt(string,string)": { - "notice": "Gets the environment variable `name` and parses it as an array of `int256`, delimited by `delim`. Reverts if the variable was not found or could not be parsed." - }, - "envOr(string,address)": { - "notice": "Gets the environment variable `name` and parses it as `address`. Reverts if the variable could not be parsed. Returns `defaultValue` if the variable was not found." - }, - "envOr(string,bool)": { - "notice": "Gets the environment variable `name` and parses it as `bool`. Reverts if the variable could not be parsed. Returns `defaultValue` if the variable was not found." - }, - "envOr(string,bytes)": { - "notice": "Gets the environment variable `name` and parses it as `bytes`. Reverts if the variable could not be parsed. Returns `defaultValue` if the variable was not found." - }, - "envOr(string,bytes32)": { - "notice": "Gets the environment variable `name` and parses it as `bytes32`. Reverts if the variable could not be parsed. Returns `defaultValue` if the variable was not found." - }, - "envOr(string,int256)": { - "notice": "Gets the environment variable `name` and parses it as `int256`. Reverts if the variable could not be parsed. Returns `defaultValue` if the variable was not found." - }, - "envOr(string,string)": { - "notice": "Gets the environment variable `name` and parses it as `string`. Reverts if the variable could not be parsed. Returns `defaultValue` if the variable was not found." - }, - "envOr(string,string,address[])": { - "notice": "Gets the environment variable `name` and parses it as an array of `address`, delimited by `delim`. Reverts if the variable could not be parsed. Returns `defaultValue` if the variable was not found." - }, - "envOr(string,string,bool[])": { - "notice": "Gets the environment variable `name` and parses it as an array of `bool`, delimited by `delim`. Reverts if the variable could not be parsed. Returns `defaultValue` if the variable was not found." - }, - "envOr(string,string,bytes32[])": { - "notice": "Gets the environment variable `name` and parses it as an array of `bytes32`, delimited by `delim`. Reverts if the variable could not be parsed. Returns `defaultValue` if the variable was not found." - }, - "envOr(string,string,bytes[])": { - "notice": "Gets the environment variable `name` and parses it as an array of `bytes`, delimited by `delim`. Reverts if the variable could not be parsed. Returns `defaultValue` if the variable was not found." - }, - "envOr(string,string,int256[])": { - "notice": "Gets the environment variable `name` and parses it as an array of `int256`, delimited by `delim`. Reverts if the variable could not be parsed. Returns `defaultValue` if the variable was not found." - }, - "envOr(string,string,string[])": { - "notice": "Gets the environment variable `name` and parses it as an array of `string`, delimited by `delim`. Reverts if the variable could not be parsed. Returns `defaultValue` if the variable was not found." - }, - "envOr(string,string,uint256[])": { - "notice": "Gets the environment variable `name` and parses it as an array of `uint256`, delimited by `delim`. Reverts if the variable could not be parsed. Returns `defaultValue` if the variable was not found." - }, - "envOr(string,uint256)": { - "notice": "Gets the environment variable `name` and parses it as `uint256`. Reverts if the variable could not be parsed. Returns `defaultValue` if the variable was not found." - }, - "envString(string)": { - "notice": "Gets the environment variable `name` and parses it as `string`. Reverts if the variable was not found or could not be parsed." - }, - "envString(string,string)": { - "notice": "Gets the environment variable `name` and parses it as an array of `string`, delimited by `delim`. Reverts if the variable was not found or could not be parsed." - }, - "envUint(string)": { - "notice": "Gets the environment variable `name` and parses it as `uint256`. Reverts if the variable was not found or could not be parsed." - }, - "envUint(string,string)": { - "notice": "Gets the environment variable `name` and parses it as an array of `uint256`, delimited by `delim`. Reverts if the variable was not found or could not be parsed." - }, - "eth_getLogs(uint256,uint256,address,bytes32[])": { - "notice": "Gets all the logs according to specified filter." - }, - "exists(string)": { - "notice": "Returns true if the given path points to an existing entity, else returns false." - }, - "ffi(string[])": { - "notice": "Performs a foreign function call via the terminal." - }, - "fsMetadata(string)": { - "notice": "Given a path, query the file system to get information about a file, directory, etc." - }, - "getBlockNumber()": { - "notice": "Gets the current `block.number`. You should use this instead of `block.number` if you use `vm.roll`, as `block.number` is assumed to be constant across a transaction, and as a result will get optimized out by the compiler. See https://github.com/foundry-rs/foundry/issues/6180" - }, - "getBlockTimestamp()": { - "notice": "Gets the current `block.timestamp`. You should use this instead of `block.timestamp` if you use `vm.warp`, as `block.timestamp` is assumed to be constant across a transaction, and as a result will get optimized out by the compiler. See https://github.com/foundry-rs/foundry/issues/6180" - }, - "getCode(string)": { - "notice": "Gets the creation bytecode from an artifact file. Takes in the relative path to the json file." - }, - "getDeployedCode(string)": { - "notice": "Gets the deployed bytecode from an artifact file. Takes in the relative path to the json file." - }, - "getLabel(address)": { - "notice": "Gets the label for the specified address." - }, - "getMappingKeyAndParentOf(address,bytes32)": { - "notice": "Gets the map key and parent of a mapping at a given slot, for a given address." - }, - "getMappingLength(address,bytes32)": { - "notice": "Gets the number of elements in the mapping at the given slot, for a given address." - }, - "getMappingSlotAt(address,bytes32,uint256)": { - "notice": "Gets the elements at index idx of the mapping at the given slot, for a given address. The index must be less than the length of the mapping (i.e. the number of keys in the mapping)." - }, - "getNonce((address,uint256,uint256,uint256))": { - "notice": "Get a `Wallet`'s nonce." - }, - "getNonce(address)": { "notice": "Gets the nonce of an account." }, - "getRecordedLogs()": { "notice": "Gets all the recorded logs." }, - "isDir(string)": { - "notice": "Returns true if the path exists on disk and is pointing at a directory, else returns false." - }, - "isFile(string)": { - "notice": "Returns true if the path exists on disk and is pointing at a regular file, else returns false." - }, - "keyExists(string,string)": { - "notice": "Checks if `key` exists in a JSON object." - }, - "label(address,string)": { - "notice": "Labels an address in call traces." - }, - "load(address,bytes32)": { - "notice": "Loads a storage slot from an address." - }, - "parseAddress(string)": { - "notice": "Parses the given `string` into an `address`." - }, - "parseBool(string)": { - "notice": "Parses the given `string` into a `bool`." - }, - "parseBytes(string)": { - "notice": "Parses the given `string` into `bytes`." - }, - "parseBytes32(string)": { - "notice": "Parses the given `string` into a `bytes32`." - }, - "parseInt(string)": { - "notice": "Parses the given `string` into a `int256`." - }, - "parseJson(string)": { "notice": "ABI-encodes a JSON object." }, - "parseJson(string,string)": { - "notice": "ABI-encodes a JSON object at `key`." - }, - "parseJsonAddress(string,string)": { - "notice": "Parses a string of JSON data at `key` and coerces it to `address`." - }, - "parseJsonAddressArray(string,string)": { - "notice": "Parses a string of JSON data at `key` and coerces it to `address[]`." - }, - "parseJsonBool(string,string)": { - "notice": "Parses a string of JSON data at `key` and coerces it to `bool`." - }, - "parseJsonBoolArray(string,string)": { - "notice": "Parses a string of JSON data at `key` and coerces it to `bool[]`." - }, - "parseJsonBytes(string,string)": { - "notice": "Parses a string of JSON data at `key` and coerces it to `bytes`." - }, - "parseJsonBytes32(string,string)": { - "notice": "Parses a string of JSON data at `key` and coerces it to `bytes32`." - }, - "parseJsonBytes32Array(string,string)": { - "notice": "Parses a string of JSON data at `key` and coerces it to `bytes32[]`." - }, - "parseJsonBytesArray(string,string)": { - "notice": "Parses a string of JSON data at `key` and coerces it to `bytes[]`." - }, - "parseJsonInt(string,string)": { - "notice": "Parses a string of JSON data at `key` and coerces it to `int256`." - }, - "parseJsonIntArray(string,string)": { - "notice": "Parses a string of JSON data at `key` and coerces it to `int256[]`." - }, - "parseJsonKeys(string,string)": { - "notice": "Returns an array of all the keys in a JSON object." - }, - "parseJsonString(string,string)": { - "notice": "Parses a string of JSON data at `key` and coerces it to `string`." - }, - "parseJsonStringArray(string,string)": { - "notice": "Parses a string of JSON data at `key` and coerces it to `string[]`." - }, - "parseJsonUint(string,string)": { - "notice": "Parses a string of JSON data at `key` and coerces it to `uint256`." - }, - "parseJsonUintArray(string,string)": { - "notice": "Parses a string of JSON data at `key` and coerces it to `uint256[]`." - }, - "parseUint(string)": { - "notice": "Parses the given `string` into a `uint256`." - }, - "pauseGasMetering()": { - "notice": "Pauses gas metering (i.e. gas usage is not counted). Noop if already paused." - }, - "projectRoot()": { - "notice": "Get the path of the current project root." - }, - "readDir(string)": { - "notice": "Reads the directory at the given path recursively, up to `maxDepth`. `maxDepth` defaults to 1, meaning only the direct children of the given directory will be returned. Follows symbolic links if `followLinks` is true." - }, - "readDir(string,uint64)": { "notice": "See `readDir(string)`." }, - "readDir(string,uint64,bool)": { "notice": "See `readDir(string)`." }, - "readFile(string)": { - "notice": "Reads the entire content of file to string. `path` is relative to the project root." - }, - "readFileBinary(string)": { - "notice": "Reads the entire content of file as binary. `path` is relative to the project root." - }, - "readLine(string)": { - "notice": "Reads next line of file to string." - }, - "readLink(string)": { - "notice": "Reads a symbolic link, returning the path that the link points to. This cheatcode will revert in the following situations, but is not limited to just these cases: - `path` is not a symbolic link. - `path` does not exist." - }, - "record()": { "notice": "Records all storage reads and writes." }, - "recordLogs()": { "notice": "Record all the transaction logs." }, - "rememberKey(uint256)": { - "notice": "Adds a private key to the local forge wallet and returns the address." - }, - "removeDir(string,bool)": { - "notice": "Removes a directory at the provided path. This cheatcode will revert in the following situations, but is not limited to just these cases: - `path` doesn't exist. - `path` isn't a directory. - User lacks permissions to modify `path`. - The directory is not empty and `recursive` is false. `path` is relative to the project root." - }, - "removeFile(string)": { - "notice": "Removes a file from the filesystem. This cheatcode will revert in the following situations, but is not limited to just these cases: - `path` points to a directory. - The file doesn't exist. - The user lacks permissions to remove the file. `path` is relative to the project root." - }, - "resumeGasMetering()": { - "notice": "Resumes gas metering (i.e. gas usage is counted again). Noop if already on." - }, - "rpc(string,string)": { - "notice": "Performs an Ethereum JSON-RPC request to the current fork URL." - }, - "rpcUrl(string)": { - "notice": "Returns the RPC url for the given alias." - }, - "rpcUrlStructs()": { - "notice": "Returns all rpc urls and their aliases as structs." - }, - "rpcUrls()": { - "notice": "Returns all rpc urls and their aliases `[alias, url][]`." - }, - "serializeAddress(string,string,address)": { - "notice": "See `serializeJson`." - }, - "serializeAddress(string,string,address[])": { - "notice": "See `serializeJson`." - }, - "serializeBool(string,string,bool)": { - "notice": "See `serializeJson`." - }, - "serializeBool(string,string,bool[])": { - "notice": "See `serializeJson`." - }, - "serializeBytes(string,string,bytes)": { - "notice": "See `serializeJson`." - }, - "serializeBytes(string,string,bytes[])": { - "notice": "See `serializeJson`." - }, - "serializeBytes32(string,string,bytes32)": { - "notice": "See `serializeJson`." - }, - "serializeBytes32(string,string,bytes32[])": { - "notice": "See `serializeJson`." - }, - "serializeInt(string,string,int256)": { - "notice": "See `serializeJson`." - }, - "serializeInt(string,string,int256[])": { - "notice": "See `serializeJson`." - }, - "serializeJson(string,string)": { - "notice": "Serializes a key and value to a JSON object stored in-memory that can be later written to a file. Returns the stringified version of the specific JSON file up to that moment." - }, - "serializeString(string,string,string)": { - "notice": "See `serializeJson`." - }, - "serializeString(string,string,string[])": { - "notice": "See `serializeJson`." - }, - "serializeUint(string,string,uint256)": { - "notice": "See `serializeJson`." - }, - "serializeUint(string,string,uint256[])": { - "notice": "See `serializeJson`." - }, - "setEnv(string,string)": { "notice": "Sets environment variables." }, - "sign((address,uint256,uint256,uint256),bytes32)": { - "notice": "Signs data with a `Wallet`." - }, - "sign(uint256,bytes32)": { - "notice": "Signs `digest` with `privateKey` using the secp256k1 curve." - }, - "signP256(uint256,bytes32)": { - "notice": "Signs `digest` with `privateKey` using the secp256r1 curve." - }, - "sleep(uint256)": { - "notice": "Suspends execution of the main thread for `duration` milliseconds." - }, - "startBroadcast()": { - "notice": "Using the address that calls the test contract, has all subsequent calls (at this call depth only) create transactions that can later be signed and sent onchain." - }, - "startBroadcast(address)": { - "notice": "Has all subsequent calls (at this call depth only) create transactions with the address provided that can later be signed and sent onchain." - }, - "startBroadcast(uint256)": { - "notice": "Has all subsequent calls (at this call depth only) create transactions with the private key provided that can later be signed and sent onchain." - }, - "startMappingRecording()": { - "notice": "Starts recording all map SSTOREs for later retrieval." - }, - "startStateDiffRecording()": { - "notice": "Record all account accesses as part of CREATE, CALL or SELFDESTRUCT opcodes in order, along with the context of the calls" - }, - "stopAndReturnStateDiff()": { - "notice": "Returns an ordered array of all account accesses from a `vm.startStateDiffRecording` session." - }, - "stopBroadcast()": { - "notice": "Stops collecting onchain transactions." - }, - "stopMappingRecording()": { - "notice": "Stops recording all map SSTOREs for later retrieval and clears the recorded data." - }, - "toBase64(bytes)": { - "notice": "Encodes a `bytes` value to a base64 string." - }, - "toBase64(string)": { - "notice": "Encodes a `string` value to a base64 string." - }, - "toBase64URL(bytes)": { - "notice": "Encodes a `bytes` value to a base64url string." - }, - "toBase64URL(string)": { - "notice": "Encodes a `string` value to a base64url string." - }, - "toString(address)": { - "notice": "Converts the given value to a `string`." - }, - "toString(bool)": { - "notice": "Converts the given value to a `string`." - }, - "toString(bytes)": { - "notice": "Converts the given value to a `string`." - }, - "toString(bytes32)": { - "notice": "Converts the given value to a `string`." - }, - "toString(int256)": { - "notice": "Converts the given value to a `string`." - }, - "toString(uint256)": { - "notice": "Converts the given value to a `string`." - }, - "tryFfi(string[])": { - "notice": "Performs a foreign function call via terminal and returns the exit code, stdout, and stderr." - }, - "unixTime()": { - "notice": "Returns the time since unix epoch in milliseconds." - }, - "writeFile(string,string)": { - "notice": "Writes data to file, creating a file if it does not exist, and entirely replacing its contents if it does. `path` is relative to the project root." - }, - "writeFileBinary(string,bytes)": { - "notice": "Writes binary data to a file, creating a file if it does not exist, and entirely replacing its contents if it does. `path` is relative to the project root." - }, - "writeJson(string,string)": { - "notice": "Write a serialized JSON object to a file. If the file exists, it will be overwritten." - }, - "writeJson(string,string,string)": { - "notice": "Write a serialized JSON object to an **existing** JSON file, replacing a value with key = This is useful to replace a specific value of a JSON file, without having to parse the entire thing." - }, - "writeLine(string,string)": { - "notice": "Writes line to file, creating a file if it does not exist. `path` is relative to the project root." - } - }, - "version": 1 - } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Vm.sol": "VmSafe" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Vm.sol": { - "keccak256": "0x87ba9f3edc254e529db9e3129c954391adcc7fc8574203767979d8d2f1e724b9", - "urls": [ - "bzz-raw://4d16c08d80d9f2869deb6350642cf5af624d21fce6b3b023abbcdedc62e195fe", - "dweb:/ipfs/QmURpnnFECPKt3i7P7jQRZpr4ZBXjRGcZ9KzcbKzsgYR2W" - ], - "license": "MIT OR Apache-2.0" - } - }, - "version": 1 - }, - "id": 98 -} diff --git a/examples/oft-movement/out/WorkerMock.sol/WorkerMock.json b/examples/oft-movement/out/WorkerMock.sol/WorkerMock.json deleted file mode 100644 index 7ead9b8b1..000000000 --- a/examples/oft-movement/out/WorkerMock.sol/WorkerMock.json +++ /dev/null @@ -1,1152 +0,0 @@ -{ - "abi": [ - { - "type": "function", - "name": "DEFAULT_ADMIN_ROLE", - "inputs": [], - "outputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "allowlistSize", - "inputs": [], - "outputs": [{ "name": "", "type": "uint64", "internalType": "uint64" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "defaultMultiplierBps", - "inputs": [], - "outputs": [{ "name": "", "type": "uint16", "internalType": "uint16" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getRoleAdmin", - "inputs": [ - { "name": "role", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getSupportedOptionTypes", - "inputs": [ - { "name": "_eid", "type": "uint32", "internalType": "uint32" } - ], - "outputs": [{ "name": "", "type": "uint8[]", "internalType": "uint8[]" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "grantRole", - "inputs": [ - { "name": "role", "type": "bytes32", "internalType": "bytes32" }, - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "hasAcl", - "inputs": [ - { "name": "_sender", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "hasRole", - "inputs": [ - { "name": "role", "type": "bytes32", "internalType": "bytes32" }, - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "paused", - "inputs": [], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "priceFeed", - "inputs": [], - "outputs": [{ "name": "", "type": "address", "internalType": "address" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "renounceRole", - "inputs": [ - { "name": "", "type": "bytes32", "internalType": "bytes32" }, - { "name": "", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "revokeRole", - "inputs": [ - { "name": "role", "type": "bytes32", "internalType": "bytes32" }, - { "name": "account", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setDefaultMultiplierBps", - "inputs": [ - { "name": "_multiplierBps", "type": "uint16", "internalType": "uint16" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setPaused", - "inputs": [{ "name": "_paused", "type": "bool", "internalType": "bool" }], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setPriceFeed", - "inputs": [ - { "name": "_priceFeed", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setSupportedOptionTypes", - "inputs": [ - { "name": "_eid", "type": "uint32", "internalType": "uint32" }, - { "name": "_optionTypes", "type": "uint8[]", "internalType": "uint8[]" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setWorkerFeeLib", - "inputs": [ - { - "name": "_workerFeeLib", - "type": "address", - "internalType": "address" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "supportsInterface", - "inputs": [ - { "name": "interfaceId", "type": "bytes4", "internalType": "bytes4" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "withdrawFee", - "inputs": [ - { "name": "_lib", "type": "address", "internalType": "address" }, - { "name": "_to", "type": "address", "internalType": "address" }, - { "name": "_amount", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "withdrawToken", - "inputs": [ - { "name": "_token", "type": "address", "internalType": "address" }, - { "name": "_to", "type": "address", "internalType": "address" }, - { "name": "_amount", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "workerFeeLib", - "inputs": [], - "outputs": [{ "name": "", "type": "address", "internalType": "address" }], - "stateMutability": "view" - }, - { - "type": "event", - "name": "Paused", - "inputs": [ - { - "name": "account", - "type": "address", - "indexed": false, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "RoleAdminChanged", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "indexed": true, - "internalType": "bytes32" - }, - { - "name": "previousAdminRole", - "type": "bytes32", - "indexed": true, - "internalType": "bytes32" - }, - { - "name": "newAdminRole", - "type": "bytes32", - "indexed": true, - "internalType": "bytes32" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "RoleGranted", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "indexed": true, - "internalType": "bytes32" - }, - { - "name": "account", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "sender", - "type": "address", - "indexed": true, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "RoleRevoked", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "indexed": true, - "internalType": "bytes32" - }, - { - "name": "account", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "sender", - "type": "address", - "indexed": true, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "SetDefaultMultiplierBps", - "inputs": [ - { - "name": "multiplierBps", - "type": "uint16", - "indexed": false, - "internalType": "uint16" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "SetPriceFeed", - "inputs": [ - { - "name": "priceFeed", - "type": "address", - "indexed": false, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "SetSupportedOptionTypes", - "inputs": [ - { - "name": "dstEid", - "type": "uint32", - "indexed": false, - "internalType": "uint32" - }, - { - "name": "optionTypes", - "type": "uint8[]", - "indexed": false, - "internalType": "uint8[]" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "SetWorkerLib", - "inputs": [ - { - "name": "workerLib", - "type": "address", - "indexed": false, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "Unpaused", - "inputs": [ - { - "name": "account", - "type": "address", - "indexed": false, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "Withdraw", - "inputs": [ - { - "name": "lib", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "to", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "amount", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { "type": "error", "name": "AccessControlBadConfirmation", "inputs": [] }, - { - "type": "error", - "name": "AccessControlUnauthorizedAccount", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" }, - { "name": "neededRole", "type": "bytes32", "internalType": "bytes32" } - ] - }, - { "type": "error", "name": "EnforcedPause", "inputs": [] }, - { "type": "error", "name": "ExpectedPause", "inputs": [] }, - { - "type": "error", - "name": "SafeERC20FailedOperation", - "inputs": [ - { "name": "token", "type": "address", "internalType": "address" } - ] - }, - { - "type": "error", - "name": "Transfer_NativeFailed", - "inputs": [ - { "name": "_to", "type": "address", "internalType": "address" }, - { "name": "_value", "type": "uint256", "internalType": "uint256" } - ] - }, - { "type": "error", "name": "Transfer_ToAddressIsZero", "inputs": [] }, - { "type": "error", "name": "Worker_NotAllowed", "inputs": [] }, - { "type": "error", "name": "Worker_OnlyMessageLib", "inputs": [] }, - { "type": "error", "name": "Worker_RoleRenouncingDisabled", "inputs": [] } - ], - "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "methodIdentifiers": { - "DEFAULT_ADMIN_ROLE()": "a217fddf", - "allowlistSize()": "d2ae2104", - "defaultMultiplierBps()": "00bf2e80", - "getRoleAdmin(bytes32)": "248a9ca3", - "getSupportedOptionTypes(uint32)": "26e67a37", - "grantRole(bytes32,address)": "2f2ff15d", - "hasAcl(address)": "2de11376", - "hasRole(bytes32,address)": "91d14854", - "paused()": "5c975abb", - "priceFeed()": "741bef1a", - "renounceRole(bytes32,address)": "36568abe", - "revokeRole(bytes32,address)": "d547741f", - "setDefaultMultiplierBps(uint16)": "c358de0a", - "setPaused(bool)": "16c38b3c", - "setPriceFeed(address)": "724e78da", - "setSupportedOptionTypes(uint32,uint8[])": "cd88b903", - "setWorkerFeeLib(address)": "c7b2370b", - "supportsInterface(bytes4)": "01ffc9a7", - "withdrawFee(address,address,uint256)": "1095b6d7", - "withdrawToken(address,address,uint256)": "01e33667", - "workerFeeLib()": "c416aa51" - }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AccessControlBadConfirmation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"neededRole\",\"type\":\"bytes32\"}],\"name\":\"AccessControlUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EnforcedPause\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExpectedPause\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"Transfer_NativeFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Transfer_ToAddressIsZero\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Worker_NotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Worker_OnlyMessageLib\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Worker_RoleRenouncingDisabled\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"multiplierBps\",\"type\":\"uint16\"}],\"name\":\"SetDefaultMultiplierBps\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"priceFeed\",\"type\":\"address\"}],\"name\":\"SetPriceFeed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"dstEid\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint8[]\",\"name\":\"optionTypes\",\"type\":\"uint8[]\"}],\"name\":\"SetSupportedOptionTypes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"workerLib\",\"type\":\"address\"}],\"name\":\"SetWorkerLib\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"lib\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Withdraw\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"allowlistSize\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"defaultMultiplierBps\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"}],\"name\":\"getSupportedOptionTypes\",\"outputs\":[{\"internalType\":\"uint8[]\",\"name\":\"\",\"type\":\"uint8[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"}],\"name\":\"hasAcl\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"priceFeed\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"_multiplierBps\",\"type\":\"uint16\"}],\"name\":\"setDefaultMultiplierBps\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_paused\",\"type\":\"bool\"}],\"name\":\"setPaused\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_priceFeed\",\"type\":\"address\"}],\"name\":\"setPriceFeed\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_eid\",\"type\":\"uint32\"},{\"internalType\":\"uint8[]\",\"name\":\"_optionTypes\",\"type\":\"uint8[]\"}],\"name\":\"setSupportedOptionTypes\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_workerFeeLib\",\"type\":\"address\"}],\"name\":\"setWorkerFeeLib\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_lib\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"withdrawFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"withdrawToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"workerFeeLib\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"AccessControlBadConfirmation()\":[{\"details\":\"The caller of a function is not the expected one. NOTE: Don't confuse with {AccessControlUnauthorizedAccount}.\"}],\"AccessControlUnauthorizedAccount(address,bytes32)\":[{\"details\":\"The `account` is missing a role.\"}],\"EnforcedPause()\":[{\"details\":\"The operation failed because the contract is paused.\"}],\"ExpectedPause()\":[{\"details\":\"The operation failed because the contract is not paused.\"}],\"SafeERC20FailedOperation(address)\":[{\"details\":\"An operation with an ERC-20 token failed.\"}]},\"events\":{\"Paused(address)\":{\"details\":\"Emitted when the pause is triggered by `account`.\"},\"RoleAdminChanged(bytes32,bytes32,bytes32)\":{\"details\":\"Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted signaling this.\"},\"RoleGranted(bytes32,address,address)\":{\"details\":\"Emitted when `account` is granted `role`. `sender` is the account that originated the contract call. This account bears the admin role (for the granted role). Expected in cases where the role was granted using the internal {AccessControl-_grantRole}.\"},\"RoleRevoked(bytes32,address,address)\":{\"details\":\"Emitted when `account` is revoked `role`. `sender` is the account that originated the contract call: - if using `revokeRole`, it is the admin role bearer - if using `renounceRole`, it is the role bearer (i.e. `account`)\"},\"Unpaused(address)\":{\"details\":\"Emitted when the pause is lifted by `account`.\"}},\"kind\":\"dev\",\"methods\":{\"constructor\":{\"params\":{\"_admins\":\"array of admin addresses that are granted the ADMIN_ROLE\",\"_defaultMultiplierBps\":\"default multiplier for worker fee\",\"_messageLibs\":\"array of message lib addresses that are granted the MESSAGE_LIB_ROLE\",\"_priceFeed\":\"price feed address\",\"_roleAdmin\":\"address that is granted the DEFAULT_ADMIN_ROLE (can grant and revoke all roles)\"}},\"getRoleAdmin(bytes32)\":{\"details\":\"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}.\"},\"grantRole(bytes32,address)\":{\"details\":\"Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event.\"},\"hasAcl(address)\":{\"details\":\"Access control list using allowlist and denylist1) if one address is in the denylist -> deny2) else if address in the allowlist OR allowlist is empty (allows everyone)-> allow3) else deny\",\"params\":{\"_sender\":\"address to check\"}},\"hasRole(bytes32,address)\":{\"details\":\"Returns `true` if `account` has been granted `role`.\"},\"paused()\":{\"details\":\"Returns true if the contract is paused, and false otherwise.\"},\"renounceRole(bytes32,address)\":{\"details\":\"overrides AccessControl to disable renouncing of roles\"},\"revokeRole(bytes32,address)\":{\"details\":\"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event.\"},\"setDefaultMultiplierBps(uint16)\":{\"params\":{\"_multiplierBps\":\"default multiplier for worker fee\"}},\"setPaused(bool)\":{\"details\":\"flag to pause execution of workers (if used with whenNotPaused modifier)\",\"params\":{\"_paused\":\"true to pause, false to unpause\"}},\"setPriceFeed(address)\":{\"params\":{\"_priceFeed\":\"price feed address\"}},\"setWorkerFeeLib(address)\":{\"params\":{\"_workerFeeLib\":\"worker fee lib address\"}},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"},\"withdrawFee(address,address,uint256)\":{\"details\":\"supports withdrawing fee from ULN301, ULN302 and more\",\"params\":{\"_amount\":\"amount to withdraw\",\"_lib\":\"message lib address\",\"_to\":\"address to withdraw fee to\"}},\"withdrawToken(address,address,uint256)\":{\"details\":\"supports withdrawing token from the contract\",\"params\":{\"_amount\":\"amount to withdraw\",\"_to\":\"address to withdraw token to\",\"_token\":\"token address\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/WorkerMock.sol\":\"WorkerMock\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IWorker.sol\":{\"keccak256\":\"0xa6b61913767305227576cc6da5067de4208f09a4f58bfbfe32beafdfae9869b1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7fce83bfb831f383606aee7f5ff68a330c8526bb1036f9ba0813d3e4fa8d534\",\"dweb:/ipfs/QmR7zAqJkmCgBj6sguS8t2WthY5k6FwsakgH4UY11uqD4n\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol\":{\"keccak256\":\"0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bacc29fd3866af71e59cb0bdc1cf82c882a4a7f4e2652fd413c9f12649762083\",\"dweb:/ipfs/QmZh2toLnrQDWaNYhS5K4NoW7Vxd2GdZx9KA77vKEDLAqs\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol\":{\"keccak256\":\"0x5cf5f24751b4e3ea1c9c5ded07cedfdfd62566b6daaffcc0144733859c9dba0c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cae7e35007a714f007ea08045ef7c0cfa6c91fd2425b5028b2d49abad357a5f0\",\"dweb:/ipfs/QmcDBs5tsiyB35b8cwzWQWNnpkawb3uuHRaqE77Hxm2tve\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol\":{\"keccak256\":\"0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d8ff6a8a89297fa127f86b54e0db3eba1d6a6eeb4f6398d3c84d569665ac8f1b\",\"dweb:/ipfs/QmVSwhw6xFDrLRAX4RXaCM47yBaBtac4wf36DYEq6KCTvT\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol\":{\"keccak256\":\"0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7e1b245d58221d16d8b5e0f01ef3e289a24a7df1ace3b94239e4d5b954ad5927\",\"dweb:/ipfs/Qmappsgp7PCY9rSSNE9Cdn4BTRX591WfCSEgq2HxhA3z6S\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol\":{\"keccak256\":\"0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b18b23a1643fc6636c4ad9d9023e2e6ca2d3c2a4a046482d4655bff09950598d\",\"dweb:/ipfs/Qma6G5SqiovwrMPfgqTrRngK1HWW373Wkf9c6YP2NhXpPk\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol\":{\"keccak256\":\"0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5173fc9143bea314b159ca5a9adb5626659ef763bc598e27de5fa46efe3291a6\",\"dweb:/ipfs/QmSLFeMFPmVeGxT4sxRPW28ictjAS22M8rLeYRu9TXkA6D\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol\":{\"keccak256\":\"0xf1c07bc61e7b1dce195ed12d50f87980fbf2d63cac1326fd28287f55fe0ba625\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://060f10ff7afc33c1c2f2b4b5ba29231fd3c943146488084d0e4ab99fce991d97\",\"dweb:/ipfs/QmaSsefAqqEqtf8FgFUmDYMwTsAty3X1pqDb6SiFvry6B3\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Transfer.sol\":{\"keccak256\":\"0x621d6dd5b8b7e827351459fff4ac87c16ba4656757592cf67de8b199aea4cf9a\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://345aa8c007ed8b96a74260d289545713f1d7180df270d67687e3a540a61fa5c0\",\"dweb:/ipfs/QmNWCvpqSuar6UGLDVshUc7shUv3pt1J5FTf9VyZZ13wXL\"]},\"node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/WorkerMock.sol\":{\"keccak256\":\"0x6c5bc31c117033dd35fa7ab3b13b1647a4b449c5f5b4cbff41bce8a63529ab97\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://01aa1d3f3b8e2fd4b544312d96916b16b97e01ab740e2bae1137723b2f1a31b1\",\"dweb:/ipfs/QmVMemJ4MSgi6y9NxDdSeB6QbJRtCWojJNxzs3CRLT56EA\"]},\"node_modules/@openzeppelin/contracts/access/AccessControl.sol\":{\"keccak256\":\"0xa0e92d42942f4f57c5be50568dac11e9d00c93efcb458026e18d2d9b9b2e7308\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://46326c0bb1e296b67185e81c918e0b40501b8b6386165855df0a3f3c634b6a80\",\"dweb:/ipfs/QmTwyrDYtsxsk6pymJTK94PnEpzsmkpUxFuzEiakDopy4Z\"]},\"node_modules/@openzeppelin/contracts/access/IAccessControl.sol\":{\"keccak256\":\"0xc1c2a7f1563b77050dc6d507db9f4ada5d042c1f6a9ddbffdc49c77cdc0a1606\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fd54abb96a6156d9a761f6fdad1d3004bc48d2d4fce47f40a3f91a7ae83fc3a1\",\"dweb:/ipfs/QmUrFSGkTDJ7WaZ6qPVVe3Gn5uN2viPb7x7QQ35UX4DofX\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol\":{\"keccak256\":\"0x9b6b3e7803bc5f2f8cd7ad57db8ac1def61a9930a5a3107df4882e028a9605d7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://da62d6be1f5c6edf577f0cb45666a8aa9c2086a4bac87d95d65f02e2f4c36a4b\",\"dweb:/ipfs/QmNkpvBpoCMvX8JwAFNSc5XxJ2q5BXJpL5L1txb4QkqVFF\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC165.sol\":{\"keccak256\":\"0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://11fea9f8bc98949ac6709f0c1699db7430d2948137aa94d5a9e95a91f61a710a\",\"dweb:/ipfs/QmQdfRXxQjwP6yn3DVo1GHPpriKNcFghSPi94Z1oKEFUNS\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC20.sol\":{\"keccak256\":\"0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a2608291cb038b388d80b79a06b6118a42f7894ff67b7da10ec0dbbf5b2973ba\",\"dweb:/ipfs/QmWohqcBLbcxmA4eGPhZDXe5RYMMEEpFq22nfkaUMvTfw1\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db\",\"dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9\"]},\"node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0xca2ae13e0610f6a99238dd00b97bd786bc92732dae6d6b9d61f573ec51018310\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://75f8c71ce0c91c40dd5f249ace0b7d8270f8f1767231bcf71490f7157d6ba862\",\"dweb:/ipfs/QmYXgxeDyFHvz3JsXxLEYN6GNUR44ThHeFj5XkpkgMoG4w\"]},\"node_modules/@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0x9d8da059267bac779a2dbbb9a26c2acf00ca83085e105d62d5d4ef96054a47f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c78e2aa4313323cecd1ef12a8d6265b96beee1a199923abf55d9a2a9e291ad23\",\"dweb:/ipfs/QmUTs2KStXucZezzFo3EYeqYu47utu56qrF7jj1Gue65vb\"]},\"node_modules/@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"node_modules/@openzeppelin/contracts/utils/Errors.sol\":{\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf\",\"dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB\"]},\"node_modules/@openzeppelin/contracts/utils/Pausable.sol\":{\"keccak256\":\"0xb2e5f50762c27fb4b123e3619c3c02bdcba5e515309382e5bfb6f7d6486510bd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1a4b83328c98d518a2699c2cbe9e9b055e78aa57fa8639f1b88deb8b3750b5dc\",\"dweb:/ipfs/QmXdcYj5v7zQxXFPULShHkR5p4Wa2zYuupbHnFdV3cHYtc\"]},\"node_modules/@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0xddce8e17e3d3f9ed818b4f4c4478a8262aab8b11ed322f1bf5ed705bb4bd97fa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8084aa71a4cc7d2980972412a88fe4f114869faea3fefa5436431644eb5c0287\",\"dweb:/ipfs/Qmbqfs5dRdPvHVKY8kTaeyc65NdqXRQwRK7h9s5UJEhD1p\"]},\"node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { - "inputs": [], - "type": "error", - "name": "AccessControlBadConfirmation" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" }, - { - "internalType": "bytes32", - "name": "neededRole", - "type": "bytes32" - } - ], - "type": "error", - "name": "AccessControlUnauthorizedAccount" - }, - { "inputs": [], "type": "error", "name": "EnforcedPause" }, - { "inputs": [], "type": "error", "name": "ExpectedPause" }, - { - "inputs": [ - { "internalType": "address", "name": "token", "type": "address" } - ], - "type": "error", - "name": "SafeERC20FailedOperation" - }, - { - "inputs": [ - { "internalType": "address", "name": "_to", "type": "address" }, - { "internalType": "uint256", "name": "_value", "type": "uint256" } - ], - "type": "error", - "name": "Transfer_NativeFailed" - }, - { "inputs": [], "type": "error", "name": "Transfer_ToAddressIsZero" }, - { "inputs": [], "type": "error", "name": "Worker_NotAllowed" }, - { "inputs": [], "type": "error", "name": "Worker_OnlyMessageLib" }, - { - "inputs": [], - "type": "error", - "name": "Worker_RoleRenouncingDisabled" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address", - "indexed": false - } - ], - "type": "event", - "name": "Paused", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32", - "indexed": true - }, - { - "internalType": "bytes32", - "name": "previousAdminRole", - "type": "bytes32", - "indexed": true - }, - { - "internalType": "bytes32", - "name": "newAdminRole", - "type": "bytes32", - "indexed": true - } - ], - "type": "event", - "name": "RoleAdminChanged", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32", - "indexed": true - }, - { - "internalType": "address", - "name": "account", - "type": "address", - "indexed": true - }, - { - "internalType": "address", - "name": "sender", - "type": "address", - "indexed": true - } - ], - "type": "event", - "name": "RoleGranted", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32", - "indexed": true - }, - { - "internalType": "address", - "name": "account", - "type": "address", - "indexed": true - }, - { - "internalType": "address", - "name": "sender", - "type": "address", - "indexed": true - } - ], - "type": "event", - "name": "RoleRevoked", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "uint16", - "name": "multiplierBps", - "type": "uint16", - "indexed": false - } - ], - "type": "event", - "name": "SetDefaultMultiplierBps", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "priceFeed", - "type": "address", - "indexed": false - } - ], - "type": "event", - "name": "SetPriceFeed", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "dstEid", - "type": "uint32", - "indexed": false - }, - { - "internalType": "uint8[]", - "name": "optionTypes", - "type": "uint8[]", - "indexed": false - } - ], - "type": "event", - "name": "SetSupportedOptionTypes", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "workerLib", - "type": "address", - "indexed": false - } - ], - "type": "event", - "name": "SetWorkerLib", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address", - "indexed": false - } - ], - "type": "event", - "name": "Unpaused", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "lib", - "type": "address", - "indexed": false - }, - { - "internalType": "address", - "name": "to", - "type": "address", - "indexed": false - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "Withdraw", - "anonymous": false - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "DEFAULT_ADMIN_ROLE", - "outputs": [ - { "internalType": "bytes32", "name": "", "type": "bytes32" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "allowlistSize", - "outputs": [ - { "internalType": "uint64", "name": "", "type": "uint64" } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "defaultMultiplierBps", - "outputs": [ - { "internalType": "uint16", "name": "", "type": "uint16" } - ] - }, - { - "inputs": [ - { "internalType": "bytes32", "name": "role", "type": "bytes32" } - ], - "stateMutability": "view", - "type": "function", - "name": "getRoleAdmin", - "outputs": [ - { "internalType": "bytes32", "name": "", "type": "bytes32" } - ] - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" } - ], - "stateMutability": "view", - "type": "function", - "name": "getSupportedOptionTypes", - "outputs": [ - { "internalType": "uint8[]", "name": "", "type": "uint8[]" } - ] - }, - { - "inputs": [ - { "internalType": "bytes32", "name": "role", "type": "bytes32" }, - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "grantRole" - }, - { - "inputs": [ - { "internalType": "address", "name": "_sender", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "hasAcl", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "bytes32", "name": "role", "type": "bytes32" }, - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "hasRole", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "paused", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "priceFeed", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ] - }, - { - "inputs": [ - { "internalType": "bytes32", "name": "", "type": "bytes32" }, - { "internalType": "address", "name": "", "type": "address" } - ], - "stateMutability": "pure", - "type": "function", - "name": "renounceRole" - }, - { - "inputs": [ - { "internalType": "bytes32", "name": "role", "type": "bytes32" }, - { "internalType": "address", "name": "account", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "revokeRole" - }, - { - "inputs": [ - { - "internalType": "uint16", - "name": "_multiplierBps", - "type": "uint16" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setDefaultMultiplierBps" - }, - { - "inputs": [ - { "internalType": "bool", "name": "_paused", "type": "bool" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setPaused" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_priceFeed", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setPriceFeed" - }, - { - "inputs": [ - { "internalType": "uint32", "name": "_eid", "type": "uint32" }, - { - "internalType": "uint8[]", - "name": "_optionTypes", - "type": "uint8[]" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setSupportedOptionTypes" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_workerFeeLib", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "setWorkerFeeLib" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "stateMutability": "view", - "type": "function", - "name": "supportsInterface", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "address", "name": "_lib", "type": "address" }, - { "internalType": "address", "name": "_to", "type": "address" }, - { "internalType": "uint256", "name": "_amount", "type": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "withdrawFee" - }, - { - "inputs": [ - { "internalType": "address", "name": "_token", "type": "address" }, - { "internalType": "address", "name": "_to", "type": "address" }, - { "internalType": "uint256", "name": "_amount", "type": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "withdrawToken" - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "workerFeeLib", - "outputs": [ - { "internalType": "address", "name": "", "type": "address" } - ] - } - ], - "devdoc": { - "kind": "dev", - "methods": { - "constructor": { - "params": { - "_admins": "array of admin addresses that are granted the ADMIN_ROLE", - "_defaultMultiplierBps": "default multiplier for worker fee", - "_messageLibs": "array of message lib addresses that are granted the MESSAGE_LIB_ROLE", - "_priceFeed": "price feed address", - "_roleAdmin": "address that is granted the DEFAULT_ADMIN_ROLE (can grant and revoke all roles)" - } - }, - "getRoleAdmin(bytes32)": { - "details": "Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}." - }, - "grantRole(bytes32,address)": { - "details": "Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event." - }, - "hasAcl(address)": { - "details": "Access control list using allowlist and denylist1) if one address is in the denylist -> deny2) else if address in the allowlist OR allowlist is empty (allows everyone)-> allow3) else deny", - "params": { "_sender": "address to check" } - }, - "hasRole(bytes32,address)": { - "details": "Returns `true` if `account` has been granted `role`." - }, - "paused()": { - "details": "Returns true if the contract is paused, and false otherwise." - }, - "renounceRole(bytes32,address)": { - "details": "overrides AccessControl to disable renouncing of roles" - }, - "revokeRole(bytes32,address)": { - "details": "Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event." - }, - "setDefaultMultiplierBps(uint16)": { - "params": { "_multiplierBps": "default multiplier for worker fee" } - }, - "setPaused(bool)": { - "details": "flag to pause execution of workers (if used with whenNotPaused modifier)", - "params": { "_paused": "true to pause, false to unpause" } - }, - "setPriceFeed(address)": { - "params": { "_priceFeed": "price feed address" } - }, - "setWorkerFeeLib(address)": { - "params": { "_workerFeeLib": "worker fee lib address" } - }, - "supportsInterface(bytes4)": { - "details": "See {IERC165-supportsInterface}." - }, - "withdrawFee(address,address,uint256)": { - "details": "supports withdrawing fee from ULN301, ULN302 and more", - "params": { - "_amount": "amount to withdraw", - "_lib": "message lib address", - "_to": "address to withdraw fee to" - } - }, - "withdrawToken(address,address,uint256)": { - "details": "supports withdrawing token from the contract", - "params": { - "_amount": "amount to withdraw", - "_to": "address to withdraw token to", - "_token": "token address" - } - } - }, - "version": 1 - }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/WorkerMock.sol": "WorkerMock" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IWorker.sol": { - "keccak256": "0xa6b61913767305227576cc6da5067de4208f09a4f58bfbfe32beafdfae9869b1", - "urls": [ - "bzz-raw://b7fce83bfb831f383606aee7f5ff68a330c8526bb1036f9ba0813d3e4fa8d534", - "dweb:/ipfs/QmR7zAqJkmCgBj6sguS8t2WthY5k6FwsakgH4UY11uqD4n" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol": { - "keccak256": "0xf7f941bee89ea6369950fe54e8ac476ae6478b958b20fc0e8a83e8ff1364eac3", - "urls": [ - "bzz-raw://bacc29fd3866af71e59cb0bdc1cf82c882a4a7f4e2652fd413c9f12649762083", - "dweb:/ipfs/QmZh2toLnrQDWaNYhS5K4NoW7Vxd2GdZx9KA77vKEDLAqs" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol": { - "keccak256": "0x5cf5f24751b4e3ea1c9c5ded07cedfdfd62566b6daaffcc0144733859c9dba0c", - "urls": [ - "bzz-raw://cae7e35007a714f007ea08045ef7c0cfa6c91fd2425b5028b2d49abad357a5f0", - "dweb:/ipfs/QmcDBs5tsiyB35b8cwzWQWNnpkawb3uuHRaqE77Hxm2tve" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol": { - "keccak256": "0x919b37133adff4dc528e3061deb2789c3149971b530c61e556fb3d09ab315dfc", - "urls": [ - "bzz-raw://d8ff6a8a89297fa127f86b54e0db3eba1d6a6eeb4f6398d3c84d569665ac8f1b", - "dweb:/ipfs/QmVSwhw6xFDrLRAX4RXaCM47yBaBtac4wf36DYEq6KCTvT" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol": { - "keccak256": "0x0878f64dffebf58c4165569416372f40860fab546b88cd926eba0d5cb6d8d972", - "urls": [ - "bzz-raw://7e1b245d58221d16d8b5e0f01ef3e289a24a7df1ace3b94239e4d5b954ad5927", - "dweb:/ipfs/Qmappsgp7PCY9rSSNE9Cdn4BTRX591WfCSEgq2HxhA3z6S" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol": { - "keccak256": "0x85bc7090134529ec474866dc4bb1c48692d518c756eb0a961c82574829c51901", - "urls": [ - "bzz-raw://b18b23a1643fc6636c4ad9d9023e2e6ca2d3c2a4a046482d4655bff09950598d", - "dweb:/ipfs/Qma6G5SqiovwrMPfgqTrRngK1HWW373Wkf9c6YP2NhXpPk" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol": { - "keccak256": "0xff0c546c2813dae3e440882f46b377375f7461b0714efd80bd3f0c6e5cb8da4e", - "urls": [ - "bzz-raw://5173fc9143bea314b159ca5a9adb5626659ef763bc598e27de5fa46efe3291a6", - "dweb:/ipfs/QmSLFeMFPmVeGxT4sxRPW28ictjAS22M8rLeYRu9TXkA6D" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol": { - "keccak256": "0xf1c07bc61e7b1dce195ed12d50f87980fbf2d63cac1326fd28287f55fe0ba625", - "urls": [ - "bzz-raw://060f10ff7afc33c1c2f2b4b5ba29231fd3c943146488084d0e4ab99fce991d97", - "dweb:/ipfs/QmaSsefAqqEqtf8FgFUmDYMwTsAty3X1pqDb6SiFvry6B3" - ], - "license": "MIT" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Transfer.sol": { - "keccak256": "0x621d6dd5b8b7e827351459fff4ac87c16ba4656757592cf67de8b199aea4cf9a", - "urls": [ - "bzz-raw://345aa8c007ed8b96a74260d289545713f1d7180df270d67687e3a540a61fa5c0", - "dweb:/ipfs/QmNWCvpqSuar6UGLDVshUc7shUv3pt1J5FTf9VyZZ13wXL" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/WorkerMock.sol": { - "keccak256": "0x6c5bc31c117033dd35fa7ab3b13b1647a4b449c5f5b4cbff41bce8a63529ab97", - "urls": [ - "bzz-raw://01aa1d3f3b8e2fd4b544312d96916b16b97e01ab740e2bae1137723b2f1a31b1", - "dweb:/ipfs/QmVMemJ4MSgi6y9NxDdSeB6QbJRtCWojJNxzs3CRLT56EA" - ], - "license": "LZBL-1.2" - }, - "node_modules/@openzeppelin/contracts/access/AccessControl.sol": { - "keccak256": "0xa0e92d42942f4f57c5be50568dac11e9d00c93efcb458026e18d2d9b9b2e7308", - "urls": [ - "bzz-raw://46326c0bb1e296b67185e81c918e0b40501b8b6386165855df0a3f3c634b6a80", - "dweb:/ipfs/QmTwyrDYtsxsk6pymJTK94PnEpzsmkpUxFuzEiakDopy4Z" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/access/IAccessControl.sol": { - "keccak256": "0xc1c2a7f1563b77050dc6d507db9f4ada5d042c1f6a9ddbffdc49c77cdc0a1606", - "urls": [ - "bzz-raw://fd54abb96a6156d9a761f6fdad1d3004bc48d2d4fce47f40a3f91a7ae83fc3a1", - "dweb:/ipfs/QmUrFSGkTDJ7WaZ6qPVVe3Gn5uN2viPb7x7QQ35UX4DofX" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol": { - "keccak256": "0x9b6b3e7803bc5f2f8cd7ad57db8ac1def61a9930a5a3107df4882e028a9605d7", - "urls": [ - "bzz-raw://da62d6be1f5c6edf577f0cb45666a8aa9c2086a4bac87d95d65f02e2f4c36a4b", - "dweb:/ipfs/QmNkpvBpoCMvX8JwAFNSc5XxJ2q5BXJpL5L1txb4QkqVFF" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/interfaces/IERC165.sol": { - "keccak256": "0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724", - "urls": [ - "bzz-raw://11fea9f8bc98949ac6709f0c1699db7430d2948137aa94d5a9e95a91f61a710a", - "dweb:/ipfs/QmQdfRXxQjwP6yn3DVo1GHPpriKNcFghSPi94Z1oKEFUNS" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/interfaces/IERC20.sol": { - "keccak256": "0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c", - "urls": [ - "bzz-raw://a2608291cb038b388d80b79a06b6118a42f7894ff67b7da10ec0dbbf5b2973ba", - "dweb:/ipfs/QmWohqcBLbcxmA4eGPhZDXe5RYMMEEpFq22nfkaUMvTfw1" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol": { - "keccak256": "0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7", - "urls": [ - "bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db", - "dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol": { - "keccak256": "0xca2ae13e0610f6a99238dd00b97bd786bc92732dae6d6b9d61f573ec51018310", - "urls": [ - "bzz-raw://75f8c71ce0c91c40dd5f249ace0b7d8270f8f1767231bcf71490f7157d6ba862", - "dweb:/ipfs/QmYXgxeDyFHvz3JsXxLEYN6GNUR44ThHeFj5XkpkgMoG4w" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Address.sol": { - "keccak256": "0x9d8da059267bac779a2dbbb9a26c2acf00ca83085e105d62d5d4ef96054a47f5", - "urls": [ - "bzz-raw://c78e2aa4313323cecd1ef12a8d6265b96beee1a199923abf55d9a2a9e291ad23", - "dweb:/ipfs/QmUTs2KStXucZezzFo3EYeqYu47utu56qrF7jj1Gue65vb" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Context.sol": { - "keccak256": "0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2", - "urls": [ - "bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12", - "dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Errors.sol": { - "keccak256": "0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123", - "urls": [ - "bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf", - "dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/Pausable.sol": { - "keccak256": "0xb2e5f50762c27fb4b123e3619c3c02bdcba5e515309382e5bfb6f7d6486510bd", - "urls": [ - "bzz-raw://1a4b83328c98d518a2699c2cbe9e9b055e78aa57fa8639f1b88deb8b3750b5dc", - "dweb:/ipfs/QmXdcYj5v7zQxXFPULShHkR5p4Wa2zYuupbHnFdV3cHYtc" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/introspection/ERC165.sol": { - "keccak256": "0xddce8e17e3d3f9ed818b4f4c4478a8262aab8b11ed322f1bf5ed705bb4bd97fa", - "urls": [ - "bzz-raw://8084aa71a4cc7d2980972412a88fe4f114869faea3fefa5436431644eb5c0287", - "dweb:/ipfs/Qmbqfs5dRdPvHVKY8kTaeyc65NdqXRQwRK7h9s5UJEhD1p" - ], - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol": { - "keccak256": "0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8", - "urls": [ - "bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621", - "dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL" - ], - "license": "MIT" - } - }, - "version": 1 - }, - "id": 84 -} diff --git a/examples/oft-movement/out/build-info/13015b848c7e3958c05e0c59f2b45f03.json b/examples/oft-movement/out/build-info/13015b848c7e3958c05e0c59f2b45f03.json deleted file mode 100644 index e6a535f95..000000000 --- a/examples/oft-movement/out/build-info/13015b848c7e3958c05e0c59f2b45f03.json +++ /dev/null @@ -1,140 +0,0 @@ -{ - "id": "13015b848c7e3958c05e0c59f2b45f03", - "source_id_to_path": { - "0": "contracts/MyOFT.sol", - "1": "contracts/mocks/MyOFTMock.sol", - "2": "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/MessageLibBase.sol", - "3": "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/ReceiveLibBaseE2.sol", - "4": "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/SendLibBase.sol", - "5": "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/SendLibBaseE2.sol", - "6": "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IExecutor.sol", - "7": "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IExecutorFeeLib.sol", - "8": "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroExecutor.sol", - "9": "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroPriceFeed.sol", - "10": "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroReadExecutor.sol", - "11": "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroTreasury.sol", - "12": "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IWorker.sol", - "13": "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/libs/ExecutorOptions.sol", - "14": "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/libs/SafeCall.sol", - "15": "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/ReceiveUlnBase.sol", - "16": "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/SendUlnBase.sol", - "17": "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/UlnBase.sol", - "18": "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IDVN.sol", - "19": "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IDVNFeeLib.sol", - "20": "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/ILayerZeroDVN.sol", - "21": "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/ILayerZeroReadDVN.sol", - "22": "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IReceiveUlnE2.sol", - "23": "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/DVNOptions.sol", - "24": "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/ReadCmdCodecV1.sol", - "25": "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/SupportedCmdTypes.sol", - "26": "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/UlnOptions.sol", - "27": "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/readlib/ReadLibBase.sol", - "28": "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/uln301/interfaces/IUltraLightNode301.sol", - "29": "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessageLibManager.sol", - "30": "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingChannel.sol", - "31": "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingComposer.sol", - "32": "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingContext.sol", - "33": "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroComposer.sol", - "34": "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol", - "35": "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol", - "36": "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol", - "37": "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol", - "38": "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol", - "39": "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol", - "40": "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol", - "41": "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol", - "42": "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol", - "43": "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/CalldataBytesLib.sol", - "44": "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Errors.sol", - "45": "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/GUID.sol", - "46": "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Transfer.sol", - "47": "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/BlockedMessageLib.sol", - "48": "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/BitMaps.sol", - "49": "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/ExecutorOptions.sol", - "50": "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol", - "51": "node_modules/@layerzerolabs/lz-evm-v1-0.7/contracts/interfaces/ILayerZeroUltraLightNodeV2.sol", - "52": "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OApp.sol", - "53": "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppCore.sol", - "54": "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppReceiver.sol", - "55": "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppSender.sol", - "56": "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppComposer.sol", - "57": "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppCore.sol", - "58": "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppMsgInspector.sol", - "59": "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppOptionsType3.sol", - "60": "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppReceiver.sol", - "61": "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/libs/OAppOptionsType3.sol", - "62": "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/libs/OptionsBuilder.sol", - "63": "node_modules/@layerzerolabs/oapp-evm/contracts/precrime/OAppPreCrimeSimulator.sol", - "64": "node_modules/@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IOAppPreCrimeSimulator.sol", - "65": "node_modules/@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IPreCrime.sol", - "66": "node_modules/@layerzerolabs/oapp-evm/contracts/precrime/libs/Packet.sol", - "67": "node_modules/@layerzerolabs/oft-evm/contracts/OFT.sol", - "68": "node_modules/@layerzerolabs/oft-evm/contracts/OFTCore.sol", - "69": "node_modules/@layerzerolabs/oft-evm/contracts/interfaces/IOFT.sol", - "70": "node_modules/@layerzerolabs/oft-evm/contracts/libs/OFTComposeMsgCodec.sol", - "71": "node_modules/@layerzerolabs/oft-evm/contracts/libs/OFTMsgCodec.sol", - "72": "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/OptionsHelper.sol", - "73": "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/TestHelperOz5.sol", - "74": "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/DVNFeeLibMock.sol", - "75": "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/DVNMock.sol", - "76": "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/EndpointV2AltMock.sol", - "77": "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/EndpointV2Mock.sol", - "78": "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ExecutorFeeLibMock.sol", - "79": "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ExecutorMock.sol", - "80": "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/MultiSigMock.sol", - "81": "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/PriceFeedMock.sol", - "82": "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ReadLib1002Mock.sol", - "83": "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ReceiveUln302Mock.sol", - "84": "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/SendUln302Mock.sol", - "85": "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/SimpleMessageLibMock.sol", - "86": "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/WorkerMock.sol", - "87": "node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/test.sol", - "88": "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Base.sol", - "89": "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdAssertions.sol", - "90": "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdChains.sol", - "91": "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdCheats.sol", - "92": "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdError.sol", - "93": "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdInvariant.sol", - "94": "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdJson.sol", - "95": "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdMath.sol", - "96": "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdStorage.sol", - "97": "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdStyle.sol", - "98": "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdUtils.sol", - "99": "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Test.sol", - "100": "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Vm.sol", - "101": "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/console.sol", - "102": "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/console2.sol", - "103": "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/interfaces/IMulticall3.sol", - "104": "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/mocks/MockERC20.sol", - "105": "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/mocks/MockERC721.sol", - "106": "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/safeconsole.sol", - "107": "node_modules/@openzeppelin/contracts/access/AccessControl.sol", - "108": "node_modules/@openzeppelin/contracts/access/IAccessControl.sol", - "109": "node_modules/@openzeppelin/contracts/access/Ownable.sol", - "110": "node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol", - "111": "node_modules/@openzeppelin/contracts/interfaces/IERC165.sol", - "112": "node_modules/@openzeppelin/contracts/interfaces/IERC20.sol", - "113": "node_modules/@openzeppelin/contracts/interfaces/draft-IERC6093.sol", - "114": "node_modules/@openzeppelin/contracts/token/ERC20/ERC20.sol", - "115": "node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol", - "116": "node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol", - "117": "node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol", - "118": "node_modules/@openzeppelin/contracts/utils/Address.sol", - "119": "node_modules/@openzeppelin/contracts/utils/Context.sol", - "120": "node_modules/@openzeppelin/contracts/utils/Errors.sol", - "121": "node_modules/@openzeppelin/contracts/utils/Panic.sol", - "122": "node_modules/@openzeppelin/contracts/utils/Pausable.sol", - "123": "node_modules/@openzeppelin/contracts/utils/ReentrancyGuard.sol", - "124": "node_modules/@openzeppelin/contracts/utils/cryptography/ECDSA.sol", - "125": "node_modules/@openzeppelin/contracts/utils/introspection/ERC165.sol", - "126": "node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol", - "127": "node_modules/@openzeppelin/contracts/utils/math/SafeCast.sol", - "128": "node_modules/@openzeppelin/contracts/utils/structs/DoubleEndedQueue.sol", - "129": "node_modules/solidity-bytes-utils/contracts/BytesLib.sol", - "130": "test/foundry/MyOFT.t.sol", - "131": "test/mocks/ERC20Mock.sol", - "132": "test/mocks/OFTComposerMock.sol", - "133": "test/mocks/OFTMock.sol" - }, - "language": "Solidity" -} diff --git a/examples/oft-movement/out/build-info/15c57b83a95fe5a422295bb3f4778716.json b/examples/oft-movement/out/build-info/15c57b83a95fe5a422295bb3f4778716.json deleted file mode 100644 index 19604ba95..000000000 --- a/examples/oft-movement/out/build-info/15c57b83a95fe5a422295bb3f4778716.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "id": "15c57b83a95fe5a422295bb3f4778716", - "source_id_to_path": { - "0": "contracts/MyOFT.sol", - "1": "contracts/mocks/MyOFTMock.sol", - "2": "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol", - "3": "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol", - "4": "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol", - "5": "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol", - "6": "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol", - "7": "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol", - "8": "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol", - "9": "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol", - "10": "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol", - "11": "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol", - "12": "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OApp.sol", - "13": "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppCore.sol", - "14": "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppReceiver.sol", - "15": "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppSender.sol", - "16": "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppCore.sol", - "17": "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppMsgInspector.sol", - "18": "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppOptionsType3.sol", - "19": "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppReceiver.sol", - "20": "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/libs/OAppOptionsType3.sol", - "21": "node_modules/@layerzerolabs/oapp-evm/contracts/precrime/OAppPreCrimeSimulator.sol", - "22": "node_modules/@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IOAppPreCrimeSimulator.sol", - "23": "node_modules/@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IPreCrime.sol", - "24": "node_modules/@layerzerolabs/oapp-evm/contracts/precrime/libs/Packet.sol", - "25": "node_modules/@layerzerolabs/oft-evm/contracts/OFT.sol", - "26": "node_modules/@layerzerolabs/oft-evm/contracts/OFTCore.sol", - "27": "node_modules/@layerzerolabs/oft-evm/contracts/interfaces/IOFT.sol", - "28": "node_modules/@layerzerolabs/oft-evm/contracts/libs/OFTComposeMsgCodec.sol", - "29": "node_modules/@layerzerolabs/oft-evm/contracts/libs/OFTMsgCodec.sol", - "30": "node_modules/@openzeppelin/contracts/access/Ownable.sol", - "31": "node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol", - "32": "node_modules/@openzeppelin/contracts/interfaces/IERC165.sol", - "33": "node_modules/@openzeppelin/contracts/interfaces/IERC20.sol", - "34": "node_modules/@openzeppelin/contracts/interfaces/draft-IERC6093.sol", - "35": "node_modules/@openzeppelin/contracts/token/ERC20/ERC20.sol", - "36": "node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol", - "37": "node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol", - "38": "node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol", - "39": "node_modules/@openzeppelin/contracts/utils/Address.sol", - "40": "node_modules/@openzeppelin/contracts/utils/Context.sol", - "41": "node_modules/@openzeppelin/contracts/utils/Errors.sol", - "42": "node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol" - }, - "language": "Solidity" -} diff --git a/examples/oft-movement/out/build-info/8cf5046b276fd6c82474449fece4b596.json b/examples/oft-movement/out/build-info/8cf5046b276fd6c82474449fece4b596.json deleted file mode 100644 index 2617e4376..000000000 --- a/examples/oft-movement/out/build-info/8cf5046b276fd6c82474449fece4b596.json +++ /dev/null @@ -1,138 +0,0 @@ -{ - "id": "8cf5046b276fd6c82474449fece4b596", - "source_id_to_path": { - "0": "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/MessageLibBase.sol", - "1": "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/ReceiveLibBaseE2.sol", - "2": "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/SendLibBase.sol", - "3": "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/SendLibBaseE2.sol", - "4": "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IExecutor.sol", - "5": "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IExecutorFeeLib.sol", - "6": "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroExecutor.sol", - "7": "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroPriceFeed.sol", - "8": "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroReadExecutor.sol", - "9": "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/ILayerZeroTreasury.sol", - "10": "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/interfaces/IWorker.sol", - "11": "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/libs/ExecutorOptions.sol", - "12": "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/libs/SafeCall.sol", - "13": "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/ReceiveUlnBase.sol", - "14": "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/SendUlnBase.sol", - "15": "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/UlnBase.sol", - "16": "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IDVN.sol", - "17": "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IDVNFeeLib.sol", - "18": "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/ILayerZeroDVN.sol", - "19": "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/ILayerZeroReadDVN.sol", - "20": "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/interfaces/IReceiveUlnE2.sol", - "21": "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/DVNOptions.sol", - "22": "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/ReadCmdCodecV1.sol", - "23": "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/SupportedCmdTypes.sol", - "24": "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/libs/UlnOptions.sol", - "25": "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/readlib/ReadLibBase.sol", - "26": "node_modules/@layerzerolabs/lz-evm-messagelib-v2/contracts/uln/uln301/interfaces/IUltraLightNode301.sol", - "27": "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessageLibManager.sol", - "28": "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingChannel.sol", - "29": "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingComposer.sol", - "30": "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/MessagingContext.sol", - "31": "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroComposer.sol", - "32": "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroEndpointV2.sol", - "33": "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ILayerZeroReceiver.sol", - "34": "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLib.sol", - "35": "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessageLibManager.sol", - "36": "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingChannel.sol", - "37": "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingComposer.sol", - "38": "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/IMessagingContext.sol", - "39": "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/interfaces/ISendLib.sol", - "40": "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/AddressCast.sol", - "41": "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/CalldataBytesLib.sol", - "42": "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Errors.sol", - "43": "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/GUID.sol", - "44": "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Transfer.sol", - "45": "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/BlockedMessageLib.sol", - "46": "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/BitMaps.sol", - "47": "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/ExecutorOptions.sol", - "48": "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/PacketV1Codec.sol", - "49": "node_modules/@layerzerolabs/lz-evm-v1-0.7/contracts/interfaces/ILayerZeroUltraLightNodeV2.sol", - "50": "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OApp.sol", - "51": "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppCore.sol", - "52": "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppReceiver.sol", - "53": "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/OAppSender.sol", - "54": "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppComposer.sol", - "55": "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppCore.sol", - "56": "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppMsgInspector.sol", - "57": "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppOptionsType3.sol", - "58": "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/interfaces/IOAppReceiver.sol", - "59": "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/libs/OAppOptionsType3.sol", - "60": "node_modules/@layerzerolabs/oapp-evm/contracts/oapp/libs/OptionsBuilder.sol", - "61": "node_modules/@layerzerolabs/oapp-evm/contracts/precrime/OAppPreCrimeSimulator.sol", - "62": "node_modules/@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IOAppPreCrimeSimulator.sol", - "63": "node_modules/@layerzerolabs/oapp-evm/contracts/precrime/interfaces/IPreCrime.sol", - "64": "node_modules/@layerzerolabs/oapp-evm/contracts/precrime/libs/Packet.sol", - "65": "node_modules/@layerzerolabs/oft-evm/contracts/OFT.sol", - "66": "node_modules/@layerzerolabs/oft-evm/contracts/OFTCore.sol", - "67": "node_modules/@layerzerolabs/oft-evm/contracts/interfaces/IOFT.sol", - "68": "node_modules/@layerzerolabs/oft-evm/contracts/libs/OFTComposeMsgCodec.sol", - "69": "node_modules/@layerzerolabs/oft-evm/contracts/libs/OFTMsgCodec.sol", - "70": "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/OptionsHelper.sol", - "71": "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/TestHelperOz5.sol", - "72": "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/DVNFeeLibMock.sol", - "73": "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/DVNMock.sol", - "74": "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/EndpointV2AltMock.sol", - "75": "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/EndpointV2Mock.sol", - "76": "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ExecutorFeeLibMock.sol", - "77": "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ExecutorMock.sol", - "78": "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/MultiSigMock.sol", - "79": "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/PriceFeedMock.sol", - "80": "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ReadLib1002Mock.sol", - "81": "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/ReceiveUln302Mock.sol", - "82": "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/SendUln302Mock.sol", - "83": "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/SimpleMessageLibMock.sol", - "84": "node_modules/@layerzerolabs/test-devtools-evm-foundry/contracts/mocks/WorkerMock.sol", - "85": "node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/test.sol", - "86": "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Base.sol", - "87": "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdAssertions.sol", - "88": "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdChains.sol", - "89": "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdCheats.sol", - "90": "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdError.sol", - "91": "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdInvariant.sol", - "92": "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdJson.sol", - "93": "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdMath.sol", - "94": "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdStorage.sol", - "95": "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdStyle.sol", - "96": "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/StdUtils.sol", - "97": "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Test.sol", - "98": "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/Vm.sol", - "99": "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/console.sol", - "100": "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/console2.sol", - "101": "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/interfaces/IMulticall3.sol", - "102": "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/mocks/MockERC20.sol", - "103": "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/mocks/MockERC721.sol", - "104": "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/safeconsole.sol", - "105": "node_modules/@openzeppelin/contracts/access/AccessControl.sol", - "106": "node_modules/@openzeppelin/contracts/access/IAccessControl.sol", - "107": "node_modules/@openzeppelin/contracts/access/Ownable.sol", - "108": "node_modules/@openzeppelin/contracts/interfaces/IERC1363.sol", - "109": "node_modules/@openzeppelin/contracts/interfaces/IERC165.sol", - "110": "node_modules/@openzeppelin/contracts/interfaces/IERC20.sol", - "111": "node_modules/@openzeppelin/contracts/interfaces/draft-IERC6093.sol", - "112": "node_modules/@openzeppelin/contracts/token/ERC20/ERC20.sol", - "113": "node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol", - "114": "node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol", - "115": "node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol", - "116": "node_modules/@openzeppelin/contracts/utils/Address.sol", - "117": "node_modules/@openzeppelin/contracts/utils/Context.sol", - "118": "node_modules/@openzeppelin/contracts/utils/Errors.sol", - "119": "node_modules/@openzeppelin/contracts/utils/Panic.sol", - "120": "node_modules/@openzeppelin/contracts/utils/Pausable.sol", - "121": "node_modules/@openzeppelin/contracts/utils/ReentrancyGuard.sol", - "122": "node_modules/@openzeppelin/contracts/utils/cryptography/ECDSA.sol", - "123": "node_modules/@openzeppelin/contracts/utils/introspection/ERC165.sol", - "124": "node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol", - "125": "node_modules/@openzeppelin/contracts/utils/math/SafeCast.sol", - "126": "node_modules/@openzeppelin/contracts/utils/structs/DoubleEndedQueue.sol", - "127": "node_modules/solidity-bytes-utils/contracts/BytesLib.sol", - "128": "test/evm/foundry/MyOFT.t.sol", - "129": "test/evm/mocks/ERC20Mock.sol", - "130": "test/evm/mocks/OFTComposerMock.sol", - "131": "test/evm/mocks/OFTMock.sol" - }, - "language": "Solidity" -} diff --git a/examples/oft-movement/out/console.sol/console.json b/examples/oft-movement/out/console.sol/console.json deleted file mode 100644 index 2fb1098ef..000000000 --- a/examples/oft-movement/out/console.sol/console.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "abi": [], - "bytecode": { - "object": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220ffe71a7eec9df0c6e3372cec31e03175bd9578a818af8520ae2b33c7e263c70264736f6c63430008160033", - "sourceMap": "66:66622:99:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;66:66622:99;;;;;;;;;;;;;;;;;", - "linkReferences": {} - }, - "deployedBytecode": { - "object": "0x73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220ffe71a7eec9df0c6e3372cec31e03175bd9578a818af8520ae2b33c7e263c70264736f6c63430008160033", - "sourceMap": "66:66622:99:-:0;;;;;;;;", - "linkReferences": {} - }, - "methodIdentifiers": {}, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/console.sol\":\"console\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/console.sol\":{\"keccak256\":\"0x91d5413c2434ca58fd278b6e1e79fd98d10c83931cc2596a6038eee4daeb34ba\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://91ccea707361e48b9b7a161fe81f496b9932bc471e9c4e4e1e9c283f2453cc70\",\"dweb:/ipfs/QmcB66sZhQ6Kz7MUHcLE78YXRUZxoZnnxZjN6yATsbB2ec\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/console.sol": "console" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/console.sol": { - "keccak256": "0x91d5413c2434ca58fd278b6e1e79fd98d10c83931cc2596a6038eee4daeb34ba", - "urls": [ - "bzz-raw://91ccea707361e48b9b7a161fe81f496b9932bc471e9c4e4e1e9c283f2453cc70", - "dweb:/ipfs/QmcB66sZhQ6Kz7MUHcLE78YXRUZxoZnnxZjN6yATsbB2ec" - ], - "license": "MIT" - } - }, - "version": 1 - }, - "id": 99 -} diff --git a/examples/oft-movement/out/console2.sol/console2.json b/examples/oft-movement/out/console2.sol/console2.json deleted file mode 100644 index d31e91d8d..000000000 --- a/examples/oft-movement/out/console2.sol/console2.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "abi": [], - "bytecode": { - "object": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122099ba6d45b8a96107ffece0372565f9c4faa3ffcfca83333aa626e9871ab7e05864736f6c63430008160033", - "sourceMap": "525:69152:100:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;525:69152:100;;;;;;;;;;;;;;;;;", - "linkReferences": {} - }, - "deployedBytecode": { - "object": "0x73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122099ba6d45b8a96107ffece0372565f9c4faa3ffcfca83333aa626e9871ab7e05864736f6c63430008160033", - "sourceMap": "525:69152:100:-:0;;;;;;;;", - "linkReferences": {} - }, - "methodIdentifiers": {}, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"The original console.sol uses `int` and `uint` for computing function selectors, but it should use `int256` and `uint256`. This modified version fixes that. This version is recommended over `console.sol` if you don't need compatibility with Hardhat as the logs will show up in forge stack traces. If you do need compatibility with Hardhat, you must use `console.sol`. Reference: https://github.com/NomicFoundation/hardhat/issues/2178\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/console2.sol\":\"console2\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/console2.sol\":{\"keccak256\":\"0x954646445d1014c3cd85c7918f5e7adeeca5ee44b68c00bafa237e597a4e35ea\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://516fa3be52da4763147175bfba4be0aa011fadbb0c1afb01f97265bd4cee7973\",\"dweb:/ipfs/QmdixAyMJefx7qePChgdxcBH5MxhmN7vsqPuPLx3CgrVmF\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/console2.sol": "console2" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/console2.sol": { - "keccak256": "0x954646445d1014c3cd85c7918f5e7adeeca5ee44b68c00bafa237e597a4e35ea", - "urls": [ - "bzz-raw://516fa3be52da4763147175bfba4be0aa011fadbb0c1afb01f97265bd4cee7973", - "dweb:/ipfs/QmdixAyMJefx7qePChgdxcBH5MxhmN7vsqPuPLx3CgrVmF" - ], - "license": "MIT" - } - }, - "version": 1 - }, - "id": 100 -} diff --git a/examples/oft-movement/out/draft-IERC6093.sol/IERC1155Errors.json b/examples/oft-movement/out/draft-IERC6093.sol/IERC1155Errors.json deleted file mode 100644 index 7825e67e8..000000000 --- a/examples/oft-movement/out/draft-IERC6093.sol/IERC1155Errors.json +++ /dev/null @@ -1,168 +0,0 @@ -{ - "abi": [ - { - "type": "error", - "name": "ERC1155InsufficientBalance", - "inputs": [ - { "name": "sender", "type": "address", "internalType": "address" }, - { "name": "balance", "type": "uint256", "internalType": "uint256" }, - { "name": "needed", "type": "uint256", "internalType": "uint256" }, - { "name": "tokenId", "type": "uint256", "internalType": "uint256" } - ] - }, - { - "type": "error", - "name": "ERC1155InvalidApprover", - "inputs": [ - { "name": "approver", "type": "address", "internalType": "address" } - ] - }, - { - "type": "error", - "name": "ERC1155InvalidArrayLength", - "inputs": [ - { "name": "idsLength", "type": "uint256", "internalType": "uint256" }, - { "name": "valuesLength", "type": "uint256", "internalType": "uint256" } - ] - }, - { - "type": "error", - "name": "ERC1155InvalidOperator", - "inputs": [ - { "name": "operator", "type": "address", "internalType": "address" } - ] - }, - { - "type": "error", - "name": "ERC1155InvalidReceiver", - "inputs": [ - { "name": "receiver", "type": "address", "internalType": "address" } - ] - }, - { - "type": "error", - "name": "ERC1155InvalidSender", - "inputs": [ - { "name": "sender", "type": "address", "internalType": "address" } - ] - }, - { - "type": "error", - "name": "ERC1155MissingApprovalForAll", - "inputs": [ - { "name": "operator", "type": "address", "internalType": "address" }, - { "name": "owner", "type": "address", "internalType": "address" } - ] - } - ], - "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "methodIdentifiers": {}, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ERC1155InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC1155InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"idsLength\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"valuesLength\",\"type\":\"uint256\"}],\"name\":\"ERC1155InvalidArrayLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"ERC1155InvalidOperator\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC1155InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC1155InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ERC1155MissingApprovalForAll\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Standard ERC-1155 Errors Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-1155 tokens.\",\"errors\":{\"ERC1155InsufficientBalance(address,uint256,uint256,uint256)\":[{\"details\":\"Indicates an error related to the current `balance` of a `sender`. Used in transfers.\",\"params\":{\"balance\":\"Current balance for the interacting account.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"sender\":\"Address whose tokens are being transferred.\",\"tokenId\":\"Identifier number of a token.\"}}],\"ERC1155InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC1155InvalidArrayLength(uint256,uint256)\":[{\"details\":\"Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation. Used in batch transfers.\",\"params\":{\"idsLength\":\"Length of the array of token identifiers\",\"valuesLength\":\"Length of the array of token amounts\"}}],\"ERC1155InvalidOperator(address)\":[{\"details\":\"Indicates a failure with the `operator` to be approved. Used in approvals.\",\"params\":{\"operator\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC1155InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC1155InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC1155MissingApprovalForAll(address,address)\":[{\"details\":\"Indicates a failure with the `operator`\\u2019s approval. Used in transfers.\",\"params\":{\"operator\":\"Address that may be allowed to operate on tokens without being their owner.\",\"owner\":\"Address of the current owner of a token.\"}}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":\"IERC1155Errors\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x880da465c203cec76b10d72dbd87c80f387df4102274f23eea1f9c9b0918792b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://399594cd8bb0143bc9e55e0f1d071d0d8c850a394fb7a319d50edd55d9ed822b\",\"dweb:/ipfs/QmbPZzgtT6LEm9CMqWfagQFwETbV1ztpECBB1DtQHrKiRz\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { - "inputs": [ - { "internalType": "address", "name": "sender", "type": "address" }, - { "internalType": "uint256", "name": "balance", "type": "uint256" }, - { "internalType": "uint256", "name": "needed", "type": "uint256" }, - { "internalType": "uint256", "name": "tokenId", "type": "uint256" } - ], - "type": "error", - "name": "ERC1155InsufficientBalance" - }, - { - "inputs": [ - { "internalType": "address", "name": "approver", "type": "address" } - ], - "type": "error", - "name": "ERC1155InvalidApprover" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "idsLength", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "valuesLength", - "type": "uint256" - } - ], - "type": "error", - "name": "ERC1155InvalidArrayLength" - }, - { - "inputs": [ - { "internalType": "address", "name": "operator", "type": "address" } - ], - "type": "error", - "name": "ERC1155InvalidOperator" - }, - { - "inputs": [ - { "internalType": "address", "name": "receiver", "type": "address" } - ], - "type": "error", - "name": "ERC1155InvalidReceiver" - }, - { - "inputs": [ - { "internalType": "address", "name": "sender", "type": "address" } - ], - "type": "error", - "name": "ERC1155InvalidSender" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - }, - { "internalType": "address", "name": "owner", "type": "address" } - ], - "type": "error", - "name": "ERC1155MissingApprovalForAll" - } - ], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@openzeppelin/contracts/interfaces/draft-IERC6093.sol": "IERC1155Errors" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@openzeppelin/contracts/interfaces/draft-IERC6093.sol": { - "keccak256": "0x880da465c203cec76b10d72dbd87c80f387df4102274f23eea1f9c9b0918792b", - "urls": [ - "bzz-raw://399594cd8bb0143bc9e55e0f1d071d0d8c850a394fb7a319d50edd55d9ed822b", - "dweb:/ipfs/QmbPZzgtT6LEm9CMqWfagQFwETbV1ztpECBB1DtQHrKiRz" - ], - "license": "MIT" - } - }, - "version": 1 - }, - "id": 34 -} diff --git a/examples/oft-movement/out/draft-IERC6093.sol/IERC20Errors.json b/examples/oft-movement/out/draft-IERC6093.sol/IERC20Errors.json deleted file mode 100644 index 5c45d201c..000000000 --- a/examples/oft-movement/out/draft-IERC6093.sol/IERC20Errors.json +++ /dev/null @@ -1,144 +0,0 @@ -{ - "abi": [ - { - "type": "error", - "name": "ERC20InsufficientAllowance", - "inputs": [ - { "name": "spender", "type": "address", "internalType": "address" }, - { "name": "allowance", "type": "uint256", "internalType": "uint256" }, - { "name": "needed", "type": "uint256", "internalType": "uint256" } - ] - }, - { - "type": "error", - "name": "ERC20InsufficientBalance", - "inputs": [ - { "name": "sender", "type": "address", "internalType": "address" }, - { "name": "balance", "type": "uint256", "internalType": "uint256" }, - { "name": "needed", "type": "uint256", "internalType": "uint256" } - ] - }, - { - "type": "error", - "name": "ERC20InvalidApprover", - "inputs": [ - { "name": "approver", "type": "address", "internalType": "address" } - ] - }, - { - "type": "error", - "name": "ERC20InvalidReceiver", - "inputs": [ - { "name": "receiver", "type": "address", "internalType": "address" } - ] - }, - { - "type": "error", - "name": "ERC20InvalidSender", - "inputs": [ - { "name": "sender", "type": "address", "internalType": "address" } - ] - }, - { - "type": "error", - "name": "ERC20InvalidSpender", - "inputs": [ - { "name": "spender", "type": "address", "internalType": "address" } - ] - } - ], - "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "methodIdentifiers": {}, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"allowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSpender\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Standard ERC-20 Errors Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-20 tokens.\",\"errors\":{\"ERC20InsufficientAllowance(address,uint256,uint256)\":[{\"details\":\"Indicates a failure with the `spender`\\u2019s `allowance`. Used in transfers.\",\"params\":{\"allowance\":\"Amount of tokens a `spender` is allowed to operate with.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC20InsufficientBalance(address,uint256,uint256)\":[{\"details\":\"Indicates an error related to the current `balance` of a `sender`. Used in transfers.\",\"params\":{\"balance\":\"Current balance for the interacting account.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC20InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC20InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidSpender(address)\":[{\"details\":\"Indicates a failure with the `spender` to be approved. Used in approvals.\",\"params\":{\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":\"IERC20Errors\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x880da465c203cec76b10d72dbd87c80f387df4102274f23eea1f9c9b0918792b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://399594cd8bb0143bc9e55e0f1d071d0d8c850a394fb7a319d50edd55d9ed822b\",\"dweb:/ipfs/QmbPZzgtT6LEm9CMqWfagQFwETbV1ztpECBB1DtQHrKiRz\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { - "inputs": [ - { "internalType": "address", "name": "spender", "type": "address" }, - { - "internalType": "uint256", - "name": "allowance", - "type": "uint256" - }, - { "internalType": "uint256", "name": "needed", "type": "uint256" } - ], - "type": "error", - "name": "ERC20InsufficientAllowance" - }, - { - "inputs": [ - { "internalType": "address", "name": "sender", "type": "address" }, - { "internalType": "uint256", "name": "balance", "type": "uint256" }, - { "internalType": "uint256", "name": "needed", "type": "uint256" } - ], - "type": "error", - "name": "ERC20InsufficientBalance" - }, - { - "inputs": [ - { "internalType": "address", "name": "approver", "type": "address" } - ], - "type": "error", - "name": "ERC20InvalidApprover" - }, - { - "inputs": [ - { "internalType": "address", "name": "receiver", "type": "address" } - ], - "type": "error", - "name": "ERC20InvalidReceiver" - }, - { - "inputs": [ - { "internalType": "address", "name": "sender", "type": "address" } - ], - "type": "error", - "name": "ERC20InvalidSender" - }, - { - "inputs": [ - { "internalType": "address", "name": "spender", "type": "address" } - ], - "type": "error", - "name": "ERC20InvalidSpender" - } - ], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@openzeppelin/contracts/interfaces/draft-IERC6093.sol": "IERC20Errors" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@openzeppelin/contracts/interfaces/draft-IERC6093.sol": { - "keccak256": "0x880da465c203cec76b10d72dbd87c80f387df4102274f23eea1f9c9b0918792b", - "urls": [ - "bzz-raw://399594cd8bb0143bc9e55e0f1d071d0d8c850a394fb7a319d50edd55d9ed822b", - "dweb:/ipfs/QmbPZzgtT6LEm9CMqWfagQFwETbV1ztpECBB1DtQHrKiRz" - ], - "license": "MIT" - } - }, - "version": 1 - }, - "id": 34 -} diff --git a/examples/oft-movement/out/draft-IERC6093.sol/IERC721Errors.json b/examples/oft-movement/out/draft-IERC6093.sol/IERC721Errors.json deleted file mode 100644 index 2199416c7..000000000 --- a/examples/oft-movement/out/draft-IERC6093.sol/IERC721Errors.json +++ /dev/null @@ -1,170 +0,0 @@ -{ - "abi": [ - { - "type": "error", - "name": "ERC721IncorrectOwner", - "inputs": [ - { "name": "sender", "type": "address", "internalType": "address" }, - { "name": "tokenId", "type": "uint256", "internalType": "uint256" }, - { "name": "owner", "type": "address", "internalType": "address" } - ] - }, - { - "type": "error", - "name": "ERC721InsufficientApproval", - "inputs": [ - { "name": "operator", "type": "address", "internalType": "address" }, - { "name": "tokenId", "type": "uint256", "internalType": "uint256" } - ] - }, - { - "type": "error", - "name": "ERC721InvalidApprover", - "inputs": [ - { "name": "approver", "type": "address", "internalType": "address" } - ] - }, - { - "type": "error", - "name": "ERC721InvalidOperator", - "inputs": [ - { "name": "operator", "type": "address", "internalType": "address" } - ] - }, - { - "type": "error", - "name": "ERC721InvalidOwner", - "inputs": [ - { "name": "owner", "type": "address", "internalType": "address" } - ] - }, - { - "type": "error", - "name": "ERC721InvalidReceiver", - "inputs": [ - { "name": "receiver", "type": "address", "internalType": "address" } - ] - }, - { - "type": "error", - "name": "ERC721InvalidSender", - "inputs": [ - { "name": "sender", "type": "address", "internalType": "address" } - ] - }, - { - "type": "error", - "name": "ERC721NonexistentToken", - "inputs": [ - { "name": "tokenId", "type": "uint256", "internalType": "uint256" } - ] - } - ], - "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, - "methodIdentifiers": {}, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ERC721IncorrectOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ERC721InsufficientApproval\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC721InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"ERC721InvalidOperator\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ERC721InvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC721InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC721InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ERC721NonexistentToken\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Standard ERC-721 Errors Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-721 tokens.\",\"errors\":{\"ERC721IncorrectOwner(address,uint256,address)\":[{\"details\":\"Indicates an error related to the ownership over a particular token. Used in transfers.\",\"params\":{\"owner\":\"Address of the current owner of a token.\",\"sender\":\"Address whose tokens are being transferred.\",\"tokenId\":\"Identifier number of a token.\"}}],\"ERC721InsufficientApproval(address,uint256)\":[{\"details\":\"Indicates a failure with the `operator`\\u2019s approval. Used in transfers.\",\"params\":{\"operator\":\"Address that may be allowed to operate on tokens without being their owner.\",\"tokenId\":\"Identifier number of a token.\"}}],\"ERC721InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC721InvalidOperator(address)\":[{\"details\":\"Indicates a failure with the `operator` to be approved. Used in approvals.\",\"params\":{\"operator\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC721InvalidOwner(address)\":[{\"details\":\"Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in ERC-20. Used in balance queries.\",\"params\":{\"owner\":\"Address of the current owner of a token.\"}}],\"ERC721InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC721InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC721NonexistentToken(uint256)\":[{\"details\":\"Indicates a `tokenId` whose `owner` is the zero address.\",\"params\":{\"tokenId\":\"Identifier number of a token.\"}}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":\"IERC721Errors\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x880da465c203cec76b10d72dbd87c80f387df4102274f23eea1f9c9b0918792b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://399594cd8bb0143bc9e55e0f1d071d0d8c850a394fb7a319d50edd55d9ed822b\",\"dweb:/ipfs/QmbPZzgtT6LEm9CMqWfagQFwETbV1ztpECBB1DtQHrKiRz\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { - "inputs": [ - { "internalType": "address", "name": "sender", "type": "address" }, - { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, - { "internalType": "address", "name": "owner", "type": "address" } - ], - "type": "error", - "name": "ERC721IncorrectOwner" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - }, - { "internalType": "uint256", "name": "tokenId", "type": "uint256" } - ], - "type": "error", - "name": "ERC721InsufficientApproval" - }, - { - "inputs": [ - { "internalType": "address", "name": "approver", "type": "address" } - ], - "type": "error", - "name": "ERC721InvalidApprover" - }, - { - "inputs": [ - { "internalType": "address", "name": "operator", "type": "address" } - ], - "type": "error", - "name": "ERC721InvalidOperator" - }, - { - "inputs": [ - { "internalType": "address", "name": "owner", "type": "address" } - ], - "type": "error", - "name": "ERC721InvalidOwner" - }, - { - "inputs": [ - { "internalType": "address", "name": "receiver", "type": "address" } - ], - "type": "error", - "name": "ERC721InvalidReceiver" - }, - { - "inputs": [ - { "internalType": "address", "name": "sender", "type": "address" } - ], - "type": "error", - "name": "ERC721InvalidSender" - }, - { - "inputs": [ - { "internalType": "uint256", "name": "tokenId", "type": "uint256" } - ], - "type": "error", - "name": "ERC721NonexistentToken" - } - ], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@openzeppelin/contracts/interfaces/draft-IERC6093.sol": "IERC721Errors" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@openzeppelin/contracts/interfaces/draft-IERC6093.sol": { - "keccak256": "0x880da465c203cec76b10d72dbd87c80f387df4102274f23eea1f9c9b0918792b", - "urls": [ - "bzz-raw://399594cd8bb0143bc9e55e0f1d071d0d8c850a394fb7a319d50edd55d9ed822b", - "dweb:/ipfs/QmbPZzgtT6LEm9CMqWfagQFwETbV1ztpECBB1DtQHrKiRz" - ], - "license": "MIT" - } - }, - "version": 1 - }, - "id": 34 -} diff --git a/examples/oft-movement/out/libs/Errors.sol/Errors.json b/examples/oft-movement/out/libs/Errors.sol/Errors.json deleted file mode 100644 index 33e86eaf1..000000000 --- a/examples/oft-movement/out/libs/Errors.sol/Errors.json +++ /dev/null @@ -1,244 +0,0 @@ -{ - "abi": [ - { "type": "error", "name": "LZ_AlreadyRegistered", "inputs": [] }, - { "type": "error", "name": "LZ_ComposeExists", "inputs": [] }, - { - "type": "error", - "name": "LZ_ComposeNotFound", - "inputs": [ - { "name": "expected", "type": "bytes32", "internalType": "bytes32" }, - { "name": "actual", "type": "bytes32", "internalType": "bytes32" } - ] - }, - { - "type": "error", - "name": "LZ_DefaultReceiveLibUnavailable", - "inputs": [] - }, - { "type": "error", "name": "LZ_DefaultSendLibUnavailable", "inputs": [] }, - { - "type": "error", - "name": "LZ_InsufficientFee", - "inputs": [ - { - "name": "requiredNative", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "suppliedNative", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "requiredLzToken", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "suppliedLzToken", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "error", - "name": "LZ_InvalidAmount", - "inputs": [ - { "name": "required", "type": "uint256", "internalType": "uint256" }, - { "name": "supplied", "type": "uint256", "internalType": "uint256" } - ] - }, - { "type": "error", "name": "LZ_InvalidArgument", "inputs": [] }, - { "type": "error", "name": "LZ_InvalidExpiry", "inputs": [] }, - { - "type": "error", - "name": "LZ_InvalidNonce", - "inputs": [ - { "name": "nonce", "type": "uint64", "internalType": "uint64" } - ] - }, - { "type": "error", "name": "LZ_InvalidPayloadHash", "inputs": [] }, - { "type": "error", "name": "LZ_InvalidReceiveLibrary", "inputs": [] }, - { "type": "error", "name": "LZ_LzTokenUnavailable", "inputs": [] }, - { "type": "error", "name": "LZ_NotImplemented", "inputs": [] }, - { "type": "error", "name": "LZ_OnlyNonDefaultLib", "inputs": [] }, - { "type": "error", "name": "LZ_OnlyReceiveLib", "inputs": [] }, - { "type": "error", "name": "LZ_OnlyRegisteredLib", "inputs": [] }, - { "type": "error", "name": "LZ_OnlyRegisteredOrDefaultLib", "inputs": [] }, - { "type": "error", "name": "LZ_OnlySendLib", "inputs": [] }, - { "type": "error", "name": "LZ_PathNotInitializable", "inputs": [] }, - { "type": "error", "name": "LZ_PathNotVerifiable", "inputs": [] }, - { - "type": "error", - "name": "LZ_PayloadHashNotFound", - "inputs": [ - { "name": "expected", "type": "bytes32", "internalType": "bytes32" }, - { "name": "actual", "type": "bytes32", "internalType": "bytes32" } - ] - }, - { "type": "error", "name": "LZ_SameValue", "inputs": [] }, - { "type": "error", "name": "LZ_SendReentrancy", "inputs": [] }, - { "type": "error", "name": "LZ_Unauthorized", "inputs": [] }, - { "type": "error", "name": "LZ_UnsupportedEid", "inputs": [] }, - { "type": "error", "name": "LZ_UnsupportedInterface", "inputs": [] }, - { "type": "error", "name": "LZ_ZeroLzTokenFee", "inputs": [] } - ], - "bytecode": { - "object": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212208b63f9ee3571fb85a8ce7500684df49ca67118f61b07ca4ffc02aeec36680c7e64736f6c63430008160033", - "sourceMap": "64:1199:42:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;64:1199:42;;;;;;;;;;;;;;;;;", - "linkReferences": {} - }, - "deployedBytecode": { - "object": "0x73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212208b63f9ee3571fb85a8ce7500684df49ca67118f61b07ca4ffc02aeec36680c7e64736f6c63430008160033", - "sourceMap": "64:1199:42:-:0;;;;;;;;", - "linkReferences": {} - }, - "methodIdentifiers": {}, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"LZ_AlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_ComposeExists\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"expected\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"actual\",\"type\":\"bytes32\"}],\"name\":\"LZ_ComposeNotFound\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_DefaultReceiveLibUnavailable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_DefaultSendLibUnavailable\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"requiredNative\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"suppliedNative\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requiredLzToken\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"suppliedLzToken\",\"type\":\"uint256\"}],\"name\":\"LZ_InsufficientFee\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"required\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"supplied\",\"type\":\"uint256\"}],\"name\":\"LZ_InvalidAmount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_InvalidArgument\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_InvalidExpiry\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"name\":\"LZ_InvalidNonce\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_InvalidPayloadHash\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_InvalidReceiveLibrary\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_LzTokenUnavailable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_NotImplemented\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_OnlyNonDefaultLib\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_OnlyReceiveLib\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_OnlyRegisteredLib\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_OnlyRegisteredOrDefaultLib\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_OnlySendLib\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_PathNotInitializable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_PathNotVerifiable\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"expected\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"actual\",\"type\":\"bytes32\"}],\"name\":\"LZ_PayloadHashNotFound\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_SameValue\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_SendReentrancy\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_Unauthorized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_UnsupportedEid\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_UnsupportedInterface\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LZ_ZeroLzTokenFee\",\"type\":\"error\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Errors.sol\":\"Errors\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Errors.sol\":{\"keccak256\":\"0x35bcd6ca99c4c8d9f7d8413d1b92fb4a4d4a420ce3bf64b0fb01e68e6bcf2fa7\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://0ac14f98563f9c610c936c93e71eff657efaba1e1d892be6a215aa5cb1f63a24\",\"dweb:/ipfs/QmVZZ8owwfDGLQTAzQJJqmYY4KsrChDagh5GBK7rChT5wb\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { "inputs": [], "type": "error", "name": "LZ_AlreadyRegistered" }, - { "inputs": [], "type": "error", "name": "LZ_ComposeExists" }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "expected", - "type": "bytes32" - }, - { "internalType": "bytes32", "name": "actual", "type": "bytes32" } - ], - "type": "error", - "name": "LZ_ComposeNotFound" - }, - { - "inputs": [], - "type": "error", - "name": "LZ_DefaultReceiveLibUnavailable" - }, - { - "inputs": [], - "type": "error", - "name": "LZ_DefaultSendLibUnavailable" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "requiredNative", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "suppliedNative", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "requiredLzToken", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "suppliedLzToken", - "type": "uint256" - } - ], - "type": "error", - "name": "LZ_InsufficientFee" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "required", - "type": "uint256" - }, - { "internalType": "uint256", "name": "supplied", "type": "uint256" } - ], - "type": "error", - "name": "LZ_InvalidAmount" - }, - { "inputs": [], "type": "error", "name": "LZ_InvalidArgument" }, - { "inputs": [], "type": "error", "name": "LZ_InvalidExpiry" }, - { - "inputs": [ - { "internalType": "uint64", "name": "nonce", "type": "uint64" } - ], - "type": "error", - "name": "LZ_InvalidNonce" - }, - { "inputs": [], "type": "error", "name": "LZ_InvalidPayloadHash" }, - { "inputs": [], "type": "error", "name": "LZ_InvalidReceiveLibrary" }, - { "inputs": [], "type": "error", "name": "LZ_LzTokenUnavailable" }, - { "inputs": [], "type": "error", "name": "LZ_NotImplemented" }, - { "inputs": [], "type": "error", "name": "LZ_OnlyNonDefaultLib" }, - { "inputs": [], "type": "error", "name": "LZ_OnlyReceiveLib" }, - { "inputs": [], "type": "error", "name": "LZ_OnlyRegisteredLib" }, - { - "inputs": [], - "type": "error", - "name": "LZ_OnlyRegisteredOrDefaultLib" - }, - { "inputs": [], "type": "error", "name": "LZ_OnlySendLib" }, - { "inputs": [], "type": "error", "name": "LZ_PathNotInitializable" }, - { "inputs": [], "type": "error", "name": "LZ_PathNotVerifiable" }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "expected", - "type": "bytes32" - }, - { "internalType": "bytes32", "name": "actual", "type": "bytes32" } - ], - "type": "error", - "name": "LZ_PayloadHashNotFound" - }, - { "inputs": [], "type": "error", "name": "LZ_SameValue" }, - { "inputs": [], "type": "error", "name": "LZ_SendReentrancy" }, - { "inputs": [], "type": "error", "name": "LZ_Unauthorized" }, - { "inputs": [], "type": "error", "name": "LZ_UnsupportedEid" }, - { "inputs": [], "type": "error", "name": "LZ_UnsupportedInterface" }, - { "inputs": [], "type": "error", "name": "LZ_ZeroLzTokenFee" } - ], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Errors.sol": "Errors" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/Errors.sol": { - "keccak256": "0x35bcd6ca99c4c8d9f7d8413d1b92fb4a4d4a420ce3bf64b0fb01e68e6bcf2fa7", - "urls": [ - "bzz-raw://0ac14f98563f9c610c936c93e71eff657efaba1e1d892be6a215aa5cb1f63a24", - "dweb:/ipfs/QmVZZ8owwfDGLQTAzQJJqmYY4KsrChDagh5GBK7rChT5wb" - ], - "license": "LZBL-1.2" - } - }, - "version": 1 - }, - "id": 42 -} diff --git a/examples/oft-movement/out/libs/ExecutorOptions.sol/ExecutorOptions.json b/examples/oft-movement/out/libs/ExecutorOptions.sol/ExecutorOptions.json deleted file mode 100644 index c829c25b8..000000000 --- a/examples/oft-movement/out/libs/ExecutorOptions.sol/ExecutorOptions.json +++ /dev/null @@ -1,94 +0,0 @@ -{ - "abi": [ - { - "type": "error", - "name": "Executor_InvalidLzComposeOption", - "inputs": [] - }, - { - "type": "error", - "name": "Executor_InvalidLzReceiveOption", - "inputs": [] - }, - { - "type": "error", - "name": "Executor_InvalidNativeDropOption", - "inputs": [] - } - ], - "bytecode": { - "object": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220a6c659f5efdb1a90fb02d076fa771fca9153193e7cf8760a184aae0b53431f4864736f6c63430008160033", - "sourceMap": "133:3427:47:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;133:3427:47;;;;;;;;;;;;;;;;;", - "linkReferences": {} - }, - "deployedBytecode": { - "object": "0x73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220a6c659f5efdb1a90fb02d076fa771fca9153193e7cf8760a184aae0b53431f4864736f6c63430008160033", - "sourceMap": "133:3427:47:-:0;;;;;;;;", - "linkReferences": {} - }, - "methodIdentifiers": {}, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"Executor_InvalidLzComposeOption\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Executor_InvalidLzReceiveOption\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Executor_InvalidNativeDropOption\",\"type\":\"error\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/ExecutorOptions.sol\":\"ExecutorOptions\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/CalldataBytesLib.sol\":{\"keccak256\":\"0x5c0db161cef6603c3b256d4220f489419e7478ef775e52a80056654129c61875\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://a33245d0fdd3992bb56b31d1840108d36bb46c8d617b659ef1af8dd7ed86302d\",\"dweb:/ipfs/QmWyBqT7Tdrfn5zz9xYM3V1PBtfAZAVwwCrrKwwfi3wMQK\"]},\"node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/ExecutorOptions.sol\":{\"keccak256\":\"0x621c6090fc432f94a99f677a95d72b75f56db89ddc5fc870669777a313587c28\",\"license\":\"LZBL-1.2\",\"urls\":[\"bzz-raw://69086166f16d29e30c5eb9ca2f97afb27569afe619807d79736833a809a512d2\",\"dweb:/ipfs/QmcZqXjFuVdTrfbteKBF3GuEpjVFZ2YNZTa3J87dyLsqav\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { - "inputs": [], - "type": "error", - "name": "Executor_InvalidLzComposeOption" - }, - { - "inputs": [], - "type": "error", - "name": "Executor_InvalidLzReceiveOption" - }, - { - "inputs": [], - "type": "error", - "name": "Executor_InvalidNativeDropOption" - } - ], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/ExecutorOptions.sol": "ExecutorOptions" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/libs/CalldataBytesLib.sol": { - "keccak256": "0x5c0db161cef6603c3b256d4220f489419e7478ef775e52a80056654129c61875", - "urls": [ - "bzz-raw://a33245d0fdd3992bb56b31d1840108d36bb46c8d617b659ef1af8dd7ed86302d", - "dweb:/ipfs/QmWyBqT7Tdrfn5zz9xYM3V1PBtfAZAVwwCrrKwwfi3wMQK" - ], - "license": "LZBL-1.2" - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2/contracts/messagelib/libs/ExecutorOptions.sol": { - "keccak256": "0x621c6090fc432f94a99f677a95d72b75f56db89ddc5fc870669777a313587c28", - "urls": [ - "bzz-raw://69086166f16d29e30c5eb9ca2f97afb27569afe619807d79736833a809a512d2", - "dweb:/ipfs/QmcZqXjFuVdTrfbteKBF3GuEpjVFZ2YNZTa3J87dyLsqav" - ], - "license": "LZBL-1.2" - } - }, - "version": 1 - }, - "id": 47 -} diff --git a/examples/oft-movement/out/safeconsole.sol/safeconsole.json b/examples/oft-movement/out/safeconsole.sol/safeconsole.json deleted file mode 100644 index 61687be3c..000000000 --- a/examples/oft-movement/out/safeconsole.sol/safeconsole.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "abi": [], - "bytecode": { - "object": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122023d11609dd422bb852180016e413b3e3a11bf8c996089ff19437d2b7e989547d64736f6c63430008160033", - "sourceMap": "163:397734:104:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;163:397734:104;;;;;;;;;;;;;;;;;", - "linkReferences": {} - }, - "deployedBytecode": { - "object": "0x73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122023d11609dd422bb852180016e413b3e3a11bf8c996089ff19437d2b7e989547d64736f6c63430008160033", - "sourceMap": "163:397734:104:-:0;;;;;;;;", - "linkReferences": {} - }, - "methodIdentifiers": {}, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"author\":\"philogy \",\"details\":\"Code generated automatically by script.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/safeconsole.sol\":\"safeconsole\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/safeconsole.sol\":{\"keccak256\":\"0xbaf41fdc6c54297e7cd8250e48b0f20eaac918e342a1028cef3f9a52ac086381\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a500ad81dea226f9910e6b50f99a9ff930105e393a692cbfb2185e4cdb4424ae\",\"dweb:/ipfs/QmVbUQpXNMmMWRiy4FvBNczzq46BMGfUoBikvSHNiCxVTq\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/safeconsole.sol": "safeconsole" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/safeconsole.sol": { - "keccak256": "0xbaf41fdc6c54297e7cd8250e48b0f20eaac918e342a1028cef3f9a52ac086381", - "urls": [ - "bzz-raw://a500ad81dea226f9910e6b50f99a9ff930105e393a692cbfb2185e4cdb4424ae", - "dweb:/ipfs/QmVbUQpXNMmMWRiy4FvBNczzq46BMGfUoBikvSHNiCxVTq" - ], - "license": "MIT" - } - }, - "version": 1 - }, - "id": 104 -} diff --git a/examples/oft-movement/out/test.sol/DSTest.json b/examples/oft-movement/out/test.sol/DSTest.json deleted file mode 100644 index a9d752836..000000000 --- a/examples/oft-movement/out/test.sol/DSTest.json +++ /dev/null @@ -1,620 +0,0 @@ -{ - "abi": [ - { - "type": "function", - "name": "IS_TEST", - "inputs": [], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "failed", - "inputs": [], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "nonpayable" - }, - { - "type": "event", - "name": "log", - "inputs": [ - { - "name": "", - "type": "string", - "indexed": false, - "internalType": "string" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "log_address", - "inputs": [ - { - "name": "", - "type": "address", - "indexed": false, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "log_bytes", - "inputs": [ - { - "name": "", - "type": "bytes", - "indexed": false, - "internalType": "bytes" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "log_bytes32", - "inputs": [ - { - "name": "", - "type": "bytes32", - "indexed": false, - "internalType": "bytes32" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "log_int", - "inputs": [ - { - "name": "", - "type": "int256", - "indexed": false, - "internalType": "int256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "log_named_address", - "inputs": [ - { - "name": "key", - "type": "string", - "indexed": false, - "internalType": "string" - }, - { - "name": "val", - "type": "address", - "indexed": false, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "log_named_bytes", - "inputs": [ - { - "name": "key", - "type": "string", - "indexed": false, - "internalType": "string" - }, - { - "name": "val", - "type": "bytes", - "indexed": false, - "internalType": "bytes" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "log_named_bytes32", - "inputs": [ - { - "name": "key", - "type": "string", - "indexed": false, - "internalType": "string" - }, - { - "name": "val", - "type": "bytes32", - "indexed": false, - "internalType": "bytes32" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "log_named_decimal_int", - "inputs": [ - { - "name": "key", - "type": "string", - "indexed": false, - "internalType": "string" - }, - { - "name": "val", - "type": "int256", - "indexed": false, - "internalType": "int256" - }, - { - "name": "decimals", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "log_named_decimal_uint", - "inputs": [ - { - "name": "key", - "type": "string", - "indexed": false, - "internalType": "string" - }, - { - "name": "val", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - }, - { - "name": "decimals", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "log_named_int", - "inputs": [ - { - "name": "key", - "type": "string", - "indexed": false, - "internalType": "string" - }, - { - "name": "val", - "type": "int256", - "indexed": false, - "internalType": "int256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "log_named_string", - "inputs": [ - { - "name": "key", - "type": "string", - "indexed": false, - "internalType": "string" - }, - { - "name": "val", - "type": "string", - "indexed": false, - "internalType": "string" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "log_named_uint", - "inputs": [ - { - "name": "key", - "type": "string", - "indexed": false, - "internalType": "string" - }, - { - "name": "val", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "log_string", - "inputs": [ - { - "name": "", - "type": "string", - "indexed": false, - "internalType": "string" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "log_uint", - "inputs": [ - { - "name": "", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "logs", - "inputs": [ - { - "name": "", - "type": "bytes", - "indexed": false, - "internalType": "bytes" - } - ], - "anonymous": false - } - ], - "bytecode": { - "object": "0x60806040526000805460ff1916600117905534801561001d57600080fd5b5061024e8061002d6000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063ba414fa61461003b578063fa7626d414610057575b600080fd5b610043610064565b604051901515815260200160405180910390f35b6000546100439060ff1681565b60008054610100900460ff16156100845750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561018a5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190526519985a5b195960d21b82840152825180830384018152606083019093526000929091610112917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc4916080016101bf565b60408051601f198184030181529082905261012c916101e3565b6000604051808303816000865af19150503d8060008114610169576040519150601f19603f3d011682016040523d82523d6000602084013e61016e565b606091505b509150508080602001905181019061018691906101f6565b9150505b919050565b6000815160005b818110156101b05760208185018101518683015201610196565b50600093019283525090919050565b6001600160e01b03198316815260006101db600483018461018f565b949350505050565b60006101ef828461018f565b9392505050565b60006020828403121561020857600080fd5b815180151581146101ef57600080fdfea26469706673582212207c44e696e599cb3d00d97c440ac0ff1f1566330039c8f2218fc2fd2ef2806bb464736f6c63430008160033", - "sourceMap": "715:19781:85:-:0;;;1572:26;;;-1:-1:-1;;1572:26:85;1594:4;1572:26;;;715:19781;;;;;;;;;;;;;;;;", - "linkReferences": {} - }, - "deployedBytecode": { - "object": "0x608060405234801561001057600080fd5b50600436106100365760003560e01c8063ba414fa61461003b578063fa7626d414610057575b600080fd5b610043610064565b604051901515815260200160405180910390f35b6000546100439060ff1681565b60008054610100900460ff16156100845750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561018a5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190526519985a5b195960d21b82840152825180830384018152606083019093526000929091610112917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc4916080016101bf565b60408051601f198184030181529082905261012c916101e3565b6000604051808303816000865af19150503d8060008114610169576040519150601f19603f3d011682016040523d82523d6000602084013e61016e565b606091505b509150508080602001905181019061018691906101f6565b9150505b919050565b6000815160005b818110156101b05760208185018101518683015201610196565b50600093019283525090919050565b6001600160e01b03198316815260006101db600483018461018f565b949350505050565b60006101ef828461018f565b9392505050565b60006020828403121561020857600080fd5b815180151581146101ef57600080fdfea26469706673582212207c44e696e599cb3d00d97c440ac0ff1f1566330039c8f2218fc2fd2ef2806bb464736f6c63430008160033", - "sourceMap": "715:19781:85:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1819:584;;;:::i;:::-;;;179:14:132;;172:22;154:41;;142:2;127:18;1819:584:85;;;;;;;1572:26;;;;;;;;;1819:584;1853:4;1873:7;;;;;;;1869:528;;;-1:-1:-1;1903:7:85;;;;;;;;1819:584::o;1869:528::-;1941:17;2997:42;2985:55;3066:16;1980:374;;2196:43;;;1671:64;2196:43;;;380:51:132;;;-1:-1:-1;;;447:18:132;;;440:34;2196:43:85;;;;;;;;;353:18:132;;;2196:43:85;;;-1:-1:-1;;1671:64:85;;2086:175;;2135:34;;2086:175;;;:::i;:::-;;;;-1:-1:-1;;2086:175:85;;;;;;;;;;2047:232;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2020:259;;;2323:7;2312:27;;;;;;;;;;;;:::i;:::-;2297:42;;2002:352;1980:374;2374:12;1819:584;-1:-1:-1;1819:584:85:o;485:322:132:-;526:3;564:5;558:12;588:1;598:128;612:6;609:1;606:13;598:128;;;709:4;694:13;;;690:24;;684:31;671:11;;;664:52;627:12;598:128;;;-1:-1:-1;781:1:132;745:16;;770:13;;;-1:-1:-1;745:16:132;;485:322;-1:-1:-1;485:322:132:o;812:278::-;-1:-1:-1;;;;;;997:33:132;;985:46;;967:3;1047:37;1081:1;1072:11;;1064:6;1047:37;:::i;:::-;1040:44;812:278;-1:-1:-1;;;;812:278:132:o;1095:189::-;1224:3;1249:29;1274:3;1266:6;1249:29;:::i;:::-;1242:36;1095:189;-1:-1:-1;;;1095:189:132:o;1289:277::-;1356:6;1409:2;1397:9;1388:7;1384:23;1380:32;1377:52;;;1425:1;1422;1415:12;1377:52;1457:9;1451:16;1510:5;1503:13;1496:21;1489:5;1486:32;1476:60;;1532:1;1529;1522:12", - "linkReferences": {} - }, - "methodIdentifiers": { "IS_TEST()": "fa7626d4", "failed()": "ba414fa6" }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.22+commit.4fc1097e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"name\":\"log\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"log_address\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"log_bytes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"log_bytes32\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"name\":\"log_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"val\",\"type\":\"address\"}],\"name\":\"log_named_address\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"val\",\"type\":\"bytes\"}],\"name\":\"log_named_bytes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"val\",\"type\":\"bytes32\"}],\"name\":\"log_named_bytes32\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"val\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"log_named_decimal_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"val\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"log_named_decimal_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"val\",\"type\":\"int256\"}],\"name\":\"log_named_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"val\",\"type\":\"string\"}],\"name\":\"log_named_string\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"val\",\"type\":\"uint256\"}],\"name\":\"log_named_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"name\":\"log_string\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"log_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"logs\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"IS_TEST\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"failed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/test.sol\":\"DSTest\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@layerzerolabs/=node_modules/@layerzerolabs/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/\",\":forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/\",\":hardhat-deploy/=node_modules/hardhat-deploy/\",\":hardhat/=node_modules/hardhat/\",\":solidity-bytes-utils/=node_modules/solidity-bytes-utils/\"]},\"sources\":{\"node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/test.sol\":{\"keccak256\":\"0x8758531bbac3972efcf1fa46383dbe1d276406fe527bc7abb2f236486278e83b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://1f64264d61506847acf8761e84aff690cebe830958eac00bac7924d8be569240\",\"dweb:/ipfs/QmSekDJvJ82MZAmr63n7YvfLzQ7gS4NLSHPmHL3GN3rw8k\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.22+commit.4fc1097e" }, - "language": "Solidity", - "output": { - "abi": [ - { - "inputs": [ - { - "internalType": "string", - "name": "", - "type": "string", - "indexed": false - } - ], - "type": "event", - "name": "log", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address", - "indexed": false - } - ], - "type": "event", - "name": "log_address", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes", - "indexed": false - } - ], - "type": "event", - "name": "log_bytes", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32", - "indexed": false - } - ], - "type": "event", - "name": "log_bytes32", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "int256", - "name": "", - "type": "int256", - "indexed": false - } - ], - "type": "event", - "name": "log_int", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "string", - "name": "key", - "type": "string", - "indexed": false - }, - { - "internalType": "address", - "name": "val", - "type": "address", - "indexed": false - } - ], - "type": "event", - "name": "log_named_address", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "string", - "name": "key", - "type": "string", - "indexed": false - }, - { - "internalType": "bytes", - "name": "val", - "type": "bytes", - "indexed": false - } - ], - "type": "event", - "name": "log_named_bytes", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "string", - "name": "key", - "type": "string", - "indexed": false - }, - { - "internalType": "bytes32", - "name": "val", - "type": "bytes32", - "indexed": false - } - ], - "type": "event", - "name": "log_named_bytes32", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "string", - "name": "key", - "type": "string", - "indexed": false - }, - { - "internalType": "int256", - "name": "val", - "type": "int256", - "indexed": false - }, - { - "internalType": "uint256", - "name": "decimals", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "log_named_decimal_int", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "string", - "name": "key", - "type": "string", - "indexed": false - }, - { - "internalType": "uint256", - "name": "val", - "type": "uint256", - "indexed": false - }, - { - "internalType": "uint256", - "name": "decimals", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "log_named_decimal_uint", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "string", - "name": "key", - "type": "string", - "indexed": false - }, - { - "internalType": "int256", - "name": "val", - "type": "int256", - "indexed": false - } - ], - "type": "event", - "name": "log_named_int", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "string", - "name": "key", - "type": "string", - "indexed": false - }, - { - "internalType": "string", - "name": "val", - "type": "string", - "indexed": false - } - ], - "type": "event", - "name": "log_named_string", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "string", - "name": "key", - "type": "string", - "indexed": false - }, - { - "internalType": "uint256", - "name": "val", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "log_named_uint", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "string", - "name": "", - "type": "string", - "indexed": false - } - ], - "type": "event", - "name": "log_string", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256", - "indexed": false - } - ], - "type": "event", - "name": "log_uint", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes", - "indexed": false - } - ], - "type": "event", - "name": "logs", - "anonymous": false - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "IS_TEST", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "function", - "name": "failed", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - } - ], - "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, - "userdoc": { "kind": "user", "methods": {}, "version": 1 } - }, - "settings": { - "remappings": [ - "@layerzerolabs/=node_modules/@layerzerolabs/", - "@openzeppelin/=node_modules/@openzeppelin/", - "ds-test/=node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/", - "forge-std/=node_modules/@layerzerolabs/toolbox-foundry/lib/forge-std/", - "hardhat-deploy/=node_modules/hardhat-deploy/", - "hardhat/=node_modules/hardhat/", - "solidity-bytes-utils/=node_modules/solidity-bytes-utils/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { - "node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/test.sol": "DSTest" - }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "node_modules/@layerzerolabs/toolbox-foundry/lib/ds-test/test.sol": { - "keccak256": "0x8758531bbac3972efcf1fa46383dbe1d276406fe527bc7abb2f236486278e83b", - "urls": [ - "bzz-raw://1f64264d61506847acf8761e84aff690cebe830958eac00bac7924d8be569240", - "dweb:/ipfs/QmSekDJvJ82MZAmr63n7YvfLzQ7gS4NLSHPmHL3GN3rw8k" - ], - "license": "GPL-3.0-or-later" - } - }, - "version": 1 - }, - "id": 85 -}